@gajae-code/coding-agent 0.10.1 → 0.11.0
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 +70 -2
- package/dist/types/append-only-mode.d.ts +1 -1
- package/dist/types/cli/args.d.ts +4 -5
- package/dist/types/cli/daemon-cli.d.ts +12 -1
- package/dist/types/cli/notify-cli.d.ts +21 -1
- package/dist/types/cli.d.ts +3 -0
- package/dist/types/commands/daemon.d.ts +39 -0
- package/dist/types/commands/launch.d.ts +3 -0
- package/dist/types/commands/notify.d.ts +28 -1
- package/dist/types/commands/sdk.d.ts +33 -0
- package/dist/types/config/atomic-yaml-patch.d.ts +85 -0
- package/dist/types/config/model-profile-activation.d.ts +35 -15
- package/dist/types/config/model-profiles.d.ts +11 -5
- package/dist/types/config/model-registry.d.ts +3 -3
- package/dist/types/config/model-resolver.d.ts +39 -6
- package/dist/types/config/model-selector-value.d.ts +17 -0
- package/dist/types/config/models-config-schema.d.ts +10 -6
- package/dist/types/config/settings-schema.d.ts +133 -6
- package/dist/types/config/settings.d.ts +63 -35
- package/dist/types/coordinator-mcp/model-preset.d.ts +7 -6
- package/dist/types/coordinator-mcp/server.d.ts +6 -49
- package/dist/types/daemon/builtin.d.ts +6 -5
- package/dist/types/daemon/control-types.d.ts +1 -1
- package/dist/types/discovery/mcp-json.d.ts +12 -1
- package/dist/types/extensibility/custom-tools/types.d.ts +1 -1
- package/dist/types/extensibility/extensions/compact-handler.d.ts +4 -2
- package/dist/types/extensibility/extensions/get-commands-handler.d.ts +2 -2
- package/dist/types/extensibility/extensions/loader.d.ts +10 -1
- package/dist/types/extensibility/extensions/runner.d.ts +3 -3
- package/dist/types/extensibility/extensions/types.d.ts +141 -16
- package/dist/types/extensibility/hooks/types.d.ts +1 -1
- package/dist/types/gjc-runtime/launch-tmux.d.ts +3 -2
- package/dist/types/gjc-runtime/psmux-detect.d.ts +3 -0
- package/dist/types/gjc-runtime/session-state-sidecar.d.ts +3 -0
- package/dist/types/gjc-runtime/team-runtime.d.ts +3 -4
- package/dist/types/gjc-runtime/tmux-owner-isolation-cli.d.ts +13 -0
- package/dist/types/gjc-runtime/tmux-sessions.d.ts +4 -1
- package/dist/types/gjc-runtime/windows-powershell-command.d.ts +9 -0
- package/dist/types/harness-control-plane/operate.d.ts +5 -5
- package/dist/types/harness-control-plane/owner.d.ts +18 -4
- package/dist/types/harness-control-plane/receipts.d.ts +0 -1
- package/dist/types/harness-control-plane/sdk-transport.d.ts +43 -0
- package/dist/types/harness-control-plane/session-transport.d.ts +48 -0
- package/dist/types/harness-control-plane/types.d.ts +3 -4
- package/dist/types/lsp/index.d.ts +1 -1
- package/dist/types/main.d.ts +32 -38
- package/dist/types/modes/acp/acp-agent.d.ts +224 -53
- package/dist/types/modes/acp/acp-client-bridge.d.ts +1 -0
- package/dist/types/modes/acp/acp-mode.d.ts +6 -15
- package/dist/types/modes/acp/permission-mode.d.ts +4 -0
- package/dist/types/modes/acp/startup-options.d.ts +6 -0
- package/dist/types/modes/components/agent-dashboard.d.ts +3 -0
- package/dist/types/modes/components/gajae-pet-widget.d.ts +1 -0
- package/dist/types/modes/components/model-selector.d.ts +1 -0
- package/dist/types/modes/components/notifications-settings-editor.d.ts +135 -0
- package/dist/types/modes/components/pet-capability.d.ts +37 -0
- package/dist/types/modes/components/pet-selector.d.ts +1 -1
- package/dist/types/modes/components/settings-selector.d.ts +15 -4
- package/dist/types/modes/components/welcome.d.ts +1 -1
- package/dist/types/modes/controllers/selector-controller.d.ts +35 -1
- package/dist/types/modes/index.d.ts +0 -4
- package/dist/types/modes/interactive-mode.d.ts +5 -1
- package/dist/types/modes/runtime-init.d.ts +2 -2
- package/dist/types/modes/shared/agent-wire/approval-gate.d.ts +6 -9
- package/dist/types/modes/shared/agent-wire/deep-interview-gate.d.ts +4 -6
- package/dist/types/modes/shared/agent-wire/event-contract.d.ts +6 -6
- package/dist/types/modes/shared/agent-wire/event-envelope.d.ts +4 -9
- package/dist/types/modes/shared/agent-wire/event-observation.d.ts +1 -1
- package/dist/types/modes/shared/agent-wire/workflow-gate-broker.d.ts +169 -30
- package/dist/types/modes/shared/agent-wire/workflow-gate-schema.d.ts +7 -7
- package/dist/types/modes/shared/agent-wire/workflow-gate-types.d.ts +105 -0
- package/dist/types/modes/types.d.ts +16 -1
- package/dist/types/runtime-mcp/client.d.ts +2 -0
- package/dist/types/runtime-mcp/config.d.ts +5 -1
- package/dist/types/runtime-mcp/manager.d.ts +8 -1
- package/dist/types/runtime-mcp/types.d.ts +4 -0
- package/dist/types/sdk/acp/adapter.d.ts +67 -0
- package/dist/types/sdk/acp/index.d.ts +2 -0
- package/dist/types/sdk/broker/broker.d.ts +53 -0
- package/dist/types/sdk/broker/discovery.d.ts +30 -0
- package/dist/types/sdk/broker/ensure.d.ts +33 -0
- package/dist/types/sdk/broker/identity.d.ts +3 -0
- package/dist/types/sdk/broker/index.d.ts +8 -0
- package/dist/types/sdk/broker/lifecycle-ledger.d.ts +95 -0
- package/dist/types/sdk/broker/lifecycle.d.ts +85 -0
- package/dist/types/sdk/broker/process-incarnation.d.ts +14 -0
- package/dist/types/sdk/broker/runtime.d.ts +33 -0
- package/dist/types/sdk/broker/session-index.d.ts +57 -0
- package/dist/types/sdk/broker/state-version.d.ts +8 -0
- package/dist/types/sdk/broker/transport.d.ts +9 -0
- package/dist/types/sdk/bus/chat-command-policy.d.ts +49 -0
- package/dist/types/sdk/bus/chat-daemon-cli.d.ts +21 -0
- package/dist/types/sdk/bus/chat-daemon-control.d.ts +111 -0
- package/dist/types/sdk/bus/chat-daemon-runtime.d.ts +77 -0
- package/dist/types/sdk/bus/chat-effect-journal.d.ts +84 -0
- package/dist/types/{notifications → sdk/bus}/config-commands.d.ts +7 -2
- package/dist/types/sdk/bus/config.d.ts +274 -0
- package/dist/types/sdk/bus/conversation-store.d.ts +72 -0
- package/dist/types/sdk/bus/discord-conversation.d.ts +58 -0
- package/dist/types/sdk/bus/discord-daemon.d.ts +45 -0
- package/dist/types/sdk/bus/discord-live-provider.d.ts +70 -0
- package/dist/types/sdk/bus/discord-provider.d.ts +85 -0
- package/dist/types/{notifications → sdk/bus}/html-format.d.ts +2 -2
- package/dist/types/{notifications → sdk/bus}/index.d.ts +113 -13
- package/dist/types/{notifications → sdk/bus}/lifecycle-control-runtime.d.ts +4 -2
- package/dist/types/{notifications → sdk/bus}/lifecycle-orchestrator.d.ts +18 -21
- package/dist/types/{notifications → sdk/bus}/managed-daemon.d.ts +1 -1
- package/dist/types/sdk/bus/native-runtime-compatibility.d.ts +13 -0
- package/dist/types/sdk/bus/notification-orchestration.d.ts +170 -0
- package/dist/types/{notifications → sdk/bus}/notification-service.d.ts +7 -1
- package/dist/types/sdk/bus/session-control.d.ts +83 -0
- package/dist/types/sdk/bus/slack-conversation.d.ts +56 -0
- package/dist/types/sdk/bus/slack-daemon.d.ts +60 -0
- package/dist/types/sdk/bus/slack-live-provider.d.ts +59 -0
- package/dist/types/sdk/bus/slack-provider.d.ts +55 -0
- package/dist/types/{notifications → sdk/bus}/telegram-cli.d.ts +4 -4
- package/dist/types/{notifications → sdk/bus}/telegram-daemon-cli.d.ts +14 -5
- package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +12 -0
- package/dist/types/{notifications → sdk/bus}/telegram-daemon-control.d.ts +2 -2
- package/dist/types/{notifications → sdk/bus}/telegram-daemon.d.ts +55 -17
- package/dist/types/{notifications → sdk/bus}/telegram-reference.d.ts +2 -2
- package/dist/types/sdk/bus/telegram-setup.d.ts +128 -0
- package/dist/types/{notifications → sdk/bus}/topic-registry.d.ts +11 -0
- package/dist/types/sdk/cli/index.d.ts +1 -0
- package/dist/types/sdk/cli/session-cli.d.ts +19 -0
- package/dist/types/sdk/client/client.d.ts +1 -0
- package/dist/types/sdk/client/discovery.d.ts +27 -0
- package/dist/types/sdk/client/index.d.ts +2 -0
- package/dist/types/sdk/host/control/dispatch.d.ts +34 -0
- package/dist/types/sdk/host/control/index.d.ts +2 -0
- package/dist/types/sdk/host/control/operations.d.ts +65 -0
- package/dist/types/sdk/host/events.d.ts +35 -0
- package/dist/types/sdk/host/host.d.ts +35 -0
- package/dist/types/sdk/host/index.d.ts +4 -0
- package/dist/types/sdk/host/query/cursor.d.ts +62 -0
- package/dist/types/sdk/host/query/handlers.d.ts +70 -0
- package/dist/types/sdk/host/query/index.d.ts +3 -0
- package/dist/types/sdk/host/query/revision-store.d.ts +60 -0
- package/dist/types/sdk/host/reverse-leases.d.ts +45 -0
- package/dist/types/sdk/host/types.d.ts +32 -0
- package/dist/types/sdk/index.d.ts +6 -0
- package/dist/types/sdk/lifecycle-session.d.ts +14 -0
- package/dist/types/sdk/mcp/index.d.ts +1 -0
- package/dist/types/sdk/mcp/server.d.ts +37 -0
- package/dist/types/sdk/models.d.ts +44 -0
- package/dist/types/sdk/protocol/adapter-validation.d.ts +14 -0
- package/dist/types/sdk/protocol/operation-registry.d.ts +24 -0
- package/dist/types/{sdk.d.ts → sdk/session.d.ts} +44 -38
- package/dist/types/sdk/startup-capability.d.ts +50 -0
- package/dist/types/session/agent-session.d.ts +114 -21
- package/dist/types/session/default-model-selection.d.ts +25 -0
- package/dist/types/session/fallback-chain-controller.d.ts +52 -0
- package/dist/types/session/session-manager.d.ts +58 -1
- package/dist/types/setup/credential-auto-import.d.ts +36 -6
- package/dist/types/tools/ask-answer-registry.d.ts +1 -1
- package/dist/types/tools/browser/benchmark/detector-report.d.ts +63 -0
- package/dist/types/tools/browser/benchmark/run-suite.d.ts +18 -0
- package/dist/types/tools/browser/launch.d.ts +22 -0
- package/dist/types/tools/browser/profile-discovery.d.ts +31 -0
- package/dist/types/tools/browser/profile-posture.d.ts +37 -0
- package/dist/types/tools/browser/profile-reuse.d.ts +39 -0
- package/dist/types/tools/browser/profile-warmup.d.ts +39 -0
- package/dist/types/tools/browser/registry.d.ts +19 -0
- package/dist/types/tools/browser/tab-protocol.d.ts +4 -0
- package/dist/types/tools/index.d.ts +8 -8
- package/package.json +34 -13
- package/scripts/build-sdk-package-smoke.ts +94 -0
- package/scripts/capture-notifications-settings-showcase.ts +435 -0
- package/scripts/compile-args.ts +4 -2
- package/scripts/g005-daemon-smoke.ts +4 -5
- package/scripts/g011-daemon-path-smoke.ts +5 -5
- package/scripts/generate-sdk-adapter-parity-manifest.ts +163 -0
- package/scripts/generate-sdk-operation-inventory.ts +867 -0
- package/scripts/generate-telegram-baseline-manifest.ts +128 -0
- package/scripts/manifest-schema.ts +124 -0
- package/scripts/run-test-manifest.ts +153 -0
- package/scripts/run-threat-model-check.ts +157 -0
- package/scripts/verify-gjc-sdk-canonicalization.ts +3467 -0
- package/scripts/verify-gjc-sdk-rename.ts +90 -0
- package/src/append-only-mode.ts +1 -1
- package/src/cli/args.ts +43 -12
- package/src/cli/auth-gateway-cli.ts +2 -2
- package/src/cli/config-cli.ts +2 -1
- package/src/cli/daemon-cli.ts +63 -14
- package/src/cli/list-models.ts +1 -1
- package/src/cli/notify-cli.ts +288 -286
- package/src/cli.ts +21 -2
- package/src/commands/daemon.ts +50 -6
- package/src/commands/harness.ts +93 -36
- package/src/commands/launch.ts +5 -2
- package/src/commands/mcp-serve.ts +19 -12
- package/src/commands/notify.ts +36 -3
- package/src/commands/sdk.ts +426 -0
- package/src/commit/agentic/agent.ts +1 -0
- package/src/config/atomic-yaml-patch.ts +423 -0
- package/src/config/model-profile-activation.ts +240 -89
- package/src/config/model-profiles.ts +37 -34
- package/src/config/model-registry.ts +51 -26
- package/src/config/model-resolver.ts +138 -51
- package/src/config/model-selector-value.ts +50 -0
- package/src/config/models-config-schema.ts +14 -21
- package/src/config/settings-schema.ts +128 -10
- package/src/config/settings.ts +1120 -158
- package/src/coordinator-mcp/model-preset.ts +74 -20
- package/src/coordinator-mcp/server.ts +1597 -3052
- package/src/daemon/builtin.ts +8 -5
- package/src/daemon/control-types.ts +1 -1
- package/src/defaults/gjc/skills/team/SKILL.md +4 -4
- package/src/discovery/mcp-json.ts +327 -20
- package/src/extensibility/custom-tools/types.ts +1 -1
- package/src/extensibility/extensions/compact-handler.ts +3 -3
- package/src/extensibility/extensions/get-commands-handler.ts +2 -2
- package/src/extensibility/extensions/loader.ts +69 -5
- package/src/extensibility/extensions/runner.ts +112 -4
- package/src/extensibility/extensions/types.ts +176 -17
- package/src/extensibility/hooks/types.ts +1 -1
- package/src/extensibility/slash-commands.ts +3 -3
- package/src/gjc-runtime/launch-tmux.ts +170 -86
- package/src/gjc-runtime/psmux-detect.ts +82 -4
- package/src/gjc-runtime/session-state-sidecar.ts +41 -31
- package/src/gjc-runtime/team-runtime.ts +54 -35
- package/src/gjc-runtime/tmux-owner-isolation-cli.ts +53 -17
- package/src/gjc-runtime/tmux-owner-isolation.ts +5 -2
- package/src/gjc-runtime/tmux-sessions.ts +19 -13
- package/src/gjc-runtime/ultragoal-guard.ts +53 -6
- package/src/gjc-runtime/ultragoal-runtime.ts +155 -3
- package/src/gjc-runtime/windows-powershell-command.ts +58 -0
- package/src/harness-control-plane/operate.ts +9 -9
- package/src/harness-control-plane/owner.ts +283 -39
- package/src/harness-control-plane/receipts.ts +0 -1
- package/src/harness-control-plane/sdk-transport.ts +395 -0
- package/src/harness-control-plane/session-transport.ts +94 -0
- package/src/harness-control-plane/types.ts +1 -1
- package/src/internal-urls/docs-index.generated.ts +36 -37
- package/src/lsp/client.ts +42 -6
- package/src/lsp/index.ts +2 -2
- package/src/main.ts +299 -204
- package/src/modes/DESIGN.md +258 -0
- package/src/modes/acp/acp-agent.ts +1228 -2612
- package/src/modes/acp/acp-client-bridge.ts +2 -20
- package/src/modes/acp/acp-event-mapper.ts +18 -2
- package/src/modes/acp/acp-mode.ts +8 -36
- package/src/modes/acp/permission-mode.ts +25 -0
- package/src/modes/acp/startup-options.ts +6 -0
- package/src/modes/components/agent-dashboard.ts +37 -17
- package/src/modes/components/custom-editor.ts +1 -0
- package/src/modes/components/gajae-pet-widget.ts +169 -20
- package/src/modes/components/model-selector.ts +93 -35
- package/src/modes/components/notifications-settings-editor.ts +1379 -0
- package/src/modes/components/pet-capability.ts +115 -0
- package/src/modes/components/pet-selector.ts +4 -6
- package/src/modes/components/settings-selector.ts +86 -11
- package/src/modes/components/welcome.ts +4 -4
- package/src/modes/controllers/command-controller.ts +1 -2
- package/src/modes/controllers/event-controller.ts +11 -16
- package/src/modes/controllers/extension-ui-controller.ts +357 -12
- package/src/modes/controllers/input-controller.ts +43 -13
- package/src/modes/controllers/selector-controller.ts +671 -44
- package/src/modes/index.ts +0 -22
- package/src/modes/interactive-mode.ts +108 -24
- package/src/modes/runtime-init.ts +298 -6
- package/src/modes/shared/agent-wire/approval-gate.ts +9 -11
- package/src/modes/shared/agent-wire/deep-interview-gate.ts +10 -11
- package/src/modes/shared/agent-wire/event-contract.ts +7 -8
- package/src/modes/shared/agent-wire/event-envelope.ts +9 -17
- package/src/modes/shared/agent-wire/event-observation.ts +16 -7
- package/src/modes/shared/agent-wire/workflow-gate-broker.ts +1254 -87
- package/src/modes/shared/agent-wire/workflow-gate-schema.ts +15 -15
- package/src/modes/shared/agent-wire/workflow-gate-types.ts +113 -0
- package/src/modes/types.ts +16 -1
- package/src/runtime-mcp/client.ts +94 -19
- package/src/runtime-mcp/config.ts +27 -15
- package/src/runtime-mcp/manager.ts +343 -105
- package/src/runtime-mcp/oauth-flow.ts +42 -12
- package/src/runtime-mcp/transports/http.ts +49 -19
- package/src/runtime-mcp/transports/stdio.ts +47 -28
- package/src/runtime-mcp/types.ts +10 -0
- package/src/sdk/acp/adapter.ts +418 -0
- package/src/sdk/acp/index.ts +2 -0
- package/src/sdk/broker/broker.ts +642 -0
- package/src/sdk/broker/discovery.ts +94 -0
- package/src/sdk/broker/ensure.ts +249 -0
- package/src/sdk/broker/identity.ts +42 -0
- package/src/sdk/broker/index.ts +8 -0
- package/src/sdk/broker/internal-source-marker-2178.txt +1 -0
- package/src/sdk/broker/internal-source.bunfig.toml +1 -0
- package/src/sdk/broker/lifecycle-ledger.ts +286 -0
- package/src/sdk/broker/lifecycle.ts +2157 -0
- package/src/sdk/broker/process-incarnation.ts +159 -0
- package/src/sdk/broker/runtime.ts +164 -0
- package/src/sdk/broker/session-index.ts +318 -0
- package/src/sdk/broker/state-version.ts +23 -0
- package/src/sdk/broker/transport.ts +125 -0
- package/src/sdk/bus/chat-command-policy.ts +107 -0
- package/src/sdk/bus/chat-daemon-cli.ts +214 -0
- package/src/sdk/bus/chat-daemon-control.ts +713 -0
- package/src/sdk/bus/chat-daemon-runtime.ts +526 -0
- package/src/sdk/bus/chat-effect-journal.ts +353 -0
- package/src/{notifications → sdk/bus}/config-commands.ts +39 -10
- package/src/sdk/bus/config.ts +433 -0
- package/src/sdk/bus/conversation-store.ts +391 -0
- package/src/sdk/bus/discord-conversation.ts +85 -0
- package/src/sdk/bus/discord-daemon.ts +2275 -0
- package/src/sdk/bus/discord-live-provider.ts +521 -0
- package/src/sdk/bus/discord-provider.ts +56 -0
- package/src/{notifications → sdk/bus}/html-format.ts +2 -2
- package/src/sdk/bus/index.ts +3943 -0
- package/src/{notifications → sdk/bus}/lifecycle-commands.ts +2 -0
- package/src/{notifications → sdk/bus}/lifecycle-control-runtime.ts +225 -196
- package/src/{notifications → sdk/bus}/lifecycle-orchestrator.ts +161 -74
- package/src/{notifications → sdk/bus}/managed-daemon.ts +2 -2
- package/src/sdk/bus/native-runtime-compatibility.ts +42 -0
- package/src/sdk/bus/natives-augment.d.ts +38 -0
- package/src/sdk/bus/notification-orchestration.ts +535 -0
- package/src/{notifications → sdk/bus}/notification-service.ts +106 -12
- package/src/sdk/bus/session-control.ts +333 -0
- package/src/sdk/bus/slack-conversation.ts +74 -0
- package/src/sdk/bus/slack-daemon.ts +2144 -0
- package/src/sdk/bus/slack-live-provider.ts +380 -0
- package/src/sdk/bus/slack-provider.ts +76 -0
- package/src/{notifications → sdk/bus}/telegram-cli.ts +8 -8
- package/src/sdk/bus/telegram-daemon-cli.ts +330 -0
- package/src/sdk/bus/telegram-daemon-contract.ts +14 -0
- package/src/{notifications → sdk/bus}/telegram-daemon-control.ts +4 -4
- package/src/{notifications → sdk/bus}/telegram-daemon.ts +502 -54
- package/src/{notifications → sdk/bus}/telegram-reference.ts +2 -2
- package/src/sdk/bus/telegram-setup.ts +663 -0
- package/src/{notifications → sdk/bus}/topic-registry.ts +32 -0
- package/src/sdk/cli/index.ts +1 -0
- package/src/sdk/cli/session-cli.ts +275 -0
- package/src/sdk/client/client.ts +1 -0
- package/src/sdk/client/discovery.ts +108 -0
- package/src/sdk/client/index.ts +2 -0
- package/src/sdk/host/control/dispatch.ts +367 -0
- package/src/sdk/host/control/index.ts +10 -0
- package/src/sdk/host/control/operations.ts +63 -0
- package/src/sdk/host/events.ts +91 -0
- package/src/sdk/host/host.ts +296 -0
- package/src/sdk/host/index.ts +4 -0
- package/src/sdk/host/query/cursor.ts +189 -0
- package/src/sdk/host/query/handlers.ts +533 -0
- package/src/sdk/host/query/index.ts +3 -0
- package/src/sdk/host/query/revision-store.ts +1126 -0
- package/src/sdk/host/reverse-leases.ts +325 -0
- package/src/sdk/host/types.ts +29 -0
- package/src/sdk/index.ts +13 -0
- package/src/sdk/lifecycle-session.ts +39 -0
- package/src/sdk/mcp/index.ts +1 -0
- package/src/sdk/mcp/server.ts +332 -0
- package/src/sdk/models.ts +168 -0
- package/src/sdk/protocol/adapter-validation.ts +48 -0
- package/src/sdk/protocol/operation-inventory.generated.json +5654 -0
- package/src/sdk/protocol/operation-registry.ts +312 -0
- package/src/{sdk.ts → sdk/session.ts} +339 -212
- package/src/sdk/startup-capability.ts +189 -0
- package/src/session/agent-session.ts +2470 -866
- package/src/session/default-model-selection.ts +93 -0
- package/src/session/fallback-chain-controller.ts +136 -0
- package/src/session/session-manager.ts +447 -13
- package/src/session/session-storage.ts +8 -1
- package/src/setup/credential-auto-import.ts +290 -35
- package/src/setup/hermes/templates/operator-instructions.v1.md +3 -5
- package/src/slash-commands/builtin-registry.ts +33 -30
- package/src/task/executor.ts +62 -13
- package/src/tools/ask-answer-registry.ts +1 -1
- package/src/tools/ask.ts +13 -8
- package/src/tools/browser/STEALTH-THIRD-PARTY-NOTICES.md +26 -0
- package/src/tools/browser/benchmark/detector-report.ts +157 -0
- package/src/tools/browser/benchmark/run-suite.ts +39 -0
- package/src/tools/browser/launch.ts +124 -19
- package/src/tools/browser/profile-discovery.ts +63 -0
- package/src/tools/browser/profile-posture.ts +59 -0
- package/src/tools/browser/profile-reuse.ts +102 -0
- package/src/tools/browser/profile-warmup.ts +109 -0
- package/src/tools/browser/registry.ts +87 -11
- package/src/tools/browser/tab-protocol.ts +1 -0
- package/src/tools/browser/tab-supervisor.ts +1 -0
- package/src/tools/browser/tab-worker.ts +1 -1
- package/src/tools/browser.ts +6 -0
- package/src/tools/index.ts +8 -8
- package/src/tools/puppeteer/14_stealth_permissions.txt +57 -0
- package/src/tools/puppeteer/15_stealth_webrtc.txt +60 -0
- package/src/tools/telegram-send.ts +2 -2
- package/vendor/insane-search/MANIFEST.json +2 -1
- package/vendor/insane-search/engine/bias_check.py +4 -1
- package/vendor/insane-search/engine/phase0.py +26 -1
- package/dist/types/harness-control-plane/rpc-adapter.d.ts +0 -69
- package/dist/types/modes/bridge/auth.d.ts +0 -12
- package/dist/types/modes/bridge/bridge-client-bridge.d.ts +0 -9
- package/dist/types/modes/bridge/bridge-mode.d.ts +0 -47
- package/dist/types/modes/bridge/bridge-ui-context.d.ts +0 -88
- package/dist/types/modes/bridge/event-stream.d.ts +0 -8
- package/dist/types/modes/rpc/host-tools.d.ts +0 -1
- package/dist/types/modes/rpc/host-uris.d.ts +0 -1
- package/dist/types/modes/rpc/rpc-client.d.ts +0 -299
- package/dist/types/modes/rpc/rpc-mode.d.ts +0 -86
- package/dist/types/modes/rpc/rpc-socket-security.d.ts +0 -10
- package/dist/types/modes/rpc/rpc-types.d.ts +0 -810
- package/dist/types/modes/shared/agent-wire/command-contract.d.ts +0 -18
- package/dist/types/modes/shared/agent-wire/command-dispatch.d.ts +0 -37
- package/dist/types/modes/shared/agent-wire/command-validation.d.ts +0 -2
- package/dist/types/modes/shared/agent-wire/handshake.d.ts +0 -56
- package/dist/types/modes/shared/agent-wire/host-tool-bridge.d.ts +0 -16
- package/dist/types/modes/shared/agent-wire/host-uri-bridge.d.ts +0 -17
- package/dist/types/modes/shared/agent-wire/protocol.d.ts +0 -25
- package/dist/types/modes/shared/agent-wire/responses.d.ts +0 -4
- package/dist/types/modes/shared/agent-wire/scopes.d.ts +0 -18
- package/dist/types/modes/shared/agent-wire/session-registry.d.ts +0 -25
- package/dist/types/modes/shared/agent-wire/ui-request-broker.d.ts +0 -42
- package/dist/types/modes/shared/agent-wire/ui-result.d.ts +0 -27
- package/dist/types/modes/shared/agent-wire/unattended-action-policy.d.ts +0 -29
- package/dist/types/modes/shared/agent-wire/unattended-audit.d.ts +0 -68
- package/dist/types/modes/shared/agent-wire/unattended-run-controller.d.ts +0 -166
- package/dist/types/modes/shared/agent-wire/unattended-session.d.ts +0 -127
- package/dist/types/notifications/config.d.ts +0 -132
- package/src/harness-control-plane/rpc-adapter.ts +0 -290
- package/src/modes/bridge/auth.ts +0 -41
- package/src/modes/bridge/bridge-client-bridge.ts +0 -47
- package/src/modes/bridge/bridge-mode.ts +0 -675
- package/src/modes/bridge/bridge-ui-context.ts +0 -200
- package/src/modes/bridge/event-stream.ts +0 -70
- package/src/modes/rpc/host-tools.ts +0 -1
- package/src/modes/rpc/host-uris.ts +0 -1
- package/src/modes/rpc/rpc-client.ts +0 -1166
- package/src/modes/rpc/rpc-mode.ts +0 -1029
- package/src/modes/rpc/rpc-socket-security.ts +0 -115
- package/src/modes/rpc/rpc-types.ts +0 -637
- package/src/modes/shared/agent-wire/command-contract.ts +0 -18
- package/src/modes/shared/agent-wire/command-dispatch.ts +0 -498
- package/src/modes/shared/agent-wire/command-validation.ts +0 -181
- package/src/modes/shared/agent-wire/handshake.ts +0 -157
- package/src/modes/shared/agent-wire/host-tool-bridge.ts +0 -197
- package/src/modes/shared/agent-wire/host-uri-bridge.ts +0 -236
- package/src/modes/shared/agent-wire/protocol.ts +0 -46
- package/src/modes/shared/agent-wire/responses.ts +0 -17
- package/src/modes/shared/agent-wire/scopes.ts +0 -94
- package/src/modes/shared/agent-wire/session-registry.ts +0 -109
- package/src/modes/shared/agent-wire/ui-request-broker.ts +0 -150
- package/src/modes/shared/agent-wire/ui-result.ts +0 -48
- package/src/modes/shared/agent-wire/unattended-action-policy.ts +0 -365
- package/src/modes/shared/agent-wire/unattended-audit.ts +0 -176
- package/src/modes/shared/agent-wire/unattended-run-controller.ts +0 -426
- package/src/modes/shared/agent-wire/unattended-session.ts +0 -528
- package/src/notifications/config.ts +0 -219
- package/src/notifications/index.ts +0 -1835
- package/src/notifications/telegram-daemon-cli.ts +0 -243
- package/src/tools/puppeteer/09_stealth_locale.txt +0 -46
- /package/dist/types/{notifications → sdk/bus}/attachment-registry.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/chat-adapters.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/daemon-paths.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/engine.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/helpers.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/lifecycle-commands.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/operator-runtime.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/rate-limit-pool.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/recent-activity.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/reply-sent-store.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/rich-draft.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/rich-render.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/threaded-inbound.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/threaded-render.d.ts +0 -0
- /package/src/{notifications → sdk/bus}/attachment-registry.ts +0 -0
- /package/src/{notifications → sdk/bus}/chat-adapters.ts +0 -0
- /package/src/{notifications → sdk/bus}/daemon-paths.ts +0 -0
- /package/src/{notifications → sdk/bus}/engine.ts +0 -0
- /package/src/{notifications → sdk/bus}/helpers.ts +0 -0
- /package/src/{notifications → sdk/bus}/operator-runtime.ts +0 -0
- /package/src/{notifications → sdk/bus}/rate-limit-pool.ts +0 -0
- /package/src/{notifications → sdk/bus}/recent-activity.ts +0 -0
- /package/src/{notifications → sdk/bus}/reply-sent-store.ts +0 -0
- /package/src/{notifications → sdk/bus}/rich-draft.ts +0 -0
- /package/src/{notifications → sdk/bus}/rich-render.ts +0 -0
- /package/src/{notifications → sdk/bus}/threaded-inbound.ts +0 -0
- /package/src/{notifications → sdk/bus}/threaded-render.ts +0 -0
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
import type { AskSelectedAckOutcome } from "../../../tools";
|
|
2
|
-
import type {
|
|
2
|
+
import type { WorkflowGate, WorkflowGateContext, WorkflowGateDiagnostic, WorkflowGateKind, WorkflowGateOption, WorkflowGateQueryRecord, WorkflowGateResolution, WorkflowGateResponse, WorkflowGateValidationError, WorkflowStage } from "./workflow-gate-types";
|
|
3
3
|
export type PersistedSemanticDisposition = "commit" | "resolve_without_commit";
|
|
4
4
|
export type PersistedResolutionOrigin = {
|
|
5
5
|
kind: "generic";
|
|
6
|
-
channel: "
|
|
6
|
+
channel: "sdk" | "other";
|
|
7
7
|
} | {
|
|
8
8
|
kind: "telegram_notification";
|
|
9
9
|
interactionActionId: string;
|
|
10
|
-
} | {
|
|
11
|
-
kind: "legacy_unknown";
|
|
12
10
|
};
|
|
13
11
|
export type PersistedAckPolicy = {
|
|
14
12
|
kind: "none";
|
|
@@ -27,51 +25,153 @@ export interface GateResolutionOptions {
|
|
|
27
25
|
ackPolicy?: PersistedAckPolicy;
|
|
28
26
|
beforeAdvance?: () => Promise<void>;
|
|
29
27
|
}
|
|
28
|
+
export type WorkflowGateTerminalProof = "retired" | "already_terminal" | "not_published";
|
|
29
|
+
export interface WorkflowGateTerminalController {
|
|
30
|
+
completeGateInteractions(gateId: string): WorkflowGateTerminalProof | Promise<WorkflowGateTerminalProof>;
|
|
31
|
+
cancelGateInteractions(gateId: string, reason: string): void | Promise<void>;
|
|
32
|
+
}
|
|
33
|
+
export interface NotificationGateResolutionOptions {
|
|
34
|
+
interactionActionId: string;
|
|
35
|
+
replyReceiptId: string;
|
|
36
|
+
answerJson: string;
|
|
37
|
+
idempotencyKey?: string;
|
|
38
|
+
requestSelectedAck(input: {
|
|
39
|
+
replyReceiptId: string;
|
|
40
|
+
actionId: string;
|
|
41
|
+
commitKey: string;
|
|
42
|
+
daemonDeadlineAt: number;
|
|
43
|
+
hostTimeoutMs: number;
|
|
44
|
+
}): Promise<AskSelectedAckOutcome>;
|
|
45
|
+
resolveClaim(): void;
|
|
46
|
+
closeClaimInvalid(reason: string): void;
|
|
47
|
+
}
|
|
48
|
+
export interface AskSelectedAckRecoveryParticipant {
|
|
49
|
+
requestRecoveredAskSelectedAck(input: {
|
|
50
|
+
sessionId: string;
|
|
51
|
+
actionId: string;
|
|
52
|
+
commitKey: string;
|
|
53
|
+
deadlineAt: number;
|
|
54
|
+
hostTimeoutMs: number;
|
|
55
|
+
}): Promise<AskSelectedAckOutcome>;
|
|
56
|
+
}
|
|
57
|
+
/** SDK-native surface for emitting a workflow gate and awaiting its answer. */
|
|
58
|
+
export interface WorkflowGateEmitter {
|
|
59
|
+
isUnattended(): boolean;
|
|
60
|
+
emitGate(input: OpenGateInput): Promise<unknown>;
|
|
61
|
+
onGateEmitted?(listener: (gate: WorkflowGate) => void): () => void;
|
|
62
|
+
resolveGate?(response: WorkflowGateResponse): Promise<WorkflowGateResolution>;
|
|
63
|
+
resolveGateFromNotification?(response: WorkflowGateResponse, options: NotificationGateResolutionOptions): Promise<WorkflowGateResolution>;
|
|
64
|
+
registerGateTerminalController?(controller: WorkflowGateTerminalController): () => void;
|
|
65
|
+
/** Records the exact terminalization proof established by direct control preparation. */
|
|
66
|
+
prepareTerminalization?(gateId: string, proof: WorkflowGateTerminalProof): boolean;
|
|
67
|
+
/** Discards a prepared proof when the gate remains pending after a rejected direct response. */
|
|
68
|
+
clearPreparedTerminalization?(gateId: string): void;
|
|
69
|
+
listPendingGates?(): WorkflowGate[];
|
|
70
|
+
listGateDiagnostics?(): WorkflowGateDiagnostic[];
|
|
71
|
+
listWorkflowGateQueryRecords?(): WorkflowGateQueryRecord[];
|
|
72
|
+
quarantineGate?(gateId: string): void;
|
|
73
|
+
setAckRecoveryParticipant?(participant: AskSelectedAckRecoveryParticipant | null): void;
|
|
74
|
+
/** Explicit host hook for same-process accepted-but-unadvanced recovery. */
|
|
75
|
+
recoverAcceptedGates?(): Promise<string[]>;
|
|
76
|
+
/** Permanently revoke all in-process continuation authority and reject their waiters. */
|
|
77
|
+
fence?(): void;
|
|
78
|
+
/** Temporarily make this emitter unavailable while a session transition is reversible. */
|
|
79
|
+
suspend?(): void;
|
|
80
|
+
resume?(): void;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* SDK-native workflow-gate emitter backed by a durable broker/store pair.
|
|
84
|
+
*
|
|
85
|
+
* Answers are resolved by the broker, so validation and idempotency have one
|
|
86
|
+
* authority. Listeners replay durable pending gates when attached, allowing an
|
|
87
|
+
* SDK host that starts after a gate was opened to discover it.
|
|
88
|
+
*/
|
|
89
|
+
export declare class BrokerWorkflowGateEmitter implements WorkflowGateEmitter {
|
|
90
|
+
#private;
|
|
91
|
+
constructor(runId: string, store: GateStore, emitterHooks?: Pick<BrokerHooks, "advance">);
|
|
92
|
+
isUnattended(): boolean;
|
|
93
|
+
emitGate(input: OpenGateInput): Promise<unknown>;
|
|
94
|
+
onGateEmitted(listener: (gate: WorkflowGate) => void): () => void;
|
|
95
|
+
resolveGate(response: WorkflowGateResponse): Promise<WorkflowGateResolution>;
|
|
96
|
+
prepareTerminalization(gateId: string, proof: WorkflowGateTerminalProof): boolean;
|
|
97
|
+
clearPreparedTerminalization(gateId: string): void;
|
|
98
|
+
listPendingGates(): WorkflowGate[];
|
|
99
|
+
listGateDiagnostics(): WorkflowGateDiagnostic[];
|
|
100
|
+
listWorkflowGateQueryRecords(): WorkflowGateQueryRecord[];
|
|
101
|
+
suspend(): void;
|
|
102
|
+
resume(): void;
|
|
103
|
+
fence(): void;
|
|
104
|
+
quarantineGate(gateId: string): void;
|
|
105
|
+
registerGateTerminalController(controller: WorkflowGateTerminalController): () => void;
|
|
106
|
+
setAckRecoveryParticipant(participant: AskSelectedAckRecoveryParticipant | null): void;
|
|
107
|
+
recoverAcceptedGates(): Promise<string[]>;
|
|
108
|
+
resolveGateFromNotification(response: WorkflowGateResponse, options: NotificationGateResolutionOptions): Promise<WorkflowGateResolution>;
|
|
109
|
+
}
|
|
30
110
|
export interface PersistedGate {
|
|
31
|
-
gate:
|
|
32
|
-
status: "pending" | "accepted";
|
|
111
|
+
gate: WorkflowGate;
|
|
112
|
+
status: "pending" | "accepted" | "quarantined";
|
|
113
|
+
ownerInstanceId?: string;
|
|
33
114
|
idempotencyKey?: string;
|
|
34
115
|
responseHash?: string;
|
|
35
|
-
/** Raw accepted answer, retained so a
|
|
116
|
+
/** Raw accepted answer, retained so a same-process advance can be replayed. */
|
|
36
117
|
answer?: unknown;
|
|
37
|
-
resolution?:
|
|
118
|
+
resolution?: WorkflowGateResolution;
|
|
38
119
|
advanced: boolean;
|
|
120
|
+
/** Exact presentation terminalization completed before workflow advancement. */
|
|
121
|
+
terminalized?: boolean;
|
|
122
|
+
/** Exact presentation terminalization proof recorded before workflow advancement. */
|
|
123
|
+
terminalProof?: WorkflowGateTerminalProof;
|
|
39
124
|
semanticDisposition?: PersistedSemanticDisposition;
|
|
40
125
|
resolutionOrigin?: PersistedResolutionOrigin;
|
|
41
126
|
ackPolicy?: PersistedAckPolicy;
|
|
127
|
+
lifecycle?: WorkflowGateDiagnostic["lifecycle"];
|
|
42
128
|
}
|
|
43
129
|
export interface GateStore {
|
|
44
|
-
nextSeq(stage:
|
|
130
|
+
nextSeq(stage: WorkflowStage): number;
|
|
45
131
|
put(record: PersistedGate): void;
|
|
46
132
|
get(gateId: string): PersistedGate | undefined;
|
|
47
|
-
/**
|
|
133
|
+
/** Atomically quarantines records owned by a prior runtime before exposure. */
|
|
134
|
+
beginRuntimeInstance(instanceId: string): void;
|
|
135
|
+
/** All persisted gate records (used for same-process recovery and Q12). */
|
|
48
136
|
list(): PersistedGate[];
|
|
49
137
|
}
|
|
50
138
|
export declare class MemoryGateStore implements GateStore {
|
|
51
139
|
private counters;
|
|
52
140
|
private gates;
|
|
53
|
-
|
|
141
|
+
private runtimeInstanceId;
|
|
142
|
+
nextSeq(stage: WorkflowStage): number;
|
|
54
143
|
put(record: PersistedGate): void;
|
|
55
144
|
get(gateId: string): PersistedGate | undefined;
|
|
145
|
+
beginRuntimeInstance(instanceId: string): void;
|
|
56
146
|
list(): PersistedGate[];
|
|
57
147
|
}
|
|
148
|
+
/** A write may have reached `rename` but not the directory fsync durability barrier. */
|
|
149
|
+
export declare class GateStoreWriteError extends Error {
|
|
150
|
+
readonly certainty: "not_committed" | "uncertain";
|
|
151
|
+
constructor(certainty: "not_committed" | "uncertain", cause: unknown);
|
|
152
|
+
}
|
|
58
153
|
/** Crash-durable JSON-file backed store. Writes the full state on every mutation. */
|
|
59
154
|
export declare class FileGateStore implements GateStore {
|
|
60
155
|
private readonly filePath;
|
|
156
|
+
private readonly sync;
|
|
61
157
|
private state;
|
|
62
|
-
|
|
158
|
+
private certaintyUnknown;
|
|
159
|
+
constructor(filePath: string, sync?: (fd: number) => void);
|
|
63
160
|
private load;
|
|
64
|
-
private
|
|
65
|
-
|
|
161
|
+
private flushState;
|
|
162
|
+
private commit;
|
|
163
|
+
private reconcileCertainty;
|
|
164
|
+
nextSeq(stage: WorkflowStage): number;
|
|
66
165
|
put(record: PersistedGate): void;
|
|
67
166
|
get(gateId: string): PersistedGate | undefined;
|
|
167
|
+
beginRuntimeInstance(instanceId: string): void;
|
|
68
168
|
list(): PersistedGate[];
|
|
69
169
|
}
|
|
70
170
|
export type GateAuditEvent = {
|
|
71
171
|
event: "gate_emitted";
|
|
72
172
|
gate_id: string;
|
|
73
|
-
stage:
|
|
74
|
-
kind:
|
|
173
|
+
stage: WorkflowStage;
|
|
174
|
+
kind: WorkflowGateKind;
|
|
75
175
|
} | {
|
|
76
176
|
event: "gate_response_accepted";
|
|
77
177
|
gate_id: string;
|
|
@@ -98,49 +198,88 @@ export type GateAuditEvent = {
|
|
|
98
198
|
};
|
|
99
199
|
export interface BrokerHooks {
|
|
100
200
|
/** Called once when a pending gate has been persisted and should be emitted. */
|
|
101
|
-
emit?(gate:
|
|
201
|
+
emit?(gate: WorkflowGate): void;
|
|
102
202
|
/**
|
|
103
203
|
* Invoked to advance the workflow after an accepted resolution is durably
|
|
104
204
|
* committed. MUST be idempotent keyed by `gate.gate_id`: `recover()` replays
|
|
105
205
|
* it for any gate left `accepted` but not `advanced` by a crash.
|
|
106
206
|
*/
|
|
107
|
-
advance?(gate:
|
|
108
|
-
/** Runs after durable acceptance and before
|
|
207
|
+
advance?(gate: WorkflowGate, answer: unknown): void | Promise<void>;
|
|
208
|
+
/** Runs after durable acceptance and before presentation terminalization, including crash recovery. */
|
|
109
209
|
finalizeAccepted?(record: PersistedGate): Promise<void>;
|
|
210
|
+
/**
|
|
211
|
+
* Terminalizes the exact presentation before `advance` can run and returns
|
|
212
|
+
* proof for the durable record. `not_published` explicitly proves that no
|
|
213
|
+
* presentation existed. On failure it MUST revoke authority or throw.
|
|
214
|
+
*/
|
|
215
|
+
terminalizeAccepted?(record: PersistedGate): WorkflowGateTerminalProof | Promise<WorkflowGateTerminalProof>;
|
|
216
|
+
/** Runs only after a successful advance has been durably marked advanced. */
|
|
217
|
+
completeAccepted?(record: PersistedGate): void | Promise<void>;
|
|
110
218
|
/** Append-only audit sink. */
|
|
111
219
|
audit?(event: GateAuditEvent): void;
|
|
112
220
|
}
|
|
221
|
+
/** Live in-process continuation authority for one emitted gate. */
|
|
222
|
+
export interface GateContinuation {
|
|
223
|
+
activate(gate: WorkflowGate): void;
|
|
224
|
+
isLive(gateId: string): boolean;
|
|
225
|
+
release?(gateId: string): void;
|
|
226
|
+
/** Explicitly declares that this direct continuation owns no presentation. */
|
|
227
|
+
terminalProof?: "not_published";
|
|
228
|
+
}
|
|
113
229
|
export interface OpenGateInput {
|
|
114
|
-
stage:
|
|
115
|
-
kind:
|
|
116
|
-
schema:
|
|
117
|
-
options?:
|
|
118
|
-
context?:
|
|
230
|
+
stage: WorkflowStage;
|
|
231
|
+
kind: WorkflowGateKind;
|
|
232
|
+
schema: WorkflowGate["schema"];
|
|
233
|
+
options?: WorkflowGateOption[];
|
|
234
|
+
context?: WorkflowGateContext;
|
|
235
|
+
/** Optional diagnostic gate replaced by this newly persisted gate. */
|
|
236
|
+
supersedesGateId?: string;
|
|
119
237
|
}
|
|
120
238
|
export declare class WorkflowGateBrokerError extends Error {
|
|
121
239
|
readonly code: "unknown_gate" | "already_resolved" | "idempotency_conflict" | "invalid_workflow_stage";
|
|
122
240
|
constructor(code: "unknown_gate" | "already_resolved" | "idempotency_conflict" | "invalid_workflow_stage", message: string);
|
|
123
241
|
}
|
|
124
242
|
export declare class WorkflowGateBroker {
|
|
243
|
+
#private;
|
|
125
244
|
private readonly runId;
|
|
126
245
|
private readonly store;
|
|
127
246
|
private readonly hooks;
|
|
247
|
+
private readonly instanceId;
|
|
128
248
|
private readonly recovering;
|
|
129
249
|
private readonly gateLocks;
|
|
250
|
+
private readonly continuations;
|
|
130
251
|
private withGateLock;
|
|
131
|
-
constructor(runId: string, store: GateStore, hooks?: BrokerHooks);
|
|
252
|
+
constructor(runId: string, store: GateStore, hooks?: BrokerHooks, instanceId?: `${string}-${string}-${string}-${string}-${string}`);
|
|
132
253
|
classifyDisposition(gateId: string, answer: unknown): PersistedSemanticDisposition;
|
|
133
|
-
validationError(gateId: string, keyword: string, message: string):
|
|
254
|
+
validationError(gateId: string, keyword: string, message: string): WorkflowGateValidationError;
|
|
134
255
|
updateAckPolicy(gateId: string, ackPolicy: PersistedAckPolicy): void;
|
|
135
256
|
private runShort;
|
|
257
|
+
private hasLiveContinuation;
|
|
258
|
+
hasRecoverableAcceptedGate(): boolean;
|
|
259
|
+
prepareTerminalization(gateId: string, proof: WorkflowGateTerminalProof): boolean;
|
|
260
|
+
clearPreparedTerminalization(gateId: string): void;
|
|
261
|
+
/**
|
|
262
|
+
* Fences a gate after an uncertain control outcome by deliberately releasing
|
|
263
|
+
* this runtime's continuation authority. The durable diagnostic is retained
|
|
264
|
+
* for recovery; it is never republished as a pending gate.
|
|
265
|
+
*/
|
|
266
|
+
quarantineGate(gateId: string): void;
|
|
267
|
+
/** Revoke every live continuation, including accepted-but-unadvanced recovery authority. */
|
|
268
|
+
fenceContinuations(): void;
|
|
269
|
+
/** Fence a cancelled/lost continuation before it can be exposed or advanced. */
|
|
270
|
+
loseContinuation(gateId: string): void;
|
|
271
|
+
listPendingGates(): WorkflowGate[];
|
|
272
|
+
listGateDiagnostics(): WorkflowGateDiagnostic[];
|
|
273
|
+
listWorkflowGateQueryRecords(): WorkflowGateQueryRecord[];
|
|
136
274
|
/** Open and emit a gate. The pending record is persisted BEFORE emission. */
|
|
137
|
-
openGate(input: OpenGateInput):
|
|
275
|
+
openGate(input: OpenGateInput, continuation?: GateContinuation): WorkflowGate;
|
|
138
276
|
/**
|
|
139
277
|
* Resolve a gate with an answer. Validates against the advertised schema.
|
|
140
|
-
*
|
|
141
|
-
*
|
|
278
|
+
* Accepted answers are persisted first, then their presentation is terminalized,
|
|
279
|
+
* then the workflow advances and commits `advanced:true` exactly once. Invalid
|
|
280
|
+
* answers leave the gate pending (per #315 acceptance).
|
|
142
281
|
*/
|
|
143
|
-
resolve(response:
|
|
282
|
+
resolve(response: WorkflowGateResponse, options?: GateResolutionOptions): Promise<WorkflowGateResolution>;
|
|
144
283
|
private resolveUnlocked;
|
|
145
284
|
/**
|
|
146
285
|
* Recover any gate left `accepted` but not `advanced` by a crash between the
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { JsonSchema, WorkflowGateValidationError } from "./workflow-gate-types";
|
|
2
2
|
export declare const GATE_SCHEMA_LIMITS: {
|
|
3
3
|
readonly maxSchemaBytes: number;
|
|
4
4
|
readonly maxDepth: 16;
|
|
@@ -13,10 +13,10 @@ export declare class WorkflowGateSchemaError extends Error {
|
|
|
13
13
|
}
|
|
14
14
|
/** Canonical (stable-key-ordered) JSON serialization used for hashing. */
|
|
15
15
|
export declare function canonicalJson(value: unknown): string;
|
|
16
|
-
export declare function schemaHash(schema:
|
|
16
|
+
export declare function schemaHash(schema: JsonSchema): string;
|
|
17
17
|
declare function answerHashOf(answer: unknown): string;
|
|
18
18
|
/** Validate the schema *shape*. Throws WorkflowGateSchemaError on any problem. */
|
|
19
|
-
export declare function assertSupportedGateSchema(schema:
|
|
19
|
+
export declare function assertSupportedGateSchema(schema: JsonSchema): void;
|
|
20
20
|
type SchemaError = {
|
|
21
21
|
path: string;
|
|
22
22
|
keyword: string;
|
|
@@ -25,15 +25,15 @@ type SchemaError = {
|
|
|
25
25
|
};
|
|
26
26
|
/** A compiled, cached validator for one schema. */
|
|
27
27
|
export interface CompiledGateSchema {
|
|
28
|
-
readonly schema:
|
|
28
|
+
readonly schema: JsonSchema;
|
|
29
29
|
readonly hash: string;
|
|
30
30
|
validate(answer: unknown): SchemaError[];
|
|
31
31
|
}
|
|
32
32
|
/** Compile (and cache) a validator for a schema. Asserts shape on first compile. */
|
|
33
|
-
export declare function compileGateSchema(schema:
|
|
33
|
+
export declare function compileGateSchema(schema: JsonSchema): CompiledGateSchema;
|
|
34
34
|
/**
|
|
35
35
|
* Validate an answer against a compiled gate schema. Returns `null` on success
|
|
36
|
-
* or a typed {@link
|
|
36
|
+
* or a typed {@link WorkflowGateValidationError} on mismatch.
|
|
37
37
|
*/
|
|
38
|
-
export declare function validateGateAnswer(compiled: CompiledGateSchema, gateId: string, answer: unknown):
|
|
38
|
+
export declare function validateGateAnswer(compiled: CompiledGateSchema, gateId: string, answer: unknown): WorkflowGateValidationError | null;
|
|
39
39
|
export { answerHashOf };
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/** Transport-neutral workflow gate contract used by SDK workflow coordination. */
|
|
2
|
+
/** Lifecycle stages that emit machine-addressable SDK workflow gates. */
|
|
3
|
+
export type WorkflowStage = "deep-interview" | "ralplan" | "ultragoal";
|
|
4
|
+
/** Reserved stage names that are explicitly not part of the v1 contract. */
|
|
5
|
+
export declare const RESERVED_WORKFLOW_STAGES: readonly string[];
|
|
6
|
+
export type WorkflowGateKind = "question" | "approval" | "execution";
|
|
7
|
+
/** The documented JSON Schema 2020-12 subset supported by the gate validator. */
|
|
8
|
+
export interface JsonSchema {
|
|
9
|
+
type?: "string" | "number" | "integer" | "boolean" | "object" | "array" | "null";
|
|
10
|
+
enum?: unknown[];
|
|
11
|
+
const?: unknown;
|
|
12
|
+
properties?: Record<string, JsonSchema>;
|
|
13
|
+
required?: string[];
|
|
14
|
+
additionalProperties?: boolean | JsonSchema;
|
|
15
|
+
items?: JsonSchema;
|
|
16
|
+
minLength?: number;
|
|
17
|
+
maxLength?: number;
|
|
18
|
+
pattern?: string;
|
|
19
|
+
minItems?: number;
|
|
20
|
+
maxItems?: number;
|
|
21
|
+
uniqueItems?: boolean;
|
|
22
|
+
minimum?: number;
|
|
23
|
+
maximum?: number;
|
|
24
|
+
title?: string;
|
|
25
|
+
description?: string;
|
|
26
|
+
oneOf?: JsonSchema[];
|
|
27
|
+
anyOf?: JsonSchema[];
|
|
28
|
+
}
|
|
29
|
+
export interface WorkflowGateOption {
|
|
30
|
+
value: unknown;
|
|
31
|
+
label: string;
|
|
32
|
+
description?: string;
|
|
33
|
+
}
|
|
34
|
+
export interface WorkflowGateContext {
|
|
35
|
+
title?: string;
|
|
36
|
+
plan?: string;
|
|
37
|
+
source?: string;
|
|
38
|
+
prompt?: string;
|
|
39
|
+
summary?: string;
|
|
40
|
+
stage_state?: Record<string, unknown>;
|
|
41
|
+
artifact_refs?: Array<{
|
|
42
|
+
kind: string;
|
|
43
|
+
path?: string;
|
|
44
|
+
sha256?: string;
|
|
45
|
+
}>;
|
|
46
|
+
language?: string;
|
|
47
|
+
}
|
|
48
|
+
/** Outbound event: a machine-addressable workflow gate awaiting an answer. */
|
|
49
|
+
export interface WorkflowGate {
|
|
50
|
+
type: "workflow_gate";
|
|
51
|
+
gate_id: string;
|
|
52
|
+
stage: WorkflowStage;
|
|
53
|
+
kind: WorkflowGateKind;
|
|
54
|
+
schema: JsonSchema;
|
|
55
|
+
schema_hash: string;
|
|
56
|
+
options?: WorkflowGateOption[];
|
|
57
|
+
context: WorkflowGateContext;
|
|
58
|
+
created_at: string;
|
|
59
|
+
required: true;
|
|
60
|
+
}
|
|
61
|
+
/** Non-actionable durable-gate state retained for restart diagnostics. */
|
|
62
|
+
export interface WorkflowGateLifecycle {
|
|
63
|
+
state: "quarantined";
|
|
64
|
+
reason: "orphaned_after_process_restart" | "accepted_unadvanced_after_process_restart" | "continuation_owner_lost" | "opened_without_continuation" | "finalization_failed" | "advance_failed";
|
|
65
|
+
quarantinedAt: string;
|
|
66
|
+
supersededByGateId?: string;
|
|
67
|
+
}
|
|
68
|
+
/** A quarantined gate is diagnostic-only and must never be presented or answered. */
|
|
69
|
+
export interface WorkflowGateDiagnostic extends WorkflowGate {
|
|
70
|
+
id: string;
|
|
71
|
+
tag: "quarantined";
|
|
72
|
+
lifecycle: WorkflowGateLifecycle;
|
|
73
|
+
}
|
|
74
|
+
/** Stable Q12 row preserving the root WorkflowGate shape. */
|
|
75
|
+
export type WorkflowGateQueryRecord = (WorkflowGate & {
|
|
76
|
+
id: string;
|
|
77
|
+
tag: "pending";
|
|
78
|
+
lifecycle?: undefined;
|
|
79
|
+
}) | WorkflowGateDiagnostic;
|
|
80
|
+
/** Inbound: the agent's answer to a workflow gate. */
|
|
81
|
+
export interface WorkflowGateResponse {
|
|
82
|
+
gate_id: string;
|
|
83
|
+
answer: unknown;
|
|
84
|
+
idempotency_key?: string;
|
|
85
|
+
}
|
|
86
|
+
/** Outcome of resolving a gate, surfaced back to the answering client. */
|
|
87
|
+
export interface WorkflowGateResolution {
|
|
88
|
+
gate_id: string;
|
|
89
|
+
status: "accepted" | "rejected";
|
|
90
|
+
answer_hash: string;
|
|
91
|
+
resolved_at: string;
|
|
92
|
+
error?: WorkflowGateValidationError;
|
|
93
|
+
}
|
|
94
|
+
/** Typed error shape for schema validation failures. */
|
|
95
|
+
export interface WorkflowGateValidationError {
|
|
96
|
+
code: "invalid_workflow_gate_answer";
|
|
97
|
+
gate_id: string;
|
|
98
|
+
schema_hash: string;
|
|
99
|
+
errors: Array<{
|
|
100
|
+
path: string;
|
|
101
|
+
keyword: string;
|
|
102
|
+
message: string;
|
|
103
|
+
expected?: unknown;
|
|
104
|
+
}>;
|
|
105
|
+
}
|
|
@@ -9,6 +9,7 @@ import type { CompactOptions } from "../extensibility/extensions/types";
|
|
|
9
9
|
import type { Skill } from "../extensibility/skills";
|
|
10
10
|
import type { PlanApprovalDetails } from "../plan-mode/approved-plan";
|
|
11
11
|
import type { MCPManager } from "../runtime-mcp";
|
|
12
|
+
import type { NotificationSessionReconcileResult, NotificationSessionStatus } from "../sdk/bus/session-control";
|
|
12
13
|
import type { AgentSession, AgentSessionEvent } from "../session/agent-session";
|
|
13
14
|
import type { HistoryStorage } from "../session/history-storage";
|
|
14
15
|
import type { SessionContext, SessionManager } from "../session/session-manager";
|
|
@@ -80,6 +81,10 @@ export interface InteractiveModeContext {
|
|
|
80
81
|
historyStorage?: HistoryStorage;
|
|
81
82
|
mcpManager?: MCPManager;
|
|
82
83
|
lspServers?: LspStartupServerInfo[];
|
|
84
|
+
/** Shared controller query; absent in ACP/lightweight test contexts. */
|
|
85
|
+
getCurrentSessionNotificationStatus?(): NotificationSessionStatus | undefined;
|
|
86
|
+
/** Toggle only the current session; absent in ACP/lightweight test contexts. */
|
|
87
|
+
setCurrentSessionNotificationsEnabled?(enabled: boolean): Promise<NotificationSessionReconcileResult | undefined>;
|
|
83
88
|
readonly ircLedger: IrcObservationLedger;
|
|
84
89
|
isInitialized: boolean;
|
|
85
90
|
isBackgrounded: boolean;
|
|
@@ -153,9 +158,19 @@ export interface InteractiveModeContext {
|
|
|
153
158
|
setWorkingMessage(message?: string): void;
|
|
154
159
|
applyPendingWorkingMessage(): void;
|
|
155
160
|
ensureLoadingAnimation(): void;
|
|
156
|
-
|
|
161
|
+
/**
|
|
162
|
+
* Commit a pet mode through the shared result-returning policy: capability
|
|
163
|
+
* is rechecked immediately before mutation and the preference persists only
|
|
164
|
+
* on acceptance. Returns whether the commit was accepted.
|
|
165
|
+
*/
|
|
166
|
+
setPetMode(mode: PetMode): boolean;
|
|
157
167
|
/** Live-preview a pet skin during a selector without persisting. */
|
|
158
168
|
previewPetMode(mode: PetMode): void;
|
|
169
|
+
/**
|
|
170
|
+
* Commit a settings-overlay pet change without re-mounting the composer.
|
|
171
|
+
* Same shared commit policy and result semantics as `setPetMode`.
|
|
172
|
+
*/
|
|
173
|
+
commitPetPreviewMode(mode: PetMode): boolean;
|
|
159
174
|
/** Re-mount the composer (pet-aware) after an overlay/selector closes. */
|
|
160
175
|
restoreComposer(): void;
|
|
161
176
|
startPendingSubmission(input: {
|
|
@@ -5,6 +5,8 @@ import type { MCPGetPromptResult, MCPPrompt, MCPRequestOptions, MCPResource, MCP
|
|
|
5
5
|
*/
|
|
6
6
|
export declare function connectToServer(name: string, config: MCPServerConfig, options?: {
|
|
7
7
|
signal?: AbortSignal;
|
|
8
|
+
/** Whether to advertise the roots/list capability (default: true). */
|
|
9
|
+
advertiseRoots?: boolean;
|
|
8
10
|
onNotification?: (method: string, params: unknown) => void;
|
|
9
11
|
onRequest?: (method: string, params: unknown) => Promise<unknown>;
|
|
10
12
|
}): Promise<MCPServerConnection>;
|
|
@@ -13,8 +13,10 @@ export interface LoadMCPConfigsOptions {
|
|
|
13
13
|
filterExa?: boolean;
|
|
14
14
|
/** Whether to filter out browser MCP servers when builtin browser tool is enabled (default: false) */
|
|
15
15
|
filterBrowser?: boolean;
|
|
16
|
-
/** Only include servers
|
|
16
|
+
/** Only include startup-eligible servers; exact-config sessions always enforce autoload !== false. */
|
|
17
17
|
autoloadOnly?: boolean;
|
|
18
|
+
/** Load only this explicit MCP config file. */
|
|
19
|
+
configPath?: string;
|
|
18
20
|
}
|
|
19
21
|
/** Result of loading MCP configs */
|
|
20
22
|
export interface LoadMCPConfigsResult {
|
|
@@ -24,6 +26,8 @@ export interface LoadMCPConfigsResult {
|
|
|
24
26
|
exaApiKeys: string[];
|
|
25
27
|
/** Source metadata for each server */
|
|
26
28
|
sources: Record<string, SourceMeta>;
|
|
29
|
+
/** Whether the explicit configuration was unavailable or contained invalid entries. */
|
|
30
|
+
configurationWarning: boolean;
|
|
27
31
|
}
|
|
28
32
|
/**
|
|
29
33
|
* Load all MCP server configs from standard locations.
|
|
@@ -42,6 +42,12 @@ export interface MCPDiscoverOptions {
|
|
|
42
42
|
autoloadOnly?: boolean;
|
|
43
43
|
/** Called when starting to connect to servers */
|
|
44
44
|
onConnecting?: (serverNames: string[]) => void;
|
|
45
|
+
/** Load only this explicit MCP config file. */
|
|
46
|
+
configPath?: string;
|
|
47
|
+
}
|
|
48
|
+
export interface MCPManagerOptions {
|
|
49
|
+
/** Restrict this instance to tools from an explicit MCP config. */
|
|
50
|
+
toolsOnly?: boolean;
|
|
45
51
|
}
|
|
46
52
|
/**
|
|
47
53
|
* MCP Server Manager.
|
|
@@ -58,7 +64,8 @@ export declare class MCPManager {
|
|
|
58
64
|
static setInstance(value: MCPManager | undefined): void;
|
|
59
65
|
/** Reset the process-global instance. Test-only. */
|
|
60
66
|
static resetForTests(): void;
|
|
61
|
-
constructor(cwd: string, toolCache?: MCPToolCache | null);
|
|
67
|
+
constructor(cwd: string, toolCache?: MCPToolCache | null, options?: MCPManagerOptions);
|
|
68
|
+
isToolsOnly(): boolean;
|
|
62
69
|
/**
|
|
63
70
|
* Set a callback to receive all server notifications.
|
|
64
71
|
*/
|
|
@@ -187,6 +187,10 @@ export interface MCPToolCallResult {
|
|
|
187
187
|
content: MCPContent[];
|
|
188
188
|
isError?: boolean;
|
|
189
189
|
}
|
|
190
|
+
/** Expected configured-server transport or protocol failure. */
|
|
191
|
+
export declare class MCPExpectedFailure extends Error {
|
|
192
|
+
constructor(cause?: unknown);
|
|
193
|
+
}
|
|
190
194
|
export interface MCPRequestOptions {
|
|
191
195
|
/** Abort signal (e.g. Escape-to-interrupt) */
|
|
192
196
|
signal?: AbortSignal;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { SdkClient, SdkClientError, type SdkFrame } from "../client";
|
|
2
|
+
type JsonObject = Record<string, unknown>;
|
|
3
|
+
/** The small agent-side ACP surface used for reverse requests. */
|
|
4
|
+
export interface AcpReverseConnection {
|
|
5
|
+
request?(method: string, params: JsonObject): Promise<unknown>;
|
|
6
|
+
[key: string]: unknown;
|
|
7
|
+
}
|
|
8
|
+
export interface AcpProviderRegistration {
|
|
9
|
+
capability: string;
|
|
10
|
+
definitions: unknown;
|
|
11
|
+
}
|
|
12
|
+
export interface AcpSdkAdapterOptions {
|
|
13
|
+
url: string;
|
|
14
|
+
token: string;
|
|
15
|
+
client?: SdkClient;
|
|
16
|
+
connection?: AcpReverseConnection;
|
|
17
|
+
providers?: AcpProviderRegistration[];
|
|
18
|
+
/** Lease IDs persisted by the ACP host across a WebSocket reconnect. */
|
|
19
|
+
expectedLeaseIds?: Record<string, string>;
|
|
20
|
+
heartbeatMs?: number;
|
|
21
|
+
reverseCancelTtlMs?: number;
|
|
22
|
+
}
|
|
23
|
+
export declare class AcpSdkAdapterError extends Error {
|
|
24
|
+
readonly code: string;
|
|
25
|
+
constructor(code: string, message?: string);
|
|
26
|
+
}
|
|
27
|
+
export type AcpReconnectFailedHandler = (error: SdkClientError) => void;
|
|
28
|
+
export type AcpFrameHandler = (frame: SdkFrame) => void;
|
|
29
|
+
/**
|
|
30
|
+
* Pure ACP-to-SDK adapter. It deliberately owns neither an AgentSession nor an
|
|
31
|
+
* ACP bridge: all session work is performed through authenticated v3 frames.
|
|
32
|
+
*/
|
|
33
|
+
export declare class AcpSdkAdapter {
|
|
34
|
+
#private;
|
|
35
|
+
constructor(options: AcpSdkAdapterOptions);
|
|
36
|
+
static connect(options: AcpSdkAdapterOptions): Promise<AcpSdkAdapter>;
|
|
37
|
+
get leaseIds(): ReadonlyMap<string, string>;
|
|
38
|
+
get connectionId(): string | undefined;
|
|
39
|
+
onReconnectFailed(handler: AcpReconnectFailedHandler): () => void;
|
|
40
|
+
onFrame(handler: AcpFrameHandler): () => void;
|
|
41
|
+
start(): Promise<void>;
|
|
42
|
+
close(): Promise<void>;
|
|
43
|
+
prompt(params: JsonObject | string): Promise<unknown>;
|
|
44
|
+
cancel(): Promise<unknown>;
|
|
45
|
+
setModel(params: JsonObject | string): Promise<unknown>;
|
|
46
|
+
control(operation: string, input?: JsonObject): Promise<unknown>;
|
|
47
|
+
query(query: string, input?: JsonObject, cursor?: string): Promise<unknown>;
|
|
48
|
+
global(operation: string, input?: JsonObject, idempotencyKey?: string): Promise<unknown>;
|
|
49
|
+
sdkControl(params: {
|
|
50
|
+
operation: string;
|
|
51
|
+
input?: JsonObject;
|
|
52
|
+
}): Promise<unknown>;
|
|
53
|
+
sdkQuery(params: {
|
|
54
|
+
query: string;
|
|
55
|
+
input?: JsonObject;
|
|
56
|
+
cursor?: string;
|
|
57
|
+
}): Promise<unknown>;
|
|
58
|
+
sdkGlobal(params: {
|
|
59
|
+
operation: string;
|
|
60
|
+
input?: JsonObject;
|
|
61
|
+
idempotencyKey?: string;
|
|
62
|
+
}): Promise<unknown>;
|
|
63
|
+
/** Dispatches the ACP extension method names without exposing endpoint credentials. */
|
|
64
|
+
handle(method: string, params?: JsonObject): Promise<unknown>;
|
|
65
|
+
registerProvider(provider: AcpProviderRegistration): Promise<void>;
|
|
66
|
+
}
|
|
67
|
+
export {};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { type BrokerDiscovery, redactBrokerDiscovery } from "./discovery";
|
|
2
|
+
import { type LifecycleDurableEffectsReceipt, LifecycleLedger, type LifecycleStartupFailureReceipt } from "./lifecycle-ledger";
|
|
3
|
+
import { SessionIndex } from "./session-index";
|
|
4
|
+
export interface BrokerSettings {
|
|
5
|
+
agentDir: string;
|
|
6
|
+
packageGeneration?: string;
|
|
7
|
+
port?: number;
|
|
8
|
+
heartbeatTtlMs?: number;
|
|
9
|
+
}
|
|
10
|
+
export type BrokerErrorCode = "idempotency_conflict" | "terminal_uncertain" | "broker_restarting" | "unavailable" | "endpoint_stale" | "resource_gone" | "invalid_input" | "spawn_failed" | "readiness_timeout" | "close_refused" | "not_found" | "live_session" | "cleanup_pending" | (string & {});
|
|
11
|
+
export type BrokerCleanupEvidence = {
|
|
12
|
+
phase: "artifacts" | "transcript" | "metadata";
|
|
13
|
+
artifactsIdentity?: {
|
|
14
|
+
dev: string;
|
|
15
|
+
ino: string;
|
|
16
|
+
};
|
|
17
|
+
transcriptIdentity?: {
|
|
18
|
+
dev: string;
|
|
19
|
+
ino: string;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
export type BrokerResponse = {
|
|
23
|
+
ok: true;
|
|
24
|
+
result?: unknown;
|
|
25
|
+
indexSeq?: number;
|
|
26
|
+
} | {
|
|
27
|
+
ok: false;
|
|
28
|
+
error: {
|
|
29
|
+
code: BrokerErrorCode;
|
|
30
|
+
message: string;
|
|
31
|
+
endpoint?: "unavailable";
|
|
32
|
+
cleanup?: BrokerCleanupEvidence;
|
|
33
|
+
};
|
|
34
|
+
indexSeq?: number;
|
|
35
|
+
durableEffects?: LifecycleDurableEffectsReceipt;
|
|
36
|
+
startupFailure?: LifecycleStartupFailureReceipt;
|
|
37
|
+
};
|
|
38
|
+
export declare class Broker {
|
|
39
|
+
#private;
|
|
40
|
+
readonly settings: Required<BrokerSettings>;
|
|
41
|
+
readonly index: SessionIndex;
|
|
42
|
+
readonly ledger: LifecycleLedger;
|
|
43
|
+
discovery: BrokerDiscovery | null;
|
|
44
|
+
constructor(settings: BrokerSettings);
|
|
45
|
+
start(): Promise<BrokerDiscovery>;
|
|
46
|
+
get ownsDiscovery(): boolean;
|
|
47
|
+
status(): ReturnType<typeof redactBrokerDiscovery> | null;
|
|
48
|
+
heartbeat(): Promise<void>;
|
|
49
|
+
stop(): Promise<void>;
|
|
50
|
+
handleRequest(operation: string, input: Record<string, unknown>, idempotencyKey?: string): Promise<BrokerResponse>;
|
|
51
|
+
}
|
|
52
|
+
/** Test-only hook for simulating a process crash after terminal persistence verification. */
|
|
53
|
+
export declare function setTerminalPersistenceHookForTest(broker: Broker, hook: (() => void) | undefined): void;
|