@gajae-code/coding-agent 0.17.2 → 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 +194 -0
- 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 +18 -0
- package/dist/types/config/file-lock.d.ts +9 -1
- package/dist/types/config/model-profile-activation.d.ts +45 -1
- package/dist/types/config/model-registry.d.ts +11 -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/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 +55 -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/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/broker/broker.d.ts +13 -2
- 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 +37 -0
- package/dist/types/sdk/prompt-tool-boundary.d.ts +73 -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 +48 -4
- 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/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.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 +22 -1
- 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 +175 -117
- package/src/commands/setup.ts +2 -0
- package/src/commands/skills.ts +11 -0
- package/src/config/autorouting-tier-map.ts +14 -0
- package/src/config/file-lock.ts +147 -51
- package/src/config/model-profile-activation.ts +334 -43
- package/src/config/model-registry.ts +183 -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 +507 -81
- 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/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/session-state-lock.ts +165 -24
- package/src/gjc-runtime/ultragoal-succession.ts +31 -3
- package/src/internal-urls/docs-index.generated.ts +20 -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 +408 -35
- package/src/modes/acp/startup-provenance.ts +59 -0
- package/src/modes/components/custom-provider-wizard.ts +308 -7
- package/src/modes/components/oauth-selector.ts +9 -0
- package/src/modes/components/session-selector.ts +47 -4
- 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 +161 -15
- 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 +27 -8
- package/src/sdk/broker/broker.ts +378 -52
- 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 +690 -80
- 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 +138 -2
- package/src/sdk/host/session-runtime.ts +311 -97
- 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 +133 -1
- package/src/sdk/prompt-tool-boundary.ts +121 -0
- package/src/sdk/protocol/operation-inventory.generated.json +106 -0
- package/src/sdk/router/session-router.ts +9 -1
- package/src/sdk/session.ts +182 -7
- package/src/sdk/startup-capability.ts +1 -1
- package/src/sdk/transport/relay.ts +71 -6
- package/src/sdk/transport/serve-cli.ts +397 -42
- 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/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/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.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
|
@@ -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
|
/**
|
|
@@ -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;
|
|
@@ -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.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { SDK_STATE_VERSION, SESSION_INDEX_EVENT_VERSION } from "./state-version";
|
|
2
2
|
export type SessionIndexEventType = "host_registered" | "host_heartbeat" | "host_unregistered" | "lifecycle_started" | "lifecycle_terminal" | "session_closed" | "session_deleted" | "record_reconciled";
|
|
3
3
|
export type SessionActivityState = "active" | "idle";
|
|
4
|
-
/**
|
|
4
|
+
/** Host-reported or broker-coalesced heartbeat: state plus the observation time. */
|
|
5
5
|
export interface SessionActivity {
|
|
6
6
|
state: SessionActivityState;
|
|
7
7
|
at: number;
|
|
@@ -9,6 +9,8 @@ export interface SessionActivity {
|
|
|
9
9
|
/** Events persisted without an OS process incarnation (v1/v2 era) are legacy provenance. */
|
|
10
10
|
export type SessionIdentityProvenance = "composite" | "legacy";
|
|
11
11
|
export type SessionTombstoneRule = "retain" | "expire";
|
|
12
|
+
/** Durable provenance for a retired host registration. */
|
|
13
|
+
export type HostUnregisteredReason = "process_exited" | "detached_idle";
|
|
12
14
|
/**
|
|
13
15
|
* Injected retention policy (C3). The broker schedules compaction independently of
|
|
14
16
|
* rotation; settings apply at the next scheduled compaction. `clock` drives both
|
|
@@ -76,6 +78,7 @@ export interface SessionIndexEvent {
|
|
|
76
78
|
/** Immutable endpoint file identity captured by the broker at registration. */
|
|
77
79
|
endpointFileId?: string;
|
|
78
80
|
lifecycleRequestId?: string;
|
|
81
|
+
hostUnregisteredReason?: HostUnregisteredReason;
|
|
79
82
|
terminalUncertain?: boolean;
|
|
80
83
|
/**
|
|
81
84
|
* Distinguishes the terminal-uncertain claim written by a forced stop of a
|
|
@@ -105,6 +108,7 @@ export interface IndexedSession {
|
|
|
105
108
|
live: boolean;
|
|
106
109
|
indexSeq: number;
|
|
107
110
|
lifecycleRequestId?: string;
|
|
111
|
+
hostUnregisteredReason?: HostUnregisteredReason;
|
|
108
112
|
terminalUncertain?: boolean;
|
|
109
113
|
/** True only for a terminal-uncertain claim written by a forced stale-worktree release. */
|
|
110
114
|
forcedStaleRelease?: boolean;
|
|
@@ -174,6 +178,8 @@ export interface SessionIndexAuditRecord {
|
|
|
174
178
|
export declare const sessionIndexChecksum: (event: Omit<SessionIndexEvent, "checksum">) => string;
|
|
175
179
|
/** Coalesced heartbeat checkpoint rate cap (C2): at most one per session per minute. */
|
|
176
180
|
export declare const SESSION_HEARTBEAT_INTERVAL_MS = 60000;
|
|
181
|
+
/** A stale-host retirement requires silence well beyond the broker freshness window. */
|
|
182
|
+
export declare const DEAD_HOST_HEARTBEAT_SILENCE_MS: number;
|
|
177
183
|
export declare const DEFAULT_SESSION_RETENTION_MAX_AGE_MS: number;
|
|
178
184
|
export declare const DEFAULT_SESSION_RETENTION_MAX_ROWS = 25000;
|
|
179
185
|
export declare class SessionIndex {
|
|
@@ -201,7 +207,20 @@ export declare class SessionIndex {
|
|
|
201
207
|
refresh(): Promise<void>;
|
|
202
208
|
get indexSeq(): number;
|
|
203
209
|
append(input: Omit<SessionIndexEvent, "version" | "indexSeq" | "checksum" | "ts"> & Partial<Pick<SessionIndexEvent, "ts">>): Promise<SessionIndexEvent>;
|
|
204
|
-
|
|
210
|
+
/**
|
|
211
|
+
* Atomically fence an exact, long-silent dead-host authority before a caller
|
|
212
|
+
* removes state outside the broker index. The comparison and terminal event
|
|
213
|
+
* append share the machine-global index lock, so a heartbeat, successor
|
|
214
|
+
* registration, or unresolved-authority update that wins the lock prevents
|
|
215
|
+
* destructive coordinator cleanup.
|
|
216
|
+
*/
|
|
217
|
+
retireStaleIfCurrent(expected: {
|
|
218
|
+
sessionId: string;
|
|
219
|
+
workspace: string;
|
|
220
|
+
endpointGeneration: number;
|
|
221
|
+
endpointIncarnation: string;
|
|
222
|
+
}): Promise<"retired" | "already_retired" | "not_found" | "stale">;
|
|
223
|
+
unregisterIfCurrent(expected: Pick<SessionIndexEvent, "sessionId" | "locator" | "endpointGeneration" | "pid" | "indexSeq" | "endpointMtimeMs" | "endpointFileId" | "lifecycleRequestId" | "processIncarnation" | "hostIncarnation">, reason?: HostUnregisteredReason): Promise<boolean>;
|
|
205
224
|
/** Hold the canonical index lock across an authority-sensitive operation. */
|
|
206
225
|
withLocked<T>(callback: () => Promise<T>): Promise<T>;
|
|
207
226
|
snapshot(): Promise<void>;
|
|
@@ -210,7 +229,7 @@ export declare class SessionIndex {
|
|
|
210
229
|
* injected retention policy to a fresh snapshot and truncates the log.
|
|
211
230
|
*/
|
|
212
231
|
compact(): Promise<void>;
|
|
213
|
-
listSessions(): SessionList;
|
|
232
|
+
listSessions(probedIncarnations?: ReadonlyMap<string, string | undefined>): SessionList;
|
|
214
233
|
/**
|
|
215
234
|
* Credential-free proof for one exact public endpoint generation.
|
|
216
235
|
*
|
|
@@ -12,6 +12,8 @@ export type SpawnClaimV2 = {
|
|
|
12
12
|
status: "owned" | "consumed";
|
|
13
13
|
};
|
|
14
14
|
childId?: string;
|
|
15
|
+
/** Launch proof retained while registration is still unbound so a later retry can re-prove or close it. */
|
|
16
|
+
substrateProof?: SpawnSubstrateProof;
|
|
15
17
|
seed?: SeedDeliveryV2;
|
|
16
18
|
authorityRef?: string;
|
|
17
19
|
createdAt: number;
|
|
@@ -122,6 +124,8 @@ export type SpawnClaimTransition = {
|
|
|
122
124
|
leaseEpoch?: string;
|
|
123
125
|
/** The fresh child ID is committed before substrate launch. */
|
|
124
126
|
childId?: string;
|
|
127
|
+
/** Launch proof may be appended to the pre-registration state for later reconciliation. */
|
|
128
|
+
substrateProof?: SpawnSubstrateProof;
|
|
125
129
|
/** Required for seed and terminal state transitions that carry Q26 facts. */
|
|
126
130
|
seed?: SeedDeliveryV2;
|
|
127
131
|
failure?: SpawnSubstrateFailure;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** Parse and run the private source/compiled CLI drainer route. */
|
|
2
|
+
export declare function runSdkStderrDrainerFromArgv(argv: readonly string[]): Promise<void>;
|
|
3
|
+
/**
|
|
4
|
+
* Drain a detached lifecycle host's stderr without letting a noisy child grow
|
|
5
|
+
* its diagnostic artifact. The drainer owns the read side of the pipe, so the
|
|
6
|
+
* host remains attached to a process that outlives the broker itself.
|
|
7
|
+
*
|
|
8
|
+
* The artifact is written through one descriptor opened up front: once the
|
|
9
|
+
* broker has finished reading the startup diagnostic it unlinks the path, and
|
|
10
|
+
* the remaining output lands on an unlinked inode that disappears with this
|
|
11
|
+
* process instead of accumulating under the agent directory.
|
|
12
|
+
*/
|
|
13
|
+
export declare function runSdkStderrDrainer(logPath: string, maxBytes: number): Promise<void>;
|
|
@@ -25,6 +25,7 @@ import { Settings } from "../../config/settings";
|
|
|
25
25
|
import type { ExtensionAPI, ExtensionContext } from "../../extensibility/extensions";
|
|
26
26
|
import { type WorkflowGateEmitter, type WorkflowGateTerminalProof } from "../../modes/shared/agent-wire/workflow-gate-broker";
|
|
27
27
|
import type { AgentSessionEvent } from "../../session/agent-session";
|
|
28
|
+
import { type SessionWorkLease, type SessionWorkLeaseHandle } from "../../session/session-work-lease";
|
|
28
29
|
import type { AskAnswerSource, AskAnswerSourceResult, AskRemoteControl } from "../../tools";
|
|
29
30
|
import { type SessionHostRuntimePublication } from "../broker/lifecycle";
|
|
30
31
|
import { type SessionSdkHost } from "../host";
|
|
@@ -342,6 +343,17 @@ interface SessionRuntime {
|
|
|
342
343
|
serverStopped: boolean;
|
|
343
344
|
/** This runtime's own host-liveness publication; only its teardown may retract it. */
|
|
344
345
|
evidencePublication?: SessionHostRuntimePublication;
|
|
346
|
+
/** Authoritative lease held by admitted input, execution, and recovery work. */
|
|
347
|
+
workLease: SessionWorkLease;
|
|
348
|
+
/** Lease retained while an uncorrelated agent loop is active. */
|
|
349
|
+
activeWorkLease?: SessionWorkLeaseHandle;
|
|
350
|
+
/** Lease retained while an agent loop is paused awaiting resumption. */
|
|
351
|
+
pausedWorkLease?: SessionWorkLeaseHandle;
|
|
352
|
+
/**
|
|
353
|
+
* Handles of queued submissions promoted to their own run, handed over at
|
|
354
|
+
* the promotion boundary and retired by that run's agent_start.
|
|
355
|
+
*/
|
|
356
|
+
promotedWorkLeases: SessionWorkLeaseHandle[];
|
|
345
357
|
brokerRegistrationReleased: boolean;
|
|
346
358
|
verbosity: "lean" | "verbose";
|
|
347
359
|
/** Whether the agent loop is currently running (drives the typing indicator). */
|
|
@@ -639,5 +651,12 @@ export declare function createNotificationsExtension(api: ExtensionAPI, options?
|
|
|
639
651
|
expectedEpoch?: number;
|
|
640
652
|
};
|
|
641
653
|
}) => Promise<RunSettlementProof>;
|
|
654
|
+
/**
|
|
655
|
+
* Live, SYNCHRONOUS view of the dispatched tool calls the run resource
|
|
656
|
+
* ledger holds for an execution handle (#5637). Strictly read-only: it
|
|
657
|
+
* never claims, seals or otherwise mutates ledger state. Optional so an
|
|
658
|
+
* older host that does not thread it degrades to the event-derived set.
|
|
659
|
+
*/
|
|
660
|
+
pendingToolExecutions?: (handle: string) => readonly string[];
|
|
642
661
|
};
|
|
643
662
|
}): void;
|
|
@@ -285,8 +285,10 @@ export declare const SDK_LIFECYCLE_ROUTER_PROTOCOL_VERSION = 1;
|
|
|
285
285
|
* first refusal, so an owner still running the generation-178 router keeps
|
|
286
286
|
* killing a session's mirroring after one transient rejection and must be
|
|
287
287
|
* replaced across this upgrade.
|
|
288
|
+
* Generation 190 acknowledges the protected prompt-deadline boundary change,
|
|
289
|
+
* so generation-189 owners are replaced instead of retaining the old path.
|
|
288
290
|
*/
|
|
289
|
-
export declare const DAEMON_GENERATION =
|
|
291
|
+
export declare const DAEMON_GENERATION = 192;
|
|
290
292
|
/**
|
|
291
293
|
* Serving-compatibility boundary for daemon lifecycle requests. Epoch 7
|
|
292
294
|
* requires durable publication receipts and acknowledged attachment dispatch,
|
|
@@ -725,6 +725,11 @@ export interface TelegramDaemonOptions {
|
|
|
725
725
|
enabled: boolean;
|
|
726
726
|
};
|
|
727
727
|
idleTimeoutMs?: number;
|
|
728
|
+
/**
|
|
729
|
+
* Standalone daemon owners keep Telegram command ingress alive while no SDK
|
|
730
|
+
* endpoints are attached. Embedded/test daemons retain finite-idle behavior.
|
|
731
|
+
*/
|
|
732
|
+
keepAliveWithoutAttachments?: boolean;
|
|
728
733
|
/** TTL for durable topic-adoption intents (default 10 minutes). Observed, not a fixed contract. */
|
|
729
734
|
adoptionIntentTtlMs?: number;
|
|
730
735
|
pid?: number;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import { PublicCommandFailure } from "../../cli/public-command-errors";
|
|
1
2
|
import { type IndexedSession } from "../broker/session-index";
|
|
2
|
-
export declare class SdkMasterCliError extends
|
|
3
|
+
export declare class SdkMasterCliError extends PublicCommandFailure {
|
|
3
4
|
readonly code: string;
|
|
4
5
|
readonly exitCode: 1 | 2;
|
|
5
|
-
constructor(code: string,
|
|
6
|
+
constructor(code: string, _message: string, exitCode?: 1 | 2);
|
|
6
7
|
}
|
|
7
8
|
export interface SdkSpawnArgs {
|
|
8
9
|
cwd?: string;
|
|
@@ -26,11 +27,6 @@ export interface SdkSpawnRendered {
|
|
|
26
27
|
turnId?: string;
|
|
27
28
|
status?: string;
|
|
28
29
|
};
|
|
29
|
-
idempotencyKey?: string;
|
|
30
|
-
error?: {
|
|
31
|
-
code: string;
|
|
32
|
-
message: string;
|
|
33
|
-
};
|
|
34
30
|
}
|
|
35
31
|
export interface SdkSpawnDependencies {
|
|
36
32
|
env: Record<string, string | undefined>;
|
|
@@ -48,9 +44,9 @@ export interface SdkSpawnDependencies {
|
|
|
48
44
|
*/
|
|
49
45
|
export declare function selectNewestMasterAttestationEpoch(rows: readonly IndexedSession[], ownerSessionId: string): string | undefined;
|
|
50
46
|
/** Projects an arbitrary Broker response onto the allowlisted render shape. */
|
|
51
|
-
export declare function safeSpawnRender(response: unknown): {
|
|
47
|
+
export declare function safeSpawnRender(response: unknown, idempotencyKey?: string): {
|
|
52
48
|
rendered: SdkSpawnRendered;
|
|
53
|
-
exitCode: 0
|
|
49
|
+
exitCode: 0;
|
|
54
50
|
};
|
|
55
51
|
export declare function renderSpawnTable(rendered: SdkSpawnRendered): string;
|
|
56
52
|
/**
|
|
@@ -59,5 +55,5 @@ export declare function renderSpawnTable(rendered: SdkSpawnRendered): string;
|
|
|
59
55
|
*/
|
|
60
56
|
export declare function runSdkSpawn(args: SdkSpawnArgs, dependencies?: Partial<SdkSpawnDependencies>): Promise<{
|
|
61
57
|
rendered: SdkSpawnRendered;
|
|
62
|
-
exitCode: 0
|
|
58
|
+
exitCode: 0;
|
|
63
59
|
}>;
|
|
@@ -76,7 +76,25 @@ export interface SdkTailEnvelopeV1 {
|
|
|
76
76
|
items: SdkTailItemV1[];
|
|
77
77
|
}
|
|
78
78
|
export declare function tailItemKey(item: SdkTailItemV1): string;
|
|
79
|
-
/**
|
|
79
|
+
/**
|
|
80
|
+
* Holds positioned live frames until the checkpoint can stamp their
|
|
81
|
+
* authoritative revision, and keeps stamping after it.
|
|
82
|
+
*
|
|
83
|
+
* A positioned frame (generation+seq) that carries no revision after the
|
|
84
|
+
* checkpoint used to abort the whole tail with protocol_error. The host emits
|
|
85
|
+
* such frames whenever its transcript provider is momentarily unavailable
|
|
86
|
+
* (`eventRevision` returns undefined), which is ordinary during a turn - and
|
|
87
|
+
* one such frame turned a live, answering session into one no consumer could
|
|
88
|
+
* observe: every poll failed, the caller held the turn, and after five minutes
|
|
89
|
+
* reported it failed while the answer sat in the transcript (2026-09-17/18,
|
|
90
|
+
* five sessions). A frame is never a reason to lose the tail.
|
|
91
|
+
*
|
|
92
|
+
* The stamp is the LATEST revision observed, not the checkpoint's: revisions
|
|
93
|
+
* advance during a turn, and lifecycle order is compared revision-first. A
|
|
94
|
+
* terminal frame stamped with the initial checkpoint revision would sort
|
|
95
|
+
* before a start that carried a later one, and `--until-idle` would wait on a
|
|
96
|
+
* turn that had already ended.
|
|
97
|
+
*/
|
|
80
98
|
export declare class TailRevisionBuffer {
|
|
81
99
|
#private;
|
|
82
100
|
push(item: SdkTailItemV1): SdkTailItemV1[];
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import { PublicCommandFailure, type PublicEffectProof } from "../../cli/public-command-errors";
|
|
1
2
|
import { type SdkSearchResultV1, type SdkSearchRowV1 } from "../broker/session-scope";
|
|
2
|
-
import type { SessionLifecycleService } from "../lifecycle/service";
|
|
3
|
+
import type { SessionLifecycleResult, SessionLifecycleService } from "../lifecycle/service";
|
|
3
4
|
import { SessionRouter } from "../router";
|
|
4
5
|
import { type SdkSessionRowV1 } from "./rows";
|
|
5
|
-
export type SdkSessionCliAction = "list" | "search" | "inspect" | "send" | "status" | "tail" | "retire" | "global" | "raw" | "control" | "query"
|
|
6
|
+
export type SdkSessionCliAction = "list" | "search" | "inspect" | "send" | "status" | "tail" | "close" | "retire" | "global" | "raw" | "control" | "query";
|
|
6
7
|
export type SdkSessionListScope = "repo" | "cwd" | "worktree" | "all";
|
|
7
8
|
export type SdkSessionCliRawKind = "control" | "query" | "global";
|
|
8
9
|
export interface SdkSessionCliArgs {
|
|
@@ -24,6 +25,8 @@ export interface SdkSessionCliArgs {
|
|
|
24
25
|
strict?: boolean;
|
|
25
26
|
untilIdle?: boolean;
|
|
26
27
|
allEvents?: boolean;
|
|
28
|
+
/** tail --cursor: transcript row id the caller has already processed; rows up to and including it are omitted. */
|
|
29
|
+
afterTranscriptId?: string;
|
|
27
30
|
page?: boolean;
|
|
28
31
|
repo?: string;
|
|
29
32
|
scope?: string;
|
|
@@ -31,16 +34,28 @@ export interface SdkSessionCliArgs {
|
|
|
31
34
|
json?: boolean;
|
|
32
35
|
agentDir?: string;
|
|
33
36
|
}
|
|
37
|
+
export interface SdkSessionCliDependencies {
|
|
38
|
+
readonly lifecycleService?: SessionLifecycleService;
|
|
39
|
+
}
|
|
34
40
|
type JsonRecord = Record<string, unknown>;
|
|
35
41
|
export interface RetainedTranscriptTailReader {
|
|
36
42
|
readonly size: number;
|
|
37
43
|
readRange(start: number, end: number): Promise<Uint8Array>;
|
|
38
44
|
}
|
|
45
|
+
export declare const SDK_JSON_INPUT_FILE_MAX_BYTES: number;
|
|
46
|
+
/** Translate only SDK-owned codes and explicitly allowlisted reconciliation fields. */
|
|
47
|
+
export declare function sdkPublicFailure(code: string, details?: unknown, proof?: PublicEffectProof): PublicCommandFailure;
|
|
48
|
+
/** Lifecycle terminality/retryability is not, by itself, proof of an effect outcome. */
|
|
49
|
+
export declare function lifecyclePublicFailure(outcome: Extract<SessionLifecycleResult, {
|
|
50
|
+
ok: false;
|
|
51
|
+
}>): PublicCommandFailure;
|
|
52
|
+
/** Reads a 0600 JSON input through one descriptor, never through a replaceable pathname. */
|
|
53
|
+
export declare function readSecureJsonInputFile(filePath: string): Promise<string>;
|
|
39
54
|
export declare function mergeProbedSearchRows(rows: readonly SdkSearchRowV1[], probedRows: readonly SdkSearchRowV1[]): readonly SdkSearchRowV1[];
|
|
40
55
|
/** Resolves, lists, and probes only the exact rows selected by the Broker-scoped search. */
|
|
41
56
|
export declare function runSdkSearch(args: Pick<SdkSessionCliArgs, "agentDir" | "repo" | "scope" | "limit" | "cursor">, createService?: (agentDir: string) => SessionLifecycleService, probe?: (agentDir: string, result: SdkSearchResultV1) => Promise<SdkSearchResultV1>): Promise<{
|
|
42
57
|
result: SdkSearchResultV1;
|
|
43
|
-
exitCode: 0
|
|
58
|
+
exitCode: 0;
|
|
44
59
|
}>;
|
|
45
60
|
/** Renders a credential-free scope/status preamble and bounded search table. */
|
|
46
61
|
export declare function renderSdkSearchTable(result: SdkSearchResultV1): string;
|
|
@@ -93,8 +108,10 @@ export declare function waitForTerminalStatus(router: SessionRouter, sessionId:
|
|
|
93
108
|
status: string;
|
|
94
109
|
detail: unknown;
|
|
95
110
|
}>;
|
|
96
|
-
export declare function scanRetainedTranscriptTail(reader: RetainedTranscriptTailReader
|
|
111
|
+
export declare function scanRetainedTranscriptTail(reader: RetainedTranscriptTailReader, options?: {
|
|
112
|
+
boundaryId?: string;
|
|
113
|
+
}): Promise<unknown[]>;
|
|
97
114
|
export declare function runTail(repo: string, agentDir: string, sessionId: string, args: SdkSessionCliArgs): Promise<unknown>;
|
|
98
115
|
/** Runs the broker-bound `gjc sdk session` command family without exposing endpoint credentials. */
|
|
99
|
-
export declare function runSdkSessionCli(args: SdkSessionCliArgs, writeOutput?: (value: unknown) => void, setExitCode?: (exitCode: 1 | 2) => void): Promise<void>;
|
|
116
|
+
export declare function runSdkSessionCli(args: SdkSessionCliArgs, writeOutput?: (value: unknown) => void, setExitCode?: (exitCode: 1 | 2) => void, deps?: SdkSessionCliDependencies): Promise<void>;
|
|
100
117
|
export {};
|
|
@@ -41,6 +41,8 @@ export interface SdkClientOptions {
|
|
|
41
41
|
timeoutMs?: number;
|
|
42
42
|
/** Absolute wall-clock deadline shared by connect, hello, retry, and request work. */
|
|
43
43
|
deadline?: number;
|
|
44
|
+
/** Optional client capabilities sent in the protocol hello handshake. */
|
|
45
|
+
capabilities?: readonly string[];
|
|
44
46
|
reconnectAttempts?: number;
|
|
45
47
|
reconnectBackoffMs?: number;
|
|
46
48
|
/**
|