@armadra/agent 0.3.0 → 0.5.0

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 (527) hide show
  1. package/CHANGELOG.md +257 -0
  2. package/README.md +263 -95
  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/retry.d.ts +1 -1
  17. package/dist/agent/retry.js +2 -1
  18. package/dist/agent/session-cache.d.ts +5 -0
  19. package/dist/agent/session-cache.js +18 -2
  20. package/dist/agent/session-classifier.d.ts +18 -0
  21. package/dist/agent/session-classifier.js +105 -0
  22. package/dist/agent/session-compaction.d.ts +35 -6
  23. package/dist/agent/session-compaction.js +157 -31
  24. package/dist/agent/session-core.d.ts +40 -1
  25. package/dist/agent/session-extensions.d.ts +61 -0
  26. package/dist/agent/session-extensions.js +129 -0
  27. package/dist/agent/session-images.d.ts +23 -0
  28. package/dist/agent/session-images.js +97 -0
  29. package/dist/agent/session-plan.d.ts +21 -0
  30. package/dist/agent/session-plan.js +524 -0
  31. package/dist/agent/session-rewind.d.ts +81 -0
  32. package/dist/agent/session-rewind.js +354 -0
  33. package/dist/agent/session-run.d.ts +28 -1
  34. package/dist/agent/session-run.js +157 -6
  35. package/dist/agent/session-settings.d.ts +49 -0
  36. package/dist/agent/session-settings.js +95 -0
  37. package/dist/agent/session-subagent.d.ts +36 -24
  38. package/dist/agent/session-subagent.js +259 -129
  39. package/dist/agent/session-sync.d.ts +10 -3
  40. package/dist/agent/session-sync.js +37 -8
  41. package/dist/agent/session-telemetry.d.ts +39 -0
  42. package/dist/agent/session-telemetry.js +231 -0
  43. package/dist/agent/session-tools.js +63 -3
  44. package/dist/agent/session.d.ts +33 -29
  45. package/dist/agent/session.js +91 -126
  46. package/dist/agent/subagent-registry.d.ts +91 -0
  47. package/dist/agent/subagent-registry.js +494 -0
  48. package/dist/agent/system-prompt.d.ts +6 -3
  49. package/dist/agent/system-prompt.js +7 -2
  50. package/dist/agent/tool-runner.d.ts +8 -1
  51. package/dist/agent/tool-runner.js +72 -6
  52. package/dist/agent/types-w5.d.ts +192 -0
  53. package/dist/agent/types-w5.js +10 -0
  54. package/dist/agent/types.d.ts +55 -4
  55. package/dist/agent/types.js +2 -0
  56. package/dist/agent/worktree.d.ts +36 -0
  57. package/dist/agent/worktree.js +86 -0
  58. package/dist/agents/builtin.d.ts +14 -0
  59. package/dist/agents/builtin.js +39 -0
  60. package/dist/agents/catalog.d.ts +43 -0
  61. package/dist/agents/catalog.js +82 -0
  62. package/dist/agents/discover.d.ts +35 -0
  63. package/dist/agents/discover.js +83 -0
  64. package/dist/agents/external.d.ts +82 -0
  65. package/dist/agents/external.js +326 -0
  66. package/dist/agents/parse.d.ts +18 -0
  67. package/dist/agents/parse.js +116 -0
  68. package/dist/agents/result.d.ts +32 -0
  69. package/dist/agents/result.js +67 -0
  70. package/dist/agents/task-control.d.ts +17 -0
  71. package/dist/agents/task-control.js +17 -0
  72. package/dist/agents/task-record.d.ts +78 -0
  73. package/dist/agents/task-record.js +141 -0
  74. package/dist/agents/types.d.ts +46 -0
  75. package/dist/agents/types.js +8 -0
  76. package/dist/ai/apis/anthropic-compat.d.ts +36 -0
  77. package/dist/ai/apis/anthropic-compat.js +92 -0
  78. package/dist/ai/apis/anthropic-messages.js +3 -2
  79. package/dist/ai/apis/anthropic-request.d.ts +7 -6
  80. package/dist/ai/apis/anthropic-request.js +10 -28
  81. package/dist/ai/apis/cache-params.d.ts +11 -2
  82. package/dist/ai/apis/cache-params.js +25 -6
  83. package/dist/ai/apis/google-generative-ai.js +3 -2
  84. package/dist/ai/apis/openai-compat.d.ts +4 -1
  85. package/dist/ai/apis/openai-compat.js +8 -1
  86. package/dist/ai/apis/openai-completions.js +3 -2
  87. package/dist/ai/apis/openai-responses.js +3 -2
  88. package/dist/ai/http.d.ts +28 -6
  89. package/dist/ai/http.js +41 -8
  90. package/dist/ai/image-limits.d.ts +45 -0
  91. package/dist/ai/image-limits.js +68 -0
  92. package/dist/ai/providers/builtin.d.ts +18 -6
  93. package/dist/ai/providers/builtin.js +135 -6
  94. package/dist/ai/providers/catalog-data.js +17 -13
  95. package/dist/ai/providers/catalog.d.ts +60 -7
  96. package/dist/ai/providers/catalog.js +197 -38
  97. package/dist/ai/providers/channels.d.ts +33 -3
  98. package/dist/ai/providers/channels.js +108 -7
  99. package/dist/ai/providers/enrich.d.ts +6 -3
  100. package/dist/ai/providers/enrich.js +19 -4
  101. package/dist/ai/providers/models-dev-cache.d.ts +28 -24
  102. package/dist/ai/providers/models-dev-cache.js +92 -78
  103. package/dist/ai/providers/models-dev-data.d.ts +7 -0
  104. package/dist/ai/providers/models-dev-data.js +32 -0
  105. package/dist/ai/providers/models-dev-snapshot.d.ts +50 -0
  106. package/dist/ai/providers/models-dev-snapshot.js +137 -0
  107. package/dist/ai/providers/models-dev.d.ts +51 -10
  108. package/dist/ai/providers/models-dev.js +132 -39
  109. package/dist/ai/providers/registry.d.ts +28 -11
  110. package/dist/ai/providers/registry.js +112 -65
  111. package/dist/ai/providers/suggest.d.ts +18 -0
  112. package/dist/ai/providers/suggest.js +72 -0
  113. package/dist/ai/sse.d.ts +6 -2
  114. package/dist/ai/sse.js +22 -2
  115. package/dist/ai/types.d.ts +37 -4
  116. package/dist/ai/types.js +5 -0
  117. package/dist/bundle/ama.cjs +41979 -21147
  118. package/dist/checkpoints/backend.d.ts +61 -0
  119. package/dist/checkpoints/backend.js +135 -0
  120. package/dist/checkpoints/blobs.d.ts +60 -0
  121. package/dist/checkpoints/blobs.js +203 -0
  122. package/dist/checkpoints/gc.d.ts +47 -0
  123. package/dist/checkpoints/gc.js +144 -0
  124. package/dist/checkpoints/git-head.d.ts +15 -0
  125. package/dist/checkpoints/git-head.js +89 -0
  126. package/dist/checkpoints/index.d.ts +17 -0
  127. package/dist/checkpoints/index.js +17 -0
  128. package/dist/checkpoints/replay.d.ts +48 -0
  129. package/dist/checkpoints/replay.js +154 -0
  130. package/dist/checkpoints/restore.d.ts +86 -0
  131. package/dist/checkpoints/restore.js +263 -0
  132. package/dist/checkpoints/settings.d.ts +14 -0
  133. package/dist/checkpoints/settings.js +23 -0
  134. package/dist/checkpoints/shadow-git.d.ts +108 -0
  135. package/dist/checkpoints/shadow-git.js +491 -0
  136. package/dist/checkpoints/shadow-restore.d.ts +25 -0
  137. package/dist/checkpoints/shadow-restore.js +128 -0
  138. package/dist/checkpoints/tracker.d.ts +64 -0
  139. package/dist/checkpoints/tracker.js +192 -0
  140. package/dist/checkpoints/types.d.ts +99 -0
  141. package/dist/checkpoints/types.js +12 -0
  142. package/dist/cli/args.d.ts +26 -7
  143. package/dist/cli/args.js +75 -82
  144. package/dist/cli/bootstrap.js +40 -4
  145. package/dist/cli/codemode-notice.d.ts +21 -0
  146. package/dist/cli/codemode-notice.js +56 -0
  147. package/dist/cli/compose-agents.d.ts +27 -0
  148. package/dist/cli/compose-agents.js +111 -0
  149. package/dist/cli/compose-extensions.d.ts +29 -0
  150. package/dist/cli/compose-extensions.js +44 -0
  151. package/dist/cli/compose-session.d.ts +8 -0
  152. package/dist/cli/compose-session.js +76 -2
  153. package/dist/cli/compose-store.d.ts +1 -1
  154. package/dist/cli/compose-store.js +3 -1
  155. package/dist/cli/compose.d.ts +17 -4
  156. package/dist/cli/compose.js +60 -14
  157. package/dist/cli/default-model.d.ts +38 -1
  158. package/dist/cli/default-model.js +96 -9
  159. package/dist/cli/deps.d.ts +42 -0
  160. package/dist/cli/exit-codes.d.ts +12 -0
  161. package/dist/cli/exit-codes.js +15 -0
  162. package/dist/cli/fake-visibility.d.ts +13 -0
  163. package/dist/cli/fake-visibility.js +26 -0
  164. package/dist/cli/from-prompt.d.ts +18 -0
  165. package/dist/cli/from-prompt.js +49 -0
  166. package/dist/cli/help-text.d.ts +4 -0
  167. package/dist/cli/help-text.js +102 -0
  168. package/dist/cli/main.d.ts +9 -2
  169. package/dist/cli/main.js +77 -3
  170. package/dist/cli/proxy.d.ts +51 -0
  171. package/dist/cli/proxy.js +135 -0
  172. package/dist/cli/startup-screen.d.ts +29 -0
  173. package/dist/cli/startup-screen.js +51 -2
  174. package/dist/cli/startup-steps.d.ts +1 -1
  175. package/dist/cli/startup-steps.js +21 -13
  176. package/dist/cli/subcommands/config.d.ts +22 -3
  177. package/dist/cli/subcommands/config.js +119 -21
  178. package/dist/cli/subcommands/context.js +4 -1
  179. package/dist/cli/subcommands/doctor.js +33 -1
  180. package/dist/cli/subcommands/init.js +2 -1
  181. package/dist/cli/subcommands/models-discover.d.ts +15 -9
  182. package/dist/cli/subcommands/models-discover.js +58 -52
  183. package/dist/cli/subcommands/models.d.ts +2 -0
  184. package/dist/cli/subcommands/models.js +33 -14
  185. package/dist/cli/subcommands/probe-runner.d.ts +96 -0
  186. package/dist/cli/subcommands/probe-runner.js +264 -0
  187. package/dist/cli/subcommands/providers-probe.d.ts +34 -0
  188. package/dist/cli/subcommands/providers-probe.js +87 -0
  189. package/dist/cli/subcommands/providers.d.ts +3 -2
  190. package/dist/cli/subcommands/providers.js +53 -51
  191. package/dist/cli/subcommands/sessions-export.d.ts +10 -0
  192. package/dist/cli/subcommands/sessions-export.js +59 -0
  193. package/dist/cli/subcommands/sessions-search.d.ts +13 -0
  194. package/dist/cli/subcommands/sessions-search.js +103 -0
  195. package/dist/cli/subcommands/sessions.d.ts +6 -3
  196. package/dist/cli/subcommands/sessions.js +58 -3
  197. package/dist/cli/subcommands/stats.d.ts +17 -0
  198. package/dist/cli/subcommands/stats.js +198 -0
  199. package/dist/cli/system-prompt-arg.d.ts +11 -0
  200. package/dist/cli/system-prompt-arg.js +34 -0
  201. package/dist/codemode/capability.d.ts +24 -7
  202. package/dist/codemode/capability.js +38 -10
  203. package/dist/codemode/host-side.d.ts +14 -0
  204. package/dist/codemode/host-side.js +24 -1
  205. package/dist/codemode/modes.d.ts +4 -11
  206. package/dist/codemode/modes.js +5 -27
  207. package/dist/codemode/tool.d.ts +18 -14
  208. package/dist/codemode/tool.js +76 -31
  209. package/dist/compaction/breaker.d.ts +25 -9
  210. package/dist/compaction/breaker.js +47 -17
  211. package/dist/compaction/estimate.d.ts +11 -3
  212. package/dist/compaction/estimate.js +64 -22
  213. package/dist/compaction/image-budget.d.ts +45 -0
  214. package/dist/compaction/image-budget.js +115 -0
  215. package/dist/compaction/post-compact.d.ts +38 -0
  216. package/dist/compaction/post-compact.js +152 -0
  217. package/dist/compaction/protect.d.ts +27 -0
  218. package/dist/compaction/protect.js +56 -0
  219. package/dist/compaction/prune-tier.d.ts +58 -12
  220. package/dist/compaction/prune-tier.js +120 -54
  221. package/dist/compaction/summarize-tier.d.ts +23 -4
  222. package/dist/compaction/summarize-tier.js +100 -29
  223. package/dist/config/checker.d.ts +28 -0
  224. package/dist/config/checker.js +97 -0
  225. package/dist/config/init.d.ts +6 -2
  226. package/dist/config/init.js +12 -5
  227. package/dist/config/json-schema.d.ts +1 -0
  228. package/dist/config/json-schema.js +98 -4
  229. package/dist/config/key-docs.d.ts +22 -0
  230. package/dist/config/key-docs.js +174 -0
  231. package/dist/config/merge.d.ts +12 -9
  232. package/dist/config/merge.js +102 -13
  233. package/dist/config/profile.d.ts +2 -0
  234. package/dist/config/profile.js +2 -0
  235. package/dist/config/schema-w5.d.ts +18 -0
  236. package/dist/config/schema-w5.js +109 -0
  237. package/dist/config/schema.d.ts +5 -9
  238. package/dist/config/schema.js +91 -118
  239. package/dist/config/types-w5.d.ts +118 -0
  240. package/dist/config/types-w5.js +20 -0
  241. package/dist/config/types.d.ts +84 -7
  242. package/dist/config/types.js +29 -1
  243. package/dist/drivers/acp/client.d.ts +57 -0
  244. package/dist/drivers/acp/client.js +160 -0
  245. package/dist/drivers/acp/driver.d.ts +31 -0
  246. package/dist/drivers/acp/driver.js +274 -0
  247. package/dist/drivers/acp/testing/fake-agent-main.d.ts +5 -0
  248. package/dist/drivers/acp/testing/fake-agent-main.js +7 -0
  249. package/dist/drivers/acp/testing/fake-agent.d.ts +27 -0
  250. package/dist/drivers/acp/testing/fake-agent.js +211 -0
  251. package/dist/drivers/acp/types.d.ts +285 -0
  252. package/dist/drivers/acp/types.js +36 -0
  253. package/dist/drivers/agents.d.ts +58 -0
  254. package/dist/drivers/agents.js +142 -0
  255. package/dist/drivers/base.d.ts +35 -0
  256. package/dist/drivers/base.js +59 -0
  257. package/dist/drivers/catalog.d.ts +46 -0
  258. package/dist/drivers/catalog.js +167 -0
  259. package/dist/drivers/env.d.ts +20 -0
  260. package/dist/drivers/env.js +46 -0
  261. package/dist/drivers/host-runners.d.ts +18 -0
  262. package/dist/drivers/host-runners.js +45 -0
  263. package/dist/drivers/jsonrpc.d.ts +58 -0
  264. package/dist/drivers/jsonrpc.js +180 -0
  265. package/dist/drivers/native/claude-normalize.d.ts +46 -0
  266. package/dist/drivers/native/claude-normalize.js +106 -0
  267. package/dist/drivers/native/claude-stream.d.ts +29 -0
  268. package/dist/drivers/native/claude-stream.js +456 -0
  269. package/dist/drivers/native/codex-app-server.d.ts +26 -0
  270. package/dist/drivers/native/codex-app-server.js +407 -0
  271. package/dist/drivers/native/codex-normalize.d.ts +38 -0
  272. package/dist/drivers/native/codex-normalize.js +124 -0
  273. package/dist/drivers/native/oneshot.d.ts +28 -0
  274. package/dist/drivers/native/oneshot.js +312 -0
  275. package/dist/drivers/permissions.d.ts +40 -0
  276. package/dist/drivers/permissions.js +92 -0
  277. package/dist/drivers/pids.d.ts +32 -0
  278. package/dist/drivers/pids.js +93 -0
  279. package/dist/drivers/pool.d.ts +28 -0
  280. package/dist/drivers/pool.js +96 -0
  281. package/dist/drivers/probe.d.ts +47 -0
  282. package/dist/drivers/probe.js +172 -0
  283. package/dist/drivers/process.d.ts +48 -0
  284. package/dist/drivers/process.js +100 -0
  285. package/dist/drivers/runner.d.ts +61 -0
  286. package/dist/drivers/runner.js +388 -0
  287. package/dist/drivers/store.d.ts +49 -0
  288. package/dist/drivers/store.js +91 -0
  289. package/dist/drivers/turn.d.ts +41 -0
  290. package/dist/drivers/turn.js +99 -0
  291. package/dist/drivers/types.d.ts +122 -0
  292. package/dist/drivers/types.js +11 -0
  293. package/dist/git/info.d.ts +75 -0
  294. package/dist/git/info.js +191 -0
  295. package/dist/hooks/protocol.js +6 -1
  296. package/dist/hooks/types.d.ts +10 -1
  297. package/dist/hooks/types.js +2 -0
  298. package/dist/host/api-impl.d.ts +7 -0
  299. package/dist/host/api-impl.js +15 -0
  300. package/dist/host/types.d.ts +24 -2
  301. package/dist/host/types.js +4 -0
  302. package/dist/index.d.ts +3 -0
  303. package/dist/index.js +1 -0
  304. package/dist/modes/acp/acp-events.d.ts +46 -0
  305. package/dist/modes/acp/acp-events.js +233 -0
  306. package/dist/modes/acp/acp-mode.d.ts +17 -0
  307. package/dist/modes/acp/acp-mode.js +47 -0
  308. package/dist/modes/acp/acp-server.d.ts +79 -0
  309. package/dist/modes/acp/acp-server.js +315 -0
  310. package/dist/modes/commands-core.d.ts +7 -1
  311. package/dist/modes/commands-core.js +61 -5
  312. package/dist/modes/image-input.d.ts +12 -4
  313. package/dist/modes/image-input.js +22 -5
  314. package/dist/modes/interactive/agent-panels.d.ts +14 -0
  315. package/dist/modes/interactive/agent-panels.js +103 -0
  316. package/dist/modes/interactive/agent-ui.d.ts +73 -0
  317. package/dist/modes/interactive/agent-ui.js +234 -0
  318. package/dist/modes/interactive/approval-dialog.d.ts +40 -7
  319. package/dist/modes/interactive/approval-dialog.js +192 -35
  320. package/dist/modes/interactive/approval-merge.d.ts +41 -0
  321. package/dist/modes/interactive/approval-merge.js +89 -0
  322. package/dist/modes/interactive/clipboard-paste.d.ts +18 -0
  323. package/dist/modes/interactive/clipboard-paste.js +28 -0
  324. package/dist/modes/interactive/commands.d.ts +20 -3
  325. package/dist/modes/interactive/commands.js +75 -16
  326. package/dist/modes/interactive/double-esc.d.ts +20 -0
  327. package/dist/modes/interactive/double-esc.js +34 -0
  328. package/dist/modes/interactive/event-notices.d.ts +32 -0
  329. package/dist/modes/interactive/event-notices.js +79 -0
  330. package/dist/modes/interactive/external-editor.d.ts +16 -0
  331. package/dist/modes/interactive/external-editor.js +39 -0
  332. package/dist/modes/interactive/interactive-mode.d.ts +16 -2
  333. package/dist/modes/interactive/interactive-mode.js +184 -202
  334. package/dist/modes/interactive/key-dispatch.d.ts +18 -2
  335. package/dist/modes/interactive/key-dispatch.js +53 -6
  336. package/dist/modes/interactive/line/line-mode.d.ts +3 -1
  337. package/dist/modes/interactive/line/line-mode.js +28 -9
  338. package/dist/modes/interactive/line/line-render.d.ts +6 -1
  339. package/dist/modes/interactive/line/line-render.js +66 -8
  340. package/dist/modes/interactive/message-view.d.ts +49 -10
  341. package/dist/modes/interactive/message-view.js +262 -46
  342. package/dist/modes/interactive/panels.d.ts +35 -0
  343. package/dist/modes/interactive/panels.js +157 -0
  344. package/dist/modes/interactive/pickers.d.ts +23 -2
  345. package/dist/modes/interactive/pickers.js +48 -15
  346. package/dist/modes/interactive/plan-command.d.ts +40 -0
  347. package/dist/modes/interactive/plan-command.js +129 -0
  348. package/dist/modes/interactive/plan-dialog.d.ts +98 -0
  349. package/dist/modes/interactive/plan-dialog.js +290 -0
  350. package/dist/modes/interactive/plan-flow.d.ts +34 -0
  351. package/dist/modes/interactive/plan-flow.js +98 -0
  352. package/dist/modes/interactive/rewind-command.d.ts +31 -0
  353. package/dist/modes/interactive/rewind-command.js +106 -0
  354. package/dist/modes/interactive/rewind-flow.d.ts +37 -0
  355. package/dist/modes/interactive/rewind-flow.js +151 -0
  356. package/dist/modes/interactive/rewind-list.d.ts +36 -0
  357. package/dist/modes/interactive/rewind-list.js +123 -0
  358. package/dist/modes/interactive/rewind-panel.d.ts +77 -0
  359. package/dist/modes/interactive/rewind-panel.js +309 -0
  360. package/dist/modes/interactive/rewind-text.d.ts +40 -0
  361. package/dist/modes/interactive/rewind-text.js +139 -0
  362. package/dist/modes/interactive/run-indicator.d.ts +51 -0
  363. package/dist/modes/interactive/run-indicator.js +189 -0
  364. package/dist/modes/interactive/session-events.d.ts +24 -0
  365. package/dist/modes/interactive/session-events.js +96 -0
  366. package/dist/modes/interactive/startup-header.d.ts +40 -0
  367. package/dist/modes/interactive/startup-header.js +169 -0
  368. package/dist/modes/interactive/status-area.d.ts +73 -0
  369. package/dist/modes/interactive/status-area.js +190 -0
  370. package/dist/modes/interactive/status-bar.d.ts +107 -16
  371. package/dist/modes/interactive/status-bar.js +306 -81
  372. package/dist/modes/interactive/status-line.d.ts +33 -0
  373. package/dist/modes/interactive/status-line.js +113 -0
  374. package/dist/modes/interactive/subagent-view.d.ts +56 -0
  375. package/dist/modes/interactive/subagent-view.js +154 -0
  376. package/dist/modes/interactive/tasks-report.d.ts +27 -0
  377. package/dist/modes/interactive/tasks-report.js +114 -0
  378. package/dist/modes/interactive/tool-summary.d.ts +46 -0
  379. package/dist/modes/interactive/tool-summary.js +218 -0
  380. package/dist/modes/interactive/tool-view.d.ts +58 -15
  381. package/dist/modes/interactive/tool-view.js +233 -145
  382. package/dist/modes/print/print-mode.d.ts +40 -4
  383. package/dist/modes/print/print-mode.js +161 -8
  384. package/dist/modes/rpc/commands.d.ts +9 -0
  385. package/dist/modes/rpc/commands.js +49 -0
  386. package/dist/modes/rpc/rpc-mode.js +7 -1
  387. package/dist/modes/session-report.d.ts +11 -0
  388. package/dist/modes/session-report.js +48 -1
  389. package/dist/permissions/auto-safe.d.ts +65 -0
  390. package/dist/permissions/auto-safe.js +547 -0
  391. package/dist/permissions/classifier.d.ts +68 -0
  392. package/dist/permissions/classifier.js +186 -0
  393. package/dist/permissions/dangerous.d.ts +5 -0
  394. package/dist/permissions/dangerous.js +1 -1
  395. package/dist/permissions/modes.d.ts +30 -0
  396. package/dist/permissions/modes.js +78 -0
  397. package/dist/permissions/pipeline.d.ts +72 -6
  398. package/dist/permissions/pipeline.js +306 -11
  399. package/dist/permissions/protected.d.ts +19 -0
  400. package/dist/permissions/protected.js +74 -0
  401. package/dist/permissions/readonly-bash.d.ts +30 -0
  402. package/dist/permissions/readonly-bash.js +118 -0
  403. package/dist/permissions/rules.js +3 -0
  404. package/dist/permissions/types.d.ts +92 -3
  405. package/dist/permissions/types.js +3 -0
  406. package/dist/plan/compose.d.ts +9 -0
  407. package/dist/plan/compose.js +19 -0
  408. package/dist/plan/controller.d.ts +71 -0
  409. package/dist/plan/controller.js +27 -0
  410. package/dist/plan/done-markers.d.ts +17 -0
  411. package/dist/plan/done-markers.js +51 -0
  412. package/dist/plan/extract.d.ts +29 -0
  413. package/dist/plan/extract.js +160 -0
  414. package/dist/plan/prompts.d.ts +36 -0
  415. package/dist/plan/prompts.js +89 -0
  416. package/dist/plan/store.d.ts +37 -0
  417. package/dist/plan/store.js +90 -0
  418. package/dist/rpc.d.ts +58 -2
  419. package/dist/rpc.js +7 -0
  420. package/dist/sandbox/bash.d.ts +74 -0
  421. package/dist/sandbox/bash.js +126 -0
  422. package/dist/sandbox/detect.d.ts +48 -0
  423. package/dist/sandbox/detect.js +149 -0
  424. package/dist/sandbox/index.d.ts +5 -0
  425. package/dist/sandbox/index.js +5 -0
  426. package/dist/sandbox/profile.d.ts +33 -0
  427. package/dist/sandbox/profile.js +76 -0
  428. package/dist/sandbox/wrap.d.ts +29 -0
  429. package/dist/sandbox/wrap.js +117 -0
  430. package/dist/sdk.d.ts +42 -5
  431. package/dist/sdk.js +34 -4
  432. package/dist/session/export.d.ts +32 -0
  433. package/dist/session/export.js +187 -0
  434. package/dist/session/redact.d.ts +15 -0
  435. package/dist/session/redact.js +55 -0
  436. package/dist/session/reuse.d.ts +33 -0
  437. package/dist/session/reuse.js +86 -0
  438. package/dist/session/scan.d.ts +34 -0
  439. package/dist/session/scan.js +140 -0
  440. package/dist/session/search.d.ts +52 -0
  441. package/dist/session/search.js +211 -0
  442. package/dist/session/stats-aggregate.d.ts +63 -0
  443. package/dist/session/stats-aggregate.js +163 -0
  444. package/dist/session/stats-index.d.ts +26 -0
  445. package/dist/session/stats-index.js +91 -0
  446. package/dist/session/stats-scan.d.ts +54 -0
  447. package/dist/session/stats-scan.js +236 -0
  448. package/dist/session/types.d.ts +3 -1
  449. package/dist/session/types.js +1 -0
  450. package/dist/skills/builtin.d.ts +31 -0
  451. package/dist/skills/builtin.js +109 -0
  452. package/dist/skills/discover.d.ts +2 -1
  453. package/dist/skills/index-prompt.js +5 -8
  454. package/dist/tools/background-jobs.d.ts +71 -0
  455. package/dist/tools/background-jobs.js +198 -0
  456. package/dist/tools/bash.d.ts +53 -1
  457. package/dist/tools/bash.js +158 -7
  458. package/dist/tools/clipboard-image.d.ts +44 -0
  459. package/dist/tools/clipboard-image.js +148 -0
  460. package/dist/tools/edit.d.ts +2 -0
  461. package/dist/tools/edit.js +18 -3
  462. package/dist/tools/image-file.d.ts +38 -3
  463. package/dist/tools/image-file.js +81 -10
  464. package/dist/tools/image-resize.d.ts +58 -0
  465. package/dist/tools/image-resize.js +97 -0
  466. package/dist/tools/presets.d.ts +40 -8
  467. package/dist/tools/presets.js +65 -19
  468. package/dist/tools/read.d.ts +5 -2
  469. package/dist/tools/read.js +13 -10
  470. package/dist/tools/registry.d.ts +7 -1
  471. package/dist/tools/registry.js +27 -4
  472. package/dist/tools/task-ctl.d.ts +22 -0
  473. package/dist/tools/task-ctl.js +116 -0
  474. package/dist/tools/task.d.ts +22 -10
  475. package/dist/tools/task.js +66 -26
  476. package/dist/tools/todo.d.ts +22 -2
  477. package/dist/tools/todo.js +58 -14
  478. package/dist/tools/truncate.d.ts +15 -0
  479. package/dist/tools/truncate.js +25 -0
  480. package/dist/tools/types.d.ts +113 -0
  481. package/dist/tools/types.js +5 -0
  482. package/dist/tools/write.js +3 -0
  483. package/dist/tui/component.d.ts +8 -2
  484. package/dist/tui/component.js +3 -1
  485. package/dist/tui/components/box.d.ts +6 -1
  486. package/dist/tui/components/box.js +16 -6
  487. package/dist/tui/components/card.d.ts +23 -0
  488. package/dist/tui/components/card.js +37 -0
  489. package/dist/tui/components/editor-history.d.ts +6 -0
  490. package/dist/tui/components/editor-history.js +45 -0
  491. package/dist/tui/components/editor-paste.d.ts +1 -1
  492. package/dist/tui/components/editor-paste.js +4 -4
  493. package/dist/tui/components/editor.d.ts +11 -5
  494. package/dist/tui/components/editor.js +52 -58
  495. package/dist/tui/components/key-value.d.ts +3 -0
  496. package/dist/tui/components/key-value.js +16 -6
  497. package/dist/tui/components/loader.d.ts +37 -7
  498. package/dist/tui/components/loader.js +84 -21
  499. package/dist/tui/components/markdown.d.ts +5 -1
  500. package/dist/tui/components/markdown.js +45 -21
  501. package/dist/tui/components/meter.d.ts +3 -3
  502. package/dist/tui/components/meter.js +13 -11
  503. package/dist/tui/components/select-list.d.ts +23 -1
  504. package/dist/tui/components/select-list.js +76 -13
  505. package/dist/tui/glyphs.d.ts +72 -0
  506. package/dist/tui/glyphs.js +118 -0
  507. package/dist/tui/keybindings.d.ts +5 -0
  508. package/dist/tui/keybindings.js +5 -0
  509. package/dist/tui/theme.d.ts +30 -6
  510. package/dist/tui/theme.js +103 -17
  511. package/dist/tui.d.ts +4 -2
  512. package/dist/tui.js +3 -1
  513. package/docs/acp.md +78 -0
  514. package/docs/agents.md +250 -0
  515. package/docs/codemode.md +28 -10
  516. package/docs/hooks.md +36 -32
  517. package/docs/permissions.md +212 -0
  518. package/docs/plan.md +107 -0
  519. package/docs/providers.md +261 -62
  520. package/docs/rewind-plan.md +181 -0
  521. package/docs/rpc.md +127 -40
  522. package/docs/sandbox.md +215 -0
  523. package/docs/session-format.md +43 -22
  524. package/docs/sessions.md +174 -0
  525. package/docs/tui-design.md +751 -0
  526. package/docs/tui.md +260 -64
  527. package/package.json +15 -2
