@dotcontext/cli 0.8.2 → 0.9.1

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 +236 -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 +29 -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 +370 -378
  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 +206 -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 +19 -0
  56. package/dist/services/cli/index.js.map +1 -0
  57. package/dist/services/cli/mcpInstallService.d.ts +75 -0
  58. package/dist/services/cli/mcpInstallService.d.ts.map +1 -0
  59. package/dist/services/cli/mcpInstallService.js +646 -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 +17 -8
  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
@@ -112,47 +106,33 @@ function scheduleVersionCheck(force = false) {
112
106
  }
113
107
  return versionCheckPromise;
114
108
  }
115
- function buildMcpToolChoices(supportedTools, detectedTools) {
116
- const detectedSet = new Set(detectedTools);
117
- const orderedTools = [
118
- ...supportedTools.filter(tool => detectedSet.has(tool.id)),
119
- ...supportedTools.filter(tool => !detectedSet.has(tool.id)),
120
- ];
121
- return [
122
- {
123
- name: t('commands.mcpInstall.allDetected'),
124
- value: 'all',
125
- },
126
- ...orderedTools.map(tool => ({
127
- name: detectedSet.has(tool.id)
128
- ? `${tool.displayName} (${t('labels.detected')})`
129
- : tool.displayName,
130
- value: tool.id,
131
- })),
132
- ];
133
- }
134
109
  program.hook('preAction', () => {
135
110
  void scheduleVersionCheck();
136
111
  });
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
- });
112
+ function registerSyncCommand(parent, name, hidden = false) {
113
+ const command = parent
114
+ .command(name, hidden ? { hidden: true } : {})
115
+ .description(t('commands.sync.description'))
116
+ .option('-s, --source <dir>', t('commands.sync.options.source'), './.context/agents')
117
+ .option('-t, --target <paths...>', t('commands.sync.options.target'))
118
+ .option('-m, --mode <type>', t('commands.sync.options.mode'), 'symlink')
119
+ .option('-p, --preset <name>', t('commands.sync.options.preset'))
120
+ .option('--force', t('commands.sync.options.force'))
121
+ .option('--dry-run', t('commands.sync.options.dryRun'))
122
+ .option('-v, --verbose', t('commands.sync.options.verbose'))
123
+ .action(async (options) => {
124
+ try {
125
+ await syncService.run(options);
126
+ }
127
+ catch (error) {
128
+ ui.displayError(t('errors.sync.failed'), error);
129
+ process.exit(1);
130
+ }
131
+ });
132
+ return command;
133
+ }
134
+ registerSyncCommand(program, 'sync');
135
+ registerSyncCommand(program, 'sync-agents', true);
156
136
  program
157
137
  .command('import-rules')
158
138
  .description(t('commands.importRules.description'))
@@ -222,7 +202,7 @@ program
222
202
  .option('-v, --verbose', 'Verbose output')
