@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,877 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Credential storage service using keytar for system keychain integration
|
|
3
|
-
* with AES-256 encrypted file fallback for API keys.
|
|
4
|
-
*
|
|
5
|
-
* This module provides secure storage for sensitive credentials like API keys,
|
|
6
|
-
* using the system keychain when available (via keytar) and falling back to
|
|
7
|
-
* AES-256 encrypted file storage when the keychain is unavailable.
|
|
8
|
-
*
|
|
9
|
-
* Security features:
|
|
10
|
-
* - System keychain integration via keytar (macOS Keychain, Windows Credential Vault, Linux Secret Service)
|
|
11
|
-
* - AES-256-GCM encryption for file-based fallback
|
|
12
|
-
* - Machine-specific encryption key derivation
|
|
13
|
-
* - Environment variable support for CI/CD environments
|
|
14
|
-
*/
|
|
15
|
-
import path from 'path';
|
|
16
|
-
import os from 'os';
|
|
17
|
-
import crypto from 'crypto';
|
|
18
|
-
import { encrypt, decrypt } from '../utils/crypto.js';
|
|
19
|
-
import { safeReadFile, safeWriteFile, pathExists, remove, ensureDir, } from '../utils/file-system.js';
|
|
20
|
-
import { getGlobalCompassDir } from '../utils/path.js';
|
|
21
|
-
import { logger } from '../utils/logger.js';
|
|
22
|
-
import { CREDENTIALS_FILE_NAME, ENV_VARS, PROVIDER_ENV_VARS, PROVIDERS } from '../constants/defaults.js';
|
|
23
|
-
/**
|
|
24
|
-
* Cached keytar module instance (loaded dynamically to handle missing native deps)
|
|
25
|
-
*/
|
|
26
|
-
let keytarModule = null;
|
|
27
|
-
let keytarLoadAttempted = false;
|
|
28
|
-
/**
|
|
29
|
-
* File name for caching keytar availability probe result.
|
|
30
|
-
* Avoids a write+delete to the system keychain on every startup.
|
|
31
|
-
*/
|
|
32
|
-
const KEYTAR_CACHE_FILE = 'keytar-available.json';
|
|
33
|
-
/**
|
|
34
|
-
* Attempts to load keytar dynamically.
|
|
35
|
-
* Returns null if keytar cannot be loaded (missing native dependencies).
|
|
36
|
-
*/
|
|
37
|
-
async function loadKeytar() {
|
|
38
|
-
if (keytarLoadAttempted) {
|
|
39
|
-
return keytarModule;
|
|
40
|
-
}
|
|
41
|
-
keytarLoadAttempted = true;
|
|
42
|
-
try {
|
|
43
|
-
const keytar = await import('keytar');
|
|
44
|
-
keytarModule = keytar.default || keytar;
|
|
45
|
-
return keytarModule;
|
|
46
|
-
}
|
|
47
|
-
catch (error) {
|
|
48
|
-
logger.debug('Failed to load keytar native module:', error);
|
|
49
|
-
return null;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Service name used for keytar keychain storage
|
|
54
|
-
*/
|
|
55
|
-
const SERVICE_NAME = 'compass-cli';
|
|
56
|
-
/**
|
|
57
|
-
* Account name for the Anthropic API key in keychain
|
|
58
|
-
*/
|
|
59
|
-
const ANTHROPIC_API_KEY_ACCOUNT = 'anthropic-api-key';
|
|
60
|
-
/**
|
|
61
|
-
* Account name for the Compass API key in keychain
|
|
62
|
-
*/
|
|
63
|
-
const COMPASS_API_KEY_ACCOUNT = 'compass-api-key';
|
|
64
|
-
/**
|
|
65
|
-
* Mapping of provider names to keychain account names
|
|
66
|
-
*/
|
|
67
|
-
const PROVIDER_KEYCHAIN_ACCOUNTS = {
|
|
68
|
-
anthropic: 'anthropic-api-key',
|
|
69
|
-
ollama: 'ollama-api-key',
|
|
70
|
-
zai: 'zai-api-key',
|
|
71
|
-
minimax: 'minimax-api-key',
|
|
72
|
-
};
|
|
73
|
-
/**
|
|
74
|
-
* Version identifier for encrypted credentials file format
|
|
75
|
-
*/
|
|
76
|
-
const CREDENTIALS_VERSION = '1.0';
|
|
77
|
-
/**
|
|
78
|
-
* Mapping of provider names to credentials data keys
|
|
79
|
-
*/
|
|
80
|
-
const PROVIDER_CREDENTIALS_KEYS = {
|
|
81
|
-
anthropic: 'anthropicApiKey',
|
|
82
|
-
ollama: 'ollamaApiKey',
|
|
83
|
-
zai: 'zaiApiKey',
|
|
84
|
-
minimax: 'minimaxApiKey',
|
|
85
|
-
};
|
|
86
|
-
/**
|
|
87
|
-
* CredentialStore class provides secure storage for sensitive credentials.
|
|
88
|
-
*
|
|
89
|
-
* It attempts to use the system keychain via keytar for maximum security,
|
|
90
|
-
* and falls back to AES-256 encrypted file storage when the keychain is
|
|
91
|
-
* unavailable (e.g., in headless environments or when keytar fails).
|
|
92
|
-
*
|
|
93
|
-
* Features:
|
|
94
|
-
* - Automatic detection of keychain availability
|
|
95
|
-
* - Transparent fallback to encrypted file storage
|
|
96
|
-
* - Machine-specific encryption key derivation
|
|
97
|
-
* - Environment variable support for CI/CD
|
|
98
|
-
* - API key format validation
|
|
99
|
-
*/
|
|
100
|
-
class CredentialStore {
|
|
101
|
-
useKeytar = true;
|
|
102
|
-
machineKey = null;
|
|
103
|
-
initialized = false;
|
|
104
|
-
/**
|
|
105
|
-
* Initializes the credential store by testing keytar availability.
|
|
106
|
-
* Uses a cached probe result to avoid keychain write+delete on every startup.
|
|
107
|
-
* This should be called before any other operations.
|
|
108
|
-
*/
|
|
109
|
-
async initialize() {
|
|
110
|
-
if (this.initialized) {
|
|
111
|
-
return;
|
|
112
|
-
}
|
|
113
|
-
const platformStamp = `${os.platform()}-${os.arch()}`;
|
|
114
|
-
// Try to read cached probe result first
|
|
115
|
-
try {
|
|
116
|
-
const cachePath = path.join(getGlobalCompassDir(), KEYTAR_CACHE_FILE);
|
|
117
|
-
if (await pathExists(cachePath)) {
|
|
118
|
-
const content = await safeReadFile(cachePath);
|
|
119
|
-
if (content) {
|
|
120
|
-
const cache = JSON.parse(content);
|
|
121
|
-
if (cache.platform === platformStamp) {
|
|
122
|
-
if (cache.available) {
|
|
123
|
-
// Verify keytar module can still be loaded (binary might have been removed)
|
|
124
|
-
const keytar = await loadKeytar();
|
|
125
|
-
if (keytar) {
|
|
126
|
-
this.useKeytar = true;
|
|
127
|
-
this.initialized = true;
|
|
128
|
-
logger.debug('Using system keychain (cached probe)');
|
|
129
|
-
return;
|
|
130
|
-
}
|
|
131
|
-
// Module gone — fall through to full probe
|
|
132
|
-
}
|
|
133
|
-
else {
|
|
134
|
-
// Previously determined unavailable on this platform
|
|
135
|
-
this.useKeytar = false;
|
|
136
|
-
this.machineKey = await this.getMachineKey();
|
|
137
|
-
this.initialized = true;
|
|
138
|
-
logger.debug('Using encrypted file storage (cached probe)');
|
|
139
|
-
return;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
// Platform changed — re-probe
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
catch {
|
|
147
|
-
// Cache unreadable — fall through to full probe
|
|
148
|
-
}
|
|
149
|
-
// Full probe: test keytar with a write+delete
|
|
150
|
-
try {
|
|
151
|
-
const keytar = await loadKeytar();
|
|
152
|
-
if (!keytar) {
|
|
153
|
-
throw new Error('Keytar module not available');
|
|
154
|
-
}
|
|
155
|
-
const testService = `${SERVICE_NAME}-test`;
|
|
156
|
-
const testAccount = 'availability-test';
|
|
157
|
-
await keytar.setPassword(testService, testAccount, 'test');
|
|
158
|
-
await keytar.deletePassword(testService, testAccount);
|
|
159
|
-
this.useKeytar = true;
|
|
160
|
-
logger.debug('Using system keychain for credential storage');
|
|
161
|
-
}
|
|
162
|
-
catch (error) {
|
|
163
|
-
this.useKeytar = false;
|
|
164
|
-
logger.debug('System keychain unavailable, using encrypted file storage', error);
|
|
165
|
-
// Pre-compute machine key for file-based storage
|
|
166
|
-
this.machineKey = await this.getMachineKey();
|
|
167
|
-
}
|
|
168
|
-
this.initialized = true;
|
|
169
|
-
// Persist probe result for next startup (fire-and-forget)
|
|
170
|
-
this.saveKeytarCache(platformStamp).catch(err => {
|
|
171
|
-
logger.debug('Failed to cache keytar probe result', err);
|
|
172
|
-
});
|
|
173
|
-
}
|
|
174
|
-
/**
|
|
175
|
-
* Persists the keytar availability probe result to disk.
|
|
176
|
-
*/
|
|
177
|
-
async saveKeytarCache(platformStamp) {
|
|
178
|
-
const globalDir = getGlobalCompassDir();
|
|
179
|
-
await ensureDir(globalDir);
|
|
180
|
-
const cachePath = path.join(globalDir, KEYTAR_CACHE_FILE);
|
|
181
|
-
const data = {
|
|
182
|
-
available: this.useKeytar,
|
|
183
|
-
platform: platformStamp,
|
|
184
|
-
checkedAt: new Date().toISOString(),
|
|
185
|
-
};
|
|
186
|
-
await safeWriteFile(cachePath, JSON.stringify(data));
|
|
187
|
-
}
|
|
188
|
-
/**
|
|
189
|
-
* Stores the Anthropic API key securely.
|
|
190
|
-
*
|
|
191
|
-
* @param apiKey - The API key to store
|
|
192
|
-
* @throws Error if storage fails
|
|
193
|
-
*
|
|
194
|
-
* @example
|
|
195
|
-
* ```typescript
|
|
196
|
-
* const store = await getCredentialStore();
|
|
197
|
-
* await store.setApiKey('sk-ant-api03-...');
|
|
198
|
-
* ```
|
|
199
|
-
*/
|
|
200
|
-
async setApiKey(apiKey) {
|
|
201
|
-
await this.ensureInitialized();
|
|
202
|
-
if (!apiKey || typeof apiKey !== 'string') {
|
|
203
|
-
throw new Error('API key must be a non-empty string');
|
|
204
|
-
}
|
|
205
|
-
const trimmedKey = apiKey.trim();
|
|
206
|
-
if (this.useKeytar) {
|
|
207
|
-
try {
|
|
208
|
-
const keytar = await loadKeytar();
|
|
209
|
-
if (keytar) {
|
|
210
|
-
await keytar.setPassword(SERVICE_NAME, ANTHROPIC_API_KEY_ACCOUNT, trimmedKey);
|
|
211
|
-
logger.debug('API key stored in system keychain');
|
|
212
|
-
return;
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
catch (error) {
|
|
216
|
-
logger.warn('Failed to store in keychain, falling back to file storage', error);
|
|
217
|
-
// Fall through to file-based storage
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
await this.saveToFile({ anthropicApiKey: trimmedKey });
|
|
221
|
-
logger.debug('API key stored in encrypted file');
|
|
222
|
-
}
|
|
223
|
-
/**
|
|
224
|
-
* Retrieves the stored Anthropic API key.
|
|
225
|
-
*
|
|
226
|
-
* Checks sources in order of precedence:
|
|
227
|
-
* 1. Environment variable (ANTHROPIC_API_KEY)
|
|
228
|
-
* 2. System keychain (if available)
|
|
229
|
-
* 3. Encrypted file storage
|
|
230
|
-
*
|
|
231
|
-
* @returns The API key if found, null otherwise
|
|
232
|
-
*
|
|
233
|
-
* @example
|
|
234
|
-
* ```typescript
|
|
235
|
-
* const store = await getCredentialStore();
|
|
236
|
-
* const apiKey = await store.getApiKey();
|
|
237
|
-
* if (apiKey) {
|
|
238
|
-
* // Use the API key
|
|
239
|
-
* }
|
|
240
|
-
* ```
|
|
241
|
-
*/
|
|
242
|
-
async getApiKey() {
|
|
243
|
-
await this.ensureInitialized();
|
|
244
|
-
// First, check environment variable (highest precedence)
|
|
245
|
-
const envKey = process.env[ENV_VARS.API_KEY];
|
|
246
|
-
if (envKey && envKey.trim()) {
|
|
247
|
-
logger.debug('API key loaded from environment variable');
|
|
248
|
-
return envKey.trim();
|
|
249
|
-
}
|
|
250
|
-
// Try keychain if available
|
|
251
|
-
if (this.useKeytar) {
|
|
252
|
-
try {
|
|
253
|
-
const keytar = await loadKeytar();
|
|
254
|
-
if (keytar) {
|
|
255
|
-
const keychainKey = await keytar.getPassword(SERVICE_NAME, ANTHROPIC_API_KEY_ACCOUNT);
|
|
256
|
-
if (keychainKey) {
|
|
257
|
-
logger.debug('API key loaded from system keychain');
|
|
258
|
-
return keychainKey;
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
catch (error) {
|
|
263
|
-
logger.debug('Failed to read from keychain', error);
|
|
264
|
-
// Fall through to file-based storage
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
// Try file-based storage
|
|
268
|
-
const credentials = await this.loadFromFile();
|
|
269
|
-
if (credentials?.anthropicApiKey) {
|
|
270
|
-
logger.debug('API key loaded from encrypted file');
|
|
271
|
-
return credentials.anthropicApiKey;
|
|
272
|
-
}
|
|
273
|
-
return null;
|
|
274
|
-
}
|
|
275
|
-
/**
|
|
276
|
-
* Deletes the stored API key from all storage locations.
|
|
277
|
-
*
|
|
278
|
-
* @returns True if deletion was successful, false otherwise
|
|
279
|
-
*
|
|
280
|
-
* @example
|
|
281
|
-
* ```typescript
|
|
282
|
-
* const store = await getCredentialStore();
|
|
283
|
-
* const deleted = await store.deleteApiKey();
|
|
284
|
-
* ```
|
|
285
|
-
*/
|
|
286
|
-
async deleteApiKey() {
|
|
287
|
-
await this.ensureInitialized();
|
|
288
|
-
let success = true;
|
|
289
|
-
// Delete from keychain if available
|
|
290
|
-
if (this.useKeytar) {
|
|
291
|
-
try {
|
|
292
|
-
const keytar = await loadKeytar();
|
|
293
|
-
if (keytar) {
|
|
294
|
-
const deleted = await keytar.deletePassword(SERVICE_NAME, ANTHROPIC_API_KEY_ACCOUNT);
|
|
295
|
-
if (deleted) {
|
|
296
|
-
logger.debug('API key deleted from system keychain');
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
catch (error) {
|
|
301
|
-
logger.debug('Failed to delete from keychain', error);
|
|
302
|
-
success = false;
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
// Delete from file storage
|
|
306
|
-
const fileDeleted = await this.deleteFile();
|
|
307
|
-
if (!fileDeleted) {
|
|
308
|
-
success = false;
|
|
309
|
-
}
|
|
310
|
-
if (success) {
|
|
311
|
-
logger.debug('API key deleted successfully');
|
|
312
|
-
}
|
|
313
|
-
return success;
|
|
314
|
-
}
|
|
315
|
-
/**
|
|
316
|
-
* Checks if an API key is currently stored.
|
|
317
|
-
*
|
|
318
|
-
* @returns True if an API key is available (from any source)
|
|
319
|
-
*
|
|
320
|
-
* @example
|
|
321
|
-
* ```typescript
|
|
322
|
-
* const store = await getCredentialStore();
|
|
323
|
-
* if (await store.hasApiKey()) {
|
|
324
|
-
* console.log('API key is configured');
|
|
325
|
-
* }
|
|
326
|
-
* ```
|
|
327
|
-
*/
|
|
328
|
-
async hasApiKey() {
|
|
329
|
-
const key = await this.getApiKey();
|
|
330
|
-
return key !== null && key.length > 0;
|
|
331
|
-
}
|
|
332
|
-
/**
|
|
333
|
-
* Stores the Compass API key securely.
|
|
334
|
-
*
|
|
335
|
-
* @param apiKey - The API key to store
|
|
336
|
-
* @throws Error if storage fails
|
|
337
|
-
*/
|
|
338
|
-
async setCompassApiKey(apiKey) {
|
|
339
|
-
await this.ensureInitialized();
|
|
340
|
-
if (!apiKey || typeof apiKey !== 'string') {
|
|
341
|
-
throw new Error('API key must be a non-empty string');
|
|
342
|
-
}
|
|
343
|
-
const trimmedKey = apiKey.trim();
|
|
344
|
-
if (this.useKeytar) {
|
|
345
|
-
try {
|
|
346
|
-
const keytar = await loadKeytar();
|
|
347
|
-
if (keytar) {
|
|
348
|
-
await keytar.setPassword(SERVICE_NAME, COMPASS_API_KEY_ACCOUNT, trimmedKey);
|
|
349
|
-
logger.debug('Compass API key stored in system keychain');
|
|
350
|
-
return;
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
|
-
catch (error) {
|
|
354
|
-
logger.warn('Failed to store in keychain, falling back to file storage', error);
|
|
355
|
-
// Fall through to file-based storage
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
// Get existing credentials and update compassApiKey
|
|
359
|
-
const existingCredentials = await this.loadFromFile() || {};
|
|
360
|
-
await this.saveToFile({ ...existingCredentials, compassApiKey: trimmedKey });
|
|
361
|
-
logger.debug('Compass API key stored in encrypted file');
|
|
362
|
-
}
|
|
363
|
-
/**
|
|
364
|
-
* Retrieves the stored Compass API key.
|
|
365
|
-
*
|
|
366
|
-
* Checks sources in order of precedence:
|
|
367
|
-
* 1. Environment variable (COMPASS_API_KEY)
|
|
368
|
-
* 2. System keychain (if available)
|
|
369
|
-
* 3. Encrypted file storage
|
|
370
|
-
*
|
|
371
|
-
* @returns The API key if found, null otherwise
|
|
372
|
-
*/
|
|
373
|
-
async getCompassApiKey() {
|
|
374
|
-
await this.ensureInitialized();
|
|
375
|
-
// First, check environment variable (highest precedence)
|
|
376
|
-
const envKey = process.env[ENV_VARS.COMPASS_API_KEY];
|
|
377
|
-
if (envKey && envKey.trim()) {
|
|
378
|
-
logger.debug('Compass API key loaded from environment variable');
|
|
379
|
-
return envKey.trim();
|
|
380
|
-
}
|
|
381
|
-
// Try keychain if available
|
|
382
|
-
if (this.useKeytar) {
|
|
383
|
-
try {
|
|
384
|
-
const keytar = await loadKeytar();
|
|
385
|
-
if (keytar) {
|
|
386
|
-
const keychainKey = await keytar.getPassword(SERVICE_NAME, COMPASS_API_KEY_ACCOUNT);
|
|
387
|
-
if (keychainKey) {
|
|
388
|
-
logger.debug('Compass API key loaded from system keychain');
|
|
389
|
-
return keychainKey;
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
}
|
|
393
|
-
catch (error) {
|
|
394
|
-
logger.debug('Failed to read from keychain', error);
|
|
395
|
-
// Fall through to file-based storage
|
|
396
|
-
}
|
|
397
|
-
}
|
|
398
|
-
// Try file-based storage
|
|
399
|
-
const credentials = await this.loadFromFile();
|
|
400
|
-
if (credentials?.compassApiKey) {
|
|
401
|
-
logger.debug('Compass API key loaded from encrypted file');
|
|
402
|
-
return credentials.compassApiKey;
|
|
403
|
-
}
|
|
404
|
-
return null;
|
|
405
|
-
}
|
|
406
|
-
/**
|
|
407
|
-
* Deletes the stored Compass API key from all storage locations.
|
|
408
|
-
*
|
|
409
|
-
* @returns True if deletion was successful, false otherwise
|
|
410
|
-
*/
|
|
411
|
-
async deleteCompassApiKey() {
|
|
412
|
-
await this.ensureInitialized();
|
|
413
|
-
let success = true;
|
|
414
|
-
// Delete from keychain if available
|
|
415
|
-
if (this.useKeytar) {
|
|
416
|
-
try {
|
|
417
|
-
const keytar = await loadKeytar();
|
|
418
|
-
if (keytar) {
|
|
419
|
-
const deleted = await keytar.deletePassword(SERVICE_NAME, COMPASS_API_KEY_ACCOUNT);
|
|
420
|
-
if (deleted) {
|
|
421
|
-
logger.debug('Compass API key deleted from system keychain');
|
|
422
|
-
}
|
|
423
|
-
}
|
|
424
|
-
}
|
|
425
|
-
catch (error) {
|
|
426
|
-
logger.debug('Failed to delete from keychain', error);
|
|
427
|
-
success = false;
|
|
428
|
-
}
|
|
429
|
-
}
|
|
430
|
-
// Delete from file storage by updating credentials without compassApiKey
|
|
431
|
-
try {
|
|
432
|
-
const existingCredentials = await this.loadFromFile();
|
|
433
|
-
if (existingCredentials?.compassApiKey) {
|
|
434
|
-
delete existingCredentials.compassApiKey;
|
|
435
|
-
await this.saveToFile(existingCredentials);
|
|
436
|
-
logger.debug('Compass API key deleted from encrypted file');
|
|
437
|
-
}
|
|
438
|
-
}
|
|
439
|
-
catch (error) {
|
|
440
|
-
logger.error('Failed to delete Compass API key from file', error);
|
|
441
|
-
success = false;
|
|
442
|
-
}
|
|
443
|
-
if (success) {
|
|
444
|
-
logger.debug('Compass API key deleted successfully');
|
|
445
|
-
}
|
|
446
|
-
return success;
|
|
447
|
-
}
|
|
448
|
-
/**
|
|
449
|
-
* Checks if a Compass API key is currently stored.
|
|
450
|
-
*
|
|
451
|
-
* @returns True if an API key is available (from any source)
|
|
452
|
-
*/
|
|
453
|
-
async hasCompassApiKey() {
|
|
454
|
-
const key = await this.getCompassApiKey();
|
|
455
|
-
return key !== null && key.length > 0;
|
|
456
|
-
}
|
|
457
|
-
// =========================================================================
|
|
458
|
-
// Provider-Specific API Key Methods
|
|
459
|
-
// =========================================================================
|
|
460
|
-
/**
|
|
461
|
-
* Stores an API key for a specific provider.
|
|
462
|
-
*
|
|
463
|
-
* @param provider - The provider name (anthropic, ollama, zai, minimax)
|
|
464
|
-
* @param apiKey - The API key to store
|
|
465
|
-
* @throws Error if storage fails
|
|
466
|
-
*
|
|
467
|
-
* @example
|
|
468
|
-
* ```typescript
|
|
469
|
-
* const store = await getCredentialStore();
|
|
470
|
-
* await store.setProviderApiKey('ollama', 'my-ollama-key');
|
|
471
|
-
* ```
|
|
472
|
-
*/
|
|
473
|
-
async setProviderApiKey(provider, apiKey) {
|
|
474
|
-
await this.ensureInitialized();
|
|
475
|
-
if (!apiKey || typeof apiKey !== 'string') {
|
|
476
|
-
throw new Error('API key must be a non-empty string');
|
|
477
|
-
}
|
|
478
|
-
if (!PROVIDERS.includes(provider)) {
|
|
479
|
-
throw new Error(`Invalid provider: ${provider}. Must be one of: ${PROVIDERS.join(', ')}`);
|
|
480
|
-
}
|
|
481
|
-
const trimmedKey = apiKey.trim();
|
|
482
|
-
const accountName = PROVIDER_KEYCHAIN_ACCOUNTS[provider];
|
|
483
|
-
if (this.useKeytar) {
|
|
484
|
-
try {
|
|
485
|
-
const keytar = await loadKeytar();
|
|
486
|
-
if (keytar) {
|
|
487
|
-
await keytar.setPassword(SERVICE_NAME, accountName, trimmedKey);
|
|
488
|
-
logger.debug(`${provider} API key stored in system keychain`);
|
|
489
|
-
return;
|
|
490
|
-
}
|
|
491
|
-
}
|
|
492
|
-
catch (error) {
|
|
493
|
-
logger.warn('Failed to store in keychain, falling back to file storage', error);
|
|
494
|
-
}
|
|
495
|
-
}
|
|
496
|
-
// Fall back to file storage
|
|
497
|
-
const existingCredentials = await this.loadFromFile() || {};
|
|
498
|
-
const credentialsKey = PROVIDER_CREDENTIALS_KEYS[provider];
|
|
499
|
-
await this.saveToFile({ ...existingCredentials, [credentialsKey]: trimmedKey });
|
|
500
|
-
logger.debug(`${provider} API key stored in encrypted file`);
|
|
501
|
-
}
|
|
502
|
-
/**
|
|
503
|
-
* Retrieves the stored API key for a specific provider.
|
|
504
|
-
*
|
|
505
|
-
* Checks sources in order of precedence:
|
|
506
|
-
* 1. Environment variable (provider-specific)
|
|
507
|
-
* 2. System keychain (if available)
|
|
508
|
-
* 3. Encrypted file storage
|
|
509
|
-
*
|
|
510
|
-
* @param provider - The provider name (anthropic, ollama, zai, minimax)
|
|
511
|
-
* @returns The API key if found, null otherwise
|
|
512
|
-
*
|
|
513
|
-
* @example
|
|
514
|
-
* ```typescript
|
|
515
|
-
* const store = await getCredentialStore();
|
|
516
|
-
* const apiKey = await store.getProviderApiKey('ollama');
|
|
517
|
-
* ```
|
|
518
|
-
*/
|
|
519
|
-
async getProviderApiKey(provider) {
|
|
520
|
-
await this.ensureInitialized();
|
|
521
|
-
if (!PROVIDERS.includes(provider)) {
|
|
522
|
-
logger.warn(`Invalid provider: ${provider}`);
|
|
523
|
-
return null;
|
|
524
|
-
}
|
|
525
|
-
// First, check environment variable (highest precedence)
|
|
526
|
-
const envVarName = PROVIDER_ENV_VARS[provider];
|
|
527
|
-
const envKey = process.env[envVarName];
|
|
528
|
-
if (envKey && envKey.trim()) {
|
|
529
|
-
logger.debug(`${provider} API key loaded from environment variable ${envVarName}`);
|
|
530
|
-
return envKey.trim();
|
|
531
|
-
}
|
|
532
|
-
// Try keychain if available
|
|
533
|
-
const accountName = PROVIDER_KEYCHAIN_ACCOUNTS[provider];
|
|
534
|
-
if (this.useKeytar) {
|
|
535
|
-
try {
|
|
536
|
-
const keytar = await loadKeytar();
|
|
537
|
-
if (keytar) {
|
|
538
|
-
const keychainKey = await keytar.getPassword(SERVICE_NAME, accountName);
|
|
539
|
-
if (keychainKey) {
|
|
540
|
-
logger.debug(`${provider} API key loaded from system keychain`);
|
|
541
|
-
return keychainKey;
|
|
542
|
-
}
|
|
543
|
-
}
|
|
544
|
-
}
|
|
545
|
-
catch (error) {
|
|
546
|
-
logger.debug(`Failed to read ${provider} key from keychain`, error);
|
|
547
|
-
}
|
|
548
|
-
}
|
|
549
|
-
// Try file-based storage
|
|
550
|
-
const credentials = await this.loadFromFile();
|
|
551
|
-
const credentialsKey = PROVIDER_CREDENTIALS_KEYS[provider];
|
|
552
|
-
if (credentials?.[credentialsKey]) {
|
|
553
|
-
logger.debug(`${provider} API key loaded from encrypted file`);
|
|
554
|
-
return credentials[credentialsKey];
|
|
555
|
-
}
|
|
556
|
-
return null;
|
|
557
|
-
}
|
|
558
|
-
/**
|
|
559
|
-
* Checks if an API key is stored for a specific provider.
|
|
560
|
-
*
|
|
561
|
-
* @param provider - The provider name (anthropic, ollama, zai, minimax)
|
|
562
|
-
* @returns True if an API key is available (from any source)
|
|
563
|
-
*/
|
|
564
|
-
async hasProviderApiKey(provider) {
|
|
565
|
-
const key = await this.getProviderApiKey(provider);
|
|
566
|
-
return key !== null && key.length > 0;
|
|
567
|
-
}
|
|
568
|
-
/**
|
|
569
|
-
* Deletes the stored API key for a specific provider.
|
|
570
|
-
*
|
|
571
|
-
* @param provider - The provider name (anthropic, ollama, zai, minimax)
|
|
572
|
-
* @returns True if deletion was successful, false otherwise
|
|
573
|
-
*/
|
|
574
|
-
async deleteProviderApiKey(provider) {
|
|
575
|
-
await this.ensureInitialized();
|
|
576
|
-
if (!PROVIDERS.includes(provider)) {
|
|
577
|
-
logger.warn(`Invalid provider: ${provider}`);
|
|
578
|
-
return false;
|
|
579
|
-
}
|
|
580
|
-
let success = true;
|
|
581
|
-
const accountName = PROVIDER_KEYCHAIN_ACCOUNTS[provider];
|
|
582
|
-
// Delete from keychain if available
|
|
583
|
-
if (this.useKeytar) {
|
|
584
|
-
try {
|
|
585
|
-
const keytar = await loadKeytar();
|
|
586
|
-
if (keytar) {
|
|
587
|
-
const deleted = await keytar.deletePassword(SERVICE_NAME, accountName);
|
|
588
|
-
if (deleted) {
|
|
589
|
-
logger.debug(`${provider} API key deleted from system keychain`);
|
|
590
|
-
}
|
|
591
|
-
}
|
|
592
|
-
}
|
|
593
|
-
catch (error) {
|
|
594
|
-
logger.debug(`Failed to delete ${provider} key from keychain`, error);
|
|
595
|
-
success = false;
|
|
596
|
-
}
|
|
597
|
-
}
|
|
598
|
-
// Delete from file storage
|
|
599
|
-
try {
|
|
600
|
-
const existingCredentials = await this.loadFromFile();
|
|
601
|
-
const credentialsKey = PROVIDER_CREDENTIALS_KEYS[provider];
|
|
602
|
-
if (existingCredentials?.[credentialsKey]) {
|
|
603
|
-
delete existingCredentials[credentialsKey];
|
|
604
|
-
await this.saveToFile(existingCredentials);
|
|
605
|
-
logger.debug(`${provider} API key deleted from encrypted file`);
|
|
606
|
-
}
|
|
607
|
-
}
|
|
608
|
-
catch (error) {
|
|
609
|
-
logger.error(`Failed to delete ${provider} API key from file`, error);
|
|
610
|
-
success = false;
|
|
611
|
-
}
|
|
612
|
-
return success;
|
|
613
|
-
}
|
|
614
|
-
/**
|
|
615
|
-
* Gets all configured providers that have API keys.
|
|
616
|
-
*
|
|
617
|
-
* @returns Array of provider names that have API keys configured
|
|
618
|
-
*/
|
|
619
|
-
async getConfiguredProviders() {
|
|
620
|
-
const configured = [];
|
|
621
|
-
for (const provider of PROVIDERS) {
|
|
622
|
-
if (await this.hasProviderApiKey(provider)) {
|
|
623
|
-
configured.push(provider);
|
|
624
|
-
}
|
|
625
|
-
}
|
|
626
|
-
return configured;
|
|
627
|
-
}
|
|
628
|
-
/**
|
|
629
|
-
* Validates the format of an Anthropic API key.
|
|
630
|
-
*
|
|
631
|
-
* Anthropic API keys follow the format: sk-ant-api03-...
|
|
632
|
-
* This method performs basic format validation without making API calls.
|
|
633
|
-
*
|
|
634
|
-
* @param apiKey - The API key to validate
|
|
635
|
-
* @returns True if the format is valid
|
|
636
|
-
*
|
|
637
|
-
* @example
|
|
638
|
-
* ```typescript
|
|
639
|
-
* const store = await getCredentialStore();
|
|
640
|
-
* if (store.validateApiKeyFormat('sk-ant-api03-...')) {
|
|
641
|
-
* // Key format is valid
|
|
642
|
-
* }
|
|
643
|
-
* ```
|
|
644
|
-
*/
|
|
645
|
-
validateApiKeyFormat(apiKey) {
|
|
646
|
-
if (!apiKey || typeof apiKey !== 'string') {
|
|
647
|
-
return false;
|
|
648
|
-
}
|
|
649
|
-
const trimmed = apiKey.trim();
|
|
650
|
-
// Minimum reasonable length for an API key
|
|
651
|
-
if (trimmed.length < 20) {
|
|
652
|
-
return false;
|
|
653
|
-
}
|
|
654
|
-
return true;
|
|
655
|
-
// Anthropic API keys start with 'sk-ant-' and have a minimum length
|
|
656
|
-
// Format: sk-ant-api03-<base64-encoded-data>
|
|
657
|
-
if (!trimmed.startsWith('sk-ant-')) {
|
|
658
|
-
return false;
|
|
659
|
-
}
|
|
660
|
-
// Check for valid characters (alphanumeric, hyphens, underscores)
|
|
661
|
-
const validPattern = /^sk-ant-[a-zA-Z0-9_-]+$/;
|
|
662
|
-
return validPattern.test(trimmed);
|
|
663
|
-
}
|
|
664
|
-
/**
|
|
665
|
-
* Gets the storage method currently in use.
|
|
666
|
-
*
|
|
667
|
-
* @returns 'keychain' if using system keychain, 'file' if using encrypted file
|
|
668
|
-
*/
|
|
669
|
-
getStorageMethod() {
|
|
670
|
-
return this.useKeytar ? 'keychain' : 'file';
|
|
671
|
-
}
|
|
672
|
-
/**
|
|
673
|
-
* Checks if the credential store has been initialized.
|
|
674
|
-
*
|
|
675
|
-
* @returns True if initialize() has been called
|
|
676
|
-
*/
|
|
677
|
-
isInitialized() {
|
|
678
|
-
return this.initialized;
|
|
679
|
-
}
|
|
680
|
-
/**
|
|
681
|
-
* Ensures the store is initialized before operations.
|
|
682
|
-
*/
|
|
683
|
-
async ensureInitialized() {
|
|
684
|
-
if (!this.initialized) {
|
|
685
|
-
await this.initialize();
|
|
686
|
-
}
|
|
687
|
-
}
|
|
688
|
-
/**
|
|
689
|
-
* Generates a machine-specific key for encryption.
|
|
690
|
-
* Uses a combination of machine identifiers to create a unique key.
|
|
691
|
-
*/
|
|
692
|
-
async getMachineKey() {
|
|
693
|
-
if (this.machineKey) {
|
|
694
|
-
return this.machineKey;
|
|
695
|
-
}
|
|
696
|
-
// Combine multiple machine-specific values for key derivation
|
|
697
|
-
const components = [
|
|
698
|
-
os.hostname(),
|
|
699
|
-
os.platform(),
|
|
700
|
-
os.arch(),
|
|
701
|
-
os.userInfo().username,
|
|
702
|
-
// Add home directory for additional uniqueness
|
|
703
|
-
os.homedir(),
|
|
704
|
-
];
|
|
705
|
-
// Create a hash of the combined components
|
|
706
|
-
const combined = components.join(':');
|
|
707
|
-
const hash = crypto.createHash('sha256').update(combined).digest('hex');
|
|
708
|
-
this.machineKey = hash;
|
|
709
|
-
return hash;
|
|
710
|
-
}
|
|
711
|
-
/**
|
|
712
|
-
* Saves credentials to an encrypted file.
|
|
713
|
-
*/
|
|
714
|
-
async saveToFile(credentials) {
|
|
715
|
-
const key = await this.getMachineKey();
|
|
716
|
-
const dataString = JSON.stringify(credentials);
|
|
717
|
-
const encrypted = encrypt(dataString, key);
|
|
718
|
-
const encryptedCredentials = {
|
|
719
|
-
version: CREDENTIALS_VERSION,
|
|
720
|
-
data: encrypted,
|
|
721
|
-
updatedAt: new Date().toISOString(),
|
|
722
|
-
};
|
|
723
|
-
const globalDir = getGlobalCompassDir();
|
|
724
|
-
await ensureDir(globalDir);
|
|
725
|
-
const filePath = path.join(globalDir, CREDENTIALS_FILE_NAME);
|
|
726
|
-
await safeWriteFile(filePath, JSON.stringify(encryptedCredentials, null, 2));
|
|
727
|
-
logger.debug('Credentials saved to encrypted file');
|
|
728
|
-
}
|
|
729
|
-
/**
|
|
730
|
-
* Loads credentials from the encrypted file.
|
|
731
|
-
*/
|
|
732
|
-
async loadFromFile() {
|
|
733
|
-
const filePath = path.join(getGlobalCompassDir(), CREDENTIALS_FILE_NAME);
|
|
734
|
-
if (!(await pathExists(filePath))) {
|
|
735
|
-
return null;
|
|
736
|
-
}
|
|
737
|
-
try {
|
|
738
|
-
const content = await safeReadFile(filePath);
|
|
739
|
-
if (!content) {
|
|
740
|
-
return null;
|
|
741
|
-
}
|
|
742
|
-
const encryptedCredentials = JSON.parse(content);
|
|
743
|
-
// Validate version
|
|
744
|
-
if (encryptedCredentials.version !== CREDENTIALS_VERSION) {
|
|
745
|
-
logger.warn(`Credentials file version mismatch: ${encryptedCredentials.version}`);
|
|
746
|
-
// For now, attempt to decrypt anyway; future versions may need migration
|
|
747
|
-
}
|
|
748
|
-
const key = await this.getMachineKey();
|
|
749
|
-
const decrypted = decrypt(encryptedCredentials.data, key);
|
|
750
|
-
const credentials = JSON.parse(decrypted);
|
|
751
|
-
return credentials;
|
|
752
|
-
}
|
|
753
|
-
catch (error) {
|
|
754
|
-
logger.error('Failed to load credentials from file', error);
|
|
755
|
-
return null;
|
|
756
|
-
}
|
|
757
|
-
}
|
|
758
|
-
/**
|
|
759
|
-
* Deletes the encrypted credentials file.
|
|
760
|
-
*/
|
|
761
|
-
async deleteFile() {
|
|
762
|
-
const filePath = path.join(getGlobalCompassDir(), CREDENTIALS_FILE_NAME);
|
|
763
|
-
try {
|
|
764
|
-
if (await pathExists(filePath)) {
|
|
765
|
-
await remove(filePath);
|
|
766
|
-
logger.debug('Credentials file deleted');
|
|
767
|
-
}
|
|
768
|
-
return true;
|
|
769
|
-
}
|
|
770
|
-
catch (error) {
|
|
771
|
-
logger.error('Failed to delete credentials file', error);
|
|
772
|
-
return false;
|
|
773
|
-
}
|
|
774
|
-
}
|
|
775
|
-
/**
|
|
776
|
-
* Migrates credentials from file storage to keychain.
|
|
777
|
-
* Useful when keychain becomes available after initial setup.
|
|
778
|
-
*
|
|
779
|
-
* @returns True if migration was successful or not needed
|
|
780
|
-
*/
|
|
781
|
-
async migrateToKeychain() {
|
|
782
|
-
if (!this.useKeytar) {
|
|
783
|
-
logger.debug('Keychain not available, migration skipped');
|
|
784
|
-
return false;
|
|
785
|
-
}
|
|
786
|
-
try {
|
|
787
|
-
const keytar = await loadKeytar();
|
|
788
|
-
if (!keytar) {
|
|
789
|
-
logger.debug('Keytar not available, migration skipped');
|
|
790
|
-
return false;
|
|
791
|
-
}
|
|
792
|
-
// Check if there are file-based credentials to migrate
|
|
793
|
-
const fileCredentials = await this.loadFromFile();
|
|
794
|
-
if (!fileCredentials?.anthropicApiKey) {
|
|
795
|
-
logger.debug('No file-based credentials to migrate');
|
|
796
|
-
return true;
|
|
797
|
-
}
|
|
798
|
-
// Check if keychain already has the key
|
|
799
|
-
const keychainKey = await keytar.getPassword(SERVICE_NAME, ANTHROPIC_API_KEY_ACCOUNT);
|
|
800
|
-
if (keychainKey) {
|
|
801
|
-
logger.debug('Keychain already has credentials, skipping migration');
|
|
802
|
-
return true;
|
|
803
|
-
}
|
|
804
|
-
// Migrate to keychain
|
|
805
|
-
await keytar.setPassword(SERVICE_NAME, ANTHROPIC_API_KEY_ACCOUNT, fileCredentials.anthropicApiKey);
|
|
806
|
-
// Delete file-based storage after successful migration
|
|
807
|
-
await this.deleteFile();
|
|
808
|
-
logger.debug('Credentials migrated from file to system keychain');
|
|
809
|
-
return true;
|
|
810
|
-
}
|
|
811
|
-
catch (error) {
|
|
812
|
-
logger.error('Failed to migrate credentials to keychain', error);
|
|
813
|
-
return false;
|
|
814
|
-
}
|
|
815
|
-
}
|
|
816
|
-
/**
|
|
817
|
-
* Clears all stored credentials from all storage locations.
|
|
818
|
-
* Use with caution - this is irreversible.
|
|
819
|
-
*/
|
|
820
|
-
async clearAll() {
|
|
821
|
-
await this.ensureInitialized();
|
|
822
|
-
// Clear keychain
|
|
823
|
-
if (this.useKeytar) {
|
|
824
|
-
try {
|
|
825
|
-
const keytar = await loadKeytar();
|
|
826
|
-
if (keytar) {
|
|
827
|
-
await keytar.deletePassword(SERVICE_NAME, ANTHROPIC_API_KEY_ACCOUNT);
|
|
828
|
-
await keytar.deletePassword(SERVICE_NAME, COMPASS_API_KEY_ACCOUNT);
|
|
829
|
-
// Clear all provider-specific keys
|
|
830
|
-
for (const provider of PROVIDERS) {
|
|
831
|
-
await keytar.deletePassword(SERVICE_NAME, PROVIDER_KEYCHAIN_ACCOUNTS[provider]);
|
|
832
|
-
}
|
|
833
|
-
}
|
|
834
|
-
}
|
|
835
|
-
catch (error) {
|
|
836
|
-
logger.debug('Failed to clear keychain', error);
|
|
837
|
-
}
|
|
838
|
-
}
|
|
839
|
-
// Clear file storage
|
|
840
|
-
await this.deleteFile();
|
|
841
|
-
logger.debug('All credentials cleared');
|
|
842
|
-
}
|
|
843
|
-
}
|
|
844
|
-
// Singleton instance
|
|
845
|
-
let credentialStoreInstance = null;
|
|
846
|
-
/**
|
|
847
|
-
* Gets the singleton CredentialStore instance.
|
|
848
|
-
* Initializes the instance on first call.
|
|
849
|
-
*
|
|
850
|
-
* @returns Promise resolving to the initialized CredentialStore instance
|
|
851
|
-
*
|
|
852
|
-
* @example
|
|
853
|
-
* ```typescript
|
|
854
|
-
* const store = await getCredentialStore();
|
|
855
|
-
* const apiKey = await store.getApiKey();
|
|
856
|
-
* ```
|
|
857
|
-
*/
|
|
858
|
-
export async function getCredentialStore() {
|
|
859
|
-
if (!credentialStoreInstance) {
|
|
860
|
-
credentialStoreInstance = new CredentialStore();
|
|
861
|
-
await credentialStoreInstance.initialize();
|
|
862
|
-
}
|
|
863
|
-
return credentialStoreInstance;
|
|
864
|
-
}
|
|
865
|
-
/**
|
|
866
|
-
* Creates a new CredentialStore instance.
|
|
867
|
-
* Use this when you need a separate instance from the singleton.
|
|
868
|
-
*
|
|
869
|
-
* Note: You must call initialize() on the returned instance before use.
|
|
870
|
-
*
|
|
871
|
-
* @returns A new CredentialStore instance (not initialized)
|
|
872
|
-
*/
|
|
873
|
-
export function createCredentialStore() {
|
|
874
|
-
return new CredentialStore();
|
|
875
|
-
}
|
|
876
|
-
export { CredentialStore };
|
|
877
|
-
//# sourceMappingURL=credential-store.js.map
|