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
@@ -241,9 +241,6 @@ Setting `prefer_skills: []` does **not** disable skill discovery — it just mea
241
241
 
242
242
  **Known unit types for `before`/`after`:** `research-milestone`, `plan-milestone`, `research-slice`, `plan-slice`, `execute-task`, `complete-slice`, `replan-slice`, `reassess-roadmap`, `run-uat`.
243
243
 
244
- - `experimental`: opt-in experimental features. All features here are **off by default** — you must explicitly set each one to `true` to enable it. Features in this block may change or be removed without a deprecation cycle while in experimental status. Keys:
245
- - `rtk`: boolean — enable RTK (Real-Time Kompression) shell-command compression. When enabled, GSD wraps shell commands through the RTK binary to reduce token usage during command execution. RTK is downloaded automatically on first use if not already installed. **Default: `false`** (opt-in required). Set `GSD_RTK_DISABLED=1` in the environment to force-disable regardless of this preference.
246
-
247
244
  ---
248
245
 
249
246
  ## Best Practices
@@ -655,15 +652,3 @@ verification_max_retries: 2
655
652
  ```
656
653
 
657
654
  Runs test, lint, and typecheck after each task. On failure, auto-fix is attempted up to 2 times before reporting the issue.
658
-
659
- ## Experimental Features Example
660
-
661
- ```yaml
662
- ---
663
- version: 1
664
- experimental:
665
- rtk: true
666
- ---
667
- ```
668
-
669
- Opts in to RTK shell-command compression. RTK is downloaded automatically on first use. Set `GSD_RTK_DISABLED=1` to force-disable at the environment level regardless of this setting.
@@ -222,8 +222,6 @@ function _parseSummaryImpl(content) {
222
222
  whatHappened: nativeResult.whatHappened,
223
223
  deviations: nativeResult.deviations,
224
224
  filesModified: nativeResult.filesModified,
225
- followUps: extractSection(content, 'Follow-ups') ?? '',
226
- knownLimitations: extractSection(content, 'Known Limitations') ?? '',
227
225
  };
228
226
  }
229
227
  const [fmLines, body] = splitFrontmatter(content);
@@ -278,9 +276,7 @@ function _parseSummaryImpl(content) {
278
276
  }
279
277
  }
280
278
  }
281
- const followUps = extractSection(body, 'Follow-ups') ?? '';
282
- const knownLimitations = extractSection(body, 'Known Limitations') ?? '';
283
- return { frontmatter, title, oneLiner, whatHappened, deviations, filesModified, followUps, knownLimitations };
279
+ return { frontmatter, title, oneLiner, whatHappened, deviations, filesModified };
284
280
  }
285
281
  // ─── Continue Parser ───────────────────────────────────────────────────────
286
282
  export function parseContinue(content) {
@@ -353,10 +353,7 @@ async function buildDiscussSlicePrompt(mid, sid, sTitle, base, options) {
353
353
  }
354
354
  }
355
355
  // Completed slice summaries — what was already built that this slice builds on
356
- // Ensure DB is open so getMilestoneSlices returns real data (#2560).
357
356
  {
358
- const { ensureDbOpen } = await import("./bootstrap/dynamic-tools.js");
359
- await ensureDbOpen();
360
357
  let normSlices = [];
361
358
  if (isDbAvailable()) {
362
359
  normSlices = getMilestoneSlices(mid).map(s => ({ id: s.id, done: s.status === "complete" }));
@@ -479,13 +476,6 @@ export async function showDiscuss(ctx, pi, basePath) {
479
476
  }
480
477
  return;
481
478
  }
482
- // Ensure DB is open before querying slices (#2560).
483
- // showDiscuss() is a command handler — unlike tool handlers, it has no
484
- // automatic ensureDbOpen() call. Without this, isDbAvailable() returns
485
- // false on cold-start sessions and normSlices falls to [] → false
486
- // "All slices complete" exit.
487
- const { ensureDbOpen } = await import("./bootstrap/dynamic-tools.js");
488
- await ensureDbOpen();
489
479
  // Guard: no roadmap yet (unless DB has slices)
490
480
  const roadmapFile = resolveMilestoneFile(basePath, mid, "ROADMAP");
491
481
  const roadmapContent = roadmapFile ? await loadFile(roadmapFile) : null;
@@ -12,7 +12,6 @@ import { nativeInit } from "./native-git-bridge.js";
12
12
  import { ensureGitignore, untrackRuntimeFiles } from "./gitignore.js";
13
13
  import { gsdRoot } from "./paths.js";
14
14
  import { assertSafeDirectory } from "./validate-directory.js";
15
- import { runSkillInstallStep } from "./skill-catalog.js";
16
15
  // ─── Defaults ───────────────────────────────────────────────────────────────────
17
16
  const DEFAULT_PREFS = {
18
17
  mode: "solo",
@@ -177,14 +176,7 @@ export async function showProjectInit(ctx, pi, basePath, detection) {
177
176
  if (advancedChoice === "customize") {
178
177
  await customizeAdvancedPrefs(ctx, prefs);
179
178
  }
180
- // ── Step 8: Skill Installation ─────────────────────────────────────────────
181
- try {
182
- await runSkillInstallStep(ctx, signals);
183
- }
184
- catch {
185
- // Non-fatal — skill installation failure should never block project init
186
- }
187
- // ── Step 9: Bootstrap .gsd/ ────────────────────────────────────────────────
179
+ // ── Step 8: Bootstrap .gsd/ ────────────────────────────────────────────────
188
180
  bootstrapGsdDirectory(basePath, prefs, signals);
189
181
  // Ensure .gitignore
190
182
  ensureGitignore(basePath);
@@ -68,20 +68,6 @@ export function resolveModelForComplexity(classification, phaseConfig, routingCo
68
68
  const configuredPrimary = phaseConfig.primary;
69
69
  const configuredTier = getModelTier(configuredPrimary);
70
70
  const requestedTier = classification.tier;
71
- // If the configured model is unknown (not in MODEL_CAPABILITY_TIER),
72
- // honor the user's explicit choice — don't downgrade based on a guess.
73
- // Unknown models default to "heavy" in getModelTier, which makes every
74
- // standard/light unit get downgraded to tier_models, silently ignoring
75
- // the user's configuration. (#2192)
76
- if (!isKnownModel(configuredPrimary)) {
77
- return {
78
- modelId: configuredPrimary,
79
- fallbacks: phaseConfig.fallbacks,
80
- tier: requestedTier,
81
- wasDowngraded: false,
82
- reason: `configured model "${configuredPrimary}" is not in the known tier map — honoring explicit config`,
83
- };
84
- }
85
71
  // Downgrade-only: if requested tier >= configured tier, no change
86
72
  if (tierOrdinal(requestedTier) >= tierOrdinal(configuredTier)) {
87
73
  return {
@@ -155,17 +141,6 @@ function getModelTier(modelId) {
155
141
  // Unknown models are assumed heavy (safest assumption)
156
142
  return "heavy";
157
143
  }
158
- /** Check if a model ID has a known capability tier mapping. (#2192) */
159
- function isKnownModel(modelId) {
160
- const bareId = modelId.includes("/") ? modelId.split("/").pop() : modelId;
161
- if (MODEL_CAPABILITY_TIER[bareId])
162
- return true;
163
- for (const knownId of Object.keys(MODEL_CAPABILITY_TIER)) {
164
- if (bareId.includes(knownId) || knownId.includes(bareId))
165
- return true;
166
- }
167
- return false;
168
- }
169
144
  function findModelForTier(tier, config, availableModelIds, crossProvider) {
170
145
  // 1. Check explicit tier_models config
171
146
  const explicitModel = config.tier_models?.[tier];
@@ -49,17 +49,6 @@ export function buildDesktopNotificationCommand(platform, title, message, level
49
49
  const normalizedTitle = normalizeNotificationText(title);
50
50
  const normalizedMessage = normalizeNotificationText(message);
51
51
  if (platform === "darwin") {
52
- // Prefer terminal-notifier: registers as its own Notification Center app,
53
- // so it gets a proper permission entry in System Settings → Notifications.
54
- // osascript notifications are silently swallowed when the calling terminal
55
- // (Ghostty, iTerm2, etc.) lacks notification permissions — exits 0, no error.
56
- // See: https://github.com/gsd-build/gsd-2/issues/2632
57
- const tnPath = findExecutable("terminal-notifier");
58
- if (tnPath) {
59
- const sound = level === "error" ? "Basso" : "Glass";
60
- return { file: tnPath, args: ["-title", normalizedTitle, "-message", normalizedMessage, "-sound", sound] };
61
- }
62
- // Fallback: osascript (works if terminal app has notification permissions)
63
52
  const sound = level === "error" ? 'sound name "Basso"' : 'sound name "Glass"';
64
53
  const script = `display notification "${escapeAppleScript(normalizedMessage)}" with title "${escapeAppleScript(normalizedTitle)}" ${sound}`;
65
54
  return { file: "osascript", args: ["-e", script] };
@@ -76,15 +65,3 @@ function normalizeNotificationText(s) {
76
65
  function escapeAppleScript(s) {
77
66
  return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
78
67
  }
79
- /**
80
- * Locate an executable on PATH. Returns absolute path or null.
81
- * Non-fatal — returns null on any error.
82
- */
83
- function findExecutable(name) {
84
- try {
85
- return execFileSync("which", [name], { timeout: 2000, stdio: ["ignore", "pipe", "ignore"] }).toString().trim() || null;
86
- }
87
- catch {
88
- return null;
89
- }
90
- }
@@ -7,25 +7,19 @@
7
7
  import { existsSync, readdirSync } from "node:fs";
8
8
  import { homedir } from "node:os";
9
9
  import { isAbsolute, join } from "node:path";
10
+ import { getAgentDir } from "@gsd/pi-coding-agent";
10
11
  import { statSync } from "node:fs";
11
12
  import { validatePreferences } from "./preferences-validation.js";
12
13
  import { loadEffectiveGSDPreferences } from "./preferences.js";
13
14
  /**
14
15
  * Known skill directories, in priority order.
15
- * Global skills (~/.agents/skills/) take precedence over project skills.
16
- * Legacy ~/.gsd/agent/skills/ is included as a fallback for pre-migration installs.
16
+ * User skills (~/.gsd/agent/skills/) take precedence over project skills.
17
17
  */
18
18
  export function getSkillSearchDirs(cwd) {
19
- const dirs = [
20
- { dir: join(homedir(), ".agents", "skills"), method: "user-skill" },
21
- { dir: join(cwd, ".agents", "skills"), method: "project-skill" },
19
+ return [
20
+ { dir: join(getAgentDir(), "skills"), method: "user-skill" },
21
+ { dir: join(cwd, ".pi", "agent", "skills"), method: "project-skill" },
22
22
  ];
23
- // Legacy fallback — read skills from old GSD directory only if migration hasn't completed
24
- const legacyDir = join(homedir(), ".gsd", "agent", "skills");
25
- if (existsSync(legacyDir) && !existsSync(join(legacyDir, ".migrated-to-agents"))) {
26
- dirs.push({ dir: legacyDir, method: "user-skill" });
27
- }
28
- return dirs;
29
23
  }
30
24
  /**
31
25
  * Resolve a single skill reference to an absolute path.
@@ -70,7 +70,6 @@ export const KNOWN_PREFERENCE_KEYS = new Set([
70
70
  "service_tier",
71
71
  "forensics_dedup",
72
72
  "show_token_cost",
73
- "experimental",
74
73
  ]);
75
74
  /** Canonical list of all dispatch unit types. */
76
75
  export const KNOWN_UNIT_TYPES = [
@@ -823,30 +823,5 @@ export function validatePreferences(preferences) {
823
823
  errors.push("show_token_cost must be a boolean");
824
824
  }
825
825
  }
826
- // ─── Experimental Features ────────────────────────────────────────
827
- if (preferences.experimental !== undefined) {
828
- if (typeof preferences.experimental === "object" && preferences.experimental !== null) {
829
- const exp = preferences.experimental;
830
- const validExp = {};
831
- if (exp.rtk !== undefined) {
832
- if (typeof exp.rtk === "boolean")
833
- validExp.rtk = exp.rtk;
834
- else
835
- errors.push("experimental.rtk must be a boolean");
836
- }
837
- const knownExpKeys = new Set(["rtk"]);
838
- for (const key of Object.keys(exp)) {
839
- if (!knownExpKeys.has(key)) {
840
- warnings.push(`unknown experimental key "${key}" — ignored`);
841
- }
842
- }
843
- if (Object.keys(validExp).length > 0) {
844
- validated.experimental = validExp;
845
- }
846
- }
847
- else {
848
- errors.push("experimental must be an object");
849
- }
850
- }
851
826
  return { preferences: validated, errors, warnings };
852
827
  }
@@ -275,9 +275,6 @@ function mergePreferences(base, override) {
275
275
  service_tier: override.service_tier ?? base.service_tier,
276
276
  forensics_dedup: override.forensics_dedup ?? base.forensics_dedup,
277
277
  show_token_cost: override.show_token_cost ?? base.show_token_cost,
278
- experimental: (base.experimental || override.experimental)
279
- ? { ...(base.experimental ?? {}), ...(override.experimental ?? {}) }
280
- : undefined,
281
278
  };
282
279
  }
283
280
  function mergeStringLists(base, override) {
@@ -142,10 +142,11 @@ Then **offer GitHub issue creation**: "Would you like me to create a GitHub issu
142
142
  If yes, create using the `bash` tool:
143
143
 
144
144
  ```bash
