@codemcp/workflows 5.2.4 → 6.0.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 (451) hide show
  1. package/README.md +91 -0
  2. package/package.json +77 -17
  3. package/packages/cli/dist/chunk-R5U7XKVJ.js +16 -0
  4. package/packages/cli/dist/chunk-RTDQR2KY.js +6718 -0
  5. package/packages/cli/dist/cli-CZ4FMSWR.js +1421 -0
  6. package/packages/cli/dist/dist-KZOA4GL5.js +65 -0
  7. package/packages/cli/dist/dist-UGVUJIDN.js +14475 -0
  8. package/packages/cli/dist/index.js +21 -0
  9. package/packages/cli/package.json +28 -0
  10. package/packages/core/dist/beads-integration.d.ts +50 -0
  11. package/packages/core/dist/beads-integration.js +387 -0
  12. package/packages/core/dist/beads-integration.js.map +1 -0
  13. package/packages/core/dist/beads-state-manager.d.ts +58 -0
  14. package/packages/core/dist/beads-state-manager.js +212 -0
  15. package/packages/core/dist/beads-state-manager.js.map +1 -0
  16. package/packages/core/dist/config-manager.d.ts +24 -0
  17. package/packages/core/dist/config-manager.js +68 -0
  18. package/packages/core/dist/config-manager.js.map +1 -0
  19. package/packages/core/dist/conversation-manager.d.ts +98 -0
  20. package/packages/core/dist/conversation-manager.js +382 -0
  21. package/packages/core/dist/conversation-manager.js.map +1 -0
  22. package/packages/core/dist/file-detection-manager.d.ts +53 -0
  23. package/packages/core/dist/file-detection-manager.js +221 -0
  24. package/packages/core/dist/file-detection-manager.js.map +1 -0
  25. package/packages/core/dist/file-storage.d.ts +93 -0
  26. package/packages/core/dist/file-storage.js +301 -0
  27. package/packages/core/dist/file-storage.js.map +1 -0
  28. package/packages/core/dist/git-manager.d.ts +22 -0
  29. package/packages/core/dist/git-manager.js +123 -0
  30. package/packages/core/dist/git-manager.js.map +1 -0
  31. package/packages/core/dist/index.d.ts +24 -0
  32. package/packages/core/dist/index.js +31 -0
  33. package/packages/core/dist/index.js.map +1 -0
  34. package/packages/core/dist/instruction-generator.d.ts +40 -0
  35. package/packages/core/dist/instruction-generator.js +89 -0
  36. package/packages/core/dist/instruction-generator.js.map +1 -0
  37. package/packages/core/dist/interaction-logger.d.ts +37 -0
  38. package/packages/core/dist/interaction-logger.js +87 -0
  39. package/packages/core/dist/interaction-logger.js.map +1 -0
  40. package/packages/core/dist/interfaces/index.d.ts +9 -0
  41. package/packages/core/dist/interfaces/index.js +10 -0
  42. package/packages/core/dist/interfaces/index.js.map +1 -0
  43. package/packages/core/dist/interfaces/instruction-generator.interface.d.ts +41 -0
  44. package/packages/core/dist/interfaces/instruction-generator.interface.js +8 -0
  45. package/packages/core/dist/interfaces/instruction-generator.interface.js.map +1 -0
  46. package/packages/core/dist/interfaces/plan-manager.interface.d.ts +55 -0
  47. package/packages/core/dist/interfaces/plan-manager.interface.js +8 -0
  48. package/packages/core/dist/interfaces/plan-manager.interface.js.map +1 -0
  49. package/packages/core/dist/interfaces/task-backend-client.interface.d.ts +52 -0
  50. package/packages/core/dist/interfaces/task-backend-client.interface.js +8 -0
  51. package/packages/core/dist/interfaces/task-backend-client.interface.js.map +1 -0
  52. package/packages/core/dist/logger.d.ts +64 -0
  53. package/packages/core/dist/logger.js +283 -0
  54. package/packages/core/dist/logger.js.map +1 -0
  55. package/packages/core/dist/path-validation-utils.d.ts +75 -0
  56. package/packages/core/dist/path-validation-utils.js +238 -0
  57. package/packages/core/dist/path-validation-utils.js.map +1 -0
  58. package/packages/core/dist/persistence-interface.d.ts +91 -0
  59. package/packages/core/dist/persistence-interface.js +9 -0
  60. package/packages/core/dist/persistence-interface.js.map +1 -0
  61. package/{dist/components/beads/beads-plan-manager.d.ts → packages/core/dist/plan-manager.d.ts} +15 -15
  62. package/{dist/components/beads/beads-plan-manager.js → packages/core/dist/plan-manager.js} +66 -50
  63. package/packages/core/dist/plan-manager.js.map +1 -0
  64. package/packages/core/dist/project-docs-manager.d.ts +119 -0
  65. package/packages/core/dist/project-docs-manager.js +366 -0
  66. package/packages/core/dist/project-docs-manager.js.map +1 -0
  67. package/packages/core/dist/state-machine-loader.d.ts +61 -0
  68. package/packages/core/dist/state-machine-loader.js +273 -0
  69. package/packages/core/dist/state-machine-loader.js.map +1 -0
  70. package/packages/core/dist/state-machine-types.d.ts +64 -0
  71. package/packages/core/dist/state-machine-types.js +7 -0
  72. package/packages/core/dist/state-machine-types.js.map +1 -0
  73. package/packages/core/dist/state-machine.d.ts +52 -0
  74. package/packages/core/dist/state-machine.js +256 -0
  75. package/packages/core/dist/state-machine.js.map +1 -0
  76. package/packages/core/dist/system-prompt-generator.d.ts +14 -0
  77. package/packages/core/dist/system-prompt-generator.js +42 -0
  78. package/packages/core/dist/system-prompt-generator.js.map +1 -0
  79. package/packages/core/dist/task-backend.d.ts +45 -0
  80. package/packages/core/dist/task-backend.js +176 -0
  81. package/packages/core/dist/task-backend.js.map +1 -0
  82. package/packages/core/dist/template-manager.d.ts +61 -0
  83. package/packages/core/dist/template-manager.js +231 -0
  84. package/packages/core/dist/template-manager.js.map +1 -0
  85. package/packages/core/dist/transition-engine.d.ts +77 -0
  86. package/packages/core/dist/transition-engine.js +244 -0
  87. package/packages/core/dist/transition-engine.js.map +1 -0
  88. package/packages/core/dist/types.d.ts +54 -0
  89. package/packages/core/dist/types.js +5 -0
  90. package/packages/core/dist/workflow-manager.d.ts +89 -0
  91. package/packages/core/dist/workflow-manager.js +468 -0
  92. package/packages/core/dist/workflow-manager.js.map +1 -0
  93. package/packages/core/package.json +33 -0
  94. package/packages/docs/.vitepress/dist/.gitignore +2 -0
  95. package/packages/docs/.vitepress/dist/404.html +23 -0
  96. package/packages/docs/.vitepress/dist/assets/app.Dz3lZH3M.js +1 -0
  97. package/packages/docs/.vitepress/dist/assets/chunks/framework.DZS7lpav.js +19 -0
  98. package/packages/docs/.vitepress/dist/assets/chunks/theme.q5Ewb3F1.js +206 -0
  99. package/packages/docs/.vitepress/dist/assets/dev_ARCHITECTURE.md.da_vFDwM.js +130 -0
  100. package/packages/docs/.vitepress/dist/assets/dev_ARCHITECTURE.md.da_vFDwM.lean.js +1 -0
  101. package/packages/docs/.vitepress/dist/assets/dev_DEVELOPMENT.md.DWl9cccE.js +72 -0
  102. package/packages/docs/.vitepress/dist/assets/dev_DEVELOPMENT.md.DWl9cccE.lean.js +1 -0
  103. package/packages/docs/.vitepress/dist/assets/dev_LOGGING.md.BebvbW7z.js +34 -0
  104. package/packages/docs/.vitepress/dist/assets/dev_LOGGING.md.BebvbW7z.lean.js +1 -0
  105. package/packages/docs/.vitepress/dist/assets/dev_PUBLISHING.md.CQqbiIOF.js +1 -0
  106. package/packages/docs/.vitepress/dist/assets/dev_PUBLISHING.md.CQqbiIOF.lean.js +1 -0
  107. package/packages/docs/.vitepress/dist/assets/index.md.D6ROLohf.js +2 -0
  108. package/packages/docs/.vitepress/dist/assets/index.md.D6ROLohf.lean.js +1 -0
  109. package/packages/docs/.vitepress/dist/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 +0 -0
  110. package/packages/docs/.vitepress/dist/assets/inter-italic-cyrillic.By2_1cv3.woff2 +0 -0
  111. package/packages/docs/.vitepress/dist/assets/inter-italic-greek-ext.1u6EdAuj.woff2 +0 -0
  112. package/packages/docs/.vitepress/dist/assets/inter-italic-greek.DJ8dCoTZ.woff2 +0 -0
  113. package/packages/docs/.vitepress/dist/assets/inter-italic-latin-ext.CN1xVJS-.woff2 +0 -0
  114. package/packages/docs/.vitepress/dist/assets/inter-italic-latin.C2AdPX0b.woff2 +0 -0
  115. package/packages/docs/.vitepress/dist/assets/inter-italic-vietnamese.BSbpV94h.woff2 +0 -0
  116. package/packages/docs/.vitepress/dist/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 +0 -0
  117. package/packages/docs/.vitepress/dist/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 +0 -0
  118. package/packages/docs/.vitepress/dist/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 +0 -0
  119. package/packages/docs/.vitepress/dist/assets/inter-roman-greek.BBVDIX6e.woff2 +0 -0
  120. package/packages/docs/.vitepress/dist/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 +0 -0
  121. package/packages/docs/.vitepress/dist/assets/inter-roman-latin.Di8DUHzh.woff2 +0 -0
  122. package/packages/docs/.vitepress/dist/assets/inter-roman-vietnamese.BjW4sHH5.woff2 +0 -0
  123. package/packages/docs/.vitepress/dist/assets/mcp-interaction-pattern.VdvOPuTt.png +0 -0
  124. package/packages/docs/.vitepress/dist/assets/placeholder-demo-greenfield.B8lG_tBI.png +0 -0
  125. package/packages/docs/.vitepress/dist/assets/style.CAgdBzOq.css +1 -0
  126. package/packages/docs/.vitepress/dist/assets/user_advanced-engineering.md.MkETYNtq.js +50 -0
  127. package/packages/docs/.vitepress/dist/assets/user_advanced-engineering.md.MkETYNtq.lean.js +1 -0
  128. package/packages/docs/.vitepress/dist/assets/user_agent-setup.md.B54OLL2H.js +24 -0
  129. package/packages/docs/.vitepress/dist/assets/user_agent-setup.md.B54OLL2H.lean.js +1 -0
  130. package/packages/docs/.vitepress/dist/assets/user_beads-integration.md.BzdR5Fif.js +15 -0
  131. package/packages/docs/.vitepress/dist/assets/user_beads-integration.md.BzdR5Fif.lean.js +1 -0
  132. package/packages/docs/.vitepress/dist/assets/user_crowd-mcp-integration.md.C15kSdIJ.js +157 -0
  133. package/packages/docs/.vitepress/dist/assets/user_crowd-mcp-integration.md.C15kSdIJ.lean.js +1 -0
  134. package/packages/docs/.vitepress/dist/assets/user_custom-workflows.md.Cz4IYCXa.js +143 -0
  135. package/packages/docs/.vitepress/dist/assets/user_custom-workflows.md.Cz4IYCXa.lean.js +1 -0
  136. package/packages/docs/.vitepress/dist/assets/user_git-commit-feature.md.UcTvDR-O.js +1 -0
  137. package/packages/docs/.vitepress/dist/assets/user_git-commit-feature.md.UcTvDR-O.lean.js +1 -0
  138. package/packages/docs/.vitepress/dist/assets/user_how-it-works.md.DiOXNgaL.js +23 -0
  139. package/packages/docs/.vitepress/dist/assets/user_how-it-works.md.DiOXNgaL.lean.js +1 -0
  140. package/packages/docs/.vitepress/dist/assets/user_long-term-memory.md.DZh0tjNa.js +43 -0
  141. package/packages/docs/.vitepress/dist/assets/user_long-term-memory.md.DZh0tjNa.lean.js +1 -0
  142. package/packages/docs/.vitepress/dist/assets/user_packaged-workflows.md.s1HT89ZU.js +2 -0
  143. package/packages/docs/.vitepress/dist/assets/user_packaged-workflows.md.s1HT89ZU.lean.js +1 -0
  144. package/packages/docs/.vitepress/dist/assets/user_tutorial.md.Dmj8zLB2.js +3 -0
  145. package/packages/docs/.vitepress/dist/assets/user_tutorial.md.Dmj8zLB2.lean.js +1 -0
  146. package/packages/docs/.vitepress/dist/assets/user_workflow-selection.md.CrPGw9Hr.js +7 -0
  147. package/packages/docs/.vitepress/dist/assets/user_workflow-selection.md.CrPGw9Hr.lean.js +1 -0
  148. package/packages/docs/.vitepress/dist/assets/workflows.md.Bm5sGt3u.js +1 -0
  149. package/packages/docs/.vitepress/dist/assets/workflows.md.Bm5sGt3u.lean.js +1 -0
  150. package/packages/docs/.vitepress/dist/assets/workflows_adr.md.DEaXkbRp.js +1 -0
  151. package/packages/docs/.vitepress/dist/assets/workflows_adr.md.DEaXkbRp.lean.js +1 -0
  152. package/packages/docs/.vitepress/dist/assets/workflows_big-bang-conversion.md.BA5R1LxZ.js +1 -0
  153. package/packages/docs/.vitepress/dist/assets/workflows_big-bang-conversion.md.BA5R1LxZ.lean.js +1 -0
  154. package/packages/docs/.vitepress/dist/assets/workflows_boundary-testing.md.DBcYnMhx.js +1 -0
  155. package/packages/docs/.vitepress/dist/assets/workflows_boundary-testing.md.DBcYnMhx.lean.js +1 -0
  156. package/packages/docs/.vitepress/dist/assets/workflows_bugfix.md.CZRCL0Hp.js +1 -0
  157. package/packages/docs/.vitepress/dist/assets/workflows_bugfix.md.CZRCL0Hp.lean.js +1 -0
  158. package/packages/docs/.vitepress/dist/assets/workflows_business-analysis.md.fGLml8Hw.js +1 -0
  159. package/packages/docs/.vitepress/dist/assets/workflows_business-analysis.md.fGLml8Hw.lean.js +1 -0
  160. package/packages/docs/.vitepress/dist/assets/workflows_c4-analysis.md.Dnssqzuf.js +1 -0
  161. package/packages/docs/.vitepress/dist/assets/workflows_c4-analysis.md.Dnssqzuf.lean.js +1 -0
  162. package/packages/docs/.vitepress/dist/assets/workflows_epcc.md.M6DnIhpp.js +1 -0
  163. package/packages/docs/.vitepress/dist/assets/workflows_epcc.md.M6DnIhpp.lean.js +1 -0
  164. package/packages/docs/.vitepress/dist/assets/workflows_game-beginner.md.CNxzWLtd.js +1 -0
  165. package/packages/docs/.vitepress/dist/assets/workflows_game-beginner.md.CNxzWLtd.lean.js +1 -0
  166. package/packages/docs/.vitepress/dist/assets/workflows_greenfield.md.vx_g-WOe.js +1 -0
  167. package/packages/docs/.vitepress/dist/assets/workflows_greenfield.md.vx_g-WOe.lean.js +1 -0
  168. package/packages/docs/.vitepress/dist/assets/workflows_minor.md.DdnfwMf4.js +1 -0
  169. package/packages/docs/.vitepress/dist/assets/workflows_minor.md.DdnfwMf4.lean.js +1 -0
  170. package/packages/docs/.vitepress/dist/assets/workflows_posts.md.SOldXvq7.js +1 -0
  171. package/packages/docs/.vitepress/dist/assets/workflows_posts.md.SOldXvq7.lean.js +1 -0
  172. package/packages/docs/.vitepress/dist/assets/workflows_sdd-bugfix-crowd.md.-lSf42gJ.js +1 -0
  173. package/packages/docs/.vitepress/dist/assets/workflows_sdd-bugfix-crowd.md.-lSf42gJ.lean.js +1 -0
  174. package/packages/docs/.vitepress/dist/assets/workflows_sdd-bugfix.md.oRAsEVbc.js +1 -0
  175. package/packages/docs/.vitepress/dist/assets/workflows_sdd-bugfix.md.oRAsEVbc.lean.js +1 -0
  176. package/packages/docs/.vitepress/dist/assets/workflows_sdd-feature-crowd.md.DAtnfCAd.js +1 -0
  177. package/packages/docs/.vitepress/dist/assets/workflows_sdd-feature-crowd.md.DAtnfCAd.lean.js +1 -0
  178. package/packages/docs/.vitepress/dist/assets/workflows_sdd-feature.md.Ce3-H_g3.js +1 -0
  179. package/packages/docs/.vitepress/dist/assets/workflows_sdd-feature.md.Ce3-H_g3.lean.js +1 -0
  180. package/packages/docs/.vitepress/dist/assets/workflows_sdd-greenfield-crowd.md.8DUvcmLe.js +1 -0
  181. package/packages/docs/.vitepress/dist/assets/workflows_sdd-greenfield-crowd.md.8DUvcmLe.lean.js +1 -0
  182. package/packages/docs/.vitepress/dist/assets/workflows_sdd-greenfield.md.eEN6U0J4.js +1 -0
  183. package/packages/docs/.vitepress/dist/assets/workflows_sdd-greenfield.md.eEN6U0J4.lean.js +1 -0
  184. package/packages/docs/.vitepress/dist/assets/workflows_slides.md.Cqt-19_1.js +1 -0
  185. package/packages/docs/.vitepress/dist/assets/workflows_slides.md.Cqt-19_1.lean.js +1 -0
  186. package/packages/docs/.vitepress/dist/assets/workflows_tdd.md.BjVC69tu.js +1 -0
  187. package/packages/docs/.vitepress/dist/assets/workflows_tdd.md.BjVC69tu.lean.js +1 -0
  188. package/packages/docs/.vitepress/dist/assets/workflows_waterfall.md.CL6jTZP9.js +1 -0
  189. package/packages/docs/.vitepress/dist/assets/workflows_waterfall.md.CL6jTZP9.lean.js +1 -0
  190. package/packages/docs/.vitepress/dist/dev/ARCHITECTURE.html +155 -0
  191. package/packages/docs/.vitepress/dist/dev/DEVELOPMENT.html +97 -0
  192. package/packages/docs/.vitepress/dist/dev/LOGGING.html +59 -0
  193. package/packages/docs/.vitepress/dist/dev/PUBLISHING.html +30 -0
  194. package/packages/docs/.vitepress/dist/hashmap.json +1 -0
  195. package/packages/docs/.vitepress/dist/index.html +27 -0
  196. package/packages/docs/.vitepress/dist/user/advanced-engineering.html +75 -0
  197. package/packages/docs/.vitepress/dist/user/agent-setup.html +49 -0
  198. package/packages/docs/.vitepress/dist/user/beads-integration.html +40 -0
  199. package/packages/docs/.vitepress/dist/user/crowd-mcp-integration.html +182 -0
  200. package/packages/docs/.vitepress/dist/user/custom-workflows.html +168 -0
  201. package/packages/docs/.vitepress/dist/user/git-commit-feature.html +30 -0
  202. package/packages/docs/.vitepress/dist/user/how-it-works.html +48 -0
  203. package/packages/docs/.vitepress/dist/user/long-term-memory.html +68 -0
  204. package/packages/docs/.vitepress/dist/user/packaged-workflows.html +27 -0
  205. package/packages/docs/.vitepress/dist/user/tutorial.html +28 -0
  206. package/packages/docs/.vitepress/dist/user/workflow-selection.html +32 -0
  207. package/packages/docs/.vitepress/dist/vp-icons.css +0 -0
  208. package/packages/docs/.vitepress/dist/workflows/adr.html +26 -0
  209. package/packages/docs/.vitepress/dist/workflows/adr.yaml +157 -0
  210. package/packages/docs/.vitepress/dist/workflows/big-bang-conversion.html +26 -0
  211. package/packages/docs/.vitepress/dist/workflows/big-bang-conversion.yaml +592 -0
  212. package/packages/docs/.vitepress/dist/workflows/boundary-testing.html +26 -0
  213. package/packages/docs/.vitepress/dist/workflows/boundary-testing.yaml +376 -0
  214. package/packages/docs/.vitepress/dist/workflows/bugfix.html +26 -0
  215. package/packages/docs/.vitepress/dist/workflows/bugfix.yaml +177 -0
  216. package/packages/docs/.vitepress/dist/workflows/business-analysis.html +26 -0
  217. package/packages/docs/.vitepress/dist/workflows/business-analysis.yaml +597 -0
  218. package/packages/docs/.vitepress/dist/workflows/c4-analysis.html +26 -0
  219. package/packages/docs/.vitepress/dist/workflows/c4-analysis.yaml +471 -0
  220. package/packages/docs/.vitepress/dist/workflows/epcc.html +26 -0
  221. package/packages/docs/.vitepress/dist/workflows/epcc.yaml +183 -0
  222. package/packages/docs/.vitepress/dist/workflows/game-beginner.html +26 -0
  223. package/packages/docs/.vitepress/dist/workflows/game-beginner.yaml +434 -0
  224. package/packages/docs/.vitepress/dist/workflows/greenfield.html +26 -0
  225. package/packages/docs/.vitepress/dist/workflows/greenfield.yaml +201 -0
  226. package/packages/docs/.vitepress/dist/workflows/minor.html +26 -0
  227. package/packages/docs/.vitepress/dist/workflows/minor.yaml +138 -0
  228. package/packages/docs/.vitepress/dist/workflows/posts.html +26 -0
  229. package/packages/docs/.vitepress/dist/workflows/posts.yaml +193 -0
  230. package/packages/docs/.vitepress/dist/workflows/sdd-bugfix-crowd.html +26 -0
  231. package/packages/docs/.vitepress/dist/workflows/sdd-bugfix-crowd.yaml +608 -0
  232. package/packages/docs/.vitepress/dist/workflows/sdd-bugfix.html +26 -0
  233. package/packages/docs/.vitepress/dist/workflows/sdd-bugfix.yaml +381 -0
  234. package/packages/docs/.vitepress/dist/workflows/sdd-feature-crowd.html +26 -0
  235. package/packages/docs/.vitepress/dist/workflows/sdd-feature-crowd.yaml +713 -0
  236. package/packages/docs/.vitepress/dist/workflows/sdd-feature.html +26 -0
  237. package/packages/docs/.vitepress/dist/workflows/sdd-feature.yaml +471 -0
  238. package/packages/docs/.vitepress/dist/workflows/sdd-greenfield-crowd.html +26 -0
  239. package/packages/docs/.vitepress/dist/workflows/sdd-greenfield-crowd.yaml +336 -0
  240. package/packages/docs/.vitepress/dist/workflows/sdd-greenfield.html +26 -0
  241. package/packages/docs/.vitepress/dist/workflows/sdd-greenfield.yaml +463 -0
  242. package/packages/docs/.vitepress/dist/workflows/slides.html +26 -0
  243. package/packages/docs/.vitepress/dist/workflows/slides.yaml +237 -0
  244. package/packages/docs/.vitepress/dist/workflows/tdd.html +26 -0
  245. package/packages/docs/.vitepress/dist/workflows/tdd.yaml +160 -0
  246. package/packages/docs/.vitepress/dist/workflows/waterfall.html +26 -0
  247. package/packages/docs/.vitepress/dist/workflows/waterfall.yaml +209 -0
  248. package/packages/docs/.vitepress/dist/workflows.html +26 -0
  249. package/packages/docs/package.json +32 -0
  250. package/packages/mcp-server/dist/index.js +10546 -0
  251. package/packages/mcp-server/package.json +41 -0
  252. package/packages/visualizer/dist/WorkflowVisualizer.vue +1147 -0
  253. package/packages/visualizer/dist/index.ts +17 -0
  254. package/packages/visualizer/dist/main.ts +673 -0
  255. package/packages/visualizer/dist/services/BundledWorkflows.ts +35 -0
  256. package/packages/visualizer/dist/services/FileUploadHandler.ts +166 -0
  257. package/packages/visualizer/dist/services/WorkflowLoader.ts +198 -0
  258. package/packages/visualizer/dist/services/YamlParser.ts +248 -0
  259. package/packages/visualizer/dist/services/workflow-list.ts +23 -0
  260. package/packages/visualizer/dist/types/ui-types.ts +84 -0
  261. package/packages/visualizer/dist/types/visualization-types.ts +95 -0
  262. package/packages/visualizer/dist/types/vite-env.d.ts +12 -0
  263. package/packages/visualizer/dist/utils/DomHelpers.ts +206 -0
  264. package/packages/visualizer/dist/utils/ErrorHandler.ts +170 -0
  265. package/packages/visualizer/dist/utils/PlantUMLEncoder.ts +121 -0
  266. package/packages/visualizer/dist/visualization/DiagramRenderer.ts +430 -0
  267. package/packages/visualizer/dist/visualization/LayoutEngine.ts +339 -0
  268. package/packages/visualizer/dist/visualization/PlantUMLRenderer.ts +507 -0
  269. package/packages/visualizer/dist/visualization/StateRenderer.ts +339 -0
  270. package/packages/visualizer/dist/visualization/TransitionRenderer.ts +432 -0
  271. package/packages/visualizer/package.json +39 -0
  272. package/resources/.DS_Store +0 -0
  273. package/resources/agents/architect.yaml +61 -0
  274. package/resources/agents/business-analyst.yaml +60 -0
  275. package/resources/agents/developer.yaml +61 -0
  276. package/resources/state-machine-schema.json +114 -0
  277. package/resources/templates/architecture/arc42/arc42-template-EN.md +1077 -0
  278. package/resources/templates/architecture/arc42/images/01_2_iso-25010-topics-EN.drawio-2023.png +0 -0
  279. package/resources/templates/architecture/arc42/images/01_2_iso-25010-topics-EN.drawio.png +0 -0
  280. package/resources/templates/architecture/arc42/images/05_building_blocks-EN.png +0 -0
  281. package/resources/templates/architecture/arc42/images/08-concepts-EN.drawio.png +0 -0
  282. package/resources/templates/architecture/arc42/images/arc42-logo.png +0 -0
  283. package/resources/templates/architecture/c4.md +224 -0
  284. package/resources/templates/architecture/freestyle.md +53 -0
  285. package/resources/templates/architecture/game.md +250 -0
  286. package/resources/templates/architecture/none.md +17 -0
  287. package/resources/templates/design/comprehensive.md +207 -0
  288. package/resources/templates/design/freestyle.md +37 -0
  289. package/resources/templates/design/game.md +66 -0
  290. package/resources/templates/design/none.md +17 -0
  291. package/resources/templates/requirements/ears.md +90 -0
  292. package/resources/templates/requirements/freestyle.md +42 -0
  293. package/resources/templates/requirements/game.md +162 -0
  294. package/resources/templates/requirements/none.md +17 -0
  295. package/resources/templates/skills/POWER.md +23 -0
  296. package/resources/templates/skills/SKILL.md +19 -0
  297. package/resources/workflows/adr.yaml +157 -0
  298. package/resources/workflows/big-bang-conversion.yaml +592 -0
  299. package/resources/workflows/boundary-testing.yaml +376 -0
  300. package/resources/workflows/bugfix.yaml +177 -0
  301. package/resources/workflows/business-analysis.yaml +597 -0
  302. package/resources/workflows/c4-analysis.yaml +471 -0
  303. package/resources/workflows/epcc.yaml +183 -0
  304. package/resources/workflows/game-beginner.yaml +434 -0
  305. package/resources/workflows/greenfield.yaml +201 -0
  306. package/resources/workflows/minor.yaml +138 -0
  307. package/resources/workflows/posts.yaml +193 -0
  308. package/resources/workflows/sdd-bugfix-crowd.yaml +608 -0
  309. package/resources/workflows/sdd-bugfix.yaml +381 -0
  310. package/resources/workflows/sdd-feature-crowd.yaml +713 -0
  311. package/resources/workflows/sdd-feature.yaml +471 -0
  312. package/resources/workflows/sdd-greenfield-crowd.yaml +336 -0
  313. package/resources/workflows/sdd-greenfield.yaml +463 -0
  314. package/resources/workflows/slides.yaml +237 -0
  315. package/resources/workflows/tdd.yaml +160 -0
  316. package/resources/workflows/waterfall.yaml +209 -0
  317. package/dist/components/beads/beads-instruction-generator.d.ts +0 -44
  318. package/dist/components/beads/beads-instruction-generator.d.ts.map +0 -1
  319. package/dist/components/beads/beads-instruction-generator.js +0 -160
  320. package/dist/components/beads/beads-instruction-generator.js.map +0 -1
  321. package/dist/components/beads/beads-plan-manager.d.ts.map +0 -1
  322. package/dist/components/beads/beads-plan-manager.js.map +0 -1
  323. package/dist/components/beads/beads-task-backend-client.d.ts +0 -43
  324. package/dist/components/beads/beads-task-backend-client.d.ts.map +0 -1
  325. package/dist/components/beads/beads-task-backend-client.js +0 -175
  326. package/dist/components/beads/beads-task-backend-client.js.map +0 -1
  327. package/dist/index.d.ts +0 -9
  328. package/dist/index.d.ts.map +0 -1
  329. package/dist/index.js +0 -74
  330. package/dist/index.js.map +0 -1
  331. package/dist/notification-service.d.ts +0 -14
  332. package/dist/notification-service.d.ts.map +0 -1
  333. package/dist/notification-service.js +0 -18
  334. package/dist/notification-service.js.map +0 -1
  335. package/dist/plugin-system/beads-plugin.d.ts +0 -71
  336. package/dist/plugin-system/beads-plugin.d.ts.map +0 -1
  337. package/dist/plugin-system/beads-plugin.js +0 -465
  338. package/dist/plugin-system/beads-plugin.js.map +0 -1
  339. package/dist/plugin-system/commit-plugin.d.ts +0 -40
  340. package/dist/plugin-system/commit-plugin.d.ts.map +0 -1
  341. package/dist/plugin-system/commit-plugin.js +0 -204
  342. package/dist/plugin-system/commit-plugin.js.map +0 -1
  343. package/dist/plugin-system/index.d.ts +0 -9
  344. package/dist/plugin-system/index.d.ts.map +0 -1
  345. package/dist/plugin-system/index.js +0 -9
  346. package/dist/plugin-system/index.js.map +0 -1
  347. package/dist/plugin-system/plugin-interfaces.d.ts +0 -98
  348. package/dist/plugin-system/plugin-interfaces.d.ts.map +0 -1
  349. package/dist/plugin-system/plugin-interfaces.js +0 -9
  350. package/dist/plugin-system/plugin-interfaces.js.map +0 -1
  351. package/dist/plugin-system/plugin-registry.d.ts +0 -44
  352. package/dist/plugin-system/plugin-registry.d.ts.map +0 -1
  353. package/dist/plugin-system/plugin-registry.js +0 -132
  354. package/dist/plugin-system/plugin-registry.js.map +0 -1
  355. package/dist/resource-handlers/conversation-state.d.ts +0 -15
  356. package/dist/resource-handlers/conversation-state.d.ts.map +0 -1
  357. package/dist/resource-handlers/conversation-state.js +0 -40
  358. package/dist/resource-handlers/conversation-state.js.map +0 -1
  359. package/dist/resource-handlers/development-plan.d.ts +0 -14
  360. package/dist/resource-handlers/development-plan.d.ts.map +0 -1
  361. package/dist/resource-handlers/development-plan.js +0 -31
  362. package/dist/resource-handlers/development-plan.js.map +0 -1
  363. package/dist/resource-handlers/index.d.ts +0 -24
  364. package/dist/resource-handlers/index.d.ts.map +0 -1
  365. package/dist/resource-handlers/index.js +0 -62
  366. package/dist/resource-handlers/index.js.map +0 -1
  367. package/dist/resource-handlers/system-prompt.d.ts +0 -15
  368. package/dist/resource-handlers/system-prompt.d.ts.map +0 -1
  369. package/dist/resource-handlers/system-prompt.js +0 -40
  370. package/dist/resource-handlers/system-prompt.js.map +0 -1
  371. package/dist/resource-handlers/workflow-resource.d.ts +0 -15
  372. package/dist/resource-handlers/workflow-resource.d.ts.map +0 -1
  373. package/dist/resource-handlers/workflow-resource.js +0 -85
  374. package/dist/resource-handlers/workflow-resource.js.map +0 -1
  375. package/dist/response-renderer.d.ts +0 -30
  376. package/dist/response-renderer.d.ts.map +0 -1
  377. package/dist/response-renderer.js +0 -94
  378. package/dist/response-renderer.js.map +0 -1
  379. package/dist/server-config.d.ts +0 -34
  380. package/dist/server-config.d.ts.map +0 -1
  381. package/dist/server-config.js +0 -503
  382. package/dist/server-config.js.map +0 -1
  383. package/dist/server-helpers.d.ts +0 -70
  384. package/dist/server-helpers.d.ts.map +0 -1
  385. package/dist/server-helpers.js +0 -171
  386. package/dist/server-helpers.js.map +0 -1
  387. package/dist/server-implementation.d.ts +0 -74
  388. package/dist/server-implementation.d.ts.map +0 -1
  389. package/dist/server-implementation.js +0 -201
  390. package/dist/server-implementation.js.map +0 -1
  391. package/dist/server.d.ts +0 -6
  392. package/dist/server.d.ts.map +0 -1
  393. package/dist/server.js +0 -5
  394. package/dist/server.js.map +0 -1
  395. package/dist/tool-handlers/base-tool-handler.d.ts +0 -50
  396. package/dist/tool-handlers/base-tool-handler.d.ts.map +0 -1
  397. package/dist/tool-handlers/base-tool-handler.js +0 -81
  398. package/dist/tool-handlers/base-tool-handler.js.map +0 -1
  399. package/dist/tool-handlers/conduct-review.d.ts +0 -49
  400. package/dist/tool-handlers/conduct-review.d.ts.map +0 -1
  401. package/dist/tool-handlers/conduct-review.js +0 -104
  402. package/dist/tool-handlers/conduct-review.js.map +0 -1
  403. package/dist/tool-handlers/get-tool-info.d.ts +0 -75
  404. package/dist/tool-handlers/get-tool-info.d.ts.map +0 -1
  405. package/dist/tool-handlers/get-tool-info.js +0 -168
  406. package/dist/tool-handlers/get-tool-info.js.map +0 -1
  407. package/dist/tool-handlers/index.d.ts +0 -41
  408. package/dist/tool-handlers/index.d.ts.map +0 -1
  409. package/dist/tool-handlers/index.js +0 -71
  410. package/dist/tool-handlers/index.js.map +0 -1
  411. package/dist/tool-handlers/list-workflows.d.ts +0 -35
  412. package/dist/tool-handlers/list-workflows.d.ts.map +0 -1
  413. package/dist/tool-handlers/list-workflows.js +0 -43
  414. package/dist/tool-handlers/list-workflows.js.map +0 -1
  415. package/dist/tool-handlers/no-idea.d.ts +0 -41
  416. package/dist/tool-handlers/no-idea.d.ts.map +0 -1
  417. package/dist/tool-handlers/no-idea.js +0 -29
  418. package/dist/tool-handlers/no-idea.js.map +0 -1
  419. package/dist/tool-handlers/proceed-to-phase.d.ts +0 -41
  420. package/dist/tool-handlers/proceed-to-phase.d.ts.map +0 -1
  421. package/dist/tool-handlers/proceed-to-phase.js +0 -165
  422. package/dist/tool-handlers/proceed-to-phase.js.map +0 -1
  423. package/dist/tool-handlers/reset-development.d.ts +0 -31
  424. package/dist/tool-handlers/reset-development.d.ts.map +0 -1
  425. package/dist/tool-handlers/reset-development.js +0 -48
  426. package/dist/tool-handlers/reset-development.js.map +0 -1
  427. package/dist/tool-handlers/resume-workflow.d.ts +0 -87
  428. package/dist/tool-handlers/resume-workflow.d.ts.map +0 -1
  429. package/dist/tool-handlers/resume-workflow.js +0 -212
  430. package/dist/tool-handlers/resume-workflow.js.map +0 -1
  431. package/dist/tool-handlers/setup-project-docs.d.ts +0 -37
  432. package/dist/tool-handlers/setup-project-docs.d.ts.map +0 -1
  433. package/dist/tool-handlers/setup-project-docs.js +0 -138
  434. package/dist/tool-handlers/setup-project-docs.js.map +0 -1
  435. package/dist/tool-handlers/start-development.d.ts +0 -79
  436. package/dist/tool-handlers/start-development.d.ts.map +0 -1
  437. package/dist/tool-handlers/start-development.js +0 -484
  438. package/dist/tool-handlers/start-development.js.map +0 -1
  439. package/dist/tool-handlers/whats-next.d.ts +0 -41
  440. package/dist/tool-handlers/whats-next.d.ts.map +0 -1
  441. package/dist/tool-handlers/whats-next.js +0 -123
  442. package/dist/tool-handlers/whats-next.js.map +0 -1
  443. package/dist/types.d.ts +0 -119
  444. package/dist/types.d.ts.map +0 -1
  445. package/dist/types.js +0 -5
  446. package/dist/version-info.d.ts +0 -30
  447. package/dist/version-info.d.ts.map +0 -1
  448. package/dist/version-info.js +0 -178
  449. package/dist/version-info.js.map +0 -1
  450. package/skill/SKILL.md +0 -28
  451. /package/{dist → packages/core/dist}/types.js.map +0 -0