@@ -0,0 +1,73 @@
1
+ /**
2
+ * 交互界面的第五波接线(计划审批、子 Agent、外部 Agent、剪贴板图片、harness 提示),从 interactive-mode.ts
3
+ * 拆出来,保持装配文件在 600 行以内。[W5-U]
4
+ *
5
+ * - 事件:`subagent_start / update / end` → 折叠视图(subagent-view.ts)并刷新对应的 task 工具行,后台任务
6
+ * 结束给一行提示;`limit_reached`、`model_fallback`、`background_job` → 一行友好提示。
7
+ * - 会话:`attach(session)` 接管计划审批(plan-flow.ts)、把外部 Agent 的 notice 转到消息区。
8
+ * - 命令:`/plan`(无参数:面板,有待审批的计划时打开审批框)、`/tasks`(无参数:选择任务,查看输出或停止)、
9
+ * `/agents`、`/paste`;其余参数形式交给 commands-core(与 line 模式同一语义)。
10
+ * - `Ctrl+V` / `/paste`:剪贴板图片写进数据目录,输入框光标处插入 `@<路径>`。
11
+ *
12
+ * 外部 Agent 的 notice(W5-E runner 的 `{type:"notice"}`)由任务注册表写进会话日志(`[task tN] …`),没有
13
+ * 事件;这里在会话的 `options.log` 外面套一层,只把这类行转到消息区,其余照原样写日志。
14
+ */
15
+ import type { AgentSession, SessionEvent } from "../../agent/types.js";
16
+ import type { SwitchRequest } from "../../cli/compose-session.js";
17
+ import type { ClipboardDeps } from "../../tools/clipboard-image.js";
18
+ import type { Component, Editor, TUI, Theme } from "../../tui.js";
19
+ import { FirstRunMerge } from "./approval-merge.js";
20
+ import type { NoticeLevel } from "./message-view.js";
21
+ import type { PickerSpec } from "./pickers.js";
22
+ import { PlanFlow } from "./plan-flow.js";
23
+ import type { PlanDialogHost } from "./plan-dialog.js";
24
+ import { SubagentTracker } from "./subagent-view.js";
25
+ import type { ToolTracker } from "./tool-view.js";
26
+ export interface AgentUiDeps {
27
+ theme: Theme;
28
+ tui: TUI;
29
+ editor: Editor;
30
+ tools(): ToolTracker;
31
+ subagents: SubagentTracker;
32
+ session(): AgentSession;
33
+ dataDir: string;
34
+ env: Readonly<Record<string, string | undefined>>;
35
+ now(): number;
36
+ notice(level: NoticeLevel, text: string): void;
37
+ panel(component: Component): void;
38
+ pick(spec: PickerSpec): Promise<{
39
+ value: string;
40
+ } | undefined>;
41
+ hint(text: string): void;
42
+ render(): void;
43
+ switchSession(request: SwitchRequest): Promise<AgentSession>;
44
+ prompt(text: string): void;
45
+ dialog: Omit<PlanDialogHost, "editExternal" | "render">;
46
+ /** 路径显示(缩写家目录)。 */
47
+ displayPath(path: string): string;
48
+ /** 剪贴板读取的注入(测试)。 */
49
+ clipboard?: ClipboardDeps;
50
+ }
51
+ export declare class AgentUi {
52
+ private readonly deps;
53
+ readonly plan: PlanFlow;
54
+ readonly merge: FirstRunMerge;
55
+ private restoreLog;
56
+ /** 后台子 Agent 运行中:每秒重画跟随行的耗时(主会话空闲时 Loader 不转)。 */
57
+ private ticker;
58
+ constructor(deps: AgentUiDeps);
59
+ /** 新会话(启动、/new /resume /fork):接管计划审批,转发外部 Agent notice。 */
60
+ attach(session: AgentSession): void;
61
+ detach(): void;
62
+ private followBackground;
63
+ private stopTicker;
64
+ private routeNotices;
65
+ /** 返回 true:事件已处理(调用方只需重画)。 */
66
+ onEvent(event: SessionEvent): boolean;
67
+ /** 交互界面自己处理的第五波命令;不是返回 false。 */
68
+ command(name: string, args: string): Promise<boolean>;
69
+ private showPlan;
70
+ private tasks;
71
+ /** `Ctrl+V` / `/paste`:光标处插入 `@<路径>`。 */
72
+ paste(): Promise<void>;
73
+ }
@@ -0,0 +1,234 @@
1
+ /**
2
+ * 交互界面的第五波接线(计划审批、子 Agent、外部 Agent、剪贴板图片、harness 提示),从 interactive-mode.ts
3
+ * 拆出来,保持装配文件在 600 行以内。[W5-U]
4
+ *
5
+ * - 事件:`subagent_start / update / end` → 折叠视图(subagent-view.ts)并刷新对应的 task 工具行,后台任务
6
+ * 结束给一行提示;`limit_reached`、`model_fallback`、`background_job` → 一行友好提示。
7
+ * - 会话:`attach(session)` 接管计划审批(plan-flow.ts)、把外部 Agent 的 notice 转到消息区。
8
+ * - 命令:`/plan`(无参数:面板,有待审批的计划时打开审批框)、`/tasks`(无参数:选择任务,查看输出或停止)、
9
+ * `/agents`、`/paste`;其余参数形式交给 commands-core(与 line 模式同一语义)。
10
+ * - `Ctrl+V` / `/paste`:剪贴板图片写进数据目录,输入框光标处插入 `@<路径>`。
11
+ *
12
+ * 外部 Agent 的 notice(W5-E runner 的 `{type:"notice"}`)由任务注册表写进会话日志(`[task tN] …`),没有
13
+ * 事件;这里在会话的 `options.log` 外面套一层,只把这类行转到消息区,其余照原样写日志。
14
+ */
15
+ import { taskRegistryView } from "../../agent/subagent-registry.js";
16
+ import { planController } from "../../plan/controller.js";
17
+ import { agentsPanel, planPanel, taskOutputPanel } from "./agent-panels.js";
18
+ import { FirstRunMerge } from "./approval-merge.js";
19
+ import { pasteImage } from "./clipboard-paste.js";
20
+ import { backgroundJobText, limitReachedText, modelFallbackText } from "./event-notices.js";
21
+ import { editExternally } from "./external-editor.js";
22
+ import { PlanFlow } from "./plan-flow.js";
23
+ import { backgroundEndText, SubagentTracker } from "./subagent-view.js";
24
+ import { listTasks, stopTask, taskLine, taskOutput } from "./tasks-report.js";
25
+ const TASK_NOTICE = /^\[task (t\d+)\] ([\s\S]*)$/;
26
+ export class AgentUi {
27
+ deps;
28
+ plan;
29
+ merge;
30
+ restoreLog;
31
+ /** 后台子 Agent 运行中:每秒重画跟随行的耗时(主会话空闲时 Loader 不转)。 */
32
+ ticker;
33
+ constructor(deps) {
34
+ this.deps = deps;
35
+ this.merge = new FirstRunMerge({ sessionId: () => deps.session().state.sessionId });
36
+ this.plan = new PlanFlow({
37
+ dialog: {
38
+ ...deps.dialog,
39
+ displayPath: (path) => deps.displayPath(path),
40
+ render: () => deps.render(),
41
+ editExternal: (text, kind) => editExternally(text, kind === "plan" ? "plan.md" : "feedback.md", {
42
+ env: deps.env,
43
+ suspend: () => deps.tui.stop(),
44
+ resume: () => {
45
+ deps.tui.start();
46
+ deps.tui.forceFullRedraw();
47
+ },
48
+ }),
49
+ },
50
+ switchSession: (request) => deps.switchSession(request),
51
+ notice: (level, text) => deps.notice(level, text),
52
+ prompt: (text) => deps.prompt(text),
53
+ });
54
+ }
55
+ /** 新会话(启动、/new /resume /fork):接管计划审批,转发外部 Agent notice。 */
56
+ attach(session) {
57
+ this.deps.subagents.clear();
58
+ this.stopTicker();
59
+ this.plan.attach(session);
60
+ this.routeNotices(session);
61
+ }
62
+ detach() {
63
+ this.restoreLog?.();
64
+ this.restoreLog = undefined;
65
+ this.stopTicker();
66
+ }
67
+ followBackground() {
68
+ const running = this.deps.subagents.running().filter((s) => s.background);
69
+ if (running.length === 0)
70
+ return this.stopTicker();
71
+ if (this.ticker !== undefined)
72
+ return;
73
+ this.ticker = setInterval(() => {
74
+ const live = this.deps.subagents.running().filter((s) => s.background);
75
+ if (live.length === 0)
76
+ return this.stopTicker();
77
+ for (const state of live)
78
+ this.deps.tools().get(state.parentToolCallId)?.refresh();
79
+ this.deps.render();
80
+ }, 1000);
81
+ this.ticker.unref?.();
82
+ }
83
+ stopTicker() {
84
+ if (this.ticker !== undefined)
85
+ clearInterval(this.ticker);
86
+ this.ticker = undefined;
87
+ }
88
+ routeNotices(session) {
89
+ this.detach();
90
+ const holder = session.options;
91
+ if (holder === undefined)
92
+ return;
93
+ const original = holder.log;
94
+ const routed = (level, message) => {
95
+ const match = TASK_NOTICE.exec(message);
96
+ if (match !== null && (level === "info" || level === "warn")) {
97
+ const taskId = match[1];
98
+ const agent = taskRegistryView(session.state.sessionId)?.get(taskId)?.agent ?? "task";
99
+ this.deps.notice(level === "warn" ? "warn" : "info", `[${agent} · ${taskId}] ${match[2]}`);
100
+ return;
101
+ }
102
+ original?.call(holder, level, message);
103
+ };
104
+ holder.log = routed;
105
+ this.restoreLog = () => {
106
+ if (holder.log !== routed)
107
+ return;
108
+ if (original === undefined)
109
+ delete holder.log;
110
+ else
111
+ holder.log = original;
112
+ };
113
+ }
114
+ /** 返回 true:事件已处理(调用方只需重画)。 */
115
+ onEvent(event) {
116
+ switch (event.type) {
117
+ case "subagent_start":
118
+ case "subagent_update":
119
+ case "subagent_end": {
120
+ const state = this.deps.subagents.onEvent(event);
121
+ if (state === undefined)
122
+ return true;
123
+ this.deps.tools().get(state.parentToolCallId)?.refresh();
124
+ // 后台任务:完成时 <task-notification> 那一行就是提示;失败 / 停止另给一行
125
+ if (event.type === "subagent_end" && state.background && state.status !== "completed")
126
+ this.deps.notice("warn", backgroundEndText(state));
127
+ this.followBackground();
128
+ return true;
129
+ }
130
+ case "limit_reached":
131
+ this.deps.notice("warn", limitReachedText(event));
132
+ return true;
133
+ case "model_fallback":
134
+ this.deps.notice("warn", modelFallbackText(event));
135
+ return false;
136
+ case "background_job":
137
+ this.deps.notice("info", backgroundJobText(event));
138
+ return true;
139
+ default:
140
+ return false;
141
+ }
142
+ }
143
+ /** 交互界面自己处理的第五波命令;不是返回 false。 */
144
+ async command(name, args) {
145
+ if (args !== "")
146
+ return false;
147
+ switch (name) {
148
+ case "plan":
149
+ await this.showPlan();
150
+ return true;
151
+ case "tasks":
152
+ await this.tasks();
153
+ return true;
154
+ case "agents":
155
+ this.deps.panel(agentsPanel(this.deps.session().state.sessionId, this.deps.theme));
156
+ return true;
157
+ case "paste":
158
+ await this.paste();
159
+ return true;
160
+ default:
161
+ return false;
162
+ }
163
+ }
164
+ async showPlan() {
165
+ const session = this.deps.session();
166
+ const controller = planController(session);
167
+ if (controller === undefined) {
168
+ this.deps.notice("info", "当前会话没有 Plan 能力");
169
+ return;
170
+ }
171
+ this.deps.panel(planPanel(controller, session, this.deps.theme, this.deps.displayPath));
172
+ const pending = controller.pending();
173
+ if (pending !== undefined && !session.state.isStreaming)
174
+ await this.plan.ask(session, pending);
175
+ }
176
+ async tasks() {
177
+ const sessionId = this.deps.session().state.sessionId;
178
+ const tasks = listTasks(sessionId);
179
+ if (tasks.length === 0) {
180
+ this.deps.notice("info", "还没有子 Agent 任务");
181
+ return;
182
+ }
183
+ const now = this.deps.now();
184
+ const picked = await this.deps.pick({
185
+ title: "子 Agent 任务",
186
+ items: [...tasks]
187
+ .reverse()
188
+ .map((task) => ({ value: task.taskId, label: taskLine(task, now) })),
189
+ footer: "↑↓ 选择 · Enter 查看 · Esc 取消",
190
+ });
191
+ if (picked === undefined)
192
+ return;
193
+ const task = taskRegistryView(sessionId)?.get(picked.value);
194
+ if (task === undefined)
195
+ return;
196
+ if (task.status === "running") {
197
+ const action = await this.deps.pick({
198
+ title: `任务 ${task.taskId}`,
199
+ items: [
200
+ { value: "output", label: "查看已有输出" },
201
+ { value: "stop", label: "停止任务" },
202
+ ],
203
+ numberKeys: true,
204
+ });
205
+ if (action === undefined)
206
+ return;
207
+ if (action.value === "stop") {
208
+ await stopTask(sessionId, task.taskId);
209
+ this.deps.notice("info", `已停止 ${task.taskId}`);
210
+ return;
211
+ }
212
+ }
213
+ const fresh = taskRegistryView(sessionId)?.get(task.taskId) ?? task;
214
+ const output = taskOutput(sessionId, task.taskId);
215
+ const { theme, displayPath } = this.deps;
216
+ this.deps.panel(taskOutputPanel(fresh, output, theme, this.deps.now(), displayPath));
217
+ }
218
+ /** `Ctrl+V` / `/paste`:光标处插入 `@<路径>`。 */
219
+ async paste() {
220
+ this.deps.hint("读取剪贴板…");
221
+ const pasted = await pasteImage(this.deps.dataDir, this.deps.clipboard);
222
+ if (!pasted.ok) {
223
+ this.deps.hint("");
224
+ this.deps.notice("info", pasted.message);
225
+ return;
226
+ }
227
+ const editor = this.deps.editor;
228
+ const before = editor.getText();
229
+ const lead = before === "" || /\s$/.test(before) ? "" : " ";
230
+ editor.insertText(`${lead}${pasted.ref} `);
231
+ this.deps.hint("已插入剪贴板图片");
232
+ this.deps.render();
233
+ }
234
+ }
@@ -1,13 +1,21 @@
1
1
  /**
2
2
  * 审批对话框(设计 §12.6):模式层的 UI `ApprovalBroker`,底部覆盖层。[B7]
3
3
  *
4
- * - 标题行:`[task]`(`request.context.depth > 0`,子 Agent 发起)+ 工具名 + 原因标签;
4
+ * - 标题行:来源标注 + 工具名 + 原因标签。来源(W5-U):外部 Agent 的请求(`context.origin`)标
5
+ * `[claude · 会话 abc12345]`,正文取 `origin.toolCall` 的标题 / 种类 / 路径;task 子 Agent(`depth > 0`)标
6
+ * `[task:<agent>]`(类型名经 `ApprovalHost.taskAgent` 查注册表,查不到为 `[task]`);外部 Agent 首次运行确认
7
+ * (`toolName: "task"` 且输入带 `note`)标题为「首次运行外部 Agent」,正文是说明与模式;选项始终是
8
+ * 允许 / 本会话允许 / 拒绝三项(外部 Agent 的 `reject_always` 不由这里选);
5
9
  * - 输入:bash 显示命令全文,write 显示路径与行数,edit 显示路径与每处修改的 −/+ 摘要,其它显示
6
10
  * 一行摘要;`v` 展开 / 收起完整输入(JSON);
7
11
  * - 执行前预览(W3-B9a-2,`request.preview`):输入摘要之后列出会碰到的路径与规模,danger 红、
8
12
  * warn 黄、info 暗色;`other` 类预览与输入摘要重复,不显示;
9
13
  * - 原因:mode(当前权限模式需要确认)/ dangerous / hook + Hook 给的文本;
10
- * - 按键:`y` 允许、`n` / Esc / Ctrl+C 拒绝、`a` 本会话允许同类;
14
+ * - 选项(终端界面视觉设计 v1 §3.11):编号列表 `1. 允许 y` / `2. 本会话允许同类 a` / `3. 拒绝 n Esc`,
15
+ * 选中行 `›` + selection 底色;缺省选中:危险命令 → 拒绝,其余 → 允许。按键 `y / a / n / Esc / Ctrl+C /
16
+ * 1 2 3 / ↑↓ Enter / v` 都有效;
17
+ * - 标题按原因:需要确认 / 危险命令 / Hook 要求确认(子 Agent 发起前缀 `[task] `);边框颜色随预览严重度
18
+ * (danger error、warn warning);宽 < 56 时紧凑:工具名单独一行、去掉空行、按键提示缩短;
11
19
  * - 超时与中断:broker 链在超时(缺省 10 分钟)或运行被中断时 abort `signal`,对话框关闭并返回
12
20
  * undefined(链按 deny 处理),消息区留一行说明。
13
21
  *
@@ -17,6 +25,10 @@ import type { ApprovalBroker, ApprovalDecision, ApprovalRequest } from "../../pe
17
25
  import { type Component, type Keybindings, type OverlayHandle, type Theme } from "../../tui.js";
18
26
  export interface ApprovalHost {
19
27
  theme: Theme;
28
+ /** task 子 Agent 的类型名(`[task:<agent>]`);查不到返回 undefined。 */
29
+ taskAgent?(taskId: string): string | undefined;
30
+ /** `task` 调用的 agent 是外部 Agent 时返回 runner(见 approval-merge.ts)。 */
31
+ externalRunner?(agent: string): string | undefined;
20
32
  keybindings?: Keybindings;
