@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,892 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MCP OAuth Service.
|
|
3
|
-
*
|
|
4
|
-
* Handles OAuth 2.0 authentication for MCP servers that require it.
|
|
5
|
-
* Features:
|
|
6
|
-
* - OAuth 2.0 authorization code flow
|
|
7
|
-
* - Token storage and refresh
|
|
8
|
-
* - Local callback server for OAuth redirects
|
|
9
|
-
* - Automatic token refresh
|
|
10
|
-
*/
|
|
11
|
-
import { createServer } from 'http';
|
|
12
|
-
import { URL, URLSearchParams } from 'url';
|
|
13
|
-
import { createHash, randomBytes } from 'crypto';
|
|
14
|
-
import { logger } from '../utils/logger.js';
|
|
15
|
-
import { safeReadFile, safeWriteFile, pathExists, ensureDir } from '../utils/file-system.js';
|
|
16
|
-
import { getGlobalCompassDir } from '../utils/path.js';
|
|
17
|
-
/**
|
|
18
|
-
* Built-in OAuth configurations for known MCP servers.
|
|
19
|
-
* These are bundled with Kore-CLI so users don't need to register their own OAuth apps.
|
|
20
|
-
*
|
|
21
|
-
* The client credentials here are for the "Kore-CLI" OAuth application registered
|
|
22
|
-
* with each service. Using PKCE, so client_secret exposure is acceptable for public clients.
|
|
23
|
-
*
|
|
24
|
-
* To add credentials:
|
|
25
|
-
* - Set via environment variables (FIGMA_MCP_CLIENT_ID, FIGMA_MCP_CLIENT_SECRET)
|
|
26
|
-
* - Or hardcode the values directly below for distribution
|
|
27
|
-
*/
|
|
28
|
-
const KNOWN_MCP_OAUTH_CONFIGS = {
|
|
29
|
-
// Figma MCP Server - uses Kore-CLI OAuth application
|
|
30
|
-
// Get your credentials from: https://www.figma.com/developers/apps
|
|
31
|
-
// Scopes reference: https://developers.figma.com/docs/rest-api/scopes/
|
|
32
|
-
'mcp.figma.com': {
|
|
33
|
-
clientId: process.env.FIGMA_MCP_CLIENT_ID || '7cLAcGuKlF257dbgakWp7O',
|
|
34
|
-
clientSecret: process.env.FIGMA_MCP_CLIENT_SECRET || 'zPgspJQf9J5WfDxXjYc0XxTB9fFOpL',
|
|
35
|
-
// OAuth URLs - see: https://developers.figma.com/docs/rest-api/authentication/
|
|
36
|
-
authorizationUrl: 'https://www.figma.com/oauth',
|
|
37
|
-
tokenUrl: 'https://api.figma.com/v1/oauth/token', // Note: api.figma.com, not www.figma.com
|
|
38
|
-
// Required scopes for Figma MCP - enable these in your Figma app settings:
|
|
39
|
-
// See: https://developers.figma.com/docs/rest-api/scopes/
|
|
40
|
-
scopes: [
|
|
41
|
-
'file_content:read', // Read the contents of files (nodes, editor type)
|
|
42
|
-
'file_metadata:read', // Read metadata of files
|
|
43
|
-
'file_dev_resources:read', // Read dev resources in files
|
|
44
|
-
'file_dev_resources:write', // Write dev resources to files
|
|
45
|
-
// Note: file_variables:read/write are Enterprise-only
|
|
46
|
-
],
|
|
47
|
-
},
|
|
48
|
-
// Add more known MCP servers here as needed:
|
|
49
|
-
// 'mcp.example.com': {
|
|
50
|
-
// clientId: process.env.EXAMPLE_MCP_CLIENT_ID || 'client-id',
|
|
51
|
-
// clientSecret: process.env.EXAMPLE_MCP_CLIENT_SECRET || 'client-secret',
|
|
52
|
-
// },
|
|
53
|
-
};
|
|
54
|
-
/**
|
|
55
|
-
* Registry of known MCP providers with their authentication restrictions and fallbacks.
|
|
56
|
-
* This helps users when they encounter authentication issues with specific providers.
|
|
57
|
-
*/
|
|
58
|
-
const KNOWN_MCP_PROVIDERS = [
|
|
59
|
-
{
|
|
60
|
-
name: 'figma',
|
|
61
|
-
remoteUrlPattern: /^https?:\/\/(mcp\.)?figma\.com/i,
|
|
62
|
-
oauthRestricted: true,
|
|
63
|
-
approvedClients: ['VS Code', 'Cursor', 'Claude Code'],
|
|
64
|
-
fallback: {
|
|
65
|
-
name: 'Figma Desktop MCP Server',
|
|
66
|
-
reason: 'Figma restricts remote MCP OAuth to approved clients only. Use the local desktop server instead.',
|
|
67
|
-
config: {
|
|
68
|
-
type: 'http',
|
|
69
|
-
url: 'http://127.0.0.1:3845/mcp',
|
|
70
|
-
enabled: true,
|
|
71
|
-
},
|
|
72
|
-
requirements: [
|
|
73
|
-
'Figma desktop app installed and running',
|
|
74
|
-
'Logged in to your Figma account',
|
|
75
|
-
'A Design file open with Dev Mode enabled',
|
|
76
|
-
],
|
|
77
|
-
setupInstructions: [
|
|
78
|
-
'1. Open Figma desktop app (ensure latest version)',
|
|
79
|
-
'2. Create or open a Design file',
|
|
80
|
-
'3. Enable Dev Mode (toolbar or Shift+D)',
|
|
81
|
-
'4. In the Inspect panel, enable MCP server',
|
|
82
|
-
'5. Update your .mcp.json to use: http://127.0.0.1:3845/mcp',
|
|
83
|
-
],
|
|
84
|
-
},
|
|
85
|
-
},
|
|
86
|
-
];
|
|
87
|
-
/**
|
|
88
|
-
* Gets provider info for a server URL.
|
|
89
|
-
*/
|
|
90
|
-
export function getProviderInfo(serverUrl) {
|
|
91
|
-
for (const provider of KNOWN_MCP_PROVIDERS) {
|
|
92
|
-
if (provider.remoteUrlPattern.test(serverUrl)) {
|
|
93
|
-
return provider;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
return undefined;
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Gets fallback configuration for a server URL if available.
|
|
100
|
-
*/
|
|
101
|
-
export function getFallbackConfig(serverUrl) {
|
|
102
|
-
const provider = getProviderInfo(serverUrl);
|
|
103
|
-
return provider?.fallback;
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Checks if a server URL is for a provider with restricted OAuth.
|
|
107
|
-
*/
|
|
108
|
-
export function isOAuthRestricted(serverUrl) {
|
|
109
|
-
const provider = getProviderInfo(serverUrl);
|
|
110
|
-
return provider?.oauthRestricted ?? false;
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Checks if the local Figma MCP server is available.
|
|
114
|
-
* Returns true if the server responds to a health check.
|
|
115
|
-
*/
|
|
116
|
-
export async function checkLocalFigmaServer() {
|
|
117
|
-
try {
|
|
118
|
-
const controller = new AbortController();
|
|
119
|
-
const timeoutId = setTimeout(() => controller.abort(), 2000);
|
|
120
|
-
const response = await fetch('http://127.0.0.1:3845/mcp', {
|
|
121
|
-
method: 'POST',
|
|
122
|
-
headers: { 'Content-Type': 'application/json' },
|
|
123
|
-
body: JSON.stringify({
|
|
124
|
-
jsonrpc: '2.0',
|
|
125
|
-
id: 1,
|
|
126
|
-
method: 'initialize',
|
|
127
|
-
params: {
|
|
128
|
-
protocolVersion: '2024-11-05',
|
|
129
|
-
capabilities: {},
|
|
130
|
-
clientInfo: { name: 'kore-cli', version: '1.0.0' },
|
|
131
|
-
},
|
|
132
|
-
}),
|
|
133
|
-
signal: controller.signal,
|
|
134
|
-
});
|
|
135
|
-
clearTimeout(timeoutId);
|
|
136
|
-
return response.ok;
|
|
137
|
-
}
|
|
138
|
-
catch {
|
|
139
|
-
return false;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* Gets the built-in OAuth config for a known MCP server URL.
|
|
144
|
-
* Returns undefined if the server is not in the known registry or has placeholder credentials.
|
|
145
|
-
*/
|
|
146
|
-
function getKnownOAuthConfig(serverUrl) {
|
|
147
|
-
try {
|
|
148
|
-
const url = new URL(serverUrl);
|
|
149
|
-
const host = url.host.toLowerCase();
|
|
150
|
-
// Check for exact match or subdomain match
|
|
151
|
-
for (const [knownHost, config] of Object.entries(KNOWN_MCP_OAUTH_CONFIGS)) {
|
|
152
|
-
if (host === knownHost || host.endsWith(`.${knownHost}`)) {
|
|
153
|
-
// Only return if we have real credentials (not placeholders)
|
|
154
|
-
const hasRealClientId = config.clientId &&
|
|
155
|
-
!config.clientId.includes('YOUR_') &&
|
|
156
|
-
!config.clientId.includes('_HERE');
|
|
157
|
-
if (hasRealClientId) {
|
|
158
|
-
logger.debug(`Found built-in OAuth config for ${knownHost}`);
|
|
159
|
-
return config;
|
|
160
|
-
}
|
|
161
|
-
else {
|
|
162
|
-
// Return URLs only (for discovery) if credentials are placeholders
|
|
163
|
-
if (config.authorizationUrl || config.tokenUrl) {
|
|
164
|
-
logger.debug(`Found built-in OAuth URLs (no credentials) for ${knownHost}`);
|
|
165
|
-
return {
|
|
166
|
-
authorizationUrl: config.authorizationUrl,
|
|
167
|
-
tokenUrl: config.tokenUrl,
|
|
168
|
-
scopes: config.scopes,
|
|
169
|
-
};
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
catch {
|
|
176
|
-
// Invalid URL, ignore
|
|
177
|
-
}
|
|
178
|
-
return undefined;
|
|
179
|
-
}
|
|
180
|
-
/**
|
|
181
|
-
* MCP OAuth Service class.
|
|
182
|
-
*/
|
|
183
|
-
class MCPOAuthService {
|
|
184
|
-
storage = { tokens: {} };
|
|
185
|
-
storagePath;
|
|
186
|
-
pendingAuths = new Map();
|
|
187
|
-
callbackServer = null;
|
|
188
|
-
callbackPort = 23456; // Default callback port
|
|
189
|
-
constructor() {
|
|
190
|
-
this.storagePath = `${getGlobalCompassDir()}/mcp-oauth.json`;
|
|
191
|
-
}
|
|
192
|
-
/**
|
|
193
|
-
* Loads stored OAuth tokens.
|
|
194
|
-
*/
|
|
195
|
-
async load() {
|
|
196
|
-
try {
|
|
197
|
-
if (await pathExists(this.storagePath)) {
|
|
198
|
-
const content = await safeReadFile(this.storagePath);
|
|
199
|
-
this.storage = JSON.parse(content || '{"tokens":{}}');
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
catch (error) {
|
|
203
|
-
logger.warn('Failed to load OAuth storage', error);
|
|
204
|
-
this.storage = { tokens: {} };
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
/**
|
|
208
|
-
* Saves OAuth tokens.
|
|
209
|
-
*/
|
|
210
|
-
async save() {
|
|
211
|
-
try {
|
|
212
|
-
await ensureDir(getGlobalCompassDir());
|
|
213
|
-
await safeWriteFile(this.storagePath, JSON.stringify(this.storage, null, 2));
|
|
214
|
-
}
|
|
215
|
-
catch (error) {
|
|
216
|
-
logger.error('Failed to save OAuth storage', error);
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
/**
|
|
220
|
-
* Gets authentication state for a server.
|
|
221
|
-
*/
|
|
222
|
-
getAuthState(serverName, oauthConfig) {
|
|
223
|
-
const tokens = this.storage.tokens[serverName];
|
|
224
|
-
const authenticated = !!tokens && this.isTokenValid(tokens);
|
|
225
|
-
return {
|
|
226
|
-
serverName,
|
|
227
|
-
required: !!oauthConfig,
|
|
228
|
-
authenticated,
|
|
229
|
-
oauth: oauthConfig,
|
|
230
|
-
tokens: authenticated ? tokens : undefined,
|
|
231
|
-
method: oauthConfig ? 'oauth' : 'none',
|
|
232
|
-
};
|
|
233
|
-
}
|
|
234
|
-
/**
|
|
235
|
-
* Checks if tokens are valid (not expired).
|
|
236
|
-
*/
|
|
237
|
-
isTokenValid(tokens) {
|
|
238
|
-
if (!tokens.expiresAt) {
|
|
239
|
-
return true; // No expiration means always valid
|
|
240
|
-
}
|
|
241
|
-
const expiresAt = new Date(tokens.expiresAt);
|
|
242
|
-
const now = new Date();
|
|
243
|
-
// Consider token expired 5 minutes early to allow for refresh
|
|
244
|
-
return expiresAt.getTime() - 5 * 60 * 1000 > now.getTime();
|
|
245
|
-
}
|
|
246
|
-
/**
|
|
247
|
-
* Gets stored tokens for a server.
|
|
248
|
-
*/
|
|
249
|
-
getTokens(serverName) {
|
|
250
|
-
return this.storage.tokens[serverName];
|
|
251
|
-
}
|
|
252
|
-
/**
|
|
253
|
-
* Starts the OAuth authorization flow.
|
|
254
|
-
*/
|
|
255
|
-
async startAuthFlow(serverName, oauthConfig) {
|
|
256
|
-
if (!oauthConfig.authorizationUrl || !oauthConfig.clientId) {
|
|
257
|
-
return {
|
|
258
|
-
authUrl: '',
|
|
259
|
-
error: 'OAuth configuration incomplete: missing authorizationUrl or clientId',
|
|
260
|
-
};
|
|
261
|
-
}
|
|
262
|
-
try {
|
|
263
|
-
// Start callback server if not running
|
|
264
|
-
await this.startCallbackServer();
|
|
265
|
-
// Generate PKCE code verifier and challenge
|
|
266
|
-
const codeVerifier = this.generateCodeVerifier();
|
|
267
|
-
const codeChallenge = this.generateCodeChallenge(codeVerifier);
|
|
268
|
-
// Generate state for CSRF protection
|
|
269
|
-
const state = randomBytes(16).toString('hex');
|
|
270
|
-
// Store pending auth state
|
|
271
|
-
this.pendingAuths.set(state, {
|
|
272
|
-
serverName,
|
|
273
|
-
state,
|
|
274
|
-
codeVerifier,
|
|
275
|
-
createdAt: new Date(),
|
|
276
|
-
});
|
|
277
|
-
// Build authorization URL
|
|
278
|
-
const authUrl = new URL(oauthConfig.authorizationUrl);
|
|
279
|
-
authUrl.searchParams.set('client_id', oauthConfig.clientId);
|
|
280
|
-
authUrl.searchParams.set('response_type', 'code');
|
|
281
|
-
authUrl.searchParams.set('redirect_uri', this.getRedirectUri());
|
|
282
|
-
authUrl.searchParams.set('state', state);
|
|
283
|
-
authUrl.searchParams.set('code_challenge', codeChallenge);
|
|
284
|
-
authUrl.searchParams.set('code_challenge_method', 'S256');
|
|
285
|
-
if (oauthConfig.scopes?.length) {
|
|
286
|
-
authUrl.searchParams.set('scope', oauthConfig.scopes.join(' '));
|
|
287
|
-
}
|
|
288
|
-
logger.info(`Starting OAuth flow for ${serverName}`);
|
|
289
|
-
return { authUrl: authUrl.toString() };
|
|
290
|
-
}
|
|
291
|
-
catch (error) {
|
|
292
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
293
|
-
logger.error(`Failed to start OAuth flow for ${serverName}:`, error);
|
|
294
|
-
return { authUrl: '', error: errorMessage };
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
/**
|
|
298
|
-
* Starts the local callback server for OAuth redirects.
|
|
299
|
-
*/
|
|
300
|
-
async startCallbackServer() {
|
|
301
|
-
if (this.callbackServer) {
|
|
302
|
-
return;
|
|
303
|
-
}
|
|
304
|
-
return new Promise((resolve, reject) => {
|
|
305
|
-
this.callbackServer = createServer(this.handleCallback.bind(this));
|
|
306
|
-
this.callbackServer.on('error', (error) => {
|
|
307
|
-
if (error.code === 'EADDRINUSE') {
|
|
308
|
-
// Try next port
|
|
309
|
-
this.callbackPort++;
|
|
310
|
-
this.callbackServer = null;
|
|
311
|
-
this.startCallbackServer().then(resolve).catch(reject);
|
|
312
|
-
}
|
|
313
|
-
else {
|
|
314
|
-
reject(error);
|
|
315
|
-
}
|
|
316
|
-
});
|
|
317
|
-
this.callbackServer.listen(this.callbackPort, '127.0.0.1', () => {
|
|
318
|
-
logger.debug(`OAuth callback server listening on port ${this.callbackPort}`);
|
|
319
|
-
resolve();
|
|
320
|
-
});
|
|
321
|
-
});
|
|
322
|
-
}
|
|
323
|
-
/**
|
|
324
|
-
* Handles OAuth callback requests.
|
|
325
|
-
*/
|
|
326
|
-
async handleCallback(req, res) {
|
|
327
|
-
try {
|
|
328
|
-
const url = new URL(req.url || '', `http://127.0.0.1:${this.callbackPort}`);
|
|
329
|
-
if (url.pathname !== '/oauth/callback') {
|
|
330
|
-
res.writeHead(404);
|
|
331
|
-
res.end('Not found');
|
|
332
|
-
return;
|
|
333
|
-
}
|
|
334
|
-
const code = url.searchParams.get('code');
|
|
335
|
-
const state = url.searchParams.get('state');
|
|
336
|
-
const error = url.searchParams.get('error');
|
|
337
|
-
if (error) {
|
|
338
|
-
res.writeHead(400);
|
|
339
|
-
res.end(`OAuth error: ${error}`);
|
|
340
|
-
return;
|
|
341
|
-
}
|
|
342
|
-
if (!code || !state) {
|
|
343
|
-
res.writeHead(400);
|
|
344
|
-
res.end('Missing code or state parameter');
|
|
345
|
-
return;
|
|
346
|
-
}
|
|
347
|
-
const pendingAuth = this.pendingAuths.get(state);
|
|
348
|
-
if (!pendingAuth) {
|
|
349
|
-
res.writeHead(400);
|
|
350
|
-
res.end('Invalid state parameter');
|
|
351
|
-
return;
|
|
352
|
-
}
|
|
353
|
-
// Clean up pending auth
|
|
354
|
-
this.pendingAuths.delete(state);
|
|
355
|
-
// Display success page
|
|
356
|
-
res.writeHead(200, { 'Content-Type': 'text/html' });
|
|
357
|
-
res.end(`
|
|
358
|
-
<!DOCTYPE html>
|
|
359
|
-
<html>
|
|
360
|
-
<head>
|
|
361
|
-
<title>Compass CLI - OAuth Success</title>
|
|
362
|
-
<style>
|
|
363
|
-
body { font-family: -apple-system, BlinkMacSystemFont, sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; background: #1a1a2e; color: #eee; }
|
|
364
|
-
.container { text-align: center; padding: 2rem; }
|
|
365
|
-
h1 { color: #4ade80; }
|
|
366
|
-
p { color: #9ca3af; }
|
|
367
|
-
</style>
|
|
368
|
-
</head>
|
|
369
|
-
<body>
|
|
370
|
-
<div class="container">
|
|
371
|
-
<h1>Authentication Successful</h1>
|
|
372
|
-
<p>You can close this window and return to Compass CLI.</p>
|
|
373
|
-
</div>
|
|
374
|
-
</body>
|
|
375
|
-
</html>
|
|
376
|
-
`);
|
|
377
|
-
// Store the auth code for later exchange
|
|
378
|
-
// The code exchange happens separately via completeAuthFlow
|
|
379
|
-
this.pendingAuths.set(`code:${pendingAuth.serverName}`, {
|
|
380
|
-
...pendingAuth,
|
|
381
|
-
state: code, // Temporarily store code in state field
|
|
382
|
-
});
|
|
383
|
-
logger.info(`OAuth callback received for ${pendingAuth.serverName}`);
|
|
384
|
-
}
|
|
385
|
-
catch (error) {
|
|
386
|
-
logger.error('Error handling OAuth callback:', error);
|
|
387
|
-
res.writeHead(500);
|
|
388
|
-
res.end('Internal server error');
|
|
389
|
-
}
|
|
390
|
-
}
|
|
391
|
-
/**
|
|
392
|
-
* Completes the OAuth flow by exchanging the code for tokens.
|
|
393
|
-
*/
|
|
394
|
-
async completeAuthFlow(serverName, oauthConfig) {
|
|
395
|
-
const pendingKey = `code:${serverName}`;
|
|
396
|
-
const pendingAuth = this.pendingAuths.get(pendingKey);
|
|
397
|
-
if (!pendingAuth) {
|
|
398
|
-
return {
|
|
399
|
-
success: false,
|
|
400
|
-
error: 'No pending OAuth flow for this server',
|
|
401
|
-
};
|
|
402
|
-
}
|
|
403
|
-
const code = pendingAuth.state;
|
|
404
|
-
const codeVerifier = pendingAuth.codeVerifier;
|
|
405
|
-
this.pendingAuths.delete(pendingKey);
|
|
406
|
-
if (!oauthConfig.tokenUrl) {
|
|
407
|
-
return {
|
|
408
|
-
success: false,
|
|
409
|
-
error: 'OAuth configuration incomplete: missing tokenUrl',
|
|
410
|
-
};
|
|
411
|
-
}
|
|
412
|
-
try {
|
|
413
|
-
// Exchange code for tokens
|
|
414
|
-
const tokenParams = new URLSearchParams();
|
|
415
|
-
tokenParams.set('grant_type', 'authorization_code');
|
|
416
|
-
tokenParams.set('client_id', oauthConfig.clientId || '');
|
|
417
|
-
tokenParams.set('code', code);
|
|
418
|
-
tokenParams.set('redirect_uri', this.getRedirectUri());
|
|
419
|
-
tokenParams.set('code_verifier', codeVerifier);
|
|
420
|
-
if (oauthConfig.clientSecret) {
|
|
421
|
-
tokenParams.set('client_secret', oauthConfig.clientSecret);
|
|
422
|
-
}
|
|
423
|
-
const response = await fetch(oauthConfig.tokenUrl, {
|
|
424
|
-
method: 'POST',
|
|
425
|
-
headers: {
|
|
426
|
-
'Content-Type': 'application/x-www-form-urlencoded',
|
|
427
|
-
},
|
|
428
|
-
body: tokenParams.toString(),
|
|
429
|
-
});
|
|
430
|
-
if (!response.ok) {
|
|
431
|
-
const errorText = await response.text();
|
|
432
|
-
return {
|
|
433
|
-
success: false,
|
|
434
|
-
error: `Token exchange failed: ${response.status} ${errorText}`,
|
|
435
|
-
};
|
|
436
|
-
}
|
|
437
|
-
const tokenData = (await response.json());
|
|
438
|
-
// Store tokens
|
|
439
|
-
const tokens = {
|
|
440
|
-
accessToken: tokenData.access_token,
|
|
441
|
-
tokenType: tokenData.token_type || 'Bearer',
|
|
442
|
-
refreshToken: tokenData.refresh_token,
|
|
443
|
-
expiresAt: tokenData.expires_in
|
|
444
|
-
? new Date(Date.now() + tokenData.expires_in * 1000)
|
|
445
|
-
: undefined,
|
|
446
|
-
scopes: tokenData.scope?.split(' '),
|
|
447
|
-
};
|
|
448
|
-
this.storage.tokens[serverName] = tokens;
|
|
449
|
-
await this.save();
|
|
450
|
-
logger.info(`OAuth flow completed for ${serverName}`);
|
|
451
|
-
return { success: true };
|
|
452
|
-
}
|
|
453
|
-
catch (error) {
|
|
454
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
455
|
-
logger.error(`Failed to complete OAuth flow for ${serverName}:`, error);
|
|
456
|
-
return { success: false, error: errorMessage };
|
|
457
|
-
}
|
|
458
|
-
}
|
|
459
|
-
/**
|
|
460
|
-
* Refreshes tokens for a server.
|
|
461
|
-
*/
|
|
462
|
-
async refreshTokens(serverName, oauthConfig) {
|
|
463
|
-
const existingTokens = this.storage.tokens[serverName];
|
|
464
|
-
if (!existingTokens?.refreshToken) {
|
|
465
|
-
return {
|
|
466
|
-
success: false,
|
|
467
|
-
error: 'No refresh token available',
|
|
468
|
-
};
|
|
469
|
-
}
|
|
470
|
-
if (!oauthConfig.tokenUrl) {
|
|
471
|
-
return {
|
|
472
|
-
success: false,
|
|
473
|
-
error: 'OAuth configuration incomplete: missing tokenUrl',
|
|
474
|
-
};
|
|
475
|
-
}
|
|
476
|
-
try {
|
|
477
|
-
const tokenParams = new URLSearchParams();
|
|
478
|
-
tokenParams.set('grant_type', 'refresh_token');
|
|
479
|
-
tokenParams.set('client_id', oauthConfig.clientId || '');
|
|
480
|
-
tokenParams.set('refresh_token', existingTokens.refreshToken);
|
|
481
|
-
if (oauthConfig.clientSecret) {
|
|
482
|
-
tokenParams.set('client_secret', oauthConfig.clientSecret);
|
|
483
|
-
}
|
|
484
|
-
const response = await fetch(oauthConfig.tokenUrl, {
|
|
485
|
-
method: 'POST',
|
|
486
|
-
headers: {
|
|
487
|
-
'Content-Type': 'application/x-www-form-urlencoded',
|
|
488
|
-
},
|
|
489
|
-
body: tokenParams.toString(),
|
|
490
|
-
});
|
|
491
|
-
if (!response.ok) {
|
|
492
|
-
const errorText = await response.text();
|
|
493
|
-
return {
|
|
494
|
-
success: false,
|
|
495
|
-
error: `Token refresh failed: ${response.status} ${errorText}`,
|
|
496
|
-
};
|
|
497
|
-
}
|
|
498
|
-
const tokenData = (await response.json());
|
|
499
|
-
// Update tokens
|
|
500
|
-
this.storage.tokens[serverName] = {
|
|
501
|
-
accessToken: tokenData.access_token,
|
|
502
|
-
tokenType: tokenData.token_type || 'Bearer',
|
|
503
|
-
refreshToken: tokenData.refresh_token || existingTokens.refreshToken,
|
|
504
|
-
expiresAt: tokenData.expires_in
|
|
505
|
-
? new Date(Date.now() + tokenData.expires_in * 1000)
|
|
506
|
-
: undefined,
|
|
507
|
-
scopes: tokenData.scope?.split(' ') || existingTokens.scopes,
|
|
508
|
-
};
|
|
509
|
-
await this.save();
|
|
510
|
-
logger.debug(`Tokens refreshed for ${serverName}`);
|
|
511
|
-
return { success: true };
|
|
512
|
-
}
|
|
513
|
-
catch (error) {
|
|
514
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
515
|
-
logger.error(`Failed to refresh tokens for ${serverName}:`, error);
|
|
516
|
-
return { success: false, error: errorMessage };
|
|
517
|
-
}
|
|
518
|
-
}
|
|
519
|
-
/**
|
|
520
|
-
* Clears authentication for a server.
|
|
521
|
-
*/
|
|
522
|
-
async clearAuth(serverName) {
|
|
523
|
-
delete this.storage.tokens[serverName];
|
|
524
|
-
if (this.storage.apiTokens) {
|
|
525
|
-
delete this.storage.apiTokens[serverName];
|
|
526
|
-
}
|
|
527
|
-
await this.save();
|
|
528
|
-
logger.info(`Cleared authentication for ${serverName}`);
|
|
529
|
-
}
|
|
530
|
-
/**
|
|
531
|
-
* Sets a simple API token for a server (non-OAuth authentication).
|
|
532
|
-
* Used for servers that accept Bearer tokens or API keys directly.
|
|
533
|
-
*/
|
|
534
|
-
async setApiToken(serverName, token) {
|
|
535
|
-
if (!this.storage.apiTokens) {
|
|
536
|
-
this.storage.apiTokens = {};
|
|
537
|
-
}
|
|
538
|
-
this.storage.apiTokens[serverName] = token;
|
|
539
|
-
await this.save();
|
|
540
|
-
logger.info(`Stored API token for ${serverName}`);
|
|
541
|
-
}
|
|
542
|
-
/**
|
|
543
|
-
* Gets a simple API token for a server.
|
|
544
|
-
*/
|
|
545
|
-
getApiToken(serverName) {
|
|
546
|
-
return this.storage.apiTokens?.[serverName];
|
|
547
|
-
}
|
|
548
|
-
/**
|
|
549
|
-
* Checks if a server has any form of stored authentication (OAuth or API token).
|
|
550
|
-
*/
|
|
551
|
-
hasStoredAuth(serverName) {
|
|
552
|
-
const hasOAuth = !!this.storage.tokens[serverName] && this.isTokenValid(this.storage.tokens[serverName]);
|
|
553
|
-
const hasApiToken = !!this.storage.apiTokens?.[serverName];
|
|
554
|
-
return hasOAuth || hasApiToken;
|
|
555
|
-
}
|
|
556
|
-
/**
|
|
557
|
-
* Gets the OAuth redirect URI.
|
|
558
|
-
*/
|
|
559
|
-
getRedirectUri() {
|
|
560
|
-
return `http://127.0.0.1:${this.callbackPort}/oauth/callback`;
|
|
561
|
-
}
|
|
562
|
-
/**
|
|
563
|
-
* Generates a PKCE code verifier.
|
|
564
|
-
*/
|
|
565
|
-
generateCodeVerifier() {
|
|
566
|
-
return randomBytes(32)
|
|
567
|
-
.toString('base64')
|
|
568
|
-
.replace(/\+/g, '-')
|
|
569
|
-
.replace(/\//g, '_')
|
|
570
|
-
.replace(/=/g, '');
|
|
571
|
-
}
|
|
572
|
-
/**
|
|
573
|
-
* Generates a PKCE code challenge from verifier.
|
|
574
|
-
*/
|
|
575
|
-
generateCodeChallenge(verifier) {
|
|
576
|
-
return createHash('sha256')
|
|
577
|
-
.update(verifier)
|
|
578
|
-
.digest('base64')
|
|
579
|
-
.replace(/\+/g, '-')
|
|
580
|
-
.replace(/\//g, '_')
|
|
581
|
-
.replace(/=/g, '');
|
|
582
|
-
}
|
|
583
|
-
/**
|
|
584
|
-
* Gets authorization header for a server.
|
|
585
|
-
* Checks OAuth tokens first, then falls back to simple API tokens.
|
|
586
|
-
*/
|
|
587
|
-
getAuthHeader(serverName) {
|
|
588
|
-
logger.debug(`getAuthHeader called for server: ${serverName}`);
|
|
589
|
-
logger.debug(`Available token keys: ${Object.keys(this.storage.tokens || {}).join(', ') || 'none'}`);
|
|
590
|
-
logger.debug(`Available API token keys: ${Object.keys(this.storage.apiTokens || {}).join(', ') || 'none'}`);
|
|
591
|
-
// First check OAuth tokens
|
|
592
|
-
const tokens = this.storage.tokens[serverName];
|
|
593
|
-
if (tokens) {
|
|
594
|
-
logger.debug(`Found OAuth token for ${serverName}, valid: ${this.isTokenValid(tokens)}`);
|
|
595
|
-
if (this.isTokenValid(tokens)) {
|
|
596
|
-
// Normalize token type to "Bearer" (capitalized) as per RFC 6750
|
|
597
|
-
// Some servers return lowercase "bearer" but expect capitalized in requests
|
|
598
|
-
const tokenType = tokens.tokenType?.toLowerCase() === 'bearer' ? 'Bearer' : tokens.tokenType;
|
|
599
|
-
logger.debug(`Returning OAuth auth header for ${serverName} with tokenType: ${tokenType}`);
|
|
600
|
-
return `${tokenType} ${tokens.accessToken}`;
|
|
601
|
-
}
|
|
602
|
-
}
|
|
603
|
-
// Fall back to simple API token
|
|
604
|
-
const apiToken = this.storage.apiTokens?.[serverName];
|
|
605
|
-
if (apiToken) {
|
|
606
|
-
logger.debug(`Returning API token auth header for ${serverName}`);
|
|
607
|
-
return `Bearer ${apiToken}`;
|
|
608
|
-
}
|
|
609
|
-
logger.debug(`No auth header found for ${serverName}`);
|
|
610
|
-
return undefined;
|
|
611
|
-
}
|
|
612
|
-
/**
|
|
613
|
-
* Discovers OAuth configuration from a server URL using RFC 8414.
|
|
614
|
-
* Tries multiple well-known endpoints to find OAuth metadata.
|
|
615
|
-
*/
|
|
616
|
-
async discoverOAuthConfig(serverUrl) {
|
|
617
|
-
const baseUrl = new URL(serverUrl);
|
|
618
|
-
const origin = baseUrl.origin;
|
|
619
|
-
// Try different well-known OAuth discovery endpoints
|
|
620
|
-
const discoveryEndpoints = [
|
|
621
|
-
`${origin}/.well-known/oauth-authorization-server`,
|
|
622
|
-
`${origin}/.well-known/openid-configuration`,
|
|
623
|
-
];
|
|
624
|
-
for (const endpoint of discoveryEndpoints) {
|
|
625
|
-
try {
|
|
626
|
-
logger.debug(`Trying OAuth discovery at: ${endpoint}`);
|
|
627
|
-
const response = await fetch(endpoint, {
|
|
628
|
-
method: 'GET',
|
|
629
|
-
headers: { 'Accept': 'application/json' },
|
|
630
|
-
});
|
|
631
|
-
if (response.ok) {
|
|
632
|
-
const metadata = (await response.json());
|
|
633
|
-
logger.debug(`OAuth discovery response from ${endpoint}: ${JSON.stringify(metadata)}`);
|
|
634
|
-
if (metadata.authorization_endpoint && metadata.token_endpoint) {
|
|
635
|
-
logger.info(`Discovered OAuth config from ${endpoint}`);
|
|
636
|
-
return {
|
|
637
|
-
authorizationUrl: metadata.authorization_endpoint,
|
|
638
|
-
tokenUrl: metadata.token_endpoint,
|
|
639
|
-
scopes: metadata.scopes_supported,
|
|
640
|
-
// Note: clientId needs to be registered or dynamically obtained
|
|
641
|
-
// Some servers support dynamic client registration
|
|
642
|
-
};
|
|
643
|
-
}
|
|
644
|
-
}
|
|
645
|
-
}
|
|
646
|
-
catch (error) {
|
|
647
|
-
logger.debug(`OAuth discovery failed at ${endpoint}:`, error);
|
|
648
|
-
}
|
|
649
|
-
}
|
|
650
|
-
return null;
|
|
651
|
-
}
|
|
652
|
-
/**
|
|
653
|
-
* Starts OAuth flow with automatic discovery if no config is provided.
|
|
654
|
-
* This handles servers that support standard OAuth discovery.
|
|
655
|
-
*
|
|
656
|
-
* Config priority (highest to lowest):
|
|
657
|
-
* 1. User-provided config in .mcp.json
|
|
658
|
-
* 2. Built-in known config for the server (Kore-CLI registered apps)
|
|
659
|
-
* 3. Discovered config from server's well-known endpoint
|
|
660
|
-
*/
|
|
661
|
-
async startAuthFlowWithDiscovery(serverName, serverUrl, providedConfig) {
|
|
662
|
-
// Check for built-in known OAuth config for this server
|
|
663
|
-
const knownConfig = getKnownOAuthConfig(serverUrl);
|
|
664
|
-
if (knownConfig) {
|
|
665
|
-
logger.info(`Using built-in Kore-CLI OAuth credentials for ${serverName}`);
|
|
666
|
-
}
|
|
667
|
-
// Merge configs: user-provided > known > discovered
|
|
668
|
-
// Start with provided config as base
|
|
669
|
-
let oauthConfig = providedConfig;
|
|
670
|
-
// If no OAuth URLs provided, try to discover them
|
|
671
|
-
if (!oauthConfig?.authorizationUrl) {
|
|
672
|
-
logger.info(`Discovering OAuth endpoints for ${serverName}...`);
|
|
673
|
-
const discovered = await this.discoverOAuthConfig(serverUrl);
|
|
674
|
-
if (discovered) {
|
|
675
|
-
// Merge priority: discovered URLs/scopes > known credentials > user overrides
|
|
676
|
-
// Key: Use discovered URLs and scopes, but use our clientId/clientSecret
|
|
677
|
-
oauthConfig = {
|
|
678
|
-
// Start with known credentials (clientId, clientSecret)
|
|
679
|
-
clientId: knownConfig?.clientId,
|
|
680
|
-
clientSecret: knownConfig?.clientSecret,
|
|
681
|
-
// Use discovered URLs and scopes (server-specific)
|
|
682
|
-
authorizationUrl: discovered.authorizationUrl,
|
|
683
|
-
tokenUrl: discovered.tokenUrl,
|
|
684
|
-
scopes: discovered.scopes, // Use server's supported scopes
|
|
685
|
-
// Allow user overrides for everything
|
|
686
|
-
...providedConfig,
|
|
687
|
-
};
|
|
688
|
-
logger.debug(`Merged OAuth config: authUrl=${oauthConfig.authorizationUrl}, scopes=${oauthConfig.scopes?.join(',')}`);
|
|
689
|
-
logger.info(`Using discovered OAuth config for ${serverName}`);
|
|
690
|
-
}
|
|
691
|
-
else if (knownConfig?.clientId) {
|
|
692
|
-
// No discovery, but we have known credentials - use hardcoded URLs as fallback
|
|
693
|
-
oauthConfig = { ...knownConfig, ...providedConfig };
|
|
694
|
-
logger.debug(`Using hardcoded OAuth config for ${serverName}`);
|
|
695
|
-
}
|
|
696
|
-
else {
|
|
697
|
-
return {
|
|
698
|
-
authUrl: '',
|
|
699
|
-
error: 'Could not discover OAuth configuration. Server may require manual token authentication.',
|
|
700
|
-
};
|
|
701
|
-
}
|
|
702
|
-
}
|
|
703
|
-
else {
|
|
704
|
-
// User provided URLs, just merge with known credentials if available
|
|
705
|
-
oauthConfig = {
|
|
706
|
-
clientId: knownConfig?.clientId,
|
|
707
|
-
clientSecret: knownConfig?.clientSecret,
|
|
708
|
-
...providedConfig,
|
|
709
|
-
};
|
|
710
|
-
}
|
|
711
|
-
// Check if we have the minimum required config
|
|
712
|
-
if (!oauthConfig.authorizationUrl) {
|
|
713
|
-
return {
|
|
714
|
-
authUrl: '',
|
|
715
|
-
error: 'OAuth configuration incomplete: missing authorizationUrl',
|
|
716
|
-
};
|
|
717
|
-
}
|
|
718
|
-
// For servers without a pre-registered client, we may need dynamic registration
|
|
719
|
-
// or the server may accept requests without a client_id (public client)
|
|
720
|
-
const clientId = oauthConfig.clientId || 'compass-cli';
|
|
721
|
-
try {
|
|
722
|
-
// Start callback server if not running
|
|
723
|
-
await this.startCallbackServer();
|
|
724
|
-
// Generate PKCE code verifier and challenge
|
|
725
|
-
const codeVerifier = this.generateCodeVerifier();
|
|
726
|
-
const codeChallenge = this.generateCodeChallenge(codeVerifier);
|
|
727
|
-
// Generate state for CSRF protection
|
|
728
|
-
const state = randomBytes(16).toString('hex');
|
|
729
|
-
// Store pending auth state
|
|
730
|
-
this.pendingAuths.set(state, {
|
|
731
|
-
serverName,
|
|
732
|
-
state,
|
|
733
|
-
codeVerifier,
|
|
734
|
-
createdAt: new Date(),
|
|
735
|
-
});
|
|
736
|
-
// Build authorization URL
|
|
737
|
-
const authUrl = new URL(oauthConfig.authorizationUrl);
|
|
738
|
-
authUrl.searchParams.set('client_id', clientId);
|
|
739
|
-
authUrl.searchParams.set('response_type', 'code');
|
|
740
|
-
authUrl.searchParams.set('redirect_uri', this.getRedirectUri());
|
|
741
|
-
authUrl.searchParams.set('state', state);
|
|
742
|
-
authUrl.searchParams.set('code_challenge', codeChallenge);
|
|
743
|
-
authUrl.searchParams.set('code_challenge_method', 'S256');
|
|
744
|
-
if (oauthConfig.scopes?.length) {
|
|
745
|
-
authUrl.searchParams.set('scope', oauthConfig.scopes.join(' '));
|
|
746
|
-
}
|
|
747
|
-
logger.info(`Starting OAuth flow for ${serverName}`);
|
|
748
|
-
return {
|
|
749
|
-
authUrl: authUrl.toString(),
|
|
750
|
-
discoveredConfig: oauthConfig,
|
|
751
|
-
};
|
|
752
|
-
}
|
|
753
|
-
catch (error) {
|
|
754
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
755
|
-
logger.error(`Failed to start OAuth flow for ${serverName}:`, error);
|
|
756
|
-
return { authUrl: '', error: errorMessage };
|
|
757
|
-
}
|
|
758
|
-
}
|
|
759
|
-
/**
|
|
760
|
-
* Completes OAuth flow with discovered config.
|
|
761
|
-
*/
|
|
762
|
-
async completeAuthFlowWithConfig(serverName, oauthConfig) {
|
|
763
|
-
const pendingKey = `code:${serverName}`;
|
|
764
|
-
const pendingAuth = this.pendingAuths.get(pendingKey);
|
|
765
|
-
if (!pendingAuth) {
|
|
766
|
-
return {
|
|
767
|
-
success: false,
|
|
768
|
-
error: 'No pending OAuth flow for this server',
|
|
769
|
-
};
|
|
770
|
-
}
|
|
771
|
-
const code = pendingAuth.state;
|
|
772
|
-
const codeVerifier = pendingAuth.codeVerifier;
|
|
773
|
-
this.pendingAuths.delete(pendingKey);
|
|
774
|
-
if (!oauthConfig.tokenUrl) {
|
|
775
|
-
return {
|
|
776
|
-
success: false,
|
|
777
|
-
error: 'OAuth configuration incomplete: missing tokenUrl',
|
|
778
|
-
};
|
|
779
|
-
}
|
|
780
|
-
const clientId = oauthConfig.clientId || 'compass-cli';
|
|
781
|
-
try {
|
|
782
|
-
// Exchange code for tokens
|
|
783
|
-
const tokenParams = new URLSearchParams();
|
|
784
|
-
tokenParams.set('grant_type', 'authorization_code');
|
|
785
|
-
tokenParams.set('code', code);
|
|
786
|
-
tokenParams.set('redirect_uri', this.getRedirectUri());
|
|
787
|
-
tokenParams.set('code_verifier', codeVerifier);
|
|
788
|
-
// Build headers - use Basic Auth if we have client credentials (required by some servers like Figma)
|
|
789
|
-
const headers = {
|
|
790
|
-
'Content-Type': 'application/x-www-form-urlencoded',
|
|
791
|
-
};
|
|
792
|
-
if (oauthConfig.clientId && oauthConfig.clientSecret) {
|
|
793
|
-
// Use HTTP Basic Authentication for client credentials
|
|
794
|
-
const credentials = Buffer.from(`${clientId}:${oauthConfig.clientSecret}`).toString('base64');
|
|
795
|
-
headers['Authorization'] = `Basic ${credentials}`;
|
|
796
|
-
}
|
|
797
|
-
else {
|
|
798
|
-
// Fallback: include client_id in body for servers that don't use Basic Auth
|
|
799
|
-
tokenParams.set('client_id', clientId);
|
|
800
|
-
if (oauthConfig.clientSecret) {
|
|
801
|
-
tokenParams.set('client_secret', oauthConfig.clientSecret);
|
|
802
|
-
}
|
|
803
|
-
}
|
|
804
|
-
const response = await fetch(oauthConfig.tokenUrl, {
|
|
805
|
-
method: 'POST',
|
|
806
|
-
headers,
|
|
807
|
-
body: tokenParams.toString(),
|
|
808
|
-
});
|
|
809
|
-
if (!response.ok) {
|
|
810
|
-
const errorText = await response.text();
|
|
811
|
-
return {
|
|
812
|
-
success: false,
|
|
813
|
-
error: `Token exchange failed: ${response.status} ${errorText}`,
|
|
814
|
-
};
|
|
815
|
-
}
|
|
816
|
-
const tokenData = (await response.json());
|
|
817
|
-
// Store tokens
|
|
818
|
-
const tokens = {
|
|
819
|
-
accessToken: tokenData.access_token,
|
|
820
|
-
tokenType: tokenData.token_type || 'Bearer',
|
|
821
|
-
refreshToken: tokenData.refresh_token,
|
|
822
|
-
expiresAt: tokenData.expires_in
|
|
823
|
-
? new Date(Date.now() + tokenData.expires_in * 1000)
|
|
824
|
-
: undefined,
|
|
825
|
-
scopes: tokenData.scope?.split(' '),
|
|
826
|
-
};
|
|
827
|
-
this.storage.tokens[serverName] = tokens;
|
|
828
|
-
await this.save();
|
|
829
|
-
logger.info(`OAuth flow completed for ${serverName}`);
|
|
830
|
-
logger.debug(`Stored token for ${serverName}, tokenType: ${tokens.tokenType}, hasAccessToken: ${!!tokens.accessToken}`);
|
|
831
|
-
logger.debug(`Current storage token keys: ${Object.keys(this.storage.tokens).join(', ')}`);
|
|
832
|
-
return { success: true };
|
|
833
|
-
}
|
|
834
|
-
catch (error) {
|
|
835
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
836
|
-
logger.error(`Failed to complete OAuth flow for ${serverName}:`, error);
|
|
837
|
-
return { success: false, error: errorMessage };
|
|
838
|
-
}
|
|
839
|
-
}
|
|
840
|
-
/**
|
|
841
|
-
* Stops the callback server.
|
|
842
|
-
*/
|
|
843
|
-
async stopCallbackServer() {
|
|
844
|
-
if (this.callbackServer) {
|
|
845
|
-
return new Promise((resolve) => {
|
|
846
|
-
this.callbackServer.close(() => {
|
|
847
|
-
this.callbackServer = null;
|
|
848
|
-
logger.debug('OAuth callback server stopped');
|
|
849
|
-
resolve();
|
|
850
|
-
});
|
|
851
|
-
});
|
|
852
|
-
}
|
|
853
|
-
}
|
|
854
|
-
/**
|
|
855
|
-
* Cleans up expired pending auth states.
|
|
856
|
-
*/
|
|
857
|
-
cleanupPendingAuths() {
|
|
858
|
-
const now = new Date();
|
|
859
|
-
const maxAge = 10 * 60 * 1000; // 10 minutes
|
|
860
|
-
for (const [key, pending] of this.pendingAuths) {
|
|
861
|
-
if (now.getTime() - pending.createdAt.getTime() > maxAge) {
|
|
862
|
-
this.pendingAuths.delete(key);
|
|
863
|
-
}
|
|
864
|
-
}
|
|
865
|
-
}
|
|
866
|
-
/**
|
|
867
|
-
* Gets all servers with stored authentication.
|
|
868
|
-
*/
|
|
869
|
-
getAuthenticatedServers() {
|
|
870
|
-
return Object.keys(this.storage.tokens).filter((name) => this.isTokenValid(this.storage.tokens[name]));
|
|
871
|
-
}
|
|
872
|
-
}
|
|
873
|
-
// Singleton instance
|
|
874
|
-
let mcpOAuthServiceInstance = null;
|
|
875
|
-
/**
|
|
876
|
-
* Gets the singleton MCPOAuthService instance.
|
|
877
|
-
*/
|
|
878
|
-
export async function getMCPOAuthService() {
|
|
879
|
-
if (!mcpOAuthServiceInstance) {
|
|
880
|
-
mcpOAuthServiceInstance = new MCPOAuthService();
|
|
881
|
-
await mcpOAuthServiceInstance.load();
|
|
882
|
-
}
|
|
883
|
-
return mcpOAuthServiceInstance;
|
|
884
|
-
}
|
|
885
|
-
/**
|
|
886
|
-
* Creates a new MCPOAuthService instance.
|
|
887
|
-
*/
|
|
888
|
-
export function createMCPOAuthService() {
|
|
889
|
-
return new MCPOAuthService();
|
|
890
|
-
}
|
|
891
|
-
export { MCPOAuthService };
|
|
892
|
-
//# sourceMappingURL=mcp-oauth-service.js.map
|