gsd-pi 2.67.0-dev.46f9884 → 2.67.0-dev.a5b1d8f

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 (555) hide show
  1. package/dist/resource-loader.d.ts +1 -1
  2. package/dist/resource-loader.js +20 -5
  3. package/dist/resources/GSD-WORKFLOW.md +3 -1
  4. package/dist/resources/extensions/get-secrets-from-user.js +18 -2
  5. package/dist/resources/extensions/gsd/auto-post-unit.js +26 -0
  6. package/dist/resources/extensions/gsd/bootstrap/system-context.js +18 -3
  7. package/dist/resources/extensions/gsd/codebase-generator.js +173 -12
  8. package/dist/resources/extensions/gsd/commands/catalog.js +4 -3
  9. package/dist/resources/extensions/gsd/commands/dispatcher.js +1 -1
  10. package/dist/resources/extensions/gsd/commands/handlers/core.js +92 -1
  11. package/dist/resources/extensions/gsd/commands-bootstrap.js +9 -0
  12. package/dist/resources/extensions/gsd/commands-codebase.js +4 -3
  13. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +39 -5
  14. package/dist/resources/extensions/gsd/prompts/complete-slice.md +3 -3
  15. package/dist/resources/extensions/gsd/prompts/execute-task.md +3 -3
  16. package/dist/resources/extensions/gsd/prompts/system.md +3 -0
  17. package/dist/resources/extensions/gsd/prompts/validate-milestone.md +7 -5
  18. package/dist/resources/extensions/gsd/workflow-reconcile.js +0 -4
  19. package/dist/resources/extensions/gsd/worktree-manager.js +6 -2
  20. package/dist/web/standalone/.next/BUILD_ID +1 -1
  21. package/dist/web/standalone/.next/app-path-routes-manifest.json +17 -17
  22. package/dist/web/standalone/.next/build-manifest.json +5 -5
  23. package/dist/web/standalone/.next/prerender-manifest.json +13 -13
  24. package/dist/web/standalone/.next/react-loadable-manifest.json +7 -7
  25. package/dist/web/standalone/.next/required-server-files.json +18 -6
  26. package/dist/web/standalone/.next/routes-manifest.json +1 -0
  27. package/dist/web/standalone/.next/server/app/_global-error/page.js +32 -3
  28. package/dist/web/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
  29. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  30. package/dist/web/standalone/.next/server/app/_global-error.html +1 -2
  31. package/dist/web/standalone/.next/server/app/_global-error.rsc +8 -6
  32. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +8 -6
  33. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  34. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +2 -1
  35. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  36. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +2 -1
  37. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  38. package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
  39. package/dist/web/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  40. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  41. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  42. package/dist/web/standalone/.next/server/app/_not-found.rsc +9 -7
  43. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +9 -7
  44. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  45. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  46. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  47. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +2 -1
  48. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  49. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  50. package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
  51. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  52. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  53. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
  54. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  55. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  56. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
  57. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  58. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
  59. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
  60. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  61. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
  62. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js.nft.json +1 -1
  63. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  64. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  65. package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
  66. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  67. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  68. package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
  69. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  70. package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
  71. package/dist/web/standalone/.next/server/app/api/dev-mode/route.js.nft.json +1 -1
  72. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  73. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  74. package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
  75. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  76. package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
  77. package/dist/web/standalone/.next/server/app/api/experimental/route.js.nft.json +1 -1
  78. package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
  79. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  80. package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
  81. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  82. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  83. package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  84. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  85. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  86. package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
  87. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  88. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  89. package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  90. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  91. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  92. package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
  93. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  94. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  95. package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
  96. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  97. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  98. package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
  99. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  100. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  101. package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
  102. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  103. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  104. package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
  105. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  106. package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
  107. package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  108. package/dist/web/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  109. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  110. package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
  111. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  112. package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
  113. package/dist/web/standalone/.next/server/app/api/preferences/route.js.nft.json +1 -1
  114. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  115. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  116. package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  117. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  118. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  119. package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
  120. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  121. package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -2
  122. package/dist/web/standalone/.next/server/app/api/remote-questions/route.js.nft.json +1 -1
  123. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  124. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  125. package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
  126. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  127. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  128. package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
  129. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  130. package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
  131. package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
  132. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  133. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  134. package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
  135. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  136. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  137. package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
  138. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  139. package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
  140. package/dist/web/standalone/.next/server/app/api/shutdown/route.js.nft.json +1 -1
  141. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  142. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  143. package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
  144. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  145. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  146. package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
  147. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  148. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  149. package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
  150. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  151. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +1 -1
  152. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js.nft.json +1 -1
  153. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  154. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
  155. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js.nft.json +1 -1
  156. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  157. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +2 -2
  158. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
  159. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  160. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +4 -4
  161. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
  162. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  163. package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
  164. package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js.nft.json +1 -1
  165. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  166. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  167. package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
  168. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  169. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  170. package/dist/web/standalone/.next/server/app/api/update/route.js.nft.json +1 -1
  171. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  172. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  173. package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
  174. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  175. package/dist/web/standalone/.next/server/app/index.html +1 -1
  176. package/dist/web/standalone/.next/server/app/index.rsc +2 -2
  177. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  178. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +2 -2
  179. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  180. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  181. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  182. package/dist/web/standalone/.next/server/app/page.js +2 -2
  183. package/dist/web/standalone/.next/server/app/page.js.nft.json +1 -1
  184. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  185. package/dist/web/standalone/.next/server/app-paths-manifest.json +17 -17
  186. package/dist/web/standalone/.next/server/chunks/2331.js +7 -7
  187. package/dist/web/standalone/.next/server/chunks/4741.js +5 -9
  188. package/dist/web/standalone/.next/server/chunks/63.js +45 -0
  189. package/dist/web/standalone/.next/server/chunks/6897.js +1 -1
  190. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  191. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  192. package/dist/web/standalone/.next/server/middleware.js +11 -8
  193. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  194. package/dist/web/standalone/.next/server/pages/500.html +1 -2
  195. package/dist/web/standalone/.next/server/prefetch-hints.json +1 -0
  196. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  197. package/dist/web/standalone/.next/static/NllX5BEOLdTXS9ypf1i3i/_buildManifest.js +1 -0
  198. package/dist/web/standalone/.next/static/chunks/2008.71ee9230ad78df21.js +20 -0
  199. package/dist/web/standalone/.next/static/chunks/{363642f4.f9053a63f1b97508.js → 363642f4.cf8b455e0d94b478.js} +1 -1
  200. package/dist/web/standalone/.next/static/chunks/3794-42fdce068d44fa4f.js +32 -0
  201. package/dist/web/standalone/.next/static/chunks/{4447.f86b52aea068b189.js → 4447.5bad7871be61ca73.js} +1 -1
  202. package/dist/web/standalone/.next/static/chunks/4bd1b696-e356ca5ba0218e27.js +1 -0
  203. package/dist/web/standalone/.next/static/chunks/{6502.8874bcae249c02e1.js → 6502.b804e48b7919f55e.js} +3 -3
  204. package/dist/web/standalone/.next/static/chunks/{e868780c.f7831045ac345aaa.js → e868780c.abc48b70a10fc2d6.js} +3 -3
  205. package/dist/web/standalone/.next/static/chunks/framework-711ef29bc66f648c.js +1 -0
  206. package/dist/web/standalone/.next/static/chunks/main-6919d9dd919bd15f.js +5 -0
  207. package/dist/web/standalone/.next/static/chunks/{webpack-9fed74684e1c5bb1.js → webpack-b49b09f97429b5d0.js} +1 -1
  208. package/dist/web/standalone/node_modules/@next/env/package.json +1 -1
  209. package/dist/web/standalone/node_modules/next/dist/build/adapter/setup-node-env.external.js +15 -0
  210. package/dist/web/standalone/node_modules/next/dist/build/analysis/extract-const-value.js +78 -63
  211. package/dist/web/standalone/node_modules/next/dist/build/analysis/get-page-static-info.js +64 -40
  212. package/dist/web/standalone/node_modules/next/dist/build/create-compiler-aliases.js +2 -0
  213. package/dist/web/standalone/node_modules/next/dist/build/define-env.js +29 -11
  214. package/dist/web/standalone/node_modules/next/dist/build/duration-to-string.js +1 -1
  215. package/dist/web/standalone/node_modules/next/dist/build/entries.js +55 -295
  216. package/dist/web/standalone/node_modules/next/dist/build/file-classifier.js +76 -0
  217. package/dist/web/standalone/node_modules/next/dist/build/get-supported-browsers.js +38 -0
  218. package/dist/web/standalone/node_modules/next/dist/build/load-jsconfig.js +7 -7
  219. package/dist/web/standalone/node_modules/next/dist/build/lockfile.js +90 -9
  220. package/dist/web/standalone/node_modules/next/dist/build/next-config-ts/transpile-config.js +128 -49
  221. package/dist/web/standalone/node_modules/next/dist/build/print-build-errors.js +72 -0
  222. package/dist/web/standalone/node_modules/next/dist/build/route-discovery.js +353 -0
  223. package/dist/web/standalone/node_modules/next/dist/build/segment-config/app/app-segment-config.js +34 -17
  224. package/dist/web/standalone/node_modules/next/dist/build/static-paths/app.js +68 -15
  225. package/dist/web/standalone/node_modules/next/dist/build/static-paths/pages.js +3 -3
  226. package/dist/web/standalone/node_modules/next/dist/build/swc/index.js +125 -48
  227. package/dist/web/standalone/node_modules/next/dist/build/swc/loaderWorkerPool.js +40 -0
  228. package/dist/web/standalone/node_modules/next/dist/build/swc/options.js +23 -6
  229. package/dist/web/standalone/node_modules/next/dist/build/utils.js +48 -94
  230. package/dist/web/standalone/node_modules/next/dist/build/webpack/config/blocks/css/index.js +14 -3
  231. package/dist/web/standalone/node_modules/next/dist/build/webpack/config/blocks/css/loaders/global.js +4 -2
  232. package/dist/web/standalone/node_modules/next/dist/build/webpack/config/blocks/css/loaders/modules.js +4 -2
  233. package/dist/web/standalone/node_modules/next/dist/build/webpack/config/blocks/css/loaders/next-font.js +1 -0
  234. package/dist/web/standalone/node_modules/next/dist/build/webpack/config/blocks/css/plugins.js +5 -5
  235. package/dist/web/standalone/node_modules/next/dist/build/webpack/config/index.js +3 -2
  236. package/dist/web/standalone/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js +2 -1
  237. package/dist/web/standalone/node_modules/next/dist/build/webpack/loaders/css-loader/src/plugins/postcss-url-parser.js +8 -1
  238. package/dist/web/standalone/node_modules/next/dist/build/webpack/loaders/lightningcss-loader/src/loader.js +13 -4
  239. package/dist/web/standalone/node_modules/next/dist/build/webpack/loaders/next-middleware-loader.js +3 -1
  240. package/dist/web/standalone/node_modules/next/dist/build/webpack/plugins/build-manifest-plugin-utils.js +2 -16
  241. package/dist/web/standalone/node_modules/next/dist/build/webpack/plugins/build-manifest-plugin.js +2 -2
  242. package/dist/web/standalone/node_modules/next/dist/build/webpack/plugins/deferred-entries-plugin.js +106 -0
  243. package/dist/web/standalone/node_modules/next/dist/build/webpack/plugins/flight-client-entry-plugin.js +16 -8
  244. package/dist/web/standalone/node_modules/next/dist/build/webpack/plugins/flight-manifest-plugin.js +24 -11
  245. package/dist/web/standalone/node_modules/next/dist/build/webpack/plugins/middleware-plugin.js +21 -2
  246. package/dist/web/standalone/node_modules/next/dist/build/webpack/plugins/next-types-plugin/index.js +6 -5
  247. package/dist/web/standalone/node_modules/next/dist/build/webpack/plugins/nextjs-require-cache-hot-reloader.js +10 -14
  248. package/dist/web/standalone/node_modules/next/dist/build/webpack/plugins/wellknown-errors-plugin/parseNotFoundError.js +18 -4
  249. package/dist/web/standalone/node_modules/next/dist/build/webpack/plugins/wellknown-errors-plugin/parseScss.js +5 -4
  250. package/dist/web/standalone/node_modules/next/dist/build/webpack-config.js +18 -8
  251. package/dist/web/standalone/node_modules/next/dist/cli/next-test.js +4 -3
  252. package/dist/web/standalone/node_modules/next/dist/client/app-find-source-map-url.js +2 -1
  253. package/dist/web/standalone/node_modules/next/dist/client/components/app-router-headers.js +10 -0
  254. package/dist/web/standalone/node_modules/next/dist/client/components/app-router-instance.js +82 -4
  255. package/dist/web/standalone/node_modules/next/dist/client/components/app-router.js +39 -20
  256. package/dist/web/standalone/node_modules/next/dist/client/components/builtin/app-error.js +29 -65
  257. package/dist/web/standalone/node_modules/next/dist/client/components/builtin/error-styles.js +165 -0
  258. package/dist/web/standalone/node_modules/next/dist/client/components/builtin/global-error.js +56 -38
  259. package/dist/web/standalone/node_modules/next/dist/client/components/error-boundary.js +16 -6
  260. package/dist/web/standalone/node_modules/next/dist/client/components/forbidden.js +1 -1
  261. package/dist/web/standalone/node_modules/next/dist/client/components/handle-isr-error.js +3 -4
  262. package/dist/web/standalone/node_modules/next/dist/client/components/links.js +7 -0
  263. package/dist/web/standalone/node_modules/next/dist/client/components/navigation-untracked.js +2 -0
  264. package/dist/web/standalone/node_modules/next/dist/client/components/navigation.js +27 -0
  265. package/dist/web/standalone/node_modules/next/dist/client/components/navigation.react-server.js +5 -2
  266. package/dist/web/standalone/node_modules/next/dist/client/components/not-found.js +1 -1
  267. package/dist/web/standalone/node_modules/next/dist/client/components/redirect-boundary.js +1 -1
  268. package/dist/web/standalone/node_modules/next/dist/client/components/redirect-error.js +0 -9
  269. package/dist/web/standalone/node_modules/next/dist/client/components/redirect.js +2 -2
  270. package/dist/web/standalone/node_modules/next/dist/client/components/router-reducer/compute-changed-path.js +73 -0
  271. package/dist/web/standalone/node_modules/next/dist/client/components/router-reducer/create-initial-router-state.js +102 -8
  272. package/dist/web/standalone/node_modules/next/dist/client/components/router-reducer/fetch-server-response.js +165 -48
  273. package/dist/web/standalone/node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js +19 -11
  274. package/dist/web/standalone/node_modules/next/dist/client/components/router-reducer/ppr-navigations.js +669 -457
  275. package/dist/web/standalone/node_modules/next/dist/client/components/router-reducer/reducers/committed-state.js +49 -0
  276. package/dist/web/standalone/node_modules/next/dist/client/components/router-reducer/reducers/find-head-in-cache.js +19 -20
  277. package/dist/web/standalone/node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js +5 -117
  278. package/dist/web/standalone/node_modules/next/dist/client/components/router-reducer/reducers/refresh-reducer.js +34 -19
  279. package/dist/web/standalone/node_modules/next/dist/client/components/router-reducer/reducers/restore-reducer.js +16 -32
  280. package/dist/web/standalone/node_modules/next/dist/client/components/router-reducer/reducers/server-action-reducer.js +85 -57
  281. package/dist/web/standalone/node_modules/next/dist/client/components/router-reducer/reducers/server-patch-reducer.js +12 -10
  282. package/dist/web/standalone/node_modules/next/dist/client/components/router-reducer/router-reducer-types.js +10 -1
  283. package/dist/web/standalone/node_modules/next/dist/client/components/router-reducer/router-reducer.js +1 -1
  284. package/dist/web/standalone/node_modules/next/dist/client/components/segment-cache/bfcache.js +128 -0
  285. package/dist/web/standalone/node_modules/next/dist/client/components/segment-cache/cache.js +732 -231
  286. package/dist/web/standalone/node_modules/next/dist/client/components/segment-cache/lru.js +13 -6
  287. package/dist/web/standalone/node_modules/next/dist/client/components/segment-cache/navigation-testing-lock.js +194 -0
  288. package/dist/web/standalone/node_modules/next/dist/client/components/segment-cache/navigation.js +388 -250
  289. package/dist/web/standalone/node_modules/next/dist/client/components/segment-cache/optimistic-routes.js +543 -0
  290. package/dist/web/standalone/node_modules/next/dist/client/components/segment-cache/scheduler.js +154 -55
  291. package/dist/web/standalone/node_modules/next/dist/client/components/segment-cache/vary-path.js +63 -1
  292. package/dist/web/standalone/node_modules/next/dist/client/components/unauthorized.js +1 -1
  293. package/dist/web/standalone/node_modules/next/dist/client/components/use-action-queue.js +49 -3
  294. package/dist/web/standalone/node_modules/next/dist/client/dev/hot-reloader/app/hot-reloader-app.js +9 -1
  295. package/dist/web/standalone/node_modules/next/dist/client/flight-data-helpers.js +42 -29
  296. package/dist/web/standalone/node_modules/next/dist/client/lib/javascript-url.js +32 -0
  297. package/dist/web/standalone/node_modules/next/dist/client/lib/promise.js +53 -0
  298. package/dist/web/standalone/node_modules/next/dist/client/{app-build-id.js → navigation-build-id.js} +17 -13
  299. package/dist/web/standalone/node_modules/next/dist/client/react-client-callbacks/on-recoverable-error.js +14 -0
  300. package/dist/web/standalone/node_modules/next/dist/client/route-loader.js +9 -46
  301. package/dist/web/standalone/node_modules/next/dist/client/router.js +1 -1
  302. package/dist/web/standalone/node_modules/next/dist/compiled/@next/font/dist/google/font-data.json +74 -3
  303. package/dist/web/standalone/node_modules/next/dist/compiled/babel/bundle.js +1 -1
  304. package/dist/web/standalone/node_modules/next/dist/compiled/babel-packages/packages-bundle.js +5 -5
  305. package/dist/web/standalone/node_modules/next/dist/compiled/browserslist/index.js +1 -1
  306. package/dist/web/standalone/node_modules/next/dist/compiled/http-proxy/index.js +5 -5
  307. package/dist/web/standalone/node_modules/next/dist/compiled/jsonwebtoken/index.js +2 -2
  308. package/dist/web/standalone/node_modules/next/dist/compiled/next-devtools/index.js +2209 -23
  309. package/dist/web/standalone/node_modules/next/dist/compiled/next-server/app-page-experimental.runtime.prod.js +42 -12
  310. package/dist/web/standalone/node_modules/next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js +42 -12
  311. package/dist/web/standalone/node_modules/next/dist/compiled/next-server/app-page-turbo.runtime.prod.js +42 -12
  312. package/dist/web/standalone/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js +42 -12
  313. package/dist/web/standalone/node_modules/next/dist/compiled/next-server/app-route.runtime.prod.js +2 -2
  314. package/dist/web/standalone/node_modules/next/dist/compiled/next-server/pages-turbo.runtime.prod.js +10 -10
  315. package/dist/web/standalone/node_modules/next/dist/compiled/next-server/pages.runtime.prod.js +10 -10
  316. package/dist/web/standalone/node_modules/next/dist/compiled/react-is/package.json +1 -1
  317. package/dist/web/standalone/node_modules/next/dist/compiled/tar/index.min.js +1 -0
  318. package/dist/web/standalone/node_modules/next/dist/compiled/tar/package.json +1 -1
  319. package/dist/web/standalone/node_modules/next/dist/compiled/unistore/unistore.js +1 -1
  320. package/dist/web/standalone/node_modules/next/dist/lib/bundler.js +97 -0
  321. package/dist/web/standalone/node_modules/next/dist/lib/constants.js +19 -4
  322. package/dist/web/standalone/node_modules/next/dist/lib/download-swc.js +2 -2
  323. package/dist/web/standalone/node_modules/next/dist/lib/find-root.js +11 -7
  324. package/dist/web/standalone/node_modules/next/dist/lib/format-server-error.js +1 -0
  325. package/dist/web/standalone/node_modules/next/dist/lib/generate-interception-routes-rewrites.js +3 -20
  326. package/dist/web/standalone/node_modules/next/dist/lib/interop-default.js +1 -0
  327. package/dist/web/standalone/node_modules/next/dist/lib/is-interception-route-rewrite.js +18 -0
  328. package/dist/web/standalone/node_modules/next/dist/lib/load-custom-routes.js +49 -5
  329. package/dist/web/standalone/node_modules/next/dist/lib/memory/trace.js +109 -0
  330. package/dist/web/standalone/node_modules/next/dist/lib/metadata/get-metadata-route.js +11 -2
  331. package/dist/web/standalone/node_modules/next/dist/lib/needs-experimental-react.js +2 -2
  332. package/dist/web/standalone/node_modules/next/dist/lib/patch-incorrect-lockfile.js +5 -5
  333. package/dist/web/standalone/node_modules/next/dist/lib/try-to-parse-path.js +1 -2
  334. package/dist/web/standalone/node_modules/next/dist/lib/turbopack-warning.js +0 -1
  335. package/dist/web/standalone/node_modules/next/dist/lib/typescript/diagnosticFormatter.js +6 -3
  336. package/dist/web/standalone/node_modules/next/dist/lib/typescript/getTypeScriptConfiguration.js +81 -1
  337. package/dist/web/standalone/node_modules/next/dist/lib/typescript/missingDependencyError.js +1 -1
  338. package/dist/web/standalone/node_modules/next/dist/lib/typescript/runTypeCheck.js +6 -8
  339. package/dist/web/standalone/node_modules/next/dist/lib/typescript/type-paths.js +7 -12
  340. package/dist/web/standalone/node_modules/next/dist/lib/typescript/writeAppTypeDeclarations.js +17 -7
  341. package/dist/web/standalone/node_modules/next/dist/lib/typescript/writeConfigurationDefaults.js +33 -32
  342. package/dist/web/standalone/node_modules/next/dist/lib/verify-typescript-setup.js +66 -16
  343. package/dist/web/standalone/node_modules/next/dist/next-devtools/server/shared.js +6 -10
  344. package/dist/web/standalone/node_modules/next/dist/next-devtools/shared/webpack-module-path.js +4 -4
  345. package/dist/web/standalone/node_modules/next/dist/next-devtools/userspace/app/app-dev-overlay-error-boundary.js +22 -4
  346. package/dist/web/standalone/node_modules/next/dist/next-devtools/userspace/app/errors/stitched-error.js +7 -1
  347. package/dist/web/standalone/node_modules/next/dist/next-devtools/userspace/app/forward-logs.js +18 -13
  348. package/dist/web/standalone/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js +7 -4
  349. package/dist/web/standalone/node_modules/next/dist/server/app-render/action-handler.js +83 -15
  350. package/dist/web/standalone/node_modules/next/dist/server/app-render/app-render-prerender-utils.js +0 -82
  351. package/dist/web/standalone/node_modules/next/dist/server/app-render/app-render-render-utils.js +45 -81
  352. package/dist/web/standalone/node_modules/next/dist/server/app-render/app-render.js +1746 -803
  353. package/dist/web/standalone/node_modules/next/dist/server/app-render/create-component-tree.js +136 -50
  354. package/dist/web/standalone/node_modules/next/dist/server/app-render/create-error-handler.js +6 -4
  355. package/dist/web/standalone/node_modules/next/dist/server/app-render/create-flight-router-state-from-loader-tree.js +52 -26
  356. package/dist/web/standalone/node_modules/next/dist/server/app-render/csrf-protection.js +14 -3
  357. package/dist/web/standalone/node_modules/next/dist/server/app-render/debug-channel-server.js +30 -0
  358. package/dist/web/standalone/node_modules/next/dist/server/app-render/debug-channel-server.web.js +71 -0
  359. package/dist/web/standalone/node_modules/next/dist/server/app-render/dynamic-rendering.js +353 -37
  360. package/dist/web/standalone/node_modules/next/dist/server/app-render/get-asset-query-string.js +2 -2
  361. package/dist/web/standalone/node_modules/next/dist/server/app-render/get-layer-assets.js +1 -1
  362. package/dist/web/standalone/node_modules/next/dist/server/app-render/instant-validation/boundary-constants.js +13 -0
  363. package/dist/web/standalone/node_modules/next/dist/server/app-render/instant-validation/boundary-tracking.js +18 -0
  364. package/dist/web/standalone/node_modules/next/dist/server/app-render/instant-validation/instant-config.js +181 -0
  365. package/dist/web/standalone/node_modules/next/dist/server/app-render/instant-validation/instant-samples-client.js +128 -0
  366. package/dist/web/standalone/node_modules/next/dist/server/app-render/instant-validation/instant-samples.js +432 -0
  367. package/dist/web/standalone/node_modules/next/dist/server/app-render/instant-validation/instant-validation-error.js +33 -0
  368. package/dist/web/standalone/node_modules/next/dist/server/app-render/instant-validation/stream-utils.js +96 -0
  369. package/dist/web/standalone/node_modules/next/dist/server/app-render/manifests-singleton.js +8 -1
  370. package/dist/web/standalone/node_modules/next/dist/server/app-render/postponed-state.js +2 -1
  371. package/dist/web/standalone/node_modules/next/dist/server/app-render/prospective-render-utils.js +1 -0
  372. package/dist/web/standalone/node_modules/next/dist/server/app-render/segment-explorer-path.js +35 -10
  373. package/dist/web/standalone/node_modules/next/dist/server/app-render/staged-rendering.js +142 -72
  374. package/dist/web/standalone/node_modules/next/dist/server/app-render/stale-time.js +111 -0
  375. package/dist/web/standalone/node_modules/next/dist/server/app-render/stream-ops.js +106 -0
  376. package/dist/web/standalone/node_modules/next/dist/server/app-render/stream-ops.web.js +163 -0
  377. package/dist/web/standalone/node_modules/next/dist/server/app-render/types.js +10 -4
  378. package/dist/web/standalone/node_modules/next/dist/server/app-render/use-flight-response.js +3 -1
  379. package/dist/web/standalone/node_modules/next/dist/server/app-render/vary-params.js +336 -0
  380. package/dist/web/standalone/node_modules/next/dist/server/app-render/walk-tree-with-flight-router-state.js +59 -12
  381. package/dist/web/standalone/node_modules/next/dist/server/app-render/work-unit-async-storage.external.js +54 -26
  382. package/dist/web/standalone/node_modules/next/dist/server/async-storage/request-store.js +4 -4
  383. package/dist/web/standalone/node_modules/next/dist/server/async-storage/work-store.js +2 -5
  384. package/dist/web/standalone/node_modules/next/dist/server/base-server.js +65 -53
  385. package/dist/web/standalone/node_modules/next/dist/server/config-schema.js +94 -8
  386. package/dist/web/standalone/node_modules/next/dist/server/config-shared.js +57 -7
  387. package/dist/web/standalone/node_modules/next/dist/server/config.js +96 -25
  388. package/dist/web/standalone/node_modules/next/dist/server/dev/browser-logs/file-logger.js +9 -6
  389. package/dist/web/standalone/node_modules/next/dist/server/dev/browser-logs/receive-logs.js +46 -0
  390. package/dist/web/standalone/node_modules/next/dist/server/dev/browser-logs/source-map.js +1 -4
  391. package/dist/web/standalone/node_modules/next/dist/server/dev/hot-reloader-turbopack.js +266 -33
  392. package/dist/web/standalone/node_modules/next/dist/server/dev/hot-reloader-webpack.js +8 -4
  393. package/dist/web/standalone/node_modules/next/dist/server/dev/log-requests.js +10 -2
  394. package/dist/web/standalone/node_modules/next/dist/server/dev/middleware-turbopack.js +20 -10
  395. package/dist/web/standalone/node_modules/next/dist/server/dev/middleware-webpack.js +13 -3
  396. package/dist/web/standalone/node_modules/next/dist/server/dev/next-dev-server.js +19 -6
  397. package/dist/web/standalone/node_modules/next/dist/server/dev/on-demand-entry-handler.js +69 -0
  398. package/dist/web/standalone/node_modules/next/dist/server/dev/require-cache.js +51 -21
  399. package/dist/web/standalone/node_modules/next/dist/server/dev/server-action-logger.js +37 -0
  400. package/dist/web/standalone/node_modules/next/dist/server/dev/static-paths-worker.js +1 -0
  401. package/dist/web/standalone/node_modules/next/dist/server/dev/turbopack-utils.js +6 -15
  402. package/dist/web/standalone/node_modules/next/dist/server/dynamic-rendering-utils.js +22 -0
  403. package/dist/web/standalone/node_modules/next/dist/server/image-optimizer.js +157 -27
  404. package/dist/web/standalone/node_modules/next/dist/server/lib/app-info-log.js +16 -38
  405. package/dist/web/standalone/node_modules/next/dist/server/lib/cache-control.js +1 -1
  406. package/dist/web/standalone/node_modules/next/dist/server/lib/clone-response.js +16 -16
  407. package/dist/web/standalone/node_modules/next/dist/server/lib/cpu-profile.js +47 -16
  408. package/dist/web/standalone/node_modules/next/dist/server/lib/dev-bundler-service.js +2 -2
  409. package/dist/web/standalone/node_modules/next/dist/server/lib/disk-lru-cache.external.js +57 -0
  410. package/dist/web/standalone/node_modules/next/dist/server/lib/find-page-file.js +27 -7
  411. package/dist/web/standalone/node_modules/next/dist/server/lib/implicit-tags.js +3 -3
  412. package/dist/web/standalone/node_modules/next/dist/server/lib/incremental-cache/file-system-cache.js +5 -3
  413. package/dist/web/standalone/node_modules/next/dist/server/lib/incremental-cache/index.js +32 -10
  414. package/dist/web/standalone/node_modules/next/dist/server/lib/incremental-cache/memory-cache.external.js +18 -1
  415. package/dist/web/standalone/node_modules/next/dist/server/lib/install-code-frame.js +22 -0
  416. package/dist/web/standalone/node_modules/next/dist/server/lib/lru-cache.js +9 -1
  417. package/dist/web/standalone/node_modules/next/dist/server/lib/patch-fetch.js +40 -7
  418. package/dist/web/standalone/node_modules/next/dist/server/lib/postponed-request-body.js +64 -0
  419. package/dist/web/standalone/node_modules/next/dist/server/lib/render-server.js +4 -1
  420. package/dist/web/standalone/node_modules/next/dist/server/lib/router-server.js +37 -13
  421. package/dist/web/standalone/node_modules/next/dist/server/lib/router-utils/block-cross-site-dev.js +110 -0
  422. package/dist/web/standalone/node_modules/next/dist/server/lib/router-utils/filesystem.js +16 -15
  423. package/dist/web/standalone/node_modules/next/dist/server/lib/router-utils/resolve-routes.js +32 -11
  424. package/dist/web/standalone/node_modules/next/dist/server/lib/router-utils/route-types-utils.js +3 -3
  425. package/dist/web/standalone/node_modules/next/dist/server/lib/router-utils/setup-dev-bundler.js +71 -71
  426. package/dist/web/standalone/node_modules/next/dist/server/lib/router-utils/typegen.js +247 -2
  427. package/dist/web/standalone/node_modules/next/dist/server/lib/server-ipc/utils.js +2 -1
  428. package/dist/web/standalone/node_modules/next/dist/server/lib/start-server.js +73 -39
  429. package/dist/web/standalone/node_modules/next/dist/server/lib/trace/tracer.js +11 -1
  430. package/dist/web/standalone/node_modules/next/dist/server/lib/utils.js +40 -11
  431. package/dist/web/standalone/node_modules/next/dist/server/load-components.js +2 -0
  432. package/dist/web/standalone/node_modules/next/dist/server/load-manifest.external.js +37 -17
  433. package/dist/web/standalone/node_modules/next/dist/server/mcp/tools/get-errors.js +11 -4
  434. package/dist/web/standalone/node_modules/next/dist/server/mcp/tools/get-logs.js +9 -3
  435. package/dist/web/standalone/node_modules/next/dist/server/mcp/tools/get-page-metadata.js +52 -44
  436. package/dist/web/standalone/node_modules/next/dist/server/mcp/tools/get-project-metadata.js +6 -2
  437. package/dist/web/standalone/node_modules/next/dist/server/mcp/tools/get-routes.js +44 -79
  438. package/dist/web/standalone/node_modules/next/dist/server/mcp/tools/get-server-action-by-id.js +12 -4
  439. package/dist/web/standalone/node_modules/next/dist/server/mcp/tools/utils/format-errors.js +62 -72
  440. package/dist/web/standalone/node_modules/next/dist/server/next-server.js +69 -99
  441. package/dist/web/standalone/node_modules/next/dist/server/next.js +3 -0
  442. package/dist/web/standalone/node_modules/next/dist/server/node-environment-extensions/console-dim.external.js +61 -6
  443. package/dist/web/standalone/node_modules/next/dist/server/node-environment-extensions/date.js +4 -4
  444. package/dist/web/standalone/node_modules/next/dist/server/node-environment-extensions/fast-set-immediate.external.js +13 -6
  445. package/dist/web/standalone/node_modules/next/dist/server/node-environment-extensions/{utils.js → io-utils.js} +14 -5
  446. package/dist/web/standalone/node_modules/next/dist/server/node-environment-extensions/node-crypto.js +8 -8
  447. package/dist/web/standalone/node_modules/next/dist/server/node-environment-extensions/process-error-handlers.js +91 -0
  448. package/dist/web/standalone/node_modules/next/dist/server/node-environment-extensions/random.js +2 -2
  449. package/dist/web/standalone/node_modules/next/dist/server/node-environment-extensions/{unhandled-rejection.js → unhandled-rejection.external.js} +23 -4
  450. package/dist/web/standalone/node_modules/next/dist/server/node-environment-extensions/web-crypto.js +3 -3
  451. package/dist/web/standalone/node_modules/next/dist/server/node-environment.js +1 -1
  452. package/dist/web/standalone/node_modules/next/dist/server/normalizers/request/segment-prefix-rsc.js +2 -1
  453. package/dist/web/standalone/node_modules/next/dist/server/patch-error-inspect.js +37 -20
  454. package/dist/web/standalone/node_modules/next/dist/server/render-result.js +9 -0
  455. package/dist/web/standalone/node_modules/next/dist/server/render.js +47 -44
  456. package/dist/web/standalone/node_modules/next/dist/server/require-hook.js +19 -8
  457. package/dist/web/standalone/node_modules/next/dist/server/response-cache/utils.js +1 -0
  458. package/dist/web/standalone/node_modules/next/dist/server/resume-data-cache/cache-store.js +35 -23
  459. package/dist/web/standalone/node_modules/next/dist/server/resume-data-cache/resume-data-cache.js +16 -7
  460. package/dist/web/standalone/node_modules/next/dist/server/revalidation-utils.js +12 -7
  461. package/dist/web/standalone/node_modules/next/dist/server/route-matcher-providers/dev/dev-app-page-route-matcher-provider.js +2 -1
  462. package/dist/web/standalone/node_modules/next/dist/server/route-modules/app-page/helpers/prerender-manifest-matcher.js +4 -1
  463. package/dist/web/standalone/node_modules/next/dist/server/route-modules/app-page/module.js +31 -1
  464. package/dist/web/standalone/node_modules/next/dist/server/route-modules/app-page/normalize-request-url.js +25 -0
  465. package/dist/web/standalone/node_modules/next/dist/server/route-modules/pages/pages-handler.js +31 -8
  466. package/dist/web/standalone/node_modules/next/dist/server/route-modules/route-module.js +71 -18
  467. package/dist/web/standalone/node_modules/next/dist/server/stream-utils/encoded-tags.js +8 -0
  468. package/dist/web/standalone/node_modules/next/dist/server/stream-utils/node-web-streams-helper.js +239 -58
  469. package/dist/web/standalone/node_modules/next/dist/server/stream-utils/uint8array-helpers.js +7 -2
  470. package/dist/web/standalone/node_modules/next/dist/server/typescript/constant.js +1 -0
  471. package/dist/web/standalone/node_modules/next/dist/server/typescript/rules/config.js +14 -3
  472. package/dist/web/standalone/node_modules/next/dist/server/web/adapter.js +7 -3
  473. package/dist/web/standalone/node_modules/next/dist/server/web/next-url.js +6 -2
  474. package/dist/web/standalone/node_modules/next/dist/server/web/sandbox/sandbox.js +3 -0
  475. package/dist/web/standalone/node_modules/next/dist/shared/lib/app-router-types.js +30 -11
  476. package/dist/web/standalone/node_modules/next/dist/shared/lib/constants.js +7 -7
  477. package/dist/web/standalone/node_modules/next/dist/shared/lib/deployment-id.js +37 -10
  478. package/dist/web/standalone/node_modules/next/dist/shared/lib/errors/canary-only-config-error.js +1 -1
  479. package/dist/web/standalone/node_modules/next/dist/shared/lib/errors/code-frame.js +20 -0
  480. package/dist/web/standalone/node_modules/next/dist/shared/lib/format-webpack-messages.js +22 -2
  481. package/dist/web/standalone/node_modules/next/dist/shared/lib/image-config.js +3 -1
  482. package/dist/web/standalone/node_modules/next/dist/shared/lib/is-internal.js +2 -0
  483. package/dist/web/standalone/node_modules/next/dist/shared/lib/magic-identifier.js +6 -6
  484. package/dist/web/standalone/node_modules/next/dist/shared/lib/router/router.js +32 -0
  485. package/dist/web/standalone/node_modules/next/dist/shared/lib/router/utils/app-paths.js +11 -0
  486. package/dist/web/standalone/node_modules/next/dist/shared/lib/router/utils/get-dynamic-param.js +11 -4
  487. package/dist/web/standalone/node_modules/next/dist/shared/lib/router/utils/parse-loader-tree.js +3 -2
  488. package/dist/web/standalone/node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js +9 -2
  489. package/dist/web/standalone/node_modules/next/dist/shared/lib/router/utils/parse-url.js +8 -2
  490. package/dist/web/standalone/node_modules/next/dist/shared/lib/segment-cache/vary-params-decoding.js +32 -0
  491. package/dist/web/standalone/node_modules/next/dist/shared/lib/server-reference-info.js +4 -0
  492. package/dist/web/standalone/node_modules/next/dist/shared/lib/size-limit.js +6 -1
  493. package/dist/web/standalone/node_modules/next/dist/shared/lib/turbopack/compilation-events.js +47 -10
  494. package/dist/web/standalone/node_modules/next/dist/shared/lib/turbopack/manifest-loader.js +90 -116
  495. package/dist/web/standalone/node_modules/next/dist/shared/lib/turbopack/utils.js +14 -26
  496. package/dist/web/standalone/node_modules/next/dist/shared/lib/utils/reflect-utils.js +69 -0
  497. package/dist/web/standalone/node_modules/next/dist/shared/lib/utils.js +2 -2
  498. package/dist/web/standalone/node_modules/next/dist/telemetry/anonymous-meta.js +1 -1
  499. package/dist/web/standalone/node_modules/next/dist/telemetry/events/swc-load-failure.js +1 -1
  500. package/dist/web/standalone/node_modules/next/dist/telemetry/events/version.js +2 -2
  501. package/dist/web/standalone/node_modules/next/dist/trace/index.js +4 -0
  502. package/dist/web/standalone/node_modules/next/dist/trace/report/to-json-build.js +11 -108
  503. package/dist/web/standalone/node_modules/next/dist/trace/report/to-json.js +52 -38
  504. package/dist/web/standalone/node_modules/next/dist/trace/trace.js +15 -1
  505. package/dist/web/standalone/node_modules/next/package.json +21 -23
  506. package/dist/web/standalone/node_modules/react/cjs/react.development.js +1284 -0
  507. package/dist/web/standalone/package.json +2 -2
  508. package/dist/web/standalone/server.js +1 -1
  509. package/package.json +1 -1
  510. package/packages/pi-ai/dist/utils/event-stream.d.ts +2 -0
  511. package/packages/pi-ai/dist/utils/event-stream.d.ts.map +1 -1
  512. package/packages/pi-ai/dist/utils/event-stream.js +4 -0
  513. package/packages/pi-ai/dist/utils/event-stream.js.map +1 -1
  514. package/packages/pi-ai/src/utils/event-stream.ts +5 -0
  515. package/src/resources/GSD-WORKFLOW.md +3 -1
  516. package/src/resources/extensions/get-secrets-from-user.ts +20 -2
  517. package/src/resources/extensions/gsd/auto-post-unit.ts +30 -1
  518. package/src/resources/extensions/gsd/bootstrap/system-context.ts +18 -4
  519. package/src/resources/extensions/gsd/codebase-generator.ts +261 -16
  520. package/src/resources/extensions/gsd/commands/catalog.ts +4 -3
  521. package/src/resources/extensions/gsd/commands/dispatcher.ts +1 -2
  522. package/src/resources/extensions/gsd/commands/handlers/core.ts +108 -2
  523. package/src/resources/extensions/gsd/commands-bootstrap.ts +10 -0
  524. package/src/resources/extensions/gsd/commands-codebase.ts +4 -3
  525. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +38 -7
  526. package/src/resources/extensions/gsd/prompts/complete-slice.md +3 -3
  527. package/src/resources/extensions/gsd/prompts/execute-task.md +3 -3
  528. package/src/resources/extensions/gsd/prompts/system.md +3 -0
  529. package/src/resources/extensions/gsd/prompts/validate-milestone.md +7 -5
  530. package/src/resources/extensions/gsd/tests/codebase-generator.test.ts +68 -0
  531. package/src/resources/extensions/gsd/tests/commands-workflow-custom.test.ts +12 -0
  532. package/src/resources/extensions/gsd/tests/core-overlay-fallback.test.ts +32 -0
  533. package/src/resources/extensions/gsd/tests/preferences.test.ts +17 -0
  534. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +25 -3
  535. package/src/resources/extensions/gsd/tests/update-command.test.ts +19 -0
  536. package/src/resources/extensions/gsd/workflow-reconcile.ts +0 -5
  537. package/src/resources/extensions/gsd/worktree-manager.ts +6 -2
  538. package/dist/web/standalone/.next/server/chunks/7471.js +0 -13
  539. package/dist/web/standalone/.next/static/FRT6f5ou3wPxpZ7ojoB7E/_buildManifest.js +0 -1
  540. package/dist/web/standalone/.next/static/chunks/2008.817d0885545aaea9.js +0 -20
  541. package/dist/web/standalone/.next/static/chunks/3794-337d1ca25ad99a89.js +0 -2
  542. package/dist/web/standalone/.next/static/chunks/4bd1b696-e5d7c65570c947b7.js +0 -1
  543. package/dist/web/standalone/.next/static/chunks/framework-0675a4b5b92df616.js +0 -1
  544. package/dist/web/standalone/.next/static/chunks/main-cb72b7c5b8014fa5.js +0 -5
  545. package/dist/web/standalone/node_modules/next/dist/client/components/router-reducer/handle-mutable.js +0 -66
  546. package/dist/web/standalone/node_modules/next/dist/compiled/babel/code-frame.js +0 -1
  547. package/dist/web/standalone/node_modules/next/dist/compiled/babel-code-frame/index.js +0 -1
  548. package/dist/web/standalone/node_modules/next/dist/compiled/babel-code-frame/package.json +0 -1
  549. package/dist/web/standalone/node_modules/next/dist/compiled/tar/index.js +0 -1
  550. package/dist/web/standalone/node_modules/next/dist/server/app-render/staged-validation.js +0 -32
  551. package/dist/web/standalone/node_modules/next/dist/server/lib/router-utils/block-cross-site.js +0 -76
  552. package/dist/web/standalone/node_modules/next/dist/shared/lib/segment-cache/output-export-prefetch-encoding.js +0 -52
  553. package/dist/web/standalone/node_modules/typescript/lib/typescript.js +0 -198668
  554. package/dist/web/standalone/node_modules/typescript/package.json +0 -120
  555. /package/dist/web/standalone/.next/static/{FRT6f5ou3wPxpZ7ojoB7E → NllX5BEOLdTXS9ypf1i3i}/_ssgManifest.js +0 -0
