gsd-pi 2.50.0 → 2.51.0-dev.ae8f7cb

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 (511) 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 +12 -11
  63. package/dist/web/standalone/.next/build-manifest.json +4 -4
  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 +3 -3
  67. package/dist/web/standalone/.next/routes-manifest.json +6 -0
  68. package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
  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 +4 -4
  84. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +4 -4
  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 +4 -4
  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 +4 -4
  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 +5 -5
  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 +5 -5
  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 +4 -4
  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 +12 -11
  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/7471.js +13 -0
  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 +3 -3
  233. package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
  234. package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
  235. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  236. package/dist/web/standalone/.next/server/pages/500.html +2 -2
  237. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  238. package/dist/web/standalone/.next/server/webpack-runtime.js +1 -1
  239. package/dist/web/standalone/.next/static/5_KeZz1X0tXJK-d_4OhjB/_buildManifest.js +1 -0
  240. package/dist/web/standalone/.next/static/chunks/{485.243af25f0cdf50d6.js → 2008.817d0885545aaea9.js} +6 -6
  241. package/dist/web/standalone/.next/static/chunks/4024.9ad5def014d90ce4.js +9 -0
  242. package/dist/web/standalone/.next/static/chunks/app/_global-error/page-c4cc189e7b117ea2.js +1 -0
  243. package/dist/web/standalone/.next/static/chunks/app/_not-found/{page-2f24283c162b6ab3.js → page-f2a7482d42a5614b.js} +1 -1
  244. package/dist/web/standalone/.next/static/chunks/app/api/boot/route-c4cc189e7b117ea2.js +1 -0
  245. package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/input/route-c4cc189e7b117ea2.js +1 -0
  246. package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/resize/route-c4cc189e7b117ea2.js +1 -0
  247. package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/stream/route-c4cc189e7b117ea2.js +1 -0
  248. package/dist/web/standalone/.next/static/chunks/app/api/browse-directories/route-c4cc189e7b117ea2.js +1 -0
  249. package/dist/web/standalone/.next/static/chunks/app/api/captures/route-c4cc189e7b117ea2.js +1 -0
  250. package/dist/web/standalone/.next/static/chunks/app/api/cleanup/route-c4cc189e7b117ea2.js +1 -0
  251. package/dist/web/standalone/.next/static/chunks/app/api/dev-mode/route-c4cc189e7b117ea2.js +1 -0
  252. package/dist/web/standalone/.next/static/chunks/app/api/doctor/route-c4cc189e7b117ea2.js +1 -0
  253. package/dist/web/standalone/.next/static/chunks/app/api/experimental/route-c4cc189e7b117ea2.js +1 -0
  254. package/dist/web/standalone/.next/static/chunks/app/api/export-data/route-c4cc189e7b117ea2.js +1 -0
  255. package/dist/web/standalone/.next/static/chunks/app/api/files/route-c4cc189e7b117ea2.js +1 -0
  256. package/dist/web/standalone/.next/static/chunks/app/api/forensics/route-c4cc189e7b117ea2.js +1 -0
  257. package/dist/web/standalone/.next/static/chunks/app/api/git/route-c4cc189e7b117ea2.js +1 -0
  258. package/dist/web/standalone/.next/static/chunks/app/api/history/route-c4cc189e7b117ea2.js +1 -0
  259. package/dist/web/standalone/.next/static/chunks/app/api/hooks/route-c4cc189e7b117ea2.js +1 -0
  260. package/dist/web/standalone/.next/static/chunks/app/api/inspect/route-c4cc189e7b117ea2.js +1 -0
  261. package/dist/web/standalone/.next/static/chunks/app/api/knowledge/route-c4cc189e7b117ea2.js +1 -0
  262. package/dist/web/standalone/.next/static/chunks/app/api/live-state/route-c4cc189e7b117ea2.js +1 -0
  263. package/dist/web/standalone/.next/static/chunks/app/api/onboarding/route-c4cc189e7b117ea2.js +1 -0
  264. package/dist/web/standalone/.next/static/chunks/app/api/preferences/route-c4cc189e7b117ea2.js +1 -0
  265. package/dist/web/standalone/.next/static/chunks/app/api/projects/route-c4cc189e7b117ea2.js +1 -0
  266. package/dist/web/standalone/.next/static/chunks/app/api/recovery/route-c4cc189e7b117ea2.js +1 -0
  267. package/dist/web/standalone/.next/static/chunks/app/api/remote-questions/route-c4cc189e7b117ea2.js +1 -0
  268. package/dist/web/standalone/.next/static/chunks/app/api/session/browser/route-c4cc189e7b117ea2.js +1 -0
  269. package/dist/web/standalone/.next/static/chunks/app/api/session/command/route-c4cc189e7b117ea2.js +1 -0
  270. package/dist/web/standalone/.next/static/chunks/app/api/session/events/route-c4cc189e7b117ea2.js +1 -0
  271. package/dist/web/standalone/.next/static/chunks/app/api/session/manage/route-c4cc189e7b117ea2.js +1 -0
  272. package/dist/web/standalone/.next/static/chunks/app/api/settings-data/route-c4cc189e7b117ea2.js +1 -0
  273. package/dist/web/standalone/.next/static/chunks/app/api/shutdown/route-c4cc189e7b117ea2.js +1 -0
  274. package/dist/web/standalone/.next/static/chunks/app/api/skill-health/route-c4cc189e7b117ea2.js +1 -0
  275. package/dist/web/standalone/.next/static/chunks/app/api/steer/route-c4cc189e7b117ea2.js +1 -0
  276. package/dist/web/standalone/.next/static/chunks/app/api/switch-root/route-c4cc189e7b117ea2.js +1 -0
  277. package/dist/web/standalone/.next/static/chunks/app/api/terminal/input/route-c4cc189e7b117ea2.js +1 -0
  278. package/dist/web/standalone/.next/static/chunks/app/api/terminal/resize/route-c4cc189e7b117ea2.js +1 -0
  279. package/dist/web/standalone/.next/static/chunks/app/api/terminal/sessions/route-c4cc189e7b117ea2.js +1 -0
  280. package/dist/web/standalone/.next/static/chunks/app/api/terminal/stream/route-c4cc189e7b117ea2.js +1 -0
  281. package/dist/web/standalone/.next/static/chunks/app/api/terminal/upload/route-c4cc189e7b117ea2.js +1 -0
  282. package/dist/web/standalone/.next/static/chunks/app/api/undo/route-c4cc189e7b117ea2.js +1 -0
  283. package/dist/web/standalone/.next/static/chunks/app/api/update/route-c4cc189e7b117ea2.js +1 -0
  284. package/dist/web/standalone/.next/static/chunks/app/api/visualizer/route-c4cc189e7b117ea2.js +1 -0
  285. package/dist/web/standalone/.next/static/chunks/app/{layout-9ecfd95f343793f0.js → layout-a16c7a7ecdf0c2cf.js} +1 -1
  286. package/dist/web/standalone/.next/static/chunks/app/page-b950e4e384cc62b3.js +1 -0
  287. package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +1 -0
  288. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-c4cc189e7b117ea2.js +1 -0
  289. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-c4cc189e7b117ea2.js +1 -0
  290. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +1 -0
  291. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-c4cc189e7b117ea2.js +1 -0
  292. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-c4cc189e7b117ea2.js +1 -0
  293. package/dist/web/standalone/.next/static/chunks/webpack-cfc9a116e6450a6b.js +1 -0
  294. package/dist/web/standalone/.next/static/css/de141508b083f922.css +1 -0
  295. package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
  296. package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
  297. package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
  298. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +14 -14
  299. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +14 -14
  300. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +14 -14
  301. package/dist/web/standalone/server.js +1 -1
  302. package/package.json +1 -1
  303. package/packages/pi-ai/dist/types.d.ts +1 -0
  304. package/packages/pi-ai/dist/types.d.ts.map +1 -1
  305. package/packages/pi-ai/dist/types.js.map +1 -1
  306. package/packages/pi-ai/src/types.ts +1 -1
  307. package/packages/pi-coding-agent/dist/core/agent-session.d.ts +1 -0
  308. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  309. package/packages/pi-coding-agent/dist/core/agent-session.js +1 -0
  310. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  311. package/packages/pi-coding-agent/dist/core/bash-executor.d.ts +3 -1
  312. package/packages/pi-coding-agent/dist/core/bash-executor.d.ts.map +1 -1
  313. package/packages/pi-coding-agent/dist/core/bash-executor.js +10 -1
  314. package/packages/pi-coding-agent/dist/core/bash-executor.js.map +1 -1
  315. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +1 -1
  316. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
  317. package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
  318. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +1 -0
  319. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
  320. package/packages/pi-coding-agent/dist/core/extensions/runner.js +13 -0
  321. package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
  322. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +19 -1
  323. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
  324. package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
  325. package/packages/pi-coding-agent/dist/core/extensions/wrapper.d.ts.map +1 -1
  326. package/packages/pi-coding-agent/dist/core/extensions/wrapper.js +8 -0
  327. package/packages/pi-coding-agent/dist/core/extensions/wrapper.js.map +1 -1
  328. package/packages/pi-coding-agent/dist/core/package-manager.d.ts.map +1 -1
  329. package/packages/pi-coding-agent/dist/core/package-manager.js +8 -1
  330. package/packages/pi-coding-agent/dist/core/package-manager.js.map +1 -1
  331. package/packages/pi-coding-agent/dist/core/skills.d.ts +11 -1
  332. package/packages/pi-coding-agent/dist/core/skills.d.ts.map +1 -1
  333. package/packages/pi-coding-agent/dist/core/skills.js +30 -8
  334. package/packages/pi-coding-agent/dist/core/skills.js.map +1 -1
  335. package/packages/pi-coding-agent/dist/core/slash-commands.d.ts.map +1 -1
  336. package/packages/pi-coding-agent/dist/core/slash-commands.js +1 -0
  337. package/packages/pi-coding-agent/dist/core/slash-commands.js.map +1 -1
  338. package/packages/pi-coding-agent/dist/index.d.ts +2 -2
  339. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  340. package/packages/pi-coding-agent/dist/index.js +1 -1
  341. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  342. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
  343. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +3 -2
  344. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
  345. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  346. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +6 -4
  347. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  348. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts +5 -0
  349. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts.map +1 -1
  350. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js +12 -0
  351. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js.map +1 -1
  352. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts.map +1 -1
  353. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +2 -1
  354. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -1
  355. package/packages/pi-coding-agent/package.json +1 -1
  356. package/packages/pi-coding-agent/src/core/agent-session.ts +2 -1
  357. package/packages/pi-coding-agent/src/core/bash-executor.ts +10 -2
  358. package/packages/pi-coding-agent/src/core/extensions/index.ts +2 -0
  359. package/packages/pi-coding-agent/src/core/extensions/runner.ts +18 -0
  360. package/packages/pi-coding-agent/src/core/extensions/types.ts +21 -0
  361. package/packages/pi-coding-agent/src/core/extensions/wrapper.ts +9 -0
  362. package/packages/pi-coding-agent/src/core/package-manager.ts +10 -1
  363. package/packages/pi-coding-agent/src/core/skills.ts +35 -10
  364. package/packages/pi-coding-agent/src/core/slash-commands.ts +1 -0
  365. package/packages/pi-coding-agent/src/index.ts +4 -0
  366. package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +3 -2
  367. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +6 -4
  368. package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.ts +15 -0
  369. package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +2 -1
  370. package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -1
  371. package/pkg/dist/modes/interactive/theme/themes.js +2 -1
  372. package/pkg/dist/modes/interactive/theme/themes.js.map +1 -1
  373. package/pkg/package.json +1 -1
  374. package/scripts/postinstall.js +163 -6
  375. package/src/resources/extensions/async-jobs/async-bash-tool.ts +3 -1
  376. package/src/resources/extensions/bg-shell/interaction.ts +3 -1
  377. package/src/resources/extensions/bg-shell/process-manager.ts +4 -1
  378. package/src/resources/extensions/claude-code-cli/partial-builder.ts +5 -0
  379. package/src/resources/extensions/claude-code-cli/tests/partial-builder.test.ts +105 -0
  380. package/src/resources/extensions/gsd/auto/phases.ts +15 -1
  381. package/src/resources/extensions/gsd/auto/session.ts +6 -0
  382. package/src/resources/extensions/gsd/auto-dashboard.ts +31 -3
  383. package/src/resources/extensions/gsd/auto-dispatch.ts +84 -51
  384. package/src/resources/extensions/gsd/auto-observability.ts +72 -0
  385. package/src/resources/extensions/gsd/auto-post-unit.ts +56 -83
  386. package/src/resources/extensions/gsd/auto-prompts.ts +48 -0
  387. package/src/resources/extensions/gsd/auto-recovery.ts +19 -26
  388. package/src/resources/extensions/gsd/auto-utils.ts +25 -0
  389. package/src/resources/extensions/gsd/auto.ts +15 -5
  390. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +17 -0
  391. package/src/resources/extensions/gsd/crash-recovery.ts +6 -2
  392. package/src/resources/extensions/gsd/custom-execution-policy.ts +3 -2
  393. package/src/resources/extensions/gsd/custom-verification.ts +3 -1
  394. package/src/resources/extensions/gsd/custom-workflow-engine.ts +3 -2
  395. package/src/resources/extensions/gsd/dashboard-overlay.ts +7 -0
  396. package/src/resources/extensions/gsd/detection.ts +662 -3
  397. package/src/resources/extensions/gsd/dispatch-guard.ts +2 -1
  398. package/src/resources/extensions/gsd/docs/preferences-reference.md +15 -0
  399. package/src/resources/extensions/gsd/files.ts +6 -1
  400. package/src/resources/extensions/gsd/guided-flow.ts +11 -0
  401. package/src/resources/extensions/gsd/init-wizard.ts +9 -1
  402. package/src/resources/extensions/gsd/model-router.ts +25 -0
  403. package/src/resources/extensions/gsd/notifications.ts +23 -0
  404. package/src/resources/extensions/gsd/observability-validator.ts +456 -0
  405. package/src/resources/extensions/gsd/preferences-skills.ts +11 -5
  406. package/src/resources/extensions/gsd/preferences-types.ts +20 -0
  407. package/src/resources/extensions/gsd/preferences-validation.ts +26 -0
  408. package/src/resources/extensions/gsd/preferences.ts +3 -0
  409. package/src/resources/extensions/gsd/prompts/forensics.md +11 -7
  410. package/src/resources/extensions/gsd/prompts/validate-milestone.md +6 -1
  411. package/src/resources/extensions/gsd/provider-error-pause.ts +9 -0
  412. package/src/resources/extensions/gsd/roadmap-mutations.ts +134 -0
  413. package/src/resources/extensions/gsd/rtk-status.ts +53 -0
  414. package/src/resources/extensions/gsd/rule-registry.ts +10 -11
  415. package/src/resources/extensions/gsd/session-forensics.ts +7 -3
  416. package/src/resources/extensions/gsd/skill-catalog.ts +1085 -0
  417. package/src/resources/extensions/gsd/skill-discovery.ts +3 -2
  418. package/src/resources/extensions/gsd/skill-health.ts +2 -2
  419. package/src/resources/extensions/gsd/skill-telemetry.ts +15 -5
  420. package/src/resources/extensions/gsd/state.ts +16 -5
  421. package/src/resources/extensions/gsd/templates/milestone-validation.md +12 -0
  422. package/src/resources/extensions/gsd/templates/preferences.md +2 -0
  423. package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +16 -0
  424. package/src/resources/extensions/gsd/tests/auto-lock-creation.test.ts +2 -2
  425. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +68 -0
  426. package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +2 -2
  427. package/src/resources/extensions/gsd/tests/crash-recovery.test.ts +5 -3
  428. package/src/resources/extensions/gsd/tests/custom-verification.test.ts +33 -0
  429. package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +4 -3
  430. package/src/resources/extensions/gsd/tests/detection.test.ts +838 -0
  431. package/src/resources/extensions/gsd/tests/dist-redirect.mjs +28 -9
  432. package/src/resources/extensions/gsd/tests/double-merge-guard.test.ts +97 -0
  433. package/src/resources/extensions/gsd/tests/idle-recovery.test.ts +63 -0
  434. package/src/resources/extensions/gsd/tests/model-router.test.ts +40 -0
  435. package/src/resources/extensions/gsd/tests/notifications.test.ts +28 -6
  436. package/src/resources/extensions/gsd/tests/plan-quality-validator.test.ts +474 -0
  437. package/src/resources/extensions/gsd/tests/preferences.test.ts +50 -0
  438. package/src/resources/extensions/gsd/tests/queue-reorder-e2e.test.ts +40 -0
  439. package/src/resources/extensions/gsd/tests/reactive-executor.test.ts +6 -6
  440. package/src/resources/extensions/gsd/tests/retry-diagnostic-reasoning.test.ts +161 -0
  441. package/src/resources/extensions/gsd/tests/retry-state-reset.test.ts +4 -5
  442. package/src/resources/extensions/gsd/tests/rewrite-count-persist.test.ts +82 -0
  443. package/src/resources/extensions/gsd/tests/run-uat.test.ts +146 -0
  444. package/src/resources/extensions/gsd/tests/sidecar-queue.test.ts +12 -12
  445. package/src/resources/extensions/gsd/tests/skill-catalog.test.ts +193 -0
  446. package/src/resources/extensions/gsd/tests/terminated-transient.test.ts +24 -0
  447. package/src/resources/extensions/gsd/tests/triage-dispatch.test.ts +2 -2
  448. package/src/resources/extensions/gsd/types.ts +2 -0
  449. package/src/resources/extensions/gsd/undo.ts +8 -7
  450. package/src/resources/extensions/gsd/unit-runtime.ts +2 -1
  451. package/src/resources/extensions/gsd/verification-gate.ts +3 -1
  452. package/src/resources/extensions/shared/rtk-session-stats.ts +249 -0
  453. package/src/resources/extensions/shared/rtk.ts +120 -0
  454. package/dist/web/standalone/.next/server/chunks/229.js +0 -12
  455. package/dist/web/standalone/.next/server/chunks/441.js +0 -2
  456. package/dist/web/standalone/.next/server/chunks/471.js +0 -13
  457. package/dist/web/standalone/.next/static/MQOhBnkC_TLtNn_JvZWDj/_buildManifest.js +0 -1
  458. package/dist/web/standalone/.next/static/chunks/4024.7c75ac378de0f2b5.js +0 -9
  459. package/dist/web/standalone/.next/static/chunks/app/_global-error/page-d83ba70a25a85472.js +0 -1
  460. package/dist/web/standalone/.next/static/chunks/app/api/boot/route-d83ba70a25a85472.js +0 -1
  461. package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/input/route-d83ba70a25a85472.js +0 -1
  462. package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/resize/route-d83ba70a25a85472.js +0 -1
  463. package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/stream/route-d83ba70a25a85472.js +0 -1
  464. package/dist/web/standalone/.next/static/chunks/app/api/browse-directories/route-d83ba70a25a85472.js +0 -1
  465. package/dist/web/standalone/.next/static/chunks/app/api/captures/route-d83ba70a25a85472.js +0 -1
  466. package/dist/web/standalone/.next/static/chunks/app/api/cleanup/route-d83ba70a25a85472.js +0 -1
  467. package/dist/web/standalone/.next/static/chunks/app/api/dev-mode/route-d83ba70a25a85472.js +0 -1
  468. package/dist/web/standalone/.next/static/chunks/app/api/doctor/route-d83ba70a25a85472.js +0 -1
  469. package/dist/web/standalone/.next/static/chunks/app/api/export-data/route-d83ba70a25a85472.js +0 -1
  470. package/dist/web/standalone/.next/static/chunks/app/api/files/route-d83ba70a25a85472.js +0 -1
  471. package/dist/web/standalone/.next/static/chunks/app/api/forensics/route-d83ba70a25a85472.js +0 -1
  472. package/dist/web/standalone/.next/static/chunks/app/api/git/route-d83ba70a25a85472.js +0 -1
  473. package/dist/web/standalone/.next/static/chunks/app/api/history/route-d83ba70a25a85472.js +0 -1
  474. package/dist/web/standalone/.next/static/chunks/app/api/hooks/route-d83ba70a25a85472.js +0 -1
  475. package/dist/web/standalone/.next/static/chunks/app/api/inspect/route-d83ba70a25a85472.js +0 -1
  476. package/dist/web/standalone/.next/static/chunks/app/api/knowledge/route-d83ba70a25a85472.js +0 -1
  477. package/dist/web/standalone/.next/static/chunks/app/api/live-state/route-d83ba70a25a85472.js +0 -1
  478. package/dist/web/standalone/.next/static/chunks/app/api/onboarding/route-d83ba70a25a85472.js +0 -1
  479. package/dist/web/standalone/.next/static/chunks/app/api/preferences/route-d83ba70a25a85472.js +0 -1
  480. package/dist/web/standalone/.next/static/chunks/app/api/projects/route-d83ba70a25a85472.js +0 -1
  481. package/dist/web/standalone/.next/static/chunks/app/api/recovery/route-d83ba70a25a85472.js +0 -1
  482. package/dist/web/standalone/.next/static/chunks/app/api/remote-questions/route-d83ba70a25a85472.js +0 -1
  483. package/dist/web/standalone/.next/static/chunks/app/api/session/browser/route-d83ba70a25a85472.js +0 -1
  484. package/dist/web/standalone/.next/static/chunks/app/api/session/command/route-d83ba70a25a85472.js +0 -1
  485. package/dist/web/standalone/.next/static/chunks/app/api/session/events/route-d83ba70a25a85472.js +0 -1
  486. package/dist/web/standalone/.next/static/chunks/app/api/session/manage/route-d83ba70a25a85472.js +0 -1
  487. package/dist/web/standalone/.next/static/chunks/app/api/settings-data/route-d83ba70a25a85472.js +0 -1
  488. package/dist/web/standalone/.next/static/chunks/app/api/shutdown/route-d83ba70a25a85472.js +0 -1
  489. package/dist/web/standalone/.next/static/chunks/app/api/skill-health/route-d83ba70a25a85472.js +0 -1
  490. package/dist/web/standalone/.next/static/chunks/app/api/steer/route-d83ba70a25a85472.js +0 -1
  491. package/dist/web/standalone/.next/static/chunks/app/api/switch-root/route-d83ba70a25a85472.js +0 -1
  492. package/dist/web/standalone/.next/static/chunks/app/api/terminal/input/route-d83ba70a25a85472.js +0 -1
  493. package/dist/web/standalone/.next/static/chunks/app/api/terminal/resize/route-d83ba70a25a85472.js +0 -1
  494. package/dist/web/standalone/.next/static/chunks/app/api/terminal/sessions/route-d83ba70a25a85472.js +0 -1
  495. package/dist/web/standalone/.next/static/chunks/app/api/terminal/stream/route-d83ba70a25a85472.js +0 -1
  496. package/dist/web/standalone/.next/static/chunks/app/api/terminal/upload/route-d83ba70a25a85472.js +0 -1
  497. package/dist/web/standalone/.next/static/chunks/app/api/undo/route-d83ba70a25a85472.js +0 -1
  498. package/dist/web/standalone/.next/static/chunks/app/api/update/route-d83ba70a25a85472.js +0 -1
  499. package/dist/web/standalone/.next/static/chunks/app/api/visualizer/route-d83ba70a25a85472.js +0 -1
  500. package/dist/web/standalone/.next/static/chunks/app/page-12dd5ece0df4badc.js +0 -1
  501. package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +0 -1
  502. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-d83ba70a25a85472.js +0 -1
  503. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-d83ba70a25a85472.js +0 -1
  504. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +0 -1
  505. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-d83ba70a25a85472.js +0 -1
  506. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-d83ba70a25a85472.js +0 -1
  507. package/dist/web/standalone/.next/static/chunks/webpack-2473ce2c3879fff4.js +0 -1
  508. package/dist/web/standalone/.next/static/css/dd4ae3f58ac9b600.css +0 -1
  509. package/packages/pi-ai/pnpm-lock.yaml +0 -2022
  510. package/packages/pi-coding-agent/pnpm-lock.yaml +0 -454
  511. /package/dist/web/standalone/.next/static/{MQOhBnkC_TLtNn_JvZWDj → 5_KeZz1X0tXJK-d_4OhjB}/_ssgManifest.js +0 -0
