hoomanjs 1.46.0 → 1.55.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 (340) hide show
  1. package/README.md +44 -18
  2. package/dist/acp/acp-agent.d.ts +42 -0
  3. package/dist/acp/acp-agent.js +336 -47
  4. package/dist/acp/acp-agent.js.map +1 -1
  5. package/dist/acp/approvals.js +11 -10
  6. package/dist/acp/approvals.js.map +1 -1
  7. package/dist/acp/browser.d.ts +9 -0
  8. package/dist/acp/browser.js +23 -0
  9. package/dist/acp/browser.js.map +1 -0
  10. package/dist/acp/meta/vscode.d.ts +8 -7
  11. package/dist/acp/meta/vscode.js +10 -11
  12. package/dist/acp/meta/vscode.js.map +1 -1
  13. package/dist/acp/session-config.d.ts +2 -2
  14. package/dist/acp/session-config.js +24 -20
  15. package/dist/acp/session-config.js.map +1 -1
  16. package/dist/acp/sessions/store.d.ts +3 -3
  17. package/dist/acp/utils/tool-kind.js +8 -6
  18. package/dist/acp/utils/tool-kind.js.map +1 -1
  19. package/dist/chat/app.js +91 -11
  20. package/dist/chat/app.js.map +1 -1
  21. package/dist/chat/approvals.js +3 -0
  22. package/dist/chat/approvals.js.map +1 -1
  23. package/dist/chat/components/ApprovalPrompt.js +15 -25
  24. package/dist/chat/components/ApprovalPrompt.js.map +1 -1
  25. package/dist/chat/components/BackgroundJobsPanel.d.ts +10 -0
  26. package/dist/chat/components/BackgroundJobsPanel.js +15 -0
  27. package/dist/chat/components/BackgroundJobsPanel.js.map +1 -0
  28. package/dist/chat/components/BottomChrome.d.ts +6 -1
  29. package/dist/chat/components/BottomChrome.js +3 -2
  30. package/dist/chat/components/BottomChrome.js.map +1 -1
  31. package/dist/chat/components/ChromePicker.d.ts +7 -2
  32. package/dist/chat/components/ChromePicker.js +18 -2
  33. package/dist/chat/components/ChromePicker.js.map +1 -1
  34. package/dist/chat/components/Composer.js +3 -2
  35. package/dist/chat/components/Composer.js.map +1 -1
  36. package/dist/chat/components/DownloadPanel.js +2 -1
  37. package/dist/chat/components/DownloadPanel.js.map +1 -1
  38. package/dist/chat/components/EmptyChatBanner.js +2 -1
  39. package/dist/chat/components/EmptyChatBanner.js.map +1 -1
  40. package/dist/chat/components/PromptInput.js +2 -1
  41. package/dist/chat/components/PromptInput.js.map +1 -1
  42. package/dist/chat/components/QuestionPrompt.js +5 -4
  43. package/dist/chat/components/QuestionPrompt.js.map +1 -1
  44. package/dist/chat/components/QueuedPrompts.js +3 -2
  45. package/dist/chat/components/QueuedPrompts.js.map +1 -1
  46. package/dist/chat/components/ReasoningStrip.js +2 -1
  47. package/dist/chat/components/ReasoningStrip.js.map +1 -1
  48. package/dist/chat/components/RetryEvent.js +2 -1
  49. package/dist/chat/components/RetryEvent.js.map +1 -1
  50. package/dist/chat/components/SelectPicker.js +2 -1
  51. package/dist/chat/components/SelectPicker.js.map +1 -1
  52. package/dist/chat/components/ShellToolEvent.d.ts +12 -0
  53. package/dist/chat/components/ShellToolEvent.js +94 -0
  54. package/dist/chat/components/ShellToolEvent.js.map +1 -0
  55. package/dist/chat/components/SlashCommands.js +2 -1
  56. package/dist/chat/components/SlashCommands.js.map +1 -1
  57. package/dist/chat/components/Spinner.js +2 -1
  58. package/dist/chat/components/Spinner.js.map +1 -1
  59. package/dist/chat/components/StatusBar.js +19 -15
  60. package/dist/chat/components/StatusBar.js.map +1 -1
  61. package/dist/chat/components/ThinkingStatus.js +2 -1
  62. package/dist/chat/components/ThinkingStatus.js.map +1 -1
  63. package/dist/chat/components/ThoughtEvent.js +2 -1
  64. package/dist/chat/components/ThoughtEvent.js.map +1 -1
  65. package/dist/chat/components/TodoPanel.js +2 -1
  66. package/dist/chat/components/TodoPanel.js.map +1 -1
  67. package/dist/chat/components/ToolEvent.d.ts +2 -1
  68. package/dist/chat/components/ToolEvent.js +9 -2
  69. package/dist/chat/components/ToolEvent.js.map +1 -1
  70. package/dist/chat/components/ToolEventFileResult.js +8 -7
  71. package/dist/chat/components/ToolEventFileResult.js.map +1 -1
  72. package/dist/chat/components/Transcript.d.ts +4 -2
  73. package/dist/chat/components/Transcript.js +4 -4
  74. package/dist/chat/components/Transcript.js.map +1 -1
  75. package/dist/chat/components/markdown/BlockRenderer.js +3 -2
  76. package/dist/chat/components/markdown/BlockRenderer.js.map +1 -1
  77. package/dist/chat/components/markdown/CodeBlock.js +3 -2
  78. package/dist/chat/components/markdown/CodeBlock.js.map +1 -1
  79. package/dist/chat/components/markdown/InlineRenderer.js +6 -5
  80. package/dist/chat/components/markdown/InlineRenderer.js.map +1 -1
  81. package/dist/chat/components/shared.js +7 -6
  82. package/dist/chat/components/shared.js.map +1 -1
  83. package/dist/chat/types.d.ts +7 -0
  84. package/dist/cli.js +162 -44
  85. package/dist/cli.js.map +1 -1
  86. package/dist/configure/app.js +46 -29
  87. package/dist/configure/app.js.map +1 -1
  88. package/dist/configure/components/BusyScreen.js +2 -1
  89. package/dist/configure/components/BusyScreen.js.map +1 -1
  90. package/dist/configure/components/MenuScreen.js +3 -2
  91. package/dist/configure/components/MenuScreen.js.map +1 -1
  92. package/dist/configure/components/PromptForm.js +2 -1
  93. package/dist/configure/components/PromptForm.js.map +1 -1
  94. package/dist/configure/components/SelectMenuItem.js +4 -3
  95. package/dist/configure/components/SelectMenuItem.js.map +1 -1
  96. package/dist/configure/utils.js +4 -3
  97. package/dist/configure/utils.js.map +1 -1
  98. package/dist/core/agent/default-retry-strategy.js +46 -12
  99. package/dist/core/agent/default-retry-strategy.js.map +1 -1
  100. package/dist/core/agent/gitignore-guard-plugin.js +17 -2
  101. package/dist/core/agent/gitignore-guard-plugin.js.map +1 -1
  102. package/dist/core/agent/index.js +38 -7
  103. package/dist/core/agent/index.js.map +1 -1
  104. package/dist/core/approvals/allowlist.js +1 -0
  105. package/dist/core/approvals/allowlist.js.map +1 -1
  106. package/dist/core/approvals/intervention.d.ts +10 -2
  107. package/dist/core/approvals/intervention.js +46 -8
  108. package/dist/core/approvals/intervention.js.map +1 -1
  109. package/dist/core/config.d.ts +9 -2
  110. package/dist/core/config.js +8 -4
  111. package/dist/core/config.js.map +1 -1
  112. package/dist/core/index.d.ts +2 -2
  113. package/dist/core/mcp/oauth/service.js +2 -2
  114. package/dist/core/mcp/oauth/service.js.map +1 -1
  115. package/dist/core/models/bedrock.js +6 -0
  116. package/dist/core/models/bedrock.js.map +1 -1
  117. package/dist/core/models/groq.js +34 -14
  118. package/dist/core/models/groq.js.map +1 -1
  119. package/dist/core/models/minimax.js +1 -1
  120. package/dist/core/models/minimax.js.map +1 -1
  121. package/dist/core/models/types.d.ts +10 -2
  122. package/dist/core/models/types.js +1 -0
  123. package/dist/core/models/types.js.map +1 -1
  124. package/dist/core/modes/definitions.d.ts +4 -2
  125. package/dist/core/modes/definitions.js +77 -9
  126. package/dist/core/modes/definitions.js.map +1 -1
  127. package/dist/core/modes/index.d.ts +1 -1
  128. package/dist/core/modes/index.js +1 -1
  129. package/dist/core/modes/index.js.map +1 -1
  130. package/dist/core/modes/registry.js +4 -9
  131. package/dist/core/modes/registry.js.map +1 -1
  132. package/dist/core/modes/schema.d.ts +1 -1
  133. package/dist/core/modes/schema.js +1 -1
  134. package/dist/core/modes/schema.js.map +1 -1
  135. package/dist/core/prompts/agents/{review.md → code-review.md} +2 -2
  136. package/dist/core/prompts/agents/design-review.md +35 -0
  137. package/dist/core/prompts/agents/{test-investigator.md → quality-analyst.md} +2 -2
  138. package/dist/core/prompts/modes/agent.md +2 -0
  139. package/dist/core/prompts/modes/ask.md +2 -2
  140. package/dist/core/prompts/modes/design.md +37 -0
  141. package/dist/core/prompts/modes/plan.md +5 -5
  142. package/dist/core/prompts/{runtime.js → runtime/agents.js} +2 -2
  143. package/dist/core/prompts/runtime/agents.js.map +1 -0
  144. package/dist/core/prompts/runtime/design.d.ts +11 -0
  145. package/dist/core/prompts/runtime/design.js +78 -0
  146. package/dist/core/prompts/runtime/design.js.map +1 -0
  147. package/dist/core/prompts/{session-mode-appendix.js → session-mode.js} +1 -1
  148. package/dist/core/prompts/session-mode.js.map +1 -0
  149. package/dist/core/prompts/static/ask-user.md +3 -2
  150. package/dist/core/prompts/static/fetch.md +2 -1
  151. package/dist/core/prompts/static/filesystem.md +2 -1
  152. package/dist/core/prompts/static/shell.md +21 -1
  153. package/dist/core/prompts/static/subagents.md +2 -1
  154. package/dist/core/prompts/static/switch-mode.md +10 -0
  155. package/dist/core/prompts/system.d.ts +1 -0
  156. package/dist/core/prompts/system.js +11 -3
  157. package/dist/core/prompts/system.js.map +1 -1
  158. package/dist/core/shell/index.d.ts +7 -0
  159. package/dist/core/shell/index.js +6 -0
  160. package/dist/core/shell/index.js.map +1 -0
  161. package/dist/core/shell/manager.d.ts +23 -0
  162. package/dist/core/shell/manager.js +604 -0
  163. package/dist/core/shell/manager.js.map +1 -0
  164. package/dist/core/shell/output-buffer.d.ts +30 -0
  165. package/dist/core/shell/output-buffer.js +116 -0
  166. package/dist/core/shell/output-buffer.js.map +1 -0
  167. package/dist/core/shell/registry.d.ts +5 -0
  168. package/dist/core/shell/registry.js +24 -0
  169. package/dist/core/shell/registry.js.map +1 -0
  170. package/dist/core/{tools/shell.d.ts → shell/terminal-backend.d.ts} +20 -18
  171. package/dist/core/shell/terminal-backend.js +18 -0
  172. package/dist/core/shell/terminal-backend.js.map +1 -0
  173. package/dist/core/shell/tools.d.ts +41 -0
  174. package/dist/core/{tools/shell.js → shell/tools.js} +186 -11
  175. package/dist/core/shell/tools.js.map +1 -0
  176. package/dist/core/shell/types.d.ts +95 -0
  177. package/dist/core/shell/types.js +2 -0
  178. package/dist/core/shell/types.js.map +1 -0
  179. package/dist/core/skills/built-in/hooman-config/SKILL.md +30 -35
  180. package/dist/core/skills/built-in/hooman-config/search.md +5 -3
  181. package/dist/core/skills/built-in/hooman-design/SKILL.md +97 -0
  182. package/dist/core/skills/built-in/hooman-design/assets/article-shell.html +87 -0
  183. package/dist/core/skills/built-in/hooman-design/assets/auth-shell.html +143 -0
  184. package/dist/core/skills/built-in/hooman-design/assets/business-card-shell.html +112 -0
  185. package/dist/core/skills/built-in/hooman-design/assets/contact-shell.html +181 -0
  186. package/dist/core/skills/built-in/hooman-design/assets/dashboard-shell.html +90 -0
  187. package/dist/core/skills/built-in/hooman-design/assets/data-table-shell.html +114 -0
  188. package/dist/core/skills/built-in/hooman-design/assets/deck-shell.html +187 -0
  189. package/dist/core/skills/built-in/hooman-design/assets/dialog-shell.html +98 -0
  190. package/dist/core/skills/built-in/hooman-design/assets/email-shell.html +101 -0
  191. package/dist/core/skills/built-in/hooman-design/assets/empty-state-shell.html +92 -0
  192. package/dist/core/skills/built-in/hooman-design/assets/flyer-shell.html +168 -0
  193. package/dist/core/skills/built-in/hooman-design/assets/invite-shell.html +167 -0
  194. package/dist/core/skills/built-in/hooman-design/assets/landing-shell.html +184 -0
  195. package/dist/core/skills/built-in/hooman-design/assets/mobile-frame-shell.html +109 -0
  196. package/dist/core/skills/built-in/hooman-design/assets/newsletter-shell.html +141 -0
  197. package/dist/core/skills/built-in/hooman-design/assets/onboarding-shell.html +131 -0
  198. package/dist/core/skills/built-in/hooman-design/assets/pricing-shell.html +160 -0
  199. package/dist/core/skills/built-in/hooman-design/assets/prototype-shell.html +83 -0
  200. package/dist/core/skills/built-in/hooman-design/assets/resume-shell.html +228 -0
  201. package/dist/core/skills/built-in/hooman-design/assets/settings-shell.html +196 -0
  202. package/dist/core/skills/built-in/hooman-design/assets/tokens/botanical-calm.css +34 -0
  203. package/dist/core/skills/built-in/hooman-design/assets/tokens/copper-ledger.css +34 -0
  204. package/dist/core/skills/built-in/hooman-design/assets/tokens/editorial-ink.css +34 -0
  205. package/dist/core/skills/built-in/hooman-design/assets/tokens/fintech-clear.css +34 -0
  206. package/dist/core/skills/built-in/hooman-design/assets/tokens/harbor-navy.css +35 -0
  207. package/dist/core/skills/built-in/hooman-design/assets/tokens/midnight-editorial.css +34 -0
  208. package/dist/core/skills/built-in/hooman-design/assets/tokens/night-console.css +34 -0
  209. package/dist/core/skills/built-in/hooman-design/assets/tokens/paper-mono.css +35 -0
  210. package/dist/core/skills/built-in/hooman-design/assets/tokens/signal-mono.css +34 -0
  211. package/dist/core/skills/built-in/hooman-design/assets/tokens/soft-product.css +34 -0
  212. package/dist/core/skills/built-in/hooman-design/assets/tokens/swiss-grid.css +34 -0
  213. package/dist/core/skills/built-in/hooman-design/assets/tokens/warm-atelier.css +34 -0
  214. package/dist/core/skills/built-in/hooman-design/assets/waitlist-shell.html +139 -0
  215. package/dist/core/skills/built-in/hooman-design/craft/accessibility-baseline.md +32 -0
  216. package/dist/core/skills/built-in/hooman-design/craft/anti-ai-slop.md +27 -0
  217. package/dist/core/skills/built-in/hooman-design/craft/color-surfaces.md +45 -0
  218. package/dist/core/skills/built-in/hooman-design/craft/data-viz.md +24 -0
  219. package/dist/core/skills/built-in/hooman-design/craft/deck-slides.md +46 -0
  220. package/dist/core/skills/built-in/hooman-design/craft/forms-validation.md +35 -0
  221. package/dist/core/skills/built-in/hooman-design/craft/iconography.md +19 -0
  222. package/dist/core/skills/built-in/hooman-design/craft/layout-overflow.md +31 -0
  223. package/dist/core/skills/built-in/hooman-design/craft/motion.md +41 -0
  224. package/dist/core/skills/built-in/hooman-design/craft/print.md +37 -0
  225. package/dist/core/skills/built-in/hooman-design/craft/responsive.md +30 -0
  226. package/dist/core/skills/built-in/hooman-design/craft/spacing-density.md +46 -0
  227. package/dist/core/skills/built-in/hooman-design/craft/state-coverage.md +21 -0
  228. package/dist/core/skills/built-in/hooman-design/craft/typography.md +73 -0
  229. package/dist/core/skills/built-in/hooman-design/directions.md +115 -0
  230. package/dist/core/skills/built-in/hooman-design/references/artifact-layout.md +15 -0
  231. package/dist/core/skills/built-in/hooman-design/references/export.md +47 -0
  232. package/dist/core/skills/built-in/hooman-design/references/workflow.md +80 -0
  233. package/dist/core/skills/built-in/hooman-mcp/SKILL.md +2 -2
  234. package/dist/core/state/llm-modality.d.ts +13 -0
  235. package/dist/core/state/llm-modality.js +19 -0
  236. package/dist/core/state/llm-modality.js.map +1 -0
  237. package/dist/core/state/plan.d.ts +1 -1
  238. package/dist/core/state/plan.js +1 -1
  239. package/dist/core/state/shell-jobs.d.ts +9 -0
  240. package/dist/core/state/shell-jobs.js +20 -0
  241. package/dist/core/state/shell-jobs.js.map +1 -0
  242. package/dist/core/state/tool-approvals.d.ts +12 -9
  243. package/dist/core/state/tool-approvals.js +94 -52
  244. package/dist/core/state/tool-approvals.js.map +1 -1
  245. package/dist/core/state/turn-boundaries.d.ts +33 -0
  246. package/dist/core/state/turn-boundaries.js +49 -0
  247. package/dist/core/state/turn-boundaries.js.map +1 -0
  248. package/dist/core/subagents/index.d.ts +1 -1
  249. package/dist/core/subagents/index.js +1 -1
  250. package/dist/core/subagents/registry.js +15 -6
  251. package/dist/core/subagents/registry.js.map +1 -1
  252. package/dist/core/subagents/tool.d.ts +8 -2
  253. package/dist/core/subagents/tool.js +93 -44
  254. package/dist/core/subagents/tool.js.map +1 -1
  255. package/dist/core/theme.d.ts +14 -0
  256. package/dist/core/theme.js +14 -0
  257. package/dist/core/theme.js.map +1 -0
  258. package/dist/core/tools/ask-user.d.ts +1 -1
  259. package/dist/core/tools/ask-user.js +1 -1
  260. package/dist/core/tools/export.d.ts +8 -0
  261. package/dist/core/tools/export.js +202 -0
  262. package/dist/core/tools/export.js.map +1 -0
  263. package/dist/core/tools/fetch.d.ts +2 -0
  264. package/dist/core/tools/fetch.js +92 -55
  265. package/dist/core/tools/fetch.js.map +1 -1
  266. package/dist/core/tools/filesystem.d.ts +2 -1
  267. package/dist/core/tools/filesystem.js +38 -4
  268. package/dist/core/tools/filesystem.js.map +1 -1
  269. package/dist/core/tools/index.d.ts +3 -2
  270. package/dist/core/tools/index.js +3 -2
  271. package/dist/core/tools/index.js.map +1 -1
  272. package/dist/core/tools/preview.d.ts +10 -0
  273. package/dist/core/tools/preview.js +147 -0
  274. package/dist/core/tools/preview.js.map +1 -0
  275. package/dist/core/tools/switch-mode.d.ts +6 -0
  276. package/dist/core/tools/switch-mode.js +188 -0
  277. package/dist/core/tools/switch-mode.js.map +1 -0
  278. package/dist/core/tools/web-search.js +176 -0
  279. package/dist/core/tools/web-search.js.map +1 -1
  280. package/dist/core/utils/browser.d.ts +8 -1
  281. package/dist/core/utils/browser.js +17 -1
  282. package/dist/core/utils/browser.js.map +1 -1
  283. package/dist/core/utils/export-design.d.ts +40 -0
  284. package/dist/core/utils/export-design.js +188 -0
  285. package/dist/core/utils/export-design.js.map +1 -0
  286. package/dist/core/utils/export-figma.d.ts +17 -0
  287. package/dist/core/utils/export-figma.js +189 -0
  288. package/dist/core/utils/export-figma.js.map +1 -0
  289. package/dist/core/utils/export-sketch.d.ts +11 -0
  290. package/dist/core/utils/export-sketch.js +456 -0
  291. package/dist/core/utils/export-sketch.js.map +1 -0
  292. package/dist/core/utils/fig-archive.d.ts +47 -0
  293. package/dist/core/utils/fig-archive.js +181 -0
  294. package/dist/core/utils/fig-archive.js.map +1 -0
  295. package/dist/core/utils/metadata.d.ts +30 -0
  296. package/dist/core/utils/metadata.js +122 -0
  297. package/dist/core/utils/metadata.js.map +1 -1
  298. package/dist/core/utils/models-prefetch.d.ts +53 -0
  299. package/dist/core/utils/models-prefetch.js +469 -0
  300. package/dist/core/utils/models-prefetch.js.map +1 -0
  301. package/dist/core/utils/onboarding-config.d.ts +48 -0
  302. package/dist/core/utils/onboarding-config.js +373 -0
  303. package/dist/core/utils/onboarding-config.js.map +1 -0
  304. package/dist/core/utils/paths.d.ts +9 -7
  305. package/dist/core/utils/paths.js +12 -10
  306. package/dist/core/utils/paths.js.map +1 -1
  307. package/dist/core/utils/preview-server.d.ts +20 -0
  308. package/dist/core/utils/preview-server.js +212 -0
  309. package/dist/core/utils/preview-server.js.map +1 -0
  310. package/dist/core/utils/search-probe.d.ts +19 -0
  311. package/dist/core/utils/search-probe.js +165 -0
  312. package/dist/core/utils/search-probe.js.map +1 -0
  313. package/dist/core/utils/seeds/empty-slides.deck +0 -0
  314. package/dist/core/utils/url-safety.d.ts +2 -0
  315. package/dist/core/utils/url-safety.js +47 -0
  316. package/dist/core/utils/url-safety.js.map +1 -0
  317. package/dist/core/utils/zstd.d.ts +6 -0
  318. package/dist/core/utils/zstd.js +39 -0
  319. package/dist/core/utils/zstd.js.map +1 -0
  320. package/dist/exec/approvals.js +5 -5
  321. package/dist/exec/approvals.js.map +1 -1
  322. package/dist/index.d.ts +11 -5
  323. package/dist/index.js +8 -5
  324. package/dist/index.js.map +1 -1
  325. package/dist/onboarding/app.d.ts +5 -0
  326. package/dist/onboarding/app.js +255 -0
  327. package/dist/onboarding/app.js.map +1 -0
  328. package/dist/onboarding/index.d.ts +5 -0
  329. package/dist/onboarding/index.js +27 -0
  330. package/dist/onboarding/index.js.map +1 -0
  331. package/package.json +16 -3
  332. package/dist/core/prompts/runtime.js.map +0 -1
  333. package/dist/core/prompts/session-mode-appendix.js.map +0 -1
  334. package/dist/core/prompts/static/planning.md +0 -3
  335. package/dist/core/tools/plan.d.ts +0 -5
  336. package/dist/core/tools/plan.js +0 -150
  337. package/dist/core/tools/plan.js.map +0 -1
  338. package/dist/core/tools/shell.js.map +0 -1
  339. /package/dist/core/prompts/{runtime.d.ts → runtime/agents.d.ts} +0 -0
  340. /package/dist/core/prompts/{session-mode-appendix.d.ts → session-mode.d.ts} +0 -0
