gsd-pi 2.50.0-dev.d210a87 → 2.50.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 (509) hide show
  1. package/README.md +0 -2
  2. package/dist/cli.js +0 -26
  3. package/dist/loader.js +0 -4
  4. package/dist/resource-loader.d.ts +1 -4
  5. package/dist/resource-loader.js +3 -138
  6. package/dist/resources/extensions/async-jobs/async-bash-tool.js +1 -3
  7. package/dist/resources/extensions/bg-shell/interaction.js +1 -3
  8. package/dist/resources/extensions/bg-shell/process-manager.js +1 -4
  9. package/dist/resources/extensions/claude-code-cli/partial-builder.js +0 -5
  10. package/dist/resources/extensions/gsd/auto/phases.js +1 -16
  11. package/dist/resources/extensions/gsd/auto/session.js +0 -5
  12. package/dist/resources/extensions/gsd/auto-dashboard.js +3 -22
  13. package/dist/resources/extensions/gsd/auto-dispatch.js +54 -81
  14. package/dist/resources/extensions/gsd/auto-post-unit.js +76 -37
  15. package/dist/resources/extensions/gsd/auto-prompts.js +0 -57
  16. package/dist/resources/extensions/gsd/auto-recovery.js +25 -21
  17. package/dist/resources/extensions/gsd/auto.js +5 -15
  18. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +0 -16
  19. package/dist/resources/extensions/gsd/crash-recovery.js +2 -6
  20. package/dist/resources/extensions/gsd/custom-execution-policy.js +2 -3
  21. package/dist/resources/extensions/gsd/custom-verification.js +1 -3
  22. package/dist/resources/extensions/gsd/custom-workflow-engine.js +2 -3
  23. package/dist/resources/extensions/gsd/dashboard-overlay.js +0 -4
  24. package/dist/resources/extensions/gsd/detection.js +3 -589
  25. package/dist/resources/extensions/gsd/dispatch-guard.js +1 -2
  26. package/dist/resources/extensions/gsd/docs/preferences-reference.md +0 -15
  27. package/dist/resources/extensions/gsd/files.js +1 -5
  28. package/dist/resources/extensions/gsd/guided-flow.js +0 -10
  29. package/dist/resources/extensions/gsd/init-wizard.js +1 -9
  30. package/dist/resources/extensions/gsd/model-router.js +0 -25
  31. package/dist/resources/extensions/gsd/notifications.js +0 -23
  32. package/dist/resources/extensions/gsd/preferences-skills.js +5 -11
  33. package/dist/resources/extensions/gsd/preferences-types.js +0 -1
  34. package/dist/resources/extensions/gsd/preferences-validation.js +0 -25
  35. package/dist/resources/extensions/gsd/preferences.js +0 -3
  36. package/dist/resources/extensions/gsd/prompts/forensics.md +7 -11
  37. package/dist/resources/extensions/gsd/prompts/validate-milestone.md +1 -6
  38. package/dist/resources/extensions/gsd/provider-error-pause.js +0 -8
  39. package/dist/resources/extensions/gsd/rule-registry.js +11 -10
  40. package/dist/resources/extensions/gsd/session-forensics.js +3 -7
  41. package/dist/resources/extensions/gsd/skill-discovery.js +2 -3
  42. package/dist/resources/extensions/gsd/skill-health.js +2 -2
  43. package/dist/resources/extensions/gsd/skill-telemetry.js +5 -15
  44. package/dist/resources/extensions/gsd/state.js +5 -17
  45. package/dist/resources/extensions/gsd/templates/milestone-validation.md +0 -12
  46. package/dist/resources/extensions/gsd/templates/preferences.md +0 -2
  47. package/dist/resources/extensions/gsd/tests/dist-redirect.mjs +9 -28
  48. package/dist/resources/extensions/gsd/undo.js +7 -8
  49. package/dist/resources/extensions/gsd/unit-runtime.js +1 -2
  50. package/dist/resources/extensions/gsd/verification-gate.js +1 -3
  51. package/dist/web/standalone/.next/BUILD_ID +1 -1
  52. package/dist/web/standalone/.next/app-path-routes-manifest.json +16 -17
  53. package/dist/web/standalone/.next/build-manifest.json +4 -4
  54. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  55. package/dist/web/standalone/.next/react-loadable-manifest.json +2 -2
  56. package/dist/web/standalone/.next/required-server-files.json +3 -3
  57. package/dist/web/standalone/.next/routes-manifest.json +0 -6
  58. package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
  59. package/dist/web/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
  60. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  61. package/dist/web/standalone/.next/server/app/_global-error.html +2 -2
  62. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  63. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  64. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  65. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  66. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  67. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  68. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  69. package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
  70. package/dist/web/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  71. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  72. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  73. package/dist/web/standalone/.next/server/app/_not-found.rsc +4 -4
  74. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +4 -4
  75. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  76. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +4 -4
  77. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  78. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  79. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  80. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  81. package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
  82. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  83. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  84. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
  85. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  86. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  87. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
  88. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  89. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
  90. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
  91. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  92. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
  93. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js.nft.json +1 -1
  94. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  95. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  96. package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
  97. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  98. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  99. package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
  100. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  101. package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
  102. package/dist/web/standalone/.next/server/app/api/dev-mode/route.js.nft.json +1 -1
  103. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  104. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  105. package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
  106. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  107. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  108. package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
  109. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  110. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  111. package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  112. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  113. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  114. package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
  115. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  116. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  117. package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  118. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  119. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  120. package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
  121. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  122. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  123. package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
  124. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  125. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  126. package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
  127. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  128. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  129. package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
  130. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  131. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  132. package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
  133. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  134. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  135. package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
  136. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  137. package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
  138. package/dist/web/standalone/.next/server/app/api/preferences/route.js.nft.json +1 -1
  139. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  140. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  141. package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  142. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  143. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  144. package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
  145. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  146. package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +26 -2
  147. package/dist/web/standalone/.next/server/app/api/remote-questions/route.js.nft.json +1 -1
  148. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  149. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  150. package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
  151. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  152. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  153. package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
  154. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  155. package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
  156. package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
  157. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  158. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  159. package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
  160. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  161. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  162. package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
  163. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  164. package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
  165. package/dist/web/standalone/.next/server/app/api/shutdown/route.js.nft.json +1 -1
  166. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  167. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  168. package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
  169. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  170. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  171. package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
  172. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  173. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  174. package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
  175. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  176. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +2 -2
  177. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js.nft.json +1 -1
  178. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  179. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
  180. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js.nft.json +1 -1
  181. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  182. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +2 -2
  183. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
  184. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  185. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +4 -4
  186. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
  187. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  188. package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
  189. package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js.nft.json +1 -1
  190. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  191. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  192. package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
  193. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  194. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  195. package/dist/web/standalone/.next/server/app/api/update/route.js.nft.json +1 -1
  196. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  197. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  198. package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
  199. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  200. package/dist/web/standalone/.next/server/app/index.html +1 -1
  201. package/dist/web/standalone/.next/server/app/index.rsc +5 -5
  202. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  203. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +5 -5
  204. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  205. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +4 -4
  206. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  207. package/dist/web/standalone/.next/server/app/page.js +2 -2
  208. package/dist/web/standalone/.next/server/app/page.js.nft.json +1 -1
  209. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  210. package/dist/web/standalone/.next/server/app-paths-manifest.json +16 -17
  211. package/dist/web/standalone/.next/server/chunks/229.js +12 -0
  212. package/dist/web/standalone/.next/server/chunks/441.js +2 -0
  213. package/dist/web/standalone/.next/server/chunks/471.js +13 -0
  214. package/dist/web/standalone/.next/server/chunks/{4741.js → 741.js} +1 -1
  215. package/dist/web/standalone/.next/server/functions-config-manifest.json +0 -1
  216. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  217. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  218. package/dist/web/standalone/.next/server/middleware.js +3 -3
  219. package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
  220. package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
  221. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  222. package/dist/web/standalone/.next/server/pages/500.html +2 -2
  223. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  224. package/dist/web/standalone/.next/server/webpack-runtime.js +1 -1
  225. package/dist/web/standalone/.next/static/MQOhBnkC_TLtNn_JvZWDj/_buildManifest.js +1 -0
  226. package/dist/web/standalone/.next/static/chunks/4024.7c75ac378de0f2b5.js +9 -0
  227. package/dist/web/standalone/.next/static/chunks/{2008.817d0885545aaea9.js → 485.243af25f0cdf50d6.js} +6 -6
  228. package/dist/web/standalone/.next/static/chunks/app/_global-error/page-d83ba70a25a85472.js +1 -0
  229. package/dist/web/standalone/.next/static/chunks/app/_not-found/{page-f2a7482d42a5614b.js → page-2f24283c162b6ab3.js} +1 -1
  230. package/dist/web/standalone/.next/static/chunks/app/api/boot/route-d83ba70a25a85472.js +1 -0
  231. package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/input/route-d83ba70a25a85472.js +1 -0
  232. package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/resize/route-d83ba70a25a85472.js +1 -0
  233. package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/stream/route-d83ba70a25a85472.js +1 -0
  234. package/dist/web/standalone/.next/static/chunks/app/api/browse-directories/route-d83ba70a25a85472.js +1 -0
  235. package/dist/web/standalone/.next/static/chunks/app/api/captures/route-d83ba70a25a85472.js +1 -0
  236. package/dist/web/standalone/.next/static/chunks/app/api/cleanup/route-d83ba70a25a85472.js +1 -0
  237. package/dist/web/standalone/.next/static/chunks/app/api/dev-mode/route-d83ba70a25a85472.js +1 -0
  238. package/dist/web/standalone/.next/static/chunks/app/api/doctor/route-d83ba70a25a85472.js +1 -0
  239. package/dist/web/standalone/.next/static/chunks/app/api/export-data/route-d83ba70a25a85472.js +1 -0
  240. package/dist/web/standalone/.next/static/chunks/app/api/files/route-d83ba70a25a85472.js +1 -0
  241. package/dist/web/standalone/.next/static/chunks/app/api/forensics/route-d83ba70a25a85472.js +1 -0
  242. package/dist/web/standalone/.next/static/chunks/app/api/git/route-d83ba70a25a85472.js +1 -0
  243. package/dist/web/standalone/.next/static/chunks/app/api/history/route-d83ba70a25a85472.js +1 -0
  244. package/dist/web/standalone/.next/static/chunks/app/api/hooks/route-d83ba70a25a85472.js +1 -0
  245. package/dist/web/standalone/.next/static/chunks/app/api/inspect/route-d83ba70a25a85472.js +1 -0
  246. package/dist/web/standalone/.next/static/chunks/app/api/knowledge/route-d83ba70a25a85472.js +1 -0
  247. package/dist/web/standalone/.next/static/chunks/app/api/live-state/route-d83ba70a25a85472.js +1 -0
  248. package/dist/web/standalone/.next/static/chunks/app/api/onboarding/route-d83ba70a25a85472.js +1 -0
  249. package/dist/web/standalone/.next/static/chunks/app/api/preferences/route-d83ba70a25a85472.js +1 -0
  250. package/dist/web/standalone/.next/static/chunks/app/api/projects/route-d83ba70a25a85472.js +1 -0
  251. package/dist/web/standalone/.next/static/chunks/app/api/recovery/route-d83ba70a25a85472.js +1 -0
  252. package/dist/web/standalone/.next/static/chunks/app/api/remote-questions/route-d83ba70a25a85472.js +1 -0
  253. package/dist/web/standalone/.next/static/chunks/app/api/session/browser/route-d83ba70a25a85472.js +1 -0
  254. package/dist/web/standalone/.next/static/chunks/app/api/session/command/route-d83ba70a25a85472.js +1 -0
  255. package/dist/web/standalone/.next/static/chunks/app/api/session/events/route-d83ba70a25a85472.js +1 -0
  256. package/dist/web/standalone/.next/static/chunks/app/api/session/manage/route-d83ba70a25a85472.js +1 -0
  257. package/dist/web/standalone/.next/static/chunks/app/api/settings-data/route-d83ba70a25a85472.js +1 -0
  258. package/dist/web/standalone/.next/static/chunks/app/api/shutdown/route-d83ba70a25a85472.js +1 -0
  259. package/dist/web/standalone/.next/static/chunks/app/api/skill-health/route-d83ba70a25a85472.js +1 -0
  260. package/dist/web/standalone/.next/static/chunks/app/api/steer/route-d83ba70a25a85472.js +1 -0
  261. package/dist/web/standalone/.next/static/chunks/app/api/switch-root/route-d83ba70a25a85472.js +1 -0
  262. package/dist/web/standalone/.next/static/chunks/app/api/terminal/input/route-d83ba70a25a85472.js +1 -0
  263. package/dist/web/standalone/.next/static/chunks/app/api/terminal/resize/route-d83ba70a25a85472.js +1 -0
  264. package/dist/web/standalone/.next/static/chunks/app/api/terminal/sessions/route-d83ba70a25a85472.js +1 -0
  265. package/dist/web/standalone/.next/static/chunks/app/api/terminal/stream/route-d83ba70a25a85472.js +1 -0
  266. package/dist/web/standalone/.next/static/chunks/app/api/terminal/upload/route-d83ba70a25a85472.js +1 -0
  267. package/dist/web/standalone/.next/static/chunks/app/api/undo/route-d83ba70a25a85472.js +1 -0
  268. package/dist/web/standalone/.next/static/chunks/app/api/update/route-d83ba70a25a85472.js +1 -0
  269. package/dist/web/standalone/.next/static/chunks/app/api/visualizer/route-d83ba70a25a85472.js +1 -0
  270. package/dist/web/standalone/.next/static/chunks/app/{layout-a16c7a7ecdf0c2cf.js → layout-9ecfd95f343793f0.js} +1 -1
  271. package/dist/web/standalone/.next/static/chunks/app/page-12dd5ece0df4badc.js +1 -0
  272. package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +1 -0
  273. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-d83ba70a25a85472.js +1 -0
  274. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-d83ba70a25a85472.js +1 -0
  275. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +1 -0
  276. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-d83ba70a25a85472.js +1 -0
  277. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-d83ba70a25a85472.js +1 -0
  278. package/dist/web/standalone/.next/static/chunks/webpack-2473ce2c3879fff4.js +1 -0
  279. package/dist/web/standalone/.next/static/css/dd4ae3f58ac9b600.css +1 -0
  280. package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
  281. package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
  282. package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
  283. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +14 -14
  284. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +14 -14
  285. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +14 -14
  286. package/dist/web/standalone/server.js +1 -1
  287. package/package.json +1 -1
  288. package/packages/pi-ai/dist/types.d.ts +0 -1
  289. package/packages/pi-ai/dist/types.d.ts.map +1 -1
  290. package/packages/pi-ai/dist/types.js.map +1 -1
  291. package/packages/pi-ai/pnpm-lock.yaml +2022 -0
  292. package/packages/pi-ai/src/types.ts +1 -1
  293. package/packages/pi-coding-agent/dist/core/agent-session.d.ts +0 -1
  294. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  295. package/packages/pi-coding-agent/dist/core/agent-session.js +0 -1
  296. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  297. package/packages/pi-coding-agent/dist/core/bash-executor.d.ts +1 -3
  298. package/packages/pi-coding-agent/dist/core/bash-executor.d.ts.map +1 -1
  299. package/packages/pi-coding-agent/dist/core/bash-executor.js +1 -10
  300. package/packages/pi-coding-agent/dist/core/bash-executor.js.map +1 -1
  301. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +1 -1
  302. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
  303. package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
  304. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +0 -1
  305. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
  306. package/packages/pi-coding-agent/dist/core/extensions/runner.js +0 -13
  307. package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
  308. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +1 -19
  309. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
  310. package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
  311. package/packages/pi-coding-agent/dist/core/extensions/wrapper.d.ts.map +1 -1
  312. package/packages/pi-coding-agent/dist/core/extensions/wrapper.js +0 -8
  313. package/packages/pi-coding-agent/dist/core/extensions/wrapper.js.map +1 -1
  314. package/packages/pi-coding-agent/dist/core/package-manager.d.ts.map +1 -1
  315. package/packages/pi-coding-agent/dist/core/package-manager.js +1 -8
  316. package/packages/pi-coding-agent/dist/core/package-manager.js.map +1 -1
  317. package/packages/pi-coding-agent/dist/core/skills.d.ts +1 -11
  318. package/packages/pi-coding-agent/dist/core/skills.d.ts.map +1 -1
  319. package/packages/pi-coding-agent/dist/core/skills.js +8 -30
  320. package/packages/pi-coding-agent/dist/core/skills.js.map +1 -1
  321. package/packages/pi-coding-agent/dist/core/slash-commands.d.ts.map +1 -1
  322. package/packages/pi-coding-agent/dist/core/slash-commands.js +0 -1
  323. package/packages/pi-coding-agent/dist/core/slash-commands.js.map +1 -1
  324. package/packages/pi-coding-agent/dist/index.d.ts +2 -2
  325. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  326. package/packages/pi-coding-agent/dist/index.js +1 -1
  327. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  328. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
  329. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +2 -3
  330. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
  331. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  332. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +4 -6
  333. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  334. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts +0 -5
  335. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts.map +1 -1
  336. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js +0 -12
  337. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js.map +1 -1
  338. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts.map +1 -1
  339. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +1 -2
  340. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -1
  341. package/packages/pi-coding-agent/pnpm-lock.yaml +454 -0
  342. package/packages/pi-coding-agent/src/core/agent-session.ts +1 -2
  343. package/packages/pi-coding-agent/src/core/bash-executor.ts +2 -10
  344. package/packages/pi-coding-agent/src/core/extensions/index.ts +0 -2
  345. package/packages/pi-coding-agent/src/core/extensions/runner.ts +0 -18
  346. package/packages/pi-coding-agent/src/core/extensions/types.ts +0 -21
  347. package/packages/pi-coding-agent/src/core/extensions/wrapper.ts +0 -9
  348. package/packages/pi-coding-agent/src/core/package-manager.ts +1 -10
  349. package/packages/pi-coding-agent/src/core/skills.ts +10 -35
  350. package/packages/pi-coding-agent/src/core/slash-commands.ts +0 -1
  351. package/packages/pi-coding-agent/src/index.ts +0 -4
  352. package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +2 -3
  353. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +4 -6
  354. package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.ts +0 -15
  355. package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +1 -2
  356. package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -1
  357. package/pkg/dist/modes/interactive/theme/themes.js +1 -2
  358. package/pkg/dist/modes/interactive/theme/themes.js.map +1 -1
  359. package/scripts/postinstall.js +6 -163
  360. package/src/resources/extensions/async-jobs/async-bash-tool.ts +1 -3
  361. package/src/resources/extensions/bg-shell/interaction.ts +1 -3
  362. package/src/resources/extensions/bg-shell/process-manager.ts +1 -4
  363. package/src/resources/extensions/claude-code-cli/partial-builder.ts +0 -5
  364. package/src/resources/extensions/gsd/auto/phases.ts +1 -15
  365. package/src/resources/extensions/gsd/auto/session.ts +0 -6
  366. package/src/resources/extensions/gsd/auto-dashboard.ts +3 -31
  367. package/src/resources/extensions/gsd/auto-dispatch.ts +51 -84
  368. package/src/resources/extensions/gsd/auto-post-unit.ts +83 -56
  369. package/src/resources/extensions/gsd/auto-prompts.ts +0 -48
  370. package/src/resources/extensions/gsd/auto-recovery.ts +26 -19
  371. package/src/resources/extensions/gsd/auto.ts +5 -15
  372. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +0 -17
  373. package/src/resources/extensions/gsd/crash-recovery.ts +2 -6
  374. package/src/resources/extensions/gsd/custom-execution-policy.ts +2 -3
  375. package/src/resources/extensions/gsd/custom-verification.ts +1 -3
  376. package/src/resources/extensions/gsd/custom-workflow-engine.ts +2 -3
  377. package/src/resources/extensions/gsd/dashboard-overlay.ts +0 -7
  378. package/src/resources/extensions/gsd/detection.ts +3 -662
  379. package/src/resources/extensions/gsd/dispatch-guard.ts +1 -2
  380. package/src/resources/extensions/gsd/docs/preferences-reference.md +0 -15
  381. package/src/resources/extensions/gsd/files.ts +1 -6
  382. package/src/resources/extensions/gsd/guided-flow.ts +0 -11
  383. package/src/resources/extensions/gsd/init-wizard.ts +1 -9
  384. package/src/resources/extensions/gsd/model-router.ts +0 -25
  385. package/src/resources/extensions/gsd/notifications.ts +0 -23
  386. package/src/resources/extensions/gsd/preferences-skills.ts +5 -11
  387. package/src/resources/extensions/gsd/preferences-types.ts +0 -20
  388. package/src/resources/extensions/gsd/preferences-validation.ts +0 -26
  389. package/src/resources/extensions/gsd/preferences.ts +0 -3
  390. package/src/resources/extensions/gsd/prompts/forensics.md +7 -11
  391. package/src/resources/extensions/gsd/prompts/validate-milestone.md +1 -6
  392. package/src/resources/extensions/gsd/provider-error-pause.ts +0 -9
  393. package/src/resources/extensions/gsd/rule-registry.ts +11 -10
  394. package/src/resources/extensions/gsd/session-forensics.ts +3 -7
  395. package/src/resources/extensions/gsd/skill-discovery.ts +2 -3
  396. package/src/resources/extensions/gsd/skill-health.ts +2 -2
  397. package/src/resources/extensions/gsd/skill-telemetry.ts +5 -15
  398. package/src/resources/extensions/gsd/state.ts +5 -16
  399. package/src/resources/extensions/gsd/templates/milestone-validation.md +0 -12
  400. package/src/resources/extensions/gsd/templates/preferences.md +0 -2
  401. package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +0 -16
  402. package/src/resources/extensions/gsd/tests/auto-lock-creation.test.ts +2 -2
  403. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +0 -68
  404. package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +2 -2
  405. package/src/resources/extensions/gsd/tests/crash-recovery.test.ts +3 -5
  406. package/src/resources/extensions/gsd/tests/custom-verification.test.ts +0 -33
  407. package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +3 -4
  408. package/src/resources/extensions/gsd/tests/detection.test.ts +0 -838
  409. package/src/resources/extensions/gsd/tests/dist-redirect.mjs +9 -28
  410. package/src/resources/extensions/gsd/tests/idle-recovery.test.ts +0 -63
  411. package/src/resources/extensions/gsd/tests/model-router.test.ts +0 -40
  412. package/src/resources/extensions/gsd/tests/notifications.test.ts +6 -28
  413. package/src/resources/extensions/gsd/tests/preferences.test.ts +0 -50
  414. package/src/resources/extensions/gsd/tests/queue-reorder-e2e.test.ts +0 -40
  415. package/src/resources/extensions/gsd/tests/reactive-executor.test.ts +6 -6
  416. package/src/resources/extensions/gsd/tests/retry-state-reset.test.ts +5 -4
  417. package/src/resources/extensions/gsd/tests/run-uat.test.ts +0 -146
  418. package/src/resources/extensions/gsd/tests/sidecar-queue.test.ts +12 -12
  419. package/src/resources/extensions/gsd/tests/terminated-transient.test.ts +0 -24
  420. package/src/resources/extensions/gsd/tests/triage-dispatch.test.ts +2 -2
  421. package/src/resources/extensions/gsd/types.ts +0 -2
  422. package/src/resources/extensions/gsd/undo.ts +7 -8
  423. package/src/resources/extensions/gsd/unit-runtime.ts +1 -2
  424. package/src/resources/extensions/gsd/verification-gate.ts +1 -3
  425. package/dist/resources/extensions/gsd/auto-observability.js +0 -54
  426. package/dist/resources/extensions/gsd/auto-utils.js +0 -20
  427. package/dist/resources/extensions/gsd/observability-validator.js +0 -422
  428. package/dist/resources/extensions/gsd/roadmap-mutations.js +0 -110
  429. package/dist/resources/extensions/gsd/rtk-status.js +0 -43
  430. package/dist/resources/extensions/gsd/skill-catalog.js +0 -1026
  431. package/dist/resources/extensions/shared/rtk-session-stats.js +0 -189
  432. package/dist/resources/extensions/shared/rtk.js +0 -100
  433. package/dist/rtk.d.ts +0 -52
  434. package/dist/rtk.js +0 -332
  435. package/dist/web/standalone/.next/server/app/api/experimental/route.js +0 -3
  436. package/dist/web/standalone/.next/server/app/api/experimental/route.js.nft.json +0 -1
  437. package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +0 -1
  438. package/dist/web/standalone/.next/server/chunks/2229.js +0 -12
  439. package/dist/web/standalone/.next/server/chunks/2331.js +0 -25
  440. package/dist/web/standalone/.next/server/chunks/5822.js +0 -2
  441. package/dist/web/standalone/.next/server/chunks/7471.js +0 -13
  442. package/dist/web/standalone/.next/static/chunks/4024.9ad5def014d90ce4.js +0 -9
  443. package/dist/web/standalone/.next/static/chunks/app/_global-error/page-c4cc189e7b117ea2.js +0 -1
  444. package/dist/web/standalone/.next/static/chunks/app/api/boot/route-c4cc189e7b117ea2.js +0 -1
  445. package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/input/route-c4cc189e7b117ea2.js +0 -1
  446. package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/resize/route-c4cc189e7b117ea2.js +0 -1
  447. package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/stream/route-c4cc189e7b117ea2.js +0 -1
  448. package/dist/web/standalone/.next/static/chunks/app/api/browse-directories/route-c4cc189e7b117ea2.js +0 -1
  449. package/dist/web/standalone/.next/static/chunks/app/api/captures/route-c4cc189e7b117ea2.js +0 -1
  450. package/dist/web/standalone/.next/static/chunks/app/api/cleanup/route-c4cc189e7b117ea2.js +0 -1
  451. package/dist/web/standalone/.next/static/chunks/app/api/dev-mode/route-c4cc189e7b117ea2.js +0 -1
  452. package/dist/web/standalone/.next/static/chunks/app/api/doctor/route-c4cc189e7b117ea2.js +0 -1
  453. package/dist/web/standalone/.next/static/chunks/app/api/experimental/route-c4cc189e7b117ea2.js +0 -1
  454. package/dist/web/standalone/.next/static/chunks/app/api/export-data/route-c4cc189e7b117ea2.js +0 -1
  455. package/dist/web/standalone/.next/static/chunks/app/api/files/route-c4cc189e7b117ea2.js +0 -1
  456. package/dist/web/standalone/.next/static/chunks/app/api/forensics/route-c4cc189e7b117ea2.js +0 -1
  457. package/dist/web/standalone/.next/static/chunks/app/api/git/route-c4cc189e7b117ea2.js +0 -1
  458. package/dist/web/standalone/.next/static/chunks/app/api/history/route-c4cc189e7b117ea2.js +0 -1
  459. package/dist/web/standalone/.next/static/chunks/app/api/hooks/route-c4cc189e7b117ea2.js +0 -1
  460. package/dist/web/standalone/.next/static/chunks/app/api/inspect/route-c4cc189e7b117ea2.js +0 -1
  461. package/dist/web/standalone/.next/static/chunks/app/api/knowledge/route-c4cc189e7b117ea2.js +0 -1
  462. package/dist/web/standalone/.next/static/chunks/app/api/live-state/route-c4cc189e7b117ea2.js +0 -1
  463. package/dist/web/standalone/.next/static/chunks/app/api/onboarding/route-c4cc189e7b117ea2.js +0 -1
  464. package/dist/web/standalone/.next/static/chunks/app/api/preferences/route-c4cc189e7b117ea2.js +0 -1
  465. package/dist/web/standalone/.next/static/chunks/app/api/projects/route-c4cc189e7b117ea2.js +0 -1
  466. package/dist/web/standalone/.next/static/chunks/app/api/recovery/route-c4cc189e7b117ea2.js +0 -1
  467. package/dist/web/standalone/.next/static/chunks/app/api/remote-questions/route-c4cc189e7b117ea2.js +0 -1
  468. package/dist/web/standalone/.next/static/chunks/app/api/session/browser/route-c4cc189e7b117ea2.js +0 -1
  469. package/dist/web/standalone/.next/static/chunks/app/api/session/command/route-c4cc189e7b117ea2.js +0 -1
  470. package/dist/web/standalone/.next/static/chunks/app/api/session/events/route-c4cc189e7b117ea2.js +0 -1
  471. package/dist/web/standalone/.next/static/chunks/app/api/session/manage/route-c4cc189e7b117ea2.js +0 -1
  472. package/dist/web/standalone/.next/static/chunks/app/api/settings-data/route-c4cc189e7b117ea2.js +0 -1
  473. package/dist/web/standalone/.next/static/chunks/app/api/shutdown/route-c4cc189e7b117ea2.js +0 -1
  474. package/dist/web/standalone/.next/static/chunks/app/api/skill-health/route-c4cc189e7b117ea2.js +0 -1
  475. package/dist/web/standalone/.next/static/chunks/app/api/steer/route-c4cc189e7b117ea2.js +0 -1
  476. package/dist/web/standalone/.next/static/chunks/app/api/switch-root/route-c4cc189e7b117ea2.js +0 -1
  477. package/dist/web/standalone/.next/static/chunks/app/api/terminal/input/route-c4cc189e7b117ea2.js +0 -1
  478. package/dist/web/standalone/.next/static/chunks/app/api/terminal/resize/route-c4cc189e7b117ea2.js +0 -1
  479. package/dist/web/standalone/.next/static/chunks/app/api/terminal/sessions/route-c4cc189e7b117ea2.js +0 -1
  480. package/dist/web/standalone/.next/static/chunks/app/api/terminal/stream/route-c4cc189e7b117ea2.js +0 -1
  481. package/dist/web/standalone/.next/static/chunks/app/api/terminal/upload/route-c4cc189e7b117ea2.js +0 -1
  482. package/dist/web/standalone/.next/static/chunks/app/api/undo/route-c4cc189e7b117ea2.js +0 -1
  483. package/dist/web/standalone/.next/static/chunks/app/api/update/route-c4cc189e7b117ea2.js +0 -1
  484. package/dist/web/standalone/.next/static/chunks/app/api/visualizer/route-c4cc189e7b117ea2.js +0 -1
  485. package/dist/web/standalone/.next/static/chunks/app/page-b950e4e384cc62b3.js +0 -1
  486. package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +0 -1
  487. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-c4cc189e7b117ea2.js +0 -1
  488. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-c4cc189e7b117ea2.js +0 -1
  489. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +0 -1
  490. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-c4cc189e7b117ea2.js +0 -1
  491. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-c4cc189e7b117ea2.js +0 -1
  492. package/dist/web/standalone/.next/static/chunks/webpack-cfc9a116e6450a6b.js +0 -1
  493. package/dist/web/standalone/.next/static/css/de141508b083f922.css +0 -1
  494. package/dist/web/standalone/.next/static/yJIyd5cXPNpmXTv18ZlyC/_buildManifest.js +0 -1
  495. package/src/resources/extensions/claude-code-cli/tests/partial-builder.test.ts +0 -105
  496. package/src/resources/extensions/gsd/auto-observability.ts +0 -72
  497. package/src/resources/extensions/gsd/auto-utils.ts +0 -25
  498. package/src/resources/extensions/gsd/observability-validator.ts +0 -456
  499. package/src/resources/extensions/gsd/roadmap-mutations.ts +0 -134
  500. package/src/resources/extensions/gsd/rtk-status.ts +0 -53
  501. package/src/resources/extensions/gsd/skill-catalog.ts +0 -1085
  502. package/src/resources/extensions/gsd/tests/double-merge-guard.test.ts +0 -97
  503. package/src/resources/extensions/gsd/tests/plan-quality-validator.test.ts +0 -474
  504. package/src/resources/extensions/gsd/tests/retry-diagnostic-reasoning.test.ts +0 -161
  505. package/src/resources/extensions/gsd/tests/rewrite-count-persist.test.ts +0 -82
  506. package/src/resources/extensions/gsd/tests/skill-catalog.test.ts +0 -193
  507. package/src/resources/extensions/shared/rtk-session-stats.ts +0 -249
  508. package/src/resources/extensions/shared/rtk.ts +0 -120
  509. /package/dist/web/standalone/.next/static/{yJIyd5cXPNpmXTv18ZlyC → MQOhBnkC_TLtNn_JvZWDj}/_ssgManifest.js +0 -0
