@gajae-code/coding-agent 0.17.1 → 0.17.4
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 +266 -0
- package/dist/types/async/job-manager.d.ts +7 -6
- package/dist/types/cli/daemon-cli.d.ts +3 -1
- package/dist/types/cli/github-release.d.ts +17 -0
- package/dist/types/cli/public-command-entry.d.ts +56 -0
- package/dist/types/cli/public-command-errors.d.ts +126 -0
- package/dist/types/cli/public-command-evidence.d.ts +99 -0
- package/dist/types/cli/public-command-help.d.ts +65 -0
- package/dist/types/cli/public-command-registry.d.ts +69 -0
- package/dist/types/cli/session-picker.d.ts +1 -1
- package/dist/types/cli/setup-cli.d.ts +1 -0
- package/dist/types/cli/skills-cli.d.ts +5 -0
- package/dist/types/cli.d.ts +3 -0
- package/dist/types/commands/daemon.d.ts +4 -50
- package/dist/types/commands/sdk.d.ts +20 -37
- package/dist/types/commands/setup.d.ts +3 -0
- package/dist/types/commands/skills.d.ts +9 -0
- package/dist/types/config/autorouting-tier-map.d.ts +24 -0
- package/dist/types/config/file-lock.d.ts +10 -1
- package/dist/types/config/model-profile-activation.d.ts +63 -4
- package/dist/types/config/model-registry.d.ts +20 -2
- package/dist/types/config/settings-schema.d.ts +11 -0
- package/dist/types/coordinator-mcp/question-state.d.ts +6 -1
- package/dist/types/coordinator-mcp/server.d.ts +3 -0
- package/dist/types/daemon/operator-contract.d.ts +5 -1
- package/dist/types/eval/js/worker-protocol.d.ts +2 -0
- package/dist/types/extensibility/extensions/types.d.ts +12 -0
- package/dist/types/extensibility/gjc-plugins/registry.d.ts +4 -0
- package/dist/types/extensibility/runtime-skill-discovery.d.ts +18 -0
- package/dist/types/extensibility/shared-events.d.ts +3 -1
- package/dist/types/gjc-runtime/session-state-lock.d.ts +61 -0
- package/dist/types/internal-urls/embedded-protocol.d.ts +9 -0
- package/dist/types/internal-urls/index.d.ts +1 -0
- package/dist/types/internal-urls/parse.d.ts +9 -1
- package/dist/types/main.d.ts +22 -0
- package/dist/types/modes/acp/acp-agent.d.ts +94 -1
- package/dist/types/modes/acp/startup-provenance.d.ts +16 -0
- package/dist/types/modes/components/custom-provider-wizard.d.ts +19 -1
- package/dist/types/modes/components/session-selector.d.ts +5 -2
- package/dist/types/modes/components/thinking-selector.d.ts +2 -1
- package/dist/types/modes/components/user-message-selector.d.ts +5 -2
- package/dist/types/modes/controllers/command-controller.d.ts +1 -1
- package/dist/types/modes/controllers/selector-controller.d.ts +1 -1
- package/dist/types/modes/interactive-mode.d.ts +1 -1
- package/dist/types/modes/shared/agent-wire/workflow-gate-broker.d.ts +11 -1
- package/dist/types/modes/shared/agent-wire/workflow-gate-types.d.ts +14 -1
- package/dist/types/modes/types.d.ts +2 -2
- package/dist/types/runtime/process-lifecycle.d.ts +2 -0
- package/dist/types/runtime-mcp/manager.d.ts +56 -0
- package/dist/types/runtime-mcp/pool.d.ts +17 -0
- package/dist/types/runtime-mcp/redaction.d.ts +20 -0
- package/dist/types/runtime-mcp/startup-policy.d.ts +6 -0
- package/dist/types/runtime-mcp/tool-bridge.d.ts +9 -0
- package/dist/types/runtime-mcp/transports/http.d.ts +11 -0
- package/dist/types/sdk/acp/adapter.d.ts +27 -0
- package/dist/types/sdk/acp/final-text.d.ts +8 -0
- package/dist/types/sdk/broker/broker.d.ts +13 -2
- package/dist/types/sdk/broker/ensure.d.ts +46 -1
- package/dist/types/sdk/broker/identity.d.ts +3 -1
- package/dist/types/sdk/broker/lifecycle-ledger.d.ts +23 -3
- package/dist/types/sdk/broker/lifecycle.d.ts +15 -8
- package/dist/types/sdk/broker/runtime.d.ts +1 -1
- package/dist/types/sdk/broker/session-index.d.ts +22 -3
- package/dist/types/sdk/broker/spawn-authority.d.ts +4 -0
- package/dist/types/sdk/broker/stderr-drainer.d.ts +13 -0
- package/dist/types/sdk/bus/index.d.ts +19 -0
- package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +3 -1
- package/dist/types/sdk/bus/telegram-daemon.d.ts +5 -0
- package/dist/types/sdk/cli/master-cli.d.ts +6 -10
- package/dist/types/sdk/cli/rows.d.ts +19 -1
- package/dist/types/sdk/cli/session-cli.d.ts +22 -5
- package/dist/types/sdk/client/client.d.ts +2 -0
- package/dist/types/sdk/guides/cli.d.ts +3 -4
- package/dist/types/sdk/guides/verify.d.ts +2 -0
- package/dist/types/sdk/host/host.d.ts +9 -0
- package/dist/types/sdk/host/session-runtime.d.ts +31 -0
- package/dist/types/sdk/host/types.d.ts +10 -0
- package/dist/types/sdk/index.d.ts +1 -0
- package/dist/types/sdk/prompt-deadline-flush.d.ts +83 -0
- package/dist/types/sdk/prompt-deadline-manager.d.ts +38 -1
- package/dist/types/sdk/prompt-failure.d.ts +30 -1
- package/dist/types/sdk/prompt-status.d.ts +8 -0
- package/dist/types/sdk/prompt-tool-boundary.d.ts +73 -0
- package/dist/types/sdk/router/replay-retention-gap-cache.d.ts +13 -0
- package/dist/types/sdk/router/session-router.d.ts +2 -0
- package/dist/types/sdk/startup-capability.d.ts +2 -0
- package/dist/types/sdk/transport/relay.d.ts +1 -0
- package/dist/types/sdk/transport/serve-cli.d.ts +73 -2
- package/dist/types/sdk/transport/stdio.d.ts +5 -1
- package/dist/types/session/agent-session.d.ts +168 -21
- package/dist/types/session/fallback-chain-controller.d.ts +6 -6
- package/dist/types/session/fold-coordinator.d.ts +17 -3
- package/dist/types/session/internal/managed-session-storage.d.ts +7 -1
- package/dist/types/session/session-manager.d.ts +64 -1
- package/dist/types/session/session-work-lease.d.ts +14 -0
- package/dist/types/setup/model-onboarding-guidance.d.ts +1 -1
- package/dist/types/setup/provider-onboarding.d.ts +81 -1
- package/dist/types/thinking.d.ts +3 -1
- package/dist/types/tools/bash.d.ts +37 -11
- package/dist/types/tools/job.d.ts +1 -1
- package/dist/types/tools/steer-fold.d.ts +31 -0
- package/dist/types/utils/git.d.ts +28 -2
- package/dist/types/utils/mupdf-embedded.d.ts +2 -0
- package/dist/types/utils/mupdf-wasm-embedded.d.ts +2 -0
- package/dist/types/utils/mupdf.d.ts +4 -0
- package/dist/types/utils/session-title-generation.d.ts +6 -0
- package/dist/types/utils/title-generator.d.ts +11 -2
- package/dist/types/web/scrapers/types.d.ts +3 -0
- package/package.json +18 -10
- package/scripts/build-binary.ts +9 -3
- package/scripts/compile-args.ts +0 -9
- package/scripts/embed-mupdf.ts +52 -0
- package/scripts/generate-sdk-operation-inventory.ts +31 -1
- package/scripts/vendor-markit.ts +196 -0
- package/src/async/job-manager.ts +60 -9
- package/src/cli/daemon-cli.ts +53 -18
- package/src/cli/github-release.ts +87 -5
- package/src/cli/mcp-cli.ts +38 -4
- package/src/cli/public-command-entry.ts +450 -0
- package/src/cli/public-command-errors.ts +581 -0
- package/src/cli/public-command-evidence.ts +717 -0
- package/src/cli/public-command-help.ts +360 -0
- package/src/cli/public-command-registry.ts +535 -0
- package/src/cli/session-picker.ts +2 -1
- package/src/cli/setup-cli.ts +9 -1
- package/src/cli/skills-cli.ts +46 -2
- package/src/cli.ts +61 -1
- package/src/commands/daemon.ts +65 -69
- package/src/commands/sdk.ts +232 -100
- package/src/commands/setup.ts +2 -0
- package/src/commands/skills.ts +11 -0
- package/src/config/autorouting-tier-map.ts +16 -0
- package/src/config/file-lock.ts +199 -68
- package/src/config/model-profile-activation.ts +406 -53
- package/src/config/model-registry.ts +204 -25
- package/src/config/settings-schema.ts +26 -2
- package/src/coordinator-mcp/policy.ts +10 -5
- package/src/coordinator-mcp/question-gate-codec.ts +17 -0
- package/src/coordinator-mcp/question-state.ts +175 -8
- package/src/coordinator-mcp/server.ts +528 -87
- package/src/coordinator-mcp/session-reaper.ts +6 -4
- package/src/crash/record-loader.ts +6 -2
- package/src/daemon/operator-contract.ts +26 -12
- package/src/debug/report-bundle.ts +114 -24
- package/src/defaults/gjc/skills/ultragoal/SKILL.md +1 -1
- package/src/eval/js/context-manager.ts +8 -8
- package/src/eval/js/worker-core.ts +9 -4
- package/src/eval/js/worker-protocol.ts +2 -0
- package/src/extensibility/extensions/runner.ts +52 -4
- package/src/extensibility/extensions/types.ts +10 -0
- package/src/extensibility/gjc-plugins/registry.ts +196 -37
- package/src/extensibility/runtime-skill-discovery.ts +61 -3
- package/src/extensibility/shared-events.ts +3 -1
- package/src/gjc-runtime/managed-owner-admission.ts +67 -50
- package/src/gjc-runtime/session-state-lock.ts +165 -24
- package/src/gjc-runtime/ultragoal-succession.ts +31 -3
- package/src/internal-urls/docs-index.generated.ts +21 -19
- package/src/internal-urls/embedded-protocol.ts +83 -0
- package/src/internal-urls/index.ts +1 -0
- package/src/internal-urls/parse.ts +21 -1
- package/src/internal-urls/router.ts +4 -2
- package/src/main.ts +123 -55
- package/src/modes/acp/acp-agent.ts +593 -47
- package/src/modes/acp/acp-event-mapper.ts +9 -0
- package/src/modes/acp/startup-provenance.ts +59 -0
- package/src/modes/components/custom-provider-wizard.ts +308 -7
- package/src/modes/components/model-selector.ts +31 -15
- package/src/modes/components/oauth-selector.ts +9 -0
- package/src/modes/components/session-selector.ts +47 -4
- package/src/modes/components/status-line/segments.ts +6 -1
- package/src/modes/components/thinking-selector.ts +7 -3
- package/src/modes/components/user-message-selector.ts +57 -15
- package/src/modes/controllers/command-controller.ts +58 -32
- package/src/modes/controllers/extension-ui-controller.ts +33 -7
- package/src/modes/controllers/input-controller.ts +4 -0
- package/src/modes/controllers/selector-controller.ts +177 -18
- package/src/modes/interactive-mode.ts +21 -7
- package/src/modes/runtime-init.ts +1 -0
- package/src/modes/shared/agent-wire/workflow-gate-broker.ts +124 -7
- package/src/modes/shared/agent-wire/workflow-gate-types.ts +16 -2
- package/src/modes/types.ts +2 -2
- package/src/prompts/agent-fragments/browser-aside.md +1 -0
- package/src/prompts/system/title-system.md +1 -1
- package/src/prompts/tools/bash.md +1 -1
- package/src/prompts/tools/job.md +1 -1
- package/src/prompts/tools/read.md +2 -0
- package/src/runtime/network-prewarm-service.test.ts +36 -1
- package/src/runtime/network-prewarm-service.ts +28 -3
- package/src/runtime/process-lifecycle.ts +22 -11
- package/src/runtime-mcp/config.ts +16 -1
- package/src/runtime-mcp/manager.ts +689 -55
- package/src/runtime-mcp/pool.test.ts +31 -0
- package/src/runtime-mcp/pool.ts +304 -28
- package/src/runtime-mcp/redaction.ts +42 -0
- package/src/runtime-mcp/startup-policy.ts +7 -0
- package/src/runtime-mcp/tool-bridge.ts +71 -0
- package/src/runtime-mcp/transports/http.ts +108 -25
- package/src/sdk/acp/adapter.ts +90 -9
- package/src/sdk/acp/final-text.ts +19 -2
- package/src/sdk/broker/broker.ts +378 -52
- package/src/sdk/broker/ensure.ts +97 -19
- package/src/sdk/broker/identity.ts +9 -1
- package/src/sdk/broker/lifecycle-ledger.ts +95 -31
- package/src/sdk/broker/lifecycle.ts +690 -141
- package/src/sdk/broker/runtime.ts +1 -1
- package/src/sdk/broker/session-index.ts +97 -4
- package/src/sdk/broker/spawn-authority.ts +35 -7
- package/src/sdk/broker/stderr-drainer.ts +59 -0
- package/src/sdk/bus/chat-daemon-control.ts +2 -2
- package/src/sdk/bus/chat-daemon-runtime.ts +1 -0
- package/src/sdk/bus/index.ts +721 -84
- package/src/sdk/bus/telegram-daemon-cli.ts +31 -2
- package/src/sdk/bus/telegram-daemon-contract.ts +3 -1
- package/src/sdk/bus/telegram-daemon.ts +10 -3
- package/src/sdk/cli/master-cli.ts +47 -36
- package/src/sdk/cli/rows.ts +30 -7
- package/src/sdk/cli/session-cli.ts +687 -184
- package/src/sdk/client/client.ts +18 -0
- package/src/sdk/guides/catalog.ts +2 -2
- package/src/sdk/guides/cli.ts +20 -62
- package/src/sdk/guides/verify.ts +14 -0
- package/src/sdk/host/host.ts +49 -5
- package/src/sdk/host/session-runtime.test.ts +636 -9
- package/src/sdk/host/session-runtime.ts +499 -118
- package/src/sdk/host/types.ts +12 -1
- package/src/sdk/host/websocket-transport.lifecycle.test.ts +84 -0
- package/src/sdk/host/websocket-transport.ts +40 -6
- package/src/sdk/index.ts +11 -0
- package/src/sdk/prompt-deadline-flush.ts +334 -0
- package/src/sdk/prompt-deadline-manager.ts +136 -4
- package/src/sdk/prompt-failure.ts +43 -1
- package/src/sdk/prompt-status.ts +8 -0
- package/src/sdk/prompt-tool-boundary.ts +121 -0
- package/src/sdk/protocol/operation-inventory.generated.json +106 -0
- package/src/sdk/router/replay-retention-gap-cache.ts +27 -0
- package/src/sdk/router/session-router.ts +31 -4
- package/src/sdk/session.ts +194 -16
- package/src/sdk/startup-capability.ts +1 -1
- package/src/sdk/transport/relay.ts +71 -6
- package/src/sdk/transport/serve-cli.ts +494 -49
- package/src/sdk/transport/socket.ts +12 -11
- package/src/sdk/transport/stdio.ts +7 -3
- package/src/session/agent-session.ts +2437 -400
- package/src/session/fallback-chain-controller.ts +6 -7
- package/src/session/fold-coordinator.ts +24 -5
- package/src/session/internal/managed-session-scope.ts +58 -18
- package/src/session/internal/managed-session-storage.ts +304 -11
- package/src/session/session-manager.ts +382 -44
- package/src/session/session-work-lease.ts +34 -0
- package/src/session-import/codex.ts +12 -3
- package/src/setup/model-onboarding-guidance.ts +1 -1
- package/src/setup/provider-onboarding.ts +397 -24
- package/src/slash-commands/builtin-registry.ts +258 -14
- package/src/task/index.ts +14 -2
- package/src/thinking.ts +21 -2
- package/src/tools/bash.ts +98 -78
- package/src/tools/fetch.ts +119 -20
- package/src/tools/job.ts +151 -25
- package/src/tools/output-meta.ts +15 -2
- package/src/tools/path-utils.ts +27 -3
- package/src/tools/read.ts +3 -3
- package/src/tools/steer-fold.ts +107 -0
- package/src/tools/tool-catalog.generated.ts +29 -2
- package/src/tools/tool-errors.ts +4 -0
- package/src/utils/git.ts +53 -3
- package/src/utils/markit.ts +55 -41
- package/src/utils/mupdf-assets.d.ts +4 -0
- package/src/utils/mupdf-embedded.ts +4 -0
- package/src/utils/mupdf-wasm-embedded.ts +3 -0
- package/src/utils/mupdf-wasm.ts +24 -2
- package/src/utils/mupdf.ts +129 -0
- package/src/utils/session-title-generation.ts +29 -0
- package/src/utils/title-generator.ts +46 -2
- package/src/web/scrapers/types.ts +24 -3
- package/vendor/markit-ai/LICENSE +21 -0
- package/vendor/markit-ai/MANIFEST.json +412 -0
- package/vendor/markit-ai/dist/commands/config.d.ts +4 -0
- package/vendor/markit-ai/dist/commands/config.js +139 -0
- package/vendor/markit-ai/dist/commands/convert.d.ts +6 -0
- package/vendor/markit-ai/dist/commands/convert.js +113 -0
- package/vendor/markit-ai/dist/commands/formats.d.ts +2 -0
- package/vendor/markit-ai/dist/commands/formats.js +92 -0
- package/vendor/markit-ai/dist/commands/init.d.ts +2 -0
- package/vendor/markit-ai/dist/commands/init.js +29 -0
- package/vendor/markit-ai/dist/commands/onboard.d.ts +2 -0
- package/vendor/markit-ai/dist/commands/onboard.js +61 -0
- package/vendor/markit-ai/dist/commands/plugin.d.ts +4 -0
- package/vendor/markit-ai/dist/commands/plugin.js +58 -0
- package/vendor/markit-ai/dist/config.d.ts +26 -0
- package/vendor/markit-ai/dist/config.js +42 -0
- package/vendor/markit-ai/dist/converters/audio.d.ts +7 -0
- package/vendor/markit-ai/dist/converters/audio.js +104 -0
- package/vendor/markit-ai/dist/converters/csv.d.ts +7 -0
- package/vendor/markit-ai/dist/converters/csv.js +83 -0
- package/vendor/markit-ai/dist/converters/docx.d.ts +6 -0
- package/vendor/markit-ai/dist/converters/docx.js +57 -0
- package/vendor/markit-ai/dist/converters/epub.d.ts +8 -0
- package/vendor/markit-ai/dist/converters/epub.js +128 -0
- package/vendor/markit-ai/dist/converters/github.d.ts +18 -0
- package/vendor/markit-ai/dist/converters/github.js +148 -0
- package/vendor/markit-ai/dist/converters/html.d.ts +6 -0
- package/vendor/markit-ai/dist/converters/html.js +30 -0
- package/vendor/markit-ai/dist/converters/image.d.ts +6 -0
- package/vendor/markit-ai/dist/converters/image.js +124 -0
- package/vendor/markit-ai/dist/converters/ipynb.d.ts +6 -0
- package/vendor/markit-ai/dist/converters/ipynb.js +75 -0
- package/vendor/markit-ai/dist/converters/iwork.d.ts +20 -0
- package/vendor/markit-ai/dist/converters/iwork.js +391 -0
- package/vendor/markit-ai/dist/converters/json.d.ts +6 -0
- package/vendor/markit-ai/dist/converters/json.js +21 -0
- package/vendor/markit-ai/dist/converters/pdf/columns.d.ts +35 -0
- package/vendor/markit-ai/dist/converters/pdf/columns.js +93 -0
- package/vendor/markit-ai/dist/converters/pdf/extract.d.ts +19 -0
- package/vendor/markit-ai/dist/converters/pdf/extract.js +514 -0
- package/vendor/markit-ai/dist/converters/pdf/grid.d.ts +25 -0
- package/vendor/markit-ai/dist/converters/pdf/grid.js +795 -0
- package/vendor/markit-ai/dist/converters/pdf/headers.d.ts +24 -0
- package/vendor/markit-ai/dist/converters/pdf/headers.js +108 -0
- package/vendor/markit-ai/dist/converters/pdf/index.d.ts +19 -0
- package/vendor/markit-ai/dist/converters/pdf/index.js +136 -0
- package/vendor/markit-ai/dist/converters/pdf/mupdf-loader.js +9 -0
- package/vendor/markit-ai/dist/converters/pdf/render.d.ts +24 -0
- package/vendor/markit-ai/dist/converters/pdf/render.js +513 -0
- package/vendor/markit-ai/dist/converters/pdf/types.d.ts +75 -0
- package/vendor/markit-ai/dist/converters/pdf/types.js +1 -0
- package/vendor/markit-ai/dist/converters/plain-text.d.ts +6 -0
- package/vendor/markit-ai/dist/converters/plain-text.js +87 -0
- package/vendor/markit-ai/dist/converters/pptx.d.ts +8 -0
- package/vendor/markit-ai/dist/converters/pptx.js +289 -0
- package/vendor/markit-ai/dist/converters/rss.d.ts +11 -0
- package/vendor/markit-ai/dist/converters/rss.js +138 -0
- package/vendor/markit-ai/dist/converters/wikipedia.d.ts +6 -0
- package/vendor/markit-ai/dist/converters/wikipedia.js +33 -0
- package/vendor/markit-ai/dist/converters/xlsx.d.ts +8 -0
- package/vendor/markit-ai/dist/converters/xlsx.js +147 -0
- package/vendor/markit-ai/dist/converters/xml.d.ts +6 -0
- package/vendor/markit-ai/dist/converters/xml.js +18 -0
- package/vendor/markit-ai/dist/converters/yaml.d.ts +6 -0
- package/vendor/markit-ai/dist/converters/yaml.js +17 -0
- package/vendor/markit-ai/dist/converters/zip.d.ts +8 -0
- package/vendor/markit-ai/dist/converters/zip.js +57 -0
- package/vendor/markit-ai/dist/index.d.ts +30 -0
- package/vendor/markit-ai/dist/index.js +26 -0
- package/vendor/markit-ai/dist/main.d.ts +2 -0
- package/vendor/markit-ai/dist/main.js +191 -0
- package/vendor/markit-ai/dist/markit.d.ts +45 -0
- package/vendor/markit-ai/dist/markit.js +267 -0
- package/vendor/markit-ai/dist/plugins/api.d.ts +7 -0
- package/vendor/markit-ai/dist/plugins/api.js +42 -0
- package/vendor/markit-ai/dist/plugins/index.d.ts +4 -0
- package/vendor/markit-ai/dist/plugins/index.js +3 -0
- package/vendor/markit-ai/dist/plugins/installer.d.ts +25 -0
- package/vendor/markit-ai/dist/plugins/installer.js +176 -0
- package/vendor/markit-ai/dist/plugins/loader.d.ts +6 -0
- package/vendor/markit-ai/dist/plugins/loader.js +61 -0
- package/vendor/markit-ai/dist/plugins/types.d.ts +25 -0
- package/vendor/markit-ai/dist/plugins/types.js +1 -0
- package/vendor/markit-ai/dist/providers/anthropic.d.ts +2 -0
- package/vendor/markit-ai/dist/providers/anthropic.js +47 -0
- package/vendor/markit-ai/dist/providers/index.d.ts +21 -0
- package/vendor/markit-ai/dist/providers/index.js +56 -0
- package/vendor/markit-ai/dist/providers/openai.d.ts +2 -0
- package/vendor/markit-ai/dist/providers/openai.js +76 -0
- package/vendor/markit-ai/dist/providers/types.d.ts +26 -0
- package/vendor/markit-ai/dist/providers/types.js +1 -0
- package/vendor/markit-ai/dist/types.d.ts +36 -0
- package/vendor/markit-ai/dist/types.js +1 -0
- package/vendor/markit-ai/dist/utils/exit-codes.d.ts +4 -0
- package/vendor/markit-ai/dist/utils/exit-codes.js +4 -0
- package/vendor/markit-ai/dist/utils/output.d.ts +22 -0
- package/vendor/markit-ai/dist/utils/output.js +31 -0
- package/vendor/markit-ai/dist/utils/turndown.d.ts +8 -0
- package/vendor/markit-ai/dist/utils/turndown.js +70 -0
- package/vendor/markit-ai/package.json +74 -0
- package/vendor/markit-ai.patch +49 -0
|
@@ -131,7 +131,7 @@ export declare class SelectorController {
|
|
|
131
131
|
smartRoutingOnly?: boolean;
|
|
132
132
|
}): void;
|
|
133
133
|
showPluginSelector(mode?: "install" | "uninstall"): Promise<void>;
|
|
134
|
-
showUserMessageSelector(): void;
|
|
134
|
+
showUserMessageSelector(onCommitted?: () => void): void;
|
|
135
135
|
showTreeSelector(): void;
|
|
136
136
|
showSessionSelector(): Promise<void>;
|
|
137
137
|
handleResumeSession(sessionPath: string): Promise<void>;
|
|
@@ -257,7 +257,7 @@ export declare class InteractiveMode implements InteractiveModeContext {
|
|
|
257
257
|
handleDropCommand(): Promise<boolean>;
|
|
258
258
|
handleForkCommand(): Promise<void>;
|
|
259
259
|
handleMoveCommand(targetPath: string): Promise<void>;
|
|
260
|
-
handleRenameCommand(title
|
|
260
|
+
handleRenameCommand(title?: string): Promise<void>;
|
|
261
261
|
handleMemoryCommand(text: string): Promise<void>;
|
|
262
262
|
handleSTTToggle(): Promise<void>;
|
|
263
263
|
showDebugSelector(): void;
|
|
@@ -8,6 +8,8 @@ export type PersistedResolutionOrigin = {
|
|
|
8
8
|
kind: "telegram_notification";
|
|
9
9
|
interactionActionId: string;
|
|
10
10
|
};
|
|
11
|
+
/** Keep accepted diagnostics below the coordinator's cumulative Q12 snapshot cap. */
|
|
12
|
+
export declare const MAX_ACCEPTED_WORKFLOW_GATE_QUERY_RECORDS = 32;
|
|
11
13
|
export type PersistedAckPolicy = {
|
|
12
14
|
kind: "none";
|
|
13
15
|
reason: "non_telegram" | "semantic_noncommit" | "legacy_unproven";
|
|
@@ -95,7 +97,7 @@ export interface WorkflowGateEmitter {
|
|
|
95
97
|
*/
|
|
96
98
|
export declare class BrokerWorkflowGateEmitter implements WorkflowGateEmitter {
|
|
97
99
|
#private;
|
|
98
|
-
constructor(runId: string, store: GateStore, emitterHooks?: Pick<BrokerHooks, "advance">);
|
|
100
|
+
constructor(runId: string, store: GateStore, emitterHooks?: Pick<BrokerHooks, "advance" | "continuationLost">);
|
|
99
101
|
supportsRemoteGateAnswers(): boolean;
|
|
100
102
|
setRuntimeTurnProvider(provider: (() => string | undefined) | null): void;
|
|
101
103
|
emitGate(input: OpenGateInput): Promise<unknown>;
|
|
@@ -193,6 +195,11 @@ export type GateAuditEvent = {
|
|
|
193
195
|
} | {
|
|
194
196
|
event: "gate_response_idempotent_replay";
|
|
195
197
|
gate_id: string;
|
|
198
|
+
}
|
|
199
|
+
/** An idempotent replay refused because this runtime cannot prove the continuation ran. */
|
|
200
|
+
| {
|
|
201
|
+
event: "gate_response_replay_unproven";
|
|
202
|
+
gate_id: string;
|
|
196
203
|
} | {
|
|
197
204
|
event: "gate_response_idempotency_conflict";
|
|
198
205
|
gate_id: string;
|
|
@@ -225,6 +232,8 @@ export interface BrokerHooks {
|
|
|
225
232
|
terminalizeAccepted?(record: PersistedGate): WorkflowGateTerminalProof | Promise<WorkflowGateTerminalProof>;
|
|
226
233
|
/** Runs only after a successful advance has been durably marked advanced. */
|
|
227
234
|
completeAccepted?(record: PersistedGate): void | Promise<void>;
|
|
235
|
+
/** Notifies the owning runtime when the accepted answer cannot reach its continuation. */
|
|
236
|
+
continuationLost?(record: PersistedGate): void;
|
|
228
237
|
/** Append-only audit sink. */
|
|
229
238
|
audit?(event: GateAuditEvent): void;
|
|
230
239
|
}
|
|
@@ -277,6 +286,7 @@ export declare class WorkflowGateBroker {
|
|
|
277
286
|
lookupCompletedResolution(response: WorkflowGateResponse): WorkflowGateCompletedResolutionLookup;
|
|
278
287
|
private runShort;
|
|
279
288
|
private hasLiveContinuation;
|
|
289
|
+
private recordContinuationLoss;
|
|
280
290
|
hasRecoverableAcceptedGate(): boolean;
|
|
281
291
|
prepareTerminalization(gateId: string, proof: WorkflowGateTerminalProof): boolean;
|
|
282
292
|
clearPreparedTerminalization(gateId: string): void;
|
|
@@ -117,13 +117,26 @@ export interface WorkflowGateDiagnostic extends WorkflowGate {
|
|
|
117
117
|
id: string;
|
|
118
118
|
tag: "quarantined";
|
|
119
119
|
lifecycle: WorkflowGateLifecycle;
|
|
120
|
+
/** Whether the durable broker retained an answer for this gate. */
|
|
121
|
+
answer_recorded: boolean;
|
|
122
|
+
}
|
|
123
|
+
/** Durable acceptance evidence for a gate that is no longer pending. */
|
|
124
|
+
export interface WorkflowGateResolutionDiagnostic extends WorkflowGate {
|
|
125
|
+
id: string;
|
|
126
|
+
tag: "accepted";
|
|
127
|
+
/** True when the accepted record contains the answer body. */
|
|
128
|
+
answer_recorded: true;
|
|
129
|
+
resolved_at: string;
|
|
130
|
+
/** Single post-accept disposition; raw answers and derived answer values stay private. */
|
|
131
|
+
post_accept_disposition: "accepted" | "terminalized" | "advanced" | "continuation_lost" | "unknown";
|
|
120
132
|
}
|
|
121
133
|
/** Stable Q12 row preserving the root WorkflowGate shape. */
|
|
122
134
|
export type WorkflowGateQueryRecord = (WorkflowGate & {
|
|
123
135
|
id: string;
|
|
124
136
|
tag: "pending";
|
|
125
137
|
lifecycle?: undefined;
|
|
126
|
-
|
|
138
|
+
answer_recorded: false;
|
|
139
|
+
}) | WorkflowGateDiagnostic | WorkflowGateResolutionDiagnostic;
|
|
127
140
|
/** Inbound: the agent's answer to a workflow gate. */
|
|
128
141
|
export interface WorkflowGateResponse {
|
|
129
142
|
gate_id: string;
|
|
@@ -303,7 +303,7 @@ export interface InteractiveModeContext {
|
|
|
303
303
|
handleHandoffCommand(customInstructions?: string): Promise<void>;
|
|
304
304
|
handleContributionPrepCommand(customInstructions?: string): Promise<void>;
|
|
305
305
|
handleMoveCommand(targetPath: string): Promise<void>;
|
|
306
|
-
handleRenameCommand(title
|
|
306
|
+
handleRenameCommand(title?: string): Promise<void>;
|
|
307
307
|
handleMemoryCommand(text: string): Promise<void>;
|
|
308
308
|
handleSTTToggle(): Promise<void>;
|
|
309
309
|
executeCompaction(customInstructionsOrOptions?: string | CompactOptions, isAuto?: boolean): Promise<CompactionOutcome>;
|
|
@@ -367,7 +367,7 @@ export interface InteractiveModeContext {
|
|
|
367
367
|
initHooksAndCustomTools(): Promise<void>;
|
|
368
368
|
emitCustomToolSessionEvent(reason: "start" | "switch" | "branch" | "tree" | "shutdown", previousSessionFile?: string): Promise<void>;
|
|
369
369
|
planModeController: Pick<import("./controllers/plan-mode-controller").PlanModeController, "enabled" | "paused" | "planFilePath" | "handleCommand" | "handleApproval" | "flushPendingModelSwitch">;
|
|
370
|
-
goalModeController: Pick<import("./controllers/goal-mode-controller").GoalModeController, "enabled" | "paused" | "handleCommand">;
|
|
370
|
+
goalModeController: Pick<import("./controllers/goal-mode-controller").GoalModeController, "enabled" | "paused" | "handleCommand" | "cancelContinuation" | "scheduleContinuation">;
|
|
371
371
|
setHookWidget(key: string, content: ExtensionWidgetContent, options?: ExtensionWidgetOptions): void;
|
|
372
372
|
setHookStatus(key: string, text: string | undefined): void;
|
|
373
373
|
showHookSelector(title: string, options: string[], dialogOptions?: ExtensionUIDialogOptions): Promise<string | undefined>;
|
|
@@ -80,6 +80,8 @@ type ResourceDisposer = () => void | Promise<void>;
|
|
|
80
80
|
export declare function registerResourceOwner(name: string, disposer: ResourceDisposer): () => void;
|
|
81
81
|
/** Number of registered resource owners. Exposed for leak assertions/tests. */
|
|
82
82
|
export declare function resourceOwnerCount(): number;
|
|
83
|
+
/** True while a process-level resource-owner sweep is in progress. */
|
|
84
|
+
export declare function isResourceOwnerDisposalActive(): boolean;
|
|
83
85
|
/**
|
|
84
86
|
* Run and clear every registered resource disposer. Attempts all disposers even
|
|
85
87
|
* if some throw, then surfaces the failures as an `AggregateError` so callers
|
|
@@ -14,6 +14,7 @@ import type { MCPProtocolObservation } from "./protocol";
|
|
|
14
14
|
import type { MCPToolDetails } from "./tool-bridge";
|
|
15
15
|
import type { MCPToolCache } from "./tool-cache";
|
|
16
16
|
import type { MCPGetPromptResult, MCPInputRequestHandler, MCPPrompt, MCPRequestOptions, MCPResource, MCPResourceReadResult, MCPResourceTemplate, MCPServerConfig, MCPServerConnection } from "./types";
|
|
17
|
+
export declare function isMCPStartupTimeoutError(error: unknown): boolean;
|
|
17
18
|
export declare function resolveStartupTimeoutMs(configs: MCPServerConfig[], maxStartupTimeoutMs?: number): number;
|
|
18
19
|
export declare function resolveExactConfigStartupTimeoutMs(configs: MCPServerConfig[]): number;
|
|
19
20
|
/**
|
|
@@ -56,6 +57,20 @@ export interface MCPLoadResult {
|
|
|
56
57
|
/** Extracted Exa API keys from filtered MCP servers */
|
|
57
58
|
exaApiKeys: string[];
|
|
58
59
|
}
|
|
60
|
+
export type MCPToolCatalogPublication = "unpublished" | "published" | "fenced";
|
|
61
|
+
/**
|
|
62
|
+
* Atomic view of the manager's fenced tool catalog and its publication state.
|
|
63
|
+
*
|
|
64
|
+
* `unpublished` is reserved for the initial deferred window where no manager
|
|
65
|
+
* catalog has been published and no exact control is fencing it. An empty
|
|
66
|
+
* `published` or `fenced` catalog is authoritative and must not be replaced
|
|
67
|
+
* with an in-flight discovery result.
|
|
68
|
+
*/
|
|
69
|
+
export interface MCPToolCatalogSnapshot {
|
|
70
|
+
tools: CustomTool<TSchema, MCPToolDetails>[];
|
|
71
|
+
publication: MCPToolCatalogPublication;
|
|
72
|
+
generation: number;
|
|
73
|
+
}
|
|
59
74
|
/** Options for discovering and connecting to MCP servers */
|
|
60
75
|
export interface MCPDiscoverOptions {
|
|
61
76
|
/** Whether to load project-level config (default: true) */
|
|
@@ -100,6 +115,30 @@ export interface MCPManagerOptions {
|
|
|
100
115
|
/** Test seam for fencing the acquisition-to-registration replacement race. */
|
|
101
116
|
afterLeaseAcquiredForTests?: (name: string, lease: MCPPoolLease) => void | Promise<void>;
|
|
102
117
|
}
|
|
118
|
+
export type ExactMcpServerControlStatus = "suspended" | "already-suspended" | "resumed" | "not-suspended" | "reconnected" | "unavailable" | "unknown-server";
|
|
119
|
+
export interface ExactMcpServerControlResult {
|
|
120
|
+
readonly name: string;
|
|
121
|
+
readonly status: ExactMcpServerControlStatus;
|
|
122
|
+
readonly toolCount: number;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* A staged catalog the caller can validate against before it is published.
|
|
126
|
+
* `commit` is the single publication point; `abort` releases anything the
|
|
127
|
+
* preparation opened and leaves the manager on its predecessor.
|
|
128
|
+
*/
|
|
129
|
+
export interface PreparedExactMcpCatalog {
|
|
130
|
+
readonly tools: CustomTool<TSchema, MCPToolDetails>[];
|
|
131
|
+
canCommit(): boolean;
|
|
132
|
+
commit(): Promise<void>;
|
|
133
|
+
abort(): Promise<void>;
|
|
134
|
+
}
|
|
135
|
+
export interface PreparedExactMcpServerControl extends PreparedExactMcpCatalog {
|
|
136
|
+
readonly result: ExactMcpServerControlResult;
|
|
137
|
+
/** Validate a resumed replacement before an atomic multi-server publication. */
|
|
138
|
+
precommit?(): void;
|
|
139
|
+
/** Publish after every replacement in the catalog has passed precommit. */
|
|
140
|
+
publish?(): void;
|
|
141
|
+
}
|
|
103
142
|
/**
|
|
104
143
|
* MCP Server Manager.
|
|
105
144
|
*
|
|
@@ -164,6 +203,23 @@ export declare class MCPManager {
|
|
|
164
203
|
* Get all loaded tools.
|
|
165
204
|
*/
|
|
166
205
|
getTools(): CustomTool<TSchema, MCPToolDetails>[];
|
|
206
|
+
/**
|
|
207
|
+
* Read the fenced catalog and publication state atomically.
|
|
208
|
+
*
|
|
209
|
+
* An empty catalog is still authoritative after publication or while an
|
|
210
|
+
* exact control is in flight. Deferred startup may fall back to its discovery
|
|
211
|
+
* result only for the explicit `unpublished` state.
|
|
212
|
+
*/
|
|
213
|
+
getToolCatalogSnapshot(): MCPToolCatalogSnapshot;
|
|
214
|
+
isExactServerSuppressed(name: string): boolean;
|
|
215
|
+
/**
|
|
216
|
+
* Prepare one exact-config control without publishing manager state. Session
|
|
217
|
+
* registry and prompt validation run against `tools`; commit is the single
|
|
218
|
+
* publication point and abort releases only an unpublished candidate.
|
|
219
|
+
*/
|
|
220
|
+
prepareExactServerControl(action: "suspend" | "resume" | "reconnect", name: string): Promise<PreparedExactMcpServerControl>;
|
|
221
|
+
/** Clear all session-local suppression before this owner adopts a new identity. */
|
|
222
|
+
prepareExactServerControlReset(): Promise<PreparedExactMcpCatalog>;
|
|
167
223
|
/**
|
|
168
224
|
* Get a specific connection.
|
|
169
225
|
*/
|
|
@@ -145,6 +145,13 @@ export interface MCPPoolLease {
|
|
|
145
145
|
onEvent(listener: LeaseListener): () => void;
|
|
146
146
|
release(): Promise<void>;
|
|
147
147
|
}
|
|
148
|
+
export interface MCPPreparedReplacement {
|
|
149
|
+
readonly lease: MCPPoolLease;
|
|
150
|
+
canCommit(): boolean;
|
|
151
|
+
publish(): void;
|
|
152
|
+
commit(): void;
|
|
153
|
+
abort(): Promise<void>;
|
|
154
|
+
}
|
|
148
155
|
declare class MCPPoolLeaseImpl implements MCPPoolLease {
|
|
149
156
|
#private;
|
|
150
157
|
readonly generation: number;
|
|
@@ -187,7 +194,11 @@ export declare class MCPConnectionPool {
|
|
|
187
194
|
awaitRestart(key: string): Promise<boolean>;
|
|
188
195
|
finishRestart(key: string, error?: unknown): void;
|
|
189
196
|
releaseRestart(key: string): void;
|
|
197
|
+
private retiredCleanupId;
|
|
198
|
+
private getRetiredAcquisitionCleanup;
|
|
199
|
+
private getRetiredAcquisitionCleanupForKey;
|
|
190
200
|
private retainCancelledAcquireCleanup;
|
|
201
|
+
private retainPreparedCleanup;
|
|
191
202
|
private notifyPendingAcquireCleanup;
|
|
192
203
|
/** @internal Whether this pool still owns the notified abandoned-acquire flight. */
|
|
193
204
|
hasPendingAcquireCleanup(error: MCPPoolAcquireAbortError): boolean;
|
|
@@ -202,6 +213,12 @@ export declare class MCPConnectionPool {
|
|
|
202
213
|
/** @internal Join and retry one generation of abandoned acquisition cleanup. */
|
|
203
214
|
closePendingAcquireCleanup(key: string, generation: number): Promise<void>;
|
|
204
215
|
acquire(name: string, config: MCPServerConfig, options?: MCPPoolAcquireOptions): Promise<MCPPoolLease>;
|
|
216
|
+
/**
|
|
217
|
+
* Prepared MCP replacements fence and retain acquisition cleanup ownership
|
|
218
|
+
* The caller validates its catalog first, then commits the key swap
|
|
219
|
+
* synchronously or aborts and closes only the candidate.
|
|
220
|
+
*/
|
|
221
|
+
prepareReplacement(name: string, config: MCPServerConfig, options?: MCPPoolAcquireOptions): Promise<MCPPreparedReplacement>;
|
|
205
222
|
private waitForPendingEntry;
|
|
206
223
|
private scheduleZeroClaimCleanup;
|
|
207
224
|
private cancelPendingEntry;
|
|
@@ -1,2 +1,22 @@
|
|
|
1
|
+
import type { AgentSession } from "../session/agent-session";
|
|
1
2
|
export declare function redactMCPEndpoint(value: string | undefined): string | undefined;
|
|
2
3
|
export declare function redactMCPDiagnosticValue(value: unknown): unknown;
|
|
4
|
+
/**
|
|
5
|
+
* Capability granted to a session that the root interactive entry point created
|
|
6
|
+
* with an explicit `--mcp-config` path. Holding it is the only way to read exact
|
|
7
|
+
* MCP status; it carries no manager, transport, or configuration reference.
|
|
8
|
+
*/
|
|
9
|
+
export interface ExactMcpControls {
|
|
10
|
+
readonly grantSource: "root-interactive-exact-config";
|
|
11
|
+
/**
|
|
12
|
+
* The exact config this session was started with. Status needs it because a
|
|
13
|
+
* tools-only manager deletes a server from its own bookkeeping when the
|
|
14
|
+
* connection fails, so the manager alone can never report a server that did
|
|
15
|
+
* not come up — the very case an operator runs `/mcp` to see.
|
|
16
|
+
*/
|
|
17
|
+
readonly configPath: string;
|
|
18
|
+
}
|
|
19
|
+
export declare function attachExactMcpControls(session: AgentSession, controls: ExactMcpControls): void;
|
|
20
|
+
export declare function getExactMcpControls(session: AgentSession): ExactMcpControls | undefined;
|
|
21
|
+
/** Revoke controls when the AgentSession object adopts a new logical identity. */
|
|
22
|
+
export declare function revokeExactMcpControls(session: AgentSession): void;
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import type { MCPServerConfig } from "./types";
|
|
2
2
|
export type AutoloadStatus = "autoload" | "autoload-off" | "disabled";
|
|
3
|
+
/** Ordinary standalone sessions stop blocking on MCP startup after this wait. */
|
|
4
|
+
export declare const DEFAULT_MCP_STARTUP_WAIT_MS = 250;
|
|
5
|
+
/** Grace added to the largest declared per-server startup window. */
|
|
6
|
+
export declare const MCP_STARTUP_WAIT_GRACE_MS = 500;
|
|
7
|
+
/** Ordinary startup never blocks longer than this batch ceiling. */
|
|
8
|
+
export declare const MAX_MCP_STARTUP_WAIT_MS = 1750;
|
|
3
9
|
/** Pure startup policy shared by runtime-facing CLI inspection and doctor. */
|
|
4
10
|
export declare function computeAutoloadStatus(name: string, config: Pick<MCPServerConfig, "enabled" | "autoload">, disabledServers: ReadonlySet<string>): AutoloadStatus;
|
|
@@ -22,6 +22,13 @@ export interface MCPToolOptions {
|
|
|
22
22
|
* owning manager/runtime. Resolved per call so late registration still applies.
|
|
23
23
|
*/
|
|
24
24
|
inputHandler?: () => MCPInputRequestHandler | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Exact MCP session control: false while the owning manager has this server
|
|
27
|
+
* suspended. Checked alongside `#sessionControlInvalidated` so a wrapper that
|
|
28
|
+
* outlives a resume/reconnect still fails locally instead of reaching the
|
|
29
|
+
* transport for a server this session no longer has active.
|
|
30
|
+
*/
|
|
31
|
+
isAvailable?: () => boolean;
|
|
25
32
|
}
|
|
26
33
|
export declare function isRetriableConnectionError(error: unknown): boolean;
|
|
27
34
|
/** Details included in MCP tool results for rendering */
|
|
@@ -66,6 +73,7 @@ export declare class MCPTool implements CustomTool<TSchema, MCPToolDetails> {
|
|
|
66
73
|
/** Server name */
|
|
67
74
|
readonly mcpServerName: string;
|
|
68
75
|
private connection;
|
|
76
|
+
invalidateForSessionControl(): void;
|
|
69
77
|
/** Create MCPTool instances for all tools from an MCP server lease/connection. */
|
|
70
78
|
static fromTools(target: MCPToolTarget, tools: MCPToolDefinition[], reconnect?: MCPReconnect, options?: MCPToolOptions): MCPTool[];
|
|
71
79
|
constructor(target: MCPToolTarget, tool: MCPToolDefinition, reconnect?: MCPReconnect | undefined, options?: MCPToolOptions);
|
|
@@ -90,6 +98,7 @@ export declare class DeferredMCPTool implements CustomTool<TSchema, MCPToolDetai
|
|
|
90
98
|
readonly mcpToolName: string;
|
|
91
99
|
/** Server name */
|
|
92
100
|
readonly mcpServerName: string;
|
|
101
|
+
invalidateForSessionControl(): void;
|
|
93
102
|
/** Create DeferredMCPTool instances for all tools from an MCP server */
|
|
94
103
|
static fromTools(serverName: string, tools: MCPToolDefinition[], getConnection: () => Promise<MCPServerConnection>, source?: SourceMeta, reconnect?: MCPReconnect, options?: MCPToolOptions): DeferredMCPTool[];
|
|
95
104
|
constructor(serverName: string, tool: MCPToolDefinition, getConnection: () => Promise<MCPServerConnection>, source?: SourceMeta, reconnect?: MCPReconnect | undefined, options?: MCPToolOptions);
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { MCPHttpServerConfig, MCPRequestOptions, MCPSseServerConfig, MCPTransport } from "../../runtime-mcp/types";
|
|
2
2
|
import { type MCPModernClientContext, type MCPProtocolEra } from "../protocol";
|
|
3
|
+
/** Live HTTP/SSE MCP transports awaiting postmortem release. Exposed for leak assertions/tests. */
|
|
4
|
+
export declare function liveHttpTransportCount(): number;
|
|
3
5
|
/**
|
|
4
6
|
* HTTP transport for MCP servers.
|
|
5
7
|
* Uses POST for requests, supports SSE responses.
|
|
@@ -38,6 +40,15 @@ export declare class HttpTransport implements MCPTransport {
|
|
|
38
40
|
startSSEListener(): Promise<void>;
|
|
39
41
|
request<T = unknown>(method: string, params?: Record<string, unknown>, options?: MCPRequestOptions): Promise<T>;
|
|
40
42
|
notify(method: string, params?: Record<string, unknown>): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* Terminate the server-side session on a signal or fatal exit, without the
|
|
45
|
+
* reader drain `close()` does: postmortem runs inside the signal handler,
|
|
46
|
+
* where an aborted SSE body read is never observed by JS, so awaiting the
|
|
47
|
+
* readers there never settles and the DELETE stays unreachable. `onClose` is
|
|
48
|
+
* deliberately not fired - the manager reacts to it by reconnecting, which
|
|
49
|
+
* would open a fresh server session on the way out.
|
|
50
|
+
*/
|
|
51
|
+
releaseForPostmortem(signal: AbortSignal): Promise<void>;
|
|
41
52
|
close(): Promise<void>;
|
|
42
53
|
}
|
|
43
54
|
/**
|
|
@@ -3,6 +3,33 @@ import type { AbortScope } from "../host/control/operations";
|
|
|
3
3
|
import { type SessionAttachment, type SessionRouter } from "../router";
|
|
4
4
|
import { ACP_SESSION_RECONNECT } from "../session-reconnect";
|
|
5
5
|
import type { SessionLifecycleMcpServer } from "./mcp";
|
|
6
|
+
/**
|
|
7
|
+
* Registration rounds one provider activation may spend chasing a moving attachment.
|
|
8
|
+
*
|
|
9
|
+
* The activation loop restarts whenever the Router attachment changes identity while it
|
|
10
|
+
* is registering, because the leases it just took belong to a connection that no longer
|
|
11
|
+
* exists. One reconnect costs one restart, so a handful covers any churn that is actually
|
|
12
|
+
* converging; beyond that the attachment is rotating faster than registration completes
|
|
13
|
+
* and another round only re-takes leases that will be invalidated again. Bounding this is
|
|
14
|
+
* what turns "many session hosts contend for one agent dir" from an unbounded spin into a
|
|
15
|
+
* reported failure (issue #5658).
|
|
16
|
+
*/
|
|
17
|
+
export declare const PROVIDER_ACTIVATION_MAX_ATTEMPTS = 8;
|
|
18
|
+
/**
|
|
19
|
+
* Wall-clock budget for the same loop.
|
|
20
|
+
*
|
|
21
|
+
* The attempt cap alone bounds rounds, not time: every round is a `#requestSession` round
|
|
22
|
+
* trip per provider, so under lease contention attempts are slow rather than fast-spinning
|
|
23
|
+
* and eight of them can still outlast the caller. The budget is sized to a third of
|
|
24
|
+
* {@link ACP_PROMPT_INACTIVITY_TIMEOUT_MS} so a prompt stalled in provider preflight fails
|
|
25
|
+
* with this error — which names the contended capability — with room to spare before the
|
|
26
|
+
* ACP prompt watchdog reports the same stall as undifferentiated silence.
|
|
27
|
+
*
|
|
28
|
+
* It gates *starting* another round, never interrupting one in flight: a single slow but
|
|
29
|
+
* healthy registration keeps whatever time it needs, and only a retry decided after the
|
|
30
|
+
* deadline is refused.
|
|
31
|
+
*/
|
|
32
|
+
export declare const PROVIDER_ACTIVATION_BUDGET_MS: number;
|
|
6
33
|
type JsonObject = Record<string, unknown>;
|
|
7
34
|
/** The small agent-side ACP surface used for reverse requests. */
|
|
8
35
|
export interface AcpReverseConnection {
|
|
@@ -16,4 +16,12 @@ export type AcpFinalTextResolution = {
|
|
|
16
16
|
};
|
|
17
17
|
export declare function boundAcpFinalText(value: string): BoundedAcpFinalText;
|
|
18
18
|
export declare function acpFinalTextFromMessage(message: unknown): BoundedAcpFinalText;
|
|
19
|
+
/**
|
|
20
|
+
* Assistant-content presence is trimmed everywhere in the prompt pipeline: whitespace carries no
|
|
21
|
+
* assistant content. The ACP retry gate, prompt reconciliation
|
|
22
|
+
* (`sdk/bus/prompt-reconciliation.ts`) and terminal publication must agree, otherwise a terminal
|
|
23
|
+
* the retry gate treats as "no output" can still publish a whitespace chunk alongside the retry's
|
|
24
|
+
* real answer (review P2 on #5628).
|
|
25
|
+
*/
|
|
26
|
+
export declare function hasAcpFinalTextContent(value: string): boolean;
|
|
19
27
|
export declare function resolveAcpFinalText(streamed: string, finalText: string): AcpFinalTextResolution;
|
|
@@ -4,7 +4,7 @@ import { type SdkHostModelResolver } from "../host/model-pin";
|
|
|
4
4
|
import { type DirectoryMigrationPolicy } from "../session-directory";
|
|
5
5
|
import { type BrokerDiscovery, type BrokerPublicationObservation, type RedactedBrokerDiscovery } from "./discovery";
|
|
6
6
|
import { type LifecycleDurableEffectsReceipt, LifecycleLedger, type LifecycleStartupFailureReceipt } from "./lifecycle-ledger";
|
|
7
|
-
import { SessionIndex } from "./session-index";
|
|
7
|
+
import { type IndexedSession, SessionIndex } from "./session-index";
|
|
8
8
|
import { type MasterCapabilityVerifier, type SpawnSubstrateFailure, type SpawnSubstrateProvider } from "./spawn-authority";
|
|
9
9
|
export interface BrokerSettings {
|
|
10
10
|
agentDir: string;
|
|
@@ -149,6 +149,9 @@ export type BrokerResponse = {
|
|
|
149
149
|
durableEffects?: LifecycleDurableEffectsReceipt;
|
|
150
150
|
startupFailure?: LifecycleStartupFailureReceipt;
|
|
151
151
|
};
|
|
152
|
+
export type InputNormalization = {
|
|
153
|
+
input: Record<string, unknown>;
|
|
154
|
+
} | BrokerResponse;
|
|
152
155
|
/** Complete five-leg child endpoint pin captured at registration. */
|
|
153
156
|
export type SpawnHostRegistration = {
|
|
154
157
|
sessionId: string;
|
|
@@ -201,6 +204,13 @@ export interface SpawnPromptLayer {
|
|
|
201
204
|
pinned: SpawnHostRegistration;
|
|
202
205
|
}): Promise<SpawnQ26Reconciliation>;
|
|
203
206
|
}
|
|
207
|
+
/** Exact admission predicate for the child host row published after launch. */
|
|
208
|
+
export declare function spawnRegistrationMatches(candidate: IndexedSession, expected: {
|
|
209
|
+
childId: string;
|
|
210
|
+
cwd: string;
|
|
211
|
+
stateRoot: string;
|
|
212
|
+
}): boolean;
|
|
213
|
+
export declare function normalizeBrokerInput(operation: string, input: Record<string, unknown>): InputNormalization;
|
|
204
214
|
/** Test seam for lifecycle serialization identity. */
|
|
205
215
|
export declare function lifecycleTargetForTest(operation: string, input: Record<string, unknown>): unknown;
|
|
206
216
|
/** Tombstone prefix used by {@link Broker.reclaimStaleLock} when a dead owner's lock is renamed aside. */
|
|
@@ -235,7 +245,8 @@ export interface BrokerLockArtifactReapResult {
|
|
|
235
245
|
* of the lock's dev+ino, so a machine accrues one directory per dead owner and
|
|
236
246
|
* nothing ever removed them (54 on the install in #3963). Reaping is
|
|
237
247
|
* best-effort and fail-closed: anything live, unreadable, permission-denied, or
|
|
238
|
-
* otherwise ambiguous is kept
|
|
248
|
+
* otherwise ambiguous is kept. Retained paths are logged at debug level and
|
|
249
|
+
* summarized in one warning per reap pass.
|
|
239
250
|
*/
|
|
240
251
|
export declare function reapStaleBrokerLockArtifacts(input: {
|
|
241
252
|
agentDir: string;
|
|
@@ -28,6 +28,51 @@ export interface EnsureBrokerSettings {
|
|
|
28
28
|
*/
|
|
29
29
|
env?: NodeJS.ProcessEnv;
|
|
30
30
|
}
|
|
31
|
+
export interface BrokerStartupLockTestHooks {
|
|
32
|
+
onAcquired?: () => void;
|
|
33
|
+
onContended?: () => void;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Test-only phase observation for detached broker startup regressions. The
|
|
37
|
+
* signal is opt-in through the child environment and never affects broker
|
|
38
|
+
* ownership or error handling when the test seam is absent.
|
|
39
|
+
*/
|
|
40
|
+
export declare function emitBrokerStartupTestSignal(signal: string): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* The parent discovery budget published as a composition rather than a number.
|
|
43
|
+
* A test that stages a fence contention has to time itself against these legs,
|
|
44
|
+
* and retyping the sum makes it win or lose on scheduler noise while letting a
|
|
45
|
+
* change to any single leg silently re-tune it (#5604). This is the one source
|
|
46
|
+
* of truth for how the budget is built; nothing may restate the arithmetic.
|
|
47
|
+
*/
|
|
48
|
+
export declare const BROKER_DISCOVERY_BUDGET: {
|
|
49
|
+
readonly staleRetirementMs: 5000;
|
|
50
|
+
readonly startupLockWaitMs: 9000;
|
|
51
|
+
readonly publicationMs: 15000;
|
|
52
|
+
/** What the startup fence grants its holder: retirement plus one publication attempt. */
|
|
53
|
+
readonly fenceOperationMs: number;
|
|
54
|
+
/**
|
|
55
|
+
* When a child spawned under the parent's spawn lock gives up on the fence,
|
|
56
|
+
* measured from that lock acquisition: the parent retires the stale incumbent
|
|
57
|
+
* first, then the child exhausts its own fence wait. Not a production
|
|
58
|
+
* constant -- an emergent property of the two legs that precede publication.
|
|
59
|
+
*/
|
|
60
|
+
readonly childFenceWaitMs: number;
|
|
61
|
+
readonly discoveryMs: number;
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Clock the discovery budget is measured on. The default is the real one; a test
|
|
65
|
+
* installs a virtual clock to assert the composition order -- stale retirement,
|
|
66
|
+
* then the child fence, then startup and publication -- in-process instead of
|
|
67
|
+
* racing three wall clocks against each other (#5604). Reaping keeps its own
|
|
68
|
+
* {@link ReapTiming} seam and is deliberately not driven from here.
|
|
69
|
+
*/
|
|
70
|
+
export interface EnsureBrokerTiming {
|
|
71
|
+
now(): number;
|
|
72
|
+
sleep(ms: number): Promise<void>;
|
|
73
|
+
}
|
|
74
|
+
/** Test hook: drives the discovery budget on a controllable clock. */
|
|
75
|
+
export declare function setEnsureBrokerTimingForTest(timing: EnsureBrokerTiming | undefined): void;
|
|
31
76
|
type SpawnLockOptions = Pick<FileLockOptions, "retries" | "retryDelayMs" | "signal">;
|
|
32
77
|
declare function readBrokerDiscoveryBeforeDeadline(agentDir: string, heartbeatTtlMs: number | undefined, deadline: number): Promise<BrokerDiscovery | null>;
|
|
33
78
|
/**
|
|
@@ -48,7 +93,7 @@ declare function acquireSpawnLock(agentDir: string, options?: SpawnLockOptions):
|
|
|
48
93
|
* The parent-held spawn lock prevents ordinary stampedes; this second fence keeps
|
|
49
94
|
* startup single-flight if that detached child's launcher dies and its lock is reclaimed.
|
|
50
95
|
*/
|
|
51
|
-
export declare function withBrokerStartupLock<T>(agentDir: string, operation: (deadline: number) => Promise<T
|
|
96
|
+
export declare function withBrokerStartupLock<T>(agentDir: string, operation: (deadline: number) => Promise<T>, testHooks?: BrokerStartupLockTestHooks): Promise<T>;
|
|
52
97
|
/**
|
|
53
98
|
* Tail of the detached broker's stderr folded into a discovery failure.
|
|
54
99
|
*
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export declare function brokerIdentityPath(agentDir: string): string;
|
|
2
2
|
export declare function getBrokerIdentityKey(agentDir: string): Promise<string>;
|
|
3
|
-
export declare function deriveIdempotencyIdentity(agentDir: string, operation: string, callerKey: string,
|
|
3
|
+
export declare function deriveIdempotencyIdentity(agentDir: string, operation: string, callerKey: string, targetHash?: string): Promise<string>;
|
|
4
|
+
/** Identity format used by lifecycle rows written before target binding. */
|
|
5
|
+
export declare function deriveLegacyIdentity(agentDir: string, operation: string, callerKey: string): Promise<string>;
|
|
4
6
|
export declare function deriveLegacyTargetIdentity(agentDir: string, operation: string, callerKey: string, canonicalTargetHash: string): Promise<string>;
|
|
@@ -95,6 +95,23 @@ export type BeginResult = {
|
|
|
95
95
|
kind: "in_progress";
|
|
96
96
|
entry: LifecycleLedgerEntry;
|
|
97
97
|
};
|
|
98
|
+
type BoundedSourceReadRejection = "not-regular-file" | "oversized-by-stat" | "oversized-by-read" | "read-error";
|
|
99
|
+
/**
|
|
100
|
+
* Why a terminal read-back produced no entry. `absent` means nothing terminal is
|
|
101
|
+
* recorded for the request; `rejected` means the source or a row was refused, which
|
|
102
|
+
* is evidence of a damaged ledger rather than of an unpersisted operation. Collapsing
|
|
103
|
+
* the two lets a corrupt source or row read as "not yet written" and unfence the session.
|
|
104
|
+
*/
|
|
105
|
+
export type TerminalReadBackRejection = "bounds" | "shape" | "undecodable" | "row-not-attributable" | "partial-row" | BoundedSourceReadRejection;
|
|
106
|
+
export type TerminalReadBack = {
|
|
107
|
+
kind: "terminal";
|
|
108
|
+
entry: LifecycleLedgerEntry;
|
|
109
|
+
} | {
|
|
110
|
+
kind: "absent";
|
|
111
|
+
} | {
|
|
112
|
+
kind: "rejected";
|
|
113
|
+
reason: TerminalReadBackRejection;
|
|
114
|
+
};
|
|
98
115
|
export interface LifecycleLedgerLimits {
|
|
99
116
|
maxBytes?: number;
|
|
100
117
|
maxLineBytes?: number;
|
|
@@ -121,14 +138,15 @@ export declare class LifecycleLedger {
|
|
|
121
138
|
* uncertainly persists that conclusion, and refusing to read it back would report a
|
|
122
139
|
* synced row as unpersisted and replace its true reason with a generic one.
|
|
123
140
|
*/
|
|
124
|
-
readTerminal(identity: string, requestHash: string): Promise<
|
|
125
|
-
findByOperationKey(operationKey: string): LifecycleLedgerEntry | undefined;
|
|
141
|
+
readTerminal(identity: string, requestHash: string): Promise<TerminalReadBack>;
|
|
142
|
+
findByOperationKey(operationKey: string, fingerprint?: string): LifecycleLedgerEntry | undefined;
|
|
143
|
+
findAnyByOperationKey(operationKey: string): LifecycleLedgerEntry | undefined;
|
|
126
144
|
/**
|
|
127
145
|
* Legacy target-inclusive rows predate the operation/key index. Their opaque
|
|
128
146
|
* identities cannot establish that a different target is safe, so callers
|
|
129
147
|
* must reject rather than create a second admission.
|
|
130
148
|
*/
|
|
131
|
-
hasLegacyIdentity(): boolean;
|
|
149
|
+
hasLegacyIdentity(excludedIdentities?: ReadonlySet<string>): boolean;
|
|
132
150
|
migrateIdentity(from: string, to: string, metadata: {
|
|
133
151
|
operationKey: string;
|
|
134
152
|
fingerprint: string;
|
|
@@ -137,6 +155,7 @@ export declare class LifecycleLedger {
|
|
|
137
155
|
begin(identity: string, requestHash: string, metadata?: {
|
|
138
156
|
operationKey?: string;
|
|
139
157
|
fingerprint?: string;
|
|
158
|
+
intendedSessionId?: string;
|
|
140
159
|
}): Promise<BeginResult>;
|
|
141
160
|
transition(identity: string, state: LifecycleState, fields?: Omit<Partial<LifecycleLedgerEntry>, "identity" | "requestHash" | "state" | "ts">): Promise<LifecycleLedgerEntry>;
|
|
142
161
|
assertSupportedStateVersions(): Promise<void>;
|
|
@@ -152,3 +171,4 @@ export declare class LifecycleLedger {
|
|
|
152
171
|
listUncertainCreatesBySessionId(sessionId: string, effectMarker?: string, remoteCreateKey?: string): LifecycleLedgerEntry[];
|
|
153
172
|
findPendingCleanupByTarget(sessionId: string, cwd: string, transcriptPath: string): LifecycleLedgerEntry | undefined;
|
|
154
173
|
}
|
|
174
|
+
export {};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type ChildProcess } from "node:child_process";
|
|
2
2
|
import { type GjcLaunchWorktreePlan } from "../../gjc-runtime/launch-worktree";
|
|
3
|
+
import type { SessionWorkLease } from "../../session/session-work-lease";
|
|
3
4
|
import type { SessionLifecycleMcpServer } from "../acp/mcp";
|
|
4
5
|
import { type SdkStartupFailure, type SdkStartupRollbackResult } from "../startup-capability";
|
|
5
6
|
import type { Broker, BrokerCleanupEvidence, BrokerResponse } from "./broker";
|
|
@@ -8,8 +9,11 @@ import { type ProcessIncarnationCommandRunner, type ProcessIncarnationOptions, p
|
|
|
8
9
|
import { type SdkInternalSpawnCommand } from "./runtime";
|
|
9
10
|
import { type IndexedSession } from "./session-index";
|
|
10
11
|
export { type ProcessIncarnationCommandRunner, type ProcessIncarnationOptions, parseDarwinProcessIncarnation, processIncarnation, };
|
|
12
|
+
/** Remove lifecycle stderr artifacts abandoned by a broker or detached host crash. */
|
|
13
|
+
export declare function reapOrphanedChildStderrLogs(agentDir: string, limit?: number): Promise<number>;
|
|
14
|
+
export declare function lifecycleFailureMessage(message: string, child?: ChildProcess): string;
|
|
11
15
|
export declare function terminalUncertainStartupMessage(response: BrokerResponse): string;
|
|
12
|
-
export declare function waitForChildSpawn(spawned: Pick<ChildProcess, "off" | "on" | "once">, onPostSpawnError?: (error: Error) => void): Promise<void>;
|
|
16
|
+
export declare function waitForChildSpawn(spawned: Pick<ChildProcess, "off" | "on" | "once" | "pid">, onPostSpawnError?: (error: Error) => void): Promise<void>;
|
|
13
17
|
export interface LifecycleDeadlines {
|
|
14
18
|
receivedAt: number;
|
|
15
19
|
requestedReadinessTimeoutMs: number;
|
|
@@ -245,8 +249,9 @@ export interface LifecycleExecutionOutcome {
|
|
|
245
249
|
/** Returns the response together with every durable lifecycle fact needed for truthful replay. */
|
|
246
250
|
export declare function executeLifecycle(broker: Broker, operation: string, input: Input, identity: string, cleanup?: CleanupEvidence): Promise<LifecycleExecutionOutcome>;
|
|
247
251
|
/**
|
|
248
|
-
* The live
|
|
249
|
-
*
|
|
252
|
+
* The live SDK demand count of the session endpoint this process serves, or
|
|
253
|
+
* `undefined` while this process serves no endpoint. Observer-only sockets are
|
|
254
|
+
* excluded by {@link SessionHostRuntimeEvidence.observerClients}.
|
|
250
255
|
*
|
|
251
256
|
* Only the SDK session runtime owns the real socket table, so it publishes a
|
|
252
257
|
* reader here instead of every consumer re-deriving attachment from the OS.
|
|
@@ -257,8 +262,10 @@ export type SessionHostAttachmentReader = () => number;
|
|
|
257
262
|
export interface SessionHostRuntimeEvidence {
|
|
258
263
|
/** This runtime's own live SDK client/socket subscription count. */
|
|
259
264
|
attachedClients: SessionHostAttachmentReader;
|
|
260
|
-
/**
|
|
261
|
-
|
|
265
|
+
/** Optional subset of attached sockets that only observes the host. */
|
|
266
|
+
observerClients?: SessionHostAttachmentReader;
|
|
267
|
+
/** One authoritative lease held by every admitted or continuing work state. */
|
|
268
|
+
workLease: SessionWorkLease;
|
|
262
269
|
}
|
|
263
270
|
/** One runtime's live publication, retractable only by its owner. */
|
|
264
271
|
export interface SessionHostRuntimePublication {
|
|
@@ -275,19 +282,19 @@ export interface SessionHostRuntimePublication {
|
|
|
275
282
|
*/
|
|
276
283
|
export declare function publishSessionHostRuntimeEvidence(evidence: SessionHostRuntimeEvidence): SessionHostRuntimePublication;
|
|
277
284
|
/**
|
|
278
|
-
* This process's currently
|
|
285
|
+
* This process's currently demanding SDK client count, summed across every
|
|
279
286
|
* serving runtime, or `undefined` when no runtime publishes a readable count
|
|
280
287
|
* (before startup, after teardown, or when every reader itself fails). Never
|
|
281
288
|
* guesses: absence of a reader is absence of evidence.
|
|
282
289
|
*/
|
|
283
290
|
export declare function sessionHostAttachedClients(): number | undefined;
|
|
284
291
|
/**
|
|
285
|
-
* Whether any runtime in this process
|
|
292
|
+
* Whether any runtime in this process still holds its authoritative work lease.
|
|
286
293
|
*
|
|
287
294
|
* Positive evidence only: a runtime that publishes nothing, or whose reader
|
|
288
295
|
* fails, reports no work, so this can never keep an abandoned host alive.
|
|
289
296
|
*/
|
|
290
|
-
export declare function
|
|
297
|
+
export declare function sessionHostWorkLeaseActive(): boolean;
|
|
291
298
|
/**
|
|
292
299
|
* How often a live broker re-checks its own session registrations against OS
|
|
293
300
|
* process liveness.
|