@armadra/agent 0.4.0 → 0.5.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 (432) hide show
  1. package/CHANGELOG.md +184 -1
  2. package/README.md +202 -83
  3. package/THIRD_PARTY_NOTICES.md +34 -0
  4. package/dist/acp.d.ts +18 -0
  5. package/dist/acp.js +19 -0
  6. package/dist/agent/limits.d.ts +38 -0
  7. package/dist/agent/limits.js +127 -0
  8. package/dist/agent/loop-guard.d.ts +38 -0
  9. package/dist/agent/loop-guard.js +95 -0
  10. package/dist/agent/loop.d.ts +4 -0
  11. package/dist/agent/loop.js +7 -0
  12. package/dist/agent/prompt-rules.d.ts +12 -0
  13. package/dist/agent/prompt-rules.js +18 -0
  14. package/dist/agent/reminders.d.ts +59 -0
  15. package/dist/agent/reminders.js +327 -0
  16. package/dist/agent/session-cache.d.ts +5 -0
  17. package/dist/agent/session-cache.js +17 -1
  18. package/dist/agent/session-classifier.d.ts +1 -1
  19. package/dist/agent/session-classifier.js +3 -1
  20. package/dist/agent/session-compaction.d.ts +35 -6
  21. package/dist/agent/session-compaction.js +157 -31
  22. package/dist/agent/session-core.d.ts +27 -1
  23. package/dist/agent/session-extensions.d.ts +61 -0
  24. package/dist/agent/session-extensions.js +129 -0
  25. package/dist/agent/session-images.d.ts +23 -0
  26. package/dist/agent/session-images.js +97 -0
  27. package/dist/agent/session-plan.d.ts +21 -0
  28. package/dist/agent/session-plan.js +524 -0
  29. package/dist/agent/session-rewind.d.ts +81 -0
  30. package/dist/agent/session-rewind.js +354 -0
  31. package/dist/agent/session-run.d.ts +28 -1
  32. package/dist/agent/session-run.js +157 -6
  33. package/dist/agent/session-settings.d.ts +49 -0
  34. package/dist/agent/session-settings.js +95 -0
  35. package/dist/agent/session-subagent.d.ts +36 -24
  36. package/dist/agent/session-subagent.js +259 -129
  37. package/dist/agent/session-sync.d.ts +10 -3
  38. package/dist/agent/session-sync.js +37 -8
  39. package/dist/agent/session-telemetry.d.ts +39 -0
  40. package/dist/agent/session-telemetry.js +231 -0
  41. package/dist/agent/session-tools.js +40 -1
  42. package/dist/agent/session.d.ts +30 -29
  43. package/dist/agent/session.js +79 -123
  44. package/dist/agent/subagent-registry.d.ts +91 -0
  45. package/dist/agent/subagent-registry.js +494 -0
  46. package/dist/agent/system-prompt.d.ts +6 -3
  47. package/dist/agent/system-prompt.js +7 -2
  48. package/dist/agent/tool-runner.d.ts +8 -1
  49. package/dist/agent/tool-runner.js +57 -4
  50. package/dist/agent/types-w5.d.ts +192 -0
  51. package/dist/agent/types-w5.js +10 -0
  52. package/dist/agent/types.d.ts +47 -4
  53. package/dist/agent/types.js +2 -0
  54. package/dist/agent/worktree.d.ts +36 -0
  55. package/dist/agent/worktree.js +86 -0
  56. package/dist/agents/builtin.d.ts +14 -0
  57. package/dist/agents/builtin.js +39 -0
  58. package/dist/agents/catalog.d.ts +43 -0
  59. package/dist/agents/catalog.js +82 -0
  60. package/dist/agents/discover.d.ts +35 -0
  61. package/dist/agents/discover.js +83 -0
  62. package/dist/agents/external.d.ts +82 -0
  63. package/dist/agents/external.js +326 -0
  64. package/dist/agents/parse.d.ts +18 -0
  65. package/dist/agents/parse.js +116 -0
  66. package/dist/agents/result.d.ts +32 -0
  67. package/dist/agents/result.js +67 -0
  68. package/dist/agents/task-control.d.ts +17 -0
  69. package/dist/agents/task-control.js +17 -0
  70. package/dist/agents/task-record.d.ts +78 -0
  71. package/dist/agents/task-record.js +141 -0
  72. package/dist/agents/types.d.ts +46 -0
  73. package/dist/agents/types.js +8 -0
  74. package/dist/ai/apis/anthropic-compat.d.ts +36 -0
  75. package/dist/ai/apis/anthropic-compat.js +92 -0
  76. package/dist/ai/apis/anthropic-request.d.ts +7 -6
  77. package/dist/ai/apis/anthropic-request.js +10 -28
  78. package/dist/ai/apis/cache-params.d.ts +11 -2
  79. package/dist/ai/apis/cache-params.js +25 -6
  80. package/dist/ai/apis/openai-compat.d.ts +4 -1
  81. package/dist/ai/apis/openai-compat.js +8 -1
  82. package/dist/ai/image-limits.d.ts +45 -0
  83. package/dist/ai/image-limits.js +68 -0
  84. package/dist/ai/providers/builtin.d.ts +18 -6
  85. package/dist/ai/providers/builtin.js +135 -6
  86. package/dist/ai/providers/catalog-data.js +17 -13
  87. package/dist/ai/providers/catalog.d.ts +60 -7
  88. package/dist/ai/providers/catalog.js +197 -38
  89. package/dist/ai/providers/channels.d.ts +33 -3
  90. package/dist/ai/providers/channels.js +108 -7
  91. package/dist/ai/providers/enrich.d.ts +6 -3
  92. package/dist/ai/providers/enrich.js +19 -4
  93. package/dist/ai/providers/models-dev-cache.d.ts +28 -24
  94. package/dist/ai/providers/models-dev-cache.js +92 -78
  95. package/dist/ai/providers/models-dev-data.d.ts +7 -0
  96. package/dist/ai/providers/models-dev-data.js +32 -0
  97. package/dist/ai/providers/models-dev-snapshot.d.ts +50 -0
  98. package/dist/ai/providers/models-dev-snapshot.js +137 -0
  99. package/dist/ai/providers/models-dev.d.ts +51 -10
  100. package/dist/ai/providers/models-dev.js +132 -39
  101. package/dist/ai/providers/registry.d.ts +20 -10
  102. package/dist/ai/providers/registry.js +82 -43
  103. package/dist/ai/types.d.ts +28 -2
  104. package/dist/ai/types.js +5 -0
  105. package/dist/bundle/ama.cjs +37605 -21619
  106. package/dist/checkpoints/backend.d.ts +61 -0
  107. package/dist/checkpoints/backend.js +135 -0
  108. package/dist/checkpoints/blobs.d.ts +60 -0
  109. package/dist/checkpoints/blobs.js +203 -0
  110. package/dist/checkpoints/gc.d.ts +47 -0
  111. package/dist/checkpoints/gc.js +144 -0
  112. package/dist/checkpoints/git-head.d.ts +15 -0
  113. package/dist/checkpoints/git-head.js +89 -0
  114. package/dist/checkpoints/index.d.ts +17 -0
  115. package/dist/checkpoints/index.js +17 -0
  116. package/dist/checkpoints/replay.d.ts +48 -0
  117. package/dist/checkpoints/replay.js +154 -0
  118. package/dist/checkpoints/restore.d.ts +86 -0
  119. package/dist/checkpoints/restore.js +263 -0
  120. package/dist/checkpoints/settings.d.ts +14 -0
  121. package/dist/checkpoints/settings.js +23 -0
  122. package/dist/checkpoints/shadow-git.d.ts +108 -0
  123. package/dist/checkpoints/shadow-git.js +491 -0
  124. package/dist/checkpoints/shadow-restore.d.ts +25 -0
  125. package/dist/checkpoints/shadow-restore.js +128 -0
  126. package/dist/checkpoints/tracker.d.ts +64 -0
  127. package/dist/checkpoints/tracker.js +192 -0
  128. package/dist/checkpoints/types.d.ts +99 -0
  129. package/dist/checkpoints/types.js +12 -0
  130. package/dist/cli/args.d.ts +8 -4
  131. package/dist/cli/args.js +17 -97
  132. package/dist/cli/bootstrap.js +13 -1
  133. package/dist/cli/choice-prompt.d.ts +58 -0
  134. package/dist/cli/choice-prompt.js +140 -0
  135. package/dist/cli/codemode-notice.d.ts +3 -2
  136. package/dist/cli/codemode-notice.js +3 -2
  137. package/dist/cli/compose-agents.d.ts +27 -0
  138. package/dist/cli/compose-agents.js +111 -0
  139. package/dist/cli/compose-extensions.d.ts +29 -0
  140. package/dist/cli/compose-extensions.js +44 -0
  141. package/dist/cli/compose-session.d.ts +3 -0
  142. package/dist/cli/compose-session.js +47 -4
  143. package/dist/cli/compose.d.ts +3 -0
  144. package/dist/cli/compose.js +33 -6
  145. package/dist/cli/deps.d.ts +6 -0
  146. package/dist/cli/exit-codes.d.ts +10 -0
  147. package/dist/cli/exit-codes.js +12 -0
  148. package/dist/cli/help-text.d.ts +4 -0
  149. package/dist/cli/help-text.js +102 -0
  150. package/dist/cli/startup-screen.js +5 -3
  151. package/dist/cli/startup-steps.js +7 -1
  152. package/dist/cli/subcommands/config.d.ts +4 -1
  153. package/dist/cli/subcommands/config.js +17 -6
  154. package/dist/cli/subcommands/doctor.js +21 -0
  155. package/dist/cli/subcommands/models-cache-probe.d.ts +1 -1
  156. package/dist/cli/subcommands/models-cache-probe.js +3 -12
  157. package/dist/cli/subcommands/models-discover.js +5 -6
  158. package/dist/cli/subcommands/models.d.ts +2 -0
  159. package/dist/cli/subcommands/models.js +33 -14
  160. package/dist/cli/subcommands/providers.d.ts +1 -1
  161. package/dist/cli/subcommands/providers.js +8 -15
  162. package/dist/cli/subcommands/sessions.d.ts +3 -1
  163. package/dist/cli/subcommands/sessions.js +36 -2
  164. package/dist/codemode/capability.d.ts +24 -7
  165. package/dist/codemode/capability.js +38 -10
  166. package/dist/codemode/host-side.d.ts +14 -0
  167. package/dist/codemode/host-side.js +24 -1
  168. package/dist/codemode/tool.d.ts +1 -1
  169. package/dist/codemode/tool.js +6 -4
  170. package/dist/compaction/breaker.d.ts +25 -9
  171. package/dist/compaction/breaker.js +47 -17
  172. package/dist/compaction/estimate.d.ts +11 -3
  173. package/dist/compaction/estimate.js +64 -22
  174. package/dist/compaction/image-budget.d.ts +45 -0
  175. package/dist/compaction/image-budget.js +115 -0
  176. package/dist/compaction/post-compact.d.ts +38 -0
  177. package/dist/compaction/post-compact.js +152 -0
  178. package/dist/compaction/protect.d.ts +27 -0
  179. package/dist/compaction/protect.js +56 -0
  180. package/dist/compaction/prune-tier.d.ts +58 -12
  181. package/dist/compaction/prune-tier.js +120 -54
  182. package/dist/compaction/summarize-tier.d.ts +23 -4
  183. package/dist/compaction/summarize-tier.js +100 -29
  184. package/dist/config/checker.d.ts +28 -0
  185. package/dist/config/checker.js +97 -0
  186. package/dist/config/json-schema.js +63 -2
  187. package/dist/config/key-docs.js +72 -3
  188. package/dist/config/merge.d.ts +5 -3
  189. package/dist/config/merge.js +81 -7
  190. package/dist/config/profile.d.ts +2 -0
  191. package/dist/config/profile.js +2 -0
  192. package/dist/config/schema-w5.d.ts +18 -0
  193. package/dist/config/schema-w5.js +109 -0
  194. package/dist/config/schema.d.ts +5 -9
  195. package/dist/config/schema.js +68 -114
  196. package/dist/config/types-w5.d.ts +118 -0
  197. package/dist/config/types-w5.js +20 -0
  198. package/dist/config/types.d.ts +50 -1
  199. package/dist/config/types.js +12 -0
  200. package/dist/drivers/acp/client.d.ts +57 -0
  201. package/dist/drivers/acp/client.js +160 -0
  202. package/dist/drivers/acp/driver.d.ts +31 -0
  203. package/dist/drivers/acp/driver.js +274 -0
  204. package/dist/drivers/acp/testing/fake-agent-main.d.ts +5 -0
  205. package/dist/drivers/acp/testing/fake-agent-main.js +7 -0
  206. package/dist/drivers/acp/testing/fake-agent.d.ts +27 -0
  207. package/dist/drivers/acp/testing/fake-agent.js +211 -0
  208. package/dist/drivers/acp/types.d.ts +285 -0
  209. package/dist/drivers/acp/types.js +36 -0
  210. package/dist/drivers/agents.d.ts +58 -0
  211. package/dist/drivers/agents.js +142 -0
  212. package/dist/drivers/base.d.ts +35 -0
  213. package/dist/drivers/base.js +59 -0
  214. package/dist/drivers/catalog.d.ts +46 -0
  215. package/dist/drivers/catalog.js +167 -0
  216. package/dist/drivers/env.d.ts +20 -0
  217. package/dist/drivers/env.js +46 -0
  218. package/dist/drivers/host-runners.d.ts +18 -0
  219. package/dist/drivers/host-runners.js +45 -0
  220. package/dist/drivers/jsonrpc.d.ts +58 -0
  221. package/dist/drivers/jsonrpc.js +180 -0
  222. package/dist/drivers/native/claude-normalize.d.ts +46 -0
  223. package/dist/drivers/native/claude-normalize.js +106 -0
  224. package/dist/drivers/native/claude-stream.d.ts +29 -0
  225. package/dist/drivers/native/claude-stream.js +456 -0
  226. package/dist/drivers/native/codex-app-server.d.ts +26 -0
  227. package/dist/drivers/native/codex-app-server.js +407 -0
  228. package/dist/drivers/native/codex-normalize.d.ts +38 -0
  229. package/dist/drivers/native/codex-normalize.js +124 -0
  230. package/dist/drivers/native/oneshot.d.ts +28 -0
  231. package/dist/drivers/native/oneshot.js +312 -0
  232. package/dist/drivers/permissions.d.ts +40 -0
  233. package/dist/drivers/permissions.js +92 -0
  234. package/dist/drivers/pids.d.ts +32 -0
  235. package/dist/drivers/pids.js +93 -0
  236. package/dist/drivers/pool.d.ts +28 -0
  237. package/dist/drivers/pool.js +96 -0
  238. package/dist/drivers/probe.d.ts +47 -0
  239. package/dist/drivers/probe.js +172 -0
  240. package/dist/drivers/process.d.ts +48 -0
  241. package/dist/drivers/process.js +100 -0
  242. package/dist/drivers/runner.d.ts +61 -0
  243. package/dist/drivers/runner.js +388 -0
  244. package/dist/drivers/store.d.ts +49 -0
  245. package/dist/drivers/store.js +91 -0
  246. package/dist/drivers/turn.d.ts +41 -0
  247. package/dist/drivers/turn.js +99 -0
  248. package/dist/drivers/types.d.ts +122 -0
  249. package/dist/drivers/types.js +11 -0
  250. package/dist/git/info.d.ts +75 -0
  251. package/dist/git/info.js +191 -0
  252. package/dist/hooks/protocol.js +6 -1
  253. package/dist/hooks/types.d.ts +10 -1
  254. package/dist/hooks/types.js +2 -0
  255. package/dist/host/api-impl.d.ts +7 -0
  256. package/dist/host/api-impl.js +15 -0
  257. package/dist/host/types.d.ts +24 -2
  258. package/dist/host/types.js +4 -0
  259. package/dist/index.d.ts +3 -0
  260. package/dist/index.js +1 -0
  261. package/dist/modes/acp/acp-events.d.ts +46 -0
  262. package/dist/modes/acp/acp-events.js +233 -0
  263. package/dist/modes/acp/acp-mode.d.ts +17 -0
  264. package/dist/modes/acp/acp-mode.js +47 -0
  265. package/dist/modes/acp/acp-server.d.ts +79 -0
  266. package/dist/modes/acp/acp-server.js +315 -0
  267. package/dist/modes/commands-core.d.ts +13 -1
  268. package/dist/modes/commands-core.js +64 -0
  269. package/dist/modes/image-input.d.ts +12 -4
  270. package/dist/modes/image-input.js +22 -5
  271. package/dist/modes/interactive/agent-panels.d.ts +14 -0
  272. package/dist/modes/interactive/agent-panels.js +103 -0
  273. package/dist/modes/interactive/agent-ui.d.ts +73 -0
  274. package/dist/modes/interactive/agent-ui.js +234 -0
  275. package/dist/modes/interactive/approval-dialog.d.ts +21 -4
  276. package/dist/modes/interactive/approval-dialog.js +98 -20
  277. package/dist/modes/interactive/approval-merge.d.ts +41 -0
  278. package/dist/modes/interactive/approval-merge.js +89 -0
  279. package/dist/modes/interactive/clipboard-paste.d.ts +18 -0
  280. package/dist/modes/interactive/clipboard-paste.js +28 -0
  281. package/dist/modes/interactive/commands.d.ts +12 -1
  282. package/dist/modes/interactive/commands.js +31 -1
  283. package/dist/modes/interactive/confirm-dialog.d.ts +49 -0
  284. package/dist/modes/interactive/confirm-dialog.js +121 -0
  285. package/dist/modes/interactive/double-esc.d.ts +20 -0
  286. package/dist/modes/interactive/double-esc.js +34 -0
  287. package/dist/modes/interactive/event-notices.d.ts +32 -0
  288. package/dist/modes/interactive/event-notices.js +79 -0
  289. package/dist/modes/interactive/external-editor.d.ts +16 -0
  290. package/dist/modes/interactive/external-editor.js +39 -0
  291. package/dist/modes/interactive/interactive-mode.d.ts +14 -1
  292. package/dist/modes/interactive/interactive-mode.js +140 -136
  293. package/dist/modes/interactive/key-dispatch.d.ts +22 -2
  294. package/dist/modes/interactive/key-dispatch.js +66 -7
  295. package/dist/modes/interactive/line/line-mode.d.ts +4 -1
  296. package/dist/modes/interactive/line/line-mode.js +31 -5
  297. package/dist/modes/interactive/line/line-render.d.ts +2 -1
  298. package/dist/modes/interactive/line/line-render.js +40 -4
  299. package/dist/modes/interactive/message-view.d.ts +1 -1
  300. package/dist/modes/interactive/message-view.js +24 -2
  301. package/dist/modes/interactive/panels.d.ts +18 -1
  302. package/dist/modes/interactive/panels.js +19 -5
  303. package/dist/modes/interactive/plan-command.d.ts +40 -0
  304. package/dist/modes/interactive/plan-command.js +129 -0
  305. package/dist/modes/interactive/plan-dialog.d.ts +98 -0
  306. package/dist/modes/interactive/plan-dialog.js +290 -0
  307. package/dist/modes/interactive/plan-flow.d.ts +34 -0
  308. package/dist/modes/interactive/plan-flow.js +98 -0
  309. package/dist/modes/interactive/rewind-command.d.ts +31 -0
  310. package/dist/modes/interactive/rewind-command.js +106 -0
  311. package/dist/modes/interactive/rewind-flow.d.ts +37 -0
  312. package/dist/modes/interactive/rewind-flow.js +151 -0
  313. package/dist/modes/interactive/rewind-list.d.ts +36 -0
  314. package/dist/modes/interactive/rewind-list.js +123 -0
  315. package/dist/modes/interactive/rewind-panel.d.ts +77 -0
  316. package/dist/modes/interactive/rewind-panel.js +309 -0
  317. package/dist/modes/interactive/rewind-text.d.ts +40 -0
  318. package/dist/modes/interactive/rewind-text.js +139 -0
  319. package/dist/modes/interactive/session-events.d.ts +24 -0
  320. package/dist/modes/interactive/session-events.js +96 -0
  321. package/dist/modes/interactive/startup-ui.js +5 -1
  322. package/dist/modes/interactive/status-area.d.ts +73 -0
  323. package/dist/modes/interactive/status-area.js +190 -0
  324. package/dist/modes/interactive/status-bar.d.ts +99 -11
  325. package/dist/modes/interactive/status-bar.js +273 -90
  326. package/dist/modes/interactive/status-line.d.ts +33 -0
  327. package/dist/modes/interactive/status-line.js +113 -0
  328. package/dist/modes/interactive/subagent-view.d.ts +56 -0
  329. package/dist/modes/interactive/subagent-view.js +154 -0
  330. package/dist/modes/interactive/tasks-report.d.ts +27 -0
  331. package/dist/modes/interactive/tasks-report.js +114 -0
  332. package/dist/modes/interactive/tool-view.d.ts +12 -2
  333. package/dist/modes/interactive/tool-view.js +34 -4
  334. package/dist/modes/print/print-mode.d.ts +13 -4
  335. package/dist/modes/print/print-mode.js +56 -12
  336. package/dist/modes/rpc/commands.d.ts +9 -0
  337. package/dist/modes/rpc/commands.js +44 -0
  338. package/dist/modes/rpc/rpc-mode.js +7 -1
  339. package/dist/modes/session-report.d.ts +11 -0
  340. package/dist/modes/session-report.js +48 -1
  341. package/dist/permissions/auto-safe.d.ts +5 -0
  342. package/dist/permissions/auto-safe.js +18 -0
  343. package/dist/permissions/bypass.d.ts +32 -0
  344. package/dist/permissions/bypass.js +36 -0
  345. package/dist/permissions/classifier.d.ts +4 -0
  346. package/dist/permissions/classifier.js +2 -0
  347. package/dist/permissions/modes.js +1 -1
  348. package/dist/permissions/pipeline.d.ts +43 -4
  349. package/dist/permissions/pipeline.js +114 -9
  350. package/dist/permissions/readonly-bash.d.ts +30 -0
  351. package/dist/permissions/readonly-bash.js +118 -0
  352. package/dist/permissions/types.d.ts +42 -0
  353. package/dist/plan/compose.d.ts +9 -0
  354. package/dist/plan/compose.js +19 -0
  355. package/dist/plan/controller.d.ts +71 -0
  356. package/dist/plan/controller.js +27 -0
  357. package/dist/plan/done-markers.d.ts +17 -0
  358. package/dist/plan/done-markers.js +51 -0
  359. package/dist/plan/extract.d.ts +29 -0
  360. package/dist/plan/extract.js +160 -0
  361. package/dist/plan/prompts.d.ts +36 -0
  362. package/dist/plan/prompts.js +89 -0
  363. package/dist/plan/store.d.ts +37 -0
  364. package/dist/plan/store.js +90 -0
  365. package/dist/rpc.d.ts +58 -2
  366. package/dist/rpc.js +7 -0
  367. package/dist/sandbox/bash.d.ts +74 -0
  368. package/dist/sandbox/bash.js +126 -0
  369. package/dist/sandbox/detect.d.ts +48 -0
  370. package/dist/sandbox/detect.js +149 -0
  371. package/dist/sandbox/index.d.ts +5 -0
  372. package/dist/sandbox/index.js +5 -0
  373. package/dist/sandbox/profile.d.ts +33 -0
  374. package/dist/sandbox/profile.js +76 -0
  375. package/dist/sandbox/wrap.d.ts +29 -0
  376. package/dist/sandbox/wrap.js +117 -0
  377. package/dist/sdk.d.ts +33 -2
  378. package/dist/sdk.js +24 -2
  379. package/dist/session/types.d.ts +3 -1
  380. package/dist/session/types.js +1 -0
  381. package/dist/skills/builtin.d.ts +31 -0
  382. package/dist/skills/builtin.js +109 -0
  383. package/dist/skills/discover.d.ts +2 -1
  384. package/dist/skills/index-prompt.js +5 -8
  385. package/dist/tools/background-jobs.d.ts +71 -0
  386. package/dist/tools/background-jobs.js +198 -0
  387. package/dist/tools/bash.d.ts +53 -1
  388. package/dist/tools/bash.js +158 -7
  389. package/dist/tools/clipboard-image.d.ts +44 -0
  390. package/dist/tools/clipboard-image.js +148 -0
  391. package/dist/tools/edit.d.ts +2 -0
  392. package/dist/tools/edit.js +18 -3
  393. package/dist/tools/image-file.d.ts +38 -3
  394. package/dist/tools/image-file.js +81 -10
  395. package/dist/tools/image-resize.d.ts +58 -0
  396. package/dist/tools/image-resize.js +97 -0
  397. package/dist/tools/presets.d.ts +7 -2
  398. package/dist/tools/presets.js +11 -4
  399. package/dist/tools/read.d.ts +5 -2
  400. package/dist/tools/read.js +13 -10
  401. package/dist/tools/registry.d.ts +7 -1
  402. package/dist/tools/registry.js +27 -4
  403. package/dist/tools/task-ctl.d.ts +22 -0
  404. package/dist/tools/task-ctl.js +116 -0
  405. package/dist/tools/task.d.ts +22 -10
  406. package/dist/tools/task.js +66 -26
  407. package/dist/tools/todo.d.ts +22 -2
  408. package/dist/tools/todo.js +58 -14
  409. package/dist/tools/truncate.d.ts +15 -0
  410. package/dist/tools/truncate.js +25 -0
  411. package/dist/tools/types.d.ts +113 -0
  412. package/dist/tools/types.js +5 -0
  413. package/dist/tools/write.js +3 -0
  414. package/dist/tui/glyphs.d.ts +4 -0
  415. package/dist/tui/glyphs.js +4 -0
  416. package/dist/tui/keybindings.d.ts +6 -1
  417. package/dist/tui/keybindings.js +6 -1
  418. package/docs/acp.md +78 -0
  419. package/docs/agents.md +250 -0
  420. package/docs/codemode.md +12 -8
  421. package/docs/hooks.md +26 -22
  422. package/docs/permissions.md +78 -13
  423. package/docs/plan.md +107 -0
  424. package/docs/providers.md +228 -52
  425. package/docs/rewind-plan.md +181 -0
  426. package/docs/rpc.md +92 -5
  427. package/docs/sandbox.md +215 -0
  428. package/docs/session-format.md +41 -21
  429. package/docs/sessions.md +41 -1
  430. package/docs/tui-design.md +751 -0
  431. package/docs/tui.md +179 -21
  432. package/package.json +13 -2
