@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
|
@@ -32,8 +32,7 @@ export interface SdkGuidesCliArgs {
|
|
|
32
32
|
}
|
|
33
33
|
/**
|
|
34
34
|
* Runs the `gjc sdk guides` command family. Exported for command routing from
|
|
35
|
-
* `src/commands/sdk.ts` and for direct service use
|
|
36
|
-
*
|
|
37
|
-
* the process exit code.
|
|
35
|
+
* `src/commands/sdk.ts` and for direct service use. Only successful results are
|
|
36
|
+
* written here; typed failures belong to the outer public family writer.
|
|
38
37
|
*/
|
|
39
|
-
export declare function runSdkGuidesCli(args: SdkGuidesCliArgs, writeOutput?: (value: unknown) => void
|
|
38
|
+
export declare function runSdkGuidesCli(args: SdkGuidesCliArgs, writeOutput?: (value: unknown) => void): Promise<void>;
|
|
@@ -12,6 +12,8 @@ export interface GuidePinnedKey {
|
|
|
12
12
|
/** DER-encoded SPKI public key, hex. */
|
|
13
13
|
spkiDerHex: string;
|
|
14
14
|
source: "bundled";
|
|
15
|
+
/** Optional retirement bound for old bundled signers. */
|
|
16
|
+
validUntil?: number;
|
|
15
17
|
}
|
|
16
18
|
export declare const GUIDE_PINNED_KEYS: readonly GuidePinnedKey[];
|
|
17
19
|
export declare const GUIDE_PINNED_KEY_IDS: readonly string[];
|
|
@@ -81,7 +81,13 @@ export interface SessionSdkHostOptions extends HostEndpointAdapters {
|
|
|
81
81
|
* must see the same capability-gated event kinds on both legs, or live and
|
|
82
82
|
* replay delivery diverge for the same subscriber. */
|
|
83
83
|
export declare const TOOL_ACTIVITY_CAPABILITY = "tool_activity_v2";
|
|
84
|
+
/** Capability for non-replayable streamed turn content. */
|
|
85
|
+
export declare const TURN_STREAM_CAPABILITY = "turn_stream";
|
|
86
|
+
/** Capability used by notification adapters that observe a host without owning its work. */
|
|
87
|
+
export declare const SESSION_HOST_OBSERVER_CAPABILITY = "session_host_observer_v1";
|
|
84
88
|
export declare const CAP_GATED_FRAME_KINDS: ReadonlySet<string>;
|
|
89
|
+
/** Keep live delivery and replay on one capability gate. */
|
|
90
|
+
export declare function canDeliverSdkEvent(kind: string, capabilities: ReadonlySet<string> | undefined): boolean;
|
|
85
91
|
/** SDK hosting is independent of notification configuration. Only root sessions host an endpoint. */
|
|
86
92
|
export declare function shouldHostSdk(_settings: unknown, isTopLevel: boolean, env?: NodeJS.ProcessEnv): boolean;
|
|
87
93
|
/** Adapter-based session host; bus wiring owns NotificationServer creation and transport framing. */
|
|
@@ -119,6 +125,9 @@ export declare class SessionSdkHost {
|
|
|
119
125
|
activate(expectedGeneration?: number): Promise<SessionActivationOutcome>;
|
|
120
126
|
stop(options?: {
|
|
121
127
|
allowLockContention?: boolean;
|
|
128
|
+
unregisterReason?: "detached_idle";
|
|
122
129
|
}): Promise<"stopped" | "already">;
|
|
123
130
|
registerWithBroker(writer: BrokerIndexWriter): Promise<void>;
|
|
131
|
+
/** Persist the host's observable activity for broker/session-list consumers. */
|
|
132
|
+
reportActivity(state: "active" | "idle", at?: number): Promise<void>;
|
|
124
133
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type Settings } from "../../config/settings";
|
|
2
2
|
import type { ExtensionAPI, ExtensionContext } from "../../extensibility/extensions";
|
|
3
3
|
import type { AgentEndEvent } from "../../extensibility/shared-events";
|
|
4
|
+
import { ensureBroker } from "../broker/ensure";
|
|
4
5
|
import { type MasterRoleAttestationV2, SessionIndex, type SessionLocatorV2 } from "../broker/session-index";
|
|
5
6
|
import type { SdkPromptTerminalOutcome } from "../prompt-status";
|
|
6
7
|
import { type ReceiptState } from "../receipt-state";
|
|
@@ -25,6 +26,13 @@ export declare function verifyMasterCapabilityFrame(input: {
|
|
|
25
26
|
nonce: string;
|
|
26
27
|
attestationEpoch: string;
|
|
27
28
|
};
|
|
29
|
+
/**
|
|
30
|
+
* Keep a live session's broker discovery recoverable well inside the session
|
|
31
|
+
* index's two-minute heartbeat freshness window. `ensureBroker` has its own
|
|
32
|
+
* bounded startup/recovery budget; the in-flight guard below prevents those
|
|
33
|
+
* budgets from stacking when one attempt outlives this cadence.
|
|
34
|
+
*/
|
|
35
|
+
export declare const SESSION_BROKER_RECOVERY_INTERVAL_MS = 30000;
|
|
28
36
|
/**
|
|
29
37
|
* Normalize an agent-loop stop reason into the published terminal outcome.
|
|
30
38
|
*
|
|
@@ -158,6 +166,17 @@ export interface SdkOnlyTerminalAbortSeams {
|
|
|
158
166
|
status: string;
|
|
159
167
|
terminalScope?: unknown;
|
|
160
168
|
}>;
|
|
169
|
+
/**
|
|
170
|
+
* Live, SYNCHRONOUS view of the dispatched tool calls the run resource
|
|
171
|
+
* ledger holds for an execution handle (#5637). Strictly read-only: it
|
|
172
|
+
* never claims, reserves, seals or quarantines ledger state. Declared here
|
|
173
|
+
* so both hosts expose ONE seam contract — the bus route consumes it for its
|
|
174
|
+
* deadline tool-boundary wait, and this route threads it so a future boundary
|
|
175
|
+
* wait or deadline abort reads the ledger rather than silently falling back
|
|
176
|
+
* to the event-derived set. Optional so an older host that does not thread it
|
|
177
|
+
* degrades to that fallback instead of failing to construct.
|
|
178
|
+
*/
|
|
179
|
+
pendingToolExecutions?: (handle: string) => readonly string[];
|
|
161
180
|
/** Test override for the maximum durable terminal reservation rows. */
|
|
162
181
|
maxDurableTerminalReservationsForTests?: number;
|
|
163
182
|
}
|
|
@@ -177,6 +196,8 @@ export declare class SessionSdkSessionRuntime {
|
|
|
177
196
|
get started(): boolean;
|
|
178
197
|
get generation(): number;
|
|
179
198
|
getProviderDefinitions(capability: string): unknown | undefined;
|
|
199
|
+
/** Persist the host's current observable activity for broker/session-list consumers. */
|
|
200
|
+
reportActivity(state: "active" | "idle", at?: number): Promise<void>;
|
|
180
201
|
emitEvent(frame: SdkFrame): void;
|
|
181
202
|
/**
|
|
182
203
|
* Deliver a frame to specific connections without recording it.
|
|
@@ -190,6 +211,10 @@ export declare class SessionSdkSessionRuntime {
|
|
|
190
211
|
* disturb the turn producing the content.
|
|
191
212
|
*/
|
|
192
213
|
sendFrameTo(connectionId: string, frame: SdkFrame): void;
|
|
214
|
+
/** Snapshot connections that negotiated every capability in the requirement set. */
|
|
215
|
+
connectionIdsWithCapabilities(required: readonly string[]): string[];
|
|
216
|
+
/** Deliver a non-replayable frame to connections with an explicit capability intersection. */
|
|
217
|
+
sendFrameToCapabilities(required: readonly string[], frame: SdkFrame, excluding?: ReadonlySet<string>): void;
|
|
193
218
|
publish(frame: SdkFrame): void;
|
|
194
219
|
startHost(): Promise<"started" | "already">;
|
|
195
220
|
startTransport(): Promise<{
|
|
@@ -200,6 +225,7 @@ export declare class SessionSdkSessionRuntime {
|
|
|
200
225
|
}>;
|
|
201
226
|
stop(options?: {
|
|
202
227
|
allowLockContention?: boolean;
|
|
228
|
+
unregisterReason?: "detached_idle";
|
|
203
229
|
}): Promise<void>;
|
|
204
230
|
registerWithBroker(writer: BrokerIndexWriter): Promise<void>;
|
|
205
231
|
}
|
|
@@ -234,6 +260,11 @@ export interface CreateSdkSessionRuntimeOptions {
|
|
|
234
260
|
terminalAbortSeams?: SdkOnlyTerminalAbortSeams;
|
|
235
261
|
/** Callback when a frame is admitted to the runtime (test harness). */
|
|
236
262
|
onFrameAdmitted?: () => void;
|
|
263
|
+
/** Timer seams for deterministic broker-recovery lifecycle tests. */
|
|
264
|
+
setIntervalImpl?: typeof setInterval;
|
|
265
|
+
clearIntervalImpl?: typeof clearInterval;
|
|
266
|
+
/** Test-only broker ensure seam; production always uses the owner-fenced helper. */
|
|
267
|
+
ensureBrokerImpl?: typeof ensureBroker;
|
|
237
268
|
/** Test-only observation of a genuinely timed-out lifecycle drain. */
|
|
238
269
|
onLifecycleDrainTimeoutForTests?: () => void;
|
|
239
270
|
/** Test-only observation of bounded failure-diagnostic deduplication state. */
|
|
@@ -24,9 +24,19 @@ export interface BrokerIndexWriter {
|
|
|
24
24
|
stateRoot: string;
|
|
25
25
|
endpointGeneration: number;
|
|
26
26
|
}): void | Promise<void>;
|
|
27
|
+
heartbeat?(input: {
|
|
28
|
+
sessionId: string;
|
|
29
|
+
stateRoot: string;
|
|
30
|
+
endpointGeneration: number;
|
|
31
|
+
activity: {
|
|
32
|
+
state: "active" | "idle";
|
|
33
|
+
at: number;
|
|
34
|
+
};
|
|
35
|
+
}): void | Promise<void>;
|
|
27
36
|
unregister?(input: {
|
|
28
37
|
sessionId: string;
|
|
29
38
|
stateRoot: string;
|
|
30
39
|
endpointGeneration: number;
|
|
40
|
+
reason?: "detached_idle";
|
|
31
41
|
}): void | Promise<void>;
|
|
32
42
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { MODEL_PROFILE_DISCOVERY_QUERY, MODEL_PROFILE_ERROR_DETAIL_MAX_BYTES, type ModelProfileCatalogItem, type ModelProfileErrorCode, type ModelProfileErrorDetails, ModelProfileRegistryError, type ModelProfileRegistryErrorDetails, type UnknownModelProfileDetails, UnknownModelProfileError, } from "../config/model-profile-contract";
|
|
2
|
+
export type { QueuedInputAdmission, QueuedInputDelivery, QueuedInputExecution, QueuedInputQueuePolicy, QueuedInputRemovalReason, QueuedInputSubmission, QueuedInputTerminal, SendUserMessageOptions, TrackedSendUserMessageOptions, } from "../session/agent-session";
|
|
2
3
|
export * as bus from "./bus";
|
|
3
4
|
export * as host from "./host";
|
|
4
5
|
export * as lifecycle from "./lifecycle";
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worktree durability for a prompt retired by its deadline (#5583).
|
|
3
|
+
*
|
|
4
|
+
* A raised `sdk.promptDeadlineMs` makes the crash rarer, never impossible: the
|
|
5
|
+
* hard `sdk.promptMaxRuntimeMs` cap still fires on a long run, and the session
|
|
6
|
+
* is then torn down with whatever the agent already edited still uncommitted.
|
|
7
|
+
* Field reports lost ~25 minutes of finished work across 37 dirty files that
|
|
8
|
+
* way. Persist that work as a WIP commit in the agent's own worktree before
|
|
9
|
+
* teardown so the next run resumes from a commit instead of re-reasoning.
|
|
10
|
+
*
|
|
11
|
+
* Strictly best effort AND strictly bounded. Every failure — including an abort —
|
|
12
|
+
* is logged and swallowed: the prompt still fails with `prompt_deadline_exceeded`
|
|
13
|
+
* and teardown still happens, because the deadline outcome must never depend on
|
|
14
|
+
* git. Every git call that accepts a signal gets one, so a blocking lock or a
|
|
15
|
+
* hanging plumbing command is killed rather than waited on.
|
|
16
|
+
*
|
|
17
|
+
* ── Isolated index, plumbing commit, compare-and-swap ref move (#5623 round 4)
|
|
18
|
+
*
|
|
19
|
+
* The autosave never opens the user's real `.git/index` for writing and never
|
|
20
|
+
* runs a repository hook:
|
|
21
|
+
*
|
|
22
|
+
* 1. everything is staged into a throwaway index inside the worktree's own git
|
|
23
|
+
* dir (`GIT_INDEX_FILE`), seeded from the HEAD captured before staging;
|
|
24
|
+
* 2. the commit is built with plumbing — `write-tree` then `commit-tree` — so
|
|
25
|
+
* `pre-commit`/`commit-msg` cannot execute during teardown;
|
|
26
|
+
* 3. the ref moves with a compare-and-swap against that captured HEAD, so the
|
|
27
|
+
* one mutation that can outlive teardown is conditional: an abandoned flush
|
|
28
|
+
* that wakes up late finds HEAD moved and does nothing. `withRepoLock`
|
|
29
|
+
* awaits its predecessor BEFORE honouring the signal, so this really does
|
|
30
|
+
* happen — the abort alone cannot prevent it;
|
|
31
|
+
* 4. the real index is adopted only after that swap succeeds, so a successful
|
|
32
|
+
* autosave leaves `git status` clean instead of a phantom reverse diff.
|
|
33
|
+
*
|
|
34
|
+
* Every failing and aborted path therefore just unlinks the temp index. There is
|
|
35
|
+
* no rollback left to get wrong, and index-only state the user set — intent-to-add,
|
|
36
|
+
* skip-worktree/assume-unchanged, sparse-index, index extensions — survives byte
|
|
37
|
+
* for byte because the file was never written.
|
|
38
|
+
*
|
|
39
|
+
* ── Ownership
|
|
40
|
+
*
|
|
41
|
+
* Staging the whole dirty worktree (`git add -A`, untracked files included) is
|
|
42
|
+
* the point: the work being saved is whatever the agent touched, and narrowing
|
|
43
|
+
* it would strand exactly the files this exists for. What makes that safe is
|
|
44
|
+
* WHERE it runs. `sdk.flushWorktreeOnDeadline` still defaults to on, but the
|
|
45
|
+
* implicit default applies only in a LINKED worktree (`gitDir !== commonDir`) —
|
|
46
|
+
* what agent/paseo sessions run in, and the #5583 field report. In the user's
|
|
47
|
+
* primary checkout an autosave needs an explicit opt-in.
|
|
48
|
+
*/
|
|
49
|
+
export interface PromptDeadlineFlushResult {
|
|
50
|
+
/** Branch the WIP commit landed on, or `undefined` on a detached HEAD. */
|
|
51
|
+
branch?: string;
|
|
52
|
+
/** Abbreviated SHA of the WIP commit. */
|
|
53
|
+
commit: string;
|
|
54
|
+
/** Worktree root the commit was made in. */
|
|
55
|
+
worktreeRoot: string;
|
|
56
|
+
}
|
|
57
|
+
export interface PromptDeadlineFlushOptions {
|
|
58
|
+
/**
|
|
59
|
+
* Whether the caller resolved `sdk.flushWorktreeOnDeadline` to `true` from a
|
|
60
|
+
* value the user actually wrote, rather than from the schema default. Only an
|
|
61
|
+
* explicit opt-in may autosave outside a linked worktree.
|
|
62
|
+
*/
|
|
63
|
+
readonly explicitOptIn?: boolean;
|
|
64
|
+
/**
|
|
65
|
+
* Whether the deadline attempt still owns the prompt. The callback is checked
|
|
66
|
+
* immediately before the ref move and again before the real index is adopted,
|
|
67
|
+
* so progress that renews the lease can abandon the prepared WIP safely.
|
|
68
|
+
*/
|
|
69
|
+
readonly isCurrent?: () => boolean;
|
|
70
|
+
readonly signal?: AbortSignal;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Commit any uncommitted work in the worktree owning `cwd`.
|
|
74
|
+
*
|
|
75
|
+
* Returns `undefined` — without moving any ref — when `cwd` is not inside a git
|
|
76
|
+
* worktree, when the tree is already clean, when the session does not own the
|
|
77
|
+
* checkout, or when git fails or is aborted. Only the session's own worktree is
|
|
78
|
+
* touched; nothing is ever pushed.
|
|
79
|
+
*
|
|
80
|
+
* The abort signal is composed with an internal `DEADLINE_FLUSH_TIMEOUT_MS`
|
|
81
|
+
* bound, so a caller that passes nothing still cannot hang here.
|
|
82
|
+
*/
|
|
83
|
+
export declare function flushWorktreeOnPromptDeadline(cwd: string, options?: AbortSignal | PromptDeadlineFlushOptions): Promise<PromptDeadlineFlushResult | undefined>;
|
|
@@ -2,6 +2,25 @@ import type { KindAwareReconciliation } from "./bus/kind-aware-reconciliation";
|
|
|
2
2
|
import type { InvocationCorrelation, InvocationReconciliation } from "./host/session-runtime";
|
|
3
3
|
import type { SdkPromptTerminalOutcome } from "./prompt-status";
|
|
4
4
|
import type { TurnResultContent } from "./turn-result";
|
|
5
|
+
/**
|
|
6
|
+
* Hard real-time bound on the best-effort durability hook, shared with
|
|
7
|
+
* `prompt-deadline-flush` so the manager's race and the flush's own abort
|
|
8
|
+
* signal cannot drift apart.
|
|
9
|
+
*/
|
|
10
|
+
export declare const DEADLINE_FLUSH_TIMEOUT_MS = 10000;
|
|
11
|
+
/**
|
|
12
|
+
* Run a best-effort durability flush under a hard real-time bound that ALWAYS
|
|
13
|
+
* settles, and never let its result reach the caller.
|
|
14
|
+
*
|
|
15
|
+
* Shared by both expiry paths — this manager and the notification bus's own
|
|
16
|
+
* terminalization (#5583) — so there is one bound, one abort, and one warning,
|
|
17
|
+
* with no drift between them. A rejection is swallowed; a `run` that never
|
|
18
|
+
* settles is abandoned after `timeoutMs` with its signal aborted so any git
|
|
19
|
+
* subprocess dies. The signal alone is not sufficient: `git.withRepoLock`
|
|
20
|
+
* awaits its predecessor before honouring it, so a hung predecessor in the
|
|
21
|
+
* per-repo write chain is cut only by this outer race.
|
|
22
|
+
*/
|
|
23
|
+
export declare function runBoundedDeadlineFlush(run: (signal: AbortSignal) => unknown, timeoutMs?: number): Promise<void>;
|
|
5
24
|
type DeadlineReconciliation = InvocationReconciliation | KindAwareReconciliation;
|
|
6
25
|
export type PromptDeadlineOutcome = Extract<SdkPromptTerminalOutcome, {
|
|
7
26
|
kind: "failed";
|
|
@@ -22,6 +41,24 @@ export declare class PromptDeadlineManager {
|
|
|
22
41
|
getMaxMs: () => number;
|
|
23
42
|
now?: () => number;
|
|
24
43
|
onExpired?: (correlation: InvocationCorrelation, outcome?: PromptDeadlineOutcome) => void;
|
|
44
|
+
/**
|
|
45
|
+
* Best-effort durability hook for the single path that genuinely retires a
|
|
46
|
+
* prompt as `prompt_deadline_exceeded` (#5583). Awaited after the durable
|
|
47
|
+
* pending claim but BEFORE the durable terminal, so a crash in that window
|
|
48
|
+
* leaves the record pending and recovery retries the prompt; a
|
|
49
|
+
* rejection is swallowed and never changes the deadline outcome. Not called
|
|
50
|
+
* when a real terminal transition or a real failure won the race, nor when
|
|
51
|
+
* renewed progress supersedes this expiry instance. The hook receives an
|
|
52
|
+
* abort signal that fires when it outruns `deadlineFlushTimeoutMs`, plus a
|
|
53
|
+
* generation fence for irreversible worktree adoption.
|
|
54
|
+
*/
|
|
55
|
+
onDeadlineExceeded?: (correlation: InvocationCorrelation, signal: AbortSignal, isCurrent?: () => boolean) => void | Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* Hard bound on `onDeadlineExceeded`. Measured with a real timer, not
|
|
58
|
+
* `now`, because it guards real subprocesses — which is also why it is a
|
|
59
|
+
* constructor option: a fake clock cannot shorten it for tests.
|
|
60
|
+
*/
|
|
61
|
+
deadlineFlushTimeoutMs?: number;
|
|
25
62
|
});
|
|
26
63
|
onAccepted(correlation: InvocationCorrelation): void;
|
|
27
64
|
/** Re-arm a durable uncertainty-recovery record after process startup without
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bounded wait for an in-flight dispatched tool call to reach its boundary
|
|
3
|
+
* before an expired prompt deadline force-terminates the run (#5637).
|
|
4
|
+
*
|
|
5
|
+
* Terminal fencing aborts the run's cancellation domain FIRST and only proves
|
|
6
|
+
* settlement afterwards (`RunResourceLedger.waitForSettlement` resolves once the
|
|
7
|
+
* run is sealed and its tracked `kind: "tool"` resources have settled), so a
|
|
8
|
+
* tool that was mid-write when the deadline expired observes the aborted signal
|
|
9
|
+
* DURING its write and leaves a torn artifact behind. Waiting for that call's
|
|
10
|
+
* own `tool_execution_end` — under a short, finite grace — turns the kill into a
|
|
11
|
+
* boundary abort. When the grace is exhausted the run is force-terminated
|
|
12
|
+
* exactly as before, and the fact that a tool was still executing is returned as
|
|
13
|
+
* structured evidence rather than dropped.
|
|
14
|
+
*
|
|
15
|
+
* Deliberately dependency-light and clock-injectable: the contended bus module
|
|
16
|
+
* takes only a call, and the behaviour is testable without a live transport.
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* Hard bound on how long deadline expiry will wait for an in-flight tool call to
|
|
20
|
+
* reach its boundary before force-terminating. This guards a real subprocess, so
|
|
21
|
+
* it is a real timer rather than the lease clock — and a parameter rather than a
|
|
22
|
+
* bare module constant, so a test may shorten it explicitly instead of a fake
|
|
23
|
+
* clock silently shortening it for production code too.
|
|
24
|
+
*/
|
|
25
|
+
export declare const TOOL_CALL_BOUNDARY_GRACE_MS = 5000;
|
|
26
|
+
/**
|
|
27
|
+
* Re-check interval for the pending set while the grace runs.
|
|
28
|
+
*
|
|
29
|
+
* The authoritative source of "is a tool running?" is the run resource ledger,
|
|
30
|
+
* a SYNCHRONOUS snapshot with no completion signal of its own, so the wait has
|
|
31
|
+
* to look again rather than being told. `whenIdle` only wakes the check early
|
|
32
|
+
* when the event-derived view happens to drain first. Bounded by the grace, so
|
|
33
|
+
* this costs at most `graceMs / pollMs` array reads on the rare expiry-with-a-
|
|
34
|
+
* tool-running path and nothing at all on the idle path.
|
|
35
|
+
*/
|
|
36
|
+
export declare const TOOL_CALL_BOUNDARY_POLL_MS = 25;
|
|
37
|
+
export type ToolBoundaryOutcome = "idle" | "settled" | "forced";
|
|
38
|
+
export interface ToolBoundaryWaitResult {
|
|
39
|
+
outcome: ToolBoundaryOutcome;
|
|
40
|
+
waitedMs: number;
|
|
41
|
+
/**
|
|
42
|
+
* Non-empty ONLY for "forced": the dispatched tool calls still running when
|
|
43
|
+
* the grace expired. Ids only — never tool arguments, output or paths.
|
|
44
|
+
*/
|
|
45
|
+
pendingToolCallIds: string[];
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Shared result for the common case of no dispatched tool running at expiry.
|
|
49
|
+
* Frozen because it is handed to every idle caller: the deadline path must stay
|
|
50
|
+
* byte-identical to its pre-#5637 behaviour, which includes allocating nothing
|
|
51
|
+
* and arming no timer.
|
|
52
|
+
*/
|
|
53
|
+
export declare const IDLE_TOOL_BOUNDARY_RESULT: ToolBoundaryWaitResult;
|
|
54
|
+
/**
|
|
55
|
+
* Wait for the pending dispatched tool calls to drain, bounded by `graceMs`.
|
|
56
|
+
*
|
|
57
|
+
* Never composed with an abort signal: at the only call site nothing has been
|
|
58
|
+
* aborted yet, and a signal that was already aborted would make this wait
|
|
59
|
+
* unreachable — which is precisely the mid-tool kill being fixed.
|
|
60
|
+
*/
|
|
61
|
+
export declare function waitForToolCallBoundary(input: {
|
|
62
|
+
pending: () => readonly string[];
|
|
63
|
+
/**
|
|
64
|
+
* Resolves when the event-derived view of the pending set drains. A wake-up
|
|
65
|
+
* HINT only: `pending()` is re-read before the wait is allowed to settle,
|
|
66
|
+
* because the authoritative source may still hold a call this signal knows
|
|
67
|
+
* nothing about. Expected never to reject.
|
|
68
|
+
*/
|
|
69
|
+
whenIdle: () => Promise<void>;
|
|
70
|
+
graceMs?: number;
|
|
71
|
+
pollMs?: number;
|
|
72
|
+
now?: () => number;
|
|
73
|
+
}): Promise<ToolBoundaryWaitResult>;
|
|
@@ -177,6 +177,8 @@ export interface SessionRouterOptions {
|
|
|
177
177
|
agentDir: string;
|
|
178
178
|
/** Limits attachment to exact ids selected by a Broker-scoped operation. */
|
|
179
179
|
sessionIds?: readonly string[];
|
|
180
|
+
/** Marks default SDK clients as notification-only observers; demanding by default. */
|
|
181
|
+
observer?: boolean;
|
|
180
182
|
deps?: SessionRouterDeps;
|
|
181
183
|
/** Runtime-specific identity validation; Router supplies a conservative fallback. */
|
|
182
184
|
correlateFrame?: SessionRouterFrameCorrelator;
|
|
@@ -44,6 +44,8 @@ export declare class SdkStartupRollbackTracker {
|
|
|
44
44
|
export declare function sanitizeSdkStartupMessage(value: unknown, knownSecrets?: Iterable<unknown>): string;
|
|
45
45
|
/** Convert every lifecycle bootstrap outcome to the public, bounded failure shape. */
|
|
46
46
|
export declare function normalizeSdkStartupFailure(phase: SdkStartupPhase, reason: SdkStartupReason, error?: unknown, knownSecrets?: Iterable<unknown>): SdkStartupFailure;
|
|
47
|
+
/** Collect process-scoped credentials without exposing a raw-secret API. */
|
|
48
|
+
export declare function lifecycleKnownSecrets(): string[];
|
|
47
49
|
/** Session-owned, exactly-once lifecycle bootstrap completion. */
|
|
48
50
|
export declare class SdkStartupCapability {
|
|
49
51
|
#private;
|
|
@@ -2,6 +2,7 @@ import type { Readable, Writable } from "node:stream";
|
|
|
2
2
|
export declare const REQUEST_FRAME_BYTES: number;
|
|
3
3
|
export declare const DEFAULT_PENDING_CEILING_BYTES: number;
|
|
4
4
|
export declare const MIN_PENDING_CEILING_BYTES: number;
|
|
5
|
+
export declare const DEFAULT_UPSTREAM_HELLO_TIMEOUT_MS = 10000;
|
|
5
6
|
export type RelayDirection = "downstream->ws" | "ws->downstream";
|
|
6
7
|
export type TransportError = {
|
|
7
8
|
type: "transport_error";
|
|
@@ -1,10 +1,13 @@
|
|
|
1
|
+
import { PublicCommandFailure } from "../../cli/public-command-errors";
|
|
1
2
|
import { SdkClient } from "../client";
|
|
3
|
+
import type { ServeHandle } from "./index";
|
|
4
|
+
import { startSocketServe, startStdioServe } from "./index";
|
|
2
5
|
/**
|
|
3
6
|
* A `gjc sdk serve` operational failure with a stable machine-readable code and a
|
|
4
7
|
* documented exit code, mirroring `SdkSessionCliError`. Usage errors keep their own
|
|
5
|
-
*
|
|
8
|
+
* public failure envelope; this type covers only failures an embedder must branch on.
|
|
6
9
|
*/
|
|
7
|
-
export declare class SdkServeError extends
|
|
10
|
+
export declare class SdkServeError extends PublicCommandFailure {
|
|
8
11
|
readonly code: string;
|
|
9
12
|
readonly exitCode: 1;
|
|
10
13
|
readonly details?: unknown;
|
|
@@ -28,20 +31,61 @@ export declare class SdkServeError extends Error {
|
|
|
28
31
|
export declare function resolveServeOutcome(primary: Error | undefined, cleanup: Error | undefined): Error | undefined;
|
|
29
32
|
/** Resolves the pending ceiling with flag > env > default precedence; exported for tests. */
|
|
30
33
|
export declare function resolveServePendingCeiling(flagValue: string | undefined, envValue: string | undefined): number;
|
|
34
|
+
type BrokerTranscriptIdentity = {
|
|
35
|
+
dev: string;
|
|
36
|
+
ino: string;
|
|
37
|
+
size: number;
|
|
38
|
+
mtimeMs: number;
|
|
39
|
+
mtimeNs: string;
|
|
40
|
+
sha256: string;
|
|
41
|
+
};
|
|
42
|
+
type BrokerSavedSession = {
|
|
43
|
+
id: string;
|
|
44
|
+
path: string;
|
|
45
|
+
identity: BrokerTranscriptIdentity;
|
|
46
|
+
};
|
|
47
|
+
type BrokerSessionLocator = {
|
|
48
|
+
cwd: string;
|
|
49
|
+
worktreeRoot: string | null;
|
|
50
|
+
stateRoot: string;
|
|
51
|
+
};
|
|
31
52
|
type BrokerSessionRow = {
|
|
32
53
|
sessionId: string;
|
|
33
54
|
live: boolean;
|
|
34
55
|
ambiguous: boolean;
|
|
56
|
+
terminal?: boolean;
|
|
57
|
+
hostUnregisteredReason?: "process_exited" | "detached_idle";
|
|
58
|
+
terminalUncertain?: boolean;
|
|
59
|
+
locator?: BrokerSessionLocator;
|
|
60
|
+
savedSession?: BrokerSavedSession;
|
|
35
61
|
};
|
|
36
62
|
/** Exhausts strict broker `session.list` pages into one full session snapshot. */
|
|
37
|
-
export declare function listBrokerSessions(broker: SdkClient, explicitSessionId?: string): Promise<BrokerSessionRow[]>;
|
|
63
|
+
export declare function listBrokerSessions(broker: Pick<SdkClient, "global">, explicitSessionId?: string, cwd?: string): Promise<BrokerSessionRow[]>;
|
|
64
|
+
/** Resolves an explicit or automatic serve target, reattaching one stale explicit session at most once. */
|
|
65
|
+
export declare function resolveServeSession(broker: SdkClient, explicitSessionId?: string): Promise<string>;
|
|
38
66
|
/** Selects the session to serve through broker `session.list` truth (C10); exported for tests. */
|
|
39
67
|
export declare function selectBrokerSession(sessions: BrokerSessionRow[], explicitSessionId: string | undefined): string;
|
|
68
|
+
/** Bounded dependency seam for preflight tests; production keeps the same transport factories. */
|
|
69
|
+
export interface SdkServeDependencies {
|
|
70
|
+
readDiscovery: (agentDir: string) => Promise<{
|
|
71
|
+
url: string;
|
|
72
|
+
token: string;
|
|
73
|
+
} | null>;
|
|
74
|
+
connect: (url: string, token: string) => Promise<Pick<SdkClient, "global" | "close">>;
|
|
75
|
+
startStdio: typeof startStdioServe;
|
|
76
|
+
startSocket: typeof startSocketServe;
|
|
77
|
+
}
|
|
40
78
|
/**
|
|
41
79
|
* Attaches a stdio or Unix-socket relay to one live SDK session endpoint.
|
|
42
80
|
* Session targeting is broker-bound (C10): `session.list` resolves the session
|
|
43
81
|
* and `session.get_endpoint` mints the exact credential — never a direct
|
|
44
82
|
* endpoint-file read. A missing or unreachable broker fails closed.
|
|
45
83
|
*/
|
|
46
|
-
export declare function runSdkServe(argv: string[]): Promise<void>;
|
|
84
|
+
export declare function runSdkServe(argv: string[], dependencies?: SdkServeDependencies): Promise<void>;
|
|
85
|
+
/**
|
|
86
|
+
* Acquiring a ServeHandle transfers output/termination ownership to transport.
|
|
87
|
+
* This boundary never rejects into the ordinary public command writer, even
|
|
88
|
+
* when no frame has been written. Raw relay framing remains transport-owned.
|
|
89
|
+
*/
|
|
90
|
+
export declare function ownSdkServeTransport(handle: ServeHandle, closeBroker: () => Promise<void>): Promise<void>;
|
|
47
91
|
export {};
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import type { Readable, Writable } from "node:stream";
|
|
1
2
|
import type { ServeHandle, ServeOptions } from "./index";
|
|
2
3
|
/** Serves one parent-owned JSONL connection over the process standard streams. */
|
|
3
|
-
export declare function startStdioServe(options: ServeOptions
|
|
4
|
+
export declare function startStdioServe(options: ServeOptions, streams?: {
|
|
5
|
+
readonly input?: Readable;
|
|
6
|
+
readonly output?: Writable;
|
|
7
|
+
}): Promise<ServeHandle>;
|