@sureshdsk/devflow-mcp 3.0.0 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (504) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/build-manifest.json +4 -4
  3. package/.next/standalone/.next/prerender-manifest.json +3 -3
  4. package/.next/standalone/.next/required-server-files.json +1 -1
  5. package/.next/standalone/.next/server/app/_global-error/page/build-manifest.json +2 -2
  6. package/.next/standalone/.next/server/app/_global-error/page.js +1 -1
  7. package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
  8. package/.next/standalone/.next/server/app/_global-error.html +2 -2
  9. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  10. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  11. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  12. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  13. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  14. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  15. package/.next/standalone/.next/server/app/_not-found/page/build-manifest.json +2 -2
  16. package/.next/standalone/.next/server/app/_not-found/page.js +2 -2
  17. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  18. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  19. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  20. package/.next/standalone/.next/server/app/_not-found.rsc +14 -13
  21. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +14 -13
  22. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  23. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +5 -4
  24. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  25. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  26. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  27. package/.next/standalone/.next/server/app/api/projects/[id]/route.js +2 -2
  28. package/.next/standalone/.next/server/app/api/projects/[id]/route.js.nft.json +1 -1
  29. package/.next/standalone/.next/server/app/api/projects/route.js +2 -2
  30. package/.next/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  31. package/.next/standalone/.next/server/app/api/specs/[name]/artifacts/[artifactType]/approve/route.js +2 -2
  32. package/.next/standalone/.next/server/app/api/specs/[name]/artifacts/[artifactType]/approve/route.js.nft.json +1 -1
  33. package/.next/standalone/.next/server/app/api/specs/[name]/artifacts/[artifactType]/route.js +2 -2
  34. package/.next/standalone/.next/server/app/api/specs/[name]/artifacts/[artifactType]/route.js.nft.json +1 -1
  35. package/.next/standalone/.next/server/app/api/specs/[name]/promote/route.js +2 -2
  36. package/.next/standalone/.next/server/app/api/specs/[name]/promote/route.js.nft.json +1 -1
  37. package/.next/standalone/.next/server/app/api/specs/[name]/route.js +2 -2
  38. package/.next/standalone/.next/server/app/api/specs/[name]/route.js.nft.json +1 -1
  39. package/.next/standalone/.next/server/app/api/specs/route.js +2 -2
  40. package/.next/standalone/.next/server/app/api/specs/route.js.nft.json +1 -1
  41. package/.next/standalone/.next/server/app/api/tasks/[id]/route.js +2 -2
  42. package/.next/standalone/.next/server/app/api/tasks/[id]/route.js.nft.json +1 -1
  43. package/.next/standalone/.next/server/app/api/tasks/route.js +2 -2
  44. package/.next/standalone/.next/server/app/api/tasks/route.js.nft.json +1 -1
  45. package/.next/standalone/.next/server/app/index.html +1 -1
  46. package/.next/standalone/.next/server/app/index.rsc +15 -14
  47. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  48. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +15 -14
  49. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  50. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +5 -4
  51. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  52. package/.next/standalone/.next/server/app/page/build-manifest.json +2 -2
  53. package/.next/standalone/.next/server/app/page.js +2 -2
  54. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  55. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  56. package/.next/standalone/.next/server/app/specs/[name]/page/build-manifest.json +2 -2
  57. package/.next/standalone/.next/server/app/specs/[name]/page.js +2 -2
  58. package/.next/standalone/.next/server/app/specs/[name]/page.js.nft.json +1 -1
  59. package/.next/standalone/.next/server/app/specs/[name]/page_client-reference-manifest.js +1 -1
  60. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0be0eb8b._.js +3 -0
  61. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__a9d478ee._.js → [root-of-the-server]__160c54ca._.js} +2 -2
  62. package/.next/standalone/.next/server/chunks/[root-of-the-server]__17ac51e3._.js +3 -0
  63. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1bb083e9._.js +3 -0
  64. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1dc1e944._.js +3 -0
  65. package/.next/standalone/.next/server/chunks/[root-of-the-server]__22ecfa2c._.js +3 -0
  66. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__13a93eb6._.js → [root-of-the-server]__64710c0d._.js} +2 -2
  67. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a2b7e5f2._.js +3 -0
  68. package/.next/standalone/.next/server/chunks/[root-of-the-server]__cf302bda._.js +3 -0
  69. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d85482cd._.js +3 -0
  70. package/.next/standalone/.next/server/chunks/[root-of-the-server]__dfa21757._.js +3 -0
  71. package/.next/standalone/.next/server/chunks/_3f452afe._.js +2 -2
  72. package/.next/standalone/.next/server/chunks/src_db_index_ts_a71f50f0._.js +3 -0
  73. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__023e2c69._.js +3 -0
  74. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0a1a1435._.js +3 -0
  75. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0c49a387._.js +3 -0
  76. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1be1fc5f._.js +3 -0
  77. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__3a2f2efb._.js +3 -0
  78. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__4693399c._.js +3 -0
  79. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__937c9212._.js → [root-of-the-server]__72a14301._.js} +2 -2
  80. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__8064ca06._.js +3 -0
  81. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__8b786d48._.js +3 -0
  82. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__8c052461._.js +3 -0
  83. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__8d306066._.js +3 -0
  84. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__9532fd59._.js +3 -0
  85. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__a119dd75._.js +3 -0
  86. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__7fb6ef14._.js → [root-of-the-server]__a57b312b._.js} +2 -2
  87. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__a80bd0ea._.js +3 -0
  88. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__abe095b3._.js +3 -0
  89. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__ad3bd783._.js +3 -0
  90. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__1e05fe0e._.js → [root-of-the-server]__ae9f05d6._.js} +2 -2
  91. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__c8781469._.js +3 -0
  92. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__c8a25070._.js +3 -0
  93. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__e8c1e595._.js +3 -0
  94. package/.next/standalone/.next/server/chunks/ssr/_0ff3de19._.js +1 -1
  95. package/.next/standalone/.next/server/chunks/ssr/node_modules_01a5cd4b._.js +3 -0
  96. package/.next/standalone/.next/server/chunks/ssr/node_modules_05c6819f._.js +31 -0
  97. package/.next/standalone/.next/server/chunks/ssr/node_modules_06c2c30a._.js +3 -0
  98. package/.next/standalone/.next/server/chunks/ssr/node_modules_09efe605._.js +3 -0
  99. package/.next/standalone/.next/server/chunks/ssr/{node_modules_mermaid_dist_chunks_mermaid_core_ef601841._.js → node_modules_0a439e3b._.js} +2 -2
  100. package/.next/standalone/.next/server/chunks/ssr/{node_modules_3507b41a._.js → node_modules_0e73ad6c._.js} +3 -3
  101. package/.next/standalone/.next/server/chunks/ssr/node_modules_0e7ff06d._.js +3 -0
  102. package/.next/standalone/.next/server/chunks/ssr/node_modules_0f73e25c._.js +3 -0
  103. package/.next/standalone/.next/server/chunks/ssr/node_modules_14cf9cea._.js +3 -0
  104. package/.next/standalone/.next/server/chunks/ssr/node_modules_19801f01._.js +3 -0
  105. package/.next/standalone/.next/server/chunks/ssr/node_modules_2235b8cf._.js +17 -0
  106. package/.next/standalone/.next/server/chunks/ssr/node_modules_23096c6d._.js +3 -0
  107. package/.next/standalone/.next/server/chunks/ssr/node_modules_23db4cf7._.js +17 -0
  108. package/.next/standalone/.next/server/chunks/ssr/node_modules_24381e95._.js +3 -0
  109. package/.next/standalone/.next/server/chunks/ssr/node_modules_24ca0eb6._.js +17 -0
  110. package/.next/standalone/.next/server/chunks/ssr/node_modules_27525793._.js +17 -0
  111. package/.next/standalone/.next/server/chunks/ssr/{node_modules_mermaid_dist_chunks_mermaid_core_4cfa6360._.js → node_modules_27c20382._.js} +2 -2
  112. package/.next/standalone/.next/server/chunks/ssr/node_modules_2c901b92._.js +3 -0
  113. package/.next/standalone/.next/server/chunks/ssr/node_modules_33b818b7._.js +45 -0
  114. package/.next/standalone/.next/server/chunks/ssr/node_modules_345d7791._.js +3 -0
  115. package/.next/standalone/.next/server/chunks/ssr/node_modules_36185c24._.js +45 -0
  116. package/.next/standalone/.next/server/chunks/ssr/node_modules_3ac7ce09._.js +3 -0
  117. package/.next/standalone/.next/server/chunks/ssr/node_modules_41b77cc7._.js +3 -0
  118. package/.next/standalone/.next/server/chunks/ssr/{node_modules_ed317ff6._.js → node_modules_42acd8db._.js} +2 -2
  119. package/.next/standalone/.next/server/chunks/ssr/node_modules_434aa5ec._.js +3 -0
  120. package/.next/standalone/.next/server/chunks/ssr/node_modules_54a9e72d._.js +17 -0
  121. package/.next/standalone/.next/server/chunks/ssr/node_modules_54f1273a._.js +26 -0
  122. package/.next/standalone/.next/server/chunks/ssr/node_modules_58d64491._.js +3 -0
  123. package/.next/standalone/.next/server/chunks/ssr/node_modules_5e012e3d._.js +3 -0
  124. package/.next/standalone/.next/server/chunks/ssr/node_modules_5ea9e4cf._.js +3 -0
  125. package/.next/standalone/.next/server/chunks/ssr/node_modules_5ecf8270._.js +26 -0
  126. package/.next/standalone/.next/server/chunks/ssr/node_modules_611c99b5._.js +1 -1
  127. package/.next/standalone/.next/server/chunks/ssr/{node_modules_d3-scale_src_e02ef77f._.js → node_modules_6629853d._.js} +2 -2
  128. package/.next/standalone/.next/server/chunks/ssr/node_modules_6fe2661c._.js +3 -0
  129. package/.next/standalone/.next/server/chunks/ssr/node_modules_7fe65a84._.js +3 -0
  130. package/.next/standalone/.next/server/chunks/ssr/node_modules_860f971a._.js +3 -0
  131. package/.next/standalone/.next/server/chunks/ssr/node_modules_882f3743._.js +3 -0
  132. package/.next/standalone/.next/server/chunks/ssr/node_modules_8e047938._.js +3 -0
  133. package/.next/standalone/.next/server/chunks/ssr/node_modules_9268cdc4._.js +3 -0
  134. package/.next/standalone/.next/server/chunks/ssr/node_modules_942541c9._.js +3 -0
  135. package/.next/standalone/.next/server/chunks/ssr/node_modules_9d52c0d6._.js +3 -0
  136. package/.next/standalone/.next/server/chunks/ssr/node_modules_@tanstack_query-core_build_modern_21ece5ea._.js +3 -0
  137. package/.next/standalone/.next/server/chunks/ssr/node_modules_ae6841d2._.js +17 -0
  138. package/.next/standalone/.next/server/chunks/ssr/node_modules_ba280bb0._.js +31 -0
  139. package/.next/standalone/.next/server/chunks/ssr/node_modules_bffdb8ec._.js +3 -0
  140. package/.next/standalone/.next/server/chunks/ssr/node_modules_c00f1821._.js +17 -0
  141. package/.next/standalone/.next/server/chunks/ssr/node_modules_c142ba86._.js +3 -0
  142. package/.next/standalone/.next/server/chunks/ssr/node_modules_d1a47cde._.js +17 -0
  143. package/.next/standalone/.next/server/chunks/ssr/node_modules_d9b454fe._.js +3 -0
  144. package/.next/standalone/.next/server/chunks/ssr/node_modules_dbe36b1d._.js +3 -0
  145. package/.next/standalone/.next/server/chunks/ssr/node_modules_ddbe26b7._.js +3 -0
  146. package/.next/standalone/.next/server/chunks/ssr/node_modules_e76b8bf2._.js +3 -0
  147. package/.next/standalone/.next/server/chunks/ssr/node_modules_e945b74d._.js +3 -0
  148. package/.next/standalone/.next/server/chunks/ssr/node_modules_fbd8a2ee._.js +17 -0
  149. package/.next/standalone/.next/server/chunks/ssr/node_modules_katex_dist_katex_mjs_31d456ba._.js +3 -0
  150. package/.next/standalone/.next/server/chunks/ssr/node_modules_katex_dist_katex_mjs_e1edc676._.js +3 -0
  151. package/.next/standalone/.next/server/chunks/ssr/node_modules_lodash-es_33e24dce._.js +3 -0
  152. package/.next/standalone/.next/server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-QXUST7PY_mjs_159fba97._.js +1 -1
  153. package/.next/standalone/.next/server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-S3R3BYOJ_mjs_dbeeb277._.js +1 -1
  154. package/.next/standalone/.next/server/chunks/ssr/node_modules_mermaid_dist_mermaid_core_mjs_a11916de._.js +9 -0
  155. package/.next/standalone/.next/server/chunks/ssr/src_66a70595._.js +3 -0
  156. package/.next/standalone/.next/server/chunks/ssr/src_components_kanban-board_tsx_7b875e8e._.js +1 -1
  157. package/.next/standalone/.next/server/middleware-build-manifest.js +2 -2
  158. package/.next/standalone/.next/server/pages/404.html +1 -1
  159. package/.next/standalone/.next/server/pages/500.html +2 -2
  160. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  161. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  162. package/.next/standalone/AGENTS.md +13 -7
  163. package/.next/standalone/CONTRIBUTING.md +42 -26
  164. package/.next/standalone/README.md +166 -25
  165. package/.next/standalone/bin/devflow.js +12 -5
  166. package/.next/standalone/bun.lock +78 -24
  167. package/.next/standalone/devflow/project-config.json +4 -0
  168. package/.next/standalone/devflow/schemas/api-first/schema.yaml +39 -0
  169. package/.next/standalone/devflow/schemas/api-first/templates/api-design.md +41 -0
  170. package/.next/standalone/devflow/schemas/api-first/templates/db-design.md +28 -0
  171. package/.next/standalone/devflow/schemas/api-first/templates/final-architecture.md +31 -0
  172. package/.next/standalone/devflow/schemas/api-first/templates/proposal.md +22 -0
  173. package/.next/standalone/devflow/schemas/api-first/templates/tasks.md +16 -0
  174. package/.next/standalone/devflow/specs/autodetect-skill-and-slash-command-installation/.approvals.json +1 -1
  175. package/.next/standalone/devflow/specs/autodetect-skill-and-slash-command-installation/.meta.json +1 -1
  176. package/.next/standalone/devflow/specs/autodetect-skill-and-slash-command-installation/design.md +11 -0
  177. package/.next/standalone/devflow/specs/autodetect-skill-and-slash-command-installation/proposal.md +3 -0
  178. package/.next/standalone/devflow/specs/autodetect-skill-and-slash-command-installation/tasks.md +34 -2
  179. package/.next/standalone/devflow/specs/precommit/.approvals.json +26 -0
  180. package/.next/standalone/devflow/specs/precommit/.meta.json +7 -0
  181. package/.next/standalone/devflow/specs/precommit/design.md +105 -0
  182. package/.next/standalone/devflow/specs/precommit/proposal.md +43 -0
  183. package/.next/standalone/devflow/specs/precommit/specs.md +89 -0
  184. package/.next/standalone/devflow/specs/precommit/tasks.md +283 -0
  185. package/.next/standalone/docs/custom-schemas.md +117 -0
  186. package/.next/standalone/docs/local-dev-guide.md +73 -0
  187. package/.next/standalone/drizzle.config.ts +7 -7
  188. package/.next/standalone/eslint.config.mjs +2 -2
  189. package/.next/standalone/instrumentation.ts +3 -5
  190. package/.next/standalone/next.config.ts +11 -2
  191. package/.next/standalone/node_modules/{sharp → libsql}/node_modules/detect-libc/package.json +4 -8
  192. package/.next/standalone/package-lock.json +5257 -2085
  193. package/.next/standalone/package.json +16 -7
  194. package/.next/standalone/postcss.config.mjs +1 -1
  195. package/.next/standalone/scripts/init-db.js +3 -5
  196. package/.next/standalone/scripts/init-db.test.js +6 -6
  197. package/.next/standalone/scripts/init-schema.js +22 -22
  198. package/.next/standalone/scripts/init-schema.test.js +45 -45
  199. package/.next/standalone/scripts/install-environments.js +27 -8
  200. package/.next/standalone/scripts/install-environments.test.js +19 -10
  201. package/.next/standalone/scripts/install-skills.js +104 -31
  202. package/.next/standalone/scripts/install-skills.test.js +6 -6
  203. package/.next/standalone/server.js +1 -1
  204. package/.next/standalone/src/app/api/agents/route.ts +2 -2
  205. package/.next/standalone/src/app/api/projects/[id]/route.ts +10 -19
  206. package/.next/standalone/src/app/api/projects/route.ts +4 -10
  207. package/.next/standalone/src/app/api/specs/[name]/artifacts/[artifactType]/approve/route.ts +8 -8
  208. package/.next/standalone/src/app/api/specs/[name]/artifacts/[artifactType]/route.ts +14 -14
  209. package/.next/standalone/src/app/api/specs/[name]/promote/route.ts +17 -23
  210. package/.next/standalone/src/app/api/specs/[name]/route.ts +34 -36
  211. package/.next/standalone/src/app/api/specs/route.ts +10 -10
  212. package/.next/standalone/src/app/api/tasks/[id]/route.ts +11 -33
  213. package/.next/standalone/src/app/api/tasks/route.ts +3 -6
  214. package/.next/standalone/src/app/globals.css +3 -3
  215. package/.next/standalone/src/app/layout.tsx +9 -5
  216. package/.next/standalone/src/app/page.tsx +1 -1
  217. package/.next/standalone/src/app/specs/[name]/page.tsx +26 -68
  218. package/.next/standalone/src/components/kanban-board.tsx +78 -157
  219. package/.next/standalone/src/components/kanban-column.tsx +10 -12
  220. package/.next/standalone/src/components/markdown-preview.tsx +36 -19
  221. package/.next/standalone/src/components/providers.tsx +20 -0
  222. package/.next/standalone/src/components/specs/artifact-dag-status.tsx +12 -14
  223. package/.next/standalone/src/components/specs/artifact-editor.tsx +55 -26
  224. package/.next/standalone/src/components/specs/spec-detail.tsx +48 -40
  225. package/.next/standalone/src/components/specs/spec-kanban-column.tsx +49 -68
  226. package/.next/standalone/src/components/specs/spec-modal.tsx +119 -83
  227. package/.next/standalone/src/components/task-card.tsx +34 -38
  228. package/.next/standalone/src/components/task-dialog.tsx +16 -31
  229. package/.next/standalone/src/components/ui/badge.tsx +12 -18
  230. package/.next/standalone/src/components/ui/button.tsx +23 -28
  231. package/.next/standalone/src/components/ui/card.tsx +42 -62
  232. package/.next/standalone/src/components/ui/dialog.tsx +17 -35
  233. package/.next/standalone/src/db/index.ts +10 -10
  234. package/.next/standalone/src/db/schema.ts +37 -37
  235. package/.next/standalone/src/hooks/use-queries.ts +81 -0
  236. package/.next/standalone/src/hooks/use-websocket.ts +74 -0
  237. package/.next/standalone/src/lib/schema.test.ts +37 -37
  238. package/.next/standalone/src/lib/schema.ts +77 -31
  239. package/.next/standalone/src/lib/specs-dir.ts +8 -8
  240. package/.next/standalone/src/lib/specs.ts +98 -92
  241. package/.next/standalone/src/lib/utils.ts +2 -2
  242. package/.next/standalone/src/mcp/server.ts +556 -349
  243. package/.next/standalone/src/mcp/websocket.ts +26 -23
  244. package/.next/standalone/src/schemas/backend-api/templates/proposal.md +6 -4
  245. package/.next/standalone/src/schemas/backend-api/templates/tasks.md +6 -0
  246. package/.next/standalone/src/schemas/data-engineering/templates/proposal.md +6 -4
  247. package/.next/standalone/src/schemas/data-engineering/templates/tasks.md +6 -0
  248. package/.next/standalone/src/schemas/devops-platform/templates/proposal.md +6 -4
  249. package/.next/standalone/src/schemas/devops-platform/templates/tasks.md +6 -0
  250. package/.next/standalone/src/schemas/frontend-product/templates/proposal.md +6 -4
  251. package/.next/standalone/src/schemas/frontend-product/templates/tasks.md +6 -0
  252. package/.next/standalone/src/schemas/spec-driven/templates/proposal.md +6 -4
  253. package/.next/standalone/src/schemas/spec-driven/templates/tasks.md +26 -0
  254. package/.next/standalone/src/websocket/server.ts +20 -18
  255. package/.next/standalone/tsconfig.json +3 -12
  256. package/.next/standalone/tsconfig.tsbuildinfo +1 -1
  257. package/.next/static/chunks/4f23f64d46848f57.js +1 -0
  258. package/.next/static/chunks/53081dcdcad4f31e.js +1 -0
  259. package/.next/static/chunks/{6a3d582315f1c214.js → 701cfcbb41e0ab47.js} +1 -1
  260. package/.next/static/chunks/ac4b6b4d5b7e486e.css +1 -0
  261. package/.next/static/chunks/d0309ea872db5d9f.js +1 -0
  262. package/.next/static/chunks/d4cf8893a018e965.js +1 -0
  263. package/.next/static/chunks/e6c0233269a4bd69.js +13 -0
  264. package/.next/static/chunks/{7e65cfa9841f66a5.js → e7d83ce855afe416.js} +2 -2
  265. package/.next/static/chunks/ee7035560fc9e5e9.js +1 -0
  266. package/.next/static/chunks/{turbopack-f4d3806ab575051d.js → turbopack-8b3b66a22a5e0fb4.js} +2 -2
  267. package/README.md +166 -25
  268. package/bin/devflow.js +12 -5
  269. package/drizzle.config.ts +7 -7
  270. package/next.config.ts +11 -2
  271. package/package.json +16 -7
  272. package/scripts/init-db.js +3 -5
  273. package/scripts/init-db.test.js +6 -6
  274. package/scripts/init-schema.js +22 -22
  275. package/scripts/init-schema.test.js +45 -45
  276. package/scripts/install-environments.js +27 -8
  277. package/scripts/install-environments.test.js +19 -10
  278. package/scripts/install-skills.js +104 -31
  279. package/scripts/install-skills.test.js +6 -6
  280. package/src/app/api/agents/route.ts +2 -2
  281. package/src/app/api/projects/[id]/route.ts +10 -19
  282. package/src/app/api/projects/route.ts +4 -10
  283. package/src/app/api/specs/[name]/artifacts/[artifactType]/approve/route.ts +8 -8
  284. package/src/app/api/specs/[name]/artifacts/[artifactType]/route.ts +14 -14
  285. package/src/app/api/specs/[name]/promote/route.ts +17 -23
  286. package/src/app/api/specs/[name]/route.ts +34 -36
  287. package/src/app/api/specs/route.ts +10 -10
  288. package/src/app/api/tasks/[id]/route.ts +11 -33
  289. package/src/app/api/tasks/route.ts +3 -6
  290. package/src/app/globals.css +3 -3
  291. package/src/app/layout.tsx +9 -5
  292. package/src/app/page.tsx +1 -1
  293. package/src/app/specs/[name]/page.tsx +26 -68
  294. package/src/components/kanban-board.tsx +78 -157
  295. package/src/components/kanban-column.tsx +10 -12
  296. package/src/components/markdown-preview.tsx +36 -19
  297. package/src/components/providers.tsx +20 -0
  298. package/src/components/specs/artifact-dag-status.tsx +12 -14
  299. package/src/components/specs/artifact-editor.tsx +55 -26
  300. package/src/components/specs/spec-detail.tsx +48 -40
  301. package/src/components/specs/spec-kanban-column.tsx +49 -68
  302. package/src/components/specs/spec-modal.tsx +119 -83
  303. package/src/components/task-card.tsx +34 -38
  304. package/src/components/task-dialog.tsx +16 -31
  305. package/src/components/ui/badge.tsx +12 -18
  306. package/src/components/ui/button.tsx +23 -28
  307. package/src/components/ui/card.tsx +42 -62
  308. package/src/components/ui/dialog.tsx +17 -35
  309. package/src/db/index.ts +10 -10
  310. package/src/db/schema.ts +37 -37
  311. package/src/hooks/use-queries.ts +81 -0
  312. package/src/hooks/use-websocket.ts +74 -0
  313. package/src/lib/schema.test.ts +37 -37
  314. package/src/lib/schema.ts +77 -31
  315. package/src/lib/specs-dir.ts +8 -8
  316. package/src/lib/specs.ts +98 -92
  317. package/src/lib/utils.ts +2 -2
  318. package/src/mcp/server.ts +556 -349
  319. package/src/mcp/websocket.ts +26 -23
  320. package/src/schemas/backend-api/templates/proposal.md +6 -4
  321. package/src/schemas/backend-api/templates/tasks.md +6 -0
  322. package/src/schemas/data-engineering/templates/proposal.md +6 -4
  323. package/src/schemas/data-engineering/templates/tasks.md +6 -0
  324. package/src/schemas/devops-platform/templates/proposal.md +6 -4
  325. package/src/schemas/devops-platform/templates/tasks.md +6 -0
  326. package/src/schemas/frontend-product/templates/proposal.md +6 -4
  327. package/src/schemas/frontend-product/templates/tasks.md +6 -0
  328. package/src/schemas/spec-driven/templates/proposal.md +6 -4
  329. package/src/schemas/spec-driven/templates/tasks.md +26 -0
  330. package/src/types/bun-sqlite.d.ts +1 -1
  331. package/src/websocket/server.ts +20 -18
  332. package/tsconfig.json +3 -12
  333. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1be4e4b6._.js +0 -3
  334. package/.next/standalone/.next/server/chunks/[root-of-the-server]__492a4a24._.js +0 -3
  335. package/.next/standalone/.next/server/chunks/[root-of-the-server]__67c59ae1._.js +0 -3
  336. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6cc7aecd._.js +0 -3
  337. package/.next/standalone/.next/server/chunks/[root-of-the-server]__83a77b07._.js +0 -3
  338. package/.next/standalone/.next/server/chunks/[root-of-the-server]__88d91cb5._.js +0 -3
  339. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a9e095e8._.js +0 -3
  340. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b367d327._.js +0 -3
  341. package/.next/standalone/.next/server/chunks/[root-of-the-server]__eb413bbc._.js +0 -3
  342. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0b8c072a._.js +0 -3
  343. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__12b2191f._.js +0 -3
  344. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__15316462._.js +0 -3
  345. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__19c9c409._.js +0 -3
  346. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__19e5e22f._.js +0 -3
  347. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__25b5ccb3._.js +0 -3
  348. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__2f78c3da._.js +0 -3
  349. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__3160b3f4._.js +0 -9
  350. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__319559be._.js +0 -3
  351. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__34f7cbcb._.js +0 -31
  352. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__3abab94b._.js +0 -3
  353. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__3b3d8930._.js +0 -3
  354. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__4250799b._.js +0 -3
  355. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__4c29cbc3._.js +0 -26
  356. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__4e0bb6eb._.js +0 -9
  357. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__5678d2e3._.js +0 -3
  358. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__673445e0._.js +0 -31
  359. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__934de06b._.js +0 -3
  360. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__9b6c6f09._.js +0 -3
  361. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__a1b83a98._.js +0 -3
  362. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__b00a15c5._.js +0 -3
  363. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__b8567be3._.js +0 -26
  364. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__ce64536e._.js +0 -45
  365. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__e96d33d2._.js +0 -45
  366. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__fd7ec054._.js +0 -3
  367. package/.next/standalone/.next/server/chunks/ssr/node_modules_16a3f9e7._.js +0 -17
  368. package/.next/standalone/.next/server/chunks/ssr/node_modules_45bce0e1._.js +0 -3
  369. package/.next/standalone/.next/server/chunks/ssr/node_modules_5e5a372d._.js +0 -17
  370. package/.next/standalone/.next/server/chunks/ssr/node_modules_6ece6f1e._.js +0 -3
  371. package/.next/standalone/.next/server/chunks/ssr/node_modules_d173e749._.js +0 -3
  372. package/.next/standalone/.next/server/chunks/ssr/node_modules_d3-shape_src_arc_fb1ac087.js +0 -3
  373. package/.next/standalone/.next/server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_1f73a830._.js +0 -3
  374. package/.next/standalone/.next/server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_663ac803._.js +0 -3
  375. package/.next/standalone/.next/server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-FMBD7UC4_mjs_4f485529._.js +0 -17
  376. package/.next/standalone/.next/server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-TZMSLE5B_mjs_8436a62a._.js +0 -3
  377. package/.next/standalone/.next/server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_f78d2dc4._.js +0 -3
  378. package/.next/standalone/.next/server/chunks/ssr/src_app_layout_tsx_cc8184fa._.js +0 -3
  379. package/.next/standalone/devflow/specs/add-default-schema-template-selection/.approvals.json +0 -26
  380. package/.next/standalone/devflow/specs/add-default-schema-template-selection/.meta.json +0 -8
  381. package/.next/standalone/devflow/specs/add-default-schema-template-selection/design.md +0 -126
  382. package/.next/standalone/devflow/specs/add-default-schema-template-selection/proposal.md +0 -65
  383. package/.next/standalone/devflow/specs/add-default-schema-template-selection/specs.md +0 -107
  384. package/.next/standalone/devflow/specs/add-default-schema-template-selection/tasks.md +0 -235
  385. package/.next/standalone/devflow/specs/test-no-project/.approvals.json +0 -17
  386. package/.next/standalone/devflow/specs/test-no-project/.meta.json +0 -6
  387. package/.next/standalone/devflow/specs/ui-cleanup/.approvals.json +0 -29
  388. package/.next/standalone/devflow/specs/ui-cleanup/.meta.json +0 -6
  389. package/.next/standalone/devflow/specs/ui-cleanup/design.md +0 -49
  390. package/.next/standalone/devflow/specs/ui-cleanup/proposal.md +0 -34
  391. package/.next/standalone/devflow/specs/ui-cleanup/specs.md +0 -55
  392. package/.next/standalone/devflow/specs/ui-cleanup/tasks.md +0 -28
  393. package/.next/standalone/node_modules/@img/colour/color.cjs +0 -1594
  394. package/.next/standalone/node_modules/@img/colour/index.cjs +0 -1
  395. package/.next/standalone/node_modules/@img/colour/package.json +0 -45
  396. package/.next/standalone/node_modules/@img/sharp-darwin-arm64/lib/sharp-darwin-arm64.node +0 -0
  397. package/.next/standalone/node_modules/@img/sharp-darwin-arm64/package.json +0 -40
  398. package/.next/standalone/node_modules/@img/sharp-libvips-darwin-arm64/README.md +0 -46
  399. package/.next/standalone/node_modules/@img/sharp-libvips-darwin-arm64/lib/glib-2.0/include/glibconfig.h +0 -220
  400. package/.next/standalone/node_modules/@img/sharp-libvips-darwin-arm64/lib/index.js +0 -1
  401. package/.next/standalone/node_modules/@img/sharp-libvips-darwin-arm64/lib/libvips-cpp.8.17.3.dylib +0 -0
  402. package/.next/standalone/node_modules/@img/sharp-libvips-darwin-arm64/package.json +0 -36
  403. package/.next/standalone/node_modules/@img/sharp-libvips-darwin-arm64/versions.json +0 -30
  404. package/.next/standalone/node_modules/buffer-from/index.js +0 -72
  405. package/.next/standalone/node_modules/buffer-from/package.json +0 -19
  406. package/.next/standalone/node_modules/sharp/lib/channel.js +0 -177
  407. package/.next/standalone/node_modules/sharp/lib/colour.js +0 -195
  408. package/.next/standalone/node_modules/sharp/lib/composite.js +0 -212
  409. package/.next/standalone/node_modules/sharp/lib/constructor.js +0 -499
  410. package/.next/standalone/node_modules/sharp/lib/index.js +0 -16
  411. package/.next/standalone/node_modules/sharp/lib/input.js +0 -809
  412. package/.next/standalone/node_modules/sharp/lib/is.js +0 -143
  413. package/.next/standalone/node_modules/sharp/lib/libvips.js +0 -207
  414. package/.next/standalone/node_modules/sharp/lib/operation.js +0 -1016
  415. package/.next/standalone/node_modules/sharp/lib/output.js +0 -1666
  416. package/.next/standalone/node_modules/sharp/lib/resize.js +0 -595
  417. package/.next/standalone/node_modules/sharp/lib/sharp.js +0 -121
  418. package/.next/standalone/node_modules/sharp/lib/utility.js +0 -291
  419. package/.next/standalone/node_modules/sharp/node_modules/detect-libc/lib/detect-libc.js +0 -313
  420. package/.next/standalone/node_modules/sharp/node_modules/detect-libc/lib/elf.js +0 -39
  421. package/.next/standalone/node_modules/sharp/node_modules/detect-libc/lib/filesystem.js +0 -51
  422. package/.next/standalone/node_modules/sharp/node_modules/detect-libc/lib/process.js +0 -24
  423. package/.next/standalone/node_modules/sharp/node_modules/semver/classes/comparator.js +0 -143
  424. package/.next/standalone/node_modules/sharp/node_modules/semver/classes/range.js +0 -557
  425. package/.next/standalone/node_modules/sharp/node_modules/semver/classes/semver.js +0 -333
  426. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/cmp.js +0 -54
  427. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/coerce.js +0 -62
  428. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/compare.js +0 -7
  429. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/eq.js +0 -5
  430. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/gt.js +0 -5
  431. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/gte.js +0 -5
  432. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/lt.js +0 -5
  433. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/lte.js +0 -5
  434. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/neq.js +0 -5
  435. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/parse.js +0 -18
  436. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/satisfies.js +0 -12
  437. package/.next/standalone/node_modules/sharp/node_modules/semver/internal/constants.js +0 -37
  438. package/.next/standalone/node_modules/sharp/node_modules/semver/internal/debug.js +0 -11
  439. package/.next/standalone/node_modules/sharp/node_modules/semver/internal/identifiers.js +0 -29
  440. package/.next/standalone/node_modules/sharp/node_modules/semver/internal/lrucache.js +0 -42
  441. package/.next/standalone/node_modules/sharp/node_modules/semver/internal/parse-options.js +0 -17
  442. package/.next/standalone/node_modules/sharp/node_modules/semver/internal/re.js +0 -223
  443. package/.next/standalone/node_modules/sharp/node_modules/semver/package.json +0 -78
  444. package/.next/standalone/node_modules/sharp/package.json +0 -202
  445. package/.next/standalone/node_modules/source-map/lib/array-set.js +0 -121
  446. package/.next/standalone/node_modules/source-map/lib/base64-vlq.js +0 -140
  447. package/.next/standalone/node_modules/source-map/lib/base64.js +0 -67
  448. package/.next/standalone/node_modules/source-map/lib/binary-search.js +0 -111
  449. package/.next/standalone/node_modules/source-map/lib/mapping-list.js +0 -79
  450. package/.next/standalone/node_modules/source-map/lib/quick-sort.js +0 -114
  451. package/.next/standalone/node_modules/source-map/lib/source-map-consumer.js +0 -1145
  452. package/.next/standalone/node_modules/source-map/lib/source-map-generator.js +0 -425
  453. package/.next/standalone/node_modules/source-map/lib/source-node.js +0 -413
  454. package/.next/standalone/node_modules/source-map/lib/util.js +0 -488
  455. package/.next/standalone/node_modules/source-map/package.json +0 -73
  456. package/.next/standalone/node_modules/source-map/source-map.js +0 -8
  457. package/.next/standalone/node_modules/source-map-support/LICENSE.md +0 -21
  458. package/.next/standalone/node_modules/source-map-support/README.md +0 -284
  459. package/.next/standalone/node_modules/source-map-support/browser-source-map-support.js +0 -114
  460. package/.next/standalone/node_modules/source-map-support/package.json +0 -31
  461. package/.next/standalone/node_modules/source-map-support/register-hook-require.js +0 -1
  462. package/.next/standalone/node_modules/source-map-support/register.js +0 -1
  463. package/.next/standalone/node_modules/source-map-support/source-map-support.js +0 -625
  464. package/.next/standalone/node_modules/typescript/lib/_tsc.js +0 -133818
  465. package/.next/standalone/node_modules/typescript/lib/_tsserver.js +0 -659
  466. package/.next/standalone/node_modules/typescript/lib/_typingsInstaller.js +0 -222
  467. package/.next/standalone/node_modules/typescript/lib/cs/diagnosticMessages.generated.json +0 -2122
  468. package/.next/standalone/node_modules/typescript/lib/de/diagnosticMessages.generated.json +0 -2122
  469. package/.next/standalone/node_modules/typescript/lib/es/diagnosticMessages.generated.json +0 -2122
  470. package/.next/standalone/node_modules/typescript/lib/fr/diagnosticMessages.generated.json +0 -2122
  471. package/.next/standalone/node_modules/typescript/lib/it/diagnosticMessages.generated.json +0 -2122
  472. package/.next/standalone/node_modules/typescript/lib/ja/diagnosticMessages.generated.json +0 -2122
  473. package/.next/standalone/node_modules/typescript/lib/ko/diagnosticMessages.generated.json +0 -2122
  474. package/.next/standalone/node_modules/typescript/lib/pl/diagnosticMessages.generated.json +0 -2122
  475. package/.next/standalone/node_modules/typescript/lib/pt-br/diagnosticMessages.generated.json +0 -2122
  476. package/.next/standalone/node_modules/typescript/lib/ru/diagnosticMessages.generated.json +0 -2122
  477. package/.next/standalone/node_modules/typescript/lib/tr/diagnosticMessages.generated.json +0 -2122
  478. package/.next/standalone/node_modules/typescript/lib/tsc.js +0 -8
  479. package/.next/standalone/node_modules/typescript/lib/tsserver.js +0 -8
  480. package/.next/standalone/node_modules/typescript/lib/tsserverlibrary.js +0 -21
  481. package/.next/standalone/node_modules/typescript/lib/typesMap.json +0 -497
  482. package/.next/standalone/node_modules/typescript/lib/typescript.js +0 -200276
  483. package/.next/standalone/node_modules/typescript/lib/typingsInstaller.js +0 -8
  484. package/.next/standalone/node_modules/typescript/lib/watchGuard.js +0 -53
  485. package/.next/standalone/node_modules/typescript/lib/zh-cn/diagnosticMessages.generated.json +0 -2122
  486. package/.next/standalone/node_modules/typescript/lib/zh-tw/diagnosticMessages.generated.json +0 -2122
  487. package/.next/standalone/node_modules/typescript/package.json +0 -120
  488. package/.next/standalone/src/components/ui/collapsible.tsx +0 -12
  489. package/.next/standalone/src/components/ui/sheet.tsx +0 -130
  490. package/.next/standalone/src/components/ui/tabs.tsx +0 -58
  491. package/.next/static/chunks/0177331b8adf7346.js +0 -7
  492. package/.next/static/chunks/06af74e2f3e207c5.js +0 -7
  493. package/.next/static/chunks/1748d5cd2443723b.css +0 -1
  494. package/.next/static/chunks/7ae917cb100be2b9.js +0 -7
  495. package/.next/static/chunks/7c4b901b394c3a8c.js +0 -7
  496. package/src/components/ui/collapsible.tsx +0 -12
  497. package/src/components/ui/sheet.tsx +0 -130
  498. package/src/components/ui/tabs.tsx +0 -58
  499. /package/.next/standalone/node_modules/{detect-libc → libsql/node_modules/detect-libc}/lib/detect-libc.js +0 -0
  500. /package/.next/standalone/node_modules/{detect-libc → libsql/node_modules/detect-libc}/lib/filesystem.js +0 -0
  501. /package/.next/standalone/node_modules/{detect-libc → libsql/node_modules/detect-libc}/lib/process.js +0 -0
  502. /package/.next/static/{5YFrdIQd1UU2IxLxekrU9 → Ql6qo0GYLL23WRu6ec4N5}/_buildManifest.js +0 -0
  503. /package/.next/static/{5YFrdIQd1UU2IxLxekrU9 → Ql6qo0GYLL23WRu6ec4N5}/_clientMiddlewareManifest.json +0 -0
  504. /package/.next/static/{5YFrdIQd1UU2IxLxekrU9 → Ql6qo0GYLL23WRu6ec4N5}/_ssgManifest.js +0 -0
