Skip to content

Commit 0b25a43

Browse files
committed
20260110.1
1 parent ba13719 commit 0b25a43

3 files changed

Lines changed: 97 additions & 13 deletions

File tree

Info.plist

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@
1919
<key>CFBundlePackageType</key>
2020
<string>APPL</string>
2121
<key>CFBundleShortVersionString</key>
22-
<string>20260108.1</string>
22+
<string>20260110.1</string>
2323
<key>CFBundleVersion</key>
24-
<string>20260108.1</string>
24+
<string>20260110.1</string>
2525
<key>LSApplicationCategoryType</key>
2626
<string>public.app-category.productivity</string>
2727
<key>LSMinimumSystemVersion</key>

Resources/whats-new.json

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,33 @@
33
{
44
"version": "20260110.1",
55
"release_date": "January 10, 2026",
6-
"introduction": "Critical hotfix release addressing a regression where local MLX models disappeared from the model picker after updating to 20260108.1.",
7-
"highlights": [],
6+
"introduction": "This release introduces support for automated development channel updates, implements API token authentication for external integrations, and fixes critical issues with local MLX models and minimal prompt responses.",
7+
"highlights": [
8+
{
9+
"id": "dev-channel-support",
10+
"icon": "hammer.fill",
11+
"title": "Development Channel Support",
12+
"description": "SAM now supports automatic nightly development builds for early access to features and fixes. Enable 'Receive development updates' in Preferences → General to receive automated pre-release builds (marked as -dev.1, -dev.2, etc.) when changes are available. Development builds are created nightly at 2 AM UTC when changes are pushed, with the last 7 builds kept available. Perfect for users who want to help test new features before stable releases."
13+
},
14+
{
15+
"id": "api-token-auth",
16+
"icon": "key.fill",
17+
"title": "API Token Authentication for External Access",
18+
"description": "SAM's REST API now supports token-based authentication for secure external access. Generate API tokens in Preferences → Advanced → Security, then use them in HTTP headers (Authorization: Bearer <token>) to access SAM's chat completions, tool calls, and other endpoints from external scripts, automation tools, or custom integrations. Tokens can be revoked at any time for security."
19+
}
20+
],
821
"bugfixes": [
922
{
1023
"id": "local-mlx-picker-fix",
1124
"icon": "cpu.fill",
1225
"title": "Local MLX Models Now Appear in Picker",
1326
"description": "Fixed critical regression where local MLX models (like Qwen3-4B) disappeared from model picker after updating to 20260108.1. Issue occurred because model registry was storing paths to tokenizer files instead of the actual model.safetensors file, causing the MLX provider filter to fail. System now correctly registers only primary model files and prioritizes model.safetensors during scans. Existing corrupted registries will auto-heal on next launch."
27+
},
28+
{
29+
"id": "minimal-prompt-response-fix",
30+
"icon": "bubble.left.and.bubble.right.fill",
31+
"title": "Local Models No Longer Fail on Minimal Prompts",
32+
"description": "Fixed issue where local models (MLX/GGUF) would not return responses when given very short or minimal prompts. System now properly handles minimal context scenarios and ensures local models generate appropriate responses even with brief input."
1433
}
1534
],
1635
"improvements": [],

scripts/increment-dev-version.sh

Lines changed: 74 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,23 +12,88 @@ if [ ! -f "$PLIST" ]; then
1212
exit 1
1313
fi
1414

15-
# Get current version
15+
# Calculate today's date (YYYYMMDD)
16+
TODAY_DATE=$(date +"%Y%m%d")
17+
18+
# Get current version from Info.plist
1619
CURRENT_VERSION=$(/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" "$PLIST")
1720

1821
if [[ "$CURRENT_VERSION" =~ -dev\.([0-9]+)$ ]]; then
19-
# Already development version, increment build number
22+
# Already a development version
2023
DEV_NUM="${BASH_REMATCH[1]}"
21-
NEW_DEV_NUM=$((DEV_NUM + 1))
2224
BASE_VERSION="${CURRENT_VERSION%-dev.*}"
23-
NEW_VERSION="${BASE_VERSION}-dev.${NEW_DEV_NUM}"
24-
echo "Incrementing development build: $CURRENT_VERSION$NEW_VERSION"
25+
BASE_DATE="${BASE_VERSION%.*}"
26+
27+
# Check if base version matches today's date
28+
if [[ "$BASE_DATE" == "$TODAY_DATE" ]]; then
29+
# Same day, increment dev number
30+
NEW_DEV_NUM=$((DEV_NUM + 1))
31+
NEW_VERSION="${BASE_VERSION}-dev.${NEW_DEV_NUM}"
32+
echo "Incrementing development build: $CURRENT_VERSION$NEW_VERSION"
33+
else
34+
# New day, calculate new base version and reset to -dev.1
35+
# Check for existing stable releases today
36+
LATEST_STABLE=$(git tag -l "${TODAY_DATE}.*" --sort=-version:refname 2>/dev/null | grep -v '\-dev\.' | head -1 || echo "")
37+
38+
if [ -n "$LATEST_STABLE" ]; then
39+
# Stable release exists today, increment patch number
40+
PATCH_NUM="${LATEST_STABLE##*.}"
41+
NEW_PATCH=$((PATCH_NUM + 1))
42+
NEW_BASE_VERSION="${TODAY_DATE}.${NEW_PATCH}"
43+
else
44+
# No stable release today, start with .1
45+
NEW_BASE_VERSION="${TODAY_DATE}.1"
46+
fi
47+
48+
NEW_VERSION="${NEW_BASE_VERSION}-dev.1"
49+
echo "New day development build: $CURRENT_VERSION$NEW_VERSION"
50+
fi
2551
else
26-
# Stable version, add -dev.1 suffix
27-
NEW_VERSION="${CURRENT_VERSION}-dev.1"
28-
echo "Creating first development build: $CURRENT_VERSION$NEW_VERSION"
52+
# Stable version or first run
53+
# Update to today's date if needed
54+
BASE_DATE="${CURRENT_VERSION%.*}"
55+
56+
if [[ "$BASE_DATE" != "$TODAY_DATE" ]]; then
57+
# Different day, need to update base version
58+
echo "Date changed from $BASE_DATE to $TODAY_DATE"
59+
60+
# Check for existing stable releases today
61+
LATEST_STABLE=$(git tag -l "${TODAY_DATE}.*" --sort=-version:refname 2>/dev/null | grep -v '\-dev\.' | head -1 || echo "")
62+
63+
if [ -n "$LATEST_STABLE" ]; then
64+
# Stable release exists today, increment patch number
65+
PATCH_NUM="${LATEST_STABLE##*.}"
66+
NEW_PATCH=$((PATCH_NUM + 1))
67+
NEW_BASE_VERSION="${TODAY_DATE}.${NEW_PATCH}"
68+
echo "Found stable release $LATEST_STABLE, incrementing to $NEW_BASE_VERSION"
69+
else
70+
# No stable release today, start with .1
71+
NEW_BASE_VERSION="${TODAY_DATE}.1"
72+
fi
73+
74+
# Update Info.plist base version first
75+
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $NEW_BASE_VERSION" "$PLIST"
76+
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $NEW_BASE_VERSION" "$PLIST"
77+
else
78+
# Same day as current version
79+
# Check if stable release with this exact version exists
80+
if git tag -l "$CURRENT_VERSION" 2>/dev/null | grep -q "^${CURRENT_VERSION}$"; then
81+
# Stable release exists with current version, increment patch
82+
PATCH_NUM="${CURRENT_VERSION##*.}"
83+
NEW_PATCH=$((PATCH_NUM + 1))
84+
NEW_BASE_VERSION="${TODAY_DATE}.${NEW_PATCH}"
85+
echo "Stable release $CURRENT_VERSION exists, incrementing to $NEW_BASE_VERSION"
86+
else
87+
# No stable release with current version, use as-is
88+
NEW_BASE_VERSION="$CURRENT_VERSION"
89+
fi
90+
fi
91+
92+
NEW_VERSION="${NEW_BASE_VERSION}-dev.1"
93+
echo "Creating development build: $NEW_BASE_VERSION$NEW_VERSION"
2994
fi
3095

31-
# Update Info.plist
96+
# Update Info.plist with new dev version
3297
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $NEW_VERSION" "$PLIST"
3398

3499
echo "✅ Version updated to: $NEW_VERSION"

0 commit comments

Comments
 (0)