21
33
  /** 路径显示的基准。 */
22
34
  cwd?: string;
@@ -29,13 +41,33 @@ export interface ApprovalHost {
29
41
  /** 结果说明(消息区一行)。 */
30
42
  report?(request: ApprovalRequest, outcome: ApprovalDecision | "cancelled"): void;
31
43
  }
32
- /** 对话框正文(不含按键行)。 */
33
- export declare function describeRequest(request: ApprovalRequest, theme: Theme, options?: {
44
+ export interface DescribeOptions {
34
45
  cwd?: string;
35
46
  permissionMode?: string;
36
47
  expanded?: boolean;
37
- }): string[];
38
- export declare const APPROVAL_KEYS_HINT = "[y] \u5141\u8BB8 [n] \u62D2\u7EDD [a] \u672C\u4F1A\u8BDD\u5141\u8BB8\u540C\u7C7B [v] \u5B8C\u6574\u8F93\u5165";
48
+ /** 紧凑(窄屏):首行只放工具名(原因已在标题上)。 */
49
+ compact?: boolean;
50
+ /** task 子 Agent 的类型名(来源标注)。 */
51
+ taskAgent?: TaskAgentLookup;
52
+ /** `task` 调用的 agent 是外部 Agent 时返回 runner(正文写明首次运行一并确认)。 */
53
+ externalRunner?(agent: string): string | undefined;
54
+ }
55
+ export type TaskAgentLookup = (taskId: string) => string | undefined;
56
+ /** 外部 Agent 首次运行确认(`requestApproval` 发来的 `task` 请求,输入带 `note`)。 */
57
+ export declare function isFirstRunRequest(request: ApprovalRequest): boolean;
58
+ /** 来源标注:`[claude · 会话 abc12345]` / `[task:explore]` / `[task]`;主会话发起为 undefined。 */
59
+ export declare function sourceLabel(request: ApprovalRequest, taskAgent?: TaskAgentLookup): string | undefined;
60
+ /** 原因 → 标题文字(带来源标注)。 */
61
+ export declare function approvalTitle(request: ApprovalRequest, taskAgent?: TaskAgentLookup): string;
62
+ /** 对话框正文(不含选项与按键行)。 */
63
+ export declare function describeRequest(request: ApprovalRequest, theme: Theme, options?: DescribeOptions): string[];
64
+ interface ApprovalOption {
65
+ decision: ApprovalDecision;
66
+ label: string;
67
+ /** 右侧按键提示。 */
68
+ keys: string;
69
+ }
70
+ export declare const APPROVAL_OPTIONS: readonly ApprovalOption[];
39
71
  /** UI broker:每个请求开一个底部覆盖层,等用户按键或 signal abort。 */
40
72
  export declare class ApprovalDialogBroker implements ApprovalBroker {
41
73
  private readonly host;
@@ -45,4 +77,5 @@ export declare class ApprovalDialogBroker implements ApprovalBroker {
45
77
  ask(request: ApprovalRequest, signal: AbortSignal): Promise<ApprovalDecision | undefined>;
46
78
  }
47
79
  /** 结果的一行说明(消息区)。 */
48
- export declare function approvalOutcomeText(request: ApprovalRequest, outcome: ApprovalDecision | "cancelled"): string;
80
+ export declare function approvalOutcomeText(request: ApprovalRequest, outcome: ApprovalDecision | "cancelled", taskAgent?: TaskAgentLookup): string;
81
+ export {};