@dotcontext/cli 0.8.2 → 0.9.0
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 +234 -135
- package/dist/cli/index.d.ts +15 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +27 -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 +365 -339
- 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 +189 -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 +17 -0
- package/dist/services/cli/index.js.map +1 -0
- package/dist/services/cli/mcpInstallService.d.ts +57 -0
- package/dist/services/cli/mcpInstallService.d.ts.map +1 -0
- package/dist/services/cli/mcpInstallService.js +607 -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 +16 -7
- 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
|
|
@@ -134,25 +128,30 @@ function buildMcpToolChoices(supportedTools, detectedTools) {
|
|
|
134
128
|
program.hook('preAction', () => {
|
|
135
129
|
void scheduleVersionCheck();
|
|
136
130
|
});
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
}
|
|
131
|
+
function registerSyncCommand(parent, name, hidden = false) {
|
|
132
|
+
const command = parent
|
|
133
|
+
.command(name, hidden ? { hidden: true } : {})
|
|
134
|
+
.description(t('commands.sync.description'))
|
|
135
|
+
.option('-s, --source <dir>', t('commands.sync.options.source'), './.context/agents')
|
|
136
|
+
.option('-t, --target <paths...>', t('commands.sync.options.target'))
|
|
137
|
+
.option('-m, --mode <type>', t('commands.sync.options.mode'), 'symlink')
|
|
138
|
+
.option('-p, --preset <name>', t('commands.sync.options.preset'))
|
|
139
|
+
.option('--force', t('commands.sync.options.force'))
|
|
140
|
+
.option('--dry-run', t('commands.sync.options.dryRun'))
|
|
141
|
+
.option('-v, --verbose', t('commands.sync.options.verbose'))
|
|
142
|
+
.action(async (options) => {
|
|
143
|
+
try {
|
|
144
|
+
await syncService.run(options);
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
ui.displayError(t('errors.sync.failed'), error);
|
|
148
|
+
process.exit(1);
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
return command;
|
|
152
|
+
}
|
|
153
|
+
registerSyncCommand(program, 'sync');
|
|
154
|
+
registerSyncCommand(program, 'sync-agents', true);
|
|
156
155
|
program
|
|
157
156
|
.command('import-rules')
|
|
158
157
|
.description(t('commands.importRules.description'))
|
|
@@ -222,7 +221,7 @@ program
|
|
|
222
221
|
.option('-v, --verbose', 'Verbose output')
|
|
223
222
|
.action(async (repoPath, options) => {
|
|
224
223
|
try {
|
|
225
|
-
const service = new
|
|
224
|
+
const service = new cli_1.ReverseQuickSyncService({ ui, t, version: version_1.VERSION });
|
|
226
225
|
await service.run(repoPath, {
|
|
227
226
|
dryRun: options.dryRun,
|
|
228
227
|
force: options.force,
|
|
@@ -251,14 +250,13 @@ program
|
|
|
251
250
|
repoPath: options.repoPath,
|
|
252
251
|
verbose: options.verbose
|
|
253
252
|
});
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
process.exit(0);
|
|
253
|
+
(0, processShutdown_1.registerProcessShutdown)(server, {
|
|
254
|
+
onError: (error) => {
|
|
255
|
+
if (options.verbose) {
|
|
256
|
+
process.stderr.write(`[mcp] Shutdown error: ${error}\n`);
|
|
257
|
+
}
|
|
258
|
+
},
|
|
259
|
+
exit: (code) => process.exit(code),
|
|
262
260
|
});
|
|
263
261
|
}
|
|
264
262
|
catch (error) {
|
|
@@ -278,13 +276,14 @@ program
|
|
|
278
276
|
.option('-v, --verbose', t('commands.mcpInstall.options.verbose'))
|
|
279
277
|
.action(async (tool, options) => {
|
|
280
278
|
try {
|
|
281
|
-
const mcpInstallService = new
|
|
282
|
-
|
|
283
|
-
|
|
279
|
+
const mcpInstallService = new cli_1.MCPInstallService({ ui, t, version: version_1.VERSION });
|
|
280
|
+
let selectedTool = tool;
|
|
281
|
+
// Interactive terminals can choose a specific tool; headless runs default to all supported tools.
|
|
282
|
+
if (!selectedTool && process.stdin.isTTY) {
|
|
284
283
|
const supportedTools = mcpInstallService.getSupportedTools();
|
|
285
284
|
const detectedTools = await mcpInstallService.detectInstalledTools();
|
|
286
285
|
const choices = buildMcpToolChoices(supportedTools, detectedTools);
|
|
287
|
-
const { selectedTool } = await inquirer_1.default.prompt([
|
|
286
|
+
const { selectedTool: promptSelectedTool } = await inquirer_1.default.prompt([
|
|
288
287
|
{
|
|
289
288
|
type: 'list',
|
|
290
289
|
name: 'selectedTool',
|
|
@@ -292,10 +291,13 @@ program
|
|
|
292
291
|
choices,
|
|
293
292
|
},
|
|
294
293
|
]);
|
|
295
|
-
|
|
294
|
+
selectedTool = promptSelectedTool;
|
|
295
|
+
}
|
|
296
|
+
else if (!selectedTool) {
|
|
297
|
+
selectedTool = 'all';
|
|
296
298
|
}
|
|
297
299
|
const result = await mcpInstallService.run({
|
|
298
|
-
tool,
|
|
300
|
+
tool: selectedTool,
|
|
299
301
|
global: options.local ? false : options.global,
|
|
300
302
|
dryRun: options.dryRun,
|
|
301
303
|
verbose: options.verbose,
|
|
@@ -310,162 +312,167 @@ program
|
|
|
310
312
|
process.exit(1);
|
|
311
313
|
}
|
|
312
314
|
});
|
|
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;
|
|
315
|
+
function registerPreviewSplashCommand(parent, hidden = false) {
|
|
316
|
+
const command = parent
|
|
317
|
+
.command('preview-splash', hidden ? { hidden: true } : {})
|
|
318
|
+
.description(t('commands.previewSplash.description'))
|
|
319
|
+
.option('--title <title>', t('commands.previewSplash.options.title'))
|
|
320
|
+
.option('--directory <path>', t('commands.previewSplash.options.directory'), process.cwd())
|
|
321
|
+
.action(async (options) => {
|
|
322
|
+
try {
|
|
323
|
+
await renderStartupSplash(options.directory, options.title);
|
|
409
324
|
}
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
325
|
+
catch (error) {
|
|
326
|
+
ui.displayError(t('errors.cli.executionFailed'), error);
|
|
327
|
+
process.exit(1);
|
|
328
|
+
}
|
|
329
|
+
});
|
|
330
|
+
return command;
|
|
331
|
+
}
|
|
332
|
+
function registerExportRulesCommand(parent, hidden = false) {
|
|
333
|
+
const command = parent
|
|
334
|
+
.command('export-rules', hidden ? { hidden: true } : {})
|
|
335
|
+
.description(t('commands.export.description'))
|
|
336
|
+
.argument('[repo-path]', 'Repository path', process.cwd())
|
|
337
|
+
.option('-s, --source <dir>', t('commands.export.options.source'), '.context/docs')
|
|
338
|
+
.option('-t, --targets <paths...>', t('commands.export.options.targets'))
|
|
339
|
+
.option('--preset <name>', t('commands.export.options.preset'))
|
|
340
|
+
.option('--force', t('commands.export.options.force'))
|
|
341
|
+
.option('--dry-run', t('commands.export.options.dryRun'))
|
|
342
|
+
.option('-v, --verbose', t('commands.fill.options.verbose'))
|
|
343
|
+
.action(async (repoPath, options) => {
|
|
344
|
+
try {
|
|
345
|
+
const exportService = new cli_1.ExportRulesService({
|
|
346
|
+
ui,
|
|
347
|
+
t,
|
|
348
|
+
version: version_1.VERSION,
|
|
349
|
+
});
|
|
350
|
+
await exportService.run(repoPath, {
|
|
351
|
+
source: options.source,
|
|
352
|
+
targets: options.targets,
|
|
353
|
+
preset: options.preset,
|
|
354
|
+
force: options.force,
|
|
355
|
+
dryRun: options.dryRun,
|
|
356
|
+
verbose: options.verbose,
|
|
357
|
+
});
|
|
416
358
|
}
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
359
|
+
catch (error) {
|
|
360
|
+
ui.displayError(t('errors.cli.executionFailed'), error);
|
|
361
|
+
process.exit(1);
|
|
362
|
+
}
|
|
363
|
+
});
|
|
364
|
+
return command;
|
|
365
|
+
}
|
|
366
|
+
function registerReportCommand(parent, hidden = false) {
|
|
367
|
+
const command = parent
|
|
368
|
+
.command('report', hidden ? { hidden: true } : {})
|
|
369
|
+
.description(t('commands.report.description'))
|
|
370
|
+
.argument('[repo-path]', 'Repository path', process.cwd())
|
|
371
|
+
.option('-f, --format <format>', t('commands.report.options.format'), 'console')
|
|
372
|
+
.option('-o, --output <path>', t('commands.report.options.output'))
|
|
373
|
+
.option('--include-stack', t('commands.report.options.includeStack'))
|
|
374
|
+
.option('-v, --verbose', t('commands.fill.options.verbose'))
|
|
375
|
+
.action(async (repoPath, options) => {
|
|
376
|
+
try {
|
|
377
|
+
const reportService = new cli_1.ReportService({
|
|
378
|
+
ui,
|
|
379
|
+
t,
|
|
380
|
+
version: version_1.VERSION,
|
|
381
|
+
});
|
|
382
|
+
const report = await reportService.generate(repoPath, {
|
|
383
|
+
format: options.format,
|
|
384
|
+
output: options.output,
|
|
385
|
+
includeStack: options.includeStack,
|
|
386
|
+
verbose: options.verbose,
|
|
387
|
+
});
|
|
388
|
+
await reportService.output(report, options);
|
|
389
|
+
}
|
|
390
|
+
catch (error) {
|
|
391
|
+
ui.displayError(t('errors.cli.executionFailed'), error);
|
|
392
|
+
process.exit(1);
|
|
393
|
+
}
|
|
394
|
+
});
|
|
395
|
+
return command;
|
|
396
|
+
}
|
|
397
|
+
function registerSkillCommands(parent, hidden = false) {
|
|
398
|
+
const skillCommand = parent
|
|
399
|
+
.command('skill', hidden ? { hidden: true } : {})
|
|
400
|
+
.description(t('commands.skill.description'));
|
|
401
|
+
skillCommand
|
|
402
|
+
.command('list')
|
|
403
|
+
.description(t('commands.skill.list.description'))
|
|
404
|
+
.argument('[repo-path]', 'Repository path', process.cwd())
|
|
405
|
+
.option('--json', 'Output as JSON')
|
|
406
|
+
.action(async (repoPath, options) => {
|
|
407
|
+
try {
|
|
408
|
+
const { createSkillRegistry } = await Promise.resolve().then(() => __importStar(require('./workflow/skills')));
|
|
409
|
+
const registry = createSkillRegistry(repoPath);
|
|
410
|
+
const discovered = await registry.discoverAll();
|
|
411
|
+
if (options.json) {
|
|
412
|
+
console.log(JSON.stringify({
|
|
413
|
+
builtIn: discovered.builtIn.map(s => s.slug),
|
|
414
|
+
custom: discovered.custom.map(s => s.slug),
|
|
415
|
+
total: discovered.all.length,
|
|
416
|
+
}, null, 2));
|
|
417
|
+
return;
|
|
418
|
+
}
|
|
419
|
+
console.log('\nBuilt-in Skills:');
|
|
420
|
+
for (const skill of discovered.builtIn) {
|
|
421
|
+
const projectSkill = discovered.all.find(s => s.slug === skill.slug && s.path.includes('.context'));
|
|
422
|
+
const status = projectSkill ? '[project]' : '[available]';
|
|
423
|
+
console.log(` ${skill.slug} ${status}`);
|
|
421
424
|
console.log(` ${skill.metadata.description}`);
|
|
422
425
|
}
|
|
426
|
+
if (discovered.custom.length > 0) {
|
|
427
|
+
console.log('\nCustom Skills:');
|
|
428
|
+
for (const skill of discovered.custom) {
|
|
429
|
+
console.log(` ${skill.slug}`);
|
|
430
|
+
console.log(` ${skill.metadata.description}`);
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
console.log(`\nTotal: ${discovered.all.length} skills (${discovered.builtIn.length} built-in, ${discovered.custom.length} custom)`);
|
|
423
434
|
}
|
|
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');
|
|
435
|
+
catch (error) {
|
|
436
|
+
ui.displayError('Failed to list skills', error);
|
|
437
|
+
process.exit(1);
|
|
455
438
|
}
|
|
456
|
-
|
|
457
|
-
|
|
439
|
+
});
|
|
440
|
+
skillCommand
|
|
441
|
+
.command('export')
|
|
442
|
+
.description(t('commands.skill.export.description'))
|
|
443
|
+
.argument('[repo-path]', 'Repository path', process.cwd())
|
|
444
|
+
.option('-p, --preset <preset>', 'Export preset, for example: claude, github, windsurf, codex, antigravity, all', 'all')
|
|
445
|
+
.option('-f, --force', 'Overwrite existing files')
|
|
446
|
+
.option('--include-builtin', 'Include built-in skills even if not scaffolded')
|
|
447
|
+
.option('--dry-run', 'Preview changes without writing')
|
|
448
|
+
.action(async (repoPath, options) => {
|
|
449
|
+
try {
|
|
450
|
+
const { SkillExportService } = await Promise.resolve().then(() => __importStar(require('./services/export/skillExportService')));
|
|
451
|
+
const exportService = new SkillExportService({
|
|
452
|
+
ui,
|
|
453
|
+
t,
|
|
454
|
+
version: version_1.VERSION,
|
|
455
|
+
});
|
|
456
|
+
const result = await exportService.run(repoPath, {
|
|
457
|
+
preset: options.preset,
|
|
458
|
+
force: options.force,
|
|
459
|
+
includeBuiltIn: options.includeBuiltin,
|
|
460
|
+
dryRun: options.dryRun,
|
|
461
|
+
});
|
|
462
|
+
if (options.dryRun) {
|
|
463
|
+
ui.displayInfo('Dry run', 'No files were written');
|
|
464
|
+
}
|
|
465
|
+
else {
|
|
466
|
+
ui.displaySuccess(`Exported ${result.skillsExported.length} skills to ${result.targets.length} targets`);
|
|
467
|
+
}
|
|
458
468
|
}
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
}
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
const workflowCommand = program
|
|
467
|
-
.command('workflow')
|
|
468
|
-
.description('PREVC workflow management (Planning, Review, Execution, Validation, Confirmation)');
|
|
469
|
+
catch (error) {
|
|
470
|
+
ui.displayError('Failed to export skills', error);
|
|
471
|
+
process.exit(1);
|
|
472
|
+
}
|
|
473
|
+
});
|
|
474
|
+
return skillCommand;
|
|
475
|
+
}
|
|
469
476
|
// Helper to create workflow service dependencies
|
|
470
477
|
const getWorkflowDeps = () => ({
|
|
471
478
|
ui: {
|
|
@@ -474,147 +481,165 @@ const getWorkflowDeps = () => ({
|
|
|
474
481
|
displayInfo: (title, detail) => ui.displayInfo(title, detail || '')
|
|
475
482
|
}
|
|
476
483
|
});
|
|
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.');
|
|
484
|
+
function registerWorkflowCommands(parent, hidden = false) {
|
|
485
|
+
const workflowCommand = parent
|
|
486
|
+
.command('workflow', hidden ? { hidden: true } : {})
|
|
487
|
+
.description('PREVC workflow management (Planning, Review, Execution, Validation, Confirmation)');
|
|
488
|
+
workflowCommand
|
|
489
|
+
.command('init <name>')
|
|
490
|
+
.description('Initialize a new PREVC workflow')
|
|
491
|
+
.option('-d, --description <text>', 'Project description for scale detection')
|
|
492
|
+
.option('-s, --scale <scale>', 'Project scale: QUICK, SMALL, MEDIUM, LARGE')
|
|
493
|
+
.option('-r, --repo-path <path>', 'Repository path', process.cwd())
|
|
494
|
+
.action(async (name, options) => {
|
|
495
|
+
try {
|
|
496
|
+
const workflowService = new harness_1.WorkflowService(options.repoPath, getWorkflowDeps());
|
|
497
|
+
const status = await workflowService.init({
|
|
498
|
+
name,
|
|
499
|
+
description: options.description,
|
|
500
|
+
scale: options.scale
|
|
501
|
+
});
|
|
502
|
+
ui.displaySuccess(`Workflow PREVC initialized: ${name}`);
|
|
503
|
+
ui.displayInfo('Scale', (0, harness_1.getScaleName)(status.project.scale));
|
|
504
|
+
ui.displayInfo('Current Phase', `${status.project.current_phase} - ${harness_1.PHASE_NAMES_PT[status.project.current_phase]}`);
|
|
505
|
+
}
|
|
506
|
+
catch (error) {
|
|
507
|
+
ui.displayError('Failed to initialize workflow', error);
|
|
509
508
|
process.exit(1);
|
|
510
509
|
}
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
510
|
+
});
|
|
511
|
+
workflowCommand
|
|
512
|
+
.command('status')
|
|
513
|
+
.description('Show current workflow status')
|
|
514
|
+
.option('-r, --repo-path <path>', 'Repository path', process.cwd())
|
|
515
|
+
.action(async (options) => {
|
|
516
|
+
try {
|
|
517
|
+
const workflowService = new harness_1.WorkflowService(options.repoPath, getWorkflowDeps());
|
|
518
|
+
if (!await workflowService.hasWorkflow()) {
|
|
519
|
+
ui.displayError('No workflow found. Run "workflow init <name>" first.');
|
|
520
|
+
process.exit(1);
|
|
521
|
+
}
|
|
522
|
+
const formattedStatus = await workflowService.getFormattedStatus();
|
|
523
|
+
console.log(formattedStatus);
|
|
524
|
+
const actions = await workflowService.getRecommendedActions();
|
|
525
|
+
if (actions.length > 0) {
|
|
526
|
+
console.log('\nRecommended actions:');
|
|
527
|
+
actions.forEach((action, i) => console.log(` ${i + 1}. ${action}`));
|
|
528
|
+
}
|
|
517
529
|
}
|
|
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.');
|
|
530
|
+
catch (error) {
|
|
531
|
+
ui.displayError('Failed to get workflow status', error);
|
|
534
532
|
process.exit(1);
|
|
535
533
|
}
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
534
|
+
});
|
|
535
|
+
workflowCommand
|
|
536
|
+
.command('advance')
|
|
537
|
+
.description('Complete current phase and advance to next')
|
|
538
|
+
.option('-r, --repo-path <path>', 'Repository path', process.cwd())
|
|
539
|
+
.option('-o, --outputs <files...>', 'Output files generated in current phase')
|
|
540
|
+
.action(async (options) => {
|
|
541
|
+
try {
|
|
542
|
+
const workflowService = new harness_1.WorkflowService(options.repoPath, getWorkflowDeps());
|
|
543
|
+
if (!await workflowService.hasWorkflow()) {
|
|
544
|
+
ui.displayError('No workflow found. Run "workflow init <name>" first.');
|
|
545
|
+
process.exit(1);
|
|
546
|
+
}
|
|
547
|
+
const nextPhase = await workflowService.advance(options.outputs);
|
|
548
|
+
if (nextPhase) {
|
|
549
|
+
ui.displaySuccess(`Advanced to phase: ${nextPhase} - ${harness_1.PHASE_NAMES_PT[nextPhase]}`);
|
|
550
|
+
}
|
|
551
|
+
else {
|
|
552
|
+
ui.displaySuccess('Workflow completed!');
|
|
553
|
+
}
|
|
542
554
|
}
|
|
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.');
|
|
555
|
+
catch (error) {
|
|
556
|
+
ui.displayError('Failed to advance workflow', error);
|
|
559
557
|
process.exit(1);
|
|
560
558
|
}
|
|
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.');
|
|
559
|
+
});
|
|
560
|
+
workflowCommand
|
|
561
|
+
.command('handoff <from> <to>')
|
|
562
|
+
.description('Perform handoff between roles')
|
|
563
|
+
.option('-r, --repo-path <path>', 'Repository path', process.cwd())
|
|
564
|
+
.option('-a, --artifacts <files...>', 'Artifacts to hand off')
|
|
565
|
+
.action(async (from, to, options) => {
|
|
566
|
+
try {
|
|
567
|
+
const workflowService = new harness_1.WorkflowService(options.repoPath, getWorkflowDeps());
|
|
568
|
+
if (!await workflowService.hasWorkflow()) {
|
|
569
|
+
ui.displayError('No workflow found. Run "workflow init <name>" first.');
|
|
570
|
+
process.exit(1);
|
|
571
|
+
}
|
|
572
|
+
await workflowService.handoff(from, to, options.artifacts || []);
|
|
573
|
+
ui.displaySuccess(`Handoff: ${harness_1.ROLE_DISPLAY_NAMES[from]} → ${harness_1.ROLE_DISPLAY_NAMES[to]}`);
|
|
574
|
+
}
|
|
575
|
+
catch (error) {
|
|
576
|
+
ui.displayError('Failed to perform handoff', error);
|
|
598
577
|
process.exit(1);
|
|
599
578
|
}
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
579
|
+
});
|
|
580
|
+
workflowCommand
|
|
581
|
+
.command('collaborate <topic>')
|
|
582
|
+
.description('Start a collaboration session between roles')
|
|
583
|
+
.option('-r, --repo-path <path>', 'Repository path', process.cwd())
|
|
584
|
+
.option('-p, --participants <roles...>', 'Participating roles')
|
|
585
|
+
.action(async (topic, options) => {
|
|
586
|
+
try {
|
|
587
|
+
const workflowService = new harness_1.WorkflowService(options.repoPath, getWorkflowDeps());
|
|
588
|
+
const session = await workflowService.startCollaboration(topic, options.participants);
|
|
589
|
+
ui.displaySuccess(`Collaboration started: ${topic}`);
|
|
590
|
+
ui.displayInfo('Session ID', session.getId());
|
|
591
|
+
ui.displayInfo('Participants', session.getParticipantNames().join(', '));
|
|
592
|
+
console.log('\nUse MCP tools to contribute and synthesize the collaboration.');
|
|
603
593
|
}
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
594
|
+
catch (error) {
|
|
595
|
+
ui.displayError('Failed to start collaboration', error);
|
|
596
|
+
process.exit(1);
|
|
607
597
|
}
|
|
608
|
-
|
|
609
|
-
|
|
598
|
+
});
|
|
599
|
+
workflowCommand
|
|
600
|
+
.command('role <action> <role>')
|
|
601
|
+
.description('Manage role status (start/complete)')
|
|
602
|
+
.option('-r, --repo-path <path>', 'Repository path', process.cwd())
|
|
603
|
+
.option('-o, --outputs <files...>', 'Output files (for complete action)')
|
|
604
|
+
.action(async (action, role, options) => {
|
|
605
|
+
try {
|
|
606
|
+
const workflowService = new harness_1.WorkflowService(options.repoPath, getWorkflowDeps());
|
|
607
|
+
if (!await workflowService.hasWorkflow()) {
|
|
608
|
+
ui.displayError('No workflow found. Run "workflow init <name>" first.');
|
|
609
|
+
process.exit(1);
|
|
610
|
+
}
|
|
611
|
+
if (action === 'start') {
|
|
612
|
+
await workflowService.startRole(role);
|
|
613
|
+
ui.displaySuccess(`Started role: ${harness_1.ROLE_DISPLAY_NAMES[role]}`);
|
|
614
|
+
}
|
|
615
|
+
else if (action === 'complete') {
|
|
616
|
+
await workflowService.completeRole(role, options.outputs || []);
|
|
617
|
+
ui.displaySuccess(`Completed role: ${harness_1.ROLE_DISPLAY_NAMES[role]}`);
|
|
618
|
+
}
|
|
619
|
+
else {
|
|
620
|
+
ui.displayError(`Unknown action: ${action}. Use 'start' or 'complete'.`);
|
|
621
|
+
process.exit(1);
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
catch (error) {
|
|
625
|
+
ui.displayError('Failed to manage role', error);
|
|
610
626
|
process.exit(1);
|
|
611
627
|
}
|
|
612
|
-
}
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
628
|
+
});
|
|
629
|
+
return workflowCommand;
|
|
630
|
+
}
|
|
631
|
+
const adminCommand = program
|
|
632
|
+
.command('admin')
|
|
633
|
+
.description('Advanced and low-level commands that are not part of the primary sync-focused CLI surface');
|
|
634
|
+
registerExportRulesCommand(program);
|
|
635
|
+
registerReportCommand(adminCommand);
|
|
636
|
+
registerReportCommand(program, true);
|
|
637
|
+
registerSkillCommands(adminCommand);
|
|
638
|
+
registerSkillCommands(program, true);
|
|
639
|
+
registerWorkflowCommands(adminCommand);
|
|
640
|
+
registerWorkflowCommands(program, true);
|
|
641
|
+
registerPreviewSplashCommand(adminCommand);
|
|
642
|
+
registerPreviewSplashCommand(program, true);
|
|
618
643
|
async function selectLocale() {
|
|
619
644
|
const locale = await (0, themedPrompt_1.themedSelect)({
|
|
620
645
|
message: t('prompts.language.select'),
|
|
@@ -630,7 +655,7 @@ async function selectLocale() {
|
|
|
630
655
|
}
|
|
631
656
|
async function runInteractive() {
|
|
632
657
|
const projectPath = process.cwd();
|
|
633
|
-
const detector = new
|
|
658
|
+
const detector = new cli_1.StateDetector({ projectPath });
|
|
634
659
|
const result = await detector.detect();
|
|
635
660
|
// Detect smart defaults for display
|
|
636
661
|
const defaults = await (0, prompts_1.detectSmartDefaults)(projectPath);
|
|
@@ -663,7 +688,7 @@ async function runInteractive() {
|
|
|
663
688
|
}
|
|
664
689
|
else {
|
|
665
690
|
// Get quick stats only when we have context
|
|
666
|
-
const quickSyncService = new
|
|
691
|
+
const quickSyncService = new cli_1.QuickSyncService({
|
|
667
692
|
ui,
|
|
668
693
|
t,
|
|
669
694
|
version: version_1.VERSION,
|
|
@@ -713,7 +738,7 @@ async function runInteractive() {
|
|
|
713
738
|
async function runFullMenu() {
|
|
714
739
|
let exitRequested = false;
|
|
715
740
|
while (!exitRequested) {
|
|
716
|
-
const detector = new
|
|
741
|
+
const detector = new cli_1.StateDetector({ projectPath: process.cwd() });
|
|
717
742
|
const state = await detector.detect();
|
|
718
743
|
const isUnfilled = state.state === 'unfilled';
|
|
719
744
|
const choices = isUnfilled
|
|
@@ -774,7 +799,7 @@ async function displayPendingFiles(contextDir) {
|
|
|
774
799
|
console.log();
|
|
775
800
|
}
|
|
776
801
|
async function runMcpInstall() {
|
|
777
|
-
const mcpInstallService = new
|
|
802
|
+
const mcpInstallService = new cli_1.MCPInstallService({ ui, t, version: version_1.VERSION });
|
|
778
803
|
const supportedTools = mcpInstallService.getSupportedTools();
|
|
779
804
|
const detectedTools = await mcpInstallService.detectInstalledTools();
|
|
780
805
|
const mcpChoices = buildMcpToolChoices(supportedTools, detectedTools);
|
|
@@ -896,8 +921,8 @@ async function runQuickSync() {
|
|
|
896
921
|
skipSkills: false,
|
|
897
922
|
skipDocs: false,
|
|
898
923
|
agentTargets: ['claude', 'github'],
|
|
899
|
-
skillTargets: ['claude', '
|
|
900
|
-
docTargets: ['cursor', 'claude', 'agents'],
|
|
924
|
+
skillTargets: ['claude', 'github', 'windsurf', 'codex', 'antigravity'],
|
|
925
|
+
docTargets: ['cursor', 'claude', 'github', 'gemini', 'agents'],
|
|
901
926
|
force: false,
|
|
902
927
|
dryRun: false,
|
|
903
928
|
verbose: false,
|
|
@@ -950,8 +975,11 @@ async function runQuickSync() {
|
|
|
950
975
|
message: t('prompts.quickSync.selectSkillTargets'),
|
|
951
976
|
choices: [
|
|
952
977
|
{ name: '.claude/skills (Claude Code)', value: 'claude', checked: true },
|
|
953
|
-
{ name: '.
|
|
954
|
-
{ name: '.
|
|
978
|
+
{ name: '.github/skills (GitHub Copilot)', value: 'github', checked: true },
|
|
979
|
+
{ name: '.windsurf/skills (Windsurf)', value: 'windsurf', checked: true },
|
|
980
|
+
{ name: '.codex/skills (Codex compatibility)', value: 'codex', checked: true },
|
|
981
|
+
{ name: '.agents/workflows (Google Antigravity)', value: 'antigravity', checked: true },
|
|
982
|
+
{ name: '.gemini/skills (Gemini compatibility)', value: 'gemini', checked: false },
|
|
955
983
|
],
|
|
956
984
|
},
|
|
957
985
|
]);
|
|
@@ -964,10 +992,12 @@ async function runQuickSync() {
|
|
|
964
992
|
name: 'targets',
|
|
965
993
|
message: t('prompts.quickSync.selectDocTargets'),
|
|
966
994
|
choices: [
|
|
967
|
-
{ name: '.
|
|
995
|
+
{ name: '.cursor/rules (Cursor AI)', value: 'cursor', checked: true },
|
|
968
996
|
{ name: 'CLAUDE.md (Claude Code)', value: 'claude', checked: true },
|
|
997
|
+
{ name: '.github/copilot-instructions.md (GitHub Copilot)', value: 'github', checked: true },
|
|
998
|
+
{ name: 'GEMINI.md (Gemini CLI)', value: 'gemini', checked: true },
|
|
969
999
|
{ name: 'AGENTS.md (Universal)', value: 'agents', checked: true },
|
|
970
|
-
{ name: '.
|
|
1000
|
+
{ name: '.windsurf/rules (Windsurf)', value: 'windsurf', checked: false },
|
|
971
1001
|
{ name: '.clinerules (Cline)', value: 'cline', checked: false },
|
|
972
1002
|
{ name: 'CONVENTIONS.md (Aider)', value: 'aider', checked: false },
|
|
973
1003
|
],
|
|
@@ -987,7 +1017,7 @@ async function runQuickSync() {
|
|
|
987
1017
|
verbose: false,
|
|
988
1018
|
};
|
|
989
1019
|
}
|
|
990
|
-
const quickSyncService = new
|
|
1020
|
+
const quickSyncService = new cli_1.QuickSyncService({
|
|
991
1021
|
ui,
|
|
992
1022
|
t,
|
|
993
1023
|
version: version_1.VERSION,
|
|
@@ -1001,7 +1031,7 @@ async function runQuickSync() {
|
|
|
1001
1031
|
async function runReverseSync() {
|
|
1002
1032
|
const projectPath = process.cwd();
|
|
1003
1033
|
// Create service
|
|
1004
|
-
const reverseSyncService = new
|
|
1034
|
+
const reverseSyncService = new cli_1.ReverseQuickSyncService({
|
|
1005
1035
|
ui,
|
|
1006
1036
|
t,
|
|
1007
1037
|
version: version_1.VERSION,
|
|
@@ -1161,10 +1191,6 @@ function handleGracefulExit() {
|
|
|
1161
1191
|
ui.displaySuccess(t('success.interactive.goodbye'));
|
|
1162
1192
|
process.exit(0);
|
|
1163
1193
|
}
|
|
1164
|
-
// Handle SIGINT (Ctrl+C) at process level
|
|
1165
|
-
process.on('SIGINT', () => {
|
|
1166
|
-
handleGracefulExit();
|
|
1167
|
-
});
|
|
1168
1194
|
if (require.main === module) {
|
|
1169
1195
|
main().catch(error => {
|
|
1170
1196
|
if (isUserInterrupt(error)) {
|