@dotcontext/cli 0.8.2 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (414) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +234 -135
  3. package/dist/cli/index.d.ts +15 -0
  4. package/dist/cli/index.d.ts.map +1 -0
  5. package/dist/cli/index.js +27 -0
  6. package/dist/cli/index.js.map +1 -0
  7. package/dist/generators/documentation/codebaseMapGenerator.d.ts +29 -46
  8. package/dist/generators/documentation/codebaseMapGenerator.d.ts.map +1 -1
  9. package/dist/generators/documentation/codebaseMapGenerator.js +148 -244
  10. package/dist/generators/documentation/codebaseMapGenerator.js.map +1 -1
  11. package/dist/generators/documentation/documentationGenerator.d.ts.map +1 -1
  12. package/dist/generators/documentation/documentationGenerator.js +13 -8
  13. package/dist/generators/documentation/documentationGenerator.js.map +1 -1
  14. package/dist/generators/documentation/index.d.ts +1 -1
  15. package/dist/generators/documentation/index.d.ts.map +1 -1
  16. package/dist/generators/shared/structures/documentation/architecture.d.ts.map +1 -1
  17. package/dist/generators/shared/structures/documentation/architecture.js +9 -9
  18. package/dist/generators/shared/structures/documentation/architecture.js.map +1 -1
  19. package/dist/generators/shared/structures/documentation/dataFlow.js +2 -2
  20. package/dist/generators/shared/structures/documentation/dataFlow.js.map +1 -1
  21. package/dist/generators/shared/structures/documentation/glossary.js +2 -2
  22. package/dist/generators/shared/structures/documentation/glossary.js.map +1 -1
  23. package/dist/generators/shared/structures/documentation/projectOverview.d.ts.map +1 -1
  24. package/dist/generators/shared/structures/documentation/projectOverview.js +10 -11
  25. package/dist/generators/shared/structures/documentation/projectOverview.js.map +1 -1
  26. package/dist/generators/shared/structures/skills/factory.d.ts.map +1 -1
  27. package/dist/generators/shared/structures/skills/factory.js +19 -15
  28. package/dist/generators/shared/structures/skills/factory.js.map +1 -1
  29. package/dist/generators/skills/skillGenerator.d.ts +2 -1
  30. package/dist/generators/skills/skillGenerator.d.ts.map +1 -1
  31. package/dist/generators/skills/skillGenerator.js +47 -6
  32. package/dist/generators/skills/skillGenerator.js.map +1 -1
  33. package/dist/generators/skills/templates/indexTemplate.d.ts.map +1 -1
  34. package/dist/generators/skills/templates/indexTemplate.js +22 -15
  35. package/dist/generators/skills/templates/indexTemplate.js.map +1 -1
  36. package/dist/harness/index.d.ts +11 -0
  37. package/dist/harness/index.d.ts.map +1 -0
  38. package/dist/harness/index.js +33 -0
  39. package/dist/harness/index.js.map +1 -0
  40. package/dist/index.js +365 -339
  41. package/dist/index.js.map +1 -1
  42. package/dist/mcp/bin.d.ts +19 -0
  43. package/dist/mcp/bin.d.ts.map +1 -0
  44. package/dist/mcp/bin.js +189 -0
  45. package/dist/mcp/bin.js.map +1 -0
  46. package/dist/mcp/index.d.ts +12 -0
  47. package/dist/mcp/index.d.ts.map +1 -0
  48. package/dist/mcp/index.js +28 -0
  49. package/dist/mcp/index.js.map +1 -0
  50. package/dist/services/autoFill/autoFillService.d.ts.map +1 -1
  51. package/dist/services/autoFill/autoFillService.js +7 -6
  52. package/dist/services/autoFill/autoFillService.js.map +1 -1
  53. package/dist/services/cli/index.d.ts +8 -0
  54. package/dist/services/cli/index.d.ts.map +1 -0
  55. package/dist/services/cli/index.js +17 -0
  56. package/dist/services/cli/index.js.map +1 -0
  57. package/dist/services/cli/mcpInstallService.d.ts +57 -0
  58. package/dist/services/cli/mcpInstallService.d.ts.map +1 -0
  59. package/dist/services/cli/mcpInstallService.js +607 -0
  60. package/dist/services/cli/mcpInstallService.js.map +1 -0
  61. package/dist/services/cli/stateDetector.d.ts +55 -0
  62. package/dist/services/cli/stateDetector.d.ts.map +1 -0
  63. package/dist/services/cli/stateDetector.js +191 -0
  64. package/dist/services/cli/stateDetector.js.map +1 -0
  65. package/dist/services/export/contextExportService.js +3 -3
  66. package/dist/services/export/contextExportService.js.map +1 -1
  67. package/dist/services/export/exportRulesService.d.ts +1 -0
  68. package/dist/services/export/exportRulesService.d.ts.map +1 -1
  69. package/dist/services/export/exportRulesService.js +20 -8
  70. package/dist/services/export/exportRulesService.js.map +1 -1
  71. package/dist/services/export/skillExportService.d.ts.map +1 -1
  72. package/dist/services/export/skillExportService.js +4 -1
  73. package/dist/services/export/skillExportService.js.map +1 -1
  74. package/dist/services/harness/agentsService.d.ts +31 -0
  75. package/dist/services/harness/agentsService.d.ts.map +1 -0
  76. package/dist/services/harness/agentsService.js +135 -0
  77. package/dist/services/harness/agentsService.js.map +1 -0
  78. package/dist/services/harness/contextService.d.ts +167 -0
  79. package/dist/services/harness/contextService.d.ts.map +1 -0
  80. package/dist/services/harness/contextService.js +403 -0
  81. package/dist/services/harness/contextService.js.map +1 -0
  82. package/dist/services/harness/contextTools.d.ts +95 -0
  83. package/dist/services/harness/contextTools.d.ts.map +1 -0
  84. package/dist/services/harness/contextTools.js +990 -0
  85. package/dist/services/harness/contextTools.js.map +1 -0
  86. package/dist/services/harness/datasetService.d.ts +63 -0
  87. package/dist/services/harness/datasetService.d.ts.map +1 -0
  88. package/dist/services/harness/datasetService.js +261 -0
  89. package/dist/services/harness/datasetService.js.map +1 -0
  90. package/dist/services/harness/executionService.d.ts +74 -0
  91. package/dist/services/harness/executionService.d.ts.map +1 -0
  92. package/dist/services/harness/executionService.js +213 -0
  93. package/dist/services/harness/executionService.js.map +1 -0
  94. package/dist/services/harness/index.d.ts +21 -0
  95. package/dist/services/harness/index.d.ts.map +1 -0
  96. package/dist/services/harness/index.js +52 -0
  97. package/dist/services/harness/index.js.map +1 -0
  98. package/dist/services/harness/plansService.d.ts +45 -0
  99. package/dist/services/harness/plansService.d.ts.map +1 -0
  100. package/dist/services/harness/plansService.js +251 -0
  101. package/dist/services/harness/plansService.js.map +1 -0
  102. package/dist/services/harness/policyService.d.ts +116 -0
  103. package/dist/services/harness/policyService.d.ts.map +1 -0
  104. package/dist/services/harness/policyService.js +510 -0
  105. package/dist/services/harness/policyService.js.map +1 -0
  106. package/dist/services/harness/replayService.d.ts +63 -0
  107. package/dist/services/harness/replayService.d.ts.map +1 -0
  108. package/dist/services/harness/replayService.js +242 -0
  109. package/dist/services/harness/replayService.js.map +1 -0
  110. package/dist/services/harness/runtimeStateService.d.ts +120 -0
  111. package/dist/services/harness/runtimeStateService.d.ts.map +1 -0
  112. package/dist/services/harness/runtimeStateService.js +316 -0
  113. package/dist/services/harness/runtimeStateService.js.map +1 -0
  114. package/dist/services/harness/sensorCatalogService.d.ts +50 -0
  115. package/dist/services/harness/sensorCatalogService.d.ts.map +1 -0
  116. package/dist/services/harness/sensorCatalogService.js +308 -0
  117. package/dist/services/harness/sensorCatalogService.js.map +1 -0
  118. package/dist/services/harness/sensorsService.d.ts +64 -0
  119. package/dist/services/harness/sensorsService.d.ts.map +1 -0
  120. package/dist/services/harness/sensorsService.js +88 -0
  121. package/dist/services/harness/sensorsService.js.map +1 -0
  122. package/dist/services/harness/skillsService.d.ts +31 -0
  123. package/dist/services/harness/skillsService.d.ts.map +1 -0
  124. package/dist/services/harness/skillsService.js +296 -0
  125. package/dist/services/harness/skillsService.js.map +1 -0
  126. package/dist/services/harness/taskContractsService.d.ts +88 -0
  127. package/dist/services/harness/taskContractsService.d.ts.map +1 -0
  128. package/dist/services/harness/taskContractsService.js +210 -0
  129. package/dist/services/harness/taskContractsService.js.map +1 -0
  130. package/dist/services/harness/workflowStateService.d.ts +51 -0
  131. package/dist/services/harness/workflowStateService.d.ts.map +1 -0
  132. package/dist/services/harness/workflowStateService.js +215 -0
  133. package/dist/services/harness/workflowStateService.js.map +1 -0
  134. package/dist/services/import/agentsDetector.d.ts.map +1 -1
  135. package/dist/services/import/agentsDetector.js +14 -8
  136. package/dist/services/import/agentsDetector.js.map +1 -1
  137. package/dist/services/import/importAgentsService.d.ts +2 -2
  138. package/dist/services/import/importAgentsService.d.ts.map +1 -1
  139. package/dist/services/import/importAgentsService.js +8 -1
  140. package/dist/services/import/importAgentsService.js.map +1 -1
  141. package/dist/services/import/importRulesService.d.ts +2 -2
  142. package/dist/services/import/importRulesService.d.ts.map +1 -1
  143. package/dist/services/import/importRulesService.js +8 -1
  144. package/dist/services/import/importRulesService.js.map +1 -1
  145. package/dist/services/import/presets.js +2 -2
  146. package/dist/services/import/presets.js.map +1 -1
  147. package/dist/services/import/rulesDetector.d.ts.map +1 -1
  148. package/dist/services/import/rulesDetector.js +16 -1
  149. package/dist/services/import/rulesDetector.js.map +1 -1
  150. package/dist/services/import/types.d.ts +1 -1
  151. package/dist/services/import/types.d.ts.map +1 -1
  152. package/dist/services/mcp/actionLogger.d.ts +2 -1
  153. package/dist/services/mcp/actionLogger.d.ts.map +1 -1
  154. package/dist/services/mcp/actionLogger.js +76 -15
  155. package/dist/services/mcp/actionLogger.js.map +1 -1
  156. package/dist/services/mcp/gateway/agent.d.ts.map +1 -1
  157. package/dist/services/mcp/gateway/agent.js +15 -104
  158. package/dist/services/mcp/gateway/agent.js.map +1 -1
  159. package/dist/services/mcp/gateway/context.d.ts.map +1 -1
  160. package/dist/services/mcp/gateway/context.js +60 -172
  161. package/dist/services/mcp/gateway/context.js.map +1 -1
  162. package/dist/services/mcp/gateway/explore.js +6 -6
  163. package/dist/services/mcp/gateway/explore.js.map +1 -1
  164. package/dist/services/mcp/gateway/harness.d.ts +7 -0
  165. package/dist/services/mcp/gateway/harness.d.ts.map +1 -0
  166. package/dist/services/mcp/gateway/harness.js +337 -0
  167. package/dist/services/mcp/gateway/harness.js.map +1 -0
  168. package/dist/services/mcp/gateway/index.d.ts +3 -2
  169. package/dist/services/mcp/gateway/index.d.ts.map +1 -1
  170. package/dist/services/mcp/gateway/index.js +4 -2
  171. package/dist/services/mcp/gateway/index.js.map +1 -1
  172. package/dist/services/mcp/gateway/metrics.d.ts.map +1 -1
  173. package/dist/services/mcp/gateway/metrics.js +8 -8
  174. package/dist/services/mcp/gateway/metrics.js.map +1 -1
  175. package/dist/services/mcp/gateway/plan.d.ts.map +1 -1
  176. package/dist/services/mcp/gateway/plan.js +23 -211
  177. package/dist/services/mcp/gateway/plan.js.map +1 -1
  178. package/dist/services/mcp/gateway/shared.d.ts +1 -32
  179. package/dist/services/mcp/gateway/shared.d.ts.map +1 -1
  180. package/dist/services/mcp/gateway/shared.js +4 -30
  181. package/dist/services/mcp/gateway/shared.js.map +1 -1
  182. package/dist/services/mcp/gateway/skill.d.ts.map +1 -1
  183. package/dist/services/mcp/gateway/skill.js +14 -281
  184. package/dist/services/mcp/gateway/skill.js.map +1 -1
  185. package/dist/services/mcp/gateway/types.d.ts +74 -3
  186. package/dist/services/mcp/gateway/types.d.ts.map +1 -1
  187. package/dist/services/mcp/gateway/workflowAdvance.d.ts.map +1 -1
  188. package/dist/services/mcp/gateway/workflowAdvance.js +37 -9
  189. package/dist/services/mcp/gateway/workflowAdvance.js.map +1 -1
  190. package/dist/services/mcp/gateway/workflowInit.d.ts.map +1 -1
  191. package/dist/services/mcp/gateway/workflowInit.js +8 -2
  192. package/dist/services/mcp/gateway/workflowInit.js.map +1 -1
  193. package/dist/services/mcp/gateway/workflowManage.d.ts +17 -1
  194. package/dist/services/mcp/gateway/workflowManage.d.ts.map +1 -1
  195. package/dist/services/mcp/gateway/workflowManage.js +155 -10
  196. package/dist/services/mcp/gateway/workflowManage.js.map +1 -1
  197. package/dist/services/mcp/gateway/workflowStatus.d.ts.map +1 -1
  198. package/dist/services/mcp/gateway/workflowStatus.js +5 -3
  199. package/dist/services/mcp/gateway/workflowStatus.js.map +1 -1
  200. package/dist/services/mcp/gatewayTools.d.ts +1 -1
  201. package/dist/services/mcp/gatewayTools.d.ts.map +1 -1
  202. package/dist/services/mcp/gatewayTools.js +2 -1
  203. package/dist/services/mcp/gatewayTools.js.map +1 -1
  204. package/dist/services/mcp/index.d.ts +10 -4
  205. package/dist/services/mcp/index.d.ts.map +1 -1
  206. package/dist/services/mcp/index.js +9 -3
  207. package/dist/services/mcp/index.js.map +1 -1
  208. package/dist/services/mcp/mcpInstallService.d.ts +4 -52
  209. package/dist/services/mcp/mcpInstallService.d.ts.map +1 -1
  210. package/dist/services/mcp/mcpInstallService.js +5 -596
  211. package/dist/services/mcp/mcpInstallService.js.map +1 -1
  212. package/dist/services/mcp/mcpServer.d.ts +5 -6
  213. package/dist/services/mcp/mcpServer.d.ts.map +1 -1
  214. package/dist/services/mcp/mcpServer.js +220 -28
  215. package/dist/services/mcp/mcpServer.js.map +1 -1
  216. package/dist/services/qa/patternInferer.d.ts +2 -31
  217. package/dist/services/qa/patternInferer.d.ts.map +1 -1
  218. package/dist/services/qa/patternInferer.js +4 -353
  219. package/dist/services/qa/patternInferer.js.map +1 -1
  220. package/dist/services/qa/qaService.d.ts +6 -10
  221. package/dist/services/qa/qaService.d.ts.map +1 -1
  222. package/dist/services/qa/qaService.js +17 -53
  223. package/dist/services/qa/qaService.js.map +1 -1
  224. package/dist/services/reverseSync/importSkillsService.d.ts.map +1 -1
  225. package/dist/services/reverseSync/importSkillsService.js +4 -1
  226. package/dist/services/reverseSync/importSkillsService.js.map +1 -1
  227. package/dist/services/reverseSync/reverseQuickSyncService.d.ts.map +1 -1
  228. package/dist/services/reverseSync/reverseQuickSyncService.js +10 -6
  229. package/dist/services/reverseSync/reverseQuickSyncService.js.map +1 -1
  230. package/dist/services/reverseSync/skillsDetector.js +2 -2
  231. package/dist/services/reverseSync/skillsDetector.js.map +1 -1
  232. package/dist/services/reverseSync/toolDetector.d.ts.map +1 -1
  233. package/dist/services/reverseSync/toolDetector.js +3 -0
  234. package/dist/services/reverseSync/toolDetector.js.map +1 -1
  235. package/dist/services/semantic/index.d.ts +1 -0
  236. package/dist/services/semantic/index.d.ts.map +1 -1
  237. package/dist/services/semantic/index.js +3 -1
  238. package/dist/services/semantic/index.js.map +1 -1
  239. package/dist/services/semantic/semanticSnapshotService.d.ts +86 -0
  240. package/dist/services/semantic/semanticSnapshotService.d.ts.map +1 -0
  241. package/dist/services/semantic/semanticSnapshotService.js +573 -0
  242. package/dist/services/semantic/semanticSnapshotService.js.map +1 -0
  243. package/dist/services/shared/contentTypeRegistry.d.ts.map +1 -1
  244. package/dist/services/shared/contentTypeRegistry.js +9 -0
  245. package/dist/services/shared/contentTypeRegistry.js.map +1 -1
  246. package/dist/services/shared/contextLayout.d.ts +18 -0
  247. package/dist/services/shared/contextLayout.d.ts.map +1 -0
  248. package/dist/services/shared/contextLayout.js +139 -0
  249. package/dist/services/shared/contextLayout.js.map +1 -0
  250. package/dist/services/shared/executionContext.d.ts +38 -0
  251. package/dist/services/shared/executionContext.d.ts.map +1 -0
  252. package/dist/services/shared/executionContext.js +39 -0
  253. package/dist/services/shared/executionContext.js.map +1 -0
  254. package/dist/services/shared/index.d.ts +2 -0
  255. package/dist/services/shared/index.d.ts.map +1 -1
  256. package/dist/services/shared/index.js +11 -1
  257. package/dist/services/shared/index.js.map +1 -1
  258. package/dist/services/shared/toolRegistry.d.ts +6 -0
  259. package/dist/services/shared/toolRegistry.d.ts.map +1 -1
  260. package/dist/services/shared/toolRegistry.js +34 -20
  261. package/dist/services/shared/toolRegistry.js.map +1 -1
  262. package/dist/services/stack/scaffoldFilter.d.ts +3 -3
  263. package/dist/services/state/stateDetector.d.ts +4 -49
  264. package/dist/services/state/stateDetector.d.ts.map +1 -1
  265. package/dist/services/state/stateDetector.js +9 -182
  266. package/dist/services/state/stateDetector.js.map +1 -1
  267. package/dist/services/sync/index.d.ts +1 -1
  268. package/dist/services/sync/index.d.ts.map +1 -1
  269. package/dist/services/sync/index.js.map +1 -1
  270. package/dist/services/sync/markdownReferenceHandler.d.ts.map +1 -1
  271. package/dist/services/sync/markdownReferenceHandler.js +7 -2
  272. package/dist/services/sync/markdownReferenceHandler.js.map +1 -1
  273. package/dist/services/sync/presets.d.ts.map +1 -1
  274. package/dist/services/sync/presets.js +1 -0
  275. package/dist/services/sync/presets.js.map +1 -1
  276. package/dist/services/sync/symlinkHandler.d.ts.map +1 -1
  277. package/dist/services/sync/symlinkHandler.js +7 -2
  278. package/dist/services/sync/symlinkHandler.js.map +1 -1
  279. package/dist/services/sync/syncService.d.ts +2 -2
  280. package/dist/services/sync/syncService.d.ts.map +1 -1
  281. package/dist/services/sync/syncService.js +17 -3
  282. package/dist/services/sync/syncService.js.map +1 -1
  283. package/dist/services/sync/types.d.ts +9 -1
  284. package/dist/services/sync/types.d.ts.map +1 -1
  285. package/dist/services/workflow/index.d.ts +1 -1
  286. package/dist/services/workflow/index.d.ts.map +1 -1
  287. package/dist/services/workflow/index.js +2 -1
  288. package/dist/services/workflow/index.js.map +1 -1
  289. package/dist/services/workflow/workflowService.d.ts +68 -0
  290. package/dist/services/workflow/workflowService.d.ts.map +1 -1
  291. package/dist/services/workflow/workflowService.js +416 -1
  292. package/dist/services/workflow/workflowService.js.map +1 -1
  293. package/dist/utils/gitignoreManager.d.ts +8 -0
  294. package/dist/utils/gitignoreManager.d.ts.map +1 -1
  295. package/dist/utils/gitignoreManager.js +40 -0
  296. package/dist/utils/gitignoreManager.js.map +1 -1
  297. package/dist/utils/i18n.d.ts +1 -1
  298. package/dist/utils/i18n.js +2 -2
  299. package/dist/utils/i18n.js.map +1 -1
  300. package/dist/utils/processShutdown.d.ts +20 -0
  301. package/dist/utils/processShutdown.d.ts.map +1 -0
  302. package/dist/utils/processShutdown.js +47 -0
  303. package/dist/utils/processShutdown.js.map +1 -0
  304. package/dist/utils/prompts/index.d.ts +1 -1
  305. package/dist/utils/prompts/index.d.ts.map +1 -1
  306. package/dist/utils/prompts/index.js +1 -3
  307. package/dist/utils/prompts/index.js.map +1 -1
  308. package/dist/utils/prompts/smartDefaults.d.ts +0 -9
  309. package/dist/utils/prompts/smartDefaults.d.ts.map +1 -1
  310. package/dist/utils/prompts/smartDefaults.js +0 -23
  311. package/dist/utils/prompts/smartDefaults.js.map +1 -1
  312. package/dist/utils/prompts/types.d.ts +0 -11
  313. package/dist/utils/prompts/types.d.ts.map +1 -1
  314. package/dist/workflow/index.d.ts +1 -1
  315. package/dist/workflow/index.d.ts.map +1 -1
  316. package/dist/workflow/index.js +6 -1
  317. package/dist/workflow/index.js.map +1 -1
  318. package/dist/workflow/orchestrator.d.ts.map +1 -1
  319. package/dist/workflow/orchestrator.js +3 -14
  320. package/dist/workflow/orchestrator.js.map +1 -1
  321. package/dist/workflow/plans/planLinker.d.ts +13 -0
  322. package/dist/workflow/plans/planLinker.d.ts.map +1 -1
  323. package/dist/workflow/plans/planLinker.js +77 -2
  324. package/dist/workflow/plans/planLinker.js.map +1 -1
  325. package/dist/workflow/plans/types.d.ts +6 -0
  326. package/dist/workflow/plans/types.d.ts.map +1 -1
  327. package/dist/workflow/skills/frontmatter.d.ts +9 -0
  328. package/dist/workflow/skills/frontmatter.d.ts.map +1 -1
  329. package/dist/workflow/skills/frontmatter.js +16 -0
  330. package/dist/workflow/skills/frontmatter.js.map +1 -1
  331. package/dist/workflow/skills/index.d.ts +1 -1
  332. package/dist/workflow/skills/index.d.ts.map +1 -1
  333. package/dist/workflow/skills/index.js +3 -1
  334. package/dist/workflow/skills/index.js.map +1 -1
  335. package/dist/workflow/skills/skillRegistry.d.ts.map +1 -1
  336. package/dist/workflow/skills/skillRegistry.js +4 -1
  337. package/dist/workflow/skills/skillRegistry.js.map +1 -1
  338. package/dist/workflow/skills/skillTemplates.d.ts.map +1 -1
  339. package/dist/workflow/skills/skillTemplates.js +69 -30
  340. package/dist/workflow/skills/skillTemplates.js.map +1 -1
  341. package/dist/workflow/status/statusManager.d.ts +8 -3
  342. package/dist/workflow/status/statusManager.d.ts.map +1 -1
  343. package/dist/workflow/status/statusManager.js +60 -21
  344. package/dist/workflow/status/statusManager.js.map +1 -1
  345. package/dist/workflow/types.d.ts +1 -1
  346. package/package.json +16 -7
  347. package/dist/services/ai/aiSdkClient.d.ts +0 -67
  348. package/dist/services/ai/aiSdkClient.d.ts.map +0 -1
  349. package/dist/services/ai/aiSdkClient.js +0 -143
  350. package/dist/services/ai/aiSdkClient.js.map +0 -1
  351. package/dist/services/ai/index.d.ts +0 -5
  352. package/dist/services/ai/index.d.ts.map +0 -1
  353. package/dist/services/ai/index.js +0 -40
  354. package/dist/services/ai/index.js.map +0 -1
  355. package/dist/services/ai/providerFactory.d.ts +0 -35
  356. package/dist/services/ai/providerFactory.d.ts.map +0 -1
  357. package/dist/services/ai/providerFactory.js +0 -107
  358. package/dist/services/ai/providerFactory.js.map +0 -1
  359. package/dist/services/ai/schemas.d.ts +0 -557
  360. package/dist/services/ai/schemas.d.ts.map +0 -1
  361. package/dist/services/ai/schemas.js +0 -357
  362. package/dist/services/ai/schemas.js.map +0 -1
  363. package/dist/services/ai/toolRegistry.d.ts +0 -27
  364. package/dist/services/ai/toolRegistry.d.ts.map +0 -1
  365. package/dist/services/ai/toolRegistry.js +0 -151
  366. package/dist/services/ai/toolRegistry.js.map +0 -1
  367. package/dist/services/ai/tools/analyzeSymbolsTool.d.ts +0 -33
  368. package/dist/services/ai/tools/analyzeSymbolsTool.d.ts.map +0 -1
  369. package/dist/services/ai/tools/analyzeSymbolsTool.js +0 -57
  370. package/dist/services/ai/tools/analyzeSymbolsTool.js.map +0 -1
  371. package/dist/services/ai/tools/checkScaffoldingTool.d.ts +0 -18
  372. package/dist/services/ai/tools/checkScaffoldingTool.d.ts.map +0 -1
  373. package/dist/services/ai/tools/checkScaffoldingTool.js +0 -89
  374. package/dist/services/ai/tools/checkScaffoldingTool.js.map +0 -1
  375. package/dist/services/ai/tools/fillScaffoldingTool.d.ts +0 -124
  376. package/dist/services/ai/tools/fillScaffoldingTool.d.ts.map +0 -1
  377. package/dist/services/ai/tools/fillScaffoldingTool.js +0 -397
  378. package/dist/services/ai/tools/fillScaffoldingTool.js.map +0 -1
  379. package/dist/services/ai/tools/getCodebaseMapTool.d.ts +0 -17
  380. package/dist/services/ai/tools/getCodebaseMapTool.d.ts.map +0 -1
  381. package/dist/services/ai/tools/getCodebaseMapTool.js +0 -122
  382. package/dist/services/ai/tools/getCodebaseMapTool.js.map +0 -1
  383. package/dist/services/ai/tools/getFileStructureTool.d.ts +0 -29
  384. package/dist/services/ai/tools/getFileStructureTool.d.ts.map +0 -1
  385. package/dist/services/ai/tools/getFileStructureTool.js +0 -48
  386. package/dist/services/ai/tools/getFileStructureTool.js.map +0 -1
  387. package/dist/services/ai/tools/index.d.ts +0 -21
  388. package/dist/services/ai/tools/index.d.ts.map +0 -1
  389. package/dist/services/ai/tools/index.js +0 -75
  390. package/dist/services/ai/tools/index.js.map +0 -1
  391. package/dist/services/ai/tools/initializeContextTool.d.ts +0 -135
  392. package/dist/services/ai/tools/initializeContextTool.d.ts.map +0 -1
  393. package/dist/services/ai/tools/initializeContextTool.js +0 -447
  394. package/dist/services/ai/tools/initializeContextTool.js.map +0 -1
  395. package/dist/services/ai/tools/listFilesTool.d.ts +0 -18
  396. package/dist/services/ai/tools/listFilesTool.d.ts.map +0 -1
  397. package/dist/services/ai/tools/listFilesTool.js +0 -34
  398. package/dist/services/ai/tools/listFilesTool.js.map +0 -1
  399. package/dist/services/ai/tools/readFileTool.d.ts +0 -17
  400. package/dist/services/ai/tools/readFileTool.d.ts.map +0 -1
  401. package/dist/services/ai/tools/readFileTool.js +0 -63
  402. package/dist/services/ai/tools/readFileTool.js.map +0 -1
  403. package/dist/services/ai/tools/scaffoldPlanTool.d.ts +0 -41
  404. package/dist/services/ai/tools/scaffoldPlanTool.d.ts.map +0 -1
  405. package/dist/services/ai/tools/scaffoldPlanTool.js +0 -183
  406. package/dist/services/ai/tools/scaffoldPlanTool.js.map +0 -1
  407. package/dist/services/ai/tools/searchCodeTool.d.ts +0 -25
  408. package/dist/services/ai/tools/searchCodeTool.d.ts.map +0 -1
  409. package/dist/services/ai/tools/searchCodeTool.js +0 -96
  410. package/dist/services/ai/tools/searchCodeTool.js.map +0 -1
  411. package/dist/services/baseLLMClient.d.ts +0 -12
  412. package/dist/services/baseLLMClient.d.ts.map +0 -1
  413. package/dist/services/baseLLMClient.js +0 -80
  414. package/dist/services/baseLLMClient.js.map +0 -1
