@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,145 @@
1
+ /**
2
+ * `ama config get | set | unset | list` (docs/wave6-plan.md §6.4, D24-D26). [W6-S]
3
+ *
4
+ * Thin layer over config/edit.ts (the `/config` panel uses the same core):
5
+ * - `get <key> [--json]`: effective value, source layer and apply tier;
6
+ * - `set <key> <value> [--project] [--json-value] [--yes]`: write one key to the user file (or the
7
+ * project file, tighten only); lists and objects need `--json-value`; `permission.mode full-auto`
8
+ * asks once on a TTY and needs `--yes` otherwise;
9
+ * - `unset <key> [--project]`;
10
+ * - `list [prefix] [--json] [--all]`: panel settings (or every settable key with `--all`).
11
+ * Unknown keys, invalid values and refused project writes exit 3 (`ExitCode.Config`). `get` / `list`
12
+ * never create the config directory. `--profile <file>` adds the host profile layer to the view.
13
+ */
14
+ import { msg } from "../../i18n/index.js";
15
+ import { assertSettable, formatSettingValue, getConfigValue, parseValue, readSnapshot, setConfigValue, } from "../../config/edit.js";
16
+ import { existsSync } from "node:fs";
17
+ import { join } from "node:path";
18
+ import { initConfigDir } from "../../config/init.js";
19
+ import { CONFIG_FILE, resolveConfigDir } from "../../config/paths.js";
20
+ import { loadProfile } from "../../config/profile.js";
21
+ import { settableKeys, settingSpec, settingsRegistry } from "../../config/settings-registry.js";
22
+ import { confirmContinue } from "../choice-prompt.js";
23
+ import { parseSubArgs, UsageError } from "../args.js";
24
+ import { ExitCode } from "../exit-codes.js";
25
+ export const CONFIG_EDIT_ACTIONS = ["get", "set", "unset", "list"];
26
+ function layerInput(io, profilePath) {
27
+ const input = {
28
+ configDir: resolveConfigDir({ env: io.env }),
29
+ cwd: io.cwd,
30
+ env: io.env,
31
+ };
32
+ if (profilePath !== undefined) {
33
+ const profile = loadProfile(profilePath, io.cwd);
34
+ input.profile = { config: profile.config };
35
+ input.hasProfile = true;
36
+ }
37
+ return input;
38
+ }
39
+ function applyText(key) {
40
+ const spec = settingSpec(key);
41
+ const s = msg().settings;
42
+ if (spec === undefined)
43
+ return s.cli.applyNone;
44
+ return spec.prefix === true ? `${s.apply[spec.apply]} · ${s.prefixTag}` : s.apply[spec.apply];
45
+ }
46
+ function jsonRow(value) {
47
+ const spec = settingSpec(value.key);
48
+ return {
49
+ key: value.key,
50
+ value: value.value ?? null,
51
+ source: value.source,
52
+ ...(value.envName !== undefined ? { env: value.envName } : {}),
53
+ apply: spec?.apply ?? null,
54
+ prefix: spec?.prefix === true,
55
+ project: spec?.project ?? null,
56
+ };
57
+ }
58
+ function textRow(value) {
59
+ const source = value.envName !== undefined ? `env ${value.envName}` : value.source;
60
+ return msg().settings.cli.getLine(value.key, formatSettingValue(value.value), source, applyText(value.key));
61
+ }
62
+ function scopeLabel(scope) {
63
+ return msg().settings.scope[scope];
64
+ }
65
+ /**
66
+ * Receipt of a write. When a higher layer (env, project, cli, profile) still hides the key, the first line shows the
67
+ * value just written and its layer, and the second line names the overriding source and the effective value.
68
+ */
69
+ function report(io, result, written) {
70
+ const s = msg().settings;
71
+ const effective = formatSettingValue(result.after.value);
72
+ const scope = scopeLabel(result.scope);
73
+ const by = result.after.envName ?? result.overriddenBy;
74
+ if (written === undefined)
75
+ io.stdout(`${s.unsetDone(result.key, effective, scope)}\n`);
76
+ else if (by === undefined)
77
+ io.stdout(`${s.setDone(result.key, effective, scope)}\n`);
78
+ else
79
+ io.stdout(`${s.writtenTo(result.key, formatSettingValue(written), scope)}\n`);
80
+ if (by === undefined)
81
+ return;
82
+ io.stdout(`${written === undefined ? s.stillOverridden(result.key, by) : s.overriddenNow(by, effective)}\n`);
83
+ }
84
+ /** Confirm persisting `permission.mode full-auto`: TTY asks, otherwise `--yes` is required. */
85
+ async function confirmBypass(io, yes, deps) {
86
+ const s = msg().settings.cli;
87
+ if (yes)
88
+ return true;
89
+ if (!io.stdinIsTTY) {
90
+ io.stderr(`ama: ${s.needYes}\n`);
91
+ return false;
92
+ }
93
+ const ask = deps.confirm ?? ((question) => confirmContinue({ question, env: io.env }));
94
+ if (await ask(s.confirmBypass))
95
+ return true;
96
+ io.stderr(`${s.cancelled}\n`);
97
+ return false;
98
+ }
99
+ export async function runConfigEdit(action, argv, io, deps = {}) {
100
+ const { positionals, values, flags } = parseSubArgs(argv, ["profile"], ["json", "project", "json-value", "yes", "all"]);
101
+ const s = msg().settings;
102
+ if (flags.has("help")) {
103
+ io.stdout(s.cli.usage);
104
+ return ExitCode.Ok;
105
+ }
106
+ const input = layerInput(io, values.get("profile"));
107
+ const scope = flags.has("project") ? "project" : "user";
108
+ if (action === "list") {
109
+ const snapshot = readSnapshot(input);
110
+ const prefix = positionals[0] ?? "";
111
+ const keys = (flags.has("all") ? settableKeys() : settingsRegistry().map((spec) => spec.key)).filter((key) => key.startsWith(prefix));
112
+ const rows = keys.map((key) => getConfigValue(snapshot, key));
113
+ if (flags.has("json"))
114
+ io.stdout(`${JSON.stringify(rows.map(jsonRow), null, 2)}\n`);
115
+ else
116
+ io.stdout(`${[s.cli.listHeader, ...rows.map((r) => ` ${textRow(r)}`)].join("\n")}\n`);
117
+ return ExitCode.Ok;
118
+ }
119
+ const key = positionals[0];
120
+ if (key === undefined)
121
+ throw new UsageError(s.cli.missingKey);
122
+ if (action === "get") {
123
+ assertSettable(key);
124
+ const value = getConfigValue(readSnapshot(input), key);
125
+ io.stdout(flags.has("json") ? `${JSON.stringify(jsonRow(value), null, 2)}\n` : `${textRow(value)}\n`);
126
+ return ExitCode.Ok;
127
+ }
128
+ if (action === "unset") {
129
+ report(io, setConfigValue({ ...input, scope, key, value: undefined }), undefined);
130
+ return ExitCode.Ok;
131
+ }
132
+ const raw = positionals.slice(1).join(" ");
133
+ if (positionals.length < 2)
134
+ throw new UsageError(s.cli.missingValue);
135
+ const value = parseValue(key, raw, flags.has("json-value"));
136
+ if (key === "permission.mode" && value === "full-auto" && scope === "user") {
137
+ if (!(await confirmBypass(io, flags.has("yes"), deps)))
138
+ return ExitCode.Config;
139
+ }
140
+ // first write to a fresh config dir: lay out config.json + config.schema.json like `ama init`
141
+ if (scope === "user" && !existsSync(join(input.configDir, CONFIG_FILE)))
142
+ initConfigDir(input.configDir);
143
+ report(io, setConfigValue({ ...input, scope, key, value }), value);
144
+ return ExitCode.Ok;
145
+ }
@@ -14,7 +14,8 @@
14
14
  import { type AmaConfig, type CodemodeMode } from "../../config/types.js";