@@ -1,14 +1,18 @@
1
- import { getModeTools } from "../modes/definitions.js";
1
+ import { getModeTools, isModeListedTool } from "../modes/definitions.js";
2
+ import { builtInSkillsPath } from "../skills/plugin.js";
2
3
  import { getModeState } from "./session-mode.js";
3
4
  import { isResolvedPathInsideDir, normalizeUserPath, } from "../utils/normalize-user-path.js";
4
5
  import { getCwd } from "../utils/cwd-context.js";
5
- import { attachmentsPath, plansPath } from "../utils/paths.js";
6
+ import { attachmentsPath, designArtifactsPath, plansPath, } from "../utils/paths.js";
7
+ import { EXPORT_DESIGN_TOOL_NAME } from "../tools/export.js";
8
+ import { PREVIEW_DESIGN_TOOL_NAME, STOP_DESIGN_PREVIEW_TOOL_NAME, } from "../tools/preview.js";
6
9
  const READ_FILE_TOOL = "read_file";
7
10
  const READ_MULTIPLE_FILES_TOOL = "read_multiple_files";
8
11
  const WRITE_FILE_TOOL = "write_file";
9
12
  const EDIT_FILE_TOOL = "edit_file";
10
- export const ENTER_PLAN_MODE_TOOL = "enter_plan_mode";
11
- export const EXIT_PLAN_MODE_TOOL = "exit_plan_mode";
13
+ const FETCH_TOOL = "fetch";
14
+ /** Session mode switch; always requires explicit approval (never yolo / always-allow). */
15
+ export const SWITCH_MODE_TOOL = "switch_mode";
12
16
  const ASK_USER_TOOL = "ask_user";
