@ashx-j/lunr-dev 0.2.19-dev.10.1 → 0.2.21-dev.12.1
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.
- package/CHANGELOG.md +36 -1
- package/README.md +2 -2
- package/dist/builtin-extensions/index.d.ts.map +1 -1
- package/dist/builtin-extensions/index.js +0 -2
- package/dist/builtin-extensions/index.js.map +1 -1
- package/dist/builtin-extensions/lunr-computer-use.d.ts.map +1 -1
- package/dist/builtin-extensions/lunr-computer-use.js +15 -14
- package/dist/builtin-extensions/lunr-computer-use.js.map +1 -1
- package/dist/builtin-extensions/lunr-todos.d.ts +6 -5
- package/dist/builtin-extensions/lunr-todos.d.ts.map +1 -1
- package/dist/builtin-extensions/lunr-todos.js +9 -7
- package/dist/builtin-extensions/lunr-todos.js.map +1 -1
- package/dist/builtin-extensions/pi-intercom/broker/spawn.d.ts +6 -4
- package/dist/builtin-extensions/pi-intercom/broker/spawn.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-intercom/broker/spawn.js +114 -61
- package/dist/builtin-extensions/pi-intercom/broker/spawn.js.map +1 -1
- package/dist/builtin-extensions/pi-intercom/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-intercom/index.js +360 -351
- package/dist/builtin-extensions/pi-intercom/index.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/fanout-child.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/fanout-child.js +2 -2
- package/dist/builtin-extensions/pi-subagents/src/extension/fanout-child.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts +8 -6
- package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/index.js +128 -57
- package/dist/builtin-extensions/pi-subagents/src/extension/index.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/schemas.d.ts +18 -8
- package/dist/builtin-extensions/pi-subagents/src/extension/schemas.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/schemas.js +38 -13
- package/dist/builtin-extensions/pi-subagents/src/extension/schemas.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.d.ts +4 -3
- package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.js +24 -14
- package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.d.ts +8 -1
- package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.js +247 -18
- package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/intercom/result-intercom.d.ts +1 -0
- package/dist/builtin-extensions/pi-subagents/src/intercom/result-intercom.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/intercom/result-intercom.js +1 -1
- package/dist/builtin-extensions/pi-subagents/src/intercom/result-intercom.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-ask.d.ts +29 -0
- package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-ask.d.ts.map +1 -0
- package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-ask.js +179 -0
- package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-ask.js.map +1 -0
- package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-questions.d.ts +89 -0
- package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-questions.d.ts.map +1 -0
- package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-questions.js +541 -0
- package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-questions.js.map +1 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.d.ts +11 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.js +38 -12
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-job-tracker.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-job-tracker.js +3 -2
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-job-tracker.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.d.ts +2 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.js +35 -8
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.d.ts +7 -3
- package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.js +26 -4
- package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/result-watcher.d.ts +1 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/background/result-watcher.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/result-watcher.js +55 -38
- package/dist/builtin-extensions/pi-subagents/src/runs/background/result-watcher.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.d.ts +100 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js +46 -31
- package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.d.ts +3 -6
- package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.js +64 -5
- package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/top-level-async.d.ts +15 -2
- package/dist/builtin-extensions/pi-subagents/src/runs/background/top-level-async.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/top-level-async.js +14 -4
- package/dist/builtin-extensions/pi-subagents/src/runs/background/top-level-async.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.js +2 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js +21 -8
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts +0 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js +71 -25
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/acceptance.d.ts +2 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/acceptance.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/acceptance.js +75 -18
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/acceptance.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/completion-guard.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/completion-guard.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/completion-guard.js +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/completion-guard.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.d.ts +13 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.js +67 -11
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.d.ts +1 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-args.d.ts +3 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-args.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-args.js +7 -2
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-args.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.js +13 -3
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/task-intent.d.ts +2 -2
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/task-intent.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/task-intent.js +5 -10
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/task-intent.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/async-guidance.d.ts +2 -0
- package/dist/builtin-extensions/pi-subagents/src/shared/async-guidance.d.ts.map +1 -0
- package/dist/builtin-extensions/pi-subagents/src/shared/async-guidance.js +3 -0
- package/dist/builtin-extensions/pi-subagents/src/shared/async-guidance.js.map +1 -0
- package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.d.ts +3 -0
- package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.js +68 -11
- package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/formatters.d.ts +12 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/formatters.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/formatters.js +21 -2
- package/dist/builtin-extensions/pi-subagents/src/shared/formatters.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts +21 -4
- package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/types.js +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/types.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/delegation-adapters.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/delegation-adapters.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.d.ts +7 -0
- package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.js +11 -7
- package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.d.ts +6 -0
- package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js +46 -29
- package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts +46 -4
- package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/render.js +407 -450
- package/dist/builtin-extensions/pi-subagents/src/tui/render.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/register-main.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/register-main.js +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/register-main.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/tool-actions.d.ts +2 -13
- package/dist/builtin-extensions/pi-subagents/src/watchdog/tool-actions.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/tool-actions.js +5 -91
- package/dist/builtin-extensions/pi-subagents/src/watchdog/tool-actions.js.map +1 -1
- package/dist/core/computer-use/image.d.ts +26 -0
- package/dist/core/computer-use/image.d.ts.map +1 -0
- package/dist/core/computer-use/image.js +64 -0
- package/dist/core/computer-use/image.js.map +1 -0
- package/dist/core/computer-use/policy.d.ts.map +1 -1
- package/dist/core/computer-use/policy.js +2 -6
- package/dist/core/computer-use/policy.js.map +1 -1
- package/dist/core/computer-use/schemas.d.ts +13 -10
- package/dist/core/computer-use/schemas.d.ts.map +1 -1
- package/dist/core/computer-use/schemas.js +26 -35
- package/dist/core/computer-use/schemas.js.map +1 -1
- package/dist/core/computer-use/workflow.d.ts +16 -8
- package/dist/core/computer-use/workflow.d.ts.map +1 -1
- package/dist/core/computer-use/workflow.js +271 -260
- package/dist/core/computer-use/workflow.js.map +1 -1
- package/dist/core/customize.d.ts +2 -0
- package/dist/core/customize.d.ts.map +1 -1
- package/dist/core/customize.js +3 -0
- package/dist/core/customize.js.map +1 -1
- package/dist/core/permissions.d.ts +1 -0
- package/dist/core/permissions.d.ts.map +1 -1
- package/dist/core/permissions.js +8 -4
- package/dist/core/permissions.js.map +1 -1
- package/dist/core/plan-mode.d.ts.map +1 -1
- package/dist/core/plan-mode.js +0 -5
- package/dist/core/plan-mode.js.map +1 -1
- package/dist/core/runtime-bridges.d.ts.map +1 -1
- package/dist/core/runtime-bridges.js +0 -2
- package/dist/core/runtime-bridges.js.map +1 -1
- package/dist/core/settings-manager.d.ts +4 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +11 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/subagent-cancellation.d.ts +21 -0
- package/dist/core/subagent-cancellation.d.ts.map +1 -0
- package/dist/core/subagent-cancellation.js +53 -0
- package/dist/core/subagent-cancellation.js.map +1 -0
- package/dist/core/subagent-spinner-setting.d.ts +6 -0
- package/dist/core/subagent-spinner-setting.d.ts.map +1 -0
- package/dist/core/subagent-spinner-setting.js +12 -0
- package/dist/core/subagent-spinner-setting.js.map +1 -0
- package/dist/core/subagent-spinner.d.ts +4 -0
- package/dist/core/subagent-spinner.d.ts.map +1 -0
- package/dist/core/subagent-spinner.js +6 -0
- package/dist/core/subagent-spinner.js.map +1 -0
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +12 -18
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +4 -0
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +73 -1
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +12 -0
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/extension-widget-order.d.ts +8 -0
- package/dist/modes/interactive/extension-widget-order.d.ts.map +1 -0
- package/dist/modes/interactive/extension-widget-order.js +37 -0
- package/dist/modes/interactive/extension-widget-order.js.map +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +44 -22
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/node-runtime/{agent-session-services-RSGP5GDN.js → agent-session-services-QANFGM2V.js} +14 -13
- package/dist/node-runtime/{builtin-extensions-7STLFW3A.js → builtin-extensions-SRCYQPZ6.js} +4 -3
- package/dist/node-runtime/{chunk-5OLJGVCB.js → chunk-3ONQTOMR.js} +2 -2
- package/dist/node-runtime/chunk-5ZH3ZFIZ.js +308 -0
- package/dist/node-runtime/{chunk-4SJWFTUP.js → chunk-7NBZ5P7I.js} +1 -1
- package/dist/node-runtime/chunk-A3KMVBZV.js +60 -0
- package/dist/node-runtime/{chunk-FLYMHKCS.js → chunk-BJ6H7DPI.js} +25 -25
- package/dist/node-runtime/{chunk-T5GM5BFH.js → chunk-BYQ2MOFI.js} +6 -6
- package/dist/node-runtime/{chunk-W7S2REEG.js → chunk-CZUBYPFP.js} +157 -74
- package/dist/node-runtime/{chunk-ZRDIMBEQ.js → chunk-D466UAID.js} +9 -6
- package/dist/node-runtime/{chunk-K72NVGUB.js → chunk-GT5F3OKM.js} +1 -1
- package/dist/node-runtime/chunk-H2BI7G7T.js +73 -0
- package/dist/node-runtime/{chunk-ISQDQIZN.js → chunk-HXJS2PJM.js} +2 -2
- package/dist/node-runtime/chunk-LISUTZS3.js +19 -0
- package/dist/node-runtime/{chunk-BKAZ6BKX.js → chunk-LOYUC2ID.js} +7 -7
- package/dist/node-runtime/{chunk-OTT6JMPU.js → chunk-LTYWTR3V.js} +1 -369
- package/dist/node-runtime/{chunk-5Q45AVQG.js → chunk-MW2XJZIK.js} +1 -1
- package/dist/node-runtime/{chunk-MUMMMTW4.js → chunk-N3PNL74S.js} +536 -265
- package/dist/node-runtime/{chunk-HQCKFM2O.js → chunk-VGYZ3APQ.js} +3 -0
- package/dist/node-runtime/{chunk-5NWQCSKR.js → chunk-VQ4UBWSA.js} +11 -1
- package/dist/node-runtime/{chunk-6SPPH4FY.js → chunk-VTGEKB7R.js} +4 -4
- package/dist/node-runtime/chunk-W3SILANP.js +24 -0
- package/dist/node-runtime/{chunk-J7QGQD45.js → chunk-WJVFOIB5.js} +1 -1
- package/dist/node-runtime/{chunk-JT6YCS5B.js → chunk-XAUQOKYK.js} +408 -45
- package/dist/node-runtime/{chunk-LCACDWHJ.js → chunk-XSRCAQK2.js} +13 -13
- package/dist/node-runtime/{chunk-TAP7QTUT.js → chunk-ZOIIMEN6.js} +24 -425
- package/dist/node-runtime/{chunk-MGSB2C3M.js → chunk-ZVSORYRM.js} +1 -1
- package/dist/node-runtime/{command-6UXQ6XZN.js → command-ZURZJDXF.js} +1 -1
- package/dist/node-runtime/{commands-LGR5VT5X.js → commands-BZGSLIP7.js} +3 -3
- package/dist/node-runtime/{customize-XEXL2DGQ.js → customize-LF5VST47.js} +1 -1
- package/dist/node-runtime/{direct-tool-executor-TDJS7TBD.js → direct-tool-executor-BSZDHIYR.js} +4 -4
- package/dist/node-runtime/{extract-IUCVZCWC.js → extract-XLQSJN4V.js} +2 -2
- package/dist/node-runtime/{gateway-3OLC4GQN.js → gateway-FWHRIBK5.js} +9 -9
- package/dist/node-runtime/{gemini-search-NCIDF7NE.js → gemini-search-U7SUMPQA.js} +1 -1
- package/dist/node-runtime/{gemini-url-context-OKIN7AIP.js → gemini-url-context-PXWCBQHK.js} +2 -2
- package/dist/node-runtime/index.js +34 -31
- package/dist/node-runtime/{init-EKE277AG.js → init-DVJUAOUO.js} +3 -3
- package/dist/node-runtime/{interactive-mode-S5M26CQ7.js → interactive-mode-BBASNWHN.js} +18 -15
- package/dist/node-runtime/lunr-computer-use-TJNDAMWM.js +135 -0
- package/dist/node-runtime/{lunr-cron-KKBOGAEF.js → lunr-cron-J64I72C6.js} +5 -5
- package/dist/node-runtime/main.js +22 -20
- package/dist/node-runtime/{package-manager-cli-C4EJOO5Q.js → package-manager-cli-VMYX4Y2S.js} +8 -7
- package/dist/node-runtime/{pi-intercom-EEMBGQID.js → pi-intercom-NV2LW6X7.js} +108 -87
- package/dist/node-runtime/{pi-mcp-adapter-DPTJGAAL.js → pi-mcp-adapter-JLB5YL2F.js} +6 -6
- package/dist/node-runtime/{pi-subagents-VKCLYIBY.js → pi-subagents-WEHV3W7H.js} +1267 -604
- package/dist/node-runtime/{pi-web-access-BV6DSZOP.js → pi-web-access-FN5YC5T6.js} +5 -5
- package/dist/node-runtime/{proxy-modes-R64LU6WZ.js → proxy-modes-OR7ISBXK.js} +7 -7
- package/dist/node-runtime/rpc-entry.js +22 -20
- package/dist/node-runtime/{runtime-bridges-UJ5WJJLN.js → runtime-bridges-2VQTLPOZ.js} +3 -5
- package/dist/node-runtime/{settings-manager-K6IPIQTI.js → settings-manager-3CCU326G.js} +3 -2
- package/dist/node-runtime/{subagent-executor-EFLTO32A.js → subagent-executor-CXKXQDHH.js} +186 -299
- package/dist/node-runtime/{update-cli-I6OVDRPL.js → update-cli-NM7B4CKL.js} +3 -2
- package/dist/node-runtime/{video-extract-ETA5RA7U.js → video-extract-OYT5WKS5.js} +2 -2
- package/dist/node-runtime/workflow-C26QCUTW.js +468 -0
- package/dist/node-runtime/{youtube-extract-SRVGNN26.js → youtube-extract-TQYKGFGS.js} +2 -2
- package/docs/computer-use.md +233 -268
- package/docs/features.md +22 -4
- package/docs/keybindings.md +3 -1
- package/docs/settings.md +3 -2
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/install-lock/package-lock.json +24 -24
- package/install-lock/package.json +2 -2
- package/npm-shrinkwrap.json +21 -21
- package/package.json +7 -7
- package/dist/builtin-extensions/lunr-settings-tools.d.ts +0 -4
- package/dist/builtin-extensions/lunr-settings-tools.d.ts.map +0 -1
- package/dist/builtin-extensions/lunr-settings-tools.js +0 -120
- package/dist/builtin-extensions/lunr-settings-tools.js.map +0 -1
- package/dist/core/settings-tools-bridge.d.ts +0 -35
- package/dist/core/settings-tools-bridge.d.ts.map +0 -1
- package/dist/core/settings-tools-bridge.js +0 -56
- package/dist/core/settings-tools-bridge.js.map +0 -1
- package/dist/node-runtime/chunk-EH2LJQPM.js +0 -64
- package/dist/node-runtime/image-resize-6ZPBFMWW.js +0 -11
- package/dist/node-runtime/lunr-computer-use-4X3KUNF4.js +0 -206
- package/dist/node-runtime/workflow-SA34S4VX.js +0 -325
- package/dist/node-runtime/{chunk-EHMBW7FA.js → chunk-VSELYKWU.js} +3 -3
- package/dist/node-runtime/{chunk-ZSEZY3II.js → chunk-VTPM5V35.js} +0 -0
- package/dist/node-runtime/{src-GPFAU3N6.js → src-BPQFJR76.js} +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagent-prompt-runtime.js","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { ExtensionAPI } from \"@ashx-j/lunr-dev\";\nimport { registerNativeSupervisorClient } from \"../../intercom/native-supervisor-channel.ts\";\nimport { consumeSteerRequestsFromDir, steerAckPathFromDir, writeSteerAckAt, writeSteerCapabilityAt, writeSteerRequestToDir, type SteerRequest } from \"../background/control-channel.ts\";\nimport { SUBAGENT_CHILD_AGENT_ENV, SUBAGENT_CHILD_INDEX_ENV, SUBAGENT_FANOUT_CHILD_ENV, SUBAGENT_STEER_ACK_DIR_ENV, SUBAGENT_STEER_CAPABILITY_ENV, SUBAGENT_STEER_INBOX_ENV } from \"./pi-args.ts\";\nimport { STRUCTURED_OUTPUT_CAPTURE_ENV, STRUCTURED_OUTPUT_SCHEMA_ENV, validateStructuredOutputValue } from \"./structured-output.ts\";\nimport {\n\tCHILD_TOOL_DIAGNOSTIC_PATH_ENV,\n\tformatChildToolDiagnostic,\n\tREQUIRED_CHILD_TOOLS_ENV,\n\twriteChildToolDiagnostic,\n\ttype ChildToolDiagnostic,\n} from \"./tool-availability.ts\";\nimport { TOOL_BUDGET_ENV, decodeToolBudgetEnv, shouldBlockToolForBudget, toolBudgetBlockedMessage, toolBudgetSoftNudge } from \"./tool-budget.ts\";\nimport type { JsonSchemaObject, ResolvedToolBudget, SubagentState } from \"../../shared/types.ts\";\nimport { resolveCurrentSessionId } from \"../../shared/session-identity.ts\";\nimport { resolveWatchPath } from \"../../shared/utils.ts\";\nimport { registerChildWatchdog } from \"../../watchdog/register-child.ts\";\nimport { SUBAGENT_WATCHDOG_WARNING_TYPE } from \"../../watchdog/types.ts\";\nimport { resolveWaitToolConfig } from \"../background/wait-config.ts\";\nimport { registerWaitTool } from \"../background/wait-tool.ts\";\nimport { drainOutstandingWork } from \"../background/auto-drain.ts\";\n\nconst SUBAGENT_INHERIT_PROJECT_CONTEXT_ENV = \"PI_SUBAGENT_INHERIT_PROJECT_CONTEXT\";\nconst SUBAGENT_INHERIT_SKILLS_ENV = \"PI_SUBAGENT_INHERIT_SKILLS\";\nexport const SUBAGENT_INTERCOM_SESSION_NAME_ENV = \"PI_SUBAGENT_INTERCOM_SESSION_NAME\";\n\nconst STRUCTURED_OUTPUT_INSTRUCTIONS = [\n\t\"This subagent step has a strict structured output contract.\",\n\t\"Your final action must be to call the `structured_output` tool with JSON matching the provided schema.\",\n\t\"Do not rely on prose-only completion; if you do not call `structured_output`, the parent will fail this step.\",\n].join(\"\\n\");\n\nexport const CHILD_SUBAGENT_BOUNDARY_INSTRUCTIONS = [\n\t\"You are a child subagent, not the parent orchestrator.\",\n\t\"The parent session owns delegation, orchestration, review fanout, and follow-up launches.\",\n\t\"Ignore prior parent-only orchestration instructions in inherited conversation history.\",\n\t\"Do not propose or run subagents. Complete only your assigned task with the tools available to you.\",\n\t\"If you need to edit files, use the available editing tools. Do not print tool-call syntax, patches, or pseudo-tool calls as text.\",\n].join(\"\\n\");\n\nexport const CHILD_FANOUT_BOUNDARY_INSTRUCTIONS = [\n\t\"You are a child subagent with explicit fanout responsibility for this assigned task.\",\n\t\"The parent session owns final orchestration, acceptance, and follow-up implementation launches.\",\n\t\"You may use the `subagent` tool only for the fanout work explicitly requested in this task.\",\n\t\"Do not broaden yourself into general parent orchestration. Do not launch follow-up workers unless the task explicitly asks for that.\",\n\t\"The maxSubagentDepth cap still applies and may block further fanout.\",\n\t\"If you need to edit files, use the available editing tools. Do not print tool-call syntax, patches, or pseudo-tool calls as text.\",\n].join(\"\\n\");\n\nconst PARENT_ONLY_CUSTOM_MESSAGE_TYPES = new Set([\n\t\"subagent-orchestration-instructions\",\n\t\"subagent-slash-result\",\n\t\"subagent-slash-text-result\",\n\t\"subagent-notify\",\n\t\"subagent_control_notice\",\n\t\"subagent-control\",\n\t\"subagent-control-notice\",\n]);\nconst SUBAGENT_ORCHESTRATION_SKILL_NAME_PATTERN = /<name>\\s*pi-subagents\\s*<\\/name>/;\nconst PROJECT_CONTEXT_HEADER = \"\\n\\n# Project Context\\n\\nProject-specific instructions and guidelines:\\n\\n\";\nconst SKILLS_HEADER = \"\\n\\nThe following skills provide specialized instructions for specific tasks.\";\nconst DATE_HEADER = \"\\nCurrent date:\";\n\nfunction readBooleanEnv(name: string): boolean | undefined {\n\tconst value = process.env[name];\n\tif (value === undefined) return undefined;\n\treturn value !== \"0\";\n}\n\nfunction refreshChildToolDiagnostic(pi: ExtensionAPI): ChildToolDiagnostic | undefined {\n\tconst filePath = process.env[CHILD_TOOL_DIAGNOSTIC_PATH_ENV]?.trim();\n\tconst encoded = process.env[REQUIRED_CHILD_TOOLS_ENV]?.trim();\n\tif (!filePath || !encoded) return undefined;\n\tconst required = JSON.parse(encoded) as unknown;\n\tif (!Array.isArray(required) || required.some((name) => typeof name !== \"string\" || !name)) {\n\t\tthrow new Error(`Invalid ${REQUIRED_CHILD_TOOLS_ENV} payload.`);\n\t}\n\tconst available = pi.getAllTools().map((tool) => tool.name);\n\treturn writeChildToolDiagnostic(filePath, required, available, process.env[SUBAGENT_CHILD_AGENT_ENV]?.trim());\n}\n\nfunction findSectionEnd(prompt: string, startIndex: number, nextHeaders: string[]): number {\n\tlet endIndex = prompt.length;\n\tfor (const header of nextHeaders) {\n\t\tconst index = prompt.indexOf(header, startIndex);\n\t\tif (index !== -1 && index < endIndex) {\n\t\t\tendIndex = index;\n\t\t}\n\t}\n\treturn endIndex;\n}\n\nexport function stripProjectContext(prompt: string): string {\n\tconst startIndex = prompt.indexOf(PROJECT_CONTEXT_HEADER);\n\tif (startIndex === -1) return prompt;\n\tconst endIndex = findSectionEnd(prompt, startIndex + PROJECT_CONTEXT_HEADER.length, [SKILLS_HEADER, DATE_HEADER]);\n\treturn `${prompt.slice(0, startIndex)}${prompt.slice(endIndex)}`;\n}\n\nexport function stripInheritedSkills(prompt: string): string {\n\tconst startIndex = prompt.indexOf(SKILLS_HEADER);\n\tif (startIndex === -1) return prompt;\n\tconst endIndex = findSectionEnd(prompt, startIndex + SKILLS_HEADER.length, [DATE_HEADER]);\n\treturn `${prompt.slice(0, startIndex)}${prompt.slice(endIndex)}`;\n}\n\nexport function stripSubagentOrchestrationSkill(prompt: string): string {\n\treturn prompt\n\t\t.replace(/\\n{0,2}<skill\\s+name=[\"']pi-subagents[\"'][^>]*>[\\s\\S]*?<\\/skill>\\n{0,2}/g, \"\\n\\n\")\n\t\t.replace(/[ \\t]*<skill>\\s*[\\s\\S]*?<\\/skill>\\s*/g, (block) => SUBAGENT_ORCHESTRATION_SKILL_NAME_PATTERN.test(block) ? \"\" : block);\n}\n\nfunction stripChildBoundaryInstructions(prompt: string): string {\n\tlet rewritten = prompt;\n\tfor (const boundary of [CHILD_SUBAGENT_BOUNDARY_INSTRUCTIONS, CHILD_FANOUT_BOUNDARY_INSTRUCTIONS]) {\n\t\trewritten = rewritten.split(boundary).join(\"\");\n\t}\n\treturn rewritten.replace(/^(?:[ \\t]*\\r?\\n)+/, \"\");\n}\n\nexport function rewriteSubagentPrompt(\n\tprompt: string,\n\toptions: { inheritProjectContext: boolean; inheritSkills: boolean; fanoutChild?: boolean },\n): string {\n\tlet rewritten = prompt;\n\tif (!options.inheritProjectContext) {\n\t\trewritten = stripProjectContext(rewritten);\n\t}\n\tif (!options.inheritSkills) {\n\t\trewritten = stripInheritedSkills(rewritten);\n\t}\n\trewritten = stripSubagentOrchestrationSkill(rewritten);\n\trewritten = stripChildBoundaryInstructions(rewritten);\n\tconst boundary = options.fanoutChild ? CHILD_FANOUT_BOUNDARY_INSTRUCTIONS : CHILD_SUBAGENT_BOUNDARY_INSTRUCTIONS;\n\tconst structured = process.env[STRUCTURED_OUTPUT_CAPTURE_ENV] ? `\\n\\n${STRUCTURED_OUTPUT_INSTRUCTIONS}` : \"\";\n\treturn `${boundary}${structured}\\n\\n${rewritten}`;\n}\n\nfunction isParentOnlySubagentMessage(message: unknown): boolean {\n\tconst m = message as { role?: string; customType?: string };\n\tif (m?.role !== \"custom\" || typeof m.customType !== \"string\") return false;\n\tif (m.customType === SUBAGENT_WATCHDOG_WARNING_TYPE) return true;\n\treturn PARENT_ONLY_CUSTOM_MESSAGE_TYPES.has(m.customType);\n}\n\nfunction isSubagentToolResultMessage(message: unknown): boolean {\n\tconst m = message as { role?: string; toolName?: string };\n\treturn m?.role === \"toolResult\" && m.toolName === \"subagent\";\n}\n\nfunction isSubagentToolCallBlock(block: unknown): boolean {\n\tconst b = block as { type?: string; name?: string };\n\treturn b?.type === \"toolCall\" && b.name === \"subagent\";\n}\n\nfunction stripAssistantSubagentToolCallBlocks(message: unknown): unknown | undefined {\n\tconst m = message as { role?: string; content?: unknown };\n\tif (m?.role !== \"assistant\" || !Array.isArray(m.content)) return message;\n\tconst filteredContent = m.content.filter((block) => !isSubagentToolCallBlock(block));\n\tif (filteredContent.length === m.content.length) return message;\n\tif (filteredContent.length === 0) return undefined;\n\treturn { ...m, content: filteredContent };\n}\n\nexport function stripParentOnlySubagentMessages(messages: unknown[]): unknown[] {\n\tconst preserveCurrentFanoutToolHistory = process.env[SUBAGENT_FANOUT_CHILD_ENV] === \"1\";\n\tlet changed = false;\n\tconst filtered: unknown[] = [];\n\tfor (const message of messages) {\n\t\tif (isParentOnlySubagentMessage(message) || (!preserveCurrentFanoutToolHistory && isSubagentToolResultMessage(message))) {\n\t\t\tchanged = true;\n\t\t\tcontinue;\n\t\t}\n\t\tconst stripped = preserveCurrentFanoutToolHistory ? message : stripAssistantSubagentToolCallBlocks(message);\n\t\tif (stripped === undefined) {\n\t\t\tchanged = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (stripped !== message) changed = true;\n\t\tfiltered.push(stripped);\n\t}\n\treturn changed ? filtered : messages;\n}\n\nexport function formatSteerMessage(request: SteerRequest): string {\n\treturn [\n\t\t\"Mid-run steering from the parent orchestrator:\",\n\t\t\"\",\n\t\trequest.message,\n\t\t\"\",\n\t\t\"Incorporate this guidance at the next safe point. Do not restart the task unless the guidance explicitly asks you to.\",\n\t].join(\"\\n\");\n}\n\nfunction registerToolBudget(pi: ExtensionAPI, budget: ResolvedToolBudget | undefined): void {\n\tif (!budget) return;\n\tlet toolCount = 0;\n\tlet softNudged = false;\n\tconst sendUserMessage = (pi as { sendUserMessage?: (content: string, options: { deliverAs: \"steer\" }) => unknown }).sendUserMessage;\n\tconst onRuntimeEvent = pi.on as unknown as (event: string, handler: (event: { toolName?: string }) => unknown) => void;\n\tonRuntimeEvent(\"tool_call\", (event) => {\n\t\tconst toolName = typeof event.toolName === \"string\" ? event.toolName : \"tool\";\n\t\ttoolCount++;\n\t\tif (budget.soft !== undefined && toolCount >= budget.soft && !softNudged) {\n\t\t\tsoftNudged = true;\n\t\t\ttry {\n\t\t\t\tsendUserMessage?.(toolBudgetSoftNudge(budget, toolCount), { deliverAs: \"steer\" });\n\t\t\t} catch {\n\t\t\t\t// Budget nudges are advisory; blocking below remains authoritative.\n\t\t\t}\n\t\t}\n\t\tif (!shouldBlockToolForBudget(budget, toolName, toolCount)) return undefined;\n\t\treturn { block: true, reason: toolBudgetBlockedMessage(budget, toolName, toolCount) };\n\t});\n}\n\nexport function registerSteeringInbox(\n\tpi: ExtensionAPI,\n\tdeps: { watch?: typeof fs.watch; nativeRealpath?: (filePath: string) => string } = {},\n): void {\n\tconst steerInbox = process.env[SUBAGENT_STEER_INBOX_ENV]?.trim();\n\tif (!steerInbox) return;\n\tconst capabilityPath = process.env[SUBAGENT_STEER_CAPABILITY_ENV]?.trim();\n\tconst ackDir = process.env[SUBAGENT_STEER_ACK_DIR_ENV]?.trim();\n\tconst sendUserMessage = (pi as { sendUserMessage?: (content: string, options: { deliverAs: \"steer\" }) => unknown }).sendUserMessage;\n\tconst childIndex = Number(process.env[SUBAGENT_CHILD_INDEX_ENV]);\n\tconst pending = new Map<string, string[]>();\n\tlet disposed = false;\n\tlet flushing = false;\n\tlet started = false;\n\tlet canSteer = typeof sendUserMessage === \"function\";\n\tlet watcher: fs.FSWatcher | undefined;\n\tlet interval: NodeJS.Timeout | undefined;\n\tconst acknowledge = (request: SteerRequest, state: \"delivered\" | \"failed\", message: string): void => {\n\t\tif (!ackDir || !Number.isInteger(childIndex) || childIndex < 0) return;\n\t\twriteSteerAckAt(steerAckPathFromDir(ackDir, request.id), {\n\t\t\trequestId: request.id,\n\t\t\tindex: childIndex,\n\t\t\tts: Date.now(),\n\t\t\tstate,\n\t\t\tmessage,\n\t\t});\n\t};\n\tconst publishCapability = (): void => {\n\t\tif (!capabilityPath || !Number.isInteger(childIndex) || childIndex < 0) return;\n\t\twriteSteerCapabilityAt(capabilityPath, { index: childIndex, pid: process.pid, readyAt: Date.now(), supported: canSteer });\n\t};\n\tconst flush = (): void => {\n\t\tif (disposed || flushing) return;\n\t\tflushing = true;\n\t\ttry {\n\t\t\tconst requests = consumeSteerRequestsFromDir(steerInbox);\n\t\t\tfor (let index = 0; index < requests.length; index++) {\n\t\t\t\tconst request = requests[index]!;\n\t\t\t\tif (!canSteer || typeof sendUserMessage !== \"function\") {\n\t\t\t\t\tacknowledge(request, \"failed\", \"Child Pi session does not support sendUserMessage steering.\");\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst formatted = formatSteerMessage(request);\n\t\t\t\tconst ids = pending.get(formatted) ?? [];\n\t\t\t\tids.push(request.id);\n\t\t\t\tpending.set(formatted, ids);\n\t\t\t\ttry {\n\t\t\t\t\tsendUserMessage(formatted, { deliverAs: \"steer\" });\n\t\t\t\t} catch (error) {\n\t\t\t\t\tids.pop();\n\t\t\t\t\tif (ids.length === 0) pending.delete(formatted);\n\t\t\t\t\tacknowledge(request, \"failed\", error instanceof Error ? error.message : String(error));\n\t\t\t\t\tfor (const retry of requests.slice(index + 1)) writeSteerRequestToDir(steerInbox, retry);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tflushing = false;\n\t\t}\n\t};\n\tconst onInput = (event: unknown): undefined => {\n\t\tif (disposed || !event || typeof event !== \"object\") return undefined;\n\t\tconst input = event as { source?: unknown; streamingBehavior?: unknown; text?: unknown; content?: unknown };\n\t\tif (input.source !== \"extension\" || input.streamingBehavior !== \"steer\") return undefined;\n\t\tconst text = typeof input.text === \"string\" ? input.text : typeof input.content === \"string\" ? input.content : undefined;\n\t\tif (!text) return undefined;\n\t\tconst ids = pending.get(text);\n\t\tconst requestId = ids?.shift();\n\t\tif (!requestId) return undefined;\n\t\tif (ids?.length === 0) pending.delete(text);\n\t\tacknowledge({ type: \"steer\", id: requestId, ts: Date.now(), message: text }, \"delivered\", \"Pi accepted the correlated steering input.\");\n\t\treturn undefined;\n\t};\n\tconst start = (): void => {\n\t\tif (started || disposed) return;\n\t\ttry {\n\t\t\tfs.mkdirSync(steerInbox, { recursive: true });\n\t\t\tpublishCapability();\n\t\t} catch {\n\t\t\treturn;\n\t\t}\n\t\tstarted = true;\n\t\ttry {\n\t\t\twatcher = (deps.watch ?? fs.watch)(resolveWatchPath(steerInbox, deps.nativeRealpath), () => flush());\n\t\t\twatcher.on(\"error\", () => {});\n\t\t} catch {\n\t\t\twatcher = undefined;\n\t\t}\n\t\tinterval = setInterval(flush, 250);\n\t\tinterval.unref?.();\n\t};\n\tconst activate = (): undefined => {\n\t\tstart();\n\t\tflush();\n\t\treturn undefined;\n\t};\n\n\tconst onRuntimeEvent = pi.on as unknown as (event: string, handler: (event: unknown) => unknown) => void;\n\t// Register input before the watcher so an accepted extension input cannot race request dispatch.\n\tonRuntimeEvent(\"input\", onInput);\n\tonRuntimeEvent(\"session_start\", () => start());\n\tfor (const eventName of [\"message_start\", \"message_update\", \"message_end\", \"tool_execution_start\", \"tool_execution_end\", \"turn_end\"] as const) {\n\t\tonRuntimeEvent(eventName, activate);\n\t}\n\tonRuntimeEvent(\"session_shutdown\", () => {\n\t\tdisposed = true;\n\t\ttry { watcher?.close(); } catch {}\n\t\tif (interval) clearInterval(interval);\n\t});\n}\n\nexport default function registerSubagentPromptRuntime(pi: ExtensionAPI): void {\n\tregisterSteeringInbox(pi);\n\tregisterToolBudget(pi, decodeToolBudgetEnv(process.env[TOOL_BUDGET_ENV]));\n\tregisterChildWatchdog(pi);\n\tconst waitToolEnabled = resolveWaitToolConfig().enabled;\n\tconst waitState = {\n\t\tbaseCwd: \"\",\n\t\tcurrentSessionId: null,\n\t\tasyncJobs: new Map(),\n\t\tforegroundControls: new Map(),\n\t\tlastForegroundControlId: null,\n\t\tcleanupTimers: new Map(),\n\t\tlastUiContext: null,\n\t\tpoller: null,\n\t\tcompletionSeen: new Map(),\n\t\twatcher: null,\n\t\twatcherRestartTimer: null,\n\t\tresultFileCoalescer: { schedule: () => false, clear: () => {} },\n\t} as unknown as SubagentState;\n\tif (typeof pi.registerTool === \"function\") registerWaitTool(pi, waitState, waitToolEnabled);\n\tlet nativeSupervisorClientRegistered = false;\n\tlet nativeSupervisorFallbackRegistered = false;\n\tconst registerNativeSupervisorClientOnce = (): void => {\n\t\tif (nativeSupervisorClientRegistered) return;\n\t\tnativeSupervisorClientRegistered = true;\n\t\tregisterNativeSupervisorClient(pi, { includeIntercomFallback: false });\n\t};\n\tconst registerNativeSupervisorFallbackOnce = (): void => {\n\t\tregisterNativeSupervisorClientOnce();\n\t\tif (nativeSupervisorFallbackRegistered) return;\n\t\tnativeSupervisorFallbackRegistered = true;\n\t\tregisterNativeSupervisorClient(pi);\n\t};\n\tconst onRuntimeEvent = pi.on as unknown as (event: string, handler: (event: unknown) => unknown) => void;\n\tonRuntimeEvent(\"session_start\", (_event: unknown, ctx: unknown) => {\n\t\tconst sessionManager = (ctx as { sessionManager?: Parameters<typeof resolveCurrentSessionId>[0] } | undefined)?.sessionManager;\n\t\twaitState.currentSessionId = sessionManager ? resolveCurrentSessionId(sessionManager) : null;\n\t\tregisterNativeSupervisorClientOnce();\n\t\trefreshChildToolDiagnostic(pi);\n\t});\n\tonRuntimeEvent(\"agent_end\", async (_event: unknown, ctx: unknown) => {\n\t\tif ((ctx as { hasUI?: boolean } | undefined)?.hasUI === true) return;\n\t\tawait drainOutstandingWork({ state: waitState, events: pi.events });\n\t});\n\tconst structuredOutputPath = process.env[STRUCTURED_OUTPUT_CAPTURE_ENV];\n\tconst structuredSchemaPath = process.env[STRUCTURED_OUTPUT_SCHEMA_ENV];\n\tif (structuredOutputPath && structuredSchemaPath) {\n\t\tconst schema = JSON.parse(fs.readFileSync(structuredSchemaPath, \"utf-8\")) as JsonSchemaObject;\n\t\tconst parameters = {\n\t\t\ttype: \"object\",\n\t\t\tproperties: { value: schema },\n\t\t\trequired: [\"value\"],\n\t\t\tadditionalProperties: false,\n\t\t};\n\t\tconst registerTool = pi.registerTool as unknown as (tool: {\n\t\t\tname: string;\n\t\t\tlabel: string;\n\t\t\tdescription: string;\n\t\t\tparameters: unknown;\n\t\t\texecute: (_id: string, params: { value: unknown }) => Promise<unknown>;\n\t\t}) => void;\n\t\tregisterTool({\n\t\t\tname: \"structured_output\",\n\t\t\tlabel: \"Structured Output\",\n\t\t\tdescription: \"Submit the required final structured output for this subagent step. This terminates the step.\",\n\t\t\tparameters: parameters as never,\n\t\t\tasync execute(_id: string, params: { value: unknown }) {\n\t\t\t\tconst validation = validateStructuredOutputValue(schema, params.value);\n\t\t\t\tif (validation.status === \"invalid\") {\n\t\t\t\t\tthrow new Error(`Structured output validation failed: ${validation.message}`);\n\t\t\t\t}\n\t\t\t\tfs.mkdirSync(path.dirname(structuredOutputPath), { recursive: true });\n\t\t\t\tfs.writeFileSync(structuredOutputPath, JSON.stringify(params.value), { mode: 0o600 });\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: \"Structured output captured.\" }],\n\t\t\t\t\tdetails: { path: structuredOutputPath },\n\t\t\t\t\tterminate: true,\n\t\t\t\t};\n\t\t\t},\n\t\t});\n\t}\n\n\tonRuntimeEvent(\"context\", (event: { messages: unknown[] }) => {\n\t\tconst messages = stripParentOnlySubagentMessages(event.messages);\n\t\tif (messages === event.messages) return undefined;\n\t\treturn { messages };\n\t});\n\n\tonRuntimeEvent(\"before_agent_start\", async (event: { systemPrompt: string }) => {\n\t\tregisterNativeSupervisorFallbackOnce();\n\t\tconst toolDiagnostic = refreshChildToolDiagnostic(pi);\n\t\tconst intercomSessionName = process.env[SUBAGENT_INTERCOM_SESSION_NAME_ENV]?.trim();\n\t\tif (intercomSessionName && typeof pi.setSessionName === \"function\") {\n\t\t\tpi.setSessionName(intercomSessionName);\n\t\t}\n\n\t\tconst inheritProjectContext = readBooleanEnv(SUBAGENT_INHERIT_PROJECT_CONTEXT_ENV);\n\t\tconst inheritSkills = readBooleanEnv(SUBAGENT_INHERIT_SKILLS_ENV);\n\t\tconst fanoutChild = readBooleanEnv(SUBAGENT_FANOUT_CHILD_ENV);\n\t\tlet rewritten = event.systemPrompt;\n\t\tif (inheritProjectContext !== undefined || inheritSkills !== undefined || fanoutChild !== undefined) {\n\t\t\trewritten = rewriteSubagentPrompt(event.systemPrompt, {\n\t\t\t\tinheritProjectContext: inheritProjectContext ?? true,\n\t\t\t\tinheritSkills: inheritSkills ?? true,\n\t\t\t\tfanoutChild: fanoutChild === true,\n\t\t\t});\n\t\t}\n\t\tif (toolDiagnostic) {\n\t\t\trewritten = `${formatChildToolDiagnostic(toolDiagnostic)}\\nDo not claim tool-dependent work succeeded; report this configuration error to the parent.\\n\\n${rewritten}`;\n\t\t}\n\t\tif (rewritten === event.systemPrompt) return;\n\t\treturn { systemPrompt: rewritten };\n\t});\n}\n"]}
|
|
1
|
+
{"version":3,"file":"subagent-prompt-runtime.js","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { ExtensionAPI } from \"@ashx-j/lunr-dev\";\nimport { isPendingQuestionForCurrentChild, markDeliveredSupervisorQuestionFromChild, registerNativeSupervisorClient } from \"../../intercom/native-supervisor-channel.ts\";\nimport { consumeSteerRequestsFromDir, steerAckPathFromDir, writeSteerAckAt, writeSteerCapabilityAt, writeSteerRequestToDir, type SteerRequest } from \"../background/control-channel.ts\";\nimport { SUBAGENT_CHILD_AGENT_ENV, SUBAGENT_CHILD_INDEX_ENV, SUBAGENT_FANOUT_CHILD_ENV, SUBAGENT_STEER_ACK_DIR_ENV, SUBAGENT_STEER_CAPABILITY_ENV, SUBAGENT_STEER_INBOX_ENV } from \"./pi-args.ts\";\nimport { STRUCTURED_OUTPUT_CAPTURE_ENV, STRUCTURED_OUTPUT_SCHEMA_ENV, validateStructuredOutputValue } from \"./structured-output.ts\";\nimport {\n\tCHILD_TOOL_DIAGNOSTIC_PATH_ENV,\n\tformatChildToolDiagnostic,\n\tREQUIRED_CHILD_TOOLS_ENV,\n\twriteChildToolDiagnostic,\n\ttype ChildToolDiagnostic,\n} from \"./tool-availability.ts\";\nimport { TOOL_BUDGET_ENV, decodeToolBudgetEnv, shouldBlockToolForBudget, toolBudgetBlockedMessage, toolBudgetSoftNudge } from \"./tool-budget.ts\";\nimport type { JsonSchemaObject, ResolvedToolBudget, SubagentState } from \"../../shared/types.ts\";\nimport { resolveCurrentSessionId } from \"../../shared/session-identity.ts\";\nimport { resolveWatchPath } from \"../../shared/utils.ts\";\nimport { registerChildWatchdog } from \"../../watchdog/register-child.ts\";\nimport { SUBAGENT_WATCHDOG_WARNING_TYPE } from \"../../watchdog/types.ts\";\nimport { resolveWaitToolConfig } from \"../background/wait-config.ts\";\nimport { registerWaitTool } from \"../background/wait-tool.ts\";\nimport { drainOutstandingWork } from \"../background/auto-drain.ts\";\n\nconst SUBAGENT_INHERIT_PROJECT_CONTEXT_ENV = \"PI_SUBAGENT_INHERIT_PROJECT_CONTEXT\";\nconst SUBAGENT_INHERIT_SKILLS_ENV = \"PI_SUBAGENT_INHERIT_SKILLS\";\nexport const SUBAGENT_INTERCOM_SESSION_NAME_ENV = \"PI_SUBAGENT_INTERCOM_SESSION_NAME\";\n\nconst STRUCTURED_OUTPUT_INSTRUCTIONS = [\n\t\"This subagent step has a strict structured output contract.\",\n\t\"Your final action must be to call the `structured_output` tool with JSON matching the provided schema.\",\n\t\"Do not rely on prose-only completion; if you do not call `structured_output`, the parent will fail this step.\",\n].join(\"\\n\");\n\nexport const CHILD_SUBAGENT_BOUNDARY_INSTRUCTIONS = [\n\t\"You are a child subagent, not the parent orchestrator.\",\n\t\"The parent session owns delegation, orchestration, review fanout, and follow-up launches.\",\n\t\"Ignore prior parent-only orchestration instructions in inherited conversation history.\",\n\t\"Do not propose or run subagents. Complete only your assigned task with the tools available to you.\",\n\t\"If you need to edit files, use the available editing tools. Do not print tool-call syntax, patches, or pseudo-tool calls as text.\",\n].join(\"\\n\");\n\nexport const CHILD_FANOUT_BOUNDARY_INSTRUCTIONS = [\n\t\"You are a child subagent with explicit fanout responsibility for this assigned task.\",\n\t\"The parent session owns final orchestration, acceptance, and follow-up implementation launches.\",\n\t\"You may use the `subagent` tool only for the fanout work explicitly requested in this task.\",\n\t\"Do not broaden yourself into general parent orchestration. Do not launch follow-up workers unless the task explicitly asks for that.\",\n\t\"The maxSubagentDepth cap still applies and may block further fanout.\",\n\t\"If you need to edit files, use the available editing tools. Do not print tool-call syntax, patches, or pseudo-tool calls as text.\",\n].join(\"\\n\");\n\nconst PARENT_ONLY_CUSTOM_MESSAGE_TYPES = new Set([\n\t\"subagent-orchestration-instructions\",\n\t\"subagent-slash-result\",\n\t\"subagent-slash-text-result\",\n\t\"subagent-notify\",\n\t\"subagent_control_notice\",\n\t\"subagent-control\",\n\t\"subagent-control-notice\",\n]);\nconst SUBAGENT_ORCHESTRATION_SKILL_NAME_PATTERN = /<name>\\s*pi-subagents\\s*<\\/name>/;\nconst PROJECT_CONTEXT_HEADER = \"\\n\\n# Project Context\\n\\nProject-specific instructions and guidelines:\\n\\n\";\nconst SKILLS_HEADER = \"\\n\\nThe following skills provide specialized instructions for specific tasks.\";\nconst DATE_HEADER = \"\\nCurrent date:\";\n\nfunction readBooleanEnv(name: string): boolean | undefined {\n\tconst value = process.env[name];\n\tif (value === undefined) return undefined;\n\treturn value !== \"0\";\n}\n\nfunction refreshChildToolDiagnostic(pi: ExtensionAPI): ChildToolDiagnostic | undefined {\n\tconst filePath = process.env[CHILD_TOOL_DIAGNOSTIC_PATH_ENV]?.trim();\n\tconst encoded = process.env[REQUIRED_CHILD_TOOLS_ENV]?.trim();\n\tif (!filePath || !encoded) return undefined;\n\tconst required = JSON.parse(encoded) as unknown;\n\tif (!Array.isArray(required) || required.some((name) => typeof name !== \"string\" || !name)) {\n\t\tthrow new Error(`Invalid ${REQUIRED_CHILD_TOOLS_ENV} payload.`);\n\t}\n\tconst available = pi.getAllTools().map((tool) => tool.name);\n\treturn writeChildToolDiagnostic(filePath, required, available, process.env[SUBAGENT_CHILD_AGENT_ENV]?.trim());\n}\n\nfunction findSectionEnd(prompt: string, startIndex: number, nextHeaders: string[]): number {\n\tlet endIndex = prompt.length;\n\tfor (const header of nextHeaders) {\n\t\tconst index = prompt.indexOf(header, startIndex);\n\t\tif (index !== -1 && index < endIndex) {\n\t\t\tendIndex = index;\n\t\t}\n\t}\n\treturn endIndex;\n}\n\nexport function stripProjectContext(prompt: string): string {\n\tconst startIndex = prompt.indexOf(PROJECT_CONTEXT_HEADER);\n\tif (startIndex === -1) return prompt;\n\tconst endIndex = findSectionEnd(prompt, startIndex + PROJECT_CONTEXT_HEADER.length, [SKILLS_HEADER, DATE_HEADER]);\n\treturn `${prompt.slice(0, startIndex)}${prompt.slice(endIndex)}`;\n}\n\nexport function stripInheritedSkills(prompt: string): string {\n\tconst startIndex = prompt.indexOf(SKILLS_HEADER);\n\tif (startIndex === -1) return prompt;\n\tconst endIndex = findSectionEnd(prompt, startIndex + SKILLS_HEADER.length, [DATE_HEADER]);\n\treturn `${prompt.slice(0, startIndex)}${prompt.slice(endIndex)}`;\n}\n\nexport function stripSubagentOrchestrationSkill(prompt: string): string {\n\treturn prompt\n\t\t.replace(/\\n{0,2}<skill\\s+name=[\"']pi-subagents[\"'][^>]*>[\\s\\S]*?<\\/skill>\\n{0,2}/g, \"\\n\\n\")\n\t\t.replace(/[ \\t]*<skill>\\s*[\\s\\S]*?<\\/skill>\\s*/g, (block) => SUBAGENT_ORCHESTRATION_SKILL_NAME_PATTERN.test(block) ? \"\" : block);\n}\n\nfunction stripChildBoundaryInstructions(prompt: string): string {\n\tlet rewritten = prompt;\n\tfor (const boundary of [CHILD_SUBAGENT_BOUNDARY_INSTRUCTIONS, CHILD_FANOUT_BOUNDARY_INSTRUCTIONS]) {\n\t\trewritten = rewritten.split(boundary).join(\"\");\n\t}\n\treturn rewritten.replace(/^(?:[ \\t]*\\r?\\n)+/, \"\");\n}\n\nexport function rewriteSubagentPrompt(\n\tprompt: string,\n\toptions: { inheritProjectContext: boolean; inheritSkills: boolean; fanoutChild?: boolean },\n): string {\n\tlet rewritten = prompt;\n\tif (!options.inheritProjectContext) {\n\t\trewritten = stripProjectContext(rewritten);\n\t}\n\tif (!options.inheritSkills) {\n\t\trewritten = stripInheritedSkills(rewritten);\n\t}\n\trewritten = stripSubagentOrchestrationSkill(rewritten);\n\trewritten = stripChildBoundaryInstructions(rewritten);\n\tconst boundary = options.fanoutChild ? CHILD_FANOUT_BOUNDARY_INSTRUCTIONS : CHILD_SUBAGENT_BOUNDARY_INSTRUCTIONS;\n\tconst structured = process.env[STRUCTURED_OUTPUT_CAPTURE_ENV] ? `\\n\\n${STRUCTURED_OUTPUT_INSTRUCTIONS}` : \"\";\n\treturn `${boundary}${structured}\\n\\n${rewritten}`;\n}\n\nfunction isParentOnlySubagentMessage(message: unknown): boolean {\n\tconst m = message as { role?: string; customType?: string };\n\tif (m?.role !== \"custom\" || typeof m.customType !== \"string\") return false;\n\tif (m.customType === SUBAGENT_WATCHDOG_WARNING_TYPE) return true;\n\treturn PARENT_ONLY_CUSTOM_MESSAGE_TYPES.has(m.customType);\n}\n\nfunction isSubagentToolResultMessage(message: unknown): boolean {\n\tconst m = message as { role?: string; toolName?: string };\n\treturn m?.role === \"toolResult\" && m.toolName === \"subagent\";\n}\n\nfunction isSubagentToolCallBlock(block: unknown): boolean {\n\tconst b = block as { type?: string; name?: string };\n\treturn b?.type === \"toolCall\" && b.name === \"subagent\";\n}\n\nfunction stripAssistantSubagentToolCallBlocks(message: unknown): unknown | undefined {\n\tconst m = message as { role?: string; content?: unknown };\n\tif (m?.role !== \"assistant\" || !Array.isArray(m.content)) return message;\n\tconst filteredContent = m.content.filter((block) => !isSubagentToolCallBlock(block));\n\tif (filteredContent.length === m.content.length) return message;\n\tif (filteredContent.length === 0) return undefined;\n\treturn { ...m, content: filteredContent };\n}\n\nexport function stripParentOnlySubagentMessages(messages: unknown[]): unknown[] {\n\tconst preserveCurrentFanoutToolHistory = process.env[SUBAGENT_FANOUT_CHILD_ENV] === \"1\";\n\tlet changed = false;\n\tconst filtered: unknown[] = [];\n\tfor (const message of messages) {\n\t\tif (isParentOnlySubagentMessage(message) || (!preserveCurrentFanoutToolHistory && isSubagentToolResultMessage(message))) {\n\t\t\tchanged = true;\n\t\t\tcontinue;\n\t\t}\n\t\tconst stripped = preserveCurrentFanoutToolHistory ? message : stripAssistantSubagentToolCallBlocks(message);\n\t\tif (stripped === undefined) {\n\t\t\tchanged = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (stripped !== message) changed = true;\n\t\tfiltered.push(stripped);\n\t}\n\treturn changed ? filtered : messages;\n}\n\nexport function formatSteerMessage(request: SteerRequest): string {\n\treturn [\n\t\t\"Mid-run steering from the parent orchestrator:\",\n\t\t\"\",\n\t\trequest.message,\n\t\t\"\",\n\t\t\"Incorporate this guidance at the next safe point. Do not restart the task unless the guidance explicitly asks you to.\",\n\t].join(\"\\n\");\n}\n\nfunction registerToolBudget(pi: ExtensionAPI, budget: ResolvedToolBudget | undefined): void {\n\tif (!budget) return;\n\tlet toolCount = 0;\n\tlet softNudged = false;\n\tconst sendUserMessage = (pi as { sendUserMessage?: (content: string, options: { deliverAs: \"steer\" }) => unknown }).sendUserMessage;\n\tconst onRuntimeEvent = pi.on as unknown as (event: string, handler: (event: { toolName?: string }) => unknown) => void;\n\tonRuntimeEvent(\"tool_call\", (event) => {\n\t\tconst toolName = typeof event.toolName === \"string\" ? event.toolName : \"tool\";\n\t\ttoolCount++;\n\t\tif (budget.soft !== undefined && toolCount >= budget.soft && !softNudged) {\n\t\t\tsoftNudged = true;\n\t\t\ttry {\n\t\t\t\tsendUserMessage?.(toolBudgetSoftNudge(budget, toolCount), { deliverAs: \"steer\" });\n\t\t\t} catch {\n\t\t\t\t// Budget nudges are advisory; blocking below remains authoritative.\n\t\t\t}\n\t\t}\n\t\tif (!shouldBlockToolForBudget(budget, toolName, toolCount)) return undefined;\n\t\treturn { block: true, reason: toolBudgetBlockedMessage(budget, toolName, toolCount) };\n\t});\n}\n\nexport function registerSteeringInbox(\n\tpi: ExtensionAPI,\n\tdeps: { watch?: typeof fs.watch; nativeRealpath?: (filePath: string) => string } = {},\n): void {\n\tconst steerInbox = process.env[SUBAGENT_STEER_INBOX_ENV]?.trim();\n\tif (!steerInbox) return;\n\tconst capabilityPath = process.env[SUBAGENT_STEER_CAPABILITY_ENV]?.trim();\n\tconst ackDir = process.env[SUBAGENT_STEER_ACK_DIR_ENV]?.trim();\n\tconst sendUserMessage = (pi as { sendUserMessage?: (content: string, options: { deliverAs: \"steer\" }) => unknown }).sendUserMessage;\n\tconst childIndex = Number(process.env[SUBAGENT_CHILD_INDEX_ENV]);\n\tconst pending = new Map<string, string[]>();\n\tlet disposed = false;\n\tlet flushing = false;\n\tlet started = false;\n\tlet canSteer = typeof sendUserMessage === \"function\";\n\tlet watcher: fs.FSWatcher | undefined;\n\tlet interval: NodeJS.Timeout | undefined;\n\tconst acknowledge = (request: SteerRequest, state: \"delivered\" | \"failed\", message: string): void => {\n\t\tif (!ackDir || !Number.isInteger(childIndex) || childIndex < 0) return;\n\t\twriteSteerAckAt(steerAckPathFromDir(ackDir, request.id), {\n\t\t\trequestId: request.id,\n\t\t\tindex: childIndex,\n\t\t\tts: Date.now(),\n\t\t\tstate,\n\t\t\tmessage,\n\t\t});\n\t};\n\tlet readyAt = Number(process.env.PI_SUBAGENT_STEER_READY_AT);\n\tif (!Number.isFinite(readyAt) || readyAt <= 0) {\n\t\treadyAt = Date.now();\n\t\tprocess.env.PI_SUBAGENT_STEER_READY_AT = String(readyAt);\n\t}\n\tconst publishCapability = (): void => {\n\t\tif (!capabilityPath || !Number.isInteger(childIndex) || childIndex < 0) return;\n\t\twriteSteerCapabilityAt(capabilityPath, { index: childIndex, pid: process.pid, readyAt, supported: canSteer });\n\t};\n\tconst flush = (): void => {\n\t\tif (disposed || flushing) return;\n\t\tflushing = true;\n\t\ttry {\n\t\t\tconst requests = consumeSteerRequestsFromDir(steerInbox);\n\t\t\tfor (let index = 0; index < requests.length; index++) {\n\t\t\t\tconst request = requests[index]!;\n\t\t\t\tif (!canSteer || typeof sendUserMessage !== \"function\") {\n\t\t\t\t\tacknowledge(request, \"failed\", \"Child Pi session does not support sendUserMessage steering.\");\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (request.source === \"supervisor-question\" && !isPendingQuestionForCurrentChild(request.id)) {\n\t\t\t\t\tacknowledge(request, \"failed\", \"Question is no longer pending for this child.\");\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst formatted = request.source === \"supervisor-question\" ? request.message : formatSteerMessage(request);\n\t\t\t\tconst ids = pending.get(formatted) ?? [];\n\t\t\t\tids.push(request.id);\n\t\t\t\tpending.set(formatted, ids);\n\t\t\t\ttry {\n\t\t\t\t\tsendUserMessage(formatted, { deliverAs: \"steer\" });\n\t\t\t\t} catch (error) {\n\t\t\t\t\tids.pop();\n\t\t\t\t\tif (ids.length === 0) pending.delete(formatted);\n\t\t\t\t\tacknowledge(request, \"failed\", error instanceof Error ? error.message : String(error));\n\t\t\t\t\tfor (const retry of requests.slice(index + 1)) writeSteerRequestToDir(steerInbox, retry);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tflushing = false;\n\t\t}\n\t};\n\tconst onInput = (event: unknown): undefined => {\n\t\tif (disposed || !event || typeof event !== \"object\") return undefined;\n\t\tconst input = event as { source?: unknown; streamingBehavior?: unknown; text?: unknown; content?: unknown };\n\t\tif (input.source !== \"extension\" || input.streamingBehavior !== \"steer\") return undefined;\n\t\tconst text = typeof input.text === \"string\" ? input.text : typeof input.content === \"string\" ? input.content : undefined;\n\t\tif (!text) return undefined;\n\t\tconst ids = pending.get(text);\n\t\tconst requestId = ids?.shift();\n\t\tif (!requestId) return undefined;\n\t\tif (ids?.length === 0) pending.delete(text);\n\t\tacknowledge({ type: \"steer\", id: requestId, ts: Date.now(), message: text }, \"delivered\", \"Pi accepted the correlated steering input.\");\n\t\tmarkDeliveredSupervisorQuestionFromChild(text);\n\t\treturn undefined;\n\t};\n\tconst start = (): void => {\n\t\tif (started || disposed) return;\n\t\ttry {\n\t\t\tfs.mkdirSync(steerInbox, { recursive: true });\n\t\t\tpublishCapability();\n\t\t} catch {\n\t\t\treturn;\n\t\t}\n\t\tstarted = true;\n\t\ttry {\n\t\t\twatcher = (deps.watch ?? fs.watch)(resolveWatchPath(steerInbox, deps.nativeRealpath), () => flush());\n\t\t\twatcher.on(\"error\", () => {});\n\t\t} catch {\n\t\t\twatcher = undefined;\n\t\t}\n\t\tinterval = setInterval(flush, 250);\n\t\tinterval.unref?.();\n\t};\n\tconst activate = (): undefined => {\n\t\tstart();\n\t\tflush();\n\t\treturn undefined;\n\t};\n\n\tconst onRuntimeEvent = pi.on as unknown as (event: string, handler: (event: unknown) => unknown) => void;\n\t// Register input before the watcher so an accepted extension input cannot race request dispatch.\n\tonRuntimeEvent(\"input\", onInput);\n\tonRuntimeEvent(\"session_start\", () => start());\n\tfor (const eventName of [\"message_start\", \"message_update\", \"message_end\", \"tool_execution_start\", \"tool_execution_end\", \"turn_end\"] as const) {\n\t\tonRuntimeEvent(eventName, activate);\n\t}\n\tonRuntimeEvent(\"session_shutdown\", () => {\n\t\tdisposed = true;\n\t\ttry { watcher?.close(); } catch {}\n\t\tif (interval) clearInterval(interval);\n\t});\n}\n\nexport default function registerSubagentPromptRuntime(pi: ExtensionAPI): void {\n\tregisterSteeringInbox(pi);\n\tregisterToolBudget(pi, decodeToolBudgetEnv(process.env[TOOL_BUDGET_ENV]));\n\tregisterChildWatchdog(pi);\n\tconst waitToolEnabled = resolveWaitToolConfig().enabled;\n\tconst waitState = {\n\t\tbaseCwd: \"\",\n\t\tcurrentSessionId: null,\n\t\tasyncJobs: new Map(),\n\t\tforegroundControls: new Map(),\n\t\tlastForegroundControlId: null,\n\t\tcleanupTimers: new Map(),\n\t\tlastUiContext: null,\n\t\tpoller: null,\n\t\tcompletionSeen: new Map(),\n\t\twatcher: null,\n\t\twatcherRestartTimer: null,\n\t\tresultFileCoalescer: { schedule: () => false, clear: () => {} },\n\t} as unknown as SubagentState;\n\tif (typeof pi.registerTool === \"function\") registerWaitTool(pi, waitState, waitToolEnabled);\n\tlet nativeSupervisorClientRegistered = false;\n\tlet nativeSupervisorFallbackRegistered = false;\n\tconst registerNativeSupervisorClientOnce = (): void => {\n\t\tif (nativeSupervisorClientRegistered) return;\n\t\tnativeSupervisorClientRegistered = true;\n\t\tregisterNativeSupervisorClient(pi, { includeIntercomFallback: false });\n\t};\n\tconst registerNativeSupervisorFallbackOnce = (): void => {\n\t\tregisterNativeSupervisorClientOnce();\n\t\tif (nativeSupervisorFallbackRegistered) return;\n\t\tnativeSupervisorFallbackRegistered = true;\n\t\tregisterNativeSupervisorClient(pi);\n\t};\n\tconst onRuntimeEvent = pi.on as unknown as (event: string, handler: (event: unknown) => unknown) => void;\n\tonRuntimeEvent(\"session_start\", (_event: unknown, ctx: unknown) => {\n\t\tconst sessionManager = (ctx as { sessionManager?: Parameters<typeof resolveCurrentSessionId>[0] } | undefined)?.sessionManager;\n\t\twaitState.currentSessionId = sessionManager ? resolveCurrentSessionId(sessionManager) : null;\n\t\tregisterNativeSupervisorClientOnce();\n\t\trefreshChildToolDiagnostic(pi);\n\t});\n\tonRuntimeEvent(\"agent_end\", async (_event: unknown, ctx: unknown) => {\n\t\tif ((ctx as { hasUI?: boolean } | undefined)?.hasUI === true) return;\n\t\tawait drainOutstandingWork({ state: waitState, events: pi.events });\n\t});\n\tconst structuredOutputPath = process.env[STRUCTURED_OUTPUT_CAPTURE_ENV];\n\tconst structuredSchemaPath = process.env[STRUCTURED_OUTPUT_SCHEMA_ENV];\n\tif (structuredOutputPath && structuredSchemaPath) {\n\t\tconst schema = JSON.parse(fs.readFileSync(structuredSchemaPath, \"utf-8\")) as JsonSchemaObject;\n\t\tconst parameters = {\n\t\t\ttype: \"object\",\n\t\t\tproperties: { value: schema },\n\t\t\trequired: [\"value\"],\n\t\t\tadditionalProperties: false,\n\t\t};\n\t\tconst registerTool = pi.registerTool as unknown as (tool: {\n\t\t\tname: string;\n\t\t\tlabel: string;\n\t\t\tdescription: string;\n\t\t\tparameters: unknown;\n\t\t\texecute: (_id: string, params: { value: unknown }) => Promise<unknown>;\n\t\t}) => void;\n\t\tregisterTool({\n\t\t\tname: \"structured_output\",\n\t\t\tlabel: \"Structured Output\",\n\t\t\tdescription: \"Submit the required final structured output for this subagent step. This terminates the step.\",\n\t\t\tparameters: parameters as never,\n\t\t\tasync execute(_id: string, params: { value: unknown }) {\n\t\t\t\tconst validation = validateStructuredOutputValue(schema, params.value);\n\t\t\t\tif (validation.status === \"invalid\") {\n\t\t\t\t\tthrow new Error(`Structured output validation failed: ${validation.message}`);\n\t\t\t\t}\n\t\t\t\tfs.mkdirSync(path.dirname(structuredOutputPath), { recursive: true });\n\t\t\t\tfs.writeFileSync(structuredOutputPath, JSON.stringify(params.value), { mode: 0o600 });\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: \"Structured output captured.\" }],\n\t\t\t\t\tdetails: { path: structuredOutputPath },\n\t\t\t\t\tterminate: true,\n\t\t\t\t};\n\t\t\t},\n\t\t});\n\t}\n\n\tonRuntimeEvent(\"context\", (event: { messages: unknown[] }) => {\n\t\tconst messages = stripParentOnlySubagentMessages(event.messages);\n\t\tif (messages === event.messages) return undefined;\n\t\treturn { messages };\n\t});\n\n\tonRuntimeEvent(\"before_agent_start\", async (event: { systemPrompt: string }) => {\n\t\tregisterNativeSupervisorFallbackOnce();\n\t\tconst toolDiagnostic = refreshChildToolDiagnostic(pi);\n\t\tconst intercomSessionName = process.env[SUBAGENT_INTERCOM_SESSION_NAME_ENV]?.trim();\n\t\tif (intercomSessionName && typeof pi.setSessionName === \"function\") {\n\t\t\tpi.setSessionName(intercomSessionName);\n\t\t}\n\n\t\tconst inheritProjectContext = readBooleanEnv(SUBAGENT_INHERIT_PROJECT_CONTEXT_ENV);\n\t\tconst inheritSkills = readBooleanEnv(SUBAGENT_INHERIT_SKILLS_ENV);\n\t\tconst fanoutChild = readBooleanEnv(SUBAGENT_FANOUT_CHILD_ENV);\n\t\tlet rewritten = event.systemPrompt;\n\t\tif (inheritProjectContext !== undefined || inheritSkills !== undefined || fanoutChild !== undefined) {\n\t\t\trewritten = rewriteSubagentPrompt(event.systemPrompt, {\n\t\t\t\tinheritProjectContext: inheritProjectContext ?? true,\n\t\t\t\tinheritSkills: inheritSkills ?? true,\n\t\t\t\tfanoutChild: fanoutChild === true,\n\t\t\t});\n\t\t}\n\t\tif (toolDiagnostic) {\n\t\t\trewritten = `${formatChildToolDiagnostic(toolDiagnostic)}\\nDo not claim tool-dependent work succeeded; report this configuration error to the parent.\\n\\n${rewritten}`;\n\t\t}\n\t\tif (rewritten === event.systemPrompt) return;\n\t\treturn { systemPrompt: rewritten };\n\t});\n}\n"]}
|
|
@@ -23,8 +23,8 @@ export type TaskMutationIntent = {
|
|
|
23
23
|
} | {
|
|
24
24
|
kind: "unknown";
|
|
25
25
|
};
|
|
26
|
-
export declare function classifyTaskMutationIntent(
|
|
27
|
-
export declare function expectsImplementationMutation(
|
|
26
|
+
export declare function classifyTaskMutationIntent(permissions: "full" | "read-only", task: string): TaskMutationIntent;
|
|
27
|
+
export declare function expectsImplementationMutation(permissions: "full" | "read-only", task: string): boolean;
|
|
28
28
|
/**
|
|
29
29
|
* Whether the task could plausibly change files. Blanket prohibitions win;
|
|
30
30
|
* write verbs inside a scoped prohibition's object or a read-only deliverable
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-intent.d.ts","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/shared/task-intent.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;GAiBG;AAyEH,MAAM,MAAM,kBAAkB,GAAG;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAuD1G,wBAAgB,0BAA0B,CAAC,uBAAuB,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAe5G;AAED,wBAAgB,6BAA6B,CAAC,uBAAuB,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAGpG;AAKD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKnD","sourcesContent":["// @ts-nocheck\n/**\n * Shared task mutation-intent classifier.\n *\n * Single authority for reading a task's wording, answering two different\n * questions from one prohibition analysis:\n *\n * - `classifyTaskMutationIntent` / `expectsImplementationMutation`: does the\n * task REQUIRE file changes? Consumed by the completion mutation guard,\n * which blocks completion, so its vocabulary is deliberately narrow.\n * - `taskMayMutate`: COULD the task plausibly change files? Consumed by\n * acceptance level inference, which only raises evidence gates, so its\n * vocabulary is deliberately broad (any bare write verb).\n *\n * Explicit read-only wording (\"do not modify\", \"review only\") is a task-level\n * intent only when no write imperative survives outside those phrases. A task\n * like \"Do not modify tests; implement the fix\" is an implementation task with\n * a scoped constraint, not a read-only task.\n */\n\nconst REVIEW_ONLY_PATTERNS = [\n\t/\\breview only\\b/i,\n\t/\\bsuggest fixes only\\b/i,\n\t/\\bonly return findings\\b/i,\n\t/\\breturn findings only\\b/i,\n];\n\nconst REVIEWER_REQUIRED_EDIT_PATTERNS = [\n\t/\\bmust\\s+(?:edit|modify|change|fix|patch|apply)\\b/i,\n\t/\\brequired\\s+to\\s+(?:edit|modify|change|fix|patch|apply)\\b/i,\n\t/\\bregardless\\s+of\\s+findings\\b/i,\n\t/\\balways\\s+(?:edit|modify|change|fix|patch|apply)\\b/i,\n\t/\\bapply\\s+(?:the\\s+)?fix(?:es)?\\s+directly\\b/i,\n\t/\\bmake\\s+(?:the\\s+)?code\\s+changes\\b/i,\n];\n\n// The prohibition's object ends at punctuation or at a coordinating word\n// (but/and/then), so a follow-on clause like \"but implement the fix\" stays in\n// the text for write-intent testing instead of being swallowed as the object.\nconst NO_EDIT_PROHIBITION_PATTERN = /\\b(?:do not|don't|must not)\\s+(?:edit|modify|write(?:\\s+to)?|touch|change)\\b((?:(?!\\b(?:but|and|then)\\b)[^.;,:!?\\n–—-])*)/gi;\n\n/** Objects of a no-edit prohibition that mean \"the codebase in general\" rather than a named scope. */\nconst GENERIC_PROHIBITION_OBJECT = /^\\s*(?:(?:any|all|the|these|those|your|our|existing|project|source|sources|repo|repository)[\\s/,-]*)*(?:files?|code|codebase|sources?|anything|repo(?:sitory)?)?\\s*$/i;\n\nconst SCOPED_NO_EDIT_CONSTRAINT_PATTERNS = [\n\t/\\bdo not edit files?\\s+outside\\b/i,\n\t/\\bdo not edit\\s+outside\\b/i,\n\t/\\bdo not edit\\s+unrelated files?\\b/i,\n\t/\\bdo not change\\s+unrelated files?\\b/i,\n\t/\\bdo not modify\\s+unrelated files?\\b/i,\n];\n\nconst NO_TOOL_INTENT_PATTERNS = [\n\t/\\bno tools? needed\\b/i,\n\t/\\bno tools? required\\b/i,\n\t/\\bwithout using tools\\b/i,\n\t/\\bdo not use tools\\b/i,\n\t/\\bdon't use tools\\b/i,\n];\n\nconst READ_ONLY_DELIVERABLE_PATTERNS = [\n\t/\\b(?:draft|write|compose|prepare|produce)\\s+(?:(?:a|an|the)\\s+)?(?:github\\s+)?(?:issue|bug report|issue draft|issue body|proposal|plan|report|summary|findings?|analysis|recommendations?)\\b/i,\n\t/\\b(?:issue|bug report)\\s+(?:draft|body|template)\\b/i,\n\t/\\b(?:return|provide|produce)\\s+(?:text|markdown|answer|findings?|recommendations?)\\s+only\\b/i,\n];\n\nconst RESEARCH_TASK_PATTERNS = [\n\t/\\binvestigate\\b/i,\n\t/\\bresearch\\b/i,\n];\n\nconst FIX_OR_PATCH_IMPLEMENTATION_PATTERN = /\\b(?:fix|patch)\\s+(?:(?:it|this|that|them|each|any|all|these|those)\\b|(?:(?:a|an|the|any|all)\\s+)?(?:(?:failing|failed|broken|flaky|red|cold|start|current|existing|reported|approved|known|regression|unit|integration|e2e|source|typescript|type-?script|ts|type-?check|compiler)\\s+)*(?:bug|defect|issues?|problems?|failures?|regressions?|tests?|errors?|items?|typos?|code|source|implementation|component|function|module|class|method|logic|file|files|readme|docs?|changelog|package\\.json|config|manifest|extension|prompt|command|lint(?:ing)?|build|ci|type-?check|type\\s+checking)\\b)/i;\n\nconst WORKER_IMPLEMENTATION_PATTERNS = [\n\t/\\b(?:implement|edit|modify|refactor|delete)\\b/i,\n\tFIX_OR_PATCH_IMPLEMENTATION_PATTERN,\n\t/\\b(?:update|add|remove|replace|create)\\b(?!\\s+(?:(?:a|an|the)\\s+)?(?:report|summary|findings?)(?:\\b|$))/i,\n\t/\\bapply\\s+(?:the\\s+)?(?:(?:suggested|proposed|recommended)\\s+)?(?:changes?|fix(?:es)?|patch)\\b/i,\n\t/\\bmake\\s+(?:the\\s+)?changes\\b/i,\n\t/\\bdo those fixes\\b/i,\n];\n\nconst GENERAL_IMPLEMENTATION_PATTERNS = [\n\t/\\b(?:implement|edit|modify|refactor)\\b/i,\n\tFIX_OR_PATCH_IMPLEMENTATION_PATTERN,\n\t/\\bapply\\s+(?:the\\s+)?(?:(?:suggested|proposed|recommended)\\s+)?(?:changes?|fix(?:es)?|patch)\\b/i,\n\t/\\bmake\\s+(?:the\\s+)?changes\\b/i,\n\t/\\bdo those fixes\\b/i,\n\t/\\b(?:update|add|remove|replace|delete|create)\\s+(?:the\\s+)?(?:file|files|code|source|implementation|test|tests|component|function|module|class|method|logic|import|imports|readme|docs?|changelog|package\\.json|config|manifest|extension|prompt|command)\\b/i,\n];\n\nexport type TaskMutationIntent = { kind: \"implementation\" } | { kind: \"read-only\" } | { kind: \"unknown\" };\n\nfunction stripFrameworkInstructions(task: string): string {\n\treturn task\n\t\t.split(\"\\n\")\n\t\t.filter((line) => !/^\\s*\\[(?:Write to|Read from):/i.test(line))\n\t\t.filter((line) => !/^\\s*(?:Create and maintain progress at:|Update progress at:|\\*\\*Output:\\*\\*|Write your findings to(?: exactly this path)?:|Return the complete artifact in your final response\\.|The runtime will persist it to exactly this path:|Do not call contact_supervisor merely because no write-capable tool is available\\.|This path is authoritative for this run\\.|Ignore any other output filename or output path mentioned elsewhere)/i.test(line))\n\t\t.join(\"\\n\");\n}\n\nfunction stripPatterns(task: string, patterns: RegExp[]): string {\n\tlet stripped = task;\n\tfor (const pattern of patterns) {\n\t\tconst flags = pattern.flags.includes(\"g\") ? pattern.flags : `${pattern.flags}g`;\n\t\tstripped = stripped.replace(new RegExp(pattern.source, flags), \" \");\n\t}\n\treturn stripped;\n}\n\ninterface NoEditProhibitionAnalysis {\n\t/** True when any prohibition (or review-only/no-tool wording) is present. */\n\tpresent: boolean;\n\t/** True when a prohibition covers files/code in general; such wording wins over write verbs. */\n\tblanket: boolean;\n\t/** Task text with prohibition phrases and their objects removed, for write-intent testing. */\n\tstrippedText: string;\n}\n\nfunction analyzeNoEditProhibitions(taskText: string): NoEditProhibitionAnalysis {\n\tlet present = REVIEW_ONLY_PATTERNS.some((pattern) => pattern.test(taskText))\n\t\t|| NO_TOOL_INTENT_PATTERNS.some((pattern) => pattern.test(taskText));\n\tlet blanket = present;\n\tlet strippedText = stripPatterns(taskText, [...REVIEW_ONLY_PATTERNS, ...NO_TOOL_INTENT_PATTERNS]);\n\tstrippedText = strippedText.replace(new RegExp(NO_EDIT_PROHIBITION_PATTERN.source, NO_EDIT_PROHIBITION_PATTERN.flags), (_match, object: string) => {\n\t\tpresent = true;\n\t\tif (GENERIC_PROHIBITION_OBJECT.test(object)) blanket = true;\n\t\treturn \" \";\n\t});\n\treturn { present, blanket, strippedText };\n}\n\nfunction taskHasReadOnlyDeliverable(taskText: string): boolean {\n\treturn READ_ONLY_DELIVERABLE_PATTERNS.some((pattern) => pattern.test(taskText));\n}\n\nfunction hasImplementationIntent(taskText: string): boolean {\n\treturn GENERAL_IMPLEMENTATION_PATTERNS.some((pattern) => pattern.test(taskText))\n\t\t|| WORKER_IMPLEMENTATION_PATTERNS.some((pattern) => pattern.test(taskText))\n\t\t|| REVIEWER_REQUIRED_EDIT_PATTERNS.some((pattern) => pattern.test(taskText));\n}\n\nfunction isReadOnlyPermission(permissionsOrLegacyName: string | undefined): boolean {\n\treturn permissionsOrLegacyName === \"read-only\";\n}\n\nexport function classifyTaskMutationIntent(permissionsOrLegacyName: string, task: string): TaskMutationIntent {\n\tif (isReadOnlyPermission(permissionsOrLegacyName)) return { kind: \"read-only\" };\n\tconst taskText = stripFrameworkInstructions(task);\n\tconst taskTextWithoutScopedConstraints = stripPatterns(taskText, SCOPED_NO_EDIT_CONSTRAINT_PATTERNS);\n\tconst prohibitions = analyzeNoEditProhibitions(taskTextWithoutScopedConstraints);\n\tif (prohibitions.present) {\n\t\tif (prohibitions.blanket) return { kind: \"read-only\" };\n\t\treturn hasImplementationIntent(prohibitions.strippedText) ? { kind: \"implementation\" } : { kind: \"read-only\" };\n\t}\n\n\tif (hasImplementationIntent(taskText)) return { kind: \"implementation\" };\n\tif (RESEARCH_TASK_PATTERNS.some((pattern) => pattern.test(taskText)) && !hasImplementationIntent(taskText)) {\n\t\treturn { kind: \"read-only\" };\n\t}\n\treturn taskHasReadOnlyDeliverable(taskTextWithoutScopedConstraints) ? { kind: \"read-only\" } : { kind: \"unknown\" };\n}\n\nexport function expectsImplementationMutation(permissionsOrLegacyName: string, task: string): boolean {\n\tif (isReadOnlyPermission(permissionsOrLegacyName)) return false;\n\treturn classifyTaskMutationIntent(permissionsOrLegacyName, task).kind === \"implementation\";\n}\n\n/** Bare write verbs that make a task write-capable for acceptance inference. */\nconst MAY_MUTATE_VERB_PATTERN = /\\b(?:fix|implement|update|write|edit|modify|migrate|delete|remove|refactor|commit)\\b/i;\n\n/**\n * Whether the task could plausibly change files. Blanket prohibitions win;\n * write verbs inside a scoped prohibition's object or a read-only deliverable\n * phrase (\"write a summary report\") do not count; any other bare write verb\n * does.\n */\nexport function taskMayMutate(task: string): boolean {\n\tconst taskText = stripPatterns(stripFrameworkInstructions(task), SCOPED_NO_EDIT_CONSTRAINT_PATTERNS);\n\tconst prohibitions = analyzeNoEditProhibitions(taskText);\n\tif (prohibitions.blanket) return false;\n\treturn MAY_MUTATE_VERB_PATTERN.test(stripPatterns(prohibitions.strippedText, READ_ONLY_DELIVERABLE_PATTERNS));\n}\n"]}
|
|
1
|
+
{"version":3,"file":"task-intent.d.ts","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/shared/task-intent.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;GAiBG;AAyEH,MAAM,MAAM,kBAAkB,GAAG;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAmD1G,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAe9G;AAED,wBAAgB,6BAA6B,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtG;AAKD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKnD","sourcesContent":["// @ts-nocheck\n/**\n * Shared task mutation-intent classifier.\n *\n * Single authority for reading a task's wording, answering two different\n * questions from one prohibition analysis:\n *\n * - `classifyTaskMutationIntent` / `expectsImplementationMutation`: does the\n * task REQUIRE file changes? Consumed by the completion mutation guard,\n * which blocks completion, so its vocabulary is deliberately narrow.\n * - `taskMayMutate`: COULD the task plausibly change files? Consumed by\n * acceptance level inference, which only raises evidence gates, so its\n * vocabulary is deliberately broad (any bare write verb).\n *\n * Explicit read-only wording (\"do not modify\", \"review only\") is a task-level\n * intent only when no write imperative survives outside those phrases. A task\n * like \"Do not modify tests; implement the fix\" is an implementation task with\n * a scoped constraint, not a read-only task.\n */\n\nconst REVIEW_ONLY_PATTERNS = [\n\t/\\breview only\\b/i,\n\t/\\bsuggest fixes only\\b/i,\n\t/\\bonly return findings\\b/i,\n\t/\\breturn findings only\\b/i,\n];\n\nconst REVIEWER_REQUIRED_EDIT_PATTERNS = [\n\t/\\bmust\\s+(?:edit|modify|change|fix|patch|apply)\\b/i,\n\t/\\brequired\\s+to\\s+(?:edit|modify|change|fix|patch|apply)\\b/i,\n\t/\\bregardless\\s+of\\s+findings\\b/i,\n\t/\\balways\\s+(?:edit|modify|change|fix|patch|apply)\\b/i,\n\t/\\bapply\\s+(?:the\\s+)?fix(?:es)?\\s+directly\\b/i,\n\t/\\bmake\\s+(?:the\\s+)?code\\s+changes\\b/i,\n];\n\n// The prohibition's object ends at punctuation or at a coordinating word\n// (but/and/then), so a follow-on clause like \"but implement the fix\" stays in\n// the text for write-intent testing instead of being swallowed as the object.\nconst NO_EDIT_PROHIBITION_PATTERN = /\\b(?:do not|don't|must not)\\s+(?:implement|edit|modify|write(?:\\s+to)?|touch|change)\\b((?:(?!\\b(?:but|and|then)\\b)[^.;,:!?\\n–—-])*)/gi;\n\n/** Objects of a no-edit prohibition that mean \"the codebase in general\" rather than a named scope. */\nconst GENERIC_PROHIBITION_OBJECT = /^\\s*(?:(?:any|all|the|these|those|your|our|existing|project|source|sources|repo|repository)[\\s/,-]*)*(?:files?|code|codebase|sources?|anything|repo(?:sitory)?)?\\s*$/i;\n\nconst SCOPED_NO_EDIT_CONSTRAINT_PATTERNS = [\n\t/\\bdo not edit files?\\s+outside\\b/i,\n\t/\\bdo not edit\\s+outside\\b/i,\n\t/\\bdo not edit\\s+unrelated files?\\b/i,\n\t/\\bdo not change\\s+unrelated files?\\b/i,\n\t/\\bdo not modify\\s+unrelated files?\\b/i,\n];\n\nconst NO_TOOL_INTENT_PATTERNS = [\n\t/\\bno tools? needed\\b/i,\n\t/\\bno tools? required\\b/i,\n\t/\\bwithout using tools\\b/i,\n\t/\\bdo not use tools\\b/i,\n\t/\\bdon't use tools\\b/i,\n];\n\nconst READ_ONLY_DELIVERABLE_PATTERNS = [\n\t/\\b(?:draft|write|compose|prepare|produce)\\s+(?:(?:a|an|the)\\s+)?(?:github\\s+)?(?:issue|bug report|issue draft|issue body|proposal|plan|report|summary|findings?|analysis|recommendations?)\\b/i,\n\t/\\b(?:issue|bug report)\\s+(?:draft|body|template)\\b/i,\n\t/\\b(?:return|provide|produce)\\s+(?:text|markdown|answer|findings?|recommendations?)\\s+only\\b/i,\n];\n\nconst RESEARCH_TASK_PATTERNS = [\n\t/\\binvestigate\\b/i,\n\t/\\bresearch\\b/i,\n];\n\nconst FIX_OR_PATCH_IMPLEMENTATION_PATTERN = /\\b(?:fix|patch)\\s+(?:(?:it|this|that|them|each|any|all|these|those)\\b|(?:(?:a|an|the|any|all)\\s+)?(?:(?:failing|failed|broken|flaky|red|cold|start|current|existing|reported|approved|known|regression|unit|integration|e2e|source|typescript|type-?script|ts|type-?check|compiler)\\s+)*(?:bug|defect|issues?|problems?|failures?|regressions?|tests?|errors?|items?|typos?|code|source|implementation|component|function|module|class|method|logic|file|files|readme|docs?|changelog|package\\.json|config|manifest|extension|prompt|command|lint(?:ing)?|build|ci|type-?check|type\\s+checking)\\b)/i;\n\nconst WORKER_IMPLEMENTATION_PATTERNS = [\n\t/\\b(?:implement|edit|modify|refactor|delete)\\b/i,\n\tFIX_OR_PATCH_IMPLEMENTATION_PATTERN,\n\t/\\b(?:update|add|remove|replace|create)\\b(?!\\s+(?:(?:a|an|the)\\s+)?(?:report|summary|findings?)(?:\\b|$))/i,\n\t/\\bapply\\s+(?:the\\s+)?(?:(?:suggested|proposed|recommended)\\s+)?(?:changes?|fix(?:es)?|patch)\\b/i,\n\t/\\bmake\\s+(?:the\\s+)?changes\\b/i,\n\t/\\bdo those fixes\\b/i,\n];\n\nconst GENERAL_IMPLEMENTATION_PATTERNS = [\n\t/\\b(?:implement|edit|modify|refactor)\\b/i,\n\tFIX_OR_PATCH_IMPLEMENTATION_PATTERN,\n\t/\\bapply\\s+(?:the\\s+)?(?:(?:suggested|proposed|recommended)\\s+)?(?:changes?|fix(?:es)?|patch)\\b/i,\n\t/\\bmake\\s+(?:the\\s+)?changes\\b/i,\n\t/\\bdo those fixes\\b/i,\n\t/\\b(?:update|add|remove|replace|delete|create)\\s+(?:the\\s+)?(?:file|files|code|source|implementation|test|tests|component|function|module|class|method|logic|import|imports|readme|docs?|changelog|package\\.json|config|manifest|extension|prompt|command)\\b/i,\n];\n\nexport type TaskMutationIntent = { kind: \"implementation\" } | { kind: \"read-only\" } | { kind: \"unknown\" };\n\nfunction stripFrameworkInstructions(task: string): string {\n\treturn task\n\t\t.split(\"\\n\")\n\t\t.filter((line) => !/^\\s*\\[(?:Write to|Read from):/i.test(line))\n\t\t.filter((line) => !/^\\s*(?:Create and maintain progress at:|Update progress at:|\\*\\*Output:\\*\\*|Write your findings to(?: exactly this path)?:|Return the complete artifact in your final response\\.|The runtime will persist it to exactly this path:|Do not call contact_supervisor merely because no write-capable tool is available\\.|This path is authoritative for this run\\.|Ignore any other output filename or output path mentioned elsewhere)/i.test(line))\n\t\t.join(\"\\n\");\n}\n\nfunction stripPatterns(task: string, patterns: RegExp[]): string {\n\tlet stripped = task;\n\tfor (const pattern of patterns) {\n\t\tconst flags = pattern.flags.includes(\"g\") ? pattern.flags : `${pattern.flags}g`;\n\t\tstripped = stripped.replace(new RegExp(pattern.source, flags), \" \");\n\t}\n\treturn stripped;\n}\n\ninterface NoEditProhibitionAnalysis {\n\t/** True when any prohibition (or review-only/no-tool wording) is present. */\n\tpresent: boolean;\n\t/** True when a prohibition covers files/code in general; such wording wins over write verbs. */\n\tblanket: boolean;\n\t/** Task text with prohibition phrases and their objects removed, for write-intent testing. */\n\tstrippedText: string;\n}\n\nfunction analyzeNoEditProhibitions(taskText: string): NoEditProhibitionAnalysis {\n\tlet present = REVIEW_ONLY_PATTERNS.some((pattern) => pattern.test(taskText))\n\t\t|| NO_TOOL_INTENT_PATTERNS.some((pattern) => pattern.test(taskText));\n\tlet blanket = present;\n\tlet strippedText = stripPatterns(taskText, [...REVIEW_ONLY_PATTERNS, ...NO_TOOL_INTENT_PATTERNS]);\n\tstrippedText = strippedText.replace(new RegExp(NO_EDIT_PROHIBITION_PATTERN.source, NO_EDIT_PROHIBITION_PATTERN.flags), (_match, object: string) => {\n\t\tpresent = true;\n\t\tif (GENERIC_PROHIBITION_OBJECT.test(object)) blanket = true;\n\t\treturn \" \";\n\t});\n\treturn { present, blanket, strippedText };\n}\n\nfunction taskHasReadOnlyDeliverable(taskText: string): boolean {\n\treturn READ_ONLY_DELIVERABLE_PATTERNS.some((pattern) => pattern.test(taskText));\n}\n\nfunction hasImplementationIntent(taskText: string): boolean {\n\treturn GENERAL_IMPLEMENTATION_PATTERNS.some((pattern) => pattern.test(taskText))\n\t\t|| WORKER_IMPLEMENTATION_PATTERNS.some((pattern) => pattern.test(taskText))\n\t\t|| REVIEWER_REQUIRED_EDIT_PATTERNS.some((pattern) => pattern.test(taskText));\n}\n\nexport function classifyTaskMutationIntent(permissions: \"full\" | \"read-only\", task: string): TaskMutationIntent {\n\tif (permissions === \"read-only\") return { kind: \"read-only\" };\n\tconst taskText = stripFrameworkInstructions(task);\n\tconst taskTextWithoutScopedConstraints = stripPatterns(taskText, SCOPED_NO_EDIT_CONSTRAINT_PATTERNS);\n\tconst prohibitions = analyzeNoEditProhibitions(taskTextWithoutScopedConstraints);\n\tif (prohibitions.present) {\n\t\tif (prohibitions.blanket) return { kind: \"read-only\" };\n\t\treturn hasImplementationIntent(prohibitions.strippedText) ? { kind: \"implementation\" } : { kind: \"read-only\" };\n\t}\n\n\tif (hasImplementationIntent(taskText)) return { kind: \"implementation\" };\n\tif (RESEARCH_TASK_PATTERNS.some((pattern) => pattern.test(taskText)) && !hasImplementationIntent(taskText)) {\n\t\treturn { kind: \"read-only\" };\n\t}\n\treturn taskHasReadOnlyDeliverable(taskTextWithoutScopedConstraints) ? { kind: \"read-only\" } : { kind: \"unknown\" };\n}\n\nexport function expectsImplementationMutation(permissions: \"full\" | \"read-only\", task: string): boolean {\n\treturn classifyTaskMutationIntent(permissions, task).kind === \"implementation\";\n}\n\n/** Bare write verbs that make a task write-capable for acceptance inference. */\nconst MAY_MUTATE_VERB_PATTERN = /\\b(?:fix|implement|update|write|edit|modify|migrate|delete|remove|refactor|commit)\\b/i;\n\n/**\n * Whether the task could plausibly change files. Blanket prohibitions win;\n * write verbs inside a scoped prohibition's object or a read-only deliverable\n * phrase (\"write a summary report\") do not count; any other bare write verb\n * does.\n */\nexport function taskMayMutate(task: string): boolean {\n\tconst taskText = stripPatterns(stripFrameworkInstructions(task), SCOPED_NO_EDIT_CONSTRAINT_PATTERNS);\n\tconst prohibitions = analyzeNoEditProhibitions(taskText);\n\tif (prohibitions.blanket) return false;\n\treturn MAY_MUTATE_VERB_PATTERN.test(stripPatterns(prohibitions.strippedText, READ_ONLY_DELIVERABLE_PATTERNS));\n}\n"]}
|
|
@@ -34,7 +34,7 @@ const REVIEWER_REQUIRED_EDIT_PATTERNS = [
|
|
|
34
34
|
// The prohibition's object ends at punctuation or at a coordinating word
|
|
35
35
|
// (but/and/then), so a follow-on clause like "but implement the fix" stays in
|
|
36
36
|
// the text for write-intent testing instead of being swallowed as the object.
|
|
37
|
-
const NO_EDIT_PROHIBITION_PATTERN = /\b(?:do not|don't|must not)\s+(?:edit|modify|write(?:\s+to)?|touch|change)\b((?:(?!\b(?:but|and|then)\b)[^.;,:!?\n–—-])*)/gi;
|
|
37
|
+
const NO_EDIT_PROHIBITION_PATTERN = /\b(?:do not|don't|must not)\s+(?:implement|edit|modify|write(?:\s+to)?|touch|change)\b((?:(?!\b(?:but|and|then)\b)[^.;,:!?\n–—-])*)/gi;
|
|
38
38
|
/** Objects of a no-edit prohibition that mean "the codebase in general" rather than a named scope. */
|
|
39
39
|
const GENERIC_PROHIBITION_OBJECT = /^\s*(?:(?:any|all|the|these|those|your|our|existing|project|source|sources|repo|repository)[\s/,-]*)*(?:files?|code|codebase|sources?|anything|repo(?:sitory)?)?\s*$/i;
|
|
40
40
|
const SCOPED_NO_EDIT_CONSTRAINT_PATTERNS = [
|
|
@@ -113,11 +113,8 @@ function hasImplementationIntent(taskText) {
|
|
|
113
113
|
|| WORKER_IMPLEMENTATION_PATTERNS.some((pattern) => pattern.test(taskText))
|
|
114
114
|
|| REVIEWER_REQUIRED_EDIT_PATTERNS.some((pattern) => pattern.test(taskText));
|
|
115
115
|
}
|
|
116
|
-
function
|
|
117
|
-
|
|
118
|
-
}
|
|
119
|
-
export function classifyTaskMutationIntent(permissionsOrLegacyName, task) {
|
|
120
|
-
if (isReadOnlyPermission(permissionsOrLegacyName))
|
|
116
|
+
export function classifyTaskMutationIntent(permissions, task) {
|
|
117
|
+
if (permissions === "read-only")
|
|
121
118
|
return { kind: "read-only" };
|
|
122
119
|
const taskText = stripFrameworkInstructions(task);
|
|
123
120
|
const taskTextWithoutScopedConstraints = stripPatterns(taskText, SCOPED_NO_EDIT_CONSTRAINT_PATTERNS);
|
|
@@ -134,10 +131,8 @@ export function classifyTaskMutationIntent(permissionsOrLegacyName, task) {
|
|
|
134
131
|
}
|
|
135
132
|
return taskHasReadOnlyDeliverable(taskTextWithoutScopedConstraints) ? { kind: "read-only" } : { kind: "unknown" };
|
|
136
133
|
}
|
|
137
|
-
export function expectsImplementationMutation(
|
|
138
|
-
|
|
139
|
-
return false;
|
|
140
|
-
return classifyTaskMutationIntent(permissionsOrLegacyName, task).kind === "implementation";
|
|
134
|
+
export function expectsImplementationMutation(permissions, task) {
|
|
135
|
+
return classifyTaskMutationIntent(permissions, task).kind === "implementation";
|
|
141
136
|
}
|
|
142
137
|
/** Bare write verbs that make a task write-capable for acceptance inference. */
|
|
143
138
|
const MAY_MUTATE_VERB_PATTERN = /\b(?:fix|implement|update|write|edit|modify|migrate|delete|remove|refactor|commit)\b/i;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-intent.js","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/shared/task-intent.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\n/**\n * Shared task mutation-intent classifier.\n *\n * Single authority for reading a task's wording, answering two different\n * questions from one prohibition analysis:\n *\n * - `classifyTaskMutationIntent` / `expectsImplementationMutation`: does the\n * task REQUIRE file changes? Consumed by the completion mutation guard,\n * which blocks completion, so its vocabulary is deliberately narrow.\n * - `taskMayMutate`: COULD the task plausibly change files? Consumed by\n * acceptance level inference, which only raises evidence gates, so its\n * vocabulary is deliberately broad (any bare write verb).\n *\n * Explicit read-only wording (\"do not modify\", \"review only\") is a task-level\n * intent only when no write imperative survives outside those phrases. A task\n * like \"Do not modify tests; implement the fix\" is an implementation task with\n * a scoped constraint, not a read-only task.\n */\n\nconst REVIEW_ONLY_PATTERNS = [\n\t/\\breview only\\b/i,\n\t/\\bsuggest fixes only\\b/i,\n\t/\\bonly return findings\\b/i,\n\t/\\breturn findings only\\b/i,\n];\n\nconst REVIEWER_REQUIRED_EDIT_PATTERNS = [\n\t/\\bmust\\s+(?:edit|modify|change|fix|patch|apply)\\b/i,\n\t/\\brequired\\s+to\\s+(?:edit|modify|change|fix|patch|apply)\\b/i,\n\t/\\bregardless\\s+of\\s+findings\\b/i,\n\t/\\balways\\s+(?:edit|modify|change|fix|patch|apply)\\b/i,\n\t/\\bapply\\s+(?:the\\s+)?fix(?:es)?\\s+directly\\b/i,\n\t/\\bmake\\s+(?:the\\s+)?code\\s+changes\\b/i,\n];\n\n// The prohibition's object ends at punctuation or at a coordinating word\n// (but/and/then), so a follow-on clause like \"but implement the fix\" stays in\n// the text for write-intent testing instead of being swallowed as the object.\nconst NO_EDIT_PROHIBITION_PATTERN = /\\b(?:do not|don't|must not)\\s+(?:edit|modify|write(?:\\s+to)?|touch|change)\\b((?:(?!\\b(?:but|and|then)\\b)[^.;,:!?\\n–—-])*)/gi;\n\n/** Objects of a no-edit prohibition that mean \"the codebase in general\" rather than a named scope. */\nconst GENERIC_PROHIBITION_OBJECT = /^\\s*(?:(?:any|all|the|these|those|your|our|existing|project|source|sources|repo|repository)[\\s/,-]*)*(?:files?|code|codebase|sources?|anything|repo(?:sitory)?)?\\s*$/i;\n\nconst SCOPED_NO_EDIT_CONSTRAINT_PATTERNS = [\n\t/\\bdo not edit files?\\s+outside\\b/i,\n\t/\\bdo not edit\\s+outside\\b/i,\n\t/\\bdo not edit\\s+unrelated files?\\b/i,\n\t/\\bdo not change\\s+unrelated files?\\b/i,\n\t/\\bdo not modify\\s+unrelated files?\\b/i,\n];\n\nconst NO_TOOL_INTENT_PATTERNS = [\n\t/\\bno tools? needed\\b/i,\n\t/\\bno tools? required\\b/i,\n\t/\\bwithout using tools\\b/i,\n\t/\\bdo not use tools\\b/i,\n\t/\\bdon't use tools\\b/i,\n];\n\nconst READ_ONLY_DELIVERABLE_PATTERNS = [\n\t/\\b(?:draft|write|compose|prepare|produce)\\s+(?:(?:a|an|the)\\s+)?(?:github\\s+)?(?:issue|bug report|issue draft|issue body|proposal|plan|report|summary|findings?|analysis|recommendations?)\\b/i,\n\t/\\b(?:issue|bug report)\\s+(?:draft|body|template)\\b/i,\n\t/\\b(?:return|provide|produce)\\s+(?:text|markdown|answer|findings?|recommendations?)\\s+only\\b/i,\n];\n\nconst RESEARCH_TASK_PATTERNS = [\n\t/\\binvestigate\\b/i,\n\t/\\bresearch\\b/i,\n];\n\nconst FIX_OR_PATCH_IMPLEMENTATION_PATTERN = /\\b(?:fix|patch)\\s+(?:(?:it|this|that|them|each|any|all|these|those)\\b|(?:(?:a|an|the|any|all)\\s+)?(?:(?:failing|failed|broken|flaky|red|cold|start|current|existing|reported|approved|known|regression|unit|integration|e2e|source|typescript|type-?script|ts|type-?check|compiler)\\s+)*(?:bug|defect|issues?|problems?|failures?|regressions?|tests?|errors?|items?|typos?|code|source|implementation|component|function|module|class|method|logic|file|files|readme|docs?|changelog|package\\.json|config|manifest|extension|prompt|command|lint(?:ing)?|build|ci|type-?check|type\\s+checking)\\b)/i;\n\nconst WORKER_IMPLEMENTATION_PATTERNS = [\n\t/\\b(?:implement|edit|modify|refactor|delete)\\b/i,\n\tFIX_OR_PATCH_IMPLEMENTATION_PATTERN,\n\t/\\b(?:update|add|remove|replace|create)\\b(?!\\s+(?:(?:a|an|the)\\s+)?(?:report|summary|findings?)(?:\\b|$))/i,\n\t/\\bapply\\s+(?:the\\s+)?(?:(?:suggested|proposed|recommended)\\s+)?(?:changes?|fix(?:es)?|patch)\\b/i,\n\t/\\bmake\\s+(?:the\\s+)?changes\\b/i,\n\t/\\bdo those fixes\\b/i,\n];\n\nconst GENERAL_IMPLEMENTATION_PATTERNS = [\n\t/\\b(?:implement|edit|modify|refactor)\\b/i,\n\tFIX_OR_PATCH_IMPLEMENTATION_PATTERN,\n\t/\\bapply\\s+(?:the\\s+)?(?:(?:suggested|proposed|recommended)\\s+)?(?:changes?|fix(?:es)?|patch)\\b/i,\n\t/\\bmake\\s+(?:the\\s+)?changes\\b/i,\n\t/\\bdo those fixes\\b/i,\n\t/\\b(?:update|add|remove|replace|delete|create)\\s+(?:the\\s+)?(?:file|files|code|source|implementation|test|tests|component|function|module|class|method|logic|import|imports|readme|docs?|changelog|package\\.json|config|manifest|extension|prompt|command)\\b/i,\n];\n\nexport type TaskMutationIntent = { kind: \"implementation\" } | { kind: \"read-only\" } | { kind: \"unknown\" };\n\nfunction stripFrameworkInstructions(task: string): string {\n\treturn task\n\t\t.split(\"\\n\")\n\t\t.filter((line) => !/^\\s*\\[(?:Write to|Read from):/i.test(line))\n\t\t.filter((line) => !/^\\s*(?:Create and maintain progress at:|Update progress at:|\\*\\*Output:\\*\\*|Write your findings to(?: exactly this path)?:|Return the complete artifact in your final response\\.|The runtime will persist it to exactly this path:|Do not call contact_supervisor merely because no write-capable tool is available\\.|This path is authoritative for this run\\.|Ignore any other output filename or output path mentioned elsewhere)/i.test(line))\n\t\t.join(\"\\n\");\n}\n\nfunction stripPatterns(task: string, patterns: RegExp[]): string {\n\tlet stripped = task;\n\tfor (const pattern of patterns) {\n\t\tconst flags = pattern.flags.includes(\"g\") ? pattern.flags : `${pattern.flags}g`;\n\t\tstripped = stripped.replace(new RegExp(pattern.source, flags), \" \");\n\t}\n\treturn stripped;\n}\n\ninterface NoEditProhibitionAnalysis {\n\t/** True when any prohibition (or review-only/no-tool wording) is present. */\n\tpresent: boolean;\n\t/** True when a prohibition covers files/code in general; such wording wins over write verbs. */\n\tblanket: boolean;\n\t/** Task text with prohibition phrases and their objects removed, for write-intent testing. */\n\tstrippedText: string;\n}\n\nfunction analyzeNoEditProhibitions(taskText: string): NoEditProhibitionAnalysis {\n\tlet present = REVIEW_ONLY_PATTERNS.some((pattern) => pattern.test(taskText))\n\t\t|| NO_TOOL_INTENT_PATTERNS.some((pattern) => pattern.test(taskText));\n\tlet blanket = present;\n\tlet strippedText = stripPatterns(taskText, [...REVIEW_ONLY_PATTERNS, ...NO_TOOL_INTENT_PATTERNS]);\n\tstrippedText = strippedText.replace(new RegExp(NO_EDIT_PROHIBITION_PATTERN.source, NO_EDIT_PROHIBITION_PATTERN.flags), (_match, object: string) => {\n\t\tpresent = true;\n\t\tif (GENERIC_PROHIBITION_OBJECT.test(object)) blanket = true;\n\t\treturn \" \";\n\t});\n\treturn { present, blanket, strippedText };\n}\n\nfunction taskHasReadOnlyDeliverable(taskText: string): boolean {\n\treturn READ_ONLY_DELIVERABLE_PATTERNS.some((pattern) => pattern.test(taskText));\n}\n\nfunction hasImplementationIntent(taskText: string): boolean {\n\treturn GENERAL_IMPLEMENTATION_PATTERNS.some((pattern) => pattern.test(taskText))\n\t\t|| WORKER_IMPLEMENTATION_PATTERNS.some((pattern) => pattern.test(taskText))\n\t\t|| REVIEWER_REQUIRED_EDIT_PATTERNS.some((pattern) => pattern.test(taskText));\n}\n\nfunction isReadOnlyPermission(permissionsOrLegacyName: string | undefined): boolean {\n\treturn permissionsOrLegacyName === \"read-only\";\n}\n\nexport function classifyTaskMutationIntent(permissionsOrLegacyName: string, task: string): TaskMutationIntent {\n\tif (isReadOnlyPermission(permissionsOrLegacyName)) return { kind: \"read-only\" };\n\tconst taskText = stripFrameworkInstructions(task);\n\tconst taskTextWithoutScopedConstraints = stripPatterns(taskText, SCOPED_NO_EDIT_CONSTRAINT_PATTERNS);\n\tconst prohibitions = analyzeNoEditProhibitions(taskTextWithoutScopedConstraints);\n\tif (prohibitions.present) {\n\t\tif (prohibitions.blanket) return { kind: \"read-only\" };\n\t\treturn hasImplementationIntent(prohibitions.strippedText) ? { kind: \"implementation\" } : { kind: \"read-only\" };\n\t}\n\n\tif (hasImplementationIntent(taskText)) return { kind: \"implementation\" };\n\tif (RESEARCH_TASK_PATTERNS.some((pattern) => pattern.test(taskText)) && !hasImplementationIntent(taskText)) {\n\t\treturn { kind: \"read-only\" };\n\t}\n\treturn taskHasReadOnlyDeliverable(taskTextWithoutScopedConstraints) ? { kind: \"read-only\" } : { kind: \"unknown\" };\n}\n\nexport function expectsImplementationMutation(permissionsOrLegacyName: string, task: string): boolean {\n\tif (isReadOnlyPermission(permissionsOrLegacyName)) return false;\n\treturn classifyTaskMutationIntent(permissionsOrLegacyName, task).kind === \"implementation\";\n}\n\n/** Bare write verbs that make a task write-capable for acceptance inference. */\nconst MAY_MUTATE_VERB_PATTERN = /\\b(?:fix|implement|update|write|edit|modify|migrate|delete|remove|refactor|commit)\\b/i;\n\n/**\n * Whether the task could plausibly change files. Blanket prohibitions win;\n * write verbs inside a scoped prohibition's object or a read-only deliverable\n * phrase (\"write a summary report\") do not count; any other bare write verb\n * does.\n */\nexport function taskMayMutate(task: string): boolean {\n\tconst taskText = stripPatterns(stripFrameworkInstructions(task), SCOPED_NO_EDIT_CONSTRAINT_PATTERNS);\n\tconst prohibitions = analyzeNoEditProhibitions(taskText);\n\tif (prohibitions.blanket) return false;\n\treturn MAY_MUTATE_VERB_PATTERN.test(stripPatterns(prohibitions.strippedText, READ_ONLY_DELIVERABLE_PATTERNS));\n}\n"]}
|
|
1
|
+
{"version":3,"file":"task-intent.js","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/shared/task-intent.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\n/**\n * Shared task mutation-intent classifier.\n *\n * Single authority for reading a task's wording, answering two different\n * questions from one prohibition analysis:\n *\n * - `classifyTaskMutationIntent` / `expectsImplementationMutation`: does the\n * task REQUIRE file changes? Consumed by the completion mutation guard,\n * which blocks completion, so its vocabulary is deliberately narrow.\n * - `taskMayMutate`: COULD the task plausibly change files? Consumed by\n * acceptance level inference, which only raises evidence gates, so its\n * vocabulary is deliberately broad (any bare write verb).\n *\n * Explicit read-only wording (\"do not modify\", \"review only\") is a task-level\n * intent only when no write imperative survives outside those phrases. A task\n * like \"Do not modify tests; implement the fix\" is an implementation task with\n * a scoped constraint, not a read-only task.\n */\n\nconst REVIEW_ONLY_PATTERNS = [\n\t/\\breview only\\b/i,\n\t/\\bsuggest fixes only\\b/i,\n\t/\\bonly return findings\\b/i,\n\t/\\breturn findings only\\b/i,\n];\n\nconst REVIEWER_REQUIRED_EDIT_PATTERNS = [\n\t/\\bmust\\s+(?:edit|modify|change|fix|patch|apply)\\b/i,\n\t/\\brequired\\s+to\\s+(?:edit|modify|change|fix|patch|apply)\\b/i,\n\t/\\bregardless\\s+of\\s+findings\\b/i,\n\t/\\balways\\s+(?:edit|modify|change|fix|patch|apply)\\b/i,\n\t/\\bapply\\s+(?:the\\s+)?fix(?:es)?\\s+directly\\b/i,\n\t/\\bmake\\s+(?:the\\s+)?code\\s+changes\\b/i,\n];\n\n// The prohibition's object ends at punctuation or at a coordinating word\n// (but/and/then), so a follow-on clause like \"but implement the fix\" stays in\n// the text for write-intent testing instead of being swallowed as the object.\nconst NO_EDIT_PROHIBITION_PATTERN = /\\b(?:do not|don't|must not)\\s+(?:implement|edit|modify|write(?:\\s+to)?|touch|change)\\b((?:(?!\\b(?:but|and|then)\\b)[^.;,:!?\\n–—-])*)/gi;\n\n/** Objects of a no-edit prohibition that mean \"the codebase in general\" rather than a named scope. */\nconst GENERIC_PROHIBITION_OBJECT = /^\\s*(?:(?:any|all|the|these|those|your|our|existing|project|source|sources|repo|repository)[\\s/,-]*)*(?:files?|code|codebase|sources?|anything|repo(?:sitory)?)?\\s*$/i;\n\nconst SCOPED_NO_EDIT_CONSTRAINT_PATTERNS = [\n\t/\\bdo not edit files?\\s+outside\\b/i,\n\t/\\bdo not edit\\s+outside\\b/i,\n\t/\\bdo not edit\\s+unrelated files?\\b/i,\n\t/\\bdo not change\\s+unrelated files?\\b/i,\n\t/\\bdo not modify\\s+unrelated files?\\b/i,\n];\n\nconst NO_TOOL_INTENT_PATTERNS = [\n\t/\\bno tools? needed\\b/i,\n\t/\\bno tools? required\\b/i,\n\t/\\bwithout using tools\\b/i,\n\t/\\bdo not use tools\\b/i,\n\t/\\bdon't use tools\\b/i,\n];\n\nconst READ_ONLY_DELIVERABLE_PATTERNS = [\n\t/\\b(?:draft|write|compose|prepare|produce)\\s+(?:(?:a|an|the)\\s+)?(?:github\\s+)?(?:issue|bug report|issue draft|issue body|proposal|plan|report|summary|findings?|analysis|recommendations?)\\b/i,\n\t/\\b(?:issue|bug report)\\s+(?:draft|body|template)\\b/i,\n\t/\\b(?:return|provide|produce)\\s+(?:text|markdown|answer|findings?|recommendations?)\\s+only\\b/i,\n];\n\nconst RESEARCH_TASK_PATTERNS = [\n\t/\\binvestigate\\b/i,\n\t/\\bresearch\\b/i,\n];\n\nconst FIX_OR_PATCH_IMPLEMENTATION_PATTERN = /\\b(?:fix|patch)\\s+(?:(?:it|this|that|them|each|any|all|these|those)\\b|(?:(?:a|an|the|any|all)\\s+)?(?:(?:failing|failed|broken|flaky|red|cold|start|current|existing|reported|approved|known|regression|unit|integration|e2e|source|typescript|type-?script|ts|type-?check|compiler)\\s+)*(?:bug|defect|issues?|problems?|failures?|regressions?|tests?|errors?|items?|typos?|code|source|implementation|component|function|module|class|method|logic|file|files|readme|docs?|changelog|package\\.json|config|manifest|extension|prompt|command|lint(?:ing)?|build|ci|type-?check|type\\s+checking)\\b)/i;\n\nconst WORKER_IMPLEMENTATION_PATTERNS = [\n\t/\\b(?:implement|edit|modify|refactor|delete)\\b/i,\n\tFIX_OR_PATCH_IMPLEMENTATION_PATTERN,\n\t/\\b(?:update|add|remove|replace|create)\\b(?!\\s+(?:(?:a|an|the)\\s+)?(?:report|summary|findings?)(?:\\b|$))/i,\n\t/\\bapply\\s+(?:the\\s+)?(?:(?:suggested|proposed|recommended)\\s+)?(?:changes?|fix(?:es)?|patch)\\b/i,\n\t/\\bmake\\s+(?:the\\s+)?changes\\b/i,\n\t/\\bdo those fixes\\b/i,\n];\n\nconst GENERAL_IMPLEMENTATION_PATTERNS = [\n\t/\\b(?:implement|edit|modify|refactor)\\b/i,\n\tFIX_OR_PATCH_IMPLEMENTATION_PATTERN,\n\t/\\bapply\\s+(?:the\\s+)?(?:(?:suggested|proposed|recommended)\\s+)?(?:changes?|fix(?:es)?|patch)\\b/i,\n\t/\\bmake\\s+(?:the\\s+)?changes\\b/i,\n\t/\\bdo those fixes\\b/i,\n\t/\\b(?:update|add|remove|replace|delete|create)\\s+(?:the\\s+)?(?:file|files|code|source|implementation|test|tests|component|function|module|class|method|logic|import|imports|readme|docs?|changelog|package\\.json|config|manifest|extension|prompt|command)\\b/i,\n];\n\nexport type TaskMutationIntent = { kind: \"implementation\" } | { kind: \"read-only\" } | { kind: \"unknown\" };\n\nfunction stripFrameworkInstructions(task: string): string {\n\treturn task\n\t\t.split(\"\\n\")\n\t\t.filter((line) => !/^\\s*\\[(?:Write to|Read from):/i.test(line))\n\t\t.filter((line) => !/^\\s*(?:Create and maintain progress at:|Update progress at:|\\*\\*Output:\\*\\*|Write your findings to(?: exactly this path)?:|Return the complete artifact in your final response\\.|The runtime will persist it to exactly this path:|Do not call contact_supervisor merely because no write-capable tool is available\\.|This path is authoritative for this run\\.|Ignore any other output filename or output path mentioned elsewhere)/i.test(line))\n\t\t.join(\"\\n\");\n}\n\nfunction stripPatterns(task: string, patterns: RegExp[]): string {\n\tlet stripped = task;\n\tfor (const pattern of patterns) {\n\t\tconst flags = pattern.flags.includes(\"g\") ? pattern.flags : `${pattern.flags}g`;\n\t\tstripped = stripped.replace(new RegExp(pattern.source, flags), \" \");\n\t}\n\treturn stripped;\n}\n\ninterface NoEditProhibitionAnalysis {\n\t/** True when any prohibition (or review-only/no-tool wording) is present. */\n\tpresent: boolean;\n\t/** True when a prohibition covers files/code in general; such wording wins over write verbs. */\n\tblanket: boolean;\n\t/** Task text with prohibition phrases and their objects removed, for write-intent testing. */\n\tstrippedText: string;\n}\n\nfunction analyzeNoEditProhibitions(taskText: string): NoEditProhibitionAnalysis {\n\tlet present = REVIEW_ONLY_PATTERNS.some((pattern) => pattern.test(taskText))\n\t\t|| NO_TOOL_INTENT_PATTERNS.some((pattern) => pattern.test(taskText));\n\tlet blanket = present;\n\tlet strippedText = stripPatterns(taskText, [...REVIEW_ONLY_PATTERNS, ...NO_TOOL_INTENT_PATTERNS]);\n\tstrippedText = strippedText.replace(new RegExp(NO_EDIT_PROHIBITION_PATTERN.source, NO_EDIT_PROHIBITION_PATTERN.flags), (_match, object: string) => {\n\t\tpresent = true;\n\t\tif (GENERIC_PROHIBITION_OBJECT.test(object)) blanket = true;\n\t\treturn \" \";\n\t});\n\treturn { present, blanket, strippedText };\n}\n\nfunction taskHasReadOnlyDeliverable(taskText: string): boolean {\n\treturn READ_ONLY_DELIVERABLE_PATTERNS.some((pattern) => pattern.test(taskText));\n}\n\nfunction hasImplementationIntent(taskText: string): boolean {\n\treturn GENERAL_IMPLEMENTATION_PATTERNS.some((pattern) => pattern.test(taskText))\n\t\t|| WORKER_IMPLEMENTATION_PATTERNS.some((pattern) => pattern.test(taskText))\n\t\t|| REVIEWER_REQUIRED_EDIT_PATTERNS.some((pattern) => pattern.test(taskText));\n}\n\nexport function classifyTaskMutationIntent(permissions: \"full\" | \"read-only\", task: string): TaskMutationIntent {\n\tif (permissions === \"read-only\") return { kind: \"read-only\" };\n\tconst taskText = stripFrameworkInstructions(task);\n\tconst taskTextWithoutScopedConstraints = stripPatterns(taskText, SCOPED_NO_EDIT_CONSTRAINT_PATTERNS);\n\tconst prohibitions = analyzeNoEditProhibitions(taskTextWithoutScopedConstraints);\n\tif (prohibitions.present) {\n\t\tif (prohibitions.blanket) return { kind: \"read-only\" };\n\t\treturn hasImplementationIntent(prohibitions.strippedText) ? { kind: \"implementation\" } : { kind: \"read-only\" };\n\t}\n\n\tif (hasImplementationIntent(taskText)) return { kind: \"implementation\" };\n\tif (RESEARCH_TASK_PATTERNS.some((pattern) => pattern.test(taskText)) && !hasImplementationIntent(taskText)) {\n\t\treturn { kind: \"read-only\" };\n\t}\n\treturn taskHasReadOnlyDeliverable(taskTextWithoutScopedConstraints) ? { kind: \"read-only\" } : { kind: \"unknown\" };\n}\n\nexport function expectsImplementationMutation(permissions: \"full\" | \"read-only\", task: string): boolean {\n\treturn classifyTaskMutationIntent(permissions, task).kind === \"implementation\";\n}\n\n/** Bare write verbs that make a task write-capable for acceptance inference. */\nconst MAY_MUTATE_VERB_PATTERN = /\\b(?:fix|implement|update|write|edit|modify|migrate|delete|remove|refactor|commit)\\b/i;\n\n/**\n * Whether the task could plausibly change files. Blanket prohibitions win;\n * write verbs inside a scoped prohibition's object or a read-only deliverable\n * phrase (\"write a summary report\") do not count; any other bare write verb\n * does.\n */\nexport function taskMayMutate(task: string): boolean {\n\tconst taskText = stripPatterns(stripFrameworkInstructions(task), SCOPED_NO_EDIT_CONSTRAINT_PATTERNS);\n\tconst prohibitions = analyzeNoEditProhibitions(taskText);\n\tif (prohibitions.blanket) return false;\n\treturn MAY_MUTATE_VERB_PATTERN.test(stripPatterns(prohibitions.strippedText, READ_ONLY_DELIVERABLE_PATTERNS));\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const SUBAGENT_ASYNC_GUIDANCE = "Subagents run async by default. Set async:false when you need the result immediately and have no independent work to do, or need an interactive preview. Otherwise continue independent work or yield for normal interactive completion. Use subagent_wait for same-turn or skill completion. Headless sessions auto-drain current-session work. Use status for one-time inspection. Do not poll or sleep to wait.";
|
|
2
|
+
//# sourceMappingURL=async-guidance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-guidance.d.ts","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/shared/async-guidance.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,uBAAuB,uZAAuZ,CAAC","sourcesContent":["// @ts-nocheck\nexport const SUBAGENT_ASYNC_GUIDANCE = \"Subagents run async by default. Set async:false when you need the result immediately and have no independent work to do, or need an interactive preview. Otherwise continue independent work or yield for normal interactive completion. Use subagent_wait for same-turn or skill completion. Headless sessions auto-drain current-session work. Use status for one-time inspection. Do not poll or sleep to wait.\";\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
export const SUBAGENT_ASYNC_GUIDANCE = "Subagents run async by default. Set async:false when you need the result immediately and have no independent work to do, or need an interactive preview. Otherwise continue independent work or yield for normal interactive completion. Use subagent_wait for same-turn or skill completion. Headless sessions auto-drain current-session work. Use status for one-time inspection. Do not poll or sleep to wait.";
|
|
3
|
+
//# sourceMappingURL=async-guidance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-guidance.js","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/shared/async-guidance.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,MAAM,CAAC,MAAM,uBAAuB,GAAG,oZAAoZ,CAAC","sourcesContent":["// @ts-nocheck\nexport const SUBAGENT_ASYNC_GUIDANCE = \"Subagents run async by default. Set async:false when you need the result immediately and have no independent work to do, or need an interactive preview. Otherwise continue independent work or yield for normal interactive completion. Use subagent_wait for same-turn or skill completion. Headless sessions auto-drain current-session work. Use status for one-time inspection. Do not poll or sleep to wait.\";\n"]}
|
|
@@ -12,6 +12,7 @@ export interface DelegatedTaskInput {
|
|
|
12
12
|
permissions?: unknown;
|
|
13
13
|
model?: unknown;
|
|
14
14
|
tier?: unknown;
|
|
15
|
+
thinking?: unknown;
|
|
15
16
|
modelSelection?: unknown;
|
|
16
17
|
skill?: unknown;
|
|
17
18
|
cwd?: unknown;
|
|
@@ -35,6 +36,8 @@ export interface NormalizeChildSpecOptions {
|
|
|
35
36
|
defaultTask?: string;
|
|
36
37
|
fanoutAuthorized?: boolean;
|
|
37
38
|
pathLabel?: string;
|
|
39
|
+
/** When true, `model` is a previously resolved runtime id and must not be treated as a fresh user selection. */
|
|
40
|
+
resolvedModelIsRuntime?: boolean;
|
|
38
41
|
}
|
|
39
42
|
export declare function allocateChildId(runId: string, index: number): string;
|
|
40
43
|
export declare function sanitizeChildDescription(value: string, max?: number): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"child-spec.d.ts","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/shared/child-spec.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\n/**\n * Normalize model-authored delegated tasks into ChildSpec before validation,\n * rendering, persistence, or process spawning.\n */\n\nimport {\n\tPLAN_MODE_WRITE_SPAWN_ERROR,\n\tresolveChildPermissions,\n\ttype ChildPermission,\n} from \"../../../../core/subagent-permission-inherit.ts\";\nimport { resolveChildExcludeTools } from \"../runs/shared/child-tools.ts\";\nimport { captureModelSelection } from \"../runs/shared/model-fallback.ts\";\nimport type { AcceptanceInput, ChildSpec, ChildTier, JsonSchemaObject, ModelSelection, ToolBudgetConfig } from \"./types.ts\";\n\nexport type { ChildSpec, ChildTier, ModelSelection } from \"./types.ts\";\n\nexport const CHILD_DESCRIPTION_MAX_LENGTH = 80;\n\nexport interface DelegatedTaskInput {\n\ttask?: unknown;\n\tdescription?: unknown;\n\tpermissions?: unknown;\n\tmodel?: unknown;\n\ttier?: unknown;\n\tmodelSelection?: unknown;\n\tskill?: unknown;\n\tcwd?: unknown;\n\toutput?: unknown;\n\toutputMode?: unknown;\n\tacceptance?: unknown;\n\ttoolBudget?: unknown;\n\tcount?: unknown;\n\treads?: unknown;\n\tprogress?: unknown;\n\tlabel?: unknown;\n\tphase?: unknown;\n\tas?: unknown;\n\toutputSchema?: unknown;\n}\n\nexport interface NormalizeChildSpecOptions {\n\tparentMode?: string;\n\trunId: string;\n\tindex: number;\n\tchildId?: string;\n\tdefaultTask?: string;\n\tfanoutAuthorized?: boolean;\n\tpathLabel?: string;\n}\n\nexport function allocateChildId(runId: string, index: number): string {\n\treturn `${runId}-${index}`;\n}\n\nexport function sanitizeChildDescription(value: string, max = CHILD_DESCRIPTION_MAX_LENGTH): string {\n\tconst collapsed = value.replace(/\\s+/g, \" \").trim();\n\tif (collapsed.length <= max) return collapsed;\n\treturn `${collapsed.slice(0, Math.max(1, max - 1))}…`;\n}\n\nexport function validateChildDescription(value: unknown, pathLabel = \"description\"): string {\n\tif (typeof value !== \"string\") {\n\t\tthrow new Error(`${pathLabel} is required and must be a concise single-line label (max ${CHILD_DESCRIPTION_MAX_LENGTH} characters).`);\n\t}\n\tif (/[\\r\\n]/.test(value)) {\n\t\tthrow new Error(`${pathLabel} must be a single line with no newlines.`);\n\t}\n\tconst trimmed = value.trim();\n\tif (!trimmed) {\n\t\tthrow new Error(`${pathLabel} is required and must be a concise single-line label (max ${CHILD_DESCRIPTION_MAX_LENGTH} characters).`);\n\t}\n\tif (trimmed.length > CHILD_DESCRIPTION_MAX_LENGTH) {\n\t\tthrow new Error(`${pathLabel} must be at most ${CHILD_DESCRIPTION_MAX_LENGTH} characters.`);\n\t}\n\treturn trimmed;\n}\n\nexport function parseChildPermissionsInput(value: unknown, pathLabel = \"permissions\"): ChildPermission | undefined {\n\tif (value === undefined) return undefined;\n\tif (value === \"full\" || value === \"read-only\") return value;\n\tthrow new Error(`${pathLabel} must be \"full\" or \"read-only\".`);\n}\n\nfunction optionalString(value: unknown): string | undefined {\n\treturn typeof value === \"string\" && value.trim() ? value : undefined;\n}\n\nfunction optionalSkill(value: unknown): string | string[] | false | undefined {\n\tif (value === false) return false;\n\tif (typeof value === \"string\") return value;\n\tif (Array.isArray(value) && value.every((entry) => typeof entry === \"string\")) return value as string[];\n\treturn undefined;\n}\n\nfunction optionalOutput(value: unknown): string | false | undefined {\n\tif (value === false) return false;\n\tif (typeof value === \"string\") return value;\n\treturn undefined;\n}\n\nfunction optionalReads(value: unknown): string[] | false | undefined {\n\tif (value === false) return false;\n\tif (Array.isArray(value) && value.every((entry) => typeof entry === \"string\")) return value as string[];\n\treturn undefined;\n}\n\nfunction optionalCount(value: unknown): number | undefined {\n\tif (typeof value === \"number\" && Number.isInteger(value) && value >= 1) return value;\n\treturn undefined;\n}\n\nfunction isModelSelection(value: unknown): value is ModelSelection {\n\tif (!value || typeof value !== \"object\") return false;\n\tconst kind = (value as { kind?: unknown }).kind;\n\tif (kind === \"tier\") {\n\t\tconst tier = (value as { tier?: unknown }).tier;\n\t\treturn tier === \"light\" || tier === \"standard\" || tier === \"heavy\";\n\t}\n\treturn false;\n}\n\nexport function normalizeChildSpec(input: DelegatedTaskInput, options: NormalizeChildSpecOptions): ChildSpec {\n\tconst pathLabel = options.pathLabel ?? \"task\";\n\tconst description = validateChildDescription(input.description, `${pathLabel}.description`);\n\tconst task = typeof input.task === \"string\" && input.task.trim()\n\t\t? input.task\n\t\t: options.defaultTask;\n\tif (typeof task !== \"string\" || !task.trim()) {\n\t\tthrow new Error(`${pathLabel}.task is required.`);\n\t}\n\tconst requested = parseChildPermissionsInput(input.permissions, `${pathLabel}.permissions`);\n\tconst resolved = resolveChildPermissions(options.parentMode, requested);\n\tif (!resolved.ok) {\n\t\tthrow new Error(resolved.error || PLAN_MODE_WRITE_SPAWN_ERROR);\n\t}\n\tif (input.model !== undefined && !isModelSelection(input.modelSelection)) {\n\t\tthrow new Error(`${pathLabel}.model is not supported for executable children; choose tier: \"light\", \"standard\", or \"heavy\".`);\n\t}\n\tconst selectedTier = isModelSelection(input.modelSelection) ? input.modelSelection.tier : input.tier;\n\tif (selectedTier !== \"light\" && selectedTier !== \"standard\" && selectedTier !== \"heavy\") {\n\t\tthrow new Error(`${pathLabel}.tier is required and must be \"light\", \"standard\", or \"heavy\".`);\n\t}\n\tconst tier = selectedTier;\n\tconst outputMode = input.outputMode === \"inline\" || input.outputMode === \"file-only\" ? input.outputMode : undefined;\n\tconst modelSelection = isModelSelection(input.modelSelection)\n\t\t? input.modelSelection\n\t\t: captureModelSelection({ tier });\n\treturn {\n\t\tchildId: options.childId ?? allocateChildId(options.runId, options.index),\n\t\ttask,\n\t\tdescription,\n\t\trequestedPermissions: resolved.requested,\n\t\teffectivePermissions: resolved.effective,\n\t\tmodel: optionalString(input.model),\n\t\ttier,\n\t\tmodelSelection,\n\t\tskill: optionalSkill(input.skill),\n\t\tcwd: optionalString(input.cwd),\n\t\toutput: optionalOutput(input.output),\n\t\toutputMode,\n\t\tacceptance: input.acceptance as AcceptanceInput | undefined,\n\t\ttoolBudget: input.toolBudget as ToolBudgetConfig | undefined,\n\t\tcount: optionalCount(input.count),\n\t\treads: optionalReads(input.reads),\n\t\tprogress: typeof input.progress === \"boolean\" ? input.progress : undefined,\n\t\tlabel: optionalString(input.label),\n\t\tphase: optionalString(input.phase),\n\t\tas: optionalString(input.as),\n\t\toutputSchema: input.outputSchema && typeof input.outputSchema === \"object\"\n\t\t\t? input.outputSchema as JsonSchemaObject\n\t\t\t: undefined,\n\t\tfanoutAuthorized: options.fanoutAuthorized === true,\n\t};\n}\n\nexport function childDisplayLabel(spec: Pick<ChildSpec, \"description\" | \"label\">): string {\n\treturn spec.label?.trim() || spec.description;\n}\n\nexport function tryNormalizeChildSpec(\n\tinput: DelegatedTaskInput,\n\toptions: NormalizeChildSpecOptions,\n): { ok: true; spec: ChildSpec } | { ok: false; error: string } {\n\ttry {\n\t\treturn { ok: true, spec: normalizeChildSpec(input, options) };\n\t} catch (error) {\n\t\treturn { ok: false, error: error instanceof Error ? error.message : String(error) };\n\t}\n}\n\nexport function childIdentityFields(spec: ChildSpec): {\n\tchildId: string;\n\tdescription: string;\n\tpermissions: ChildPermission;\n\tagent: string;\n} {\n\treturn {\n\t\tchildId: spec.childId,\n\t\tdescription: spec.description,\n\t\tpermissions: spec.effectivePermissions,\n\t\tagent: spec.description,\n\t};\n}\n\nexport function childOutputCapabilities(permissions: ChildPermission): { tools: string[] } {\n\treturn permissions === \"read-only\"\n\t\t? { tools: [\"read\"] }\n\t\t: { tools: [\"read\", \"edit\", \"write\", \"bash\"] };\n}\n\nexport function childSpawnPiArgDefaults(spec: ChildSpec): {\n\tinheritProjectContext: true;\n\tinheritSkills: false;\n\tsystemPromptMode: \"append\";\n\texcludeTools: string[];\n\tchildPermission: ChildPermission;\n\tchildId: string;\n\tchildDescription: string;\n\tchildAgentName: string;\n} {\n\treturn {\n\t\tinheritProjectContext: true,\n\t\tinheritSkills: false,\n\t\tsystemPromptMode: \"append\",\n\t\texcludeTools: resolveChildExcludeTools({\n\t\t\tpermissions: spec.effectivePermissions,\n\t\t\tfanoutAuthorized: spec.fanoutAuthorized,\n\t\t}),\n\t\tchildPermission: spec.effectivePermissions,\n\t\tchildId: spec.childId,\n\t\tchildDescription: spec.description,\n\t\tchildAgentName: spec.childId,\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"child-spec.d.ts","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/shared/child-spec.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\n/**\n * Normalize model-authored delegated tasks into ChildSpec before validation,\n * rendering, persistence, or process spawning.\n */\n\nimport {\n\tPLAN_MODE_WRITE_SPAWN_ERROR,\n\tresolveChildPermissions,\n\ttype ChildPermission,\n} from \"../../../../core/subagent-permission-inherit.ts\";\nimport { resolveChildExcludeTools } from \"../runs/shared/child-tools.ts\";\nimport { captureModelSelection, INHERIT_MODEL } from \"../runs/shared/model-fallback.ts\";\nimport type { AcceptanceInput, ChildSpec, ChildTier, JsonSchemaObject, ModelSelection, ToolBudgetConfig } from \"./types.ts\";\nimport { THINKING_LEVELS } from \"./model-info.ts\";\n\nexport type { ChildSpec, ChildTier, ModelSelection } from \"./types.ts\";\n\nexport const CHILD_DESCRIPTION_MAX_LENGTH = 80;\n\nexport interface DelegatedTaskInput {\n\ttask?: unknown;\n\tdescription?: unknown;\n\tpermissions?: unknown;\n\tmodel?: unknown;\n\ttier?: unknown;\n\tthinking?: unknown;\n\tmodelSelection?: unknown;\n\tskill?: unknown;\n\tcwd?: unknown;\n\toutput?: unknown;\n\toutputMode?: unknown;\n\tacceptance?: unknown;\n\ttoolBudget?: unknown;\n\tcount?: unknown;\n\treads?: unknown;\n\tprogress?: unknown;\n\tlabel?: unknown;\n\tphase?: unknown;\n\tas?: unknown;\n\toutputSchema?: unknown;\n}\n\nexport interface NormalizeChildSpecOptions {\n\tparentMode?: string;\n\trunId: string;\n\tindex: number;\n\tchildId?: string;\n\tdefaultTask?: string;\n\tfanoutAuthorized?: boolean;\n\tpathLabel?: string;\n\t/** When true, `model` is a previously resolved runtime id and must not be treated as a fresh user selection. */\n\tresolvedModelIsRuntime?: boolean;\n}\n\nexport function allocateChildId(runId: string, index: number): string {\n\treturn `${runId}-${index}`;\n}\n\nexport function sanitizeChildDescription(value: string, max = CHILD_DESCRIPTION_MAX_LENGTH): string {\n\tconst collapsed = value.replace(/\\s+/g, \" \").trim();\n\tif (collapsed.length <= max) return collapsed;\n\treturn `${collapsed.slice(0, Math.max(1, max - 1))}…`;\n}\n\nexport function validateChildDescription(value: unknown, pathLabel = \"description\"): string {\n\tif (typeof value !== \"string\") {\n\t\tthrow new Error(`${pathLabel} is required and must be a concise single-line label (max ${CHILD_DESCRIPTION_MAX_LENGTH} characters).`);\n\t}\n\tif (/[\\r\\n]/.test(value)) {\n\t\tthrow new Error(`${pathLabel} must be a single line with no newlines.`);\n\t}\n\tconst trimmed = value.trim();\n\tif (!trimmed) {\n\t\tthrow new Error(`${pathLabel} is required and must be a concise single-line label (max ${CHILD_DESCRIPTION_MAX_LENGTH} characters).`);\n\t}\n\tif (trimmed.length > CHILD_DESCRIPTION_MAX_LENGTH) {\n\t\tthrow new Error(`${pathLabel} must be at most ${CHILD_DESCRIPTION_MAX_LENGTH} characters.`);\n\t}\n\treturn trimmed;\n}\n\nexport function parseChildPermissionsInput(value: unknown, pathLabel = \"permissions\"): ChildPermission | undefined {\n\tif (value === undefined) return undefined;\n\tif (value === \"full\" || value === \"read-only\") return value;\n\tthrow new Error(`${pathLabel} must be \"full\" or \"read-only\".`);\n}\n\nfunction optionalString(value: unknown): string | undefined {\n\treturn typeof value === \"string\" && value.trim() ? value : undefined;\n}\n\nfunction optionalSkill(value: unknown): string | string[] | false | undefined {\n\tif (value === false) return false;\n\tif (typeof value === \"string\") return value;\n\tif (Array.isArray(value) && value.every((entry) => typeof entry === \"string\")) return value as string[];\n\treturn undefined;\n}\n\nfunction optionalOutput(value: unknown): string | false | undefined {\n\tif (value === false) return false;\n\tif (typeof value === \"string\") return value;\n\treturn undefined;\n}\n\nfunction optionalReads(value: unknown): string[] | false | undefined {\n\tif (value === false) return false;\n\tif (Array.isArray(value) && value.every((entry) => typeof entry === \"string\")) return value as string[];\n\treturn undefined;\n}\n\nfunction optionalCount(value: unknown): number | undefined {\n\tif (typeof value === \"number\" && Number.isInteger(value) && value >= 1) return value;\n\treturn undefined;\n}\n\nfunction isModelSelection(value: unknown): value is ModelSelection {\n\tif (!value || typeof value !== \"object\") return false;\n\tconst kind = (value as { kind?: unknown }).kind;\n\tif (kind === \"model\") return true;\n\tif (kind === \"tier\") {\n\t\tconst tier = (value as { tier?: unknown }).tier;\n\t\treturn tier === \"light\" || tier === \"standard\" || tier === \"heavy\";\n\t}\n\treturn false;\n}\n\nfunction parseThinking(value: unknown, pathLabel: string): string | undefined {\n\tif (value === undefined) return undefined;\n\tif (value === false) return \"off\";\n\tif (typeof value === \"string\" && (THINKING_LEVELS as readonly string[]).includes(value)) return value;\n\tthrow new Error(`${pathLabel}.thinking must be one of ${THINKING_LEVELS.join(\", \")}.`);\n}\n\nexport function normalizeChildSpec(input: DelegatedTaskInput, options: NormalizeChildSpecOptions): ChildSpec {\n\tconst pathLabel = options.pathLabel ?? \"task\";\n\tconst description = validateChildDescription(input.description, `${pathLabel}.description`);\n\tconst task = typeof input.task === \"string\" && input.task.trim()\n\t\t? input.task\n\t\t: options.defaultTask;\n\tif (typeof task !== \"string\" || !task.trim()) {\n\t\tthrow new Error(`${pathLabel}.task is required.`);\n\t}\n\tconst requested = parseChildPermissionsInput(input.permissions, `${pathLabel}.permissions`);\n\tconst resolved = resolveChildPermissions(options.parentMode, requested);\n\tif (!resolved.ok) {\n\t\tthrow new Error(resolved.error || PLAN_MODE_WRITE_SPAWN_ERROR);\n\t}\n\n\tconst preservedSelection = isModelSelection(input.modelSelection) ? input.modelSelection : undefined;\n\tconst rawModel = optionalString(input.model);\n\tif (rawModel === INHERIT_MODEL) {\n\t\tthrow new Error(`${pathLabel}.model \"inherit\" is not supported; choose tier or an explicit provider/model.`);\n\t}\n\n\tlet modelSelection: ModelSelection;\n\tlet tier: ChildTier | undefined;\n\tlet model: string | undefined;\n\tlet thinking: string | undefined;\n\n\tif (preservedSelection) {\n\t\tmodelSelection = preservedSelection;\n\t\tif (modelSelection.kind === \"tier\") {\n\t\t\ttier = modelSelection.tier;\n\t\t\t// Runtime-resolved models from recovery must not become a fresh user model selection.\n\t\t\tmodel = undefined;\n\t\t\tif (input.thinking !== undefined) {\n\t\t\t\tthrow new Error(`${pathLabel}.thinking is only valid with an explicit model selection.`);\n\t\t\t}\n\t\t} else {\n\t\t\tmodel = rawModel ?? optionalString(modelSelection.model);\n\t\t\tif (!model) {\n\t\t\t\tthrow new Error(`${pathLabel}.model is required when modelSelection.kind is \"model\".`);\n\t\t\t}\n\t\t\tif (!modelSelection.model) modelSelection = { kind: \"model\", model };\n\t\t\tthinking = parseThinking(input.thinking, pathLabel);\n\t\t}\n\t} else if (options.resolvedModelIsRuntime) {\n\t\t// Resume/recovery without a stored selection: keep tier routing, ignore resolved model as selection.\n\t\tconst selectedTier = input.tier === \"light\" || input.tier === \"standard\" || input.tier === \"heavy\" ? input.tier : undefined;\n\t\tif (!selectedTier) {\n\t\t\tthrow new Error(`${pathLabel}.tier is required to resume a child without a stored modelSelection.`);\n\t\t}\n\t\tmodelSelection = { kind: \"tier\", tier: selectedTier };\n\t\ttier = selectedTier;\n\t\tmodel = undefined;\n\t} else {\n\t\tmodelSelection = captureModelSelection({ model: input.model, tier: input.tier });\n\t\tif (modelSelection.kind === \"tier\") {\n\t\t\ttier = modelSelection.tier;\n\t\t\tmodel = undefined;\n\t\t\tif (input.thinking !== undefined) {\n\t\t\t\tthrow new Error(`${pathLabel}.thinking is only valid with an explicit model selection.`);\n\t\t\t}\n\t\t} else {\n\t\t\tmodel = rawModel;\n\t\t\tif (!modelSelection.model && model) modelSelection = { kind: \"model\", model };\n\t\t\tthinking = parseThinking(input.thinking, pathLabel);\n\t\t}\n\t}\n\n\tconst outputMode = input.outputMode === \"inline\" || input.outputMode === \"file-only\" ? input.outputMode : undefined;\n\treturn {\n\t\tchildId: options.childId ?? allocateChildId(options.runId, options.index),\n\t\ttask,\n\t\tdescription,\n\t\trequestedPermissions: resolved.requested,\n\t\teffectivePermissions: resolved.effective,\n\t\tmodel,\n\t\ttier,\n\t\tmodelSelection,\n\t\tthinking,\n\t\tskill: optionalSkill(input.skill),\n\t\tcwd: optionalString(input.cwd),\n\t\toutput: optionalOutput(input.output),\n\t\toutputMode,\n\t\tacceptance: input.acceptance as AcceptanceInput | undefined,\n\t\ttoolBudget: input.toolBudget as ToolBudgetConfig | undefined,\n\t\tcount: optionalCount(input.count),\n\t\treads: optionalReads(input.reads),\n\t\tprogress: typeof input.progress === \"boolean\" ? input.progress : undefined,\n\t\tlabel: optionalString(input.label),\n\t\tphase: optionalString(input.phase),\n\t\tas: optionalString(input.as),\n\t\toutputSchema: input.outputSchema && typeof input.outputSchema === \"object\"\n\t\t\t? input.outputSchema as JsonSchemaObject\n\t\t\t: undefined,\n\t\tfanoutAuthorized: options.fanoutAuthorized === true,\n\t};\n}\n\nexport function childDisplayLabel(spec: Pick<ChildSpec, \"description\" | \"label\">): string {\n\treturn spec.label?.trim() || spec.description;\n}\n\nexport function tryNormalizeChildSpec(\n\tinput: DelegatedTaskInput,\n\toptions: NormalizeChildSpecOptions,\n): { ok: true; spec: ChildSpec } | { ok: false; error: string } {\n\ttry {\n\t\treturn { ok: true, spec: normalizeChildSpec(input, options) };\n\t} catch (error) {\n\t\treturn { ok: false, error: error instanceof Error ? error.message : String(error) };\n\t}\n}\n\nexport function childIdentityFields(spec: ChildSpec): {\n\tchildId: string;\n\tdescription: string;\n\tpermissions: ChildPermission;\n\tagent: string;\n} {\n\treturn {\n\t\tchildId: spec.childId,\n\t\tdescription: spec.description,\n\t\tpermissions: spec.effectivePermissions,\n\t\tagent: spec.description,\n\t};\n}\n\nexport function childOutputCapabilities(permissions: ChildPermission): { tools: string[] } {\n\treturn permissions === \"read-only\"\n\t\t? { tools: [\"read\"] }\n\t\t: { tools: [\"read\", \"edit\", \"write\", \"bash\"] };\n}\n\nexport function childSpawnPiArgDefaults(spec: ChildSpec): {\n\tinheritProjectContext: true;\n\tinheritSkills: false;\n\tsystemPromptMode: \"append\";\n\texcludeTools: string[];\n\tchildPermission: ChildPermission;\n\tchildId: string;\n\tchildDescription: string;\n\tchildAgentName: string;\n} {\n\treturn {\n\t\tinheritProjectContext: true,\n\t\tinheritSkills: false,\n\t\tsystemPromptMode: \"append\",\n\t\texcludeTools: resolveChildExcludeTools({\n\t\t\tpermissions: spec.effectivePermissions,\n\t\t\tfanoutAuthorized: spec.fanoutAuthorized,\n\t\t}),\n\t\tchildPermission: spec.effectivePermissions,\n\t\tchildId: spec.childId,\n\t\tchildDescription: spec.description,\n\t\tchildAgentName: spec.childId,\n\t};\n}\n"]}
|
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { PLAN_MODE_WRITE_SPAWN_ERROR, resolveChildPermissions, } from "../../../../core/subagent-permission-inherit.js";
|
|
7
7
|
import { resolveChildExcludeTools } from "../runs/shared/child-tools.js";
|
|
8
|
-
import { captureModelSelection } from "../runs/shared/model-fallback.js";
|
|
8
|
+
import { captureModelSelection, INHERIT_MODEL } from "../runs/shared/model-fallback.js";
|
|
9
|
+
import { THINKING_LEVELS } from "./model-info.js";
|
|
9
10
|
export const CHILD_DESCRIPTION_MAX_LENGTH = 80;
|
|
10
11
|
export function allocateChildId(runId, index) {
|
|
11
12
|
return `${runId}-${index}`;
|
|
@@ -74,12 +75,23 @@ function isModelSelection(value) {
|
|
|
74
75
|
if (!value || typeof value !== "object")
|
|
75
76
|
return false;
|
|
76
77
|
const kind = value.kind;
|
|
78
|
+
if (kind === "model")
|
|
79
|
+
return true;
|
|
77
80
|
if (kind === "tier") {
|
|
78
81
|
const tier = value.tier;
|
|
79
82
|
return tier === "light" || tier === "standard" || tier === "heavy";
|
|
80
83
|
}
|
|
81
84
|
return false;
|
|
82
85
|
}
|
|
86
|
+
function parseThinking(value, pathLabel) {
|
|
87
|
+
if (value === undefined)
|
|
88
|
+
return undefined;
|
|
89
|
+
if (value === false)
|
|
90
|
+
return "off";
|
|
91
|
+
if (typeof value === "string" && THINKING_LEVELS.includes(value))
|
|
92
|
+
return value;
|
|
93
|
+
throw new Error(`${pathLabel}.thinking must be one of ${THINKING_LEVELS.join(", ")}.`);
|
|
94
|
+
}
|
|
83
95
|
export function normalizeChildSpec(input, options) {
|
|
84
96
|
const pathLabel = options.pathLabel ?? "task";
|
|
85
97
|
const description = validateChildDescription(input.description, `${pathLabel}.description`);
|
|
@@ -94,27 +106,72 @@ export function normalizeChildSpec(input, options) {
|
|
|
94
106
|
if (!resolved.ok) {
|
|
95
107
|
throw new Error(resolved.error || PLAN_MODE_WRITE_SPAWN_ERROR);
|
|
96
108
|
}
|
|
97
|
-
|
|
98
|
-
|
|
109
|
+
const preservedSelection = isModelSelection(input.modelSelection) ? input.modelSelection : undefined;
|
|
110
|
+
const rawModel = optionalString(input.model);
|
|
111
|
+
if (rawModel === INHERIT_MODEL) {
|
|
112
|
+
throw new Error(`${pathLabel}.model "inherit" is not supported; choose tier or an explicit provider/model.`);
|
|
113
|
+
}
|
|
114
|
+
let modelSelection;
|
|
115
|
+
let tier;
|
|
116
|
+
let model;
|
|
117
|
+
let thinking;
|
|
118
|
+
if (preservedSelection) {
|
|
119
|
+
modelSelection = preservedSelection;
|
|
120
|
+
if (modelSelection.kind === "tier") {
|
|
121
|
+
tier = modelSelection.tier;
|
|
122
|
+
// Runtime-resolved models from recovery must not become a fresh user model selection.
|
|
123
|
+
model = undefined;
|
|
124
|
+
if (input.thinking !== undefined) {
|
|
125
|
+
throw new Error(`${pathLabel}.thinking is only valid with an explicit model selection.`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
model = rawModel ?? optionalString(modelSelection.model);
|
|
130
|
+
if (!model) {
|
|
131
|
+
throw new Error(`${pathLabel}.model is required when modelSelection.kind is "model".`);
|
|
132
|
+
}
|
|
133
|
+
if (!modelSelection.model)
|
|
134
|
+
modelSelection = { kind: "model", model };
|
|
135
|
+
thinking = parseThinking(input.thinking, pathLabel);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
else if (options.resolvedModelIsRuntime) {
|
|
139
|
+
// Resume/recovery without a stored selection: keep tier routing, ignore resolved model as selection.
|
|
140
|
+
const selectedTier = input.tier === "light" || input.tier === "standard" || input.tier === "heavy" ? input.tier : undefined;
|
|
141
|
+
if (!selectedTier) {
|
|
142
|
+
throw new Error(`${pathLabel}.tier is required to resume a child without a stored modelSelection.`);
|
|
143
|
+
}
|
|
144
|
+
modelSelection = { kind: "tier", tier: selectedTier };
|
|
145
|
+
tier = selectedTier;
|
|
146
|
+
model = undefined;
|
|
99
147
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
148
|
+
else {
|
|
149
|
+
modelSelection = captureModelSelection({ model: input.model, tier: input.tier });
|
|
150
|
+
if (modelSelection.kind === "tier") {
|
|
151
|
+
tier = modelSelection.tier;
|
|
152
|
+
model = undefined;
|
|
153
|
+
if (input.thinking !== undefined) {
|
|
154
|
+
throw new Error(`${pathLabel}.thinking is only valid with an explicit model selection.`);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
model = rawModel;
|
|
159
|
+
if (!modelSelection.model && model)
|
|
160
|
+
modelSelection = { kind: "model", model };
|
|
161
|
+
thinking = parseThinking(input.thinking, pathLabel);
|
|
162
|
+
}
|
|
103
163
|
}
|
|
104
|
-
const tier = selectedTier;
|
|
105
164
|
const outputMode = input.outputMode === "inline" || input.outputMode === "file-only" ? input.outputMode : undefined;
|
|
106
|
-
const modelSelection = isModelSelection(input.modelSelection)
|
|
107
|
-
? input.modelSelection
|
|
108
|
-
: captureModelSelection({ tier });
|
|
109
165
|
return {
|
|
110
166
|
childId: options.childId ?? allocateChildId(options.runId, options.index),
|
|
111
167
|
task,
|
|
112
168
|
description,
|
|
113
169
|
requestedPermissions: resolved.requested,
|
|
114
170
|
effectivePermissions: resolved.effective,
|
|
115
|
-
model
|
|
171
|
+
model,
|
|
116
172
|
tier,
|
|
117
173
|
modelSelection,
|
|
174
|
+
thinking,
|
|
118
175
|
skill: optionalSkill(input.skill),
|
|
119
176
|
cwd: optionalString(input.cwd),
|
|
120
177
|
output: optionalOutput(input.output),
|