145
- # Step 1: Write issue body to a temp file to avoid escaping/truncation issues.
146
- # Using --body-file bypasses shell quoting entirely — backticks, quotes, and
147
- # content containing "EOF" all render correctly. (#2465)
148
- cat > /tmp/gsd-forensic-issue.md << 'GSD_ISSUE_BODY'
145
+ # Step 1: Create issue (use labels for metadata, NOT for classification type is set via GraphQL)
146
+ ISSUE_URL=$(gh issue create --repo gsd-build/gsd-2 \
147
+ --title "..." \
148
+ --label "auto-generated" \
149
+ --body "$(cat <<'EOF'
149
150
  ## Problem
150
151
  [1-2 sentence summary]
151
152
 
@@ -168,13 +169,8 @@ cat > /tmp/gsd-forensic-issue.md << 'GSD_ISSUE_BODY'
168
169
 
169
170
  ---
170
171
  *Auto-generated by `/gsd forensics`*
171
- GSD_ISSUE_BODY
172
-
173
- ISSUE_URL=$(gh issue create --repo gsd-build/gsd-2 \
174
- --title "..." \
175
- --label "auto-generated" \
176
- --body-file /tmp/gsd-forensic-issue.md)
177
- rm -f /tmp/gsd-forensic-issue.md
172
+ EOF
173
+ )")
178
174
 