@@ -19,8 +19,14 @@
19
19
  * 重新物化(协议、地址、headers、compat 取渠道的,模型级 api / baseUrl 仍覆盖);渠道 key 经
20
20
  * `resolveApiKey(provider, channel)`。没有 `channels` 的供应商行为不变。
21
21
  *
22
+ * 内置渠道([W5-M2],builtin.ts):用户 `channels` 同名字段级覆盖、新名追加,`defaultChannel` 用户优先
23
+ * (也可只写 `defaultChannel`,或只写 `api` 选同协议的内置渠道);目录模型缺省挂全部渠道、缺省渠道在前。
24
+ * 用户(config / auth.json / `*_BASE_URL`)改了供应商级 baseUrl 而没写自己的 `channels` 时,内置渠道作废,
25
+ * 按单渠道回落(`api` 取用户写的或内置的回落协议)。
26
+ *
22
27
  * models.dev(enrich.ts):config 里缺元数据的自定义模型与合成模型,用传入的索引(只读缓存)补
23
- * contextWindow / maxTokens / input / reasoning / cost,来源记在 `modelMetadata()`;内置目录不补。
28
+ * contextWindow / maxTokens / input / reasoning / cost,来源记在 `modelMetadata()`;内置目录按同一索引
29
+ * (快照 ⊕ `ama models refresh` 的覆盖)在 catalog.ts 合并,缺字段的条目退回内置快照。
24
30
  */