13
17
  const SEARCH_TOOLS_TOOL = "search_tools";
14
18
  const ACTIVATE_TOOLS_TOOL = "activate_tools";
@@ -23,11 +27,12 @@ export const INTERNAL_ALWAYS_ALLOWED = new Set([
23
27
  // Thinking
24
28
  "think",
25
29
  // Subagents (read-only)
26
- "subagent_research",
27
- "subagent_review",
28
- "subagent_test_investigator",
30
+ "launch_subagent",
29
31
  // Sleep
30
32
  "sleep",
33
+ // Background shell job management (safe to use in any mode once a job exists)
34
+ "shell_output",
35
+ "shell_stop",
31
36
  // Asking the user a question IS the interaction — no separate approval gate.
32
37
  ASK_USER_TOOL,
33
38
  SEARCH_TOOLS_TOOL,
@@ -40,64 +45,86 @@ export const INTERNAL_ALWAYS_ALLOWED = new Set([
40
45
  "get_file_info",
41
46
  "list_directory",
42
47
  "grep",
43
- // Planning session: entering is safe and auto-allowed. Exiting is a proposal
44
- // to leave planning and move toward implementation, so it flows through the
45
- // approval prompt where the user can approve or decline (and keep refining).
46
- ENTER_PLAN_MODE_TOOL,
48
+ // switch_mode is intentionally NOT always-allowed see intervention.ts.
47
49
  ]);
48
- function isPlainObjectRecord(value) {
49
- return typeof value === "object" && value !== null && !Array.isArray(value);
50
+ const PLAN_MODE_WRITE_EDIT_TOOLS = [WRITE_FILE_TOOL, EDIT_FILE_TOOL];
51
+ function toolInputPath(toolInput) {
52
+ if (!toolInput || typeof toolInput !== "object") {
53
+ return "";
54
+ }
55
+ const path = toolInput.path;
56
+ return typeof path === "string" ? path.trim() : "";
57
+ }
58
+ function toolInputSaveAs(toolInput) {
59
+ if (!toolInput || typeof toolInput !== "object") {
60
+ return "";
61
+ }
62
+ const saveAs = toolInput.save_as;
63
+ return typeof saveAs === "string" ? saveAs.trim() : "";
50
64
  }
51
65
  /**
52
- * In session mode `plan`, block `write_file` / `edit_file` unless the target path resolves
53
- * under the app plans directory. Runs before any “always allow” grant so plan boundaries
54
- * cannot be overridden by tooling preferences.
66
+ * In plan mode, reject `write_file` / `edit_file` unless the destination path
67
+ * is under the plans directory, and reject `fetch` with `save_as` entirely.
68
+ * Runs before any “always allow” grant.
55
69
  */
56
70
  export function planModeWriteEditRejectionMessage(agent, toolName, toolInput) {
57
71
  if (getModeState(agent).mode !== "plan") {
58
72
  return null;
59
73
  }
60
- if (toolName !== WRITE_FILE_TOOL && toolName !== EDIT_FILE_TOOL) {
61
- return null;
62
- }
63
- const plansRoot = plansPath();
64
- if (!isPlainObjectRecord(toolInput)) {
65
- return `In plan mode, "${toolName}" only applies to files under the plans directory (${plansRoot}).`;
74
+ if (PLAN_MODE_WRITE_EDIT_TOOLS.includes(toolName)) {
75
+ const plansRoot = plansPath();
76
+ const raw = toolInputPath(toolInput);
77
+ if (raw && isResolvedPathInsideDir(normalizeUserPath(raw), plansRoot)) {
78
+ return null;
79
+ }
80
+ return `In plan mode, "${toolName}" was rejected automatically: path must be under the plans directory (${plansRoot}).`;
66
81
  }
67
- const raw = toolInput.path;
68
- if (typeof raw !== "string" || !raw.trim()) {
69
- return `In plan mode, "${toolName}" requires a path under the plans directory (${plansRoot}).`;
82
+ if (toolName === FETCH_TOOL && toolInputSaveAs(toolInput)) {
83
+ return `In plan mode, "${toolName}" with save_as was rejected automatically: downloading files is not allowed.`;
70
84
  }
71
- const resolved = normalizeUserPath(raw.trim());
72
- if (isResolvedPathInsideDir(resolved, plansRoot)) {
73
- return null;
85
+ return null;
86
+ }
87
+ const DESIGN_ARTIFACT_IMPLICIT_TOOLS = [
88
+ PREVIEW_DESIGN_TOOL_NAME,
89
+ STOP_DESIGN_PREVIEW_TOOL_NAME,
90
+ EXPORT_DESIGN_TOOL_NAME,
91
+ ];
92
+ function isDesignToolImplicitlyAllowed(toolName, toolInput) {
93
+ if (!DESIGN_ARTIFACT_IMPLICIT_TOOLS.includes(toolName)) {
94
+ return false;
74
95
  }
75
- return `In plan mode, "${toolName}" was rejected automatically: path must be under the plans directory (${plansRoot}).`;
96
+ const raw = toolInputPath(toolInput);
97
+ return (Boolean(raw) &&
98
+ isResolvedPathInsideDir(normalizeUserPath(raw), designArtifactsPath()));
76
99
  }
77
100
  /**
78
101
  * Skip approval for filesystem tools when targets stay inside trusted roots.
79
102
  * In ask/plan mode, read_file/read_multiple_files are also auto-allowed under
80
103
  * the session cwd so the narrowed surfaces can inspect the workspace without
81
- * repeated approval prompts.
104
+ * repeated approval prompts. Built-in skill assets are readable in every mode.
82
105
  */
83
106
  function isImplicitPathAllowed(toolName, toolInput, mode) {
84
107
  const attachments = attachmentsPath();
85
108
  const plans = plansPath();
86
- const readRoots = [attachments, plans];
87
- if (mode === "ask" || mode === "plan") {
109
+ const readRoots = [attachments, plans, builtInSkillsPath()];
110
+ if (mode === "ask" || mode === "plan" || mode === "design") {
88
111
  readRoots.push(getCwd());
89
112
  }
90
113
  if (toolName === READ_FILE_TOOL) {
91
- const raw = toolInput.path;
92
- if (typeof raw !== "string" || !raw.trim()) {
114
+ const raw = toolInputPath(toolInput);
115
+ if (!raw) {
93
116
  return false;
94
117
  }
95
118
  const resolved = normalizeUserPath(raw);
96
119
  return readRoots.some((root) => isResolvedPathInsideDir(resolved, root));
97
120
  }
98
121
  if (toolName === READ_MULTIPLE_FILES_TOOL) {
99
- const paths = toolInput.paths;
100
- if (!Array.isArray(paths) || paths.length === 0) {
122
+ const paths = toolInput &&
123
+ typeof toolInput === "object" &&
124
+ Array.isArray(toolInput.paths)
125
+ ? toolInput.paths
126
+ : null;
127
+ if (!paths || paths.length === 0) {
101
128
  return false;
102
129
  }
103
130
  for (const item of paths) {
@@ -113,37 +140,52 @@ function isImplicitPathAllowed(toolName, toolInput, mode) {
113
140
  return true;
114
141
  }
115
142
  if (toolName === WRITE_FILE_TOOL || toolName === EDIT_FILE_TOOL) {
116
- const raw = toolInput.path;
117
- if (typeof raw !== "string" || !raw.trim()) {
143
+ const raw = toolInputPath(toolInput);
144
+ if (!raw) {
118
145
  return false;
119
146
  }
120
147
  const resolved = normalizeUserPath(raw);
121
- return isResolvedPathInsideDir(resolved, plans);
148
+ if (isResolvedPathInsideDir(resolved, plans)) {
149
+ return true;
150
+ }
151
+ // Design mode: artifact writes under `.hooman/design/` are the whole point.
152
+ if (mode === "design" &&
153
+ isResolvedPathInsideDir(resolved, designArtifactsPath())) {
154
+ return true;
155
+ }
156
+ return false;
122
157
  }
123
158
  return false;
124
159
  }
125
160
  /**
126
161
  * Implicit, always-on allow for filesystem tools whose targets stay inside
127
- * trusted roots: reads under attachments or plans in every mode, plus reads
128
- * under the session cwd in ask/plan mode; writes/edits remain limited to the
129
- * plans directory. Persistent "always allow" grants are handled separately by
130
- * the on-disk {@link Allowlist} (see `../approvals/allowlist.ts`).
162
+ * trusted roots: reads under attachments, plans, or bundled skills in every
163
+ * mode, plus reads under the session cwd in ask/plan/design; writes/edits under
164
+ * the plans directory in every mode, and under `.hooman/design/` in design mode.
165
+ * Design tools (`preview_design`, `stop_design_preview`, `export_design`) are
166
+ * also auto-allowed when `path` is under `.hooman/design/`. Persistent "always
167
+ * allow" grants are handled separately by the on-disk {@link Allowlist}
168
+ * (see `../approvals/allowlist.ts`).
131
169
  */
132
170
  export function isImplicitlyAllowed(toolName, toolInput, mode) {
133
- return (isPlainObjectRecord(toolInput) &&
171
+ return (isDesignToolImplicitlyAllowed(toolName, toolInput) ||
134
172
  isImplicitPathAllowed(toolName, toolInput, mode));
135
173
  }
136
174
  export function isToolVisible(mode, toolName, options) {
137
- const readOnlyHinted = options?.mcpReadOnlyHint === true;
138
- if (mode === "agent") {
175
+ const visibleTools = getModeTools(mode);
176
+ if (!visibleTools) {
177
+ return false;
178
+ }
179
+ if (visibleTools.includes(toolName)) {
139
180
  return true;
140
181
  }
141
- const visibleTools = getModeTools(mode);
142
- if (visibleTools) {
143
- if (readOnlyHinted) {
144
- return true;
145
- }
146
- return visibleTools.includes(toolName);
182
+ // Read-only MCP tools stay available in every mode.
183
+ if (options?.mcpReadOnlyHint === true) {
184
+ return true;
185
+ }
186
+ // Dynamic / MCP tools (not on any mode allowlist) remain available in agent.
187
+ if (mode === "agent" && !isModeListedTool(toolName)) {
188
+ return true;
147
189
  }
148
190
  return false;
149
191
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tool-approvals.js","sourceRoot":"","sources":["../../../src/core/state/tool-approvals.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-approvals.js","sourceRoot":"","sources":["../../../src/core/state/tool-approvals.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Per-turn message-index bookmarks, keyed by the ACP `messageId` the agent
3
+ * generates for that turn's user message.
4
+ *
5
+ * Per the ACP MessageId RFD, only the Agent generates protocol message ids —
6
+ * a client never mints its own. Clients that support turn "revert"
7
+ * capture the `messageId`
8
+ * from the turn's `user_message_chunk` echo and pass it back via the custom
9
+ * `_hoomanjs/rewind_session` method. We record `agent.messages.length` right
10
+ * before the turn's messages are appended, so a later rewind can splice
11
+ * history back to exactly that point. Stored on `appState` (persisted with
12
+ * the snapshot) so it survives across turns within a session; entries are
13
+ * dropped once their turn (or a later one) is rewound.
14
+ */
15
+ export declare const TURN_BOUNDARIES_STATE_KEY = "hooman.turnBoundaries";
16
+ type AppStateLike = {
17
+ get<T = unknown>(key: string): T;
18
+ set(key: string, value: unknown): void;
19
+ };
20
+ type AgentLike = {
21
+ appState: AppStateLike;
22
+ };
23
+ /** Record the message-index boundary for a turn about to start. */
24
+ export declare function recordTurnBoundary(agent: AgentLike, messageId: string, messageIndex: number): void;
25
+ /** Message-index boundary for `messageId`, or `undefined` if unknown (e.g. replayed history). */
26
+ export declare function getTurnBoundary(agent: AgentLike, messageId: string): number | undefined;
27
+ /**
28
+ * Drop the boundary for `messageId` and every turn recorded after it (their
29
+ * messages are being spliced away by the rewind, so their bookmarks are no
30
+ * longer meaningful).
31
+ */
32
+ export declare function dropTurnBoundariesFrom(agent: AgentLike, messageId: string): void;
33
+ export {};
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Per-turn message-index bookmarks, keyed by the ACP `messageId` the agent
3
+ * generates for that turn's user message.
4
+ *
5
+ * Per the ACP MessageId RFD, only the Agent generates protocol message ids —
6
+ * a client never mints its own. Clients that support turn "revert"
7
+ * capture the `messageId`
8
+ * from the turn's `user_message_chunk` echo and pass it back via the custom
9
+ * `_hoomanjs/rewind_session` method. We record `agent.messages.length` right
10
+ * before the turn's messages are appended, so a later rewind can splice
11
+ * history back to exactly that point. Stored on `appState` (persisted with
12
+ * the snapshot) so it survives across turns within a session; entries are
13
+ * dropped once their turn (or a later one) is rewound.
14
+ */
15
+ export const TURN_BOUNDARIES_STATE_KEY = "hooman.turnBoundaries";
16
+ function readTurnBoundaries(agent) {
17
+ const raw = agent.appState.get(TURN_BOUNDARIES_STATE_KEY);
18
+ return raw && typeof raw === "object" ? raw : {};
19
+ }
20
+ /** Record the message-index boundary for a turn about to start. */
21
+ export function recordTurnBoundary(agent, messageId, messageIndex) {
22
+ const boundaries = readTurnBoundaries(agent);
23
+ boundaries[messageId] = messageIndex;
24
+ agent.appState.set(TURN_BOUNDARIES_STATE_KEY, boundaries);
25
+ }
26
+ /** Message-index boundary for `messageId`, or `undefined` if unknown (e.g. replayed history). */
27
+ export function getTurnBoundary(agent, messageId) {
28
+ return readTurnBoundaries(agent)[messageId];
29
+ }
30
+ /**
31
+ * Drop the boundary for `messageId` and every turn recorded after it (their
32
+ * messages are being spliced away by the rewind, so their bookmarks are no
33
+ * longer meaningful).
34
+ */
35
+ export function dropTurnBoundariesFrom(agent, messageId) {
36
+ const boundaries = readTurnBoundaries(agent);
37
+ const cutoff = boundaries[messageId];
38
+ if (cutoff === undefined) {
39
+ return;
40
+ }
41
+ const next = {};
42
+ for (const [id, index] of Object.entries(boundaries)) {
43
+ if (index < cutoff) {
44
+ next[id] = index;
45
+ }
46
+ }
47
+ agent.appState.set(TURN_BOUNDARIES_STATE_KEY, next);
48
+ }
49
+ //# sourceMappingURL=turn-boundaries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turn-boundaries.js","sourceRoot":"","sources":["../../../src/core/state/turn-boundaries.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,uBAAuB,CAAC;AAajE,SAAS,kBAAkB,CAAC,KAAgB;IAC1C,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAC5B,yBAAyB,CAC1B,CAAC;IACF,OAAO,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AACnD,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,kBAAkB,CAChC,KAAgB,EAChB,SAAiB,EACjB,YAAoB;IAEpB,MAAM,UAAU,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC7C,UAAU,CAAC,SAAS,CAAC,GAAG,YAAY,CAAC;IACrC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,yBAAyB,EAAE,UAAU,CAAC,CAAC;AAC5D,CAAC;AAED,iGAAiG;AACjG,MAAM,UAAU,eAAe,CAC7B,KAAgB,EAChB,SAAiB;IAEjB,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC;AAC9C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CACpC,KAAgB,EAChB,SAAiB;IAEjB,MAAM,UAAU,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IACrC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO;IACT,CAAC;IACD,MAAM,IAAI,GAAmB,EAAE,CAAC;IAChC,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACrD,IAAI,KAAK,GAAG,MAAM,EAAE,CAAC;YACnB,IAAI,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;QACnB,CAAC;IACH,CAAC;IACD,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,yBAAyB,EAAE,IAAI,CAAC,CAAC;AACtD,CAAC"}
@@ -1,2 +1,2 @@
1
1
  export { createSubagentRegistry, type SubagentKindConfig, type SubagentKindDefinition, type SubagentRegistry, } from "./registry.js";
2
- export { SUBAGENT_TOOL_NAME_PREFIX, createSubagentTools } from "./tool.js";
2
+ export { LAUNCH_SUBAGENT_TOOL_NAME, createSubagentTools } from "./tool.js";
@@ -1,3 +1,3 @@
1
1
  export { createSubagentRegistry, } from "./registry.js";
2
- export { SUBAGENT_TOOL_NAME_PREFIX, createSubagentTools } from "./tool.js";
2
+ export { LAUNCH_SUBAGENT_TOOL_NAME, createSubagentTools } from "./tool.js";
3
3
  //# sourceMappingURL=index.js.map
@@ -25,23 +25,32 @@ const BUILTIN_SUBAGENT_KINDS = [
25
25
  inheritBasePrompt: true,
26
26
  },
27
27
  {
28
- id: "review",
29
- name: "Review",
30
- promptPath: "agents/review.md",
28
+ id: "code-review",
29
+ name: "Code Review",
30
+ promptPath: "agents/code-review.md",
31
31
  description: "reviews code, changes, and plans for risks and regressions",
32
32
  allowedTools: DEFAULT_ALLOWED_TOOLS,
33
33
  readOnly: true,
34
34
  inheritBasePrompt: true,
35
35
  },
36
36
  {
37
- id: "test-investigator",
38
- name: "Test Investigator",
39
- promptPath: "agents/test-investigator.md",
37
+ id: "quality-analyst",
38
+ name: "Quality Analyst",
39
+ promptPath: "agents/quality-analyst.md",
40
40
  description: "investigates test/build behaviors and likely failure causes",
41
41
  allowedTools: DEFAULT_ALLOWED_TOOLS,
42
42
  readOnly: true,
43
43
  inheritBasePrompt: true,
44
44
  },
45
+ {
46
+ id: "design-review",
47
+ name: "Design Review",
48
+ promptPath: "agents/design-review.md",
49
+ description: "reviews HTML design artifacts (and screenshots) against DESIGN.md and craft rules",
50
+ allowedTools: DEFAULT_ALLOWED_TOOLS,
51
+ readOnly: true,
52
+ inheritBasePrompt: true,
53
+ },
45
54
  ];
46
55
  function promptContext(config) {
47
56
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/core/subagents/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/core/subagents/registry.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,18 @@
1
1
  import { type Tool } from "@strands-agents/sdk";
2
2
  import type { BaseModelConfig, Model } from "@strands-agents/sdk";
3
+ import type { ResolvedLlmInputModality } from "../utils/model-metadata.js";
3
4
  import { type SubagentRegistry } from "./registry.js";
4
- export declare const SUBAGENT_TOOL_NAME_PREFIX = "subagent_";
5
+ export declare const LAUNCH_SUBAGENT_TOOL_NAME = "launch_subagent";
5
6
  type CreateSubagentToolsOptions = {
6
7
  parent: string;
7
8
  registry: SubagentRegistry;
8
9
  tools: readonly Tool[];
9
- createModel: () => Model<BaseModelConfig>;
10
+ /** Configured LLM names (`config.llms[].name`) offered as the optional `model` arg. */
11
+ modelNames: readonly string[];
12
+ /** Create a model; omit `name` to use the session's current model. */
13
+ createModel: (name?: string) => Model<BaseModelConfig>;
14
+ /** Resolve input modality for a named (or current) model. */
15
+ resolveModality: (name?: string) => Promise<ResolvedLlmInputModality | null | undefined>;
10
16
  };
11
17
  export declare function createSubagentTools(options: CreateSubagentToolsOptions): Tool[];
12
18
  export {};
@@ -1,7 +1,8 @@
1
1
  import { Agent, tool } from "@strands-agents/sdk";
2
2
  import { z } from "zod";
3
- export const SUBAGENT_TOOL_NAME_PREFIX = "subagent_";
4
- const SubagentInvokeInputSchema = z.object({
3
+ import { getLlmModality, LLM_MODALITY_STATE_KEY, setLlmModality, } from "../state/llm-modality.js";
4
+ export const LAUNCH_SUBAGENT_TOOL_NAME = "launch_subagent";
5
+ const LaunchSubagentBaseSchema = z.object({
5
6
  query: z.string().trim().min(1),
6
7
  });
7
8
  function readAppStateString(context, key) {
@@ -22,9 +23,6 @@ function extractText(response) {
22
23
  .join("")
23
24
  .trim();
24
25
  }
25
- function subagentToolName(kindId) {
26
- return `${SUBAGENT_TOOL_NAME_PREFIX}${kindId.replace(/-/g, "_")}`;
27
- }
28
26
  function selectTools(kind, tools) {
29
27
  const byName = new Map();
30
28
  for (const tool of tools) {
@@ -40,45 +38,96 @@ function selectTools(kind, tools) {
40
38
  }
41
39
  return selected;
42
40
  }
41
+ function asNonEmptyEnum(values) {
42
+ if (values.length === 0) {
43
+ throw new Error("Expected at least one value for enum schema.");
44
+ }
45
+ return values;
46
+ }
47
+ function buildInputSchema(kindIds, modelNames) {
48
+ const kind = z
49
+ .enum(asNonEmptyEnum(kindIds))
50
+ .describe("Subagent specialist to launch.");
51
+ if (modelNames.length === 0) {
52
+ return LaunchSubagentBaseSchema.extend({ kind });
53
+ }
54
+ return LaunchSubagentBaseSchema.extend({
55
+ kind,
56
+ model: z
57
+ .enum(asNonEmptyEnum(modelNames))
58
+ .optional()
59
+ .describe("Optional configured model name. When omitted, uses the current session model."),
60
+ });
61
+ }
62
+ function kindCatalog(registry) {
63
+ return registry.kinds
64
+ .map((kind) => `- ${kind.id}: ${kind.description}`)
65
+ .join("\n");
66
+ }
43
67
  export function createSubagentTools(options) {
44
- const baseTools = options.tools.filter((entry) => !entry.name.startsWith(SUBAGENT_TOOL_NAME_PREFIX));
45
- return options.registry.kinds.map((kind) => tool({
46
- name: subagentToolName(kind.id),
47
- description: `Delegate a focused ${kind.name} task to a specialized read-only subagent.`,
48
- inputSchema: SubagentInvokeInputSchema,
49
- callback: async (input, context) => {
50
- if (!context) {
51
- throw new Error(`Subagent '${kind.id}' requires execution context.`);
52
- }
53
- try {
54
- const child = new Agent({
55
- name: `${options.parent}-${kind.id}`,
56
- systemPrompt: kind.instructions,
57
- model: options.createModel(),
58
- appState: {
59
- ...(readAppStateString(context, "userId")
60
- ? { userId: readAppStateString(context, "userId") }
61
- : {}),
62
- ...(readAppStateString(context, "sessionId")
63
- ? { sessionId: readAppStateString(context, "sessionId") }
64
- : {}),
65
- "hooman.subagentKind": kind.id,
66
- },
67
- tools: [...selectTools(kind, baseTools)],
68
- printer: false,
69
- });
70
- const response = context.agent.cancelSignal
71
- ? await child.invoke(input.query, {
72
- cancelSignal: context.agent.cancelSignal,
73
- })
74
- : await child.invoke(input.query);
75
- return extractText(response);
76
- }
77
- catch (error) {
78
- const detail = error instanceof Error ? error.message : String(error);
79
- return `Subagent '${kind.id}' failed: ${detail}`;
80
- }
81
- },
82
- }));
68
+ const kindIds = options.registry.kinds.map((kind) => kind.id);
69
+ if (kindIds.length === 0) {
70
+ return [];
71
+ }
72
+ const baseTools = options.tools.filter((entry) => entry.name !== LAUNCH_SUBAGENT_TOOL_NAME);
73
+ const inputSchema = buildInputSchema(kindIds, options.modelNames);
74
+ const description = [
75
+ "Delegate a focused task to a specialized read-only subagent.",
76
+ "Pass `kind` to select the specialist; optionally pass `model` (a configured LLM name) to override the current session model.",
77
+ "For design-review: pass every reviews/*.png path in the query and require binary reads — do not skip after export_design format:images.",
78
+ "Kinds:",
79
+ kindCatalog(options.registry),
80
+ ].join("\n");
81
+ return [
82
+ tool({
83
+ name: LAUNCH_SUBAGENT_TOOL_NAME,
84
+ description,
85
+ inputSchema,
86
+ callback: async (input, context) => {
87
+ if (!context) {
88
+ throw new Error(`${LAUNCH_SUBAGENT_TOOL_NAME} requires execution context.`);
89
+ }
90
+ const kind = options.registry.byId.get(input.kind);
91
+ if (!kind) {
92
+ return `Unknown subagent kind '${input.kind}'.`;
93
+ }
94
+ try {
95
+ const modelName = input.model?.trim() || undefined;
96
+ const modality = (await options.resolveModality(modelName)) ??
97
+ (modelName ? null : getLlmModality(context.agent));
98
+ const child = new Agent({
99
+ name: `${options.parent}-${kind.id}`,
100
+ systemPrompt: kind.instructions,
101
+ model: options.createModel(modelName),
102
+ appState: {
103
+ ...(readAppStateString(context, "userId")
104
+ ? { userId: readAppStateString(context, "userId") }
105
+ : {}),
106
+ ...(readAppStateString(context, "sessionId")
107
+ ? { sessionId: readAppStateString(context, "sessionId") }
108
+ : {}),
109
+ "hooman.subagentKind": kind.id,
110
+ ...(modality ? { [LLM_MODALITY_STATE_KEY]: modality } : {}),
111
+ },
112
+ tools: [...selectTools(kind, baseTools)],
113
+ printer: false,
114
+ });
115
+ if (modality) {
116
+ setLlmModality(child, modality);
117
+ }
118
+ const response = context.agent.cancelSignal
119
+ ? await child.invoke(input.query, {
120
+ cancelSignal: context.agent.cancelSignal,
121
+ })
122
+ : await child.invoke(input.query);
123
+ return extractText(response);
124
+ }
125
+ catch (error) {
126
+ const detail = error instanceof Error ? error.message : String(error);
127
+ return `Subagent '${kind.id}' failed: ${detail}`;
128
+ }
129
+ },
130
+ }),
131
+ ];
83
132
  }
84
133
  //# sourceMappingURL=tool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool.js","sourceRoot":"","sources":["../../../src/core/subagents/tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool.js","sourceRoot":"","sources":["../../../src/core/subagents/tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Shared brand palette for CLI Ink surfaces (and any other non-webview UI).
3
+ * VS Code webviews mirror these values in `src/vscode/webview/index.css`.
4
+ */
5
+ export declare const theme: {
6
+ readonly primary: "#0091cd";
7
+ readonly secondary: "#56a0d3";
8
+ readonly warning: "#ecb731";
9
+ readonly error: "#ee4c58";
10
+ readonly success: "#8ec06c";
11
+ readonly info: "#c4dff6";
12
+ readonly muted: "#9ba5a8";
13
+ };
14
+ export type ThemeColor = (typeof theme)[keyof typeof theme];