@gajae-code/coding-agent 0.13.2 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +215 -8
- package/README.md +2 -0
- package/bin/gajaessi.js +4 -0
- package/dist/types/async/job-manager.d.ts +55 -2
- package/dist/types/async/support.d.ts +14 -0
- package/dist/types/capability/mcp.d.ts +6 -0
- package/dist/types/capability/types.d.ts +6 -0
- package/dist/types/cli/accounts-cli.d.ts +19 -0
- package/dist/types/cli/args.d.ts +3 -0
- package/dist/types/cli/config-cli.d.ts +6 -0
- package/dist/types/cli/crash-cli.d.ts +10 -0
- package/dist/types/cli/customize-doctor.d.ts +145 -0
- package/dist/types/cli/daemon-cli.d.ts +3 -1
- package/dist/types/cli/mcp-cli.d.ts +11 -0
- package/dist/types/cli/notify-cli.d.ts +1 -1
- package/dist/types/cli/root-flags.d.ts +12 -0
- package/dist/types/cli/setup-cli.d.ts +3 -1
- package/dist/types/cli/skills-cli.d.ts +2 -1
- package/dist/types/cli/update-cli.d.ts +19 -1
- package/dist/types/cli.d.ts +6 -0
- package/dist/types/commands/accounts.d.ts +40 -0
- package/dist/types/commands/crash.d.ts +24 -0
- package/dist/types/commands/customize.d.ts +22 -0
- package/dist/types/commands/daemon.d.ts +1 -1
- package/dist/types/commands/launch.d.ts +6 -0
- package/dist/types/commands/setup.d.ts +6 -0
- package/dist/types/commands/skills.d.ts +6 -1
- package/dist/types/commands/update.d.ts +7 -0
- package/dist/types/config/atomic-yaml-patch-worker.d.ts +25 -0
- package/dist/types/config/atomic-yaml-patch.d.ts +62 -2
- package/dist/types/config/config-schema-version.d.ts +10 -0
- package/dist/types/config/file-lock.d.ts +18 -0
- package/dist/types/config/model-profile-activation.d.ts +3 -1
- package/dist/types/config/model-registry.d.ts +10 -1
- package/dist/types/config/models-config-schema.d.ts +2 -0
- package/dist/types/config/settings-schema.d.ts +73 -9
- package/dist/types/config/settings.d.ts +63 -0
- package/dist/types/config/skill-settings-defaults.d.ts +26 -0
- package/dist/types/config/task-delegation.d.ts +39 -0
- package/dist/types/config/update-channel.d.ts +10 -0
- package/dist/types/coordinator-mcp/server.d.ts +5 -1
- package/dist/types/crash/index-store.d.ts +87 -0
- package/dist/types/crash/nudge.d.ts +50 -0
- package/dist/types/crash/record-loader.d.ts +17 -0
- package/dist/types/crash/report.d.ts +134 -0
- package/dist/types/crash/sanitize.d.ts +25 -0
- package/dist/types/cursor.d.ts +13 -2
- package/dist/types/customization/import.d.ts +37 -0
- package/dist/types/customization/index.d.ts +4 -0
- package/dist/types/customization/inventory.d.ts +25 -0
- package/dist/types/customization/mutations.d.ts +32 -0
- package/dist/types/customization/types.d.ts +115 -0
- package/dist/types/daemon/control-types.d.ts +8 -1
- package/dist/types/daemon/operator-contract.d.ts +4 -4
- package/dist/types/discovery/claude.d.ts +39 -1
- package/dist/types/discovery/codex.d.ts +39 -1
- package/dist/types/discovery/index.d.ts +2 -0
- package/dist/types/discovery/mcp-compat.d.ts +30 -0
- package/dist/types/edit/renderer.d.ts +23 -0
- package/dist/types/extensibility/extensions/runner.d.ts +3 -0
- package/dist/types/extensibility/extensions/types.d.ts +21 -4
- package/dist/types/extensibility/gjc-plugins/observability.d.ts +6 -1
- package/dist/types/extensibility/gjc-plugins/registry.d.ts +8 -1
- package/dist/types/extensibility/hooks/loader.d.ts +19 -5
- package/dist/types/extensibility/runtime-skill-discovery.d.ts +22 -1
- package/dist/types/extensibility/skill-management.d.ts +107 -0
- package/dist/types/gjc-runtime/deep-interview-runtime.d.ts +3 -1
- package/dist/types/gjc-runtime/launch-worktree.d.ts +8 -0
- package/dist/types/gjc-runtime/linux-proc.d.ts +3 -0
- package/dist/types/gjc-runtime/ralplan-runtime.d.ts +10 -6
- package/dist/types/gjc-runtime/session-state-lock.d.ts +104 -0
- package/dist/types/gjc-runtime/session-state-sidecar.d.ts +120 -2
- package/dist/types/gjc-runtime/state-writer.d.ts +10 -1
- package/dist/types/gjc-runtime/ultragoal-guard.d.ts +4 -2
- package/dist/types/gjc-runtime/ultragoal-runtime.d.ts +8 -6
- package/dist/types/gjc-runtime/workflow-settings.d.ts +109 -0
- package/dist/types/hooks/events.d.ts +60 -0
- package/dist/types/hooks/normalize.d.ts +83 -0
- package/dist/types/hooks/skill-state.d.ts +9 -2
- package/dist/types/main.d.ts +2 -1
- package/dist/types/modes/acp/abort-scope.d.ts +13 -0
- package/dist/types/modes/acp/acp-agent.d.ts +7 -4
- package/dist/types/modes/components/customization/customization-dashboard.d.ts +44 -0
- package/dist/types/modes/components/customization/import-wizard.d.ts +21 -0
- package/dist/types/modes/components/customization/index.d.ts +1 -0
- package/dist/types/modes/components/dynamic-theme-text.d.ts +9 -0
- package/dist/types/modes/components/gajae-pet-widget.d.ts +6 -28
- package/dist/types/modes/components/irc-sidebar.d.ts +1 -0
- package/dist/types/modes/components/iterm-pet-transport.d.ts +122 -0
- package/dist/types/modes/components/oauth-selector.d.ts +10 -4
- package/dist/types/modes/components/pet-capability.d.ts +7 -21
- package/dist/types/modes/components/settings-selector.d.ts +5 -0
- package/dist/types/modes/components/status-line/gh.d.ts +6 -2
- package/dist/types/modes/controllers/extension-ui-controller.d.ts +1 -1
- package/dist/types/modes/controllers/selector-controller.d.ts +7 -8
- package/dist/types/modes/controllers/stt-controller.d.ts +1 -1
- package/dist/types/modes/interactive-mode.d.ts +1 -0
- package/dist/types/modes/theme/defaults/index.d.ts +118 -0
- package/dist/types/modes/types.d.ts +1 -0
- package/dist/types/modes/utils/injected-user-submission.d.ts +10 -0
- package/dist/types/runtime-mcp/config.d.ts +9 -0
- package/dist/types/runtime-mcp/manager.d.ts +26 -1
- package/dist/types/runtime-mcp/oauth-discovery.d.ts +4 -0
- package/dist/types/runtime-mcp/oauth-flow.d.ts +24 -1
- package/dist/types/runtime-mcp/pool-key.d.ts +2 -0
- package/dist/types/runtime-mcp/protocol.d.ts +278 -0
- package/dist/types/runtime-mcp/scope-config.d.ts +29 -0
- package/dist/types/runtime-mcp/tool-bridge.d.ts +15 -13
- package/dist/types/runtime-mcp/transports/http.d.ts +9 -0
- package/dist/types/runtime-mcp/types.d.ts +102 -10
- package/dist/types/sdk/acp/adapter.d.ts +26 -5
- package/dist/types/sdk/broker/broker.d.ts +3 -55
- package/dist/types/sdk/broker/lifecycle.d.ts +18 -12
- package/dist/types/sdk/broker/session-index.d.ts +14 -5
- package/dist/types/sdk/broker/startup-failure.d.ts +16 -1
- package/dist/types/sdk/bus/chat-daemon-control.d.ts +51 -1
- package/dist/types/sdk/bus/chat-daemon-runtime.d.ts +4 -41
- package/dist/types/sdk/bus/config.d.ts +11 -0
- package/dist/types/sdk/bus/conversation-store.d.ts +0 -1
- package/dist/types/sdk/bus/daemon-paths.d.ts +6 -0
- package/dist/types/sdk/bus/discord-conversation.d.ts +2 -0
- package/dist/types/sdk/bus/discord-daemon.d.ts +17 -12
- package/dist/types/sdk/bus/existing-thread-readiness.d.ts +4 -34
- package/dist/types/sdk/bus/inbound-reaction-ordering.d.ts +61 -0
- package/dist/types/sdk/bus/index.d.ts +85 -99
- package/dist/types/sdk/bus/kind-aware-reconciliation.d.ts +29 -7
- package/dist/types/sdk/bus/managed-daemon.d.ts +2 -32
- package/dist/types/sdk/bus/notification-service.d.ts +52 -0
- package/dist/types/sdk/bus/operator-runtime.d.ts +1 -1
- package/dist/types/sdk/bus/prompt-reconciliation.d.ts +16 -5
- package/dist/types/sdk/bus/reconciliation-store.d.ts +113 -5
- package/dist/types/sdk/bus/session-control.d.ts +25 -1
- package/dist/types/sdk/bus/slack-conversation.d.ts +4 -0
- package/dist/types/sdk/bus/slack-daemon.d.ts +9 -17
- package/dist/types/sdk/bus/slack-live-provider.d.ts +3 -1
- package/dist/types/sdk/bus/slack-provider.d.ts +4 -0
- package/dist/types/sdk/bus/slack-thread-binding.d.ts +6 -40
- package/dist/types/sdk/bus/telegram-adoption-intent.d.ts +30 -104
- package/dist/types/sdk/bus/telegram-daemon-cli.d.ts +10 -0
- package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +262 -19
- package/dist/types/sdk/bus/telegram-daemon-orphan-reap.d.ts +125 -0
- package/dist/types/sdk/bus/telegram-daemon-owner-registry.d.ts +22 -0
- package/dist/types/sdk/bus/telegram-daemon.d.ts +119 -310
- package/dist/types/sdk/bus/telegram-reference.d.ts +1 -47
- package/dist/types/sdk/bus/threaded-render.d.ts +1 -0
- package/dist/types/sdk/bus/topic-registry.d.ts +33 -17
- package/dist/types/sdk/cli/rows.d.ts +2 -11
- package/dist/types/sdk/cli/session-cli.d.ts +15 -25
- package/dist/types/sdk/client/client.d.ts +97 -1
- package/dist/types/sdk/host/control/dispatch.d.ts +0 -7
- package/dist/types/sdk/host/control/index.d.ts +1 -1
- package/dist/types/sdk/host/control/operations.d.ts +18 -5
- package/dist/types/sdk/host/control/runtime-gate.d.ts +19 -0
- package/dist/types/sdk/host/host.d.ts +15 -1
- package/dist/types/sdk/host/query/handlers.d.ts +5 -0
- package/dist/types/sdk/host/reverse-leases.d.ts +1 -1
- package/dist/types/sdk/host/session-runtime.d.ts +127 -7
- package/dist/types/sdk/host/types.d.ts +1 -1
- package/dist/types/sdk/host/websocket-transport.d.ts +1 -1
- package/dist/types/sdk/index.d.ts +2 -1
- package/dist/types/sdk/lifecycle/broker-client.d.ts +8 -0
- package/dist/types/sdk/lifecycle/client.d.ts +59 -0
- package/dist/types/sdk/lifecycle/index.d.ts +3 -0
- package/dist/types/sdk/lifecycle/service.d.ts +232 -0
- package/dist/types/sdk/mcp/server.d.ts +9 -6
- package/dist/types/sdk/prompt-deadline-lease.d.ts +43 -0
- package/dist/types/sdk/prompt-deadline-manager.d.ts +28 -0
- package/dist/types/sdk/prompt-status.d.ts +10 -3
- package/dist/types/sdk/protocol/operation-registry.d.ts +5 -0
- package/dist/types/sdk/receipt-state.d.ts +17 -0
- package/dist/types/sdk/reconciliation-extensions.d.ts +2 -0
- package/dist/types/sdk/router/index.d.ts +1 -0
- package/dist/types/sdk/router/session-router.d.ts +152 -0
- package/dist/types/sdk/session-list.d.ts +22 -0
- package/dist/types/sdk/session-reconnect.d.ts +43 -1
- package/dist/types/sdk/session.d.ts +34 -1
- package/dist/types/sdk/transport/serve-cli.d.ts +1 -4
- package/dist/types/session/account-inventory.d.ts +86 -0
- package/dist/types/session/agent-session.d.ts +145 -6
- package/dist/types/session/agent-storage.d.ts +10 -0
- package/dist/types/session/coordinator-tool-label.d.ts +28 -0
- package/dist/types/session/internal/managed-session-storage.d.ts +23 -4
- package/dist/types/session/messages.d.ts +1 -1
- package/dist/types/session/secure-token-file.d.ts +3 -0
- package/dist/types/session/session-manager.d.ts +47 -1
- package/dist/types/session/startup-auth-config.d.ts +44 -0
- package/dist/types/session/terminal-abort.d.ts +378 -0
- package/dist/types/session/yield-queue.d.ts +7 -0
- package/dist/types/session-import/claude.d.ts +26 -0
- package/dist/types/session-import/codex.d.ts +88 -0
- package/dist/types/session-import/command.d.ts +35 -0
- package/dist/types/session-import/detect.d.ts +22 -0
- package/dist/types/session-import/index.d.ts +7 -0
- package/dist/types/session-import/provider-codex.d.ts +22 -0
- package/dist/types/session-import/provider-service.d.ts +38 -0
- package/dist/types/session-import/redact.d.ts +23 -0
- package/dist/types/session-import/service.d.ts +47 -0
- package/dist/types/session-import/types.d.ts +120 -0
- package/dist/types/setup/paseo/check.d.ts +16 -0
- package/dist/types/setup/paseo/install-saga.d.ts +115 -0
- package/dist/types/setup/paseo/json-publisher.d.ts +76 -0
- package/dist/types/setup/paseo/orchestration-preferences.d.ts +24 -0
- package/dist/types/setup/paseo/paseo-ownership.d.ts +87 -0
- package/dist/types/setup/paseo/paseo-setup.d.ts +29 -0
- package/dist/types/setup/paseo/provider-config.d.ts +35 -0
- package/dist/types/setup/paseo/remove.d.ts +14 -0
- package/dist/types/setup/paseo/result-types.d.ts +59 -0
- package/dist/types/setup/paseo/setup-deps.d.ts +73 -0
- package/dist/types/setup/paseo/skills-bridge.d.ts +44 -0
- package/dist/types/skill-state/active-state.d.ts +5 -1
- package/dist/types/slash-commands/acp-builtins.d.ts +5 -1
- package/dist/types/slash-commands/builtin-registry.d.ts +2 -0
- package/dist/types/slash-commands/helpers/credential-switch.d.ts +12 -0
- package/dist/types/slash-commands/helpers/usage-report.d.ts +5 -6
- package/dist/types/slash-commands/types.d.ts +7 -1
- package/dist/types/task/executor.d.ts +10 -0
- package/dist/types/task/index.d.ts +3 -1
- package/dist/types/tools/ask-answer-registry.d.ts +6 -3
- package/dist/types/tools/bash-sleep-advisory.d.ts +14 -0
- package/dist/types/tools/bash.d.ts +2 -6
- package/dist/types/tools/browser/attach.d.ts +11 -0
- package/dist/types/tools/browser/launch.d.ts +20 -0
- package/dist/types/tools/browser/profile-discovery.d.ts +6 -0
- package/dist/types/tools/browser/render.d.ts +1 -0
- package/dist/types/tools/browser.d.ts +3 -1
- package/dist/types/tools/image-gen.d.ts +10 -2
- package/dist/types/tools/index.d.ts +8 -0
- package/dist/types/tools/monitor.d.ts +1 -1
- package/dist/types/tools/skill-discovery.d.ts +8 -1
- package/dist/types/tools/subagent.d.ts +2 -0
- package/dist/types/tools/ultragoal-ask-guard.d.ts +2 -2
- package/dist/types/utils/herdr-pane.d.ts +76 -0
- package/package.json +19 -9
- package/scripts/build-binary.ts +2 -1
- package/scripts/build-sdk-package-smoke.ts +2 -13
- package/scripts/capture-sticky-viewport-showcase.ts +0 -1
- package/scripts/compile-args.ts +2 -0
- package/scripts/generate-sdk-adapter-parity-manifest.ts +31 -16
- package/scripts/generate-sdk-operation-inventory.ts +28 -0
- package/scripts/generate-telegram-baseline-manifest.ts +1 -0
- package/scripts/generate-tool-catalog.ts +6 -4
- package/scripts/verify-gjc-sdk-canonicalization.ts +5 -39
- package/src/async/job-manager.ts +352 -17
- package/src/async/support.ts +25 -0
- package/src/autoresearch/dashboard.ts +28 -13
- package/src/capability/index.ts +3 -1
- package/src/capability/mcp.ts +6 -0
- package/src/capability/types.ts +6 -0
- package/src/cli/accounts-cli.ts +395 -0
- package/src/cli/args.ts +23 -0
- package/src/cli/auth-broker-cli.ts +136 -66
- package/src/cli/auth-gateway-cli.ts +94 -70
- package/src/cli/config-cli.ts +27 -2
- package/src/cli/crash-cli.ts +78 -0
- package/src/cli/customize-doctor.ts +1605 -0
- package/src/cli/daemon-cli.ts +12 -3
- package/src/cli/fast-help.ts +1 -0
- package/src/cli/mcp-cli.ts +128 -60
- package/src/cli/notify-cli.ts +8 -14
- package/src/cli/root-flags.ts +8 -0
- package/src/cli/setup-cli.ts +145 -0
- package/src/cli/skills-cli.ts +38 -2
- package/src/cli/update-cli.ts +167 -12
- package/src/cli.ts +4 -0
- package/src/commands/accounts.ts +71 -0
- package/src/commands/crash.ts +35 -0
- package/src/commands/customize.ts +84 -0
- package/src/commands/daemon.ts +2 -2
- package/src/commands/deep-interview.ts +2 -0
- package/src/commands/launch.ts +1 -0
- package/src/commands/mcp.ts +12 -7
- package/src/commands/ralplan.ts +2 -0
- package/src/commands/sdk.ts +65 -32
- package/src/commands/setup.ts +5 -0
- package/src/commands/skills.ts +14 -4
- package/src/commands/ultragoal.ts +10 -1
- package/src/commands/update.ts +26 -15
- package/src/config/atomic-yaml-patch-worker.ts +57 -0
- package/src/config/atomic-yaml-patch.ts +769 -29
- package/src/config/config-schema-version.ts +10 -0
- package/src/config/file-lock.ts +70 -1
- package/src/config/mcp-schema.json +52 -14
- package/src/config/model-profile-activation.ts +23 -2
- package/src/config/model-profiles.ts +88 -21
- package/src/config/model-registry.ts +147 -21
- package/src/config/models-config-schema.ts +1 -1
- package/src/config/settings-schema.ts +77 -7
- package/src/config/settings.ts +4038 -199
- package/src/config/skill-settings-defaults.ts +41 -3
- package/src/config/task-delegation.ts +87 -0
- package/src/config/update-channel.ts +23 -0
- package/src/coordinator-mcp/server.ts +377 -308
- package/src/crash/index-store.ts +723 -0
- package/src/crash/nudge.ts +89 -0
- package/src/crash/record-loader.ts +149 -0
- package/src/crash/report.ts +551 -0
- package/src/crash/sanitize.ts +129 -0
- package/src/cursor.ts +36 -10
- package/src/customization/import.ts +946 -0
- package/src/customization/index.ts +4 -0
- package/src/customization/inventory.ts +335 -0
- package/src/customization/mutations.ts +141 -0
- package/src/customization/types.ts +223 -0
- package/src/daemon/control-types.ts +8 -1
- package/src/daemon/operator-contract.ts +6 -6
- package/src/defaults/gjc/extensions/grok-cli-vendor/src/models/catalog.ts +31 -6
- package/src/defaults/gjc/skills/deep-interview/SKILL.md +11 -22
- package/src/defaults/gjc/skills/ralplan/SKILL.md +36 -23
- package/src/defaults/gjc/skills/ultragoal/SKILL.md +16 -0
- package/src/discovery/claude-hooks.ts +38 -0
- package/src/discovery/claude.ts +142 -209
- package/src/discovery/codex-hooks.ts +38 -0
- package/src/discovery/codex.ts +132 -198
- package/src/discovery/helpers.ts +8 -1
- package/src/discovery/index.ts +2 -0
- package/src/discovery/mcp-compat.ts +234 -0
- package/src/discovery/mcp-json.ts +6 -0
- package/src/edit/renderer.ts +40 -0
- package/src/edit/streaming.ts +4 -2
- package/src/exec/bash-executor.ts +24 -20
- package/src/export/html/index.ts +51 -2
- package/src/extensibility/extensions/loader.ts +9 -1
- package/src/extensibility/extensions/runner.ts +17 -4
- package/src/extensibility/extensions/types.ts +31 -6
- package/src/extensibility/gjc-plugins/constrained-hooks.ts +33 -0
- package/src/extensibility/gjc-plugins/installer.ts +9 -5
- package/src/extensibility/gjc-plugins/observability.ts +8 -2
- package/src/extensibility/gjc-plugins/registry.ts +13 -2
- package/src/extensibility/gjc-plugins/runtime-adapters.ts +3 -1
- package/src/extensibility/gjc-plugins/schema.ts +222 -39
- package/src/extensibility/hooks/loader.ts +154 -10
- package/src/extensibility/runtime-skill-discovery.ts +257 -60
- package/src/extensibility/skill-management.ts +368 -0
- package/src/extensibility/skills.ts +52 -16
- package/src/gjc-runtime/deep-interview-runtime.ts +45 -61
- package/src/gjc-runtime/launch-worktree.ts +56 -2
- package/src/gjc-runtime/linux-proc.ts +7 -1
- package/src/gjc-runtime/ralplan-runtime.ts +100 -164
- package/src/gjc-runtime/session-state-lock.ts +992 -0
- package/src/gjc-runtime/session-state-sidecar.ts +644 -142
- package/src/gjc-runtime/state-writer.ts +39 -14
- package/src/gjc-runtime/tmux-owner-isolation.ts +5 -4
- package/src/gjc-runtime/ultragoal-guard.ts +11 -4
- package/src/gjc-runtime/ultragoal-runtime.ts +44 -41
- package/src/gjc-runtime/workflow-settings.ts +596 -0
- package/src/goals/tools/goal-tool.ts +6 -1
- package/src/hooks/events.ts +291 -0
- package/src/hooks/native-skill-hook.ts +4 -0
- package/src/hooks/normalize.ts +369 -0
- package/src/hooks/skill-state.ts +165 -46
- package/src/internal-urls/docs-index.generated.ts +41 -32
- package/src/main.ts +36 -5
- package/src/migrate/mcp-mapper.ts +25 -2
- package/src/modes/acp/abort-scope.ts +29 -0
- package/src/modes/acp/acp-agent.ts +423 -98
- package/src/modes/components/assistant-message.ts +6 -1
- package/src/modes/components/chrome.ts +4 -3
- package/src/modes/components/customization/customization-dashboard.ts +443 -0
- package/src/modes/components/customization/import-wizard.ts +372 -0
- package/src/modes/components/customization/index.ts +1 -0
- package/src/modes/components/dynamic-theme-text.ts +22 -0
- package/src/modes/components/gajae-pet-widget.ts +607 -193
- package/src/modes/components/irc-sidebar.ts +11 -0
- package/src/modes/components/iterm-pet-transport.ts +585 -0
- package/src/modes/components/model-selector.ts +1 -6
- package/src/modes/components/oauth-selector.ts +277 -86
- package/src/modes/components/pet-capability.ts +35 -31
- package/src/modes/components/settings-selector.ts +29 -5
- package/src/modes/components/status-line/gh.ts +45 -1
- package/src/modes/components/status-line/segments.ts +19 -4
- package/src/modes/components/tool-status-header.ts +13 -3
- package/src/modes/controllers/command-controller.ts +20 -8
- package/src/modes/controllers/extension-ui-controller.ts +56 -257
- package/src/modes/controllers/input-controller.ts +10 -0
- package/src/modes/controllers/runtime-mcp-command-controller.ts +16 -3
- package/src/modes/controllers/selector-controller.ts +238 -77
- package/src/modes/controllers/stt-controller.ts +3 -3
- package/src/modes/interactive-mode.ts +88 -16
- package/src/modes/print-mode.ts +35 -6
- package/src/modes/runtime-init.ts +21 -68
- package/src/modes/theme/defaults/index.ts +2 -0
- package/src/modes/theme/defaults/ouroboros.json +118 -0
- package/src/modes/types.ts +1 -0
- package/src/modes/utils/injected-user-submission.ts +25 -0
- package/src/modes/utils/terminal-bell.ts +15 -1
- package/src/prompts/agent-fragments/ralplan-persistence.md +1 -1
- package/src/prompts/agent-fragments/restricted-bash.md +1 -1
- package/src/prompts/agents/critic.md +1 -1
- package/src/prompts/system/rlm-research.md +1 -1
- package/src/prompts/system/system-prompt.md +0 -2
- package/src/prompts/tools/bash.md +7 -1
- package/src/prompts/tools/browser.md +1 -1
- package/src/prompts/tools/cron.md +6 -6
- package/src/prompts/tools/read.md +0 -2
- package/src/prompts/tools/skill-discovery.md +4 -2
- package/src/runtime-mcp/client.ts +427 -23
- package/src/runtime-mcp/config.ts +37 -5
- package/src/runtime-mcp/manager-pool.test.ts +56 -0
- package/src/runtime-mcp/manager.ts +52 -2
- package/src/runtime-mcp/oauth-discovery.ts +13 -0
- package/src/runtime-mcp/oauth-flow.ts +46 -1
- package/src/runtime-mcp/pool-key.ts +5 -1
- package/src/runtime-mcp/pool.test.ts +9 -0
- package/src/runtime-mcp/protocol.test.ts +353 -0
- package/src/runtime-mcp/protocol.ts +624 -0
- package/src/runtime-mcp/scope-config.ts +78 -0
- package/src/runtime-mcp/tool-bridge.ts +44 -10
- package/src/runtime-mcp/transports/http.ts +84 -13
- package/src/runtime-mcp/types.ts +123 -12
- package/src/sdk/acp/adapter.ts +328 -97
- package/src/sdk/broker/broker.ts +160 -741
- package/src/sdk/broker/ensure.ts +9 -1
- package/src/sdk/broker/lifecycle.ts +510 -116
- package/src/sdk/broker/operation-receipt-ledger.ts +11 -2
- package/src/sdk/broker/process-incarnation.ts +19 -0
- package/src/sdk/broker/session-index.ts +516 -117
- package/src/sdk/broker/startup-failure.ts +28 -5
- package/src/sdk/broker/transport.ts +1 -13
- package/src/sdk/bus/chat-daemon-cli.ts +4 -2
- package/src/sdk/bus/chat-daemon-control.ts +67 -6
- package/src/sdk/bus/chat-daemon-runtime.ts +183 -859
- package/src/sdk/bus/config.ts +13 -0
- package/src/sdk/bus/conversation-store.ts +59 -171
- package/src/sdk/bus/daemon-paths.ts +20 -0
- package/src/sdk/bus/discord-conversation.ts +2 -0
- package/src/sdk/bus/discord-daemon.ts +524 -126
- package/src/sdk/bus/discord-live-provider.ts +206 -79
- package/src/sdk/bus/existing-thread-readiness.ts +4 -97
- package/src/sdk/bus/inbound-reaction-ordering.ts +122 -0
- package/src/sdk/bus/index.ts +2480 -456
- package/src/sdk/bus/kind-aware-reconciliation.ts +204 -34
- package/src/sdk/bus/lifecycle-commands.ts +2 -2
- package/src/sdk/bus/managed-daemon.ts +2 -145
- package/src/sdk/bus/notification-service.ts +196 -0
- package/src/sdk/bus/operator-runtime.ts +1 -1
- package/src/sdk/bus/prompt-reconciliation.ts +24 -15
- package/src/sdk/bus/reconciliation-store.ts +553 -24
- package/src/sdk/bus/session-control.ts +49 -3
- package/src/sdk/bus/slack-conversation.ts +4 -0
- package/src/sdk/bus/slack-daemon.ts +733 -134
- package/src/sdk/bus/slack-live-provider.ts +65 -15
- package/src/sdk/bus/slack-provider.ts +4 -0
- package/src/sdk/bus/slack-thread-binding.ts +9 -104
- package/src/sdk/bus/telegram-adoption-intent.ts +299 -209
- package/src/sdk/bus/telegram-daemon-cli.ts +194 -7
- package/src/sdk/bus/telegram-daemon-contract.ts +265 -19
- package/src/sdk/bus/telegram-daemon-control.ts +3 -13
- package/src/sdk/bus/telegram-daemon-orphan-reap.ts +498 -0
- package/src/sdk/bus/telegram-daemon-owner-registry.ts +176 -0
- package/src/sdk/bus/telegram-daemon.ts +2552 -2280
- package/src/sdk/bus/telegram-reference.ts +1 -226
- package/src/sdk/bus/telegram-setup.ts +2 -2
- package/src/sdk/bus/threaded-render.ts +1 -0
- package/src/sdk/bus/topic-registry.ts +279 -146
- package/src/sdk/cli/rows.ts +2 -35
- package/src/sdk/cli/session-cli.ts +776 -700
- package/src/sdk/client/client.ts +892 -1
- package/src/sdk/host/control/dispatch.ts +93 -58
- package/src/sdk/host/control/index.ts +1 -1
- package/src/sdk/host/control/operations.ts +18 -10
- package/src/sdk/host/control/runtime-gate.ts +40 -0
- package/src/sdk/host/host.ts +63 -12
- package/src/sdk/host/query/handlers.ts +66 -7
- package/src/sdk/host/reverse-leases.ts +2 -2
- package/src/sdk/host/sdk-surface-parity.test.ts +1 -1
- package/src/sdk/host/session-runtime.test.ts +2787 -34
- package/src/sdk/host/session-runtime.ts +1489 -101
- package/src/sdk/host/surface-policy.ts +12 -8
- package/src/sdk/host/types.ts +1 -1
- package/src/sdk/host/websocket-transport.lifecycle.test.ts +31 -59
- package/src/sdk/host/websocket-transport.ts +85 -50
- package/src/sdk/index.ts +2 -1
- package/src/sdk/lifecycle/broker-client.ts +53 -0
- package/src/sdk/lifecycle/client.ts +234 -0
- package/src/sdk/lifecycle/index.ts +3 -0
- package/src/sdk/{bus/recent-activity.ts → lifecycle/recent-sessions.ts} +5 -2
- package/src/sdk/lifecycle/service.ts +720 -0
- package/src/sdk/mcp/server.ts +226 -188
- package/src/sdk/prompt-deadline-lease.ts +55 -0
- package/src/sdk/prompt-deadline-manager.ts +148 -0
- package/src/sdk/prompt-status.ts +11 -3
- package/src/sdk/protocol/operation-inventory.generated.json +272 -129
- package/src/sdk/protocol/operation-registry.ts +71 -8
- package/src/sdk/receipt-state.ts +43 -0
- package/src/sdk/reconciliation-extensions.ts +14 -0
- package/src/sdk/router/index.ts +1 -0
- package/src/sdk/router/session-router.ts +1658 -0
- package/src/sdk/session-list.ts +93 -0
- package/src/sdk/session-reconnect.ts +45 -1
- package/src/sdk/session.ts +716 -120
- package/src/sdk/transport/serve-cli.ts +18 -34
- package/src/session/account-inventory.ts +603 -0
- package/src/session/agent-session.ts +2873 -559
- package/src/session/agent-storage.ts +35 -0
- package/src/session/blob-store.ts +32 -1
- package/src/session/coordinator-tool-label.ts +40 -0
- package/src/session/internal/managed-session-scope.ts +4 -0
- package/src/session/internal/managed-session-storage.ts +199 -31
- package/src/session/messages.ts +1 -1
- package/src/session/secure-token-file.ts +80 -0
- package/src/session/session-manager.ts +757 -57
- package/src/session/session-storage.ts +25 -16
- package/src/session/startup-auth-config.ts +297 -0
- package/src/session/terminal-abort.ts +1253 -0
- package/src/session/yield-queue.ts +57 -15
- package/src/session-import/claude.ts +334 -0
- package/src/session-import/codex.ts +1033 -0
- package/src/session-import/command.ts +77 -0
- package/src/session-import/detect.ts +133 -0
- package/src/session-import/index.ts +7 -0
- package/src/session-import/provider-codex.ts +327 -0
- package/src/session-import/provider-service.ts +457 -0
- package/src/session-import/redact.ts +128 -0
- package/src/session-import/service.ts +1264 -0
- package/src/session-import/types.ts +148 -0
- package/src/setup/paseo/check.ts +213 -0
- package/src/setup/paseo/install-saga.ts +293 -0
- package/src/setup/paseo/json-publisher.ts +263 -0
- package/src/setup/paseo/orchestration-preferences.ts +86 -0
- package/src/setup/paseo/paseo-ownership.ts +224 -0
- package/src/setup/paseo/paseo-setup.ts +253 -0
- package/src/setup/paseo/provider-config.ts +139 -0
- package/src/setup/paseo/remove.ts +183 -0
- package/src/setup/paseo/result-types.ts +79 -0
- package/src/setup/paseo/setup-deps.ts +175 -0
- package/src/setup/paseo/skills-bridge.ts +260 -0
- package/src/skill-state/active-state.ts +21 -11
- package/src/slash-commands/acp-builtins.ts +9 -1
- package/src/slash-commands/builtin-registry.ts +117 -19
- package/src/slash-commands/helpers/credential-switch.ts +143 -0
- package/src/slash-commands/helpers/mcp.ts +9 -3
- package/src/slash-commands/helpers/usage-report.ts +61 -56
- package/src/slash-commands/types.ts +7 -2
- package/src/task/executor.ts +30 -11
- package/src/task/index.ts +66 -7
- package/src/task/render.ts +23 -9
- package/src/tools/ask-answer-registry.ts +23 -7
- package/src/tools/ask.ts +8 -4
- package/src/tools/bash-sleep-advisory.ts +115 -0
- package/src/tools/bash.ts +98 -18
- package/src/tools/browser/attach.ts +71 -3
- package/src/tools/browser/launch.ts +86 -13
- package/src/tools/browser/profile-discovery.ts +57 -7
- package/src/tools/browser/render.ts +8 -1
- package/src/tools/browser.ts +130 -21
- package/src/tools/computer.enforcement.test.ts +1 -1
- package/src/tools/computer.ts +3 -2
- package/src/tools/cron.ts +12 -1
- package/src/tools/image-gen.ts +349 -142
- package/src/tools/index.ts +8 -0
- package/src/tools/job.ts +33 -6
- package/src/tools/monitor.ts +41 -2
- package/src/tools/skill-discovery.ts +21 -29
- package/src/tools/subagent.ts +142 -24
- package/src/tools/todo-contract.ts +55 -3
- package/src/tools/todo-write.ts +4 -3
- package/src/tools/tool-catalog.generated.ts +6 -6
- package/src/tools/ultragoal-ask-guard.ts +10 -3
- package/src/utils/herdr-pane.ts +345 -0
- package/src/utils/title-generator.ts +2 -0
- package/src/web/scrapers/index.ts +6 -4
- package/dist/types/cli/malloc-env-guard.test.d.ts +0 -1
- package/dist/types/defaults/gjc-defaults.test.d.ts +0 -1
- package/dist/types/memory-backend/lazy-loading.test.d.ts +0 -1
- package/dist/types/runtime/boot-ordering.test.d.ts +0 -1
- package/dist/types/runtime/lazy-service.test.d.ts +0 -1
- package/dist/types/runtime/network-prewarm-service.test.d.ts +0 -1
- package/dist/types/runtime/workspace-tree-service.test.d.ts +0 -1
- package/dist/types/runtime-mcp/config.test.d.ts +0 -1
- package/dist/types/runtime-mcp/http.test.d.ts +0 -1
- package/dist/types/runtime-mcp/manager-pool.test.d.ts +0 -1
- package/dist/types/runtime-mcp/pool-key.test.d.ts +0 -1
- package/dist/types/runtime-mcp/pool.test.d.ts +0 -1
- package/dist/types/sdk/bus/lifecycle-control-runtime.d.ts +0 -117
- package/dist/types/sdk/bus/lifecycle-orchestrator.d.ts +0 -141
- package/dist/types/sdk/bus/telegram-cli.d.ts +0 -31
- package/dist/types/sdk/elevation/allowlist.d.ts +0 -20
- package/dist/types/sdk/elevation/audit.d.ts +0 -93
- package/dist/types/sdk/elevation/capability.d.ts +0 -3
- package/dist/types/sdk/elevation/digest.d.ts +0 -72
- package/dist/types/sdk/elevation/dispatch-receipt.d.ts +0 -85
- package/dist/types/sdk/elevation/grant-ledger.d.ts +0 -163
- package/dist/types/sdk/elevation/owner.d.ts +0 -48
- package/dist/types/sdk/host/import-graph.test.d.ts +0 -1
- package/dist/types/sdk/host/sdk-surface-parity.test.d.ts +0 -1
- package/dist/types/sdk/host/session-runtime.test.d.ts +0 -1
- package/dist/types/sdk/host/websocket-transport.lifecycle.test.d.ts +0 -1
- package/dist/types/session/auth-broker-config.d.ts +0 -13
- package/dist/types/session/heap-eviction-artifacts.test.d.ts +0 -1
- package/dist/types/skills/skills.test.d.ts +0 -1
- package/dist/types/slash-commands/notify-command.test.d.ts +0 -1
- package/dist/types/task/token-log.test.d.ts +0 -1
- package/dist/types/tools/computer.enforcement.test.d.ts +0 -1
- package/dist/types/tools/descriptors.test.d.ts +0 -1
- package/scripts/g005-daemon-smoke.ts +0 -180
- package/scripts/g011-daemon-path-smoke.ts +0 -153
- package/src/sdk/bus/lifecycle-control-runtime.ts +0 -1733
- package/src/sdk/bus/lifecycle-orchestrator.ts +0 -489
- package/src/sdk/bus/telegram-cli.ts +0 -212
- package/src/sdk/elevation/allowlist.ts +0 -54
- package/src/sdk/elevation/audit.ts +0 -208
- package/src/sdk/elevation/capability.ts +0 -41
- package/src/sdk/elevation/digest.ts +0 -129
- package/src/sdk/elevation/dispatch-receipt.ts +0 -184
- package/src/sdk/elevation/grant-ledger.ts +0 -1142
- package/src/sdk/elevation/owner.ts +0 -109
- package/src/session/auth-broker-config.ts +0 -109
- /package/dist/types/{ai-core-import-gate.test.d.ts → discovery/claude-hooks.d.ts} +0 -0
- /package/dist/types/{cli/fixture-report.test.d.ts → discovery/codex-hooks.d.ts} +0 -0
- /package/dist/types/sdk/{bus/recent-activity.d.ts → lifecycle/recent-sessions.d.ts} +0 -0
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scope-aware MCP configuration access.
|
|
3
|
+
*
|
|
4
|
+
* Canonical read/write contract for GJC's native MCP config in both scopes —
|
|
5
|
+
* project `<project>/.gjc/mcp.json` and global `~/.gjc/agent/mcp.json`.
|
|
6
|
+
* These wrappers resolve the scope to its file path, reuse the atomic config
|
|
7
|
+
* writer, and return provenance (scope + path) with every read so callers can
|
|
8
|
+
* show source and status without re-deriving path rules. Secret values are
|
|
9
|
+
* never printed by these APIs; the CLI applies its existing redaction layer on
|
|
10
|
+
* top of returned configs.
|
|
11
|
+
*/
|
|
12
|
+
import { getMCPConfigPath, getProjectDir } from "@gajae-code/utils";
|
|
13
|
+
import {
|
|
14
|
+
getMCPServer,
|
|
15
|
+
readDisabledServers,
|
|
16
|
+
readMCPConfigFile,
|
|
17
|
+
removeMCPServer,
|
|
18
|
+
type UpsertMCPServerResult,
|
|
19
|
+
upsertMCPServer,
|
|
20
|
+
} from "./config-writer";
|
|
21
|
+
import type { MCPConfigFile, MCPServerConfig } from "./types";
|
|
22
|
+
|
|
23
|
+
export type MCPConfigScope = "user" | "project";
|
|
24
|
+
|
|
25
|
+
/** Resolved scope + path + parsed config (provenance for diagnostics). */
|
|
26
|
+
export interface ScopeMCPConfigSnapshot {
|
|
27
|
+
scope: MCPConfigScope;
|
|
28
|
+
path: string;
|
|
29
|
+
config: MCPConfigFile;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/** Resolve the canonical file path for a native MCP config scope. */
|
|
33
|
+
export function resolveScopeMCPConfigPath(scope: MCPConfigScope, cwd: string = getProjectDir()): string {
|
|
34
|
+
return getMCPConfigPath(scope, cwd);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/** Read a native MCP config for a scope. Returns an empty config when absent. */
|
|
38
|
+
export async function readScopeMCPConfig(scope: MCPConfigScope, cwd?: string): Promise<ScopeMCPConfigSnapshot> {
|
|
39
|
+
const path = resolveScopeMCPConfigPath(scope, cwd);
|
|
40
|
+
return { scope, path, config: await readMCPConfigFile(path) };
|
|
41
|
+
}
|
|
42
|
+
/** Add a server, or overwrite an existing one only when `force` is set. */
|
|
43
|
+
export async function upsertScopeMCPServer(
|
|
44
|
+
scope: MCPConfigScope,
|
|
45
|
+
name: string,
|
|
46
|
+
config: MCPServerConfig,
|
|
47
|
+
options: { force?: boolean } = {},
|
|
48
|
+
cwd?: string,
|
|
49
|
+
): Promise<ScopeMCPConfigSnapshot & { result: UpsertMCPServerResult }> {
|
|
50
|
+
const path = resolveScopeMCPConfigPath(scope, cwd);
|
|
51
|
+
const result = await upsertMCPServer(path, name, config, options);
|
|
52
|
+
return { scope, path, config: await readMCPConfigFile(path), result };
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** Remove a server from a scope (throws when the name does not exist). */
|
|
56
|
+
export async function removeScopeMCPServer(
|
|
57
|
+
scope: MCPConfigScope,
|
|
58
|
+
name: string,
|
|
59
|
+
cwd?: string,
|
|
60
|
+
): Promise<ScopeMCPConfigSnapshot> {
|
|
61
|
+
const path = resolveScopeMCPConfigPath(scope, cwd);
|
|
62
|
+
await removeMCPServer(path, name);
|
|
63
|
+
return { scope, path, config: await readMCPConfigFile(path) };
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/** Get a specific server config from a scope. */
|
|
67
|
+
export async function getScopeMCPServer(
|
|
68
|
+
scope: MCPConfigScope,
|
|
69
|
+
name: string,
|
|
70
|
+
cwd?: string,
|
|
71
|
+
): Promise<{ scope: MCPConfigScope; path: string; config: MCPServerConfig | undefined }> {
|
|
72
|
+
const path = resolveScopeMCPConfigPath(scope, cwd);
|
|
73
|
+
return { scope, path, config: await getMCPServer(path, name) };
|
|
74
|
+
}
|
|
75
|
+
/** Read the disabled-servers denylist for a scope. */
|
|
76
|
+
export async function readScopeDisabledServers(scope: MCPConfigScope, cwd?: string): Promise<string[]> {
|
|
77
|
+
return readDisabledServers(resolveScopeMCPConfigPath(scope, cwd));
|
|
78
|
+
}
|
|
@@ -19,16 +19,36 @@ import { ToolAbortError, throwIfAborted } from "../tools/tool-errors";
|
|
|
19
19
|
import { callTool } from "./client";
|
|
20
20
|
import type { MCPPoolLease } from "./pool";
|
|
21
21
|
import { renderMCPCall, renderMCPResult } from "./render";
|
|
22
|
-
import type {
|
|
22
|
+
import type {
|
|
23
|
+
MCPContent,
|
|
24
|
+
MCPInputRequestHandler,
|
|
25
|
+
MCPRequestOptions,
|
|
26
|
+
MCPServerConnection,
|
|
27
|
+
MCPToolCallParams,
|
|
28
|
+
MCPToolCallResult,
|
|
29
|
+
MCPToolDefinition,
|
|
30
|
+
} from "./types";
|
|
23
31
|
|
|
24
32
|
/** Reconnect callback: tears down stale connection, returns new one or null. */
|
|
25
33
|
export type MCPReconnect = () => Promise<MCPServerConnection | null>;
|
|
26
34
|
|
|
27
35
|
type MCPToolTarget = MCPServerConnection | MCPPoolLease;
|
|
28
36
|
|
|
37
|
+
/** Options shared by MCPTool and DeferredMCPTool. */
|
|
38
|
+
export interface MCPToolOptions {
|
|
39
|
+
/** Shared lease policy: never retry the original request after transport/auth failure. */
|
|
40
|
+
noReplay?: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Lazy resolver for the modern MRTR `input_required` handler, registered by the
|
|
43
|
+
* owning manager/runtime. Resolved per call so late registration still applies.
|
|
44
|
+
*/
|
|
45
|
+
inputHandler?: () => MCPInputRequestHandler | undefined;
|
|
46
|
+
}
|
|
47
|
+
|
|
29
48
|
function connectionForTool(target: MCPToolTarget): MCPServerConnection {
|
|
30
49
|
return "connectionForLease" in target ? target.connectionForLease() : target;
|
|
31
50
|
}
|
|
51
|
+
|
|
32
52
|
/**
|
|
33
53
|
* Network-level and stale-session errors that warrant a reconnect + single retry.
|
|
34
54
|
* Conservative: only catches errors where the server is likely alive but the
|
|
@@ -226,12 +246,18 @@ export class MCPTool implements CustomTool<TSchema, MCPToolDetails> {
|
|
|
226
246
|
|
|
227
247
|
private connection: MCPServerConnection;
|
|
228
248
|
#noReplay = false;
|
|
249
|
+
#inputHandlerResolver: (() => MCPInputRequestHandler | undefined) | undefined;
|
|
250
|
+
|
|
251
|
+
#callOptions(signal?: AbortSignal): MCPRequestOptions {
|
|
252
|
+
const inputHandler = this.#inputHandlerResolver?.();
|
|
253
|
+
return { signal, noReplay: this.#noReplay, ...(inputHandler ? { inputHandler } : {}) };
|
|
254
|
+
}
|
|
229
255
|
/** Create MCPTool instances for all tools from an MCP server lease/connection. */
|
|
230
256
|
static fromTools(
|
|
231
257
|
target: MCPToolTarget,
|
|
232
258
|
tools: MCPToolDefinition[],
|
|
233
259
|
reconnect?: MCPReconnect,
|
|
234
|
-
options?:
|
|
260
|
+
options?: MCPToolOptions,
|
|
235
261
|
): MCPTool[] {
|
|
236
262
|
return tools.map(tool => new MCPTool(target, tool, reconnect, options));
|
|
237
263
|
}
|
|
@@ -240,11 +266,12 @@ export class MCPTool implements CustomTool<TSchema, MCPToolDetails> {
|
|
|
240
266
|
target: MCPToolTarget,
|
|
241
267
|
private readonly tool: MCPToolDefinition,
|
|
242
268
|
private readonly reconnect?: MCPReconnect,
|
|
243
|
-
options?:
|
|
269
|
+
options?: MCPToolOptions,
|
|
244
270
|
) {
|
|
245
271
|
const resolvedConnection = connectionForTool(target);
|
|
246
272
|
this.connection = resolvedConnection;
|
|
247
273
|
this.#noReplay = options?.noReplay === true;
|
|
274
|
+
this.#inputHandlerResolver = options?.inputHandler;
|
|
248
275
|
this.name = createMCPToolName(resolvedConnection.name, tool.name);
|
|
249
276
|
this.label = `${resolvedConnection.name}/${tool.name}`;
|
|
250
277
|
this.description = tool.description ?? `MCP tool from ${resolvedConnection.name}`;
|
|
@@ -274,7 +301,7 @@ export class MCPTool implements CustomTool<TSchema, MCPToolDetails> {
|
|
|
274
301
|
const providerName = this.connection._source?.providerName;
|
|
275
302
|
|
|
276
303
|
try {
|
|
277
|
-
const result = await callTool(this.connection, this.tool.name, args,
|
|
304
|
+
const result = await callTool(this.connection, this.tool.name, args, this.#callOptions(signal));
|
|
278
305
|
return buildResult(result, this.connection.name, this.tool.name, provider, providerName);
|
|
279
306
|
} catch (error) {
|
|
280
307
|
rethrowIfAborted(error, signal);
|
|
@@ -288,7 +315,7 @@ export class MCPTool implements CustomTool<TSchema, MCPToolDetails> {
|
|
|
288
315
|
const retryProvider = newConn._source?.provider ?? provider;
|
|
289
316
|
const retryProviderName = newConn._source?.providerName ?? providerName;
|
|
290
317
|
try {
|
|
291
|
-
const result = await callTool(newConn, this.tool.name, args,
|
|
318
|
+
const result = await callTool(newConn, this.tool.name, args, this.#callOptions(signal));
|
|
292
319
|
return buildResult(result, newConn.name, this.tool.name, retryProvider, retryProviderName);
|
|
293
320
|
} catch (retryError) {
|
|
294
321
|
rethrowIfAborted(retryError, signal);
|
|
@@ -322,6 +349,12 @@ export class DeferredMCPTool implements CustomTool<TSchema, MCPToolDetails> {
|
|
|
322
349
|
readonly #fallbackProvider: string | undefined;
|
|
323
350
|
readonly #fallbackProviderName: string | undefined;
|
|
324
351
|
#noReplay = false;
|
|
352
|
+
#inputHandlerResolver: (() => MCPInputRequestHandler | undefined) | undefined;
|
|
353
|
+
|
|
354
|
+
#callOptions(signal?: AbortSignal): MCPRequestOptions {
|
|
355
|
+
const inputHandler = this.#inputHandlerResolver?.();
|
|
356
|
+
return { signal, noReplay: this.#noReplay, ...(inputHandler ? { inputHandler } : {}) };
|
|
357
|
+
}
|
|
325
358
|
|
|
326
359
|
/** Create DeferredMCPTool instances for all tools from an MCP server */
|
|
327
360
|
static fromTools(
|
|
@@ -330,7 +363,7 @@ export class DeferredMCPTool implements CustomTool<TSchema, MCPToolDetails> {
|
|
|
330
363
|
getConnection: () => Promise<MCPServerConnection>,
|
|
331
364
|
source?: SourceMeta,
|
|
332
365
|
reconnect?: MCPReconnect,
|
|
333
|
-
options?:
|
|
366
|
+
options?: MCPToolOptions,
|
|
334
367
|
): DeferredMCPTool[] {
|
|
335
368
|
return tools.map(tool => new DeferredMCPTool(serverName, tool, getConnection, source, reconnect, options));
|
|
336
369
|
}
|
|
@@ -341,7 +374,7 @@ export class DeferredMCPTool implements CustomTool<TSchema, MCPToolDetails> {
|
|
|
341
374
|
private readonly getConnection: () => Promise<MCPServerConnection>,
|
|
342
375
|
source?: SourceMeta,
|
|
343
376
|
private readonly reconnect?: MCPReconnect,
|
|
344
|
-
options?:
|
|
377
|
+
options?: MCPToolOptions,
|
|
345
378
|
) {
|
|
346
379
|
this.name = createMCPToolName(serverName, tool.name);
|
|
347
380
|
this.label = `${serverName}/${tool.name}`;
|
|
@@ -352,6 +385,7 @@ export class DeferredMCPTool implements CustomTool<TSchema, MCPToolDetails> {
|
|
|
352
385
|
this.#fallbackProvider = source?.provider;
|
|
353
386
|
this.#fallbackProviderName = source?.providerName;
|
|
354
387
|
this.#noReplay = options?.noReplay === true;
|
|
388
|
+
this.#inputHandlerResolver = options?.inputHandler;
|
|
355
389
|
}
|
|
356
390
|
|
|
357
391
|
renderCall(args: unknown, _options: RenderResultOptions, theme: Theme) {
|
|
@@ -378,7 +412,7 @@ export class DeferredMCPTool implements CustomTool<TSchema, MCPToolDetails> {
|
|
|
378
412
|
const connection = await untilAborted(signal, () => this.getConnection());
|
|
379
413
|
throwIfAborted(signal);
|
|
380
414
|
try {
|
|
381
|
-
const result = await callTool(connection, this.tool.name, args,
|
|
415
|
+
const result = await callTool(connection, this.tool.name, args, this.#callOptions(signal));
|
|
382
416
|
return buildResult(
|
|
383
417
|
result,
|
|
384
418
|
this.serverName,
|
|
@@ -396,7 +430,7 @@ export class DeferredMCPTool implements CustomTool<TSchema, MCPToolDetails> {
|
|
|
396
430
|
const retryProvider = newConn._source?.provider ?? provider;
|
|
397
431
|
const retryProviderName = newConn._source?.providerName ?? providerName;
|
|
398
432
|
try {
|
|
399
|
-
const result = await callTool(newConn, this.tool.name, args,
|
|
433
|
+
const result = await callTool(newConn, this.tool.name, args, this.#callOptions(signal));
|
|
400
434
|
return buildResult(result, this.serverName, this.tool.name, retryProvider, retryProviderName);
|
|
401
435
|
} catch (retryError) {
|
|
402
436
|
rethrowIfAborted(retryError, signal);
|
|
@@ -421,7 +455,7 @@ export class DeferredMCPTool implements CustomTool<TSchema, MCPToolDetails> {
|
|
|
421
455
|
const newConn = await reconnectWithAbort(this.reconnect, signal);
|
|
422
456
|
if (newConn && !this.#noReplay) {
|
|
423
457
|
try {
|
|
424
|
-
const result = await callTool(newConn, this.tool.name, args,
|
|
458
|
+
const result = await callTool(newConn, this.tool.name, args, this.#callOptions(signal));
|
|
425
459
|
return buildResult(
|
|
426
460
|
result,
|
|
427
461
|
this.serverName,
|
|
@@ -2,7 +2,10 @@
|
|
|
2
2
|
* MCP HTTP transport (Streamable HTTP).
|
|
3
3
|
*
|
|
4
4
|
* Implements JSON-RPC 2.0 over HTTP POST with optional SSE streaming.
|
|
5
|
-
*
|
|
5
|
+
* Legacy era: session-oriented Streamable HTTP per MCP spec 2025-03-26
|
|
6
|
+
* (`Mcp-Session-Id`, standalone GET SSE listener, DELETE termination).
|
|
7
|
+
* Modern era (2026-07-28): stateless per-request `_meta` + mirrored headers,
|
|
8
|
+
* no sessions, no standalone stream, no replay. See ../protocol.ts.
|
|
6
9
|
*/
|
|
7
10
|
import { logger, readSseJson, Snowflake } from "@gajae-code/utils";
|
|
8
11
|
import type {
|
|
@@ -15,7 +18,7 @@ import type {
|
|
|
15
18
|
MCPSseServerConfig,
|
|
16
19
|
MCPTransport,
|
|
17
20
|
} from "../../runtime-mcp/types";
|
|
18
|
-
import { MCPExpectedFailure, toJsonRpcError } from "../../runtime-mcp/types";
|
|
21
|
+
import { MCPExpectedFailure, MCPHttpRequestError, MCPJsonRpcError, toJsonRpcError } from "../../runtime-mcp/types";
|
|
19
22
|
import {
|
|
20
23
|
cancelMCPStream,
|
|
21
24
|
MCP_MAX_CONTENT_BYTES,
|
|
@@ -25,6 +28,16 @@ import {
|
|
|
25
28
|
readMCPResponseText,
|
|
26
29
|
} from "../content-limits";
|
|
27
30
|
import { fetchPluginMcpRequest, isPluginMcpPublicNetworkBound } from "../plugin-network-boundary";
|
|
31
|
+
import { buildModernMcpHeaders, type MCPModernClientContext, type MCPProtocolEra, withModernMeta } from "../protocol";
|
|
32
|
+
|
|
33
|
+
/** Best-effort JSON parse of an error body for structured era classification. */
|
|
34
|
+
function tryParseJsonBody(text: string): unknown {
|
|
35
|
+
try {
|
|
36
|
+
return JSON.parse(text);
|
|
37
|
+
} catch {
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
28
41
|
|
|
29
42
|
/**
|
|
30
43
|
* HTTP transport for MCP servers.
|
|
@@ -36,6 +49,12 @@ export class HttpTransport implements MCPTransport {
|
|
|
36
49
|
#sseConnection: AbortController | null = null;
|
|
37
50
|
#streamControllers = new Set<AbortController>();
|
|
38
51
|
#streamReaders = new Set<Promise<void>>();
|
|
52
|
+
/**
|
|
53
|
+
* Negotiated protocol era. Legacy keeps the sessionful 2025-03-26 behavior;
|
|
54
|
+
* modern (2026-07-28) is stateless: no session id, no GET stream, no DELETE.
|
|
55
|
+
*/
|
|
56
|
+
#era: MCPProtocolEra = "legacy";
|
|
57
|
+
#modernContext: MCPModernClientContext | null = null;
|
|
39
58
|
|
|
40
59
|
onClose?: () => void;
|
|
41
60
|
onError?: (error: Error) => void;
|
|
@@ -57,6 +76,25 @@ export class HttpTransport implements MCPTransport {
|
|
|
57
76
|
return this.config.url;
|
|
58
77
|
}
|
|
59
78
|
|
|
79
|
+
/** Negotiated protocol era (defaults to legacy until the client negotiates). */
|
|
80
|
+
get era(): MCPProtocolEra {
|
|
81
|
+
return this.#era;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Select the protocol era. Modern mode requires the per-request client
|
|
86
|
+
* context (protocol version, identity, capabilities) mirrored into `_meta`
|
|
87
|
+
* and HTTP headers on every request.
|
|
88
|
+
*/
|
|
89
|
+
setProtocolMode(era: MCPProtocolEra, modernContext?: MCPModernClientContext): void {
|
|
90
|
+
if (era === "modern" && !modernContext) {
|
|
91
|
+
throw new Error("modern MCP protocol mode requires a client context");
|
|
92
|
+
}
|
|
93
|
+
this.#era = era;
|
|
94
|
+
this.#modernContext = era === "modern" ? (modernContext ?? null) : null;
|
|
95
|
+
if (era === "modern") this.#sessionId = null;
|
|
96
|
+
}
|
|
97
|
+
|
|
60
98
|
/**
|
|
61
99
|
* Mark transport as connected.
|
|
62
100
|
* HTTP doesn't need persistent connection, but we track state.
|
|
@@ -88,6 +126,9 @@ export class HttpTransport implements MCPTransport {
|
|
|
88
126
|
*/
|
|
89
127
|
async startSSEListener(): Promise<void> {
|
|
90
128
|
if (!this.#connected) return;
|
|
129
|
+
// The modern era removed the standalone GET stream; request-scoped SSE
|
|
130
|
+
// responses and subscriptions/listen are the only streams.
|
|
131
|
+
if (this.#era === "modern") return;
|
|
91
132
|
if (this.#sseConnection) return;
|
|
92
133
|
|
|
93
134
|
const sseConnection = new AbortController();
|
|
@@ -167,6 +208,13 @@ export class HttpTransport implements MCPTransport {
|
|
|
167
208
|
}
|
|
168
209
|
// Server-to-client request: has both method and id
|
|
169
210
|
if ("method" in message && "id" in message && message.id != null) {
|
|
211
|
+
if (this.#era === "modern") {
|
|
212
|
+
// 2026-07-28 forbids server-initiated JSON-RPC requests on SSE streams;
|
|
213
|
+
// server-to-client interactions use MRTR input requests instead. Do not
|
|
214
|
+
// fall back to the legacy elicitation-over-stream pattern.
|
|
215
|
+
logger.debug("Dropping server-initiated request on modern-era stream");
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
170
218
|
void this.#handleServerRequest(message as JsonRpcRequest);
|
|
171
219
|
return;
|
|
172
220
|
}
|
|
@@ -219,7 +267,10 @@ export class HttpTransport implements MCPTransport {
|
|
|
219
267
|
jsonrpc: "2.0" as const,
|
|
220
268
|
id,
|
|
221
269
|
method,
|
|
222
|
-
params:
|
|
270
|
+
params:
|
|
271
|
+
this.#era === "modern" && this.#modernContext
|
|
272
|
+
? withModernMeta(params ?? {}, this.#modernContext)
|
|
273
|
+
: (params ?? {}),
|
|
223
274
|
};
|
|
224
275
|
|
|
225
276
|
const headers: Record<string, string> = {
|
|
@@ -228,7 +279,18 @@ export class HttpTransport implements MCPTransport {
|
|
|
228
279
|
...this.config.headers,
|
|
229
280
|
};
|
|
230
281
|
|
|
231
|
-
if (this.#
|
|
282
|
+
if (this.#era === "modern" && this.#modernContext) {
|
|
283
|
+
// 2026-07-28: mirrored request metadata headers are REQUIRED.
|
|
284
|
+
Object.assign(
|
|
285
|
+
headers,
|
|
286
|
+
buildModernMcpHeaders({
|
|
287
|
+
protocolVersion: this.#modernContext.protocolVersion,
|
|
288
|
+
method,
|
|
289
|
+
params: body.params,
|
|
290
|
+
}),
|
|
291
|
+
);
|
|
292
|
+
if (options?.mcpParamHeaders) Object.assign(headers, options.mcpParamHeaders);
|
|
293
|
+
} else if (this.#sessionId) {
|
|
232
294
|
headers["Mcp-Session-Id"] = this.#sessionId;
|
|
233
295
|
}
|
|
234
296
|
|
|
@@ -248,10 +310,12 @@ export class HttpTransport implements MCPTransport {
|
|
|
248
310
|
signal: operationSignal,
|
|
249
311
|
});
|
|
250
312
|
|
|
251
|
-
// Check for session ID in response
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
313
|
+
// Check for session ID in response (legacy era only; modern servers do not mint sessions)
|
|
314
|
+
if (this.#era !== "modern") {
|
|
315
|
+
const newSessionId = response.headers.get("Mcp-Session-Id");
|
|
316
|
+
if (newSessionId) {
|
|
317
|
+
this.#sessionId = newSessionId;
|
|
318
|
+
}
|
|
255
319
|
}
|
|
256
320
|
|
|
257
321
|
if (!response.ok) {
|
|
@@ -265,7 +329,11 @@ export class HttpTransport implements MCPTransport {
|
|
|
265
329
|
.filter(Boolean)
|
|
266
330
|
.join("; ");
|
|
267
331
|
const suffix = authHints ? ` [${authHints}]` : "";
|
|
268
|
-
throw new
|
|
332
|
+
throw new MCPHttpRequestError(
|
|
333
|
+
response.status,
|
|
334
|
+
`HTTP ${response.status}: ${text}${suffix}`,
|
|
335
|
+
tryParseJsonBody(text),
|
|
336
|
+
);
|
|
269
337
|
}
|
|
270
338
|
|
|
271
339
|
const contentType = response.headers.get("Content-Type") ?? "";
|
|
@@ -298,7 +366,9 @@ export class HttpTransport implements MCPTransport {
|
|
|
298
366
|
if (!result.error) {
|
|
299
367
|
throw new MCPExpectedFailure();
|
|
300
368
|
}
|
|
301
|
-
throw new MCPExpectedFailure(
|
|
369
|
+
throw new MCPExpectedFailure(
|
|
370
|
+
new MCPJsonRpcError(result.error.code, result.error.message, result.error.data),
|
|
371
|
+
);
|
|
302
372
|
}
|
|
303
373
|
|
|
304
374
|
return result.result as T;
|
|
@@ -371,7 +441,7 @@ export class HttpTransport implements MCPTransport {
|
|
|
371
441
|
} else {
|
|
372
442
|
reject(
|
|
373
443
|
new MCPExpectedFailure(
|
|
374
|
-
new
|
|
444
|
+
new MCPJsonRpcError(response.error.code, response.error.message, response.error.data),
|
|
375
445
|
),
|
|
376
446
|
);
|
|
377
447
|
}
|
|
@@ -547,8 +617,9 @@ export class HttpTransport implements MCPTransport {
|
|
|
547
617
|
|
|
548
618
|
if (!wasConnected && !this.#sessionId) return;
|
|
549
619
|
|
|
550
|
-
// Send session termination if we have a session
|
|
551
|
-
|
|
620
|
+
// Send session termination if we have a session (legacy era only;
|
|
621
|
+
// the modern era has no protocol session to terminate)
|
|
622
|
+
if (this.#era !== "modern" && this.#sessionId) {
|
|
552
623
|
try {
|
|
553
624
|
const timeout = this.config.timeout ?? 30000;
|
|
554
625
|
const headers: Record<string, string> = {
|
package/src/runtime-mcp/types.ts
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* MCP (Model Context Protocol) type definitions.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Legacy sessionful surface based on MCP specification 2025-03-26; the modern
|
|
5
|
+
* stateless generation (2026-07-28, "MCP v2") is modeled in ./protocol.ts.
|
|
6
|
+
* https://modelcontextprotocol.io/specification/2026-07-28/
|
|
6
7
|
*/
|
|
7
8
|
|
|
9
|
+
import type { SourceMeta } from "../capability/types";
|
|
10
|
+
import type { MCPCacheHints, MCPProtocolObservation, MCPProtocolPreference } from "./protocol";
|
|
11
|
+
|
|
8
12
|
// =============================================================================
|
|
9
13
|
// JSON-RPC 2.0 Types
|
|
10
14
|
// =============================================================================
|
|
11
15
|
|
|
12
|
-
import type { SourceMeta } from "../capability/types";
|
|
13
|
-
|
|
14
16
|
export interface JsonRpcRequest {
|
|
15
17
|
jsonrpc: "2.0";
|
|
16
18
|
id: string | number;
|
|
@@ -63,15 +65,23 @@ export interface MCPServerConfigBase {
|
|
|
63
65
|
enabled?: boolean;
|
|
64
66
|
/**
|
|
65
67
|
* Whether an explicit runtime MCP consumer should connect this server
|
|
66
|
-
* automatically when that consumer starts (default: true).
|
|
67
|
-
* `gjc`, `gjc --tmux`, and print-mode sessions
|
|
68
|
-
* registrations
|
|
68
|
+
* automatically when that consumer starts (default: true). Ordinary
|
|
69
|
+
* standalone `gjc`, `gjc --tmux`, and print-mode sessions honor autoload for
|
|
70
|
+
* conventional registrations; `autoload: false` keeps a server configured
|
|
71
|
+
* for on-demand `/mcp` connection. `--no-mcp` opts a session out entirely.
|
|
69
72
|
*/
|
|
70
73
|
autoload?: boolean;
|
|
71
74
|
/** Connection timeout in milliseconds (default: 30000) */
|
|
72
75
|
timeout?: number;
|
|
73
76
|
/** Pool identity mode. W2 defaults to one physical connection per session. */
|
|
74
77
|
sharing?: "per-session" | "shared";
|
|
78
|
+
/**
|
|
79
|
+
* Protocol preference for remote (http/sse) servers: `auto` (default) negotiates
|
|
80
|
+
* the modern 2026-07-28 stateless protocol first with a bounded, observable
|
|
81
|
+
* legacy fallback; `2026-07-28` is strict modern-only; `legacy` forces the
|
|
82
|
+
* bounded compatibility handshake. Ignored by stdio servers (always legacy-era).
|
|
83
|
+
*/
|
|
84
|
+
protocol?: MCPProtocolPreference;
|
|
75
85
|
/** Authentication configuration (optional) */
|
|
76
86
|
auth?: MCPAuthConfig;
|
|
77
87
|
/** OAuth configuration for servers requiring explicit client credentials */
|
|
@@ -140,6 +150,8 @@ export interface MCPImplementation {
|
|
|
140
150
|
export interface MCPClientCapabilities {
|
|
141
151
|
roots?: { listChanged?: boolean };
|
|
142
152
|
sampling?: Record<string, never>;
|
|
153
|
+
/** Form-mode elicitation support (modern MRTR `elicitation/create` input requests). */
|
|
154
|
+
elicitation?: { form?: Record<string, never> };
|
|
143
155
|
experimental?: Record<string, unknown>;
|
|
144
156
|
}
|
|
145
157
|
|
|
@@ -180,7 +192,7 @@ export interface MCPToolDefinition {
|
|
|
180
192
|
}
|
|
181
193
|
|
|
182
194
|
/** tools/list response */
|
|
183
|
-
export interface MCPToolsListResult {
|
|
195
|
+
export interface MCPToolsListResult extends MCPCacheHints {
|
|
184
196
|
tools: MCPToolDefinition[];
|
|
185
197
|
nextCursor?: string;
|
|
186
198
|
}
|
|
@@ -237,13 +249,82 @@ export class MCPExpectedFailure extends Error {
|
|
|
237
249
|
this.name = "MCPExpectedFailure";
|
|
238
250
|
}
|
|
239
251
|
}
|
|
252
|
+
|
|
253
|
+
/** HTTP-level request failure carrying structured detail for era classification. */
|
|
254
|
+
export class MCPHttpRequestError extends Error {
|
|
255
|
+
/** HTTP status code. */
|
|
256
|
+
readonly status: number;
|
|
257
|
+
/** Parsed JSON body when the error payload was JSON; undefined otherwise. */
|
|
258
|
+
readonly body: unknown;
|
|
259
|
+
constructor(status: number, message: string, body?: unknown) {
|
|
260
|
+
super(message);
|
|
261
|
+
this.name = "MCPHttpRequestError";
|
|
262
|
+
this.status = status;
|
|
263
|
+
this.body = body;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/** JSON-RPC error response failure carrying the protocol error code. */
|
|
268
|
+
export class MCPJsonRpcError extends Error {
|
|
269
|
+
readonly code: number;
|
|
270
|
+
readonly data?: unknown;
|
|
271
|
+
constructor(code: number, message: string, data?: unknown) {
|
|
272
|
+
super(`MCP error ${code}: ${message}`);
|
|
273
|
+
this.name = "MCPJsonRpcError";
|
|
274
|
+
this.code = code;
|
|
275
|
+
this.data = data;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
240
278
|
export interface MCPRequestOptions {
|
|
241
279
|
/** Abort signal (e.g. Escape-to-interrupt) */
|
|
242
280
|
signal?: AbortSignal;
|
|
243
281
|
/** Shared lease policy: never retry the original request after transport/auth failure. */
|
|
244
282
|
noReplay?: boolean;
|
|
283
|
+
/**
|
|
284
|
+
* Handler for modern MRTR `input_required` results (elicitation, roots, sampling).
|
|
285
|
+
* When absent, an `input_required` result fails explicitly instead of hanging.
|
|
286
|
+
*/
|
|
287
|
+
inputHandler?: MCPInputRequestHandler;
|
|
288
|
+
/** Extra mirrored headers for modern requests (`Mcp-Param-*` from x-mcp-header bindings). */
|
|
289
|
+
mcpParamHeaders?: Record<string, string>;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
// =============================================================================
|
|
293
|
+
// MRTR (multi round-trip) input handling
|
|
294
|
+
// =============================================================================
|
|
295
|
+
|
|
296
|
+
/** Context for one server input request gathered during a modern MRTR exchange. */
|
|
297
|
+
export interface MCPInputRequestContext {
|
|
298
|
+
/** Server being called. */
|
|
299
|
+
serverName: string;
|
|
300
|
+
/** Original client request method (`tools/call`, `prompts/get`, `resources/read`). */
|
|
301
|
+
originMethod: string;
|
|
302
|
+
/**
|
|
303
|
+
* Stable correlation id shared by the initial request and its exactly-once
|
|
304
|
+
* retry, fencing the accepted input to this exchange.
|
|
305
|
+
*/
|
|
306
|
+
correlationId: string;
|
|
307
|
+
/** Request-scoped abort signal (cancellation/timeout of the original call). */
|
|
308
|
+
signal?: AbortSignal;
|
|
245
309
|
}
|
|
246
310
|
|
|
311
|
+
/**
|
|
312
|
+
* Outcome of gathering one server input request. `result` values are placed in
|
|
313
|
+
* the retry's `inputResponses` under the request key. `failed` outcomes abort
|
|
314
|
+
* the MRTR exchange with an explicit error — except elicitation decline/cancel,
|
|
315
|
+
* which the handler expresses as an ElicitResult-shaped `result`.
|
|
316
|
+
*/
|
|
317
|
+
export type MCPInputRequestHandlerResult =
|
|
318
|
+
| { kind: "result"; result: unknown }
|
|
319
|
+
| { kind: "failed"; reason: "declined" | "cancelled" | "timeout" | "unavailable" | "error"; message?: string };
|
|
320
|
+
|
|
321
|
+
/** Handler for one server input request inside an `input_required` result. */
|
|
322
|
+
export type MCPInputRequestHandler = (
|
|
323
|
+
key: string,
|
|
324
|
+
request: { method: string; params?: Record<string, unknown> },
|
|
325
|
+
context: MCPInputRequestContext,
|
|
326
|
+
) => Promise<MCPInputRequestHandlerResult>;
|
|
327
|
+
|
|
247
328
|
/** Transport interface - abstracts stdio/http */
|
|
248
329
|
export interface MCPTransport {
|
|
249
330
|
/** Send a request and wait for response */
|
|
@@ -300,6 +381,15 @@ export interface MCPServerConnection {
|
|
|
300
381
|
instructions?: string;
|
|
301
382
|
/** Cached prompts (populated on demand) */
|
|
302
383
|
prompts?: MCPPrompt[];
|
|
384
|
+
/**
|
|
385
|
+
* Authoritative protocol observation for this connection (preference,
|
|
386
|
+
* negotiated era/version, downgrade decision, deprecation state). Secret-free.
|
|
387
|
+
*/
|
|
388
|
+
protocol: MCPProtocolObservation;
|
|
389
|
+
/** Freshness deadline (ms epoch) for the cached tool catalog, from server ttlMs hints. */
|
|
390
|
+
toolsFreshUntil?: number;
|
|
391
|
+
/** Cache scope of the cached tool catalog; private entries never cross credential identities. */
|
|
392
|
+
toolsCacheScope?: "public" | "private";
|
|
303
393
|
}
|
|
304
394
|
|
|
305
395
|
/** MCP tool with server context */
|
|
@@ -341,13 +431,13 @@ export interface MCPResourceTemplate {
|
|
|
341
431
|
}
|
|
342
432
|
|
|
343
433
|
/** Result of resources/list */
|
|
344
|
-
export interface MCPResourcesListResult {
|
|
434
|
+
export interface MCPResourcesListResult extends MCPCacheHints {
|
|
345
435
|
resources: MCPResource[];
|
|
346
436
|
nextCursor?: string;
|
|
347
437
|
}
|
|
348
438
|
|
|
349
439
|
/** Result of resources/templates/list */
|
|
350
|
-
export interface MCPResourceTemplatesListResult {
|
|
440
|
+
export interface MCPResourceTemplatesListResult extends MCPCacheHints {
|
|
351
441
|
resourceTemplates: MCPResourceTemplate[];
|
|
352
442
|
nextCursor?: string;
|
|
353
443
|
}
|
|
@@ -361,7 +451,7 @@ export interface MCPResourceContentItem {
|
|
|
361
451
|
}
|
|
362
452
|
|
|
363
453
|
/** Result of resources/read */
|
|
364
|
-
export interface MCPResourceReadResult {
|
|
454
|
+
export interface MCPResourceReadResult extends MCPCacheHints {
|
|
365
455
|
contents: MCPResourceContentItem[];
|
|
366
456
|
}
|
|
367
457
|
|
|
@@ -395,7 +485,7 @@ export interface MCPPrompt {
|
|
|
395
485
|
}
|
|
396
486
|
|
|
397
487
|
/** Result of prompts/list */
|
|
398
|
-
export interface MCPPromptsListResult {
|
|
488
|
+
export interface MCPPromptsListResult extends MCPCacheHints {
|
|
399
489
|
prompts: MCPPrompt[];
|
|
400
490
|
nextCursor?: string;
|
|
401
491
|
}
|
|
@@ -428,6 +518,27 @@ export interface MCPGetPromptResult {
|
|
|
428
518
|
messages: MCPPromptMessage[];
|
|
429
519
|
}
|
|
430
520
|
|
|
521
|
+
// =============================================================================
|
|
522
|
+
// server/discover (modern era)
|
|
523
|
+
// =============================================================================
|
|
524
|
+
|
|
525
|
+
/** Result of the optional modern `server/discover` request. */
|
|
526
|
+
export interface MCPDiscoverResult extends MCPCacheHints {
|
|
527
|
+
/** Protocol versions the server supports. */
|
|
528
|
+
supportedVersions: string[];
|
|
529
|
+
/** Capabilities the server supports. */
|
|
530
|
+
capabilities: MCPServerCapabilities;
|
|
531
|
+
/** Optional natural-language usage guidance. */
|
|
532
|
+
instructions?: string;
|
|
533
|
+
/** Result metadata; `io.modelcontextprotocol/serverInfo` carries the identity. */
|
|
534
|
+
_meta?: Record<string, unknown>;
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
/** Decoded `server/discover` payload with the extracted server identity. */
|
|
538
|
+
export interface MCPDiscoverResultLite extends MCPDiscoverResult {
|
|
539
|
+
serverInfo?: MCPImplementation;
|
|
540
|
+
}
|
|
541
|
+
|
|
431
542
|
// =============================================================================
|
|
432
543
|
// MCP Notification Method Names
|
|
433
544
|
// =============================================================================
|