25
31
  import { ApiRegistry, createDefaultApiRegistry } from "../apis/api.js";
26
32
  import { fakeProviderData } from "../fake/fake-provider.js";
@@ -28,34 +34,10 @@ import { mergeHeaders } from "../http.js";
28
34
  import { ApiKeyResolver } from "./auth.js";
29
35
  import { BUILTIN_PROVIDERS, fallbackEnvKey, isRelayedBaseUrl } from "./builtin.js";
30
36
  import { applyModelOverride, loadBuiltinCatalog, toModel, withCustomDefaults } from "./catalog.js";
31
- import { channelKeyId, modelChannels, parseChannels, splitChannelRef } from "./channels.js";
37
+ import { catalogChannels, channelKeyId, dropChannels, materializeModel, pickBuiltinChannel, modelChannels, parseChannels, splitChannelRef, } from "./channels.js";
32
38
  import { catalogMetadata, enrichEntry, lazyIndex, } from "./enrich.js";
33
39
  import { closest } from "./suggest.js";
34
- /**
35
- * 物化:模型补齐供应商级字段(不可变:返回新对象)。给了 `channel` 时协议与地址取渠道的(模型级
36
- * `explicit` 覆盖优先),headers / compat 按 供应商 ← 渠道 ← 模型 合并,并记下渠道名。
37
- */
38
- export function materializeModel(model, provider, channel, explicit) {
39
- const out = {
40
- ...model,
41
- provider: provider.id,
42
- baseUrl: model.baseUrl ?? provider.baseUrl,
43
- };
44
- if (channel !== undefined) {
45
- out.api = explicit?.api ?? channel.api;
46
- out.baseUrl = explicit?.baseUrl ?? channel.baseUrl;
47
- out.channel = channel.name;
48
- }
49
- if (provider.headers || channel?.headers || model.headers)
50
- out.headers = mergeHeaders(provider.headers, channel?.headers, model.headers);
51
- if (provider.compat || channel?.compat || model.compat)
52
- out.compat = { ...provider.compat, ...channel?.compat, ...model.compat };
53
- const authHeader = channel?.authHeader ?? provider.authHeader;
54
- if (authHeader !== undefined)
55
- out.authHeader = model.authHeader ?? authHeader;
56
- out.requiresApiKey = provider.requiresApiKey;
57
- return out;
58
- }
40
+ export { materializeModel } from "./channels.js";
59
41
  function configKeysOf(config) {
60
42
  const keys = {};
61
43
  for (const [id, provider] of Object.entries(config?.providers ?? {})) {
@@ -75,6 +57,10 @@ export class ProviderRegistry {
75
57
  envBaseUrls = new Map();
76
58
  /** baseUrl 指向非官方主机的内置供应商:接受目录外的 model id。 */
77
59
  relayed = new Set();
60
+ /** config 里写了自己 `channels` 的供应商(内置渠道不因改 baseUrl 作废)。 */
61
+ userChannels = new Set();
62
+ /** config 里写了供应商级 `api` 的供应商(单渠道回落时目录模型跟它走)。 */
63
+ userApi = new Set();
78
64
  /** `provider/model` → 物化前的模型(多渠道供应商切换渠道时重新物化)。 */
79
65
  raw = new Map();
80
66
  /** `provider/model` → 元数据来源与 models.dev 匹配。 */
@@ -92,9 +78,9 @@ export class ProviderRegistry {
92
78
  configKeys: options.keys?.configKeys ?? configKeysOf(options.config),
93
79
  onWarning: (message) => this.warn(message),
94
80
  });
95
- const catalog = loadBuiltinCatalog();
81
+ const catalog = this.loadCatalog();
96
82
  const env = options.keys?.useEnv === false ? {} : (options.keys?.env ?? process.env);
97
- for (const { baseUrlEnv, ...base } of BUILTIN_PROVIDERS) {
83
+ for (const { baseUrlEnv, catalogApi: _catalogApi, ...base } of BUILTIN_PROVIDERS) {
98
84
  const models = (catalog.get(base.id) ?? []).map((entry) => {
99
85
  const api = entry.api ?? base.api;
100
86
  this.sources.set(`${base.id}/${entry.id}`, "builtin");
@@ -107,12 +93,12 @@ export class ProviderRegistry {
107
93
  const fromEnv = baseUrlEnv !== undefined ? env[baseUrlEnv]?.trim() : undefined;
108
94
  if (baseUrlEnv !== undefined && fromEnv)
109
95
  this.envBaseUrls.set(base.id, baseUrlEnv);
110
- this.providers.set(base.id, {
111
- ...base,
112
- ...(fromEnv ? { baseUrl: fromEnv } : {}),
113
- models,
114
- builtin: true,
115
- });
96
+ const provider = { ...structuredClone(base), models, builtin: true };
97
+ if (fromEnv) {
98
+ provider.baseUrl = fromEnv;
99
+ dropChannels(provider);
100
+ }
101
+ this.providers.set(base.id, provider);
116
102
  }
117
103
  for (const [id, config] of Object.entries(options.config?.providers ?? {})) {
118
104
  this.applyConfig(id, config);
@@ -122,6 +108,8 @@ export class ProviderRegistry {
122
108
  if (baseUrl) {
123
109
  provider.baseUrl = baseUrl;
124
110
  this.envBaseUrls.delete(provider.id);
111
+ if (provider.builtin && !this.userChannels.has(provider.id))
112
+ dropChannels(provider);
125
113
  }
126
114
  if (provider.builtin && isRelayedBaseUrl(provider.id, provider.baseUrl)) {
127
115
  this.relayed.add(provider.id);
@@ -136,9 +124,52 @@ export class ProviderRegistry {
136
124
  this.providers.set(fake.id, fake);
137
125
  }
138
126
  for (const provider of this.providers.values()) {
127
+ if (provider.builtin)
128
+ this.settleBuiltinChannels(provider);
139
129
  provider.models = provider.models.map((model) => this.materialize(provider, model));
140
130
  }
141
131
  }
132
+ /** 内置目录(快照 ⊕ 用户刷新);刷新数据出任何问题都退回内置快照,不让启动失败。 */
133
+ loadCatalog() {
134
+ try {
135
+ return loadBuiltinCatalog(this.modelsDev());
136
+ }
137
+ catch (error) {
138
+ this.warn(`models.dev refresh data ignored: ${error.message}`);
139
+ return loadBuiltinCatalog();
140
+ }
141
+ }
142
+ /**
143
+ * 内置供应商定渠道:供应商级 api / baseUrl 取缺省渠道的(discover 等单地址的用法看它);用户没指定渠道的
144
+ * 模型挂全部渠道(缺省在前)。渠道已作废的去掉模型上残留的 `channels`。
145
+ */
146
+ settleBuiltinChannels(provider) {
147
+ const channels = provider.channels;
148
+ if (channels === undefined || channels.length === 0) {
149
+ // 单渠道回落:没有模型级协议的目录模型走 catalogApi(用户改了 api 时走用户的)
150
+ const builtin = BUILTIN_PROVIDERS.find((p) => p.id === provider.id);
151
+ const api = builtin === undefined || this.userApi.has(provider.id)
152
+ ? provider.api
153
+ : (builtin.catalogApi ?? builtin.api);
154
+ for (const model of provider.models) {
155
+ delete model.channels;
156
+ const key = `${provider.id}/${model.id}`;
157
+ if (this.sources.get(key) === "builtin" && this.raw.get(key)?.explicit.api === undefined)
158
+ model.api = api;
159
+ }
160
+ return;
161
+ }
162
+ const first = channels.find((c) => c.name === provider.defaultChannel) ?? channels[0];
163
+ if (first === undefined)
164
+ return;
165
+ provider.defaultChannel = first.name;
166
+ provider.api = first.api;
167
+ provider.baseUrl = first.baseUrl;
168
+ for (const model of provider.models) {
169
+ if (this.sources.get(`${provider.id}/${model.id}`) === "builtin" || !model.channels)
170
+ model.channels = catalogChannels(model.channels, channels, first.name);
171
+ }
172
+ }
142
173
  warn(message) {
143
174
  this.warnings.push(message);
144
175
  this.onWarning?.(message);
@@ -160,7 +191,15 @@ export class ProviderRegistry {
160
191
  }
161
192
  applyConfig(id, config) {
162
193
  const existing = this.providers.get(id);
163
- const parsed = config.channels !== undefined ? parseChannels(id, config) : undefined;
194
+ const builtinChannels = existing?.builtin ? existing.channels : undefined;
195
+ const parsed = config.channels !== undefined
196
+ ? parseChannels(id, config, builtinChannels && {
197
+ channels: builtinChannels,
198
+ defaultChannel: existing?.defaultChannel,
199
+ })
200
+ : undefined;
201
+ if (config.channels !== undefined)
202
+ this.userChannels.add(id);
164
203
  for (const warning of parsed?.warnings ?? [])
165
204
  this.warn(warning);
166
205
  const first = parsed?.channels.find((c) => c.name === parsed.defaultChannel);
@@ -180,12 +219,16 @@ export class ProviderRegistry {
180
219
  };
181
220
  if (config.name !== undefined)
182
221
  provider.name = config.name;
183
- if (config.api !== undefined)
222
+ if (config.api !== undefined) {
184
223
  provider.api = config.api;
224
+ this.userApi.add(id);
225
+ }
185
226
  if (config.baseUrl !== undefined) {
186
227
  provider.baseUrl = config.baseUrl;
187
228
  this.envBaseUrls.delete(id);
188
229
  }
230
+ if (builtinChannels !== undefined && parsed === undefined)
231
+ pickBuiltinChannel(provider, config, (m) => this.warn(m));
189
232
  if (parsed !== undefined && first !== undefined) {
190
233
  // 有渠道时供应商级 api / baseUrl 取首选渠道的(discover 等单地址的用法看它)。
191
234
  provider.channels = parsed.channels;
@@ -215,7 +258,8 @@ export class ProviderRegistry {
215
258
  if (typeof entry.modelsDev === "string" && metadata.looked && metadata.match === undefined)
216
259
  this.warn(`modelsDev "${entry.modelsDev}" for "${id}/${entry.id}" not found`);
217
260
  const model = withCustomDefaults(filled, id, entry.api ?? provider.api);
218
- if (provider.channels !== undefined)
261
+ // 内置供应商上没写 channels 的模型:定渠道时挂全部渠道(settleBuiltinChannels)
262
+ if (provider.channels !== undefined && (entry.channels !== undefined || !provider.builtin))
219
263
  model.channels = channelsOf(entry.channels, entry.id);
220
264
  const index = provider.models.findIndex((m) => m.id === entry.id);
221
265
  if (index >= 0)
@@ -263,11 +307,6 @@ export class ProviderRegistry {
263
307
  if (fields[field] !== undefined)
264
308
  meta.sources[field] = "config";
265
309
  }
266
- if (provider.channels !== undefined) {
267
- // 目录模型(给内置供应商加了渠道时)挂到首选渠道。
268
- for (const model of provider.models)
269
- model.channels ??= [provider.defaultChannel ?? ""];
270
- }
271
310
  this.providers.set(id, provider);
272
311
  }
273
312
  /** baseUrl 来自哪个环境变量(未生效返回 undefined)。 */
@@ -15,6 +15,11 @@
15
15
  * - [W3-C0] 第三波 §1.3 的五个缓存兼容开关单列为 `PromptCacheCompat`(各协议共用),只并入
16
16
  * `ProviderCompat`(全部可选),不改各协议 compat 接口——`detectCompat` 的返回形状不变,
17
17
  * 缺省值由 C1a 在协议层按端点推断。
18
+ * - [W5-C0] 第五波(docs/wave5-plan.md §2.1、§3.1):`Model` 加 models.dev 元数据字段
19
+ * (`family / knowledge / releaseDate / inputLimit / status`);`AnthropicMessagesCompat` 加
20
+ * `sendInterleavedThinkingBeta / sendCacheControl`、`OpenAIResponsesCompat` 加
21
+ * `explicitCacheField`,全部可选(缺省由 W5-M2 的主机推断表给出);`ProviderData.channels /
22
+ * defaultChannel` 已有,内置供应商(`BuiltinProvider`)同样可带。
18
23
  */
19
24
  export type KnownApi = "anthropic-messages" | "openai-completions" | "openai-responses" | "google-generative-ai";
20
25
  export type Api = KnownApi | (string & {});
@@ -207,6 +212,12 @@ export interface AnthropicMessagesCompat {
207
212
  /** true:新模型用 `effort` 参数;false:老模型用 `budget_tokens`。 */
208
213
  adaptiveThinking: boolean;
209
214
  maxCacheBreakpoints: number;
215
+ /**
216
+ * [W5-C0] 发 `interleaved-thinking` beta 头;缺省(W5-M2 主机表):官方端点 true、其它主机 false。
217
+ */
218
+ sendInterleavedThinkingBeta?: boolean;
219
+ /** [W5-C0] 打 `cache_control`;缺省 true,忽略它的端点(DeepSeek 等)可关以减小请求体。 */
220
+ sendCacheControl?: boolean;
210
221
  }
211
222
  /** B8 补全。 */
212
223
  export interface GoogleCompat {
@@ -217,6 +228,8 @@ export interface GoogleCompat {
217
228
  export interface OpenAIResponsesCompat {
218
229
  supportsReasoningSummary: boolean;
219
230
  supportsStore: boolean;
231
+ /** [W5-C0] 端点私有的显式缓存字段:`volcengine` = 火山方舟 `caching: { type: "enabled" }`。 */
232
+ explicitCacheField?: "volcengine";
220
233
  }
221
234
  /**
222
235
  * [W3-C0] 供应商不报缓存时的处理(第三波 §1.6):`auto` 按响应自动判定三态;`silent` /
@@ -302,6 +315,16 @@ export interface Model {
302
315
  channel?: string;
303
316
  /** 该模型挂载的全部渠道,首个为首选(多渠道供应商才有)。 */
304
317
  channels?: string[];
318
+ /** 模型家族(如 `claude-sonnet`)。 */
319
+ family?: string;
320
+ /** 知识截止(`YYYY-MM` 或 `YYYY-MM-DD`)。 */
321
+ knowledge?: string;
322
+ /** 发布日期(`YYYY-MM-DD`)。 */
323
+ releaseDate?: string;
324
+ /** 输入上限(token),与 `contextWindow` 不同的模型才有。 */
325
+ inputLimit?: number;
326
+ /** 发布状态;正式版不填(deprecated 的模型在快照里已过滤)。 */
327
+ status?: "beta";
305
328
  }
306
329
  /** 物化后的渠道(docs/providers.md「渠道」);key 不在这里,经 `resolveApiKey(provider, channel)` 取。 */
307
330
  export interface ProviderChannel {
@@ -326,9 +349,12 @@ export interface ProviderData {
326
349
  /** 本地服务 false:无 key 也能用。 */
327
350
  requiresApiKey: boolean;
328
351
  builtin: boolean;
329
- /** 显式配置的渠道(没有 `channels` 的供应商不填,按单渠道处理)。 */
352
+ /**
353
+ * 渠道(没有 `channels` 的供应商不填,按单渠道处理)。[W5-C0] 内置供应商也可带内置渠道,
354
+ * 用户配置同名字段级覆盖、新名追加(物化归 W5-M2)。
355
+ */
330
356
  channels?: ProviderChannel[];
331
- /** 首选渠道名(有 `channels` 时)。 */
357
+ /** 首选渠道名(有 `channels` 时;用户配置优先)。 */
332
358
  defaultChannel?: string;
333
359
  }
334
360
  /** `catalog/*.json` 文件形状(§3.4)。 */
package/dist/ai/types.js CHANGED
@@ -15,5 +15,10 @@
15
15
  * - [W3-C0] 第三波 §1.3 的五个缓存兼容开关单列为 `PromptCacheCompat`(各协议共用),只并入
16
16
  * `ProviderCompat`(全部可选),不改各协议 compat 接口——`detectCompat` 的返回形状不变,
17
17
  * 缺省值由 C1a 在协议层按端点推断。
18
+ * - [W5-C0] 第五波(docs/wave5-plan.md §2.1、§3.1):`Model` 加 models.dev 元数据字段
19
+ * (`family / knowledge / releaseDate / inputLimit / status`);`AnthropicMessagesCompat` 加
20
+ * `sendInterleavedThinkingBeta / sendCacheControl`、`OpenAIResponsesCompat` 加
21
+ * `explicitCacheField`,全部可选(缺省由 W5-M2 的主机推断表给出);`ProviderData.channels /
22
+ * defaultChannel` 已有,内置供应商(`BuiltinProvider`)同样可带。
18
23
  */
19
24
  export {};