@bastani/atomic 0.9.18 → 0.9.19-alpha.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +206 -0
- package/README.md +2 -2
- package/dist/builtin/intercom/CHANGELOG.md +51 -0
- package/dist/builtin/intercom/README.md +28 -18
- package/dist/builtin/intercom/broker/broker.ts +81 -9
- package/dist/builtin/intercom/broker/client.ts +45 -1
- package/dist/builtin/intercom/broker/framing.ts +5 -2
- package/dist/builtin/intercom/broker/group-membership.ts +4 -2
- package/dist/builtin/intercom/broker/presence-handler.ts +14 -0
- package/dist/builtin/intercom/broker/send-handler.ts +61 -6
- package/dist/builtin/intercom/broker/terminal-questions.ts +29 -0
- package/dist/builtin/intercom/index.bundle.mjs +1120 -783
- package/dist/builtin/intercom/package.json +2 -2
- package/dist/builtin/intercom/recipient-purpose.ts +9 -0
- package/dist/builtin/intercom/recoverable-disconnect.ts +2 -3
- package/dist/builtin/intercom/retry-policy.ts +4 -2
- package/dist/builtin/intercom/skills/intercom/SKILL.md +8 -7
- package/dist/builtin/intercom/types.ts +18 -3
- package/dist/builtin/mcp/CHANGELOG.md +6 -0
- package/dist/builtin/mcp/README.md +2 -0
- package/dist/builtin/mcp/index.bundle.mjs +2201 -12000
- package/dist/builtin/mcp/package.json +2 -2
- package/dist/builtin/subagents/CHANGELOG.md +57 -0
- package/dist/builtin/subagents/README.md +46 -23
- package/dist/builtin/subagents/agents/code-simplifier.md +1 -1
- package/dist/builtin/subagents/agents/codebase-analyzer.md +1 -1
- package/dist/builtin/subagents/agents/codebase-locator.md +2 -2
- package/dist/builtin/subagents/agents/codebase-online-researcher.md +8 -8
- package/dist/builtin/subagents/agents/codebase-pattern-finder.md +2 -2
- package/dist/builtin/subagents/agents/codebase-research-analyzer.md +1 -1
- package/dist/builtin/subagents/agents/codebase-research-locator.md +2 -2
- package/dist/builtin/subagents/agents/debugger.md +2 -2
- package/dist/builtin/subagents/agents/worker.md +1 -1
- package/dist/builtin/subagents/package.json +2 -2
- package/dist/builtin/subagents/skills/herdr/LICENSE +201 -0
- package/dist/builtin/subagents/skills/herdr/SKILL.md +202 -0
- package/dist/builtin/subagents/skills/subagent/SKILL.md +41 -35
- package/dist/builtin/subagents/skills/tmux/SKILL.md +1 -1
- package/dist/builtin/subagents/src/extension/index.bundle.mjs +1414 -656
- package/dist/builtin/web-access/CHANGELOG.md +19 -0
- package/dist/builtin/web-access/README.md +31 -24
- package/dist/builtin/web-access/index.bundle.mjs +42723 -26674
- package/dist/builtin/web-access/package.json +3 -2
- package/dist/builtin/workflows/CHANGELOG.md +131 -0
- package/dist/builtin/workflows/README.md +15 -16
- package/dist/builtin/workflows/builtin/adversarial-verification.js +5 -7
- package/dist/builtin/workflows/builtin/{chunk-hqpe2cyx.js → chunk-1jth021m.js} +85 -85
- package/dist/builtin/workflows/builtin/{chunk-7430zyas.js → chunk-2377r57g.js} +5 -3
- package/dist/builtin/workflows/builtin/{chunk-79fjkcvh.js → chunk-31j2gs7h.js} +18 -18
- package/dist/builtin/workflows/builtin/{chunk-wgccch41.js → chunk-6w6cvk6b.js} +16 -16
- package/dist/builtin/workflows/builtin/{chunk-zbekjqew.js → chunk-a2kdsqn8.js} +4 -4
- package/dist/builtin/workflows/builtin/{chunk-ze5x3d1r.js → chunk-fg9esgkj.js} +7 -7
- package/dist/builtin/workflows/builtin/{chunk-n8h4yyew.js → chunk-g0csgs7w.js} +11 -11
- package/dist/builtin/workflows/builtin/{chunk-b0v2xab1.js → chunk-ngkqkzej.js} +221 -23
- package/dist/builtin/workflows/builtin/{chunk-ed4jfn5t.js → chunk-nkrafh9s.js} +61 -61
- package/dist/builtin/workflows/builtin/{chunk-reqr3sr3.js → chunk-wf741bv3.js} +22 -22
- package/dist/builtin/workflows/builtin/{chunk-42s7sw0b.js → chunk-yeee2jrc.js} +19 -19
- package/dist/builtin/workflows/builtin/{chunk-6fqs7c01.js → chunk-z0d03ktm.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-k3w87x8y.js → chunk-z29qbehr.js} +10 -10
- package/dist/builtin/workflows/builtin/classify-and-act.js +5 -6
- package/dist/builtin/workflows/builtin/fan-out-and-synthesize.js +3 -4
- package/dist/builtin/workflows/builtin/generate-and-filter.js +5 -6
- package/dist/builtin/workflows/builtin/goal.js +7 -8
- package/dist/builtin/workflows/builtin/index.js +20 -22
- package/dist/builtin/workflows/builtin/loop-until-done.js +5 -6
- package/dist/builtin/workflows/builtin/open-claude-design.js +3 -3
- package/dist/builtin/workflows/builtin/ralph.js +7 -8
- package/dist/builtin/workflows/builtin/steering-context.js +3 -3
- package/dist/builtin/workflows/builtin/tournament.js +5 -7
- package/dist/builtin/workflows/package.json +6 -6
- package/dist/builtin/workflows/src/extension/index.bundle.mjs +57318 -25709
- package/dist/builtin/workflows/src/index.js +1413 -589
- package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +4 -1
- package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +1 -1
- package/dist/cli/config-selector.js.map +1 -1
- package/dist/cli/startup-ui.d.ts +1 -1
- package/dist/cli/startup-ui.js.map +1 -1
- package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
- package/dist/core/agent-session-auto-compaction.js +6 -5
- package/dist/core/agent-session-auto-compaction.js.map +1 -1
- package/dist/core/agent-session-bash.d.ts +1 -1
- package/dist/core/agent-session-bash.d.ts.map +1 -1
- package/dist/core/agent-session-bash.js +5 -1
- package/dist/core/agent-session-bash.js.map +1 -1
- package/dist/core/agent-session-compaction.d.ts +1 -1
- package/dist/core/agent-session-compaction.js +1 -1
- package/dist/core/agent-session-compaction.js.map +1 -1
- package/dist/core/agent-session-custom-message-commit.d.ts +1 -1
- package/dist/core/agent-session-custom-message-commit.d.ts.map +1 -1
- package/dist/core/agent-session-custom-message-commit.js +33 -2
- package/dist/core/agent-session-custom-message-commit.js.map +1 -1
- package/dist/core/agent-session-delivery-forwarding.d.ts +1 -1
- package/dist/core/agent-session-delivery-forwarding.js.map +1 -1
- package/dist/core/agent-session-events.d.ts.map +1 -1
- package/dist/core/agent-session-events.js +5 -0
- package/dist/core/agent-session-events.js.map +1 -1
- package/dist/core/agent-session-export.d.ts +1 -1
- package/dist/core/agent-session-export.js.map +1 -1
- package/dist/core/agent-session-extension-bindings.d.ts +8 -1
- package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
- package/dist/core/agent-session-extension-bindings.js +45 -3
- package/dist/core/agent-session-extension-bindings.js.map +1 -1
- package/dist/core/agent-session-message-queue.d.ts +2 -2
- package/dist/core/agent-session-message-queue.d.ts.map +1 -1
- package/dist/core/agent-session-message-queue.js +22 -8
- package/dist/core/agent-session-message-queue.js.map +1 -1
- package/dist/core/agent-session-methods.d.ts +21 -8
- package/dist/core/agent-session-methods.d.ts.map +1 -1
- package/dist/core/agent-session-methods.js.map +1 -1
- package/dist/core/agent-session-persistent-custom-messages.d.ts +1 -1
- package/dist/core/agent-session-persistent-custom-messages.d.ts.map +1 -1
- package/dist/core/agent-session-persistent-custom-messages.js +13 -3
- package/dist/core/agent-session-persistent-custom-messages.js.map +1 -1
- package/dist/core/agent-session-post-tool-compaction.js +1 -1
- package/dist/core/agent-session-post-tool-compaction.js.map +1 -1
- package/dist/core/agent-session-prompt.d.ts +2 -2
- package/dist/core/agent-session-prompt.d.ts.map +1 -1
- package/dist/core/agent-session-prompt.js +105 -18
- package/dist/core/agent-session-prompt.js.map +1 -1
- package/dist/core/agent-session-queue-pause.d.ts.map +1 -1
- package/dist/core/agent-session-queue-pause.js +11 -0
- package/dist/core/agent-session-queue-pause.js.map +1 -1
- package/dist/core/agent-session-runtime-auth.d.ts +1 -1
- package/dist/core/agent-session-runtime-auth.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts +13 -4
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +27 -4
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +5 -1
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +44 -34
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session-state.d.ts +1 -1
- package/dist/core/agent-session-state.js.map +1 -1
- package/dist/core/agent-session-tasks.d.ts +14 -0
- package/dist/core/agent-session-tasks.d.ts.map +1 -0
- package/dist/core/agent-session-tasks.js +120 -0
- package/dist/core/agent-session-tasks.js.map +1 -0
- package/dist/core/agent-session-tool-hooks.d.ts.map +1 -1
- package/dist/core/agent-session-tool-hooks.js +2 -0
- package/dist/core/agent-session-tool-hooks.js.map +1 -1
- package/dist/core/agent-session-tool-registry.d.ts +1 -0
- package/dist/core/agent-session-tool-registry.d.ts.map +1 -1
- package/dist/core/agent-session-tool-registry.js +52 -5
- package/dist/core/agent-session-tool-registry.js.map +1 -1
- package/dist/core/agent-session-transfer.d.ts.map +1 -1
- package/dist/core/agent-session-transfer.js +7 -0
- package/dist/core/agent-session-transfer.js.map +1 -1
- package/dist/core/agent-session-tree.d.ts.map +1 -1
- package/dist/core/agent-session-tree.js +3 -0
- package/dist/core/agent-session-tree.js.map +1 -1
- package/dist/core/agent-session-types.d.ts +4 -2
- package/dist/core/agent-session-types.d.ts.map +1 -1
- package/dist/core/agent-session-types.js +2 -0
- package/dist/core/agent-session-types.js.map +1 -1
- package/dist/core/agent-session.d.ts +8 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +29 -1
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/bash-executor.d.ts +1 -1
- package/dist/core/bash-executor.js.map +1 -1
- package/dist/core/export-html/index.js.map +1 -1
- package/dist/core/export-html/tool-renderer.d.ts +1 -1
- package/dist/core/export-html/tool-renderer.js.map +1 -1
- package/dist/core/extension-session-state.js.map +1 -1
- package/dist/core/extensions/agent-events.d.ts +4 -4
- package/dist/core/extensions/agent-events.d.ts.map +1 -1
- package/dist/core/extensions/agent-events.js.map +1 -1
- package/dist/core/extensions/api-types.d.ts +10 -2
- package/dist/core/extensions/api-types.d.ts.map +1 -1
- package/dist/core/extensions/api-types.js.map +1 -1
- package/dist/core/extensions/context-types.d.ts +15 -0
- package/dist/core/extensions/context-types.d.ts.map +1 -1
- package/dist/core/extensions/context-types.js.map +1 -1
- package/dist/core/extensions/event-results.d.ts +1 -1
- package/dist/core/extensions/event-results.js.map +1 -1
- package/dist/core/extensions/event-types.d.ts +2 -1
- package/dist/core/extensions/event-types.d.ts.map +1 -1
- package/dist/core/extensions/event-types.js.map +1 -1
- package/dist/core/extensions/index.d.ts +3 -2
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader-api.d.ts +1 -1
- package/dist/core/extensions/loader-api.d.ts.map +1 -1
- package/dist/core/extensions/loader-api.js +10 -0
- package/dist/core/extensions/loader-api.js.map +1 -1
- package/dist/core/extensions/loader-core.d.ts +1 -1
- package/dist/core/extensions/loader-core.js.map +1 -1
- package/dist/core/extensions/loader-discovery.d.ts +1 -1
- package/dist/core/extensions/loader-discovery.js.map +1 -1
- package/dist/core/extensions/loader-host-modules.d.ts +1 -1
- package/dist/core/extensions/loader-host-modules.d.ts.map +1 -1
- package/dist/core/extensions/loader-host-modules.js +5 -2
- package/dist/core/extensions/loader-host-modules.js.map +1 -1
- package/dist/core/extensions/loader-runtime.d.ts.map +1 -1
- package/dist/core/extensions/loader-runtime.js +3 -0
- package/dist/core/extensions/loader-runtime.js.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.js +6 -1
- package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
- package/dist/core/extensions/loader.d.ts +1 -1
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/message-types.d.ts +1 -1
- package/dist/core/extensions/message-types.js.map +1 -1
- package/dist/core/extensions/reactive-widget.d.ts +6 -0
- package/dist/core/extensions/reactive-widget.d.ts.map +1 -1
- package/dist/core/extensions/reactive-widget.js +7 -1
- package/dist/core/extensions/reactive-widget.js.map +1 -1
- package/dist/core/extensions/runner-context.d.ts +12 -2
- package/dist/core/extensions/runner-context.d.ts.map +1 -1
- package/dist/core/extensions/runner-context.js +49 -4
- package/dist/core/extensions/runner-context.js.map +1 -1
- package/dist/core/extensions/runner-events.d.ts +1 -1
- package/dist/core/extensions/runner-events.d.ts.map +1 -1
- package/dist/core/extensions/runner-events.js +17 -2
- package/dist/core/extensions/runner-events.js.map +1 -1
- package/dist/core/extensions/runner-shortcuts.d.ts.map +1 -1
- package/dist/core/extensions/runner-shortcuts.js +32 -3
- package/dist/core/extensions/runner-shortcuts.js.map +1 -1
- package/dist/core/extensions/runner-ui.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +17 -2
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +69 -19
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/runtime-types.d.ts +8 -1
- package/dist/core/extensions/runtime-types.d.ts.map +1 -1
- package/dist/core/extensions/runtime-types.js.map +1 -1
- package/dist/core/extensions/tool-types.d.ts +1 -1
- package/dist/core/extensions/tool-types.js.map +1 -1
- package/dist/core/extensions/types.d.ts +1 -0
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/extensions/ui-types.d.ts +25 -1
- package/dist/core/extensions/ui-types.d.ts.map +1 -1
- package/dist/core/extensions/ui-types.js.map +1 -1
- package/dist/core/extensions/workflow-activity-hub.d.ts +25 -0
- package/dist/core/extensions/workflow-activity-hub.d.ts.map +1 -0
- package/dist/core/extensions/workflow-activity-hub.js +183 -0
- package/dist/core/extensions/workflow-activity-hub.js.map +1 -0
- package/dist/core/extensions/workflow-events.d.ts +118 -0
- package/dist/core/extensions/workflow-events.d.ts.map +1 -0
- package/dist/core/extensions/workflow-events.js +2 -0
- package/dist/core/extensions/workflow-events.js.map +1 -0
- package/dist/core/footer-data-provider.d.ts +8 -4
- package/dist/core/footer-data-provider.d.ts.map +1 -1
- package/dist/core/footer-data-provider.js +97 -11
- package/dist/core/footer-data-provider.js.map +1 -1
- package/dist/core/index.d.ts +3 -3
- package/dist/core/index.js.map +1 -1
- package/dist/core/keybinding-identity.d.ts +4 -0
- package/dist/core/keybinding-identity.d.ts.map +1 -0
- package/dist/core/keybinding-identity.js +10 -0
- package/dist/core/keybinding-identity.js.map +1 -0
- package/dist/core/keybindings.d.ts +37 -2
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +9 -2
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/mandatory-runtime-tools.d.ts +1 -1
- package/dist/core/mandatory-runtime-tools.js.map +1 -1
- package/dist/core/model-fallback-failures.js +2 -2
- package/dist/core/model-fallback-failures.js.map +1 -1
- package/dist/core/model-registry.d.ts +5 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +8 -0
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver-defaults.js +1 -1
- package/dist/core/model-resolver-defaults.js.map +1 -1
- package/dist/core/resource-loader-assets.js.map +1 -1
- package/dist/core/resource-loader-core.d.ts +1 -1
- package/dist/core/resource-loader-core.js.map +1 -1
- package/dist/core/resource-loader-internals.d.ts +2 -2
- package/dist/core/resource-loader-internals.js.map +1 -1
- package/dist/core/resource-loader-reload.d.ts +2 -0
- package/dist/core/resource-loader-reload.d.ts.map +1 -1
- package/dist/core/resource-loader-reload.js +231 -191
- package/dist/core/resource-loader-reload.js.map +1 -1
- package/dist/core/resource-loader-types.d.ts +4 -2
- package/dist/core/resource-loader-types.d.ts.map +1 -1
- package/dist/core/resource-loader-types.js.map +1 -1
- package/dist/core/retry-policy.d.ts +1 -0
- package/dist/core/retry-policy.d.ts.map +1 -1
- package/dist/core/retry-policy.js +2 -1
- package/dist/core/retry-policy.js.map +1 -1
- package/dist/core/sdk-exports.d.ts +3 -3
- package/dist/core/sdk-exports.d.ts.map +1 -1
- package/dist/core/sdk-exports.js +1 -1
- package/dist/core/sdk-exports.js.map +1 -1
- package/dist/core/sdk-types.d.ts +2 -2
- package/dist/core/sdk-types.js.map +1 -1
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/settings-manager-basic-accessors.d.ts +6 -3
- package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
- package/dist/core/settings-manager-basic-accessors.js +25 -8
- package/dist/core/settings-manager-basic-accessors.js.map +1 -1
- package/dist/core/settings-manager-core.d.ts.map +1 -1
- package/dist/core/settings-manager-core.js +10 -4
- package/dist/core/settings-manager-core.js.map +1 -1
- package/dist/core/settings-manager.d.ts +1 -1
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/settings-storage.d.ts +1 -0
- package/dist/core/settings-storage.d.ts.map +1 -1
- package/dist/core/settings-storage.js +18 -0
- package/dist/core/settings-storage.js.map +1 -1
- package/dist/core/settings-types.d.ts +17 -0
- package/dist/core/settings-types.d.ts.map +1 -1
- package/dist/core/settings-types.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +6 -5
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +5 -6
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tasks/agent-adapter.d.ts +44 -0
- package/dist/core/tasks/agent-adapter.d.ts.map +1 -0
- package/dist/core/tasks/agent-adapter.js +112 -0
- package/dist/core/tasks/agent-adapter.js.map +1 -0
- package/dist/core/tasks/command-output.d.ts +15 -0
- package/dist/core/tasks/command-output.d.ts.map +1 -0
- package/dist/core/tasks/command-output.js +29 -0
- package/dist/core/tasks/command-output.js.map +1 -0
- package/dist/core/tasks/completion-ordering.d.ts +11 -0
- package/dist/core/tasks/completion-ordering.d.ts.map +1 -0
- package/dist/core/tasks/completion-ordering.js +19 -0
- package/dist/core/tasks/completion-ordering.js.map +1 -0
- package/dist/core/tasks/completion.d.ts +36 -0
- package/dist/core/tasks/completion.d.ts.map +1 -0
- package/dist/core/tasks/completion.js +119 -0
- package/dist/core/tasks/completion.js.map +1 -0
- package/dist/core/tasks/contracts.d.ts +404 -0
- package/dist/core/tasks/contracts.d.ts.map +1 -0
- package/dist/core/tasks/contracts.js +2 -0
- package/dist/core/tasks/contracts.js.map +1 -0
- package/dist/core/tasks/execution-scope.d.ts +10 -0
- package/dist/core/tasks/execution-scope.d.ts.map +1 -0
- package/dist/core/tasks/execution-scope.js +27 -0
- package/dist/core/tasks/execution-scope.js.map +1 -0
- package/dist/core/tasks/owner-store.d.ts +53 -0
- package/dist/core/tasks/owner-store.d.ts.map +1 -0
- package/dist/core/tasks/owner-store.js +155 -0
- package/dist/core/tasks/owner-store.js.map +1 -0
- package/dist/core/tasks/pause.d.ts +4 -0
- package/dist/core/tasks/pause.d.ts.map +1 -0
- package/dist/core/tasks/pause.js +49 -0
- package/dist/core/tasks/pause.js.map +1 -0
- package/dist/core/tasks/supervisor.d.ts +123 -0
- package/dist/core/tasks/supervisor.d.ts.map +1 -0
- package/dist/core/tasks/supervisor.js +942 -0
- package/dist/core/tasks/supervisor.js.map +1 -0
- package/dist/core/tasks/transcript.d.ts +23 -0
- package/dist/core/tasks/transcript.d.ts.map +1 -0
- package/dist/core/tasks/transcript.js +74 -0
- package/dist/core/tasks/transcript.js.map +1 -0
- package/dist/core/tools/ask-user-question/ask-user-question.d.ts +2 -2
- package/dist/core/tools/ask-user-question/ask-user-question.d.ts.map +1 -1
- package/dist/core/tools/ask-user-question/ask-user-question.js +8 -4
- package/dist/core/tools/ask-user-question/ask-user-question.js.map +1 -1
- package/dist/core/tools/ask-user-question/state/build-questionnaire.d.ts +1 -1
- package/dist/core/tools/ask-user-question/state/build-questionnaire.js.map +1 -1
- package/dist/core/tools/ask-user-question/state/questionnaire-session.d.ts +1 -1
- package/dist/core/tools/ask-user-question/state/questionnaire-session.js.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/multi-select-view.d.ts +1 -1
- package/dist/core/tools/ask-user-question/view/components/multi-select-view.js.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/preview/markdown-content-cache.d.ts +1 -1
- package/dist/core/tools/ask-user-question/view/components/preview/markdown-content-cache.js.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/preview/preview-block-renderer.d.ts +1 -1
- package/dist/core/tools/ask-user-question/view/components/preview/preview-block-renderer.js.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/submit-picker.d.ts +1 -1
- package/dist/core/tools/ask-user-question/view/components/submit-picker.js.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/tab-bar.d.ts +1 -1
- package/dist/core/tools/ask-user-question/view/components/tab-bar.js.map +1 -1
- package/dist/core/tools/ask-user-question/view/dialog-builder.d.ts +1 -1
- package/dist/core/tools/ask-user-question/view/dialog-builder.js.map +1 -1
- package/dist/core/tools/ask-user-question/view/tab-content-strategy.d.ts +1 -1
- package/dist/core/tools/ask-user-question/view/tab-content-strategy.js.map +1 -1
- package/dist/core/tools/bash-pty-native.d.ts +32 -3
- package/dist/core/tools/bash-pty-native.d.ts.map +1 -1
- package/dist/core/tools/bash-pty-native.js +198 -1
- package/dist/core/tools/bash-pty-native.js.map +1 -1
- package/dist/core/tools/bash.d.ts +25 -5
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +100 -10
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit.d.ts +3 -0
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +92 -14
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/file-mutation-coordinator.d.ts +255 -0
- package/dist/core/tools/file-mutation-coordinator.d.ts.map +1 -0
- package/dist/core/tools/file-mutation-coordinator.js +300 -0
- package/dist/core/tools/file-mutation-coordinator.js.map +1 -0
- package/dist/core/tools/file-mutation-queue.d.ts +14 -1
- package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
- package/dist/core/tools/file-mutation-queue.js +15 -3
- package/dist/core/tools/file-mutation-queue.js.map +1 -1
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/hashline.d.ts +9 -0
- package/dist/core/tools/hashline.d.ts.map +1 -1
- package/dist/core/tools/hashline.js +12 -1
- package/dist/core/tools/hashline.js.map +1 -1
- package/dist/core/tools/index.d.ts +15 -4
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +79 -12
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/kill.d.ts +17 -0
- package/dist/core/tools/kill.d.ts.map +1 -0
- package/dist/core/tools/kill.js +49 -0
- package/dist/core/tools/kill.js.map +1 -0
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/non-minting-snapshot-store.d.ts +49 -0
- package/dist/core/tools/non-minting-snapshot-store.d.ts.map +1 -0
- package/dist/core/tools/non-minting-snapshot-store.js +64 -0
- package/dist/core/tools/non-minting-snapshot-store.js.map +1 -0
- package/dist/core/tools/powershell.d.ts +100 -34
- package/dist/core/tools/powershell.d.ts.map +1 -1
- package/dist/core/tools/powershell.js +41 -11
- package/dist/core/tools/powershell.js.map +1 -1
- package/dist/core/tools/read-document-extract.js.map +1 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +1 -2
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/render-utils.d.ts +1 -1
- package/dist/core/tools/render-utils.js.map +1 -1
- package/dist/core/tools/resource-selectors.d.ts +1 -1
- package/dist/core/tools/resource-selectors.d.ts.map +1 -1
- package/dist/core/tools/resource-selectors.js +21 -10
- package/dist/core/tools/resource-selectors.js.map +1 -1
- package/dist/core/tools/search.js.map +1 -1
- package/dist/core/tools/todos-render.d.ts +1 -1
- package/dist/core/tools/todos-render.js.map +1 -1
- package/dist/core/tools/write.d.ts +30 -1
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +98 -10
- package/dist/core/tools/write.js.map +1 -1
- package/dist/core/workflow-stage-admission.d.ts +24 -0
- package/dist/core/workflow-stage-admission.d.ts.map +1 -1
- package/dist/core/workflow-stage-admission.js +87 -3
- package/dist/core/workflow-stage-admission.js.map +1 -1
- package/dist/extensions/herdr/activity.d.ts +15 -0
- package/dist/extensions/herdr/activity.d.ts.map +1 -0
- package/dist/extensions/herdr/activity.js +24 -0
- package/dist/extensions/herdr/activity.js.map +1 -0
- package/dist/extensions/herdr/environment.d.ts +7 -0
- package/dist/extensions/herdr/environment.d.ts.map +1 -0
- package/dist/extensions/herdr/environment.js +6 -0
- package/dist/extensions/herdr/environment.js.map +1 -0
- package/dist/extensions/herdr/index.d.ts +9 -0
- package/dist/extensions/herdr/index.d.ts.map +1 -0
- package/dist/extensions/herdr/index.js +225 -0
- package/dist/extensions/herdr/index.js.map +1 -0
- package/dist/extensions/herdr/pane-owner.d.ts +30 -0
- package/dist/extensions/herdr/pane-owner.d.ts.map +1 -0
- package/dist/extensions/herdr/pane-owner.js +111 -0
- package/dist/extensions/herdr/pane-owner.js.map +1 -0
- package/dist/extensions/herdr/transport.d.ts +8 -0
- package/dist/extensions/herdr/transport.d.ts.map +1 -0
- package/dist/extensions/herdr/transport.js +28 -0
- package/dist/extensions/herdr/transport.js.map +1 -0
- package/dist/extensions/index.d.ts.map +1 -1
- package/dist/extensions/index.js +2 -0
- package/dist/extensions/index.js.map +1 -1
- package/dist/extensions/llama/huggingface-ui.d.ts +1 -1
- package/dist/extensions/llama/huggingface-ui.js.map +1 -1
- package/dist/extensions/llama/ui.js.map +1 -1
- package/dist/index-extensions.d.ts +3 -2
- package/dist/index-extensions.d.ts.map +1 -1
- package/dist/index-extensions.js.map +1 -1
- package/dist/index.d.ts +14 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/dist/main-session.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +149 -69
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/armin.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/atomic-banner.d.ts +1 -1
- package/dist/modes/interactive/components/atomic-banner.js.map +1 -1
- package/dist/modes/interactive/components/atomic-working-status.js.map +1 -1
- package/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.d.ts +1 -1
- package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/chat-message-renderer.d.ts +12 -0
- package/dist/modes/interactive/components/chat-message-renderer.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-message-renderer.js +44 -0
- package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-actions.d.ts +1 -1
- package/dist/modes/interactive/components/chat-session-host-actions.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-actions.js +43 -8
- package/dist/modes/interactive/components/chat-session-host-actions.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-editor.d.ts +1 -1
- package/dist/modes/interactive/components/chat-session-host-editor.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-events.d.ts +2 -2
- package/dist/modes/interactive/components/chat-session-host-events.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-rendering.d.ts +2 -2
- package/dist/modes/interactive/components/chat-session-host-rendering.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-rendering.js +12 -3
- package/dist/modes/interactive/components/chat-session-host-rendering.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-runtime.d.ts +4 -5
- package/dist/modes/interactive/components/chat-session-host-runtime.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-runtime.js +8 -6
- package/dist/modes/interactive/components/chat-session-host-runtime.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-state.d.ts +7 -2
- package/dist/modes/interactive/components/chat-session-host-state.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-state.js +1 -0
- package/dist/modes/interactive/components/chat-session-host-state.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-terminal-cleanup.d.ts +1 -1
- package/dist/modes/interactive/components/chat-session-host-terminal-cleanup.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-types.d.ts +8 -3
- package/dist/modes/interactive/components/chat-session-host-types.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-types.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-utils.d.ts +1 -1
- package/dist/modes/interactive/components/chat-session-host-utils.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-utils.js +2 -0
- package/dist/modes/interactive/components/chat-session-host-utils.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host.d.ts +17 -2
- package/dist/modes/interactive/components/chat-session-host.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host.js +100 -3
- package/dist/modes/interactive/components/chat-session-host.js.map +1 -1
- package/dist/modes/interactive/components/chat-transcript.d.ts +1 -0
- package/dist/modes/interactive/components/chat-transcript.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-transcript.js +1 -1
- package/dist/modes/interactive/components/chat-transcript.js.map +1 -1
- package/dist/modes/interactive/components/compaction-boundary-message.js.map +1 -1
- package/dist/modes/interactive/components/config-selector-list.js.map +1 -1
- package/dist/modes/interactive/components/config-selector.js.map +1 -1
- package/dist/modes/interactive/components/custom-editor.js.map +1 -1
- package/dist/modes/interactive/components/custom-entry.js.map +1 -1
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-message.js +12 -0
- package/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/dist/modes/interactive/components/daxnuts.js.map +1 -1
- package/dist/modes/interactive/components/diff.js.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
- package/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
- package/dist/modes/interactive/components/extension-editor.js.map +1 -1
- package/dist/modes/interactive/components/extension-input.js.map +1 -1
- package/dist/modes/interactive/components/extension-selector.js.map +1 -1
- package/dist/modes/interactive/components/first-time-setup.d.ts +1 -1
- package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts +7 -6
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +27 -9
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/host-input-form-mount.js.map +1 -1
- package/dist/modes/interactive/components/host-input-form.d.ts +1 -1
- package/dist/modes/interactive/components/host-input-form.js.map +1 -1
- package/dist/modes/interactive/components/index.d.ts +2 -2
- package/dist/modes/interactive/components/index.js.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/mermaid.d.ts +1 -1
- package/dist/modes/interactive/components/mermaid.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/components/reserved-bottom-overlay.js.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
- package/dist/modes/interactive/components/scroll-widget.d.ts +23 -0
- package/dist/modes/interactive/components/scroll-widget.d.ts.map +1 -0
- package/dist/modes/interactive/components/scroll-widget.js +61 -0
- package/dist/modes/interactive/components/scroll-widget.js.map +1 -0
- package/dist/modes/interactive/components/session-selector-header.js.map +1 -1
- package/dist/modes/interactive/components/session-selector-list.js.map +1 -1
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-items.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-submenus.d.ts +1 -1
- package/dist/modes/interactive/components/settings-selector-submenus.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-types.d.ts +1 -1
- package/dist/modes/interactive/components/settings-selector-types.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
- package/dist/modes/interactive/components/task-completion-message.d.ts +13 -0
- package/dist/modes/interactive/components/task-completion-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/task-completion-message.js +65 -0
- package/dist/modes/interactive/components/task-completion-message.js.map +1 -0
- package/dist/modes/interactive/components/task-detail.d.ts +27 -0
- package/dist/modes/interactive/components/task-detail.d.ts.map +1 -0
- package/dist/modes/interactive/components/task-detail.js +107 -0
- package/dist/modes/interactive/components/task-detail.js.map +1 -0
- package/dist/modes/interactive/components/task-inspector.d.ts +50 -0
- package/dist/modes/interactive/components/task-inspector.d.ts.map +1 -0
- package/dist/modes/interactive/components/task-inspector.js +599 -0
- package/dist/modes/interactive/components/task-inspector.js.map +1 -0
- package/dist/modes/interactive/components/task-list.d.ts +18 -0
- package/dist/modes/interactive/components/task-list.d.ts.map +1 -0
- package/dist/modes/interactive/components/task-list.js +59 -0
- package/dist/modes/interactive/components/task-list.js.map +1 -0
- package/dist/modes/interactive/components/task-live-transcript.d.ts +17 -0
- package/dist/modes/interactive/components/task-live-transcript.d.ts.map +1 -0
- package/dist/modes/interactive/components/task-live-transcript.js +41 -0
- package/dist/modes/interactive/components/task-live-transcript.js.map +1 -0
- package/dist/modes/interactive/components/task-navigation.d.ts +38 -0
- package/dist/modes/interactive/components/task-navigation.d.ts.map +1 -0
- package/dist/modes/interactive/components/task-navigation.js +93 -0
- package/dist/modes/interactive/components/task-navigation.js.map +1 -0
- package/dist/modes/interactive/components/task-row.d.ts +34 -0
- package/dist/modes/interactive/components/task-row.d.ts.map +1 -0
- package/dist/modes/interactive/components/task-row.js +165 -0
- package/dist/modes/interactive/components/task-row.js.map +1 -0
- package/dist/modes/interactive/components/theme-selector.js.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/transcript-follow-indicator.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector-component.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector-content.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector-help.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector-label-input.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector-list.js.map +1 -1
- package/dist/modes/interactive/components/trust-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message.js.map +1 -1
- package/dist/modes/interactive/components/working-status.js.map +1 -1
- package/dist/modes/interactive/interactive-agent-events.js +8 -2
- package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
- package/dist/modes/interactive/interactive-auth-login.js +3 -1
- package/dist/modes/interactive/interactive-auth-login.js.map +1 -1
- package/dist/modes/interactive/interactive-autocomplete.js +9 -30
- package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
- package/dist/modes/interactive/interactive-deferred-startup.js +2 -1
- package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -1
- package/dist/modes/interactive/interactive-extension-context.js +14 -4
- package/dist/modes/interactive/interactive-extension-context.js.map +1 -1
- package/dist/modes/interactive/interactive-extension-custom-ui.js +52 -4
- package/dist/modes/interactive/interactive-extension-custom-ui.js.map +1 -1
- package/dist/modes/interactive/interactive-extension-runtime.js +11 -3
- package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -1
- package/dist/modes/interactive/interactive-extension-widgets.js +9 -1
- package/dist/modes/interactive/interactive-extension-widgets.js.map +1 -1
- package/dist/modes/interactive/interactive-input-handling.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-input-handling.js +19 -0
- package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.d.ts +7 -1
- package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.js +10 -4
- package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-deps.d.ts +6 -6
- package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.d.ts +3 -2
- package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +3 -0
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/interactive-process-lifecycle.js +4 -1
- package/dist/modes/interactive/interactive-process-lifecycle.js.map +1 -1
- package/dist/modes/interactive/interactive-render-chat.js +30 -4
- package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
- package/dist/modes/interactive/interactive-session-routing.js +33 -23
- package/dist/modes/interactive/interactive-session-routing.js.map +1 -1
- package/dist/modes/interactive/interactive-session-runtime.js +1 -0
- package/dist/modes/interactive/interactive-session-runtime.js.map +1 -1
- package/dist/modes/interactive/interactive-slash-commands.js.map +1 -1
- package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-startup.js +3 -0
- package/dist/modes/interactive/interactive-startup.js.map +1 -1
- package/dist/modes/interactive/interactive-summarization-retry-events.js +2 -2
- package/dist/modes/interactive/interactive-summarization-retry-events.js.map +1 -1
- package/dist/modes/interactive/interactive-task-projection.d.ts +13 -0
- package/dist/modes/interactive/interactive-task-projection.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-task-projection.js +72 -0
- package/dist/modes/interactive/interactive-task-projection.js.map +1 -0
- package/dist/modes/interactive/interactive-tui.js.map +1 -1
- package/dist/modes/interactive/interactive-windows-subshell.d.ts +17 -0
- package/dist/modes/interactive/interactive-windows-subshell.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-windows-subshell.js +92 -0
- package/dist/modes/interactive/interactive-windows-subshell.js.map +1 -0
- package/dist/modes/interactive/skill-command-autocomplete.d.ts +12 -0
- package/dist/modes/interactive/skill-command-autocomplete.d.ts.map +1 -0
- package/dist/modes/interactive/skill-command-autocomplete.js +69 -0
- package/dist/modes/interactive/skill-command-autocomplete.js.map +1 -0
- package/dist/modes/interactive/theme/theme-class.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-class.js +4 -1
- package/dist/modes/interactive/theme/theme-class.js.map +1 -1
- package/dist/modes/interactive/theme/theme-controller.d.ts +1 -1
- package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
- package/dist/modes/interactive-engine/activity-watchdog.d.ts +2 -2
- package/dist/modes/interactive-engine/activity-watchdog.d.ts.map +1 -1
- package/dist/modes/interactive-engine/activity-watchdog.js.map +1 -1
- package/dist/modes/interactive-engine/create-isolated-runtime.d.ts +1 -1
- package/dist/modes/interactive-engine/create-isolated-runtime.js.map +1 -1
- package/dist/modes/interactive-engine/engine-custom-ui.d.ts +9 -10
- package/dist/modes/interactive-engine/engine-custom-ui.d.ts.map +1 -1
- package/dist/modes/interactive-engine/engine-custom-ui.js +29 -12
- package/dist/modes/interactive-engine/engine-custom-ui.js.map +1 -1
- package/dist/modes/interactive-engine/engine-diagnostic-view.d.ts +3 -1
- package/dist/modes/interactive-engine/engine-diagnostic-view.d.ts.map +1 -1
- package/dist/modes/interactive-engine/engine-diagnostic-view.js +11 -0
- package/dist/modes/interactive-engine/engine-diagnostic-view.js.map +1 -1
- package/dist/modes/interactive-engine/engine-dialog-host.d.ts +2 -2
- package/dist/modes/interactive-engine/engine-dialog-host.d.ts.map +1 -1
- package/dist/modes/interactive-engine/engine-dialog-host.js +4 -1
- package/dist/modes/interactive-engine/engine-dialog-host.js.map +1 -1
- package/dist/modes/interactive-engine/engine-project-trust.d.ts +10 -0
- package/dist/modes/interactive-engine/engine-project-trust.d.ts.map +1 -0
- package/dist/modes/interactive-engine/engine-project-trust.js +28 -0
- package/dist/modes/interactive-engine/engine-project-trust.js.map +1 -0
- package/dist/modes/interactive-engine/engine-render-service.d.ts +1 -1
- package/dist/modes/interactive-engine/engine-render-service.js.map +1 -1
- package/dist/modes/interactive-engine/extension-ui-bridge.d.ts +3 -1
- package/dist/modes/interactive-engine/extension-ui-bridge.d.ts.map +1 -1
- package/dist/modes/interactive-engine/extension-ui-bridge.js +7 -1
- package/dist/modes/interactive-engine/extension-ui-bridge.js.map +1 -1
- package/dist/modes/interactive-engine/input-form-host.d.ts +2 -2
- package/dist/modes/interactive-engine/input-form-host.js.map +1 -1
- package/dist/modes/interactive-engine/isolated-auth.d.ts +1 -1
- package/dist/modes/interactive-engine/isolated-auth.js.map +1 -1
- package/dist/modes/interactive-engine/isolated-runtime.d.ts +5 -2
- package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
- package/dist/modes/interactive-engine/isolated-runtime.js +42 -4
- package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
- package/dist/modes/interactive-engine/protocol.d.ts +21 -1
- package/dist/modes/interactive-engine/protocol.d.ts.map +1 -1
- package/dist/modes/interactive-engine/protocol.js +53 -2
- package/dist/modes/interactive-engine/protocol.js.map +1 -1
- package/dist/modes/interactive-engine/remote-component.d.ts +2 -2
- package/dist/modes/interactive-engine/remote-component.d.ts.map +1 -1
- package/dist/modes/interactive-engine/remote-component.js +19 -8
- package/dist/modes/interactive-engine/remote-component.js.map +1 -1
- package/dist/modes/interactive-engine/remote-model-catalog.d.ts +1 -1
- package/dist/modes/interactive-engine/remote-model-catalog.js.map +1 -1
- package/dist/modes/interactive-engine/remote-renderer.d.ts +1 -1
- package/dist/modes/interactive-engine/remote-renderer.js.map +1 -1
- package/dist/modes/interactive-engine/session-picker-host.d.ts +2 -2
- package/dist/modes/interactive-engine/session-picker-host.js.map +1 -1
- package/dist/modes/json-event.d.ts +1 -1
- package/dist/modes/json-event.js.map +1 -1
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-bash-request-owners.d.ts +2 -2
- package/dist/modes/rpc/rpc-bash-request-owners.js.map +1 -1
- package/dist/modes/rpc/rpc-client-api.d.ts +2 -2
- package/dist/modes/rpc/rpc-client-api.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client-api.js +2 -2
- package/dist/modes/rpc/rpc-client-api.js.map +1 -1
- package/dist/modes/rpc/rpc-client-process.d.ts +2 -0
- package/dist/modes/rpc/rpc-client-process.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client-process.js +23 -1
- package/dist/modes/rpc/rpc-client-process.js.map +1 -1
- package/dist/modes/rpc/rpc-client-waits.d.ts +1 -1
- package/dist/modes/rpc/rpc-client-waits.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +3 -1
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +40 -3
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-command-handler.d.ts +4 -2
- package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-command-handler.js +12 -4
- package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
- package/dist/modes/rpc/rpc-extension-ui.d.ts +1 -1
- package/dist/modes/rpc/rpc-extension-ui.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-extension-ui.js +2 -1
- package/dist/modes/rpc/rpc-extension-ui.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +12 -2
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-provider-auth.d.ts +1 -1
- package/dist/modes/rpc/rpc-provider-auth.js.map +1 -1
- package/dist/modes/rpc/rpc-session-binding.d.ts +4 -1
- package/dist/modes/rpc/rpc-session-binding.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-session-binding.js +35 -1
- package/dist/modes/rpc/rpc-session-binding.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +17 -1
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/modes/rpc/task-ui-bridge.d.ts +9 -0
- package/dist/modes/rpc/task-ui-bridge.d.ts.map +1 -0
- package/dist/modes/rpc/task-ui-bridge.js +146 -0
- package/dist/modes/rpc/task-ui-bridge.js.map +1 -0
- package/dist/self-update-plan.js.map +1 -1
- package/dist/utils/markit.d.ts +2 -0
- package/dist/utils/markit.d.ts.map +1 -1
- package/dist/utils/markit.js +65 -5
- package/dist/utils/markit.js.map +1 -1
- package/docs/background-tasks.md +232 -0
- package/docs/build.md +51 -0
- package/docs/changelog.mdx +8 -8
- package/docs/compaction/reference.md +267 -0
- package/docs/compaction.md +39 -200
- package/docs/computer-use.md +425 -0
- package/docs/containerization.md +9 -5
- package/docs/custom-provider/api-reference.md +145 -0
- package/docs/custom-provider/oauth.md +131 -0
- package/docs/custom-provider/override.md +34 -0
- package/docs/custom-provider/registration.md +163 -0
- package/docs/custom-provider/streaming.md +214 -0
- package/docs/custom-provider.md +43 -607
- package/docs/development.md +68 -30
- package/docs/docs.json +199 -73
- package/docs/environment-variables.md +2 -2
- package/docs/extensions/api-reference.md +1003 -0
- package/docs/extensions/authoring.md +676 -0
- package/docs/extensions/events.md +793 -0
- package/docs/extensions/examples.md +94 -0
- package/docs/extensions/ui.md +470 -0
- package/docs/extensions.md +241 -2623
- package/docs/getting-started/authentication.md +55 -0
- package/docs/getting-started/first-session.md +172 -0
- package/docs/getting-started/installation.md +154 -0
- package/docs/getting-started/project-instructions.md +43 -0
- package/docs/guides/configuration.md +65 -0
- package/docs/guides/intercom.md +24 -0
- package/docs/guides/non-interactive.md +33 -0
- package/docs/guides/subagents.md +24 -0
- package/docs/guides/workflows.md +27 -0
- package/docs/guides.md +41 -0
- package/docs/herdr.md +55 -0
- package/docs/index.md +13 -44
- package/docs/intercom/operations.md +178 -0
- package/docs/intercom/reference.md +150 -0
- package/docs/intercom.md +61 -251
- package/docs/json.md +17 -0
- package/docs/keybindings.md +36 -2
- package/docs/llama-cpp.md +5 -0
- package/docs/models/artificial-analysis-index.md +89 -0
- package/docs/models/evals.md +225 -148
- package/docs/models/model-selection.md +30 -21
- package/docs/models/pareto-efficiency.md +4 -4
- package/docs/models/reference.md +601 -0
- package/docs/models.md +45 -550
- package/docs/packages/authoring.md +88 -0
- package/docs/packages/reference.md +43 -0
- package/docs/packages.md +28 -107
- package/docs/programmatic.md +29 -0
- package/docs/prompt-templates.md +11 -0
- package/docs/providers/reference.md +23 -0
- package/docs/providers.md +59 -62
- package/docs/quickstart.md +45 -239
- package/docs/reference/cli.md +252 -0
- package/docs/reference.md +52 -0
- package/docs/rpc/examples.md +64 -0
- package/docs/rpc/extension-ui.md +198 -0
- package/docs/rpc/protocol.md +1341 -0
- package/docs/rpc.md +109 -1346
- package/docs/sdk/reference.md +1090 -0
- package/docs/sdk.md +64 -756
- package/docs/session-format.md +2 -0
- package/docs/sessions.md +6 -10
- package/docs/settings.md +45 -48
- package/docs/skills/authoring.md +95 -0
- package/docs/skills/reference.md +60 -0
- package/docs/skills.md +37 -117
- package/docs/subagents/authoring.md +37 -0
- package/docs/subagents/reference.md +60 -0
- package/docs/subagents.md +90 -78
- package/docs/terminal-setup.md +1 -1
- package/docs/themes/reference.md +176 -0
- package/docs/themes.md +25 -135
- package/docs/tmux.md +7 -0
- package/docs/tools/edit.md +5 -0
- package/docs/tools.md +67 -1
- package/docs/tui/reference.md +343 -0
- package/docs/tui.md +83 -285
- package/docs/usage.md +31 -210
- package/docs/web-access.md +50 -0
- package/docs/windows.md +6 -5
- package/docs/workflows/api-reference.md +31 -12
- package/docs/workflows/authoring.md +7 -5
- package/docs/workflows/builtins.md +11 -8
- package/docs/workflows/operations.md +117 -39
- package/docs/workflows/reliable-design.md +59 -10
- package/docs/workflows/verification.md +116 -32
- package/docs/workflows.md +7 -3
- package/examples/extensions/gondolin/index.ts +116 -148
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/ssh.ts +56 -34
- package/npm-shrinkwrap.json +798 -678
- package/package.json +11 -11
- /package/dist/builtin/workflows/builtin/{chunk-cg9tmks0.js → chunk-n1910xc4.js} +0 -0
- /package/dist/builtin/workflows/builtin/{chunk-wpckd35c.js → chunk-rc5ec5xx.js} +0 -0
- /package/dist/builtin/workflows/builtin/{chunk-7at6dnkr.js → chunk-tgt0s5e5.js} +0 -0
- /package/dist/builtin/workflows/builtin/{chunk-bfkmzv9h.js → chunk-xtxcq5tj.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-stage-admission.js","sourceRoot":"","sources":["../../src/core/workflow-stage-admission.ts"],"names":[],"mappings":"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","sourcesContent":["import { AsyncLocalStorage } from \"node:async_hooks\";\n\nexport type WorkflowStageAdmissionDecision = \"admitted\" | \"late\" | \"duplicate\";\n\nexport interface WorkflowStageAdmissionResult {\n\treadonly decision: WorkflowStageAdmissionDecision;\n\treadonly completion: Promise<void>;\n}\n\n/**\n * Linearizable admission boundary for externally-produced workflow-stage traffic.\n * JavaScript execution between the state check and state transition is synchronous:\n * an enqueue that wins belongs to the stage, while close makes every later enqueue\n * use the external route. Stable keys make either outcome exactly-once.\n */\n\nexport interface PersistedWorkflowStageAdmission {\n\treadonly type: string;\n\treadonly stageAdmissionKey?: string;\n}\nexport class WorkflowStageAdmissionBoundary {\n\tprivate open = true;\n\tprivate readonly completed: Set<string>;\n\tprivate readonly inFlight = new Map<string, Promise<void>>();\n\tprivate readonly pending = new Set<Promise<void>>();\n\tprivate readonly invocationContext = new AsyncLocalStorage<string>();\n\tprivate closePromise: Promise<void> | undefined;\n\tprivate readonly closeController = new AbortController();\n\tprivate readonly ownedSubagentRunIds = new Set<string>();\n\n\t/** Aborts synchronously when close begins so stage-owned work can terminate before late delivery. */\n\tget closeSignal(): AbortSignal {\n\t\treturn this.closeController.signal;\n\t}\n\tprivate readonly drainAdmittedWork: () => Promise<void>;\n\n\tconstructor(drainAdmittedWork: (() => Promise<void>) | undefined = undefined, completedKeys: Iterable<string> = []) {\n\t\tthis.drainAdmittedWork = drainAdmittedWork ?? (async () => {});\n\t\tthis.completed = new Set(completedKeys);\n\t}\n\n\tstatic restore(\n\t\tentries: Iterable<PersistedWorkflowStageAdmission>,\n\t\tdrainAdmittedWork?: () => Promise<void>,\n\t): WorkflowStageAdmissionBoundary {\n\t\treturn new WorkflowStageAdmissionBoundary(\n\t\t\tdrainAdmittedWork,\n\t\t\tArray.from(entries).flatMap((entry) =>\n\t\t\t\tentry.type === \"custom_message\" && typeof entry.stageAdmissionKey === \"string\"\n\t\t\t\t\t? [entry.stageAdmissionKey]\n\t\t\t\t\t: [],\n\t\t\t),\n\t\t);\n\t}\n\n\tadmit(\n\t\tkey: string | undefined,\n\t\tdeliver: () => void | Promise<void>,\n\t\trouteLate: () => void | Promise<void>,\n\t): WorkflowStageAdmissionResult {\n\t\tif (key !== undefined) {\n\t\t\tif (this.completed.has(key)) return { decision: \"duplicate\", completion: Promise.resolve() };\n\t\t\tconst inFlight = this.inFlight.get(key);\n\t\t\tif (inFlight) {\n\t\t\t\treturn {\n\t\t\t\t\tdecision: \"duplicate\",\n\t\t\t\t\tcompletion: this.invocationContext.getStore() === key ? Promise.resolve() : inFlight,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tconst decision: WorkflowStageAdmissionDecision = this.open ? \"admitted\" : \"late\";\n\t\tlet completion: Promise<void>;\n\t\tif (key === undefined) {\n\t\t\tcompletion = this.invoke(this.open ? deliver : routeLate);\n\t\t} else {\n\t\t\tlet resolveCompletion!: () => void;\n\t\t\tlet rejectCompletion!: (reason?: unknown) => void;\n\t\t\tcompletion = new Promise<void>((resolve, reject) => {\n\t\t\t\tresolveCompletion = resolve;\n\t\t\t\trejectCompletion = reject;\n\t\t\t});\n\t\t\tvoid completion.catch(() => {});\n\t\t\tthis.inFlight.set(key, completion);\n\t\t\tconst delivery = this.invocationContext.run(key, () => this.invoke(this.open ? deliver : routeLate));\n\t\t\tvoid delivery.then(resolveCompletion, rejectCompletion);\n\t\t\tvoid completion.then(\n\t\t\t\t() => {\n\t\t\t\t\tif (this.inFlight.get(key) !== completion) return;\n\t\t\t\t\tthis.inFlight.delete(key);\n\t\t\t\t\tthis.completed.add(key);\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tif (this.inFlight.get(key) === completion) this.inFlight.delete(key);\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t\tif (decision === \"admitted\") this.trackAdmittedWork(completion);\n\t\treturn { decision, completion };\n\t}\n\n\ttrackAdmittedWork(completion: Promise<void>): void {\n\t\tthis.pending.add(completion);\n\t\tvoid completion.then(\n\t\t\t() => this.pending.delete(completion),\n\t\t\t() => this.pending.delete(completion),\n\t\t);\n\t}\n\n\tregisterOwnedSubagentRun(runId: string): void {\n\t\tthis.ownedSubagentRunIds.add(runId);\n\t}\n\n\townsSubagentRun(runId: string): boolean {\n\t\treturn this.ownedSubagentRunIds.has(runId);\n\t}\n\n\tisOpen(): boolean {\n\t\treturn this.open;\n\t}\n\n\tseal(): void {\n\t\tthis.open = false;\n\t}\n\n\tclose(): Promise<void> {\n\t\tthis.seal();\n\t\tif (!this.closeController.signal.aborted) this.closeController.abort();\n\t\tthis.closePromise ??= this.finishClose();\n\t\treturn this.closePromise;\n\t}\n\n\tprivate async finishClose(): Promise<void> {\n\t\tawait Promise.allSettled([...this.pending]);\n\t\tawait this.drainAdmittedWork();\n\t}\n\n\tprivate invoke(callback: () => void | Promise<void>): Promise<void> {\n\t\ttry {\n\t\t\treturn Promise.resolve(callback());\n\t\t} catch (error) {\n\t\t\treturn Promise.reject(error);\n\t\t}\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"workflow-stage-admission.js","sourceRoot":"","sources":["../../src/core/workflow-stage-admission.ts"],"names":[],"mappings":"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","sourcesContent":["import { AsyncLocalStorage } from \"node:async_hooks\";\nimport { randomUUID } from \"node:crypto\";\nimport { AgentTaskHost, type AgentTaskHostBinding } from \"./tasks/agent-adapter.js\";\nimport type { OwnerScope } from \"./tasks/contracts.js\";\n\nexport type WorkflowStageAdmissionDecision = \"admitted\" | \"late\" | \"duplicate\";\n\nexport interface WorkflowStageAdmissionResult {\n\treadonly decision: WorkflowStageAdmissionDecision;\n\treadonly completion: Promise<void>;\n}\n\n/**\n * Linearizable admission boundary for externally-produced workflow-stage traffic.\n * JavaScript execution between the state check and state transition is synchronous:\n * an enqueue that wins belongs to the stage, while close makes every later enqueue\n * use the external route. Stable keys make either outcome exactly-once.\n */\n\nexport interface PersistedWorkflowStageAdmission {\n\treadonly type: string;\n\treadonly stageAdmissionKey?: string;\n}\nexport class WorkflowStageAdmissionBoundary {\n\tprivate open = true;\n\tprivate readonly completed: Set<string>;\n\tprivate readonly inFlight = new Map<string, Promise<void>>();\n\tprivate readonly pending = new Set<Promise<void>>();\n\tprivate readonly invocationContext = new AsyncLocalStorage<string>();\n\tprivate closePromise: Promise<void> | undefined;\n\tprivate readonly closeController = new AbortController();\n\tprivate readonly ownedSubagentRunIds = new Set<string>();\n\tprivate readonly stageAttemptId = randomUUID();\n\tprivate taskScope: Extract<OwnerScope, { kind: \"workflow-stage\" }> | undefined;\n\tprivate taskHost: AgentTaskHost | undefined;\n\tprivate readonly messageDeliveryContext = new AsyncLocalStorage<boolean>();\n\tprivate readonly messageAdmissionContext = new AsyncLocalStorage<{ active: boolean }>();\n\tprivate readonly messageDeliveries = new Set<Promise<void>>();\n\tprivate messageDeliveryTail: Promise<void> | undefined;\n\tprivate taskClose: ReturnType<AgentTaskHost[\"close\"]> | undefined;\n\n\t/** Called by the actual stage session; replacement sessions retain the original identity. */\n\tbindTaskIdentity(sessionId: string, runId: string, stageId: string): void {\n\t\tthis.taskScope ??= { kind: \"workflow-stage\", sessionId, runId, stageId, stageAttemptId: this.stageAttemptId };\n\t}\n\n\t/** Trusted companion integration only; the existing launch guard remains mandatory. */\n\tbindAgentTaskHost(binding: Omit<AgentTaskHostBinding, \"scope\">): AgentTaskHost {\n\t\tif (!this.open) throw new Error(\"Workflow stage generation is closed\");\n\t\tif (!this.taskScope) throw new Error(\"Workflow stage task identity is not bound\");\n\t\tthis.taskHost ??= new AgentTaskHost({ ...binding, scope: this.taskScope });\n\t\tthis.taskHost.updateBinding(binding);\n\t\treturn this.taskHost;\n\t}\n\thasAgentTaskHost(): boolean {\n\t\treturn this.taskHost !== undefined;\n\t}\n\n\t/** Aborts synchronously when close begins so stage-owned work can terminate before late delivery. */\n\tget closeSignal(): AbortSignal {\n\t\treturn this.closeController.signal;\n\t}\n\tprivate readonly drainAdmittedWork: () => Promise<void>;\n\n\tconstructor(drainAdmittedWork: (() => Promise<void>) | undefined = undefined, completedKeys: Iterable<string> = []) {\n\t\tthis.drainAdmittedWork = drainAdmittedWork ?? (async () => {});\n\t\tthis.completed = new Set(completedKeys);\n\t}\n\n\tstatic restore(\n\t\tentries: Iterable<PersistedWorkflowStageAdmission>,\n\t\tdrainAdmittedWork?: () => Promise<void>,\n\t): WorkflowStageAdmissionBoundary {\n\t\treturn new WorkflowStageAdmissionBoundary(\n\t\t\tdrainAdmittedWork,\n\t\t\tArray.from(entries).flatMap((entry) =>\n\t\t\t\tentry.type === \"custom_message\" && typeof entry.stageAdmissionKey === \"string\"\n\t\t\t\t\t? [entry.stageAdmissionKey]\n\t\t\t\t\t: [],\n\t\t\t),\n\t\t);\n\t}\n\n\t/** One FIFO position for an external operation, including its retry waits. */\n\trunMessageDelivery(\n\t\tdeliver: () => void | Promise<void>,\n\t\trouteLate?: () => void | Promise<void>,\n\t\tpreserveDestination = false,\n\t): Promise<void> {\n\t\tconst late =\n\t\t\trouteLate ??\n\t\t\t(() => {\n\t\t\t\tthrow new Error(\"Message admission is closed\");\n\t\t\t});\n\t\tconst invoke = (): void | Promise<void> => {\n\t\t\tif (!preserveDestination) return deliver();\n\t\t\t// Stage close drains the destination reserved at arrival. SDK commits\n\t\t\t// inside this operation must not be reclassified as late on retry or\n\t\t\t// after waiting for an earlier FIFO slot. Revoke on settlement so detached\n\t\t\t// descendants cannot admit new work into a closed generation.\n\t\t\tconst reservation = { active: true };\n\t\t\treturn this.messageAdmissionContext.run(reservation, async () => {\n\t\t\t\ttry {\n\t\t\t\t\tawait deliver();\n\t\t\t\t} finally {\n\t\t\t\t\treservation.active = false;\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\t\treturn this.admit(undefined, () => this.serializeMessageDelivery(invoke), late).completion;\n\t}\n\n\t/** Reentrant SDK commits stay inside their producer's FIFO position. */\n\tserializeMessageDelivery(deliver: () => void | Promise<void>): Promise<void> {\n\t\tif (this.messageDeliveryContext.getStore()) return this.invoke(deliver);\n\t\tconst invoke = () => this.messageDeliveryContext.run(true, () => this.invoke(deliver));\n\t\tconst delivery = this.messageDeliveryTail ? this.messageDeliveryTail.then(invoke) : invoke();\n\t\tconst settled = delivery.catch(() => undefined);\n\t\tthis.messageDeliveryTail = settled;\n\t\tthis.messageDeliveries.add(settled);\n\t\tvoid settled.then(() => {\n\t\t\tthis.messageDeliveries.delete(settled);\n\t\t\tif (this.messageDeliveryTail === settled) this.messageDeliveryTail = undefined;\n\t\t});\n\t\treturn delivery;\n\t}\n\n\t/** Excludes tracked model turns: joining those from a native poll would deadlock. */\n\tasync waitForMessageDeliveries(): Promise<void> {\n\t\twhile (this.messageDeliveries.size > 0) await Promise.all([...this.messageDeliveries]);\n\t}\n\n\thasMessageDeliveries(): boolean {\n\t\treturn this.messageDeliveries.size > 0;\n\t}\n\n\tadmit(\n\t\tkey: string | undefined,\n\t\tdeliver: () => void | Promise<void>,\n\t\trouteLate: () => void | Promise<void>,\n\t): WorkflowStageAdmissionResult {\n\t\tif (key !== undefined) {\n\t\t\tif (this.completed.has(key)) return { decision: \"duplicate\", completion: Promise.resolve() };\n\t\t\tconst inFlight = this.inFlight.get(key);\n\t\t\tif (inFlight) {\n\t\t\t\treturn {\n\t\t\t\t\tdecision: \"duplicate\",\n\t\t\t\t\tcompletion: this.invocationContext.getStore() === key ? Promise.resolve() : inFlight,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tconst admitted = this.open || this.messageAdmissionContext.getStore()?.active === true;\n\t\tconst decision: WorkflowStageAdmissionDecision = admitted ? \"admitted\" : \"late\";\n\t\tlet completion: Promise<void>;\n\t\tif (key === undefined) {\n\t\t\tcompletion = this.invoke(admitted ? deliver : routeLate);\n\t\t} else {\n\t\t\tlet resolveCompletion!: () => void;\n\t\t\tlet rejectCompletion!: (reason?: unknown) => void;\n\t\t\tcompletion = new Promise<void>((resolve, reject) => {\n\t\t\t\tresolveCompletion = resolve;\n\t\t\t\trejectCompletion = reject;\n\t\t\t});\n\t\t\tvoid completion.catch(() => {});\n\t\t\tthis.inFlight.set(key, completion);\n\t\t\tconst delivery = this.invocationContext.run(key, () => this.invoke(admitted ? deliver : routeLate));\n\t\t\tvoid delivery.then(resolveCompletion, rejectCompletion);\n\t\t\tvoid completion.then(\n\t\t\t\t() => {\n\t\t\t\t\tif (this.inFlight.get(key) !== completion) return;\n\t\t\t\t\tthis.inFlight.delete(key);\n\t\t\t\t\tthis.completed.add(key);\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tif (this.inFlight.get(key) === completion) this.inFlight.delete(key);\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t\tif (decision === \"admitted\") this.trackAdmittedWork(completion);\n\t\treturn { decision, completion };\n\t}\n\n\ttrackAdmittedWork(completion: Promise<void>): void {\n\t\tthis.pending.add(completion);\n\t\tvoid completion.then(\n\t\t\t() => this.pending.delete(completion),\n\t\t\t() => this.pending.delete(completion),\n\t\t);\n\t}\n\n\t/** Join already-reserved queue commits before a native turn polls its input. */\n\tasync waitForPendingDeliveries(): Promise<void> {\n\t\tawait Promise.allSettled([...this.pending]);\n\t}\n\n\thasPendingDeliveries(): boolean {\n\t\treturn this.pending.size > 0;\n\t}\n\n\tregisterOwnedSubagentRun(runId: string): void {\n\t\tthis.ownedSubagentRunIds.add(runId);\n\t}\n\n\townsSubagentRun(runId: string): boolean {\n\t\treturn this.ownedSubagentRunIds.has(runId);\n\t}\n\n\tisOpen(): boolean {\n\t\treturn this.open;\n\t}\n\n\tseal(): void {\n\t\tthis.open = false;\n\t\tthis.taskClose ??= this.taskHost?.close(\"stage-close\");\n\t}\n\n\tclose(): Promise<void> {\n\t\tthis.seal();\n\t\tif (!this.closeController.signal.aborted) this.closeController.abort();\n\t\tthis.closePromise ??= this.finishClose();\n\t\treturn this.closePromise;\n\t}\n\n\tprivate async finishClose(): Promise<void> {\n\t\tawait Promise.allSettled([...this.pending]);\n\t\tawait this.drainAdmittedWork();\n\t\tconst closed = await this.taskClose;\n\t\tif (closed && !closed.ok) throw new Error(`${closed.error.code}: ${closed.error.message}`);\n\t}\n\n\tprivate invoke(callback: () => void | Promise<void>): Promise<void> {\n\t\ttry {\n\t\t\treturn Promise.resolve(callback());\n\t\t} catch (error) {\n\t\t\treturn Promise.reject(error);\n\t\t}\n\t}\n}\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { WorkflowActivityReason, WorkflowActivityState, WorkflowRootActivity } from "../../core/extensions/workflow-events.js";
|
|
2
|
+
export interface SessionActivity {
|
|
3
|
+
state: WorkflowActivityState;
|
|
4
|
+
reason: WorkflowActivityReason;
|
|
5
|
+
message?: "Waiting for approval" | "Workflow needs attention";
|
|
6
|
+
}
|
|
7
|
+
export interface SessionActivityInput {
|
|
8
|
+
agentRunning: boolean;
|
|
9
|
+
tasksRunning?: boolean;
|
|
10
|
+
openPromptCount: number;
|
|
11
|
+
roots: readonly WorkflowRootActivity[];
|
|
12
|
+
availability: "ready" | "recovering" | "unavailable";
|
|
13
|
+
}
|
|
14
|
+
export declare function deriveSessionActivity(input: SessionActivityInput): SessionActivity | undefined;
|
|
15
|
+
//# sourceMappingURL=activity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../../../src/extensions/herdr/activity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,MAAM,0CAA0C,CAAC;AAElD,MAAM,WAAW,eAAe;IAC/B,KAAK,EAAE,qBAAqB,CAAC;IAC7B,MAAM,EAAE,sBAAsB,CAAC;IAC/B,OAAO,CAAC,EAAE,sBAAsB,GAAG,0BAA0B,CAAC;CAC9D;AAED,MAAM,WAAW,oBAAoB;IACpC,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACvC,YAAY,EAAE,OAAO,GAAG,YAAY,GAAG,aAAa,CAAC;CACrD;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,oBAAoB,GAAG,eAAe,GAAG,SAAS,CAoB9F"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export function deriveSessionActivity(input) {
|
|
2
|
+
const working = input.roots.find((root) => root.state === "working");
|
|
3
|
+
const attention = input.roots.some((root) => root.needsAttention || root.state === "blocked");
|
|
4
|
+
if (working || input.tasksRunning || (input.agentRunning && input.openPromptCount === 0)) {
|
|
5
|
+
return {
|
|
6
|
+
state: "working",
|
|
7
|
+
reason: working?.reason ?? "executing",
|
|
8
|
+
...(attention ? { message: "Workflow needs attention" } : {}),
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
if (input.openPromptCount > 0)
|
|
12
|
+
return { state: "blocked", reason: "awaiting_input", message: "Waiting for approval" };
|
|
13
|
+
const blocked = input.roots.find((root) => root.state === "blocked");
|
|
14
|
+
if (blocked)
|
|
15
|
+
return { state: "blocked", reason: blocked.reason, message: "Workflow needs attention" };
|
|
16
|
+
if (input.availability !== "ready")
|
|
17
|
+
return undefined;
|
|
18
|
+
return {
|
|
19
|
+
state: "idle",
|
|
20
|
+
reason: input.roots.some((root) => root.reason === "paused") ? "paused" : "quiescent",
|
|
21
|
+
...(attention ? { message: "Workflow needs attention" } : {}),
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=activity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activity.js","sourceRoot":"","sources":["../../../src/extensions/herdr/activity.ts"],"names":[],"mappings":"AAoBA,MAAM,UAAU,qBAAqB,CAAC,KAA2B;IAChE,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;IACrE,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;IAC9F,IAAI,OAAO,IAAI,KAAK,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,eAAe,KAAK,CAAC,CAAC,EAAE,CAAC;QAC1F,OAAO;YACN,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,WAAW;YACtC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,0BAAmC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtE,CAAC;IACH,CAAC;IACD,IAAI,KAAK,CAAC,eAAe,GAAG,CAAC;QAC5B,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC;IACxF,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;IACrE,IAAI,OAAO;QAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC;IACtG,IAAI,KAAK,CAAC,YAAY,KAAK,OAAO;QAAE,OAAO,SAAS,CAAC;IACrD,OAAO;QACN,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW;QACrF,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,0BAAmC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtE,CAAC;AACH,CAAC","sourcesContent":["import type {\n\tWorkflowActivityReason,\n\tWorkflowActivityState,\n\tWorkflowRootActivity,\n} from \"../../core/extensions/workflow-events.js\";\n\nexport interface SessionActivity {\n\tstate: WorkflowActivityState;\n\treason: WorkflowActivityReason;\n\tmessage?: \"Waiting for approval\" | \"Workflow needs attention\";\n}\n\nexport interface SessionActivityInput {\n\tagentRunning: boolean;\n\ttasksRunning?: boolean;\n\topenPromptCount: number;\n\troots: readonly WorkflowRootActivity[];\n\tavailability: \"ready\" | \"recovering\" | \"unavailable\";\n}\n\nexport function deriveSessionActivity(input: SessionActivityInput): SessionActivity | undefined {\n\tconst working = input.roots.find((root) => root.state === \"working\");\n\tconst attention = input.roots.some((root) => root.needsAttention || root.state === \"blocked\");\n\tif (working || input.tasksRunning || (input.agentRunning && input.openPromptCount === 0)) {\n\t\treturn {\n\t\t\tstate: \"working\",\n\t\t\treason: working?.reason ?? \"executing\",\n\t\t\t...(attention ? { message: \"Workflow needs attention\" as const } : {}),\n\t\t};\n\t}\n\tif (input.openPromptCount > 0)\n\t\treturn { state: \"blocked\", reason: \"awaiting_input\", message: \"Waiting for approval\" };\n\tconst blocked = input.roots.find((root) => root.state === \"blocked\");\n\tif (blocked) return { state: \"blocked\", reason: blocked.reason, message: \"Workflow needs attention\" };\n\tif (input.availability !== \"ready\") return undefined;\n\treturn {\n\t\tstate: \"idle\",\n\t\treason: input.roots.some((root) => root.reason === \"paused\") ? \"paused\" : \"quiescent\",\n\t\t...(attention ? { message: \"Workflow needs attention\" as const } : {}),\n\t};\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../../src/extensions/herdr/environment.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,gBAAgB,GAAG,SAAS,CAG5F"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export function captureHerdrEnvironment(env) {
|
|
2
|
+
if (env.HERDR_ENV !== "1" || !env.HERDR_BIN_PATH || !env.HERDR_PANE_ID || !env.HERDR_SOCKET_PATH)
|
|
3
|
+
return undefined;
|
|
4
|
+
return { bin: env.HERDR_BIN_PATH, paneId: env.HERDR_PANE_ID, socketPath: env.HERDR_SOCKET_PATH };
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=environment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../../src/extensions/herdr/environment.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,uBAAuB,CAAC,GAAsB;IAC7D,IAAI,GAAG,CAAC,SAAS,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,GAAG,CAAC,iBAAiB;QAAE,OAAO,SAAS,CAAC;IACnH,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,CAAC,aAAa,EAAE,UAAU,EAAE,GAAG,CAAC,iBAAiB,EAAE,CAAC;AAClG,CAAC","sourcesContent":["export interface HerdrEnvironment {\n\tbin: string;\n\tpaneId: string;\n\tsocketPath: string;\n}\n\nexport function captureHerdrEnvironment(env: NodeJS.ProcessEnv): HerdrEnvironment | undefined {\n\tif (env.HERDR_ENV !== \"1\" || !env.HERDR_BIN_PATH || !env.HERDR_PANE_ID || !env.HERDR_SOCKET_PATH) return undefined;\n\treturn { bin: env.HERDR_BIN_PATH, paneId: env.HERDR_PANE_ID, socketPath: env.HERDR_SOCKET_PATH };\n}\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ExtensionAPI, ExtensionContext, ExtensionFactory } from "../../core/extensions/types.ts";
|
|
2
|
+
import { type PaneReportingOptions } from "./pane-owner.js";
|
|
3
|
+
export interface HerdrExtensionOptions extends PaneReportingOptions {
|
|
4
|
+
env?: NodeJS.ProcessEnv;
|
|
5
|
+
enabled?: (ctx: ExtensionContext) => boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare function createHerdrExtension(options?: HerdrExtensionOptions): ExtensionFactory;
|
|
8
|
+
export default function herdrExtension(pi: ExtensionAPI): void;
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/extensions/herdr/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAMvG,OAAO,EAGN,KAAK,oBAAoB,EAIzB,MAAM,iBAAiB,CAAC;AAGzB,MAAM,WAAW,qBAAsB,SAAQ,oBAAoB;IAClE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,OAAO,CAAC;CAC7C;AAOD,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,qBAA0B,GAAG,gBAAgB,CA2L1F;AAED,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAE7D"}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import { getExtensionContextOwner, publishExtensionContextEffect } from "../../core/extensions/runner-context.js";
|
|
2
|
+
import { SettingsManager } from "../../core/settings-manager.js";
|
|
3
|
+
import { OwnerTaskStore } from "../../core/tasks/owner-store.js";
|
|
4
|
+
import { deriveSessionActivity } from "./activity.js";
|
|
5
|
+
import { captureHerdrEnvironment } from "./environment.js";
|
|
6
|
+
import { claimPaneReporting, releasePaneReporting, reportPaneActivity, retirePaneReporting, } from "./pane-owner.js";
|
|
7
|
+
function enabled(ctx) {
|
|
8
|
+
const settings = SettingsManager.create(ctx.cwd, undefined, { projectTrusted: ctx.isProjectTrusted() });
|
|
9
|
+
return (settings.getProjectSettings().herdr?.enabled ?? settings.getGlobalSettings().herdr?.enabled) !== false;
|
|
10
|
+
}
|
|
11
|
+
export function createHerdrExtension(options = {}) {
|
|
12
|
+
return (pi) => {
|
|
13
|
+
if (!captureHerdrEnvironment(options.env ?? process.env))
|
|
14
|
+
return;
|
|
15
|
+
let owner;
|
|
16
|
+
// Supplied loaders can share closures across sessions and overlapping reload runners.
|
|
17
|
+
let boundSessionManager;
|
|
18
|
+
let boundRunner;
|
|
19
|
+
const retiredRunners = new WeakSet();
|
|
20
|
+
const ownsBinding = (ctx) => boundSessionManager !== undefined && getExtensionContextOwner(ctx) === boundRunner;
|
|
21
|
+
let lease;
|
|
22
|
+
let taskStore;
|
|
23
|
+
let unsubscribeTasks;
|
|
24
|
+
let agentRunning = false;
|
|
25
|
+
let openPromptCount = 0;
|
|
26
|
+
let availability = "unavailable";
|
|
27
|
+
const roots = new Map();
|
|
28
|
+
const acknowledgedBlocks = new Map();
|
|
29
|
+
const updateRoot = (root) => {
|
|
30
|
+
const acknowledged = acknowledgedBlocks.get(root.rootRunId);
|
|
31
|
+
if (acknowledged &&
|
|
32
|
+
(root.state !== acknowledged.state ||
|
|
33
|
+
root.reason !== acknowledged.reason ||
|
|
34
|
+
root.actionableBlockCount !== acknowledged.actionableBlockCount ||
|
|
35
|
+
root.activeExecutionCount !== acknowledged.activeExecutionCount ||
|
|
36
|
+
root.needsAttention !== acknowledged.needsAttention))
|
|
37
|
+
acknowledgedBlocks.delete(root.rootRunId);
|
|
38
|
+
roots.set(root.rootRunId, root);
|
|
39
|
+
};
|
|
40
|
+
const seenDiagnostics = new Set();
|
|
41
|
+
let generation = 0;
|
|
42
|
+
const diagnostic = (value) => {
|
|
43
|
+
const key = `${value.kind}:${value.owner ?? ""}`;
|
|
44
|
+
if (seenDiagnostics.has(key))
|
|
45
|
+
return;
|
|
46
|
+
seenDiagnostics.add(key);
|
|
47
|
+
if (options.diagnostic)
|
|
48
|
+
options.diagnostic(value);
|
|
49
|
+
else
|
|
50
|
+
console.error(`[Herdr] ${value.kind}${value.owner ? `: deferring to ${value.owner}` : ""}`);
|
|
51
|
+
};
|
|
52
|
+
const tasksRunning = () => taskStore?.tasks.some((task) => task.execution.kind !== "settled") ?? false;
|
|
53
|
+
const report = () => {
|
|
54
|
+
if (!owner)
|
|
55
|
+
return;
|
|
56
|
+
const activity = deriveSessionActivity({
|
|
57
|
+
agentRunning,
|
|
58
|
+
tasksRunning: tasksRunning(),
|
|
59
|
+
openPromptCount,
|
|
60
|
+
roots: [...roots.values()].filter((root) => !acknowledgedBlocks.has(root.rootRunId)),
|
|
61
|
+
availability,
|
|
62
|
+
});
|
|
63
|
+
if (activity)
|
|
64
|
+
reportPaneActivity(owner, activity);
|
|
65
|
+
};
|
|
66
|
+
const start = async (ctx) => {
|
|
67
|
+
const runner = getExtensionContextOwner(ctx);
|
|
68
|
+
if (retiredRunners.has(runner))
|
|
69
|
+
return;
|
|
70
|
+
if (boundSessionManager && ctx.sessionManager !== boundSessionManager)
|
|
71
|
+
return;
|
|
72
|
+
const environment = captureHerdrEnvironment(options.env ?? process.env);
|
|
73
|
+
if (!environment || ctx.mode !== "tui" || !ctx.hasUI || ctx.subagentPolicy || ctx.orchestrationContext)
|
|
74
|
+
return;
|
|
75
|
+
if (!(options.enabled ?? enabled)(ctx))
|
|
76
|
+
return;
|
|
77
|
+
const conflict = ctx
|
|
78
|
+
.getExtensionPaths?.()
|
|
79
|
+
.find((path) => /herdr-atomic-reporter|herdr-agent-state/.test(path));
|
|
80
|
+
if (conflict) {
|
|
81
|
+
diagnostic({ kind: "unsupported", owner: conflict });
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
if (boundRunner && boundRunner !== runner)
|
|
85
|
+
retiredRunners.add(boundRunner);
|
|
86
|
+
boundRunner = runner;
|
|
87
|
+
boundSessionManager = ctx.sessionManager;
|
|
88
|
+
const current = ++generation;
|
|
89
|
+
lease?.dispose();
|
|
90
|
+
lease = undefined;
|
|
91
|
+
unsubscribeTasks?.();
|
|
92
|
+
taskStore?.dispose();
|
|
93
|
+
unsubscribeTasks = undefined;
|
|
94
|
+
taskStore = undefined;
|
|
95
|
+
openPromptCount = 0;
|
|
96
|
+
roots.clear();
|
|
97
|
+
acknowledgedBlocks.clear();
|
|
98
|
+
availability = "unavailable";
|
|
99
|
+
const claimed = await claimPaneReporting(environment, { id: ctx.sessionManager.getSessionId(), path: ctx.sessionManager.getSessionFile() }, { ...options, diagnostic });
|
|
100
|
+
if (current !== generation) {
|
|
101
|
+
await releasePaneReporting(claimed);
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
owner = claimed;
|
|
105
|
+
agentRunning = !ctx.isIdle();
|
|
106
|
+
const taskHost = ctx.getAgentTaskHost?.();
|
|
107
|
+
if (taskHost) {
|
|
108
|
+
const { supervisor, owner: taskOwner } = taskHost.ownerBinding;
|
|
109
|
+
taskStore = new OwnerTaskStore(supervisor, taskOwner);
|
|
110
|
+
taskStore.connect();
|
|
111
|
+
let running = tasksRunning();
|
|
112
|
+
unsubscribeTasks = taskStore.subscribe(() => {
|
|
113
|
+
if (current !== generation)
|
|
114
|
+
return;
|
|
115
|
+
const next = tasksRunning();
|
|
116
|
+
if (next === running)
|
|
117
|
+
return;
|
|
118
|
+
running = next;
|
|
119
|
+
report();
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
lease = ctx.observeWorkflowActivity((frame) => {
|
|
123
|
+
if (current !== generation)
|
|
124
|
+
return;
|
|
125
|
+
if (frame.kind === "snapshot") {
|
|
126
|
+
availability = frame.availability;
|
|
127
|
+
roots.clear();
|
|
128
|
+
if (frame.availability === "ready") {
|
|
129
|
+
for (const root of frame.roots)
|
|
130
|
+
updateRoot(root);
|
|
131
|
+
for (const id of acknowledgedBlocks.keys())
|
|
132
|
+
if (!roots.has(id))
|
|
133
|
+
acknowledgedBlocks.delete(id);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
else if (frame.kind === "changed")
|
|
137
|
+
updateRoot(frame.root);
|
|
138
|
+
else {
|
|
139
|
+
roots.delete(frame.rootRunId);
|
|
140
|
+
acknowledgedBlocks.delete(frame.rootRunId);
|
|
141
|
+
}
|
|
142
|
+
report();
|
|
143
|
+
});
|
|
144
|
+
};
|
|
145
|
+
pi.on("session_start", (_event, ctx) => publishExtensionContextEffect(ctx, () => start(ctx)));
|
|
146
|
+
pi.on("input", (event, ctx) => {
|
|
147
|
+
if (!ownsBinding(ctx) || event.source !== "interactive")
|
|
148
|
+
return;
|
|
149
|
+
let changed = false;
|
|
150
|
+
for (const root of roots.values()) {
|
|
151
|
+
if (root.state === "blocked" && !acknowledgedBlocks.has(root.rootRunId)) {
|
|
152
|
+
acknowledgedBlocks.set(root.rootRunId, { ...root });
|
|
153
|
+
changed = true;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
if (changed)
|
|
157
|
+
report();
|
|
158
|
+
});
|
|
159
|
+
pi.on("workflow_lifecycle", (event, ctx) => {
|
|
160
|
+
if (!ownsBinding(ctx) || event.delivery !== "live")
|
|
161
|
+
return;
|
|
162
|
+
const target = event.target;
|
|
163
|
+
const newBlock = target.kind === "prompt"
|
|
164
|
+
? target.status === "opened"
|
|
165
|
+
: (target.kind === "run" || target.kind === "stage") &&
|
|
166
|
+
(target.status === "blocked" || target.status === "awaiting_input") &&
|
|
167
|
+
target.previousStatus !== target.status;
|
|
168
|
+
if (newBlock && acknowledgedBlocks.delete(event.rootRunId))
|
|
169
|
+
report();
|
|
170
|
+
});
|
|
171
|
+
pi.on("agent_start", (_event, ctx) => {
|
|
172
|
+
if (!ownsBinding(ctx))
|
|
173
|
+
return;
|
|
174
|
+
agentRunning = true;
|
|
175
|
+
report();
|
|
176
|
+
});
|
|
177
|
+
pi.on("agent_settled", (_event, ctx) => {
|
|
178
|
+
if (!ownsBinding(ctx))
|
|
179
|
+
return;
|
|
180
|
+
agentRunning = false;
|
|
181
|
+
report();
|
|
182
|
+
});
|
|
183
|
+
pi.on("ui_prompt_start", (_event, ctx) => {
|
|
184
|
+
if (!ownsBinding(ctx))
|
|
185
|
+
return;
|
|
186
|
+
openPromptCount++;
|
|
187
|
+
report();
|
|
188
|
+
});
|
|
189
|
+
pi.on("ui_prompt_end", (_event, ctx) => {
|
|
190
|
+
if (!ownsBinding(ctx))
|
|
191
|
+
return;
|
|
192
|
+
openPromptCount = Math.max(0, openPromptCount - 1);
|
|
193
|
+
report();
|
|
194
|
+
});
|
|
195
|
+
pi.on("session_shutdown", async (event, ctx) => {
|
|
196
|
+
if (!ownsBinding(ctx))
|
|
197
|
+
return;
|
|
198
|
+
// A non-quit stop may restart this runner, unless a successor supersedes it first.
|
|
199
|
+
if (event.reason === "quit")
|
|
200
|
+
retiredRunners.add(boundRunner);
|
|
201
|
+
generation++;
|
|
202
|
+
lease?.dispose();
|
|
203
|
+
lease = undefined;
|
|
204
|
+
unsubscribeTasks?.();
|
|
205
|
+
taskStore?.dispose();
|
|
206
|
+
unsubscribeTasks = undefined;
|
|
207
|
+
taskStore = undefined;
|
|
208
|
+
const previous = owner;
|
|
209
|
+
owner = undefined;
|
|
210
|
+
// Clear before awaiting transport: a successor can bind while retirement drains,
|
|
211
|
+
// and this shutdown's completion must never clear that newer binding.
|
|
212
|
+
boundSessionManager = undefined;
|
|
213
|
+
if (previous) {
|
|
214
|
+
if (event.reason === "quit")
|
|
215
|
+
await releasePaneReporting(previous);
|
|
216
|
+
else
|
|
217
|
+
await retirePaneReporting(previous);
|
|
218
|
+
}
|
|
219
|
+
});
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
export default function herdrExtension(pi) {
|
|
223
|
+
createHerdrExtension()(pi);
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/extensions/herdr/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { getExtensionContextOwner, publishExtensionContextEffect } from \"../../core/extensions/runner-context.ts\";\nimport type { ExtensionAPI, ExtensionContext, ExtensionFactory } from \"../../core/extensions/types.ts\";\nimport type { WorkflowRootActivity } from \"../../core/extensions/workflow-events.js\";\nimport { SettingsManager } from \"../../core/settings-manager.ts\";\nimport { OwnerTaskStore } from \"../../core/tasks/owner-store.js\";\nimport { deriveSessionActivity } from \"./activity.js\";\nimport { captureHerdrEnvironment } from \"./environment.js\";\nimport {\n\tclaimPaneReporting,\n\ttype PaneOwner,\n\ttype PaneReportingOptions,\n\treleasePaneReporting,\n\treportPaneActivity,\n\tretirePaneReporting,\n} from \"./pane-owner.js\";\nimport type { HerdrDiagnostic } from \"./transport.js\";\n\nexport interface HerdrExtensionOptions extends PaneReportingOptions {\n\tenv?: NodeJS.ProcessEnv;\n\tenabled?: (ctx: ExtensionContext) => boolean;\n}\n\nfunction enabled(ctx: ExtensionContext): boolean {\n\tconst settings = SettingsManager.create(ctx.cwd, undefined, { projectTrusted: ctx.isProjectTrusted() });\n\treturn (settings.getProjectSettings().herdr?.enabled ?? settings.getGlobalSettings().herdr?.enabled) !== false;\n}\n\nexport function createHerdrExtension(options: HerdrExtensionOptions = {}): ExtensionFactory {\n\treturn (pi) => {\n\t\tif (!captureHerdrEnvironment(options.env ?? process.env)) return;\n\t\tlet owner: PaneOwner | undefined;\n\t\t// Supplied loaders can share closures across sessions and overlapping reload runners.\n\t\tlet boundSessionManager: ExtensionContext[\"sessionManager\"] | undefined;\n\t\tlet boundRunner: object | undefined;\n\t\tconst retiredRunners = new WeakSet<object>();\n\t\tconst ownsBinding = (ctx: ExtensionContext) =>\n\t\t\tboundSessionManager !== undefined && getExtensionContextOwner(ctx) === boundRunner;\n\t\tlet lease: { dispose(): void } | undefined;\n\t\tlet taskStore: OwnerTaskStore | undefined;\n\t\tlet unsubscribeTasks: (() => void) | undefined;\n\t\tlet agentRunning = false;\n\t\tlet openPromptCount = 0;\n\t\tlet availability: \"ready\" | \"unavailable\" | \"recovering\" = \"unavailable\";\n\t\tconst roots = new Map<string, WorkflowRootActivity>();\n\t\tconst acknowledgedBlocks = new Map<string, WorkflowRootActivity>();\n\t\tconst updateRoot = (root: WorkflowRootActivity) => {\n\t\t\tconst acknowledged = acknowledgedBlocks.get(root.rootRunId);\n\t\t\tif (\n\t\t\t\tacknowledged &&\n\t\t\t\t(root.state !== acknowledged.state ||\n\t\t\t\t\troot.reason !== acknowledged.reason ||\n\t\t\t\t\troot.actionableBlockCount !== acknowledged.actionableBlockCount ||\n\t\t\t\t\troot.activeExecutionCount !== acknowledged.activeExecutionCount ||\n\t\t\t\t\troot.needsAttention !== acknowledged.needsAttention)\n\t\t\t)\n\t\t\t\tacknowledgedBlocks.delete(root.rootRunId);\n\t\t\troots.set(root.rootRunId, root);\n\t\t};\n\t\tconst seenDiagnostics = new Set<string>();\n\t\tlet generation = 0;\n\t\tconst diagnostic = (value: HerdrDiagnostic) => {\n\t\t\tconst key = `${value.kind}:${value.owner ?? \"\"}`;\n\t\t\tif (seenDiagnostics.has(key)) return;\n\t\t\tseenDiagnostics.add(key);\n\t\t\tif (options.diagnostic) options.diagnostic(value);\n\t\t\telse console.error(`[Herdr] ${value.kind}${value.owner ? `: deferring to ${value.owner}` : \"\"}`);\n\t\t};\n\t\tconst tasksRunning = () => taskStore?.tasks.some((task) => task.execution.kind !== \"settled\") ?? false;\n\t\tconst report = () => {\n\t\t\tif (!owner) return;\n\t\t\tconst activity = deriveSessionActivity({\n\t\t\t\tagentRunning,\n\t\t\t\ttasksRunning: tasksRunning(),\n\t\t\t\topenPromptCount,\n\t\t\t\troots: [...roots.values()].filter((root) => !acknowledgedBlocks.has(root.rootRunId)),\n\t\t\t\tavailability,\n\t\t\t});\n\t\t\tif (activity) reportPaneActivity(owner, activity);\n\t\t};\n\t\tconst start = async (ctx: ExtensionContext) => {\n\t\t\tconst runner = getExtensionContextOwner(ctx);\n\t\t\tif (retiredRunners.has(runner)) return;\n\t\t\tif (boundSessionManager && ctx.sessionManager !== boundSessionManager) return;\n\t\t\tconst environment = captureHerdrEnvironment(options.env ?? process.env);\n\t\t\tif (!environment || ctx.mode !== \"tui\" || !ctx.hasUI || ctx.subagentPolicy || ctx.orchestrationContext) return;\n\t\t\tif (!(options.enabled ?? enabled)(ctx)) return;\n\t\t\tconst conflict = ctx\n\t\t\t\t.getExtensionPaths?.()\n\t\t\t\t.find((path) => /herdr-atomic-reporter|herdr-agent-state/.test(path));\n\t\t\tif (conflict) {\n\t\t\t\tdiagnostic({ kind: \"unsupported\", owner: conflict });\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (boundRunner && boundRunner !== runner) retiredRunners.add(boundRunner);\n\t\t\tboundRunner = runner;\n\t\t\tboundSessionManager = ctx.sessionManager;\n\t\t\tconst current = ++generation;\n\t\t\tlease?.dispose();\n\t\t\tlease = undefined;\n\t\t\tunsubscribeTasks?.();\n\t\t\ttaskStore?.dispose();\n\t\t\tunsubscribeTasks = undefined;\n\t\t\ttaskStore = undefined;\n\t\t\topenPromptCount = 0;\n\t\t\troots.clear();\n\t\t\tacknowledgedBlocks.clear();\n\t\t\tavailability = \"unavailable\";\n\t\t\tconst claimed = await claimPaneReporting(\n\t\t\t\tenvironment,\n\t\t\t\t{ id: ctx.sessionManager.getSessionId(), path: ctx.sessionManager.getSessionFile() },\n\t\t\t\t{ ...options, diagnostic },\n\t\t\t);\n\t\t\tif (current !== generation) {\n\t\t\t\tawait releasePaneReporting(claimed);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\towner = claimed;\n\t\t\tagentRunning = !ctx.isIdle();\n\t\t\tconst taskHost = ctx.getAgentTaskHost?.();\n\t\t\tif (taskHost) {\n\t\t\t\tconst { supervisor, owner: taskOwner } = taskHost.ownerBinding;\n\t\t\t\ttaskStore = new OwnerTaskStore(supervisor, taskOwner);\n\t\t\t\ttaskStore.connect();\n\t\t\t\tlet running = tasksRunning();\n\t\t\t\tunsubscribeTasks = taskStore.subscribe(() => {\n\t\t\t\t\tif (current !== generation) return;\n\t\t\t\t\tconst next = tasksRunning();\n\t\t\t\t\tif (next === running) return;\n\t\t\t\t\trunning = next;\n\t\t\t\t\treport();\n\t\t\t\t});\n\t\t\t}\n\t\t\tlease = ctx.observeWorkflowActivity((frame) => {\n\t\t\t\tif (current !== generation) return;\n\t\t\t\tif (frame.kind === \"snapshot\") {\n\t\t\t\t\tavailability = frame.availability;\n\t\t\t\t\troots.clear();\n\t\t\t\t\tif (frame.availability === \"ready\") {\n\t\t\t\t\t\tfor (const root of frame.roots) updateRoot(root);\n\t\t\t\t\t\tfor (const id of acknowledgedBlocks.keys()) if (!roots.has(id)) acknowledgedBlocks.delete(id);\n\t\t\t\t\t}\n\t\t\t\t} else if (frame.kind === \"changed\") updateRoot(frame.root);\n\t\t\t\telse {\n\t\t\t\t\troots.delete(frame.rootRunId);\n\t\t\t\t\tacknowledgedBlocks.delete(frame.rootRunId);\n\t\t\t\t}\n\t\t\t\treport();\n\t\t\t});\n\t\t};\n\t\tpi.on(\"session_start\", (_event, ctx) => publishExtensionContextEffect(ctx, () => start(ctx)));\n\t\tpi.on(\"input\", (event, ctx) => {\n\t\t\tif (!ownsBinding(ctx) || event.source !== \"interactive\") return;\n\t\t\tlet changed = false;\n\t\t\tfor (const root of roots.values()) {\n\t\t\t\tif (root.state === \"blocked\" && !acknowledgedBlocks.has(root.rootRunId)) {\n\t\t\t\t\tacknowledgedBlocks.set(root.rootRunId, { ...root });\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (changed) report();\n\t\t});\n\t\tpi.on(\"workflow_lifecycle\", (event, ctx) => {\n\t\t\tif (!ownsBinding(ctx) || event.delivery !== \"live\") return;\n\t\t\tconst target = event.target;\n\t\t\tconst newBlock =\n\t\t\t\ttarget.kind === \"prompt\"\n\t\t\t\t\t? target.status === \"opened\"\n\t\t\t\t\t: (target.kind === \"run\" || target.kind === \"stage\") &&\n\t\t\t\t\t\t(target.status === \"blocked\" || target.status === \"awaiting_input\") &&\n\t\t\t\t\t\ttarget.previousStatus !== target.status;\n\t\t\tif (newBlock && acknowledgedBlocks.delete(event.rootRunId)) report();\n\t\t});\n\t\tpi.on(\"agent_start\", (_event, ctx) => {\n\t\t\tif (!ownsBinding(ctx)) return;\n\t\t\tagentRunning = true;\n\t\t\treport();\n\t\t});\n\t\tpi.on(\"agent_settled\", (_event, ctx) => {\n\t\t\tif (!ownsBinding(ctx)) return;\n\t\t\tagentRunning = false;\n\t\t\treport();\n\t\t});\n\t\tpi.on(\"ui_prompt_start\", (_event, ctx) => {\n\t\t\tif (!ownsBinding(ctx)) return;\n\t\t\topenPromptCount++;\n\t\t\treport();\n\t\t});\n\t\tpi.on(\"ui_prompt_end\", (_event, ctx) => {\n\t\t\tif (!ownsBinding(ctx)) return;\n\t\t\topenPromptCount = Math.max(0, openPromptCount - 1);\n\t\t\treport();\n\t\t});\n\t\tpi.on(\"session_shutdown\", async (event, ctx) => {\n\t\t\tif (!ownsBinding(ctx)) return;\n\t\t\t// A non-quit stop may restart this runner, unless a successor supersedes it first.\n\t\t\tif (event.reason === \"quit\") retiredRunners.add(boundRunner!);\n\t\t\tgeneration++;\n\t\t\tlease?.dispose();\n\t\t\tlease = undefined;\n\t\t\tunsubscribeTasks?.();\n\t\t\ttaskStore?.dispose();\n\t\t\tunsubscribeTasks = undefined;\n\t\t\ttaskStore = undefined;\n\t\t\tconst previous = owner;\n\t\t\towner = undefined;\n\t\t\t// Clear before awaiting transport: a successor can bind while retirement drains,\n\t\t\t// and this shutdown's completion must never clear that newer binding.\n\t\t\tboundSessionManager = undefined;\n\t\t\tif (previous) {\n\t\t\t\tif (event.reason === \"quit\") await releasePaneReporting(previous);\n\t\t\t\telse await retirePaneReporting(previous);\n\t\t\t}\n\t\t});\n\t};\n}\n\nexport default function herdrExtension(pi: ExtensionAPI): void {\n\tcreateHerdrExtension()(pi);\n}\n"]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { SessionActivity } from "./activity.js";
|
|
2
|
+
import type { HerdrEnvironment } from "./environment.js";
|
|
3
|
+
import { type HerdrDiagnostic } from "./transport.js";
|
|
4
|
+
export interface PaneIdentity {
|
|
5
|
+
id: string;
|
|
6
|
+
path?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface PaneReportingOptions {
|
|
9
|
+
clock?: () => number;
|
|
10
|
+
timeoutMs?: number;
|
|
11
|
+
diagnostic?: (diagnostic: HerdrDiagnostic) => void;
|
|
12
|
+
}
|
|
13
|
+
export interface PaneOwner {
|
|
14
|
+
environment: HerdrEnvironment;
|
|
15
|
+
identity: PaneIdentity;
|
|
16
|
+
options: PaneReportingOptions;
|
|
17
|
+
status: "active" | "releasing" | "retired";
|
|
18
|
+
seq: number;
|
|
19
|
+
identitySent: boolean;
|
|
20
|
+
pending?: SessionActivity;
|
|
21
|
+
flight?: Promise<void>;
|
|
22
|
+
release?: Promise<void>;
|
|
23
|
+
flush(): Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
export declare function claimPaneReporting(environment: HerdrEnvironment, identity: PaneIdentity, options?: PaneReportingOptions): Promise<PaneOwner>;
|
|
26
|
+
export declare function reportPaneActivity(owner: PaneOwner, activity: SessionActivity): void;
|
|
27
|
+
/** Fence and drain a local reporter without unregistering the still-running agent. */
|
|
28
|
+
export declare function retirePaneReporting(owner: PaneOwner): Promise<void>;
|
|
29
|
+
export declare function releasePaneReporting(owner: PaneOwner): Promise<void>;
|
|
30
|
+
//# sourceMappingURL=pane-owner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pane-owner.d.ts","sourceRoot":"","sources":["../../../src/extensions/herdr/pane-owner.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAgB,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEpE,MAAM,WAAW,YAAY;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AACD,MAAM,WAAW,oBAAoB;IACpC,KAAK,CAAC,EAAE,MAAM,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,eAAe,KAAK,IAAI,CAAC;CACnD;AACD,MAAM,WAAW,SAAS;IACzB,WAAW,EAAE,gBAAgB,CAAC;IAC9B,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE,oBAAoB,CAAC;IAC9B,MAAM,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS,CAAC;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAmCD,wBAAsB,kBAAkB,CACvC,WAAW,EAAE,gBAAgB,EAC7B,QAAQ,EAAE,YAAY,EACtB,OAAO,GAAE,oBAAyB,GAChC,OAAO,CAAC,SAAS,CAAC,CAoBpB;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,GAAG,IAAI,CAwBpF;AAED,sFAAsF;AACtF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAEnE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpE"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { isAbsolute } from "node:path";
|
|
2
|
+
import { executeHerdr } from "./transport.js";
|
|
3
|
+
// Host module lifetime outlives inline extension factories and runner generations.
|
|
4
|
+
const owners = new Map();
|
|
5
|
+
let highWater = 0;
|
|
6
|
+
function diagnostic(owner, value) {
|
|
7
|
+
owner.options.diagnostic?.(value);
|
|
8
|
+
}
|
|
9
|
+
/** Every admitted command, including release, takes a fresh strictly increasing sequence: Herdr ignores equal or older `--seq`. */
|
|
10
|
+
function allocateSequence(owner) {
|
|
11
|
+
owner.seq = highWater = Math.max((owner.options.clock ?? Date.now)(), highWater + 1);
|
|
12
|
+
}
|
|
13
|
+
function argv(owner, command) {
|
|
14
|
+
return [
|
|
15
|
+
"pane",
|
|
16
|
+
command,
|
|
17
|
+
owner.environment.paneId,
|
|
18
|
+
"--source",
|
|
19
|
+
"custom:atomic",
|
|
20
|
+
"--agent",
|
|
21
|
+
"atomic",
|
|
22
|
+
"--seq",
|
|
23
|
+
String(owner.seq),
|
|
24
|
+
];
|
|
25
|
+
}
|
|
26
|
+
async function send(owner, args) {
|
|
27
|
+
const result = await executeHerdr(owner.environment, args, owner.options.timeoutMs);
|
|
28
|
+
if (result)
|
|
29
|
+
diagnostic(owner, result);
|
|
30
|
+
return result === undefined;
|
|
31
|
+
}
|
|
32
|
+
export async function claimPaneReporting(environment, identity, options = {}) {
|
|
33
|
+
let previous;
|
|
34
|
+
do {
|
|
35
|
+
previous = owners.get(environment.paneId);
|
|
36
|
+
if (previous)
|
|
37
|
+
await retirePaneReporting(previous);
|
|
38
|
+
} while (owners.get(environment.paneId) !== previous);
|
|
39
|
+
const owner = {
|
|
40
|
+
environment,
|
|
41
|
+
identity,
|
|
42
|
+
options,
|
|
43
|
+
status: "active",
|
|
44
|
+
// Inherit the registration even if recovery produces no successor report before quit.
|
|
45
|
+
seq: previous?.seq ?? 0,
|
|
46
|
+
identitySent: false,
|
|
47
|
+
async flush() {
|
|
48
|
+
await this.flight;
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
owners.set(environment.paneId, owner);
|
|
52
|
+
return owner;
|
|
53
|
+
}
|
|
54
|
+
export function reportPaneActivity(owner, activity) {
|
|
55
|
+
if (owner.status !== "active" || owners.get(owner.environment.paneId) !== owner) {
|
|
56
|
+
diagnostic(owner, { kind: "stale_owner" });
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
owner.pending = activity;
|
|
60
|
+
if (owner.flight)
|
|
61
|
+
return;
|
|
62
|
+
owner.flight = (async () => {
|
|
63
|
+
while (owner.pending && owner.status === "active") {
|
|
64
|
+
const next = owner.pending;
|
|
65
|
+
owner.pending = undefined;
|
|
66
|
+
allocateSequence(owner);
|
|
67
|
+
const args = [...argv(owner, "report-agent"), "--state", next.state];
|
|
68
|
+
if (next.message)
|
|
69
|
+
args.push("--message", next.message);
|
|
70
|
+
if (!owner.identitySent) {
|
|
71
|
+
args.push("--agent-session-id", owner.identity.id);
|
|
72
|
+
if (owner.identity.path && isAbsolute(owner.identity.path))
|
|
73
|
+
args.push("--agent-session-path", owner.identity.path);
|
|
74
|
+
}
|
|
75
|
+
if (await send(owner, args))
|
|
76
|
+
owner.identitySent = true;
|
|
77
|
+
}
|
|
78
|
+
})().finally(() => {
|
|
79
|
+
owner.flight = undefined;
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
/** Fence and drain a local reporter without unregistering the still-running agent. */
|
|
83
|
+
export function retirePaneReporting(owner) {
|
|
84
|
+
return stopPaneReporting(owner, false);
|
|
85
|
+
}
|
|
86
|
+
export function releasePaneReporting(owner) {
|
|
87
|
+
return stopPaneReporting(owner, true);
|
|
88
|
+
}
|
|
89
|
+
function stopPaneReporting(owner, releaseRegistration) {
|
|
90
|
+
if (owner.release)
|
|
91
|
+
return owner.release;
|
|
92
|
+
if (owners.get(owner.environment.paneId) !== owner || owner.status !== "active") {
|
|
93
|
+
diagnostic(owner, { kind: "stale_owner" });
|
|
94
|
+
return Promise.resolve();
|
|
95
|
+
}
|
|
96
|
+
owner.status = "releasing";
|
|
97
|
+
owner.pending = undefined;
|
|
98
|
+
owner.release = (async () => {
|
|
99
|
+
await owner.flight;
|
|
100
|
+
// A failed command may still have claimed authority before its response was lost.
|
|
101
|
+
if (releaseRegistration && owner.seq > 0) {
|
|
102
|
+
allocateSequence(owner);
|
|
103
|
+
await send(owner, argv(owner, "release-agent"));
|
|
104
|
+
}
|
|
105
|
+
owner.status = "retired";
|
|
106
|
+
if (releaseRegistration && owners.get(owner.environment.paneId) === owner)
|
|
107
|
+
owners.delete(owner.environment.paneId);
|
|
108
|
+
})();
|
|
109
|
+
return owner.release;
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=pane-owner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pane-owner.js","sourceRoot":"","sources":["../../../src/extensions/herdr/pane-owner.ts"],"names":[],"mappings":"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","sourcesContent":["import { isAbsolute } from \"node:path\";\nimport type { SessionActivity } from \"./activity.js\";\nimport type { HerdrEnvironment } from \"./environment.js\";\nimport { executeHerdr, type HerdrDiagnostic } from \"./transport.js\";\n\nexport interface PaneIdentity {\n\tid: string;\n\tpath?: string;\n}\nexport interface PaneReportingOptions {\n\tclock?: () => number;\n\ttimeoutMs?: number;\n\tdiagnostic?: (diagnostic: HerdrDiagnostic) => void;\n}\nexport interface PaneOwner {\n\tenvironment: HerdrEnvironment;\n\tidentity: PaneIdentity;\n\toptions: PaneReportingOptions;\n\tstatus: \"active\" | \"releasing\" | \"retired\";\n\tseq: number;\n\tidentitySent: boolean;\n\tpending?: SessionActivity;\n\tflight?: Promise<void>;\n\trelease?: Promise<void>;\n\tflush(): Promise<void>;\n}\n\n// Host module lifetime outlives inline extension factories and runner generations.\nconst owners = new Map<string, PaneOwner>();\nlet highWater = 0;\n\nfunction diagnostic(owner: PaneOwner, value: HerdrDiagnostic): void {\n\towner.options.diagnostic?.(value);\n}\n\n/** Every admitted command, including release, takes a fresh strictly increasing sequence: Herdr ignores equal or older `--seq`. */\nfunction allocateSequence(owner: PaneOwner): void {\n\towner.seq = highWater = Math.max((owner.options.clock ?? Date.now)(), highWater + 1);\n}\n\nfunction argv(owner: PaneOwner, command: string): string[] {\n\treturn [\n\t\t\"pane\",\n\t\tcommand,\n\t\towner.environment.paneId,\n\t\t\"--source\",\n\t\t\"custom:atomic\",\n\t\t\"--agent\",\n\t\t\"atomic\",\n\t\t\"--seq\",\n\t\tString(owner.seq),\n\t];\n}\n\nasync function send(owner: PaneOwner, args: string[]): Promise<boolean> {\n\tconst result = await executeHerdr(owner.environment, args, owner.options.timeoutMs);\n\tif (result) diagnostic(owner, result);\n\treturn result === undefined;\n}\n\nexport async function claimPaneReporting(\n\tenvironment: HerdrEnvironment,\n\tidentity: PaneIdentity,\n\toptions: PaneReportingOptions = {},\n): Promise<PaneOwner> {\n\tlet previous: PaneOwner | undefined;\n\tdo {\n\t\tprevious = owners.get(environment.paneId);\n\t\tif (previous) await retirePaneReporting(previous);\n\t} while (owners.get(environment.paneId) !== previous);\n\tconst owner: PaneOwner = {\n\t\tenvironment,\n\t\tidentity,\n\t\toptions,\n\t\tstatus: \"active\",\n\t\t// Inherit the registration even if recovery produces no successor report before quit.\n\t\tseq: previous?.seq ?? 0,\n\t\tidentitySent: false,\n\t\tasync flush() {\n\t\t\tawait this.flight;\n\t\t},\n\t};\n\towners.set(environment.paneId, owner);\n\treturn owner;\n}\n\nexport function reportPaneActivity(owner: PaneOwner, activity: SessionActivity): void {\n\tif (owner.status !== \"active\" || owners.get(owner.environment.paneId) !== owner) {\n\t\tdiagnostic(owner, { kind: \"stale_owner\" });\n\t\treturn;\n\t}\n\towner.pending = activity;\n\tif (owner.flight) return;\n\towner.flight = (async () => {\n\t\twhile (owner.pending && owner.status === \"active\") {\n\t\t\tconst next = owner.pending;\n\t\t\towner.pending = undefined;\n\t\t\tallocateSequence(owner);\n\t\t\tconst args = [...argv(owner, \"report-agent\"), \"--state\", next.state];\n\t\t\tif (next.message) args.push(\"--message\", next.message);\n\t\t\tif (!owner.identitySent) {\n\t\t\t\targs.push(\"--agent-session-id\", owner.identity.id);\n\t\t\t\tif (owner.identity.path && isAbsolute(owner.identity.path))\n\t\t\t\t\targs.push(\"--agent-session-path\", owner.identity.path);\n\t\t\t}\n\t\t\tif (await send(owner, args)) owner.identitySent = true;\n\t\t}\n\t})().finally(() => {\n\t\towner.flight = undefined;\n\t});\n}\n\n/** Fence and drain a local reporter without unregistering the still-running agent. */\nexport function retirePaneReporting(owner: PaneOwner): Promise<void> {\n\treturn stopPaneReporting(owner, false);\n}\n\nexport function releasePaneReporting(owner: PaneOwner): Promise<void> {\n\treturn stopPaneReporting(owner, true);\n}\n\nfunction stopPaneReporting(owner: PaneOwner, releaseRegistration: boolean): Promise<void> {\n\tif (owner.release) return owner.release;\n\tif (owners.get(owner.environment.paneId) !== owner || owner.status !== \"active\") {\n\t\tdiagnostic(owner, { kind: \"stale_owner\" });\n\t\treturn Promise.resolve();\n\t}\n\towner.status = \"releasing\";\n\towner.pending = undefined;\n\towner.release = (async () => {\n\t\tawait owner.flight;\n\t\t// A failed command may still have claimed authority before its response was lost.\n\t\tif (releaseRegistration && owner.seq > 0) {\n\t\t\tallocateSequence(owner);\n\t\t\tawait send(owner, argv(owner, \"release-agent\"));\n\t\t}\n\t\towner.status = \"retired\";\n\t\tif (releaseRegistration && owners.get(owner.environment.paneId) === owner)\n\t\t\towners.delete(owner.environment.paneId);\n\t})();\n\treturn owner.release;\n}\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { HerdrEnvironment } from "./environment.js";
|
|
2
|
+
export interface HerdrDiagnostic {
|
|
3
|
+
kind: "spawn_failed" | "timeout" | "protocol_rejected" | "stale_owner" | "unsupported";
|
|
4
|
+
owner?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare const HERDR_TIMEOUT_MS = 5000;
|
|
7
|
+
export declare function executeHerdr(environment: HerdrEnvironment, argv: string[], timeoutMs?: number): Promise<HerdrDiagnostic | undefined>;
|
|
8
|
+
//# sourceMappingURL=transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../src/extensions/herdr/transport.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,cAAc,GAAG,SAAS,GAAG,mBAAmB,GAAG,aAAa,GAAG,aAAa,CAAC;IACvF,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,gBAAgB,OAAQ,CAAC;AAEtC,wBAAgB,YAAY,CAC3B,WAAW,EAAE,gBAAgB,EAC7B,IAAI,EAAE,MAAM,EAAE,EACd,SAAS,SAAmB,GAC1B,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAyBtC"}
|