@ai-coders/context 0.6.0 → 0.7.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 (581) hide show
  1. package/README.md +125 -68
  2. package/dist/commands/export.d.ts +4 -0
  3. package/dist/commands/export.d.ts.map +1 -0
  4. package/dist/commands/export.js +39 -0
  5. package/dist/commands/export.js.map +1 -0
  6. package/dist/commands/fill.d.ts +13 -0
  7. package/dist/commands/fill.d.ts.map +1 -0
  8. package/dist/commands/fill.js +65 -0
  9. package/dist/commands/fill.js.map +1 -0
  10. package/dist/commands/index.d.ts +29 -0
  11. package/dist/commands/index.d.ts.map +1 -0
  12. package/dist/commands/index.js +74 -0
  13. package/dist/commands/index.js.map +1 -0
  14. package/dist/commands/init.d.ts +12 -0
  15. package/dist/commands/init.d.ts.map +1 -0
  16. package/dist/commands/init.js +64 -0
  17. package/dist/commands/init.js.map +1 -0
  18. package/dist/commands/mcp.d.ts +4 -0
  19. package/dist/commands/mcp.d.ts.map +1 -0
  20. package/dist/commands/mcp.js +92 -0
  21. package/dist/commands/mcp.js.map +1 -0
  22. package/dist/commands/plan.d.ts +9 -0
  23. package/dist/commands/plan.d.ts.map +1 -0
  24. package/dist/commands/plan.js +126 -0
  25. package/dist/commands/plan.js.map +1 -0
  26. package/dist/commands/report.d.ts +4 -0
  27. package/dist/commands/report.d.ts.map +1 -0
  28. package/dist/commands/report.js +36 -0
  29. package/dist/commands/report.js.map +1 -0
  30. package/dist/commands/serve.d.ts +4 -0
  31. package/dist/commands/serve.d.ts.map +1 -0
  32. package/dist/commands/serve.js +29 -0
  33. package/dist/commands/serve.js.map +1 -0
  34. package/dist/commands/skill.d.ts +4 -0
  35. package/dist/commands/skill.d.ts.map +1 -0
  36. package/dist/commands/skill.js +217 -0
  37. package/dist/commands/skill.js.map +1 -0
  38. package/dist/commands/start.d.ts +4 -0
  39. package/dist/commands/start.d.ts.map +1 -0
  40. package/dist/commands/start.js +56 -0
  41. package/dist/commands/start.js.map +1 -0
  42. package/dist/commands/sync.d.ts +9 -0
  43. package/dist/commands/sync.d.ts.map +1 -0
  44. package/dist/commands/sync.js +134 -0
  45. package/dist/commands/sync.js.map +1 -0
  46. package/dist/commands/types.d.ts +17 -0
  47. package/dist/commands/types.d.ts.map +1 -0
  48. package/dist/commands/types.js +3 -0
  49. package/dist/commands/types.js.map +1 -0
  50. package/dist/commands/update.d.ts +4 -0
  51. package/dist/commands/update.d.ts.map +1 -0
  52. package/dist/commands/update.js +111 -0
  53. package/dist/commands/update.js.map +1 -0
  54. package/dist/commands/workflow.d.ts +4 -0
  55. package/dist/commands/workflow.d.ts.map +1 -0
  56. package/dist/commands/workflow.js +171 -0
  57. package/dist/commands/workflow.js.map +1 -0
  58. package/dist/generators/agents/agentGenerator.d.ts +2 -0
  59. package/dist/generators/agents/agentGenerator.d.ts.map +1 -1
  60. package/dist/generators/agents/agentGenerator.js +46 -2
  61. package/dist/generators/agents/agentGenerator.js.map +1 -1
  62. package/dist/generators/agents/templates/index.d.ts +0 -1
  63. package/dist/generators/agents/templates/index.d.ts.map +1 -1
  64. package/dist/generators/agents/templates/index.js +1 -3
  65. package/dist/generators/agents/templates/index.js.map +1 -1
  66. package/dist/generators/agents/templates/playbookTemplate.d.ts.map +1 -1
  67. package/dist/generators/agents/templates/playbookTemplate.js +11 -0
  68. package/dist/generators/agents/templates/playbookTemplate.js.map +1 -1
  69. package/dist/generators/documentation/documentationGenerator.d.ts +2 -1
  70. package/dist/generators/documentation/documentationGenerator.d.ts.map +1 -1
  71. package/dist/generators/documentation/documentationGenerator.js +53 -34
  72. package/dist/generators/documentation/documentationGenerator.js.map +1 -1
  73. package/dist/generators/documentation/templates/apiReferenceTemplate.d.ts.map +1 -1
  74. package/dist/generators/documentation/templates/apiReferenceTemplate.js +11 -0
  75. package/dist/generators/documentation/templates/apiReferenceTemplate.js.map +1 -1
  76. package/dist/generators/documentation/templates/architectureTemplate.d.ts +11 -0
  77. package/dist/generators/documentation/templates/architectureTemplate.d.ts.map +1 -1
  78. package/dist/generators/documentation/templates/architectureTemplate.js.map +1 -1
  79. package/dist/generators/documentation/templates/dataFlowTemplate.d.ts.map +1 -1
  80. package/dist/generators/documentation/templates/dataFlowTemplate.js +11 -0
  81. package/dist/generators/documentation/templates/dataFlowTemplate.js.map +1 -1
  82. package/dist/generators/documentation/templates/developmentWorkflowTemplate.d.ts.map +1 -1
  83. package/dist/generators/documentation/templates/developmentWorkflowTemplate.js +11 -0
  84. package/dist/generators/documentation/templates/developmentWorkflowTemplate.js.map +1 -1
  85. package/dist/generators/documentation/templates/glossaryTemplate.d.ts.map +1 -1
  86. package/dist/generators/documentation/templates/glossaryTemplate.js.map +1 -1
  87. package/dist/generators/documentation/templates/index.d.ts +0 -12
  88. package/dist/generators/documentation/templates/index.d.ts.map +1 -1
  89. package/dist/generators/documentation/templates/index.js +1 -25
  90. package/dist/generators/documentation/templates/index.js.map +1 -1
  91. package/dist/generators/documentation/templates/migrationTemplate.d.ts.map +1 -1
  92. package/dist/generators/documentation/templates/migrationTemplate.js +11 -0
  93. package/dist/generators/documentation/templates/migrationTemplate.js.map +1 -1
  94. package/dist/generators/documentation/templates/onboardingTemplate.d.ts.map +1 -1
  95. package/dist/generators/documentation/templates/onboardingTemplate.js +11 -0
  96. package/dist/generators/documentation/templates/onboardingTemplate.js.map +1 -1
  97. package/dist/generators/documentation/templates/projectOverviewTemplate.d.ts.map +1 -1
  98. package/dist/generators/documentation/templates/projectOverviewTemplate.js +11 -0
  99. package/dist/generators/documentation/templates/projectOverviewTemplate.js.map +1 -1
  100. package/dist/generators/documentation/templates/securityTemplate.d.ts.map +1 -1
  101. package/dist/generators/documentation/templates/securityTemplate.js +11 -0
  102. package/dist/generators/documentation/templates/securityTemplate.js.map +1 -1
  103. package/dist/generators/documentation/templates/testingTemplate.d.ts.map +1 -1
  104. package/dist/generators/documentation/templates/testingTemplate.js +11 -0
  105. package/dist/generators/documentation/templates/testingTemplate.js.map +1 -1
  106. package/dist/generators/documentation/templates/toolingTemplate.d.ts.map +1 -1
  107. package/dist/generators/documentation/templates/toolingTemplate.js +11 -0
  108. package/dist/generators/documentation/templates/toolingTemplate.js.map +1 -1
  109. package/dist/generators/documentation/templates/troubleshootingTemplate.d.ts.map +1 -1
  110. package/dist/generators/documentation/templates/troubleshootingTemplate.js +11 -0
  111. package/dist/generators/documentation/templates/troubleshootingTemplate.js.map +1 -1
  112. package/dist/generators/plans/templates/planTemplate.d.ts +11 -0
  113. package/dist/generators/plans/templates/planTemplate.d.ts.map +1 -1
  114. package/dist/generators/plans/templates/planTemplate.js.map +1 -1
  115. package/dist/generators/shared/index.d.ts +1 -0
  116. package/dist/generators/shared/index.d.ts.map +1 -1
  117. package/dist/generators/shared/index.js +16 -0
  118. package/dist/generators/shared/index.js.map +1 -1
  119. package/dist/generators/shared/scaffoldStructures.d.ts +13 -0
  120. package/dist/generators/shared/scaffoldStructures.d.ts.map +1 -0
  121. package/dist/generators/shared/scaffoldStructures.js +30 -0
  122. package/dist/generators/shared/scaffoldStructures.js.map +1 -0
  123. package/dist/generators/shared/structures/agents/definitions.d.ts +18 -0
  124. package/dist/generators/shared/structures/agents/definitions.d.ts.map +1 -0
  125. package/dist/generators/shared/structures/agents/definitions.js +22 -0
  126. package/dist/generators/shared/structures/agents/definitions.js.map +1 -0
  127. package/dist/generators/shared/structures/agents/factory.d.ts +9 -0
  128. package/dist/generators/shared/structures/agents/factory.d.ts.map +1 -0
  129. package/dist/generators/shared/structures/agents/factory.js +112 -0
  130. package/dist/generators/shared/structures/agents/factory.js.map +1 -0
  131. package/dist/generators/shared/structures/agents/index.d.ts +6 -0
  132. package/dist/generators/shared/structures/agents/index.d.ts.map +1 -0
  133. package/dist/generators/shared/structures/agents/index.js +24 -0
  134. package/dist/generators/shared/structures/agents/index.js.map +1 -0
  135. package/dist/generators/shared/structures/documentation/apiReference.d.ts +3 -0
  136. package/dist/generators/shared/structures/documentation/apiReference.d.ts.map +1 -0
  137. package/dist/generators/shared/structures/documentation/apiReference.js +100 -0
  138. package/dist/generators/shared/structures/documentation/apiReference.js.map +1 -0
  139. package/dist/generators/shared/structures/documentation/architecture.d.ts +3 -0
  140. package/dist/generators/shared/structures/documentation/architecture.d.ts.map +1 -0
  141. package/dist/generators/shared/structures/documentation/architecture.js +121 -0
  142. package/dist/generators/shared/structures/documentation/architecture.js.map +1 -0
  143. package/dist/generators/shared/structures/documentation/dataFlow.d.ts +3 -0
  144. package/dist/generators/shared/structures/documentation/dataFlow.d.ts.map +1 -0
  145. package/dist/generators/shared/structures/documentation/dataFlow.js +72 -0
  146. package/dist/generators/shared/structures/documentation/dataFlow.js.map +1 -0
  147. package/dist/generators/shared/structures/documentation/glossary.d.ts +3 -0
  148. package/dist/generators/shared/structures/documentation/glossary.d.ts.map +1 -0
  149. package/dist/generators/shared/structures/documentation/glossary.js +71 -0
  150. package/dist/generators/shared/structures/documentation/glossary.js.map +1 -0
  151. package/dist/generators/shared/structures/documentation/index.d.ts +16 -0
  152. package/dist/generators/shared/structures/documentation/index.d.ts.map +1 -0
  153. package/dist/generators/shared/structures/documentation/index.js +31 -0
  154. package/dist/generators/shared/structures/documentation/index.js.map +1 -0
  155. package/dist/generators/shared/structures/documentation/migration.d.ts +3 -0
  156. package/dist/generators/shared/structures/documentation/migration.d.ts.map +1 -0
  157. package/dist/generators/shared/structures/documentation/migration.js +113 -0
  158. package/dist/generators/shared/structures/documentation/migration.js.map +1 -0
  159. package/dist/generators/shared/structures/documentation/onboarding.d.ts +3 -0
  160. package/dist/generators/shared/structures/documentation/onboarding.d.ts.map +1 -0
  161. package/dist/generators/shared/structures/documentation/onboarding.js +99 -0
  162. package/dist/generators/shared/structures/documentation/onboarding.js.map +1 -0
  163. package/dist/generators/shared/structures/documentation/projectOverview.d.ts +3 -0
  164. package/dist/generators/shared/structures/documentation/projectOverview.d.ts.map +1 -0
  165. package/dist/generators/shared/structures/documentation/projectOverview.js +115 -0
  166. package/dist/generators/shared/structures/documentation/projectOverview.js.map +1 -0
  167. package/dist/generators/shared/structures/documentation/security.d.ts +3 -0
  168. package/dist/generators/shared/structures/documentation/security.d.ts.map +1 -0
  169. package/dist/generators/shared/structures/documentation/security.js +55 -0
  170. package/dist/generators/shared/structures/documentation/security.js.map +1 -0
  171. package/dist/generators/shared/structures/documentation/testing.d.ts +3 -0
  172. package/dist/generators/shared/structures/documentation/testing.d.ts.map +1 -0
  173. package/dist/generators/shared/structures/documentation/testing.js +57 -0
  174. package/dist/generators/shared/structures/documentation/testing.js.map +1 -0
  175. package/dist/generators/shared/structures/documentation/tooling.d.ts +3 -0
  176. package/dist/generators/shared/structures/documentation/tooling.d.ts.map +1 -0
  177. package/dist/generators/shared/structures/documentation/tooling.js +55 -0
  178. package/dist/generators/shared/structures/documentation/tooling.js.map +1 -0
  179. package/dist/generators/shared/structures/documentation/troubleshooting.d.ts +3 -0
  180. package/dist/generators/shared/structures/documentation/troubleshooting.d.ts.map +1 -0
  181. package/dist/generators/shared/structures/documentation/troubleshooting.js +91 -0
  182. package/dist/generators/shared/structures/documentation/troubleshooting.js.map +1 -0
  183. package/dist/generators/shared/structures/documentation/workflow.d.ts +3 -0
  184. package/dist/generators/shared/structures/documentation/workflow.d.ts.map +1 -0
  185. package/dist/generators/shared/structures/documentation/workflow.js +56 -0
  186. package/dist/generators/shared/structures/documentation/workflow.js.map +1 -0
  187. package/dist/generators/shared/structures/index.d.ts +15 -0
  188. package/dist/generators/shared/structures/index.d.ts.map +1 -0
  189. package/dist/generators/shared/structures/index.js +37 -0
  190. package/dist/generators/shared/structures/index.js.map +1 -0
  191. package/dist/generators/shared/structures/plans/index.d.ts +5 -0
  192. package/dist/generators/shared/structures/plans/index.d.ts.map +1 -0
  193. package/dist/generators/shared/structures/plans/index.js +9 -0
  194. package/dist/generators/shared/structures/plans/index.js.map +1 -0
  195. package/dist/generators/shared/structures/plans/planStructure.d.ts +6 -0
  196. package/dist/generators/shared/structures/plans/planStructure.d.ts.map +1 -0
  197. package/dist/generators/shared/structures/plans/planStructure.js +65 -0
  198. package/dist/generators/shared/structures/plans/planStructure.js.map +1 -0
  199. package/dist/generators/shared/structures/registry.d.ts +18 -0
  200. package/dist/generators/shared/structures/registry.d.ts.map +1 -0
  201. package/dist/generators/shared/structures/registry.js +104 -0
  202. package/dist/generators/shared/structures/registry.js.map +1 -0
  203. package/dist/generators/shared/structures/serialization.d.ts +15 -0
  204. package/dist/generators/shared/structures/serialization.d.ts.map +1 -0
  205. package/dist/generators/shared/structures/serialization.js +119 -0
  206. package/dist/generators/shared/structures/serialization.js.map +1 -0
  207. package/dist/generators/shared/structures/skills/definitions.d.ts +14 -0
  208. package/dist/generators/shared/structures/skills/definitions.d.ts.map +1 -0
  209. package/dist/generators/shared/structures/skills/definitions.js +18 -0
  210. package/dist/generators/shared/structures/skills/definitions.js.map +1 -0
  211. package/dist/generators/shared/structures/skills/factory.d.ts +9 -0
  212. package/dist/generators/shared/structures/skills/factory.d.ts.map +1 -0
  213. package/dist/generators/shared/structures/skills/factory.js +56 -0
  214. package/dist/generators/shared/structures/skills/factory.js.map +1 -0
  215. package/dist/generators/shared/structures/skills/index.d.ts +6 -0
  216. package/dist/generators/shared/structures/skills/index.d.ts.map +1 -0
  217. package/dist/generators/shared/structures/skills/index.js +20 -0
  218. package/dist/generators/shared/structures/skills/index.js.map +1 -0
  219. package/dist/generators/shared/structures/types.d.ts +59 -0
  220. package/dist/generators/shared/structures/types.d.ts.map +1 -0
  221. package/dist/generators/shared/structures/types.js +6 -0
  222. package/dist/generators/shared/structures/types.js.map +1 -0
  223. package/dist/generators/shared/structures/validation.d.ts +13 -0
  224. package/dist/generators/shared/structures/validation.d.ts.map +1 -0
  225. package/dist/generators/shared/structures/validation.js +51 -0
  226. package/dist/generators/shared/structures/validation.js.map +1 -0
  227. package/dist/generators/skills/skillGenerator.d.ts +5 -0
  228. package/dist/generators/skills/skillGenerator.d.ts.map +1 -1
  229. package/dist/generators/skills/skillGenerator.js +26 -17
  230. package/dist/generators/skills/skillGenerator.js.map +1 -1
  231. package/dist/generators/skills/templates/skillTemplate.d.ts +10 -0
  232. package/dist/generators/skills/templates/skillTemplate.d.ts.map +1 -1
  233. package/dist/generators/skills/templates/skillTemplate.js +10 -0
  234. package/dist/generators/skills/templates/skillTemplate.js.map +1 -1
  235. package/dist/index.d.ts.map +1 -1
  236. package/dist/index.js +203 -5
  237. package/dist/index.js.map +1 -1
  238. package/dist/prompts/defaults.d.ts +5 -0
  239. package/dist/prompts/defaults.d.ts.map +1 -1
  240. package/dist/prompts/defaults.js +44 -1
  241. package/dist/prompts/defaults.js.map +1 -1
  242. package/dist/services/ai/agents/documentationAgent.d.ts +2 -0
  243. package/dist/services/ai/agents/documentationAgent.d.ts.map +1 -1
  244. package/dist/services/ai/agents/documentationAgent.js +33 -9
  245. package/dist/services/ai/agents/documentationAgent.js.map +1 -1
  246. package/dist/services/ai/agents/playbookAgent.d.ts +2 -0
  247. package/dist/services/ai/agents/playbookAgent.d.ts.map +1 -1
  248. package/dist/services/ai/agents/playbookAgent.js +44 -19
  249. package/dist/services/ai/agents/playbookAgent.js.map +1 -1
  250. package/dist/services/ai/agents/skillAgent.d.ts +2 -0
  251. package/dist/services/ai/agents/skillAgent.d.ts.map +1 -1
  252. package/dist/services/ai/agents/skillAgent.js +54 -22
  253. package/dist/services/ai/agents/skillAgent.js.map +1 -1
  254. package/dist/services/ai/schemas.d.ts +138 -9
  255. package/dist/services/ai/schemas.d.ts.map +1 -1
  256. package/dist/services/ai/schemas.js +70 -5
  257. package/dist/services/ai/schemas.js.map +1 -1
  258. package/dist/services/ai/toolRegistry.d.ts.map +1 -1
  259. package/dist/services/ai/toolRegistry.js +25 -17
  260. package/dist/services/ai/toolRegistry.js.map +1 -1
  261. package/dist/services/ai/tools/checkScaffoldingTool.d.ts.map +1 -1
  262. package/dist/services/ai/tools/checkScaffoldingTool.js +4 -1
  263. package/dist/services/ai/tools/checkScaffoldingTool.js.map +1 -1
  264. package/dist/services/ai/tools/fillScaffoldingTool.d.ts +24 -9
  265. package/dist/services/ai/tools/fillScaffoldingTool.d.ts.map +1 -1
  266. package/dist/services/ai/tools/fillScaffoldingTool.js +46 -130
  267. package/dist/services/ai/tools/fillScaffoldingTool.js.map +1 -1
  268. package/dist/services/ai/tools/getCodebaseMapTool.d.ts +1 -1
  269. package/dist/services/ai/tools/getCodebaseMapTool.d.ts.map +1 -1
  270. package/dist/services/ai/tools/getCodebaseMapTool.js +4 -1
  271. package/dist/services/ai/tools/getCodebaseMapTool.js.map +1 -1
  272. package/dist/services/ai/tools/index.d.ts +1 -1
  273. package/dist/services/ai/tools/index.d.ts.map +1 -1
  274. package/dist/services/ai/tools/index.js +3 -1
  275. package/dist/services/ai/tools/index.js.map +1 -1
  276. package/dist/services/ai/tools/initializeContextTool.d.ts +109 -7
  277. package/dist/services/ai/tools/initializeContextTool.d.ts.map +1 -1
  278. package/dist/services/ai/tools/initializeContextTool.js +282 -17
  279. package/dist/services/ai/tools/initializeContextTool.js.map +1 -1
  280. package/dist/services/ai/tools/scaffoldPlanTool.d.ts +17 -1
  281. package/dist/services/ai/tools/scaffoldPlanTool.d.ts.map +1 -1
  282. package/dist/services/ai/tools/scaffoldPlanTool.js +94 -5
  283. package/dist/services/ai/tools/scaffoldPlanTool.js.map +1 -1
  284. package/dist/services/ai/tools/toolFactory.d.ts +35 -0
  285. package/dist/services/ai/tools/toolFactory.d.ts.map +1 -0
  286. package/dist/services/ai/tools/toolFactory.js +20 -0
  287. package/dist/services/ai/tools/toolFactory.js.map +1 -0
  288. package/dist/services/export/contextExportService.d.ts +45 -0
  289. package/dist/services/export/contextExportService.d.ts.map +1 -0
  290. package/dist/services/export/contextExportService.js +161 -0
  291. package/dist/services/export/contextExportService.js.map +1 -0
  292. package/dist/services/export/exportRulesService.d.ts +15 -1
  293. package/dist/services/export/exportRulesService.d.ts.map +1 -1
  294. package/dist/services/export/exportRulesService.js +100 -36
  295. package/dist/services/export/exportRulesService.js.map +1 -1
  296. package/dist/services/export/index.d.ts +2 -0
  297. package/dist/services/export/index.d.ts.map +1 -1
  298. package/dist/services/export/index.js +3 -1
  299. package/dist/services/export/index.js.map +1 -1
  300. package/dist/services/export/skillExportService.d.ts +6 -1
  301. package/dist/services/export/skillExportService.d.ts.map +1 -1
  302. package/dist/services/export/skillExportService.js +46 -22
  303. package/dist/services/export/skillExportService.js.map +1 -1
  304. package/dist/services/fill/fillService.d.ts.map +1 -1
  305. package/dist/services/fill/fillService.js +30 -3
  306. package/dist/services/fill/fillService.js.map +1 -1
  307. package/dist/services/fill/skillFillService.d.ts.map +1 -1
  308. package/dist/services/fill/skillFillService.js +8 -1
  309. package/dist/services/fill/skillFillService.js.map +1 -1
  310. package/dist/services/import/presets.d.ts +12 -0
  311. package/dist/services/import/presets.d.ts.map +1 -1
  312. package/dist/services/import/presets.js +32 -152
  313. package/dist/services/import/presets.js.map +1 -1
  314. package/dist/services/init/initService.d.ts +1 -0
  315. package/dist/services/init/initService.d.ts.map +1 -1
  316. package/dist/services/init/initService.js +42 -9
  317. package/dist/services/init/initService.js.map +1 -1
  318. package/dist/services/mcp/actionLogger.d.ts +19 -0
  319. package/dist/services/mcp/actionLogger.d.ts.map +1 -0
  320. package/dist/services/mcp/actionLogger.js +128 -0
  321. package/dist/services/mcp/actionLogger.js.map +1 -0
  322. package/dist/services/mcp/gateway/agent.d.ts +17 -0
  323. package/dist/services/mcp/gateway/agent.d.ts.map +1 -0
  324. package/dist/services/mcp/gateway/agent.js +147 -0
  325. package/dist/services/mcp/gateway/agent.js.map +1 -0
  326. package/dist/services/mcp/gateway/context.d.ts +21 -0
  327. package/dist/services/mcp/gateway/context.d.ts.map +1 -0
  328. package/dist/services/mcp/gateway/context.js +249 -0
  329. package/dist/services/mcp/gateway/context.js.map +1 -0
  330. package/dist/services/mcp/gateway/explore.d.ts +16 -0
  331. package/dist/services/mcp/gateway/explore.d.ts.map +1 -0
  332. package/dist/services/mcp/gateway/explore.js +60 -0
  333. package/dist/services/mcp/gateway/explore.js.map +1 -0
  334. package/dist/services/mcp/gateway/index.d.ts +24 -0
  335. package/dist/services/mcp/gateway/index.d.ts.map +1 -0
  336. package/dist/services/mcp/gateway/index.js +53 -0
  337. package/dist/services/mcp/gateway/index.js.map +1 -0
  338. package/dist/services/mcp/gateway/metrics.d.ts +56 -0
  339. package/dist/services/mcp/gateway/metrics.d.ts.map +1 -0
  340. package/dist/services/mcp/gateway/metrics.js +153 -0
  341. package/dist/services/mcp/gateway/metrics.js.map +1 -0
  342. package/dist/services/mcp/gateway/plan.d.ts +18 -0
  343. package/dist/services/mcp/gateway/plan.d.ts.map +1 -0
  344. package/dist/services/mcp/gateway/plan.js +273 -0
  345. package/dist/services/mcp/gateway/plan.js.map +1 -0
  346. package/dist/services/mcp/gateway/project.d.ts +16 -0
  347. package/dist/services/mcp/gateway/project.d.ts.map +1 -0
  348. package/dist/services/mcp/gateway/project.js +149 -0
  349. package/dist/services/mcp/gateway/project.js.map +1 -0
  350. package/dist/services/mcp/gateway/projectReport.d.ts +20 -0
  351. package/dist/services/mcp/gateway/projectReport.d.ts.map +1 -0
  352. package/dist/services/mcp/gateway/projectReport.js +61 -0
  353. package/dist/services/mcp/gateway/projectReport.js.map +1 -0
  354. package/dist/services/mcp/gateway/projectSetup.d.ts +29 -0
  355. package/dist/services/mcp/gateway/projectSetup.d.ts.map +1 -0
  356. package/dist/services/mcp/gateway/projectSetup.js +141 -0
  357. package/dist/services/mcp/gateway/projectSetup.js.map +1 -0
  358. package/dist/services/mcp/gateway/response.d.ts +45 -0
  359. package/dist/services/mcp/gateway/response.d.ts.map +1 -0
  360. package/dist/services/mcp/gateway/response.js +111 -0
  361. package/dist/services/mcp/gateway/response.js.map +1 -0
  362. package/dist/services/mcp/gateway/shared.d.ts +38 -0
  363. package/dist/services/mcp/gateway/shared.d.ts.map +1 -0
  364. package/dist/services/mcp/gateway/shared.js +39 -0
  365. package/dist/services/mcp/gateway/shared.js.map +1 -0
  366. package/dist/services/mcp/gateway/skill.d.ts +17 -0
  367. package/dist/services/mcp/gateway/skill.d.ts.map +1 -0
  368. package/dist/services/mcp/gateway/skill.js +323 -0
  369. package/dist/services/mcp/gateway/skill.js.map +1 -0
  370. package/dist/services/mcp/gateway/sync.d.ts +17 -0
  371. package/dist/services/mcp/gateway/sync.d.ts.map +1 -0
  372. package/dist/services/mcp/gateway/sync.js +219 -0
  373. package/dist/services/mcp/gateway/sync.js.map +1 -0
  374. package/dist/services/mcp/gateway/types.d.ts +116 -0
  375. package/dist/services/mcp/gateway/types.d.ts.map +1 -0
  376. package/dist/services/mcp/gateway/types.js +12 -0
  377. package/dist/services/mcp/gateway/types.js.map +1 -0
  378. package/dist/services/mcp/gateway/workflow.d.ts +18 -0
  379. package/dist/services/mcp/gateway/workflow.d.ts.map +1 -0
  380. package/dist/services/mcp/gateway/workflow.js +317 -0
  381. package/dist/services/mcp/gateway/workflow.js.map +1 -0
  382. package/dist/services/mcp/gateway/workflowAdvance.d.ts +25 -0
  383. package/dist/services/mcp/gateway/workflowAdvance.d.ts.map +1 -0
  384. package/dist/services/mcp/gateway/workflowAdvance.js +133 -0
  385. package/dist/services/mcp/gateway/workflowAdvance.js.map +1 -0
  386. package/dist/services/mcp/gateway/workflowInit.d.ts +28 -0
  387. package/dist/services/mcp/gateway/workflowInit.d.ts.map +1 -0
  388. package/dist/services/mcp/gateway/workflowInit.js +213 -0
  389. package/dist/services/mcp/gateway/workflowInit.js.map +1 -0
  390. package/dist/services/mcp/gateway/workflowManage.d.ts +31 -0
  391. package/dist/services/mcp/gateway/workflowManage.d.ts.map +1 -0
  392. package/dist/services/mcp/gateway/workflowManage.js +222 -0
  393. package/dist/services/mcp/gateway/workflowManage.js.map +1 -0
  394. package/dist/services/mcp/gateway/workflowStatus.d.ts +17 -0
  395. package/dist/services/mcp/gateway/workflowStatus.d.ts.map +1 -0
  396. package/dist/services/mcp/gateway/workflowStatus.js +91 -0
  397. package/dist/services/mcp/gateway/workflowStatus.js.map +1 -0
  398. package/dist/services/mcp/gatewayTools.d.ts +15 -0
  399. package/dist/services/mcp/gatewayTools.d.ts.map +1 -0
  400. package/dist/services/mcp/gatewayTools.js +38 -0
  401. package/dist/services/mcp/gatewayTools.js.map +1 -0
  402. package/dist/services/mcp/index.d.ts +7 -0
  403. package/dist/services/mcp/index.d.ts.map +1 -1
  404. package/dist/services/mcp/index.js +22 -1
  405. package/dist/services/mcp/index.js.map +1 -1
  406. package/dist/services/mcp/mcpInstallService.d.ts +56 -0
  407. package/dist/services/mcp/mcpInstallService.d.ts.map +1 -0
  408. package/dist/services/mcp/mcpInstallService.js +549 -0
  409. package/dist/services/mcp/mcpInstallService.js.map +1 -0
  410. package/dist/services/mcp/mcpServer.d.ts +45 -19
  411. package/dist/services/mcp/mcpServer.d.ts.map +1 -1
  412. package/dist/services/mcp/mcpServer.js +637 -1696
  413. package/dist/services/mcp/mcpServer.js.map +1 -1
  414. package/dist/services/passthrough/protocol.d.ts +4 -4
  415. package/dist/services/qa/index.d.ts +9 -0
  416. package/dist/services/qa/index.d.ts.map +1 -0
  417. package/dist/services/qa/index.js +15 -0
  418. package/dist/services/qa/index.js.map +1 -0
  419. package/dist/services/qa/patternInferer.d.ts +41 -0
  420. package/dist/services/qa/patternInferer.d.ts.map +1 -0
  421. package/dist/services/qa/patternInferer.js +366 -0
  422. package/dist/services/qa/patternInferer.js.map +1 -0
  423. package/dist/services/qa/qaService.d.ts +107 -0
  424. package/dist/services/qa/qaService.d.ts.map +1 -0
  425. package/dist/services/qa/qaService.js +874 -0
  426. package/dist/services/qa/qaService.js.map +1 -0
  427. package/dist/services/qa/topicDetector.d.ts +54 -0
  428. package/dist/services/qa/topicDetector.d.ts.map +1 -0
  429. package/dist/services/qa/topicDetector.js +306 -0
  430. package/dist/services/qa/topicDetector.js.map +1 -0
  431. package/dist/services/quickSync/quickSyncService.d.ts.map +1 -1
  432. package/dist/services/quickSync/quickSyncService.js +6 -10
  433. package/dist/services/quickSync/quickSyncService.js.map +1 -1
  434. package/dist/services/reverseSync/importSkillsService.d.ts +47 -0
  435. package/dist/services/reverseSync/importSkillsService.d.ts.map +1 -0
  436. package/dist/services/reverseSync/importSkillsService.js +362 -0
  437. package/dist/services/reverseSync/importSkillsService.js.map +1 -0
  438. package/dist/services/reverseSync/index.d.ts +12 -0
  439. package/dist/services/reverseSync/index.d.ts.map +1 -0
  440. package/dist/services/reverseSync/index.js +49 -0
  441. package/dist/services/reverseSync/index.js.map +1 -0
  442. package/dist/services/reverseSync/presets.d.ts +51 -0
  443. package/dist/services/reverseSync/presets.d.ts.map +1 -0
  444. package/dist/services/reverseSync/presets.js +77 -0
  445. package/dist/services/reverseSync/presets.js.map +1 -0
  446. package/dist/services/reverseSync/reverseQuickSyncService.d.ts +37 -0
  447. package/dist/services/reverseSync/reverseQuickSyncService.d.ts.map +1 -0
  448. package/dist/services/reverseSync/reverseQuickSyncService.js +265 -0
  449. package/dist/services/reverseSync/reverseQuickSyncService.js.map +1 -0
  450. package/dist/services/reverseSync/skillsDetector.d.ts +36 -0
  451. package/dist/services/reverseSync/skillsDetector.d.ts.map +1 -0
  452. package/dist/services/reverseSync/skillsDetector.js +287 -0
  453. package/dist/services/reverseSync/skillsDetector.js.map +1 -0
  454. package/dist/services/reverseSync/toolDetector.d.ts +36 -0
  455. package/dist/services/reverseSync/toolDetector.d.ts.map +1 -0
  456. package/dist/services/reverseSync/toolDetector.js +174 -0
  457. package/dist/services/reverseSync/toolDetector.js.map +1 -0
  458. package/dist/services/reverseSync/types.d.ts +203 -0
  459. package/dist/services/reverseSync/types.d.ts.map +1 -0
  460. package/dist/services/reverseSync/types.js +9 -0
  461. package/dist/services/reverseSync/types.js.map +1 -0
  462. package/dist/services/semantic/codebaseAnalyzer.d.ts +23 -1
  463. package/dist/services/semantic/codebaseAnalyzer.d.ts.map +1 -1
  464. package/dist/services/semantic/codebaseAnalyzer.js +531 -0
  465. package/dist/services/semantic/codebaseAnalyzer.js.map +1 -1
  466. package/dist/services/semantic/contextBuilder.d.ts.map +1 -1
  467. package/dist/services/semantic/contextBuilder.js +23 -8
  468. package/dist/services/semantic/contextBuilder.js.map +1 -1
  469. package/dist/services/semantic/types.d.ts +50 -0
  470. package/dist/services/semantic/types.d.ts.map +1 -1
  471. package/dist/services/semantic/types.js.map +1 -1
  472. package/dist/services/shared/contentTypeRegistry.d.ts +66 -0
  473. package/dist/services/shared/contentTypeRegistry.d.ts.map +1 -0
  474. package/dist/services/shared/contentTypeRegistry.js +113 -0
  475. package/dist/services/shared/contentTypeRegistry.js.map +1 -0
  476. package/dist/services/shared/contextRootResolver.d.ts +57 -0
  477. package/dist/services/shared/contextRootResolver.d.ts.map +1 -0
  478. package/dist/services/shared/contextRootResolver.js +102 -0
  479. package/dist/services/shared/contextRootResolver.js.map +1 -0
  480. package/dist/services/shared/index.d.ts +4 -1
  481. package/dist/services/shared/index.d.ts.map +1 -1
  482. package/dist/services/shared/index.js +39 -1
  483. package/dist/services/shared/index.js.map +1 -1
  484. package/dist/services/shared/pathHelpers.d.ts +15 -1
  485. package/dist/services/shared/pathHelpers.d.ts.map +1 -1
  486. package/dist/services/shared/pathHelpers.js +26 -1
  487. package/dist/services/shared/pathHelpers.js.map +1 -1
  488. package/dist/services/shared/toolRegistry.d.ts +135 -0
  489. package/dist/services/shared/toolRegistry.d.ts.map +1 -0
  490. package/dist/services/shared/toolRegistry.js +515 -0
  491. package/dist/services/shared/toolRegistry.js.map +1 -0
  492. package/dist/services/stack/scaffoldFilter.d.ts +1 -1
  493. package/dist/services/sync/presets.d.ts +3 -0
  494. package/dist/services/sync/presets.d.ts.map +1 -1
  495. package/dist/services/sync/presets.js +20 -32
  496. package/dist/services/sync/presets.js.map +1 -1
  497. package/dist/services/sync/syncService.d.ts +8 -0
  498. package/dist/services/sync/syncService.d.ts.map +1 -1
  499. package/dist/services/sync/syncService.js +21 -2
  500. package/dist/services/sync/syncService.js.map +1 -1
  501. package/dist/services/sync/types.d.ts +1 -1
  502. package/dist/services/sync/types.d.ts.map +1 -1
  503. package/dist/services/tools/index.d.ts +95 -0
  504. package/dist/services/tools/index.d.ts.map +1 -0
  505. package/dist/services/tools/index.js +236 -0
  506. package/dist/services/tools/index.js.map +1 -0
  507. package/dist/services/workflow/workflowService.d.ts +57 -4
  508. package/dist/services/workflow/workflowService.d.ts.map +1 -1
  509. package/dist/services/workflow/workflowService.js +79 -6
  510. package/dist/services/workflow/workflowService.js.map +1 -1
  511. package/dist/types/scaffoldFrontmatter.d.ts +145 -0
  512. package/dist/types/scaffoldFrontmatter.d.ts.map +1 -0
  513. package/dist/types/scaffoldFrontmatter.js +172 -0
  514. package/dist/types/scaffoldFrontmatter.js.map +1 -0
  515. package/dist/utils/cliUI.d.ts +1 -1
  516. package/dist/utils/cliUI.d.ts.map +1 -1
  517. package/dist/utils/cliUI.js +4 -1
  518. package/dist/utils/cliUI.js.map +1 -1
  519. package/dist/utils/frontMatter.d.ts +48 -0
  520. package/dist/utils/frontMatter.d.ts.map +1 -1
  521. package/dist/utils/frontMatter.js +135 -0
  522. package/dist/utils/frontMatter.js.map +1 -1
  523. package/dist/utils/gitService.d.ts +26 -0
  524. package/dist/utils/gitService.d.ts.map +1 -1
  525. package/dist/utils/gitService.js +96 -0
  526. package/dist/utils/gitService.js.map +1 -1
  527. package/dist/utils/i18n.d.ts +43 -2
  528. package/dist/utils/i18n.d.ts.map +1 -1
  529. package/dist/utils/i18n.js +96 -6
  530. package/dist/utils/i18n.js.map +1 -1
  531. package/dist/utils/prompts/index.d.ts +4 -0
  532. package/dist/utils/prompts/index.d.ts.map +1 -1
  533. package/dist/utils/prompts/index.js +15 -0
  534. package/dist/utils/prompts/index.js.map +1 -1
  535. package/dist/workflow/errors.d.ts +48 -0
  536. package/dist/workflow/errors.d.ts.map +1 -0
  537. package/dist/workflow/errors.js +52 -0
  538. package/dist/workflow/errors.js.map +1 -0
  539. package/dist/workflow/gates/gateChecker.d.ts +93 -0
  540. package/dist/workflow/gates/gateChecker.d.ts.map +1 -0
  541. package/dist/workflow/gates/gateChecker.js +197 -0
  542. package/dist/workflow/gates/gateChecker.js.map +1 -0
  543. package/dist/workflow/gates/index.d.ts +7 -0
  544. package/dist/workflow/gates/index.d.ts.map +1 -0
  545. package/dist/workflow/gates/index.js +13 -0
  546. package/dist/workflow/gates/index.js.map +1 -0
  547. package/dist/workflow/index.d.ts +4 -2
  548. package/dist/workflow/index.d.ts.map +1 -1
  549. package/dist/workflow/index.js +14 -3
  550. package/dist/workflow/index.js.map +1 -1
  551. package/dist/workflow/orchestrator.d.ts +94 -5
  552. package/dist/workflow/orchestrator.d.ts.map +1 -1
  553. package/dist/workflow/orchestrator.js +300 -11
  554. package/dist/workflow/orchestrator.js.map +1 -1
  555. package/dist/workflow/plans/planLinker.d.ts +79 -3
  556. package/dist/workflow/plans/planLinker.d.ts.map +1 -1
  557. package/dist/workflow/plans/planLinker.js +522 -3
  558. package/dist/workflow/plans/planLinker.js.map +1 -1
  559. package/dist/workflow/plans/types.d.ts +64 -0
  560. package/dist/workflow/plans/types.d.ts.map +1 -1
  561. package/dist/workflow/roles.d.ts +6 -0
  562. package/dist/workflow/roles.d.ts.map +1 -1
  563. package/dist/workflow/roles.js +6 -0
  564. package/dist/workflow/roles.js.map +1 -1
  565. package/dist/workflow/scaling.d.ts +1 -0
  566. package/dist/workflow/scaling.d.ts.map +1 -1
  567. package/dist/workflow/scaling.js +8 -17
  568. package/dist/workflow/scaling.js.map +1 -1
  569. package/dist/workflow/status/statusManager.d.ts +54 -1
  570. package/dist/workflow/status/statusManager.d.ts.map +1 -1
  571. package/dist/workflow/status/statusManager.js +539 -9
  572. package/dist/workflow/status/statusManager.js.map +1 -1
  573. package/dist/workflow/status/templates.d.ts +14 -5
  574. package/dist/workflow/status/templates.d.ts.map +1 -1
  575. package/dist/workflow/status/templates.js +55 -41
  576. package/dist/workflow/status/templates.js.map +1 -1
  577. package/dist/workflow/types.d.ts +138 -2
  578. package/dist/workflow/types.d.ts.map +1 -1
  579. package/dist/workflow/types.js +0 -1
  580. package/dist/workflow/types.js.map +1 -1
  581. package/package.json +1 -1
