@armadra/agent 0.5.1 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (486) hide show
  1. package/CHANGELOG.md +203 -304
  2. package/CHANGELOG.zh-CN.md +462 -0
  3. package/README.md +408 -364
  4. package/README.zh-CN.md +705 -0
  5. package/dist/agent/session-plan.js +2 -2
  6. package/dist/agent/session-state.d.ts +3 -0
  7. package/dist/agent/session-state.js +20 -0
  8. package/dist/agent/session-subagent.d.ts +15 -1
  9. package/dist/agent/session-subagent.js +26 -3
  10. package/dist/agent/session-telemetry.d.ts +16 -2
  11. package/dist/agent/session-telemetry.js +29 -7
  12. package/dist/agent/session-tools.js +5 -2
  13. package/dist/agent/session-trace-writer.d.ts +27 -0
  14. package/dist/agent/session-trace-writer.js +253 -0
  15. package/dist/agent/session.d.ts +2 -0
  16. package/dist/agent/session.js +12 -0
  17. package/dist/agent/subagent-direct.d.ts +20 -0
  18. package/dist/agent/subagent-direct.js +76 -0
  19. package/dist/agent/subagent-registry.d.ts +8 -1
  20. package/dist/agent/subagent-registry.js +28 -1
  21. package/dist/agent/system-prompt.d.ts +3 -1
  22. package/dist/agent/system-prompt.js +3 -0
  23. package/dist/agent/tool-runner.d.ts +2 -1
  24. package/dist/agent/tool-runner.js +5 -4
  25. package/dist/agent/types-w6.d.ts +39 -0
  26. package/dist/agent/types-w6.js +4 -0
  27. package/dist/agent/types.d.ts +5 -2
  28. package/dist/agents/external.js +1 -1
  29. package/dist/agents/task-record.d.ts +74 -1
  30. package/dist/agents/task-record.js +100 -0
  31. package/dist/ai/apis/cache-params.js +2 -1
  32. package/dist/ai/apis/chatgpt-backend.d.ts +52 -0
  33. package/dist/ai/apis/chatgpt-backend.js +224 -0
  34. package/dist/ai/apis/chatgpt-rate-limits.d.ts +26 -0
  35. package/dist/ai/apis/chatgpt-rate-limits.js +91 -0
  36. package/dist/ai/apis/openai-responses-request.d.ts +2 -1
  37. package/dist/ai/apis/openai-responses-request.js +8 -2
  38. package/dist/ai/apis/openai-responses.d.ts +2 -0
  39. package/dist/ai/apis/openai-responses.js +51 -16
  40. package/dist/ai/overflow.d.ts +1 -1
  41. package/dist/ai/overflow.js +10 -7
  42. package/dist/ai/providers/auth.d.ts +15 -2
  43. package/dist/ai/providers/auth.js +69 -2
  44. package/dist/ai/providers/builtin.js +27 -0
  45. package/dist/ai/providers/catalog-data.js +1 -0
  46. package/dist/ai/providers/discovered-cache.d.ts +48 -0
  47. package/dist/ai/providers/discovered-cache.js +102 -0
  48. package/dist/ai/providers/enrich.js +2 -7
  49. package/dist/ai/providers/model-visibility.d.ts +33 -0
  50. package/dist/ai/providers/model-visibility.js +70 -0
  51. package/dist/ai/providers/models-dev-cache.js +15 -19
  52. package/dist/ai/providers/models-dev-snapshot.js +8 -7
  53. package/dist/ai/providers/models-dev.js +5 -15
  54. package/dist/ai/providers/registry.d.ts +2 -0
  55. package/dist/ai/providers/registry.js +6 -1
  56. package/dist/ai/providers/suggest.js +2 -16
  57. package/dist/ai/types.d.ts +27 -1
  58. package/dist/auth/chatgpt/backend-client.d.ts +26 -0
  59. package/dist/auth/chatgpt/backend-client.js +74 -0
  60. package/dist/auth/chatgpt/claims.d.ts +17 -0
  61. package/dist/auth/chatgpt/claims.js +46 -0
  62. package/dist/auth/chatgpt/cli.d.ts +35 -0
  63. package/dist/auth/chatgpt/cli.js +279 -0
  64. package/dist/auth/chatgpt/doctor.d.ts +17 -0
  65. package/dist/auth/chatgpt/doctor.js +36 -0
  66. package/dist/auth/chatgpt/host-id.d.ts +7 -0
  67. package/dist/auth/chatgpt/host-id.js +26 -0
  68. package/dist/auth/chatgpt/login.d.ts +30 -0
  69. package/dist/auth/chatgpt/login.js +130 -0
  70. package/dist/auth/chatgpt/presets.d.ts +66 -0
  71. package/dist/auth/chatgpt/presets.js +120 -0
  72. package/dist/auth/chatgpt/quota-text.d.ts +13 -0
  73. package/dist/auth/chatgpt/quota-text.js +36 -0
  74. package/dist/auth/oauth/browser.d.ts +12 -0
  75. package/dist/auth/oauth/browser.js +27 -0
  76. package/dist/auth/oauth/callback-server.d.ts +47 -0
  77. package/dist/auth/oauth/callback-server.js +147 -0
  78. package/dist/auth/oauth/flows.d.ts +62 -0
  79. package/dist/auth/oauth/flows.js +113 -0
  80. package/dist/auth/oauth/jwt.d.ts +24 -0
  81. package/dist/auth/oauth/jwt.js +81 -0
  82. package/dist/auth/oauth/live.d.ts +21 -0
  83. package/dist/auth/oauth/live.js +25 -0
  84. package/dist/auth/oauth/oidc.d.ts +26 -0
  85. package/dist/auth/oauth/oidc.js +72 -0
  86. package/dist/auth/oauth/pkce.d.ts +15 -0
  87. package/dist/auth/oauth/pkce.js +20 -0
  88. package/dist/auth/oauth/refresh.d.ts +35 -0
  89. package/dist/auth/oauth/refresh.js +129 -0
  90. package/dist/auth/oauth/token-client.d.ts +33 -0
  91. package/dist/auth/oauth/token-client.js +121 -0
  92. package/dist/auth/oauth/token-store.d.ts +23 -0
  93. package/dist/auth/oauth/token-store.js +125 -0
  94. package/dist/auth/testing/fake-oauth.d.ts +73 -0
  95. package/dist/auth/testing/fake-oauth.js +271 -0
  96. package/dist/auth/testing/refresh-child.d.ts +5 -0
  97. package/dist/auth/testing/refresh-child.js +16 -0
  98. package/dist/bundle/ama.cjs +26532 -11045
  99. package/dist/checkpoints/backend.js +6 -5
  100. package/dist/checkpoints/restore.js +3 -2
  101. package/dist/checkpoints/settings.js +2 -1
  102. package/dist/checkpoints/shadow-git.js +7 -6
  103. package/dist/checkpoints/shadow-restore.js +3 -2
  104. package/dist/checkpoints/tracker.js +4 -3
  105. package/dist/cli/args.d.ts +9 -2
  106. package/dist/cli/args.js +74 -27
  107. package/dist/cli/bootstrap.js +53 -31
  108. package/dist/cli/choice-prompt.js +8 -6
  109. package/dist/cli/codemode-notice.js +2 -2
  110. package/dist/cli/compose-agents.js +2 -1
  111. package/dist/cli/compose-extensions.js +2 -0
  112. package/dist/cli/compose-memory.d.ts +53 -0
  113. package/dist/cli/compose-memory.js +127 -0
  114. package/dist/cli/compose-providers.d.ts +6 -0
  115. package/dist/cli/compose-providers.js +38 -2
  116. package/dist/cli/compose-session.d.ts +5 -0
  117. package/dist/cli/compose-session.js +27 -13
  118. package/dist/cli/compose-store.d.ts +2 -0
  119. package/dist/cli/compose-store.js +9 -5
  120. package/dist/cli/compose.d.ts +2 -0
  121. package/dist/cli/compose.js +13 -5
  122. package/dist/cli/default-model.d.ts +0 -2
  123. package/dist/cli/default-model.js +5 -8
  124. package/dist/cli/deps.d.ts +5 -1
  125. package/dist/cli/exit-codes.d.ts +1 -1
  126. package/dist/cli/exit-codes.js +7 -16
  127. package/dist/cli/from-prompt.js +3 -2
  128. package/dist/cli/help-text.d.ts +2 -1
  129. package/dist/cli/help-text.js +5 -99
  130. package/dist/cli/main.d.ts +5 -0
  131. package/dist/cli/main.js +21 -2
  132. package/dist/cli/proxy.js +14 -9
  133. package/dist/cli/runtime.d.ts +5 -0
  134. package/dist/cli/startup-screen.js +20 -27
  135. package/dist/cli/startup-steps.js +6 -8
  136. package/dist/cli/subcommands/auth.d.ts +6 -3
  137. package/dist/cli/subcommands/auth.js +52 -22
  138. package/dist/cli/subcommands/config-set.d.ts +21 -0
  139. package/dist/cli/subcommands/config-set.js +145 -0
  140. package/dist/cli/subcommands/config.d.ts +2 -1
  141. package/dist/cli/subcommands/config.js +51 -37
  142. package/dist/cli/subcommands/doctor.d.ts +2 -1
  143. package/dist/cli/subcommands/doctor.js +97 -58
  144. package/dist/cli/subcommands/init.d.ts +1 -1
  145. package/dist/cli/subcommands/init.js +8 -7
  146. package/dist/cli/subcommands/memory.d.ts +18 -0
  147. package/dist/cli/subcommands/memory.js +189 -0
  148. package/dist/cli/subcommands/model-meta.js +11 -9
  149. package/dist/cli/subcommands/models-cache-probe.js +23 -20
  150. package/dist/cli/subcommands/models-discover.d.ts +4 -0
  151. package/dist/cli/subcommands/models-discover.js +60 -21
  152. package/dist/cli/subcommands/models-enable.d.ts +13 -0
  153. package/dist/cli/subcommands/models-enable.js +145 -0
  154. package/dist/cli/subcommands/models.d.ts +3 -1
  155. package/dist/cli/subcommands/models.js +39 -24
  156. package/dist/cli/subcommands/probe-runner.js +8 -7
  157. package/dist/cli/subcommands/providers-list.js +32 -21
  158. package/dist/cli/subcommands/providers-plan.js +24 -25
  159. package/dist/cli/subcommands/providers-probe.js +5 -6
  160. package/dist/cli/subcommands/providers.d.ts +1 -1
  161. package/dist/cli/subcommands/providers.js +45 -50
  162. package/dist/cli/subcommands/sessions-export.d.ts +1 -1
  163. package/dist/cli/subcommands/sessions-export.js +10 -9
  164. package/dist/cli/subcommands/sessions-search.d.ts +1 -1
  165. package/dist/cli/subcommands/sessions-search.js +11 -10
  166. package/dist/cli/subcommands/sessions-trace.d.ts +30 -0
  167. package/dist/cli/subcommands/sessions-trace.js +156 -0
  168. package/dist/cli/subcommands/sessions.d.ts +4 -3
  169. package/dist/cli/subcommands/sessions.js +40 -37
  170. package/dist/cli/subcommands/stats.d.ts +1 -1
  171. package/dist/cli/subcommands/stats.js +49 -30
  172. package/dist/cli/system-prompt-arg.js +3 -2
  173. package/dist/codemode/capability.js +3 -2
  174. package/dist/compaction/post-compact.d.ts +1 -0
  175. package/dist/compaction/post-compact.js +15 -1
  176. package/dist/compaction/prune-tier.d.ts +1 -1
  177. package/dist/compaction/prune-tier.js +3 -3
  178. package/dist/compaction/serialize.js +2 -1
  179. package/dist/config/auth-file.d.ts +12 -2
  180. package/dist/config/auth-file.js +32 -10
  181. package/dist/config/checker.js +12 -11
  182. package/dist/config/context-files.js +3 -2
  183. package/dist/config/edit.d.ts +106 -0
  184. package/dist/config/edit.js +350 -0
  185. package/dist/config/init.d.ts +4 -3
  186. package/dist/config/init.js +10 -18
  187. package/dist/config/json-schema.d.ts +2 -1
  188. package/dist/config/json-schema.js +102 -69
  189. package/dist/config/key-docs.d.ts +18 -7
  190. package/dist/config/key-docs.js +43 -128
  191. package/dist/config/load.js +7 -6
  192. package/dist/config/merge.d.ts +4 -1
  193. package/dist/config/merge.js +42 -22
  194. package/dist/config/paths.js +6 -5
  195. package/dist/config/profile.d.ts +5 -1
  196. package/dist/config/profile.js +7 -2
  197. package/dist/config/schema-w5.js +12 -4
  198. package/dist/config/schema-w6.d.ts +19 -0
  199. package/dist/config/schema-w6.js +115 -0
  200. package/dist/config/schema.js +34 -20
  201. package/dist/config/settings-registry.d.ts +81 -0
  202. package/dist/config/settings-registry.js +185 -0
  203. package/dist/config/types-w5.d.ts +7 -0
  204. package/dist/config/types-w5.js +2 -0
  205. package/dist/config/types-w6.d.ts +109 -0
  206. package/dist/config/types-w6.js +19 -0
  207. package/dist/config/types.d.ts +11 -8
  208. package/dist/config/types.js +1 -0
  209. package/dist/drivers/acp/client.js +1 -1
  210. package/dist/drivers/acp/driver.js +13 -8
  211. package/dist/drivers/agents.js +4 -3
  212. package/dist/drivers/base.js +3 -2
  213. package/dist/drivers/host-runners.js +2 -1
  214. package/dist/drivers/native/claude-stream.js +12 -11
  215. package/dist/drivers/native/codex-app-server.js +17 -12
  216. package/dist/drivers/native/oneshot.js +8 -7
  217. package/dist/drivers/pool.js +1 -1
  218. package/dist/drivers/runner.d.ts +3 -1
  219. package/dist/drivers/runner.js +68 -20
  220. package/dist/drivers/turn.js +1 -1
  221. package/dist/hooks/config.js +3 -2
  222. package/dist/hooks/protocol.js +18 -12
  223. package/dist/host/api-impl.js +11 -10
  224. package/dist/host/loader.js +9 -8
  225. package/dist/host/types.d.ts +3 -0
  226. package/dist/i18n/catalog.d.ts +2209 -0
  227. package/dist/i18n/catalog.js +72 -0
  228. package/dist/i18n/format.d.ts +21 -0
  229. package/dist/i18n/format.js +58 -0
  230. package/dist/i18n/index.d.ts +58 -0
  231. package/dist/i18n/index.js +72 -0
  232. package/dist/i18n/messages/agents.d.ts +84 -0
  233. package/dist/i18n/messages/agents.js +85 -0
  234. package/dist/i18n/messages/approval.d.ts +99 -0
  235. package/dist/i18n/messages/approval.js +100 -0
  236. package/dist/i18n/messages/auth.d.ts +189 -0
  237. package/dist/i18n/messages/auth.js +201 -0
  238. package/dist/i18n/messages/cli-args.d.ts +46 -0
  239. package/dist/i18n/messages/cli-args.js +46 -0
  240. package/dist/i18n/messages/cli-help.d.ts +12 -0
  241. package/dist/i18n/messages/cli-help.js +248 -0
  242. package/dist/i18n/messages/cli.d.ts +336 -0
  243. package/dist/i18n/messages/cli.js +311 -0
  244. package/dist/i18n/messages/config-keys.d.ts +293 -0
  245. package/dist/i18n/messages/config-keys.js +296 -0
  246. package/dist/i18n/messages/config.d.ts +508 -0
  247. package/dist/i18n/messages/config.js +241 -0
  248. package/dist/i18n/messages/drivers.d.ts +123 -0
  249. package/dist/i18n/messages/drivers.js +124 -0
  250. package/dist/i18n/messages/errors.d.ts +83 -0
  251. package/dist/i18n/messages/errors.js +171 -0
  252. package/dist/i18n/messages/interactive-line.d.ts +61 -0
  253. package/dist/i18n/messages/interactive-line.js +69 -0
  254. package/dist/i18n/messages/interactive-startup.d.ts +99 -0
  255. package/dist/i18n/messages/interactive-startup.js +100 -0
  256. package/dist/i18n/messages/interactive-view.d.ts +140 -0
  257. package/dist/i18n/messages/interactive-view.js +141 -0
  258. package/dist/i18n/messages/interactive.d.ts +489 -0
  259. package/dist/i18n/messages/interactive.js +248 -0
  260. package/dist/i18n/messages/memory.d.ts +123 -0
  261. package/dist/i18n/messages/memory.js +128 -0
  262. package/dist/i18n/messages/panels.d.ts +233 -0
  263. package/dist/i18n/messages/panels.js +232 -0
  264. package/dist/i18n/messages/permissions.d.ts +126 -0
  265. package/dist/i18n/messages/permissions.js +151 -0
  266. package/dist/i18n/messages/plan.d.ts +123 -0
  267. package/dist/i18n/messages/plan.js +124 -0
  268. package/dist/i18n/messages/print.d.ts +86 -0
  269. package/dist/i18n/messages/print.js +91 -0
  270. package/dist/i18n/messages/report.d.ts +391 -0
  271. package/dist/i18n/messages/report.js +490 -0
  272. package/dist/i18n/messages/rewind.d.ts +198 -0
  273. package/dist/i18n/messages/rewind.js +217 -0
  274. package/dist/i18n/messages/session.d.ts +230 -0
  275. package/dist/i18n/messages/session.js +258 -0
  276. package/dist/i18n/messages/settings.d.ts +355 -0
  277. package/dist/i18n/messages/settings.js +343 -0
  278. package/dist/i18n/messages/subcommands-config.d.ts +113 -0
  279. package/dist/i18n/messages/subcommands-config.js +129 -0
  280. package/dist/i18n/messages/subcommands-models.d.ts +34 -0
  281. package/dist/i18n/messages/subcommands-models.js +34 -0
  282. package/dist/i18n/messages/subcommands.d.ts +576 -0
  283. package/dist/i18n/messages/subcommands.js +477 -0
  284. package/dist/i18n/messages/trace.d.ts +243 -0
  285. package/dist/i18n/messages/trace.js +238 -0
  286. package/dist/i18n/types.d.ts +15 -0
  287. package/dist/i18n/types.js +7 -0
  288. package/dist/index.d.ts +6 -0
  289. package/dist/index.js +2 -0
  290. package/dist/memory/edit.d.ts +24 -0
  291. package/dist/memory/edit.js +63 -0
  292. package/dist/memory/frontmatter.d.ts +37 -0
  293. package/dist/memory/frontmatter.js +79 -0
  294. package/dist/memory/index.d.ts +28 -0
  295. package/dist/memory/index.js +126 -0
  296. package/dist/memory/lock.d.ts +17 -0
  297. package/dist/memory/lock.js +62 -0
  298. package/dist/memory/paths.d.ts +57 -0
  299. package/dist/memory/paths.js +175 -0
  300. package/dist/memory/report.d.ts +36 -0
  301. package/dist/memory/report.js +86 -0
  302. package/dist/memory/runtime.d.ts +42 -0
  303. package/dist/memory/runtime.js +36 -0
  304. package/dist/memory/secrets.d.ts +8 -0
  305. package/dist/memory/secrets.js +27 -0
  306. package/dist/memory/section.d.ts +28 -0
  307. package/dist/memory/section.js +59 -0
  308. package/dist/memory/store.d.ts +70 -0
  309. package/dist/memory/store.js +284 -0
  310. package/dist/memory/tool.d.ts +31 -0
  311. package/dist/memory/tool.js +94 -0
  312. package/dist/modes/acp/acp-events.js +2 -1
  313. package/dist/modes/acp/acp-server.js +13 -12
  314. package/dist/modes/commands-core.d.ts +11 -0
  315. package/dist/modes/commands-core.js +93 -62
  316. package/dist/modes/image-input.js +20 -6
  317. package/dist/modes/interactive/agent-bar.d.ts +95 -0
  318. package/dist/modes/interactive/agent-bar.js +248 -0
  319. package/dist/modes/interactive/agent-panels.js +27 -26
  320. package/dist/modes/interactive/agent-transcript.d.ts +47 -0
  321. package/dist/modes/interactive/agent-transcript.js +191 -0
  322. package/dist/modes/interactive/agent-ui.d.ts +36 -1
  323. package/dist/modes/interactive/agent-ui.js +180 -14
  324. package/dist/modes/interactive/agent-view.d.ts +72 -0
  325. package/dist/modes/interactive/agent-view.js +281 -0
  326. package/dist/modes/interactive/approval-dialog.js +46 -34
  327. package/dist/modes/interactive/clipboard-paste.d.ts +2 -2
  328. package/dist/modes/interactive/clipboard-paste.js +9 -4
  329. package/dist/modes/interactive/commands.d.ts +22 -1
  330. package/dist/modes/interactive/commands.js +100 -49
  331. package/dist/modes/interactive/completion.js +2 -1
  332. package/dist/modes/interactive/config-panel.d.ts +70 -0
  333. package/dist/modes/interactive/config-panel.js +319 -0
  334. package/dist/modes/interactive/config-ui.d.ts +96 -0
  335. package/dist/modes/interactive/config-ui.js +397 -0
  336. package/dist/modes/interactive/confirm-dialog.js +6 -7
  337. package/dist/modes/interactive/event-notices.js +11 -9
  338. package/dist/modes/interactive/interactive-mode.d.ts +1 -1
  339. package/dist/modes/interactive/interactive-mode.js +21 -22
  340. package/dist/modes/interactive/key-dispatch.d.ts +12 -0
  341. package/dist/modes/interactive/key-dispatch.js +24 -9
  342. package/dist/modes/interactive/line/line-editor.js +2 -1
  343. package/dist/modes/interactive/line/line-mode.js +18 -7
  344. package/dist/modes/interactive/line/line-render.js +25 -24
  345. package/dist/modes/interactive/memory-panel.d.ts +64 -0
  346. package/dist/modes/interactive/memory-panel.js +221 -0
  347. package/dist/modes/interactive/message-view.d.ts +4 -2
  348. package/dist/modes/interactive/message-view.js +42 -33
  349. package/dist/modes/interactive/model-items.d.ts +45 -0
  350. package/dist/modes/interactive/model-items.js +134 -0
  351. package/dist/modes/interactive/model-picker.d.ts +57 -0
  352. package/dist/modes/interactive/model-picker.js +191 -0
  353. package/dist/modes/interactive/panels.js +39 -31
  354. package/dist/modes/interactive/pickers.d.ts +2 -1
  355. package/dist/modes/interactive/pickers.js +10 -6
  356. package/dist/modes/interactive/plan-command.d.ts +1 -1
  357. package/dist/modes/interactive/plan-command.js +24 -27
  358. package/dist/modes/interactive/plan-dialog.js +18 -17
  359. package/dist/modes/interactive/plan-flow.js +6 -5
  360. package/dist/modes/interactive/rewind-command.d.ts +1 -1
  361. package/dist/modes/interactive/rewind-command.js +18 -16
  362. package/dist/modes/interactive/rewind-flow.d.ts +0 -1
  363. package/dist/modes/interactive/rewind-flow.js +13 -14
  364. package/dist/modes/interactive/rewind-list.js +7 -6
  365. package/dist/modes/interactive/rewind-panel.js +40 -40
  366. package/dist/modes/interactive/rewind-text.d.ts +5 -3
  367. package/dist/modes/interactive/rewind-text.js +48 -38
  368. package/dist/modes/interactive/run-indicator.js +15 -12
  369. package/dist/modes/interactive/session-events.js +3 -2
  370. package/dist/modes/interactive/startup-header.js +22 -23
  371. package/dist/modes/interactive/startup-ui.d.ts +3 -9
  372. package/dist/modes/interactive/startup-ui.js +44 -88
  373. package/dist/modes/interactive/status-area.d.ts +2 -0
  374. package/dist/modes/interactive/status-area.js +8 -2
  375. package/dist/modes/interactive/status-bar.js +4 -3
  376. package/dist/modes/interactive/subagent-view.js +9 -7
  377. package/dist/modes/interactive/tasks-report.d.ts +6 -0
  378. package/dist/modes/interactive/tasks-report.js +28 -31
  379. package/dist/modes/interactive/terminal-setup.d.ts +9 -0
  380. package/dist/modes/interactive/terminal-setup.js +23 -0
  381. package/dist/modes/interactive/tool-summary.js +19 -17
  382. package/dist/modes/interactive/tool-view.js +7 -4
  383. package/dist/modes/interactive/trace-view.d.ts +89 -0
  384. package/dist/modes/interactive/trace-view.js +332 -0
  385. package/dist/modes/print/print-mode.js +14 -15
  386. package/dist/modes/rpc/commands.js +7 -3
  387. package/dist/modes/rpc/rpc-mode.js +9 -3
  388. package/dist/modes/session-report.d.ts +2 -0
  389. package/dist/modes/session-report.js +101 -105
  390. package/dist/modes/startup-ui-text.js +11 -6
  391. package/dist/permissions/bypass.d.ts +8 -10
  392. package/dist/permissions/bypass.js +19 -10
  393. package/dist/permissions/memory-class.d.ts +23 -0
  394. package/dist/permissions/memory-class.js +54 -0
  395. package/dist/permissions/modes.d.ts +3 -3
  396. package/dist/permissions/modes.js +21 -16
  397. package/dist/permissions/pipeline.d.ts +1 -1
  398. package/dist/permissions/pipeline.js +9 -2
  399. package/dist/permissions/preview.js +49 -42
  400. package/dist/permissions/rules.js +5 -2
  401. package/dist/permissions/types.d.ts +4 -0
  402. package/dist/plan/store.js +2 -1
  403. package/dist/rpc.d.ts +39 -1
  404. package/dist/rpc.js +3 -0
  405. package/dist/sandbox/bash.js +11 -8
  406. package/dist/sandbox/detect.js +14 -11
  407. package/dist/sdk.d.ts +17 -1
  408. package/dist/sdk.js +29 -7
  409. package/dist/session/export.js +31 -30
  410. package/dist/session/manager.d.ts +1 -1
  411. package/dist/session/manager.js +5 -3
  412. package/dist/session/reuse.js +5 -4
  413. package/dist/session/scan.js +3 -2
  414. package/dist/session/stats-aggregate.d.ts +3 -1
  415. package/dist/session/stats-aggregate.js +5 -1
  416. package/dist/session/stats-index.js +2 -1
  417. package/dist/session/stats-scan.d.ts +4 -1
  418. package/dist/session/stats-scan.js +6 -2
  419. package/dist/session/store.d.ts +11 -0
  420. package/dist/session/store.js +48 -1
  421. package/dist/session/types.d.ts +2 -0
  422. package/dist/skills/builtin.js +2 -1
  423. package/dist/tools/image-file.d.ts +26 -1
  424. package/dist/tools/image-file.js +55 -13
  425. package/dist/tools/presets.d.ts +14 -1
  426. package/dist/tools/presets.js +3 -3
  427. package/dist/tools/registry.js +1 -1
  428. package/dist/tools/truncate.d.ts +1 -1
  429. package/dist/tools/truncate.js +2 -2
  430. package/dist/tools/types.d.ts +17 -1
  431. package/dist/trace/build-index.d.ts +91 -0
  432. package/dist/trace/build-index.js +127 -0
  433. package/dist/trace/build-nodes.d.ts +24 -0
  434. package/dist/trace/build-nodes.js +279 -0
  435. package/dist/trace/build-util.d.ts +43 -0
  436. package/dist/trace/build-util.js +120 -0
  437. package/dist/trace/build.d.ts +82 -0
  438. package/dist/trace/build.js +382 -0
  439. package/dist/trace/detail.d.ts +35 -0
  440. package/dist/trace/detail.js +205 -0
  441. package/dist/trace/flatten.d.ts +69 -0
  442. package/dist/trace/flatten.js +173 -0
  443. package/dist/trace/format.d.ts +47 -0
  444. package/dist/trace/format.js +329 -0
  445. package/dist/trace/html-template.d.ts +19 -0
  446. package/dist/trace/html-template.js +150 -0
  447. package/dist/trace/html.d.ts +104 -0
  448. package/dist/trace/html.js +292 -0
  449. package/dist/trace/preview.d.ts +29 -0
  450. package/dist/trace/preview.js +59 -0
  451. package/dist/trace/query-session.d.ts +14 -0
  452. package/dist/trace/query-session.js +38 -0
  453. package/dist/trace/query.d.ts +55 -0
  454. package/dist/trace/query.js +188 -0
  455. package/dist/trace/session.d.ts +40 -0
  456. package/dist/trace/session.js +168 -0
  457. package/dist/trace/types.d.ts +243 -0
  458. package/dist/trace/types.js +13 -0
  459. package/dist/tui/components/editor-paste.d.ts +2 -0
  460. package/dist/tui/components/editor-paste.js +6 -3
  461. package/dist/tui/components/editor.js +2 -2
  462. package/dist/tui/components/loader.d.ts +3 -0
  463. package/dist/tui/components/loader.js +14 -0
  464. package/dist/tui/components/select-list.d.ts +2 -0
  465. package/dist/tui/components/select-list.js +7 -0
  466. package/dist/tui/components/settings-list.d.ts +61 -0
  467. package/dist/tui/components/settings-list.js +135 -0
  468. package/dist/tui/keybindings.d.ts +5 -0
  469. package/dist/tui/keybindings.js +17 -5
  470. package/dist/tui.d.ts +1 -0
  471. package/dist/tui.js +2 -0
  472. package/docs/en/host-api.md +167 -0
  473. package/docs/en/permissions.md +214 -0
  474. package/docs/en/providers.md +627 -0
  475. package/docs/en/rpc.md +361 -0
  476. package/docs/en/sessions.md +219 -0
  477. package/docs/en/tui.md +534 -0
  478. package/docs/host-api.md +18 -17
  479. package/docs/memory.md +172 -0
  480. package/docs/permissions.md +2 -2
  481. package/docs/providers.md +73 -1
  482. package/docs/rpc.md +31 -3
  483. package/docs/session-format.md +8 -2
  484. package/docs/sessions.md +29 -1
  485. package/docs/tui.md +140 -4
  486. package/package.json +8 -3