179
175
  # Step 2: Set issue type via GraphQL (gh issue create has no --type flag)
180
176
  ISSUE_NUM=$(echo "$ISSUE_URL" | grep -oE '[0-9]+$')
@@ -24,12 +24,7 @@ All relevant context has been preloaded below — the roadmap, all slice summari
24
24
  2. For each **slice** in the roadmap, verify its demo/deliverable claim against its summary. Flag any slice whose summary does not substantiate its claimed output.
25
25
  3. Check **cross-slice integration points** — do boundary map entries (produces/consumes) align with what was actually built?
26
26
  4. Check **requirement coverage** — are all active requirements addressed by at least one slice?
27
- 5. If **Verification Classes** are provided in the inlined context above, check each non-empty class:
28
- - For each verification class (Contract, Integration, Operational, UAT), determine whether slice summaries, UAT results, or observable behavior provide evidence that this verification tier was addressed.
29
- - Document the compliance status of each class in your verdict rationale.
30
- - If `Operational` verification is non-empty and no evidence of operational verification exists, flag this explicitly — it means planned operational checks (migrations, deployments, runtime verification) were not proven.
31
- - A milestone with unaddressed verification classes may still pass if the gaps are minor, but the gaps MUST be documented in the Deferred Work Inventory.
32
- 6. Determine a verdict:
27
+ 5. Determine a verdict:
33
28
  - `pass` — all criteria met, all slices delivered, no gaps