@@ -1,4 +1,4 @@
1
- import WebSocket from "ws";
1
+ import WebSocket from 'ws';
2
2
 
3
3
  let client: WebSocket | null = null;
4
4
  let reconnectAttempts = 0;
@@ -6,11 +6,11 @@ let reconnectTimeout: ReturnType<typeof setTimeout> | null = null;
6
6
  let isConnecting = false;
7
7
 
8
8
  function detectAgentName(): string {
9
- if (process.env.CLAUDECODE || process.env.CLAUDE_CODE_ENTRYPOINT) return "Claude Code";
10
- if (process.env.CODEX) return "Codex";
11
- if (process.env.CURSOR_TRACE_ID || process.env.CURSOR_CHANNEL) return "Cursor";
12
- if (process.env.WINDSURF_PLUGIN_VERSION) return "Windsurf";
13
- return ""; // empty = unknown, server.ts will re-identify after MCP initialize
9
+ if (process.env.CLAUDECODE || process.env.CLAUDE_CODE_ENTRYPOINT) return 'Claude Code';
10
+ if (process.env.CODEX) return 'Codex';
11
+ if (process.env.CURSOR_TRACE_ID || process.env.CURSOR_CHANNEL) return 'Cursor';
12
+ if (process.env.WINDSURF_PLUGIN_VERSION) return 'Windsurf';
13
+ return ''; // empty = unknown, server.ts will re-identify after MCP initialize
14
14
  }
