openhorse 0.2.19 → 0.2.22
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/dist/agents/coordinator.d.ts.map +1 -1
- package/dist/agents/fork.d.ts.map +1 -1
- package/dist/agents/fork.js +0 -1
- package/dist/agents/fork.js.map +1 -1
- package/dist/agents/worker-pool.d.ts.map +1 -1
- package/dist/agents/worker-pool.js +3 -1
- package/dist/agents/worker-pool.js.map +1 -1
- package/dist/cli.js +28 -3
- package/dist/cli.js.map +1 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +202 -77
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/parser.d.ts.map +1 -1
- package/dist/commands/parser.js +8 -3
- package/dist/commands/parser.js.map +1 -1
- package/dist/commands/types.d.ts +2 -0
- package/dist/commands/types.d.ts.map +1 -1
- package/dist/commands/types.js.map +1 -1
- package/dist/core/checkpoint.d.ts.map +1 -1
- package/dist/core/checkpoint.js +3 -0
- package/dist/core/checkpoint.js.map +1 -1
- package/dist/core/cost-tracker.d.ts +45 -5
- package/dist/core/cost-tracker.d.ts.map +1 -1
- package/dist/core/cost-tracker.js +78 -13
- package/dist/core/cost-tracker.js.map +1 -1
- package/dist/framework/index.d.ts +1 -1
- package/dist/framework/index.d.ts.map +1 -1
- package/dist/framework/index.js.map +1 -1
- package/dist/framework/prompt.d.ts.map +1 -1
- package/dist/framework/prompt.js +16 -0
- package/dist/framework/prompt.js.map +1 -1
- package/dist/framework/query.d.ts +25 -0
- package/dist/framework/query.d.ts.map +1 -1
- package/dist/framework/query.js +196 -56
- package/dist/framework/query.js.map +1 -1
- package/dist/framework/store.d.ts +6 -1
- package/dist/framework/store.d.ts.map +1 -1
- package/dist/framework/store.js +10 -1
- package/dist/framework/store.js.map +1 -1
- package/dist/harness/context-harness.d.ts.map +1 -1
- package/dist/harness/context-harness.js +6 -1
- package/dist/harness/context-harness.js.map +1 -1
- package/dist/harness/ledger.d.ts +1 -0
- package/dist/harness/ledger.d.ts.map +1 -1
- package/dist/harness/ledger.js +12 -0
- package/dist/harness/ledger.js.map +1 -1
- package/dist/harness/safety.d.ts +2 -0
- package/dist/harness/safety.d.ts.map +1 -1
- package/dist/harness/safety.js +27 -3
- package/dist/harness/safety.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/init.d.ts +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +1 -1
- package/dist/init.js.map +1 -1
- package/dist/ink-ui/components/Markdown.d.ts +1 -1
- package/dist/ink-ui/components/Markdown.d.ts.map +1 -1
- package/dist/ink-ui/components/Markdown.js +1 -1
- package/dist/ink-ui/components/Markdown.js.map +1 -1
- package/dist/ink-ui/components/StatusLine.d.ts.map +1 -1
- package/dist/ink-ui/components/StatusLine.js +0 -2
- package/dist/ink-ui/components/StatusLine.js.map +1 -1
- package/dist/ink-ui/runtime/grapheme.d.ts +9 -8
- package/dist/ink-ui/runtime/grapheme.d.ts.map +1 -1
- package/dist/ink-ui/runtime/grapheme.js +14 -60
- package/dist/ink-ui/runtime/grapheme.js.map +1 -1
- package/dist/ink-ui/runtime/input-buffer.d.ts +9 -31
- package/dist/ink-ui/runtime/input-buffer.d.ts.map +1 -1
- package/dist/ink-ui/runtime/input-buffer.js +15 -162
- package/dist/ink-ui/runtime/input-buffer.js.map +1 -1
- package/dist/ink-ui/runtime/native-cursor.js +0 -25
- package/dist/ink-ui/runtime/native-cursor.js.map +1 -1
- package/dist/ink-ui/runtime/prompt-layout.d.ts +9 -29
- package/dist/ink-ui/runtime/prompt-layout.d.ts.map +1 -1
- package/dist/ink-ui/runtime/prompt-layout.js +18 -166
- package/dist/ink-ui/runtime/prompt-layout.js.map +1 -1
- package/dist/ink-ui/runtime/transcript-state.d.ts.map +1 -1
- package/dist/ink-ui/runtime/transcript-state.js +2 -0
- package/dist/ink-ui/runtime/transcript-state.js.map +1 -1
- package/dist/ink-ui/screens/ReplScreen.d.ts.map +1 -1
- package/dist/ink-ui/screens/ReplScreen.js +23 -5
- package/dist/ink-ui/screens/ReplScreen.js.map +1 -1
- package/dist/memory/entrypoint.js +1 -1
- package/dist/memory/entrypoint.js.map +1 -1
- package/dist/memory/storage.js +1 -1
- package/dist/memory/storage.js.map +1 -1
- package/dist/memory/store.d.ts +1 -0
- package/dist/memory/store.d.ts.map +1 -1
- package/dist/memory/store.js +9 -0
- package/dist/memory/store.js.map +1 -1
- package/dist/runtime/agent-runtime-controller.d.ts.map +1 -1
- package/dist/runtime/agent-runtime-controller.js +25 -0
- package/dist/runtime/agent-runtime-controller.js.map +1 -1
- package/dist/runtime/agent-runtime-protocol.d.ts +4 -1
- package/dist/runtime/agent-runtime-protocol.d.ts.map +1 -1
- package/dist/runtime/agent-runtime-protocol.js +6 -0
- package/dist/runtime/agent-runtime-protocol.js.map +1 -1
- package/dist/runtime/chat-controller.d.ts +27 -0
- package/dist/runtime/chat-controller.d.ts.map +1 -1
- package/dist/runtime/chat-controller.js +374 -88
- package/dist/runtime/chat-controller.js.map +1 -1
- package/dist/runtime/composer/buffer.d.ts +43 -0
- package/dist/runtime/composer/buffer.d.ts.map +1 -0
- package/dist/runtime/composer/buffer.js +176 -0
- package/dist/runtime/composer/buffer.js.map +1 -0
- package/dist/runtime/composer/grapheme.d.ts +19 -0
- package/dist/runtime/composer/grapheme.d.ts.map +1 -0
- package/dist/runtime/composer/grapheme.js +73 -0
- package/dist/runtime/composer/grapheme.js.map +1 -0
- package/dist/runtime/composer/history.d.ts +39 -0
- package/dist/runtime/composer/history.d.ts.map +1 -0
- package/dist/runtime/composer/history.js +91 -0
- package/dist/runtime/composer/history.js.map +1 -0
- package/dist/runtime/composer/layout.d.ts +40 -0
- package/dist/runtime/composer/layout.d.ts.map +1 -0
- package/dist/runtime/composer/layout.js +174 -0
- package/dist/runtime/composer/layout.js.map +1 -0
- package/dist/runtime/rich-text/ansi-parser.d.ts +31 -0
- package/dist/runtime/rich-text/ansi-parser.d.ts.map +1 -0
- package/dist/runtime/rich-text/ansi-parser.js +310 -0
- package/dist/runtime/rich-text/ansi-parser.js.map +1 -0
- package/dist/runtime/rich-text/layout.d.ts +12 -0
- package/dist/runtime/rich-text/layout.d.ts.map +1 -0
- package/dist/runtime/rich-text/layout.js +362 -0
- package/dist/runtime/rich-text/layout.js.map +1 -0
- package/dist/runtime/rich-text/markdown-parser.d.ts +17 -0
- package/dist/runtime/rich-text/markdown-parser.d.ts.map +1 -0
- package/dist/runtime/rich-text/markdown-parser.js +218 -0
- package/dist/runtime/rich-text/markdown-parser.js.map +1 -0
- package/dist/runtime/rich-text/sanitizer.d.ts +18 -0
- package/dist/runtime/rich-text/sanitizer.d.ts.map +1 -0
- package/dist/runtime/rich-text/sanitizer.js +32 -0
- package/dist/runtime/rich-text/sanitizer.js.map +1 -0
- package/dist/runtime/rich-text/types.d.ts +59 -0
- package/dist/runtime/rich-text/types.d.ts.map +1 -0
- package/dist/runtime/rich-text/types.js +17 -0
- package/dist/runtime/rich-text/types.js.map +1 -0
- package/dist/runtime/subagents/budget.d.ts +118 -0
- package/dist/runtime/subagents/budget.d.ts.map +1 -0
- package/dist/runtime/subagents/budget.js +173 -0
- package/dist/runtime/subagents/budget.js.map +1 -0
- package/dist/runtime/subagents/child-executor-guard.d.ts +60 -0
- package/dist/runtime/subagents/child-executor-guard.d.ts.map +1 -0
- package/dist/runtime/subagents/child-executor-guard.js +219 -0
- package/dist/runtime/subagents/child-executor-guard.js.map +1 -0
- package/dist/runtime/subagents/context-builder.d.ts +34 -0
- package/dist/runtime/subagents/context-builder.d.ts.map +1 -0
- package/dist/runtime/subagents/context-builder.js +99 -0
- package/dist/runtime/subagents/context-builder.js.map +1 -0
- package/dist/runtime/subagents/index.d.ts +21 -0
- package/dist/runtime/subagents/index.d.ts.map +1 -0
- package/dist/runtime/subagents/index.js +62 -0
- package/dist/runtime/subagents/index.js.map +1 -0
- package/dist/runtime/subagents/policy.d.ts +68 -0
- package/dist/runtime/subagents/policy.d.ts.map +1 -0
- package/dist/runtime/subagents/policy.js +230 -0
- package/dist/runtime/subagents/policy.js.map +1 -0
- package/dist/runtime/subagents/presets.d.ts +44 -0
- package/dist/runtime/subagents/presets.d.ts.map +1 -0
- package/dist/runtime/subagents/presets.js +148 -0
- package/dist/runtime/subagents/presets.js.map +1 -0
- package/dist/runtime/subagents/production.d.ts +44 -0
- package/dist/runtime/subagents/production.d.ts.map +1 -0
- package/dist/runtime/subagents/production.js +143 -0
- package/dist/runtime/subagents/production.js.map +1 -0
- package/dist/runtime/subagents/provider-gate.d.ts +99 -0
- package/dist/runtime/subagents/provider-gate.d.ts.map +1 -0
- package/dist/runtime/subagents/provider-gate.js +186 -0
- package/dist/runtime/subagents/provider-gate.js.map +1 -0
- package/dist/runtime/subagents/result-parser.d.ts +40 -0
- package/dist/runtime/subagents/result-parser.d.ts.map +1 -0
- package/dist/runtime/subagents/result-parser.js +240 -0
- package/dist/runtime/subagents/result-parser.js.map +1 -0
- package/dist/runtime/subagents/runner.d.ts +53 -0
- package/dist/runtime/subagents/runner.d.ts.map +1 -0
- package/dist/runtime/subagents/runner.js +172 -0
- package/dist/runtime/subagents/runner.js.map +1 -0
- package/dist/runtime/subagents/runtime-integration.d.ts +73 -0
- package/dist/runtime/subagents/runtime-integration.d.ts.map +1 -0
- package/dist/runtime/subagents/runtime-integration.js +148 -0
- package/dist/runtime/subagents/runtime-integration.js.map +1 -0
- package/dist/runtime/subagents/supervisor.d.ts +79 -0
- package/dist/runtime/subagents/supervisor.d.ts.map +1 -0
- package/dist/runtime/subagents/supervisor.js +301 -0
- package/dist/runtime/subagents/supervisor.js.map +1 -0
- package/dist/runtime/subagents/tool.d.ts +38 -0
- package/dist/runtime/subagents/tool.d.ts.map +1 -0
- package/dist/runtime/subagents/tool.js +171 -0
- package/dist/runtime/subagents/tool.js.map +1 -0
- package/dist/runtime/subagents/types.d.ts +152 -0
- package/dist/runtime/subagents/types.d.ts.map +1 -0
- package/dist/runtime/subagents/types.js +56 -0
- package/dist/runtime/subagents/types.js.map +1 -0
- package/dist/runtime/ui-events.d.ts +18 -0
- package/dist/runtime/ui-events.d.ts.map +1 -1
- package/dist/runtime/ui-events.js.map +1 -1
- package/dist/runtime/ui-view-model.d.ts +44 -1
- package/dist/runtime/ui-view-model.d.ts.map +1 -1
- package/dist/runtime/ui-view-model.js +90 -37
- package/dist/runtime/ui-view-model.js.map +1 -1
- package/dist/sdk/query.d.ts.map +1 -1
- package/dist/sdk/query.js +0 -1
- package/dist/sdk/query.js.map +1 -1
- package/dist/services/auto-fix/autoFixHook.d.ts.map +1 -1
- package/dist/services/auto-fix/autoFixHook.js +3 -2
- package/dist/services/auto-fix/autoFixHook.js.map +1 -1
- package/dist/services/auto-fix/autoFixRunner.d.ts +2 -2
- package/dist/services/auto-fix/autoFixRunner.d.ts.map +1 -1
- package/dist/services/auto-fix/autoFixRunner.js +2 -2
- package/dist/services/auto-fix/autoFixRunner.js.map +1 -1
- package/dist/services/compact/auto-compact.d.ts +15 -2
- package/dist/services/compact/auto-compact.d.ts.map +1 -1
- package/dist/services/compact/auto-compact.js +59 -27
- package/dist/services/compact/auto-compact.js.map +1 -1
- package/dist/services/compact/compact.d.ts +2 -0
- package/dist/services/compact/compact.d.ts.map +1 -1
- package/dist/services/compact/compact.js +22 -5
- package/dist/services/compact/compact.js.map +1 -1
- package/dist/services/compact/coordinator.d.ts +26 -0
- package/dist/services/compact/coordinator.d.ts.map +1 -0
- package/dist/services/compact/coordinator.js +44 -0
- package/dist/services/compact/coordinator.js.map +1 -0
- package/dist/services/compact/index.d.ts +1 -0
- package/dist/services/compact/index.d.ts.map +1 -1
- package/dist/services/compact/index.js +3 -1
- package/dist/services/compact/index.js.map +1 -1
- package/dist/services/compact/summary-generator.d.ts +6 -2
- package/dist/services/compact/summary-generator.d.ts.map +1 -1
- package/dist/services/compact/summary-generator.js +73 -32
- package/dist/services/compact/summary-generator.js.map +1 -1
- package/dist/services/concurrent-sessions.d.ts.map +1 -1
- package/dist/services/concurrent-sessions.js +3 -0
- package/dist/services/concurrent-sessions.js.map +1 -1
- package/dist/services/config-dir.d.ts +11 -1
- package/dist/services/config-dir.d.ts.map +1 -1
- package/dist/services/config-dir.js +19 -2
- package/dist/services/config-dir.js.map +1 -1
- package/dist/services/config.d.ts +13 -4
- package/dist/services/config.d.ts.map +1 -1
- package/dist/services/config.js +85 -4
- package/dist/services/config.js.map +1 -1
- package/dist/services/doctor.d.ts +2 -0
- package/dist/services/doctor.d.ts.map +1 -1
- package/dist/services/doctor.js +9 -2
- package/dist/services/doctor.js.map +1 -1
- package/dist/services/global-config.d.ts +33 -1
- package/dist/services/global-config.d.ts.map +1 -1
- package/dist/services/global-config.js +3 -0
- package/dist/services/global-config.js.map +1 -1
- package/dist/services/llm.d.ts +21 -4
- package/dist/services/llm.d.ts.map +1 -1
- package/dist/services/llm.js +75 -9
- package/dist/services/llm.js.map +1 -1
- package/dist/services/mcp/transports.d.ts +2 -0
- package/dist/services/mcp/transports.d.ts.map +1 -1
- package/dist/services/mcp/transports.js +23 -2
- package/dist/services/mcp/transports.js.map +1 -1
- package/dist/services/memory.d.ts.map +1 -1
- package/dist/services/memory.js.map +1 -1
- package/dist/services/model-context.d.ts +36 -0
- package/dist/services/model-context.d.ts.map +1 -1
- package/dist/services/model-context.js +243 -31
- package/dist/services/model-context.js.map +1 -1
- package/dist/services/redaction.js +1 -1
- package/dist/services/redaction.js.map +1 -1
- package/dist/services/session-memory/sessionMemory.js +1 -1
- package/dist/services/session-memory/sessionMemory.js.map +1 -1
- package/dist/services/session-storage.d.ts +39 -1
- package/dist/services/session-storage.d.ts.map +1 -1
- package/dist/services/session-storage.js +156 -28
- package/dist/services/session-storage.js.map +1 -1
- package/dist/services/task-manager.d.ts +2 -0
- package/dist/services/task-manager.d.ts.map +1 -1
- package/dist/services/task-manager.js +13 -0
- package/dist/services/task-manager.js.map +1 -1
- package/dist/services/usage-state.d.ts +55 -5
- package/dist/services/usage-state.d.ts.map +1 -1
- package/dist/services/usage-state.js +188 -59
- package/dist/services/usage-state.js.map +1 -1
- package/dist/services/verification-profile.d.ts.map +1 -1
- package/dist/services/verification-profile.js +3 -2
- package/dist/services/verification-profile.js.map +1 -1
- package/dist/services/workspace-diff.d.ts.map +1 -1
- package/dist/services/workspace-diff.js +34 -3
- package/dist/services/workspace-diff.js.map +1 -1
- package/dist/services/yaml-config.js +1 -1
- package/dist/skills/loader.d.ts +1 -1
- package/dist/skills/loader.d.ts.map +1 -1
- package/dist/skills/loader.js +1 -1
- package/dist/skills/loader.js.map +1 -1
- package/dist/skills/registry.d.ts +1 -1
- package/dist/skills/registry.d.ts.map +1 -1
- package/dist/skills/registry.js +1 -1
- package/dist/skills/registry.js.map +1 -1
- package/dist/skills/runtime.d.ts +9 -5
- package/dist/skills/runtime.d.ts.map +1 -1
- package/dist/skills/runtime.js +157 -12
- package/dist/skills/runtime.js.map +1 -1
- package/dist/terminal-ui/launch.d.ts +20 -3
- package/dist/terminal-ui/launch.d.ts.map +1 -1
- package/dist/terminal-ui/launch.js +86 -25
- package/dist/terminal-ui/launch.js.map +1 -1
- package/dist/terminal-ui/raw-editor.d.ts +9 -0
- package/dist/terminal-ui/raw-editor.d.ts.map +1 -1
- package/dist/terminal-ui/raw-editor.js +207 -30
- package/dist/terminal-ui/raw-editor.js.map +1 -1
- package/dist/tools/bash_security.d.ts.map +1 -1
- package/dist/tools/bash_security.js +14 -5
- package/dist/tools/bash_security.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +51 -24
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/lsp.js.map +1 -1
- package/dist/tools/plan.d.ts.map +1 -1
- package/dist/tools/plan.js +7 -0
- package/dist/tools/plan.js.map +1 -1
- package/dist/tools/web.d.ts +10 -0
- package/dist/tools/web.d.ts.map +1 -1
- package/dist/tools/web.js +84 -4
- package/dist/tools/web.js.map +1 -1
- package/dist/tui-core/frame.d.ts +13 -1
- package/dist/tui-core/frame.d.ts.map +1 -1
- package/dist/tui-core/frame.js +61 -8
- package/dist/tui-core/frame.js.map +1 -1
- package/dist/tui-core/input-parser.d.ts +1 -1
- package/dist/tui-core/input-parser.d.ts.map +1 -1
- package/dist/tui-core/input-parser.js +20 -1
- package/dist/tui-core/input-parser.js.map +1 -1
- package/dist/tui-core/style.d.ts +103 -0
- package/dist/tui-core/style.d.ts.map +1 -0
- package/dist/tui-core/style.js +269 -0
- package/dist/tui-core/style.js.map +1 -0
- package/dist/tui-core/terminal-writer.d.ts.map +1 -1
- package/dist/tui-core/terminal-writer.js +16 -3
- package/dist/tui-core/terminal-writer.js.map +1 -1
- package/dist/tui-ui/inline-surface.d.ts +185 -0
- package/dist/tui-ui/inline-surface.d.ts.map +1 -0
- package/dist/tui-ui/inline-surface.js +615 -0
- package/dist/tui-ui/inline-surface.js.map +1 -0
- package/dist/tui-ui/launch.d.ts +1 -0
- package/dist/tui-ui/launch.d.ts.map +1 -1
- package/dist/tui-ui/launch.js +398 -69
- package/dist/tui-ui/launch.js.map +1 -1
- package/dist/tui-ui/layout.d.ts +51 -2
- package/dist/tui-ui/layout.d.ts.map +1 -1
- package/dist/tui-ui/layout.js +240 -77
- package/dist/tui-ui/layout.js.map +1 -1
- package/dist/tui-ui/render-scheduler.d.ts +37 -0
- package/dist/tui-ui/render-scheduler.d.ts.map +1 -0
- package/dist/tui-ui/render-scheduler.js +118 -0
- package/dist/tui-ui/render-scheduler.js.map +1 -0
- package/dist/tui-ui/runner.d.ts +78 -5
- package/dist/tui-ui/runner.d.ts.map +1 -1
- package/dist/tui-ui/runner.js +317 -22
- package/dist/tui-ui/runner.js.map +1 -1
- package/dist/tui-ui/state.d.ts +38 -7
- package/dist/tui-ui/state.d.ts.map +1 -1
- package/dist/tui-ui/state.js +199 -40
- package/dist/tui-ui/state.js.map +1 -1
- package/dist/tui-ui/theme.d.ts +13 -0
- package/dist/tui-ui/theme.d.ts.map +1 -0
- package/dist/tui-ui/theme.js +20 -0
- package/dist/tui-ui/theme.js.map +1 -0
- package/dist/tui-ui/transcript-cache.d.ts +35 -0
- package/dist/tui-ui/transcript-cache.d.ts.map +1 -0
- package/dist/tui-ui/transcript-cache.js +74 -0
- package/dist/tui-ui/transcript-cache.js.map +1 -0
- package/dist/tui-ui/transcript-layout.d.ts +21 -0
- package/dist/tui-ui/transcript-layout.d.ts.map +1 -0
- package/dist/tui-ui/transcript-layout.js +398 -0
- package/dist/tui-ui/transcript-layout.js.map +1 -0
- package/dist/ui/box.d.ts.map +1 -1
- package/dist/ui/box.js +0 -11
- package/dist/ui/box.js.map +1 -1
- package/dist/ui/command-panel.d.ts.map +1 -1
- package/dist/ui/command-panel.js +1 -3
- package/dist/ui/command-panel.js.map +1 -1
- package/dist/ui/file-completion.js +1 -1
- package/dist/ui/file-completion.js.map +1 -1
- package/dist/ui/markdown.d.ts.map +1 -1
- package/dist/ui/markdown.js +1 -2
- package/dist/ui/markdown.js.map +1 -1
- package/dist/ui/multiline-input.d.ts.map +1 -1
- package/dist/ui/multiline-input.js +1 -2
- package/dist/ui/multiline-input.js.map +1 -1
- package/dist/ui/progress.d.ts.map +1 -1
- package/dist/ui/progress.js +0 -3
- package/dist/ui/progress.js.map +1 -1
- package/dist/ui/status-bar.d.ts +1 -1
- package/dist/ui/status-bar.d.ts.map +1 -1
- package/dist/ui/status-bar.js +2 -16
- package/dist/ui/status-bar.js.map +1 -1
- package/dist/ui/stream-markdown.d.ts +3 -0
- package/dist/ui/stream-markdown.d.ts.map +1 -1
- package/dist/ui/stream-markdown.js +0 -6
- package/dist/ui/stream-markdown.js.map +1 -1
- package/dist/ui/tool-preview.d.ts.map +1 -1
- package/dist/ui/tool-preview.js +0 -1
- package/dist/ui/tool-preview.js.map +1 -1
- package/dist/ui-v2/components/shell.d.ts.map +1 -1
- package/dist/ui-v2/components/shell.js +0 -8
- package/dist/ui-v2/components/shell.js.map +1 -1
- package/package.json +1 -1
- package/dist/cli-dbg.js +0 -717
- package/dist/cli-debug.d.ts +0 -7
- package/dist/cli-debug.d.ts.map +0 -1
- package/dist/cli-debug.js +0 -717
- package/dist/cli-debug.js.map +0 -1
- package/dist/cli-debug2.d.ts +0 -7
- package/dist/cli-debug2.d.ts.map +0 -1
- package/dist/cli-debug2.js +0 -717
- package/dist/cli-debug2.js.map +0 -1
- package/dist/cli-debug3.d.ts +0 -7
- package/dist/cli-debug3.d.ts.map +0 -1
- package/dist/cli-debug3.js +0 -719
- package/dist/cli-debug3.js.map +0 -1
- package/dist/cli-ink.d.ts +0 -8
- package/dist/cli-ink.d.ts.map +0 -1
- package/dist/cli-ink.js +0 -32
- package/dist/cli-ink.js.map +0 -1
- package/dist/cli-patch.js +0 -716
- package/dist/cli-test.js +0 -726
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* SubagentSupervisor: orchestrates a batch of child subtasks.
|
|
4
|
+
*
|
|
5
|
+
* Owns the task/batch ID space, the state machine, the concurrency queue and
|
|
6
|
+
* ordered aggregation. It is the single place that decides when children start,
|
|
7
|
+
* how they are bounded, and how their results are folded back to the root.
|
|
8
|
+
*
|
|
9
|
+
* The supervisor does NOT own LLM state, tool execution, permission policy or
|
|
10
|
+
* transcript storage. It composes the policy gate, the budget ledger, the
|
|
11
|
+
* provider gate and the runner, and emits renderer-independent lifecycle
|
|
12
|
+
* events that the root loop forwards to terminal/Ink/TUI.
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.runSubtaskBatch = runSubtaskBatch;
|
|
16
|
+
const policy_1 = require("./policy");
|
|
17
|
+
const runner_1 = require("./runner");
|
|
18
|
+
const types_1 = require("./types");
|
|
19
|
+
let batchCounter = 0;
|
|
20
|
+
let taskCounter = 0;
|
|
21
|
+
function nextBatchId() {
|
|
22
|
+
batchCounter += 1;
|
|
23
|
+
return `batch-${batchCounter}`;
|
|
24
|
+
}
|
|
25
|
+
function nextTaskId() {
|
|
26
|
+
taskCounter += 1;
|
|
27
|
+
return `task-${taskCounter}`;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Run a batch of subtasks. Returns a {@link SubtaskBatchResult} whose results
|
|
31
|
+
* are always in request order, regardless of completion order.
|
|
32
|
+
*
|
|
33
|
+
* Never throws: policy rejection, child failures, timeouts and cancels are
|
|
34
|
+
* all normalized into result entries.
|
|
35
|
+
*/
|
|
36
|
+
async function runSubtaskBatch(request, deps) {
|
|
37
|
+
const policyCtx = {
|
|
38
|
+
depth: 0,
|
|
39
|
+
cwd: deps.cwd,
|
|
40
|
+
config: deps.config,
|
|
41
|
+
rootObjective: deps.rootObjectiveSummary ?? '',
|
|
42
|
+
// R6: turn-level counter persists across `subtask` calls so multiple
|
|
43
|
+
// calls in one root turn cannot exceed `maxTasksPerTurn`.
|
|
44
|
+
tasksStartedThisTurn: deps.turnTaskState?.tasksStarted() ?? 0,
|
|
45
|
+
runningChildren: deps.providerGate.activeCount(),
|
|
46
|
+
// R6: live permission state from the root runtime, not a hardcoded false.
|
|
47
|
+
hasPendingPermission: deps.hasPendingPermission ? deps.hasPendingPermission() : false,
|
|
48
|
+
parentAborted: Boolean(deps.parentAbortSignal?.aborted),
|
|
49
|
+
remainingModelRequests: deps.budget.availableModelRequests(),
|
|
50
|
+
providerCanReserve: (count) => deps.providerGate.canReserve(count),
|
|
51
|
+
};
|
|
52
|
+
const verdict = (0, policy_1.evaluateSubtaskPolicy)(request, policyCtx);
|
|
53
|
+
if (!verdict.allowed) {
|
|
54
|
+
const batchId = nextBatchId();
|
|
55
|
+
const results = request.tasks.map(packet => {
|
|
56
|
+
const result = buildRejectedResult(packet, verdict.reason);
|
|
57
|
+
// R7: finalize (trace/artifact/usage) exactly once even for rejected tasks.
|
|
58
|
+
finalizeTask(deps, batchId, result.id, packet, result);
|
|
59
|
+
return result;
|
|
60
|
+
});
|
|
61
|
+
return {
|
|
62
|
+
result: { batchId, results, aggregateUsage: (0, types_1.sumSubtaskUsage)([]) },
|
|
63
|
+
rejected: true,
|
|
64
|
+
rejectReason: verdict.reason,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
// R6: account for the accepted tasks in the turn-level counter so the
|
|
68
|
+
// next `subtask` call in the same turn sees the updated total.
|
|
69
|
+
deps.turnTaskState?.addStarted(request.tasks.length);
|
|
70
|
+
const batchId = nextBatchId();
|
|
71
|
+
const tasks = request.tasks;
|
|
72
|
+
const taskIds = tasks.map(() => nextTaskId());
|
|
73
|
+
// Reserve a fair share per task: the per-task cap, but no more than an even
|
|
74
|
+
// slice of the turn budget. This lets a 3-task batch fit when the turn limit
|
|
75
|
+
// is smaller than 3x the per-task cap, while the per-task cap still binds at
|
|
76
|
+
// reconcile time. Reserving the full per-task cap for every task would
|
|
77
|
+
// reject batches that would actually fit once real usage is known.
|
|
78
|
+
const reservePerTask = Math.max(1, Math.min(deps.config.maxModelRequestsPerTask, Math.floor(deps.config.maxModelRequestsPerTurn / tasks.length)));
|
|
79
|
+
// Reserve budget for every task up front; abort the batch if any reserve fails.
|
|
80
|
+
for (let i = 0; i < tasks.length; i++) {
|
|
81
|
+
const reserved = deps.budget.reserve(taskIds[i], reservePerTask);
|
|
82
|
+
if (!reserved) {
|
|
83
|
+
// Release what we reserved and reject the rest.
|
|
84
|
+
for (let j = 0; j <= i; j++)
|
|
85
|
+
deps.budget.release(taskIds[j]);
|
|
86
|
+
const results = tasks.map((packet, i) => {
|
|
87
|
+
const result = buildRejectedResult(packet, 'budget_exhausted', taskIds[i]);
|
|
88
|
+
// R7: finalize rejected tasks too.
|
|
89
|
+
finalizeTask(deps, batchId, result.id, packet, result);
|
|
90
|
+
return result;
|
|
91
|
+
});
|
|
92
|
+
return {
|
|
93
|
+
result: { batchId, results, aggregateUsage: (0, types_1.sumSubtaskUsage)([]) },
|
|
94
|
+
rejected: true,
|
|
95
|
+
rejectReason: 'budget_exhausted',
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
emit(deps, {
|
|
99
|
+
batchId, taskId: taskIds[i], role: tasks[i].role, state: 'queued',
|
|
100
|
+
objective: tasks[i].objective,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
const runnerDeps = (i) => ({
|
|
104
|
+
cwd: deps.cwd,
|
|
105
|
+
canonicalScopePaths: verdict.canonicalScope.get(i),
|
|
106
|
+
toolSet: deps.toolSet,
|
|
107
|
+
executeQuery: deps.executeQuery,
|
|
108
|
+
timeoutMs: deps.config.timeoutMs,
|
|
109
|
+
parentAbortSignal: deps.parentAbortSignal,
|
|
110
|
+
rootObjectiveSummary: deps.rootObjectiveSummary,
|
|
111
|
+
modelLabel: deps.modelLabel,
|
|
112
|
+
});
|
|
113
|
+
let outcomes;
|
|
114
|
+
if (request.execution === 'parallel') {
|
|
115
|
+
outcomes = await runParallel(tasks, taskIds, batchId, deps, runnerDeps);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
outcomes = await runSerial(tasks, taskIds, batchId, deps, runnerDeps);
|
|
119
|
+
}
|
|
120
|
+
// Reconcile budget for each task with its real usage.
|
|
121
|
+
for (const outcome of outcomes) {
|
|
122
|
+
deps.budget.reconcile(outcome.result.id, outcome.result.usage);
|
|
123
|
+
}
|
|
124
|
+
const results = outcomes.map(o => o.result);
|
|
125
|
+
const aggregateUsage = (0, types_1.sumSubtaskUsage)(results.map(r => r.usage));
|
|
126
|
+
return {
|
|
127
|
+
result: { batchId, results, aggregateUsage },
|
|
128
|
+
rejected: false,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
async function runParallel(tasks, taskIds, batchId, deps, runnerDeps) {
|
|
132
|
+
// Launch each child; the provider gate bounds actual concurrency. Collect
|
|
133
|
+
// by index so the final order matches the request order.
|
|
134
|
+
// allSettled guarantees every task is accounted for even if a future
|
|
135
|
+
// refactor breaks the "runOne never throws" contract.
|
|
136
|
+
const slots = tasks.map((task, i) => runOne(task, taskIds[i], batchId, i, deps, runnerDeps(i)));
|
|
137
|
+
const settled = await Promise.allSettled(slots);
|
|
138
|
+
return settled.map((s, i) => {
|
|
139
|
+
if (s.status === 'fulfilled')
|
|
140
|
+
return s.value;
|
|
141
|
+
// Defensive: construct a failed result for any slot that threw unexpectedly.
|
|
142
|
+
const task = tasks[i];
|
|
143
|
+
const result = {
|
|
144
|
+
id: taskIds[i],
|
|
145
|
+
role: task.role,
|
|
146
|
+
status: 'failed',
|
|
147
|
+
summary: 'Unexpected runner error.',
|
|
148
|
+
findings: [],
|
|
149
|
+
files: [],
|
|
150
|
+
commands: [],
|
|
151
|
+
verification: [],
|
|
152
|
+
risks: ['runner threw unexpectedly'],
|
|
153
|
+
usage: { modelRequests: 0, toolCalls: 0, promptTokens: 0, completionTokens: 0, durationMs: 0 },
|
|
154
|
+
};
|
|
155
|
+
finalizeTask(deps, batchId, taskIds[i], task, result);
|
|
156
|
+
return { result, parentCancelled: false };
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
async function runSerial(tasks, taskIds, batchId, deps, runnerDeps) {
|
|
160
|
+
const outcomes = [];
|
|
161
|
+
for (let i = 0; i < tasks.length; i++) {
|
|
162
|
+
if (deps.parentAbortSignal?.aborted) {
|
|
163
|
+
// Mark remaining as cancelled without running them.
|
|
164
|
+
// R7: finalize each cancelled result (trace/artifact/usage) exactly
|
|
165
|
+
// once, same as a ran task, so resume sees the cancelled state.
|
|
166
|
+
for (let j = i; j < tasks.length; j++) {
|
|
167
|
+
const cancelled = cancelledResult(taskIds[j], tasks[j]);
|
|
168
|
+
finalizeTask(deps, batchId, taskIds[j], tasks[j], cancelled);
|
|
169
|
+
outcomes.push({
|
|
170
|
+
result: cancelled,
|
|
171
|
+
parentCancelled: true,
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
break;
|
|
175
|
+
}
|
|
176
|
+
const outcome = await runOne(tasks[i], taskIds[i], batchId, i, deps, runnerDeps(i));
|
|
177
|
+
outcomes.push(outcome);
|
|
178
|
+
}
|
|
179
|
+
return outcomes;
|
|
180
|
+
}
|
|
181
|
+
async function runOne(task, taskId, batchId, _index, deps, runnerDeps) {
|
|
182
|
+
// R4: pass the parent abort signal so a queued waiter is removed and
|
|
183
|
+
// rejected when the user hits Ctrl+C, instead of hanging until a slot
|
|
184
|
+
// frees. A rejected acquire yields a cancelled result, not a hung batch.
|
|
185
|
+
try {
|
|
186
|
+
await deps.providerGate.acquire(deps.parentAbortSignal);
|
|
187
|
+
}
|
|
188
|
+
catch {
|
|
189
|
+
// AcquireAbortedError: parent aborted while queued. Treat as cancelled.
|
|
190
|
+
// R7: finalize the cancelled result so trace/artifact/usage are recorded
|
|
191
|
+
// exactly once, same as any other terminal state.
|
|
192
|
+
const cancelled = cancelledResult(taskId, task);
|
|
193
|
+
finalizeTask(deps, batchId, taskId, task, cancelled);
|
|
194
|
+
return { result: cancelled, parentCancelled: true };
|
|
195
|
+
}
|
|
196
|
+
try {
|
|
197
|
+
// R3: set the current packet's canonical scope so the executor guard
|
|
198
|
+
// enforces per-packet containment. Cleared in finally.
|
|
199
|
+
if (deps.scopeHolder) {
|
|
200
|
+
deps.scopeHolder.setScope(runnerDeps.canonicalScopePaths ?? []);
|
|
201
|
+
}
|
|
202
|
+
emit(deps, { batchId, taskId, role: task.role, state: 'running', objective: task.objective });
|
|
203
|
+
const outcome = await (0, runner_1.runSubtask)(task, runnerDeps, taskId);
|
|
204
|
+
// R7: single finalize path - terminal event + result callback + usage
|
|
205
|
+
// callback all happen here, exactly once, with errors isolated so a
|
|
206
|
+
// throwing sink cannot reject the batch or corrupt sibling aggregation.
|
|
207
|
+
finalizeTask(deps, batchId, taskId, task, outcome.result);
|
|
208
|
+
return outcome;
|
|
209
|
+
}
|
|
210
|
+
finally {
|
|
211
|
+
deps.providerGate.release();
|
|
212
|
+
deps.scopeHolder?.clear();
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* R7: finalize exactly once per task. Emits the terminal lifecycle event,
|
|
217
|
+
* persists the result (artifact), and reports observed usage to the root
|
|
218
|
+
* CostTracker. Sink errors (event/trace/artifact/usage) are isolated into
|
|
219
|
+
* diagnostics: they must NOT change the child's business terminal state or
|
|
220
|
+
* reject the batch, so a failing sink cannot corrupt sibling aggregation.
|
|
221
|
+
*/
|
|
222
|
+
function finalizeTask(deps, batchId, taskId, task, result) {
|
|
223
|
+
// Terminal lifecycle event - isolated.
|
|
224
|
+
try {
|
|
225
|
+
emit(deps, {
|
|
226
|
+
batchId, taskId, role: task.role,
|
|
227
|
+
state: toEventState(result.status),
|
|
228
|
+
objective: task.objective,
|
|
229
|
+
summary: result.summary,
|
|
230
|
+
durationMs: result.usage.durationMs,
|
|
231
|
+
usage: result.usage,
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
catch {
|
|
235
|
+
// Sink failure must not affect the result.
|
|
236
|
+
}
|
|
237
|
+
// Persist the structured result for trace/resume durability - isolated.
|
|
238
|
+
try {
|
|
239
|
+
deps.onSubtaskResult?.(result, batchId);
|
|
240
|
+
}
|
|
241
|
+
catch {
|
|
242
|
+
// An artifact/trace sink throwing cannot reject the batch.
|
|
243
|
+
}
|
|
244
|
+
// Report observed usage (never clamped) to the root CostTracker - isolated.
|
|
245
|
+
try {
|
|
246
|
+
deps.onChildUsage?.(taskId, task.role, result.usage, deps.modelLabel);
|
|
247
|
+
}
|
|
248
|
+
catch {
|
|
249
|
+
// CostTracker failure must not affect the result.
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
function toEventState(status) {
|
|
253
|
+
switch (status) {
|
|
254
|
+
case 'completed': return 'completed';
|
|
255
|
+
case 'failed': return 'failed';
|
|
256
|
+
case 'cancelled': return 'cancelled';
|
|
257
|
+
case 'timed_out': return 'timed_out';
|
|
258
|
+
case 'rejected': return 'rejected';
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
/** Build a rejected result (does not emit - finalizeTask handles that). */
|
|
262
|
+
function buildRejectedResult(packet, reason, taskId) {
|
|
263
|
+
const id = taskId ?? nextTaskId();
|
|
264
|
+
return {
|
|
265
|
+
id,
|
|
266
|
+
role: packet.role,
|
|
267
|
+
status: 'rejected',
|
|
268
|
+
summary: `Rejected by policy: ${reason}`,
|
|
269
|
+
findings: [],
|
|
270
|
+
files: [],
|
|
271
|
+
commands: [],
|
|
272
|
+
verification: [],
|
|
273
|
+
risks: [`policy rejected: ${reason}`],
|
|
274
|
+
usage: { modelRequests: 0, toolCalls: 0, promptTokens: 0, completionTokens: 0, durationMs: 0 },
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
function cancelledResult(taskId, packet) {
|
|
278
|
+
return {
|
|
279
|
+
id: taskId,
|
|
280
|
+
role: packet.role,
|
|
281
|
+
status: 'cancelled',
|
|
282
|
+
summary: 'Cancelled: parent turn aborted before this task started.',
|
|
283
|
+
findings: [],
|
|
284
|
+
files: [],
|
|
285
|
+
commands: [],
|
|
286
|
+
verification: [],
|
|
287
|
+
risks: ['parent turn aborted'],
|
|
288
|
+
usage: { modelRequests: 0, toolCalls: 0, promptTokens: 0, completionTokens: 0, durationMs: 0 },
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
function emit(deps, event) {
|
|
292
|
+
// R7: an event sink throwing must never reject the batch or corrupt
|
|
293
|
+
// sibling aggregation - isolate it as a diagnostic.
|
|
294
|
+
try {
|
|
295
|
+
deps.onEvent?.(event);
|
|
296
|
+
}
|
|
297
|
+
catch {
|
|
298
|
+
// Event sink failure is best-effort; the result is unaffected.
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=supervisor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supervisor.js","sourceRoot":"","sources":["../../../src/runtime/subagents/supervisor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* createSubtaskTool: the runtime-bound `subtask` tool factory.
|
|
3
|
+
*
|
|
4
|
+
* Unlike global stateless tools, this tool is created per root turn and bound
|
|
5
|
+
* to a {@link SubagentSupervisor}. It is the only way the root Agent can
|
|
6
|
+
* request child investigations; children themselves never receive it (the
|
|
7
|
+
* preset allowlist strips `subtask`), so delegation depth is structurally 1.
|
|
8
|
+
*
|
|
9
|
+
* The tool is read-only orchestration: it never writes, and its result is the
|
|
10
|
+
* structured batch summary the root Agent consumes to continue its own work.
|
|
11
|
+
*/
|
|
12
|
+
import { type OpenHorseTool } from '../../framework/tool';
|
|
13
|
+
import { type SubagentSupervisorDeps } from './supervisor';
|
|
14
|
+
import type { SubtaskRequest } from './types';
|
|
15
|
+
/** Coerce model-provided args into a validated SubtaskRequest. */
|
|
16
|
+
export declare function coerceSubtaskRequest(args: Record<string, unknown>): SubtaskRequest | null;
|
|
17
|
+
/**
|
|
18
|
+
* Create the runtime-bound `subtask` tool. The supervisor is captured in the
|
|
19
|
+
* closure so the tool is stateless from the scheduler's perspective.
|
|
20
|
+
*/
|
|
21
|
+
export declare function createSubtaskTool(supervisorDeps: SubagentSupervisorDeps): OpenHorseTool;
|
|
22
|
+
/** Produce a compact, model-facing summary of a batch result. */
|
|
23
|
+
export declare function summarizeBatchForModel(batch: {
|
|
24
|
+
batchId: string;
|
|
25
|
+
results: Array<{
|
|
26
|
+
role: string;
|
|
27
|
+
status: string;
|
|
28
|
+
summary: string;
|
|
29
|
+
findings: unknown[];
|
|
30
|
+
risks: string[];
|
|
31
|
+
}>;
|
|
32
|
+
aggregateUsage: {
|
|
33
|
+
modelRequests: number;
|
|
34
|
+
toolCalls: number;
|
|
35
|
+
durationMs: number;
|
|
36
|
+
};
|
|
37
|
+
}): string;
|
|
38
|
+
//# sourceMappingURL=tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../../src/runtime/subagents/tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAa,KAAK,aAAa,EAA4B,MAAM,sBAAsB,CAAC;AAC/F,OAAO,EAAmB,KAAK,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAC5E,OAAO,KAAK,EAA+B,cAAc,EAAE,MAAM,SAAS,CAAC;AAyC3E,kEAAkE;AAClE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,cAAc,GAAG,IAAI,CA4BzF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,cAAc,EAAE,sBAAsB,GAAG,aAAa,CA4DvF;AAED,iEAAiE;AACjE,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAAC,cAAc,EAAE;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAAG,MAAM,CAWpQ"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* createSubtaskTool: the runtime-bound `subtask` tool factory.
|
|
4
|
+
*
|
|
5
|
+
* Unlike global stateless tools, this tool is created per root turn and bound
|
|
6
|
+
* to a {@link SubagentSupervisor}. It is the only way the root Agent can
|
|
7
|
+
* request child investigations; children themselves never receive it (the
|
|
8
|
+
* preset allowlist strips `subtask`), so delegation depth is structurally 1.
|
|
9
|
+
*
|
|
10
|
+
* The tool is read-only orchestration: it never writes, and its result is the
|
|
11
|
+
* structured batch summary the root Agent consumes to continue its own work.
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.coerceSubtaskRequest = coerceSubtaskRequest;
|
|
15
|
+
exports.createSubtaskTool = createSubtaskTool;
|
|
16
|
+
exports.summarizeBatchForModel = summarizeBatchForModel;
|
|
17
|
+
const tool_1 = require("../../framework/tool");
|
|
18
|
+
const supervisor_1 = require("./supervisor");
|
|
19
|
+
const ROLE_VALUES = ['research', 'review', 'test-investigate'];
|
|
20
|
+
const SUBTASK_PARAMETERS = {
|
|
21
|
+
type: 'object',
|
|
22
|
+
properties: {
|
|
23
|
+
tasks: {
|
|
24
|
+
type: 'array',
|
|
25
|
+
description: '1-3 independent investigation packets.',
|
|
26
|
+
items: {
|
|
27
|
+
type: 'object',
|
|
28
|
+
properties: {
|
|
29
|
+
role: { type: 'string', enum: ['research', 'review', 'test-investigate'], description: 'Investigation role.' },
|
|
30
|
+
objective: { type: 'string', description: 'A bounded, independently-investigable question. Must be specific enough to produce a verifiable conclusion.' },
|
|
31
|
+
reason: { type: 'string', description: 'Why this is independently delegable and not a serial dependency.' },
|
|
32
|
+
scope: {
|
|
33
|
+
type: 'object',
|
|
34
|
+
properties: {
|
|
35
|
+
paths: { type: 'array', items: { type: 'string' } },
|
|
36
|
+
symbols: { type: 'array', items: { type: 'string' } },
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
contextHints: { type: 'array', items: { type: 'string' } },
|
|
40
|
+
expectedOutput: { type: 'string' },
|
|
41
|
+
},
|
|
42
|
+
required: ['role', 'objective', 'reason'],
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
execution: { type: 'string', enum: ['parallel', 'serial'], description: 'parallel (default) or serial.' },
|
|
46
|
+
},
|
|
47
|
+
required: ['tasks'],
|
|
48
|
+
};
|
|
49
|
+
const SUBTASK_DESCRIPTION = [
|
|
50
|
+
'Delegate 1-3 independent, read-only investigations to subagents and receive structured conclusions.',
|
|
51
|
+
'Use ONLY when the work splits into genuinely independent investigations (e.g. researching two unrelated modules, reviewing a diff AND checking test gaps in parallel).',
|
|
52
|
+
'Do NOT use for: single-file reads, simple greps, serial step-by-step work, or anything requiring edits/commands (children cannot edit or run commands).',
|
|
53
|
+
'Each child returns a JSON result with summary, findings (with evidence), files, suggested commands (not executed), verification steps, and risks.',
|
|
54
|
+
].join(' ');
|
|
55
|
+
/** Coerce model-provided args into a validated SubtaskRequest. */
|
|
56
|
+
function coerceSubtaskRequest(args) {
|
|
57
|
+
const tasksRaw = args.tasks;
|
|
58
|
+
if (!Array.isArray(tasksRaw) || tasksRaw.length === 0)
|
|
59
|
+
return null;
|
|
60
|
+
const tasks = [];
|
|
61
|
+
for (const raw of tasksRaw) {
|
|
62
|
+
if (!raw || typeof raw !== 'object')
|
|
63
|
+
return null;
|
|
64
|
+
const obj = raw;
|
|
65
|
+
const role = obj.role;
|
|
66
|
+
if (typeof role !== 'string' || !ROLE_VALUES.includes(role))
|
|
67
|
+
return null;
|
|
68
|
+
const objective = typeof obj.objective === 'string' ? obj.objective.trim() : '';
|
|
69
|
+
const reason = typeof obj.reason === 'string' ? obj.reason.trim() : '';
|
|
70
|
+
if (!objective || !reason)
|
|
71
|
+
return null;
|
|
72
|
+
const packet = { role: role, objective, reason };
|
|
73
|
+
if (obj.scope && typeof obj.scope === 'object') {
|
|
74
|
+
const scope = obj.scope;
|
|
75
|
+
const paths = Array.isArray(scope.paths) ? scope.paths.filter((p) => typeof p === 'string') : undefined;
|
|
76
|
+
const symbols = Array.isArray(scope.symbols) ? scope.symbols.filter((s) => typeof s === 'string') : undefined;
|
|
77
|
+
if (paths || symbols)
|
|
78
|
+
packet.scope = { paths, symbols };
|
|
79
|
+
}
|
|
80
|
+
if (Array.isArray(obj.contextHints)) {
|
|
81
|
+
packet.contextHints = obj.contextHints.filter((h) => typeof h === 'string');
|
|
82
|
+
}
|
|
83
|
+
if (typeof obj.expectedOutput === 'string')
|
|
84
|
+
packet.expectedOutput = obj.expectedOutput;
|
|
85
|
+
// Drop any caller-provided `id`: runtime generates authoritative ids.
|
|
86
|
+
tasks.push(packet);
|
|
87
|
+
}
|
|
88
|
+
const execution = args.execution === 'serial' ? 'serial' : 'parallel';
|
|
89
|
+
return { tasks, execution };
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Create the runtime-bound `subtask` tool. The supervisor is captured in the
|
|
93
|
+
* closure so the tool is stateless from the scheduler's perspective.
|
|
94
|
+
*/
|
|
95
|
+
function createSubtaskTool(supervisorDeps) {
|
|
96
|
+
return (0, tool_1.buildTool)({
|
|
97
|
+
name: 'subtask',
|
|
98
|
+
description: SUBTASK_DESCRIPTION,
|
|
99
|
+
parameters: SUBTASK_PARAMETERS,
|
|
100
|
+
isReadOnly: () => true,
|
|
101
|
+
isConcurrencySafe: () => false,
|
|
102
|
+
isDestructive: () => false,
|
|
103
|
+
checkPermissions: () => ({ behavior: 'allow', reason: 'subtask is read-only orchestration; policy gate authorizes each child' }),
|
|
104
|
+
async execute(args, context) {
|
|
105
|
+
const request = coerceSubtaskRequest(args);
|
|
106
|
+
if (!request) {
|
|
107
|
+
return {
|
|
108
|
+
success: false,
|
|
109
|
+
output: '',
|
|
110
|
+
error: 'Invalid subtask request: expected tasks[] with role/objective/reason.',
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
// Forward the per-turn abort signal so Ctrl+C cancels the whole batch.
|
|
114
|
+
const depsWithAbort = {
|
|
115
|
+
...supervisorDeps,
|
|
116
|
+
parentAbortSignal: context.abortSignal ?? supervisorDeps.parentAbortSignal,
|
|
117
|
+
};
|
|
118
|
+
try {
|
|
119
|
+
const outcome = await (0, supervisor_1.runSubtaskBatch)(request, depsWithAbort);
|
|
120
|
+
const batch = outcome.result;
|
|
121
|
+
const compact = summarizeBatchForModel(batch);
|
|
122
|
+
let serialized;
|
|
123
|
+
try {
|
|
124
|
+
serialized = JSON.stringify(batch);
|
|
125
|
+
}
|
|
126
|
+
catch (jsonErr) {
|
|
127
|
+
// N9: JSON.stringify can throw on circular references. Preserve
|
|
128
|
+
// partial data by serializing a safe subset.
|
|
129
|
+
serialized = JSON.stringify({
|
|
130
|
+
batchId: batch.batchId,
|
|
131
|
+
results: batch.results.map(r => ({ ...r, findings: [], commands: [], verification: [] })),
|
|
132
|
+
aggregateUsage: batch.aggregateUsage,
|
|
133
|
+
_serializationError: String(jsonErr instanceof Error ? jsonErr.message : jsonErr),
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
return {
|
|
137
|
+
success: !outcome.rejected,
|
|
138
|
+
output: serialized,
|
|
139
|
+
summary: compact,
|
|
140
|
+
metadata: { batchId: batch.batchId, rejected: outcome.rejected, rejectReason: outcome.rejectReason },
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
catch (err) {
|
|
144
|
+
// N10: log unexpected errors for diagnostics before swallowing.
|
|
145
|
+
console.error('[subtask] unexpected error:', err instanceof Error ? err.message : err);
|
|
146
|
+
return {
|
|
147
|
+
success: false,
|
|
148
|
+
output: '',
|
|
149
|
+
error: err instanceof Error ? err.message : String(err),
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
},
|
|
153
|
+
getSummary(_args, result) {
|
|
154
|
+
return result.summary ?? result.output.slice(0, 200);
|
|
155
|
+
},
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
/** Produce a compact, model-facing summary of a batch result. */
|
|
159
|
+
function summarizeBatchForModel(batch) {
|
|
160
|
+
const lines = batch.results.map((r, i) => {
|
|
161
|
+
const findingCount = Array.isArray(r.findings) ? r.findings.length : 0;
|
|
162
|
+
const risk = r.risks.length > 0 ? ` risks=${r.risks.length}` : '';
|
|
163
|
+
return `[${i}] ${r.role}/${r.status}: ${r.summary} (findings=${findingCount}${risk})`;
|
|
164
|
+
});
|
|
165
|
+
return [
|
|
166
|
+
`subtask batch ${batch.batchId}: ${batch.results.length} result(s)`,
|
|
167
|
+
...lines,
|
|
168
|
+
`aggregate: modelRequests=${batch.aggregateUsage.modelRequests} toolCalls=${batch.aggregateUsage.toolCalls} durationMs=${batch.aggregateUsage.durationMs}`,
|
|
169
|
+
].join('\n');
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../../src/runtime/subagents/tool.ts"],"names":[],"mappings":"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"}
|