gsd-pi 2.50.0-dev.9476db8 → 2.50.0-dev.d210a87

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 (493) hide show
  1. package/README.md +2 -0
  2. package/dist/cli.js +26 -0
  3. package/dist/loader.js +4 -0
  4. package/dist/resource-loader.d.ts +4 -1
  5. package/dist/resource-loader.js +138 -3
  6. package/dist/resources/extensions/async-jobs/async-bash-tool.js +3 -1
  7. package/dist/resources/extensions/bg-shell/interaction.js +3 -1
  8. package/dist/resources/extensions/bg-shell/process-manager.js +4 -1
  9. package/dist/resources/extensions/claude-code-cli/partial-builder.js +5 -0
  10. package/dist/resources/extensions/gsd/auto/phases.js +16 -1
  11. package/dist/resources/extensions/gsd/auto/session.js +5 -0
  12. package/dist/resources/extensions/gsd/auto-dashboard.js +22 -3
  13. package/dist/resources/extensions/gsd/auto-dispatch.js +81 -54
  14. package/dist/resources/extensions/gsd/auto-observability.js +54 -0
  15. package/dist/resources/extensions/gsd/auto-post-unit.js +37 -76
  16. package/dist/resources/extensions/gsd/auto-prompts.js +57 -0
  17. package/dist/resources/extensions/gsd/auto-recovery.js +21 -25
  18. package/dist/resources/extensions/gsd/auto-utils.js +20 -0
  19. package/dist/resources/extensions/gsd/auto.js +15 -5
  20. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +16 -0
  21. package/dist/resources/extensions/gsd/crash-recovery.js +6 -2
  22. package/dist/resources/extensions/gsd/custom-execution-policy.js +3 -2
  23. package/dist/resources/extensions/gsd/custom-verification.js +3 -1
  24. package/dist/resources/extensions/gsd/custom-workflow-engine.js +3 -2
  25. package/dist/resources/extensions/gsd/dashboard-overlay.js +4 -0
  26. package/dist/resources/extensions/gsd/detection.js +589 -3
  27. package/dist/resources/extensions/gsd/dispatch-guard.js +2 -1
  28. package/dist/resources/extensions/gsd/docs/preferences-reference.md +15 -0
  29. package/dist/resources/extensions/gsd/files.js +5 -1
  30. package/dist/resources/extensions/gsd/guided-flow.js +10 -0
  31. package/dist/resources/extensions/gsd/init-wizard.js +9 -1
  32. package/dist/resources/extensions/gsd/model-router.js +25 -0
  33. package/dist/resources/extensions/gsd/notifications.js +23 -0
  34. package/dist/resources/extensions/gsd/observability-validator.js +422 -0
  35. package/dist/resources/extensions/gsd/preferences-skills.js +11 -5
  36. package/dist/resources/extensions/gsd/preferences-types.js +1 -0
  37. package/dist/resources/extensions/gsd/preferences-validation.js +25 -0
  38. package/dist/resources/extensions/gsd/preferences.js +3 -0
  39. package/dist/resources/extensions/gsd/prompts/forensics.md +11 -7
  40. package/dist/resources/extensions/gsd/prompts/validate-milestone.md +6 -1
  41. package/dist/resources/extensions/gsd/provider-error-pause.js +8 -0
  42. package/dist/resources/extensions/gsd/roadmap-mutations.js +110 -0
  43. package/dist/resources/extensions/gsd/rtk-status.js +43 -0
  44. package/dist/resources/extensions/gsd/rule-registry.js +10 -11
  45. package/dist/resources/extensions/gsd/session-forensics.js +7 -3
  46. package/dist/resources/extensions/gsd/skill-catalog.js +1026 -0
  47. package/dist/resources/extensions/gsd/skill-discovery.js +3 -2
  48. package/dist/resources/extensions/gsd/skill-health.js +2 -2
  49. package/dist/resources/extensions/gsd/skill-telemetry.js +15 -5
  50. package/dist/resources/extensions/gsd/state.js +17 -5
  51. package/dist/resources/extensions/gsd/templates/milestone-validation.md +12 -0
  52. package/dist/resources/extensions/gsd/templates/preferences.md +2 -0
  53. package/dist/resources/extensions/gsd/tests/dist-redirect.mjs +28 -9
  54. package/dist/resources/extensions/gsd/undo.js +8 -7
  55. package/dist/resources/extensions/gsd/unit-runtime.js +2 -1
  56. package/dist/resources/extensions/gsd/verification-gate.js +3 -1
  57. package/dist/resources/extensions/shared/rtk-session-stats.js +189 -0
  58. package/dist/resources/extensions/shared/rtk.js +100 -0
  59. package/dist/rtk.d.ts +52 -0
  60. package/dist/rtk.js +332 -0
  61. package/dist/web/standalone/.next/BUILD_ID +1 -1
  62. package/dist/web/standalone/.next/app-path-routes-manifest.json +17 -16
  63. package/dist/web/standalone/.next/build-manifest.json +3 -3
  64. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  65. package/dist/web/standalone/.next/react-loadable-manifest.json +2 -2
  66. package/dist/web/standalone/.next/required-server-files.json +1 -1
  67. package/dist/web/standalone/.next/routes-manifest.json +6 -0
  68. package/dist/web/standalone/.next/server/app/_global-error/page.js +2 -2
  69. package/dist/web/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
  70. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  71. package/dist/web/standalone/.next/server/app/_global-error.html +2 -2
  72. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  73. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  74. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  75. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  76. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  77. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  78. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  79. package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
  80. package/dist/web/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  81. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  82. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  83. package/dist/web/standalone/.next/server/app/_not-found.rsc +2 -2
  84. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  85. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  86. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  87. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  88. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  89. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  90. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  91. package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
  92. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  93. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  94. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
  95. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  96. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  97. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
  98. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  99. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
  100. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
  101. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  102. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
  103. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js.nft.json +1 -1
  104. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  105. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  106. package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
  107. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  108. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  109. package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
  110. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  111. package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
  112. package/dist/web/standalone/.next/server/app/api/dev-mode/route.js.nft.json +1 -1
  113. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  114. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  115. package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
  116. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  117. package/dist/web/standalone/.next/server/app/api/experimental/route.js +3 -0
  118. package/dist/web/standalone/.next/server/app/api/experimental/route.js.nft.json +1 -0
  119. package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -0
  120. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  121. package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
  122. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  123. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  124. package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  125. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  126. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  127. package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
  128. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  129. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  130. package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  131. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  132. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  133. package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
  134. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  135. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  136. package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
  137. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  138. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  139. package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
  140. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  141. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  142. package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
  143. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  144. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  145. package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
  146. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  147. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  148. package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
  149. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  150. package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
  151. package/dist/web/standalone/.next/server/app/api/preferences/route.js.nft.json +1 -1
  152. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  153. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  154. package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  155. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  156. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  157. package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
  158. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  159. package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -26
  160. package/dist/web/standalone/.next/server/app/api/remote-questions/route.js.nft.json +1 -1
  161. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  162. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  163. package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
  164. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  165. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  166. package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
  167. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  168. package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
  169. package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
  170. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  171. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  172. package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
  173. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  174. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  175. package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
  176. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  177. package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
  178. package/dist/web/standalone/.next/server/app/api/shutdown/route.js.nft.json +1 -1
  179. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  180. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  181. package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
  182. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  183. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  184. package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
  185. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  186. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  187. package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
  188. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  189. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +2 -2
  190. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js.nft.json +1 -1
  191. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  192. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
  193. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js.nft.json +1 -1
  194. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  195. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +2 -2
  196. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
  197. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  198. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +3 -3
  199. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
  200. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  201. package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
  202. package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js.nft.json +1 -1
  203. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  204. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  205. package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
  206. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  207. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  208. package/dist/web/standalone/.next/server/app/api/update/route.js.nft.json +1 -1
  209. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  210. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  211. package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
  212. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  213. package/dist/web/standalone/.next/server/app/index.html +1 -1
  214. package/dist/web/standalone/.next/server/app/index.rsc +3 -3
  215. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  216. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +3 -3
  217. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  218. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +2 -2
  219. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  220. package/dist/web/standalone/.next/server/app/page.js +2 -2
  221. package/dist/web/standalone/.next/server/app/page.js.nft.json +1 -1
  222. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  223. package/dist/web/standalone/.next/server/app-paths-manifest.json +17 -16
  224. package/dist/web/standalone/.next/server/chunks/2229.js +12 -0
  225. package/dist/web/standalone/.next/server/chunks/2331.js +25 -0
  226. package/dist/web/standalone/.next/server/chunks/{741.js → 4741.js} +1 -1
  227. package/dist/web/standalone/.next/server/chunks/5822.js +2 -0
  228. package/dist/web/standalone/.next/server/chunks/{471.js → 7471.js} +1 -1
  229. package/dist/web/standalone/.next/server/functions-config-manifest.json +1 -0
  230. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  231. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  232. package/dist/web/standalone/.next/server/middleware.js +1 -1
  233. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  234. package/dist/web/standalone/.next/server/pages/500.html +2 -2
  235. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  236. package/dist/web/standalone/.next/server/webpack-runtime.js +1 -1
  237. package/dist/web/standalone/.next/static/chunks/{485.243af25f0cdf50d6.js → 2008.817d0885545aaea9.js} +6 -6
  238. package/dist/web/standalone/.next/static/chunks/4024.9ad5def014d90ce4.js +9 -0
  239. package/dist/web/standalone/.next/static/chunks/app/_global-error/page-c4cc189e7b117ea2.js +1 -0
  240. package/dist/web/standalone/.next/static/chunks/app/api/boot/route-c4cc189e7b117ea2.js +1 -0
  241. package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/input/route-c4cc189e7b117ea2.js +1 -0
  242. package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/resize/route-c4cc189e7b117ea2.js +1 -0
  243. package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/stream/route-c4cc189e7b117ea2.js +1 -0
  244. package/dist/web/standalone/.next/static/chunks/app/api/browse-directories/route-c4cc189e7b117ea2.js +1 -0
  245. package/dist/web/standalone/.next/static/chunks/app/api/captures/route-c4cc189e7b117ea2.js +1 -0
  246. package/dist/web/standalone/.next/static/chunks/app/api/cleanup/route-c4cc189e7b117ea2.js +1 -0
  247. package/dist/web/standalone/.next/static/chunks/app/api/dev-mode/route-c4cc189e7b117ea2.js +1 -0
  248. package/dist/web/standalone/.next/static/chunks/app/api/doctor/route-c4cc189e7b117ea2.js +1 -0
  249. package/dist/web/standalone/.next/static/chunks/app/api/experimental/route-c4cc189e7b117ea2.js +1 -0
  250. package/dist/web/standalone/.next/static/chunks/app/api/export-data/route-c4cc189e7b117ea2.js +1 -0
  251. package/dist/web/standalone/.next/static/chunks/app/api/files/route-c4cc189e7b117ea2.js +1 -0
  252. package/dist/web/standalone/.next/static/chunks/app/api/forensics/route-c4cc189e7b117ea2.js +1 -0
  253. package/dist/web/standalone/.next/static/chunks/app/api/git/route-c4cc189e7b117ea2.js +1 -0
  254. package/dist/web/standalone/.next/static/chunks/app/api/history/route-c4cc189e7b117ea2.js +1 -0
  255. package/dist/web/standalone/.next/static/chunks/app/api/hooks/route-c4cc189e7b117ea2.js +1 -0
  256. package/dist/web/standalone/.next/static/chunks/app/api/inspect/route-c4cc189e7b117ea2.js +1 -0
  257. package/dist/web/standalone/.next/static/chunks/app/api/knowledge/route-c4cc189e7b117ea2.js +1 -0
  258. package/dist/web/standalone/.next/static/chunks/app/api/live-state/route-c4cc189e7b117ea2.js +1 -0
  259. package/dist/web/standalone/.next/static/chunks/app/api/onboarding/route-c4cc189e7b117ea2.js +1 -0
  260. package/dist/web/standalone/.next/static/chunks/app/api/preferences/route-c4cc189e7b117ea2.js +1 -0
  261. package/dist/web/standalone/.next/static/chunks/app/api/projects/route-c4cc189e7b117ea2.js +1 -0
  262. package/dist/web/standalone/.next/static/chunks/app/api/recovery/route-c4cc189e7b117ea2.js +1 -0
  263. package/dist/web/standalone/.next/static/chunks/app/api/remote-questions/route-c4cc189e7b117ea2.js +1 -0
  264. package/dist/web/standalone/.next/static/chunks/app/api/session/browser/route-c4cc189e7b117ea2.js +1 -0
  265. package/dist/web/standalone/.next/static/chunks/app/api/session/command/route-c4cc189e7b117ea2.js +1 -0
  266. package/dist/web/standalone/.next/static/chunks/app/api/session/events/route-c4cc189e7b117ea2.js +1 -0
  267. package/dist/web/standalone/.next/static/chunks/app/api/session/manage/route-c4cc189e7b117ea2.js +1 -0
  268. package/dist/web/standalone/.next/static/chunks/app/api/settings-data/route-c4cc189e7b117ea2.js +1 -0
  269. package/dist/web/standalone/.next/static/chunks/app/api/shutdown/route-c4cc189e7b117ea2.js +1 -0
  270. package/dist/web/standalone/.next/static/chunks/app/api/skill-health/route-c4cc189e7b117ea2.js +1 -0
  271. package/dist/web/standalone/.next/static/chunks/app/api/steer/route-c4cc189e7b117ea2.js +1 -0
  272. package/dist/web/standalone/.next/static/chunks/app/api/switch-root/route-c4cc189e7b117ea2.js +1 -0
  273. package/dist/web/standalone/.next/static/chunks/app/api/terminal/input/route-c4cc189e7b117ea2.js +1 -0
  274. package/dist/web/standalone/.next/static/chunks/app/api/terminal/resize/route-c4cc189e7b117ea2.js +1 -0
  275. package/dist/web/standalone/.next/static/chunks/app/api/terminal/sessions/route-c4cc189e7b117ea2.js +1 -0
  276. package/dist/web/standalone/.next/static/chunks/app/api/terminal/stream/route-c4cc189e7b117ea2.js +1 -0
  277. package/dist/web/standalone/.next/static/chunks/app/api/terminal/upload/route-c4cc189e7b117ea2.js +1 -0
  278. package/dist/web/standalone/.next/static/chunks/app/api/undo/route-c4cc189e7b117ea2.js +1 -0
  279. package/dist/web/standalone/.next/static/chunks/app/api/update/route-c4cc189e7b117ea2.js +1 -0
  280. package/dist/web/standalone/.next/static/chunks/app/api/visualizer/route-c4cc189e7b117ea2.js +1 -0
  281. package/dist/web/standalone/.next/static/chunks/app/{page-6654a8cca61a3d1c.js → page-b950e4e384cc62b3.js} +1 -1
  282. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-c4cc189e7b117ea2.js +1 -0
  283. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-c4cc189e7b117ea2.js +1 -0
  284. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-c4cc189e7b117ea2.js +1 -0
  285. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-c4cc189e7b117ea2.js +1 -0
  286. package/dist/web/standalone/.next/static/chunks/webpack-cfc9a116e6450a6b.js +1 -0
  287. package/dist/web/standalone/.next/static/css/de141508b083f922.css +1 -0
  288. package/dist/web/standalone/.next/static/yJIyd5cXPNpmXTv18ZlyC/_buildManifest.js +1 -0
  289. package/dist/web/standalone/server.js +1 -1
  290. package/package.json +1 -1
  291. package/packages/pi-ai/dist/types.d.ts +1 -0
  292. package/packages/pi-ai/dist/types.d.ts.map +1 -1
  293. package/packages/pi-ai/dist/types.js.map +1 -1
  294. package/packages/pi-ai/src/types.ts +1 -1
  295. package/packages/pi-coding-agent/dist/core/agent-session.d.ts +1 -0
  296. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  297. package/packages/pi-coding-agent/dist/core/agent-session.js +1 -0
  298. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  299. package/packages/pi-coding-agent/dist/core/bash-executor.d.ts +3 -1
  300. package/packages/pi-coding-agent/dist/core/bash-executor.d.ts.map +1 -1
  301. package/packages/pi-coding-agent/dist/core/bash-executor.js +10 -1
  302. package/packages/pi-coding-agent/dist/core/bash-executor.js.map +1 -1
  303. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +1 -1
  304. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
  305. package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
  306. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +1 -0
  307. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
  308. package/packages/pi-coding-agent/dist/core/extensions/runner.js +13 -0
  309. package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
  310. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +19 -1
  311. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
  312. package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
  313. package/packages/pi-coding-agent/dist/core/extensions/wrapper.d.ts.map +1 -1
  314. package/packages/pi-coding-agent/dist/core/extensions/wrapper.js +8 -0
  315. package/packages/pi-coding-agent/dist/core/extensions/wrapper.js.map +1 -1
  316. package/packages/pi-coding-agent/dist/core/package-manager.d.ts.map +1 -1
  317. package/packages/pi-coding-agent/dist/core/package-manager.js +8 -1
  318. package/packages/pi-coding-agent/dist/core/package-manager.js.map +1 -1
  319. package/packages/pi-coding-agent/dist/core/skills.d.ts +11 -1
  320. package/packages/pi-coding-agent/dist/core/skills.d.ts.map +1 -1
  321. package/packages/pi-coding-agent/dist/core/skills.js +30 -8
  322. package/packages/pi-coding-agent/dist/core/skills.js.map +1 -1
  323. package/packages/pi-coding-agent/dist/core/slash-commands.d.ts.map +1 -1
  324. package/packages/pi-coding-agent/dist/core/slash-commands.js +1 -0
  325. package/packages/pi-coding-agent/dist/core/slash-commands.js.map +1 -1
  326. package/packages/pi-coding-agent/dist/index.d.ts +2 -2
  327. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  328. package/packages/pi-coding-agent/dist/index.js +1 -1
  329. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  330. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
  331. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +3 -2
  332. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
  333. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  334. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +6 -4
  335. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  336. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts +5 -0
  337. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts.map +1 -1
  338. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js +12 -0
  339. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js.map +1 -1
  340. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts.map +1 -1
  341. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +2 -1
  342. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -1
  343. package/packages/pi-coding-agent/src/core/agent-session.ts +2 -1
  344. package/packages/pi-coding-agent/src/core/bash-executor.ts +10 -2
  345. package/packages/pi-coding-agent/src/core/extensions/index.ts +2 -0
  346. package/packages/pi-coding-agent/src/core/extensions/runner.ts +18 -0
  347. package/packages/pi-coding-agent/src/core/extensions/types.ts +21 -0
  348. package/packages/pi-coding-agent/src/core/extensions/wrapper.ts +9 -0
  349. package/packages/pi-coding-agent/src/core/package-manager.ts +10 -1
  350. package/packages/pi-coding-agent/src/core/skills.ts +35 -10
  351. package/packages/pi-coding-agent/src/core/slash-commands.ts +1 -0
  352. package/packages/pi-coding-agent/src/index.ts +4 -0
  353. package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +3 -2
  354. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +6 -4
  355. package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.ts +15 -0
  356. package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +2 -1
  357. package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -1
  358. package/pkg/dist/modes/interactive/theme/themes.js +2 -1
  359. package/pkg/dist/modes/interactive/theme/themes.js.map +1 -1
  360. package/scripts/postinstall.js +163 -6
  361. package/src/resources/extensions/async-jobs/async-bash-tool.ts +3 -1
  362. package/src/resources/extensions/bg-shell/interaction.ts +3 -1
  363. package/src/resources/extensions/bg-shell/process-manager.ts +4 -1
  364. package/src/resources/extensions/claude-code-cli/partial-builder.ts +5 -0
  365. package/src/resources/extensions/claude-code-cli/tests/partial-builder.test.ts +105 -0
  366. package/src/resources/extensions/gsd/auto/phases.ts +15 -1
  367. package/src/resources/extensions/gsd/auto/session.ts +6 -0
  368. package/src/resources/extensions/gsd/auto-dashboard.ts +31 -3
  369. package/src/resources/extensions/gsd/auto-dispatch.ts +84 -51
  370. package/src/resources/extensions/gsd/auto-observability.ts +72 -0
  371. package/src/resources/extensions/gsd/auto-post-unit.ts +56 -83
  372. package/src/resources/extensions/gsd/auto-prompts.ts +48 -0
  373. package/src/resources/extensions/gsd/auto-recovery.ts +19 -26
  374. package/src/resources/extensions/gsd/auto-utils.ts +25 -0
  375. package/src/resources/extensions/gsd/auto.ts +15 -5
  376. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +17 -0
  377. package/src/resources/extensions/gsd/crash-recovery.ts +6 -2
  378. package/src/resources/extensions/gsd/custom-execution-policy.ts +3 -2
  379. package/src/resources/extensions/gsd/custom-verification.ts +3 -1
  380. package/src/resources/extensions/gsd/custom-workflow-engine.ts +3 -2
  381. package/src/resources/extensions/gsd/dashboard-overlay.ts +7 -0
  382. package/src/resources/extensions/gsd/detection.ts +662 -3
  383. package/src/resources/extensions/gsd/dispatch-guard.ts +2 -1
  384. package/src/resources/extensions/gsd/docs/preferences-reference.md +15 -0
  385. package/src/resources/extensions/gsd/files.ts +6 -1
  386. package/src/resources/extensions/gsd/guided-flow.ts +11 -0
  387. package/src/resources/extensions/gsd/init-wizard.ts +9 -1
  388. package/src/resources/extensions/gsd/model-router.ts +25 -0
  389. package/src/resources/extensions/gsd/notifications.ts +23 -0
  390. package/src/resources/extensions/gsd/observability-validator.ts +456 -0
  391. package/src/resources/extensions/gsd/preferences-skills.ts +11 -5
  392. package/src/resources/extensions/gsd/preferences-types.ts +20 -0
  393. package/src/resources/extensions/gsd/preferences-validation.ts +26 -0
  394. package/src/resources/extensions/gsd/preferences.ts +3 -0
  395. package/src/resources/extensions/gsd/prompts/forensics.md +11 -7
  396. package/src/resources/extensions/gsd/prompts/validate-milestone.md +6 -1
  397. package/src/resources/extensions/gsd/provider-error-pause.ts +9 -0
  398. package/src/resources/extensions/gsd/roadmap-mutations.ts +134 -0
  399. package/src/resources/extensions/gsd/rtk-status.ts +53 -0
  400. package/src/resources/extensions/gsd/rule-registry.ts +10 -11
  401. package/src/resources/extensions/gsd/session-forensics.ts +7 -3
  402. package/src/resources/extensions/gsd/skill-catalog.ts +1085 -0
  403. package/src/resources/extensions/gsd/skill-discovery.ts +3 -2
  404. package/src/resources/extensions/gsd/skill-health.ts +2 -2
  405. package/src/resources/extensions/gsd/skill-telemetry.ts +15 -5
  406. package/src/resources/extensions/gsd/state.ts +16 -5
  407. package/src/resources/extensions/gsd/templates/milestone-validation.md +12 -0
  408. package/src/resources/extensions/gsd/templates/preferences.md +2 -0
  409. package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +16 -0
  410. package/src/resources/extensions/gsd/tests/auto-lock-creation.test.ts +2 -2
  411. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +68 -0
  412. package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +2 -2
  413. package/src/resources/extensions/gsd/tests/crash-recovery.test.ts +5 -3
  414. package/src/resources/extensions/gsd/tests/custom-verification.test.ts +33 -0
  415. package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +4 -3
  416. package/src/resources/extensions/gsd/tests/detection.test.ts +838 -0
  417. package/src/resources/extensions/gsd/tests/dist-redirect.mjs +28 -9
  418. package/src/resources/extensions/gsd/tests/double-merge-guard.test.ts +97 -0
  419. package/src/resources/extensions/gsd/tests/idle-recovery.test.ts +63 -0
  420. package/src/resources/extensions/gsd/tests/model-router.test.ts +40 -0
  421. package/src/resources/extensions/gsd/tests/notifications.test.ts +28 -6
  422. package/src/resources/extensions/gsd/tests/plan-quality-validator.test.ts +474 -0
  423. package/src/resources/extensions/gsd/tests/preferences.test.ts +50 -0
  424. package/src/resources/extensions/gsd/tests/queue-reorder-e2e.test.ts +40 -0
  425. package/src/resources/extensions/gsd/tests/reactive-executor.test.ts +6 -6
  426. package/src/resources/extensions/gsd/tests/retry-diagnostic-reasoning.test.ts +161 -0
  427. package/src/resources/extensions/gsd/tests/retry-state-reset.test.ts +4 -5
  428. package/src/resources/extensions/gsd/tests/rewrite-count-persist.test.ts +82 -0
  429. package/src/resources/extensions/gsd/tests/run-uat.test.ts +146 -0
  430. package/src/resources/extensions/gsd/tests/sidecar-queue.test.ts +12 -12
  431. package/src/resources/extensions/gsd/tests/skill-catalog.test.ts +193 -0
  432. package/src/resources/extensions/gsd/tests/terminated-transient.test.ts +24 -0
  433. package/src/resources/extensions/gsd/tests/triage-dispatch.test.ts +2 -2
  434. package/src/resources/extensions/gsd/types.ts +2 -0
  435. package/src/resources/extensions/gsd/undo.ts +8 -7
  436. package/src/resources/extensions/gsd/unit-runtime.ts +2 -1
  437. package/src/resources/extensions/gsd/verification-gate.ts +3 -1
  438. package/src/resources/extensions/shared/rtk-session-stats.ts +249 -0
  439. package/src/resources/extensions/shared/rtk.ts +120 -0
  440. package/dist/web/standalone/.next/server/chunks/229.js +0 -12
  441. package/dist/web/standalone/.next/server/chunks/441.js +0 -2
  442. package/dist/web/standalone/.next/static/MkE9kzqUGny3-cSE0GNnm/_buildManifest.js +0 -1
  443. package/dist/web/standalone/.next/static/chunks/4024.7c75ac378de0f2b5.js +0 -9
  444. package/dist/web/standalone/.next/static/chunks/app/_global-error/page-d83ba70a25a85472.js +0 -1
  445. package/dist/web/standalone/.next/static/chunks/app/api/boot/route-d83ba70a25a85472.js +0 -1
  446. package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/input/route-d83ba70a25a85472.js +0 -1
  447. package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/resize/route-d83ba70a25a85472.js +0 -1
  448. package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/stream/route-d83ba70a25a85472.js +0 -1
  449. package/dist/web/standalone/.next/static/chunks/app/api/browse-directories/route-d83ba70a25a85472.js +0 -1
  450. package/dist/web/standalone/.next/static/chunks/app/api/captures/route-d83ba70a25a85472.js +0 -1
  451. package/dist/web/standalone/.next/static/chunks/app/api/cleanup/route-d83ba70a25a85472.js +0 -1
  452. package/dist/web/standalone/.next/static/chunks/app/api/dev-mode/route-d83ba70a25a85472.js +0 -1
  453. package/dist/web/standalone/.next/static/chunks/app/api/doctor/route-d83ba70a25a85472.js +0 -1
  454. package/dist/web/standalone/.next/static/chunks/app/api/export-data/route-d83ba70a25a85472.js +0 -1
  455. package/dist/web/standalone/.next/static/chunks/app/api/files/route-d83ba70a25a85472.js +0 -1
  456. package/dist/web/standalone/.next/static/chunks/app/api/forensics/route-d83ba70a25a85472.js +0 -1
  457. package/dist/web/standalone/.next/static/chunks/app/api/git/route-d83ba70a25a85472.js +0 -1
  458. package/dist/web/standalone/.next/static/chunks/app/api/history/route-d83ba70a25a85472.js +0 -1
  459. package/dist/web/standalone/.next/static/chunks/app/api/hooks/route-d83ba70a25a85472.js +0 -1
  460. package/dist/web/standalone/.next/static/chunks/app/api/inspect/route-d83ba70a25a85472.js +0 -1
  461. package/dist/web/standalone/.next/static/chunks/app/api/knowledge/route-d83ba70a25a85472.js +0 -1
  462. package/dist/web/standalone/.next/static/chunks/app/api/live-state/route-d83ba70a25a85472.js +0 -1
  463. package/dist/web/standalone/.next/static/chunks/app/api/onboarding/route-d83ba70a25a85472.js +0 -1
  464. package/dist/web/standalone/.next/static/chunks/app/api/preferences/route-d83ba70a25a85472.js +0 -1
  465. package/dist/web/standalone/.next/static/chunks/app/api/projects/route-d83ba70a25a85472.js +0 -1
  466. package/dist/web/standalone/.next/static/chunks/app/api/recovery/route-d83ba70a25a85472.js +0 -1
  467. package/dist/web/standalone/.next/static/chunks/app/api/remote-questions/route-d83ba70a25a85472.js +0 -1
  468. package/dist/web/standalone/.next/static/chunks/app/api/session/browser/route-d83ba70a25a85472.js +0 -1
  469. package/dist/web/standalone/.next/static/chunks/app/api/session/command/route-d83ba70a25a85472.js +0 -1
  470. package/dist/web/standalone/.next/static/chunks/app/api/session/events/route-d83ba70a25a85472.js +0 -1
  471. package/dist/web/standalone/.next/static/chunks/app/api/session/manage/route-d83ba70a25a85472.js +0 -1
  472. package/dist/web/standalone/.next/static/chunks/app/api/settings-data/route-d83ba70a25a85472.js +0 -1
  473. package/dist/web/standalone/.next/static/chunks/app/api/shutdown/route-d83ba70a25a85472.js +0 -1
  474. package/dist/web/standalone/.next/static/chunks/app/api/skill-health/route-d83ba70a25a85472.js +0 -1
  475. package/dist/web/standalone/.next/static/chunks/app/api/steer/route-d83ba70a25a85472.js +0 -1
  476. package/dist/web/standalone/.next/static/chunks/app/api/switch-root/route-d83ba70a25a85472.js +0 -1
  477. package/dist/web/standalone/.next/static/chunks/app/api/terminal/input/route-d83ba70a25a85472.js +0 -1
  478. package/dist/web/standalone/.next/static/chunks/app/api/terminal/resize/route-d83ba70a25a85472.js +0 -1
  479. package/dist/web/standalone/.next/static/chunks/app/api/terminal/sessions/route-d83ba70a25a85472.js +0 -1
  480. package/dist/web/standalone/.next/static/chunks/app/api/terminal/stream/route-d83ba70a25a85472.js +0 -1
  481. package/dist/web/standalone/.next/static/chunks/app/api/terminal/upload/route-d83ba70a25a85472.js +0 -1
  482. package/dist/web/standalone/.next/static/chunks/app/api/undo/route-d83ba70a25a85472.js +0 -1
  483. package/dist/web/standalone/.next/static/chunks/app/api/update/route-d83ba70a25a85472.js +0 -1
  484. package/dist/web/standalone/.next/static/chunks/app/api/visualizer/route-d83ba70a25a85472.js +0 -1
  485. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-d83ba70a25a85472.js +0 -1
  486. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-d83ba70a25a85472.js +0 -1
  487. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-d83ba70a25a85472.js +0 -1
  488. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-d83ba70a25a85472.js +0 -1
  489. package/dist/web/standalone/.next/static/chunks/webpack-2473ce2c3879fff4.js +0 -1
  490. package/dist/web/standalone/.next/static/css/dd4ae3f58ac9b600.css +0 -1
  491. package/packages/pi-ai/pnpm-lock.yaml +0 -2022
  492. package/packages/pi-coding-agent/pnpm-lock.yaml +0 -454
  493. /package/dist/web/standalone/.next/static/{MkE9kzqUGny3-cSE0GNnm → yJIyd5cXPNpmXTv18ZlyC}/_ssgManifest.js +0 -0