15
15
 
16
16
  const MAX_RECONNECT_DELAY = 30000; // 30 seconds
@@ -32,7 +32,7 @@ function getReconnectDelay(): number {
32
32
  // Exponential backoff: 1s, 2s, 4s, 8s, 16s, 30s (max)
33
33
  const delay = Math.min(
34
34
  INITIAL_RECONNECT_DELAY * Math.pow(2, reconnectAttempts),
35
- MAX_RECONNECT_DELAY
35
+ MAX_RECONNECT_DELAY,
36
36
  );
37
37
  return delay;
38
38
  }
@@ -62,42 +62,40 @@ function connectToServer() {
62
62
  try {
63
63
  client = new WebSocket(url);
64
64
 
65
- client.on("open", () => {
65
+ client.on('open', () => {
66
66
  isConnecting = false;
67
67
  reconnectAttempts = 0;
68
68
  console.error(`[MCP WebSocket] Connected to server at ${url}`);
69
69
  // Announce this connection as an MCP agent with detected name
70
- client!.send(JSON.stringify({ type: "identify", role: "mcp", agent: detectAgentName() }));
70
+ client!.send(JSON.stringify({ type: 'identify', role: 'mcp', agent: detectAgentName() }));
71
71
  });
72
72
 
73
- client.on("close", () => {
73
+ client.on('close', () => {
74
74
  isConnecting = false;
75
75
  client = null;
76
76
  // Only log and reconnect if we had been connected (reconnectAttempts > 0 means we're already trying)
77
77
  if (reconnectAttempts === 0) {
78
- console.error("[MCP WebSocket] Disconnected from server, will reconnect");
78
+ console.error('[MCP WebSocket] Disconnected from server, will reconnect');
79
79
  }
80
80
  scheduleReconnect();
81
81
  });
82
82
 
83
- client.on("error", (error: Error & { code?: string }) => {
83
+ client.on('error', (error: Error & { code?: string }) => {
84
84
  isConnecting = false;
85
85
  // Only log connection refused once, not on every retry
86
- if (error.code === "ECONNREFUSED") {
86
+ if (error.code === 'ECONNREFUSED') {
87
87
  if (reconnectAttempts === 0) {
88
- console.error(
89
- `[MCP WebSocket] Server not available at ${url}, will retry in background`
90
- );
88
+ console.error(`[MCP WebSocket] Server not available at ${url}, will retry in background`);
91
89
  }
92
90
  } else {
93
- console.error("[MCP WebSocket] Error:", error.message);
91
+ console.error('[MCP WebSocket] Error:', error.message);
94
92
  }
95
93
  client = null;
96
94
  scheduleReconnect();
97
95
  });
98
96
  } catch (error) {
99
97
  isConnecting = false;
100
- console.error("[MCP WebSocket] Failed to create connection:", error);
98
+ console.error('[MCP WebSocket] Failed to create connection:', error);
101
99
  scheduleReconnect();
102
100
  }
103
101
  }
@@ -105,16 +103,19 @@ function connectToServer() {
105
103
  export function broadcastUpdate(data: unknown) {
106
104
  if (!client || client.readyState !== WebSocket.OPEN) {
107
105
  // Server not available, silently fail - UI has polling fallback
108
- console.error("[MCP WebSocket] Not connected, skipping broadcast:", JSON.stringify(data).substring(0, 100));
106
+ console.error(
107
+ '[MCP WebSocket] Not connected, skipping broadcast:',
108
+ JSON.stringify(data).substring(0, 100),
109
+ );
109
110
  return;
110
111
  }
111
112
 
112
113
  try {
113
114
  const message = JSON.stringify(data);
114
- console.error("[MCP WebSocket] Broadcasting:", message.substring(0, 100));
115
+ console.error('[MCP WebSocket] Broadcasting:', message.substring(0, 100));
115
116
  client.send(message);
116
117
  } catch (error) {
117
- console.error("[MCP WebSocket] Failed to send message:", error);
118
+ console.error('[MCP WebSocket] Failed to send message:', error);
118
119
  }
119
120
  }
120
121
 
@@ -133,5 +134,7 @@ export function disconnect() {
133
134
  }
134
135
  }
135
136
 
136
- // Attempt initial connection when module is imported
137
- connectToServer();
137
+ // Connect lazily skip during build
138
+ if (process.env.NEXT_PHASE !== 'phase-production-build') {
139
+ connectToServer();
140
+ }
@@ -11,15 +11,17 @@
11
11
  ## Scope
12
12
 
13
13
  ### In Scope
14
- -
14
+
15
+ -
15
16
 
16
17
  ### Out of Scope
17
- -
18
+
19
+ -
18
20
 
19
21
  ## Success Criteria
20
22
 
21
- -
23
+ -
22
24
 
23
25
  ## Risks & Assumptions
24
26
 
25
- -
27
+ -
@@ -3,15 +3,18 @@
3
3
  ## 1. Delivery Overview
4
4
 
5
5
  ### 1.1 Objective
6
+
6
7
  <Deliver backend/API changes with contract safety and operational confidence.>
7
8
 
8
9
  ### 1.2 In-Scope Outcomes
10
+
9
11
  - <Service/API behavior outcome>
10
12
  - <Data or migration outcome>
11
13
 
12
14
  ## 2. Task Cards
13
15
 
14
16
  ### 2.1 Task: <short-task-title>
17
+
15
18
  - [ ] **Status**
16
19
  - **Task ID:** `<T1>`
17
20
  - **Owner Type:** `agent`
@@ -22,14 +25,17 @@
22
25
  <Concrete backend/API goal>
23
26
 
24
27
  **Implementation Targets**
28
+
25
29
  - Files to create/update:
26
30
  - `<path>`
27
31
 
28
32
  **Validation**
33
+
29
34
  - Automated tests to add/update:
30
35
  - `<test file>`
31
36
 
32
37
  **Task Summary**
38
+
33
39
  - Completed: <!-- yes/no -->
34
40
  - What was done: <!-- brief description -->
35
41
  - Files changed: <!-- list key files -->
@@ -11,15 +11,17 @@
11
11
  ## Scope
12
12
 
13
13
  ### In Scope
14
- -
14
+
15
+ -
15
16
 
16
17
  ### Out of Scope
17
- -
18
+
19
+ -
18
20
 
19
21
  ## Success Criteria
20
22
 
21
- -
23
+ -
22
24
 
23
25
  ## Risks & Assumptions
24
26
 
25
- -
27
+ -
@@ -3,15 +3,18 @@
3
3
  ## 1. Delivery Overview
4
4
 
5
5
  ### 1.1 Objective
6
+
6
7
  <Deliver trustworthy data pipeline/model changes with lineage and quality controls.>
7
8
 
8
9
  ### 1.2 In-Scope Outcomes
10
+
9
11
  - <Pipeline/model outcome>
10
12
  - <Data quality/SLA outcome>
11
13
 
12
14
  ## 2. Task Cards
13
15
 
14
16
  ### 2.1 Task: <short-task-title>
17
+
15
18
  - [ ] **Status**
16
19
  - **Task ID:** `<T1>`
17
20
  - **Owner Type:** `agent`
@@ -22,14 +25,17 @@
22
25
  <Concrete data engineering goal>
23
26
 
24
27
  **Implementation Targets**
28
+
25
29
  - Files to create/update:
26
30
  - `<path>`
27
31
 
28
32
  **Validation**
33
+
29
34
  - Automated tests to add/update:
30
35
  - `<test file>`
31
36
 
32
37
  **Task Summary**
38
+
33
39
  - Completed: <!-- yes/no -->
34
40
  - What was done: <!-- brief description -->
35
41
  - Files changed: <!-- list key files -->
@@ -11,15 +11,17 @@
11
11
  ## Scope
12
12
 
13
13
  ### In Scope
14
- -
14
+
15
+ -
15
16
 
16
17
  ### Out of Scope
17
- -
18
+
19
+ -
18
20
 
19
21
  ## Success Criteria
20
22
 
21
- -
23
+ -
22
24
 
23
25
  ## Risks & Assumptions
24
26
 
25
- -
27
+ -
@@ -3,15 +3,18 @@
3
3
  ## 1. Delivery Overview
4
4
 
5
5
  ### 1.1 Objective
6
+
6
7
  <Deliver safe platform/devops changes with clear deployment and rollback confidence.>
7
8
 
8
9
  ### 1.2 In-Scope Outcomes
10
+
9
11
  - <Infrastructure/deployment outcome>
10
12
  - <Reliability/security outcome>
11
13
 
12
14
  ## 2. Task Cards
13
15
 
14
16
  ### 2.1 Task: <short-task-title>
17
+
15
18
  - [ ] **Status**
16
19
  - **Task ID:** `<T1>`
17
20
  - **Owner Type:** `agent`
@@ -22,14 +25,17 @@
22
25
  <Concrete devops/platform goal>
23
26
 
24
27
  **Implementation Targets**
28
+
25
29
  - Files to create/update:
26
30
  - `<path>`
27
31
 
28
32
  **Validation**
33
+
29
34
  - Automated tests to add/update:
30
35
  - `<test file>`
31
36
 
32
37
  **Task Summary**
38
+
33
39
  - Completed: <!-- yes/no -->
34
40
  - What was done: <!-- brief description -->
35
41
  - Files changed: <!-- list key files -->
@@ -11,15 +11,17 @@
11
11
  ## Scope
12
12
 
13
13
  ### In Scope
14
- -
14
+
15
+ -
15
16
 
16
17
  ### Out of Scope
17
- -
18
+
19
+ -
18
20
 
19
21
  ## Success Criteria
20
22
 
21
- -
23
+ -
22
24
 
23
25
  ## Risks & Assumptions
24
26
 
25
- -
27
+ -
@@ -3,15 +3,18 @@
3
3
  ## 1. Delivery Overview
4
4
 
5
5
  ### 1.1 Objective
6
+
6
7
  <Deliver the frontend/product experience safely with measurable UX outcomes.>
7
8
 
8
9
  ### 1.2 In-Scope Outcomes
10
+
9
11
  - <UI/UX outcome>
10
12
  - <Behavior/API consumption outcome>
11
13
 
12
14
  ## 2. Task Cards
13
15
 
14
16
  ### 2.1 Task: <short-task-title>
17
+
15
18
  - [ ] **Status**
16
19
  - **Task ID:** `<T1>`
17
20
  - **Owner Type:** `agent`
@@ -22,14 +25,17 @@
22
25
  <Concrete frontend/product goal>
23
26
 
24
27
  **Implementation Targets**
28
+
25
29
  - Files to create/update:
26
30
  - `<path>`
27
31
 
28
32
  **Validation**
33
+
29
34
  - Automated tests to add/update:
30
35
  - `<test file>`
31
36
 
32
37
  **Task Summary**
38
+
33
39
  - Completed: <!-- yes/no -->
34
40
  - What was done: <!-- brief description -->
35
41
  - Files changed: <!-- list key files -->
@@ -11,15 +11,17 @@
11
11
  ## Scope
12
12
 
13
13
  ### In Scope
14
- -
14
+
15
+ -
15
16
 
16
17
  ### Out of Scope
17
- -
18
+
19
+ -
18
20
 
19
21
  ## Success Criteria
20
22
 
21
- -
23
+ -
22
24
 
23
25
  ## Risks & Assumptions
24
26
 
25
- -
27
+ -
@@ -4,6 +4,7 @@
4
4
  <!-- Tasks will be parsed and promoted to the Kanban board -->
5
5
 
6
6
  ## How To Use This File
7
+
7
8
  - Create one task card per meaningful unit of delivery.
8
9
  - Keep tasks dependency-ordered and independently executable where possible.
9
10
  - Every task card must include enough context that a new agent can execute it without re-discovery work.
@@ -12,21 +13,26 @@
12
13
  ## 1. Delivery Overview
13
14
 
14
15
  ### 1.1 Objective
16
+
15
17
  <One-paragraph summary of what this change delivers and why it matters.>
16
18
 
17
19
  ### 1.2 In-Scope Outcomes
20
+
18
21
  - <Outcome 1>
19
22
  - <Outcome 2>
20
23
 
21
24
  ### 1.3 Non-Goals
25
+
22
26
  - <Non-goal 1>
23
27
  - <Non-goal 2>
24
28
 
25
29
  ### 1.4 Global Constraints
30
+
26
31
  - <Technical or product constraints that apply to all tasks>
27
32
  - <Compatibility/performance/security constraints>
28
33
 
29
34
  ### 1.5 Shared References
35
+
30
36
  - Proposal: `specflow/changes/<change-name>/proposal.md`
31
37
  - Design: `specflow/changes/<change-name>/design.md`
32
38
  - Specs: `specflow/changes/<change-name>/specs/spec.md`
@@ -37,6 +43,7 @@
37
43
  ## 2. Task Cards
38
44
 
39
45
  ### 2.1 Task: <short-task-title>
46
+
40
47
  - [ ] **Status**
41
48
  - **Task ID:** `<T1>`
42
49
  - **Owner Type:** `<agent|human|either>`
@@ -50,6 +57,7 @@
50
57
  <Domain and technical context required before editing. Include key assumptions.>
51
58
 
52
59
  **Scope**
60
+
53
61
  - In scope:
54
62
  - <item>
55
63
  - <item>
@@ -57,6 +65,7 @@
57
65
  - <item>
58
66
 
59
67
  **Implementation Targets**
68
+
60
69
  - Files to create/update:
61
70
  - `<path>`
62
71
  - `<path>`
@@ -64,11 +73,13 @@
64
73
  - `<API/type/command>`
65
74
 
66
75
  **Execution Steps**
76
+
67
77
  1. <Step 1 with expected output>
68
78
  2. <Step 2 with expected output>
69
79
  3. <Step 3 with expected output>
70
80
 
71
81
  **Validation**
82
+
72
83
  - Automated tests to add/update:
73
84
  - `<test file>`
74
85
  - Commands to run:
@@ -78,10 +89,12 @@
78
89
  - <check>
79
90
 
80
91
  **Acceptance Criteria**
92
+
81
93
  - <Measurable criterion 1>
82
94
  - <Measurable criterion 2>
83
95
 
84
96
  **Risks and Mitigations**
97
+
85
98
  - Risk: <risk>
86
99
  - Mitigation: <mitigation>
87
100
 
@@ -89,7 +102,9 @@
89
102
  <What the next task/agent should know, including outputs and unresolved items.>
90
103
 
91
104
  **Task Summary**
105
+
92
106
  <!-- To be filled by the agent after completing this task -->
107
+
93
108
  - Completed: <!-- yes/no -->
94
109
  - What was done: <!-- brief description -->
95
110
  - Files changed: <!-- list key files -->
@@ -97,6 +112,7 @@
97
112
  - Follow-ups: <!-- items deferred or discovered during implementation -->
98
113
 
99
114
  ### 2.2 Task: <short-task-title>
115
+
100
116
  - [ ] **Status**
101
117
  - **Task ID:** `<T2>`
102
118
  - **Owner Type:** `<agent|human|either>`
@@ -110,6 +126,7 @@
110
126
  <Domain and technical context required before editing. Include key assumptions.>
111
127
 
112
128
  **Scope**
129
+
113
130
  - In scope:
114
131
  - <item>
115
132
  - <item>
@@ -117,6 +134,7 @@
117
134
  - <item>
118
135
 
119
136
  **Implementation Targets**
137
+
120
138
  - Files to create/update:
121
139
  - `<path>`
122
140
  - `<path>`
@@ -124,11 +142,13 @@
124
142
  - `<API/type/command>`
125
143
 
126
144
  **Execution Steps**
145
+
127
146
  1. <Step 1 with expected output>
128
147
  2. <Step 2 with expected output>
129
148
  3. <Step 3 with expected output>
130
149
 
131
150
  **Validation**
151
+
132
152
  - Automated tests to add/update:
133
153
  - `<test file>`
134
154
  - Commands to run:
@@ -138,10 +158,12 @@
138
158
  - <check>
139
159
 
140
160
  **Acceptance Criteria**
161
+
141
162
  - <Measurable criterion 1>
142
163
  - <Measurable criterion 2>
143
164
 
144
165
  **Risks and Mitigations**
166
+
145
167
  - Risk: <risk>
146
168
  - Mitigation: <mitigation>
147
169
 
@@ -149,7 +171,9 @@
149
171
  <What the next task/agent should know, including outputs and unresolved items.>
150
172
 
151
173
  **Task Summary**
174
+
152
175
  <!-- To be filled by the agent after completing this task -->
176
+
153
177
  - Completed: <!-- yes/no -->
154
178
  - What was done: <!-- brief description -->
155
179
  - Files changed: <!-- list key files -->
@@ -157,12 +181,14 @@
157
181
  - Follow-ups: <!-- items deferred or discovered during implementation -->
158
182
 
159
183
  ## 3. Cross-Task Verification
184
+
160
185
  - [ ] End-to-end behavior matches `specs/spec.md` requirements and scenarios.
161
186
  - [ ] All affected tests are updated and passing.
162
187
  - [ ] User-facing docs and command help are updated where behavior changed.
163
188
  - [ ] Rollback path is documented for risky changes.
164
189
 
165
190
  ## 4. Completion Gate
191
+
166
192
  - [ ] All task cards are checked complete.
167
193
  - [ ] `node bin/specflow.js validate --change <change-name>` passes.
168
194
  - [ ] Implementation summary and follow-up items are recorded in handoff notes.
@@ -1,5 +1,5 @@
1
- import { WebSocketServer, WebSocket } from "ws";
2
- import { createConnection } from "net";
1
+ import { WebSocketServer, WebSocket } from 'ws';
2
+ import { createConnection } from 'net';
3
3
 
4
4
  let wss: WebSocketServer | null = null;
5
5
  const clients = new Set<WebSocket>();
@@ -25,7 +25,7 @@ function isPortInUse(port: number): Promise<boolean> {
25
25
  client.end();
26
26
  resolve(true);
27
27
  });
28
- client.on("error", () => {
28
+ client.on('error', () => {
29
29
  resolve(false);
30
30
  });
31
31
  });
@@ -46,28 +46,30 @@ export async function startWebSocketServer(port?: number): Promise<WebSocketServ
46
46
  try {
47
47
  wss = new WebSocketServer({ port: wsPort });
48
48
 
49
- wss.on("connection", (ws) => {
49
+ wss.on('connection', (ws) => {
50
50
  clients.add(ws);
51
51
  console.log(`[WebSocket] Client connected (total: ${clients.size})`);
52
52
 
53
- ws.on("message", (data) => {
53
+ ws.on('message', (data) => {
54
54
  try {
55
55
  const message = data.toString();
56
56
  const parsed = JSON.parse(message);
57
57
 
58
58
  // Identity handshake: MCP clients announce themselves
59
- if (parsed.type === "identify" && parsed.role === "mcp") {
60
- const agentName = parsed.agent || "Unknown Agent";
59
+ if (parsed.type === 'identify' && parsed.role === 'mcp') {
60
+ const agentName = parsed.agent || 'Unknown Agent';
61
61
  const prev = agentClients.get(ws);
62
62
  agentClients.set(ws, agentName);
63
63
  if (prev !== agentName) {
64
- console.log(`[WebSocket] MCP agent identified: ${agentName} (agents: ${agentClients.size})`);
64
+ console.log(
65
+ `[WebSocket] MCP agent identified: ${agentName} (agents: ${agentClients.size})`,
66
+ );
65
67
  broadcastAgentList();
66
68
  }
67
69
  return;
68
70
  }
69
71
 
70
- console.log("[WebSocket] Relaying message:", message.substring(0, 100));
72
+ console.log('[WebSocket] Relaying message:', message.substring(0, 100));
71
73
  // Relay to all non-sender clients (browser UIs)
72
74
  clients.forEach((client) => {
73
75
  if (client !== ws && client.readyState === WebSocket.OPEN) {
@@ -75,11 +77,11 @@ export async function startWebSocketServer(port?: number): Promise<WebSocketServ
75
77
  }
76
78
  });
77
79
  } catch (error) {
78
- console.error("[WebSocket] Error relaying message:", error);
80
+ console.error('[WebSocket] Error relaying message:', error);
79
81
  }
80
82
  });
81
83
 
82
- ws.on("close", () => {
84
+ ws.on('close', () => {
83
85
  const wasAgent = agentClients.has(ws);
84
86
  agentClients.delete(ws);
85
87
  clients.delete(ws);
@@ -90,18 +92,18 @@ export async function startWebSocketServer(port?: number): Promise<WebSocketServ
90
92
  }
91
93
  });
92
94
 
93
- ws.on("error", (error) => {
94
- console.error("[WebSocket] Client error:", error);
95
+ ws.on('error', (error) => {
96
+ console.error('[WebSocket] Client error:', error);
95
97
  agentClients.delete(ws);
96
98
  clients.delete(ws);
97
99
  });
98
100
  });
99
101
 
100
- wss.on("error", (error: NodeJS.ErrnoException) => {
101
- if (error.code === "EADDRINUSE") {
102
+ wss.on('error', (error: NodeJS.ErrnoException) => {
103
+ if (error.code === 'EADDRINUSE') {
102
104
  console.log(`[WebSocket] Port ${wsPort} already in use, skipping`);
103
105
  } else {
104
- console.error("[WebSocket] Server error:", error);
106
+ console.error('[WebSocket] Server error:', error);
105
107
  }
106
108
  wss = null;
107
109
  });
@@ -124,7 +126,7 @@ export async function startWebSocketServer(port?: number): Promise<WebSocketServ
124
126
 
125
127
  console.log(`[WebSocket] Server started on port ${wsPort}`);
126
128
  } catch (error) {
127
- console.error("[WebSocket] Failed to start server:", error);
129
+ console.error('[WebSocket] Failed to start server:', error);
128
130
  return null;
129
131
  }
130
132
 
@@ -149,7 +151,7 @@ export function getAgentList(): string[] {
149
151
 
150
152
  function broadcastAgentList() {
151
153
  const agents = getAgentList();
152
- const msg = JSON.stringify({ type: "agent_count", count: agents.length, agents });
154
+ const msg = JSON.stringify({ type: 'agent_count', count: agents.length, agents });
153
155
  clients.forEach((client) => {
154
156
  if (!agentClients.has(client) && client.readyState === WebSocket.OPEN) {
155
157
  client.send(msg);
@@ -1,11 +1,7 @@
1
1
  {
2
2
  "compilerOptions": {
3
3
  "target": "ES2017",
4
- "lib": [
5
- "dom",
6
- "dom.iterable",
7
- "esnext"
8
- ],
4
+ "lib": ["dom", "dom.iterable", "esnext"],
9
5
  "allowJs": true,
10
6
  "skipLibCheck": true,
11
7
  "strict": true,
@@ -23,9 +19,7 @@
23
19
  }
24
20
  ],
25
21
  "paths": {
26
- "@/*": [
27
- "./src/*"
28
- ]
22
+ "@/*": ["./src/*"]
29
23
  }
30
24
  },
31
25
  "include": [
@@ -35,8 +29,5 @@
35
29
  ".next/types/**/*.ts",
36
30
  ".next/dev/types/**/*.ts"
37
31
  ],
38
- "exclude": [
39
- "node_modules",
40
- "**/*.test.ts"
41
- ]
32
+ "exclude": ["node_modules", "**/*.test.ts"]
42
33
  }