@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":"register-main.d.ts","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/watchdog/register-main.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAA2B,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAO/G,OAAO,EAAE,mBAAmB,EAAE,KAAK,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAUhF,UAAU,2BAA2B;IACpC,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,MAAM,CAAC,EAAE,sBAAsB,CAAC;CAChC;AAuFD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,UAAU,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC,EAAE,GAAG,EAAE,gBAAgB,GAAG,MAAM,CA2C3H;AAgOD,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,GAAE,2BAAgC,GAAG,mBAAmB,CA0DrH","sourcesContent":["// @ts-nocheck\nimport type { ExtensionAPI, ExtensionCommandContext, ExtensionContext } from \"@ashx-j/lunr-dev\";\nimport { Text } from \"@ashx-j/lunr-tui\";\nimport { resolveEffectiveThinking, splitKnownThinkingSuffix, THINKING_LEVELS, type ThinkingLevel } from \"../shared/model-info.ts\";\nimport { SLASH_TEXT_RESULT_TYPE } from \"../shared/types.ts\";\nimport { recommendStrongWatchdogModel, resolveWatchdogModelInput, parseWatchdogThinkingInput } from \"./model-selection.ts\";\nimport { renderWatchdogWarning } from \"./render.ts\";\nimport { createMainWatchdogReview } from \"./review.ts\";\nimport { MainWatchdogRuntime, type WatchdogReviewFunction } from \"./runtime.ts\";\nimport { getWatchdogUserSettingsPath, writeUserWatchdogEnabled, writeWatchdogModelSettings } from \"./settings.ts\";\nimport {\n\tSUBAGENT_WATCHDOG_WARNING_TYPE,\n\ttype WatchdogRuntimeStatus,\n\ttype WatchdogWarning,\n\ttype WatchdogWarningDetails,\n} from \"./types.ts\";\nimport { createWatchdogWarningMessage } from \"./warning-format.ts\";\n\ninterface RegisterMainWatchdogOptions {\n\truntime?: MainWatchdogRuntime;\n\treview?: WatchdogReviewFunction;\n}\n\nfunction sendSlashText(pi: ExtensionAPI, text: string): void {\n\tpi.sendMessage({ customType: SLASH_TEXT_RESULT_TYPE, content: text, display: true });\n}\n\nfunction messageFromError(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction boolLabel(value: boolean): string {\n\treturn value ? \"on\" : \"off\";\n}\n\nfunction statusLabel(status: WatchdogRuntimeStatus): string {\n\treturn status.replaceAll(\"-\", \" \");\n}\n\nfunction sourceLine(source: { scope: string; path?: string; exists: boolean }): string {\n\tconst location = source.path ? ` ${source.path}` : \"\";\n\treturn `- ${source.scope}${location}: ${source.exists ? \"found\" : \"not found\"}`;\n}\n\nfunction currentSessionModelLine(ctx: ExtensionContext): string {\n\tconst model = ctx.model as { provider?: unknown; id?: unknown } | undefined;\n\tif (model && typeof model.provider === \"string\" && typeof model.id === \"string\") return `current session (${model.provider}/${model.id})`;\n\treturn \"current session (not configured)\";\n}\n\nfunction mainThinkingLine(snapshot: ReturnType<MainWatchdogRuntime[\"getSnapshot\"]>, ctx: ExtensionContext): string {\n\tconst configuredModel = snapshot.config.main.model;\n\tconst configuredThinking = snapshot.config.main.thinking;\n\tif (configuredModel) {\n\t\tconst effective = resolveEffectiveThinking(configuredModel, configuredThinking);\n\t\tif (effective) return effective;\n\t\treturn \"off (default for explicit watchdog model)\";\n\t}\n\tif (configuredThinking === false) return \"off\";\n\tif (configuredThinking !== undefined) return configuredThinking;\n\tconst currentThinking = (ctx as { thinkingLevel?: unknown }).thinkingLevel;\n\treturn typeof currentThinking === \"string\" ? `current session (${currentThinking})` : \"current session\";\n}\n\nfunction mainModelLine(snapshot: ReturnType<MainWatchdogRuntime[\"getSnapshot\"]>, ctx: ExtensionContext): string {\n\tif (snapshot.config.main.model) {\n\t\tconst source = snapshot.sessionModelOverride?.model ? \"session override\" : \"configured\";\n\t\treturn `Main model: ${splitKnownThinkingSuffix(snapshot.config.main.model).baseModel} (${source})`;\n\t}\n\treturn `Main model: ${currentSessionModelLine(ctx)}`;\n}\n\nfunction childrenLine(snapshot: ReturnType<MainWatchdogRuntime[\"getSnapshot\"]>): string {\n\tconst children = snapshot.config.children;\n\tconst model = children.model ? splitKnownThinkingSuffix(children.model).baseModel : \"current child session\";\n\tconst thinking = children.thinking === undefined ? \"current child session\" : children.thinking === false ? \"off\" : children.thinking;\n\tconst overrides = Object.entries(children.overrides);\n\tconst overrideText = overrides.length\n\t\t? ` · overrides ${overrides.map(([agent, override]) => {\n\t\t\tconst bits = [agent];\n\t\t\tif (override.enabled !== undefined) bits.push(boolLabel(override.enabled));\n\t\t\tif (override.model) bits.push(splitKnownThinkingSuffix(override.model).baseModel);\n\t\t\tif (override.thinking !== undefined) bits.push(`thinking ${override.thinking === false ? \"off\" : override.thinking}`);\n\t\t\treturn bits.join(\" \");\n\t\t}).join(\"; \")}`\n\t\t: \"\";\n\treturn `Children: ${boolLabel(snapshot.config.enabled && children.enabled)} · model ${model} · thinking ${thinking}${overrideText}`;\n}\n\nfunction recommendationLine(ctx: ExtensionContext): string {\n\ttry {\n\t\tconst recommendation = recommendStrongWatchdogModel(ctx);\n\t\treturn `Recommended strong watchdog: ${recommendation.model}:${recommendation.thinking} (${recommendation.label}, complementary reviewer)`;\n\t} catch (error) {\n\t\treturn `Recommended strong watchdog: unavailable (${messageFromError(error)})`;\n\t}\n}\n\nfunction lspLine(snapshot: ReturnType<MainWatchdogRuntime[\"getSnapshot\"]>): string {\n\tconst lsp = snapshot.lsp;\n\tconst provider = lsp.provider ? ` · ${lsp.provider}` : \"\";\n\tconst counts = lsp.diagnosticCount > 0 || lsp.freshDiagnosticCount > 0\n\t\t? ` · ${lsp.freshDiagnosticCount} new/${lsp.diagnosticCount} total`\n\t\t: \"\";\n\tconst message = lsp.message ? ` · ${lsp.message}` : \"\";\n\treturn `LSP diagnostics: ${lsp.enabled ? \"on\" : \"off\"} · ${lsp.status}${provider}${counts}${message}`;\n}\n\nexport function buildWatchdogStatus(snapshot: ReturnType<MainWatchdogRuntime[\"getSnapshot\"]>, ctx: ExtensionContext): string {\n\tconst lines = [\n\t\t\"Subagent watchdog\",\n\t\t`Main: ${boolLabel(snapshot.enabled)}${!snapshot.config.enabled && snapshot.sessionOverride === undefined ? \" (default off)\" : \"\"}`,\n\t\t`Runtime: ${statusLabel(snapshot.status)}${snapshot.bufferedDeltas > 0 ? ` · buffered deltas ${snapshot.bufferedDeltas}` : \"\"}`,\n\t\t`Review trigger: ${snapshot.reviewTrigger === \"repo-edits\" ? \"repo edits only\" : \"every non-empty turn delta\"}`,\n\t\tlspLine(snapshot),\n\t\t`Session override: ${snapshot.sessionOverride === undefined ? \"none\" : boolLabel(snapshot.sessionOverride)}`,\n\t\tmainModelLine(snapshot, ctx),\n\t\t`Main thinking: ${mainThinkingLine(snapshot, ctx)}`,\n\t\tchildrenLine(snapshot),\n\t\trecommendationLine(ctx),\n\t\t`Agent-end timeout: ${snapshot.config.agentEndTimeoutMs}ms`,\n\t\t`Auto-follow: not implemented${snapshot.autoFollowQueued ? \" (queued)\" : \"\"}`,\n\t\t`Review model call: ${snapshot.reviewDescription}`,\n\t];\n\tif (snapshot.failedReviews > 0) lines.push(`Failed reviews: ${snapshot.failedReviews}`);\n\tif (snapshot.staleReviews > 0) lines.push(`Stale reviews: ${snapshot.staleReviews}`);\n\tif (snapshot.changedPaths?.length) {\n\t\tlines.push(`Changed paths: ${snapshot.changedPaths.slice(0, 8).join(\", \")}${snapshot.changedPaths.length > 8 ? `, +${snapshot.changedPaths.length - 8} more` : \"\"}`);\n\t}\n\tif (snapshot.lastWarning) {\n\t\tlines.push(`Last warning: ${snapshot.lastWarning.severity} · ${snapshot.lastWarning.state ?? \"candidate\"} · ${snapshot.lastWarning.summary}`);\n\t}\n\tif (snapshot.lastError) lines.push(`Last error: ${snapshot.lastError}`);\n\tif (!snapshot.configOk) {\n\t\tlines.push(\"\", \"Config errors:\", ...snapshot.errors.map((error) => `- ${error.message}`), \"Watchdog is disabled until the config is fixed.\");\n\t} else {\n\t\tlines.push(\"\", \"Config: ok\");\n\t}\n\tlines.push(\n\t\t\"Sources:\",\n\t\t...snapshot.sources.map(sourceLine),\n\t\t\"\",\n\t\t\"Model commands:\",\n\t\t\"- /subagents-watchdog recommend-model\",\n\t\t\"- /subagents-watchdog model recommended\",\n\t\t\"- /subagents-watchdog model <provider/model[:thinking]>\",\n\t\t\"- /subagents-watchdog model inherit\",\n\t\t\"- /subagents-watchdog session model recommended\",\n\t\t\"Agent action: subagent({ action: \\\"watchdog.configure\\\", model: \\\"recommended\\\", scope: \\\"session\\\" })\",\n\t);\n\treturn lines.join(\"\\n\");\n}\n\nfunction parseTestCommand(input: string): { severity: \"concern\" | \"blocker\"; text: string } | undefined {\n\tconst match = input.match(/^test\\s+(concern|blocker)\\s+([\\s\\S]+)$/);\n\tif (!match) return undefined;\n\treturn { severity: match[1] as \"concern\" | \"blocker\", text: match[2]!.trim() };\n}\n\nfunction formatThinking(value: ThinkingLevel | false | undefined): string {\n\tif (value === undefined) return \"inherit\";\n\treturn value === false ? \"off\" : value;\n}\n\nfunction parseThinkingCommand(raw: string): ThinkingLevel | false | null {\n\tconst value = raw.trim();\n\tif (value === \"inherit\") return null;\n\treturn parseWatchdogThinkingInput(value, \"/subagents-watchdog thinking\") ?? null;\n}\n\nfunction resolveModelCommandValue(ctx: ExtensionCommandContext, raw: string): { model: string | null; thinking: ThinkingLevel | false | null; description: string } {\n\tconst value = raw.trim();\n\tif (!value) throw new Error(\"Expected a model, 'recommended', or 'inherit'.\");\n\tif (value === \"inherit\") return { model: null, thinking: null, description: \"current session model and thinking\" };\n\tif (value === \"recommended\") {\n\t\tconst recommendation = recommendStrongWatchdogModel(ctx as ExtensionContext);\n\t\treturn {\n\t\t\tmodel: recommendation.model,\n\t\t\tthinking: recommendation.thinking,\n\t\t\tdescription: `${recommendation.model}:${recommendation.thinking} (${recommendation.label})`,\n\t\t};\n\t}\n\tconst resolved = resolveWatchdogModelInput(ctx as ExtensionContext, value);\n\treturn {\n\t\tmodel: resolved.model,\n\t\tthinking: resolved.thinking,\n\t\tdescription: `${resolved.model}${resolved.thinking ? `:${resolved.thinking}` : \"\"}`,\n\t};\n}\n\nfunction buildRecommendationText(ctx: ExtensionCommandContext): string {\n\tconst recommendation = recommendStrongWatchdogModel(ctx as ExtensionContext);\n\treturn [\n\t\t\"Subagent watchdog recommended model\",\n\t\t`Current session: ${currentSessionModelLine(ctx as ExtensionContext)}`,\n\t\t`Recommended: ${recommendation.model}:${recommendation.thinking}`,\n\t\t`Reason: ${recommendation.reason}`,\n\t\t\"\",\n\t\t\"Apply for this session:\",\n\t\t\"/subagents-watchdog session model recommended\",\n\t\t\"\",\n\t\t\"Save as your user default:\",\n\t\t\"/subagents-watchdog model recommended\",\n\t].join(\"\\n\");\n}\n\nfunction buildCheckText(runtime: MainWatchdogRuntime, ctx: ExtensionCommandContext): string {\n\tconst snapshot = runtime.getSnapshot(ctx.cwd);\n\tif (!snapshot.configOk) {\n\t\treturn [\"Subagent watchdog config check\", \"\", \"Config errors:\", ...snapshot.errors.map((error) => `- ${error.message}`)].join(\"\\n\");\n\t}\n\tconst lines = [\"Subagent watchdog config check\", \"\", \"Config: ok\"];\n\tif (snapshot.config.main.model) {\n\t\tconst resolved = resolveWatchdogModelInput(ctx as ExtensionContext, snapshot.config.main.model);\n\t\tlines.push(`Main model: ${resolved.model} auth ok`);\n\t} else {\n\t\tlines.push(`Main model: ${currentSessionModelLine(ctx as ExtensionContext)}`);\n\t}\n\tlines.push(`Main thinking: ${mainThinkingLine(snapshot, ctx as ExtensionContext)}`);\n\tlines.push(lspLine(snapshot));\n\ttry {\n\t\tconst recommendation = recommendStrongWatchdogModel(ctx as ExtensionContext);\n\t\tlines.push(`Recommended strong watchdog: ${recommendation.model}:${recommendation.thinking}`);\n\t} catch (error) {\n\t\tlines.push(`Recommended strong watchdog: unavailable (${messageFromError(error)})`);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nfunction createTestWarning(severity: \"concern\" | \"blocker\", text: string): WatchdogWarning {\n\treturn {\n\t\tseverity,\n\t\tcategory: \"other\",\n\t\tconfidence: \"high\",\n\t\tsource: \"main\",\n\t\tstate: \"displayed\",\n\t\tsummary: text,\n\t\tevidence: `Manual /subagents-watchdog test ${severity} message from the main session.`,\n\t\trecommendedAction: severity === \"blocker\"\n\t\t\t? \"Verify the renderer and transcript delivery; no automatic follow-up is queued in Gate 1B.\"\n\t\t\t: \"Verify the renderer and transcript delivery; decide manually whether any action is needed.\",\n\t};\n}\n\nasync function handleWatchdogCommand(\n\tpi: ExtensionAPI,\n\truntime: MainWatchdogRuntime,\n\targs: string,\n\tctx: ExtensionCommandContext,\n): Promise<void> {\n\tconst input = args.trim();\n\tif (!input || input === \"status\") {\n\t\tsendSlashText(pi, buildWatchdogStatus(runtime.getSnapshot(ctx.cwd), ctx));\n\t\treturn;\n\t}\n\tif (input === \"recommend-model\") {\n\t\ttry {\n\t\t\tsendSlashText(pi, buildRecommendationText(ctx));\n\t\t} catch (error) {\n\t\t\tsendSlashText(pi, `Subagent watchdog recommended model\\n\\n${messageFromError(error)}`);\n\t\t}\n\t\treturn;\n\t}\n\tif (input === \"check\") {\n\t\ttry {\n\t\t\tsendSlashText(pi, buildCheckText(runtime, ctx));\n\t\t} catch (error) {\n\t\t\tsendSlashText(pi, `Subagent watchdog config check\\n\\n${messageFromError(error)}`);\n\t\t}\n\t\treturn;\n\t}\n\tif (input === \"on\" || input === \"off\") {\n\t\tconst enabled = input === \"on\";\n\t\ttry {\n\t\t\tconst settingsPath = writeUserWatchdogEnabled(enabled);\n\t\t\tconst snapshot = runtime.getSnapshot(ctx.cwd);\n\t\t\tsendSlashText(pi, [\n\t\t\t\t`Subagent watchdog ${boolLabel(enabled)} saved to user settings.`,\n\t\t\t\t`Updated: ${settingsPath}`,\n\t\t\t\t`Main now: ${boolLabel(snapshot.enabled)}${snapshot.sessionOverride !== undefined ? ` (session override ${boolLabel(snapshot.sessionOverride)})` : \"\"}`,\n\t\t\t].join(\"\\n\"));\n\t\t} catch (error) {\n\t\t\tsendSlashText(pi, `Subagent watchdog\\n\\nCould not update ${getWatchdogUserSettingsPath()}: ${messageFromError(error)}`);\n\t\t}\n\t\treturn;\n\t}\n\tif (input === \"session on\" || input === \"session off\") {\n\t\tconst enabled = input.endsWith(\"on\");\n\t\tconst snapshot = runtime.setSessionEnabled(enabled, ctx.cwd);\n\t\tsendSlashText(pi, [\n\t\t\t`Subagent watchdog session override: ${boolLabel(enabled)}.`,\n\t\t\t\"No settings files were changed.\",\n\t\t\t\"\",\n\t\t\tbuildWatchdogStatus(snapshot, ctx),\n\t\t].join(\"\\n\"));\n\t\treturn;\n\t}\n\tif (input.startsWith(\"session model \")) {\n\t\tconst rawModel = input.slice(\"session model \".length);\n\t\ttry {\n\t\t\tconst value = resolveModelCommandValue(ctx, rawModel);\n\t\t\tconst snapshot = value.model === null\n\t\t\t\t? runtime.clearSessionModel(ctx.cwd)\n\t\t\t\t: runtime.setSessionModel({ model: value.model, thinking: value.thinking ?? null }, ctx.cwd);\n\t\t\tsendSlashText(pi, [\n\t\t\t\t`Subagent watchdog session model: ${value.description}.`,\n\t\t\t\t\"No settings files were changed.\",\n\t\t\t\t\"\",\n\t\t\t\tbuildWatchdogStatus(snapshot, ctx),\n\t\t\t].join(\"\\n\"));\n\t\t} catch (error) {\n\t\t\tsendSlashText(pi, `Subagent watchdog session model\\n\\n${messageFromError(error)}`);\n\t\t}\n\t\treturn;\n\t}\n\tif (input.startsWith(\"model \")) {\n\t\tconst rawModel = input.slice(\"model \".length);\n\t\ttry {\n\t\t\tconst value = resolveModelCommandValue(ctx, rawModel);\n\t\t\tconst settingsPath = writeWatchdogModelSettings({\n\t\t\t\tscope: \"user\",\n\t\t\t\ttarget: { kind: \"main\" },\n\t\t\t\tmodel: value.model,\n\t\t\t\tthinking: value.thinking,\n\t\t\t});\n\t\t\truntime.refreshConfig(ctx.cwd);\n\t\t\tconst snapshot = runtime.getSnapshot(ctx.cwd);\n\t\t\tsendSlashText(pi, [\n\t\t\t\t`Subagent watchdog model saved: ${value.description}.`,\n\t\t\t\t`Updated: ${settingsPath}`,\n\t\t\t\t`Main now: ${boolLabel(snapshot.enabled)}`,\n\t\t\t\tvalue.model === null ? \"The watchdog now inherits the current session model and thinking.\" : \"Run /subagents-watchdog on if the watchdog is still off.\",\n\t\t\t\t\"\",\n\t\t\t\tbuildWatchdogStatus(snapshot, ctx),\n\t\t\t].join(\"\\n\"));\n\t\t} catch (error) {\n\t\t\tsendSlashText(pi, `Subagent watchdog model\\n\\n${messageFromError(error)}\\nNo settings files were changed.`);\n\t\t}\n\t\treturn;\n\t}\n\tif (input.startsWith(\"thinking \")) {\n\t\tconst rawThinking = input.slice(\"thinking \".length);\n\t\ttry {\n\t\t\tconst thinking = parseThinkingCommand(rawThinking);\n\t\t\tconst settingsPath = writeWatchdogModelSettings({\n\t\t\t\tscope: \"user\",\n\t\t\t\ttarget: { kind: \"main\" },\n\t\t\t\tthinking,\n\t\t\t});\n\t\t\truntime.refreshConfig(ctx.cwd);\n\t\t\tsendSlashText(pi, [\n\t\t\t\t`Subagent watchdog thinking saved: ${formatThinking(thinking ?? undefined)}.`,\n\t\t\t\t`Updated: ${settingsPath}`,\n\t\t\t\t\"\",\n\t\t\t\tbuildWatchdogStatus(runtime.getSnapshot(ctx.cwd), ctx),\n\t\t\t].join(\"\\n\"));\n\t\t} catch (error) {\n\t\t\tsendSlashText(pi, `Subagent watchdog thinking\\n\\n${messageFromError(error)}\\nNo settings files were changed.`);\n\t\t}\n\t\treturn;\n\t}\n\tconst test = parseTestCommand(input);\n\tif (test) {\n\t\tif (!test.text) {\n\t\t\tctx.ui.notify(\"Usage: /subagents-watchdog test concern|blocker <text>\", \"error\");\n\t\t\treturn;\n\t\t}\n\t\tconst warning = createTestWarning(test.severity, test.text);\n\t\tconst details = runtime.recordDisplayedWarning(warning);\n\t\tpi.sendMessage(createWatchdogWarningMessage(details, { display: true, details }));\n\t\treturn;\n\t}\n\tctx.ui.notify(`Usage: /subagents-watchdog [status|on|off|session on|session off|recommend-model|model recommended|model <provider/model[:thinking]>|model inherit|thinking ${THINKING_LEVELS.join(\"|\")}|thinking inherit|session model recommended|check|test concern <text>|test blocker <text>]`, \"error\");\n}\n\nexport function registerMainWatchdog(pi: ExtensionAPI, options: RegisterMainWatchdogOptions = {}): MainWatchdogRuntime {\n\tlet currentContext: ExtensionContext | undefined;\n\tconst rememberContext = (ctx: ExtensionContext) => {\n\t\tcurrentContext = ctx;\n\t};\n\tconst runtime = options.runtime ?? new MainWatchdogRuntime({\n\t\treview: options.review ?? createMainWatchdogReview(() => currentContext, { getThinkingLevel: () => pi.getThinkingLevel() }),\n\t\treviewDescription: options.review ? \"injected seam\" : \"real model review\",\n\t\treviewChangesOnly: true,\n\t\tdisplayWarning: (details) => {\n\t\t\tpi.sendMessage(createWatchdogWarningMessage(details, { display: true, details }));\n\t\t},\n\t});\n\n\tpi.registerMessageRenderer<WatchdogWarningDetails>(SUBAGENT_WATCHDOG_WARNING_TYPE, (message, renderOptions, theme) => {\n\t\tconst details = message.details as WatchdogWarningDetails | undefined;\n\t\tif (!details?.summary || !details.evidence || !details.recommendedAction) {\n\t\t\tconst content = typeof message.content === \"string\"\n\t\t\t\t? message.content\n\t\t\t\t: message.content.filter((entry) => entry.type === \"text\").map((entry) => entry.text).join(\"\\n\");\n\t\t\treturn new Text(content, 0, 0);\n\t\t}\n\t\treturn renderWatchdogWarning(details, renderOptions, theme);\n\t});\n\n\tpi.registerCommand(\"subagents-watchdog\", {\n\t\tdescription: \"Show or toggle the default-off subagent watchdog\",\n\t\thandler: (args, ctx) => {\n\t\t\trememberContext(ctx);\n\t\t\treturn handleWatchdogCommand(pi, runtime, args, ctx);\n\t\t},\n\t});\n\n\tpi.on(\"session_start\", (_event, ctx) => {\n\t\trememberContext(ctx);\n\t\truntime.bindSession(ctx);\n\t});\n\tpi.on(\"before_agent_start\", (event, ctx) => {\n\t\trememberContext(ctx);\n\t\truntime.handleBeforeAgentStart(event, ctx);\n\t});\n\tpi.on(\"turn_end\", (event, ctx) => {\n\t\trememberContext(ctx);\n\t\truntime.handleTurnEnd(event, ctx);\n\t});\n\tpi.on(\"agent_end\", (event, ctx) => {\n\t\trememberContext(ctx);\n\t\treturn runtime.handleAgentEnd(event, ctx);\n\t});\n\tpi.on(\"session_before_switch\", () => runtime.reset(\"session switch\", { clearReviewInputSignature: true, clearLspLedger: true }));\n\tpi.on(\"session_before_fork\", () => runtime.reset(\"session fork\", { clearReviewInputSignature: true, clearLspLedger: true }));\n\tpi.on(\"session_compact\", () => runtime.reset(\"session compact\"));\n\tpi.on(\"session_shutdown\", () => {\n\t\tcurrentContext = undefined;\n\t\truntime.dispose();\n\t});\n\n\treturn runtime;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"register-main.d.ts","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/watchdog/register-main.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAA2B,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAO/G,OAAO,EAAE,mBAAmB,EAAE,KAAK,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAUhF,UAAU,2BAA2B;IACpC,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,MAAM,CAAC,EAAE,sBAAsB,CAAC;CAChC;AAuFD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,UAAU,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC,EAAE,GAAG,EAAE,gBAAgB,GAAG,MAAM,CA2C3H;AAgOD,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,GAAE,2BAAgC,GAAG,mBAAmB,CA0DrH","sourcesContent":["// @ts-nocheck\nimport type { ExtensionAPI, ExtensionCommandContext, ExtensionContext } from \"@ashx-j/lunr-dev\";\nimport { Text } from \"@ashx-j/lunr-tui\";\nimport { resolveEffectiveThinking, splitKnownThinkingSuffix, THINKING_LEVELS, type ThinkingLevel } from \"../shared/model-info.ts\";\nimport { SLASH_TEXT_RESULT_TYPE } from \"../shared/types.ts\";\nimport { recommendStrongWatchdogModel, resolveWatchdogModelInput, parseWatchdogThinkingInput } from \"./model-selection.ts\";\nimport { renderWatchdogWarning } from \"./render.ts\";\nimport { createMainWatchdogReview } from \"./review.ts\";\nimport { MainWatchdogRuntime, type WatchdogReviewFunction } from \"./runtime.ts\";\nimport { getWatchdogUserSettingsPath, writeUserWatchdogEnabled, writeWatchdogModelSettings } from \"./settings.ts\";\nimport {\n\tSUBAGENT_WATCHDOG_WARNING_TYPE,\n\ttype WatchdogRuntimeStatus,\n\ttype WatchdogWarning,\n\ttype WatchdogWarningDetails,\n} from \"./types.ts\";\nimport { createWatchdogWarningMessage } from \"./warning-format.ts\";\n\ninterface RegisterMainWatchdogOptions {\n\truntime?: MainWatchdogRuntime;\n\treview?: WatchdogReviewFunction;\n}\n\nfunction sendSlashText(pi: ExtensionAPI, text: string): void {\n\tpi.sendMessage({ customType: SLASH_TEXT_RESULT_TYPE, content: text, display: true });\n}\n\nfunction messageFromError(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction boolLabel(value: boolean): string {\n\treturn value ? \"on\" : \"off\";\n}\n\nfunction statusLabel(status: WatchdogRuntimeStatus): string {\n\treturn status.replaceAll(\"-\", \" \");\n}\n\nfunction sourceLine(source: { scope: string; path?: string; exists: boolean }): string {\n\tconst location = source.path ? ` ${source.path}` : \"\";\n\treturn `- ${source.scope}${location}: ${source.exists ? \"found\" : \"not found\"}`;\n}\n\nfunction currentSessionModelLine(ctx: ExtensionContext): string {\n\tconst model = ctx.model as { provider?: unknown; id?: unknown } | undefined;\n\tif (model && typeof model.provider === \"string\" && typeof model.id === \"string\") return `current session (${model.provider}/${model.id})`;\n\treturn \"current session (not configured)\";\n}\n\nfunction mainThinkingLine(snapshot: ReturnType<MainWatchdogRuntime[\"getSnapshot\"]>, ctx: ExtensionContext): string {\n\tconst configuredModel = snapshot.config.main.model;\n\tconst configuredThinking = snapshot.config.main.thinking;\n\tif (configuredModel) {\n\t\tconst effective = resolveEffectiveThinking(configuredModel, configuredThinking);\n\t\tif (effective) return effective;\n\t\treturn \"off (default for explicit watchdog model)\";\n\t}\n\tif (configuredThinking === false) return \"off\";\n\tif (configuredThinking !== undefined) return configuredThinking;\n\tconst currentThinking = (ctx as { thinkingLevel?: unknown }).thinkingLevel;\n\treturn typeof currentThinking === \"string\" ? `current session (${currentThinking})` : \"current session\";\n}\n\nfunction mainModelLine(snapshot: ReturnType<MainWatchdogRuntime[\"getSnapshot\"]>, ctx: ExtensionContext): string {\n\tif (snapshot.config.main.model) {\n\t\tconst source = snapshot.sessionModelOverride?.model ? \"session override\" : \"configured\";\n\t\treturn `Main model: ${splitKnownThinkingSuffix(snapshot.config.main.model).baseModel} (${source})`;\n\t}\n\treturn `Main model: ${currentSessionModelLine(ctx)}`;\n}\n\nfunction childrenLine(snapshot: ReturnType<MainWatchdogRuntime[\"getSnapshot\"]>): string {\n\tconst children = snapshot.config.children;\n\tconst model = children.model ? splitKnownThinkingSuffix(children.model).baseModel : \"current child session\";\n\tconst thinking = children.thinking === undefined ? \"current child session\" : children.thinking === false ? \"off\" : children.thinking;\n\tconst overrides = Object.entries(children.overrides);\n\tconst overrideText = overrides.length\n\t\t? ` · overrides ${overrides.map(([agent, override]) => {\n\t\t\tconst bits = [agent];\n\t\t\tif (override.enabled !== undefined) bits.push(boolLabel(override.enabled));\n\t\t\tif (override.model) bits.push(splitKnownThinkingSuffix(override.model).baseModel);\n\t\t\tif (override.thinking !== undefined) bits.push(`thinking ${override.thinking === false ? \"off\" : override.thinking}`);\n\t\t\treturn bits.join(\" \");\n\t\t}).join(\"; \")}`\n\t\t: \"\";\n\treturn `Children: ${boolLabel(snapshot.config.enabled && children.enabled)} · model ${model} · thinking ${thinking}${overrideText}`;\n}\n\nfunction recommendationLine(ctx: ExtensionContext): string {\n\ttry {\n\t\tconst recommendation = recommendStrongWatchdogModel(ctx);\n\t\treturn `Recommended strong watchdog: ${recommendation.model}:${recommendation.thinking} (${recommendation.label}, complementary reviewer)`;\n\t} catch (error) {\n\t\treturn `Recommended strong watchdog: unavailable (${messageFromError(error)})`;\n\t}\n}\n\nfunction lspLine(snapshot: ReturnType<MainWatchdogRuntime[\"getSnapshot\"]>): string {\n\tconst lsp = snapshot.lsp;\n\tconst provider = lsp.provider ? ` · ${lsp.provider}` : \"\";\n\tconst counts = lsp.diagnosticCount > 0 || lsp.freshDiagnosticCount > 0\n\t\t? ` · ${lsp.freshDiagnosticCount} new/${lsp.diagnosticCount} total`\n\t\t: \"\";\n\tconst message = lsp.message ? ` · ${lsp.message}` : \"\";\n\treturn `LSP diagnostics: ${lsp.enabled ? \"on\" : \"off\"} · ${lsp.status}${provider}${counts}${message}`;\n}\n\nexport function buildWatchdogStatus(snapshot: ReturnType<MainWatchdogRuntime[\"getSnapshot\"]>, ctx: ExtensionContext): string {\n\tconst lines = [\n\t\t\"Subagent watchdog\",\n\t\t`Main: ${boolLabel(snapshot.enabled)}${!snapshot.config.enabled && snapshot.sessionOverride === undefined ? \" (default off)\" : \"\"}`,\n\t\t`Runtime: ${statusLabel(snapshot.status)}${snapshot.bufferedDeltas > 0 ? ` · buffered deltas ${snapshot.bufferedDeltas}` : \"\"}`,\n\t\t`Review trigger: ${snapshot.reviewTrigger === \"repo-edits\" ? \"repo edits only\" : \"every non-empty turn delta\"}`,\n\t\tlspLine(snapshot),\n\t\t`Session override: ${snapshot.sessionOverride === undefined ? \"none\" : boolLabel(snapshot.sessionOverride)}`,\n\t\tmainModelLine(snapshot, ctx),\n\t\t`Main thinking: ${mainThinkingLine(snapshot, ctx)}`,\n\t\tchildrenLine(snapshot),\n\t\trecommendationLine(ctx),\n\t\t`Agent-end timeout: ${snapshot.config.agentEndTimeoutMs}ms`,\n\t\t`Auto-follow: not implemented${snapshot.autoFollowQueued ? \" (queued)\" : \"\"}`,\n\t\t`Review model call: ${snapshot.reviewDescription}`,\n\t];\n\tif (snapshot.failedReviews > 0) lines.push(`Failed reviews: ${snapshot.failedReviews}`);\n\tif (snapshot.staleReviews > 0) lines.push(`Stale reviews: ${snapshot.staleReviews}`);\n\tif (snapshot.changedPaths?.length) {\n\t\tlines.push(`Changed paths: ${snapshot.changedPaths.slice(0, 8).join(\", \")}${snapshot.changedPaths.length > 8 ? `, +${snapshot.changedPaths.length - 8} more` : \"\"}`);\n\t}\n\tif (snapshot.lastWarning) {\n\t\tlines.push(`Last warning: ${snapshot.lastWarning.severity} · ${snapshot.lastWarning.state ?? \"candidate\"} · ${snapshot.lastWarning.summary}`);\n\t}\n\tif (snapshot.lastError) lines.push(`Last error: ${snapshot.lastError}`);\n\tif (!snapshot.configOk) {\n\t\tlines.push(\"\", \"Config errors:\", ...snapshot.errors.map((error) => `- ${error.message}`), \"Watchdog is disabled until the config is fixed.\");\n\t} else {\n\t\tlines.push(\"\", \"Config: ok\");\n\t}\n\tlines.push(\n\t\t\"Sources:\",\n\t\t...snapshot.sources.map(sourceLine),\n\t\t\"\",\n\t\t\"Model commands:\",\n\t\t\"- /subagents-watchdog recommend-model\",\n\t\t\"- /subagents-watchdog model recommended\",\n\t\t\"- /subagents-watchdog model <provider/model[:thinking]>\",\n\t\t\"- /subagents-watchdog model inherit\",\n\t\t\"- /subagents-watchdog session model recommended\",\n\t\t\"Configure via /subagents-watchdog or /settings; agent watchdog.configure is not available.\",\n\t);\n\treturn lines.join(\"\\n\");\n}\n\nfunction parseTestCommand(input: string): { severity: \"concern\" | \"blocker\"; text: string } | undefined {\n\tconst match = input.match(/^test\\s+(concern|blocker)\\s+([\\s\\S]+)$/);\n\tif (!match) return undefined;\n\treturn { severity: match[1] as \"concern\" | \"blocker\", text: match[2]!.trim() };\n}\n\nfunction formatThinking(value: ThinkingLevel | false | undefined): string {\n\tif (value === undefined) return \"inherit\";\n\treturn value === false ? \"off\" : value;\n}\n\nfunction parseThinkingCommand(raw: string): ThinkingLevel | false | null {\n\tconst value = raw.trim();\n\tif (value === \"inherit\") return null;\n\treturn parseWatchdogThinkingInput(value, \"/subagents-watchdog thinking\") ?? null;\n}\n\nfunction resolveModelCommandValue(ctx: ExtensionCommandContext, raw: string): { model: string | null; thinking: ThinkingLevel | false | null; description: string } {\n\tconst value = raw.trim();\n\tif (!value) throw new Error(\"Expected a model, 'recommended', or 'inherit'.\");\n\tif (value === \"inherit\") return { model: null, thinking: null, description: \"current session model and thinking\" };\n\tif (value === \"recommended\") {\n\t\tconst recommendation = recommendStrongWatchdogModel(ctx as ExtensionContext);\n\t\treturn {\n\t\t\tmodel: recommendation.model,\n\t\t\tthinking: recommendation.thinking,\n\t\t\tdescription: `${recommendation.model}:${recommendation.thinking} (${recommendation.label})`,\n\t\t};\n\t}\n\tconst resolved = resolveWatchdogModelInput(ctx as ExtensionContext, value);\n\treturn {\n\t\tmodel: resolved.model,\n\t\tthinking: resolved.thinking,\n\t\tdescription: `${resolved.model}${resolved.thinking ? `:${resolved.thinking}` : \"\"}`,\n\t};\n}\n\nfunction buildRecommendationText(ctx: ExtensionCommandContext): string {\n\tconst recommendation = recommendStrongWatchdogModel(ctx as ExtensionContext);\n\treturn [\n\t\t\"Subagent watchdog recommended model\",\n\t\t`Current session: ${currentSessionModelLine(ctx as ExtensionContext)}`,\n\t\t`Recommended: ${recommendation.model}:${recommendation.thinking}`,\n\t\t`Reason: ${recommendation.reason}`,\n\t\t\"\",\n\t\t\"Apply for this session:\",\n\t\t\"/subagents-watchdog session model recommended\",\n\t\t\"\",\n\t\t\"Save as your user default:\",\n\t\t\"/subagents-watchdog model recommended\",\n\t].join(\"\\n\");\n}\n\nfunction buildCheckText(runtime: MainWatchdogRuntime, ctx: ExtensionCommandContext): string {\n\tconst snapshot = runtime.getSnapshot(ctx.cwd);\n\tif (!snapshot.configOk) {\n\t\treturn [\"Subagent watchdog config check\", \"\", \"Config errors:\", ...snapshot.errors.map((error) => `- ${error.message}`)].join(\"\\n\");\n\t}\n\tconst lines = [\"Subagent watchdog config check\", \"\", \"Config: ok\"];\n\tif (snapshot.config.main.model) {\n\t\tconst resolved = resolveWatchdogModelInput(ctx as ExtensionContext, snapshot.config.main.model);\n\t\tlines.push(`Main model: ${resolved.model} auth ok`);\n\t} else {\n\t\tlines.push(`Main model: ${currentSessionModelLine(ctx as ExtensionContext)}`);\n\t}\n\tlines.push(`Main thinking: ${mainThinkingLine(snapshot, ctx as ExtensionContext)}`);\n\tlines.push(lspLine(snapshot));\n\ttry {\n\t\tconst recommendation = recommendStrongWatchdogModel(ctx as ExtensionContext);\n\t\tlines.push(`Recommended strong watchdog: ${recommendation.model}:${recommendation.thinking}`);\n\t} catch (error) {\n\t\tlines.push(`Recommended strong watchdog: unavailable (${messageFromError(error)})`);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nfunction createTestWarning(severity: \"concern\" | \"blocker\", text: string): WatchdogWarning {\n\treturn {\n\t\tseverity,\n\t\tcategory: \"other\",\n\t\tconfidence: \"high\",\n\t\tsource: \"main\",\n\t\tstate: \"displayed\",\n\t\tsummary: text,\n\t\tevidence: `Manual /subagents-watchdog test ${severity} message from the main session.`,\n\t\trecommendedAction: severity === \"blocker\"\n\t\t\t? \"Verify the renderer and transcript delivery; no automatic follow-up is queued in Gate 1B.\"\n\t\t\t: \"Verify the renderer and transcript delivery; decide manually whether any action is needed.\",\n\t};\n}\n\nasync function handleWatchdogCommand(\n\tpi: ExtensionAPI,\n\truntime: MainWatchdogRuntime,\n\targs: string,\n\tctx: ExtensionCommandContext,\n): Promise<void> {\n\tconst input = args.trim();\n\tif (!input || input === \"status\") {\n\t\tsendSlashText(pi, buildWatchdogStatus(runtime.getSnapshot(ctx.cwd), ctx));\n\t\treturn;\n\t}\n\tif (input === \"recommend-model\") {\n\t\ttry {\n\t\t\tsendSlashText(pi, buildRecommendationText(ctx));\n\t\t} catch (error) {\n\t\t\tsendSlashText(pi, `Subagent watchdog recommended model\\n\\n${messageFromError(error)}`);\n\t\t}\n\t\treturn;\n\t}\n\tif (input === \"check\") {\n\t\ttry {\n\t\t\tsendSlashText(pi, buildCheckText(runtime, ctx));\n\t\t} catch (error) {\n\t\t\tsendSlashText(pi, `Subagent watchdog config check\\n\\n${messageFromError(error)}`);\n\t\t}\n\t\treturn;\n\t}\n\tif (input === \"on\" || input === \"off\") {\n\t\tconst enabled = input === \"on\";\n\t\ttry {\n\t\t\tconst settingsPath = writeUserWatchdogEnabled(enabled);\n\t\t\tconst snapshot = runtime.getSnapshot(ctx.cwd);\n\t\t\tsendSlashText(pi, [\n\t\t\t\t`Subagent watchdog ${boolLabel(enabled)} saved to user settings.`,\n\t\t\t\t`Updated: ${settingsPath}`,\n\t\t\t\t`Main now: ${boolLabel(snapshot.enabled)}${snapshot.sessionOverride !== undefined ? ` (session override ${boolLabel(snapshot.sessionOverride)})` : \"\"}`,\n\t\t\t].join(\"\\n\"));\n\t\t} catch (error) {\n\t\t\tsendSlashText(pi, `Subagent watchdog\\n\\nCould not update ${getWatchdogUserSettingsPath()}: ${messageFromError(error)}`);\n\t\t}\n\t\treturn;\n\t}\n\tif (input === \"session on\" || input === \"session off\") {\n\t\tconst enabled = input.endsWith(\"on\");\n\t\tconst snapshot = runtime.setSessionEnabled(enabled, ctx.cwd);\n\t\tsendSlashText(pi, [\n\t\t\t`Subagent watchdog session override: ${boolLabel(enabled)}.`,\n\t\t\t\"No settings files were changed.\",\n\t\t\t\"\",\n\t\t\tbuildWatchdogStatus(snapshot, ctx),\n\t\t].join(\"\\n\"));\n\t\treturn;\n\t}\n\tif (input.startsWith(\"session model \")) {\n\t\tconst rawModel = input.slice(\"session model \".length);\n\t\ttry {\n\t\t\tconst value = resolveModelCommandValue(ctx, rawModel);\n\t\t\tconst snapshot = value.model === null\n\t\t\t\t? runtime.clearSessionModel(ctx.cwd)\n\t\t\t\t: runtime.setSessionModel({ model: value.model, thinking: value.thinking ?? null }, ctx.cwd);\n\t\t\tsendSlashText(pi, [\n\t\t\t\t`Subagent watchdog session model: ${value.description}.`,\n\t\t\t\t\"No settings files were changed.\",\n\t\t\t\t\"\",\n\t\t\t\tbuildWatchdogStatus(snapshot, ctx),\n\t\t\t].join(\"\\n\"));\n\t\t} catch (error) {\n\t\t\tsendSlashText(pi, `Subagent watchdog session model\\n\\n${messageFromError(error)}`);\n\t\t}\n\t\treturn;\n\t}\n\tif (input.startsWith(\"model \")) {\n\t\tconst rawModel = input.slice(\"model \".length);\n\t\ttry {\n\t\t\tconst value = resolveModelCommandValue(ctx, rawModel);\n\t\t\tconst settingsPath = writeWatchdogModelSettings({\n\t\t\t\tscope: \"user\",\n\t\t\t\ttarget: { kind: \"main\" },\n\t\t\t\tmodel: value.model,\n\t\t\t\tthinking: value.thinking,\n\t\t\t});\n\t\t\truntime.refreshConfig(ctx.cwd);\n\t\t\tconst snapshot = runtime.getSnapshot(ctx.cwd);\n\t\t\tsendSlashText(pi, [\n\t\t\t\t`Subagent watchdog model saved: ${value.description}.`,\n\t\t\t\t`Updated: ${settingsPath}`,\n\t\t\t\t`Main now: ${boolLabel(snapshot.enabled)}`,\n\t\t\t\tvalue.model === null ? \"The watchdog now inherits the current session model and thinking.\" : \"Run /subagents-watchdog on if the watchdog is still off.\",\n\t\t\t\t\"\",\n\t\t\t\tbuildWatchdogStatus(snapshot, ctx),\n\t\t\t].join(\"\\n\"));\n\t\t} catch (error) {\n\t\t\tsendSlashText(pi, `Subagent watchdog model\\n\\n${messageFromError(error)}\\nNo settings files were changed.`);\n\t\t}\n\t\treturn;\n\t}\n\tif (input.startsWith(\"thinking \")) {\n\t\tconst rawThinking = input.slice(\"thinking \".length);\n\t\ttry {\n\t\t\tconst thinking = parseThinkingCommand(rawThinking);\n\t\t\tconst settingsPath = writeWatchdogModelSettings({\n\t\t\t\tscope: \"user\",\n\t\t\t\ttarget: { kind: \"main\" },\n\t\t\t\tthinking,\n\t\t\t});\n\t\t\truntime.refreshConfig(ctx.cwd);\n\t\t\tsendSlashText(pi, [\n\t\t\t\t`Subagent watchdog thinking saved: ${formatThinking(thinking ?? undefined)}.`,\n\t\t\t\t`Updated: ${settingsPath}`,\n\t\t\t\t\"\",\n\t\t\t\tbuildWatchdogStatus(runtime.getSnapshot(ctx.cwd), ctx),\n\t\t\t].join(\"\\n\"));\n\t\t} catch (error) {\n\t\t\tsendSlashText(pi, `Subagent watchdog thinking\\n\\n${messageFromError(error)}\\nNo settings files were changed.`);\n\t\t}\n\t\treturn;\n\t}\n\tconst test = parseTestCommand(input);\n\tif (test) {\n\t\tif (!test.text) {\n\t\t\tctx.ui.notify(\"Usage: /subagents-watchdog test concern|blocker <text>\", \"error\");\n\t\t\treturn;\n\t\t}\n\t\tconst warning = createTestWarning(test.severity, test.text);\n\t\tconst details = runtime.recordDisplayedWarning(warning);\n\t\tpi.sendMessage(createWatchdogWarningMessage(details, { display: true, details }));\n\t\treturn;\n\t}\n\tctx.ui.notify(`Usage: /subagents-watchdog [status|on|off|session on|session off|recommend-model|model recommended|model <provider/model[:thinking]>|model inherit|thinking ${THINKING_LEVELS.join(\"|\")}|thinking inherit|session model recommended|check|test concern <text>|test blocker <text>]`, \"error\");\n}\n\nexport function registerMainWatchdog(pi: ExtensionAPI, options: RegisterMainWatchdogOptions = {}): MainWatchdogRuntime {\n\tlet currentContext: ExtensionContext | undefined;\n\tconst rememberContext = (ctx: ExtensionContext) => {\n\t\tcurrentContext = ctx;\n\t};\n\tconst runtime = options.runtime ?? new MainWatchdogRuntime({\n\t\treview: options.review ?? createMainWatchdogReview(() => currentContext, { getThinkingLevel: () => pi.getThinkingLevel() }),\n\t\treviewDescription: options.review ? \"injected seam\" : \"real model review\",\n\t\treviewChangesOnly: true,\n\t\tdisplayWarning: (details) => {\n\t\t\tpi.sendMessage(createWatchdogWarningMessage(details, { display: true, details }));\n\t\t},\n\t});\n\n\tpi.registerMessageRenderer<WatchdogWarningDetails>(SUBAGENT_WATCHDOG_WARNING_TYPE, (message, renderOptions, theme) => {\n\t\tconst details = message.details as WatchdogWarningDetails | undefined;\n\t\tif (!details?.summary || !details.evidence || !details.recommendedAction) {\n\t\t\tconst content = typeof message.content === \"string\"\n\t\t\t\t? message.content\n\t\t\t\t: message.content.filter((entry) => entry.type === \"text\").map((entry) => entry.text).join(\"\\n\");\n\t\t\treturn new Text(content, 0, 0);\n\t\t}\n\t\treturn renderWatchdogWarning(details, renderOptions, theme);\n\t});\n\n\tpi.registerCommand(\"subagents-watchdog\", {\n\t\tdescription: \"Show or toggle the default-off subagent watchdog\",\n\t\thandler: (args, ctx) => {\n\t\t\trememberContext(ctx);\n\t\t\treturn handleWatchdogCommand(pi, runtime, args, ctx);\n\t\t},\n\t});\n\n\tpi.on(\"session_start\", (_event, ctx) => {\n\t\trememberContext(ctx);\n\t\truntime.bindSession(ctx);\n\t});\n\tpi.on(\"before_agent_start\", (event, ctx) => {\n\t\trememberContext(ctx);\n\t\truntime.handleBeforeAgentStart(event, ctx);\n\t});\n\tpi.on(\"turn_end\", (event, ctx) => {\n\t\trememberContext(ctx);\n\t\truntime.handleTurnEnd(event, ctx);\n\t});\n\tpi.on(\"agent_end\", (event, ctx) => {\n\t\trememberContext(ctx);\n\t\treturn runtime.handleAgentEnd(event, ctx);\n\t});\n\tpi.on(\"session_before_switch\", () => runtime.reset(\"session switch\", { clearReviewInputSignature: true, clearLspLedger: true }));\n\tpi.on(\"session_before_fork\", () => runtime.reset(\"session fork\", { clearReviewInputSignature: true, clearLspLedger: true }));\n\tpi.on(\"session_compact\", () => runtime.reset(\"session compact\"));\n\tpi.on(\"session_shutdown\", () => {\n\t\tcurrentContext = undefined;\n\t\truntime.dispose();\n\t});\n\n\treturn runtime;\n}\n"]}
|
|
@@ -124,7 +124,7 @@ export function buildWatchdogStatus(snapshot, ctx) {
|
|
|
124
124
|
else {
|
|
125
125
|
lines.push("", "Config: ok");
|
|
126
126
|
}
|
|
127
|
-
lines.push("Sources:", ...snapshot.sources.map(sourceLine), "", "Model commands:", "- /subagents-watchdog recommend-model", "- /subagents-watchdog model recommended", "- /subagents-watchdog model <provider/model[:thinking]>", "- /subagents-watchdog model inherit", "- /subagents-watchdog session model recommended", "
|
|
127
|
+
lines.push("Sources:", ...snapshot.sources.map(sourceLine), "", "Model commands:", "- /subagents-watchdog recommend-model", "- /subagents-watchdog model recommended", "- /subagents-watchdog model <provider/model[:thinking]>", "- /subagents-watchdog model inherit", "- /subagents-watchdog session model recommended", "Configure via /subagents-watchdog or /settings; agent watchdog.configure is not available.");
|
|
128
128
|
return lines.join("\n");
|
|
129
129
|
}
|
|
130
130
|
function parseTestCommand(input) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-main.js","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/watchdog/register-main.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport type { ExtensionAPI, ExtensionCommandContext, ExtensionContext } from \"@ashx-j/lunr-dev\";\nimport { Text } from \"@ashx-j/lunr-tui\";\nimport { resolveEffectiveThinking, splitKnownThinkingSuffix, THINKING_LEVELS, type ThinkingLevel } from \"../shared/model-info.ts\";\nimport { SLASH_TEXT_RESULT_TYPE } from \"../shared/types.ts\";\nimport { recommendStrongWatchdogModel, resolveWatchdogModelInput, parseWatchdogThinkingInput } from \"./model-selection.ts\";\nimport { renderWatchdogWarning } from \"./render.ts\";\nimport { createMainWatchdogReview } from \"./review.ts\";\nimport { MainWatchdogRuntime, type WatchdogReviewFunction } from \"./runtime.ts\";\nimport { getWatchdogUserSettingsPath, writeUserWatchdogEnabled, writeWatchdogModelSettings } from \"./settings.ts\";\nimport {\n\tSUBAGENT_WATCHDOG_WARNING_TYPE,\n\ttype WatchdogRuntimeStatus,\n\ttype WatchdogWarning,\n\ttype WatchdogWarningDetails,\n} from \"./types.ts\";\nimport { createWatchdogWarningMessage } from \"./warning-format.ts\";\n\ninterface RegisterMainWatchdogOptions {\n\truntime?: MainWatchdogRuntime;\n\treview?: WatchdogReviewFunction;\n}\n\nfunction sendSlashText(pi: ExtensionAPI, text: string): void {\n\tpi.sendMessage({ customType: SLASH_TEXT_RESULT_TYPE, content: text, display: true });\n}\n\nfunction messageFromError(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction boolLabel(value: boolean): string {\n\treturn value ? \"on\" : \"off\";\n}\n\nfunction statusLabel(status: WatchdogRuntimeStatus): string {\n\treturn status.replaceAll(\"-\", \" \");\n}\n\nfunction sourceLine(source: { scope: string; path?: string; exists: boolean }): string {\n\tconst location = source.path ? ` ${source.path}` : \"\";\n\treturn `- ${source.scope}${location}: ${source.exists ? \"found\" : \"not found\"}`;\n}\n\nfunction currentSessionModelLine(ctx: ExtensionContext): string {\n\tconst model = ctx.model as { provider?: unknown; id?: unknown } | undefined;\n\tif (model && typeof model.provider === \"string\" && typeof model.id === \"string\") return `current session (${model.provider}/${model.id})`;\n\treturn \"current session (not configured)\";\n}\n\nfunction mainThinkingLine(snapshot: ReturnType<MainWatchdogRuntime[\"getSnapshot\"]>, ctx: ExtensionContext): string {\n\tconst configuredModel = snapshot.config.main.model;\n\tconst configuredThinking = snapshot.config.main.thinking;\n\tif (configuredModel) {\n\t\tconst effective = resolveEffectiveThinking(configuredModel, configuredThinking);\n\t\tif (effective) return effective;\n\t\treturn \"off (default for explicit watchdog model)\";\n\t}\n\tif (configuredThinking === false) return \"off\";\n\tif (configuredThinking !== undefined) return configuredThinking;\n\tconst currentThinking = (ctx as { thinkingLevel?: unknown }).thinkingLevel;\n\treturn typeof currentThinking === \"string\" ? `current session (${currentThinking})` : \"current session\";\n}\n\nfunction mainModelLine(snapshot: ReturnType<MainWatchdogRuntime[\"getSnapshot\"]>, ctx: ExtensionContext): string {\n\tif (snapshot.config.main.model) {\n\t\tconst source = snapshot.sessionModelOverride?.model ? \"session override\" : \"configured\";\n\t\treturn `Main model: ${splitKnownThinkingSuffix(snapshot.config.main.model).baseModel} (${source})`;\n\t}\n\treturn `Main model: ${currentSessionModelLine(ctx)}`;\n}\n\nfunction childrenLine(snapshot: ReturnType<MainWatchdogRuntime[\"getSnapshot\"]>): string {\n\tconst children = snapshot.config.children;\n\tconst model = children.model ? splitKnownThinkingSuffix(children.model).baseModel : \"current child session\";\n\tconst thinking = children.thinking === undefined ? \"current child session\" : children.thinking === false ? \"off\" : children.thinking;\n\tconst overrides = Object.entries(children.overrides);\n\tconst overrideText = overrides.length\n\t\t? ` · overrides ${overrides.map(([agent, override]) => {\n\t\t\tconst bits = [agent];\n\t\t\tif (override.enabled !== undefined) bits.push(boolLabel(override.enabled));\n\t\t\tif (override.model) bits.push(splitKnownThinkingSuffix(override.model).baseModel);\n\t\t\tif (override.thinking !== undefined) bits.push(`thinking ${override.thinking === false ? \"off\" : override.thinking}`);\n\t\t\treturn bits.join(\" \");\n\t\t}).join(\"; \")}`\n\t\t: \"\";\n\treturn `Children: ${boolLabel(snapshot.config.enabled && children.enabled)} · model ${model} · thinking ${thinking}${overrideText}`;\n}\n\nfunction recommendationLine(ctx: ExtensionContext): string {\n\ttry {\n\t\tconst recommendation = recommendStrongWatchdogModel(ctx);\n\t\treturn `Recommended strong watchdog: ${recommendation.model}:${recommendation.thinking} (${recommendation.label}, complementary reviewer)`;\n\t} catch (error) {\n\t\treturn `Recommended strong watchdog: unavailable (${messageFromError(error)})`;\n\t}\n}\n\nfunction lspLine(snapshot: ReturnType<MainWatchdogRuntime[\"getSnapshot\"]>): string {\n\tconst lsp = snapshot.lsp;\n\tconst provider = lsp.provider ? ` · ${lsp.provider}` : \"\";\n\tconst counts = lsp.diagnosticCount > 0 || lsp.freshDiagnosticCount > 0\n\t\t? ` · ${lsp.freshDiagnosticCount} new/${lsp.diagnosticCount} total`\n\t\t: \"\";\n\tconst message = lsp.message ? ` · ${lsp.message}` : \"\";\n\treturn `LSP diagnostics: ${lsp.enabled ? \"on\" : \"off\"} · ${lsp.status}${provider}${counts}${message}`;\n}\n\nexport function buildWatchdogStatus(snapshot: ReturnType<MainWatchdogRuntime[\"getSnapshot\"]>, ctx: ExtensionContext): string {\n\tconst lines = [\n\t\t\"Subagent watchdog\",\n\t\t`Main: ${boolLabel(snapshot.enabled)}${!snapshot.config.enabled && snapshot.sessionOverride === undefined ? \" (default off)\" : \"\"}`,\n\t\t`Runtime: ${statusLabel(snapshot.status)}${snapshot.bufferedDeltas > 0 ? ` · buffered deltas ${snapshot.bufferedDeltas}` : \"\"}`,\n\t\t`Review trigger: ${snapshot.reviewTrigger === \"repo-edits\" ? \"repo edits only\" : \"every non-empty turn delta\"}`,\n\t\tlspLine(snapshot),\n\t\t`Session override: ${snapshot.sessionOverride === undefined ? \"none\" : boolLabel(snapshot.sessionOverride)}`,\n\t\tmainModelLine(snapshot, ctx),\n\t\t`Main thinking: ${mainThinkingLine(snapshot, ctx)}`,\n\t\tchildrenLine(snapshot),\n\t\trecommendationLine(ctx),\n\t\t`Agent-end timeout: ${snapshot.config.agentEndTimeoutMs}ms`,\n\t\t`Auto-follow: not implemented${snapshot.autoFollowQueued ? \" (queued)\" : \"\"}`,\n\t\t`Review model call: ${snapshot.reviewDescription}`,\n\t];\n\tif (snapshot.failedReviews > 0) lines.push(`Failed reviews: ${snapshot.failedReviews}`);\n\tif (snapshot.staleReviews > 0) lines.push(`Stale reviews: ${snapshot.staleReviews}`);\n\tif (snapshot.changedPaths?.length) {\n\t\tlines.push(`Changed paths: ${snapshot.changedPaths.slice(0, 8).join(\", \")}${snapshot.changedPaths.length > 8 ? `, +${snapshot.changedPaths.length - 8} more` : \"\"}`);\n\t}\n\tif (snapshot.lastWarning) {\n\t\tlines.push(`Last warning: ${snapshot.lastWarning.severity} · ${snapshot.lastWarning.state ?? \"candidate\"} · ${snapshot.lastWarning.summary}`);\n\t}\n\tif (snapshot.lastError) lines.push(`Last error: ${snapshot.lastError}`);\n\tif (!snapshot.configOk) {\n\t\tlines.push(\"\", \"Config errors:\", ...snapshot.errors.map((error) => `- ${error.message}`), \"Watchdog is disabled until the config is fixed.\");\n\t} else {\n\t\tlines.push(\"\", \"Config: ok\");\n\t}\n\tlines.push(\n\t\t\"Sources:\",\n\t\t...snapshot.sources.map(sourceLine),\n\t\t\"\",\n\t\t\"Model commands:\",\n\t\t\"- /subagents-watchdog recommend-model\",\n\t\t\"- /subagents-watchdog model recommended\",\n\t\t\"- /subagents-watchdog model <provider/model[:thinking]>\",\n\t\t\"- /subagents-watchdog model inherit\",\n\t\t\"- /subagents-watchdog session model recommended\",\n\t\t\"Agent action: subagent({ action: \\\"watchdog.configure\\\", model: \\\"recommended\\\", scope: \\\"session\\\" })\",\n\t);\n\treturn lines.join(\"\\n\");\n}\n\nfunction parseTestCommand(input: string): { severity: \"concern\" | \"blocker\"; text: string } | undefined {\n\tconst match = input.match(/^test\\s+(concern|blocker)\\s+([\\s\\S]+)$/);\n\tif (!match) return undefined;\n\treturn { severity: match[1] as \"concern\" | \"blocker\", text: match[2]!.trim() };\n}\n\nfunction formatThinking(value: ThinkingLevel | false | undefined): string {\n\tif (value === undefined) return \"inherit\";\n\treturn value === false ? \"off\" : value;\n}\n\nfunction parseThinkingCommand(raw: string): ThinkingLevel | false | null {\n\tconst value = raw.trim();\n\tif (value === \"inherit\") return null;\n\treturn parseWatchdogThinkingInput(value, \"/subagents-watchdog thinking\") ?? null;\n}\n\nfunction resolveModelCommandValue(ctx: ExtensionCommandContext, raw: string): { model: string | null; thinking: ThinkingLevel | false | null; description: string } {\n\tconst value = raw.trim();\n\tif (!value) throw new Error(\"Expected a model, 'recommended', or 'inherit'.\");\n\tif (value === \"inherit\") return { model: null, thinking: null, description: \"current session model and thinking\" };\n\tif (value === \"recommended\") {\n\t\tconst recommendation = recommendStrongWatchdogModel(ctx as ExtensionContext);\n\t\treturn {\n\t\t\tmodel: recommendation.model,\n\t\t\tthinking: recommendation.thinking,\n\t\t\tdescription: `${recommendation.model}:${recommendation.thinking} (${recommendation.label})`,\n\t\t};\n\t}\n\tconst resolved = resolveWatchdogModelInput(ctx as ExtensionContext, value);\n\treturn {\n\t\tmodel: resolved.model,\n\t\tthinking: resolved.thinking,\n\t\tdescription: `${resolved.model}${resolved.thinking ? `:${resolved.thinking}` : \"\"}`,\n\t};\n}\n\nfunction buildRecommendationText(ctx: ExtensionCommandContext): string {\n\tconst recommendation = recommendStrongWatchdogModel(ctx as ExtensionContext);\n\treturn [\n\t\t\"Subagent watchdog recommended model\",\n\t\t`Current session: ${currentSessionModelLine(ctx as ExtensionContext)}`,\n\t\t`Recommended: ${recommendation.model}:${recommendation.thinking}`,\n\t\t`Reason: ${recommendation.reason}`,\n\t\t\"\",\n\t\t\"Apply for this session:\",\n\t\t\"/subagents-watchdog session model recommended\",\n\t\t\"\",\n\t\t\"Save as your user default:\",\n\t\t\"/subagents-watchdog model recommended\",\n\t].join(\"\\n\");\n}\n\nfunction buildCheckText(runtime: MainWatchdogRuntime, ctx: ExtensionCommandContext): string {\n\tconst snapshot = runtime.getSnapshot(ctx.cwd);\n\tif (!snapshot.configOk) {\n\t\treturn [\"Subagent watchdog config check\", \"\", \"Config errors:\", ...snapshot.errors.map((error) => `- ${error.message}`)].join(\"\\n\");\n\t}\n\tconst lines = [\"Subagent watchdog config check\", \"\", \"Config: ok\"];\n\tif (snapshot.config.main.model) {\n\t\tconst resolved = resolveWatchdogModelInput(ctx as ExtensionContext, snapshot.config.main.model);\n\t\tlines.push(`Main model: ${resolved.model} auth ok`);\n\t} else {\n\t\tlines.push(`Main model: ${currentSessionModelLine(ctx as ExtensionContext)}`);\n\t}\n\tlines.push(`Main thinking: ${mainThinkingLine(snapshot, ctx as ExtensionContext)}`);\n\tlines.push(lspLine(snapshot));\n\ttry {\n\t\tconst recommendation = recommendStrongWatchdogModel(ctx as ExtensionContext);\n\t\tlines.push(`Recommended strong watchdog: ${recommendation.model}:${recommendation.thinking}`);\n\t} catch (error) {\n\t\tlines.push(`Recommended strong watchdog: unavailable (${messageFromError(error)})`);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nfunction createTestWarning(severity: \"concern\" | \"blocker\", text: string): WatchdogWarning {\n\treturn {\n\t\tseverity,\n\t\tcategory: \"other\",\n\t\tconfidence: \"high\",\n\t\tsource: \"main\",\n\t\tstate: \"displayed\",\n\t\tsummary: text,\n\t\tevidence: `Manual /subagents-watchdog test ${severity} message from the main session.`,\n\t\trecommendedAction: severity === \"blocker\"\n\t\t\t? \"Verify the renderer and transcript delivery; no automatic follow-up is queued in Gate 1B.\"\n\t\t\t: \"Verify the renderer and transcript delivery; decide manually whether any action is needed.\",\n\t};\n}\n\nasync function handleWatchdogCommand(\n\tpi: ExtensionAPI,\n\truntime: MainWatchdogRuntime,\n\targs: string,\n\tctx: ExtensionCommandContext,\n): Promise<void> {\n\tconst input = args.trim();\n\tif (!input || input === \"status\") {\n\t\tsendSlashText(pi, buildWatchdogStatus(runtime.getSnapshot(ctx.cwd), ctx));\n\t\treturn;\n\t}\n\tif (input === \"recommend-model\") {\n\t\ttry {\n\t\t\tsendSlashText(pi, buildRecommendationText(ctx));\n\t\t} catch (error) {\n\t\t\tsendSlashText(pi, `Subagent watchdog recommended model\\n\\n${messageFromError(error)}`);\n\t\t}\n\t\treturn;\n\t}\n\tif (input === \"check\") {\n\t\ttry {\n\t\t\tsendSlashText(pi, buildCheckText(runtime, ctx));\n\t\t} catch (error) {\n\t\t\tsendSlashText(pi, `Subagent watchdog config check\\n\\n${messageFromError(error)}`);\n\t\t}\n\t\treturn;\n\t}\n\tif (input === \"on\" || input === \"off\") {\n\t\tconst enabled = input === \"on\";\n\t\ttry {\n\t\t\tconst settingsPath = writeUserWatchdogEnabled(enabled);\n\t\t\tconst snapshot = runtime.getSnapshot(ctx.cwd);\n\t\t\tsendSlashText(pi, [\n\t\t\t\t`Subagent watchdog ${boolLabel(enabled)} saved to user settings.`,\n\t\t\t\t`Updated: ${settingsPath}`,\n\t\t\t\t`Main now: ${boolLabel(snapshot.enabled)}${snapshot.sessionOverride !== undefined ? ` (session override ${boolLabel(snapshot.sessionOverride)})` : \"\"}`,\n\t\t\t].join(\"\\n\"));\n\t\t} catch (error) {\n\t\t\tsendSlashText(pi, `Subagent watchdog\\n\\nCould not update ${getWatchdogUserSettingsPath()}: ${messageFromError(error)}`);\n\t\t}\n\t\treturn;\n\t}\n\tif (input === \"session on\" || input === \"session off\") {\n\t\tconst enabled = input.endsWith(\"on\");\n\t\tconst snapshot = runtime.setSessionEnabled(enabled, ctx.cwd);\n\t\tsendSlashText(pi, [\n\t\t\t`Subagent watchdog session override: ${boolLabel(enabled)}.`,\n\t\t\t\"No settings files were changed.\",\n\t\t\t\"\",\n\t\t\tbuildWatchdogStatus(snapshot, ctx),\n\t\t].join(\"\\n\"));\n\t\treturn;\n\t}\n\tif (input.startsWith(\"session model \")) {\n\t\tconst rawModel = input.slice(\"session model \".length);\n\t\ttry {\n\t\t\tconst value = resolveModelCommandValue(ctx, rawModel);\n\t\t\tconst snapshot = value.model === null\n\t\t\t\t? runtime.clearSessionModel(ctx.cwd)\n\t\t\t\t: runtime.setSessionModel({ model: value.model, thinking: value.thinking ?? null }, ctx.cwd);\n\t\t\tsendSlashText(pi, [\n\t\t\t\t`Subagent watchdog session model: ${value.description}.`,\n\t\t\t\t\"No settings files were changed.\",\n\t\t\t\t\"\",\n\t\t\t\tbuildWatchdogStatus(snapshot, ctx),\n\t\t\t].join(\"\\n\"));\n\t\t} catch (error) {\n\t\t\tsendSlashText(pi, `Subagent watchdog session model\\n\\n${messageFromError(error)}`);\n\t\t}\n\t\treturn;\n\t}\n\tif (input.startsWith(\"model \")) {\n\t\tconst rawModel = input.slice(\"model \".length);\n\t\ttry {\n\t\t\tconst value = resolveModelCommandValue(ctx, rawModel);\n\t\t\tconst settingsPath = writeWatchdogModelSettings({\n\t\t\t\tscope: \"user\",\n\t\t\t\ttarget: { kind: \"main\" },\n\t\t\t\tmodel: value.model,\n\t\t\t\tthinking: value.thinking,\n\t\t\t});\n\t\t\truntime.refreshConfig(ctx.cwd);\n\t\t\tconst snapshot = runtime.getSnapshot(ctx.cwd);\n\t\t\tsendSlashText(pi, [\n\t\t\t\t`Subagent watchdog model saved: ${value.description}.`,\n\t\t\t\t`Updated: ${settingsPath}`,\n\t\t\t\t`Main now: ${boolLabel(snapshot.enabled)}`,\n\t\t\t\tvalue.model === null ? \"The watchdog now inherits the current session model and thinking.\" : \"Run /subagents-watchdog on if the watchdog is still off.\",\n\t\t\t\t\"\",\n\t\t\t\tbuildWatchdogStatus(snapshot, ctx),\n\t\t\t].join(\"\\n\"));\n\t\t} catch (error) {\n\t\t\tsendSlashText(pi, `Subagent watchdog model\\n\\n${messageFromError(error)}\\nNo settings files were changed.`);\n\t\t}\n\t\treturn;\n\t}\n\tif (input.startsWith(\"thinking \")) {\n\t\tconst rawThinking = input.slice(\"thinking \".length);\n\t\ttry {\n\t\t\tconst thinking = parseThinkingCommand(rawThinking);\n\t\t\tconst settingsPath = writeWatchdogModelSettings({\n\t\t\t\tscope: \"user\",\n\t\t\t\ttarget: { kind: \"main\" },\n\t\t\t\tthinking,\n\t\t\t});\n\t\t\truntime.refreshConfig(ctx.cwd);\n\t\t\tsendSlashText(pi, [\n\t\t\t\t`Subagent watchdog thinking saved: ${formatThinking(thinking ?? undefined)}.`,\n\t\t\t\t`Updated: ${settingsPath}`,\n\t\t\t\t\"\",\n\t\t\t\tbuildWatchdogStatus(runtime.getSnapshot(ctx.cwd), ctx),\n\t\t\t].join(\"\\n\"));\n\t\t} catch (error) {\n\t\t\tsendSlashText(pi, `Subagent watchdog thinking\\n\\n${messageFromError(error)}\\nNo settings files were changed.`);\n\t\t}\n\t\treturn;\n\t}\n\tconst test = parseTestCommand(input);\n\tif (test) {\n\t\tif (!test.text) {\n\t\t\tctx.ui.notify(\"Usage: /subagents-watchdog test concern|blocker <text>\", \"error\");\n\t\t\treturn;\n\t\t}\n\t\tconst warning = createTestWarning(test.severity, test.text);\n\t\tconst details = runtime.recordDisplayedWarning(warning);\n\t\tpi.sendMessage(createWatchdogWarningMessage(details, { display: true, details }));\n\t\treturn;\n\t}\n\tctx.ui.notify(`Usage: /subagents-watchdog [status|on|off|session on|session off|recommend-model|model recommended|model <provider/model[:thinking]>|model inherit|thinking ${THINKING_LEVELS.join(\"|\")}|thinking inherit|session model recommended|check|test concern <text>|test blocker <text>]`, \"error\");\n}\n\nexport function registerMainWatchdog(pi: ExtensionAPI, options: RegisterMainWatchdogOptions = {}): MainWatchdogRuntime {\n\tlet currentContext: ExtensionContext | undefined;\n\tconst rememberContext = (ctx: ExtensionContext) => {\n\t\tcurrentContext = ctx;\n\t};\n\tconst runtime = options.runtime ?? new MainWatchdogRuntime({\n\t\treview: options.review ?? createMainWatchdogReview(() => currentContext, { getThinkingLevel: () => pi.getThinkingLevel() }),\n\t\treviewDescription: options.review ? \"injected seam\" : \"real model review\",\n\t\treviewChangesOnly: true,\n\t\tdisplayWarning: (details) => {\n\t\t\tpi.sendMessage(createWatchdogWarningMessage(details, { display: true, details }));\n\t\t},\n\t});\n\n\tpi.registerMessageRenderer<WatchdogWarningDetails>(SUBAGENT_WATCHDOG_WARNING_TYPE, (message, renderOptions, theme) => {\n\t\tconst details = message.details as WatchdogWarningDetails | undefined;\n\t\tif (!details?.summary || !details.evidence || !details.recommendedAction) {\n\t\t\tconst content = typeof message.content === \"string\"\n\t\t\t\t? message.content\n\t\t\t\t: message.content.filter((entry) => entry.type === \"text\").map((entry) => entry.text).join(\"\\n\");\n\t\t\treturn new Text(content, 0, 0);\n\t\t}\n\t\treturn renderWatchdogWarning(details, renderOptions, theme);\n\t});\n\n\tpi.registerCommand(\"subagents-watchdog\", {\n\t\tdescription: \"Show or toggle the default-off subagent watchdog\",\n\t\thandler: (args, ctx) => {\n\t\t\trememberContext(ctx);\n\t\t\treturn handleWatchdogCommand(pi, runtime, args, ctx);\n\t\t},\n\t});\n\n\tpi.on(\"session_start\", (_event, ctx) => {\n\t\trememberContext(ctx);\n\t\truntime.bindSession(ctx);\n\t});\n\tpi.on(\"before_agent_start\", (event, ctx) => {\n\t\trememberContext(ctx);\n\t\truntime.handleBeforeAgentStart(event, ctx);\n\t});\n\tpi.on(\"turn_end\", (event, ctx) => {\n\t\trememberContext(ctx);\n\t\truntime.handleTurnEnd(event, ctx);\n\t});\n\tpi.on(\"agent_end\", (event, ctx) => {\n\t\trememberContext(ctx);\n\t\treturn runtime.handleAgentEnd(event, ctx);\n\t});\n\tpi.on(\"session_before_switch\", () => runtime.reset(\"session switch\", { clearReviewInputSignature: true, clearLspLedger: true }));\n\tpi.on(\"session_before_fork\", () => runtime.reset(\"session fork\", { clearReviewInputSignature: true, clearLspLedger: true }));\n\tpi.on(\"session_compact\", () => runtime.reset(\"session compact\"));\n\tpi.on(\"session_shutdown\", () => {\n\t\tcurrentContext = undefined;\n\t\truntime.dispose();\n\t});\n\n\treturn runtime;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"register-main.js","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/watchdog/register-main.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport type { ExtensionAPI, ExtensionCommandContext, ExtensionContext } from \"@ashx-j/lunr-dev\";\nimport { Text } from \"@ashx-j/lunr-tui\";\nimport { resolveEffectiveThinking, splitKnownThinkingSuffix, THINKING_LEVELS, type ThinkingLevel } from \"../shared/model-info.ts\";\nimport { SLASH_TEXT_RESULT_TYPE } from \"../shared/types.ts\";\nimport { recommendStrongWatchdogModel, resolveWatchdogModelInput, parseWatchdogThinkingInput } from \"./model-selection.ts\";\nimport { renderWatchdogWarning } from \"./render.ts\";\nimport { createMainWatchdogReview } from \"./review.ts\";\nimport { MainWatchdogRuntime, type WatchdogReviewFunction } from \"./runtime.ts\";\nimport { getWatchdogUserSettingsPath, writeUserWatchdogEnabled, writeWatchdogModelSettings } from \"./settings.ts\";\nimport {\n\tSUBAGENT_WATCHDOG_WARNING_TYPE,\n\ttype WatchdogRuntimeStatus,\n\ttype WatchdogWarning,\n\ttype WatchdogWarningDetails,\n} from \"./types.ts\";\nimport { createWatchdogWarningMessage } from \"./warning-format.ts\";\n\ninterface RegisterMainWatchdogOptions {\n\truntime?: MainWatchdogRuntime;\n\treview?: WatchdogReviewFunction;\n}\n\nfunction sendSlashText(pi: ExtensionAPI, text: string): void {\n\tpi.sendMessage({ customType: SLASH_TEXT_RESULT_TYPE, content: text, display: true });\n}\n\nfunction messageFromError(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction boolLabel(value: boolean): string {\n\treturn value ? \"on\" : \"off\";\n}\n\nfunction statusLabel(status: WatchdogRuntimeStatus): string {\n\treturn status.replaceAll(\"-\", \" \");\n}\n\nfunction sourceLine(source: { scope: string; path?: string; exists: boolean }): string {\n\tconst location = source.path ? ` ${source.path}` : \"\";\n\treturn `- ${source.scope}${location}: ${source.exists ? \"found\" : \"not found\"}`;\n}\n\nfunction currentSessionModelLine(ctx: ExtensionContext): string {\n\tconst model = ctx.model as { provider?: unknown; id?: unknown } | undefined;\n\tif (model && typeof model.provider === \"string\" && typeof model.id === \"string\") return `current session (${model.provider}/${model.id})`;\n\treturn \"current session (not configured)\";\n}\n\nfunction mainThinkingLine(snapshot: ReturnType<MainWatchdogRuntime[\"getSnapshot\"]>, ctx: ExtensionContext): string {\n\tconst configuredModel = snapshot.config.main.model;\n\tconst configuredThinking = snapshot.config.main.thinking;\n\tif (configuredModel) {\n\t\tconst effective = resolveEffectiveThinking(configuredModel, configuredThinking);\n\t\tif (effective) return effective;\n\t\treturn \"off (default for explicit watchdog model)\";\n\t}\n\tif (configuredThinking === false) return \"off\";\n\tif (configuredThinking !== undefined) return configuredThinking;\n\tconst currentThinking = (ctx as { thinkingLevel?: unknown }).thinkingLevel;\n\treturn typeof currentThinking === \"string\" ? `current session (${currentThinking})` : \"current session\";\n}\n\nfunction mainModelLine(snapshot: ReturnType<MainWatchdogRuntime[\"getSnapshot\"]>, ctx: ExtensionContext): string {\n\tif (snapshot.config.main.model) {\n\t\tconst source = snapshot.sessionModelOverride?.model ? \"session override\" : \"configured\";\n\t\treturn `Main model: ${splitKnownThinkingSuffix(snapshot.config.main.model).baseModel} (${source})`;\n\t}\n\treturn `Main model: ${currentSessionModelLine(ctx)}`;\n}\n\nfunction childrenLine(snapshot: ReturnType<MainWatchdogRuntime[\"getSnapshot\"]>): string {\n\tconst children = snapshot.config.children;\n\tconst model = children.model ? splitKnownThinkingSuffix(children.model).baseModel : \"current child session\";\n\tconst thinking = children.thinking === undefined ? \"current child session\" : children.thinking === false ? \"off\" : children.thinking;\n\tconst overrides = Object.entries(children.overrides);\n\tconst overrideText = overrides.length\n\t\t? ` · overrides ${overrides.map(([agent, override]) => {\n\t\t\tconst bits = [agent];\n\t\t\tif (override.enabled !== undefined) bits.push(boolLabel(override.enabled));\n\t\t\tif (override.model) bits.push(splitKnownThinkingSuffix(override.model).baseModel);\n\t\t\tif (override.thinking !== undefined) bits.push(`thinking ${override.thinking === false ? \"off\" : override.thinking}`);\n\t\t\treturn bits.join(\" \");\n\t\t}).join(\"; \")}`\n\t\t: \"\";\n\treturn `Children: ${boolLabel(snapshot.config.enabled && children.enabled)} · model ${model} · thinking ${thinking}${overrideText}`;\n}\n\nfunction recommendationLine(ctx: ExtensionContext): string {\n\ttry {\n\t\tconst recommendation = recommendStrongWatchdogModel(ctx);\n\t\treturn `Recommended strong watchdog: ${recommendation.model}:${recommendation.thinking} (${recommendation.label}, complementary reviewer)`;\n\t} catch (error) {\n\t\treturn `Recommended strong watchdog: unavailable (${messageFromError(error)})`;\n\t}\n}\n\nfunction lspLine(snapshot: ReturnType<MainWatchdogRuntime[\"getSnapshot\"]>): string {\n\tconst lsp = snapshot.lsp;\n\tconst provider = lsp.provider ? ` · ${lsp.provider}` : \"\";\n\tconst counts = lsp.diagnosticCount > 0 || lsp.freshDiagnosticCount > 0\n\t\t? ` · ${lsp.freshDiagnosticCount} new/${lsp.diagnosticCount} total`\n\t\t: \"\";\n\tconst message = lsp.message ? ` · ${lsp.message}` : \"\";\n\treturn `LSP diagnostics: ${lsp.enabled ? \"on\" : \"off\"} · ${lsp.status}${provider}${counts}${message}`;\n}\n\nexport function buildWatchdogStatus(snapshot: ReturnType<MainWatchdogRuntime[\"getSnapshot\"]>, ctx: ExtensionContext): string {\n\tconst lines = [\n\t\t\"Subagent watchdog\",\n\t\t`Main: ${boolLabel(snapshot.enabled)}${!snapshot.config.enabled && snapshot.sessionOverride === undefined ? \" (default off)\" : \"\"}`,\n\t\t`Runtime: ${statusLabel(snapshot.status)}${snapshot.bufferedDeltas > 0 ? ` · buffered deltas ${snapshot.bufferedDeltas}` : \"\"}`,\n\t\t`Review trigger: ${snapshot.reviewTrigger === \"repo-edits\" ? \"repo edits only\" : \"every non-empty turn delta\"}`,\n\t\tlspLine(snapshot),\n\t\t`Session override: ${snapshot.sessionOverride === undefined ? \"none\" : boolLabel(snapshot.sessionOverride)}`,\n\t\tmainModelLine(snapshot, ctx),\n\t\t`Main thinking: ${mainThinkingLine(snapshot, ctx)}`,\n\t\tchildrenLine(snapshot),\n\t\trecommendationLine(ctx),\n\t\t`Agent-end timeout: ${snapshot.config.agentEndTimeoutMs}ms`,\n\t\t`Auto-follow: not implemented${snapshot.autoFollowQueued ? \" (queued)\" : \"\"}`,\n\t\t`Review model call: ${snapshot.reviewDescription}`,\n\t];\n\tif (snapshot.failedReviews > 0) lines.push(`Failed reviews: ${snapshot.failedReviews}`);\n\tif (snapshot.staleReviews > 0) lines.push(`Stale reviews: ${snapshot.staleReviews}`);\n\tif (snapshot.changedPaths?.length) {\n\t\tlines.push(`Changed paths: ${snapshot.changedPaths.slice(0, 8).join(\", \")}${snapshot.changedPaths.length > 8 ? `, +${snapshot.changedPaths.length - 8} more` : \"\"}`);\n\t}\n\tif (snapshot.lastWarning) {\n\t\tlines.push(`Last warning: ${snapshot.lastWarning.severity} · ${snapshot.lastWarning.state ?? \"candidate\"} · ${snapshot.lastWarning.summary}`);\n\t}\n\tif (snapshot.lastError) lines.push(`Last error: ${snapshot.lastError}`);\n\tif (!snapshot.configOk) {\n\t\tlines.push(\"\", \"Config errors:\", ...snapshot.errors.map((error) => `- ${error.message}`), \"Watchdog is disabled until the config is fixed.\");\n\t} else {\n\t\tlines.push(\"\", \"Config: ok\");\n\t}\n\tlines.push(\n\t\t\"Sources:\",\n\t\t...snapshot.sources.map(sourceLine),\n\t\t\"\",\n\t\t\"Model commands:\",\n\t\t\"- /subagents-watchdog recommend-model\",\n\t\t\"- /subagents-watchdog model recommended\",\n\t\t\"- /subagents-watchdog model <provider/model[:thinking]>\",\n\t\t\"- /subagents-watchdog model inherit\",\n\t\t\"- /subagents-watchdog session model recommended\",\n\t\t\"Configure via /subagents-watchdog or /settings; agent watchdog.configure is not available.\",\n\t);\n\treturn lines.join(\"\\n\");\n}\n\nfunction parseTestCommand(input: string): { severity: \"concern\" | \"blocker\"; text: string } | undefined {\n\tconst match = input.match(/^test\\s+(concern|blocker)\\s+([\\s\\S]+)$/);\n\tif (!match) return undefined;\n\treturn { severity: match[1] as \"concern\" | \"blocker\", text: match[2]!.trim() };\n}\n\nfunction formatThinking(value: ThinkingLevel | false | undefined): string {\n\tif (value === undefined) return \"inherit\";\n\treturn value === false ? \"off\" : value;\n}\n\nfunction parseThinkingCommand(raw: string): ThinkingLevel | false | null {\n\tconst value = raw.trim();\n\tif (value === \"inherit\") return null;\n\treturn parseWatchdogThinkingInput(value, \"/subagents-watchdog thinking\") ?? null;\n}\n\nfunction resolveModelCommandValue(ctx: ExtensionCommandContext, raw: string): { model: string | null; thinking: ThinkingLevel | false | null; description: string } {\n\tconst value = raw.trim();\n\tif (!value) throw new Error(\"Expected a model, 'recommended', or 'inherit'.\");\n\tif (value === \"inherit\") return { model: null, thinking: null, description: \"current session model and thinking\" };\n\tif (value === \"recommended\") {\n\t\tconst recommendation = recommendStrongWatchdogModel(ctx as ExtensionContext);\n\t\treturn {\n\t\t\tmodel: recommendation.model,\n\t\t\tthinking: recommendation.thinking,\n\t\t\tdescription: `${recommendation.model}:${recommendation.thinking} (${recommendation.label})`,\n\t\t};\n\t}\n\tconst resolved = resolveWatchdogModelInput(ctx as ExtensionContext, value);\n\treturn {\n\t\tmodel: resolved.model,\n\t\tthinking: resolved.thinking,\n\t\tdescription: `${resolved.model}${resolved.thinking ? `:${resolved.thinking}` : \"\"}`,\n\t};\n}\n\nfunction buildRecommendationText(ctx: ExtensionCommandContext): string {\n\tconst recommendation = recommendStrongWatchdogModel(ctx as ExtensionContext);\n\treturn [\n\t\t\"Subagent watchdog recommended model\",\n\t\t`Current session: ${currentSessionModelLine(ctx as ExtensionContext)}`,\n\t\t`Recommended: ${recommendation.model}:${recommendation.thinking}`,\n\t\t`Reason: ${recommendation.reason}`,\n\t\t\"\",\n\t\t\"Apply for this session:\",\n\t\t\"/subagents-watchdog session model recommended\",\n\t\t\"\",\n\t\t\"Save as your user default:\",\n\t\t\"/subagents-watchdog model recommended\",\n\t].join(\"\\n\");\n}\n\nfunction buildCheckText(runtime: MainWatchdogRuntime, ctx: ExtensionCommandContext): string {\n\tconst snapshot = runtime.getSnapshot(ctx.cwd);\n\tif (!snapshot.configOk) {\n\t\treturn [\"Subagent watchdog config check\", \"\", \"Config errors:\", ...snapshot.errors.map((error) => `- ${error.message}`)].join(\"\\n\");\n\t}\n\tconst lines = [\"Subagent watchdog config check\", \"\", \"Config: ok\"];\n\tif (snapshot.config.main.model) {\n\t\tconst resolved = resolveWatchdogModelInput(ctx as ExtensionContext, snapshot.config.main.model);\n\t\tlines.push(`Main model: ${resolved.model} auth ok`);\n\t} else {\n\t\tlines.push(`Main model: ${currentSessionModelLine(ctx as ExtensionContext)}`);\n\t}\n\tlines.push(`Main thinking: ${mainThinkingLine(snapshot, ctx as ExtensionContext)}`);\n\tlines.push(lspLine(snapshot));\n\ttry {\n\t\tconst recommendation = recommendStrongWatchdogModel(ctx as ExtensionContext);\n\t\tlines.push(`Recommended strong watchdog: ${recommendation.model}:${recommendation.thinking}`);\n\t} catch (error) {\n\t\tlines.push(`Recommended strong watchdog: unavailable (${messageFromError(error)})`);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nfunction createTestWarning(severity: \"concern\" | \"blocker\", text: string): WatchdogWarning {\n\treturn {\n\t\tseverity,\n\t\tcategory: \"other\",\n\t\tconfidence: \"high\",\n\t\tsource: \"main\",\n\t\tstate: \"displayed\",\n\t\tsummary: text,\n\t\tevidence: `Manual /subagents-watchdog test ${severity} message from the main session.`,\n\t\trecommendedAction: severity === \"blocker\"\n\t\t\t? \"Verify the renderer and transcript delivery; no automatic follow-up is queued in Gate 1B.\"\n\t\t\t: \"Verify the renderer and transcript delivery; decide manually whether any action is needed.\",\n\t};\n}\n\nasync function handleWatchdogCommand(\n\tpi: ExtensionAPI,\n\truntime: MainWatchdogRuntime,\n\targs: string,\n\tctx: ExtensionCommandContext,\n): Promise<void> {\n\tconst input = args.trim();\n\tif (!input || input === \"status\") {\n\t\tsendSlashText(pi, buildWatchdogStatus(runtime.getSnapshot(ctx.cwd), ctx));\n\t\treturn;\n\t}\n\tif (input === \"recommend-model\") {\n\t\ttry {\n\t\t\tsendSlashText(pi, buildRecommendationText(ctx));\n\t\t} catch (error) {\n\t\t\tsendSlashText(pi, `Subagent watchdog recommended model\\n\\n${messageFromError(error)}`);\n\t\t}\n\t\treturn;\n\t}\n\tif (input === \"check\") {\n\t\ttry {\n\t\t\tsendSlashText(pi, buildCheckText(runtime, ctx));\n\t\t} catch (error) {\n\t\t\tsendSlashText(pi, `Subagent watchdog config check\\n\\n${messageFromError(error)}`);\n\t\t}\n\t\treturn;\n\t}\n\tif (input === \"on\" || input === \"off\") {\n\t\tconst enabled = input === \"on\";\n\t\ttry {\n\t\t\tconst settingsPath = writeUserWatchdogEnabled(enabled);\n\t\t\tconst snapshot = runtime.getSnapshot(ctx.cwd);\n\t\t\tsendSlashText(pi, [\n\t\t\t\t`Subagent watchdog ${boolLabel(enabled)} saved to user settings.`,\n\t\t\t\t`Updated: ${settingsPath}`,\n\t\t\t\t`Main now: ${boolLabel(snapshot.enabled)}${snapshot.sessionOverride !== undefined ? ` (session override ${boolLabel(snapshot.sessionOverride)})` : \"\"}`,\n\t\t\t].join(\"\\n\"));\n\t\t} catch (error) {\n\t\t\tsendSlashText(pi, `Subagent watchdog\\n\\nCould not update ${getWatchdogUserSettingsPath()}: ${messageFromError(error)}`);\n\t\t}\n\t\treturn;\n\t}\n\tif (input === \"session on\" || input === \"session off\") {\n\t\tconst enabled = input.endsWith(\"on\");\n\t\tconst snapshot = runtime.setSessionEnabled(enabled, ctx.cwd);\n\t\tsendSlashText(pi, [\n\t\t\t`Subagent watchdog session override: ${boolLabel(enabled)}.`,\n\t\t\t\"No settings files were changed.\",\n\t\t\t\"\",\n\t\t\tbuildWatchdogStatus(snapshot, ctx),\n\t\t].join(\"\\n\"));\n\t\treturn;\n\t}\n\tif (input.startsWith(\"session model \")) {\n\t\tconst rawModel = input.slice(\"session model \".length);\n\t\ttry {\n\t\t\tconst value = resolveModelCommandValue(ctx, rawModel);\n\t\t\tconst snapshot = value.model === null\n\t\t\t\t? runtime.clearSessionModel(ctx.cwd)\n\t\t\t\t: runtime.setSessionModel({ model: value.model, thinking: value.thinking ?? null }, ctx.cwd);\n\t\t\tsendSlashText(pi, [\n\t\t\t\t`Subagent watchdog session model: ${value.description}.`,\n\t\t\t\t\"No settings files were changed.\",\n\t\t\t\t\"\",\n\t\t\t\tbuildWatchdogStatus(snapshot, ctx),\n\t\t\t].join(\"\\n\"));\n\t\t} catch (error) {\n\t\t\tsendSlashText(pi, `Subagent watchdog session model\\n\\n${messageFromError(error)}`);\n\t\t}\n\t\treturn;\n\t}\n\tif (input.startsWith(\"model \")) {\n\t\tconst rawModel = input.slice(\"model \".length);\n\t\ttry {\n\t\t\tconst value = resolveModelCommandValue(ctx, rawModel);\n\t\t\tconst settingsPath = writeWatchdogModelSettings({\n\t\t\t\tscope: \"user\",\n\t\t\t\ttarget: { kind: \"main\" },\n\t\t\t\tmodel: value.model,\n\t\t\t\tthinking: value.thinking,\n\t\t\t});\n\t\t\truntime.refreshConfig(ctx.cwd);\n\t\t\tconst snapshot = runtime.getSnapshot(ctx.cwd);\n\t\t\tsendSlashText(pi, [\n\t\t\t\t`Subagent watchdog model saved: ${value.description}.`,\n\t\t\t\t`Updated: ${settingsPath}`,\n\t\t\t\t`Main now: ${boolLabel(snapshot.enabled)}`,\n\t\t\t\tvalue.model === null ? \"The watchdog now inherits the current session model and thinking.\" : \"Run /subagents-watchdog on if the watchdog is still off.\",\n\t\t\t\t\"\",\n\t\t\t\tbuildWatchdogStatus(snapshot, ctx),\n\t\t\t].join(\"\\n\"));\n\t\t} catch (error) {\n\t\t\tsendSlashText(pi, `Subagent watchdog model\\n\\n${messageFromError(error)}\\nNo settings files were changed.`);\n\t\t}\n\t\treturn;\n\t}\n\tif (input.startsWith(\"thinking \")) {\n\t\tconst rawThinking = input.slice(\"thinking \".length);\n\t\ttry {\n\t\t\tconst thinking = parseThinkingCommand(rawThinking);\n\t\t\tconst settingsPath = writeWatchdogModelSettings({\n\t\t\t\tscope: \"user\",\n\t\t\t\ttarget: { kind: \"main\" },\n\t\t\t\tthinking,\n\t\t\t});\n\t\t\truntime.refreshConfig(ctx.cwd);\n\t\t\tsendSlashText(pi, [\n\t\t\t\t`Subagent watchdog thinking saved: ${formatThinking(thinking ?? undefined)}.`,\n\t\t\t\t`Updated: ${settingsPath}`,\n\t\t\t\t\"\",\n\t\t\t\tbuildWatchdogStatus(runtime.getSnapshot(ctx.cwd), ctx),\n\t\t\t].join(\"\\n\"));\n\t\t} catch (error) {\n\t\t\tsendSlashText(pi, `Subagent watchdog thinking\\n\\n${messageFromError(error)}\\nNo settings files were changed.`);\n\t\t}\n\t\treturn;\n\t}\n\tconst test = parseTestCommand(input);\n\tif (test) {\n\t\tif (!test.text) {\n\t\t\tctx.ui.notify(\"Usage: /subagents-watchdog test concern|blocker <text>\", \"error\");\n\t\t\treturn;\n\t\t}\n\t\tconst warning = createTestWarning(test.severity, test.text);\n\t\tconst details = runtime.recordDisplayedWarning(warning);\n\t\tpi.sendMessage(createWatchdogWarningMessage(details, { display: true, details }));\n\t\treturn;\n\t}\n\tctx.ui.notify(`Usage: /subagents-watchdog [status|on|off|session on|session off|recommend-model|model recommended|model <provider/model[:thinking]>|model inherit|thinking ${THINKING_LEVELS.join(\"|\")}|thinking inherit|session model recommended|check|test concern <text>|test blocker <text>]`, \"error\");\n}\n\nexport function registerMainWatchdog(pi: ExtensionAPI, options: RegisterMainWatchdogOptions = {}): MainWatchdogRuntime {\n\tlet currentContext: ExtensionContext | undefined;\n\tconst rememberContext = (ctx: ExtensionContext) => {\n\t\tcurrentContext = ctx;\n\t};\n\tconst runtime = options.runtime ?? new MainWatchdogRuntime({\n\t\treview: options.review ?? createMainWatchdogReview(() => currentContext, { getThinkingLevel: () => pi.getThinkingLevel() }),\n\t\treviewDescription: options.review ? \"injected seam\" : \"real model review\",\n\t\treviewChangesOnly: true,\n\t\tdisplayWarning: (details) => {\n\t\t\tpi.sendMessage(createWatchdogWarningMessage(details, { display: true, details }));\n\t\t},\n\t});\n\n\tpi.registerMessageRenderer<WatchdogWarningDetails>(SUBAGENT_WATCHDOG_WARNING_TYPE, (message, renderOptions, theme) => {\n\t\tconst details = message.details as WatchdogWarningDetails | undefined;\n\t\tif (!details?.summary || !details.evidence || !details.recommendedAction) {\n\t\t\tconst content = typeof message.content === \"string\"\n\t\t\t\t? message.content\n\t\t\t\t: message.content.filter((entry) => entry.type === \"text\").map((entry) => entry.text).join(\"\\n\");\n\t\t\treturn new Text(content, 0, 0);\n\t\t}\n\t\treturn renderWatchdogWarning(details, renderOptions, theme);\n\t});\n\n\tpi.registerCommand(\"subagents-watchdog\", {\n\t\tdescription: \"Show or toggle the default-off subagent watchdog\",\n\t\thandler: (args, ctx) => {\n\t\t\trememberContext(ctx);\n\t\t\treturn handleWatchdogCommand(pi, runtime, args, ctx);\n\t\t},\n\t});\n\n\tpi.on(\"session_start\", (_event, ctx) => {\n\t\trememberContext(ctx);\n\t\truntime.bindSession(ctx);\n\t});\n\tpi.on(\"before_agent_start\", (event, ctx) => {\n\t\trememberContext(ctx);\n\t\truntime.handleBeforeAgentStart(event, ctx);\n\t});\n\tpi.on(\"turn_end\", (event, ctx) => {\n\t\trememberContext(ctx);\n\t\truntime.handleTurnEnd(event, ctx);\n\t});\n\tpi.on(\"agent_end\", (event, ctx) => {\n\t\trememberContext(ctx);\n\t\treturn runtime.handleAgentEnd(event, ctx);\n\t});\n\tpi.on(\"session_before_switch\", () => runtime.reset(\"session switch\", { clearReviewInputSignature: true, clearLspLedger: true }));\n\tpi.on(\"session_before_fork\", () => runtime.reset(\"session fork\", { clearReviewInputSignature: true, clearLspLedger: true }));\n\tpi.on(\"session_compact\", () => runtime.reset(\"session compact\"));\n\tpi.on(\"session_shutdown\", () => {\n\t\tcurrentContext = undefined;\n\t\truntime.dispose();\n\t});\n\n\treturn runtime;\n}\n"]}
|
|
@@ -2,17 +2,6 @@ import type { AgentToolResult } from "@ashx-j/lunr-agent";
|
|
|
2
2
|
import type { ExtensionContext } from "@ashx-j/lunr-dev";
|
|
3
3
|
import type { Details } from "../shared/types.ts";
|
|
4
4
|
import type { MainWatchdogRuntime } from "./runtime.ts";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
scope?: string;
|
|
8
|
-
target?: string;
|
|
9
|
-
agent?: string;
|
|
10
|
-
model?: string;
|
|
11
|
-
thinking?: string | false;
|
|
12
|
-
cwd?: string;
|
|
13
|
-
}
|
|
14
|
-
export declare function handleWatchdogToolAction(action: string, params: WatchdogToolParams, ctx: ExtensionContext, runtime?: MainWatchdogRuntime): AgentToolResult<Details>;
|
|
15
|
-
export declare const WATCHDOG_TOOL_ACTIONS: readonly ["watchdog.status", "watchdog.check", "watchdog.configure", "watchdog.recommend-model"];
|
|
16
|
-
export declare const WATCHDOG_THINKING_VALUES: readonly ["inherit", "off", "minimal", "low", "medium", "high", "xhigh", "max"];
|
|
17
|
-
export {};
|
|
5
|
+
export declare function handleWatchdogToolAction(action: string, _params: unknown, ctx: ExtensionContext, runtime?: MainWatchdogRuntime): AgentToolResult<Details>;
|
|
6
|
+
export declare const WATCHDOG_TOOL_ACTIONS: readonly ["watchdog.status", "watchdog.check", "watchdog.recommend-model"];
|
|
18
7
|
//# sourceMappingURL=tool-actions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-actions.d.ts","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/watchdog/tool-actions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"tool-actions.d.ts","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/watchdog/tool-actions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAGlD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AA6CxD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,eAAe,CAAC,OAAO,CAAC,CAYzJ;AAED,eAAO,MAAM,qBAAqB,4EAA6E,CAAC","sourcesContent":["// @ts-nocheck\nimport type { AgentToolResult } from \"@ashx-j/lunr-agent\";\nimport type { ExtensionContext } from \"@ashx-j/lunr-dev\";\nimport type { Details } from \"../shared/types.ts\";\nimport { recommendStrongWatchdogModel, resolveWatchdogModelInput } from \"./model-selection.ts\";\nimport { buildWatchdogStatus } from \"./register-main.ts\";\nimport type { MainWatchdogRuntime } from \"./runtime.ts\";\n\nfunction result(text: string, isError = false): AgentToolResult<Details> {\n\treturn {\n\t\tcontent: [{ type: \"text\", text }],\n\t\t...(isError ? { isError: true } : {}),\n\t\tdetails: { mode: \"management\", results: [] },\n\t};\n}\n\nfunction messageFromError(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction buildRecommendationText(ctx: ExtensionContext): string {\n\tconst recommendation = recommendStrongWatchdogModel(ctx);\n\treturn [\n\t\t\"Subagent watchdog recommended model\",\n\t\t`Recommended: ${recommendation.model}:${recommendation.thinking}`,\n\t\t`Reason: ${recommendation.reason}`,\n\t\t\"Watchdog settings are user-managed through /subagents-watchdog.\",\n\t].join(\"\\n\");\n}\n\nfunction buildCheckText(runtime: MainWatchdogRuntime | undefined, ctx: ExtensionContext): string {\n\tif (!runtime) return \"Subagent watchdog runtime is unavailable.\";\n\tconst snapshot = runtime.getSnapshot(ctx.cwd);\n\tif (!snapshot.configOk) return [\"Subagent watchdog config check\", \"Config errors:\", ...snapshot.errors.map((error) => `- ${error.message}`)].join(\"\\n\");\n\tconst lines = [\"Subagent watchdog config check\", \"Config: ok\"];\n\tif (snapshot.config.main.model) {\n\t\tconst resolved = resolveWatchdogModelInput(ctx, snapshot.config.main.model);\n\t\tlines.push(`Main model: ${resolved.model} auth ok`);\n\t} else {\n\t\tlines.push(\"Main model: current session\");\n\t}\n\tlines.push(`LSP diagnostics: ${snapshot.lsp.enabled ? \"on\" : \"off\"} · ${snapshot.lsp.status}`);\n\ttry {\n\t\tconst recommendation = recommendStrongWatchdogModel(ctx);\n\t\tlines.push(`Recommended strong watchdog: ${recommendation.model}:${recommendation.thinking}`);\n\t} catch (error) {\n\t\tlines.push(`Recommended strong watchdog unavailable: ${messageFromError(error)}`);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nexport function handleWatchdogToolAction(action: string, _params: unknown, ctx: ExtensionContext, runtime?: MainWatchdogRuntime): AgentToolResult<Details> {\n\ttry {\n\t\tif (action === \"watchdog.status\") {\n\t\t\tif (!runtime) return result(\"Subagent watchdog runtime is unavailable.\", true);\n\t\t\treturn result(buildWatchdogStatus(runtime.getSnapshot(ctx.cwd), ctx));\n\t\t}\n\t\tif (action === \"watchdog.recommend-model\") return result(buildRecommendationText(ctx));\n\t\tif (action === \"watchdog.check\") return result(buildCheckText(runtime, ctx));\n\t\treturn result(`Unknown watchdog action: ${action}`, true);\n\t} catch (error) {\n\t\treturn result(`Subagent watchdog action failed: ${messageFromError(error)}`, true);\n\t}\n}\n\nexport const WATCHDOG_TOOL_ACTIONS = [\"watchdog.status\", \"watchdog.check\", \"watchdog.recommend-model\"] as const;\n"]}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { recommendStrongWatchdogModel, resolveWatchdogModelInput } from "./model-selection.js";
|
|
2
2
|
import { buildWatchdogStatus } from "./register-main.js";
|
|
3
|
-
import { parseWatchdogThinkingInput, recommendStrongWatchdogModel, resolveWatchdogModelInput } from "./model-selection.js";
|
|
4
|
-
import { writeWatchdogModelSettings } from "./settings.js";
|
|
5
3
|
function result(text, isError = false) {
|
|
6
4
|
return {
|
|
7
5
|
content: [{ type: "text", text }],
|
|
@@ -12,66 +10,13 @@ function result(text, isError = false) {
|
|
|
12
10
|
function messageFromError(error) {
|
|
13
11
|
return error instanceof Error ? error.message : String(error);
|
|
14
12
|
}
|
|
15
|
-
function parseScope(raw) {
|
|
16
|
-
if (raw === undefined || raw === "session")
|
|
17
|
-
return "session";
|
|
18
|
-
if (raw === "user" || raw === "project")
|
|
19
|
-
return raw;
|
|
20
|
-
throw new Error("watchdog.configure scope must be 'session', 'user', or 'project'.");
|
|
21
|
-
}
|
|
22
|
-
function parseTarget(params) {
|
|
23
|
-
const target = params.target ?? "main";
|
|
24
|
-
if (target === "main")
|
|
25
|
-
return { kind: "main" };
|
|
26
|
-
if (target === "children")
|
|
27
|
-
return { kind: "children" };
|
|
28
|
-
if (target === "child") {
|
|
29
|
-
if (!params.agent?.trim())
|
|
30
|
-
throw new Error("watchdog.configure target='child' requires agent.");
|
|
31
|
-
return { kind: "child", agent: params.agent.trim() };
|
|
32
|
-
}
|
|
33
|
-
throw new Error("watchdog.configure target must be 'main', 'children', or 'child'.");
|
|
34
|
-
}
|
|
35
|
-
function parseThinking(raw) {
|
|
36
|
-
if (raw === undefined)
|
|
37
|
-
return undefined;
|
|
38
|
-
if (raw === "inherit")
|
|
39
|
-
return null;
|
|
40
|
-
return parseWatchdogThinkingInput(raw, "watchdog.configure thinking") ?? undefined;
|
|
41
|
-
}
|
|
42
|
-
function resolveConfiguredValue(ctx, params) {
|
|
43
|
-
const thinking = parseThinking(params.thinking);
|
|
44
|
-
const rawModel = params.model?.trim();
|
|
45
|
-
if (!rawModel) {
|
|
46
|
-
if (thinking === undefined)
|
|
47
|
-
throw new Error("watchdog.configure requires model, thinking, or both.");
|
|
48
|
-
return { thinking, description: `thinking ${thinking === null ? "inherit" : thinking === false ? "off" : thinking}` };
|
|
49
|
-
}
|
|
50
|
-
if (rawModel === "inherit")
|
|
51
|
-
return { model: null, thinking: thinking ?? null, description: "inherit" };
|
|
52
|
-
if (rawModel === "recommended") {
|
|
53
|
-
const recommendation = recommendStrongWatchdogModel(ctx);
|
|
54
|
-
return {
|
|
55
|
-
model: recommendation.model,
|
|
56
|
-
thinking: recommendation.thinking,
|
|
57
|
-
description: `${recommendation.model}:${recommendation.thinking}`,
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
const resolved = resolveWatchdogModelInput(ctx, rawModel);
|
|
61
|
-
return {
|
|
62
|
-
model: resolved.model,
|
|
63
|
-
thinking: resolved.thinking ?? thinking,
|
|
64
|
-
description: `${resolved.model}${resolved.thinking ?? thinking ? `:${resolved.thinking ?? thinking}` : ""}`,
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
13
|
function buildRecommendationText(ctx) {
|
|
68
14
|
const recommendation = recommendStrongWatchdogModel(ctx);
|
|
69
15
|
return [
|
|
70
16
|
"Subagent watchdog recommended model",
|
|
71
17
|
`Recommended: ${recommendation.model}:${recommendation.thinking}`,
|
|
72
18
|
`Reason: ${recommendation.reason}`,
|
|
73
|
-
"
|
|
74
|
-
"Persist with scope: \"project\" or scope: \"user\" only when the user asks for that scope.",
|
|
19
|
+
"Watchdog settings are user-managed through /subagents-watchdog.",
|
|
75
20
|
].join("\n");
|
|
76
21
|
}
|
|
77
22
|
function buildCheckText(runtime, ctx) {
|
|
@@ -98,7 +43,7 @@ function buildCheckText(runtime, ctx) {
|
|
|
98
43
|
}
|
|
99
44
|
return lines.join("\n");
|
|
100
45
|
}
|
|
101
|
-
export function handleWatchdogToolAction(action,
|
|
46
|
+
export function handleWatchdogToolAction(action, _params, ctx, runtime) {
|
|
102
47
|
try {
|
|
103
48
|
if (action === "watchdog.status") {
|
|
104
49
|
if (!runtime)
|
|
@@ -109,42 +54,11 @@ export function handleWatchdogToolAction(action, params, ctx, runtime) {
|
|
|
109
54
|
return result(buildRecommendationText(ctx));
|
|
110
55
|
if (action === "watchdog.check")
|
|
111
56
|
return result(buildCheckText(runtime, ctx));
|
|
112
|
-
|
|
113
|
-
return result(`Unknown watchdog action: ${action}`, true);
|
|
114
|
-
const scope = parseScope(params.scope);
|
|
115
|
-
const target = parseTarget(params);
|
|
116
|
-
const value = resolveConfiguredValue(ctx, params);
|
|
117
|
-
if (scope === "session") {
|
|
118
|
-
if (!runtime)
|
|
119
|
-
return result("Subagent watchdog runtime is unavailable.", true);
|
|
120
|
-
if (target.kind !== "main")
|
|
121
|
-
return result("Session-scoped watchdog.configure currently supports target='main' only.", true);
|
|
122
|
-
runtime.setSessionModel({ model: value.model, thinking: value.thinking }, ctx.cwd);
|
|
123
|
-
return result([
|
|
124
|
-
`Subagent watchdog session model configured: ${value.description}.`,
|
|
125
|
-
"No settings files were changed.",
|
|
126
|
-
"",
|
|
127
|
-
buildWatchdogStatus(runtime.getSnapshot(ctx.cwd), ctx),
|
|
128
|
-
].join("\n"));
|
|
129
|
-
}
|
|
130
|
-
const settingsPath = writeWatchdogModelSettings({
|
|
131
|
-
scope,
|
|
132
|
-
cwd: ctx.cwd,
|
|
133
|
-
target,
|
|
134
|
-
model: value.model,
|
|
135
|
-
thinking: value.thinking,
|
|
136
|
-
});
|
|
137
|
-
runtime?.refreshConfig(ctx.cwd);
|
|
138
|
-
const targetLabel = target.kind === "child" ? `child ${target.agent}` : target.kind;
|
|
139
|
-
return result([
|
|
140
|
-
`Subagent watchdog ${targetLabel} model configured: ${value.description}.`,
|
|
141
|
-
`Updated: ${settingsPath}`,
|
|
142
|
-
].join("\n"));
|
|
57
|
+
return result(`Unknown watchdog action: ${action}`, true);
|
|
143
58
|
}
|
|
144
59
|
catch (error) {
|
|
145
60
|
return result(`Subagent watchdog action failed: ${messageFromError(error)}`, true);
|
|
146
61
|
}
|
|
147
62
|
}
|
|
148
|
-
export const WATCHDOG_TOOL_ACTIONS = ["watchdog.status", "watchdog.check", "watchdog.
|
|
149
|
-
export const WATCHDOG_THINKING_VALUES = ["inherit", ...THINKING_LEVELS];
|
|
63
|
+
export const WATCHDOG_TOOL_ACTIONS = ["watchdog.status", "watchdog.check", "watchdog.recommend-model"];
|
|
150
64
|
//# sourceMappingURL=tool-actions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-actions.js","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/watchdog/tool-actions.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport type { AgentToolResult } from \"@ashx-j/lunr-agent\";\nimport type { ExtensionContext } from \"@ashx-j/lunr-dev\";\nimport { THINKING_LEVELS, type ThinkingLevel } from \"../shared/model-info.ts\";\nimport type { Details } from \"../shared/types.ts\";\nimport { buildWatchdogStatus } from \"./register-main.ts\";\nimport type { MainWatchdogRuntime } from \"./runtime.ts\";\nimport { parseWatchdogThinkingInput, recommendStrongWatchdogModel, resolveWatchdogModelInput } from \"./model-selection.ts\";\nimport { writeWatchdogModelSettings, type WatchdogModelSettingsTarget, type WatchdogSettingsWriteScope } from \"./settings.ts\";\n\ninterface WatchdogToolParams {\n\taction?: string;\n\tscope?: string;\n\ttarget?: string;\n\tagent?: string;\n\tmodel?: string;\n\tthinking?: string | false;\n\tcwd?: string;\n}\n\nfunction result(text: string, isError = false): AgentToolResult<Details> {\n\treturn {\n\t\tcontent: [{ type: \"text\", text }],\n\t\t...(isError ? { isError: true } : {}),\n\t\tdetails: { mode: \"management\", results: [] },\n\t};\n}\n\nfunction messageFromError(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction parseScope(raw: string | undefined): \"session\" | WatchdogSettingsWriteScope {\n\tif (raw === undefined || raw === \"session\") return \"session\";\n\tif (raw === \"user\" || raw === \"project\") return raw;\n\tthrow new Error(\"watchdog.configure scope must be 'session', 'user', or 'project'.\");\n}\n\nfunction parseTarget(params: WatchdogToolParams): WatchdogModelSettingsTarget {\n\tconst target = params.target ?? \"main\";\n\tif (target === \"main\") return { kind: \"main\" };\n\tif (target === \"children\") return { kind: \"children\" };\n\tif (target === \"child\") {\n\t\tif (!params.agent?.trim()) throw new Error(\"watchdog.configure target='child' requires agent.\");\n\t\treturn { kind: \"child\", agent: params.agent.trim() };\n\t}\n\tthrow new Error(\"watchdog.configure target must be 'main', 'children', or 'child'.\");\n}\n\nfunction parseThinking(raw: string | false | undefined): ThinkingLevel | false | null | undefined {\n\tif (raw === undefined) return undefined;\n\tif (raw === \"inherit\") return null;\n\treturn parseWatchdogThinkingInput(raw, \"watchdog.configure thinking\") ?? undefined;\n}\n\nfunction resolveConfiguredValue(ctx: ExtensionContext, params: WatchdogToolParams): { model?: string | null; thinking?: ThinkingLevel | false | null; description: string } {\n\tconst thinking = parseThinking(params.thinking);\n\tconst rawModel = params.model?.trim();\n\tif (!rawModel) {\n\t\tif (thinking === undefined) throw new Error(\"watchdog.configure requires model, thinking, or both.\");\n\t\treturn { thinking, description: `thinking ${thinking === null ? \"inherit\" : thinking === false ? \"off\" : thinking}` };\n\t}\n\tif (rawModel === \"inherit\") return { model: null, thinking: thinking ?? null, description: \"inherit\" };\n\tif (rawModel === \"recommended\") {\n\t\tconst recommendation = recommendStrongWatchdogModel(ctx);\n\t\treturn {\n\t\t\tmodel: recommendation.model,\n\t\t\tthinking: recommendation.thinking,\n\t\t\tdescription: `${recommendation.model}:${recommendation.thinking}`,\n\t\t};\n\t}\n\tconst resolved = resolveWatchdogModelInput(ctx, rawModel);\n\treturn {\n\t\tmodel: resolved.model,\n\t\tthinking: resolved.thinking ?? thinking,\n\t\tdescription: `${resolved.model}${resolved.thinking ?? thinking ? `:${resolved.thinking ?? thinking}` : \"\"}`,\n\t};\n}\n\nfunction buildRecommendationText(ctx: ExtensionContext): string {\n\tconst recommendation = recommendStrongWatchdogModel(ctx);\n\treturn [\n\t\t\"Subagent watchdog recommended model\",\n\t\t`Recommended: ${recommendation.model}:${recommendation.thinking}`,\n\t\t`Reason: ${recommendation.reason}`,\n\t\t\"Apply temporarily with subagent({ action: \\\"watchdog.configure\\\", scope: \\\"session\\\", model: \\\"recommended\\\" }).\",\n\t\t\"Persist with scope: \\\"project\\\" or scope: \\\"user\\\" only when the user asks for that scope.\",\n\t].join(\"\\n\");\n}\n\nfunction buildCheckText(runtime: MainWatchdogRuntime | undefined, ctx: ExtensionContext): string {\n\tif (!runtime) return \"Subagent watchdog runtime is unavailable.\";\n\tconst snapshot = runtime.getSnapshot(ctx.cwd);\n\tif (!snapshot.configOk) return [\"Subagent watchdog config check\", \"Config errors:\", ...snapshot.errors.map((error) => `- ${error.message}`)].join(\"\\n\");\n\tconst lines = [\"Subagent watchdog config check\", \"Config: ok\"];\n\tif (snapshot.config.main.model) {\n\t\tconst resolved = resolveWatchdogModelInput(ctx, snapshot.config.main.model);\n\t\tlines.push(`Main model: ${resolved.model} auth ok`);\n\t} else {\n\t\tlines.push(\"Main model: current session\");\n\t}\n\tlines.push(`LSP diagnostics: ${snapshot.lsp.enabled ? \"on\" : \"off\"} · ${snapshot.lsp.status}`);\n\ttry {\n\t\tconst recommendation = recommendStrongWatchdogModel(ctx);\n\t\tlines.push(`Recommended strong watchdog: ${recommendation.model}:${recommendation.thinking}`);\n\t} catch (error) {\n\t\tlines.push(`Recommended strong watchdog unavailable: ${messageFromError(error)}`);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nexport function handleWatchdogToolAction(action: string, params: WatchdogToolParams, ctx: ExtensionContext, runtime?: MainWatchdogRuntime): AgentToolResult<Details> {\n\ttry {\n\t\tif (action === \"watchdog.status\") {\n\t\t\tif (!runtime) return result(\"Subagent watchdog runtime is unavailable.\", true);\n\t\t\treturn result(buildWatchdogStatus(runtime.getSnapshot(ctx.cwd), ctx));\n\t\t}\n\t\tif (action === \"watchdog.recommend-model\") return result(buildRecommendationText(ctx));\n\t\tif (action === \"watchdog.check\") return result(buildCheckText(runtime, ctx));\n\t\tif (action !== \"watchdog.configure\") return result(`Unknown watchdog action: ${action}`, true);\n\n\t\tconst scope = parseScope(params.scope);\n\t\tconst target = parseTarget(params);\n\t\tconst value = resolveConfiguredValue(ctx, params);\n\t\tif (scope === \"session\") {\n\t\t\tif (!runtime) return result(\"Subagent watchdog runtime is unavailable.\", true);\n\t\t\tif (target.kind !== \"main\") return result(\"Session-scoped watchdog.configure currently supports target='main' only.\", true);\n\t\t\truntime.setSessionModel({ model: value.model, thinking: value.thinking }, ctx.cwd);\n\t\t\treturn result([\n\t\t\t\t`Subagent watchdog session model configured: ${value.description}.`,\n\t\t\t\t\"No settings files were changed.\",\n\t\t\t\t\"\",\n\t\t\t\tbuildWatchdogStatus(runtime.getSnapshot(ctx.cwd), ctx),\n\t\t\t].join(\"\\n\"));\n\t\t}\n\n\t\tconst settingsPath = writeWatchdogModelSettings({\n\t\t\tscope,\n\t\t\tcwd: ctx.cwd,\n\t\t\ttarget,\n\t\t\tmodel: value.model,\n\t\t\tthinking: value.thinking,\n\t\t});\n\t\truntime?.refreshConfig(ctx.cwd);\n\t\tconst targetLabel = target.kind === \"child\" ? `child ${target.agent}` : target.kind;\n\t\treturn result([\n\t\t\t`Subagent watchdog ${targetLabel} model configured: ${value.description}.`,\n\t\t\t`Updated: ${settingsPath}`,\n\t\t].join(\"\\n\"));\n\t} catch (error) {\n\t\treturn result(`Subagent watchdog action failed: ${messageFromError(error)}`, true);\n\t}\n}\n\nexport const WATCHDOG_TOOL_ACTIONS = [\"watchdog.status\", \"watchdog.check\", \"watchdog.configure\", \"watchdog.recommend-model\"] as const;\nexport const WATCHDOG_THINKING_VALUES = [\"inherit\", ...THINKING_LEVELS] as const;\n"]}
|
|
1
|
+
{"version":3,"file":"tool-actions.js","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/watchdog/tool-actions.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport type { AgentToolResult } from \"@ashx-j/lunr-agent\";\nimport type { ExtensionContext } from \"@ashx-j/lunr-dev\";\nimport type { Details } from \"../shared/types.ts\";\nimport { recommendStrongWatchdogModel, resolveWatchdogModelInput } from \"./model-selection.ts\";\nimport { buildWatchdogStatus } from \"./register-main.ts\";\nimport type { MainWatchdogRuntime } from \"./runtime.ts\";\n\nfunction result(text: string, isError = false): AgentToolResult<Details> {\n\treturn {\n\t\tcontent: [{ type: \"text\", text }],\n\t\t...(isError ? { isError: true } : {}),\n\t\tdetails: { mode: \"management\", results: [] },\n\t};\n}\n\nfunction messageFromError(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction buildRecommendationText(ctx: ExtensionContext): string {\n\tconst recommendation = recommendStrongWatchdogModel(ctx);\n\treturn [\n\t\t\"Subagent watchdog recommended model\",\n\t\t`Recommended: ${recommendation.model}:${recommendation.thinking}`,\n\t\t`Reason: ${recommendation.reason}`,\n\t\t\"Watchdog settings are user-managed through /subagents-watchdog.\",\n\t].join(\"\\n\");\n}\n\nfunction buildCheckText(runtime: MainWatchdogRuntime | undefined, ctx: ExtensionContext): string {\n\tif (!runtime) return \"Subagent watchdog runtime is unavailable.\";\n\tconst snapshot = runtime.getSnapshot(ctx.cwd);\n\tif (!snapshot.configOk) return [\"Subagent watchdog config check\", \"Config errors:\", ...snapshot.errors.map((error) => `- ${error.message}`)].join(\"\\n\");\n\tconst lines = [\"Subagent watchdog config check\", \"Config: ok\"];\n\tif (snapshot.config.main.model) {\n\t\tconst resolved = resolveWatchdogModelInput(ctx, snapshot.config.main.model);\n\t\tlines.push(`Main model: ${resolved.model} auth ok`);\n\t} else {\n\t\tlines.push(\"Main model: current session\");\n\t}\n\tlines.push(`LSP diagnostics: ${snapshot.lsp.enabled ? \"on\" : \"off\"} · ${snapshot.lsp.status}`);\n\ttry {\n\t\tconst recommendation = recommendStrongWatchdogModel(ctx);\n\t\tlines.push(`Recommended strong watchdog: ${recommendation.model}:${recommendation.thinking}`);\n\t} catch (error) {\n\t\tlines.push(`Recommended strong watchdog unavailable: ${messageFromError(error)}`);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nexport function handleWatchdogToolAction(action: string, _params: unknown, ctx: ExtensionContext, runtime?: MainWatchdogRuntime): AgentToolResult<Details> {\n\ttry {\n\t\tif (action === \"watchdog.status\") {\n\t\t\tif (!runtime) return result(\"Subagent watchdog runtime is unavailable.\", true);\n\t\t\treturn result(buildWatchdogStatus(runtime.getSnapshot(ctx.cwd), ctx));\n\t\t}\n\t\tif (action === \"watchdog.recommend-model\") return result(buildRecommendationText(ctx));\n\t\tif (action === \"watchdog.check\") return result(buildCheckText(runtime, ctx));\n\t\treturn result(`Unknown watchdog action: ${action}`, true);\n\t} catch (error) {\n\t\treturn result(`Subagent watchdog action failed: ${messageFromError(error)}`, true);\n\t}\n}\n\nexport const WATCHDOG_TOOL_ACTIONS = [\"watchdog.status\", \"watchdog.check\", \"watchdog.recommend-model\"] as const;\n"]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ImageContent } from "@ashx-j/lunr-ai";
|
|
2
|
+
export interface ImageRegion {
|
|
3
|
+
x: number;
|
|
4
|
+
y: number;
|
|
5
|
+
width: number;
|
|
6
|
+
height: number;
|
|
7
|
+
}
|
|
8
|
+
export declare function screenshotDimensions(image: ImageContent): {
|
|
9
|
+
width: number;
|
|
10
|
+
height: number;
|
|
11
|
+
};
|
|
12
|
+
export declare function prepareComputerImage(image: ImageContent, crop?: ImageRegion): Promise<{
|
|
13
|
+
image: {
|
|
14
|
+
type: "image";
|
|
15
|
+
data: string;
|
|
16
|
+
mimeType: string;
|
|
17
|
+
};
|
|
18
|
+
width: number;
|
|
19
|
+
height: number;
|
|
20
|
+
sourceWidth: number;
|
|
21
|
+
sourceHeight: number;
|
|
22
|
+
region: ImageRegion;
|
|
23
|
+
scaleX: number;
|
|
24
|
+
scaleY: number;
|
|
25
|
+
}>;
|
|
26
|
+
//# sourceMappingURL=image.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../../src/core/computer-use/image.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAI1D,MAAM,WAAW,WAAW;IAC3B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,YAAY,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAW3F;AAED,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,WAAW;;;;;;;;;;;;;GA8CjF","sourcesContent":["import type { ImageContent } from \"@ashx-j/lunr-ai\";\nimport { resizeImage } from \"../../utils/image-resize.ts\";\nimport { loadPhoton } from \"../../utils/photon.ts\";\n\nexport interface ImageRegion {\n\tx: number;\n\ty: number;\n\twidth: number;\n\theight: number;\n}\n\nexport function screenshotDimensions(image: ImageContent): { width: number; height: number } {\n\tif (image.mimeType !== \"image/png\" || image.data.length > 64 * 1024 * 1024)\n\t\tthrow new Error(\"Expected a bounded PNG screenshot.\");\n\tconst bytes = Buffer.from(image.data, \"base64\");\n\tif (bytes.length < 24 || !bytes.subarray(0, 8).equals(Buffer.from([137, 80, 78, 71, 13, 10, 26, 10])))\n\t\tthrow new Error(\"Invalid screenshot PNG.\");\n\tconst width = bytes.readUInt32BE(16);\n\tconst height = bytes.readUInt32BE(20);\n\tif (!width || !height || width > 16384 || height > 16384 || width * height > 40_000_000)\n\t\tthrow new Error(\"Screenshot dimensions exceed the supported capture budget.\");\n\treturn { width, height };\n}\n\nexport async function prepareComputerImage(image: ImageContent, crop?: ImageRegion) {\n\tconst source = screenshotDimensions(image);\n\tconst region = crop ?? { x: 0, y: 0, ...source };\n\tif (\n\t\t![region.x, region.y, region.width, region.height].every(Number.isInteger) ||\n\t\tregion.x < 0 || region.y < 0 || region.width < 1 || region.height < 1 ||\n\t\tregion.x + region.width > source.width || region.y + region.height > source.height\n\t) throw new Error(\"Crop is outside the captured image.\");\n\tlet bytes: Uint8Array = Buffer.from(image.data, \"base64\");\n\tif (crop) {\n\t\tconst photon = await loadPhoton();\n\t\tif (!photon) throw new Error(\"Image processing is unavailable; crop refused.\");\n\t\tconst original = photon.PhotonImage.new_from_byteslice(bytes);\n\t\ttry {\n\t\t\tif (original.get_width() !== source.width || original.get_height() !== source.height)\n\t\t\t\tthrow new Error(\"Decoded screenshot dimensions changed.\");\n\t\t\tconst cropped = photon.crop(original, region.x, region.y, region.x + region.width, region.y + region.height);\n\t\t\ttry {\n\t\t\t\tbytes = cropped.get_bytes();\n\t\t\t} finally {\n\t\t\t\tcropped.free();\n\t\t\t}\n\t\t} finally {\n\t\t\toriginal.free();\n\t\t}\n\t}\n\tconst ratio = Math.min(1, 1280 / Math.max(region.width, region.height), Math.sqrt(1_000_000 / (region.width * region.height)));\n\tconst resized = await resizeImage(bytes, \"image/png\", {\n\t\tmaxWidth: Math.max(1, Math.floor(region.width * ratio)),\n\t\tmaxHeight: Math.max(1, Math.floor(region.height * ratio)),\n\t\tmaxBytes: 1.5 * 1024 * 1024,\n\t});\n\tif (!resized || resized.originalWidth !== region.width || resized.originalHeight !== region.height ||\n\t\tresized.width < 1 || resized.height < 1 || resized.width > 1280 || resized.height > 1280 ||\n\t\tresized.width * resized.height > 1_000_000)\n\t\tthrow new Error(\"Screenshot could not be decoded within the image budget.\");\n\treturn {\n\t\timage: { type: \"image\", data: resized.data, mimeType: resized.mimeType } satisfies ImageContent,\n\t\twidth: resized.width,\n\t\theight: resized.height,\n\t\tsourceWidth: source.width,\n\t\tsourceHeight: source.height,\n\t\tregion,\n\t\tscaleX: region.width / resized.width,\n\t\tscaleY: region.height / resized.height,\n\t};\n}\n"]}
|