@dotcontext/mcp 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 (835) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +22 -0
  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/agents/agentConfig.d.ts +4 -0
  8. package/dist/generators/agents/agentConfig.d.ts.map +1 -0
  9. package/dist/generators/agents/agentConfig.js +180 -0
  10. package/dist/generators/agents/agentConfig.js.map +1 -0
  11. package/dist/generators/agents/agentGenerator.d.ts +36 -0
  12. package/dist/generators/agents/agentGenerator.d.ts.map +1 -0
  13. package/dist/generators/agents/agentGenerator.js +304 -0
  14. package/dist/generators/agents/agentGenerator.js.map +1 -0
  15. package/dist/generators/agents/agentTypes.d.ts +4 -0
  16. package/dist/generators/agents/agentTypes.d.ts.map +1 -0
  17. package/dist/generators/agents/agentTypes.js +25 -0
  18. package/dist/generators/agents/agentTypes.js.map +1 -0
  19. package/dist/generators/agents/index.d.ts +4 -0
  20. package/dist/generators/agents/index.d.ts.map +1 -0
  21. package/dist/generators/agents/index.js +12 -0
  22. package/dist/generators/agents/index.js.map +1 -0
  23. package/dist/generators/agents/templates/index.d.ts +3 -0
  24. package/dist/generators/agents/templates/index.d.ts.map +1 -0
  25. package/dist/generators/agents/templates/index.js +6 -0
  26. package/dist/generators/agents/templates/index.js.map +1 -0
  27. package/dist/generators/agents/templates/indexTemplate.d.ts +3 -0
  28. package/dist/generators/agents/templates/indexTemplate.d.ts.map +1 -0
  29. package/dist/generators/agents/templates/indexTemplate.js +36 -0
  30. package/dist/generators/agents/templates/indexTemplate.js.map +1 -0
  31. package/dist/generators/agents/templates/types.d.ts +22 -0
  32. package/dist/generators/agents/templates/types.d.ts.map +1 -0
  33. package/dist/generators/agents/templates/types.js +3 -0
  34. package/dist/generators/agents/templates/types.js.map +1 -0
  35. package/dist/generators/documentation/codebaseMapGenerator.d.ts +126 -0
  36. package/dist/generators/documentation/codebaseMapGenerator.d.ts.map +1 -0
  37. package/dist/generators/documentation/codebaseMapGenerator.js +570 -0
  38. package/dist/generators/documentation/codebaseMapGenerator.js.map +1 -0
  39. package/dist/generators/documentation/documentationGenerator.d.ts +22 -0
  40. package/dist/generators/documentation/documentationGenerator.d.ts.map +1 -0
  41. package/dist/generators/documentation/documentationGenerator.js +268 -0
  42. package/dist/generators/documentation/documentationGenerator.js.map +1 -0
  43. package/dist/generators/documentation/guideRegistry.d.ts +6 -0
  44. package/dist/generators/documentation/guideRegistry.d.ts.map +1 -0
  45. package/dist/generators/documentation/guideRegistry.js +74 -0
  46. package/dist/generators/documentation/guideRegistry.js.map +1 -0
  47. package/dist/generators/documentation/index.d.ts +4 -0
  48. package/dist/generators/documentation/index.d.ts.map +1 -0
  49. package/dist/generators/documentation/index.js +8 -0
  50. package/dist/generators/documentation/index.js.map +1 -0
  51. package/dist/generators/documentation/templates/common.d.ts +42 -0
  52. package/dist/generators/documentation/templates/common.d.ts.map +1 -0
  53. package/dist/generators/documentation/templates/common.js +194 -0
  54. package/dist/generators/documentation/templates/common.js.map +1 -0
  55. package/dist/generators/documentation/templates/index.d.ts +3 -0
  56. package/dist/generators/documentation/templates/index.d.ts.map +1 -0
  57. package/dist/generators/documentation/templates/index.js +6 -0
  58. package/dist/generators/documentation/templates/index.js.map +1 -0
  59. package/dist/generators/documentation/templates/indexTemplate.d.ts +3 -0
  60. package/dist/generators/documentation/templates/indexTemplate.d.ts.map +1 -0
  61. package/dist/generators/documentation/templates/indexTemplate.js +25 -0
  62. package/dist/generators/documentation/templates/indexTemplate.js.map +1 -0
  63. package/dist/generators/documentation/templates/types.d.ts +24 -0
  64. package/dist/generators/documentation/templates/types.d.ts.map +1 -0
  65. package/dist/generators/documentation/templates/types.js +3 -0
  66. package/dist/generators/documentation/templates/types.js.map +1 -0
  67. package/dist/generators/plans/index.d.ts +2 -0
  68. package/dist/generators/plans/index.d.ts.map +1 -0
  69. package/dist/generators/plans/index.js +6 -0
  70. package/dist/generators/plans/index.js.map +1 -0
  71. package/dist/generators/plans/planGenerator.d.ts +26 -0
  72. package/dist/generators/plans/planGenerator.d.ts.map +1 -0
  73. package/dist/generators/plans/planGenerator.js +137 -0
  74. package/dist/generators/plans/planGenerator.js.map +1 -0
  75. package/dist/generators/plans/templates/indexTemplate.d.ts +3 -0
  76. package/dist/generators/plans/templates/indexTemplate.d.ts.map +1 -0
  77. package/dist/generators/plans/templates/indexTemplate.js +28 -0
  78. package/dist/generators/plans/templates/indexTemplate.js.map +1 -0
  79. package/dist/generators/plans/templates/planTemplate.d.ts +14 -0
  80. package/dist/generators/plans/templates/planTemplate.d.ts.map +1 -0
  81. package/dist/generators/plans/templates/planTemplate.js +270 -0
  82. package/dist/generators/plans/templates/planTemplate.js.map +1 -0
  83. package/dist/generators/plans/templates/types.d.ts +29 -0
  84. package/dist/generators/plans/templates/types.d.ts.map +1 -0
  85. package/dist/generators/plans/templates/types.js +3 -0
  86. package/dist/generators/plans/templates/types.js.map +1 -0
  87. package/dist/generators/shared/contextGenerator.d.ts +7 -0
  88. package/dist/generators/shared/contextGenerator.d.ts.map +1 -0
  89. package/dist/generators/shared/contextGenerator.js +13 -0
  90. package/dist/generators/shared/contextGenerator.js.map +1 -0
  91. package/dist/generators/shared/directoryTemplateHelpers.d.ts +2 -0
  92. package/dist/generators/shared/directoryTemplateHelpers.d.ts.map +1 -0
  93. package/dist/generators/shared/directoryTemplateHelpers.js +12 -0
  94. package/dist/generators/shared/directoryTemplateHelpers.js.map +1 -0
  95. package/dist/generators/shared/generatorUtils.d.ts +16 -0
  96. package/dist/generators/shared/generatorUtils.d.ts.map +1 -0
  97. package/dist/generators/shared/generatorUtils.js +116 -0
  98. package/dist/generators/shared/generatorUtils.js.map +1 -0
  99. package/dist/generators/shared/index.d.ts +5 -0
  100. package/dist/generators/shared/index.d.ts.map +1 -0
  101. package/dist/generators/shared/index.js +26 -0
  102. package/dist/generators/shared/index.js.map +1 -0
  103. package/dist/generators/shared/scaffoldStructures.d.ts +13 -0
  104. package/dist/generators/shared/scaffoldStructures.d.ts.map +1 -0
  105. package/dist/generators/shared/scaffoldStructures.js +30 -0
  106. package/dist/generators/shared/scaffoldStructures.js.map +1 -0
  107. package/dist/generators/shared/structures/agents/definitions.d.ts +18 -0
  108. package/dist/generators/shared/structures/agents/definitions.d.ts.map +1 -0
  109. package/dist/generators/shared/structures/agents/definitions.js +561 -0
  110. package/dist/generators/shared/structures/agents/definitions.js.map +1 -0
  111. package/dist/generators/shared/structures/agents/factory.d.ts +25 -0
  112. package/dist/generators/shared/structures/agents/factory.d.ts.map +1 -0
  113. package/dist/generators/shared/structures/agents/factory.js +138 -0
  114. package/dist/generators/shared/structures/agents/factory.js.map +1 -0
  115. package/dist/generators/shared/structures/agents/index.d.ts +6 -0
  116. package/dist/generators/shared/structures/agents/index.d.ts.map +1 -0
  117. package/dist/generators/shared/structures/agents/index.js +24 -0
  118. package/dist/generators/shared/structures/agents/index.js.map +1 -0
  119. package/dist/generators/shared/structures/documentation/apiReference.d.ts +3 -0
  120. package/dist/generators/shared/structures/documentation/apiReference.d.ts.map +1 -0
  121. package/dist/generators/shared/structures/documentation/apiReference.js +100 -0
  122. package/dist/generators/shared/structures/documentation/apiReference.js.map +1 -0
  123. package/dist/generators/shared/structures/documentation/architecture.d.ts +3 -0
  124. package/dist/generators/shared/structures/documentation/architecture.d.ts.map +1 -0
  125. package/dist/generators/shared/structures/documentation/architecture.js +176 -0
  126. package/dist/generators/shared/structures/documentation/architecture.js.map +1 -0
  127. package/dist/generators/shared/structures/documentation/dataFlow.d.ts +3 -0
  128. package/dist/generators/shared/structures/documentation/dataFlow.d.ts.map +1 -0
  129. package/dist/generators/shared/structures/documentation/dataFlow.js +107 -0
  130. package/dist/generators/shared/structures/documentation/dataFlow.js.map +1 -0
  131. package/dist/generators/shared/structures/documentation/glossary.d.ts +3 -0
  132. package/dist/generators/shared/structures/documentation/glossary.d.ts.map +1 -0
  133. package/dist/generators/shared/structures/documentation/glossary.js +91 -0
  134. package/dist/generators/shared/structures/documentation/glossary.js.map +1 -0
  135. package/dist/generators/shared/structures/documentation/index.d.ts +16 -0
  136. package/dist/generators/shared/structures/documentation/index.d.ts.map +1 -0
  137. package/dist/generators/shared/structures/documentation/index.js +31 -0
  138. package/dist/generators/shared/structures/documentation/index.js.map +1 -0
  139. package/dist/generators/shared/structures/documentation/migration.d.ts +3 -0
  140. package/dist/generators/shared/structures/documentation/migration.d.ts.map +1 -0
  141. package/dist/generators/shared/structures/documentation/migration.js +113 -0
  142. package/dist/generators/shared/structures/documentation/migration.js.map +1 -0
  143. package/dist/generators/shared/structures/documentation/onboarding.d.ts +3 -0
  144. package/dist/generators/shared/structures/documentation/onboarding.d.ts.map +1 -0
  145. package/dist/generators/shared/structures/documentation/onboarding.js +99 -0
  146. package/dist/generators/shared/structures/documentation/onboarding.js.map +1 -0
  147. package/dist/generators/shared/structures/documentation/projectOverview.d.ts +3 -0
  148. package/dist/generators/shared/structures/documentation/projectOverview.d.ts.map +1 -0
  149. package/dist/generators/shared/structures/documentation/projectOverview.js +162 -0
  150. package/dist/generators/shared/structures/documentation/projectOverview.js.map +1 -0
  151. package/dist/generators/shared/structures/documentation/security.d.ts +3 -0
  152. package/dist/generators/shared/structures/documentation/security.d.ts.map +1 -0
  153. package/dist/generators/shared/structures/documentation/security.js +100 -0
  154. package/dist/generators/shared/structures/documentation/security.js.map +1 -0
  155. package/dist/generators/shared/structures/documentation/testing.d.ts +3 -0
  156. package/dist/generators/shared/structures/documentation/testing.d.ts.map +1 -0
  157. package/dist/generators/shared/structures/documentation/testing.js +130 -0
  158. package/dist/generators/shared/structures/documentation/testing.js.map +1 -0
  159. package/dist/generators/shared/structures/documentation/tooling.d.ts +3 -0
  160. package/dist/generators/shared/structures/documentation/tooling.d.ts.map +1 -0
  161. package/dist/generators/shared/structures/documentation/tooling.js +114 -0
  162. package/dist/generators/shared/structures/documentation/tooling.js.map +1 -0
  163. package/dist/generators/shared/structures/documentation/troubleshooting.d.ts +3 -0
  164. package/dist/generators/shared/structures/documentation/troubleshooting.d.ts.map +1 -0
  165. package/dist/generators/shared/structures/documentation/troubleshooting.js +91 -0
  166. package/dist/generators/shared/structures/documentation/troubleshooting.js.map +1 -0
  167. package/dist/generators/shared/structures/documentation/workflow.d.ts +3 -0
  168. package/dist/generators/shared/structures/documentation/workflow.d.ts.map +1 -0
  169. package/dist/generators/shared/structures/documentation/workflow.js +116 -0
  170. package/dist/generators/shared/structures/documentation/workflow.js.map +1 -0
  171. package/dist/generators/shared/structures/index.d.ts +15 -0
  172. package/dist/generators/shared/structures/index.d.ts.map +1 -0
  173. package/dist/generators/shared/structures/index.js +37 -0
  174. package/dist/generators/shared/structures/index.js.map +1 -0
  175. package/dist/generators/shared/structures/plans/index.d.ts +5 -0
  176. package/dist/generators/shared/structures/plans/index.d.ts.map +1 -0
  177. package/dist/generators/shared/structures/plans/index.js +9 -0
  178. package/dist/generators/shared/structures/plans/index.js.map +1 -0
  179. package/dist/generators/shared/structures/plans/planStructure.d.ts +6 -0
  180. package/dist/generators/shared/structures/plans/planStructure.d.ts.map +1 -0
  181. package/dist/generators/shared/structures/plans/planStructure.js +65 -0
  182. package/dist/generators/shared/structures/plans/planStructure.js.map +1 -0
  183. package/dist/generators/shared/structures/registry.d.ts +18 -0
  184. package/dist/generators/shared/structures/registry.d.ts.map +1 -0
  185. package/dist/generators/shared/structures/registry.js +104 -0
  186. package/dist/generators/shared/structures/registry.js.map +1 -0
  187. package/dist/generators/shared/structures/serialization.d.ts +15 -0
  188. package/dist/generators/shared/structures/serialization.d.ts.map +1 -0
  189. package/dist/generators/shared/structures/serialization.js +124 -0
  190. package/dist/generators/shared/structures/serialization.js.map +1 -0
  191. package/dist/generators/shared/structures/skills/definitions.d.ts +25 -0
  192. package/dist/generators/shared/structures/skills/definitions.d.ts.map +1 -0
  193. package/dist/generators/shared/structures/skills/definitions.js +427 -0
  194. package/dist/generators/shared/structures/skills/definitions.js.map +1 -0
  195. package/dist/generators/shared/structures/skills/factory.d.ts +18 -0
  196. package/dist/generators/shared/structures/skills/factory.d.ts.map +1 -0
  197. package/dist/generators/shared/structures/skills/factory.js +79 -0
  198. package/dist/generators/shared/structures/skills/factory.js.map +1 -0
  199. package/dist/generators/shared/structures/skills/index.d.ts +6 -0
  200. package/dist/generators/shared/structures/skills/index.d.ts.map +1 -0
  201. package/dist/generators/shared/structures/skills/index.js +30 -0
  202. package/dist/generators/shared/structures/skills/index.js.map +1 -0
  203. package/dist/generators/shared/structures/types.d.ts +61 -0
  204. package/dist/generators/shared/structures/types.d.ts.map +1 -0
  205. package/dist/generators/shared/structures/types.js +6 -0
  206. package/dist/generators/shared/structures/types.js.map +1 -0
  207. package/dist/generators/shared/structures/validation.d.ts +13 -0
  208. package/dist/generators/shared/structures/validation.d.ts.map +1 -0
  209. package/dist/generators/shared/structures/validation.js +51 -0
  210. package/dist/generators/shared/structures/validation.js.map +1 -0
  211. package/dist/generators/skills/index.d.ts +7 -0
  212. package/dist/generators/skills/index.d.ts.map +1 -0
  213. package/dist/generators/skills/index.js +15 -0
  214. package/dist/generators/skills/index.js.map +1 -0
  215. package/dist/generators/skills/skillGenerator.d.ts +59 -0
  216. package/dist/generators/skills/skillGenerator.d.ts.map +1 -0
  217. package/dist/generators/skills/skillGenerator.js +199 -0
  218. package/dist/generators/skills/skillGenerator.js.map +1 -0
  219. package/dist/generators/skills/templates/indexTemplate.d.ts +13 -0
  220. package/dist/generators/skills/templates/indexTemplate.d.ts.map +1 -0
  221. package/dist/generators/skills/templates/indexTemplate.js +109 -0
  222. package/dist/generators/skills/templates/indexTemplate.js.map +1 -0
  223. package/dist/generators/skills/templates/skillTemplate.d.ts +30 -0
  224. package/dist/generators/skills/templates/skillTemplate.d.ts.map +1 -0
  225. package/dist/generators/skills/templates/skillTemplate.js +95 -0
  226. package/dist/generators/skills/templates/skillTemplate.js.map +1 -0
  227. package/dist/harness/index.d.ts +11 -0
  228. package/dist/harness/index.d.ts.map +1 -0
  229. package/dist/harness/index.js +33 -0
  230. package/dist/harness/index.js.map +1 -0
  231. package/dist/index.d.ts +3 -0
  232. package/dist/index.d.ts.map +1 -0
  233. package/dist/index.js +1205 -0
  234. package/dist/index.js.map +1 -0
  235. package/dist/mcp/bin.d.ts +19 -0
  236. package/dist/mcp/bin.d.ts.map +1 -0
  237. package/dist/mcp/bin.js +189 -0
  238. package/dist/mcp/bin.js.map +1 -0
  239. package/dist/mcp/index.d.ts +12 -0
  240. package/dist/mcp/index.d.ts.map +1 -0
  241. package/dist/mcp/index.js +28 -0
  242. package/dist/mcp/index.js.map +1 -0
  243. package/dist/prompts/defaults.d.ts +8 -0
  244. package/dist/prompts/defaults.d.ts.map +1 -0
  245. package/dist/prompts/defaults.js +108 -0
  246. package/dist/prompts/defaults.js.map +1 -0
  247. package/dist/services/autoFill/autoFillService.d.ts +52 -0
  248. package/dist/services/autoFill/autoFillService.d.ts.map +1 -0
  249. package/dist/services/autoFill/autoFillService.js +474 -0
  250. package/dist/services/autoFill/autoFillService.js.map +1 -0
  251. package/dist/services/autoFill/index.d.ts +2 -0
  252. package/dist/services/autoFill/index.d.ts.map +1 -0
  253. package/dist/services/autoFill/index.js +6 -0
  254. package/dist/services/autoFill/index.js.map +1 -0
  255. package/dist/services/cli/index.d.ts +8 -0
  256. package/dist/services/cli/index.d.ts.map +1 -0
  257. package/dist/services/cli/index.js +17 -0
  258. package/dist/services/cli/index.js.map +1 -0
  259. package/dist/services/cli/mcpInstallService.d.ts +57 -0
  260. package/dist/services/cli/mcpInstallService.d.ts.map +1 -0
  261. package/dist/services/cli/mcpInstallService.js +607 -0
  262. package/dist/services/cli/mcpInstallService.js.map +1 -0
  263. package/dist/services/cli/stateDetector.d.ts +55 -0
  264. package/dist/services/cli/stateDetector.d.ts.map +1 -0
  265. package/dist/services/cli/stateDetector.js +191 -0
  266. package/dist/services/cli/stateDetector.js.map +1 -0
  267. package/dist/services/export/contextExportService.d.ts +45 -0
  268. package/dist/services/export/contextExportService.d.ts.map +1 -0
  269. package/dist/services/export/contextExportService.js +161 -0
  270. package/dist/services/export/contextExportService.js.map +1 -0
  271. package/dist/services/export/exportRulesService.d.ts +77 -0
  272. package/dist/services/export/exportRulesService.d.ts.map +1 -0
  273. package/dist/services/export/exportRulesService.js +318 -0
  274. package/dist/services/export/exportRulesService.js.map +1 -0
  275. package/dist/services/export/index.d.ts +7 -0
  276. package/dist/services/export/index.d.ts.map +1 -0
  277. package/dist/services/export/index.js +12 -0
  278. package/dist/services/export/index.js.map +1 -0
  279. package/dist/services/export/skillExportService.d.ts +69 -0
  280. package/dist/services/export/skillExportService.d.ts.map +1 -0
  281. package/dist/services/export/skillExportService.js +265 -0
  282. package/dist/services/export/skillExportService.js.map +1 -0
  283. package/dist/services/harness/agentsService.d.ts +31 -0
  284. package/dist/services/harness/agentsService.d.ts.map +1 -0
  285. package/dist/services/harness/agentsService.js +135 -0
  286. package/dist/services/harness/agentsService.js.map +1 -0
  287. package/dist/services/harness/contextService.d.ts +167 -0
  288. package/dist/services/harness/contextService.d.ts.map +1 -0
  289. package/dist/services/harness/contextService.js +403 -0
  290. package/dist/services/harness/contextService.js.map +1 -0
  291. package/dist/services/harness/contextTools.d.ts +95 -0
  292. package/dist/services/harness/contextTools.d.ts.map +1 -0
  293. package/dist/services/harness/contextTools.js +990 -0
  294. package/dist/services/harness/contextTools.js.map +1 -0
  295. package/dist/services/harness/datasetService.d.ts +63 -0
  296. package/dist/services/harness/datasetService.d.ts.map +1 -0
  297. package/dist/services/harness/datasetService.js +261 -0
  298. package/dist/services/harness/datasetService.js.map +1 -0
  299. package/dist/services/harness/executionService.d.ts +74 -0
  300. package/dist/services/harness/executionService.d.ts.map +1 -0
  301. package/dist/services/harness/executionService.js +213 -0
  302. package/dist/services/harness/executionService.js.map +1 -0
  303. package/dist/services/harness/index.d.ts +21 -0
  304. package/dist/services/harness/index.d.ts.map +1 -0
  305. package/dist/services/harness/index.js +52 -0
  306. package/dist/services/harness/index.js.map +1 -0
  307. package/dist/services/harness/plansService.d.ts +45 -0
  308. package/dist/services/harness/plansService.d.ts.map +1 -0
  309. package/dist/services/harness/plansService.js +251 -0
  310. package/dist/services/harness/plansService.js.map +1 -0
  311. package/dist/services/harness/policyService.d.ts +116 -0
  312. package/dist/services/harness/policyService.d.ts.map +1 -0
  313. package/dist/services/harness/policyService.js +510 -0
  314. package/dist/services/harness/policyService.js.map +1 -0
  315. package/dist/services/harness/replayService.d.ts +63 -0
  316. package/dist/services/harness/replayService.d.ts.map +1 -0
  317. package/dist/services/harness/replayService.js +242 -0
  318. package/dist/services/harness/replayService.js.map +1 -0
  319. package/dist/services/harness/runtimeStateService.d.ts +120 -0
  320. package/dist/services/harness/runtimeStateService.d.ts.map +1 -0
  321. package/dist/services/harness/runtimeStateService.js +316 -0
  322. package/dist/services/harness/runtimeStateService.js.map +1 -0
  323. package/dist/services/harness/sensorCatalogService.d.ts +50 -0
  324. package/dist/services/harness/sensorCatalogService.d.ts.map +1 -0
  325. package/dist/services/harness/sensorCatalogService.js +308 -0
  326. package/dist/services/harness/sensorCatalogService.js.map +1 -0
  327. package/dist/services/harness/sensorsService.d.ts +64 -0
  328. package/dist/services/harness/sensorsService.d.ts.map +1 -0
  329. package/dist/services/harness/sensorsService.js +88 -0
  330. package/dist/services/harness/sensorsService.js.map +1 -0
  331. package/dist/services/harness/skillsService.d.ts +31 -0
  332. package/dist/services/harness/skillsService.d.ts.map +1 -0
  333. package/dist/services/harness/skillsService.js +296 -0
  334. package/dist/services/harness/skillsService.js.map +1 -0
  335. package/dist/services/harness/taskContractsService.d.ts +88 -0
  336. package/dist/services/harness/taskContractsService.d.ts.map +1 -0
  337. package/dist/services/harness/taskContractsService.js +210 -0
  338. package/dist/services/harness/taskContractsService.js.map +1 -0
  339. package/dist/services/harness/workflowStateService.d.ts +51 -0
  340. package/dist/services/harness/workflowStateService.d.ts.map +1 -0
  341. package/dist/services/harness/workflowStateService.js +215 -0
  342. package/dist/services/harness/workflowStateService.js.map +1 -0
  343. package/dist/services/import/agentsDetector.d.ts +12 -0
  344. package/dist/services/import/agentsDetector.d.ts.map +1 -0
  345. package/dist/services/import/agentsDetector.js +189 -0
  346. package/dist/services/import/agentsDetector.js.map +1 -0
  347. package/dist/services/import/importAgentsService.d.ts +14 -0
  348. package/dist/services/import/importAgentsService.d.ts.map +1 -0
  349. package/dist/services/import/importAgentsService.js +201 -0
  350. package/dist/services/import/importAgentsService.js.map +1 -0
  351. package/dist/services/import/importRulesService.d.ts +17 -0
  352. package/dist/services/import/importRulesService.d.ts.map +1 -0
  353. package/dist/services/import/importRulesService.js +228 -0
  354. package/dist/services/import/importRulesService.js.map +1 -0
  355. package/dist/services/import/index.d.ts +7 -0
  356. package/dist/services/import/index.d.ts.map +1 -0
  357. package/dist/services/import/index.js +28 -0
  358. package/dist/services/import/index.js.map +1 -0
  359. package/dist/services/import/presets.d.ts +20 -0
  360. package/dist/services/import/presets.d.ts.map +1 -0
  361. package/dist/services/import/presets.js +56 -0
  362. package/dist/services/import/presets.js.map +1 -0
  363. package/dist/services/import/rulesDetector.d.ts +16 -0
  364. package/dist/services/import/rulesDetector.d.ts.map +1 -0
  365. package/dist/services/import/rulesDetector.js +293 -0
  366. package/dist/services/import/rulesDetector.js.map +1 -0
  367. package/dist/services/import/types.d.ts +72 -0
  368. package/dist/services/import/types.d.ts.map +1 -0
  369. package/dist/services/import/types.js +3 -0
  370. package/dist/services/import/types.js.map +1 -0
  371. package/dist/services/mcp/actionLogger.d.ts +20 -0
  372. package/dist/services/mcp/actionLogger.d.ts.map +1 -0
  373. package/dist/services/mcp/actionLogger.js +189 -0
  374. package/dist/services/mcp/actionLogger.js.map +1 -0
  375. package/dist/services/mcp/gateway/agent.d.ts +17 -0
  376. package/dist/services/mcp/gateway/agent.d.ts.map +1 -0
  377. package/dist/services/mcp/gateway/agent.js +58 -0
  378. package/dist/services/mcp/gateway/agent.js.map +1 -0
  379. package/dist/services/mcp/gateway/context.d.ts +21 -0
  380. package/dist/services/mcp/gateway/context.d.ts.map +1 -0
  381. package/dist/services/mcp/gateway/context.js +137 -0
  382. package/dist/services/mcp/gateway/context.js.map +1 -0
  383. package/dist/services/mcp/gateway/explore.d.ts +16 -0
  384. package/dist/services/mcp/gateway/explore.d.ts.map +1 -0
  385. package/dist/services/mcp/gateway/explore.js +60 -0
  386. package/dist/services/mcp/gateway/explore.js.map +1 -0
  387. package/dist/services/mcp/gateway/harness.d.ts +7 -0
  388. package/dist/services/mcp/gateway/harness.d.ts.map +1 -0
  389. package/dist/services/mcp/gateway/harness.js +337 -0
  390. package/dist/services/mcp/gateway/harness.js.map +1 -0
  391. package/dist/services/mcp/gateway/index.d.ts +25 -0
  392. package/dist/services/mcp/gateway/index.d.ts.map +1 -0
  393. package/dist/services/mcp/gateway/index.js +55 -0
  394. package/dist/services/mcp/gateway/index.js.map +1 -0
  395. package/dist/services/mcp/gateway/metrics.d.ts +56 -0
  396. package/dist/services/mcp/gateway/metrics.d.ts.map +1 -0
  397. package/dist/services/mcp/gateway/metrics.js +153 -0
  398. package/dist/services/mcp/gateway/metrics.js.map +1 -0
  399. package/dist/services/mcp/gateway/plan.d.ts +18 -0
  400. package/dist/services/mcp/gateway/plan.d.ts.map +1 -0
  401. package/dist/services/mcp/gateway/plan.js +85 -0
  402. package/dist/services/mcp/gateway/plan.js.map +1 -0
  403. package/dist/services/mcp/gateway/response.d.ts +45 -0
  404. package/dist/services/mcp/gateway/response.d.ts.map +1 -0
  405. package/dist/services/mcp/gateway/response.js +111 -0
  406. package/dist/services/mcp/gateway/response.js.map +1 -0
  407. package/dist/services/mcp/gateway/shared.d.ts +7 -0
  408. package/dist/services/mcp/gateway/shared.d.ts.map +1 -0
  409. package/dist/services/mcp/gateway/shared.js +13 -0
  410. package/dist/services/mcp/gateway/shared.js.map +1 -0
  411. package/dist/services/mcp/gateway/skill.d.ts +17 -0
  412. package/dist/services/mcp/gateway/skill.d.ts.map +1 -0
  413. package/dist/services/mcp/gateway/skill.js +56 -0
  414. package/dist/services/mcp/gateway/skill.js.map +1 -0
  415. package/dist/services/mcp/gateway/sync.d.ts +17 -0
  416. package/dist/services/mcp/gateway/sync.d.ts.map +1 -0
  417. package/dist/services/mcp/gateway/sync.js +219 -0
  418. package/dist/services/mcp/gateway/sync.js.map +1 -0
  419. package/dist/services/mcp/gateway/types.d.ts +187 -0
  420. package/dist/services/mcp/gateway/types.d.ts.map +1 -0
  421. package/dist/services/mcp/gateway/types.js +12 -0
  422. package/dist/services/mcp/gateway/types.js.map +1 -0
  423. package/dist/services/mcp/gateway/workflowAdvance.d.ts +25 -0
  424. package/dist/services/mcp/gateway/workflowAdvance.d.ts.map +1 -0
  425. package/dist/services/mcp/gateway/workflowAdvance.js +161 -0
  426. package/dist/services/mcp/gateway/workflowAdvance.js.map +1 -0
  427. package/dist/services/mcp/gateway/workflowInit.d.ts +28 -0
  428. package/dist/services/mcp/gateway/workflowInit.d.ts.map +1 -0
  429. package/dist/services/mcp/gateway/workflowInit.js +219 -0
  430. package/dist/services/mcp/gateway/workflowInit.js.map +1 -0
  431. package/dist/services/mcp/gateway/workflowManage.d.ts +47 -0
  432. package/dist/services/mcp/gateway/workflowManage.d.ts.map +1 -0
  433. package/dist/services/mcp/gateway/workflowManage.js +367 -0
  434. package/dist/services/mcp/gateway/workflowManage.js.map +1 -0
  435. package/dist/services/mcp/gateway/workflowStatus.d.ts +17 -0
  436. package/dist/services/mcp/gateway/workflowStatus.d.ts.map +1 -0
  437. package/dist/services/mcp/gateway/workflowStatus.js +93 -0
  438. package/dist/services/mcp/gateway/workflowStatus.js.map +1 -0
  439. package/dist/services/mcp/gatewayTools.d.ts +15 -0
  440. package/dist/services/mcp/gatewayTools.d.ts.map +1 -0
  441. package/dist/services/mcp/gatewayTools.js +39 -0
  442. package/dist/services/mcp/gatewayTools.js.map +1 -0
  443. package/dist/services/mcp/index.d.ts +15 -0
  444. package/dist/services/mcp/index.d.ts.map +1 -0
  445. package/dist/services/mcp/index.js +34 -0
  446. package/dist/services/mcp/index.js.map +1 -0
  447. package/dist/services/mcp/mcpInstallService.d.ts +8 -0
  448. package/dist/services/mcp/mcpInstallService.d.ts.map +1 -0
  449. package/dist/services/mcp/mcpInstallService.js +12 -0
  450. package/dist/services/mcp/mcpInstallService.js.map +1 -0
  451. package/dist/services/mcp/mcpServer.d.ts +100 -0
  452. package/dist/services/mcp/mcpServer.d.ts.map +1 -0
  453. package/dist/services/mcp/mcpServer.js +1036 -0
  454. package/dist/services/mcp/mcpServer.js.map +1 -0
  455. package/dist/services/qa/index.d.ts +9 -0
  456. package/dist/services/qa/index.d.ts.map +1 -0
  457. package/dist/services/qa/index.js +15 -0
  458. package/dist/services/qa/index.js.map +1 -0
  459. package/dist/services/qa/patternInferer.d.ts +12 -0
  460. package/dist/services/qa/patternInferer.d.ts.map +1 -0
  461. package/dist/services/qa/patternInferer.js +17 -0
  462. package/dist/services/qa/patternInferer.js.map +1 -0
  463. package/dist/services/qa/qaService.d.ts +103 -0
  464. package/dist/services/qa/qaService.d.ts.map +1 -0
  465. package/dist/services/qa/qaService.js +838 -0
  466. package/dist/services/qa/qaService.js.map +1 -0
  467. package/dist/services/qa/topicDetector.d.ts +54 -0
  468. package/dist/services/qa/topicDetector.d.ts.map +1 -0
  469. package/dist/services/qa/topicDetector.js +306 -0
  470. package/dist/services/qa/topicDetector.js.map +1 -0
  471. package/dist/services/quickSync/index.d.ts +3 -0
  472. package/dist/services/quickSync/index.d.ts.map +1 -0
  473. package/dist/services/quickSync/index.js +7 -0
  474. package/dist/services/quickSync/index.js.map +1 -0
  475. package/dist/services/quickSync/quickSyncService.d.ts +70 -0
  476. package/dist/services/quickSync/quickSyncService.d.ts.map +1 -0
  477. package/dist/services/quickSync/quickSyncService.js +263 -0
  478. package/dist/services/quickSync/quickSyncService.js.map +1 -0
  479. package/dist/services/report/index.d.ts +3 -0
  480. package/dist/services/report/index.d.ts.map +1 -0
  481. package/dist/services/report/index.js +6 -0
  482. package/dist/services/report/index.js.map +1 -0
  483. package/dist/services/report/reportService.d.ts +131 -0
  484. package/dist/services/report/reportService.d.ts.map +1 -0
  485. package/dist/services/report/reportService.js +372 -0
  486. package/dist/services/report/reportService.js.map +1 -0
  487. package/dist/services/reverseSync/importSkillsService.d.ts +47 -0
  488. package/dist/services/reverseSync/importSkillsService.d.ts.map +1 -0
  489. package/dist/services/reverseSync/importSkillsService.js +365 -0
  490. package/dist/services/reverseSync/importSkillsService.js.map +1 -0
  491. package/dist/services/reverseSync/index.d.ts +12 -0
  492. package/dist/services/reverseSync/index.d.ts.map +1 -0
  493. package/dist/services/reverseSync/index.js +49 -0
  494. package/dist/services/reverseSync/index.js.map +1 -0
  495. package/dist/services/reverseSync/presets.d.ts +51 -0
  496. package/dist/services/reverseSync/presets.d.ts.map +1 -0
  497. package/dist/services/reverseSync/presets.js +77 -0
  498. package/dist/services/reverseSync/presets.js.map +1 -0
  499. package/dist/services/reverseSync/reverseQuickSyncService.d.ts +37 -0
  500. package/dist/services/reverseSync/reverseQuickSyncService.d.ts.map +1 -0
  501. package/dist/services/reverseSync/reverseQuickSyncService.js +269 -0
  502. package/dist/services/reverseSync/reverseQuickSyncService.js.map +1 -0
  503. package/dist/services/reverseSync/skillsDetector.d.ts +36 -0
  504. package/dist/services/reverseSync/skillsDetector.d.ts.map +1 -0
  505. package/dist/services/reverseSync/skillsDetector.js +287 -0
  506. package/dist/services/reverseSync/skillsDetector.js.map +1 -0
  507. package/dist/services/reverseSync/toolDetector.d.ts +36 -0
  508. package/dist/services/reverseSync/toolDetector.d.ts.map +1 -0
  509. package/dist/services/reverseSync/toolDetector.js +177 -0
  510. package/dist/services/reverseSync/toolDetector.js.map +1 -0
  511. package/dist/services/reverseSync/types.d.ts +203 -0
  512. package/dist/services/reverseSync/types.d.ts.map +1 -0
  513. package/dist/services/reverseSync/types.js +9 -0
  514. package/dist/services/reverseSync/types.js.map +1 -0
  515. package/dist/services/semantic/codebaseAnalyzer.d.ts +62 -0
  516. package/dist/services/semantic/codebaseAnalyzer.d.ts.map +1 -0
  517. package/dist/services/semantic/codebaseAnalyzer.js +1071 -0
  518. package/dist/services/semantic/codebaseAnalyzer.js.map +1 -0
  519. package/dist/services/semantic/contextBuilder.d.ts +86 -0
  520. package/dist/services/semantic/contextBuilder.d.ts.map +1 -0
  521. package/dist/services/semantic/contextBuilder.js +641 -0
  522. package/dist/services/semantic/contextBuilder.js.map +1 -0
  523. package/dist/services/semantic/contextCache.d.ts +67 -0
  524. package/dist/services/semantic/contextCache.d.ts.map +1 -0
  525. package/dist/services/semantic/contextCache.js +158 -0
  526. package/dist/services/semantic/contextCache.js.map +1 -0
  527. package/dist/services/semantic/index.d.ts +13 -0
  528. package/dist/services/semantic/index.d.ts.map +1 -0
  529. package/dist/services/semantic/index.js +35 -0
  530. package/dist/services/semantic/index.js.map +1 -0
  531. package/dist/services/semantic/lsp/index.d.ts +2 -0
  532. package/dist/services/semantic/lsp/index.d.ts.map +1 -0
  533. package/dist/services/semantic/lsp/index.js +6 -0
  534. package/dist/services/semantic/lsp/index.js.map +1 -0
  535. package/dist/services/semantic/lsp/lspLayer.d.ts +32 -0
  536. package/dist/services/semantic/lsp/lspLayer.d.ts.map +1 -0
  537. package/dist/services/semantic/lsp/lspLayer.js +378 -0
  538. package/dist/services/semantic/lsp/lspLayer.js.map +1 -0
  539. package/dist/services/semantic/semanticSnapshotService.d.ts +86 -0
  540. package/dist/services/semantic/semanticSnapshotService.d.ts.map +1 -0
  541. package/dist/services/semantic/semanticSnapshotService.js +573 -0
  542. package/dist/services/semantic/semanticSnapshotService.js.map +1 -0
  543. package/dist/services/semantic/treeSitter/index.d.ts +2 -0
  544. package/dist/services/semantic/treeSitter/index.d.ts.map +1 -0
  545. package/dist/services/semantic/treeSitter/index.js +6 -0
  546. package/dist/services/semantic/treeSitter/index.js.map +1 -0
  547. package/dist/services/semantic/treeSitter/treeSitterLayer.d.ts +37 -0
  548. package/dist/services/semantic/treeSitter/treeSitterLayer.d.ts.map +1 -0
  549. package/dist/services/semantic/treeSitter/treeSitterLayer.js +518 -0
  550. package/dist/services/semantic/treeSitter/treeSitterLayer.js.map +1 -0
  551. package/dist/services/semantic/types.d.ts +172 -0
  552. package/dist/services/semantic/types.d.ts.map +1 -0
  553. package/dist/services/semantic/types.js +33 -0
  554. package/dist/services/semantic/types.js.map +1 -0
  555. package/dist/services/shared/contentTypeRegistry.d.ts +66 -0
  556. package/dist/services/shared/contentTypeRegistry.d.ts.map +1 -0
  557. package/dist/services/shared/contentTypeRegistry.js +122 -0
  558. package/dist/services/shared/contentTypeRegistry.js.map +1 -0
  559. package/dist/services/shared/contextLayout.d.ts +18 -0
  560. package/dist/services/shared/contextLayout.d.ts.map +1 -0
  561. package/dist/services/shared/contextLayout.js +139 -0
  562. package/dist/services/shared/contextLayout.js.map +1 -0
  563. package/dist/services/shared/contextRootResolver.d.ts +57 -0
  564. package/dist/services/shared/contextRootResolver.d.ts.map +1 -0
  565. package/dist/services/shared/contextRootResolver.js +102 -0
  566. package/dist/services/shared/contextRootResolver.js.map +1 -0
  567. package/dist/services/shared/executionContext.d.ts +38 -0
  568. package/dist/services/shared/executionContext.d.ts.map +1 -0
  569. package/dist/services/shared/executionContext.js +39 -0
  570. package/dist/services/shared/executionContext.js.map +1 -0
  571. package/dist/services/shared/globPatterns.d.ts +48 -0
  572. package/dist/services/shared/globPatterns.d.ts.map +1 -0
  573. package/dist/services/shared/globPatterns.js +110 -0
  574. package/dist/services/shared/globPatterns.js.map +1 -0
  575. package/dist/services/shared/index.d.ts +15 -0
  576. package/dist/services/shared/index.d.ts.map +1 -0
  577. package/dist/services/shared/index.js +94 -0
  578. package/dist/services/shared/index.js.map +1 -0
  579. package/dist/services/shared/pathHelpers.d.ts +85 -0
  580. package/dist/services/shared/pathHelpers.d.ts.map +1 -0
  581. package/dist/services/shared/pathHelpers.js +187 -0
  582. package/dist/services/shared/pathHelpers.js.map +1 -0
  583. package/dist/services/shared/toolRegistry.d.ts +141 -0
  584. package/dist/services/shared/toolRegistry.d.ts.map +1 -0
  585. package/dist/services/shared/toolRegistry.js +559 -0
  586. package/dist/services/shared/toolRegistry.js.map +1 -0
  587. package/dist/services/shared/types.d.ts +68 -0
  588. package/dist/services/shared/types.d.ts.map +1 -0
  589. package/dist/services/shared/types.js +44 -0
  590. package/dist/services/shared/types.js.map +1 -0
  591. package/dist/services/shared/uiHelpers.d.ts +70 -0
  592. package/dist/services/shared/uiHelpers.d.ts.map +1 -0
  593. package/dist/services/shared/uiHelpers.js +131 -0
  594. package/dist/services/shared/uiHelpers.js.map +1 -0
  595. package/dist/services/stack/index.d.ts +6 -0
  596. package/dist/services/stack/index.d.ts.map +1 -0
  597. package/dist/services/stack/index.js +25 -0
  598. package/dist/services/stack/index.js.map +1 -0
  599. package/dist/services/stack/projectTypeClassifier.d.ts +59 -0
  600. package/dist/services/stack/projectTypeClassifier.d.ts.map +1 -0
  601. package/dist/services/stack/projectTypeClassifier.js +242 -0
  602. package/dist/services/stack/projectTypeClassifier.js.map +1 -0
  603. package/dist/services/stack/scaffoldFilter.d.ts +75 -0
  604. package/dist/services/stack/scaffoldFilter.d.ts.map +1 -0
  605. package/dist/services/stack/scaffoldFilter.js +222 -0
  606. package/dist/services/stack/scaffoldFilter.js.map +1 -0
  607. package/dist/services/stack/stackDetector.d.ts +43 -0
  608. package/dist/services/stack/stackDetector.d.ts.map +1 -0
  609. package/dist/services/stack/stackDetector.js +406 -0
  610. package/dist/services/stack/stackDetector.js.map +1 -0
  611. package/dist/services/state/index.d.ts +2 -0
  612. package/dist/services/state/index.d.ts.map +1 -0
  613. package/dist/services/state/index.js +6 -0
  614. package/dist/services/state/index.js.map +1 -0
  615. package/dist/services/state/stateDetector.d.ts +8 -0
  616. package/dist/services/state/stateDetector.d.ts.map +1 -0
  617. package/dist/services/state/stateDetector.js +16 -0
  618. package/dist/services/state/stateDetector.js.map +1 -0
  619. package/dist/services/sync/index.d.ts +6 -0
  620. package/dist/services/sync/index.d.ts.map +1 -0
  621. package/dist/services/sync/index.js +16 -0
  622. package/dist/services/sync/index.js.map +1 -0
  623. package/dist/services/sync/markdownReferenceHandler.d.ts +3 -0
  624. package/dist/services/sync/markdownReferenceHandler.d.ts.map +1 -0
  625. package/dist/services/sync/markdownReferenceHandler.js +138 -0
  626. package/dist/services/sync/markdownReferenceHandler.js.map +1 -0
  627. package/dist/services/sync/presets.d.ts +9 -0
  628. package/dist/services/sync/presets.d.ts.map +1 -0
  629. package/dist/services/sync/presets.js +53 -0
  630. package/dist/services/sync/presets.js.map +1 -0
  631. package/dist/services/sync/symlinkHandler.d.ts +7 -0
  632. package/dist/services/sync/symlinkHandler.d.ts.map +1 -0
  633. package/dist/services/sync/symlinkHandler.js +134 -0
  634. package/dist/services/sync/symlinkHandler.js.map +1 -0
  635. package/dist/services/sync/syncService.d.ts +23 -0
  636. package/dist/services/sync/syncService.d.ts.map +1 -0
  637. package/dist/services/sync/syncService.js +254 -0
  638. package/dist/services/sync/syncService.js.map +1 -0
  639. package/dist/services/sync/types.d.ts +70 -0
  640. package/dist/services/sync/types.d.ts.map +1 -0
  641. package/dist/services/sync/types.js +3 -0
  642. package/dist/services/sync/types.js.map +1 -0
  643. package/dist/services/workflow/autoAdvance.d.ts +38 -0
  644. package/dist/services/workflow/autoAdvance.d.ts.map +1 -0
  645. package/dist/services/workflow/autoAdvance.js +219 -0
  646. package/dist/services/workflow/autoAdvance.js.map +1 -0
  647. package/dist/services/workflow/index.d.ts +6 -0
  648. package/dist/services/workflow/index.d.ts.map +1 -0
  649. package/dist/services/workflow/index.js +12 -0
  650. package/dist/services/workflow/index.js.map +1 -0
  651. package/dist/services/workflow/workflowService.d.ts +219 -0
  652. package/dist/services/workflow/workflowService.d.ts.map +1 -0
  653. package/dist/services/workflow/workflowService.js +698 -0
  654. package/dist/services/workflow/workflowService.js.map +1 -0
  655. package/dist/types/scaffoldFrontmatter.d.ts +145 -0
  656. package/dist/types/scaffoldFrontmatter.d.ts.map +1 -0
  657. package/dist/types/scaffoldFrontmatter.js +172 -0
  658. package/dist/types/scaffoldFrontmatter.js.map +1 -0
  659. package/dist/types.d.ts +61 -0
  660. package/dist/types.d.ts.map +1 -0
  661. package/dist/types.js +3 -0
  662. package/dist/types.js.map +1 -0
  663. package/dist/utils/cliUI.d.ts +26 -0
  664. package/dist/utils/cliUI.d.ts.map +1 -0
  665. package/dist/utils/cliUI.js +216 -0
  666. package/dist/utils/cliUI.js.map +1 -0
  667. package/dist/utils/fileMapper.d.ts +13 -0
  668. package/dist/utils/fileMapper.d.ts.map +1 -0
  669. package/dist/utils/fileMapper.js +165 -0
  670. package/dist/utils/fileMapper.js.map +1 -0
  671. package/dist/utils/frontMatter.d.ts +104 -0
  672. package/dist/utils/frontMatter.d.ts.map +1 -0
  673. package/dist/utils/frontMatter.js +325 -0
  674. package/dist/utils/frontMatter.js.map +1 -0
  675. package/dist/utils/gitService.d.ts +76 -0
  676. package/dist/utils/gitService.d.ts.map +1 -0
  677. package/dist/utils/gitService.js +564 -0
  678. package/dist/utils/gitService.js.map +1 -0
  679. package/dist/utils/gitignoreManager.d.ts +69 -0
  680. package/dist/utils/gitignoreManager.d.ts.map +1 -0
  681. package/dist/utils/gitignoreManager.js +211 -0
  682. package/dist/utils/gitignoreManager.js.map +1 -0
  683. package/dist/utils/i18n.d.ts +530 -0
  684. package/dist/utils/i18n.d.ts.map +1 -0
  685. package/dist/utils/i18n.js +1179 -0
  686. package/dist/utils/i18n.js.map +1 -0
  687. package/dist/utils/pathSecurity.d.ts +55 -0
  688. package/dist/utils/pathSecurity.d.ts.map +1 -0
  689. package/dist/utils/pathSecurity.js +132 -0
  690. package/dist/utils/pathSecurity.js.map +1 -0
  691. package/dist/utils/processShutdown.d.ts +20 -0
  692. package/dist/utils/processShutdown.d.ts.map +1 -0
  693. package/dist/utils/processShutdown.js +47 -0
  694. package/dist/utils/processShutdown.js.map +1 -0
  695. package/dist/utils/prompts/configSummary.d.ts +7 -0
  696. package/dist/utils/prompts/configSummary.d.ts.map +1 -0
  697. package/dist/utils/prompts/configSummary.js +35 -0
  698. package/dist/utils/prompts/configSummary.js.map +1 -0
  699. package/dist/utils/prompts/index.d.ts +27 -0
  700. package/dist/utils/prompts/index.d.ts.map +1 -0
  701. package/dist/utils/prompts/index.js +112 -0
  702. package/dist/utils/prompts/index.js.map +1 -0
  703. package/dist/utils/prompts/smartDefaults.d.ts +6 -0
  704. package/dist/utils/prompts/smartDefaults.d.ts.map +1 -0
  705. package/dist/utils/prompts/smartDefaults.js +82 -0
  706. package/dist/utils/prompts/smartDefaults.js.map +1 -0
  707. package/dist/utils/prompts/types.d.ts +27 -0
  708. package/dist/utils/prompts/types.d.ts.map +1 -0
  709. package/dist/utils/prompts/types.js +3 -0
  710. package/dist/utils/prompts/types.js.map +1 -0
  711. package/dist/utils/splashScreen.d.ts +14 -0
  712. package/dist/utils/splashScreen.d.ts.map +1 -0
  713. package/dist/utils/splashScreen.js +106 -0
  714. package/dist/utils/splashScreen.js.map +1 -0
  715. package/dist/utils/theme.d.ts +69 -0
  716. package/dist/utils/theme.d.ts.map +1 -0
  717. package/dist/utils/theme.js +97 -0
  718. package/dist/utils/theme.js.map +1 -0
  719. package/dist/utils/themedPrompt.d.ts +46 -0
  720. package/dist/utils/themedPrompt.d.ts.map +1 -0
  721. package/dist/utils/themedPrompt.js +47 -0
  722. package/dist/utils/themedPrompt.js.map +1 -0
  723. package/dist/utils/versionChecker.d.ts +15 -0
  724. package/dist/utils/versionChecker.d.ts.map +1 -0
  725. package/dist/utils/versionChecker.js +58 -0
  726. package/dist/utils/versionChecker.js.map +1 -0
  727. package/dist/version.d.ts +10 -0
  728. package/dist/version.d.ts.map +1 -0
  729. package/dist/version.js +50 -0
  730. package/dist/version.js.map +1 -0
  731. package/dist/workflow/agents/agentRegistry.d.ts +82 -0
  732. package/dist/workflow/agents/agentRegistry.d.ts.map +1 -0
  733. package/dist/workflow/agents/agentRegistry.js +205 -0
  734. package/dist/workflow/agents/agentRegistry.js.map +1 -0
  735. package/dist/workflow/agents/index.d.ts +7 -0
  736. package/dist/workflow/agents/index.d.ts.map +1 -0
  737. package/dist/workflow/agents/index.js +14 -0
  738. package/dist/workflow/agents/index.js.map +1 -0
  739. package/dist/workflow/collaboration.d.ts +110 -0
  740. package/dist/workflow/collaboration.d.ts.map +1 -0
  741. package/dist/workflow/collaboration.js +301 -0
  742. package/dist/workflow/collaboration.js.map +1 -0
  743. package/dist/workflow/errors.d.ts +48 -0
  744. package/dist/workflow/errors.d.ts.map +1 -0
  745. package/dist/workflow/errors.js +52 -0
  746. package/dist/workflow/errors.js.map +1 -0
  747. package/dist/workflow/gates/gateChecker.d.ts +93 -0
  748. package/dist/workflow/gates/gateChecker.d.ts.map +1 -0
  749. package/dist/workflow/gates/gateChecker.js +197 -0
  750. package/dist/workflow/gates/gateChecker.js.map +1 -0
  751. package/dist/workflow/gates/index.d.ts +7 -0
  752. package/dist/workflow/gates/index.d.ts.map +1 -0
  753. package/dist/workflow/gates/index.js +13 -0
  754. package/dist/workflow/gates/index.js.map +1 -0
  755. package/dist/workflow/index.d.ts +27 -0
  756. package/dist/workflow/index.d.ts.map +1 -0
  757. package/dist/workflow/index.js +140 -0
  758. package/dist/workflow/index.js.map +1 -0
  759. package/dist/workflow/orchestration/agentOrchestrator.d.ts +68 -0
  760. package/dist/workflow/orchestration/agentOrchestrator.d.ts.map +1 -0
  761. package/dist/workflow/orchestration/agentOrchestrator.js +280 -0
  762. package/dist/workflow/orchestration/agentOrchestrator.js.map +1 -0
  763. package/dist/workflow/orchestration/documentLinker.d.ts +100 -0
  764. package/dist/workflow/orchestration/documentLinker.d.ts.map +1 -0
  765. package/dist/workflow/orchestration/documentLinker.js +266 -0
  766. package/dist/workflow/orchestration/documentLinker.js.map +1 -0
  767. package/dist/workflow/orchestration/index.d.ts +9 -0
  768. package/dist/workflow/orchestration/index.d.ts.map +1 -0
  769. package/dist/workflow/orchestration/index.js +25 -0
  770. package/dist/workflow/orchestration/index.js.map +1 -0
  771. package/dist/workflow/orchestrator.d.ts +188 -0
  772. package/dist/workflow/orchestrator.d.ts.map +1 -0
  773. package/dist/workflow/orchestrator.js +495 -0
  774. package/dist/workflow/orchestrator.js.map +1 -0
  775. package/dist/workflow/phases.d.ts +64 -0
  776. package/dist/workflow/phases.d.ts.map +1 -0
  777. package/dist/workflow/phases.js +151 -0
  778. package/dist/workflow/phases.js.map +1 -0
  779. package/dist/workflow/plans/index.d.ts +8 -0
  780. package/dist/workflow/plans/index.d.ts.map +1 -0
  781. package/dist/workflow/plans/index.js +27 -0
  782. package/dist/workflow/plans/index.js.map +1 -0
  783. package/dist/workflow/plans/planLinker.d.ts +208 -0
  784. package/dist/workflow/plans/planLinker.d.ts.map +1 -0
  785. package/dist/workflow/plans/planLinker.js +1093 -0
  786. package/dist/workflow/plans/planLinker.js.map +1 -0
  787. package/dist/workflow/plans/types.d.ts +237 -0
  788. package/dist/workflow/plans/types.d.ts.map +1 -0
  789. package/dist/workflow/plans/types.js +25 -0
  790. package/dist/workflow/plans/types.js.map +1 -0
  791. package/dist/workflow/prevcConfig.d.ts +27 -0
  792. package/dist/workflow/prevcConfig.d.ts.map +1 -0
  793. package/dist/workflow/prevcConfig.js +153 -0
  794. package/dist/workflow/prevcConfig.js.map +1 -0
  795. package/dist/workflow/roles.d.ts +50 -0
  796. package/dist/workflow/roles.d.ts.map +1 -0
  797. package/dist/workflow/roles.js +118 -0
  798. package/dist/workflow/roles.js.map +1 -0
  799. package/dist/workflow/scaling.d.ts +45 -0
  800. package/dist/workflow/scaling.d.ts.map +1 -0
  801. package/dist/workflow/scaling.js +215 -0
  802. package/dist/workflow/scaling.js.map +1 -0
  803. package/dist/workflow/skills/frontmatter.d.ts +32 -0
  804. package/dist/workflow/skills/frontmatter.d.ts.map +1 -0
  805. package/dist/workflow/skills/frontmatter.js +117 -0
  806. package/dist/workflow/skills/frontmatter.js.map +1 -0
  807. package/dist/workflow/skills/index.d.ts +10 -0
  808. package/dist/workflow/skills/index.d.ts.map +1 -0
  809. package/dist/workflow/skills/index.js +24 -0
  810. package/dist/workflow/skills/index.js.map +1 -0
  811. package/dist/workflow/skills/skillRegistry.d.ts +67 -0
  812. package/dist/workflow/skills/skillRegistry.d.ts.map +1 -0
  813. package/dist/workflow/skills/skillRegistry.js +279 -0
  814. package/dist/workflow/skills/skillRegistry.js.map +1 -0
  815. package/dist/workflow/skills/skillTemplates.d.ts +20 -0
  816. package/dist/workflow/skills/skillTemplates.d.ts.map +1 -0
  817. package/dist/workflow/skills/skillTemplates.js +150 -0
  818. package/dist/workflow/skills/skillTemplates.js.map +1 -0
  819. package/dist/workflow/skills/types.d.ts +72 -0
  820. package/dist/workflow/skills/types.d.ts.map +1 -0
  821. package/dist/workflow/skills/types.js +48 -0
  822. package/dist/workflow/skills/types.js.map +1 -0
  823. package/dist/workflow/status/statusManager.d.ts +142 -0
  824. package/dist/workflow/status/statusManager.d.ts.map +1 -0
  825. package/dist/workflow/status/statusManager.js +971 -0
  826. package/dist/workflow/status/statusManager.js.map +1 -0
  827. package/dist/workflow/status/templates.d.ts +49 -0
  828. package/dist/workflow/status/templates.d.ts.map +1 -0
  829. package/dist/workflow/status/templates.js +162 -0
  830. package/dist/workflow/status/templates.js.map +1 -0
  831. package/dist/workflow/types.d.ts +314 -0
  832. package/dist/workflow/types.d.ts.map +1 -0
  833. package/dist/workflow/types.js +24 -0
  834. package/dist/workflow/types.js.map +1 -0
  835. package/package.json +45 -0
