@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,876 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* File operations service for safe read/write with backup integration,
|
|
3
|
-
* atomic multi-file operations, and rollback capability.
|
|
4
|
-
*
|
|
5
|
-
* This service provides a high-level interface for file operations that:
|
|
6
|
-
* - Integrates with BackupManager for automatic backup creation
|
|
7
|
-
* - Supports atomic multi-file transactions with rollback
|
|
8
|
-
* - Integrates with ApprovalManager for user consent
|
|
9
|
-
* - Emits events for UI updates
|
|
10
|
-
* - Provides safe path handling to prevent directory traversal
|
|
11
|
-
*/
|
|
12
|
-
import path from 'path';
|
|
13
|
-
import { v4 as uuidv4 } from 'uuid';
|
|
14
|
-
import { safeReadFile, safeWriteFile, safeReadJson, pathExists, ensureDir, remove, copy, stat, isDirectory, isFile, } from '../utils/file-system.js';
|
|
15
|
-
import { sanitizePath, isPathWithin, getGlobalCompassDir, getProjectCompassDir } from '../utils/path.js';
|
|
16
|
-
import { generateDiff } from '../utils/diff.js';
|
|
17
|
-
import { formatTimestamp } from '../utils/format.js';
|
|
18
|
-
import { logger } from '../utils/logger.js';
|
|
19
|
-
import { getBackupManager } from './backup-manager.js';
|
|
20
|
-
import { getApprovalManager } from './approval-manager.js';
|
|
21
|
-
import { getEventEmitter } from '../core/event-emitter.js';
|
|
22
|
-
import { getSystemEventLogger } from './system-event-logger.js';
|
|
23
|
-
import { getTempFileService } from './temp-file-service.js';
|
|
24
|
-
/**
|
|
25
|
-
* FileService provides safe file operations with backup integration,
|
|
26
|
-
* approval workflow, and transaction support for atomic multi-file operations.
|
|
27
|
-
*/
|
|
28
|
-
class FileService {
|
|
29
|
-
/** Project root directory for path validation */
|
|
30
|
-
projectRoot = process.cwd();
|
|
31
|
-
/** Currently active transaction */
|
|
32
|
-
activeTransaction = null;
|
|
33
|
-
/** Set of external file paths that have been approved for reading this session */
|
|
34
|
-
approvedExternalPaths = new Set();
|
|
35
|
-
/**
|
|
36
|
-
* Sets the project root directory for path validation
|
|
37
|
-
* @param projectRoot - The root directory of the project
|
|
38
|
-
*/
|
|
39
|
-
setProjectRoot(projectRoot) {
|
|
40
|
-
this.projectRoot = projectRoot;
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Gets the current project root
|
|
44
|
-
* @returns The project root directory
|
|
45
|
-
*/
|
|
46
|
-
getProjectRoot() {
|
|
47
|
-
return this.projectRoot;
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Reads a file safely with path validation
|
|
51
|
-
* @param filePath - Path to the file (relative or absolute)
|
|
52
|
-
* @param options - Read options
|
|
53
|
-
* @returns File content or null if not found
|
|
54
|
-
*/
|
|
55
|
-
async readFile(filePath, options = {}) {
|
|
56
|
-
const { requireApprovalForExternal = true } = options;
|
|
57
|
-
// Allow external paths for reads since we have approval flow for external files
|
|
58
|
-
const safePath = this.validatePath(filePath, true);
|
|
59
|
-
if (!safePath) {
|
|
60
|
-
logger.warn(`Path validation failed for: ${filePath}`);
|
|
61
|
-
return options.fallback ?? null;
|
|
62
|
-
}
|
|
63
|
-
// Check if this is an external file (outside project root)
|
|
64
|
-
const isExternal = this.isExternalPath(safePath);
|
|
65
|
-
// Request approval for external files if required and not already approved
|
|
66
|
-
if (isExternal && requireApprovalForExternal && !this.approvedExternalPaths.has(safePath)) {
|
|
67
|
-
const approvalManager = getApprovalManager();
|
|
68
|
-
const approvalResponse = await approvalManager.requestApproval('file_read_external', `Read external file: ${filePath}`, {
|
|
69
|
-
filePaths: [filePath],
|
|
70
|
-
affectedFiles: 1,
|
|
71
|
-
});
|
|
72
|
-
if (!approvalResponse.approved) {
|
|
73
|
-
logger.info(`External file read rejected by user: ${filePath}`);
|
|
74
|
-
return options.fallback ?? null;
|
|
75
|
-
}
|
|
76
|
-
// Remember this path as approved for the session
|
|
77
|
-
this.approvedExternalPaths.add(safePath);
|
|
78
|
-
}
|
|
79
|
-
const content = await safeReadFile(safePath, {
|
|
80
|
-
encoding: options.encoding,
|
|
81
|
-
fallback: options.fallback,
|
|
82
|
-
});
|
|
83
|
-
// Log file read event
|
|
84
|
-
if (content !== null) {
|
|
85
|
-
getSystemEventLogger().logFileRead(filePath, content.length, true);
|
|
86
|
-
}
|
|
87
|
-
return content;
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Checks if a path is external (outside the project root)
|
|
91
|
-
* @param filePath - Absolute path to check
|
|
92
|
-
* @returns True if the path is outside the project root
|
|
93
|
-
*/
|
|
94
|
-
isExternalPath(filePath) {
|
|
95
|
-
if (!isPathWithin(filePath, this.projectRoot)) {
|
|
96
|
-
// Compass-managed directories are internal safe paths, not external
|
|
97
|
-
const globalCompass = getGlobalCompassDir();
|
|
98
|
-
const projectCompass = getProjectCompassDir(this.projectRoot);
|
|
99
|
-
if (filePath.startsWith(globalCompass) || filePath.startsWith(projectCompass)) {
|
|
100
|
-
return false;
|
|
101
|
-
}
|
|
102
|
-
return true;
|
|
103
|
-
}
|
|
104
|
-
return false;
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Reads and parses a JSON file
|
|
108
|
-
* @param filePath - Path to the JSON file
|
|
109
|
-
* @param fallback - Fallback value if file doesn't exist or is invalid
|
|
110
|
-
* @returns Parsed JSON or fallback value
|
|
111
|
-
*/
|
|
112
|
-
async readJsonFile(filePath, fallback) {
|
|
113
|
-
const safePath = this.validatePath(filePath);
|
|
114
|
-
if (!safePath) {
|
|
115
|
-
logger.warn(`Path validation failed for: ${filePath}`);
|
|
116
|
-
return fallback ?? null;
|
|
117
|
-
}
|
|
118
|
-
return safeReadJson(safePath, fallback);
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Writes content to a file with backup and approval integration
|
|
122
|
-
* @param filePath - Path to the file (relative or absolute)
|
|
123
|
-
* @param content - Content to write
|
|
124
|
-
* @param options - Write options
|
|
125
|
-
* @returns Operation result
|
|
126
|
-
*/
|
|
127
|
-
async writeFile(filePath, content, options = {}) {
|
|
128
|
-
const { createBackup = true, requireApproval = true, description, atomic = true, complexityContext, } = options;
|
|
129
|
-
const safePath = this.validatePath(filePath);
|
|
130
|
-
if (!safePath) {
|
|
131
|
-
return {
|
|
132
|
-
success: false,
|
|
133
|
-
filePath,
|
|
134
|
-
operation: 'modify',
|
|
135
|
-
error: 'Path validation failed - potential directory traversal detected',
|
|
136
|
-
};
|
|
137
|
-
}
|
|
138
|
-
const fileExists = await pathExists(safePath);
|
|
139
|
-
const operation = fileExists ? 'modify' : 'create';
|
|
140
|
-
// Get original content for diff
|
|
141
|
-
let originalContent = null;
|
|
142
|
-
let diff;
|
|
143
|
-
if (fileExists) {
|
|
144
|
-
originalContent = await safeReadFile(safePath);
|
|
145
|
-
if (originalContent !== null) {
|
|
146
|
-
diff = generateDiff(originalContent, content, {
|
|
147
|
-
fileName: path.basename(filePath),
|
|
148
|
-
});
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
else {
|
|
152
|
-
// For new files, generate diff showing all content as additions
|
|
153
|
-
diff = generateDiff('', content, {
|
|
154
|
-
fileName: path.basename(filePath),
|
|
155
|
-
});
|
|
156
|
-
}
|
|
157
|
-
// Request approval if required
|
|
158
|
-
if (requireApproval) {
|
|
159
|
-
const approvalManager = getApprovalManager();
|
|
160
|
-
const approvalType = operation === 'create' ? 'file_create' : 'file_modify';
|
|
161
|
-
// Create temp preview file for VS Code integration
|
|
162
|
-
let previewTempRecord;
|
|
163
|
-
try {
|
|
164
|
-
const tempFileService = getTempFileService();
|
|
165
|
-
previewTempRecord = await tempFileService.createTempFile({
|
|
166
|
-
prefix: '[Nova]-preview',
|
|
167
|
-
extension: path.extname(filePath),
|
|
168
|
-
content: content, // Write the full new content for preview
|
|
169
|
-
metadata: { originalPath: filePath },
|
|
170
|
-
});
|
|
171
|
-
}
|
|
172
|
-
catch {
|
|
173
|
-
// Non-critical - proceed without preview if temp file creation fails
|
|
174
|
-
logger.debug('Failed to create preview temp file, proceeding without preview');
|
|
175
|
-
}
|
|
176
|
-
const approvalResponse = await approvalManager.requestApproval(approvalType, description || `${operation === 'create' ? 'Create' : 'Modify'} file: ${filePath}`, {
|
|
177
|
-
filePaths: [filePath],
|
|
178
|
-
affectedFiles: 1,
|
|
179
|
-
linesAdded: diff?.additions,
|
|
180
|
-
linesRemoved: diff?.deletions,
|
|
181
|
-
diff: diff?.unified,
|
|
182
|
-
// Include complexity context for SMART mode decisions
|
|
183
|
-
complexityMode: complexityContext?.mode,
|
|
184
|
-
complexityConfidence: complexityContext?.confidence,
|
|
185
|
-
// Include preview file path for VS Code integration
|
|
186
|
-
previewFilePath: previewTempRecord?.tempPath,
|
|
187
|
-
});
|
|
188
|
-
// Clean up temp preview file after approval (whether approved or rejected)
|
|
189
|
-
if (previewTempRecord) {
|
|
190
|
-
try {
|
|
191
|
-
const tempFileService = getTempFileService();
|
|
192
|
-
await tempFileService.deleteTempFile(previewTempRecord.id);
|
|
193
|
-
}
|
|
194
|
-
catch {
|
|
195
|
-
// Non-critical - temp file will be cleaned up by periodic cleanup
|
|
196
|
-
logger.debug('Failed to delete preview temp file, will be cleaned up later');
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
if (!approvalResponse.approved) {
|
|
200
|
-
// Include user feedback in the error message if provided
|
|
201
|
-
const errorMessage = approvalResponse.reason
|
|
202
|
-
? approvalResponse.reason
|
|
203
|
-
: 'Operation rejected by user';
|
|
204
|
-
return {
|
|
205
|
-
success: false,
|
|
206
|
-
filePath,
|
|
207
|
-
operation,
|
|
208
|
-
error: errorMessage,
|
|
209
|
-
};
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
// Create backup if file exists and backup is requested
|
|
213
|
-
let backup;
|
|
214
|
-
if (createBackup && fileExists) {
|
|
215
|
-
const backupManager = await getBackupManager();
|
|
216
|
-
const backupRecord = await backupManager.createBackup(safePath);
|
|
217
|
-
if (backupRecord) {
|
|
218
|
-
backup = backupRecord;
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
// Write the file
|
|
222
|
-
try {
|
|
223
|
-
await safeWriteFile(safePath, content, {
|
|
224
|
-
atomic,
|
|
225
|
-
createDir: true,
|
|
226
|
-
});
|
|
227
|
-
// Emit file-modified event
|
|
228
|
-
const eventEmitter = getEventEmitter();
|
|
229
|
-
eventEmitter.emit('file-modified', { path: filePath, operation });
|
|
230
|
-
logger.info(`File ${operation}d: ${filePath}`);
|
|
231
|
-
// Log file write event
|
|
232
|
-
getSystemEventLogger().logFileWrite(filePath, content.length, true);
|
|
233
|
-
return {
|
|
234
|
-
success: true,
|
|
235
|
-
filePath,
|
|
236
|
-
operation,
|
|
237
|
-
backup,
|
|
238
|
-
diff,
|
|
239
|
-
};
|
|
240
|
-
}
|
|
241
|
-
catch (error) {
|
|
242
|
-
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
243
|
-
logger.error(`Failed to ${operation} file: ${filePath}`, error);
|
|
244
|
-
// Log file write failure
|
|
245
|
-
getSystemEventLogger().logFileWrite(filePath, content.length, false, errorMessage);
|
|
246
|
-
return {
|
|
247
|
-
success: false,
|
|
248
|
-
filePath,
|
|
249
|
-
operation,
|
|
250
|
-
backup,
|
|
251
|
-
error: errorMessage,
|
|
252
|
-
};
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
/**
|
|
256
|
-
* Writes JSON content to a file
|
|
257
|
-
* @param filePath - Path to the file
|
|
258
|
-
* @param data - Data to serialize and write
|
|
259
|
-
* @param options - Write options
|
|
260
|
-
* @returns Operation result
|
|
261
|
-
*/
|
|
262
|
-
async writeJsonFile(filePath, data, options = {}) {
|
|
263
|
-
const content = JSON.stringify(data, null, 2);
|
|
264
|
-
return this.writeFile(filePath, content, options);
|
|
265
|
-
}
|
|
266
|
-
/**
|
|
267
|
-
* Deletes a file with backup and approval integration
|
|
268
|
-
* @param filePath - Path to the file to delete
|
|
269
|
-
* @param options - Operation options
|
|
270
|
-
* @returns Operation result
|
|
271
|
-
*/
|
|
272
|
-
async deleteFile(filePath, options = {}) {
|
|
273
|
-
const { createBackup = true, requireApproval = true, description, complexityContext } = options;
|
|
274
|
-
const safePath = this.validatePath(filePath);
|
|
275
|
-
if (!safePath) {
|
|
276
|
-
return {
|
|
277
|
-
success: false,
|
|
278
|
-
filePath,
|
|
279
|
-
operation: 'delete',
|
|
280
|
-
error: 'Path validation failed - potential directory traversal detected',
|
|
281
|
-
};
|
|
282
|
-
}
|
|
283
|
-
if (!(await pathExists(safePath))) {
|
|
284
|
-
return {
|
|
285
|
-
success: false,
|
|
286
|
-
filePath,
|
|
287
|
-
operation: 'delete',
|
|
288
|
-
error: 'File does not exist',
|
|
289
|
-
};
|
|
290
|
-
}
|
|
291
|
-
// Request approval if required
|
|
292
|
-
if (requireApproval) {
|
|
293
|
-
const approvalManager = getApprovalManager();
|
|
294
|
-
const approvalResponse = await approvalManager.requestApproval('file_delete', description || `Delete file: ${filePath}`, {
|
|
295
|
-
filePaths: [filePath],
|
|
296
|
-
affectedFiles: 1,
|
|
297
|
-
// Include complexity context for SMART mode decisions
|
|
298
|
-
complexityMode: complexityContext?.mode,
|
|
299
|
-
complexityConfidence: complexityContext?.confidence,
|
|
300
|
-
});
|
|
301
|
-
if (!approvalResponse.approved) {
|
|
302
|
-
// Include user feedback in the error message if provided
|
|
303
|
-
const errorMessage = approvalResponse.reason
|
|
304
|
-
? approvalResponse.reason
|
|
305
|
-
: 'Operation rejected by user';
|
|
306
|
-
return {
|
|
307
|
-
success: false,
|
|
308
|
-
filePath,
|
|
309
|
-
operation: 'delete',
|
|
310
|
-
error: errorMessage,
|
|
311
|
-
};
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
// Create backup before deletion
|
|
315
|
-
let backup;
|
|
316
|
-
if (createBackup) {
|
|
317
|
-
const backupManager = await getBackupManager();
|
|
318
|
-
const backupRecord = await backupManager.createBackup(safePath);
|
|
319
|
-
if (backupRecord) {
|
|
320
|
-
backup = backupRecord;
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
// Delete the file
|
|
324
|
-
try {
|
|
325
|
-
await remove(safePath);
|
|
326
|
-
// Emit file-modified event
|
|
327
|
-
const eventEmitter = getEventEmitter();
|
|
328
|
-
eventEmitter.emit('file-modified', { path: filePath, operation: 'delete' });
|
|
329
|
-
logger.info(`File deleted: ${filePath}`);
|
|
330
|
-
// Log file delete event
|
|
331
|
-
getSystemEventLogger().logFileDelete(filePath, true);
|
|
332
|
-
return {
|
|
333
|
-
success: true,
|
|
334
|
-
filePath,
|
|
335
|
-
operation: 'delete',
|
|
336
|
-
backup,
|
|
337
|
-
};
|
|
338
|
-
}
|
|
339
|
-
catch (error) {
|
|
340
|
-
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
341
|
-
logger.error(`Failed to delete file: ${filePath}`, error);
|
|
342
|
-
// Log file delete failure
|
|
343
|
-
getSystemEventLogger().logFileDelete(filePath, false, errorMessage);
|
|
344
|
-
return {
|
|
345
|
-
success: false,
|
|
346
|
-
filePath,
|
|
347
|
-
operation: 'delete',
|
|
348
|
-
backup,
|
|
349
|
-
error: errorMessage,
|
|
350
|
-
};
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
|
-
/**
|
|
354
|
-
* Renames or moves a file with backup and approval integration
|
|
355
|
-
* @param oldPath - Current path of the file
|
|
356
|
-
* @param newPath - New path for the file
|
|
357
|
-
* @param options - Operation options
|
|
358
|
-
* @returns Operation result
|
|
359
|
-
*/
|
|
360
|
-
async renameFile(oldPath, newPath, options = {}) {
|
|
361
|
-
const { createBackup = true, requireApproval = true, description, complexityContext } = options;
|
|
362
|
-
const safeOldPath = this.validatePath(oldPath);
|
|
363
|
-
const safeNewPath = this.validatePath(newPath);
|
|
364
|
-
if (!safeOldPath || !safeNewPath) {
|
|
365
|
-
return {
|
|
366
|
-
success: false,
|
|
367
|
-
filePath: oldPath,
|
|
368
|
-
operation: 'rename',
|
|
369
|
-
error: 'Path validation failed - potential directory traversal detected',
|
|
370
|
-
};
|
|
371
|
-
}
|
|
372
|
-
if (!(await pathExists(safeOldPath))) {
|
|
373
|
-
return {
|
|
374
|
-
success: false,
|
|
375
|
-
filePath: oldPath,
|
|
376
|
-
operation: 'rename',
|
|
377
|
-
error: 'Source file does not exist',
|
|
378
|
-
};
|
|
379
|
-
}
|
|
380
|
-
if (await pathExists(safeNewPath)) {
|
|
381
|
-
return {
|
|
382
|
-
success: false,
|
|
383
|
-
filePath: oldPath,
|
|
384
|
-
operation: 'rename',
|
|
385
|
-
error: 'Destination file already exists',
|
|
386
|
-
};
|
|
387
|
-
}
|
|
388
|
-
// Request approval if required
|
|
389
|
-
if (requireApproval) {
|
|
390
|
-
const approvalManager = getApprovalManager();
|
|
391
|
-
const approvalResponse = await approvalManager.requestApproval('file_rename', description || `Rename file: ${oldPath} → ${newPath}`, {
|
|
392
|
-
filePaths: [oldPath, newPath],
|
|
393
|
-
affectedFiles: 1,
|
|
394
|
-
// Include complexity context for SMART mode decisions
|
|
395
|
-
complexityMode: complexityContext?.mode,
|
|
396
|
-
complexityConfidence: complexityContext?.confidence,
|
|
397
|
-
});
|
|
398
|
-
if (!approvalResponse.approved) {
|
|
399
|
-
// Include user feedback in the error message if provided
|
|
400
|
-
const errorMessage = approvalResponse.reason
|
|
401
|
-
? approvalResponse.reason
|
|
402
|
-
: 'Operation rejected by user';
|
|
403
|
-
return {
|
|
404
|
-
success: false,
|
|
405
|
-
filePath: oldPath,
|
|
406
|
-
operation: 'rename',
|
|
407
|
-
error: errorMessage,
|
|
408
|
-
};
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
// Create backup before rename
|
|
412
|
-
let backup;
|
|
413
|
-
if (createBackup) {
|
|
414
|
-
const backupManager = await getBackupManager();
|
|
415
|
-
const backupRecord = await backupManager.createBackup(safeOldPath);
|
|
416
|
-
if (backupRecord) {
|
|
417
|
-
backup = backupRecord;
|
|
418
|
-
}
|
|
419
|
-
}
|
|
420
|
-
// Perform the rename
|
|
421
|
-
try {
|
|
422
|
-
// Ensure destination directory exists
|
|
423
|
-
await ensureDir(path.dirname(safeNewPath));
|
|
424
|
-
// Copy to new location then remove old
|
|
425
|
-
await copy(safeOldPath, safeNewPath);
|
|
426
|
-
await remove(safeOldPath);
|
|
427
|
-
// Emit file-modified event
|
|
428
|
-
const eventEmitter = getEventEmitter();
|
|
429
|
-
eventEmitter.emit('file-modified', { path: newPath, operation: 'create' });
|
|
430
|
-
logger.info(`File renamed: ${oldPath} → ${newPath}`);
|
|
431
|
-
// Log file rename event
|
|
432
|
-
getSystemEventLogger().logFileRename(oldPath, newPath, true);
|
|
433
|
-
return {
|
|
434
|
-
success: true,
|
|
435
|
-
filePath: newPath,
|
|
436
|
-
operation: 'rename',
|
|
437
|
-
backup,
|
|
438
|
-
};
|
|
439
|
-
}
|
|
440
|
-
catch (error) {
|
|
441
|
-
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
442
|
-
logger.error(`Failed to rename file: ${oldPath}`, error);
|
|
443
|
-
// Log file rename failure
|
|
444
|
-
getSystemEventLogger().logFileRename(oldPath, newPath, false, errorMessage);
|
|
445
|
-
return {
|
|
446
|
-
success: false,
|
|
447
|
-
filePath: oldPath,
|
|
448
|
-
operation: 'rename',
|
|
449
|
-
backup,
|
|
450
|
-
error: errorMessage,
|
|
451
|
-
};
|
|
452
|
-
}
|
|
453
|
-
}
|
|
454
|
-
/**
|
|
455
|
-
* Checks if a file exists
|
|
456
|
-
* @param filePath - Path to check
|
|
457
|
-
* @returns True if file exists
|
|
458
|
-
*/
|
|
459
|
-
async exists(filePath) {
|
|
460
|
-
const safePath = this.validatePath(filePath);
|
|
461
|
-
if (!safePath) {
|
|
462
|
-
return false;
|
|
463
|
-
}
|
|
464
|
-
return pathExists(safePath);
|
|
465
|
-
}
|
|
466
|
-
/**
|
|
467
|
-
* Checks if a path is a file
|
|
468
|
-
* @param filePath - Path to check
|
|
469
|
-
* @returns True if path is a file
|
|
470
|
-
*/
|
|
471
|
-
async isFile(filePath) {
|
|
472
|
-
const safePath = this.validatePath(filePath);
|
|
473
|
-
if (!safePath) {
|
|
474
|
-
return false;
|
|
475
|
-
}
|
|
476
|
-
return isFile(safePath);
|
|
477
|
-
}
|
|
478
|
-
/**
|
|
479
|
-
* Checks if a path is a directory
|
|
480
|
-
* @param filePath - Path to check
|
|
481
|
-
* @returns True if path is a directory
|
|
482
|
-
*/
|
|
483
|
-
async isDirectory(filePath) {
|
|
484
|
-
const safePath = this.validatePath(filePath);
|
|
485
|
-
if (!safePath) {
|
|
486
|
-
return false;
|
|
487
|
-
}
|
|
488
|
-
return isDirectory(safePath);
|
|
489
|
-
}
|
|
490
|
-
/**
|
|
491
|
-
* Gets file statistics
|
|
492
|
-
* @param filePath - Path to the file
|
|
493
|
-
* @returns File stats or null if not found
|
|
494
|
-
*/
|
|
495
|
-
async getStats(filePath) {
|
|
496
|
-
const safePath = this.validatePath(filePath);
|
|
497
|
-
if (!safePath) {
|
|
498
|
-
return null;
|
|
499
|
-
}
|
|
500
|
-
const stats = await stat(safePath);
|
|
501
|
-
if (!stats) {
|
|
502
|
-
return null;
|
|
503
|
-
}
|
|
504
|
-
return {
|
|
505
|
-
size: stats.size,
|
|
506
|
-
modified: stats.mtime,
|
|
507
|
-
created: stats.birthtime,
|
|
508
|
-
isFile: stats.isFile(),
|
|
509
|
-
isDirectory: stats.isDirectory(),
|
|
510
|
-
};
|
|
511
|
-
}
|
|
512
|
-
// ============================================
|
|
513
|
-
// Transaction Support for Atomic Multi-File Operations
|
|
514
|
-
// ============================================
|
|
515
|
-
/**
|
|
516
|
-
* Begins a new transaction for atomic multi-file operations
|
|
517
|
-
* @returns The transaction ID
|
|
518
|
-
*/
|
|
519
|
-
beginTransaction() {
|
|
520
|
-
if (this.activeTransaction) {
|
|
521
|
-
throw new Error('A transaction is already in progress. Commit or rollback first.');
|
|
522
|
-
}
|
|
523
|
-
this.activeTransaction = {
|
|
524
|
-
id: uuidv4(),
|
|
525
|
-
createdAt: formatTimestamp(),
|
|
526
|
-
operations: [],
|
|
527
|
-
status: 'pending',
|
|
528
|
-
};
|
|
529
|
-
logger.debug(`Transaction started: ${this.activeTransaction.id}`);
|
|
530
|
-
return this.activeTransaction.id;
|
|
531
|
-
}
|
|
532
|
-
/**
|
|
533
|
-
* Adds a file write operation to the current transaction
|
|
534
|
-
* @param filePath - Path to the file
|
|
535
|
-
* @param content - Content to write
|
|
536
|
-
*/
|
|
537
|
-
addWriteOperation(filePath, content) {
|
|
538
|
-
if (!this.activeTransaction) {
|
|
539
|
-
throw new Error('No active transaction. Call beginTransaction() first.');
|
|
540
|
-
}
|
|
541
|
-
const safePath = this.validatePath(filePath);
|
|
542
|
-
if (!safePath) {
|
|
543
|
-
throw new Error(`Invalid path: ${filePath}`);
|
|
544
|
-
}
|
|
545
|
-
this.activeTransaction.operations.push({
|
|
546
|
-
id: uuidv4(),
|
|
547
|
-
type: 'modify',
|
|
548
|
-
filePath: safePath,
|
|
549
|
-
content,
|
|
550
|
-
executed: false,
|
|
551
|
-
});
|
|
552
|
-
logger.debug(`Added write operation to transaction: ${filePath}`);
|
|
553
|
-
}
|
|
554
|
-
/**
|
|
555
|
-
* Adds a file delete operation to the current transaction
|
|
556
|
-
* @param filePath - Path to the file to delete
|
|
557
|
-
*/
|
|
558
|
-
addDeleteOperation(filePath) {
|
|
559
|
-
if (!this.activeTransaction) {
|
|
560
|
-
throw new Error('No active transaction. Call beginTransaction() first.');
|
|
561
|
-
}
|
|
562
|
-
const safePath = this.validatePath(filePath);
|
|
563
|
-
if (!safePath) {
|
|
564
|
-
throw new Error(`Invalid path: ${filePath}`);
|
|
565
|
-
}
|
|
566
|
-
this.activeTransaction.operations.push({
|
|
567
|
-
id: uuidv4(),
|
|
568
|
-
type: 'delete',
|
|
569
|
-
filePath: safePath,
|
|
570
|
-
executed: false,
|
|
571
|
-
});
|
|
572
|
-
logger.debug(`Added delete operation to transaction: ${filePath}`);
|
|
573
|
-
}
|
|
574
|
-
/**
|
|
575
|
-
* Adds a file rename operation to the current transaction
|
|
576
|
-
* @param oldPath - Current path of the file
|
|
577
|
-
* @param newPath - New path for the file
|
|
578
|
-
*/
|
|
579
|
-
addRenameOperation(oldPath, newPath) {
|
|
580
|
-
if (!this.activeTransaction) {
|
|
581
|
-
throw new Error('No active transaction. Call beginTransaction() first.');
|
|
582
|
-
}
|
|
583
|
-
const safeOldPath = this.validatePath(oldPath);
|
|
584
|
-
const safeNewPath = this.validatePath(newPath);
|
|
585
|
-
if (!safeOldPath || !safeNewPath) {
|
|
586
|
-
throw new Error(`Invalid path: ${oldPath} or ${newPath}`);
|
|
587
|
-
}
|
|
588
|
-
this.activeTransaction.operations.push({
|
|
589
|
-
id: uuidv4(),
|
|
590
|
-
type: 'rename',
|
|
591
|
-
filePath: safeOldPath,
|
|
592
|
-
newPath: safeNewPath,
|
|
593
|
-
executed: false,
|
|
594
|
-
});
|
|
595
|
-
logger.debug(`Added rename operation to transaction: ${oldPath} → ${newPath}`);
|
|
596
|
-
}
|
|
597
|
-
/**
|
|
598
|
-
* Commits the current transaction, executing all operations atomically
|
|
599
|
-
* @param options - Options for the commit
|
|
600
|
-
* @returns Array of operation results
|
|
601
|
-
*/
|
|
602
|
-
async commitTransaction(options = {}) {
|
|
603
|
-
if (!this.activeTransaction) {
|
|
604
|
-
throw new Error('No active transaction to commit.');
|
|
605
|
-
}
|
|
606
|
-
const { requireApproval = true, description } = options;
|
|
607
|
-
const transaction = this.activeTransaction;
|
|
608
|
-
const results = [];
|
|
609
|
-
// Request approval for the entire transaction
|
|
610
|
-
if (requireApproval && transaction.operations.length > 0) {
|
|
611
|
-
const approvalManager = getApprovalManager();
|
|
612
|
-
const filePaths = transaction.operations.map((op) => op.filePath);
|
|
613
|
-
const approvalResponse = await approvalManager.requestApproval('multi_file_operation', description || `Multi-file operation: ${transaction.operations.length} files`, {
|
|
614
|
-
filePaths,
|
|
615
|
-
affectedFiles: transaction.operations.length,
|
|
616
|
-
});
|
|
617
|
-
if (!approvalResponse.approved) {
|
|
618
|
-
transaction.status = 'failed';
|
|
619
|
-
this.activeTransaction = null;
|
|
620
|
-
// Include user feedback in the error message if provided
|
|
621
|
-
const errorMessage = approvalResponse.reason
|
|
622
|
-
? `Transaction rejected: ${approvalResponse.reason}`
|
|
623
|
-
: 'Transaction rejected by user';
|
|
624
|
-
return transaction.operations.map((op) => ({
|
|
625
|
-
success: false,
|
|
626
|
-
filePath: op.filePath,
|
|
627
|
-
operation: op.type === 'rename' ? 'rename' : op.type,
|
|
628
|
-
error: errorMessage,
|
|
629
|
-
}));
|
|
630
|
-
}
|
|
631
|
-
}
|
|
632
|
-
const backupManager = await getBackupManager();
|
|
633
|
-
// Execute all operations
|
|
634
|
-
try {
|
|
635
|
-
for (const operation of transaction.operations) {
|
|
636
|
-
// Create backup for existing files
|
|
637
|
-
if (operation.type !== 'create' && (await pathExists(operation.filePath))) {
|
|
638
|
-
const backup = await backupManager.createBackup(operation.filePath);
|
|
639
|
-
if (backup) {
|
|
640
|
-
operation.backup = backup;
|
|
641
|
-
}
|
|
642
|
-
operation.originalContent = await safeReadFile(operation.filePath) || undefined;
|
|
643
|
-
}
|
|
644
|
-
// Execute the operation
|
|
645
|
-
let result;
|
|
646
|
-
switch (operation.type) {
|
|
647
|
-
case 'create':
|
|
648
|
-
case 'modify':
|
|
649
|
-
await safeWriteFile(operation.filePath, operation.content || '', {
|
|
650
|
-
atomic: true,
|
|
651
|
-
createDir: true,
|
|
652
|
-
});
|
|
653
|
-
result = {
|
|
654
|
-
success: true,
|
|
655
|
-
filePath: operation.filePath,
|
|
656
|
-
operation: operation.type,
|
|
657
|
-
backup: operation.backup,
|
|
658
|
-
};
|
|
659
|
-
break;
|
|
660
|
-
case 'delete':
|
|
661
|
-
await remove(operation.filePath);
|
|
662
|
-
result = {
|
|
663
|
-
success: true,
|
|
664
|
-
filePath: operation.filePath,
|
|
665
|
-
operation: 'delete',
|
|
666
|
-
backup: operation.backup,
|
|
667
|
-
};
|
|
668
|
-
break;
|
|
669
|
-
case 'rename':
|
|
670
|
-
await ensureDir(path.dirname(operation.newPath));
|
|
671
|
-
await copy(operation.filePath, operation.newPath);
|
|
672
|
-
await remove(operation.filePath);
|
|
673
|
-
result = {
|
|
674
|
-
success: true,
|
|
675
|
-
filePath: operation.newPath,
|
|
676
|
-
operation: 'rename',
|
|
677
|
-
backup: operation.backup,
|
|
678
|
-
};
|
|
679
|
-
break;
|
|
680
|
-
default:
|
|
681
|
-
result = {
|
|
682
|
-
success: false,
|
|
683
|
-
filePath: operation.filePath,
|
|
684
|
-
operation: 'modify',
|
|
685
|
-
error: `Unknown operation type: ${operation.type}`,
|
|
686
|
-
};
|
|
687
|
-
}
|
|
688
|
-
operation.executed = true;
|
|
689
|
-
results.push(result);
|
|
690
|
-
// Emit event for each successful operation
|
|
691
|
-
if (result.success) {
|
|
692
|
-
const eventEmitter = getEventEmitter();
|
|
693
|
-
// Map rename to create for event emission (file is created at new location)
|
|
694
|
-
const eventOperation = result.operation === 'rename' ? 'create' : result.operation;
|
|
695
|
-
eventEmitter.emit('file-modified', {
|
|
696
|
-
path: result.filePath,
|
|
697
|
-
operation: eventOperation,
|
|
698
|
-
});
|
|
699
|
-
}
|
|
700
|
-
}
|
|
701
|
-
transaction.status = 'committed';
|
|
702
|
-
logger.info(`Transaction committed: ${transaction.id} (${results.length} operations)`);
|
|
703
|
-
}
|
|
704
|
-
catch (error) {
|
|
705
|
-
// Rollback on failure
|
|
706
|
-
logger.error(`Transaction failed, rolling back: ${transaction.id}`, error);
|
|
707
|
-
await this.rollbackTransaction();
|
|
708
|
-
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
709
|
-
// Mark remaining operations as failed
|
|
710
|
-
for (const operation of transaction.operations) {
|
|
711
|
-
if (!operation.executed) {
|
|
712
|
-
results.push({
|
|
713
|
-
success: false,
|
|
714
|
-
filePath: operation.filePath,
|
|
715
|
-
operation: operation.type === 'rename' ? 'rename' : operation.type,
|
|
716
|
-
error: `Transaction rolled back: ${errorMessage}`,
|
|
717
|
-
});
|
|
718
|
-
}
|
|
719
|
-
}
|
|
720
|
-
}
|
|
721
|
-
this.activeTransaction = null;
|
|
722
|
-
return results;
|
|
723
|
-
}
|
|
724
|
-
/**
|
|
725
|
-
* Rolls back the current transaction, restoring all modified files
|
|
726
|
-
*/
|
|
727
|
-
async rollbackTransaction() {
|
|
728
|
-
if (!this.activeTransaction) {
|
|
729
|
-
logger.warn('No active transaction to rollback');
|
|
730
|
-
return;
|
|
731
|
-
}
|
|
732
|
-
const transaction = this.activeTransaction;
|
|
733
|
-
const backupManager = await getBackupManager();
|
|
734
|
-
// Rollback executed operations in reverse order
|
|
735
|
-
const executedOps = transaction.operations.filter((op) => op.executed).reverse();
|
|
736
|
-
for (const operation of executedOps) {
|
|
737
|
-
try {
|
|
738
|
-
if (operation.backup) {
|
|
739
|
-
// Restore from backup
|
|
740
|
-
await backupManager.restore(operation.backup.id);
|
|
741
|
-
logger.debug(`Rolled back: ${operation.filePath}`);
|
|
742
|
-
}
|
|
743
|
-
else if (operation.type === 'create') {
|
|
744
|
-
// Remove created file
|
|
745
|
-
if (await pathExists(operation.filePath)) {
|
|
746
|
-
await remove(operation.filePath);
|
|
747
|
-
logger.debug(`Removed created file: ${operation.filePath}`);
|
|
748
|
-
}
|
|
749
|
-
}
|
|
750
|
-
else if (operation.type === 'rename' && operation.newPath) {
|
|
751
|
-
// Reverse the rename
|
|
752
|
-
if (await pathExists(operation.newPath)) {
|
|
753
|
-
await copy(operation.newPath, operation.filePath);
|
|
754
|
-
await remove(operation.newPath);
|
|
755
|
-
logger.debug(`Reversed rename: ${operation.newPath} → ${operation.filePath}`);
|
|
756
|
-
}
|
|
757
|
-
}
|
|
758
|
-
}
|
|
759
|
-
catch (error) {
|
|
760
|
-
logger.error(`Failed to rollback operation: ${operation.filePath}`, error);
|
|
761
|
-
}
|
|
762
|
-
}
|
|
763
|
-
transaction.status = 'rolled_back';
|
|
764
|
-
this.activeTransaction = null;
|
|
765
|
-
logger.info(`Transaction rolled back: ${transaction.id}`);
|
|
766
|
-
}
|
|
767
|
-
/**
|
|
768
|
-
* Gets the current active transaction
|
|
769
|
-
* @returns The active transaction or null
|
|
770
|
-
*/
|
|
771
|
-
getActiveTransaction() {
|
|
772
|
-
return this.activeTransaction;
|
|
773
|
-
}
|
|
774
|
-
/**
|
|
775
|
-
* Checks if there is an active transaction
|
|
776
|
-
* @returns True if a transaction is in progress
|
|
777
|
-
*/
|
|
778
|
-
hasActiveTransaction() {
|
|
779
|
-
return this.activeTransaction !== null;
|
|
780
|
-
}
|
|
781
|
-
// ============================================
|
|
782
|
-
// Utility Methods
|
|
783
|
-
// ============================================
|
|
784
|
-
/**
|
|
785
|
-
* Restores a file from its most recent backup
|
|
786
|
-
* @param filePath - Path to the file to restore
|
|
787
|
-
* @returns True if restoration was successful
|
|
788
|
-
*/
|
|
789
|
-
async restoreFromBackup(filePath) {
|
|
790
|
-
const safePath = this.validatePath(filePath);
|
|
791
|
-
if (!safePath) {
|
|
792
|
-
logger.warn(`Path validation failed for restore: ${filePath}`);
|
|
793
|
-
return false;
|
|
794
|
-
}
|
|
795
|
-
const backupManager = await getBackupManager();
|
|
796
|
-
return backupManager.restoreLatest(safePath);
|
|
797
|
-
}
|
|
798
|
-
/**
|
|
799
|
-
* Gets the diff between current file content and proposed new content
|
|
800
|
-
* @param filePath - Path to the file
|
|
801
|
-
* @param newContent - Proposed new content
|
|
802
|
-
* @returns Diff result or null if file doesn't exist
|
|
803
|
-
*/
|
|
804
|
-
async getDiff(filePath, newContent) {
|
|
805
|
-
const safePath = this.validatePath(filePath);
|
|
806
|
-
if (!safePath) {
|
|
807
|
-
return null;
|
|
808
|
-
}
|
|
809
|
-
const currentContent = await safeReadFile(safePath);
|
|
810
|
-
if (currentContent === null) {
|
|
811
|
-
return null;
|
|
812
|
-
}
|
|
813
|
-
return generateDiff(currentContent, newContent, {
|
|
814
|
-
fileName: path.basename(filePath),
|
|
815
|
-
});
|
|
816
|
-
}
|
|
817
|
-
/**
|
|
818
|
-
* Validates and sanitizes a file path
|
|
819
|
-
* @param filePath - Path to validate
|
|
820
|
-
* @param allowExternal - Whether to allow paths outside project root (default: false)
|
|
821
|
-
* @returns Sanitized absolute path or null if invalid
|
|
822
|
-
*/
|
|
823
|
-
validatePath(filePath, allowExternal = false) {
|
|
824
|
-
// Resolve the path to absolute form
|
|
825
|
-
const resolvedPath = path.isAbsolute(filePath)
|
|
826
|
-
? path.normalize(filePath)
|
|
827
|
-
: path.resolve(this.projectRoot, filePath);
|
|
828
|
-
// Check for directory traversal patterns even in absolute paths
|
|
829
|
-
// This catches attempts like /project/../../../etc/passwd
|
|
830
|
-
const normalizedPath = path.normalize(resolvedPath);
|
|
831
|
-
// For relative paths, use sanitizePath to prevent directory traversal
|
|
832
|
-
if (!path.isAbsolute(filePath)) {
|
|
833
|
-
const sanitized = sanitizePath(filePath, this.projectRoot);
|
|
834
|
-
if (!sanitized) {
|
|
835
|
-
logger.warn(`Path validation failed (directory traversal attempt): ${filePath}`);
|
|
836
|
-
return null;
|
|
837
|
-
}
|
|
838
|
-
}
|
|
839
|
-
// Check if path is within project root
|
|
840
|
-
const isWithinProject = isPathWithin(normalizedPath, this.projectRoot);
|
|
841
|
-
// If path is outside project root
|
|
842
|
-
if (!isWithinProject) {
|
|
843
|
-
// Always allow access to the global compass directory (~/.compass/)
|
|
844
|
-
const globalDir = getGlobalCompassDir();
|
|
845
|
-
if (isPathWithin(normalizedPath, globalDir)) {
|
|
846
|
-
logger.debug(`Allowing global compass directory access: ${filePath}`);
|
|
847
|
-
return normalizedPath;
|
|
848
|
-
}
|
|
849
|
-
if (allowExternal) {
|
|
850
|
-
// External paths are allowed for this operation (e.g., read with approval)
|
|
851
|
-
logger.debug(`Allowing external path access: ${filePath}`);
|
|
852
|
-
return normalizedPath;
|
|
853
|
-
}
|
|
854
|
-
else {
|
|
855
|
-
// Block access to paths outside project root
|
|
856
|
-
logger.warn(`Path is outside project root and external access not allowed: ${filePath}`);
|
|
857
|
-
return null;
|
|
858
|
-
}
|
|
859
|
-
}
|
|
860
|
-
return normalizedPath;
|
|
861
|
-
}
|
|
862
|
-
}
|
|
863
|
-
// Singleton instance
|
|
864
|
-
let fileServiceInstance = null;
|
|
865
|
-
/**
|
|
866
|
-
* Gets the singleton FileService instance
|
|
867
|
-
* @returns The FileService instance
|
|
868
|
-
*/
|
|
869
|
-
export function getFileService() {
|
|
870
|
-
if (!fileServiceInstance) {
|
|
871
|
-
fileServiceInstance = new FileService();
|
|
872
|
-
}
|
|
873
|
-
return fileServiceInstance;
|
|
874
|
-
}
|
|
875
|
-
export { FileService };
|
|
876
|
-
//# sourceMappingURL=file-service.js.map
|