@prestyj/cli 5.4.1 → 5.6.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 (325) hide show
  1. package/README.md +25 -12
  2. package/assets/end-notification.mp3 +0 -0
  3. package/assets/skills/evidence-led-ui/LICENSES.md +68 -0
  4. package/assets/skills/evidence-led-ui/SKILL.md +139 -0
  5. package/{LICENSE → assets/skills/evidence-led-ui/corpus/awesome-design-md/LICENSE} +1 -1
  6. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/airbnb/DESIGN.md +545 -0
  7. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/airtable/DESIGN.md +554 -0
  8. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/apple/DESIGN.md +562 -0
  9. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/binance/DESIGN.md +634 -0
  10. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/bmw/DESIGN.md +544 -0
  11. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/bmw-m/DESIGN.md +503 -0
  12. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/bugatti/DESIGN.md +454 -0
  13. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/cal/DESIGN.md +542 -0
  14. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/claude/DESIGN.md +589 -0
  15. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/clay/DESIGN.md +541 -0
  16. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/clickhouse/DESIGN.md +544 -0
  17. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/cohere/DESIGN.md +451 -0
  18. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/coinbase/DESIGN.md +570 -0
  19. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/composio/DESIGN.md +506 -0
  20. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/cursor/DESIGN.md +537 -0
  21. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/dell-1996/DESIGN.md +632 -0
  22. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/elevenlabs/DESIGN.md +504 -0
  23. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/expo/DESIGN.md +526 -0
  24. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/ferrari/DESIGN.md +531 -0
  25. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/figma/DESIGN.md +578 -0
  26. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/framer/DESIGN.md +544 -0
  27. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/hashicorp/DESIGN.md +575 -0
  28. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/hp/DESIGN.md +670 -0
  29. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/ibm/DESIGN.md +550 -0
  30. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/intercom/DESIGN.md +546 -0
  31. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/kraken/DESIGN.md +125 -0
  32. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/lamborghini/DESIGN.md +288 -0
  33. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/linear.app/DESIGN.md +548 -0
  34. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/lovable/DESIGN.md +298 -0
  35. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/mastercard/DESIGN.md +365 -0
  36. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/meta/DESIGN.md +683 -0
  37. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/minimax/DESIGN.md +746 -0
  38. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/mintlify/DESIGN.md +852 -0
  39. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/miro/DESIGN.md +825 -0
  40. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/mistral.ai/DESIGN.md +773 -0
  41. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/mongodb/DESIGN.md +767 -0
  42. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/nike/DESIGN.md +575 -0
  43. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/nintendo-2001/DESIGN.md +649 -0
  44. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/notion/DESIGN.md +821 -0
  45. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/nvidia/DESIGN.md +640 -0
  46. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/ollama/DESIGN.md +539 -0
  47. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/opencode.ai/DESIGN.md +521 -0
  48. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/pinterest/DESIGN.md +597 -0
  49. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/playstation/DESIGN.md +661 -0
  50. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/posthog/DESIGN.md +690 -0
  51. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/raycast/DESIGN.md +669 -0
  52. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/renault/DESIGN.md +589 -0
  53. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/replicate/DESIGN.md +616 -0
  54. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/resend/DESIGN.md +585 -0
  55. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/revolut/DESIGN.md +636 -0
  56. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/runwayml/DESIGN.md +244 -0
  57. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/sanity/DESIGN.md +357 -0
  58. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/sentry/DESIGN.md +551 -0
  59. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/shopify/DESIGN.md +516 -0
  60. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/slack/DESIGN.md +482 -0
  61. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/spacex/DESIGN.md +363 -0
  62. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/spotify/DESIGN.md +246 -0
  63. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/starbucks/DESIGN.md +580 -0
  64. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/stripe/DESIGN.md +487 -0
  65. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/supabase/DESIGN.md +462 -0
  66. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/superhuman/DESIGN.md +448 -0
  67. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/tesla/DESIGN.md +286 -0
  68. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/theverge/DESIGN.md +339 -0
  69. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/together.ai/DESIGN.md +633 -0
  70. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/uber/DESIGN.md +636 -0
  71. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/vercel/DESIGN.md +736 -0
  72. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/vodafone/DESIGN.md +538 -0
  73. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/voltagent/DESIGN.md +521 -0
  74. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/warp/DESIGN.md +526 -0
  75. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/webflow/DESIGN.md +588 -0
  76. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/wired/DESIGN.md +497 -0
  77. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/wise/DESIGN.md +544 -0
  78. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/x.ai/DESIGN.md +465 -0
  79. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/zapier/DESIGN.md +537 -0
  80. package/assets/skills/evidence-led-ui/data/corpus-manifest.json +768 -0
  81. package/assets/skills/evidence-led-ui/data/observations.json +47053 -0
  82. package/assets/skills/evidence-led-ui/references/anti-defaults.md +203 -0
  83. package/assets/skills/evidence-led-ui/references/archetypes.md +97 -0
  84. package/assets/skills/evidence-led-ui/references/craft-rulings.md +167 -0
  85. package/assets/skills/evidence-led-ui/references/methodology.md +72 -0
  86. package/assets/skills/evidence-led-ui/references/observed-patterns.md +68 -0
  87. package/assets/skills/evidence-led-ui/references/production-contract.md +120 -0
  88. package/assets/skills/evidence-led-ui/references/provenance.md +117 -0
  89. package/assets/skills/evidence-led-ui/references/quality-rubric.md +126 -0
  90. package/dist/app-sidecar.js +272 -74
  91. package/dist/app-sidecar.js.map +1 -1
  92. package/dist/chat-agents/general.d.ts +7 -0
  93. package/dist/chat-agents/general.d.ts.map +1 -0
  94. package/dist/chat-agents/general.js +16 -0
  95. package/dist/chat-agents/general.js.map +1 -0
  96. package/dist/chat-agents/general.test.d.ts +2 -0
  97. package/dist/chat-agents/general.test.d.ts.map +1 -0
  98. package/dist/chat-agents/general.test.js +50 -0
  99. package/dist/chat-agents/general.test.js.map +1 -0
  100. package/dist/chat-agents/index.d.ts +11 -0
  101. package/dist/chat-agents/index.d.ts.map +1 -0
  102. package/dist/chat-agents/index.js +89 -0
  103. package/dist/chat-agents/index.js.map +1 -0
  104. package/dist/chat-agents/jiwa.d.ts +53 -0
  105. package/dist/chat-agents/jiwa.d.ts.map +1 -0
  106. package/dist/chat-agents/jiwa.js +352 -0
  107. package/dist/chat-agents/jiwa.js.map +1 -0
  108. package/dist/chat-agents/jiwa.test.d.ts +2 -0
  109. package/dist/chat-agents/jiwa.test.d.ts.map +1 -0
  110. package/dist/chat-agents/jiwa.test.js +66 -0
  111. package/dist/chat-agents/jiwa.test.js.map +1 -0
  112. package/dist/chat-agents/memory.d.ts +53 -0
  113. package/dist/chat-agents/memory.d.ts.map +1 -0
  114. package/dist/chat-agents/memory.js +362 -0
  115. package/dist/chat-agents/memory.js.map +1 -0
  116. package/dist/chat-agents/memory.test.d.ts +2 -0
  117. package/dist/chat-agents/memory.test.d.ts.map +1 -0
  118. package/dist/chat-agents/memory.test.js +155 -0
  119. package/dist/chat-agents/memory.test.js.map +1 -0
  120. package/dist/chat-agents/research.d.ts +7 -0
  121. package/dist/chat-agents/research.d.ts.map +1 -0
  122. package/dist/chat-agents/research.js +18 -0
  123. package/dist/chat-agents/research.js.map +1 -0
  124. package/dist/chat-agents/shared.d.ts +11 -0
  125. package/dist/chat-agents/shared.d.ts.map +1 -0
  126. package/dist/chat-agents/shared.js +52 -0
  127. package/dist/chat-agents/shared.js.map +1 -0
  128. package/dist/chat-agents/specialists.test.d.ts +2 -0
  129. package/dist/chat-agents/specialists.test.d.ts.map +1 -0
  130. package/dist/chat-agents/specialists.test.js +97 -0
  131. package/dist/chat-agents/specialists.test.js.map +1 -0
  132. package/dist/chat-agents/therapist.d.ts +7 -0
  133. package/dist/chat-agents/therapist.d.ts.map +1 -0
  134. package/dist/chat-agents/therapist.js +20 -0
  135. package/dist/chat-agents/therapist.js.map +1 -0
  136. package/dist/chat-agents/types.d.ts +4 -0
  137. package/dist/chat-agents/types.d.ts.map +1 -0
  138. package/dist/chat-agents/types.js +7 -0
  139. package/dist/chat-agents/types.js.map +1 -0
  140. package/dist/cli/auth.js +1 -1
  141. package/dist/cli/auth.js.map +1 -1
  142. package/dist/cli.d.ts.map +1 -1
  143. package/dist/cli.js +72 -22
  144. package/dist/cli.js.map +1 -1
  145. package/dist/core/agent-session-memory-tail.test.d.ts +2 -0
  146. package/dist/core/agent-session-memory-tail.test.d.ts.map +1 -0
  147. package/dist/core/agent-session-memory-tail.test.js +122 -0
  148. package/dist/core/agent-session-memory-tail.test.js.map +1 -0
  149. package/dist/core/agent-session-subagent-policy.test.d.ts +2 -0
  150. package/dist/core/agent-session-subagent-policy.test.d.ts.map +1 -0
  151. package/dist/core/agent-session-subagent-policy.test.js +36 -0
  152. package/dist/core/agent-session-subagent-policy.test.js.map +1 -0
  153. package/dist/core/agent-session.d.ts +39 -11
  154. package/dist/core/agent-session.d.ts.map +1 -1
  155. package/dist/core/agent-session.js +178 -125
  156. package/dist/core/agent-session.js.map +1 -1
  157. package/dist/core/agents.d.ts +1 -1
  158. package/dist/core/agents.d.ts.map +1 -1
  159. package/dist/core/agents.js +4 -2
  160. package/dist/core/agents.js.map +1 -1
  161. package/dist/core/auth-providers.js +5 -5
  162. package/dist/core/auth-providers.js.map +1 -1
  163. package/dist/core/compaction/compactor.d.ts +7 -0
  164. package/dist/core/compaction/compactor.d.ts.map +1 -1
  165. package/dist/core/compaction/compactor.js +73 -9
  166. package/dist/core/compaction/compactor.js.map +1 -1
  167. package/dist/core/compaction/compactor.test.js +31 -4
  168. package/dist/core/compaction/compactor.test.js.map +1 -1
  169. package/dist/core/event-bus.d.ts +2 -0
  170. package/dist/core/event-bus.d.ts.map +1 -1
  171. package/dist/core/event-bus.js.map +1 -1
  172. package/dist/core/goal-worker.test.js +3 -2
  173. package/dist/core/goal-worker.test.js.map +1 -1
  174. package/dist/core/loop-breaker.d.ts +23 -16
  175. package/dist/core/loop-breaker.d.ts.map +1 -1
  176. package/dist/core/loop-breaker.js +52 -11
  177. package/dist/core/loop-breaker.js.map +1 -1
  178. package/dist/core/loop-breaker.test.js +37 -16
  179. package/dist/core/loop-breaker.test.js.map +1 -1
  180. package/dist/core/mcp/defaults.d.ts +1 -1
  181. package/dist/core/mcp/defaults.js +1 -1
  182. package/dist/core/mcp/store.d.ts +2 -2
  183. package/dist/core/mcp/store.test.js +1 -1
  184. package/dist/core/mcp/store.test.js.map +1 -1
  185. package/dist/core/nolan-prompt.d.ts +3 -3
  186. package/dist/core/nolan-prompt.d.ts.map +1 -1
  187. package/dist/core/nolan-prompt.js +10 -10
  188. package/dist/core/nolan-prompt.js.map +1 -1
  189. package/dist/core/nolan-prompt.test.js +17 -0
  190. package/dist/core/nolan-prompt.test.js.map +1 -1
  191. package/dist/core/progress/rebuild.d.ts +3 -3
  192. package/dist/core/progress/rebuild.d.ts.map +1 -1
  193. package/dist/core/progress/rebuild.js +33 -27
  194. package/dist/core/progress/rebuild.js.map +1 -1
  195. package/dist/core/progress/rebuild.test.js +15 -0
  196. package/dist/core/progress/rebuild.test.js.map +1 -1
  197. package/dist/core/project-discovery.d.ts +1 -1
  198. package/dist/core/project-discovery.d.ts.map +1 -1
  199. package/dist/core/project-discovery.js +5 -6
  200. package/dist/core/project-discovery.js.map +1 -1
  201. package/dist/core/project-discovery.test.js +14 -1
  202. package/dist/core/project-discovery.test.js.map +1 -1
  203. package/dist/core/radio.d.ts +3 -0
  204. package/dist/core/radio.d.ts.map +1 -1
  205. package/dist/core/radio.js +150 -21
  206. package/dist/core/radio.js.map +1 -1
  207. package/dist/core/radio.test.d.ts +2 -0
  208. package/dist/core/radio.test.d.ts.map +1 -0
  209. package/dist/core/radio.test.js +101 -0
  210. package/dist/core/radio.test.js.map +1 -0
  211. package/dist/core/session-history.test.js +1 -1
  212. package/dist/core/session-history.test.js.map +1 -1
  213. package/dist/core/session-manager.d.ts +1 -1
  214. package/dist/core/session-manager.d.ts.map +1 -1
  215. package/dist/core/session-manager.js +2 -1
  216. package/dist/core/session-manager.js.map +1 -1
  217. package/dist/core/session-manager.test.js +18 -0
  218. package/dist/core/session-manager.test.js.map +1 -1
  219. package/dist/core/settings-manager.d.ts +1 -0
  220. package/dist/core/settings-manager.d.ts.map +1 -1
  221. package/dist/core/settings-manager.js +1 -1
  222. package/dist/core/settings-manager.js.map +1 -1
  223. package/dist/core/skills-routing.test.d.ts +2 -0
  224. package/dist/core/skills-routing.test.d.ts.map +1 -0
  225. package/dist/core/skills-routing.test.js +70 -0
  226. package/dist/core/skills-routing.test.js.map +1 -0
  227. package/dist/core/skills.d.ts +2 -0
  228. package/dist/core/skills.d.ts.map +1 -1
  229. package/dist/core/skills.js +32 -9
  230. package/dist/core/skills.js.map +1 -1
  231. package/dist/core/subagent-manager.d.ts +73 -0
  232. package/dist/core/subagent-manager.d.ts.map +1 -0
  233. package/dist/core/subagent-manager.js +412 -0
  234. package/dist/core/subagent-manager.js.map +1 -0
  235. package/dist/core/subagent-manager.test.d.ts +2 -0
  236. package/dist/core/subagent-manager.test.d.ts.map +1 -0
  237. package/dist/core/subagent-manager.test.js +103 -0
  238. package/dist/core/subagent-manager.test.js.map +1 -0
  239. package/dist/core/subagent-policy.d.ts +4 -0
  240. package/dist/core/subagent-policy.d.ts.map +1 -0
  241. package/dist/core/subagent-policy.js +19 -0
  242. package/dist/core/subagent-policy.js.map +1 -0
  243. package/dist/modes/json-mode.d.ts.map +1 -1
  244. package/dist/modes/json-mode.js +3 -4
  245. package/dist/modes/json-mode.js.map +1 -1
  246. package/dist/modes/subagent-worker-mode.d.ts +14 -0
  247. package/dist/modes/subagent-worker-mode.d.ts.map +1 -0
  248. package/dist/modes/subagent-worker-mode.js +191 -0
  249. package/dist/modes/subagent-worker-mode.js.map +1 -0
  250. package/dist/system-prompt.js +2 -2
  251. package/dist/system-prompt.js.map +1 -1
  252. package/dist/system-prompt.test.js +7 -5
  253. package/dist/system-prompt.test.js.map +1 -1
  254. package/dist/tools/generate-image.d.ts.map +1 -1
  255. package/dist/tools/generate-image.js +12 -5
  256. package/dist/tools/generate-image.js.map +1 -1
  257. package/dist/tools/generate-image.test.js +17 -0
  258. package/dist/tools/generate-image.test.js.map +1 -1
  259. package/dist/tools/goals.d.ts +3 -3
  260. package/dist/tools/index.d.ts +10 -2
  261. package/dist/tools/index.d.ts.map +1 -1
  262. package/dist/tools/index.js +17 -1
  263. package/dist/tools/index.js.map +1 -1
  264. package/dist/tools/skill.d.ts.map +1 -1
  265. package/dist/tools/skill.js +8 -3
  266. package/dist/tools/skill.js.map +1 -1
  267. package/dist/tools/subagent-control.d.ts +6 -0
  268. package/dist/tools/subagent-control.d.ts.map +1 -0
  269. package/dist/tools/subagent-control.js +95 -0
  270. package/dist/tools/subagent-control.js.map +1 -0
  271. package/dist/tools/subagent-control.test.d.ts +2 -0
  272. package/dist/tools/subagent-control.test.d.ts.map +1 -0
  273. package/dist/tools/subagent-control.test.js +40 -0
  274. package/dist/tools/subagent-control.test.js.map +1 -0
  275. package/dist/tools/subagent-shared.d.ts +24 -0
  276. package/dist/tools/subagent-shared.d.ts.map +1 -0
  277. package/dist/tools/subagent-shared.js +53 -0
  278. package/dist/tools/subagent-shared.js.map +1 -0
  279. package/dist/tools/subagent-shared.test.d.ts +2 -0
  280. package/dist/tools/subagent-shared.test.d.ts.map +1 -0
  281. package/dist/tools/subagent-shared.test.js +29 -0
  282. package/dist/tools/subagent-shared.test.js.map +1 -0
  283. package/dist/tools/subagent.d.ts.map +1 -1
  284. package/dist/tools/subagent.js +21 -64
  285. package/dist/tools/subagent.js.map +1 -1
  286. package/dist/tools/subagent.test.js +27 -1
  287. package/dist/tools/subagent.test.js.map +1 -1
  288. package/dist/tools/web-fetch.d.ts +1 -0
  289. package/dist/tools/web-fetch.d.ts.map +1 -1
  290. package/dist/tools/web-fetch.js +112 -35
  291. package/dist/tools/web-fetch.js.map +1 -1
  292. package/dist/tools/web-fetch.test.js +146 -1
  293. package/dist/tools/web-fetch.test.js.map +1 -1
  294. package/dist/tools/web-search.d.ts +10 -0
  295. package/dist/tools/web-search.d.ts.map +1 -1
  296. package/dist/tools/web-search.js +236 -28
  297. package/dist/tools/web-search.js.map +1 -1
  298. package/dist/tools/web-search.test.js +77 -6
  299. package/dist/tools/web-search.test.js.map +1 -1
  300. package/dist/ui/App.d.ts +2 -0
  301. package/dist/ui/App.d.ts.map +1 -1
  302. package/dist/ui/App.js +61 -2
  303. package/dist/ui/App.js.map +1 -1
  304. package/dist/ui/components/SkillsOverlay.d.ts.map +1 -1
  305. package/dist/ui/components/SkillsOverlay.js +8 -3
  306. package/dist/ui/components/SkillsOverlay.js.map +1 -1
  307. package/dist/ui/hooks/useAgentLoop.d.ts.map +1 -1
  308. package/dist/ui/hooks/useAgentLoop.js +7 -18
  309. package/dist/ui/hooks/useAgentLoop.js.map +1 -1
  310. package/dist/ui/hooks/useAgentLoop.test.js +27 -0
  311. package/dist/ui/hooks/useAgentLoop.test.js.map +1 -1
  312. package/dist/ui/hooks/useModeState.d.ts +4 -2
  313. package/dist/ui/hooks/useModeState.d.ts.map +1 -1
  314. package/dist/ui/hooks/useModeState.js +14 -3
  315. package/dist/ui/hooks/useModeState.js.map +1 -1
  316. package/dist/ui/login.d.ts.map +1 -1
  317. package/dist/ui/login.js +13 -5
  318. package/dist/ui/login.js.map +1 -1
  319. package/dist/ui/render.d.ts +14 -0
  320. package/dist/ui/render.d.ts.map +1 -1
  321. package/dist/ui/render.js +2 -0
  322. package/dist/ui/render.js.map +1 -1
  323. package/dist/ui/render.test.js +17 -0
  324. package/dist/ui/render.test.js.map +1 -1
  325. package/package.json +7 -6