@@ -15,7 +15,7 @@ export interface GsdCommandDefinition {
15
15
  type CompletionMap = Record<string, readonly GsdCommandDefinition[]>;
16
16
 
17
17
  export const GSD_COMMAND_DESCRIPTION =
18
- "GSD — Get Shit Done: /gsd help|start|templates|next|auto|stop|pause|status|widget|visualize|queue|quick|discuss|capture|triage|dispatch|history|undo|undo-task|reset-slice|rate|skip|export|cleanup|mode|prefs|config|keys|hooks|run-hook|skill-health|doctor|logs|forensics|changelog|migrate|remote|steer|knowledge|new-milestone|parallel|cmux|park|unpark|init|setup|inspect|extensions|update|fast|mcp|rethink|codebase|notifications";
18
+ "GSD — Get Shit Done: /gsd help|start|templates|next|auto|stop|pause|status|widget|visualize|queue|quick|discuss|capture|triage|dispatch|history|undo|undo-task|reset-slice|rate|skip|export|cleanup|model|mode|prefs|config|keys|hooks|run-hook|skill-health|doctor|logs|forensics|changelog|migrate|remote|steer|knowledge|new-milestone|parallel|cmux|park|unpark|init|setup|inspect|extensions|update|fast|mcp|rethink|codebase|notifications";
19
19
 
20
20
  export const TOP_LEVEL_SUBCOMMANDS: readonly GsdCommandDefinition[] = [
21
21
  { cmd: "help", desc: "Categorized command reference with descriptions" },
@@ -41,6 +41,7 @@ export const TOP_LEVEL_SUBCOMMANDS: readonly GsdCommandDefinition[] = [
41
41
  { cmd: "skip", desc: "Prevent a unit from auto-mode dispatch" },
42
42
  { cmd: "export", desc: "Export milestone/slice results" },
43
43
  { cmd: "cleanup", desc: "Remove merged branches or snapshots" },
44
+ { cmd: "model", desc: "Switch the active session model or open a picker" },
44
45
  { cmd: "mode", desc: "Switch workflow mode (solo/team)" },
45
46
  { cmd: "prefs", desc: "Manage preferences (model selection, timeouts, etc.)" },
46
47
  { cmd: "config", desc: "Set API keys for external tools" },
@@ -72,7 +73,7 @@ export const TOP_LEVEL_SUBCOMMANDS: readonly GsdCommandDefinition[] = [
72
73
  { cmd: "mcp", desc: "MCP server status and connectivity check (status, check <server>)" },
73
74
  { cmd: "rethink", desc: "Conversational project reorganization — reorder, park, discard, add milestones" },
74
75
  { cmd: "workflow", desc: "Custom workflow lifecycle (new, run, list, validate, pause, resume)" },
75
- { cmd: "codebase", desc: "Generate and manage codebase map (.gsd/CODEBASE.md)" },
76
+ { cmd: "codebase", desc: "Generate, refresh, and inspect the codebase map cache (.gsd/CODEBASE.md)" },
76
77
  ];
77
78
 
78
79
  const NESTED_COMPLETIONS: CompletionMap = {
@@ -236,7 +237,7 @@ const NESTED_COMPLETIONS: CompletionMap = {
236
237
  { cmd: "generate", desc: "Generate or regenerate CODEBASE.md" },
237
238
  { cmd: "generate --max-files", desc: "Generate with custom file limit (default: 500)" },
238
239
  { cmd: "generate --collapse-threshold", desc: "Generate with custom collapse threshold (default: 20)" },
239
- { cmd: "update", desc: "Incremental update (preserves descriptions)" },
240
+ { cmd: "update", desc: "Refresh the CODEBASE.md cache immediately (preserves descriptions)" },
240
241
  { cmd: "update --max-files", desc: "Update with custom file limit" },
241
242
  { cmd: "update --collapse-threshold", desc: "Update with custom collapse threshold" },
242
243
  { cmd: "stats", desc: "Show file count, description coverage, and generation time" },
@@ -14,7 +14,7 @@ export async function handleGSDCommand(
14
14
  const trimmed = (typeof args === "string" ? args : "").trim();
15
15
 
16
16
  const handlers = [
17
- () => handleCoreCommand(trimmed, ctx),
17
+ () => handleCoreCommand(trimmed, ctx, pi),
18
18
  () => handleAutoCommand(trimmed, ctx, pi),
19
19
  () => handleParallelCommand(trimmed, ctx, pi),
20
20
  () => handleWorkflowCommand(trimmed, ctx, pi),
@@ -29,4 +29,3 @@ export async function handleGSDCommand(
29
29
 
30
30
  ctx.ui.notify(`Unknown: /gsd ${trimmed}. Run /gsd help for available commands.`, "warning");
31
31
  }
32
-
@@ -1,4 +1,5 @@
1
- import type { ExtensionCommandContext, ExtensionContext } from "@gsd/pi-coding-agent";
1
+ import type { ExtensionAPI, ExtensionCommandContext, ExtensionContext } from "@gsd/pi-coding-agent";
2
+ import type { Model } from "@gsd/pi-ai";
2
3
  import type { GSDState } from "../../types.js";
3
4
 
4
5
  import { computeProgressScore, formatProgressLine } from "../../progress-score.js";
@@ -44,10 +45,12 @@ export function showHelp(ctx: ExtensionCommandContext): void {
44
45
  "",
45
46
  "PROJECT KNOWLEDGE",
46
47
  " /gsd knowledge <type> <text> Add rule, pattern, or lesson to KNOWLEDGE.md",
48
+ " /gsd codebase [generate|update|stats] Manage the CODEBASE.md cache used in prompt context",
47
49
  "",
48
50
  "SETUP & CONFIGURATION",
49
51
  " /gsd init Project init wizard — detect, configure, bootstrap .gsd/",
50
52
  " /gsd setup Global setup status [llm|search|remote|keys|prefs]",
53
+ " /gsd model Switch active session model [provider/model|model-id]",
51
54
  " /gsd mode Set workflow mode (solo/team) [global|project]",
52
55
  " /gsd prefs Manage preferences [global|project|status|wizard|setup|import-claude]",
53
56
  " /gsd cmux Manage cmux integration [status|on|off|notifications|sidebar|splits|browser]",
@@ -179,7 +182,106 @@ export async function handleSetup(args: string, ctx: ExtensionCommandContext): P
179
182
  );
180
183
  }
181
184
 
182
- export async function handleCoreCommand(trimmed: string, ctx: ExtensionCommandContext): Promise<boolean> {
185
+ function sortModelsForSelection(models: Model<any>[], currentModel: Model<any> | undefined): Model<any>[] {
186
+ return [...models].sort((a, b) => {
187
+ const aCurrent = currentModel && a.provider === currentModel.provider && a.id === currentModel.id;
188
+ const bCurrent = currentModel && b.provider === currentModel.provider && b.id === currentModel.id;
189
+ if (aCurrent && !bCurrent) return -1;
190
+ if (!aCurrent && bCurrent) return 1;
191
+ const providerCmp = a.provider.localeCompare(b.provider);
192
+ if (providerCmp !== 0) return providerCmp;
193
+ return a.id.localeCompare(b.id);
194
+ });
195
+ }
196
+
197
+ async function resolveRequestedModel(
198
+ query: string,
199
+ ctx: ExtensionCommandContext,
200
+ ): Promise<Model<any> | undefined> {
201
+ const { resolveModelId } = await import("../../auto-model-selection.js");
202
+ const models = ctx.modelRegistry.getAvailable();
203
+ const exact = resolveModelId(query, models, ctx.model?.provider);
204
+ if (exact) return exact;
205
+
206
+ const lowerQuery = query.toLowerCase();
207
+ const partialMatches = models.filter((model) =>
208
+ model.id.toLowerCase().includes(lowerQuery)
209
+ || `${model.provider}/${model.id}`.toLowerCase().includes(lowerQuery),
210
+ );
211
+
212
+ if (partialMatches.length === 1) return partialMatches[0];
213
+ if (partialMatches.length === 0 || !ctx.hasUI) return undefined;
214
+
215
+ const sorted = sortModelsForSelection(partialMatches, ctx.model);
216
+ const optionToModel = new Map<string, Model<any>>();
217
+ const options = sorted.map((model) => {
218
+ const label = `${model.provider}/${model.id}`;
219
+ optionToModel.set(label, model);
220
+ return label;
221
+ });
222
+ options.push("(cancel)");
223
+
224
+ const choice = await ctx.ui.select(`Multiple models match "${query}" — choose one:`, options);
225
+ if (!choice || typeof choice !== "string" || choice === "(cancel)") return undefined;
226
+ return optionToModel.get(choice);
227
+ }
228
+
229
+ async function handleModel(trimmedArgs: string, ctx: ExtensionCommandContext, pi: ExtensionAPI | undefined): Promise<void> {
230
+ const availableModels = ctx.modelRegistry.getAvailable();
231
+ if (availableModels.length === 0) {
232
+ ctx.ui.notify("No available models found. Check provider auth and model discovery.", "warning");
233
+ return;
234
+ }
235
+ if (!pi) {
236
+ ctx.ui.notify("Model switching is unavailable in this context.", "warning");
237
+ return;
238
+ }
239
+
240
+ const trimmed = trimmedArgs.trim();
241
+ let targetModel: Model<any> | undefined;
242
+
243
+ if (!trimmed) {
244
+ if (!ctx.hasUI) {
245
+ const current = ctx.model ? `${ctx.model.provider}/${ctx.model.id}` : "(none)";
246
+ ctx.ui.notify(`Current model: ${current}\nUsage: /gsd model <provider/model|model-id>`, "info");
247
+ return;
248
+ }
249
+
250
+ const optionToModel = new Map<string, Model<any>>();
251
+ const options = sortModelsForSelection(availableModels, ctx.model).map((model) => {
252
+ const isCurrent = ctx.model && model.provider === ctx.model.provider && model.id === ctx.model.id;
253
+ const label = `${isCurrent ? "* " : ""}${model.provider}/${model.id}`;
254
+ optionToModel.set(label, model);
255
+ return label;
256
+ });
257
+ options.push("(cancel)");
258
+
259
+ const choice = await ctx.ui.select("Select session model:", options);
260
+ if (!choice || typeof choice !== "string" || choice === "(cancel)") return;
261
+ targetModel = optionToModel.get(choice);
262
+ } else {
263
+ targetModel = await resolveRequestedModel(trimmed, ctx);
264
+ }
265
+
266
+ if (!targetModel) {
267
+ ctx.ui.notify(`Model "${trimmed}" not found. Use /gsd model with an exact provider/model or a unique model ID.`, "warning");
268
+ return;
269
+ }
270
+
271
+ const ok = await pi.setModel(targetModel);
272
+ if (!ok) {
273
+ ctx.ui.notify(`No API key for ${targetModel.provider}/${targetModel.id}`, "warning");
274
+ return;
275
+ }
276
+
277
+ ctx.ui.notify(`Model: ${targetModel.provider}/${targetModel.id}`, "info");
278
+ }
279
+
280
+ export async function handleCoreCommand(
281
+ trimmed: string,
282
+ ctx: ExtensionCommandContext,
283
+ pi?: ExtensionAPI,
284
+ ): Promise<boolean> {
183
285
  if (trimmed === "help" || trimmed === "h" || trimmed === "?") {
184
286
  showHelp(ctx);
185
287
  return true;
@@ -203,6 +305,10 @@ export async function handleCoreCommand(trimmed: string, ctx: ExtensionCommandCo
203
305
  ctx.ui.notify(`Widget: ${getWidgetMode()}`, "info");
204
306
  return true;
205
307
  }
308
+ if (trimmed === "model" || trimmed.startsWith("model ")) {
309
+ await handleModel(trimmed.replace(/^model\s*/, "").trim(), ctx, pi);
310
+ return true;
311
+ }
206
312
  if (trimmed === "mode" || trimmed.startsWith("mode ")) {
207
313
  const modeArgs = trimmed.replace(/^mode\s*/, "").trim();
208
314
  const scope = modeArgs === "project" ? "project" : "global";
@@ -45,6 +45,7 @@ const TOP_LEVEL_SUBCOMMANDS = [
45
45
  { cmd: "start", desc: "Start a workflow template" },
46
46
  { cmd: "templates", desc: "List available workflow templates" },
47
47
  { cmd: "extensions", desc: "Manage extensions" },
48
+ { cmd: "codebase", desc: "Generate, refresh, and inspect the codebase map cache" },
48
49
  ] as const;
49
50
 
50
51
  function filterStartsWith(
@@ -218,6 +219,15 @@ function getGsdArgumentCompletions(prefix: string) {
218
219
  ], "extensions");
219
220
  }
220
221
 
222
+ if (parts[0] === "codebase" && parts.length <= 2) {
223
+ return filterStartsWith(partial, [
224
+ { cmd: "generate", desc: "Generate or regenerate CODEBASE.md" },
225
+ { cmd: "update", desc: "Refresh the CODEBASE.md cache immediately" },
226
+ { cmd: "stats", desc: "Show codebase-map coverage and generation time" },
227
+ { cmd: "help", desc: "Show usage and subcommands" },
228
+ ], "codebase");
229
+ }
230
+
221
231
  if (parts[0] === "doctor" && parts.length <= 2) {
222
232
  return filterStartsWith(partial, [
223
233
  { cmd: "fix", desc: "Auto-fix detected issues" },
@@ -20,10 +20,11 @@ import type { CodebaseMapOptions } from "./codebase-generator.js";
20
20
  const USAGE =
21
21
  "Usage: /gsd codebase [generate|update|stats]\n\n" +
22
22
  " generate [--max-files N] [--collapse-threshold N] — Generate or regenerate CODEBASE.md\n" +
23
- " update [--max-files N] [--collapse-threshold N] — Incremental update (preserves descriptions)\n" +
23
+ " update [--max-files N] [--collapse-threshold N] — Refresh the CODEBASE.md cache immediately\n" +
24
24
  " stats — Show file count, coverage, and generation time\n" +
25
25
  " help — Show this help\n\n" +
26
- "With no subcommand, shows stats if a map exists or help if not.\n\n" +
26
+ "With no subcommand, shows stats if a map exists or help if not.\n" +
27
+ "GSD also refreshes CODEBASE.md automatically before prompt injection and after completed units when tracked files change.\n\n" +
27
28
  "Configure defaults via preferences.md:\n" +
28
29
  " codebase:\n" +
29
30
  " exclude_patterns: [\"docs/\", \"fixtures/\"]\n" +
@@ -141,7 +142,7 @@ function showStats(basePath: string, ctx: ExtensionCommandContext): void {
141
142
  ` Undescribed: ${stats.undescribedCount}\n` +
142
143
  ` Generated: ${stats.generatedAt ?? "unknown"}\n\n` +
143
144
  (stats.undescribedCount > 0
144
- ? `Tip: Run /gsd codebase update to refresh after file changes.`
145
+ ? `Tip: Auto-refresh keeps the cache current, but /gsd codebase update forces an immediate refresh.`
145
146
  : `Coverage is complete.`),
146
147
  "info",
147
148
  );
@@ -165,10 +165,10 @@ export function buildCategorySummaries(prefs: Record<string, unknown>): Record<s
165
165
  const modeSummary = mode ?? "(not set)";
166
166
 
167
167
  // Models
168
- const models = prefs.models as Record<string, string> | undefined;
168
+ const models = prefs.models as Record<string, unknown> | undefined;
169
169
  let modelsSummary = "(not configured)";
170
170
  if (models && Object.keys(models).length > 0) {
171
- const parts = Object.entries(models).map(([phase, model]) => `${phase}: ${model}`);
171
+ const parts = Object.entries(models).map(([phase, model]) => `${phase}: ${formatConfiguredModel(model)}`);
172
172
  modelsSummary = parts.join(", ");
173
173
  }
174
174
 
@@ -255,9 +255,38 @@ export function buildCategorySummaries(prefs: Record<string, unknown>): Record<s
255
255
 
256
256
  // ─── Category configuration functions ────────────────────────────────────────
257
257
 
258
+ export function formatConfiguredModel(config: unknown): string {
259
+ if (typeof config === "string") return config;
260
+ if (!config || typeof config !== "object") return "(invalid)";
261
+ const maybeConfig = config as { model?: unknown; provider?: unknown };
262
+ if (typeof maybeConfig.model !== "string" || maybeConfig.model.trim() === "") return "(invalid)";
263
+ if (typeof maybeConfig.provider === "string" && maybeConfig.provider && !maybeConfig.model.includes("/")) {
264
+ return `${maybeConfig.provider}/${maybeConfig.model}`;
265
+ }
266
+ return maybeConfig.model;
267
+ }
268
+
269
+ export function toPersistedModelId(provider: string, modelId: string): string {
270
+ if (!provider.trim()) return modelId;
271
+ const normalizedProvider = provider.trim();
272
+ const normalizedModelId = modelId.trim();
273
+ return normalizedModelId.startsWith(`${normalizedProvider}/`)
274
+ ? normalizedModelId
275
+ : `${normalizedProvider}/${normalizedModelId}`;
276
+ }
277
+
258
278
  async function configureModels(ctx: ExtensionCommandContext, prefs: Record<string, unknown>): Promise<void> {
259
- const modelPhases = ["research", "planning", "execution", "completion"] as const;
260
- const models: Record<string, string> = (prefs.models as Record<string, string>) ?? {};
279
+ const modelPhases = [
280
+ "research",
281
+ "planning",
282
+ "discuss",
283
+ "execution",
284
+ "execution_simple",
285
+ "completion",
286
+ "validation",
287
+ "subagent",
288
+ ] as const;
289
+ const models: Record<string, unknown> = (prefs.models as Record<string, unknown>) ?? {};
261
290
 
262
291
  const availableModels = ctx.modelRegistry.getAvailable();
263
292
  if (availableModels.length > 0) {
@@ -292,7 +321,7 @@ async function configureModels(ctx: ExtensionCommandContext, prefs: Record<strin
292
321
  providerOptions.push("(keep current)", "(clear)", "(type manually)");
293
322
 
294
323
  for (const phase of modelPhases) {
295
- const current = models[phase] ?? "";
324
+ const current = formatConfiguredModel(models[phase]);
296
325
  const phaseLabel = `Model for ${phase} phase${current ? ` (current: ${current})` : ""}`;
297
326
 
298
327
  // Step 1: pick provider
@@ -329,13 +358,13 @@ async function configureModels(ctx: ExtensionCommandContext, prefs: Record<strin
329
358
  if (modelChoice === "(clear)") {
330
359
  delete models[phase];
331
360
  } else {
332
- models[phase] = modelChoice;
361
+ models[phase] = toPersistedModelId(providerName, modelChoice);
333
362
  }
334
363
  }
335
364
  }
336
365
  } else {
337
366
  for (const phase of modelPhases) {
338
- const current = models[phase] ?? "";
367
+ const current = formatConfiguredModel(models[phase]);
339
368
  const input = await ctx.ui.input(
340
369
  `Model for ${phase} phase${current ? ` (current: ${current})` : ""}:`,
341
370
  current || "e.g. claude-sonnet-4-20250514",
@@ -352,6 +381,8 @@ async function configureModels(ctx: ExtensionCommandContext, prefs: Record<strin
352
381
  }
353
382
  if (Object.keys(models).length > 0) {
354
383
  prefs.models = models;
384
+ } else {
385
+ delete prefs.models;
355
386
  }
356
387
  }
357
388
 
@@ -25,11 +25,11 @@ Then:
25
25
  4. If the slice plan includes observability/diagnostic surfaces, confirm they work. Skip this for simple slices that don't have observability sections.
26
26
  5. If the slice involved runtime behavior, fill the **Operational Readiness** section (Q8) in the slice summary: health signal, failure signal, recovery procedure, and monitoring gaps. Omit entirely for simple slices with no runtime concerns.
27
27
  6. If this slice produced evidence that a requirement changed status (Active → Validated, Active → Deferred, etc.), call `gsd_requirement_update` with the requirement ID, updated `status`, and `validation` evidence. Do NOT write `.gsd/REQUIREMENTS.md` directly — the engine renders it from the database.
28
- 7. Write `{{sliceSummaryPath}}` (compress all task summaries).
29
- 8. Write `{{sliceUatPath}}` — a concrete UAT script with real test cases derived from the slice plan and task summaries. Include preconditions, numbered steps with expected outcomes, and edge cases. This must NOT be a placeholder or generic template — tailor every test case to what this slice actually built.
28
+ 7. Prepare the slice completion content you will pass to `gsd_complete_slice` using the camelCase fields `milestoneId`, `sliceId`, `sliceTitle`, `oneLiner`, `narrative`, `verification`, and `uatContent`. Do **not** manually write `{{sliceSummaryPath}}`. Do **not** manually write `{{sliceUatPath}}` the DB-backed tool is the canonical write path for both artifacts.
29
+ 8. Draft the UAT content you will pass as `uatContent` — a concrete UAT script with real test cases derived from the slice plan and task summaries. Include preconditions, numbered steps with expected outcomes, and edge cases. This must NOT be a placeholder or generic template — tailor every test case to what this slice actually built.
30
30
  9. Review task summaries for `key_decisions`. Append any significant decisions to `.gsd/DECISIONS.md` if missing.
31
31
  10. Review task summaries for patterns, gotchas, or non-obvious lessons learned. If any would save future agents from repeating investigation or hitting the same issues, append them to `.gsd/KNOWLEDGE.md`. Only add entries that are genuinely useful — don't pad with obvious observations.
32
- 11. Call `gsd_complete_slice` with milestoneId, sliceId, the slice summary, and the UAT result. Do NOT manually mark the roadmap checkbox — the tool writes to the DB and renders the ROADMAP.md projection automatically.
32
+ 11. Call `gsd_complete_slice` with the camelCase fields `milestoneId`, `sliceId`, `sliceTitle`, `oneLiner`, `narrative`, `verification`, and `uatContent`, plus any optional enrichment fields you have. Do NOT manually mark the roadmap checkbox — the tool writes to the DB, renders `{{sliceSummaryPath}}` and `{{sliceUatPath}}`, and updates the ROADMAP.md projection automatically.
33
33
  12. Do not run git commands — the system commits your changes and handles any merge after this unit succeeds.
34
34
  13. Update `.gsd/PROJECT.md` if it exists — refresh current state if needed: use the `write` tool with `path: ".gsd/PROJECT.md"` and `content` containing the full updated document reflecting current project state. Do NOT use the `edit` tool for this — PROJECT.md is a full-document refresh.
35
35
 
@@ -69,14 +69,14 @@ Then:
69
69
  16. If you made an architectural, pattern, library, or observability decision during this task that downstream work should know about, append it to `.gsd/DECISIONS.md` (read the template at `~/.gsd/agent/extensions/gsd/templates/decisions.md` if the file doesn't exist yet). Not every task produces decisions — only append when a meaningful choice was made.
70
70
  17. If you discover a non-obvious rule, recurring gotcha, or useful pattern during execution, append it to `.gsd/KNOWLEDGE.md`. Only add entries that would save future agents from repeating your investigation. Don't add obvious things.
71
71
  18. Read the template at `~/.gsd/agent/extensions/gsd/templates/task-summary.md`
72
- 19. Write `{{taskSummaryPath}}`
73
- 20. Call `gsd_complete_task` with milestoneId, sliceId, taskId, and a summary of what was accomplished. This is your final required step — do NOT manually edit PLAN.md checkboxes. The tool marks the task complete, updates the DB, and renders PLAN.md automatically.
72
+ 19. Use that template to prepare the completion content you will pass to `gsd_complete_task` using the camelCase fields `milestoneId`, `sliceId`, `taskId`, `oneLiner`, `narrative`, `verification`, and `verificationEvidence`. Do **not** manually write `{{taskSummaryPath}}` — the DB-backed tool is the canonical write path and renders the summary file for you.
73
+ 20. Call `gsd_complete_task` with milestoneId, sliceId, taskId, and the completion fields derived from the template. This is your final required step — do NOT manually edit PLAN.md checkboxes. The tool marks the task complete, updates the DB, renders `{{taskSummaryPath}}`, and updates PLAN.md automatically.
74
74
  21. Do not run git commands — the system reads your task summary after completion and creates a meaningful commit from it (type inferred from title, message from your one-liner, key files from frontmatter). Write a clear, specific one-liner in the summary — it becomes the commit message.
75
75
 
76
76
  All work stays in your working directory: `{{workingDirectory}}`.
77
77
 
78
78
  **Autonomous execution:** Do not call `ask_user_questions` or `secure_env_collect`. You are running in auto-mode — there is no human available to answer questions. Make reasonable assumptions and document them in the task summary. If a decision genuinely requires human input, note it in the summary and proceed with the best available option.
79
79
 
80
- **You MUST call `gsd_complete_task` AND write `{{taskSummaryPath}}` before finishing.**
80
+ **You MUST call `gsd_complete_task` before finishing. Do not manually write `{{taskSummaryPath}}`.**
81
81
 
82
82
  When done, say: "Task {{taskId}} complete."
@@ -62,6 +62,7 @@ Titles live inside file content (headings, frontmatter), not in file or director
62
62
  REQUIREMENTS.md (requirement contract - tracks active/validated/deferred/out-of-scope)
63
63
  DECISIONS.md (append-only register of architectural and pattern decisions)
64
64
  KNOWLEDGE.md (append-only register of project-specific rules, patterns, and lessons learned)
65
+ CODEBASE.md (generated codebase map cache — auto-refreshed when tracked files change)
65
66
  OVERRIDES.md (user-issued overrides that supersede plan content via /gsd steer)
66
67
  QUEUE.md (append-only log of queued milestones via /gsd queue)
67
68
  STATE.md
@@ -104,6 +105,7 @@ In all modes, slices commit sequentially on the active branch; there are no per-
104
105
  - **REQUIREMENTS.md** tracks the requirement contract — requirements move between Active, Validated, Deferred, Blocked, and Out of Scope as slices prove or invalidate them. Update at slice completion when evidence supports a status change.
105
106
  - **DECISIONS.md** is an append-only register of architectural and pattern decisions - read it during planning/research, append to it during execution when a meaningful decision is made
106
107
  - **KNOWLEDGE.md** is an append-only register of project-specific rules, patterns, and lessons learned. Read it at the start of every unit. Append to it when you discover a recurring issue, a non-obvious pattern, or a rule that future agents should follow.
108
+ - **CODEBASE.md** is a generated structural cache of the tracked repository. GSD auto-refreshes it when tracked files change and injects it into system context when available. Use `/gsd codebase update` only when you need to force an immediate refresh.
107
109
  - **CONTEXT.md** files (milestone or slice level) capture the brief — scope, goals, constraints, and key decisions from discussion. When present, they are the authoritative source for what a milestone or slice is trying to achieve. Read them before planning or executing.
108
110
  - **Milestones** are major project phases (M001, M002, ...)
109
111
  - **Slices** are demoable vertical increments (S01, S02, ...) ordered by risk. After each slice completes, the roadmap is reassessed before the next slice begins.
@@ -131,6 +133,7 @@ Templates showing the expected format for each artifact type are in:
131
133
  - `/gsd status` - progress dashboard overlay
132
134
  - `/gsd queue` - queue future milestones (safe while auto-mode is running)
133
135
  - `/gsd quick <task>` - quick task with GSD guarantees (atomic commits, state tracking) but no milestone ceremony
136
+ - `/gsd codebase [generate|update|stats]` - manage the `.gsd/CODEBASE.md` cache used for prompt context
134
137
  - `{{shortcutDashboard}}` - toggle dashboard overlay
135
138
  - `{{shortcutShell}}` - show shell processes
136
139
 
@@ -40,9 +40,9 @@ After all reviewers complete, aggregate their verdicts:
40
40
  - If any reviewer says NEEDS-ATTENTION → overall verdict: `needs-attention`
41
41
  - If any reviewer says FAIL → overall verdict: `needs-remediation`
42
42
 
43
- ### Step 3 — Write VALIDATION File
43
+ ### Step 3 — Persist Validation
44
44
 
45
- Write to `{{validationPath}}`:
45
+ Prepare the validation content you will pass to `gsd_validate_milestone`. Do **not** manually write `{{validationPath}}` — the DB-backed tool is the canonical write path and renders the validation file for you.
46
46
 
47
47
  ```markdown
48
48
  ---
@@ -69,13 +69,15 @@ reviewers: 3
69
69
  <if verdict is not pass: specific actions required>
70
70
  ```
71
71
 
72
+ Call `gsd_validate_milestone` with the camelCase fields `milestoneId`, `verdict`, `remediationRound`, `successCriteriaChecklist`, `sliceDeliveryAudit`, `crossSliceIntegration`, `requirementCoverage`, `verdictRationale`, and `remediationPlan` when needed. If you include verification-class analysis, pass it in `verificationClasses`.
73
+
72
74
  **DB access safety:** Do NOT query `.gsd/gsd.db` directly via `sqlite3` or `node -e require('better-sqlite3')` — the engine owns the WAL connection. Use `gsd_milestone_status` to read milestone and slice state. All data you need is already inlined in the context above or accessible via the `gsd_*` tools. Direct DB access corrupts the WAL and bypasses tool-level validation.
73
75
 
74
76
  If verdict is `needs-remediation`:
75
- - Add new slices to `{{roadmapPath}}` with unchecked `[ ]` status
76
- - These slices will be planned and executed before validation re-runs
77
+ - Use `gsd_reassess_roadmap` to add the remediation slices instead of editing `{{roadmapPath}}` manually
78
+ - Those slices will be planned and executed before validation re-runs
77
79
 
78
- **You MUST write `{{validationPath}}` before finishing.**
80
+ **You MUST call `gsd_validate_milestone` before finishing. Do not manually write `{{validationPath}}`.**
79
81
 
80
82
  **File system safety:** When scanning milestone directories for evidence, use `ls` or `find` to list directory contents first — never pass a directory path (e.g. `tasks/`, `slices/`) directly to the `read` tool. The `read` tool only accepts file paths, not directories.
81
83
 
@@ -8,11 +8,13 @@ import { execSync } from "node:child_process";
8
8
 
9
9
  import {
10
10
  parseCodebaseMap,
11
+ parseCodebaseMapMetadata,
11
12
  generateCodebaseMap,
12
13
  updateCodebaseMap,
13
14
  writeCodebaseMap,
14
15
  readCodebaseMap,
15
16
  getCodebaseMapStats,
17
+ ensureCodebaseMapFresh,
16
18
  } from "../codebase-generator.ts";
17
19
 
18
20
  // ─── Helpers ──────────────────────────────────────────────────────────────
@@ -212,6 +214,24 @@ test("generateCodebaseMap: preserves existing descriptions", () => {
212
214
  }
213
215
  });
214
216
 
217
+ test("generateCodebaseMap: writes freshness metadata comment", () => {
218
+ const base = makeTmpRepo();
219
+ try {
220
+ addFile(base, "src/main.ts");
221
+
222
+ const result = generateCodebaseMap(base);
223
+ const metadata = parseCodebaseMapMetadata(result.content);
224
+
225
+ assert.ok(metadata, "metadata comment should be present");
226
+ assert.equal(metadata?.fileCount, 1);
227
+ assert.equal(metadata?.truncated, false);
228
+ assert.equal(typeof metadata?.fingerprint, "string");
229
+ assert.ok(metadata?.generatedAt?.endsWith("Z"));
230
+ } finally {
231
+ cleanup(base);
232
+ }
233
+ });
234
+
215
235
  test("generateCodebaseMap: collapses large directories", () => {
216
236
  const base = makeTmpRepo();
217
237
  try {
@@ -571,3 +591,51 @@ test("updateCodebaseMap: respects excludePatterns option", () => {
571
591
  cleanup(base);
572
592
  }
573
593
  });
594
+
595
+ test("ensureCodebaseMapFresh: generates CODEBASE.md when missing", () => {
596
+ const base = makeTmpRepo();
597
+ try {
598
+ addFile(base, "src/main.ts");
599
+
600
+ const result = ensureCodebaseMapFresh(base, undefined, { ttlMs: 0, force: true });
601
+ const written = readCodebaseMap(base);
602
+
603
+ assert.equal(result.status, "generated");
604
+ assert.ok(written?.includes("`src/main.ts`"));
605
+ } finally {
606
+ cleanup(base);
607
+ }
608
+ });
609
+
610
+ test("ensureCodebaseMapFresh: updates CODEBASE.md when tracked files change", () => {
611
+ const base = makeTmpRepo();
612
+ try {
613
+ addFile(base, "src/main.ts");
614
+ const initial = ensureCodebaseMapFresh(base, undefined, { ttlMs: 0, force: true });
615
+ assert.equal(initial.status, "generated");
616
+
617
+ addFile(base, "src/new.ts");
618
+ const refreshed = ensureCodebaseMapFresh(base, undefined, { ttlMs: 0, force: true });
619
+ const written = readCodebaseMap(base);
620
+
621
+ assert.equal(refreshed.status, "updated");
622
+ assert.equal(refreshed.reason, "files-changed");
623
+ assert.ok(written?.includes("`src/new.ts`"));
624
+ } finally {
625
+ cleanup(base);
626
+ }
627
+ });
628
+
629
+ test("ensureCodebaseMapFresh: returns fresh when metadata matches repository state", () => {
630
+ const base = makeTmpRepo();
631
+ try {
632
+ addFile(base, "src/main.ts");
633
+ ensureCodebaseMapFresh(base, undefined, { ttlMs: 0, force: true });
634
+
635
+ const refreshed = ensureCodebaseMapFresh(base, undefined, { ttlMs: 0, force: true });
636
+ assert.equal(refreshed.status, "fresh");
637
+ assert.equal(refreshed.fileCount, 1);
638
+ } finally {
639
+ cleanup(base);
640
+ }
641
+ });
@@ -100,6 +100,18 @@ steps: []
100
100
  // ─── Catalog Registration ────────────────────────────────────────────────
101
101
 
102
102
  describe("workflow catalog registration", () => {
103
+ it("model appears in TOP_LEVEL_SUBCOMMANDS", () => {
104
+ const entry = TOP_LEVEL_SUBCOMMANDS.find((c) => c.cmd === "model");
105
+ assert.ok(entry, "model should be in TOP_LEVEL_SUBCOMMANDS");
106
+ assert.match(entry!.desc, /session model/i);
107
+ });
108
+
109
+ it("getGsdArgumentCompletions('m') includes model", () => {
110
+ const completions = getGsdArgumentCompletions("m");
111
+ const labels = completions.map((c: any) => c.label);
112
+ assert.ok(labels.includes("model"), "should include model completion");
113
+ });
114
+
103
115
  it("workflow appears in TOP_LEVEL_SUBCOMMANDS", () => {
104
116
  const entry = TOP_LEVEL_SUBCOMMANDS.find((c) => c.cmd === "workflow");
105
117
  assert.ok(entry, "workflow should be in TOP_LEVEL_SUBCOMMANDS");
@@ -42,3 +42,35 @@ test("show-config only falls back when ctx.ui.custom() is unavailable", async ()
42
42
  assert.equal(fallbackCtx.notices.length, 1, "unavailable overlay triggers text fallback");
43
43
  assert.match(fallbackCtx.notices[0]!.message, /GSD Configuration/);
44
44
  });
45
+
46
+ test("model command resolves and persists exact provider-qualified selection", async () => {
47
+ const selectedModel = { provider: "openai", id: "gpt-5.4" };
48
+ let applied: typeof selectedModel | null = null;
49
+ const ctx = {
50
+ hasUI: true,
51
+ model: { provider: "anthropic", id: "claude-sonnet-4-6" },
52
+ modelRegistry: {
53
+ getAvailable: () => [
54
+ { provider: "anthropic", id: "claude-sonnet-4-6" },
55
+ selectedModel,
56
+ ],
57
+ },
58
+ ui: {
59
+ notify: (message: string, type?: string) => {
60
+ notices.push({ message, type });
61
+ },
62
+ },
63
+ } as any;
64
+ const notices: Array<{ message: string; type?: string }> = [];
65
+ const pi = {
66
+ setModel: async (model: typeof selectedModel) => {
67
+ applied = model;
68
+ return true;
69
+ },
70
+ } as any;
71
+
72
+ const handled = await handleCoreCommand("model openai/gpt-5.4", ctx, pi);
73
+ assert.equal(handled, true);
74
+ assert.deepEqual(applied, selectedModel);
75
+ assert.match(notices[0]!.message, /openai\/gpt-5\.4/);
76
+ });
@@ -17,6 +17,7 @@ import {
17
17
  parsePreferencesMarkdown,
18
18
  _resetParseWarningFlag,
19
19
  } from "../preferences.ts";
20
+ import { formatConfiguredModel, toPersistedModelId } from "../commands-prefs-wizard.ts";
20
21
  import { _resetLogs, peekLogs } from "../workflow-logger.ts";
21
22
  import type { GSDPreferences, GSDModelConfigV2, GSDPhaseModelConfig } from "../preferences.ts";
22
23
 
@@ -347,6 +348,22 @@ test("handles model config with explicit provider field", () => {
347
348
  assert.equal(execution.provider, "bedrock");
348
349
  });
349
350
 
351
+ test("formatConfiguredModel renders provider-qualified object config", () => {
352
+ assert.equal(
353
+ formatConfiguredModel({ model: "claude-opus-4-6", provider: "bedrock" }),
354
+ "bedrock/claude-opus-4-6",
355
+ );
356
+ });
357
+
358
+ test("toPersistedModelId prefixes provider chosen in prefs wizard", () => {
359
+ assert.equal(toPersistedModelId("openai", "gpt-5.4"), "openai/gpt-5.4");
360
+ assert.equal(
361
+ toPersistedModelId("openai", "openai/gpt-5.4"),
362
+ "openai/gpt-5.4",
363
+ "already-qualified IDs should be preserved",
364
+ );
365
+ });
366
+
350
367
  test("handles empty models config", () => {
351
368
  const prefs = parsePreferencesMarkdown("---\nversion: 1\n---\n");
352
369
  assert.notEqual(prefs, null);