@madmatt112org/spec-workflow-mcp 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (537) hide show
  1. package/CHANGELOG.md +1013 -0
  2. package/LICENSE +674 -0
  3. package/README.md +458 -0
  4. package/dist/__tests__/config.test.d.ts +2 -0
  5. package/dist/__tests__/config.test.d.ts.map +1 -0
  6. package/dist/__tests__/config.test.js +264 -0
  7. package/dist/__tests__/config.test.js.map +1 -0
  8. package/dist/__tests__/index-args.test.d.ts +2 -0
  9. package/dist/__tests__/index-args.test.d.ts.map +1 -0
  10. package/dist/__tests__/index-args.test.js +43 -0
  11. package/dist/__tests__/index-args.test.js.map +1 -0
  12. package/dist/__tests__/index-entrypoint.test.d.ts +2 -0
  13. package/dist/__tests__/index-entrypoint.test.d.ts.map +1 -0
  14. package/dist/__tests__/index-entrypoint.test.js +23 -0
  15. package/dist/__tests__/index-entrypoint.test.js.map +1 -0
  16. package/dist/config.d.ts +26 -0
  17. package/dist/config.d.ts.map +1 -0
  18. package/dist/config.js +188 -0
  19. package/dist/config.js.map +1 -0
  20. package/dist/core/__tests__/adversarial-settings.test.d.ts +2 -0
  21. package/dist/core/__tests__/adversarial-settings.test.d.ts.map +1 -0
  22. package/dist/core/__tests__/adversarial-settings.test.js +361 -0
  23. package/dist/core/__tests__/adversarial-settings.test.js.map +1 -0
  24. package/dist/core/__tests__/deferral-storage.test.d.ts +2 -0
  25. package/dist/core/__tests__/deferral-storage.test.d.ts.map +1 -0
  26. package/dist/core/__tests__/deferral-storage.test.js +181 -0
  27. package/dist/core/__tests__/deferral-storage.test.js.map +1 -0
  28. package/dist/core/__tests__/git-utils.test.d.ts +2 -0
  29. package/dist/core/__tests__/git-utils.test.d.ts.map +1 -0
  30. package/dist/core/__tests__/git-utils.test.js +179 -0
  31. package/dist/core/__tests__/git-utils.test.js.map +1 -0
  32. package/dist/core/__tests__/hygiene-signals.test.d.ts +2 -0
  33. package/dist/core/__tests__/hygiene-signals.test.d.ts.map +1 -0
  34. package/dist/core/__tests__/hygiene-signals.test.js +200 -0
  35. package/dist/core/__tests__/hygiene-signals.test.js.map +1 -0
  36. package/dist/core/__tests__/mdx-validator.test.d.ts +2 -0
  37. package/dist/core/__tests__/mdx-validator.test.d.ts.map +1 -0
  38. package/dist/core/__tests__/mdx-validator.test.js +42 -0
  39. package/dist/core/__tests__/mdx-validator.test.js.map +1 -0
  40. package/dist/core/__tests__/path-denylist.test.d.ts +2 -0
  41. package/dist/core/__tests__/path-denylist.test.d.ts.map +1 -0
  42. package/dist/core/__tests__/path-denylist.test.js +242 -0
  43. package/dist/core/__tests__/path-denylist.test.js.map +1 -0
  44. package/dist/core/__tests__/path-utils.test.d.ts +2 -0
  45. package/dist/core/__tests__/path-utils.test.d.ts.map +1 -0
  46. package/dist/core/__tests__/path-utils.test.js +342 -0
  47. package/dist/core/__tests__/path-utils.test.js.map +1 -0
  48. package/dist/core/__tests__/project-registry.test.d.ts +2 -0
  49. package/dist/core/__tests__/project-registry.test.d.ts.map +1 -0
  50. package/dist/core/__tests__/project-registry.test.js +62 -0
  51. package/dist/core/__tests__/project-registry.test.js.map +1 -0
  52. package/dist/core/__tests__/security-utils.test.d.ts +2 -0
  53. package/dist/core/__tests__/security-utils.test.d.ts.map +1 -0
  54. package/dist/core/__tests__/security-utils.test.js +643 -0
  55. package/dist/core/__tests__/security-utils.test.js.map +1 -0
  56. package/dist/core/__tests__/task-diff.test.d.ts +2 -0
  57. package/dist/core/__tests__/task-diff.test.d.ts.map +1 -0
  58. package/dist/core/__tests__/task-diff.test.js +287 -0
  59. package/dist/core/__tests__/task-diff.test.js.map +1 -0
  60. package/dist/core/__tests__/task-review-manager.test.d.ts +2 -0
  61. package/dist/core/__tests__/task-review-manager.test.d.ts.map +1 -0
  62. package/dist/core/__tests__/task-review-manager.test.js +235 -0
  63. package/dist/core/__tests__/task-review-manager.test.js.map +1 -0
  64. package/dist/core/__tests__/task-validator.test.d.ts +2 -0
  65. package/dist/core/__tests__/task-validator.test.d.ts.map +1 -0
  66. package/dist/core/__tests__/task-validator.test.js +237 -0
  67. package/dist/core/__tests__/task-validator.test.js.map +1 -0
  68. package/dist/core/__tests__/typecheck.test.d.ts +2 -0
  69. package/dist/core/__tests__/typecheck.test.d.ts.map +1 -0
  70. package/dist/core/__tests__/typecheck.test.js +558 -0
  71. package/dist/core/__tests__/typecheck.test.js.map +1 -0
  72. package/dist/core/adversarial-settings.d.ts +23 -0
  73. package/dist/core/adversarial-settings.d.ts.map +1 -0
  74. package/dist/core/adversarial-settings.js +148 -0
  75. package/dist/core/adversarial-settings.js.map +1 -0
  76. package/dist/core/archive-service.d.ts +10 -0
  77. package/dist/core/archive-service.d.ts.map +1 -0
  78. package/dist/core/archive-service.js +99 -0
  79. package/dist/core/archive-service.js.map +1 -0
  80. package/dist/core/dashboard-session.d.ts +49 -0
  81. package/dist/core/dashboard-session.d.ts.map +1 -0
  82. package/dist/core/dashboard-session.js +132 -0
  83. package/dist/core/dashboard-session.js.map +1 -0
  84. package/dist/core/deferral-storage.d.ts +32 -0
  85. package/dist/core/deferral-storage.d.ts.map +1 -0
  86. package/dist/core/deferral-storage.js +232 -0
  87. package/dist/core/deferral-storage.js.map +1 -0
  88. package/dist/core/git-utils.d.ts +25 -0
  89. package/dist/core/git-utils.d.ts.map +1 -0
  90. package/dist/core/git-utils.js +87 -0
  91. package/dist/core/git-utils.js.map +1 -0
  92. package/dist/core/global-dir.d.ts +44 -0
  93. package/dist/core/global-dir.d.ts.map +1 -0
  94. package/dist/core/global-dir.js +74 -0
  95. package/dist/core/global-dir.js.map +1 -0
  96. package/dist/core/hygiene-signals.d.ts +8 -0
  97. package/dist/core/hygiene-signals.d.ts.map +1 -0
  98. package/dist/core/hygiene-signals.js +41 -0
  99. package/dist/core/hygiene-signals.js.map +1 -0
  100. package/dist/core/implementation-log-migrator.d.ts +41 -0
  101. package/dist/core/implementation-log-migrator.d.ts.map +1 -0
  102. package/dist/core/implementation-log-migrator.js +258 -0
  103. package/dist/core/implementation-log-migrator.js.map +1 -0
  104. package/dist/core/mdx-validator.d.ts +14 -0
  105. package/dist/core/mdx-validator.d.ts.map +1 -0
  106. package/dist/core/mdx-validator.js +34 -0
  107. package/dist/core/mdx-validator.js.map +1 -0
  108. package/dist/core/parser.d.ts +11 -0
  109. package/dist/core/parser.d.ts.map +1 -0
  110. package/dist/core/parser.js +126 -0
  111. package/dist/core/parser.js.map +1 -0
  112. package/dist/core/path-denylist.d.ts +8 -0
  113. package/dist/core/path-denylist.d.ts.map +1 -0
  114. package/dist/core/path-denylist.js +107 -0
  115. package/dist/core/path-denylist.js.map +1 -0
  116. package/dist/core/path-utils.d.ts +69 -0
  117. package/dist/core/path-utils.d.ts.map +1 -0
  118. package/dist/core/path-utils.js +306 -0
  119. package/dist/core/path-utils.js.map +1 -0
  120. package/dist/core/project-registry.d.ts +94 -0
  121. package/dist/core/project-registry.d.ts.map +1 -0
  122. package/dist/core/project-registry.js +297 -0
  123. package/dist/core/project-registry.js.map +1 -0
  124. package/dist/core/security-utils.d.ts +97 -0
  125. package/dist/core/security-utils.d.ts.map +1 -0
  126. package/dist/core/security-utils.js +264 -0
  127. package/dist/core/security-utils.js.map +1 -0
  128. package/dist/core/task-diff.d.ts +15 -0
  129. package/dist/core/task-diff.d.ts.map +1 -0
  130. package/dist/core/task-diff.js +136 -0
  131. package/dist/core/task-diff.js.map +1 -0
  132. package/dist/core/task-parser.d.ts +63 -0
  133. package/dist/core/task-parser.d.ts.map +1 -0
  134. package/dist/core/task-parser.js +332 -0
  135. package/dist/core/task-parser.js.map +1 -0
  136. package/dist/core/task-review-manager.d.ts +56 -0
  137. package/dist/core/task-review-manager.d.ts.map +1 -0
  138. package/dist/core/task-review-manager.js +281 -0
  139. package/dist/core/task-review-manager.js.map +1 -0
  140. package/dist/core/task-validator.d.ts +35 -0
  141. package/dist/core/task-validator.d.ts.map +1 -0
  142. package/dist/core/task-validator.js +236 -0
  143. package/dist/core/task-validator.js.map +1 -0
  144. package/dist/core/typecheck.d.ts +33 -0
  145. package/dist/core/typecheck.d.ts.map +1 -0
  146. package/dist/core/typecheck.js +375 -0
  147. package/dist/core/typecheck.js.map +1 -0
  148. package/dist/core/workspace-initializer.d.ts +16 -0
  149. package/dist/core/workspace-initializer.d.ts.map +1 -0
  150. package/dist/core/workspace-initializer.js +167 -0
  151. package/dist/core/workspace-initializer.js.map +1 -0
  152. package/dist/dashboard/__tests__/adversarial-display-state.test.d.ts +2 -0
  153. package/dist/dashboard/__tests__/adversarial-display-state.test.d.ts.map +1 -0
  154. package/dist/dashboard/__tests__/adversarial-display-state.test.js +59 -0
  155. package/dist/dashboard/__tests__/adversarial-display-state.test.js.map +1 -0
  156. package/dist/dashboard/__tests__/adversarial-endpoints.test.d.ts +2 -0
  157. package/dist/dashboard/__tests__/adversarial-endpoints.test.d.ts.map +1 -0
  158. package/dist/dashboard/__tests__/adversarial-endpoints.test.js +296 -0
  159. package/dist/dashboard/__tests__/adversarial-endpoints.test.js.map +1 -0
  160. package/dist/dashboard/__tests__/adversarial-runner.test.d.ts +2 -0
  161. package/dist/dashboard/__tests__/adversarial-runner.test.d.ts.map +1 -0
  162. package/dist/dashboard/__tests__/adversarial-runner.test.js +315 -0
  163. package/dist/dashboard/__tests__/adversarial-runner.test.js.map +1 -0
  164. package/dist/dashboard/__tests__/approval-storage-path-resolution.test.d.ts +2 -0
  165. package/dist/dashboard/__tests__/approval-storage-path-resolution.test.d.ts.map +1 -0
  166. package/dist/dashboard/__tests__/approval-storage-path-resolution.test.js +78 -0
  167. package/dist/dashboard/__tests__/approval-storage-path-resolution.test.js.map +1 -0
  168. package/dist/dashboard/__tests__/multi-server-approvals-content.test.d.ts +2 -0
  169. package/dist/dashboard/__tests__/multi-server-approvals-content.test.d.ts.map +1 -0
  170. package/dist/dashboard/__tests__/multi-server-approvals-content.test.js +115 -0
  171. package/dist/dashboard/__tests__/multi-server-approvals-content.test.js.map +1 -0
  172. package/dist/dashboard/__tests__/multi-server.test.d.ts +2 -0
  173. package/dist/dashboard/__tests__/multi-server.test.d.ts.map +1 -0
  174. package/dist/dashboard/__tests__/multi-server.test.js +388 -0
  175. package/dist/dashboard/__tests__/multi-server.test.js.map +1 -0
  176. package/dist/dashboard/__tests__/task-review-runner.test.d.ts +2 -0
  177. package/dist/dashboard/__tests__/task-review-runner.test.d.ts.map +1 -0
  178. package/dist/dashboard/__tests__/task-review-runner.test.js +255 -0
  179. package/dist/dashboard/__tests__/task-review-runner.test.js.map +1 -0
  180. package/dist/dashboard/__tests__/watcher-error-handling.test.d.ts +2 -0
  181. package/dist/dashboard/__tests__/watcher-error-handling.test.d.ts.map +1 -0
  182. package/dist/dashboard/__tests__/watcher-error-handling.test.js +118 -0
  183. package/dist/dashboard/__tests__/watcher-error-handling.test.js.map +1 -0
  184. package/dist/dashboard/adversarial-display-state.d.ts +38 -0
  185. package/dist/dashboard/adversarial-display-state.d.ts.map +1 -0
  186. package/dist/dashboard/adversarial-display-state.js +45 -0
  187. package/dist/dashboard/adversarial-display-state.js.map +1 -0
  188. package/dist/dashboard/adversarial-runner.d.ts +44 -0
  189. package/dist/dashboard/adversarial-runner.d.ts.map +1 -0
  190. package/dist/dashboard/adversarial-runner.js +168 -0
  191. package/dist/dashboard/adversarial-runner.js.map +1 -0
  192. package/dist/dashboard/approval-storage.d.ts +139 -0
  193. package/dist/dashboard/approval-storage.d.ts.map +1 -0
  194. package/dist/dashboard/approval-storage.js +608 -0
  195. package/dist/dashboard/approval-storage.js.map +1 -0
  196. package/dist/dashboard/execution-history-manager.d.ts +52 -0
  197. package/dist/dashboard/execution-history-manager.d.ts.map +1 -0
  198. package/dist/dashboard/execution-history-manager.js +161 -0
  199. package/dist/dashboard/execution-history-manager.js.map +1 -0
  200. package/dist/dashboard/implementation-log-manager.d.ts +102 -0
  201. package/dist/dashboard/implementation-log-manager.d.ts.map +1 -0
  202. package/dist/dashboard/implementation-log-manager.js +594 -0
  203. package/dist/dashboard/implementation-log-manager.js.map +1 -0
  204. package/dist/dashboard/job-scheduler.d.ts +91 -0
  205. package/dist/dashboard/job-scheduler.d.ts.map +1 -0
  206. package/dist/dashboard/job-scheduler.js +321 -0
  207. package/dist/dashboard/job-scheduler.js.map +1 -0
  208. package/dist/dashboard/multi-server.d.ts +45 -0
  209. package/dist/dashboard/multi-server.d.ts.map +1 -0
  210. package/dist/dashboard/multi-server.js +1927 -0
  211. package/dist/dashboard/multi-server.js.map +1 -0
  212. package/dist/dashboard/parser.d.ts +18 -0
  213. package/dist/dashboard/parser.d.ts.map +1 -0
  214. package/dist/dashboard/parser.js +243 -0
  215. package/dist/dashboard/parser.js.map +1 -0
  216. package/dist/dashboard/project-manager.d.ts +82 -0
  217. package/dist/dashboard/project-manager.d.ts.map +1 -0
  218. package/dist/dashboard/project-manager.js +257 -0
  219. package/dist/dashboard/project-manager.js.map +1 -0
  220. package/dist/dashboard/public/assets/Inter-Bold-CD3Pr7BX.woff2 +0 -0
  221. package/dist/dashboard/public/assets/Inter-Medium-B_8v_WHh.woff2 +0 -0
  222. package/dist/dashboard/public/assets/Inter-Regular-DRVdRqcI.woff2 +0 -0
  223. package/dist/dashboard/public/assets/Inter-SemiBold-CtskMddL.woff2 +0 -0
  224. package/dist/dashboard/public/assets/JetBrainsMono-Bold-D4WEaHbo.woff2 +0 -0
  225. package/dist/dashboard/public/assets/JetBrainsMono-Medium-3S3k2nMz.woff2 +0 -0
  226. package/dist/dashboard/public/assets/JetBrainsMono-Regular-BQaDgvhP.woff2 +0 -0
  227. package/dist/dashboard/public/assets/Tableau10-B-NsZVaP.js +1 -0
  228. package/dist/dashboard/public/assets/apl-B4CMkyY2.js +1 -0
  229. package/dist/dashboard/public/assets/arc-A04OOED4.js +1 -0
  230. package/dist/dashboard/public/assets/array-BKyUJesY.js +1 -0
  231. package/dist/dashboard/public/assets/asciiarmor-Df11BRmG.js +1 -0
  232. package/dist/dashboard/public/assets/asn1-EdZsLKOL.js +1 -0
  233. package/dist/dashboard/public/assets/asterisk-B-8jnY81.js +1 -0
  234. package/dist/dashboard/public/assets/blockDiagram-c4efeb88--RobHnfG.js +118 -0
  235. package/dist/dashboard/public/assets/brainfuck-C4LP7Hcl.js +1 -0
  236. package/dist/dashboard/public/assets/c4Diagram-c83219d4-tY8lPXxy.js +10 -0
  237. package/dist/dashboard/public/assets/channel-Cg2ZlORc.js +1 -0
  238. package/dist/dashboard/public/assets/classDiagram-beda092f-DBiupBFm.js +2 -0
  239. package/dist/dashboard/public/assets/classDiagram-v2-2358418a-FM2jRAtm.js +2 -0
  240. package/dist/dashboard/public/assets/clike-B9uivgTg.js +1 -0
  241. package/dist/dashboard/public/assets/clojure-BMjYHr_A.js +1 -0
  242. package/dist/dashboard/public/assets/clone-CCO9qihz.js +1 -0
  243. package/dist/dashboard/public/assets/cmake-BQqOBYOt.js +1 -0
  244. package/dist/dashboard/public/assets/cobol-CWcv1MsR.js +1 -0
  245. package/dist/dashboard/public/assets/coffeescript-S37ZYGWr.js +1 -0
  246. package/dist/dashboard/public/assets/commonlisp-DBKNyK5s.js +1 -0
  247. package/dist/dashboard/public/assets/createText-1719965b-C_nyx2v1.js +7 -0
  248. package/dist/dashboard/public/assets/crystal-SjHAIU92.js +1 -0
  249. package/dist/dashboard/public/assets/css-BnMrqG3P.js +1 -0
  250. package/dist/dashboard/public/assets/cypher-C_CwsFkJ.js +1 -0
  251. package/dist/dashboard/public/assets/d-pRatUO7H.js +1 -0
  252. package/dist/dashboard/public/assets/diff-DbItnlRl.js +1 -0
  253. package/dist/dashboard/public/assets/dockerfile-BKs6k2Af.js +1 -0
  254. package/dist/dashboard/public/assets/dtd-DF_7sFjM.js +1 -0
  255. package/dist/dashboard/public/assets/dylan-DwRh75JA.js +1 -0
  256. package/dist/dashboard/public/assets/ebnf-CDyGwa7X.js +1 -0
  257. package/dist/dashboard/public/assets/ecl-Cabwm37j.js +1 -0
  258. package/dist/dashboard/public/assets/edges-96097737-BsffumDq.js +4 -0
  259. package/dist/dashboard/public/assets/eiffel-CnydiIhH.js +1 -0
  260. package/dist/dashboard/public/assets/elm-vLlmbW-K.js +1 -0
  261. package/dist/dashboard/public/assets/erDiagram-0228fc6a-BK-uOJy1.js +51 -0
  262. package/dist/dashboard/public/assets/erlang-BNw1qcRV.js +1 -0
  263. package/dist/dashboard/public/assets/factor-kuTfRLto.js +1 -0
  264. package/dist/dashboard/public/assets/fcl-Kvtd6kyn.js +1 -0
  265. package/dist/dashboard/public/assets/flowDb-c6c81e3f-BC8_H7l7.js +10 -0
  266. package/dist/dashboard/public/assets/flowDiagram-50d868cf-0XbjRISj.js +4 -0
  267. package/dist/dashboard/public/assets/flowDiagram-v2-4f6560a1-CXE3CwgW.js +1 -0
  268. package/dist/dashboard/public/assets/flowchart-elk-definition-6af322e1-CCvs3UPr.js +139 -0
  269. package/dist/dashboard/public/assets/forth-Ffai-XNe.js +1 -0
  270. package/dist/dashboard/public/assets/fortran-DYz_wnZ1.js +1 -0
  271. package/dist/dashboard/public/assets/ganttDiagram-a2739b55-Yp2gfoGL.js +257 -0
  272. package/dist/dashboard/public/assets/gas-Bneqetm1.js +1 -0
  273. package/dist/dashboard/public/assets/gherkin-heZmZLOM.js +1 -0
  274. package/dist/dashboard/public/assets/gitGraphDiagram-82fe8481-njx_NoNr.js +70 -0
  275. package/dist/dashboard/public/assets/graph-COR8Ljm7.js +1 -0
  276. package/dist/dashboard/public/assets/groovy-D9Dt4D0W.js +1 -0
  277. package/dist/dashboard/public/assets/haskell-Cw1EW3IL.js +1 -0
  278. package/dist/dashboard/public/assets/haxe-H-WmDvRZ.js +1 -0
  279. package/dist/dashboard/public/assets/http-DBlCnlav.js +1 -0
  280. package/dist/dashboard/public/assets/idl-BEugSyMb.js +1 -0
  281. package/dist/dashboard/public/assets/index-0abMV41b.js +1 -0
  282. package/dist/dashboard/public/assets/index-5325376f-cWsAocic.js +1 -0
  283. package/dist/dashboard/public/assets/index-BH121EUE.js +1 -0
  284. package/dist/dashboard/public/assets/index-BMLdkmFP.js +1 -0
  285. package/dist/dashboard/public/assets/index-BYgbrt4G.js +1 -0
  286. package/dist/dashboard/public/assets/index-BwFDzEd4.js +3 -0
  287. package/dist/dashboard/public/assets/index-CS7gsYFH.js +1 -0
  288. package/dist/dashboard/public/assets/index-Cc6cUpKS.js +1 -0
  289. package/dist/dashboard/public/assets/index-CgeymaoH.js +1 -0
  290. package/dist/dashboard/public/assets/index-Cl5FjFWx.js +1 -0
  291. package/dist/dashboard/public/assets/index-CnN2VPRa.js +1 -0
  292. package/dist/dashboard/public/assets/index-DDWkdUEb.js +1 -0
  293. package/dist/dashboard/public/assets/index-DLUjIeO9.js +1 -0
  294. package/dist/dashboard/public/assets/index-Dm3-5ZYh.js +319 -0
  295. package/dist/dashboard/public/assets/index-Ds4s2dDD.js +2 -0
  296. package/dist/dashboard/public/assets/index-DvrmwdIJ.js +1 -0
  297. package/dist/dashboard/public/assets/index-MTVs_iIW.js +7 -0
  298. package/dist/dashboard/public/assets/index-UGm8eYTB.js +1 -0
  299. package/dist/dashboard/public/assets/index-Zi39sM21.css +1 -0
  300. package/dist/dashboard/public/assets/index-iL66igAo.js +1 -0
  301. package/dist/dashboard/public/assets/infoDiagram-8eee0895-TQXQOcbQ.js +7 -0
  302. package/dist/dashboard/public/assets/init-Gi6I4Gst.js +1 -0
  303. package/dist/dashboard/public/assets/javascript-iXu5QeM3.js +1 -0
  304. package/dist/dashboard/public/assets/journeyDiagram-c64418c1-C7AIhJZ8.js +139 -0
  305. package/dist/dashboard/public/assets/julia-DuME0IfC.js +1 -0
  306. package/dist/dashboard/public/assets/katex-XbL3y5x-.js +261 -0
  307. package/dist/dashboard/public/assets/layout-BzInGx9g.js +1 -0
  308. package/dist/dashboard/public/assets/line-BvqpNAKs.js +1 -0
  309. package/dist/dashboard/public/assets/linear-CMco2PTv.js +1 -0
  310. package/dist/dashboard/public/assets/livescript-BwQOo05w.js +1 -0
  311. package/dist/dashboard/public/assets/lua-BgMRiT3U.js +1 -0
  312. package/dist/dashboard/public/assets/mathematica-DTrFuWx2.js +1 -0
  313. package/dist/dashboard/public/assets/mbox-CNhZ1qSd.js +1 -0
  314. package/dist/dashboard/public/assets/mindmap-definition-8da855dc-CeJT8t3A.js +415 -0
  315. package/dist/dashboard/public/assets/mirc-CjQqDB4T.js +1 -0
  316. package/dist/dashboard/public/assets/mllike-CXdrOF99.js +1 -0
  317. package/dist/dashboard/public/assets/modelica-Dc1JOy9r.js +1 -0
  318. package/dist/dashboard/public/assets/mscgen-BA5vi2Kp.js +1 -0
  319. package/dist/dashboard/public/assets/mumps-BT43cFF4.js +1 -0
  320. package/dist/dashboard/public/assets/nginx-DdIZxoE0.js +1 -0
  321. package/dist/dashboard/public/assets/nsis-LdVXkNf5.js +1 -0
  322. package/dist/dashboard/public/assets/ntriples-BfvgReVJ.js +1 -0
  323. package/dist/dashboard/public/assets/octave-Ck1zUtKM.js +1 -0
  324. package/dist/dashboard/public/assets/ordinal-Cboi1Yqb.js +1 -0
  325. package/dist/dashboard/public/assets/oz-BzwKVEFT.js +1 -0
  326. package/dist/dashboard/public/assets/pascal--L3eBynH.js +1 -0
  327. package/dist/dashboard/public/assets/path-CbwjOpE9.js +1 -0
  328. package/dist/dashboard/public/assets/perl-CdXCOZ3F.js +1 -0
  329. package/dist/dashboard/public/assets/pieDiagram-a8764435-DYvb2wsa.js +35 -0
  330. package/dist/dashboard/public/assets/pig-CevX1Tat.js +1 -0
  331. package/dist/dashboard/public/assets/powershell-CFHJl5sT.js +1 -0
  332. package/dist/dashboard/public/assets/properties-C78fOPTZ.js +1 -0
  333. package/dist/dashboard/public/assets/protobuf-ChK-085T.js +1 -0
  334. package/dist/dashboard/public/assets/pug-DeIclll2.js +1 -0
  335. package/dist/dashboard/public/assets/puppet-DMA9R1ak.js +1 -0
  336. package/dist/dashboard/public/assets/python-BuPzkPfP.js +1 -0
  337. package/dist/dashboard/public/assets/q-pXgVlZs6.js +1 -0
  338. package/dist/dashboard/public/assets/quadrantDiagram-1e28029f-DpKQgDsX.js +7 -0
  339. package/dist/dashboard/public/assets/r-B6wPVr8A.js +1 -0
  340. package/dist/dashboard/public/assets/requirementDiagram-08caed73-C_q-bfsF.js +52 -0
  341. package/dist/dashboard/public/assets/rpm-CTu-6PCP.js +1 -0
  342. package/dist/dashboard/public/assets/ruby-B2Rjki9n.js +1 -0
  343. package/dist/dashboard/public/assets/sankeyDiagram-a04cb91d-0kwrmzfI.js +8 -0
  344. package/dist/dashboard/public/assets/sas-B4kiWyti.js +1 -0
  345. package/dist/dashboard/public/assets/scheme-C41bIUwD.js +1 -0
  346. package/dist/dashboard/public/assets/sequenceDiagram-c5b8d532-i5S3JNF0.js +122 -0
  347. package/dist/dashboard/public/assets/shell-CjFT_Tl9.js +1 -0
  348. package/dist/dashboard/public/assets/sieve-C3Gn_uJK.js +1 -0
  349. package/dist/dashboard/public/assets/simple-mode-GW_nhZxv.js +1 -0
  350. package/dist/dashboard/public/assets/smalltalk-CnHTOXQT.js +1 -0
  351. package/dist/dashboard/public/assets/solr-DehyRSwq.js +1 -0
  352. package/dist/dashboard/public/assets/sparql-DkYu6x3z.js +1 -0
  353. package/dist/dashboard/public/assets/spreadsheet-BCZA_wO0.js +1 -0
  354. package/dist/dashboard/public/assets/sql-D0XecflT.js +1 -0
  355. package/dist/dashboard/public/assets/stateDiagram-1ecb1508-COE2ffbQ.js +1 -0
  356. package/dist/dashboard/public/assets/stateDiagram-v2-c2b004d7-DMAS8qJy.js +1 -0
  357. package/dist/dashboard/public/assets/stex-C3f8Ysf7.js +1 -0
  358. package/dist/dashboard/public/assets/styles-b4e223ce-M0Oa_txo.js +160 -0
  359. package/dist/dashboard/public/assets/styles-ca3715f6-DddhRVVB.js +207 -0
  360. package/dist/dashboard/public/assets/styles-d45a18b0-ByKhWZca.js +116 -0
  361. package/dist/dashboard/public/assets/stylus-B533Al4x.js +1 -0
  362. package/dist/dashboard/public/assets/svgDrawCommon-b86b1483-DIF6Vn69.js +1 -0
  363. package/dist/dashboard/public/assets/swift-BzpIVaGY.js +1 -0
  364. package/dist/dashboard/public/assets/tcl-DVfN8rqt.js +1 -0
  365. package/dist/dashboard/public/assets/textile-CnDTJFAw.js +1 -0
  366. package/dist/dashboard/public/assets/tiddlywiki-DO-Gjzrf.js +1 -0
  367. package/dist/dashboard/public/assets/tiki-DGYXhP31.js +1 -0
  368. package/dist/dashboard/public/assets/timeline-definition-faaaa080-DC1Bdpu_.js +61 -0
  369. package/dist/dashboard/public/assets/toml-Bm5Em-hy.js +1 -0
  370. package/dist/dashboard/public/assets/troff-wAsdV37c.js +1 -0
  371. package/dist/dashboard/public/assets/ttcn-CfJYG6tj.js +1 -0
  372. package/dist/dashboard/public/assets/ttcn-cfg-B9xdYoR4.js +1 -0
  373. package/dist/dashboard/public/assets/turtle-B1tBg_DP.js +1 -0
  374. package/dist/dashboard/public/assets/vb-CmGdzxic.js +1 -0
  375. package/dist/dashboard/public/assets/vbscript-BuJXcnF6.js +1 -0
  376. package/dist/dashboard/public/assets/velocity-D8B20fx6.js +1 -0
  377. package/dist/dashboard/public/assets/verilog-C6RDOZhf.js +1 -0
  378. package/dist/dashboard/public/assets/vhdl-lSbBsy5d.js +1 -0
  379. package/dist/dashboard/public/assets/webidl-ZXfAyPTL.js +1 -0
  380. package/dist/dashboard/public/assets/xquery-DzFWVndE.js +1 -0
  381. package/dist/dashboard/public/assets/xychartDiagram-f5964ef8-BIMyvG9y.js +7 -0
  382. package/dist/dashboard/public/assets/yacas-BJ4BC0dw.js +1 -0
  383. package/dist/dashboard/public/assets/z80-Hz9HOZM7.js +1 -0
  384. package/dist/dashboard/public/claude-icon-dark.svg +1 -0
  385. package/dist/dashboard/public/claude-icon.svg +1 -0
  386. package/dist/dashboard/public/index.html +16 -0
  387. package/dist/dashboard/settings-manager.d.ts +47 -0
  388. package/dist/dashboard/settings-manager.d.ts.map +1 -0
  389. package/dist/dashboard/settings-manager.js +180 -0
  390. package/dist/dashboard/settings-manager.js.map +1 -0
  391. package/dist/dashboard/task-review-runner.d.ts +42 -0
  392. package/dist/dashboard/task-review-runner.d.ts.map +1 -0
  393. package/dist/dashboard/task-review-runner.js +375 -0
  394. package/dist/dashboard/task-review-runner.js.map +1 -0
  395. package/dist/dashboard/utils.d.ts +31 -0
  396. package/dist/dashboard/utils.d.ts.map +1 -0
  397. package/dist/dashboard/utils.js +102 -0
  398. package/dist/dashboard/utils.js.map +1 -0
  399. package/dist/dashboard/watcher.d.ts +32 -0
  400. package/dist/dashboard/watcher.d.ts.map +1 -0
  401. package/dist/dashboard/watcher.js +173 -0
  402. package/dist/dashboard/watcher.js.map +1 -0
  403. package/dist/index.d.ts +13 -0
  404. package/dist/index.d.ts.map +1 -0
  405. package/dist/index.js +380 -0
  406. package/dist/index.js.map +1 -0
  407. package/dist/markdown/templates/design-template.md +96 -0
  408. package/dist/markdown/templates/product-template.md +51 -0
  409. package/dist/markdown/templates/requirements-template.md +50 -0
  410. package/dist/markdown/templates/structure-template.md +145 -0
  411. package/dist/markdown/templates/tasks-template.md +139 -0
  412. package/dist/markdown/templates/tech-template.md +99 -0
  413. package/dist/prompts/create-decomposition.d.ts +3 -0
  414. package/dist/prompts/create-decomposition.d.ts.map +1 -0
  415. package/dist/prompts/create-decomposition.js +122 -0
  416. package/dist/prompts/create-decomposition.js.map +1 -0
  417. package/dist/prompts/create-spec.d.ts +3 -0
  418. package/dist/prompts/create-spec.d.ts.map +1 -0
  419. package/dist/prompts/create-spec.js +93 -0
  420. package/dist/prompts/create-spec.js.map +1 -0
  421. package/dist/prompts/create-steering-doc.d.ts +3 -0
  422. package/dist/prompts/create-steering-doc.d.ts.map +1 -0
  423. package/dist/prompts/create-steering-doc.js +73 -0
  424. package/dist/prompts/create-steering-doc.js.map +1 -0
  425. package/dist/prompts/implement-task.d.ts +3 -0
  426. package/dist/prompts/implement-task.d.ts.map +1 -0
  427. package/dist/prompts/implement-task.js +173 -0
  428. package/dist/prompts/implement-task.js.map +1 -0
  429. package/dist/prompts/index.d.ts +15 -0
  430. package/dist/prompts/index.d.ts.map +1 -0
  431. package/dist/prompts/index.js +51 -0
  432. package/dist/prompts/index.js.map +1 -0
  433. package/dist/prompts/inject-spec-workflow-guide.d.ts +3 -0
  434. package/dist/prompts/inject-spec-workflow-guide.d.ts.map +1 -0
  435. package/dist/prompts/inject-spec-workflow-guide.js +47 -0
  436. package/dist/prompts/inject-spec-workflow-guide.js.map +1 -0
  437. package/dist/prompts/inject-steering-guide.d.ts +3 -0
  438. package/dist/prompts/inject-steering-guide.d.ts.map +1 -0
  439. package/dist/prompts/inject-steering-guide.js +51 -0
  440. package/dist/prompts/inject-steering-guide.js.map +1 -0
  441. package/dist/prompts/refresh-tasks.d.ts +3 -0
  442. package/dist/prompts/refresh-tasks.d.ts.map +1 -0
  443. package/dist/prompts/refresh-tasks.js +224 -0
  444. package/dist/prompts/refresh-tasks.js.map +1 -0
  445. package/dist/prompts/spec-status.d.ts +3 -0
  446. package/dist/prompts/spec-status.d.ts.map +1 -0
  447. package/dist/prompts/spec-status.js +75 -0
  448. package/dist/prompts/spec-status.js.map +1 -0
  449. package/dist/prompts/types.d.ts +13 -0
  450. package/dist/prompts/types.d.ts.map +1 -0
  451. package/dist/prompts/types.js +2 -0
  452. package/dist/prompts/types.js.map +1 -0
  453. package/dist/server.d.ts +17 -0
  454. package/dist/server.d.ts.map +1 -0
  455. package/dist/server.js +175 -0
  456. package/dist/server.js.map +1 -0
  457. package/dist/tools/__tests__/adversarial-response.test.d.ts +2 -0
  458. package/dist/tools/__tests__/adversarial-response.test.d.ts.map +1 -0
  459. package/dist/tools/__tests__/adversarial-response.test.js +144 -0
  460. package/dist/tools/__tests__/adversarial-response.test.js.map +1 -0
  461. package/dist/tools/__tests__/adversarial-review.test.d.ts +2 -0
  462. package/dist/tools/__tests__/adversarial-review.test.d.ts.map +1 -0
  463. package/dist/tools/__tests__/adversarial-review.test.js +318 -0
  464. package/dist/tools/__tests__/adversarial-review.test.js.map +1 -0
  465. package/dist/tools/__tests__/decomposition-guide.test.d.ts +2 -0
  466. package/dist/tools/__tests__/decomposition-guide.test.d.ts.map +1 -0
  467. package/dist/tools/__tests__/decomposition-guide.test.js +25 -0
  468. package/dist/tools/__tests__/decomposition-guide.test.js.map +1 -0
  469. package/dist/tools/__tests__/deferrals.test.d.ts +2 -0
  470. package/dist/tools/__tests__/deferrals.test.d.ts.map +1 -0
  471. package/dist/tools/__tests__/deferrals.test.js +151 -0
  472. package/dist/tools/__tests__/deferrals.test.js.map +1 -0
  473. package/dist/tools/__tests__/get-task-review.test.d.ts +2 -0
  474. package/dist/tools/__tests__/get-task-review.test.d.ts.map +1 -0
  475. package/dist/tools/__tests__/get-task-review.test.js +81 -0
  476. package/dist/tools/__tests__/get-task-review.test.js.map +1 -0
  477. package/dist/tools/__tests__/projectPath.test.d.ts +2 -0
  478. package/dist/tools/__tests__/projectPath.test.d.ts.map +1 -0
  479. package/dist/tools/__tests__/projectPath.test.js +187 -0
  480. package/dist/tools/__tests__/projectPath.test.js.map +1 -0
  481. package/dist/tools/__tests__/review-task.test.d.ts +2 -0
  482. package/dist/tools/__tests__/review-task.test.d.ts.map +1 -0
  483. package/dist/tools/__tests__/review-task.test.js +1097 -0
  484. package/dist/tools/__tests__/review-task.test.js.map +1 -0
  485. package/dist/tools/adversarial-response.d.ts +6 -0
  486. package/dist/tools/adversarial-response.d.ts.map +1 -0
  487. package/dist/tools/adversarial-response.js +206 -0
  488. package/dist/tools/adversarial-response.js.map +1 -0
  489. package/dist/tools/adversarial-review.d.ts +21 -0
  490. package/dist/tools/adversarial-review.d.ts.map +1 -0
  491. package/dist/tools/adversarial-review.js +491 -0
  492. package/dist/tools/adversarial-review.js.map +1 -0
  493. package/dist/tools/approvals.d.ts +14 -0
  494. package/dist/tools/approvals.d.ts.map +1 -0
  495. package/dist/tools/approvals.js +505 -0
  496. package/dist/tools/approvals.js.map +1 -0
  497. package/dist/tools/decomposition-guide.d.ts +6 -0
  498. package/dist/tools/decomposition-guide.d.ts.map +1 -0
  499. package/dist/tools/decomposition-guide.js +163 -0
  500. package/dist/tools/decomposition-guide.js.map +1 -0
  501. package/dist/tools/deferrals.d.ts +5 -0
  502. package/dist/tools/deferrals.d.ts.map +1 -0
  503. package/dist/tools/deferrals.js +229 -0
  504. package/dist/tools/deferrals.js.map +1 -0
  505. package/dist/tools/get-task-review.d.ts +5 -0
  506. package/dist/tools/get-task-review.d.ts.map +1 -0
  507. package/dist/tools/get-task-review.js +136 -0
  508. package/dist/tools/get-task-review.js.map +1 -0
  509. package/dist/tools/index.d.ts +5 -0
  510. package/dist/tools/index.d.ts.map +1 -0
  511. package/dist/tools/index.js +82 -0
  512. package/dist/tools/index.js.map +1 -0
  513. package/dist/tools/log-implementation.d.ts +5 -0
  514. package/dist/tools/log-implementation.d.ts.map +1 -0
  515. package/dist/tools/log-implementation.js +398 -0
  516. package/dist/tools/log-implementation.js.map +1 -0
  517. package/dist/tools/review-task.d.ts +58 -0
  518. package/dist/tools/review-task.d.ts.map +1 -0
  519. package/dist/tools/review-task.js +617 -0
  520. package/dist/tools/review-task.js.map +1 -0
  521. package/dist/tools/spec-status.d.ts +5 -0
  522. package/dist/tools/spec-status.d.ts.map +1 -0
  523. package/dist/tools/spec-status.js +235 -0
  524. package/dist/tools/spec-status.js.map +1 -0
  525. package/dist/tools/spec-workflow-guide.d.ts +5 -0
  526. package/dist/tools/spec-workflow-guide.d.ts.map +1 -0
  527. package/dist/tools/spec-workflow-guide.js +396 -0
  528. package/dist/tools/spec-workflow-guide.js.map +1 -0
  529. package/dist/tools/steering-guide.d.ts +5 -0
  530. package/dist/tools/steering-guide.d.ts.map +1 -0
  531. package/dist/tools/steering-guide.js +192 -0
  532. package/dist/tools/steering-guide.js.map +1 -0
  533. package/dist/types.d.ts +213 -0
  534. package/dist/types.d.ts.map +1 -0
  535. package/dist/types.js +13 -0
  536. package/dist/types.js.map +1 -0
  537. package/package.json +113 -0
