@arimakouyou/spec-workflow-mcp 2.2.7

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 (472) hide show
  1. package/.claude-plugin/.mcp.json +8 -0
  2. package/.claude-plugin/agents/code-simplifier.md +80 -0
  3. package/.claude-plugin/agents/integ-test-auditor.md +91 -0
  4. package/.claude-plugin/agents/integ-test-worker.md +73 -0
  5. package/.claude-plugin/agents/parallel-worker.md +136 -0
  6. package/.claude-plugin/agents/review-worker.md +279 -0
  7. package/.claude-plugin/agents/unit-test-engineer.md +148 -0
  8. package/.claude-plugin/agents/wave-harness-worker.md +158 -0
  9. package/.claude-plugin/hooks/hooks.json +16 -0
  10. package/.claude-plugin/hooks/tasks-read-guard.sh +17 -0
  11. package/.claude-plugin/marketplace.json +33 -0
  12. package/.claude-plugin/plugin.json +11 -0
  13. package/.claude-plugin/rules/axum.md +154 -0
  14. package/.claude-plugin/rules/cargo-toml.md +63 -0
  15. package/.claude-plugin/rules/context7.md +17 -0
  16. package/.claude-plugin/rules/design-conformance.md +82 -0
  17. package/.claude-plugin/rules/design-principles.md +53 -0
  18. package/.claude-plugin/rules/diesel.md +176 -0
  19. package/.claude-plugin/rules/feedback-loop.md +33 -0
  20. package/.claude-plugin/rules/leptos.md +319 -0
  21. package/.claude-plugin/rules/project-architecture.md +134 -0
  22. package/.claude-plugin/rules/quality-checks.md +265 -0
  23. package/.claude-plugin/rules/rust-style.md +242 -0
  24. package/.claude-plugin/rules/security.md +67 -0
  25. package/.claude-plugin/rules/spec-workflow-enforcement.md +47 -0
  26. package/.claude-plugin/rules/valkey.md +167 -0
  27. package/.claude-plugin/skills/integration-test/SKILL.md +230 -0
  28. package/.claude-plugin/skills/integration-test/references/auditor-prompt.md +78 -0
  29. package/.claude-plugin/skills/integration-test/references/external-api-mock.md +98 -0
  30. package/.claude-plugin/skills/integration-test/references/fixture-catalog.md +155 -0
  31. package/.claude-plugin/skills/integration-test/references/parallel-execution.md +124 -0
  32. package/.claude-plugin/skills/integration-test/references/quality-gate.md +80 -0
  33. package/.claude-plugin/skills/integration-test/references/test-case-design.md +88 -0
  34. package/.claude-plugin/skills/integration-test/references/test-patterns.md +215 -0
  35. package/.claude-plugin/skills/integration-test/references/whiteboard-template.md +81 -0
  36. package/.claude-plugin/skills/integration-test/references/worker-prompt.md +70 -0
  37. package/.claude-plugin/skills/knowhow-capture/SKILL.md +143 -0
  38. package/.claude-plugin/skills/phase-review-team/SKILL.md +380 -0
  39. package/.claude-plugin/skills/spec-design/SKILL.md +282 -0
  40. package/.claude-plugin/skills/spec-e2e-implement/SKILL.md +259 -0
  41. package/.claude-plugin/skills/spec-impl-code/SKILL.md +101 -0
  42. package/.claude-plugin/skills/spec-impl-review/SKILL.md +115 -0
  43. package/.claude-plugin/skills/spec-impl-test-run/SKILL.md +98 -0
  44. package/.claude-plugin/skills/spec-impl-test-write/SKILL.md +121 -0
  45. package/.claude-plugin/skills/spec-implement/SKILL.md +822 -0
  46. package/.claude-plugin/skills/spec-requirements/SKILL.md +130 -0
  47. package/.claude-plugin/skills/spec-review/SKILL.md +274 -0
  48. package/.claude-plugin/skills/spec-tasks/SKILL.md +372 -0
  49. package/.claude-plugin/skills/spec-test-design/SKILL.md +233 -0
  50. package/.claude-plugin/skills/tdd-skills/SKILL.md +95 -0
  51. package/.claude-plugin/skills/tdd-skills/references/advanced-techniques.md +49 -0
  52. package/.claude-plugin/skills/tdd-skills/references/green-strategies.md +70 -0
  53. package/.claude-plugin/skills/tdd-skills/references/tdd-and-design.md +48 -0
  54. package/.claude-plugin/skills/tdd-skills/references/test-design.md +43 -0
  55. package/.claude-plugin/skills/tdd-skills/references/test-doubles.md +53 -0
  56. package/.claude-plugin/skills/tdd-skills/references/test-patterns.md +40 -0
  57. package/.claude-plugin/skills/tdd-skills-rust/SKILL.md +128 -0
  58. package/.claude-plugin/skills/tdd-skills-rust/references/advanced-techniques.md +205 -0
  59. package/.claude-plugin/skills/tdd-skills-rust/references/green-strategies.md +166 -0
  60. package/.claude-plugin/skills/tdd-skills-rust/references/tdd-and-design.md +215 -0
  61. package/.claude-plugin/skills/tdd-skills-rust/references/test-design.md +128 -0
  62. package/.claude-plugin/skills/tdd-skills-rust/references/test-doubles.md +208 -0
  63. package/.claude-plugin/skills/tdd-skills-rust/references/test-patterns.md +223 -0
  64. package/.claude-plugin/with-dashboard/.mcp.json +8 -0
  65. package/.claude-plugin/with-dashboard/plugin.json +10 -0
  66. package/CHANGELOG.md +1007 -0
  67. package/LICENSE +674 -0
  68. package/README.ja.md +380 -0
  69. package/README.md +437 -0
  70. package/dist/__tests__/config.test.d.ts +2 -0
  71. package/dist/__tests__/config.test.d.ts.map +1 -0
  72. package/dist/__tests__/config.test.js +264 -0
  73. package/dist/__tests__/config.test.js.map +1 -0
  74. package/dist/__tests__/index-args.test.d.ts +2 -0
  75. package/dist/__tests__/index-args.test.d.ts.map +1 -0
  76. package/dist/__tests__/index-args.test.js +43 -0
  77. package/dist/__tests__/index-args.test.js.map +1 -0
  78. package/dist/__tests__/index-entrypoint.test.d.ts +2 -0
  79. package/dist/__tests__/index-entrypoint.test.d.ts.map +1 -0
  80. package/dist/__tests__/index-entrypoint.test.js +23 -0
  81. package/dist/__tests__/index-entrypoint.test.js.map +1 -0
  82. package/dist/config.d.ts +26 -0
  83. package/dist/config.d.ts.map +1 -0
  84. package/dist/config.js +188 -0
  85. package/dist/config.js.map +1 -0
  86. package/dist/core/__tests__/git-utils.test.d.ts +2 -0
  87. package/dist/core/__tests__/git-utils.test.d.ts.map +1 -0
  88. package/dist/core/__tests__/git-utils.test.js +179 -0
  89. package/dist/core/__tests__/git-utils.test.js.map +1 -0
  90. package/dist/core/__tests__/mdx-validator.test.d.ts +2 -0
  91. package/dist/core/__tests__/mdx-validator.test.d.ts.map +1 -0
  92. package/dist/core/__tests__/mdx-validator.test.js +42 -0
  93. package/dist/core/__tests__/mdx-validator.test.js.map +1 -0
  94. package/dist/core/__tests__/path-utils.test.d.ts +2 -0
  95. package/dist/core/__tests__/path-utils.test.d.ts.map +1 -0
  96. package/dist/core/__tests__/path-utils.test.js +342 -0
  97. package/dist/core/__tests__/path-utils.test.js.map +1 -0
  98. package/dist/core/__tests__/project-registry.test.d.ts +2 -0
  99. package/dist/core/__tests__/project-registry.test.d.ts.map +1 -0
  100. package/dist/core/__tests__/project-registry.test.js +62 -0
  101. package/dist/core/__tests__/project-registry.test.js.map +1 -0
  102. package/dist/core/__tests__/security-utils.test.d.ts +2 -0
  103. package/dist/core/__tests__/security-utils.test.d.ts.map +1 -0
  104. package/dist/core/__tests__/security-utils.test.js +657 -0
  105. package/dist/core/__tests__/security-utils.test.js.map +1 -0
  106. package/dist/core/__tests__/task-parser.test.d.ts +2 -0
  107. package/dist/core/__tests__/task-parser.test.d.ts.map +1 -0
  108. package/dist/core/__tests__/task-parser.test.js +222 -0
  109. package/dist/core/__tests__/task-parser.test.js.map +1 -0
  110. package/dist/core/__tests__/task-validator.test.d.ts +2 -0
  111. package/dist/core/__tests__/task-validator.test.d.ts.map +1 -0
  112. package/dist/core/__tests__/task-validator.test.js +308 -0
  113. package/dist/core/__tests__/task-validator.test.js.map +1 -0
  114. package/dist/core/archive-service.d.ts +10 -0
  115. package/dist/core/archive-service.d.ts.map +1 -0
  116. package/dist/core/archive-service.js +99 -0
  117. package/dist/core/archive-service.js.map +1 -0
  118. package/dist/core/dashboard-session.d.ts +49 -0
  119. package/dist/core/dashboard-session.d.ts.map +1 -0
  120. package/dist/core/dashboard-session.js +132 -0
  121. package/dist/core/dashboard-session.js.map +1 -0
  122. package/dist/core/git-utils.d.ts +25 -0
  123. package/dist/core/git-utils.d.ts.map +1 -0
  124. package/dist/core/git-utils.js +87 -0
  125. package/dist/core/git-utils.js.map +1 -0
  126. package/dist/core/global-dir.d.ts +44 -0
  127. package/dist/core/global-dir.d.ts.map +1 -0
  128. package/dist/core/global-dir.js +74 -0
  129. package/dist/core/global-dir.js.map +1 -0
  130. package/dist/core/implementation-log-migrator.d.ts +41 -0
  131. package/dist/core/implementation-log-migrator.d.ts.map +1 -0
  132. package/dist/core/implementation-log-migrator.js +258 -0
  133. package/dist/core/implementation-log-migrator.js.map +1 -0
  134. package/dist/core/mdx-validator.d.ts +14 -0
  135. package/dist/core/mdx-validator.d.ts.map +1 -0
  136. package/dist/core/mdx-validator.js +34 -0
  137. package/dist/core/mdx-validator.js.map +1 -0
  138. package/dist/core/parser.d.ts +11 -0
  139. package/dist/core/parser.d.ts.map +1 -0
  140. package/dist/core/parser.js +128 -0
  141. package/dist/core/parser.js.map +1 -0
  142. package/dist/core/path-utils.d.ts +68 -0
  143. package/dist/core/path-utils.d.ts.map +1 -0
  144. package/dist/core/path-utils.js +302 -0
  145. package/dist/core/path-utils.js.map +1 -0
  146. package/dist/core/project-registry.d.ts +94 -0
  147. package/dist/core/project-registry.d.ts.map +1 -0
  148. package/dist/core/project-registry.js +297 -0
  149. package/dist/core/project-registry.js.map +1 -0
  150. package/dist/core/security-utils.d.ts +99 -0
  151. package/dist/core/security-utils.d.ts.map +1 -0
  152. package/dist/core/security-utils.js +275 -0
  153. package/dist/core/security-utils.js.map +1 -0
  154. package/dist/core/task-parser.d.ts +90 -0
  155. package/dist/core/task-parser.d.ts.map +1 -0
  156. package/dist/core/task-parser.js +477 -0
  157. package/dist/core/task-parser.js.map +1 -0
  158. package/dist/core/task-validator.d.ts +37 -0
  159. package/dist/core/task-validator.d.ts.map +1 -0
  160. package/dist/core/task-validator.js +499 -0
  161. package/dist/core/task-validator.js.map +1 -0
  162. package/dist/core/workspace-initializer.d.ts +16 -0
  163. package/dist/core/workspace-initializer.d.ts.map +1 -0
  164. package/dist/core/workspace-initializer.js +168 -0
  165. package/dist/core/workspace-initializer.js.map +1 -0
  166. package/dist/dashboard/__tests__/approval-storage-path-resolution.test.d.ts +2 -0
  167. package/dist/dashboard/__tests__/approval-storage-path-resolution.test.d.ts.map +1 -0
  168. package/dist/dashboard/__tests__/approval-storage-path-resolution.test.js +78 -0
  169. package/dist/dashboard/__tests__/approval-storage-path-resolution.test.js.map +1 -0
  170. package/dist/dashboard/__tests__/multi-server-approvals-content.test.d.ts +2 -0
  171. package/dist/dashboard/__tests__/multi-server-approvals-content.test.d.ts.map +1 -0
  172. package/dist/dashboard/__tests__/multi-server-approvals-content.test.js +115 -0
  173. package/dist/dashboard/__tests__/multi-server-approvals-content.test.js.map +1 -0
  174. package/dist/dashboard/__tests__/watcher-error-handling.test.d.ts +2 -0
  175. package/dist/dashboard/__tests__/watcher-error-handling.test.d.ts.map +1 -0
  176. package/dist/dashboard/__tests__/watcher-error-handling.test.js +118 -0
  177. package/dist/dashboard/__tests__/watcher-error-handling.test.js.map +1 -0
  178. package/dist/dashboard/approval-storage.d.ts +139 -0
  179. package/dist/dashboard/approval-storage.d.ts.map +1 -0
  180. package/dist/dashboard/approval-storage.js +608 -0
  181. package/dist/dashboard/approval-storage.js.map +1 -0
  182. package/dist/dashboard/execution-history-manager.d.ts +52 -0
  183. package/dist/dashboard/execution-history-manager.d.ts.map +1 -0
  184. package/dist/dashboard/execution-history-manager.js +161 -0
  185. package/dist/dashboard/execution-history-manager.js.map +1 -0
  186. package/dist/dashboard/implementation-log-manager.d.ts +97 -0
  187. package/dist/dashboard/implementation-log-manager.d.ts.map +1 -0
  188. package/dist/dashboard/implementation-log-manager.js +617 -0
  189. package/dist/dashboard/implementation-log-manager.js.map +1 -0
  190. package/dist/dashboard/job-scheduler.d.ts +91 -0
  191. package/dist/dashboard/job-scheduler.d.ts.map +1 -0
  192. package/dist/dashboard/job-scheduler.js +321 -0
  193. package/dist/dashboard/job-scheduler.js.map +1 -0
  194. package/dist/dashboard/multi-server.d.ts +42 -0
  195. package/dist/dashboard/multi-server.d.ts.map +1 -0
  196. package/dist/dashboard/multi-server.js +1460 -0
  197. package/dist/dashboard/multi-server.js.map +1 -0
  198. package/dist/dashboard/parser.d.ts +18 -0
  199. package/dist/dashboard/parser.d.ts.map +1 -0
  200. package/dist/dashboard/parser.js +269 -0
  201. package/dist/dashboard/parser.js.map +1 -0
  202. package/dist/dashboard/project-manager.d.ts +82 -0
  203. package/dist/dashboard/project-manager.d.ts.map +1 -0
  204. package/dist/dashboard/project-manager.js +257 -0
  205. package/dist/dashboard/project-manager.js.map +1 -0
  206. package/dist/dashboard/public/assets/Inter-Bold-CD3Pr7BX.woff2 +0 -0
  207. package/dist/dashboard/public/assets/Inter-Medium-B_8v_WHh.woff2 +0 -0
  208. package/dist/dashboard/public/assets/Inter-Regular-DRVdRqcI.woff2 +0 -0
  209. package/dist/dashboard/public/assets/Inter-SemiBold-CtskMddL.woff2 +0 -0
  210. package/dist/dashboard/public/assets/JetBrainsMono-Bold-D4WEaHbo.woff2 +0 -0
  211. package/dist/dashboard/public/assets/JetBrainsMono-Medium-3S3k2nMz.woff2 +0 -0
  212. package/dist/dashboard/public/assets/JetBrainsMono-Regular-BQaDgvhP.woff2 +0 -0
  213. package/dist/dashboard/public/assets/Tableau10-B-NsZVaP.js +1 -0
  214. package/dist/dashboard/public/assets/apl-B4CMkyY2.js +1 -0
  215. package/dist/dashboard/public/assets/arc-a5wW942W.js +1 -0
  216. package/dist/dashboard/public/assets/array-BKyUJesY.js +1 -0
  217. package/dist/dashboard/public/assets/asciiarmor-Df11BRmG.js +1 -0
  218. package/dist/dashboard/public/assets/asn1-EdZsLKOL.js +1 -0
  219. package/dist/dashboard/public/assets/asterisk-B-8jnY81.js +1 -0
  220. package/dist/dashboard/public/assets/blockDiagram-c4efeb88-CvjTuK-w.js +118 -0
  221. package/dist/dashboard/public/assets/brainfuck-C4LP7Hcl.js +1 -0
  222. package/dist/dashboard/public/assets/c4Diagram-c83219d4-NwVQo5kf.js +10 -0
  223. package/dist/dashboard/public/assets/channel-Bi16YZhk.js +1 -0
  224. package/dist/dashboard/public/assets/classDiagram-beda092f-BmSeXDdU.js +2 -0
  225. package/dist/dashboard/public/assets/classDiagram-v2-2358418a-D7GvvuPr.js +2 -0
  226. package/dist/dashboard/public/assets/clike-B9uivgTg.js +1 -0
  227. package/dist/dashboard/public/assets/clojure-BMjYHr_A.js +1 -0
  228. package/dist/dashboard/public/assets/clone-BpKTiq7P.js +1 -0
  229. package/dist/dashboard/public/assets/cmake-BQqOBYOt.js +1 -0
  230. package/dist/dashboard/public/assets/cobol-CWcv1MsR.js +1 -0
  231. package/dist/dashboard/public/assets/coffeescript-S37ZYGWr.js +1 -0
  232. package/dist/dashboard/public/assets/commonlisp-DBKNyK5s.js +1 -0
  233. package/dist/dashboard/public/assets/createText-1719965b-qASbqHUP.js +7 -0
  234. package/dist/dashboard/public/assets/crystal-SjHAIU92.js +1 -0
  235. package/dist/dashboard/public/assets/css-BnMrqG3P.js +1 -0
  236. package/dist/dashboard/public/assets/cypher-C_CwsFkJ.js +1 -0
  237. package/dist/dashboard/public/assets/d-pRatUO7H.js +1 -0
  238. package/dist/dashboard/public/assets/diff-DbItnlRl.js +1 -0
  239. package/dist/dashboard/public/assets/dockerfile-BKs6k2Af.js +1 -0
  240. package/dist/dashboard/public/assets/dtd-DF_7sFjM.js +1 -0
  241. package/dist/dashboard/public/assets/dylan-DwRh75JA.js +1 -0
  242. package/dist/dashboard/public/assets/ebnf-CDyGwa7X.js +1 -0
  243. package/dist/dashboard/public/assets/ecl-Cabwm37j.js +1 -0
  244. package/dist/dashboard/public/assets/edges-96097737-BItTSnH7.js +4 -0
  245. package/dist/dashboard/public/assets/eiffel-CnydiIhH.js +1 -0
  246. package/dist/dashboard/public/assets/elm-vLlmbW-K.js +1 -0
  247. package/dist/dashboard/public/assets/erDiagram-0228fc6a-DT224olg.js +51 -0
  248. package/dist/dashboard/public/assets/erlang-BNw1qcRV.js +1 -0
  249. package/dist/dashboard/public/assets/factor-kuTfRLto.js +1 -0
  250. package/dist/dashboard/public/assets/fcl-Kvtd6kyn.js +1 -0
  251. package/dist/dashboard/public/assets/flowDb-c6c81e3f-D9_ukKtv.js +10 -0
  252. package/dist/dashboard/public/assets/flowDiagram-50d868cf-CylE8siG.js +4 -0
  253. package/dist/dashboard/public/assets/flowDiagram-v2-4f6560a1-B2O3JN7Y.js +1 -0
  254. package/dist/dashboard/public/assets/flowchart-elk-definition-6af322e1-BCaqFKf3.js +139 -0
  255. package/dist/dashboard/public/assets/forth-Ffai-XNe.js +1 -0
  256. package/dist/dashboard/public/assets/fortran-DYz_wnZ1.js +1 -0
  257. package/dist/dashboard/public/assets/ganttDiagram-a2739b55-WQUL1QW_.js +257 -0
  258. package/dist/dashboard/public/assets/gas-Bneqetm1.js +1 -0
  259. package/dist/dashboard/public/assets/gherkin-heZmZLOM.js +1 -0
  260. package/dist/dashboard/public/assets/gitGraphDiagram-82fe8481-CttZrdmr.js +70 -0
  261. package/dist/dashboard/public/assets/graph-Ch-rVueN.js +1 -0
  262. package/dist/dashboard/public/assets/groovy-D9Dt4D0W.js +1 -0
  263. package/dist/dashboard/public/assets/haskell-Cw1EW3IL.js +1 -0
  264. package/dist/dashboard/public/assets/haxe-H-WmDvRZ.js +1 -0
  265. package/dist/dashboard/public/assets/http-DBlCnlav.js +1 -0
  266. package/dist/dashboard/public/assets/idl-BEugSyMb.js +1 -0
  267. package/dist/dashboard/public/assets/index--kbPpDKv.js +1 -0
  268. package/dist/dashboard/public/assets/index-3scDwWm6.js +1 -0
  269. package/dist/dashboard/public/assets/index-5325376f-BL2zVOJU.js +1 -0
  270. package/dist/dashboard/public/assets/index-BZdjbO25.js +1 -0
  271. package/dist/dashboard/public/assets/index-BmA_batZ.js +1 -0
  272. package/dist/dashboard/public/assets/index-Bu0u99kF.js +2 -0
  273. package/dist/dashboard/public/assets/index-Ch-lr7F4.js +1 -0
  274. package/dist/dashboard/public/assets/index-ClgWbdoq.js +1 -0
  275. package/dist/dashboard/public/assets/index-CzLwOMQ_.js +3 -0
  276. package/dist/dashboard/public/assets/index-DAOEjGO7.js +1 -0
  277. package/dist/dashboard/public/assets/index-DXqf0B9c.js +1 -0
  278. package/dist/dashboard/public/assets/index-DegWdR16.js +1 -0
  279. package/dist/dashboard/public/assets/index-DiHyYGim.js +1 -0
  280. package/dist/dashboard/public/assets/index-DlZtG7I5.js +1 -0
  281. package/dist/dashboard/public/assets/index-DmhGE2M8.js +1 -0
  282. package/dist/dashboard/public/assets/index-QEGvld4x.js +1 -0
  283. package/dist/dashboard/public/assets/index-RfZPGAJu.js +1 -0
  284. package/dist/dashboard/public/assets/index-UybBj_7u.js +319 -0
  285. package/dist/dashboard/public/assets/index-bVekzPnl.js +7 -0
  286. package/dist/dashboard/public/assets/index-f5bysQzW.css +1 -0
  287. package/dist/dashboard/public/assets/infoDiagram-8eee0895-DjzkkE3o.js +7 -0
  288. package/dist/dashboard/public/assets/init-Gi6I4Gst.js +1 -0
  289. package/dist/dashboard/public/assets/javascript-iXu5QeM3.js +1 -0
  290. package/dist/dashboard/public/assets/journeyDiagram-c64418c1-CxPZkNdB.js +139 -0
  291. package/dist/dashboard/public/assets/julia-DuME0IfC.js +1 -0
  292. package/dist/dashboard/public/assets/katex-XbL3y5x-.js +261 -0
  293. package/dist/dashboard/public/assets/layout-DX7DNTRm.js +1 -0
  294. package/dist/dashboard/public/assets/line-DfvpmKOn.js +1 -0
  295. package/dist/dashboard/public/assets/linear-gQbBPHO5.js +1 -0
  296. package/dist/dashboard/public/assets/livescript-BwQOo05w.js +1 -0
  297. package/dist/dashboard/public/assets/lua-BgMRiT3U.js +1 -0
  298. package/dist/dashboard/public/assets/mathematica-DTrFuWx2.js +1 -0
  299. package/dist/dashboard/public/assets/mbox-CNhZ1qSd.js +1 -0
  300. package/dist/dashboard/public/assets/mindmap-definition-8da855dc-CNxmpyG6.js +415 -0
  301. package/dist/dashboard/public/assets/mirc-CjQqDB4T.js +1 -0
  302. package/dist/dashboard/public/assets/mllike-CXdrOF99.js +1 -0
  303. package/dist/dashboard/public/assets/modelica-Dc1JOy9r.js +1 -0
  304. package/dist/dashboard/public/assets/mscgen-BA5vi2Kp.js +1 -0
  305. package/dist/dashboard/public/assets/mumps-BT43cFF4.js +1 -0
  306. package/dist/dashboard/public/assets/nginx-DdIZxoE0.js +1 -0
  307. package/dist/dashboard/public/assets/nsis-LdVXkNf5.js +1 -0
  308. package/dist/dashboard/public/assets/ntriples-BfvgReVJ.js +1 -0
  309. package/dist/dashboard/public/assets/octave-Ck1zUtKM.js +1 -0
  310. package/dist/dashboard/public/assets/ordinal-Cboi1Yqb.js +1 -0
  311. package/dist/dashboard/public/assets/oz-BzwKVEFT.js +1 -0
  312. package/dist/dashboard/public/assets/pascal--L3eBynH.js +1 -0
  313. package/dist/dashboard/public/assets/path-CbwjOpE9.js +1 -0
  314. package/dist/dashboard/public/assets/perl-CdXCOZ3F.js +1 -0
  315. package/dist/dashboard/public/assets/pieDiagram-a8764435-D-xy_NSA.js +35 -0
  316. package/dist/dashboard/public/assets/pig-CevX1Tat.js +1 -0
  317. package/dist/dashboard/public/assets/powershell-CFHJl5sT.js +1 -0
  318. package/dist/dashboard/public/assets/properties-C78fOPTZ.js +1 -0
  319. package/dist/dashboard/public/assets/protobuf-ChK-085T.js +1 -0
  320. package/dist/dashboard/public/assets/pug-DeIclll2.js +1 -0
  321. package/dist/dashboard/public/assets/puppet-DMA9R1ak.js +1 -0
  322. package/dist/dashboard/public/assets/python-BuPzkPfP.js +1 -0
  323. package/dist/dashboard/public/assets/q-pXgVlZs6.js +1 -0
  324. package/dist/dashboard/public/assets/quadrantDiagram-1e28029f-BoL2wzz0.js +7 -0
  325. package/dist/dashboard/public/assets/r-B6wPVr8A.js +1 -0
  326. package/dist/dashboard/public/assets/requirementDiagram-08caed73-BujFz0q1.js +52 -0
  327. package/dist/dashboard/public/assets/rpm-CTu-6PCP.js +1 -0
  328. package/dist/dashboard/public/assets/ruby-B2Rjki9n.js +1 -0
  329. package/dist/dashboard/public/assets/sankeyDiagram-a04cb91d-D03_NARm.js +8 -0
  330. package/dist/dashboard/public/assets/sas-B4kiWyti.js +1 -0
  331. package/dist/dashboard/public/assets/scheme-C41bIUwD.js +1 -0
  332. package/dist/dashboard/public/assets/sequenceDiagram-c5b8d532-B65eFcaT.js +122 -0
  333. package/dist/dashboard/public/assets/shell-CjFT_Tl9.js +1 -0
  334. package/dist/dashboard/public/assets/sieve-C3Gn_uJK.js +1 -0
  335. package/dist/dashboard/public/assets/simple-mode-GW_nhZxv.js +1 -0
  336. package/dist/dashboard/public/assets/smalltalk-CnHTOXQT.js +1 -0
  337. package/dist/dashboard/public/assets/solr-DehyRSwq.js +1 -0
  338. package/dist/dashboard/public/assets/sparql-DkYu6x3z.js +1 -0
  339. package/dist/dashboard/public/assets/spreadsheet-BCZA_wO0.js +1 -0
  340. package/dist/dashboard/public/assets/sql-D0XecflT.js +1 -0
  341. package/dist/dashboard/public/assets/stateDiagram-1ecb1508-BDbqu0Vl.js +1 -0
  342. package/dist/dashboard/public/assets/stateDiagram-v2-c2b004d7-CBHvk4b8.js +1 -0
  343. package/dist/dashboard/public/assets/stex-C3f8Ysf7.js +1 -0
  344. package/dist/dashboard/public/assets/styles-b4e223ce-CELsPqaO.js +160 -0
  345. package/dist/dashboard/public/assets/styles-ca3715f6-BRqMqT6F.js +207 -0
  346. package/dist/dashboard/public/assets/styles-d45a18b0-e8N-oLPy.js +116 -0
  347. package/dist/dashboard/public/assets/stylus-B533Al4x.js +1 -0
  348. package/dist/dashboard/public/assets/svgDrawCommon-b86b1483-vNDtmQc-.js +1 -0
  349. package/dist/dashboard/public/assets/swift-BzpIVaGY.js +1 -0
  350. package/dist/dashboard/public/assets/tcl-DVfN8rqt.js +1 -0
  351. package/dist/dashboard/public/assets/textile-CnDTJFAw.js +1 -0
  352. package/dist/dashboard/public/assets/tiddlywiki-DO-Gjzrf.js +1 -0
  353. package/dist/dashboard/public/assets/tiki-DGYXhP31.js +1 -0
  354. package/dist/dashboard/public/assets/timeline-definition-faaaa080-Dh2_A5VU.js +61 -0
  355. package/dist/dashboard/public/assets/toml-Bm5Em-hy.js +1 -0
  356. package/dist/dashboard/public/assets/troff-wAsdV37c.js +1 -0
  357. package/dist/dashboard/public/assets/ttcn-CfJYG6tj.js +1 -0
  358. package/dist/dashboard/public/assets/ttcn-cfg-B9xdYoR4.js +1 -0
  359. package/dist/dashboard/public/assets/turtle-B1tBg_DP.js +1 -0
  360. package/dist/dashboard/public/assets/vb-CmGdzxic.js +1 -0
  361. package/dist/dashboard/public/assets/vbscript-BuJXcnF6.js +1 -0
  362. package/dist/dashboard/public/assets/velocity-D8B20fx6.js +1 -0
  363. package/dist/dashboard/public/assets/verilog-C6RDOZhf.js +1 -0
  364. package/dist/dashboard/public/assets/vhdl-lSbBsy5d.js +1 -0
  365. package/dist/dashboard/public/assets/webidl-ZXfAyPTL.js +1 -0
  366. package/dist/dashboard/public/assets/xquery-DzFWVndE.js +1 -0
  367. package/dist/dashboard/public/assets/xychartDiagram-f5964ef8-B76v1AVF.js +7 -0
  368. package/dist/dashboard/public/assets/yacas-BJ4BC0dw.js +1 -0
  369. package/dist/dashboard/public/assets/z80-Hz9HOZM7.js +1 -0
  370. package/dist/dashboard/public/claude-icon-dark.svg +1 -0
  371. package/dist/dashboard/public/claude-icon.svg +1 -0
  372. package/dist/dashboard/public/index.html +16 -0
  373. package/dist/dashboard/settings-manager.d.ts +47 -0
  374. package/dist/dashboard/settings-manager.d.ts.map +1 -0
  375. package/dist/dashboard/settings-manager.js +180 -0
  376. package/dist/dashboard/settings-manager.js.map +1 -0
  377. package/dist/dashboard/utils.d.ts +31 -0
  378. package/dist/dashboard/utils.d.ts.map +1 -0
  379. package/dist/dashboard/utils.js +102 -0
  380. package/dist/dashboard/utils.js.map +1 -0
  381. package/dist/dashboard/watcher.d.ts +32 -0
  382. package/dist/dashboard/watcher.d.ts.map +1 -0
  383. package/dist/dashboard/watcher.js +173 -0
  384. package/dist/dashboard/watcher.js.map +1 -0
  385. package/dist/index.d.ts +13 -0
  386. package/dist/index.d.ts.map +1 -0
  387. package/dist/index.js +380 -0
  388. package/dist/index.js.map +1 -0
  389. package/dist/markdown/templates/design-template.md +126 -0
  390. package/dist/markdown/templates/product-template.md +51 -0
  391. package/dist/markdown/templates/requirements-template.md +50 -0
  392. package/dist/markdown/templates/structure-template.md +145 -0
  393. package/dist/markdown/templates/tasks-template.md +100 -0
  394. package/dist/markdown/templates/tech-template.md +99 -0
  395. package/dist/markdown/templates/test-design-template.md +221 -0
  396. package/dist/prompts/create-spec.d.ts +3 -0
  397. package/dist/prompts/create-spec.d.ts.map +1 -0
  398. package/dist/prompts/create-spec.js +97 -0
  399. package/dist/prompts/create-spec.js.map +1 -0
  400. package/dist/prompts/create-steering-doc.d.ts +3 -0
  401. package/dist/prompts/create-steering-doc.d.ts.map +1 -0
  402. package/dist/prompts/create-steering-doc.js +75 -0
  403. package/dist/prompts/create-steering-doc.js.map +1 -0
  404. package/dist/prompts/implement-task.d.ts +3 -0
  405. package/dist/prompts/implement-task.d.ts.map +1 -0
  406. package/dist/prompts/implement-task.js +174 -0
  407. package/dist/prompts/implement-task.js.map +1 -0
  408. package/dist/prompts/index.d.ts +20 -0
  409. package/dist/prompts/index.d.ts.map +1 -0
  410. package/dist/prompts/index.js +103 -0
  411. package/dist/prompts/index.js.map +1 -0
  412. package/dist/prompts/inject-spec-workflow-guide.d.ts +3 -0
  413. package/dist/prompts/inject-spec-workflow-guide.d.ts.map +1 -0
  414. package/dist/prompts/inject-spec-workflow-guide.js +60 -0
  415. package/dist/prompts/inject-spec-workflow-guide.js.map +1 -0
  416. package/dist/prompts/inject-steering-guide.d.ts +3 -0
  417. package/dist/prompts/inject-steering-guide.d.ts.map +1 -0
  418. package/dist/prompts/inject-steering-guide.js +64 -0
  419. package/dist/prompts/inject-steering-guide.js.map +1 -0
  420. package/dist/prompts/refresh-tasks.d.ts +3 -0
  421. package/dist/prompts/refresh-tasks.d.ts.map +1 -0
  422. package/dist/prompts/refresh-tasks.js +237 -0
  423. package/dist/prompts/refresh-tasks.js.map +1 -0
  424. package/dist/prompts/spec-status.d.ts +3 -0
  425. package/dist/prompts/spec-status.d.ts.map +1 -0
  426. package/dist/prompts/spec-status.js +77 -0
  427. package/dist/prompts/spec-status.js.map +1 -0
  428. package/dist/prompts/types.d.ts +13 -0
  429. package/dist/prompts/types.d.ts.map +1 -0
  430. package/dist/prompts/types.js +2 -0
  431. package/dist/prompts/types.js.map +1 -0
  432. package/dist/server.d.ts +17 -0
  433. package/dist/server.d.ts.map +1 -0
  434. package/dist/server.js +175 -0
  435. package/dist/server.js.map +1 -0
  436. package/dist/tools/__tests__/log-implementation-review-process.test.d.ts +2 -0
  437. package/dist/tools/__tests__/log-implementation-review-process.test.d.ts.map +1 -0
  438. package/dist/tools/__tests__/log-implementation-review-process.test.js +190 -0
  439. package/dist/tools/__tests__/log-implementation-review-process.test.js.map +1 -0
  440. package/dist/tools/__tests__/projectPath.test.d.ts +2 -0
  441. package/dist/tools/__tests__/projectPath.test.d.ts.map +1 -0
  442. package/dist/tools/__tests__/projectPath.test.js +187 -0
  443. package/dist/tools/__tests__/projectPath.test.js.map +1 -0
  444. package/dist/tools/approvals.d.ts +14 -0
  445. package/dist/tools/approvals.d.ts.map +1 -0
  446. package/dist/tools/approvals.js +505 -0
  447. package/dist/tools/approvals.js.map +1 -0
  448. package/dist/tools/index.d.ts +5 -0
  449. package/dist/tools/index.d.ts.map +1 -0
  450. package/dist/tools/index.js +52 -0
  451. package/dist/tools/index.js.map +1 -0
  452. package/dist/tools/log-implementation.d.ts +5 -0
  453. package/dist/tools/log-implementation.d.ts.map +1 -0
  454. package/dist/tools/log-implementation.js +498 -0
  455. package/dist/tools/log-implementation.js.map +1 -0
  456. package/dist/tools/spec-status.d.ts +5 -0
  457. package/dist/tools/spec-status.d.ts.map +1 -0
  458. package/dist/tools/spec-status.js +192 -0
  459. package/dist/tools/spec-status.js.map +1 -0
  460. package/dist/tools/spec-workflow-guide.d.ts +5 -0
  461. package/dist/tools/spec-workflow-guide.d.ts.map +1 -0
  462. package/dist/tools/spec-workflow-guide.js +116 -0
  463. package/dist/tools/spec-workflow-guide.js.map +1 -0
  464. package/dist/tools/steering-guide.d.ts +5 -0
  465. package/dist/tools/steering-guide.d.ts.map +1 -0
  466. package/dist/tools/steering-guide.js +192 -0
  467. package/dist/tools/steering-guide.js.map +1 -0
  468. package/dist/types.d.ts +183 -0
  469. package/dist/types.d.ts.map +1 -0
  470. package/dist/types.js +13 -0
  471. package/dist/types.js.map +1 -0
  472. package/package.json +106 -0