@@ -1,4 +1,6 @@
1
1
  import type { AgentTool } from "@prestyj/agent";
2
+ import type { Provider, ThinkingLevel } from "@prestyj/ai";
3
+ import { SubAgentManager, type SubAgentSnapshot } from "../core/subagent-manager.js";
2
4
  import { ProcessManager } from "../core/process-manager.js";
3
5
  import { LspManager } from "../core/lsp/manager.js";
4
6
  import { type GenerateImageAuth } from "./generate-image.js";
@@ -9,7 +11,7 @@ import type { GoalMode } from "../core/runtime-mode.js";
9
11
  export interface CreateToolsOptions {
10
12
  agents?: AgentDefinition[];
11
13
  skills?: Skill[];
12
- provider?: string;
14
+ provider?: Provider;
13
15
  model?: string;
14
16
  /** Custom I/O operations for remote execution (SSH, Docker, etc.). Defaults to local filesystem. */
15
17
  operations?: ToolOperations;
@@ -49,8 +51,13 @@ export interface CreateToolsOptions {
49
51
  */
50
52
  getCacheKey?: () => string | undefined;
51
53
  /** Current parent provider/model, evaluated lazily when spawning a sub-agent. */
52
- getProvider?: () => string;
54
+ getProvider?: () => Provider;
53
55
  getModel?: () => string;
56
+ getThinkingLevel?: () => ThinkingLevel | undefined;
57
+ getBaseUrl?: () => string | undefined;
58
+ onSubAgentState?: (snapshot: SubAgentSnapshot) => void;
59
+ /** Persistent child workers omit async orchestration to enforce one-level fan-out. */
60
+ disableAsyncSubagents?: boolean;
54
61
  /**
55
62
  * Append LSP diagnostics to edit/write results (default true). Servers are
56
63
  * resolved from the project/PATH only and spawn lazily on the first edit of
@@ -86,6 +93,7 @@ export interface CreateToolsResult {
86
93
  * `shutdownAll()` into their exit/cleanup paths alongside processManager.
87
94
  */
88
95
  lspManager?: LspManager;
96
+ subAgentManager?: SubAgentManager;
89
97
  }
90
98
  export declare function createTools(cwd: string, opts?: CreateToolsOptions): Promise<CreateToolsResult>;
91
99
  export { createReadTool } from "./read.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { SubAgentManager } from "../core/subagent-manager.js";
1
2
  import { ProcessManager } from "../core/process-manager.js";
2
3
  import { LspManager } from "../core/lsp/manager.js";
3
4
  import { createReadTool } from "./read.js";
@@ -10,6 +11,7 @@ import { createGrepTool } from "./grep.js";
10
11
  import { createSearchCodeTool } from "./search-code.js";
11
12
  import { createLsTool } from "./ls.js";
12
13
  import { createSubAgentTool } from "./subagent.js";
14
+ import { createSubAgentControlTools } from "./subagent-control.js";
13
15
  import { createWebFetchTool } from "./web-fetch.js";
14
16
  import { createWebSearchTool } from "./web-search.js";
15
17
  import { createSourcePathTool } from "./source-path.js";
@@ -65,8 +67,22 @@ export async function createTools(cwd, opts) {
65
67
  if (opts?.provider && opts.provider !== "anthropic") {
66
68
  tools.push(createWebSearchTool());
67
69
  }
70
+ let subAgentManager;
68
71
  if (opts?.agents && opts.agents.length > 0 && opts.provider && opts.model) {
69
72
  tools.push(createSubAgentTool(cwd, opts.agents, () => opts.getProvider?.() ?? opts.provider, () => opts.getModel?.() ?? opts.model, opts.getCacheKey, planModeRef, goalModeRef));
73
+ if (!opts.disableAsyncSubagents) {
74
+ subAgentManager = new SubAgentManager({
75
+ cwd,
76
+ agents: opts.agents,
77
+ getProvider: () => opts.getProvider?.() ?? opts.provider,
78
+ getModel: () => opts.getModel?.() ?? opts.model,
79
+ getThinkingLevel: () => opts.getThinkingLevel?.(),
80
+ getCacheKey: opts.getCacheKey,
81
+ getBaseUrl: opts.getBaseUrl,
82
+ onState: opts.onSubAgentState,
83
+ });
84
+ tools.push(...createSubAgentControlTools(subAgentManager, planModeRef));
85
+ }
70
86
  }
71
87
  if (opts?.skills && opts.skills.length > 0) {
72
88
  tools.push(createSkillTool(opts.skills));
@@ -91,7 +107,7 @@ export async function createTools(cwd, opts) {
91
107
  }
92
108
  }
93
109
  const rebuildReadTool = (model) => createReadTool(cwd, readFiles, ops, opts?.onFileRead, getVideoByteLimit(model));
94
- return { tools, processManager, rebuildReadTool, lspManager };
110
+ return { tools, processManager, rebuildReadTool, lspManager, subAgentManager };
95
111
  }
96
112
  export { createReadTool } from "./read.js";
97
113
  export { createWriteTool } from "./write.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../../src/tools/skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE/C,QAAA,MAAM,UAAU;;;iBAGd,CAAC;AAEH,wBAAgB,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC,OAAO,UAAU,CAAC,CAwB7E"}
