@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":"run-status.js","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/background/run-status.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { AgentToolResult } from \"@ashx-j/lunr-agent\";\nimport { formatAsyncRunList, formatAsyncRunOutputPath, formatAsyncRunProgressLabel, listAsyncRuns } from \"./async-status.ts\";\nimport { formatAsyncResultTranscript, formatAsyncRunTranscript, formatNestedRunTranscript, inspectSubagentFleet } from \"./fleet-view.ts\";\nimport { formatNestedRunStatusLines } from \"../shared/nested-render.ts\";\nimport { formatModelThinking } from \"../../shared/formatters.ts\";\nimport { formatActivityLabel } from \"../../shared/status-format.ts\";\nimport { ASYNC_DIR, RESULTS_DIR, type AsyncStatus, type Details, type ForegroundResumeRun, type NestedRunSummary, type SteeringStatus, type SubagentState } from \"../../shared/types.ts\";\nimport { resolveSubagentIntercomTarget } from \"../../intercom/intercom-bridge.ts\";\nimport { resolveAsyncRunLocation } from \"./async-resume.ts\";\nimport { resolveSubagentRunId } from \"./run-id-resolver.ts\";\nimport { flatToLogicalStepIndex, normalizeParallelGroups } from \"./parallel-groups.ts\";\nimport { reconcileAsyncRun, reconcileNestedAsyncDescendants } from \"./stale-run-reconciler.ts\";\nimport { attachRootChildrenToSteps, findNestedRouteForRootId, projectNestedRegistryForRoot, type NestedRunResolutionScope } from \"../shared/nested-events.ts\";\n\ninterface RunStatusParams {\n\taction?: \"status\";\n\tid?: string;\n\trunId?: string;\n\tdir?: string;\n\tindex?: number;\n\tview?: \"fleet\" | \"transcript\";\n\tlines?: number;\n}\n\ninterface RunStatusDeps {\n\tasyncDirRoot?: string;\n\tresultsDir?: string;\n\tkill?: (pid: number, signal?: NodeJS.Signals | 0) => boolean;\n\tnow?: () => number;\n\tstate?: SubagentState;\n\tnested?: NestedRunResolutionScope;\n\tsessionRoots?: string[];\n}\n\nfunction hasExistingSessionFile(value: unknown): value is string {\n\treturn typeof value === \"string\" && fs.existsSync(value);\n}\n\nfunction formatResumeGuidance(runId: string | undefined, children: Array<{ agent?: unknown; sessionFile?: unknown }>, fallbackSessionFile?: unknown, options: { stopped?: boolean } = {}): string {\n\tif (options.stopped) return \"Resume: unavailable; stopped runs are not resumable. Start a new run instead.\";\n\tconst knownChildren = children\n\t\t.map((child, index) => ({ child, index }))\n\t\t.filter(({ child }) => typeof child.agent === \"string\");\n\tif (!runId || knownChildren.length === 0) return \"Resume: unavailable; no child session file was persisted.\";\n\tconst singleSessionFile = knownChildren[0]?.child.sessionFile ?? fallbackSessionFile;\n\tif (children.length === 1 && knownChildren.length === 1 && hasExistingSessionFile(singleSessionFile)) {\n\t\treturn `Revive: subagent({ action: \"resume\", id: \"${runId}\", message: \"...\" })`;\n\t}\n\tconst childWithSession = knownChildren.find(({ child }) => hasExistingSessionFile(child.sessionFile));\n\tif (childWithSession) {\n\t\treturn `Revive child: subagent({ action: \"resume\", id: \"${runId}\", index: ${childWithSession.index}, message: \"...\" })`;\n\t}\n\treturn \"Resume: unavailable; no child session file was persisted.\";\n}\n\nfunction stepLineLabel(status: AsyncStatus, index: number): string {\n\tconst steps = status.steps ?? [];\n\tif (status.mode === \"parallel\") return `Agent ${index + 1}/${steps.length || 1}`;\n\tif (status.mode === \"chain\") {\n\t\tconst chainStepCount = status.chainStepCount ?? (steps.length || 1);\n\t\tconst groups = normalizeParallelGroups(status.parallelGroups, steps.length, chainStepCount);\n\t\tconst group = groups.find((candidate) => index >= candidate.start && index < candidate.start + candidate.count);\n\t\tif (group) return `Step ${group.stepIndex + 1}/${chainStepCount} Agent ${index - group.start + 1}/${group.count}`;\n\t\treturn `Step ${flatToLogicalStepIndex(index, chainStepCount, groups) + 1}/${chainStepCount}`;\n\t}\n\treturn `Step ${index + 1}`;\n}\n\nfunction nestedRunDisplayName(run: NestedRunSummary): string {\n\tif (run.agent) return run.agent;\n\tif (run.agents?.length) return run.agents.join(\", \");\n\treturn run.id;\n}\n\nfunction formatSteeringSummary(input: { steering?: SteeringStatus }): string | undefined {\n\tconst steering = input.steering;\n\tif (!steering || steering.requested === 0) return undefined;\n\tconst lateAcknowledgments = steering.recent.reduce((count, request) => count + request.targets.filter((target) => target.lateDeliveredAt !== undefined).length, 0);\n\treturn `${steering.requested} requested, ${steering.scheduled} scheduled, ${steering.pending} pending, ${steering.delivered} delivered, ${steering.failed} failed, ${steering.recovered} recovered${lateAcknowledgments ? `, ${lateAcknowledgments} late acknowledged` : \"\"}`;\n}\n\nfunction rememberedForegroundChildOutput(child: ForegroundResumeRun[\"children\"][number]): string {\n\tconst outputPath = child.artifactPaths?.outputPath ?? child.savedOutputPath;\n\tif (outputPath && fs.existsSync(outputPath)) {\n\t\ttry {\n\t\t\tconst artifactOutput = fs.readFileSync(outputPath, \"utf-8\").trim();\n\t\t\tif (artifactOutput) return artifactOutput;\n\t\t} catch {\n\t\t\t// Fall back to the remembered snapshot below.\n\t\t}\n\t}\n\treturn child.finalOutput ?? \"\";\n}\n\nfunction formatRememberedForegroundStatus(run: ForegroundResumeRun): string {\n\tconst lines = [\n\t\t`Run: ${run.runId}`,\n\t\t\"State: remembered foreground\",\n\t\t`Mode: ${run.mode}`,\n\t\t`Updated: ${new Date(run.updatedAt).toISOString()}`,\n\t\t`Cwd: ${run.cwd}`,\n\t];\n\tfor (const child of run.children) {\n\t\tconst output = rememberedForegroundChildOutput(child).trim().split(/\\r?\\n/).find((line) => line.trim());\n\t\tconst parts = [\n\t\t\t`${child.index + 1}. ${child.agent} ${child.status}`,\n\t\t\tchild.exitCode !== undefined ? `exit ${child.exitCode}` : undefined,\n\t\t\tchild.detachedReason ? `detached: ${child.detachedReason}` : undefined,\n\t\t\tchild.acceptance ? `acceptance: ${child.acceptance.status}` : undefined,\n\t\t\tchild.error ? `error: ${child.error}` : undefined,\n\t\t\toutput ? `output: ${output.slice(0, 160)}` : undefined,\n\t\t].filter(Boolean);\n\t\tlines.push(parts.join(\", \"));\n\t\tif (child.sessionFile) lines.push(` Session: ${child.sessionFile}`);\n\t\tif (child.transcriptPath) lines.push(` Transcript: ${child.transcriptPath}`);\n\t\tif (child.artifactPaths?.outputPath) lines.push(` Output: ${child.artifactPaths.outputPath}`);\n\t\tif (child.savedOutputPath && child.savedOutputPath !== child.artifactPaths?.outputPath) lines.push(` Saved output: ${child.savedOutputPath}`);\n\t\tif (child.outputSaveError) lines.push(` Output warning: ${child.outputSaveError}`);\n\t\tif (child.transcriptError) lines.push(` Transcript warning: ${child.transcriptError}`);\n\t}\n\tlines.push(\"\", `Status: subagent({ action: \"status\", id: \"${run.runId}\" })`);\n\tif (run.children.length === 1) lines.push(`Transcript: subagent({ action: \"status\", id: \"${run.runId}\", view: \"transcript\" })`);\n\telse lines.push(`Transcript: subagent({ action: \"status\", id: \"${run.runId}\", index: 0, view: \"transcript\" })`);\n\tconst detached = run.children.some((child) => child.status === \"detached\");\n\tconst resumable = run.children.find((child) => hasExistingSessionFile(child.sessionFile));\n\tif (detached) {\n\t\tlines.push(`Recovery: reply to the supervisor request first, then wait with subagent_wait({ id: \"${run.runId}\" }); do not resume or launch a replacement while any child remains detached.`);\n\t} else if (resumable) {\n\t\tlines.push(run.children.length === 1\n\t\t\t? `Revive: subagent({ action: \"resume\", id: \"${run.runId}\", message: \"...\" })`\n\t\t\t: `Revive child: subagent({ action: \"resume\", id: \"${run.runId}\", index: ${resumable.index}, message: \"...\" })`);\n\t} else {\n\t\tlines.push(\"Resume: unavailable; no child session file was persisted.\");\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nfunction formatRememberedForegroundTranscript(run: ForegroundResumeRun, options: { index?: number; lines?: number }): string {\n\tlet index = options.index;\n\tif (index !== undefined && !Number.isInteger(index)) throw new Error(\"Transcript index must be an integer.\");\n\tif (index === undefined && run.children.length === 1) index = 0;\n\tif (index === undefined) return `Transcript view requires index for foreground run '${run.runId}' with ${run.children.length} children.`;\n\tif (index < 0 || index >= run.children.length) throw new Error(`Transcript index ${index} is out of range for ${run.children.length} foreground children.`);\n\tconst child = run.children[index]!;\n\tconst lineLimit = Math.max(1, Math.min(options.lines ?? 80, 1000));\n\tconst outputLines = rememberedForegroundChildOutput(child).split(/\\r?\\n/).filter((line) => line.trim()).slice(-lineLimit);\n\tconst lines = [\n\t\t`Run: ${run.runId}`,\n\t\t`State: ${child.status}`,\n\t\t`Child: ${index} (${child.agent})`,\n\t\tchild.sessionFile ? `Session: ${child.sessionFile}` : undefined,\n\t\tchild.transcriptPath ? `Transcript: ${child.transcriptPath}` : undefined,\n\t\tchild.artifactPaths?.outputPath ? `Output: ${child.artifactPaths.outputPath}` : undefined,\n\t\tchild.savedOutputPath && child.savedOutputPath !== child.artifactPaths?.outputPath ? `Saved output: ${child.savedOutputPath}` : undefined,\n\t\tchild.outputSaveError ? `Output warning: ${child.outputSaveError}` : undefined,\n\t].filter((line): line is string => Boolean(line));\n\tlines.push(\"Result transcript tail:\");\n\tif (outputLines.length === 0) lines.push(\" (no recovered final output available yet)\");\n\telse for (const line of outputLines) lines.push(` ${line}`);\n\treturn lines.join(\"\\n\");\n}\n\nfunction formatNestedExactStatus(rootRunId: string, run: NestedRunSummary): string {\n\tconst lines = [\n\t\t`Nested run: ${run.id}`,\n\t\t`Root: ${rootRunId}`,\n\t\t`Parent: ${run.parentRunId}${run.parentStepIndex !== undefined ? ` step ${run.parentStepIndex + 1}` : \"\"}`,\n\t\t`State: ${run.state}`,\n\t\trun.activityState || run.lastActivityAt ? `Activity: ${formatActivityLabel(run.lastActivityAt, run.activityState)}` : undefined,\n\t\trun.mode ? `Mode: ${run.mode}` : undefined,\n\t\t`Agent: ${nestedRunDisplayName(run)}`,\n\t\trun.currentStep !== undefined ? `Progress: step ${run.currentStep + 1}/${run.chainStepCount ?? run.steps?.length ?? 1}` : undefined,\n\t\trun.turnBudget ? `Turn budget: ${run.turnBudget.turnCount}/${run.turnBudget.maxTurns}+${run.turnBudget.graceTurns} (${run.turnBudget.outcome})` : undefined,\n\t\trun.asyncDir ? `Dir: ${run.asyncDir}` : undefined,\n\t\trun.sessionFile ? `Session: ${run.sessionFile}` : undefined,\n\t\trun.error ? `Error: ${run.error}` : undefined,\n\t].filter((line): line is string => Boolean(line));\n\tif (run.path.length) {\n\t\tlines.push(`Path: ${run.path.map((part) => `${part.runId}${part.stepIndex !== undefined ? `:${part.stepIndex + 1}` : \"\"}${part.agent ? `:${part.agent}` : \"\"}`).join(\" > \")} > ${run.id}`);\n\t}\n\tif (run.steps?.length) {\n\t\tlines.push(\"Steps:\");\n\t\tfor (const [index, step] of run.steps.entries()) {\n\t\t\tconst activity = step.status === \"running\" ? formatActivityLabel(step.lastActivityAt, step.activityState) : undefined;\n\t\t\tconst budget = step.turnBudget ? `, turn budget: ${step.turnBudget.turnCount}/${step.turnBudget.maxTurns}+${step.turnBudget.graceTurns} (${step.turnBudget.outcome})` : \"\";\n\t\t\tlines.push(` ${index + 1}. ${step.agent} ${step.status}${activity ? `, ${activity}` : \"\"}${budget}${step.error ? `, error: ${step.error}` : \"\"}`);\n\t\t\tlines.push(...formatNestedRunStatusLines(step.children, { indent: \" \", commandHints: true }));\n\t\t}\n\t}\n\tlines.push(...formatNestedRunStatusLines(run.children, { indent: \" \", commandHints: true }));\n\tlines.push(\"Commands:\", ` Status: subagent({ action: \"status\", id: \"${run.id}\" })`, ` Interrupt: subagent({ action: \"interrupt\", id: \"${run.id}\" })`, ` Resume: subagent({ action: \"resume\", id: \"${run.id}\", message: \"...\" })`, ` Steer: subagent({ action: \"steer\", id: \"${run.id}\", message: \"...\" })`, ` Root status: subagent({ action: \"status\", id: \"${rootRunId}\" })`);\n\treturn lines.join(\"\\n\");\n}\n\nexport function inspectSubagentStatus(params: RunStatusParams, deps: RunStatusDeps = {}): AgentToolResult<Details> {\n\tconst asyncDirRoot = deps.asyncDirRoot ?? ASYNC_DIR;\n\tconst resultsDir = deps.resultsDir ?? RESULTS_DIR;\n\tconst currentSessionId = deps.state?.currentSessionId ?? undefined;\n\tif (params.view && params.view !== \"fleet\" && params.view !== \"transcript\") {\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: `Unknown status view: ${params.view}. Valid: fleet, transcript.` }],\n\t\t\tisError: true,\n\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t};\n\t}\n\tif (params.view === \"fleet\") {\n\t\treturn inspectSubagentFleet(params, { asyncDirRoot, resultsDir, kill: deps.kill, now: deps.now, state: deps.state, childSafe: Boolean(deps.nested) });\n\t}\n\tif (!params.id && !params.runId && !params.dir) {\n\t\tif (deps.nested) {\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: \"Child-safe subagent status requires an id when no foreground run is active.\" }],\n\t\t\t\tisError: true,\n\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t};\n\t\t}\n\t\ttry {\n\t\t\tconst runs = listAsyncRuns(asyncDirRoot, { states: [\"queued\", \"running\"], sessionId: currentSessionId, resultsDir, kill: deps.kill, now: deps.now });\n\t\t\tif (params.view === \"transcript\") {\n\t\t\t\tif (runs.length === 1) return inspectSubagentStatus({ ...params, id: runs[0]!.id }, deps);\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: runs.length === 0 ? \"No active async run transcript is available.\" : `Transcript view requires an id when ${runs.length} active async runs exist. Use subagent({ action: \"status\", view: \"fleet\" }) to choose one.` }],\n\t\t\t\t\tisError: true,\n\t\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: formatAsyncRunList(runs) }],\n\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: message }],\n\t\t\t\tisError: true,\n\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t};\n\t\t}\n\t}\n\n\tlet location;\n\ttry {\n\t\tconst requestedId = params.id ?? params.runId;\n\t\tif (!params.dir && requestedId) {\n\t\t\tconst resolved = resolveSubagentRunId(requestedId, { asyncDirRoot, resultsDir, state: deps.state, nested: deps.nested });\n\t\t\tif (resolved?.kind === \"foreground\") {\n\t\t\t\tconst run = deps.state?.foregroundRuns?.get(resolved.id);\n\t\t\t\tif (run) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: params.view === \"transcript\" ? formatRememberedForegroundTranscript(run, { index: params.index, lines: params.lines }) : formatRememberedForegroundStatus(run) }],\n\t\t\t\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t\t\t\t};\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\t\treturn { content: [{ type: \"text\", text: message }], isError: true, details: { mode: \"single\", results: [] } };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (resolved?.kind === \"nested\") {\n\t\t\t\treconcileNestedAsyncDescendants(resolved.match.route, { resultsDir, kill: deps.kill, now: deps.now });\n\t\t\t\tconst refreshed = resolveSubagentRunId(requestedId, { asyncDirRoot, resultsDir, state: deps.state, nested: deps.nested });\n\t\t\t\tconst nested = refreshed?.kind === \"nested\" ? refreshed : resolved;\n\t\t\t\tif (params.view === \"transcript\") {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn { content: [{ type: \"text\", text: formatNestedRunTranscript(nested.match.run, { index: params.index, lines: params.lines, sessionRoots: deps.sessionRoots }) }], details: { mode: \"single\", results: [] } };\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\t\treturn { content: [{ type: \"text\", text: message }], isError: true, details: { mode: \"single\", results: [] } };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn { content: [{ type: \"text\", text: formatNestedExactStatus(nested.match.rootRunId, nested.match.run) }], details: { mode: \"single\", results: [] } };\n\t\t\t}\n\t\t\tif (resolved?.kind === \"async\") location = resolved.location;\n\t\t\telse location = { asyncDir: null, resultPath: null, resolvedId: requestedId };\n\t\t} else {\n\t\t\tlocation = resolveAsyncRunLocation(params, asyncDirRoot, resultsDir);\n\t\t}\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: message }],\n\t\t\tisError: true,\n\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t};\n\t}\n\tconst { asyncDir, resultPath, resolvedId } = location;\n\n\tif (!asyncDir && !resultPath) {\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: \"Async run not found. Provide id or dir.\" }],\n\t\t\tisError: true,\n\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t};\n\t}\n\n\tif (asyncDir) {\n\t\tlet reconciliation;\n\t\ttry {\n\t\t\treconciliation = reconcileAsyncRun(asyncDir, { resultsDir, kill: deps.kill, now: deps.now });\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: message }],\n\t\t\t\tisError: true,\n\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t};\n\t\t}\n\t\tconst status = reconciliation.status;\n\t\tconst effectiveRunId = status?.runId ?? resolvedId ?? \"unknown\";\n\t\tconst logPath = path.join(asyncDir, `subagent-log-${effectiveRunId}.md`);\n\t\tconst eventsPath = path.join(asyncDir, \"events.jsonl\");\n\t\tif (status) {\n\t\t\tif (params.view === \"transcript\") {\n\t\t\t\tif (currentSessionId && status.sessionId !== currentSessionId) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"Transcript view is only available for async runs owned by the current session.\" }],\n\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\treturn { content: [{ type: \"text\", text: formatAsyncRunTranscript(status, asyncDir, { index: params.index, lines: params.lines, sessionRoots: deps.sessionRoots }) }], details: { mode: \"single\", results: [] } };\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\treturn { content: [{ type: \"text\", text: message }], isError: true, details: { mode: \"single\", results: [] } };\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet nestedChildren: NestedRunSummary[] = [];\n\t\t\tlet nestedWarning: string | undefined;\n\t\t\ttry {\n\t\t\t\tconst nestedRoute = findNestedRouteForRootId(status.runId);\n\t\t\t\tif (nestedRoute) reconcileNestedAsyncDescendants(nestedRoute, { resultsDir, kill: deps.kill, now: deps.now });\n\t\t\t\tnestedChildren = projectNestedRegistryForRoot(status.runId)?.children ?? [];\n\t\t\t\tattachRootChildrenToSteps(status.runId, status.steps, nestedChildren);\n\t\t\t} catch (error) {\n\t\t\t\tnestedWarning = `Nested status unavailable: ${error instanceof Error ? error.message : String(error)}`;\n\t\t\t}\n\t\t\tconst outputPath = formatAsyncRunOutputPath({ asyncDir, outputFile: status.outputFile });\n\t\t\tconst progressLabel = formatAsyncRunProgressLabel({\n\t\t\t\tmode: status.mode,\n\t\t\t\tstate: status.state,\n\t\t\t\tcurrentStep: status.currentStep,\n\t\t\t\tchainStepCount: status.chainStepCount,\n\t\t\t\tparallelGroups: status.parallelGroups,\n\t\t\t\tsteps: (status.steps ?? []).map((step, index) => ({ index, agent: step.agent, status: step.status })),\n\t\t\t});\n\t\t\tconst started = new Date(status.startedAt).toISOString();\n\t\t\tconst updated = status.lastUpdate ? new Date(status.lastUpdate).toISOString() : \"n/a\";\n\t\t\tconst statusActivityText = status.state === \"running\" ? formatActivityLabel(status.lastActivityAt, status.activityState) : undefined;\n\t\t\tconst steeringText = formatSteeringSummary(status);\n\n\t\t\tconst lines = [\n\t\t\t\t`Run: ${status.runId}`,\n\t\t\t\t`State: ${status.state}`,\n\t\t\t\tstatus.error ? `Error: ${status.error}` : undefined,\n\t\t\t\tstatusActivityText ? `Activity: ${statusActivityText}` : undefined,\n\t\t\t\tsteeringText ? `Steering: ${steeringText}` : undefined,\n\t\t\t\t`Mode: ${status.mode}`,\n\t\t\t\t`Progress: ${progressLabel}`,\n\t\t\t\tstatus.pendingAppends ? `Pending appends: ${status.pendingAppends}` : undefined,\n\t\t\t\t`Started: ${started}`,\n\t\t\t\t`Updated: ${updated}`,\n\t\t\t\tstatus.turnBudget ? `Turn budget: ${status.turnBudget.turnCount}/${status.turnBudget.maxTurns}+${status.turnBudget.graceTurns} (${status.turnBudget.outcome})` : undefined,\n\t\t\t\t`Dir: ${asyncDir}`,\n\t\t\t\toutputPath ? `Output: ${outputPath}` : undefined,\n\t\t\t\treconciliation.message ? `Diagnosis: ${reconciliation.message}` : undefined,\n\t\t\t\treconciliation.resultPath && fs.existsSync(reconciliation.resultPath) ? `Result: ${reconciliation.resultPath}` : undefined,\n\t\t\t].filter((line): line is string => Boolean(line));\n\t\t\tfor (const [index, step] of (status.steps ?? []).entries()) {\n\t\t\t\tconst stepActivityText = step.status === \"running\" ? formatActivityLabel(step.lastActivityAt, step.activityState) : undefined;\n\t\t\t\tconst modelThinking = formatModelThinking(step.model, step.thinking);\n\t\t\t\tconst modelText = modelThinking ? ` (${modelThinking})` : \"\";\n\t\t\t\tconst steeringText = formatSteeringSummary(step);\n\t\t\t\tconst steeringSuffix = steeringText ? `, steering: ${steeringText}` : \"\";\n\t\t\t\tconst errorText = step.error ? `, error: ${step.error}` : \"\";\n\t\t\t\tconst acceptanceText = step.acceptance?.status ? `, acceptance: ${step.acceptance.status}` : \"\";\n\t\t\t\tconst budgetText = step.turnBudget ? `, turn budget: ${step.turnBudget.turnCount}/${step.turnBudget.maxTurns}+${step.turnBudget.graceTurns} (${step.turnBudget.outcome})` : \"\";\n\t\t\t\tconst display = step.label ? `${step.label} (${step.agent})` : step.agent;\n\t\t\t\tconst phase = step.phase ? `[${step.phase}] ` : \"\";\n\t\t\t\tlines.push(`${stepLineLabel(status, index)}: ${phase}${display} ${step.status}${modelText}${stepActivityText ? `, ${stepActivityText}` : \"\"}${steeringSuffix}${acceptanceText}${budgetText}${errorText}`);\n\t\t\t\tlines.push(...formatNestedRunStatusLines(step.children, { indent: \" \", commandHints: true, maxLines: 20 }));\n\t\t\t\tconst stepOutputPath = path.join(asyncDir, `output-${index}.log`);\n\t\t\t\tif (stepOutputPath !== outputPath && fs.existsSync(stepOutputPath)) lines.push(` Output: ${stepOutputPath}`);\n\t\t\t\tif (step.status === \"running\") {\n\t\t\t\t\tlines.push(` Intercom target: ${resolveSubagentIntercomTarget(status.runId, step.agent, index)} (if registered)`);\n\t\t\t\t\tlines.push(` Steer: subagent({ action: \"steer\", id: \"${status.runId}\", index: ${index}, message: \"...\" })`);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst attached = new Set((status.steps ?? []).flatMap((step) => step.children?.map((child) => child.id) ?? []));\n\t\t\tconst unattached = nestedChildren.filter((child) => !attached.has(child.id));\n\t\t\tlines.push(...formatNestedRunStatusLines(unattached, { indent: \"\", commandHints: true, maxLines: 20 }));\n\t\t\tif (nestedWarning) lines.push(`Warning: ${nestedWarning}`);\n\t\t\tif (status.sessionFile) lines.push(`Session: ${status.sessionFile}`);\n\t\t\tif (status.state === \"running\") lines.push(`Steer running child: subagent({ action: \"steer\", id: \"${status.runId}\", message: \"...\" })`);\n\t\t\tif (status.state !== \"running\") {\n\t\t\t\tlines.push(formatResumeGuidance(status.runId, status.steps ?? [], status.sessionFile, { stopped: status.state === \"stopped\" || status.stopped === true }));\n\t\t\t}\n\t\t\tif (fs.existsSync(logPath)) lines.push(`Log: ${logPath}`);\n\t\t\tif (fs.existsSync(eventsPath)) lines.push(`Events: ${eventsPath}`);\n\n\t\t\treturn { content: [{ type: \"text\", text: lines.join(\"\\n\") }], details: { mode: \"single\", results: [] } };\n\t\t}\n\t}\n\n\tif (resultPath) {\n\t\ttry {\n\t\t\tconst raw = fs.readFileSync(resultPath, \"utf-8\");\n\t\t\tconst data = JSON.parse(raw) as { id?: string; runId?: string; agent?: string; success?: boolean; summary?: string; output?: string; exitCode?: number; state?: string; sessionFile?: string; results?: Array<{ agent?: string; output?: string; summary?: string; sessionFile?: string; state?: string; success?: boolean; exitCode?: number | null }> };\n\t\t\tif (params.view === \"transcript\") {\n\t\t\t\ttry {\n\t\t\t\t\treturn { content: [{ type: \"text\", text: formatAsyncResultTranscript(data, resultPath, { index: params.index, lines: params.lines }) }], details: { mode: \"single\", results: [] } };\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\treturn { content: [{ type: \"text\", text: message }], isError: true, details: { mode: \"single\", results: [] } };\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst status = data.state === \"stopped\" ? \"stopped\" : data.success ? \"complete\" : data.state === \"paused\" || data.exitCode === 0 ? \"paused\" : \"failed\";\n\t\t\tconst runId = data.runId ?? data.id ?? resolvedId;\n\t\t\tconst lines = [`Run: ${runId}`, `State: ${status}`, `Result: ${resultPath}`];\n\t\t\tconst children = Array.isArray(data.results) ? data.results : data.agent ? [{ agent: data.agent, sessionFile: data.sessionFile }] : [];\n\t\t\tlines.push(formatResumeGuidance(runId, children, data.sessionFile, { stopped: status === \"stopped\" }));\n\t\t\tif (data.summary) lines.push(\"\", data.summary);\n\t\t\treturn { content: [{ type: \"text\", text: lines.join(\"\\n\") }], details: { mode: \"single\", results: [] } };\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: `Failed to read async result file: ${message}` }],\n\t\t\t\tisError: true,\n\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t};\n\t\t}\n\t}\n\n\treturn {\n\t\tcontent: [{ type: \"text\", text: \"Status file not found.\" }],\n\t\tisError: true,\n\t\tdetails: { mode: \"single\", results: [] },\n\t};\n}\n"]}
1
+ {"version":3,"file":"run-status.js","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/background/run-status.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { AgentToolResult } from \"@ashx-j/lunr-agent\";\nimport { formatAsyncRunList, formatAsyncRunOutputPath, formatAsyncRunProgressLabel, listAsyncRuns } from \"./async-status.ts\";\nimport { formatAsyncResultTranscript, formatAsyncRunTranscript, formatNestedRunTranscript, inspectSubagentFleet } from \"./fleet-view.ts\";\nimport { formatNestedRunStatusLines } from \"../shared/nested-render.ts\";\nimport { formatModelThinking } from \"../../shared/formatters.ts\";\nimport { formatActivityLabel } from \"../../shared/status-format.ts\";\nimport { ASYNC_DIR, RESULTS_DIR, type AsyncStatus, type Details, type ForegroundResumeRun, type NestedRunSummary, type SteeringStatus, type SubagentState } from \"../../shared/types.ts\";\nimport { resolveSubagentIntercomTarget } from \"../../intercom/intercom-bridge.ts\";\nimport { resolveAsyncRunLocation } from \"./async-resume.ts\";\nimport { resolveSubagentRunId } from \"./run-id-resolver.ts\";\nimport { flatToLogicalStepIndex, normalizeParallelGroups } from \"./parallel-groups.ts\";\nimport { reconcileAsyncRun, reconcileNestedAsyncDescendants } from \"./stale-run-reconciler.ts\";\nimport { attachRootChildrenToSteps, findNestedRouteForRootId, projectNestedRegistryForRoot, type NestedRunResolutionScope } from \"../shared/nested-events.ts\";\n\ninterface RunStatusParams {\n\taction?: \"status\";\n\tid?: string;\n\trunId?: string;\n\tdir?: string;\n\tindex?: number;\n\tview?: \"fleet\" | \"transcript\";\n\tlines?: number;\n}\n\ninterface RunStatusDeps {\n\tasyncDirRoot?: string;\n\tresultsDir?: string;\n\tkill?: (pid: number, signal?: NodeJS.Signals | 0) => boolean;\n\tnow?: () => number;\n\tstate?: SubagentState;\n\tnested?: NestedRunResolutionScope;\n\tsessionRoots?: string[];\n}\n\nfunction hasExistingSessionFile(value: unknown): value is string {\n\treturn typeof value === \"string\" && fs.existsSync(value);\n}\n\nfunction formatResumeGuidance(runId: string | undefined, children: Array<{ agent?: unknown; sessionFile?: unknown }>, fallbackSessionFile?: unknown, options: { stopped?: boolean } = {}): string {\n\tif (options.stopped) return \"Resume: unavailable; stopped runs are not resumable. Start a new run instead.\";\n\tconst knownChildren = children\n\t\t.map((child, index) => ({ child, index }))\n\t\t.filter(({ child }) => typeof child.agent === \"string\");\n\tif (!runId || knownChildren.length === 0) return \"Resume: unavailable; no child session file was persisted.\";\n\tconst singleSessionFile = knownChildren[0]?.child.sessionFile ?? fallbackSessionFile;\n\tif (children.length === 1 && knownChildren.length === 1 && hasExistingSessionFile(singleSessionFile)) {\n\t\treturn `Revive: subagent({ action: \"resume\", id: \"${runId}\", message: \"...\" })`;\n\t}\n\tconst childWithSession = knownChildren.find(({ child }) => hasExistingSessionFile(child.sessionFile));\n\tif (childWithSession) {\n\t\treturn `Revive child: subagent({ action: \"resume\", id: \"${runId}\", index: ${childWithSession.index}, message: \"...\" })`;\n\t}\n\treturn \"Resume: unavailable; no child session file was persisted.\";\n}\n\nfunction stepLineLabel(status: AsyncStatus, index: number): string {\n\tconst steps = status.steps ?? [];\n\tif (status.mode === \"parallel\") return `Agent ${index + 1}/${steps.length || 1}`;\n\tif (status.mode === \"chain\") {\n\t\tconst chainStepCount = status.chainStepCount ?? (steps.length || 1);\n\t\tconst groups = normalizeParallelGroups(status.parallelGroups, steps.length, chainStepCount);\n\t\tconst group = groups.find((candidate) => index >= candidate.start && index < candidate.start + candidate.count);\n\t\tif (group) return `Step ${group.stepIndex + 1}/${chainStepCount} Agent ${index - group.start + 1}/${group.count}`;\n\t\treturn `Step ${flatToLogicalStepIndex(index, chainStepCount, groups) + 1}/${chainStepCount}`;\n\t}\n\treturn `Step ${index + 1}`;\n}\n\nfunction nestedRunDisplayName(run: NestedRunSummary): string {\n\tif (run.agent) return run.agent;\n\tif (run.agents?.length) return run.agents.join(\", \");\n\treturn run.id;\n}\n\nfunction formatSteeringSummary(input: { steering?: SteeringStatus }): string | undefined {\n\tconst steering = input.steering;\n\tif (!steering || steering.requested === 0) return undefined;\n\tconst lateAcknowledgments = steering.recent.reduce((count, request) => count + request.targets.filter((target) => target.lateDeliveredAt !== undefined).length, 0);\n\treturn `${steering.requested} requested, ${steering.scheduled} scheduled, ${steering.pending} pending, ${steering.delivered} delivered, ${steering.failed} failed, ${steering.recovered} recovered${lateAcknowledgments ? `, ${lateAcknowledgments} late acknowledged` : \"\"}`;\n}\n\nfunction rememberedForegroundChildOutput(child: ForegroundResumeRun[\"children\"][number]): string {\n\tconst outputPath = child.artifactPaths?.outputPath ?? child.savedOutputPath;\n\tif (outputPath && fs.existsSync(outputPath)) {\n\t\ttry {\n\t\t\tconst artifactOutput = fs.readFileSync(outputPath, \"utf-8\").trim();\n\t\t\tif (artifactOutput) return artifactOutput;\n\t\t} catch {\n\t\t\t// Fall back to the remembered snapshot below.\n\t\t}\n\t}\n\treturn child.finalOutput ?? \"\";\n}\n\nfunction formatRememberedForegroundStatus(run: ForegroundResumeRun): string {\n\tconst lines = [\n\t\t`Run: ${run.runId}`,\n\t\t\"State: remembered foreground\",\n\t\t`Mode: ${run.mode}`,\n\t\t`Updated: ${new Date(run.updatedAt).toISOString()}`,\n\t\t`Cwd: ${run.cwd}`,\n\t];\n\tfor (const child of run.children) {\n\t\tconst output = rememberedForegroundChildOutput(child).trim().split(/\\r?\\n/).find((line) => line.trim());\n\t\tconst parts = [\n\t\t\t`${child.index + 1}. ${child.agent} ${child.status}`,\n\t\t\tchild.exitCode !== undefined ? `exit ${child.exitCode}` : undefined,\n\t\t\tchild.detachedReason ? `detached: ${child.detachedReason}` : undefined,\n\t\t\tchild.acceptance ? `acceptance: ${child.acceptance.status}` : undefined,\n\t\t\tchild.error ? `error: ${child.error}` : undefined,\n\t\t\toutput ? `output: ${output.slice(0, 160)}` : undefined,\n\t\t].filter(Boolean);\n\t\tlines.push(parts.join(\", \"));\n\t\tif (child.sessionFile) lines.push(` Session: ${child.sessionFile}`);\n\t\tif (child.transcriptPath) lines.push(` Transcript: ${child.transcriptPath}`);\n\t\tif (child.artifactPaths?.outputPath) lines.push(` Output: ${child.artifactPaths.outputPath}`);\n\t\tif (child.savedOutputPath && child.savedOutputPath !== child.artifactPaths?.outputPath) lines.push(` Saved output: ${child.savedOutputPath}`);\n\t\tif (child.outputSaveError) lines.push(` Output warning: ${child.outputSaveError}`);\n\t\tif (child.transcriptError) lines.push(` Transcript warning: ${child.transcriptError}`);\n\t}\n\tlines.push(\"\", `Status: subagent({ action: \"status\", id: \"${run.runId}\" })`);\n\tif (run.children.length === 1) lines.push(`Transcript: subagent({ action: \"status\", id: \"${run.runId}\", view: \"transcript\" })`);\n\telse lines.push(`Transcript: subagent({ action: \"status\", id: \"${run.runId}\", index: 0, view: \"transcript\" })`);\n\tconst detached = run.children.some((child) => child.status === \"detached\");\n\tconst resumable = run.children.find((child) => hasExistingSessionFile(child.sessionFile));\n\tif (detached) {\n\t\tlines.push(`Recovery: reply to the supervisor request first, then wait with subagent_wait({ id: \"${run.runId}\" }); do not resume or launch a replacement while any child remains detached.`);\n\t} else if (resumable) {\n\t\tlines.push(run.children.length === 1\n\t\t\t? `Revive: subagent({ action: \"resume\", id: \"${run.runId}\", message: \"...\" })`\n\t\t\t: `Revive child: subagent({ action: \"resume\", id: \"${run.runId}\", index: ${resumable.index}, message: \"...\" })`);\n\t} else {\n\t\tlines.push(\"Resume: unavailable; no child session file was persisted.\");\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nfunction formatRememberedForegroundTranscript(run: ForegroundResumeRun, options: { index?: number; lines?: number }): string {\n\tlet index = options.index;\n\tif (index !== undefined && !Number.isInteger(index)) throw new Error(\"Transcript index must be an integer.\");\n\tif (index === undefined && run.children.length === 1) index = 0;\n\tif (index === undefined) return `Transcript view requires index for foreground run '${run.runId}' with ${run.children.length} children.`;\n\tif (index < 0 || index >= run.children.length) throw new Error(`Transcript index ${index} is out of range for ${run.children.length} foreground children.`);\n\tconst child = run.children[index]!;\n\tconst lineLimit = Math.max(1, Math.min(options.lines ?? 80, 1000));\n\tconst outputLines = rememberedForegroundChildOutput(child).split(/\\r?\\n/).filter((line) => line.trim()).slice(-lineLimit);\n\tconst lines = [\n\t\t`Run: ${run.runId}`,\n\t\t`State: ${child.status}`,\n\t\t`Child: ${index} (${child.agent})`,\n\t\tchild.sessionFile ? `Session: ${child.sessionFile}` : undefined,\n\t\tchild.transcriptPath ? `Transcript: ${child.transcriptPath}` : undefined,\n\t\tchild.artifactPaths?.outputPath ? `Output: ${child.artifactPaths.outputPath}` : undefined,\n\t\tchild.savedOutputPath && child.savedOutputPath !== child.artifactPaths?.outputPath ? `Saved output: ${child.savedOutputPath}` : undefined,\n\t\tchild.outputSaveError ? `Output warning: ${child.outputSaveError}` : undefined,\n\t].filter((line): line is string => Boolean(line));\n\tlines.push(\"Result transcript tail:\");\n\tif (outputLines.length === 0) lines.push(\" (no recovered final output available yet)\");\n\telse for (const line of outputLines) lines.push(` ${line}`);\n\treturn lines.join(\"\\n\");\n}\n\nfunction formatNestedExactStatus(rootRunId: string, run: NestedRunSummary): string {\n\tconst lines = [\n\t\t`Nested run: ${run.id}`,\n\t\t`Root: ${rootRunId}`,\n\t\t`Parent: ${run.parentRunId}${run.parentStepIndex !== undefined ? ` step ${run.parentStepIndex + 1}` : \"\"}`,\n\t\t`State: ${run.state}`,\n\t\trun.activityState || run.lastActivityAt ? `Activity: ${formatActivityLabel(run.lastActivityAt, run.activityState)}` : undefined,\n\t\trun.mode ? `Mode: ${run.mode}` : undefined,\n\t\t`Agent: ${nestedRunDisplayName(run)}`,\n\t\trun.currentStep !== undefined ? `Progress: step ${run.currentStep + 1}/${run.chainStepCount ?? run.steps?.length ?? 1}` : undefined,\n\t\trun.turnBudget ? `Turn budget: ${run.turnBudget.turnCount}/${run.turnBudget.maxTurns}+${run.turnBudget.graceTurns} (${run.turnBudget.outcome})` : undefined,\n\t\trun.asyncDir ? `Dir: ${run.asyncDir}` : undefined,\n\t\trun.sessionFile ? `Session: ${run.sessionFile}` : undefined,\n\t\trun.error ? `Error: ${run.error}` : undefined,\n\t].filter((line): line is string => Boolean(line));\n\tif (run.path.length) {\n\t\tlines.push(`Path: ${run.path.map((part) => `${part.runId}${part.stepIndex !== undefined ? `:${part.stepIndex + 1}` : \"\"}${part.agent ? `:${part.agent}` : \"\"}`).join(\" > \")} > ${run.id}`);\n\t}\n\tif (run.steps?.length) {\n\t\tlines.push(\"Steps:\");\n\t\tfor (const [index, step] of run.steps.entries()) {\n\t\t\tconst activity = step.status === \"running\" ? formatActivityLabel(step.lastActivityAt, step.activityState) : undefined;\n\t\t\tconst budget = step.turnBudget ? `, turn budget: ${step.turnBudget.turnCount}/${step.turnBudget.maxTurns}+${step.turnBudget.graceTurns} (${step.turnBudget.outcome})` : \"\";\n\t\t\tlines.push(` ${index + 1}. ${step.agent} ${step.status}${activity ? `, ${activity}` : \"\"}${budget}${step.error ? `, error: ${step.error}` : \"\"}`);\n\t\t\tlines.push(...formatNestedRunStatusLines(step.children, { indent: \" \", commandHints: true }));\n\t\t}\n\t}\n\tlines.push(...formatNestedRunStatusLines(run.children, { indent: \" \", commandHints: true }));\n\tlines.push(\"Commands:\", ` Status: subagent({ action: \"status\", id: \"${run.id}\" })`, ` Interrupt: subagent({ action: \"interrupt\", id: \"${run.id}\" })`, ` Resume: subagent({ action: \"resume\", id: \"${run.id}\", message: \"...\" })`, ` Steer: subagent({ action: \"steer\", id: \"${run.id}\", message: \"...\" })`, ` Root status: subagent({ action: \"status\", id: \"${rootRunId}\" })`);\n\treturn lines.join(\"\\n\");\n}\n\nexport function inspectSubagentStatus(params: RunStatusParams, deps: RunStatusDeps = {}): AgentToolResult<Details> {\n\tconst asyncDirRoot = deps.asyncDirRoot ?? ASYNC_DIR;\n\tconst resultsDir = deps.resultsDir ?? RESULTS_DIR;\n\tconst currentSessionId = deps.state?.currentSessionId ?? undefined;\n\tif (params.view && params.view !== \"fleet\" && params.view !== \"transcript\") {\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: `Unknown status view: ${params.view}. Valid: fleet, transcript.` }],\n\t\t\tisError: true,\n\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t};\n\t}\n\tif (params.view === \"fleet\") {\n\t\treturn inspectSubagentFleet(params, { asyncDirRoot, resultsDir, kill: deps.kill, now: deps.now, state: deps.state, childSafe: Boolean(deps.nested) });\n\t}\n\tif (!params.id && !params.runId && !params.dir) {\n\t\tif (deps.nested) {\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: \"Child-safe subagent status requires an id when no foreground run is active.\" }],\n\t\t\t\tisError: true,\n\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t};\n\t\t}\n\t\ttry {\n\t\t\tconst runs = listAsyncRuns(asyncDirRoot, { states: [\"queued\", \"running\"], sessionId: currentSessionId, resultsDir, kill: deps.kill, now: deps.now });\n\t\t\tif (params.view === \"transcript\") {\n\t\t\t\tif (runs.length === 1) return inspectSubagentStatus({ ...params, id: runs[0]!.id }, deps);\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: runs.length === 0 ? \"No active async run transcript is available.\" : `Transcript view requires an id when ${runs.length} active async runs exist. Use subagent({ action: \"status\", view: \"fleet\" }) to choose one.` }],\n\t\t\t\t\tisError: true,\n\t\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: formatAsyncRunList(runs) }],\n\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: message }],\n\t\t\t\tisError: true,\n\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t};\n\t\t}\n\t}\n\n\tlet location;\n\ttry {\n\t\tconst requestedId = params.id ?? params.runId;\n\t\tif (!params.dir && requestedId) {\n\t\t\tconst resolved = resolveSubagentRunId(requestedId, { asyncDirRoot, resultsDir, state: deps.state, nested: deps.nested });\n\t\t\tif (resolved?.kind === \"foreground\") {\n\t\t\t\tconst run = deps.state?.foregroundRuns?.get(resolved.id);\n\t\t\t\tif (run) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: params.view === \"transcript\" ? formatRememberedForegroundTranscript(run, { index: params.index, lines: params.lines }) : formatRememberedForegroundStatus(run) }],\n\t\t\t\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t\t\t\t};\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\t\treturn { content: [{ type: \"text\", text: message }], isError: true, details: { mode: \"single\", results: [] } };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (resolved?.kind === \"nested\") {\n\t\t\t\treconcileNestedAsyncDescendants(resolved.match.route, { resultsDir, kill: deps.kill, now: deps.now });\n\t\t\t\tconst refreshed = resolveSubagentRunId(requestedId, { asyncDirRoot, resultsDir, state: deps.state, nested: deps.nested });\n\t\t\t\tconst nested = refreshed?.kind === \"nested\" ? refreshed : resolved;\n\t\t\t\tif (params.view === \"transcript\") {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn { content: [{ type: \"text\", text: formatNestedRunTranscript(nested.match.run, { index: params.index, lines: params.lines, sessionRoots: deps.sessionRoots }) }], details: { mode: \"single\", results: [] } };\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\t\treturn { content: [{ type: \"text\", text: message }], isError: true, details: { mode: \"single\", results: [] } };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn { content: [{ type: \"text\", text: formatNestedExactStatus(nested.match.rootRunId, nested.match.run) }], details: { mode: \"single\", results: [] } };\n\t\t\t}\n\t\t\tif (resolved?.kind === \"async\") location = resolved.location;\n\t\t\telse location = { asyncDir: null, resultPath: null, resolvedId: requestedId };\n\t\t} else {\n\t\t\tlocation = resolveAsyncRunLocation(params, asyncDirRoot, resultsDir);\n\t\t}\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: message }],\n\t\t\tisError: true,\n\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t};\n\t}\n\tconst { asyncDir, resultPath, resolvedId } = location;\n\n\tif (!asyncDir && !resultPath) {\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: \"Async run not found. Provide id or dir.\" }],\n\t\t\tisError: true,\n\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t};\n\t}\n\n\tif (asyncDir) {\n\t\tlet reconciliation;\n\t\ttry {\n\t\t\treconciliation = reconcileAsyncRun(asyncDir, { resultsDir, kill: deps.kill, now: deps.now });\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: message }],\n\t\t\t\tisError: true,\n\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t};\n\t\t}\n\t\tconst status = reconciliation.status;\n\t\tconst effectiveRunId = status?.runId ?? resolvedId ?? \"unknown\";\n\t\tconst logPath = path.join(asyncDir, `subagent-log-${effectiveRunId}.md`);\n\t\tconst eventsPath = path.join(asyncDir, \"events.jsonl\");\n\t\tif (status) {\n\t\t\tif (params.view === \"transcript\") {\n\t\t\t\tif (currentSessionId && status.sessionId !== currentSessionId) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"Transcript view is only available for async runs owned by the current session.\" }],\n\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\treturn { content: [{ type: \"text\", text: formatAsyncRunTranscript(status, asyncDir, { index: params.index, lines: params.lines, sessionRoots: deps.sessionRoots }) }], details: { mode: \"single\", results: [] } };\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\treturn { content: [{ type: \"text\", text: message }], isError: true, details: { mode: \"single\", results: [] } };\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet nestedChildren: NestedRunSummary[] = [];\n\t\t\tlet nestedWarning: string | undefined;\n\t\t\ttry {\n\t\t\t\tconst nestedRoute = findNestedRouteForRootId(status.runId);\n\t\t\t\tif (nestedRoute) reconcileNestedAsyncDescendants(nestedRoute, { resultsDir, kill: deps.kill, now: deps.now });\n\t\t\t\tnestedChildren = projectNestedRegistryForRoot(status.runId)?.children ?? [];\n\t\t\t\tattachRootChildrenToSteps(status.runId, status.steps, nestedChildren);\n\t\t\t} catch (error) {\n\t\t\t\tnestedWarning = `Nested status unavailable: ${error instanceof Error ? error.message : String(error)}`;\n\t\t\t}\n\t\t\tconst outputPath = formatAsyncRunOutputPath({ asyncDir, outputFile: status.outputFile });\n\t\t\tconst progressLabel = formatAsyncRunProgressLabel({\n\t\t\t\tmode: status.mode,\n\t\t\t\tstate: status.state,\n\t\t\t\tcurrentStep: status.currentStep,\n\t\t\t\tchainStepCount: status.chainStepCount,\n\t\t\t\tparallelGroups: status.parallelGroups,\n\t\t\t\tsteps: (status.steps ?? []).map((step, index) => ({ index, agent: step.agent, status: step.status })),\n\t\t\t});\n\t\t\tconst started = new Date(status.startedAt).toISOString();\n\t\t\tconst updated = status.lastUpdate ? new Date(status.lastUpdate).toISOString() : \"n/a\";\n\t\t\tconst statusActivityText = status.state === \"running\" ? formatActivityLabel(status.lastActivityAt, status.activityState) : undefined;\n\t\t\tconst steeringText = formatSteeringSummary(status);\n\n\t\t\tconst lines = [\n\t\t\t\t`Run: ${status.runId}`,\n\t\t\t\t`State: ${status.state}`,\n\t\t\t\tstatus.error ? `Error: ${status.error}` : undefined,\n\t\t\t\tstatusActivityText ? `Activity: ${statusActivityText}` : undefined,\n\t\t\t\tsteeringText ? `Steering: ${steeringText}` : undefined,\n\t\t\t\t`Mode: ${status.mode}`,\n\t\t\t\t`Progress: ${progressLabel}`,\n\t\t\t\tstatus.pendingAppends ? `Pending appends: ${status.pendingAppends}` : undefined,\n\t\t\t\t`Started: ${started}`,\n\t\t\t\t`Updated: ${updated}`,\n\t\t\t\tstatus.turnBudget ? `Turn budget: ${status.turnBudget.turnCount}/${status.turnBudget.maxTurns}+${status.turnBudget.graceTurns} (${status.turnBudget.outcome})` : undefined,\n\t\t\t\t`Dir: ${asyncDir}`,\n\t\t\t\toutputPath ? `Output: ${outputPath}` : undefined,\n\t\t\t\treconciliation.message ? `Diagnosis: ${reconciliation.message}` : undefined,\n\t\t\t\treconciliation.resultPath && fs.existsSync(reconciliation.resultPath) ? `Result: ${reconciliation.resultPath}` : undefined,\n\t\t\t].filter((line): line is string => Boolean(line));\n\t\t\tfor (const [index, step] of (status.steps ?? []).entries()) {\n\t\t\t\tconst stepActivityText = step.status === \"running\" ? formatActivityLabel(step.lastActivityAt, step.activityState) : undefined;\n\t\t\t\tconst modelThinking = formatModelThinking(step.model, step.thinking);\n\t\t\t\tconst modelText = modelThinking ? ` (${modelThinking})` : \"\";\n\t\t\t\tconst steeringText = formatSteeringSummary(step);\n\t\t\t\tconst steeringSuffix = steeringText ? `, steering: ${steeringText}` : \"\";\n\t\t\t\tconst errorText = step.error ? `, error: ${step.error}` : \"\";\n\t\t\t\tconst acceptanceText = step.acceptance?.status ? `, acceptance: ${step.acceptance.status}` : \"\";\n\t\t\t\tconst budgetText = step.turnBudget ? `, turn budget: ${step.turnBudget.turnCount}/${step.turnBudget.maxTurns}+${step.turnBudget.graceTurns} (${step.turnBudget.outcome})` : \"\";\n\t\t\t\tconst display = step.label ? `${step.label} (${step.agent})` : step.agent;\n\t\t\t\tconst phase = step.phase ? `[${step.phase}] ` : \"\";\n\t\t\t\tlines.push(`${stepLineLabel(status, index)}: ${phase}${display} ${step.status}${modelText}${stepActivityText ? `, ${stepActivityText}` : \"\"}${steeringSuffix}${acceptanceText}${budgetText}${errorText}`);\n\t\t\t\tlines.push(...formatNestedRunStatusLines(step.children, { indent: \" \", commandHints: true, maxLines: 20 }));\n\t\t\t\tconst stepOutputPath = path.join(asyncDir, `output-${index}.log`);\n\t\t\t\tif (stepOutputPath !== outputPath && fs.existsSync(stepOutputPath)) lines.push(` Output: ${stepOutputPath}`);\n\t\t\t\tif (step.status === \"running\") {\n\t\t\t\t\tlines.push(` Intercom target: ${resolveSubagentIntercomTarget(status.runId, step.childId ?? step.agent, index)} (if registered)`);\n\t\t\t\t\tlines.push(` Steer: subagent({ action: \"steer\", id: \"${status.runId}\", index: ${index}, message: \"...\" })`);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst attached = new Set((status.steps ?? []).flatMap((step) => step.children?.map((child) => child.id) ?? []));\n\t\t\tconst unattached = nestedChildren.filter((child) => !attached.has(child.id));\n\t\t\tlines.push(...formatNestedRunStatusLines(unattached, { indent: \"\", commandHints: true, maxLines: 20 }));\n\t\t\tif (nestedWarning) lines.push(`Warning: ${nestedWarning}`);\n\t\t\tif (status.sessionFile) lines.push(`Session: ${status.sessionFile}`);\n\t\t\tif (status.state === \"running\") lines.push(`Steer running child: subagent({ action: \"steer\", id: \"${status.runId}\", message: \"...\" })`);\n\t\t\tif (status.state !== \"running\") {\n\t\t\t\tlines.push(formatResumeGuidance(status.runId, status.steps ?? [], status.sessionFile, { stopped: status.state === \"stopped\" || status.stopped === true }));\n\t\t\t}\n\t\t\tif (fs.existsSync(logPath)) lines.push(`Log: ${logPath}`);\n\t\t\tif (fs.existsSync(eventsPath)) lines.push(`Events: ${eventsPath}`);\n\n\t\t\treturn { content: [{ type: \"text\", text: lines.join(\"\\n\") }], details: { mode: \"single\", results: [] } };\n\t\t}\n\t}\n\n\tif (resultPath) {\n\t\ttry {\n\t\t\tconst raw = fs.readFileSync(resultPath, \"utf-8\");\n\t\t\tconst data = JSON.parse(raw) as { id?: string; runId?: string; agent?: string; success?: boolean; summary?: string; output?: string; exitCode?: number; state?: string; sessionFile?: string; results?: Array<{ agent?: string; output?: string; summary?: string; sessionFile?: string; state?: string; success?: boolean; exitCode?: number | null }> };\n\t\t\tif (params.view === \"transcript\") {\n\t\t\t\ttry {\n\t\t\t\t\treturn { content: [{ type: \"text\", text: formatAsyncResultTranscript(data, resultPath, { index: params.index, lines: params.lines }) }], details: { mode: \"single\", results: [] } };\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\treturn { content: [{ type: \"text\", text: message }], isError: true, details: { mode: \"single\", results: [] } };\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst status = data.state === \"stopped\" ? \"stopped\" : data.success ? \"complete\" : data.state === \"paused\" || data.exitCode === 0 ? \"paused\" : \"failed\";\n\t\t\tconst runId = data.runId ?? data.id ?? resolvedId;\n\t\t\tconst lines = [`Run: ${runId}`, `State: ${status}`, `Result: ${resultPath}`];\n\t\t\tconst children = Array.isArray(data.results) ? data.results : data.agent ? [{ agent: data.agent, sessionFile: data.sessionFile }] : [];\n\t\t\tlines.push(formatResumeGuidance(runId, children, data.sessionFile, { stopped: status === \"stopped\" }));\n\t\t\tif (data.summary) lines.push(\"\", data.summary);\n\t\t\treturn { content: [{ type: \"text\", text: lines.join(\"\\n\") }], details: { mode: \"single\", results: [] } };\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: `Failed to read async result file: ${message}` }],\n\t\t\t\tisError: true,\n\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t};\n\t\t}\n\t}\n\n\treturn {\n\t\tcontent: [{ type: \"text\", text: \"Status file not found.\" }],\n\t\tisError: true,\n\t\tdetails: { mode: \"single\", results: [] },\n\t};\n}\n"]}
@@ -19,6 +19,10 @@ export declare function isScheduledRunAction(action: unknown): action is Schedul
19
19
  export declare function scheduledRunsEnabled(config: ExtensionConfig): boolean;