@@ -0,0 +1,462 @@
1
+ # 更新记录
2
+
3
+ [English](CHANGELOG.md) · 简体中文
4
+
5
+ > 从 0.6.0 起 [CHANGELOG.md](CHANGELOG.md) 为英文,本文件保留中文记录(0.1–0.5.1 的完整历史在此)。新条目两份都要加。
6
+
7
+ ## 0.6.1(2026-10-03)
8
+
9
+ - **模型选择器只显示已配置的模型,ChatGPT 模型可选**:`/model`(以及启动选择器、`/config` 的模型项)只列有 key、OAuth 已登录或
10
+ 本地服务的供应商;多渠道供应商每个模型一行(其它渠道写在说明里,筛选文本输入 `@` 列出 `模型@渠道` 行);当前模型不在列表里时
11
+ 置顶。`Tab` 切到「全部」(没配置的供应商标「未配置 key」,选中时提示 `ama auth set`),`Space` 把高亮的模型加入 / 移出新的
12
+ 用户级清单 `models.enabled`(`provider/model[@channel]`、`provider/*`),设置后选择器只列清单内的模型;`ama models enable |
13
+ disable` 与 `ama models list --enabled` 在命令行编辑和查看。`ama auth login chatgpt` 成功后拉取账户可用的模型(只读、不消耗
14
+ 额度)缓存到 `<dataDir>/models/discovered/chatgpt.json`,`ama models discover chatgpt` 重写、logout 删除;注册表把缓存并入模型
15
+ 表为空的供应商,ChatGPT 模型因此出现在 `/model` 与 `ama models list` 里。注意:只登录了 ChatGPT、没设 `defaultModel` 时,
16
+ 缺省模型现在可能选中缓存里的第一个 ChatGPT 模型。文档:docs/tui.md、docs/providers.md「ChatGPT 登录」。
17
+
18
+ - **`ama auth login chatgpt` 授权被拒时说明原因**:OAuth 回调带 `error=access_denied`(或其它 error)时,提示改为列出可能原因
19
+ (在授权页取消或没勾选使用 ChatGPT 套餐额度;账户 / 套餐不符合——额度共享只对 Plus / Pro 开放,Team / Enterprise 工作空间可能
20
+ 未开放,浏览器可能登录了别的账户;所在地区受限),siwc 下另提示可改用备用 `ama auth login chatgpt --flavor codex`。不自动重试、
21
+ 不自动换 flavor。
22
+
23
+ - **`ama config set` 被更高优先级来源覆盖时,回执显示刚写入的值**:如 `AMA_LANG=zh` 下 `ama config set ui.language en`,原来
24
+ 第一行显示覆盖后的生效值 `zh` 却标「(用户级)」。现在第一行是刚写入的值与写入层(`ui.language = en(已写入用户级)`),第二行
25
+ 提示覆盖来源与生效值(`当前仍被 AMA_LANG(zh)覆盖,生效值为 zh`)。`ama config get` 仍显示生效值与真实来源。
26
+
27
+ ## 0.6.0(2026-10-03)
28
+
29
+ 第六波:Agent 栏与子 Agent 视图、轨迹、记忆(Memory)、ChatGPT 登录、`/config` 设置面板、中英双语界面。设计依据与决定表见
30
+ docs/wave6-plan.md,各主题的现状文档见下文链接。
31
+
32
+ ### 破坏性变更与升级注意
33
+
34
+ - **界面语言可能变成英文**:新的缺省 `ui.language: "auto"` 按 `LC_ALL` / `LC_MESSAGES` / `LANG` 判断,`zh*` 为中文,其余(包括
35
+ 判断不出)都是英文。macOS 上常见的 `LANG=en_US.UTF-8` 会让中文用户升级后看到英文界面,固定中文:`ama config set ui.language zh`
36
+ (或 `--lang zh`、`AMA_LANG=zh`)。
37
+ - **README 与 CHANGELOG 改为英文**:`README.md` / `CHANGELOG.md` 是英文(npm 包页显示),中文在 `README.zh-CN.md` /
38
+ `CHANGELOG.zh-CN.md`(0.1–0.5.1 的记录整体在此);中文文档原路径不动,`docs/en/` 有六篇英文版。
39
+ - **发给模型的标记改为英文**(与界面语言无关,两种语言下请求逐字节相同):工具结果截断 `[… N chars omitted …]`、压缩裁剪占位
40
+ `[pruned: …]`、摘要序列化截断、外部 Agent 报告的 `Tool calls:` / `Files changed:` 与失败说明、Hook 阻止理由、allowlist 拒绝说明、
41
+ 进 `task` 工具结果的错误(未知外部 Agent、宿主独占、排队时中断)与「… N more tool calls」摘要行。只影响升级后新产生的工具结果,
42
+ 不碰缓存前缀;**按旧中文标记解析工具结果的脚本需要更新**。
43
+ - **会话文件多了 `custom{customType:"ama.trace"}` 条目**(每次模型请求一条,另有重试等待、回退、压缩、辅助请求、外部 Agent
44
+ 回合骨架;只有 id、时间与计数,不进上下文、不改请求):RPC 客户端会多收到这些条目的 `entry_appended`,按条目遍历会话文件的
45
+ 脚本需要跳过它们。
46
+ - **`/tasks` 改为聚焦 Agent 栏**,`/tasks <id>` 直接打开子 Agent 视图;`ui.agentBar: "off"`(嵌入宿主缺省)时仍是原来的选择器。
47
+ - **`ama --help` 变化**:两种语言都补上 `--lang`、`--memory` / `--no-memory`、`ama auth login | logout | status`、
48
+ `ama config get | set | unset | list`、`ama memory`、`ama sessions trace`;解析帮助文本的脚本需要更新。
49
+ - **`ama sessions list` 缺省隐藏子 Agent(task)会话**,`--all` 列出并标 `↳ 子 Agent`;`ama -c` 与 `--resume` / `/resume`
50
+ 选择器不再选中它们(见「其它修复与改进」)。
51
+ - **`ama stats` 统计索引版本升级**:首次运行自动重扫全部会话(之后照常增量)。
52
+ - **`PresetResolution.warnings` 改为结构化**:`resolvePreset()` 的警告从中文字符串改为 `{ kind: "codemode_only_fallback" |
53
+ "codemode_unavailable" | "unknown_tool", … }`,由调用方渲染。
54
+ - **内置供应商 18 家**(新增 `chatgpt`):列举内置供应商的脚本会多一项。
55
+ - **缓存未命中一次的情形**(只在开启相应功能时):开启记忆后的首个请求(多出 `memory` 系统节与 `memory` 工具);设置
56
+ `ui.replyLanguage` 后的首个会话(`rules` 节末尾多一句)。两者都不开时,`default` / `minimal` 预设发给模型的 system 与工具表与 0.5.1
57
+ 逐字节相同。
58
+ - 协议版本常量(`RPC_PROTOCOL_VERSION`、`HOST_API_VERSION`、会话格式版本)不变;新增的事件、命令、字段全部可选;退出码不变。
59
+
60
+ ### Agent 栏与子 Agent 视图
61
+
62
+ - **Agent 栏**([docs/tui.md](docs/tui.md)「Agent 栏」):状态行上方列出子 Agent 任务(排队 / 运行中 · 用时 · 轮数 · 最近工具 /
63
+ 等待审批 / 完成 / 失败 / 已停止),最多 3 行 +「另 N 个」;结束后保留到在视图里看过为止,最多 10 分钟。输入为空时 `Ctrl+B` 或 `↓`
64
+ 进入(键位动作 `app.agents.focus`;有字时 `Ctrl+B` 仍是光标左移,tmux 里用 `↓`),↑↓ 选、Enter 打开。嵌入宿主缺省不显示
65
+ (`ui.agentBar: "off"`)。
66
+ - **子 Agent 视图**:主屏上的全屏覆盖层(行数 − 1),实时跟随子会话的消息与工具调用;外部 Agent 显示内存里的实时输出(≤ 2000 条 /
67
+ 1 MB,不落盘)。输入框直接发给子 Agent:运行中排到本轮结束、外部 Agent 等本次运行结束、已结束则后台续聊;子会话里记为
68
+ `origin: "direct"`。Esc 返回(不中断);子 Agent 的审批在视图上弹出并标来源;`/tasks stop <id>` 在视图里也能用。
69
+
70
+ ### 轨迹
71
+
72
+ - **计时落盘**:每次模型请求记一条 `ama.trace`(首 token 延迟、解码、工具、重试等待、回退、压缩、辅助请求),子会话同样测量首
73
+ token 延迟与速率;只有 id、时间与计数,不含正文。
74
+ - **`/trace`**([docs/tui.md](docs/tui.md)「轨迹」):回合 → 请求 → 工具 → 子调用 / 子 Agent,每行耗时、TTFT / 解码 / 工具条形、
75
+ token 与缓存命中,Enter 看详情,子 Agent 可展开到子会话,长会话尾部先加载、运行中自动跟随;`/trace <任务 id>` 看单个任务;
76
+ line 模式打印文本树。老会话没有计时记录时按条目时间推算并标 `≈`,不改会话文件。
77
+ - **`ama sessions trace <id|文件>`**([docs/sessions.md](docs/sessions.md)「轨迹」):导出自包含单文件 HTML(树 + 瀑布图、
78
+ TTFT / 解码 / 工具分色、子 Agent 与外部 Agent 嵌套、搜索、按回合跳转、缩放、详情、虚拟列表、深浅色;内联样式与脚本,CSP
79
+ 禁外联;数据与正文双重脱敏、数据块转义防注入)。`--json` 输出与 `get_trace` 同形,`--no-content` 只留结构与数字,`--children`
80
+ 内嵌子会话预览,`--open` 用浏览器打开,`--now` 固定生成时间(输出逐字节确定)。
81
+ - **RPC `get_trace`**([docs/rpc.md](docs/rpc.md)「轨迹」):尾部分页(`turnLimit` / `before`)、按 `since` 增量(配合
82
+ `entry_appended`)、`taskId` 子轨迹、`content: "preview"` 附脱敏预览;RPC 合计 43 条命令。SDK `session.trace()`,纯函数
83
+ `buildTrace()` 与 `Trace` 类型从包入口导出。
84
+
85
+ ### 记忆(Memory)
86
+
87
+ - 跨会话记忆([docs/memory.md](docs/memory.md)),**缺省关闭**:`ama memory enable` / `--memory` / `AMA_MEMORY=1` 开启。条目是
88
+ `<数据目录>/memory/{user,projects/<目录名>-<sha8>}/` 下带 frontmatter 的 Markdown,`MEMORY.md` 索引自动重建;项目作用域需项目已受信任;
89
+ 关闭时请求体逐字节不变。
90
+ - 新工具 `memory`(`view` / `create` / `str_replace` / `delete`,路径限定 `/memories/<作用域>/`)与权限类 `memory`:default 下写入首次询问、
91
+ 可本会话允许;内容像凭据即拒写;子 Agent 只读;规则 `memory(...)` 按命令名或逻辑路径匹配。项目级只能把 `memory.enabled` 设为 `false`。
92
+ - 系统提示新增 `memory` 节(`skills` 之后,只放索引):会话开始定稿,会话内写入下次会话生效,`/memory reload` 与压缩后刷新;压缩回注
93
+ 列出读写过的记忆路径。
94
+ - `/memory`(面板、show、edit、rm、on|off、reload)与 `ama memory list|show|edit|rm|path|enable|disable`。嵌入宿主与 SDK 缺省禁用,
95
+ `memory: { enabled, dir }` 开启,只有 `workspace` 作用域、不读用户级。
96
+
97
+ ### ChatGPT 登录
98
+
99
+ - `ama auth login chatgpt` 用自己的 ChatGPT Plus / Pro 订阅驱动 ama([docs/providers.md](docs/providers.md)「ChatGPT 登录」)。缺省走
100
+ OpenAI 官方 Sign in with ChatGPT(动态注册、JWKS 验签 id_token);`--flavor codex` 是显式开启的备用路径(借用 Codex CLI 公开客户端,
101
+ 首次确认「非官方、仅个人使用」)。`--paste` 粘贴回调 URL(SSH / 宿主),`--device` 设备码(只 codex);`ama auth status` /
102
+ `logout chatgpt`;`ama auth list` 显示 `oauth · <flavor> · <计划>`。
103
+ - 新内置供应商 `chatgpt`(渠道 `siwc` / `codex`,缺省按登录 flavor),模型用 `ama models discover chatgpt` 查看。
104
+ - 凭据存 `auth.json` 的 OAuth 条目(`type: "oauth"`,0600),自动刷新,多进程经 `auth.json.lock` 串行刷新,失效报 `auth_expired`;
105
+ token 不进日志、会话、事件与错误;RPC `keySource` 可为 `oauth`。
106
+ - 订阅请求 `cost = 0` 并标 `billing: "subscription"`;`/session` 单列「订阅用量」与配额,`ama stats` 单列「订阅」一行(不进费用、不算无价);
107
+ 新事件 `quota_update`(RPC 与宿主事件);配额耗尽报 `quota_exceeded`、不重试。
108
+
109
+ ### `/config` 与 `ama config`
110
+
111
+ - **`/config` 设置面板**([docs/tui.md](docs/tui.md)「`/config` 设置面板与 `ama config`」):分组列出标量设置与生效值、来源(default /
112
+ user / profile / project / cli / env)和生效档(即时 / 新会话 / 重启),↑↓ Enter / 空格修改、`/` 搜索、Tab 切写入层(项目级只许收紧)、
113
+ 被覆盖的项标锁定;改动立即写盘(写前重读、只改一项、留 `.bak`),即时项当场作用于本会话,关闭时汇总。`/config key=value` 直接改一项
114
+ (line 模式也可用)。
115
+ - **`ama config get | set | unset | list`**:`--project` 写项目级、`--json-value` 传列表 / 对象;未知键、非法值、项目级放宽退出码 3;
116
+ 持久化 `permission.mode full-auto` 在终端里先确认,非终端需 `--yes`。
117
+ - **`ui.replyLanguage`**:设置后会话开始在系统提示 `rules` 节末尾追加 `Reply to the user in <语言>.`;不设时请求零字节变化(只认用户级)。
118
+
119
+ ### 中英双语
120
+
121
+ - **界面语言**:`AMA_LANG`、`--lang zh|en`、配置 `ui.language`(`auto` / `zh` / `en`)、profile 与 SDK 的 `language`。CLI(`--help`、启动画面、
122
+ 报错、各子命令输出)、TUI 与行式界面(启动头、状态行、审批框与预览、Plan 审批、回滚、各面板与选择器、提示与按键说明)、`-p` 的 stderr、
123
+ RPC 人读 `error` 与 ACP 错误 / 审批选项名、`permission_request` 的审批预览、斜杠命令说明与回执、`ama doctor`(新增「界面语言」一行)、
124
+ 会话 Markdown 导出、配置键说明与校验诊断、`ama init` 输出都随界面语言;中文输出逐字不变,compact 状态行记号(`ctx`、`cache`、`$`、
125
+ `↑ ↓`)不译,RPC 与 `-p --output-format json` 的 JSON 字段不变。`config.schema.json` 的说明按当前语言写,切换后再跑 `ama init` 重写。
126
+ - **宿主按 `code` 判断**,不要解析人读的 `error` / `message`([docs/rpc.md](docs/rpc.md))。
127
+ - **双语文档**:`docs/en/` 新增 `tui`、`permissions`、`providers`、`rpc`、`host-api`、`sessions` 六篇英文版(头部记着对应的中文版提交);
128
+ 开发约定见 [docs/i18n.md](docs/i18n.md)。
129
+
130
+ ### 其它修复与改进
131
+
132
+ - **继续 / 恢复会话跳过子 Agent 会话**:`ama -c`、`--resume` 选择器、交互 `/resume` 选择器与 ACP `session/list` 不再选中或列出
133
+ 子 Agent(task)会话——头有 `parentSession` 且第一条条目是 `custom{ama.task}` 的会话(fork 出来的照常算);`-c` 每个文件只读头两行。
134
+ 显式 `--resume <子会话 id>` 仍可打开;`prune`、`stats`、`sessions search` 不变。
135
+ - bundle 改用 UTF-8 输出(中文不再转成 `\uXXXX`),体积约减 40 KB。
136
+ - RPC `permission_request.context` 可带 `toolCallId`(本会话工具调用的审批现在也有 `context`)。
137
+ - `ama memory enable / disable` 改走与 `/config` 相同的写盘路径(写前重读、只改一项、留 `.bak`)。
138
+ - `/trace` 详情的键列宽按最长的键对齐(英文不再错位);`/config` 面板英文底部提示在 80 列不再截断。
139
+
140
+ ### 接口、测试与发布
141
+
142
+ - 第六波契约(docs/wave6-plan.md §7,全部可选、向后兼容):`Trace` 类型与 `buildTrace()`、SDK `session.trace()` 与 `memory` 选项、RPC
143
+ `get_trace`(结果可选字段 `task`、`previews`)、事件 `quota_update`、`KeySource` 的 `oauth`、`auth.json` 的 OAuth 条目、配置键
144
+ `ui.language` / `ui.replyLanguage` / `ui.agentBar` / `memory.*` / `auth.chatgpt.*`(已写进 `config.schema.json`)。
145
+ - `pnpm check:i18n` 进 CI 且为严格模式:`src/**` 出现中文行即失败,保留的几处(输入别名、粘贴标记、价格数据的 `_reason`)逐条写明理由;
146
+ 测试缺省钉 zh,另有 en 帧黄金与 CLI 英文抽样。
147
+ - `release-check` 认双语 CHANGELOG(两份都要有当前版本段),并在中文文档比 `docs/en/` 译本的基准提交多改 5 次以上时提示(不失败)。
148
+ - bundle 级 e2e 新增:`ama auth status` 无条目、`ama sessions trace --html` 确定且无外链、`AMA_LANG=en -p` 请求与 zh 逐字节相同、
149
+ `ama config set / get / unset` 往返、`--memory` 写入后 `ama memory list` 可见。
150
+ - npm 包增带 `docs/memory.md` 与 `docs/en/*.md`。
151
+
152
+ ### 已知限制
153
+
154
+ - **ChatGPT 登录尚未用真账户验证**:两种 flavor 都只对本地模拟服务测过。待 Plus / Pro 真账户确认三项:官方(siwc)路径的工具
155
+ `namespace` 形状(`toolsInNamespace` 保持关闭)、codex 设备码是否需在 ChatGPT 安全设置里开启、codex `wham/usage` 配额返回体的字段。
156
+ 真账户检查本地用 `AMA_E2E_CHATGPT=1` 跑(CI 不跑)。
157
+ - Linux 沙箱(bubblewrap)仍未在真机上验证,只经单元测试与 Ubuntu CI。
158
+ - 记忆不做自动提取(只在模型调用 `memory` 工具或用户命令时写入);Agent 栏在 tmux 里的 `↓` 进入与 HTML 轨迹的深浅色只经自动化测试,
159
+ 待人工确认。
160
+
161
+ ## 0.5.1(2026-10-03)
162
+
163
+ - **Tab 切换权限模式**:输入为空、补全未打开时按 Tab 与 Shift+Tab 一样循环权限模式;有输入时 Tab 仍是补全。可在 `keybindings.json` 的 `app.permission.cycle` 改回只用 `shift+tab`。
164
+ - **进入 Bypass 前确认**:Tab / Shift+Tab 循环到 Bypass permissions、`/permission` 选择器选它或 `/permission full-auto` 时,先弹确认框
165
+ (说明所有工具调用免审批,缺省选中「取消」,↑↓ Enter / 1 2 / y n / Esc)。循环时取消会跳过 Bypass 回到 Manual,选择器与命令取消
166
+ 保持原模式;本次运行确认过一次后不再问。`--permission-mode full-auto`、配置与 profile 指定的不弹;line 模式问 `确认进入 Bypass?[y/N]`。
167
+ - **选择统一用 ↑↓ / Enter**:`ama providers add` / `refresh`(含 `--probe`)、`ama models cache-probe` 的计费 / 写入确认在 TTY 下
168
+ 改为方向键选择「继续 / 取消」(缺省取消,y / n、数字直选,Esc / Ctrl+C 取消,结束后恢复终端);stdin 非 TTY 时仍是文本
169
+ `[y/N]`,`--yes` 照旧跳过。启动时的信任目录确认与 `/thinking` 选择器加数字直选。
170
+
171
+ ## 0.5.0(2026-10-03)
172
+
173
+ 第五波:回滚与检查点、操作系统沙箱、子 Agent、外部 Agent 与 ACP、Plan 模式、压缩与 harness 修订、模型元数据快照与内置渠道、
174
+ 图像、状态行与界面集成。设计依据见 docs/wave5-plan.md,各主题的现状文档见下文链接。
175
+
176
+ ### 破坏性变更与升级注意
177
+
178
+ - **退出码**:`-p` 到达 `--max-turns` 由 **1 改为 8**(`--max-cost`、`limits.*` 同为 8,`json` 结果带 `limitReached`);
179
+ 新增 **9** = Plan 模式下计划已落盘、待审批(`plan.unattended: stop`,缺省)。7 仍是「工具调用被拒」。按退出码判断的脚本需要更新。
180
+ - **Node 22 / 24 在有操作系统沙箱时(macOS、多数 Linux)`default` 预设缺省带上 `codemode`**(原来只有 Node ≥ 25),工具表因此
181
+ 变化。`todo` 仍不在 `default` 里(D20 复测未过门,见下文「基准」)。
182
+ - **升级后每个会话的首个请求缓存未命中一次**:系统提示规则节新增两条、Skill 索引改为每条一行、edit / bash 工具描述与 bash 参数变化、
183
+ 上一条的 codemode;xAI、Mistral、Kimi 官方端点与腾讯 TokenHub 请求体多了 `prompt_cache_key`;开启 `sandbox.bash: auto`
184
+ 时 bash 多一个参数。恢复的旧会话追加一条 system 补丁,之后照常命中。
185
+ - **缺省协议变化**:OpenAI、xAI 全部模型改走 Responses(`@chat` 换回 Chat),通义改走 Messages(`/apps/anthropic`)。改了
186
+ 供应商级 `baseUrl` 的中转不受影响(按单渠道回落,OpenAI / xAI 目录模型在中转上仍走 Responses)。
187
+ - **模型元数据**:`ama models refresh-catalog` 改名 `ama models refresh`(旧名仍可用);不再读取旧版的全量缓存
188
+ `models-dev.json`(version 1),`ama providers add|refresh`、`ama models discover` 不再拉 models.dev。
189
+ - **图像上限**改按 base64 后计算并按端点分档(中转与未知主机 5 MB,原来按原始字节 5 MB),超 8000 px 拒绝。
190
+ - **压缩**:token 估算中文按字计,中文会话的自动压缩比以前早触发;会话层通用截断改为头 70% + 尾 30%。
191
+ - **交互界面**:Plan 审批不再是「回复 1 / 2 / 3」的文本(TUI 改为对话框;line 模式保留并新增 `/plan approve|reject`);独立终端的
192
+ 底部信息行缺省两行(`ui.statusLine: "full"`),有 profile 的嵌入宿主仍是一行、`·` 分隔与模式最左不变;审批框标题带来源前缀。
193
+ - **外部 Agent 子进程**剥离 `ARMADRA_*`(`ARMADRA_ASKPASS_*` 除外)、供应商 key、`*_BASE_URL`、`AMA_*`。
194
+ - 协议版本常量(`RPC_PROTOCOL_VERSION`、`HOST_API_VERSION`、会话格式版本)不变;新增的事件、命令、字段全部可选。
195
+
196
+ ### 回滚与检查点
197
+
198
+ - **检查点**(docs/rewind-plan.md、docs/sessions.md):edit / write 第一次写文件前备份,每个新回合重拍已跟踪文件;备份按内容 sha256
199
+ 存 `<数据目录>/file-history/blobs/`。`checkpoints.mode: "shadow-git"` 把工作目录快照进独立的影子仓库,bash 与手动改动也能回滚(尊重
200
+ `.gitignore`,不碰用户仓库;git 不在 PATH、超过 20 000 个文件或快照超过 3 秒时本会话降级为 `tools`)。新配置 `checkpoints.mode`
201
+ (`AMA_CHECKPOINTS`)、`checkpoints.maxFileBytes`、`checkpoints.keep`;`ama sessions prune` 清理未引用备份,`ama doctor` 显示占用。
202
+ - **恢复**做冲突检测(回合外被改过的文件缺省跳过,可覆盖)与安全检查(符号链接、硬链接、非普通文件、父目录移动;非 Windows 用
203
+ `O_NOFOLLOW`),可预览行级增删。
204
+ - **回滚**:`/rewind` 与空闲时双击 Esc 打开回滚列表,确认面板给出恢复代码和对话 / 恢复对话 / 恢复代码 / 从这里摘要 / 摘要到这里,
205
+ 每项带预览,git HEAD 变化时给出两条命令(不执行);输入框有字时双击 Esc 清空并存进历史;运行中 Esc 中断且本回合还没有输出时
206
+ 自动撤回并回填(`ui.restoreOnCancel`)。line 模式 `/rewind <n> [both|conversation|code] [overwrite]`。新键位动作 `app.rewind`。
207
+ - 接口:`AgentSession.rewindPoints()` / `rewind()` / `summarizeFrom()` / `summarizeUpTo()` / `undoAbortedTurn()`;RPC
208
+ `get_rewind_points`、`rewind`、`summarize_from`、`summarize_up_to` 与事件 `session_rewound`;Hook 事件 `PostRewind`;SDK 导出回滚
209
+ 类型。仅对话或仅代码时下一次提示前追加 `ama.rewind-note`,前缀不变。
210
+
211
+ ### 操作系统沙箱
212
+
213
+ - docs/sandbox.md。新模块探测 macOS `sandbox-exec`、Linux bubblewrap(退而 `unshare -r -n`),用目标配置跑最小探针确认可用。
214
+ - **codemode** 子进程经沙箱启动,内核拒绝网络(含 DNS)与一切写入:Node 22 / 24 有沙箱时与 Node ≥ 25 一样按只读类处理、
215
+ `default` 预设缺省开启、状态栏不再标 `net!`。新配置 `sandbox.enabled`(`AMA_SANDBOX=off`)。
216
+ - **bash 沙箱**(缺省关闭):`sandbox.bash: "auto"`、`sandbox.network`、`sandbox.writable`。bash(含后台 bash)只能写工作区、临时目录
217
+ 与追加目录,`.ama/`、`.git/hooks`、`.git/config` 只读,凭据目录不可读;`default` / `auto-edit` 下沙箱内且拒绝网络的命令免审批
218
+ (危险命令、deny 规则、Hook ask 照旧),被拒时可请求 `sandbox: false` 不经沙箱重跑(照常审批)。`ama doctor` / `config show` 显示状态,
219
+ 状态栏多一个 `沙箱` 标记。
220
+
221
+ ### 子 Agent
222
+
223
+ - docs/agents.md「子 Agent」。定义文件 `~/.config/ama/agents/*.md`、`.ama/agents/*.md`(需信任)、`--agent-dir` / profile `agentDirs` /
224
+ `agents.dirs`;内置 `general`、`explore`、`plan`(后两者强制只读、不弹审批)。
225
+ - `task` 新增 `agent`、`background`、`taskId`(续聊)、`isolation: "worktree"`、`budgetUsd`;同一回复里的多个 task 并行
226
+ (`subagents.maxConcurrent` / `maxPending`);结果超过 50 KB 保留头尾、全文落 `outputs/`;轮数用尽以 `toolChoice:"none"` 收尾一轮。
227
+ 后台任务完成后以 `<task-notification>` 通知父会话;新工具 `task_ctl`(list / wait / stop / output / send)与 `task` 同进退。
228
+ - 子会话工具表与父逐字节相同,首个请求复用父的缓存前缀;角色说明是系统提示末位的 `role` 节。事件 `subagent_start / update / end`,
229
+ `getStats().tasks`,`custom{ama.task}` 记任务快照、resume 时重建。
230
+ - 界面:task 工具行折叠显示 `类型 · 状态 · 轮数 · 最近 3 个工具 · ↑↓`,后台任务有跟随状态,`<task-notification>` 只显示一行;
231
+ `/tasks`(查看输出、停止)、`/agents`;`/session` 增「子 Agent」行。
232
+
233
+ ### 外部 Agent 与 ACP
234
+
235
+ - docs/agents.md「外部 Agent」、docs/acp.md。`task(agent="claude" | "codex" | "acp:<程序>")` 经各 CLI 自己的登录运行:Claude Code
236
+ (stream-json 原生协议)、Codex(`app-server`)、任意 ACP Agent(零依赖客户端)与一次性打印模式(只读兜底);前台 / 后台通知 /
237
+ `taskId` 续聊(被停止过的以外部会话 id `resume` 重开)/ `task_ctl` 与 ama 子会话一致;PATH 上的 claude / codex 写进 task 描述。
238
+ - **审批只交给人**(宿主 → 界面 → 无人值守拒绝,分类器与模型不参与,提问类请求不代答);每个会话首次以某个外部 Agent 运行时确认
239
+ 一次(allow 规则 `task(<id>)` 或 full-auto 放行),Manual 模式下与 task 调用的审批合并为一次。模式不比 ama 当前模式宽;子进程缺省
240
+ 剥离供应商 key 等(`agents.<id>.env.passthrough` 放回),只在已信任目录里启动;并发池、美元预算、看门狗、空闲关闭与孤儿进程清理;
241
+ 每回合写 `custom{ama.agent-usage}`,`get_session_stats` 新增 `external`。
242
+ - 嵌入宿主时不自启外部 CLI,只用 `HostApi.runners.provide` 注入的 runner。RPC `permission_request` 新增可选 `context`(`depth`、
243
+ `taskId`、`origin`);`get_agents` 带外部 Agent 的安装与版本。
244
+ - **`ama --mode acp`**:ama 作为 ACP Agent(会话新开 / 回放 / 续接 / 列表 / 关闭、事件映射、`session/request_permission`、
245
+ `session/cancel`、`session/set_mode`)。`@armadra/agent/acp` 导出 ACP 类型、JSON-RPC 对等端、`AcpClient`、`AcpDriver` 与假 ACP Agent。
246
+ - ACP Agent 用探测到的完整路径启动:Windows 上 npm 装的 ACP Agent(`.cmd` 垫片)不再报 `spawn … ENOENT`(bundle 级 e2e 发现)。
247
+ - 界面:审批框标注来源(`[task:<类型>]`、`[claude · 会话 abc12345]`、「首次运行外部 Agent」);外部 Agent 的提示显示在消息区;
248
+ `/agents` 列出安装状态与版本,`/session` 增「外部 Agent」段。
249
+
250
+ ### Plan 模式
251
+
252
+ - docs/plan.md。plan 下模式说明以 `custom_message{ama.plan_mode}` 追加在尾部(前缀不变),`ama.plan_state` 让 resume 回到 plan。
253
+ 模型输出 `<proposed_plan>` 块,ama 提取步骤、落 `ama.plan` 与 `<数据目录>/plans/<会话>-v<N>.md`(`plan.directory`),发 `plan_proposed`。
254
+ - **审批**:交互界面是底部对话框——批准并执行 / 批准后在新上下文执行(新建会话,以计划全文开场)/ 继续修改(框内或外部编辑器写意见)/
255
+ 放弃并退出 Plan;批准时选执行模式(回到进入前的模式 / Accept edits / Auto),`e` 在 `$VISUAL` / `$EDITOR` 里改计划,Esc 放弃但留在
256
+ Plan。批准后步骤转待办(`ama.todo`;todo 工具新增 `update` 与条目字段 `planStep`,事件 `todo_updated`)、切模式、以 `ama.plan_approved` 交接。line 模式
257
+ `/plan`、`/plan approve [模式|fresh]`、`/plan reject`(也接受回复 1 / 2 / 3);`/plan <目标>` 进入 Plan。
258
+ - 无人值守缺省 `plan.unattended: stop`(落盘后停下,`-p` 退出 9,`json` 带 `planPending`),`approve` 自动批准执行。可选
259
+ `plan.model` / `plan.thinkingLevel` 分模型规划。
260
+ - **权限细化**(docs/permissions.md):plan 放行只读命令子集(`ls`、`cat`、`rg`、`git log / diff / show` 等,`plan.bash`)与 `task`;
261
+ `todo set / update` 在 plan 下拒绝;`allowlist` 同步放行同一子集与 `task`,`plan ⊆ allowlist ⊆ default` 不变。模式选择器里 Plan 的
262
+ 说明改为「只读调研,只跑只读命令,出计划后审批执行」。
263
+ - RPC `plan_response` / `get_plan` / `get_todos` / `get_tasks` / `get_agents` 与能力 `plans`(`hello.capabilities` 列出;声明后计划审批
264
+ 交客户端);SDK `createAgentSession({ plan: { onProposed } })` 与 `session.plan.current() / respond() / todos()`,包入口导出
265
+ `SessionPlanOptions`、`SessionPlanApi`、`PlanDecision`、`PlanResponse`、`PlanResponseResult`、`SdkAgentSession`。
266
+ - **进度记法**:活动工具集里有 `todo` 时交接请模型 `todo update`;没有时(`default` 预设缺省不含 todo)请模型每完成一步单独一行写
267
+ `[DONE:<步骤>]`,ama 读标记推进计划待办(照常落 `ama.todo`、发 `todo_updated`)。`tools.default: ["+todo"]` 可加回 todo。
268
+
269
+ ### 压缩与 harness
270
+
271
+ - **自动压缩修订**(docs/design.md §9):档一按工具结果新旧计边界(保留最近 `compaction.prune.keepResults` 个与最近
272
+ min(40k, 0.2×预算) token 的工具输出),修好「只有一条用户消息的长任务永不裁剪」;可省不足 `compaction.prune.clearAtLeast`
273
+ 不动,动就一次清到 0.5×预算;缓存已冷时提前裁;Skill 文件、AGENTS.md、todo、`keepInContext` 工具与 `compaction.pruneExclude`
274
+ 的结果不裁。熔断改为连续 3 次失败或连续 3 次快速回填才停。摘要模板补用户原话、错误与修复、文件与代码三节,压缩后不变小判失败;
275
+ split turn 两份摘要并行;压缩后在摘要末尾回注 todo、计划、已加载 Skill、最近文件与转录路径。新 Hook 事件 `PostCompact`。
276
+ - **harness**:通用截断头 70% + 尾 30%(中间写省略字符数与全文路径);重复调用检测(同名同参第 3、4 次提醒,第 5 次结束 run,
277
+ `agent_settled{warning:"repeated_tool_call"}`);预算 `limits.maxTurns / maxCostUsd` 与 `--max-turns`、`--max-cost`(事件
278
+ `limit_reached`);提醒通道 `ama.reminder`(todo 复述、读过的文件被外部改动、上下文 70% / 85%、预算剩余 < 20%、后台命令退出,
279
+ `reminders.*` 逐项可关);后台 bash(`bash{command, background:true}` 返回 jobId,`bash{job, action: wait | output | stop}`,会话结束
280
+ 回收进程树);模型回退 `fallbackModel`(overloaded 或重试用尽时切过去重试一次,事件 `model_fallback`)。周期收尾阶段入队的
281
+ steer / followUp 不再滞留到下一次提示。
282
+ - **系统提示维护**:规则节加两条(破坏性命令先问;独立的只读工具调用放在同一轮);edit 描述写明多处修改用一次调用的 `edits[]`;
283
+ 新增内置 Skill `ama-docs`(配置速查);Skill 索引改为每条一行;新增提示长度预算测试。
284
+
285
+ ### 模型元数据与渠道
286
+
287
+ - **models.dev 快照入库**(docs/providers.md「模型元数据」):22 家主流厂商的裁剪快照随包携带(内联约 180 KB,MIT 声明见
288
+ `THIRD_PARTY_NOTICES.md`),**启动与运行都不联网**;`ama models refresh [--provider <id>]` 显式联网刷新到数据目录(晚于快照才叠加)。
289
+ 内置目录改为「快照 ⊕ 覆盖」,与快照相同的值由测试报冗余;dashscope、gemini 2.5 / 3.1 pro、openrouter 部分模型补上价格 / 阶梯价;
290
+ 模型新增 `family` / `knowledge` / `releaseDate` / `inputLimit` / `status`。每周的 `.github/workflows/models-dev.yml` 刷新快照并开 PR,
291
+ CI 在每个 PR 上校验这个 workflow 并以 fixture 跑刷新脚本的 dry-run。
292
+ - **内置渠道与缺省协议**(docs/providers.md「内置供应商」):多协议的内置供应商带内置渠道,`provider/model@channel` 直接可选;缺省
293
+ Messages / Responses 优先、Chat 回落(OpenAI、xAI、火山方舟 Responses;通义、MiniMax、阶跃、腾讯 Messages;DeepSeek、智谱、Kimi 暂
294
+ 维持 Chat)。用户 `channels` 同名字段级覆盖、新名追加;改了供应商级 `baseUrl` 时内置渠道作废、按单渠道回落。新增内置供应商
295
+ MiniMax、阶跃、火山方舟、腾讯 TokenHub(共 17 家);Coding Plan 类订阅端点只给配置示例。
296
+ - Anthropic 兼容端点按主机推断 compat(交错思考 beta 头只发给官方端点与中转上的 Claude 模型,DeepSeek 不再打 `cache_control`),
297
+ 新开关 `sendInterleavedThinkingBeta`、`sendCacheControl`;缓存能力按主机(xAI、Mistral、Kimi 官方端点发 `prompt_cache_key`,
298
+ 腾讯 TokenHub 另支持 1h 保留)。价格核对:OpenRouter 的 kimi-k3、glm-5.3 改用现价。
299
+ - `scripts/channel-probe.mjs`:渠道实测门(每模型 ≤ 8 请求),中转上五家对比见 docs/providers.md「渠道实测」。
300
+
301
+ ### 图像
302
+
303
+ - docs/providers.md「图像输入」。单图上限按 base64 后计算并按端点分档(官方 Anthropic 10 MB、Gemini / OpenAI 20 MB、中转与未知 5 MB),
304
+ 任一边超 8000 px 拒绝;超限时按 `images.resize`(缺省 `auto`)用 `sips` / ImageMagick 缩放(`--image`、`@图片`、粘贴的图片都适用)。
305
+ 请求图片总量超预算(Anthropic 32 MB、其它 20 MB)时把最旧的图换成占位文本(`context_edit{reason:"image_budget"}`),提示一次。
306
+ - 剪贴板图片:`Ctrl+V` / `/paste` 存进 `<数据目录>/clipboard/` 并插入 `@<路径>`(新键位动作 `app.paste.image`);
307
+ `ama sessions prune` 清理超过 7 天的剪贴板文件。
308
+
309
+ ### 状态行与界面
310
+
311
+ - **底部信息行**(docs/tui.md「状态栏」):独立终端缺省两行——上方速率行 `tps: 100 tok/s • 546 tok / 5.5s (avg 100 · ttft 1.4s)`
312
+ 与用量项,下方 `模式 | 模型 思考 | Ctx 3.0% | 目录 ⎇ 分支 短提交 (+a,-d) | $费用 | 会话时长`(git 直接读 `.git/HEAD`,增删行在
313
+ 回合边界后台跑 `git diff --numstat`,≥ 10 s 一次、2 s 超时即停用,`AMA_STATUS_GIT=0` 关闭)。嵌入宿主缺省一行
314
+ (`ui.statusLine: "compact"`)。`Ctrl+G` 或 `/statusline [full|compact]` 本会话内切换。费用计入外部 Agent 的美元用量。RPC 新增
315
+ `telemetry_tick` 事件(≤ 2 Hz)与 `get_session_stats` 的 `telemetry`。
316
+ - 模型回退时状态栏显示 `主模型 → 回退模型`;预算到限、模型回退、后台命令启动 / 退出各给一行中文提示;「compaction did not shrink」
317
+ 显示中文说明。
318
+
319
+ ### 接口、测试与发布
320
+
321
+ - 第五波契约(docs/wave5-plan.md §9–§10,全部可选、向后兼容):会话扩展点 `SessionExtension`(`cli/compose-extensions.ts` 组装表);
322
+ RPC 命令表 42 条;`HostApi.runners` 可选面;子路径 `@armadra/agent/acp`;第五波配置键的校验、说明与 JSON Schema。
323
+ - bundle 级 e2e 新增 ACP(ama 经 `task(agent="acp:ama")` 驱动另一个 ama)、Plan(`-p` 退出 9 与 `unattended: approve`)、子 Agent
324
+ (前台与后台通知)、回滚(RPC 与跨进程)。
325
+ - npm 包增带 `docs/plan.md`、`docs/agents.md`、`docs/acp.md`、`docs/rewind-plan.md`、`docs/tui-design.md`;README 里其余设计文档改用
326
+ GitHub 链接。
327
+ - `scripts/bench-presets.mjs` 新增三个多步长任务(`--tasks long`);对照组名 `default+todo` 改为显式 `tools.default: ["+todo"]`
328
+ (原来是 `default` 的别名),`default-todo` 不变。
329
+
330
+ ### 基准
331
+
332
+ - **D20:todo 不进 `default` 预设**。开发期间曾把 `todo` 加进 `default`,以 `bench-presets` 复测为门(估价涨幅 ≤ 5% 且成功数
333
+ 不降)。W5-H2 的小任务首测(docs/benchmarks/presets-todo-2026-10-02.md,5 对、模型从未调用 todo)按门保留;本版用三个多步长任务
334
+ (`--tasks long`)、kimi-k2.5 与 deepseek-v4-flash、每组 3 次复测(docs/benchmarks/presets-todo-2026-10-03.md,18 对):含 todo 组成功
335
+ 17/18、对照 18/18,统一估价 +4.6%、输入 token +15.8%、保守计价 +11.3%,36 次运行里只有 1 次调用了 todo → **按门撤出**,计划交接改用
336
+ `[DONE:n]`。复测 212 次请求,约 $0.27。
337
+
338
+ ### 已知限制
339
+
340
+ - Linux 沙箱未在真机上验证(bubblewrap 的策略只经单元测试与 Ubuntu CI 验证;没有 bwrap 时退到 `unshare`,不能用于 bash 沙箱)。
341
+ - 外部 Agent 的真实 CLI 端到端只在本地跑:本机已登录 `claude` / `codex` 时 `AMA_E2E_AGENTS=1`(会用订阅额度);CI 只跑录制回放与
342
+ ama 驱动 ama。
343
+ - DeepSeek、智谱、Kimi 缺省仍走 Chat,等官方直连过了实测门再切 Messages。
344
+ - models.dev 每周刷新的 PR 需要仓库 secret `MODELS_DEV_PR_TOKEN` 才会触发 CI(没有时 workflow 自跑 `pnpm run ci` 并写进 PR 描述)。
345
+
346
+ ## 0.4.0(2026-10-02)
347
+
348
+ - **终端界面重做**(视觉规格见 docs/tui-design.md):带框启动头(模型 / 目录 / 模式 / 已加载资源,窄屏去框);
349
+ 工具调用改 `⏺ 工具名 摘要` + `⎿ 一行结果摘要` + 缩进正文三级层级,相邻调用不空行,运行中摘要行带 spinner 与秒数,
350
+ diff 带行号;思考块 `✻ 思考 · N token`,`Ctrl+O` 同时展开思考;运行中动词(思考中 / 回复中 · ↓≈N / 运行 bash /
351
+ 等待确认 / 重试 / 压缩上下文);输入框 `›` 提示符与占位;状态栏两区(左模式 + `shift+tab 切换`,右用量,
352
+ 模型名按宽度缩写);审批对话框编号选项(1–3 / ↑↓ Enter,危险命令缺省选中拒绝,边框随严重度着色);
353
+ `/session` `/cache` `/permissions` 改为左竖条面板;退出时留一行会话摘要与 `ama --resume <id>`。
354
+ 新配置 `ui.theme: "auto"`、`ui.ascii`(`AMA_ASCII=1`)、`ui.compact`、`ui.animation`。
355
+ - **破坏性变更(`@armadra/agent/tui` 与界面文本)**:`SemanticColor` 增加 `muted` / `link` / `selection`,`Theme`
356
+ 增加必填的 `glyphs`——自己实现 `Theme` 的宿主需补这 3 个颜色与字形表(可用 `UNICODE_GLYPHS`);`Loader` 渲染从
357
+ `⠋ 消息 (12s)` 改为 `⠋ 动词 · 12s · 附加项`;粘贴折叠标记从 `[paste #N +M lines]` 改为 `[粘贴 #N · M 行]`;
358
+ 状态栏不再有 `mode:` / `think:` / `preset:` 前缀(模式移到最左,`preset` 只在非 default 时出现),按 `mode:` 解析
359
+ 状态栏的脚本需改为取最左一项;排队消息标签 `↳ steer` / `↳ followUp` / `↳ host` 改为 `↳ 插话` / `↳ 之后` / `↳ 宿主`
360
+ (会话文件里的 `origin` 不变);`/permission` 选择器标题 `Mode` 改为「权限模式」。
361
+ - **codemode 缺省开放**:`codemode.mode` 不写时跟随预设——`default` 预设在沙箱网络隔离(Node ≥ 25)时带上
362
+ `codemode`(六个工具 + codemode),Node 22 / 24 缺省不开并在启动时提示一次(每个配置目录一次,记在数据目录
363
+ `notices.json`),`--codemode on` 或 config 显式开启;`minimal` / `coordinator` 不开。缺省配置不写这个键。
364
+ - **修复:coordinator 经 codemode 绕过**:`coordinator` 预设显式开了 codemode 时,脚本里只能调活动集里的工具
365
+ (read 与宿主工具),`tools.bash` / `tools.write` 不再可达。
366
+ - **on 模式去重**:`codemode` 描述不再内联已直接暴露的工具声明,其它工具描述也不再追加提示,只列「参数同直接
367
+ 工具」与「仅脚本可调用」的名字;系统提示 + 工具表比 off 只多约 390 token(原约 1356)。`--codemode on` 的旧会话
368
+ 续接时描述字节变化,会有一次缓存未命中。
369
+ - **预设改名**:`codemode` 预设更名 `codemode-only`;旧名作别名继续可用(配置、`--tools-preset`、RPC、SDK、schema),
370
+ `ama config show` 显示规范名并提示。
371
+ - **`ama init` 不写死缺省值**:新生成的 `config.json` 只有 `$schema`、`version` 与空 `providers`,以后缺省值调整对老
372
+ 用户同样生效;init 结束打印下一步。已存在的文件不动(之前生成的文件里的 `thinkingLevel` / `permission.mode` /
373
+ `tools.preset` 仍会按 user 层生效,想跟随缺省可以删掉)。
374
+ - **`ama config show`**:补全 `cache`、`codemode` 等段与每项来源,codemode 写明生效模式与原因;接受
375
+ `--tools-preset` / `--codemode`;`ama doctor` 同样显示 codemode。`config.schema.json` 的每个键都带说明与缺省值。
376
+ - **不再展示 fake**:零配置的模型选择器、`doctor`、`models list`、`providers list`、`config show` 缺省不列测试供应商
377
+ `fake`(`AMA_SHOW_FAKE=1` 或 `AMA_FAKE_SCRIPT` 时照列,`--model fake/…` 照常可用);没有可用模型时提示 key 环境变量、
378
+ `ama auth set` 与 `ama providers add`。
379
+ - **缺省模型**:自定义供应商(中转站)不再取列表首条,而是在 models.dev 有价格、支持工具调用、上下文 ≥ 64k 的模型里
380
+ 取输入价最低的;`ama providers add` 在还没有 `defaultModel` 时按同一规则写入并说明原因。内置供应商仍取目录首条。
381
+
382
+ - **auto 权限模式**:`--permission-mode auto`(界面显示名 Auto)由 ama 判断每一步——规则层不调模型,危险命令、
383
+ 网络命令、删除类命令、机密文件与项目外写入一律询问;静态判定放行只读工具、项目内写入与安全名单里的命令
384
+ (`ls`、`grep`、`git status/diff/log`、`npm test`、`tsc --noEmit`、`cargo test` 等,`permission.autoSafeCommands` 追加);
385
+ 其余交给一次独立的模型分类器(`permission.autoModel`,不影响主会话缓存,用量记 `permission_classify`)。
386
+ 事件带 `autoDecision`,`/permissions` 显示最近判定。见 docs/permissions.md。
387
+ - **allowlist 模式**:只放行只读工具与 allow 规则命中的调用,其余直接拒绝、从不询问,适合 CI。
388
+ - **模式选择器**:`/permission` 打开 Mode 列表(显示名 + 说明、数字 1–6、当前打勾、Default / Recommended),
389
+ `Shift+Tab` 循环 Manual → Accept edits → Plan → Auto → Bypass permissions,状态栏显示显示名。
390
+ 项目级配置不能设 `auto` / `full-auto`。
391
+ - **测试隔离**:组装测试不再把会话写进真实数据目录,测试结束检查真实 `~/.local/share/ama` / `~/.config/ama` 有无新增。
392
+
393
+ - **探测提速**:`ama providers add|refresh --probe` 与 `ama models discover --probe` 并发探测(`--concurrency`,缺省 6),
394
+ 流里出现首个内容事件即判可用并断开,单次超时缩到 15 s(`--probe-timeout`);429 时降并发并重试一次,
395
+ 连续 429 才停止。实测 22 个模型、60 次探测从预计 20–30 分钟降到约 85 s。
396
+ 降并发之后连续 4 次没被限流就并发 +1,回到初始并发为止。
397
+
398
+ - **流空闲超时**:模型请求等响应头、以及流里两块数据之间缺省 300 s 没有任何字节即判卡住,按可重试错误重试;
399
+ `request.idleTimeoutMs`(用户级)或 `AMA_IDLE_TIMEOUT_MS` 调整,0 关闭。服务端发一块就停住不再让 `-p` 永久挂起。
400
+ - **`-p` 与 stdin**:`git diff | ama -p "审阅"` 照旧把管道内容拼在提示后面;有提示参数时只等管道首字节 2 秒
401
+ (`AMA_STDIN_WAIT_MS` 可调,0 = 不等),一个字节都没有就忽略 stdin 并在 stderr 提示,父进程留着不关的管道不再让
402
+ `-p` 挂起;收到首字节后读到 EOF。末尾加 `-` 一直等到 EOF(上游要先跑很久才输出时用),`< 文件` 照常读取;没有提示
403
+ 参数时等 stdin 超过 3 s 提示一次;`--no-stdin` 完全不读。
404
+ - **`-p` 无人值守的拒绝可见**:被拒的工具调用在 stderr 汇总(工具、原因、放行办法),`json` 结果带 `deniedTools`,
405
+ `tool_execution_end` 带 `denied: true`,退出码 7(新增)。重试期间 stderr 每次一行 `↻`。
406
+ - **新参数**:`-p --max-turns N`(到上限仍在调工具时退出 1,`json` 带 `maxTurnsReached`)、
407
+ `--system-prompt <文本|@文件>` 与 `--system-prompt-mode append|replace`(缺省作为最后一条规则追加,缓存前缀不变)、
408
+ `--no-session`(会话不落盘)。
409
+ - **报错准确**:`provider/model@渠道` 渠道不存在时报「渠道不存在」并列出该模型的可用渠道(中转供应商不再把 `@后缀`
410
+ 当成模型 id 发出去);供应商写错报「供应商不存在」并给编辑距离最近的候选;模型写错列出最接近的几个。
411
+ - **代理**:设了 `HTTPS_PROXY` / `HTTP_PROXY` 时启动即启用 Node 内置的环境变量代理(`NO_PROXY` 生效),Node 22.21 以前
412
+ 提示一次并直连;`ama doctor` 新增「代理」一节。
413
+ - **行式管道模式**:模型错误只在运行结束时打印一次,有运行失败时退出码 1(以前 0)。
414
+ - **只读命令不写盘**:`config show` / `path`、`doctor`、`models list` 等不再创建配置目录,首次自动初始化只在进入对话的
415
+ 命令与 `providers add` 里触发。
416
+
417
+ - **会话统计**:`ama stats` 只读扫描会话,汇总请求(对话、保温、权限分类、压缩分开计)、回合与平均耗时、
418
+ token、缓存命中率(只算报告缓存的端点)、费用(只加有价请求)、错误与重试、工具调用 Top N;
419
+ `--since` / `--until` / `--by day|week|month|provider|channel|model|project` / `--json`;
420
+ 增量索引 `<数据目录>/stats-index.json`,1000 个会话冷扫描约 160 ms。
421
+ - **会话检索与导出**:`ama sessions search <关键词|/正则/>`(`--role`、`--since`、`--limit`,TTY 高亮);
422
+ `ama sessions export <id> --format md|json|jsonl [--branch leaf|all] [--output]`,导出前脱敏 key / token。
423
+ - **复用**:`ama sessions show` 列出用户消息编号;`--from <id>[#编号]` 用那条消息作新提示(`-p` 时连图片),
424
+ 可配合 `--model` 换模型重问。见 docs/sessions.md。
425
+ - **发布**:release job 优先用 npm 可信发布(OIDC,npm ≥ 11.5.1),`NPM_TOKEN` 只作回退;需要在 npmjs.com
426
+ 为 `@armadra/agent` 添加 Trusted Publisher(Owlbay / armadra-agent / ci.yml)。
427
+
428
+ ## 0.3.0(2026-10-02)
429
+
430
+ 自定义供应商与多渠道、models.dev 模型元数据、图像输入、默认配置目录。
431
+
432
+ - **一键接入**:`ama providers add <id> --base-url <url>` 只要 baseUrl 与 key——列出中转的模型、按提示或 `--probe` 逐渠道
433
+ 探测、写进配置;`list` / `channels` / `remove` / `refresh`。
434
+ - **渠道**:一个供应商可挂多个渠道(协议 + 地址 + 可选 key / headers / compat),模型声明 `channels`,
435
+ `provider/model@channel` 指定渠道;旧配置按隐式 `default` 渠道处理,不用改。
436
+ - **models.dev 元数据**:上下文、输出上限、图像输入、推理、价格缺省从 models.dev 补(数据目录缓存,启动不联网),
437
+ `ama models refresh-catalog` 刷新;`models list` / `config show` 标出每个字段的来源。
438
+ - **图像输入**:`-p --image`、界面里 `@图片路径`;与 read 工具共用 MIME 检测与 5 MB 上限;模型不收图片时拒绝。
439
+ - **配置目录**:首次运行自动建 `~/.config/ama/` 与最小 `config.json`、`config.schema.json`;`ama init`、
440
+ `ama config path`、`ama config edit`。
441
+ - **修复**:Responses 的 `incomplete_details.reason: "length"` 按输出截断处理(中转转发 DeepSeek 时出现)。
442
+
443
+ ## 0.2.1(2026-10-02)
444
+
445
+ npm 首发:`npm i -g @armadra/agent`。功能与 0.2.0 相同。
446
+
447
+ - **npm 发布**:包名 `@armadra/agent`;打 `v*` tag 时 CI 在生成 GitHub Release 之后执行 `npm publish --provenance`(仓库未配置 `NPM_TOKEN` 时跳过)。
448
+ - **包元数据**:仓库地址改为 `Owlbay/armadra-agent`,补 keywords、homepage、bugs、author、`sideEffects`;包里带用户文档(providers / tui / codemode / hooks / host-api / rpc / session-format)与 CHANGELOG,不再带源映射与测试辅助,解包体积约 2.9 MB。
449
+ - **README**:重写为完整介绍——定位、特性、安装、配置、中转站、工具预设、缓存、安全、各入口与 SDK、嵌入 Armadra。
450
+
451
+ ## 0.2.0(2026-10-02)
452
+
453
+ 首个可用版本。
454
+
455
+ - **模型接入**:协议与供应商数据分离,四条协议线(Anthropic Messages、OpenAI Chat Completions、OpenAI Responses、Google Generative AI),13 家内置供应商与自定义供应商、模型级协议;只用 API Key;`ama models discover` 从中转站 `/v1/models` 探测协议并写入配置,`OPENAI_BASE_URL` / `ANTHROPIC_BASE_URL` 零配置接入。
456
+ - **调用**:内置工具与工具预设(`default` / `minimal` / `codemode` / `coordinator`),codemode(`node --permission` 子进程 + vm 沙箱,脚本内调用照样走权限管线),`task` 子 Agent,Skill(`/skill:`),不接 MCP。
457
+ - **安全**:权限管线(拒绝 → 危险命令 → 模式 → 允许)、危险命令识别穿透 `sh -c` / `eval` / `xargs` / `find -exec` 与 git 全局选项、项目级配置只能收紧、项目信任、审批时的执行前预览。
458
+ - **Hook**:命令式 Hook(9 个事件)与进程内宿主适配器 HostApi。
459
+ - **缓存**:前缀逐字节稳定、各协议缓存字段与兼容开关(400 自动剥离)、前缀指纹与未命中归因、不报缓存的三态与分块粒度推断、`off / streaming / idle` 保温、压缩摘要按会话前缀续写、状态栏 / `/session` / `/cache` / `ama models cache-probe`。
460
+ - **会话**:JSONL 条目树、分叉与 `/tree`、两档压缩与熔断。
461
+ - **入口**:差分渲染终端界面(主屏模式)、`--no-tui` 行式、`-p`(text / json / stream-json)、`--mode rpc`、SDK。
462
+ - **发布物**:`ama.cjs` 与 `ama-sandbox.cjs` 两个单文件 bundle、`package.tgz`、`SHA256SUMS`;暂不发布 npm。