1
+ {"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../../src/tools/skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE/C,QAAA,MAAM,UAAU;;;iBAGd,CAAC;AAEH,wBAAgB,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC,OAAO,UAAU,CAAC,CA0B7E"}
@@ -15,11 +15,14 @@ export function createSkillTool(skills) {
15
15
  const available = skills.map((s) => s.name).join(", ");
16
16
  return `Error: Skill "${input.skill}" not found. Available skills: ${available || "none"}`;
17
17
  }
18
- const parts = [`<skill_content name="${skill.name}">`, skill.content, `</skill_content>`];
18
+ const parts = [`<skill_content name="${skill.name}">`];
19
+ if (skill.root)
20
+ parts.push(`Skill root directory: ${skill.root}`);
21
+ parts.push(skill.content, `</skill_content>`);
19
22
  if (input.args) {
20
23
  parts.push(`\nUser context: ${input.args}`);
21
24
  }
22
- parts.push("\nTreat the above skill instructions as authoritative. Follow them to complete the task.");
25
+ parts.push("\nTreat the above skill instructions as authoritative within their stated scope. Preserve higher-priority project and file/module rules while following the skill to complete the task.");
23
26
  return parts.join("\n");
24
27
  },
25
28
  };
@@ -31,6 +34,8 @@ function generateSkillDescription(skills) {
31
34
  const list = skills
32
35
  .map((s) => `- **${s.name}**: ${s.description || "No description"}`)
33
36
  .join("\n");
34
- return `Invoke a skill by name to get specialized instructions for a task.\n\nAvailable skills:\n${list}`;
37
+ return (`Invoke a skill by name to get specialized instructions for a task. ` +
38
+ `Before acting, invoke a skill when the request matches its scope and respect explicit exclusions.\n\n` +
39
+ `Available skills:\n${list}`);
35
40
  }
