@gajae-code/coding-agent 0.10.2 → 0.11.1
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 +58 -2
- package/dist/types/append-only-mode.d.ts +1 -1
- package/dist/types/async/job-manager.d.ts +46 -7
- package/dist/types/cli/args.d.ts +4 -5
- package/dist/types/cli/daemon-cli.d.ts +12 -1
- package/dist/types/cli/notify-cli.d.ts +21 -1
- package/dist/types/cli.d.ts +3 -0
- package/dist/types/commands/daemon.d.ts +39 -0
- package/dist/types/commands/launch.d.ts +3 -0
- package/dist/types/commands/notify.d.ts +28 -1
- package/dist/types/commands/sdk.d.ts +33 -0
- package/dist/types/config/atomic-yaml-patch.d.ts +85 -0
- package/dist/types/config/model-profile-activation.d.ts +35 -15
- package/dist/types/config/model-profiles.d.ts +11 -5
- package/dist/types/config/model-registry.d.ts +3 -3
- package/dist/types/config/model-resolver.d.ts +39 -6
- package/dist/types/config/model-selector-value.d.ts +17 -0
- package/dist/types/config/models-config-schema.d.ts +10 -6
- package/dist/types/config/settings-schema.d.ts +133 -6
- package/dist/types/config/settings.d.ts +63 -35
- package/dist/types/coordinator-mcp/model-preset.d.ts +7 -6
- package/dist/types/coordinator-mcp/server.d.ts +6 -49
- package/dist/types/daemon/builtin.d.ts +6 -5
- package/dist/types/daemon/control-types.d.ts +1 -1
- package/dist/types/discovery/mcp-json.d.ts +12 -1
- package/dist/types/extensibility/custom-tools/types.d.ts +1 -1
- package/dist/types/extensibility/extensions/compact-handler.d.ts +4 -2
- package/dist/types/extensibility/extensions/get-commands-handler.d.ts +2 -2
- package/dist/types/extensibility/extensions/loader.d.ts +10 -1
- package/dist/types/extensibility/extensions/runner.d.ts +3 -3
- package/dist/types/extensibility/extensions/types.d.ts +141 -16
- package/dist/types/extensibility/hooks/types.d.ts +1 -1
- package/dist/types/gjc-runtime/launch-tmux.d.ts +3 -2
- package/dist/types/gjc-runtime/psmux-detect.d.ts +3 -0
- package/dist/types/gjc-runtime/session-state-sidecar.d.ts +3 -0
- package/dist/types/gjc-runtime/team-runtime.d.ts +3 -4
- package/dist/types/gjc-runtime/tmux-owner-isolation-cli.d.ts +13 -0
- package/dist/types/gjc-runtime/tmux-sessions.d.ts +4 -1
- package/dist/types/gjc-runtime/ultragoal-receipt-freshness.d.ts +11 -0
- package/dist/types/gjc-runtime/windows-powershell-command.d.ts +9 -0
- package/dist/types/harness-control-plane/operate.d.ts +5 -5
- package/dist/types/harness-control-plane/owner.d.ts +18 -4
- package/dist/types/harness-control-plane/receipts.d.ts +0 -1
- package/dist/types/harness-control-plane/sdk-transport.d.ts +43 -0
- package/dist/types/harness-control-plane/session-transport.d.ts +48 -0
- package/dist/types/harness-control-plane/types.d.ts +3 -4
- package/dist/types/lsp/index.d.ts +1 -1
- package/dist/types/main.d.ts +32 -38
- package/dist/types/modes/acp/acp-agent.d.ts +224 -53
- package/dist/types/modes/acp/acp-client-bridge.d.ts +1 -0
- package/dist/types/modes/acp/acp-mode.d.ts +6 -15
- package/dist/types/modes/acp/permission-mode.d.ts +4 -0
- package/dist/types/modes/acp/startup-options.d.ts +6 -0
- package/dist/types/modes/components/agent-dashboard.d.ts +3 -0
- package/dist/types/modes/components/model-selector.d.ts +1 -0
- package/dist/types/modes/components/notifications-settings-editor.d.ts +135 -0
- package/dist/types/modes/components/settings-selector.d.ts +6 -4
- package/dist/types/modes/components/welcome.d.ts +1 -1
- package/dist/types/modes/controllers/command-controller.d.ts +2 -2
- package/dist/types/modes/controllers/extension-ui-controller.d.ts +1 -0
- package/dist/types/modes/controllers/selector-controller.d.ts +35 -1
- package/dist/types/modes/index.d.ts +0 -4
- package/dist/types/modes/interactive-mode.d.ts +5 -2
- package/dist/types/modes/runtime-init.d.ts +2 -2
- package/dist/types/modes/shared/agent-wire/approval-gate.d.ts +6 -9
- package/dist/types/modes/shared/agent-wire/deep-interview-gate.d.ts +4 -6
- package/dist/types/modes/shared/agent-wire/event-contract.d.ts +6 -6
- package/dist/types/modes/shared/agent-wire/event-envelope.d.ts +4 -9
- package/dist/types/modes/shared/agent-wire/event-observation.d.ts +1 -1
- package/dist/types/modes/shared/agent-wire/workflow-gate-broker.d.ts +170 -30
- package/dist/types/modes/shared/agent-wire/workflow-gate-schema.d.ts +7 -7
- package/dist/types/modes/shared/agent-wire/workflow-gate-types.d.ts +105 -0
- package/dist/types/modes/types.d.ts +7 -2
- package/dist/types/runtime-mcp/client.d.ts +2 -0
- package/dist/types/runtime-mcp/config.d.ts +5 -1
- package/dist/types/runtime-mcp/manager.d.ts +8 -1
- package/dist/types/runtime-mcp/types.d.ts +4 -0
- package/dist/types/sdk/acp/adapter.d.ts +67 -0
- package/dist/types/sdk/acp/index.d.ts +2 -0
- package/dist/types/sdk/broker/broker.d.ts +53 -0
- package/dist/types/sdk/broker/discovery.d.ts +30 -0
- package/dist/types/sdk/broker/ensure.d.ts +42 -0
- package/dist/types/sdk/broker/identity.d.ts +3 -0
- package/dist/types/sdk/broker/index.d.ts +8 -0
- package/dist/types/sdk/broker/lifecycle-ledger.d.ts +95 -0
- package/dist/types/sdk/broker/lifecycle.d.ts +85 -0
- package/dist/types/sdk/broker/process-incarnation.d.ts +14 -0
- package/dist/types/sdk/broker/runtime.d.ts +33 -0
- package/dist/types/sdk/broker/session-index.d.ts +57 -0
- package/dist/types/sdk/broker/state-version.d.ts +8 -0
- package/dist/types/sdk/broker/transport.d.ts +9 -0
- package/dist/types/sdk/bus/chat-command-policy.d.ts +49 -0
- package/dist/types/sdk/bus/chat-daemon-cli.d.ts +21 -0
- package/dist/types/sdk/bus/chat-daemon-control.d.ts +111 -0
- package/dist/types/sdk/bus/chat-daemon-runtime.d.ts +77 -0
- package/dist/types/sdk/bus/chat-effect-journal.d.ts +84 -0
- package/dist/types/{notifications → sdk/bus}/config-commands.d.ts +7 -2
- package/dist/types/sdk/bus/config.d.ts +274 -0
- package/dist/types/sdk/bus/conversation-store.d.ts +72 -0
- package/dist/types/sdk/bus/discord-conversation.d.ts +58 -0
- package/dist/types/sdk/bus/discord-daemon.d.ts +50 -0
- package/dist/types/sdk/bus/discord-live-provider.d.ts +70 -0
- package/dist/types/sdk/bus/discord-provider.d.ts +85 -0
- package/dist/types/{notifications → sdk/bus}/html-format.d.ts +2 -2
- package/dist/types/{notifications → sdk/bus}/index.d.ts +113 -13
- package/dist/types/{notifications → sdk/bus}/lifecycle-control-runtime.d.ts +4 -2
- package/dist/types/{notifications → sdk/bus}/lifecycle-orchestrator.d.ts +18 -21
- package/dist/types/{notifications → sdk/bus}/managed-daemon.d.ts +1 -1
- package/dist/types/sdk/bus/native-runtime-compatibility.d.ts +13 -0
- package/dist/types/sdk/bus/notification-orchestration.d.ts +170 -0
- package/dist/types/{notifications → sdk/bus}/notification-service.d.ts +7 -1
- package/dist/types/sdk/bus/session-control.d.ts +83 -0
- package/dist/types/sdk/bus/slack-conversation.d.ts +56 -0
- package/dist/types/sdk/bus/slack-daemon.d.ts +60 -0
- package/dist/types/sdk/bus/slack-live-provider.d.ts +59 -0
- package/dist/types/sdk/bus/slack-provider.d.ts +55 -0
- package/dist/types/{notifications → sdk/bus}/telegram-cli.d.ts +4 -4
- package/dist/types/{notifications → sdk/bus}/telegram-daemon-cli.d.ts +14 -5
- package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +12 -0
- package/dist/types/{notifications → sdk/bus}/telegram-daemon-control.d.ts +2 -2
- package/dist/types/{notifications → sdk/bus}/telegram-daemon.d.ts +78 -17
- package/dist/types/{notifications → sdk/bus}/telegram-reference.d.ts +2 -2
- package/dist/types/sdk/bus/telegram-setup.d.ts +128 -0
- package/dist/types/{notifications → sdk/bus}/topic-registry.d.ts +11 -0
- package/dist/types/sdk/cli/index.d.ts +1 -0
- package/dist/types/sdk/cli/session-cli.d.ts +19 -0
- package/dist/types/sdk/client/client.d.ts +1 -0
- package/dist/types/sdk/client/discovery.d.ts +27 -0
- package/dist/types/sdk/client/index.d.ts +2 -0
- package/dist/types/sdk/host/control/dispatch.d.ts +34 -0
- package/dist/types/sdk/host/control/index.d.ts +2 -0
- package/dist/types/sdk/host/control/operations.d.ts +65 -0
- package/dist/types/sdk/host/events.d.ts +35 -0
- package/dist/types/sdk/host/host.d.ts +35 -0
- package/dist/types/sdk/host/index.d.ts +4 -0
- package/dist/types/sdk/host/query/cursor.d.ts +62 -0
- package/dist/types/sdk/host/query/handlers.d.ts +70 -0
- package/dist/types/sdk/host/query/index.d.ts +3 -0
- package/dist/types/sdk/host/query/revision-store.d.ts +60 -0
- package/dist/types/sdk/host/reverse-leases.d.ts +45 -0
- package/dist/types/sdk/host/types.d.ts +32 -0
- package/dist/types/sdk/index.d.ts +6 -0
- package/dist/types/sdk/lifecycle-session.d.ts +14 -0
- package/dist/types/sdk/mcp/index.d.ts +1 -0
- package/dist/types/sdk/mcp/server.d.ts +37 -0
- package/dist/types/sdk/models.d.ts +44 -0
- package/dist/types/sdk/protocol/adapter-validation.d.ts +14 -0
- package/dist/types/sdk/protocol/operation-registry.d.ts +24 -0
- package/dist/types/{sdk.d.ts → sdk/session.d.ts} +44 -38
- package/dist/types/sdk/startup-capability.d.ts +50 -0
- package/dist/types/session/agent-session.d.ts +114 -21
- package/dist/types/session/default-model-selection.d.ts +25 -0
- package/dist/types/session/fallback-chain-controller.d.ts +52 -0
- package/dist/types/session/session-manager.d.ts +58 -1
- package/dist/types/setup/credential-auto-import.d.ts +36 -6
- package/dist/types/tools/ask-answer-registry.d.ts +1 -1
- package/dist/types/tools/browser/benchmark/detector-report.d.ts +63 -0
- package/dist/types/tools/browser/benchmark/run-suite.d.ts +18 -0
- package/dist/types/tools/browser/launch.d.ts +22 -0
- package/dist/types/tools/browser/profile-discovery.d.ts +31 -0
- package/dist/types/tools/browser/profile-posture.d.ts +37 -0
- package/dist/types/tools/browser/profile-reuse.d.ts +39 -0
- package/dist/types/tools/browser/profile-warmup.d.ts +39 -0
- package/dist/types/tools/browser/registry.d.ts +19 -0
- package/dist/types/tools/browser/tab-protocol.d.ts +4 -0
- package/dist/types/tools/index.d.ts +8 -8
- package/dist/types/tools/subagent-render.d.ts +1 -0
- package/dist/types/tools/subagent.d.ts +6 -1
- package/package.json +34 -13
- package/scripts/build-sdk-package-smoke.ts +99 -0
- package/scripts/capture-notifications-settings-showcase.ts +435 -0
- package/scripts/compile-args.ts +4 -2
- package/scripts/g005-daemon-smoke.ts +4 -5
- package/scripts/g011-daemon-path-smoke.ts +5 -5
- package/scripts/generate-sdk-adapter-parity-manifest.ts +163 -0
- package/scripts/generate-sdk-operation-inventory.ts +867 -0
- package/scripts/generate-telegram-baseline-manifest.ts +128 -0
- package/scripts/manifest-schema.ts +124 -0
- package/scripts/run-test-manifest.ts +153 -0
- package/scripts/run-threat-model-check.ts +157 -0
- package/scripts/verify-gjc-sdk-canonicalization.ts +3467 -0
- package/scripts/verify-gjc-sdk-rename.ts +90 -0
- package/src/append-only-mode.ts +1 -1
- package/src/async/job-manager.ts +406 -63
- package/src/cli/args.ts +43 -12
- package/src/cli/auth-gateway-cli.ts +2 -2
- package/src/cli/config-cli.ts +2 -1
- package/src/cli/daemon-cli.ts +63 -14
- package/src/cli/list-models.ts +1 -1
- package/src/cli/notify-cli.ts +288 -286
- package/src/cli.ts +21 -2
- package/src/commands/daemon.ts +50 -6
- package/src/commands/harness.ts +93 -36
- package/src/commands/launch.ts +5 -2
- package/src/commands/mcp-serve.ts +19 -12
- package/src/commands/notify.ts +36 -3
- package/src/commands/sdk.ts +426 -0
- package/src/commit/agentic/agent.ts +1 -0
- package/src/config/atomic-yaml-patch.ts +423 -0
- package/src/config/model-profile-activation.ts +240 -89
- package/src/config/model-profiles.ts +18 -15
- package/src/config/model-registry.ts +51 -26
- package/src/config/model-resolver.ts +138 -51
- package/src/config/model-selector-value.ts +50 -0
- package/src/config/models-config-schema.ts +14 -21
- package/src/config/settings-schema.ts +128 -10
- package/src/config/settings.ts +1120 -158
- package/src/coordinator-mcp/model-preset.ts +74 -20
- package/src/coordinator-mcp/server.ts +1597 -3052
- package/src/daemon/builtin.ts +8 -5
- package/src/daemon/control-types.ts +1 -1
- package/src/defaults/gjc/skills/team/SKILL.md +4 -4
- package/src/discovery/mcp-json.ts +327 -20
- package/src/extensibility/custom-tools/types.ts +1 -1
- package/src/extensibility/extensions/compact-handler.ts +3 -3
- package/src/extensibility/extensions/get-commands-handler.ts +2 -2
- package/src/extensibility/extensions/loader.ts +69 -5
- package/src/extensibility/extensions/runner.ts +112 -4
- package/src/extensibility/extensions/types.ts +176 -17
- package/src/extensibility/hooks/types.ts +1 -1
- package/src/gjc-runtime/launch-tmux.ts +170 -86
- package/src/gjc-runtime/psmux-detect.ts +82 -4
- package/src/gjc-runtime/session-state-sidecar.ts +41 -31
- package/src/gjc-runtime/team-runtime.ts +54 -35
- package/src/gjc-runtime/tmux-owner-isolation-cli.ts +53 -17
- package/src/gjc-runtime/tmux-owner-isolation.ts +1 -1
- package/src/gjc-runtime/tmux-sessions.ts +19 -13
- package/src/gjc-runtime/ultragoal-guard.ts +108 -14
- package/src/gjc-runtime/ultragoal-receipt-freshness.ts +102 -1
- package/src/gjc-runtime/ultragoal-runtime.ts +227 -11
- package/src/gjc-runtime/windows-powershell-command.ts +58 -0
- package/src/harness-control-plane/operate.ts +9 -9
- package/src/harness-control-plane/owner.ts +283 -39
- package/src/harness-control-plane/receipts.ts +0 -1
- package/src/harness-control-plane/sdk-transport.ts +395 -0
- package/src/harness-control-plane/session-transport.ts +94 -0
- package/src/harness-control-plane/types.ts +1 -1
- package/src/internal-urls/docs-index.generated.ts +34 -35
- package/src/lsp/client.ts +42 -6
- package/src/lsp/index.ts +2 -2
- package/src/main.ts +299 -204
- package/src/modes/DESIGN.md +258 -0
- package/src/modes/acp/acp-agent.ts +1228 -2612
- package/src/modes/acp/acp-client-bridge.ts +2 -20
- package/src/modes/acp/acp-event-mapper.ts +18 -2
- package/src/modes/acp/acp-mode.ts +8 -36
- package/src/modes/acp/permission-mode.ts +25 -0
- package/src/modes/acp/startup-options.ts +6 -0
- package/src/modes/components/agent-dashboard.ts +37 -17
- package/src/modes/components/model-selector.ts +93 -35
- package/src/modes/components/notifications-settings-editor.ts +1379 -0
- package/src/modes/components/settings-selector.ts +60 -11
- package/src/modes/components/welcome.ts +4 -4
- package/src/modes/controllers/command-controller.ts +10 -17
- package/src/modes/controllers/event-controller.ts +11 -16
- package/src/modes/controllers/extension-ui-controller.ts +396 -28
- package/src/modes/controllers/selector-controller.ts +674 -36
- package/src/modes/index.ts +0 -22
- package/src/modes/interactive-mode.ts +87 -36
- package/src/modes/runtime-init.ts +298 -6
- package/src/modes/shared/agent-wire/approval-gate.ts +9 -11
- package/src/modes/shared/agent-wire/deep-interview-gate.ts +10 -11
- package/src/modes/shared/agent-wire/event-contract.ts +7 -8
- package/src/modes/shared/agent-wire/event-envelope.ts +9 -17
- package/src/modes/shared/agent-wire/event-observation.ts +16 -7
- package/src/modes/shared/agent-wire/workflow-gate-broker.ts +1258 -87
- package/src/modes/shared/agent-wire/workflow-gate-schema.ts +15 -15
- package/src/modes/shared/agent-wire/workflow-gate-types.ts +113 -0
- package/src/modes/types.ts +7 -2
- package/src/runtime-mcp/client.ts +94 -19
- package/src/runtime-mcp/config.ts +27 -15
- package/src/runtime-mcp/manager.ts +343 -105
- package/src/runtime-mcp/oauth-flow.ts +42 -12
- package/src/runtime-mcp/transports/http.ts +49 -19
- package/src/runtime-mcp/transports/stdio.ts +47 -28
- package/src/runtime-mcp/types.ts +10 -0
- package/src/sdk/acp/adapter.ts +418 -0
- package/src/sdk/acp/index.ts +2 -0
- package/src/sdk/broker/broker.ts +642 -0
- package/src/sdk/broker/discovery.ts +113 -0
- package/src/sdk/broker/ensure.ts +307 -0
- package/src/sdk/broker/identity.ts +42 -0
- package/src/sdk/broker/index.ts +8 -0
- package/src/sdk/broker/internal-source-marker-2178.txt +1 -0
- package/src/sdk/broker/internal-source.bunfig.toml +1 -0
- package/src/sdk/broker/lifecycle-ledger.ts +286 -0
- package/src/sdk/broker/lifecycle.ts +2157 -0
- package/src/sdk/broker/process-incarnation.ts +159 -0
- package/src/sdk/broker/runtime.ts +164 -0
- package/src/sdk/broker/session-index.ts +318 -0
- package/src/sdk/broker/state-version.ts +23 -0
- package/src/sdk/broker/transport.ts +125 -0
- package/src/sdk/bus/chat-command-policy.ts +107 -0
- package/src/sdk/bus/chat-daemon-cli.ts +214 -0
- package/src/sdk/bus/chat-daemon-control.ts +713 -0
- package/src/sdk/bus/chat-daemon-runtime.ts +526 -0
- package/src/sdk/bus/chat-effect-journal.ts +355 -0
- package/src/{notifications → sdk/bus}/config-commands.ts +39 -10
- package/src/sdk/bus/config.ts +433 -0
- package/src/sdk/bus/conversation-store.ts +391 -0
- package/src/sdk/bus/discord-conversation.ts +85 -0
- package/src/sdk/bus/discord-daemon.ts +2292 -0
- package/src/sdk/bus/discord-live-provider.ts +521 -0
- package/src/sdk/bus/discord-provider.ts +56 -0
- package/src/{notifications → sdk/bus}/html-format.ts +2 -2
- package/src/sdk/bus/index.ts +3979 -0
- package/src/{notifications → sdk/bus}/lifecycle-commands.ts +2 -0
- package/src/{notifications → sdk/bus}/lifecycle-control-runtime.ts +225 -196
- package/src/{notifications → sdk/bus}/lifecycle-orchestrator.ts +161 -74
- package/src/{notifications → sdk/bus}/managed-daemon.ts +2 -2
- package/src/sdk/bus/native-runtime-compatibility.ts +42 -0
- package/src/sdk/bus/natives-augment.d.ts +38 -0
- package/src/sdk/bus/notification-orchestration.ts +535 -0
- package/src/{notifications → sdk/bus}/notification-service.ts +106 -12
- package/src/sdk/bus/session-control.ts +333 -0
- package/src/sdk/bus/slack-conversation.ts +74 -0
- package/src/sdk/bus/slack-daemon.ts +2144 -0
- package/src/sdk/bus/slack-live-provider.ts +380 -0
- package/src/sdk/bus/slack-provider.ts +76 -0
- package/src/{notifications → sdk/bus}/telegram-cli.ts +8 -8
- package/src/sdk/bus/telegram-daemon-cli.ts +330 -0
- package/src/sdk/bus/telegram-daemon-contract.ts +14 -0
- package/src/{notifications → sdk/bus}/telegram-daemon-control.ts +4 -4
- package/src/{notifications → sdk/bus}/telegram-daemon.ts +603 -63
- package/src/{notifications → sdk/bus}/telegram-reference.ts +2 -2
- package/src/sdk/bus/telegram-setup.ts +663 -0
- package/src/{notifications → sdk/bus}/topic-registry.ts +32 -0
- package/src/sdk/cli/index.ts +1 -0
- package/src/sdk/cli/session-cli.ts +275 -0
- package/src/sdk/client/client.ts +1 -0
- package/src/sdk/client/discovery.ts +108 -0
- package/src/sdk/client/index.ts +2 -0
- package/src/sdk/host/control/dispatch.ts +367 -0
- package/src/sdk/host/control/index.ts +10 -0
- package/src/sdk/host/control/operations.ts +63 -0
- package/src/sdk/host/events.ts +91 -0
- package/src/sdk/host/host.ts +296 -0
- package/src/sdk/host/index.ts +4 -0
- package/src/sdk/host/query/cursor.ts +189 -0
- package/src/sdk/host/query/handlers.ts +533 -0
- package/src/sdk/host/query/index.ts +3 -0
- package/src/sdk/host/query/revision-store.ts +1126 -0
- package/src/sdk/host/reverse-leases.ts +325 -0
- package/src/sdk/host/types.ts +29 -0
- package/src/sdk/index.ts +13 -0
- package/src/sdk/lifecycle-session.ts +39 -0
- package/src/sdk/mcp/index.ts +1 -0
- package/src/sdk/mcp/server.ts +332 -0
- package/src/sdk/models.ts +168 -0
- package/src/sdk/protocol/adapter-validation.ts +48 -0
- package/src/sdk/protocol/operation-inventory.generated.json +5654 -0
- package/src/sdk/protocol/operation-registry.ts +312 -0
- package/src/{sdk.ts → sdk/session.ts} +339 -212
- package/src/sdk/startup-capability.ts +189 -0
- package/src/session/agent-session.ts +2650 -944
- package/src/session/default-model-selection.ts +93 -0
- package/src/session/fallback-chain-controller.ts +136 -0
- package/src/session/session-manager.ts +438 -11
- package/src/session/session-storage.ts +8 -1
- package/src/setup/credential-auto-import.ts +290 -35
- package/src/setup/hermes/templates/operator-instructions.v1.md +3 -5
- package/src/slash-commands/builtin-registry.ts +2 -1
- package/src/task/executor.ts +62 -13
- package/src/task/index.ts +26 -16
- package/src/tools/ask-answer-registry.ts +1 -1
- package/src/tools/ask.ts +13 -8
- package/src/tools/browser/STEALTH-THIRD-PARTY-NOTICES.md +26 -0
- package/src/tools/browser/benchmark/detector-report.ts +157 -0
- package/src/tools/browser/benchmark/run-suite.ts +39 -0
- package/src/tools/browser/launch.ts +124 -19
- package/src/tools/browser/profile-discovery.ts +63 -0
- package/src/tools/browser/profile-posture.ts +59 -0
- package/src/tools/browser/profile-reuse.ts +102 -0
- package/src/tools/browser/profile-warmup.ts +109 -0
- package/src/tools/browser/registry.ts +87 -11
- package/src/tools/browser/tab-protocol.ts +1 -0
- package/src/tools/browser/tab-supervisor.ts +1 -0
- package/src/tools/browser/tab-worker.ts +1 -1
- package/src/tools/browser.ts +6 -0
- package/src/tools/index.ts +8 -8
- package/src/tools/puppeteer/14_stealth_permissions.txt +57 -0
- package/src/tools/puppeteer/15_stealth_webrtc.txt +60 -0
- package/src/tools/subagent-render.ts +19 -8
- package/src/tools/subagent.ts +84 -32
- package/src/tools/telegram-send.ts +2 -2
- package/vendor/insane-search/MANIFEST.json +2 -1
- package/vendor/insane-search/engine/bias_check.py +4 -1
- package/vendor/insane-search/engine/phase0.py +26 -1
- package/dist/types/harness-control-plane/rpc-adapter.d.ts +0 -69
- package/dist/types/modes/bridge/auth.d.ts +0 -12
- package/dist/types/modes/bridge/bridge-client-bridge.d.ts +0 -9
- package/dist/types/modes/bridge/bridge-mode.d.ts +0 -47
- package/dist/types/modes/bridge/bridge-ui-context.d.ts +0 -88
- package/dist/types/modes/bridge/event-stream.d.ts +0 -8
- package/dist/types/modes/rpc/host-tools.d.ts +0 -1
- package/dist/types/modes/rpc/host-uris.d.ts +0 -1
- package/dist/types/modes/rpc/rpc-client.d.ts +0 -299
- package/dist/types/modes/rpc/rpc-mode.d.ts +0 -86
- package/dist/types/modes/rpc/rpc-socket-security.d.ts +0 -10
- package/dist/types/modes/rpc/rpc-types.d.ts +0 -810
- package/dist/types/modes/shared/agent-wire/command-contract.d.ts +0 -18
- package/dist/types/modes/shared/agent-wire/command-dispatch.d.ts +0 -37
- package/dist/types/modes/shared/agent-wire/command-validation.d.ts +0 -2
- package/dist/types/modes/shared/agent-wire/handshake.d.ts +0 -56
- package/dist/types/modes/shared/agent-wire/host-tool-bridge.d.ts +0 -16
- package/dist/types/modes/shared/agent-wire/host-uri-bridge.d.ts +0 -17
- package/dist/types/modes/shared/agent-wire/protocol.d.ts +0 -25
- package/dist/types/modes/shared/agent-wire/responses.d.ts +0 -4
- package/dist/types/modes/shared/agent-wire/scopes.d.ts +0 -18
- package/dist/types/modes/shared/agent-wire/session-registry.d.ts +0 -25
- package/dist/types/modes/shared/agent-wire/ui-request-broker.d.ts +0 -42
- package/dist/types/modes/shared/agent-wire/ui-result.d.ts +0 -27
- package/dist/types/modes/shared/agent-wire/unattended-action-policy.d.ts +0 -29
- package/dist/types/modes/shared/agent-wire/unattended-audit.d.ts +0 -68
- package/dist/types/modes/shared/agent-wire/unattended-run-controller.d.ts +0 -166
- package/dist/types/modes/shared/agent-wire/unattended-session.d.ts +0 -127
- package/dist/types/notifications/config.d.ts +0 -132
- package/src/harness-control-plane/rpc-adapter.ts +0 -290
- package/src/modes/bridge/auth.ts +0 -41
- package/src/modes/bridge/bridge-client-bridge.ts +0 -47
- package/src/modes/bridge/bridge-mode.ts +0 -675
- package/src/modes/bridge/bridge-ui-context.ts +0 -200
- package/src/modes/bridge/event-stream.ts +0 -70
- package/src/modes/rpc/host-tools.ts +0 -1
- package/src/modes/rpc/host-uris.ts +0 -1
- package/src/modes/rpc/rpc-client.ts +0 -1166
- package/src/modes/rpc/rpc-mode.ts +0 -1029
- package/src/modes/rpc/rpc-socket-security.ts +0 -115
- package/src/modes/rpc/rpc-types.ts +0 -637
- package/src/modes/shared/agent-wire/command-contract.ts +0 -18
- package/src/modes/shared/agent-wire/command-dispatch.ts +0 -498
- package/src/modes/shared/agent-wire/command-validation.ts +0 -181
- package/src/modes/shared/agent-wire/handshake.ts +0 -157
- package/src/modes/shared/agent-wire/host-tool-bridge.ts +0 -197
- package/src/modes/shared/agent-wire/host-uri-bridge.ts +0 -236
- package/src/modes/shared/agent-wire/protocol.ts +0 -46
- package/src/modes/shared/agent-wire/responses.ts +0 -17
- package/src/modes/shared/agent-wire/scopes.ts +0 -94
- package/src/modes/shared/agent-wire/session-registry.ts +0 -109
- package/src/modes/shared/agent-wire/ui-request-broker.ts +0 -150
- package/src/modes/shared/agent-wire/ui-result.ts +0 -48
- package/src/modes/shared/agent-wire/unattended-action-policy.ts +0 -365
- package/src/modes/shared/agent-wire/unattended-audit.ts +0 -176
- package/src/modes/shared/agent-wire/unattended-run-controller.ts +0 -426
- package/src/modes/shared/agent-wire/unattended-session.ts +0 -528
- package/src/notifications/config.ts +0 -219
- package/src/notifications/index.ts +0 -1835
- package/src/notifications/telegram-daemon-cli.ts +0 -243
- package/src/tools/puppeteer/09_stealth_locale.txt +0 -46
- /package/dist/types/{notifications → sdk/bus}/attachment-registry.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/chat-adapters.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/daemon-paths.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/engine.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/helpers.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/lifecycle-commands.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/operator-runtime.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/rate-limit-pool.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/recent-activity.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/reply-sent-store.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/rich-draft.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/rich-render.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/threaded-inbound.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/threaded-render.d.ts +0 -0
- /package/src/{notifications → sdk/bus}/attachment-registry.ts +0 -0
- /package/src/{notifications → sdk/bus}/chat-adapters.ts +0 -0
- /package/src/{notifications → sdk/bus}/daemon-paths.ts +0 -0
- /package/src/{notifications → sdk/bus}/engine.ts +0 -0
- /package/src/{notifications → sdk/bus}/helpers.ts +0 -0
- /package/src/{notifications → sdk/bus}/operator-runtime.ts +0 -0
- /package/src/{notifications → sdk/bus}/rate-limit-pool.ts +0 -0
- /package/src/{notifications → sdk/bus}/recent-activity.ts +0 -0
- /package/src/{notifications → sdk/bus}/reply-sent-store.ts +0 -0
- /package/src/{notifications → sdk/bus}/rich-draft.ts +0 -0
- /package/src/{notifications → sdk/bus}/rich-render.ts +0 -0
- /package/src/{notifications → sdk/bus}/threaded-inbound.ts +0 -0
- /package/src/{notifications → sdk/bus}/threaded-render.ts +0 -0
|
@@ -8,10 +8,28 @@
|
|
|
8
8
|
import type { OAuthCallbackFlowOptions } from "@gajae-code/ai/utils/oauth/callback-server";
|
|
9
9
|
import { OAuthCallbackFlow } from "@gajae-code/ai/utils/oauth/callback-server";
|
|
10
10
|
import type { OAuthController, OAuthCredentials } from "@gajae-code/ai/utils/oauth/types";
|
|
11
|
+
import { MCPExpectedFailure } from "./types";
|
|
11
12
|
|
|
12
13
|
const DEFAULT_PORT = 3000;
|
|
13
14
|
const CALLBACK_PATH = "/callback";
|
|
14
15
|
const CALLBACK_BIND_HOSTNAME = "127.0.0.1";
|
|
16
|
+
type RefreshTokenResponse = {
|
|
17
|
+
access_token: string;
|
|
18
|
+
refresh_token?: string;
|
|
19
|
+
expires_in?: number;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
function isRefreshTokenResponse(value: unknown): value is RefreshTokenResponse {
|
|
23
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) return false;
|
|
24
|
+
const payload = value as Record<string, unknown>;
|
|
25
|
+
return (
|
|
26
|
+
typeof payload.access_token === "string" &&
|
|
27
|
+
payload.access_token.length > 0 &&
|
|
28
|
+
(payload.refresh_token === undefined || typeof payload.refresh_token === "string") &&
|
|
29
|
+
(payload.expires_in === undefined ||
|
|
30
|
+
(typeof payload.expires_in === "number" && Number.isFinite(payload.expires_in) && payload.expires_in >= 0))
|
|
31
|
+
);
|
|
32
|
+
}
|
|
15
33
|
|
|
16
34
|
function isLoopbackHostname(hostname: string): boolean {
|
|
17
35
|
return hostname === "localhost" || hostname === "127.0.0.1";
|
|
@@ -384,22 +402,34 @@ export async function refreshMCPOAuthToken(
|
|
|
384
402
|
if (clientId) params.set("client_id", clientId);
|
|
385
403
|
if (clientSecret) params.set("client_secret", clientSecret);
|
|
386
404
|
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
405
|
+
let response: Response;
|
|
406
|
+
try {
|
|
407
|
+
response = await fetch(tokenUrl, {
|
|
408
|
+
method: "POST",
|
|
409
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
410
|
+
body: params.toString(),
|
|
411
|
+
});
|
|
412
|
+
} catch (error) {
|
|
413
|
+
throw new MCPExpectedFailure(error);
|
|
414
|
+
}
|
|
392
415
|
|
|
393
416
|
if (!response.ok) {
|
|
394
|
-
|
|
395
|
-
|
|
417
|
+
let text: string;
|
|
418
|
+
try {
|
|
419
|
+
text = await response.text();
|
|
420
|
+
} catch (error) {
|
|
421
|
+
throw new MCPExpectedFailure(error);
|
|
422
|
+
}
|
|
423
|
+
throw new MCPExpectedFailure(new Error(`MCP OAuth refresh failed: ${response.status} ${text}`));
|
|
396
424
|
}
|
|
397
425
|
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
426
|
+
let data: unknown;
|
|
427
|
+
try {
|
|
428
|
+
data = await response.json();
|
|
429
|
+
} catch {
|
|
430
|
+
throw new MCPExpectedFailure();
|
|
431
|
+
}
|
|
432
|
+
if (!isRefreshTokenResponse(data)) throw new MCPExpectedFailure();
|
|
403
433
|
const expiresIn = data.expires_in ?? 3600;
|
|
404
434
|
return {
|
|
405
435
|
access: data.access_token,
|
|
@@ -15,7 +15,7 @@ import type {
|
|
|
15
15
|
MCPSseServerConfig,
|
|
16
16
|
MCPTransport,
|
|
17
17
|
} from "../../runtime-mcp/types";
|
|
18
|
-
import { toJsonRpcError } from "../../runtime-mcp/types";
|
|
18
|
+
import { MCPExpectedFailure, toJsonRpcError } from "../../runtime-mcp/types";
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
21
|
* HTTP transport for MCP servers.
|
|
@@ -123,7 +123,7 @@ export class HttpTransport implements MCPTransport {
|
|
|
123
123
|
}
|
|
124
124
|
} catch (error) {
|
|
125
125
|
if (error instanceof Error && error.name !== "AbortError") {
|
|
126
|
-
logger.debug("HTTP SSE stream error"
|
|
126
|
+
logger.debug("HTTP SSE stream error");
|
|
127
127
|
this.onError?.(error);
|
|
128
128
|
}
|
|
129
129
|
}
|
|
@@ -160,10 +160,14 @@ export class HttpTransport implements MCPTransport {
|
|
|
160
160
|
if (newHeaders) {
|
|
161
161
|
// Persist refreshed headers so subsequent requests use them directly
|
|
162
162
|
this.config = { ...this.config, headers: newHeaders };
|
|
163
|
-
|
|
163
|
+
try {
|
|
164
|
+
return await this.#executeRequest<T>(method, params, options);
|
|
165
|
+
} catch (retryError) {
|
|
166
|
+
throw retryError instanceof MCPExpectedFailure ? retryError : new MCPExpectedFailure(retryError);
|
|
167
|
+
}
|
|
164
168
|
}
|
|
165
169
|
}
|
|
166
|
-
throw error;
|
|
170
|
+
throw error instanceof MCPExpectedFailure ? error : new MCPExpectedFailure(error);
|
|
167
171
|
}
|
|
168
172
|
}
|
|
169
173
|
|
|
@@ -173,7 +177,7 @@ export class HttpTransport implements MCPTransport {
|
|
|
173
177
|
options: MCPRequestOptions | undefined,
|
|
174
178
|
): Promise<T> {
|
|
175
179
|
if (!this.#connected) {
|
|
176
|
-
throw new
|
|
180
|
+
throw new MCPExpectedFailure();
|
|
177
181
|
}
|
|
178
182
|
|
|
179
183
|
const id = Snowflake.next();
|
|
@@ -238,10 +242,27 @@ export class HttpTransport implements MCPTransport {
|
|
|
238
242
|
}
|
|
239
243
|
|
|
240
244
|
// Handle JSON response
|
|
241
|
-
|
|
245
|
+
if (!response.body) {
|
|
246
|
+
throw new MCPExpectedFailure();
|
|
247
|
+
}
|
|
248
|
+
const parsedResult = await response.json();
|
|
249
|
+
|
|
250
|
+
if (
|
|
251
|
+
typeof parsedResult !== "object" ||
|
|
252
|
+
parsedResult === null ||
|
|
253
|
+
!("id" in parsedResult) ||
|
|
254
|
+
parsedResult.id !== id ||
|
|
255
|
+
(!("result" in parsedResult) && !("error" in parsedResult))
|
|
256
|
+
) {
|
|
257
|
+
throw new MCPExpectedFailure();
|
|
258
|
+
}
|
|
242
259
|
|
|
243
|
-
|
|
244
|
-
|
|
260
|
+
const result = parsedResult as JsonRpcResponse;
|
|
261
|
+
if ("error" in result) {
|
|
262
|
+
if (!result.error) {
|
|
263
|
+
throw new MCPExpectedFailure();
|
|
264
|
+
}
|
|
265
|
+
throw new MCPExpectedFailure(new Error(`MCP error ${result.error.code}: ${result.error.message}`));
|
|
245
266
|
}
|
|
246
267
|
|
|
247
268
|
return result.result as T;
|
|
@@ -260,7 +281,7 @@ export class HttpTransport implements MCPTransport {
|
|
|
260
281
|
|
|
261
282
|
#parseSSEResponse<T>(response: Response, expectedId: string | number, options?: MCPRequestOptions): Promise<T> {
|
|
262
283
|
if (!response.body) {
|
|
263
|
-
throw new
|
|
284
|
+
throw new MCPExpectedFailure();
|
|
264
285
|
}
|
|
265
286
|
|
|
266
287
|
const timeout = this.config.timeout ?? 30000;
|
|
@@ -294,10 +315,19 @@ export class HttpTransport implements MCPTransport {
|
|
|
294
315
|
) {
|
|
295
316
|
captured = true;
|
|
296
317
|
drainController.abort();
|
|
297
|
-
|
|
298
|
-
|
|
318
|
+
const response = message as JsonRpcResponse;
|
|
319
|
+
if ("error" in response) {
|
|
320
|
+
if (!response.error) {
|
|
321
|
+
reject(new MCPExpectedFailure());
|
|
322
|
+
} else {
|
|
323
|
+
reject(
|
|
324
|
+
new MCPExpectedFailure(
|
|
325
|
+
new Error(`MCP error ${response.error.code}: ${response.error.message}`),
|
|
326
|
+
),
|
|
327
|
+
);
|
|
328
|
+
}
|
|
299
329
|
} else {
|
|
300
|
-
resolve(
|
|
330
|
+
resolve(response.result as T);
|
|
301
331
|
}
|
|
302
332
|
return;
|
|
303
333
|
}
|
|
@@ -306,18 +336,18 @@ export class HttpTransport implements MCPTransport {
|
|
|
306
336
|
}
|
|
307
337
|
}
|
|
308
338
|
if (!captured) {
|
|
309
|
-
reject(new
|
|
339
|
+
reject(new MCPExpectedFailure());
|
|
310
340
|
}
|
|
311
341
|
} catch (error) {
|
|
312
342
|
if (captured) return;
|
|
313
343
|
if (error instanceof Error && error.name === "AbortError") {
|
|
314
344
|
if (options?.signal?.aborted) {
|
|
315
|
-
reject(error);
|
|
345
|
+
reject(new MCPExpectedFailure(error));
|
|
316
346
|
} else {
|
|
317
|
-
reject(new Error(`SSE response timeout after ${timeout}ms`));
|
|
347
|
+
reject(new MCPExpectedFailure(new Error(`SSE response timeout after ${timeout}ms`)));
|
|
318
348
|
}
|
|
319
349
|
} else {
|
|
320
|
-
reject(error
|
|
350
|
+
reject(error instanceof MCPExpectedFailure ? error : new MCPExpectedFailure(error));
|
|
321
351
|
}
|
|
322
352
|
} finally {
|
|
323
353
|
clearTimeout(timeoutId);
|
|
@@ -390,7 +420,7 @@ export class HttpTransport implements MCPTransport {
|
|
|
390
420
|
|
|
391
421
|
async notify(method: string, params?: Record<string, unknown>): Promise<void> {
|
|
392
422
|
if (!this.#connected) {
|
|
393
|
-
throw new
|
|
423
|
+
throw new MCPExpectedFailure();
|
|
394
424
|
}
|
|
395
425
|
|
|
396
426
|
const body = {
|
|
@@ -447,9 +477,9 @@ export class HttpTransport implements MCPTransport {
|
|
|
447
477
|
} catch (error) {
|
|
448
478
|
clearTimeout(timeoutId);
|
|
449
479
|
if (error instanceof Error && error.name === "AbortError") {
|
|
450
|
-
throw new Error(`Notify timeout after ${timeout}ms`);
|
|
480
|
+
throw new MCPExpectedFailure(new Error(`Notify timeout after ${timeout}ms`));
|
|
451
481
|
}
|
|
452
|
-
throw error;
|
|
482
|
+
throw error instanceof MCPExpectedFailure ? error : new MCPExpectedFailure(error);
|
|
453
483
|
}
|
|
454
484
|
}
|
|
455
485
|
|
|
@@ -16,7 +16,7 @@ import type {
|
|
|
16
16
|
MCPStdioServerConfig,
|
|
17
17
|
MCPTransport,
|
|
18
18
|
} from "../../runtime-mcp/types";
|
|
19
|
-
import { toJsonRpcError } from "../../runtime-mcp/types";
|
|
19
|
+
import { MCPExpectedFailure, toJsonRpcError } from "../../runtime-mcp/types";
|
|
20
20
|
|
|
21
21
|
/**
|
|
22
22
|
* Stdio transport for MCP servers.
|
|
@@ -90,7 +90,7 @@ export class StdioTransport implements MCPTransport {
|
|
|
90
90
|
*/
|
|
91
91
|
async connect(): Promise<void> {
|
|
92
92
|
if (this.#closePromise) {
|
|
93
|
-
throw new
|
|
93
|
+
throw new MCPExpectedFailure();
|
|
94
94
|
}
|
|
95
95
|
if (this.#connected) return;
|
|
96
96
|
|
|
@@ -101,14 +101,19 @@ export class StdioTransport implements MCPTransport {
|
|
|
101
101
|
...Bun.env,
|
|
102
102
|
...this.config.env,
|
|
103
103
|
};
|
|
104
|
+
const cwd = this.config.cwd ?? getProjectDir();
|
|
104
105
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
106
|
+
try {
|
|
107
|
+
this.#process = spawnOwnedProcess([this.config.command, ...args], {
|
|
108
|
+
cwd,
|
|
109
|
+
env,
|
|
110
|
+
stdin: "pipe",
|
|
111
|
+
gracefulMs: CLOSE_WAIT_MS,
|
|
112
|
+
name: `mcp-stdio:${this.config.command}`,
|
|
113
|
+
});
|
|
114
|
+
} catch (error) {
|
|
115
|
+
throw new MCPExpectedFailure(error);
|
|
116
|
+
}
|
|
112
117
|
|
|
113
118
|
this.#connected = true;
|
|
114
119
|
|
|
@@ -121,6 +126,7 @@ export class StdioTransport implements MCPTransport {
|
|
|
121
126
|
|
|
122
127
|
async #startReadLoop(): Promise<void> {
|
|
123
128
|
if (!this.#process?.child.stdout) return;
|
|
129
|
+
let failure: MCPExpectedFailure | undefined;
|
|
124
130
|
try {
|
|
125
131
|
for await (const line of readJsonl(this.#process.child.stdout)) {
|
|
126
132
|
if (!this.#connected) break;
|
|
@@ -131,11 +137,12 @@ export class StdioTransport implements MCPTransport {
|
|
|
131
137
|
}
|
|
132
138
|
}
|
|
133
139
|
} catch (error) {
|
|
140
|
+
failure = new MCPExpectedFailure(error);
|
|
134
141
|
if (this.#connected) {
|
|
135
|
-
this.onError?.(
|
|
142
|
+
this.onError?.(failure);
|
|
136
143
|
}
|
|
137
144
|
} finally {
|
|
138
|
-
this.#handleClose();
|
|
145
|
+
this.#handleClose(failure);
|
|
139
146
|
}
|
|
140
147
|
}
|
|
141
148
|
|
|
@@ -180,8 +187,16 @@ export class StdioTransport implements MCPTransport {
|
|
|
180
187
|
const pending = this.#pendingRequests.get(response.id);
|
|
181
188
|
if (pending) {
|
|
182
189
|
this.#pendingRequests.delete(response.id);
|
|
183
|
-
if (response
|
|
184
|
-
pending.reject(new
|
|
190
|
+
if (!("result" in response) && !("error" in response)) {
|
|
191
|
+
pending.reject(new MCPExpectedFailure());
|
|
192
|
+
} else if ("error" in response) {
|
|
193
|
+
if (!response.error) {
|
|
194
|
+
pending.reject(new MCPExpectedFailure());
|
|
195
|
+
} else {
|
|
196
|
+
pending.reject(
|
|
197
|
+
new MCPExpectedFailure(new Error(`MCP error ${response.error.code}: ${response.error.message}`)),
|
|
198
|
+
);
|
|
199
|
+
}
|
|
185
200
|
} else {
|
|
186
201
|
pending.resolve(response.result);
|
|
187
202
|
}
|
|
@@ -228,8 +243,8 @@ export class StdioTransport implements MCPTransport {
|
|
|
228
243
|
stdin.flush();
|
|
229
244
|
}
|
|
230
245
|
|
|
231
|
-
#handleClose(): void {
|
|
232
|
-
void this.#closeInternal(true);
|
|
246
|
+
#handleClose(failure?: MCPExpectedFailure): void {
|
|
247
|
+
void this.#closeInternal(true, failure);
|
|
233
248
|
}
|
|
234
249
|
|
|
235
250
|
async request<T = unknown>(
|
|
@@ -239,7 +254,7 @@ export class StdioTransport implements MCPTransport {
|
|
|
239
254
|
): Promise<T> {
|
|
240
255
|
const stdin = this.#getStdin();
|
|
241
256
|
if (!this.#connected || !stdin) {
|
|
242
|
-
throw new
|
|
257
|
+
throw new MCPExpectedFailure();
|
|
243
258
|
}
|
|
244
259
|
|
|
245
260
|
const id = Snowflake.next();
|
|
@@ -255,7 +270,7 @@ export class StdioTransport implements MCPTransport {
|
|
|
255
270
|
|
|
256
271
|
if (signal?.aborted) {
|
|
257
272
|
const reason = signal.reason instanceof Error ? signal.reason : new Error("Aborted");
|
|
258
|
-
return Promise.reject(reason);
|
|
273
|
+
return Promise.reject(new MCPExpectedFailure(reason));
|
|
259
274
|
}
|
|
260
275
|
|
|
261
276
|
const { promise, resolve, reject } = Promise.withResolvers<T>();
|
|
@@ -278,7 +293,7 @@ export class StdioTransport implements MCPTransport {
|
|
|
278
293
|
const onAbort = () => {
|
|
279
294
|
cleanup();
|
|
280
295
|
const reason = signal?.reason instanceof Error ? signal.reason : new Error("Aborted");
|
|
281
|
-
reject(reason);
|
|
296
|
+
reject(new MCPExpectedFailure(reason));
|
|
282
297
|
};
|
|
283
298
|
|
|
284
299
|
if (signal) {
|
|
@@ -298,7 +313,7 @@ export class StdioTransport implements MCPTransport {
|
|
|
298
313
|
|
|
299
314
|
timer = setTimeout(() => {
|
|
300
315
|
cleanup();
|
|
301
|
-
reject(new Error(`Request timeout after ${timeout}ms`));
|
|
316
|
+
reject(new MCPExpectedFailure(new Error(`Request timeout after ${timeout}ms`)));
|
|
302
317
|
}, timeout);
|
|
303
318
|
|
|
304
319
|
const message = `${JSON.stringify(request)}\n`;
|
|
@@ -308,7 +323,7 @@ export class StdioTransport implements MCPTransport {
|
|
|
308
323
|
stdin.flush();
|
|
309
324
|
} catch (error: unknown) {
|
|
310
325
|
cleanup();
|
|
311
|
-
reject(
|
|
326
|
+
reject(new MCPExpectedFailure(error));
|
|
312
327
|
}
|
|
313
328
|
|
|
314
329
|
return promise;
|
|
@@ -317,7 +332,7 @@ export class StdioTransport implements MCPTransport {
|
|
|
317
332
|
async notify(method: string, params?: Record<string, unknown>): Promise<void> {
|
|
318
333
|
const stdin = this.#getStdin();
|
|
319
334
|
if (!this.#connected || !stdin) {
|
|
320
|
-
throw new
|
|
335
|
+
throw new MCPExpectedFailure();
|
|
321
336
|
}
|
|
322
337
|
|
|
323
338
|
const notification = {
|
|
@@ -327,29 +342,33 @@ export class StdioTransport implements MCPTransport {
|
|
|
327
342
|
};
|
|
328
343
|
|
|
329
344
|
const message = `${JSON.stringify(notification)}\n`;
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
345
|
+
try {
|
|
346
|
+
// Bun's FileSink has write() method directly
|
|
347
|
+
stdin.write(message);
|
|
348
|
+
stdin.flush();
|
|
349
|
+
} catch (error) {
|
|
350
|
+
throw new MCPExpectedFailure(error);
|
|
351
|
+
}
|
|
333
352
|
}
|
|
334
353
|
|
|
335
354
|
async close(): Promise<void> {
|
|
336
355
|
await this.#closeInternal(false);
|
|
337
356
|
}
|
|
338
357
|
|
|
339
|
-
#closeInternal(fromReadLoop: boolean): Promise<void> {
|
|
358
|
+
#closeInternal(fromReadLoop: boolean, failure?: MCPExpectedFailure): Promise<void> {
|
|
340
359
|
if (this.#closePromise) return this.#closePromise;
|
|
341
|
-
this.#closePromise = this.#finishClose(fromReadLoop).finally(() => {
|
|
360
|
+
this.#closePromise = this.#finishClose(fromReadLoop, failure).finally(() => {
|
|
342
361
|
this.#closePromise = null;
|
|
343
362
|
});
|
|
344
363
|
return this.#closePromise;
|
|
345
364
|
}
|
|
346
365
|
|
|
347
|
-
async #finishClose(fromReadLoop: boolean): Promise<void> {
|
|
366
|
+
async #finishClose(fromReadLoop: boolean, failure?: MCPExpectedFailure): Promise<void> {
|
|
348
367
|
const wasConnected = this.#connected;
|
|
349
368
|
this.#connected = false;
|
|
350
369
|
|
|
351
370
|
for (const [, pending] of this.#pendingRequests) {
|
|
352
|
-
pending.reject(new
|
|
371
|
+
pending.reject(failure ?? new MCPExpectedFailure());
|
|
353
372
|
}
|
|
354
373
|
this.#pendingRequests.clear();
|
|
355
374
|
|
package/src/runtime-mcp/types.ts
CHANGED
|
@@ -223,6 +223,16 @@ export interface MCPToolCallResult {
|
|
|
223
223
|
// Transport Types
|
|
224
224
|
// =============================================================================
|
|
225
225
|
|
|
226
|
+
/** Expected configured-server transport or protocol failure. */
|
|
227
|
+
export class MCPExpectedFailure extends Error {
|
|
228
|
+
constructor(cause?: unknown) {
|
|
229
|
+
super(
|
|
230
|
+
cause instanceof Error ? cause.message : "MCP server operation failed",
|
|
231
|
+
cause === undefined ? undefined : { cause },
|
|
232
|
+
);
|
|
233
|
+
this.name = "MCPExpectedFailure";
|
|
234
|
+
}
|
|
235
|
+
}
|
|
226
236
|
export interface MCPRequestOptions {
|
|
227
237
|
/** Abort signal (e.g. Escape-to-interrupt) */
|
|
228
238
|
signal?: AbortSignal;
|