223
203
  .action(async (repoPath, options) => {
224
204
  try {
225
- const service = new reverseSync_1.ReverseQuickSyncService({ ui, t, version: version_1.VERSION });
205
+ const service = new cli_1.ReverseQuickSyncService({ ui, t, version: version_1.VERSION });
226
206
  await service.run(repoPath, {
227
207
  dryRun: options.dryRun,
228
208
  force: options.force,
@@ -251,14 +231,13 @@ program
251
231
  repoPath: options.repoPath,
252
232
  verbose: options.verbose
253
233
  });
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);
234
+ (0, processShutdown_1.registerProcessShutdown)(server, {
235
+ onError: (error) => {
236
+ if (options.verbose) {
237
+ process.stderr.write(`[mcp] Shutdown error: ${error}\n`);
238
+ }
239
+ },
240
+ exit: (code) => process.exit(code),
262
241
  });
263
242
  }
264
243
  catch (error) {
@@ -278,24 +257,16 @@ program
278
257
  .option('-v, --verbose', t('commands.mcpInstall.options.verbose'))
279
258
  .action(async (tool, options) => {
280
259
  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) {
284
- const supportedTools = mcpInstallService.getSupportedTools();
285
- const detectedTools = await mcpInstallService.detectInstalledTools();
286
- const choices = buildMcpToolChoices(supportedTools, detectedTools);
287
- const { selectedTool } = await inquirer_1.default.prompt([
288
- {
289
- type: 'list',
290
- name: 'selectedTool',
291
- message: t('commands.mcpInstall.selectTool'),
292
- choices,
293
- },
294
- ]);
295
- tool = selectedTool;
296
- }
260
+ const mcpInstallService = new cli_1.MCPInstallService({ ui, t, version: version_1.VERSION });
261
+ const selectedTool = await (0, cli_1.resolveMcpInstallToolSelection)({
262
+ selectedTool: tool,
263
+ isInteractive: Boolean(process.stdin.isTTY),
264
+ service: mcpInstallService,
265
+ t,
266
+ promptTool: ({ message, choices }) => (0, themedPrompt_1.themedSelect)({ message, choices }),
267
+ });
297
268
  const result = await mcpInstallService.run({
298
- tool,
269
+ tool: selectedTool,
299
270
  global: options.local ? false : options.global,
300
271
  dryRun: options.dryRun,
301
272
  verbose: options.verbose,
@@ -310,162 +281,167 @@ program
310
281
  process.exit(1);
311
282
  }
312
283
  });
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;
284
+ function registerPreviewSplashCommand(parent, hidden = false) {
285
+ const command = parent
286
+ .command('preview-splash', hidden ? { hidden: true } : {})
287
+ .description(t('commands.previewSplash.description'))
288
+ .option('--title <title>', t('commands.previewSplash.options.title'))
289
+ .option('--directory <path>', t('commands.previewSplash.options.directory'), process.cwd())
290
+ .action(async (options) => {
291
+ try {
292
+ await renderStartupSplash(options.directory, options.title);
409
293
  }
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}`);
294
+ catch (error) {
295
+ ui.displayError(t('errors.cli.executionFailed'), error);
296
+ process.exit(1);
297
+ }
298
+ });
299
+ return command;
300
+ }
301
+ function registerExportRulesCommand(parent, hidden = false) {
302
+ const command = parent
303
+ .command('export-rules', hidden ? { hidden: true } : {})
304
+ .description(t('commands.export.description'))
305
+ .argument('[repo-path]', 'Repository path', process.cwd())
306
+ .option('-s, --source <dir>', t('commands.export.options.source'), '.context/docs')
307
+ .option('-t, --targets <paths...>', t('commands.export.options.targets'))
308
+ .option('--preset <name>', t('commands.export.options.preset'))
309
+ .option('--force', t('commands.export.options.force'))
310
+ .option('--dry-run', t('commands.export.options.dryRun'))
311
+ .option('-v, --verbose', t('commands.fill.options.verbose'))
312
+ .action(async (repoPath, options) => {
313
+ try {
314
+ const exportService = new cli_1.ExportRulesService({
315
+ ui,
316
+ t,
317
+ version: version_1.VERSION,
318
+ });
319
+ await exportService.run(repoPath, {
320
+ source: options.source,
321
+ targets: options.targets,
322
+ preset: options.preset,
323
+ force: options.force,
324
+ dryRun: options.dryRun,
325
+ verbose: options.verbose,
326
+ });
327
+ }
328
+ catch (error) {
329
+ ui.displayError(t('errors.cli.executionFailed'), error);
330
+ process.exit(1);
331
+ }
332
+ });
333
+ return command;
334
+ }
335
+ function registerReportCommand(parent, hidden = false) {
336
+ const command = parent
337
+ .command('report', hidden ? { hidden: true } : {})
338
+ .description(t('commands.report.description'))
339
+ .argument('[repo-path]', 'Repository path', process.cwd())
340
+ .option('-f, --format <format>', t('commands.report.options.format'), 'console')
341
+ .option('-o, --output <path>', t('commands.report.options.output'))
342
+ .option('--include-stack', t('commands.report.options.includeStack'))
343
+ .option('-v, --verbose', t('commands.fill.options.verbose'))
344
+ .action(async (repoPath, options) => {
345
+ try {
346
+ const reportService = new cli_1.ReportService({
347
+ ui,
348
+ t,
349
+ version: version_1.VERSION,
350
+ });
351
+ const report = await reportService.generate(repoPath, {
352
+ format: options.format,
353
+ output: options.output,
354
+ includeStack: options.includeStack,
355
+ verbose: options.verbose,
356
+ });
357
+ await reportService.output(report, options);
358
+ }
359
+ catch (error) {
360
+ ui.displayError(t('errors.cli.executionFailed'), error);
361
+ process.exit(1);
416
362
  }
417
- if (discovered.custom.length > 0) {
418
- console.log('\nCustom Skills:');
419
- for (const skill of discovered.custom) {
420
- console.log(` ${skill.slug}`);
363
+ });
364
+ return command;
365
+ }
366
+ function registerSkillCommands(parent, hidden = false) {
367
+ const skillCommand = parent
368
+ .command('skill', hidden ? { hidden: true } : {})
369
+ .description(t('commands.skill.description'));
370
+ skillCommand
371
+ .command('list')
372
+ .description(t('commands.skill.list.description'))
373
+ .argument('[repo-path]', 'Repository path', process.cwd())
374
+ .option('--json', 'Output as JSON')
375
+ .action(async (repoPath, options) => {
376
+ try {
377
+ const { createSkillRegistry } = await Promise.resolve().then(() => __importStar(require('./workflow/skills')));
378
+ const registry = createSkillRegistry(repoPath);
379
+ const discovered = await registry.discoverAll();
380
+ if (options.json) {
381
+ console.log(JSON.stringify({
382
+ builtIn: discovered.builtIn.map(s => s.slug),
383
+ custom: discovered.custom.map(s => s.slug),
384
+ total: discovered.all.length,
385
+ }, null, 2));
386
+ return;
387
+ }
388
+ console.log('\nBuilt-in Skills:');
389
+ for (const skill of discovered.builtIn) {
390
+ const projectSkill = discovered.all.find(s => s.slug === skill.slug && s.path.includes('.context'));
391
+ const status = projectSkill ? '[project]' : '[available]';
392
+ console.log(` ${skill.slug} ${status}`);
421
393
  console.log(` ${skill.metadata.description}`);
422
394
  }
395
+ if (discovered.custom.length > 0) {
396
+ console.log('\nCustom Skills:');
397
+ for (const skill of discovered.custom) {
398
+ console.log(` ${skill.slug}`);
399
+ console.log(` ${skill.metadata.description}`);
400
+ }
401
+ }
402
+ console.log(`\nTotal: ${discovered.all.length} skills (${discovered.builtIn.length} built-in, ${discovered.custom.length} custom)`);
423
403
  }
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');
404
+ catch (error) {
405
+ ui.displayError('Failed to list skills', error);
406
+ process.exit(1);
455
407
  }
456
- else {
457
- ui.displaySuccess(`Exported ${result.skillsExported.length} skills to ${result.targets.length} targets`);
408
+ });
409
+ skillCommand
410
+ .command('export')
411
+ .description(t('commands.skill.export.description'))
412
+ .argument('[repo-path]', 'Repository path', process.cwd())
413
+ .option('-p, --preset <preset>', 'Export preset, for example: claude, github, windsurf, codex, antigravity, all', 'all')
414
+ .option('-f, --force', 'Overwrite existing files')
415
+ .option('--include-builtin', 'Include built-in skills even if not scaffolded')
416
+ .option('--dry-run', 'Preview changes without writing')
417
+ .action(async (repoPath, options) => {
418
+ try {
419
+ const { SkillExportService } = await Promise.resolve().then(() => __importStar(require('./services/export/skillExportService')));
420
+ const exportService = new SkillExportService({
421
+ ui,
422
+ t,
423
+ version: version_1.VERSION,
424
+ });
425
+ const result = await exportService.run(repoPath, {
426
+ preset: options.preset,
427
+ force: options.force,
428
+ includeBuiltIn: options.includeBuiltin,
429
+ dryRun: options.dryRun,
430
+ });
431
+ if (options.dryRun) {
432
+ ui.displayInfo('Dry run', 'No files were written');
433
+ }
434
+ else {
435
+ ui.displaySuccess(`Exported ${result.skillsExported.length} skills to ${result.targets.length} targets`);
436
+ }
458
437
  }
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)');
438
+ catch (error) {
439
+ ui.displayError('Failed to export skills', error);
440
+ process.exit(1);
441
+ }
442
+ });
443
+ return skillCommand;
444
+ }
469
445
  // Helper to create workflow service dependencies
470
446
  const getWorkflowDeps = () => ({
471
447
  ui: {
@@ -474,147 +450,165 @@ const getWorkflowDeps = () => ({
474
450
  displayInfo: (title, detail) => ui.displayInfo(title, detail || '')
475
451
  }
476
452
  });
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.');
453
+ function registerWorkflowCommands(parent, hidden = false) {
454
+ const workflowCommand = parent
455
+ .command('workflow', hidden ? { hidden: true } : {})
456
+ .description('PREVC workflow management (Planning, Review, Execution, Validation, Confirmation)');
457
+ workflowCommand
458
+ .command('init <name>')
459
+ .description('Initialize a new PREVC workflow')
460
+ .option('-d, --description <text>', 'Project description for scale detection')
461
+ .option('-s, --scale <scale>', 'Project scale: QUICK, SMALL, MEDIUM, LARGE')
462
+ .option('-r, --repo-path <path>', 'Repository path', process.cwd())
463
+ .action(async (name, options) => {
464
+ try {
465
+ const workflowService = new harness_1.WorkflowService(options.repoPath, getWorkflowDeps());
466
+ const status = await workflowService.init({
467
+ name,
468
+ description: options.description,
469
+ scale: options.scale
470
+ });
471
+ ui.displaySuccess(`Workflow PREVC initialized: ${name}`);
472
+ ui.displayInfo('Scale', (0, harness_1.getScaleName)(status.project.scale));
473
+ ui.displayInfo('Current Phase', `${status.project.current_phase} - ${harness_1.PHASE_NAMES_PT[status.project.current_phase]}`);
474
+ }
475
+ catch (error) {
476
+ ui.displayError('Failed to initialize workflow', error);
509
477
  process.exit(1);
510
478
  }
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}`));
479
+ });
480
+ workflowCommand
481
+ .command('status')
482
+ .description('Show current workflow status')
483
+ .option('-r, --repo-path <path>', 'Repository path', process.cwd())
484
+ .action(async (options) => {
485
+ try {
486
+ const workflowService = new harness_1.WorkflowService(options.repoPath, getWorkflowDeps());
487
+ if (!await workflowService.hasWorkflow()) {
488
+ ui.displayError('No workflow found. Run "workflow init <name>" first.');
489
+ process.exit(1);
490
+ }
491
+ const formattedStatus = await workflowService.getFormattedStatus();
492
+ console.log(formattedStatus);
493
+ const actions = await workflowService.getRecommendedActions();
494
+ if (actions.length > 0) {
495
+ console.log('\nRecommended actions:');
496
+ actions.forEach((action, i) => console.log(` ${i + 1}. ${action}`));
497
+ }
517
498
  }
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.');
499
+ catch (error) {
500
+ ui.displayError('Failed to get workflow status', error);
534
501
  process.exit(1);
535
502
  }
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!');
503
+ });
504
+ workflowCommand
505
+ .command('advance')
506
+ .description('Complete current phase and advance to next')
507
+ .option('-r, --repo-path <path>', 'Repository path', process.cwd())
508
+ .option('-o, --outputs <files...>', 'Output files generated in current phase')
509
+ .action(async (options) => {
510
+ try {
511
+ const workflowService = new harness_1.WorkflowService(options.repoPath, getWorkflowDeps());
512
+ if (!await workflowService.hasWorkflow()) {
513
+ ui.displayError('No workflow found. Run "workflow init <name>" first.');
514
+ process.exit(1);
515
+ }
516
+ const nextPhase = await workflowService.advance(options.outputs);
517
+ if (nextPhase) {
518
+ ui.displaySuccess(`Advanced to phase: ${nextPhase} - ${harness_1.PHASE_NAMES_PT[nextPhase]}`);
519
+ }
520
+ else {
521
+ ui.displaySuccess('Workflow completed!');
522
+ }
542
523
  }
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.');
524
+ catch (error) {
525
+ ui.displayError('Failed to advance workflow', error);
559
526
  process.exit(1);
560
527
  }
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.');
528
+ });
529
+ workflowCommand
530
+ .command('handoff <from> <to>')
531
+ .description('Perform handoff between roles')
532
+ .option('-r, --repo-path <path>', 'Repository path', process.cwd())
533
+ .option('-a, --artifacts <files...>', 'Artifacts to hand off')
534
+ .action(async (from, to, options) => {
535
+ try {
536
+ const workflowService = new harness_1.WorkflowService(options.repoPath, getWorkflowDeps());
537
+ if (!await workflowService.hasWorkflow()) {
538
+ ui.displayError('No workflow found. Run "workflow init <name>" first.');
539
+ process.exit(1);
540
+ }
541
+ await workflowService.handoff(from, to, options.artifacts || []);
542
+ ui.displaySuccess(`Handoff: ${harness_1.ROLE_DISPLAY_NAMES[from]} → ${harness_1.ROLE_DISPLAY_NAMES[to]}`);
543
+ }
544
+ catch (error) {
545
+ ui.displayError('Failed to perform handoff', error);
598
546
  process.exit(1);
599
547
  }
600
- if (action === 'start') {
601
- await workflowService.startRole(role);
602
- ui.displaySuccess(`Started role: ${workflow_2.ROLE_DISPLAY_NAMES[role]}`);
548
+ });
549
+ workflowCommand
550
+ .command('collaborate <topic>')
551
+ .description('Start a collaboration session between roles')
552
+ .option('-r, --repo-path <path>', 'Repository path', process.cwd())
553
+ .option('-p, --participants <roles...>', 'Participating roles')
554
+ .action(async (topic, options) => {
555
+ try {
556
+ const workflowService = new harness_1.WorkflowService(options.repoPath, getWorkflowDeps());
557
+ const session = await workflowService.startCollaboration(topic, options.participants);
558
+ ui.displaySuccess(`Collaboration started: ${topic}`);
559
+ ui.displayInfo('Session ID', session.getId());
560
+ ui.displayInfo('Participants', session.getParticipantNames().join(', '));
561
+ console.log('\nUse MCP tools to contribute and synthesize the collaboration.');
603
562
  }
604
- else if (action === 'complete') {
605
- await workflowService.completeRole(role, options.outputs || []);
606
- ui.displaySuccess(`Completed role: ${workflow_2.ROLE_DISPLAY_NAMES[role]}`);
563
+ catch (error) {
564
+ ui.displayError('Failed to start collaboration', error);
565
+ process.exit(1);
607
566
  }
608
- else {
609
- ui.displayError(`Unknown action: ${action}. Use 'start' or 'complete'.`);
567
+ });
568
+ workflowCommand
569
+ .command('role <action> <role>')
570
+ .description('Manage role status (start/complete)')
571
+ .option('-r, --repo-path <path>', 'Repository path', process.cwd())
572
+ .option('-o, --outputs <files...>', 'Output files (for complete action)')
573
+ .action(async (action, role, options) => {
574
+ try {
575
+ const workflowService = new harness_1.WorkflowService(options.repoPath, getWorkflowDeps());
576
+ if (!await workflowService.hasWorkflow()) {
577
+ ui.displayError('No workflow found. Run "workflow init <name>" first.');
578
+ process.exit(1);
579
+ }
580
+ if (action === 'start') {
581
+ await workflowService.startRole(role);
582
+ ui.displaySuccess(`Started role: ${harness_1.ROLE_DISPLAY_NAMES[role]}`);
583
+ }
584
+ else if (action === 'complete') {
585
+ await workflowService.completeRole(role, options.outputs || []);
586
+ ui.displaySuccess(`Completed role: ${harness_1.ROLE_DISPLAY_NAMES[role]}`);
587
+ }
588
+ else {
589
+ ui.displayError(`Unknown action: ${action}. Use 'start' or 'complete'.`);
590
+ process.exit(1);
591
+ }
592
+ }
593
+ catch (error) {
594
+ ui.displayError('Failed to manage role', error);
610
595
  process.exit(1);
611
596
  }
612
- }
613
- catch (error) {
614
- ui.displayError('Failed to manage role', error);
615
- process.exit(1);
616
- }
617
- });
597
+ });
598
+ return workflowCommand;
599
+ }
600
+ const adminCommand = program
601
+ .command('admin')
602
+ .description('Advanced and low-level commands that are not part of the primary sync-focused CLI surface');
603
+ registerExportRulesCommand(program);
604
+ registerReportCommand(adminCommand);
605
+ registerReportCommand(program, true);
606
+ registerSkillCommands(adminCommand);
607
+ registerSkillCommands(program, true);
608
+ registerWorkflowCommands(adminCommand);
609
+ registerWorkflowCommands(program, true);
610
+ registerPreviewSplashCommand(adminCommand);
611
+ registerPreviewSplashCommand(program, true);
618
612
  async function selectLocale() {
619
613
  const locale = await (0, themedPrompt_1.themedSelect)({
620
614
  message: t('prompts.language.select'),
@@ -630,7 +624,7 @@ async function selectLocale() {
630
624
  }
631
625
  async function runInteractive() {
632
626
  const projectPath = process.cwd();
633
- const detector = new state_1.StateDetector({ projectPath });
627
+ const detector = new cli_1.StateDetector({ projectPath });
634
628
  const result = await detector.detect();
635
629
  // Detect smart defaults for display
636
630
  const defaults = await (0, prompts_1.detectSmartDefaults)(projectPath);
@@ -663,7 +657,7 @@ async function runInteractive() {
663
657
  }
664
658
  else {
665
659
  // Get quick stats only when we have context
666
- const quickSyncService = new quickSync_1.QuickSyncService({
660
+ const quickSyncService = new cli_1.QuickSyncService({
667
661
  ui,
668
662
  t,
669
663
  version: version_1.VERSION,
@@ -713,7 +707,7 @@ async function runInteractive() {
713
707
  async function runFullMenu() {
714
708
  let exitRequested = false;
715
709
  while (!exitRequested) {
716
- const detector = new state_1.StateDetector({ projectPath: process.cwd() });
710
+ const detector = new cli_1.StateDetector({ projectPath: process.cwd() });
717
711
  const state = await detector.detect();
718
712
  const isUnfilled = state.state === 'unfilled';
719
713
  const choices = isUnfilled
@@ -774,16 +768,13 @@ async function displayPendingFiles(contextDir) {
774
768
  console.log();
775
769
  }
776
770
  async function runMcpInstall() {
777
- const mcpInstallService = new mcp_1.MCPInstallService({ ui, t, version: version_1.VERSION });
778
- const supportedTools = mcpInstallService.getSupportedTools();
779
- const detectedTools = await mcpInstallService.detectInstalledTools();
780
- const mcpChoices = buildMcpToolChoices(supportedTools, detectedTools);
781
- const { selectedTool } = await inquirer_1.default.prompt([{
782
- type: 'list',
783
- name: 'selectedTool',
784
- message: t('commands.mcpInstall.selectTool'),
785
- choices: mcpChoices,
786
- }]);
771
+ const mcpInstallService = new cli_1.MCPInstallService({ ui, t, version: version_1.VERSION });
772
+ const selectedTool = await (0, cli_1.resolveMcpInstallToolSelection)({
773
+ isInteractive: true,
774
+ service: mcpInstallService,
775
+ t,
776
+ promptTool: ({ message, choices }) => (0, themedPrompt_1.themedSelect)({ message, choices }),
777
+ });
787
778
  const mcpResult = await mcpInstallService.run({
788
779
  tool: selectedTool,
789
780
  global: true,
@@ -896,8 +887,8 @@ async function runQuickSync() {
896
887
  skipSkills: false,
897
888
  skipDocs: false,
898
889
  agentTargets: ['claude', 'github'],
899
- skillTargets: ['claude', 'gemini', 'codex'],
900
- docTargets: ['cursor', 'claude', 'agents'],
890
+ skillTargets: ['claude', 'github', 'windsurf', 'codex', 'antigravity'],
891
+ docTargets: ['cursor', 'claude', 'github', 'gemini', 'agents'],
901
892
  force: false,
902
893
  dryRun: false,
903
894
  verbose: false,
@@ -950,8 +941,11 @@ async function runQuickSync() {
950
941
  message: t('prompts.quickSync.selectSkillTargets'),
951
942
  choices: [
952
943
  { 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 },
944
+ { name: '.github/skills (GitHub Copilot)', value: 'github', checked: true },
945
+ { name: '.windsurf/skills (Windsurf)', value: 'windsurf', checked: true },
946
+ { name: '.codex/skills (Codex compatibility)', value: 'codex', checked: true },
947
+ { name: '.agents/workflows (Google Antigravity)', value: 'antigravity', checked: true },
948
+ { name: '.gemini/skills (Gemini compatibility)', value: 'gemini', checked: false },
955
949
  ],
956
950
  },
957
951
  ]);
@@ -964,10 +958,12 @@ async function runQuickSync() {
964
958
  name: 'targets',
965
959
  message: t('prompts.quickSync.selectDocTargets'),
966
960
  choices: [
967
- { name: '.cursorrules (Cursor AI)', value: 'cursor', checked: true },
961
+ { name: '.cursor/rules (Cursor AI)', value: 'cursor', checked: true },
968
962
  { name: 'CLAUDE.md (Claude Code)', value: 'claude', checked: true },
963
+ { name: '.github/copilot-instructions.md (GitHub Copilot)', value: 'github', checked: true },
964
+ { name: 'GEMINI.md (Gemini CLI)', value: 'gemini', checked: true },
969
965
  { name: 'AGENTS.md (Universal)', value: 'agents', checked: true },
970
- { name: '.windsurfrules (Windsurf)', value: 'windsurf', checked: false },
966
+ { name: '.windsurf/rules (Windsurf)', value: 'windsurf', checked: false },
971
967
  { name: '.clinerules (Cline)', value: 'cline', checked: false },
972
968
  { name: 'CONVENTIONS.md (Aider)', value: 'aider', checked: false },
973
969
  ],
@@ -987,7 +983,7 @@ async function runQuickSync() {
987
983
  verbose: false,
988
984
  };
989
985
  }
990
- const quickSyncService = new quickSync_1.QuickSyncService({
986
+ const quickSyncService = new cli_1.QuickSyncService({
991
987
  ui,
992
988
  t,
993
989
  version: version_1.VERSION,
@@ -1001,7 +997,7 @@ async function runQuickSync() {
1001
997
  async function runReverseSync() {
1002
998
  const projectPath = process.cwd();
1003
999
  // Create service
1004
- const reverseSyncService = new reverseSync_1.ReverseQuickSyncService({
1000
+ const reverseSyncService = new cli_1.ReverseQuickSyncService({
1005
1001
  ui,
1006
1002
  t,
1007
1003
  version: version_1.VERSION,
@@ -1161,10 +1157,6 @@ function handleGracefulExit() {
1161
1157
  ui.displaySuccess(t('success.interactive.goodbye'));
1162
1158
  process.exit(0);
1163
1159
  }
1164
- // Handle SIGINT (Ctrl+C) at process level
1165
- process.on('SIGINT', () => {
1166
- handleGracefulExit();
1167
- });
1168
1160
  if (require.main === module) {
1169
1161
  main().catch(error => {
1170
1162
  if (isUserInterrupt(error)) {