@dotcontext/cli 0.8.2 → 0.9.1
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/LICENSE +1 -1
- package/README.md +236 -135
- package/dist/cli/index.d.ts +15 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +29 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/generators/documentation/codebaseMapGenerator.d.ts +29 -46
- package/dist/generators/documentation/codebaseMapGenerator.d.ts.map +1 -1
- package/dist/generators/documentation/codebaseMapGenerator.js +148 -244
- package/dist/generators/documentation/codebaseMapGenerator.js.map +1 -1
- package/dist/generators/documentation/documentationGenerator.d.ts.map +1 -1
- package/dist/generators/documentation/documentationGenerator.js +13 -8
- package/dist/generators/documentation/documentationGenerator.js.map +1 -1
- package/dist/generators/documentation/index.d.ts +1 -1
- package/dist/generators/documentation/index.d.ts.map +1 -1
- package/dist/generators/shared/structures/documentation/architecture.d.ts.map +1 -1
- package/dist/generators/shared/structures/documentation/architecture.js +9 -9
- package/dist/generators/shared/structures/documentation/architecture.js.map +1 -1
- package/dist/generators/shared/structures/documentation/dataFlow.js +2 -2
- package/dist/generators/shared/structures/documentation/dataFlow.js.map +1 -1
- package/dist/generators/shared/structures/documentation/glossary.js +2 -2
- package/dist/generators/shared/structures/documentation/glossary.js.map +1 -1
- package/dist/generators/shared/structures/documentation/projectOverview.d.ts.map +1 -1
- package/dist/generators/shared/structures/documentation/projectOverview.js +10 -11
- package/dist/generators/shared/structures/documentation/projectOverview.js.map +1 -1
- package/dist/generators/shared/structures/skills/factory.d.ts.map +1 -1
- package/dist/generators/shared/structures/skills/factory.js +19 -15
- package/dist/generators/shared/structures/skills/factory.js.map +1 -1
- package/dist/generators/skills/skillGenerator.d.ts +2 -1
- package/dist/generators/skills/skillGenerator.d.ts.map +1 -1
- package/dist/generators/skills/skillGenerator.js +47 -6
- package/dist/generators/skills/skillGenerator.js.map +1 -1
- package/dist/generators/skills/templates/indexTemplate.d.ts.map +1 -1
- package/dist/generators/skills/templates/indexTemplate.js +22 -15
- package/dist/generators/skills/templates/indexTemplate.js.map +1 -1
- package/dist/harness/index.d.ts +11 -0
- package/dist/harness/index.d.ts.map +1 -0
- package/dist/harness/index.js +33 -0
- package/dist/harness/index.js.map +1 -0
- package/dist/index.js +370 -378
- package/dist/index.js.map +1 -1
- package/dist/mcp/bin.d.ts +19 -0
- package/dist/mcp/bin.d.ts.map +1 -0
- package/dist/mcp/bin.js +206 -0
- package/dist/mcp/bin.js.map +1 -0
- package/dist/mcp/index.d.ts +12 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +28 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/services/autoFill/autoFillService.d.ts.map +1 -1
- package/dist/services/autoFill/autoFillService.js +7 -6
- package/dist/services/autoFill/autoFillService.js.map +1 -1
- package/dist/services/cli/index.d.ts +8 -0
- package/dist/services/cli/index.d.ts.map +1 -0
- package/dist/services/cli/index.js +19 -0
- package/dist/services/cli/index.js.map +1 -0
- package/dist/services/cli/mcpInstallService.d.ts +75 -0
- package/dist/services/cli/mcpInstallService.d.ts.map +1 -0
- package/dist/services/cli/mcpInstallService.js +646 -0
- package/dist/services/cli/mcpInstallService.js.map +1 -0
- package/dist/services/cli/stateDetector.d.ts +55 -0
- package/dist/services/cli/stateDetector.d.ts.map +1 -0
- package/dist/services/cli/stateDetector.js +191 -0
- package/dist/services/cli/stateDetector.js.map +1 -0
- package/dist/services/export/contextExportService.js +3 -3
- package/dist/services/export/contextExportService.js.map +1 -1
- package/dist/services/export/exportRulesService.d.ts +1 -0
- package/dist/services/export/exportRulesService.d.ts.map +1 -1
- package/dist/services/export/exportRulesService.js +20 -8
- package/dist/services/export/exportRulesService.js.map +1 -1
- package/dist/services/export/skillExportService.d.ts.map +1 -1
- package/dist/services/export/skillExportService.js +4 -1
- package/dist/services/export/skillExportService.js.map +1 -1
- package/dist/services/harness/agentsService.d.ts +31 -0
- package/dist/services/harness/agentsService.d.ts.map +1 -0
- package/dist/services/harness/agentsService.js +135 -0
- package/dist/services/harness/agentsService.js.map +1 -0
- package/dist/services/harness/contextService.d.ts +167 -0
- package/dist/services/harness/contextService.d.ts.map +1 -0
- package/dist/services/harness/contextService.js +403 -0
- package/dist/services/harness/contextService.js.map +1 -0
- package/dist/services/harness/contextTools.d.ts +95 -0
- package/dist/services/harness/contextTools.d.ts.map +1 -0
- package/dist/services/harness/contextTools.js +990 -0
- package/dist/services/harness/contextTools.js.map +1 -0
- package/dist/services/harness/datasetService.d.ts +63 -0
- package/dist/services/harness/datasetService.d.ts.map +1 -0
- package/dist/services/harness/datasetService.js +261 -0
- package/dist/services/harness/datasetService.js.map +1 -0
- package/dist/services/harness/executionService.d.ts +74 -0
- package/dist/services/harness/executionService.d.ts.map +1 -0
- package/dist/services/harness/executionService.js +213 -0
- package/dist/services/harness/executionService.js.map +1 -0
- package/dist/services/harness/index.d.ts +21 -0
- package/dist/services/harness/index.d.ts.map +1 -0
- package/dist/services/harness/index.js +52 -0
- package/dist/services/harness/index.js.map +1 -0
- package/dist/services/harness/plansService.d.ts +45 -0
- package/dist/services/harness/plansService.d.ts.map +1 -0
- package/dist/services/harness/plansService.js +251 -0
- package/dist/services/harness/plansService.js.map +1 -0
- package/dist/services/harness/policyService.d.ts +116 -0
- package/dist/services/harness/policyService.d.ts.map +1 -0
- package/dist/services/harness/policyService.js +510 -0
- package/dist/services/harness/policyService.js.map +1 -0
- package/dist/services/harness/replayService.d.ts +63 -0
- package/dist/services/harness/replayService.d.ts.map +1 -0
- package/dist/services/harness/replayService.js +242 -0
- package/dist/services/harness/replayService.js.map +1 -0
- package/dist/services/harness/runtimeStateService.d.ts +120 -0
- package/dist/services/harness/runtimeStateService.d.ts.map +1 -0
- package/dist/services/harness/runtimeStateService.js +316 -0
- package/dist/services/harness/runtimeStateService.js.map +1 -0
- package/dist/services/harness/sensorCatalogService.d.ts +50 -0
- package/dist/services/harness/sensorCatalogService.d.ts.map +1 -0
- package/dist/services/harness/sensorCatalogService.js +308 -0
- package/dist/services/harness/sensorCatalogService.js.map +1 -0
- package/dist/services/harness/sensorsService.d.ts +64 -0
- package/dist/services/harness/sensorsService.d.ts.map +1 -0
- package/dist/services/harness/sensorsService.js +88 -0
- package/dist/services/harness/sensorsService.js.map +1 -0
- package/dist/services/harness/skillsService.d.ts +31 -0
- package/dist/services/harness/skillsService.d.ts.map +1 -0
- package/dist/services/harness/skillsService.js +296 -0
- package/dist/services/harness/skillsService.js.map +1 -0
- package/dist/services/harness/taskContractsService.d.ts +88 -0
- package/dist/services/harness/taskContractsService.d.ts.map +1 -0
- package/dist/services/harness/taskContractsService.js +210 -0
- package/dist/services/harness/taskContractsService.js.map +1 -0
- package/dist/services/harness/workflowStateService.d.ts +51 -0
- package/dist/services/harness/workflowStateService.d.ts.map +1 -0
- package/dist/services/harness/workflowStateService.js +215 -0
- package/dist/services/harness/workflowStateService.js.map +1 -0
- package/dist/services/import/agentsDetector.d.ts.map +1 -1
- package/dist/services/import/agentsDetector.js +14 -8
- package/dist/services/import/agentsDetector.js.map +1 -1
- package/dist/services/import/importAgentsService.d.ts +2 -2
- package/dist/services/import/importAgentsService.d.ts.map +1 -1
- package/dist/services/import/importAgentsService.js +8 -1
- package/dist/services/import/importAgentsService.js.map +1 -1
- package/dist/services/import/importRulesService.d.ts +2 -2
- package/dist/services/import/importRulesService.d.ts.map +1 -1
- package/dist/services/import/importRulesService.js +8 -1
- package/dist/services/import/importRulesService.js.map +1 -1
- package/dist/services/import/presets.js +2 -2
- package/dist/services/import/presets.js.map +1 -1
- package/dist/services/import/rulesDetector.d.ts.map +1 -1
- package/dist/services/import/rulesDetector.js +16 -1
- package/dist/services/import/rulesDetector.js.map +1 -1
- package/dist/services/import/types.d.ts +1 -1
- package/dist/services/import/types.d.ts.map +1 -1
- package/dist/services/mcp/actionLogger.d.ts +2 -1
- package/dist/services/mcp/actionLogger.d.ts.map +1 -1
- package/dist/services/mcp/actionLogger.js +76 -15
- package/dist/services/mcp/actionLogger.js.map +1 -1
- package/dist/services/mcp/gateway/agent.d.ts.map +1 -1
- package/dist/services/mcp/gateway/agent.js +15 -104
- package/dist/services/mcp/gateway/agent.js.map +1 -1
- package/dist/services/mcp/gateway/context.d.ts.map +1 -1
- package/dist/services/mcp/gateway/context.js +60 -172
- package/dist/services/mcp/gateway/context.js.map +1 -1
- package/dist/services/mcp/gateway/explore.js +6 -6
- package/dist/services/mcp/gateway/explore.js.map +1 -1
- package/dist/services/mcp/gateway/harness.d.ts +7 -0
- package/dist/services/mcp/gateway/harness.d.ts.map +1 -0
- package/dist/services/mcp/gateway/harness.js +337 -0
- package/dist/services/mcp/gateway/harness.js.map +1 -0
- package/dist/services/mcp/gateway/index.d.ts +3 -2
- package/dist/services/mcp/gateway/index.d.ts.map +1 -1
- package/dist/services/mcp/gateway/index.js +4 -2
- package/dist/services/mcp/gateway/index.js.map +1 -1
- package/dist/services/mcp/gateway/metrics.d.ts.map +1 -1
- package/dist/services/mcp/gateway/metrics.js +8 -8
- package/dist/services/mcp/gateway/metrics.js.map +1 -1
- package/dist/services/mcp/gateway/plan.d.ts.map +1 -1
- package/dist/services/mcp/gateway/plan.js +23 -211
- package/dist/services/mcp/gateway/plan.js.map +1 -1
- package/dist/services/mcp/gateway/shared.d.ts +1 -32
- package/dist/services/mcp/gateway/shared.d.ts.map +1 -1
- package/dist/services/mcp/gateway/shared.js +4 -30
- package/dist/services/mcp/gateway/shared.js.map +1 -1
- package/dist/services/mcp/gateway/skill.d.ts.map +1 -1
- package/dist/services/mcp/gateway/skill.js +14 -281
- package/dist/services/mcp/gateway/skill.js.map +1 -1
- package/dist/services/mcp/gateway/types.d.ts +74 -3
- package/dist/services/mcp/gateway/types.d.ts.map +1 -1
- package/dist/services/mcp/gateway/workflowAdvance.d.ts.map +1 -1
- package/dist/services/mcp/gateway/workflowAdvance.js +37 -9
- package/dist/services/mcp/gateway/workflowAdvance.js.map +1 -1
- package/dist/services/mcp/gateway/workflowInit.d.ts.map +1 -1
- package/dist/services/mcp/gateway/workflowInit.js +8 -2
- package/dist/services/mcp/gateway/workflowInit.js.map +1 -1
- package/dist/services/mcp/gateway/workflowManage.d.ts +17 -1
- package/dist/services/mcp/gateway/workflowManage.d.ts.map +1 -1
- package/dist/services/mcp/gateway/workflowManage.js +155 -10
- package/dist/services/mcp/gateway/workflowManage.js.map +1 -1
- package/dist/services/mcp/gateway/workflowStatus.d.ts.map +1 -1
- package/dist/services/mcp/gateway/workflowStatus.js +5 -3
- package/dist/services/mcp/gateway/workflowStatus.js.map +1 -1
- package/dist/services/mcp/gatewayTools.d.ts +1 -1
- package/dist/services/mcp/gatewayTools.d.ts.map +1 -1
- package/dist/services/mcp/gatewayTools.js +2 -1
- package/dist/services/mcp/gatewayTools.js.map +1 -1
- package/dist/services/mcp/index.d.ts +10 -4
- package/dist/services/mcp/index.d.ts.map +1 -1
- package/dist/services/mcp/index.js +9 -3
- package/dist/services/mcp/index.js.map +1 -1
- package/dist/services/mcp/mcpInstallService.d.ts +4 -52
- package/dist/services/mcp/mcpInstallService.d.ts.map +1 -1
- package/dist/services/mcp/mcpInstallService.js +5 -596
- package/dist/services/mcp/mcpInstallService.js.map +1 -1
- package/dist/services/mcp/mcpServer.d.ts +5 -6
- package/dist/services/mcp/mcpServer.d.ts.map +1 -1
- package/dist/services/mcp/mcpServer.js +220 -28
- package/dist/services/mcp/mcpServer.js.map +1 -1
- package/dist/services/qa/patternInferer.d.ts +2 -31
- package/dist/services/qa/patternInferer.d.ts.map +1 -1
- package/dist/services/qa/patternInferer.js +4 -353
- package/dist/services/qa/patternInferer.js.map +1 -1
- package/dist/services/qa/qaService.d.ts +6 -10
- package/dist/services/qa/qaService.d.ts.map +1 -1
- package/dist/services/qa/qaService.js +17 -53
- package/dist/services/qa/qaService.js.map +1 -1
- package/dist/services/reverseSync/importSkillsService.d.ts.map +1 -1
- package/dist/services/reverseSync/importSkillsService.js +4 -1
- package/dist/services/reverseSync/importSkillsService.js.map +1 -1
- package/dist/services/reverseSync/reverseQuickSyncService.d.ts.map +1 -1
- package/dist/services/reverseSync/reverseQuickSyncService.js +10 -6
- package/dist/services/reverseSync/reverseQuickSyncService.js.map +1 -1
- package/dist/services/reverseSync/skillsDetector.js +2 -2
- package/dist/services/reverseSync/skillsDetector.js.map +1 -1
- package/dist/services/reverseSync/toolDetector.d.ts.map +1 -1
- package/dist/services/reverseSync/toolDetector.js +3 -0
- package/dist/services/reverseSync/toolDetector.js.map +1 -1
- package/dist/services/semantic/index.d.ts +1 -0
- package/dist/services/semantic/index.d.ts.map +1 -1
- package/dist/services/semantic/index.js +3 -1
- package/dist/services/semantic/index.js.map +1 -1
- package/dist/services/semantic/semanticSnapshotService.d.ts +86 -0
- package/dist/services/semantic/semanticSnapshotService.d.ts.map +1 -0
- package/dist/services/semantic/semanticSnapshotService.js +573 -0
- package/dist/services/semantic/semanticSnapshotService.js.map +1 -0
- package/dist/services/shared/contentTypeRegistry.d.ts.map +1 -1
- package/dist/services/shared/contentTypeRegistry.js +9 -0
- package/dist/services/shared/contentTypeRegistry.js.map +1 -1
- package/dist/services/shared/contextLayout.d.ts +18 -0
- package/dist/services/shared/contextLayout.d.ts.map +1 -0
- package/dist/services/shared/contextLayout.js +139 -0
- package/dist/services/shared/contextLayout.js.map +1 -0
- package/dist/services/shared/executionContext.d.ts +38 -0
- package/dist/services/shared/executionContext.d.ts.map +1 -0
- package/dist/services/shared/executionContext.js +39 -0
- package/dist/services/shared/executionContext.js.map +1 -0
- package/dist/services/shared/index.d.ts +2 -0
- package/dist/services/shared/index.d.ts.map +1 -1
- package/dist/services/shared/index.js +11 -1
- package/dist/services/shared/index.js.map +1 -1
- package/dist/services/shared/toolRegistry.d.ts +6 -0
- package/dist/services/shared/toolRegistry.d.ts.map +1 -1
- package/dist/services/shared/toolRegistry.js +34 -20
- package/dist/services/shared/toolRegistry.js.map +1 -1
- package/dist/services/stack/scaffoldFilter.d.ts +3 -3
- package/dist/services/state/stateDetector.d.ts +4 -49
- package/dist/services/state/stateDetector.d.ts.map +1 -1
- package/dist/services/state/stateDetector.js +9 -182
- package/dist/services/state/stateDetector.js.map +1 -1
- package/dist/services/sync/index.d.ts +1 -1
- package/dist/services/sync/index.d.ts.map +1 -1
- package/dist/services/sync/index.js.map +1 -1
- package/dist/services/sync/markdownReferenceHandler.d.ts.map +1 -1
- package/dist/services/sync/markdownReferenceHandler.js +7 -2
- package/dist/services/sync/markdownReferenceHandler.js.map +1 -1
- package/dist/services/sync/presets.d.ts.map +1 -1
- package/dist/services/sync/presets.js +1 -0
- package/dist/services/sync/presets.js.map +1 -1
- package/dist/services/sync/symlinkHandler.d.ts.map +1 -1
- package/dist/services/sync/symlinkHandler.js +7 -2
- package/dist/services/sync/symlinkHandler.js.map +1 -1
- package/dist/services/sync/syncService.d.ts +2 -2
- package/dist/services/sync/syncService.d.ts.map +1 -1
- package/dist/services/sync/syncService.js +17 -3
- package/dist/services/sync/syncService.js.map +1 -1
- package/dist/services/sync/types.d.ts +9 -1
- package/dist/services/sync/types.d.ts.map +1 -1
- package/dist/services/workflow/index.d.ts +1 -1
- package/dist/services/workflow/index.d.ts.map +1 -1
- package/dist/services/workflow/index.js +2 -1
- package/dist/services/workflow/index.js.map +1 -1
- package/dist/services/workflow/workflowService.d.ts +68 -0
- package/dist/services/workflow/workflowService.d.ts.map +1 -1
- package/dist/services/workflow/workflowService.js +416 -1
- package/dist/services/workflow/workflowService.js.map +1 -1
- package/dist/utils/gitignoreManager.d.ts +8 -0
- package/dist/utils/gitignoreManager.d.ts.map +1 -1
- package/dist/utils/gitignoreManager.js +40 -0
- package/dist/utils/gitignoreManager.js.map +1 -1
- package/dist/utils/i18n.d.ts +1 -1
- package/dist/utils/i18n.js +2 -2
- package/dist/utils/i18n.js.map +1 -1
- package/dist/utils/processShutdown.d.ts +20 -0
- package/dist/utils/processShutdown.d.ts.map +1 -0
- package/dist/utils/processShutdown.js +47 -0
- package/dist/utils/processShutdown.js.map +1 -0
- package/dist/utils/prompts/index.d.ts +1 -1
- package/dist/utils/prompts/index.d.ts.map +1 -1
- package/dist/utils/prompts/index.js +1 -3
- package/dist/utils/prompts/index.js.map +1 -1
- package/dist/utils/prompts/smartDefaults.d.ts +0 -9
- package/dist/utils/prompts/smartDefaults.d.ts.map +1 -1
- package/dist/utils/prompts/smartDefaults.js +0 -23
- package/dist/utils/prompts/smartDefaults.js.map +1 -1
- package/dist/utils/prompts/types.d.ts +0 -11
- package/dist/utils/prompts/types.d.ts.map +1 -1
- package/dist/workflow/index.d.ts +1 -1
- package/dist/workflow/index.d.ts.map +1 -1
- package/dist/workflow/index.js +6 -1
- package/dist/workflow/index.js.map +1 -1
- package/dist/workflow/orchestrator.d.ts.map +1 -1
- package/dist/workflow/orchestrator.js +3 -14
- package/dist/workflow/orchestrator.js.map +1 -1
- package/dist/workflow/plans/planLinker.d.ts +13 -0
- package/dist/workflow/plans/planLinker.d.ts.map +1 -1
- package/dist/workflow/plans/planLinker.js +77 -2
- package/dist/workflow/plans/planLinker.js.map +1 -1
- package/dist/workflow/plans/types.d.ts +6 -0
- package/dist/workflow/plans/types.d.ts.map +1 -1
- package/dist/workflow/skills/frontmatter.d.ts +9 -0
- package/dist/workflow/skills/frontmatter.d.ts.map +1 -1
- package/dist/workflow/skills/frontmatter.js +16 -0
- package/dist/workflow/skills/frontmatter.js.map +1 -1
- package/dist/workflow/skills/index.d.ts +1 -1
- package/dist/workflow/skills/index.d.ts.map +1 -1
- package/dist/workflow/skills/index.js +3 -1
- package/dist/workflow/skills/index.js.map +1 -1
- package/dist/workflow/skills/skillRegistry.d.ts.map +1 -1
- package/dist/workflow/skills/skillRegistry.js +4 -1
- package/dist/workflow/skills/skillRegistry.js.map +1 -1
- package/dist/workflow/skills/skillTemplates.d.ts.map +1 -1
- package/dist/workflow/skills/skillTemplates.js +69 -30
- package/dist/workflow/skills/skillTemplates.js.map +1 -1
- package/dist/workflow/status/statusManager.d.ts +8 -3
- package/dist/workflow/status/statusManager.d.ts.map +1 -1
- package/dist/workflow/status/statusManager.js +60 -21
- package/dist/workflow/status/statusManager.js.map +1 -1
- package/dist/workflow/types.d.ts +1 -1
- package/package.json +17 -8
- package/dist/services/ai/aiSdkClient.d.ts +0 -67
- package/dist/services/ai/aiSdkClient.d.ts.map +0 -1
- package/dist/services/ai/aiSdkClient.js +0 -143
- package/dist/services/ai/aiSdkClient.js.map +0 -1
- package/dist/services/ai/index.d.ts +0 -5
- package/dist/services/ai/index.d.ts.map +0 -1
- package/dist/services/ai/index.js +0 -40
- package/dist/services/ai/index.js.map +0 -1
- package/dist/services/ai/providerFactory.d.ts +0 -35
- package/dist/services/ai/providerFactory.d.ts.map +0 -1
- package/dist/services/ai/providerFactory.js +0 -107
- package/dist/services/ai/providerFactory.js.map +0 -1
- package/dist/services/ai/schemas.d.ts +0 -557
- package/dist/services/ai/schemas.d.ts.map +0 -1
- package/dist/services/ai/schemas.js +0 -357
- package/dist/services/ai/schemas.js.map +0 -1
- package/dist/services/ai/toolRegistry.d.ts +0 -27
- package/dist/services/ai/toolRegistry.d.ts.map +0 -1
- package/dist/services/ai/toolRegistry.js +0 -151
- package/dist/services/ai/toolRegistry.js.map +0 -1
- package/dist/services/ai/tools/analyzeSymbolsTool.d.ts +0 -33
- package/dist/services/ai/tools/analyzeSymbolsTool.d.ts.map +0 -1
- package/dist/services/ai/tools/analyzeSymbolsTool.js +0 -57
- package/dist/services/ai/tools/analyzeSymbolsTool.js.map +0 -1
- package/dist/services/ai/tools/checkScaffoldingTool.d.ts +0 -18
- package/dist/services/ai/tools/checkScaffoldingTool.d.ts.map +0 -1
- package/dist/services/ai/tools/checkScaffoldingTool.js +0 -89
- package/dist/services/ai/tools/checkScaffoldingTool.js.map +0 -1
- package/dist/services/ai/tools/fillScaffoldingTool.d.ts +0 -124
- package/dist/services/ai/tools/fillScaffoldingTool.d.ts.map +0 -1
- package/dist/services/ai/tools/fillScaffoldingTool.js +0 -397
- package/dist/services/ai/tools/fillScaffoldingTool.js.map +0 -1
- package/dist/services/ai/tools/getCodebaseMapTool.d.ts +0 -17
- package/dist/services/ai/tools/getCodebaseMapTool.d.ts.map +0 -1
- package/dist/services/ai/tools/getCodebaseMapTool.js +0 -122
- package/dist/services/ai/tools/getCodebaseMapTool.js.map +0 -1
- package/dist/services/ai/tools/getFileStructureTool.d.ts +0 -29
- package/dist/services/ai/tools/getFileStructureTool.d.ts.map +0 -1
- package/dist/services/ai/tools/getFileStructureTool.js +0 -48
- package/dist/services/ai/tools/getFileStructureTool.js.map +0 -1
- package/dist/services/ai/tools/index.d.ts +0 -21
- package/dist/services/ai/tools/index.d.ts.map +0 -1
- package/dist/services/ai/tools/index.js +0 -75
- package/dist/services/ai/tools/index.js.map +0 -1
- package/dist/services/ai/tools/initializeContextTool.d.ts +0 -135
- package/dist/services/ai/tools/initializeContextTool.d.ts.map +0 -1
- package/dist/services/ai/tools/initializeContextTool.js +0 -447
- package/dist/services/ai/tools/initializeContextTool.js.map +0 -1
- package/dist/services/ai/tools/listFilesTool.d.ts +0 -18
- package/dist/services/ai/tools/listFilesTool.d.ts.map +0 -1
- package/dist/services/ai/tools/listFilesTool.js +0 -34
- package/dist/services/ai/tools/listFilesTool.js.map +0 -1
- package/dist/services/ai/tools/readFileTool.d.ts +0 -17
- package/dist/services/ai/tools/readFileTool.d.ts.map +0 -1
- package/dist/services/ai/tools/readFileTool.js +0 -63
- package/dist/services/ai/tools/readFileTool.js.map +0 -1
- package/dist/services/ai/tools/scaffoldPlanTool.d.ts +0 -41
- package/dist/services/ai/tools/scaffoldPlanTool.d.ts.map +0 -1
- package/dist/services/ai/tools/scaffoldPlanTool.js +0 -183
- package/dist/services/ai/tools/scaffoldPlanTool.js.map +0 -1
- package/dist/services/ai/tools/searchCodeTool.d.ts +0 -25
- package/dist/services/ai/tools/searchCodeTool.d.ts.map +0 -1
- package/dist/services/ai/tools/searchCodeTool.js +0 -96
- package/dist/services/ai/tools/searchCodeTool.js.map +0 -1
- package/dist/services/baseLLMClient.d.ts +0 -12
- package/dist/services/baseLLMClient.d.ts.map +0 -1
- package/dist/services/baseLLMClient.js +0 -80
- package/dist/services/baseLLMClient.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -45,17 +45,11 @@ const splashScreen_1 = require("./utils/splashScreen");
|
|
|
45
45
|
const themedPrompt_1 = require("./utils/themedPrompt");
|
|
46
46
|
const cliUI_1 = require("./utils/cliUI");
|
|
47
47
|
const versionChecker_1 = require("./utils/versionChecker");
|
|
48
|
+
const processShutdown_1 = require("./utils/processShutdown");
|
|
48
49
|
const i18n_1 = require("./utils/i18n");
|
|
49
|
-
const
|
|
50
|
-
const
|
|
51
|
-
const
|
|
52
|
-
const state_1 = require("./services/state");
|
|
53
|
-
const workflow_1 = require("./services/workflow");
|
|
54
|
-
const export_1 = require("./services/export");
|
|
55
|
-
const report_1 = require("./services/report");
|
|
56
|
-
const quickSync_1 = require("./services/quickSync");
|
|
57
|
-
const reverseSync_1 = require("./services/reverseSync");
|
|
58
|
-
const workflow_2 = require("./workflow");
|
|
50
|
+
const cli_1 = require("./cli");
|
|
51
|
+
const mcp_1 = require("./mcp");
|
|
52
|
+
const harness_1 = require("./harness");
|
|
59
53
|
const prompts_1 = require("./utils/prompts");
|
|
60
54
|
const version_1 = require("./version");
|
|
61
55
|
const rawArgs = process.argv.slice(2);
|
|
@@ -79,17 +73,17 @@ const localeLabelKeys = {
|
|
|
79
73
|
};
|
|
80
74
|
const program = new commander_1.Command();
|
|
81
75
|
const ui = new cliUI_1.CLIInterface(t);
|
|
82
|
-
const syncService = new
|
|
76
|
+
const syncService = new cli_1.SyncService({
|
|
83
77
|
ui,
|
|
84
78
|
t,
|
|
85
79
|
version: version_1.VERSION
|
|
86
80
|
});
|
|
87
|
-
const importRulesService = new
|
|
81
|
+
const importRulesService = new cli_1.ImportRulesService({
|
|
88
82
|
ui,
|
|
89
83
|
t,
|
|
90
84
|
version: version_1.VERSION
|
|
91
85
|
});
|
|
92
|
-
const importAgentsService = new
|
|
86
|
+
const importAgentsService = new cli_1.ImportAgentsService({
|
|
93
87
|
ui,
|
|
94
88
|
t,
|
|
95
89
|
version: version_1.VERSION
|
|
@@ -112,47 +106,33 @@ function scheduleVersionCheck(force = false) {
|
|
|
112
106
|
}
|
|
113
107
|
return versionCheckPromise;
|
|
114
108
|
}
|
|
115
|
-
function buildMcpToolChoices(supportedTools, detectedTools) {
|
|
116
|
-
const detectedSet = new Set(detectedTools);
|
|
117
|
-
const orderedTools = [
|
|
118
|
-
...supportedTools.filter(tool => detectedSet.has(tool.id)),
|
|
119
|
-
...supportedTools.filter(tool => !detectedSet.has(tool.id)),
|
|
120
|
-
];
|
|
121
|
-
return [
|
|
122
|
-
{
|
|
123
|
-
name: t('commands.mcpInstall.allDetected'),
|
|
124
|
-
value: 'all',
|
|
125
|
-
},
|
|
126
|
-
...orderedTools.map(tool => ({
|
|
127
|
-
name: detectedSet.has(tool.id)
|
|
128
|
-
? `${tool.displayName} (${t('labels.detected')})`
|
|
129
|
-
: tool.displayName,
|
|
130
|
-
value: tool.id,
|
|
131
|
-
})),
|
|
132
|
-
];
|
|
133
|
-
}
|
|
134
109
|
program.hook('preAction', () => {
|
|
135
110
|
void scheduleVersionCheck();
|
|
136
111
|
});
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
}
|
|
112
|
+
function registerSyncCommand(parent, name, hidden = false) {
|
|
113
|
+
const command = parent
|
|
114
|
+
.command(name, hidden ? { hidden: true } : {})
|
|
115
|
+
.description(t('commands.sync.description'))
|
|
116
|
+
.option('-s, --source <dir>', t('commands.sync.options.source'), './.context/agents')
|
|
117
|
+
.option('-t, --target <paths...>', t('commands.sync.options.target'))
|
|
118
|
+
.option('-m, --mode <type>', t('commands.sync.options.mode'), 'symlink')
|
|
119
|
+
.option('-p, --preset <name>', t('commands.sync.options.preset'))
|
|
120
|
+
.option('--force', t('commands.sync.options.force'))
|
|
121
|
+
.option('--dry-run', t('commands.sync.options.dryRun'))
|
|
122
|
+
.option('-v, --verbose', t('commands.sync.options.verbose'))
|
|
123
|
+
.action(async (options) => {
|
|
124
|
+
try {
|
|
125
|
+
await syncService.run(options);
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
ui.displayError(t('errors.sync.failed'), error);
|
|
129
|
+
process.exit(1);
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
return command;
|
|
133
|
+
}
|
|
134
|
+
registerSyncCommand(program, 'sync');
|
|
135
|
+
registerSyncCommand(program, 'sync-agents', true);
|
|
156
136
|
program
|
|
157
137
|
.command('import-rules')
|
|
158
138
|
.description(t('commands.importRules.description'))
|
|
@@ -222,7 +202,7 @@ program
|
|
|
222
202
|
.option('-v, --verbose', 'Verbose output')
|
|
223
203
|
.action(async (repoPath, options) => {
|
|
224
204
|
try {
|
|
225
|
-
const service = new
|
|
205
|
+
const service = new cli_1.ReverseQuickSyncService({ ui, t, version: version_1.VERSION });
|
|
226
206
|
await service.run(repoPath, {
|
|
227
207
|
dryRun: options.dryRun,
|
|
228
208
|
force: options.force,
|
|
@@ -251,14 +231,13 @@ program
|
|
|
251
231
|
repoPath: options.repoPath,
|
|
252
232
|
verbose: options.verbose
|
|
253
233
|
});
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
process.exit(0);
|
|
234
|
+
(0, processShutdown_1.registerProcessShutdown)(server, {
|
|
235
|
+
onError: (error) => {
|
|
236
|
+
if (options.verbose) {
|
|
237
|
+
process.stderr.write(`[mcp] Shutdown error: ${error}\n`);
|
|
238
|
+
}
|
|
239
|
+
},
|
|
240
|
+
exit: (code) => process.exit(code),
|
|
262
241
|
});
|
|
263
242
|
}
|
|
264
243
|
catch (error) {
|
|
@@ -278,24 +257,16 @@ program
|
|
|
278
257
|
.option('-v, --verbose', t('commands.mcpInstall.options.verbose'))
|
|
279
258
|
.action(async (tool, options) => {
|
|
280
259
|
try {
|
|
281
|
-
const mcpInstallService = new
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
type: 'list',
|
|
290
|
-
name: 'selectedTool',
|
|
291
|
-
message: t('commands.mcpInstall.selectTool'),
|
|
292
|
-
choices,
|
|
293
|
-
},
|
|
294
|
-
]);
|
|
295
|
-
tool = selectedTool;
|
|
296
|
-
}
|
|
260
|
+
const mcpInstallService = new cli_1.MCPInstallService({ ui, t, version: version_1.VERSION });
|
|
261
|
+
const selectedTool = await (0, cli_1.resolveMcpInstallToolSelection)({
|
|
262
|
+
selectedTool: tool,
|
|
263
|
+
isInteractive: Boolean(process.stdin.isTTY),
|
|
264
|
+
service: mcpInstallService,
|
|
265
|
+
t,
|
|
266
|
+
promptTool: ({ message, choices }) => (0, themedPrompt_1.themedSelect)({ message, choices }),
|
|
267
|
+
});
|
|
297
268
|
const result = await mcpInstallService.run({
|
|
298
|
-
tool,
|
|
269
|
+
tool: selectedTool,
|
|
299
270
|
global: options.local ? false : options.global,
|
|
300
271
|
dryRun: options.dryRun,
|
|
301
272
|
verbose: options.verbose,
|
|
@@ -310,162 +281,167 @@ program
|
|
|
310
281
|
process.exit(1);
|
|
311
282
|
}
|
|
312
283
|
});
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
catch (error) {
|
|
323
|
-
ui.displayError(t('errors.cli.executionFailed'), error);
|
|
324
|
-
process.exit(1);
|
|
325
|
-
}
|
|
326
|
-
});
|
|
327
|
-
// Export Rules Command
|
|
328
|
-
program
|
|
329
|
-
.command('export-rules')
|
|
330
|
-
.description(t('commands.export.description'))
|
|
331
|
-
.argument('[repo-path]', 'Repository path', process.cwd())
|
|
332
|
-
.option('-s, --source <dir>', t('commands.export.options.source'), '.context/docs')
|
|
333
|
-
.option('-t, --targets <paths...>', t('commands.export.options.targets'))
|
|
334
|
-
.option('--preset <name>', t('commands.export.options.preset'))
|
|
335
|
-
.option('--force', t('commands.export.options.force'))
|
|
336
|
-
.option('--dry-run', t('commands.export.options.dryRun'))
|
|
337
|
-
.option('-v, --verbose', t('commands.fill.options.verbose'))
|
|
338
|
-
.action(async (repoPath, options) => {
|
|
339
|
-
try {
|
|
340
|
-
const exportService = new export_1.ExportRulesService({
|
|
341
|
-
ui,
|
|
342
|
-
t,
|
|
343
|
-
version: version_1.VERSION,
|
|
344
|
-
});
|
|
345
|
-
await exportService.run(repoPath, {
|
|
346
|
-
source: options.source,
|
|
347
|
-
targets: options.targets,
|
|
348
|
-
preset: options.preset,
|
|
349
|
-
force: options.force,
|
|
350
|
-
dryRun: options.dryRun,
|
|
351
|
-
verbose: options.verbose,
|
|
352
|
-
});
|
|
353
|
-
}
|
|
354
|
-
catch (error) {
|
|
355
|
-
ui.displayError(t('errors.cli.executionFailed'), error);
|
|
356
|
-
process.exit(1);
|
|
357
|
-
}
|
|
358
|
-
});
|
|
359
|
-
// Report Command
|
|
360
|
-
program
|
|
361
|
-
.command('report')
|
|
362
|
-
.description(t('commands.report.description'))
|
|
363
|
-
.argument('[repo-path]', 'Repository path', process.cwd())
|
|
364
|
-
.option('-f, --format <format>', t('commands.report.options.format'), 'console')
|
|
365
|
-
.option('-o, --output <path>', t('commands.report.options.output'))
|
|
366
|
-
.option('--include-stack', t('commands.report.options.includeStack'))
|
|
367
|
-
.option('-v, --verbose', t('commands.fill.options.verbose'))
|
|
368
|
-
.action(async (repoPath, options) => {
|
|
369
|
-
try {
|
|
370
|
-
const reportService = new report_1.ReportService({
|
|
371
|
-
ui,
|
|
372
|
-
t,
|
|
373
|
-
version: version_1.VERSION,
|
|
374
|
-
});
|
|
375
|
-
const report = await reportService.generate(repoPath, {
|
|
376
|
-
format: options.format,
|
|
377
|
-
output: options.output,
|
|
378
|
-
includeStack: options.includeStack,
|
|
379
|
-
verbose: options.verbose,
|
|
380
|
-
});
|
|
381
|
-
await reportService.output(report, options);
|
|
382
|
-
}
|
|
383
|
-
catch (error) {
|
|
384
|
-
ui.displayError(t('errors.cli.executionFailed'), error);
|
|
385
|
-
process.exit(1);
|
|
386
|
-
}
|
|
387
|
-
});
|
|
388
|
-
// Skill Commands
|
|
389
|
-
const skillCommand = program
|
|
390
|
-
.command('skill')
|
|
391
|
-
.description(t('commands.skill.description'));
|
|
392
|
-
skillCommand
|
|
393
|
-
.command('list')
|
|
394
|
-
.description(t('commands.skill.list.description'))
|
|
395
|
-
.argument('[repo-path]', 'Repository path', process.cwd())
|
|
396
|
-
.option('--json', 'Output as JSON')
|
|
397
|
-
.action(async (repoPath, options) => {
|
|
398
|
-
try {
|
|
399
|
-
const { createSkillRegistry } = await Promise.resolve().then(() => __importStar(require('./workflow/skills')));
|
|
400
|
-
const registry = createSkillRegistry(repoPath);
|
|
401
|
-
const discovered = await registry.discoverAll();
|
|
402
|
-
if (options.json) {
|
|
403
|
-
console.log(JSON.stringify({
|
|
404
|
-
builtIn: discovered.builtIn.map(s => s.slug),
|
|
405
|
-
custom: discovered.custom.map(s => s.slug),
|
|
406
|
-
total: discovered.all.length,
|
|
407
|
-
}, null, 2));
|
|
408
|
-
return;
|
|
284
|
+
function registerPreviewSplashCommand(parent, hidden = false) {
|
|
285
|
+
const command = parent
|
|
286
|
+
.command('preview-splash', hidden ? { hidden: true } : {})
|
|
287
|
+
.description(t('commands.previewSplash.description'))
|
|
288
|
+
.option('--title <title>', t('commands.previewSplash.options.title'))
|
|
289
|
+
.option('--directory <path>', t('commands.previewSplash.options.directory'), process.cwd())
|
|
290
|
+
.action(async (options) => {
|
|
291
|
+
try {
|
|
292
|
+
await renderStartupSplash(options.directory, options.title);
|
|
409
293
|
}
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
294
|
+
catch (error) {
|
|
295
|
+
ui.displayError(t('errors.cli.executionFailed'), error);
|
|
296
|
+
process.exit(1);
|
|
297
|
+
}
|
|
298
|
+
});
|
|
299
|
+
return command;
|
|
300
|
+
}
|
|
301
|
+
function registerExportRulesCommand(parent, hidden = false) {
|
|
302
|
+
const command = parent
|
|
303
|
+
.command('export-rules', hidden ? { hidden: true } : {})
|
|
304
|
+
.description(t('commands.export.description'))
|
|
305
|
+
.argument('[repo-path]', 'Repository path', process.cwd())
|
|
306
|
+
.option('-s, --source <dir>', t('commands.export.options.source'), '.context/docs')
|
|
307
|
+
.option('-t, --targets <paths...>', t('commands.export.options.targets'))
|
|
308
|
+
.option('--preset <name>', t('commands.export.options.preset'))
|
|
309
|
+
.option('--force', t('commands.export.options.force'))
|
|
310
|
+
.option('--dry-run', t('commands.export.options.dryRun'))
|
|
311
|
+
.option('-v, --verbose', t('commands.fill.options.verbose'))
|
|
312
|
+
.action(async (repoPath, options) => {
|
|
313
|
+
try {
|
|
314
|
+
const exportService = new cli_1.ExportRulesService({
|
|
315
|
+
ui,
|
|
316
|
+
t,
|
|
317
|
+
version: version_1.VERSION,
|
|
318
|
+
});
|
|
319
|
+
await exportService.run(repoPath, {
|
|
320
|
+
source: options.source,
|
|
321
|
+
targets: options.targets,
|
|
322
|
+
preset: options.preset,
|
|
323
|
+
force: options.force,
|
|
324
|
+
dryRun: options.dryRun,
|
|
325
|
+
verbose: options.verbose,
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
catch (error) {
|
|
329
|
+
ui.displayError(t('errors.cli.executionFailed'), error);
|
|
330
|
+
process.exit(1);
|
|
331
|
+
}
|
|
332
|
+
});
|
|
333
|
+
return command;
|
|
334
|
+
}
|
|
335
|
+
function registerReportCommand(parent, hidden = false) {
|
|
336
|
+
const command = parent
|
|
337
|
+
.command('report', hidden ? { hidden: true } : {})
|
|
338
|
+
.description(t('commands.report.description'))
|
|
339
|
+
.argument('[repo-path]', 'Repository path', process.cwd())
|
|
340
|
+
.option('-f, --format <format>', t('commands.report.options.format'), 'console')
|
|
341
|
+
.option('-o, --output <path>', t('commands.report.options.output'))
|
|
342
|
+
.option('--include-stack', t('commands.report.options.includeStack'))
|
|
343
|
+
.option('-v, --verbose', t('commands.fill.options.verbose'))
|
|
344
|
+
.action(async (repoPath, options) => {
|
|
345
|
+
try {
|
|
346
|
+
const reportService = new cli_1.ReportService({
|
|
347
|
+
ui,
|
|
348
|
+
t,
|
|
349
|
+
version: version_1.VERSION,
|
|
350
|
+
});
|
|
351
|
+
const report = await reportService.generate(repoPath, {
|
|
352
|
+
format: options.format,
|
|
353
|
+
output: options.output,
|
|
354
|
+
includeStack: options.includeStack,
|
|
355
|
+
verbose: options.verbose,
|
|
356
|
+
});
|
|
357
|
+
await reportService.output(report, options);
|
|
358
|
+
}
|
|
359
|
+
catch (error) {
|
|
360
|
+
ui.displayError(t('errors.cli.executionFailed'), error);
|
|
361
|
+
process.exit(1);
|
|
416
362
|
}
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
363
|
+
});
|
|
364
|
+
return command;
|
|
365
|
+
}
|
|
366
|
+
function registerSkillCommands(parent, hidden = false) {
|
|
367
|
+
const skillCommand = parent
|
|
368
|
+
.command('skill', hidden ? { hidden: true } : {})
|
|
369
|
+
.description(t('commands.skill.description'));
|
|
370
|
+
skillCommand
|
|
371
|
+
.command('list')
|
|
372
|
+
.description(t('commands.skill.list.description'))
|
|
373
|
+
.argument('[repo-path]', 'Repository path', process.cwd())
|
|
374
|
+
.option('--json', 'Output as JSON')
|
|
375
|
+
.action(async (repoPath, options) => {
|
|
376
|
+
try {
|
|
377
|
+
const { createSkillRegistry } = await Promise.resolve().then(() => __importStar(require('./workflow/skills')));
|
|
378
|
+
const registry = createSkillRegistry(repoPath);
|
|
379
|
+
const discovered = await registry.discoverAll();
|
|
380
|
+
if (options.json) {
|
|
381
|
+
console.log(JSON.stringify({
|
|
382
|
+
builtIn: discovered.builtIn.map(s => s.slug),
|
|
383
|
+
custom: discovered.custom.map(s => s.slug),
|
|
384
|
+
total: discovered.all.length,
|
|
385
|
+
}, null, 2));
|
|
386
|
+
return;
|
|
387
|
+
}
|
|
388
|
+
console.log('\nBuilt-in Skills:');
|
|
389
|
+
for (const skill of discovered.builtIn) {
|
|
390
|
+
const projectSkill = discovered.all.find(s => s.slug === skill.slug && s.path.includes('.context'));
|
|
391
|
+
const status = projectSkill ? '[project]' : '[available]';
|
|
392
|
+
console.log(` ${skill.slug} ${status}`);
|
|
421
393
|
console.log(` ${skill.metadata.description}`);
|
|
422
394
|
}
|
|
395
|
+
if (discovered.custom.length > 0) {
|
|
396
|
+
console.log('\nCustom Skills:');
|
|
397
|
+
for (const skill of discovered.custom) {
|
|
398
|
+
console.log(` ${skill.slug}`);
|
|
399
|
+
console.log(` ${skill.metadata.description}`);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
console.log(`\nTotal: ${discovered.all.length} skills (${discovered.builtIn.length} built-in, ${discovered.custom.length} custom)`);
|
|
423
403
|
}
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
ui.displayError('Failed to list skills', error);
|
|
428
|
-
process.exit(1);
|
|
429
|
-
}
|
|
430
|
-
});
|
|
431
|
-
skillCommand
|
|
432
|
-
.command('export')
|
|
433
|
-
.description(t('commands.skill.export.description'))
|
|
434
|
-
.argument('[repo-path]', 'Repository path', process.cwd())
|
|
435
|
-
.option('-p, --preset <preset>', 'Export preset: claude, gemini, codex, all', 'all')
|
|
436
|
-
.option('-f, --force', 'Overwrite existing files')
|
|
437
|
-
.option('--include-builtin', 'Include built-in skills even if not scaffolded')
|
|
438
|
-
.option('--dry-run', 'Preview changes without writing')
|
|
439
|
-
.action(async (repoPath, options) => {
|
|
440
|
-
try {
|
|
441
|
-
const { SkillExportService } = await Promise.resolve().then(() => __importStar(require('./services/export/skillExportService')));
|
|
442
|
-
const exportService = new SkillExportService({
|
|
443
|
-
ui,
|
|
444
|
-
t,
|
|
445
|
-
version: version_1.VERSION,
|
|
446
|
-
});
|
|
447
|
-
const result = await exportService.run(repoPath, {
|
|
448
|
-
preset: options.preset,
|
|
449
|
-
force: options.force,
|
|
450
|
-
includeBuiltIn: options.includeBuiltin,
|
|
451
|
-
dryRun: options.dryRun,
|
|
452
|
-
});
|
|
453
|
-
if (options.dryRun) {
|
|
454
|
-
ui.displayInfo('Dry run', 'No files were written');
|
|
404
|
+
catch (error) {
|
|
405
|
+
ui.displayError('Failed to list skills', error);
|
|
406
|
+
process.exit(1);
|
|
455
407
|
}
|
|
456
|
-
|
|
457
|
-
|
|
408
|
+
});
|
|
409
|
+
skillCommand
|
|
410
|
+
.command('export')
|
|
411
|
+
.description(t('commands.skill.export.description'))
|
|
412
|
+
.argument('[repo-path]', 'Repository path', process.cwd())
|
|
413
|
+
.option('-p, --preset <preset>', 'Export preset, for example: claude, github, windsurf, codex, antigravity, all', 'all')
|
|
414
|
+
.option('-f, --force', 'Overwrite existing files')
|
|
415
|
+
.option('--include-builtin', 'Include built-in skills even if not scaffolded')
|
|
416
|
+
.option('--dry-run', 'Preview changes without writing')
|
|
417
|
+
.action(async (repoPath, options) => {
|
|
418
|
+
try {
|
|
419
|
+
const { SkillExportService } = await Promise.resolve().then(() => __importStar(require('./services/export/skillExportService')));
|
|
420
|
+
const exportService = new SkillExportService({
|
|
421
|
+
ui,
|
|
422
|
+
t,
|
|
423
|
+
version: version_1.VERSION,
|
|
424
|
+
});
|
|
425
|
+
const result = await exportService.run(repoPath, {
|
|
426
|
+
preset: options.preset,
|
|
427
|
+
force: options.force,
|
|
428
|
+
includeBuiltIn: options.includeBuiltin,
|
|
429
|
+
dryRun: options.dryRun,
|
|
430
|
+
});
|
|
431
|
+
if (options.dryRun) {
|
|
432
|
+
ui.displayInfo('Dry run', 'No files were written');
|
|
433
|
+
}
|
|
434
|
+
else {
|
|
435
|
+
ui.displaySuccess(`Exported ${result.skillsExported.length} skills to ${result.targets.length} targets`);
|
|
436
|
+
}
|
|
458
437
|
}
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
}
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
const workflowCommand = program
|
|
467
|
-
.command('workflow')
|
|
468
|
-
.description('PREVC workflow management (Planning, Review, Execution, Validation, Confirmation)');
|
|
438
|
+
catch (error) {
|
|
439
|
+
ui.displayError('Failed to export skills', error);
|
|
440
|
+
process.exit(1);
|
|
441
|
+
}
|
|
442
|
+
});
|
|
443
|
+
return skillCommand;
|
|
444
|
+
}
|
|
469
445
|
// Helper to create workflow service dependencies
|
|
470
446
|
const getWorkflowDeps = () => ({
|
|
471
447
|
ui: {
|
|
@@ -474,147 +450,165 @@ const getWorkflowDeps = () => ({
|
|
|
474
450
|
displayInfo: (title, detail) => ui.displayInfo(title, detail || '')
|
|
475
451
|
}
|
|
476
452
|
});
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
.command('status')
|
|
502
|
-
.description('Show current workflow status')
|
|
503
|
-
.option('-r, --repo-path <path>', 'Repository path', process.cwd())
|
|
504
|
-
.action(async (options) => {
|
|
505
|
-
try {
|
|
506
|
-
const workflowService = new workflow_1.WorkflowService(options.repoPath, getWorkflowDeps());
|
|
507
|
-
if (!await workflowService.hasWorkflow()) {
|
|
508
|
-
ui.displayError('No workflow found. Run "workflow init <name>" first.');
|
|
453
|
+
function registerWorkflowCommands(parent, hidden = false) {
|
|
454
|
+
const workflowCommand = parent
|
|
455
|
+
.command('workflow', hidden ? { hidden: true } : {})
|
|
456
|
+
.description('PREVC workflow management (Planning, Review, Execution, Validation, Confirmation)');
|
|
457
|
+
workflowCommand
|
|
458
|
+
.command('init <name>')
|
|
459
|
+
.description('Initialize a new PREVC workflow')
|
|
460
|
+
.option('-d, --description <text>', 'Project description for scale detection')
|
|
461
|
+
.option('-s, --scale <scale>', 'Project scale: QUICK, SMALL, MEDIUM, LARGE')
|
|
462
|
+
.option('-r, --repo-path <path>', 'Repository path', process.cwd())
|
|
463
|
+
.action(async (name, options) => {
|
|
464
|
+
try {
|
|
465
|
+
const workflowService = new harness_1.WorkflowService(options.repoPath, getWorkflowDeps());
|
|
466
|
+
const status = await workflowService.init({
|
|
467
|
+
name,
|
|
468
|
+
description: options.description,
|
|
469
|
+
scale: options.scale
|
|
470
|
+
});
|
|
471
|
+
ui.displaySuccess(`Workflow PREVC initialized: ${name}`);
|
|
472
|
+
ui.displayInfo('Scale', (0, harness_1.getScaleName)(status.project.scale));
|
|
473
|
+
ui.displayInfo('Current Phase', `${status.project.current_phase} - ${harness_1.PHASE_NAMES_PT[status.project.current_phase]}`);
|
|
474
|
+
}
|
|
475
|
+
catch (error) {
|
|
476
|
+
ui.displayError('Failed to initialize workflow', error);
|
|
509
477
|
process.exit(1);
|
|
510
478
|
}
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
479
|
+
});
|
|
480
|
+
workflowCommand
|
|
481
|
+
.command('status')
|
|
482
|
+
.description('Show current workflow status')
|
|
483
|
+
.option('-r, --repo-path <path>', 'Repository path', process.cwd())
|
|
484
|
+
.action(async (options) => {
|
|
485
|
+
try {
|
|
486
|
+
const workflowService = new harness_1.WorkflowService(options.repoPath, getWorkflowDeps());
|
|
487
|
+
if (!await workflowService.hasWorkflow()) {
|
|
488
|
+
ui.displayError('No workflow found. Run "workflow init <name>" first.');
|
|
489
|
+
process.exit(1);
|
|
490
|
+
}
|
|
491
|
+
const formattedStatus = await workflowService.getFormattedStatus();
|
|
492
|
+
console.log(formattedStatus);
|
|
493
|
+
const actions = await workflowService.getRecommendedActions();
|
|
494
|
+
if (actions.length > 0) {
|
|
495
|
+
console.log('\nRecommended actions:');
|
|
496
|
+
actions.forEach((action, i) => console.log(` ${i + 1}. ${action}`));
|
|
497
|
+
}
|
|
517
498
|
}
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
ui.displayError('Failed to get workflow status', error);
|
|
521
|
-
process.exit(1);
|
|
522
|
-
}
|
|
523
|
-
});
|
|
524
|
-
workflowCommand
|
|
525
|
-
.command('advance')
|
|
526
|
-
.description('Complete current phase and advance to next')
|
|
527
|
-
.option('-r, --repo-path <path>', 'Repository path', process.cwd())
|
|
528
|
-
.option('-o, --outputs <files...>', 'Output files generated in current phase')
|
|
529
|
-
.action(async (options) => {
|
|
530
|
-
try {
|
|
531
|
-
const workflowService = new workflow_1.WorkflowService(options.repoPath, getWorkflowDeps());
|
|
532
|
-
if (!await workflowService.hasWorkflow()) {
|
|
533
|
-
ui.displayError('No workflow found. Run "workflow init <name>" first.');
|
|
499
|
+
catch (error) {
|
|
500
|
+
ui.displayError('Failed to get workflow status', error);
|
|
534
501
|
process.exit(1);
|
|
535
502
|
}
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
503
|
+
});
|
|
504
|
+
workflowCommand
|
|
505
|
+
.command('advance')
|
|
506
|
+
.description('Complete current phase and advance to next')
|
|
507
|
+
.option('-r, --repo-path <path>', 'Repository path', process.cwd())
|
|
508
|
+
.option('-o, --outputs <files...>', 'Output files generated in current phase')
|
|
509
|
+
.action(async (options) => {
|
|
510
|
+
try {
|
|
511
|
+
const workflowService = new harness_1.WorkflowService(options.repoPath, getWorkflowDeps());
|
|
512
|
+
if (!await workflowService.hasWorkflow()) {
|
|
513
|
+
ui.displayError('No workflow found. Run "workflow init <name>" first.');
|
|
514
|
+
process.exit(1);
|
|
515
|
+
}
|
|
516
|
+
const nextPhase = await workflowService.advance(options.outputs);
|
|
517
|
+
if (nextPhase) {
|
|
518
|
+
ui.displaySuccess(`Advanced to phase: ${nextPhase} - ${harness_1.PHASE_NAMES_PT[nextPhase]}`);
|
|
519
|
+
}
|
|
520
|
+
else {
|
|
521
|
+
ui.displaySuccess('Workflow completed!');
|
|
522
|
+
}
|
|
542
523
|
}
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
ui.displayError('Failed to advance workflow', error);
|
|
546
|
-
process.exit(1);
|
|
547
|
-
}
|
|
548
|
-
});
|
|
549
|
-
workflowCommand
|
|
550
|
-
.command('handoff <from> <to>')
|
|
551
|
-
.description('Perform handoff between roles')
|
|
552
|
-
.option('-r, --repo-path <path>', 'Repository path', process.cwd())
|
|
553
|
-
.option('-a, --artifacts <files...>', 'Artifacts to hand off')
|
|
554
|
-
.action(async (from, to, options) => {
|
|
555
|
-
try {
|
|
556
|
-
const workflowService = new workflow_1.WorkflowService(options.repoPath, getWorkflowDeps());
|
|
557
|
-
if (!await workflowService.hasWorkflow()) {
|
|
558
|
-
ui.displayError('No workflow found. Run "workflow init <name>" first.');
|
|
524
|
+
catch (error) {
|
|
525
|
+
ui.displayError('Failed to advance workflow', error);
|
|
559
526
|
process.exit(1);
|
|
560
527
|
}
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
ui.displayInfo('Session ID', session.getId());
|
|
580
|
-
ui.displayInfo('Participants', session.getParticipantNames().join(', '));
|
|
581
|
-
console.log('\nUse MCP tools to contribute and synthesize the collaboration.');
|
|
582
|
-
}
|
|
583
|
-
catch (error) {
|
|
584
|
-
ui.displayError('Failed to start collaboration', error);
|
|
585
|
-
process.exit(1);
|
|
586
|
-
}
|
|
587
|
-
});
|
|
588
|
-
workflowCommand
|
|
589
|
-
.command('role <action> <role>')
|
|
590
|
-
.description('Manage role status (start/complete)')
|
|
591
|
-
.option('-r, --repo-path <path>', 'Repository path', process.cwd())
|
|
592
|
-
.option('-o, --outputs <files...>', 'Output files (for complete action)')
|
|
593
|
-
.action(async (action, role, options) => {
|
|
594
|
-
try {
|
|
595
|
-
const workflowService = new workflow_1.WorkflowService(options.repoPath, getWorkflowDeps());
|
|
596
|
-
if (!await workflowService.hasWorkflow()) {
|
|
597
|
-
ui.displayError('No workflow found. Run "workflow init <name>" first.');
|
|
528
|
+
});
|
|
529
|
+
workflowCommand
|
|
530
|
+
.command('handoff <from> <to>')
|
|
531
|
+
.description('Perform handoff between roles')
|
|
532
|
+
.option('-r, --repo-path <path>', 'Repository path', process.cwd())
|
|
533
|
+
.option('-a, --artifacts <files...>', 'Artifacts to hand off')
|
|
534
|
+
.action(async (from, to, options) => {
|
|
535
|
+
try {
|
|
536
|
+
const workflowService = new harness_1.WorkflowService(options.repoPath, getWorkflowDeps());
|
|
537
|
+
if (!await workflowService.hasWorkflow()) {
|
|
538
|
+
ui.displayError('No workflow found. Run "workflow init <name>" first.');
|
|
539
|
+
process.exit(1);
|
|
540
|
+
}
|
|
541
|
+
await workflowService.handoff(from, to, options.artifacts || []);
|
|
542
|
+
ui.displaySuccess(`Handoff: ${harness_1.ROLE_DISPLAY_NAMES[from]} → ${harness_1.ROLE_DISPLAY_NAMES[to]}`);
|
|
543
|
+
}
|
|
544
|
+
catch (error) {
|
|
545
|
+
ui.displayError('Failed to perform handoff', error);
|
|
598
546
|
process.exit(1);
|
|
599
547
|
}
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
548
|
+
});
|
|
549
|
+
workflowCommand
|
|
550
|
+
.command('collaborate <topic>')
|
|
551
|
+
.description('Start a collaboration session between roles')
|
|
552
|
+
.option('-r, --repo-path <path>', 'Repository path', process.cwd())
|
|
553
|
+
.option('-p, --participants <roles...>', 'Participating roles')
|
|
554
|
+
.action(async (topic, options) => {
|
|
555
|
+
try {
|
|
556
|
+
const workflowService = new harness_1.WorkflowService(options.repoPath, getWorkflowDeps());
|
|
557
|
+
const session = await workflowService.startCollaboration(topic, options.participants);
|
|
558
|
+
ui.displaySuccess(`Collaboration started: ${topic}`);
|
|
559
|
+
ui.displayInfo('Session ID', session.getId());
|
|
560
|
+
ui.displayInfo('Participants', session.getParticipantNames().join(', '));
|
|
561
|
+
console.log('\nUse MCP tools to contribute and synthesize the collaboration.');
|
|
603
562
|
}
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
563
|
+
catch (error) {
|
|
564
|
+
ui.displayError('Failed to start collaboration', error);
|
|
565
|
+
process.exit(1);
|
|
607
566
|
}
|
|
608
|
-
|
|
609
|
-
|
|
567
|
+
});
|
|
568
|
+
workflowCommand
|
|
569
|
+
.command('role <action> <role>')
|
|
570
|
+
.description('Manage role status (start/complete)')
|
|
571
|
+
.option('-r, --repo-path <path>', 'Repository path', process.cwd())
|
|
572
|
+
.option('-o, --outputs <files...>', 'Output files (for complete action)')
|
|
573
|
+
.action(async (action, role, options) => {
|
|
574
|
+
try {
|
|
575
|
+
const workflowService = new harness_1.WorkflowService(options.repoPath, getWorkflowDeps());
|
|
576
|
+
if (!await workflowService.hasWorkflow()) {
|
|
577
|
+
ui.displayError('No workflow found. Run "workflow init <name>" first.');
|
|
578
|
+
process.exit(1);
|
|
579
|
+
}
|
|
580
|
+
if (action === 'start') {
|
|
581
|
+
await workflowService.startRole(role);
|
|
582
|
+
ui.displaySuccess(`Started role: ${harness_1.ROLE_DISPLAY_NAMES[role]}`);
|
|
583
|
+
}
|
|
584
|
+
else if (action === 'complete') {
|
|
585
|
+
await workflowService.completeRole(role, options.outputs || []);
|
|
586
|
+
ui.displaySuccess(`Completed role: ${harness_1.ROLE_DISPLAY_NAMES[role]}`);
|
|
587
|
+
}
|
|
588
|
+
else {
|
|
589
|
+
ui.displayError(`Unknown action: ${action}. Use 'start' or 'complete'.`);
|
|
590
|
+
process.exit(1);
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
catch (error) {
|
|
594
|
+
ui.displayError('Failed to manage role', error);
|
|
610
595
|
process.exit(1);
|
|
611
596
|
}
|
|
612
|
-
}
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
597
|
+
});
|
|
598
|
+
return workflowCommand;
|
|
599
|
+
}
|
|
600
|
+
const adminCommand = program
|
|
601
|
+
.command('admin')
|
|
602
|
+
.description('Advanced and low-level commands that are not part of the primary sync-focused CLI surface');
|
|
603
|
+
registerExportRulesCommand(program);
|
|
604
|
+
registerReportCommand(adminCommand);
|
|
605
|
+
registerReportCommand(program, true);
|
|
606
|
+
registerSkillCommands(adminCommand);
|
|
607
|
+
registerSkillCommands(program, true);
|
|
608
|
+
registerWorkflowCommands(adminCommand);
|
|
609
|
+
registerWorkflowCommands(program, true);
|
|
610
|
+
registerPreviewSplashCommand(adminCommand);
|
|
611
|
+
registerPreviewSplashCommand(program, true);
|
|
618
612
|
async function selectLocale() {
|
|
619
613
|
const locale = await (0, themedPrompt_1.themedSelect)({
|
|
620
614
|
message: t('prompts.language.select'),
|
|
@@ -630,7 +624,7 @@ async function selectLocale() {
|
|
|
630
624
|
}
|
|
631
625
|
async function runInteractive() {
|
|
632
626
|
const projectPath = process.cwd();
|
|
633
|
-
const detector = new
|
|
627
|
+
const detector = new cli_1.StateDetector({ projectPath });
|
|
634
628
|
const result = await detector.detect();
|
|
635
629
|
// Detect smart defaults for display
|
|
636
630
|
const defaults = await (0, prompts_1.detectSmartDefaults)(projectPath);
|
|
@@ -663,7 +657,7 @@ async function runInteractive() {
|
|
|
663
657
|
}
|
|
664
658
|
else {
|
|
665
659
|
// Get quick stats only when we have context
|
|
666
|
-
const quickSyncService = new
|
|
660
|
+
const quickSyncService = new cli_1.QuickSyncService({
|
|
667
661
|
ui,
|
|
668
662
|
t,
|
|
669
663
|
version: version_1.VERSION,
|
|
@@ -713,7 +707,7 @@ async function runInteractive() {
|
|
|
713
707
|
async function runFullMenu() {
|
|
714
708
|
let exitRequested = false;
|
|
715
709
|
while (!exitRequested) {
|
|
716
|
-
const detector = new
|
|
710
|
+
const detector = new cli_1.StateDetector({ projectPath: process.cwd() });
|
|
717
711
|
const state = await detector.detect();
|
|
718
712
|
const isUnfilled = state.state === 'unfilled';
|
|
719
713
|
const choices = isUnfilled
|
|
@@ -774,16 +768,13 @@ async function displayPendingFiles(contextDir) {
|
|
|
774
768
|
console.log();
|
|
775
769
|
}
|
|
776
770
|
async function runMcpInstall() {
|
|
777
|
-
const mcpInstallService = new
|
|
778
|
-
const
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
message: t('commands.mcpInstall.selectTool'),
|
|
785
|
-
choices: mcpChoices,
|
|
786
|
-
}]);
|
|
771
|
+
const mcpInstallService = new cli_1.MCPInstallService({ ui, t, version: version_1.VERSION });
|
|
772
|
+
const selectedTool = await (0, cli_1.resolveMcpInstallToolSelection)({
|
|
773
|
+
isInteractive: true,
|
|
774
|
+
service: mcpInstallService,
|
|
775
|
+
t,
|
|
776
|
+
promptTool: ({ message, choices }) => (0, themedPrompt_1.themedSelect)({ message, choices }),
|
|
777
|
+
});
|
|
787
778
|
const mcpResult = await mcpInstallService.run({
|
|
788
779
|
tool: selectedTool,
|
|
789
780
|
global: true,
|
|
@@ -896,8 +887,8 @@ async function runQuickSync() {
|
|
|
896
887
|
skipSkills: false,
|
|
897
888
|
skipDocs: false,
|
|
898
889
|
agentTargets: ['claude', 'github'],
|
|
899
|
-
skillTargets: ['claude', '
|
|
900
|
-
docTargets: ['cursor', 'claude', 'agents'],
|
|
890
|
+
skillTargets: ['claude', 'github', 'windsurf', 'codex', 'antigravity'],
|
|
891
|
+
docTargets: ['cursor', 'claude', 'github', 'gemini', 'agents'],
|
|
901
892
|
force: false,
|
|
902
893
|
dryRun: false,
|
|
903
894
|
verbose: false,
|
|
@@ -950,8 +941,11 @@ async function runQuickSync() {
|
|
|
950
941
|
message: t('prompts.quickSync.selectSkillTargets'),
|
|
951
942
|
choices: [
|
|
952
943
|
{ name: '.claude/skills (Claude Code)', value: 'claude', checked: true },
|
|
953
|
-
{ name: '.
|
|
954
|
-
{ name: '.
|
|
944
|
+
{ name: '.github/skills (GitHub Copilot)', value: 'github', checked: true },
|
|
945
|
+
{ name: '.windsurf/skills (Windsurf)', value: 'windsurf', checked: true },
|
|
946
|
+
{ name: '.codex/skills (Codex compatibility)', value: 'codex', checked: true },
|
|
947
|
+
{ name: '.agents/workflows (Google Antigravity)', value: 'antigravity', checked: true },
|
|
948
|
+
{ name: '.gemini/skills (Gemini compatibility)', value: 'gemini', checked: false },
|
|
955
949
|
],
|
|
956
950
|
},
|
|
957
951
|
]);
|
|
@@ -964,10 +958,12 @@ async function runQuickSync() {
|
|
|
964
958
|
name: 'targets',
|
|
965
959
|
message: t('prompts.quickSync.selectDocTargets'),
|
|
966
960
|
choices: [
|
|
967
|
-
{ name: '.
|
|
961
|
+
{ name: '.cursor/rules (Cursor AI)', value: 'cursor', checked: true },
|
|
968
962
|
{ name: 'CLAUDE.md (Claude Code)', value: 'claude', checked: true },
|
|
963
|
+
{ name: '.github/copilot-instructions.md (GitHub Copilot)', value: 'github', checked: true },
|
|
964
|
+
{ name: 'GEMINI.md (Gemini CLI)', value: 'gemini', checked: true },
|
|
969
965
|
{ name: 'AGENTS.md (Universal)', value: 'agents', checked: true },
|
|
970
|
-
{ name: '.
|
|
966
|
+
{ name: '.windsurf/rules (Windsurf)', value: 'windsurf', checked: false },
|
|
971
967
|
{ name: '.clinerules (Cline)', value: 'cline', checked: false },
|
|
972
968
|
{ name: 'CONVENTIONS.md (Aider)', value: 'aider', checked: false },
|
|
973
969
|
],
|
|
@@ -987,7 +983,7 @@ async function runQuickSync() {
|
|
|
987
983
|
verbose: false,
|
|
988
984
|
};
|
|
989
985
|
}
|
|
990
|
-
const quickSyncService = new
|
|
986
|
+
const quickSyncService = new cli_1.QuickSyncService({
|
|
991
987
|
ui,
|
|
992
988
|
t,
|
|
993
989
|
version: version_1.VERSION,
|
|
@@ -1001,7 +997,7 @@ async function runQuickSync() {
|
|
|
1001
997
|
async function runReverseSync() {
|
|
1002
998
|
const projectPath = process.cwd();
|
|
1003
999
|
// Create service
|
|
1004
|
-
const reverseSyncService = new
|
|
1000
|
+
const reverseSyncService = new cli_1.ReverseQuickSyncService({
|
|
1005
1001
|
ui,
|
|
1006
1002
|
t,
|
|
1007
1003
|
version: version_1.VERSION,
|
|
@@ -1161,10 +1157,6 @@ function handleGracefulExit() {
|
|
|
1161
1157
|
ui.displaySuccess(t('success.interactive.goodbye'));
|
|
1162
1158
|
process.exit(0);
|
|
1163
1159
|
}
|
|
1164
|
-
// Handle SIGINT (Ctrl+C) at process level
|
|
1165
|
-
process.on('SIGINT', () => {
|
|
1166
|
-
handleGracefulExit();
|
|
1167
|
-
});
|
|
1168
1160
|
if (require.main === module) {
|
|
1169
1161
|
main().catch(error => {
|
|
1170
1162
|
if (isUserInterrupt(error)) {
|