@ashx-j/lunr 0.2.11 → 0.2.13

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 (342) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +211 -236
  3. package/dist/builtin-extensions/ashxj-tui.d.ts +3 -0
  4. package/dist/builtin-extensions/ashxj-tui.d.ts.map +1 -1
  5. package/dist/builtin-extensions/ashxj-tui.js +28 -11
  6. package/dist/builtin-extensions/ashxj-tui.js.map +1 -1
  7. package/dist/builtin-extensions/index.d.ts.map +1 -1
  8. package/dist/builtin-extensions/index.js +0 -2
  9. package/dist/builtin-extensions/index.js.map +1 -1
  10. package/dist/builtin-extensions/lunr-cron.d.ts +1 -1
  11. package/dist/builtin-extensions/lunr-cron.d.ts.map +1 -1
  12. package/dist/builtin-extensions/lunr-cron.js +1 -1
  13. package/dist/builtin-extensions/lunr-cron.js.map +1 -1
  14. package/dist/builtin-extensions/pi-subagents/src/extension/chain-validation.d.ts.map +1 -1
  15. package/dist/builtin-extensions/pi-subagents/src/extension/chain-validation.js +3 -3
  16. package/dist/builtin-extensions/pi-subagents/src/extension/chain-validation.js.map +1 -1
  17. package/dist/builtin-extensions/pi-subagents/src/extension/doctor.d.ts +0 -2
  18. package/dist/builtin-extensions/pi-subagents/src/extension/doctor.d.ts.map +1 -1
  19. package/dist/builtin-extensions/pi-subagents/src/extension/doctor.js +1 -23
  20. package/dist/builtin-extensions/pi-subagents/src/extension/doctor.js.map +1 -1
  21. package/dist/builtin-extensions/pi-subagents/src/extension/fanout-child.d.ts.map +1 -1
  22. package/dist/builtin-extensions/pi-subagents/src/extension/fanout-child.js +6 -7
  23. package/dist/builtin-extensions/pi-subagents/src/extension/fanout-child.js.map +1 -1
  24. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts +1 -1
  25. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts.map +1 -1
  26. package/dist/builtin-extensions/pi-subagents/src/extension/index.js +7 -14
  27. package/dist/builtin-extensions/pi-subagents/src/extension/index.js.map +1 -1
  28. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.d.ts +12 -9
  29. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.d.ts.map +1 -1
  30. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.js +38 -34
  31. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.js.map +1 -1
  32. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.d.ts +3 -3
  33. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.d.ts.map +1 -1
  34. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.js +32 -47
  35. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.js.map +1 -1
  36. package/dist/builtin-extensions/pi-subagents/src/intercom/intercom-bridge.d.ts +2 -2
  37. package/dist/builtin-extensions/pi-subagents/src/intercom/intercom-bridge.d.ts.map +1 -1
  38. package/dist/builtin-extensions/pi-subagents/src/intercom/intercom-bridge.js.map +1 -1
  39. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.d.ts +7 -10
  40. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.d.ts.map +1 -1
  41. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.js +90 -109
  42. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.js.map +1 -1
  43. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.d.ts +3 -2
  44. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.d.ts.map +1 -1
  45. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.js +37 -50
  46. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.js.map +1 -1
  47. package/dist/builtin-extensions/pi-subagents/src/runs/background/run-status.d.ts.map +1 -1
  48. package/dist/builtin-extensions/pi-subagents/src/runs/background/run-status.js +1 -1
  49. package/dist/builtin-extensions/pi-subagents/src/runs/background/run-status.js.map +1 -1
  50. package/dist/builtin-extensions/pi-subagents/src/runs/background/scheduled-runs.d.ts +4 -0
  51. package/dist/builtin-extensions/pi-subagents/src/runs/background/scheduled-runs.d.ts.map +1 -1
  52. package/dist/builtin-extensions/pi-subagents/src/runs/background/scheduled-runs.js +5 -5
  53. package/dist/builtin-extensions/pi-subagents/src/runs/background/scheduled-runs.js.map +1 -1
  54. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.d.ts.map +1 -1
  55. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js +31 -13
  56. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js.map +1 -1
  57. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.d.ts +2 -2
  58. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.d.ts.map +1 -1
  59. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.js.map +1 -1
  60. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.d.ts +4 -3
  61. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.d.ts.map +1 -1
  62. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js +48 -20
  63. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js.map +1 -1
  64. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.d.ts +2 -2
  65. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.d.ts.map +1 -1
  66. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js +90 -64
  67. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js.map +1 -1
  68. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts +6 -8
  69. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts.map +1 -1
  70. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js +262 -161
  71. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js.map +1 -1
  72. package/dist/builtin-extensions/pi-subagents/src/runs/shared/acceptance.d.ts +2 -1
  73. package/dist/builtin-extensions/pi-subagents/src/runs/shared/acceptance.d.ts.map +1 -1
  74. package/dist/builtin-extensions/pi-subagents/src/runs/shared/acceptance.js +24 -33
  75. package/dist/builtin-extensions/pi-subagents/src/runs/shared/acceptance.js.map +1 -1
  76. package/dist/builtin-extensions/pi-subagents/src/runs/shared/child-tools.d.ts +25 -0
  77. package/dist/builtin-extensions/pi-subagents/src/runs/shared/child-tools.d.ts.map +1 -0
  78. package/dist/builtin-extensions/pi-subagents/src/runs/shared/child-tools.js +51 -0
  79. package/dist/builtin-extensions/pi-subagents/src/runs/shared/child-tools.js.map +1 -0
  80. package/dist/builtin-extensions/pi-subagents/src/runs/shared/dynamic-fanout.d.ts.map +1 -1
  81. package/dist/builtin-extensions/pi-subagents/src/runs/shared/dynamic-fanout.js +20 -3
  82. package/dist/builtin-extensions/pi-subagents/src/runs/shared/dynamic-fanout.js.map +1 -1
  83. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.d.ts +4 -1
  84. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.d.ts.map +1 -1
  85. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.js.map +1 -1
  86. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-args.d.ts +5 -0
  87. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-args.d.ts.map +1 -1
  88. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-args.js +9 -3
  89. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-args.js.map +1 -1
  90. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.d.ts.map +1 -1
  91. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.js +2 -2
  92. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.js.map +1 -1
  93. package/dist/builtin-extensions/pi-subagents/src/runs/shared/task-intent.d.ts +2 -2
  94. package/dist/builtin-extensions/pi-subagents/src/runs/shared/task-intent.d.ts.map +1 -1
  95. package/dist/builtin-extensions/pi-subagents/src/runs/shared/task-intent.js +20 -17
  96. package/dist/builtin-extensions/pi-subagents/src/runs/shared/task-intent.js.map +1 -1
  97. package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.d.ts +70 -0
  98. package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.d.ts.map +1 -0
  99. package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.js +153 -0
  100. package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.js.map +1 -0
  101. package/dist/builtin-extensions/pi-subagents/src/shared/settings.d.ts +13 -8
  102. package/dist/builtin-extensions/pi-subagents/src/shared/settings.d.ts.map +1 -1
  103. package/dist/builtin-extensions/pi-subagents/src/shared/settings.js +20 -51
  104. package/dist/builtin-extensions/pi-subagents/src/shared/settings.js.map +1 -1
  105. package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts +80 -20
  106. package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts.map +1 -1
  107. package/dist/builtin-extensions/pi-subagents/src/shared/types.js +10 -2
  108. package/dist/builtin-extensions/pi-subagents/src/shared/types.js.map +1 -1
  109. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.d.ts +2 -2
  110. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.d.ts.map +1 -1
  111. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.js +20 -32
  112. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.js.map +1 -1
  113. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.d.ts +2 -1
  114. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.d.ts.map +1 -1
  115. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js +23 -449
  116. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js.map +1 -1
  117. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts +2 -1
  118. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts.map +1 -1
  119. package/dist/builtin-extensions/pi-subagents/src/tui/render.js +13 -11
  120. package/dist/builtin-extensions/pi-subagents/src/tui/render.js.map +1 -1
  121. package/dist/builtin-extensions/pi-subagents/src/watchdog/runtime.d.ts +2 -1
  122. package/dist/builtin-extensions/pi-subagents/src/watchdog/runtime.d.ts.map +1 -1
  123. package/dist/builtin-extensions/pi-subagents/src/watchdog/runtime.js +18 -17
  124. package/dist/builtin-extensions/pi-subagents/src/watchdog/runtime.js.map +1 -1
  125. package/dist/builtin-extensions/simple-pi-memory.d.ts +2 -2
  126. package/dist/builtin-extensions/simple-pi-memory.d.ts.map +1 -1
  127. package/dist/builtin-extensions/simple-pi-memory.js +41 -17
  128. package/dist/builtin-extensions/simple-pi-memory.js.map +1 -1
  129. package/dist/catalog/models.json +1 -1
  130. package/dist/catalog/providers/amazon-bedrock.json +1 -1
  131. package/dist/catalog/providers/azure-openai-responses.json +1 -1
  132. package/dist/catalog/providers/cloudflare-ai-gateway.json +1 -1
  133. package/dist/catalog/providers/cloudflare-workers-ai.json +1 -1
  134. package/dist/catalog/providers/fireworks.json +1 -1
  135. package/dist/catalog/providers/github-copilot.json +1 -1
  136. package/dist/catalog/providers/huggingface.json +1 -1
  137. package/dist/catalog/providers/minimax-cn.json +1 -1
  138. package/dist/catalog/providers/minimax.json +1 -1
  139. package/dist/catalog/providers/mistral.json +1 -1
  140. package/dist/catalog/providers/nvidia.json +1 -1
  141. package/dist/catalog/providers/openai.json +1 -1
  142. package/dist/catalog/providers/opencode-go.json +1 -1
  143. package/dist/catalog/providers/opencode.json +1 -1
  144. package/dist/catalog/providers/openrouter.json +1 -1
  145. package/dist/catalog/providers/qwen-cloud-cn.json +1 -1
  146. package/dist/catalog/providers/qwen-cloud.json +1 -1
  147. package/dist/catalog/providers/qwen-token-plan-cn.json +1 -1
  148. package/dist/catalog/providers/qwen-token-plan.json +1 -1
  149. package/dist/catalog/providers/together.json +1 -1
  150. package/dist/catalog/providers/vercel-ai-gateway.json +1 -1
  151. package/dist/catalog/providers/zai-coding-cn.json +1 -1
  152. package/dist/catalog/providers/zai.json +1 -1
  153. package/dist/catalog/publication.json +3 -3
  154. package/dist/core/agent-session.d.ts +7 -1
  155. package/dist/core/agent-session.d.ts.map +1 -1
  156. package/dist/core/agent-session.js +34 -4
  157. package/dist/core/agent-session.js.map +1 -1
  158. package/dist/core/context-breakdown.d.ts +3 -1
  159. package/dist/core/context-breakdown.d.ts.map +1 -1
  160. package/dist/core/context-breakdown.js +5 -2
  161. package/dist/core/context-breakdown.js.map +1 -1
  162. package/dist/core/customize.d.ts +2 -0
  163. package/dist/core/customize.d.ts.map +1 -1
  164. package/dist/core/customize.js +6 -0
  165. package/dist/core/customize.js.map +1 -1
  166. package/dist/core/memory-cap.d.ts +4 -8
  167. package/dist/core/memory-cap.d.ts.map +1 -1
  168. package/dist/core/memory-cap.js +8 -8
  169. package/dist/core/memory-cap.js.map +1 -1
  170. package/dist/core/permissions.d.ts +2 -0
  171. package/dist/core/permissions.d.ts.map +1 -1
  172. package/dist/core/permissions.js +30 -14
  173. package/dist/core/permissions.js.map +1 -1
  174. package/dist/core/plan-mode.d.ts.map +1 -1
  175. package/dist/core/plan-mode.js +1 -9
  176. package/dist/core/plan-mode.js.map +1 -1
  177. package/dist/core/rollback.d.ts.map +1 -1
  178. package/dist/core/rollback.js +1 -1
  179. package/dist/core/rollback.js.map +1 -1
  180. package/dist/core/settings-manager.d.ts +16 -5
  181. package/dist/core/settings-manager.d.ts.map +1 -1
  182. package/dist/core/settings-manager.js +37 -10
  183. package/dist/core/settings-manager.js.map +1 -1
  184. package/dist/core/slash-commands.d.ts.map +1 -1
  185. package/dist/core/slash-commands.js +1 -5
  186. package/dist/core/slash-commands.js.map +1 -1
  187. package/dist/core/subagent-permission-inherit.d.ts +34 -22
  188. package/dist/core/subagent-permission-inherit.d.ts.map +1 -1
  189. package/dist/core/subagent-permission-inherit.js +37 -80
  190. package/dist/core/subagent-permission-inherit.js.map +1 -1
  191. package/dist/core/swarm.d.ts.map +1 -1
  192. package/dist/core/swarm.js +13 -7
  193. package/dist/core/swarm.js.map +1 -1
  194. package/dist/core/system-prompt.d.ts +6 -4
  195. package/dist/core/system-prompt.d.ts.map +1 -1
  196. package/dist/core/system-prompt.js +38 -48
  197. package/dist/core/system-prompt.js.map +1 -1
  198. package/dist/core/usage-adapters/openai-codex.d.ts +1 -1
  199. package/dist/core/usage-adapters/openai-codex.d.ts.map +1 -1
  200. package/dist/core/usage-adapters/openai-codex.js +22 -17
  201. package/dist/core/usage-adapters/openai-codex.js.map +1 -1
  202. package/dist/core/usage-service.d.ts +10 -1
  203. package/dist/core/usage-service.d.ts.map +1 -1
  204. package/dist/core/usage-service.js +17 -6
  205. package/dist/core/usage-service.js.map +1 -1
  206. package/dist/gateway/agent-bridge.d.ts.map +1 -1
  207. package/dist/gateway/agent-bridge.js +1 -4
  208. package/dist/gateway/agent-bridge.js.map +1 -1
  209. package/dist/gateway/cron.d.ts.map +1 -1
  210. package/dist/gateway/cron.js +1 -4
  211. package/dist/gateway/cron.js.map +1 -1
  212. package/dist/index.d.ts +1 -1
  213. package/dist/index.d.ts.map +1 -1
  214. package/dist/index.js.map +1 -1
  215. package/dist/main.d.ts.map +1 -1
  216. package/dist/main.js +0 -5
  217. package/dist/main.js.map +1 -1
  218. package/dist/migrations.d.ts +2 -0
  219. package/dist/migrations.d.ts.map +1 -1
  220. package/dist/migrations.js +21 -0
  221. package/dist/migrations.js.map +1 -1
  222. package/dist/modes/interactive/components/settings-selector.d.ts +7 -4
  223. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  224. package/dist/modes/interactive/components/settings-selector.js +122 -162
  225. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  226. package/dist/modes/interactive/components/usage-view.d.ts +1 -1
  227. package/dist/modes/interactive/components/usage-view.d.ts.map +1 -1
  228. package/dist/modes/interactive/components/usage-view.js +7 -4
  229. package/dist/modes/interactive/components/usage-view.js.map +1 -1
  230. package/dist/modes/interactive/interactive-mode.d.ts +1 -2
  231. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  232. package/dist/modes/interactive/interactive-mode.js +55 -96
  233. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  234. package/dist/modes/interactive/skill-tag-autocomplete.d.ts +13 -0
  235. package/dist/modes/interactive/skill-tag-autocomplete.d.ts.map +1 -0
  236. package/dist/modes/interactive/skill-tag-autocomplete.js +72 -0
  237. package/dist/modes/interactive/skill-tag-autocomplete.js.map +1 -0
  238. package/docs/compaction.md +23 -23
  239. package/docs/containerization.md +24 -24
  240. package/docs/custom-provider.md +18 -18
  241. package/docs/development.md +16 -15
  242. package/docs/docs.json +6 -2
  243. package/docs/extensions.md +82 -80
  244. package/docs/features.md +102 -0
  245. package/docs/index.md +25 -19
  246. package/docs/json.md +7 -7
  247. package/docs/keybindings.md +4 -4
  248. package/docs/models.md +2 -2
  249. package/docs/packages.md +38 -42
  250. package/docs/prompt-templates.md +4 -4
  251. package/docs/providers.md +22 -10
  252. package/docs/quickstart.md +81 -46
  253. package/docs/rpc.md +7 -13
  254. package/docs/sdk.md +43 -41
  255. package/docs/security.md +18 -18
  256. package/docs/session-format.md +9 -9
  257. package/docs/sessions.md +13 -12
  258. package/docs/settings.md +63 -24
  259. package/docs/shell-aliases.md +2 -2
  260. package/docs/skills.md +21 -11
  261. package/docs/terminal-setup.md +5 -5
  262. package/docs/termux.md +7 -7
  263. package/docs/themes.md +12 -14
  264. package/docs/tmux.md +4 -4
  265. package/docs/tui.md +23 -23
  266. package/docs/usage.md +112 -87
  267. package/docs/windows.md +10 -2
  268. package/examples/README.md +3 -1
  269. package/examples/extensions/README.md +6 -6
  270. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  271. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  272. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  273. package/examples/extensions/doom-overlay/README.md +2 -2
  274. package/examples/extensions/gondolin/package-lock.json +2 -2
  275. package/examples/extensions/gondolin/package.json +1 -1
  276. package/examples/extensions/plan-mode/README.md +3 -1
  277. package/examples/extensions/sandbox/package-lock.json +2 -2
  278. package/examples/extensions/sandbox/package.json +1 -1
  279. package/examples/extensions/subagent/README.md +13 -11
  280. package/examples/extensions/todo.ts +2 -1
  281. package/examples/extensions/with-deps/package-lock.json +2 -2
  282. package/examples/extensions/with-deps/package.json +1 -1
  283. package/examples/sdk/README.md +9 -5
  284. package/package.json +6 -7
  285. package/dist/builtin-extensions/lunr-behavior.d.ts +0 -44
  286. package/dist/builtin-extensions/lunr-behavior.d.ts.map +0 -1
  287. package/dist/builtin-extensions/lunr-behavior.js +0 -213
  288. package/dist/builtin-extensions/lunr-behavior.js.map +0 -1
  289. package/dist/builtin-extensions/pi-subagents/agents/context-builder.md +0 -46
  290. package/dist/builtin-extensions/pi-subagents/agents/deep-researcher.md +0 -36
  291. package/dist/builtin-extensions/pi-subagents/agents/delegate.md +0 -12
  292. package/dist/builtin-extensions/pi-subagents/agents/oracle.md +0 -73
  293. package/dist/builtin-extensions/pi-subagents/agents/planner.md +0 -55
  294. package/dist/builtin-extensions/pi-subagents/agents/research-writer.md +0 -37
  295. package/dist/builtin-extensions/pi-subagents/agents/researcher.md +0 -52
  296. package/dist/builtin-extensions/pi-subagents/agents/reviewer.md +0 -79
  297. package/dist/builtin-extensions/pi-subagents/agents/scout.md +0 -50
  298. package/dist/builtin-extensions/pi-subagents/agents/worker.md +0 -55
  299. package/dist/builtin-extensions/pi-subagents/src/agents/agent-management.d.ts +0 -20
  300. package/dist/builtin-extensions/pi-subagents/src/agents/agent-management.d.ts.map +0 -1
  301. package/dist/builtin-extensions/pi-subagents/src/agents/agent-management.js +0 -1273
  302. package/dist/builtin-extensions/pi-subagents/src/agents/agent-management.js.map +0 -1
  303. package/dist/builtin-extensions/pi-subagents/src/agents/agent-memory.d.ts +0 -49
  304. package/dist/builtin-extensions/pi-subagents/src/agents/agent-memory.d.ts.map +0 -1
  305. package/dist/builtin-extensions/pi-subagents/src/agents/agent-memory.js +0 -252
  306. package/dist/builtin-extensions/pi-subagents/src/agents/agent-memory.js.map +0 -1
  307. package/dist/builtin-extensions/pi-subagents/src/agents/agent-scope.d.ts +0 -3
  308. package/dist/builtin-extensions/pi-subagents/src/agents/agent-scope.d.ts.map +0 -1
  309. package/dist/builtin-extensions/pi-subagents/src/agents/agent-scope.js +0 -6
  310. package/dist/builtin-extensions/pi-subagents/src/agents/agent-scope.js.map +0 -1
  311. package/dist/builtin-extensions/pi-subagents/src/agents/agent-selection.d.ts +0 -3
  312. package/dist/builtin-extensions/pi-subagents/src/agents/agent-selection.d.ts.map +0 -1
  313. package/dist/builtin-extensions/pi-subagents/src/agents/agent-selection.js +0 -23
  314. package/dist/builtin-extensions/pi-subagents/src/agents/agent-selection.js.map +0 -1
  315. package/dist/builtin-extensions/pi-subagents/src/agents/agent-serializer.d.ts +0 -8
  316. package/dist/builtin-extensions/pi-subagents/src/agents/agent-serializer.d.ts.map +0 -1
  317. package/dist/builtin-extensions/pi-subagents/src/agents/agent-serializer.js +0 -143
  318. package/dist/builtin-extensions/pi-subagents/src/agents/agent-serializer.js.map +0 -1
  319. package/dist/builtin-extensions/pi-subagents/src/agents/agents.d.ts +0 -176
  320. package/dist/builtin-extensions/pi-subagents/src/agents/agents.d.ts.map +0 -1
  321. package/dist/builtin-extensions/pi-subagents/src/agents/agents.js +0 -1326
  322. package/dist/builtin-extensions/pi-subagents/src/agents/agents.js.map +0 -1
  323. package/dist/builtin-extensions/pi-subagents/src/agents/chain-serializer.d.ts +0 -7
  324. package/dist/builtin-extensions/pi-subagents/src/agents/chain-serializer.d.ts.map +0 -1
  325. package/dist/builtin-extensions/pi-subagents/src/agents/chain-serializer.js +0 -307
  326. package/dist/builtin-extensions/pi-subagents/src/agents/chain-serializer.js.map +0 -1
  327. package/dist/builtin-extensions/pi-subagents/src/agents/identity.d.ts +0 -8
  328. package/dist/builtin-extensions/pi-subagents/src/agents/identity.d.ts.map +0 -1
  329. package/dist/builtin-extensions/pi-subagents/src/agents/identity.js +0 -30
  330. package/dist/builtin-extensions/pi-subagents/src/agents/identity.js.map +0 -1
  331. package/dist/builtin-extensions/pi-subagents/src/agents/proactive-skills.d.ts +0 -35
  332. package/dist/builtin-extensions/pi-subagents/src/agents/proactive-skills.d.ts.map +0 -1
  333. package/dist/builtin-extensions/pi-subagents/src/agents/proactive-skills.js +0 -151
  334. package/dist/builtin-extensions/pi-subagents/src/agents/proactive-skills.js.map +0 -1
  335. package/dist/builtin-extensions/pi-subagents/src/profiles/profiles.d.ts +0 -131
  336. package/dist/builtin-extensions/pi-subagents/src/profiles/profiles.d.ts.map +0 -1
  337. package/dist/builtin-extensions/pi-subagents/src/profiles/profiles.js +0 -491
  338. package/dist/builtin-extensions/pi-subagents/src/profiles/profiles.js.map +0 -1
  339. package/dist/core/behavior-preset.d.ts +0 -60
  340. package/dist/core/behavior-preset.d.ts.map +0 -1
  341. package/dist/core/behavior-preset.js +0 -257
  342. package/dist/core/behavior-preset.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/shared/settings.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\n/**\n * Chain behavior, template resolution, and directory management\n */\n\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { AgentConfig } from \"../agents/agents.ts\";\nimport { normalizeSkillInput } from \"../agents/skills.ts\";\nimport { CHAIN_RUNS_DIR, type AcceptanceInput, type JsonSchemaObject, type OutputMode, type ToolBudgetConfig } from \"./types.ts\";\nconst CHAIN_DIR_MAX_AGE_MS = 24 * 60 * 60 * 1000; // 24 hours\nconst INITIAL_PROGRESS_CONTENT = \"# Progress\\n\\n## Status\\nIn Progress\\n\\n## Tasks\\n\\n## Files Changed\\n\\n## Notes\\n\";\n\n// =============================================================================\n// Behavior Resolution Types\n// =============================================================================\n\nexport interface ResolvedStepBehavior {\n\toutput: string | false;\n\toutputMode: OutputMode;\n\treads: string[] | false;\n\tprogress: boolean;\n\tskills: string[] | false;\n\tmodel?: string;\n}\n\nexport interface StepOverrides {\n\toutput?: string | false;\n\toutputMode?: OutputMode;\n\treads?: string[] | false;\n\tprogress?: boolean;\n\tskills?: string[] | false;\n\tmodel?: string;\n}\n\nfunction normalizeOutputOverride(output: string | false | undefined): string | false | undefined {\n\treturn output === \"false\" ? false : output;\n}\n\n// =============================================================================\n// Chain Step Types\n// =============================================================================\n\n/** Sequential step: single agent execution */\nexport interface SequentialStep {\n\tagent: string;\n\ttask?: string;\n\tphase?: string;\n\tlabel?: string;\n\tas?: string;\n\toutputSchema?: JsonSchemaObject;\n\tcwd?: string;\n\toutput?: string | false;\n\toutputMode?: OutputMode;\n\treads?: string[] | false;\n\tprogress?: boolean;\n\tskill?: string | string[] | false;\n\tmodel?: string;\n\ttoolBudget?: ToolBudgetConfig;\n\tacceptance?: AcceptanceInput;\n}\n\n/** Parallel task item within a parallel step */\nexport interface ParallelTaskItem {\n\tagent: string;\n\ttask?: string;\n\tphase?: string;\n\tlabel?: string;\n\tas?: string;\n\toutputSchema?: JsonSchemaObject;\n\tcwd?: string;\n\tcount?: number;\n\toutput?: string | false;\n\toutputMode?: OutputMode;\n\treads?: string[] | false;\n\tprogress?: boolean;\n\tskill?: string | string[] | false;\n\tmodel?: string;\n\ttoolBudget?: ToolBudgetConfig;\n\tacceptance?: AcceptanceInput;\n}\n\nexport interface DynamicExpandSpec {\n\tfrom: {\n\t\toutput: string;\n\t\tpath: string;\n\t};\n\titem?: string;\n\tkey?: string;\n\tmaxItems?: number;\n\tonEmpty?: \"skip\" | \"fail\";\n}\n\nexport type DynamicParallelTemplate = Omit<ParallelTaskItem, \"as\" | \"count\">;\n\nexport interface DynamicCollectSpec {\n\tas: string;\n\toutputSchema?: JsonSchemaObject;\n}\n\nexport interface DynamicParallelStep {\n\texpand: DynamicExpandSpec;\n\tparallel: DynamicParallelTemplate;\n\tcollect: DynamicCollectSpec;\n\tconcurrency?: number;\n\tfailFast?: boolean;\n\tphase?: string;\n\tlabel?: string;\n\tacceptance?: AcceptanceInput;\n}\n\n/** Parallel step: multiple agents running concurrently */\nexport interface ParallelStep {\n\tparallel: ParallelTaskItem[];\n\tconcurrency?: number;\n\tfailFast?: boolean;\n\tworktree?: boolean;\n\tcwd?: string;\n}\n\n/** Union type for chain steps */\nexport type ChainStep = SequentialStep | ParallelStep | DynamicParallelStep;\n\n// =============================================================================\n// Type Guards\n// =============================================================================\n\nexport function isParallelStep(step: ChainStep): step is ParallelStep {\n\treturn \"parallel\" in step && Array.isArray((step as ParallelStep).parallel);\n}\n\nexport function isDynamicParallelStep(step: ChainStep): step is DynamicParallelStep {\n\treturn \"expand\" in step && \"collect\" in step && \"parallel\" in step && !Array.isArray((step as { parallel?: unknown }).parallel);\n}\n\n/** Get all agent names in a step (single for sequential, multiple for parallel) */\nexport function getStepAgents(step: ChainStep): string[] {\n\tif (isParallelStep(step)) {\n\t\treturn step.parallel.map((t) => t.agent);\n\t}\n\tif (isDynamicParallelStep(step)) {\n\t\treturn [step.parallel.agent];\n\t}\n\treturn [step.agent];\n}\n\n// =============================================================================\n// Chain Directory Management\n// =============================================================================\n\nexport function createChainDir(runId: string, baseDir?: string): string {\n\tconst chainDir = path.join(baseDir ? path.resolve(baseDir) : CHAIN_RUNS_DIR, runId);\n\tfs.mkdirSync(chainDir, { recursive: true });\n\treturn chainDir;\n}\n\nexport function removeChainDir(chainDir: string): void {\n\ttry {\n\t\tfs.rmSync(chainDir, { recursive: true });\n\t} catch {\n\t\t// Chain cleanup is best-effort. Runs can already have cleaned their temp dir.\n\t}\n}\n\nexport function cleanupOldChainDirs(): void {\n\tif (!fs.existsSync(CHAIN_RUNS_DIR)) return;\n\tconst now = Date.now();\n\tlet dirs: string[];\n\ttry {\n\t\tdirs = fs.readdirSync(CHAIN_RUNS_DIR);\n\t} catch {\n\t\t// Startup cleanup is best-effort. If the scoped temp root is unreadable,\n\t\t// skip cleanup instead of failing extension startup.\n\t\treturn;\n\t}\n\n\tfor (const dir of dirs) {\n\t\ttry {\n\t\t\tconst dirPath = path.join(CHAIN_RUNS_DIR, dir);\n\t\t\tconst stat = fs.statSync(dirPath);\n\t\t\tif (stat.isDirectory() && now - stat.mtimeMs > CHAIN_DIR_MAX_AGE_MS) {\n\t\t\t\tfs.rmSync(dirPath, { recursive: true });\n\t\t\t}\n\t\t} catch {\n\t\t\t// Skip directories that can't be processed; continue with others\n\t\t}\n\t}\n}\n\n// =============================================================================\n// Template Resolution\n// =============================================================================\n\n/** Resolved templates for a chain - string for sequential, string[] for parallel */\nexport type ResolvedTemplates = (string | string[])[];\n\n/**\n * Resolve templates for a chain with parallel step support.\n * Returns string for sequential steps, string[] for parallel steps.\n */\nexport function resolveChainTemplates(\n\tsteps: ChainStep[],\n): ResolvedTemplates {\n\treturn steps.map((step, i) => {\n\t\tif (isParallelStep(step)) {\n\t\t\t// Parallel step: resolve each task's template\n\t\t\treturn step.parallel.map((task) => {\n\t\t\t\tif (task.task) return task.task;\n\t\t\t\t// Default for parallel tasks is {previous}\n\t\t\t\treturn \"{previous}\";\n\t\t\t});\n\t\t}\n\t\tif (isDynamicParallelStep(step)) {\n\t\t\treturn step.parallel.task ?? \"{previous}\";\n\t\t}\n\t\t// Sequential step: existing logic\n\t\tconst seq = step as SequentialStep;\n\t\tif (seq.task) return seq.task;\n\t\t// Default: first step uses {task}, others use {previous}\n\t\treturn i === 0 ? \"{task}\" : \"{previous}\";\n\t});\n}\n\n// =============================================================================\n// Behavior Resolution\n// =============================================================================\n\n/**\n * Resolve effective chain behavior per step.\n * Priority: step override > agent frontmatter > false (disabled)\n */\nexport function resolveStepBehavior(\n\tagentConfig: AgentConfig,\n\tstepOverrides: StepOverrides,\n\tchainSkills?: string[],\n): ResolvedStepBehavior {\n\t// Output: step override > frontmatter > false (no output)\n\tconst stepOutput = normalizeOutputOverride(stepOverrides.output);\n\tconst output =\n\t\tstepOutput !== undefined\n\t\t\t? stepOutput\n\t\t\t: normalizeOutputOverride(agentConfig.output) ?? false;\n\n\t// Reads: step override > frontmatter defaultReads > false (no reads)\n\tconst reads =\n\t\tstepOverrides.reads !== undefined\n\t\t\t? stepOverrides.reads\n\t\t\t: agentConfig.defaultReads ?? false;\n\n\t// Progress: step override > frontmatter defaultProgress > false\n\tconst progress =\n\t\tstepOverrides.progress !== undefined\n\t\t\t? stepOverrides.progress\n\t\t\t: agentConfig.defaultProgress ?? false;\n\n\tlet skills: string[] | false;\n\tif (stepOverrides.skills === false) {\n\t\tskills = false;\n\t} else if (stepOverrides.skills !== undefined) {\n\t\tskills = [...stepOverrides.skills];\n\t\tif (chainSkills && chainSkills.length > 0) {\n\t\t\tskills = [...new Set([...skills, ...chainSkills])];\n\t\t}\n\t} else {\n\t\tskills = agentConfig.skills ? [...agentConfig.skills] : [];\n\t\tif (chainSkills && chainSkills.length > 0) {\n\t\t\tskills = [...new Set([...skills, ...chainSkills])];\n\t\t}\n\t}\n\n\tconst outputMode = stepOverrides.outputMode ?? \"inline\";\n\tconst model = stepOverrides.model ?? agentConfig.model;\n\treturn { output, outputMode, reads, progress, skills, model };\n}\n\nexport function resolveTaskTextForFileUpdatePolicy(task: string | undefined, originalTask?: string): string | undefined {\n\tif (!task) return originalTask;\n\treturn originalTask ? task.replaceAll(\"{task}\", originalTask) : task;\n}\n\nexport function taskDisallowsFileUpdates(task: string | undefined): boolean {\n\tif (!task) return false;\n\treturn /\\breview[- ]only\\b/i.test(task)\n\t\t|| /\\bread[- ]only\\s+(?:review|audit|inspection|pass)\\b/i.test(task)\n\t\t|| /\\b(?:no|without)\\s+(?:file\\s+)?edits?\\b/i.test(task)\n\t\t|| /\\b(?:do not|don't|must not)\\s+(?:edit|modify|write|touch)\\b/i.test(task)\n\t\t|| /\\bleave\\s+files?\\s+unchanged\\b/i.test(task);\n}\n\nexport function suppressProgressForReadOnlyTask(behavior: ResolvedStepBehavior, task: string | undefined, originalTask?: string): ResolvedStepBehavior {\n\tconst policyTask = resolveTaskTextForFileUpdatePolicy(task, originalTask);\n\treturn behavior.progress && taskDisallowsFileUpdates(policyTask) ? { ...behavior, progress: false } : behavior;\n}\n\n// =============================================================================\n// Chain Instruction Injection\n// =============================================================================\n\n/**\n * Resolve a file path: absolute paths pass through, relative paths get chainDir prepended.\n */\nfunction resolveChainPath(filePath: string, chainDir: string): string {\n\treturn path.isAbsolute(filePath) ? filePath : path.join(chainDir, filePath);\n}\n\n/**\n * Build chain instructions from resolved behavior.\n * These are appended to the task to tell the agent what to read/write.\n */\nexport function writeInitialProgressFile(progressDir: string): void {\n\tfs.mkdirSync(progressDir, { recursive: true });\n\tfs.writeFileSync(path.join(progressDir, \"progress.md\"), INITIAL_PROGRESS_CONTENT);\n}\n\nexport function buildChainInstructions(\n\tbehavior: ResolvedStepBehavior,\n\tchainDir: string,\n\tisFirstProgressAgent: boolean,\n\tpreviousSummary?: string,\n): { prefix: string; suffix: string } {\n\tconst prefixParts: string[] = [];\n\tconst suffixParts: string[] = [];\n\n\t// READS - prepend to override any hardcoded filenames in task text\n\tif (behavior.reads && behavior.reads.length > 0) {\n\t\tconst files = behavior.reads.map((f) => resolveChainPath(f, chainDir));\n\t\tprefixParts.push(`[Read from: ${files.join(\", \")}]`);\n\t}\n\n\t// OUTPUT - prepend so agent knows where to write\n\tif (behavior.output) {\n\t\tconst outputPath = resolveChainPath(behavior.output, chainDir);\n\t\tprefixParts.push(`[Write to: ${outputPath}]`);\n\t}\n\n\t// Progress instructions in suffix (less critical)\n\tif (behavior.progress) {\n\t\tconst progressPath = path.join(chainDir, \"progress.md\");\n\t\tif (isFirstProgressAgent) {\n\t\t\tsuffixParts.push(`Create and maintain progress at: ${progressPath}`);\n\t\t} else {\n\t\t\tsuffixParts.push(`Update progress at: ${progressPath}`);\n\t\t}\n\t}\n\n\t// Include previous step's summary in suffix if available\n\tif (previousSummary && previousSummary.trim()) {\n\t\tsuffixParts.push(`Previous step output:\\n${previousSummary.trim()}`);\n\t}\n\n\tconst prefix = prefixParts.length > 0 \n\t\t? prefixParts.join(\"\\n\") + \"\\n\\n\"\n\t\t: \"\";\n\t\n\tconst suffix = suffixParts.length > 0\n\t\t? \"\\n\\n---\\n\" + suffixParts.join(\"\\n\")\n\t\t: \"\";\n\n\treturn { prefix, suffix };\n}\n\n// =============================================================================\n// Parallel Step Support\n// =============================================================================\n\n/**\n * Resolve behaviors for all tasks in a parallel step.\n * Creates namespaced output paths to avoid collisions.\n */\nexport function resolveParallelBehaviors(\n\ttasks: ParallelTaskItem[],\n\tagentConfigs: AgentConfig[],\n\tstepIndex: number,\n\tchainSkills?: string[],\n): ResolvedStepBehavior[] {\n\treturn tasks.map((task, taskIndex) => {\n\t\tconst config = agentConfigs.find((a) => a.name === task.agent);\n\t\tif (!config) {\n\t\t\tthrow new Error(`Unknown agent: ${task.agent}`);\n\t\t}\n\n\t\t// Build subdirectory path for this parallel task\n\t\tconst subdir = path.join(`parallel-${stepIndex}`, `${taskIndex}-${task.agent}`);\n\n\t\t// Output: task override > agent default (namespaced) > false\n\t\t// Absolute paths pass through unchanged; relative paths get namespaced under subdir\n\t\tlet output: string | false = false;\n\t\tconst taskOutput = normalizeOutputOverride(task.output);\n\t\tconst configOutput = normalizeOutputOverride(config.output);\n\t\tif (taskOutput !== undefined) {\n\t\t\tif (taskOutput === false) {\n\t\t\t\toutput = false;\n\t\t\t} else if (path.isAbsolute(taskOutput)) {\n\t\t\t\toutput = taskOutput; // Absolute path: use as-is\n\t\t\t} else {\n\t\t\t\toutput = path.join(subdir, taskOutput); // Relative: namespace under subdir\n\t\t\t}\n\t\t} else if (configOutput) {\n\t\t\t// Agent defaults are always relative, so namespace them\n\t\t\toutput = path.join(subdir, configOutput);\n\t\t}\n\n\t\t// Reads: task override > agent default > false\n\t\tconst reads =\n\t\t\ttask.reads !== undefined ? task.reads : config.defaultReads ?? false;\n\n\t\t// Progress: task override > agent default > false\n\t\tconst progress =\n\t\t\ttask.progress !== undefined\n\t\t\t\t? task.progress\n\t\t\t\t: config.defaultProgress ?? false;\n\n\t\tconst taskSkillInput = normalizeSkillInput(task.skill);\n\t\tlet skills: string[] | false;\n\t\tif (taskSkillInput === false) {\n\t\t\tskills = false;\n\t\t} else if (taskSkillInput !== undefined) {\n\t\t\tskills = [...taskSkillInput];\n\t\t\tif (chainSkills && chainSkills.length > 0) {\n\t\t\t\tskills = [...new Set([...skills, ...chainSkills])];\n\t\t\t}\n\t\t} else {\n\t\t\tskills = config.skills ? [...config.skills] : [];\n\t\t\tif (chainSkills && chainSkills.length > 0) {\n\t\t\t\tskills = [...new Set([...skills, ...chainSkills])];\n\t\t\t}\n\t\t}\n\n\t\tconst outputMode = task.outputMode ?? \"inline\";\n\t\tconst model = task.model ?? config.model;\n\t\treturn { output, outputMode, reads, progress, skills, model };\n\t});\n}\n\n/**\n * Create subdirectories for parallel step outputs\n */\nexport function createParallelDirs(\n\tchainDir: string,\n\tstepIndex: number,\n\ttaskCount: number,\n\tagentNames: string[],\n): void {\n\tfor (let i = 0; i < taskCount; i++) {\n\t\tconst subdir = path.join(chainDir, `parallel-${stepIndex}`, `${i}-${agentNames[i]}`);\n\t\tfs.mkdirSync(subdir, { recursive: true });\n\t}\n}\n\nexport type { ParallelTaskResult } from \"../runs/shared/parallel-utils.ts\";\nexport { aggregateParallelOutputs } from \"../runs/shared/parallel-utils.ts\";\n"]}
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/shared/settings.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\n/**\n * Chain behavior, template resolution, and directory management\n */\n\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { normalizeSkillInput } from \"../agents/skills.ts\";\nimport { CHAIN_RUNS_DIR, type AcceptanceInput, type JsonSchemaObject, type OutputMode, type ToolBudgetConfig } from \"./types.ts\";\nconst CHAIN_DIR_MAX_AGE_MS = 24 * 60 * 60 * 1000; // 24 hours\nconst INITIAL_PROGRESS_CONTENT = \"# Progress\\n\\n## Status\\nIn Progress\\n\\n## Tasks\\n\\n## Files Changed\\n\\n## Notes\\n\";\n\n// =============================================================================\n// Behavior Resolution Types\n// =============================================================================\n\nexport interface ResolvedStepBehavior {\n\toutput: string | false;\n\toutputMode: OutputMode;\n\treads: string[] | false;\n\tprogress: boolean;\n\tskills: string[] | false;\n\tmodel?: string;\n}\n\nexport interface StepOverrides {\n\toutput?: string | false;\n\toutputMode?: OutputMode;\n\treads?: string[] | false;\n\tprogress?: boolean;\n\tskills?: string[] | false;\n\tmodel?: string;\n}\n\nfunction normalizeOutputOverride(output: string | false | undefined): string | false | undefined {\n\treturn output === \"false\" ? false : output;\n}\n\n// =============================================================================\n// Chain Step Types\n// =============================================================================\n\n/** Sequential step: single generic child execution */\nexport interface SequentialStep {\n\tagent?: string;\n\ttask?: string;\n\tdescription?: string;\n\tpermissions?: \"full\" | \"read-only\";\n\tphase?: string;\n\tlabel?: string;\n\tas?: string;\n\toutputSchema?: JsonSchemaObject;\n\tcwd?: string;\n\toutput?: string | false;\n\toutputMode?: OutputMode;\n\treads?: string[] | false;\n\tprogress?: boolean;\n\tskill?: string | string[] | false;\n\tmodel?: string;\n\ttier?: \"light\" | \"standard\" | \"heavy\";\n\ttoolBudget?: ToolBudgetConfig;\n\tacceptance?: AcceptanceInput;\n}\n\n/** Parallel task item within a parallel step */\nexport interface ParallelTaskItem {\n\tagent?: string;\n\ttask?: string;\n\tdescription?: string;\n\tpermissions?: \"full\" | \"read-only\";\n\tphase?: string;\n\tlabel?: string;\n\tas?: string;\n\toutputSchema?: JsonSchemaObject;\n\tcwd?: string;\n\tcount?: number;\n\toutput?: string | false;\n\toutputMode?: OutputMode;\n\treads?: string[] | false;\n\tprogress?: boolean;\n\tskill?: string | string[] | false;\n\tmodel?: string;\n\ttier?: \"light\" | \"standard\" | \"heavy\";\n\ttoolBudget?: ToolBudgetConfig;\n\tacceptance?: AcceptanceInput;\n}\n\nexport interface DynamicExpandSpec {\n\tfrom: {\n\t\toutput: string;\n\t\tpath: string;\n\t};\n\titem?: string;\n\tkey?: string;\n\tmaxItems?: number;\n\tonEmpty?: \"skip\" | \"fail\";\n}\n\nexport type DynamicParallelTemplate = Omit<ParallelTaskItem, \"as\" | \"count\">;\n\nexport interface DynamicCollectSpec {\n\tas: string;\n\toutputSchema?: JsonSchemaObject;\n}\n\nexport interface DynamicParallelStep {\n\texpand: DynamicExpandSpec;\n\tparallel: DynamicParallelTemplate;\n\tcollect: DynamicCollectSpec;\n\tconcurrency?: number;\n\tfailFast?: boolean;\n\tphase?: string;\n\tlabel?: string;\n\tacceptance?: AcceptanceInput;\n}\n\n/** Parallel step: multiple agents running concurrently */\nexport interface ParallelStep {\n\tparallel: ParallelTaskItem[];\n\tconcurrency?: number;\n\tfailFast?: boolean;\n\tworktree?: boolean;\n\tcwd?: string;\n}\n\n/** Union type for chain steps */\nexport type ChainStep = SequentialStep | ParallelStep | DynamicParallelStep;\n\n// =============================================================================\n// Type Guards\n// =============================================================================\n\nexport function isParallelStep(step: ChainStep): step is ParallelStep {\n\treturn \"parallel\" in step && Array.isArray((step as ParallelStep).parallel);\n}\n\nexport function isDynamicParallelStep(step: ChainStep): step is DynamicParallelStep {\n\treturn \"expand\" in step && \"collect\" in step && \"parallel\" in step && !Array.isArray((step as { parallel?: unknown }).parallel);\n}\n\n/** Get display labels (description) for children in a step. */\nexport function getStepAgents(step: ChainStep): string[] {\n\tif (isParallelStep(step)) {\n\t\treturn step.parallel.map((t) => t.description || t.label || t.agent || \"child\");\n\t}\n\tif (isDynamicParallelStep(step)) {\n\t\treturn [step.parallel.description || step.parallel.label || step.parallel.agent || \"child\"];\n\t}\n\treturn [step.description || step.label || step.agent || \"child\"];\n}\n\n// =============================================================================\n// Chain Directory Management\n// =============================================================================\n\nexport function createChainDir(runId: string, baseDir?: string): string {\n\tconst chainDir = path.join(baseDir ? path.resolve(baseDir) : CHAIN_RUNS_DIR, runId);\n\tfs.mkdirSync(chainDir, { recursive: true });\n\treturn chainDir;\n}\n\nexport function removeChainDir(chainDir: string): void {\n\ttry {\n\t\tfs.rmSync(chainDir, { recursive: true });\n\t} catch {\n\t\t// Chain cleanup is best-effort. Runs can already have cleaned their temp dir.\n\t}\n}\n\nexport function cleanupOldChainDirs(): void {\n\tif (!fs.existsSync(CHAIN_RUNS_DIR)) return;\n\tconst now = Date.now();\n\tlet dirs: string[];\n\ttry {\n\t\tdirs = fs.readdirSync(CHAIN_RUNS_DIR);\n\t} catch {\n\t\t// Startup cleanup is best-effort. If the scoped temp root is unreadable,\n\t\t// skip cleanup instead of failing extension startup.\n\t\treturn;\n\t}\n\n\tfor (const dir of dirs) {\n\t\ttry {\n\t\t\tconst dirPath = path.join(CHAIN_RUNS_DIR, dir);\n\t\t\tconst stat = fs.statSync(dirPath);\n\t\t\tif (stat.isDirectory() && now - stat.mtimeMs > CHAIN_DIR_MAX_AGE_MS) {\n\t\t\t\tfs.rmSync(dirPath, { recursive: true });\n\t\t\t}\n\t\t} catch {\n\t\t\t// Skip directories that can't be processed; continue with others\n\t\t}\n\t}\n}\n\n// =============================================================================\n// Template Resolution\n// =============================================================================\n\n/** Resolved templates for a chain - string for sequential, string[] for parallel */\nexport type ResolvedTemplates = (string | string[])[];\n\n/**\n * Resolve templates for a chain with parallel step support.\n * Returns string for sequential steps, string[] for parallel steps.\n */\nexport function resolveChainTemplates(\n\tsteps: ChainStep[],\n): ResolvedTemplates {\n\treturn steps.map((step, i) => {\n\t\tif (isParallelStep(step)) {\n\t\t\t// Parallel step: resolve each task's template\n\t\t\treturn step.parallel.map((task) => {\n\t\t\t\tif (task.task) return task.task;\n\t\t\t\t// Default for parallel tasks is {previous}\n\t\t\t\treturn \"{previous}\";\n\t\t\t});\n\t\t}\n\t\tif (isDynamicParallelStep(step)) {\n\t\t\treturn step.parallel.task ?? \"{previous}\";\n\t\t}\n\t\t// Sequential step: existing logic\n\t\tconst seq = step as SequentialStep;\n\t\tif (seq.task) return seq.task;\n\t\t// Default: first step uses {task}, others use {previous}\n\t\treturn i === 0 ? \"{task}\" : \"{previous}\";\n\t});\n}\n\n// =============================================================================\n// Behavior Resolution\n// =============================================================================\n\n/**\n * Resolve effective chain behavior per step.\n * Priority: step override > false (disabled). Children have no named-agent defaults.\n */\nexport function resolveStepBehavior(\n\tstepOverrides: StepOverrides,\n\tchainSkills?: string[],\n): ResolvedStepBehavior {\n\tconst stepOutput = normalizeOutputOverride(stepOverrides.output);\n\tconst output = stepOutput !== undefined ? stepOutput : false;\n\tconst reads = stepOverrides.reads !== undefined ? stepOverrides.reads : false;\n\tconst progress = stepOverrides.progress !== undefined ? stepOverrides.progress : false;\n\n\tlet skills: string[] | false;\n\tif (stepOverrides.skills === false) {\n\t\tskills = false;\n\t} else if (stepOverrides.skills !== undefined) {\n\t\tskills = [...stepOverrides.skills];\n\t\tif (chainSkills && chainSkills.length > 0) {\n\t\t\tskills = [...new Set([...skills, ...chainSkills])];\n\t\t}\n\t} else {\n\t\tskills = chainSkills && chainSkills.length > 0 ? [...chainSkills] : [];\n\t}\n\n\tconst outputMode = stepOverrides.outputMode ?? \"inline\";\n\tconst model = stepOverrides.model;\n\treturn { output, outputMode, reads, progress, skills, model };\n}\n\nexport function resolveTaskTextForFileUpdatePolicy(task: string | undefined, originalTask?: string): string | undefined {\n\tif (!task) return originalTask;\n\treturn originalTask ? task.replaceAll(\"{task}\", originalTask) : task;\n}\n\nexport function taskDisallowsFileUpdates(task: string | undefined): boolean {\n\tif (!task) return false;\n\treturn /\\breview[- ]only\\b/i.test(task)\n\t\t|| /\\bread[- ]only\\s+(?:review|audit|inspection|pass)\\b/i.test(task)\n\t\t|| /\\b(?:no|without)\\s+(?:file\\s+)?edits?\\b/i.test(task)\n\t\t|| /\\b(?:do not|don't|must not)\\s+(?:edit|modify|write|touch)\\b/i.test(task)\n\t\t|| /\\bleave\\s+files?\\s+unchanged\\b/i.test(task);\n}\n\nexport function suppressProgressForReadOnlyTask(behavior: ResolvedStepBehavior, task: string | undefined, originalTask?: string): ResolvedStepBehavior {\n\tconst policyTask = resolveTaskTextForFileUpdatePolicy(task, originalTask);\n\treturn behavior.progress && taskDisallowsFileUpdates(policyTask) ? { ...behavior, progress: false } : behavior;\n}\n\n// =============================================================================\n// Chain Instruction Injection\n// =============================================================================\n\n/**\n * Resolve a file path: absolute paths pass through, relative paths get chainDir prepended.\n */\nfunction resolveChainPath(filePath: string, chainDir: string): string {\n\treturn path.isAbsolute(filePath) ? filePath : path.join(chainDir, filePath);\n}\n\n/**\n * Build chain instructions from resolved behavior.\n * These are appended to the task to tell the agent what to read/write.\n */\nexport function writeInitialProgressFile(progressDir: string): void {\n\tfs.mkdirSync(progressDir, { recursive: true });\n\tfs.writeFileSync(path.join(progressDir, \"progress.md\"), INITIAL_PROGRESS_CONTENT);\n}\n\nexport function buildChainInstructions(\n\tbehavior: ResolvedStepBehavior,\n\tchainDir: string,\n\tisFirstProgressAgent: boolean,\n\tpreviousSummary?: string,\n): { prefix: string; suffix: string } {\n\tconst prefixParts: string[] = [];\n\tconst suffixParts: string[] = [];\n\n\t// READS - prepend to override any hardcoded filenames in task text\n\tif (behavior.reads && behavior.reads.length > 0) {\n\t\tconst files = behavior.reads.map((f) => resolveChainPath(f, chainDir));\n\t\tprefixParts.push(`[Read from: ${files.join(\", \")}]`);\n\t}\n\n\t// OUTPUT - prepend so agent knows where to write\n\tif (behavior.output) {\n\t\tconst outputPath = resolveChainPath(behavior.output, chainDir);\n\t\tprefixParts.push(`[Write to: ${outputPath}]`);\n\t}\n\n\t// Progress instructions in suffix (less critical)\n\tif (behavior.progress) {\n\t\tconst progressPath = path.join(chainDir, \"progress.md\");\n\t\tif (isFirstProgressAgent) {\n\t\t\tsuffixParts.push(`Create and maintain progress at: ${progressPath}`);\n\t\t} else {\n\t\t\tsuffixParts.push(`Update progress at: ${progressPath}`);\n\t\t}\n\t}\n\n\t// Include previous step's summary in suffix if available\n\tif (previousSummary && previousSummary.trim()) {\n\t\tsuffixParts.push(`Previous step output:\\n${previousSummary.trim()}`);\n\t}\n\n\tconst prefix = prefixParts.length > 0 \n\t\t? prefixParts.join(\"\\n\") + \"\\n\\n\"\n\t\t: \"\";\n\t\n\tconst suffix = suffixParts.length > 0\n\t\t? \"\\n\\n---\\n\" + suffixParts.join(\"\\n\")\n\t\t: \"\";\n\n\treturn { prefix, suffix };\n}\n\n// =============================================================================\n// Parallel Step Support\n// =============================================================================\n\n/**\n * Resolve behaviors for all tasks in a parallel step.\n * Creates namespaced output paths to avoid collisions.\n */\nexport function resolveParallelBehaviors(\n\ttasks: ParallelTaskItem[],\n\tstepIndex: number,\n\tchainSkills?: string[],\n): ResolvedStepBehavior[] {\n\treturn tasks.map((task, taskIndex) => {\n\t\tconst subdir = path.join(`parallel-${stepIndex}`, String(taskIndex));\n\t\tlet output: string | false = false;\n\t\tconst taskOutput = normalizeOutputOverride(task.output);\n\t\tif (taskOutput !== undefined) {\n\t\t\tif (taskOutput === false) {\n\t\t\t\toutput = false;\n\t\t\t} else if (path.isAbsolute(taskOutput)) {\n\t\t\t\toutput = taskOutput;\n\t\t\t} else {\n\t\t\t\toutput = path.join(subdir, taskOutput);\n\t\t\t}\n\t\t}\n\n\t\tconst reads = task.reads !== undefined ? task.reads : false;\n\t\tconst progress = task.progress !== undefined ? task.progress : false;\n\t\tconst taskSkillInput = normalizeSkillInput(task.skill);\n\t\tlet skills: string[] | false;\n\t\tif (taskSkillInput === false) {\n\t\t\tskills = false;\n\t\t} else if (taskSkillInput !== undefined) {\n\t\t\tskills = [...taskSkillInput];\n\t\t\tif (chainSkills && chainSkills.length > 0) {\n\t\t\t\tskills = [...new Set([...skills, ...chainSkills])];\n\t\t\t}\n\t\t} else {\n\t\t\tskills = chainSkills && chainSkills.length > 0 ? [...chainSkills] : [];\n\t\t}\n\n\t\tconst outputMode = task.outputMode ?? \"inline\";\n\t\tconst model = task.model;\n\t\treturn { output, outputMode, reads, progress, skills, model };\n\t});\n}\n\n/**\n * Create subdirectories for parallel step outputs\n */\nexport function createParallelDirs(\n\tchainDir: string,\n\tstepIndex: number,\n\ttaskCount: number,\n\tagentNames: string[],\n): void {\n\tfor (let i = 0; i < taskCount; i++) {\n\t\tconst subdir = path.join(chainDir, `parallel-${stepIndex}`, String(i));\n\t\tfs.mkdirSync(subdir, { recursive: true });\n\t}\n}\n\nexport type { ParallelTaskResult } from \"../runs/shared/parallel-utils.ts\";\nexport { aggregateParallelOutputs } from \"../runs/shared/parallel-utils.ts\";\n"]}
@@ -20,15 +20,15 @@ export function isParallelStep(step) {
20
20
  export function isDynamicParallelStep(step) {
21
21
  return "expand" in step && "collect" in step && "parallel" in step && !Array.isArray(step.parallel);
22
22
  }
23
- /** Get all agent names in a step (single for sequential, multiple for parallel) */
23
+ /** Get display labels (description) for children in a step. */
24
24
  export function getStepAgents(step) {
25
25
  if (isParallelStep(step)) {
26
- return step.parallel.map((t) => t.agent);
26
+ return step.parallel.map((t) => t.description || t.label || t.agent || "child");
27
27
  }
28
28
  if (isDynamicParallelStep(step)) {
29
- return [step.parallel.agent];
29
+ return [step.parallel.description || step.parallel.label || step.parallel.agent || "child"];
30
30
  }
31
- return [step.agent];
31
+ return [step.description || step.label || step.agent || "child"];
32
32
  }
33
33
  // =============================================================================
34
34
  // Chain Directory Management
@@ -103,22 +103,13 @@ export function resolveChainTemplates(steps) {
103
103
  // =============================================================================
104
104
  /**
105
105
  * Resolve effective chain behavior per step.
106
- * Priority: step override > agent frontmatter > false (disabled)
106
+ * Priority: step override > false (disabled). Children have no named-agent defaults.
107
107
  */
108
- export function resolveStepBehavior(agentConfig, stepOverrides, chainSkills) {
109
- // Output: step override > frontmatter > false (no output)
108
+ export function resolveStepBehavior(stepOverrides, chainSkills) {
110
109
  const stepOutput = normalizeOutputOverride(stepOverrides.output);
111
- const output = stepOutput !== undefined
112
- ? stepOutput
113
- : normalizeOutputOverride(agentConfig.output) ?? false;
114
- // Reads: step override > frontmatter defaultReads > false (no reads)
115
- const reads = stepOverrides.reads !== undefined
116
- ? stepOverrides.reads
117
- : agentConfig.defaultReads ?? false;
118
- // Progress: step override > frontmatter defaultProgress > false
119
- const progress = stepOverrides.progress !== undefined
120
- ? stepOverrides.progress
121
- : agentConfig.defaultProgress ?? false;
110
+ const output = stepOutput !== undefined ? stepOutput : false;
111
+ const reads = stepOverrides.reads !== undefined ? stepOverrides.reads : false;
112
+ const progress = stepOverrides.progress !== undefined ? stepOverrides.progress : false;
122
113
  let skills;
123
114
  if (stepOverrides.skills === false) {
124
115
  skills = false;
@@ -130,13 +121,10 @@ export function resolveStepBehavior(agentConfig, stepOverrides, chainSkills) {
130
121
  }
131
122
  }
132
123
  else {
133
- skills = agentConfig.skills ? [...agentConfig.skills] : [];
134
- if (chainSkills && chainSkills.length > 0) {
135
- skills = [...new Set([...skills, ...chainSkills])];
136
- }
124
+ skills = chainSkills && chainSkills.length > 0 ? [...chainSkills] : [];
137
125
  }
138
126
  const outputMode = stepOverrides.outputMode ?? "inline";
139
- const model = stepOverrides.model ?? agentConfig.model;
127
+ const model = stepOverrides.model;
140
128
  return { output, outputMode, reads, progress, skills, model };
141
129
  }
142
130
  export function resolveTaskTextForFileUpdatePolicy(task, originalTask) {
@@ -216,40 +204,24 @@ export function buildChainInstructions(behavior, chainDir, isFirstProgressAgent,
216
204
  * Resolve behaviors for all tasks in a parallel step.
217
205
  * Creates namespaced output paths to avoid collisions.
218
206
  */
219
- export function resolveParallelBehaviors(tasks, agentConfigs, stepIndex, chainSkills) {
207
+ export function resolveParallelBehaviors(tasks, stepIndex, chainSkills) {
220
208
  return tasks.map((task, taskIndex) => {
221
- const config = agentConfigs.find((a) => a.name === task.agent);
222
- if (!config) {
223
- throw new Error(`Unknown agent: ${task.agent}`);
224
- }
225
- // Build subdirectory path for this parallel task
226
- const subdir = path.join(`parallel-${stepIndex}`, `${taskIndex}-${task.agent}`);
227
- // Output: task override > agent default (namespaced) > false
228
- // Absolute paths pass through unchanged; relative paths get namespaced under subdir
209
+ const subdir = path.join(`parallel-${stepIndex}`, String(taskIndex));
229
210
  let output = false;
230
211
  const taskOutput = normalizeOutputOverride(task.output);
231
- const configOutput = normalizeOutputOverride(config.output);
232
212
  if (taskOutput !== undefined) {
233
213
  if (taskOutput === false) {
234
214
  output = false;
235
215
  }
236
216
  else if (path.isAbsolute(taskOutput)) {
237
- output = taskOutput; // Absolute path: use as-is
217
+ output = taskOutput;
238
218
  }
239
219
  else {
240
- output = path.join(subdir, taskOutput); // Relative: namespace under subdir
220
+ output = path.join(subdir, taskOutput);
241
221
  }
242
222
  }
243
- else if (configOutput) {
244
- // Agent defaults are always relative, so namespace them
245
- output = path.join(subdir, configOutput);
246
- }
247
- // Reads: task override > agent default > false
248
- const reads = task.reads !== undefined ? task.reads : config.defaultReads ?? false;
249
- // Progress: task override > agent default > false
250
- const progress = task.progress !== undefined
251
- ? task.progress
252
- : config.defaultProgress ?? false;
223
+ const reads = task.reads !== undefined ? task.reads : false;
224
+ const progress = task.progress !== undefined ? task.progress : false;
253
225
  const taskSkillInput = normalizeSkillInput(task.skill);
254
226
  let skills;
255
227
  if (taskSkillInput === false) {
@@ -262,13 +234,10 @@ export function resolveParallelBehaviors(tasks, agentConfigs, stepIndex, chainSk
262
234
  }
263
235
  }
264
236
  else {
265
- skills = config.skills ? [...config.skills] : [];
266
- if (chainSkills && chainSkills.length > 0) {
267
- skills = [...new Set([...skills, ...chainSkills])];
268
- }
237
+ skills = chainSkills && chainSkills.length > 0 ? [...chainSkills] : [];
269
238
  }
270
239
  const outputMode = task.outputMode ?? "inline";
271
- const model = task.model ?? config.model;
240
+ const model = task.model;
272
241
  return { output, outputMode, reads, progress, skills, model };
273
242
  });
274
243
  }
@@ -277,7 +246,7 @@ export function resolveParallelBehaviors(tasks, agentConfigs, stepIndex, chainSk
277
246
  */
278
247
  export function createParallelDirs(chainDir, stepIndex, taskCount, agentNames) {
279
248
  for (let i = 0; i < taskCount; i++) {
280
- const subdir = path.join(chainDir, `parallel-${stepIndex}`, `${i}-${agentNames[i]}`);
249
+ const subdir = path.join(chainDir, `parallel-${stepIndex}`, String(i));
281
250
  fs.mkdirSync(subdir, { recursive: true });
282
251
  }
283
252
  }
@@ -1 +1 @@
1
- {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/shared/settings.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\n/**\n * Chain behavior, template resolution, and directory management\n */\n\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { AgentConfig } from \"../agents/agents.ts\";\nimport { normalizeSkillInput } from \"../agents/skills.ts\";\nimport { CHAIN_RUNS_DIR, type AcceptanceInput, type JsonSchemaObject, type OutputMode, type ToolBudgetConfig } from \"./types.ts\";\nconst CHAIN_DIR_MAX_AGE_MS = 24 * 60 * 60 * 1000; // 24 hours\nconst INITIAL_PROGRESS_CONTENT = \"# Progress\\n\\n## Status\\nIn Progress\\n\\n## Tasks\\n\\n## Files Changed\\n\\n## Notes\\n\";\n\n// =============================================================================\n// Behavior Resolution Types\n// =============================================================================\n\nexport interface ResolvedStepBehavior {\n\toutput: string | false;\n\toutputMode: OutputMode;\n\treads: string[] | false;\n\tprogress: boolean;\n\tskills: string[] | false;\n\tmodel?: string;\n}\n\nexport interface StepOverrides {\n\toutput?: string | false;\n\toutputMode?: OutputMode;\n\treads?: string[] | false;\n\tprogress?: boolean;\n\tskills?: string[] | false;\n\tmodel?: string;\n}\n\nfunction normalizeOutputOverride(output: string | false | undefined): string | false | undefined {\n\treturn output === \"false\" ? false : output;\n}\n\n// =============================================================================\n// Chain Step Types\n// =============================================================================\n\n/** Sequential step: single agent execution */\nexport interface SequentialStep {\n\tagent: string;\n\ttask?: string;\n\tphase?: string;\n\tlabel?: string;\n\tas?: string;\n\toutputSchema?: JsonSchemaObject;\n\tcwd?: string;\n\toutput?: string | false;\n\toutputMode?: OutputMode;\n\treads?: string[] | false;\n\tprogress?: boolean;\n\tskill?: string | string[] | false;\n\tmodel?: string;\n\ttoolBudget?: ToolBudgetConfig;\n\tacceptance?: AcceptanceInput;\n}\n\n/** Parallel task item within a parallel step */\nexport interface ParallelTaskItem {\n\tagent: string;\n\ttask?: string;\n\tphase?: string;\n\tlabel?: string;\n\tas?: string;\n\toutputSchema?: JsonSchemaObject;\n\tcwd?: string;\n\tcount?: number;\n\toutput?: string | false;\n\toutputMode?: OutputMode;\n\treads?: string[] | false;\n\tprogress?: boolean;\n\tskill?: string | string[] | false;\n\tmodel?: string;\n\ttoolBudget?: ToolBudgetConfig;\n\tacceptance?: AcceptanceInput;\n}\n\nexport interface DynamicExpandSpec {\n\tfrom: {\n\t\toutput: string;\n\t\tpath: string;\n\t};\n\titem?: string;\n\tkey?: string;\n\tmaxItems?: number;\n\tonEmpty?: \"skip\" | \"fail\";\n}\n\nexport type DynamicParallelTemplate = Omit<ParallelTaskItem, \"as\" | \"count\">;\n\nexport interface DynamicCollectSpec {\n\tas: string;\n\toutputSchema?: JsonSchemaObject;\n}\n\nexport interface DynamicParallelStep {\n\texpand: DynamicExpandSpec;\n\tparallel: DynamicParallelTemplate;\n\tcollect: DynamicCollectSpec;\n\tconcurrency?: number;\n\tfailFast?: boolean;\n\tphase?: string;\n\tlabel?: string;\n\tacceptance?: AcceptanceInput;\n}\n\n/** Parallel step: multiple agents running concurrently */\nexport interface ParallelStep {\n\tparallel: ParallelTaskItem[];\n\tconcurrency?: number;\n\tfailFast?: boolean;\n\tworktree?: boolean;\n\tcwd?: string;\n}\n\n/** Union type for chain steps */\nexport type ChainStep = SequentialStep | ParallelStep | DynamicParallelStep;\n\n// =============================================================================\n// Type Guards\n// =============================================================================\n\nexport function isParallelStep(step: ChainStep): step is ParallelStep {\n\treturn \"parallel\" in step && Array.isArray((step as ParallelStep).parallel);\n}\n\nexport function isDynamicParallelStep(step: ChainStep): step is DynamicParallelStep {\n\treturn \"expand\" in step && \"collect\" in step && \"parallel\" in step && !Array.isArray((step as { parallel?: unknown }).parallel);\n}\n\n/** Get all agent names in a step (single for sequential, multiple for parallel) */\nexport function getStepAgents(step: ChainStep): string[] {\n\tif (isParallelStep(step)) {\n\t\treturn step.parallel.map((t) => t.agent);\n\t}\n\tif (isDynamicParallelStep(step)) {\n\t\treturn [step.parallel.agent];\n\t}\n\treturn [step.agent];\n}\n\n// =============================================================================\n// Chain Directory Management\n// =============================================================================\n\nexport function createChainDir(runId: string, baseDir?: string): string {\n\tconst chainDir = path.join(baseDir ? path.resolve(baseDir) : CHAIN_RUNS_DIR, runId);\n\tfs.mkdirSync(chainDir, { recursive: true });\n\treturn chainDir;\n}\n\nexport function removeChainDir(chainDir: string): void {\n\ttry {\n\t\tfs.rmSync(chainDir, { recursive: true });\n\t} catch {\n\t\t// Chain cleanup is best-effort. Runs can already have cleaned their temp dir.\n\t}\n}\n\nexport function cleanupOldChainDirs(): void {\n\tif (!fs.existsSync(CHAIN_RUNS_DIR)) return;\n\tconst now = Date.now();\n\tlet dirs: string[];\n\ttry {\n\t\tdirs = fs.readdirSync(CHAIN_RUNS_DIR);\n\t} catch {\n\t\t// Startup cleanup is best-effort. If the scoped temp root is unreadable,\n\t\t// skip cleanup instead of failing extension startup.\n\t\treturn;\n\t}\n\n\tfor (const dir of dirs) {\n\t\ttry {\n\t\t\tconst dirPath = path.join(CHAIN_RUNS_DIR, dir);\n\t\t\tconst stat = fs.statSync(dirPath);\n\t\t\tif (stat.isDirectory() && now - stat.mtimeMs > CHAIN_DIR_MAX_AGE_MS) {\n\t\t\t\tfs.rmSync(dirPath, { recursive: true });\n\t\t\t}\n\t\t} catch {\n\t\t\t// Skip directories that can't be processed; continue with others\n\t\t}\n\t}\n}\n\n// =============================================================================\n// Template Resolution\n// =============================================================================\n\n/** Resolved templates for a chain - string for sequential, string[] for parallel */\nexport type ResolvedTemplates = (string | string[])[];\n\n/**\n * Resolve templates for a chain with parallel step support.\n * Returns string for sequential steps, string[] for parallel steps.\n */\nexport function resolveChainTemplates(\n\tsteps: ChainStep[],\n): ResolvedTemplates {\n\treturn steps.map((step, i) => {\n\t\tif (isParallelStep(step)) {\n\t\t\t// Parallel step: resolve each task's template\n\t\t\treturn step.parallel.map((task) => {\n\t\t\t\tif (task.task) return task.task;\n\t\t\t\t// Default for parallel tasks is {previous}\n\t\t\t\treturn \"{previous}\";\n\t\t\t});\n\t\t}\n\t\tif (isDynamicParallelStep(step)) {\n\t\t\treturn step.parallel.task ?? \"{previous}\";\n\t\t}\n\t\t// Sequential step: existing logic\n\t\tconst seq = step as SequentialStep;\n\t\tif (seq.task) return seq.task;\n\t\t// Default: first step uses {task}, others use {previous}\n\t\treturn i === 0 ? \"{task}\" : \"{previous}\";\n\t});\n}\n\n// =============================================================================\n// Behavior Resolution\n// =============================================================================\n\n/**\n * Resolve effective chain behavior per step.\n * Priority: step override > agent frontmatter > false (disabled)\n */\nexport function resolveStepBehavior(\n\tagentConfig: AgentConfig,\n\tstepOverrides: StepOverrides,\n\tchainSkills?: string[],\n): ResolvedStepBehavior {\n\t// Output: step override > frontmatter > false (no output)\n\tconst stepOutput = normalizeOutputOverride(stepOverrides.output);\n\tconst output =\n\t\tstepOutput !== undefined\n\t\t\t? stepOutput\n\t\t\t: normalizeOutputOverride(agentConfig.output) ?? false;\n\n\t// Reads: step override > frontmatter defaultReads > false (no reads)\n\tconst reads =\n\t\tstepOverrides.reads !== undefined\n\t\t\t? stepOverrides.reads\n\t\t\t: agentConfig.defaultReads ?? false;\n\n\t// Progress: step override > frontmatter defaultProgress > false\n\tconst progress =\n\t\tstepOverrides.progress !== undefined\n\t\t\t? stepOverrides.progress\n\t\t\t: agentConfig.defaultProgress ?? false;\n\n\tlet skills: string[] | false;\n\tif (stepOverrides.skills === false) {\n\t\tskills = false;\n\t} else if (stepOverrides.skills !== undefined) {\n\t\tskills = [...stepOverrides.skills];\n\t\tif (chainSkills && chainSkills.length > 0) {\n\t\t\tskills = [...new Set([...skills, ...chainSkills])];\n\t\t}\n\t} else {\n\t\tskills = agentConfig.skills ? [...agentConfig.skills] : [];\n\t\tif (chainSkills && chainSkills.length > 0) {\n\t\t\tskills = [...new Set([...skills, ...chainSkills])];\n\t\t}\n\t}\n\n\tconst outputMode = stepOverrides.outputMode ?? \"inline\";\n\tconst model = stepOverrides.model ?? agentConfig.model;\n\treturn { output, outputMode, reads, progress, skills, model };\n}\n\nexport function resolveTaskTextForFileUpdatePolicy(task: string | undefined, originalTask?: string): string | undefined {\n\tif (!task) return originalTask;\n\treturn originalTask ? task.replaceAll(\"{task}\", originalTask) : task;\n}\n\nexport function taskDisallowsFileUpdates(task: string | undefined): boolean {\n\tif (!task) return false;\n\treturn /\\breview[- ]only\\b/i.test(task)\n\t\t|| /\\bread[- ]only\\s+(?:review|audit|inspection|pass)\\b/i.test(task)\n\t\t|| /\\b(?:no|without)\\s+(?:file\\s+)?edits?\\b/i.test(task)\n\t\t|| /\\b(?:do not|don't|must not)\\s+(?:edit|modify|write|touch)\\b/i.test(task)\n\t\t|| /\\bleave\\s+files?\\s+unchanged\\b/i.test(task);\n}\n\nexport function suppressProgressForReadOnlyTask(behavior: ResolvedStepBehavior, task: string | undefined, originalTask?: string): ResolvedStepBehavior {\n\tconst policyTask = resolveTaskTextForFileUpdatePolicy(task, originalTask);\n\treturn behavior.progress && taskDisallowsFileUpdates(policyTask) ? { ...behavior, progress: false } : behavior;\n}\n\n// =============================================================================\n// Chain Instruction Injection\n// =============================================================================\n\n/**\n * Resolve a file path: absolute paths pass through, relative paths get chainDir prepended.\n */\nfunction resolveChainPath(filePath: string, chainDir: string): string {\n\treturn path.isAbsolute(filePath) ? filePath : path.join(chainDir, filePath);\n}\n\n/**\n * Build chain instructions from resolved behavior.\n * These are appended to the task to tell the agent what to read/write.\n */\nexport function writeInitialProgressFile(progressDir: string): void {\n\tfs.mkdirSync(progressDir, { recursive: true });\n\tfs.writeFileSync(path.join(progressDir, \"progress.md\"), INITIAL_PROGRESS_CONTENT);\n}\n\nexport function buildChainInstructions(\n\tbehavior: ResolvedStepBehavior,\n\tchainDir: string,\n\tisFirstProgressAgent: boolean,\n\tpreviousSummary?: string,\n): { prefix: string; suffix: string } {\n\tconst prefixParts: string[] = [];\n\tconst suffixParts: string[] = [];\n\n\t// READS - prepend to override any hardcoded filenames in task text\n\tif (behavior.reads && behavior.reads.length > 0) {\n\t\tconst files = behavior.reads.map((f) => resolveChainPath(f, chainDir));\n\t\tprefixParts.push(`[Read from: ${files.join(\", \")}]`);\n\t}\n\n\t// OUTPUT - prepend so agent knows where to write\n\tif (behavior.output) {\n\t\tconst outputPath = resolveChainPath(behavior.output, chainDir);\n\t\tprefixParts.push(`[Write to: ${outputPath}]`);\n\t}\n\n\t// Progress instructions in suffix (less critical)\n\tif (behavior.progress) {\n\t\tconst progressPath = path.join(chainDir, \"progress.md\");\n\t\tif (isFirstProgressAgent) {\n\t\t\tsuffixParts.push(`Create and maintain progress at: ${progressPath}`);\n\t\t} else {\n\t\t\tsuffixParts.push(`Update progress at: ${progressPath}`);\n\t\t}\n\t}\n\n\t// Include previous step's summary in suffix if available\n\tif (previousSummary && previousSummary.trim()) {\n\t\tsuffixParts.push(`Previous step output:\\n${previousSummary.trim()}`);\n\t}\n\n\tconst prefix = prefixParts.length > 0 \n\t\t? prefixParts.join(\"\\n\") + \"\\n\\n\"\n\t\t: \"\";\n\t\n\tconst suffix = suffixParts.length > 0\n\t\t? \"\\n\\n---\\n\" + suffixParts.join(\"\\n\")\n\t\t: \"\";\n\n\treturn { prefix, suffix };\n}\n\n// =============================================================================\n// Parallel Step Support\n// =============================================================================\n\n/**\n * Resolve behaviors for all tasks in a parallel step.\n * Creates namespaced output paths to avoid collisions.\n */\nexport function resolveParallelBehaviors(\n\ttasks: ParallelTaskItem[],\n\tagentConfigs: AgentConfig[],\n\tstepIndex: number,\n\tchainSkills?: string[],\n): ResolvedStepBehavior[] {\n\treturn tasks.map((task, taskIndex) => {\n\t\tconst config = agentConfigs.find((a) => a.name === task.agent);\n\t\tif (!config) {\n\t\t\tthrow new Error(`Unknown agent: ${task.agent}`);\n\t\t}\n\n\t\t// Build subdirectory path for this parallel task\n\t\tconst subdir = path.join(`parallel-${stepIndex}`, `${taskIndex}-${task.agent}`);\n\n\t\t// Output: task override > agent default (namespaced) > false\n\t\t// Absolute paths pass through unchanged; relative paths get namespaced under subdir\n\t\tlet output: string | false = false;\n\t\tconst taskOutput = normalizeOutputOverride(task.output);\n\t\tconst configOutput = normalizeOutputOverride(config.output);\n\t\tif (taskOutput !== undefined) {\n\t\t\tif (taskOutput === false) {\n\t\t\t\toutput = false;\n\t\t\t} else if (path.isAbsolute(taskOutput)) {\n\t\t\t\toutput = taskOutput; // Absolute path: use as-is\n\t\t\t} else {\n\t\t\t\toutput = path.join(subdir, taskOutput); // Relative: namespace under subdir\n\t\t\t}\n\t\t} else if (configOutput) {\n\t\t\t// Agent defaults are always relative, so namespace them\n\t\t\toutput = path.join(subdir, configOutput);\n\t\t}\n\n\t\t// Reads: task override > agent default > false\n\t\tconst reads =\n\t\t\ttask.reads !== undefined ? task.reads : config.defaultReads ?? false;\n\n\t\t// Progress: task override > agent default > false\n\t\tconst progress =\n\t\t\ttask.progress !== undefined\n\t\t\t\t? task.progress\n\t\t\t\t: config.defaultProgress ?? false;\n\n\t\tconst taskSkillInput = normalizeSkillInput(task.skill);\n\t\tlet skills: string[] | false;\n\t\tif (taskSkillInput === false) {\n\t\t\tskills = false;\n\t\t} else if (taskSkillInput !== undefined) {\n\t\t\tskills = [...taskSkillInput];\n\t\t\tif (chainSkills && chainSkills.length > 0) {\n\t\t\t\tskills = [...new Set([...skills, ...chainSkills])];\n\t\t\t}\n\t\t} else {\n\t\t\tskills = config.skills ? [...config.skills] : [];\n\t\t\tif (chainSkills && chainSkills.length > 0) {\n\t\t\t\tskills = [...new Set([...skills, ...chainSkills])];\n\t\t\t}\n\t\t}\n\n\t\tconst outputMode = task.outputMode ?? \"inline\";\n\t\tconst model = task.model ?? config.model;\n\t\treturn { output, outputMode, reads, progress, skills, model };\n\t});\n}\n\n/**\n * Create subdirectories for parallel step outputs\n */\nexport function createParallelDirs(\n\tchainDir: string,\n\tstepIndex: number,\n\ttaskCount: number,\n\tagentNames: string[],\n): void {\n\tfor (let i = 0; i < taskCount; i++) {\n\t\tconst subdir = path.join(chainDir, `parallel-${stepIndex}`, `${i}-${agentNames[i]}`);\n\t\tfs.mkdirSync(subdir, { recursive: true });\n\t}\n}\n\nexport type { ParallelTaskResult } from \"../runs/shared/parallel-utils.ts\";\nexport { aggregateParallelOutputs } from \"../runs/shared/parallel-utils.ts\";\n"]}
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/shared/settings.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\n/**\n * Chain behavior, template resolution, and directory management\n */\n\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { normalizeSkillInput } from \"../agents/skills.ts\";\nimport { CHAIN_RUNS_DIR, type AcceptanceInput, type JsonSchemaObject, type OutputMode, type ToolBudgetConfig } from \"./types.ts\";\nconst CHAIN_DIR_MAX_AGE_MS = 24 * 60 * 60 * 1000; // 24 hours\nconst INITIAL_PROGRESS_CONTENT = \"# Progress\\n\\n## Status\\nIn Progress\\n\\n## Tasks\\n\\n## Files Changed\\n\\n## Notes\\n\";\n\n// =============================================================================\n// Behavior Resolution Types\n// =============================================================================\n\nexport interface ResolvedStepBehavior {\n\toutput: string | false;\n\toutputMode: OutputMode;\n\treads: string[] | false;\n\tprogress: boolean;\n\tskills: string[] | false;\n\tmodel?: string;\n}\n\nexport interface StepOverrides {\n\toutput?: string | false;\n\toutputMode?: OutputMode;\n\treads?: string[] | false;\n\tprogress?: boolean;\n\tskills?: string[] | false;\n\tmodel?: string;\n}\n\nfunction normalizeOutputOverride(output: string | false | undefined): string | false | undefined {\n\treturn output === \"false\" ? false : output;\n}\n\n// =============================================================================\n// Chain Step Types\n// =============================================================================\n\n/** Sequential step: single generic child execution */\nexport interface SequentialStep {\n\tagent?: string;\n\ttask?: string;\n\tdescription?: string;\n\tpermissions?: \"full\" | \"read-only\";\n\tphase?: string;\n\tlabel?: string;\n\tas?: string;\n\toutputSchema?: JsonSchemaObject;\n\tcwd?: string;\n\toutput?: string | false;\n\toutputMode?: OutputMode;\n\treads?: string[] | false;\n\tprogress?: boolean;\n\tskill?: string | string[] | false;\n\tmodel?: string;\n\ttier?: \"light\" | \"standard\" | \"heavy\";\n\ttoolBudget?: ToolBudgetConfig;\n\tacceptance?: AcceptanceInput;\n}\n\n/** Parallel task item within a parallel step */\nexport interface ParallelTaskItem {\n\tagent?: string;\n\ttask?: string;\n\tdescription?: string;\n\tpermissions?: \"full\" | \"read-only\";\n\tphase?: string;\n\tlabel?: string;\n\tas?: string;\n\toutputSchema?: JsonSchemaObject;\n\tcwd?: string;\n\tcount?: number;\n\toutput?: string | false;\n\toutputMode?: OutputMode;\n\treads?: string[] | false;\n\tprogress?: boolean;\n\tskill?: string | string[] | false;\n\tmodel?: string;\n\ttier?: \"light\" | \"standard\" | \"heavy\";\n\ttoolBudget?: ToolBudgetConfig;\n\tacceptance?: AcceptanceInput;\n}\n\nexport interface DynamicExpandSpec {\n\tfrom: {\n\t\toutput: string;\n\t\tpath: string;\n\t};\n\titem?: string;\n\tkey?: string;\n\tmaxItems?: number;\n\tonEmpty?: \"skip\" | \"fail\";\n}\n\nexport type DynamicParallelTemplate = Omit<ParallelTaskItem, \"as\" | \"count\">;\n\nexport interface DynamicCollectSpec {\n\tas: string;\n\toutputSchema?: JsonSchemaObject;\n}\n\nexport interface DynamicParallelStep {\n\texpand: DynamicExpandSpec;\n\tparallel: DynamicParallelTemplate;\n\tcollect: DynamicCollectSpec;\n\tconcurrency?: number;\n\tfailFast?: boolean;\n\tphase?: string;\n\tlabel?: string;\n\tacceptance?: AcceptanceInput;\n}\n\n/** Parallel step: multiple agents running concurrently */\nexport interface ParallelStep {\n\tparallel: ParallelTaskItem[];\n\tconcurrency?: number;\n\tfailFast?: boolean;\n\tworktree?: boolean;\n\tcwd?: string;\n}\n\n/** Union type for chain steps */\nexport type ChainStep = SequentialStep | ParallelStep | DynamicParallelStep;\n\n// =============================================================================\n// Type Guards\n// =============================================================================\n\nexport function isParallelStep(step: ChainStep): step is ParallelStep {\n\treturn \"parallel\" in step && Array.isArray((step as ParallelStep).parallel);\n}\n\nexport function isDynamicParallelStep(step: ChainStep): step is DynamicParallelStep {\n\treturn \"expand\" in step && \"collect\" in step && \"parallel\" in step && !Array.isArray((step as { parallel?: unknown }).parallel);\n}\n\n/** Get display labels (description) for children in a step. */\nexport function getStepAgents(step: ChainStep): string[] {\n\tif (isParallelStep(step)) {\n\t\treturn step.parallel.map((t) => t.description || t.label || t.agent || \"child\");\n\t}\n\tif (isDynamicParallelStep(step)) {\n\t\treturn [step.parallel.description || step.parallel.label || step.parallel.agent || \"child\"];\n\t}\n\treturn [step.description || step.label || step.agent || \"child\"];\n}\n\n// =============================================================================\n// Chain Directory Management\n// =============================================================================\n\nexport function createChainDir(runId: string, baseDir?: string): string {\n\tconst chainDir = path.join(baseDir ? path.resolve(baseDir) : CHAIN_RUNS_DIR, runId);\n\tfs.mkdirSync(chainDir, { recursive: true });\n\treturn chainDir;\n}\n\nexport function removeChainDir(chainDir: string): void {\n\ttry {\n\t\tfs.rmSync(chainDir, { recursive: true });\n\t} catch {\n\t\t// Chain cleanup is best-effort. Runs can already have cleaned their temp dir.\n\t}\n}\n\nexport function cleanupOldChainDirs(): void {\n\tif (!fs.existsSync(CHAIN_RUNS_DIR)) return;\n\tconst now = Date.now();\n\tlet dirs: string[];\n\ttry {\n\t\tdirs = fs.readdirSync(CHAIN_RUNS_DIR);\n\t} catch {\n\t\t// Startup cleanup is best-effort. If the scoped temp root is unreadable,\n\t\t// skip cleanup instead of failing extension startup.\n\t\treturn;\n\t}\n\n\tfor (const dir of dirs) {\n\t\ttry {\n\t\t\tconst dirPath = path.join(CHAIN_RUNS_DIR, dir);\n\t\t\tconst stat = fs.statSync(dirPath);\n\t\t\tif (stat.isDirectory() && now - stat.mtimeMs > CHAIN_DIR_MAX_AGE_MS) {\n\t\t\t\tfs.rmSync(dirPath, { recursive: true });\n\t\t\t}\n\t\t} catch {\n\t\t\t// Skip directories that can't be processed; continue with others\n\t\t}\n\t}\n}\n\n// =============================================================================\n// Template Resolution\n// =============================================================================\n\n/** Resolved templates for a chain - string for sequential, string[] for parallel */\nexport type ResolvedTemplates = (string | string[])[];\n\n/**\n * Resolve templates for a chain with parallel step support.\n * Returns string for sequential steps, string[] for parallel steps.\n */\nexport function resolveChainTemplates(\n\tsteps: ChainStep[],\n): ResolvedTemplates {\n\treturn steps.map((step, i) => {\n\t\tif (isParallelStep(step)) {\n\t\t\t// Parallel step: resolve each task's template\n\t\t\treturn step.parallel.map((task) => {\n\t\t\t\tif (task.task) return task.task;\n\t\t\t\t// Default for parallel tasks is {previous}\n\t\t\t\treturn \"{previous}\";\n\t\t\t});\n\t\t}\n\t\tif (isDynamicParallelStep(step)) {\n\t\t\treturn step.parallel.task ?? \"{previous}\";\n\t\t}\n\t\t// Sequential step: existing logic\n\t\tconst seq = step as SequentialStep;\n\t\tif (seq.task) return seq.task;\n\t\t// Default: first step uses {task}, others use {previous}\n\t\treturn i === 0 ? \"{task}\" : \"{previous}\";\n\t});\n}\n\n// =============================================================================\n// Behavior Resolution\n// =============================================================================\n\n/**\n * Resolve effective chain behavior per step.\n * Priority: step override > false (disabled). Children have no named-agent defaults.\n */\nexport function resolveStepBehavior(\n\tstepOverrides: StepOverrides,\n\tchainSkills?: string[],\n): ResolvedStepBehavior {\n\tconst stepOutput = normalizeOutputOverride(stepOverrides.output);\n\tconst output = stepOutput !== undefined ? stepOutput : false;\n\tconst reads = stepOverrides.reads !== undefined ? stepOverrides.reads : false;\n\tconst progress = stepOverrides.progress !== undefined ? stepOverrides.progress : false;\n\n\tlet skills: string[] | false;\n\tif (stepOverrides.skills === false) {\n\t\tskills = false;\n\t} else if (stepOverrides.skills !== undefined) {\n\t\tskills = [...stepOverrides.skills];\n\t\tif (chainSkills && chainSkills.length > 0) {\n\t\t\tskills = [...new Set([...skills, ...chainSkills])];\n\t\t}\n\t} else {\n\t\tskills = chainSkills && chainSkills.length > 0 ? [...chainSkills] : [];\n\t}\n\n\tconst outputMode = stepOverrides.outputMode ?? \"inline\";\n\tconst model = stepOverrides.model;\n\treturn { output, outputMode, reads, progress, skills, model };\n}\n\nexport function resolveTaskTextForFileUpdatePolicy(task: string | undefined, originalTask?: string): string | undefined {\n\tif (!task) return originalTask;\n\treturn originalTask ? task.replaceAll(\"{task}\", originalTask) : task;\n}\n\nexport function taskDisallowsFileUpdates(task: string | undefined): boolean {\n\tif (!task) return false;\n\treturn /\\breview[- ]only\\b/i.test(task)\n\t\t|| /\\bread[- ]only\\s+(?:review|audit|inspection|pass)\\b/i.test(task)\n\t\t|| /\\b(?:no|without)\\s+(?:file\\s+)?edits?\\b/i.test(task)\n\t\t|| /\\b(?:do not|don't|must not)\\s+(?:edit|modify|write|touch)\\b/i.test(task)\n\t\t|| /\\bleave\\s+files?\\s+unchanged\\b/i.test(task);\n}\n\nexport function suppressProgressForReadOnlyTask(behavior: ResolvedStepBehavior, task: string | undefined, originalTask?: string): ResolvedStepBehavior {\n\tconst policyTask = resolveTaskTextForFileUpdatePolicy(task, originalTask);\n\treturn behavior.progress && taskDisallowsFileUpdates(policyTask) ? { ...behavior, progress: false } : behavior;\n}\n\n// =============================================================================\n// Chain Instruction Injection\n// =============================================================================\n\n/**\n * Resolve a file path: absolute paths pass through, relative paths get chainDir prepended.\n */\nfunction resolveChainPath(filePath: string, chainDir: string): string {\n\treturn path.isAbsolute(filePath) ? filePath : path.join(chainDir, filePath);\n}\n\n/**\n * Build chain instructions from resolved behavior.\n * These are appended to the task to tell the agent what to read/write.\n */\nexport function writeInitialProgressFile(progressDir: string): void {\n\tfs.mkdirSync(progressDir, { recursive: true });\n\tfs.writeFileSync(path.join(progressDir, \"progress.md\"), INITIAL_PROGRESS_CONTENT);\n}\n\nexport function buildChainInstructions(\n\tbehavior: ResolvedStepBehavior,\n\tchainDir: string,\n\tisFirstProgressAgent: boolean,\n\tpreviousSummary?: string,\n): { prefix: string; suffix: string } {\n\tconst prefixParts: string[] = [];\n\tconst suffixParts: string[] = [];\n\n\t// READS - prepend to override any hardcoded filenames in task text\n\tif (behavior.reads && behavior.reads.length > 0) {\n\t\tconst files = behavior.reads.map((f) => resolveChainPath(f, chainDir));\n\t\tprefixParts.push(`[Read from: ${files.join(\", \")}]`);\n\t}\n\n\t// OUTPUT - prepend so agent knows where to write\n\tif (behavior.output) {\n\t\tconst outputPath = resolveChainPath(behavior.output, chainDir);\n\t\tprefixParts.push(`[Write to: ${outputPath}]`);\n\t}\n\n\t// Progress instructions in suffix (less critical)\n\tif (behavior.progress) {\n\t\tconst progressPath = path.join(chainDir, \"progress.md\");\n\t\tif (isFirstProgressAgent) {\n\t\t\tsuffixParts.push(`Create and maintain progress at: ${progressPath}`);\n\t\t} else {\n\t\t\tsuffixParts.push(`Update progress at: ${progressPath}`);\n\t\t}\n\t}\n\n\t// Include previous step's summary in suffix if available\n\tif (previousSummary && previousSummary.trim()) {\n\t\tsuffixParts.push(`Previous step output:\\n${previousSummary.trim()}`);\n\t}\n\n\tconst prefix = prefixParts.length > 0 \n\t\t? prefixParts.join(\"\\n\") + \"\\n\\n\"\n\t\t: \"\";\n\t\n\tconst suffix = suffixParts.length > 0\n\t\t? \"\\n\\n---\\n\" + suffixParts.join(\"\\n\")\n\t\t: \"\";\n\n\treturn { prefix, suffix };\n}\n\n// =============================================================================\n// Parallel Step Support\n// =============================================================================\n\n/**\n * Resolve behaviors for all tasks in a parallel step.\n * Creates namespaced output paths to avoid collisions.\n */\nexport function resolveParallelBehaviors(\n\ttasks: ParallelTaskItem[],\n\tstepIndex: number,\n\tchainSkills?: string[],\n): ResolvedStepBehavior[] {\n\treturn tasks.map((task, taskIndex) => {\n\t\tconst subdir = path.join(`parallel-${stepIndex}`, String(taskIndex));\n\t\tlet output: string | false = false;\n\t\tconst taskOutput = normalizeOutputOverride(task.output);\n\t\tif (taskOutput !== undefined) {\n\t\t\tif (taskOutput === false) {\n\t\t\t\toutput = false;\n\t\t\t} else if (path.isAbsolute(taskOutput)) {\n\t\t\t\toutput = taskOutput;\n\t\t\t} else {\n\t\t\t\toutput = path.join(subdir, taskOutput);\n\t\t\t}\n\t\t}\n\n\t\tconst reads = task.reads !== undefined ? task.reads : false;\n\t\tconst progress = task.progress !== undefined ? task.progress : false;\n\t\tconst taskSkillInput = normalizeSkillInput(task.skill);\n\t\tlet skills: string[] | false;\n\t\tif (taskSkillInput === false) {\n\t\t\tskills = false;\n\t\t} else if (taskSkillInput !== undefined) {\n\t\t\tskills = [...taskSkillInput];\n\t\t\tif (chainSkills && chainSkills.length > 0) {\n\t\t\t\tskills = [...new Set([...skills, ...chainSkills])];\n\t\t\t}\n\t\t} else {\n\t\t\tskills = chainSkills && chainSkills.length > 0 ? [...chainSkills] : [];\n\t\t}\n\n\t\tconst outputMode = task.outputMode ?? \"inline\";\n\t\tconst model = task.model;\n\t\treturn { output, outputMode, reads, progress, skills, model };\n\t});\n}\n\n/**\n * Create subdirectories for parallel step outputs\n */\nexport function createParallelDirs(\n\tchainDir: string,\n\tstepIndex: number,\n\ttaskCount: number,\n\tagentNames: string[],\n): void {\n\tfor (let i = 0; i < taskCount; i++) {\n\t\tconst subdir = path.join(chainDir, `parallel-${stepIndex}`, String(i));\n\t\tfs.mkdirSync(subdir, { recursive: true });\n\t}\n}\n\nexport type { ParallelTaskResult } from \"../runs/shared/parallel-utils.ts\";\nexport { aggregateParallelOutputs } from \"../runs/shared/parallel-utils.ts\";\n"]}
@@ -10,6 +10,60 @@ export interface MaxOutputConfig {
10
10
  lines?: number;
11
11
  }
12
12
  export type OutputMode = "inline" | "file-only";
13
+ export type ChildPermission = "full" | "read-only";
14
+ export type ChildTier = "light" | "standard" | "heavy";
15
+ export interface ChildSpec {
16
+ childId: string;
17
+ task: string;
18
+ description: string;
19
+ requestedPermissions: ChildPermission;
20
+ effectivePermissions: ChildPermission;
21
+ model?: string;
22
+ tier?: ChildTier;
23
+ skill?: string | string[] | false;
24
+ cwd?: string;
25
+ output?: string | false;
26
+ outputMode?: OutputMode;
27
+ acceptance?: AcceptanceInput;
28
+ toolBudget?: ToolBudgetConfig;
29
+ count?: number;
30
+ reads?: string[] | false;
31
+ progress?: boolean;
32
+ label?: string;
33
+ phase?: string;
34
+ as?: string;
35
+ outputSchema?: JsonSchemaObject;
36
+ fanoutAuthorized?: boolean;
37
+ }
38
+ /** Internal execution compatibility shape. It is built from ChildSpec and is never user-discovered. */
39
+ export interface ChildRuntimeConfig {
40
+ name: string;
41
+ description: string;
42
+ tools?: string[];
43
+ mcpDirectTools?: string[];
44
+ model?: string;
45
+ fallbackModels?: string[];
46
+ thinking?: string | false;
47
+ systemPromptMode: "append" | "replace";
48
+ inheritProjectContext: boolean;
49
+ inheritSkills: boolean;
50
+ acceptanceRole?: AcceptanceRole;
51
+ systemPrompt: string;
52
+ skills?: string[];
53
+ skillPath?: string[];
54
+ extensions?: string[];
55
+ subagentOnlyExtensions?: string[];
56
+ output?: string;
57
+ maxSubagentDepth?: number;
58
+ completionGuard?: boolean;
59
+ toolBudget?: ToolBudgetConfig;
60
+ }
61
+ export declare function childRowLabel(entry: {
62
+ description?: string;
63
+ label?: string;
64
+ agent?: string;
65
+ childId?: string;
66
+ }): string;
13
67
  export type AcceptanceRole = "read-only" | "writer";
14
68
  export type JsonSchemaObject = Record<string, unknown>;
15
69
  export interface ChainOutputMapEntry {
@@ -180,8 +234,10 @@ export interface ControlEvent {
180
234
  }
181
235
  export type SubagentResultStatus = "completed" | "failed" | "paused" | "stopped" | "detached";
182
236
  export type SubagentRunMode = "single" | "parallel" | "chain";
183
- export declare const SUBAGENT_LIFECYCLE_ARTIFACT_VERSION = 2;
237
+ export declare const SUBAGENT_LIFECYCLE_ARTIFACT_VERSION = 3;
184
238
  export type SubagentLifecycleArtifactVersion = typeof SUBAGENT_LIFECYCLE_ARTIFACT_VERSION;
239
+ export declare const UNSUPPORTED_SUBAGENT_LIFECYCLE_MESSAGE = "This subagent run uses an unsupported lifecycle format. Named agent types cannot be resumed. Launch a new prompt-driven child instead.";
240
+ export declare function isSupportedSubagentLifecycleVersion(version: unknown): boolean;
185
241
  export type SteeringActionState = "delivered" | "scheduled" | "pending" | "partial" | "recovered" | "failed";
186
242
  export type SteeringTargetState = "scheduled" | "routed" | "delivered" | "late" | "failed" | "recovered";
187
243
  export interface SteeringTargetStatus {
@@ -238,30 +294,18 @@ export interface SteeringNotice {
238
294
  currentSessionId?: string;
239
295
  }
240
296
  export interface SteeringRecoveryDescriptor {
241
- version: 1;
297
+ version: 3;
298
+ lifecycleArtifactVersion?: SubagentLifecycleArtifactVersion;
242
299
  sourceRunId: string;
300
+ childId: string;
301
+ description: string;
302
+ permissions: ChildPermission;
243
303
  agent: string;
244
304
  sessionFile?: string;
245
305
  cwd: string;
246
306
  model?: string;
247
- fallbackModels?: string[];
248
307
  thinking?: string;
249
- tools?: string[];
250
- extensions?: string[];
251
- subagentOnlyExtensions?: string[];
252
- mcpDirectTools?: string[];
253
- systemPrompt?: string;
254
- systemPromptMode: "append" | "replace";
255
- inheritProjectContext: boolean;
256
- inheritSkills: boolean;
257
308
  skills?: string[];
258
- skillPath?: string[];
259
- agentFilePath?: string;
260
- completionGuard?: boolean;
261
- memory?: {
262
- scope: "project" | "user";
263
- path: string;
264
- };
265
309
  outputPath?: string;
266
310
  outputMode: "inline" | "file-only";
267
311
  acceptance?: AcceptanceInput;
@@ -326,6 +370,9 @@ export interface ChildWatchdogProgress {
326
370
  }
327
371
  export interface AgentProgress {
328
372
  index: number;
373
+ childId?: string;
374
+ description?: string;
375
+ permissions?: ChildPermission;
329
376
  agent: string;
330
377
  status: "pending" | "running" | "completed" | "failed" | "detached";
331
378
  activityState?: ActivityState;
@@ -491,6 +538,9 @@ export interface ProtocolOutputLimit {
491
538
  diagnosticTail: string;
492
539
  }
493
540
  export interface SingleResult {
541
+ childId?: string;
542
+ description?: string;
543
+ permissions?: ChildPermission;
494
544
  agent: string;
495
545
  task: string;
496
546
  exitCode: number;
@@ -563,6 +613,11 @@ export interface Details {
563
613
  artifactPath?: string;
564
614
  };
565
615
  chainAgents?: string[];
616
+ chainChildren?: Array<{
617
+ childId: string;
618
+ description: string;
619
+ permissions: ChildPermission;
620
+ }>;
566
621
  totalSteps?: number;
567
622
  currentStepIndex?: number;
568
623
  workflowGraph?: WorkflowGraphSnapshot;
@@ -738,6 +793,9 @@ export interface AsyncStatus {
738
793
  parallelGroups?: AsyncParallelGroupStatus[];
739
794
  workflowGraph?: WorkflowGraphSnapshot;
740
795
  steps?: Array<{
796
+ childId?: string;
797
+ description?: string;
798
+ permissions?: ChildPermission;
741
799
  agent: string;
742
800
  phase?: string;
743
801
  label?: string;
@@ -888,6 +946,7 @@ export interface SubagentState {
888
946
  startedAt: number;
889
947
  updatedAt: number;
890
948
  currentAgent?: string;
949
+ currentChildId?: string;
891
950
  currentIndex?: number;
892
951
  currentActivityState?: ActivityState;
893
952
  lastActivityAt?: number;
@@ -977,7 +1036,7 @@ export interface RunSyncOptions {
977
1036
  /** Override the agent's default model (format: "provider/id" or just "id") */
978
1037
  modelOverride?: string;
979
1038
  /** Override the agent's default thinking level for this run */
980
- thinkingOverride?: AgentConfig["thinking"];
1039
+ thinkingOverride?: string | false;
981
1040
  /** Registry models available for heuristic bare-model resolution */
982
1041
  availableModels?: Array<{
983
1042
  provider: string;
@@ -1084,7 +1143,8 @@ export declare const SLASH_SUBAGENT_CANCEL_EVENT = "subagent:slash:cancel";
1084
1143
  export declare const POLL_INTERVAL_MS = 250;
1085
1144
  export declare const MAX_WIDGET_JOBS = 4;
1086
1145
  export declare const DEFAULT_SUBAGENT_MAX_DEPTH = 2;
1087
- export declare const SUBAGENT_ACTIONS: readonly ["list", "get", "models", "create", "update", "delete", "eject", "disable", "enable", "reset", "status", "interrupt", "resume", "steer", "stop", "append-step", "doctor", "watchdog.status", "watchdog.check", "watchdog.configure", "watchdog.recommend-model", "schedule", "schedule-list", "schedule-status", "schedule-cancel"];
1146
+ export declare const SUBAGENT_ACTIONS: readonly ["status", "interrupt", "resume", "steer", "stop", "append-step", "doctor", "watchdog.status", "watchdog.check", "watchdog.configure", "watchdog.recommend-model", "schedule", "schedule-list", "schedule-status", "schedule-cancel"];
1147
+ export declare const REMOVED_SUBAGENT_ACTIONS: readonly ["list", "get", "models", "create", "update", "delete", "eject", "disable", "enable", "reset"];
1088
1148
  export declare const DEFAULT_FORK_PREAMBLE: string;
1089
1149
  export declare function resolveTopLevelParallelMaxTasks(value: unknown): number;
1090
1150
  export declare function resolveTopLevelParallelConcurrency(override: unknown, configValue: unknown): number;