36
41
  //# sourceMappingURL=skill.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/tools/skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IAC7D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;CACpF,CAAC,CAAC;AAEH,MAAM,UAAU,eAAe,CAAC,MAAe;IAC7C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAEzD,OAAO;QACL,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,wBAAwB,CAAC,MAAM,CAAC;QAC7C,UAAU;QACV,KAAK,CAAC,OAAO,CAAC,KAAK;YACjB,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACxC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvD,OAAO,iBAAiB,KAAK,CAAC,KAAK,kCAAkC,SAAS,IAAI,MAAM,EAAE,CAAC;YAC7F,CAAC;YAED,MAAM,KAAK,GAAG,CAAC,wBAAwB,KAAK,CAAC,IAAI,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;YAC1F,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,KAAK,CAAC,IAAI,CAAC,mBAAmB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9C,CAAC;YACD,KAAK,CAAC,IAAI,CACR,0FAA0F,CAC3F,CAAC;YACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAAC,MAAe;IAC/C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,4DAA4D,CAAC;IACtE,CAAC;IAED,MAAM,IAAI,GAAG,MAAM;SAChB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,WAAW,IAAI,gBAAgB,EAAE,CAAC;SACnE,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO,4FAA4F,IAAI,EAAE,CAAC;AAC5G,CAAC"}
