Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
457 commits
Select commit Hold shift + click to select a range
4e86ddd
test(serve): the memory guard's exit reaches runtime.shutdown as cras…
sosidudku1 Nov 12, 2026
90ec43c
L19: run at approval level 4 so only the key guards can raise a card
sosidudku1 Nov 12, 2026
d935fac
L16: run at approval level 4 so only the specific guards can raise a …
sosidudku1 Nov 12, 2026
79c953c
L17: say in the header that it runs at level 1 and what that proves
sosidudku1 Nov 12, 2026
bbabb78
Desktop setup: use a .gguf file you already have (ATO-1402)
sosidudku1 Nov 12, 2026
4604624
Merge the Local / Cloud / Custom setup (#1189) and keep only the .ggu…
sosidudku1 Nov 12, 2026
e90b59c
Onboarding: drop the unused hint style left after ATO-816
sosidudku1 Nov 12, 2026
8996bbc
fix(desktop): err_file names only our bundle, Node or a package; erro…
sosidudku1 Nov 12, 2026
fe9d44b
Model chips: MoE from the catalogue flag or the name, not the id alon…
sosidudku1 Nov 12, 2026
2630460
fix(config): the fresh config serve reads for /api/local-models is a …
sosidudku1 Nov 12, 2026
9a755e8
Built-in tools: Email says it sends; windows and clipboard get their …
sosidudku1 Nov 12, 2026
3163972
fix(cli): models engine and the CPU fallback name the key they set, s…
sosidudku1 Nov 12, 2026
a080398
fix(guard): computed git behind front commands, aliases through varia…
sosidudku1 Nov 12, 2026
b0d0f8a
Built-in tools: os.screen tools join Screen and images, and its line …
sosidudku1 Nov 12, 2026
b7e5e0b
Merge PR #1117 (fix/ato-1321-hook-bash-docs)
sosidudku1 Nov 12, 2026
6c6b5d1
Merge PR #1118 (fix/ato-1398-mid-reply-timeout-retry)
sosidudku1 Nov 12, 2026
a8e5ee5
Merge PR #1122 (fix/issue-1121-local-workdir)
sosidudku1 Nov 12, 2026
0d695f9
Merge PR #1123 (fix/ato-1397-anthropic-deepseek-400)
sosidudku1 Nov 12, 2026
1c58daa
Merge PR #1124 (fix/reply-polish-edge-cases)
sosidudku1 Nov 12, 2026
f2aec4d
Merge PR #1125 (fix/ato-1330-keep-unknown-compact-mode)
sosidudku1 Nov 12, 2026
06e952f
Merge PR #1130 (fix/fusion-spend-accounting)
sosidudku1 Nov 12, 2026
f77418e
Merge PR #1131 (fix/gpt6-reasoning-params)
sosidudku1 Nov 12, 2026
b1d8ed4
Merge PR #1132 (fix/tui-fold-line-says-what-was-done)
sosidudku1 Nov 12, 2026
00a4771
Merge PR #1133 (chore/tui-drop-chat-line-builder)
sosidudku1 Nov 12, 2026
cdea529
Merge PR #1134 (fix/trace-replay-search-mode)
sosidudku1 Nov 12, 2026
3869177
Merge PR #1135 (fix/ato-1333-missing-path-budget)
sosidudku1 Nov 12, 2026
3758d76
Merge PR #1136 (fix/ato-1365-mcp-wire-name)
sosidudku1 Nov 12, 2026
edb48d4
Merge PR #1137 (fix/ato-1296-git-tool-dupes)
sosidudku1 Nov 12, 2026
36ff74c
Merge PR #1138 (fix/ato-1332-deny-rules-safe-shell)
sosidudku1 Nov 12, 2026
764b5dd
Merge PR #1139 (fix/fusion-worker-stop-and-swap)
sosidudku1 Nov 12, 2026
66a303e
Merge PR #1140 (fix/ato-1353-browser-guard-print)
sosidudku1 Nov 12, 2026
5ac343d
Merge PR #1141 (fix/openrouter-catalog-new-models)
sosidudku1 Nov 12, 2026
ec64c76
Merge PR #1147 (fix/fable-default-effort)
sosidudku1 Nov 12, 2026
9b76412
Merge PR #1148 (fix/ato-1399-tool-schema-bool)
sosidudku1 Nov 12, 2026
1741ae7
Merge PR #1149 (fix/fusion-local-health-per-server)
sosidudku1 Nov 12, 2026
e5085b8
Merge PR #1151 (fix/ato-1348-update-busy-keeps-core)
sosidudku1 Nov 12, 2026
9719a29
Merge PR #1153 (fix/ato-1271-trim-session-turns)
sosidudku1 Nov 12, 2026
2ad4f5c
Merge PR #1154 (fix/ato-1294-think-template-profile)
sosidudku1 Nov 12, 2026
4b980d2
Merge PR #1155 (fix/ato-1295-reply-reserve-thinking)
sosidudku1 Nov 12, 2026
64ff8e5
Merge PR #1156 (fix/ato-1359-cloud-thinking-compaction)
sosidudku1 Nov 12, 2026
243452c
Merge PR #1162 (fix/ato-1298-rollback-last-turn)
sosidudku1 Nov 12, 2026
6dd66f0
Merge PR #1163 (fix/ato-1382-history-done-line)
sosidudku1 Nov 12, 2026
3961da3
Merge PR #1164 (fix/ato-1302-terminal-real-retry)
sosidudku1 Nov 12, 2026
ac30ab5
Merge PR #1170 (fix/ato-1322-compaction-spend)
sosidudku1 Nov 12, 2026
8700976
Merge PR #1171 (fix/ato-1323-overnight-limit-exit)
sosidudku1 Nov 12, 2026
40d04f0
Merge PR #1172 (fix/ato-1324-overnight-approval-level)
sosidudku1 Nov 12, 2026
1752f3c
Merge PR #1173 (fix/ato-1350-no-title-after-budget-stop)
sosidudku1 Nov 12, 2026
b8fd438
Merge PR #1174 (fix/ato-1358-overnight-telegram-lock)
sosidudku1 Nov 12, 2026
24a3f0d
Merge PR #1175 (fix/ato-1288-goal-shares-budget)
sosidudku1 Nov 12, 2026
8a2569b
Merge PR #1176 (fix/ato-1367-approval-wait-time-limit)
sosidudku1 Nov 12, 2026
aec744b
Merge PR #1178 (fix/ato-1413-handoff-once)
sosidudku1 Nov 12, 2026
768a85d
Merge PR #1184 (fix/ato-1403-linux-repo-desktop)
sosidudku1 Nov 12, 2026
cf0dc34
Merge PR #1186 (fix/ato-1265-engine-choice-wins)
sosidudku1 Nov 12, 2026
41c0774
Merge PR #1190 (fix/ato-1420-worker-budget-stop-test)
sosidudku1 Nov 12, 2026
2f3ad14
Merge PR #1192 (feat/ato-1159-audit-skill)
sosidudku1 Nov 12, 2026
8ac9213
Merge PR #1193 (feat/ato-1160-plain-writing-skill)
sosidudku1 Nov 12, 2026
a47bc60
Merge PR #1194 (feat/ato-1161-pre-push-check-skill)
sosidudku1 Nov 12, 2026
d8fe883
Merge PR #1195 (fix/ato-1378-untrusted-browser)
sosidudku1 Nov 12, 2026
5b63b92
Merge PR #1196 (feat/ato-1015-code-graph-skill)
sosidudku1 Nov 12, 2026
85b633e
Merge PR #1202 (fix/ato-1283-groq-413)
sosidudku1 Nov 12, 2026
c1cccd3
Merge PR #1205 (fix/ato-1247-test-run-tag)
sosidudku1 Nov 12, 2026
9917335
Merge PR #1207 (fix/ato-1179-debug-zip-owner-only)
sosidudku1 Nov 12, 2026
da05d5f
Merge PR #1208 (fix/ato-1177-search-key-stdin)
sosidudku1 Nov 12, 2026
69145c5
Merge PR #1209 (fix/ato-1178-mcp-readonly-local-only)
sosidudku1 Nov 12, 2026
34243ca
Merge PR #1210 (fix/ato-1176-redaction-tails)
sosidudku1 Nov 12, 2026
32982b5
Merge PR #1211 (fix/ato-1181-browser-grant-per-site)
sosidudku1 Nov 12, 2026
ca59d47
Merge PR #1212 (docs/ato-783-security-policy)
sosidudku1 Nov 12, 2026
0266480
Merge PR #1213 (fix/ato-1182-http-approval-per-host)
sosidudku1 Nov 12, 2026
a6d1bbe
Merge PR #1214 (fix/ato-1276-ollama-context-window)
sosidudku1 Nov 12, 2026
60d479a
Merge PR #1215 (fix/ato-1415-npm-audit)
sosidudku1 Nov 12, 2026
181bef0
Merge PR #1216 (fix/ato-1263-guard-bypasses)
sosidudku1 Nov 12, 2026
75e8134
Merge PR #1217 (fix/ato-1407-stop-plugin-mcp)
sosidudku1 Nov 12, 2026
6b4676a
Merge PR #1218 (fix/ato-1286-sentry-per-install-limit)
sosidudku1 Nov 12, 2026
c709eb9
Merge PR #1221 (fix/ato-1417-dropped-tool-notice)
sosidudku1 Nov 12, 2026
d472a51
Merge PR #1222 (fix/ato-905-shell-preview-quotes)
sosidudku1 Nov 12, 2026
55ceb42
Merge PR #1223 (fix/ato-913-web-fetch-spill)
sosidudku1 Nov 12, 2026
88c17c4
Merge PR #1224 (fix/ato-922-llama-cap-source-log)
sosidudku1 Nov 12, 2026
2c435f8
Merge PR #1225 (fix/ato-912-cache-write-cost)
sosidudku1 Nov 12, 2026
2abdccc
Merge PR #1227 (fix/ato-1420-retry-after-clear)
sosidudku1 Nov 12, 2026
ab7b0f8
Merge PR #1228 (fix/ato-1420-retry-after-clear-tui)
sosidudku1 Nov 12, 2026
55f45d1
Merge PR #1233 (fix/ato-1282-gemini-compat)
sosidudku1 Nov 12, 2026
f84d4d0
Merge PR #1234 (fix/ato-1200-providers-status)
sosidudku1 Nov 12, 2026
d51f469
Merge PR #1235 (fix/ato-1275-1278-local-engine-fail-fast)
sosidudku1 Nov 12, 2026
b56081d
Merge PR #1237 (fix/ato-1270-approval-rules-precheck)
sosidudku1 Nov 12, 2026
cb77391
Merge PR #1238 (fix/ato-1274-1277-local-401-plain-words)
sosidudku1 Nov 12, 2026
ee2678d
Merge PR #1241 (fix/ato-818-import-summary)
sosidudku1 Nov 12, 2026
c3c1ff5
Merge PR #1244 (fix/ato-425-image-gen-tails)
sosidudku1 Nov 12, 2026
2f1932c
Merge PR #1248 (fix/ato-1209-local-tools-unsupported)
sosidudku1 Nov 12, 2026
b2361fc
Merge PR #1249 (fix/ato-1279-local-engine-midstream-retry)
sosidudku1 Nov 12, 2026
00ce2ac
Merge PR #1251 (fix/ato-1406-fusion-failure-breaker)
sosidudku1 Nov 12, 2026
ca2ef54
Merge PR #1252 (fix/ato-1357-local-leg-after-cancel)
sosidudku1 Nov 12, 2026
1602e6c
Merge PR #1253 (fix/ato-1267-fusion-leftovers)
sosidudku1 Nov 12, 2026
30905ec
Merge int/w1-main
sosidudku1 Nov 12, 2026
5716d23
Merge PR #1113 (fix/ato-1346-dangerous-label)
sosidudku1 Nov 12, 2026
1c703e9
Merge PR #1114 (fix/ato-1303-studio-load-hint)
sosidudku1 Nov 12, 2026
b80c7d7
Merge PR #1115 (fix/ato-1366-overnight-report-copy)
sosidudku1 Nov 12, 2026
02fae0d
Merge PR #1116 (fix/ato-1329-worker-stop-reset)
sosidudku1 Nov 12, 2026
e7a1f0c
Merge PR #1126 (fix/ato-1393-approval-kind-labels)
sosidudku1 Nov 12, 2026
4186663
Merge PR #1127 (fix/ato-1396-approval-analytics-kinds)
sosidudku1 Nov 12, 2026
5a6c478
Merge PR #1128 (fix/ato-1355-fanout-task-count)
sosidudku1 Nov 12, 2026
b97fbbb
Merge PR #1142 (bugs-1360-mmproj-fetch)
sosidudku1 Nov 12, 2026
5f6ce3d
Merge PR #1143 (bugs-1370-vision-fetch-button)
sosidudku1 Nov 12, 2026
d8d90e7
Merge PR #1144 (bugs-1373-vision-restart)
sosidudku1 Nov 12, 2026
4b12a95
Merge PR #1145 (bugs-1371-text-still-works)
sosidudku1 Nov 12, 2026
ec85921
Merge PR #1146 (bugs-1342-steady-eta)
sosidudku1 Nov 12, 2026
d8cdb0c
Merge PR #1150 (fix/desktop-inspector-reader-shift)
sosidudku1 Nov 12, 2026
0dc5ab1
Merge PR #1152 (fix/ato-1351-1352-core-stop-on-quit)
sosidudku1 Nov 12, 2026
ec6a61f
Merge PR #1157 (fix/ato-1400-studio-this-computer)
sosidudku1 Nov 12, 2026
6f2182e
Merge PR #1158 (fix/ato-1394-studio-refresh-loaded)
sosidudku1 Nov 12, 2026
3d23ac5
Merge PR #1159 (feat/ato-1304-studio-follows-chat)
sosidudku1 Nov 12, 2026
0b66e45
Merge PR #1160 (feat/ato-1307-studio-list-one-place)
sosidudku1 Nov 12, 2026
bdaa333
Merge PR #1161 (feat/ato-1395-studio-download)
sosidudku1 Nov 12, 2026
daf5e68
Merge PR #1165 (fix/ato-1300-regenerate-last-reply)
sosidudku1 Nov 12, 2026
edc65f8
Merge PR #1166 (fix/ato-1379-polished-reply-live)
sosidudku1 Nov 12, 2026
5996caf
Merge PR #1167 (fix/ato-1382-desktop-step-labels)
sosidudku1 Nov 12, 2026
92f7acd
Merge PR #1169 (bugs-1401-lmstudio-local-app)
sosidudku1 Nov 12, 2026
9d9c6a8
Merge PR #1179 (fix/ato-1281-wizard-missing-row)
sosidudku1 Nov 12, 2026
7c5e8e1
Merge PR #1180 (fix/ato-916-ci-on-xp-build)
sosidudku1 Nov 12, 2026
3de2cb1
Merge PR #1181 (fix/ato-1280-linux-epipe)
sosidudku1 Nov 12, 2026
c77ba7d
Merge PR #1182 (fix/ato-1416-studio-improve-temperature)
sosidudku1 Nov 12, 2026
345cf51
Merge PR #1183 (fix/ato-915-skills-hub-smoke-offline)
sosidudku1 Nov 12, 2026
70f0b8a
Merge PR #1185 (fix/ato-1403-linux-repo-desktop-xp)
sosidudku1 Nov 12, 2026
88fe06e
Merge PR #1187 (fix/ato-1195-wizard-fail-reasons)
sosidudku1 Nov 12, 2026
c32c992
Merge PR #1188 (fix/ato-1419-memory-guard-resumes)
sosidudku1 Nov 12, 2026
d615324
Merge PR #1189 (fix/ato-816-onboarding-custom)
sosidudku1 Nov 12, 2026
0afb395
Merge PR #1168 (bugs-816-local-apps-onboarding)
sosidudku1 Nov 12, 2026
c378c65
Merge PR #1191 (fix/ato-1420-studio-engine-status)
sosidudku1 Nov 12, 2026
26b9fcb
Merge PR #1197 (fix/ato-1414-smoke-flaky-waits)
sosidudku1 Nov 12, 2026
e63c0a4
Merge PR #1198 (fix/ato-460-models-page-names)
sosidudku1 Nov 12, 2026
ac97d7d
Merge PR #1199 (fix/ato-1374-attack-kit)
sosidudku1 Nov 12, 2026
b55e75b
Merge PR #1200 (fix/ato-1375-1383-poisoned-mcp)
sosidudku1 Nov 12, 2026
155fca1
Merge PR #1201 (fix/ato-1381-malicious-file)
sosidudku1 Nov 12, 2026
df6527d
Merge PR #1203 (fix/ato-1387-key-exfiltration)
sosidudku1 Nov 12, 2026
0f05439
Merge PR #1204 (fix/ato-1390-own-secrets-level-4)
sosidudku1 Nov 12, 2026
e0daed4
Merge PR #1206 (fix/ato-1247-test-run-tag-desktop)
sosidudku1 Nov 12, 2026
ef3e472
Merge PR #1219 (fix/ato-826-desktop-smoke-baseline)
sosidudku1 Nov 12, 2026
eddd338
Merge PR #1220 (fix/ato-1286-sentry-limit-desktop)
sosidudku1 Nov 12, 2026
752ca82
Merge PR #1226 (fix/ato-1285-agent-crash-loop)
sosidudku1 Nov 12, 2026
51939a8
Merge PR #1229 (fix/ato-1420-retry-after-clear-desktop)
sosidudku1 Nov 12, 2026
633faba
Merge PR #1230 (fix/ato-1417-dropped-tool-notice-desktop)
sosidudku1 Nov 12, 2026
3e86a94
Merge PR #1231 (fix/ato-1407-stop-plugin-mcp-desktop)
sosidudku1 Nov 12, 2026
557e6ad
Merge PR #1232 (fix/ato-492-model-chips)
sosidudku1 Nov 12, 2026
ebcb5d9
Merge PR #1236 (fix/ato-845-subscription-sign-in)
sosidudku1 Nov 12, 2026
fa20a0b
Merge PR #1239 (test/ato-1376-1385-browser-attack)
sosidudku1 Nov 12, 2026
2511337
Merge PR #1240 (test/ato-1391-1392-plugin-scenarios)
sosidudku1 Nov 12, 2026
df527a8
Merge PR #1242 (fix/ato-814-studio-token-cost)
sosidudku1 Nov 12, 2026
263dcb3
Merge PR #1243 (fix/ato-807-inpaint-brush)
sosidudku1 Nov 12, 2026
3debe32
Merge PR #1245 (fix/ato-1410-model-names-ram)
sosidudku1 Nov 12, 2026
bad85ed
Merge PR #1246 (fix/ato-528-builtin-tool-groups)
sosidudku1 Nov 12, 2026
f89a3a7
Merge PR #1247 (fix/ato-1418-local-apps-settings)
sosidudku1 Nov 12, 2026
b1e9e57
Merge PR #1250 (fix/ato-1213-remote-models-settings)
sosidudku1 Nov 12, 2026
97da449
fix(session): close the doc comment above LastTurnRollbackOptions
sosidudku1 Nov 12, 2026
5655c73
fix(desktop): cast the guarded stream through unknown so tsc accepts it
sosidudku1 Nov 12, 2026
fdd899e
Merge PR #1162 fix (fix/ato-1298-rollback-last-turn)
sosidudku1 Nov 12, 2026
c4a9cdc
Merge int/w1-main
sosidudku1 Nov 12, 2026
7756e02
Merge PR #1181 fix (fix/ato-1280-linux-epipe)
sosidudku1 Nov 12, 2026
49d1a33
test(turn): count the new localStreamCutRetry field in fresh turn state
sosidudku1 Nov 12, 2026
c88a978
test(config): expect requestTimeoutMs in the local models default key…
sosidudku1 Nov 12, 2026
1044dbb
test(serve): reset the shutdown test's edges without narrowing them t…
sosidudku1 Nov 12, 2026
7618641
test(desktop): stub the vision-fetch helpers in the picker tests that…
sosidudku1 Nov 12, 2026
b9b7728
test(fusion): keep the local dispatch line out of the budget log check
sosidudku1 Nov 12, 2026
317346d
fix(desktop): read a better_sqlite3.node load failure as native_modul…
sosidudku1 Nov 12, 2026
ba8d470
test: give the approval-deadline stub tool a full tool result
sosidudku1 Nov 12, 2026
463f3ea
test: add timing to the tool-disabled completion helper
sosidudku1 Nov 12, 2026
a87cbd0
test: assert the captured call exists in the team-tag test
sosidudku1 Nov 12, 2026
9714776
test: keep affectedResources a plain array in the site-grant test
sosidudku1 Nov 12, 2026
3225a95
test: type the third createEphemeralSession arg in the fusion delegat…
sosidudku1 Nov 12, 2026
b198db8
test(desktop): give the onboarding ready-label test obCloudReadyLabel…
sosidudku1 Nov 12, 2026
02bbd7f
test(tui): add timestamp to the chat message fixtures
sosidudku1 Nov 12, 2026
9692228
test: use a marker the system prompt cannot contain in the ATO-1397 test
sosidudku1 Nov 12, 2026
ffb7de9
test: count only session deletes in the batch-size prune test
sosidudku1 Nov 12, 2026
01e137c
test(skill): expect the passed-through token masked in the run_script…
sosidudku1 Nov 12, 2026
2bbacff
Merge fix/ato-1302-terminal-real-retry into fix/ato-1420-retry-after-…
sosidudku1 Nov 12, 2026
75351fd
test(tui): add timestamp to the cleared-chat message fixtures
sosidudku1 Nov 12, 2026
b77b617
test(chat): use a non-tools 400 for the invalid request wording
sosidudku1 Nov 12, 2026
f6d16e9
test(desktop): give the Custom tab test a URL global and skip comment…
sosidudku1 Nov 12, 2026
f6e591f
test(desktop): T48 expects Add Ollama to open the Custom tab (ATO-1418)
sosidudku1 Nov 12, 2026
fa67088
test(shell): expect the readable double-quoted bash -c preview
sosidudku1 Nov 12, 2026
542bd96
test(desktop): ban only the old load-first hint, not Download the mod…
sosidudku1 Nov 12, 2026
105bdff
test(tui): find the downloading row by the model's display name
sosidudku1 Nov 12, 2026
9de2cd7
Merge remote-tracking branch 'origin/fix/ato-1303-studio-load-hint' i…
sosidudku1 Nov 12, 2026
436d4ef
test(desktop): expect null for the missing download options after the…
sosidudku1 Nov 12, 2026
b5bc987
test(http): read each hop's headers from the curl header file when on…
sosidudku1 Nov 12, 2026
d357a91
Merge remote-tracking branch 'origin/feat/ato-1395-studio-download' i…
sosidudku1 Nov 12, 2026
007bd8a
Merge remote-tracking branch 'origin/bugs-1370-vision-fetch-button' i…
sosidudku1 Nov 12, 2026
904f633
test(desktop): give the restore click's fake event a preventDefault (…
sosidudku1 Nov 12, 2026
689d822
Merge fix/fusion-local-health-per-server (per-server local-leg health)
sosidudku1 Nov 12, 2026
8b2095c
fix(fusion): check the cut-off worker's own server before renewing
sosidudku1 Nov 12, 2026
6c708c3
test(config): the read-only load test uses the oldest config version …
sosidudku1 Nov 12, 2026
e587c8c
Desktop: the approval card says when a read is the agent's own secret…
sosidudku1 Nov 12, 2026
9dde759
Merge PR #1122 (run-1 fixes)
sosidudku1 Nov 12, 2026
95420ed
Merge PR #1123 (run-1 fixes)
sosidudku1 Nov 12, 2026
c2e1016
Merge PR #1153 (run-1 fixes)
sosidudku1 Nov 12, 2026
2e10d5e
Merge PR #1164 (run-1 fixes)
sosidudku1 Nov 12, 2026
1ef702e
Merge PR #1176 (run-1 fixes)
sosidudku1 Nov 12, 2026
c80f0b8
Merge PR #1205 (run-1 fixes)
sosidudku1 Nov 12, 2026
78bd555
Merge PR #1210 (run-1 fixes)
sosidudku1 Nov 12, 2026
d13914f
Merge PR #1211 (run-1 fixes)
sosidudku1 Nov 12, 2026
5c8f469
Merge PR #1213 (run-1 fixes)
sosidudku1 Nov 12, 2026
daee0d9
Merge PR #1221 (run-1 fixes)
sosidudku1 Nov 12, 2026
4344743
Merge PR #1222 (run-1 fixes)
sosidudku1 Nov 12, 2026
df27623
Merge PR #1224 (run-1 fixes)
sosidudku1 Nov 12, 2026
83149e8
Merge PR #1228 (run-1 fixes)
sosidudku1 Nov 12, 2026
1859838
Merge PR #1248 (run-1 fixes)
sosidudku1 Nov 12, 2026
221ecf4
Merge PR #1249 (run-1 fixes)
sosidudku1 Nov 12, 2026
c373602
Merge int/w1-main
sosidudku1 Nov 12, 2026
c7f76f6
Merge PR #1252 (run-1 fixes)
sosidudku1 Nov 12, 2026
542b1ba
Merge PR #1144 (run-1 fixes)
sosidudku1 Nov 12, 2026
ec3d714
Merge PR #1159 (run-1 fixes)
sosidudku1 Nov 12, 2026
b1d3d66
Merge PR #1161 (run-1 fixes)
sosidudku1 Nov 12, 2026
7a41596
Merge PR #1188 (run-1 fixes)
sosidudku1 Nov 12, 2026
e5ace1f
Merge PR #1189 (run-1 fixes)
sosidudku1 Nov 12, 2026
e6732b3
Merge PR #1191 (run-1 fixes)
sosidudku1 Nov 12, 2026
6ff7473
Merge PR #1204 (run-1 fixes)
sosidudku1 Nov 12, 2026
9ef71c7
Merge PR #1226 (run-1 fixes)
sosidudku1 Nov 12, 2026
bf7ae99
Merge PR #1245 (run-1 fixes)
sosidudku1 Nov 12, 2026
c78340e
Merge PR #1247 (run-1 fixes)
sosidudku1 Nov 12, 2026
e5aff93
Merge PR #1250 (run-1 fixes)
sosidudku1 Nov 12, 2026
e8ba0fd
Live smoke: start the browser with a mock keychain on macOS
sosidudku1 Nov 12, 2026
e99c45d
Live smoke: clearer note on the mock keychain wrapper
sosidudku1 Nov 12, 2026
23bfe35
Merge PR #1239 (L18 fix)
sosidudku1 Nov 12, 2026
c022f22
test: make the check independent of the other PRs it is merged with
sosidudku1 Nov 12, 2026
ffe2196
test(desktop): compare plain arrays, not arrays from the test's vm co…
sosidudku1 Nov 12, 2026
16c6e68
Merge int/w1-main
sosidudku1 Nov 12, 2026
f53d92e
Merge PR #1247 (test fix)
sosidudku1 Nov 12, 2026
5ab634b
Merge PR #1249 (test fix)
sosidudku1 Nov 12, 2026
5d3ef17
L20: do not name config.json in the request, or the input guard refus…
sosidudku1 Nov 12, 2026
44db27b
L18: wait for the click card by its visible line
sosidudku1 Nov 12, 2026
a7d3654
Merge PR #1204 (L20 fix)
sosidudku1 Nov 12, 2026
84aabec
Merge PR #1239 (L18 fix)
sosidudku1 Nov 12, 2026
7f41743
L18: expect the reason the product gives for the Send click
sosidudku1 Nov 12, 2026
a0c46e0
Merge PR #1239 (L18 test fix)
sosidudku1 Nov 12, 2026
b4b050e
Shorten the audit skill description so all starter skills fit the cat…
sosidudku1 Nov 12, 2026
4951f27
Shorten the code-graph skill description so all starter skills fit th…
sosidudku1 Nov 12, 2026
5e44f1d
Shorten the plain-writing skill description so all starter skills fit…
sosidudku1 Nov 12, 2026
7693606
Shorten the pre-push-check skill description so all starter skills fi…
sosidudku1 Nov 12, 2026
b4da337
Merge PR #1192 (shorter description)
sosidudku1 Nov 12, 2026
87869a9
Merge PR #1193 (shorter description)
sosidudku1 Nov 12, 2026
69d4ff2
Merge PR #1194 (shorter description)
sosidudku1 Nov 12, 2026
ba1e381
Merge PR #1196 (shorter description)
sosidudku1 Nov 12, 2026
ed060f3
Merge int/w1-main
sosidudku1 Nov 12, 2026
3973cad
fix(skills): quote the description so its colon parses as YAML
sosidudku1 Nov 12, 2026
f7635bc
fix(skills): quote the description so its colon parses as YAML
sosidudku1 Nov 12, 2026
16e1173
fix(skills): quote the description so its colon parses as YAML
sosidudku1 Nov 12, 2026
7a79446
Merge PR #1192 (quoted description)
sosidudku1 Nov 12, 2026
b73d417
Merge PR #1193 (quoted description)
sosidudku1 Nov 12, 2026
469d2b8
Merge PR #1196 (quoted description)
sosidudku1 Nov 12, 2026
16990ff
Merge int/w1-main
sosidudku1 Nov 12, 2026
2a05cb1
test(desktop): T18-F2 waits for the download to land, which now reads…
sosidudku1 Nov 12, 2026
47bd71d
Merge remote-tracking branch 'origin/bugs-1373-vision-restart' into i…
sosidudku1 Nov 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
47 changes: 47 additions & 0 deletions .github/workflows/audit.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# Known security advisories in the packages we ship (ATO-1415).
#
# Reads only the lockfile against the npm advisory database, so it needs no install. Dev-only
# packages (vitest, esbuild, ...) are left out: they never reach users. A high or critical
# advisory fails the check; fix it with a patch-level bump or an `overrides` entry in
# package.json, the way PR #1079 did.
#
# Kept out of the Test workflow on purpose. The advisory database changes on its own, so a
# check on every PR would turn unrelated PRs red the day a new advisory lands. On PRs it runs
# only when the dependency files change; new advisories against main are caught by the push
# and weekly runs instead.

name: Audit

on:
pull_request:
branches: [main]
paths:
- package.json
- package-lock.json
- .github/workflows/audit.yml
push:
branches: [main]
schedule:
- cron: "17 6 * * 1"
workflow_dispatch:

permissions:
contents: read

jobs:
audit:
name: npm audit (production dependencies)
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "25.7"
check-latest: true

- name: Audit the lockfile
run: npm audit --package-lock-only --omit=dev --audit-level=high
10 changes: 9 additions & 1 deletion .github/workflows/desktop-smoke-windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,18 @@ on:
pull_request:
branches:
- rel/xp-build
# Everything that goes into the app the smoke launches. Workflow files are
# all listed, not just this one: a PR that only edits desktop.yml or
# release.yml (like #841) changes how the app is built and shipped, and
# used to get no checks at all (ATO-916).
paths:
- "desktop/**"
- "src/**"
- ".github/workflows/desktop-smoke-windows.yml"
- "scripts/**"
- "package.json"
- "package-lock.json"
- "tsconfig*.json"
- ".github/workflows/**"

concurrency:
group: desktop-smoke-windows-${{ github.event.pull_request.number || github.ref }}-${{ inputs.tasks || 'all' }}
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,9 @@ name: Test

on:
pull_request:
branches: [main]
# rel/xp-build is the desktop release branch. It carries the same agent
# code as main, so PRs into it get the same checks (ATO-916).
branches: [main, rel/xp-build]
push:
branches: [main]

Expand Down
15 changes: 10 additions & 5 deletions README.md

Large diffs are not rendered by default.

65 changes: 65 additions & 0 deletions SECURITY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# Security Policy

Atomic Agent runs shell commands, edits files and drives a browser on your machine, so we treat security reports as our top priority. Thank you for helping keep users safe.

## Reporting a vulnerability

Please do not open a public issue, pull request or Discord post for a security problem.

Report it privately in one of two ways:

1. **GitHub private vulnerability reporting (preferred).** Open [Security → Report a vulnerability](https://github.com/AtomicBot-ai/atomic-agent/security/advisories/new) in this repository. Only the maintainers can see the report, and we can work on the fix and the advisory with you there.
2. **E-mail:** [support@atomicbot.ai](mailto:support@atomicbot.ai). Put `SECURITY` at the start of the subject line.

Please include:

- the version (`atomic-agent --version`, or the desktop release you installed) and your OS;
- what an attacker can do, and what they need first (a malicious web page, a crafted repository, a hostile MCP server, local access, and so on);
- steps to reproduce, ideally a minimal proof of concept;
- any logs or traces, with your own keys removed.

## What happens next

- We confirm we received the report within 3 business days.
- We send a first assessment (whether we can reproduce it and how severe we think it is) within 10 business days.
- We keep you updated until it is fixed, and we tell you before anything is published.
- Once a fix is released, we publish a GitHub security advisory and credit you by name or handle, unless you ask us not to.

Please give us a reasonable time to ship a fix before you disclose the issue publicly. We aim to fix critical issues within 30 days.

## Supported versions

We fix security issues in the latest release of:

- the terminal agent (`v0.x` releases, installed with the install script or a Linux package);
- the desktop app (`desktop-v0.x` releases).

Both update in place. Please check that a problem still happens on the latest release before you report it.

## Scope

In scope, for example:

- a way to run a command, write or delete a file, send a message or submit a form **without the approval prompt** the action should show;
- a prompt injection (from a web page, a file, a repository, an e-mail or an MCP tool result) that gets around an approval, a blocked command or a read-scope check;
- a way to read the agent's own secrets (`<stateDir>/.env`, `config.json`, provider keys) without the prompt that should guard them, or to get them past the masking of secrets in tool output;
- a way for a project folder to grant itself permissions it should not have;
- data leaving the machine in a way the [README](README.md#privacy-and-egress) does not describe, including through analytics or crash reports;
- problems in the installer, the update flow, or the signing and checksums of release files.

Out of scope:

- actions you approved, or that run unasked because you chose a higher approval level, a session grant or an "always allow" rule;
- at approval level 5 (full trust), or in an overnight run started with `--no-approval`, the agent doing what it is asked;
- what a skill, a shell command or an MCP server you installed and allowed does on its own;
- a model giving wrong or harmful answers without crossing a security boundary;
- issues in third-party services (model providers, MCP servers, websites) that are not caused by Atomic Agent;
- the atomicagent.io website, unless it affects the agent or its downloads (report those to the same contacts, and we will route them).

## Safe harbor

We will not take legal action against research done in good faith under this policy: test only on your own machine and accounts, do not access other people's data, do not degrade our services, and give us time to fix the issue before you disclose it.

## More

How the agent protects you (approvals, Trash instead of delete, blocked commands, telemetry and signed builds) is described at [atomicagent.io/security](https://atomicagent.io/security) and in the [Safety and Observability](README.md#safety-and-observability) section of the README.
14 changes: 12 additions & 2 deletions desktop/ANALYTICS.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ and `preload/preload.ts` (`window.atomic.track` / `window.atomic.reportError`).
| `ATOMIC_AGENT_ANALYTICS` | `off` on a test or dev run, when the terminal opt-out is inherited, or under `DO_NOT_TRACK=1` |
| `ATOMIC_AGENT_INSTALL_ID_FILE` | `<desktop state dir>/install-id` on a test or dev run; otherwise inherited unchanged |

`ATOMIC_AGENT_TEAM` is not set here, it is inherited: with it (`1` / `true` / `yes` / `on`), or with a file `~/.atomic-agent-team`, the machine is one of ours (ATO-1247). The desktop and the agent still send their events, each tagged `test_run: true` with the person property `atomic_team: true`, so PostHog can leave them out of the metrics.

## Global properties (every event)

`surface: desktop`, `platform`, `arch`, `arm64_translation`, `desktop_version`,
Expand All @@ -76,7 +78,7 @@ send `ui` events.
| Group | Main process | Renderer |
|---|---|---|
| Lifecycle | `app_opened`, `app_ready`, `agent_start_failed`, `agent_restarted` (manual / switch / auto / setup_finished / workspace_change / import / telegram / other), `window_crashed`, `app_closed`, `debug_report_saved`, `analytics_disabled` | |
| Setup | `provider_key_checked` (ok / rejected / unreachable / payment_required), `model_configured` | `onboarding_step`, `onboarding_skipped`, `model_picked`, `provider_setup_started`, `provider_setup_failed` (… / catalog_empty / server_unreachable / certificate / timed_out / key_rejected / provider_error / list_failed; `provider_preset`), `custom_endpoint_tested` |
| Setup | `provider_key_checked` (ok / rejected / unreachable / payment_required), `model_configured` | `onboarding_step`, `onboarding_skipped`, `model_picked`, `provider_setup_started`, `provider_setup_failed` (… / catalog_empty / server_unreachable / certificate / timed_out / key_rejected / provider_error / agent_crashed / not_json / no_binary / list_failed; `provider_preset`, `kind` cloud / custom, as in `model_configured`), `custom_endpoint_tested`, `subscription_login_clicked`, `subscription_terminal_opened` (opened; terminal or reason), `subscription_login_succeeded` (seconds_to_sign_in) |
| Models and backend | `model_download_started`, `model_download_finished`, `hf_lookup`, `llama_runtime_updated`, `local_backend_started`, `local_backend_supervised`, `local_backend_crashed`, `engine_recovery_shown`, `backend_switched`, `model_switched`, `fusion_configured` | |
| Chat | `chat_turn_ui` (outcome completed / stopped_early (step or time limit, no progress, out of credit) / failed / cancelled; `error_category`, `http_status` on a failure) | `message_action`, `approval_answered`, `approval_closed` (stopped / expired / replaced / not_waiting), `coding_mode_changed`, `plan_handoff`, `attachment_added` (image / document; size bucket; button / drop / paste) |
| Features | `voice_used`, `voice_setup`, `task_created`, `task_action`, `overnight_started` (has_budget, hours, notify_telegram), `skill_installed`, `skill_action`, `telegram_setup` (enable / token_saved / token_cleared / owner_cleared), `composio_setup` (key_saved / key_removed / key_checked / enable / disable; ok / unverified / rejected / error), `import_run`, `workspace_chosen` | `ui_action`, `slash_command_used`, `settings_pane_viewed`, `session_action`, `mcp_server_added`, `mcp_server_action` |
Expand Down Expand Up @@ -157,6 +159,10 @@ Notes on specific properties:
`settings` (Settings' model list), `selector` (the composer's picker),
`first_run` (the starter model), `spotlight` (the chat's "New: <name>" card,
Download and switch), or `other`.
- `model_download_started.projector_only` (also on `model_download_finished`):
the weights were already on disk and only the vision projector downloaded
(Get vision files, or a Retry after the projector failed). Not a new model
download: filter it out when counting those.
- `llama_runtime_updated.trigger`: `setup` (the first-run runtime phase),
`settings` (Settings' engine install or update, and Download again), or
`launch` (the launch installing Atomic Core's backend before it starts the
Expand Down Expand Up @@ -206,7 +212,11 @@ no agent is running).
`kind` / `reason` / `exit_code` enums. `RenderProcessGone` also carries
`recovered` (`yes`: main reloaded the page; `no`: it crashed more than
twice in a minute and the person was asked instead, ATO-765). At most 30 reports per session,
3 per signature.
3 per signature, and across launches at most 10 identical events (same
fingerprint and same message, numbers, paths and ids aside) per install
per rolling hour (ATO-1286, `main/sentry/rate-limit.ts`; the count is kept
as key hashes and timestamps in `sentry-rate-limit-desktop.json` in the
state dir).
- An unexpected agent exit also carries `auto_restart_attempt`: 0 when the
agent that ended was not started by an automatic restart, else which of
the three attempts started it (ATO-767, `main/agent-auto-restart.ts`).
Expand Down
21 changes: 19 additions & 2 deletions desktop/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -422,6 +422,14 @@ Real, driven by the running agent:
`setActiveText` — its route lands on `local-llama` only because a fresh
install has no `llm` block — so on the TUI the same choice on such an
install leaves the cloud route active until the composer chip is used.
- the choose screen has three cards that do not mix (ATO-816): **Local
models** downloads a model, **Cloud models** lists API keys and
subscriptions only, and **Custom** lists what you already run: the apps on
this Mac (Atomic Chat, Ollama, LM Studio), a **llama.cpp server** (the URL
step, `custom_chat_url`) and any OpenAI-compatible URL. Both lists are the
same provider step (`cloud`); Back from the URL step returns to the Custom
list. A click scenario that wants Ollama clicks **Custom**, not
**Cloud models**. The terminal's own wizard is unchanged.
- the add-provider wizard: the TUI's kind list (nothing preselected) → key /
base URL → verification by listing the provider's models under that key →
saved, activated, and a default model picked
Expand Down Expand Up @@ -657,7 +665,7 @@ Honestly degraded, and labelled as such in the UI:
the two surfaces cannot disagree. `atag models list` prints no description
and no RAM figures and has no `--json`, so `desktop/main/model-catalog.ts`
vendors `description` / `minRamGb` / `recommendedRamGb` / `fileSizeGb` /
`supportsVision` / `recommendRank` / `tag` / `uncensored` from `src/local-llm/models-catalog.ts`
`supportsVision` / `recommendRank` / `tag` / `uncensored` from `src/local-llm/catalog/models-catalog.ts`
and `modelsList()` joins them on by id. `app:hostRam` (`os.totalmem()`) is
the other input. A model whose `recommendedRamGb` the machine meets runs
comfortably; between `minRamGb` and `recommendedRamGb` it is a tight fit and
Expand All @@ -672,8 +680,17 @@ Honestly degraded, and labelled as such in the UI:
plainly that it is small and will get more wrong, which on a weak machine is
exactly the model being recommended. An id the vendored table does not know
— every `custom-…` model added from Hugging Face — renders with no blurb and
with its RAM figure labelled an estimate; nothing is invented for it, and
with its RAM figure labelled an estimate (the agent's own size rule,
`ramEstimateFromSize`); nothing is invented for it, and
the smoke asserts the two id lists agree so the copy cannot rot in silence.
ATO-1410: a bare "Needs N GB" is always `recommendedRamGb`, the figure the
terminal prints too, and a model is named by its catalogue name without
the "GGUF" tail in both clients. Those rules are
`main/model-memory-words.ts`, a byte-for-byte copy of the agent's
`src/local-llm/catalog/model-memory-words.ts`;
`test/model-catalog-drift.test.mjs` compares that copy and every vendored
field (names and both RAM figures included) with the agent's source, and the
smoke compares names and RAM figures with `atag models recommend --json`.
Driven on three machine sizes by `npm run drive:models` (68 GB real, 8 GB
and 4 GB simulated with the test-only `--fake-ram`).
- **A model under `minRamGb` asks first** (ATO-337, `modelRamWarning` in
Expand Down
5 changes: 4 additions & 1 deletion desktop/main/agent-auto-restart-wire.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,15 @@ export interface AutoRestartHost {
say: (line: string) => void;
/** Off in a smoke run, whose checks end agents on purpose. */
armed: boolean;
/** ATO-1285: the exiting agent's last error in plain words, or null. */
cause?: () => string | null;
}

export function wireAgentAutoRestart(client: AgentClient, host: AutoRestartHost): AgentAutoRestart {
const tagAttempt = (n: number) => setSourceTags("agent-exit", { auto_restart_attempt: n });
tagAttempt(0);
const restarter = new AgentAutoRestart({
...(host.cause ? { cause: host.cause } : {}),
start: (attempt) => {
// The agent this attempt brings up reports its exit as started by it.
tagAttempt(attempt);
Expand All @@ -37,7 +40,7 @@ export function wireAgentAutoRestart(client: AgentClient, host: AutoRestartHost)
} else if (notice.kind === "restarted") {
host.say(`[desktop] the agent is running again after an automatic restart (attempt ${notice.attempt})`);
} else if (notice.kind === "gave_up") {
host.say(`[desktop] the agent exited unexpectedly again after ${notice.attempts} automatic restarts; not restarting it until asked`);
host.say(`[desktop] the agent exited unexpectedly again after ${notice.attempts} automatic restarts; not restarting it until asked${notice.cause ? ` (${notice.cause})` : ""}`);
}
host.send("agent:autoRestart", notice);
},
Expand Down
Loading
Loading