@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.
Files changed (417) 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/utils/versionChecker.d.ts.map +1 -1
  315. package/dist/utils/versionChecker.js +17 -8
  316. package/dist/utils/versionChecker.js.map +1 -1
  317. package/dist/workflow/index.d.ts +1 -1
  318. package/dist/workflow/index.d.ts.map +1 -1
  319. package/dist/workflow/index.js +6 -1
  320. package/dist/workflow/index.js.map +1 -1
  321. package/dist/workflow/orchestrator.d.ts.map +1 -1
  322. package/dist/workflow/orchestrator.js +3 -14
  323. package/dist/workflow/orchestrator.js.map +1 -1
  324. package/dist/workflow/plans/planLinker.d.ts +13 -0
  325. package/dist/workflow/plans/planLinker.d.ts.map +1 -1
  326. package/dist/workflow/plans/planLinker.js +77 -2
  327. package/dist/workflow/plans/planLinker.js.map +1 -1
  328. package/dist/workflow/plans/types.d.ts +6 -0
  329. package/dist/workflow/plans/types.d.ts.map +1 -1
  330. package/dist/workflow/skills/frontmatter.d.ts +9 -0
  331. package/dist/workflow/skills/frontmatter.d.ts.map +1 -1
  332. package/dist/workflow/skills/frontmatter.js +16 -0
  333. package/dist/workflow/skills/frontmatter.js.map +1 -1
  334. package/dist/workflow/skills/index.d.ts +1 -1
  335. package/dist/workflow/skills/index.d.ts.map +1 -1
  336. package/dist/workflow/skills/index.js +3 -1
  337. package/dist/workflow/skills/index.js.map +1 -1
  338. package/dist/workflow/skills/skillRegistry.d.ts.map +1 -1
  339. package/dist/workflow/skills/skillRegistry.js +4 -1
  340. package/dist/workflow/skills/skillRegistry.js.map +1 -1
  341. package/dist/workflow/skills/skillTemplates.d.ts.map +1 -1
  342. package/dist/workflow/skills/skillTemplates.js +69 -30
  343. package/dist/workflow/skills/skillTemplates.js.map +1 -1
  344. package/dist/workflow/status/statusManager.d.ts +8 -3
  345. package/dist/workflow/status/statusManager.d.ts.map +1 -1
  346. package/dist/workflow/status/statusManager.js +60 -21
  347. package/dist/workflow/status/statusManager.js.map +1 -1
  348. package/dist/workflow/types.d.ts +1 -1
  349. package/package.json +19 -11
  350. package/dist/services/ai/aiSdkClient.d.ts +0 -67
  351. package/dist/services/ai/aiSdkClient.d.ts.map +0 -1
  352. package/dist/services/ai/aiSdkClient.js +0 -143
  353. package/dist/services/ai/aiSdkClient.js.map +0 -1
  354. package/dist/services/ai/index.d.ts +0 -5
  355. package/dist/services/ai/index.d.ts.map +0 -1
  356. package/dist/services/ai/index.js +0 -40
  357. package/dist/services/ai/index.js.map +0 -1
  358. package/dist/services/ai/providerFactory.d.ts +0 -35
  359. package/dist/services/ai/providerFactory.d.ts.map +0 -1
  360. package/dist/services/ai/providerFactory.js +0 -107
  361. package/dist/services/ai/providerFactory.js.map +0 -1
  362. package/dist/services/ai/schemas.d.ts +0 -557
  363. package/dist/services/ai/schemas.d.ts.map +0 -1
  364. package/dist/services/ai/schemas.js +0 -357
  365. package/dist/services/ai/schemas.js.map +0 -1
  366. package/dist/services/ai/toolRegistry.d.ts +0 -27
  367. package/dist/services/ai/toolRegistry.d.ts.map +0 -1
  368. package/dist/services/ai/toolRegistry.js +0 -151
  369. package/dist/services/ai/toolRegistry.js.map +0 -1
  370. package/dist/services/ai/tools/analyzeSymbolsTool.d.ts +0 -33
  371. package/dist/services/ai/tools/analyzeSymbolsTool.d.ts.map +0 -1
  372. package/dist/services/ai/tools/analyzeSymbolsTool.js +0 -57
  373. package/dist/services/ai/tools/analyzeSymbolsTool.js.map +0 -1
  374. package/dist/services/ai/tools/checkScaffoldingTool.d.ts +0 -18
  375. package/dist/services/ai/tools/checkScaffoldingTool.d.ts.map +0 -1
  376. package/dist/services/ai/tools/checkScaffoldingTool.js +0 -89
  377. package/dist/services/ai/tools/checkScaffoldingTool.js.map +0 -1
  378. package/dist/services/ai/tools/fillScaffoldingTool.d.ts +0 -124
  379. package/dist/services/ai/tools/fillScaffoldingTool.d.ts.map +0 -1
  380. package/dist/services/ai/tools/fillScaffoldingTool.js +0 -397
  381. package/dist/services/ai/tools/fillScaffoldingTool.js.map +0 -1
  382. package/dist/services/ai/tools/getCodebaseMapTool.d.ts +0 -17
  383. package/dist/services/ai/tools/getCodebaseMapTool.d.ts.map +0 -1
  384. package/dist/services/ai/tools/getCodebaseMapTool.js +0 -122
  385. package/dist/services/ai/tools/getCodebaseMapTool.js.map +0 -1
  386. package/dist/services/ai/tools/getFileStructureTool.d.ts +0 -29
  387. package/dist/services/ai/tools/getFileStructureTool.d.ts.map +0 -1
  388. package/dist/services/ai/tools/getFileStructureTool.js +0 -48
  389. package/dist/services/ai/tools/getFileStructureTool.js.map +0 -1
  390. package/dist/services/ai/tools/index.d.ts +0 -21
  391. package/dist/services/ai/tools/index.d.ts.map +0 -1
  392. package/dist/services/ai/tools/index.js +0 -75
  393. package/dist/services/ai/tools/index.js.map +0 -1
  394. package/dist/services/ai/tools/initializeContextTool.d.ts +0 -135
  395. package/dist/services/ai/tools/initializeContextTool.d.ts.map +0 -1
  396. package/dist/services/ai/tools/initializeContextTool.js +0 -447
  397. package/dist/services/ai/tools/initializeContextTool.js.map +0 -1
  398. package/dist/services/ai/tools/listFilesTool.d.ts +0 -18
  399. package/dist/services/ai/tools/listFilesTool.d.ts.map +0 -1
  400. package/dist/services/ai/tools/listFilesTool.js +0 -34
  401. package/dist/services/ai/tools/listFilesTool.js.map +0 -1
  402. package/dist/services/ai/tools/readFileTool.d.ts +0 -17
  403. package/dist/services/ai/tools/readFileTool.d.ts.map +0 -1
  404. package/dist/services/ai/tools/readFileTool.js +0 -63
  405. package/dist/services/ai/tools/readFileTool.js.map +0 -1
  406. package/dist/services/ai/tools/scaffoldPlanTool.d.ts +0 -41
  407. package/dist/services/ai/tools/scaffoldPlanTool.d.ts.map +0 -1
  408. package/dist/services/ai/tools/scaffoldPlanTool.js +0 -183
  409. package/dist/services/ai/tools/scaffoldPlanTool.js.map +0 -1
  410. package/dist/services/ai/tools/searchCodeTool.d.ts +0 -25
  411. package/dist/services/ai/tools/searchCodeTool.d.ts.map +0 -1
  412. package/dist/services/ai/tools/searchCodeTool.js +0 -96
  413. package/dist/services/ai/tools/searchCodeTool.js.map +0 -1
  414. package/dist/services/baseLLMClient.d.ts +0 -12
  415. package/dist/services/baseLLMClient.d.ts.map +0 -1
  416. package/dist/services/baseLLMClient.js +0 -80
  417. 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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"}