@bastani/atomic 0.9.19-alpha.1 → 0.9.19-alpha.3
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 +108 -0
- package/dist/builtin/intercom/CHANGELOG.md +23 -0
- package/dist/builtin/intercom/README.md +21 -11
- package/dist/builtin/intercom/broker/broker.ts +81 -9
- package/dist/builtin/intercom/broker/client.ts +22 -0
- 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 +43 -5
- package/dist/builtin/intercom/broker/terminal-questions.ts +29 -0
- package/dist/builtin/intercom/index.bundle.mjs +978 -742
- 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 +5 -4
- 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 +33 -0
- package/dist/builtin/subagents/README.md +35 -14
- 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 +1 -1
- 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 +1 -1
- 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 +14 -10
- package/dist/builtin/subagents/skills/tmux/SKILL.md +1 -1
- package/dist/builtin/subagents/src/extension/index.bundle.mjs +1286 -611
- package/dist/builtin/web-access/index.bundle.mjs +26280 -26274
- package/dist/builtin/web-access/package.json +2 -2
- package/dist/builtin/workflows/CHANGELOG.md +51 -0
- package/dist/builtin/workflows/README.md +1 -1
- package/dist/builtin/workflows/builtin/adversarial-verification.js +5 -7
- package/dist/builtin/workflows/builtin/{chunk-reqr3sr3.js → chunk-1kx4aggw.js} +22 -22
- package/dist/builtin/workflows/builtin/{chunk-42s7sw0b.js → chunk-62v3gg9f.js} +9 -9
- 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-79fjkcvh.js → chunk-hbnwv56f.js} +17 -17
- package/dist/builtin/workflows/builtin/{chunk-ed4jfn5t.js → chunk-mygmtz6e.js} +43 -43
- package/dist/builtin/workflows/builtin/{chunk-7430zyas.js → chunk-p8jjwfg6.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-hqpe2cyx.js → chunk-r9qq7xfj.js} +49 -49
- package/dist/builtin/workflows/builtin/{chunk-k3w87x8y.js → chunk-t6x2d78s.js} +10 -10
- package/dist/builtin/workflows/builtin/{chunk-6fqs7c01.js → chunk-z0d03ktm.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-b0v2xab1.js → chunk-zggjyg5z.js} +221 -23
- 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 +2 -2
- package/dist/builtin/workflows/src/extension/index.bundle.mjs +26708 -25862
- package/dist/builtin/workflows/src/index.js +921 -477
- 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 +5 -4
- 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.map +1 -1
- package/dist/core/agent-session-custom-message-commit.d.ts +1 -1
- 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 +1 -1
- package/dist/core/agent-session-message-queue.d.ts.map +1 -1
- package/dist/core/agent-session-message-queue.js +2 -2
- package/dist/core/agent-session-message-queue.js.map +1 -1
- package/dist/core/agent-session-methods.d.ts +17 -7
- 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-prompt.d.ts +2 -2
- package/dist/core/agent-session-prompt.d.ts.map +1 -1
- package/dist/core/agent-session-prompt.js +22 -18
- package/dist/core/agent-session-prompt.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-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 +30 -5
- package/dist/core/agent-session-tool-registry.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 +2 -2
- package/dist/core/agent-session-types.js.map +1 -1
- package/dist/core/agent-session.d.ts +4 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +7 -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 +8 -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 +9 -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 +2 -1
- 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 +2 -1
- 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 +4 -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/runner-context.d.ts +11 -1
- package/dist/core/extensions/runner-context.d.ts.map +1 -1
- package/dist/core/extensions/runner-context.js +41 -2
- 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-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 +68 -18
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/runtime-types.d.ts +4 -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 +5 -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/keybindings.d.ts +27 -2
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +7 -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 +2 -2
- 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 +1 -0
- package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
- package/dist/core/settings-manager-basic-accessors.js +2 -0
- 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-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 +12 -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 +2 -0
- 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 +41 -0
- package/dist/core/tasks/agent-adapter.d.ts.map +1 -0
- package/dist/core/tasks/agent-adapter.js +105 -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 +115 -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 +18 -3
- package/dist/core/tools/bash-pty-native.d.ts.map +1 -1
- package/dist/core/tools/bash-pty-native.js +116 -1
- package/dist/core/tools/bash-pty-native.js.map +1 -1
- package/dist/core/tools/bash.d.ts +13 -4
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +53 -9
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +1 -2
- package/dist/core/tools/edit.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/index.d.ts +2 -2
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/powershell.d.ts +20 -10
- package/dist/core/tools/powershell.d.ts.map +1 -1
- package/dist/core/tools/powershell.js +33 -7
- package/dist/core/tools/powershell.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.map +1 -1
- package/dist/core/tools/write.js +1 -2
- package/dist/core/tools/write.js.map +1 -1
- package/dist/core/workflow-stage-admission.d.ts +10 -0
- package/dist/core/workflow-stage-admission.d.ts.map +1 -1
- package/dist/core/workflow-stage-admission.js +24 -0
- 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 +11 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- 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/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 +33 -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 +158 -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 +1 -0
- 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 +6 -1
- package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.js +4 -1
- 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 +2 -1
- 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 +2 -0
- 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-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/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 +5 -9
- package/dist/modes/interactive-engine/engine-custom-ui.d.ts.map +1 -1
- package/dist/modes/interactive-engine/engine-custom-ui.js +14 -5
- package/dist/modes/interactive-engine/engine-custom-ui.js.map +1 -1
- package/dist/modes/interactive-engine/engine-dialog-host.d.ts +2 -2
- 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 +6 -0
- 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 +40 -3
- package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
- package/dist/modes/interactive-engine/protocol.d.ts +9 -0
- package/dist/modes/interactive-engine/protocol.d.ts.map +1 -1
- package/dist/modes/interactive-engine/protocol.js +8 -0
- 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 +3 -2
- 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-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 +20 -0
- 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.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +11 -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 +13 -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/docs/background-tasks.md +205 -0
- package/docs/compaction.md +2 -0
- package/docs/development.md +23 -72
- package/docs/docs.json +2 -0
- package/docs/environment-variables.md +1 -1
- package/docs/extensions.md +112 -6
- package/docs/herdr.md +53 -0
- package/docs/intercom.md +42 -35
- package/docs/keybindings.md +19 -2
- package/docs/models/evals.md +224 -147
- package/docs/models/model-selection.md +28 -19
- package/docs/models/pareto-efficiency.md +2 -2
- package/docs/providers.md +48 -46
- package/docs/quickstart.md +1 -1
- package/docs/sdk.md +244 -0
- package/docs/settings.md +19 -3
- package/docs/skills.md +23 -1
- package/docs/subagents.md +74 -10
- package/docs/themes.md +4 -0
- package/docs/tools.md +29 -0
- package/docs/tui.md +29 -2
- package/docs/usage.md +4 -0
- package/docs/windows.md +4 -4
- package/docs/workflows/api-reference.md +14 -5
- package/docs/workflows/operations.md +49 -3
- package/docs/workflows/reliable-design.md +35 -4
- package/docs/workflows/verification.md +21 -4
- package/docs/workflows.md +3 -1
- package/npm-shrinkwrap.json +797 -677
- package/package.json +10 -10
- /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
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { WorkflowActivityObserver, WorkflowActivityPublisher, WorkflowActivitySnapshotFrame, WorkflowActivitySubscription, WorkflowEvent, WorkflowObservationDiagnostic } from "./workflow-events.js";
|
|
2
|
+
export declare class WorkflowActivityHub {
|
|
3
|
+
private cursor;
|
|
4
|
+
private availability;
|
|
5
|
+
private roots;
|
|
6
|
+
private observers;
|
|
7
|
+
private failures;
|
|
8
|
+
private disposed;
|
|
9
|
+
private dispatch?;
|
|
10
|
+
private pendingDispatches;
|
|
11
|
+
bindDispatcher(dispatch: (event: WorkflowEvent, isCurrent: () => boolean) => Promise<void>): void;
|
|
12
|
+
private emit;
|
|
13
|
+
getSnapshotFrame(): WorkflowActivitySnapshotFrame;
|
|
14
|
+
observeWorkflowActivity(observer: WorkflowActivityObserver): WorkflowActivitySubscription;
|
|
15
|
+
private disposeLease;
|
|
16
|
+
private enqueue;
|
|
17
|
+
private deliver;
|
|
18
|
+
private broadcast;
|
|
19
|
+
private advance;
|
|
20
|
+
registerWorkflowActivityPublisher(): WorkflowActivityPublisher;
|
|
21
|
+
dispose(): void;
|
|
22
|
+
diagnostics(): readonly WorkflowObservationDiagnostic[];
|
|
23
|
+
private record;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=workflow-activity-hub.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-activity-hub.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/workflow-activity-hub.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEX,wBAAwB,EACxB,yBAAyB,EACzB,6BAA6B,EAC7B,4BAA4B,EAC5B,aAAa,EAEb,6BAA6B,EAE7B,MAAM,sBAAsB,CAAC;AAS9B,qBAAa,mBAAmB;IAC/B,OAAO,CAAC,MAAM,CAAmE;IACjF,OAAO,CAAC,YAAY,CAAyD;IAC7E,OAAO,CAAC,KAAK,CAA2C;IACxD,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,QAAQ,CAAuC;IACvD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAC,CAAoE;IACrF,OAAO,CAAC,iBAAiB,CAAsB;IAC/C,cAAc,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAKhG;IACD,OAAO,CAAC,IAAI;IAWZ,gBAAgB,IAAI,6BAA6B,CAShD;IACD,uBAAuB,CAAC,QAAQ,EAAE,wBAAwB,GAAG,4BAA4B,CAWxF;IACD,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,OAAO;YAWD,OAAO;IAUrB,OAAO,CAAC,SAAS;IAGjB,OAAO,CAAC,OAAO;IAIf,iCAAiC,IAAI,yBAAyB,CAkE7D;IACD,OAAO,IAAI,IAAI,CAMd;IACD,WAAW,IAAI,SAAS,6BAA6B,EAAE,CAEtD;IACD,OAAO,CAAC,MAAM;CAId"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
export class WorkflowActivityHub {
|
|
3
|
+
constructor() {
|
|
4
|
+
this.cursor = { epoch: randomUUID(), revision: 0 };
|
|
5
|
+
this.availability = "unavailable";
|
|
6
|
+
this.roots = new Map();
|
|
7
|
+
this.observers = new Set();
|
|
8
|
+
this.failures = [];
|
|
9
|
+
this.disposed = false;
|
|
10
|
+
this.pendingDispatches = [];
|
|
11
|
+
}
|
|
12
|
+
bindDispatcher(dispatch) {
|
|
13
|
+
if (this.disposed)
|
|
14
|
+
return;
|
|
15
|
+
this.dispatch = dispatch;
|
|
16
|
+
for (const deliver of this.pendingDispatches)
|
|
17
|
+
deliver();
|
|
18
|
+
this.pendingDispatches = [];
|
|
19
|
+
}
|
|
20
|
+
emit(event, isCurrent) {
|
|
21
|
+
const copy = structuredClone(event);
|
|
22
|
+
const deliver = () => queueMicrotask(() => {
|
|
23
|
+
if (!isCurrent())
|
|
24
|
+
return;
|
|
25
|
+
void this.dispatch?.(copy, isCurrent).catch(() => this.record("ObserverDeliveryFailed"));
|
|
26
|
+
});
|
|
27
|
+
if (this.dispatch)
|
|
28
|
+
deliver();
|
|
29
|
+
else
|
|
30
|
+
this.pendingDispatches.push(deliver);
|
|
31
|
+
}
|
|
32
|
+
getSnapshotFrame() {
|
|
33
|
+
return this.availability === "ready"
|
|
34
|
+
? {
|
|
35
|
+
kind: "snapshot",
|
|
36
|
+
cursor: { ...this.cursor },
|
|
37
|
+
availability: "ready",
|
|
38
|
+
roots: [...this.roots.values()].map((root) => ({ ...root })),
|
|
39
|
+
}
|
|
40
|
+
: { kind: "snapshot", cursor: { ...this.cursor }, availability: this.availability };
|
|
41
|
+
}
|
|
42
|
+
observeWorkflowActivity(observer) {
|
|
43
|
+
const lease = { observer, queue: [], delivering: false, active: true };
|
|
44
|
+
if (this.disposed) {
|
|
45
|
+
this.record("ObserverDisposed");
|
|
46
|
+
return { dispose: () => { } };
|
|
47
|
+
}
|
|
48
|
+
if (this.availability !== "ready")
|
|
49
|
+
this.record(this.availability === "recovering" ? "SourceRecovering" : "SourceUnavailable");
|
|
50
|
+
this.observers.add(lease);
|
|
51
|
+
this.enqueue(lease, this.getSnapshotFrame());
|
|
52
|
+
return { dispose: () => this.disposeLease(lease) };
|
|
53
|
+
}
|
|
54
|
+
disposeLease(lease) {
|
|
55
|
+
if (!lease.active)
|
|
56
|
+
return;
|
|
57
|
+
lease.active = false;
|
|
58
|
+
lease.queue = [];
|
|
59
|
+
this.observers.delete(lease);
|
|
60
|
+
this.record("ObserverDisposed");
|
|
61
|
+
}
|
|
62
|
+
enqueue(lease, frame) {
|
|
63
|
+
if (lease.queue.length >= 256) {
|
|
64
|
+
lease.queue = [this.getSnapshotFrame()];
|
|
65
|
+
this.record("ObserverOverflow");
|
|
66
|
+
}
|
|
67
|
+
else
|
|
68
|
+
lease.queue.push(frame);
|
|
69
|
+
if (lease.delivering)
|
|
70
|
+
return;
|
|
71
|
+
lease.delivering = true;
|
|
72
|
+
queueMicrotask(() => {
|
|
73
|
+
void this.deliver(lease);
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
async deliver(lease) {
|
|
77
|
+
while (lease.active && lease.queue.length) {
|
|
78
|
+
try {
|
|
79
|
+
await lease.observer(structuredClone(lease.queue.shift()));
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
this.record("ObserverDeliveryFailed");
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
lease.delivering = false;
|
|
86
|
+
}
|
|
87
|
+
broadcast(frame) {
|
|
88
|
+
for (const lease of this.observers)
|
|
89
|
+
this.enqueue(lease, frame);
|
|
90
|
+
}
|
|
91
|
+
advance() {
|
|
92
|
+
this.cursor = { ...this.cursor, revision: this.cursor.revision + 1 };
|
|
93
|
+
return { ...this.cursor };
|
|
94
|
+
}
|
|
95
|
+
registerWorkflowActivityPublisher() {
|
|
96
|
+
let active = !this.disposed;
|
|
97
|
+
if (active) {
|
|
98
|
+
this.cursor = { epoch: randomUUID(), revision: 0 };
|
|
99
|
+
this.availability = "unavailable";
|
|
100
|
+
this.roots.clear();
|
|
101
|
+
this.record("SourceUnavailable");
|
|
102
|
+
this.broadcast(this.getSnapshotFrame());
|
|
103
|
+
}
|
|
104
|
+
const epoch = this.cursor.epoch;
|
|
105
|
+
const isCurrent = () => active && !this.disposed && this.cursor.epoch === epoch;
|
|
106
|
+
const admitted = () => {
|
|
107
|
+
if (isCurrent())
|
|
108
|
+
return true;
|
|
109
|
+
this.record("PublisherFenced");
|
|
110
|
+
return false;
|
|
111
|
+
};
|
|
112
|
+
return {
|
|
113
|
+
publishSnapshot: (input) => {
|
|
114
|
+
if (!admitted())
|
|
115
|
+
return;
|
|
116
|
+
if (input.availability !== "ready")
|
|
117
|
+
this.record(input.availability === "recovering" ? "SourceRecovering" : "SourceUnavailable");
|
|
118
|
+
this.availability = input.availability;
|
|
119
|
+
this.roots = new Map(input.availability === "ready" ? input.roots.map((root) => [root.rootRunId, { ...root }]) : []);
|
|
120
|
+
this.advance();
|
|
121
|
+
this.broadcast(this.getSnapshotFrame());
|
|
122
|
+
},
|
|
123
|
+
publishChanged: (root) => {
|
|
124
|
+
if (!admitted())
|
|
125
|
+
return;
|
|
126
|
+
this.roots.set(root.rootRunId, { ...root });
|
|
127
|
+
const cursor = this.advance();
|
|
128
|
+
this.broadcast({ kind: "changed", cursor, root: { ...root } });
|
|
129
|
+
this.emit({ type: "workflow_activity_changed", cursor, root: { ...root } }, isCurrent);
|
|
130
|
+
},
|
|
131
|
+
publishRemoved: (rootRunId) => {
|
|
132
|
+
if (!admitted())
|
|
133
|
+
return;
|
|
134
|
+
this.roots.delete(rootRunId);
|
|
135
|
+
this.broadcast({ kind: "removed", cursor: this.advance(), rootRunId });
|
|
136
|
+
},
|
|
137
|
+
publishLifecycle: (input) => {
|
|
138
|
+
if (!admitted())
|
|
139
|
+
return;
|
|
140
|
+
const event = { ...input, cursor: this.advance() };
|
|
141
|
+
this.emit(event, isCurrent);
|
|
142
|
+
if (event.target.kind === "stage" && event.target.status === "completed") {
|
|
143
|
+
this.emit({ ...event, type: "workflow_stage_completed", target: { ...event.target, status: "completed" } }, isCurrent);
|
|
144
|
+
}
|
|
145
|
+
},
|
|
146
|
+
publishHeartbeat: (event) => {
|
|
147
|
+
if (admitted())
|
|
148
|
+
this.emit(event, isCurrent);
|
|
149
|
+
},
|
|
150
|
+
dispose: () => {
|
|
151
|
+
if (!active)
|
|
152
|
+
return;
|
|
153
|
+
const current = admitted();
|
|
154
|
+
active = false;
|
|
155
|
+
if (!current)
|
|
156
|
+
return;
|
|
157
|
+
this.availability = "unavailable";
|
|
158
|
+
this.roots.clear();
|
|
159
|
+
this.advance();
|
|
160
|
+
this.record("SourceUnavailable");
|
|
161
|
+
this.broadcast(this.getSnapshotFrame());
|
|
162
|
+
},
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
dispose() {
|
|
166
|
+
if (this.disposed)
|
|
167
|
+
return;
|
|
168
|
+
this.disposed = true;
|
|
169
|
+
this.dispatch = undefined;
|
|
170
|
+
this.pendingDispatches = [];
|
|
171
|
+
for (const lease of this.observers)
|
|
172
|
+
this.disposeLease(lease);
|
|
173
|
+
}
|
|
174
|
+
diagnostics() {
|
|
175
|
+
return structuredClone(this.failures);
|
|
176
|
+
}
|
|
177
|
+
record(kind) {
|
|
178
|
+
this.failures.push({ kind, cursor: { ...this.cursor } });
|
|
179
|
+
if (this.failures.length > 256)
|
|
180
|
+
this.failures.shift();
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=workflow-activity-hub.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-activity-hub.js","sourceRoot":"","sources":["../../../src/core/extensions/workflow-activity-hub.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport type {\n\tWorkflowActivityFrame,\n\tWorkflowActivityObserver,\n\tWorkflowActivityPublisher,\n\tWorkflowActivitySnapshotFrame,\n\tWorkflowActivitySubscription,\n\tWorkflowEvent,\n\tWorkflowObservationCursor,\n\tWorkflowObservationDiagnostic,\n\tWorkflowRootActivity,\n} from \"./workflow-events.js\";\n\ninterface ObserverLease {\n\tobserver: WorkflowActivityObserver;\n\tqueue: WorkflowActivityFrame[];\n\tdelivering: boolean;\n\tactive: boolean;\n}\n\nexport class WorkflowActivityHub {\n\tprivate cursor: WorkflowObservationCursor = { epoch: randomUUID(), revision: 0 };\n\tprivate availability: \"ready\" | \"recovering\" | \"unavailable\" = \"unavailable\";\n\tprivate roots = new Map<string, WorkflowRootActivity>();\n\tprivate observers = new Set<ObserverLease>();\n\tprivate failures: WorkflowObservationDiagnostic[] = [];\n\tprivate disposed = false;\n\tprivate dispatch?: (event: WorkflowEvent, isCurrent: () => boolean) => Promise<void>;\n\tprivate pendingDispatches: (() => void)[] = [];\n\tbindDispatcher(dispatch: (event: WorkflowEvent, isCurrent: () => boolean) => Promise<void>): void {\n\t\tif (this.disposed) return;\n\t\tthis.dispatch = dispatch;\n\t\tfor (const deliver of this.pendingDispatches) deliver();\n\t\tthis.pendingDispatches = [];\n\t}\n\tprivate emit(event: WorkflowEvent, isCurrent: () => boolean): void {\n\t\tconst copy = structuredClone(event);\n\t\tconst deliver = () =>\n\t\t\tqueueMicrotask(() => {\n\t\t\t\tif (!isCurrent()) return;\n\t\t\t\tvoid this.dispatch?.(copy, isCurrent).catch(() => this.record(\"ObserverDeliveryFailed\"));\n\t\t\t});\n\t\tif (this.dispatch) deliver();\n\t\telse this.pendingDispatches.push(deliver);\n\t}\n\n\tgetSnapshotFrame(): WorkflowActivitySnapshotFrame {\n\t\treturn this.availability === \"ready\"\n\t\t\t? {\n\t\t\t\t\tkind: \"snapshot\",\n\t\t\t\t\tcursor: { ...this.cursor },\n\t\t\t\t\tavailability: \"ready\",\n\t\t\t\t\troots: [...this.roots.values()].map((root) => ({ ...root })),\n\t\t\t\t}\n\t\t\t: { kind: \"snapshot\", cursor: { ...this.cursor }, availability: this.availability };\n\t}\n\tobserveWorkflowActivity(observer: WorkflowActivityObserver): WorkflowActivitySubscription {\n\t\tconst lease: ObserverLease = { observer, queue: [], delivering: false, active: true };\n\t\tif (this.disposed) {\n\t\t\tthis.record(\"ObserverDisposed\");\n\t\t\treturn { dispose: () => {} };\n\t\t}\n\t\tif (this.availability !== \"ready\")\n\t\t\tthis.record(this.availability === \"recovering\" ? \"SourceRecovering\" : \"SourceUnavailable\");\n\t\tthis.observers.add(lease);\n\t\tthis.enqueue(lease, this.getSnapshotFrame());\n\t\treturn { dispose: () => this.disposeLease(lease) };\n\t}\n\tprivate disposeLease(lease: ObserverLease): void {\n\t\tif (!lease.active) return;\n\t\tlease.active = false;\n\t\tlease.queue = [];\n\t\tthis.observers.delete(lease);\n\t\tthis.record(\"ObserverDisposed\");\n\t}\n\tprivate enqueue(lease: ObserverLease, frame: WorkflowActivityFrame): void {\n\t\tif (lease.queue.length >= 256) {\n\t\t\tlease.queue = [this.getSnapshotFrame()];\n\t\t\tthis.record(\"ObserverOverflow\");\n\t\t} else lease.queue.push(frame);\n\t\tif (lease.delivering) return;\n\t\tlease.delivering = true;\n\t\tqueueMicrotask(() => {\n\t\t\tvoid this.deliver(lease);\n\t\t});\n\t}\n\tprivate async deliver(lease: ObserverLease): Promise<void> {\n\t\twhile (lease.active && lease.queue.length) {\n\t\t\ttry {\n\t\t\t\tawait lease.observer(structuredClone(lease.queue.shift()!));\n\t\t\t} catch {\n\t\t\t\tthis.record(\"ObserverDeliveryFailed\");\n\t\t\t}\n\t\t}\n\t\tlease.delivering = false;\n\t}\n\tprivate broadcast(frame: WorkflowActivityFrame): void {\n\t\tfor (const lease of this.observers) this.enqueue(lease, frame);\n\t}\n\tprivate advance(): WorkflowObservationCursor {\n\t\tthis.cursor = { ...this.cursor, revision: this.cursor.revision + 1 };\n\t\treturn { ...this.cursor };\n\t}\n\tregisterWorkflowActivityPublisher(): WorkflowActivityPublisher {\n\t\tlet active = !this.disposed;\n\t\tif (active) {\n\t\t\tthis.cursor = { epoch: randomUUID(), revision: 0 };\n\t\t\tthis.availability = \"unavailable\";\n\t\t\tthis.roots.clear();\n\t\t\tthis.record(\"SourceUnavailable\");\n\t\t\tthis.broadcast(this.getSnapshotFrame());\n\t\t}\n\t\tconst epoch = this.cursor.epoch;\n\t\tconst isCurrent = () => active && !this.disposed && this.cursor.epoch === epoch;\n\t\tconst admitted = () => {\n\t\t\tif (isCurrent()) return true;\n\t\t\tthis.record(\"PublisherFenced\");\n\t\t\treturn false;\n\t\t};\n\t\treturn {\n\t\t\tpublishSnapshot: (input) => {\n\t\t\t\tif (!admitted()) return;\n\t\t\t\tif (input.availability !== \"ready\")\n\t\t\t\t\tthis.record(input.availability === \"recovering\" ? \"SourceRecovering\" : \"SourceUnavailable\");\n\t\t\t\tthis.availability = input.availability;\n\t\t\t\tthis.roots = new Map(\n\t\t\t\t\tinput.availability === \"ready\" ? input.roots.map((root) => [root.rootRunId, { ...root }]) : [],\n\t\t\t\t);\n\t\t\t\tthis.advance();\n\t\t\t\tthis.broadcast(this.getSnapshotFrame());\n\t\t\t},\n\t\t\tpublishChanged: (root) => {\n\t\t\t\tif (!admitted()) return;\n\t\t\t\tthis.roots.set(root.rootRunId, { ...root });\n\t\t\t\tconst cursor = this.advance();\n\t\t\t\tthis.broadcast({ kind: \"changed\", cursor, root: { ...root } });\n\t\t\t\tthis.emit({ type: \"workflow_activity_changed\", cursor, root: { ...root } }, isCurrent);\n\t\t\t},\n\t\t\tpublishRemoved: (rootRunId) => {\n\t\t\t\tif (!admitted()) return;\n\t\t\t\tthis.roots.delete(rootRunId);\n\t\t\t\tthis.broadcast({ kind: \"removed\", cursor: this.advance(), rootRunId });\n\t\t\t},\n\t\t\tpublishLifecycle: (input) => {\n\t\t\t\tif (!admitted()) return;\n\t\t\t\tconst event = { ...input, cursor: this.advance() };\n\t\t\t\tthis.emit(event, isCurrent);\n\t\t\t\tif (event.target.kind === \"stage\" && event.target.status === \"completed\") {\n\t\t\t\t\tthis.emit(\n\t\t\t\t\t\t{ ...event, type: \"workflow_stage_completed\", target: { ...event.target, status: \"completed\" } },\n\t\t\t\t\t\tisCurrent,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t\tpublishHeartbeat: (event) => {\n\t\t\t\tif (admitted()) this.emit(event, isCurrent);\n\t\t\t},\n\t\t\tdispose: () => {\n\t\t\t\tif (!active) return;\n\t\t\t\tconst current = admitted();\n\t\t\t\tactive = false;\n\t\t\t\tif (!current) return;\n\t\t\t\tthis.availability = \"unavailable\";\n\t\t\t\tthis.roots.clear();\n\t\t\t\tthis.advance();\n\t\t\t\tthis.record(\"SourceUnavailable\");\n\t\t\t\tthis.broadcast(this.getSnapshotFrame());\n\t\t\t},\n\t\t};\n\t}\n\tdispose(): void {\n\t\tif (this.disposed) return;\n\t\tthis.disposed = true;\n\t\tthis.dispatch = undefined;\n\t\tthis.pendingDispatches = [];\n\t\tfor (const lease of this.observers) this.disposeLease(lease);\n\t}\n\tdiagnostics(): readonly WorkflowObservationDiagnostic[] {\n\t\treturn structuredClone(this.failures);\n\t}\n\tprivate record(kind: WorkflowObservationDiagnostic[\"kind\"]): void {\n\t\tthis.failures.push({ kind, cursor: { ...this.cursor } });\n\t\tif (this.failures.length > 256) this.failures.shift();\n\t}\n}\n"]}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
export type WorkflowActivityState = "working" | "idle" | "blocked";
|
|
2
|
+
export type WorkflowActivityReason = "executing" | "automatic_continuation" | "retrying" | "stopping" | "awaiting_input" | "manual_intervention" | "paused" | "quiescent";
|
|
3
|
+
export type WorkflowRunStatus = "pending" | "running" | "paused" | "completed" | "skipped" | "cancelled" | "blocked" | "failed" | "killed";
|
|
4
|
+
export type WorkflowStageStatus = "pending" | "running" | "awaiting_input" | "paused" | "blocked" | "completed" | "failed" | "skipped";
|
|
5
|
+
export type WorkflowToolNodeStatus = "pending" | "running" | "completed" | "failed" | "cached" | "cancelled";
|
|
6
|
+
export type WorkflowControlAction = "interrupt" | "quit" | "kill" | "pause" | "resume";
|
|
7
|
+
export interface WorkflowRootActivity {
|
|
8
|
+
rootRunId: string;
|
|
9
|
+
ownerSessionId: string;
|
|
10
|
+
state: WorkflowActivityState;
|
|
11
|
+
reason: WorkflowActivityReason;
|
|
12
|
+
activeExecutionCount: number;
|
|
13
|
+
actionableBlockCount: number;
|
|
14
|
+
needsAttention: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface WorkflowObservationCursor {
|
|
17
|
+
epoch: string;
|
|
18
|
+
revision: number;
|
|
19
|
+
}
|
|
20
|
+
export type WorkflowActivitySnapshotInput = {
|
|
21
|
+
availability: "ready";
|
|
22
|
+
roots: readonly WorkflowRootActivity[];
|
|
23
|
+
} | {
|
|
24
|
+
availability: "recovering" | "unavailable";
|
|
25
|
+
};
|
|
26
|
+
export type WorkflowActivitySnapshotFrame = WorkflowActivitySnapshotInput & {
|
|
27
|
+
kind: "snapshot";
|
|
28
|
+
cursor: WorkflowObservationCursor;
|
|
29
|
+
};
|
|
30
|
+
export type WorkflowActivityFrame = WorkflowActivitySnapshotFrame | {
|
|
31
|
+
kind: "changed";
|
|
32
|
+
cursor: WorkflowObservationCursor;
|
|
33
|
+
root: WorkflowRootActivity;
|
|
34
|
+
} | {
|
|
35
|
+
kind: "removed";
|
|
36
|
+
cursor: WorkflowObservationCursor;
|
|
37
|
+
rootRunId: string;
|
|
38
|
+
};
|
|
39
|
+
export type WorkflowActivityObserver = (frame: WorkflowActivityFrame) => void | Promise<void>;
|
|
40
|
+
export interface WorkflowActivitySubscription {
|
|
41
|
+
dispose(): void;
|
|
42
|
+
}
|
|
43
|
+
export type WorkflowLifecycleDelivery = "live" | "replay";
|
|
44
|
+
export type WorkflowLifecycleTarget = {
|
|
45
|
+
kind: "run";
|
|
46
|
+
runId: string;
|
|
47
|
+
previousStatus?: WorkflowRunStatus;
|
|
48
|
+
status: WorkflowRunStatus;
|
|
49
|
+
action?: WorkflowControlAction;
|
|
50
|
+
} | {
|
|
51
|
+
kind: "stage";
|
|
52
|
+
runId: string;
|
|
53
|
+
stageId: string;
|
|
54
|
+
stageName: string;
|
|
55
|
+
previousStatus?: WorkflowStageStatus;
|
|
56
|
+
status: WorkflowStageStatus;
|
|
57
|
+
} | {
|
|
58
|
+
kind: "tool";
|
|
59
|
+
runId: string;
|
|
60
|
+
toolNodeId: string;
|
|
61
|
+
toolName: string;
|
|
62
|
+
previousStatus?: WorkflowToolNodeStatus;
|
|
63
|
+
status: WorkflowToolNodeStatus;
|
|
64
|
+
} | {
|
|
65
|
+
kind: "prompt";
|
|
66
|
+
runId: string;
|
|
67
|
+
stageId?: string;
|
|
68
|
+
promptId: string;
|
|
69
|
+
status: "opened" | "answered" | "cancelled";
|
|
70
|
+
};
|
|
71
|
+
export interface WorkflowLifecycleEvent {
|
|
72
|
+
type: "workflow_lifecycle";
|
|
73
|
+
eventId: string;
|
|
74
|
+
cursor: WorkflowObservationCursor;
|
|
75
|
+
runId: string;
|
|
76
|
+
rootRunId: string;
|
|
77
|
+
ownerSessionId: string;
|
|
78
|
+
occurredAt: number;
|
|
79
|
+
observedAt: number;
|
|
80
|
+
delivery: WorkflowLifecycleDelivery;
|
|
81
|
+
target: WorkflowLifecycleTarget;
|
|
82
|
+
attribution?: "user" | "agent" | "scheduler" | "recovery" | "unknown";
|
|
83
|
+
}
|
|
84
|
+
export interface WorkflowStageCompletedEvent extends Omit<WorkflowLifecycleEvent, "type" | "target"> {
|
|
85
|
+
type: "workflow_stage_completed";
|
|
86
|
+
target: Extract<WorkflowLifecycleTarget, {
|
|
87
|
+
kind: "stage";
|
|
88
|
+
}> & {
|
|
89
|
+
status: "completed";
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
export interface WorkflowActivityChangedEvent {
|
|
93
|
+
type: "workflow_activity_changed";
|
|
94
|
+
cursor: WorkflowObservationCursor;
|
|
95
|
+
root: WorkflowRootActivity;
|
|
96
|
+
}
|
|
97
|
+
export interface WorkflowHeartbeatEvent {
|
|
98
|
+
type: "workflow_heartbeat";
|
|
99
|
+
runId: string;
|
|
100
|
+
rootRunId: string;
|
|
101
|
+
ownerSessionId: string;
|
|
102
|
+
scheduledAt: number;
|
|
103
|
+
intervalMinutes: number;
|
|
104
|
+
}
|
|
105
|
+
export type WorkflowEvent = WorkflowLifecycleEvent | WorkflowStageCompletedEvent | WorkflowActivityChangedEvent | WorkflowHeartbeatEvent;
|
|
106
|
+
export interface WorkflowActivityPublisher {
|
|
107
|
+
publishSnapshot(input: WorkflowActivitySnapshotInput): void;
|
|
108
|
+
publishChanged(root: WorkflowRootActivity): void;
|
|
109
|
+
publishRemoved(rootRunId: string): void;
|
|
110
|
+
publishLifecycle(event: Omit<WorkflowLifecycleEvent, "cursor">): void;
|
|
111
|
+
publishHeartbeat(event: WorkflowHeartbeatEvent): void;
|
|
112
|
+
dispose(): void;
|
|
113
|
+
}
|
|
114
|
+
export interface WorkflowObservationDiagnostic {
|
|
115
|
+
kind: "ObserverDisposed" | "SourceRecovering" | "SourceUnavailable" | "ObserverDeliveryFailed" | "ObserverOverflow" | "PublisherFenced";
|
|
116
|
+
cursor: WorkflowObservationCursor;
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=workflow-events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-events.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/workflow-events.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-events.js","sourceRoot":"","sources":["../../../src/core/extensions/workflow-events.ts"],"names":[],"mappings":"","sourcesContent":["export type WorkflowActivityState = \"working\" | \"idle\" | \"blocked\";\nexport type WorkflowActivityReason =\n\t| \"executing\"\n\t| \"automatic_continuation\"\n\t| \"retrying\"\n\t| \"stopping\"\n\t| \"awaiting_input\"\n\t| \"manual_intervention\"\n\t| \"paused\"\n\t| \"quiescent\";\n\n// Kept in sync with workflows/shared/store-types without a host runtime dependency.\nexport type WorkflowRunStatus =\n\t| \"pending\"\n\t| \"running\"\n\t| \"paused\"\n\t| \"completed\"\n\t| \"skipped\"\n\t| \"cancelled\"\n\t| \"blocked\"\n\t| \"failed\"\n\t| \"killed\";\nexport type WorkflowStageStatus =\n\t| \"pending\"\n\t| \"running\"\n\t| \"awaiting_input\"\n\t| \"paused\"\n\t| \"blocked\"\n\t| \"completed\"\n\t| \"failed\"\n\t| \"skipped\";\nexport type WorkflowToolNodeStatus = \"pending\" | \"running\" | \"completed\" | \"failed\" | \"cached\" | \"cancelled\";\nexport type WorkflowControlAction = \"interrupt\" | \"quit\" | \"kill\" | \"pause\" | \"resume\";\n\nexport interface WorkflowRootActivity {\n\trootRunId: string;\n\townerSessionId: string;\n\tstate: WorkflowActivityState;\n\treason: WorkflowActivityReason;\n\tactiveExecutionCount: number;\n\tactionableBlockCount: number;\n\tneedsAttention: boolean;\n}\nexport interface WorkflowObservationCursor {\n\tepoch: string;\n\trevision: number;\n}\nexport type WorkflowActivitySnapshotInput =\n\t| { availability: \"ready\"; roots: readonly WorkflowRootActivity[] }\n\t| { availability: \"recovering\" | \"unavailable\" };\nexport type WorkflowActivitySnapshotFrame = WorkflowActivitySnapshotInput & {\n\tkind: \"snapshot\";\n\tcursor: WorkflowObservationCursor;\n};\nexport type WorkflowActivityFrame =\n\t| WorkflowActivitySnapshotFrame\n\t| { kind: \"changed\"; cursor: WorkflowObservationCursor; root: WorkflowRootActivity }\n\t| { kind: \"removed\"; cursor: WorkflowObservationCursor; rootRunId: string };\nexport type WorkflowActivityObserver = (frame: WorkflowActivityFrame) => void | Promise<void>;\nexport interface WorkflowActivitySubscription {\n\tdispose(): void;\n}\nexport type WorkflowLifecycleDelivery = \"live\" | \"replay\";\nexport type WorkflowLifecycleTarget =\n\t| {\n\t\t\tkind: \"run\";\n\t\t\trunId: string;\n\t\t\tpreviousStatus?: WorkflowRunStatus;\n\t\t\tstatus: WorkflowRunStatus;\n\t\t\taction?: WorkflowControlAction;\n\t }\n\t| {\n\t\t\tkind: \"stage\";\n\t\t\trunId: string;\n\t\t\tstageId: string;\n\t\t\tstageName: string;\n\t\t\tpreviousStatus?: WorkflowStageStatus;\n\t\t\tstatus: WorkflowStageStatus;\n\t }\n\t| {\n\t\t\tkind: \"tool\";\n\t\t\trunId: string;\n\t\t\ttoolNodeId: string;\n\t\t\ttoolName: string;\n\t\t\tpreviousStatus?: WorkflowToolNodeStatus;\n\t\t\tstatus: WorkflowToolNodeStatus;\n\t }\n\t| { kind: \"prompt\"; runId: string; stageId?: string; promptId: string; status: \"opened\" | \"answered\" | \"cancelled\" };\nexport interface WorkflowLifecycleEvent {\n\ttype: \"workflow_lifecycle\";\n\teventId: string;\n\tcursor: WorkflowObservationCursor;\n\trunId: string;\n\trootRunId: string;\n\townerSessionId: string;\n\toccurredAt: number;\n\tobservedAt: number;\n\tdelivery: WorkflowLifecycleDelivery;\n\ttarget: WorkflowLifecycleTarget;\n\tattribution?: \"user\" | \"agent\" | \"scheduler\" | \"recovery\" | \"unknown\";\n}\nexport interface WorkflowStageCompletedEvent extends Omit<WorkflowLifecycleEvent, \"type\" | \"target\"> {\n\ttype: \"workflow_stage_completed\";\n\ttarget: Extract<WorkflowLifecycleTarget, { kind: \"stage\" }> & { status: \"completed\" };\n}\nexport interface WorkflowActivityChangedEvent {\n\ttype: \"workflow_activity_changed\";\n\tcursor: WorkflowObservationCursor;\n\troot: WorkflowRootActivity;\n}\nexport interface WorkflowHeartbeatEvent {\n\ttype: \"workflow_heartbeat\";\n\trunId: string;\n\trootRunId: string;\n\townerSessionId: string;\n\tscheduledAt: number;\n\tintervalMinutes: number;\n}\nexport type WorkflowEvent =\n\t| WorkflowLifecycleEvent\n\t| WorkflowStageCompletedEvent\n\t| WorkflowActivityChangedEvent\n\t| WorkflowHeartbeatEvent;\nexport interface WorkflowActivityPublisher {\n\tpublishSnapshot(input: WorkflowActivitySnapshotInput): void;\n\tpublishChanged(root: WorkflowRootActivity): void;\n\tpublishRemoved(rootRunId: string): void;\n\tpublishLifecycle(event: Omit<WorkflowLifecycleEvent, \"cursor\">): void;\n\tpublishHeartbeat(event: WorkflowHeartbeatEvent): void;\n\tdispose(): void;\n}\nexport interface WorkflowObservationDiagnostic {\n\tkind:\n\t\t| \"ObserverDisposed\"\n\t\t| \"SourceRecovering\"\n\t\t| \"SourceUnavailable\"\n\t\t| \"ObserverDeliveryFailed\"\n\t\t| \"ObserverOverflow\"\n\t\t| \"PublisherFenced\";\n\tcursor: WorkflowObservationCursor;\n}\n"]}
|
|
@@ -34,15 +34,19 @@ export declare class FooterDataProvider {
|
|
|
34
34
|
private refreshPending;
|
|
35
35
|
private disposed;
|
|
36
36
|
private gitWatchersStarted;
|
|
37
|
+
private cwdGeneration;
|
|
38
|
+
private watcherGeneration;
|
|
39
|
+
private readonly cwdBranches;
|
|
37
40
|
constructor(cwd: string);
|
|
38
41
|
/** Start post-frame git branch watching. Branch discovery remains lazy for first render. */
|
|
39
42
|
startGitWatcher(): void;
|
|
40
|
-
/** Current git branch
|
|
41
|
-
getGitBranch(): string | null;
|
|
43
|
+
/** Current git branch for the displayed session cwd, defaulting to this provider's cwd. */
|
|
44
|
+
getGitBranch(cwd?: string): string | null;
|
|
42
45
|
/** Extension status texts set via ctx.ui.setStatus() */
|
|
43
46
|
getExtensionStatuses(): ReadonlyMap<string, string>;
|
|
44
|
-
/** Subscribe to
|
|
45
|
-
onBranchChange(callback: () => void): () => void;
|
|
47
|
+
/** Subscribe to branch changes. An explicit cwd retains its watcher until unsubscribe. */
|
|
48
|
+
onBranchChange(callback: () => void, cwd?: string): () => void;
|
|
49
|
+
private createCwdProvider;
|
|
46
50
|
/** Internal: set extension status */
|
|
47
51
|
setExtensionStatus(key: string, text: string | undefined): void;
|
|
48
52
|
/** Internal: clear extension statuses */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"footer-data-provider.d.ts","sourceRoot":"","sources":["../../src/core/footer-data-provider.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,QAAQ,GAAG;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAgCzD;AAiDD;;;GAGG;AACH,qBAAa,kBAAkB;IAC9B,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAO;IAEhD,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,YAAY,CAAwC;IAC5D,OAAO,CAAC,QAAQ,CAA0C;IAC1D,OAAO,CAAC,WAAW,CAA0B;IAC7C,OAAO,CAAC,iBAAiB,CAAuB;IAChD,OAAO,CAAC,qBAAqB,CAA4D;IACzF,OAAO,CAAC,eAAe,CAA0B;IACjD,OAAO,CAAC,yBAAyB,CAA0B;IAC3D,OAAO,CAAC,sBAAsB,CAAuB;IACrD,OAAO,CAAC,6BAA6B,CAAuB;IAC5D,OAAO,CAAC,mCAAmC,CAA4D;IACvG,OAAO,CAAC,qBAAqB,CAAyB;IACtD,OAAO,CAAC,sBAAsB,CAAK;IACnC,OAAO,CAAC,YAAY,CAA8C;IAClE,OAAO,CAAC,oBAAoB,CAA8C;IAC1E,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,kBAAkB,CAAS;
|
|
1
|
+
{"version":3,"file":"footer-data-provider.d.ts","sourceRoot":"","sources":["../../src/core/footer-data-provider.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,QAAQ,GAAG;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAgCzD;AAiDD;;;GAGG;AACH,qBAAa,kBAAkB;IAC9B,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAO;IAEhD,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,YAAY,CAAwC;IAC5D,OAAO,CAAC,QAAQ,CAA0C;IAC1D,OAAO,CAAC,WAAW,CAA0B;IAC7C,OAAO,CAAC,iBAAiB,CAAuB;IAChD,OAAO,CAAC,qBAAqB,CAA4D;IACzF,OAAO,CAAC,eAAe,CAA0B;IACjD,OAAO,CAAC,yBAAyB,CAA0B;IAC3D,OAAO,CAAC,sBAAsB,CAAuB;IACrD,OAAO,CAAC,6BAA6B,CAAuB;IAC5D,OAAO,CAAC,mCAAmC,CAA4D;IACvG,OAAO,CAAC,qBAAqB,CAAyB;IACtD,OAAO,CAAC,sBAAsB,CAAK;IACnC,OAAO,CAAC,YAAY,CAA8C;IAClE,OAAO,CAAC,oBAAoB,CAA8C;IAC1E,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA2E;IAEvG,YAAY,GAAG,EAAE,MAAM,EAEtB;IAED,4FAA4F;IAC5F,eAAe,IAAI,IAAI,CAQtB;IAED,2FAA2F;IAC3F,YAAY,CAAC,GAAG,SAAW,GAAG,MAAM,GAAG,IAAI,CAkB1C;IAED,wDAAwD;IACxD,oBAAoB,IAAI,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAElD;IAED,0FAA0F;IAC1F,cAAc,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,IAAI,CAwB7D;IAED,OAAO,CAAC,iBAAiB;IAOzB,qCAAqC;IACrC,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAM9D;IAED,yCAAyC;IACzC,sBAAsB,IAAI,IAAI,CAE7B;IAED,4EAA4E;IAC5E,yBAAyB,IAAI,MAAM,CAElC;IAED,gDAAgD;IAChD,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAE7C;IAED,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CA2BxB;IAED,wBAAwB;IACxB,OAAO,IAAI,IAAI,CAad;IAED,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,eAAe;YAYT,qBAAqB;IA2BnC,OAAO,CAAC,oBAAoB;YAcd,qBAAqB;IAgBnC,OAAO,CAAC,gBAAgB;IAyBxB,OAAO,CAAC,0BAA0B;IAiBlC,OAAO,CAAC,gCAAgC;IAexC,OAAO,CAAC,uBAAuB;IAY/B,OAAO,CAAC,qBAAqB;IAK7B,OAAO,CAAC,iCAAiC;IAczC,OAAO,CAAC,uBAAuB;IAU/B,OAAO,CAAC,4BAA4B;IASpC,OAAO,CAAC,eAAe;CA8EvB;AAED,yGAAyG;AACzG,MAAM,MAAM,0BAA0B,GAAG,IAAI,CAC5C,kBAAkB,EAClB,cAAc,GAAG,sBAAsB,GAAG,2BAA2B,GAAG,gBAAgB,CACxF,CAAC"}
|
|
@@ -109,6 +109,9 @@ export class FooterDataProvider {
|
|
|
109
109
|
this.refreshPending = false;
|
|
110
110
|
this.disposed = false;
|
|
111
111
|
this.gitWatchersStarted = false;
|
|
112
|
+
this.cwdGeneration = 0;
|
|
113
|
+
this.watcherGeneration = 0;
|
|
114
|
+
this.cwdBranches = new Map();
|
|
112
115
|
this.cwd = cwd;
|
|
113
116
|
}
|
|
114
117
|
/** Start post-frame git branch watching. Branch discovery remains lazy for first render. */
|
|
@@ -118,9 +121,28 @@ export class FooterDataProvider {
|
|
|
118
121
|
this.gitWatchersStarted = true;
|
|
119
122
|
this.ensureGitPaths();
|
|
120
123
|
this.setupGitWatcher();
|
|
124
|
+
for (const { provider } of this.cwdBranches.values()) {
|
|
125
|
+
if (provider !== this)
|
|
126
|
+
provider.startGitWatcher();
|
|
127
|
+
}
|
|
121
128
|
}
|
|
122
|
-
/** Current git branch
|
|
123
|
-
getGitBranch() {
|
|
129
|
+
/** Current git branch for the displayed session cwd, defaulting to this provider's cwd. */
|
|
130
|
+
getGitBranch(cwd = this.cwd) {
|
|
131
|
+
if (this.disposed)
|
|
132
|
+
return null;
|
|
133
|
+
if (cwd !== this.cwd) {
|
|
134
|
+
const leased = this.cwdBranches.get(cwd);
|
|
135
|
+
if (leased)
|
|
136
|
+
return leased.provider.getGitBranch();
|
|
137
|
+
// A read without a viewer must not retain watchers or cached child providers.
|
|
138
|
+
const provider = new FooterDataProvider(cwd);
|
|
139
|
+
try {
|
|
140
|
+
return provider.getGitBranch();
|
|
141
|
+
}
|
|
142
|
+
finally {
|
|
143
|
+
provider.dispose();
|
|
144
|
+
}
|
|
145
|
+
}
|
|
124
146
|
if (this.cachedBranch === undefined) {
|
|
125
147
|
this.ensureGitPaths();
|
|
126
148
|
this.cachedBranch = this.resolveGitBranchSync();
|
|
@@ -131,10 +153,41 @@ export class FooterDataProvider {
|
|
|
131
153
|
getExtensionStatuses() {
|
|
132
154
|
return this.extensionStatuses;
|
|
133
155
|
}
|
|
134
|
-
/** Subscribe to
|
|
135
|
-
onBranchChange(callback) {
|
|
136
|
-
this.
|
|
137
|
-
|
|
156
|
+
/** Subscribe to branch changes. An explicit cwd retains its watcher until unsubscribe. */
|
|
157
|
+
onBranchChange(callback, cwd) {
|
|
158
|
+
if (this.disposed)
|
|
159
|
+
return () => { };
|
|
160
|
+
if (cwd === undefined) {
|
|
161
|
+
this.branchChangeCallbacks.add(callback);
|
|
162
|
+
return () => this.branchChangeCallbacks.delete(callback);
|
|
163
|
+
}
|
|
164
|
+
let entry = this.cwdBranches.get(cwd);
|
|
165
|
+
if (!entry) {
|
|
166
|
+
entry = { provider: cwd === this.cwd ? this : this.createCwdProvider(cwd), references: 0 };
|
|
167
|
+
this.cwdBranches.set(cwd, entry);
|
|
168
|
+
}
|
|
169
|
+
entry.references++;
|
|
170
|
+
const listener = () => callback();
|
|
171
|
+
this.branchChangeCallbacks.add(listener);
|
|
172
|
+
let released = false;
|
|
173
|
+
return () => {
|
|
174
|
+
if (released)
|
|
175
|
+
return;
|
|
176
|
+
released = true;
|
|
177
|
+
this.branchChangeCallbacks.delete(listener);
|
|
178
|
+
if (--entry.references === 0 && this.cwdBranches.get(cwd) === entry) {
|
|
179
|
+
this.cwdBranches.delete(cwd);
|
|
180
|
+
if (entry.provider !== this)
|
|
181
|
+
entry.provider.dispose();
|
|
182
|
+
}
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
createCwdProvider(cwd) {
|
|
186
|
+
const provider = new FooterDataProvider(cwd);
|
|
187
|
+
provider.onBranchChange(() => this.notifyBranchChange());
|
|
188
|
+
if (this.gitWatchersStarted)
|
|
189
|
+
provider.startGitWatcher();
|
|
190
|
+
return provider;
|
|
138
191
|
}
|
|
139
192
|
/** Internal: set extension status */
|
|
140
193
|
setExtensionStatus(key, text) {
|
|
@@ -158,11 +211,20 @@ export class FooterDataProvider {
|
|
|
158
211
|
this.availableProviderCount = count;
|
|
159
212
|
}
|
|
160
213
|
setCwd(cwd) {
|
|
161
|
-
if (this.cwd === cwd) {
|
|
214
|
+
if (this.disposed || this.cwd === cwd) {
|
|
162
215
|
return;
|
|
163
216
|
}
|
|
164
217
|
const restartGitWatcher = this.gitWatchersStarted;
|
|
218
|
+
const previous = this.cwdBranches.get(this.cwd);
|
|
219
|
+
if (previous)
|
|
220
|
+
previous.provider = this.createCwdProvider(this.cwd);
|
|
221
|
+
const next = this.cwdBranches.get(cwd);
|
|
222
|
+
if (next) {
|
|
223
|
+
next.provider.dispose();
|
|
224
|
+
next.provider = this;
|
|
225
|
+
}
|
|
165
226
|
this.cwd = cwd;
|
|
227
|
+
this.cwdGeneration++;
|
|
166
228
|
if (this.refreshTimer) {
|
|
167
229
|
clearTimeout(this.refreshTimer);
|
|
168
230
|
this.refreshTimer = null;
|
|
@@ -186,6 +248,11 @@ export class FooterDataProvider {
|
|
|
186
248
|
this.clearGitWatchers();
|
|
187
249
|
this.gitWatchersStarted = false;
|
|
188
250
|
this.branchChangeCallbacks.clear();
|
|
251
|
+
for (const { provider } of this.cwdBranches.values()) {
|
|
252
|
+
if (provider !== this)
|
|
253
|
+
provider.dispose();
|
|
254
|
+
}
|
|
255
|
+
this.cwdBranches.clear();
|
|
189
256
|
}
|
|
190
257
|
ensureGitPaths() {
|
|
191
258
|
if (this.gitPaths !== undefined)
|
|
@@ -216,9 +283,10 @@ export class FooterDataProvider {
|
|
|
216
283
|
return;
|
|
217
284
|
}
|
|
218
285
|
this.refreshInFlight = true;
|
|
286
|
+
const generation = this.cwdGeneration;
|
|
219
287
|
try {
|
|
220
288
|
const nextBranch = await this.resolveGitBranchAsync();
|
|
221
|
-
if (this.disposed)
|
|
289
|
+
if (this.disposed || generation !== this.cwdGeneration)
|
|
222
290
|
return;
|
|
223
291
|
if (this.cachedBranch !== undefined && this.cachedBranch !== nextBranch) {
|
|
224
292
|
this.cachedBranch = nextBranch;
|
|
@@ -268,6 +336,7 @@ export class FooterDataProvider {
|
|
|
268
336
|
}
|
|
269
337
|
}
|
|
270
338
|
clearGitWatchers() {
|
|
339
|
+
this.watcherGeneration++;
|
|
271
340
|
closeWatcher(this.headWatcher);
|
|
272
341
|
this.headWatcher = null;
|
|
273
342
|
if (this.headWatchFilePath && this.headWatchFileListener) {
|
|
@@ -291,7 +360,7 @@ export class FooterDataProvider {
|
|
|
291
360
|
}
|
|
292
361
|
}
|
|
293
362
|
installHeadPollingFallback() {
|
|
294
|
-
if (!this.gitPaths || this.headWatchFilePath || this.headWatchFileListener) {
|
|
363
|
+
if (this.disposed || !this.gitPaths || this.headWatchFilePath || this.headWatchFileListener) {
|
|
295
364
|
return;
|
|
296
365
|
}
|
|
297
366
|
this.headWatchFilePath = this.gitPaths.headPath;
|
|
@@ -305,7 +374,7 @@ export class FooterDataProvider {
|
|
|
305
374
|
watchFile(this.headWatchFilePath, { interval: 1000 }, this.headWatchFileListener);
|
|
306
375
|
}
|
|
307
376
|
installReftableTablesListPolling(tablesListPath) {
|
|
308
|
-
if (this.reftableTablesListWatchFileListener) {
|
|
377
|
+
if (this.disposed || this.reftableTablesListWatchFileListener) {
|
|
309
378
|
return;
|
|
310
379
|
}
|
|
311
380
|
this.reftableTablesListWatchFileListener = (current, previous) => {
|
|
@@ -360,7 +429,11 @@ export class FooterDataProvider {
|
|
|
360
429
|
this.scheduleRefresh();
|
|
361
430
|
}
|
|
362
431
|
setupGitWatcher() {
|
|
432
|
+
if (this.disposed || !this.gitWatchersStarted)
|
|
433
|
+
return;
|
|
363
434
|
this.clearGitWatchers();
|
|
435
|
+
const generation = this.watcherGeneration;
|
|
436
|
+
const isCurrent = () => !this.disposed && generation === this.watcherGeneration;
|
|
364
437
|
this.ensureGitPaths();
|
|
365
438
|
if (!this.gitPaths)
|
|
366
439
|
return;
|
|
@@ -369,10 +442,14 @@ export class FooterDataProvider {
|
|
|
369
442
|
// Git uses atomic writes (write temp, rename over HEAD), which changes the inode.
|
|
370
443
|
// fs.watch on a file stops working after the inode changes.
|
|
371
444
|
this.headWatcher = watchWithErrorHandler(dirname(this.gitPaths.headPath), (_eventType, filename) => {
|
|
445
|
+
if (!isCurrent())
|
|
446
|
+
return;
|
|
372
447
|
if (!filename || filename === "HEAD") {
|
|
373
448
|
this.scheduleRefresh();
|
|
374
449
|
}
|
|
375
450
|
}, (error) => {
|
|
451
|
+
if (!isCurrent())
|
|
452
|
+
return;
|
|
376
453
|
if (isSafeFsWatchPathError(error)) {
|
|
377
454
|
this.installHeadPollingFallback();
|
|
378
455
|
return;
|
|
@@ -392,8 +469,12 @@ export class FooterDataProvider {
|
|
|
392
469
|
this.reftableTablesListPath = join(reftableDir, "tables.list");
|
|
393
470
|
this.reftableTablesListFingerprint = this.readReftableTablesListFingerprint();
|
|
394
471
|
this.reftableWatcher = watchWithErrorHandler(reftableDir, (_eventType, filename) => {
|
|
472
|
+
if (!isCurrent())
|
|
473
|
+
return;
|
|
395
474
|
this.handleReftableDirectoryEvent(filename);
|
|
396
475
|
}, (error) => {
|
|
476
|
+
if (!isCurrent())
|
|
477
|
+
return;
|
|
397
478
|
if (isSafeFsWatchPathError(error)) {
|
|
398
479
|
return;
|
|
399
480
|
}
|
|
@@ -402,15 +483,20 @@ export class FooterDataProvider {
|
|
|
402
483
|
const tablesListPath = this.reftableTablesListPath;
|
|
403
484
|
if (tablesListPath && existsSync(tablesListPath)) {
|
|
404
485
|
this.reftableTablesListWatcher = watchWithErrorHandler(tablesListPath, () => {
|
|
486
|
+
if (!isCurrent())
|
|
487
|
+
return;
|
|
405
488
|
this.scheduleReftableRefresh();
|
|
406
489
|
}, (error) => {
|
|
490
|
+
if (!isCurrent())
|
|
491
|
+
return;
|
|
407
492
|
if (isSafeFsWatchPathError(error)) {
|
|
408
493
|
this.installReftableTablesListPolling(tablesListPath);
|
|
409
494
|
return;
|
|
410
495
|
}
|
|
411
496
|
this.handleGitWatcherError();
|
|
412
497
|
});
|
|
413
|
-
|
|
498
|
+
if (isCurrent())
|
|
499
|
+
this.installReftableTablesListPolling(tablesListPath);
|
|
414
500
|
}
|
|
415
501
|
}
|
|
416
502
|
}
|