20
20
  export declare function scheduledRunStorePath(cwd: string, sessionId: string, root?: string): string;
21
21
  export declare function parseScheduledRunTime(schedule: string, now?: number): number;
22
+ export declare function sanitizeScheduledParams(params: SubagentParamsLike): {
23
+ params?: SubagentParamsLike;
24
+ error?: string;
25
+ };
22
26
  export declare class ScheduledRunManager {
23
27
  private store;
24
28
  private ctx;
@@ -1 +1 @@
1
- {"version":3,"file":"scheduled-runs.d.ts","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/background/scheduled-runs.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAIxE,OAAO,EAEN,KAAK,OAAO,EACZ,KAAK,eAAe,EACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAG7E,eAAO,MAAM,kBAAkB,QAAsD,CAAC;AACtF,eAAO,MAAM,qBAAqB,8EAA+E,CAAC;AAMlH,MAAM,MAAM,kBAAkB,GAAG,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAC;AACtE,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC;AA2BrG,KAAK,kBAAkB,GAAG,IAAI,CAAC,OAAO,UAAU,EAAE,YAAY,GAAG,cAAc,CAAC,CAAC;AAEjF,KAAK,uBAAuB,GAAG;IAC9B,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;IAClH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,kBAAkB,CAAC;CAC5B,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,kBAAkB,CAElF;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAErE;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,SAAqB,GAAG,MAAM,CAGvG;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,MAAM,CAkChF;AA6ID,qBAAa,mBAAmB;IAC/B,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,GAAG,CAA+B;IAC1C,OAAO,CAAC,MAAM,CAAoD;IAClE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA0B;IAE/C,YAAY,IAAI,EAAE,uBAAuB,EAMxC;IAED,WAAW,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI,CAUvC;IAED,IAAI,IAAI,IAAI,CAIX;IAEK,cAAc,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAmBzG;IAED,OAAO,CAAC,SAAS;IAyCjB,OAAO,CAAC,QAAQ;IAahB,OAAO,CAAC,SAAS;IAuBjB,OAAO,CAAC,SAAS;IAmBjB,OAAO,CAAC,kBAAkB;IAqB1B,OAAO,CAAC,GAAG;YAUG,IAAI;IA8DlB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,UAAU;CAIlB;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,uBAAuB,GAAG,mBAAmB,CAE5F","sourcesContent":["// @ts-nocheck\nimport { createHash, randomUUID } from \"node:crypto\";\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { AgentToolResult } from \"@ashx-j/lunr-agent\";\nimport type { ExtensionContext } from \"@ashx-j/lunr\";\nimport { writeAtomicJson } from \"../../shared/atomic-json.ts\";\nimport { formatDuration, shortenPath } from \"../../shared/formatters.ts\";\nimport { resolveCurrentSessionId } from \"../../shared/session-identity.ts\";\nimport {\n\tTEMP_ROOT_DIR,\n\ttype Details,\n\ttype ExtensionConfig,\n} from \"../../shared/types.ts\";\nimport type { SubagentParamsLike } from \"../foreground/subagent-executor.ts\";\nimport { validateExecutionAcceptance } from \"../shared/acceptance.ts\";\n\nexport const SCHEDULED_RUNS_DIR = path.join(TEMP_ROOT_DIR, \"scheduled-subagent-runs\");\nexport const SCHEDULED_RUN_ACTIONS = [\"schedule\", \"schedule-list\", \"schedule-status\", \"schedule-cancel\"] as const;\n\nconst MAX_TIMER_DELAY_MS = 2_147_483_647;\nconst DEFAULT_MAX_LATENESS_MS = 5 * 60 * 1000;\nconst DEFAULT_MAX_PENDING = 20;\n\nexport type ScheduledRunAction = typeof SCHEDULED_RUN_ACTIONS[number];\nexport type ScheduledRunState = \"scheduled\" | \"running\" | \"fired\" | \"canceled\" | \"missed\" | \"failed\";\n\ntype ScheduledRunJob = {\n\tid: string;\n\tname: string;\n\tschedule: string;\n\trunAt: number;\n\tstate: ScheduledRunState;\n\tcreatedAt: number;\n\tupdatedAt: number;\n\tcwd: string;\n\tsessionId: string;\n\tparams: SubagentParamsLike;\n\tlastRunId?: string;\n\tlastAsyncDir?: string;\n\tlastError?: string;\n\tfiredAt?: number;\n\tcanceledAt?: number;\n};\n\ntype ScheduledRunStoreData = {\n\tversion: 1;\n\tcwd: string;\n\tsessionId: string;\n\tjobs: ScheduledRunJob[];\n};\n\ntype ScheduledRunTimers = Pick<typeof globalThis, \"setTimeout\" | \"clearTimeout\">;\n\ntype ScheduledRunManagerDeps = {\n\tconfig: ExtensionConfig;\n\tlaunch(params: SubagentParamsLike, ctx: ExtensionContext, signal: AbortSignal): Promise<AgentToolResult<Details>>;\n\tstoreRoot?: string;\n\tnow?: () => number;\n\trandomId?: () => string;\n\ttimers?: ScheduledRunTimers;\n};\n\nexport function isScheduledRunAction(action: unknown): action is ScheduledRunAction {\n\treturn typeof action === \"string\" && (SCHEDULED_RUN_ACTIONS as readonly string[]).includes(action);\n}\n\nexport function scheduledRunsEnabled(config: ExtensionConfig): boolean {\n\treturn config.scheduledRuns?.enabled === true;\n}\n\nexport function scheduledRunStorePath(cwd: string, sessionId: string, root = SCHEDULED_RUNS_DIR): string {\n\tconst digest = createHash(\"sha256\").update(`${path.resolve(cwd)}\\0${sessionId}`).digest(\"hex\").slice(0, 20);\n\treturn path.join(root, `${digest}.json`);\n}\n\nexport function parseScheduledRunTime(schedule: string, now = Date.now()): number {\n\tconst trimmed = schedule.trim();\n\tconst relative = trimmed.match(/^\\+(\\d+)(s|m|h|d)$/);\n\tif (relative) {\n\t\tconst amount = Number(relative[1]);\n\t\tif (!Number.isSafeInteger(amount) || amount < 1) throw new Error(`Invalid schedule \"${schedule}\". Relative schedules must be positive, such as \"+10m\".`);\n\t\tconst unitMs = { s: 1000, m: 60_000, h: 3_600_000, d: 86_400_000 }[relative[2] as \"s\" | \"m\" | \"h\" | \"d\"];\n\t\tconst runAt = now + amount * unitMs;\n\t\tif (!Number.isSafeInteger(runAt) || Number.isNaN(new Date(runAt).getTime())) throw new Error(`Invalid schedule \"${schedule}\". Relative delay is too large.`);\n\t\treturn runAt;\n\t}\n\tif (/^\\d{4}-\\d{2}-\\d{2}T/.test(trimmed)) {\n\t\tconst iso = trimmed.match(/^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2})(?::(\\d{2})(?:\\.\\d{1,3})?)?(Z|[+-]\\d{2}:\\d{2})$/);\n\t\tif (!iso) throw new Error(`Invalid schedule \"${schedule}\". Absolute ISO timestamps must include a timezone, such as \"2030-01-01T09:00:00Z\".`);\n\t\tconst year = Number(iso[1]);\n\t\tconst month = Number(iso[2]);\n\t\tconst day = Number(iso[3]);\n\t\tconst hour = Number(iso[4]);\n\t\tconst minute = Number(iso[5]);\n\t\tconst second = iso[6] === undefined ? 0 : Number(iso[6]);\n\t\tconst offset = iso[7]!;\n\t\tconst offsetHour = offset === \"Z\" ? 0 : Number(offset.slice(1, 3));\n\t\tconst offsetMinute = offset === \"Z\" ? 0 : Number(offset.slice(4, 6));\n\t\tconst daysInMonth = month >= 1 && month <= 12 ? new Date(Date.UTC(year, month, 0)).getUTCDate() : 0;\n\t\tif (month < 1 || month > 12 || day < 1 || day > daysInMonth || hour > 23 || minute > 59 || second > 59 || offsetHour > 23 || offsetMinute > 59) {\n\t\t\tthrow new Error(`Invalid schedule \"${schedule}\". Use a valid future ISO timestamp.`);\n\t\t}\n\t\tconst parsed = new Date(trimmed).getTime();\n\t\tif (!Number.isNaN(parsed)) {\n\t\t\tif (parsed <= now) throw new Error(`Scheduled time ${new Date(parsed).toISOString()} is in the past.`);\n\t\t\treturn parsed;\n\t\t}\n\t}\n\tthrow new Error(`Invalid schedule \"${schedule}\". Use a one-shot relative delay like \"+10m\" or a future ISO timestamp with timezone.`);\n}\n\nfunction readStoreData(filePath: string, cwd: string, sessionId: string): ScheduledRunStoreData {\n\tif (!fs.existsSync(filePath)) return { version: 1, cwd, sessionId, jobs: [] };\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(fs.readFileSync(filePath, \"utf-8\"));\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tthrow new Error(`Failed to parse scheduled subagent store '${filePath}': ${message}`, { cause: error instanceof Error ? error : undefined });\n\t}\n\tif (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n\t\tthrow new Error(`Scheduled subagent store '${filePath}' must be a JSON object.`);\n\t}\n\tconst data = parsed as Partial<ScheduledRunStoreData>;\n\tif (data.version !== 1) throw new Error(`Unsupported scheduled subagent store version in '${filePath}'.`);\n\tif (!Array.isArray(data.jobs)) throw new Error(`Scheduled subagent store '${filePath}' must contain a jobs array.`);\n\tconst jobs: ScheduledRunJob[] = [];\n\tconst validStates = new Set<ScheduledRunState>([\"scheduled\", \"running\", \"fired\", \"canceled\", \"missed\", \"failed\"]);\n\tfor (const [index, job] of data.jobs.entries()) {\n\t\tif (!job || typeof job !== \"object\" || Array.isArray(job)) throw new Error(`Scheduled subagent store '${filePath}' job ${index} must be an object.`);\n\t\tconst candidate = job as Partial<ScheduledRunJob>;\n\t\tif (typeof candidate.id !== \"string\" || typeof candidate.name !== \"string\" || typeof candidate.schedule !== \"string\" || typeof candidate.cwd !== \"string\" || typeof candidate.sessionId !== \"string\") {\n\t\t\tthrow new Error(`Scheduled subagent store '${filePath}' job ${index} has invalid string fields.`);\n\t\t}\n\t\tconst timestamps = [candidate.runAt, candidate.createdAt, candidate.updatedAt];\n\t\tif (timestamps.some((value) => typeof value !== \"number\" || !Number.isFinite(value) || Number.isNaN(new Date(value).getTime()))) {\n\t\t\tthrow new Error(`Scheduled subagent store '${filePath}' job ${index} has invalid timestamps.`);\n\t\t}\n\t\tif (!candidate.state || !validStates.has(candidate.state)) throw new Error(`Scheduled subagent store '${filePath}' job ${index} has invalid state.`);\n\t\tif (!candidate.params || typeof candidate.params !== \"object\" || Array.isArray(candidate.params)) throw new Error(`Scheduled subagent store '${filePath}' job ${index} has invalid params.`);\n\t\tjobs.push(candidate as ScheduledRunJob);\n\t}\n\treturn {\n\t\tversion: 1,\n\t\tcwd: typeof data.cwd === \"string\" ? data.cwd : cwd,\n\t\tsessionId: typeof data.sessionId === \"string\" ? data.sessionId : sessionId,\n\t\tjobs,\n\t};\n}\n\nclass ScheduledRunStore {\n\tprivate readonly filePath: string;\n\tprivate readonly cwd: string;\n\tprivate readonly sessionId: string;\n\n\tconstructor(filePath: string, cwd: string, sessionId: string) {\n\t\tthis.filePath = filePath;\n\t\tthis.cwd = cwd;\n\t\tthis.sessionId = sessionId;\n\t}\n\n\tlist(): ScheduledRunJob[] {\n\t\treturn readStoreData(this.filePath, this.cwd, this.sessionId).jobs;\n\t}\n\n\tget(id: string): ScheduledRunJob | undefined {\n\t\treturn this.list().find((job) => job.id === id);\n\t}\n\n\tmutate<T>(fn: (data: ScheduledRunStoreData) => T): T {\n\t\tconst data = readStoreData(this.filePath, this.cwd, this.sessionId);\n\t\tconst result = fn(data);\n\t\twriteAtomicJson(this.filePath, data);\n\t\treturn result;\n\t}\n}\n\nfunction resolveMaxLatenessMs(config: ExtensionConfig): number {\n\tconst value = config.scheduledRuns?.maxLatenessMs;\n\treturn Number.isInteger(value) && value >= 0 ? value : DEFAULT_MAX_LATENESS_MS;\n}\n\nfunction resolveMaxPending(config: ExtensionConfig): number {\n\tconst value = config.scheduledRuns?.maxPending;\n\treturn Number.isInteger(value) && value >= 1 ? value : DEFAULT_MAX_PENDING;\n}\n\nfunction terminalState(state: ScheduledRunState): boolean {\n\treturn state === \"fired\" || state === \"canceled\" || state === \"missed\" || state === \"failed\";\n}\n\nfunction jobMode(params: SubagentParamsLike): Details[\"mode\"] {\n\tif ((params.chain?.length ?? 0) > 0) return \"chain\";\n\tif ((params.tasks?.length ?? 0) > 0) return \"parallel\";\n\treturn \"single\";\n}\n\nfunction describeScheduledTarget(params: SubagentParamsLike): string {\n\tif ((params.chain?.length ?? 0) > 0) return `chain (${params.chain!.length})`;\n\tif ((params.tasks?.length ?? 0) > 0) return `parallel (${params.tasks!.length})`;\n\treturn params.agent ? `agent ${params.agent}` : \"subagent run\";\n}\n\nfunction textResult(text: string, isError = false): AgentToolResult<Details> {\n\treturn {\n\t\tcontent: [{ type: \"text\", text }],\n\t\t...(isError ? { isError: true } : {}),\n\t\tdetails: { mode: \"management\", results: [] },\n\t};\n}\n\nfunction resolveJobById(jobs: ScheduledRunJob[], requestedId: string): ScheduledRunJob {\n\tconst exact = jobs.find((job) => job.id === requestedId);\n\tif (exact) return exact;\n\tconst matches = jobs.filter((job) => job.id.startsWith(requestedId));\n\tif (matches.length === 1) return matches[0]!;\n\tif (matches.length > 1) throw new Error(`Ambiguous scheduled run id prefix '${requestedId}' matched: ${matches.map((job) => job.id).join(\", \")}. Provide a longer id.`);\n\tthrow new Error(`Scheduled run '${requestedId}' not found.`);\n}\n\nfunction sanitizeScheduledParams(params: SubagentParamsLike): { params?: SubagentParamsLike; error?: string } {\n\tconst hasChain = (params.chain?.length ?? 0) > 0;\n\tconst hasTasks = (params.tasks?.length ?? 0) > 0;\n\tconst hasSingle = !hasChain && !hasTasks && Boolean(params.agent);\n\tif (Number(hasChain) + Number(hasTasks) + Number(hasSingle) !== 1) {\n\t\treturn { error: \"action='schedule' requires exactly one execution mode: agent, tasks, or chain.\" };\n\t}\n\tif (!params.schedule?.trim()) return { error: \"action='schedule' requires schedule, such as '+10m' or a future ISO timestamp.\" };\n\tif (params.context === \"fork\") return { error: \"Scheduled subagent runs require fresh context. Forked parent-session context is not safe at fire time.\" };\n\tif (params.async === false) return { error: \"Scheduled subagent runs are always async; omit async or set async: true.\" };\n\tif (params.clarify === true) return { error: \"Scheduled subagent runs cannot open clarify UI; omit clarify or set clarify: false.\" };\n\tconst acceptanceErrors = validateExecutionAcceptance(params);\n\tif (acceptanceErrors.length > 0) return { error: acceptanceErrors.join(\" \") };\n\n\tconst {\n\t\taction: _action,\n\t\tid: _id,\n\t\trunId: _runId,\n\t\tdir: _dir,\n\t\tindex: _index,\n\t\tmessage: _message,\n\t\tchainName: _chainName,\n\t\tconfig: _config,\n\t\tschedule: _schedule,\n\t\tscheduleName: _scheduleName,\n\t\t...executionParams\n\t} = params;\n\treturn { params: { ...executionParams, async: true, clarify: false, context: \"fresh\" } };\n}\n\nexport class ScheduledRunManager {\n\tprivate store: ScheduledRunStore | undefined;\n\tprivate ctx: ExtensionContext | undefined;\n\tprivate timers = new Map<string, ReturnType<typeof setTimeout>>();\n\tprivate readonly storeRoot: string;\n\tprivate readonly now: () => number;\n\tprivate readonly randomId: () => string;\n\tprivate readonly timersApi: ScheduledRunTimers;\n\tprivate readonly deps: ScheduledRunManagerDeps;\n\n\tconstructor(deps: ScheduledRunManagerDeps) {\n\t\tthis.deps = deps;\n\t\tthis.storeRoot = deps.storeRoot ?? SCHEDULED_RUNS_DIR;\n\t\tthis.now = deps.now ?? Date.now;\n\t\tthis.randomId = deps.randomId ?? (() => randomUUID().slice(0, 8));\n\t\tthis.timersApi = deps.timers ?? globalThis;\n\t}\n\n\tbindSession(ctx: ExtensionContext): void {\n\t\tthis.stopTimers();\n\t\tthis.ctx = ctx;\n\t\tif (!scheduledRunsEnabled(this.deps.config)) {\n\t\t\tthis.store = undefined;\n\t\t\treturn;\n\t\t}\n\t\tconst sessionId = resolveCurrentSessionId(ctx.sessionManager);\n\t\tthis.store = new ScheduledRunStore(scheduledRunStorePath(ctx.cwd, sessionId, this.storeRoot), ctx.cwd, sessionId);\n\t\tthis.rearmScheduledJobs();\n\t}\n\n\tstop(): void {\n\t\tthis.stopTimers();\n\t\tthis.store = undefined;\n\t\tthis.ctx = undefined;\n\t}\n\n\tasync handleToolCall(params: SubagentParamsLike, ctx: ExtensionContext): Promise<AgentToolResult<Details>> {\n\t\tthis.ctx = ctx;\n\t\ttry {\n\t\t\tif (!scheduledRunsEnabled(this.deps.config)) {\n\t\t\t\treturn textResult(\"Scheduled subagent runs are disabled. Set { \\\"scheduledRuns\\\": { \\\"enabled\\\": true } } in ~/.pi/agent/extensions/subagent/config.json, then reload Pi. Schedule only explicit delayed runs the user asked for.\", true);\n\t\t\t}\n\t\t\tif (!this.store) this.bindSession(ctx);\n\t\t\tif (!this.store) return textResult(\"Scheduled subagent store is unavailable for this session.\", true);\n\t\t\tswitch (params.action) {\n\t\t\t\tcase \"schedule\": return this.createJob(params, ctx);\n\t\t\t\tcase \"schedule-list\": return this.listJobs();\n\t\t\t\tcase \"schedule-status\": return this.statusJob(params);\n\t\t\t\tcase \"schedule-cancel\": return this.cancelJob(params);\n\t\t\t\tdefault: return textResult(`Unknown scheduled-run action: ${params.action}`, true);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\treturn textResult(message, true);\n\t\t}\n\t}\n\n\tprivate createJob(params: SubagentParamsLike, ctx: ExtensionContext): AgentToolResult<Details> {\n\t\tconst store = this.requireStore();\n\t\tconst sanitized = sanitizeScheduledParams(params);\n\t\tif (sanitized.error) return textResult(sanitized.error, true);\n\t\tconst scheduleInput = params.schedule!.trim();\n\t\tconst runAt = parseScheduledRunTime(scheduleInput, this.now());\n\t\tconst pendingCount = store.list().filter((job) => job.state === \"scheduled\" || job.state === \"running\").length;\n\t\tconst maxPending = resolveMaxPending(this.deps.config);\n\t\tif (pendingCount >= maxPending) return textResult(`Scheduled subagent limit reached (${pendingCount}/${maxPending} pending or running). Cancel an existing scheduled run before adding another.`, true);\n\t\tconst id = this.randomId();\n\t\tconst sessionId = resolveCurrentSessionId(ctx.sessionManager);\n\t\tconst scheduleName = params.scheduleName?.trim();\n\t\tconst executionParams = sanitized.params!;\n\t\tconst now = this.now();\n\t\tconst job: ScheduledRunJob = {\n\t\t\tid,\n\t\t\tname: scheduleName || describeScheduledTarget(executionParams),\n\t\t\tschedule: scheduleInput,\n\t\t\trunAt,\n\t\t\tstate: \"scheduled\",\n\t\t\tcreatedAt: now,\n\t\t\tupdatedAt: now,\n\t\t\tcwd: ctx.cwd,\n\t\t\tsessionId,\n\t\t\tparams: executionParams,\n\t\t};\n\t\tstore.mutate((data) => {\n\t\t\tdata.jobs.push(job);\n\t\t});\n\t\tthis.arm(job);\n\t\treturn textResult([\n\t\t\t`Scheduled subagent run ${job.id}.`,\n\t\t\t`Name: ${job.name}`,\n\t\t\t`When: ${new Date(job.runAt).toISOString()}`,\n\t\t\t`Mode: ${jobMode(executionParams)}`,\n\t\t\t`Context: fresh (scheduled runs never fork parent-session context)`,\n\t\t\t`Status: subagent({ action: \"schedule-status\", id: \"${job.id}\" })`,\n\t\t\t`Cancel before it fires: subagent({ action: \"schedule-cancel\", id: \"${job.id}\" })`,\n\t\t].join(\"\\n\"));\n\t}\n\n\tprivate listJobs(): AgentToolResult<Details> {\n\t\tconst jobs = this.requireStore().list().sort((left, right) => left.runAt - right.runAt);\n\t\tif (jobs.length === 0) return textResult(\"No scheduled subagent runs for this session.\");\n\t\tconst lines = [`Scheduled subagent runs: ${jobs.length}`, \"\"];\n\t\tfor (const job of jobs) {\n\t\t\tconst parts = [job.id, job.state, new Date(job.runAt).toISOString(), job.name];\n\t\t\tif (job.lastRunId) parts.push(`run ${job.lastRunId}`);\n\t\t\tif (job.lastError) parts.push(`error: ${job.lastError}`);\n\t\t\tlines.push(`- ${parts.join(\" | \")}`);\n\t\t}\n\t\treturn textResult(lines.join(\"\\n\"));\n\t}\n\n\tprivate statusJob(params: SubagentParamsLike): AgentToolResult<Details> {\n\t\tconst requestedId = params.id ?? params.runId;\n\t\tif (!requestedId) return textResult(\"action='schedule-status' requires id.\", true);\n\t\tconst job = resolveJobById(this.requireStore().list(), requestedId);\n\t\tconst lines = [\n\t\t\t`Scheduled run: ${job.id}`,\n\t\t\t`Name: ${job.name}`,\n\t\t\t`State: ${job.state}`,\n\t\t\t`Schedule: ${job.schedule}`,\n\t\t\t`Run at: ${new Date(job.runAt).toISOString()}`,\n\t\t\t`Mode: ${jobMode(job.params)}`,\n\t\t\t`CWD: ${shortenPath(job.cwd)}`,\n\t\t\t`Created: ${new Date(job.createdAt).toISOString()}`,\n\t\t\t`Updated: ${new Date(job.updatedAt).toISOString()}`,\n\t\t\tjob.lastRunId ? `Launched async run: ${job.lastRunId}` : undefined,\n\t\t\tjob.lastAsyncDir ? `Async dir: ${job.lastAsyncDir}` : undefined,\n\t\t\tjob.lastError ? `Error: ${job.lastError}` : undefined,\n\t\t\tjob.state === \"scheduled\" ? `Cancel: subagent({ action: \"schedule-cancel\", id: \"${job.id}\" })` : undefined,\n\t\t\tjob.lastRunId ? `Async status: subagent({ action: \"status\", id: \"${job.lastRunId}\" })` : undefined,\n\t\t].filter((line): line is string => Boolean(line));\n\t\treturn textResult(lines.join(\"\\n\"));\n\t}\n\n\tprivate cancelJob(params: SubagentParamsLike): AgentToolResult<Details> {\n\t\tconst requestedId = params.id ?? params.runId;\n\t\tif (!requestedId) return textResult(\"action='schedule-cancel' requires id.\", true);\n\t\tconst store = this.requireStore();\n\t\tconst job = resolveJobById(store.list(), requestedId);\n\t\tif (job.state === \"running\") return textResult(`Scheduled run ${job.id} already launched async run ${job.lastRunId ?? \"unknown\"}; interrupt that async run instead.`, true);\n\t\tif (terminalState(job.state)) return textResult(`Scheduled run ${job.id} is already ${job.state}.`, true);\n\t\tconst now = this.now();\n\t\tthis.clearTimer(job.id);\n\t\tstore.mutate((data) => {\n\t\t\tconst stored = data.jobs.find((candidate) => candidate.id === job.id);\n\t\t\tif (!stored) return;\n\t\t\tstored.state = \"canceled\";\n\t\t\tstored.canceledAt = now;\n\t\t\tstored.updatedAt = now;\n\t\t});\n\t\treturn textResult(`Canceled scheduled subagent run ${job.id}.`);\n\t}\n\n\tprivate rearmScheduledJobs(): void {\n\t\tconst store = this.requireStore();\n\t\tconst now = this.now();\n\t\tconst maxLatenessMs = resolveMaxLatenessMs(this.deps.config);\n\t\tconst dueToMiss = store.list().filter((job) => job.state === \"scheduled\" && job.runAt + maxLatenessMs < now);\n\t\tif (dueToMiss.length > 0) {\n\t\t\tstore.mutate((data) => {\n\t\t\t\tfor (const missed of dueToMiss) {\n\t\t\t\t\tconst job = data.jobs.find((candidate) => candidate.id === missed.id);\n\t\t\t\t\tif (!job || job.state !== \"scheduled\") continue;\n\t\t\t\t\tjob.state = \"missed\";\n\t\t\t\t\tjob.updatedAt = now;\n\t\t\t\t\tjob.lastError = `Missed scheduled time by more than ${formatDuration(maxLatenessMs)} while Pi was not available.`;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tfor (const job of store.list()) {\n\t\t\tif (job.state === \"scheduled\") this.arm(job);\n\t\t}\n\t}\n\n\tprivate arm(job: ScheduledRunJob): void {\n\t\tthis.clearTimer(job.id);\n\t\tconst delayMs = Math.max(0, job.runAt - this.now());\n\t\tconst timer = this.timersApi.setTimeout(() => {\n\t\t\tvoid this.fire(job.id);\n\t\t}, Math.min(delayMs, MAX_TIMER_DELAY_MS));\n\t\ttimer.unref?.();\n\t\tthis.timers.set(job.id, timer);\n\t}\n\n\tprivate async fire(jobId: string): Promise<void> {\n\t\tthis.clearTimer(jobId);\n\t\tconst store = this.store;\n\t\tconst ctx = this.ctx;\n\t\tif (!store || !ctx) return;\n\t\tlet job = store.get(jobId);\n\t\tif (!job || job.state !== \"scheduled\") return;\n\t\tconst now = this.now();\n\t\t// A timer capped at MAX_TIMER_DELAY_MS may fire before runAt for far-future schedules; re-arm and wait.\n\t\tif (now < job.runAt) {\n\t\t\tthis.arm(job);\n\t\t\treturn;\n\t\t}\n\t\tconst maxLatenessMs = resolveMaxLatenessMs(this.deps.config);\n\t\tif (job.runAt + maxLatenessMs < now) {\n\t\t\tstore.mutate((data) => {\n\t\t\t\tconst stored = data.jobs.find((candidate) => candidate.id === jobId);\n\t\t\t\tif (!stored || stored.state !== \"scheduled\") return;\n\t\t\t\tstored.state = \"missed\";\n\t\t\t\tstored.updatedAt = now;\n\t\t\t\tstored.lastError = `Missed scheduled time by more than ${formatDuration(maxLatenessMs)}.`;\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tstore.mutate((data) => {\n\t\t\tconst stored = data.jobs.find((candidate) => candidate.id === jobId);\n\t\t\tif (!stored || stored.state !== \"scheduled\") return;\n\t\t\tstored.state = \"running\";\n\t\t\tstored.firedAt = now;\n\t\t\tstored.updatedAt = now;\n\t\t});\n\t\tjob = store.get(jobId);\n\t\tif (!job || job.state !== \"running\") return;\n\t\tconst controller = new AbortController();\n\t\ttry {\n\t\t\tconst result = await this.deps.launch(job.params, ctx, controller.signal);\n\t\t\tconst launchRunId = result.details?.asyncId ?? result.details?.runId;\n\t\t\tstore.mutate((data) => {\n\t\t\t\tconst stored = data.jobs.find((candidate) => candidate.id === jobId);\n\t\t\t\tif (!stored) return;\n\t\t\t\tstored.updatedAt = this.now();\n\t\t\t\tif (result.isError || !launchRunId) {\n\t\t\t\t\tstored.state = \"failed\";\n\t\t\t\t\tstored.lastError = result.content.find((item) => item.type === \"text\")?.text ?? \"Scheduled subagent launch failed.\";\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tstored.state = \"fired\";\n\t\t\t\tstored.lastRunId = launchRunId;\n\t\t\t\tstored.lastAsyncDir = result.details?.asyncDir;\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tstore.mutate((data) => {\n\t\t\t\tconst stored = data.jobs.find((candidate) => candidate.id === jobId);\n\t\t\t\tif (!stored) return;\n\t\t\t\tstored.state = \"failed\";\n\t\t\t\tstored.lastError = message;\n\t\t\t\tstored.updatedAt = this.now();\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate requireStore(): ScheduledRunStore {\n\t\tif (!this.store) throw new Error(\"Scheduled subagent store is not bound to a session.\");\n\t\treturn this.store;\n\t}\n\n\tprivate clearTimer(jobId: string): void {\n\t\tconst timer = this.timers.get(jobId);\n\t\tif (!timer) return;\n\t\tthis.timersApi.clearTimeout(timer);\n\t\tthis.timers.delete(jobId);\n\t}\n\n\tprivate stopTimers(): void {\n\t\tfor (const timer of this.timers.values()) this.timersApi.clearTimeout(timer);\n\t\tthis.timers.clear();\n\t}\n}\n\nexport function createScheduledRunManager(deps: ScheduledRunManagerDeps): ScheduledRunManager {\n\treturn new ScheduledRunManager(deps);\n}\n"]}
1
+ {"version":3,"file":"scheduled-runs.d.ts","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/background/scheduled-runs.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAIxE,OAAO,EAEN,KAAK,OAAO,EACZ,KAAK,eAAe,EACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAG7E,eAAO,MAAM,kBAAkB,QAAsD,CAAC;AACtF,eAAO,MAAM,qBAAqB,8EAA+E,CAAC;AAMlH,MAAM,MAAM,kBAAkB,GAAG,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAC;AACtE,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC;AA2BrG,KAAK,kBAAkB,GAAG,IAAI,CAAC,OAAO,UAAU,EAAE,YAAY,GAAG,cAAc,CAAC,CAAC;AAEjF,KAAK,uBAAuB,GAAG;IAC9B,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;IAClH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,kBAAkB,CAAC;CAC5B,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,kBAAkB,CAElF;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAErE;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,SAAqB,GAAG,MAAM,CAGvG;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,MAAM,CAkChF;AA+GD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,kBAAkB,GAAG;IAAE,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CA0BnH;AAED,qBAAa,mBAAmB;IAC/B,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,GAAG,CAA+B;IAC1C,OAAO,CAAC,MAAM,CAAoD;IAClE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA0B;IAE/C,YAAY,IAAI,EAAE,uBAAuB,EAMxC;IAED,WAAW,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI,CAUvC;IAED,IAAI,IAAI,IAAI,CAIX;IAEK,cAAc,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAmBzG;IAED,OAAO,CAAC,SAAS;IAyCjB,OAAO,CAAC,QAAQ;IAahB,OAAO,CAAC,SAAS;IAuBjB,OAAO,CAAC,SAAS;IAmBjB,OAAO,CAAC,kBAAkB;IAqB1B,OAAO,CAAC,GAAG;YAUG,IAAI;IA8DlB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,UAAU;CAIlB;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,uBAAuB,GAAG,mBAAmB,CAE5F","sourcesContent":["// @ts-nocheck\nimport { createHash, randomUUID } from \"node:crypto\";\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { AgentToolResult } from \"@ashx-j/lunr-agent\";\nimport type { ExtensionContext } from \"@ashx-j/lunr\";\nimport { writeAtomicJson } from \"../../shared/atomic-json.ts\";\nimport { formatDuration, shortenPath } from \"../../shared/formatters.ts\";\nimport { resolveCurrentSessionId } from \"../../shared/session-identity.ts\";\nimport {\n\tTEMP_ROOT_DIR,\n\ttype Details,\n\ttype ExtensionConfig,\n} from \"../../shared/types.ts\";\nimport type { SubagentParamsLike } from \"../foreground/subagent-executor.ts\";\nimport { validateExecutionAcceptance } from \"../shared/acceptance.ts\";\n\nexport const SCHEDULED_RUNS_DIR = path.join(TEMP_ROOT_DIR, \"scheduled-subagent-runs\");\nexport const SCHEDULED_RUN_ACTIONS = [\"schedule\", \"schedule-list\", \"schedule-status\", \"schedule-cancel\"] as const;\n\nconst MAX_TIMER_DELAY_MS = 2_147_483_647;\nconst DEFAULT_MAX_LATENESS_MS = 5 * 60 * 1000;\nconst DEFAULT_MAX_PENDING = 20;\n\nexport type ScheduledRunAction = typeof SCHEDULED_RUN_ACTIONS[number];\nexport type ScheduledRunState = \"scheduled\" | \"running\" | \"fired\" | \"canceled\" | \"missed\" | \"failed\";\n\ntype ScheduledRunJob = {\n\tid: string;\n\tname: string;\n\tschedule: string;\n\trunAt: number;\n\tstate: ScheduledRunState;\n\tcreatedAt: number;\n\tupdatedAt: number;\n\tcwd: string;\n\tsessionId: string;\n\tparams: SubagentParamsLike;\n\tlastRunId?: string;\n\tlastAsyncDir?: string;\n\tlastError?: string;\n\tfiredAt?: number;\n\tcanceledAt?: number;\n};\n\ntype ScheduledRunStoreData = {\n\tversion: 1;\n\tcwd: string;\n\tsessionId: string;\n\tjobs: ScheduledRunJob[];\n};\n\ntype ScheduledRunTimers = Pick<typeof globalThis, \"setTimeout\" | \"clearTimeout\">;\n\ntype ScheduledRunManagerDeps = {\n\tconfig: ExtensionConfig;\n\tlaunch(params: SubagentParamsLike, ctx: ExtensionContext, signal: AbortSignal): Promise<AgentToolResult<Details>>;\n\tstoreRoot?: string;\n\tnow?: () => number;\n\trandomId?: () => string;\n\ttimers?: ScheduledRunTimers;\n};\n\nexport function isScheduledRunAction(action: unknown): action is ScheduledRunAction {\n\treturn typeof action === \"string\" && (SCHEDULED_RUN_ACTIONS as readonly string[]).includes(action);\n}\n\nexport function scheduledRunsEnabled(config: ExtensionConfig): boolean {\n\treturn config.scheduledRuns?.enabled === true;\n}\n\nexport function scheduledRunStorePath(cwd: string, sessionId: string, root = SCHEDULED_RUNS_DIR): string {\n\tconst digest = createHash(\"sha256\").update(`${path.resolve(cwd)}\\0${sessionId}`).digest(\"hex\").slice(0, 20);\n\treturn path.join(root, `${digest}.json`);\n}\n\nexport function parseScheduledRunTime(schedule: string, now = Date.now()): number {\n\tconst trimmed = schedule.trim();\n\tconst relative = trimmed.match(/^\\+(\\d+)(s|m|h|d)$/);\n\tif (relative) {\n\t\tconst amount = Number(relative[1]);\n\t\tif (!Number.isSafeInteger(amount) || amount < 1) throw new Error(`Invalid schedule \"${schedule}\". Relative schedules must be positive, such as \"+10m\".`);\n\t\tconst unitMs = { s: 1000, m: 60_000, h: 3_600_000, d: 86_400_000 }[relative[2] as \"s\" | \"m\" | \"h\" | \"d\"];\n\t\tconst runAt = now + amount * unitMs;\n\t\tif (!Number.isSafeInteger(runAt) || Number.isNaN(new Date(runAt).getTime())) throw new Error(`Invalid schedule \"${schedule}\". Relative delay is too large.`);\n\t\treturn runAt;\n\t}\n\tif (/^\\d{4}-\\d{2}-\\d{2}T/.test(trimmed)) {\n\t\tconst iso = trimmed.match(/^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2})(?::(\\d{2})(?:\\.\\d{1,3})?)?(Z|[+-]\\d{2}:\\d{2})$/);\n\t\tif (!iso) throw new Error(`Invalid schedule \"${schedule}\". Absolute ISO timestamps must include a timezone, such as \"2030-01-01T09:00:00Z\".`);\n\t\tconst year = Number(iso[1]);\n\t\tconst month = Number(iso[2]);\n\t\tconst day = Number(iso[3]);\n\t\tconst hour = Number(iso[4]);\n\t\tconst minute = Number(iso[5]);\n\t\tconst second = iso[6] === undefined ? 0 : Number(iso[6]);\n\t\tconst offset = iso[7]!;\n\t\tconst offsetHour = offset === \"Z\" ? 0 : Number(offset.slice(1, 3));\n\t\tconst offsetMinute = offset === \"Z\" ? 0 : Number(offset.slice(4, 6));\n\t\tconst daysInMonth = month >= 1 && month <= 12 ? new Date(Date.UTC(year, month, 0)).getUTCDate() : 0;\n\t\tif (month < 1 || month > 12 || day < 1 || day > daysInMonth || hour > 23 || minute > 59 || second > 59 || offsetHour > 23 || offsetMinute > 59) {\n\t\t\tthrow new Error(`Invalid schedule \"${schedule}\". Use a valid future ISO timestamp.`);\n\t\t}\n\t\tconst parsed = new Date(trimmed).getTime();\n\t\tif (!Number.isNaN(parsed)) {\n\t\t\tif (parsed <= now) throw new Error(`Scheduled time ${new Date(parsed).toISOString()} is in the past.`);\n\t\t\treturn parsed;\n\t\t}\n\t}\n\tthrow new Error(`Invalid schedule \"${schedule}\". Use a one-shot relative delay like \"+10m\" or a future ISO timestamp with timezone.`);\n}\n\nfunction readStoreData(filePath: string, cwd: string, sessionId: string): ScheduledRunStoreData {\n\tif (!fs.existsSync(filePath)) return { version: 1, cwd, sessionId, jobs: [] };\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(fs.readFileSync(filePath, \"utf-8\"));\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tthrow new Error(`Failed to parse scheduled subagent store '${filePath}': ${message}`, { cause: error instanceof Error ? error : undefined });\n\t}\n\tif (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n\t\tthrow new Error(`Scheduled subagent store '${filePath}' must be a JSON object.`);\n\t}\n\tconst data = parsed as Partial<ScheduledRunStoreData>;\n\tif (data.version !== 1) throw new Error(`Unsupported scheduled subagent store version in '${filePath}'.`);\n\tif (!Array.isArray(data.jobs)) throw new Error(`Scheduled subagent store '${filePath}' must contain a jobs array.`);\n\tconst jobs: ScheduledRunJob[] = [];\n\tconst validStates = new Set<ScheduledRunState>([\"scheduled\", \"running\", \"fired\", \"canceled\", \"missed\", \"failed\"]);\n\tfor (const [index, job] of data.jobs.entries()) {\n\t\tif (!job || typeof job !== \"object\" || Array.isArray(job)) throw new Error(`Scheduled subagent store '${filePath}' job ${index} must be an object.`);\n\t\tconst candidate = job as Partial<ScheduledRunJob>;\n\t\tif (typeof candidate.id !== \"string\" || typeof candidate.name !== \"string\" || typeof candidate.schedule !== \"string\" || typeof candidate.cwd !== \"string\" || typeof candidate.sessionId !== \"string\") {\n\t\t\tthrow new Error(`Scheduled subagent store '${filePath}' job ${index} has invalid string fields.`);\n\t\t}\n\t\tconst timestamps = [candidate.runAt, candidate.createdAt, candidate.updatedAt];\n\t\tif (timestamps.some((value) => typeof value !== \"number\" || !Number.isFinite(value) || Number.isNaN(new Date(value).getTime()))) {\n\t\t\tthrow new Error(`Scheduled subagent store '${filePath}' job ${index} has invalid timestamps.`);\n\t\t}\n\t\tif (!candidate.state || !validStates.has(candidate.state)) throw new Error(`Scheduled subagent store '${filePath}' job ${index} has invalid state.`);\n\t\tif (!candidate.params || typeof candidate.params !== \"object\" || Array.isArray(candidate.params)) throw new Error(`Scheduled subagent store '${filePath}' job ${index} has invalid params.`);\n\t\tjobs.push(candidate as ScheduledRunJob);\n\t}\n\treturn {\n\t\tversion: 1,\n\t\tcwd: typeof data.cwd === \"string\" ? data.cwd : cwd,\n\t\tsessionId: typeof data.sessionId === \"string\" ? data.sessionId : sessionId,\n\t\tjobs,\n\t};\n}\n\nclass ScheduledRunStore {\n\tprivate readonly filePath: string;\n\tprivate readonly cwd: string;\n\tprivate readonly sessionId: string;\n\n\tconstructor(filePath: string, cwd: string, sessionId: string) {\n\t\tthis.filePath = filePath;\n\t\tthis.cwd = cwd;\n\t\tthis.sessionId = sessionId;\n\t}\n\n\tlist(): ScheduledRunJob[] {\n\t\treturn readStoreData(this.filePath, this.cwd, this.sessionId).jobs;\n\t}\n\n\tget(id: string): ScheduledRunJob | undefined {\n\t\treturn this.list().find((job) => job.id === id);\n\t}\n\n\tmutate<T>(fn: (data: ScheduledRunStoreData) => T): T {\n\t\tconst data = readStoreData(this.filePath, this.cwd, this.sessionId);\n\t\tconst result = fn(data);\n\t\twriteAtomicJson(this.filePath, data);\n\t\treturn result;\n\t}\n}\n\nfunction resolveMaxLatenessMs(config: ExtensionConfig): number {\n\tconst value = config.scheduledRuns?.maxLatenessMs;\n\treturn Number.isInteger(value) && value >= 0 ? value : DEFAULT_MAX_LATENESS_MS;\n}\n\nfunction resolveMaxPending(config: ExtensionConfig): number {\n\tconst value = config.scheduledRuns?.maxPending;\n\treturn Number.isInteger(value) && value >= 1 ? value : DEFAULT_MAX_PENDING;\n}\n\nfunction terminalState(state: ScheduledRunState): boolean {\n\treturn state === \"fired\" || state === \"canceled\" || state === \"missed\" || state === \"failed\";\n}\n\nfunction jobMode(params: SubagentParamsLike): Details[\"mode\"] {\n\tif ((params.chain?.length ?? 0) > 0) return \"chain\";\n\tif ((params.tasks?.length ?? 0) > 0) return \"parallel\";\n\treturn \"single\";\n}\n\nfunction describeScheduledTarget(params: SubagentParamsLike): string {\n\tif ((params.chain?.length ?? 0) > 0) return `chain (${params.chain!.length})`;\n\tif ((params.tasks?.length ?? 0) > 0) return `parallel (${params.tasks!.length})`;\n\treturn params.agent ? `agent ${params.agent}` : \"subagent run\";\n}\n\nfunction textResult(text: string, isError = false): AgentToolResult<Details> {\n\treturn {\n\t\tcontent: [{ type: \"text\", text }],\n\t\t...(isError ? { isError: true } : {}),\n\t\tdetails: { mode: \"management\", results: [] },\n\t};\n}\n\nfunction resolveJobById(jobs: ScheduledRunJob[], requestedId: string): ScheduledRunJob {\n\tconst exact = jobs.find((job) => job.id === requestedId);\n\tif (exact) return exact;\n\tconst matches = jobs.filter((job) => job.id.startsWith(requestedId));\n\tif (matches.length === 1) return matches[0]!;\n\tif (matches.length > 1) throw new Error(`Ambiguous scheduled run id prefix '${requestedId}' matched: ${matches.map((job) => job.id).join(\", \")}. Provide a longer id.`);\n\tthrow new Error(`Scheduled run '${requestedId}' not found.`);\n}\n\nexport function sanitizeScheduledParams(params: SubagentParamsLike): { params?: SubagentParamsLike; error?: string } {\n\tconst hasChain = (params.chain?.length ?? 0) > 0;\n\tconst hasTasks = (params.tasks?.length ?? 0) > 0;\n\tconst hasSingle = !hasChain && !hasTasks && Boolean(params.task);\n\tif (Number(hasChain) + Number(hasTasks) + Number(hasSingle) !== 1) {\n\t\treturn { error: \"action='schedule' requires exactly one execution mode: {task, description, permissions?}, tasks, or chain.\" };\n\t}\n\tif (!params.schedule?.trim()) return { error: \"action='schedule' requires schedule, such as '+10m' or a future ISO timestamp.\" };\n\tif (params.context === \"fork\") return { error: \"Scheduled subagent runs require fresh context. Forked parent-session context is not safe at fire time.\" };\n\tif (params.async === false) return { error: \"Scheduled subagent runs are always async; omit async or set async: true.\" };\n\tif (params.clarify === true) return { error: \"Scheduled subagent runs cannot open clarify UI; omit clarify or set clarify: false.\" };\n\tconst acceptanceErrors = validateExecutionAcceptance(params);\n\tif (acceptanceErrors.length > 0) return { error: acceptanceErrors.join(\" \") };\n\n\tconst {\n\t\taction: _action,\n\t\tid: _id,\n\t\trunId: _runId,\n\t\tdir: _dir,\n\t\tindex: _index,\n\t\tmessage: _message,\n\t\tschedule: _schedule,\n\t\tscheduleName: _scheduleName,\n\t\t...executionParams\n\t} = params;\n\treturn { params: { ...executionParams, async: true, clarify: false, context: \"fresh\" } };\n}\n\nexport class ScheduledRunManager {\n\tprivate store: ScheduledRunStore | undefined;\n\tprivate ctx: ExtensionContext | undefined;\n\tprivate timers = new Map<string, ReturnType<typeof setTimeout>>();\n\tprivate readonly storeRoot: string;\n\tprivate readonly now: () => number;\n\tprivate readonly randomId: () => string;\n\tprivate readonly timersApi: ScheduledRunTimers;\n\tprivate readonly deps: ScheduledRunManagerDeps;\n\n\tconstructor(deps: ScheduledRunManagerDeps) {\n\t\tthis.deps = deps;\n\t\tthis.storeRoot = deps.storeRoot ?? SCHEDULED_RUNS_DIR;\n\t\tthis.now = deps.now ?? Date.now;\n\t\tthis.randomId = deps.randomId ?? (() => randomUUID().slice(0, 8));\n\t\tthis.timersApi = deps.timers ?? globalThis;\n\t}\n\n\tbindSession(ctx: ExtensionContext): void {\n\t\tthis.stopTimers();\n\t\tthis.ctx = ctx;\n\t\tif (!scheduledRunsEnabled(this.deps.config)) {\n\t\t\tthis.store = undefined;\n\t\t\treturn;\n\t\t}\n\t\tconst sessionId = resolveCurrentSessionId(ctx.sessionManager);\n\t\tthis.store = new ScheduledRunStore(scheduledRunStorePath(ctx.cwd, sessionId, this.storeRoot), ctx.cwd, sessionId);\n\t\tthis.rearmScheduledJobs();\n\t}\n\n\tstop(): void {\n\t\tthis.stopTimers();\n\t\tthis.store = undefined;\n\t\tthis.ctx = undefined;\n\t}\n\n\tasync handleToolCall(params: SubagentParamsLike, ctx: ExtensionContext): Promise<AgentToolResult<Details>> {\n\t\tthis.ctx = ctx;\n\t\ttry {\n\t\t\tif (!scheduledRunsEnabled(this.deps.config)) {\n\t\t\t\treturn textResult(\"Scheduled subagent runs are disabled. Set { \\\"scheduledRuns\\\": { \\\"enabled\\\": true } } in ~/.lunr/agent/extensions/subagent/config.json, then reload lunR. Schedule only explicit delayed runs the user asked for.\", true);\n\t\t\t}\n\t\t\tif (!this.store) this.bindSession(ctx);\n\t\t\tif (!this.store) return textResult(\"Scheduled subagent store is unavailable for this session.\", true);\n\t\t\tswitch (params.action) {\n\t\t\t\tcase \"schedule\": return this.createJob(params, ctx);\n\t\t\t\tcase \"schedule-list\": return this.listJobs();\n\t\t\t\tcase \"schedule-status\": return this.statusJob(params);\n\t\t\t\tcase \"schedule-cancel\": return this.cancelJob(params);\n\t\t\t\tdefault: return textResult(`Unknown scheduled-run action: ${params.action}`, true);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\treturn textResult(message, true);\n\t\t}\n\t}\n\n\tprivate createJob(params: SubagentParamsLike, ctx: ExtensionContext): AgentToolResult<Details> {\n\t\tconst store = this.requireStore();\n\t\tconst sanitized = sanitizeScheduledParams(params);\n\t\tif (sanitized.error) return textResult(sanitized.error, true);\n\t\tconst scheduleInput = params.schedule!.trim();\n\t\tconst runAt = parseScheduledRunTime(scheduleInput, this.now());\n\t\tconst pendingCount = store.list().filter((job) => job.state === \"scheduled\" || job.state === \"running\").length;\n\t\tconst maxPending = resolveMaxPending(this.deps.config);\n\t\tif (pendingCount >= maxPending) return textResult(`Scheduled subagent limit reached (${pendingCount}/${maxPending} pending or running). Cancel an existing scheduled run before adding another.`, true);\n\t\tconst id = this.randomId();\n\t\tconst sessionId = resolveCurrentSessionId(ctx.sessionManager);\n\t\tconst scheduleName = params.scheduleName?.trim();\n\t\tconst executionParams = sanitized.params!;\n\t\tconst now = this.now();\n\t\tconst job: ScheduledRunJob = {\n\t\t\tid,\n\t\t\tname: scheduleName || describeScheduledTarget(executionParams),\n\t\t\tschedule: scheduleInput,\n\t\t\trunAt,\n\t\t\tstate: \"scheduled\",\n\t\t\tcreatedAt: now,\n\t\t\tupdatedAt: now,\n\t\t\tcwd: ctx.cwd,\n\t\t\tsessionId,\n\t\t\tparams: executionParams,\n\t\t};\n\t\tstore.mutate((data) => {\n\t\t\tdata.jobs.push(job);\n\t\t});\n\t\tthis.arm(job);\n\t\treturn textResult([\n\t\t\t`Scheduled subagent run ${job.id}.`,\n\t\t\t`Name: ${job.name}`,\n\t\t\t`When: ${new Date(job.runAt).toISOString()}`,\n\t\t\t`Mode: ${jobMode(executionParams)}`,\n\t\t\t`Context: fresh (scheduled runs never fork parent-session context)`,\n\t\t\t`Status: subagent({ action: \"schedule-status\", id: \"${job.id}\" })`,\n\t\t\t`Cancel before it fires: subagent({ action: \"schedule-cancel\", id: \"${job.id}\" })`,\n\t\t].join(\"\\n\"));\n\t}\n\n\tprivate listJobs(): AgentToolResult<Details> {\n\t\tconst jobs = this.requireStore().list().sort((left, right) => left.runAt - right.runAt);\n\t\tif (jobs.length === 0) return textResult(\"No scheduled subagent runs for this session.\");\n\t\tconst lines = [`Scheduled subagent runs: ${jobs.length}`, \"\"];\n\t\tfor (const job of jobs) {\n\t\t\tconst parts = [job.id, job.state, new Date(job.runAt).toISOString(), job.name];\n\t\t\tif (job.lastRunId) parts.push(`run ${job.lastRunId}`);\n\t\t\tif (job.lastError) parts.push(`error: ${job.lastError}`);\n\t\t\tlines.push(`- ${parts.join(\" | \")}`);\n\t\t}\n\t\treturn textResult(lines.join(\"\\n\"));\n\t}\n\n\tprivate statusJob(params: SubagentParamsLike): AgentToolResult<Details> {\n\t\tconst requestedId = params.id ?? params.runId;\n\t\tif (!requestedId) return textResult(\"action='schedule-status' requires id.\", true);\n\t\tconst job = resolveJobById(this.requireStore().list(), requestedId);\n\t\tconst lines = [\n\t\t\t`Scheduled run: ${job.id}`,\n\t\t\t`Name: ${job.name}`,\n\t\t\t`State: ${job.state}`,\n\t\t\t`Schedule: ${job.schedule}`,\n\t\t\t`Run at: ${new Date(job.runAt).toISOString()}`,\n\t\t\t`Mode: ${jobMode(job.params)}`,\n\t\t\t`CWD: ${shortenPath(job.cwd)}`,\n\t\t\t`Created: ${new Date(job.createdAt).toISOString()}`,\n\t\t\t`Updated: ${new Date(job.updatedAt).toISOString()}`,\n\t\t\tjob.lastRunId ? `Launched async run: ${job.lastRunId}` : undefined,\n\t\t\tjob.lastAsyncDir ? `Async dir: ${job.lastAsyncDir}` : undefined,\n\t\t\tjob.lastError ? `Error: ${job.lastError}` : undefined,\n\t\t\tjob.state === \"scheduled\" ? `Cancel: subagent({ action: \"schedule-cancel\", id: \"${job.id}\" })` : undefined,\n\t\t\tjob.lastRunId ? `Async status: subagent({ action: \"status\", id: \"${job.lastRunId}\" })` : undefined,\n\t\t].filter((line): line is string => Boolean(line));\n\t\treturn textResult(lines.join(\"\\n\"));\n\t}\n\n\tprivate cancelJob(params: SubagentParamsLike): AgentToolResult<Details> {\n\t\tconst requestedId = params.id ?? params.runId;\n\t\tif (!requestedId) return textResult(\"action='schedule-cancel' requires id.\", true);\n\t\tconst store = this.requireStore();\n\t\tconst job = resolveJobById(store.list(), requestedId);\n\t\tif (job.state === \"running\") return textResult(`Scheduled run ${job.id} already launched async run ${job.lastRunId ?? \"unknown\"}; interrupt that async run instead.`, true);\n\t\tif (terminalState(job.state)) return textResult(`Scheduled run ${job.id} is already ${job.state}.`, true);\n\t\tconst now = this.now();\n\t\tthis.clearTimer(job.id);\n\t\tstore.mutate((data) => {\n\t\t\tconst stored = data.jobs.find((candidate) => candidate.id === job.id);\n\t\t\tif (!stored) return;\n\t\t\tstored.state = \"canceled\";\n\t\t\tstored.canceledAt = now;\n\t\t\tstored.updatedAt = now;\n\t\t});\n\t\treturn textResult(`Canceled scheduled subagent run ${job.id}.`);\n\t}\n\n\tprivate rearmScheduledJobs(): void {\n\t\tconst store = this.requireStore();\n\t\tconst now = this.now();\n\t\tconst maxLatenessMs = resolveMaxLatenessMs(this.deps.config);\n\t\tconst dueToMiss = store.list().filter((job) => job.state === \"scheduled\" && job.runAt + maxLatenessMs < now);\n\t\tif (dueToMiss.length > 0) {\n\t\t\tstore.mutate((data) => {\n\t\t\t\tfor (const missed of dueToMiss) {\n\t\t\t\t\tconst job = data.jobs.find((candidate) => candidate.id === missed.id);\n\t\t\t\t\tif (!job || job.state !== \"scheduled\") continue;\n\t\t\t\t\tjob.state = \"missed\";\n\t\t\t\t\tjob.updatedAt = now;\n\t\t\t\t\tjob.lastError = `Missed scheduled time by more than ${formatDuration(maxLatenessMs)} while Pi was not available.`;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tfor (const job of store.list()) {\n\t\t\tif (job.state === \"scheduled\") this.arm(job);\n\t\t}\n\t}\n\n\tprivate arm(job: ScheduledRunJob): void {\n\t\tthis.clearTimer(job.id);\n\t\tconst delayMs = Math.max(0, job.runAt - this.now());\n\t\tconst timer = this.timersApi.setTimeout(() => {\n\t\t\tvoid this.fire(job.id);\n\t\t}, Math.min(delayMs, MAX_TIMER_DELAY_MS));\n\t\ttimer.unref?.();\n\t\tthis.timers.set(job.id, timer);\n\t}\n\n\tprivate async fire(jobId: string): Promise<void> {\n\t\tthis.clearTimer(jobId);\n\t\tconst store = this.store;\n\t\tconst ctx = this.ctx;\n\t\tif (!store || !ctx) return;\n\t\tlet job = store.get(jobId);\n\t\tif (!job || job.state !== \"scheduled\") return;\n\t\tconst now = this.now();\n\t\t// A timer capped at MAX_TIMER_DELAY_MS may fire before runAt for far-future schedules; re-arm and wait.\n\t\tif (now < job.runAt) {\n\t\t\tthis.arm(job);\n\t\t\treturn;\n\t\t}\n\t\tconst maxLatenessMs = resolveMaxLatenessMs(this.deps.config);\n\t\tif (job.runAt + maxLatenessMs < now) {\n\t\t\tstore.mutate((data) => {\n\t\t\t\tconst stored = data.jobs.find((candidate) => candidate.id === jobId);\n\t\t\t\tif (!stored || stored.state !== \"scheduled\") return;\n\t\t\t\tstored.state = \"missed\";\n\t\t\t\tstored.updatedAt = now;\n\t\t\t\tstored.lastError = `Missed scheduled time by more than ${formatDuration(maxLatenessMs)}.`;\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tstore.mutate((data) => {\n\t\t\tconst stored = data.jobs.find((candidate) => candidate.id === jobId);\n\t\t\tif (!stored || stored.state !== \"scheduled\") return;\n\t\t\tstored.state = \"running\";\n\t\t\tstored.firedAt = now;\n\t\t\tstored.updatedAt = now;\n\t\t});\n\t\tjob = store.get(jobId);\n\t\tif (!job || job.state !== \"running\") return;\n\t\tconst controller = new AbortController();\n\t\ttry {\n\t\t\tconst result = await this.deps.launch(job.params, ctx, controller.signal);\n\t\t\tconst launchRunId = result.details?.asyncId ?? result.details?.runId;\n\t\t\tstore.mutate((data) => {\n\t\t\t\tconst stored = data.jobs.find((candidate) => candidate.id === jobId);\n\t\t\t\tif (!stored) return;\n\t\t\t\tstored.updatedAt = this.now();\n\t\t\t\tif (result.isError || !launchRunId) {\n\t\t\t\t\tstored.state = \"failed\";\n\t\t\t\t\tstored.lastError = result.content.find((item) => item.type === \"text\")?.text ?? \"Scheduled subagent launch failed.\";\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tstored.state = \"fired\";\n\t\t\t\tstored.lastRunId = launchRunId;\n\t\t\t\tstored.lastAsyncDir = result.details?.asyncDir;\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tstore.mutate((data) => {\n\t\t\t\tconst stored = data.jobs.find((candidate) => candidate.id === jobId);\n\t\t\t\tif (!stored) return;\n\t\t\t\tstored.state = \"failed\";\n\t\t\t\tstored.lastError = message;\n\t\t\t\tstored.updatedAt = this.now();\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate requireStore(): ScheduledRunStore {\n\t\tif (!this.store) throw new Error(\"Scheduled subagent store is not bound to a session.\");\n\t\treturn this.store;\n\t}\n\n\tprivate clearTimer(jobId: string): void {\n\t\tconst timer = this.timers.get(jobId);\n\t\tif (!timer) return;\n\t\tthis.timersApi.clearTimeout(timer);\n\t\tthis.timers.delete(jobId);\n\t}\n\n\tprivate stopTimers(): void {\n\t\tfor (const timer of this.timers.values()) this.timersApi.clearTimeout(timer);\n\t\tthis.timers.clear();\n\t}\n}\n\nexport function createScheduledRunManager(deps: ScheduledRunManagerDeps): ScheduledRunManager {\n\treturn new ScheduledRunManager(deps);\n}\n"]}
@@ -171,12 +171,12 @@ function resolveJobById(jobs, requestedId) {
171
171
  throw new Error(`Ambiguous scheduled run id prefix '${requestedId}' matched: ${matches.map((job) => job.id).join(", ")}. Provide a longer id.`);
172
172
  throw new Error(`Scheduled run '${requestedId}' not found.`);
173
173
  }
174
- function sanitizeScheduledParams(params) {
174
+ export function sanitizeScheduledParams(params) {
175
175
  const hasChain = (params.chain?.length ?? 0) > 0;
176
176
  const hasTasks = (params.tasks?.length ?? 0) > 0;
177
- const hasSingle = !hasChain && !hasTasks && Boolean(params.agent);
177
+ const hasSingle = !hasChain && !hasTasks && Boolean(params.task);
178
178
  if (Number(hasChain) + Number(hasTasks) + Number(hasSingle) !== 1) {
179
- return { error: "action='schedule' requires exactly one execution mode: agent, tasks, or chain." };
179
+ return { error: "action='schedule' requires exactly one execution mode: {task, description, permissions?}, tasks, or chain." };
180
180
  }
181
181
  if (!params.schedule?.trim())
182
182
  return { error: "action='schedule' requires schedule, such as '+10m' or a future ISO timestamp." };
@@ -189,7 +189,7 @@ function sanitizeScheduledParams(params) {
189
189
  const acceptanceErrors = validateExecutionAcceptance(params);
190
190
  if (acceptanceErrors.length > 0)
191
191
  return { error: acceptanceErrors.join(" ") };
192
- const { action: _action, id: _id, runId: _runId, dir: _dir, index: _index, message: _message, chainName: _chainName, config: _config, schedule: _schedule, scheduleName: _scheduleName, ...executionParams } = params;
192
+ const { action: _action, id: _id, runId: _runId, dir: _dir, index: _index, message: _message, schedule: _schedule, scheduleName: _scheduleName, ...executionParams } = params;
193
193
  return { params: { ...executionParams, async: true, clarify: false, context: "fresh" } };
194
194
  }
195
195
  export class ScheduledRunManager {
@@ -228,7 +228,7 @@ export class ScheduledRunManager {
228
228
  this.ctx = ctx;
229
229
  try {
230
230
  if (!scheduledRunsEnabled(this.deps.config)) {
231
- return textResult("Scheduled subagent runs are disabled. Set { \"scheduledRuns\": { \"enabled\": true } } in ~/.pi/agent/extensions/subagent/config.json, then reload Pi. Schedule only explicit delayed runs the user asked for.", true);
231
+ return textResult("Scheduled subagent runs are disabled. Set { \"scheduledRuns\": { \"enabled\": true } } in ~/.lunr/agent/extensions/subagent/config.json, then reload lunR. Schedule only explicit delayed runs the user asked for.", true);
232
232
  }
233
233
  if (!this.store)
234
234
  this.bindSession(ctx);