34
29
  - `needs-attention` — minor gaps that do not block completion (document them)
35
30
  - `needs-remediation` — material gaps found; remediation slices must be added to the roadmap
@@ -31,14 +31,6 @@ export function classifyProviderError(errorMsg) {
31
31
  if (isConnectionError) {
32
32
  return { isTransient: true, isRateLimit: false, suggestedDelayMs: 15_000 }; // 15s for connection errors
33
33
  }
34
- // Stream-truncation JSON parse errors — transient (#2572).
35
- // When the API stream is cut mid-chunk, pi tries to reassemble the partial
36
- // tool-call JSON and gets a SyntaxError. This is the downstream symptom of
37
- // a connection drop — same root cause as ECONNRESET, one layer up.
38
- const isMalformedStream = /Unexpected end of JSON|Unexpected token.*JSON|Expected double-quoted property name|SyntaxError.*JSON/i.test(errorMsg);
39
- if (isMalformedStream) {
40
- return { isTransient: true, isRateLimit: false, suggestedDelayMs: 15_000 }; // 15s, same as connection errors
41
- }
42
34
  // Unknown error — treat as permanent (user reviews)
43
35
  return { isTransient: false, isRateLimit: false, suggestedDelayMs: 0 };
44
36
  }
@@ -8,17 +8,18 @@
8
8
  import { resolvePostUnitHooks, resolvePreDispatchHooks } from "./preferences.js";