@@ -0,0 +1,1093 @@
1
+ "use strict";
2
+ /**
3
+ * Plan Linker
4
+ *
5
+ * Links implementation plans to the PREVC workflow system.
6
+ * Provides bidirectional sync between plan progress and workflow phases.
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.PlanLinker = void 0;
43
+ exports.createPlanLinker = createPlanLinker;
44
+ const path = __importStar(require("path"));
45
+ const fs = __importStar(require("fs-extra"));
46
+ const types_1 = require("./types");
47
+ const agents_1 = require("../agents");
48
+ const gitService_1 = require("../../utils/gitService");
49
+ /**
50
+ * Plan Linker class
51
+ *
52
+ * Responsible for:
53
+ * - Linking plans to PREVC workflow
54
+ * - Parsing plan frontmatter and content
55
+ * - Tracking plan progress
56
+ * - Recording decisions
57
+ *
58
+ * Agent discovery is delegated to AgentRegistry (SRP).
59
+ */
60
+ class PlanLinker {
61
+ constructor(repoPath, statusManager, autoCommitOnPhaseComplete = true) {
62
+ this.repoPath = repoPath;
63
+ this.contextPath = path.join(repoPath, '.context');
64
+ this.plansPath = path.join(this.contextPath, 'plans');
65
+ this.workflowPath = path.join(this.contextPath, 'workflow');
66
+ this.agentRegistry = (0, agents_1.createAgentRegistry)(repoPath);
67
+ this.statusManager = statusManager;
68
+ this.autoCommitOnPhaseComplete = autoCommitOnPhaseComplete;
69
+ }
70
+ /**
71
+ * Create a PlanLinker with the given repository path
72
+ */
73
+ static async create(repoPath = process.cwd(), statusManager, autoCommitOnPhaseComplete = true) {
74
+ return new PlanLinker(repoPath, statusManager, autoCommitOnPhaseComplete);
75
+ }
76
+ /**
77
+ * Ensure workflow plan index exists
78
+ */
79
+ async ensureWorkflowPlanIndex() {
80
+ const plansFile = path.join(this.workflowPath, 'plans.json');
81
+ if (await fs.pathExists(plansFile)) {
82
+ return;
83
+ }
84
+ await fs.ensureDir(this.workflowPath);
85
+ const initialPlans = { active: [], completed: [] };
86
+ await fs.writeFile(plansFile, JSON.stringify(initialPlans, null, 2), 'utf-8');
87
+ }
88
+ /**
89
+ * Discover all available agents (built-in + custom)
90
+ * Delegates to AgentRegistry
91
+ */
92
+ async discoverAgents() {
93
+ const discovered = await this.agentRegistry.discoverAll();
94
+ return discovered.all.map(a => ({
95
+ type: a.type,
96
+ path: a.path,
97
+ isCustom: a.isCustom,
98
+ }));
99
+ }
100
+ /**
101
+ * Get agent info including custom agents
102
+ * Delegates to AgentRegistry
103
+ */
104
+ async getAgentInfo(agentType) {
105
+ return this.agentRegistry.getAgentMetadata(agentType);
106
+ }
107
+ /**
108
+ * Link a plan to the current workflow
109
+ */
110
+ async linkPlan(planSlug) {
111
+ const planPath = path.join(this.plansPath, `${planSlug}.md`);
112
+ if (!await fs.pathExists(planPath)) {
113
+ return null;
114
+ }
115
+ const content = await fs.readFile(planPath, 'utf-8');
116
+ const planInfo = this.parsePlanFile(content, planSlug);
117
+ const ref = {
118
+ slug: planSlug,
119
+ path: `plans/${planSlug}.md`,
120
+ title: planInfo.title,
121
+ summary: planInfo.summary,
122
+ linkedAt: new Date().toISOString(),
123
+ status: 'active',
124
+ };
125
+ // Update workflow plans tracking
126
+ await this.addPlanToWorkflow(ref);
127
+ return ref;
128
+ }
129
+ /**
130
+ * Get all linked plans for the current workflow
131
+ */
132
+ async getLinkedPlans() {
133
+ const plansFile = path.join(this.workflowPath, 'plans.json');
134
+ if (!await fs.pathExists(plansFile)) {
135
+ return { active: [], completed: [] };
136
+ }
137
+ const content = await fs.readFile(plansFile, 'utf-8');
138
+ try {
139
+ return JSON.parse(content) || { active: [], completed: [] };
140
+ }
141
+ catch {
142
+ return { active: [], completed: [] };
143
+ }
144
+ }
145
+ /**
146
+ * Update a linked plan reference in workflow tracking.
147
+ */
148
+ async updatePlanReference(planSlug, updater) {
149
+ const plans = await this.getLinkedPlans();
150
+ const updateBucket = (bucket) => {
151
+ const index = bucket.findIndex((ref) => ref.slug === planSlug);
152
+ if (index === -1) {
153
+ return null;
154
+ }
155
+ const updated = updater({ ...bucket[index] });
156
+ bucket[index] = updated;
157
+ return updated;
158
+ };
159
+ const updatedRef = updateBucket(plans.active) ?? updateBucket(plans.completed);
160
+ if (!updatedRef) {
161
+ return null;
162
+ }
163
+ const plansFile = path.join(this.workflowPath, 'plans.json');
164
+ await fs.ensureDir(path.dirname(plansFile));
165
+ await fs.writeJson(plansFile, plans, { spaces: 2 });
166
+ return updatedRef;
167
+ }
168
+ /**
169
+ * Get detailed plan with workflow mapping
170
+ */
171
+ async getLinkedPlan(planSlug) {
172
+ const plans = await this.getLinkedPlans();
173
+ const ref = [...plans.active, ...plans.completed].find(p => p.slug === planSlug);
174
+ if (!ref) {
175
+ return null;
176
+ }
177
+ const planPath = path.join(this.contextPath, ref.path);
178
+ if (!await fs.pathExists(planPath)) {
179
+ return null;
180
+ }
181
+ const content = await fs.readFile(planPath, 'utf-8');
182
+ return this.parsePlanToLinked(content, ref);
183
+ }
184
+ /**
185
+ * Get plans for a specific PREVC phase
186
+ */
187
+ async getPlansForPhase(phase) {
188
+ const plans = await this.getLinkedPlans();
189
+ const linkedPlans = [];
190
+ for (const ref of plans.active) {
191
+ const plan = await this.getLinkedPlan(ref.slug);
192
+ if (plan) {
193
+ const hasPhase = plan.phases.some(p => p.prevcPhase === phase);
194
+ if (hasPhase) {
195
+ linkedPlans.push(plan);
196
+ }
197
+ }
198
+ }
199
+ return linkedPlans;
200
+ }
201
+ /**
202
+ * Update plan phase status and sync with workflow
203
+ */
204
+ async updatePlanPhase(planSlug, phaseId, status) {
205
+ const trackingFile = path.join(this.workflowPath, 'plan-tracking', `${planSlug}.json`);
206
+ let tracking = {};
207
+ if (await fs.pathExists(trackingFile)) {
208
+ const content = await fs.readFile(trackingFile, 'utf-8');
209
+ try {
210
+ tracking = JSON.parse(content) || {};
211
+ }
212
+ catch {
213
+ tracking = {};
214
+ }
215
+ }
216
+ // Update phase tracking
217
+ if (!tracking.phases) {
218
+ tracking.phases = {};
219
+ }
220
+ tracking.phases[phaseId] = {
221
+ status,
222
+ updatedAt: new Date().toISOString(),
223
+ };
224
+ // Calculate progress
225
+ const plan = await this.getLinkedPlan(planSlug);
226
+ if (plan) {
227
+ const totalPhases = plan.phases.length;
228
+ const completedPhases = plan.phases.filter(p => tracking.phases?.[p.id]?.status === 'completed').length;
229
+ tracking.progress = totalPhases > 0 ? Math.round((completedPhases / totalPhases) * 100) : 0;
230
+ }
231
+ // Save tracking
232
+ await fs.ensureDir(path.dirname(trackingFile));
233
+ await fs.writeFile(trackingFile, JSON.stringify(tracking, null, 2), 'utf-8');
234
+ // Log phase update to workflow execution history
235
+ if (this.statusManager) {
236
+ const currentPhase = await this.statusManager.getCurrentPhase();
237
+ await this.statusManager.addHistoryEntry({
238
+ phase: currentPhase,
239
+ action: 'plan_phase_updated',
240
+ plan: planSlug,
241
+ description: `Plan phase ${phaseId} updated to ${status}`,
242
+ });
243
+ }
244
+ return true;
245
+ }
246
+ /**
247
+ * Record a decision in the plan
248
+ */
249
+ async recordDecision(planSlug, decision) {
250
+ const trackingFile = path.join(this.workflowPath, 'plan-tracking', `${planSlug}.json`);
251
+ let tracking = {};
252
+ if (await fs.pathExists(trackingFile)) {
253
+ const content = await fs.readFile(trackingFile, 'utf-8');
254
+ try {
255
+ tracking = JSON.parse(content) || {};
256
+ }
257
+ catch {
258
+ tracking = {};
259
+ }
260
+ }
261
+ if (!tracking.decisions) {
262
+ tracking.decisions = [];
263
+ }
264
+ const fullDecision = {
265
+ ...decision,
266
+ id: `dec-${Date.now()}`,
267
+ decidedAt: new Date().toISOString(),
268
+ };
269
+ tracking.decisions.push(fullDecision);
270
+ await fs.ensureDir(path.dirname(trackingFile));
271
+ await fs.writeFile(trackingFile, JSON.stringify(tracking, null, 2), 'utf-8');
272
+ // Log decision to workflow execution history
273
+ if (this.statusManager) {
274
+ const currentPhase = await this.statusManager.getCurrentPhase();
275
+ await this.statusManager.addHistoryEntry({
276
+ phase: decision.phase || currentPhase,
277
+ action: 'decision_recorded',
278
+ plan: planSlug,
279
+ description: `Decision recorded: ${decision.title}`,
280
+ });
281
+ }
282
+ return fullDecision;
283
+ }
284
+ /**
285
+ * Get current phase mapping for workflow
286
+ */
287
+ getPhaseMappingForWorkflow(plan, currentPrevcPhase) {
288
+ return plan.phases.filter(p => p.prevcPhase === currentPrevcPhase);
289
+ }
290
+ /**
291
+ * Check if plan has pending work for a PREVC phase
292
+ */
293
+ hasPendingWorkForPhase(plan, phase) {
294
+ const phasesInPrevc = plan.phases.filter(p => p.prevcPhase === phase);
295
+ return phasesInPrevc.some(p => p.status === 'pending' || p.status === 'in_progress');
296
+ }
297
+ /**
298
+ * Get plan progress summary
299
+ */
300
+ async getPlanProgress(planSlug) {
301
+ const plan = await this.getLinkedPlan(planSlug);
302
+ if (!plan) {
303
+ return { overall: 0, byPhase: {} };
304
+ }
305
+ const byPhase = {
306
+ P: { total: 0, completed: 0, percentage: 0 },
307
+ R: { total: 0, completed: 0, percentage: 0 },
308
+ E: { total: 0, completed: 0, percentage: 0 },
309
+ V: { total: 0, completed: 0, percentage: 0 },
310
+ C: { total: 0, completed: 0, percentage: 0 },
311
+ };
312
+ for (const phase of plan.phases) {
313
+ byPhase[phase.prevcPhase].total++;
314
+ if (phase.status === 'completed') {
315
+ byPhase[phase.prevcPhase].completed++;
316
+ }
317
+ }
318
+ // Calculate percentages
319
+ for (const key of Object.keys(byPhase)) {
320
+ const { total, completed } = byPhase[key];
321
+ byPhase[key].percentage = total > 0 ? Math.round((completed / total) * 100) : 0;
322
+ }
323
+ return {
324
+ overall: plan.progress,
325
+ byPhase,
326
+ };
327
+ }
328
+ /**
329
+ * Update individual step status within a plan phase
330
+ */
331
+ async updatePlanStep(planSlug, phaseId, stepIndex, status, options) {
332
+ const trackingFile = path.join(this.workflowPath, 'plan-tracking', `${planSlug}.json`);
333
+ const now = new Date().toISOString();
334
+ // Load existing tracking or create new
335
+ let tracking = await this.loadPlanTracking(planSlug);
336
+ if (!tracking) {
337
+ tracking = {
338
+ planSlug,
339
+ progress: 0,
340
+ phases: {},
341
+ decisions: [],
342
+ lastUpdated: now,
343
+ };
344
+ }
345
+ // Ensure phase exists in tracking
346
+ if (!tracking.phases[phaseId]) {
347
+ tracking.phases[phaseId] = {
348
+ phaseId,
349
+ status: 'in_progress',
350
+ startedAt: now,
351
+ steps: [],
352
+ };
353
+ }
354
+ // Find or create step entry
355
+ let step = tracking.phases[phaseId].steps.find(s => s.stepIndex === stepIndex);
356
+ if (!step) {
357
+ // Get step description from the plan if possible
358
+ const plan = await this.getLinkedPlan(planSlug);
359
+ const planPhase = plan?.phases.find(p => p.id === phaseId);
360
+ const planStep = planPhase?.steps.find(s => s.order === stepIndex);
361
+ step = {
362
+ stepIndex,
363
+ description: planStep?.description || `Step ${stepIndex}`,
364
+ status: 'pending',
365
+ };
366
+ tracking.phases[phaseId].steps.push(step);
367
+ }
368
+ // Update step status and timestamps
369
+ step.status = status;
370
+ if (status === 'in_progress' && !step.startedAt) {
371
+ step.startedAt = now;
372
+ }
373
+ if (status === 'completed') {
374
+ step.completedAt = now;
375
+ }
376
+ if (options?.output) {
377
+ step.output = options.output;
378
+ }
379
+ if (options?.notes) {
380
+ step.notes = options.notes;
381
+ }
382
+ // Update phase status based on steps
383
+ const phaseSteps = tracking.phases[phaseId].steps;
384
+ const allStepsCompleted = phaseSteps.length > 0 && phaseSteps.every(s => s.status === 'completed');
385
+ const anyStepInProgress = phaseSteps.some(s => s.status === 'in_progress');
386
+ if (allStepsCompleted) {
387
+ tracking.phases[phaseId].status = 'completed';
388
+ tracking.phases[phaseId].completedAt = now;
389
+ // Auto-commit on phase completion
390
+ if (this.autoCommitOnPhaseComplete) {
391
+ await this.autoCommitPhase(planSlug, phaseId);
392
+ }
393
+ }
394
+ else if (anyStepInProgress || phaseSteps.some(s => s.status === 'completed')) {
395
+ tracking.phases[phaseId].status = 'in_progress';
396
+ }
397
+ // Recalculate overall progress
398
+ tracking.progress = this.calculateStepProgress(tracking);
399
+ tracking.lastUpdated = now;
400
+ // Save tracking
401
+ await fs.ensureDir(path.dirname(trackingFile));
402
+ await fs.writeFile(trackingFile, JSON.stringify(tracking, null, 2), 'utf-8');
403
+ // Log step to workflow execution history (breadcrumb trail)
404
+ if (this.statusManager) {
405
+ const action = status === 'completed' ? 'step_completed' :
406
+ status === 'in_progress' ? 'step_started' :
407
+ status === 'skipped' ? 'step_skipped' : null;
408
+ if (action) {
409
+ await this.statusManager.addStepHistoryEntry({
410
+ action,
411
+ plan: planSlug,
412
+ planPhase: phaseId,
413
+ stepIndex,
414
+ stepDescription: step.description,
415
+ output: options?.output,
416
+ notes: options?.notes,
417
+ });
418
+ }
419
+ }
420
+ // Auto-sync to markdown
421
+ await this.syncPlanMarkdown(planSlug);
422
+ return true;
423
+ }
424
+ /**
425
+ * Update approval metadata for a linked plan.
426
+ * Keeps the workflow plan index and plan tracking projection in sync.
427
+ */
428
+ async updatePlanApproval(planSlug, approval) {
429
+ const plansFile = path.join(this.workflowPath, 'plans.json');
430
+ if (!await fs.pathExists(plansFile)) {
431
+ return null;
432
+ }
433
+ const plans = await this.getLinkedPlans();
434
+ let updatedRef = null;
435
+ let found = false;
436
+ const applyApproval = (ref) => {
437
+ found = true;
438
+ const nextRef = {
439
+ ...ref,
440
+ approval_status: approval.approvalStatus,
441
+ approved_at: approval.approvedAt,
442
+ approved_by: approval.approvedBy,
443
+ };
444
+ updatedRef = nextRef;
445
+ return nextRef;
446
+ };
447
+ plans.active = plans.active.map((ref) => (ref.slug === planSlug ? applyApproval(ref) : ref));
448
+ plans.completed = plans.completed.map((ref) => (ref.slug === planSlug ? applyApproval(ref) : ref));
449
+ if (!found || !updatedRef) {
450
+ return null;
451
+ }
452
+ await fs.ensureDir(this.workflowPath);
453
+ await fs.writeFile(plansFile, JSON.stringify(plans, null, 2), 'utf-8');
454
+ const tracking = await this.loadPlanTracking(planSlug);
455
+ if (tracking) {
456
+ tracking.approvalStatus = approval.approvalStatus;
457
+ tracking.approvedAt = approval.approvedAt;
458
+ tracking.approvedBy = approval.approvedBy;
459
+ tracking.lastUpdated = approval.approvedAt || new Date().toISOString();
460
+ const trackingFile = path.join(this.workflowPath, 'plan-tracking', `${planSlug}.json`);
461
+ await fs.ensureDir(path.dirname(trackingFile));
462
+ await fs.writeFile(trackingFile, JSON.stringify(tracking, null, 2), 'utf-8');
463
+ }
464
+ return updatedRef;
465
+ }
466
+ /**
467
+ * Get detailed execution status for a plan including all steps
468
+ */
469
+ async getPlanExecutionStatus(planSlug) {
470
+ return this.loadPlanTracking(planSlug);
471
+ }
472
+ /**
473
+ * Sync tracking data back to the plan markdown file
474
+ * Updates checkboxes, timestamps, and adds execution history section
475
+ */
476
+ async syncPlanMarkdown(planSlug) {
477
+ const planPath = path.join(this.plansPath, `${planSlug}.md`);
478
+ const tracking = await this.loadPlanTracking(planSlug);
479
+ if (!tracking || !await fs.pathExists(planPath)) {
480
+ return false;
481
+ }
482
+ let content = await fs.readFile(planPath, 'utf-8');
483
+ // Update frontmatter with progress and phase statuses
484
+ content = this.updateFrontmatterProgress(content, tracking);
485
+ // Update step checkboxes in markdown body
486
+ content = this.updateStepCheckboxes(content, tracking);
487
+ // Add/update execution history section
488
+ content = this.updateExecutionHistorySection(content, tracking);
489
+ await fs.writeFile(planPath, content, 'utf-8');
490
+ return true;
491
+ }
492
+ /**
493
+ * Record commit information for a completed phase
494
+ */
495
+ async recordPhaseCommit(planSlug, phaseId, commitInfo) {
496
+ const trackingFile = path.join(this.workflowPath, 'plan-tracking', `${planSlug}.json`);
497
+ const now = new Date().toISOString();
498
+ // Load existing tracking
499
+ let tracking = await this.loadPlanTracking(planSlug);
500
+ if (!tracking) {
501
+ return false;
502
+ }
503
+ // Ensure phase exists in tracking
504
+ if (!tracking.phases[phaseId]) {
505
+ return false;
506
+ }
507
+ // Record commit info
508
+ tracking.phases[phaseId].commitHash = commitInfo.hash;
509
+ tracking.phases[phaseId].commitShortHash = commitInfo.shortHash;
510
+ tracking.phases[phaseId].committedAt = now;
511
+ if (commitInfo.committedBy) {
512
+ tracking.phases[phaseId].committedBy = commitInfo.committedBy;
513
+ }
514
+ tracking.lastUpdated = now;
515
+ // Save tracking
516
+ await fs.ensureDir(path.dirname(trackingFile));
517
+ await fs.writeFile(trackingFile, JSON.stringify(tracking, null, 2), 'utf-8');
518
+ // Sync to markdown
519
+ await this.syncPlanMarkdown(planSlug);
520
+ return true;
521
+ }
522
+ /**
523
+ * Load plan tracking from JSON file
524
+ */
525
+ async loadPlanTracking(planSlug) {
526
+ const trackingFile = path.join(this.workflowPath, 'plan-tracking', `${planSlug}.json`);
527
+ if (!await fs.pathExists(trackingFile)) {
528
+ return null;
529
+ }
530
+ try {
531
+ const content = await fs.readFile(trackingFile, 'utf-8');
532
+ const data = JSON.parse(content);
533
+ // Migrate old format to new format if needed
534
+ if (!data.phases || typeof data.phases !== 'object') {
535
+ // Old format had phases as simple status objects
536
+ const migratedPhases = {};
537
+ if (data.phases) {
538
+ for (const [phaseId, phaseData] of Object.entries(data.phases)) {
539
+ migratedPhases[phaseId] = {
540
+ phaseId,
541
+ status: phaseData.status,
542
+ startedAt: phaseData.updatedAt,
543
+ completedAt: phaseData.status === 'completed' ? phaseData.updatedAt : undefined,
544
+ steps: [],
545
+ };
546
+ }
547
+ }
548
+ return {
549
+ planSlug,
550
+ progress: data.progress || 0,
551
+ phases: migratedPhases,
552
+ decisions: data.decisions || [],
553
+ lastUpdated: data.lastUpdated || new Date().toISOString(),
554
+ };
555
+ }
556
+ return data;
557
+ }
558
+ catch {
559
+ return null;
560
+ }
561
+ }
562
+ /**
563
+ * Calculate progress based on completed steps across all phases
564
+ */
565
+ calculateStepProgress(tracking) {
566
+ let totalSteps = 0;
567
+ let completedSteps = 0;
568
+ for (const phase of Object.values(tracking.phases)) {
569
+ totalSteps += phase.steps.length;
570
+ completedSteps += phase.steps.filter(s => s.status === 'completed').length;
571
+ }
572
+ return totalSteps > 0 ? Math.round((completedSteps / totalSteps) * 100) : 0;
573
+ }
574
+ /**
575
+ * Update frontmatter with progress percentage
576
+ */
577
+ updateFrontmatterProgress(content, tracking) {
578
+ // Check if frontmatter exists
579
+ if (!content.startsWith('---')) {
580
+ return content;
581
+ }
582
+ const endIndex = content.indexOf('---', 3);
583
+ if (endIndex === -1) {
584
+ return content;
585
+ }
586
+ let frontmatter = content.slice(0, endIndex);
587
+ const body = content.slice(endIndex);
588
+ // Update or add progress field
589
+ if (frontmatter.includes('progress:')) {
590
+ frontmatter = frontmatter.replace(/progress:\s*\d+/, `progress: ${tracking.progress}`);
591
+ }
592
+ else {
593
+ // Add progress after status line or at end of frontmatter
594
+ if (frontmatter.includes('status:')) {
595
+ frontmatter = frontmatter.replace(/(status:\s*\w+)/, `$1\nprogress: ${tracking.progress}`);
596
+ }
597
+ else {
598
+ frontmatter = frontmatter.trimEnd() + `\nprogress: ${tracking.progress}\n`;
599
+ }
600
+ }
601
+ // Update or add lastUpdated field
602
+ if (frontmatter.includes('lastUpdated:')) {
603
+ frontmatter = frontmatter.replace(/lastUpdated:\s*"[^"]*"/, `lastUpdated: "${tracking.lastUpdated}"`);
604
+ }
605
+ else {
606
+ frontmatter = frontmatter.trimEnd() + `\nlastUpdated: "${tracking.lastUpdated}"\n`;
607
+ }
608
+ return frontmatter + body;
609
+ }
610
+ /**
611
+ * Update step checkboxes in markdown body
612
+ */
613
+ updateStepCheckboxes(content, tracking) {
614
+ // Match numbered steps with optional existing checkboxes
615
+ // Patterns like: "1. **Step text**" or "1. [ ] **Step text**" or "1. [x] **Step text**"
616
+ const stepPattern = /^(\d+)\.\s*(?:\[[ x]\]\s*)?(.+?)(?:\s*\*\([^)]*\)\*)?$/gm;
617
+ // Track which phase we're currently in by finding phase headers
618
+ let currentPhaseId = null;
619
+ // Split content into lines for processing
620
+ const lines = content.split('\n');
621
+ const updatedLines = [];
622
+ for (const line of lines) {
623
+ // Check for phase header
624
+ const phaseMatch = line.match(/^###\s+Phase\s+(\d+)/);
625
+ if (phaseMatch) {
626
+ currentPhaseId = `phase-${phaseMatch[1]}`;
627
+ updatedLines.push(line);
628
+ continue;
629
+ }
630
+ // Check for numbered step
631
+ const stepMatch = line.match(/^(\d+)\.\s*(?:\[[ x]\]\s*)?(.+?)(?:\s*\*\([^)]*\)\*)?$/);
632
+ if (stepMatch && currentPhaseId) {
633
+ const stepNum = parseInt(stepMatch[1], 10);
634
+ const stepText = stepMatch[2].trim();
635
+ // Find step in tracking
636
+ const phaseTracking = tracking.phases[currentPhaseId];
637
+ const stepTracking = phaseTracking?.steps.find(s => s.stepIndex === stepNum);
638
+ if (stepTracking) {
639
+ const checkMark = stepTracking.status === 'completed' ? '[x]' : '[ ]';
640
+ let timestamp = '';
641
+ if (stepTracking.completedAt) {
642
+ timestamp = ` *(completed: ${stepTracking.completedAt})*`;
643
+ }
644
+ else if (stepTracking.startedAt && stepTracking.status === 'in_progress') {
645
+ timestamp = ` *(in progress since: ${stepTracking.startedAt})*`;
646
+ }
647
+ updatedLines.push(`${stepNum}. ${checkMark} ${stepText}${timestamp}`);
648
+ continue;
649
+ }
650
+ }
651
+ updatedLines.push(line);
652
+ }
653
+ return updatedLines.join('\n');
654
+ }
655
+ /**
656
+ * Add or update execution history section in markdown
657
+ */
658
+ updateExecutionHistorySection(content, tracking) {
659
+ const historySection = this.generateExecutionHistoryMarkdown(tracking);
660
+ // Check if section exists
661
+ const historyMarker = '## Execution History';
662
+ const existingIndex = content.indexOf(historyMarker);
663
+ if (existingIndex > -1) {
664
+ // Find the end of the section (next ## header or end of file)
665
+ const afterHistory = content.slice(existingIndex);
666
+ const nextSectionMatch = afterHistory.match(/\n## [^E]/);
667
+ if (nextSectionMatch && nextSectionMatch.index) {
668
+ const endIndex = existingIndex + nextSectionMatch.index;
669
+ content = content.slice(0, existingIndex) + historySection + content.slice(endIndex);
670
+ }
671
+ else {
672
+ // History is the last section
673
+ content = content.slice(0, existingIndex) + historySection;
674
+ }
675
+ }
676
+ else {
677
+ // Add before "## Evidence" or "## Rollback" or at end
678
+ const insertPoints = ['## Evidence', '## Rollback'];
679
+ let insertIndex = -1;
680
+ for (const marker of insertPoints) {
681
+ const idx = content.indexOf(marker);
682
+ if (idx > -1) {
683
+ insertIndex = idx;
684
+ break;
685
+ }
686
+ }
687
+ if (insertIndex > -1) {
688
+ content = content.slice(0, insertIndex) + historySection + '\n\n' + content.slice(insertIndex);
689
+ }
690
+ else {
691
+ content = content.trimEnd() + '\n\n' + historySection;
692
+ }
693
+ }
694
+ return content;
695
+ }
696
+ /**
697
+ * Generate execution history markdown section
698
+ */
699
+ generateExecutionHistoryMarkdown(tracking) {
700
+ const lines = [
701
+ '## Execution History',
702
+ '',
703
+ `> Last updated: ${tracking.lastUpdated} | Progress: ${tracking.progress}%`,
704
+ '',
705
+ ];
706
+ // Sort phases by ID
707
+ const sortedPhases = Object.entries(tracking.phases).sort(([a], [b]) => a.localeCompare(b));
708
+ for (const [phaseId, phase] of sortedPhases) {
709
+ const statusIcon = phase.status === 'completed' ? '[DONE]' :
710
+ phase.status === 'in_progress' ? '[IN PROGRESS]' :
711
+ phase.status === 'skipped' ? '[SKIPPED]' :
712
+ '[PENDING]';
713
+ lines.push(`### ${phaseId} ${statusIcon}`);
714
+ if (phase.startedAt) {
715
+ lines.push(`- Started: ${phase.startedAt}`);
716
+ }
717
+ if (phase.completedAt) {
718
+ lines.push(`- Completed: ${phase.completedAt}`);
719
+ }
720
+ if (phase.steps.length > 0) {
721
+ lines.push('');
722
+ const sortedSteps = [...phase.steps].sort((a, b) => a.stepIndex - b.stepIndex);
723
+ for (const step of sortedSteps) {
724
+ const check = step.status === 'completed' ? 'x' : ' ';
725
+ let line = `- [${check}] Step ${step.stepIndex}: ${step.description}`;
726
+ if (step.completedAt) {
727
+ line += ` *(${step.completedAt})*`;
728
+ }
729
+ else if (step.startedAt && step.status === 'in_progress') {
730
+ line += ` *(in progress)*`;
731
+ }
732
+ lines.push(line);
733
+ if (step.output) {
734
+ lines.push(` - Output: ${step.output}`);
735
+ }
736
+ if (step.notes) {
737
+ lines.push(` - Notes: ${step.notes}`);
738
+ }
739
+ }
740
+ }
741
+ lines.push('');
742
+ }
743
+ return lines.join('\n');
744
+ }
745
+ /**
746
+ * Parse plan markdown file to extract info
747
+ */
748
+ parsePlanFile(content, slug) {
749
+ const titleMatch = content.match(/^#\s+(.+?)(?:\s+Plan)?$/m);
750
+ const summaryMatch = content.match(/^>\s*(.+)$/m);
751
+ return {
752
+ title: titleMatch?.[1] || slug,
753
+ summary: summaryMatch?.[1],
754
+ };
755
+ }
756
+ /**
757
+ * Parse frontmatter from plan content
758
+ */
759
+ parseFrontMatter(content) {
760
+ // Check if content starts with frontmatter
761
+ if (!content.startsWith('---')) {
762
+ return null;
763
+ }
764
+ const endIndex = content.indexOf('---', 3);
765
+ if (endIndex === -1) {
766
+ return null;
767
+ }
768
+ const frontMatterContent = content.slice(3, endIndex).trim();
769
+ const result = {
770
+ agents: [],
771
+ docs: [],
772
+ phases: [],
773
+ };
774
+ // Parse agents section
775
+ const agentsMatch = frontMatterContent.match(/agents:\s*\n((?:\s+-[^\n]+\n?)+)/);
776
+ if (agentsMatch) {
777
+ const agentLines = agentsMatch[1].split('\n').filter(l => l.trim());
778
+ let currentAgent = null;
779
+ for (const line of agentLines) {
780
+ const typeMatch = line.match(/type:\s*"([^"]+)"/);
781
+ const roleMatch = line.match(/role:\s*"([^"]+)"/);
782
+ if (typeMatch) {
783
+ if (currentAgent) {
784
+ result.agents.push(currentAgent);
785
+ }
786
+ currentAgent = { type: typeMatch[1] };
787
+ }
788
+ if (roleMatch && currentAgent) {
789
+ currentAgent.role = roleMatch[1];
790
+ }
791
+ }
792
+ if (currentAgent) {
793
+ result.agents.push(currentAgent);
794
+ }
795
+ }
796
+ // Parse docs section
797
+ const docsMatch = frontMatterContent.match(/docs:\s*\n((?:\s+-[^\n]+\n?)+)/);
798
+ if (docsMatch) {
799
+ const docLines = docsMatch[1].split('\n').filter(l => l.trim());
800
+ for (const line of docLines) {
801
+ const docMatch = line.match(/-\s*"([^"]+)"/);
802
+ if (docMatch) {
803
+ result.docs.push(docMatch[1]);
804
+ }
805
+ }
806
+ }
807
+ // Parse phases section
808
+ const phasesMatch = frontMatterContent.match(/phases:\s*\n((?:\s+-[^\n]+\n?)+)/);
809
+ if (phasesMatch) {
810
+ const phaseLines = phasesMatch[1].split('\n').filter(l => l.trim());
811
+ let currentPhase = null;
812
+ for (const line of phaseLines) {
813
+ const idMatch = line.match(/id:\s*"([^"]+)"/);
814
+ const nameMatch = line.match(/name:\s*"([^"]+)"/);
815
+ const prevcMatch = line.match(/prevc:\s*"([^"]+)"/);
816
+ if (idMatch) {
817
+ if (currentPhase && currentPhase.id && currentPhase.name && currentPhase.prevc) {
818
+ result.phases.push(currentPhase);
819
+ }
820
+ currentPhase = { id: idMatch[1], name: '', prevc: '' };
821
+ }
822
+ if (nameMatch && currentPhase) {
823
+ currentPhase.name = nameMatch[1];
824
+ }
825
+ if (prevcMatch && currentPhase) {
826
+ currentPhase.prevc = prevcMatch[1];
827
+ }
828
+ }
829
+ if (currentPhase && currentPhase.id && currentPhase.name && currentPhase.prevc) {
830
+ result.phases.push(currentPhase);
831
+ }
832
+ }
833
+ return result;
834
+ }
835
+ /**
836
+ * Parse plan file into LinkedPlan structure
837
+ */
838
+ parsePlanToLinked(content, ref) {
839
+ // Try frontmatter first, then fallback to body parsing
840
+ const frontMatter = this.parseFrontMatter(content);
841
+ const phases = frontMatter?.phases.length
842
+ ? frontMatter.phases.map(p => ({
843
+ id: p.id,
844
+ name: p.name,
845
+ prevcPhase: p.prevc,
846
+ steps: [],
847
+ status: 'pending',
848
+ }))
849
+ : this.extractPhasesFromBody(content);
850
+ const agents = frontMatter?.agents.length
851
+ ? frontMatter.agents.map(a => a.type)
852
+ : this.extractAgentsFromBody(content);
853
+ const docs = frontMatter?.docs.length
854
+ ? frontMatter.docs
855
+ : this.extractDocsFromBody(content);
856
+ const decisions = this.extractDecisions();
857
+ const completedPhases = phases.filter(p => p.status === 'completed').length;
858
+ const progress = phases.length > 0 ? Math.round((completedPhases / phases.length) * 100) : 0;
859
+ const currentPhase = phases.find(p => p.status === 'in_progress')?.id;
860
+ return {
861
+ ref,
862
+ phases,
863
+ decisions,
864
+ risks: [],
865
+ agents,
866
+ docs,
867
+ progress,
868
+ currentPhase,
869
+ // Include full agent lineup with roles from frontmatter
870
+ agentLineup: frontMatter?.agents || agents.map(a => ({ type: a })),
871
+ };
872
+ }
873
+ /**
874
+ * Extract phases from plan markdown body (fallback)
875
+ */
876
+ extractPhasesFromBody(content) {
877
+ const phases = [];
878
+ // Match "### Phase N — Name" or "### Phase N - Name"
879
+ const phaseRegex = /###\s+Phase\s+(\d+)\s*[—-]\s*(.+)/g;
880
+ let match;
881
+ while ((match = phaseRegex.exec(content)) !== null) {
882
+ const phaseNum = match[1];
883
+ const phaseName = match[2].trim();
884
+ const phaseId = `phase-${phaseNum}`;
885
+ // Determine PREVC mapping based on phase name
886
+ const lowerName = phaseName.toLowerCase();
887
+ let prevcPhase = 'E'; // Default to Execution
888
+ for (const [keyword, phase] of Object.entries(types_1.PLAN_PHASE_TO_PREVC)) {
889
+ if (lowerName.includes(keyword)) {
890
+ prevcPhase = phase;
891
+ break;
892
+ }
893
+ }
894
+ phases.push({
895
+ id: phaseId,
896
+ name: phaseName,
897
+ prevcPhase,
898
+ steps: [],
899
+ status: 'pending',
900
+ });
901
+ }
902
+ // If no phases found, create default structure
903
+ if (phases.length === 0) {
904
+ phases.push({ id: 'phase-1', name: 'Discovery & Alignment', prevcPhase: 'P', steps: [], status: 'pending' }, { id: 'phase-2', name: 'Implementation', prevcPhase: 'E', steps: [], status: 'pending' }, { id: 'phase-3', name: 'Validation & Handoff', prevcPhase: 'V', steps: [], status: 'pending' });
905
+ }
906
+ return phases;
907
+ }
908
+ /**
909
+ * Extract decisions from plan content
910
+ */
911
+ extractDecisions() {
912
+ // Decisions are typically recorded during execution, start empty
913
+ return [];
914
+ }
915
+ /**
916
+ * Extract agents from plan body (fallback)
917
+ */
918
+ extractAgentsFromBody(content) {
919
+ const agents = [];
920
+ // Match agent references in table rows
921
+ const agentRegex = /\[([^\]]+)\]\(\.\.\/agents\/([^)]+)\.md\)/g;
922
+ let match;
923
+ while ((match = agentRegex.exec(content)) !== null) {
924
+ const agentType = match[2];
925
+ if (!agents.includes(agentType)) {
926
+ agents.push(agentType);
927
+ }
928
+ }
929
+ return agents;
930
+ }
931
+ /**
932
+ * Extract documentation references from plan body (fallback)
933
+ */
934
+ extractDocsFromBody(content) {
935
+ const docs = [];
936
+ // Match doc references
937
+ const docRegex = /\[([^\]]+)\]\(\.\.\/docs\/([^)]+)\)/g;
938
+ let match;
939
+ while ((match = docRegex.exec(content)) !== null) {
940
+ const docPath = match[2];
941
+ if (!docs.includes(docPath)) {
942
+ docs.push(docPath);
943
+ }
944
+ }
945
+ return docs;
946
+ }
947
+ /**
948
+ * Add plan reference to workflow tracking
949
+ */
950
+ async addPlanToWorkflow(ref) {
951
+ const plansFile = path.join(this.workflowPath, 'plans.json');
952
+ let plans = { active: [], completed: [] };
953
+ if (await fs.pathExists(plansFile)) {
954
+ const content = await fs.readFile(plansFile, 'utf-8');
955
+ try {
956
+ plans = JSON.parse(content) || { active: [], completed: [] };
957
+ }
958
+ catch {
959
+ plans = { active: [], completed: [] };
960
+ }
961
+ }
962
+ // Preserve approval metadata if the plan was already linked in another workflow
963
+ const existingRef = [...plans.active, ...plans.completed].find((p) => p.slug === ref.slug);
964
+ const nextRef = existingRef
965
+ ? {
966
+ ...ref,
967
+ approval_status: existingRef.approval_status,
968
+ approved_at: existingRef.approved_at,
969
+ approved_by: existingRef.approved_by,
970
+ }
971
+ : ref;
972
+ // Remove if already exists
973
+ plans.active = plans.active.filter(p => p.slug !== ref.slug);
974
+ plans.completed = plans.completed.filter(p => p.slug !== ref.slug);
975
+ // Add to active
976
+ plans.active.push(nextRef);
977
+ // Set as primary if first plan
978
+ if (!plans.primary) {
979
+ plans.primary = nextRef.slug;
980
+ }
981
+ await fs.ensureDir(this.workflowPath);
982
+ await fs.writeFile(plansFile, JSON.stringify(plans, null, 2), 'utf-8');
983
+ }
984
+ /**
985
+ * Clear all plans and tracking data
986
+ * Used when deleting/resetting a workflow
987
+ */
988
+ async clearAllPlans() {
989
+ const plansFile = path.join(this.workflowPath, 'plans.json');
990
+ const trackingDir = path.join(this.workflowPath, 'plan-tracking');
991
+ // Remove plans.json
992
+ if (await fs.pathExists(plansFile)) {
993
+ await fs.remove(plansFile);
994
+ }
995
+ // Remove plan-tracking directory
996
+ if (await fs.pathExists(trackingDir)) {
997
+ await fs.remove(trackingDir);
998
+ }
999
+ }
1000
+ /**
1001
+ * Archive all plans and tracking data
1002
+ * Moves files to .context/workflow/archive/{timestamp}/
1003
+ */
1004
+ async archivePlans() {
1005
+ const plansFile = path.join(this.workflowPath, 'plans.json');
1006
+ const trackingDir = path.join(this.workflowPath, 'plan-tracking');
1007
+ // Check if there's anything to archive
1008
+ const hasPlans = await fs.pathExists(plansFile);
1009
+ const hasTracking = await fs.pathExists(trackingDir);
1010
+ if (!hasPlans && !hasTracking) {
1011
+ return;
1012
+ }
1013
+ // Create archive directory with timestamp
1014
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
1015
+ const archiveDir = path.join(this.workflowPath, 'archive', `plans-${timestamp}`);
1016
+ await fs.ensureDir(archiveDir);
1017
+ // Move plans.json to archive
1018
+ if (hasPlans) {
1019
+ await fs.move(plansFile, path.join(archiveDir, 'plans.json'));
1020
+ }
1021
+ // Move plan-tracking directory to archive
1022
+ if (hasTracking) {
1023
+ await fs.move(trackingDir, path.join(archiveDir, 'plan-tracking'));
1024
+ }
1025
+ }
1026
+ /**
1027
+ * Automatically create a git commit when a phase completes
1028
+ * @param planSlug Plan identifier
1029
+ * @param phaseId Phase identifier
1030
+ * @returns true if commit was created, false if skipped or failed
1031
+ */
1032
+ async autoCommitPhase(planSlug, phaseId) {
1033
+ try {
1034
+ // Load plan to get phase details
1035
+ const plan = await this.getLinkedPlan(planSlug);
1036
+ if (!plan) {
1037
+ console.warn(`[AutoCommit] Plan not found: ${planSlug}`);
1038
+ return false;
1039
+ }
1040
+ const phase = plan.phases.find(p => p.id === phaseId);
1041
+ if (!phase) {
1042
+ console.warn(`[AutoCommit] Phase not found: ${phaseId} in plan ${planSlug}`);
1043
+ return false;
1044
+ }
1045
+ // Initialize git service
1046
+ const gitService = new gitService_1.GitService(this.repoPath);
1047
+ // Check if this is a git repository
1048
+ if (!gitService.isGitRepository()) {
1049
+ console.warn('[AutoCommit] Not a git repository - skipping auto-commit');
1050
+ return false;
1051
+ }
1052
+ // Default commit message from phase's commitCheckpoint or generate one
1053
+ const commitMessage = phase.commitCheckpoint ||
1054
+ `chore(plan): complete ${phase.name} for ${planSlug}`;
1055
+ // Stage .context/** files (plan tracking and markdown updates)
1056
+ const stagePatterns = ['.context/**'];
1057
+ try {
1058
+ const stagedFiles = gitService.stageFiles(stagePatterns);
1059
+ if (stagedFiles.length === 0) {
1060
+ console.info('[AutoCommit] No files to commit - skipping');
1061
+ return false;
1062
+ }
1063
+ // Create the commit with AI Context Agent as co-author
1064
+ const coAuthor = 'AI Context Agent';
1065
+ const commitResult = gitService.commit(commitMessage, coAuthor);
1066
+ // Record the commit in plan tracking
1067
+ await this.recordPhaseCommit(planSlug, phaseId, {
1068
+ hash: commitResult.hash,
1069
+ shortHash: commitResult.shortHash,
1070
+ committedBy: coAuthor,
1071
+ });
1072
+ console.info(`[AutoCommit] Created commit ${commitResult.shortHash} for phase ${phaseId}`);
1073
+ return true;
1074
+ }
1075
+ catch (error) {
1076
+ // Non-critical failure - log but don't throw
1077
+ console.warn(`[AutoCommit] Failed to create commit for phase ${phaseId}:`, error);
1078
+ return false;
1079
+ }
1080
+ }
1081
+ catch (error) {
1082
+ // Catch-all to prevent breaking the main updatePlanStep flow
1083
+ console.error('[AutoCommit] Unexpected error in autoCommitPhase:', error);
1084
+ return false;
1085
+ }
1086
+ }
1087
+ }
1088
+ exports.PlanLinker = PlanLinker;
1089
+ // Export singleton factory
1090
+ function createPlanLinker(repoPath, statusManager, autoCommitOnPhaseComplete = true) {
1091
+ return new PlanLinker(repoPath, statusManager, autoCommitOnPhaseComplete);
1092
+ }
1093
+ //# sourceMappingURL=planLinker.js.map