@@ -0,0 +1,1085 @@
1
+ /**
2
+ * GSD Skill Catalog — Curated skill packs mapped to tech stacks.
3
+ *
4
+ * Each pack maps a detected (or user-chosen) tech stack to a skills.sh
5
+ * repo + specific skill names. The init wizard uses this catalog to
6
+ * install relevant skills during project onboarding.
7
+ *
8
+ * Installation is delegated entirely to the skills.sh CLI:
9
+ * npx skills add <repo> --skill <name> --skill <name> -y
10
+ *
11
+ * Skills are installed into ~/.agents/skills/ (the industry-standard
12
+ * ecosystem directory shared across all agents).
13
+ */
14
+
15
+ import { execFile } from "node:child_process";
16
+ import { existsSync } from "node:fs";
17
+ import { join } from "node:path";
18
+ import { homedir } from "node:os";
19
+ import type { ExtensionCommandContext } from "@gsd/pi-coding-agent";
20
+ import { showNextAction } from "../shared/tui.js";
21
+ import type { ProjectSignals, XcodePlatform } from "./detection.js";
22
+
23
+ // ─── Catalog Types ────────────────────────────────────────────────────────────
24
+
25
+ export interface SkillPack {
26
+ /** Human-readable name shown in the wizard */
27
+ label: string;
28
+ /** Short description */
29
+ description: string;
30
+ /** skills.sh repo identifier (owner/repo) */
31
+ repo: string;
32
+ /** Specific skill names to install from the repo */
33
+ skills: string[];
34
+ /** Which detected primaryLanguage values trigger this pack */
35
+ matchLanguages?: string[];
36
+ /** Which detected project files trigger this pack */
37
+ matchFiles?: string[];
38
+ /** Trigger when Xcode project targets one of these platforms */
39
+ matchXcodePlatforms?: XcodePlatform[];
40
+ /** Always include this pack in brownfield recommendations */
41
+ matchAlways?: boolean;
42
+ }
43
+
44
+ // ─── Curated Catalog ──────────────────────────────────────────────────────────
45
+
46
+ export const SKILL_CATALOG: SkillPack[] = [
47
+ // ── Swift (language-level — any Swift project) ────────────────────────────
48
+ {
49
+ label: "SwiftUI",
50
+ description: "SwiftUI layout, navigation, animations, gestures, Liquid Glass",
51
+ repo: "dpearson2699/swift-ios-skills",
52
+ skills: [
53
+ "swiftui-animation",
54
+ "swiftui-gestures",
55
+ "swiftui-layout-components",
56
+ "swiftui-liquid-glass",
57
+ "swiftui-navigation",
58
+ "swiftui-patterns",
59
+ "swiftui-performance",
60
+ "swiftui-uikit-interop",
61
+ ],
62
+ matchLanguages: ["swift"],
63
+ matchFiles: ["Package.swift"],
64
+ },
65
+ {
66
+ label: "Swift Core",
67
+ description: "Swift language, concurrency, Codable, Charts, Testing, SwiftData",
68
+ repo: "dpearson2699/swift-ios-skills",
69
+ skills: [
70
+ "swift-codable",
71
+ "swift-charts",
72
+ "swift-concurrency",
73
+ "swift-language",
74
+ "swift-testing",
75
+ "swiftdata",
76
+ ],
77
+ matchLanguages: ["swift"],
78
+ matchFiles: ["Package.swift"],
79
+ },
80
+ // ── iOS (Xcode project targeting iphoneos required) ───────────────────────
81
+ {
82
+ label: "iOS App Frameworks",
83
+ description: "App Intents, Widgets, StoreKit, MapKit, Live Activities, push notifications",
84
+ repo: "dpearson2699/swift-ios-skills",
85
+ skills: [
86
+ "alarmkit",
87
+ "app-clips",
88
+ "app-intents",
89
+ "live-activities",
90
+ "mapkit-location",
91
+ "photos-camera-media",
92
+ "push-notifications",
93
+ "storekit",
94
+ "tipkit",
95
+ "widgetkit",
96
+ ],
97
+ matchXcodePlatforms: ["iphoneos"],
98
+ },
99
+ {
100
+ label: "iOS Data Frameworks",
101
+ description: "CloudKit, HealthKit, MusicKit, WeatherKit, Contacts, Calendar",
102
+ repo: "dpearson2699/swift-ios-skills",
103
+ skills: [
104
+ "cloudkit-sync",
105
+ "contacts-framework",
106
+ "eventkit-calendar",
107
+ "healthkit",
108
+ "musickit-audio",
109
+ "passkit-wallet",
110
+ "weatherkit",
111
+ ],
112
+ matchXcodePlatforms: ["iphoneos"],
113
+ },
114
+ {
115
+ label: "iOS AI & ML",
116
+ description: "Core ML, Vision, on-device AI, speech recognition, NLP",
117
+ repo: "dpearson2699/swift-ios-skills",
118
+ skills: [
119
+ "apple-on-device-ai",
120
+ "coreml",
121
+ "natural-language",
122
+ "speech-recognition",
123
+ "vision-framework",
124
+ ],
125
+ matchXcodePlatforms: ["iphoneos"],
126
+ },
127
+ {
128
+ label: "iOS Engineering",
129
+ description: "Networking, security, accessibility, localization, Instruments, App Store review",
130
+ repo: "dpearson2699/swift-ios-skills",
131
+ skills: [
132
+ "app-store-review",
133
+ "authentication",
134
+ "background-processing",
135
+ "debugging-instruments",
136
+ "device-integrity",
137
+ "ios-accessibility",
138
+ "ios-localization",
139
+ "ios-networking",
140
+ "ios-security",
141
+ "metrickit-diagnostics",
142
+ ],
143
+ matchXcodePlatforms: ["iphoneos"],
144
+ },
145
+ {
146
+ label: "iOS Hardware",
147
+ description: "Bluetooth, CoreMotion, NFC, PencilKit, RealityKit AR",
148
+ repo: "dpearson2699/swift-ios-skills",
149
+ skills: [
150
+ "core-bluetooth",
151
+ "core-motion",
152
+ "core-nfc",
153
+ "pencilkit-drawing",
154
+ "realitykit-ar",
155
+ ],
156
+ matchXcodePlatforms: ["iphoneos"],
157
+ },
158
+ {
159
+ label: "iOS Platform",
160
+ description: "CallKit, EnergyKit, HomeKit, SharePlay, PermissionKit",
161
+ repo: "dpearson2699/swift-ios-skills",
162
+ skills: [
163
+ "callkit-voip",
164
+ "energykit",
165
+ "homekit-matter",
166
+ "permissionkit",
167
+ "shareplay-activities",
168
+ ],
169
+ matchXcodePlatforms: ["iphoneos"],
170
+ },
171
+ // ── React / Next.js ───────────────────────────────────────────────────────
172
+ {
173
+ label: "React & Web Frontend",
174
+ description: "React best practices and composition patterns",
175
+ repo: "vercel-labs/agent-skills",
176
+ skills: [
177
+ "vercel-react-best-practices",
178
+ "vercel-composition-patterns",
179
+ ],
180
+ matchLanguages: ["javascript/typescript"],
181
+ },
182
+ {
183
+ label: "shadcn/ui",
184
+ description: "shadcn/ui component library patterns and usage",
185
+ repo: "shadcn/ui",
186
+ skills: ["shadcn"],
187
+ matchLanguages: ["javascript/typescript"],
188
+ },
189
+ // ── React Native ──────────────────────────────────────────────────────────
190
+ {
191
+ label: "React Native",
192
+ description: "React Native and Expo best practices for performant mobile apps",
193
+ repo: "vercel-labs/agent-skills",
194
+ skills: ["vercel-react-native-skills"],
195
+ matchFiles: ["metro.config.js", "metro.config.ts", "react-native.config.js"],
196
+ },
197
+ {
198
+ label: "React Native Architecture",
199
+ description: "React Native app architecture, navigation, and cross-platform design patterns",
200
+ repo: "wshobson/agents",
201
+ skills: ["react-native-architecture", "react-native-design"],
202
+ matchFiles: ["metro.config.js", "metro.config.ts", "react-native.config.js"],
203
+ },
204
+ // ── TypeScript & JS Ecosystem (wshobson/agents — 41K combined installs) ──
205
+ {
206
+ label: "TypeScript & JS Development",
207
+ description: "Advanced TypeScript types, Node.js backend, testing, and modern JS patterns",
208
+ repo: "wshobson/agents",
209
+ skills: [
210
+ "typescript-advanced-types",
211
+ "nodejs-backend-patterns",
212
+ "javascript-testing-patterns",
213
+ "modern-javascript-patterns",
214
+ ],
215
+ matchLanguages: ["javascript/typescript"],
216
+ },
217
+ // ── React State (wshobson/agents — 8.1K combined installs) ─────────────
218
+ {
219
+ label: "React State & Patterns",
220
+ description: "State management with Zustand, Jotai, React Query, and React modernization",
221
+ repo: "wshobson/agents",
222
+ skills: ["react-state-management", "react-modernization"],
223
+ matchLanguages: ["javascript/typescript"],
224
+ },
225
+ // ── Tailwind CSS (wshobson/agents — 22.8K installs) ───────────────────
226
+ {
227
+ label: "Tailwind CSS",
228
+ description: "Tailwind v4 design system, CVA patterns, and utility-first CSS",
229
+ repo: "wshobson/agents",
230
+ skills: ["tailwind-design-system"],
231
+ matchFiles: [
232
+ "tailwind.config.js",
233
+ "tailwind.config.ts",
234
+ "tailwind.config.mjs",
235
+ "tailwind.config.cjs",
236
+ ],
237
+ },
238
+ // ── General Frontend ──────────────────────────────────────────────────────
239
+ {
240
+ label: "Frontend Design & UX",
241
+ description: "Frontend design, accessibility, and browser automation",
242
+ repo: "anthropics/skills",
243
+ skills: ["frontend-design"],
244
+ matchLanguages: ["javascript/typescript"],
245
+ },
246
+ // ── Angular ───────────────────────────────────────────────────────────────
247
+ {
248
+ label: "Angular",
249
+ description: "Angular components, signals, forms, routing, and testing",
250
+ repo: "analogjs/angular-skills",
251
+ skills: [
252
+ "angular-component",
253
+ "angular-signals",
254
+ "angular-forms",
255
+ "angular-routing",
256
+ "angular-testing",
257
+ ],
258
+ matchFiles: ["angular.json"],
259
+ },
260
+ {
261
+ label: "Angular Migration",
262
+ description: "Migrate from AngularJS to Angular with hybrid mode and incremental rewriting",
263
+ repo: "wshobson/agents",
264
+ skills: ["angular-migration"],
265
+ matchFiles: ["angular.json"],
266
+ },
267
+ // ── Vue.js / Nuxt ────────────────────────────────────────────────────────
268
+ {
269
+ label: "Vue.js",
270
+ description: "Vue best practices, Pinia state, Vue Router, and testing",
271
+ repo: "vuejs-ai/skills",
272
+ skills: [
273
+ "vue-best-practices",
274
+ "vue-pinia-best-practices",
275
+ "vue-router-best-practices",
276
+ "vue-testing-best-practices",
277
+ ],
278
+ matchFiles: ["nuxt.config.ts", "nuxt.config.js", "vue.config.js", "vue.config.ts", "*.vue"],
279
+ },
280
+ // ── Svelte / SvelteKit ────────────────────────────────────────────────────
281
+ {
282
+ label: "Svelte",
283
+ description: "Svelte code patterns and SvelteKit best practices",
284
+ repo: "sveltejs/ai-tools",
285
+ skills: ["svelte-code-writer", "svelte-core-bestpractices"],
286
+ matchFiles: ["svelte.config.js", "svelte.config.ts"],
287
+ },
288
+ // ── Next.js ───────────────────────────────────────────────────────────────
289
+ {
290
+ label: "Next.js",
291
+ description: "Next.js app router, server components, and deployment patterns",
292
+ repo: "vercel-labs/vercel-plugin",
293
+ skills: ["nextjs"],
294
+ matchFiles: ["next.config.js", "next.config.ts", "next.config.mjs"],
295
+ },
296
+ {
297
+ label: "Next.js App Router Patterns",
298
+ description: "Next.js 14+ App Router, React Server Components, and streaming",
299
+ repo: "wshobson/agents",
300
+ skills: ["nextjs-app-router-patterns"],
301
+ matchFiles: ["next.config.js", "next.config.ts", "next.config.mjs"],
302
+ },
303
+ // ── Java / Spring Boot ────────────────────────────────────────────────────
304
+ {
305
+ label: "Java & Spring Boot",
306
+ description: "Spring Boot best practices, DI, RESTful APIs, JPA, testing, and security",
307
+ repo: "github/awesome-copilot",
308
+ skills: ["java-springboot"],
309
+ matchFiles: ["dep:spring-boot"],
310
+ },
311
+ // ── .NET / C# ────────────────────────────────────────────────────────────
312
+ {
313
+ label: ".NET & C#",
314
+ description: ".NET best practices, design patterns, and upgrade guidance",
315
+ repo: "github/awesome-copilot",
316
+ skills: ["dotnet-best-practices", "dotnet-design-pattern-review"],
317
+ matchLanguages: ["csharp"],
318
+ matchFiles: ["*.csproj"],
319
+ },
320
+ {
321
+ label: ".NET Backend Patterns",
322
+ description: ".NET backend architecture, middleware, and production patterns",
323
+ repo: "wshobson/agents",
324
+ skills: ["dotnet-backend-patterns"],
325
+ matchFiles: ["*.csproj", "*.fsproj", "*.sln"],
326
+ },
327
+ // ── Flutter / Dart ────────────────────────────────────────────────────────
328
+ {
329
+ label: "Flutter",
330
+ description: "Flutter layouts, architecture, state management, and testing",
331
+ repo: "flutter/skills",
332
+ skills: [
333
+ "flutter-building-layouts",
334
+ "flutter-architecting-apps",
335
+ "flutter-managing-state",
336
+ "flutter-testing-apps",
337
+ ],
338
+ matchLanguages: ["dart/flutter"],
339
+ matchFiles: ["pubspec.yaml"],
340
+ },
341
+ // ── PHP / Laravel ─────────────────────────────────────────────────────────
342
+ {
343
+ label: "PHP & Laravel",
344
+ description: "Laravel patterns, PHP best practices, and testing",
345
+ repo: "jeffallan/claude-skills",
346
+ skills: ["laravel-specialist", "php-pro"],
347
+ matchLanguages: ["php"],
348
+ matchFiles: ["composer.json"],
349
+ },
350
+ // ── Django ────────────────────────────────────────────────────────────────
351
+ {
352
+ label: "Django",
353
+ description: "Django expert patterns, models, views, and middleware",
354
+ repo: "vintasoftware/django-ai-plugins",
355
+ skills: ["django-expert"],
356
+ matchFiles: ["manage.py"],
357
+ },
358
+ // ── Rust ──────────────────────────────────────────────────────────────────
359
+ {
360
+ label: "Rust",
361
+ description: "Rust language patterns and best practices",
362
+ repo: "anthropics/skills",
363
+ skills: ["rust-best-practices"],
364
+ matchLanguages: ["rust"],
365
+ matchFiles: ["Cargo.toml"],
366
+ },
367
+ {
368
+ label: "Rust Async Patterns",
369
+ description: "Async Rust with Tokio, futures, and proper error handling",
370
+ repo: "wshobson/agents",
371
+ skills: ["rust-async-patterns"],
372
+ matchLanguages: ["rust"],
373
+ matchFiles: ["Cargo.toml"],
374
+ },
375
+ // ── Python ────────────────────────────────────────────────────────────────
376
+ {
377
+ label: "Python",
378
+ description: "Python patterns and best practices",
379
+ repo: "anthropics/skills",
380
+ skills: ["python-best-practices"],
381
+ matchLanguages: ["python"],
382
+ matchFiles: ["pyproject.toml", "setup.py", "requirements.txt"],
383
+ },
384
+ {
385
+ label: "Python Advanced",
386
+ description: "Python performance, testing, async patterns, and uv package manager",
387
+ repo: "wshobson/agents",
388
+ skills: [
389
+ "python-performance-optimization",
390
+ "python-testing-patterns",
391
+ "async-python-patterns",
392
+ "uv-package-manager",
393
+ ],
394
+ matchLanguages: ["python"],
395
+ matchFiles: ["pyproject.toml", "setup.py", "requirements.txt"],
396
+ },
397
+ // FastAPI — detected by scanning requirements.txt / pyproject.toml for the
398
+ // "fastapi" dependency. Uses the "dep:fastapi" synthetic marker from detection.ts.
399
+ {
400
+ label: "FastAPI",
401
+ description: "Production-ready FastAPI projects with async patterns and error handling",
402
+ repo: "wshobson/agents",
403
+ skills: ["fastapi-templates"],
404
+ matchFiles: ["dep:fastapi"],
405
+ },
406
+ // ── Go ────────────────────────────────────────────────────────────────────
407
+ {
408
+ label: "Go",
409
+ description: "Go language patterns and best practices",
410
+ repo: "anthropics/skills",
411
+ skills: ["go-best-practices"],
412
+ matchLanguages: ["go"],
413
+ matchFiles: ["go.mod"],
414
+ },
415
+ {
416
+ label: "Go Concurrency Patterns",
417
+ description: "Go concurrency with channels, worker pools, and context cancellation",
418
+ repo: "wshobson/agents",
419
+ skills: ["go-concurrency-patterns"],
420
+ matchLanguages: ["go"],
421
+ matchFiles: ["go.mod"],
422
+ },
423
+ // ── Database / ORM ─────────────────────────────────────────────────────────
424
+ {
425
+ label: "Prisma",
426
+ description: "Prisma ORM setup, schema design, client API, and migrations",
427
+ repo: "prisma/skills",
428
+ skills: [
429
+ "prisma-database-setup",
430
+ "prisma-client-api",
431
+ "prisma-cli",
432
+ ],
433
+ matchFiles: ["prisma/schema.prisma"],
434
+ },
435
+ {
436
+ label: "Supabase & Postgres",
437
+ description: "Supabase project setup, auth, Postgres best practices, and Firestore",
438
+ repo: "supabase/agent-skills",
439
+ skills: ["supabase-postgres-best-practices"],
440
+ matchFiles: ["supabase/config.toml"],
441
+ },
442
+ {
443
+ label: "PostgreSQL Design",
444
+ description: "PostgreSQL table design, indexing strategies, and query optimization",
445
+ repo: "wshobson/agents",
446
+ skills: ["postgresql-table-design"],
447
+ matchFiles: ["supabase/config.toml", "*.sql"],
448
+ },
449
+ {
450
+ label: "SQL Optimization & Review",
451
+ description: "Universal SQL performance optimization, security (injection prevention), and code review",
452
+ repo: "github/awesome-copilot",
453
+ skills: ["sql-optimization", "sql-code-review"],
454
+ matchFiles: [
455
+ "*.sql",
456
+ "*.sqlite",
457
+ "prisma/schema.prisma",
458
+ "supabase/config.toml",
459
+ "drizzle.config.ts",
460
+ "drizzle.config.js",
461
+ ],
462
+ },
463
+ {
464
+ label: "Redis",
465
+ description: "Redis development patterns and best practices",
466
+ repo: "redis/agent-skills",
467
+ skills: ["redis-development"],
468
+ matchFiles: ["redis.conf"],
469
+ },
470
+ // ── Cloud Platforms ────────────────────────────────────────────────────────
471
+ {
472
+ label: "Firebase",
473
+ description: "Firebase setup, auth, Firestore, hosting, and AI Logic",
474
+ repo: "firebase/agent-skills",
475
+ skills: [
476
+ "firebase-basics",
477
+ "firebase-auth-basics",
478
+ "firebase-firestore-basics",
479
+ "firebase-hosting-basics",
480
+ "firebase-ai-logic",
481
+ ],
482
+ matchFiles: ["firebase.json"],
483
+ },
484
+ {
485
+ label: "Azure",
486
+ description: "Azure deployment, AI services, storage, cost optimization, and diagnostics",
487
+ repo: "microsoft/github-copilot-for-azure",
488
+ skills: [
489
+ "azure-deploy",
490
+ "azure-ai",
491
+ "azure-storage",
492
+ "azure-cost-optimization",
493
+ "azure-diagnostics",
494
+ ],
495
+ matchFiles: ["azure-pipelines.yml"],
496
+ },
497
+ {
498
+ label: "AWS",
499
+ description: "AWS deployment, Lambda, and serverless patterns",
500
+ repo: "awslabs/agent-plugins",
501
+ skills: ["deploy", "aws-lambda", "aws-serverless-deployment"],
502
+ matchFiles: ["cdk.json", "samconfig.toml", "serverless.yml", "serverless.yaml"],
503
+ },
504
+ // ── Container / DevOps ─────────────────────────────────────────────────────
505
+ {
506
+ label: "Docker",
507
+ description: "Multi-stage Dockerfiles, layer optimization, and security hardening",
508
+ repo: "github/awesome-copilot",
509
+ skills: ["multi-stage-dockerfile"],
510
+ matchFiles: ["Dockerfile", "docker-compose.yml", "docker-compose.yaml"],
511
+ },
512
+ // ── Infrastructure as Code ─────────────────────────────────────────────────
513
+ {
514
+ label: "Terraform",
515
+ description: "Terraform style guide, testing, and stack patterns",
516
+ repo: "hashicorp/agent-skills",
517
+ skills: ["terraform-style-guide", "terraform-test", "terraform-stacks"],
518
+ matchFiles: ["main.tf"],
519
+ },
520
+ // ── Android (wshobson/agents — 7K installs) ────────────────────────────────
521
+ {
522
+ label: "Android",
523
+ description: "Android app design following Material Design 3 guidelines",
524
+ repo: "wshobson/agents",
525
+ skills: ["mobile-android-design"],
526
+ matchFiles: ["app/build.gradle", "app/build.gradle.kts"],
527
+ },
528
+ // ── Kubernetes (wshobson/agents — 4 skills) ────────────────────────────────
529
+ {
530
+ label: "Kubernetes",
531
+ description: "K8s manifests, Helm charts, GitOps workflows, and security policies",
532
+ repo: "wshobson/agents",
533
+ skills: [
534
+ "k8s-manifest-generator",
535
+ "helm-chart-scaffolding",
536
+ "gitops-workflow",
537
+ "k8s-security-policies",
538
+ ],
539
+ matchFiles: ["Chart.yaml", "kustomization.yaml"],
540
+ },
541
+ // ── CI/CD (wshobson/agents — 3 skills) ─────────────────────────────────────
542
+ {
543
+ label: "CI/CD Automation",
544
+ description: "Pipeline design, GitHub Actions workflows, and secrets management",
545
+ repo: "wshobson/agents",
546
+ skills: [
547
+ "deployment-pipeline-design",
548
+ "github-actions-templates",
549
+ "secrets-management",
550
+ ],
551
+ matchFiles: [".github/workflows"],
552
+ },
553
+ // ── Blockchain / Web3 (wshobson/agents — 3 skills) ─────────────────────────
554
+ {
555
+ label: "Blockchain & Web3",
556
+ description: "Solidity security, DeFi protocols, and smart contract testing",
557
+ repo: "wshobson/agents",
558
+ skills: ["solidity-security", "defi-protocol-templates", "web3-testing"],
559
+ matchFiles: ["hardhat.config.js", "hardhat.config.ts", "foundry.toml"],
560
+ },
561
+ // ── Data Engineering (wshobson/agents — 4 skills) ──────────────────────────
562
+ {
563
+ label: "Data Engineering",
564
+ description: "dbt transformations, Airflow DAGs, Spark optimization, and data quality",
565
+ repo: "wshobson/agents",
566
+ skills: [
567
+ "dbt-transformation-patterns",
568
+ "airflow-dag-patterns",
569
+ "spark-optimization",
570
+ "data-quality-frameworks",
571
+ ],
572
+ matchFiles: ["dbt_project.yml", "airflow.cfg"],
573
+ },
574
+ // ── Game Development — Unity (wshobson/agents) ─────────────────────────────
575
+ {
576
+ label: "Unity",
577
+ description: "Unity ECS patterns for high-performance game systems",
578
+ repo: "wshobson/agents",
579
+ skills: ["unity-ecs-patterns"],
580
+ matchFiles: ["ProjectSettings/ProjectVersion.txt"],
581
+ },
582
+ // ── Game Development — Godot (wshobson/agents) ─────────────────────────────
583
+ {
584
+ label: "Godot",
585
+ description: "Godot GDScript best practices and scene composition",
586
+ repo: "wshobson/agents",
587
+ skills: ["godot-gdscript-patterns"],
588
+ matchFiles: ["project.godot"],
589
+ },
590
+ // ── Essential (all projects) ────────────────────────────────────────────
591
+ {
592
+ label: "Skill Discovery",
593
+ description: "Find and install new agent skills from the ecosystem",
594
+ repo: "vercel-labs/skills",
595
+ skills: ["find-skills"],
596
+ matchAlways: true,
597
+ },
598
+ {
599
+ label: "Skill Authoring",
600
+ description: "Create, audit, and refine SKILL.md files",
601
+ repo: "anthropics/skills",
602
+ skills: ["skill-creator"],
603
+ matchAlways: true,
604
+ },
605
+ {
606
+ label: "Browser Automation",
607
+ description: "Browser automation for web scraping, testing, and interaction",
608
+ repo: "vercel-labs/agent-browser",
609
+ skills: ["agent-browser"],
610
+ matchAlways: true,
611
+ },
612
+ // ── General Tooling ───────────────────────────────────────────────────────
613
+ {
614
+ label: "Document Handling",
615
+ description: "PDF, DOCX, XLSX, PPTX creation and manipulation",
616
+ repo: "anthropics/skills",
617
+ skills: ["pdf", "docx", "xlsx", "pptx"],
618
+ matchAlways: true,
619
+ },
620
+ // ── Code Quality (wshobson/agents — matchAlways) ──────────────────────────
621
+ {
622
+ label: "Code Review & Quality",
623
+ description: "Code review excellence and error handling patterns",
624
+ repo: "wshobson/agents",
625
+ skills: ["code-review-excellence", "error-handling-patterns"],
626
+ matchAlways: true,
627
+ },
628
+ {
629
+ label: "Git Advanced Workflows",
630
+ description: "Advanced Git rebasing, cherry-picking, bisect, worktrees, and reflog",
631
+ repo: "wshobson/agents",
632
+ skills: ["git-advanced-workflows"],
633
+ matchAlways: true,
634
+ },
635
+ ];
636
+
637
+ // ─── Greenfield Tech Stack Choices ────────────────────────────────────────────
638
+
639
+ /**
640
+ * Tech stack → pack mappings for programmatic use.
641
+ *
642
+ * NOT shown directly to users during init (greenfield installs essentials
643
+ * only and defers stack-specific skills). These mappings are available for:
644
+ * 1. The LLM to install skills after establishing a design
645
+ * 2. The `/gsd skills` command (explicit user request)
646
+ * 3. Re-running brownfield detection after project files are created
647
+ */
648
+ export const GREENFIELD_STACKS: Array<{
649
+ id: string;
650
+ label: string;
651
+ description: string;
652
+ packs: string[];
653
+ }> = [
654
+ {
655
+ id: "ios",
656
+ label: "iOS App",
657
+ description: "Full iOS development — SwiftUI, Swift, and all iOS frameworks",
658
+ packs: [
659
+ "SwiftUI",
660
+ "Swift Core",
661
+ "iOS App Frameworks",
662
+ "iOS Data Frameworks",
663
+ "iOS AI & ML",
664
+ "iOS Engineering",
665
+ "iOS Hardware",
666
+ "iOS Platform",
667
+ ],
668
+ },
669
+ {
670
+ id: "swift",
671
+ label: "Swift (non-iOS)",
672
+ description: "Swift packages, server-side Swift, CLI tools, SwiftUI without iOS",
673
+ packs: ["SwiftUI", "Swift Core"],
674
+ },
675
+ {
676
+ id: "react-web",
677
+ label: "React Web",
678
+ description: "React, Next.js, shadcn/ui, web frontend",
679
+ packs: ["React & Web Frontend", "TypeScript & JS Development", "React State & Patterns", "Tailwind CSS", "shadcn/ui", "Frontend Design & UX"],
680
+ },
681
+ {
682
+ id: "react-native",
683
+ label: "React Native",
684
+ description: "Cross-platform mobile with React Native",
685
+ packs: ["React Native", "React Native Architecture", "React & Web Frontend", "TypeScript & JS Development"],
686
+ },
687
+ {
688
+ id: "fullstack-js",
689
+ label: "Full-Stack JavaScript/TypeScript",
690
+ description: "Node.js backend + React frontend",
691
+ packs: ["React & Web Frontend", "TypeScript & JS Development", "React State & Patterns", "Tailwind CSS", "shadcn/ui", "Frontend Design & UX", "Prisma"],
692
+ },
693
+ {
694
+ id: "rust",
695
+ label: "Rust",
696
+ description: "Systems programming with Rust",
697
+ packs: ["Rust", "Rust Async Patterns"],
698
+ },
699
+ {
700
+ id: "python",
701
+ label: "Python",
702
+ description: "Python applications, scripts, or ML",
703
+ packs: ["Python", "Python Advanced"],
704
+ },
705
+ {
706
+ id: "go",
707
+ label: "Go",
708
+ description: "Go services and CLIs",
709
+ packs: ["Go", "Go Concurrency Patterns"],
710
+ },
711
+ {
712
+ id: "firebase",
713
+ label: "Firebase",
714
+ description: "Firebase backend — auth, Firestore, hosting, AI",
715
+ packs: ["Firebase"],
716
+ },
717
+ {
718
+ id: "aws",
719
+ label: "AWS",
720
+ description: "AWS deployment, Lambda, serverless",
721
+ packs: ["AWS"],
722
+ },
723
+ {
724
+ id: "azure",
725
+ label: "Azure",
726
+ description: "Azure deployment, AI, storage, diagnostics",
727
+ packs: ["Azure"],
728
+ },
729
+ {
730
+ id: "angular",
731
+ label: "Angular",
732
+ description: "Angular components, signals, forms, routing",
733
+ packs: ["Angular", "Angular Migration", "Frontend Design & UX"],
734
+ },
735
+ {
736
+ id: "vue",
737
+ label: "Vue.js / Nuxt",
738
+ description: "Vue.js with Pinia, Vue Router, and testing",
739
+ packs: ["Vue.js", "Frontend Design & UX"],
740
+ },
741
+ {
742
+ id: "svelte",
743
+ label: "Svelte / SvelteKit",
744
+ description: "Svelte 5 and SvelteKit patterns",
745
+ packs: ["Svelte", "Tailwind CSS", "Frontend Design & UX"],
746
+ },
747
+ {
748
+ id: "nextjs",
749
+ label: "Next.js",
750
+ description: "Next.js app router, React, and Vercel deployment",
751
+ packs: ["Next.js", "Next.js App Router Patterns", "React & Web Frontend", "TypeScript & JS Development", "Tailwind CSS", "shadcn/ui"],
752
+ },
753
+ {
754
+ id: "flutter",
755
+ label: "Flutter",
756
+ description: "Cross-platform Flutter/Dart development",
757
+ packs: ["Flutter"],
758
+ },
759
+ {
760
+ id: "java",
761
+ label: "Java / Spring Boot",
762
+ description: "Spring Boot APIs, JPA, and testing",
763
+ packs: ["Java & Spring Boot"],
764
+ },
765
+ {
766
+ id: "dotnet",
767
+ label: ".NET / C#",
768
+ description: "ASP.NET Core, Entity Framework, and design patterns",
769
+ packs: [".NET & C#", ".NET Backend Patterns"],
770
+ },
771
+ {
772
+ id: "php",
773
+ label: "PHP / Laravel",
774
+ description: "Laravel patterns and PHP best practices",
775
+ packs: ["PHP & Laravel"],
776
+ },
777
+ {
778
+ id: "django",
779
+ label: "Django",
780
+ description: "Django models, views, middleware, and Celery",
781
+ packs: ["Django", "Python", "Python Advanced"],
782
+ },
783
+ {
784
+ id: "fastapi",
785
+ label: "FastAPI",
786
+ description: "FastAPI web APIs with async patterns",
787
+ packs: ["FastAPI", "Python", "Python Advanced"],
788
+ },
789
+ {
790
+ id: "android",
791
+ label: "Android / Kotlin",
792
+ description: "Android app development with Material Design 3",
793
+ packs: ["Android"],
794
+ },
795
+ {
796
+ id: "kubernetes",
797
+ label: "Kubernetes",
798
+ description: "Kubernetes manifests, Helm charts, and GitOps",
799
+ packs: ["Kubernetes", "Docker"],
800
+ },
801
+ {
802
+ id: "blockchain",
803
+ label: "Blockchain / Web3",
804
+ description: "Solidity, DeFi protocols, and smart contract testing",
805
+ packs: ["Blockchain & Web3"],
806
+ },
807
+ {
808
+ id: "data-engineering",
809
+ label: "Data Engineering",
810
+ description: "dbt, Airflow, Spark, and data quality",
811
+ packs: ["Data Engineering", "Python", "Python Advanced"],
812
+ },
813
+ {
814
+ id: "unity",
815
+ label: "Unity",
816
+ description: "Unity game development with ECS patterns",
817
+ packs: ["Unity"],
818
+ },
819
+ {
820
+ id: "godot",
821
+ label: "Godot",
822
+ description: "Godot game development with GDScript",
823
+ packs: ["Godot"],
824
+ },
825
+ {
826
+ id: "other",
827
+ label: "Other / Skip",
828
+ description: "Install skills later with npx skills add",
829
+ packs: [],
830
+ },
831
+ ];
832
+
833
+ // ─── Detection → Pack Matching ────────────────────────────────────────────────
834
+
835
+ /**
836
+ * Match project signals to relevant skill packs.
837
+ * Returns packs in catalog order (not sorted by match type).
838
+ */
839
+ export function matchPacksForProject(signals: ProjectSignals): SkillPack[] {
840
+ const matched = new Set<SkillPack>();
841
+
842
+ for (const pack of SKILL_CATALOG) {
843
+ // Language match
844
+ if (pack.matchLanguages && signals.primaryLanguage) {
845
+ if (pack.matchLanguages.includes(signals.primaryLanguage)) {
846
+ matched.add(pack);
847
+ continue;
848
+ }
849
+ }
850
+
851
+ // File match
852
+ if (pack.matchFiles) {
853
+ for (const file of pack.matchFiles) {
854
+ if (signals.detectedFiles.includes(file)) {
855
+ matched.add(pack);
856
+ break;
857
+ }
858
+ }
859
+ }
860
+
861
+ // Xcode platform match (e.g. iOS packs only when SDKROOT = iphoneos)
862
+ if (pack.matchXcodePlatforms && signals.xcodePlatforms.length > 0) {
863
+ const hasMatch = pack.matchXcodePlatforms.some((p) => signals.xcodePlatforms.includes(p));
864
+ if (hasMatch) matched.add(pack);
865
+ }
866
+
867
+ // Always-include packs (essentials)
868
+ if (pack.matchAlways) {
869
+ matched.add(pack);
870
+ }
871
+ }
872
+
873
+ return [...matched];
874
+ }
875
+
876
+ // ─── Installation ─────────────────────────────────────────────────────────────
877
+
878
+ /**
879
+ * Install a skill pack via the skills.sh CLI.
880
+ * Runs: npx skills add <repo> --skill <name> ... -y
881
+ *
882
+ * Returns true if installation succeeded.
883
+ */
884
+ export function installSkillPack(pack: SkillPack): Promise<boolean> {
885
+ return new Promise((resolve) => {
886
+ // --yes = npx auto-install, -y = skills.sh non-interactive
887
+ const args = ["--yes", "skills", "add", pack.repo];
888
+
889
+ for (const skill of pack.skills) {
890
+ args.push("--skill", skill);
891
+ }
892
+ args.push("-y");
893
+
894
+ execFile("npx", args, { timeout: 120_000 }, (error) => {
895
+ resolve(!error);
896
+ });
897
+ });
898
+ }
899
+
900
+ /**
901
+ * Install multiple packs, batching by repo to minimize npx invocations.
902
+ * Returns the labels of successfully installed packs.
903
+ */
904
+ export async function installPacksBatched(
905
+ packs: SkillPack[],
906
+ onProgress?: (label: string) => void,
907
+ ): Promise<string[]> {
908
+ // Group packs by repo
909
+ const byRepo = new Map<string, { skills: string[]; labels: string[] }>();
910
+ for (const pack of packs) {
911
+ const entry = byRepo.get(pack.repo) ?? { skills: [], labels: [] };
912
+ entry.skills.push(...pack.skills);
913
+ entry.labels.push(pack.label);
914
+ byRepo.set(pack.repo, entry);
915
+ }
916
+
917
+ const installed: string[] = [];
918
+ for (const [repo, { skills, labels }] of byRepo) {
919
+ onProgress?.(labels.join(", "));
920
+ const ok = await new Promise<boolean>((resolve) => {
921
+ // --yes = npx auto-install, -y = skills.sh non-interactive
922
+ const args = ["--yes", "skills", "add", repo];
923
+ for (const skill of skills) {
924
+ args.push("--skill", skill);
925
+ }
926
+ args.push("-y");
927
+ execFile("npx", args, { timeout: 120_000 }, (error) => {
928
+ resolve(!error);
929
+ });
930
+ });
931
+ if (ok) installed.push(...labels);
932
+ }
933
+ return installed;
934
+ }
935
+
936
+ /**
937
+ * Check if any skills from a pack are already installed.
938
+ */
939
+ export function isPackInstalled(pack: SkillPack): boolean {
940
+ const skillsDir = join(homedir(), ".agents", "skills");
941
+ if (!existsSync(skillsDir)) return false;
942
+
943
+ return pack.skills.every((name) =>
944
+ existsSync(join(skillsDir, name, "SKILL.md")),
945
+ );
946
+ }
947
+
948
+ // ─── Init Wizard Integration ──────────────────────────────────────────────────
949
+
950
+ /**
951
+ * Run skill installation step during project init.
952
+ *
953
+ * Brownfield (signals.detectedFiles.length > 0):
954
+ * Auto-detects tech stack → shows matched packs → installs accepted ones.
955
+ *
956
+ * Greenfield (no files detected):
957
+ * Installs essential packs only (find-skills, skill-creator, etc.).
958
+ * Stack-specific skills are deferred — once the LLM establishes a design
959
+ * and creates project files (package.json, firebase.json, etc.), brownfield
960
+ * detection will pick them up on the next `gsd init` or via auto-mode
961
+ * skill discovery.
962
+ *
963
+ * Returns the list of installed pack labels.
964
+ */
965
+ export async function runSkillInstallStep(
966
+ ctx: ExtensionCommandContext,
967
+ signals: ProjectSignals,
968
+ ): Promise<string[]> {
969
+ const installed: string[] = [];
970
+ const isBrownfield = signals.detectedFiles.length > 0;
971
+
972
+ if (isBrownfield) {
973
+ // ── Brownfield: auto-detect and confirm ─────────────────────────────────
974
+ const matched = matchPacksForProject(signals);
975
+ if (matched.length === 0) return installed;
976
+
977
+ // Filter out already-installed packs
978
+ const toInstall = matched.filter((p) => !isPackInstalled(p));
979
+ if (toInstall.length === 0) return installed;
980
+
981
+ // Group for display: Swift packs vs iOS packs vs other
982
+ const swiftPacks = toInstall.filter((p) => p.matchLanguages?.includes("swift"));
983
+ const iosPacks = toInstall.filter((p) => p.matchXcodePlatforms?.includes("iphoneos"));
984
+ const otherPacks = toInstall.filter((p) => !swiftPacks.includes(p) && !iosPacks.includes(p));
985
+
986
+ const summaryLines: string[] = [];
987
+ const hasIOS = signals.xcodePlatforms.includes("iphoneos");
988
+ if (hasIOS) {
989
+ summaryLines.push(`Detected: iOS project (${signals.primaryLanguage ?? "swift"})`);
990
+ } else if (signals.xcodePlatforms.length > 0) {
991
+ summaryLines.push(`Detected: ${signals.xcodePlatforms.join(", ")} Xcode project (${signals.primaryLanguage ?? "swift"})`);
992
+ } else {
993
+ summaryLines.push(`Detected: ${signals.primaryLanguage ?? "unknown"} project`);
994
+ }
995
+ summaryLines.push("");
996
+ summaryLines.push("Recommended skill packs:");
997
+ if (swiftPacks.length > 0) {
998
+ summaryLines.push(` Swift: ${swiftPacks.map((p) => p.label).join(", ")}`);
999
+ }
1000
+ if (iosPacks.length > 0) {
1001
+ summaryLines.push(` iOS: ${iosPacks.map((p) => p.label).join(", ")}`);
1002
+ }
1003
+ for (const p of otherPacks) {
1004
+ summaryLines.push(` • ${p.label}: ${p.description}`);
1005
+ }
1006
+
1007
+ const totalSkills = toInstall.reduce((n, p) => n + p.skills.length, 0);
1008
+ const choice = await showNextAction(ctx, {
1009
+ title: "GSD — Install Skills",
1010
+ summary: summaryLines,
1011
+ actions: [
1012
+ {
1013
+ id: "install",
1014
+ label: "Install recommended skills",
1015
+ description: `Install ${totalSkills} skills from ${toInstall.length} pack${toInstall.length > 1 ? "s" : ""} via skills.sh`,
1016
+ recommended: true,
1017
+ },
1018
+ {
1019
+ id: "skip",
1020
+ label: "Skip",
1021
+ description: "Install skills later with npx skills add",
1022
+ },
1023
+ ],
1024
+ notYetMessage: "Run /gsd init when ready.",
1025
+ });
1026
+
1027
+ if (choice === "install") {
1028
+ const labels = await installPacksBatched(toInstall, (label) => {
1029
+ ctx.ui.notify(`Installing ${label} skills...`, "info");
1030
+ });
1031
+ installed.push(...labels);
1032
+ const failed = toInstall.filter((p) => !installed.includes(p.label));
1033
+ for (const pack of failed) {
1034
+ ctx.ui.notify(`Failed to install ${pack.label} — try manually: npx skills add ${pack.repo}`, "info");
1035
+ }
1036
+ }
1037
+ } else {
1038
+ // ── Greenfield: install essentials only ─────────────────────────────────
1039
+ // Don't ask the user what tech stack they're building — they may not know
1040
+ // yet, especially non-technical users. Install essential packs (discovery,
1041
+ // authoring, browser, docs) and let stack-specific skills auto-detect later
1042
+ // once the LLM establishes the design and creates project files.
1043
+ const essentials = SKILL_CATALOG.filter((p) => p.matchAlways && !isPackInstalled(p));
1044
+ if (essentials.length === 0) return installed;
1045
+
1046
+ const totalSkills = essentials.reduce((n, p) => n + p.skills.length, 0);
1047
+ const choice = await showNextAction(ctx, {
1048
+ title: "GSD — Install Essential Skills",
1049
+ summary: [
1050
+ "GSD will install essential agent skills (skill discovery, authoring,",
1051
+ "browser automation, document handling).",
1052
+ "",
1053
+ "Stack-specific skills (React, Swift, Python, etc.) will be recommended",
1054
+ "automatically once your project files are in place.",
1055
+ ],
1056
+ actions: [
1057
+ {
1058
+ id: "install",
1059
+ label: "Install essentials",
1060
+ description: `Install ${totalSkills} essential skills via skills.sh`,
1061
+ recommended: true,
1062
+ },
1063
+ {
1064
+ id: "skip",
1065
+ label: "Skip",
1066
+ description: "Install skills later with npx skills add",
1067
+ },
1068
+ ],
1069
+ notYetMessage: "Run /gsd init when ready.",
1070
+ });
1071
+
1072
+ if (choice === "install") {
1073
+ const labels = await installPacksBatched(essentials, (label) => {
1074
+ ctx.ui.notify(`Installing ${label} skills...`, "info");
1075
+ });
1076
+ installed.push(...labels);
1077
+ }
1078
+ }
1079
+
1080
+ if (installed.length > 0) {
1081
+ ctx.ui.notify(`Installed: ${installed.join(", ")}`, "info");
1082
+ }
1083
+
1084
+ return installed;
1085
+ }