9
9
  import { existsSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
10
10
  import { join } from "node:path";
11
- import { parseUnitId } from "./unit-id.js";
12
11
  // ─── Artifact Path Resolution ──────────────────────────────────────────────
13
12
  export function resolveHookArtifactPath(basePath, unitId, artifactName) {
14
- const { milestone, slice, task } = parseUnitId(unitId);
15
- if (task !== undefined && slice !== undefined) {
16
- return join(basePath, ".gsd", "milestones", milestone, "slices", slice, "tasks", `${task}-${artifactName}`);
13
+ const parts = unitId.split("/");
14
+ if (parts.length === 3) {
15
+ const [mid, sid, tid] = parts;
16
+ return join(basePath, ".gsd", "milestones", mid, "slices", sid, "tasks", `${tid}-${artifactName}`);
17
17
  }
18
- if (slice !== undefined) {
19
- return join(basePath, ".gsd", "milestones", milestone, "slices", slice, artifactName);
18
+ if (parts.length === 2) {
19
+ const [mid, sid] = parts;
20
+ return join(basePath, ".gsd", "milestones", mid, "slices", sid, artifactName);
20
21
  }
21
- return join(basePath, ".gsd", "milestones", milestone, artifactName);
22
+ return join(basePath, ".gsd", "milestones", parts[0], artifactName);
22
23
  }
23
24
  // ─── Dispatch Rule Conversion ──────────────────────────────────────────────
24
25
  /**
@@ -162,7 +163,7 @@ export class RuleRegistry {
162
163
  pendingRetry: false,
163
164
  };
164
165
  // Build prompt with variable substitution
165
- const { milestone: mid, slice: sid, task: tid } = parseUnitId(triggerUnitId);
166
+ const [mid, sid, tid] = triggerUnitId.split("/");
166
167
  let prompt = config.prompt
167
168
  .replace(/\{milestoneId\}/g, mid ?? "")
168
169
  .replace(/\{sliceId\}/g, sid ?? "")
@@ -223,7 +224,7 @@ export class RuleRegistry {
223
224
  if (hooks.length === 0) {
224
225
  return { action: "proceed", prompt, firedHooks: [] };
225
226
  }
226
- const { milestone: mid, slice: sid, task: tid } = parseUnitId(unitId);
227
+ const [mid, sid, tid] = unitId.split("/");
227
228
  const substitute = (text) => text
228
229
  .replace(/\{milestoneId\}/g, mid ?? "")
229
230
  .replace(/\{sliceId\}/g, sid ?? "")
@@ -409,7 +410,7 @@ export class RuleRegistry {
409
410
  const currentCycle = (this.cycleCounts.get(cycleKey) ?? 0) + 1;
410
411
  this.cycleCounts.set(cycleKey, currentCycle);
411
412
  this.activeHook.cycle = currentCycle;
412
- const { milestone: mid, slice: sid, task: tid } = parseUnitId(unitId);
413
+ const [mid, sid, tid] = unitId.split("/");
413
414
  const prompt = hook.prompt
414
415
  .replace(/\{milestoneId\}/g, mid ?? "")
415
416
  .replace(/\{sliceId\}/g, sid ?? "")
@@ -363,13 +363,9 @@ function formatTraceSummary(trace) {
363
363
  if (trace.errors.length > 0) {
364
364
  parts.push(`Errors: ${trace.errors.slice(-3).join("; ")}`);
365
365
  }
366
- // NOTE: lastReasoning is intentionally excluded from the retry diagnostic.
367
- // This summary is injected into retry prompts via getDeepDiagnostic()
368
- // phases.ts. Including prior assistant free-text causes hallucination loops
369
- // when the previous turn was truncated or malformed. Crash recovery has its
370
- // own path (formatCrashRecoveryBriefing) that handles lastReasoning safely
371
- // with explicit "Last Agent Reasoning Before Interruption" framing.
372
- // See: https://github.com/gsd-build/gsd-2/issues/2195
366
+ if (trace.lastReasoning) {
367
+ parts.push(`Last reasoning: "${trace.lastReasoning}"`);
368
+ }
373
369
  return parts.join("\n");
374
370
  }
375
371
  // ─── Helpers ──────────────────────────────────────────────────────────────────
@@ -9,9 +9,8 @@
9
9
  */
10
10
  import { existsSync, readdirSync, readFileSync } from "node:fs";
11
11
  import { join } from "node:path";
12
- import { homedir } from "node:os";
13
- /** Industry-standard skills.sh global skills directory */
14
- const SKILLS_DIR = join(homedir(), ".agents", "skills");
12
+ import { getAgentDir } from "@gsd/pi-coding-agent";
13
+ const SKILLS_DIR = join(getAgentDir(), "skills");
15
14
  /** Snapshot of skill names at auto-mode start */
16
15
  let baselineSkills = null;
17
16
  /**
@@ -14,7 +14,7 @@
14
14
  */
15
15
  import { existsSync } from "node:fs";
16
16
  import { join } from "node:path";
17
- import { homedir } from "node:os";
17
+ import { getAgentDir } from "@gsd/pi-coding-agent";
18
18
  import { formatCost, formatTokenCount, loadLedgerFromDisk } from "./metrics.js";
19
19
  import { detectStaleSkills } from "./skill-telemetry.js";
20
20
  // ─── Constants ────────────────────────────────────────────────────────────────
@@ -141,7 +141,7 @@ export function formatSkillDetail(basePath, skillName) {
141
141
  lines.push(` ${date} ${u.id.padEnd(20)} ${formatTokenCount(u.tokens.total).padStart(8)} tokens ${formatCost(u.cost)}`);
142
142
  }
143
143
  // Check for SKILL.md existence
144
- const skillPath = join(homedir(), ".agents", "skills", skillName, "SKILL.md");
144
+ const skillPath = join(getAgentDir(), "skills", skillName, "SKILL.md");
145
145
  if (existsSync(skillPath)) {
146
146
  const stat = require("node:fs").statSync(skillPath);
147
147
  lines.push("");
@@ -12,7 +12,7 @@
12
12
  */
13
13
  import { existsSync, readdirSync } from "node:fs";
14
14
  import { join } from "node:path";
15
- import { homedir } from "node:os";
15
+ import { getAgentDir } from "@gsd/pi-coding-agent";
16
16
  // ─── In-memory state ──────────────────────────────────────────────────────────
17
17
  /** Skills available in the system prompt for the current unit */
18
18
  let availableSkills = [];
@@ -24,14 +24,8 @@ const activelyLoadedSkills = new Set();
24
24
  * Called before each unit starts.
25
25
  */
26
26
  export function captureAvailableSkills() {
27
- const skillsDir = join(homedir(), ".agents", "skills");
28
- const legacyDir = join(homedir(), ".gsd", "agent", "skills");
29
- const names = listSkillNames(skillsDir);
30
- // Include skills still in the legacy directory only if migration hasn't completed
31
- const legacyMigrated = existsSync(join(legacyDir, ".migrated-to-agents"));
32
- const legacyNames = legacyMigrated ? [] : listSkillNames(legacyDir);
33
- const all = new Set([...names, ...legacyNames]);
34
- availableSkills = [...all];
27
+ const skillsDir = join(getAgentDir(), "skills");
28
+ availableSkills = listSkillNames(skillsDir);
35
29
  activelyLoadedSkills.clear();
36
30
  }
37
31
  /**
@@ -91,12 +85,8 @@ export function detectStaleSkills(units, thresholdDays) {
91
85
  const cutoff = Date.now() - (thresholdDays * 24 * 60 * 60 * 1000);
92
86
  const stale = [];
93
87
  // Check all installed skills, not just those with usage data
94
- const skillsDir = join(homedir(), ".agents", "skills");
95
- const legacyDir = join(homedir(), ".gsd", "agent", "skills");
96
- const legacyMigrated = existsSync(join(legacyDir, ".migrated-to-agents"));
97
- const legacyNames = legacyMigrated ? [] : listSkillNames(legacyDir);
98
- const installedSet = new Set([...listSkillNames(skillsDir), ...legacyNames]);
99
- const installed = [...installedSet];
88
+ const skillsDir = join(getAgentDir(), "skills");
89
+ const installed = listSkillNames(skillsDir);
100
90
  for (const skill of installed) {
101
91
  const lastTs = lastUsed.get(skill);
102
92
  if (lastTs === undefined || lastTs < cutoff) {
@@ -4,8 +4,7 @@
4
4
  import { parseRoadmap, parsePlan, } from './parsers-legacy.js';
5
5
  import { parseSummary, loadFile, parseRequirementCounts, parseContextDependsOn, } from './files.js';
6
6
  import { resolveMilestoneFile, resolveSlicePath, resolveSliceFile, resolveTaskFile, resolveTasksDir, resolveGsdRootFile, gsdRoot, } from './paths.js';
7
- import { findMilestoneIds } from './milestone-ids.js';
8
- import { loadQueueOrder, sortByQueueOrder } from './queue-order.js';
7
+ import { milestoneIdSort, findMilestoneIds } from './milestone-ids.js';
9
8
  import { nativeBatchParseGsdFiles } from './native-parser-bridge.js';
10
9
  import { join, resolve } from 'path';
11
10
  import { existsSync, readdirSync } from 'node:fs';
@@ -85,14 +84,8 @@ export async function getActiveMilestoneId(basePath) {
85
84
  if (isDbAvailable()) {
86
85
  const allMilestones = getAllMilestones();
87
86
  if (allMilestones.length > 0) {
88
- // Respect queue-order.json so /gsd queue reordering is honored (#2556).
89
- // Without this, the DB path uses lexicographic sort while the dispatch
90
- // guard uses queue order — causing a deadlock.
91
- const customOrder = loadQueueOrder(basePath);
92
- const sortedIds = sortByQueueOrder(allMilestones.map(m => m.id), customOrder);
93
- const byId = new Map(allMilestones.map(m => [m.id, m]));
94
- for (const id of sortedIds) {
95
- const m = byId.get(id);
87
+ const sorted = [...allMilestones].sort((a, b) => a.id.localeCompare(b.id));
88
+ for (const m of sorted) {
96
89
  if (m.status === "complete" || m.status === "done" || m.status === "parked")
97
90
  continue;
98
91
  return m.id;
@@ -240,13 +233,8 @@ export async function deriveStateFromDb(basePath) {
240
233
  });
241
234
  }
242
235
  }
243
- // Re-sort so milestones follow queue order (same as dispatch guard) (#2556)
244
- const customOrder = loadQueueOrder(basePath);
245
- const sortedIds = sortByQueueOrder(allMilestones.map(m => m.id), customOrder);
246
- const byId = new Map(allMilestones.map(m => [m.id, m]));
247
- allMilestones.length = 0;
248
- for (const id of sortedIds)
249
- allMilestones.push(byId.get(id));
236
+ // Re-sort so milestones are in canonical order after injection
237
+ allMilestones.sort((a, b) => milestoneIdSort(a.id, b.id));
250
238
  // Parallel worker isolation: when locked, filter to just the locked milestone
251
239
  const milestoneLock = process.env.GSD_MILESTONE_LOCK;
252
240
  const milestones = milestoneLock
@@ -35,18 +35,6 @@ validated_at: {{date}}
35
35
 
36
36
  - **{{requirementId}}**: {{status}} — {{disposition: covered by remediation slice / acceptable gap / needs attention}}
37
37
 
38
- ## Verification Class Compliance
39
-
40
- <!-- If verification classes were defined during planning, document whether each
41
- was addressed. Use N/A for classes that were empty or "none" in planning. -->
42
-
43
- | Class | Planned | Evidence | Status |
44
- |-------|---------|----------|--------|
45
- | Contract | {{planned_or_none}} | {{evidence_or_none}} | {{MET / NOT MET / N/A}} |
46
- | Integration | {{planned_or_none}} | {{evidence_or_none}} | {{MET / NOT MET / N/A}} |
47
- | Operational | {{planned_or_none}} | {{evidence_or_none}} | {{MET / NOT MET / N/A}} |
48
- | UAT | {{planned_or_none}} | {{evidence_or_none}} | {{MET / NOT MET / N/A}} |
49
-
50
38
  ## Remediation Slices
51
39
 
52
40
  <!-- New slices appended to the roadmap to address auto-remediable gaps.
@@ -71,8 +71,6 @@ remote_questions:
71
71
  uat_dispatch:
72
72
  post_unit_hooks: []
73
73
  pre_dispatch_hooks: []
74
- # experimental:
75
- # rtk: false
76
74
  ---
77
75
 
78
76
  # GSD Skill Preferences
@@ -7,28 +7,17 @@ const require = createRequire(import.meta.url);
7
7
  const ROOT = new URL("../../../../../", import.meta.url);
8
8
 
9
9
  export function resolve(specifier, context, nextResolve) {
10
- // 1. Redirect all workspace package bare imports to source.
11
- // CI portability runs don't build any packages/ dist artifacts, so every
12
- // @gsd/* specifier (including transitive ones pulled in by pi-coding-agent
13
- // source itself) must resolve to the TypeScript source entrypoint.
10
+ // 1. Direct redirects to dist/ for specific packages
14
11
  if (specifier === "../../packages/pi-coding-agent/src/index.js") {
15
- specifier = new URL("packages/pi-coding-agent/src/index.ts", ROOT).href;
16
- } else if (specifier === "@gsd/pi-coding-agent") {
17
- specifier = new URL("packages/pi-coding-agent/src/index.ts", ROOT).href;
12
+ specifier = new URL("packages/pi-coding-agent/dist/index.js", ROOT).href;
18
13
  } else if (specifier === "@gsd/pi-ai/oauth") {
19
- specifier = new URL("packages/pi-ai/src/utils/oauth/index.ts", ROOT).href;
14
+ specifier = new URL("packages/pi-ai/dist/utils/oauth/index.js", ROOT).href;
20
15
  } else if (specifier === "@gsd/pi-ai") {
21
- specifier = new URL("packages/pi-ai/src/index.ts", ROOT).href;
16
+ specifier = new URL("packages/pi-ai/dist/index.js", ROOT).href;
22
17
  } else if (specifier === "@gsd/pi-agent-core") {
23
- specifier = new URL("packages/pi-agent-core/src/index.ts", ROOT).href;
18
+ specifier = new URL("packages/pi-agent-core/dist/index.js", ROOT).href;
24
19
  } else if (specifier === "@gsd/pi-tui") {
25
- specifier = new URL("packages/pi-tui/src/index.ts", ROOT).href;
26
- } else if (specifier === "@gsd/native") {
27
- specifier = new URL("packages/native/src/index.ts", ROOT).href;
28
- } else if (specifier.startsWith("@gsd/native/")) {
29
- // Sub-path imports like @gsd/native/fd, @gsd/native/text, etc.
30
- const subpath = specifier.slice("@gsd/native/".length);
31
- specifier = new URL(`packages/native/src/${subpath}/index.ts`, ROOT).href;
20
+ specifier = new URL("packages/pi-tui/dist/index.js", ROOT).href;
32
21
  }
33
22
  // 2. Redirect packages/*/dist/ → packages/*/src/ with .js→.ts for strip-types
34
23
  // Also handles local imports — skip rewrite for dist/ paths that are real compiled artifacts.
@@ -65,15 +54,9 @@ export function resolve(specifier, context, nextResolve) {
65
54
  }
66
55
 
67
56
  export function load(url, context, nextLoad) {
68
- // Node's --experimental-strip-types handles plain .ts but not .tsx and not
69
- // all TypeScript syntax used by workspace packages (parameter properties,
70
- // decorators, etc.). Transpile all workspace package source files and .tsx
71
- // files through TypeScript's transpileModule to avoid those crashes.
72
- const shouldTranspileWithTypeScript =
73
- url.endsWith('.tsx') ||
74
- (url.endsWith('.ts') && url.includes('/packages/') && url.includes('/src/'));
75
-
76
- if (shouldTranspileWithTypeScript) {
57
+ // Node's --experimental-strip-types handles .ts but not .tsx (which may contain JSX).
58
+ // Use TypeScript to transpile .tsx JS with react-jsx transform, then serve as module.
59
+ if (url.endsWith('.tsx')) {
77
60
  const ts = require('typescript');
78
61
  const source = readFileSync(fileURLToPath(url), 'utf-8');
79
62
  const { outputText } = ts.transpileModule(source, {
@@ -83,8 +66,6 @@ export function load(url, context, nextLoad) {
83
66
  module: ts.ModuleKind.ESNext,
84
67
  target: ts.ScriptTarget.ESNext,
85
68
  esModuleInterop: true,
86
- experimentalDecorators: true,
87
- emitDecoratorMetadata: true,
88
69
  },
89
70
  });
90
71
  return { format: 'module', source: outputText, shortCircuit: true };