@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
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Harness Skills Service
|
|
4
|
+
*
|
|
5
|
+
* Transport-agnostic skill discovery, export, and fill orchestration logic.
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
+
var ownKeys = function(o) {
|
|
25
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
+
var ar = [];
|
|
27
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
+
return ar;
|
|
29
|
+
};
|
|
30
|
+
return ownKeys(o);
|
|
31
|
+
};
|
|
32
|
+
return function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
})();
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
exports.HarnessSkillsService = void 0;
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
const fs = __importStar(require("fs-extra"));
|
|
44
|
+
const version_1 = require("../../version");
|
|
45
|
+
const workflow_1 = require("../../workflow");
|
|
46
|
+
const contextTools_1 = require("./contextTools");
|
|
47
|
+
const shared_1 = require("../shared");
|
|
48
|
+
const frontMatter_1 = require("../../utils/frontMatter");
|
|
49
|
+
function getSkillFillInstructions(skillSlug) {
|
|
50
|
+
const instructions = {
|
|
51
|
+
'commit-message': `Fill this skill with:
|
|
52
|
+
- Commit message format conventions for this project
|
|
53
|
+
- Examples of good commit messages from the codebase
|
|
54
|
+
- Branch naming conventions if applicable
|
|
55
|
+
- Semantic versioning guidelines`,
|
|
56
|
+
'pr-review': `Fill this skill with:
|
|
57
|
+
- PR review checklist specific to this codebase
|
|
58
|
+
- Code quality standards to check
|
|
59
|
+
- Testing requirements before merge
|
|
60
|
+
- Documentation expectations`,
|
|
61
|
+
'code-review': `Fill this skill with:
|
|
62
|
+
- Code review guidelines for this project
|
|
63
|
+
- Common patterns to look for
|
|
64
|
+
- Security and performance considerations
|
|
65
|
+
- Style and convention checks`,
|
|
66
|
+
'test-generation': `Fill this skill with:
|
|
67
|
+
- Testing framework and conventions used
|
|
68
|
+
- Test file organization patterns
|
|
69
|
+
- Mocking strategies for this codebase
|
|
70
|
+
- Coverage requirements`,
|
|
71
|
+
'documentation': `Fill this skill with:
|
|
72
|
+
- Documentation standards for this project
|
|
73
|
+
- JSDoc/TSDoc conventions
|
|
74
|
+
- README structure expectations
|
|
75
|
+
- API documentation guidelines`,
|
|
76
|
+
'refactoring': `Fill this skill with:
|
|
77
|
+
- Refactoring patterns common in this codebase
|
|
78
|
+
- Code smell detection guidelines
|
|
79
|
+
- Safe refactoring procedures
|
|
80
|
+
- Testing requirements after refactoring`,
|
|
81
|
+
'bug-investigation': `Fill this skill with:
|
|
82
|
+
- Debugging workflow for this codebase
|
|
83
|
+
- Common bug patterns and their fixes
|
|
84
|
+
- Logging and error handling conventions
|
|
85
|
+
- Test verification steps`,
|
|
86
|
+
'feature-breakdown': `Fill this skill with:
|
|
87
|
+
- Feature decomposition approach
|
|
88
|
+
- Task estimation guidelines
|
|
89
|
+
- Dependency identification process
|
|
90
|
+
- Integration points to consider`,
|
|
91
|
+
'api-design': `Fill this skill with:
|
|
92
|
+
- API design patterns used in this project
|
|
93
|
+
- Endpoint naming conventions
|
|
94
|
+
- Request/response format standards
|
|
95
|
+
- Versioning and deprecation policies`,
|
|
96
|
+
'security-audit': `Fill this skill with:
|
|
97
|
+
- Security checklist for this codebase
|
|
98
|
+
- Common vulnerabilities to check
|
|
99
|
+
- Authentication/authorization patterns
|
|
100
|
+
- Data validation requirements`,
|
|
101
|
+
};
|
|
102
|
+
return `${instructions[skillSlug] || `Fill this skill with project-specific content for ${skillSlug}:
|
|
103
|
+
- Identify relevant patterns from the codebase
|
|
104
|
+
- Include specific examples from the project
|
|
105
|
+
- Add conventions and best practices
|
|
106
|
+
- Reference important files and components`}
|
|
107
|
+
|
|
108
|
+
Then apply these writing constraints:
|
|
109
|
+
- Keep activation language in the frontmatter description instead of adding a "When to Use" section in the body
|
|
110
|
+
- Write the body in imperative form
|
|
111
|
+
- Keep the body concise and split large details into \`references/\` only when needed
|
|
112
|
+
- Add \`scripts/\` or \`assets/\` only if they materially reduce repeated work
|
|
113
|
+
- Do not create extra docs such as README, quick-reference, or changelog files inside the skill folder`;
|
|
114
|
+
}
|
|
115
|
+
function buildSkillFillPrompt(skills, semanticContext) {
|
|
116
|
+
const lines = [];
|
|
117
|
+
lines.push('# Skill Fill Instructions', '', 'You MUST fill each of the following skill files with codebase-specific content.', '');
|
|
118
|
+
if (semanticContext) {
|
|
119
|
+
lines.push('## Codebase Context', '', 'Use this semantic context to understand the codebase:', '', '```');
|
|
120
|
+
lines.push(semanticContext.length > 6000 ? semanticContext.substring(0, 6000) + '\n...(truncated)' : semanticContext);
|
|
121
|
+
lines.push('```', '');
|
|
122
|
+
}
|
|
123
|
+
lines.push('## Skills to Fill', '');
|
|
124
|
+
for (const skill of skills) {
|
|
125
|
+
lines.push(`### ${skill.skillName} (${skill.skillSlug})`);
|
|
126
|
+
lines.push(`**Path:** \`${skill.skillPath}\``);
|
|
127
|
+
if (skill.description)
|
|
128
|
+
lines.push(`**Description:** ${skill.description}`);
|
|
129
|
+
lines.push('', '**Fill Instructions:**', skill.instructions, '');
|
|
130
|
+
}
|
|
131
|
+
lines.push('## Action Required', '', 'For each skill listed above:', '1. Read the current skill template', '2. Generate codebase-specific content based on the instructions and context', '3. Write the filled content to the skill file', '', 'Each skill should be personalized with:', '- Specific examples from this codebase', '- Project-specific conventions and patterns', '- References to relevant files and components', '- Concise instructions written in imperative form', '- Progressive disclosure: keep SKILL.md lean and move large details to references only when necessary', '', 'Hard requirements:', '- Preserve the existing internal scaffold frontmatter', '- Do not add a "When to Use" section in the body; improve the description if trigger wording is missing', '- Avoid creating extra documentation files inside the skill folder', '', 'DO NOT leave placeholder text. Each skill must have meaningful, project-specific content.');
|
|
132
|
+
return lines.join('\n');
|
|
133
|
+
}
|
|
134
|
+
class HarnessSkillsService {
|
|
135
|
+
constructor(options) {
|
|
136
|
+
this.options = options;
|
|
137
|
+
}
|
|
138
|
+
get repoPath() {
|
|
139
|
+
return this.options.repoPath || process.cwd();
|
|
140
|
+
}
|
|
141
|
+
getRegistry() {
|
|
142
|
+
const { createSkillRegistry, BUILT_IN_SKILLS } = require('../../workflow/skills');
|
|
143
|
+
return { createSkillRegistry, BUILT_IN_SKILLS };
|
|
144
|
+
}
|
|
145
|
+
async list(includeContent) {
|
|
146
|
+
const { createSkillRegistry } = this.getRegistry();
|
|
147
|
+
const registry = createSkillRegistry(this.repoPath);
|
|
148
|
+
const discovered = await registry.discoverAll();
|
|
149
|
+
const format = (skill) => ({
|
|
150
|
+
slug: skill.slug,
|
|
151
|
+
name: skill.metadata.name,
|
|
152
|
+
description: skill.metadata.description,
|
|
153
|
+
phases: skill.metadata.phases || [],
|
|
154
|
+
isBuiltIn: skill.isBuiltIn,
|
|
155
|
+
...(includeContent ? { content: skill.content } : {}),
|
|
156
|
+
});
|
|
157
|
+
return {
|
|
158
|
+
success: true,
|
|
159
|
+
totalSkills: discovered.all.length,
|
|
160
|
+
builtInCount: discovered.builtIn.length,
|
|
161
|
+
customCount: discovered.custom.length,
|
|
162
|
+
skills: {
|
|
163
|
+
builtIn: discovered.builtIn.map(format),
|
|
164
|
+
custom: discovered.custom.map(format),
|
|
165
|
+
},
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
async getContent(skillSlug) {
|
|
169
|
+
const { createSkillRegistry, BUILT_IN_SKILLS } = this.getRegistry();
|
|
170
|
+
const registry = createSkillRegistry(this.repoPath);
|
|
171
|
+
const content = await registry.getSkillContent(skillSlug);
|
|
172
|
+
if (!content) {
|
|
173
|
+
return {
|
|
174
|
+
success: false,
|
|
175
|
+
error: `Skill not found: ${skillSlug}`,
|
|
176
|
+
availableSkills: BUILT_IN_SKILLS,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
const skill = await registry.getSkillMetadata(skillSlug);
|
|
180
|
+
return {
|
|
181
|
+
success: true,
|
|
182
|
+
skill: {
|
|
183
|
+
slug: skillSlug,
|
|
184
|
+
name: skill?.metadata.name,
|
|
185
|
+
description: skill?.metadata.description,
|
|
186
|
+
phases: skill?.metadata.phases,
|
|
187
|
+
isBuiltIn: skill?.isBuiltIn,
|
|
188
|
+
},
|
|
189
|
+
content,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
async getForPhase(phase) {
|
|
193
|
+
const { createSkillRegistry } = this.getRegistry();
|
|
194
|
+
const registry = createSkillRegistry(this.repoPath);
|
|
195
|
+
const skills = await registry.getSkillsForPhase(phase);
|
|
196
|
+
return {
|
|
197
|
+
success: true,
|
|
198
|
+
phase,
|
|
199
|
+
phaseName: workflow_1.PHASE_NAMES_EN[phase],
|
|
200
|
+
skills: skills.map((s) => ({
|
|
201
|
+
slug: s.slug,
|
|
202
|
+
name: s.metadata.name,
|
|
203
|
+
description: s.metadata.description,
|
|
204
|
+
isBuiltIn: s.isBuiltIn,
|
|
205
|
+
})),
|
|
206
|
+
count: skills.length,
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
async scaffold(params) {
|
|
210
|
+
const { createSkillGenerator } = require('../../generators/skills');
|
|
211
|
+
const generator = createSkillGenerator({ repoPath: this.repoPath });
|
|
212
|
+
const result = await generator.generate({ skills: params.skills, force: params.includeBuiltIn });
|
|
213
|
+
return {
|
|
214
|
+
success: true,
|
|
215
|
+
skillsDir: result.skillsDir,
|
|
216
|
+
generated: result.generatedSkills,
|
|
217
|
+
skipped: result.skippedSkills,
|
|
218
|
+
indexPath: result.indexPath,
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
async export(params) {
|
|
222
|
+
const { SkillExportService } = require('../export/skillExportService');
|
|
223
|
+
const exportService = new SkillExportService({
|
|
224
|
+
ui: shared_1.minimalUI,
|
|
225
|
+
t: shared_1.mockTranslate,
|
|
226
|
+
version: version_1.VERSION,
|
|
227
|
+
});
|
|
228
|
+
const result = await exportService.run(this.repoPath, {
|
|
229
|
+
preset: params.preset,
|
|
230
|
+
includeBuiltIn: params.includeBuiltIn,
|
|
231
|
+
force: false,
|
|
232
|
+
});
|
|
233
|
+
return {
|
|
234
|
+
success: result.filesCreated > 0,
|
|
235
|
+
targets: result.targets,
|
|
236
|
+
skillsExported: result.skillsExported,
|
|
237
|
+
filesCreated: result.filesCreated,
|
|
238
|
+
filesSkipped: result.filesSkipped,
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
async fill(params) {
|
|
242
|
+
const { createSkillRegistry } = this.getRegistry();
|
|
243
|
+
const registry = createSkillRegistry(this.repoPath);
|
|
244
|
+
const skillsDir = path.join(this.repoPath, '.context', 'skills');
|
|
245
|
+
if (!await fs.pathExists(skillsDir)) {
|
|
246
|
+
return {
|
|
247
|
+
success: false,
|
|
248
|
+
error: 'Skills directory does not exist. Run skill({ action: "scaffold" }) first.',
|
|
249
|
+
skillsDir,
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
const discovered = await registry.discoverAll();
|
|
253
|
+
let skillsToFill = discovered.all;
|
|
254
|
+
if (params.skills && params.skills.length > 0) {
|
|
255
|
+
skillsToFill = skillsToFill.filter((s) => params.skills.includes(s.slug));
|
|
256
|
+
}
|
|
257
|
+
if (!params.includeBuiltIn) {
|
|
258
|
+
const filtered = await Promise.all(skillsToFill.map(async (skill) => ({
|
|
259
|
+
skill,
|
|
260
|
+
shouldFill: !await fs.pathExists(skill.path) || await (0, frontMatter_1.needsFill)(skill.path),
|
|
261
|
+
})));
|
|
262
|
+
skillsToFill = filtered.filter(entry => entry.shouldFill).map(entry => entry.skill);
|
|
263
|
+
}
|
|
264
|
+
if (skillsToFill.length === 0) {
|
|
265
|
+
return {
|
|
266
|
+
success: true,
|
|
267
|
+
message: 'No skills need filling. Use includeBuiltIn: true to refill existing skills.',
|
|
268
|
+
skillsDir,
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
let semanticContext;
|
|
272
|
+
try {
|
|
273
|
+
semanticContext = await (0, contextTools_1.getOrBuildContext)(this.repoPath);
|
|
274
|
+
}
|
|
275
|
+
catch {
|
|
276
|
+
semanticContext = undefined;
|
|
277
|
+
}
|
|
278
|
+
const fillInstructions = skillsToFill.map((skill) => ({
|
|
279
|
+
skillPath: skill.path,
|
|
280
|
+
skillSlug: skill.slug,
|
|
281
|
+
skillName: skill.metadata.name || skill.slug,
|
|
282
|
+
description: skill.metadata.description || '',
|
|
283
|
+
isBuiltIn: skill.isBuiltIn,
|
|
284
|
+
instructions: getSkillFillInstructions(skill.slug),
|
|
285
|
+
}));
|
|
286
|
+
return {
|
|
287
|
+
success: true,
|
|
288
|
+
skillsToFill: fillInstructions,
|
|
289
|
+
semanticContext,
|
|
290
|
+
fillPrompt: buildSkillFillPrompt(fillInstructions, semanticContext),
|
|
291
|
+
instructions: 'IMPORTANT: You MUST now fill each skill file using the semantic context and fill instructions provided. Write the content to each skillPath.',
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
exports.HarnessSkillsService = HarnessSkillsService;
|
|
296
|
+
//# sourceMappingURL=skillsService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skillsService.js","sourceRoot":"","sources":["../../../src/services/harness/skillsService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Harness Task Contracts Service
|
|
3
|
+
*
|
|
4
|
+
* Persists structured task and handoff contracts and evaluates whether a task
|
|
5
|
+
* can be completed based on required sensors and artifacts.
|
|
6
|
+
*/
|
|
7
|
+
import type { HarnessArtifactRecord, HarnessRuntimeStatePort } from './runtimeStateService';
|
|
8
|
+
import type { HarnessSensorRun } from './sensorsService';
|
|
9
|
+
export type HarnessTaskContractStatus = 'draft' | 'ready' | 'in_progress' | 'blocked' | 'completed' | 'failed';
|
|
10
|
+
export interface HarnessTaskContract {
|
|
11
|
+
id: string;
|
|
12
|
+
title: string;
|
|
13
|
+
description?: string;
|
|
14
|
+
sessionId?: string;
|
|
15
|
+
owner?: string;
|
|
16
|
+
status: HarnessTaskContractStatus;
|
|
17
|
+
inputs: string[];
|
|
18
|
+
expectedOutputs: string[];
|
|
19
|
+
acceptanceCriteria: string[];
|
|
20
|
+
requiredSensors: string[];
|
|
21
|
+
requiredArtifacts: string[];
|
|
22
|
+
createdAt: string;
|
|
23
|
+
updatedAt: string;
|
|
24
|
+
metadata?: Record<string, unknown>;
|
|
25
|
+
}
|
|
26
|
+
export interface HarnessHandoffContract {
|
|
27
|
+
id: string;
|
|
28
|
+
from: string;
|
|
29
|
+
to: string;
|
|
30
|
+
sessionId?: string;
|
|
31
|
+
taskId?: string;
|
|
32
|
+
artifacts: string[];
|
|
33
|
+
evidence: string[];
|
|
34
|
+
createdAt: string;
|
|
35
|
+
metadata?: Record<string, unknown>;
|
|
36
|
+
}
|
|
37
|
+
export interface HarnessTaskCompletionResult {
|
|
38
|
+
taskId: string;
|
|
39
|
+
sessionId?: string;
|
|
40
|
+
canComplete: boolean;
|
|
41
|
+
missingSensors: string[];
|
|
42
|
+
missingArtifacts: string[];
|
|
43
|
+
blockingFindings: string[];
|
|
44
|
+
matchedSensorRuns: HarnessSensorRun[];
|
|
45
|
+
matchedArtifacts: HarnessArtifactRecord[];
|
|
46
|
+
}
|
|
47
|
+
export interface HarnessTaskContractsServiceOptions {
|
|
48
|
+
repoPath: string;
|
|
49
|
+
stateService: HarnessRuntimeStatePort;
|
|
50
|
+
}
|
|
51
|
+
export declare class HarnessTaskContractsService {
|
|
52
|
+
private readonly options;
|
|
53
|
+
constructor(options: HarnessTaskContractsServiceOptions);
|
|
54
|
+
private get contractsPath();
|
|
55
|
+
private get tasksPath();
|
|
56
|
+
private get handoffsPath();
|
|
57
|
+
private ensureLayout;
|
|
58
|
+
private taskFile;
|
|
59
|
+
private handoffFile;
|
|
60
|
+
createTaskContract(input: {
|
|
61
|
+
title: string;
|
|
62
|
+
description?: string;
|
|
63
|
+
sessionId?: string;
|
|
64
|
+
owner?: string;
|
|
65
|
+
inputs?: string[];
|
|
66
|
+
expectedOutputs?: string[];
|
|
67
|
+
acceptanceCriteria?: string[];
|
|
68
|
+
requiredSensors?: string[];
|
|
69
|
+
requiredArtifacts?: string[];
|
|
70
|
+
status?: HarnessTaskContractStatus;
|
|
71
|
+
metadata?: Record<string, unknown>;
|
|
72
|
+
}): Promise<HarnessTaskContract>;
|
|
73
|
+
listTaskContracts(): Promise<HarnessTaskContract[]>;
|
|
74
|
+
getTaskContract(taskId: string): Promise<HarnessTaskContract | null>;
|
|
75
|
+
updateTaskContract(taskId: string, patch: Partial<Omit<HarnessTaskContract, 'id' | 'createdAt' | 'updatedAt'>>): Promise<HarnessTaskContract>;
|
|
76
|
+
createHandoffContract(input: {
|
|
77
|
+
from: string;
|
|
78
|
+
to: string;
|
|
79
|
+
sessionId?: string;
|
|
80
|
+
taskId?: string;
|
|
81
|
+
artifacts?: string[];
|
|
82
|
+
evidence?: string[];
|
|
83
|
+
metadata?: Record<string, unknown>;
|
|
84
|
+
}): Promise<HarnessHandoffContract>;
|
|
85
|
+
listHandoffContracts(): Promise<HarnessHandoffContract[]>;
|
|
86
|
+
evaluateTaskCompletion(taskId: string, sessionId?: string): Promise<HarnessTaskCompletionResult>;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=taskContractsService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taskContractsService.d.ts","sourceRoot":"","sources":["../../../src/services/harness/taskContractsService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Harness Task Contracts Service
|
|
4
|
+
*
|
|
5
|
+
* Persists structured task and handoff contracts and evaluates whether a task
|
|
6
|
+
* can be completed based on required sensors and artifacts.
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.HarnessTaskContractsService = void 0;
|
|
43
|
+
const fs = __importStar(require("fs-extra"));
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
const crypto_1 = require("crypto");
|
|
46
|
+
class HarnessTaskContractsService {
|
|
47
|
+
constructor(options) {
|
|
48
|
+
this.options = options;
|
|
49
|
+
}
|
|
50
|
+
get contractsPath() {
|
|
51
|
+
return path.join(path.resolve(this.options.repoPath), '.context', 'harness', 'contracts');
|
|
52
|
+
}
|
|
53
|
+
get tasksPath() {
|
|
54
|
+
return path.join(this.contractsPath, 'tasks');
|
|
55
|
+
}
|
|
56
|
+
get handoffsPath() {
|
|
57
|
+
return path.join(this.contractsPath, 'handoffs');
|
|
58
|
+
}
|
|
59
|
+
async ensureLayout() {
|
|
60
|
+
await Promise.all([
|
|
61
|
+
fs.ensureDir(this.tasksPath),
|
|
62
|
+
fs.ensureDir(this.handoffsPath),
|
|
63
|
+
]);
|
|
64
|
+
}
|
|
65
|
+
async taskFile(taskId) {
|
|
66
|
+
await this.ensureLayout();
|
|
67
|
+
return path.join(this.tasksPath, `${taskId}.json`);
|
|
68
|
+
}
|
|
69
|
+
async handoffFile(handoffId) {
|
|
70
|
+
await this.ensureLayout();
|
|
71
|
+
return path.join(this.handoffsPath, `${handoffId}.json`);
|
|
72
|
+
}
|
|
73
|
+
async createTaskContract(input) {
|
|
74
|
+
const now = new Date().toISOString();
|
|
75
|
+
const contract = {
|
|
76
|
+
id: (0, crypto_1.randomUUID)(),
|
|
77
|
+
title: input.title,
|
|
78
|
+
description: input.description,
|
|
79
|
+
sessionId: input.sessionId,
|
|
80
|
+
owner: input.owner,
|
|
81
|
+
status: input.status ?? 'draft',
|
|
82
|
+
inputs: input.inputs ?? [],
|
|
83
|
+
expectedOutputs: input.expectedOutputs ?? [],
|
|
84
|
+
acceptanceCriteria: input.acceptanceCriteria ?? [],
|
|
85
|
+
requiredSensors: input.requiredSensors ?? [],
|
|
86
|
+
requiredArtifacts: input.requiredArtifacts ?? [],
|
|
87
|
+
createdAt: now,
|
|
88
|
+
updatedAt: now,
|
|
89
|
+
metadata: input.metadata,
|
|
90
|
+
};
|
|
91
|
+
const filePath = await this.taskFile(contract.id);
|
|
92
|
+
await fs.writeJson(filePath, contract, { spaces: 2 });
|
|
93
|
+
if (contract.sessionId) {
|
|
94
|
+
await this.options.stateService.appendTrace(contract.sessionId, {
|
|
95
|
+
level: 'info',
|
|
96
|
+
event: 'task.contract.created',
|
|
97
|
+
message: `Task contract created: ${contract.title}`,
|
|
98
|
+
data: { contract },
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
return contract;
|
|
102
|
+
}
|
|
103
|
+
async listTaskContracts() {
|
|
104
|
+
await this.ensureLayout();
|
|
105
|
+
const files = await fs.readdir(this.tasksPath);
|
|
106
|
+
const contracts = await Promise.all(files
|
|
107
|
+
.filter((file) => file.endsWith('.json'))
|
|
108
|
+
.map(async (file) => fs.readJson(path.join(this.tasksPath, file))));
|
|
109
|
+
return contracts.sort((a, b) => b.updatedAt.localeCompare(a.updatedAt));
|
|
110
|
+
}
|
|
111
|
+
async getTaskContract(taskId) {
|
|
112
|
+
const filePath = await this.taskFile(taskId);
|
|
113
|
+
if (!(await fs.pathExists(filePath))) {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
return fs.readJson(filePath);
|
|
117
|
+
}
|
|
118
|
+
async updateTaskContract(taskId, patch) {
|
|
119
|
+
const contract = await this.getTaskContract(taskId);
|
|
120
|
+
if (!contract) {
|
|
121
|
+
throw new Error(`Task contract not found: ${taskId}`);
|
|
122
|
+
}
|
|
123
|
+
const updated = {
|
|
124
|
+
...contract,
|
|
125
|
+
...patch,
|
|
126
|
+
updatedAt: new Date().toISOString(),
|
|
127
|
+
};
|
|
128
|
+
await fs.writeJson(await this.taskFile(taskId), updated, { spaces: 2 });
|
|
129
|
+
return updated;
|
|
130
|
+
}
|
|
131
|
+
async createHandoffContract(input) {
|
|
132
|
+
const contract = {
|
|
133
|
+
id: (0, crypto_1.randomUUID)(),
|
|
134
|
+
from: input.from,
|
|
135
|
+
to: input.to,
|
|
136
|
+
sessionId: input.sessionId,
|
|
137
|
+
taskId: input.taskId,
|
|
138
|
+
artifacts: input.artifacts ?? [],
|
|
139
|
+
evidence: input.evidence ?? [],
|
|
140
|
+
createdAt: new Date().toISOString(),
|
|
141
|
+
metadata: input.metadata,
|
|
142
|
+
};
|
|
143
|
+
const filePath = await this.handoffFile(contract.id);
|
|
144
|
+
await fs.writeJson(filePath, contract, { spaces: 2 });
|
|
145
|
+
if (contract.sessionId) {
|
|
146
|
+
await this.options.stateService.appendTrace(contract.sessionId, {
|
|
147
|
+
level: 'info',
|
|
148
|
+
event: 'handoff.contract.created',
|
|
149
|
+
message: `${contract.from} -> ${contract.to}`,
|
|
150
|
+
data: { contract },
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
return contract;
|
|
154
|
+
}
|
|
155
|
+
async listHandoffContracts() {
|
|
156
|
+
await this.ensureLayout();
|
|
157
|
+
const files = await fs.readdir(this.handoffsPath);
|
|
158
|
+
const contracts = await Promise.all(files
|
|
159
|
+
.filter((file) => file.endsWith('.json'))
|
|
160
|
+
.map(async (file) => fs.readJson(path.join(this.handoffsPath, file))));
|
|
161
|
+
return contracts.sort((a, b) => b.createdAt.localeCompare(a.createdAt));
|
|
162
|
+
}
|
|
163
|
+
async evaluateTaskCompletion(taskId, sessionId) {
|
|
164
|
+
const contract = await this.getTaskContract(taskId);
|
|
165
|
+
if (!contract) {
|
|
166
|
+
throw new Error(`Task contract not found: ${taskId}`);
|
|
167
|
+
}
|
|
168
|
+
const traces = sessionId ? await this.options.stateService.listTraces(sessionId) : [];
|
|
169
|
+
const sensorRuns = traces
|
|
170
|
+
.filter((trace) => trace.event === 'sensor.run' && trace.data?.run)
|
|
171
|
+
.map((trace) => trace.data.run);
|
|
172
|
+
const latestRunsBySensor = new Map();
|
|
173
|
+
for (const run of sensorRuns) {
|
|
174
|
+
const current = latestRunsBySensor.get(run.sensorId);
|
|
175
|
+
if (!current || current.createdAt < run.createdAt) {
|
|
176
|
+
latestRunsBySensor.set(run.sensorId, run);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
const artifacts = sessionId ? await this.options.stateService.listArtifacts(sessionId) : [];
|
|
180
|
+
const matchedSensorRuns = contract.requiredSensors
|
|
181
|
+
.map((sensorId) => latestRunsBySensor.get(sensorId))
|
|
182
|
+
.filter((run) => Boolean(run))
|
|
183
|
+
.filter((run) => run.status === 'passed');
|
|
184
|
+
const missingSensors = contract.requiredSensors.filter((sensorId) => !matchedSensorRuns.some((run) => run.sensorId === sensorId));
|
|
185
|
+
const artifactPaths = new Set([
|
|
186
|
+
...artifacts.map((artifact) => artifact.path || artifact.name),
|
|
187
|
+
]);
|
|
188
|
+
const missingArtifacts = contract.requiredArtifacts.filter((artifactPath) => !artifactPaths.has(artifactPath));
|
|
189
|
+
const matchedArtifacts = artifacts.filter((artifact) => contract.requiredArtifacts.includes(artifact.path || artifact.name));
|
|
190
|
+
const blockingFindings = [];
|
|
191
|
+
if (missingSensors.length > 0) {
|
|
192
|
+
blockingFindings.push(`Missing required sensors: ${missingSensors.join(', ')}`);
|
|
193
|
+
}
|
|
194
|
+
if (missingArtifacts.length > 0) {
|
|
195
|
+
blockingFindings.push(`Missing required artifacts: ${missingArtifacts.join(', ')}`);
|
|
196
|
+
}
|
|
197
|
+
return {
|
|
198
|
+
taskId,
|
|
199
|
+
sessionId,
|
|
200
|
+
canComplete: blockingFindings.length === 0,
|
|
201
|
+
missingSensors,
|
|
202
|
+
missingArtifacts,
|
|
203
|
+
blockingFindings,
|
|
204
|
+
matchedSensorRuns,
|
|
205
|
+
matchedArtifacts,
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
exports.HarnessTaskContractsService = HarnessTaskContractsService;
|
|
210
|
+
//# sourceMappingURL=taskContractsService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taskContractsService.js","sourceRoot":"","sources":["../../../src/services/harness/taskContractsService.ts"],"names":[],"mappings":"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"}
|