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
@@ -22,5 +22,5 @@ export declare function getNewerManagedResourceVersion(agentDir: string, current
22
22
  * Inspectable: `ls ~/.gsd/agent/extensions/`
23
23
  */
24
24
  export declare function initResources(agentDir: string): void;
25
- export declare function hasStaleCompiledExtensionSiblings(extensionsDir: string): boolean;
25
+ export declare function hasStaleCompiledExtensionSiblings(extensionsDir: string, sourceDir?: string): boolean;
26
26
  export declare function buildResourceLoader(agentDir: string): DefaultResourceLoader;
@@ -384,11 +384,13 @@ export function initResources(agentDir) {
384
384
  mkdirSync(agentDir, { recursive: true });
385
385
  const currentVersion = getBundledGsdVersion();
386
386
  const manifest = readManagedResourceManifest(agentDir);
387
+ const extensionsDir = join(agentDir, 'extensions');
387
388
  // Always prune root-level extension files that were removed from the bundle.
388
389
  // This is cheap (a few existence checks + at most one rmSync) and must run
389
390
  // unconditionally so that stale files left by a previous version are cleaned
390
391
  // up even when the version/hash match causes the full sync to be skipped.
391
392
  pruneRemovedBundledExtensions(manifest, agentDir);
393
+ pruneStaleSiblingFiles(bundledExtensionsDir, extensionsDir);
392
394
  // Ensure ~/.gsd/agent/node_modules symlinks to GSD's node_modules on EVERY
393
395
  // launch, not just during resource syncs. A stale/broken symlink makes ALL
394
396
  // extensions fail to resolve @gsd/* packages, rendering GSD non-functional.
@@ -402,7 +404,7 @@ export function initResources(agentDir) {
402
404
  if (manifest && manifest.gsdVersion === currentVersion) {
403
405
  // Version matches — check content fingerprint for same-version staleness.
404
406
  const currentHash = computeResourceFingerprint();
405
- const hasStaleExtensionFiles = hasStaleCompiledExtensionSiblings(join(agentDir, 'extensions'));
407
+ const hasStaleExtensionFiles = hasStaleCompiledExtensionSiblings(extensionsDir, bundledExtensionsDir);
406
408
  if (manifest.contentHash && manifest.contentHash === currentHash && !hasStaleExtensionFiles) {
407
409
  return;
408
410
  }
@@ -555,14 +557,27 @@ function migrateSkillsToEcosystemDir(agentDir) {
555
557
  }
556
558
  }
557
559
  }
558
- export function hasStaleCompiledExtensionSiblings(extensionsDir) {
560
+ export function hasStaleCompiledExtensionSiblings(extensionsDir, sourceDir = bundledExtensionsDir) {
559
561
  if (!existsSync(extensionsDir))
560
562
  return false;
563
+ const sourceFiles = existsSync(sourceDir)
564
+ ? new Set(readdirSync(sourceDir, { withFileTypes: true })
565
+ .filter((entry) => entry.isFile())
566
+ .map((entry) => entry.name))
567
+ : new Set();
561
568
  for (const entry of readdirSync(extensionsDir, { withFileTypes: true })) {
562
- if (!entry.isFile() || !entry.name.endsWith('.ts'))
569
+ if (!entry.isFile())
570
+ continue;
571
+ if (!entry.name.endsWith('.ts') && !entry.name.endsWith('.js'))
572
+ continue;
573
+ const siblingName = entry.name.endsWith('.ts')
574
+ ? entry.name.replace(/\.ts$/, '.js')
575
+ : entry.name.replace(/\.js$/, '.ts');
576
+ if (!existsSync(join(extensionsDir, siblingName)))
577
+ continue;
578
+ if (sourceFiles.has(entry.name) && sourceFiles.has(siblingName))
563
579
  continue;
564
- const jsName = entry.name.replace(/\.ts$/, '.js');
565
- if (existsSync(join(extensionsDir, jsName))) {
580
+ if (sourceFiles.has(entry.name) || sourceFiles.has(siblingName)) {
566
581
  return true;
567
582
  }
568
583
  }
@@ -18,7 +18,8 @@ Read these files in order and act on what they say:
18
18
  3. **`.gsd/milestones/<active>/M###-CONTEXT.md`** — Milestone-level project decisions, reference paths, constraints. Read this before doing implementation work.
19
19
  4. If a slice is active and has one, read **`S##-CONTEXT.md`** — Slice-specific decisions and constraints.
20
20
  5. If a slice is active, read its **`S##-PLAN.md`** — Which tasks exist? Which are done?
21
- 6. If a task was interrupted, check for **`continue.md`** in the active slice directory — Resume from there.
21
+ 6. If `.gsd/CODEBASE.md` exists, skim it for fast structural orientation before broad code exploration.
22
+ 7. If a task was interrupted, check for **`continue.md`** in the active slice directory — Resume from there.
22
23
 
23
24
  Then do the thing `STATE.md` says to do next.
24
25
 
@@ -44,6 +45,7 @@ All artifacts live in `.gsd/` at the project root:
44
45
  .gsd/
45
46
  STATE.md # Dashboard — always read first (derived cache; runtime, gitignored)
46
47
  DECISIONS.md # Append-only decisions register
48
+ CODEBASE.md # Generated codebase map cache (auto-refreshed by GSD)
47
49
  milestones/
48
50
  M001/
49
51
  M001-ROADMAP.md # Milestone plan (checkboxes = state)
@@ -25,6 +25,12 @@ function maskPreview(value) {
25
25
  function shellEscapeSingle(value) {
26
26
  return `'${value.replace(/'/g, `'\\''`)}'`;
27
27
  }
28
+ function isSafeEnvVarKey(key) {
29
+ return /^[A-Za-z_][A-Za-z0-9_]*$/.test(key);
30
+ }
31
+ function isSupportedDeploymentEnvironment(env) {
32
+ return env === "development" || env === "preview" || env === "production";
33
+ }
28
34
  function hydrateProcessEnv(key, value) {
29
35
  // Make newly collected secrets immediately visible to the current session.
30
36
  // Some extensions read process.env directly and do not reload .env on every call.
@@ -263,12 +269,22 @@ async function applySecrets(provided, destination, opts) {
263
269
  }
264
270
  if ((destination === "vercel" || destination === "convex") && opts.exec) {
265
271
  const env = opts.environment ?? "development";
272
+ if (!isSupportedDeploymentEnvironment(env)) {
273
+ errors.push(`environment: unsupported target environment "${env}"`);
274
+ return { applied, errors };
275
+ }
266
276
  for (const { key, value } of provided) {
277
+ if (!isSafeEnvVarKey(key)) {
278
+ errors.push(`${key}: invalid environment variable name`);
279
+ continue;
280
+ }
267
281
  const cmd = destination === "vercel"
268
282
  ? `printf %s ${shellEscapeSingle(value)} | vercel env add ${key} ${env}`
269
- : `npx convex env set ${key} ${shellEscapeSingle(value)}`;
283
+ : "";
270
284
  try {
271
- const result = await opts.exec("sh", ["-c", cmd]);
285
+ const result = destination === "vercel"
286
+ ? await opts.exec("sh", ["-c", cmd])
287
+ : await opts.exec("npx", ["convex", "env", "set", key, value]);
272
288
  if (result.code !== 0) {
273
289
  errors.push(`${key}: ${result.stderr.slice(0, 200)}`);
274
290
  }
@@ -40,6 +40,7 @@ import { loadEffectiveGSDPreferences } from "./preferences.js";
40
40
  import { getSliceTasks } from "./gsd-db.js";
41
41
  import { runPreExecutionChecks } from "./pre-execution-checks.js";
42
42
  import { writePreExecutionEvidence } from "./verification-evidence.js";
43
+ import { ensureCodebaseMapFresh } from "./codebase-generator.js";
43
44
  /** Maximum verification retry attempts before escalating to blocker placeholder (#2653). */
44
45
  const MAX_VERIFICATION_RETRIES = 3;
45
46
  /** Enqueue a sidecar item (hook, triage, or quick-task) for the main loop to
@@ -553,6 +554,31 @@ export async function postUnitPreVerification(pctx, opts) {
553
554
  */
554
555
  export async function postUnitPostVerification(pctx) {
555
556
  const { s, ctx, pi, buildSnapshotOpts, lockBase, stopAuto, pauseAuto, updateProgressWidget } = pctx;
557
+ if (s.currentUnit) {
558
+ try {
559
+ const codebasePrefs = loadEffectiveGSDPreferences()?.preferences?.codebase;
560
+ const refresh = ensureCodebaseMapFresh(s.basePath, codebasePrefs
561
+ ? {
562
+ excludePatterns: codebasePrefs.exclude_patterns,
563
+ maxFiles: codebasePrefs.max_files,
564
+ collapseThreshold: codebasePrefs.collapse_threshold,
565
+ }
566
+ : undefined, { force: true, ttlMs: 0 });
567
+ if (refresh.status === "generated" || refresh.status === "updated") {
568
+ debugLog("postUnit", {
569
+ phase: "codebase-refresh",
570
+ unitType: s.currentUnit.type,
571
+ unitId: s.currentUnit.id,
572
+ status: refresh.status,
573
+ fileCount: refresh.fileCount,
574
+ reason: refresh.reason,
575
+ });
576
+ }
577
+ }
578
+ catch (e) {
579
+ logWarning("engine", `CODEBASE refresh failed: ${e.message}`);
580
+ }
581
+ }
556
582
  // ── Post-unit hooks ──
557
583
  if (s.currentUnit && !s.stepMode) {
558
584
  const hookUnit = checkPostUnitHooks(s.currentUnit.type, s.currentUnit.id, s.basePath);
@@ -8,6 +8,7 @@ import { readForensicsMarker } from "../forensics.js";
8
8
  import { resolveAllSkillReferences, renderPreferencesForSystemPrompt, loadEffectiveGSDPreferences } from "../preferences.js";
9
9
  import { resolveSkillReference } from "../preferences-skills.js";
10
10
  import { resolveGsdRootFile, resolveSliceFile, resolveSlicePath, resolveTaskFile, resolveTaskFiles, resolveTasksDir, relSliceFile, relSlicePath, relTaskFile } from "../paths.js";
11
+ import { ensureCodebaseMapFresh, readCodebaseMap } from "../codebase-generator.js";
11
12
  import { hasSkillSnapshot, detectNewSkills, formatSkillsXml } from "../skill-discovery.js";
12
13
  import { getActiveAutoWorktreeContext } from "../auto-worktree.js";
13
14
  import { getActiveWorktreeName, getWorktreeOriginalCwd } from "../worktree-command.js";
@@ -103,10 +104,24 @@ export async function buildBeforeAgentStartResult(event, ctx) {
103
104
  }
104
105
  }
105
106
  let codebaseBlock = "";
107
+ try {
108
+ const codebaseOptions = loadedPreferences?.preferences?.codebase
109
+ ? {
110
+ excludePatterns: loadedPreferences.preferences.codebase.exclude_patterns,
111
+ maxFiles: loadedPreferences.preferences.codebase.max_files,
112
+ collapseThreshold: loadedPreferences.preferences.codebase.collapse_threshold,
113
+ }
114
+ : undefined;
115
+ ensureCodebaseMapFresh(process.cwd(), codebaseOptions);
116
+ }
117
+ catch (e) {
118
+ logWarning("bootstrap", `CODEBASE refresh failed: ${e.message}`);
119
+ }
106
120
  const codebasePath = resolveGsdRootFile(process.cwd(), "CODEBASE");
107
- if (existsSync(codebasePath)) {
121
+ const rawCodebase = readCodebaseMap(process.cwd());
122
+ if (existsSync(codebasePath) && rawCodebase) {
108
123
  try {
109
- const rawContent = readFileSync(codebasePath, "utf-8").trim();
124
+ const rawContent = rawCodebase.trim();
110
125
  if (rawContent) {
111
126
  // Cap injection size to ~2 000 tokens to avoid bloating every request.
112
127
  // Full map is always available at .gsd/CODEBASE.md.
@@ -116,7 +131,7 @@ export async function buildBeforeAgentStartResult(event, ctx) {
116
131
  const content = rawContent.length > MAX_CODEBASE_CHARS
117
132
  ? rawContent.slice(0, MAX_CODEBASE_CHARS) + "\n\n*(truncated — see .gsd/CODEBASE.md for full map)*"
118
133
  : rawContent;
119
- codebaseBlock = `\n\n[PROJECT CODEBASE — File structure and descriptions (generated ${generatedAt}, may be stale run /gsd codebase update to refresh)]\n\n${content}`;
134
+ codebaseBlock = `\n\n[PROJECT CODEBASE — File structure and descriptions (generated ${generatedAt}, auto-refreshed when GSD detects tracked file changes; use /gsd codebase stats for status)]\n\n${content}`;
120
135
  }
121
136
  }
122
137
  catch (e) {
@@ -7,6 +7,7 @@
7
7
  * Generation: walk `git ls-files`, group by directory, output with descriptions.
8
8
  * Maintenance: agent updates descriptions as it works; incremental update preserves them.
9
9
  */
10
+ import { createHash } from "node:crypto";
10
11
  import { existsSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
11
12
  import { join, dirname, extname } from "node:path";
12
13
  import { execSync } from "node:child_process";
@@ -31,6 +32,10 @@ const DEFAULT_EXCLUDES = [
31
32
  ];
32
33
  const DEFAULT_MAX_FILES = 500;
33
34
  const DEFAULT_COLLAPSE_THRESHOLD = 20;
35
+ const DEFAULT_REFRESH_TTL_MS = 30_000;
36
+ const DEFAULT_MAX_AGE_MS = 15 * 60_000;
37
+ const CODEBASE_METADATA_PREFIX = "<!-- gsd:codebase-meta ";
38
+ const freshnessCache = new Map();
34
39
  // ─── Parsing ─────────────────────────────────────────────────────────────────
35
40
  /**
36
41
  * Parse an existing CODEBASE.md to extract file → description mappings.
@@ -66,6 +71,31 @@ export function parseCodebaseMap(content) {
66
71
  }
67
72
  return descriptions;
68
73
  }
74
+ export function parseCodebaseMapMetadata(content) {
75
+ const metaLine = content
76
+ .split("\n")
77
+ .find((line) => line.trimStart().startsWith(CODEBASE_METADATA_PREFIX));
78
+ if (!metaLine)
79
+ return null;
80
+ const trimmed = metaLine.trim();
81
+ const jsonStart = CODEBASE_METADATA_PREFIX.length;
82
+ const jsonEnd = trimmed.lastIndexOf(" -->");
83
+ if (jsonEnd <= jsonStart)
84
+ return null;
85
+ try {
86
+ const parsed = JSON.parse(trimmed.slice(jsonStart, jsonEnd));
87
+ if (typeof parsed?.generatedAt === "string"
88
+ && typeof parsed?.fingerprint === "string"
89
+ && typeof parsed?.fileCount === "number"
90
+ && typeof parsed?.truncated === "boolean") {
91
+ return parsed;
92
+ }
93
+ }
94
+ catch {
95
+ // Ignore malformed metadata and treat the map as stale.
96
+ }
97
+ return null;
98
+ }
69
99
  // ─── File Enumeration ────────────────────────────────────────────────────────
70
100
  function shouldExclude(filePath, excludes) {
71
101
  for (const pattern of excludes) {
@@ -103,6 +133,30 @@ function enumerateFiles(basePath, excludes, maxFiles) {
103
133
  const truncated = filtered.length > maxFiles;
104
134
  return { files: truncated ? filtered.slice(0, maxFiles) : filtered, truncated };
105
135
  }
136
+ function resolveGeneratorOptions(options) {
137
+ const excludes = [...DEFAULT_EXCLUDES, ...(options?.excludePatterns ?? [])];
138
+ const maxFiles = options?.maxFiles ?? DEFAULT_MAX_FILES;
139
+ const collapseThreshold = options?.collapseThreshold ?? DEFAULT_COLLAPSE_THRESHOLD;
140
+ return {
141
+ excludes,
142
+ maxFiles,
143
+ collapseThreshold,
144
+ optionSignature: JSON.stringify({
145
+ excludes,
146
+ maxFiles,
147
+ collapseThreshold,
148
+ }),
149
+ };
150
+ }
151
+ function computeCodebaseFingerprint(files, resolved, truncated) {
152
+ return createHash("sha1")
153
+ .update(JSON.stringify({
154
+ files,
155
+ truncated,
156
+ optionSignature: resolved.optionSignature,
157
+ }))
158
+ .digest("hex");
159
+ }
106
160
  // ─── Grouping ────────────────────────────────────────────────────────────────
107
161
  function groupByDirectory(files, descriptions, collapseThreshold) {
108
162
  const dirMap = new Map();
@@ -131,13 +185,13 @@ function groupByDirectory(files, descriptions, collapseThreshold) {
131
185
  return groups;
132
186
  }
133
187
  // ─── Rendering ───────────────────────────────────────────────────────────────
134
- function renderCodebaseMap(groups, totalFiles, truncated) {
188
+ function renderCodebaseMap(groups, totalFiles, truncated, metadata) {
135
189
  const lines = [];
136
- const now = new Date().toISOString().split(".")[0] + "Z";
137
190
  const described = groups.reduce((sum, g) => sum + g.files.filter((f) => f.description).length, 0);
138
191
  lines.push("# Codebase Map");
139
192
  lines.push("");
140
- lines.push(`Generated: ${now} | Files: ${totalFiles} | Described: ${described}/${totalFiles}`);
193
+ lines.push(`Generated: ${metadata.generatedAt} | Files: ${totalFiles} | Described: ${described}/${totalFiles}`);
194
+ lines.push(`${CODEBASE_METADATA_PREFIX}${JSON.stringify(metadata)} -->`);
141
195
  if (truncated) {
142
196
  lines.push(`Note: Truncated to first ${totalFiles} files. Run with higher --max-files to include all.`);
143
197
  }
@@ -182,20 +236,35 @@ function renderCodebaseMap(groups, totalFiles, truncated) {
182
236
  }
183
237
  return lines.join("\n");
184
238
  }
239
+ function buildCodebaseMap(basePath, resolved, existingDescriptions, enumerated) {
240
+ const listed = enumerated ?? enumerateFiles(basePath, resolved.excludes, resolved.maxFiles);
241
+ const descriptions = existingDescriptions ?? new Map();
242
+ const groups = groupByDirectory(listed.files, descriptions, resolved.collapseThreshold);
243
+ const generatedAt = new Date().toISOString().split(".")[0] + "Z";
244
+ const metadata = {
245
+ generatedAt,
246
+ fingerprint: computeCodebaseFingerprint(listed.files, resolved, listed.truncated),
247
+ fileCount: listed.files.length,
248
+ truncated: listed.truncated,
249
+ };
250
+ const content = renderCodebaseMap(groups, listed.files.length, listed.truncated, metadata);
251
+ return {
252
+ content,
253
+ fileCount: listed.files.length,
254
+ truncated: listed.truncated,
255
+ files: listed.files,
256
+ fingerprint: metadata.fingerprint,
257
+ generatedAt,
258
+ };
259
+ }
185
260
  // ─── Public API ──────────────────────────────────────────────────────────────
186
261
  /**
187
262
  * Generate a fresh CODEBASE.md from scratch.
188
263
  * Preserves existing descriptions if `existingDescriptions` is provided.
189
264
  */
190
265
  export function generateCodebaseMap(basePath, options, existingDescriptions) {
191
- const excludes = [...DEFAULT_EXCLUDES, ...(options?.excludePatterns ?? [])];
192
- const maxFiles = options?.maxFiles ?? DEFAULT_MAX_FILES;
193
- const collapseThreshold = options?.collapseThreshold ?? DEFAULT_COLLAPSE_THRESHOLD;
194
- const { files, truncated } = enumerateFiles(basePath, excludes, maxFiles);
195
- const descriptions = existingDescriptions ?? new Map();
196
- const groups = groupByDirectory(files, descriptions, collapseThreshold);
197
- const content = renderCodebaseMap(groups, files.length, truncated);
198
- return { content, fileCount: files.length, truncated, files };
266
+ const resolved = resolveGeneratorOptions(options);
267
+ return buildCodebaseMap(basePath, resolved, existingDescriptions);
199
268
  }
200
269
  /**
201
270
  * Incremental update: re-scan files, preserve existing descriptions,
@@ -203,6 +272,7 @@ export function generateCodebaseMap(basePath, options, existingDescriptions) {
203
272
  */
204
273
  export function updateCodebaseMap(basePath, options) {
205
274
  const codebasePath = join(gsdRoot(basePath), "CODEBASE.md");
275
+ const resolved = resolveGeneratorOptions(options);
206
276
  // Load existing descriptions
207
277
  let existingDescriptions = new Map();
208
278
  if (existsSync(codebasePath)) {
@@ -212,7 +282,7 @@ export function updateCodebaseMap(basePath, options) {
212
282
  const existingFiles = new Set(existingDescriptions.keys());
213
283
  // Generate new map preserving descriptions — reuse the returned file list
214
284
  // to avoid a second enumeration (prevents race between content and stats).
215
- const result = generateCodebaseMap(basePath, options, existingDescriptions);
285
+ const result = buildCodebaseMap(basePath, resolved, existingDescriptions);
216
286
  const currentSet = new Set(result.files);
217
287
  // Count changes
218
288
  let added = 0;
@@ -232,8 +302,98 @@ export function updateCodebaseMap(basePath, options) {
232
302
  unchanged: result.files.length - added,
233
303
  fileCount: result.fileCount,
234
304
  truncated: result.truncated,
305
+ fingerprint: result.fingerprint,
306
+ generatedAt: result.generatedAt,
235
307
  };
236
308
  }
309
+ function clearFreshnessCache(basePath) {
310
+ for (const key of freshnessCache.keys()) {
311
+ if (key === basePath || key.startsWith(`${basePath}::`)) {
312
+ freshnessCache.delete(key);
313
+ }
314
+ }
315
+ }
316
+ export function ensureCodebaseMapFresh(basePath, options, ensureOptions) {
317
+ const resolved = resolveGeneratorOptions(options);
318
+ const cacheKey = `${basePath}::${resolved.optionSignature}`;
319
+ const ttlMs = ensureOptions?.ttlMs ?? DEFAULT_REFRESH_TTL_MS;
320
+ const maxAgeMs = ensureOptions?.maxAgeMs ?? DEFAULT_MAX_AGE_MS;
321
+ const force = ensureOptions?.force === true;
322
+ const now = Date.now();
323
+ if (!force && ttlMs > 0) {
324
+ const cached = freshnessCache.get(cacheKey);
325
+ if (cached && now - cached.checkedAt < ttlMs) {
326
+ return cached.result;
327
+ }
328
+ }
329
+ const existing = readCodebaseMap(basePath);
330
+ const listed = enumerateFiles(basePath, resolved.excludes, resolved.maxFiles);
331
+ const fingerprint = computeCodebaseFingerprint(listed.files, resolved, listed.truncated);
332
+ const cacheAndReturn = (result) => {
333
+ freshnessCache.set(cacheKey, { checkedAt: now, result });
334
+ return result;
335
+ };
336
+ if (!existing) {
337
+ const generated = buildCodebaseMap(basePath, resolved, undefined, listed);
338
+ if (generated.fileCount > 0) {
339
+ writeCodebaseMap(basePath, generated.content);
340
+ return cacheAndReturn({
341
+ status: "generated",
342
+ fileCount: generated.fileCount,
343
+ truncated: generated.truncated,
344
+ generatedAt: generated.generatedAt,
345
+ fingerprint: generated.fingerprint,
346
+ reason: "missing",
347
+ });
348
+ }
349
+ return cacheAndReturn({
350
+ status: "empty",
351
+ fileCount: 0,
352
+ truncated: false,
353
+ generatedAt: null,
354
+ fingerprint,
355
+ reason: "no-tracked-files",
356
+ });
357
+ }
358
+ const metadata = parseCodebaseMapMetadata(existing);
359
+ const existingDescriptions = parseCodebaseMap(existing);
360
+ const ageMs = metadata ? now - Date.parse(metadata.generatedAt) : Number.POSITIVE_INFINITY;
361
+ const staleReason = !metadata ? "missing-metadata"
362
+ : metadata.fingerprint !== fingerprint ? "files-changed"
363
+ : metadata.fileCount !== listed.files.length ? "file-count-changed"
364
+ : metadata.truncated !== listed.truncated ? "truncation-changed"
365
+ : maxAgeMs > 0 && Number.isFinite(ageMs) && ageMs > maxAgeMs ? "expired"
366
+ : undefined;
367
+ if (!staleReason) {
368
+ return cacheAndReturn({
369
+ status: "fresh",
370
+ fileCount: metadata?.fileCount ?? listed.files.length,
371
+ truncated: metadata?.truncated ?? listed.truncated,
372
+ generatedAt: metadata?.generatedAt ?? null,
373
+ fingerprint: metadata?.fingerprint ?? fingerprint,
374
+ });
375
+ }
376
+ const updated = buildCodebaseMap(basePath, resolved, existingDescriptions, listed);
377
+ if (updated.fileCount > 0) {
378
+ writeCodebaseMap(basePath, updated.content);
379
+ return cacheAndReturn({
380
+ status: "updated",
381
+ fileCount: updated.fileCount,
382
+ truncated: updated.truncated,
383
+ generatedAt: updated.generatedAt,
384
+ fingerprint: updated.fingerprint,
385
+ reason: staleReason,
386
+ });
387
+ }
388
+ return cacheAndReturn({
389
+ status: "empty",
390
+ fileCount: 0,
391
+ truncated: false,
392
+ generatedAt: null,
393
+ fingerprint,
394
+ reason: staleReason,
395
+ });
396
+ }
237
397
  /**
238
398
  * Write CODEBASE.md to .gsd/ directory.
239
399
  */
@@ -242,6 +402,7 @@ export function writeCodebaseMap(basePath, content) {
242
402
  mkdirSync(root, { recursive: true });
243
403
  const outPath = join(root, "CODEBASE.md");
244
404
  writeFileSync(outPath, content, "utf-8");
405
+ clearFreshnessCache(basePath);
245
406
  return outPath;
246
407
  }
247
408
  /**
@@ -4,7 +4,7 @@ import { join } from "node:path";
4
4
  import { loadRegistry } from "../workflow-templates.js";
5
5
  import { resolveProjectRoot } from "../worktree.js";
6
6
  const gsdHome = process.env.GSD_HOME || join(homedir(), ".gsd");
7
- export const GSD_COMMAND_DESCRIPTION = "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";
7
+ export const GSD_COMMAND_DESCRIPTION = "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";
8
8
  export const TOP_LEVEL_SUBCOMMANDS = [
9
9
  { cmd: "help", desc: "Categorized command reference with descriptions" },
10
10
  { cmd: "next", desc: "Explicit step mode (same as /gsd)" },
@@ -29,6 +29,7 @@ export const TOP_LEVEL_SUBCOMMANDS = [
29
29
  { cmd: "skip", desc: "Prevent a unit from auto-mode dispatch" },
30
30
  { cmd: "export", desc: "Export milestone/slice results" },
31
31
  { cmd: "cleanup", desc: "Remove merged branches or snapshots" },
32
+ { cmd: "model", desc: "Switch the active session model or open a picker" },
32
33
  { cmd: "mode", desc: "Switch workflow mode (solo/team)" },
33
34
  { cmd: "prefs", desc: "Manage preferences (model selection, timeouts, etc.)" },
34
35
  { cmd: "config", desc: "Set API keys for external tools" },
@@ -60,7 +61,7 @@ export const TOP_LEVEL_SUBCOMMANDS = [
60
61
  { cmd: "mcp", desc: "MCP server status and connectivity check (status, check <server>)" },
61
62
  { cmd: "rethink", desc: "Conversational project reorganization — reorder, park, discard, add milestones" },
62
63
  { cmd: "workflow", desc: "Custom workflow lifecycle (new, run, list, validate, pause, resume)" },
63
- { cmd: "codebase", desc: "Generate and manage codebase map (.gsd/CODEBASE.md)" },
64
+ { cmd: "codebase", desc: "Generate, refresh, and inspect the codebase map cache (.gsd/CODEBASE.md)" },
64
65
  ];
65
66
  const NESTED_COMPLETIONS = {
66
67
  auto: [
@@ -223,7 +224,7 @@ const NESTED_COMPLETIONS = {
223
224
  { cmd: "generate", desc: "Generate or regenerate CODEBASE.md" },
224
225
  { cmd: "generate --max-files", desc: "Generate with custom file limit (default: 500)" },
225
226
  { cmd: "generate --collapse-threshold", desc: "Generate with custom collapse threshold (default: 20)" },
226
- { cmd: "update", desc: "Incremental update (preserves descriptions)" },
227
+ { cmd: "update", desc: "Refresh the CODEBASE.md cache immediately (preserves descriptions)" },
227
228
  { cmd: "update --max-files", desc: "Update with custom file limit" },
228
229
  { cmd: "update --collapse-threshold", desc: "Update with custom collapse threshold" },
229
230
  { cmd: "stats", desc: "Show file count, description coverage, and generation time" },
@@ -6,7 +6,7 @@ import { handleWorkflowCommand } from "./handlers/workflow.js";
6
6
  export async function handleGSDCommand(args, ctx, pi) {
7
7
  const trimmed = (typeof args === "string" ? args : "").trim();
8
8
  const handlers = [
9
- () => handleCoreCommand(trimmed, ctx),
9
+ () => handleCoreCommand(trimmed, ctx, pi),
10
10
  () => handleAutoCommand(trimmed, ctx, pi),
11
11
  () => handleParallelCommand(trimmed, ctx, pi),
12
12
  () => handleWorkflowCommand(trimmed, ctx, pi),
@@ -40,10 +40,12 @@ export function showHelp(ctx) {
40
40
  "",
41
41
  "PROJECT KNOWLEDGE",
42
42
  " /gsd knowledge <type> <text> Add rule, pattern, or lesson to KNOWLEDGE.md",
43
+ " /gsd codebase [generate|update|stats] Manage the CODEBASE.md cache used in prompt context",
43
44
  "",
44
45
  "SETUP & CONFIGURATION",
45
46
  " /gsd init Project init wizard — detect, configure, bootstrap .gsd/",
46
47
  " /gsd setup Global setup status [llm|search|remote|keys|prefs]",
48
+ " /gsd model Switch active session model [provider/model|model-id]",
47
49
  " /gsd mode Set workflow mode (solo/team) [global|project]",
48
50
  " /gsd prefs Manage preferences [global|project|status|wizard|setup|import-claude]",
49
51
  " /gsd cmux Manage cmux integration [status|on|off|notifications|sidebar|splits|browser]",
@@ -152,7 +154,92 @@ export async function handleSetup(args, ctx) {
152
154
  " /gsd setup keys — Tool API keys\n" +
153
155
  " /gsd setup prefs — Global preferences wizard", "info");
154
156
  }
155
- export async function handleCoreCommand(trimmed, ctx) {
157
+ function sortModelsForSelection(models, currentModel) {
158
+ return [...models].sort((a, b) => {
159
+ const aCurrent = currentModel && a.provider === currentModel.provider && a.id === currentModel.id;
160
+ const bCurrent = currentModel && b.provider === currentModel.provider && b.id === currentModel.id;
161
+ if (aCurrent && !bCurrent)
162
+ return -1;
163
+ if (!aCurrent && bCurrent)
164
+ return 1;
165
+ const providerCmp = a.provider.localeCompare(b.provider);
166
+ if (providerCmp !== 0)
167
+ return providerCmp;
168
+ return a.id.localeCompare(b.id);
169
+ });
170
+ }
171
+ async function resolveRequestedModel(query, ctx) {
172
+ const { resolveModelId } = await import("../../auto-model-selection.js");
173
+ const models = ctx.modelRegistry.getAvailable();
174
+ const exact = resolveModelId(query, models, ctx.model?.provider);
175
+ if (exact)
176
+ return exact;
177
+ const lowerQuery = query.toLowerCase();
178
+ const partialMatches = models.filter((model) => model.id.toLowerCase().includes(lowerQuery)
179
+ || `${model.provider}/${model.id}`.toLowerCase().includes(lowerQuery));
180
+ if (partialMatches.length === 1)
181
+ return partialMatches[0];
182
+ if (partialMatches.length === 0 || !ctx.hasUI)
183
+ return undefined;
184
+ const sorted = sortModelsForSelection(partialMatches, ctx.model);
185
+ const optionToModel = new Map();
186
+ const options = sorted.map((model) => {
187
+ const label = `${model.provider}/${model.id}`;
188
+ optionToModel.set(label, model);
189
+ return label;
190
+ });
191
+ options.push("(cancel)");
192
+ const choice = await ctx.ui.select(`Multiple models match "${query}" — choose one:`, options);
193
+ if (!choice || typeof choice !== "string" || choice === "(cancel)")
194
+ return undefined;
195
+ return optionToModel.get(choice);
196
+ }
197
+ async function handleModel(trimmedArgs, ctx, pi) {
198
+ const availableModels = ctx.modelRegistry.getAvailable();
199
+ if (availableModels.length === 0) {
200
+ ctx.ui.notify("No available models found. Check provider auth and model discovery.", "warning");
201
+ return;
202
+ }
203
+ if (!pi) {
204
+ ctx.ui.notify("Model switching is unavailable in this context.", "warning");
205
+ return;
206
+ }
207
+ const trimmed = trimmedArgs.trim();
208
+ let targetModel;
209
+ if (!trimmed) {
210
+ if (!ctx.hasUI) {
211
+ const current = ctx.model ? `${ctx.model.provider}/${ctx.model.id}` : "(none)";
212
+ ctx.ui.notify(`Current model: ${current}\nUsage: /gsd model <provider/model|model-id>`, "info");
213
+ return;
214
+ }
215
+ const optionToModel = new Map();
216
+ const options = sortModelsForSelection(availableModels, ctx.model).map((model) => {
217
+ const isCurrent = ctx.model && model.provider === ctx.model.provider && model.id === ctx.model.id;
218
+ const label = `${isCurrent ? "* " : ""}${model.provider}/${model.id}`;
219
+ optionToModel.set(label, model);
220
+ return label;
221
+ });
222
+ options.push("(cancel)");
223
+ const choice = await ctx.ui.select("Select session model:", options);
224
+ if (!choice || typeof choice !== "string" || choice === "(cancel)")
225
+ return;
226
+ targetModel = optionToModel.get(choice);
227
+ }
228
+ else {
229
+ targetModel = await resolveRequestedModel(trimmed, ctx);
230
+ }
231
+ if (!targetModel) {
232
+ ctx.ui.notify(`Model "${trimmed}" not found. Use /gsd model with an exact provider/model or a unique model ID.`, "warning");
233
+ return;
234
+ }
235
+ const ok = await pi.setModel(targetModel);
236
+ if (!ok) {
237
+ ctx.ui.notify(`No API key for ${targetModel.provider}/${targetModel.id}`, "warning");
238
+ return;
239
+ }
240
+ ctx.ui.notify(`Model: ${targetModel.provider}/${targetModel.id}`, "info");
241
+ }
242
+ export async function handleCoreCommand(trimmed, ctx, pi) {
156
243
  if (trimmed === "help" || trimmed === "h" || trimmed === "?") {
157
244
  showHelp(ctx);
158
245
  return true;
@@ -177,6 +264,10 @@ export async function handleCoreCommand(trimmed, ctx) {
177
264
  ctx.ui.notify(`Widget: ${getWidgetMode()}`, "info");
178
265
  return true;
179
266
  }
267
+ if (trimmed === "model" || trimmed.startsWith("model ")) {
268
+ await handleModel(trimmed.replace(/^model\s*/, "").trim(), ctx, pi);
269
+ return true;
270
+ }
180
271
  if (trimmed === "mode" || trimmed.startsWith("mode ")) {
181
272
  const modeArgs = trimmed.replace(/^mode\s*/, "").trim();
182
273
  const scope = modeArgs === "project" ? "project" : "global";
@@ -44,6 +44,7 @@ const TOP_LEVEL_SUBCOMMANDS = [
44
44
  { cmd: "start", desc: "Start a workflow template" },
45
45
  { cmd: "templates", desc: "List available workflow templates" },
46
46
  { cmd: "extensions", desc: "Manage extensions" },
47
+ { cmd: "codebase", desc: "Generate, refresh, and inspect the codebase map cache" },
47
48
  ];
48
49
  function filterStartsWith(partial, options, prefix = "") {
49
50
  const normalizedPrefix = prefix.length > 0 ? `${prefix} ` : "";
@@ -192,6 +193,14 @@ function getGsdArgumentCompletions(prefix) {
192
193
  { cmd: "info", desc: "Show extension details" },
193
194
  ], "extensions");
194
195
  }
196
+ if (parts[0] === "codebase" && parts.length <= 2) {
197
+ return filterStartsWith(partial, [
198
+ { cmd: "generate", desc: "Generate or regenerate CODEBASE.md" },
199
+ { cmd: "update", desc: "Refresh the CODEBASE.md cache immediately" },
200
+ { cmd: "stats", desc: "Show codebase-map coverage and generation time" },
201
+ { cmd: "help", desc: "Show usage and subcommands" },
202
+ ], "codebase");
203
+ }
195
204
  if (parts[0] === "doctor" && parts.length <= 2) {
196
205
  return filterStartsWith(partial, [
197
206
  { cmd: "fix", desc: "Auto-fix detected issues" },