@dotcontext/cli 0.8.1 → 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/utils/versionChecker.d.ts.map +1 -1
- package/dist/utils/versionChecker.js +17 -8
- package/dist/utils/versionChecker.js.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 +19 -11
- 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
|
@@ -4,6 +4,31 @@
|
|
|
4
4
|
* High-level service for managing PREVC workflows via CLI and MCP.
|
|
5
5
|
*/
|
|
6
6
|
import { WorkflowSummary, PrevcStatus, PrevcPhase, PrevcRole, ProjectScale, CollaborationSession, CollaborationSynthesis, WorkflowSettings, PlanApproval, GateCheckResult, PhaseOrchestration } from '../../workflow';
|
|
7
|
+
import { type HarnessArtifactKind, type HarnessTaskContract, type HarnessHandoffContract, type HarnessSensorRun, type HarnessSessionRecord, type HarnessSensorDefinition, type WorkflowHarnessBinding } from '../harness';
|
|
8
|
+
export interface WorkflowHarnessStatus {
|
|
9
|
+
binding: WorkflowHarnessBinding;
|
|
10
|
+
session: HarnessSessionRecord;
|
|
11
|
+
availableSensors: Array<Pick<HarnessSensorDefinition, 'id' | 'name' | 'description'>>;
|
|
12
|
+
sensorRuns: HarnessSensorRun[];
|
|
13
|
+
taskContracts: HarnessTaskContract[];
|
|
14
|
+
handoffs: HarnessHandoffContract[];
|
|
15
|
+
policyRules: number;
|
|
16
|
+
completionCheck: {
|
|
17
|
+
blocked: boolean;
|
|
18
|
+
reasons: string[];
|
|
19
|
+
taskCompletion: {
|
|
20
|
+
canComplete: boolean;
|
|
21
|
+
missingSensors: string[];
|
|
22
|
+
missingArtifacts: string[];
|
|
23
|
+
blockingFindings: string[];
|
|
24
|
+
} | null;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export declare class HarnessWorkflowBlockedError extends Error {
|
|
28
|
+
readonly reasons: string[];
|
|
29
|
+
readonly harnessStatus: WorkflowHarnessStatus;
|
|
30
|
+
constructor(message: string, reasons: string[], harnessStatus: WorkflowHarnessStatus);
|
|
31
|
+
}
|
|
7
32
|
/**
|
|
8
33
|
* Workflow service dependencies
|
|
9
34
|
* Uses loose typing to be compatible with CLI and MCP contexts
|
|
@@ -37,9 +62,16 @@ export interface WorkflowInitOptions {
|
|
|
37
62
|
* PREVC Workflow Service
|
|
38
63
|
*/
|
|
39
64
|
export declare class WorkflowService {
|
|
65
|
+
private readonly repoPath;
|
|
40
66
|
private contextPath;
|
|
41
67
|
private orchestrator;
|
|
42
68
|
private collaborationManager;
|
|
69
|
+
private runtimeStateService;
|
|
70
|
+
private sensorCatalogService;
|
|
71
|
+
private sensorsService;
|
|
72
|
+
private taskContractsService;
|
|
73
|
+
private policyService;
|
|
74
|
+
private workflowStateService;
|
|
43
75
|
private deps;
|
|
44
76
|
constructor(repoPath: string, deps?: WorkflowServiceDependencies);
|
|
45
77
|
/**
|
|
@@ -84,6 +116,7 @@ export declare class WorkflowService {
|
|
|
84
116
|
* Get workflow settings
|
|
85
117
|
*/
|
|
86
118
|
getSettings(): Promise<WorkflowSettings>;
|
|
119
|
+
listAvailableSensors(): Array<Pick<HarnessSensorDefinition, 'id' | 'name' | 'description'>>;
|
|
87
120
|
/**
|
|
88
121
|
* Enable or disable autonomous mode
|
|
89
122
|
*/
|
|
@@ -147,5 +180,40 @@ export declare class WorkflowService {
|
|
|
147
180
|
* Complete a role's work
|
|
148
181
|
*/
|
|
149
182
|
completeRole(role: PrevcRole, outputs: string[]): Promise<void>;
|
|
183
|
+
getHarnessStatus(): Promise<WorkflowHarnessStatus | null>;
|
|
184
|
+
checkpointHarnessSession(note?: string, data?: unknown, artifactIds?: string[], pause?: boolean): Promise<{
|
|
185
|
+
binding: WorkflowHarnessBinding;
|
|
186
|
+
session: HarnessSessionRecord;
|
|
187
|
+
}>;
|
|
188
|
+
recordHarnessArtifact(input: {
|
|
189
|
+
name: string;
|
|
190
|
+
kind?: HarnessArtifactKind;
|
|
191
|
+
content?: unknown;
|
|
192
|
+
path?: string;
|
|
193
|
+
metadata?: Record<string, unknown>;
|
|
194
|
+
}): Promise<import("../harness").HarnessArtifactRecord>;
|
|
195
|
+
defineHarnessTask(input: {
|
|
196
|
+
title: string;
|
|
197
|
+
description?: string;
|
|
198
|
+
owner?: string;
|
|
199
|
+
inputs?: string[];
|
|
200
|
+
expectedOutputs?: string[];
|
|
201
|
+
acceptanceCriteria?: string[];
|
|
202
|
+
requiredSensors?: string[];
|
|
203
|
+
requiredArtifacts?: string[];
|
|
204
|
+
metadata?: Record<string, unknown>;
|
|
205
|
+
}): Promise<HarnessTaskContract>;
|
|
206
|
+
runHarnessSensors(sensorIds: string[], metadata?: Record<string, unknown>): Promise<{
|
|
207
|
+
runs: HarnessSensorRun[];
|
|
208
|
+
backpressure: import("../harness").HarnessBackpressureResult;
|
|
209
|
+
}>;
|
|
210
|
+
private ensureHarnessSession;
|
|
211
|
+
private requireHarnessBinding;
|
|
212
|
+
private loadHarnessBinding;
|
|
213
|
+
private saveHarnessBinding;
|
|
214
|
+
private registerDefaultSensors;
|
|
215
|
+
private hasPackageScript;
|
|
216
|
+
private executeShellSensor;
|
|
217
|
+
private trimEvidence;
|
|
150
218
|
}
|
|
151
219
|
//# sourceMappingURL=workflowService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflowService.d.ts","sourceRoot":"","sources":["../../../src/services/workflow/workflowService.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"workflowService.d.ts","sourceRoot":"","sources":["../../../src/services/workflow/workflowService.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAEL,eAAe,EACf,WAAW,EACX,UAAU,EACV,SAAS,EACT,YAAY,EAEZ,oBAAoB,EAEpB,sBAAsB,EACtB,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,kBAAkB,EAKnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAOL,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC5B,MAAM,YAAY,CAAC;AAIpB,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,sBAAsB,CAAC;IAChC,OAAO,EAAE,oBAAoB,CAAC;IAC9B,gBAAgB,EAAE,KAAK,CAAC,IAAI,CAAC,uBAAuB,EAAE,IAAI,GAAG,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC;IACtF,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAC/B,aAAa,EAAE,mBAAmB,EAAE,CAAC;IACrC,QAAQ,EAAE,sBAAsB,EAAE,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE;QACf,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,cAAc,EAAE;YACd,WAAW,EAAE,OAAO,CAAC;YACrB,cAAc,EAAE,MAAM,EAAE,CAAC;YACzB,gBAAgB,EAAE,MAAM,EAAE,CAAC;YAC3B,gBAAgB,EAAE,MAAM,EAAE,CAAC;SAC5B,GAAG,IAAI,CAAC;KACV,CAAC;CACH;AAED,qBAAa,2BAA4B,SAAQ,KAAK;aAGlC,OAAO,EAAE,MAAM,EAAE;aACjB,aAAa,EAAE,qBAAqB;gBAFpD,OAAO,EAAE,MAAM,EACC,OAAO,EAAE,MAAM,EAAE,EACjB,aAAa,EAAE,qBAAqB;CAKvD;AAED;;;GAGG;AACH,MAAM,WAAW,2BAA2B;IAC1C,EAAE,CAAC,EAAE;QACH,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;QAC1C,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;QACvD,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;KACzD,CAAC;IACF,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;CAC/D;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,kDAAkD;IAClD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,mDAAmD;IACnD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,mDAAmD;IACnD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,mGAAmG;IACnG,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAoB;IACxC,OAAO,CAAC,oBAAoB,CAAuB;IACnD,OAAO,CAAC,mBAAmB,CAA6B;IACxD,OAAO,CAAC,oBAAoB,CAA8B;IAC1D,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,oBAAoB,CAA8B;IAC1D,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,oBAAoB,CAA8B;IAC1D,OAAO,CAAC,IAAI,CAA8B;gBAGxC,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,2BAAgC;IA2BxC;;OAEG;WACU,MAAM,CACjB,QAAQ,GAAE,MAAsB,EAChC,IAAI,GAAE,2BAAgC,GACrC,OAAO,CAAC,eAAe,CAAC;IAI3B;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAIrC;;OAEG;IACG,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC;IA6D9D;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,WAAW,CAAC;IAIvC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,eAAe,CAAC;IAI5C;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;IAwD3C;;OAEG;IACG,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAgD5F;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,eAAe,CAAC;IAI5C;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAajF;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAI9C,oBAAoB,IAAI,KAAK,CAAC,IAAI,CAAC,uBAAuB,EAAE,IAAI,GAAG,MAAM,GAAG,aAAa,CAAC,CAAC;IAQ3F;;OAEG;IACG,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAUpE;;OAEG;IACG,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUtD;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,SAAS,GAAG,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAWtF;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAItD;;OAEG;IACG,OAAO,CACX,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,MAAM,EAAE,GAClB,OAAO,CAAC,IAAI,CAAC;IA6ChB;;OAEG;IACG,qBAAqB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAI3E;;OAEG;IACH,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAItF;;OAEG;IACG,kBAAkB,CACtB,KAAK,EAAE,MAAM,EACb,YAAY,CAAC,EAAE,SAAS,EAAE,GACzB,OAAO,CAAC,oBAAoB,CAAC;IAchC;;OAEG;IACH,yBAAyB,CACvB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,MAAM,GACd,IAAI;IASP;;OAEG;IACG,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC;IAIjF;;OAEG;IACG,qBAAqB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAIhD;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAIpC;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU7C;;OAEG;IACG,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAa/C;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB/D,gBAAgB,IAAI,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;IAwDzD,wBAAwB,CAC5B,IAAI,CAAC,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,OAAO,EACd,WAAW,CAAC,EAAE,MAAM,EAAE,EACtB,KAAK,CAAC,EAAE,OAAO,GACd,OAAO,CAAC;QAAE,OAAO,EAAE,sBAAsB,CAAC;QAAC,OAAO,EAAE,oBAAoB,CAAA;KAAE,CAAC;IAuBxE,qBAAqB,CAAC,KAAK,EAAE;QACjC,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,mBAAmB,CAAC;QAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACpC;IAeK,iBAAiB,CAAC,KAAK,EAAE;QAC7B,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;QAC3B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC9B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;QAC3B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACpC,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAuB1B,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;YAwBjE,oBAAoB;YAiCpB,qBAAqB;YAKrB,kBAAkB;YAIlB,kBAAkB;IAIhC,OAAO,CAAC,sBAAsB;YA+BhB,gBAAgB;YAUhB,kBAAkB;IA+BhC,OAAO,CAAC,YAAY;CAOrB"}
|
|
@@ -38,22 +38,51 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
38
38
|
};
|
|
39
39
|
})();
|
|
40
40
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
-
exports.WorkflowService = void 0;
|
|
41
|
+
exports.WorkflowService = exports.HarnessWorkflowBlockedError = void 0;
|
|
42
42
|
const path = __importStar(require("path"));
|
|
43
43
|
const fs = __importStar(require("fs-extra"));
|
|
44
|
+
const child_process_1 = require("child_process");
|
|
45
|
+
const util_1 = require("util");
|
|
44
46
|
const workflow_1 = require("../../workflow");
|
|
47
|
+
const harness_1 = require("../harness");
|
|
48
|
+
const exec = (0, util_1.promisify)(child_process_1.exec);
|
|
49
|
+
class HarnessWorkflowBlockedError extends Error {
|
|
50
|
+
constructor(message, reasons, harnessStatus) {
|
|
51
|
+
super(message);
|
|
52
|
+
this.reasons = reasons;
|
|
53
|
+
this.harnessStatus = harnessStatus;
|
|
54
|
+
this.name = 'HarnessWorkflowBlockedError';
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
exports.HarnessWorkflowBlockedError = HarnessWorkflowBlockedError;
|
|
45
58
|
/**
|
|
46
59
|
* PREVC Workflow Service
|
|
47
60
|
*/
|
|
48
61
|
class WorkflowService {
|
|
49
62
|
constructor(repoPath, deps = {}) {
|
|
50
63
|
const resolvedPath = path.resolve(repoPath);
|
|
64
|
+
this.repoPath = path.basename(resolvedPath) === '.context'
|
|
65
|
+
? path.dirname(resolvedPath)
|
|
66
|
+
: resolvedPath;
|
|
51
67
|
this.contextPath = path.basename(resolvedPath) === '.context'
|
|
52
68
|
? resolvedPath
|
|
53
69
|
: path.join(resolvedPath, '.context');
|
|
54
70
|
this.orchestrator = new workflow_1.PrevcOrchestrator(this.contextPath);
|
|
55
71
|
this.collaborationManager = new workflow_1.CollaborationManager();
|
|
72
|
+
this.runtimeStateService = new harness_1.HarnessRuntimeStateService({ repoPath: this.repoPath });
|
|
73
|
+
this.sensorCatalogService = new harness_1.HarnessSensorCatalogService({
|
|
74
|
+
repoPath: this.repoPath,
|
|
75
|
+
contextPath: this.contextPath,
|
|
76
|
+
});
|
|
77
|
+
this.sensorsService = new harness_1.HarnessSensorsService({ stateService: this.runtimeStateService });
|
|
78
|
+
this.taskContractsService = new harness_1.HarnessTaskContractsService({
|
|
79
|
+
repoPath: this.repoPath,
|
|
80
|
+
stateService: this.runtimeStateService,
|
|
81
|
+
});
|
|
82
|
+
this.policyService = new harness_1.HarnessPolicyService({ repoPath: this.repoPath });
|
|
83
|
+
this.workflowStateService = new harness_1.HarnessWorkflowStateService({ contextPath: this.contextPath });
|
|
56
84
|
this.deps = deps;
|
|
85
|
+
this.registerDefaultSensors();
|
|
57
86
|
}
|
|
58
87
|
/**
|
|
59
88
|
* Create a WorkflowService with the given repository path
|
|
@@ -71,6 +100,15 @@ class WorkflowService {
|
|
|
71
100
|
* Initialize a new workflow
|
|
72
101
|
*/
|
|
73
102
|
async init(options) {
|
|
103
|
+
await this.policyService.authorize({
|
|
104
|
+
tool: 'workflow',
|
|
105
|
+
action: 'init',
|
|
106
|
+
risk: options.archivePrevious ? 'high' : 'medium',
|
|
107
|
+
metadata: {
|
|
108
|
+
name: options.name,
|
|
109
|
+
scale: options.scale,
|
|
110
|
+
},
|
|
111
|
+
});
|
|
74
112
|
// Ensure .context directory exists
|
|
75
113
|
await fs.ensureDir(this.contextPath);
|
|
76
114
|
await fs.ensureDir(path.join(this.contextPath, 'workflow'));
|
|
@@ -104,6 +142,7 @@ class WorkflowService {
|
|
|
104
142
|
: undefined;
|
|
105
143
|
// Initialize workflow
|
|
106
144
|
const status = await this.orchestrator.initWorkflowWithScale(options.name, scale, settings, options.archivePrevious);
|
|
145
|
+
await this.ensureHarnessSession(options.name, options.description);
|
|
107
146
|
this.deps.ui?.displaySuccess(`Workflow PREVC initialized: ${options.name} (Scale: ${(0, workflow_1.getScaleName)(scale)})`);
|
|
108
147
|
return status;
|
|
109
148
|
}
|
|
@@ -125,6 +164,7 @@ class WorkflowService {
|
|
|
125
164
|
async getFormattedStatus() {
|
|
126
165
|
const summary = await this.getSummary();
|
|
127
166
|
const status = await this.getStatus();
|
|
167
|
+
const harness = await this.getHarnessStatus();
|
|
128
168
|
const lines = [];
|
|
129
169
|
lines.push(`📋 Workflow: ${summary.name}`);
|
|
130
170
|
lines.push(`📊 Scale: ${(0, workflow_1.getScaleName)(summary.scale)}`);
|
|
@@ -139,6 +179,29 @@ class WorkflowService {
|
|
|
139
179
|
const phaseName = workflow_1.PHASE_NAMES_PT[phase];
|
|
140
180
|
lines.push(` ${emoji} ${phase}: ${phaseName} - ${phaseStatus.status}`);
|
|
141
181
|
}
|
|
182
|
+
if (harness) {
|
|
183
|
+
const activeTask = harness.binding.activeTaskId
|
|
184
|
+
? harness.taskContracts.find((task) => task.id === harness.binding.activeTaskId) || null
|
|
185
|
+
: null;
|
|
186
|
+
lines.push('');
|
|
187
|
+
lines.push('Harness:');
|
|
188
|
+
lines.push(` 🧵 Session: ${harness.session.name} (${harness.session.status})`);
|
|
189
|
+
lines.push(` 📌 Tasks: ${harness.taskContracts.length}`);
|
|
190
|
+
lines.push(` 🤝 Handoffs: ${harness.handoffs.length}`);
|
|
191
|
+
lines.push(` 🧪 Sensors: ${harness.sensorRuns.length}`);
|
|
192
|
+
if (activeTask) {
|
|
193
|
+
lines.push(` 🎯 Active Task: ${activeTask.title} (${activeTask.status})`);
|
|
194
|
+
}
|
|
195
|
+
else if (harness.taskContracts.length > 0) {
|
|
196
|
+
lines.push(' 🎯 Active Task: none');
|
|
197
|
+
}
|
|
198
|
+
if (harness.completionCheck.blocked) {
|
|
199
|
+
lines.push(' 🚫 Completion checks blocked');
|
|
200
|
+
for (const reason of harness.completionCheck.reasons) {
|
|
201
|
+
lines.push(` - ${reason}`);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
142
205
|
if (summary.isComplete) {
|
|
143
206
|
lines.push('');
|
|
144
207
|
lines.push('✨ Workflow complete!');
|
|
@@ -150,11 +213,36 @@ class WorkflowService {
|
|
|
150
213
|
*/
|
|
151
214
|
async advance(outputs, options) {
|
|
152
215
|
const currentPhase = await this.orchestrator.getCurrentPhase();
|
|
216
|
+
if (!options?.force) {
|
|
217
|
+
const approval = await this.getApproval();
|
|
218
|
+
await this.policyService.authorize({
|
|
219
|
+
tool: 'workflow',
|
|
220
|
+
action: 'advance',
|
|
221
|
+
risk: 'high',
|
|
222
|
+
approval: approval?.plan_approved
|
|
223
|
+
? { approvedBy: approval.approved_by, note: approval.approval_notes }
|
|
224
|
+
: undefined,
|
|
225
|
+
});
|
|
226
|
+
const harnessStatus = await this.getHarnessStatus();
|
|
227
|
+
if (harnessStatus?.completionCheck.blocked) {
|
|
228
|
+
throw new HarnessWorkflowBlockedError('Harness completion checks blocked workflow advance.', harnessStatus.completionCheck.reasons, harnessStatus);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
153
231
|
const nextPhase = await this.orchestrator.completePhase(outputs, options);
|
|
232
|
+
const binding = await this.requireHarnessBinding();
|
|
154
233
|
if (nextPhase) {
|
|
234
|
+
const session = await this.runtimeStateService.checkpointSession(binding.sessionId, {
|
|
235
|
+
note: `Advanced workflow phase ${currentPhase} -> ${nextPhase}`,
|
|
236
|
+
data: { from: currentPhase, to: nextPhase, outputs },
|
|
237
|
+
});
|
|
238
|
+
binding.updatedAt = session.updatedAt;
|
|
239
|
+
await this.saveHarnessBinding(binding);
|
|
155
240
|
this.deps.ui?.displaySuccess(`Advanced from ${workflow_1.PHASE_NAMES_PT[currentPhase]} to ${workflow_1.PHASE_NAMES_PT[nextPhase]}`);
|
|
156
241
|
}
|
|
157
242
|
else {
|
|
243
|
+
const session = await this.runtimeStateService.completeSession(binding.sessionId, 'Workflow completed');
|
|
244
|
+
binding.updatedAt = session.updatedAt;
|
|
245
|
+
await this.saveHarnessBinding(binding);
|
|
158
246
|
this.deps.ui?.displaySuccess('Workflow completed!');
|
|
159
247
|
}
|
|
160
248
|
return nextPhase;
|
|
@@ -169,6 +257,14 @@ class WorkflowService {
|
|
|
169
257
|
* Set workflow settings
|
|
170
258
|
*/
|
|
171
259
|
async setSettings(settings) {
|
|
260
|
+
const isHighRisk = typeof settings.autonomous_mode === 'boolean' ||
|
|
261
|
+
typeof settings.require_approval === 'boolean';
|
|
262
|
+
await this.policyService.authorize({
|
|
263
|
+
tool: 'workflow',
|
|
264
|
+
action: 'setSettings',
|
|
265
|
+
risk: isHighRisk ? 'high' : 'medium',
|
|
266
|
+
metadata: settings,
|
|
267
|
+
});
|
|
172
268
|
return this.orchestrator.setSettings(settings);
|
|
173
269
|
}
|
|
174
270
|
/**
|
|
@@ -177,22 +273,48 @@ class WorkflowService {
|
|
|
177
273
|
async getSettings() {
|
|
178
274
|
return this.orchestrator.getSettings();
|
|
179
275
|
}
|
|
276
|
+
listAvailableSensors() {
|
|
277
|
+
return this.sensorsService.listSensors().map((sensor) => ({
|
|
278
|
+
id: sensor.id,
|
|
279
|
+
name: sensor.name,
|
|
280
|
+
description: sensor.description,
|
|
281
|
+
}));
|
|
282
|
+
}
|
|
180
283
|
/**
|
|
181
284
|
* Enable or disable autonomous mode
|
|
182
285
|
*/
|
|
183
286
|
async setAutonomousMode(enabled) {
|
|
287
|
+
await this.policyService.authorize({
|
|
288
|
+
tool: 'workflow',
|
|
289
|
+
action: 'setAutonomousMode',
|
|
290
|
+
risk: 'high',
|
|
291
|
+
metadata: { enabled },
|
|
292
|
+
});
|
|
184
293
|
return this.orchestrator.setSettings({ autonomous_mode: enabled });
|
|
185
294
|
}
|
|
186
295
|
/**
|
|
187
296
|
* Mark that a plan has been created/linked
|
|
188
297
|
*/
|
|
189
298
|
async markPlanCreated(planSlug) {
|
|
299
|
+
await this.policyService.authorize({
|
|
300
|
+
tool: 'workflow',
|
|
301
|
+
action: 'markPlanCreated',
|
|
302
|
+
risk: 'medium',
|
|
303
|
+
metadata: { planSlug },
|
|
304
|
+
});
|
|
190
305
|
return this.orchestrator.markPlanCreated(planSlug);
|
|
191
306
|
}
|
|
192
307
|
/**
|
|
193
308
|
* Approve the plan
|
|
194
309
|
*/
|
|
195
310
|
async approvePlan(approver, notes) {
|
|
311
|
+
await this.policyService.authorize({
|
|
312
|
+
tool: 'workflow',
|
|
313
|
+
action: 'approvePlan',
|
|
314
|
+
risk: 'high',
|
|
315
|
+
approval: { approvedBy: String(approver), note: notes },
|
|
316
|
+
metadata: { approver, notes },
|
|
317
|
+
});
|
|
196
318
|
return this.orchestrator.approvePlan(approver, notes);
|
|
197
319
|
}
|
|
198
320
|
/**
|
|
@@ -205,7 +327,40 @@ class WorkflowService {
|
|
|
205
327
|
* Perform a handoff between agents
|
|
206
328
|
*/
|
|
207
329
|
async handoff(from, to, artifacts) {
|
|
330
|
+
const handoffRisk = artifacts.some((artifactPath) => /secret|token|key|password/i.test(artifactPath))
|
|
331
|
+
? 'high'
|
|
332
|
+
: 'medium';
|
|
333
|
+
await this.policyService.authorize({
|
|
334
|
+
tool: 'workflow',
|
|
335
|
+
action: 'handoff',
|
|
336
|
+
paths: artifacts,
|
|
337
|
+
risk: handoffRisk,
|
|
338
|
+
metadata: {
|
|
339
|
+
from,
|
|
340
|
+
to,
|
|
341
|
+
artifactCount: artifacts.length,
|
|
342
|
+
},
|
|
343
|
+
});
|
|
208
344
|
await this.orchestrator.handoff(from, to, artifacts);
|
|
345
|
+
const binding = await this.requireHarnessBinding();
|
|
346
|
+
for (const artifactPath of artifacts) {
|
|
347
|
+
await this.runtimeStateService.addArtifact(binding.sessionId, {
|
|
348
|
+
name: artifactPath,
|
|
349
|
+
kind: 'file',
|
|
350
|
+
path: artifactPath,
|
|
351
|
+
metadata: { from, to, source: 'workflow.handoff' },
|
|
352
|
+
});
|
|
353
|
+
}
|
|
354
|
+
await this.taskContractsService.createHandoffContract({
|
|
355
|
+
from,
|
|
356
|
+
to,
|
|
357
|
+
sessionId: binding.sessionId,
|
|
358
|
+
taskId: binding.activeTaskId,
|
|
359
|
+
artifacts,
|
|
360
|
+
evidence: [],
|
|
361
|
+
});
|
|
362
|
+
binding.updatedAt = new Date().toISOString();
|
|
363
|
+
await this.saveHarnessBinding(binding);
|
|
209
364
|
this.deps.ui?.displaySuccess(`Handoff: ${from} → ${to}`);
|
|
210
365
|
}
|
|
211
366
|
/**
|
|
@@ -262,12 +417,24 @@ class WorkflowService {
|
|
|
262
417
|
* Update the current task
|
|
263
418
|
*/
|
|
264
419
|
async updateTask(task) {
|
|
420
|
+
await this.policyService.authorize({
|
|
421
|
+
tool: 'workflow',
|
|
422
|
+
action: 'updateTask',
|
|
423
|
+
risk: 'medium',
|
|
424
|
+
metadata: { task },
|
|
425
|
+
});
|
|
265
426
|
await this.orchestrator.updateCurrentTask(task);
|
|
266
427
|
}
|
|
267
428
|
/**
|
|
268
429
|
* Start a role in the current phase
|
|
269
430
|
*/
|
|
270
431
|
async startRole(role) {
|
|
432
|
+
await this.policyService.authorize({
|
|
433
|
+
tool: 'workflow',
|
|
434
|
+
action: 'startRole',
|
|
435
|
+
risk: 'medium',
|
|
436
|
+
metadata: { role },
|
|
437
|
+
});
|
|
271
438
|
await this.orchestrator.startRole(role);
|
|
272
439
|
this.deps.ui?.displaySuccess(`Started role: ${workflow_1.ROLE_DISPLAY_NAMES[role]}`);
|
|
273
440
|
}
|
|
@@ -275,9 +442,257 @@ class WorkflowService {
|
|
|
275
442
|
* Complete a role's work
|
|
276
443
|
*/
|
|
277
444
|
async completeRole(role, outputs) {
|
|
445
|
+
await this.policyService.authorize({
|
|
446
|
+
tool: 'workflow',
|
|
447
|
+
action: 'completeRole',
|
|
448
|
+
paths: outputs,
|
|
449
|
+
risk: outputs.some((output) => /secret|token|key|password/i.test(output)) ? 'high' : 'medium',
|
|
450
|
+
metadata: {
|
|
451
|
+
role,
|
|
452
|
+
outputCount: outputs.length,
|
|
453
|
+
},
|
|
454
|
+
});
|
|
278
455
|
await this.orchestrator.completeRole(role, outputs);
|
|
279
456
|
this.deps.ui?.displaySuccess(`Completed role: ${workflow_1.ROLE_DISPLAY_NAMES[role]}`);
|
|
280
457
|
}
|
|
458
|
+
async getHarnessStatus() {
|
|
459
|
+
if (!(await this.hasWorkflow())) {
|
|
460
|
+
return null;
|
|
461
|
+
}
|
|
462
|
+
const summary = await this.getSummary();
|
|
463
|
+
const binding = await this.ensureHarnessSession(summary.name);
|
|
464
|
+
const session = await this.runtimeStateService.getSession(binding.sessionId);
|
|
465
|
+
const allSensorRuns = await this.sensorsService.getSessionSensorRuns(binding.sessionId);
|
|
466
|
+
const policyRules = await this.policyService.listRules();
|
|
467
|
+
const latestRuns = new Map();
|
|
468
|
+
for (const run of allSensorRuns) {
|
|
469
|
+
const current = latestRuns.get(run.sensorId);
|
|
470
|
+
if (!current || current.createdAt < run.createdAt) {
|
|
471
|
+
latestRuns.set(run.sensorId, run);
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
const sensorRuns = Array.from(latestRuns.values()).sort((a, b) => a.sensorId.localeCompare(b.sensorId));
|
|
475
|
+
const taskContracts = (await this.taskContractsService.listTaskContracts())
|
|
476
|
+
.filter((contract) => contract.sessionId === binding.sessionId);
|
|
477
|
+
const handoffs = (await this.taskContractsService.listHandoffContracts())
|
|
478
|
+
.filter((handoff) => handoff.sessionId === binding.sessionId);
|
|
479
|
+
const activeTask = binding.activeTaskId
|
|
480
|
+
? taskContracts.find((contract) => contract.id === binding.activeTaskId) ?? null
|
|
481
|
+
: null;
|
|
482
|
+
const taskCompletion = activeTask
|
|
483
|
+
? await this.taskContractsService.evaluateTaskCompletion(activeTask.id, binding.sessionId)
|
|
484
|
+
: null;
|
|
485
|
+
const backpressure = this.sensorsService.evaluateBackpressure(sensorRuns, { requireEvidence: true });
|
|
486
|
+
const reasons = [
|
|
487
|
+
...backpressure.reasons,
|
|
488
|
+
...(taskCompletion?.blockingFindings || []),
|
|
489
|
+
];
|
|
490
|
+
return {
|
|
491
|
+
binding,
|
|
492
|
+
session,
|
|
493
|
+
availableSensors: this.listAvailableSensors(),
|
|
494
|
+
sensorRuns,
|
|
495
|
+
taskContracts,
|
|
496
|
+
handoffs,
|
|
497
|
+
policyRules: policyRules.length,
|
|
498
|
+
completionCheck: {
|
|
499
|
+
blocked: reasons.length > 0,
|
|
500
|
+
reasons,
|
|
501
|
+
taskCompletion: taskCompletion ? {
|
|
502
|
+
canComplete: taskCompletion.canComplete,
|
|
503
|
+
missingSensors: taskCompletion.missingSensors,
|
|
504
|
+
missingArtifacts: taskCompletion.missingArtifacts,
|
|
505
|
+
blockingFindings: taskCompletion.blockingFindings,
|
|
506
|
+
} : null,
|
|
507
|
+
},
|
|
508
|
+
};
|
|
509
|
+
}
|
|
510
|
+
async checkpointHarnessSession(note, data, artifactIds, pause) {
|
|
511
|
+
const binding = await this.requireHarnessBinding();
|
|
512
|
+
await this.policyService.authorize({
|
|
513
|
+
tool: 'workflow',
|
|
514
|
+
action: 'checkpoint',
|
|
515
|
+
risk: pause ? 'high' : 'medium',
|
|
516
|
+
metadata: {
|
|
517
|
+
note,
|
|
518
|
+
pause: Boolean(pause),
|
|
519
|
+
artifactCount: artifactIds?.length ?? 0,
|
|
520
|
+
},
|
|
521
|
+
});
|
|
522
|
+
const session = await this.runtimeStateService.checkpointSession(binding.sessionId, {
|
|
523
|
+
note,
|
|
524
|
+
data,
|
|
525
|
+
artifactIds,
|
|
526
|
+
pause,
|
|
527
|
+
});
|
|
528
|
+
binding.updatedAt = session.updatedAt;
|
|
529
|
+
await this.saveHarnessBinding(binding);
|
|
530
|
+
return { binding, session };
|
|
531
|
+
}
|
|
532
|
+
async recordHarnessArtifact(input) {
|
|
533
|
+
const binding = await this.requireHarnessBinding();
|
|
534
|
+
await this.policyService.authorize({
|
|
535
|
+
tool: 'workflow',
|
|
536
|
+
action: 'recordArtifact',
|
|
537
|
+
paths: input.path ? [input.path] : [input.name],
|
|
538
|
+
risk: input.path?.includes('secret') ? 'critical' : 'medium',
|
|
539
|
+
metadata: input.metadata,
|
|
540
|
+
});
|
|
541
|
+
const artifact = await this.runtimeStateService.addArtifact(binding.sessionId, input);
|
|
542
|
+
binding.updatedAt = artifact.createdAt;
|
|
543
|
+
await this.saveHarnessBinding(binding);
|
|
544
|
+
return artifact;
|
|
545
|
+
}
|
|
546
|
+
async defineHarnessTask(input) {
|
|
547
|
+
const binding = await this.requireHarnessBinding();
|
|
548
|
+
await this.policyService.authorize({
|
|
549
|
+
tool: 'workflow',
|
|
550
|
+
action: 'defineTask',
|
|
551
|
+
risk: input.requiredSensors?.includes('deploy') ? 'high' : 'medium',
|
|
552
|
+
metadata: {
|
|
553
|
+
...input.metadata,
|
|
554
|
+
title: input.title,
|
|
555
|
+
},
|
|
556
|
+
});
|
|
557
|
+
const contract = await this.taskContractsService.createTaskContract({
|
|
558
|
+
...input,
|
|
559
|
+
sessionId: binding.sessionId,
|
|
560
|
+
status: 'ready',
|
|
561
|
+
});
|
|
562
|
+
binding.activeTaskId = contract.id;
|
|
563
|
+
binding.updatedAt = contract.updatedAt;
|
|
564
|
+
await this.saveHarnessBinding(binding);
|
|
565
|
+
return contract;
|
|
566
|
+
}
|
|
567
|
+
async runHarnessSensors(sensorIds, metadata) {
|
|
568
|
+
const binding = await this.requireHarnessBinding();
|
|
569
|
+
const runs = [];
|
|
570
|
+
for (const sensorId of sensorIds) {
|
|
571
|
+
await this.policyService.authorize({
|
|
572
|
+
tool: 'workflow',
|
|
573
|
+
action: 'runSensors',
|
|
574
|
+
risk: sensorId === 'deploy' ? 'high' : 'medium',
|
|
575
|
+
metadata,
|
|
576
|
+
});
|
|
577
|
+
runs.push(await this.sensorsService.runSensor(sensorId, {
|
|
578
|
+
sessionId: binding.sessionId,
|
|
579
|
+
contractId: binding.activeTaskId,
|
|
580
|
+
metadata,
|
|
581
|
+
}));
|
|
582
|
+
}
|
|
583
|
+
return {
|
|
584
|
+
runs,
|
|
585
|
+
backpressure: this.sensorsService.evaluateBackpressure(runs, { requireEvidence: true }),
|
|
586
|
+
};
|
|
587
|
+
}
|
|
588
|
+
async ensureHarnessSession(workflowName, description) {
|
|
589
|
+
const existing = await this.loadHarnessBinding();
|
|
590
|
+
if (existing && existing.workflowName === workflowName) {
|
|
591
|
+
try {
|
|
592
|
+
await this.runtimeStateService.getSession(existing.sessionId);
|
|
593
|
+
return existing;
|
|
594
|
+
}
|
|
595
|
+
catch {
|
|
596
|
+
// Session was removed or became unreadable. Recreate below.
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
const session = await this.runtimeStateService.createSession({
|
|
600
|
+
name: workflowName,
|
|
601
|
+
metadata: {
|
|
602
|
+
workflow: true,
|
|
603
|
+
description,
|
|
604
|
+
},
|
|
605
|
+
});
|
|
606
|
+
const binding = {
|
|
607
|
+
workflowName,
|
|
608
|
+
sessionId: session.id,
|
|
609
|
+
createdAt: new Date().toISOString(),
|
|
610
|
+
updatedAt: session.updatedAt,
|
|
611
|
+
};
|
|
612
|
+
await this.saveHarnessBinding(binding);
|
|
613
|
+
return binding;
|
|
614
|
+
}
|
|
615
|
+
async requireHarnessBinding() {
|
|
616
|
+
const summary = await this.getSummary();
|
|
617
|
+
return this.ensureHarnessSession(summary.name);
|
|
618
|
+
}
|
|
619
|
+
async loadHarnessBinding() {
|
|
620
|
+
return this.workflowStateService.getBinding();
|
|
621
|
+
}
|
|
622
|
+
async saveHarnessBinding(binding) {
|
|
623
|
+
await this.workflowStateService.saveBinding(binding);
|
|
624
|
+
}
|
|
625
|
+
registerDefaultSensors() {
|
|
626
|
+
const definitions = this.sensorCatalogService.resolveEffectiveSensorsSync();
|
|
627
|
+
for (const definition of definitions) {
|
|
628
|
+
if (this.sensorsService.getSensor(definition.id)) {
|
|
629
|
+
continue;
|
|
630
|
+
}
|
|
631
|
+
this.sensorsService.registerSensor({
|
|
632
|
+
id: definition.id,
|
|
633
|
+
name: definition.name,
|
|
634
|
+
severity: definition.severity,
|
|
635
|
+
blocking: definition.severity === 'critical',
|
|
636
|
+
execute: async () => {
|
|
637
|
+
if (definition.script) {
|
|
638
|
+
const hasScript = await this.hasPackageScript(definition.script);
|
|
639
|
+
if (!hasScript) {
|
|
640
|
+
return {
|
|
641
|
+
status: definition.severity === 'warning' ? 'skipped' : 'blocked',
|
|
642
|
+
summary: `Script not available: ${definition.script}`,
|
|
643
|
+
evidence: [`Missing package.json script: ${definition.script}`],
|
|
644
|
+
};
|
|
645
|
+
}
|
|
646
|
+
}
|
|
647
|
+
return this.executeShellSensor(definition.command, definition.name);
|
|
648
|
+
},
|
|
649
|
+
});
|
|
650
|
+
}
|
|
651
|
+
}
|
|
652
|
+
async hasPackageScript(scriptName) {
|
|
653
|
+
const packageJsonPath = path.join(this.repoPath, 'package.json');
|
|
654
|
+
if (!(await fs.pathExists(packageJsonPath))) {
|
|
655
|
+
return false;
|
|
656
|
+
}
|
|
657
|
+
const packageJson = await fs.readJson(packageJsonPath);
|
|
658
|
+
return Boolean(packageJson.scripts?.[scriptName]);
|
|
659
|
+
}
|
|
660
|
+
async executeShellSensor(command, name) {
|
|
661
|
+
try {
|
|
662
|
+
const { stdout, stderr } = await exec(command, {
|
|
663
|
+
cwd: this.repoPath,
|
|
664
|
+
timeout: 300000,
|
|
665
|
+
});
|
|
666
|
+
return {
|
|
667
|
+
status: 'passed',
|
|
668
|
+
summary: `${name} passed`,
|
|
669
|
+
evidence: [this.trimEvidence(stdout), this.trimEvidence(stderr)].filter(Boolean),
|
|
670
|
+
output: {
|
|
671
|
+
command,
|
|
672
|
+
},
|
|
673
|
+
};
|
|
674
|
+
}
|
|
675
|
+
catch (error) {
|
|
676
|
+
return {
|
|
677
|
+
status: 'failed',
|
|
678
|
+
summary: `${name} failed`,
|
|
679
|
+
evidence: [
|
|
680
|
+
this.trimEvidence(error?.stdout),
|
|
681
|
+
this.trimEvidence(error?.stderr || error?.message),
|
|
682
|
+
].filter(Boolean),
|
|
683
|
+
details: {
|
|
684
|
+
command,
|
|
685
|
+
exitCode: typeof error?.code === 'number' ? error.code : undefined,
|
|
686
|
+
},
|
|
687
|
+
};
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
trimEvidence(value, maxLength = 2000) {
|
|
691
|
+
if (!value) {
|
|
692
|
+
return null;
|
|
693
|
+
}
|
|
694
|
+
return value.length > maxLength ? `${value.slice(0, maxLength)}\n...[truncated]` : value;
|
|
695
|
+
}
|
|
281
696
|
}
|
|
282
697
|
exports.WorkflowService = WorkflowService;
|
|
283
698
|
//# sourceMappingURL=workflowService.js.map
|