package/dist/index.js CHANGED
@@ -45,17 +45,11 @@ const splashScreen_1 = require("./utils/splashScreen");
45
45
  const themedPrompt_1 = require("./utils/themedPrompt");
46
46
  const cliUI_1 = require("./utils/cliUI");
47
47
  const versionChecker_1 = require("./utils/versionChecker");
48
+ const processShutdown_1 = require("./utils/processShutdown");
48
49
  const i18n_1 = require("./utils/i18n");
49
- const syncService_1 = require("./services/sync/syncService");
50
- const import_1 = require("./services/import");
51
- const mcp_1 = require("./services/mcp");
52
- const state_1 = require("./services/state");
53
- const workflow_1 = require("./services/workflow");
54
- const export_1 = require("./services/export");
55
- const report_1 = require("./services/report");
56
- const quickSync_1 = require("./services/quickSync");
57
- const reverseSync_1 = require("./services/reverseSync");
58
- const workflow_2 = require("./workflow");
50
+ const cli_1 = require("./cli");
51
+ const mcp_1 = require("./mcp");
52
+ const harness_1 = require("./harness");
59
53
  const prompts_1 = require("./utils/prompts");
60
54
  const version_1 = require("./version");
61
55
  const rawArgs = process.argv.slice(2);
@@ -79,17 +73,17 @@ const localeLabelKeys = {
79
73
  };