package/README.md ADDED
@@ -0,0 +1,458 @@
1
+ # Spec Workflow MCP (madmatt112 fork)
2
+
3
+ A Model Context Protocol (MCP) server for structured spec-driven development with real-time dashboard and VSCode extension.
4
+
5
+ ## Fork Notice
6
+
7
+ This is a hard fork of [Pimzino/spec-workflow-mcp](https://github.com/Pimzino/spec-workflow-mcp), diverged from upstream version `2.2.6` on **2026-03-13**. It is **not tracking upstream** and will not be merged back. All issues/PRs should be filed against this repository.
8
+
9
+ The `.spec-workflow/` directory layout, tool names, config keys, and `SPEC_WORKFLOW_HOME` environment variable remain identical to upstream, so existing state from upstream `2.2.x` migrates in place.
10
+
11
+ ## What This Fork Adds
12
+
13
+ Four features not present in upstream:
14
+
15
+ - **Adversarial Review** — automated oppositional review of spec documents (requirements / design / tasks / steering / decomposition). Spawns fresh-context CLI subagents (defaults to Claude CLI; configurable for any LLM CLI) to generate and execute adversarial prompts against spec content. Dashboard button, in-card progress stepper, versioning / retry, review memory for tracking prior critiques.
16
+ - **Spec Decomposition** — required workflow phase that forces task breakdown before implementation. New `decomposition-guide` tool with dashboard integration and adversarial-review eligibility.
17
+ - **Deferred Decisions Tracker** — new `deferrals` tool and dashboard UI for recording decisions that are intentionally punted during spec authoring.
18
+ - **Task Review** — new `review-task` and `get-task-review` tools that spawn a fresh-context dashboard agent to review completed task implementations before they're marked done.
19
+
20
+ ## Key Features
21
+
22
+ - **Structured Development Workflow** — Sequential spec creation (Requirements → Design → Tasks) with required decomposition phase.
23
+ - **Real-Time Web Dashboard** — Monitor specs, tasks, and progress with live updates.
24
+ - **VSCode Extension** — Integrated sidebar dashboard (build-from-source for this fork; see below).
25
+ - **Approval Workflow** — Full approval process with revisions and adversarial review.
26
+ - **Task Progress Tracking** — Visual progress bars and detailed status.
27
+ - **Implementation Logs** — Searchable logs of all task implementations with code statistics.
28
+
29
+ ## 🚀 Quick Start
30
+
31
+ ### Step 1: Add to your AI tool
32
+
33
+ Add to your MCP configuration (see client-specific setup below):
34
+
35
+ ```json
36
+ {
37
+ "mcpServers": {
38
+ "spec-workflow": {
39
+ "command": "npx",
40
+ "args": ["-y", "@madmatt112org/spec-workflow-mcp@latest", "/path/to/your/project"]
41
+ }
42
+ }
43
+ }
44
+ ```
45
+
46
+ ### Step 2: Choose your interface
47
+
48
+ **Option A: Web Dashboard** (Required for CLI users)
49
+
50
+ Start the dashboard (runs on port 5000 by default):
51
+ ```bash
52
+ npx -y @madmatt112org/spec-workflow-mcp@latest --dashboard
53
+ ```
54
+
55
+ The dashboard will be accessible at: http://localhost:5000
56
+
57
+ > **Note:** Only one dashboard instance is needed. All your projects will connect to the same dashboard.
58
+
59
+ **Option B: VSCode Extension** (Build from source)
60
+
61
+ The fork's extension is not yet published to the VSCode Marketplace. Build and side-install:
62
+
63
+ ```bash
64
+ cd vscode-extension
65
+ npm install
66
+ npm run package # produces a .vsix file
67
+ code --install-extension spec-workflow-mcp-<version>.vsix
68
+ ```
69
+
70
+ ## 📝 How to Use
71
+
72
+ Simply mention spec-workflow in your conversation:
73
+
74
+ - **"Create a spec for user authentication"** — Creates complete spec workflow
75
+ - **"List my specs"** — Shows all specs and their status
76
+ - **"Execute task 1.2 in spec user-auth"** — Runs a specific task
77
+
78
+ [See more examples →](docs/PROMPTING-GUIDE.md)
79
+
80
+ ## 🔧 MCP Client Setup
81
+
82
+ <details>
83
+ <summary><strong>Augment Code</strong></summary>
84
+
85
+ Configure in your Augment settings:
86
+ ```json
87
+ {
88
+ "mcpServers": {
89
+ "spec-workflow": {
90
+ "command": "npx",
91
+ "args": ["-y", "@madmatt112org/spec-workflow-mcp@latest", "/path/to/your/project"]
92
+ }
93
+ }
94
+ }
95
+ ```
96
+ </details>
97
+
98
+ <details>
99
+ <summary><strong>Claude Code CLI</strong></summary>
100
+
101
+ Add to your MCP configuration:
102
+ ```bash
103
+ claude mcp add spec-workflow npx @madmatt112org/spec-workflow-mcp@latest -- /path/to/your/project
104
+ ```
105
+
106
+ **Important Notes:**
107
+ - The `-y` flag bypasses npm prompts for smoother installation
108
+ - The `--` separator ensures the path is passed to the spec-workflow script, not to npx
109
+ - Replace `/path/to/your/project` with your actual project directory path
110
+
111
+ **Alternative for Windows (if the above doesn't work):**
112
+ ```bash
113
+ claude mcp add spec-workflow cmd.exe /c "npx @madmatt112org/spec-workflow-mcp@latest /path/to/your/project"
114
+ ```
115
+ </details>
116
+
117
+ <details>
118
+ <summary><strong>Claude Desktop</strong></summary>
119
+
120
+ Add to `claude_desktop_config.json`:
121
+ ```json
122
+ {
123
+ "mcpServers": {
124
+ "spec-workflow": {
125
+ "command": "npx",
126
+ "args": ["-y", "@madmatt112org/spec-workflow-mcp@latest", "/path/to/your/project"]
127
+ }
128
+ }
129
+ }
130
+ ```
131
+
132
+ > **Important:** Run the dashboard separately with `--dashboard` before starting the MCP server.
133
+
134
+ </details>
135
+
136
+ <details>
137
+ <summary><strong>Cline/Claude Dev</strong></summary>
138
+
139
+ Add to your MCP server configuration:
140
+ ```json
141
+ {
142
+ "mcpServers": {
143
+ "spec-workflow": {
144
+ "command": "npx",
145
+ "args": ["-y", "@madmatt112org/spec-workflow-mcp@latest", "/path/to/your/project"]
146
+ }
147
+ }
148
+ }
149
+ ```
150
+ </details>
151
+
152
+ <details>
153
+ <summary><strong>Continue IDE Extension</strong></summary>
154
+
155
+ Add to your Continue configuration:
156
+ ```json
157
+ {
158
+ "mcpServers": {
159
+ "spec-workflow": {
160
+ "command": "npx",
161
+ "args": ["-y", "@madmatt112org/spec-workflow-mcp@latest", "/path/to/your/project"]
162
+ }
163
+ }
164
+ }
165
+ ```
166
+ </details>
167
+
168
+ <details>
169
+ <summary><strong>Cursor IDE</strong></summary>
170
+
171
+ Add to your Cursor settings (`settings.json`):
172
+ ```json
173
+ {
174
+ "mcpServers": {
175
+ "spec-workflow": {
176
+ "command": "npx",
177
+ "args": ["-y", "@madmatt112org/spec-workflow-mcp@latest", "/path/to/your/project"]
178
+ }
179
+ }
180
+ }
181
+ ```
182
+ </details>
183
+
184
+ <details>
185
+ <summary><strong>OpenCode</strong></summary>
186
+
187
+ Add to your `opencode.json` configuration file:
188
+ ```json
189
+ {
190
+ "$schema": "https://opencode.ai/config.json",
191
+ "mcp": {
192
+ "spec-workflow": {
193
+ "type": "local",
194
+ "command": ["npx", "-y", "@madmatt112org/spec-workflow-mcp@latest", "/path/to/your/project"],
195
+ "enabled": true
196
+ }
197
+ }
198
+ }
199
+ ```
200
+ </details>
201
+
202
+ <details>
203
+ <summary><strong>Windsurf</strong></summary>
204
+
205
+ Add to your `~/.codeium/windsurf/mcp_config.json` configuration file:
206
+ ```json
207
+ {
208
+ "mcpServers": {
209
+ "spec-workflow": {
210
+ "command": "npx",
211
+ "args": ["-y", "@madmatt112org/spec-workflow-mcp@latest", "/path/to/your/project"]
212
+ }
213
+ }
214
+ }
215
+ ```
216
+ </details>
217
+
218
+ <details>
219
+ <summary><strong>Codex</strong></summary>
220
+
221
+ Add to your `~/.codex/config.toml` configuration file:
222
+ ```toml
223
+ [mcp_servers.spec-workflow]
224
+ command = "npx"
225
+ args = ["-y", "@madmatt112org/spec-workflow-mcp@latest", "/path/to/your/project"]
226
+ ```
227
+ </details>
228
+
229
+ ## 🐳 Docker Deployment
230
+
231
+ Run the dashboard in a Docker container for isolated deployment:
232
+
233
+ ```bash
234
+ # Using Docker Compose (recommended)
235
+ cd containers
236
+ docker-compose up --build
237
+
238
+ # Or using Docker CLI
239
+ docker build -f containers/Dockerfile -t spec-workflow-mcp .
240
+ docker run -p 5000:5000 -v "./workspace/.spec-workflow:/workspace/.spec-workflow:rw" spec-workflow-mcp
241
+ ```
242
+
243
+ The dashboard will be available at: http://localhost:5000
244
+
245
+ [See Docker setup guide →](containers/README.md)
246
+
247
+ ## 🔒 Security
248
+
249
+ Spec-Workflow MCP includes enterprise-grade security features suitable for corporate environments:
250
+
251
+ ### ✅ Implemented Security Controls
252
+
253
+ | Feature | Description |
254
+ |---------|-------------|
255
+ | **Localhost Binding** | Binds to `127.0.0.1` by default, preventing network exposure |
256
+ | **Rate Limiting** | 120 requests/minute per client with automatic cleanup |
257
+ | **Audit Logging** | Structured JSON logs with timestamp, actor, action, and result |
258
+ | **Security Headers** | X-Content-Type-Options, X-Frame-Options, X-XSS-Protection, CSP, Referrer-Policy |
259
+ | **CORS Protection** | Restricted to localhost origins by default |
260
+ | **Docker Hardening** | Non-root user, read-only filesystem, dropped capabilities, resource limits |
261
+
262
+ ### ⚠️ Not Yet Implemented
263
+
264
+ | Feature | Workaround |
265
+ |---------|------------|
266
+ | **HTTPS/TLS** | Use a reverse proxy (nginx, Apache) with TLS certificates |
267
+ | **User Authentication** | Use a reverse proxy with Basic Auth or OAuth2 Proxy for SSO |
268
+
269
+ ### For External/Network Access
270
+
271
+ If you need to expose the dashboard beyond localhost, we recommend:
272
+
273
+ 1. **Keep dashboard on localhost** (`127.0.0.1`)
274
+ 2. **Use nginx or Apache** as a reverse proxy with:
275
+ - TLS/HTTPS termination
276
+ - Basic authentication or OAuth2
277
+ 3. **Configure firewall rules** to restrict access
278
+
279
+ ```nginx
280
+ # Example nginx reverse proxy with auth
281
+ server {
282
+ listen 443 ssl;
283
+ server_name dashboard.example.com;
284
+
285
+ ssl_certificate /path/to/cert.pem;
286
+ ssl_certificate_key /path/to/key.pem;
287
+
288
+ auth_basic "Dashboard Access";
289
+ auth_basic_user_file /etc/nginx/.htpasswd;
290
+
291
+ location / {
292
+ proxy_pass http://127.0.0.1:5000;
293
+ proxy_http_version 1.1;
294
+ proxy_set_header Upgrade $http_upgrade;
295
+ proxy_set_header Connection "upgrade";
296
+ }
297
+ }
298
+ ```
299
+
300
+ [See Docker security guide →](containers/README.md#security-configuration)
301
+
302
+ ## 🔒 Sandboxed Environments
303
+
304
+ For sandboxed environments (e.g., Codex CLI with `sandbox_mode=workspace-write`) where `$HOME` is read-only, use the `SPEC_WORKFLOW_HOME` environment variable to redirect global state files to a writable location:
305
+
306
+ ```bash
307
+ SPEC_WORKFLOW_HOME=/workspace/.spec-workflow-mcp npx -y @madmatt112org/spec-workflow-mcp@latest /workspace
308
+ ```
309
+
310
+ [See Configuration Guide →](docs/CONFIGURATION.md#environment-variables)
311
+
312
+ ## ⚙️ Reviewer Configuration
313
+
314
+ The dashboard's adversarial-review and task-review subagents read their per-runner configuration from `.spec-workflow/adversarial-settings.json`. The file uses a **grouped per-runner shape** with a legacy top-level fallback:
315
+
316
+ ```json
317
+ {
318
+ "adversarial": { "model": "claude-opus-4-7" },
319
+ "taskReview": { "model": "claude-haiku-4-5" },
320
+ "features": { "typecheck": true },
321
+ "model": "claude-sonnet-4-6",
322
+ "cli": "claude",
323
+ "cliArgs": ["--print", "--output-format", "stream-json", "--verbose"]
324
+ }
325
+ ```
326
+
327
+ - `adversarial.model` / `taskReview.model` — per-runner model overrides. The grouped shape extends naturally for future per-runner settings (e.g. `cliArgs`) without a config migration.
328
+ - `model` — legacy top-level fallback used when a runner's per-runner override is absent. Stays valid indefinitely; there is no deprecation timeline.
329
+ - `features.typecheck` — boolean kill switch for the `tsc --noEmit` pre-computation that `review-task action: prepare` runs against TypeScript projects. Defaults to enabled; set to `false` to disable.
330
+ - `cli` / `cliArgs` — global CLI command and arguments used to spawn both runners. Per-runner overrides are not implemented in v1.
331
+
332
+ **Precedence ladder** (per-runner): per-runner override (`adversarial.model` / `taskReview.model`) > legacy top-level `model` > undefined (no `--model` flag passed; CLI default applies).
333
+
334
+ **Empty-string clears the override**: setting `adversarial.model: ""` or `taskReview.model: ""` is treated as "explicitly cleared" — the runner falls back to the legacy `model`, or to undefined if legacy is absent. This is the documented way to disable a per-runner override without removing the key.
335
+
336
+ ### Retry behavior
337
+
338
+ When a review is retried from the dashboard, the retry runner reuses **the model the initial run was invoked with**, looked up from the prior runner job. This keeps per-review telemetry and billing consistent across the initial and retry attempts. Per-retry model overrides are intentionally not supported.
339
+
340
+ **Server-restart fallback**: if the dashboard server restarts between an initial review and its retry, the prior runner job is gone (jobs live in an in-memory map that does not persist across restarts). The retry handler falls back to re-resolving the model from current settings, logging `[spec-workflow] retry: prior job not found in runner, re-resolving model from settings` once per process. This is documented degraded behavior; persisting jobs across restarts is out of scope for v1.
341
+
342
+ Only `model` is pinned across retry; `cli` and `cliArgs` always reflect current settings, so editing `cliArgs` between an initial run and its retry causes the retry to use the edited `cliArgs` while still using the initial run's `model`.
343
+
344
+ If you upgrade the CLI binary or `claude-cli` package between an initial run and its retry AND the model name from the initial run is no longer valid (deprecated, renamed), the retry will fail inside the spawned process with the CLI's "unknown model" error — recover by clearing the prior job (trigger a fresh initial run, or restart the dashboard server to clear the in-memory job map).
345
+
346
+ ### Limitations
347
+
348
+ **Concurrent prepare against the same project is unsupported in v1.** Running two `review-task action: prepare` invocations against the same project simultaneously may corrupt the typecheck buildinfo cache. Recovery: `rm <projectPath>/.spec-workflow/.cache/tsc.tsbuildinfo`.
349
+
350
+ ## 📚 Documentation
351
+
352
+ - [Configuration Guide](docs/CONFIGURATION.md) - Command-line options, config files
353
+ - [User Guide](docs/USER-GUIDE.md) - Comprehensive usage examples
354
+ - [Workflow Process](docs/WORKFLOW.md) - Development workflow and best practices
355
+ - [Interfaces Guide](docs/INTERFACES.md) - Dashboard and VSCode extension details
356
+ - [Prompting Guide](docs/PROMPTING-GUIDE.md) - Advanced prompting examples
357
+ - [Tools Reference](docs/TOOLS-REFERENCE.md) - Complete tools documentation
358
+ - [Development](docs/DEVELOPMENT.md) - Contributing and development setup
359
+ - [Troubleshooting](docs/TROUBLESHOOTING.md) - Common issues and solutions
360
+
361
+ ## 📁 Project Structure
362
+
363
+ ```
364
+ your-project/
365
+ .spec-workflow/
366
+ approvals/
367
+ archive/
368
+ specs/
369
+ steering/
370
+ templates/
371
+ user-templates/
372
+ config.example.toml
373
+ ```
374
+
375
+ ## 🛠️ Development
376
+
377
+ ```bash
378
+ # Install dependencies
379
+ npm install
380
+
381
+ # Build the project
382
+ npm run build
383
+
384
+ # Run in development mode
385
+ npm run dev
386
+ ```
387
+
388
+ [See development guide →](docs/DEVELOPMENT.md)
389
+
390
+ ## 📦 Publishing to npm
391
+
392
+ This package publishes to npm as `@madmatt112org/spec-workflow-mcp` via a manually-dispatched GitHub Actions workflow. Three gates run before any version reaches the registry.
393
+
394
+ ### Version source
395
+
396
+ `package.json` `version` is the single source of truth. There is no auto-bump. Use `npm version` (preferred) or edit `package.json` directly:
397
+
398
+ ```bash
399
+ npm version patch # 3.0.0 → 3.0.1, also creates git tag v3.0.1
400
+ npm version minor # 3.0.0 → 3.1.0
401
+ npm version major # 3.0.0 → 4.0.0
402
+ ```
403
+
404
+ `scripts/sync-plugin-version.js` keeps the `.claude-plugin/*.json` manifest versions in sync. After bumping, run `npm run sync:plugin-version` to update the manifests; CI runs `npm run check:plugin-version` and fails if they drift.
405
+
406
+ ### Publish gates
407
+
408
+ The `Publish to npm` workflow (`.github/workflows/npm-publish.yml`) runs three jobs in sequence — every step must pass before the publish job runs:
409
+
410
+ 1. **`test`** — calls `ci.yml` (typecheck, build, plugin-version sync check, full vitest suite).
411
+ 2. **`preflight`**:
412
+ - **Registry uniqueness**: aborts if `package.json` version is already published.
413
+ - **Git tag check**: requires a `v<version>` tag pointing at the exact commit being run.
414
+ 3. **`publish`** — `npm publish --access public --tag <input>`.
415
+
416
+ ### Publishing steps
417
+
418
+ ```bash
419
+ # 1. Bump version + create matching git tag
420
+ npm version patch # or minor / major
421
+
422
+ # 2. Push commit and tag together
423
+ git push origin main --follow-tags
424
+
425
+ # 3. Trigger the workflow
426
+ # GitHub → Actions → "Publish to npm" → "Run workflow"
427
+ # tag input: latest (or beta / next for pre-release routing)
428
+ ```
429
+
430
+ The `tag` input controls the npm dist-tag, not the version. For a first cautious release, dispatch with `next`, then promote later:
431
+
432
+ ```bash
433
+ npm dist-tag add @madmatt112org/spec-workflow-mcp@<version> latest
434
+ ```
435
+
436
+ ### Required secrets
437
+
438
+ Set in `Settings → Secrets and variables → Actions`:
439
+
440
+ - `NPM_TOKEN` — npm Granular Access Token with read+write on `@madmatt112org/*`. 2FA-for-publish must be enabled on the npm account.
441
+
442
+ ### Common failure modes
443
+
444
+ | Error | Cause | Fix |
445
+ |---|---|---|
446
+ | `Version X.Y.Z is already published` | Forgot to bump | `npm version patch` and re-dispatch |
447
+ | `Expected git tag vX.Y.Z does not exist` | Tag missing or not pushed | `git tag v<ver> && git push origin v<ver>` |
448
+ | `Tag points at <sha> but workflow is running on <sha>` | Tag is on a different commit | Move tag (`git tag -f v<ver>`) or run from the tagged commit |
449
+ | `403 Forbidden` from `npm publish` | Token lacks scope permission, or org membership wrong | Regenerate token with `@madmatt112org/*` scope |
450
+ | `check:plugin-version` fails in CI | Manifest versions drifted | `npm run sync:plugin-version`, commit, push |
451
+
452
+ ## 📄 License
453
+
454
+ GPL-3.0
455
+
456
+ ## Credit
457
+
458
+ Originally forked from [Pimzino/spec-workflow-mcp](https://github.com/Pimzino/spec-workflow-mcp) at version `2.2.6`. Upstream did not respond to feature PRs, so this fork carries the work forward independently. Released under the same GPL-3.0 license as upstream.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/config.test.ts"],"names":[],"mappings":""}