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,172 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* SubagentRunner: runs a single child agent to completion and parses its result.
|
|
4
|
+
*
|
|
5
|
+
* The runner is the boundary between the Supervisor and the shared `query()`
|
|
6
|
+
* loop. It is deliberately thin: it derives a child abort signal from the
|
|
7
|
+
* parent, applies a per-child timeout, invokes an injectable `executeQuery`,
|
|
8
|
+
* and normalizes the outcome through {@link parseSubtaskResult}.
|
|
9
|
+
*
|
|
10
|
+
* `executeQuery` is injected so the runner can be tested without a live LLM;
|
|
11
|
+
* the production binding wraps `query()` with a per-child LLMService.
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.runSubtask = runSubtask;
|
|
15
|
+
const context_builder_1 = require("./context-builder");
|
|
16
|
+
const result_parser_1 = require("./result-parser");
|
|
17
|
+
const types_1 = require("./types");
|
|
18
|
+
/**
|
|
19
|
+
* R5: bounded grace period to let a child query settle after it was aborted
|
|
20
|
+
* (timeout or parent cancel). The abort signal has fired; a cooperative
|
|
21
|
+
* executor stops promptly. An uncooperative executor is abandoned after this
|
|
22
|
+
* window so a stuck child cannot hold the provider slot indefinitely. The
|
|
23
|
+
* abandon is observable: the promise is caught and the (now unobserved)
|
|
24
|
+
* late resolution cannot flip the already-decided terminal status.
|
|
25
|
+
*/
|
|
26
|
+
const CHILD_SHUTDOWN_GRACE_MS = 2000;
|
|
27
|
+
async function settleWithGrace(queryPromise, graceMs) {
|
|
28
|
+
let timer;
|
|
29
|
+
try {
|
|
30
|
+
await Promise.race([
|
|
31
|
+
queryPromise.catch(() => undefined),
|
|
32
|
+
new Promise(resolve => {
|
|
33
|
+
timer = setTimeout(() => resolve(), graceMs);
|
|
34
|
+
timer.unref?.();
|
|
35
|
+
}),
|
|
36
|
+
]);
|
|
37
|
+
}
|
|
38
|
+
finally {
|
|
39
|
+
if (timer)
|
|
40
|
+
clearTimeout(timer);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Run one child subtask to a terminal state. Never throws: every failure mode
|
|
45
|
+
* (timeout, cancel, error, non-JSON output) is normalized into a SubtaskResult.
|
|
46
|
+
*/
|
|
47
|
+
async function runSubtask(packet, deps, taskId) {
|
|
48
|
+
const messages = (0, context_builder_1.buildChildMessages)({
|
|
49
|
+
cwd: deps.cwd,
|
|
50
|
+
packet,
|
|
51
|
+
canonicalScopePaths: deps.canonicalScopePaths,
|
|
52
|
+
rootObjectiveSummary: deps.rootObjectiveSummary,
|
|
53
|
+
modelLabel: deps.modelLabel,
|
|
54
|
+
});
|
|
55
|
+
const childController = new AbortController();
|
|
56
|
+
let parentAborted = false;
|
|
57
|
+
const onParentAbort = () => {
|
|
58
|
+
parentAborted = true;
|
|
59
|
+
childController.abort();
|
|
60
|
+
};
|
|
61
|
+
if (deps.parentAbortSignal) {
|
|
62
|
+
if (deps.parentAbortSignal.aborted) {
|
|
63
|
+
parentAborted = true;
|
|
64
|
+
childController.abort();
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
deps.parentAbortSignal.addEventListener('abort', onParentAbort, { once: true });
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
let timeoutHandle;
|
|
71
|
+
let timedOut = false;
|
|
72
|
+
const timeoutPromise = new Promise(resolve => {
|
|
73
|
+
timeoutHandle = setTimeout(() => {
|
|
74
|
+
timedOut = true;
|
|
75
|
+
childController.abort();
|
|
76
|
+
resolve({ kind: 'timeout' });
|
|
77
|
+
}, deps.timeoutMs);
|
|
78
|
+
});
|
|
79
|
+
// R5: parent abort is a distinct terminal outcome that wins the race even
|
|
80
|
+
// if the query subsequently resolves. Without this, a query that resolves
|
|
81
|
+
// just after the abort fires would flip the result to 'completed'.
|
|
82
|
+
// N15: store reference to the second abort listener so it can be cleaned up
|
|
83
|
+
// in the finally block alongside the first.
|
|
84
|
+
let onParentAbortForRace;
|
|
85
|
+
const parentAbortPromise = new Promise(resolve => {
|
|
86
|
+
if (parentAborted) {
|
|
87
|
+
resolve({ kind: 'parent_abort' });
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
if (deps.parentAbortSignal) {
|
|
91
|
+
const handler = () => resolve({ kind: 'parent_abort' });
|
|
92
|
+
onParentAbortForRace = handler;
|
|
93
|
+
deps.parentAbortSignal.addEventListener('abort', handler, { once: true });
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
const queryPromise = deps
|
|
97
|
+
.executeQuery(messages, deps.toolSet, childController.signal)
|
|
98
|
+
.then(content => ({ kind: 'done', content }))
|
|
99
|
+
.catch(err => ({
|
|
100
|
+
kind: 'error',
|
|
101
|
+
message: err instanceof Error ? err.message : String(err),
|
|
102
|
+
}));
|
|
103
|
+
let status;
|
|
104
|
+
let content = '';
|
|
105
|
+
let usage = types_1.EMPTY_SUBTASK_USAGE;
|
|
106
|
+
let parentCancelled = false;
|
|
107
|
+
try {
|
|
108
|
+
const outcome = await Promise.race([parentAbortPromise, queryPromise, timeoutPromise]);
|
|
109
|
+
if (outcome.kind === 'parent_abort') {
|
|
110
|
+
// Parent abort wins regardless of whether the query resolves later.
|
|
111
|
+
status = 'cancelled';
|
|
112
|
+
parentCancelled = true;
|
|
113
|
+
}
|
|
114
|
+
else if (outcome.kind === 'timeout') {
|
|
115
|
+
status = 'timed_out';
|
|
116
|
+
}
|
|
117
|
+
else if (outcome.kind === 'error') {
|
|
118
|
+
// If the parent aborted, treat as cancel; otherwise a failure.
|
|
119
|
+
if (parentAborted && !timedOut) {
|
|
120
|
+
status = 'cancelled';
|
|
121
|
+
parentCancelled = true;
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
status = 'failed';
|
|
125
|
+
content = outcome.message;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
// R5: even on 'done', if the parent aborted before this resolved, the
|
|
130
|
+
// terminal state must remain cancelled - a late resolve cannot flip it.
|
|
131
|
+
if (parentAborted && !timedOut) {
|
|
132
|
+
status = 'cancelled';
|
|
133
|
+
parentCancelled = true;
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
status = 'completed';
|
|
137
|
+
content = outcome.content.content;
|
|
138
|
+
usage = outcome.content.usage;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
finally {
|
|
143
|
+
if (timeoutHandle)
|
|
144
|
+
clearTimeout(timeoutHandle);
|
|
145
|
+
if (deps.parentAbortSignal) {
|
|
146
|
+
deps.parentAbortSignal.removeEventListener('abort', onParentAbort);
|
|
147
|
+
if (onParentAbortForRace) {
|
|
148
|
+
deps.parentAbortSignal.removeEventListener('abort', onParentAbortForRace);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
// R5: on timeout/abort the query promise may still be running in the
|
|
153
|
+
// background (model request or tool call in flight). The provider slot
|
|
154
|
+
// must not be released while the child can still issue requests, and we
|
|
155
|
+
// must not leave an unobserved promise that could fire late side effects.
|
|
156
|
+
// Wait a bounded grace period for the query to settle after the abort
|
|
157
|
+
// signal fired. An uncooperative executor that ignores the signal is
|
|
158
|
+
// logged via the result; the slot is still released after the grace so a
|
|
159
|
+
// stuck child cannot hang the whole turn forever.
|
|
160
|
+
if (status === 'timed_out' || status === 'cancelled') {
|
|
161
|
+
await settleWithGrace(queryPromise, CHILD_SHUTDOWN_GRACE_MS);
|
|
162
|
+
}
|
|
163
|
+
const result = (0, result_parser_1.parseSubtaskResult)({
|
|
164
|
+
id: taskId,
|
|
165
|
+
role: packet.role,
|
|
166
|
+
content,
|
|
167
|
+
status,
|
|
168
|
+
usage,
|
|
169
|
+
});
|
|
170
|
+
return { result, parentCancelled };
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/runtime/subagents/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Turn-level integration: build the runtime-bound `subtask` tool for a root turn.
|
|
3
|
+
*
|
|
4
|
+
* This is the bridge between {@link AgentChatController} and the subagent
|
|
5
|
+
* runtime. It resolves the child tool set from the global runtime tools, builds
|
|
6
|
+
* the production executeQuery, the budget ledger, the provider gate and the
|
|
7
|
+
* Supervisor, and returns the `subtask` OpenHorseTool to merge into the root
|
|
8
|
+
* turn's tool list. Returns null when subagents are off or the LLM is absent,
|
|
9
|
+
* so the root loop is unchanged.
|
|
10
|
+
*/
|
|
11
|
+
import type { OpenHorseTool } from '../../framework/tool';
|
|
12
|
+
import { runSubtaskBatch } from './supervisor';
|
|
13
|
+
import type { RuntimeSubtaskEvent, SubagentConfig, SubtaskUsage } from './types';
|
|
14
|
+
import type { LLMConfig } from '../../services/llm';
|
|
15
|
+
import type { OpenHorseCLIConfig } from '../../services/config';
|
|
16
|
+
export interface SubagentTurnInputs {
|
|
17
|
+
/** Resolved subagent config (from runtime.config.subagents). */
|
|
18
|
+
config: SubagentConfig;
|
|
19
|
+
/** Canonical project root. */
|
|
20
|
+
cwd: string;
|
|
21
|
+
/** Root LLM config derived from runtime config (apiKey, baseUrl, model, ...). */
|
|
22
|
+
rootLlmConfig: Pick<LLMConfig, 'apiKey' | 'baseUrl' | 'model' | 'fallbackModel'>;
|
|
23
|
+
/** Model label shown to children. */
|
|
24
|
+
modelLabel?: string;
|
|
25
|
+
/** Root objective summary forwarded to children. */
|
|
26
|
+
rootObjectiveSummary?: string;
|
|
27
|
+
/** Root turn abort signal; propagated to every child. */
|
|
28
|
+
abortSignal?: AbortSignal;
|
|
29
|
+
/** Lifecycle event sink (runtime event + trace). */
|
|
30
|
+
onSubtaskEvent?: (event: RuntimeSubtaskEvent) => void;
|
|
31
|
+
/** Called once per finished task with its structured result, for artifact persistence. */
|
|
32
|
+
onSubtaskResult?: (result: import('./types').SubtaskResult, batchId: string) => void;
|
|
33
|
+
/**
|
|
34
|
+
* R6: live permission state from the root runtime. Returns true when a
|
|
35
|
+
* permission request is awaiting user decision. When provided, the policy
|
|
36
|
+
* gate uses it instead of a hardcoded false, preventing background
|
|
37
|
+
* delegation while the user is deciding a permission.
|
|
38
|
+
*/
|
|
39
|
+
hasPendingPermission?: () => boolean;
|
|
40
|
+
/**
|
|
41
|
+
* R6: called with each child's observed usage so the root loop can record
|
|
42
|
+
* it into its shared CostTracker. The observed values are never clamped;
|
|
43
|
+
* `/cost` and telemetry must reflect the truth.
|
|
44
|
+
*/
|
|
45
|
+
onChildUsage?: (taskId: string, role: import('./types').SubagentRole, usage: import('./types').SubtaskUsage, modelLabel?: string) => void;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Build the `subtask` tool for a root turn, or null if disabled.
|
|
49
|
+
*
|
|
50
|
+
* Returns a bundle: the tool to merge into the root turn's tool list, plus an
|
|
51
|
+
* accessor for the aggregate child usage so the root loop can fold child cost
|
|
52
|
+
* into its loop stats and `/cost`. The bundle is null when subagents are off.
|
|
53
|
+
*/
|
|
54
|
+
export declare function createSubagentBundleForTurn(inputs: SubagentTurnInputs): SubagentTurnBundle | null;
|
|
55
|
+
/**
|
|
56
|
+
* Backwards-compatible wrapper returning only the tool. Prefer
|
|
57
|
+
* {@link createSubagentBundleForTurn} when the root loop needs to fold child
|
|
58
|
+
* usage into its stats.
|
|
59
|
+
*/
|
|
60
|
+
export declare function createSubagentToolForTurn(inputs: SubagentTurnInputs): OpenHorseTool | null;
|
|
61
|
+
/** A subtask turn bundle: the tool plus usage accessors for the root loop. */
|
|
62
|
+
export interface SubagentTurnBundle {
|
|
63
|
+
tool: OpenHorseTool;
|
|
64
|
+
/** Reconciled aggregate usage across all children that ran this turn. */
|
|
65
|
+
getAggregateUsage: () => SubtaskUsage;
|
|
66
|
+
/** Best-effort count of subtasks that ran this turn. */
|
|
67
|
+
getSubtaskCount: () => number;
|
|
68
|
+
}
|
|
69
|
+
/** Derive the root LLM config slice from the runtime config. */
|
|
70
|
+
export declare function deriveRootLlmConfig(config: OpenHorseCLIConfig): Pick<LLMConfig, 'apiKey' | 'baseUrl' | 'model' | 'fallbackModel'>;
|
|
71
|
+
/** Re-exported for the root loop to read aggregate usage after a turn. */
|
|
72
|
+
export { runSubtaskBatch };
|
|
73
|
+
//# sourceMappingURL=runtime-integration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-integration.d.ts","sourceRoot":"","sources":["../../../src/runtime/subagents/runtime-integration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,sBAAsB,CAAC;AAIvE,OAAO,EAAE,eAAe,EAA+B,MAAM,cAAc,CAAC;AAI5E,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACjF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAiBhE,MAAM,WAAW,kBAAkB;IACjC,gEAAgE;IAChE,MAAM,EAAE,cAAc,CAAC;IACvB,8BAA8B;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,iFAAiF;IACjF,aAAa,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,eAAe,CAAC,CAAC;IACjF,qCAAqC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,yDAAyD;IACzD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,oDAAoD;IACpD,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACtD,0FAA0F;IAC1F,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACrF;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,MAAM,OAAO,CAAC;IACrC;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,SAAS,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3I;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,kBAAkB,GAAG,kBAAkB,GAAG,IAAI,CAyFjG;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,kBAAkB,GAAG,aAAa,GAAG,IAAI,CAG1F;AAED,8EAA8E;AAC9E,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,aAAa,CAAC;IACpB,yEAAyE;IACzE,iBAAiB,EAAE,MAAM,YAAY,CAAC;IACtC,wDAAwD;IACxD,eAAe,EAAE,MAAM,MAAM,CAAC;CAC/B;AAED,gEAAgE;AAChE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,eAAe,CAAC,CAOjI;AAED,0EAA0E;AAC1E,OAAO,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Turn-level integration: build the runtime-bound `subtask` tool for a root turn.
|
|
4
|
+
*
|
|
5
|
+
* This is the bridge between {@link AgentChatController} and the subagent
|
|
6
|
+
* runtime. It resolves the child tool set from the global runtime tools, builds
|
|
7
|
+
* the production executeQuery, the budget ledger, the provider gate and the
|
|
8
|
+
* Supervisor, and returns the `subtask` OpenHorseTool to merge into the root
|
|
9
|
+
* turn's tool list. Returns null when subagents are off or the LLM is absent,
|
|
10
|
+
* so the root loop is unchanged.
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.runSubtaskBatch = void 0;
|
|
14
|
+
exports.createSubagentBundleForTurn = createSubagentBundleForTurn;
|
|
15
|
+
exports.createSubagentToolForTurn = createSubagentToolForTurn;
|
|
16
|
+
exports.deriveRootLlmConfig = deriveRootLlmConfig;
|
|
17
|
+
const budget_1 = require("./budget");
|
|
18
|
+
const provider_gate_1 = require("./provider-gate");
|
|
19
|
+
const production_1 = require("./production");
|
|
20
|
+
const supervisor_1 = require("./supervisor");
|
|
21
|
+
Object.defineProperty(exports, "runSubtaskBatch", { enumerable: true, get: function () { return supervisor_1.runSubtaskBatch; } });
|
|
22
|
+
const tool_1 = require("./tool");
|
|
23
|
+
const presets_1 = require("./presets");
|
|
24
|
+
const child_executor_guard_1 = require("./child-executor-guard");
|
|
25
|
+
/**
|
|
26
|
+
* Lazy accessor for the runtime tool pool.
|
|
27
|
+
*
|
|
28
|
+
* Importing `../../tools` at module top-level creates a circular dependency:
|
|
29
|
+
* subagents barrel → runtime-integration → tools/index → web → config → subagents/types
|
|
30
|
+
* When `tools/index` loads before `web.ts` finishes, `WEB_TOOLS` is still
|
|
31
|
+
* `undefined` and `...WEB_TOOLS` throws "not iterable". Deferring the import
|
|
32
|
+
* to call-time breaks the cycle because by then all modules have initialized.
|
|
33
|
+
*/
|
|
34
|
+
function lazyRuntimeTools() {
|
|
35
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
36
|
+
const tools = require('../../tools');
|
|
37
|
+
return { executeTool: tools.executeTool, getRuntimeTools: tools.getRuntimeTools };
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Build the `subtask` tool for a root turn, or null if disabled.
|
|
41
|
+
*
|
|
42
|
+
* Returns a bundle: the tool to merge into the root turn's tool list, plus an
|
|
43
|
+
* accessor for the aggregate child usage so the root loop can fold child cost
|
|
44
|
+
* into its loop stats and `/cost`. The bundle is null when subagents are off.
|
|
45
|
+
*/
|
|
46
|
+
function createSubagentBundleForTurn(inputs) {
|
|
47
|
+
const { config, cwd, rootLlmConfig, abortSignal, onSubtaskEvent } = inputs;
|
|
48
|
+
if (config.mode === 'off')
|
|
49
|
+
return null;
|
|
50
|
+
if (!rootLlmConfig.apiKey)
|
|
51
|
+
return null;
|
|
52
|
+
// Resolve child tools: all v0.2.20 roles share the read-only allowlist, so
|
|
53
|
+
// filter once for 'research'. Assert no forbidden tool slips in as a
|
|
54
|
+
// defense-in-depth check (the allowlist already excludes them, but this
|
|
55
|
+
// catches future regressions).
|
|
56
|
+
const { executeTool, getRuntimeTools } = lazyRuntimeTools();
|
|
57
|
+
const runtimeTools = getRuntimeTools();
|
|
58
|
+
const availableNames = runtimeTools.map(t => t.name);
|
|
59
|
+
const allowedNames = new Set((0, presets_1.filterToolsForRole)(availableNames, 'research', runtimeTools));
|
|
60
|
+
const childTools = runtimeTools.filter(t => allowedNames.has(t.name));
|
|
61
|
+
(0, presets_1.assertNoForbiddenTools)(childTools.map(t => t.name));
|
|
62
|
+
// Defense-in-depth: map tool name -> definition so the executor can re-verify
|
|
63
|
+
// isReadOnly() on every call. A tool that is not read-only must never execute
|
|
64
|
+
// in a child context, regardless of what the allowlist says at construction.
|
|
65
|
+
const childToolByName = new Map();
|
|
66
|
+
for (const t of childTools)
|
|
67
|
+
childToolByName.set(t.name, t);
|
|
68
|
+
// R3: scope holder lets the supervisor set the current packet's scope
|
|
69
|
+
// before each child runs, so the turn-level guard enforces per-packet
|
|
70
|
+
// containment without rebuilding the executor.
|
|
71
|
+
const scopeHolder = new child_executor_guard_1.ScopeHolder();
|
|
72
|
+
const unguardedExecutor = async (name, args, signal) => {
|
|
73
|
+
if (!allowedNames.has(name)) {
|
|
74
|
+
return JSON.stringify({ success: false, error: `Tool ${name} is not available to subagents.` });
|
|
75
|
+
}
|
|
76
|
+
// Re-verify read-only at execution time: catches tools whose isReadOnly()
|
|
77
|
+
// returns false (mutating MCP actions, future regressions).
|
|
78
|
+
const tool = childToolByName.get(name);
|
|
79
|
+
if (!tool || tool.isReadOnly?.(args) !== true) {
|
|
80
|
+
return JSON.stringify({ success: false, error: `Tool ${name} is not read-only and cannot run in a subagent.` });
|
|
81
|
+
}
|
|
82
|
+
const toolContext = { cwd, config: { name: 'openhorse-subagent', mode: 'subagent' }, abortSignal: signal };
|
|
83
|
+
return executeTool(name, args, signal, toolContext);
|
|
84
|
+
};
|
|
85
|
+
const childToolExecutor = (0, child_executor_guard_1.createChildToolExecutorGuard)(unguardedExecutor, {
|
|
86
|
+
rootCwd: cwd,
|
|
87
|
+
scopeHolder,
|
|
88
|
+
});
|
|
89
|
+
const providerGate = new provider_gate_1.SubagentProviderGate({ maxConcurrent: config.maxParallel });
|
|
90
|
+
const budget = new budget_1.SubagentBudgetLedger((0, budget_1.budgetLimitsFromConfig)({
|
|
91
|
+
maxModelRequestsPerTurn: config.maxModelRequestsPerTurn,
|
|
92
|
+
maxModelRequestsPerTask: config.maxModelRequestsPerTask,
|
|
93
|
+
maxToolCallsPerTask: config.maxToolCallsPerTask,
|
|
94
|
+
timeoutMs: config.timeoutMs,
|
|
95
|
+
}));
|
|
96
|
+
// R6: turn-level task counter persists across `subtask` calls so multiple
|
|
97
|
+
// calls in one root turn cannot exceed `maxTasksPerTurn`.
|
|
98
|
+
const turnTaskState = new budget_1.TurnTaskState();
|
|
99
|
+
const executeQuery = (0, production_1.createProductionExecuteQuery)({
|
|
100
|
+
rootConfig: rootLlmConfig,
|
|
101
|
+
providerGate,
|
|
102
|
+
maxTurnsPerTask: config.maxTurnsPerTask,
|
|
103
|
+
});
|
|
104
|
+
const supervisorDeps = {
|
|
105
|
+
config,
|
|
106
|
+
cwd,
|
|
107
|
+
budget,
|
|
108
|
+
providerGate,
|
|
109
|
+
executeQuery,
|
|
110
|
+
toolSet: { tools: childTools, toolExecutor: childToolExecutor },
|
|
111
|
+
scopeHolder,
|
|
112
|
+
turnTaskState,
|
|
113
|
+
hasPendingPermission: inputs.hasPendingPermission,
|
|
114
|
+
onChildUsage: inputs.onChildUsage,
|
|
115
|
+
parentAbortSignal: abortSignal,
|
|
116
|
+
rootObjectiveSummary: inputs.rootObjectiveSummary,
|
|
117
|
+
modelLabel: inputs.modelLabel,
|
|
118
|
+
onEvent: onSubtaskEvent,
|
|
119
|
+
onSubtaskResult: inputs.onSubtaskResult,
|
|
120
|
+
};
|
|
121
|
+
const tool = (0, tool_1.createSubtaskTool)(supervisorDeps);
|
|
122
|
+
return {
|
|
123
|
+
tool,
|
|
124
|
+
/** Read-only accessor for the reconciled aggregate child usage this turn. */
|
|
125
|
+
getAggregateUsage: () => budget.aggregateUsage(),
|
|
126
|
+
/** Number of subtasks that ran (reconciled) this turn. */
|
|
127
|
+
getSubtaskCount: () => budget.reconciledTaskCount(),
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Backwards-compatible wrapper returning only the tool. Prefer
|
|
132
|
+
* {@link createSubagentBundleForTurn} when the root loop needs to fold child
|
|
133
|
+
* usage into its stats.
|
|
134
|
+
*/
|
|
135
|
+
function createSubagentToolForTurn(inputs) {
|
|
136
|
+
const bundle = createSubagentBundleForTurn(inputs);
|
|
137
|
+
return bundle ? bundle.tool : null;
|
|
138
|
+
}
|
|
139
|
+
/** Derive the root LLM config slice from the runtime config. */
|
|
140
|
+
function deriveRootLlmConfig(config) {
|
|
141
|
+
return {
|
|
142
|
+
apiKey: config.apiKey,
|
|
143
|
+
baseUrl: config.apiBaseUrl,
|
|
144
|
+
model: config.model,
|
|
145
|
+
fallbackModel: config.fallbackModel,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=runtime-integration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-integration.js","sourceRoot":"","sources":["../../../src/runtime/subagents/runtime-integration.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AAoEH,kEAyFC;AAOD,8DAGC;AAYD,kDAOC;AAvLD,qCAAuF;AACvF,mDAAuD;AACvD,6CAA4D;AAC5D,6CAA4E;AAuLnE,gGAvLA,4BAAe,OAuLA;AAtLxB,iCAA2C;AAC3C,uCAAuE;AACvE,iEAAmF;AAKnF;;;;;;;;GAQG;AACH,SAAS,gBAAgB;IACvB,iEAAiE;IACjE,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,CAAiC,CAAC;IACrE,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC;AACpF,CAAC;AAkCD;;;;;;GAMG;AACH,SAAgB,2BAA2B,CAAC,MAA0B;IACpE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,MAAM,CAAC;IAC3E,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,CAAC,aAAa,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEvC,2EAA2E;IAC3E,qEAAqE;IACrE,wEAAwE;IACxE,+BAA+B;IAC/B,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAC5D,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IACvC,MAAM,cAAc,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,IAAA,4BAAkB,EAAC,cAAc,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;IAC3F,MAAM,UAAU,GAAoB,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACvF,IAAA,gCAAsB,EAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAEpD,8EAA8E;IAC9E,8EAA8E;IAC9E,6EAA6E;IAC7E,MAAM,eAAe,GAAG,IAAI,GAAG,EAAyB,CAAC;IACzD,KAAK,MAAM,CAAC,IAAI,UAAU;QAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAE3D,sEAAsE;IACtE,sEAAsE;IACtE,+CAA+C;IAC/C,MAAM,WAAW,GAAG,IAAI,kCAAW,EAAE,CAAC;IAEtC,MAAM,iBAAiB,GAAG,KAAK,EAAE,IAAY,EAAE,IAA6B,EAAE,MAAoB,EAAmB,EAAE;QACrH,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,IAAI,iCAAiC,EAAE,CAAC,CAAC;QAClG,CAAC;QACD,0EAA0E;QAC1E,4DAA4D;QAC5D,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YAC9C,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,IAAI,iDAAiD,EAAE,CAAC,CAAC;QAClH,CAAC;QACD,MAAM,WAAW,GAAgB,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;QACxH,OAAO,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IACtD,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,IAAA,mDAA4B,EAAC,iBAAiB,EAAE;QACxE,OAAO,EAAE,GAAG;QACZ,WAAW;KACZ,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,IAAI,oCAAoB,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IACrF,MAAM,MAAM,GAAG,IAAI,6BAAoB,CAAC,IAAA,+BAAsB,EAAC;QAC7D,uBAAuB,EAAE,MAAM,CAAC,uBAAuB;QACvD,uBAAuB,EAAE,MAAM,CAAC,uBAAuB;QACvD,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;QAC/C,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B,CAAC,CAAC,CAAC;IACJ,0EAA0E;IAC1E,0DAA0D;IAC1D,MAAM,aAAa,GAAG,IAAI,sBAAa,EAAE,CAAC;IAE1C,MAAM,YAAY,GAAG,IAAA,yCAA4B,EAAC;QAChD,UAAU,EAAE,aAAa;QACzB,YAAY;QACZ,eAAe,EAAE,MAAM,CAAC,eAAe;KACxC,CAAC,CAAC;IAEH,MAAM,cAAc,GAA2B;QAC7C,MAAM;QACN,GAAG;QACH,MAAM;QACN,YAAY;QACZ,YAAY;QACZ,OAAO,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,iBAAiB,EAAE;QAC/D,WAAW;QACX,aAAa;QACb,oBAAoB,EAAE,MAAM,CAAC,oBAAoB;QACjD,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,iBAAiB,EAAE,WAAW;QAC9B,oBAAoB,EAAE,MAAM,CAAC,oBAAoB;QACjD,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,OAAO,EAAE,cAAc;QACvB,eAAe,EAAE,MAAM,CAAC,eAAe;KACxC,CAAC;IAEF,MAAM,IAAI,GAAG,IAAA,wBAAiB,EAAC,cAAc,CAAC,CAAC;IAC/C,OAAO;QACL,IAAI;QACJ,6EAA6E;QAC7E,iBAAiB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,EAAE;QAChD,0DAA0D;QAC1D,eAAe,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,EAAE;KACpD,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAgB,yBAAyB,CAAC,MAA0B;IAClE,MAAM,MAAM,GAAG,2BAA2B,CAAC,MAAM,CAAC,CAAC;IACnD,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AACrC,CAAC;AAWD,gEAAgE;AAChE,SAAgB,mBAAmB,CAAC,MAA0B;IAC5D,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,UAAU;QAC1B,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,aAAa,EAAE,MAAM,CAAC,aAAa;KACpC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SubagentSupervisor: orchestrates a batch of child subtasks.
|
|
3
|
+
*
|
|
4
|
+
* Owns the task/batch ID space, the state machine, the concurrency queue and
|
|
5
|
+
* ordered aggregation. It is the single place that decides when children start,
|
|
6
|
+
* how they are bounded, and how their results are folded back to the root.
|
|
7
|
+
*
|
|
8
|
+
* The supervisor does NOT own LLM state, tool execution, permission policy or
|
|
9
|
+
* transcript storage. It composes the policy gate, the budget ledger, the
|
|
10
|
+
* provider gate and the runner, and emits renderer-independent lifecycle
|
|
11
|
+
* events that the root loop forwards to terminal/Ink/TUI.
|
|
12
|
+
*/
|
|
13
|
+
import { SubagentBudgetLedger, TurnTaskState } from './budget';
|
|
14
|
+
import { type PolicyRejectReason } from './policy';
|
|
15
|
+
import { SubagentProviderGate } from './provider-gate';
|
|
16
|
+
import { type ExecuteChildQuery, type ChildToolSet } from './runner';
|
|
17
|
+
import type { ScopeHolder } from './child-executor-guard';
|
|
18
|
+
import { type RuntimeSubtaskEvent, type SubagentConfig, type SubtaskBatchResult, type SubtaskRequest, type SubtaskResult } from './types';
|
|
19
|
+
export interface SubagentSupervisorDeps {
|
|
20
|
+
config: SubagentConfig;
|
|
21
|
+
cwd: string;
|
|
22
|
+
budget: SubagentBudgetLedger;
|
|
23
|
+
providerGate: SubagentProviderGate;
|
|
24
|
+
/** Injectable query binding shared with the runner (tests mock this). */
|
|
25
|
+
executeQuery: ExecuteChildQuery;
|
|
26
|
+
/** Filtered, child-safe tool set (already passed through presets). */
|
|
27
|
+
toolSet: ChildToolSet;
|
|
28
|
+
/**
|
|
29
|
+
* R3: mutable scope holder. The supervisor sets the current packet's
|
|
30
|
+
* canonical scope before running it, so the turn-level executor guard can
|
|
31
|
+
* enforce per-packet containment. Optional: when absent, only root
|
|
32
|
+
* containment is enforced.
|
|
33
|
+
*/
|
|
34
|
+
scopeHolder?: ScopeHolder;
|
|
35
|
+
/**
|
|
36
|
+
* R6: turn-level task counter. Persists across `subtask` calls so multiple
|
|
37
|
+
* calls in one root turn cannot exceed `maxTasksPerTurn`. When absent, the
|
|
38
|
+
* supervisor falls back to a per-batch counter (weaker; logged).
|
|
39
|
+
*/
|
|
40
|
+
turnTaskState?: TurnTaskState;
|
|
41
|
+
/**
|
|
42
|
+
* R6: live permission state from the root runtime. Returns true when a
|
|
43
|
+
* permission request is awaiting user decision. When absent, defaults to
|
|
44
|
+
* false (no pending permission) - the root loop should inject the real
|
|
45
|
+
* state to prevent background auto-approval bypass.
|
|
46
|
+
*/
|
|
47
|
+
hasPendingPermission?: () => boolean;
|
|
48
|
+
/**
|
|
49
|
+
* R6: called with each child's observed usage (never clamped) so the root
|
|
50
|
+
* loop can record it into its shared CostTracker. Fires for every terminal
|
|
51
|
+
* state (completed/failed/cancelled/timed_out), so partial usage before a
|
|
52
|
+
* failure is still accounted.
|
|
53
|
+
*/
|
|
54
|
+
onChildUsage?: (taskId: string, role: import('./types').SubagentRole, usage: import('./types').SubtaskUsage, modelLabel?: string) => void;
|
|
55
|
+
/** Parent turn abort signal; propagated to every child. */
|
|
56
|
+
parentAbortSignal?: AbortSignal;
|
|
57
|
+
/** Read-only context forwarded to each child. */
|
|
58
|
+
rootObjectiveSummary?: string;
|
|
59
|
+
modelLabel?: string;
|
|
60
|
+
/** Lifecycle event sink (runtime event + trace). */
|
|
61
|
+
onEvent?: (event: RuntimeSubtaskEvent) => void;
|
|
62
|
+
/** Called once per task with its final SubtaskResult (for artifact persistence). */
|
|
63
|
+
onSubtaskResult?: (result: SubtaskResult, batchId: string) => void;
|
|
64
|
+
}
|
|
65
|
+
export interface RunBatchOutcome {
|
|
66
|
+
result: SubtaskBatchResult;
|
|
67
|
+
/** Whether policy rejected the entire batch before any child ran. */
|
|
68
|
+
rejected: boolean;
|
|
69
|
+
rejectReason?: PolicyRejectReason;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Run a batch of subtasks. Returns a {@link SubtaskBatchResult} whose results
|
|
73
|
+
* are always in request order, regardless of completion order.
|
|
74
|
+
*
|
|
75
|
+
* Never throws: policy rejection, child failures, timeouts and cancels are
|
|
76
|
+
* all normalized into result entries.
|
|
77
|
+
*/
|
|
78
|
+
export declare function runSubtaskBatch(request: SubtaskRequest, deps: SubagentSupervisorDeps): Promise<RunBatchOutcome>;
|
|
79
|
+
//# sourceMappingURL=supervisor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supervisor.d.ts","sourceRoot":"","sources":["../../../src/runtime/subagents/supervisor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC/D,OAAO,EAA6C,KAAK,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9F,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAc,KAAK,iBAAiB,EAAE,KAAK,YAAY,EAA2B,MAAM,UAAU,CAAC;AAC1G,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EAEvB,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,cAAc,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,oBAAoB,CAAC;IAC7B,YAAY,EAAE,oBAAoB,CAAC;IACnC,yEAAyE;IACzE,YAAY,EAAE,iBAAiB,CAAC;IAChC,sEAAsE;IACtE,OAAO,EAAE,YAAY,CAAC;IACtB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B;;;;OAIG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,MAAM,OAAO,CAAC;IACrC;;;;;OAKG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,SAAS,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1I,2DAA2D;IAC3D,iBAAiB,CAAC,EAAE,WAAW,CAAC;IAChC,iDAAiD;IACjD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC/C,oFAAoF;IACpF,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACpE;AAeD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,qEAAqE;IACrE,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,kBAAkB,CAAC;CACnC;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,eAAe,CAAC,CAyG1B"}
|