gsd-pi 2.49.0 → 2.50.0-dev.9476db8

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 (353) hide show
  1. package/dist/headless-ui.js +12 -2
  2. package/dist/headless.js +29 -13
  3. package/dist/resources/extensions/gsd/auto/infra-errors.js +1 -0
  4. package/dist/resources/extensions/gsd/auto/phases.js +11 -11
  5. package/dist/resources/extensions/gsd/auto/resolve.js +2 -2
  6. package/dist/resources/extensions/gsd/auto/run-unit.js +2 -2
  7. package/dist/resources/extensions/gsd/auto/session.js +4 -0
  8. package/dist/resources/extensions/gsd/auto-artifact-paths.js +8 -10
  9. package/dist/resources/extensions/gsd/auto-dashboard.js +6 -3
  10. package/dist/resources/extensions/gsd/auto-dispatch.js +33 -21
  11. package/dist/resources/extensions/gsd/auto-post-unit.js +17 -24
  12. package/dist/resources/extensions/gsd/auto-prompts.js +102 -21
  13. package/dist/resources/extensions/gsd/auto-recovery.js +62 -184
  14. package/dist/resources/extensions/gsd/auto-start.js +4 -31
  15. package/dist/resources/extensions/gsd/auto-timers.js +2 -2
  16. package/dist/resources/extensions/gsd/auto-verification.js +4 -7
  17. package/dist/resources/extensions/gsd/auto-worktree.js +257 -113
  18. package/dist/resources/extensions/gsd/auto.js +7 -5
  19. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +89 -0
  20. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +8 -1
  21. package/dist/resources/extensions/gsd/branch-patterns.js +13 -0
  22. package/dist/resources/extensions/gsd/doctor-checks.js +5 -1234
  23. package/dist/resources/extensions/gsd/doctor-engine-checks.js +168 -0
  24. package/dist/resources/extensions/gsd/doctor-environment.js +28 -7
  25. package/dist/resources/extensions/gsd/doctor-git-checks.js +405 -0
  26. package/dist/resources/extensions/gsd/doctor-global-checks.js +74 -0
  27. package/dist/resources/extensions/gsd/doctor-runtime-checks.js +600 -0
  28. package/dist/resources/extensions/gsd/doctor.js +9 -1
  29. package/dist/resources/extensions/gsd/extension-manifest.json +1 -1
  30. package/dist/resources/extensions/gsd/git-service.js +9 -10
  31. package/dist/resources/extensions/gsd/gsd-db.js +124 -1
  32. package/dist/resources/extensions/gsd/guided-flow-queue.js +10 -11
  33. package/dist/resources/extensions/gsd/markdown-renderer.js +33 -5
  34. package/dist/resources/extensions/gsd/preferences-types.js +2 -1
  35. package/dist/resources/extensions/gsd/preferences-validation.js +39 -0
  36. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +27 -8
  37. package/dist/resources/extensions/gsd/prompts/complete-slice.md +9 -8
  38. package/dist/resources/extensions/gsd/prompts/execute-task.md +16 -13
  39. package/dist/resources/extensions/gsd/prompts/forensics.md +12 -5
  40. package/dist/resources/extensions/gsd/prompts/gate-evaluate.md +32 -0
  41. package/dist/resources/extensions/gsd/prompts/guided-complete-slice.md +1 -1
  42. package/dist/resources/extensions/gsd/prompts/guided-execute-task.md +1 -1
  43. package/dist/resources/extensions/gsd/prompts/guided-plan-milestone.md +1 -1
  44. package/dist/resources/extensions/gsd/prompts/guided-plan-slice.md +1 -1
  45. package/dist/resources/extensions/gsd/prompts/plan-milestone.md +1 -1
  46. package/dist/resources/extensions/gsd/prompts/plan-slice.md +8 -3
  47. package/dist/resources/extensions/gsd/prompts/reassess-roadmap.md +3 -0
  48. package/dist/resources/extensions/gsd/prompts/replan-slice.md +1 -1
  49. package/dist/resources/extensions/gsd/repo-identity.js +29 -0
  50. package/dist/resources/extensions/gsd/roadmap-slices.js +2 -2
  51. package/dist/resources/extensions/gsd/session-forensics.js +6 -11
  52. package/dist/resources/extensions/gsd/session-lock.js +67 -56
  53. package/dist/resources/extensions/gsd/state.js +34 -7
  54. package/dist/resources/extensions/gsd/templates/milestone-summary.md +8 -0
  55. package/dist/resources/extensions/gsd/templates/plan.md +16 -0
  56. package/dist/resources/extensions/gsd/templates/roadmap.md +13 -0
  57. package/dist/resources/extensions/gsd/templates/slice-summary.md +9 -0
  58. package/dist/resources/extensions/gsd/templates/task-plan.md +24 -0
  59. package/dist/resources/extensions/gsd/tools/plan-slice.js +14 -1
  60. package/dist/resources/extensions/gsd/tools/validate-milestone.js +3 -3
  61. package/dist/resources/extensions/gsd/verdict-parser.js +84 -0
  62. package/dist/resources/extensions/gsd/worktree-resolver.js +24 -0
  63. package/dist/resources/extensions/gsd/worktree.js +3 -2
  64. package/dist/resources/extensions/remote-questions/config.js +3 -5
  65. package/dist/resources/extensions/search-the-web/native-search.js +8 -3
  66. package/dist/resources/extensions/search-the-web/tool-search.js +19 -2
  67. package/dist/resources/skills/github-workflows/references/gh/SKILL.md +22 -1
  68. package/dist/web/standalone/.next/BUILD_ID +1 -1
  69. package/dist/web/standalone/.next/app-path-routes-manifest.json +13 -13
  70. package/dist/web/standalone/.next/build-manifest.json +4 -4
  71. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  72. package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
  73. package/dist/web/standalone/.next/required-server-files.json +4 -4
  74. package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
  75. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  76. package/dist/web/standalone/.next/server/app/_global-error.html +2 -2
  77. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  78. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  79. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  80. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  81. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  82. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  83. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  84. package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
  85. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  86. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  87. package/dist/web/standalone/.next/server/app/_not-found.rsc +3 -3
  88. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  89. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  90. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  91. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  92. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  93. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  94. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  95. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  96. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  97. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  98. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  99. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  100. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
  101. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  102. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
  103. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  104. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  105. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  106. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  107. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  108. package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
  109. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  110. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  111. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  112. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  113. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  114. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  115. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  116. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  117. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  118. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  119. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  120. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  121. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  122. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  123. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  124. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  125. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  126. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  127. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  128. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  129. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  130. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  131. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  132. package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
  133. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  134. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  135. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  136. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  137. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  138. package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +5 -5
  139. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  140. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  141. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  142. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  143. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  144. package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
  145. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  146. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  147. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  148. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  149. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  150. package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
  151. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  152. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  153. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  154. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  155. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  156. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  157. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  158. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +2 -2
  159. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  160. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
  161. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  162. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +2 -2
  163. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  164. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +4 -4
  165. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  166. package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
  167. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  168. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  169. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  170. package/dist/web/standalone/.next/server/app/api/update/route.js +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_client-reference-manifest.js +1 -1
  174. package/dist/web/standalone/.next/server/app/index.html +1 -1
  175. package/dist/web/standalone/.next/server/app/index.rsc +4 -4
  176. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  177. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
  178. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  179. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +3 -3
  180. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  181. package/dist/web/standalone/.next/server/app/page.js +2 -2
  182. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  183. package/dist/web/standalone/.next/server/app-paths-manifest.json +13 -13
  184. package/dist/web/standalone/.next/server/chunks/229.js +2 -2
  185. package/dist/web/standalone/.next/server/chunks/471.js +3 -3
  186. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  187. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  188. package/dist/web/standalone/.next/server/middleware.js +2 -2
  189. package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
  190. package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
  191. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  192. package/dist/web/standalone/.next/server/pages/500.html +2 -2
  193. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  194. package/dist/web/standalone/.next/static/chunks/4024.7c75ac378de0f2b5.js +9 -0
  195. package/dist/web/standalone/.next/static/chunks/app/_not-found/{page-2f24283c162b6ab3.js → page-f2a7482d42a5614b.js} +1 -1
  196. package/dist/web/standalone/.next/static/chunks/app/{layout-9ecfd95f343793f0.js → layout-a16c7a7ecdf0c2cf.js} +1 -1
  197. package/dist/web/standalone/.next/static/chunks/app/page-6654a8cca61a3d1c.js +1 -0
  198. package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +1 -0
  199. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +1 -0
  200. package/dist/web/standalone/.next/static/chunks/{webpack-0a4cd455ec4197d2.js → webpack-2473ce2c3879fff4.js} +1 -1
  201. package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
  202. package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
  203. package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
  204. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +14 -14
  205. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +14 -14
  206. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +14 -14
  207. package/dist/web/standalone/server.js +1 -1
  208. package/package.json +1 -1
  209. package/packages/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
  210. package/packages/pi-agent-core/dist/agent-loop.js +4 -1
  211. package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
  212. package/packages/pi-agent-core/src/agent-loop.ts +4 -1
  213. package/packages/pi-ai/dist/providers/openai-codex-responses.js +39 -10
  214. package/packages/pi-ai/dist/providers/openai-codex-responses.js.map +1 -1
  215. package/packages/pi-ai/src/providers/openai-codex-responses.ts +39 -8
  216. package/packages/pi-coding-agent/dist/core/blob-store.d.ts.map +1 -1
  217. package/packages/pi-coding-agent/dist/core/blob-store.js +8 -3
  218. package/packages/pi-coding-agent/dist/core/blob-store.js.map +1 -1
  219. package/packages/pi-coding-agent/dist/core/discovery-cache.d.ts.map +1 -1
  220. package/packages/pi-coding-agent/dist/core/discovery-cache.js +9 -2
  221. package/packages/pi-coding-agent/dist/core/discovery-cache.js.map +1 -1
  222. package/packages/pi-coding-agent/dist/core/retry-handler.js +1 -1
  223. package/packages/pi-coding-agent/dist/core/retry-handler.js.map +1 -1
  224. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  225. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +7 -32
  226. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  227. package/packages/pi-coding-agent/dist/modes/rpc/jsonl.d.ts.map +1 -1
  228. package/packages/pi-coding-agent/dist/modes/rpc/jsonl.js +5 -0
  229. package/packages/pi-coding-agent/dist/modes/rpc/jsonl.js.map +1 -1
  230. package/packages/pi-coding-agent/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  231. package/packages/pi-coding-agent/dist/modes/rpc/rpc-client.js +0 -1
  232. package/packages/pi-coding-agent/dist/modes/rpc/rpc-client.js.map +1 -1
  233. package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js +1 -1
  234. package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js.map +1 -1
  235. package/packages/pi-coding-agent/package.json +1 -1
  236. package/packages/pi-coding-agent/src/core/blob-store.ts +6 -3
  237. package/packages/pi-coding-agent/src/core/discovery-cache.ts +9 -2
  238. package/packages/pi-coding-agent/src/core/retry-handler.ts +1 -1
  239. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +7 -32
  240. package/packages/pi-coding-agent/src/modes/rpc/jsonl.ts +6 -0
  241. package/packages/pi-coding-agent/src/modes/rpc/rpc-client.ts +0 -2
  242. package/packages/pi-coding-agent/src/modes/rpc/rpc-mode.ts +2 -2
  243. package/pkg/package.json +1 -1
  244. package/src/resources/extensions/gsd/auto/infra-errors.ts +1 -0
  245. package/src/resources/extensions/gsd/auto/phases.ts +10 -11
  246. package/src/resources/extensions/gsd/auto/resolve.ts +3 -3
  247. package/src/resources/extensions/gsd/auto/run-unit.ts +2 -2
  248. package/src/resources/extensions/gsd/auto/session.ts +5 -0
  249. package/src/resources/extensions/gsd/auto/types.ts +13 -0
  250. package/src/resources/extensions/gsd/auto-artifact-paths.ts +19 -21
  251. package/src/resources/extensions/gsd/auto-dashboard.ts +5 -2
  252. package/src/resources/extensions/gsd/auto-dispatch.ts +39 -21
  253. package/src/resources/extensions/gsd/auto-loop.ts +1 -1
  254. package/src/resources/extensions/gsd/auto-post-unit.ts +18 -28
  255. package/src/resources/extensions/gsd/auto-prompts.ts +113 -19
  256. package/src/resources/extensions/gsd/auto-recovery.ts +65 -199
  257. package/src/resources/extensions/gsd/auto-start.ts +7 -27
  258. package/src/resources/extensions/gsd/auto-timers.ts +2 -2
  259. package/src/resources/extensions/gsd/auto-verification.ts +4 -7
  260. package/src/resources/extensions/gsd/auto-worktree.ts +305 -108
  261. package/src/resources/extensions/gsd/auto.ts +11 -10
  262. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +93 -0
  263. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +8 -0
  264. package/src/resources/extensions/gsd/branch-patterns.ts +16 -0
  265. package/src/resources/extensions/gsd/doctor-checks.ts +5 -1291
  266. package/src/resources/extensions/gsd/doctor-engine-checks.ts +182 -0
  267. package/src/resources/extensions/gsd/doctor-environment.ts +30 -7
  268. package/src/resources/extensions/gsd/doctor-git-checks.ts +415 -0
  269. package/src/resources/extensions/gsd/doctor-global-checks.ts +84 -0
  270. package/src/resources/extensions/gsd/doctor-runtime-checks.ts +626 -0
  271. package/src/resources/extensions/gsd/doctor.ts +9 -1
  272. package/src/resources/extensions/gsd/extension-manifest.json +1 -1
  273. package/src/resources/extensions/gsd/git-service.ts +7 -15
  274. package/src/resources/extensions/gsd/gsd-db.ts +150 -2
  275. package/src/resources/extensions/gsd/guided-flow-queue.ts +11 -12
  276. package/src/resources/extensions/gsd/markdown-renderer.ts +37 -4
  277. package/src/resources/extensions/gsd/preferences-types.ts +5 -1
  278. package/src/resources/extensions/gsd/preferences-validation.ts +37 -0
  279. package/src/resources/extensions/gsd/prompts/complete-milestone.md +27 -8
  280. package/src/resources/extensions/gsd/prompts/complete-slice.md +9 -8
  281. package/src/resources/extensions/gsd/prompts/execute-task.md +16 -13
  282. package/src/resources/extensions/gsd/prompts/forensics.md +12 -5
  283. package/src/resources/extensions/gsd/prompts/gate-evaluate.md +32 -0
  284. package/src/resources/extensions/gsd/prompts/guided-complete-slice.md +1 -1
  285. package/src/resources/extensions/gsd/prompts/guided-execute-task.md +1 -1
  286. package/src/resources/extensions/gsd/prompts/guided-plan-milestone.md +1 -1
  287. package/src/resources/extensions/gsd/prompts/guided-plan-slice.md +1 -1
  288. package/src/resources/extensions/gsd/prompts/plan-milestone.md +1 -1
  289. package/src/resources/extensions/gsd/prompts/plan-slice.md +8 -3
  290. package/src/resources/extensions/gsd/prompts/reassess-roadmap.md +3 -0
  291. package/src/resources/extensions/gsd/prompts/replan-slice.md +1 -1
  292. package/src/resources/extensions/gsd/repo-identity.ts +28 -0
  293. package/src/resources/extensions/gsd/roadmap-slices.ts +2 -2
  294. package/src/resources/extensions/gsd/session-forensics.ts +6 -11
  295. package/src/resources/extensions/gsd/session-lock.ts +92 -64
  296. package/src/resources/extensions/gsd/state.ts +38 -5
  297. package/src/resources/extensions/gsd/templates/milestone-summary.md +8 -0
  298. package/src/resources/extensions/gsd/templates/plan.md +16 -0
  299. package/src/resources/extensions/gsd/templates/roadmap.md +13 -0
  300. package/src/resources/extensions/gsd/templates/slice-summary.md +9 -0
  301. package/src/resources/extensions/gsd/templates/task-plan.md +24 -0
  302. package/src/resources/extensions/gsd/tests/agent-end-retry.test.ts +2 -2
  303. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +35 -0
  304. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +1 -81
  305. package/src/resources/extensions/gsd/tests/complete-slice.test.ts +2 -2
  306. package/src/resources/extensions/gsd/tests/complete-task.test.ts +2 -2
  307. package/src/resources/extensions/gsd/tests/completed-units-metrics-sync.test.ts +9 -12
  308. package/src/resources/extensions/gsd/tests/doctor-environment.test.ts +115 -1
  309. package/src/resources/extensions/gsd/tests/doctor-fixlevel.test.ts +65 -1
  310. package/src/resources/extensions/gsd/tests/doctor-git.test.ts +50 -0
  311. package/src/resources/extensions/gsd/tests/gate-dispatch.test.ts +189 -0
  312. package/src/resources/extensions/gsd/tests/gate-storage.test.ts +156 -0
  313. package/src/resources/extensions/gsd/tests/git-service.test.ts +49 -0
  314. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +1 -1
  315. package/src/resources/extensions/gsd/tests/infra-error.test.ts +12 -2
  316. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +39 -0
  317. package/src/resources/extensions/gsd/tests/md-importer.test.ts +1 -1
  318. package/src/resources/extensions/gsd/tests/memory-store.test.ts +2 -2
  319. package/src/resources/extensions/gsd/tests/quality-gates.test.ts +347 -0
  320. package/src/resources/extensions/gsd/tests/queue-completed-milestone-perf.test.ts +155 -0
  321. package/src/resources/extensions/gsd/tests/replan-slice.test.ts +2 -1
  322. package/src/resources/extensions/gsd/tests/repo-identity-worktree.test.ts +32 -0
  323. package/src/resources/extensions/gsd/tests/roadmap-slices.test.ts +26 -0
  324. package/src/resources/extensions/gsd/tests/run-uat.test.ts +20 -16
  325. package/src/resources/extensions/gsd/tests/session-lock-transient-read.test.ts +223 -0
  326. package/src/resources/extensions/gsd/tests/skill-activation.test.ts +44 -4
  327. package/src/resources/extensions/gsd/tests/tool-naming.test.ts +1 -1
  328. package/src/resources/extensions/gsd/tests/validate-milestone.test.ts +2 -1
  329. package/src/resources/extensions/gsd/tests/verification-gate.test.ts +0 -16
  330. package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +67 -0
  331. package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +1 -1
  332. package/src/resources/extensions/gsd/tests/worktree-sync-overwrite-loop.test.ts +204 -0
  333. package/src/resources/extensions/gsd/tools/plan-slice.ts +16 -0
  334. package/src/resources/extensions/gsd/tools/validate-milestone.ts +3 -3
  335. package/src/resources/extensions/gsd/types.ts +30 -0
  336. package/src/resources/extensions/gsd/verdict-parser.ts +95 -0
  337. package/src/resources/extensions/gsd/verification-gate.ts +0 -2
  338. package/src/resources/extensions/gsd/worktree-resolver.ts +31 -0
  339. package/src/resources/extensions/gsd/worktree.ts +3 -2
  340. package/src/resources/extensions/remote-questions/config.ts +3 -5
  341. package/src/resources/extensions/search-the-web/native-search.ts +8 -3
  342. package/src/resources/extensions/search-the-web/tool-search.ts +22 -2
  343. package/src/resources/skills/github-workflows/references/gh/SKILL.md +22 -1
  344. package/dist/resources/extensions/gsd/auto-worktree-sync.js +0 -191
  345. package/dist/resources/extensions/gsd/resource-version.js +0 -97
  346. package/dist/web/standalone/.next/static/chunks/4024.11ca5c01938e5948.js +0 -9
  347. package/dist/web/standalone/.next/static/chunks/app/page-12dd5ece0df4badc.js +0 -1
  348. package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +0 -1
  349. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +0 -1
  350. package/src/resources/extensions/gsd/auto-worktree-sync.ts +0 -234
  351. package/src/resources/extensions/gsd/resource-version.ts +0 -101
  352. /package/dist/web/standalone/.next/static/{gj-y5hikmhS--NT8Web6M → MkE9kzqUGny3-cSE0GNnm}/_buildManifest.js +0 -0
  353. /package/dist/web/standalone/.next/static/{gj-y5hikmhS--NT8Web6M → MkE9kzqUGny3-cSE0GNnm}/_ssgManifest.js +0 -0
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Centralized verdict extraction, normalization, and schema validation.
3
+ *
4
+ * All verdict-related logic lives here so that normalization rules
5
+ * (e.g. `passed` → `pass`) are applied consistently across the codebase.
6
+ */
7
+ import { extractUatType } from "./files.js";
8
+ // ── Verdict extraction ──────────────────────────────────────────────────
9
+ /**
10
+ * Extract and normalize the `verdict` value from YAML frontmatter.
11
+ *
12
+ * Normalization:
13
+ * - lowercased
14
+ * - `passed` → `pass`
15
+ *
16
+ * Returns `undefined` when frontmatter is absent or has no `verdict` field.
17
+ */
18
+ export function extractVerdict(content) {
19
+ const fmMatch = content.match(/^---\n([\s\S]*?)\n---/);
20
+ if (!fmMatch)
21
+ return undefined;
22
+ const verdictMatch = fmMatch[1].match(/verdict:\s*([\w-]+)/i);
23
+ if (!verdictMatch)
24
+ return undefined;
25
+ let v = verdictMatch[1].toLowerCase();
26
+ if (v === "passed")
27
+ v = "pass";
28
+ return v;
29
+ }
30
+ /**
31
+ * Returns `true` when the content's frontmatter contains a `verdict` field.
32
+ */
33
+ export function hasVerdict(content) {
34
+ return /verdict:\s*[\w-]+/i.test(content);
35
+ }
36
+ // ── UAT verdict schema ──────────────────────────────────────────────────
37
+ /**
38
+ * Base verdicts that are always acceptable for UAT results.
39
+ */
40
+ export const UAT_ACCEPTABLE_VERDICTS = ["pass", "passed"];
41
+ /**
42
+ * UAT types whose results may legitimately produce a `partial` verdict
43
+ * when all automatable checks pass but human-only checks remain.
44
+ */
45
+ const PARTIAL_ELIGIBLE_UAT_TYPES = [
46
+ "mixed",
47
+ "human-experience",
48
+ "live-runtime",
49
+ ];
50
+ /**
51
+ * Check whether a verdict is acceptable for a given UAT type.
52
+ *
53
+ * `pass` / `passed` are always acceptable. `partial` is acceptable only for
54
+ * UAT types that include non-automatable human checks.
55
+ */
56
+ export function isAcceptableUatVerdict(verdict, uatType) {
57
+ if (UAT_ACCEPTABLE_VERDICTS.includes(verdict))
58
+ return true;
59
+ if (verdict === "partial" && uatType && PARTIAL_ELIGIBLE_UAT_TYPES.includes(uatType)) {
60
+ return true;
61
+ }
62
+ return false;
63
+ }
64
+ // ── Milestone validation verdict schema ─────────────────────────────────
65
+ /**
66
+ * Valid verdicts for the `validate-milestone` tool.
67
+ */
68
+ export const VALIDATION_VERDICTS = ["pass", "needs-attention", "needs-remediation"];
69
+ /**
70
+ * Check whether a string is a valid milestone validation verdict.
71
+ */
72
+ export function isValidMilestoneVerdict(verdict) {
73
+ return VALIDATION_VERDICTS.includes(verdict);
74
+ }
75
+ // ── UAT type helper ─────────────────────────────────────────────────────
76
+ /**
77
+ * Extract the UAT type from content, defaulting to `"artifact-driven"`.
78
+ *
79
+ * The `"artifact-driven"` fallback is the original default used throughout
80
+ * the codebase when a UAT file lacks an explicit `## UAT Type` section.
81
+ */
82
+ export function getUatType(content) {
83
+ return extractUatType(content) ?? "artifact-driven";
84
+ }
@@ -72,6 +72,16 @@ export class WorktreeResolver {
72
72
  */
73
73
  enterMilestone(milestoneId, ctx) {
74
74
  this.validateMilestoneId(milestoneId);
75
+ // If worktree creation failed earlier this session, skip all future attempts
76
+ if (this.s.isolationDegraded) {
77
+ debugLog("WorktreeResolver", {
78
+ action: "enterMilestone",
79
+ milestoneId,
80
+ skipped: true,
81
+ reason: "isolation-degraded",
82
+ });
83
+ return;
84
+ }
75
85
  if (!this.deps.shouldUseWorktreeIsolation()) {
76
86
  debugLog("WorktreeResolver", {
77
87
  action: "enterMilestone",
@@ -136,6 +146,9 @@ export class WorktreeResolver {
136
146
  data: { milestoneId, error: msg, fallback: "project-root" },
137
147
  });
138
148
  ctx.notify(`Auto-worktree creation for ${milestoneId} failed: ${msg}. Continuing in project root.`, "warning");
149
+ // Degrade isolation for the rest of this session so mergeAndExit
150
+ // doesn't try to merge a nonexistent worktree branch (#2483)
151
+ this.s.isolationDegraded = true;
139
152
  // Do NOT update s.basePath — stay in project root
140
153
  }
141
154
  }
@@ -210,6 +223,17 @@ export class WorktreeResolver {
210
223
  */
211
224
  mergeAndExit(milestoneId, ctx) {
212
225
  this.validateMilestoneId(milestoneId);
226
+ // If worktree creation failed earlier, skip merge — work is on current branch (#2483)
227
+ if (this.s.isolationDegraded) {
228
+ debugLog("WorktreeResolver", {
229
+ action: "mergeAndExit",
230
+ milestoneId,
231
+ skipped: true,
232
+ reason: "isolation-degraded",
233
+ });
234
+ ctx.notify(`Skipping worktree merge for ${milestoneId} — isolation was degraded (worktree creation failed earlier). Work is on the current branch.`, "info");
235
+ return;
236
+ }
213
237
  const mode = this.deps.getIsolationMode();
214
238
  debugLog("WorktreeResolver", {
215
239
  action: "mergeAndExit",
@@ -220,8 +220,9 @@ export function getSliceBranchName(milestoneId, sliceId, worktreeName) {
220
220
  }
221
221
  return `gsd/${milestoneId}/${sliceId}`;
222
222
  }
223
- /** Regex that matches both plain and worktree-namespaced slice branches. */
224
- export const SLICE_BRANCH_RE = /^gsd\/(?:([a-zA-Z0-9_-]+)\/)?(M\d+(?:-[a-z0-9]{6})?)\/(S\d+)$/;
223
+ /** Re-export for backward compatibility canonical definition in branch-patterns.ts */
224
+ export { SLICE_BRANCH_RE } from "./branch-patterns.js";
225
+ import { SLICE_BRANCH_RE } from "./branch-patterns.js";
225
226
  /**
226
227
  * Parse a slice branch name into its components.
227
228
  * Handles both `gsd/M001/S01` and `gsd/myworktree/M001/S01`.
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Remote Questions — configuration resolution and validation
3
3
  */
4
- import { join } from "node:path";
4
+ import { AuthStorage } from "@gsd/pi-coding-agent";
5
5
  import { loadEffectiveGSDPreferences } from "../gsd/preferences.js";
6
6
  const ENV_KEYS = {
7
7
  slack: "SLACK_BOT_TOKEN",
@@ -39,9 +39,7 @@ function hydrateRemoteTokensFromAuth() {
39
39
  if (needed.length === 0)
40
40
  return;
41
41
  try {
42
- const { AuthStorage } = require("@gsd/pi-coding-agent");
43
- const authPath = join(process.env.HOME ?? "~", ".gsd", "agent", "auth.json");
44
- const auth = AuthStorage.create(authPath);
42
+ const auth = AuthStorage.create();
45
43
  for (const [providerId, envVar] of needed) {
46
44
  try {
47
45
  const creds = auth.getCredentialsForProvider(providerId);
@@ -56,7 +54,7 @@ function hydrateRemoteTokensFromAuth() {
56
54
  }
57
55
  }
58
56
  catch {
59
- // AuthStorage unavailable (unit tests, stripped build) — skip silently.
57
+ // AuthStorage unavailable or auth.json missing/unreadable — skip silently.
60
58
  }
61
59
  }
62
60
  export function resolveRemoteConfig() {
@@ -148,11 +148,15 @@ export function registerNativeSearchHooks(pi) {
148
148
  // the model and causes it to pick custom tools which can fail with network errors.
149
149
  tools = tools.filter((t) => !CUSTOM_SEARCH_TOOL_NAMES.includes(t.name));
150
150
  payload.tools = tools;
151
- // ── Session-level search budget (#1309) ──────────────────────────────
151
+ // ── Session-level search budget (#1309, #compaction-safe) ─────────────
152
152
  // Count web_search_tool_result blocks in the conversation history to
153
153
  // determine how many native searches have already been used this session.
154
154
  // The Anthropic API's max_uses resets per request, so without this guard,
155
155
  // pause_turn → resubmit cycles allow unlimited total searches.
156
+ //
157
+ // Use the monotonic high-water mark: take the max of the history count
158
+ // and the running counter. This prevents budget resets when context
159
+ // compaction removes web_search_tool_result blocks from history.
156
160
  if (Array.isArray(messages)) {
157
161
  let historySearchCount = 0;
158
162
  for (const msg of messages) {
@@ -165,8 +169,9 @@ export function registerNativeSearchHooks(pi) {
165
169
  }
166
170
  }
167
171
  }
168
- // Sync counter from history (handles session restore / context replay)
169
- sessionSearchCount = historySearchCount;
172
+ // High-water mark: never decrease the counter, even if compaction
173
+ // removes web_search_tool_result blocks from the visible history.
174
+ sessionSearchCount = Math.max(sessionSearchCount, historySearchCount);
170
175
  }
171
176
  const remaining = Math.max(0, MAX_NATIVE_SEARCHES_PER_SESSION - sessionSearchCount);
172
177
  if (remaining <= 0) {
@@ -27,13 +27,18 @@ const searchCache = new LRUTTLCache({ max: 100, ttlMs: 600_000 });
27
27
  searchCache.startPurgeInterval(60_000);
28
28
  // Consecutive duplicate search guard (#949)
29
29
  // Tracks recent query keys to detect and break search loops.
30
- const MAX_CONSECUTIVE_DUPES = 3;
30
+ const MAX_CONSECUTIVE_DUPES = 1;
31
31
  let lastSearchKey = "";
32
32
  let consecutiveDupeCount = 0;
33
- /** Reset session-scoped duplicate-search guard state. */
33
+ // Session-level total search budget (all queries, not just duplicates).
34
+ // Prevents unbounded search accumulation across varied queries.
35
+ const MAX_SEARCHES_PER_SESSION = 15;
36
+ let sessionTotalSearches = 0;
37
+ /** Reset session-scoped search guard state (both duplicate and budget). */
34
38
  export function resetSearchLoopGuardState() {
35
39
  lastSearchKey = "";
36
40
  consecutiveDupeCount = 0;
41
+ sessionTotalSearches = 0;
37
42
  }
38
43
  // Summarizer responses: max 50 entries, 15-minute TTL
39
44
  const summarizerCache = new LRUTTLCache({ max: 50, ttlMs: 900_000 });
@@ -221,6 +226,16 @@ export function registerSearchTool(pi) {
221
226
  details: { errorKind: "auth_error", error: "No search API key set" },
222
227
  };
223
228
  }
229
+ // ------------------------------------------------------------------
230
+ // Session-level search budget
231
+ // ------------------------------------------------------------------
232
+ if (sessionTotalSearches >= MAX_SEARCHES_PER_SESSION) {
233
+ return {
234
+ content: [{ type: "text", text: `⚠️ Search budget exhausted: ${sessionTotalSearches}/${MAX_SEARCHES_PER_SESSION} searches used this session. The information you need should already be in previous search results. Stop searching and use those results to proceed with your task.` }],
235
+ isError: true,
236
+ details: { errorKind: "budget_exhausted", error: `Session search budget exhausted (${MAX_SEARCHES_PER_SESSION})` },
237
+ };
238
+ }
224
239
  const count = params.count ?? 5;
225
240
  const wantSummary = params.summary ?? false;
226
241
  // ------------------------------------------------------------------
@@ -271,6 +286,8 @@ export function registerSearchTool(pi) {
271
286
  lastSearchKey = cacheKey;
272
287
  consecutiveDupeCount = 1;
273
288
  }
289
+ // Count every search that passes the guards toward the session budget.
290
+ sessionTotalSearches++;
274
291
  const cached = searchCache.get(cacheKey);
275
292
  if (cached) {
276
293
  const limited = cached.results.slice(0, count);
@@ -103,9 +103,12 @@ gh issue list -R gsd-build/gsd-2
103
103
  gh issue list -R gsd-build/gsd-2 --label "priority:p1" --state open
104
104
 
105
105
  # Create issue with labels and milestone
106
+ # NOTE: Do NOT use labels for issue classification (bug, feature, etc.)
107
+ # Use labels for metadata (priority, status, auto-generated) only.
108
+ # Issue classification uses GitHub Issue Types, set via GraphQL after creation.
106
109
  gh issue create -R gsd-build/gsd-2 \
107
110
  --title "feat: add feature X" \
108
- --label "priority:p1" --label "type:feature" \
111
+ --label "priority:p1" \
109
112
  --milestone "v1.0"
110
113
 
111
114
  # View issue
@@ -120,6 +123,24 @@ gh issue edit <number> -R gsd-build/gsd-2 \
120
123
  --remove-label "status:needs-grooming"
121
124
  ```
122
125
 
126
+ ### Issue Types (Classification)
127
+
128
+ `gh issue create` has no `--type` flag. Issue types (Bug, Feature Request, etc.) are set via GraphQL after creation:
129
+
130
+ ```bash
131
+ # Step 1: Create the issue (returns URL)
132
+ ISSUE_URL=$(gh issue create -R gsd-build/gsd-2 \
133
+ --title "..." --body "...")
134
+
135
+ # Step 2: Set the issue type via GraphQL
136
+ ISSUE_NUM=$(echo "$ISSUE_URL" | grep -oE '[0-9]+$')
137
+ ISSUE_ID=$(gh api graphql -f query='{ repository(owner:"gsd-build",name:"gsd-2") { issue(number:'"$ISSUE_NUM"') { id } } }' --jq '.data.repository.issue.id')
138
+ TYPE_ID=$(gh api graphql -f query='{ repository(owner:"gsd-build",name:"gsd-2") { issueTypes(first:20) { nodes { id name } } } }' --jq '.data.repository.issueTypes.nodes[] | select(.name=="Bug") | .id')
139
+ gh api graphql -f query='mutation { updateIssue(input:{id:"'"$ISSUE_ID"'",issueTypeId:"'"$TYPE_ID"'"}) { issue { number } } }'
140
+ ```
141
+
142
+ Replace `"Bug"` with the appropriate type name (`"Feature Request"`, `"Task"`, etc.).
143
+
123
144
  ### Labels
124
145
 
125
146
  ```bash
@@ -1 +1 @@
1
- gj-y5hikmhS--NT8Web6M
1
+ MkE9kzqUGny3-cSE0GNnm
@@ -1,45 +1,45 @@
1
1
  {
2
2
  "/_not-found/page": "/_not-found",
3
3
  "/_global-error/page": "/_global-error",
4
- "/api/boot/route": "/api/boot",
5
4
  "/api/bridge-terminal/input/route": "/api/bridge-terminal/input",
6
5
  "/api/bridge-terminal/resize/route": "/api/bridge-terminal/resize",
7
6
  "/api/browse-directories/route": "/api/browse-directories",
8
- "/api/captures/route": "/api/captures",
7
+ "/api/boot/route": "/api/boot",
9
8
  "/api/bridge-terminal/stream/route": "/api/bridge-terminal/stream",
10
- "/api/cleanup/route": "/api/cleanup",
11
9
  "/api/dev-mode/route": "/api/dev-mode",
12
10
  "/api/doctor/route": "/api/doctor",
13
- "/api/export-data/route": "/api/export-data",
11
+ "/api/cleanup/route": "/api/cleanup",
12
+ "/api/captures/route": "/api/captures",
14
13
  "/api/forensics/route": "/api/forensics",
15
14
  "/api/git/route": "/api/git",
16
15
  "/api/history/route": "/api/history",
17
- "/api/hooks/route": "/api/hooks",
18
16
  "/api/inspect/route": "/api/inspect",
19
17
  "/api/knowledge/route": "/api/knowledge",
20
- "/api/preferences/route": "/api/preferences",
18
+ "/api/hooks/route": "/api/hooks",
19
+ "/api/export-data/route": "/api/export-data",
21
20
  "/api/live-state/route": "/api/live-state",
21
+ "/api/preferences/route": "/api/preferences",
22
22
  "/api/recovery/route": "/api/recovery",
23
23
  "/api/onboarding/route": "/api/onboarding",
24
24
  "/api/projects/route": "/api/projects",
25
25
  "/api/session/browser/route": "/api/session/browser",
26
26
  "/api/session/command/route": "/api/session/command",
27
- "/api/session/events/route": "/api/session/events",
28
- "/api/settings-data/route": "/api/settings-data",
29
27
  "/api/shutdown/route": "/api/shutdown",
28
+ "/api/session/events/route": "/api/session/events",
30
29
  "/api/session/manage/route": "/api/session/manage",
31
- "/api/files/route": "/api/files",
30
+ "/api/settings-data/route": "/api/settings-data",
32
31
  "/api/skill-health/route": "/api/skill-health",
33
- "/api/terminal/input/route": "/api/terminal/input",
34
32
  "/api/steer/route": "/api/steer",
33
+ "/api/terminal/input/route": "/api/terminal/input",
35
34
  "/api/terminal/resize/route": "/api/terminal/resize",
35
+ "/api/files/route": "/api/files",
36
36
  "/api/switch-root/route": "/api/switch-root",
37
- "/api/terminal/sessions/route": "/api/terminal/sessions",
38
- "/api/undo/route": "/api/undo",
39
37
  "/api/terminal/stream/route": "/api/terminal/stream",
38
+ "/api/terminal/sessions/route": "/api/terminal/sessions",
40
39
  "/api/terminal/upload/route": "/api/terminal/upload",
41
40
  "/api/visualizer/route": "/api/visualizer",
42
- "/api/update/route": "/api/update",
41
+ "/api/undo/route": "/api/undo",
43
42
  "/api/remote-questions/route": "/api/remote-questions",
43
+ "/api/update/route": "/api/update",
44
44
  "/page": "/"
45
45
  }
@@ -4,14 +4,14 @@
4
4
  ],
5
5
  "devFiles": [],
6
6
  "lowPriorityFiles": [
7
- "static/gj-y5hikmhS--NT8Web6M/_buildManifest.js",
8
- "static/gj-y5hikmhS--NT8Web6M/_ssgManifest.js"
7
+ "static/MkE9kzqUGny3-cSE0GNnm/_buildManifest.js",
8
+ "static/MkE9kzqUGny3-cSE0GNnm/_ssgManifest.js"
9
9
  ],
10
10
  "rootMainFiles": [
11
- "static/chunks/webpack-0a4cd455ec4197d2.js",
11
+ "static/chunks/webpack-2473ce2c3879fff4.js",
12
12
  "static/chunks/4bd1b696-e5d7c65570c947b7.js",
13
13
  "static/chunks/3794-337d1ca25ad99a89.js",
14
- "static/chunks/main-app-d3d4c336195465f9.js"
14
+ "static/chunks/main-app-fdab67f7802d7832.js"
15
15
  ],
16
16
  "rootMainFilesTree": {},
17
17
  "pages": {
@@ -78,8 +78,8 @@
78
78
  "dynamicRoutes": {},
79
79
  "notFoundRoutes": [],
80
80
  "preview": {
81
- "previewModeId": "e2a33aa63c8645368009c75d8755ac70",
82
- "previewModeSigningKey": "afe5d0ed158c9b4b5c1393ef1d9c18d196241b5b3e1bed22ebeedcbb3c9d682a",
83
- "previewModeEncryptionKey": "194c5de569873adbb91ec7b66a670d5724ca52ed1d30b18a4c8380267419e51a"
81
+ "previewModeId": "aae32c3c220fe523a03409dee73da8e1",
82
+ "previewModeSigningKey": "3c56c1c8b76cefa46dd1ec853d0c1ca1b43760aba2e3f4950012763ec3d738db",
83
+ "previewModeEncryptionKey": "cd2ec266df334af56f57470efee08cbfd0e0a69b01217c2f2a101f0c9d0cb58d"
84
84
  }
85
85
  }
@@ -6,7 +6,7 @@
6
6
  "static/chunks/363642f4.f9053a63f1b97508.js",
7
7
  "static/chunks/4986-c2fc8845ce785303.js",
8
8
  "static/chunks/485.243af25f0cdf50d6.js",
9
- "static/chunks/4024.11ca5c01938e5948.js"
9
+ "static/chunks/4024.7c75ac378de0f2b5.js"
10
10
  ]
11
11
  },
12
12
  "components/gsd/chat-mode.tsx -> react-markdown": {
@@ -100,7 +100,7 @@
100
100
  "transform": "lodash/{{member}}"
101
101
  }
102
102
  },
103
- "outputFileTracingRoot": "/home/runner/_work/gsd-2/gsd-2",
103
+ "outputFileTracingRoot": "/__w/gsd-2/gsd-2",
104
104
  "cacheComponents": false,
105
105
  "cacheLife": {
106
106
  "default": {
@@ -157,7 +157,7 @@
157
157
  "proxyPrefetch": "flexible",
158
158
  "optimisticClientCache": true,
159
159
  "manualClientBasePath": false,
160
- "cpus": 5,
160
+ "cpus": 9,
161
161
  "memoryBasedWorkersCount": false,
162
162
  "imgOptConcurrency": null,
163
163
  "imgOptTimeoutInSeconds": 7,
@@ -297,11 +297,11 @@
297
297
  "node-pty"
298
298
  ],
299
299
  "turbopack": {
300
- "root": "/home/runner/_work/gsd-2/gsd-2"
300
+ "root": "/__w/gsd-2/gsd-2"
301
301
  },
302
302
  "distDirRoot": ".next"
303
303
  },
304
- "appDir": "/home/runner/_work/gsd-2/gsd-2/web",
304
+ "appDir": "/__w/gsd-2/gsd-2/web",
305
305
  "relativeAppDir": "web",
306
306
  "files": [
307
307
  ".next/routes-manifest.json",
@@ -1,3 +1,3 @@
1
- (()=>{var a={};a.id=896,a.ids=[896],a.modules={261:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/app-paths")},3295:a=>{"use strict";a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},17064:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,81921,23))},19121:a=>{"use strict";a.exports=require("next/dist/server/app-render/action-async-storage.external.js")},26713:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/is-bot")},28354:a=>{"use strict";a.exports=require("util")},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},33873:a=>{"use strict";a.exports=require("path")},41025:a=>{"use strict";a.exports=require("next/dist/server/app-render/dynamic-access-async-storage.external.js")},43954:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/interception-routes")},47052:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,81921,23)),Promise.resolve().then(c.t.bind(c,60440,23)),Promise.resolve().then(c.t.bind(c,84342,23)),Promise.resolve().then(c.t.bind(c,82265,23)),Promise.resolve().then(c.t.bind(c,35421,23)),Promise.resolve().then(c.t.bind(c,61335,23)),Promise.resolve().then(c.t.bind(c,70664,23)),Promise.resolve().then(c.bind(c,74661))},53512:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,95547,23))},60204:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,95547,23)),Promise.resolve().then(c.t.bind(c,15098,23)),Promise.resolve().then(c.t.bind(c,47644,23)),Promise.resolve().then(c.t.bind(c,33859,23)),Promise.resolve().then(c.t.bind(c,98099,23)),Promise.resolve().then(c.t.bind(c,16237,23)),Promise.resolve().then(c.t.bind(c,98562,23)),Promise.resolve().then(c.t.bind(c,36675,23))},62605:(a,b,c)=>{"use strict";function d(a){return a&&a.__esModule?a:{default:a}}c.r(b),c.d(b,{_:()=>d})},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},70152:(a,b,c)=>{"use strict";c.r(b),c.d(b,{GlobalError:()=>D.a,__next_app__:()=>L,handler:()=>N,routeModule:()=>M});var d=c(7553),e=c(84006),f=c(67798),g=c(34775),h=c(99373),i=c(73461),j=c(1020),k=c(26349),l=c(54365),m=c(16023),n=c(63747),o=c(24235),p=c(23938),q=c(261),r=c(66758),s=c(77243),t=c(26713),u=c(37527),v=c(22820),w=c(88216),x=c(47929),y=c(79551),z=c(89125),A=c(86439),B=c(77068),C=c(95547),D=c.n(C),E=c(61287),F=c(81494),G=c(70722),H=c(70753),I=c(43954),J={};for(let a in E)0>["default","GlobalError","__next_app__","routeModule","handler"].indexOf(a)&&(J[a]=()=>E[a]);c.d(b,J);let K={children:["",{children:["_global-error",{children:["__PAGE__",{},{page:[()=>Promise.resolve().then(c.t.bind(c,71311,23)),"next/dist/client/components/builtin/app-error.js"]}]},{}]},{"global-error":[()=>Promise.resolve().then(c.t.bind(c,95547,23)),"next/dist/client/components/builtin/global-error.js"],forbidden:[()=>Promise.resolve().then(c.t.bind(c,45270,23)),"next/dist/client/components/builtin/forbidden.js"],unauthorized:[()=>Promise.resolve().then(c.t.bind(c,28193,23)),"next/dist/client/components/builtin/unauthorized.js"]}]}.children,L={require:c,loadChunk:()=>Promise.resolve()},M=new d.AppPageRouteModule({definition:{kind:e.RouteKind.APP_PAGE,page:"/_global-error/page",pathname:"/_global-error",bundlePath:"",filename:"",appPaths:[]},userland:{loaderTree:K},distDir:".next",relativeProjectDir:""});async function N(a,b,d){var C;M.isDev&&(0,h.addRequestMeta)(a,"devRequestTimingInternalsEnd",process.hrtime.bigint());let J=!!(0,h.getRequestMeta)(a,"minimalMode"),O="/_global-error/page";"/index"===O&&(O="/");let P=await M.prepare(a,b,{srcPage:O,multiZoneDraftMode:!1});if(!P)return b.statusCode=400,b.end("Bad Request"),null==d.waitUntil||d.waitUntil.call(d,Promise.resolve()),null;let{buildId:Q,query:R,params:S,pageIsDynamic:T,buildManifest:U,nextFontManifest:V,reactLoadableManifest:W,serverActionsManifest:X,clientReferenceManifest:Y,subresourceIntegrityManifest:Z,prerenderManifest:$,isDraftMode:_,resolvedPathname:aa,revalidateOnlyGenerated:ab,routerServerContext:ac,nextConfig:ad,parsedUrl:ae,interceptionRoutePatterns:af,deploymentId:ag}=P,ah=(0,q.normalizeAppPath)(O),{isOnDemandRevalidate:ai}=P,aj=ad.experimental.ppr&&!ad.cacheComponents&&(0,I.isInterceptionRouteAppPath)(aa)?null:M.match(aa,$),ak=!!$.routes[aa],al=a.headers["user-agent"]||"",am=(0,t.getBotType)(al),an=(0,p.isHtmlBotRequest)(a),ao=(0,h.getRequestMeta)(a,"isPrefetchRSCRequest")??"1"===a.headers[s.NEXT_ROUTER_PREFETCH_HEADER],ap=(0,h.getRequestMeta)(a,"isRSCRequest")??!!a.headers[s.RSC_HEADER],aq=(0,r.getIsPossibleServerAction)(a),ar=(0,m.checkIsAppPPREnabled)(ad.experimental.ppr);if(!(0,h.getRequestMeta)(a,"postponed")&&ar&&"1"===a.headers[x.NEXT_RESUME_HEADER]&&"POST"===a.method){let b=[];for await(let c of a)b.push(c);let c=Buffer.concat(b).toString("utf8");(0,h.addRequestMeta)(a,"postponed",c)}let as=ar&&(null==(C=$.routes[ah]??$.dynamicRoutes[ah])?void 0:C.renderingMode)==="PARTIALLY_STATIC",at=!1,au=!1,av=as?(0,h.getRequestMeta)(a,"postponed"):void 0,aw=as&&ap&&!ao;J&&(aw=aw&&!!av);let ax=(0,h.getRequestMeta)(a,"segmentPrefetchRSCRequest"),ay=(!an||!as)&&(!al||(0,p.shouldServeStreamingMetadata)(al,ad.htmlLimitedBots)),az=!!((aj||ak||$.routes[ah])&&!(an&&as)),aA=as&&!0===ad.cacheComponents,aB=!0===M.isDev||!az||"string"==typeof av||(aA&&(0,h.getRequestMeta)(a,"onCacheEntryV2")?aw&&!J:aw),aC=an&&as,aD=null;_||!az||aB||aq||av||aw||(aD=aa);let aE=aD;!aE&&M.isDev&&(aE=aa),M.isDev||_||!az||!ap||aw||(0,k.d)(a.headers);let aF={...E,tree:K,GlobalError:D(),handler:N,routeModule:M,__next_app__:L};X&&Y&&(0,o.setManifestsSingleton)({page:O,clientReferenceManifest:Y,serverActionsManifest:X});let aG=a.method||"GET",aH=(0,g.getTracer)(),aI=aH.getActiveScopeSpan(),aJ=async()=>((null==ac?void 0:ac.render404)?await ac.render404(a,b,ae,!1):b.end("This page could not be found"),null);try{let f=M.getVaryHeader(aa,af);b.setHeader("Vary",f);let k=async(c,d)=>{let e=new l.NodeNextRequest(a),f=new l.NodeNextResponse(b);return M.render(e,f,d).finally(()=>{if(!c)return;c.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let a=aH.getRootSpanAttributes();if(!a)return;if(a.get("next.span_type")!==i.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${a.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let d=a.get("next.route");if(d){let a=`${aG} ${d}`;c.setAttributes({"next.route":d,"http.route":d,"next.span_name":a}),c.updateName(a)}else c.updateName(`${aG} ${O}`)})},m=(0,h.getRequestMeta)(a,"incrementalCache"),o=async({span:e,postponed:f,fallbackRouteParams:g,forceStaticRender:i})=>{let l={query:R,params:S,page:ah,sharedContext:{buildId:Q},serverComponentsHmrCache:(0,h.getRequestMeta)(a,"serverComponentsHmrCache"),fallbackRouteParams:g,renderOpts:{App:()=>null,Document:()=>null,pageConfig:{},ComponentMod:aF,Component:(0,j.T)(aF),params:S,routeModule:M,page:O,postponed:f,shouldWaitOnAllReady:aC,serveStreamingMetadata:ay,supportsDynamicResponse:"string"==typeof f||aB,buildManifest:U,nextFontManifest:V,reactLoadableManifest:W,subresourceIntegrityManifest:Z,setCacheStatus:null==ac?void 0:ac.setCacheStatus,setIsrStatus:null==ac?void 0:ac.setIsrStatus,setReactDebugChannel:null==ac?void 0:ac.setReactDebugChannel,sendErrorsToBrowser:null==ac?void 0:ac.sendErrorsToBrowser,dir:c(33873).join(process.cwd(),M.relativeProjectDir),isDraftMode:_,botType:am,isOnDemandRevalidate:ai,isPossibleServerAction:aq,assetPrefix:ad.assetPrefix,nextConfigOutput:ad.output,crossOrigin:ad.crossOrigin,trailingSlash:ad.trailingSlash,images:ad.images,previewProps:$.preview,deploymentId:ag,enableTainting:ad.experimental.taint,htmlLimitedBots:ad.htmlLimitedBots,reactMaxHeadersLength:ad.reactMaxHeadersLength,multiZoneDraftMode:!1,incrementalCache:m,cacheLifeProfiles:ad.cacheLife,basePath:ad.basePath,serverActions:ad.experimental.serverActions,...at||au?{nextExport:!0,supportsDynamicResponse:!1,isStaticGeneration:!0,isDebugDynamicAccesses:at}:{},cacheComponents:!!ad.cacheComponents,experimental:{isRoutePPREnabled:as,expireTime:ad.expireTime,staleTimes:ad.experimental.staleTimes,dynamicOnHover:!!ad.experimental.dynamicOnHover,inlineCss:!!ad.experimental.inlineCss,authInterrupts:!!ad.experimental.authInterrupts,clientTraceMetadata:ad.experimental.clientTraceMetadata||[],clientParamParsingOrigins:ad.experimental.clientParamParsingOrigins,maxPostponedStateSizeBytes:(0,B.parseMaxPostponedStateSize)(ad.experimental.maxPostponedStateSize)},waitUntil:d.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:()=>{},onInstrumentationRequestError:(b,c,d,e)=>M.onRequestError(a,b,d,e,ac),err:(0,h.getRequestMeta)(a,"invokeError"),dev:M.isDev}};at&&(l.renderOpts.nextExport=!0,l.renderOpts.supportsDynamicResponse=!1,l.renderOpts.isDebugDynamicAccesses=at),i&&(l.renderOpts.supportsDynamicResponse=!1);let n=await k(e,l),{metadata:o}=n,{cacheControl:p,headers:q={},fetchTags:r,fetchMetrics:s}=o;if(r&&(q[x.NEXT_CACHE_TAGS_HEADER]=r),a.fetchMetrics=s,az&&(null==p?void 0:p.revalidate)===0&&!M.isDev&&!as){let a=o.staticBailoutInfo,b=Object.defineProperty(Error(`Page changed from static to dynamic at runtime ${aa}${(null==a?void 0:a.description)?`, reason: ${a.description}`:""}
2
- see more here https://nextjs.org/docs/messages/app-static-to-dynamic-error`),"__NEXT_ERROR_CODE",{value:"E132",enumerable:!1,configurable:!0});if(null==a?void 0:a.stack){let c=a.stack;b.stack=b.message+c.substring(c.indexOf("\n"))}throw b}return{value:{kind:u.CachedRouteKind.APP_PAGE,html:n,headers:q,rscData:o.flightData,postponed:o.postponed,status:o.statusCode,segmentData:o.segmentData},cacheControl:p}},p=async({hasResolved:c,previousCacheEntry:f,isRevalidating:g,span:i,forceStaticRender:j=!1})=>{let k,l=!1===M.isDev,q=c||b.writableEnded;if(ai&&ab&&!f&&!J)return(null==ac?void 0:ac.render404)?await ac.render404(a,b):(b.statusCode=404,b.end("This page could not be found")),null;if(aj&&(k=(0,v.parseFallbackField)(aj.fallback)),k===v.FallbackMode.PRERENDER&&(0,t.isBot)(al)&&(!as||an)&&(k=v.FallbackMode.BLOCKING_STATIC_RENDER),(null==f?void 0:f.isStale)===-1&&(ai=!0),ai&&(k!==v.FallbackMode.NOT_FOUND||f)&&(k=v.FallbackMode.BLOCKING_STATIC_RENDER),!J&&k!==v.FallbackMode.BLOCKING_STATIC_RENDER&&aE&&!q&&!_&&T&&(l||!ak)){if((l||aj)&&k===v.FallbackMode.NOT_FOUND){if(ad.experimental.adapterPath)return await aJ();throw new A.NoFallbackError}if(as&&(ad.cacheComponents?!aw:!ap)){let b=l&&"string"==typeof(null==aj?void 0:aj.fallback)?aj.fallback:ah,c=l&&(null==aj?void 0:aj.fallbackRouteParams)?(0,n.createOpaqueFallbackRouteParams)(aj.fallbackRouteParams):au?(0,n.getFallbackRouteParams)(ah,M):null,f=await M.handleResponse({cacheKey:b,req:a,nextConfig:ad,routeKind:e.RouteKind.APP_PAGE,isFallback:!0,prerenderManifest:$,isRoutePPREnabled:as,responseGenerator:async()=>o({span:i,postponed:void 0,fallbackRouteParams:c,forceStaticRender:!1}),waitUntil:d.waitUntil,isMinimalMode:J});if(null===f)return null;if(f)return delete f.cacheControl,f}}let r=ai||g||!av?void 0:av;if(aA&&!J&&m&&aw&&!j){let b=await m.get(aa,{kind:u.IncrementalCacheKind.APP_PAGE,isRoutePPREnabled:!0,isFallback:!1});b&&b.value&&b.value.kind===u.CachedRouteKind.APP_PAGE&&(r=b.value.postponed,b&&(-1===b.isStale||!0===b.isStale)&&(0,H.scheduleOnNextTick)(async()=>{let b=M.getResponseCache(a);try{await b.revalidate(aa,m,as,!1,a=>p({...a,forceStaticRender:!0}),null,c,d.waitUntil)}catch(a){console.error("Error revalidating the page in the background",a)}}))}if(at&&void 0!==r)return{cacheControl:{revalidate:1,expire:void 0},value:{kind:u.CachedRouteKind.PAGES,html:w.default.EMPTY,pageData:{},headers:void 0,status:void 0}};let s=l&&(null==aj?void 0:aj.fallbackRouteParams)&&(0,h.getRequestMeta)(a,"renderFallbackShell")?(0,n.createOpaqueFallbackRouteParams)(aj.fallbackRouteParams):au?(0,n.getFallbackRouteParams)(ah,M):null;return o({span:i,postponed:r,fallbackRouteParams:s,forceStaticRender:j})},q=async c=>{var f,g,i,j,k;let l,m=await M.handleResponse({cacheKey:aD,responseGenerator:a=>p({span:c,...a}),routeKind:e.RouteKind.APP_PAGE,isOnDemandRevalidate:ai,isRoutePPREnabled:as,req:a,nextConfig:ad,prerenderManifest:$,waitUntil:d.waitUntil,isMinimalMode:J});if(_&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate"),M.isDev&&b.setHeader("Cache-Control","no-store, must-revalidate"),!m){if(aD)throw Object.defineProperty(Error("invariant: cache entry required but not generated"),"__NEXT_ERROR_CODE",{value:"E62",enumerable:!1,configurable:!0});return null}if((null==(f=m.value)?void 0:f.kind)!==u.CachedRouteKind.APP_PAGE)throw Object.defineProperty(Error(`Invariant app-page handler received invalid cache entry ${null==(i=m.value)?void 0:i.kind}`),"__NEXT_ERROR_CODE",{value:"E707",enumerable:!1,configurable:!0});let n="string"==typeof m.value.postponed;az&&!aw&&(!n||ao)&&(J||b.setHeader("x-nextjs-cache",ai?"REVALIDATED":m.isMiss?"MISS":m.isStale?"STALE":"HIT"),b.setHeader(s.NEXT_IS_PRERENDER_HEADER,"1"));let{value:q}=m;if(av)l={revalidate:0,expire:void 0};else if(aw)l={revalidate:0,expire:void 0};else if(!M.isDev)if(_)l={revalidate:0,expire:void 0};else if(az){if(m.cacheControl)if("number"==typeof m.cacheControl.revalidate){if(m.cacheControl.revalidate<1)throw Object.defineProperty(Error(`Invalid revalidate configuration provided: ${m.cacheControl.revalidate} < 1`),"__NEXT_ERROR_CODE",{value:"E22",enumerable:!1,configurable:!0});l={revalidate:m.cacheControl.revalidate,expire:(null==(j=m.cacheControl)?void 0:j.expire)??ad.expireTime}}else l={revalidate:x.CACHE_ONE_YEAR,expire:void 0}}else b.getHeader("Cache-Control")||(l={revalidate:0,expire:void 0});if(m.cacheControl=l,"string"==typeof ax&&(null==q?void 0:q.kind)===u.CachedRouteKind.APP_PAGE&&q.segmentData){b.setHeader(s.NEXT_DID_POSTPONE_HEADER,"2");let c=null==(k=q.headers)?void 0:k[x.NEXT_CACHE_TAGS_HEADER];J&&az&&c&&"string"==typeof c&&b.setHeader(x.NEXT_CACHE_TAGS_HEADER,c);let d=q.segmentData.get(ax);return void 0!==d?(0,z.sendRenderResult)({req:a,res:b,generateEtags:ad.generateEtags,poweredByHeader:ad.poweredByHeader,result:w.default.fromStatic(d,s.RSC_CONTENT_TYPE_HEADER),cacheControl:m.cacheControl}):(b.statusCode=204,(0,z.sendRenderResult)({req:a,res:b,generateEtags:ad.generateEtags,poweredByHeader:ad.poweredByHeader,result:w.default.EMPTY,cacheControl:m.cacheControl}))}let r=aA?(0,h.getRequestMeta)(a,"onCacheEntryV2")??(0,h.getRequestMeta)(a,"onCacheEntry"):(0,h.getRequestMeta)(a,"onCacheEntry");if(r&&await r(m,{url:(0,h.getRequestMeta)(a,"initURL")??a.url}))return null;if(q.headers){let a={...q.headers};for(let[c,d]of(J&&az||delete a[x.NEXT_CACHE_TAGS_HEADER],Object.entries(a)))if(void 0!==d)if(Array.isArray(d))for(let a of d)b.appendHeader(c,a);else"number"==typeof d&&(d=d.toString()),b.appendHeader(c,d)}let t=null==(g=q.headers)?void 0:g[x.NEXT_CACHE_TAGS_HEADER];if(J&&az&&t&&"string"==typeof t&&b.setHeader(x.NEXT_CACHE_TAGS_HEADER,t),!q.status||ap&&as||(b.statusCode=q.status),!J&&q.status&&F.RedirectStatusCode[q.status]&&ap&&(b.statusCode=200),n&&!aw&&b.setHeader(s.NEXT_DID_POSTPONE_HEADER,"1"),ap&&!_){if(void 0===q.rscData){if(q.html.contentType!==s.RSC_CONTENT_TYPE_HEADER)if(ad.cacheComponents)return b.statusCode=404,(0,z.sendRenderResult)({req:a,res:b,generateEtags:ad.generateEtags,poweredByHeader:ad.poweredByHeader,result:w.default.EMPTY,cacheControl:m.cacheControl});else throw Object.defineProperty(new G.InvariantError(`Expected RSC response, got ${q.html.contentType}`),"__NEXT_ERROR_CODE",{value:"E789",enumerable:!1,configurable:!0});return(0,z.sendRenderResult)({req:a,res:b,generateEtags:ad.generateEtags,poweredByHeader:ad.poweredByHeader,result:q.html,cacheControl:m.cacheControl})}return(0,z.sendRenderResult)({req:a,res:b,generateEtags:ad.generateEtags,poweredByHeader:ad.poweredByHeader,result:w.default.fromStatic(q.rscData,s.RSC_CONTENT_TYPE_HEADER),cacheControl:m.cacheControl})}let v=q.html;if(!n||J||ap)return(0,z.sendRenderResult)({req:a,res:b,generateEtags:ad.generateEtags,poweredByHeader:ad.poweredByHeader,result:v,cacheControl:m.cacheControl});if(at)return v.push(new ReadableStream({start(a){a.enqueue(y.ENCODED_TAGS.CLOSED.BODY_AND_HTML),a.close()}})),(0,z.sendRenderResult)({req:a,res:b,generateEtags:ad.generateEtags,poweredByHeader:ad.poweredByHeader,result:v,cacheControl:{revalidate:0,expire:void 0}});let A=new TransformStream;return v.push(A.readable),o({span:c,postponed:q.postponed,fallbackRouteParams:null,forceStaticRender:!1}).then(async a=>{var b,c;if(!a)throw Object.defineProperty(Error("Invariant: expected a result to be returned"),"__NEXT_ERROR_CODE",{value:"E463",enumerable:!1,configurable:!0});if((null==(b=a.value)?void 0:b.kind)!==u.CachedRouteKind.APP_PAGE)throw Object.defineProperty(Error(`Invariant: expected a page response, got ${null==(c=a.value)?void 0:c.kind}`),"__NEXT_ERROR_CODE",{value:"E305",enumerable:!1,configurable:!0});await a.value.html.pipeTo(A.writable)}).catch(a=>{A.writable.abort(a).catch(a=>{console.error("couldn't abort transformer",a)})}),(0,z.sendRenderResult)({req:a,res:b,generateEtags:ad.generateEtags,poweredByHeader:ad.poweredByHeader,result:v,cacheControl:{revalidate:0,expire:void 0}})};if(!aI)return await aH.withPropagatedContext(a.headers,()=>aH.trace(i.BaseServerSpan.handleRequest,{spanName:`${aG} ${O}`,kind:g.SpanKind.SERVER,attributes:{"http.method":aG,"http.target":a.url}},q));await q(aI)}catch(b){throw b instanceof A.NoFallbackError||await M.onRequestError(a,b,{routerKind:"App Router",routePath:O,routeType:"render",revalidateReason:(0,f.c)({isStaticGeneration:az,isOnDemandRevalidate:ai})},!1,ac),b}}},70722:a=>{"use strict";a.exports=require("next/dist/shared/lib/invariant-error")},71311:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"default",{enumerable:!0,get:function(){return k}}),c(62605);let d=c(5735);c(91986);let e={fontFamily:'system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"',height:"100vh",textAlign:"center",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center"},f={lineHeight:"48px"},g={display:"inline-block",margin:"0 20px 0 0",paddingRight:23,fontSize:24,fontWeight:500,verticalAlign:"top"},h={fontSize:14,fontWeight:400,lineHeight:"28px"},i={display:"inline-block"},j=`body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}
3
- @media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}`,k=function(){let a="Internal Server Error.",b=`500: ${a}`;return(0,d.jsxs)("html",{id:"__next_error__",children:[(0,d.jsx)("head",{children:(0,d.jsx)("title",{children:b})}),(0,d.jsx)("body",{children:(0,d.jsx)("div",{style:e,children:(0,d.jsxs)("div",{style:f,children:[(0,d.jsx)("style",{dangerouslySetInnerHTML:{__html:j}}),(0,d.jsx)("h1",{className:"next-error-h1",style:g,children:"500"}),(0,d.jsx)("div",{style:i,children:(0,d.jsx)("h2",{style:h,children:a})})]})})})]})};("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},77068:a=>{"use strict";a.exports=require("next/dist/shared/lib/size-limit")},78335:()=>{},86439:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external")},96487:()=>{}};var b=require("../../webpack-runtime.js");b.C(a);var c=b.X(0,[741,471],()=>b(b.s=70152));module.exports=c})();
1
+ (()=>{var a={};a.id=896,a.ids=[896],a.modules={261:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/app-paths")},334:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,81921,23))},3295:a=>{"use strict";a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},19121:a=>{"use strict";a.exports=require("next/dist/server/app-render/action-async-storage.external.js")},26713:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/is-bot")},28354:a=>{"use strict";a.exports=require("util")},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},33873:a=>{"use strict";a.exports=require("path")},39654:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,95547,23))},41025:a=>{"use strict";a.exports=require("next/dist/server/app-render/dynamic-access-async-storage.external.js")},43954:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/interception-routes")},52628:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,81921,23)),Promise.resolve().then(c.t.bind(c,60440,23)),Promise.resolve().then(c.t.bind(c,84342,23)),Promise.resolve().then(c.t.bind(c,82265,23)),Promise.resolve().then(c.t.bind(c,35421,23)),Promise.resolve().then(c.t.bind(c,61335,23)),Promise.resolve().then(c.t.bind(c,70664,23)),Promise.resolve().then(c.bind(c,74661))},62605:(a,b,c)=>{"use strict";function d(a){return a&&a.__esModule?a:{default:a}}c.r(b),c.d(b,{_:()=>d})},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},70722:a=>{"use strict";a.exports=require("next/dist/shared/lib/invariant-error")},71311:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"default",{enumerable:!0,get:function(){return k}}),c(62605);let d=c(5735);c(91986);let e={fontFamily:'system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"',height:"100vh",textAlign:"center",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center"},f={lineHeight:"48px"},g={display:"inline-block",margin:"0 20px 0 0",paddingRight:23,fontSize:24,fontWeight:500,verticalAlign:"top"},h={fontSize:14,fontWeight:400,lineHeight:"28px"},i={display:"inline-block"},j=`body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}
2
+ @media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}`,k=function(){let a="Internal Server Error.",b=`500: ${a}`;return(0,d.jsxs)("html",{id:"__next_error__",children:[(0,d.jsx)("head",{children:(0,d.jsx)("title",{children:b})}),(0,d.jsx)("body",{children:(0,d.jsx)("div",{style:e,children:(0,d.jsxs)("div",{style:f,children:[(0,d.jsx)("style",{dangerouslySetInnerHTML:{__html:j}}),(0,d.jsx)("h1",{className:"next-error-h1",style:g,children:"500"}),(0,d.jsx)("div",{style:i,children:(0,d.jsx)("h2",{style:h,children:a})})]})})})]})};("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},76596:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,95547,23)),Promise.resolve().then(c.t.bind(c,15098,23)),Promise.resolve().then(c.t.bind(c,47644,23)),Promise.resolve().then(c.t.bind(c,33859,23)),Promise.resolve().then(c.t.bind(c,98099,23)),Promise.resolve().then(c.t.bind(c,16237,23)),Promise.resolve().then(c.t.bind(c,98562,23)),Promise.resolve().then(c.t.bind(c,36675,23))},77068:a=>{"use strict";a.exports=require("next/dist/shared/lib/size-limit")},78335:()=>{},86439:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external")},96487:()=>{},99734:(a,b,c)=>{"use strict";c.r(b),c.d(b,{GlobalError:()=>D.a,__next_app__:()=>L,handler:()=>N,routeModule:()=>M});var d=c(7553),e=c(84006),f=c(67798),g=c(34775),h=c(99373),i=c(73461),j=c(1020),k=c(26349),l=c(54365),m=c(16023),n=c(63747),o=c(24235),p=c(23938),q=c(261),r=c(66758),s=c(77243),t=c(26713),u=c(37527),v=c(22820),w=c(88216),x=c(47929),y=c(79551),z=c(89125),A=c(86439),B=c(77068),C=c(95547),D=c.n(C),E=c(61287),F=c(81494),G=c(70722),H=c(70753),I=c(43954),J={};for(let a in E)0>["default","GlobalError","__next_app__","routeModule","handler"].indexOf(a)&&(J[a]=()=>E[a]);c.d(b,J);let K={children:["",{children:["_global-error",{children:["__PAGE__",{},{page:[()=>Promise.resolve().then(c.t.bind(c,71311,23)),"next/dist/client/components/builtin/app-error.js"]}]},{}]},{"global-error":[()=>Promise.resolve().then(c.t.bind(c,95547,23)),"next/dist/client/components/builtin/global-error.js"],forbidden:[()=>Promise.resolve().then(c.t.bind(c,45270,23)),"next/dist/client/components/builtin/forbidden.js"],unauthorized:[()=>Promise.resolve().then(c.t.bind(c,28193,23)),"next/dist/client/components/builtin/unauthorized.js"]}]}.children,L={require:c,loadChunk:()=>Promise.resolve()},M=new d.AppPageRouteModule({definition:{kind:e.RouteKind.APP_PAGE,page:"/_global-error/page",pathname:"/_global-error",bundlePath:"",filename:"",appPaths:[]},userland:{loaderTree:K},distDir:".next",relativeProjectDir:""});async function N(a,b,d){var C;M.isDev&&(0,h.addRequestMeta)(a,"devRequestTimingInternalsEnd",process.hrtime.bigint());let J=!!(0,h.getRequestMeta)(a,"minimalMode"),O="/_global-error/page";"/index"===O&&(O="/");let P=await M.prepare(a,b,{srcPage:O,multiZoneDraftMode:!1});if(!P)return b.statusCode=400,b.end("Bad Request"),null==d.waitUntil||d.waitUntil.call(d,Promise.resolve()),null;let{buildId:Q,query:R,params:S,pageIsDynamic:T,buildManifest:U,nextFontManifest:V,reactLoadableManifest:W,serverActionsManifest:X,clientReferenceManifest:Y,subresourceIntegrityManifest:Z,prerenderManifest:$,isDraftMode:_,resolvedPathname:aa,revalidateOnlyGenerated:ab,routerServerContext:ac,nextConfig:ad,parsedUrl:ae,interceptionRoutePatterns:af,deploymentId:ag}=P,ah=(0,q.normalizeAppPath)(O),{isOnDemandRevalidate:ai}=P,aj=ad.experimental.ppr&&!ad.cacheComponents&&(0,I.isInterceptionRouteAppPath)(aa)?null:M.match(aa,$),ak=!!$.routes[aa],al=a.headers["user-agent"]||"",am=(0,t.getBotType)(al),an=(0,p.isHtmlBotRequest)(a),ao=(0,h.getRequestMeta)(a,"isPrefetchRSCRequest")??"1"===a.headers[s.NEXT_ROUTER_PREFETCH_HEADER],ap=(0,h.getRequestMeta)(a,"isRSCRequest")??!!a.headers[s.RSC_HEADER],aq=(0,r.getIsPossibleServerAction)(a),ar=(0,m.checkIsAppPPREnabled)(ad.experimental.ppr);if(!(0,h.getRequestMeta)(a,"postponed")&&ar&&"1"===a.headers[x.NEXT_RESUME_HEADER]&&"POST"===a.method){let b=[];for await(let c of a)b.push(c);let c=Buffer.concat(b).toString("utf8");(0,h.addRequestMeta)(a,"postponed",c)}let as=ar&&(null==(C=$.routes[ah]??$.dynamicRoutes[ah])?void 0:C.renderingMode)==="PARTIALLY_STATIC",at=!1,au=!1,av=as?(0,h.getRequestMeta)(a,"postponed"):void 0,aw=as&&ap&&!ao;J&&(aw=aw&&!!av);let ax=(0,h.getRequestMeta)(a,"segmentPrefetchRSCRequest"),ay=(!an||!as)&&(!al||(0,p.shouldServeStreamingMetadata)(al,ad.htmlLimitedBots)),az=!!((aj||ak||$.routes[ah])&&!(an&&as)),aA=as&&!0===ad.cacheComponents,aB=!0===M.isDev||!az||"string"==typeof av||(aA&&(0,h.getRequestMeta)(a,"onCacheEntryV2")?aw&&!J:aw),aC=an&&as,aD=null;_||!az||aB||aq||av||aw||(aD=aa);let aE=aD;!aE&&M.isDev&&(aE=aa),M.isDev||_||!az||!ap||aw||(0,k.d)(a.headers);let aF={...E,tree:K,GlobalError:D(),handler:N,routeModule:M,__next_app__:L};X&&Y&&(0,o.setManifestsSingleton)({page:O,clientReferenceManifest:Y,serverActionsManifest:X});let aG=a.method||"GET",aH=(0,g.getTracer)(),aI=aH.getActiveScopeSpan(),aJ=async()=>((null==ac?void 0:ac.render404)?await ac.render404(a,b,ae,!1):b.end("This page could not be found"),null);try{let f=M.getVaryHeader(aa,af);b.setHeader("Vary",f);let k=async(c,d)=>{let e=new l.NodeNextRequest(a),f=new l.NodeNextResponse(b);return M.render(e,f,d).finally(()=>{if(!c)return;c.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let a=aH.getRootSpanAttributes();if(!a)return;if(a.get("next.span_type")!==i.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${a.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let d=a.get("next.route");if(d){let a=`${aG} ${d}`;c.setAttributes({"next.route":d,"http.route":d,"next.span_name":a}),c.updateName(a)}else c.updateName(`${aG} ${O}`)})},m=(0,h.getRequestMeta)(a,"incrementalCache"),o=async({span:e,postponed:f,fallbackRouteParams:g,forceStaticRender:i})=>{let l={query:R,params:S,page:ah,sharedContext:{buildId:Q},serverComponentsHmrCache:(0,h.getRequestMeta)(a,"serverComponentsHmrCache"),fallbackRouteParams:g,renderOpts:{App:()=>null,Document:()=>null,pageConfig:{},ComponentMod:aF,Component:(0,j.T)(aF),params:S,routeModule:M,page:O,postponed:f,shouldWaitOnAllReady:aC,serveStreamingMetadata:ay,supportsDynamicResponse:"string"==typeof f||aB,buildManifest:U,nextFontManifest:V,reactLoadableManifest:W,subresourceIntegrityManifest:Z,setCacheStatus:null==ac?void 0:ac.setCacheStatus,setIsrStatus:null==ac?void 0:ac.setIsrStatus,setReactDebugChannel:null==ac?void 0:ac.setReactDebugChannel,sendErrorsToBrowser:null==ac?void 0:ac.sendErrorsToBrowser,dir:c(33873).join(process.cwd(),M.relativeProjectDir),isDraftMode:_,botType:am,isOnDemandRevalidate:ai,isPossibleServerAction:aq,assetPrefix:ad.assetPrefix,nextConfigOutput:ad.output,crossOrigin:ad.crossOrigin,trailingSlash:ad.trailingSlash,images:ad.images,previewProps:$.preview,deploymentId:ag,enableTainting:ad.experimental.taint,htmlLimitedBots:ad.htmlLimitedBots,reactMaxHeadersLength:ad.reactMaxHeadersLength,multiZoneDraftMode:!1,incrementalCache:m,cacheLifeProfiles:ad.cacheLife,basePath:ad.basePath,serverActions:ad.experimental.serverActions,...at||au?{nextExport:!0,supportsDynamicResponse:!1,isStaticGeneration:!0,isDebugDynamicAccesses:at}:{},cacheComponents:!!ad.cacheComponents,experimental:{isRoutePPREnabled:as,expireTime:ad.expireTime,staleTimes:ad.experimental.staleTimes,dynamicOnHover:!!ad.experimental.dynamicOnHover,inlineCss:!!ad.experimental.inlineCss,authInterrupts:!!ad.experimental.authInterrupts,clientTraceMetadata:ad.experimental.clientTraceMetadata||[],clientParamParsingOrigins:ad.experimental.clientParamParsingOrigins,maxPostponedStateSizeBytes:(0,B.parseMaxPostponedStateSize)(ad.experimental.maxPostponedStateSize)},waitUntil:d.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:()=>{},onInstrumentationRequestError:(b,c,d,e)=>M.onRequestError(a,b,d,e,ac),err:(0,h.getRequestMeta)(a,"invokeError"),dev:M.isDev}};at&&(l.renderOpts.nextExport=!0,l.renderOpts.supportsDynamicResponse=!1,l.renderOpts.isDebugDynamicAccesses=at),i&&(l.renderOpts.supportsDynamicResponse=!1);let n=await k(e,l),{metadata:o}=n,{cacheControl:p,headers:q={},fetchTags:r,fetchMetrics:s}=o;if(r&&(q[x.NEXT_CACHE_TAGS_HEADER]=r),a.fetchMetrics=s,az&&(null==p?void 0:p.revalidate)===0&&!M.isDev&&!as){let a=o.staticBailoutInfo,b=Object.defineProperty(Error(`Page changed from static to dynamic at runtime ${aa}${(null==a?void 0:a.description)?`, reason: ${a.description}`:""}
3
+ see more here https://nextjs.org/docs/messages/app-static-to-dynamic-error`),"__NEXT_ERROR_CODE",{value:"E132",enumerable:!1,configurable:!0});if(null==a?void 0:a.stack){let c=a.stack;b.stack=b.message+c.substring(c.indexOf("\n"))}throw b}return{value:{kind:u.CachedRouteKind.APP_PAGE,html:n,headers:q,rscData:o.flightData,postponed:o.postponed,status:o.statusCode,segmentData:o.segmentData},cacheControl:p}},p=async({hasResolved:c,previousCacheEntry:f,isRevalidating:g,span:i,forceStaticRender:j=!1})=>{let k,l=!1===M.isDev,q=c||b.writableEnded;if(ai&&ab&&!f&&!J)return(null==ac?void 0:ac.render404)?await ac.render404(a,b):(b.statusCode=404,b.end("This page could not be found")),null;if(aj&&(k=(0,v.parseFallbackField)(aj.fallback)),k===v.FallbackMode.PRERENDER&&(0,t.isBot)(al)&&(!as||an)&&(k=v.FallbackMode.BLOCKING_STATIC_RENDER),(null==f?void 0:f.isStale)===-1&&(ai=!0),ai&&(k!==v.FallbackMode.NOT_FOUND||f)&&(k=v.FallbackMode.BLOCKING_STATIC_RENDER),!J&&k!==v.FallbackMode.BLOCKING_STATIC_RENDER&&aE&&!q&&!_&&T&&(l||!ak)){if((l||aj)&&k===v.FallbackMode.NOT_FOUND){if(ad.experimental.adapterPath)return await aJ();throw new A.NoFallbackError}if(as&&(ad.cacheComponents?!aw:!ap)){let b=l&&"string"==typeof(null==aj?void 0:aj.fallback)?aj.fallback:ah,c=l&&(null==aj?void 0:aj.fallbackRouteParams)?(0,n.createOpaqueFallbackRouteParams)(aj.fallbackRouteParams):au?(0,n.getFallbackRouteParams)(ah,M):null,f=await M.handleResponse({cacheKey:b,req:a,nextConfig:ad,routeKind:e.RouteKind.APP_PAGE,isFallback:!0,prerenderManifest:$,isRoutePPREnabled:as,responseGenerator:async()=>o({span:i,postponed:void 0,fallbackRouteParams:c,forceStaticRender:!1}),waitUntil:d.waitUntil,isMinimalMode:J});if(null===f)return null;if(f)return delete f.cacheControl,f}}let r=ai||g||!av?void 0:av;if(aA&&!J&&m&&aw&&!j){let b=await m.get(aa,{kind:u.IncrementalCacheKind.APP_PAGE,isRoutePPREnabled:!0,isFallback:!1});b&&b.value&&b.value.kind===u.CachedRouteKind.APP_PAGE&&(r=b.value.postponed,b&&(-1===b.isStale||!0===b.isStale)&&(0,H.scheduleOnNextTick)(async()=>{let b=M.getResponseCache(a);try{await b.revalidate(aa,m,as,!1,a=>p({...a,forceStaticRender:!0}),null,c,d.waitUntil)}catch(a){console.error("Error revalidating the page in the background",a)}}))}if(at&&void 0!==r)return{cacheControl:{revalidate:1,expire:void 0},value:{kind:u.CachedRouteKind.PAGES,html:w.default.EMPTY,pageData:{},headers:void 0,status:void 0}};let s=l&&(null==aj?void 0:aj.fallbackRouteParams)&&(0,h.getRequestMeta)(a,"renderFallbackShell")?(0,n.createOpaqueFallbackRouteParams)(aj.fallbackRouteParams):au?(0,n.getFallbackRouteParams)(ah,M):null;return o({span:i,postponed:r,fallbackRouteParams:s,forceStaticRender:j})},q=async c=>{var f,g,i,j,k;let l,m=await M.handleResponse({cacheKey:aD,responseGenerator:a=>p({span:c,...a}),routeKind:e.RouteKind.APP_PAGE,isOnDemandRevalidate:ai,isRoutePPREnabled:as,req:a,nextConfig:ad,prerenderManifest:$,waitUntil:d.waitUntil,isMinimalMode:J});if(_&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate"),M.isDev&&b.setHeader("Cache-Control","no-store, must-revalidate"),!m){if(aD)throw Object.defineProperty(Error("invariant: cache entry required but not generated"),"__NEXT_ERROR_CODE",{value:"E62",enumerable:!1,configurable:!0});return null}if((null==(f=m.value)?void 0:f.kind)!==u.CachedRouteKind.APP_PAGE)throw Object.defineProperty(Error(`Invariant app-page handler received invalid cache entry ${null==(i=m.value)?void 0:i.kind}`),"__NEXT_ERROR_CODE",{value:"E707",enumerable:!1,configurable:!0});let n="string"==typeof m.value.postponed;az&&!aw&&(!n||ao)&&(J||b.setHeader("x-nextjs-cache",ai?"REVALIDATED":m.isMiss?"MISS":m.isStale?"STALE":"HIT"),b.setHeader(s.NEXT_IS_PRERENDER_HEADER,"1"));let{value:q}=m;if(av)l={revalidate:0,expire:void 0};else if(aw)l={revalidate:0,expire:void 0};else if(!M.isDev)if(_)l={revalidate:0,expire:void 0};else if(az){if(m.cacheControl)if("number"==typeof m.cacheControl.revalidate){if(m.cacheControl.revalidate<1)throw Object.defineProperty(Error(`Invalid revalidate configuration provided: ${m.cacheControl.revalidate} < 1`),"__NEXT_ERROR_CODE",{value:"E22",enumerable:!1,configurable:!0});l={revalidate:m.cacheControl.revalidate,expire:(null==(j=m.cacheControl)?void 0:j.expire)??ad.expireTime}}else l={revalidate:x.CACHE_ONE_YEAR,expire:void 0}}else b.getHeader("Cache-Control")||(l={revalidate:0,expire:void 0});if(m.cacheControl=l,"string"==typeof ax&&(null==q?void 0:q.kind)===u.CachedRouteKind.APP_PAGE&&q.segmentData){b.setHeader(s.NEXT_DID_POSTPONE_HEADER,"2");let c=null==(k=q.headers)?void 0:k[x.NEXT_CACHE_TAGS_HEADER];J&&az&&c&&"string"==typeof c&&b.setHeader(x.NEXT_CACHE_TAGS_HEADER,c);let d=q.segmentData.get(ax);return void 0!==d?(0,z.sendRenderResult)({req:a,res:b,generateEtags:ad.generateEtags,poweredByHeader:ad.poweredByHeader,result:w.default.fromStatic(d,s.RSC_CONTENT_TYPE_HEADER),cacheControl:m.cacheControl}):(b.statusCode=204,(0,z.sendRenderResult)({req:a,res:b,generateEtags:ad.generateEtags,poweredByHeader:ad.poweredByHeader,result:w.default.EMPTY,cacheControl:m.cacheControl}))}let r=aA?(0,h.getRequestMeta)(a,"onCacheEntryV2")??(0,h.getRequestMeta)(a,"onCacheEntry"):(0,h.getRequestMeta)(a,"onCacheEntry");if(r&&await r(m,{url:(0,h.getRequestMeta)(a,"initURL")??a.url}))return null;if(q.headers){let a={...q.headers};for(let[c,d]of(J&&az||delete a[x.NEXT_CACHE_TAGS_HEADER],Object.entries(a)))if(void 0!==d)if(Array.isArray(d))for(let a of d)b.appendHeader(c,a);else"number"==typeof d&&(d=d.toString()),b.appendHeader(c,d)}let t=null==(g=q.headers)?void 0:g[x.NEXT_CACHE_TAGS_HEADER];if(J&&az&&t&&"string"==typeof t&&b.setHeader(x.NEXT_CACHE_TAGS_HEADER,t),!q.status||ap&&as||(b.statusCode=q.status),!J&&q.status&&F.RedirectStatusCode[q.status]&&ap&&(b.statusCode=200),n&&!aw&&b.setHeader(s.NEXT_DID_POSTPONE_HEADER,"1"),ap&&!_){if(void 0===q.rscData){if(q.html.contentType!==s.RSC_CONTENT_TYPE_HEADER)if(ad.cacheComponents)return b.statusCode=404,(0,z.sendRenderResult)({req:a,res:b,generateEtags:ad.generateEtags,poweredByHeader:ad.poweredByHeader,result:w.default.EMPTY,cacheControl:m.cacheControl});else throw Object.defineProperty(new G.InvariantError(`Expected RSC response, got ${q.html.contentType}`),"__NEXT_ERROR_CODE",{value:"E789",enumerable:!1,configurable:!0});return(0,z.sendRenderResult)({req:a,res:b,generateEtags:ad.generateEtags,poweredByHeader:ad.poweredByHeader,result:q.html,cacheControl:m.cacheControl})}return(0,z.sendRenderResult)({req:a,res:b,generateEtags:ad.generateEtags,poweredByHeader:ad.poweredByHeader,result:w.default.fromStatic(q.rscData,s.RSC_CONTENT_TYPE_HEADER),cacheControl:m.cacheControl})}let v=q.html;if(!n||J||ap)return(0,z.sendRenderResult)({req:a,res:b,generateEtags:ad.generateEtags,poweredByHeader:ad.poweredByHeader,result:v,cacheControl:m.cacheControl});if(at)return v.push(new ReadableStream({start(a){a.enqueue(y.ENCODED_TAGS.CLOSED.BODY_AND_HTML),a.close()}})),(0,z.sendRenderResult)({req:a,res:b,generateEtags:ad.generateEtags,poweredByHeader:ad.poweredByHeader,result:v,cacheControl:{revalidate:0,expire:void 0}});let A=new TransformStream;return v.push(A.readable),o({span:c,postponed:q.postponed,fallbackRouteParams:null,forceStaticRender:!1}).then(async a=>{var b,c;if(!a)throw Object.defineProperty(Error("Invariant: expected a result to be returned"),"__NEXT_ERROR_CODE",{value:"E463",enumerable:!1,configurable:!0});if((null==(b=a.value)?void 0:b.kind)!==u.CachedRouteKind.APP_PAGE)throw Object.defineProperty(Error(`Invariant: expected a page response, got ${null==(c=a.value)?void 0:c.kind}`),"__NEXT_ERROR_CODE",{value:"E305",enumerable:!1,configurable:!0});await a.value.html.pipeTo(A.writable)}).catch(a=>{A.writable.abort(a).catch(a=>{console.error("couldn't abort transformer",a)})}),(0,z.sendRenderResult)({req:a,res:b,generateEtags:ad.generateEtags,poweredByHeader:ad.poweredByHeader,result:v,cacheControl:{revalidate:0,expire:void 0}})};if(!aI)return await aH.withPropagatedContext(a.headers,()=>aH.trace(i.BaseServerSpan.handleRequest,{spanName:`${aG} ${O}`,kind:g.SpanKind.SERVER,attributes:{"http.method":aG,"http.target":a.url}},q));await q(aI)}catch(b){throw b instanceof A.NoFallbackError||await M.onRequestError(a,b,{routerKind:"App Router",routePath:O,routeType:"render",revalidateReason:(0,f.c)({isStaticGeneration:az,isOnDemandRevalidate:ai})},!1,ac),b}}}};var b=require("../../webpack-runtime.js");b.C(a);var c=b.X(0,[741,471],()=>b(b.s=99734));module.exports=c})();