package/dist/index.js ADDED
@@ -0,0 +1,380 @@
1
+ #!/usr/bin/env node
2
+ import { SpecWorkflowMCPServer } from './server.js';
3
+ import { MultiProjectDashboardServer } from './dashboard/multi-server.js';
4
+ import { DashboardSessionManager } from './core/dashboard-session.js';
5
+ import { homedir } from 'os';
6
+ import { resolveGitRoot, resolveGitWorkspaceRoot } from './core/git-utils.js';
7
+ import { resolve } from 'path';
8
+ import { fileURLToPath } from 'url';
9
+ import { realpathSync } from 'fs';
10
+ // Default dashboard port
11
+ const DEFAULT_DASHBOARD_PORT = 5000;
12
+ function showHelp() {
13
+ console.error(`
14
+ Spec Workflow MCP Server - A Model Context Protocol server for spec-driven development
15
+
16
+ USAGE:
17
+ spec-workflow-mcp [path] [options]
18
+
19
+ ARGUMENTS:
20
+ path Project path (defaults to current directory)
21
+ Supports ~ for home directory
22
+
23
+ OPTIONS:
24
+ --help Show this help message
25
+ --dashboard Run dashboard-only mode (no MCP server)
26
+ --port <number> Specify dashboard port (1024-65535)
27
+ Default: 5000
28
+ Only use if port 5000 is unavailable
29
+ --no-open Don't automatically open browser when starting dashboard
30
+ Useful in restricted environments where browser launch is blocked
31
+ --no-shared-worktree-specs
32
+ Disable shared .spec-workflow in git worktrees
33
+ Use workspace-local .spec-workflow instead of main repo
34
+
35
+ IMPORTANT:
36
+ Only ONE dashboard instance runs at a time. All MCP servers connect to the
37
+ same dashboard. The dashboard runs on port 5000 by default.
38
+
39
+ MODES OF OPERATION:
40
+
41
+ 1. MCP Server Only (default):
42
+ spec-workflow-mcp
43
+ spec-workflow-mcp ~/my-project
44
+
45
+ Starts MCP server without dashboard. Dashboard can be started separately.
46
+
47
+ 2. Dashboard Only Mode:
48
+ spec-workflow-mcp --dashboard
49
+ spec-workflow-mcp --dashboard --port 8080
50
+ spec-workflow-mcp --dashboard --no-open
51
+
52
+ Runs only the web dashboard without MCP server (default port: 5000).
53
+ Projects will automatically appear in the dashboard as MCP servers register.
54
+ Only one dashboard instance is needed for all your projects.
55
+ Use --no-open to prevent automatic browser launch (useful in restricted environments).
56
+
57
+ EXAMPLES:
58
+ # Start MCP server in current directory (no dashboard)
59
+ spec-workflow-mcp
60
+
61
+ # Start MCP server in a specific project directory
62
+ spec-workflow-mcp ~/projects/my-app
63
+
64
+ # Run dashboard (default port 5000) - START THIS FIRST
65
+ spec-workflow-mcp --dashboard
66
+
67
+ # Run dashboard on custom port (if 5000 is unavailable)
68
+ spec-workflow-mcp --dashboard --port 8080
69
+
70
+ TYPICAL WORKFLOW:
71
+ 1. Start the dashboard once:
72
+ spec-workflow-mcp --dashboard
73
+
74
+ 2. Start MCP servers for your projects (in separate terminals):
75
+ spec-workflow-mcp ~/project1
76
+ spec-workflow-mcp ~/project2
77
+ spec-workflow-mcp ~/project3
78
+
79
+ All projects will appear in the same dashboard at http://localhost:5000
80
+
81
+ PARAMETER FORMATS:
82
+ --port 3456 Space-separated format
83
+ --port=3456 Equals format
84
+
85
+ For more information, visit: https://github.com/arimakouyou/spec-workflow-mcp
86
+ `);
87
+ }
88
+ function expandTildePath(path) {
89
+ if (path.startsWith('~/') || path === '~') {
90
+ return path.replace('~', homedir());
91
+ }
92
+ return path;
93
+ }
94
+ export function parseArguments(args) {
95
+ const isDashboardMode = args.includes('--dashboard');
96
+ const noOpen = args.includes('--no-open');
97
+ const noSharedWorktreeSpecs = args.includes('--no-shared-worktree-specs');
98
+ let customPort;
99
+ // Check for invalid flags
100
+ const validFlags = ['--dashboard', '--port', '--help', '-h', '--no-open', '--no-shared-worktree-specs'];
101
+ for (const arg of args) {
102
+ if (arg.startsWith('--') && !arg.includes('=')) {
103
+ if (!validFlags.includes(arg)) {
104
+ throw new Error(`Unknown option: ${arg}\nUse --help to see available options.`);
105
+ }
106
+ }
107
+ else if (arg.startsWith('--') && arg.includes('=')) {
108
+ const flagName = arg.split('=')[0];
109
+ if (!validFlags.includes(flagName)) {
110
+ throw new Error(`Unknown option: ${flagName}\nUse --help to see available options.`);
111
+ }
112
+ }
113
+ }
114
+ // Parse --port parameter (supports --port 3000 and --port=3000 formats)
115
+ for (let i = 0; i < args.length; i++) {
116
+ const arg = args[i];
117
+ if (arg.startsWith('--port=')) {
118
+ // Handle --port=3000 format
119
+ const portStr = arg.split('=')[1];
120
+ if (portStr) {
121
+ const parsed = parseInt(portStr, 10);
122
+ if (isNaN(parsed)) {
123
+ throw new Error(`Invalid port number: ${portStr}. Port must be a number.`);
124
+ }
125
+ if (parsed < 1024 || parsed > 65535) {
126
+ throw new Error(`Port ${parsed} is out of range. Port must be between 1024 and 65535.`);
127
+ }
128
+ customPort = parsed;
129
+ }
130
+ else {
131
+ throw new Error('--port parameter requires a value (e.g., --port=3000)');
132
+ }
133
+ }
134
+ else if (arg === '--port' && i + 1 < args.length) {
135
+ // Handle --port 3000 format
136
+ const portStr = args[i + 1];
137
+ const parsed = parseInt(portStr, 10);
138
+ if (isNaN(parsed)) {
139
+ throw new Error(`Invalid port number: ${portStr}. Port must be a number.`);
140
+ }
141
+ if (parsed < 1024 || parsed > 65535) {
142
+ throw new Error(`Port ${parsed} is out of range. Port must be between 1024 and 65535.`);
143
+ }
144
+ customPort = parsed;
145
+ i++; // Skip the next argument as it's the port value
146
+ }
147
+ else if (arg === '--port') {
148
+ throw new Error('--port parameter requires a value (e.g., --port 3000)');
149
+ }
150
+ }
151
+ // Get project path (filter out flags and their values)
152
+ const filteredArgs = args.filter((arg, index) => {
153
+ if (arg === '--dashboard')
154
+ return false;
155
+ if (arg.startsWith('--port='))
156
+ return false;
157
+ if (arg === '--port')
158
+ return false;
159
+ if (arg === '--no-open')
160
+ return false;
161
+ if (arg === '--no-shared-worktree-specs')
162
+ return false;
163
+ // Check if this arg is a value following --port
164
+ if (index > 0 && args[index - 1] === '--port')
165
+ return false;
166
+ return true;
167
+ });
168
+ // For dashboard-only mode, use cwd as default (dashboard doesn't need it)
169
+ const rawProjectPath = filteredArgs[0] || process.cwd();
170
+ const expandedPath = expandTildePath(rawProjectPath);
171
+ const workspacePath = resolveGitWorkspaceRoot(expandedPath);
172
+ const workflowRootPath = noSharedWorktreeSpecs ? workspacePath : resolveGitRoot(workspacePath);
173
+ // Warn if no explicit path was provided and we're using cwd (but only for MCP server mode)
174
+ if (!filteredArgs[0] && !isDashboardMode) {
175
+ console.warn(`Warning: No project path specified, using current directory: ${workspacePath}`);
176
+ console.warn('Consider specifying an explicit path for better clarity.');
177
+ }
178
+ return {
179
+ workspacePath,
180
+ workflowRootPath,
181
+ expandedPath,
182
+ isDashboardMode,
183
+ noSharedWorktreeSpecs,
184
+ port: customPort,
185
+ lang: undefined,
186
+ noOpen
187
+ };
188
+ }
189
+ async function main() {
190
+ try {
191
+ const args = process.argv.slice(2);
192
+ // Check for help flag
193
+ if (args.includes('--help') || args.includes('-h')) {
194
+ showHelp();
195
+ process.exit(0);
196
+ }
197
+ // Parse command-line arguments
198
+ const cliArgs = parseArguments(args);
199
+ const workspacePath = cliArgs.workspacePath;
200
+ const workflowRootPath = cliArgs.workflowRootPath;
201
+ const noSharedWorktreeSpecs = cliArgs.noSharedWorktreeSpecs;
202
+ // Log worktree details when workspace and shared workflow roots differ
203
+ if (workspacePath !== workflowRootPath) {
204
+ console.error('Git worktree detected.');
205
+ console.error(`workspacePath=${workspacePath}`);
206
+ console.error(`workflowRootPath=${workflowRootPath}`);
207
+ }
208
+ else if (noSharedWorktreeSpecs) {
209
+ console.error('Shared worktree specs disabled. Using workspace-local .spec-workflow.');
210
+ console.error(`workspacePath=${workspacePath}`);
211
+ }
212
+ // Apply configuration from CLI args
213
+ const isDashboardMode = cliArgs.isDashboardMode || false;
214
+ const port = cliArgs.port;
215
+ const lang = cliArgs.lang;
216
+ const noOpen = cliArgs.noOpen || false;
217
+ if (isDashboardMode) {
218
+ // Check if a dashboard is already running (always check, regardless of port)
219
+ const sessionManager = new DashboardSessionManager();
220
+ const existingSession = await sessionManager.getDashboardSession();
221
+ if (existingSession) {
222
+ console.error(`Dashboard is already running at: ${existingSession.url}`);
223
+ console.error('');
224
+ console.error('You can:');
225
+ console.error(` 1. Use the existing dashboard at: ${existingSession.url}`);
226
+ console.error(` 2. Stop it first (Ctrl+C or kill ${existingSession.pid}), then start a new one`);
227
+ console.error('');
228
+ console.error('Note: Only one dashboard instance is needed for all your projects.');
229
+ process.exit(1);
230
+ }
231
+ // Use specified port or default
232
+ const dashboardPort = port || DEFAULT_DASHBOARD_PORT;
233
+ // Dashboard only mode - use new multi-project dashboard
234
+ console.error(`Starting Unified Multi-Project Dashboard`);
235
+ if (port) {
236
+ console.error(`Using custom port: ${port}`);
237
+ }
238
+ else {
239
+ console.error(`Using default port: ${DEFAULT_DASHBOARD_PORT}`);
240
+ }
241
+ if (noOpen) {
242
+ console.error(`Browser auto-open disabled (--no-open)`);
243
+ }
244
+ // Load configuration from environment variables
245
+ let bindAddress;
246
+ let allowExternalAccess;
247
+ const securityConfig = {};
248
+ // Network binding configuration
249
+ if (process.env.SPEC_WORKFLOW_BIND_ADDRESS) {
250
+ bindAddress = process.env.SPEC_WORKFLOW_BIND_ADDRESS;
251
+ }
252
+ // External access opt-in (only override if explicitly set to true or false)
253
+ if (process.env.SPEC_WORKFLOW_ALLOW_EXTERNAL_ACCESS !== undefined) {
254
+ const allowExternal = process.env.SPEC_WORKFLOW_ALLOW_EXTERNAL_ACCESS.toLowerCase();
255
+ if (allowExternal === 'true') {
256
+ allowExternalAccess = true;
257
+ }
258
+ else if (allowExternal === 'false') {
259
+ allowExternalAccess = false;
260
+ }
261
+ // If invalid value, ignore and use default
262
+ }
263
+ // Security features configuration
264
+ // Rate limiting toggle (only override if explicitly set to true or false)
265
+ if (process.env.SPEC_WORKFLOW_RATE_LIMIT_ENABLED !== undefined) {
266
+ const rateLimitEnabled = process.env.SPEC_WORKFLOW_RATE_LIMIT_ENABLED.toLowerCase();
267
+ if (rateLimitEnabled === 'true') {
268
+ securityConfig.rateLimitEnabled = true;
269
+ }
270
+ else if (rateLimitEnabled === 'false') {
271
+ securityConfig.rateLimitEnabled = false;
272
+ }
273
+ // If invalid value, ignore and use default
274
+ }
275
+ // CORS toggle (only override if explicitly set to true or false)
276
+ if (process.env.SPEC_WORKFLOW_CORS_ENABLED !== undefined) {
277
+ const corsEnabled = process.env.SPEC_WORKFLOW_CORS_ENABLED.toLowerCase();
278
+ if (corsEnabled === 'true') {
279
+ securityConfig.corsEnabled = true;
280
+ }
281
+ else if (corsEnabled === 'false') {
282
+ securityConfig.corsEnabled = false;
283
+ }
284
+ // If invalid value, ignore and use default
285
+ }
286
+ // Create dashboard server (network binding validation happens in constructor)
287
+ let dashboardServer;
288
+ try {
289
+ dashboardServer = new MultiProjectDashboardServer({
290
+ autoOpen: !noOpen,
291
+ port: dashboardPort,
292
+ bindAddress,
293
+ allowExternalAccess,
294
+ security: securityConfig
295
+ });
296
+ }
297
+ catch (error) {
298
+ // Provide user-friendly error message with environment variable names
299
+ if (error.message.includes('SECURITY ERROR') || error.message.includes('non-localhost')) {
300
+ console.error('');
301
+ console.error('❌ Security Configuration Error:');
302
+ console.error(error.message);
303
+ console.error('');
304
+ console.error('To fix this, either:');
305
+ console.error(' 1. Use localhost binding (secure):');
306
+ console.error(' export SPEC_WORKFLOW_BIND_ADDRESS=127.0.0.1');
307
+ console.error('');
308
+ console.error(' 2. Explicitly allow external access (insecure):');
309
+ console.error(' export SPEC_WORKFLOW_ALLOW_EXTERNAL_ACCESS=true');
310
+ console.error('');
311
+ process.exit(1);
312
+ }
313
+ throw error; // Re-throw other errors
314
+ }
315
+ try {
316
+ const dashboardUrl = await dashboardServer.start();
317
+ console.error(`Dashboard started at: ${dashboardUrl}`);
318
+ console.error('Projects will automatically appear as MCP servers register.');
319
+ console.error('Press Ctrl+C to stop the dashboard');
320
+ }
321
+ catch (error) {
322
+ console.error(`Failed to start dashboard: ${error.message}`);
323
+ process.exit(1);
324
+ }
325
+ // Handle graceful shutdown
326
+ const shutdown = async () => {
327
+ console.error('\nShutting down dashboard...');
328
+ await dashboardServer.stop();
329
+ process.exit(0);
330
+ };
331
+ process.on('SIGINT', shutdown);
332
+ process.on('SIGTERM', shutdown);
333
+ }
334
+ else {
335
+ // MCP server mode
336
+ console.error(`Starting Spec Workflow MCP Server for project: ${workflowRootPath}`);
337
+ console.error(`Workspace path: ${workspacePath}`);
338
+ console.error(`Working directory: ${process.cwd()}`);
339
+ const server = new SpecWorkflowMCPServer();
340
+ await server.initialize(workflowRootPath, workspacePath, lang);
341
+ // Handle graceful shutdown
342
+ process.on('SIGINT', async () => {
343
+ await server.stop();
344
+ process.exit(0);
345
+ });
346
+ process.on('SIGTERM', async () => {
347
+ await server.stop();
348
+ process.exit(0);
349
+ });
350
+ }
351
+ }
352
+ catch (error) {
353
+ console.error('Error:', error.message);
354
+ // Provide additional context for common path-related issues
355
+ if (error.message.includes('ENOENT') || error.message.includes('path') || error.message.includes('directory')) {
356
+ console.error('\nProject path troubleshooting:');
357
+ console.error('- Verify the project path exists and is accessible');
358
+ console.error('- For Claude CLI users, ensure you used: claude mcp add spec-workflow npx -y @arimakouyou/spec-workflow-mcp@latest -- /path/to/your/project');
359
+ console.error('- Check that the path doesn\'t contain special characters that need escaping');
360
+ console.error(`- Current working directory: ${process.cwd()}`);
361
+ }
362
+ process.exit(1);
363
+ }
364
+ }
365
+ export function resolveEntrypoint(pathValue) {
366
+ if (!pathValue)
367
+ return undefined;
368
+ try {
369
+ return realpathSync(pathValue);
370
+ }
371
+ catch {
372
+ return resolve(pathValue);
373
+ }
374
+ }
375
+ const entrypoint = resolveEntrypoint(process.argv[1]);
376
+ const currentFile = resolveEntrypoint(fileURLToPath(import.meta.url));
377
+ if (entrypoint && currentFile && currentFile === entrypoint) {
378
+ main().catch(() => process.exit(1));
379
+ }
380
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,126 @@
1
+ # Design Document
2
+
3
+ ## Overview
4
+
5
+ [High-level description of the feature and its place in the overall system]
6
+
7
+ ## Steering Document Alignment
8
+
9
+ ### Technical Standards (tech.md)
10
+ [How the design follows documented technical patterns and standards]
11
+
12
+ ### Project Structure (structure.md)
13
+ [How the implementation will follow project organization conventions]
14
+
15
+ ## Code Reuse Analysis
16
+ [What existing code will be leveraged, extended, or integrated with this feature]
17
+
18
+ ### Existing Components to Leverage
19
+ - **[Component/Utility Name]**: [How it will be used]
20
+ - **[Service/Helper Name]**: [How it will be extended]
21
+
22
+ ### Integration Points
23
+ - **[Existing System/API]**: [How the new feature will integrate]
24
+ - **[Database/Storage]**: [How data will connect to existing schemas]
25
+
26
+ ## Architecture
27
+
28
+ [Describe the overall architecture and design patterns used]
29
+
30
+ ### Modular Design Principles
31
+ - **Single File Responsibility**: Each file should handle one specific concern or domain
32
+ - **Component Isolation**: Create small, focused components rather than large monolithic files
33
+ - **Service Layer Separation**: Separate data access, business logic, and presentation layers
34
+ - **Utility Modularity**: Break utilities into focused, single-purpose modules
35
+
36
+ ```mermaid
37
+ graph TD
38
+ A[Component A] --> B[Component B]
39
+ B --> C[Component C]
40
+ ```
41
+
42
+ ## Components and Interfaces
43
+
44
+ ### Component 1
45
+ - **Purpose:** [What this component does]
46
+ - **Interfaces:** [Public methods/APIs]
47
+ - **Dependencies:** [What it depends on]
48
+ - **Reuses:** [Existing components/utilities it builds upon]
49
+
50
+ ### Component 2
51
+ - **Purpose:** [What this component does]
52
+ - **Interfaces:** [Public methods/APIs]
53
+ - **Dependencies:** [What it depends on]
54
+ - **Reuses:** [Existing components/utilities it builds upon]
55
+
56
+ ## Data Models
57
+
58
+ ### Model 1
59
+ ```
60
+ [Define the structure of Model1 in your language]
61
+ - id: [unique identifier type]
62
+ - name: [string/text type]
63
+ - [Additional properties as needed]
64
+ ```
65
+
66
+ ### Model 2
67
+ ```
68
+ [Define the structure of Model2 in your language]
69
+ - id: [unique identifier type]
70
+ - [Additional properties as needed]
71
+ ```
72
+
73
+ ## Error Handling
74
+
75
+ ### Error Scenarios
76
+ 1. **Scenario 1:** [Description]
77
+ - **Handling:** [How to handle]
78
+ - **User Impact:** [What user sees]
79
+
80
+ 2. **Scenario 2:** [Description]
81
+ - **Handling:** [How to handle]
82
+ - **User Impact:** [What user sees]
83
+
84
+ ## Container Architecture
85
+
86
+ ### Application Container
87
+ - **Base Image:** [例: rust:1.82-slim, node:22-alpine]
88
+ - **Build Strategy:** [multi-stage build / single stage]
89
+ - **Exposed Ports:** [例: 3000 (API), 3001 (frontend)]
90
+
91
+ ### Service Dependencies
92
+
93
+ | Service | Image | Port | Purpose |
94
+ |---------|-------|------|---------|
95
+ | [DB] | [例: postgres:16-alpine] | [例: 5432] | [Primary database] |
96
+ | [Cache] | [例: valkey/valkey:8-alpine] | [例: 6379] | [Cache/Session] |
97
+
98
+ ### docker-compose Structure
99
+ [開発用 docker-compose.yml の構成概要。サービス間のネットワーク、ボリューム、環境変数]
100
+
101
+ ### Test Container Strategy
102
+
103
+ | Service | Strategy | Notes |
104
+ |---------|----------|-------|
105
+ | DB | testcontainers / docker-compose.test.yml | テストごとにクリーンな DB |
106
+ | Cache | testcontainers / in-memory stub | |
107
+ | External API | mock server container / trait DI | |
108
+
109
+ ---
110
+
111
+ ## Testing Strategy
112
+
113
+ > 詳細なテスト仕様(テストケースレベル)は test-design.md に定義する。
114
+ > このセクションはテスト戦略の概要のみを記載する。
115
+
116
+ ### Unit Testing
117
+ - [ユニットテスト方針の概要]
118
+ - [テスト対象の主要コンポーネント]
119
+
120
+ ### Integration Testing
121
+ - [統合テスト方針の概要]
122
+ - [テスト対象の主要フロー]
123
+
124
+ ### End-to-End Testing
125
+ - [E2Eテスト方針の概要]
126
+ - [テスト対象のユーザーシナリオ]
@@ -0,0 +1,51 @@
1
+ # Product Overview
2
+
3
+ ## Product Purpose
4
+ [Describe the core purpose of this product/project. What problem does it solve?]
5
+
6
+ ## Target Users
7
+ [Who are the primary users of this product? What are their needs and pain points?]
8
+
9
+ ## Key Features
10
+ [List the main features that deliver value to users]
11
+
12
+ 1. **Feature 1**: [Description]
13
+ 2. **Feature 2**: [Description]
14
+ 3. **Feature 3**: [Description]
15
+
16
+ ## Business Objectives
17
+ [What are the business goals this product aims to achieve?]
18
+
19
+ - [Objective 1]
20
+ - [Objective 2]
21
+ - [Objective 3]
22
+
23
+ ## Success Metrics
24
+ [How will we measure the success of this product?]
25
+
26
+ - [Metric 1]: [Target]
27
+ - [Metric 2]: [Target]
28
+ - [Metric 3]: [Target]
29
+
30
+ ## Product Principles
31
+ [Core principles that guide product decisions]
32
+
33
+ 1. **[Principle 1]**: [Explanation]
34
+ 2. **[Principle 2]**: [Explanation]
35
+ 3. **[Principle 3]**: [Explanation]
36
+
37
+ ## Monitoring & Visibility (if applicable)
38
+ [How do users track progress and monitor the system?]
39
+
40
+ - **Dashboard Type**: [e.g., Web-based, CLI, Desktop app]
41
+ - **Real-time Updates**: [e.g., WebSocket, polling, push notifications]
42
+ - **Key Metrics Displayed**: [What information is most important to surface]
43
+ - **Sharing Capabilities**: [e.g., read-only links, exports, reports]
44
+
45
+ ## Future Vision
46
+ [Where do we see this product evolving in the future?]
47
+
48
+ ### Potential Enhancements
49
+ - **Remote Access**: [e.g., Tunnel features for sharing dashboards with stakeholders]
50
+ - **Analytics**: [e.g., Historical trends, performance metrics]
51
+ - **Collaboration**: [e.g., Multi-user support, commenting]
@@ -0,0 +1,50 @@
1
+ # Requirements Document
2
+
3
+ ## Introduction
4
+
5
+ [Provide a brief overview of the feature, its purpose, and its value to users]
6
+
7
+ ## Alignment with Product Vision
8
+
9
+ [Explain how this feature supports the goals outlined in product.md]
10
+
11
+ ## Requirements
12
+
13
+ ### Requirement 1
14
+
15
+ **User Story:** As a [role], I want [feature], so that [benefit]
16
+
17
+ #### Acceptance Criteria
18
+
19
+ 1. WHEN [event] THEN [system] SHALL [response]
20
+ 2. IF [precondition] THEN [system] SHALL [response]
21
+ 3. WHEN [event] AND [condition] THEN [system] SHALL [response]
22
+
23
+ ### Requirement 2
24
+
25
+ **User Story:** As a [role], I want [feature], so that [benefit]
26
+
27
+ #### Acceptance Criteria
28
+
29
+ 1. WHEN [event] THEN [system] SHALL [response]
30
+ 2. IF [precondition] THEN [system] SHALL [response]
31
+
32
+ ## Non-Functional Requirements
33
+
34
+ ### Code Architecture and Modularity
35
+ - **Single Responsibility Principle**: Each file should have a single, well-defined purpose
36
+ - **Modular Design**: Components, utilities, and services should be isolated and reusable
37
+ - **Dependency Management**: Minimize interdependencies between modules
38
+ - **Clear Interfaces**: Define clean contracts between components and layers
39
+
40
+ ### Performance
41
+ - [Performance requirements]
42
+
43
+ ### Security
44
+ - [Security requirements]
45
+
46
+ ### Reliability
47
+ - [Reliability requirements]
48
+
49
+ ### Usability
50
+ - [Usability requirements]