@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,1018 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Context building logic for assembling relevant codebase context for LLM queries.
|
|
3
|
-
* This module is responsible for gathering and organizing project files, code snippets,
|
|
4
|
-
* and metadata to provide Claude with the necessary context for development tasks.
|
|
5
|
-
*/
|
|
6
|
-
import path from 'path';
|
|
7
|
-
import { glob } from 'glob';
|
|
8
|
-
import { safeReadFile, pathExists, stat } from '../utils/file-system.js';
|
|
9
|
-
import { sanitizePath, toForwardSlashes } from '../utils/path.js';
|
|
10
|
-
import { estimateTokens } from '../utils/token-counter.js';
|
|
11
|
-
import { logger } from '../utils/logger.js';
|
|
12
|
-
import { DEFAULT_CONFIG } from '../constants/defaults.js';
|
|
13
|
-
import { DEFAULT_IGNORE_PATTERNS, shouldExcludeDirectory, shouldExcludeFile, mergeSessionExclusions, shouldExcludeSessionPath, loadIgnorePatterns, } from '../utils/ignore-patterns.js';
|
|
14
|
-
import { getSessionManager } from '../services/session-manager.js';
|
|
15
|
-
/**
|
|
16
|
-
* Marker files used to detect project type
|
|
17
|
-
*/
|
|
18
|
-
const PROJECT_MARKERS = {
|
|
19
|
-
nodejs: ['package.json'],
|
|
20
|
-
typescript: ['tsconfig.json', 'tsconfig.base.json'],
|
|
21
|
-
python: ['pyproject.toml', 'setup.py', 'requirements.txt', 'Pipfile'],
|
|
22
|
-
go: ['go.mod', 'go.sum'],
|
|
23
|
-
rust: ['Cargo.toml', 'Cargo.lock'],
|
|
24
|
-
java: ['pom.xml', 'build.gradle', 'build.gradle.kts'],
|
|
25
|
-
csharp: ['*.csproj', '*.sln'],
|
|
26
|
-
ruby: ['Gemfile', 'Rakefile', '*.gemspec'],
|
|
27
|
-
php: ['composer.json', 'composer.lock'],
|
|
28
|
-
unknown: [],
|
|
29
|
-
};
|
|
30
|
-
/**
|
|
31
|
-
* Language detection mapping based on file extensions
|
|
32
|
-
*/
|
|
33
|
-
const EXTENSION_TO_LANGUAGE = {
|
|
34
|
-
'.ts': 'typescript',
|
|
35
|
-
'.tsx': 'typescript',
|
|
36
|
-
'.js': 'javascript',
|
|
37
|
-
'.jsx': 'javascript',
|
|
38
|
-
'.mjs': 'javascript',
|
|
39
|
-
'.cjs': 'javascript',
|
|
40
|
-
'.py': 'python',
|
|
41
|
-
'.rb': 'ruby',
|
|
42
|
-
'.go': 'go',
|
|
43
|
-
'.rs': 'rust',
|
|
44
|
-
'.java': 'java',
|
|
45
|
-
'.kt': 'kotlin',
|
|
46
|
-
'.swift': 'swift',
|
|
47
|
-
'.c': 'c',
|
|
48
|
-
'.cpp': 'cpp',
|
|
49
|
-
'.h': 'c',
|
|
50
|
-
'.hpp': 'cpp',
|
|
51
|
-
'.cs': 'csharp',
|
|
52
|
-
'.php': 'php',
|
|
53
|
-
'.vue': 'vue',
|
|
54
|
-
'.svelte': 'svelte',
|
|
55
|
-
'.html': 'html',
|
|
56
|
-
'.css': 'css',
|
|
57
|
-
'.scss': 'scss',
|
|
58
|
-
'.sass': 'sass',
|
|
59
|
-
'.less': 'less',
|
|
60
|
-
'.json': 'json',
|
|
61
|
-
'.yaml': 'yaml',
|
|
62
|
-
'.yml': 'yaml',
|
|
63
|
-
'.xml': 'xml',
|
|
64
|
-
'.md': 'markdown',
|
|
65
|
-
'.mdx': 'markdown',
|
|
66
|
-
'.sql': 'sql',
|
|
67
|
-
'.sh': 'shell',
|
|
68
|
-
'.bash': 'shell',
|
|
69
|
-
'.zsh': 'shell',
|
|
70
|
-
'.fish': 'shell',
|
|
71
|
-
'.ps1': 'powershell',
|
|
72
|
-
'.dockerfile': 'dockerfile',
|
|
73
|
-
'.toml': 'toml',
|
|
74
|
-
'.ini': 'ini',
|
|
75
|
-
'.env': 'env',
|
|
76
|
-
'.graphql': 'graphql',
|
|
77
|
-
'.gql': 'graphql',
|
|
78
|
-
'.proto': 'protobuf',
|
|
79
|
-
};
|
|
80
|
-
/**
|
|
81
|
-
* ContextBuilder class for assembling relevant codebase context for LLM queries.
|
|
82
|
-
* Handles file discovery, content loading, token estimation, and context optimization.
|
|
83
|
-
*/
|
|
84
|
-
class ContextBuilder {
|
|
85
|
-
projectRoot;
|
|
86
|
-
maxTokens;
|
|
87
|
-
maxFiles;
|
|
88
|
-
includePatterns;
|
|
89
|
-
excludePatterns;
|
|
90
|
-
priorityFiles;
|
|
91
|
-
fileCache = new Map();
|
|
92
|
-
constructor(options = {}) {
|
|
93
|
-
this.projectRoot = options.projectRoot || process.cwd();
|
|
94
|
-
this.maxTokens = options.maxTokens || 100000;
|
|
95
|
-
this.maxFiles = options.maxFiles || 100;
|
|
96
|
-
this.includePatterns = options.includePatterns || ['**/*'];
|
|
97
|
-
this.excludePatterns = options.excludePatterns || DEFAULT_IGNORE_PATTERNS;
|
|
98
|
-
this.priorityFiles = options.priorityFiles || [];
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Sets the project root directory
|
|
102
|
-
*/
|
|
103
|
-
setProjectRoot(projectRoot) {
|
|
104
|
-
this.projectRoot = projectRoot;
|
|
105
|
-
this.clearCache();
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* Sets the maximum token limit for context
|
|
109
|
-
*/
|
|
110
|
-
setMaxTokens(maxTokens) {
|
|
111
|
-
this.maxTokens = maxTokens;
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Sets the maximum number of files to include
|
|
115
|
-
*/
|
|
116
|
-
setMaxFiles(maxFiles) {
|
|
117
|
-
this.maxFiles = maxFiles;
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Adds files to the priority list
|
|
121
|
-
*/
|
|
122
|
-
addPriorityFiles(files) {
|
|
123
|
-
this.priorityFiles = [...new Set([...this.priorityFiles, ...files])];
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* Clears the file cache
|
|
127
|
-
*/
|
|
128
|
-
clearCache() {
|
|
129
|
-
this.fileCache.clear();
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* Gets the effective exclude patterns including session exclusions.
|
|
133
|
-
* If custom excludePatterns were provided in constructor options, uses those.
|
|
134
|
-
* Otherwise loads patterns from .gitignore files (including nested ones).
|
|
135
|
-
*/
|
|
136
|
-
async getEffectiveExcludePatterns() {
|
|
137
|
-
const sessionManager = getSessionManager();
|
|
138
|
-
const sessionExcludedFolders = sessionManager.getExcludedFolders();
|
|
139
|
-
// If custom patterns were provided, use those; otherwise load from .gitignore files
|
|
140
|
-
const basePatterns = this.excludePatterns === DEFAULT_IGNORE_PATTERNS
|
|
141
|
-
? await loadIgnorePatterns(this.projectRoot)
|
|
142
|
-
: this.excludePatterns;
|
|
143
|
-
return mergeSessionExclusions(sessionExcludedFolders, basePatterns);
|
|
144
|
-
}
|
|
145
|
-
/**
|
|
146
|
-
* Discovers all relevant files in the project
|
|
147
|
-
*/
|
|
148
|
-
async discoverFiles() {
|
|
149
|
-
try {
|
|
150
|
-
const effectiveExcludePatterns = await this.getEffectiveExcludePatterns();
|
|
151
|
-
// Debug: show patterns being used
|
|
152
|
-
logger.debug(`Using ${effectiveExcludePatterns.length} exclude patterns for file discovery`);
|
|
153
|
-
const nodeModulesPatterns = effectiveExcludePatterns.filter(p => p.includes('node_modules'));
|
|
154
|
-
logger.debug(`node_modules patterns: ${nodeModulesPatterns.slice(0, 5).join(', ')}${nodeModulesPatterns.length > 5 ? `... (${nodeModulesPatterns.length} total)` : ''}`);
|
|
155
|
-
const files = await glob(this.includePatterns, {
|
|
156
|
-
cwd: this.projectRoot,
|
|
157
|
-
nodir: true,
|
|
158
|
-
ignore: effectiveExcludePatterns,
|
|
159
|
-
absolute: false,
|
|
160
|
-
dot: false,
|
|
161
|
-
});
|
|
162
|
-
// Filter out binary and large files
|
|
163
|
-
const filteredFiles = [];
|
|
164
|
-
for (const file of files) {
|
|
165
|
-
if (this.isTextFile(file)) {
|
|
166
|
-
const absolutePath = path.join(this.projectRoot, file);
|
|
167
|
-
const stats = await stat(absolutePath);
|
|
168
|
-
if (stats && stats.size <= DEFAULT_CONFIG.project.maxFileSize) {
|
|
169
|
-
filteredFiles.push(file);
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
logger.debug(`Discovered ${filteredFiles.length} files in project`);
|
|
174
|
-
// Debug: show sample of discovered files to understand what's being included
|
|
175
|
-
const nodeModuleFiles = filteredFiles.filter(f => f.includes('node_modules'));
|
|
176
|
-
if (nodeModuleFiles.length > 0) {
|
|
177
|
-
logger.debug(`WARNING: Found ${nodeModuleFiles.length} files in node_modules! Sample: ${nodeModuleFiles.slice(0, 3).join(', ')}`);
|
|
178
|
-
}
|
|
179
|
-
return filteredFiles;
|
|
180
|
-
}
|
|
181
|
-
catch (error) {
|
|
182
|
-
logger.error('Failed to discover files', error);
|
|
183
|
-
return [];
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
/**
|
|
187
|
-
* Loads a file and creates a ContextFile object
|
|
188
|
-
*/
|
|
189
|
-
async loadFile(relativePath) {
|
|
190
|
-
// Check cache first
|
|
191
|
-
if (this.fileCache.has(relativePath)) {
|
|
192
|
-
return this.fileCache.get(relativePath);
|
|
193
|
-
}
|
|
194
|
-
const absolutePath = path.join(this.projectRoot, relativePath);
|
|
195
|
-
const sanitized = sanitizePath(relativePath, this.projectRoot);
|
|
196
|
-
if (!sanitized) {
|
|
197
|
-
logger.warn(`Path traversal attempt blocked: ${relativePath}`);
|
|
198
|
-
return null;
|
|
199
|
-
}
|
|
200
|
-
if (!await pathExists(absolutePath)) {
|
|
201
|
-
logger.debug(`File not found: ${relativePath}`);
|
|
202
|
-
return null;
|
|
203
|
-
}
|
|
204
|
-
try {
|
|
205
|
-
const content = await safeReadFile(absolutePath);
|
|
206
|
-
if (content === null) {
|
|
207
|
-
return null;
|
|
208
|
-
}
|
|
209
|
-
const stats = await stat(absolutePath);
|
|
210
|
-
const tokenCount = estimateTokens(content);
|
|
211
|
-
const language = this.detectLanguage(relativePath);
|
|
212
|
-
const contextFile = {
|
|
213
|
-
path: absolutePath,
|
|
214
|
-
relativePath: toForwardSlashes(relativePath),
|
|
215
|
-
content,
|
|
216
|
-
tokenCount,
|
|
217
|
-
size: stats?.size || 0,
|
|
218
|
-
lastModified: stats?.mtime || new Date(),
|
|
219
|
-
language,
|
|
220
|
-
};
|
|
221
|
-
// Cache the file
|
|
222
|
-
this.fileCache.set(relativePath, contextFile);
|
|
223
|
-
return contextFile;
|
|
224
|
-
}
|
|
225
|
-
catch (error) {
|
|
226
|
-
logger.error(`Failed to load file: ${relativePath}`, error);
|
|
227
|
-
return null;
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
/**
|
|
231
|
-
* Loads multiple files in parallel
|
|
232
|
-
*/
|
|
233
|
-
async loadFiles(relativePaths) {
|
|
234
|
-
const results = await Promise.all(relativePaths.map((p) => this.loadFile(p)));
|
|
235
|
-
return results.filter((f) => f !== null);
|
|
236
|
-
}
|
|
237
|
-
/**
|
|
238
|
-
* Builds context from specified files
|
|
239
|
-
*/
|
|
240
|
-
async buildContext(files) {
|
|
241
|
-
const filesToLoad = files || await this.discoverFiles();
|
|
242
|
-
const loadedFiles = await this.loadFiles(filesToLoad);
|
|
243
|
-
// Sort files by priority
|
|
244
|
-
const sortedFiles = this.sortFilesByPriority(loadedFiles);
|
|
245
|
-
// Select files within token budget
|
|
246
|
-
const selectedFiles = this.selectFilesWithinBudget(sortedFiles);
|
|
247
|
-
const totalTokens = selectedFiles.reduce((sum, f) => sum + f.tokenCount, 0);
|
|
248
|
-
const summary = this.generateContextSummary(selectedFiles);
|
|
249
|
-
return {
|
|
250
|
-
files: selectedFiles,
|
|
251
|
-
totalTokens,
|
|
252
|
-
summary,
|
|
253
|
-
projectRoot: this.projectRoot,
|
|
254
|
-
timestamp: new Date().toISOString(),
|
|
255
|
-
};
|
|
256
|
-
}
|
|
257
|
-
/**
|
|
258
|
-
* Builds context for specific file patterns
|
|
259
|
-
*/
|
|
260
|
-
async buildContextForPatterns(patterns) {
|
|
261
|
-
const effectiveExcludePatterns = await this.getEffectiveExcludePatterns();
|
|
262
|
-
const files = await glob(patterns, {
|
|
263
|
-
cwd: this.projectRoot,
|
|
264
|
-
nodir: true,
|
|
265
|
-
ignore: effectiveExcludePatterns,
|
|
266
|
-
absolute: false,
|
|
267
|
-
});
|
|
268
|
-
return this.buildContext(files);
|
|
269
|
-
}
|
|
270
|
-
/**
|
|
271
|
-
* Builds context including specific files with priority
|
|
272
|
-
*/
|
|
273
|
-
async buildContextWithPriority(priorityFiles, additionalFiles) {
|
|
274
|
-
// Load priority files first
|
|
275
|
-
const priorityLoaded = await this.loadFiles(priorityFiles);
|
|
276
|
-
// Calculate remaining token budget
|
|
277
|
-
const priorityTokens = priorityLoaded.reduce((sum, f) => sum + f.tokenCount, 0);
|
|
278
|
-
const remainingBudget = this.maxTokens - priorityTokens;
|
|
279
|
-
// Load additional files if budget allows
|
|
280
|
-
let additionalLoaded = [];
|
|
281
|
-
if (remainingBudget > 0 && additionalFiles) {
|
|
282
|
-
const loaded = await this.loadFiles(additionalFiles);
|
|
283
|
-
additionalLoaded = this.selectFilesWithinBudget(loaded, remainingBudget);
|
|
284
|
-
}
|
|
285
|
-
const allFiles = [...priorityLoaded, ...additionalLoaded];
|
|
286
|
-
const totalTokens = allFiles.reduce((sum, f) => sum + f.tokenCount, 0);
|
|
287
|
-
const summary = this.generateContextSummary(allFiles);
|
|
288
|
-
return {
|
|
289
|
-
files: allFiles,
|
|
290
|
-
totalTokens,
|
|
291
|
-
summary,
|
|
292
|
-
projectRoot: this.projectRoot,
|
|
293
|
-
timestamp: new Date().toISOString(),
|
|
294
|
-
};
|
|
295
|
-
}
|
|
296
|
-
/**
|
|
297
|
-
* Formats context for LLM consumption
|
|
298
|
-
*/
|
|
299
|
-
formatContextForLLM(context) {
|
|
300
|
-
const parts = [];
|
|
301
|
-
parts.push('## Project Context');
|
|
302
|
-
parts.push('');
|
|
303
|
-
parts.push(`Project Root: ${context.projectRoot}`);
|
|
304
|
-
parts.push(`Files Included: ${context.files.length}`);
|
|
305
|
-
parts.push(`Total Tokens: ${context.totalTokens.toLocaleString()}`);
|
|
306
|
-
parts.push('');
|
|
307
|
-
parts.push('---');
|
|
308
|
-
parts.push('');
|
|
309
|
-
for (const file of context.files) {
|
|
310
|
-
parts.push(`### File: ${file.relativePath}`);
|
|
311
|
-
parts.push(`Language: ${file.language} | Tokens: ${file.tokenCount.toLocaleString()}`);
|
|
312
|
-
parts.push('');
|
|
313
|
-
parts.push('```' + file.language);
|
|
314
|
-
parts.push(file.content);
|
|
315
|
-
parts.push('```');
|
|
316
|
-
parts.push('');
|
|
317
|
-
}
|
|
318
|
-
return parts.join('\n');
|
|
319
|
-
}
|
|
320
|
-
/**
|
|
321
|
-
* Formats context as a compact summary
|
|
322
|
-
*/
|
|
323
|
-
formatContextSummary(context) {
|
|
324
|
-
const parts = [];
|
|
325
|
-
parts.push(`📁 Project: ${path.basename(context.projectRoot)}`);
|
|
326
|
-
parts.push(`📄 Files: ${context.files.length}`);
|
|
327
|
-
parts.push(`🔤 Tokens: ${context.totalTokens.toLocaleString()}`);
|
|
328
|
-
parts.push('');
|
|
329
|
-
parts.push('Files included:');
|
|
330
|
-
for (const file of context.files) {
|
|
331
|
-
parts.push(` • ${file.relativePath} (${file.tokenCount.toLocaleString()} tokens)`);
|
|
332
|
-
}
|
|
333
|
-
return parts.join('\n');
|
|
334
|
-
}
|
|
335
|
-
/**
|
|
336
|
-
* Gets context usage statistics
|
|
337
|
-
*/
|
|
338
|
-
getContextStats(context, contextWindow) {
|
|
339
|
-
const usedTokens = context.totalTokens;
|
|
340
|
-
const remainingTokens = Math.max(0, contextWindow - usedTokens);
|
|
341
|
-
const usagePercent = Math.round((usedTokens / contextWindow) * 100);
|
|
342
|
-
return {
|
|
343
|
-
usedTokens,
|
|
344
|
-
remainingTokens,
|
|
345
|
-
usagePercent,
|
|
346
|
-
fileCount: context.files.length,
|
|
347
|
-
};
|
|
348
|
-
}
|
|
349
|
-
/**
|
|
350
|
-
* Detects the programming language based on file extension
|
|
351
|
-
*/
|
|
352
|
-
detectLanguage(filePath) {
|
|
353
|
-
const ext = path.extname(filePath).toLowerCase();
|
|
354
|
-
// Check for special filenames
|
|
355
|
-
const basename = path.basename(filePath).toLowerCase();
|
|
356
|
-
if (basename === 'dockerfile' || basename.startsWith('dockerfile.')) {
|
|
357
|
-
return 'dockerfile';
|
|
358
|
-
}
|
|
359
|
-
if (basename === 'makefile' || basename === 'gnumakefile') {
|
|
360
|
-
return 'makefile';
|
|
361
|
-
}
|
|
362
|
-
if (basename === '.gitignore' || basename === '.dockerignore') {
|
|
363
|
-
return 'gitignore';
|
|
364
|
-
}
|
|
365
|
-
return EXTENSION_TO_LANGUAGE[ext] || 'text';
|
|
366
|
-
}
|
|
367
|
-
/**
|
|
368
|
-
* Checks if a file is likely a text file based on extension
|
|
369
|
-
*/
|
|
370
|
-
isTextFile(filePath) {
|
|
371
|
-
const ext = path.extname(filePath).toLowerCase();
|
|
372
|
-
const basename = path.basename(filePath).toLowerCase();
|
|
373
|
-
// Binary file extensions to exclude
|
|
374
|
-
const binaryExtensions = new Set([
|
|
375
|
-
'.png', '.jpg', '.jpeg', '.gif', '.bmp', '.ico', '.webp', '.svg',
|
|
376
|
-
'.mp3', '.mp4', '.wav', '.avi', '.mov', '.mkv', '.webm',
|
|
377
|
-
'.zip', '.tar', '.gz', '.rar', '.7z', '.bz2',
|
|
378
|
-
'.pdf', '.doc', '.docx', '.xls', '.xlsx', '.ppt', '.pptx',
|
|
379
|
-
'.exe', '.dll', '.so', '.dylib', '.bin',
|
|
380
|
-
'.woff', '.woff2', '.ttf', '.otf', '.eot',
|
|
381
|
-
'.sqlite', '.db',
|
|
382
|
-
]);
|
|
383
|
-
if (binaryExtensions.has(ext)) {
|
|
384
|
-
return false;
|
|
385
|
-
}
|
|
386
|
-
// Known text files without extensions
|
|
387
|
-
const textFilenames = new Set([
|
|
388
|
-
'dockerfile', 'makefile', 'gnumakefile', 'rakefile',
|
|
389
|
-
'gemfile', 'procfile', 'brewfile', 'vagrantfile',
|
|
390
|
-
'.gitignore', '.dockerignore', '.npmignore', '.eslintignore',
|
|
391
|
-
'.prettierignore', '.editorconfig', '.env', '.env.example',
|
|
392
|
-
'license', 'readme', 'changelog', 'contributing', 'authors',
|
|
393
|
-
]);
|
|
394
|
-
if (textFilenames.has(basename)) {
|
|
395
|
-
return true;
|
|
396
|
-
}
|
|
397
|
-
// If extension is in our language map, it's a text file
|
|
398
|
-
if (EXTENSION_TO_LANGUAGE[ext]) {
|
|
399
|
-
return true;
|
|
400
|
-
}
|
|
401
|
-
// Default to true for unknown extensions (will be filtered by size later)
|
|
402
|
-
return ext === '' || ext.length <= 5;
|
|
403
|
-
}
|
|
404
|
-
/**
|
|
405
|
-
* Sorts files by priority for context inclusion
|
|
406
|
-
*/
|
|
407
|
-
sortFilesByPriority(files) {
|
|
408
|
-
const priorities = files.map((file) => ({
|
|
409
|
-
path: file.relativePath,
|
|
410
|
-
priority: this.calculateFilePriority(file),
|
|
411
|
-
tokenCount: file.tokenCount,
|
|
412
|
-
}));
|
|
413
|
-
// Sort by priority (higher first), then by token count (smaller first for ties)
|
|
414
|
-
priorities.sort((a, b) => {
|
|
415
|
-
if (b.priority !== a.priority) {
|
|
416
|
-
return b.priority - a.priority;
|
|
417
|
-
}
|
|
418
|
-
return a.tokenCount - b.tokenCount;
|
|
419
|
-
});
|
|
420
|
-
// Return files in sorted order
|
|
421
|
-
const pathOrder = new Map(priorities.map((p, i) => [p.path, i]));
|
|
422
|
-
return [...files].sort((a, b) => {
|
|
423
|
-
const orderA = pathOrder.get(a.relativePath) ?? Infinity;
|
|
424
|
-
const orderB = pathOrder.get(b.relativePath) ?? Infinity;
|
|
425
|
-
return orderA - orderB;
|
|
426
|
-
});
|
|
427
|
-
}
|
|
428
|
-
/**
|
|
429
|
-
* Calculates priority score for a file
|
|
430
|
-
*/
|
|
431
|
-
calculateFilePriority(file) {
|
|
432
|
-
let priority = 0;
|
|
433
|
-
// Priority files get highest score
|
|
434
|
-
if (this.priorityFiles.some((p) => file.relativePath.includes(p))) {
|
|
435
|
-
priority += 1000;
|
|
436
|
-
}
|
|
437
|
-
// Configuration files are important
|
|
438
|
-
const configPatterns = [
|
|
439
|
-
'package.json', 'tsconfig.json', 'webpack.config',
|
|
440
|
-
'vite.config', 'rollup.config', '.eslintrc', '.prettierrc',
|
|
441
|
-
'pyproject.toml', 'setup.py', 'requirements.txt',
|
|
442
|
-
'Cargo.toml', 'go.mod', 'pom.xml', 'build.gradle',
|
|
443
|
-
];
|
|
444
|
-
if (configPatterns.some((p) => file.relativePath.includes(p))) {
|
|
445
|
-
priority += 100;
|
|
446
|
-
}
|
|
447
|
-
// Entry points and main files
|
|
448
|
-
const entryPatterns = [
|
|
449
|
-
'index.ts', 'index.js', 'main.ts', 'main.js',
|
|
450
|
-
'app.ts', 'app.js', 'cli.ts', 'cli.js',
|
|
451
|
-
'__init__.py', 'main.py', 'app.py',
|
|
452
|
-
'main.go', 'main.rs', 'Main.java',
|
|
453
|
-
];
|
|
454
|
-
if (entryPatterns.some((p) => file.relativePath.endsWith(p))) {
|
|
455
|
-
priority += 80;
|
|
456
|
-
}
|
|
457
|
-
// Source files in src directory
|
|
458
|
-
if (file.relativePath.startsWith('src/')) {
|
|
459
|
-
priority += 50;
|
|
460
|
-
}
|
|
461
|
-
// Type definitions
|
|
462
|
-
if (file.relativePath.includes('/types/') || file.relativePath.endsWith('.d.ts')) {
|
|
463
|
-
priority += 40;
|
|
464
|
-
}
|
|
465
|
-
// Test files get lower priority
|
|
466
|
-
if (file.relativePath.includes('test') || file.relativePath.includes('spec')) {
|
|
467
|
-
priority -= 20;
|
|
468
|
-
}
|
|
469
|
-
// Recently modified files (if we had that info)
|
|
470
|
-
// This could be enhanced with git integration
|
|
471
|
-
// Smaller files are slightly preferred (easier to include more context)
|
|
472
|
-
if (file.tokenCount < 500) {
|
|
473
|
-
priority += 10;
|
|
474
|
-
}
|
|
475
|
-
else if (file.tokenCount > 5000) {
|
|
476
|
-
priority -= 10;
|
|
477
|
-
}
|
|
478
|
-
return priority;
|
|
479
|
-
}
|
|
480
|
-
/**
|
|
481
|
-
* Selects files that fit within the token budget
|
|
482
|
-
*/
|
|
483
|
-
selectFilesWithinBudget(files, budget) {
|
|
484
|
-
const maxBudget = budget ?? this.maxTokens;
|
|
485
|
-
const selected = [];
|
|
486
|
-
let currentTokens = 0;
|
|
487
|
-
for (const file of files) {
|
|
488
|
-
if (selected.length >= this.maxFiles) {
|
|
489
|
-
break;
|
|
490
|
-
}
|
|
491
|
-
if (currentTokens + file.tokenCount <= maxBudget) {
|
|
492
|
-
selected.push(file);
|
|
493
|
-
currentTokens += file.tokenCount;
|
|
494
|
-
}
|
|
495
|
-
}
|
|
496
|
-
return selected;
|
|
497
|
-
}
|
|
498
|
-
/**
|
|
499
|
-
* Generates a summary of the context
|
|
500
|
-
*/
|
|
501
|
-
generateContextSummary(files) {
|
|
502
|
-
const languageCounts = {};
|
|
503
|
-
let totalTokens = 0;
|
|
504
|
-
for (const file of files) {
|
|
505
|
-
languageCounts[file.language] = (languageCounts[file.language] || 0) + 1;
|
|
506
|
-
totalTokens += file.tokenCount;
|
|
507
|
-
}
|
|
508
|
-
const languageList = Object.entries(languageCounts)
|
|
509
|
-
.sort((a, b) => b[1] - a[1])
|
|
510
|
-
.map(([lang, count]) => `${lang}: ${count}`)
|
|
511
|
-
.join(', ');
|
|
512
|
-
return `${files.length} files (${totalTokens.toLocaleString()} tokens) - ${languageList}`;
|
|
513
|
-
}
|
|
514
|
-
/**
|
|
515
|
-
* Detects the project type based on marker files present in the project root
|
|
516
|
-
*/
|
|
517
|
-
async detectProjectType() {
|
|
518
|
-
// Check for TypeScript first (more specific than nodejs)
|
|
519
|
-
for (const marker of PROJECT_MARKERS.typescript) {
|
|
520
|
-
if (await pathExists(path.join(this.projectRoot, marker))) {
|
|
521
|
-
return 'typescript';
|
|
522
|
-
}
|
|
523
|
-
}
|
|
524
|
-
// Check other project types in order of specificity
|
|
525
|
-
const typeOrder = [
|
|
526
|
-
'rust', 'go', 'python', 'java', 'csharp', 'ruby', 'php', 'nodejs'
|
|
527
|
-
];
|
|
528
|
-
for (const projectType of typeOrder) {
|
|
529
|
-
const markers = PROJECT_MARKERS[projectType];
|
|
530
|
-
for (const marker of markers) {
|
|
531
|
-
// Handle glob patterns like *.csproj
|
|
532
|
-
if (marker.includes('*')) {
|
|
533
|
-
const matches = await glob(marker, {
|
|
534
|
-
cwd: this.projectRoot,
|
|
535
|
-
nodir: true,
|
|
536
|
-
});
|
|
537
|
-
if (matches.length > 0) {
|
|
538
|
-
return projectType;
|
|
539
|
-
}
|
|
540
|
-
}
|
|
541
|
-
else if (await pathExists(path.join(this.projectRoot, marker))) {
|
|
542
|
-
return projectType;
|
|
543
|
-
}
|
|
544
|
-
}
|
|
545
|
-
}
|
|
546
|
-
return 'unknown';
|
|
547
|
-
}
|
|
548
|
-
/**
|
|
549
|
-
* Generates a directory tree in markdown format
|
|
550
|
-
* @param maxDepth - Maximum depth to traverse (default: 6)
|
|
551
|
-
* @param maxItems - Maximum items per directory to show (default: 20)
|
|
552
|
-
*/
|
|
553
|
-
async getDirectoryTree(maxDepth = 6, maxItems = 20) {
|
|
554
|
-
const lines = [];
|
|
555
|
-
const rootName = path.basename(this.projectRoot);
|
|
556
|
-
lines.push(rootName + '/');
|
|
557
|
-
// Get session excluded folders for tree filtering
|
|
558
|
-
const sessionManager = getSessionManager();
|
|
559
|
-
const sessionExcludedFolders = sessionManager.getExcludedFolders();
|
|
560
|
-
await this.buildTreeRecursive('', 0, maxDepth, maxItems, lines, '', sessionExcludedFolders);
|
|
561
|
-
return lines.join('\n');
|
|
562
|
-
}
|
|
563
|
-
/**
|
|
564
|
-
* Generates a compact directory tree for classifier/routing prompts.
|
|
565
|
-
* Uses shallow traversal and emits summary lines at the depth boundary
|
|
566
|
-
* instead of enumerating every file.
|
|
567
|
-
* @param maxDepth - Maximum depth to traverse (default: 3)
|
|
568
|
-
* @param maxItems - Maximum items per directory to show (default: 15)
|
|
569
|
-
*/
|
|
570
|
-
async getCompactDirectoryTree(maxDepth = 3, maxItems = 15) {
|
|
571
|
-
const lines = [];
|
|
572
|
-
const rootName = path.basename(this.projectRoot);
|
|
573
|
-
lines.push(rootName + '/');
|
|
574
|
-
const sessionManager = getSessionManager();
|
|
575
|
-
const sessionExcludedFolders = sessionManager.getExcludedFolders();
|
|
576
|
-
await this.buildCompactTreeRecursive('', 0, maxDepth, maxItems, lines, '', sessionExcludedFolders);
|
|
577
|
-
return lines.join('\n');
|
|
578
|
-
}
|
|
579
|
-
/**
|
|
580
|
-
* Recursively builds a compact directory tree.
|
|
581
|
-
* At the depth boundary, directories are summarized with file/subdir counts
|
|
582
|
-
* instead of being traversed further.
|
|
583
|
-
*/
|
|
584
|
-
async buildCompactTreeRecursive(relativePath, depth, maxDepth, maxItems, lines, prefix, sessionExcludedFolders = []) {
|
|
585
|
-
const currentPath = path.join(this.projectRoot, relativePath);
|
|
586
|
-
try {
|
|
587
|
-
const { readdir } = await import('fs/promises');
|
|
588
|
-
const entries = await readdir(currentPath, { withFileTypes: true });
|
|
589
|
-
const filtered = entries.filter((entry) => {
|
|
590
|
-
const name = entry.name;
|
|
591
|
-
if (entry.isDirectory()) {
|
|
592
|
-
if (shouldExcludeDirectory(name))
|
|
593
|
-
return false;
|
|
594
|
-
const entryRelativePath = relativePath ? `${relativePath}/${name}` : name;
|
|
595
|
-
return !shouldExcludeSessionPath(entryRelativePath, sessionExcludedFolders);
|
|
596
|
-
}
|
|
597
|
-
return !shouldExcludeFile(name);
|
|
598
|
-
});
|
|
599
|
-
filtered.sort((a, b) => {
|
|
600
|
-
if (a.isDirectory() && !b.isDirectory())
|
|
601
|
-
return -1;
|
|
602
|
-
if (!a.isDirectory() && b.isDirectory())
|
|
603
|
-
return 1;
|
|
604
|
-
return a.name.localeCompare(b.name);
|
|
605
|
-
});
|
|
606
|
-
const itemsToShow = filtered.slice(0, maxItems);
|
|
607
|
-
const hasMore = filtered.length > maxItems;
|
|
608
|
-
// At max depth, summarize directories instead of recursing
|
|
609
|
-
if (depth >= maxDepth) {
|
|
610
|
-
// Just report that this directory has content (caller will summarize)
|
|
611
|
-
return filtered.length > 0;
|
|
612
|
-
}
|
|
613
|
-
// Build visible entries with child content or summaries
|
|
614
|
-
const visibleEntries = [];
|
|
615
|
-
for (const entry of itemsToShow) {
|
|
616
|
-
if (entry.isDirectory()) {
|
|
617
|
-
const childRelPath = relativePath ? `${relativePath}/${entry.name}` : entry.name;
|
|
618
|
-
if (depth + 1 >= maxDepth) {
|
|
619
|
-
// At the boundary: summarize instead of recursing
|
|
620
|
-
const summary = await this.summarizeDirectory(childRelPath, sessionExcludedFolders);
|
|
621
|
-
visibleEntries.push({ entry, summary });
|
|
622
|
-
}
|
|
623
|
-
else {
|
|
624
|
-
// Still within depth: recurse normally
|
|
625
|
-
const childLines = [];
|
|
626
|
-
const hasContent = await this.buildCompactTreeRecursive(childRelPath, depth + 1, maxDepth, maxItems, childLines, '', sessionExcludedFolders);
|
|
627
|
-
if (hasContent) {
|
|
628
|
-
visibleEntries.push({ entry, childLines });
|
|
629
|
-
}
|
|
630
|
-
}
|
|
631
|
-
}
|
|
632
|
-
else {
|
|
633
|
-
visibleEntries.push({ entry });
|
|
634
|
-
}
|
|
635
|
-
}
|
|
636
|
-
if (hasMore) {
|
|
637
|
-
visibleEntries.push({ entry: null });
|
|
638
|
-
}
|
|
639
|
-
if (visibleEntries.length === 0)
|
|
640
|
-
return false;
|
|
641
|
-
for (let i = 0; i < visibleEntries.length; i++) {
|
|
642
|
-
const { entry, childLines, summary } = visibleEntries[i];
|
|
643
|
-
const isLast = i === visibleEntries.length - 1;
|
|
644
|
-
const connector = isLast ? '└── ' : '├── ';
|
|
645
|
-
const childPrefix = isLast ? ' ' : '│ ';
|
|
646
|
-
if (entry === null) {
|
|
647
|
-
lines.push(prefix + connector + '... (' + (filtered.length - maxItems) + ' more items)');
|
|
648
|
-
}
|
|
649
|
-
else if (entry.isDirectory()) {
|
|
650
|
-
if (summary) {
|
|
651
|
-
lines.push(prefix + connector + entry.name + '/ ' + summary);
|
|
652
|
-
}
|
|
653
|
-
else {
|
|
654
|
-
lines.push(prefix + connector + entry.name + '/');
|
|
655
|
-
for (const childLine of childLines) {
|
|
656
|
-
lines.push(prefix + childPrefix + childLine);
|
|
657
|
-
}
|
|
658
|
-
}
|
|
659
|
-
}
|
|
660
|
-
else {
|
|
661
|
-
lines.push(prefix + connector + entry.name);
|
|
662
|
-
}
|
|
663
|
-
}
|
|
664
|
-
return true;
|
|
665
|
-
}
|
|
666
|
-
catch (error) {
|
|
667
|
-
logger.debug(`Failed to read directory: ${currentPath}`, error);
|
|
668
|
-
return false;
|
|
669
|
-
}
|
|
670
|
-
}
|
|
671
|
-
/**
|
|
672
|
-
* Summarizes a directory by counting subdirectories and files recursively.
|
|
673
|
-
* Returns a string like "(8 subdirs, 42 files)".
|
|
674
|
-
*/
|
|
675
|
-
async summarizeDirectory(relativePath, sessionExcludedFolders = []) {
|
|
676
|
-
let subdirs = 0;
|
|
677
|
-
let files = 0;
|
|
678
|
-
const countRecursive = async (relPath) => {
|
|
679
|
-
const fullPath = path.join(this.projectRoot, relPath);
|
|
680
|
-
try {
|
|
681
|
-
const { readdir } = await import('fs/promises');
|
|
682
|
-
const entries = await readdir(fullPath, { withFileTypes: true });
|
|
683
|
-
for (const entry of entries) {
|
|
684
|
-
if (entry.isDirectory()) {
|
|
685
|
-
if (shouldExcludeDirectory(entry.name))
|
|
686
|
-
continue;
|
|
687
|
-
const entryRelPath = relPath ? `${relPath}/${entry.name}` : entry.name;
|
|
688
|
-
if (shouldExcludeSessionPath(entryRelPath, sessionExcludedFolders))
|
|
689
|
-
continue;
|
|
690
|
-
subdirs++;
|
|
691
|
-
await countRecursive(entryRelPath);
|
|
692
|
-
}
|
|
693
|
-
else {
|
|
694
|
-
if (!shouldExcludeFile(entry.name)) {
|
|
695
|
-
files++;
|
|
696
|
-
}
|
|
697
|
-
}
|
|
698
|
-
}
|
|
699
|
-
}
|
|
700
|
-
catch {
|
|
701
|
-
// Skip unreadable directories
|
|
702
|
-
}
|
|
703
|
-
};
|
|
704
|
-
await countRecursive(relativePath);
|
|
705
|
-
const parts = [];
|
|
706
|
-
if (subdirs > 0)
|
|
707
|
-
parts.push(`${subdirs} subdir${subdirs !== 1 ? 's' : ''}`);
|
|
708
|
-
if (files > 0)
|
|
709
|
-
parts.push(`${files} file${files !== 1 ? 's' : ''}`);
|
|
710
|
-
return parts.length > 0 ? `(${parts.join(', ')})` : '(empty)';
|
|
711
|
-
}
|
|
712
|
-
/**
|
|
713
|
-
* Recursively builds the directory tree
|
|
714
|
-
*/
|
|
715
|
-
async buildTreeRecursive(relativePath, depth, maxDepth, maxItems, lines, prefix, sessionExcludedFolders = []) {
|
|
716
|
-
if (depth >= maxDepth)
|
|
717
|
-
return false;
|
|
718
|
-
const currentPath = path.join(this.projectRoot, relativePath);
|
|
719
|
-
try {
|
|
720
|
-
const { readdir } = await import('fs/promises');
|
|
721
|
-
const entries = await readdir(currentPath, { withFileTypes: true });
|
|
722
|
-
// Filter out excluded directories/files using shared patterns and session exclusions
|
|
723
|
-
const filtered = entries.filter((entry) => {
|
|
724
|
-
const name = entry.name;
|
|
725
|
-
if (entry.isDirectory()) {
|
|
726
|
-
// Check default exclusions first
|
|
727
|
-
if (shouldExcludeDirectory(name)) {
|
|
728
|
-
return false;
|
|
729
|
-
}
|
|
730
|
-
// Check session exclusions using full relative path
|
|
731
|
-
const entryRelativePath = relativePath ? `${relativePath}/${name}` : name;
|
|
732
|
-
return !shouldExcludeSessionPath(entryRelativePath, sessionExcludedFolders);
|
|
733
|
-
}
|
|
734
|
-
return !shouldExcludeFile(name);
|
|
735
|
-
});
|
|
736
|
-
// Sort: directories first, then files, alphabetically
|
|
737
|
-
filtered.sort((a, b) => {
|
|
738
|
-
if (a.isDirectory() && !b.isDirectory())
|
|
739
|
-
return -1;
|
|
740
|
-
if (!a.isDirectory() && b.isDirectory())
|
|
741
|
-
return 1;
|
|
742
|
-
return a.name.localeCompare(b.name);
|
|
743
|
-
});
|
|
744
|
-
// Limit items shown
|
|
745
|
-
const itemsToShow = filtered.slice(0, maxItems);
|
|
746
|
-
const hasMore = filtered.length > maxItems;
|
|
747
|
-
// First pass: resolve directories to determine which have visible content
|
|
748
|
-
// Each visible entry is { entry, childLines } where childLines is set for non-empty dirs
|
|
749
|
-
const visibleEntries = [];
|
|
750
|
-
for (const entry of itemsToShow) {
|
|
751
|
-
if (entry.isDirectory()) {
|
|
752
|
-
// Recurse into a temporary buffer to check for content
|
|
753
|
-
const childLines = [];
|
|
754
|
-
const hasContent = await this.buildTreeRecursive(path.join(relativePath, entry.name), depth + 1, maxDepth, maxItems, childLines, '', // Use empty prefix; we'll re-prefix when rendering
|
|
755
|
-
sessionExcludedFolders);
|
|
756
|
-
if (hasContent) {
|
|
757
|
-
visibleEntries.push({ entry, childLines });
|
|
758
|
-
}
|
|
759
|
-
}
|
|
760
|
-
else {
|
|
761
|
-
visibleEntries.push({ entry });
|
|
762
|
-
}
|
|
763
|
-
}
|
|
764
|
-
if (hasMore) {
|
|
765
|
-
// Count as a visible entry for connector logic
|
|
766
|
-
visibleEntries.push({ entry: null });
|
|
767
|
-
}
|
|
768
|
-
if (visibleEntries.length === 0)
|
|
769
|
-
return false;
|
|
770
|
-
// Second pass: render with correct connectors
|
|
771
|
-
for (let i = 0; i < visibleEntries.length; i++) {
|
|
772
|
-
const { entry, childLines } = visibleEntries[i];
|
|
773
|
-
const isLast = i === visibleEntries.length - 1;
|
|
774
|
-
const connector = isLast ? '└── ' : '├── ';
|
|
775
|
-
const childPrefix = isLast ? ' ' : '│ ';
|
|
776
|
-
if (entry === null) {
|
|
777
|
-
// "has more" marker
|
|
778
|
-
lines.push(prefix + connector + '... (' + (filtered.length - maxItems) + ' more items)');
|
|
779
|
-
}
|
|
780
|
-
else if (entry.isDirectory()) {
|
|
781
|
-
lines.push(prefix + connector + entry.name + '/');
|
|
782
|
-
// Re-prefix the child lines collected with empty prefix
|
|
783
|
-
for (const childLine of childLines) {
|
|
784
|
-
lines.push(prefix + childPrefix + childLine);
|
|
785
|
-
}
|
|
786
|
-
}
|
|
787
|
-
else {
|
|
788
|
-
lines.push(prefix + connector + entry.name);
|
|
789
|
-
}
|
|
790
|
-
}
|
|
791
|
-
return true;
|
|
792
|
-
}
|
|
793
|
-
catch (error) {
|
|
794
|
-
logger.debug(`Failed to read directory: ${currentPath}`, error);
|
|
795
|
-
return false;
|
|
796
|
-
}
|
|
797
|
-
}
|
|
798
|
-
/**
|
|
799
|
-
* Extracts a summary of project configuration files (package.json, etc.)
|
|
800
|
-
* Returns only essential fields to minimize token usage
|
|
801
|
-
*/
|
|
802
|
-
async getConfigSummary() {
|
|
803
|
-
const summary = {};
|
|
804
|
-
// Try package.json first (Node.js/TypeScript projects)
|
|
805
|
-
const packageJsonPath = path.join(this.projectRoot, 'package.json');
|
|
806
|
-
if (await pathExists(packageJsonPath)) {
|
|
807
|
-
try {
|
|
808
|
-
const content = await safeReadFile(packageJsonPath);
|
|
809
|
-
if (content) {
|
|
810
|
-
const pkg = JSON.parse(content);
|
|
811
|
-
summary.name = pkg.name;
|
|
812
|
-
summary.description = pkg.description;
|
|
813
|
-
summary.version = pkg.version;
|
|
814
|
-
summary.main = pkg.main || pkg.module;
|
|
815
|
-
// Only include script names and commands (useful for LLM to know available commands)
|
|
816
|
-
if (pkg.scripts && typeof pkg.scripts === 'object') {
|
|
817
|
-
summary.scripts = pkg.scripts;
|
|
818
|
-
}
|
|
819
|
-
// Only include dependency names (not versions) to save tokens
|
|
820
|
-
if (pkg.dependencies) {
|
|
821
|
-
summary.dependencies = Object.keys(pkg.dependencies);
|
|
822
|
-
}
|
|
823
|
-
if (pkg.devDependencies) {
|
|
824
|
-
summary.devDependencies = Object.keys(pkg.devDependencies);
|
|
825
|
-
}
|
|
826
|
-
}
|
|
827
|
-
}
|
|
828
|
-
catch (error) {
|
|
829
|
-
logger.debug('Failed to parse package.json', error);
|
|
830
|
-
}
|
|
831
|
-
}
|
|
832
|
-
// Try pyproject.toml (Python projects)
|
|
833
|
-
const pyprojectPath = path.join(this.projectRoot, 'pyproject.toml');
|
|
834
|
-
if (await pathExists(pyprojectPath) && !summary.name) {
|
|
835
|
-
try {
|
|
836
|
-
const content = await safeReadFile(pyprojectPath);
|
|
837
|
-
if (content) {
|
|
838
|
-
// Basic TOML parsing for project name/description
|
|
839
|
-
const nameMatch = content.match(/name\s*=\s*["']([^"']+)["']/);
|
|
840
|
-
const descMatch = content.match(/description\s*=\s*["']([^"']+)["']/);
|
|
841
|
-
const versionMatch = content.match(/version\s*=\s*["']([^"']+)["']/);
|
|
842
|
-
if (nameMatch)
|
|
843
|
-
summary.name = nameMatch[1];
|
|
844
|
-
if (descMatch)
|
|
845
|
-
summary.description = descMatch[1];
|
|
846
|
-
if (versionMatch)
|
|
847
|
-
summary.version = versionMatch[1];
|
|
848
|
-
}
|
|
849
|
-
}
|
|
850
|
-
catch (error) {
|
|
851
|
-
logger.debug('Failed to parse pyproject.toml', error);
|
|
852
|
-
}
|
|
853
|
-
}
|
|
854
|
-
// Try Cargo.toml (Rust projects)
|
|
855
|
-
const cargoPath = path.join(this.projectRoot, 'Cargo.toml');
|
|
856
|
-
if (await pathExists(cargoPath) && !summary.name) {
|
|
857
|
-
try {
|
|
858
|
-
const content = await safeReadFile(cargoPath);
|
|
859
|
-
if (content) {
|
|
860
|
-
const nameMatch = content.match(/name\s*=\s*["']([^"']+)["']/);
|
|
861
|
-
const descMatch = content.match(/description\s*=\s*["']([^"']+)["']/);
|
|
862
|
-
const versionMatch = content.match(/version\s*=\s*["']([^"']+)["']/);
|
|
863
|
-
if (nameMatch)
|
|
864
|
-
summary.name = nameMatch[1];
|
|
865
|
-
if (descMatch)
|
|
866
|
-
summary.description = descMatch[1];
|
|
867
|
-
if (versionMatch)
|
|
868
|
-
summary.version = versionMatch[1];
|
|
869
|
-
}
|
|
870
|
-
}
|
|
871
|
-
catch (error) {
|
|
872
|
-
logger.debug('Failed to parse Cargo.toml', error);
|
|
873
|
-
}
|
|
874
|
-
}
|
|
875
|
-
// Try go.mod (Go projects)
|
|
876
|
-
const goModPath = path.join(this.projectRoot, 'go.mod');
|
|
877
|
-
if (await pathExists(goModPath) && !summary.name) {
|
|
878
|
-
try {
|
|
879
|
-
const content = await safeReadFile(goModPath);
|
|
880
|
-
if (content) {
|
|
881
|
-
const moduleMatch = content.match(/module\s+(\S+)/);
|
|
882
|
-
if (moduleMatch)
|
|
883
|
-
summary.name = moduleMatch[1];
|
|
884
|
-
}
|
|
885
|
-
}
|
|
886
|
-
catch (error) {
|
|
887
|
-
logger.debug('Failed to parse go.mod', error);
|
|
888
|
-
}
|
|
889
|
-
}
|
|
890
|
-
return summary;
|
|
891
|
-
}
|
|
892
|
-
/**
|
|
893
|
-
* Gets a complete lightweight project summary suitable for system prompt injection
|
|
894
|
-
*/
|
|
895
|
-
async getProjectSummary() {
|
|
896
|
-
// Gather all information in parallel where possible
|
|
897
|
-
const [projectType, directoryTree, compactDirectoryTree, config, files] = await Promise.all([
|
|
898
|
-
this.detectProjectType(),
|
|
899
|
-
this.getDirectoryTree(),
|
|
900
|
-
this.getCompactDirectoryTree(),
|
|
901
|
-
this.getConfigSummary(),
|
|
902
|
-
this.discoverFiles(),
|
|
903
|
-
]);
|
|
904
|
-
// Detect primary languages from discovered files
|
|
905
|
-
const languageCounts = {};
|
|
906
|
-
for (const file of files) {
|
|
907
|
-
const ext = path.extname(file).toLowerCase();
|
|
908
|
-
const lang = EXTENSION_TO_LANGUAGE[ext];
|
|
909
|
-
if (lang && lang !== 'text') {
|
|
910
|
-
languageCounts[lang] = (languageCounts[lang] || 0) + 1;
|
|
911
|
-
}
|
|
912
|
-
}
|
|
913
|
-
const languages = Object.entries(languageCounts)
|
|
914
|
-
.sort((a, b) => b[1] - a[1])
|
|
915
|
-
.slice(0, 5)
|
|
916
|
-
.map(([lang]) => lang);
|
|
917
|
-
const name = config.name || path.basename(this.projectRoot);
|
|
918
|
-
const summary = {
|
|
919
|
-
projectType,
|
|
920
|
-
name,
|
|
921
|
-
projectRoot: this.projectRoot,
|
|
922
|
-
directoryTree,
|
|
923
|
-
compactDirectoryTree,
|
|
924
|
-
config,
|
|
925
|
-
languages,
|
|
926
|
-
fileCount: files.length,
|
|
927
|
-
formatted: '', // Will be set below
|
|
928
|
-
};
|
|
929
|
-
// Generate formatted string for system prompt
|
|
930
|
-
summary.formatted = this.formatProjectSummaryForPrompt(summary);
|
|
931
|
-
return summary;
|
|
932
|
-
}
|
|
933
|
-
/**
|
|
934
|
-
* Formats the project summary as a string suitable for system prompt injection
|
|
935
|
-
*/
|
|
936
|
-
formatProjectSummaryForPrompt(summary) {
|
|
937
|
-
const parts = [];
|
|
938
|
-
parts.push('## Project Context');
|
|
939
|
-
parts.push('');
|
|
940
|
-
parts.push(`**Project:** ${summary.name}`);
|
|
941
|
-
parts.push(`**Type:** ${summary.projectType}`);
|
|
942
|
-
parts.push(`**Languages:** ${summary.languages.join(', ') || 'unknown'}`);
|
|
943
|
-
parts.push(`**Files:** ${summary.fileCount}`);
|
|
944
|
-
parts.push('');
|
|
945
|
-
// Add config info if available
|
|
946
|
-
if (summary.config.description) {
|
|
947
|
-
parts.push(`**Description:** ${summary.config.description}`);
|
|
948
|
-
parts.push('');
|
|
949
|
-
}
|
|
950
|
-
// Add available scripts (very useful for LLM to know what commands exist)
|
|
951
|
-
if (summary.config.scripts && Object.keys(summary.config.scripts).length > 0) {
|
|
952
|
-
parts.push('**Available Scripts:**');
|
|
953
|
-
for (const [scriptName, scriptCmd] of Object.entries(summary.config.scripts)) {
|
|
954
|
-
parts.push(`- \`npm run ${scriptName}\`: ${scriptCmd}`);
|
|
955
|
-
}
|
|
956
|
-
parts.push('');
|
|
957
|
-
}
|
|
958
|
-
// Add dependencies summary (just names, not full list if too long)
|
|
959
|
-
if (summary.config.dependencies && summary.config.dependencies.length > 0) {
|
|
960
|
-
const deps = summary.config.dependencies;
|
|
961
|
-
if (deps.length <= 10) {
|
|
962
|
-
parts.push(`**Dependencies:** ${deps.join(', ')}`);
|
|
963
|
-
}
|
|
964
|
-
else {
|
|
965
|
-
parts.push(`**Dependencies:** ${deps.slice(0, 10).join(', ')} (+${deps.length - 10} more)`);
|
|
966
|
-
}
|
|
967
|
-
parts.push('');
|
|
968
|
-
}
|
|
969
|
-
// Add directory tree
|
|
970
|
-
parts.push('**Directory Structure:**');
|
|
971
|
-
parts.push('```');
|
|
972
|
-
parts.push(summary.directoryTree);
|
|
973
|
-
parts.push('```');
|
|
974
|
-
return parts.join('\n');
|
|
975
|
-
}
|
|
976
|
-
}
|
|
977
|
-
// Singleton instance
|
|
978
|
-
let contextBuilderInstance = null;
|
|
979
|
-
/**
|
|
980
|
-
* Gets the singleton ContextBuilder instance.
|
|
981
|
-
* Creates the instance on first call with default options.
|
|
982
|
-
*
|
|
983
|
-
* @param options - Optional configuration options
|
|
984
|
-
* @returns The ContextBuilder instance
|
|
985
|
-
*/
|
|
986
|
-
export function getContextBuilder(options) {
|
|
987
|
-
if (!contextBuilderInstance) {
|
|
988
|
-
contextBuilderInstance = new ContextBuilder(options);
|
|
989
|
-
}
|
|
990
|
-
else if (options) {
|
|
991
|
-
// Update options if provided
|
|
992
|
-
if (options.projectRoot) {
|
|
993
|
-
contextBuilderInstance.setProjectRoot(options.projectRoot);
|
|
994
|
-
}
|
|
995
|
-
if (options.maxTokens) {
|
|
996
|
-
contextBuilderInstance.setMaxTokens(options.maxTokens);
|
|
997
|
-
}
|
|
998
|
-
if (options.maxFiles) {
|
|
999
|
-
contextBuilderInstance.setMaxFiles(options.maxFiles);
|
|
1000
|
-
}
|
|
1001
|
-
if (options.priorityFiles) {
|
|
1002
|
-
contextBuilderInstance.addPriorityFiles(options.priorityFiles);
|
|
1003
|
-
}
|
|
1004
|
-
}
|
|
1005
|
-
return contextBuilderInstance;
|
|
1006
|
-
}
|
|
1007
|
-
/**
|
|
1008
|
-
* Creates a new ContextBuilder instance with the specified options.
|
|
1009
|
-
* Use this when you need a separate instance from the singleton.
|
|
1010
|
-
*
|
|
1011
|
-
* @param options - Configuration options
|
|
1012
|
-
* @returns A new ContextBuilder instance
|
|
1013
|
-
*/
|
|
1014
|
-
export function createContextBuilder(options) {
|
|
1015
|
-
return new ContextBuilder(options);
|
|
1016
|
-
}
|
|
1017
|
-
export { ContextBuilder, DEFAULT_IGNORE_PATTERNS, EXTENSION_TO_LANGUAGE, PROJECT_MARKERS, };
|
|
1018
|
-
//# sourceMappingURL=context-builder.js.map
|