80
74
  const program = new commander_1.Command();
81
75
  const ui = new cliUI_1.CLIInterface(t);
82
- const syncService = new syncService_1.SyncService({
76
+ const syncService = new cli_1.SyncService({
83
77
  ui,
84
78
  t,
85
79
  version: version_1.VERSION
86
80
  });
87
- const importRulesService = new import_1.ImportRulesService({
81
+ const importRulesService = new cli_1.ImportRulesService({
88
82
  ui,
89
83
  t,
90
84
  version: version_1.VERSION
91
85
  });
92
- const importAgentsService = new import_1.ImportAgentsService({
86
+ const importAgentsService = new cli_1.ImportAgentsService({
93
87
  ui,
94
88
  t,
95
89
  version: version_1.VERSION
@@ -134,25 +128,30 @@ function buildMcpToolChoices(supportedTools, detectedTools) {
134
128
  program.hook('preAction', () => {
135
129
  void scheduleVersionCheck();
136
130
  });
137
- program
138
- .command('sync-agents')
139
- .description(t('commands.sync.description'))
140
- .option('-s, --source <dir>', t('commands.sync.options.source'), './.context/agents')
141
- .option('-t, --target <paths...>', t('commands.sync.options.target'))
142
- .option('-m, --mode <type>', t('commands.sync.options.mode'), 'symlink')
143
- .option('-p, --preset <name>', t('commands.sync.options.preset'))
144
- .option('--force', t('commands.sync.options.force'))
145
- .option('--dry-run', t('commands.sync.options.dryRun'))
146
- .option('-v, --verbose', t('commands.sync.options.verbose'))
147
- .action(async (options) => {
148
- try {
149
- await syncService.run(options);
150
- }
151
- catch (error) {
152
- ui.displayError(t('errors.sync.failed'), error);
153
- process.exit(1);
154
- }
155
- });
131
+ function registerSyncCommand(parent, name, hidden = false) {
132
+ const command = parent
133
+ .command(name, hidden ? { hidden: true } : {})
134
+ .description(t('commands.sync.description'))
135
+ .option('-s, --source <dir>', t('commands.sync.options.source'), './.context/agents')
136
+ .option('-t, --target <paths...>', t('commands.sync.options.target'))
137
+ .option('-m, --mode <type>', t('commands.sync.options.mode'), 'symlink')
138
+ .option('-p, --preset <name>', t('commands.sync.options.preset'))
139
+ .option('--force', t('commands.sync.options.force'))
140
+ .option('--dry-run', t('commands.sync.options.dryRun'))
141
+ .option('-v, --verbose', t('commands.sync.options.verbose'))
142
+ .action(async (options) => {
143
+ try {
144
+ await syncService.run(options);
145
+ }
146
+ catch (error) {
147
+ ui.displayError(t('errors.sync.failed'), error);
148
+ process.exit(1);
149
+ }
150
+ });
151
+ return command;
152
+ }
153
+ registerSyncCommand(program, 'sync');
154
+ registerSyncCommand(program, 'sync-agents', true);
156
155
  program
157
156
  .command('import-rules')
158
157
  .description(t('commands.importRules.description'))
@@ -222,7 +221,7 @@ program
222
221
  .option('-v, --verbose', 'Verbose output')
223
222
  .action(async (repoPath, options) => {
224
223
  try {
225
- const service = new reverseSync_1.ReverseQuickSyncService({ ui, t, version: version_1.VERSION });
224
+ const service = new cli_1.ReverseQuickSyncService({ ui, t, version: version_1.VERSION });
226
225
  await service.run(repoPath, {
227
226
  dryRun: options.dryRun,
228
227
  force: options.force,
@@ -251,14 +250,13 @@ program
251
250
  repoPath: options.repoPath,
252
251
  verbose: options.verbose
253
252
  });
254
- // Handle graceful shutdown
255
- process.on('SIGINT', async () => {
256
- await server.stop();
257
- process.exit(0);
258
- });
259
- process.on('SIGTERM', async () => {
260
- await server.stop();
261
- process.exit(0);
253
+ (0, processShutdown_1.registerProcessShutdown)(server, {
254
+ onError: (error) => {
255
+ if (options.verbose) {
256
+ process.stderr.write(`[mcp] Shutdown error: ${error}\n`);
257
+ }
258
+ },
259
+ exit: (code) => process.exit(code),
262
260
  });
263
261
  }
264
262
  catch (error) {
@@ -278,13 +276,14 @@ program
278
276
  .option('-v, --verbose', t('commands.mcpInstall.options.verbose'))
279
277
  .action(async (tool, options) => {
280
278
  try {
281
- const mcpInstallService = new mcp_1.MCPInstallService({ ui, t, version: version_1.VERSION });
282
- // If no tool specified and not in CI, show interactive prompt
283
- if (!tool && process.stdin.isTTY) {
279
+ const mcpInstallService = new cli_1.MCPInstallService({ ui, t, version: version_1.VERSION });
280
+ let selectedTool = tool;
281
+ // Interactive terminals can choose a specific tool; headless runs default to all supported tools.
282
+ if (!selectedTool && process.stdin.isTTY) {
284
283
  const supportedTools = mcpInstallService.getSupportedTools();
285
284
  const detectedTools = await mcpInstallService.detectInstalledTools();
286
285
  const choices = buildMcpToolChoices(supportedTools, detectedTools);
287
- const { selectedTool } = await inquirer_1.default.prompt([
286
+ const { selectedTool: promptSelectedTool } = await inquirer_1.default.prompt([
288
287
  {
289
288
  type: 'list',
290
289
  name: 'selectedTool',
@@ -292,10 +291,13 @@ program
292
291
  choices,
293
292
  },
294
293
  ]);
295
- tool = selectedTool;
294
+ selectedTool = promptSelectedTool;
295
+ }
296
+ else if (!selectedTool) {
297
+ selectedTool = 'all';
296
298
  }
297
299
  const result = await mcpInstallService.run({
298
- tool,
300
+ tool: selectedTool,
299
301
  global: options.local ? false : options.global,
300
302
  dryRun: options.dryRun,
301
303
  verbose: options.verbose,
@@ -310,162 +312,167 @@ program
310
312
  process.exit(1);
311
313
  }
312
314
  });
313
- program
314
- .command('preview-splash')
315
- .description(t('commands.previewSplash.description'))
316
- .option('--title <title>', t('commands.previewSplash.options.title'))
317
- .option('--directory <path>', t('commands.previewSplash.options.directory'), process.cwd())
318
- .action(async (options) => {
319
- try {
320
- await renderStartupSplash(options.directory, options.title);
321
- }
322
- catch (error) {
323
- ui.displayError(t('errors.cli.executionFailed'), error);
324
- process.exit(1);
325
- }
326
- });
327
- // Export Rules Command
328
- program
329
- .command('export-rules')
330
- .description(t('commands.export.description'))
331
- .argument('[repo-path]', 'Repository path', process.cwd())
332
- .option('-s, --source <dir>', t('commands.export.options.source'), '.context/docs')
333
- .option('-t, --targets <paths...>', t('commands.export.options.targets'))
334
- .option('--preset <name>', t('commands.export.options.preset'))
335
- .option('--force', t('commands.export.options.force'))
336
- .option('--dry-run', t('commands.export.options.dryRun'))
337
- .option('-v, --verbose', t('commands.fill.options.verbose'))
338
- .action(async (repoPath, options) => {
339
- try {
340
- const exportService = new export_1.ExportRulesService({
341
- ui,
342
- t,
343
- version: version_1.VERSION,
344
- });
345
- await exportService.run(repoPath, {
346
- source: options.source,
347
- targets: options.targets,
348
- preset: options.preset,
349
- force: options.force,
350
- dryRun: options.dryRun,
351
- verbose: options.verbose,
352
- });
353
- }
354
- catch (error) {
355
- ui.displayError(t('errors.cli.executionFailed'), error);
356
- process.exit(1);
357
- }
358
- });
359
- // Report Command
360
- program
361
- .command('report')
362
- .description(t('commands.report.description'))
363
- .argument('[repo-path]', 'Repository path', process.cwd())
364
- .option('-f, --format <format>', t('commands.report.options.format'), 'console')
365
- .option('-o, --output <path>', t('commands.report.options.output'))
366
- .option('--include-stack', t('commands.report.options.includeStack'))
367
- .option('-v, --verbose', t('commands.fill.options.verbose'))
368
- .action(async (repoPath, options) => {
369
- try {
370
- const reportService = new report_1.ReportService({
371
- ui,
372
- t,
373
- version: version_1.VERSION,
374
- });
375
- const report = await reportService.generate(repoPath, {
376
- format: options.format,
377
- output: options.output,
378
- includeStack: options.includeStack,
379
- verbose: options.verbose,
380
- });
381
- await reportService.output(report, options);
382
- }
383
- catch (error) {
384
- ui.displayError(t('errors.cli.executionFailed'), error);
385
- process.exit(1);
386
- }
387
- });
388
- // Skill Commands
389
- const skillCommand = program
390
- .command('skill')
391
- .description(t('commands.skill.description'));
392
- skillCommand
393
- .command('list')
394
- .description(t('commands.skill.list.description'))
395
- .argument('[repo-path]', 'Repository path', process.cwd())
396
- .option('--json', 'Output as JSON')
397
- .action(async (repoPath, options) => {
398
- try {
399
- const { createSkillRegistry } = await Promise.resolve().then(() => __importStar(require('./workflow/skills')));
400
- const registry = createSkillRegistry(repoPath);
401
- const discovered = await registry.discoverAll();
402
- if (options.json) {
403
- console.log(JSON.stringify({
404
- builtIn: discovered.builtIn.map(s => s.slug),
405
- custom: discovered.custom.map(s => s.slug),
406
- total: discovered.all.length,
407
- }, null, 2));
408
- return;
315
+ function registerPreviewSplashCommand(parent, hidden = false) {
316
+ const command = parent
317
+ .command('preview-splash', hidden ? { hidden: true } : {})
318
+ .description(t('commands.previewSplash.description'))
319
+ .option('--title <title>', t('commands.previewSplash.options.title'))
320
+ .option('--directory <path>', t('commands.previewSplash.options.directory'), process.cwd())
321
+ .action(async (options) => {
322
+ try {
323
+ await renderStartupSplash(options.directory, options.title);
409
324
  }
410
- console.log('\nBuilt-in Skills:');
411
- for (const skill of discovered.builtIn) {
412
- const projectSkill = discovered.all.find(s => s.slug === skill.slug && s.path.includes('.context'));
413
- const status = projectSkill ? '[project]' : '[available]';
414
- console.log(` ${skill.slug} ${status}`);
415
- console.log(` ${skill.metadata.description}`);
325
+ catch (error) {
326
+ ui.displayError(t('errors.cli.executionFailed'), error);
327
+ process.exit(1);
328
+ }
329
+ });
330
+ return command;
331
+ }
332
+ function registerExportRulesCommand(parent, hidden = false) {
333
+ const command = parent
334
+ .command('export-rules', hidden ? { hidden: true } : {})
335
+ .description(t('commands.export.description'))
336
+ .argument('[repo-path]', 'Repository path', process.cwd())
337
+ .option('-s, --source <dir>', t('commands.export.options.source'), '.context/docs')
338
+ .option('-t, --targets <paths...>', t('commands.export.options.targets'))
339
+ .option('--preset <name>', t('commands.export.options.preset'))
340
+ .option('--force', t('commands.export.options.force'))
341
+ .option('--dry-run', t('commands.export.options.dryRun'))
342
+ .option('-v, --verbose', t('commands.fill.options.verbose'))
343
+ .action(async (repoPath, options) => {
344
+ try {
345
+ const exportService = new cli_1.ExportRulesService({
346
+ ui,
347
+ t,
348
+ version: version_1.VERSION,
349
+ });
350
+ await exportService.run(repoPath, {
351
+ source: options.source,
352
+ targets: options.targets,
353
+ preset: options.preset,
354
+ force: options.force,
355
+ dryRun: options.dryRun,
356
+ verbose: options.verbose,
357
+ });
416
358
  }
417
- if (discovered.custom.length > 0) {
418
- console.log('\nCustom Skills:');
419
- for (const skill of discovered.custom) {
420
- console.log(` ${skill.slug}`);
359
+ catch (error) {
360
+ ui.displayError(t('errors.cli.executionFailed'), error);
361
+ process.exit(1);
362
+ }
363
+ });
364
+ return command;
365
+ }
366
+ function registerReportCommand(parent, hidden = false) {
367
+ const command = parent
368
+ .command('report', hidden ? { hidden: true } : {})
369
+ .description(t('commands.report.description'))
370
+ .argument('[repo-path]', 'Repository path', process.cwd())
371
+ .option('-f, --format <format>', t('commands.report.options.format'), 'console')
372
+ .option('-o, --output <path>', t('commands.report.options.output'))
373
+ .option('--include-stack', t('commands.report.options.includeStack'))
374
+ .option('-v, --verbose', t('commands.fill.options.verbose'))
375
+ .action(async (repoPath, options) => {
376
+ try {
377
+ const reportService = new cli_1.ReportService({
378
+ ui,
379
+ t,
380
+ version: version_1.VERSION,
381
+ });
382
+ const report = await reportService.generate(repoPath, {
383
+ format: options.format,
384
+ output: options.output,
385
+ includeStack: options.includeStack,
386
+ verbose: options.verbose,
387
+ });
388
+ await reportService.output(report, options);
389
+ }
390
+ catch (error) {
391
+ ui.displayError(t('errors.cli.executionFailed'), error);
392
+ process.exit(1);
393
+ }
394
+ });
395
+ return command;
396
+ }
397
+ function registerSkillCommands(parent, hidden = false) {
398
+ const skillCommand = parent
399
+ .command('skill', hidden ? { hidden: true } : {})
400
+ .description(t('commands.skill.description'));
401
+ skillCommand
402
+ .command('list')
403
+ .description(t('commands.skill.list.description'))
404
+ .argument('[repo-path]', 'Repository path', process.cwd())
405
+ .option('--json', 'Output as JSON')
406
+ .action(async (repoPath, options) => {
407
+ try {
408
+ const { createSkillRegistry } = await Promise.resolve().then(() => __importStar(require('./workflow/skills')));
409
+ const registry = createSkillRegistry(repoPath);
410
+ const discovered = await registry.discoverAll();
411
+ if (options.json) {
412
+ console.log(JSON.stringify({
413
+ builtIn: discovered.builtIn.map(s => s.slug),
414
+ custom: discovered.custom.map(s => s.slug),
415
+ total: discovered.all.length,
416
+ }, null, 2));
417
+ return;
418
+ }
419
+ console.log('\nBuilt-in Skills:');
420
+ for (const skill of discovered.builtIn) {
421
+ const projectSkill = discovered.all.find(s => s.slug === skill.slug && s.path.includes('.context'));
422
+ const status = projectSkill ? '[project]' : '[available]';
423
+ console.log(` ${skill.slug} ${status}`);
421
424
  console.log(` ${skill.metadata.description}`);
422
425
  }
426
+ if (discovered.custom.length > 0) {
427
+ console.log('\nCustom Skills:');
428
+ for (const skill of discovered.custom) {
429
+ console.log(` ${skill.slug}`);
430
+ console.log(` ${skill.metadata.description}`);
431
+ }
432
+ }
433
+ console.log(`\nTotal: ${discovered.all.length} skills (${discovered.builtIn.length} built-in, ${discovered.custom.length} custom)`);
423
434
  }
424
- console.log(`\nTotal: ${discovered.all.length} skills (${discovered.builtIn.length} built-in, ${discovered.custom.length} custom)`);
425
- }
426
- catch (error) {
427
- ui.displayError('Failed to list skills', error);
428
- process.exit(1);
429
- }
430
- });
431
- skillCommand
432
- .command('export')
433
- .description(t('commands.skill.export.description'))
434
- .argument('[repo-path]', 'Repository path', process.cwd())
435
- .option('-p, --preset <preset>', 'Export preset: claude, gemini, codex, all', 'all')
436
- .option('-f, --force', 'Overwrite existing files')
437
- .option('--include-builtin', 'Include built-in skills even if not scaffolded')
438
- .option('--dry-run', 'Preview changes without writing')
439
- .action(async (repoPath, options) => {
440
- try {
441
- const { SkillExportService } = await Promise.resolve().then(() => __importStar(require('./services/export/skillExportService')));
442
- const exportService = new SkillExportService({
443
- ui,
444
- t,
445
- version: version_1.VERSION,
446
- });
447
- const result = await exportService.run(repoPath, {
448
- preset: options.preset,
449
- force: options.force,
450
- includeBuiltIn: options.includeBuiltin,
451
- dryRun: options.dryRun,
452
- });
453
- if (options.dryRun) {
454
- ui.displayInfo('Dry run', 'No files were written');
435
+ catch (error) {
436
+ ui.displayError('Failed to list skills', error);
437
+ process.exit(1);
455
438
  }
456
- else {
457
- ui.displaySuccess(`Exported ${result.skillsExported.length} skills to ${result.targets.length} targets`);
439
+ });
440
+ skillCommand
441
+ .command('export')
442
+ .description(t('commands.skill.export.description'))
443
+ .argument('[repo-path]', 'Repository path', process.cwd())
444
+ .option('-p, --preset <preset>', 'Export preset, for example: claude, github, windsurf, codex, antigravity, all', 'all')
445
+ .option('-f, --force', 'Overwrite existing files')
446
+ .option('--include-builtin', 'Include built-in skills even if not scaffolded')
447
+ .option('--dry-run', 'Preview changes without writing')
448
+ .action(async (repoPath, options) => {
449
+ try {
450
+ const { SkillExportService } = await Promise.resolve().then(() => __importStar(require('./services/export/skillExportService')));
451
+ const exportService = new SkillExportService({
452
+ ui,
453
+ t,
454
+ version: version_1.VERSION,
455
+ });
456
+ const result = await exportService.run(repoPath, {
457
+ preset: options.preset,
458
+ force: options.force,
459
+ includeBuiltIn: options.includeBuiltin,
460
+ dryRun: options.dryRun,
461
+ });
462
+ if (options.dryRun) {
463
+ ui.displayInfo('Dry run', 'No files were written');
464
+ }
465
+ else {
466
+ ui.displaySuccess(`Exported ${result.skillsExported.length} skills to ${result.targets.length} targets`);
467
+ }
458
468
  }
459
- }
460
- catch (error) {
461
- ui.displayError('Failed to export skills', error);
462
- process.exit(1);
463
- }
464
- });
465
- // PREVC Workflow Commands
466
- const workflowCommand = program
467
- .command('workflow')
468
- .description('PREVC workflow management (Planning, Review, Execution, Validation, Confirmation)');
469
+ catch (error) {
470
+ ui.displayError('Failed to export skills', error);
471
+ process.exit(1);
472
+ }
473
+ });
474
+ return skillCommand;
475
+ }
469
476
  // Helper to create workflow service dependencies
470
477
  const getWorkflowDeps = () => ({
471
478
  ui: {
@@ -474,147 +481,165 @@ const getWorkflowDeps = () => ({
474
481
  displayInfo: (title, detail) => ui.displayInfo(title, detail || '')
475
482
  }
476
483
  });
477
- workflowCommand
478
- .command('init <name>')
479
- .description('Initialize a new PREVC workflow')
480
- .option('-d, --description <text>', 'Project description for scale detection')
481
- .option('-s, --scale <scale>', 'Project scale: QUICK, SMALL, MEDIUM, LARGE')
482
- .option('-r, --repo-path <path>', 'Repository path', process.cwd())
483
- .action(async (name, options) => {
484
- try {
485
- const workflowService = new workflow_1.WorkflowService(options.repoPath, getWorkflowDeps());
486
- const status = await workflowService.init({
487
- name,
488
- description: options.description,
489
- scale: options.scale
490
- });
491
- ui.displaySuccess(`Workflow PREVC initialized: ${name}`);
492
- ui.displayInfo('Scale', (0, workflow_2.getScaleName)(status.project.scale));
493
- ui.displayInfo('Current Phase', `${status.project.current_phase} - ${workflow_2.PHASE_NAMES_PT[status.project.current_phase]}`);
494
- }
495
- catch (error) {
496
- ui.displayError('Failed to initialize workflow', error);
497
- process.exit(1);
498
- }
499
- });
500
- workflowCommand
501
- .command('status')
502
- .description('Show current workflow status')
503
- .option('-r, --repo-path <path>', 'Repository path', process.cwd())
504
- .action(async (options) => {
505
- try {
506
- const workflowService = new workflow_1.WorkflowService(options.repoPath, getWorkflowDeps());
507
- if (!await workflowService.hasWorkflow()) {
508
- ui.displayError('No workflow found. Run "workflow init <name>" first.');
484
+ function registerWorkflowCommands(parent, hidden = false) {
485
+ const workflowCommand = parent
486
+ .command('workflow', hidden ? { hidden: true } : {})
487
+ .description('PREVC workflow management (Planning, Review, Execution, Validation, Confirmation)');
488
+ workflowCommand
489
+ .command('init <name>')
490
+ .description('Initialize a new PREVC workflow')
491
+ .option('-d, --description <text>', 'Project description for scale detection')
492
+ .option('-s, --scale <scale>', 'Project scale: QUICK, SMALL, MEDIUM, LARGE')
493
+ .option('-r, --repo-path <path>', 'Repository path', process.cwd())
494
+ .action(async (name, options) => {
495
+ try {
496
+ const workflowService = new harness_1.WorkflowService(options.repoPath, getWorkflowDeps());
497
+ const status = await workflowService.init({
498
+ name,
499
+ description: options.description,
500
+ scale: options.scale
501
+ });
502
+ ui.displaySuccess(`Workflow PREVC initialized: ${name}`);
503
+ ui.displayInfo('Scale', (0, harness_1.getScaleName)(status.project.scale));
504
+ ui.displayInfo('Current Phase', `${status.project.current_phase} - ${harness_1.PHASE_NAMES_PT[status.project.current_phase]}`);
505
+ }
506
+ catch (error) {
507
+ ui.displayError('Failed to initialize workflow', error);
509
508
  process.exit(1);
510
509
  }
511
- const formattedStatus = await workflowService.getFormattedStatus();
512
- console.log(formattedStatus);
513
- const actions = await workflowService.getRecommendedActions();
514
- if (actions.length > 0) {
515
- console.log('\nRecommended actions:');
516
- actions.forEach((action, i) => console.log(` ${i + 1}. ${action}`));
510
+ });
511
+ workflowCommand
512
+ .command('status')
513
+ .description('Show current workflow status')
514
+ .option('-r, --repo-path <path>', 'Repository path', process.cwd())
515
+ .action(async (options) => {
516
+ try {
517
+ const workflowService = new harness_1.WorkflowService(options.repoPath, getWorkflowDeps());
518
+ if (!await workflowService.hasWorkflow()) {
519
+ ui.displayError('No workflow found. Run "workflow init <name>" first.');
520
+ process.exit(1);
521
+ }
522
+ const formattedStatus = await workflowService.getFormattedStatus();
523
+ console.log(formattedStatus);
524
+ const actions = await workflowService.getRecommendedActions();
525
+ if (actions.length > 0) {
526
+ console.log('\nRecommended actions:');
527
+ actions.forEach((action, i) => console.log(` ${i + 1}. ${action}`));
528
+ }
517
529
  }
518
- }
519
- catch (error) {
520
- ui.displayError('Failed to get workflow status', error);
521
- process.exit(1);
522
- }
523
- });
524
- workflowCommand
525
- .command('advance')
526
- .description('Complete current phase and advance to next')
527
- .option('-r, --repo-path <path>', 'Repository path', process.cwd())
528
- .option('-o, --outputs <files...>', 'Output files generated in current phase')
529
- .action(async (options) => {
530
- try {
531
- const workflowService = new workflow_1.WorkflowService(options.repoPath, getWorkflowDeps());
532
- if (!await workflowService.hasWorkflow()) {
533
- ui.displayError('No workflow found. Run "workflow init <name>" first.');
530
+ catch (error) {
531
+ ui.displayError('Failed to get workflow status', error);
534
532
  process.exit(1);
535
533
  }
536
- const nextPhase = await workflowService.advance(options.outputs);
537
- if (nextPhase) {
538
- ui.displaySuccess(`Advanced to phase: ${nextPhase} - ${workflow_2.PHASE_NAMES_PT[nextPhase]}`);
539
- }
540
- else {
541
- ui.displaySuccess('Workflow completed!');
534
+ });
535
+ workflowCommand
536
+ .command('advance')
537
+ .description('Complete current phase and advance to next')
538
+ .option('-r, --repo-path <path>', 'Repository path', process.cwd())
539
+ .option('-o, --outputs <files...>', 'Output files generated in current phase')
540
+ .action(async (options) => {
541
+ try {
542
+ const workflowService = new harness_1.WorkflowService(options.repoPath, getWorkflowDeps());
543
+ if (!await workflowService.hasWorkflow()) {
544
+ ui.displayError('No workflow found. Run "workflow init <name>" first.');
545
+ process.exit(1);
546
+ }
547
+ const nextPhase = await workflowService.advance(options.outputs);
548
+ if (nextPhase) {
549
+ ui.displaySuccess(`Advanced to phase: ${nextPhase} - ${harness_1.PHASE_NAMES_PT[nextPhase]}`);
550
+ }
551
+ else {
552
+ ui.displaySuccess('Workflow completed!');
553
+ }
542
554
  }
543
- }
544
- catch (error) {
545
- ui.displayError('Failed to advance workflow', error);
546
- process.exit(1);
547
- }
548
- });
549
- workflowCommand
550
- .command('handoff <from> <to>')
551
- .description('Perform handoff between roles')
552
- .option('-r, --repo-path <path>', 'Repository path', process.cwd())
553
- .option('-a, --artifacts <files...>', 'Artifacts to hand off')
554
- .action(async (from, to, options) => {
555
- try {
556
- const workflowService = new workflow_1.WorkflowService(options.repoPath, getWorkflowDeps());
557
- if (!await workflowService.hasWorkflow()) {
558
- ui.displayError('No workflow found. Run "workflow init <name>" first.');
555
+ catch (error) {
556
+ ui.displayError('Failed to advance workflow', error);
559
557
  process.exit(1);
560
558
  }
561
- await workflowService.handoff(from, to, options.artifacts || []);
562
- ui.displaySuccess(`Handoff: ${workflow_2.ROLE_DISPLAY_NAMES[from]} → ${workflow_2.ROLE_DISPLAY_NAMES[to]}`);
563
- }
564
- catch (error) {
565
- ui.displayError('Failed to perform handoff', error);
566
- process.exit(1);
567
- }
568
- });
569
- workflowCommand
570
- .command('collaborate <topic>')
571
- .description('Start a collaboration session between roles')
572
- .option('-r, --repo-path <path>', 'Repository path', process.cwd())
573
- .option('-p, --participants <roles...>', 'Participating roles')
574
- .action(async (topic, options) => {
575
- try {
576
- const workflowService = new workflow_1.WorkflowService(options.repoPath, getWorkflowDeps());
577
- const session = await workflowService.startCollaboration(topic, options.participants);
578
- ui.displaySuccess(`Collaboration started: ${topic}`);
579
- ui.displayInfo('Session ID', session.getId());
580
- ui.displayInfo('Participants', session.getParticipantNames().join(', '));
581
- console.log('\nUse MCP tools to contribute and synthesize the collaboration.');
582
- }
583
- catch (error) {
584
- ui.displayError('Failed to start collaboration', error);
585
- process.exit(1);
586
- }
587
- });
588
- workflowCommand
589
- .command('role <action> <role>')
590
- .description('Manage role status (start/complete)')
591
- .option('-r, --repo-path <path>', 'Repository path', process.cwd())
592
- .option('-o, --outputs <files...>', 'Output files (for complete action)')
593
- .action(async (action, role, options) => {
594
- try {
595
- const workflowService = new workflow_1.WorkflowService(options.repoPath, getWorkflowDeps());
596
- if (!await workflowService.hasWorkflow()) {
597
- ui.displayError('No workflow found. Run "workflow init <name>" first.');
559
+ });
560
+ workflowCommand
561
+ .command('handoff <from> <to>')
562
+ .description('Perform handoff between roles')
563
+ .option('-r, --repo-path <path>', 'Repository path', process.cwd())
564
+ .option('-a, --artifacts <files...>', 'Artifacts to hand off')
565
+ .action(async (from, to, options) => {
566
+ try {
567
+ const workflowService = new harness_1.WorkflowService(options.repoPath, getWorkflowDeps());
568
+ if (!await workflowService.hasWorkflow()) {
569
+ ui.displayError('No workflow found. Run "workflow init <name>" first.');
570
+ process.exit(1);
571
+ }
572
+ await workflowService.handoff(from, to, options.artifacts || []);
573
+ ui.displaySuccess(`Handoff: ${harness_1.ROLE_DISPLAY_NAMES[from]} → ${harness_1.ROLE_DISPLAY_NAMES[to]}`);
574
+ }
575
+ catch (error) {
576
+ ui.displayError('Failed to perform handoff', error);
598
577
  process.exit(1);
599
578
  }
600
- if (action === 'start') {
601
- await workflowService.startRole(role);
602
- ui.displaySuccess(`Started role: ${workflow_2.ROLE_DISPLAY_NAMES[role]}`);
579
+ });
580
+ workflowCommand
581
+ .command('collaborate <topic>')
582
+ .description('Start a collaboration session between roles')
583
+ .option('-r, --repo-path <path>', 'Repository path', process.cwd())
584
+ .option('-p, --participants <roles...>', 'Participating roles')
585
+ .action(async (topic, options) => {
586
+ try {
587
+ const workflowService = new harness_1.WorkflowService(options.repoPath, getWorkflowDeps());
588
+ const session = await workflowService.startCollaboration(topic, options.participants);
589
+ ui.displaySuccess(`Collaboration started: ${topic}`);
590
+ ui.displayInfo('Session ID', session.getId());
591
+ ui.displayInfo('Participants', session.getParticipantNames().join(', '));
592
+ console.log('\nUse MCP tools to contribute and synthesize the collaboration.');
603
593
  }
604
- else if (action === 'complete') {
605
- await workflowService.completeRole(role, options.outputs || []);
606
- ui.displaySuccess(`Completed role: ${workflow_2.ROLE_DISPLAY_NAMES[role]}`);
594
+ catch (error) {
595
+ ui.displayError('Failed to start collaboration', error);
596
+ process.exit(1);
607
597
  }
608
- else {
609
- ui.displayError(`Unknown action: ${action}. Use 'start' or 'complete'.`);
598
+ });
599
+ workflowCommand
600
+ .command('role <action> <role>')
601
+ .description('Manage role status (start/complete)')
602
+ .option('-r, --repo-path <path>', 'Repository path', process.cwd())
603
+ .option('-o, --outputs <files...>', 'Output files (for complete action)')
604
+ .action(async (action, role, options) => {
605
+ try {
606
+ const workflowService = new harness_1.WorkflowService(options.repoPath, getWorkflowDeps());
607
+ if (!await workflowService.hasWorkflow()) {
608
+ ui.displayError('No workflow found. Run "workflow init <name>" first.');
609
+ process.exit(1);
610
+ }
611
+ if (action === 'start') {
612
+ await workflowService.startRole(role);
613
+ ui.displaySuccess(`Started role: ${harness_1.ROLE_DISPLAY_NAMES[role]}`);
614
+ }
615
+ else if (action === 'complete') {
616
+ await workflowService.completeRole(role, options.outputs || []);
617
+ ui.displaySuccess(`Completed role: ${harness_1.ROLE_DISPLAY_NAMES[role]}`);
618
+ }
619
+ else {
620
+ ui.displayError(`Unknown action: ${action}. Use 'start' or 'complete'.`);
621
+ process.exit(1);
622
+ }
623
+ }
624
+ catch (error) {
625
+ ui.displayError('Failed to manage role', error);
610
626
  process.exit(1);
611
627
  }
612
- }
613
- catch (error) {
614
- ui.displayError('Failed to manage role', error);
615
- process.exit(1);
616
- }
617
- });
628
+ });
629
+ return workflowCommand;
630
+ }
631
+ const adminCommand = program
632
+ .command('admin')
633
+ .description('Advanced and low-level commands that are not part of the primary sync-focused CLI surface');
634
+ registerExportRulesCommand(program);
635
+ registerReportCommand(adminCommand);
636
+ registerReportCommand(program, true);
637
+ registerSkillCommands(adminCommand);
638
+ registerSkillCommands(program, true);
639
+ registerWorkflowCommands(adminCommand);
640
+ registerWorkflowCommands(program, true);
641
+ registerPreviewSplashCommand(adminCommand);
642
+ registerPreviewSplashCommand(program, true);
618
643
  async function selectLocale() {
619
644
  const locale = await (0, themedPrompt_1.themedSelect)({
620
645
  message: t('prompts.language.select'),
@@ -630,7 +655,7 @@ async function selectLocale() {
630
655
  }
631
656
  async function runInteractive() {
632
657
  const projectPath = process.cwd();
633
- const detector = new state_1.StateDetector({ projectPath });
658
+ const detector = new cli_1.StateDetector({ projectPath });
634
659
  const result = await detector.detect();
635
660
  // Detect smart defaults for display
636
661
  const defaults = await (0, prompts_1.detectSmartDefaults)(projectPath);
@@ -663,7 +688,7 @@ async function runInteractive() {
663
688
  }
664
689
  else {
665
690
  // Get quick stats only when we have context
666
- const quickSyncService = new quickSync_1.QuickSyncService({
691
+ const quickSyncService = new cli_1.QuickSyncService({
667
692
  ui,
668
693
  t,
669
694
  version: version_1.VERSION,
@@ -713,7 +738,7 @@ async function runInteractive() {
713
738
  async function runFullMenu() {
714
739
  let exitRequested = false;
715
740
  while (!exitRequested) {
716
- const detector = new state_1.StateDetector({ projectPath: process.cwd() });
741
+ const detector = new cli_1.StateDetector({ projectPath: process.cwd() });
717
742
  const state = await detector.detect();
718
743
  const isUnfilled = state.state === 'unfilled';
719
744
  const choices = isUnfilled
@@ -774,7 +799,7 @@ async function displayPendingFiles(contextDir) {
774
799
  console.log();
775
800
  }
776
801
  async function runMcpInstall() {
777
- const mcpInstallService = new mcp_1.MCPInstallService({ ui, t, version: version_1.VERSION });
802
+ const mcpInstallService = new cli_1.MCPInstallService({ ui, t, version: version_1.VERSION });
778
803
  const supportedTools = mcpInstallService.getSupportedTools();
779
804
  const detectedTools = await mcpInstallService.detectInstalledTools();
780
805
  const mcpChoices = buildMcpToolChoices(supportedTools, detectedTools);
@@ -896,8 +921,8 @@ async function runQuickSync() {
896
921
  skipSkills: false,
897
922
  skipDocs: false,
898
923
  agentTargets: ['claude', 'github'],
899
- skillTargets: ['claude', 'gemini', 'codex'],
900
- docTargets: ['cursor', 'claude', 'agents'],
924
+ skillTargets: ['claude', 'github', 'windsurf', 'codex', 'antigravity'],
925
+ docTargets: ['cursor', 'claude', 'github', 'gemini', 'agents'],
901
926
  force: false,
902
927
  dryRun: false,
903
928
  verbose: false,
@@ -950,8 +975,11 @@ async function runQuickSync() {
950
975
  message: t('prompts.quickSync.selectSkillTargets'),
951
976
  choices: [
952
977
  { name: '.claude/skills (Claude Code)', value: 'claude', checked: true },
953
- { name: '.gemini/skills (Gemini CLI)', value: 'gemini', checked: true },
954
- { name: '.codex/skills (Codex CLI)', value: 'codex', checked: true },
978
+ { name: '.github/skills (GitHub Copilot)', value: 'github', checked: true },
979
+ { name: '.windsurf/skills (Windsurf)', value: 'windsurf', checked: true },
980
+ { name: '.codex/skills (Codex compatibility)', value: 'codex', checked: true },
981
+ { name: '.agents/workflows (Google Antigravity)', value: 'antigravity', checked: true },
982
+ { name: '.gemini/skills (Gemini compatibility)', value: 'gemini', checked: false },
955
983
  ],
956
984
  },
957
985
  ]);
@@ -964,10 +992,12 @@ async function runQuickSync() {
964
992
  name: 'targets',
965
993
  message: t('prompts.quickSync.selectDocTargets'),
966
994
  choices: [
967
- { name: '.cursorrules (Cursor AI)', value: 'cursor', checked: true },
995
+ { name: '.cursor/rules (Cursor AI)', value: 'cursor', checked: true },
968
996
  { name: 'CLAUDE.md (Claude Code)', value: 'claude', checked: true },
997
+ { name: '.github/copilot-instructions.md (GitHub Copilot)', value: 'github', checked: true },
998
+ { name: 'GEMINI.md (Gemini CLI)', value: 'gemini', checked: true },
969
999
  { name: 'AGENTS.md (Universal)', value: 'agents', checked: true },
970
- { name: '.windsurfrules (Windsurf)', value: 'windsurf', checked: false },
1000
+ { name: '.windsurf/rules (Windsurf)', value: 'windsurf', checked: false },
971
1001
  { name: '.clinerules (Cline)', value: 'cline', checked: false },
972
1002
  { name: 'CONVENTIONS.md (Aider)', value: 'aider', checked: false },
973
1003
  ],
@@ -987,7 +1017,7 @@ async function runQuickSync() {
987
1017
  verbose: false,
988
1018
  };
989
1019
  }
990
- const quickSyncService = new quickSync_1.QuickSyncService({
1020
+ const quickSyncService = new cli_1.QuickSyncService({
991
1021
  ui,
992
1022
  t,
993
1023
  version: version_1.VERSION,
@@ -1001,7 +1031,7 @@ async function runQuickSync() {
1001
1031
  async function runReverseSync() {
1002
1032
  const projectPath = process.cwd();
1003
1033
  // Create service
1004
- const reverseSyncService = new reverseSync_1.ReverseQuickSyncService({
1034
+ const reverseSyncService = new cli_1.ReverseQuickSyncService({
1005
1035
  ui,
1006
1036
  t,
1007
1037
  version: version_1.VERSION,
@@ -1161,10 +1191,6 @@ function handleGracefulExit() {
1161
1191
  ui.displaySuccess(t('success.interactive.goodbye'));
1162
1192
  process.exit(0);
1163
1193
  }
1164
- // Handle SIGINT (Ctrl+C) at process level
1165
- process.on('SIGINT', () => {
1166
- handleGracefulExit();
1167
- });
1168
1194
  if (require.main === module) {
1169
1195
  main().catch(error => {
1170
1196
  if (isUserInterrupt(error)) {