15
15
  import type { Api, ProviderRegistryApi } from "../../ai/types.js";
16
16
  import type { CliIo, RuntimeDeps } from "../deps.js";
17
- export declare const CONFIG_USAGE = "\u7528\u6CD5\uFF1Aama config show [--json] [--profile <\u6587\u4EF6>] [--auth-file <\u6587\u4EF6>]\n [--tools-preset <\u540D>] [--codemode off|on|only]\n ama config path \u914D\u7F6E\u76EE\u5F55\u3001\u6570\u636E\u76EE\u5F55\u4E0E\u5404\u6587\u4EF6\u8DEF\u5F84\n ama config edit \u7528 $VISUAL / $EDITOR \u6253\u5F00 config.json\uFF08\u6CA1\u6709\u7F16\u8F91\u5668\u65F6\u6253\u5370\u8DEF\u5F84\uFF09\n";
17
+ /** `ama config --help` 的前半(get / set 等编辑子命令的用法接在后面)。 */
18
+ export declare const configUsage: () => string;
18
19
  type Layer = {
19
20
  name: "default" | "user" | "profile" | "project" | "cli";
20
21
  label: string;
@@ -34,26 +34,30 @@ import { ExitCode } from "../exit-codes.js";
34
34
  import { buildRegistry, loadUserLevel } from "./context.js";
35
35
  import { osSandboxStatus } from "../../sandbox/detect.js";
36
36
  import { resolveBashSandbox } from "../../sandbox/bash.js";
37
- export const CONFIG_USAGE = `用法:ama config show [--json] [--profile <文件>] [--auth-file <文件>]
38
- [--tools-preset <名>] [--codemode off|on|only]
39
- ama config path 配置目录、数据目录与各文件路径
40
- ama config edit 用 $VISUAL / $EDITOR 打开 config.json(没有编辑器时打印路径)
41
- `;
37
+ import { msg } from "../../i18n/index.js";
38
+ import { padToWidth, visibleWidth } from "../../tui/ansi.js";
39
+ import { CONFIG_EDIT_ACTIONS, runConfigEdit } from "./config-set.js";
40
+ const isEditAction = (value) => CONFIG_EDIT_ACTIONS.includes(value);
41
+ /** `ama config --help` 的前半(get / set 等编辑子命令的用法接在后面)。 */
42
+ export const configUsage = () => msg().subcommands.configShow.usage;
42
43
  /** `ama config path`:目录与文件路径,标出是否存在。 */
43
44
  function showPaths(io) {
44
45
  const configDir = resolveConfigDir({ env: io.env });
45
46
  const dataDir = resolveDataDir({ env: io.env });
46
- const mark = (path) => `${path}${existsSync(path) ? "" : " (不存在)"}`;
47
+ const m = msg().subcommands.configShow;
48
+ const mark = (path) => `${path}${existsSync(path) ? "" : m.missing}`;
49
+ const width = Math.max(...[m.configDir, m.dataDir, m.projectLevel].map(visibleWidth)) + 2;
50
+ const label = (text) => padToWidth(text, width);
47
51
  const lines = [
48
- `配置目录 ${mark(configDir)}`,
52
+ `${label(m.configDir)}${mark(configDir)}`,
49
53
  ` config.json ${mark(join(configDir, CONFIG_FILE))}`,
50
54
  ` config.schema.json ${mark(join(configDir, CONFIG_SCHEMA_FILE))}`,
51
55
  ` auth.json ${mark(join(configDir, AUTH_FILE))}`,
52
56
  ` hooks.json ${mark(join(configDir, HOOKS_FILE))}`,
53
- `数据目录 ${mark(dataDir)}`,
57
+ `${label(m.dataDir)}${mark(dataDir)}`,
54
58
  ` sessions/ ${mark(join(dataDir, "sessions"))}`,
55
59
  ` models-dev.json ${mark(modelsDevCachePath(dataDir))}`,
56
- `项目级 ${mark(projectFile(io.cwd, CONFIG_FILE))}`,
60
+ `${label(m.projectLevel)}${mark(projectFile(io.cwd, CONFIG_FILE))}`,
57
61
  ];
58
62
  io.stdout(`${lines.join("\n")}\n`);
59
63
  return ExitCode.Ok;
@@ -66,13 +70,13 @@ function editConfig(io) {
66
70
  initConfigDir(configDir);
67
71
  const editor = (io.env["VISUAL"] ?? io.env["EDITOR"] ?? "").trim();
68
72
  if (editor === "") {
69
- io.stdout(`${path}\n(没有设置 $VISUAL / $EDITOR,请用编辑器打开上面的文件)\n`);
73
+ io.stdout(msg().subcommands.configShow.noEditor(path));
70
74
  return ExitCode.Ok;
71
75
  }
72
76
  const quoted = process.platform === "win32" ? `"${path}"` : `'${path.replace(/'/g, `'\\''`)}'`;
73
77
  const result = spawnSync(`${editor} ${quoted}`, { stdio: "inherit", shell: true });
74
78
  if (result.error !== undefined || result.status !== 0) {
75
- io.stderr(`ama: 编辑器退出异常(${editor});文件在 ${path}\n`);
79
+ io.stderr(msg().subcommands.configShow.editorFailed(editor, path));
76
80
  return ExitCode.RuntimeError;
77
81
  }
78
82
  return ExitCode.Ok;
@@ -111,19 +115,20 @@ function display(path, value) {
111
115
  export async function describeModel(config, registry) {
112
116
  if (config.defaultModel !== undefined)
113
117
  return { ref: config.defaultModel, reason: "config.defaultModel" };
118
+ const m = msg().subcommands.configShow;
114
119
  if (registry === undefined)
115
- return { ref: undefined, reason: "注册表未装配" };
120
+ return { ref: undefined, reason: m.registryMissing };
116
121
  const picked = await pickDefaultModel(registry);
117
122
  if (picked === undefined)
118
123
  return { ref: undefined, reason: noModelGuidance(registry) };
119
124
  const ref = `${picked.provider.id}/${picked.model.id}`;
120
125
  if (picked.via === "local")
121
- return { ref, reason: `零配置:本地 ${picked.provider.id} 可达;${picked.rule}` };
126
+ return { ref, reason: m.zeroConfigLocal(picked.provider.id, picked.rule) };
122
127
  const key = await registry.resolveApiKey(picked.provider.id);
123
128
  const origin = key.origin !== undefined ? ` ${key.origin}` : "";
124
129
  return {
125
130
  ref,
126
- reason: `零配置:${picked.provider.id} 有 key(${key.source}${origin});${picked.rule}`,
131
+ reason: m.zeroConfigKey(picked.provider.id, `${key.source}${origin}`, picked.rule),
127
132
  };
128
133
  }
129
134
  /** config 里出现的供应商 + baseUrl 来自环境变量的内置供应商。 */
@@ -170,9 +175,10 @@ export function describeProviders(config, registry) {
170
175
  function providerLines(providers) {
171
176
  if (providers.length === 0)
172
177
  return [];
173
- const lines = ["", "供应商:"];
178
+ const m = msg().subcommands.configShow;
179
+ const lines = ["", m.providersHeading];
174
180
  for (const p of providers) {
175
- const env = p.baseUrlEnv !== undefined ? `(baseUrl 来自环境变量 ${p.baseUrlEnv})` : "";
181
+ const env = p.baseUrlEnv !== undefined ? m.baseUrlFromEnv(p.baseUrlEnv) : "";
176
182
  lines.push(` ${p.id} ${p.api} ${p.baseUrl}${env}`);
177
183
  for (const c of p.channels ?? [])
178
184
  lines.push(` @${c.name} ${c.api} ${c.baseUrl}`);
@@ -185,7 +191,8 @@ function providerLines(providers) {
185
191
  return lines;
186
192
  }
187
193
  function layersOf(level, project, effective, cli) {
188
- const layers = [{ name: "default", label: "内置缺省", value: DISPLAY_DEFAULTS }];
194
+ const m = msg().subcommands.configShow;
195
+ const layers = [{ name: "default", label: m.layerDefault, value: DISPLAY_DEFAULTS }];
189
196
  const user = loadConfigFile("config", level.userConfigPath)?.value;
190
197
  if (user !== undefined)
191
198
  layers.push({ name: "user", label: level.userConfigPath, value: user });
@@ -209,7 +216,7 @@ function layersOf(level, project, effective, cli) {
209
216
  layers.push({ name: "project", label: ".ama/config.json", value: unflatten(accepted) });
210
217
  }
211
218
  if (cli !== undefined && Object.keys(cli).length > 0)
212
- layers.push({ name: "cli", label: "命令行", value: cli });
219
+ layers.push({ name: "cli", label: m.layerCli, value: cli });
213
220
  return layers;
214
221
  }
215
222
  function unflatten(flat) {
@@ -243,14 +250,15 @@ export function sourcesOf(effective, layers) {
243
250
  export function describeCodemode(config, nodeVersion) {
244
251
  const capability = nodeVersion === undefined ? sandboxCapabilityFor(config) : detectSandboxCapability(nodeVersion);
245
252
  const resolved = resolveCodemodeMode(config, capability.strict);
253
+ const m = msg().subcommands.configShow;
246
254
  const sandbox = capability.nodeMajor >= 25
247
- ? `Node ${capability.nodeMajor} 网络已隔离`
255
+ ? m.sandboxIsolated(capability.nodeMajor)
248
256
  : capability.strict
249
- ? `Node ${capability.nodeMajor} 网络由操作系统沙箱 ${capability.os.kind} 隔离`
250
- : `Node ${capability.nodeMajor} < 25 网络未隔离`;
257
+ ? m.sandboxOs(capability.nodeMajor, capability.os.kind)
258
+ : m.sandboxNone(capability.nodeMajor);
251
259
  const reason = resolved.source === "config"
252
- ? `codemode.mode 显式设置(${sandbox})`
253
- : `跟随预设 ${resolved.preset}(${sandbox})`;
260
+ ? m.codemodeExplicit(sandbox)
261
+ : m.codemodeFollowsPreset(resolved.preset, sandbox);
254
262
  const out = {
255
263
  mode: resolved.mode,
256
264
  source: resolved.source,
@@ -270,7 +278,7 @@ function presetAliasNotes(layers) {
270
278
  for (const layer of layers) {
271
279
  const preset = layer.value?.tools?.preset;
272
280
  if (preset !== undefined && Object.hasOwn(TOOLS_PRESET_ALIASES, preset))
273
- notes.push(`${layer.name}(${layer.label})的 tools.preset 写的是旧名 ${preset},规范名 ${canonicalPreset(preset)}`);
281
+ notes.push(msg().subcommands.configShow.presetAlias(layer.name, layer.label, preset, canonicalPreset(preset)));
274
282
  }
275
283
  return notes;
276
284
  }
@@ -279,21 +287,26 @@ function choice(name, value, all) {
279
287
  return undefined;
280
288
  if (all.includes(value))
281
289
  return value;
282
- throw new UsageError(`--${name} 的取值应为 ${all.join(" | ")}(收到 ${value})`);
290
+ throw new UsageError(msg().subcommands.common.invalidChoice(`--${name}`, all, value));
283
291
  }
284
292
  export async function runConfig(argv, io, deps) {
293
+ // [W6-S] get / set / unset / list(config-set.ts)
294
+ const edit = argv.findIndex((a) => !a.startsWith("-"));
295
+ if (edit !== -1 && isEditAction(argv[edit]))
296
+ return runConfigEdit(argv[edit], [...argv.slice(0, edit), ...argv.slice(edit + 1)], io);
285
297
  const { positionals, values, flags } = parseSubArgs(argv, ["profile", "auth-file", "tools-preset", "codemode"], ["json"]);
286
298
  const action = positionals[0] ?? "show";
287
299
  if (flags.has("help")) {
288
- io.stdout(CONFIG_USAGE);
300
+ io.stdout(`${configUsage()}${msg().settings.cli.usage}`);
289
301
  return ExitCode.Ok;
290
302
  }
291
303
  if (action === "path")
292
304
  return showPaths(io);
293
305
  if (action === "edit")
294
306
  return editConfig(io);
307
+ const m = msg().subcommands.configShow;
295
308
  if (action !== "show")
296
- throw new UsageError(`未知的 config 子命令:${action}`);
309
+ throw new UsageError(m.unknownAction(action));
297
310
  const cli = {};
298
311
  const presetFlag = choice("tools-preset", values.get("tools-preset"), TOOLS_PRESET_INPUTS);
299
312
  if (presetFlag !== undefined)
@@ -338,7 +351,7 @@ export async function runConfig(argv, io, deps) {
338
351
  rows.push({
339
352
  path: "codemode.mode",
340
353
  value: codemode.mode,
341
- source: `default(${codemode.reason})`,
354
+ source: m.defaultSource(codemode.reason),
342
355
  });
343
356
  rows.sort((a, b) => (a.path < b.path ? -1 : a.path > b.path ? 1 : 0));
344
357
  if (flags.has("json")) {
@@ -350,9 +363,9 @@ export async function runConfig(argv, io, deps) {
350
363
  io.stdout(`${JSON.stringify({ model, providers, tools: preset.builtin, preset: preset.preset, codemode, bashSandbox: { active: bashSandbox.active, detail: bashSandbox.detail }, entries, layers: layers.map((l) => ({ name: l.name, file: l.label })), notes, warnings }, null, 2)}\n`);
351
364
  return ExitCode.Ok;
352
365
  }
353
- const lines = ["生效配置(来源:default 内置 ← user ← profile ← project 只能收紧 ← cli)"];
366
+ const lines = [m.heading];
354
367
  for (const layer of layers.slice(1))
355
- lines.push(` ${layer.name}:${layer.label}`);
368
+ lines.push(m.layerLine(layer.name, layer.label));
356
369
  lines.push("");
357
370
  const texts = rows.map((row) => [`${row.path} = ${display(row.path, row.value)}`, row.source]);
358
371
  const width = Math.min(60, Math.max(...texts.map(([text]) => (text ?? "").length)));
@@ -360,16 +373,17 @@ export async function runConfig(argv, io, deps) {
360
373
  lines.push(` ${(text ?? "").padEnd(width)} ${source}`);
361
374
  lines.push(...providerLines(providers));
362
375
  lines.push("");
363
- lines.push(`模型:${model.ref ?? "(无)"} ${model.reason}`);
364
- lines.push(`工具:${preset.builtin.join(", ")}(预设 ${preset.preset},codemode ${preset.codemode})`);
365
- lines.push(`codemode:${codemode.mode} ${codemode.reason}`);
376
+ lines.push(m.model(model.ref, model.reason));
377
+ lines.push(m.tools(preset.builtin.join(", "), preset.preset, preset.codemode));
378
+ lines.push(m.codemode(codemode.mode, codemode.reason));
366
379
  if (codemode.unavailable !== undefined)
367
380
  lines.push(` ${codemode.unavailable}`);
368
- lines.push(`bash 沙箱:${bashSandbox.detail}`);
381
+ lines.push(m.bashSandbox(bashSandbox.detail));
369
382
  for (const note of notes)
370
- lines.push(`提示:${note}`);
371
- for (const warning of [...warnings, ...preset.warnings])
372
- lines.push(`警告:${warning}`);
383
+ lines.push(m.note(note));
384
+ const presetWarnings = preset.warnings.map((w) => msg().session.codemode.presetWarning(w));
385
+ for (const warning of [...warnings, ...presetWarnings])
386
+ lines.push(m.warning(warning));
373
387
  io.stdout(`${lines.join("\n")}\n`);
374
388
  return ExitCode.Ok;
375
389
  }
@@ -7,5 +7,6 @@
7
7
  * [W3-B12] baseUrl 来自 `OPENAI_BASE_URL` / `ANTHROPIC_BASE_URL` 时在 key 行后标出变量与地址。
8
8
  */
9
9
  import type { CliIo, RuntimeDeps } from "../deps.js";
10
- export declare const DOCTOR_USAGE = "\u7528\u6CD5\uFF1Aama doctor [--profile <\u6587\u4EF6>] [--auth-file <\u6587\u4EF6>] [--trust | --no-trust]\n";
10
+ /** 用法(随界面语言)。 */
11
+ export declare function doctorUsage(): string;
11
12
  export declare function runDoctor(argv: readonly string[], io: CliIo, deps: RuntimeDeps | undefined): Promise<number>;