@@ -10,9 +10,10 @@
10
10
 
11
11
  import { existsSync, readdirSync, readFileSync } from "node:fs";
12
12
  import { join } from "node:path";
13
- import { getAgentDir } from "@gsd/pi-coding-agent";
13
+ import { homedir } from "node:os";
14
14
 
15
- const SKILLS_DIR = join(getAgentDir(), "skills");
15
+ /** Industry-standard skills.sh global skills directory */
16
+ const SKILLS_DIR = join(homedir(), ".agents", "skills");
16
17
 
17
18
  export interface DiscoveredSkill {
18
19
  name: string;
@@ -15,7 +15,7 @@
15
15
 
16
16
  import { existsSync, readFileSync, readdirSync } from "node:fs";
17
17
  import { join } from "node:path";
18
- import { getAgentDir } from "@gsd/pi-coding-agent";
18
+ import { homedir } from "node:os";
19
19
  import type { UnitMetrics, MetricsLedger } from "./metrics.js";
20
20
  import { formatCost, formatTokenCount, loadLedgerFromDisk } from "./metrics.js";
21
21
  import { getSkillLastUsed, detectStaleSkills } from "./skill-telemetry.js";
@@ -208,7 +208,7 @@ export function formatSkillDetail(basePath: string, skillName: string): string {
208
208
  }
209
209
 
210
210
  // Check for SKILL.md existence
211
- const skillPath = join(getAgentDir(), "skills", skillName, "SKILL.md");
211
+ const skillPath = join(homedir(), ".agents", "skills", skillName, "SKILL.md");
212
212
  if (existsSync(skillPath)) {
213
213
  const stat = require("node:fs").statSync(skillPath);
214
214
  lines.push("");
@@ -13,7 +13,7 @@
13
13
 
14
14
  import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
15
15
  import { join } from "node:path";
16
- import { getAgentDir } from "@gsd/pi-coding-agent";
16
+ import { homedir } from "node:os";
17
17
 
18
18
  // ─── In-memory state ──────────────────────────────────────────────────────────
19
19
 
@@ -30,8 +30,14 @@ const activelyLoadedSkills = new Set<string>();
30
30
  * Called before each unit starts.
31
31
  */
32
32
  export function captureAvailableSkills(): void {
33
- const skillsDir = join(getAgentDir(), "skills");
34
- availableSkills = listSkillNames(skillsDir);
33
+ const skillsDir = join(homedir(), ".agents", "skills");
34
+ const legacyDir = join(homedir(), ".gsd", "agent", "skills");
35
+ const names = listSkillNames(skillsDir);
36
+ // Include skills still in the legacy directory only if migration hasn't completed
37
+ const legacyMigrated = existsSync(join(legacyDir, ".migrated-to-agents"));
38
+ const legacyNames = legacyMigrated ? [] : listSkillNames(legacyDir);
39
+ const all = new Set([...names, ...legacyNames]);
40
+ availableSkills = [...all];
35
41
  activelyLoadedSkills.clear();
36
42
  }
37
43
 
@@ -99,8 +105,12 @@ export function detectStaleSkills(
99
105
  const stale: string[] = [];
100
106
 
101
107
  // Check all installed skills, not just those with usage data
102
- const skillsDir = join(getAgentDir(), "skills");
103
- const installed = listSkillNames(skillsDir);
108
+ const skillsDir = join(homedir(), ".agents", "skills");
109
+ const legacyDir = join(homedir(), ".gsd", "agent", "skills");
110
+ const legacyMigrated = existsSync(join(legacyDir, ".migrated-to-agents"));
111
+ const legacyNames = legacyMigrated ? [] : listSkillNames(legacyDir);
112
+ const installedSet = new Set([...listSkillNames(skillsDir), ...legacyNames]);
113
+ const installed = [...installedSet];
104
114
 
105
115
  for (const skill of installed) {
106
116
  const lastTs = lastUsed.get(skill);
@@ -34,7 +34,8 @@ import {
34
34
  gsdRoot,
35
35
  } from './paths.js';
36
36
 
37
- import { milestoneIdSort, findMilestoneIds } from './milestone-ids.js';
37
+ import { findMilestoneIds } from './milestone-ids.js';
38
+ import { loadQueueOrder, sortByQueueOrder } from './queue-order.js';
38
39
  import { nativeBatchParseGsdFiles, type BatchParsedFile } from './native-parser-bridge.js';
39
40
 
40
41
  import { join, resolve } from 'path';
@@ -149,8 +150,14 @@ export async function getActiveMilestoneId(basePath: string): Promise<string | n
149
150
  if (isDbAvailable()) {
150
151
  const allMilestones = getAllMilestones();
151
152
  if (allMilestones.length > 0) {
152
- const sorted = [...allMilestones].sort((a, b) => a.id.localeCompare(b.id));
153
- for (const m of sorted) {
153
+ // Respect queue-order.json so /gsd queue reordering is honored (#2556).
154
+ // Without this, the DB path uses lexicographic sort while the dispatch
155
+ // guard uses queue order — causing a deadlock.
156
+ const customOrder = loadQueueOrder(basePath);
157
+ const sortedIds = sortByQueueOrder(allMilestones.map(m => m.id), customOrder);
158
+ const byId = new Map(allMilestones.map(m => [m.id, m]));
159
+ for (const id of sortedIds) {
160
+ const m = byId.get(id)!;
154
161
  if (m.status === "complete" || m.status === "done" || m.status === "parked") continue;
155
162
  return m.id;
156
163
  }
@@ -304,8 +311,12 @@ export async function deriveStateFromDb(basePath: string): Promise<GSDState> {
304
311
  } as MilestoneRow);
305
312
  }
306
313
  }
307
- // Re-sort so milestones are in canonical order after injection
308
- allMilestones.sort((a, b) => milestoneIdSort(a.id, b.id));
314
+ // Re-sort so milestones follow queue order (same as dispatch guard) (#2556)
315
+ const customOrder = loadQueueOrder(basePath);
316
+ const sortedIds = sortByQueueOrder(allMilestones.map(m => m.id), customOrder);
317
+ const byId = new Map(allMilestones.map(m => [m.id, m]));
318
+ allMilestones.length = 0;
319
+ for (const id of sortedIds) allMilestones.push(byId.get(id)!);
309
320
 
310
321
  // Parallel worker isolation: when locked, filter to just the locked milestone
311
322
  const milestoneLock = process.env.GSD_MILESTONE_LOCK;
@@ -35,6 +35,18 @@ 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
+
38
50
  ## Remediation Slices
39
51
 
40
52
  <!-- New slices appended to the roadmap to address auto-remediable gaps.
@@ -71,6 +71,8 @@ remote_questions:
71
71
  uat_dispatch:
72
72
  post_unit_hooks: []
73
73
  pre_dispatch_hooks: []
74
+ # experimental:
75
+ # rtk: false
74
76
  ---
75
77
 
76
78
  # GSD Skill Preferences
@@ -1,5 +1,7 @@
1
1
  import test from "node:test";
2
2
  import assert from "node:assert/strict";
3
+ import { readFileSync } from "node:fs";
4
+ import { join } from "node:path";
3
5
 
4
6
  import {
5
7
  unitVerb,
@@ -11,6 +13,9 @@ import {
11
13
  extractUatSliceId,
12
14
  } from "../auto-dashboard.ts";
13
15
 
16
+ const autoSource = readFileSync(join(process.cwd(), "src", "resources", "extensions", "gsd", "auto.ts"), "utf-8");
17
+ const dashboardSource = readFileSync(join(process.cwd(), "src", "resources", "extensions", "gsd", "auto-dashboard.ts"), "utf-8");
18
+
14
19
  // ─── unitVerb ─────────────────────────────────────────────────────────────
15
20
 
16
21
  test("unitVerb maps known unit types to verbs", () => {
@@ -180,6 +185,17 @@ test("formatAutoElapsed returns empty string for negative autoStartTime", () =>
180
185
  assert.equal(formatAutoElapsed(NaN), "");
181
186
  });
182
187
 
188
+ test("getAutoDashboardData returns RTK savings in the dashboard payload", () => {
189
+ assert.match(autoSource, /const rtkSavings = sessionId && s\.basePath/);
190
+ assert.match(autoSource, /rtkSavings,/);
191
+ });
192
+
193
+ test("auto progress widget renders RTK savings under the footer stats line", () => {
194
+ assert.match(dashboardSource, /formatRtkSavingsLabel/);
195
+ assert.match(dashboardSource, /getRtkSessionSavings\(accessors\.getBasePath\(\), sessionId\)/);
196
+ assert.match(dashboardSource, /lines\.push\(rightAlign\("", theme\.fg\("dim", cachedRtkLabel\), width\)\);/);
197
+ });
198
+
183
199
  // ─── extractUatSliceId ───────────────────────────────────────────────────
184
200
 
185
201
  test("extractUatSliceId extracts slice ID from M001/S01 format", () => {
@@ -140,7 +140,7 @@ test("isLockProcessAlive returns false for dead PID", () => {
140
140
  assert.equal(isLockProcessAlive(lock), false, "dead PID should return false");
141
141
  });
142
142
 
143
- test("isLockProcessAlive returns false for own PID (recycled)", () => {
143
+ test("#2470: isLockProcessAlive returns true for own PID (we hold the lock)", () => {
144
144
  const lock = {
145
145
  pid: process.pid,
146
146
  startedAt: new Date().toISOString(),
@@ -148,7 +148,7 @@ test("isLockProcessAlive returns false for own PID (recycled)", () => {
148
148
  unitId: "M001/S01/T01",
149
149
  unitStartedAt: new Date().toISOString(),
150
150
  };
151
- assert.equal(isLockProcessAlive(lock), false, "own PID should return false (recycled)");
151
+ assert.equal(isLockProcessAlive(lock), true, "own PID means we are alive — not stale (#2470)");
152
152
  });
153
153
 
154
154
  test("isLockProcessAlive returns false for invalid PID", () => {
@@ -882,6 +882,74 @@ test("autoLoop handles dispatch stop action", async (t) => {
882
882
  );
883
883
  });
884
884
 
885
+ // #2474: warning-level dispatch stop should pause (resumable), not hard-stop
886
+ test("autoLoop pauses instead of stopping for warning-level dispatch stop", async (t) => {
887
+ _resetPendingResolve();
888
+
889
+ const ctx = makeMockCtx();
890
+ ctx.ui.setStatus = () => {};
891
+ const pi = makeMockPi();
892
+ const s = makeLoopSession();
893
+
894
+ const deps = makeMockDeps({
895
+ resolveDispatch: async () => {
896
+ deps.callLog.push("resolveDispatch");
897
+ return {
898
+ action: "stop" as const,
899
+ reason: 'UAT verdict for S01 is "partial" — blocking progression.',
900
+ level: "warning" as const,
901
+ };
902
+ },
903
+ });
904
+
905
+ await autoLoop(ctx, pi, s, deps);
906
+
907
+ assert.ok(
908
+ deps.callLog.includes("resolveDispatch"),
909
+ "should have called resolveDispatch",
910
+ );
911
+ assert.ok(
912
+ deps.callLog.includes("pauseAuto"),
913
+ "warning-level stop should call pauseAuto (resumable)",
914
+ );
915
+ assert.ok(
916
+ !deps.callLog.includes("stopAuto"),
917
+ "warning-level stop should NOT call stopAuto (hard stop)",
918
+ );
919
+ });
920
+
921
+ // #2474: error-level dispatch stop should still hard-stop
922
+ test("autoLoop hard-stops for error-level dispatch stop", async (t) => {
923
+ _resetPendingResolve();
924
+
925
+ const ctx = makeMockCtx();
926
+ ctx.ui.setStatus = () => {};
927
+ const pi = makeMockPi();
928
+ const s = makeLoopSession();
929
+
930
+ const deps = makeMockDeps({
931
+ resolveDispatch: async () => {
932
+ deps.callLog.push("resolveDispatch");
933
+ return {
934
+ action: "stop" as const,
935
+ reason: "Cannot complete milestone: missing SUMMARY files.",
936
+ level: "error" as const,
937
+ };
938
+ },
939
+ });
940
+
941
+ await autoLoop(ctx, pi, s, deps);
942
+
943
+ assert.ok(
944
+ deps.callLog.includes("stopAuto"),
945
+ "error-level stop should call stopAuto (hard stop)",
946
+ );
947
+ assert.ok(
948
+ !deps.callLog.includes("pauseAuto"),
949
+ "error-level stop should NOT call pauseAuto",
950
+ );
951
+ });
952
+
885
953
  test("autoLoop handles dispatch skip action by continuing", async (t) => {
886
954
  _resetPendingResolve();
887
955
 
@@ -5,6 +5,7 @@ import { join, dirname } from "node:path";
5
5
  import { tmpdir } from "node:os";
6
6
  import { fileURLToPath } from "node:url";
7
7
  import { invalidateAllCaches } from '../cache.ts';
8
+ import { parseUnitId } from "../unit-id.ts";
8
9
 
9
10
  // loadPrompt reads from ~/.gsd/agent/extensions/gsd/prompts/ (main checkout).
10
11
  // In a worktree the file may not exist there yet, so we resolve prompts
@@ -222,8 +223,7 @@ describe("complete-milestone", () => {
222
223
 
223
224
  const unitType = "complete-milestone";
224
225
  const unitId = "M001";
225
- const parts = unitId.split("/");
226
- const mid = parts[0]!;
226
+ const { milestone: mid } = parseUnitId(unitId);
227
227
 
228
228
  // This is the exact logic from diagnoseExpectedArtifact for "complete-milestone"
229
229
  const result = `${relMilestoneFile(base, mid, "SUMMARY")} (milestone summary)`;
@@ -68,8 +68,10 @@ test("clearLock is safe when no lock exists", (t) => {
68
68
 
69
69
  // ─── isLockProcessAlive ──────────────────────────────────────────────────
70
70
 
71
- test("isLockProcessAlive returns true for current process (different pid)", () => {
72
- // Our own PID is explicitly excluded (recycled PID guard)
71
+ test("#2470: isLockProcessAlive returns true for own PID (we hold the lock)", () => {
72
+ // Own PID means we ARE the lock holder — alive, not stale. (#2470)
73
+ // Callers that need recycled-PID detection (e.g. startAuto) already
74
+ // guard with `crashLock.pid !== process.pid` before calling us.
73
75
  const lock: LockData = {
74
76
  pid: process.pid,
75
77
  startedAt: new Date().toISOString(),
@@ -77,7 +79,7 @@ test("isLockProcessAlive returns true for current process (different pid)", () =
77
79
  unitId: "M001/S01/T01",
78
80
  unitStartedAt: new Date().toISOString(),
79
81
  };
80
- assert.equal(isLockProcessAlive(lock), false, "own PID should return false");
82
+ assert.equal(isLockProcessAlive(lock), true, "own PID should return true — we are alive");
81
83
  });
82
84
 
83
85
  test("isLockProcessAlive returns false for dead PID", () => {
@@ -15,6 +15,7 @@ import { tmpdir } from "node:os";
15
15
  import { stringify } from "yaml";
16
16
  import { runCustomVerification } from "../custom-verification.ts";
17
17
  import type { WorkflowDefinition } from "../definition-loader.ts";
18
+ import { createFakeRtk } from "../../../../tests/rtk-test-utils.ts";
18
19
 
19
20
  /** Create a temp run directory with the given definition and optional files. */
20
21
  function makeTempRun(
@@ -225,6 +226,38 @@ describe("shell-command policy", () => {
225
226
  const result = runCustomVerification(runDir, "step-1");
226
227
  assert.equal(result, "retry");
227
228
  });
229
+
230
+ it("rewrites shell-command verification through RTK when available", () => {
231
+ const fake = createFakeRtk({
232
+ "echo raw": "echo rewritten",
233
+ });
234
+ const previous = process.env.GSD_RTK_PATH;
235
+ process.env.GSD_RTK_PATH = fake.path;
236
+
237
+ try {
238
+ const def = makeDef([
239
+ {
240
+ id: "step-1",
241
+ name: "Build artifact",
242
+ prompt: "Build the artifact",
243
+ requires: [],
244
+ produces: ["artifact.txt"],
245
+ verify: {
246
+ policy: "shell-command",
247
+ command: "echo raw",
248
+ },
249
+ },
250
+ ]);
251
+
252
+ const runDir = makeTempRun(def);
253
+ const result = runCustomVerification(runDir, "step-1");
254
+ assert.equal(result, "continue");
255
+ } finally {
256
+ if (previous === undefined) delete process.env.GSD_RTK_PATH;
257
+ else process.env.GSD_RTK_PATH = previous;
258
+ fake.cleanup();
259
+ }
260
+ });
228
261
  });
229
262
 
230
263
  // ─── prompt-verify tests ────────────────────────────────────────────────
@@ -769,9 +769,10 @@ describe('derive-state-db', async () => {
769
769
  const elapsed = performance.now() - start;
770
770
 
771
771
  console.log(` deriveStateFromDb() took ${elapsed.toFixed(3)}ms`);
772
- // Use 10ms threshold — catches real regressions without flaking on
773
- // CI runners under load (1ms threshold failed at 1.050ms on GitHub Actions)
774
- assert.ok(elapsed < 10, `perf-db: deriveStateFromDb() <10ms (got ${elapsed.toFixed(3)}ms)`);
772
+ // Use 25ms threshold — catches real regressions without flaking on
773
+ // slower CI runners (Windows agents measured at ~12ms under load;
774
+ // the 10ms threshold was too tight for those environments).
775
+ assert.ok(elapsed < 25, `perf-db: deriveStateFromDb() <25ms (got ${elapsed.toFixed(3)}ms)`);
775
776
 
776
777
  closeDatabase();
777
778
  } finally {