@@ -5,7 +5,7 @@
5
5
  * Used by init-wizard.ts and guided-flow.ts to determine what onboarding
6
6
  * flow to show when entering a project directory.
7
7
  */
8
- import { existsSync, openSync, readSync, closeSync, readdirSync, readFileSync, statSync } from "node:fs";
8
+ import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
9
9
  import { join } from "node:path";
10
10
  import { homedir } from "node:os";
11
11
  import { gsdRoot } from "./paths.js";
@@ -39,76 +39,9 @@ export const PROJECT_FILES = [
39
39
  "project.yml",
40
40
  ".xcodeproj",
41
41
  ".xcworkspace",
42
- // Cloud platform config files
43
- "firebase.json",
44
- "cdk.json",
45
- "samconfig.toml",
46
- "serverless.yml",
47
- "serverless.yaml",
48
- "azure-pipelines.yml",
49
- // Database / ORM config files
50
- "prisma/schema.prisma",
51
- "supabase/config.toml",
52
- "drizzle.config.ts",
53
- "drizzle.config.js",
54
- "redis.conf",
55
- // React Native markers
56
- "metro.config.js",
57
- "metro.config.ts",
58
- "react-native.config.js",
59
- // Frontend framework config files
60
- "angular.json",
61
- "next.config.js",
62
- "next.config.ts",
63
- "next.config.mjs",
64
- "nuxt.config.ts",
65
- "nuxt.config.js",
66
- "svelte.config.js",
67
- "svelte.config.ts",
68
- // Vue CLI config files
69
- "vue.config.js",
70
- "vue.config.ts",
71
- // Frontend tooling
72
- "tailwind.config.js",
73
- "tailwind.config.ts",
74
- "tailwind.config.mjs",
75
- "tailwind.config.cjs",
76
- // Android project markers
77
- "app/build.gradle",
78
- "app/build.gradle.kts",
79
- // Container / DevOps config files
42
+ // Docker
80
43
  "Dockerfile",
81
- "docker-compose.yml",
82
- "docker-compose.yaml",
83
- // Infrastructure as Code
84
- "main.tf",
85
- // Kubernetes / Helm markers
86
- "Chart.yaml",
87
- "kustomization.yaml",
88
- // CI/CD markers
89
- ".github/workflows",
90
- // Blockchain / Web3 markers
91
- "hardhat.config.js",
92
- "hardhat.config.ts",
93
- "foundry.toml",
94
- // Data engineering markers
95
- "dbt_project.yml",
96
- "airflow.cfg",
97
- // Game engine markers
98
- "ProjectSettings/ProjectVersion.txt",
99
- "project.godot",
100
- // Python framework markers
101
- "manage.py",
102
- "requirements.txt",
103
44
  ];