@@ -0,0 +1,283 @@
1
+ /**
2
+ * Logging utility for Vibe Feature MCP Server
3
+ *
4
+ * Provides structured logging with proper MCP compliance:
5
+ * - Uses stderr for all local logging (MCP requirement)
6
+ * - Supports MCP log message notifications to client
7
+ * - Provides structured logging with proper levels:
8
+ * - debug: Tracing and detailed execution flow
9
+ * - info: Success operations and important milestones
10
+ * - warn: Expected errors and recoverable issues
11
+ * - error: Caught but unexpected errors
12
+ */
13
+ export var LogLevel;
14
+ (function (LogLevel) {
15
+ LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG";
16
+ LogLevel[LogLevel["INFO"] = 1] = "INFO";
17
+ LogLevel[LogLevel["WARN"] = 2] = "WARN";
18
+ LogLevel[LogLevel["ERROR"] = 3] = "ERROR";
19
+ LogLevel[LogLevel["SILENT"] = 4] = "SILENT";
20
+ })(LogLevel || (LogLevel = {}));
21
+ // Global MCP server reference for log notifications
22
+ let mcpServerInstance = null;
23
+ // Unified logging level - can be set by MCP client or environment
24
+ let currentLoggingLevel = null;
25
+ // Test mode detection function to check at runtime
26
+ function isTestMode() {
27
+ // Check explicit environment variables
28
+ if (process.env.NODE_ENV === 'test' || process.env.VITEST === 'true') {
29
+ return true;
30
+ }
31
+ // Check if running in a temporary directory (common for tests)
32
+ const cwd = process.cwd();
33
+ if (cwd.includes('/tmp/') || cwd.includes('temp') || cwd.includes('test-')) {
34
+ return true;
35
+ }
36
+ // Check if LOG_LEVEL is explicitly set to ERROR
37
+ if (process.env.LOG_LEVEL === 'ERROR') {
38
+ return true;
39
+ }
40
+ return false;
41
+ }
42
+ /**
43
+ * Set the MCP server instance for log notifications
44
+ */
45
+ export function setMcpServerForLogging(server) {
46
+ mcpServerInstance = server;
47
+ }
48
+ /**
49
+ * Set the logging level from MCP client request
50
+ */
51
+ export function setMcpLoggingLevel(level) {
52
+ // Map MCP levels to our internal levels
53
+ const levelMap = {
54
+ debug: LogLevel.DEBUG,
55
+ info: LogLevel.INFO,
56
+ notice: LogLevel.INFO,
57
+ warning: LogLevel.WARN,
58
+ error: LogLevel.ERROR,
59
+ critical: LogLevel.ERROR,
60
+ alert: LogLevel.ERROR,
61
+ emergency: LogLevel.ERROR,
62
+ };
63
+ currentLoggingLevel = levelMap[level] ?? LogLevel.INFO;
64
+ }
65
+ class Logger {
66
+ component;
67
+ explicitLogLevel;
68
+ constructor(component, logLevel) {
69
+ this.component = component;
70
+ this.explicitLogLevel = logLevel;
71
+ }
72
+ getCurrentLogLevel() {
73
+ // Check environment variable first (allows SILENT to override test mode)
74
+ const envLevel = this.getLogLevelFromEnv();
75
+ if (envLevel === LogLevel.SILENT) {
76
+ return LogLevel.SILENT;
77
+ }
78
+ // Force ERROR level in test environments (unless SILENT)
79
+ if (isTestMode()) {
80
+ return LogLevel.ERROR;
81
+ }
82
+ // Use MCP-set level if available (takes precedence)
83
+ if (currentLoggingLevel !== null) {
84
+ return currentLoggingLevel;
85
+ }
86
+ // Use environment variable level
87
+ if (envLevel !== null) {
88
+ return envLevel;
89
+ }
90
+ // If explicit log level was provided, use it
91
+ if (this.explicitLogLevel !== undefined) {
92
+ return this.explicitLogLevel;
93
+ }
94
+ // Default to INFO
95
+ return LogLevel.INFO;
96
+ }
97
+ getLogLevelFromEnv() {
98
+ const envLevel = process.env.LOG_LEVEL?.toUpperCase();
99
+ switch (envLevel) {
100
+ case 'DEBUG':
101
+ return LogLevel.DEBUG;
102
+ case 'INFO':
103
+ return LogLevel.INFO;
104
+ case 'WARN':
105
+ return LogLevel.WARN;
106
+ case 'ERROR':
107
+ return LogLevel.ERROR;
108
+ case 'SILENT':
109
+ return LogLevel.SILENT;
110
+ default:
111
+ return null;
112
+ }
113
+ }
114
+ shouldLog(level) {
115
+ return level >= this.getCurrentLogLevel();
116
+ }
117
+ formatMessage(level, message, context) {
118
+ const timestamp = new Date().toISOString();
119
+ const contextStr = context ? ` ${JSON.stringify(context)}` : '';
120
+ return `[${timestamp}] ${level.toUpperCase()} [${this.component}] ${message}${contextStr}`;
121
+ }
122
+ /**
123
+ * Send log message to MCP client if server is available and level is appropriate
124
+ */
125
+ async sendMcpLogMessage(level, message, context) {
126
+ if (mcpServerInstance) {
127
+ try {
128
+ // Safely serialize context to avoid JSON issues
129
+ let logData = message;
130
+ if (context) {
131
+ try {
132
+ const contextStr = JSON.stringify(context, null, 0);
133
+ logData = `${message} ${contextStr}`;
134
+ }
135
+ catch (_error) {
136
+ // If JSON serialization fails, just use the message
137
+ logData = `${message} [context serialization failed]`;
138
+ }
139
+ }
140
+ await mcpServerInstance.server.notification({
141
+ method: 'notifications/message',
142
+ params: {
143
+ level,
144
+ logger: this.component,
145
+ data: logData,
146
+ },
147
+ });
148
+ }
149
+ catch (error) {
150
+ // Fallback to stderr if MCP notification fails
151
+ // Don't use this.error to avoid infinite recursion
152
+ if (!isTestMode()) {
153
+ process.stderr.write(`[MCP-LOG-ERROR] Failed to send log notification: ${error}\n`);
154
+ }
155
+ }
156
+ }
157
+ }
158
+ debug(message, context) {
159
+ if (this.shouldLog(LogLevel.DEBUG)) {
160
+ const formattedMessage = this.formatMessage('debug', message, context);
161
+ // Always log to stderr for MCP compliance
162
+ process.stderr.write(formattedMessage + '\n');
163
+ // Also send to MCP client if available (only for debug level)
164
+ this.sendMcpLogMessage('debug', message, context).catch(() => {
165
+ // Ignore MCP notification errors for debug messages
166
+ });
167
+ }
168
+ }
169
+ info(message, context) {
170
+ if (this.shouldLog(LogLevel.INFO)) {
171
+ const formattedMessage = this.formatMessage('info', message, context);
172
+ // Always log to stderr for MCP compliance
173
+ process.stderr.write(formattedMessage + '\n');
174
+ // Send enhanced notifications for important events
175
+ this.sendEnhancedMcpNotification('info', message, context).catch(() => {
176
+ // Ignore MCP notification errors for info messages
177
+ });
178
+ }
179
+ }
180
+ /**
181
+ * Send enhanced MCP notifications with better formatting for important events
182
+ */
183
+ async sendEnhancedMcpNotification(level, message, context) {
184
+ if (mcpServerInstance) {
185
+ try {
186
+ let enhancedMessage = message;
187
+ let notificationLevel = level;
188
+ // Enhance phase transition messages
189
+ if (context &&
190
+ (context.from || context.to) &&
191
+ message.includes('transition')) {
192
+ const from = context.from
193
+ ? this.capitalizePhase(context.from)
194
+ : '';
195
+ const to = context.to
196
+ ? this.capitalizePhase(context.to)
197
+ : '';
198
+ if (from && to) {
199
+ enhancedMessage = `Phase Transition: ${from} → ${to}`;
200
+ notificationLevel = 'info';
201
+ }
202
+ }
203
+ // Enhance initialization messages
204
+ if (message.includes('initialized successfully')) {
205
+ enhancedMessage = '🚀 Vibe Feature MCP Server Ready';
206
+ notificationLevel = 'info';
207
+ }
208
+ // Safely serialize context to avoid JSON issues
209
+ let logData = enhancedMessage;
210
+ if (context) {
211
+ try {
212
+ const contextStr = JSON.stringify(context, null, 0);
213
+ logData = `${enhancedMessage} ${contextStr}`;
214
+ }
215
+ catch (_error) {
216
+ // If JSON serialization fails, just use the message
217
+ logData = `${enhancedMessage} [context serialization failed]`;
218
+ }
219
+ }
220
+ // Use the underlying server's notification method
221
+ await mcpServerInstance.server.notification({
222
+ method: 'notifications/message',
223
+ params: {
224
+ level: notificationLevel,
225
+ logger: this.component,
226
+ data: logData,
227
+ },
228
+ });
229
+ }
230
+ catch (error) {
231
+ // Fallback to stderr if MCP notification fails
232
+ // Don't use this.error to avoid infinite recursion
233
+ if (!isTestMode()) {
234
+ process.stderr.write(`[MCP-LOG-ERROR] Failed to send log notification: ${error}\n`);
235
+ }
236
+ }
237
+ }
238
+ }
239
+ /**
240
+ * Capitalize phase name for display
241
+ */
242
+ capitalizePhase(phase) {
243
+ return phase
244
+ .split('_')
245
+ .map(word => word.charAt(0).toUpperCase() + word.slice(1))
246
+ .join(' ');
247
+ }
248
+ warn(message, context) {
249
+ if (this.shouldLog(LogLevel.WARN)) {
250
+ const formattedMessage = this.formatMessage('warn', message, context);
251
+ // Always log to stderr for MCP compliance
252
+ process.stderr.write(formattedMessage + '\n');
253
+ // Also send to MCP client if available
254
+ this.sendEnhancedMcpNotification('warning', message, context).catch(() => {
255
+ // Ignore MCP notification errors for warn messages
256
+ });
257
+ }
258
+ }
259
+ error(message, error, context) {
260
+ if (this.shouldLog(LogLevel.ERROR)) {
261
+ const errorContext = error
262
+ ? { ...context, error: error.message, stack: error.stack }
263
+ : context;
264
+ const formattedMessage = this.formatMessage('error', message, errorContext);
265
+ // Always log to stderr for MCP compliance
266
+ process.stderr.write(formattedMessage + '\n');
267
+ // Also send to MCP client if available
268
+ this.sendEnhancedMcpNotification('error', message, errorContext).catch(() => {
269
+ // Ignore MCP notification errors for error messages
270
+ });
271
+ }
272
+ }
273
+ child(childComponent) {
274
+ return new Logger(`${this.component}:${childComponent}`, this.explicitLogLevel);
275
+ }
276
+ }
277
+ // Factory function to create loggers
278
+ export function createLogger(component, logLevel) {
279
+ return new Logger(component, logLevel);
280
+ }
281
+ // Default logger for the main application
282
+ export const logger = createLogger('VibeFeatureMCP');
283
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Path Validation Utilities
3
+ *
4
+ * Provides utilities for validating file paths, resolving relative paths,
5
+ * and ensuring security constraints for the file linking functionality.
6
+ */
7
+ export interface PathValidationResult {
8
+ isValid: boolean;
9
+ resolvedPath?: string;
10
+ error?: string;
11
+ }
12
+ export declare class PathValidationUtils {
13
+ /**
14
+ * Validate if a string is a known template name
15
+ */
16
+ static isTemplateName(value: string, availableTemplates: string[]): boolean;
17
+ /**
18
+ * Validate and resolve a file path
19
+ */
20
+ static validateFilePath(filePath: string, projectPath: string): Promise<PathValidationResult>;
21
+ /**
22
+ * Validate and resolve a file or directory path
23
+ */
24
+ static validateFileOrDirectoryPath(filePath: string, projectPath: string): Promise<PathValidationResult>;
25
+ /**
26
+ * Resolve a file path to absolute, handling various formats
27
+ */
28
+ static resolvePath(filePath: string, projectPath: string): string;
29
+ /**
30
+ * Check if a resolved path is within safe boundaries
31
+ * Prevents directory traversal attacks
32
+ */
33
+ static isPathSafe(resolvedPath: string, projectPath: string): boolean;
34
+ /**
35
+ * Validate parameter as either template name or file path
36
+ */
37
+ static validateParameter(value: string, availableTemplates: string[], projectPath: string): Promise<{
38
+ isTemplate: boolean;
39
+ isFilePath: boolean;
40
+ resolvedPath?: string;
41
+ error?: string;
42
+ }>;
43
+ /**
44
+ * Get common file patterns for documentation
45
+ */
46
+ static getCommonDocumentationPatterns(): {
47
+ architecture: string[];
48
+ requirements: string[];
49
+ design: string[];
50
+ };
51
+ }
52
+ /**
53
+ * Cross-platform utility to extract the last component of a path.
54
+ * Handles both forward slashes (/) and backslashes (\) regardless of
55
+ * the platform the code is running on.
56
+ *
57
+ * Note: Node.js's `path.basename()` only handles the native path separator
58
+ * for the current platform. This function normalizes paths to handle both
59
+ * Unix and Windows paths on any platform.
60
+ *
61
+ * @param filePath - The file path to extract from
62
+ * @param fallback - Fallback value if path is empty (default: 'unknown')
63
+ * @returns The last component of the path, or the fallback value
64
+ *
65
+ * @example
66
+ * // Unix-style paths
67
+ * getPathBasename('/home/user/project') // 'project'
68
+ *
69
+ * // Windows-style paths (works on any platform)
70
+ * getPathBasename('c:\\work\\project') // 'project'
71
+ *
72
+ * // Mixed paths
73
+ * getPathBasename('c:/work/project') // 'project'
74
+ */
75
+ export declare function getPathBasename(filePath: string, fallback?: string): string;
@@ -0,0 +1,238 @@
1
+ /**
2
+ * Path Validation Utilities
3
+ *
4
+ * Provides utilities for validating file paths, resolving relative paths,
5
+ * and ensuring security constraints for the file linking functionality.
6
+ */
7
+ import { access, stat } from 'node:fs/promises';
8
+ import { resolve, isAbsolute, join, normalize, basename } from 'node:path';
9
+ import { createLogger } from './logger.js';
10
+ const logger = createLogger('PathValidationUtils');
11
+ export class PathValidationUtils {
12
+ /**
13
+ * Validate if a string is a known template name
14
+ */
15
+ static isTemplateName(value, availableTemplates) {
16
+ return availableTemplates.includes(value);
17
+ }
18
+ /**
19
+ * Validate and resolve a file path
20
+ */
21
+ static async validateFilePath(filePath, projectPath) {
22
+ try {
23
+ // Resolve the path to absolute
24
+ const resolvedPath = this.resolvePath(filePath, projectPath);
25
+ // Security validation - prevent directory traversal
26
+ if (!this.isPathSafe(resolvedPath, projectPath)) {
27
+ return {
28
+ isValid: false,
29
+ error: 'Path is outside project boundaries for security reasons',
30
+ };
31
+ }
32
+ // Check if file exists and is readable
33
+ await access(resolvedPath);
34
+ // Verify it's a file (not a directory)
35
+ const stats = await stat(resolvedPath);
36
+ if (!stats.isFile()) {
37
+ return {
38
+ isValid: false,
39
+ error: 'Path points to a directory, not a file',
40
+ };
41
+ }
42
+ logger.debug('File path validated successfully', {
43
+ originalPath: filePath,
44
+ resolvedPath,
45
+ });
46
+ return {
47
+ isValid: true,
48
+ resolvedPath,
49
+ };
50
+ }
51
+ catch (error) {
52
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
53
+ logger.debug('File path validation failed', {
54
+ filePath,
55
+ error: errorMessage,
56
+ });
57
+ return {
58
+ isValid: false,
59
+ error: `File not found or not accessible: ${errorMessage}`,
60
+ };
61
+ }
62
+ }
63
+ /**
64
+ * Validate and resolve a file or directory path
65
+ */
66
+ static async validateFileOrDirectoryPath(filePath, projectPath) {
67
+ try {
68
+ // Resolve the path to absolute
69
+ const resolvedPath = this.resolvePath(filePath, projectPath);
70
+ // Security validation - prevent directory traversal
71
+ if (!this.isPathSafe(resolvedPath, projectPath)) {
72
+ return {
73
+ isValid: false,
74
+ error: 'Path is outside project boundaries for security reasons',
75
+ };
76
+ }
77
+ // Check if file or directory exists and is readable
78
+ await access(resolvedPath);
79
+ // Verify it's either a file or directory
80
+ const stats = await stat(resolvedPath);
81
+ if (!stats.isFile() && !stats.isDirectory()) {
82
+ return {
83
+ isValid: false,
84
+ error: 'Path is neither a file nor a directory',
85
+ };
86
+ }
87
+ logger.debug('File or directory path validated successfully', {
88
+ originalPath: filePath,
89
+ resolvedPath,
90
+ isFile: stats.isFile(),
91
+ isDirectory: stats.isDirectory(),
92
+ });
93
+ return {
94
+ isValid: true,
95
+ resolvedPath,
96
+ };
97
+ }
98
+ catch (error) {
99
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
100
+ logger.debug('File or directory path validation failed', {
101
+ filePath,
102
+ error: errorMessage,
103
+ });
104
+ return {
105
+ isValid: false,
106
+ error: `File or directory not found or not accessible: ${errorMessage}`,
107
+ };
108
+ }
109
+ }
110
+ /**
111
+ * Resolve a file path to absolute, handling various formats
112
+ */
113
+ static resolvePath(filePath, projectPath) {
114
+ // If already absolute, return as-is
115
+ if (isAbsolute(filePath)) {
116
+ return normalize(filePath);
117
+ }
118
+ // Handle relative paths (./file, ../file, file)
119
+ return resolve(projectPath, filePath);
120
+ }
121
+ /**
122
+ * Check if a resolved path is within safe boundaries
123
+ * Prevents directory traversal attacks
124
+ */
125
+ static isPathSafe(resolvedPath, projectPath) {
126
+ const normalizedResolved = normalize(resolvedPath);
127
+ const normalizedProject = normalize(projectPath);
128
+ // Allow paths within the project directory
129
+ if (normalizedResolved.startsWith(normalizedProject)) {
130
+ return true;
131
+ }
132
+ // Allow paths in common documentation locations relative to project
133
+ const allowedPaths = [
134
+ normalize(join(projectPath, '..')), // Parent directory (for monorepos)
135
+ '/usr/share/doc', // System documentation
136
+ '/opt/docs', // Optional documentation
137
+ ];
138
+ return allowedPaths.some(allowedPath => normalizedResolved.startsWith(allowedPath));
139
+ }
140
+ /**
141
+ * Validate parameter as either template name or file path
142
+ */
143
+ static async validateParameter(value, availableTemplates, projectPath) {
144
+ // First check if it's a template name
145
+ if (this.isTemplateName(value, availableTemplates)) {
146
+ return {
147
+ isTemplate: true,
148
+ isFilePath: false,
149
+ };
150
+ }
151
+ // Then validate as file or directory path
152
+ const pathValidation = await this.validateFileOrDirectoryPath(value, projectPath);
153
+ if (pathValidation.isValid) {
154
+ return {
155
+ isTemplate: false,
156
+ isFilePath: true,
157
+ resolvedPath: pathValidation.resolvedPath,
158
+ };
159
+ }
160
+ // Neither template nor valid file/directory path
161
+ return {
162
+ isTemplate: false,
163
+ isFilePath: false,
164
+ error: `Invalid parameter: not a known template (${availableTemplates.join(', ')}) and not a valid file or directory path (${pathValidation.error})`,
165
+ };
166
+ }
167
+ /**
168
+ * Get common file patterns for documentation
169
+ */
170
+ static getCommonDocumentationPatterns() {
171
+ return {
172
+ architecture: [
173
+ 'ARCHITECTURE.md',
174
+ 'ARCHITECTURE.txt',
175
+ 'architecture.md',
176
+ 'Architecture.md',
177
+ 'docs/ARCHITECTURE.md',
178
+ 'docs/architecture.md',
179
+ 'README.md', // Can contain architecture info
180
+ ],
181
+ requirements: [
182
+ 'REQUIREMENTS.md',
183
+ 'REQUIREMENTS.txt',
184
+ 'requirements.md',
185
+ 'Requirements.md',
186
+ 'docs/REQUIREMENTS.md',
187
+ 'docs/requirements.md',
188
+ 'README.md', // Often contains requirements
189
+ ],
190
+ design: [
191
+ 'DESIGN.md',
192
+ 'DESIGN.txt',
193
+ 'design.md',
194
+ 'Design.md',
195
+ 'docs/DESIGN.md',
196
+ 'docs/design.md',
197
+ 'README.md', // Can contain design info
198
+ ],
199
+ };
200
+ }
201
+ }
202
+ /**
203
+ * Cross-platform utility to extract the last component of a path.
204
+ * Handles both forward slashes (/) and backslashes (\) regardless of
205
+ * the platform the code is running on.
206
+ *
207
+ * Note: Node.js's `path.basename()` only handles the native path separator
208
+ * for the current platform. This function normalizes paths to handle both
209
+ * Unix and Windows paths on any platform.
210
+ *
211
+ * @param filePath - The file path to extract from
212
+ * @param fallback - Fallback value if path is empty (default: 'unknown')
213
+ * @returns The last component of the path, or the fallback value
214
+ *
215
+ * @example
216
+ * // Unix-style paths
217
+ * getPathBasename('/home/user/project') // 'project'
218
+ *
219
+ * // Windows-style paths (works on any platform)
220
+ * getPathBasename('c:\\work\\project') // 'project'
221
+ *
222
+ * // Mixed paths
223
+ * getPathBasename('c:/work/project') // 'project'
224
+ */
225
+ export function getPathBasename(filePath, fallback = 'unknown') {
226
+ if (!filePath) {
227
+ return fallback;
228
+ }
229
+ // Normalize backslashes to forward slashes for cross-platform support
230
+ // This ensures Windows paths are handled correctly on Unix and vice versa
231
+ const normalizedPath = filePath.replace(/\\/g, '/');
232
+ // Remove trailing slashes
233
+ const trimmedPath = normalizedPath.replace(/\/+$/, '');
234
+ // Use basename on the normalized path
235
+ const result = basename(trimmedPath);
236
+ return result || fallback;
237
+ }
238
+ //# sourceMappingURL=path-validation-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-validation-utils.js","sourceRoot":"","sources":["../src/path-validation-utils.ts"],"names":[],"mappings":"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"}