@@ -45,6 +45,7 @@ const path = __importStar(require("path"));
45
45
  const fs = __importStar(require("fs-extra"));
46
46
  const types_1 = require("./types");
47
47
  const agents_1 = require("../agents");
48
+ const gitService_1 = require("../../utils/gitService");
48
49
  /**
49
50
  * Plan Linker class
50
51
  *
@@ -57,12 +58,32 @@ const agents_1 = require("../agents");
57
58
  * Agent discovery is delegated to AgentRegistry (SRP).
58
59
  */
59
60
  class PlanLinker {
60
- constructor(repoPath) {
61
+ constructor(repoPath, statusManager, autoCommitOnPhaseComplete = true) {
61
62
  this.repoPath = repoPath;
62
63
  this.contextPath = path.join(repoPath, '.context');
63
64
  this.plansPath = path.join(this.contextPath, 'plans');
64
65
  this.workflowPath = path.join(this.contextPath, 'workflow');
65
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');
66
87
  }
67
88
  /**
68
89
  * Discover all available agents (built-in + custom)
@@ -187,6 +208,16 @@ class PlanLinker {
187
208
  // Save tracking
188
209
  await fs.ensureDir(path.dirname(trackingFile));
189
210
  await fs.writeFile(trackingFile, JSON.stringify(tracking, null, 2), 'utf-8');
211
+ // Log phase update to workflow execution history
212
+ if (this.statusManager) {
213
+ const currentPhase = await this.statusManager.getCurrentPhase();
214
+ await this.statusManager.addHistoryEntry({
215
+ phase: currentPhase,
216
+ action: 'plan_phase_updated',
217
+ plan: planSlug,
218
+ description: `Plan phase ${phaseId} updated to ${status}`,
219
+ });
220
+ }
190
221
  return true;
191
222
  }
192
223
  /**
@@ -215,6 +246,16 @@ class PlanLinker {
215
246
  tracking.decisions.push(fullDecision);
216
247
  await fs.ensureDir(path.dirname(trackingFile));
217
248
  await fs.writeFile(trackingFile, JSON.stringify(tracking, null, 2), 'utf-8');
249
+ // Log decision to workflow execution history
250
+ if (this.statusManager) {
251
+ const currentPhase = await this.statusManager.getCurrentPhase();
252
+ await this.statusManager.addHistoryEntry({
253
+ phase: decision.phase || currentPhase,
254
+ action: 'decision_recorded',
255
+ plan: planSlug,
256
+ description: `Decision recorded: ${decision.title}`,
257
+ });
258
+ }
218
259
  return fullDecision;
219
260
  }
220
261
  /**
@@ -261,6 +302,381 @@ class PlanLinker {
261
302
  byPhase,
262
303
  };
263
304
  }
305
+ /**
306
+ * Update individual step status within a plan phase
307
+ */
308
+ async updatePlanStep(planSlug, phaseId, stepIndex, status, options) {
309
+ const trackingFile = path.join(this.workflowPath, 'plan-tracking', `${planSlug}.json`);
310
+ const now = new Date().toISOString();
311
+ // Load existing tracking or create new
312
+ let tracking = await this.loadPlanTracking(planSlug);
313
+ if (!tracking) {
314
+ tracking = {
315
+ planSlug,
316
+ progress: 0,
317
+ phases: {},
318
+ decisions: [],
319
+ lastUpdated: now,
320
+ };
321
+ }
322
+ // Ensure phase exists in tracking
323
+ if (!tracking.phases[phaseId]) {
324
+ tracking.phases[phaseId] = {
325
+ phaseId,
326
+ status: 'in_progress',
327
+ startedAt: now,
328
+ steps: [],
329
+ };
330
+ }
331
+ // Find or create step entry
332
+ let step = tracking.phases[phaseId].steps.find(s => s.stepIndex === stepIndex);
333
+ if (!step) {
334
+ // Get step description from the plan if possible
335
+ const plan = await this.getLinkedPlan(planSlug);
336
+ const planPhase = plan?.phases.find(p => p.id === phaseId);
337
+ const planStep = planPhase?.steps.find(s => s.order === stepIndex);
338
+ step = {
339
+ stepIndex,
340
+ description: planStep?.description || `Step ${stepIndex}`,
341
+ status: 'pending',
342
+ };
343
+ tracking.phases[phaseId].steps.push(step);
344
+ }
345
+ // Update step status and timestamps
346
+ step.status = status;
347
+ if (status === 'in_progress' && !step.startedAt) {
348
+ step.startedAt = now;
349
+ }
350
+ if (status === 'completed') {
351
+ step.completedAt = now;
352
+ }
353
+ if (options?.output) {
354
+ step.output = options.output;
355
+ }
356
+ if (options?.notes) {
357
+ step.notes = options.notes;
358
+ }
359
+ // Update phase status based on steps
360
+ const phaseSteps = tracking.phases[phaseId].steps;
361
+ const allStepsCompleted = phaseSteps.length > 0 && phaseSteps.every(s => s.status === 'completed');
362
+ const anyStepInProgress = phaseSteps.some(s => s.status === 'in_progress');
363
+ if (allStepsCompleted) {
364
+ tracking.phases[phaseId].status = 'completed';
365
+ tracking.phases[phaseId].completedAt = now;
366
+ // Auto-commit on phase completion
367
+ if (this.autoCommitOnPhaseComplete) {
368
+ await this.autoCommitPhase(planSlug, phaseId);
369
+ }
370
+ }
371
+ else if (anyStepInProgress || phaseSteps.some(s => s.status === 'completed')) {
372
+ tracking.phases[phaseId].status = 'in_progress';
373
+ }
374
+ // Recalculate overall progress
375
+ tracking.progress = this.calculateStepProgress(tracking);
376
+ tracking.lastUpdated = now;
377
+ // Save tracking
378
+ await fs.ensureDir(path.dirname(trackingFile));
379
+ await fs.writeFile(trackingFile, JSON.stringify(tracking, null, 2), 'utf-8');
380
+ // Log step to workflow execution history (breadcrumb trail)
381
+ if (this.statusManager) {
382
+ const action = status === 'completed' ? 'step_completed' :
383
+ status === 'in_progress' ? 'step_started' :
384
+ status === 'skipped' ? 'step_skipped' : null;
385
+ if (action) {
386
+ await this.statusManager.addStepHistoryEntry({
387
+ action,
388
+ plan: planSlug,
389
+ planPhase: phaseId,
390
+ stepIndex,
391
+ stepDescription: step.description,
392
+ output: options?.output,
393
+ notes: options?.notes,
394
+ });
395
+ }
396
+ }
397
+ // Auto-sync to markdown
398
+ await this.syncPlanMarkdown(planSlug);
399
+ return true;
400
+ }
401
+ /**
402
+ * Get detailed execution status for a plan including all steps
403
+ */
404
+ async getPlanExecutionStatus(planSlug) {
405
+ return this.loadPlanTracking(planSlug);
406
+ }
407
+ /**
408
+ * Sync tracking data back to the plan markdown file
409
+ * Updates checkboxes, timestamps, and adds execution history section
410
+ */
411
+ async syncPlanMarkdown(planSlug) {
412
+ const planPath = path.join(this.plansPath, `${planSlug}.md`);
413
+ const tracking = await this.loadPlanTracking(planSlug);
414
+ if (!tracking || !await fs.pathExists(planPath)) {
415
+ return false;
416
+ }
417
+ let content = await fs.readFile(planPath, 'utf-8');
418
+ // Update frontmatter with progress and phase statuses
419
+ content = this.updateFrontmatterProgress(content, tracking);
420
+ // Update step checkboxes in markdown body
421
+ content = this.updateStepCheckboxes(content, tracking);
422
+ // Add/update execution history section
423
+ content = this.updateExecutionHistorySection(content, tracking);
424
+ await fs.writeFile(planPath, content, 'utf-8');
425
+ return true;
426
+ }
427
+ /**
428
+ * Record commit information for a completed phase
429
+ */
430
+ async recordPhaseCommit(planSlug, phaseId, commitInfo) {
431
+ const trackingFile = path.join(this.workflowPath, 'plan-tracking', `${planSlug}.json`);
432
+ const now = new Date().toISOString();
433
+ // Load existing tracking
434
+ let tracking = await this.loadPlanTracking(planSlug);
435
+ if (!tracking) {
436
+ return false;
437
+ }
438
+ // Ensure phase exists in tracking
439
+ if (!tracking.phases[phaseId]) {
440
+ return false;
441
+ }
442
+ // Record commit info
443
+ tracking.phases[phaseId].commitHash = commitInfo.hash;
444
+ tracking.phases[phaseId].commitShortHash = commitInfo.shortHash;
445
+ tracking.phases[phaseId].committedAt = now;
446
+ if (commitInfo.committedBy) {
447
+ tracking.phases[phaseId].committedBy = commitInfo.committedBy;
448
+ }
449
+ tracking.lastUpdated = now;
450
+ // Save tracking
451
+ await fs.ensureDir(path.dirname(trackingFile));
452
+ await fs.writeFile(trackingFile, JSON.stringify(tracking, null, 2), 'utf-8');
453
+ // Sync to markdown
454
+ await this.syncPlanMarkdown(planSlug);
455
+ return true;
456
+ }
457
+ /**
458
+ * Load plan tracking from JSON file
459
+ */
460
+ async loadPlanTracking(planSlug) {
461
+ const trackingFile = path.join(this.workflowPath, 'plan-tracking', `${planSlug}.json`);
462
+ if (!await fs.pathExists(trackingFile)) {
463
+ return null;
464
+ }
465
+ try {
466
+ const content = await fs.readFile(trackingFile, 'utf-8');
467
+ const data = JSON.parse(content);
468
+ // Migrate old format to new format if needed
469
+ if (!data.phases || typeof data.phases !== 'object') {
470
+ // Old format had phases as simple status objects
471
+ const migratedPhases = {};
472
+ if (data.phases) {
473
+ for (const [phaseId, phaseData] of Object.entries(data.phases)) {
474
+ migratedPhases[phaseId] = {
475
+ phaseId,
476
+ status: phaseData.status,
477
+ startedAt: phaseData.updatedAt,
478
+ completedAt: phaseData.status === 'completed' ? phaseData.updatedAt : undefined,
479
+ steps: [],
480
+ };
481
+ }
482
+ }
483
+ return {
484
+ planSlug,
485
+ progress: data.progress || 0,
486
+ phases: migratedPhases,
487
+ decisions: data.decisions || [],
488
+ lastUpdated: data.lastUpdated || new Date().toISOString(),
489
+ };
490
+ }
491
+ return data;
492
+ }
493
+ catch {
494
+ return null;
495
+ }
496
+ }
497
+ /**
498
+ * Calculate progress based on completed steps across all phases
499
+ */
500
+ calculateStepProgress(tracking) {
501
+ let totalSteps = 0;
502
+ let completedSteps = 0;
503
+ for (const phase of Object.values(tracking.phases)) {
504
+ totalSteps += phase.steps.length;
505
+ completedSteps += phase.steps.filter(s => s.status === 'completed').length;
506
+ }
507
+ return totalSteps > 0 ? Math.round((completedSteps / totalSteps) * 100) : 0;
508
+ }
509
+ /**
510
+ * Update frontmatter with progress percentage
511
+ */
512
+ updateFrontmatterProgress(content, tracking) {
513
+ // Check if frontmatter exists
514
+ if (!content.startsWith('---')) {
515
+ return content;
516
+ }
517
+ const endIndex = content.indexOf('---', 3);
518
+ if (endIndex === -1) {
519
+ return content;
520
+ }
521
+ let frontmatter = content.slice(0, endIndex);
522
+ const body = content.slice(endIndex);
523
+ // Update or add progress field
524
+ if (frontmatter.includes('progress:')) {
525
+ frontmatter = frontmatter.replace(/progress:\s*\d+/, `progress: ${tracking.progress}`);
526
+ }
527
+ else {
528
+ // Add progress after status line or at end of frontmatter
529
+ if (frontmatter.includes('status:')) {
530
+ frontmatter = frontmatter.replace(/(status:\s*\w+)/, `$1\nprogress: ${tracking.progress}`);
531
+ }
532
+ else {
533
+ frontmatter = frontmatter.trimEnd() + `\nprogress: ${tracking.progress}\n`;
534
+ }
535
+ }
536
+ // Update or add lastUpdated field
537
+ if (frontmatter.includes('lastUpdated:')) {
538
+ frontmatter = frontmatter.replace(/lastUpdated:\s*"[^"]*"/, `lastUpdated: "${tracking.lastUpdated}"`);
539
+ }
540
+ else {
541
+ frontmatter = frontmatter.trimEnd() + `\nlastUpdated: "${tracking.lastUpdated}"\n`;
542
+ }
543
+ return frontmatter + body;
544
+ }
545
+ /**
546
+ * Update step checkboxes in markdown body
547
+ */
548
+ updateStepCheckboxes(content, tracking) {
549
+ // Match numbered steps with optional existing checkboxes
550
+ // Patterns like: "1. **Step text**" or "1. [ ] **Step text**" or "1. [x] **Step text**"
551
+ const stepPattern = /^(\d+)\.\s*(?:\[[ x]\]\s*)?(.+?)(?:\s*\*\([^)]*\)\*)?$/gm;
552
+ // Track which phase we're currently in by finding phase headers
553
+ let currentPhaseId = null;
554
+ // Split content into lines for processing
555
+ const lines = content.split('\n');
556
+ const updatedLines = [];
557
+ for (const line of lines) {
558
+ // Check for phase header
559
+ const phaseMatch = line.match(/^###\s+Phase\s+(\d+)/);
560
+ if (phaseMatch) {
561
+ currentPhaseId = `phase-${phaseMatch[1]}`;
562
+ updatedLines.push(line);
563
+ continue;
564
+ }
565
+ // Check for numbered step
566
+ const stepMatch = line.match(/^(\d+)\.\s*(?:\[[ x]\]\s*)?(.+?)(?:\s*\*\([^)]*\)\*)?$/);
567
+ if (stepMatch && currentPhaseId) {
568
+ const stepNum = parseInt(stepMatch[1], 10);
569
+ const stepText = stepMatch[2].trim();
570
+ // Find step in tracking
571
+ const phaseTracking = tracking.phases[currentPhaseId];
572
+ const stepTracking = phaseTracking?.steps.find(s => s.stepIndex === stepNum);
573
+ if (stepTracking) {
574
+ const checkMark = stepTracking.status === 'completed' ? '[x]' : '[ ]';
575
+ let timestamp = '';
576
+ if (stepTracking.completedAt) {
577
+ timestamp = ` *(completed: ${stepTracking.completedAt})*`;
578
+ }
579
+ else if (stepTracking.startedAt && stepTracking.status === 'in_progress') {
580
+ timestamp = ` *(in progress since: ${stepTracking.startedAt})*`;
581
+ }
582
+ updatedLines.push(`${stepNum}. ${checkMark} ${stepText}${timestamp}`);
583
+ continue;
584
+ }
585
+ }
586
+ updatedLines.push(line);
587
+ }
588
+ return updatedLines.join('\n');
589
+ }
590
+ /**
591
+ * Add or update execution history section in markdown
592
+ */
593
+ updateExecutionHistorySection(content, tracking) {
594
+ const historySection = this.generateExecutionHistoryMarkdown(tracking);
595
+ // Check if section exists
596
+ const historyMarker = '## Execution History';
597
+ const existingIndex = content.indexOf(historyMarker);
598
+ if (existingIndex > -1) {
599
+ // Find the end of the section (next ## header or end of file)
600
+ const afterHistory = content.slice(existingIndex);
601
+ const nextSectionMatch = afterHistory.match(/\n## [^E]/);
602
+ if (nextSectionMatch && nextSectionMatch.index) {
603
+ const endIndex = existingIndex + nextSectionMatch.index;
604
+ content = content.slice(0, existingIndex) + historySection + content.slice(endIndex);
605
+ }
606
+ else {
607
+ // History is the last section
608
+ content = content.slice(0, existingIndex) + historySection;
609
+ }
610
+ }
611
+ else {
612
+ // Add before "## Evidence" or "## Rollback" or at end
613
+ const insertPoints = ['## Evidence', '## Rollback'];
614
+ let insertIndex = -1;
615
+ for (const marker of insertPoints) {
616
+ const idx = content.indexOf(marker);
617
+ if (idx > -1) {
618
+ insertIndex = idx;
619
+ break;
620
+ }
621
+ }
622
+ if (insertIndex > -1) {
623
+ content = content.slice(0, insertIndex) + historySection + '\n\n' + content.slice(insertIndex);
624
+ }
625
+ else {
626
+ content = content.trimEnd() + '\n\n' + historySection;
627
+ }
628
+ }
629
+ return content;
630
+ }
631
+ /**
632
+ * Generate execution history markdown section
633
+ */
634
+ generateExecutionHistoryMarkdown(tracking) {
635
+ const lines = [
636
+ '## Execution History',
637
+ '',
638
+ `> Last updated: ${tracking.lastUpdated} | Progress: ${tracking.progress}%`,
639
+ '',
640
+ ];
641
+ // Sort phases by ID
642
+ const sortedPhases = Object.entries(tracking.phases).sort(([a], [b]) => a.localeCompare(b));
643
+ for (const [phaseId, phase] of sortedPhases) {
644
+ const statusIcon = phase.status === 'completed' ? '[DONE]' :
645
+ phase.status === 'in_progress' ? '[IN PROGRESS]' :
646
+ phase.status === 'skipped' ? '[SKIPPED]' :
647
+ '[PENDING]';
648
+ lines.push(`### ${phaseId} ${statusIcon}`);
649
+ if (phase.startedAt) {
650
+ lines.push(`- Started: ${phase.startedAt}`);
651
+ }
652
+ if (phase.completedAt) {
653
+ lines.push(`- Completed: ${phase.completedAt}`);
654
+ }
655
+ if (phase.steps.length > 0) {
656
+ lines.push('');
657
+ const sortedSteps = [...phase.steps].sort((a, b) => a.stepIndex - b.stepIndex);
658
+ for (const step of sortedSteps) {
659
+ const check = step.status === 'completed' ? 'x' : ' ';
660
+ let line = `- [${check}] Step ${step.stepIndex}: ${step.description}`;
661
+ if (step.completedAt) {
662
+ line += ` *(${step.completedAt})*`;
663
+ }
664
+ else if (step.startedAt && step.status === 'in_progress') {
665
+ line += ` *(in progress)*`;
666
+ }
667
+ lines.push(line);
668
+ if (step.output) {
669
+ lines.push(` - Output: ${step.output}`);
670
+ }
671
+ if (step.notes) {
672
+ lines.push(` - Notes: ${step.notes}`);
673
+ }
674
+ }
675
+ }
676
+ lines.push('');
677
+ }
678
+ return lines.join('\n');
679
+ }
264
680
  /**
265
681
  * Parse plan markdown file to extract info
266
682
  */
@@ -490,10 +906,113 @@ class PlanLinker {
490
906
  await fs.ensureDir(this.workflowPath);
491
907
  await fs.writeFile(plansFile, JSON.stringify(plans, null, 2), 'utf-8');
492
908
  }
909
+ /**
910
+ * Clear all plans and tracking data
911
+ * Used when deleting/resetting a workflow
912
+ */
913
+ async clearAllPlans() {
914
+ const plansFile = path.join(this.workflowPath, 'plans.json');
915
+ const trackingDir = path.join(this.workflowPath, 'plan-tracking');
916
+ // Remove plans.json
917
+ if (await fs.pathExists(plansFile)) {
918
+ await fs.remove(plansFile);
919
+ }
920
+ // Remove plan-tracking directory
921
+ if (await fs.pathExists(trackingDir)) {
922
+ await fs.remove(trackingDir);
923
+ }
924
+ }
925
+ /**
926
+ * Archive all plans and tracking data
927
+ * Moves files to .context/workflow/archive/{timestamp}/
928
+ */
929
+ async archivePlans() {
930
+ const plansFile = path.join(this.workflowPath, 'plans.json');
931
+ const trackingDir = path.join(this.workflowPath, 'plan-tracking');
932
+ // Check if there's anything to archive
933
+ const hasPlans = await fs.pathExists(plansFile);
934
+ const hasTracking = await fs.pathExists(trackingDir);
935
+ if (!hasPlans && !hasTracking) {
936
+ return;
937
+ }
938
+ // Create archive directory with timestamp
939
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
940
+ const archiveDir = path.join(this.workflowPath, 'archive', `plans-${timestamp}`);
941
+ await fs.ensureDir(archiveDir);
942
+ // Move plans.json to archive
943
+ if (hasPlans) {
944
+ await fs.move(plansFile, path.join(archiveDir, 'plans.json'));
945
+ }
946
+ // Move plan-tracking directory to archive
947
+ if (hasTracking) {
948
+ await fs.move(trackingDir, path.join(archiveDir, 'plan-tracking'));
949
+ }
950
+ }
951
+ /**
952
+ * Automatically create a git commit when a phase completes
953
+ * @param planSlug Plan identifier
954
+ * @param phaseId Phase identifier
955
+ * @returns true if commit was created, false if skipped or failed
956
+ */
957
+ async autoCommitPhase(planSlug, phaseId) {
958
+ try {
959
+ // Load plan to get phase details
960
+ const plan = await this.getLinkedPlan(planSlug);
961
+ if (!plan) {
962
+ console.warn(`[AutoCommit] Plan not found: ${planSlug}`);
963
+ return false;
964
+ }
965
+ const phase = plan.phases.find(p => p.id === phaseId);
966
+ if (!phase) {
967
+ console.warn(`[AutoCommit] Phase not found: ${phaseId} in plan ${planSlug}`);
968
+ return false;
969
+ }
970
+ // Initialize git service
971
+ const gitService = new gitService_1.GitService(this.repoPath);
972
+ // Check if this is a git repository
973
+ if (!gitService.isGitRepository()) {
974
+ console.warn('[AutoCommit] Not a git repository - skipping auto-commit');
975
+ return false;
976
+ }
977
+ // Default commit message from phase's commitCheckpoint or generate one
978
+ const commitMessage = phase.commitCheckpoint ||
979
+ `chore(plan): complete ${phase.name} for ${planSlug}`;
980
+ // Stage .context/** files (plan tracking and markdown updates)
981
+ const stagePatterns = ['.context/**'];
982
+ try {
983
+ const stagedFiles = gitService.stageFiles(stagePatterns);
984
+ if (stagedFiles.length === 0) {
985
+ console.info('[AutoCommit] No files to commit - skipping');
986
+ return false;
987
+ }
988
+ // Create the commit with AI Context Agent as co-author
989
+ const coAuthor = 'AI Context Agent';
990
+ const commitResult = gitService.commit(commitMessage, coAuthor);
991
+ // Record the commit in plan tracking
992
+ await this.recordPhaseCommit(planSlug, phaseId, {
993
+ hash: commitResult.hash,
994
+ shortHash: commitResult.shortHash,
995
+ committedBy: coAuthor,
996
+ });
997
+ console.info(`[AutoCommit] Created commit ${commitResult.shortHash} for phase ${phaseId}`);
998
+ return true;
999
+ }
1000
+ catch (error) {
1001
+ // Non-critical failure - log but don't throw
1002
+ console.warn(`[AutoCommit] Failed to create commit for phase ${phaseId}:`, error);
1003
+ return false;
1004
+ }
1005
+ }
1006
+ catch (error) {
1007
+ // Catch-all to prevent breaking the main updatePlanStep flow
1008
+ console.error('[AutoCommit] Unexpected error in autoCommitPhase:', error);
1009
+ return false;
1010
+ }
1011
+ }
493
1012
  }
494
1013
  exports.PlanLinker = PlanLinker;
495
1014
  // Export singleton factory
496
- function createPlanLinker(repoPath) {
497
- return new PlanLinker(repoPath);
1015
+ function createPlanLinker(repoPath, statusManager, autoCommitOnPhaseComplete = true) {
1016
+ return new PlanLinker(repoPath, statusManager, autoCommitOnPhaseComplete);
498
1017
  }
499
1018
  //# sourceMappingURL=planLinker.js.map