@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,241 @@
1
+ /**
2
+ * 消息目录:config(键名规范见 docs/i18n.md)。[W6-C0 建空壳,W6-I4 迁入]
3
+ *
4
+ * en 是形状源;zh 用 `satisfies Messages<typeof en>`,缺键 / 多键 / 参数不符在 tsc 期报错。
5
+ * 整句一个键、禁止片段拼接;插值写成函数,条件分支写进函数体。
6
+ * 配置键说明(`keys` / `dynamicDefaults`)体量大,放在 `config-keys.ts`,经 `keyDoc(path)` 取用。
7
+ */
8
+ import * as keyDocs from "./config-keys.js";
9
+ export const en = {
10
+ /** 配置校验诊断(checker.ts、schema.ts、schema-w5.ts、schema-w6.ts)。 */
11
+ schema: {
12
+ enumArray: (choices) => `should be an array of ${choices.join(" | ")}`,
13
+ ports: "should be an array of port numbers (0–65535; 0 = any free port)",
14
+ required: "required",
15
+ memoryDir: "memory.enabled is true but memory.dir is not an absolute path",
16
+ object: "should be an object",
17
+ unknownKey: "unknown field, ignored",
18
+ version: "version must be 1",
19
+ requiredString: "required string missing",
20
+ string: "should be a string",
21
+ boolean: "should be a boolean",
22
+ number: "should be a number",
23
+ range: (min, max) => `should be between ${min} and ${max}`,
24
+ oneOf: (choices) => `should be one of ${choices.join(" | ")}`,
25
+ stringArray: "should be an array of strings",
26
+ array: "should be an array",
27
+ modelsDev: `should be "provider/model" or false`,
28
+ modelsEnabled: `should be "provider/model[@channel]" or "provider/*"`,
29
+ noChannels: "the provider has no channels",
30
+ unknownChannelOf: (name, available) => `channel "${name}" does not exist (available: ${available.join(", ")})`,
31
+ modelInput: `should be ("text" | "image")[]`,
32
+ channelName: "channel names may only contain letters, digits, _ and - (no / or @), at most 32 characters",
33
+ atLeastOneChannel: "at least one channel is required",
34
+ unknownChannel: (name) => `channel "${name}" does not exist`,
35
+ defaultChannelWithoutChannels: "defaultChannel cannot be set without channels",
36
+ builtinDeny: "should be a boolean or an array of strings",
37
+ writablePath: "should be an absolute path or ~/…; ignored",
38
+ providersMissing: "providers missing",
39
+ hookEvent: (events) => `unknown event (available: ${events.join(", ")})`,
40
+ hookType: `type must be "command"`,
41
+ hookCommandEmpty: "command is empty",
42
+ clearAtLeast: 'should be "auto" or a non-negative number',
43
+ agentId: "agent ids may only contain lowercase letters, digits, - . _ (optional acp: prefix)",
44
+ },
45
+ /** 层级合并(merge.ts)的告警。 */
46
+ merge: {
47
+ projectIgnored: (label, key) => `${label}: ${key} cannot be set at project level; ignored`,
48
+ projectMemoryOnlyDisable: (label) => `${label}: project level can only set memory.enabled to false; other memory keys ignored`,
49
+ projectOnlyKeys: (label, allowed, ignored) => `${label}: project level can only set ${allowed}; ignoring ${ignored}`,
50
+ projectPresetLoosen: (label, preset, current) => `${label}: project level cannot loosen the tool preset; ignoring tools.preset ${preset} (current ${current})`,
51
+ projectOnlyValue: (label, key, value, ignored) => `${label}: project level only accepts ${key} "${value}"; ignoring ${ignored}`,
52
+ projectPlanBashTighten: (label, value, current) => `${label}: project level can only tighten plan.bash; ignoring ${value} (current ${current})`,
53
+ projectModeTighten: (label, value, current) => `${label}: project level can only tighten the permission mode; ignoring ${value} (current ${current})`,
54
+ projectLowerOnly: (label, key, value, current) => `${label}: project level can only lower ${key}; ignoring ${value} (current ${current})`,
55
+ projectNoAllow: (label, rules) => `${label}: project level cannot add allow rules; ignoring ${rules}`,
56
+ projectNoBuiltinDeny: (label) => `${label}: project level cannot change the built-in deny table; ignoring permission.builtinDeny`,
57
+ projectNoAutoSafe: (label) => `${label}: project level cannot add permission.autoSafeCommands (loosening); ignored`,
58
+ projectModeLoosen: (label, mode) => `${label}: project level cannot set the permission mode to ${mode} (loosening; only the user config, profile or command line may); ignored`,
59
+ },
60
+ /** 读配置文件(load.ts)。 */
61
+ load: {
62
+ jsonSyntax: (line, column, message) => `JSON syntax error (line ${line}, column ${column}): ${message}`,
63
+ jsonSyntaxNear: (line, column, message) => `JSON syntax error (near line ${line}, column ${column}): ${message}`,
64
+ jsonEmpty: "JSON syntax error: the file is empty",
65
+ notFound: "file not found",
66
+ invalid: (lines) => `invalid config file:\n ${lines.join("\n ")}`,
67
+ },
68
+ /** [W6-I5] profile.json(profile.ts)。 */
69
+ profile: {
70
+ notFound: (path) => `${path}: file not found`,
71
+ relativePaths: (path, lines) => `${path}: paths in a profile must be absolute:\n ${lines.join("\n ")}`,
72
+ },
73
+ /** [W6-I5] auth.json 权限过宽(auth-file.ts)。 */
74
+ authFile: {
75
+ modeTooOpen: (path, mode) => `${path}: permissions are ${mode}, should be 0600 (chmod 600 ${path})`,
76
+ },
77
+ /** 目录(paths.ts)。 */
78
+ paths: {
79
+ notDirectory: "not a directory",
80
+ notWritable: (label, dir, reason) => `${label} is not writable: ${dir} (${reason})`,
81
+ configDir: "config directory",
82
+ dataDir: "data directory",
83
+ sessionDir: "session directory",
84
+ },
85
+ /** 上下文文件(context-files.ts)。 */
86
+ context: {
87
+ readFailed: (path, reason) => `${path}: failed to read (${reason})`,
88
+ truncated: (path, maxBytes) => `${path}: larger than ${maxBytes} bytes, truncated`,
89
+ },
90
+ /** `ama init`(init.ts)。 */
91
+ init: {
92
+ status: {
93
+ created: "created",
94
+ exists: "already exists, left unchanged",
95
+ updated: "updated to the current version",
96
+ unchanged: "already the current version",
97
+ overwritten: "rewritten (original backed up as .bak)",
98
+ },
99
+ dirCreated: "created (0700)",
100
+ dirExists: "already exists",
101
+ nextSteps: [
102
+ "Next steps:",
103
+ " ama auth set anthropic save a key for a built-in provider (or set ANTHROPIC_API_KEY etc.)",
104
+ " ama providers add <id> --base-url <url> connect a relay or self-hosted service",
105
+ " ama doctor check config, keys and environment",
106
+ " ama config show show the effective config and where each value comes from",
107
+ ].join("\n"),
108
+ },
109
+ /** config.schema.json 里供应商内部字段的说明(顶层与各段的键用 `keys`)。 */
110
+ jsonSchema: {
111
+ api: "Protocol",
112
+ compat: 'Protocol compatibility switches (docs/providers.md "compat")',
113
+ modelId: "Model id (the name sent upstream)",
114
+ modelBaseUrl: "Overrides the channel / provider address",
115
+ contextWindow: "Context tokens; filled from models.dev by default, not guessed when there is no match",
116
+ maxTokens: "Output limit per request; defaults to min(models.dev, 64k) or 8192",
117
+ input: '["text"] or ["text", "image"] (accepts images)',
118
+ modelChannels: "Channels the model is mounted on; the first is preferred",
119
+ modelsDev: 'models.dev entry "provider/model"; false disables enrichment',
120
+ baseUrl: "Endpoint address",
121
+ channelApiKey: "$ENV / ${ENV} / !command / literal; defaults to the provider's key",
122
+ apiKey: "$ENV / ${ENV} / !command / literal",
123
+ channels: "Channels: several endpoints under one provider",
124
+ defaultChannel: "Preferred channel; defaults to the first of channels",
125
+ models: "Custom models (an entry with the same id replaces the whole model)",
126
+ modelOverrides: "Only changes metadata of existing models",
127
+ },
128
+ ...keyDocs.en,
129
+ };
130
+ export const zh = {
131
+ schema: {
132
+ enumArray: (choices) => `应为 ${choices.join(" | ")} 组成的数组`,
133
+ ports: "应为端口号数组(0–65535;0 = 任意空闲端口)",
134
+ required: "缺少必填字段",
135
+ memoryDir: "memory.enabled 为 true 时 memory.dir 必须是绝对路径",
136
+ object: "应为对象",
137
+ unknownKey: "未知字段,已忽略",
138
+ version: "version 必须为 1",
139
+ requiredString: "缺少必填字符串",
140
+ string: "应为字符串",
141
+ boolean: "应为布尔值",
142
+ number: "应为数字",
143
+ range: (min, max) => `应在 ${min}–${max} 之间`,
144
+ oneOf: (choices) => `取值应为 ${choices.join(" | ")}`,
145
+ stringArray: "应为字符串数组",
146
+ array: "应为数组",
147
+ modelsDev: `应为 "provider/model" 或 false`,
148
+ modelsEnabled: `应为 "provider/model[@channel]" 或 "provider/*"`,
149
+ noChannels: "供应商没有 channels",
150
+ unknownChannelOf: (name, available) => `渠道 "${name}" 不存在(可用:${available.join(", ")})`,
151
+ modelInput: `应为 ("text" | "image")[]`,
152
+ channelName: "渠道名只能含字母、数字、_ 与 -(不含 / 与 @),最长 32",
153
+ atLeastOneChannel: "至少要有一个渠道",
154
+ unknownChannel: (name) => `渠道 "${name}" 不存在`,
155
+ defaultChannelWithoutChannels: "没有 channels 时不能设 defaultChannel",
156
+ builtinDeny: "应为布尔值或字符串数组",
157
+ writablePath: "应为绝对路径或 ~/…,已忽略",
158
+ providersMissing: "缺少 providers",
159
+ hookEvent: (events) => `未知事件(可用:${events.join(", ")})`,
160
+ hookType: `type 必须为 "command"`,
161
+ hookCommandEmpty: "命令为空",
162
+ clearAtLeast: '应为 "auto" 或非负数字',
163
+ agentId: "Agent id 只能是小写字母、数字、- . _(可带 acp: 前缀)",
164
+ },
165
+ merge: {
166
+ projectIgnored: (label, key) => `${label}: 项目级不能设 ${key},已忽略`,
167
+ projectMemoryOnlyDisable: (label) => `${label}: 项目级只能把 memory.enabled 设为 false,忽略 memory 的其它键`,
168
+ projectOnlyKeys: (label, allowed, ignored) => `${label}: 项目级只能设 ${allowed},忽略 ${ignored}`,
169
+ projectPresetLoosen: (label, preset, current) => `${label}: 项目级不能放宽工具预设,忽略 tools.preset ${preset}(当前 ${current})`,
170
+ projectOnlyValue: (label, key, value, ignored) => `${label}: 项目级只接受 ${key} "${value}",忽略 ${ignored}`,
171
+ projectPlanBashTighten: (label, value, current) => `${label}: 项目级只能收紧 plan.bash,忽略 ${value}(当前 ${current})`,
172
+ projectModeTighten: (label, value, current) => `${label}: 项目级只能收紧权限模式,忽略 ${value}(当前 ${current})`,
173
+ projectLowerOnly: (label, key, value, current) => `${label}: 项目级只能调小 ${key},忽略 ${value}(当前 ${current})`,
174
+ projectNoAllow: (label, rules) => `${label}: 项目级不能加 allow 规则,忽略 ${rules}`,
175
+ projectNoBuiltinDeny: (label) => `${label}: 项目级不能改内置 deny 表,忽略 permission.builtinDeny`,
176
+ projectNoAutoSafe: (label) => `${label}: 项目级不能追加 permission.autoSafeCommands(放宽),已忽略`,
177
+ projectModeLoosen: (label, mode) => `${label}: 项目级不能把权限模式设为 ${mode}(放宽,只能在用户级配置、profile 或命令行设),已忽略`,
178
+ },
179
+ load: {
180
+ jsonSyntax: (line, column, message) => `JSON 语法错误(第 ${line} 行第 ${column} 列):${message}`,
181
+ jsonSyntaxNear: (line, column, message) => `JSON 语法错误(第 ${line} 行第 ${column} 列附近):${message}`,
182
+ jsonEmpty: "JSON 语法错误:文件为空",
183
+ notFound: "文件不存在",
184
+ invalid: (lines) => `配置文件无效:\n ${lines.join("\n ")}`,
185
+ },
186
+ profile: {
187
+ notFound: (path) => `${path}: 文件不存在`,
188
+ relativePaths: (path, lines) => `${path}: profile 中的路径必须是绝对路径:\n ${lines.join("\n ")}`,
189
+ },
190
+ authFile: {
191
+ modeTooOpen: (path, mode) => `${path}: 权限为 ${mode},应为 0600(chmod 600 ${path})`,
192
+ },
193
+ paths: {
194
+ notDirectory: "不是目录",
195
+ notWritable: (label, dir, reason) => `${label}不可写:${dir}(${reason})`,
196
+ configDir: "配置目录",
197
+ dataDir: "数据目录",
198
+ sessionDir: "会话目录",
199
+ },
200
+ context: {
201
+ readFailed: (path, reason) => `${path}: 读取失败(${reason})`,
202
+ truncated: (path, maxBytes) => `${path}: 超过 ${maxBytes} 字节,已截断`,
203
+ },
204
+ init: {
205
+ status: {
206
+ created: "已创建",
207
+ exists: "已存在,未改动",
208
+ updated: "已更新为当前版本",
209
+ unchanged: "已是当前版本",
210
+ overwritten: "已重写(原文件备份为 .bak)",
211
+ },
212
+ dirCreated: "已创建(0700)",
213
+ dirExists: "已存在",
214
+ nextSteps: [
215
+ "下一步:",
216
+ " ama auth set anthropic 保存内置供应商的 key(或设置 ANTHROPIC_API_KEY 等环境变量)",
217
+ " ama providers add <id> --base-url <url> 接入中转站或自建服务",
218
+ " ama doctor 检查配置、key 与运行环境",
219
+ " ama config show 查看生效配置与每项来源",
220
+ ].join("\n"),
221
+ },
222
+ jsonSchema: {
223
+ api: "协议",
224
+ compat: "协议兼容开关(docs/providers.md「compat」)",
225
+ modelId: "模型 id(发给上游的名字)",
226
+ modelBaseUrl: "覆盖渠道 / 供应商的地址",
227
+ contextWindow: "上下文 token;缺省从 models.dev 补,匹配不到不猜",
228
+ maxTokens: "单次输出上限;缺省 min(models.dev, 64k) 或 8192",
229
+ input: '["text"] 或 ["text", "image"](收图片)',
230
+ modelChannels: "挂载的渠道,第一个是首选",
231
+ modelsDev: 'models.dev 条目 "provider/model";false 关闭补全',
232
+ baseUrl: "接口地址",
233
+ channelApiKey: "$ENV / ${ENV} / !command / 字面量;缺省用供应商的 key",
234
+ apiKey: "$ENV / ${ENV} / !command / 字面量",
235
+ channels: "渠道:一个供应商下的多种接口",
236
+ defaultChannel: "首选渠道;缺省 channels 的第一个",
237
+ models: "自定义模型(同 id 整条替换)",
238
+ modelOverrides: "只改已有模型的元数据",
239
+ },
240
+ ...keyDocs.zh,
241
+ };
@@ -0,0 +1,123 @@
1
+ /**
2
+ * 消息目录:drivers(键名规范见 docs/i18n.md)。[W6-C0 建空壳,W6-I3 迁入 `src/{drivers,agents,hooks,host}/**`]
3
+ *
4
+ * en 是形状源;zh 用 `satisfies Messages<typeof en>`,缺键 / 多键 / 参数不符在 tsc 期报错。
5
+ * 整句一个键、禁止片段拼接;插值写成函数,条件分支写进函数体。
6
+ * 这里只放给人看的提示(外部 Agent 的 notice、日志、Hook 警告、宿主适配器错误);进 task 工具结果、
7
+ * 回给模型的文本固定英文,写在各模块里、不走这里。
8
+ */
9
+ export declare const en: {
10
+ /** 外部 Agent 的 notice 与日志。 */
11
+ agent: {
12
+ reapedOrphans: (pids: string) => string;
13
+ unverifiedVersion: (program: string, version: string, verified: string) => string;
14
+ cancelGraceExpired: string;
15
+ modeClamped: (agent: string, chosen: string, requested: string) => string;
16
+ overBudget: (agent: string) => string;
17
+ timedOut: (agent: string) => string;
18
+ resumeUnsupported: (agent: string) => string;
19
+ resumeNotFound: (agent: string, id: string) => string;
20
+ noMatchingMode: (agent: string, mode: string) => string;
21
+ noImages: (agent: string) => string;
22
+ noImagesDriver: (agent: string) => string;
23
+ noImagesOneshot: (agent: string) => string;
24
+ initializeRejected: (agent: string, error: string) => string;
25
+ nonJson: (agent: string) => string;
26
+ denials: (agent: string, count: number) => string;
27
+ budgetStop: (agent: string) => string;
28
+ error: (agent: string, message: string, retrying: boolean) => string;
29
+ askedQuestion: (agent: string, tool: string) => string;
30
+ askedQuestionCodex: (agent: string) => string;
31
+ mcpElicitation: (agent: string) => string;
32
+ };
33
+ /** Hook 配置与输出的警告(给人看;回给模型的阻止理由固定英文)。 */
34
+ hooks: {
35
+ configInvalid: (lines: string) => string;
36
+ projectUntrusted: (path: string) => string;
37
+ unknownDecision: (value: string) => string;
38
+ notString: (key: string) => string;
39
+ timedOut: (event: string, command: string, ms: number) => string;
40
+ failed: (event: string, command: string, exitCode: number | null, tail: string) => string;
41
+ invalidDecision: (event: string, command: string, decision: string) => string;
42
+ multipleInputs: (count: number) => string;
43
+ multiplePrompts: (count: number) => string;
44
+ };
45
+ /** 宿主适配器(host/**):错误给宿主开发者看,宿主按 code 判断。 */
46
+ host: {
47
+ handlerFailed: (name: string) => string;
48
+ toolNotObject: string;
49
+ toolBadName: (name: string) => string;
50
+ toolNoExecute: (name: string) => string;
51
+ toolBadPermission: (name: string) => string;
52
+ toolExists: (name: string) => string;
53
+ instructionNeedsPath: string;
54
+ instructionNeedsText: string;
55
+ brokerNeedsAsk: string;
56
+ warmingNeedsFunction: string;
57
+ runnerNeedsIdStart: string;
58
+ notAdapter: (label: string) => string;
59
+ versionMismatch: (label: string, found: string, needed: number) => string;
60
+ noCreate: (label: string) => string;
61
+ notFound: (path: string) => string;
62
+ loadFailed: (path: string, error: string) => string;
63
+ createTimeout: (label: string, ms: number) => string;
64
+ createFailed: (label: string, error: string) => string;
65
+ noId: (label: string) => string;
66
+ };
67
+ };
68
+ export declare const zh: {
69
+ agent: {
70
+ reapedOrphans: (pids: string) => string;
71
+ unverifiedVersion: (program: string, version: string, verified: string) => string;
72
+ cancelGraceExpired: string;
73
+ modeClamped: (agent: string, chosen: string, requested: string) => string;
74
+ overBudget: (agent: string) => string;
75
+ timedOut: (agent: string) => string;
76
+ resumeUnsupported: (agent: string) => string;
77
+ resumeNotFound: (agent: string, id: string) => string;
78
+ noMatchingMode: (agent: string, mode: string) => string;
79
+ noImages: (agent: string) => string;
80
+ noImagesDriver: (agent: string) => string;
81
+ noImagesOneshot: (agent: string) => string;
82
+ initializeRejected: (agent: string, error: string) => string;
83
+ nonJson: (agent: string) => string;
84
+ denials: (agent: string, count: number) => string;
85
+ budgetStop: (agent: string) => string;
86
+ error: (agent: string, message: string, retrying: boolean) => string;
87
+ askedQuestion: (agent: string, tool: string) => string;
88
+ askedQuestionCodex: (agent: string) => string;
89
+ mcpElicitation: (agent: string) => string;
90
+ };
91
+ hooks: {
92
+ configInvalid: (lines: string) => string;
93
+ projectUntrusted: (path: string) => string;
94
+ unknownDecision: (value: string) => string;
95
+ notString: (key: string) => string;
96
+ timedOut: (event: string, command: string, ms: number) => string;
97
+ failed: (event: string, command: string, exitCode: number | null, tail: string) => string;
98
+ invalidDecision: (event: string, command: string, decision: string) => string;
99
+ multipleInputs: (count: number) => string;
100
+ multiplePrompts: (count: number) => string;
101
+ };
102
+ host: {
103
+ handlerFailed: (name: string) => string;
104
+ toolNotObject: string;
105
+ toolBadName: (name: string) => string;
106
+ toolNoExecute: (name: string) => string;
107
+ toolBadPermission: (name: string) => string;
108
+ toolExists: (name: string) => string;
109
+ instructionNeedsPath: string;
110
+ instructionNeedsText: string;
111
+ brokerNeedsAsk: string;
112
+ warmingNeedsFunction: string;
113
+ runnerNeedsIdStart: string;
114
+ notAdapter: (label: string) => string;
115
+ versionMismatch: (label: string, found: string, needed: number) => string;
116
+ noCreate: (label: string) => string;
117
+ notFound: (path: string) => string;
118
+ loadFailed: (path: string, error: string) => string;
119
+ createTimeout: (label: string, ms: number) => string;
120
+ createFailed: (label: string, error: string) => string;
121
+ noId: (label: string) => string;
122
+ };
123
+ };
@@ -0,0 +1,124 @@
1
+ /**
2
+ * 消息目录:drivers(键名规范见 docs/i18n.md)。[W6-C0 建空壳,W6-I3 迁入 `src/{drivers,agents,hooks,host}/**`]
3
+ *
4
+ * en 是形状源;zh 用 `satisfies Messages<typeof en>`,缺键 / 多键 / 参数不符在 tsc 期报错。
5
+ * 整句一个键、禁止片段拼接;插值写成函数,条件分支写进函数体。
6
+ * 这里只放给人看的提示(外部 Agent 的 notice、日志、Hook 警告、宿主适配器错误);进 task 工具结果、
7
+ * 回给模型的文本固定英文,写在各模块里、不走这里。
8
+ */
9
+ import { plural } from "../format.js";
10
+ export const en = {
11
+ /** 外部 Agent 的 notice 与日志。 */
12
+ agent: {
13
+ reapedOrphans: (pids) => `cleaned up external agent processes left over from last time: ${pids}`,
14
+ unverifiedVersion: (program, version, verified) => `${program} ${version} is outside the verified range ${verified}; the protocol may have changed`,
15
+ cancelGraceExpired: "the external agent did not end its turn within the grace period after interrupt; closing the process",
16
+ modeClamped: (agent, chosen, requested) => `${agent} runs in "${chosen}" mode (requested "${requested}"; an external agent may not be looser than ama's current mode)`,
17
+ overBudget: (agent) => `${agent} exceeded its USD budget; interrupted`,
18
+ timedOut: (agent) => `${agent} timed out; interrupted`,
19
+ resumeUnsupported: (agent) => `${agent} cannot resume sessions; started a new one`,
20
+ resumeNotFound: (agent, id) => `${agent} cannot find session ${id}; started a new one`,
21
+ noMatchingMode: (agent, mode) => `${agent} has no "${mode}" mode; running in its own default mode (actions that need approval still come to you)`,
22
+ noImages: (agent) => `${agent} does not accept images; omitted`,
23
+ noImagesDriver: (agent) => `the ${agent} driver does not pass images yet; omitted`,
24
+ noImagesOneshot: (agent) => `${agent} one-shot mode does not pass images; omitted`,
25
+ initializeRejected: (agent, error) => `${agent}: initialize was not accepted (${error})`,
26
+ nonJson: (agent) => `${agent}: non-JSON output`,
27
+ denials: (agent, count) => `${agent} had ${plural(count, "action")} denied because no one was there to approve`,
28
+ budgetStop: (agent) => `${agent} reached its USD budget limit; stopped`,
29
+ error: (agent, message, retrying) => `${agent}: ${message}${retrying ? " (retrying)" : ""}`,
30
+ askedQuestion: (agent, tool) => `${agent} wants to ask you a question (${tool}); ama does not answer for you and asked it to put the question in its final reply`,
31
+ askedQuestionCodex: (agent) => `${agent} wants to ask you a question; ama does not answer for you — have it put the question in its final reply`,
32
+ mcpElicitation: (agent) => `${agent}'s MCP server asked for input; ama does not answer for you, cancelled`,
33
+ },
34
+ /** Hook 配置与输出的警告(给人看;回给模型的阻止理由固定英文)。 */
35
+ hooks: {
36
+ configInvalid: (lines) => `invalid config file:\n ${lines}`,
37
+ projectUntrusted: (path) => `${path}: project not trusted, skipping project hooks (use --trust or confirm trust in interactive mode)`,
38
+ unknownDecision: (value) => `unknown decision: ${value}`,
39
+ notString: (key) => `${key} must be a string`,
40
+ timedOut: (event, command, ms) => `Hook ${event} "${command}" timed out (${ms} ms)`,
41
+ failed: (event, command, exitCode, tail) => `Hook ${event} "${command}" failed (${exitCode === null ? "killed by a signal" : `exit code ${exitCode}`})${tail === "" ? "" : `: ${tail}`}`,
42
+ invalidDecision: (event, command, decision) => `Hook ${event} "${command}": decision "${decision}" is not valid for ${event}; ignored`,
43
+ multipleInputs: (count) => `${count} hooks returned updatedInput at once; all ignored`,
44
+ multiplePrompts: (count) => `${count} hooks returned updatedPrompt at once; all ignored`,
45
+ },
46
+ /** 宿主适配器(host/**):错误给宿主开发者看,宿主按 code 判断。 */
47
+ host: {
48
+ handlerFailed: (name) => `host event handler threw (${name})`,
49
+ toolNotObject: "tools.register: the tool definition must be an object",
50
+ toolBadName: (name) => `tools.register: invalid tool name: ${name}`,
51
+ toolNoExecute: (name) => `tools.register: ${name} is missing execute()`,
52
+ toolBadPermission: (name) => `tools.register: ${name} has an invalid permission`,
53
+ toolExists: (name) => `tools.register: tool ${name} already exists`,
54
+ instructionNeedsPath: "instructions.add: file needs path",
55
+ instructionNeedsText: "instructions.add: text needs text",
56
+ brokerNeedsAsk: "approvals.setBroker: broker needs ask()",
57
+ warmingNeedsFunction: "cache.onWarmingDecision: needs a function",
58
+ runnerNeedsIdStart: "runners.provide: needs a runner with id and start",
59
+ notAdapter: (label) => `${label}: not a host adapter module (missing hostApi / create export)`,
60
+ versionMismatch: (label, found, needed) => `${label}: host adapter hostApi=${found}, ama needs ${needed}`,
61
+ noCreate: (label) => `${label}: missing create(api) function`,
62
+ notFound: (path) => `host adapter not found: ${path}`,
63
+ loadFailed: (path, error) => `failed to load host adapter: ${path}: ${error}`,
64
+ createTimeout: (label, ms) => `${label}: create() did not return within ${ms} ms`,
65
+ createFailed: (label, error) => `${label}: create() failed: ${error}`,
66
+ noId: (label) => `${label}: the adapter returned by create() has no id`,
67
+ },
68
+ };
69
+ export const zh = {
70
+ agent: {
71
+ reapedOrphans: (pids) => `清理了上次遗留的外部 Agent 进程:${pids}`,
72
+ unverifiedVersion: (program, version, verified) => `${program} ${version} 不在已验证区间 ${verified},协议可能有变化`,
73
+ cancelGraceExpired: "外部 Agent 中断后未在宽限内结束回合,关闭进程",
74
+ modeClamped: (agent, chosen, requested) => `${agent} 以「${chosen}」模式运行(请求的是「${requested}」,外部 Agent 不得比 ama 当前模式宽)`,
75
+ overBudget: (agent) => `${agent} 超出美元预算,已中断`,
76
+ timedOut: (agent) => `${agent} 运行超时,已中断`,
77
+ resumeUnsupported: (agent) => `${agent} 不支持续接会话,已新开`,
78
+ resumeNotFound: (agent, id) => `${agent} 找不到会话 ${id},已新开`,
79
+ noMatchingMode: (agent, mode) => `${agent} 没有「${mode}」模式,按它自己的缺省模式运行(需要授权的操作仍交给你)`,
80
+ noImages: (agent) => `${agent} 不接受图片,已省略`,
81
+ noImagesDriver: (agent) => `${agent} 驱动暂不传图片,已省略`,
82
+ noImagesOneshot: (agent) => `${agent} 一次性模式不传图片,已省略`,
83
+ initializeRejected: (agent, error) => `${agent}: initialize 未被接受(${error})`,
84
+ nonJson: (agent) => `${agent}: 非 JSON 输出`,
85
+ denials: (agent, count) => `${agent} 有 ${count} 次操作因无人审批被拒绝`,
86
+ budgetStop: (agent) => `${agent} 达到美元预算上限,已停止`,
87
+ error: (agent, message, retrying) => `${agent}:${message}${retrying ? "(重试中)" : ""}`,
88
+ askedQuestion: (agent, tool) => `${agent} 想向你提问(${tool});ama 不代答,已请它把问题写进最终回复`,
89
+ askedQuestionCodex: (agent) => `${agent} 想向你提问;ama 不代答,请让它把问题写进最终回复`,
90
+ mcpElicitation: (agent) => `${agent} 的 MCP 服务器请求输入;ama 不代答,已取消`,
91
+ },
92
+ hooks: {
93
+ configInvalid: (lines) => `配置文件无效:\n ${lines}`,
94
+ projectUntrusted: (path) => `${path}: 项目未信任,跳过项目级 Hook(用 --trust 或在交互模式确认信任)`,
95
+ unknownDecision: (value) => `未知 decision:${value}`,
96
+ notString: (key) => `${key} 应为字符串`,
97
+ timedOut: (event, command, ms) => `Hook ${event}「${command}」超时(${ms} ms)`,
98
+ failed: (event, command, exitCode, tail) => `Hook ${event}「${command}」失败(${exitCode === null ? "被信号终止" : `退出码 ${exitCode}`})${tail === "" ? "" : `:${tail}`}`,
99
+ invalidDecision: (event, command, decision) => `Hook ${event}「${command}」的 decision "${decision}" 对 ${event} 无效,已忽略`,
100
+ multipleInputs: (count) => `${count} 个 Hook 同时返回 updatedInput,全部忽略`,
101
+ multiplePrompts: (count) => `${count} 个 Hook 同时返回 updatedPrompt,全部忽略`,
102
+ },
103
+ host: {
104
+ handlerFailed: (name) => `宿主事件处理器异常(${name})`,
105
+ toolNotObject: "tools.register:工具定义应为对象",
106
+ toolBadName: (name) => `tools.register:工具名不合法:${name}`,
107
+ toolNoExecute: (name) => `tools.register:${name} 缺少 execute()`,
108
+ toolBadPermission: (name) => `tools.register:${name} 的 permission 不合法`,
109
+ toolExists: (name) => `tools.register:工具 ${name} 已存在`,
110
+ instructionNeedsPath: "instructions.add:file 需要 path",
111
+ instructionNeedsText: "instructions.add:text 需要 text",
112
+ brokerNeedsAsk: "approvals.setBroker:broker 需要 ask()",
113
+ warmingNeedsFunction: "cache.onWarmingDecision:需要函数",
114
+ runnerNeedsIdStart: "runners.provide:需要带 id 与 start 的 runner",
115
+ notAdapter: (label) => `${label}: 不是宿主适配器模块(缺少 hostApi / create 导出)`,
116
+ versionMismatch: (label, found, needed) => `${label}: 宿主适配器 hostApi=${found},ama 需要 ${needed}`,
117
+ noCreate: (label) => `${label}: 缺少 create(api) 函数`,
118
+ notFound: (path) => `宿主适配器不存在:${path}`,
119
+ loadFailed: (path, error) => `宿主适配器加载失败:${path}:${error}`,
120
+ createTimeout: (label, ms) => `${label}: create() 超过 ${ms} ms 未返回`,
121
+ createFailed: (label, error) => `${label}: create() 失败:${error}`,
122
+ noId: (label) => `${label}: create() 返回的适配器缺少 id`,
123
+ },
124
+ };
@@ -0,0 +1,83 @@
1
+ /**
2
+ * 消息目录:errors(键名规范见 docs/i18n.md)。[W6-C0 建空壳,归 W6-I3]
3
+ *
4
+ * en 是形状源;zh 用 `satisfies Messages<typeof en>`,缺键 / 多键 / 参数不符在 tsc 期报错。
5
+ * 整句一个键、禁止片段拼接;插值写成函数,条件分支写进函数体。
6
+ */
7
+ import type { ImageFileErrorDetail } from "../../tools/image-file.js";
8
+ import type { FieldSource } from "../../ai/providers/enrich.js";
9
+ import type { MatchKind } from "../../ai/providers/models-dev.js";
10
+ import type { ModelLookup } from "../../ai/types.js";
11
+ export declare const en: {
12
+ /** [W6-I3] 图片附件:当前模型不收图片(`--image` / `@路径`)。 */
13
+ imageUnsupported: (model: string | undefined) => string;
14
+ /** [W6-I3] SDK(`createRuntime` / `createAgentSession`)。 */
15
+ /** [W6-I5] 端点拒收缓存参数后自动去掉重发(`ai/apis/cache-params.ts`)。 */
16
+ cacheParamsStripped: (key: string, field: string, suggestion: string | undefined) => string;
17
+ sdk: {
18
+ noSubcommand: string;
19
+ modelNotFound: (ref: string) => string;
20
+ noModel: string;
21
+ noPlan: string;
22
+ };
23
+ /** [W6-I3] 模型查找、models.dev 元数据(`src/ai/providers/**`)。 */
24
+ models: {
25
+ lookupFailure: (ref: string, reason: Extract<ModelLookup, {
26
+ ok: false;
27
+ }>["reason"], list: string, hasCandidates: boolean) => string;
28
+ source: (source: FieldSource) => string;
29
+ unmatched: string;
30
+ match: (kind: MatchKind, ref: string, normalized: string | undefined) => string;
31
+ consensus: (key: string, entries: number, groups: number, best: number, signature: string) => string;
32
+ notObject: string;
33
+ snapshotMissing: (id: string) => string;
34
+ apiNotObject: string;
35
+ apiMissingProvider: (id: string) => string;
36
+ noModelsAfterFilter: (id: string) => string;
37
+ none: string;
38
+ describe: (via: string, providers: number, models: number) => string;
39
+ viaSnapshot: (at: string) => string;
40
+ viaRefresh: (snapshot: string, refreshed: string) => string;
41
+ refreshFailed: (reason: string) => string;
42
+ notListed: (unknown: string, choices: string) => string;
43
+ refreshStatus: (status: "updated" | "unchanged" | "failed", providers: number, models: number, at: string | undefined) => string;
44
+ section: (kind: "added" | "removed" | "changed", count: number) => string;
45
+ more: (count: number) => string;
46
+ changed: (ref: string, parts: readonly string[]) => string;
47
+ };
48
+ /** [W6-C0] 读图失败(`tools/image-file.ts` 的 `AmaError.detail`),`--image` 与 `@路径` 显示。 */
49
+ imageFile: (d: ImageFileErrorDetail) => string;
50
+ };
51
+ export declare const zh: {
52
+ imageUnsupported: (model: string | undefined) => string;
53
+ cacheParamsStripped: (key: string, field: string, suggestion: string | undefined) => string;
54
+ sdk: {
55
+ noSubcommand: string;
56
+ modelNotFound: (ref: string) => string;
57
+ noModel: string;
58
+ noPlan: string;
59
+ };
60
+ models: {
61
+ lookupFailure: (ref: string, reason: "not_found" | "ambiguous" | "provider_not_found" | "channel_not_found", list: string, hasCandidates: boolean) => string;
62
+ source: (source: FieldSource) => "config" | "目录" | "缺省" | "models.dev";
63
+ unmatched: string;
64
+ match: (kind: MatchKind, ref: string, normalized: string | undefined) => string;
65
+ consensus: (key: string, entries: number, groups: number, best: number, signature: string) => string;
66
+ notObject: string;
67
+ snapshotMissing: (id: string) => string;
68
+ apiNotObject: string;
69
+ apiMissingProvider: (id: string) => string;
70
+ noModelsAfterFilter: (id: string) => string;
71
+ none: string;
72
+ describe: (via: string, providers: number, models: number) => string;
73
+ viaSnapshot: (at: string) => string;
74
+ viaRefresh: (snapshot: string, refreshed: string) => string;
75
+ refreshFailed: (reason: string) => string;
76
+ notListed: (unknown: string, choices: string) => string;
77
+ refreshStatus: (status: "failed" | "unchanged" | "updated", providers: number, models: number, at: string | undefined) => string;
78
+ section: (kind: "added" | "removed" | "changed", count: number) => string;
79
+ more: (count: number) => string;
80
+ changed: (ref: string, parts: readonly string[]) => string;
81
+ };
82
+ imageFile: (d: ImageFileErrorDetail) => string;
83
+ };