@compass-ai/nova 1.0.74 → 1.0.76
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/cli.js +557 -555
- package/dist/index.js +10 -8
- package/package.json +1 -1
- package/dist/acp/agent.d.ts +0 -318
- package/dist/acp/agent.d.ts.map +0 -1
- package/dist/acp/agent.js +0 -795
- package/dist/acp/agent.js.map +0 -1
- package/dist/acp/backpressure-writer.d.ts +0 -49
- package/dist/acp/backpressure-writer.d.ts.map +0 -1
- package/dist/acp/backpressure-writer.js +0 -153
- package/dist/acp/backpressure-writer.js.map +0 -1
- package/dist/acp/event-adapter.d.ts +0 -242
- package/dist/acp/event-adapter.d.ts.map +0 -1
- package/dist/acp/event-adapter.js +0 -456
- package/dist/acp/event-adapter.js.map +0 -1
- package/dist/acp/index.d.ts +0 -30
- package/dist/acp/index.d.ts.map +0 -1
- package/dist/acp/index.js +0 -36
- package/dist/acp/index.js.map +0 -1
- package/dist/acp/modes.d.ts +0 -56
- package/dist/acp/modes.d.ts.map +0 -1
- package/dist/acp/modes.js +0 -135
- package/dist/acp/modes.js.map +0 -1
- package/dist/acp/session-manager.d.ts +0 -170
- package/dist/acp/session-manager.d.ts.map +0 -1
- package/dist/acp/session-manager.js +0 -381
- package/dist/acp/session-manager.js.map +0 -1
- package/dist/acp/text-coalescer.d.ts +0 -45
- package/dist/acp/text-coalescer.d.ts.map +0 -1
- package/dist/acp/text-coalescer.js +0 -110
- package/dist/acp/text-coalescer.js.map +0 -1
- package/dist/acp/tool-bridge.d.ts +0 -156
- package/dist/acp/tool-bridge.d.ts.map +0 -1
- package/dist/acp/tool-bridge.js +0 -381
- package/dist/acp/tool-bridge.js.map +0 -1
- package/dist/acp/types.d.ts +0 -314
- package/dist/acp/types.d.ts.map +0 -1
- package/dist/acp/types.js +0 -8
- package/dist/acp/types.js.map +0 -1
- package/dist/cli.d.ts +0 -9
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/commands/acp.d.ts +0 -26
- package/dist/commands/acp.d.ts.map +0 -1
- package/dist/commands/acp.js +0 -492
- package/dist/commands/acp.js.map +0 -1
- package/dist/commands/cache.d.ts +0 -33
- package/dist/commands/cache.d.ts.map +0 -1
- package/dist/commands/cache.js +0 -537
- package/dist/commands/cache.js.map +0 -1
- package/dist/commands/config.d.ts +0 -10
- package/dist/commands/config.d.ts.map +0 -1
- package/dist/commands/config.js +0 -367
- package/dist/commands/config.js.map +0 -1
- package/dist/commands/consent.d.ts +0 -21
- package/dist/commands/consent.d.ts.map +0 -1
- package/dist/commands/consent.js +0 -334
- package/dist/commands/consent.js.map +0 -1
- package/dist/commands/data.d.ts +0 -24
- package/dist/commands/data.d.ts.map +0 -1
- package/dist/commands/data.js +0 -586
- package/dist/commands/data.js.map +0 -1
- package/dist/commands/index.d.ts +0 -145
- package/dist/commands/index.d.ts.map +0 -1
- package/dist/commands/index.js +0 -210
- package/dist/commands/index.js.map +0 -1
- package/dist/commands/init.d.ts +0 -106
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/init.js +0 -349
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/logs.d.ts +0 -13
- package/dist/commands/logs.d.ts.map +0 -1
- package/dist/commands/logs.js +0 -359
- package/dist/commands/logs.js.map +0 -1
- package/dist/commands/mcp.d.ts +0 -20
- package/dist/commands/mcp.d.ts.map +0 -1
- package/dist/commands/mcp.js +0 -687
- package/dist/commands/mcp.js.map +0 -1
- package/dist/commands/reset.d.ts +0 -20
- package/dist/commands/reset.d.ts.map +0 -1
- package/dist/commands/reset.js +0 -372
- package/dist/commands/reset.js.map +0 -1
- package/dist/commands/setup.d.ts +0 -74
- package/dist/commands/setup.d.ts.map +0 -1
- package/dist/commands/setup.js +0 -863
- package/dist/commands/setup.js.map +0 -1
- package/dist/commands/slash/agents.d.ts +0 -40
- package/dist/commands/slash/agents.d.ts.map +0 -1
- package/dist/commands/slash/agents.js +0 -519
- package/dist/commands/slash/agents.js.map +0 -1
- package/dist/commands/slash/approve.d.ts +0 -46
- package/dist/commands/slash/approve.d.ts.map +0 -1
- package/dist/commands/slash/approve.js +0 -239
- package/dist/commands/slash/approve.js.map +0 -1
- package/dist/commands/slash/attach.d.ts +0 -70
- package/dist/commands/slash/attach.d.ts.map +0 -1
- package/dist/commands/slash/attach.js +0 -333
- package/dist/commands/slash/attach.js.map +0 -1
- package/dist/commands/slash/clear.d.ts +0 -47
- package/dist/commands/slash/clear.d.ts.map +0 -1
- package/dist/commands/slash/clear.js +0 -261
- package/dist/commands/slash/clear.js.map +0 -1
- package/dist/commands/slash/commit.d.ts +0 -40
- package/dist/commands/slash/commit.d.ts.map +0 -1
- package/dist/commands/slash/commit.js +0 -337
- package/dist/commands/slash/commit.js.map +0 -1
- package/dist/commands/slash/compact.d.ts +0 -48
- package/dist/commands/slash/compact.d.ts.map +0 -1
- package/dist/commands/slash/compact.js +0 -288
- package/dist/commands/slash/compact.js.map +0 -1
- package/dist/commands/slash/config.d.ts +0 -20
- package/dist/commands/slash/config.d.ts.map +0 -1
- package/dist/commands/slash/config.js +0 -136
- package/dist/commands/slash/config.js.map +0 -1
- package/dist/commands/slash/context.d.ts +0 -49
- package/dist/commands/slash/context.d.ts.map +0 -1
- package/dist/commands/slash/context.js +0 -430
- package/dist/commands/slash/context.js.map +0 -1
- package/dist/commands/slash/cost.d.ts +0 -34
- package/dist/commands/slash/cost.d.ts.map +0 -1
- package/dist/commands/slash/cost.js +0 -312
- package/dist/commands/slash/cost.js.map +0 -1
- package/dist/commands/slash/custom.d.ts +0 -41
- package/dist/commands/slash/custom.d.ts.map +0 -1
- package/dist/commands/slash/custom.js +0 -126
- package/dist/commands/slash/custom.js.map +0 -1
- package/dist/commands/slash/exit.d.ts +0 -25
- package/dist/commands/slash/exit.d.ts.map +0 -1
- package/dist/commands/slash/exit.js +0 -186
- package/dist/commands/slash/exit.js.map +0 -1
- package/dist/commands/slash/export.d.ts +0 -27
- package/dist/commands/slash/export.d.ts.map +0 -1
- package/dist/commands/slash/export.js +0 -318
- package/dist/commands/slash/export.js.map +0 -1
- package/dist/commands/slash/files.d.ts +0 -47
- package/dist/commands/slash/files.d.ts.map +0 -1
- package/dist/commands/slash/files.js +0 -521
- package/dist/commands/slash/files.js.map +0 -1
- package/dist/commands/slash/help.d.ts +0 -50
- package/dist/commands/slash/help.d.ts.map +0 -1
- package/dist/commands/slash/help.js +0 -282
- package/dist/commands/slash/help.js.map +0 -1
- package/dist/commands/slash/index-cmd.d.ts +0 -41
- package/dist/commands/slash/index-cmd.d.ts.map +0 -1
- package/dist/commands/slash/index-cmd.js +0 -349
- package/dist/commands/slash/index-cmd.js.map +0 -1
- package/dist/commands/slash/index.d.ts +0 -97
- package/dist/commands/slash/index.d.ts.map +0 -1
- package/dist/commands/slash/index.js +0 -251
- package/dist/commands/slash/index.js.map +0 -1
- package/dist/commands/slash/login.d.ts +0 -23
- package/dist/commands/slash/login.d.ts.map +0 -1
- package/dist/commands/slash/login.js +0 -175
- package/dist/commands/slash/login.js.map +0 -1
- package/dist/commands/slash/logout.d.ts +0 -23
- package/dist/commands/slash/logout.d.ts.map +0 -1
- package/dist/commands/slash/logout.js +0 -153
- package/dist/commands/slash/logout.js.map +0 -1
- package/dist/commands/slash/logs.d.ts +0 -29
- package/dist/commands/slash/logs.d.ts.map +0 -1
- package/dist/commands/slash/logs.js +0 -423
- package/dist/commands/slash/logs.js.map +0 -1
- package/dist/commands/slash/mcp.d.ts +0 -29
- package/dist/commands/slash/mcp.d.ts.map +0 -1
- package/dist/commands/slash/mcp.js +0 -1026
- package/dist/commands/slash/mcp.js.map +0 -1
- package/dist/commands/slash/model.d.ts +0 -60
- package/dist/commands/slash/model.d.ts.map +0 -1
- package/dist/commands/slash/model.js +0 -466
- package/dist/commands/slash/model.js.map +0 -1
- package/dist/commands/slash/personality.d.ts +0 -40
- package/dist/commands/slash/personality.d.ts.map +0 -1
- package/dist/commands/slash/personality.js +0 -272
- package/dist/commands/slash/personality.js.map +0 -1
- package/dist/commands/slash/purge.d.ts +0 -42
- package/dist/commands/slash/purge.d.ts.map +0 -1
- package/dist/commands/slash/purge.js +0 -233
- package/dist/commands/slash/purge.js.map +0 -1
- package/dist/commands/slash/reset.d.ts +0 -44
- package/dist/commands/slash/reset.d.ts.map +0 -1
- package/dist/commands/slash/reset.js +0 -326
- package/dist/commands/slash/reset.js.map +0 -1
- package/dist/commands/slash/skills.d.ts +0 -40
- package/dist/commands/slash/skills.d.ts.map +0 -1
- package/dist/commands/slash/skills.js +0 -207
- package/dist/commands/slash/skills.js.map +0 -1
- package/dist/commands/slash/tokens.d.ts +0 -34
- package/dist/commands/slash/tokens.d.ts.map +0 -1
- package/dist/commands/slash/tokens.js +0 -205
- package/dist/commands/slash/tokens.js.map +0 -1
- package/dist/commands/slash/unleash.d.ts +0 -50
- package/dist/commands/slash/unleash.d.ts.map +0 -1
- package/dist/commands/slash/unleash.js +0 -262
- package/dist/commands/slash/unleash.js.map +0 -1
- package/dist/commands/slash/update.d.ts +0 -34
- package/dist/commands/slash/update.d.ts.map +0 -1
- package/dist/commands/slash/update.js +0 -364
- package/dist/commands/slash/update.js.map +0 -1
- package/dist/commands/slash/wrap.d.ts +0 -18
- package/dist/commands/slash/wrap.d.ts.map +0 -1
- package/dist/commands/slash/wrap.js +0 -21
- package/dist/commands/slash/wrap.js.map +0 -1
- package/dist/commands/tokens.d.ts +0 -26
- package/dist/commands/tokens.d.ts.map +0 -1
- package/dist/commands/tokens.js +0 -245
- package/dist/commands/tokens.js.map +0 -1
- package/dist/constants/builtin-agents.d.ts +0 -27
- package/dist/constants/builtin-agents.d.ts.map +0 -1
- package/dist/constants/builtin-agents.js +0 -710
- package/dist/constants/builtin-agents.js.map +0 -1
- package/dist/constants/builtin-skills.d.ts +0 -32
- package/dist/constants/builtin-skills.d.ts.map +0 -1
- package/dist/constants/builtin-skills.js +0 -389
- package/dist/constants/builtin-skills.js.map +0 -1
- package/dist/constants/defaults.d.ts +0 -448
- package/dist/constants/defaults.d.ts.map +0 -1
- package/dist/constants/defaults.js +0 -829
- package/dist/constants/defaults.js.map +0 -1
- package/dist/constants/index.d.ts +0 -27
- package/dist/constants/index.d.ts.map +0 -1
- package/dist/constants/index.js +0 -85
- package/dist/constants/index.js.map +0 -1
- package/dist/constants/install-hints.d.ts +0 -7
- package/dist/constants/install-hints.d.ts.map +0 -1
- package/dist/constants/install-hints.js +0 -123
- package/dist/constants/install-hints.js.map +0 -1
- package/dist/constants/models.d.ts +0 -255
- package/dist/constants/models.d.ts.map +0 -1
- package/dist/constants/models.js +0 -596
- package/dist/constants/models.js.map +0 -1
- package/dist/constants/schedule.d.ts +0 -43
- package/dist/constants/schedule.d.ts.map +0 -1
- package/dist/constants/schedule.js +0 -110
- package/dist/constants/schedule.js.map +0 -1
- package/dist/constants/system-utilities.d.ts +0 -57
- package/dist/constants/system-utilities.d.ts.map +0 -1
- package/dist/constants/system-utilities.js +0 -421
- package/dist/constants/system-utilities.js.map +0 -1
- package/dist/constants/token-limits.d.ts +0 -102
- package/dist/constants/token-limits.d.ts.map +0 -1
- package/dist/constants/token-limits.js +0 -286
- package/dist/constants/token-limits.js.map +0 -1
- package/dist/core/autocomplete.d.ts +0 -132
- package/dist/core/autocomplete.d.ts.map +0 -1
- package/dist/core/autocomplete.js +0 -653
- package/dist/core/autocomplete.js.map +0 -1
- package/dist/core/command-parser.d.ts +0 -301
- package/dist/core/command-parser.d.ts.map +0 -1
- package/dist/core/command-parser.js +0 -526
- package/dist/core/command-parser.js.map +0 -1
- package/dist/core/context-builder.d.ts +0 -264
- package/dist/core/context-builder.d.ts.map +0 -1
- package/dist/core/context-builder.js +0 -1018
- package/dist/core/context-builder.js.map +0 -1
- package/dist/core/event-emitter.d.ts +0 -411
- package/dist/core/event-emitter.d.ts.map +0 -1
- package/dist/core/event-emitter.js +0 -138
- package/dist/core/event-emitter.js.map +0 -1
- package/dist/core/history-manager.d.ts +0 -62
- package/dist/core/history-manager.d.ts.map +0 -1
- package/dist/core/history-manager.js +0 -151
- package/dist/core/history-manager.js.map +0 -1
- package/dist/core/slash-command-handler.d.ts +0 -352
- package/dist/core/slash-command-handler.d.ts.map +0 -1
- package/dist/core/slash-command-handler.js +0 -563
- package/dist/core/slash-command-handler.js.map +0 -1
- package/dist/core/task-processor.d.ts +0 -179
- package/dist/core/task-processor.d.ts.map +0 -1
- package/dist/core/task-processor.js +0 -519
- package/dist/core/task-processor.js.map +0 -1
- package/dist/index.d.ts +0 -90
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/prompts/agent-prompt-generator.d.ts +0 -26
- package/dist/prompts/agent-prompt-generator.d.ts.map +0 -1
- package/dist/prompts/agent-prompt-generator.js +0 -244
- package/dist/prompts/agent-prompt-generator.js.map +0 -1
- package/dist/prompts/commit-message.d.ts +0 -35
- package/dist/prompts/commit-message.d.ts.map +0 -1
- package/dist/prompts/commit-message.js +0 -187
- package/dist/prompts/commit-message.js.map +0 -1
- package/dist/prompts/conversation.d.ts +0 -51
- package/dist/prompts/conversation.d.ts.map +0 -1
- package/dist/prompts/conversation.js +0 -115
- package/dist/prompts/conversation.js.map +0 -1
- package/dist/prompts/index.d.ts +0 -39
- package/dist/prompts/index.d.ts.map +0 -1
- package/dist/prompts/index.js +0 -74
- package/dist/prompts/index.js.map +0 -1
- package/dist/prompts/memory.d.ts +0 -6
- package/dist/prompts/memory.d.ts.map +0 -1
- package/dist/prompts/memory.js +0 -29
- package/dist/prompts/memory.js.map +0 -1
- package/dist/prompts/personality.d.ts +0 -77
- package/dist/prompts/personality.d.ts.map +0 -1
- package/dist/prompts/personality.js +0 -393
- package/dist/prompts/personality.js.map +0 -1
- package/dist/prompts/plan-generator.d.ts +0 -144
- package/dist/prompts/plan-generator.d.ts.map +0 -1
- package/dist/prompts/plan-generator.js +0 -553
- package/dist/prompts/plan-generator.js.map +0 -1
- package/dist/prompts/system.d.ts +0 -95
- package/dist/prompts/system.d.ts.map +0 -1
- package/dist/prompts/system.js +0 -461
- package/dist/prompts/system.js.map +0 -1
- package/dist/prompts/task-processor.d.ts +0 -94
- package/dist/prompts/task-processor.d.ts.map +0 -1
- package/dist/prompts/task-processor.js +0 -554
- package/dist/prompts/task-processor.js.map +0 -1
- package/dist/prompts/unguarded.d.ts +0 -78
- package/dist/prompts/unguarded.d.ts.map +0 -1
- package/dist/prompts/unguarded.js +0 -418
- package/dist/prompts/unguarded.js.map +0 -1
- package/dist/prompts/utils.d.ts +0 -73
- package/dist/prompts/utils.d.ts.map +0 -1
- package/dist/prompts/utils.js +0 -114
- package/dist/prompts/utils.js.map +0 -1
- package/dist/prompts/workflow.d.ts +0 -241
- package/dist/prompts/workflow.d.ts.map +0 -1
- package/dist/prompts/workflow.js +0 -608
- package/dist/prompts/workflow.js.map +0 -1
- package/dist/services/action-logger.d.ts +0 -383
- package/dist/services/action-logger.d.ts.map +0 -1
- package/dist/services/action-logger.js +0 -544
- package/dist/services/action-logger.js.map +0 -1
- package/dist/services/agent-budget-allocator.d.ts +0 -111
- package/dist/services/agent-budget-allocator.d.ts.map +0 -1
- package/dist/services/agent-budget-allocator.js +0 -278
- package/dist/services/agent-budget-allocator.js.map +0 -1
- package/dist/services/agent-manager.d.ts +0 -181
- package/dist/services/agent-manager.d.ts.map +0 -1
- package/dist/services/agent-manager.js +0 -749
- package/dist/services/agent-manager.js.map +0 -1
- package/dist/services/agent-spawner.d.ts +0 -138
- package/dist/services/agent-spawner.d.ts.map +0 -1
- package/dist/services/agent-spawner.js +0 -748
- package/dist/services/agent-spawner.js.map +0 -1
- package/dist/services/agent-state-service.d.ts +0 -145
- package/dist/services/agent-state-service.d.ts.map +0 -1
- package/dist/services/agent-state-service.js +0 -247
- package/dist/services/agent-state-service.js.map +0 -1
- package/dist/services/anthropic-client.d.ts +0 -357
- package/dist/services/anthropic-client.d.ts.map +0 -1
- package/dist/services/anthropic-client.js +0 -1451
- package/dist/services/anthropic-client.js.map +0 -1
- package/dist/services/approval-manager.d.ts +0 -385
- package/dist/services/approval-manager.d.ts.map +0 -1
- package/dist/services/approval-manager.js +0 -1044
- package/dist/services/approval-manager.js.map +0 -1
- package/dist/services/audit-logger.d.ts +0 -245
- package/dist/services/audit-logger.d.ts.map +0 -1
- package/dist/services/audit-logger.js +0 -324
- package/dist/services/audit-logger.js.map +0 -1
- package/dist/services/backup-manager.d.ts +0 -136
- package/dist/services/backup-manager.d.ts.map +0 -1
- package/dist/services/backup-manager.js +0 -260
- package/dist/services/backup-manager.js.map +0 -1
- package/dist/services/cache-service.d.ts +0 -247
- package/dist/services/cache-service.d.ts.map +0 -1
- package/dist/services/cache-service.js +0 -558
- package/dist/services/cache-service.js.map +0 -1
- package/dist/services/chat-archival-service.d.ts +0 -108
- package/dist/services/chat-archival-service.d.ts.map +0 -1
- package/dist/services/chat-archival-service.js +0 -465
- package/dist/services/chat-archival-service.js.map +0 -1
- package/dist/services/codebase-indexer.d.ts +0 -272
- package/dist/services/codebase-indexer.d.ts.map +0 -1
- package/dist/services/codebase-indexer.js +0 -863
- package/dist/services/codebase-indexer.js.map +0 -1
- package/dist/services/compass-auth-service.d.ts +0 -204
- package/dist/services/compass-auth-service.d.ts.map +0 -1
- package/dist/services/compass-auth-service.js +0 -391
- package/dist/services/compass-auth-service.js.map +0 -1
- package/dist/services/complexity-classifier.d.ts +0 -208
- package/dist/services/complexity-classifier.d.ts.map +0 -1
- package/dist/services/complexity-classifier.js +0 -1410
- package/dist/services/complexity-classifier.js.map +0 -1
- package/dist/services/config-manager.d.ts +0 -278
- package/dist/services/config-manager.d.ts.map +0 -1
- package/dist/services/config-manager.js +0 -651
- package/dist/services/config-manager.js.map +0 -1
- package/dist/services/consent-manager.d.ts +0 -239
- package/dist/services/consent-manager.d.ts.map +0 -1
- package/dist/services/consent-manager.js +0 -516
- package/dist/services/consent-manager.js.map +0 -1
- package/dist/services/conversation-compactor.d.ts +0 -223
- package/dist/services/conversation-compactor.d.ts.map +0 -1
- package/dist/services/conversation-compactor.js +0 -750
- package/dist/services/conversation-compactor.js.map +0 -1
- package/dist/services/cost-tracker.d.ts +0 -167
- package/dist/services/cost-tracker.d.ts.map +0 -1
- package/dist/services/cost-tracker.js +0 -199
- package/dist/services/cost-tracker.js.map +0 -1
- package/dist/services/credential-store.d.ts +0 -273
- package/dist/services/credential-store.d.ts.map +0 -1
- package/dist/services/credential-store.js +0 -877
- package/dist/services/credential-store.js.map +0 -1
- package/dist/services/custom-command-service.d.ts +0 -112
- package/dist/services/custom-command-service.d.ts.map +0 -1
- package/dist/services/custom-command-service.js +0 -464
- package/dist/services/custom-command-service.js.map +0 -1
- package/dist/services/default-statusline-renderer.d.ts +0 -60
- package/dist/services/default-statusline-renderer.d.ts.map +0 -1
- package/dist/services/default-statusline-renderer.js +0 -110
- package/dist/services/default-statusline-renderer.js.map +0 -1
- package/dist/services/enhanced-context-gatherer.d.ts +0 -116
- package/dist/services/enhanced-context-gatherer.d.ts.map +0 -1
- package/dist/services/enhanced-context-gatherer.js +0 -605
- package/dist/services/enhanced-context-gatherer.js.map +0 -1
- package/dist/services/file-hash-tracker.d.ts +0 -95
- package/dist/services/file-hash-tracker.d.ts.map +0 -1
- package/dist/services/file-hash-tracker.js +0 -199
- package/dist/services/file-hash-tracker.js.map +0 -1
- package/dist/services/file-service.d.ts +0 -274
- package/dist/services/file-service.d.ts.map +0 -1
- package/dist/services/file-service.js +0 -876
- package/dist/services/file-service.js.map +0 -1
- package/dist/services/git-service.d.ts +0 -536
- package/dist/services/git-service.d.ts.map +0 -1
- package/dist/services/git-service.js +0 -1215
- package/dist/services/git-service.js.map +0 -1
- package/dist/services/hook-service.d.ts +0 -148
- package/dist/services/hook-service.d.ts.map +0 -1
- package/dist/services/hook-service.js +0 -705
- package/dist/services/hook-service.js.map +0 -1
- package/dist/services/ide-state-service.d.ts +0 -114
- package/dist/services/ide-state-service.d.ts.map +0 -1
- package/dist/services/ide-state-service.js +0 -204
- package/dist/services/ide-state-service.js.map +0 -1
- package/dist/services/interactive-clarifier.d.ts +0 -90
- package/dist/services/interactive-clarifier.d.ts.map +0 -1
- package/dist/services/interactive-clarifier.js +0 -446
- package/dist/services/interactive-clarifier.js.map +0 -1
- package/dist/services/iteration-scoper.d.ts +0 -225
- package/dist/services/iteration-scoper.d.ts.map +0 -1
- package/dist/services/iteration-scoper.js +0 -387
- package/dist/services/iteration-scoper.js.map +0 -1
- package/dist/services/llm-plan-generator.d.ts +0 -44
- package/dist/services/llm-plan-generator.d.ts.map +0 -1
- package/dist/services/llm-plan-generator.js +0 -863
- package/dist/services/llm-plan-generator.js.map +0 -1
- package/dist/services/llm-system-prompt-generator.d.ts +0 -85
- package/dist/services/llm-system-prompt-generator.d.ts.map +0 -1
- package/dist/services/llm-system-prompt-generator.js +0 -257
- package/dist/services/llm-system-prompt-generator.js.map +0 -1
- package/dist/services/log-interpreter.d.ts +0 -190
- package/dist/services/log-interpreter.d.ts.map +0 -1
- package/dist/services/log-interpreter.js +0 -520
- package/dist/services/log-interpreter.js.map +0 -1
- package/dist/services/mcp-config-manager.d.ts +0 -141
- package/dist/services/mcp-config-manager.d.ts.map +0 -1
- package/dist/services/mcp-config-manager.js +0 -678
- package/dist/services/mcp-config-manager.js.map +0 -1
- package/dist/services/mcp-oauth-service.d.ts +0 -170
- package/dist/services/mcp-oauth-service.d.ts.map +0 -1
- package/dist/services/mcp-oauth-service.js +0 -892
- package/dist/services/mcp-oauth-service.js.map +0 -1
- package/dist/services/mcp-plugin-support.d.ts +0 -81
- package/dist/services/mcp-plugin-support.d.ts.map +0 -1
- package/dist/services/mcp-plugin-support.js +0 -305
- package/dist/services/mcp-plugin-support.js.map +0 -1
- package/dist/services/mcp-server-manager.d.ts +0 -134
- package/dist/services/mcp-server-manager.d.ts.map +0 -1
- package/dist/services/mcp-server-manager.js +0 -613
- package/dist/services/mcp-server-manager.js.map +0 -1
- package/dist/services/mcp-tool-integration.d.ts +0 -119
- package/dist/services/mcp-tool-integration.d.ts.map +0 -1
- package/dist/services/mcp-tool-integration.js +0 -381
- package/dist/services/mcp-tool-integration.js.map +0 -1
- package/dist/services/mcp-transport.d.ts +0 -105
- package/dist/services/mcp-transport.d.ts.map +0 -1
- package/dist/services/mcp-transport.js +0 -1316
- package/dist/services/mcp-transport.js.map +0 -1
- package/dist/services/memory-service.d.ts +0 -55
- package/dist/services/memory-service.d.ts.map +0 -1
- package/dist/services/memory-service.js +0 -251
- package/dist/services/memory-service.js.map +0 -1
- package/dist/services/model-availability.d.ts +0 -64
- package/dist/services/model-availability.d.ts.map +0 -1
- package/dist/services/model-availability.js +0 -114
- package/dist/services/model-availability.js.map +0 -1
- package/dist/services/plan-generator.d.ts +0 -98
- package/dist/services/plan-generator.d.ts.map +0 -1
- package/dist/services/plan-generator.js +0 -658
- package/dist/services/plan-generator.js.map +0 -1
- package/dist/services/plan-mode-fallback.d.ts +0 -80
- package/dist/services/plan-mode-fallback.d.ts.map +0 -1
- package/dist/services/plan-mode-fallback.js +0 -307
- package/dist/services/plan-mode-fallback.js.map +0 -1
- package/dist/services/plan-mode-handler.d.ts +0 -42
- package/dist/services/plan-mode-handler.d.ts.map +0 -1
- package/dist/services/plan-mode-handler.js +0 -388
- package/dist/services/plan-mode-handler.js.map +0 -1
- package/dist/services/plan-persistence.d.ts +0 -203
- package/dist/services/plan-persistence.d.ts.map +0 -1
- package/dist/services/plan-persistence.js +0 -538
- package/dist/services/plan-persistence.js.map +0 -1
- package/dist/services/prompt-preprocessor.d.ts +0 -73
- package/dist/services/prompt-preprocessor.d.ts.map +0 -1
- package/dist/services/prompt-preprocessor.js +0 -146
- package/dist/services/prompt-preprocessor.js.map +0 -1
- package/dist/services/rating-service.d.ts +0 -84
- package/dist/services/rating-service.d.ts.map +0 -1
- package/dist/services/rating-service.js +0 -171
- package/dist/services/rating-service.js.map +0 -1
- package/dist/services/rating-state-manager.d.ts +0 -131
- package/dist/services/rating-state-manager.d.ts.map +0 -1
- package/dist/services/rating-state-manager.js +0 -270
- package/dist/services/rating-state-manager.js.map +0 -1
- package/dist/services/sdk-runner.d.ts +0 -113
- package/dist/services/sdk-runner.d.ts.map +0 -1
- package/dist/services/sdk-runner.js +0 -1424
- package/dist/services/sdk-runner.js.map +0 -1
- package/dist/services/session-manager.d.ts +0 -528
- package/dist/services/session-manager.d.ts.map +0 -1
- package/dist/services/session-manager.js +0 -1184
- package/dist/services/session-manager.js.map +0 -1
- package/dist/services/shell-executor.d.ts +0 -337
- package/dist/services/shell-executor.d.ts.map +0 -1
- package/dist/services/shell-executor.js +0 -1201
- package/dist/services/shell-executor.js.map +0 -1
- package/dist/services/skill-service.d.ts +0 -149
- package/dist/services/skill-service.d.ts.map +0 -1
- package/dist/services/skill-service.js +0 -594
- package/dist/services/skill-service.js.map +0 -1
- package/dist/services/statusline-executor.d.ts +0 -102
- package/dist/services/statusline-executor.d.ts.map +0 -1
- package/dist/services/statusline-executor.js +0 -305
- package/dist/services/statusline-executor.js.map +0 -1
- package/dist/services/step-tracker.d.ts +0 -356
- package/dist/services/step-tracker.d.ts.map +0 -1
- package/dist/services/step-tracker.js +0 -634
- package/dist/services/step-tracker.js.map +0 -1
- package/dist/services/system-event-logger.d.ts +0 -473
- package/dist/services/system-event-logger.d.ts.map +0 -1
- package/dist/services/system-event-logger.js +0 -790
- package/dist/services/system-event-logger.js.map +0 -1
- package/dist/services/system-utility-detector.d.ts +0 -91
- package/dist/services/system-utility-detector.d.ts.map +0 -1
- package/dist/services/system-utility-detector.js +0 -238
- package/dist/services/system-utility-detector.js.map +0 -1
- package/dist/services/team-context-store.d.ts +0 -100
- package/dist/services/team-context-store.d.ts.map +0 -1
- package/dist/services/team-context-store.js +0 -513
- package/dist/services/team-context-store.js.map +0 -1
- package/dist/services/temp-file-service.d.ts +0 -164
- package/dist/services/temp-file-service.d.ts.map +0 -1
- package/dist/services/temp-file-service.js +0 -303
- package/dist/services/temp-file-service.js.map +0 -1
- package/dist/services/token-limit-enforcer.d.ts +0 -53
- package/dist/services/token-limit-enforcer.d.ts.map +0 -1
- package/dist/services/token-limit-enforcer.js +0 -90
- package/dist/services/token-limit-enforcer.js.map +0 -1
- package/dist/services/token-limit-store.d.ts +0 -105
- package/dist/services/token-limit-store.d.ts.map +0 -1
- package/dist/services/token-limit-store.js +0 -288
- package/dist/services/token-limit-store.js.map +0 -1
- package/dist/services/token-tracker.d.ts +0 -290
- package/dist/services/token-tracker.d.ts.map +0 -1
- package/dist/services/token-tracker.js +0 -751
- package/dist/services/token-tracker.js.map +0 -1
- package/dist/services/tool-registry.d.ts +0 -302
- package/dist/services/tool-registry.d.ts.map +0 -1
- package/dist/services/tool-registry.js +0 -606
- package/dist/services/tool-registry.js.map +0 -1
- package/dist/services/tools-logger.d.ts +0 -152
- package/dist/services/tools-logger.d.ts.map +0 -1
- package/dist/services/tools-logger.js +0 -222
- package/dist/services/tools-logger.js.map +0 -1
- package/dist/services/update-plan-handler.d.ts +0 -56
- package/dist/services/update-plan-handler.d.ts.map +0 -1
- package/dist/services/update-plan-handler.js +0 -372
- package/dist/services/update-plan-handler.js.map +0 -1
- package/dist/services/update-service.d.ts +0 -197
- package/dist/services/update-service.d.ts.map +0 -1
- package/dist/services/update-service.js +0 -749
- package/dist/services/update-service.js.map +0 -1
- package/dist/services/verifier.d.ts +0 -113
- package/dist/services/verifier.d.ts.map +0 -1
- package/dist/services/verifier.js +0 -541
- package/dist/services/verifier.js.map +0 -1
- package/dist/services/workflow-manager.d.ts +0 -277
- package/dist/services/workflow-manager.d.ts.map +0 -1
- package/dist/services/workflow-manager.js +0 -616
- package/dist/services/workflow-manager.js.map +0 -1
- package/dist/services/workflow-orchestrator.d.ts +0 -148
- package/dist/services/workflow-orchestrator.d.ts.map +0 -1
- package/dist/services/workflow-orchestrator.js +0 -617
- package/dist/services/workflow-orchestrator.js.map +0 -1
- package/dist/services/worktree-manager.d.ts +0 -36
- package/dist/services/worktree-manager.d.ts.map +0 -1
- package/dist/services/worktree-manager.js +0 -185
- package/dist/services/worktree-manager.js.map +0 -1
- package/dist/templates/ascii-art.d.ts +0 -136
- package/dist/templates/ascii-art.d.ts.map +0 -1
- package/dist/templates/ascii-art.js +0 -286
- package/dist/templates/ascii-art.js.map +0 -1
- package/dist/templates/help.d.ts +0 -186
- package/dist/templates/help.d.ts.map +0 -1
- package/dist/templates/help.js +0 -588
- package/dist/templates/help.js.map +0 -1
- package/dist/templates/prompts/workflow-prompts.d.ts +0 -9
- package/dist/templates/prompts/workflow-prompts.d.ts.map +0 -1
- package/dist/templates/prompts/workflow-prompts.js +0 -9
- package/dist/templates/prompts/workflow-prompts.js.map +0 -1
- package/dist/tools/agent-tools.d.ts +0 -9
- package/dist/tools/agent-tools.d.ts.map +0 -1
- package/dist/tools/agent-tools.js +0 -349
- package/dist/tools/agent-tools.js.map +0 -1
- package/dist/tools/edit-replacers.d.ts +0 -90
- package/dist/tools/edit-replacers.d.ts.map +0 -1
- package/dist/tools/edit-replacers.js +0 -553
- package/dist/tools/edit-replacers.js.map +0 -1
- package/dist/tools/file-tools.d.ts +0 -13
- package/dist/tools/file-tools.d.ts.map +0 -1
- package/dist/tools/file-tools.js +0 -954
- package/dist/tools/file-tools.js.map +0 -1
- package/dist/tools/git-tools.d.ts +0 -9
- package/dist/tools/git-tools.d.ts.map +0 -1
- package/dist/tools/git-tools.js +0 -261
- package/dist/tools/git-tools.js.map +0 -1
- package/dist/tools/index.d.ts +0 -13
- package/dist/tools/index.d.ts.map +0 -1
- package/dist/tools/index.js +0 -70
- package/dist/tools/index.js.map +0 -1
- package/dist/tools/network-tools.d.ts +0 -8
- package/dist/tools/network-tools.d.ts.map +0 -1
- package/dist/tools/network-tools.js +0 -261
- package/dist/tools/network-tools.js.map +0 -1
- package/dist/tools/openai-tools.d.ts +0 -16
- package/dist/tools/openai-tools.d.ts.map +0 -1
- package/dist/tools/openai-tools.js +0 -385
- package/dist/tools/openai-tools.js.map +0 -1
- package/dist/tools/plan-tools.d.ts +0 -9
- package/dist/tools/plan-tools.d.ts.map +0 -1
- package/dist/tools/plan-tools.js +0 -223
- package/dist/tools/plan-tools.js.map +0 -1
- package/dist/tools/schedule-tools.d.ts +0 -9
- package/dist/tools/schedule-tools.d.ts.map +0 -1
- package/dist/tools/schedule-tools.js +0 -405
- package/dist/tools/schedule-tools.js.map +0 -1
- package/dist/tools/search-tools.d.ts +0 -8
- package/dist/tools/search-tools.d.ts.map +0 -1
- package/dist/tools/search-tools.js +0 -357
- package/dist/tools/search-tools.js.map +0 -1
- package/dist/tools/shared-utils.d.ts +0 -91
- package/dist/tools/shared-utils.d.ts.map +0 -1
- package/dist/tools/shared-utils.js +0 -385
- package/dist/tools/shared-utils.js.map +0 -1
- package/dist/tools/shell-tools.d.ts +0 -9
- package/dist/tools/shell-tools.d.ts.map +0 -1
- package/dist/tools/shell-tools.js +0 -409
- package/dist/tools/shell-tools.js.map +0 -1
- package/dist/tools/skill-tools.d.ts +0 -13
- package/dist/tools/skill-tools.d.ts.map +0 -1
- package/dist/tools/skill-tools.js +0 -244
- package/dist/tools/skill-tools.js.map +0 -1
- package/dist/tools/swarm-tools.d.ts +0 -9
- package/dist/tools/swarm-tools.d.ts.map +0 -1
- package/dist/tools/swarm-tools.js +0 -422
- package/dist/tools/swarm-tools.js.map +0 -1
- package/dist/tools/user-tools.d.ts +0 -13
- package/dist/tools/user-tools.d.ts.map +0 -1
- package/dist/tools/user-tools.js +0 -232
- package/dist/tools/user-tools.js.map +0 -1
- package/dist/types/agent-process.d.ts +0 -244
- package/dist/types/agent-process.d.ts.map +0 -1
- package/dist/types/agent-process.js +0 -93
- package/dist/types/agent-process.js.map +0 -1
- package/dist/types/agent.d.ts +0 -358
- package/dist/types/agent.d.ts.map +0 -1
- package/dist/types/agent.js +0 -171
- package/dist/types/agent.js.map +0 -1
- package/dist/types/anthropic.d.ts +0 -438
- package/dist/types/anthropic.d.ts.map +0 -1
- package/dist/types/anthropic.js +0 -9
- package/dist/types/anthropic.js.map +0 -1
- package/dist/types/approval.d.ts +0 -332
- package/dist/types/approval.d.ts.map +0 -1
- package/dist/types/approval.js +0 -44
- package/dist/types/approval.js.map +0 -1
- package/dist/types/autocomplete.d.ts +0 -57
- package/dist/types/autocomplete.d.ts.map +0 -1
- package/dist/types/autocomplete.js +0 -7
- package/dist/types/autocomplete.js.map +0 -1
- package/dist/types/chat-archive.d.ts +0 -161
- package/dist/types/chat-archive.d.ts.map +0 -1
- package/dist/types/chat-archive.js +0 -36
- package/dist/types/chat-archive.js.map +0 -1
- package/dist/types/config.d.ts +0 -268
- package/dist/types/config.d.ts.map +0 -1
- package/dist/types/config.js +0 -188
- package/dist/types/config.js.map +0 -1
- package/dist/types/consent.d.ts +0 -191
- package/dist/types/consent.d.ts.map +0 -1
- package/dist/types/consent.js +0 -119
- package/dist/types/consent.js.map +0 -1
- package/dist/types/custom-command.d.ts +0 -139
- package/dist/types/custom-command.d.ts.map +0 -1
- package/dist/types/custom-command.js +0 -7
- package/dist/types/custom-command.js.map +0 -1
- package/dist/types/git.d.ts +0 -20
- package/dist/types/git.d.ts.map +0 -1
- package/dist/types/git.js +0 -2
- package/dist/types/git.js.map +0 -1
- package/dist/types/hook.d.ts +0 -342
- package/dist/types/hook.d.ts.map +0 -1
- package/dist/types/hook.js +0 -84
- package/dist/types/hook.js.map +0 -1
- package/dist/types/index.d.ts +0 -86
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -71
- package/dist/types/index.js.map +0 -1
- package/dist/types/mcp.d.ts +0 -456
- package/dist/types/mcp.d.ts.map +0 -1
- package/dist/types/mcp.js +0 -94
- package/dist/types/mcp.js.map +0 -1
- package/dist/types/rating.d.ts +0 -110
- package/dist/types/rating.d.ts.map +0 -1
- package/dist/types/rating.js +0 -53
- package/dist/types/rating.js.map +0 -1
- package/dist/types/schedule.d.ts +0 -91
- package/dist/types/schedule.d.ts.map +0 -1
- package/dist/types/schedule.js +0 -8
- package/dist/types/schedule.js.map +0 -1
- package/dist/types/session.d.ts +0 -361
- package/dist/types/session.d.ts.map +0 -1
- package/dist/types/session.js +0 -9
- package/dist/types/session.js.map +0 -1
- package/dist/types/skill.d.ts +0 -258
- package/dist/types/skill.d.ts.map +0 -1
- package/dist/types/skill.js +0 -79
- package/dist/types/skill.js.map +0 -1
- package/dist/types/statusline.d.ts +0 -212
- package/dist/types/statusline.d.ts.map +0 -1
- package/dist/types/statusline.js +0 -8
- package/dist/types/statusline.js.map +0 -1
- package/dist/types/stream.d.ts +0 -61
- package/dist/types/stream.d.ts.map +0 -1
- package/dist/types/stream.js +0 -17
- package/dist/types/stream.js.map +0 -1
- package/dist/types/swarm.d.ts +0 -132
- package/dist/types/swarm.d.ts.map +0 -1
- package/dist/types/swarm.js +0 -21
- package/dist/types/swarm.js.map +0 -1
- package/dist/types/token-limits.d.ts +0 -107
- package/dist/types/token-limits.d.ts.map +0 -1
- package/dist/types/token-limits.js +0 -57
- package/dist/types/token-limits.js.map +0 -1
- package/dist/types/token.d.ts +0 -329
- package/dist/types/token.d.ts.map +0 -1
- package/dist/types/token.js +0 -9
- package/dist/types/token.js.map +0 -1
- package/dist/types/update.d.ts +0 -189
- package/dist/types/update.d.ts.map +0 -1
- package/dist/types/update.js +0 -55
- package/dist/types/update.js.map +0 -1
- package/dist/types/workflow.d.ts +0 -396
- package/dist/types/workflow.d.ts.map +0 -1
- package/dist/types/workflow.js +0 -46
- package/dist/types/workflow.js.map +0 -1
- package/dist/ui/App.d.ts +0 -62
- package/dist/ui/App.d.ts.map +0 -1
- package/dist/ui/App.js +0 -511
- package/dist/ui/App.js.map +0 -1
- package/dist/ui/InteractiveSession.d.ts +0 -34
- package/dist/ui/InteractiveSession.d.ts.map +0 -1
- package/dist/ui/InteractiveSession.js +0 -3611
- package/dist/ui/InteractiveSession.js.map +0 -1
- package/dist/ui/MCPApprovalPrompt.d.ts +0 -27
- package/dist/ui/MCPApprovalPrompt.d.ts.map +0 -1
- package/dist/ui/MCPApprovalPrompt.js +0 -51
- package/dist/ui/MCPApprovalPrompt.js.map +0 -1
- package/dist/ui/SetupWizard.d.ts +0 -26
- package/dist/ui/SetupWizard.d.ts.map +0 -1
- package/dist/ui/SetupWizard.js +0 -396
- package/dist/ui/SetupWizard.js.map +0 -1
- package/dist/ui/components/AgentCreationWizard.d.ts +0 -36
- package/dist/ui/components/AgentCreationWizard.d.ts.map +0 -1
- package/dist/ui/components/AgentCreationWizard.js +0 -619
- package/dist/ui/components/AgentCreationWizard.js.map +0 -1
- package/dist/ui/components/AgentManager.d.ts +0 -41
- package/dist/ui/components/AgentManager.d.ts.map +0 -1
- package/dist/ui/components/AgentManager.js +0 -343
- package/dist/ui/components/AgentManager.js.map +0 -1
- package/dist/ui/components/ApprovalDialog.d.ts +0 -18
- package/dist/ui/components/ApprovalDialog.d.ts.map +0 -1
- package/dist/ui/components/ApprovalDialog.js +0 -439
- package/dist/ui/components/ApprovalDialog.js.map +0 -1
- package/dist/ui/components/AsciiArt.d.ts +0 -54
- package/dist/ui/components/AsciiArt.d.ts.map +0 -1
- package/dist/ui/components/AsciiArt.js +0 -89
- package/dist/ui/components/AsciiArt.js.map +0 -1
- package/dist/ui/components/ClarificationWizard.d.ts +0 -36
- package/dist/ui/components/ClarificationWizard.d.ts.map +0 -1
- package/dist/ui/components/ClarificationWizard.js +0 -407
- package/dist/ui/components/ClarificationWizard.js.map +0 -1
- package/dist/ui/components/CompassSpinner.d.ts +0 -15
- package/dist/ui/components/CompassSpinner.d.ts.map +0 -1
- package/dist/ui/components/CompassSpinner.js +0 -50
- package/dist/ui/components/CompassSpinner.js.map +0 -1
- package/dist/ui/components/ConfirmationSelector.d.ts +0 -45
- package/dist/ui/components/ConfirmationSelector.d.ts.map +0 -1
- package/dist/ui/components/ConfirmationSelector.js +0 -106
- package/dist/ui/components/ConfirmationSelector.js.map +0 -1
- package/dist/ui/components/ContextUsage.d.ts +0 -76
- package/dist/ui/components/ContextUsage.d.ts.map +0 -1
- package/dist/ui/components/ContextUsage.js +0 -188
- package/dist/ui/components/ContextUsage.js.map +0 -1
- package/dist/ui/components/DiffPreview.d.ts +0 -13
- package/dist/ui/components/DiffPreview.d.ts.map +0 -1
- package/dist/ui/components/DiffPreview.js +0 -30
- package/dist/ui/components/DiffPreview.js.map +0 -1
- package/dist/ui/components/ExecutionModeSelector.d.ts +0 -45
- package/dist/ui/components/ExecutionModeSelector.d.ts.map +0 -1
- package/dist/ui/components/ExecutionModeSelector.js +0 -120
- package/dist/ui/components/ExecutionModeSelector.js.map +0 -1
- package/dist/ui/components/FileTree.d.ts +0 -47
- package/dist/ui/components/FileTree.d.ts.map +0 -1
- package/dist/ui/components/FileTree.js +0 -258
- package/dist/ui/components/FileTree.js.map +0 -1
- package/dist/ui/components/HelpMenu.d.ts +0 -49
- package/dist/ui/components/HelpMenu.d.ts.map +0 -1
- package/dist/ui/components/HelpMenu.js +0 -91
- package/dist/ui/components/HelpMenu.js.map +0 -1
- package/dist/ui/components/InterleavedStream.d.ts +0 -42
- package/dist/ui/components/InterleavedStream.d.ts.map +0 -1
- package/dist/ui/components/InterleavedStream.js +0 -1500
- package/dist/ui/components/InterleavedStream.js.map +0 -1
- package/dist/ui/components/ModelSelector.d.ts +0 -81
- package/dist/ui/components/ModelSelector.d.ts.map +0 -1
- package/dist/ui/components/ModelSelector.js +0 -305
- package/dist/ui/components/ModelSelector.js.map +0 -1
- package/dist/ui/components/PlanApprovalDialog.d.ts +0 -21
- package/dist/ui/components/PlanApprovalDialog.d.ts.map +0 -1
- package/dist/ui/components/PlanApprovalDialog.js +0 -189
- package/dist/ui/components/PlanApprovalDialog.js.map +0 -1
- package/dist/ui/components/PlanExecutionTracker.d.ts +0 -53
- package/dist/ui/components/PlanExecutionTracker.d.ts.map +0 -1
- package/dist/ui/components/PlanExecutionTracker.js +0 -113
- package/dist/ui/components/PlanExecutionTracker.js.map +0 -1
- package/dist/ui/components/ProgressIndicator.d.ts +0 -151
- package/dist/ui/components/ProgressIndicator.d.ts.map +0 -1
- package/dist/ui/components/ProgressIndicator.js +0 -171
- package/dist/ui/components/ProgressIndicator.js.map +0 -1
- package/dist/ui/components/Prompt.d.ts +0 -47
- package/dist/ui/components/Prompt.d.ts.map +0 -1
- package/dist/ui/components/Prompt.js +0 -632
- package/dist/ui/components/Prompt.js.map +0 -1
- package/dist/ui/components/RatingPanel.d.ts +0 -45
- package/dist/ui/components/RatingPanel.d.ts.map +0 -1
- package/dist/ui/components/RatingPanel.js +0 -119
- package/dist/ui/components/RatingPanel.js.map +0 -1
- package/dist/ui/components/StatusLine.d.ts +0 -43
- package/dist/ui/components/StatusLine.d.ts.map +0 -1
- package/dist/ui/components/StatusLine.js +0 -44
- package/dist/ui/components/StatusLine.js.map +0 -1
- package/dist/ui/components/StreamingResponse.d.ts +0 -45
- package/dist/ui/components/StreamingResponse.d.ts.map +0 -1
- package/dist/ui/components/StreamingResponse.js +0 -56
- package/dist/ui/components/StreamingResponse.js.map +0 -1
- package/dist/ui/components/TokenUsage.d.ts +0 -89
- package/dist/ui/components/TokenUsage.d.ts.map +0 -1
- package/dist/ui/components/TokenUsage.js +0 -99
- package/dist/ui/components/TokenUsage.js.map +0 -1
- package/dist/ui/components/ToolSummary.d.ts +0 -77
- package/dist/ui/components/ToolSummary.d.ts.map +0 -1
- package/dist/ui/components/ToolSummary.js +0 -162
- package/dist/ui/components/ToolSummary.js.map +0 -1
- package/dist/ui/components/UpdateNotification.d.ts +0 -65
- package/dist/ui/components/UpdateNotification.d.ts.map +0 -1
- package/dist/ui/components/UpdateNotification.js +0 -166
- package/dist/ui/components/UpdateNotification.js.map +0 -1
- package/dist/ui/diff-renderer.d.ts +0 -18
- package/dist/ui/diff-renderer.d.ts.map +0 -1
- package/dist/ui/diff-renderer.js +0 -206
- package/dist/ui/diff-renderer.js.map +0 -1
- package/dist/ui/themes/markdown-theme.d.ts +0 -48
- package/dist/ui/themes/markdown-theme.d.ts.map +0 -1
- package/dist/ui/themes/markdown-theme.js +0 -79
- package/dist/ui/themes/markdown-theme.js.map +0 -1
- package/dist/ui/themes/ui-theme.d.ts +0 -301
- package/dist/ui/themes/ui-theme.d.ts.map +0 -1
- package/dist/ui/themes/ui-theme.js +0 -204
- package/dist/ui/themes/ui-theme.js.map +0 -1
- package/dist/utils/attachment-handler.d.ts +0 -129
- package/dist/utils/attachment-handler.d.ts.map +0 -1
- package/dist/utils/attachment-handler.js +0 -280
- package/dist/utils/attachment-handler.js.map +0 -1
- package/dist/utils/backup-cleanup.d.ts +0 -28
- package/dist/utils/backup-cleanup.d.ts.map +0 -1
- package/dist/utils/backup-cleanup.js +0 -99
- package/dist/utils/backup-cleanup.js.map +0 -1
- package/dist/utils/clipboard-handler.d.ts +0 -82
- package/dist/utils/clipboard-handler.d.ts.map +0 -1
- package/dist/utils/clipboard-handler.js +0 -311
- package/dist/utils/clipboard-handler.js.map +0 -1
- package/dist/utils/cloud-detection.d.ts +0 -14
- package/dist/utils/cloud-detection.d.ts.map +0 -1
- package/dist/utils/cloud-detection.js +0 -92
- package/dist/utils/cloud-detection.js.map +0 -1
- package/dist/utils/command-parser.d.ts +0 -56
- package/dist/utils/command-parser.d.ts.map +0 -1
- package/dist/utils/command-parser.js +0 -206
- package/dist/utils/command-parser.js.map +0 -1
- package/dist/utils/console-capture.d.ts +0 -30
- package/dist/utils/console-capture.d.ts.map +0 -1
- package/dist/utils/console-capture.js +0 -88
- package/dist/utils/console-capture.js.map +0 -1
- package/dist/utils/cron-parser.d.ts +0 -52
- package/dist/utils/cron-parser.d.ts.map +0 -1
- package/dist/utils/cron-parser.js +0 -455
- package/dist/utils/cron-parser.js.map +0 -1
- package/dist/utils/crypto.d.ts +0 -351
- package/dist/utils/crypto.d.ts.map +0 -1
- package/dist/utils/crypto.js +0 -615
- package/dist/utils/crypto.js.map +0 -1
- package/dist/utils/diff.d.ts +0 -311
- package/dist/utils/diff.d.ts.map +0 -1
- package/dist/utils/diff.js +0 -566
- package/dist/utils/diff.js.map +0 -1
- package/dist/utils/editor.d.ts +0 -12
- package/dist/utils/editor.d.ts.map +0 -1
- package/dist/utils/editor.js +0 -30
- package/dist/utils/editor.js.map +0 -1
- package/dist/utils/file-system.d.ts +0 -512
- package/dist/utils/file-system.d.ts.map +0 -1
- package/dist/utils/file-system.js +0 -798
- package/dist/utils/file-system.js.map +0 -1
- package/dist/utils/format.d.ts +0 -318
- package/dist/utils/format.d.ts.map +0 -1
- package/dist/utils/format.js +0 -587
- package/dist/utils/format.js.map +0 -1
- package/dist/utils/ignore-patterns.d.ts +0 -93
- package/dist/utils/ignore-patterns.d.ts.map +0 -1
- package/dist/utils/ignore-patterns.js +0 -710
- package/dist/utils/ignore-patterns.js.map +0 -1
- package/dist/utils/log-cleanup.d.ts +0 -16
- package/dist/utils/log-cleanup.d.ts.map +0 -1
- package/dist/utils/log-cleanup.js +0 -51
- package/dist/utils/log-cleanup.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -305
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -447
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/path.d.ts +0 -406
- package/dist/utils/path.d.ts.map +0 -1
- package/dist/utils/path.js +0 -549
- package/dist/utils/path.js.map +0 -1
- package/dist/utils/schedule-file.d.ts +0 -63
- package/dist/utils/schedule-file.d.ts.map +0 -1
- package/dist/utils/schedule-file.js +0 -244
- package/dist/utils/schedule-file.js.map +0 -1
- package/dist/utils/task-id.d.ts +0 -29
- package/dist/utils/task-id.d.ts.map +0 -1
- package/dist/utils/task-id.js +0 -53
- package/dist/utils/task-id.js.map +0 -1
- package/dist/utils/temp-cleanup.d.ts +0 -46
- package/dist/utils/temp-cleanup.d.ts.map +0 -1
- package/dist/utils/temp-cleanup.js +0 -95
- package/dist/utils/temp-cleanup.js.map +0 -1
- package/dist/utils/terminal-output.d.ts +0 -34
- package/dist/utils/terminal-output.d.ts.map +0 -1
- package/dist/utils/terminal-output.js +0 -40
- package/dist/utils/terminal-output.js.map +0 -1
- package/dist/utils/token-counter.d.ts +0 -224
- package/dist/utils/token-counter.d.ts.map +0 -1
- package/dist/utils/token-counter.js +0 -332
- package/dist/utils/token-counter.js.map +0 -1
- package/dist/utils/tool-mapper.d.ts +0 -70
- package/dist/utils/tool-mapper.d.ts.map +0 -1
- package/dist/utils/tool-mapper.js +0 -234
- package/dist/utils/tool-mapper.js.map +0 -1
|
@@ -1,1316 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MCP Transport Services.
|
|
3
|
-
*
|
|
4
|
-
* This module provides transport layer implementations for connecting to MCP servers
|
|
5
|
-
* using different protocols: HTTP, SSE (Server-Sent Events), and stdio (local processes).
|
|
6
|
-
*/
|
|
7
|
-
import { spawn } from 'child_process';
|
|
8
|
-
import { logger } from '../utils/logger.js';
|
|
9
|
-
import { getMCPOAuthService } from './mcp-oauth-service.js';
|
|
10
|
-
import { DEFAULT_MCP_TIMEOUT, isMCPHttpConfig, isMCPSseConfig, isMCPStdioConfig, normalizeServerConfig, } from '../types/mcp.js';
|
|
11
|
-
/**
|
|
12
|
-
* Error thrown when MCP server requires authentication (HTTP 401).
|
|
13
|
-
*/
|
|
14
|
-
export class AuthenticationRequiredError extends Error {
|
|
15
|
-
serverName;
|
|
16
|
-
serverUrl;
|
|
17
|
-
constructor(serverName, serverUrl) {
|
|
18
|
-
super(`Authentication required for MCP server '${serverName}'`);
|
|
19
|
-
this.name = 'AuthenticationRequiredError';
|
|
20
|
-
this.serverName = serverName;
|
|
21
|
-
this.serverUrl = serverUrl;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Creates a simple HTTP-based MCP client.
|
|
26
|
-
*/
|
|
27
|
-
class SimpleMCPClient {
|
|
28
|
-
url;
|
|
29
|
-
headers;
|
|
30
|
-
connected = false;
|
|
31
|
-
capabilities = {};
|
|
32
|
-
requestTimeout;
|
|
33
|
-
serverName;
|
|
34
|
-
constructor(url, headers = {}, timeout = 30000, serverName = 'unknown') {
|
|
35
|
-
this.url = url;
|
|
36
|
-
this.serverName = serverName;
|
|
37
|
-
this.headers = {
|
|
38
|
-
'Content-Type': 'application/json',
|
|
39
|
-
'Accept': 'application/json, text/event-stream',
|
|
40
|
-
...headers,
|
|
41
|
-
};
|
|
42
|
-
this.requestTimeout = timeout;
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Parses a JSON-RPC response from either a plain JSON body or an SSE stream.
|
|
46
|
-
* MCP Streamable HTTP servers may respond with text/event-stream containing
|
|
47
|
-
* SSE-formatted JSON-RPC messages.
|
|
48
|
-
*/
|
|
49
|
-
async parseResponse(response) {
|
|
50
|
-
const contentType = response.headers.get('content-type') || '';
|
|
51
|
-
if (contentType.includes('text/event-stream')) {
|
|
52
|
-
const text = await response.text();
|
|
53
|
-
// Parse SSE: find "data:" lines and extract JSON from the last message event
|
|
54
|
-
const lines = text.split('\n');
|
|
55
|
-
let lastData = '';
|
|
56
|
-
for (const line of lines) {
|
|
57
|
-
if (line.startsWith('data:')) {
|
|
58
|
-
const data = line.slice(5).trim();
|
|
59
|
-
if (data) {
|
|
60
|
-
lastData = data;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
if (!lastData) {
|
|
65
|
-
throw new Error('No data found in SSE response');
|
|
66
|
-
}
|
|
67
|
-
return JSON.parse(lastData);
|
|
68
|
-
}
|
|
69
|
-
return (await response.json());
|
|
70
|
-
}
|
|
71
|
-
async connect() {
|
|
72
|
-
// Attempt to connect and get server info
|
|
73
|
-
try {
|
|
74
|
-
const abortController = new AbortController();
|
|
75
|
-
const timeoutId = setTimeout(() => abortController.abort(), this.requestTimeout);
|
|
76
|
-
const response = await fetch(this.url, {
|
|
77
|
-
method: 'POST',
|
|
78
|
-
headers: this.headers,
|
|
79
|
-
body: JSON.stringify({
|
|
80
|
-
jsonrpc: '2.0',
|
|
81
|
-
id: 1,
|
|
82
|
-
method: 'initialize',
|
|
83
|
-
params: {
|
|
84
|
-
protocolVersion: '2024-11-05',
|
|
85
|
-
capabilities: {},
|
|
86
|
-
clientInfo: { name: 'compass-cli', version: '1.0.0' },
|
|
87
|
-
},
|
|
88
|
-
}),
|
|
89
|
-
signal: abortController.signal,
|
|
90
|
-
});
|
|
91
|
-
clearTimeout(timeoutId);
|
|
92
|
-
if (response.ok) {
|
|
93
|
-
const result = await this.parseResponse(response);
|
|
94
|
-
if (result.result?.capabilities) {
|
|
95
|
-
this.capabilities = {
|
|
96
|
-
tools: !!result.result.capabilities.tools,
|
|
97
|
-
resources: !!result.result.capabilities.resources,
|
|
98
|
-
prompts: !!result.result.capabilities.prompts,
|
|
99
|
-
logging: !!result.result.capabilities.logging,
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
this.connected = true;
|
|
103
|
-
}
|
|
104
|
-
else if (response.status === 401) {
|
|
105
|
-
// Authentication required - log response details for debugging
|
|
106
|
-
const responseText = await response.text().catch(() => '');
|
|
107
|
-
const wwwAuth = response.headers.get('WWW-Authenticate') || '';
|
|
108
|
-
logger.debug(`401 response from ${this.serverName}: body=${responseText.slice(0, 200)}, WWW-Authenticate=${wwwAuth}`);
|
|
109
|
-
throw new AuthenticationRequiredError(this.serverName, this.url);
|
|
110
|
-
}
|
|
111
|
-
else {
|
|
112
|
-
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
catch (error) {
|
|
116
|
-
// Rethrow AuthenticationRequiredError as-is for OAuth flow handling
|
|
117
|
-
if (error instanceof AuthenticationRequiredError) {
|
|
118
|
-
throw error;
|
|
119
|
-
}
|
|
120
|
-
if (error.name === 'AbortError') {
|
|
121
|
-
throw new Error('Connection timeout');
|
|
122
|
-
}
|
|
123
|
-
const msg = error instanceof Error ? error.message : String(error);
|
|
124
|
-
throw new Error(`Failed to connect: ${msg}`);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
async close() {
|
|
128
|
-
this.connected = false;
|
|
129
|
-
}
|
|
130
|
-
async listTools() {
|
|
131
|
-
if (!this.connected) {
|
|
132
|
-
return { tools: [] };
|
|
133
|
-
}
|
|
134
|
-
try {
|
|
135
|
-
const abortController = new AbortController();
|
|
136
|
-
const timeoutId = setTimeout(() => abortController.abort(), this.requestTimeout);
|
|
137
|
-
const response = await fetch(this.url, {
|
|
138
|
-
method: 'POST',
|
|
139
|
-
headers: this.headers,
|
|
140
|
-
body: JSON.stringify({
|
|
141
|
-
jsonrpc: '2.0',
|
|
142
|
-
id: 2,
|
|
143
|
-
method: 'tools/list',
|
|
144
|
-
params: {},
|
|
145
|
-
}),
|
|
146
|
-
signal: abortController.signal,
|
|
147
|
-
});
|
|
148
|
-
clearTimeout(timeoutId);
|
|
149
|
-
if (response.ok) {
|
|
150
|
-
const result = await this.parseResponse(response);
|
|
151
|
-
return { tools: result.result?.tools || [] };
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
catch (error) {
|
|
155
|
-
logger.warn('Failed to list tools:', error);
|
|
156
|
-
}
|
|
157
|
-
return { tools: [] };
|
|
158
|
-
}
|
|
159
|
-
async listResources() {
|
|
160
|
-
if (!this.connected) {
|
|
161
|
-
return { resources: [] };
|
|
162
|
-
}
|
|
163
|
-
try {
|
|
164
|
-
const abortController = new AbortController();
|
|
165
|
-
const timeoutId = setTimeout(() => abortController.abort(), this.requestTimeout);
|
|
166
|
-
const response = await fetch(this.url, {
|
|
167
|
-
method: 'POST',
|
|
168
|
-
headers: this.headers,
|
|
169
|
-
body: JSON.stringify({
|
|
170
|
-
jsonrpc: '2.0',
|
|
171
|
-
id: 3,
|
|
172
|
-
method: 'resources/list',
|
|
173
|
-
params: {},
|
|
174
|
-
}),
|
|
175
|
-
signal: abortController.signal,
|
|
176
|
-
});
|
|
177
|
-
clearTimeout(timeoutId);
|
|
178
|
-
if (response.ok) {
|
|
179
|
-
const result = await this.parseResponse(response);
|
|
180
|
-
return { resources: result.result?.resources || [] };
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
catch (error) {
|
|
184
|
-
logger.warn('Failed to list resources:', error);
|
|
185
|
-
}
|
|
186
|
-
return { resources: [] };
|
|
187
|
-
}
|
|
188
|
-
async listPrompts() {
|
|
189
|
-
if (!this.connected) {
|
|
190
|
-
return { prompts: [] };
|
|
191
|
-
}
|
|
192
|
-
try {
|
|
193
|
-
const abortController = new AbortController();
|
|
194
|
-
const timeoutId = setTimeout(() => abortController.abort(), this.requestTimeout);
|
|
195
|
-
const response = await fetch(this.url, {
|
|
196
|
-
method: 'POST',
|
|
197
|
-
headers: this.headers,
|
|
198
|
-
body: JSON.stringify({
|
|
199
|
-
jsonrpc: '2.0',
|
|
200
|
-
id: 4,
|
|
201
|
-
method: 'prompts/list',
|
|
202
|
-
params: {},
|
|
203
|
-
}),
|
|
204
|
-
signal: abortController.signal,
|
|
205
|
-
});
|
|
206
|
-
clearTimeout(timeoutId);
|
|
207
|
-
if (response.ok) {
|
|
208
|
-
const result = await this.parseResponse(response);
|
|
209
|
-
return { prompts: result.result?.prompts || [] };
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
catch (error) {
|
|
213
|
-
logger.warn('Failed to list prompts:', error);
|
|
214
|
-
}
|
|
215
|
-
return { prompts: [] };
|
|
216
|
-
}
|
|
217
|
-
async callTool(params) {
|
|
218
|
-
if (!this.connected) {
|
|
219
|
-
return { success: false, error: 'Not connected' };
|
|
220
|
-
}
|
|
221
|
-
try {
|
|
222
|
-
const abortController = new AbortController();
|
|
223
|
-
const timeoutId = setTimeout(() => abortController.abort(), this.requestTimeout);
|
|
224
|
-
const response = await fetch(this.url, {
|
|
225
|
-
method: 'POST',
|
|
226
|
-
headers: this.headers,
|
|
227
|
-
body: JSON.stringify({
|
|
228
|
-
jsonrpc: '2.0',
|
|
229
|
-
id: 5,
|
|
230
|
-
method: 'tools/call',
|
|
231
|
-
params: {
|
|
232
|
-
name: params.name,
|
|
233
|
-
arguments: params.arguments,
|
|
234
|
-
},
|
|
235
|
-
}),
|
|
236
|
-
signal: abortController.signal,
|
|
237
|
-
});
|
|
238
|
-
clearTimeout(timeoutId);
|
|
239
|
-
if (response.ok) {
|
|
240
|
-
const result = await this.parseResponse(response);
|
|
241
|
-
if (result.error) {
|
|
242
|
-
return { success: false, error: result.error.message };
|
|
243
|
-
}
|
|
244
|
-
return {
|
|
245
|
-
success: true,
|
|
246
|
-
content: result.result?.content || [],
|
|
247
|
-
isError: result.result?.isError,
|
|
248
|
-
};
|
|
249
|
-
}
|
|
250
|
-
return { success: false, error: `HTTP ${response.status}` };
|
|
251
|
-
}
|
|
252
|
-
catch (error) {
|
|
253
|
-
const msg = error instanceof Error ? error.message : String(error);
|
|
254
|
-
return { success: false, error: msg };
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
async readResource(params) {
|
|
258
|
-
if (!this.connected) {
|
|
259
|
-
return { contents: [] };
|
|
260
|
-
}
|
|
261
|
-
try {
|
|
262
|
-
const abortController = new AbortController();
|
|
263
|
-
const timeoutId = setTimeout(() => abortController.abort(), this.requestTimeout);
|
|
264
|
-
const response = await fetch(this.url, {
|
|
265
|
-
method: 'POST',
|
|
266
|
-
headers: this.headers,
|
|
267
|
-
body: JSON.stringify({
|
|
268
|
-
jsonrpc: '2.0',
|
|
269
|
-
id: 6,
|
|
270
|
-
method: 'resources/read',
|
|
271
|
-
params: { uri: params.uri },
|
|
272
|
-
}),
|
|
273
|
-
signal: abortController.signal,
|
|
274
|
-
});
|
|
275
|
-
clearTimeout(timeoutId);
|
|
276
|
-
if (response.ok) {
|
|
277
|
-
const result = await this.parseResponse(response);
|
|
278
|
-
return { contents: result.result?.contents || [] };
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
catch (error) {
|
|
282
|
-
logger.warn('Failed to read resource:', error);
|
|
283
|
-
}
|
|
284
|
-
return { contents: [] };
|
|
285
|
-
}
|
|
286
|
-
async getPrompt(params) {
|
|
287
|
-
if (!this.connected) {
|
|
288
|
-
return { messages: [] };
|
|
289
|
-
}
|
|
290
|
-
try {
|
|
291
|
-
const abortController = new AbortController();
|
|
292
|
-
const timeoutId = setTimeout(() => abortController.abort(), this.requestTimeout);
|
|
293
|
-
const response = await fetch(this.url, {
|
|
294
|
-
method: 'POST',
|
|
295
|
-
headers: this.headers,
|
|
296
|
-
body: JSON.stringify({
|
|
297
|
-
jsonrpc: '2.0',
|
|
298
|
-
id: 7,
|
|
299
|
-
method: 'prompts/get',
|
|
300
|
-
params,
|
|
301
|
-
}),
|
|
302
|
-
signal: abortController.signal,
|
|
303
|
-
});
|
|
304
|
-
clearTimeout(timeoutId);
|
|
305
|
-
if (response.ok) {
|
|
306
|
-
const result = await this.parseResponse(response);
|
|
307
|
-
const messages = (result.result?.messages || []).map((msg) => ({
|
|
308
|
-
role: msg.role,
|
|
309
|
-
content: typeof msg.content === 'string' ? msg.content : msg.content.text || '',
|
|
310
|
-
}));
|
|
311
|
-
return { messages };
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
catch (error) {
|
|
315
|
-
logger.warn('Failed to get prompt:', error);
|
|
316
|
-
}
|
|
317
|
-
return { messages: [] };
|
|
318
|
-
}
|
|
319
|
-
getServerCapabilities() {
|
|
320
|
-
return this.connected ? this.capabilities : null;
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
/**
|
|
324
|
-
* Creates an MCP client that communicates via SSE (Server-Sent Events).
|
|
325
|
-
* Uses GET to establish SSE stream, POST to send messages to server-provided endpoint.
|
|
326
|
-
*
|
|
327
|
-
* Per MCP spec: https://modelcontextprotocol.io/docs/concepts/transports#server-sent-events-sse
|
|
328
|
-
* 1. Client opens GET request to SSE endpoint
|
|
329
|
-
* 2. Server sends 'endpoint' event with URL for posting messages
|
|
330
|
-
* 3. Client sends JSON-RPC via POST to that endpoint
|
|
331
|
-
* 4. Server sends responses back via SSE stream
|
|
332
|
-
*/
|
|
333
|
-
class SseMCPClient {
|
|
334
|
-
sseUrl;
|
|
335
|
-
headers;
|
|
336
|
-
connected = false;
|
|
337
|
-
capabilities = {};
|
|
338
|
-
messageEndpoint = null;
|
|
339
|
-
requestId = 0;
|
|
340
|
-
pendingRequests = new Map();
|
|
341
|
-
abortController = null;
|
|
342
|
-
connectionTimeout;
|
|
343
|
-
constructor(url, headers = {}, timeout = 30000) {
|
|
344
|
-
this.sseUrl = url;
|
|
345
|
-
this.headers = headers;
|
|
346
|
-
this.connectionTimeout = timeout;
|
|
347
|
-
}
|
|
348
|
-
async connect() {
|
|
349
|
-
return new Promise((resolve, reject) => {
|
|
350
|
-
const timeoutId = setTimeout(() => {
|
|
351
|
-
this.abortController?.abort();
|
|
352
|
-
reject(new Error('SSE connection timeout'));
|
|
353
|
-
}, this.connectionTimeout);
|
|
354
|
-
this.establishSseConnection()
|
|
355
|
-
.then(async () => {
|
|
356
|
-
clearTimeout(timeoutId);
|
|
357
|
-
// Wait for endpoint to be received (with timeout)
|
|
358
|
-
const endpointTimeout = setTimeout(() => {
|
|
359
|
-
reject(new Error('Timeout waiting for endpoint event from SSE server'));
|
|
360
|
-
}, 10000);
|
|
361
|
-
// Poll for endpoint (it should arrive via SSE event)
|
|
362
|
-
const checkEndpoint = async () => {
|
|
363
|
-
if (this.messageEndpoint) {
|
|
364
|
-
clearTimeout(endpointTimeout);
|
|
365
|
-
// Now send initialize request
|
|
366
|
-
try {
|
|
367
|
-
const result = await this.sendRequest('initialize', {
|
|
368
|
-
protocolVersion: '2024-11-05',
|
|
369
|
-
capabilities: {},
|
|
370
|
-
clientInfo: { name: 'compass-cli', version: '1.0.0' },
|
|
371
|
-
});
|
|
372
|
-
if (result.result?.capabilities) {
|
|
373
|
-
this.capabilities = {
|
|
374
|
-
tools: !!result.result.capabilities.tools,
|
|
375
|
-
resources: !!result.result.capabilities.resources,
|
|
376
|
-
prompts: !!result.result.capabilities.prompts,
|
|
377
|
-
logging: !!result.result.capabilities.logging,
|
|
378
|
-
};
|
|
379
|
-
}
|
|
380
|
-
// Send initialized notification
|
|
381
|
-
await this.sendNotification('notifications/initialized', {});
|
|
382
|
-
this.connected = true;
|
|
383
|
-
resolve();
|
|
384
|
-
}
|
|
385
|
-
catch (initError) {
|
|
386
|
-
reject(initError);
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
|
-
else {
|
|
390
|
-
setTimeout(checkEndpoint, 100);
|
|
391
|
-
}
|
|
392
|
-
};
|
|
393
|
-
checkEndpoint();
|
|
394
|
-
})
|
|
395
|
-
.catch((err) => {
|
|
396
|
-
clearTimeout(timeoutId);
|
|
397
|
-
reject(err);
|
|
398
|
-
});
|
|
399
|
-
});
|
|
400
|
-
}
|
|
401
|
-
async establishSseConnection() {
|
|
402
|
-
this.abortController = new AbortController();
|
|
403
|
-
try {
|
|
404
|
-
const response = await fetch(this.sseUrl, {
|
|
405
|
-
method: 'GET',
|
|
406
|
-
headers: {
|
|
407
|
-
'Accept': 'text/event-stream',
|
|
408
|
-
'Cache-Control': 'no-cache',
|
|
409
|
-
...this.headers,
|
|
410
|
-
},
|
|
411
|
-
signal: this.abortController.signal,
|
|
412
|
-
});
|
|
413
|
-
if (!response.ok) {
|
|
414
|
-
throw new Error(`SSE connection failed: HTTP ${response.status} ${response.statusText}`);
|
|
415
|
-
}
|
|
416
|
-
if (!response.body) {
|
|
417
|
-
throw new Error('SSE response has no body');
|
|
418
|
-
}
|
|
419
|
-
// Start reading the SSE stream in the background
|
|
420
|
-
this.readSseStream(response.body);
|
|
421
|
-
}
|
|
422
|
-
catch (error) {
|
|
423
|
-
if (error.name === 'AbortError') {
|
|
424
|
-
throw new Error('SSE connection aborted');
|
|
425
|
-
}
|
|
426
|
-
throw error;
|
|
427
|
-
}
|
|
428
|
-
}
|
|
429
|
-
async readSseStream(body) {
|
|
430
|
-
const reader = body.getReader();
|
|
431
|
-
const decoder = new TextDecoder();
|
|
432
|
-
let buffer = '';
|
|
433
|
-
let currentEvent = '';
|
|
434
|
-
let currentData = '';
|
|
435
|
-
try {
|
|
436
|
-
// eslint-disable-next-line no-constant-condition
|
|
437
|
-
while (true) {
|
|
438
|
-
const { done, value } = await reader.read();
|
|
439
|
-
if (done) {
|
|
440
|
-
logger.debug('SSE stream ended');
|
|
441
|
-
this.connected = false;
|
|
442
|
-
break;
|
|
443
|
-
}
|
|
444
|
-
buffer += decoder.decode(value, { stream: true });
|
|
445
|
-
const lines = buffer.split(/\r?\n/); // Handle both \n and \r\n line endings
|
|
446
|
-
buffer = lines.pop() || ''; // Keep incomplete line in buffer
|
|
447
|
-
for (const line of lines) {
|
|
448
|
-
const trimmedLine = line.trim(); // Trim to handle any extra whitespace
|
|
449
|
-
if (trimmedLine.startsWith('event:')) {
|
|
450
|
-
currentEvent = trimmedLine.slice(6).trim();
|
|
451
|
-
}
|
|
452
|
-
else if (trimmedLine.startsWith('data:')) {
|
|
453
|
-
currentData += trimmedLine.slice(5).trim();
|
|
454
|
-
}
|
|
455
|
-
else if (trimmedLine === '') {
|
|
456
|
-
// Empty line = end of event
|
|
457
|
-
if (currentEvent || currentData) {
|
|
458
|
-
this.handleSseEvent(currentEvent, currentData);
|
|
459
|
-
currentEvent = '';
|
|
460
|
-
currentData = '';
|
|
461
|
-
}
|
|
462
|
-
}
|
|
463
|
-
}
|
|
464
|
-
}
|
|
465
|
-
}
|
|
466
|
-
catch (error) {
|
|
467
|
-
if (error.name !== 'AbortError') {
|
|
468
|
-
logger.error('SSE stream error:', error);
|
|
469
|
-
}
|
|
470
|
-
this.connected = false;
|
|
471
|
-
// Reject all pending requests
|
|
472
|
-
for (const [id, pending] of this.pendingRequests) {
|
|
473
|
-
pending.reject(new Error('SSE connection closed'));
|
|
474
|
-
this.pendingRequests.delete(id);
|
|
475
|
-
}
|
|
476
|
-
}
|
|
477
|
-
}
|
|
478
|
-
handleSseEvent(event, data) {
|
|
479
|
-
logger.debug(`SSE event received: ${event || 'message'}, data: ${data.substring(0, 100)}...`);
|
|
480
|
-
if (event === 'endpoint') {
|
|
481
|
-
// Server is telling us where to POST messages
|
|
482
|
-
// The data might be a relative or absolute URL
|
|
483
|
-
try {
|
|
484
|
-
// Check if it's an absolute URL
|
|
485
|
-
if (data.startsWith('http://') || data.startsWith('https://')) {
|
|
486
|
-
this.messageEndpoint = data;
|
|
487
|
-
}
|
|
488
|
-
else {
|
|
489
|
-
// It's relative, resolve against the SSE URL
|
|
490
|
-
const baseUrl = new URL(this.sseUrl);
|
|
491
|
-
this.messageEndpoint = new URL(data, baseUrl).toString();
|
|
492
|
-
}
|
|
493
|
-
logger.debug(`SSE message endpoint set to: ${this.messageEndpoint}`);
|
|
494
|
-
}
|
|
495
|
-
catch (urlError) {
|
|
496
|
-
logger.error('Failed to parse endpoint URL:', urlError);
|
|
497
|
-
}
|
|
498
|
-
}
|
|
499
|
-
else if (event === 'message' || event === '') {
|
|
500
|
-
// JSON-RPC response from server
|
|
501
|
-
if (data) {
|
|
502
|
-
try {
|
|
503
|
-
const response = JSON.parse(data);
|
|
504
|
-
this.handleJsonRpcResponse(response);
|
|
505
|
-
}
|
|
506
|
-
catch (parseError) {
|
|
507
|
-
logger.debug(`Failed to parse SSE message data: ${data}`);
|
|
508
|
-
}
|
|
509
|
-
}
|
|
510
|
-
}
|
|
511
|
-
}
|
|
512
|
-
handleJsonRpcResponse(response) {
|
|
513
|
-
if (response.id !== undefined && response.id !== null) {
|
|
514
|
-
const pending = this.pendingRequests.get(response.id);
|
|
515
|
-
if (pending) {
|
|
516
|
-
this.pendingRequests.delete(response.id);
|
|
517
|
-
pending.resolve(response);
|
|
518
|
-
}
|
|
519
|
-
}
|
|
520
|
-
// Notifications (no id) are logged but not handled for now
|
|
521
|
-
}
|
|
522
|
-
async sendRequest(method, params) {
|
|
523
|
-
if (!this.messageEndpoint) {
|
|
524
|
-
throw new Error('Message endpoint not available - SSE connection may not be established');
|
|
525
|
-
}
|
|
526
|
-
const id = ++this.requestId;
|
|
527
|
-
const request = {
|
|
528
|
-
jsonrpc: '2.0',
|
|
529
|
-
id,
|
|
530
|
-
method,
|
|
531
|
-
params,
|
|
532
|
-
};
|
|
533
|
-
return new Promise((resolve, reject) => {
|
|
534
|
-
this.pendingRequests.set(id, { resolve, reject });
|
|
535
|
-
// Set timeout for request
|
|
536
|
-
const timeoutId = setTimeout(() => {
|
|
537
|
-
if (this.pendingRequests.has(id)) {
|
|
538
|
-
this.pendingRequests.delete(id);
|
|
539
|
-
reject(new Error(`Request timeout: ${method}`));
|
|
540
|
-
}
|
|
541
|
-
}, this.connectionTimeout);
|
|
542
|
-
// Send via POST to message endpoint
|
|
543
|
-
fetch(this.messageEndpoint, {
|
|
544
|
-
method: 'POST',
|
|
545
|
-
headers: {
|
|
546
|
-
'Content-Type': 'application/json',
|
|
547
|
-
...this.headers,
|
|
548
|
-
},
|
|
549
|
-
body: JSON.stringify(request),
|
|
550
|
-
})
|
|
551
|
-
.then((response) => {
|
|
552
|
-
if (!response.ok) {
|
|
553
|
-
clearTimeout(timeoutId);
|
|
554
|
-
this.pendingRequests.delete(id);
|
|
555
|
-
reject(new Error(`HTTP ${response.status}: ${response.statusText}`));
|
|
556
|
-
}
|
|
557
|
-
// Response will come via SSE stream, not HTTP response body
|
|
558
|
-
// Some servers may return 202 Accepted or similar
|
|
559
|
-
})
|
|
560
|
-
.catch((error) => {
|
|
561
|
-
clearTimeout(timeoutId);
|
|
562
|
-
this.pendingRequests.delete(id);
|
|
563
|
-
reject(error);
|
|
564
|
-
});
|
|
565
|
-
});
|
|
566
|
-
}
|
|
567
|
-
async sendNotification(method, params) {
|
|
568
|
-
if (!this.messageEndpoint) {
|
|
569
|
-
return;
|
|
570
|
-
}
|
|
571
|
-
const notification = {
|
|
572
|
-
jsonrpc: '2.0',
|
|
573
|
-
method,
|
|
574
|
-
params,
|
|
575
|
-
};
|
|
576
|
-
try {
|
|
577
|
-
await fetch(this.messageEndpoint, {
|
|
578
|
-
method: 'POST',
|
|
579
|
-
headers: {
|
|
580
|
-
'Content-Type': 'application/json',
|
|
581
|
-
...this.headers,
|
|
582
|
-
},
|
|
583
|
-
body: JSON.stringify(notification),
|
|
584
|
-
});
|
|
585
|
-
}
|
|
586
|
-
catch (error) {
|
|
587
|
-
logger.debug('Failed to send notification:', error);
|
|
588
|
-
}
|
|
589
|
-
}
|
|
590
|
-
async close() {
|
|
591
|
-
this.connected = false;
|
|
592
|
-
this.abortController?.abort();
|
|
593
|
-
this.abortController = null;
|
|
594
|
-
this.messageEndpoint = null;
|
|
595
|
-
// Clear pending requests
|
|
596
|
-
for (const [id, pending] of this.pendingRequests) {
|
|
597
|
-
pending.reject(new Error('Client closed'));
|
|
598
|
-
this.pendingRequests.delete(id);
|
|
599
|
-
}
|
|
600
|
-
}
|
|
601
|
-
async listTools() {
|
|
602
|
-
if (!this.connected) {
|
|
603
|
-
return { tools: [] };
|
|
604
|
-
}
|
|
605
|
-
try {
|
|
606
|
-
const result = await this.sendRequest('tools/list', {});
|
|
607
|
-
return { tools: result.result?.tools || [] };
|
|
608
|
-
}
|
|
609
|
-
catch (error) {
|
|
610
|
-
logger.warn('Failed to list tools:', error);
|
|
611
|
-
return { tools: [] };
|
|
612
|
-
}
|
|
613
|
-
}
|
|
614
|
-
async listResources() {
|
|
615
|
-
if (!this.connected) {
|
|
616
|
-
return { resources: [] };
|
|
617
|
-
}
|
|
618
|
-
try {
|
|
619
|
-
const result = await this.sendRequest('resources/list', {});
|
|
620
|
-
return { resources: result.result?.resources || [] };
|
|
621
|
-
}
|
|
622
|
-
catch (error) {
|
|
623
|
-
logger.warn('Failed to list resources:', error);
|
|
624
|
-
return { resources: [] };
|
|
625
|
-
}
|
|
626
|
-
}
|
|
627
|
-
async listPrompts() {
|
|
628
|
-
if (!this.connected) {
|
|
629
|
-
return { prompts: [] };
|
|
630
|
-
}
|
|
631
|
-
try {
|
|
632
|
-
const result = await this.sendRequest('prompts/list', {});
|
|
633
|
-
return { prompts: result.result?.prompts || [] };
|
|
634
|
-
}
|
|
635
|
-
catch (error) {
|
|
636
|
-
logger.warn('Failed to list prompts:', error);
|
|
637
|
-
return { prompts: [] };
|
|
638
|
-
}
|
|
639
|
-
}
|
|
640
|
-
async callTool(params) {
|
|
641
|
-
if (!this.connected) {
|
|
642
|
-
return { success: false, error: 'Not connected' };
|
|
643
|
-
}
|
|
644
|
-
try {
|
|
645
|
-
const result = await this.sendRequest('tools/call', {
|
|
646
|
-
name: params.name,
|
|
647
|
-
arguments: params.arguments,
|
|
648
|
-
});
|
|
649
|
-
if (result.error) {
|
|
650
|
-
return { success: false, error: result.error.message };
|
|
651
|
-
}
|
|
652
|
-
return {
|
|
653
|
-
success: true,
|
|
654
|
-
content: result.result?.content || [],
|
|
655
|
-
isError: result.result?.isError,
|
|
656
|
-
};
|
|
657
|
-
}
|
|
658
|
-
catch (error) {
|
|
659
|
-
const msg = error instanceof Error ? error.message : String(error);
|
|
660
|
-
return { success: false, error: msg };
|
|
661
|
-
}
|
|
662
|
-
}
|
|
663
|
-
async readResource(params) {
|
|
664
|
-
if (!this.connected) {
|
|
665
|
-
return { contents: [] };
|
|
666
|
-
}
|
|
667
|
-
try {
|
|
668
|
-
const result = await this.sendRequest('resources/read', { uri: params.uri });
|
|
669
|
-
return { contents: result.result?.contents || [] };
|
|
670
|
-
}
|
|
671
|
-
catch (error) {
|
|
672
|
-
logger.warn('Failed to read resource:', error);
|
|
673
|
-
return { contents: [] };
|
|
674
|
-
}
|
|
675
|
-
}
|
|
676
|
-
async getPrompt(params) {
|
|
677
|
-
if (!this.connected) {
|
|
678
|
-
return { messages: [] };
|
|
679
|
-
}
|
|
680
|
-
try {
|
|
681
|
-
const result = await this.sendRequest('prompts/get', params);
|
|
682
|
-
const messages = (result.result?.messages || []).map((msg) => ({
|
|
683
|
-
role: msg.role,
|
|
684
|
-
content: typeof msg.content === 'string' ? msg.content : msg.content.text || '',
|
|
685
|
-
}));
|
|
686
|
-
return { messages };
|
|
687
|
-
}
|
|
688
|
-
catch (error) {
|
|
689
|
-
logger.warn('Failed to get prompt:', error);
|
|
690
|
-
return { messages: [] };
|
|
691
|
-
}
|
|
692
|
-
}
|
|
693
|
-
getServerCapabilities() {
|
|
694
|
-
return this.connected ? this.capabilities : null;
|
|
695
|
-
}
|
|
696
|
-
}
|
|
697
|
-
/**
|
|
698
|
-
* Creates an MCP client that communicates via stdio (stdin/stdout).
|
|
699
|
-
* Spawns a child process and uses JSON-RPC 2.0 over newline-delimited JSON.
|
|
700
|
-
*/
|
|
701
|
-
class StdioMCPClient {
|
|
702
|
-
command;
|
|
703
|
-
args;
|
|
704
|
-
cwd;
|
|
705
|
-
env;
|
|
706
|
-
requestTimeout;
|
|
707
|
-
process = null;
|
|
708
|
-
connected = false;
|
|
709
|
-
capabilities = {};
|
|
710
|
-
requestId = 0;
|
|
711
|
-
pendingRequests = new Map();
|
|
712
|
-
buffer = '';
|
|
713
|
-
/** Captures the last critical error from stderr for better error reporting */
|
|
714
|
-
lastStderrError = null;
|
|
715
|
-
constructor(command, args = [], cwd, env, requestTimeout = 30000) {
|
|
716
|
-
this.command = command;
|
|
717
|
-
this.args = args;
|
|
718
|
-
this.cwd = cwd;
|
|
719
|
-
this.env = env;
|
|
720
|
-
this.requestTimeout = requestTimeout;
|
|
721
|
-
}
|
|
722
|
-
async connect() {
|
|
723
|
-
return new Promise((resolve, reject) => {
|
|
724
|
-
// Track whether we've already settled the promise
|
|
725
|
-
let settled = false;
|
|
726
|
-
const safeReject = (error) => {
|
|
727
|
-
if (!settled) {
|
|
728
|
-
settled = true;
|
|
729
|
-
reject(error);
|
|
730
|
-
}
|
|
731
|
-
};
|
|
732
|
-
const safeResolve = () => {
|
|
733
|
-
if (!settled) {
|
|
734
|
-
settled = true;
|
|
735
|
-
resolve();
|
|
736
|
-
}
|
|
737
|
-
};
|
|
738
|
-
try {
|
|
739
|
-
// Merge environment variables
|
|
740
|
-
const processEnv = {
|
|
741
|
-
...process.env,
|
|
742
|
-
...this.env,
|
|
743
|
-
};
|
|
744
|
-
logger.debug(`Spawning stdio MCP server: ${this.command} ${this.args.join(' ')}`);
|
|
745
|
-
this.process = spawn(this.command, this.args, {
|
|
746
|
-
cwd: this.cwd || process.cwd(),
|
|
747
|
-
env: processEnv,
|
|
748
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
749
|
-
shell: true,
|
|
750
|
-
});
|
|
751
|
-
if (!this.process.stdout || !this.process.stdin) {
|
|
752
|
-
safeReject(new Error('Failed to create stdio streams'));
|
|
753
|
-
return;
|
|
754
|
-
}
|
|
755
|
-
// Handle stdout (responses from server)
|
|
756
|
-
this.process.stdout.on('data', (data) => {
|
|
757
|
-
this.handleStdoutData(data);
|
|
758
|
-
});
|
|
759
|
-
// Handle stderr (logging from server)
|
|
760
|
-
this.process.stderr?.on('data', (data) => {
|
|
761
|
-
const message = data.toString().trim();
|
|
762
|
-
if (message) {
|
|
763
|
-
// All MCP server stderr goes to debug level
|
|
764
|
-
logger.debug(`[MCP Server stderr]: ${message}`);
|
|
765
|
-
// Capture critical errors for better error reporting
|
|
766
|
-
if (message.includes('EADDRINUSE')) {
|
|
767
|
-
// Extract port number from error message if present
|
|
768
|
-
const portMatch = message.match(/port[:\s]*(\d+)|:(\d+)/i);
|
|
769
|
-
const port = portMatch?.[1] || portMatch?.[2] || 'unknown';
|
|
770
|
-
this.lastStderrError = `Port ${port} is already in use. A previous MCP server process may still be running. ` +
|
|
771
|
-
`Try killing the process using this port or wait for it to terminate.`;
|
|
772
|
-
}
|
|
773
|
-
else if (message.includes('ECONNREFUSED')) {
|
|
774
|
-
this.lastStderrError = 'Connection refused. The target server may not be running.';
|
|
775
|
-
}
|
|
776
|
-
else if (message.includes('ETIMEDOUT') || message.includes('timeout')) {
|
|
777
|
-
this.lastStderrError = 'Connection timed out while trying to reach the server.';
|
|
778
|
-
}
|
|
779
|
-
else if (message.includes('ENOTFOUND')) {
|
|
780
|
-
this.lastStderrError = 'Server hostname not found. Please check the URL.';
|
|
781
|
-
}
|
|
782
|
-
else if (message.includes('Error:') && !this.lastStderrError) {
|
|
783
|
-
// Capture generic errors if no specific error captured yet
|
|
784
|
-
const errorMatch = message.match(/Error:\s*(.+?)(?:\n|$)/);
|
|
785
|
-
if (errorMatch) {
|
|
786
|
-
this.lastStderrError = errorMatch[1].trim();
|
|
787
|
-
}
|
|
788
|
-
}
|
|
789
|
-
}
|
|
790
|
-
});
|
|
791
|
-
// Handle process exit
|
|
792
|
-
this.process.on('exit', (code, signal) => {
|
|
793
|
-
logger.debug(`MCP server process exited with code ${code}, signal ${signal}`);
|
|
794
|
-
this.connected = false;
|
|
795
|
-
this.process = null;
|
|
796
|
-
// Build error message - prefer captured stderr error over generic exit code
|
|
797
|
-
let errorMessage;
|
|
798
|
-
if (this.lastStderrError) {
|
|
799
|
-
errorMessage = this.lastStderrError;
|
|
800
|
-
// Log the detailed error at error level for visibility
|
|
801
|
-
logger.error(`MCP server failed: ${errorMessage}`);
|
|
802
|
-
}
|
|
803
|
-
else if (code !== 0) {
|
|
804
|
-
errorMessage = `Process exited with code ${code}`;
|
|
805
|
-
}
|
|
806
|
-
else if (signal) {
|
|
807
|
-
errorMessage = `Process terminated by signal ${signal}`;
|
|
808
|
-
}
|
|
809
|
-
else {
|
|
810
|
-
errorMessage = 'Process exited unexpectedly';
|
|
811
|
-
}
|
|
812
|
-
// Reject all pending requests with the detailed error
|
|
813
|
-
for (const [id, pending] of this.pendingRequests) {
|
|
814
|
-
pending.reject(new Error(errorMessage));
|
|
815
|
-
this.pendingRequests.delete(id);
|
|
816
|
-
}
|
|
817
|
-
// Also reject the connect promise if it hasn't been resolved yet
|
|
818
|
-
// This handles the case where the process exits before initialization completes
|
|
819
|
-
safeReject(new Error(errorMessage));
|
|
820
|
-
});
|
|
821
|
-
this.process.on('error', (error) => {
|
|
822
|
-
logger.error('MCP server process error:', error);
|
|
823
|
-
this.connected = false;
|
|
824
|
-
safeReject(error);
|
|
825
|
-
});
|
|
826
|
-
// Give the process a moment to start, then send initialize
|
|
827
|
-
setTimeout(async () => {
|
|
828
|
-
// Check if process is still running before trying to initialize
|
|
829
|
-
if (!this.process || settled) {
|
|
830
|
-
return; // Process already exited or promise already settled
|
|
831
|
-
}
|
|
832
|
-
try {
|
|
833
|
-
const result = await this.sendRequest('initialize', {
|
|
834
|
-
protocolVersion: '2024-11-05',
|
|
835
|
-
capabilities: {},
|
|
836
|
-
clientInfo: { name: 'compass-cli', version: '1.0.0' },
|
|
837
|
-
});
|
|
838
|
-
if (result.result?.capabilities) {
|
|
839
|
-
this.capabilities = {
|
|
840
|
-
tools: !!result.result.capabilities.tools,
|
|
841
|
-
resources: !!result.result.capabilities.resources,
|
|
842
|
-
prompts: !!result.result.capabilities.prompts,
|
|
843
|
-
logging: !!result.result.capabilities.logging,
|
|
844
|
-
};
|
|
845
|
-
}
|
|
846
|
-
// Send initialized notification
|
|
847
|
-
this.sendNotification('notifications/initialized', {});
|
|
848
|
-
this.connected = true;
|
|
849
|
-
logger.debug(`Stdio MCP server connected: ${this.command}`);
|
|
850
|
-
safeResolve();
|
|
851
|
-
}
|
|
852
|
-
catch (initError) {
|
|
853
|
-
safeReject(initError instanceof Error ? initError : new Error(String(initError)));
|
|
854
|
-
}
|
|
855
|
-
}, 100);
|
|
856
|
-
}
|
|
857
|
-
catch (error) {
|
|
858
|
-
safeReject(error instanceof Error ? error : new Error(String(error)));
|
|
859
|
-
}
|
|
860
|
-
});
|
|
861
|
-
}
|
|
862
|
-
handleStdoutData(data) {
|
|
863
|
-
this.buffer += data.toString();
|
|
864
|
-
// Process complete lines (newline-delimited JSON)
|
|
865
|
-
let newlineIndex;
|
|
866
|
-
while ((newlineIndex = this.buffer.indexOf('\n')) !== -1) {
|
|
867
|
-
const line = this.buffer.substring(0, newlineIndex).trim();
|
|
868
|
-
this.buffer = this.buffer.substring(newlineIndex + 1);
|
|
869
|
-
if (line) {
|
|
870
|
-
try {
|
|
871
|
-
const response = JSON.parse(line);
|
|
872
|
-
this.handleResponse(response);
|
|
873
|
-
}
|
|
874
|
-
catch (parseError) {
|
|
875
|
-
logger.debug(`Failed to parse MCP response: ${line}`);
|
|
876
|
-
}
|
|
877
|
-
}
|
|
878
|
-
}
|
|
879
|
-
}
|
|
880
|
-
handleResponse(response) {
|
|
881
|
-
if (response.id !== undefined && response.id !== null) {
|
|
882
|
-
const pending = this.pendingRequests.get(response.id);
|
|
883
|
-
if (pending) {
|
|
884
|
-
this.pendingRequests.delete(response.id);
|
|
885
|
-
pending.resolve(response);
|
|
886
|
-
}
|
|
887
|
-
}
|
|
888
|
-
// Notifications (no id) are logged but not handled
|
|
889
|
-
}
|
|
890
|
-
sendRequest(method, params) {
|
|
891
|
-
return new Promise((resolve, reject) => {
|
|
892
|
-
if (!this.process?.stdin) {
|
|
893
|
-
reject(new Error('Process not running'));
|
|
894
|
-
return;
|
|
895
|
-
}
|
|
896
|
-
const id = ++this.requestId;
|
|
897
|
-
const request = {
|
|
898
|
-
jsonrpc: '2.0',
|
|
899
|
-
id,
|
|
900
|
-
method,
|
|
901
|
-
params,
|
|
902
|
-
};
|
|
903
|
-
this.pendingRequests.set(id, { resolve, reject });
|
|
904
|
-
const requestStr = JSON.stringify(request) + '\n';
|
|
905
|
-
this.process.stdin.write(requestStr, (error) => {
|
|
906
|
-
if (error) {
|
|
907
|
-
this.pendingRequests.delete(id);
|
|
908
|
-
reject(error);
|
|
909
|
-
}
|
|
910
|
-
});
|
|
911
|
-
// Timeout after configured duration (default 30 seconds, extended for npx)
|
|
912
|
-
setTimeout(() => {
|
|
913
|
-
if (this.pendingRequests.has(id)) {
|
|
914
|
-
this.pendingRequests.delete(id);
|
|
915
|
-
reject(new Error(`Request timeout: ${method}`));
|
|
916
|
-
}
|
|
917
|
-
}, this.requestTimeout);
|
|
918
|
-
});
|
|
919
|
-
}
|
|
920
|
-
sendNotification(method, params) {
|
|
921
|
-
if (!this.process?.stdin) {
|
|
922
|
-
return;
|
|
923
|
-
}
|
|
924
|
-
const notification = {
|
|
925
|
-
jsonrpc: '2.0',
|
|
926
|
-
method,
|
|
927
|
-
params,
|
|
928
|
-
};
|
|
929
|
-
const notificationStr = JSON.stringify(notification) + '\n';
|
|
930
|
-
this.process.stdin.write(notificationStr);
|
|
931
|
-
}
|
|
932
|
-
async close() {
|
|
933
|
-
this.connected = false;
|
|
934
|
-
if (this.process) {
|
|
935
|
-
// Send shutdown request
|
|
936
|
-
try {
|
|
937
|
-
this.sendNotification('notifications/cancelled', { reason: 'Client closing' });
|
|
938
|
-
}
|
|
939
|
-
catch {
|
|
940
|
-
// Ignore errors during shutdown
|
|
941
|
-
}
|
|
942
|
-
// Kill the process
|
|
943
|
-
this.process.kill('SIGTERM');
|
|
944
|
-
// Force kill after 2 seconds if still running
|
|
945
|
-
setTimeout(() => {
|
|
946
|
-
if (this.process && !this.process.killed) {
|
|
947
|
-
this.process.kill('SIGKILL');
|
|
948
|
-
}
|
|
949
|
-
}, 2000);
|
|
950
|
-
this.process = null;
|
|
951
|
-
}
|
|
952
|
-
// Clear pending requests
|
|
953
|
-
for (const [id, pending] of this.pendingRequests) {
|
|
954
|
-
pending.reject(new Error('Client closed'));
|
|
955
|
-
this.pendingRequests.delete(id);
|
|
956
|
-
}
|
|
957
|
-
}
|
|
958
|
-
async listTools() {
|
|
959
|
-
if (!this.connected) {
|
|
960
|
-
return { tools: [] };
|
|
961
|
-
}
|
|
962
|
-
try {
|
|
963
|
-
const result = await this.sendRequest('tools/list', {});
|
|
964
|
-
return { tools: result.result?.tools || [] };
|
|
965
|
-
}
|
|
966
|
-
catch (error) {
|
|
967
|
-
logger.warn('Failed to list tools:', error);
|
|
968
|
-
return { tools: [] };
|
|
969
|
-
}
|
|
970
|
-
}
|
|
971
|
-
async listResources() {
|
|
972
|
-
if (!this.connected) {
|
|
973
|
-
return { resources: [] };
|
|
974
|
-
}
|
|
975
|
-
try {
|
|
976
|
-
const result = await this.sendRequest('resources/list', {});
|
|
977
|
-
return { resources: result.result?.resources || [] };
|
|
978
|
-
}
|
|
979
|
-
catch (error) {
|
|
980
|
-
logger.warn('Failed to list resources:', error);
|
|
981
|
-
return { resources: [] };
|
|
982
|
-
}
|
|
983
|
-
}
|
|
984
|
-
async listPrompts() {
|
|
985
|
-
if (!this.connected) {
|
|
986
|
-
return { prompts: [] };
|
|
987
|
-
}
|
|
988
|
-
try {
|
|
989
|
-
const result = await this.sendRequest('prompts/list', {});
|
|
990
|
-
return { prompts: result.result?.prompts || [] };
|
|
991
|
-
}
|
|
992
|
-
catch (error) {
|
|
993
|
-
logger.warn('Failed to list prompts:', error);
|
|
994
|
-
return { prompts: [] };
|
|
995
|
-
}
|
|
996
|
-
}
|
|
997
|
-
async callTool(params) {
|
|
998
|
-
if (!this.connected) {
|
|
999
|
-
return { success: false, error: 'Not connected' };
|
|
1000
|
-
}
|
|
1001
|
-
try {
|
|
1002
|
-
const result = await this.sendRequest('tools/call', {
|
|
1003
|
-
name: params.name,
|
|
1004
|
-
arguments: params.arguments,
|
|
1005
|
-
});
|
|
1006
|
-
if (result.error) {
|
|
1007
|
-
return { success: false, error: result.error.message };
|
|
1008
|
-
}
|
|
1009
|
-
return {
|
|
1010
|
-
success: true,
|
|
1011
|
-
content: result.result?.content || [],
|
|
1012
|
-
isError: result.result?.isError,
|
|
1013
|
-
};
|
|
1014
|
-
}
|
|
1015
|
-
catch (error) {
|
|
1016
|
-
const msg = error instanceof Error ? error.message : String(error);
|
|
1017
|
-
return { success: false, error: msg };
|
|
1018
|
-
}
|
|
1019
|
-
}
|
|
1020
|
-
async readResource(params) {
|
|
1021
|
-
if (!this.connected) {
|
|
1022
|
-
return { contents: [] };
|
|
1023
|
-
}
|
|
1024
|
-
try {
|
|
1025
|
-
const result = await this.sendRequest('resources/read', { uri: params.uri });
|
|
1026
|
-
return { contents: result.result?.contents || [] };
|
|
1027
|
-
}
|
|
1028
|
-
catch (error) {
|
|
1029
|
-
logger.warn('Failed to read resource:', error);
|
|
1030
|
-
return { contents: [] };
|
|
1031
|
-
}
|
|
1032
|
-
}
|
|
1033
|
-
async getPrompt(params) {
|
|
1034
|
-
if (!this.connected) {
|
|
1035
|
-
return { messages: [] };
|
|
1036
|
-
}
|
|
1037
|
-
try {
|
|
1038
|
-
const result = await this.sendRequest('prompts/get', params);
|
|
1039
|
-
const messages = (result.result?.messages || []).map((msg) => ({
|
|
1040
|
-
role: msg.role,
|
|
1041
|
-
content: typeof msg.content === 'string' ? msg.content : msg.content.text || '',
|
|
1042
|
-
}));
|
|
1043
|
-
return { messages };
|
|
1044
|
-
}
|
|
1045
|
-
catch (error) {
|
|
1046
|
-
logger.warn('Failed to get prompt:', error);
|
|
1047
|
-
return { messages: [] };
|
|
1048
|
-
}
|
|
1049
|
-
}
|
|
1050
|
-
getServerCapabilities() {
|
|
1051
|
-
return this.connected ? this.capabilities : null;
|
|
1052
|
-
}
|
|
1053
|
-
isConnected() {
|
|
1054
|
-
return this.connected && this.process !== null;
|
|
1055
|
-
}
|
|
1056
|
-
}
|
|
1057
|
-
/**
|
|
1058
|
-
* Creates and connects to an MCP server using the appropriate transport.
|
|
1059
|
-
*/
|
|
1060
|
-
export async function createTransportConnection(config, timeout) {
|
|
1061
|
-
// Priority: function parameter > config.timeout > environment variable > default
|
|
1062
|
-
const configTimeout = config.timeout;
|
|
1063
|
-
const connectionTimeout = timeout || configTimeout || parseInt(process.env.MCP_TIMEOUT || '') || DEFAULT_MCP_TIMEOUT;
|
|
1064
|
-
// Normalize config to infer missing type field
|
|
1065
|
-
const normalizedConfig = normalizeServerConfig(config);
|
|
1066
|
-
// Log if type was inferred
|
|
1067
|
-
if (!config.type && normalizedConfig.type) {
|
|
1068
|
-
logger.debug(`Inferred transport type '${normalizedConfig.type}' for server '${normalizedConfig.name}' (missing 'type' field in config)`);
|
|
1069
|
-
}
|
|
1070
|
-
if (isMCPHttpConfig(normalizedConfig)) {
|
|
1071
|
-
return createHttpConnection(normalizedConfig, connectionTimeout);
|
|
1072
|
-
}
|
|
1073
|
-
if (isMCPSseConfig(normalizedConfig)) {
|
|
1074
|
-
return createSseConnection(normalizedConfig, connectionTimeout);
|
|
1075
|
-
}
|
|
1076
|
-
if (isMCPStdioConfig(normalizedConfig)) {
|
|
1077
|
-
return createStdioConnection(normalizedConfig, connectionTimeout);
|
|
1078
|
-
}
|
|
1079
|
-
const serverName = normalizedConfig?.name || 'unknown';
|
|
1080
|
-
throw new Error(`Unknown transport type for server: ${serverName}. ` +
|
|
1081
|
-
`Config must have 'type' field set to 'http', 'sse', or 'stdio', ` +
|
|
1082
|
-
`or have 'url' (for sse) or 'command' (for stdio) fields to infer the type.`);
|
|
1083
|
-
}
|
|
1084
|
-
/**
|
|
1085
|
-
* Creates an HTTP transport connection.
|
|
1086
|
-
*/
|
|
1087
|
-
async function createHttpConnection(config, timeout) {
|
|
1088
|
-
logger.debug(`Creating HTTP connection to ${config.name} at ${config.url}`);
|
|
1089
|
-
// Check for existing OAuth tokens and inject Authorization header
|
|
1090
|
-
const oauthService = await getMCPOAuthService();
|
|
1091
|
-
const authHeader = oauthService.getAuthHeader(config.name);
|
|
1092
|
-
const headers = {
|
|
1093
|
-
...config.headers,
|
|
1094
|
-
...(authHeader ? { 'Authorization': authHeader } : {}),
|
|
1095
|
-
};
|
|
1096
|
-
logger.debug(`HTTP connection headers for ${config.name}: Authorization=${authHeader ? 'Bearer ***' + authHeader.slice(-8) : 'none'}`);
|
|
1097
|
-
const client = new SimpleMCPClient(config.url, headers, timeout, config.name);
|
|
1098
|
-
let status = 'connecting';
|
|
1099
|
-
let error;
|
|
1100
|
-
try {
|
|
1101
|
-
await client.connect();
|
|
1102
|
-
status = 'connected';
|
|
1103
|
-
logger.info(`Connected to HTTP MCP server: ${config.name}`);
|
|
1104
|
-
return {
|
|
1105
|
-
client,
|
|
1106
|
-
close: async () => {
|
|
1107
|
-
await client.close();
|
|
1108
|
-
},
|
|
1109
|
-
status,
|
|
1110
|
-
};
|
|
1111
|
-
}
|
|
1112
|
-
catch (err) {
|
|
1113
|
-
// Rethrow AuthenticationRequiredError for server manager to handle OAuth flow
|
|
1114
|
-
if (err instanceof AuthenticationRequiredError) {
|
|
1115
|
-
throw err;
|
|
1116
|
-
}
|
|
1117
|
-
error = err instanceof Error ? err.message : String(err);
|
|
1118
|
-
status = 'error';
|
|
1119
|
-
logger.error(`Failed to connect to HTTP MCP server ${config.name}:`, err);
|
|
1120
|
-
return {
|
|
1121
|
-
client,
|
|
1122
|
-
close: async () => {
|
|
1123
|
-
try {
|
|
1124
|
-
await client.close();
|
|
1125
|
-
}
|
|
1126
|
-
catch {
|
|
1127
|
-
// Ignore close errors
|
|
1128
|
-
}
|
|
1129
|
-
},
|
|
1130
|
-
status,
|
|
1131
|
-
error,
|
|
1132
|
-
};
|
|
1133
|
-
}
|
|
1134
|
-
}
|
|
1135
|
-
/**
|
|
1136
|
-
* Creates an SSE transport connection.
|
|
1137
|
-
* Uses proper SSE protocol: GET for event stream, POST for sending messages.
|
|
1138
|
-
*/
|
|
1139
|
-
async function createSseConnection(config, timeout) {
|
|
1140
|
-
logger.debug(`Creating SSE connection to ${config.name} at ${config.url}`);
|
|
1141
|
-
const client = new SseMCPClient(config.url, config.headers, timeout);
|
|
1142
|
-
let status = 'connecting';
|
|
1143
|
-
let error;
|
|
1144
|
-
try {
|
|
1145
|
-
await client.connect();
|
|
1146
|
-
status = 'connected';
|
|
1147
|
-
logger.info(`Connected to SSE MCP server: ${config.name}`);
|
|
1148
|
-
return {
|
|
1149
|
-
client,
|
|
1150
|
-
close: async () => {
|
|
1151
|
-
await client.close();
|
|
1152
|
-
},
|
|
1153
|
-
status,
|
|
1154
|
-
};
|
|
1155
|
-
}
|
|
1156
|
-
catch (err) {
|
|
1157
|
-
error = err instanceof Error ? err.message : String(err);
|
|
1158
|
-
status = 'error';
|
|
1159
|
-
logger.error(`Failed to connect to SSE MCP server ${config.name}:`, err);
|
|
1160
|
-
return {
|
|
1161
|
-
client,
|
|
1162
|
-
close: async () => {
|
|
1163
|
-
try {
|
|
1164
|
-
await client.close();
|
|
1165
|
-
}
|
|
1166
|
-
catch {
|
|
1167
|
-
// Ignore close errors
|
|
1168
|
-
}
|
|
1169
|
-
},
|
|
1170
|
-
status,
|
|
1171
|
-
error,
|
|
1172
|
-
};
|
|
1173
|
-
}
|
|
1174
|
-
}
|
|
1175
|
-
/**
|
|
1176
|
-
* Creates a stdio transport connection.
|
|
1177
|
-
* Spawns a child process and communicates via JSON-RPC over stdin/stdout.
|
|
1178
|
-
*/
|
|
1179
|
-
async function createStdioConnection(config, timeout) {
|
|
1180
|
-
logger.debug(`Creating stdio connection to ${config.name} with command: ${config.command}`);
|
|
1181
|
-
// Use longer timeout for npx commands (they may need to download packages)
|
|
1182
|
-
const effectiveTimeout = config.command === 'npx' ? Math.max(timeout, 60000) : timeout;
|
|
1183
|
-
if (config.command === 'npx' && effectiveTimeout > timeout) {
|
|
1184
|
-
logger.debug(`Using extended timeout (60s) for npx command - first run may download packages`);
|
|
1185
|
-
}
|
|
1186
|
-
const client = new StdioMCPClient(config.command, config.args || [], config.cwd, config.env, effectiveTimeout);
|
|
1187
|
-
let status = 'connecting';
|
|
1188
|
-
let error;
|
|
1189
|
-
try {
|
|
1190
|
-
await Promise.race([
|
|
1191
|
-
client.connect(),
|
|
1192
|
-
new Promise((_, reject) => setTimeout(() => reject(new Error('Connection timeout')), effectiveTimeout)),
|
|
1193
|
-
]);
|
|
1194
|
-
status = 'connected';
|
|
1195
|
-
logger.debug(`Connected to stdio MCP server: ${config.name}`);
|
|
1196
|
-
return {
|
|
1197
|
-
client,
|
|
1198
|
-
close: async () => {
|
|
1199
|
-
await client.close();
|
|
1200
|
-
},
|
|
1201
|
-
status,
|
|
1202
|
-
};
|
|
1203
|
-
}
|
|
1204
|
-
catch (err) {
|
|
1205
|
-
error = err instanceof Error ? err.message : String(err);
|
|
1206
|
-
status = 'error';
|
|
1207
|
-
logger.error(`Failed to connect to stdio MCP server ${config.name}:`, err);
|
|
1208
|
-
return {
|
|
1209
|
-
client,
|
|
1210
|
-
close: async () => {
|
|
1211
|
-
try {
|
|
1212
|
-
await client.close();
|
|
1213
|
-
}
|
|
1214
|
-
catch {
|
|
1215
|
-
// Ignore close errors
|
|
1216
|
-
}
|
|
1217
|
-
},
|
|
1218
|
-
status,
|
|
1219
|
-
error,
|
|
1220
|
-
};
|
|
1221
|
-
}
|
|
1222
|
-
}
|
|
1223
|
-
/**
|
|
1224
|
-
* Fetches available tools from an MCP server.
|
|
1225
|
-
*/
|
|
1226
|
-
export async function fetchServerTools(client) {
|
|
1227
|
-
try {
|
|
1228
|
-
const result = await client.listTools();
|
|
1229
|
-
return result.tools || [];
|
|
1230
|
-
}
|
|
1231
|
-
catch (error) {
|
|
1232
|
-
logger.error('Failed to fetch MCP tools:', error);
|
|
1233
|
-
return [];
|
|
1234
|
-
}
|
|
1235
|
-
}
|
|
1236
|
-
/**
|
|
1237
|
-
* Fetches available resources from an MCP server.
|
|
1238
|
-
*/
|
|
1239
|
-
export async function fetchServerResources(client) {
|
|
1240
|
-
try {
|
|
1241
|
-
const result = await client.listResources();
|
|
1242
|
-
return result.resources || [];
|
|
1243
|
-
}
|
|
1244
|
-
catch (error) {
|
|
1245
|
-
logger.error('Failed to fetch MCP resources:', error);
|
|
1246
|
-
return [];
|
|
1247
|
-
}
|
|
1248
|
-
}
|
|
1249
|
-
/**
|
|
1250
|
-
* Fetches available prompts from an MCP server.
|
|
1251
|
-
*/
|
|
1252
|
-
export async function fetchServerPrompts(client) {
|
|
1253
|
-
try {
|
|
1254
|
-
const result = await client.listPrompts();
|
|
1255
|
-
return result.prompts || [];
|
|
1256
|
-
}
|
|
1257
|
-
catch (error) {
|
|
1258
|
-
logger.error('Failed to fetch MCP prompts:', error);
|
|
1259
|
-
return [];
|
|
1260
|
-
}
|
|
1261
|
-
}
|
|
1262
|
-
/**
|
|
1263
|
-
* Fetches server capabilities.
|
|
1264
|
-
*/
|
|
1265
|
-
export async function fetchServerCapabilities(client) {
|
|
1266
|
-
try {
|
|
1267
|
-
const capabilities = client.getServerCapabilities();
|
|
1268
|
-
return capabilities || {};
|
|
1269
|
-
}
|
|
1270
|
-
catch (error) {
|
|
1271
|
-
logger.error('Failed to fetch MCP server capabilities:', error);
|
|
1272
|
-
return {};
|
|
1273
|
-
}
|
|
1274
|
-
}
|
|
1275
|
-
/**
|
|
1276
|
-
* Calls a tool on an MCP server.
|
|
1277
|
-
*/
|
|
1278
|
-
export async function callMCPTool(client, toolName, args) {
|
|
1279
|
-
try {
|
|
1280
|
-
return await client.callTool({ name: toolName, arguments: args });
|
|
1281
|
-
}
|
|
1282
|
-
catch (error) {
|
|
1283
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
1284
|
-
logger.error(`Failed to call MCP tool ${toolName}:`, error);
|
|
1285
|
-
return { success: false, error: errorMessage };
|
|
1286
|
-
}
|
|
1287
|
-
}
|
|
1288
|
-
/**
|
|
1289
|
-
* Reads a resource from an MCP server.
|
|
1290
|
-
*/
|
|
1291
|
-
export async function readMCPResource(client, uri) {
|
|
1292
|
-
try {
|
|
1293
|
-
const result = await client.readResource({ uri });
|
|
1294
|
-
return { content: result.contents || [] };
|
|
1295
|
-
}
|
|
1296
|
-
catch (error) {
|
|
1297
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
1298
|
-
logger.error(`Failed to read MCP resource ${uri}:`, error);
|
|
1299
|
-
return { content: [], error: errorMessage };
|
|
1300
|
-
}
|
|
1301
|
-
}
|
|
1302
|
-
/**
|
|
1303
|
-
* Gets a prompt from an MCP server.
|
|
1304
|
-
*/
|
|
1305
|
-
export async function getMCPPrompt(client, name, args) {
|
|
1306
|
-
try {
|
|
1307
|
-
const result = await client.getPrompt({ name, arguments: args });
|
|
1308
|
-
return { messages: result.messages || [] };
|
|
1309
|
-
}
|
|
1310
|
-
catch (error) {
|
|
1311
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
1312
|
-
logger.error(`Failed to get MCP prompt ${name}:`, error);
|
|
1313
|
-
return { messages: [], error: errorMessage };
|
|
1314
|
-
}
|
|
1315
|
-
}
|
|
1316
|
-
//# sourceMappingURL=mcp-transport.js.map
|