aws-runtime-bridge 1.9.79 → 1.9.81
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/dist/adapter/AcodeSdkAdapter.d.ts +0 -1
- package/dist/adapter/AcodeSdkAdapter.js +11 -1986
- package/dist/adapter/AdapterRegistry.d.ts +0 -1
- package/dist/adapter/AdapterRegistry.js +2 -100
- package/dist/adapter/ClaudeSdkAdapter.d.ts +0 -1
- package/dist/adapter/ClaudeSdkAdapter.js +4 -1300
- package/dist/adapter/CodexSdkAdapter.d.ts +0 -1
- package/dist/adapter/CodexSdkAdapter.js +4 -836
- package/dist/adapter/OpencodeSdkAdapter.d.ts +0 -1
- package/dist/adapter/OpencodeSdkAdapter.js +4 -879
- package/dist/adapter/SdkProviderSpi.d.ts +0 -1
- package/dist/adapter/SdkProviderSpi.js +2 -55
- package/dist/adapter/acode-tool-names.d.ts +0 -1
- package/dist/adapter/acode-tool-names.js +2 -37
- package/dist/adapter/idle-poll-loop.d.ts +0 -1
- package/dist/adapter/idle-poll-loop.js +2 -59
- package/dist/adapter/index.d.ts +0 -1
- package/dist/adapter/index.js +2 -11
- package/dist/adapter/instance-ai-config-resolver.d.ts +0 -1
- package/dist/adapter/instance-ai-config-resolver.js +2 -46
- package/dist/adapter/types.d.ts +0 -1
- package/dist/adapter/types.js +2 -443
- package/dist/adapters/cc-switch/common.d.ts +0 -1
- package/dist/adapters/cc-switch/common.js +2 -61
- package/dist/adapters/cc-switch/index.d.ts +0 -1
- package/dist/adapters/cc-switch/index.js +2 -57
- package/dist/adapters/cc-switch/mcp-acode.d.ts +0 -1
- package/dist/adapters/cc-switch/mcp-acode.js +2 -71
- package/dist/adapters/cc-switch/mcp-claude.d.ts +0 -1
- package/dist/adapters/cc-switch/mcp-claude.js +2 -89
- package/dist/adapters/cc-switch/mcp-claudecode.d.ts +0 -1
- package/dist/adapters/cc-switch/mcp-claudecode.js +2 -77
- package/dist/adapters/cc-switch/mcp-codex.d.ts +0 -1
- package/dist/adapters/cc-switch/mcp-codex.js +11 -249
- package/dist/adapters/cc-switch/mcp-opencode.d.ts +0 -1
- package/dist/adapters/cc-switch/mcp-opencode.js +2 -97
- package/dist/adapters/cc-switch/mcp-placeholder.d.ts +0 -1
- package/dist/adapters/cc-switch/mcp-placeholder.js +2 -19
- package/dist/adapters/cc-switch/skill-acode.d.ts +0 -1
- package/dist/adapters/cc-switch/skill-acode.js +2 -12
- package/dist/adapters/cc-switch/skill-claude.d.ts +0 -1
- package/dist/adapters/cc-switch/skill-claude.js +2 -11
- package/dist/adapters/cc-switch/skill-claudecode.d.ts +0 -1
- package/dist/adapters/cc-switch/skill-claudecode.js +2 -11
- package/dist/adapters/cc-switch/skill-codex.d.ts +0 -1
- package/dist/adapters/cc-switch/skill-codex.js +2 -6
- package/dist/adapters/cc-switch/skill-directory.d.ts +0 -1
- package/dist/adapters/cc-switch/skill-directory.js +3 -137
- package/dist/adapters/cc-switch/skill-opencode.d.ts +0 -1
- package/dist/adapters/cc-switch/skill-opencode.js +2 -11
- package/dist/adapters/cc-switch/skill-placeholder.d.ts +0 -1
- package/dist/adapters/cc-switch/skill-placeholder.js +2 -19
- package/dist/config.d.ts +0 -1
- package/dist/config.js +2 -290
- package/dist/index.d.ts +0 -1
- package/dist/index.js +2 -573
- package/dist/middleware/auth.d.ts +0 -1
- package/dist/middleware/auth.js +2 -98
- package/dist/routes/acode-todos.d.ts +0 -1
- package/dist/routes/acode-todos.js +2 -75
- package/dist/routes/ai-sources.d.ts +0 -1
- package/dist/routes/ai-sources.js +2 -132
- package/dist/routes/dashboard.d.ts +0 -1
- package/dist/routes/dashboard.js +182 -649
- package/dist/routes/events.d.ts +0 -1
- package/dist/routes/events.js +2 -22
- package/dist/routes/file-browser.d.ts +0 -1
- package/dist/routes/file-browser.js +2 -781
- package/dist/routes/file-diff-rollback.d.ts +0 -1
- package/dist/routes/file-diff-rollback.js +2 -301
- package/dist/routes/file-snapshot.d.ts +0 -1
- package/dist/routes/file-snapshot.js +2 -156
- package/dist/routes/git.d.ts +0 -1
- package/dist/routes/git.js +28 -1900
- package/dist/routes/instance.d.ts +0 -1
- package/dist/routes/instance.js +3 -748
- package/dist/routes/mcp.d.ts +0 -1
- package/dist/routes/mcp.js +2 -196
- package/dist/routes/processes.d.ts +0 -1
- package/dist/routes/processes.js +2 -252
- package/dist/routes/properties.d.ts +0 -1
- package/dist/routes/properties.js +2 -72
- package/dist/routes/pty.d.ts +0 -1
- package/dist/routes/pty.js +6 -560
- package/dist/routes/runtime-binding.d.ts +0 -1
- package/dist/routes/runtime-binding.js +2 -263
- package/dist/routes/sessions.d.ts +0 -1
- package/dist/routes/sessions.js +2 -758
- package/dist/routes/skills.d.ts +0 -1
- package/dist/routes/skills.js +2 -187
- package/dist/routes/sub-agents.d.ts +0 -1
- package/dist/routes/sub-agents.js +20 -279
- package/dist/routes/system-metrics.d.ts +0 -1
- package/dist/routes/system-metrics.js +2 -20
- package/dist/routes/task-context.d.ts +0 -1
- package/dist/routes/task-context.js +2 -78
- package/dist/routes/terminal.d.ts +0 -1
- package/dist/routes/terminal.js +54 -2882
- package/dist/routes/yml.d.ts +0 -1
- package/dist/routes/yml.js +2 -223
- package/dist/services/acode-package.d.ts +0 -1
- package/dist/services/acode-package.js +2 -111
- package/dist/services/agent-event-store.d.ts +0 -1
- package/dist/services/agent-event-store.js +2 -81
- package/dist/services/agent-process-manager.d.ts +0 -1
- package/dist/services/agent-process-manager.js +2 -796
- package/dist/services/ai-source-apply.d.ts +0 -1
- package/dist/services/ai-source-apply.js +2 -83
- package/dist/services/auto-register.d.ts +5 -1
- package/dist/services/auto-register.js +2 -1053
- package/dist/services/aws-client-agent-mcp.d.ts +0 -1
- package/dist/services/aws-client-agent-mcp.js +3 -337
- package/dist/services/bridge-package-publish-hooks.d.ts +0 -1
- package/dist/services/bridge-package-publish-hooks.js +2 -115
- package/dist/services/cc-switch-sdk.d.ts +0 -1
- package/dist/services/cc-switch-sdk.js +2 -135
- package/dist/services/cli-commands.d.ts +6 -1
- package/dist/services/cli-commands.js +6 -645
- package/dist/services/event-delta-pusher.d.ts +0 -1
- package/dist/services/event-delta-pusher.js +2 -95
- package/dist/services/fileSnapshotStore.d.ts +0 -1
- package/dist/services/fileSnapshotStore.js +2 -500
- package/dist/services/instance-ai-config-service.d.ts +0 -1
- package/dist/services/instance-ai-config-service.js +2 -174
- package/dist/services/instance-init-service.d.ts +0 -1
- package/dist/services/instance-init-service.js +2 -193
- package/dist/services/instance-service.d.ts +0 -1
- package/dist/services/instance-service.js +2 -237
- package/dist/services/instance-state.d.ts +0 -1
- package/dist/services/instance-state.js +2 -94
- package/dist/services/legacy-path-migration.d.ts +0 -1
- package/dist/services/legacy-path-migration.js +2 -66
- package/dist/services/lifecycle-state.d.ts +0 -1
- package/dist/services/lifecycle-state.js +3 -110
- package/dist/services/mcp-launch-binding-queue.d.ts +0 -1
- package/dist/services/mcp-launch-binding-queue.js +2 -175
- package/dist/services/orphan-monitor.d.ts +0 -1
- package/dist/services/orphan-monitor.js +2 -382
- package/dist/services/panel-auth.d.ts +0 -1
- package/dist/services/panel-auth.js +2 -168
- package/dist/services/process-detector.d.ts +0 -1
- package/dist/services/process-detector.js +18 -1019
- package/dist/services/process-registry.d.ts +0 -1
- package/dist/services/process-registry.js +2 -375
- package/dist/services/ring-buffer.d.ts +0 -1
- package/dist/services/ring-buffer.js +2 -103
- package/dist/services/runtime-binding.d.ts +0 -1
- package/dist/services/runtime-binding.js +6 -363
- package/dist/services/runtime-lifecycle-policy.d.ts +0 -1
- package/dist/services/runtime-lifecycle-policy.js +2 -35
- package/dist/services/session-output.d.ts +0 -1
- package/dist/services/session-output.js +5 -539
- package/dist/services/startup-config-wizard.d.ts +0 -1
- package/dist/services/startup-config-wizard.js +14 -258
- package/dist/services/sub-agent-manager-instance.d.ts +0 -1
- package/dist/services/sub-agent-manager-instance.js +2 -12
- package/dist/services/system-metrics.d.ts +0 -1
- package/dist/services/system-metrics.js +2 -252
- package/dist/services/terminal-persistence.d.ts +0 -1
- package/dist/services/terminal-persistence.js +2 -176
- package/dist/services/tool-installer.d.ts +0 -1
- package/dist/services/tool-installer.js +5 -751
- package/dist/services/tunnel-client.d.ts +0 -1
- package/dist/services/tunnel-client.js +2 -402
- package/dist/services/windows-service-manager.d.ts +3 -3
- package/dist/services/windows-service-manager.js +2 -59
- package/dist/services/workspace-files.d.ts +0 -1
- package/dist/services/workspace-files.js +2 -1275
- package/dist/services/workspace-watch.d.ts +0 -1
- package/dist/services/workspace-watch.js +2 -123
- package/dist/services/workspaceTaskChangeWatcher.d.ts +0 -1
- package/dist/services/workspaceTaskChangeWatcher.js +2 -483
- package/dist/types.d.ts +0 -1
- package/dist/types.js +1 -1
- package/dist/utils/file-utils.d.ts +0 -1
- package/dist/utils/file-utils.js +3 -208
- package/dist/utils/instance-ai-config-debug-logger.d.ts +0 -1
- package/dist/utils/instance-ai-config-debug-logger.js +4 -63
- package/dist/utils/logger.d.ts +0 -1
- package/dist/utils/logger.js +2 -154
- package/dist/utils/mcp-utils.d.ts +0 -1
- package/dist/utils/mcp-utils.js +2 -187
- package/dist/utils/path-utils.d.ts +0 -1
- package/dist/utils/path-utils.js +2 -44
- package/dist/utils/sdk-package-loader.d.ts +0 -1
- package/dist/utils/sdk-package-loader.js +2 -78
- package/dist/utils/validation.d.ts +0 -1
- package/dist/utils/validation.js +2 -53
- package/dist/utils/yaml-utils.d.ts +0 -1
- package/dist/utils/yaml-utils.js +2 -312
- package/node_modules/@cc-switch/sdk/dist/constants.d.ts +0 -1
- package/node_modules/@cc-switch/sdk/dist/constants.js +2 -63
- package/node_modules/@cc-switch/sdk/dist/errors.d.ts +0 -1
- package/node_modules/@cc-switch/sdk/dist/errors.js +2 -8
- package/node_modules/@cc-switch/sdk/dist/index.d.ts +0 -1
- package/node_modules/@cc-switch/sdk/dist/index.js +2 -9
- package/node_modules/@cc-switch/sdk/dist/schemas.d.ts +0 -1
- package/node_modules/@cc-switch/sdk/dist/schemas.js +2 -38
- package/node_modules/@cc-switch/sdk/dist/sdk.d.ts +0 -1
- package/node_modules/@cc-switch/sdk/dist/sdk.js +2 -470
- package/node_modules/@cc-switch/sdk/dist/services/ai-config-service.d.ts +0 -1
- package/node_modules/@cc-switch/sdk/dist/services/ai-config-service.js +4 -307
- package/node_modules/@cc-switch/sdk/dist/services/mcp-model.d.ts +0 -1
- package/node_modules/@cc-switch/sdk/dist/services/mcp-model.js +2 -37
- package/node_modules/@cc-switch/sdk/dist/services/mcp-service.d.ts +0 -1
- package/node_modules/@cc-switch/sdk/dist/services/mcp-service.js +2 -9
- package/node_modules/@cc-switch/sdk/dist/services/skill-model.d.ts +0 -1
- package/node_modules/@cc-switch/sdk/dist/services/skill-model.js +2 -41
- package/node_modules/@cc-switch/sdk/dist/services/skill-service.d.ts +0 -1
- package/node_modules/@cc-switch/sdk/dist/services/skill-service.js +2 -9
- package/node_modules/@cc-switch/sdk/dist/state.d.ts +0 -1
- package/node_modules/@cc-switch/sdk/dist/state.js +2 -19
- package/node_modules/@cc-switch/sdk/dist/types.d.ts +0 -1
- package/node_modules/@cc-switch/sdk/dist/types.js +1 -1
- package/node_modules/@cc-switch/sdk/dist/utils/fs.d.ts +0 -1
- package/node_modules/@cc-switch/sdk/dist/utils/fs.js +3 -114
- package/node_modules/@cc-switch/sdk/dist/utils/id.d.ts +0 -1
- package/node_modules/@cc-switch/sdk/dist/utils/id.js +2 -12
- package/node_modules/@cc-switch/sdk/package.json +1 -1
- package/package/acode/dist/ask-user-question-tool.d.ts +0 -1
- package/package/acode/dist/ask-user-question-tool.js +4 -233
- package/package/acode/dist/built-in-file-tools.d.ts +0 -1
- package/package/acode/dist/built-in-file-tools.js +4 -966
- package/package/acode/dist/built-in-symbols-tool.d.ts +0 -1
- package/package/acode/dist/built-in-symbols-tool.js +2 -117
- package/package/acode/dist/builtins/commandArtifacts.d.ts +0 -1
- package/package/acode/dist/builtins/commandArtifacts.js +9 -97
- package/package/acode/dist/builtins/commandOutputEvents.d.ts +0 -1
- package/package/acode/dist/builtins/commandOutputEvents.js +2 -56
- package/package/acode/dist/builtins/shellCommandPreparation.d.ts +0 -1
- package/package/acode/dist/builtins/shellCommandPreparation.js +5 -44
- package/package/acode/dist/builtins/shellCommandResult.d.ts +0 -1
- package/package/acode/dist/builtins/shellCommandResult.js +2 -71
- package/package/acode/dist/builtins/shellCommandRunner.d.ts +0 -1
- package/package/acode/dist/builtins/shellCommandRunner.js +2 -115
- package/package/acode/dist/builtins/shellOutputDecoder.d.ts +0 -1
- package/package/acode/dist/builtins/shellOutputDecoder.js +2 -94
- package/package/acode/dist/cli.d.ts +0 -1
- package/package/acode/dist/cli.js +4 -38
- package/package/acode/dist/commands/commandLoader.d.ts +0 -1
- package/package/acode/dist/commands/commandLoader.js +2 -33
- package/package/acode/dist/commands/commandParser.d.ts +0 -1
- package/package/acode/dist/commands/commandParser.js +3 -77
- package/package/acode/dist/commands/commandRegistry.d.ts +0 -1
- package/package/acode/dist/commands/commandRegistry.js +2 -30
- package/package/acode/dist/compaction.d.ts +0 -1
- package/package/acode/dist/compaction.js +7 -919
- package/package/acode/dist/config.d.ts +0 -1
- package/package/acode/dist/config.js +5 -105
- package/package/acode/dist/fs-utils.d.ts +0 -1
- package/package/acode/dist/fs-utils.js +2 -79
- package/package/acode/dist/hooks/hookBus.d.ts +0 -1
- package/package/acode/dist/hooks/hookBus.js +2 -40
- package/package/acode/dist/index.d.ts +0 -1
- package/package/acode/dist/index.js +2 -19
- package/package/acode/dist/mcpToolNames.d.ts +0 -1
- package/package/acode/dist/mcpToolNames.js +2 -17
- package/package/acode/dist/parsers/ast-cache.d.ts +0 -1
- package/package/acode/dist/parsers/ast-cache.js +2 -76
- package/package/acode/dist/parsers/language-detector.d.ts +0 -1
- package/package/acode/dist/parsers/language-detector.js +2 -44
- package/package/acode/dist/parsers/language-queries.d.ts +0 -1
- package/package/acode/dist/parsers/language-queries.js +12 -602
- package/package/acode/dist/parsers/symbol-extractor.d.ts +0 -1
- package/package/acode/dist/parsers/symbol-extractor.js +3 -164
- package/package/acode/dist/parsers/tree-sitter-loader.d.ts +0 -1
- package/package/acode/dist/parsers/tree-sitter-loader.js +2 -64
- package/package/acode/dist/parsers/types.d.ts +0 -1
- package/package/acode/dist/parsers/types.js +1 -7
- package/package/acode/dist/runtime.d.ts +0 -1
- package/package/acode/dist/runtime.js +86 -3771
- package/package/acode/dist/skill-tool.d.ts +0 -1
- package/package/acode/dist/skill-tool.js +5 -174
- package/package/acode/dist/sub-agent-manager.d.ts +0 -1
- package/package/acode/dist/sub-agent-manager.js +2 -1159
- package/package/acode/dist/sub-agent-store.d.ts +0 -1
- package/package/acode/dist/sub-agent-store.js +4 -236
- package/package/acode/dist/sub-agent-tools.d.ts +0 -1
- package/package/acode/dist/sub-agent-tools.js +15 -369
- package/package/acode/dist/sub-agent-types.d.ts +0 -1
- package/package/acode/dist/sub-agent-types.js +1 -8
- package/package/acode/dist/todo-store.d.ts +0 -1
- package/package/acode/dist/todo-store.js +2 -73
- package/package/acode/dist/todo-tool.d.ts +0 -1
- package/package/acode/dist/todo-tool.js +5 -121
- package/package/acode/dist/types.d.ts +0 -1
- package/package/acode/dist/types.js +1 -1
- package/package/acode/package.json +2 -2
- package/package/aws-client-agent-mcp/dist/agent-client.d.ts +0 -1
- package/package/aws-client-agent-mcp/dist/agent-client.js +2 -890
- package/package/aws-client-agent-mcp/dist/agent-client.test.d.ts +0 -1
- package/package/aws-client-agent-mcp/dist/agent-client.test.js +0 -1
- package/package/aws-client-agent-mcp/dist/config.d.ts +0 -1
- package/package/aws-client-agent-mcp/dist/config.js +2 -243
- package/package/aws-client-agent-mcp/dist/config.test.d.ts +0 -1
- package/package/aws-client-agent-mcp/dist/config.test.js +0 -1
- package/package/aws-client-agent-mcp/dist/constants.d.ts +0 -1
- package/package/aws-client-agent-mcp/dist/constants.js +2 -24
- package/package/aws-client-agent-mcp/dist/context-manager.d.ts +0 -1
- package/package/aws-client-agent-mcp/dist/context-manager.js +2 -477
- package/package/aws-client-agent-mcp/dist/context-manager.test.d.ts +0 -1
- package/package/aws-client-agent-mcp/dist/context-manager.test.js +0 -1
- package/package/aws-client-agent-mcp/dist/http-client.d.ts +0 -1
- package/package/aws-client-agent-mcp/dist/http-client.js +2 -446
- package/package/aws-client-agent-mcp/dist/http-client.test.d.ts +0 -1
- package/package/aws-client-agent-mcp/dist/http-client.test.js +0 -1
- package/package/aws-client-agent-mcp/dist/index.d.ts +0 -1
- package/package/aws-client-agent-mcp/dist/index.js +2 -34
- package/package/aws-client-agent-mcp/dist/logger.d.ts +0 -1
- package/package/aws-client-agent-mcp/dist/logger.js +3 -178
- package/package/aws-client-agent-mcp/dist/logger.test.d.ts +0 -1
- package/package/aws-client-agent-mcp/dist/logger.test.js +0 -1
- package/package/aws-client-agent-mcp/dist/mcp-server.d.ts +0 -1
- package/package/aws-client-agent-mcp/dist/mcp-server.js +38 -2709
- package/package/aws-client-agent-mcp/dist/mcp-server.test.d.ts +0 -1
- package/package/aws-client-agent-mcp/dist/mcp-server.test.js +0 -1
- package/package/aws-client-agent-mcp/dist/mcp-tools.d.ts +0 -1
- package/package/aws-client-agent-mcp/dist/mcp-tools.js +22 -562
- package/package/aws-client-agent-mcp/dist/mcp-tools.test.d.ts +0 -1
- package/package/aws-client-agent-mcp/dist/mcp-tools.test.js +0 -1
- package/package/aws-client-agent-mcp/dist/memory-store.d.ts +0 -1
- package/package/aws-client-agent-mcp/dist/memory-store.js +4 -826
- package/package/aws-client-agent-mcp/dist/memory-store.test.d.ts +0 -1
- package/package/aws-client-agent-mcp/dist/memory-store.test.js +0 -1
- package/package/aws-client-agent-mcp/dist/memory-tools.d.ts +0 -1
- package/package/aws-client-agent-mcp/dist/memory-tools.js +31 -294
- package/package/aws-client-agent-mcp/dist/message-buffer.d.ts +0 -1
- package/package/aws-client-agent-mcp/dist/message-buffer.js +2 -288
- package/package/aws-client-agent-mcp/dist/message-buffer.test.d.ts +0 -1
- package/package/aws-client-agent-mcp/dist/message-buffer.test.js +0 -1
- package/package/aws-client-agent-mcp/dist/messageContent.d.ts +0 -1
- package/package/aws-client-agent-mcp/dist/messageContent.js +2 -125
- package/package/aws-client-agent-mcp/dist/runtime-launch-binding.d.ts +0 -1
- package/package/aws-client-agent-mcp/dist/runtime-launch-binding.js +2 -103
- package/package/aws-client-agent-mcp/dist/runtime-launch-binding.test.d.ts +0 -1
- package/package/aws-client-agent-mcp/dist/runtime-launch-binding.test.js +0 -1
- package/package/aws-client-agent-mcp/dist/server-memory-store.d.ts +0 -1
- package/package/aws-client-agent-mcp/dist/server-memory-store.js +2 -96
- package/package/aws-client-agent-mcp/dist/status-reporter.d.ts +0 -1
- package/package/aws-client-agent-mcp/dist/status-reporter.js +3 -327
- package/package/aws-client-agent-mcp/dist/status-reporter.test.d.ts +0 -1
- package/package/aws-client-agent-mcp/dist/status-reporter.test.js +0 -1
- package/package/aws-client-agent-mcp/dist/types.d.ts +0 -1
- package/package/aws-client-agent-mcp/dist/types.js +2 -9
- package/package/aws-client-agent-mcp/dist/websocket-client.d.ts +0 -1
- package/package/aws-client-agent-mcp/dist/websocket-client.js +2 -677
- package/package/aws-client-agent-mcp/dist/websocket-client.test.d.ts +0 -1
- package/package/aws-client-agent-mcp/dist/websocket-client.test.js +0 -1
- package/package/aws-client-agent-mcp/package.json +1 -1
- package/package/cc-switch-sdk/dist/constants.d.ts +0 -1
- package/package/cc-switch-sdk/dist/constants.js +2 -63
- package/package/cc-switch-sdk/dist/errors.d.ts +0 -1
- package/package/cc-switch-sdk/dist/errors.js +2 -8
- package/package/cc-switch-sdk/dist/index.d.ts +0 -1
- package/package/cc-switch-sdk/dist/index.js +2 -9
- package/package/cc-switch-sdk/dist/schemas.d.ts +0 -1
- package/package/cc-switch-sdk/dist/schemas.js +2 -38
- package/package/cc-switch-sdk/dist/sdk.d.ts +0 -1
- package/package/cc-switch-sdk/dist/sdk.js +2 -470
- package/package/cc-switch-sdk/dist/services/ai-config-service.d.ts +0 -1
- package/package/cc-switch-sdk/dist/services/ai-config-service.js +4 -307
- package/package/cc-switch-sdk/dist/services/mcp-model.d.ts +0 -1
- package/package/cc-switch-sdk/dist/services/mcp-model.js +2 -37
- package/package/cc-switch-sdk/dist/services/mcp-service.d.ts +0 -1
- package/package/cc-switch-sdk/dist/services/mcp-service.js +2 -9
- package/package/cc-switch-sdk/dist/services/skill-model.d.ts +0 -1
- package/package/cc-switch-sdk/dist/services/skill-model.js +2 -41
- package/package/cc-switch-sdk/dist/services/skill-service.d.ts +0 -1
- package/package/cc-switch-sdk/dist/services/skill-service.js +2 -9
- package/package/cc-switch-sdk/dist/state.d.ts +0 -1
- package/package/cc-switch-sdk/dist/state.js +2 -19
- package/package/cc-switch-sdk/dist/types.d.ts +0 -1
- package/package/cc-switch-sdk/dist/types.js +1 -1
- package/package/cc-switch-sdk/dist/utils/fs.d.ts +0 -1
- package/package/cc-switch-sdk/dist/utils/fs.js +3 -114
- package/package/cc-switch-sdk/dist/utils/id.d.ts +0 -1
- package/package/cc-switch-sdk/dist/utils/id.js +2 -12
- package/package/cc-switch-sdk/package.json +1 -1
- package/package.json +4 -2
- package/dist/adapter/AcodeSdkAdapter.d.ts.map +0 -1
- package/dist/adapter/AdapterRegistry.d.ts.map +0 -1
- package/dist/adapter/ClaudeSdkAdapter.d.ts.map +0 -1
- package/dist/adapter/CodexSdkAdapter.d.ts.map +0 -1
- package/dist/adapter/OpencodeSdkAdapter.d.ts.map +0 -1
- package/dist/adapter/SdkProviderSpi.d.ts.map +0 -1
- package/dist/adapter/acode-tool-names.d.ts.map +0 -1
- package/dist/adapter/idle-poll-loop.d.ts.map +0 -1
- package/dist/adapter/index.d.ts.map +0 -1
- package/dist/adapter/instance-ai-config-resolver.d.ts.map +0 -1
- package/dist/adapter/types.d.ts.map +0 -1
- package/dist/adapters/cc-switch/common.d.ts.map +0 -1
- package/dist/adapters/cc-switch/index.d.ts.map +0 -1
- package/dist/adapters/cc-switch/mcp-acode.d.ts.map +0 -1
- package/dist/adapters/cc-switch/mcp-claude.d.ts.map +0 -1
- package/dist/adapters/cc-switch/mcp-claudecode.d.ts.map +0 -1
- package/dist/adapters/cc-switch/mcp-codex.d.ts.map +0 -1
- package/dist/adapters/cc-switch/mcp-opencode.d.ts.map +0 -1
- package/dist/adapters/cc-switch/mcp-placeholder.d.ts.map +0 -1
- package/dist/adapters/cc-switch/skill-acode.d.ts.map +0 -1
- package/dist/adapters/cc-switch/skill-claude.d.ts.map +0 -1
- package/dist/adapters/cc-switch/skill-claudecode.d.ts.map +0 -1
- package/dist/adapters/cc-switch/skill-codex.d.ts.map +0 -1
- package/dist/adapters/cc-switch/skill-directory.d.ts.map +0 -1
- package/dist/adapters/cc-switch/skill-opencode.d.ts.map +0 -1
- package/dist/adapters/cc-switch/skill-placeholder.d.ts.map +0 -1
- package/dist/config.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/middleware/auth.d.ts.map +0 -1
- package/dist/routes/acode-todos.d.ts.map +0 -1
- package/dist/routes/ai-sources.d.ts.map +0 -1
- package/dist/routes/dashboard.d.ts.map +0 -1
- package/dist/routes/events.d.ts.map +0 -1
- package/dist/routes/file-browser.d.ts.map +0 -1
- package/dist/routes/file-diff-rollback.d.ts.map +0 -1
- package/dist/routes/file-snapshot.d.ts.map +0 -1
- package/dist/routes/git.d.ts.map +0 -1
- package/dist/routes/instance.d.ts.map +0 -1
- package/dist/routes/mcp.d.ts.map +0 -1
- package/dist/routes/processes.d.ts.map +0 -1
- package/dist/routes/properties.d.ts.map +0 -1
- package/dist/routes/pty.d.ts.map +0 -1
- package/dist/routes/runtime-binding.d.ts.map +0 -1
- package/dist/routes/sessions.d.ts.map +0 -1
- package/dist/routes/skills.d.ts.map +0 -1
- package/dist/routes/sub-agents.d.ts.map +0 -1
- package/dist/routes/system-metrics.d.ts.map +0 -1
- package/dist/routes/task-context.d.ts.map +0 -1
- package/dist/routes/terminal.d.ts.map +0 -1
- package/dist/routes/yml.d.ts.map +0 -1
- package/dist/services/acode-package.d.ts.map +0 -1
- package/dist/services/agent-event-store.d.ts.map +0 -1
- package/dist/services/agent-process-manager.d.ts.map +0 -1
- package/dist/services/ai-source-apply.d.ts.map +0 -1
- package/dist/services/auto-register.d.ts.map +0 -1
- package/dist/services/aws-client-agent-mcp.d.ts.map +0 -1
- package/dist/services/bridge-package-publish-hooks.d.ts.map +0 -1
- package/dist/services/cc-switch-sdk.d.ts.map +0 -1
- package/dist/services/cli-commands.d.ts.map +0 -1
- package/dist/services/event-delta-pusher.d.ts.map +0 -1
- package/dist/services/fileSnapshotStore.d.ts.map +0 -1
- package/dist/services/instance-ai-config-service.d.ts.map +0 -1
- package/dist/services/instance-init-service.d.ts.map +0 -1
- package/dist/services/instance-service.d.ts.map +0 -1
- package/dist/services/instance-state.d.ts.map +0 -1
- package/dist/services/legacy-path-migration.d.ts.map +0 -1
- package/dist/services/lifecycle-state.d.ts.map +0 -1
- package/dist/services/mcp-launch-binding-queue.d.ts.map +0 -1
- package/dist/services/orphan-monitor.d.ts.map +0 -1
- package/dist/services/panel-auth.d.ts.map +0 -1
- package/dist/services/process-detector.d.ts.map +0 -1
- package/dist/services/process-registry.d.ts.map +0 -1
- package/dist/services/ring-buffer.d.ts.map +0 -1
- package/dist/services/runtime-binding.d.ts.map +0 -1
- package/dist/services/runtime-lifecycle-policy.d.ts.map +0 -1
- package/dist/services/session-output.d.ts.map +0 -1
- package/dist/services/startup-config-wizard.d.ts.map +0 -1
- package/dist/services/sub-agent-manager-instance.d.ts.map +0 -1
- package/dist/services/system-metrics.d.ts.map +0 -1
- package/dist/services/terminal-persistence.d.ts.map +0 -1
- package/dist/services/tool-installer.d.ts.map +0 -1
- package/dist/services/tunnel-client.d.ts.map +0 -1
- package/dist/services/windows-service-manager.d.ts.map +0 -1
- package/dist/services/workspace-files.d.ts.map +0 -1
- package/dist/services/workspace-watch.d.ts.map +0 -1
- package/dist/services/workspaceTaskChangeWatcher.d.ts.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/utils/file-utils.d.ts.map +0 -1
- package/dist/utils/instance-ai-config-debug-logger.d.ts.map +0 -1
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/mcp-utils.d.ts.map +0 -1
- package/dist/utils/path-utils.d.ts.map +0 -1
- package/dist/utils/sdk-package-loader.d.ts.map +0 -1
- package/dist/utils/validation.d.ts.map +0 -1
- package/dist/utils/yaml-utils.d.ts.map +0 -1
- package/node_modules/@cc-switch/sdk/dist/constants.d.ts.map +0 -1
- package/node_modules/@cc-switch/sdk/dist/errors.d.ts.map +0 -1
- package/node_modules/@cc-switch/sdk/dist/index.d.ts.map +0 -1
- package/node_modules/@cc-switch/sdk/dist/schemas.d.ts.map +0 -1
- package/node_modules/@cc-switch/sdk/dist/sdk.d.ts.map +0 -1
- package/node_modules/@cc-switch/sdk/dist/services/ai-config-service.d.ts.map +0 -1
- package/node_modules/@cc-switch/sdk/dist/services/mcp-model.d.ts.map +0 -1
- package/node_modules/@cc-switch/sdk/dist/services/mcp-service.d.ts.map +0 -1
- package/node_modules/@cc-switch/sdk/dist/services/skill-model.d.ts.map +0 -1
- package/node_modules/@cc-switch/sdk/dist/services/skill-service.d.ts.map +0 -1
- package/node_modules/@cc-switch/sdk/dist/state.d.ts.map +0 -1
- package/node_modules/@cc-switch/sdk/dist/types.d.ts.map +0 -1
- package/node_modules/@cc-switch/sdk/dist/utils/fs.d.ts.map +0 -1
- package/node_modules/@cc-switch/sdk/dist/utils/id.d.ts.map +0 -1
- package/package/acode/dist/ask-user-question-tool.d.ts.map +0 -1
- package/package/acode/dist/built-in-file-tools.d.ts.map +0 -1
- package/package/acode/dist/built-in-symbols-tool.d.ts.map +0 -1
- package/package/acode/dist/builtins/commandArtifacts.d.ts.map +0 -1
- package/package/acode/dist/builtins/commandOutputEvents.d.ts.map +0 -1
- package/package/acode/dist/builtins/shellCommandPreparation.d.ts.map +0 -1
- package/package/acode/dist/builtins/shellCommandResult.d.ts.map +0 -1
- package/package/acode/dist/builtins/shellCommandRunner.d.ts.map +0 -1
- package/package/acode/dist/builtins/shellOutputDecoder.d.ts.map +0 -1
- package/package/acode/dist/cli.d.ts.map +0 -1
- package/package/acode/dist/commands/commandLoader.d.ts.map +0 -1
- package/package/acode/dist/commands/commandParser.d.ts.map +0 -1
- package/package/acode/dist/commands/commandRegistry.d.ts.map +0 -1
- package/package/acode/dist/compaction.d.ts.map +0 -1
- package/package/acode/dist/config.d.ts.map +0 -1
- package/package/acode/dist/fs-utils.d.ts.map +0 -1
- package/package/acode/dist/hooks/hookBus.d.ts.map +0 -1
- package/package/acode/dist/index.d.ts.map +0 -1
- package/package/acode/dist/mcpToolNames.d.ts.map +0 -1
- package/package/acode/dist/parsers/ast-cache.d.ts.map +0 -1
- package/package/acode/dist/parsers/language-detector.d.ts.map +0 -1
- package/package/acode/dist/parsers/language-queries.d.ts.map +0 -1
- package/package/acode/dist/parsers/symbol-extractor.d.ts.map +0 -1
- package/package/acode/dist/parsers/tree-sitter-loader.d.ts.map +0 -1
- package/package/acode/dist/parsers/types.d.ts.map +0 -1
- package/package/acode/dist/runtime.d.ts.map +0 -1
- package/package/acode/dist/skill-tool.d.ts.map +0 -1
- package/package/acode/dist/sub-agent-manager.d.ts.map +0 -1
- package/package/acode/dist/sub-agent-store.d.ts.map +0 -1
- package/package/acode/dist/sub-agent-tools.d.ts.map +0 -1
- package/package/acode/dist/sub-agent-types.d.ts.map +0 -1
- package/package/acode/dist/todo-store.d.ts.map +0 -1
- package/package/acode/dist/todo-tool.d.ts.map +0 -1
- package/package/acode/dist/types.d.ts.map +0 -1
- package/package/aws-client-agent-mcp/dist/agent-client.d.ts.map +0 -1
- package/package/aws-client-agent-mcp/dist/agent-client.js.map +0 -1
- package/package/aws-client-agent-mcp/dist/agent-client.test.d.ts.map +0 -1
- package/package/aws-client-agent-mcp/dist/agent-client.test.js.map +0 -1
- package/package/aws-client-agent-mcp/dist/config.d.ts.map +0 -1
- package/package/aws-client-agent-mcp/dist/config.js.map +0 -1
- package/package/aws-client-agent-mcp/dist/config.test.d.ts.map +0 -1
- package/package/aws-client-agent-mcp/dist/config.test.js.map +0 -1
- package/package/aws-client-agent-mcp/dist/constants.d.ts.map +0 -1
- package/package/aws-client-agent-mcp/dist/constants.js.map +0 -1
- package/package/aws-client-agent-mcp/dist/context-manager.d.ts.map +0 -1
- package/package/aws-client-agent-mcp/dist/context-manager.js.map +0 -1
- package/package/aws-client-agent-mcp/dist/context-manager.test.d.ts.map +0 -1
- package/package/aws-client-agent-mcp/dist/context-manager.test.js.map +0 -1
- package/package/aws-client-agent-mcp/dist/http-client.d.ts.map +0 -1
- package/package/aws-client-agent-mcp/dist/http-client.js.map +0 -1
- package/package/aws-client-agent-mcp/dist/http-client.test.d.ts.map +0 -1
- package/package/aws-client-agent-mcp/dist/http-client.test.js.map +0 -1
- package/package/aws-client-agent-mcp/dist/index.d.ts.map +0 -1
- package/package/aws-client-agent-mcp/dist/index.js.map +0 -1
- package/package/aws-client-agent-mcp/dist/logger.d.ts.map +0 -1
- package/package/aws-client-agent-mcp/dist/logger.js.map +0 -1
- package/package/aws-client-agent-mcp/dist/logger.test.d.ts.map +0 -1
- package/package/aws-client-agent-mcp/dist/logger.test.js.map +0 -1
- package/package/aws-client-agent-mcp/dist/mcp-server.d.ts.map +0 -1
- package/package/aws-client-agent-mcp/dist/mcp-server.js.map +0 -1
- package/package/aws-client-agent-mcp/dist/mcp-server.test.d.ts.map +0 -1
- package/package/aws-client-agent-mcp/dist/mcp-server.test.js.map +0 -1
- package/package/aws-client-agent-mcp/dist/mcp-tools.d.ts.map +0 -1
- package/package/aws-client-agent-mcp/dist/mcp-tools.js.map +0 -1
- package/package/aws-client-agent-mcp/dist/mcp-tools.test.d.ts.map +0 -1
- package/package/aws-client-agent-mcp/dist/mcp-tools.test.js.map +0 -1
- package/package/aws-client-agent-mcp/dist/memory-store.d.ts.map +0 -1
- package/package/aws-client-agent-mcp/dist/memory-store.js.map +0 -1
- package/package/aws-client-agent-mcp/dist/memory-store.test.d.ts.map +0 -1
- package/package/aws-client-agent-mcp/dist/memory-store.test.js.map +0 -1
- package/package/aws-client-agent-mcp/dist/memory-tools.d.ts.map +0 -1
- package/package/aws-client-agent-mcp/dist/memory-tools.js.map +0 -1
- package/package/aws-client-agent-mcp/dist/message-buffer.d.ts.map +0 -1
- package/package/aws-client-agent-mcp/dist/message-buffer.js.map +0 -1
- package/package/aws-client-agent-mcp/dist/message-buffer.test.d.ts.map +0 -1
- package/package/aws-client-agent-mcp/dist/message-buffer.test.js.map +0 -1
- package/package/aws-client-agent-mcp/dist/messageContent.d.ts.map +0 -1
- package/package/aws-client-agent-mcp/dist/messageContent.js.map +0 -1
- package/package/aws-client-agent-mcp/dist/runtime-launch-binding.d.ts.map +0 -1
- package/package/aws-client-agent-mcp/dist/runtime-launch-binding.js.map +0 -1
- package/package/aws-client-agent-mcp/dist/runtime-launch-binding.test.d.ts.map +0 -1
- package/package/aws-client-agent-mcp/dist/runtime-launch-binding.test.js.map +0 -1
- package/package/aws-client-agent-mcp/dist/server-memory-store.d.ts.map +0 -1
- package/package/aws-client-agent-mcp/dist/server-memory-store.js.map +0 -1
- package/package/aws-client-agent-mcp/dist/status-reporter.d.ts.map +0 -1
- package/package/aws-client-agent-mcp/dist/status-reporter.js.map +0 -1
- package/package/aws-client-agent-mcp/dist/status-reporter.test.d.ts.map +0 -1
- package/package/aws-client-agent-mcp/dist/status-reporter.test.js.map +0 -1
- package/package/aws-client-agent-mcp/dist/types.d.ts.map +0 -1
- package/package/aws-client-agent-mcp/dist/types.js.map +0 -1
- package/package/aws-client-agent-mcp/dist/websocket-client.d.ts.map +0 -1
- package/package/aws-client-agent-mcp/dist/websocket-client.js.map +0 -1
- package/package/aws-client-agent-mcp/dist/websocket-client.test.d.ts.map +0 -1
- package/package/aws-client-agent-mcp/dist/websocket-client.test.js.map +0 -1
- package/package/cc-switch-sdk/dist/constants.d.ts.map +0 -1
- package/package/cc-switch-sdk/dist/errors.d.ts.map +0 -1
- package/package/cc-switch-sdk/dist/index.d.ts.map +0 -1
- package/package/cc-switch-sdk/dist/schemas.d.ts.map +0 -1
- package/package/cc-switch-sdk/dist/sdk.d.ts.map +0 -1
- package/package/cc-switch-sdk/dist/services/ai-config-service.d.ts.map +0 -1
- package/package/cc-switch-sdk/dist/services/mcp-model.d.ts.map +0 -1
- package/package/cc-switch-sdk/dist/services/mcp-service.d.ts.map +0 -1
- package/package/cc-switch-sdk/dist/services/skill-model.d.ts.map +0 -1
- package/package/cc-switch-sdk/dist/services/skill-service.d.ts.map +0 -1
- package/package/cc-switch-sdk/dist/state.d.ts.map +0 -1
- package/package/cc-switch-sdk/dist/types.d.ts.map +0 -1
- package/package/cc-switch-sdk/dist/utils/fs.d.ts.map +0 -1
- package/package/cc-switch-sdk/dist/utils/id.d.ts.map +0 -1
|
@@ -1,446 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
* 封装 MCP Tool 的 HTTP 调用
|
|
4
|
-
*/
|
|
5
|
-
import { logger } from "./logger.js";
|
|
6
|
-
const DEFAULT_MCP_HTTP_REQUEST_TIMEOUT_MS = 120_000;
|
|
7
|
-
const DEFAULT_RETRY_INTERVAL_MS = 5_000;
|
|
8
|
-
const DEFAULT_RETRY_MAX_ACCUMULATED_MS = 30_000;
|
|
9
|
-
const MAX_ERROR_RESPONSE_BODY_LENGTH = 1_000;
|
|
10
|
-
function formatErrorResponseBody(raw) {
|
|
11
|
-
const trimmed = raw.trim();
|
|
12
|
-
if (!trimmed) {
|
|
13
|
-
return "";
|
|
14
|
-
}
|
|
15
|
-
if (trimmed.length <= MAX_ERROR_RESPONSE_BODY_LENGTH) {
|
|
16
|
-
return trimmed;
|
|
17
|
-
}
|
|
18
|
-
return `${trimmed.slice(0, MAX_ERROR_RESPONSE_BODY_LENGTH)}...(truncated)`;
|
|
19
|
-
}
|
|
20
|
-
function repairDuplicatePort(raw) {
|
|
21
|
-
return raw.replace(/^((?:https?|wss?):\/\/(?:\[[^\]]+\]|[^/:?#]+):\d+):\d+(?=\/|$)/i, "$1");
|
|
22
|
-
}
|
|
23
|
-
function canonicalizeSchedulerHostname(hostname) {
|
|
24
|
-
const normalized = hostname.toLowerCase();
|
|
25
|
-
if (normalized === "localhost" || normalized === "::1" || normalized === "[::1]") {
|
|
26
|
-
return "127.0.0.1";
|
|
27
|
-
}
|
|
28
|
-
return normalized;
|
|
29
|
-
}
|
|
30
|
-
function normalizeMcpHttpUrl(value, options = {}) {
|
|
31
|
-
const raw = String(value || "").trim();
|
|
32
|
-
if (!raw) {
|
|
33
|
-
return undefined;
|
|
34
|
-
}
|
|
35
|
-
const repaired = repairDuplicatePort(raw);
|
|
36
|
-
try {
|
|
37
|
-
const url = new URL(repaired);
|
|
38
|
-
if (url.protocol === "ws:") {
|
|
39
|
-
url.protocol = "http:";
|
|
40
|
-
}
|
|
41
|
-
else if (url.protocol === "wss:") {
|
|
42
|
-
url.protocol = "https:";
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
url.protocol = url.protocol.toLowerCase();
|
|
46
|
-
}
|
|
47
|
-
url.hostname = canonicalizeSchedulerHostname(url.hostname);
|
|
48
|
-
const basePath = options.fromAgentWebSocketUrl
|
|
49
|
-
? url.pathname.replace(/\/ws\/agent\/?$/, "")
|
|
50
|
-
: url.pathname;
|
|
51
|
-
url.pathname = basePath.includes("/mcp/call")
|
|
52
|
-
? basePath
|
|
53
|
-
: `${basePath.replace(/\/$/, "")}/mcp/call`;
|
|
54
|
-
url.search = "";
|
|
55
|
-
url.hash = "";
|
|
56
|
-
return url.toString();
|
|
57
|
-
}
|
|
58
|
-
catch {
|
|
59
|
-
const normalized = (options.fromAgentWebSocketUrl
|
|
60
|
-
? repaired.replace(/\/ws\/agent\/?$/i, "")
|
|
61
|
-
: repaired).replace(/\/+$/, "");
|
|
62
|
-
return normalized.endsWith("/mcp/call") ? normalized : `${normalized}/mcp/call`;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* poll_message 长轮询专用的单次 HTTP 请求超时:10 分钟。
|
|
67
|
-
* 与服务端 resolvePollMessageBlockWaitMs 配合,每个 HTTP 请求最多阻塞 10 分钟。
|
|
68
|
-
* 这确保了 poll_message 在 OpenCode/Claude Code 的 MCP tool 调用中不会因为短超时而频繁重试,
|
|
69
|
-
* 真正实现永久阻塞等待,避免 Agent 被误判为空闲。
|
|
70
|
-
*/
|
|
71
|
-
const POLL_MESSAGE_ONCE_TIMEOUT_MS = 600_000;
|
|
72
|
-
export class HttpClient {
|
|
73
|
-
serverConfig;
|
|
74
|
-
mcpHttpUrl;
|
|
75
|
-
/**
|
|
76
|
-
* 共享的 token 刷新 Promise,避免并发请求重复刷新。
|
|
77
|
-
*/
|
|
78
|
-
tokenRefreshPromise = null;
|
|
79
|
-
constructor(serverConfig) {
|
|
80
|
-
this.serverConfig = serverConfig;
|
|
81
|
-
this.mcpHttpUrl = this.resolveMcpHttpUrl();
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* 调用 MCP Tool。
|
|
85
|
-
* 主流程:确保 token -> 循环执行请求(超时/网络/5xx 自动重试,间隔 5s,累计最多 30s)。
|
|
86
|
-
*/
|
|
87
|
-
async callTool(toolName, args) {
|
|
88
|
-
await this.ensureRuntimeAccessToken();
|
|
89
|
-
const deadline = Date.now() + this.resolveRetryMaxAccumulatedMs();
|
|
90
|
-
let attempt = 0;
|
|
91
|
-
while (true) {
|
|
92
|
-
attempt++;
|
|
93
|
-
// --- Execute HTTP request ---
|
|
94
|
-
let response;
|
|
95
|
-
try {
|
|
96
|
-
response = await this.executeToolRequest(toolName, args);
|
|
97
|
-
}
|
|
98
|
-
catch (error) {
|
|
99
|
-
if (Date.now() < deadline && this.isTransientError(error)) {
|
|
100
|
-
await this.delayForRetry(deadline, toolName, attempt);
|
|
101
|
-
continue;
|
|
102
|
-
}
|
|
103
|
-
// 不可恢复的异常,记录完整上下文后抛出
|
|
104
|
-
logger.warn('[HttpClient] MCP tool %s 请求不可恢复异常 (attempt=%s): %s', toolName, attempt, error instanceof Error ? error.message : String(error));
|
|
105
|
-
throw error;
|
|
106
|
-
}
|
|
107
|
-
// --- 401: try refresh token ---
|
|
108
|
-
if (response.status === 401) {
|
|
109
|
-
logger.warn(`[HttpClient] MCP Tool ${toolName} 返回 401,尝试向 bridge 刷新 token`);
|
|
110
|
-
const refreshed = await this.tryRefreshToken(args);
|
|
111
|
-
if (refreshed) {
|
|
112
|
-
let retryResponse;
|
|
113
|
-
try {
|
|
114
|
-
retryResponse = await this.executeToolRequest(toolName, args);
|
|
115
|
-
}
|
|
116
|
-
catch (error) {
|
|
117
|
-
if (Date.now() < deadline && this.isTransientError(error)) {
|
|
118
|
-
await this.delayForRetry(deadline, toolName, attempt);
|
|
119
|
-
continue;
|
|
120
|
-
}
|
|
121
|
-
// 401 重试路径异常,记录上下文后抛出
|
|
122
|
-
logger.warn('[HttpClient] MCP tool %s 401重试异常 (attempt=%s): %s', toolName, attempt, error instanceof Error ? error.message : String(error));
|
|
123
|
-
throw error;
|
|
124
|
-
}
|
|
125
|
-
if (!retryResponse.ok) {
|
|
126
|
-
if (Date.now() < deadline &&
|
|
127
|
-
this.isRetryableHttpStatus(retryResponse.status)) {
|
|
128
|
-
await this.delayForRetry(deadline, toolName, attempt);
|
|
129
|
-
continue;
|
|
130
|
-
}
|
|
131
|
-
const responseBody = typeof retryResponse.text === "function"
|
|
132
|
-
? formatErrorResponseBody(await retryResponse.text().catch(() => ""))
|
|
133
|
-
: "";
|
|
134
|
-
throw new Error(`MCP tool ${toolName} call failed: ${retryResponse.status} ${retryResponse.statusText}${responseBody ? ` - ${responseBody}` : ""}`);
|
|
135
|
-
}
|
|
136
|
-
const retryResult = (await retryResponse.json());
|
|
137
|
-
if (typeof retryResult.error === "string" && retryResult.error.trim().length > 0) {
|
|
138
|
-
throw new Error(`MCP tool ${toolName} failed: ${retryResult.error}`);
|
|
139
|
-
}
|
|
140
|
-
return retryResult;
|
|
141
|
-
}
|
|
142
|
-
logger.warn(`[HttpClient] token 刷新失败或无新 token,返回原始 401 错误`);
|
|
143
|
-
// Fall through to !response.ok for the original 401
|
|
144
|
-
}
|
|
145
|
-
// --- Non-OK status ---
|
|
146
|
-
if (!response.ok) {
|
|
147
|
-
if (Date.now() < deadline &&
|
|
148
|
-
this.isRetryableHttpStatus(response.status)) {
|
|
149
|
-
await this.delayForRetry(deadline, toolName, attempt);
|
|
150
|
-
continue;
|
|
151
|
-
}
|
|
152
|
-
const responseBody = typeof response.text === "function"
|
|
153
|
-
? formatErrorResponseBody(await response.text().catch(() => ""))
|
|
154
|
-
: "";
|
|
155
|
-
throw new Error(`MCP tool ${toolName} call failed: ${response.status} ${response.statusText}${responseBody ? ` - ${responseBody}` : ""}`);
|
|
156
|
-
}
|
|
157
|
-
// --- Parse and check business error ---
|
|
158
|
-
const result = (await response.json());
|
|
159
|
-
if (typeof result.error === "string" && result.error.trim().length > 0) {
|
|
160
|
-
throw new Error(`MCP tool ${toolName} failed: ${result.error}`);
|
|
161
|
-
}
|
|
162
|
-
return result;
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* 单次 MCP Tool 调用(无重试,用于 poll_message 长轮询)。
|
|
167
|
-
* 主流程:确保 token -> 单次 HTTP 请求(指定超时)-> 401 时刷新 token 重试一次 -> 解析返回。
|
|
168
|
-
* 不进行自动网络重试,避免 30s 重试截止期导致 poll_message 过早返回空结果,从而实现永久阻塞。
|
|
169
|
-
*/
|
|
170
|
-
async callToolOnce(toolName, args, timeoutMs = POLL_MESSAGE_ONCE_TIMEOUT_MS) {
|
|
171
|
-
await this.ensureRuntimeAccessToken();
|
|
172
|
-
const fetchOnce = (signal) => fetch(this.mcpHttpUrl, {
|
|
173
|
-
method: "POST",
|
|
174
|
-
headers: this.buildRequestHeaders(),
|
|
175
|
-
body: JSON.stringify({
|
|
176
|
-
tool: toolName,
|
|
177
|
-
arguments: args,
|
|
178
|
-
}),
|
|
179
|
-
signal,
|
|
180
|
-
});
|
|
181
|
-
// 首次请求
|
|
182
|
-
let response = await this.singleFetchWithTimeout(fetchOnce, timeoutMs, toolName);
|
|
183
|
-
// --- 401: try refresh token once ---
|
|
184
|
-
if (response.status === 401) {
|
|
185
|
-
logger.warn(`[HttpClient] MCP Tool ${toolName} 返回 401,尝试向 bridge 刷新 token`);
|
|
186
|
-
const refreshed = await this.tryRefreshToken(args);
|
|
187
|
-
if (refreshed) {
|
|
188
|
-
response = await this.singleFetchWithTimeout(fetchOnce, timeoutMs, toolName);
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
// --- Non-OK status ---
|
|
192
|
-
if (!response.ok) {
|
|
193
|
-
const responseBody = typeof response.text === "function"
|
|
194
|
-
? formatErrorResponseBody(await response.text().catch(() => ""))
|
|
195
|
-
: "";
|
|
196
|
-
throw new Error(`MCP tool ${toolName} call failed: ${response.status} ${response.statusText}${responseBody ? ` - ${responseBody}` : ""}`);
|
|
197
|
-
}
|
|
198
|
-
// --- Parse and check business error ---
|
|
199
|
-
const result = (await response.json());
|
|
200
|
-
if (typeof result.error === "string" && result.error.trim().length > 0) {
|
|
201
|
-
throw new Error(`MCP tool ${toolName} failed: ${result.error}`);
|
|
202
|
-
}
|
|
203
|
-
return result;
|
|
204
|
-
}
|
|
205
|
-
/**
|
|
206
|
-
* 一次可超时的 fetch 调用。
|
|
207
|
-
* 使用 AbortController 实现指定毫秒数的硬超时,超时后抛出 Error(消息格式兼容 isRecoverableLongPollError)。
|
|
208
|
-
*/
|
|
209
|
-
async singleFetchWithTimeout(fetchFn, timeoutMs, toolName) {
|
|
210
|
-
const controller = new AbortController();
|
|
211
|
-
let timeout;
|
|
212
|
-
if (timeoutMs > 0) {
|
|
213
|
-
timeout = setTimeout(() => controller.abort(), timeoutMs);
|
|
214
|
-
}
|
|
215
|
-
try {
|
|
216
|
-
return await fetchFn(controller.signal);
|
|
217
|
-
}
|
|
218
|
-
catch (error) {
|
|
219
|
-
if (controller.signal.aborted) {
|
|
220
|
-
throw new Error(`MCP tool ${toolName} timed out after ${timeoutMs}ms`);
|
|
221
|
-
}
|
|
222
|
-
throw error;
|
|
223
|
-
}
|
|
224
|
-
finally {
|
|
225
|
-
if (timeout !== undefined) {
|
|
226
|
-
clearTimeout(timeout);
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
/**
|
|
231
|
-
* 执行一次 MCP Tool HTTP 请求。
|
|
232
|
-
* 主流程:构建当前 runtime token 请求头 -> POST 到调度中心 MCP 入口 -> 返回原始响应供调用方判断是否刷新 token。
|
|
233
|
-
*/
|
|
234
|
-
async executeToolRequest(toolName, args) {
|
|
235
|
-
return await this.fetchWithTimeout(this.mcpHttpUrl, {
|
|
236
|
-
method: "POST",
|
|
237
|
-
headers: this.buildRequestHeaders(),
|
|
238
|
-
body: JSON.stringify({
|
|
239
|
-
tool: toolName,
|
|
240
|
-
arguments: args,
|
|
241
|
-
}),
|
|
242
|
-
}, `MCP tool ${toolName}`);
|
|
243
|
-
}
|
|
244
|
-
/**
|
|
245
|
-
* 执行可配置硬超时的 fetch。
|
|
246
|
-
* 主流程:创建 AbortController -> 超时 abort -> 将 abort 转成明确的工具超时错误。
|
|
247
|
-
*/
|
|
248
|
-
async fetchWithTimeout(url, init, operationName) {
|
|
249
|
-
const timeoutMs = this.resolveRequestTimeoutMs();
|
|
250
|
-
const controller = new AbortController();
|
|
251
|
-
const timeout = setTimeout(() => controller.abort(), timeoutMs);
|
|
252
|
-
try {
|
|
253
|
-
return await fetch(url, {
|
|
254
|
-
...init,
|
|
255
|
-
signal: controller.signal,
|
|
256
|
-
});
|
|
257
|
-
}
|
|
258
|
-
catch (error) {
|
|
259
|
-
if (controller.signal.aborted) {
|
|
260
|
-
throw new Error(`${operationName} timed out after ${timeoutMs}ms`);
|
|
261
|
-
}
|
|
262
|
-
throw error;
|
|
263
|
-
}
|
|
264
|
-
finally {
|
|
265
|
-
clearTimeout(timeout);
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
resolveRequestTimeoutMs() {
|
|
269
|
-
const configured = this.serverConfig.mcpHttpRequestTimeoutMs;
|
|
270
|
-
if (typeof configured === "number" &&
|
|
271
|
-
Number.isFinite(configured) &&
|
|
272
|
-
configured > 0) {
|
|
273
|
-
return configured;
|
|
274
|
-
}
|
|
275
|
-
return DEFAULT_MCP_HTTP_REQUEST_TIMEOUT_MS;
|
|
276
|
-
}
|
|
277
|
-
resolveRetryIntervalMs() {
|
|
278
|
-
const configured = this.serverConfig.mcpRetryIntervalMs;
|
|
279
|
-
if (typeof configured === "number" && Number.isFinite(configured) && configured >= 0) {
|
|
280
|
-
return configured;
|
|
281
|
-
}
|
|
282
|
-
return DEFAULT_RETRY_INTERVAL_MS;
|
|
283
|
-
}
|
|
284
|
-
resolveRetryMaxAccumulatedMs() {
|
|
285
|
-
const configured = this.serverConfig.mcpRetryMaxAccumulatedMs;
|
|
286
|
-
if (typeof configured === "number" && Number.isFinite(configured) && configured >= 0) {
|
|
287
|
-
return configured;
|
|
288
|
-
}
|
|
289
|
-
return DEFAULT_RETRY_MAX_ACCUMULATED_MS;
|
|
290
|
-
}
|
|
291
|
-
/**
|
|
292
|
-
* 判断异常是否可重试(超时、网络错误等瞬态异常)。
|
|
293
|
-
*/
|
|
294
|
-
isTransientError(error) {
|
|
295
|
-
if (!(error instanceof Error))
|
|
296
|
-
return false;
|
|
297
|
-
const msg = error.message;
|
|
298
|
-
// fetch 超时
|
|
299
|
-
if (/timed out after \d+ms/.test(msg))
|
|
300
|
-
return true;
|
|
301
|
-
// fetch 网络类错误
|
|
302
|
-
if (/fetch failed/i.test(msg))
|
|
303
|
-
return true;
|
|
304
|
-
if (/network/i.test(msg))
|
|
305
|
-
return true;
|
|
306
|
-
if (/ECONNREFUSED/i.test(msg))
|
|
307
|
-
return true;
|
|
308
|
-
if (/ECONNRESET/i.test(msg))
|
|
309
|
-
return true;
|
|
310
|
-
return false;
|
|
311
|
-
}
|
|
312
|
-
/**
|
|
313
|
-
* 判断 HTTP 状态码是否可重试。
|
|
314
|
-
* 5xx(服务端错误)或 429(限流)会自动重试;4xx 其他错误不重试。
|
|
315
|
-
*/
|
|
316
|
-
isRetryableHttpStatus(status) {
|
|
317
|
-
return status >= 500 || status === 429;
|
|
318
|
-
}
|
|
319
|
-
/**
|
|
320
|
-
* 重试前等待(取重试间隔与 deadline 剩余时间的较小值),并打印告警日志。
|
|
321
|
-
*/
|
|
322
|
-
async delayForRetry(deadline, toolName, attempt) {
|
|
323
|
-
const remainingMs = deadline - Date.now();
|
|
324
|
-
const delayMs = Math.min(this.resolveRetryIntervalMs(), Math.max(0, remainingMs));
|
|
325
|
-
logger.warn(`[HttpClient] MCP tool ${toolName} 请求失败,${delayMs}ms 后重试 (第${attempt}次)`);
|
|
326
|
-
if (delayMs > 0) {
|
|
327
|
-
await new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
/**
|
|
331
|
-
* 构建 MCP HTTP 请求头。
|
|
332
|
-
* 主流程:始终声明 JSON 内容类型 -> 当 runtime token 存在时同时兼容 X-Runtime-Token 与 Bearer 头。
|
|
333
|
-
*/
|
|
334
|
-
buildRequestHeaders() {
|
|
335
|
-
const headers = {
|
|
336
|
-
"Content-Type": "application/json",
|
|
337
|
-
};
|
|
338
|
-
if (this.serverConfig.runtimeAccessToken) {
|
|
339
|
-
headers["X-Runtime-Token"] = this.serverConfig.runtimeAccessToken;
|
|
340
|
-
headers.Authorization =
|
|
341
|
-
`Bearer ${this.serverConfig.runtimeAccessToken}`;
|
|
342
|
-
}
|
|
343
|
-
return headers;
|
|
344
|
-
}
|
|
345
|
-
async ensureRuntimeAccessToken() {
|
|
346
|
-
if (this.serverConfig.runtimeAccessToken ||
|
|
347
|
-
!this.serverConfig.runtimeBridgeBaseUrl) {
|
|
348
|
-
return;
|
|
349
|
-
}
|
|
350
|
-
throw new Error("runtimeAccessToken is required; MCP nodes must claim a session token from launch binding");
|
|
351
|
-
}
|
|
352
|
-
/**
|
|
353
|
-
* 向 bridge 查询最新 token,若获取到新 token 则更新本地配置。
|
|
354
|
-
* 同一时刻仅一个刷新请求生效,并发调用共享同一 Promise。
|
|
355
|
-
*/
|
|
356
|
-
async tryRefreshToken(args) {
|
|
357
|
-
if (this.tokenRefreshPromise) {
|
|
358
|
-
return this.tokenRefreshPromise;
|
|
359
|
-
}
|
|
360
|
-
this.tokenRefreshPromise = this.doRefreshToken(args);
|
|
361
|
-
try {
|
|
362
|
-
return await this.tokenRefreshPromise;
|
|
363
|
-
}
|
|
364
|
-
finally {
|
|
365
|
-
this.tokenRefreshPromise = null;
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
async doRefreshToken(args) {
|
|
369
|
-
const bridgeBaseUrl = this.serverConfig.runtimeBridgeBaseUrl;
|
|
370
|
-
if (!bridgeBaseUrl) {
|
|
371
|
-
logger.warn("[HttpClient] 无 runtimeBridgeBaseUrl,无法刷新 token");
|
|
372
|
-
return false;
|
|
373
|
-
}
|
|
374
|
-
const agentId = String(args?.agentId || "").trim();
|
|
375
|
-
if (!agentId) {
|
|
376
|
-
logger.warn("[HttpClient] 无 agentId,无法刷新 token");
|
|
377
|
-
return false;
|
|
378
|
-
}
|
|
379
|
-
try {
|
|
380
|
-
const response = await fetch(`${bridgeBaseUrl}/runtime/binding/refresh-token`, {
|
|
381
|
-
method: "POST",
|
|
382
|
-
headers: { "Content-Type": "application/json" },
|
|
383
|
-
body: JSON.stringify({
|
|
384
|
-
agentId,
|
|
385
|
-
currentToken: this.serverConfig.runtimeAccessToken || "",
|
|
386
|
-
}),
|
|
387
|
-
});
|
|
388
|
-
if (!response.ok) {
|
|
389
|
-
logger.warn(`[HttpClient] bridge refresh-token 返回 ${response.status},无法刷新`);
|
|
390
|
-
return false;
|
|
391
|
-
}
|
|
392
|
-
const data = (await response.json());
|
|
393
|
-
const newToken = data.runtimeAccessToken;
|
|
394
|
-
if (!newToken) {
|
|
395
|
-
logger.warn("[HttpClient] bridge 未返回新 token");
|
|
396
|
-
return false;
|
|
397
|
-
}
|
|
398
|
-
if (newToken === this.serverConfig.runtimeAccessToken) {
|
|
399
|
-
return false;
|
|
400
|
-
}
|
|
401
|
-
this.serverConfig.runtimeAccessToken = newToken;
|
|
402
|
-
logger.info(`[HttpClient] runtimeAccessToken 已通过 bridge refresh 更新`);
|
|
403
|
-
return true;
|
|
404
|
-
}
|
|
405
|
-
catch (error) {
|
|
406
|
-
logger.warn('[HttpClient] 刷新 token 失败: %s', error instanceof Error ? error.message : String(error));
|
|
407
|
-
if (error instanceof Error && error.stack) {
|
|
408
|
-
logger.warn('[HttpClient] 刷新 token 异常堆栈:', error.stack);
|
|
409
|
-
}
|
|
410
|
-
return false;
|
|
411
|
-
}
|
|
412
|
-
}
|
|
413
|
-
/**
|
|
414
|
-
* 主动刷新 runtimeAccessToken(供 WebSocket 1008 反应式刷新与定时续期调用)。
|
|
415
|
-
* 复用与 HTTP 401 相同的 bridge refresh-token 路径与并发去重逻辑。
|
|
416
|
-
*/
|
|
417
|
-
async refreshRuntimeAccessToken(agentId) {
|
|
418
|
-
return this.tryRefreshToken({ agentId });
|
|
419
|
-
}
|
|
420
|
-
/**
|
|
421
|
-
* 解析 MCP HTTP URL
|
|
422
|
-
*/
|
|
423
|
-
resolveMcpHttpUrl() {
|
|
424
|
-
const configured = this.serverConfig.mcpHttpUrl;
|
|
425
|
-
if (configured && configured.trim().length > 0) {
|
|
426
|
-
const normalized = normalizeMcpHttpUrl(configured);
|
|
427
|
-
if (normalized) {
|
|
428
|
-
return normalized;
|
|
429
|
-
}
|
|
430
|
-
}
|
|
431
|
-
const fromServerUrl = normalizeMcpHttpUrl(this.serverConfig.serverUrl, {
|
|
432
|
-
fromAgentWebSocketUrl: true,
|
|
433
|
-
});
|
|
434
|
-
if (fromServerUrl) {
|
|
435
|
-
return fromServerUrl;
|
|
436
|
-
}
|
|
437
|
-
return this.serverConfig.serverUrl;
|
|
438
|
-
}
|
|
439
|
-
/**
|
|
440
|
-
* 获取 MCP HTTP URL
|
|
441
|
-
*/
|
|
442
|
-
getMcpHttpUrl() {
|
|
443
|
-
return this.mcpHttpUrl;
|
|
444
|
-
}
|
|
445
|
-
}
|
|
446
|
-
//# sourceMappingURL=http-client.js.map
|
|
1
|
+
import{logger as a}from"./logger.js";const d=12e4,w=5e3,g=3e4,m=1e3;function h(c){const e=c.trim();return e?e.length<=m?e:`${e.slice(0,m)}...(truncated)`:""}function T(c){return c.replace(/^((?:https?|wss?):\/\/(?:\[[^\]]+\]|[^/:?#]+):\d+):\d+(?=\/|$)/i,"$1")}function y(c){const e=c.toLowerCase();return e==="localhost"||e==="::1"||e==="[::1]"?"127.0.0.1":e}function p(c,e={}){const n=String(c||"").trim();if(!n)return;const s=T(n);try{const t=new URL(s);t.protocol==="ws:"?t.protocol="http:":t.protocol==="wss:"?t.protocol="https:":t.protocol=t.protocol.toLowerCase(),t.hostname=y(t.hostname);const r=e.fromAgentWebSocketUrl?t.pathname.replace(/\/ws\/agent\/?$/,""):t.pathname;return t.pathname=r.includes("/mcp/call")?r:`${r.replace(/\/$/,"")}/mcp/call`,t.search="",t.hash="",t.toString()}catch{const t=(e.fromAgentWebSocketUrl?s.replace(/\/ws\/agent\/?$/i,""):s).replace(/\/+$/,"");return t.endsWith("/mcp/call")?t:`${t}/mcp/call`}}const C=6e5;class k{serverConfig;mcpHttpUrl;tokenRefreshPromise=null;constructor(e){this.serverConfig=e,this.mcpHttpUrl=this.resolveMcpHttpUrl()}async callTool(e,n){await this.ensureRuntimeAccessToken();const s=Date.now()+this.resolveRetryMaxAccumulatedMs();let t=0;for(;;){t++;let r;try{r=await this.executeToolRequest(e,n)}catch(o){if(Date.now()<s&&this.isTransientError(o)){await this.delayForRetry(s,e,t);continue}throw a.warn("[HttpClient] MCP tool %s \u8BF7\u6C42\u4E0D\u53EF\u6062\u590D\u5F02\u5E38 (attempt=%s): %s",e,t,o instanceof Error?o.message:String(o)),o}if(r.status===401){if(a.warn(`[HttpClient] MCP Tool ${e} \u8FD4\u56DE 401\uFF0C\u5C1D\u8BD5\u5411 bridge \u5237\u65B0 token`),await this.tryRefreshToken(n)){let l;try{l=await this.executeToolRequest(e,n)}catch(u){if(Date.now()<s&&this.isTransientError(u)){await this.delayForRetry(s,e,t);continue}throw a.warn("[HttpClient] MCP tool %s 401\u91CD\u8BD5\u5F02\u5E38 (attempt=%s): %s",e,t,u instanceof Error?u.message:String(u)),u}if(!l.ok){if(Date.now()<s&&this.isRetryableHttpStatus(l.status)){await this.delayForRetry(s,e,t);continue}const u=typeof l.text=="function"?h(await l.text().catch(()=>"")):"";throw new Error(`MCP tool ${e} call failed: ${l.status} ${l.statusText}${u?` - ${u}`:""}`)}const f=await l.json();if(typeof f.error=="string"&&f.error.trim().length>0)throw new Error(`MCP tool ${e} failed: ${f.error}`);return f}a.warn("[HttpClient] token \u5237\u65B0\u5931\u8D25\u6216\u65E0\u65B0 token\uFF0C\u8FD4\u56DE\u539F\u59CB 401 \u9519\u8BEF")}if(!r.ok){if(Date.now()<s&&this.isRetryableHttpStatus(r.status)){await this.delayForRetry(s,e,t);continue}const o=typeof r.text=="function"?h(await r.text().catch(()=>"")):"";throw new Error(`MCP tool ${e} call failed: ${r.status} ${r.statusText}${o?` - ${o}`:""}`)}const i=await r.json();if(typeof i.error=="string"&&i.error.trim().length>0)throw new Error(`MCP tool ${e} failed: ${i.error}`);return i}}async callToolOnce(e,n,s=C){await this.ensureRuntimeAccessToken();const t=o=>fetch(this.mcpHttpUrl,{method:"POST",headers:this.buildRequestHeaders(),body:JSON.stringify({tool:e,arguments:n}),signal:o});let r=await this.singleFetchWithTimeout(t,s,e);if(r.status===401&&(a.warn(`[HttpClient] MCP Tool ${e} \u8FD4\u56DE 401\uFF0C\u5C1D\u8BD5\u5411 bridge \u5237\u65B0 token`),await this.tryRefreshToken(n)&&(r=await this.singleFetchWithTimeout(t,s,e))),!r.ok){const o=typeof r.text=="function"?h(await r.text().catch(()=>"")):"";throw new Error(`MCP tool ${e} call failed: ${r.status} ${r.statusText}${o?` - ${o}`:""}`)}const i=await r.json();if(typeof i.error=="string"&&i.error.trim().length>0)throw new Error(`MCP tool ${e} failed: ${i.error}`);return i}async singleFetchWithTimeout(e,n,s){const t=new AbortController;let r;n>0&&(r=setTimeout(()=>t.abort(),n));try{return await e(t.signal)}catch(i){throw t.signal.aborted?new Error(`MCP tool ${s} timed out after ${n}ms`):i}finally{r!==void 0&&clearTimeout(r)}}async executeToolRequest(e,n){return await this.fetchWithTimeout(this.mcpHttpUrl,{method:"POST",headers:this.buildRequestHeaders(),body:JSON.stringify({tool:e,arguments:n})},`MCP tool ${e}`)}async fetchWithTimeout(e,n,s){const t=this.resolveRequestTimeoutMs(),r=new AbortController,i=setTimeout(()=>r.abort(),t);try{return await fetch(e,{...n,signal:r.signal})}catch(o){throw r.signal.aborted?new Error(`${s} timed out after ${t}ms`):o}finally{clearTimeout(i)}}resolveRequestTimeoutMs(){const e=this.serverConfig.mcpHttpRequestTimeoutMs;return typeof e=="number"&&Number.isFinite(e)&&e>0?e:d}resolveRetryIntervalMs(){const e=this.serverConfig.mcpRetryIntervalMs;return typeof e=="number"&&Number.isFinite(e)&&e>=0?e:w}resolveRetryMaxAccumulatedMs(){const e=this.serverConfig.mcpRetryMaxAccumulatedMs;return typeof e=="number"&&Number.isFinite(e)&&e>=0?e:g}isTransientError(e){if(!(e instanceof Error))return!1;const n=e.message;return!!(/timed out after \d+ms/.test(n)||/fetch failed/i.test(n)||/network/i.test(n)||/ECONNREFUSED/i.test(n)||/ECONNRESET/i.test(n))}isRetryableHttpStatus(e){return e>=500||e===429}async delayForRetry(e,n,s){const t=e-Date.now(),r=Math.min(this.resolveRetryIntervalMs(),Math.max(0,t));a.warn(`[HttpClient] MCP tool ${n} \u8BF7\u6C42\u5931\u8D25\uFF0C${r}ms \u540E\u91CD\u8BD5 (\u7B2C${s}\u6B21)`),r>0&&await new Promise(i=>setTimeout(i,r))}buildRequestHeaders(){const e={"Content-Type":"application/json"};return this.serverConfig.runtimeAccessToken&&(e["X-Runtime-Token"]=this.serverConfig.runtimeAccessToken,e.Authorization=`Bearer ${this.serverConfig.runtimeAccessToken}`),e}async ensureRuntimeAccessToken(){if(!(this.serverConfig.runtimeAccessToken||!this.serverConfig.runtimeBridgeBaseUrl))throw new Error("runtimeAccessToken is required; MCP nodes must claim a session token from launch binding")}async tryRefreshToken(e){if(this.tokenRefreshPromise)return this.tokenRefreshPromise;this.tokenRefreshPromise=this.doRefreshToken(e);try{return await this.tokenRefreshPromise}finally{this.tokenRefreshPromise=null}}async doRefreshToken(e){const n=this.serverConfig.runtimeBridgeBaseUrl;if(!n)return a.warn("[HttpClient] \u65E0 runtimeBridgeBaseUrl\uFF0C\u65E0\u6CD5\u5237\u65B0 token"),!1;const s=String(e?.agentId||"").trim();if(!s)return a.warn("[HttpClient] \u65E0 agentId\uFF0C\u65E0\u6CD5\u5237\u65B0 token"),!1;try{const t=await fetch(`${n}/runtime/binding/refresh-token`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({agentId:s,currentToken:this.serverConfig.runtimeAccessToken||""})});if(!t.ok)return a.warn(`[HttpClient] bridge refresh-token \u8FD4\u56DE ${t.status}\uFF0C\u65E0\u6CD5\u5237\u65B0`),!1;const i=(await t.json()).runtimeAccessToken;return i?i===this.serverConfig.runtimeAccessToken?!1:(this.serverConfig.runtimeAccessToken=i,a.info("[HttpClient] runtimeAccessToken \u5DF2\u901A\u8FC7 bridge refresh \u66F4\u65B0"),!0):(a.warn("[HttpClient] bridge \u672A\u8FD4\u56DE\u65B0 token"),!1)}catch(t){return a.warn("[HttpClient] \u5237\u65B0 token \u5931\u8D25: %s",t instanceof Error?t.message:String(t)),t instanceof Error&&t.stack&&a.warn("[HttpClient] \u5237\u65B0 token \u5F02\u5E38\u5806\u6808:",t.stack),!1}}async refreshRuntimeAccessToken(e){return this.tryRefreshToken({agentId:e})}resolveMcpHttpUrl(){const e=this.serverConfig.mcpHttpUrl;if(e&&e.trim().length>0){const s=p(e);if(s)return s}const n=p(this.serverConfig.serverUrl,{fromAgentWebSocketUrl:!0});return n||this.serverConfig.serverUrl}getMcpHttpUrl(){return this.mcpHttpUrl}}export{k as HttpClient};
|
|
2
|
+
|
|
@@ -1,35 +1,3 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
* AgentsWorkStudio - Agent MCP Client 入口
|
|
5
|
-
*
|
|
6
|
-
* 这是编程 Agent 与调度中心的通信桥梁,通过 MCP 协议提供以下功能:
|
|
7
|
-
* - 注册/注销 Agent 上线
|
|
8
|
-
* - 发现在线用户
|
|
9
|
-
* - 发送/接收群消息
|
|
10
|
-
* - 发送/接收私信(支持调用式和通知式)
|
|
11
|
-
* - 消息主循环
|
|
12
|
-
*/
|
|
13
|
-
import { McpServer } from './mcp-server.js';
|
|
14
|
-
import { initializeStartupLogFile, logger } from './logger.js';
|
|
15
|
-
async function main() {
|
|
16
|
-
const startupLogFilePath = initializeStartupLogFile();
|
|
17
|
-
if (startupLogFilePath) {
|
|
18
|
-
logger.info(`[Logger] MCP 启动日志: ${startupLogFilePath}`);
|
|
19
|
-
}
|
|
20
|
-
logger.info('='.repeat(60));
|
|
21
|
-
logger.info('AgentsWorkStudio - Agent MCP Client');
|
|
22
|
-
logger.info('编程 Agent 与调度中心的通信桥梁');
|
|
23
|
-
logger.info('='.repeat(60));
|
|
24
|
-
logger.info('');
|
|
25
|
-
try {
|
|
26
|
-
const server = new McpServer();
|
|
27
|
-
await server.start();
|
|
28
|
-
}
|
|
29
|
-
catch (error) {
|
|
30
|
-
logger.error('[Main] 启动失败:', error);
|
|
31
|
-
process.exit(1);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
main();
|
|
35
|
-
//# sourceMappingURL=index.js.map
|
|
2
|
+
import{McpServer as i}from"./mcp-server.js";import{initializeStartupLogFile as o,logger as r}from"./logger.js";async function n(){const e=o();e&&r.info(`[Logger] MCP \u542F\u52A8\u65E5\u5FD7: ${e}`),r.info("=".repeat(60)),r.info("AgentsWorkStudio - Agent MCP Client"),r.info("\u7F16\u7A0B Agent \u4E0E\u8C03\u5EA6\u4E2D\u5FC3\u7684\u901A\u4FE1\u6865\u6881"),r.info("=".repeat(60)),r.info("");try{await new i().start()}catch(t){r.error("[Main] \u542F\u52A8\u5931\u8D25:",t),process.exit(1)}}n();
|
|
3
|
+
|