1
+ {"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/tools/skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IAC7D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;CACpF,CAAC,CAAC;AAEH,MAAM,UAAU,eAAe,CAAC,MAAe;IAC7C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAEzD,OAAO;QACL,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,wBAAwB,CAAC,MAAM,CAAC;QAC7C,UAAU;QACV,KAAK,CAAC,OAAO,CAAC,KAAK;YACjB,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACxC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvD,OAAO,iBAAiB,KAAK,CAAC,KAAK,kCAAkC,SAAS,IAAI,MAAM,EAAE,CAAC;YAC7F,CAAC;YAED,MAAM,KAAK,GAAG,CAAC,wBAAwB,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC;YACvD,IAAI,KAAK,CAAC,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,yBAAyB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAClE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;YAC9C,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,KAAK,CAAC,IAAI,CAAC,mBAAmB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9C,CAAC;YACD,KAAK,CAAC,IAAI,CACR,yLAAyL,CAC1L,CAAC;YACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAAC,MAAe;IAC/C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,4DAA4D,CAAC;IACtE,CAAC;IAED,MAAM,IAAI,GAAG,MAAM;SAChB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,WAAW,IAAI,gBAAgB,EAAE,CAAC;SACnE,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO,CACL,qEAAqE;QACrE,uGAAuG;QACvG,sBAAsB,IAAI,EAAE,CAC7B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { AgentTool } from "@prestyj/agent";
2
+ import type { SubAgentManager } from "../core/subagent-manager.js";
3
+ export declare function createSubAgentControlTools(manager: SubAgentManager, planModeRef?: {
4
+ current: boolean;
5
+ }): AgentTool[];
6
+ //# sourceMappingURL=subagent-control.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent-control.d.ts","sourceRoot":"","sources":["../../src/tools/subagent-control.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AASnE,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,eAAe,EACxB,WAAW,CAAC,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,GACjC,SAAS,EAAE,CA+Fb"}
@@ -0,0 +1,95 @@
1
+ import { z } from "zod";
2
+ import { isPlanModeActive, planModeRestriction } from "../core/runtime-mode.js";
3
+ const AgentId = z.string().min(1).describe("Eight-character agent ID returned by spawn_agent");
4
+ function json(value) {
5
+ return { content: JSON.stringify(value) };
6
+ }
7
+ export function createSubAgentControlTools(manager, planModeRef) {
8
+ const blocked = (name) => isPlanModeActive(planModeRef) ? planModeRestriction(name) : undefined;
9
+ const spawnParams = z.object({
10
+ task_name: z.string().min(1).describe("Short unique name for this delegated task"),
11
+ task: z.string().min(1).describe("Standalone task instruction for the child agent"),
12
+ agent: z.string().optional().describe("Optional named agent definition"),
13
+ });
14
+ const spawnTool = {
15
+ name: "spawn_agent",
16
+ description: "Start an isolated persistent child agent and return immediately after launch. Start all independent agents before waiting; shared files are not isolated.",
17
+ parameters: spawnParams,
18
+ executionMode: "parallel",
19
+ async execute(args) {
20
+ const restriction = blocked("spawn_agent");
21
+ if (restriction)
22
+ return restriction;
23
+ return json(await manager.spawn(args.task_name, args.task, args.agent));
24
+ },
25
+ };
26
+ const messageParams = z.object({ agent_id: AgentId, message: z.string().min(1) });
27
+ const messageTool = {
28
+ name: "send_message",
29
+ description: "Queue steering into a running child agent without starting another turn.",
30
+ parameters: messageParams,
31
+ async execute(args) {
32
+ const restriction = blocked("send_message");
33
+ if (restriction)
34
+ return restriction;
35
+ return json({
36
+ agent_id: args.agent_id,
37
+ queued: await manager.sendMessage(args.agent_id, args.message),
38
+ });
39
+ },
40
+ };
41
+ const followupParams = z.object({ agent_id: AgentId, task: z.string().min(1) });
42
+ const followupTool = {
43
+ name: "followup_task",
44
+ description: "Start another turn in an idle child while preserving that child's context.",
45
+ parameters: followupParams,
46
+ async execute(args) {
47
+ const restriction = blocked("followup_task");
48
+ if (restriction)
49
+ return restriction;
50
+ return json(await manager.followup(args.agent_id, args.task));
51
+ },
52
+ };
53
+ const waitParams = z.object({
54
+ agent_ids: z
55
+ .array(AgentId)
56
+ .optional()
57
+ .describe("Agents to wait for; omitted means active agents"),
58
+ condition: z.enum(["any", "all"]).optional().describe("Default: any"),
59
+ timeout_ms: z
60
+ .number()
61
+ .int()
62
+ .min(0)
63
+ .max(300_000)
64
+ .optional()
65
+ .describe("Default 30000; max 300000"),
66
+ });
67
+ const waitTool = {
68
+ name: "wait_agent",
69
+ description: "Wait for any or all requested child agents and return bounded result snapshots.",
70
+ parameters: waitParams,
71
+ async execute(args) {
72
+ return json(await manager.wait(args.agent_ids, args.condition, args.timeout_ms));
73
+ },
74
+ };
75
+ const listParams = z.object({});
76
+ const listTool = {
77
+ name: "list_agents",
78
+ description: "List child IDs, task names, lifecycle states, activity, turns, tools, and token totals.",
79
+ parameters: listParams,
80
+ async execute() {
81
+ return json(manager.list().map(({ output: _output, error: _error, ...summary }) => summary));
82
+ },
83
+ };
84
+ const interruptParams = z.object({ agent_id: AgentId });
85
+ const interruptTool = {
86
+ name: "interrupt_agent",
87
+ description: "Interrupt a child's current turn while retaining its context for a later follow-up.",
88
+ parameters: interruptParams,
89
+ async execute(args) {
90
+ return json(await manager.interrupt(args.agent_id));
91
+ },
92
+ };
93
+ return [spawnTool, messageTool, followupTool, waitTool, listTool, interruptTool];
94
+ }
95
+ //# sourceMappingURL=subagent-control.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent-control.js","sourceRoot":"","sources":["../../src/tools/subagent-control.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=subagent-control.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent-control.test.d.ts","sourceRoot":"","sources":["../../src/tools/subagent-control.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,40 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ import { createSubAgentControlTools } from "./subagent-control.js";
3
+ function fakeManager() {
4
+ return {
5
+ spawn: vi.fn(async (taskName) => ({
6
+ agent_id: "12345678",
7
+ task_name: taskName,
8
+ state: "running",
9
+ })),
10
+ sendMessage: vi.fn(async () => 1),
11
+ followup: vi.fn(async () => ({ agent_id: "12345678", state: "running" })),
12
+ wait: vi.fn(async () => ({ timed_out: false, agents: [] })),
13
+ list: vi.fn(() => []),
14
+ interrupt: vi.fn(async () => ({ agent_id: "12345678", state: "interrupted" })),
15
+ };
16
+ }
17
+ const context = { signal: new AbortController().signal, toolCallId: "test" };
18
+ describe("async subagent control tools", () => {
19
+ it("registers the six concise control surfaces", () => {
20
+ expect(createSubAgentControlTools(fakeManager()).map((tool) => tool.name)).toEqual([
21
+ "spawn_agent",
22
+ "send_message",
23
+ "followup_task",
24
+ "wait_agent",
25
+ "list_agents",
26
+ "interrupt_agent",
27
+ ]);
28
+ });
29
+ it("launches through the manager and blocks mutating lifecycle calls in plan mode", async () => {
30
+ const manager = fakeManager();
31
+ const planModeRef = { current: false };
32
+ const tools = createSubAgentControlTools(manager, planModeRef);
33
+ const spawn = tools.find((tool) => tool.name === "spawn_agent");
34
+ await expect(spawn.execute({ task_name: "scan", task: "inspect" }, context)).resolves.toMatchObject({ content: expect.stringContaining("12345678") });
35
+ expect(manager.spawn).toHaveBeenCalledWith("scan", "inspect", undefined);
36
+ planModeRef.current = true;
37
+ await expect(spawn.execute({ task_name: "blocked", task: "write" }, context)).resolves.toContain("plan mode");
38
+ });
39
+ });
40
+ //# sourceMappingURL=subagent-control.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent-control.test.js","sourceRoot":"","sources":["../../src/tools/subagent-control.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAElD,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAEnE,SAAS,WAAW;IAClB,OAAO;QACL,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,QAAgB,EAAE,EAAE,CAAC,CAAC;YACxC,QAAQ,EAAE,UAAU;YACpB,SAAS,EAAE,QAAQ;YACnB,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QACH,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;QACjC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACzE,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3D,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;QACrB,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;KACjD,CAAC;AAClC,CAAC;AAED,MAAM,OAAO,GAAG,EAAE,MAAM,EAAE,IAAI,eAAe,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;AAE7E,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,0BAA0B,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YACjF,aAAa;YACb,cAAc;YACd,eAAe;YACf,YAAY;YACZ,aAAa;YACb,iBAAiB;SAClB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+EAA+E,EAAE,KAAK,IAAI,EAAE;QAC7F,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;QAC9B,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,0BAA0B,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC/D,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,CAAE,CAAC;QACjE,MAAM,MAAM,CACV,KAAK,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,OAAO,CAAC,CAC/D,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC3E,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAEzE,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;QAC3B,MAAM,MAAM,CACV,KAAK,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,CAChE,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { Provider, ThinkingLevel } from "@prestyj/ai";
2
+ import type { AgentDefinition } from "../core/agents.js";
3
+ export declare const SUB_AGENT_MAX_TURNS = 50;
4
+ export declare const SUB_AGENT_MAX_OUTPUT_CHARS = 100000;
5
+ export declare const SUB_AGENT_MAX_OUTPUT_LINES = 500;
6
+ export declare const SUB_AGENT_MAX_STDERR_CHARS = 10000;
7
+ export declare const SUB_AGENT_TIMEOUT_MS: number;
8
+ export declare const SUB_AGENT_DEPTH_ENV = "GG_SUBAGENT_DEPTH";
9
+ export declare const MAX_BLOCKING_SUBAGENT_DEPTH = 3;
10
+ export interface SubAgentSelection {
11
+ agentDef?: AgentDefinition;
12
+ provider: Provider;
13
+ parentModel: string;
14
+ model: string;
15
+ }
16
+ export declare function resolveAgentDefinition(agents: AgentDefinition[], requestedName?: string): AgentDefinition | undefined;
17
+ export declare function selectSubAgent(agents: AgentDefinition[], requestedName: string | undefined, provider: Provider, parentModel: string): SubAgentSelection;
18
+ export declare function childThinkingLevel(level: ThinkingLevel | undefined): ThinkingLevel | undefined;
19
+ export declare function subAgentCacheKey(parentCacheKey: string | undefined, model: string, agentName?: string): string | undefined;
20
+ export declare function currentSubAgentDepth(env?: NodeJS.ProcessEnv): number;
21
+ export declare function childSubAgentEnv(env?: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
22
+ export declare function resolveSubAgentCliEntry(): string;
23
+ export declare function boundSubAgentOutput(raw: string): string;
24
+ //# sourceMappingURL=subagent-shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent-shared.d.ts","sourceRoot":"","sources":["../../src/tools/subagent-shared.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAMzD,eAAO,MAAM,mBAAmB,KAAK,CAAC;AACtC,eAAO,MAAM,0BAA0B,SAAU,CAAC;AAClD,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAC9C,eAAO,MAAM,0BAA0B,QAAS,CAAC;AACjD,eAAO,MAAM,oBAAoB,QAAiB,CAAC;AACnD,eAAO,MAAM,mBAAmB,sBAAsB,CAAC;AACvD,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAE7C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,eAAe,EAAE,EACzB,aAAa,CAAC,EAAE,MAAM,GACrB,eAAe,GAAG,SAAS,CAG7B;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,eAAe,EAAE,EACzB,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,MAAM,GAClB,iBAAiB,CAYnB;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,CAE9F;AAED,wBAAgB,gBAAgB,CAC9B,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,KAAK,EAAE,MAAM,EACb,SAAS,SAAY,GACpB,MAAM,GAAG,SAAS,CAEpB;AAED,wBAAgB,oBAAoB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAGjF;AAED,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAAC,UAAU,CAExF;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CAGhD;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CASvD"}
@@ -0,0 +1,53 @@
1
+ import { existsSync } from "node:fs";
2
+ import { fileURLToPath } from "node:url";
3
+ import { getFastModel } from "../core/model-registry.js";
4
+ import { truncateTail } from "./truncate.js";
5
+ const MUTATING_TOOLS = new Set(["bash", "write", "edit"]);
6
+ export const SUB_AGENT_MAX_TURNS = 50;
7
+ export const SUB_AGENT_MAX_OUTPUT_CHARS = 100_000;
8
+ export const SUB_AGENT_MAX_OUTPUT_LINES = 500;
9
+ export const SUB_AGENT_MAX_STDERR_CHARS = 10_000;
10
+ export const SUB_AGENT_TIMEOUT_MS = 10 * 60 * 1000;
11
+ export const SUB_AGENT_DEPTH_ENV = "GG_SUBAGENT_DEPTH";
12
+ export const MAX_BLOCKING_SUBAGENT_DEPTH = 3;
13
+ export function resolveAgentDefinition(agents, requestedName) {
14
+ if (!requestedName)
15
+ return undefined;
16
+ return agents.find((agent) => agent.name.toLowerCase() === requestedName.toLowerCase());
17
+ }
18
+ export function selectSubAgent(agents, requestedName, provider, parentModel) {
19
+ const agentDef = resolveAgentDefinition(agents, requestedName);
20
+ const readOnly = !!agentDef &&
21
+ agentDef.tools.length > 0 &&
22
+ !agentDef.tools.some((tool) => MUTATING_TOOLS.has(tool.toLowerCase()));
23
+ return {
24
+ agentDef,
25
+ provider,
26
+ parentModel,
27
+ model: readOnly ? getFastModel(provider, parentModel).id : parentModel,
28
+ };
29
+ }
30
+ export function childThinkingLevel(level) {
31
+ return level === "ultra" ? "max" : level;
32
+ }
33
+ export function subAgentCacheKey(parentCacheKey, model, agentName = "default") {
34
+ return parentCacheKey ? `${parentCacheKey}:subagent:${model}:${agentName}` : undefined;
35
+ }
36
+ export function currentSubAgentDepth(env = process.env) {
37
+ const parsed = Number.parseInt(env[SUB_AGENT_DEPTH_ENV] ?? "0", 10);
38
+ return Number.isFinite(parsed) && parsed >= 0 ? parsed : 0;
39
+ }
40
+ export function childSubAgentEnv(env = process.env) {
41
+ return { ...env, [SUB_AGENT_DEPTH_ENV]: String(currentSubAgentDepth(env) + 1) };
42
+ }
43
+ export function resolveSubAgentCliEntry() {
44
+ const cliPath = fileURLToPath(new URL("../cli.js", import.meta.url));
45
+ return existsSync(cliPath) ? cliPath : process.argv[1];
46
+ }
47
+ export function boundSubAgentOutput(raw) {
48
+ const result = truncateTail(raw || "(no output)", SUB_AGENT_MAX_OUTPUT_LINES, SUB_AGENT_MAX_OUTPUT_CHARS);
49
+ return result.truncated
50
+ ? `[Sub-agent output truncated: ${result.totalLines} total lines, showing last ${result.keptLines}]\n\n${result.content}`
51
+ : result.content;
52
+ }
53
+ //# sourceMappingURL=subagent-shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent-shared.js","sourceRoot":"","sources":["../../src/tools/subagent-shared.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=subagent-shared.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent-shared.test.d.ts","sourceRoot":"","sources":["../../src/tools/subagent-shared.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,29 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { selectSubAgent, subAgentCacheKey } from "./subagent-shared.js";
3
+ describe("selectSubAgent", () => {
4
+ it("keeps shell-capable agents on the parent model", () => {
5
+ const shellAgent = {
6
+ name: "worker",
7
+ description: "Can mutate through shell commands",
8
+ tools: ["read", "bash"],
9
+ systemPrompt: "Work on the task.",
10
+ source: "bundled",
11
+ };
12
+ expect(selectSubAgent([shellAgent], "worker", "openai", "gpt-5.6-sol").model).toBe("gpt-5.6-sol");
13
+ });
14
+ });
15
+ describe("subAgentCacheKey", () => {
16
+ it("shares routing within one model and named-agent family", () => {
17
+ expect(subAgentCacheKey("parent", "gpt-5.6-luna", "owl")).toBe("parent:subagent:gpt-5.6-luna:owl");
18
+ expect(subAgentCacheKey("parent", "gpt-5.6-luna", "owl")).toBe(subAgentCacheKey("parent", "gpt-5.6-luna", "owl"));
19
+ });
20
+ it("partitions unrelated model and prompt families", () => {
21
+ const owl = subAgentCacheKey("parent", "gpt-5.6-luna", "owl");
22
+ expect(subAgentCacheKey("parent", "gpt-5.6-sol", "owl")).not.toBe(owl);
23
+ expect(subAgentCacheKey("parent", "gpt-5.6-luna", "bee")).not.toBe(owl);
24
+ });
25
+ it("stays unset when the parent has no stable cache identity", () => {
26
+ expect(subAgentCacheKey(undefined, "gpt-5.6-luna", "owl")).toBeUndefined();
27
+ });
28
+ });
29
+ //# sourceMappingURL=subagent-shared.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent-shared.test.js","sourceRoot":"","sources":["../../src/tools/subagent-shared.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExE,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,UAAU,GAAoB;YAClC,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,mCAAmC;YAChD,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;YACvB,YAAY,EAAE,mBAAmB;YACjC,MAAM,EAAE,SAAS;SAClB,CAAC;QAEF,MAAM,CAAC,cAAc,CAAC,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAChF,aAAa,CACd,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAC5D,kCAAkC,CACnC,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAC5D,gBAAgB,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,CAAC,CAClD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,GAAG,GAAG,gBAAgB,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;QAC9D,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvE,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IAC7E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"subagent.d.ts","sourceRoot":"","sources":["../../src/tools/subagent.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIzD,OAAO,EAKL,KAAK,QAAQ,EACd,MAAM,yBAAyB,CAAC;AAkBjC,kFAAkF;AAClF,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAI/D;AAmBD,QAAA,MAAM,cAAc;;;iBAMlB,CAAC;AAEH,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,eAAe,EAAE,EACzB,iBAAiB,EAAE,MAAM,MAAM,EAC/B,cAAc,EAAE,MAAM,MAAM,EAC5B,iBAAiB,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,EAC5C,WAAW,CAAC,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,EAClC,WAAW,CAAC,EAAE;IAAE,OAAO,EAAE,QAAQ,CAAA;CAAE,GAClC,SAAS,CAAC,OAAO,cAAc,CAAC,CA8RlC"}
1
+ {"version":3,"file":"subagent.d.ts","sourceRoot":"","sources":["../../src/tools/subagent.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EAKL,KAAK,QAAQ,EACd,MAAM,yBAAyB,CAAC;AAejC,kFAAkF;AAClF,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAI/D;AAED,QAAA,MAAM,cAAc;;;iBAMlB,CAAC;AAEH,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,eAAe,EAAE,EACzB,iBAAiB,EAAE,MAAM,MAAM,EAC/B,cAAc,EAAE,MAAM,MAAM,EAC5B,iBAAiB,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,EAC5C,WAAW,CAAC,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,EAClC,WAAW,CAAC,EAAE;IAAE,OAAO,EAAE,QAAQ,CAAA;CAAE,GAClC,SAAS,CAAC,OAAO,cAAc,CAAC,CAkRlC"}
@@ -1,46 +1,13 @@
1
1
  import { spawn } from "node:child_process";
2
2
  import { createInterface } from "node:readline";
3
- import { existsSync } from "node:fs";
4
- import { fileURLToPath } from "node:url";
5
3
  import { z } from "zod";
6
- import { getFastModel } from "../core/model-registry.js";
7
4
  import { log } from "../core/logger.js";
8
- import { truncateTail } from "./truncate.js";
9
5
  import { getActiveGoalMode, goalModeSubagentRestriction, isPlanModeActive, planModeRestriction, } from "../core/runtime-mode.js";
10
- // Tools that can mutate the workspace. A named agent whose allow-list contains
11
- // none of these is a read-only scout (recon/research) — safe to route to the
12
- // provider's fast/cheap model. An agent that can write/edit keeps the parent
13
- // model so code changes never regress in quality.
14
- const MUTATING_TOOLS = new Set(["write", "edit"]);
15
- /**
16
- * True when the sub-agent is a read-only scout: an explicit named agent with a
17
- * non-empty tool allow-list that grants no mutating tool. A subagent call with
18
- * no `agent` (full toolset) is NOT read-only — it keeps the parent model.
19
- */
20
- function isReadOnlyAgent(agentDef) {
21
- if (!agentDef || agentDef.tools.length === 0)
22
- return false;
23
- return !agentDef.tools.some((tool) => MUTATING_TOOLS.has(tool.toLowerCase()));
24
- }
6
+ import { boundSubAgentOutput, childSubAgentEnv, currentSubAgentDepth, MAX_BLOCKING_SUBAGENT_DEPTH, resolveSubAgentCliEntry, selectSubAgent, subAgentCacheKey, SUB_AGENT_MAX_OUTPUT_CHARS, SUB_AGENT_MAX_STDERR_CHARS, SUB_AGENT_MAX_TURNS, SUB_AGENT_TIMEOUT_MS, } from "./subagent-shared.js";
25
7
  /** Only retry errors that specifically mean the selected model cannot be used. */
26
8
  export function isModelUnavailableError(stderr) {
27
9
  return /does not recognize the requested model|requested model[^\n]*(?:not available|no access)|model[^\n]*(?:does not exist|not found|not available)/i.test(stderr);
28
10
  }
29
- const SUB_AGENT_MAX_TURNS = 50;
30
- const SUB_AGENT_MAX_OUTPUT_CHARS = 100_000; // ~25k tokens, matches other tool limits
31
- const SUB_AGENT_MAX_OUTPUT_LINES = 500;
32
- const SUB_AGENT_MAX_STDERR_CHARS = 10_000; // Cap stderr to prevent unbounded growth
33
- const SUB_AGENT_TIMEOUT_MS = 10 * 60 * 1000; // 10 minute hard timeout
34
- /**
35
- * Absolute path to the ezcoder CLI entry (dist/cli.js) that runs a sub-agent in
36
- * JSON mode. Resolved relative to this module so it's correct no matter how the
37
- * host process was launched (CLI bin, desktop app sidecar, tests). Falls back to
38
- * the launching script only if the sibling file is missing.
39
- */
40
- function resolveCliEntry() {
41
- const cliPath = fileURLToPath(new URL("../cli.js", import.meta.url));
42
- return existsSync(cliPath) ? cliPath : process.argv[1];
43
- }
44
11
  const SubAgentParams = z.object({
45
12
  task: z.string().describe("The task to delegate to the sub-agent"),
46
13
  agent: z
@@ -72,28 +39,25 @@ export function createSubAgentTool(cwd, agents, getParentProvider, getParentMode
72
39
  if (isPlanModeActive(planModeRef)) {
73
40
  return planModeRestriction("subagent");
74
41
  }
75
- const startTime = Date.now();
76
- // Resolve agent definition if specified
77
- let agentDef;
78
- if (args.agent) {
79
- agentDef = agents.find((a) => a.name.toLowerCase() === args.agent.toLowerCase());
80
- if (!agentDef) {
81
- return {
82
- content: `Unknown agent: "${args.agent}". Available agents: ${agents.map((a) => a.name).join(", ") || "none"}`,
83
- };
84
- }
42
+ if (currentSubAgentDepth() >= MAX_BLOCKING_SUBAGENT_DEPTH) {
43
+ return {
44
+ content: `Sub-agent nesting limit reached (${MAX_BLOCKING_SUBAGENT_DEPTH}). Complete this task in the current agent.`,
45
+ };
85
46
  }
47
+ const startTime = Date.now();
86
48
  const useProvider = getParentProvider();
87
- // Read-only scouts (recon/research) run on the provider's fast/cheap model
88
- // — lower TTFT + spend, no quality risk since they never edit code.
89
- // Agents that can write, and default (unnamed) sub-agents, keep the
90
- // parent model.
91
49
  const parentModel = getParentModel();
92
- const useModel = isReadOnlyAgent(agentDef)
93
- ? getFastModel(useProvider, parentModel).id
94
- : parentModel;
50
+ const selection = selectSubAgent(agents, args.agent, useProvider, parentModel);
51
+ const agentDef = selection.agentDef;
52
+ if (args.agent && !agentDef) {
53
+ return {
54
+ content: `Unknown agent: "${args.agent}". Available agents: ${agents.map((a) => a.name).join(", ") || "none"}`,
55
+ };
56
+ }
57
+ const useModel = selection.model;
95
58
  const parentCacheKey = getParentCacheKey?.();
96
- const subCacheKey = parentCacheKey ? `${parentCacheKey}:subagent` : "(unset)";
59
+ const childCacheKey = subAgentCacheKey(parentCacheKey, useModel, agentDef?.name ?? "default");
60
+ const subCacheKey = childCacheKey ?? "(unset)";
97
61
  const buildCliArgs = (model) => {
98
62
  const cliArgs = [
99
63
  "--json",
@@ -104,11 +68,8 @@ export function createSubAgentTool(cwd, agents, getParentProvider, getParentMode
104
68
  "--max-turns",
105
69
  String(SUB_AGENT_MAX_TURNS),
106
70
  ];
107
- // Inherit parent's cache-routing key so all sub-agents in one parent run
108
- // share the same prompt_cache_key prefix instead of each spawning with a
109
- // fresh sessionId-derived key (cold cache every time).
110
- if (parentCacheKey) {
111
- cliArgs.push("--prompt-cache-key", `${parentCacheKey}:subagent`);
71
+ if (childCacheKey) {
72
+ cliArgs.push("--prompt-cache-key", childCacheKey);
112
73
  }
113
74
  if (agentDef?.systemPrompt) {
114
75
  cliArgs.push("--system-prompt", agentDef.systemPrompt);
@@ -152,10 +113,10 @@ export function createSubAgentTool(cwd, agents, getParentProvider, getParentMode
152
113
  const startAttempt = (model, fallbackFrom) => {
153
114
  // Spawn the CLI entry, not process.argv[1]: the desktop host is the
154
115
  // app sidecar and does not understand JSON-mode agent arguments.
155
- const child = spawn(process.execPath, [resolveCliEntry(), ...buildCliArgs(model)], {
116
+ const child = spawn(process.execPath, [resolveSubAgentCliEntry(), ...buildCliArgs(model)], {
156
117
  cwd,
157
118
  stdio: ["ignore", "pipe", "pipe"],
158
- env: { ...process.env },
119
+ env: childSubAgentEnv(),
159
120
  });
160
121
  activeChild = child;
161
122
  activeChildExited = false;
@@ -281,11 +242,7 @@ export function createSubAgentTool(cwd, agents, getParentProvider, getParentMode
281
242
  });
282
243
  return;
283
244
  }
284
- const raw = textOutput || "(no output)";
285
- const result = truncateTail(raw, SUB_AGENT_MAX_OUTPUT_LINES, SUB_AGENT_MAX_OUTPUT_CHARS);
286
- const body = result.truncated
287
- ? `[Sub-agent output truncated: ${result.totalLines} total lines, showing last ${result.keptLines}]\n\n${result.content}`
288
- : result.content;
245
+ const body = boundSubAgentOutput(textOutput);
289
246
  const content = hitMaxTurns
290
247
  ? `[Sub-agent reached its ${maxTurnsLimit}-turn limit — it stopped mid-task and this output may be incomplete.]\n\n${body}`
291
248
  : body;