104
- /** File extensions that indicate SQLite databases in the project. */
105
- const SQLITE_EXTENSIONS = [".sqlite", ".sqlite3", ".db"];
106
- /** File extensions that indicate SQL usage (migrations, schemas, seeds). */
107
- const SQL_EXTENSIONS = [".sql"];
108
- /** File extensions that indicate .NET / C# projects. */
109
- const DOTNET_EXTENSIONS = [".csproj", ".sln", ".fsproj"];
110
- /** File extensions that indicate Vue.js single-file components. */
111
- const VUE_EXTENSIONS = [".vue"];
112
45
  const LANGUAGE_MAP = {
113
46
  "package.json": "javascript/typescript",
114
47
  "Cargo.toml": "rust",
@@ -119,8 +52,6 @@ const LANGUAGE_MAP = {
119
52
  "pom.xml": "java",
120
53
  "build.gradle": "java/kotlin",
121
54
  "build.gradle.kts": "kotlin",
122
- "app/build.gradle": "java/kotlin",
123
- "app/build.gradle.kts": "kotlin",
124
55
  "CMakeLists.txt": "c/c++",
125
56
  "composer.json": "php",
126
57
  "pubspec.yaml": "dart/flutter",
@@ -135,8 +66,6 @@ const LANGUAGE_MAP = {
135
66
  ".xcodeproj": "swift/xcode",
136
67
  ".xcworkspace": "swift/xcode",
137
68
  "Dockerfile": "docker",
138
- "manage.py": "python",
139
- "requirements.txt": "python",
140
69
  };
141
70
  const MONOREPO_MARKERS = [
142
71
  "lerna.json",
@@ -167,41 +96,6 @@ const TEST_MARKERS = [
167
96
  "conftest.py",
168
97
  "phpunit.xml",
169
98
  ];
170
- /** Directories skipped during bounded recursive project scans. */
171
- const RECURSIVE_SCAN_IGNORED_DIRS = new Set([
172
- ".git",
173
- "node_modules",
174
- ".venv",
175
- "venv",
176
- "dist",
177
- "build",
178
- "coverage",
179
- ".next",
180
- ".nuxt",
181
- "target",
182
- "vendor",
183
- ".turbo",
184
- "Pods",
185
- "bin",
186
- "obj",
187
- ".gradle",
188
- "DerivedData",
189
- "out",
190
- ]);
191
- /** Project file markers safe to detect recursively via suffix matching. */
192
- const ROOT_ONLY_PROJECT_FILES = new Set([
193
- ".github/workflows",
194
- "package.json",
195
- "Gemfile",
196
- "Makefile",
197
- "CMakeLists.txt",
198
- "build.gradle",
199
- "build.gradle.kts",
200
- "deno.json",
201
- "deno.jsonc",
202
- ]);
203
- const MAX_RECURSIVE_SCAN_FILES = 2000;
204
- const MAX_RECURSIVE_SCAN_DEPTH = 6;
205
99
  // ─── Core Detection ─────────────────────────────────────────────────────────────
206
100
  /**
207
101
  * Detect the full project state for a given directory.
@@ -310,75 +204,8 @@ export function detectProjectSignals(basePath) {
310
204
  }
311
205
  }
312
206
  }
313
- // Bounded recursive scan for nested markers and dependency files.
314
- // This covers common brownfield layouts like src/App/App.csproj,
315
- // db/migrations/*.sql, src/components/*.vue, and services/api/pyproject.toml
316
- // without walking the entire repo or diving into heavyweight folders.
317
- const scannedFiles = scanProjectFiles(basePath);
318
- for (const file of PROJECT_FILES) {
319
- if (detectedFiles.includes(file) || ROOT_ONLY_PROJECT_FILES.has(file))
320
- continue;
321
- const hasMatch = file === "requirements.txt"
322
- ? scannedFiles.some(isPythonRequirementsFile)
323
- : scannedFiles.some((scannedFile) => matchesProjectFileMarker(scannedFile, file));
324
- if (hasMatch) {
325
- pushUnique(detectedFiles, file);
326
- if (!primaryLanguage && LANGUAGE_MAP[file]) {
327
- primaryLanguage = LANGUAGE_MAP[file];
328
- }
329
- }
330
- }
331
- if (scannedFiles.some((file) => SQLITE_EXTENSIONS.some((ext) => file.endsWith(ext)))) {
332
- pushUnique(detectedFiles, "*.sqlite");
333
- }
334
- if (scannedFiles.some((file) => SQL_EXTENSIONS.some((ext) => file.endsWith(ext)))) {
335
- pushUnique(detectedFiles, "*.sql");
336
- }
337
- const hasCsproj = scannedFiles.some((file) => file.endsWith(".csproj"));
338
- const hasFsproj = scannedFiles.some((file) => file.endsWith(".fsproj"));
339
- const hasSln = scannedFiles.some((file) => file.endsWith(".sln"));
340
- if (hasCsproj) {
341
- pushUnique(detectedFiles, "*.csproj");
342
- if (!primaryLanguage)
343
- primaryLanguage = "csharp";
344
- }
345
- if (hasFsproj) {
346
- pushUnique(detectedFiles, "*.fsproj");
347
- if (!primaryLanguage)
348
- primaryLanguage = "fsharp";
349
- }
350
- if (hasSln) {
351
- pushUnique(detectedFiles, "*.sln");
352
- if (!primaryLanguage)
353
- primaryLanguage = "dotnet";
354
- }
355
- if (scannedFiles.some((file) => VUE_EXTENSIONS.some((ext) => file.endsWith(ext)))) {
356
- pushUnique(detectedFiles, "*.vue");
357
- }
358
- // Python framework detection — scan dependency files for framework-specific packages.
359
- // Adds synthetic markers (e.g. "dep:fastapi") so skill catalog matchFiles can reference them.
360
- const dependencyFiles = scannedFiles.filter((file) => isPythonRequirementsFile(file) || file.endsWith("pyproject.toml"));
361
- if (containsFastapiDependency(basePath, dependencyFiles)) {
362
- pushUnique(detectedFiles, "dep:fastapi");
363
- }
364
- const springBootBuildFiles = scannedFiles.filter((file) => file.endsWith("pom.xml") || file.endsWith("build.gradle") || file.endsWith("build.gradle.kts"));
365
- const springBootVersionCatalogs = scannedFiles.filter((file) => file.endsWith(".versions.toml"));
366
- const springBootSettingsFiles = scannedFiles.filter((file) => file.endsWith("settings.gradle") || file.endsWith("settings.gradle.kts"));
367
- if (containsSpringBootMarker(basePath, springBootBuildFiles, springBootVersionCatalogs, springBootSettingsFiles)) {
368
- pushUnique(detectedFiles, "dep:spring-boot");
369
- if (!primaryLanguage) {
370
- primaryLanguage = "java/kotlin";
371
- }
372
- }
373
207
  // Git repo detection
374
208
  const isGitRepo = existsSync(join(basePath, ".git"));
375
- // Xcode platform detection — parse SDKROOT from project.pbxproj
376
- const xcodePlatforms = detectXcodePlatforms(basePath);
377
- // Set primaryLanguage to swift when an Xcode project is found but no
378
- // Package.swift was detected (CocoaPods or SPM-less projects).
379
- if (!primaryLanguage && xcodePlatforms.length > 0) {
380
- primaryLanguage = "swift";
381
- }
382
209
  // Monorepo detection
383
210
  let isMonorepo = false;
384
211
  for (const marker of MONOREPO_MARKERS) {
@@ -416,106 +243,12 @@ export function detectProjectSignals(basePath) {
416
243
  isGitRepo,
417
244
  isMonorepo,
418
245
  primaryLanguage,
419
- xcodePlatforms,
420
246
  hasCI,
421
247
  hasTests,
422
248
  packageManager,
423
249
  verificationCommands,
424
250
  };
425
251
  }
426
- // ─── Xcode Platform Detection ───────────────────────────────────────────────────
427
- /** Known SDKROOT values → canonical platform names. */
428
- const SDKROOT_MAP = {
429
- iphoneos: "iphoneos",
430
- iphonesimulator: "iphoneos", // simulator builds still target iOS
431
- macosx: "macosx",
432
- watchos: "watchos",
433
- watchsimulator: "watchos",
434
- appletvos: "appletvos",
435
- appletvsimulator: "appletvos",
436
- xros: "xros",
437
- xrsimulator: "xros",
438
- };
439
- /** Regex for SUPPORTED_PLATFORMS — fallback when SDKROOT = auto (Xcode 15+). */
440
- const SUPPORTED_PLATFORMS_RE = /SUPPORTED_PLATFORMS\s*=\s*"([^"]+)"/gi;
441
- /** Read at most `maxBytes` from a file without loading the full file into memory. */
442
- function readBounded(filePath, maxBytes) {
443
- const buf = Buffer.alloc(maxBytes);
444
- const fd = openSync(filePath, "r");
445
- try {
446
- const bytesRead = readSync(fd, buf, 0, maxBytes, 0);
447
- return buf.toString("utf-8", 0, bytesRead);
448
- }
449
- finally {
450
- closeSync(fd);
451
- }
452
- }
453
- /** Common subdirectories where .xcodeproj may live in monorepos / standard layouts. */
454
- const XCODE_SUBDIRS = ["ios", "macos", "app", "apps"];
455
- /**
456
- * Scan *.xcodeproj directories for project.pbxproj and extract SDKROOT values.
457
- * Returns deduplicated, canonical platform list (e.g. ["iphoneos"]).
458
- *
459
- * Reading the pbxproj is a lightweight regex scan — no full plist parsing needed.
460
- * We read at most 1 MB per file to keep detection fast.
461
- * Searches both the project root and common subdirectories (ios/, macos/, app/).
462
- */
463
- function detectXcodePlatforms(basePath) {
464
- const platforms = new Set();
465
- // Directories to scan: project root + common subdirs
466
- const dirsToScan = [basePath];
467
- for (const sub of XCODE_SUBDIRS) {
468
- const subPath = join(basePath, sub);
469
- if (existsSync(subPath))
470
- dirsToScan.push(subPath);
471
- }
472
- for (const dir of dirsToScan) {
473
- try {
474
- const entries = readdirSync(dir, { withFileTypes: true });
475
- for (const entry of entries) {
476
- if (!entry.isDirectory() || !entry.name.endsWith(".xcodeproj"))
477
- continue;
478
- const pbxprojPath = join(dir, entry.name, "project.pbxproj");
479
- try {
480
- const content = readBounded(pbxprojPath, 1024 * 1024);
481
- // Match SDKROOT = <value>; — both quoted and unquoted forms
482
- const sdkRe = /SDKROOT\s*=\s*"?([a-z]+)"?\s*;/gi;
483
- let m;
484
- let foundExplicit = false;
485
- while ((m = sdkRe.exec(content)) !== null) {
486
- const val = m[1].toLowerCase();
487
- if (val === "auto")
488
- continue; // handled below via SUPPORTED_PLATFORMS
489
- const canonical = SDKROOT_MAP[val];
490
- if (canonical) {
491
- platforms.add(canonical);
492
- foundExplicit = true;
493
- }
494
- }
495
- // Xcode 15+ defaults SDKROOT to "auto"; fall back to SUPPORTED_PLATFORMS
496
- if (!foundExplicit) {
497
- let sp;
498
- while ((sp = SUPPORTED_PLATFORMS_RE.exec(content)) !== null) {
499
- for (const tok of sp[1].split(/\s+/)) {
500
- const canonical = SDKROOT_MAP[tok.toLowerCase()];
501
- if (canonical)
502
- platforms.add(canonical);
503
- }
504
- }
505
- SUPPORTED_PLATFORMS_RE.lastIndex = 0;
506
- }
507
- }
508
- catch {
509
- // unreadable pbxproj — skip
510
- }
511
- }
512
- }
513
- catch {
514
- // unreadable directory
515
- }
516
- }
517
- return [...platforms];
518
- }
519
252
  // ─── Package Manager Detection ──────────────────────────────────────────────────
520
253
  function detectPackageManager(basePath) {
521
254
  if (existsSync(join(basePath, "pnpm-lock.yaml")))
@@ -571,7 +304,7 @@ function detectVerificationCommands(basePath, detectedFiles, packageManager) {
571
304
  commands.push("go test ./...");
572
305
  commands.push("go vet ./...");
573
306
  }
574
- if (detectedFiles.includes("pyproject.toml") || detectedFiles.includes("setup.py") || detectedFiles.includes("requirements.txt")) {
307
+ if (detectedFiles.includes("pyproject.toml") || detectedFiles.includes("setup.py")) {
575
308
  commands.push("pytest");
576
309
  }
577
310
  if (detectedFiles.includes("Gemfile")) {
@@ -656,322 +389,3 @@ function readMakefileTargets(basePath) {
656
389
  return [];
657
390
  }
658
391
  }
659
- function pushUnique(arr, value) {
660
- if (!arr.includes(value))
661
- arr.push(value);
662
- }
663
- function matchesProjectFileMarker(scannedFile, marker) {
664
- const normalized = scannedFile.replaceAll("\\", "/");
665
- return (normalized === marker ||
666
- normalized.endsWith(`/${marker}`));
667
- }
668
- function isPythonRequirementsFile(relativePath) {
669
- const normalized = relativePath.replaceAll("\\", "/");
670
- const basename = normalized.slice(normalized.lastIndexOf("/") + 1);
671
- return (basename === "requirements.txt" ||
672
- basename === "requirements.in" ||
673
- /^requirements([-.].+)?\.(txt|in)$/i.test(basename) ||
674
- /(^|\/)requirements\/.+\.(txt|in)$/i.test(normalized));
675
- }
676
- function containsFastapiDependency(basePath, relativePaths) {
677
- for (const relativePath of relativePaths) {
678
- try {
679
- const raw = readBounded(join(basePath, relativePath), 64 * 1024);
680
- const content = extractDependencyContent(relativePath, raw);
681
- if (isPythonRequirementsFile(relativePath)) {
682
- for (const line of content.split("\n")) {
683
- if (extractRequirementName(line) === "fastapi")
684
- return true;
685
- }
686
- continue;
687
- }
688
- if (relativePath.endsWith("pyproject.toml")) {
689
- if (containsFastapiInPyproject(content))
690
- return true;
691
- }
692
- }
693
- catch {
694
- // unreadable file — continue scanning other candidate files
695
- }
696
- }
697
- return false;
698
- }
699
- function containsSpringBootMarker(basePath, buildFiles, versionCatalogFiles, settingsFiles) {
700
- const usedPluginAliases = new Set();
701
- const usedLibraryAliases = new Set();
702
- const catalogAccessors = resolveVersionCatalogAccessors(basePath, versionCatalogFiles, settingsFiles);
703
- for (const relativePath of buildFiles) {
704
- try {
705
- const raw = readBounded(join(basePath, relativePath), 64 * 1024);
706
- const content = stripDependencyComments(relativePath, raw);
707
- if (containsDirectSpringBootReference(relativePath, content)) {
708
- return true;
709
- }
710
- const normalized = content.toLowerCase();
711
- let match;
712
- for (const accessor of catalogAccessors) {
713
- const aliasRe = new RegExp(`alias\\(\\s*${accessor}\\.plugins\\.([a-z0-9_.-]+)\\s*\\)`, "gi");
714
- while ((match = aliasRe.exec(normalized)) !== null) {
715
- usedPluginAliases.add(normalizePluginAlias(match[1]));
716
- }
717
- const libraryAliasRe = new RegExp(`\\b${accessor}\\.((?!plugins\\b)[a-z0-9_.-]+)`, "gi");
718
- while ((match = libraryAliasRe.exec(normalized)) !== null) {
719
- usedLibraryAliases.add(normalizePluginAlias(match[1]));
720
- }
721
- }
722
- }
723
- catch {
724
- // unreadable build file — continue scanning others
725
- }
726
- }
727
- if (usedPluginAliases.size === 0 && usedLibraryAliases.size === 0) {
728
- return false;
729
- }
730
- if (versionCatalogFiles.length === 0) {
731
- return false;
732
- }
733
- const springBootAliases = new Set();
734
- const springBootLibraries = new Set();
735
- const pendingSpringBootBundles = [];
736
- for (const relativePath of versionCatalogFiles) {
737
- try {
738
- const raw = readBounded(join(basePath, relativePath), 64 * 1024);
739
- const content = stripDependencyComments(relativePath, raw);
740
- const aliasRe = /^\s*([A-Za-z0-9_.-]+)\s*=\s*\{[^\n}]*\bid\s*=\s*["']org\.springframework\.boot["'][^\n}]*\}/gm;
741
- let match;
742
- while ((match = aliasRe.exec(content)) !== null) {
743
- springBootAliases.add(normalizePluginAlias(match[1]));
744
- }
745
- const libraryRe = /^\s*([A-Za-z0-9_.-]+)\s*=\s*\{[^\n}]*\b(module\s*=\s*["']org\.springframework\.boot:[^"']+["']|group\s*=\s*["']org\.springframework\.boot["'][^\n}]*\bname\s*=\s*["']spring-boot[^"']*["'])[^\n}]*\}/gm;
746
- while ((match = libraryRe.exec(content)) !== null) {
747
- springBootLibraries.add(normalizePluginAlias(match[1]));
748
- }
749
- const bundleRe = /^\s*([A-Za-z0-9_.-]+)\s*=\s*\[([\s\S]*?)\]/gm;
750
- while ((match = bundleRe.exec(content)) !== null) {
751
- pendingSpringBootBundles.push({
752
- bundleAlias: normalizePluginAlias(`bundles.${match[1]}`),
753
- referencedAliases: match[2]
754
- .split(",")
755
- .map((part) => normalizePluginAlias(part.replace(/["'\s]/g, "")))
756
- .filter(Boolean),
757
- });
758
- }
759
- }
760
- catch {
761
- // unreadable version catalog — continue scanning others
762
- }
763
- }
764
- const springBootBundles = new Set();
765
- for (const pendingBundle of pendingSpringBootBundles) {
766
- if (pendingBundle.referencedAliases.some((alias) => springBootLibraries.has(alias))) {
767
- springBootBundles.add(pendingBundle.bundleAlias);
768
- }
769
- }
770
- for (const alias of usedPluginAliases) {
771
- if (springBootAliases.has(alias))
772
- return true;
773
- }
774
- for (const alias of usedLibraryAliases) {
775
- if (springBootLibraries.has(alias) || springBootBundles.has(alias))
776
- return true;
777
- }
778
- return false;
779
- }
780
- function stripDependencyComments(relativePath, content) {
781
- if (relativePath.endsWith("requirements.txt")) {
782
- return content.replace(/(^|\s)#.*$/gm, "");
783
- }
784
- if (relativePath.endsWith("pyproject.toml")) {
785
- return content.replace(/(^|\s)#.*$/gm, "");
786
- }
787
- if (relativePath.endsWith(".versions.toml")) {
788
- return content.replace(/(^|\s)#.*$/gm, "");
789
- }
790
- if (relativePath.endsWith("settings.gradle") || relativePath.endsWith("settings.gradle.kts")) {
791
- return content
792
- .replace(/\/\*[\s\S]*?\*\//g, "")
793
- .replace(/\/\/.*$/gm, "");
794
- }
795
- if (relativePath.endsWith("pom.xml")) {
796
- return content.replace(/<!--[\s\S]*?-->/g, "");
797
- }
798
- if (relativePath.endsWith("build.gradle") || relativePath.endsWith("build.gradle.kts")) {
799
- return content
800
- .replace(/\/\*[\s\S]*?\*\//g, "")
801
- .replace(/\/\/.*$/gm, "");
802
- }
803
- return content;
804
- }
805
- function extractDependencyContent(relativePath, content) {
806
- const stripped = stripDependencyComments(relativePath, content);
807
- if (relativePath.endsWith("pyproject.toml")) {
808
- return extractPyprojectDependencySections(stripped);
809
- }
810
- return stripped;
811
- }
812
- function extractRequirementName(spec) {
813
- const trimmed = spec.trim().replace(/^["']|["']$/g, "");
814
- if (!trimmed)
815
- return null;
816
- const match = trimmed.match(/^([A-Za-z0-9_.-]+)(?:\[[^\]]+\])?(?=\s*(?:@|[<>=!~;]|$))/);
817
- if (!match)
818
- return null;
819
- return normalizePackageName(match[1]);
820
- }
821
- function containsFastapiInPyproject(content) {
822
- for (const line of content.split("\n")) {
823
- const keyMatch = line.match(/^\s*([A-Za-z0-9_.-]+)\s*=/);
824
- if (keyMatch) {
825
- const key = normalizePackageName(keyMatch[1]);
826
- if (key === "fastapi") {
827
- return true;
828
- }
829
- if (key !== "dependencies") {
830
- continue;
831
- }
832
- }
833
- const quotedSpecRe = /["']([^"']+)["']/g;
834
- let match;
835
- while ((match = quotedSpecRe.exec(line)) !== null) {
836
- if (extractRequirementName(match[1]) === "fastapi") {
837
- return true;
838
- }
839
- }
840
- }
841
- return false;
842
- }
843
- function containsDirectSpringBootReference(relativePath, content) {
844
- if (relativePath.endsWith("pom.xml")) {
845
- return /<groupId>\s*org\.springframework\.boot\s*<\/groupId>/i.test(content);
846
- }
847
- if (relativePath.endsWith("build.gradle") || relativePath.endsWith("build.gradle.kts")) {
848
- return /(id\s*\(?\s*["']org\.springframework\.boot["']|apply\s*\(?\s*plugin\s*[:=]\s*["']org\.springframework\.boot["']|(?:implementation|api|compileOnly|runtimeOnly|testImplementation|annotationProcessor|kapt)\s*\(?\s*["'][^"']*org\.springframework\.boot:[^"']*spring-boot[^"']*["'])/i.test(content);
849
- }
850
- return false;
851
- }
852
- function extractPyprojectDependencySections(content) {
853
- const lines = content.split("\n");
854
- const collected = [];
855
- let section = "";
856
- let collectingProjectDeps = false;
857
- let collectingOptionalDeps = false;
858
- let bracketDepth = 0;
859
- for (const line of lines) {
860
- const trimmed = line.trim();
861
- if (collectingProjectDeps) {
862
- collected.push(line);
863
- bracketDepth += countChar(line, "[") - countChar(line, "]");
864
- if (bracketDepth <= 0) {
865
- collectingProjectDeps = false;
866
- }
867
- continue;
868
- }
869
- if (collectingOptionalDeps) {
870
- collected.push(line);
871
- bracketDepth += countChar(line, "[") - countChar(line, "]");
872
- if (bracketDepth <= 0) {
873
- collectingOptionalDeps = false;
874
- }
875
- continue;
876
- }
877
- const sectionMatch = trimmed.match(/^\[([^\]]+)\]$/);
878
- if (sectionMatch) {
879
- section = sectionMatch[1].trim();
880
- continue;
881
- }
882
- if (section === "project" && /^dependencies\s*=\s*\[/.test(trimmed)) {
883
- collected.push(line);
884
- bracketDepth = countChar(line, "[") - countChar(line, "]");
885
- collectingProjectDeps = bracketDepth > 0;
886
- continue;
887
- }
888
- if (section === "project.optional-dependencies" ||
889
- section === "tool.poetry.dependencies") {
890
- if (section === "project.optional-dependencies") {
891
- const equalsIndex = line.indexOf("=");
892
- if (equalsIndex !== -1) {
893
- const value = line.slice(equalsIndex + 1);
894
- collected.push(value);
895
- bracketDepth = countChar(value, "[") - countChar(value, "]");
896
- collectingOptionalDeps = bracketDepth > 0;
897
- }
898
- }
899
- else {
900
- collected.push(line);
901
- }
902
- }
903
- }
904
- return collected.join("\n");
905
- }
906
- function countChar(text, char) {
907
- return [...text].filter((c) => c === char).length;
908
- }
909
- function normalizePackageName(name) {
910
- return name.toLowerCase().replace(/[_.]/g, "-");
911
- }
912
- function normalizePluginAlias(alias) {
913
- return alias.toLowerCase().replace(/[-_]/g, ".");
914
- }
915
- function versionCatalogAccessorName(relativePath) {
916
- const normalized = relativePath.replaceAll("\\", "/");
917
- const basename = normalized.slice(normalized.lastIndexOf("/") + 1);
918
- return basename.replace(/\.versions\.toml$/i, "").toLowerCase();
919
- }
920
- function resolveVersionCatalogAccessors(basePath, versionCatalogFiles, settingsFiles) {
921
- const accessors = new Set(versionCatalogFiles.map(versionCatalogAccessorName).filter(Boolean));
922
- if (versionCatalogFiles.length === 0 || settingsFiles.length === 0) {
923
- return accessors;
924
- }
925
- for (const settingsFile of settingsFiles) {
926
- try {
927
- const raw = readBounded(join(basePath, settingsFile), 64 * 1024);
928
- const content = stripDependencyComments(settingsFile, raw);
929
- const createRe = /create\(\s*["']([A-Za-z0-9_]+)["']\s*\)\s*\{[\s\S]*?([A-Za-z0-9_.-]+\.versions\.toml)["']?\s*\)\s*\)/g;
930
- let match;
931
- while ((match = createRe.exec(content)) !== null) {
932
- const accessor = match[1].toLowerCase();
933
- const catalogBasename = match[2].replaceAll("\\", "/").split("/").pop();
934
- if (versionCatalogFiles.some((file) => {
935
- const normalized = file.replaceAll("\\", "/");
936
- return normalized === catalogBasename || normalized.endsWith(`/${catalogBasename}`);
937
- })) {
938
- accessors.add(accessor);
939
- }
940
- }
941
- }
942
- catch {
943
- // unreadable settings file — ignore
944
- }
945
- }
946
- return accessors;
947
- }
948
- function scanProjectFiles(basePath) {
949
- const files = [];
950
- const queue = [{ path: basePath, depth: 0 }];
951
- while (queue.length > 0 && files.length < MAX_RECURSIVE_SCAN_FILES) {
952
- const current = queue.shift();
953
- let entries;
954
- try {
955
- entries = readdirSync(current.path, { withFileTypes: true, encoding: "utf8" });
956
- }
957
- catch {
958
- continue;
959
- }
960
- for (const entry of entries) {
961
- const entryPath = join(current.path, entry.name);
962
- const relativePath = entryPath.slice(basePath.length + 1);
963
- if (entry.isDirectory()) {
964
- if (current.depth < MAX_RECURSIVE_SCAN_DEPTH && !RECURSIVE_SCAN_IGNORED_DIRS.has(entry.name)) {
965
- queue.push({ path: entryPath, depth: current.depth + 1 });
966
- }
967
- continue;
968
- }
969
- if (!entry.isFile())
970
- continue;
971
- files.push(relativePath);
972
- if (files.length >= MAX_RECURSIVE_SCAN_FILES)
973
- break;
974
- }
975
- }
976
- return files;
977
- }
@@ -1,7 +1,6 @@
1
1
  // GSD Dispatch Guard — prevents out-of-order slice dispatch
2
2
  import { resolveMilestoneFile } from "./paths.js";
3
3
  import { findMilestoneIds } from "./guided-flow.js";
4
- import { parseUnitId } from "./unit-id.js";
5
4
  import { isDbAvailable, getMilestoneSlices } from "./gsd-db.js";
6
5
  import { parseRoadmap } from "./parsers-legacy.js";
7
6
  import { readFileSync } from "node:fs";
@@ -15,7 +14,7 @@ const SLICE_DISPATCH_TYPES = new Set([
15
14
  export function getPriorSliceCompletionBlocker(base, _mainBranch, unitType, unitId) {
16
15
  if (!SLICE_DISPATCH_TYPES.has(unitType))
17
16
  return null;
18
- const { milestone: targetMid, slice: targetSid } = parseUnitId(unitId);
17
+ const [targetMid, targetSid] = unitId.split("/");
19
18
  if (!targetMid || !targetSid)
20
19
  return null;
21
20
  // Use findMilestoneIds to respect custom queue order.