@dotcontext/cli 0.8.2 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (414) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +234 -135
  3. package/dist/cli/index.d.ts +15 -0
  4. package/dist/cli/index.d.ts.map +1 -0
  5. package/dist/cli/index.js +27 -0
  6. package/dist/cli/index.js.map +1 -0
  7. package/dist/generators/documentation/codebaseMapGenerator.d.ts +29 -46
  8. package/dist/generators/documentation/codebaseMapGenerator.d.ts.map +1 -1
  9. package/dist/generators/documentation/codebaseMapGenerator.js +148 -244
  10. package/dist/generators/documentation/codebaseMapGenerator.js.map +1 -1
  11. package/dist/generators/documentation/documentationGenerator.d.ts.map +1 -1
  12. package/dist/generators/documentation/documentationGenerator.js +13 -8
  13. package/dist/generators/documentation/documentationGenerator.js.map +1 -1
  14. package/dist/generators/documentation/index.d.ts +1 -1
  15. package/dist/generators/documentation/index.d.ts.map +1 -1
  16. package/dist/generators/shared/structures/documentation/architecture.d.ts.map +1 -1
  17. package/dist/generators/shared/structures/documentation/architecture.js +9 -9
  18. package/dist/generators/shared/structures/documentation/architecture.js.map +1 -1
  19. package/dist/generators/shared/structures/documentation/dataFlow.js +2 -2
  20. package/dist/generators/shared/structures/documentation/dataFlow.js.map +1 -1
  21. package/dist/generators/shared/structures/documentation/glossary.js +2 -2
  22. package/dist/generators/shared/structures/documentation/glossary.js.map +1 -1
  23. package/dist/generators/shared/structures/documentation/projectOverview.d.ts.map +1 -1
  24. package/dist/generators/shared/structures/documentation/projectOverview.js +10 -11
  25. package/dist/generators/shared/structures/documentation/projectOverview.js.map +1 -1
  26. package/dist/generators/shared/structures/skills/factory.d.ts.map +1 -1
  27. package/dist/generators/shared/structures/skills/factory.js +19 -15
  28. package/dist/generators/shared/structures/skills/factory.js.map +1 -1
  29. package/dist/generators/skills/skillGenerator.d.ts +2 -1
  30. package/dist/generators/skills/skillGenerator.d.ts.map +1 -1
  31. package/dist/generators/skills/skillGenerator.js +47 -6
  32. package/dist/generators/skills/skillGenerator.js.map +1 -1
  33. package/dist/generators/skills/templates/indexTemplate.d.ts.map +1 -1
  34. package/dist/generators/skills/templates/indexTemplate.js +22 -15
  35. package/dist/generators/skills/templates/indexTemplate.js.map +1 -1
  36. package/dist/harness/index.d.ts +11 -0
  37. package/dist/harness/index.d.ts.map +1 -0
  38. package/dist/harness/index.js +33 -0
  39. package/dist/harness/index.js.map +1 -0
  40. package/dist/index.js +365 -339
  41. package/dist/index.js.map +1 -1
  42. package/dist/mcp/bin.d.ts +19 -0
  43. package/dist/mcp/bin.d.ts.map +1 -0
  44. package/dist/mcp/bin.js +189 -0
  45. package/dist/mcp/bin.js.map +1 -0
  46. package/dist/mcp/index.d.ts +12 -0
  47. package/dist/mcp/index.d.ts.map +1 -0
  48. package/dist/mcp/index.js +28 -0
  49. package/dist/mcp/index.js.map +1 -0
  50. package/dist/services/autoFill/autoFillService.d.ts.map +1 -1
  51. package/dist/services/autoFill/autoFillService.js +7 -6
  52. package/dist/services/autoFill/autoFillService.js.map +1 -1
  53. package/dist/services/cli/index.d.ts +8 -0
  54. package/dist/services/cli/index.d.ts.map +1 -0
  55. package/dist/services/cli/index.js +17 -0
  56. package/dist/services/cli/index.js.map +1 -0
  57. package/dist/services/cli/mcpInstallService.d.ts +57 -0
  58. package/dist/services/cli/mcpInstallService.d.ts.map +1 -0
  59. package/dist/services/cli/mcpInstallService.js +607 -0
  60. package/dist/services/cli/mcpInstallService.js.map +1 -0
  61. package/dist/services/cli/stateDetector.d.ts +55 -0
  62. package/dist/services/cli/stateDetector.d.ts.map +1 -0
  63. package/dist/services/cli/stateDetector.js +191 -0
  64. package/dist/services/cli/stateDetector.js.map +1 -0
  65. package/dist/services/export/contextExportService.js +3 -3
  66. package/dist/services/export/contextExportService.js.map +1 -1
  67. package/dist/services/export/exportRulesService.d.ts +1 -0
  68. package/dist/services/export/exportRulesService.d.ts.map +1 -1
  69. package/dist/services/export/exportRulesService.js +20 -8
  70. package/dist/services/export/exportRulesService.js.map +1 -1
  71. package/dist/services/export/skillExportService.d.ts.map +1 -1
  72. package/dist/services/export/skillExportService.js +4 -1
  73. package/dist/services/export/skillExportService.js.map +1 -1
  74. package/dist/services/harness/agentsService.d.ts +31 -0
  75. package/dist/services/harness/agentsService.d.ts.map +1 -0
  76. package/dist/services/harness/agentsService.js +135 -0
  77. package/dist/services/harness/agentsService.js.map +1 -0
  78. package/dist/services/harness/contextService.d.ts +167 -0
  79. package/dist/services/harness/contextService.d.ts.map +1 -0
  80. package/dist/services/harness/contextService.js +403 -0
  81. package/dist/services/harness/contextService.js.map +1 -0
  82. package/dist/services/harness/contextTools.d.ts +95 -0
  83. package/dist/services/harness/contextTools.d.ts.map +1 -0
  84. package/dist/services/harness/contextTools.js +990 -0
  85. package/dist/services/harness/contextTools.js.map +1 -0
  86. package/dist/services/harness/datasetService.d.ts +63 -0
  87. package/dist/services/harness/datasetService.d.ts.map +1 -0
  88. package/dist/services/harness/datasetService.js +261 -0
  89. package/dist/services/harness/datasetService.js.map +1 -0
  90. package/dist/services/harness/executionService.d.ts +74 -0
  91. package/dist/services/harness/executionService.d.ts.map +1 -0
  92. package/dist/services/harness/executionService.js +213 -0
  93. package/dist/services/harness/executionService.js.map +1 -0
  94. package/dist/services/harness/index.d.ts +21 -0
  95. package/dist/services/harness/index.d.ts.map +1 -0
  96. package/dist/services/harness/index.js +52 -0
  97. package/dist/services/harness/index.js.map +1 -0
  98. package/dist/services/harness/plansService.d.ts +45 -0
  99. package/dist/services/harness/plansService.d.ts.map +1 -0
  100. package/dist/services/harness/plansService.js +251 -0
  101. package/dist/services/harness/plansService.js.map +1 -0
  102. package/dist/services/harness/policyService.d.ts +116 -0
  103. package/dist/services/harness/policyService.d.ts.map +1 -0
  104. package/dist/services/harness/policyService.js +510 -0
  105. package/dist/services/harness/policyService.js.map +1 -0
  106. package/dist/services/harness/replayService.d.ts +63 -0
  107. package/dist/services/harness/replayService.d.ts.map +1 -0
  108. package/dist/services/harness/replayService.js +242 -0
  109. package/dist/services/harness/replayService.js.map +1 -0
  110. package/dist/services/harness/runtimeStateService.d.ts +120 -0
  111. package/dist/services/harness/runtimeStateService.d.ts.map +1 -0
  112. package/dist/services/harness/runtimeStateService.js +316 -0
  113. package/dist/services/harness/runtimeStateService.js.map +1 -0
  114. package/dist/services/harness/sensorCatalogService.d.ts +50 -0
  115. package/dist/services/harness/sensorCatalogService.d.ts.map +1 -0
  116. package/dist/services/harness/sensorCatalogService.js +308 -0
  117. package/dist/services/harness/sensorCatalogService.js.map +1 -0
  118. package/dist/services/harness/sensorsService.d.ts +64 -0
  119. package/dist/services/harness/sensorsService.d.ts.map +1 -0
  120. package/dist/services/harness/sensorsService.js +88 -0
  121. package/dist/services/harness/sensorsService.js.map +1 -0
  122. package/dist/services/harness/skillsService.d.ts +31 -0
  123. package/dist/services/harness/skillsService.d.ts.map +1 -0
  124. package/dist/services/harness/skillsService.js +296 -0
  125. package/dist/services/harness/skillsService.js.map +1 -0
  126. package/dist/services/harness/taskContractsService.d.ts +88 -0
  127. package/dist/services/harness/taskContractsService.d.ts.map +1 -0
  128. package/dist/services/harness/taskContractsService.js +210 -0
  129. package/dist/services/harness/taskContractsService.js.map +1 -0
  130. package/dist/services/harness/workflowStateService.d.ts +51 -0
  131. package/dist/services/harness/workflowStateService.d.ts.map +1 -0
  132. package/dist/services/harness/workflowStateService.js +215 -0
  133. package/dist/services/harness/workflowStateService.js.map +1 -0
  134. package/dist/services/import/agentsDetector.d.ts.map +1 -1
  135. package/dist/services/import/agentsDetector.js +14 -8
  136. package/dist/services/import/agentsDetector.js.map +1 -1
  137. package/dist/services/import/importAgentsService.d.ts +2 -2
  138. package/dist/services/import/importAgentsService.d.ts.map +1 -1
  139. package/dist/services/import/importAgentsService.js +8 -1
  140. package/dist/services/import/importAgentsService.js.map +1 -1
  141. package/dist/services/import/importRulesService.d.ts +2 -2
  142. package/dist/services/import/importRulesService.d.ts.map +1 -1
  143. package/dist/services/import/importRulesService.js +8 -1
  144. package/dist/services/import/importRulesService.js.map +1 -1
  145. package/dist/services/import/presets.js +2 -2
  146. package/dist/services/import/presets.js.map +1 -1
  147. package/dist/services/import/rulesDetector.d.ts.map +1 -1
  148. package/dist/services/import/rulesDetector.js +16 -1
  149. package/dist/services/import/rulesDetector.js.map +1 -1
  150. package/dist/services/import/types.d.ts +1 -1
  151. package/dist/services/import/types.d.ts.map +1 -1
  152. package/dist/services/mcp/actionLogger.d.ts +2 -1
  153. package/dist/services/mcp/actionLogger.d.ts.map +1 -1
  154. package/dist/services/mcp/actionLogger.js +76 -15
  155. package/dist/services/mcp/actionLogger.js.map +1 -1
  156. package/dist/services/mcp/gateway/agent.d.ts.map +1 -1
  157. package/dist/services/mcp/gateway/agent.js +15 -104
  158. package/dist/services/mcp/gateway/agent.js.map +1 -1
  159. package/dist/services/mcp/gateway/context.d.ts.map +1 -1
  160. package/dist/services/mcp/gateway/context.js +60 -172
  161. package/dist/services/mcp/gateway/context.js.map +1 -1
  162. package/dist/services/mcp/gateway/explore.js +6 -6
  163. package/dist/services/mcp/gateway/explore.js.map +1 -1
  164. package/dist/services/mcp/gateway/harness.d.ts +7 -0
  165. package/dist/services/mcp/gateway/harness.d.ts.map +1 -0
  166. package/dist/services/mcp/gateway/harness.js +337 -0
  167. package/dist/services/mcp/gateway/harness.js.map +1 -0
  168. package/dist/services/mcp/gateway/index.d.ts +3 -2
  169. package/dist/services/mcp/gateway/index.d.ts.map +1 -1
  170. package/dist/services/mcp/gateway/index.js +4 -2
  171. package/dist/services/mcp/gateway/index.js.map +1 -1
  172. package/dist/services/mcp/gateway/metrics.d.ts.map +1 -1
  173. package/dist/services/mcp/gateway/metrics.js +8 -8
  174. package/dist/services/mcp/gateway/metrics.js.map +1 -1
  175. package/dist/services/mcp/gateway/plan.d.ts.map +1 -1
  176. package/dist/services/mcp/gateway/plan.js +23 -211
  177. package/dist/services/mcp/gateway/plan.js.map +1 -1
  178. package/dist/services/mcp/gateway/shared.d.ts +1 -32
  179. package/dist/services/mcp/gateway/shared.d.ts.map +1 -1
  180. package/dist/services/mcp/gateway/shared.js +4 -30
  181. package/dist/services/mcp/gateway/shared.js.map +1 -1
  182. package/dist/services/mcp/gateway/skill.d.ts.map +1 -1
  183. package/dist/services/mcp/gateway/skill.js +14 -281
  184. package/dist/services/mcp/gateway/skill.js.map +1 -1
  185. package/dist/services/mcp/gateway/types.d.ts +74 -3
  186. package/dist/services/mcp/gateway/types.d.ts.map +1 -1
  187. package/dist/services/mcp/gateway/workflowAdvance.d.ts.map +1 -1
  188. package/dist/services/mcp/gateway/workflowAdvance.js +37 -9
  189. package/dist/services/mcp/gateway/workflowAdvance.js.map +1 -1
  190. package/dist/services/mcp/gateway/workflowInit.d.ts.map +1 -1
  191. package/dist/services/mcp/gateway/workflowInit.js +8 -2
  192. package/dist/services/mcp/gateway/workflowInit.js.map +1 -1
  193. package/dist/services/mcp/gateway/workflowManage.d.ts +17 -1
  194. package/dist/services/mcp/gateway/workflowManage.d.ts.map +1 -1
  195. package/dist/services/mcp/gateway/workflowManage.js +155 -10
  196. package/dist/services/mcp/gateway/workflowManage.js.map +1 -1
  197. package/dist/services/mcp/gateway/workflowStatus.d.ts.map +1 -1
  198. package/dist/services/mcp/gateway/workflowStatus.js +5 -3
  199. package/dist/services/mcp/gateway/workflowStatus.js.map +1 -1
  200. package/dist/services/mcp/gatewayTools.d.ts +1 -1
  201. package/dist/services/mcp/gatewayTools.d.ts.map +1 -1
  202. package/dist/services/mcp/gatewayTools.js +2 -1
  203. package/dist/services/mcp/gatewayTools.js.map +1 -1
  204. package/dist/services/mcp/index.d.ts +10 -4
  205. package/dist/services/mcp/index.d.ts.map +1 -1
  206. package/dist/services/mcp/index.js +9 -3
  207. package/dist/services/mcp/index.js.map +1 -1
  208. package/dist/services/mcp/mcpInstallService.d.ts +4 -52
  209. package/dist/services/mcp/mcpInstallService.d.ts.map +1 -1
  210. package/dist/services/mcp/mcpInstallService.js +5 -596
  211. package/dist/services/mcp/mcpInstallService.js.map +1 -1
  212. package/dist/services/mcp/mcpServer.d.ts +5 -6
  213. package/dist/services/mcp/mcpServer.d.ts.map +1 -1
  214. package/dist/services/mcp/mcpServer.js +220 -28
  215. package/dist/services/mcp/mcpServer.js.map +1 -1
  216. package/dist/services/qa/patternInferer.d.ts +2 -31
  217. package/dist/services/qa/patternInferer.d.ts.map +1 -1
  218. package/dist/services/qa/patternInferer.js +4 -353
  219. package/dist/services/qa/patternInferer.js.map +1 -1
  220. package/dist/services/qa/qaService.d.ts +6 -10
  221. package/dist/services/qa/qaService.d.ts.map +1 -1
  222. package/dist/services/qa/qaService.js +17 -53
  223. package/dist/services/qa/qaService.js.map +1 -1
  224. package/dist/services/reverseSync/importSkillsService.d.ts.map +1 -1
  225. package/dist/services/reverseSync/importSkillsService.js +4 -1
  226. package/dist/services/reverseSync/importSkillsService.js.map +1 -1
  227. package/dist/services/reverseSync/reverseQuickSyncService.d.ts.map +1 -1
  228. package/dist/services/reverseSync/reverseQuickSyncService.js +10 -6
  229. package/dist/services/reverseSync/reverseQuickSyncService.js.map +1 -1
  230. package/dist/services/reverseSync/skillsDetector.js +2 -2
  231. package/dist/services/reverseSync/skillsDetector.js.map +1 -1
  232. package/dist/services/reverseSync/toolDetector.d.ts.map +1 -1
  233. package/dist/services/reverseSync/toolDetector.js +3 -0
  234. package/dist/services/reverseSync/toolDetector.js.map +1 -1
  235. package/dist/services/semantic/index.d.ts +1 -0
  236. package/dist/services/semantic/index.d.ts.map +1 -1
  237. package/dist/services/semantic/index.js +3 -1
  238. package/dist/services/semantic/index.js.map +1 -1
  239. package/dist/services/semantic/semanticSnapshotService.d.ts +86 -0
  240. package/dist/services/semantic/semanticSnapshotService.d.ts.map +1 -0
  241. package/dist/services/semantic/semanticSnapshotService.js +573 -0
  242. package/dist/services/semantic/semanticSnapshotService.js.map +1 -0
  243. package/dist/services/shared/contentTypeRegistry.d.ts.map +1 -1
  244. package/dist/services/shared/contentTypeRegistry.js +9 -0
  245. package/dist/services/shared/contentTypeRegistry.js.map +1 -1
  246. package/dist/services/shared/contextLayout.d.ts +18 -0
  247. package/dist/services/shared/contextLayout.d.ts.map +1 -0
  248. package/dist/services/shared/contextLayout.js +139 -0
  249. package/dist/services/shared/contextLayout.js.map +1 -0
  250. package/dist/services/shared/executionContext.d.ts +38 -0
  251. package/dist/services/shared/executionContext.d.ts.map +1 -0
  252. package/dist/services/shared/executionContext.js +39 -0
  253. package/dist/services/shared/executionContext.js.map +1 -0
  254. package/dist/services/shared/index.d.ts +2 -0
  255. package/dist/services/shared/index.d.ts.map +1 -1
  256. package/dist/services/shared/index.js +11 -1
  257. package/dist/services/shared/index.js.map +1 -1
  258. package/dist/services/shared/toolRegistry.d.ts +6 -0
  259. package/dist/services/shared/toolRegistry.d.ts.map +1 -1
  260. package/dist/services/shared/toolRegistry.js +34 -20
  261. package/dist/services/shared/toolRegistry.js.map +1 -1
  262. package/dist/services/stack/scaffoldFilter.d.ts +3 -3
  263. package/dist/services/state/stateDetector.d.ts +4 -49
  264. package/dist/services/state/stateDetector.d.ts.map +1 -1
  265. package/dist/services/state/stateDetector.js +9 -182
  266. package/dist/services/state/stateDetector.js.map +1 -1
  267. package/dist/services/sync/index.d.ts +1 -1
  268. package/dist/services/sync/index.d.ts.map +1 -1
  269. package/dist/services/sync/index.js.map +1 -1
  270. package/dist/services/sync/markdownReferenceHandler.d.ts.map +1 -1
  271. package/dist/services/sync/markdownReferenceHandler.js +7 -2
  272. package/dist/services/sync/markdownReferenceHandler.js.map +1 -1
  273. package/dist/services/sync/presets.d.ts.map +1 -1
  274. package/dist/services/sync/presets.js +1 -0
  275. package/dist/services/sync/presets.js.map +1 -1
  276. package/dist/services/sync/symlinkHandler.d.ts.map +1 -1
  277. package/dist/services/sync/symlinkHandler.js +7 -2
  278. package/dist/services/sync/symlinkHandler.js.map +1 -1
  279. package/dist/services/sync/syncService.d.ts +2 -2
  280. package/dist/services/sync/syncService.d.ts.map +1 -1
  281. package/dist/services/sync/syncService.js +17 -3
  282. package/dist/services/sync/syncService.js.map +1 -1
  283. package/dist/services/sync/types.d.ts +9 -1
  284. package/dist/services/sync/types.d.ts.map +1 -1
  285. package/dist/services/workflow/index.d.ts +1 -1
  286. package/dist/services/workflow/index.d.ts.map +1 -1
  287. package/dist/services/workflow/index.js +2 -1
  288. package/dist/services/workflow/index.js.map +1 -1
  289. package/dist/services/workflow/workflowService.d.ts +68 -0
  290. package/dist/services/workflow/workflowService.d.ts.map +1 -1
  291. package/dist/services/workflow/workflowService.js +416 -1
  292. package/dist/services/workflow/workflowService.js.map +1 -1
  293. package/dist/utils/gitignoreManager.d.ts +8 -0
  294. package/dist/utils/gitignoreManager.d.ts.map +1 -1
  295. package/dist/utils/gitignoreManager.js +40 -0
  296. package/dist/utils/gitignoreManager.js.map +1 -1
  297. package/dist/utils/i18n.d.ts +1 -1
  298. package/dist/utils/i18n.js +2 -2
  299. package/dist/utils/i18n.js.map +1 -1
  300. package/dist/utils/processShutdown.d.ts +20 -0
  301. package/dist/utils/processShutdown.d.ts.map +1 -0
  302. package/dist/utils/processShutdown.js +47 -0
  303. package/dist/utils/processShutdown.js.map +1 -0
  304. package/dist/utils/prompts/index.d.ts +1 -1
  305. package/dist/utils/prompts/index.d.ts.map +1 -1
  306. package/dist/utils/prompts/index.js +1 -3
  307. package/dist/utils/prompts/index.js.map +1 -1
  308. package/dist/utils/prompts/smartDefaults.d.ts +0 -9
  309. package/dist/utils/prompts/smartDefaults.d.ts.map +1 -1
  310. package/dist/utils/prompts/smartDefaults.js +0 -23
  311. package/dist/utils/prompts/smartDefaults.js.map +1 -1
  312. package/dist/utils/prompts/types.d.ts +0 -11
  313. package/dist/utils/prompts/types.d.ts.map +1 -1
  314. package/dist/workflow/index.d.ts +1 -1
  315. package/dist/workflow/index.d.ts.map +1 -1
  316. package/dist/workflow/index.js +6 -1
  317. package/dist/workflow/index.js.map +1 -1
  318. package/dist/workflow/orchestrator.d.ts.map +1 -1
  319. package/dist/workflow/orchestrator.js +3 -14
  320. package/dist/workflow/orchestrator.js.map +1 -1
  321. package/dist/workflow/plans/planLinker.d.ts +13 -0
  322. package/dist/workflow/plans/planLinker.d.ts.map +1 -1
  323. package/dist/workflow/plans/planLinker.js +77 -2
  324. package/dist/workflow/plans/planLinker.js.map +1 -1
  325. package/dist/workflow/plans/types.d.ts +6 -0
  326. package/dist/workflow/plans/types.d.ts.map +1 -1
  327. package/dist/workflow/skills/frontmatter.d.ts +9 -0
  328. package/dist/workflow/skills/frontmatter.d.ts.map +1 -1
  329. package/dist/workflow/skills/frontmatter.js +16 -0
  330. package/dist/workflow/skills/frontmatter.js.map +1 -1
  331. package/dist/workflow/skills/index.d.ts +1 -1
  332. package/dist/workflow/skills/index.d.ts.map +1 -1
  333. package/dist/workflow/skills/index.js +3 -1
  334. package/dist/workflow/skills/index.js.map +1 -1
  335. package/dist/workflow/skills/skillRegistry.d.ts.map +1 -1
  336. package/dist/workflow/skills/skillRegistry.js +4 -1
  337. package/dist/workflow/skills/skillRegistry.js.map +1 -1
  338. package/dist/workflow/skills/skillTemplates.d.ts.map +1 -1
  339. package/dist/workflow/skills/skillTemplates.js +69 -30
  340. package/dist/workflow/skills/skillTemplates.js.map +1 -1
  341. package/dist/workflow/status/statusManager.d.ts +8 -3
  342. package/dist/workflow/status/statusManager.d.ts.map +1 -1
  343. package/dist/workflow/status/statusManager.js +60 -21
  344. package/dist/workflow/status/statusManager.js.map +1 -1
  345. package/dist/workflow/types.d.ts +1 -1
  346. package/package.json +16 -7
  347. package/dist/services/ai/aiSdkClient.d.ts +0 -67
  348. package/dist/services/ai/aiSdkClient.d.ts.map +0 -1
  349. package/dist/services/ai/aiSdkClient.js +0 -143
  350. package/dist/services/ai/aiSdkClient.js.map +0 -1
  351. package/dist/services/ai/index.d.ts +0 -5
  352. package/dist/services/ai/index.d.ts.map +0 -1
  353. package/dist/services/ai/index.js +0 -40
  354. package/dist/services/ai/index.js.map +0 -1
  355. package/dist/services/ai/providerFactory.d.ts +0 -35
  356. package/dist/services/ai/providerFactory.d.ts.map +0 -1
  357. package/dist/services/ai/providerFactory.js +0 -107
  358. package/dist/services/ai/providerFactory.js.map +0 -1
  359. package/dist/services/ai/schemas.d.ts +0 -557
  360. package/dist/services/ai/schemas.d.ts.map +0 -1
  361. package/dist/services/ai/schemas.js +0 -357
  362. package/dist/services/ai/schemas.js.map +0 -1
  363. package/dist/services/ai/toolRegistry.d.ts +0 -27
  364. package/dist/services/ai/toolRegistry.d.ts.map +0 -1
  365. package/dist/services/ai/toolRegistry.js +0 -151
  366. package/dist/services/ai/toolRegistry.js.map +0 -1
  367. package/dist/services/ai/tools/analyzeSymbolsTool.d.ts +0 -33
  368. package/dist/services/ai/tools/analyzeSymbolsTool.d.ts.map +0 -1
  369. package/dist/services/ai/tools/analyzeSymbolsTool.js +0 -57
  370. package/dist/services/ai/tools/analyzeSymbolsTool.js.map +0 -1
  371. package/dist/services/ai/tools/checkScaffoldingTool.d.ts +0 -18
  372. package/dist/services/ai/tools/checkScaffoldingTool.d.ts.map +0 -1
  373. package/dist/services/ai/tools/checkScaffoldingTool.js +0 -89
  374. package/dist/services/ai/tools/checkScaffoldingTool.js.map +0 -1
  375. package/dist/services/ai/tools/fillScaffoldingTool.d.ts +0 -124
  376. package/dist/services/ai/tools/fillScaffoldingTool.d.ts.map +0 -1
  377. package/dist/services/ai/tools/fillScaffoldingTool.js +0 -397
  378. package/dist/services/ai/tools/fillScaffoldingTool.js.map +0 -1
  379. package/dist/services/ai/tools/getCodebaseMapTool.d.ts +0 -17
  380. package/dist/services/ai/tools/getCodebaseMapTool.d.ts.map +0 -1
  381. package/dist/services/ai/tools/getCodebaseMapTool.js +0 -122
  382. package/dist/services/ai/tools/getCodebaseMapTool.js.map +0 -1
  383. package/dist/services/ai/tools/getFileStructureTool.d.ts +0 -29
  384. package/dist/services/ai/tools/getFileStructureTool.d.ts.map +0 -1
  385. package/dist/services/ai/tools/getFileStructureTool.js +0 -48
  386. package/dist/services/ai/tools/getFileStructureTool.js.map +0 -1
  387. package/dist/services/ai/tools/index.d.ts +0 -21
  388. package/dist/services/ai/tools/index.d.ts.map +0 -1
  389. package/dist/services/ai/tools/index.js +0 -75
  390. package/dist/services/ai/tools/index.js.map +0 -1
  391. package/dist/services/ai/tools/initializeContextTool.d.ts +0 -135
  392. package/dist/services/ai/tools/initializeContextTool.d.ts.map +0 -1
  393. package/dist/services/ai/tools/initializeContextTool.js +0 -447
  394. package/dist/services/ai/tools/initializeContextTool.js.map +0 -1
  395. package/dist/services/ai/tools/listFilesTool.d.ts +0 -18
  396. package/dist/services/ai/tools/listFilesTool.d.ts.map +0 -1
  397. package/dist/services/ai/tools/listFilesTool.js +0 -34
  398. package/dist/services/ai/tools/listFilesTool.js.map +0 -1
  399. package/dist/services/ai/tools/readFileTool.d.ts +0 -17
  400. package/dist/services/ai/tools/readFileTool.d.ts.map +0 -1
  401. package/dist/services/ai/tools/readFileTool.js +0 -63
  402. package/dist/services/ai/tools/readFileTool.js.map +0 -1
  403. package/dist/services/ai/tools/scaffoldPlanTool.d.ts +0 -41
  404. package/dist/services/ai/tools/scaffoldPlanTool.d.ts.map +0 -1
  405. package/dist/services/ai/tools/scaffoldPlanTool.js +0 -183
  406. package/dist/services/ai/tools/scaffoldPlanTool.js.map +0 -1
  407. package/dist/services/ai/tools/searchCodeTool.d.ts +0 -25
  408. package/dist/services/ai/tools/searchCodeTool.d.ts.map +0 -1
  409. package/dist/services/ai/tools/searchCodeTool.js +0 -96
  410. package/dist/services/ai/tools/searchCodeTool.js.map +0 -1
  411. package/dist/services/baseLLMClient.d.ts +0 -12
  412. package/dist/services/baseLLMClient.d.ts.map +0 -1
  413. package/dist/services/baseLLMClient.js +0 -80
  414. 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":"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"}
1
+ {"version":3,"file":"workflowService.d.ts","sourceRoot":"","sources":["../../../src/services/workflow/workflowService.ts"],"names":[],"mappings":"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"}
@@ -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