gsd-pi 2.58.0-dev.d63175c → 2.58.0-dev.e002a57

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 (777) hide show
  1. package/README.md +1 -1
  2. package/dist/cli.js +60 -35
  3. package/dist/headless-ui.d.ts +17 -0
  4. package/dist/headless-ui.js +97 -3
  5. package/dist/headless.js +67 -6
  6. package/dist/help-text.js +1 -0
  7. package/dist/onboarding.js +44 -0
  8. package/dist/resource-loader.js +16 -1
  9. package/dist/resources/agents/researcher.md +1 -1
  10. package/dist/resources/extensions/ask-user-questions.js +16 -3
  11. package/dist/resources/extensions/async-jobs/extension-manifest.json +1 -1
  12. package/dist/resources/extensions/bg-shell/extension-manifest.json +1 -1
  13. package/dist/resources/extensions/browser-tools/extension-manifest.json +1 -1
  14. package/dist/resources/extensions/claude-code-cli/partial-builder.js +14 -6
  15. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +59 -36
  16. package/dist/resources/extensions/context7/extension-manifest.json +1 -1
  17. package/dist/resources/extensions/get-secrets-from-user.js +8 -5
  18. package/dist/resources/extensions/google-search/extension-manifest.json +1 -1
  19. package/dist/resources/extensions/google-search/index.js +2 -1
  20. package/dist/resources/extensions/gsd/auto/phases.js +25 -21
  21. package/dist/resources/extensions/gsd/auto-artifact-paths.js +2 -2
  22. package/dist/resources/extensions/gsd/auto-dashboard.js +37 -20
  23. package/dist/resources/extensions/gsd/auto-dispatch.js +17 -2
  24. package/dist/resources/extensions/gsd/auto-model-selection.js +26 -3
  25. package/dist/resources/extensions/gsd/auto-post-unit.js +16 -4
  26. package/dist/resources/extensions/gsd/auto-prompts.js +1 -1
  27. package/dist/resources/extensions/gsd/auto-recovery.js +13 -5
  28. package/dist/resources/extensions/gsd/auto-start.js +35 -22
  29. package/dist/resources/extensions/gsd/auto-worktree.js +199 -12
  30. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +32 -0
  31. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +80 -8
  32. package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +32 -1
  33. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +42 -34
  34. package/dist/resources/extensions/gsd/bootstrap/system-context.js +66 -12
  35. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +67 -0
  36. package/dist/resources/extensions/gsd/captures.js +56 -4
  37. package/dist/resources/extensions/gsd/codebase-generator.js +279 -0
  38. package/dist/resources/extensions/gsd/commands/catalog.js +10 -1
  39. package/dist/resources/extensions/gsd/commands/handlers/ops.js +5 -0
  40. package/dist/resources/extensions/gsd/commands-codebase.js +115 -0
  41. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +41 -4
  42. package/dist/resources/extensions/gsd/complexity-classifier.js +8 -6
  43. package/dist/resources/extensions/gsd/db-writer.js +116 -8
  44. package/dist/resources/extensions/gsd/doctor-git-checks.js +76 -1
  45. package/dist/resources/extensions/gsd/doctor-proactive.js +34 -1
  46. package/dist/resources/extensions/gsd/doctor-providers.js +2 -1
  47. package/dist/resources/extensions/gsd/doctor-runtime-checks.js +5 -4
  48. package/dist/resources/extensions/gsd/doctor.js +3 -1
  49. package/dist/resources/extensions/gsd/error-classifier.js +12 -10
  50. package/dist/resources/extensions/gsd/extension-manifest.json +16 -1
  51. package/dist/resources/extensions/gsd/forensics.js +123 -20
  52. package/dist/resources/extensions/gsd/git-service.js +105 -2
  53. package/dist/resources/extensions/gsd/gitignore.js +33 -0
  54. package/dist/resources/extensions/gsd/gsd-db.js +36 -9
  55. package/dist/resources/extensions/gsd/guided-flow.js +106 -44
  56. package/dist/resources/extensions/gsd/health-widget-core.js +31 -0
  57. package/dist/resources/extensions/gsd/health-widget.js +17 -0
  58. package/dist/resources/extensions/gsd/index.js +1 -1
  59. package/dist/resources/extensions/gsd/memory-extractor.js +7 -0
  60. package/dist/resources/extensions/gsd/migrate-external.js +8 -1
  61. package/dist/resources/extensions/gsd/milestone-validation-gates.js +45 -0
  62. package/dist/resources/extensions/gsd/model-cost-table.js +18 -0
  63. package/dist/resources/extensions/gsd/model-router.js +35 -1
  64. package/dist/resources/extensions/gsd/native-git-bridge.js +39 -0
  65. package/dist/resources/extensions/gsd/notifications.js +16 -1
  66. package/dist/resources/extensions/gsd/parallel-eligibility.js +13 -2
  67. package/dist/resources/extensions/gsd/parallel-merge.js +78 -5
  68. package/dist/resources/extensions/gsd/parsers-legacy.js +20 -3
  69. package/dist/resources/extensions/gsd/paths.js +45 -0
  70. package/dist/resources/extensions/gsd/preferences-models.js +14 -1
  71. package/dist/resources/extensions/gsd/preferences-types.js +3 -1
  72. package/dist/resources/extensions/gsd/preferences.js +13 -16
  73. package/dist/resources/extensions/gsd/prompt-loader.js +4 -1
  74. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +1 -1
  75. package/dist/resources/extensions/gsd/prompts/complete-slice.md +4 -2
  76. package/dist/resources/extensions/gsd/prompts/discuss-headless.md +1 -1
  77. package/dist/resources/extensions/gsd/prompts/discuss.md +1 -1
  78. package/dist/resources/extensions/gsd/prompts/execute-task.md +3 -1
  79. package/dist/resources/extensions/gsd/prompts/forensics.md +2 -2
  80. package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +1 -1
  81. package/dist/resources/extensions/gsd/prompts/guided-discuss-slice.md +1 -1
  82. package/dist/resources/extensions/gsd/prompts/plan-slice.md +2 -0
  83. package/dist/resources/extensions/gsd/prompts/rethink.md +1 -1
  84. package/dist/resources/extensions/gsd/prompts/triage-captures.md +1 -0
  85. package/dist/resources/extensions/gsd/repo-identity.js +205 -11
  86. package/dist/resources/extensions/gsd/rethink.js +5 -0
  87. package/dist/resources/extensions/gsd/roadmap-slices.js +5 -4
  88. package/dist/resources/extensions/gsd/state.js +85 -27
  89. package/dist/resources/extensions/gsd/tests/dist-redirect.mjs +20 -1
  90. package/dist/resources/extensions/gsd/tools/complete-task.js +34 -71
  91. package/dist/resources/extensions/gsd/tools/plan-milestone.js +12 -2
  92. package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +29 -1
  93. package/dist/resources/extensions/gsd/tools/validate-milestone.js +14 -3
  94. package/dist/resources/extensions/gsd/triage-resolution.js +22 -7
  95. package/dist/resources/extensions/gsd/undo.js +2 -2
  96. package/dist/resources/extensions/gsd/unit-ownership.js +164 -33
  97. package/dist/resources/extensions/gsd/verdict-parser.js +20 -8
  98. package/dist/resources/extensions/gsd/watch/header-renderer.js +241 -0
  99. package/dist/resources/extensions/gsd/workflow-manifest.js +24 -5
  100. package/dist/resources/extensions/gsd/workflow-projections.js +95 -63
  101. package/dist/resources/extensions/gsd/workflow-reconcile.js +35 -5
  102. package/dist/resources/extensions/gsd/workspace-index.js +24 -0
  103. package/dist/resources/extensions/gsd/worktree-manager.js +105 -1
  104. package/dist/resources/extensions/gsd/worktree-resolver.js +20 -3
  105. package/dist/resources/extensions/mcp-client/index.js +11 -7
  106. package/dist/resources/extensions/ollama/index.js +112 -0
  107. package/dist/resources/extensions/ollama/model-capabilities.js +115 -0
  108. package/dist/resources/extensions/ollama/ollama-client.js +168 -0
  109. package/dist/resources/extensions/ollama/ollama-commands.js +194 -0
  110. package/dist/resources/extensions/ollama/ollama-discovery.js +69 -0
  111. package/dist/resources/extensions/ollama/ollama-tool.js +184 -0
  112. package/dist/resources/extensions/ollama/types.js +2 -0
  113. package/dist/resources/extensions/search-the-web/extension-manifest.json +1 -1
  114. package/dist/resources/extensions/search-the-web/url-utils.js +17 -0
  115. package/dist/resources/extensions/shared/interview-ui.js +11 -1
  116. package/dist/resources/skills/create-gsd-extension/SKILL.md +5 -3
  117. package/dist/resources/skills/create-gsd-extension/references/key-rules-gotchas.md +5 -4
  118. package/dist/resources/skills/create-gsd-extension/workflows/add-capability.md +2 -2
  119. package/dist/resources/skills/create-gsd-extension/workflows/create-extension.md +4 -4
  120. package/dist/resources/skills/create-gsd-extension/workflows/debug-extension.md +5 -3
  121. package/dist/security-overrides.d.ts +11 -0
  122. package/dist/security-overrides.js +41 -0
  123. package/dist/startup-model-validation.d.ts +39 -0
  124. package/dist/startup-model-validation.js +50 -0
  125. package/dist/web/standalone/.next/BUILD_ID +1 -1
  126. package/dist/web/standalone/.next/app-path-routes-manifest.json +17 -17
  127. package/dist/web/standalone/.next/build-manifest.json +3 -3
  128. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  129. package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
  130. package/dist/web/standalone/.next/required-server-files.json +1 -1
  131. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  132. package/dist/web/standalone/.next/server/app/_global-error.html +2 -2
  133. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  134. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  135. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  136. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  137. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  138. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  139. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  140. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  141. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  142. package/dist/web/standalone/.next/server/app/_not-found.rsc +2 -2
  143. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  144. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  145. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  146. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  147. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  148. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  149. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  150. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  151. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  152. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  153. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  154. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  155. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  156. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  157. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  158. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  159. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  160. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  161. package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
  162. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  163. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  164. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  165. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  166. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  167. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  168. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  169. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  170. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  171. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  172. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  173. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  174. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  175. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  176. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  177. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  178. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  179. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  180. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  181. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  182. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  183. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  184. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  185. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  186. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  187. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  188. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  189. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  190. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  191. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  192. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  193. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  194. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  195. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  196. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  197. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  198. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  199. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  200. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  201. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  202. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  203. package/dist/web/standalone/.next/server/app/index.html +1 -1
  204. package/dist/web/standalone/.next/server/app/index.rsc +2 -2
  205. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  206. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +2 -2
  207. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  208. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +2 -2
  209. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  210. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  211. package/dist/web/standalone/.next/server/app-paths-manifest.json +17 -17
  212. package/dist/web/standalone/.next/server/chunks/2229.js +2 -2
  213. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  214. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  215. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  216. package/dist/web/standalone/.next/server/pages/500.html +2 -2
  217. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  218. package/dist/web/standalone/.next/static/chunks/6502.7593d7797a4b3999.js +9 -0
  219. package/dist/web/standalone/.next/static/chunks/{webpack-61d3afac6d0f0ce7.js → webpack-a1c1e452c6b32d04.js} +1 -1
  220. package/dist/web/standalone/.next/static/css/f6e8833d46e738d8.css +1 -0
  221. package/dist/web/standalone/server.js +1 -1
  222. package/dist/web-mode.js +2 -1
  223. package/dist/welcome-screen.d.ts +1 -0
  224. package/dist/welcome-screen.js +32 -6
  225. package/package.json +2 -2
  226. package/packages/native/dist/ast/index.js +9 -5
  227. package/packages/native/dist/ast/types.js +2 -1
  228. package/packages/native/dist/clipboard/index.js +12 -7
  229. package/packages/native/dist/clipboard/types.js +2 -1
  230. package/packages/native/dist/diff/index.js +12 -7
  231. package/packages/native/dist/diff/types.js +2 -1
  232. package/packages/native/dist/fd/index.js +6 -3
  233. package/packages/native/dist/fd/types.js +2 -1
  234. package/packages/native/dist/glob/index.js +9 -5
  235. package/packages/native/dist/glob/types.js +2 -1
  236. package/packages/native/dist/grep/index.js +9 -5
  237. package/packages/native/dist/grep/types.js +2 -1
  238. package/packages/native/dist/gsd-parser/index.js +18 -11
  239. package/packages/native/dist/gsd-parser/types.js +2 -1
  240. package/packages/native/dist/highlight/index.js +12 -7
  241. package/packages/native/dist/highlight/types.js +2 -1
  242. package/packages/native/dist/html/index.js +6 -3
  243. package/packages/native/dist/html/types.js +2 -1
  244. package/packages/native/dist/image/index.js +10 -5
  245. package/packages/native/dist/image/types.js +7 -4
  246. package/packages/native/dist/index.js +70 -17
  247. package/packages/native/dist/json-parse/index.js +13 -8
  248. package/packages/native/dist/native.js +47 -10
  249. package/packages/native/dist/ps/index.js +15 -9
  250. package/packages/native/dist/ps/types.js +2 -1
  251. package/packages/native/dist/stream-process/index.js +12 -7
  252. package/packages/native/dist/text/index.js +24 -14
  253. package/packages/native/dist/text/types.js +5 -2
  254. package/packages/native/dist/truncate/index.js +12 -7
  255. package/packages/native/dist/ttsr/index.js +12 -7
  256. package/packages/native/dist/ttsr/types.js +2 -1
  257. package/packages/native/dist/xxhash/index.js +9 -5
  258. package/packages/native/package.json +19 -19
  259. package/packages/native/src/__tests__/module-compat.test.mjs +91 -0
  260. package/packages/native/src/native.ts +9 -8
  261. package/packages/pi-agent-core/dist/agent-loop.js +3 -2
  262. package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
  263. package/packages/pi-agent-core/dist/proxy.d.ts +1 -1
  264. package/packages/pi-agent-core/dist/proxy.d.ts.map +1 -1
  265. package/packages/pi-agent-core/dist/proxy.js.map +1 -1
  266. package/packages/pi-agent-core/src/agent-loop.test.ts +45 -0
  267. package/packages/pi-agent-core/src/agent-loop.ts +3 -2
  268. package/packages/pi-agent-core/src/proxy.ts +1 -1
  269. package/packages/pi-ai/dist/env-api-keys.js +1 -0
  270. package/packages/pi-ai/dist/env-api-keys.js.map +1 -1
  271. package/packages/pi-ai/dist/index.d.ts +1 -0
  272. package/packages/pi-ai/dist/index.d.ts.map +1 -1
  273. package/packages/pi-ai/dist/index.js +1 -0
  274. package/packages/pi-ai/dist/index.js.map +1 -1
  275. package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
  276. package/packages/pi-ai/dist/providers/anthropic-shared.js +19 -2
  277. package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
  278. package/packages/pi-ai/dist/providers/anthropic-shared.test.d.ts +2 -0
  279. package/packages/pi-ai/dist/providers/anthropic-shared.test.d.ts.map +1 -0
  280. package/packages/pi-ai/dist/providers/anthropic-shared.test.js +25 -0
  281. package/packages/pi-ai/dist/providers/anthropic-shared.test.js.map +1 -0
  282. package/packages/pi-ai/dist/types.d.ts +3 -3
  283. package/packages/pi-ai/dist/types.d.ts.map +1 -1
  284. package/packages/pi-ai/dist/types.js.map +1 -1
  285. package/packages/pi-ai/dist/utils/json-parse.d.ts +3 -0
  286. package/packages/pi-ai/dist/utils/json-parse.d.ts.map +1 -1
  287. package/packages/pi-ai/dist/utils/json-parse.js +24 -1
  288. package/packages/pi-ai/dist/utils/json-parse.js.map +1 -1
  289. package/packages/pi-ai/dist/utils/repair-tool-json.d.ts +37 -0
  290. package/packages/pi-ai/dist/utils/repair-tool-json.d.ts.map +1 -0
  291. package/packages/pi-ai/dist/utils/repair-tool-json.js +75 -0
  292. package/packages/pi-ai/dist/utils/repair-tool-json.js.map +1 -0
  293. package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.d.ts +2 -0
  294. package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.d.ts.map +1 -0
  295. package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.js +73 -0
  296. package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.js.map +1 -0
  297. package/packages/pi-ai/src/env-api-keys.ts +1 -0
  298. package/packages/pi-ai/src/index.ts +1 -0
  299. package/packages/pi-ai/src/providers/anthropic-shared.test.ts +29 -0
  300. package/packages/pi-ai/src/providers/anthropic-shared.ts +17 -2
  301. package/packages/pi-ai/src/types.ts +3 -2
  302. package/packages/pi-ai/src/utils/json-parse.ts +28 -1
  303. package/packages/pi-ai/src/utils/repair-tool-json.ts +88 -0
  304. package/packages/pi-ai/src/utils/tests/repair-tool-json.test.ts +102 -0
  305. package/packages/pi-coding-agent/dist/core/agent-session.d.ts +4 -0
  306. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  307. package/packages/pi-coding-agent/dist/core/agent-session.js +31 -0
  308. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  309. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts +17 -1
  310. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
  311. package/packages/pi-coding-agent/dist/core/compaction/compaction.js +62 -2
  312. package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
  313. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.d.ts +6 -0
  314. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.d.ts.map +1 -0
  315. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js +176 -0
  316. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js.map +1 -0
  317. package/packages/pi-coding-agent/dist/core/exec.d.ts.map +1 -1
  318. package/packages/pi-coding-agent/dist/core/exec.js +3 -1
  319. package/packages/pi-coding-agent/dist/core/exec.js.map +1 -1
  320. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.d.ts +28 -0
  321. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.d.ts.map +1 -0
  322. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.js +37 -0
  323. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.js.map +1 -0
  324. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.d.ts +2 -0
  325. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.d.ts.map +1 -0
  326. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.js +63 -0
  327. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.js.map +1 -0
  328. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.d.ts +19 -0
  329. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.d.ts.map +1 -0
  330. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.js +115 -0
  331. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.js.map +1 -0
  332. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.d.ts +2 -0
  333. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.d.ts.map +1 -0
  334. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.js +109 -0
  335. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.js.map +1 -0
  336. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +4 -0
  337. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
  338. package/packages/pi-coding-agent/dist/core/extensions/index.js +2 -0
  339. package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
  340. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts +5 -0
  341. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
  342. package/packages/pi-coding-agent/dist/core/extensions/loader.js +5 -0
  343. package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  344. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.d.ts +44 -0
  345. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.d.ts.map +1 -0
  346. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.js +97 -0
  347. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.js.map +1 -0
  348. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.test.d.ts +2 -0
  349. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.test.d.ts.map +1 -0
  350. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.test.js +181 -0
  351. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.test.js.map +1 -0
  352. package/packages/pi-coding-agent/dist/core/index.d.ts +1 -1
  353. package/packages/pi-coding-agent/dist/core/index.d.ts.map +1 -1
  354. package/packages/pi-coding-agent/dist/core/index.js +1 -1
  355. package/packages/pi-coding-agent/dist/core/index.js.map +1 -1
  356. package/packages/pi-coding-agent/dist/core/lsp/index.d.ts.map +1 -1
  357. package/packages/pi-coding-agent/dist/core/lsp/index.js +3 -0
  358. package/packages/pi-coding-agent/dist/core/lsp/index.js.map +1 -1
  359. package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts.map +1 -1
  360. package/packages/pi-coding-agent/dist/core/lsp/lspmux.js +3 -0
  361. package/packages/pi-coding-agent/dist/core/lsp/lspmux.js.map +1 -1
  362. package/packages/pi-coding-agent/dist/core/messages.d.ts.map +1 -1
  363. package/packages/pi-coding-agent/dist/core/messages.js +31 -2
  364. package/packages/pi-coding-agent/dist/core/messages.js.map +1 -1
  365. package/packages/pi-coding-agent/dist/core/messages.test.d.ts +9 -0
  366. package/packages/pi-coding-agent/dist/core/messages.test.d.ts.map +1 -0
  367. package/packages/pi-coding-agent/dist/core/messages.test.js +86 -0
  368. package/packages/pi-coding-agent/dist/core/messages.test.js.map +1 -0
  369. package/packages/pi-coding-agent/dist/core/model-resolver.d.ts.map +1 -1
  370. package/packages/pi-coding-agent/dist/core/model-resolver.js +1 -0
  371. package/packages/pi-coding-agent/dist/core/model-resolver.js.map +1 -1
  372. package/packages/pi-coding-agent/dist/core/resolve-config-value.d.ts +8 -0
  373. package/packages/pi-coding-agent/dist/core/resolve-config-value.d.ts.map +1 -1
  374. package/packages/pi-coding-agent/dist/core/resolve-config-value.js +23 -2
  375. package/packages/pi-coding-agent/dist/core/resolve-config-value.js.map +1 -1
  376. package/packages/pi-coding-agent/dist/core/resolve-config-value.test.js +89 -2
  377. package/packages/pi-coding-agent/dist/core/resolve-config-value.test.js.map +1 -1
  378. package/packages/pi-coding-agent/dist/core/resource-loader.d.ts +10 -0
  379. package/packages/pi-coding-agent/dist/core/resource-loader.d.ts.map +1 -1
  380. package/packages/pi-coding-agent/dist/core/resource-loader.js +12 -1
  381. package/packages/pi-coding-agent/dist/core/resource-loader.js.map +1 -1
  382. package/packages/pi-coding-agent/dist/core/retry-handler.d.ts +6 -0
  383. package/packages/pi-coding-agent/dist/core/retry-handler.d.ts.map +1 -1
  384. package/packages/pi-coding-agent/dist/core/retry-handler.js +48 -1
  385. package/packages/pi-coding-agent/dist/core/retry-handler.js.map +1 -1
  386. package/packages/pi-coding-agent/dist/core/retry-handler.test.d.ts +9 -0
  387. package/packages/pi-coding-agent/dist/core/retry-handler.test.d.ts.map +1 -0
  388. package/packages/pi-coding-agent/dist/core/retry-handler.test.js +193 -0
  389. package/packages/pi-coding-agent/dist/core/retry-handler.test.js.map +1 -0
  390. package/packages/pi-coding-agent/dist/core/settings-manager-security.test.d.ts +2 -0
  391. package/packages/pi-coding-agent/dist/core/settings-manager-security.test.d.ts.map +1 -0
  392. package/packages/pi-coding-agent/dist/core/settings-manager-security.test.js +83 -0
  393. package/packages/pi-coding-agent/dist/core/settings-manager-security.test.js.map +1 -0
  394. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +14 -0
  395. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  396. package/packages/pi-coding-agent/dist/core/settings-manager.js +36 -3
  397. package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  398. package/packages/pi-coding-agent/dist/core/tools/hashline-read.d.ts.map +1 -1
  399. package/packages/pi-coding-agent/dist/core/tools/hashline-read.js +10 -3
  400. package/packages/pi-coding-agent/dist/core/tools/hashline-read.js.map +1 -1
  401. package/packages/pi-coding-agent/dist/core/tools/read.d.ts.map +1 -1
  402. package/packages/pi-coding-agent/dist/core/tools/read.js +13 -4
  403. package/packages/pi-coding-agent/dist/core/tools/read.js.map +1 -1
  404. package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.d.ts +16 -0
  405. package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.d.ts.map +1 -0
  406. package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.js +80 -0
  407. package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.js.map +1 -0
  408. package/packages/pi-coding-agent/dist/index.d.ts +3 -2
  409. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  410. package/packages/pi-coding-agent/dist/index.js +2 -1
  411. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  412. package/packages/pi-coding-agent/dist/modes/interactive/components/armin.d.ts +1 -1
  413. package/packages/pi-coding-agent/dist/modes/interactive/components/armin.d.ts.map +1 -1
  414. package/packages/pi-coding-agent/dist/modes/interactive/components/armin.js +9 -8
  415. package/packages/pi-coding-agent/dist/modes/interactive/components/armin.js.map +1 -1
  416. package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  417. package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js +0 -3
  418. package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js.map +1 -1
  419. package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.d.ts +1 -0
  420. package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  421. package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.js +2 -1
  422. package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.js.map +1 -1
  423. package/packages/pi-coding-agent/dist/modes/interactive/components/bordered-loader.js +1 -1
  424. package/packages/pi-coding-agent/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  425. package/packages/pi-coding-agent/dist/modes/interactive/components/branch-summary-message.js +1 -1
  426. package/packages/pi-coding-agent/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  427. package/packages/pi-coding-agent/dist/modes/interactive/components/compaction-summary-message.js +1 -1
  428. package/packages/pi-coding-agent/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  429. package/packages/pi-coding-agent/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  430. package/packages/pi-coding-agent/dist/modes/interactive/components/config-selector.js +5 -2
  431. package/packages/pi-coding-agent/dist/modes/interactive/components/config-selector.js.map +1 -1
  432. package/packages/pi-coding-agent/dist/modes/interactive/components/countdown-timer.d.ts +1 -0
  433. package/packages/pi-coding-agent/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
  434. package/packages/pi-coding-agent/dist/modes/interactive/components/countdown-timer.js +4 -0
  435. package/packages/pi-coding-agent/dist/modes/interactive/components/countdown-timer.js.map +1 -1
  436. package/packages/pi-coding-agent/dist/modes/interactive/components/custom-message.js +1 -1
  437. package/packages/pi-coding-agent/dist/modes/interactive/components/custom-message.js.map +1 -1
  438. package/packages/pi-coding-agent/dist/modes/interactive/components/daxnuts.d.ts +1 -1
  439. package/packages/pi-coding-agent/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
  440. package/packages/pi-coding-agent/dist/modes/interactive/components/daxnuts.js +4 -2
  441. package/packages/pi-coding-agent/dist/modes/interactive/components/daxnuts.js.map +1 -1
  442. package/packages/pi-coding-agent/dist/modes/interactive/components/diff.js +2 -2
  443. package/packages/pi-coding-agent/dist/modes/interactive/components/diff.js.map +1 -1
  444. package/packages/pi-coding-agent/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
  445. package/packages/pi-coding-agent/dist/modes/interactive/components/dynamic-border.js +8 -1
  446. package/packages/pi-coding-agent/dist/modes/interactive/components/dynamic-border.js.map +1 -1
  447. package/packages/pi-coding-agent/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  448. package/packages/pi-coding-agent/dist/modes/interactive/components/extension-input.js +2 -0
  449. package/packages/pi-coding-agent/dist/modes/interactive/components/extension-input.js.map +1 -1
  450. package/packages/pi-coding-agent/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  451. package/packages/pi-coding-agent/dist/modes/interactive/components/extension-selector.js +4 -0
  452. package/packages/pi-coding-agent/dist/modes/interactive/components/extension-selector.js.map +1 -1
  453. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
  454. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +26 -12
  455. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
  456. package/packages/pi-coding-agent/dist/modes/interactive/components/oauth-selector.js +4 -4
  457. package/packages/pi-coding-agent/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  458. package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.d.ts +3 -0
  459. package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.d.ts.map +1 -1
  460. package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.js +46 -14
  461. package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.js.map +1 -1
  462. package/packages/pi-coding-agent/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  463. package/packages/pi-coding-agent/dist/modes/interactive/components/scoped-models-selector.js +2 -8
  464. package/packages/pi-coding-agent/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  465. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector.js +4 -4
  466. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector.js.map +1 -1
  467. package/packages/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.js +2 -2
  468. package/packages/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  469. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  470. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +8 -3
  471. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
  472. package/packages/pi-coding-agent/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  473. package/packages/pi-coding-agent/dist/modes/interactive/components/user-message-selector.js +3 -2
  474. package/packages/pi-coding-agent/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  475. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  476. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +19 -1
  477. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  478. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.d.ts.map +1 -1
  479. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js +16 -1
  480. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js.map +1 -1
  481. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +1 -0
  482. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  483. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +27 -4
  484. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  485. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts.map +1 -1
  486. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js +6 -0
  487. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js.map +1 -1
  488. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +1 -1
  489. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -1
  490. package/packages/pi-coding-agent/dist/modes/rpc/remote-terminal.d.ts +1 -0
  491. package/packages/pi-coding-agent/dist/modes/rpc/remote-terminal.d.ts.map +1 -1
  492. package/packages/pi-coding-agent/dist/modes/rpc/remote-terminal.js +5 -0
  493. package/packages/pi-coding-agent/dist/modes/rpc/remote-terminal.js.map +1 -1
  494. package/packages/pi-coding-agent/src/core/agent-session.ts +38 -1
  495. package/packages/pi-coding-agent/src/core/compaction/compaction.test.ts +236 -0
  496. package/packages/pi-coding-agent/src/core/compaction/compaction.ts +94 -1
  497. package/packages/pi-coding-agent/src/core/exec.ts +3 -1
  498. package/packages/pi-coding-agent/src/core/extensions/extension-manifest.test.ts +77 -0
  499. package/packages/pi-coding-agent/src/core/extensions/extension-manifest.ts +62 -0
  500. package/packages/pi-coding-agent/src/core/extensions/extension-sort.test.ts +134 -0
  501. package/packages/pi-coding-agent/src/core/extensions/extension-sort.ts +137 -0
  502. package/packages/pi-coding-agent/src/core/extensions/index.ts +4 -0
  503. package/packages/pi-coding-agent/src/core/extensions/loader.ts +5 -0
  504. package/packages/pi-coding-agent/src/core/image-overflow-recovery.test.ts +228 -0
  505. package/packages/pi-coding-agent/src/core/image-overflow-recovery.ts +118 -0
  506. package/packages/pi-coding-agent/src/core/index.ts +6 -0
  507. package/packages/pi-coding-agent/src/core/lsp/index.ts +3 -0
  508. package/packages/pi-coding-agent/src/core/lsp/lspmux.ts +3 -0
  509. package/packages/pi-coding-agent/src/core/messages.test.ts +114 -0
  510. package/packages/pi-coding-agent/src/core/messages.ts +29 -2
  511. package/packages/pi-coding-agent/src/core/model-resolver.ts +1 -0
  512. package/packages/pi-coding-agent/src/core/resolve-config-value.test.ts +111 -1
  513. package/packages/pi-coding-agent/src/core/resolve-config-value.ts +26 -2
  514. package/packages/pi-coding-agent/src/core/resource-loader.ts +20 -1
  515. package/packages/pi-coding-agent/src/core/retry-handler.test.ts +255 -0
  516. package/packages/pi-coding-agent/src/core/retry-handler.ts +52 -1
  517. package/packages/pi-coding-agent/src/core/settings-manager-security.test.ts +102 -0
  518. package/packages/pi-coding-agent/src/core/settings-manager.ts +44 -3
  519. package/packages/pi-coding-agent/src/core/tools/hashline-read.ts +11 -3
  520. package/packages/pi-coding-agent/src/core/tools/read.ts +14 -4
  521. package/packages/pi-coding-agent/src/core/tools/spawn-shell-windows.test.ts +92 -0
  522. package/packages/pi-coding-agent/src/index.ts +11 -0
  523. package/packages/pi-coding-agent/src/modes/interactive/components/armin.ts +9 -9
  524. package/packages/pi-coding-agent/src/modes/interactive/components/assistant-message.ts +0 -2
  525. package/packages/pi-coding-agent/src/modes/interactive/components/bash-execution.ts +3 -1
  526. package/packages/pi-coding-agent/src/modes/interactive/components/bordered-loader.ts +1 -1
  527. package/packages/pi-coding-agent/src/modes/interactive/components/branch-summary-message.ts +1 -1
  528. package/packages/pi-coding-agent/src/modes/interactive/components/compaction-summary-message.ts +1 -1
  529. package/packages/pi-coding-agent/src/modes/interactive/components/config-selector.ts +7 -2
  530. package/packages/pi-coding-agent/src/modes/interactive/components/countdown-timer.ts +3 -0
  531. package/packages/pi-coding-agent/src/modes/interactive/components/custom-message.ts +1 -1
  532. package/packages/pi-coding-agent/src/modes/interactive/components/daxnuts.ts +4 -3
  533. package/packages/pi-coding-agent/src/modes/interactive/components/diff.ts +2 -2
  534. package/packages/pi-coding-agent/src/modes/interactive/components/dynamic-border.ts +3 -1
  535. package/packages/pi-coding-agent/src/modes/interactive/components/extension-input.ts +1 -0
  536. package/packages/pi-coding-agent/src/modes/interactive/components/extension-selector.ts +4 -0
  537. package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +27 -13
  538. package/packages/pi-coding-agent/src/modes/interactive/components/oauth-selector.ts +4 -4
  539. package/packages/pi-coding-agent/src/modes/interactive/components/provider-manager.ts +45 -14
  540. package/packages/pi-coding-agent/src/modes/interactive/components/scoped-models-selector.ts +2 -7
  541. package/packages/pi-coding-agent/src/modes/interactive/components/session-selector.ts +4 -4
  542. package/packages/pi-coding-agent/src/modes/interactive/components/skill-invocation-message.ts +2 -2
  543. package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +8 -3
  544. package/packages/pi-coding-agent/src/modes/interactive/components/user-message-selector.ts +3 -2
  545. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +24 -1
  546. package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.ts +14 -1
  547. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +35 -3
  548. package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.ts +7 -0
  549. package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +1 -1
  550. package/packages/pi-coding-agent/src/modes/rpc/remote-terminal.ts +6 -0
  551. package/packages/pi-tui/dist/terminal.d.ts +2 -0
  552. package/packages/pi-tui/dist/terminal.d.ts.map +1 -1
  553. package/packages/pi-tui/dist/terminal.js +9 -0
  554. package/packages/pi-tui/dist/terminal.js.map +1 -1
  555. package/packages/pi-tui/dist/tui.d.ts.map +1 -1
  556. package/packages/pi-tui/dist/tui.js +9 -0
  557. package/packages/pi-tui/dist/tui.js.map +1 -1
  558. package/packages/pi-tui/src/terminal.ts +14 -0
  559. package/packages/pi-tui/src/tui.ts +8 -0
  560. package/pkg/dist/modes/interactive/theme/themes.js +1 -1
  561. package/pkg/dist/modes/interactive/theme/themes.js.map +1 -1
  562. package/scripts/ensure-workspace-builds.cjs +45 -14
  563. package/src/resources/agents/researcher.md +1 -1
  564. package/src/resources/extensions/ask-user-questions.ts +21 -3
  565. package/src/resources/extensions/async-jobs/extension-manifest.json +1 -1
  566. package/src/resources/extensions/bg-shell/extension-manifest.json +1 -1
  567. package/src/resources/extensions/browser-tools/extension-manifest.json +1 -1
  568. package/src/resources/extensions/claude-code-cli/partial-builder.ts +13 -6
  569. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +63 -35
  570. package/src/resources/extensions/claude-code-cli/tests/partial-builder.test.ts +28 -0
  571. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +108 -1
  572. package/src/resources/extensions/context7/extension-manifest.json +1 -1
  573. package/src/resources/extensions/get-secrets-from-user.ts +8 -5
  574. package/src/resources/extensions/google-search/extension-manifest.json +1 -1
  575. package/src/resources/extensions/google-search/index.ts +2 -1
  576. package/src/resources/extensions/gsd/auto/loop-deps.ts +1 -0
  577. package/src/resources/extensions/gsd/auto/phases.ts +43 -34
  578. package/src/resources/extensions/gsd/auto-artifact-paths.ts +2 -2
  579. package/src/resources/extensions/gsd/auto-dashboard.ts +37 -19
  580. package/src/resources/extensions/gsd/auto-dispatch.ts +18 -2
  581. package/src/resources/extensions/gsd/auto-model-selection.ts +26 -5
  582. package/src/resources/extensions/gsd/auto-post-unit.ts +18 -4
  583. package/src/resources/extensions/gsd/auto-prompts.ts +1 -1
  584. package/src/resources/extensions/gsd/auto-recovery.ts +12 -5
  585. package/src/resources/extensions/gsd/auto-start.ts +35 -26
  586. package/src/resources/extensions/gsd/auto-worktree.ts +193 -9
  587. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +31 -0
  588. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +85 -8
  589. package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +38 -1
  590. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +41 -35
  591. package/src/resources/extensions/gsd/bootstrap/system-context.ts +72 -12
  592. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +75 -0
  593. package/src/resources/extensions/gsd/captures.ts +63 -3
  594. package/src/resources/extensions/gsd/codebase-generator.ts +351 -0
  595. package/src/resources/extensions/gsd/commands/catalog.ts +10 -1
  596. package/src/resources/extensions/gsd/commands/handlers/ops.ts +5 -0
  597. package/src/resources/extensions/gsd/commands-codebase.ts +164 -0
  598. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +46 -4
  599. package/src/resources/extensions/gsd/complexity-classifier.ts +8 -6
  600. package/src/resources/extensions/gsd/db-writer.ts +140 -7
  601. package/src/resources/extensions/gsd/doctor-git-checks.ts +75 -1
  602. package/src/resources/extensions/gsd/doctor-proactive.ts +35 -1
  603. package/src/resources/extensions/gsd/doctor-providers.ts +2 -1
  604. package/src/resources/extensions/gsd/doctor-runtime-checks.ts +5 -4
  605. package/src/resources/extensions/gsd/doctor-types.ts +2 -0
  606. package/src/resources/extensions/gsd/doctor.ts +3 -1
  607. package/src/resources/extensions/gsd/error-classifier.ts +13 -11
  608. package/src/resources/extensions/gsd/extension-manifest.json +16 -1
  609. package/src/resources/extensions/gsd/forensics.ts +144 -20
  610. package/src/resources/extensions/gsd/git-service.ts +119 -3
  611. package/src/resources/extensions/gsd/gitignore.ts +33 -0
  612. package/src/resources/extensions/gsd/gsd-db.ts +43 -7
  613. package/src/resources/extensions/gsd/guided-flow.ts +114 -45
  614. package/src/resources/extensions/gsd/health-widget-core.ts +34 -0
  615. package/src/resources/extensions/gsd/health-widget.ts +17 -0
  616. package/src/resources/extensions/gsd/index.ts +1 -0
  617. package/src/resources/extensions/gsd/memory-extractor.ts +8 -0
  618. package/src/resources/extensions/gsd/migrate-external.ts +9 -1
  619. package/src/resources/extensions/gsd/milestone-validation-gates.ts +56 -0
  620. package/src/resources/extensions/gsd/model-cost-table.ts +19 -0
  621. package/src/resources/extensions/gsd/model-router.ts +35 -1
  622. package/src/resources/extensions/gsd/native-git-bridge.ts +41 -0
  623. package/src/resources/extensions/gsd/notifications.ts +16 -0
  624. package/src/resources/extensions/gsd/parallel-eligibility.ts +15 -2
  625. package/src/resources/extensions/gsd/parallel-merge.ts +87 -4
  626. package/src/resources/extensions/gsd/parsers-legacy.ts +22 -3
  627. package/src/resources/extensions/gsd/paths.ts +44 -0
  628. package/src/resources/extensions/gsd/preferences-models.ts +14 -1
  629. package/src/resources/extensions/gsd/preferences-types.ts +10 -1
  630. package/src/resources/extensions/gsd/preferences.ts +13 -15
  631. package/src/resources/extensions/gsd/prompt-loader.ts +4 -1
  632. package/src/resources/extensions/gsd/prompts/complete-milestone.md +1 -1
  633. package/src/resources/extensions/gsd/prompts/complete-slice.md +4 -2
  634. package/src/resources/extensions/gsd/prompts/discuss-headless.md +1 -1
  635. package/src/resources/extensions/gsd/prompts/discuss.md +1 -1
  636. package/src/resources/extensions/gsd/prompts/execute-task.md +3 -1
  637. package/src/resources/extensions/gsd/prompts/forensics.md +2 -2
  638. package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +1 -1
  639. package/src/resources/extensions/gsd/prompts/guided-discuss-slice.md +1 -1
  640. package/src/resources/extensions/gsd/prompts/plan-slice.md +2 -0
  641. package/src/resources/extensions/gsd/prompts/rethink.md +1 -1
  642. package/src/resources/extensions/gsd/prompts/triage-captures.md +1 -0
  643. package/src/resources/extensions/gsd/repo-identity.ts +186 -11
  644. package/src/resources/extensions/gsd/rethink.ts +6 -0
  645. package/src/resources/extensions/gsd/roadmap-slices.ts +5 -4
  646. package/src/resources/extensions/gsd/state.ts +84 -32
  647. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +29 -0
  648. package/src/resources/extensions/gsd/tests/auto-mode-interactive-guard.test.ts +71 -0
  649. package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +71 -1
  650. package/src/resources/extensions/gsd/tests/captures.test.ts +103 -0
  651. package/src/resources/extensions/gsd/tests/cli-provider-rate-limit.test.ts +47 -0
  652. package/src/resources/extensions/gsd/tests/codebase-generator.test.ts +488 -0
  653. package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +27 -0
  654. package/src/resources/extensions/gsd/tests/complete-slice.test.ts +21 -0
  655. package/src/resources/extensions/gsd/tests/completion-hierarchy-guards.test.ts +192 -0
  656. package/src/resources/extensions/gsd/tests/complexity-classifier.test.ts +4 -4
  657. package/src/resources/extensions/gsd/tests/db-path-worktree-symlink.test.ts +131 -0
  658. package/src/resources/extensions/gsd/tests/db-writer.test.ts +7 -12
  659. package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +78 -5
  660. package/src/resources/extensions/gsd/tests/derive-state.test.ts +29 -0
  661. package/src/resources/extensions/gsd/tests/discord-invite-links.test.ts +47 -0
  662. package/src/resources/extensions/gsd/tests/discuss-empty-db-fallback.test.ts +127 -0
  663. package/src/resources/extensions/gsd/tests/discuss-queued-milestones.test.ts +40 -0
  664. package/src/resources/extensions/gsd/tests/dist-redirect.mjs +20 -1
  665. package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +117 -0
  666. package/src/resources/extensions/gsd/tests/dynamic-routing-default.test.ts +20 -0
  667. package/src/resources/extensions/gsd/tests/empty-content-abort-loop.test.ts +74 -0
  668. package/src/resources/extensions/gsd/tests/event-replay-idempotency.test.ts +140 -0
  669. package/src/resources/extensions/gsd/tests/forensics-context-persist.test.ts +129 -0
  670. package/src/resources/extensions/gsd/tests/forensics-db-completion.test.ts +96 -0
  671. package/src/resources/extensions/gsd/tests/forensics-dedup.test.ts +31 -0
  672. package/src/resources/extensions/gsd/tests/gsd-tools.test.ts +125 -12
  673. package/src/resources/extensions/gsd/tests/gsdroot-worktree-detection.test.ts +164 -0
  674. package/src/resources/extensions/gsd/tests/guided-flow-dynamic-routing.test.ts +135 -0
  675. package/src/resources/extensions/gsd/tests/guided-flow-session-isolation.test.ts +97 -0
  676. package/src/resources/extensions/gsd/tests/health-widget.test.ts +67 -0
  677. package/src/resources/extensions/gsd/tests/hook-key-parsing.test.ts +107 -0
  678. package/src/resources/extensions/gsd/tests/integration/auto-recovery.test.ts +111 -1
  679. package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +134 -0
  680. package/src/resources/extensions/gsd/tests/integration/auto-worktree.test.ts +59 -0
  681. package/src/resources/extensions/gsd/tests/integration/doctor-false-positives.test.ts +243 -0
  682. package/src/resources/extensions/gsd/tests/integration/doctor-git.test.ts +72 -0
  683. package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +68 -0
  684. package/src/resources/extensions/gsd/tests/integration/gitignore-staging-2570.test.ts +150 -0
  685. package/src/resources/extensions/gsd/tests/integration/parallel-merge.test.ts +110 -0
  686. package/src/resources/extensions/gsd/tests/integration/run-uat.test.ts +1 -1
  687. package/src/resources/extensions/gsd/tests/integration/state-machine-live-validation.test.ts +959 -0
  688. package/src/resources/extensions/gsd/tests/memory-extractor.test.ts +85 -2
  689. package/src/resources/extensions/gsd/tests/migrate-external-worktree.test.ts +105 -0
  690. package/src/resources/extensions/gsd/tests/milestone-status-authoritative.test.ts +116 -0
  691. package/src/resources/extensions/gsd/tests/model-cost-table.test.ts +34 -0
  692. package/src/resources/extensions/gsd/tests/model-router.test.ts +68 -3
  693. package/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts +28 -0
  694. package/src/resources/extensions/gsd/tests/notifications.test.ts +45 -0
  695. package/src/resources/extensions/gsd/tests/parallel-commit-scope.test.ts +159 -0
  696. package/src/resources/extensions/gsd/tests/parallel-eligibility-ghost.test.ts +150 -0
  697. package/src/resources/extensions/gsd/tests/plan-milestone-title.test.ts +70 -0
  698. package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +33 -1
  699. package/src/resources/extensions/gsd/tests/project-relocation-recovery.test.ts +297 -0
  700. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +29 -0
  701. package/src/resources/extensions/gsd/tests/prompt-loader-replacement.test.ts +178 -0
  702. package/src/resources/extensions/gsd/tests/prompt-tool-names.test.ts +69 -0
  703. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +38 -0
  704. package/src/resources/extensions/gsd/tests/queue-execution-guard.test.ts +157 -0
  705. package/src/resources/extensions/gsd/tests/quick-turn-end-cleanup.test.ts +90 -0
  706. package/src/resources/extensions/gsd/tests/reassess-handler.test.ts +117 -0
  707. package/src/resources/extensions/gsd/tests/reconciliation-edge-cases.test.ts +162 -0
  708. package/src/resources/extensions/gsd/tests/roadmap-slices.test.ts +97 -0
  709. package/src/resources/extensions/gsd/tests/secure-env-collect.test.ts +134 -0
  710. package/src/resources/extensions/gsd/tests/slice-disk-reconcile.test.ts +233 -0
  711. package/src/resources/extensions/gsd/tests/stash-queued-context-files.test.ts +305 -0
  712. package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +405 -0
  713. package/src/resources/extensions/gsd/tests/state-derivation-parity.test.ts +257 -0
  714. package/src/resources/extensions/gsd/tests/state-machine-full-walkthrough.test.ts +1628 -0
  715. package/src/resources/extensions/gsd/tests/stop-auto-race-null-unit.test.ts +106 -0
  716. package/src/resources/extensions/gsd/tests/stuck-detection-coverage.test.ts +174 -0
  717. package/src/resources/extensions/gsd/tests/summary-render-parity.test.ts +221 -0
  718. package/src/resources/extensions/gsd/tests/terminated-transient.test.ts +44 -0
  719. package/src/resources/extensions/gsd/tests/tool-naming.test.ts +2 -1
  720. package/src/resources/extensions/gsd/tests/triage-resolution.test.ts +8 -0
  721. package/src/resources/extensions/gsd/tests/uat-stuck-loop-orphaned-worktree.test.ts +289 -0
  722. package/src/resources/extensions/gsd/tests/unit-ownership.test.ts +100 -17
  723. package/src/resources/extensions/gsd/tests/vacuum-recovery.test.ts +154 -0
  724. package/src/resources/extensions/gsd/tests/validate-milestone-write-order.test.ts +4 -1
  725. package/src/resources/extensions/gsd/tests/verdict-parser.test.ts +156 -0
  726. package/src/resources/extensions/gsd/tests/verification-operational-gate.test.ts +82 -0
  727. package/src/resources/extensions/gsd/tests/workflow-logger.test.ts +48 -0
  728. package/src/resources/extensions/gsd/tests/workflow-manifest.test.ts +92 -0
  729. package/src/resources/extensions/gsd/tests/workflow-projections.test.ts +4 -2
  730. package/src/resources/extensions/gsd/tests/worktree-db-respawn-truncation.test.ts +140 -0
  731. package/src/resources/extensions/gsd/tests/worktree-nested-git-safety.test.ts +101 -0
  732. package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +48 -1
  733. package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +29 -5
  734. package/src/resources/extensions/gsd/tests/zombie-gsd-state.test.ts +95 -0
  735. package/src/resources/extensions/gsd/tools/complete-task.ts +36 -74
  736. package/src/resources/extensions/gsd/tools/plan-milestone.ts +13 -1
  737. package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +36 -0
  738. package/src/resources/extensions/gsd/tools/validate-milestone.ts +20 -2
  739. package/src/resources/extensions/gsd/triage-resolution.ts +23 -6
  740. package/src/resources/extensions/gsd/types.ts +4 -2
  741. package/src/resources/extensions/gsd/undo.ts +2 -2
  742. package/src/resources/extensions/gsd/unit-ownership.ts +206 -35
  743. package/src/resources/extensions/gsd/verdict-parser.ts +21 -6
  744. package/src/resources/extensions/gsd/watch/header-renderer.ts +275 -0
  745. package/src/resources/extensions/gsd/workflow-logger.ts +3 -1
  746. package/src/resources/extensions/gsd/workflow-manifest.ts +22 -5
  747. package/src/resources/extensions/gsd/workflow-projections.ts +97 -64
  748. package/src/resources/extensions/gsd/workflow-reconcile.ts +39 -10
  749. package/src/resources/extensions/gsd/workspace-index.ts +30 -0
  750. package/src/resources/extensions/gsd/worktree-manager.ts +120 -1
  751. package/src/resources/extensions/gsd/worktree-resolver.ts +22 -3
  752. package/src/resources/extensions/mcp-client/index.ts +13 -7
  753. package/src/resources/extensions/mcp-client/tests/server-name-spaces.test.ts +55 -0
  754. package/src/resources/extensions/ollama/index.ts +130 -0
  755. package/src/resources/extensions/ollama/model-capabilities.ts +145 -0
  756. package/src/resources/extensions/ollama/ollama-client.ts +196 -0
  757. package/src/resources/extensions/ollama/ollama-commands.ts +248 -0
  758. package/src/resources/extensions/ollama/ollama-discovery.ts +106 -0
  759. package/src/resources/extensions/ollama/ollama-tool.ts +218 -0
  760. package/src/resources/extensions/ollama/tests/model-capabilities.test.ts +162 -0
  761. package/src/resources/extensions/ollama/tests/ollama-client.test.ts +38 -0
  762. package/src/resources/extensions/ollama/tests/ollama-discovery.test.ts +28 -0
  763. package/src/resources/extensions/ollama/types.ts +130 -0
  764. package/src/resources/extensions/search-the-web/extension-manifest.json +1 -1
  765. package/src/resources/extensions/search-the-web/url-utils.ts +19 -0
  766. package/src/resources/extensions/shared/interview-ui.ts +12 -1
  767. package/src/resources/extensions/shared/tests/ask-user-freetext.test.ts +156 -0
  768. package/src/resources/skills/create-gsd-extension/SKILL.md +5 -3
  769. package/src/resources/skills/create-gsd-extension/references/key-rules-gotchas.md +5 -4
  770. package/src/resources/skills/create-gsd-extension/workflows/add-capability.md +2 -2
  771. package/src/resources/skills/create-gsd-extension/workflows/create-extension.md +4 -4
  772. package/src/resources/skills/create-gsd-extension/workflows/debug-extension.md +5 -3
  773. package/dist/web/standalone/.next/static/chunks/6502.8b732f67a11b11b4.js +0 -9
  774. package/dist/web/standalone/.next/static/css/a58ef8a151aa0493.css +0 -1
  775. package/src/resources/extensions/gsd/tests/empty-db-reconciliation.test.ts +0 -79
  776. /package/dist/web/standalone/.next/static/{5DLsjFHdSB6_a1EDQVjr7 → nUA6d2OJrDSVq9RNb-c8b}/_buildManifest.js +0 -0
  777. /package/dist/web/standalone/.next/static/{5DLsjFHdSB6_a1EDQVjr7 → nUA6d2OJrDSVq9RNb-c8b}/_ssgManifest.js +0 -0
@@ -8,5 +8,5 @@ exports.id=2229,exports.ids=[2229],exports.modules={7849:(a,b,c)=>{"use strict";
8
8
  <body>
9
9
  <p>Authentication successful. Return to your terminal to continue.</p>
10
10
  </body>
11
- </html>`;function ak(a){let b=a.trim();if(!b)return{};try{let a=new URL(b);return{code:a.searchParams.get("code")??void 0,state:a.searchParams.get("state")??void 0}}catch{}if(b.includes("#")){let[a,c]=b.split("#",2);return{code:a,state:c}}if(b.includes("code=")){let a=new URLSearchParams(b);return{code:a.get("code")??void 0,state:a.get("state")??void 0}}return{code:b}}async function al(a,b,c=ai){let d=await fetch(ah,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:ag,code:a,code_verifier:b,redirect_uri:c}),signal:AbortSignal.timeout(3e4)});if(!d.ok){let a=await d.text().catch(()=>"");return console.error("[openai-codex] code->token failed:",d.status,a),{type:"failed"}}let e=await d.json();return e.access_token&&e.refresh_token&&"number"==typeof e.expires_in?{type:"success",access:e.access_token,refresh:e.refresh_token,expires:Date.now()+1e3*e.expires_in}:(console.error("[openai-codex] token response missing fields:",e),{type:"failed"})}async function am(a){try{let b=await fetch(ah,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:a,client_id:ag}),signal:AbortSignal.timeout(3e4)});if(!b.ok){let a=await b.text().catch(()=>"");return console.error("[openai-codex] Token refresh failed:",b.status,a),{type:"failed"}}let c=await b.json();if(!c.access_token||!c.refresh_token||"number"!=typeof c.expires_in)return console.error("[openai-codex] Token refresh response missing fields:",c),{type:"failed"};return{type:"success",access:c.access_token,refresh:c.refresh_token,expires:Date.now()+1e3*c.expires_in}}catch(a){return console.error("[openai-codex] Token refresh error:",a),{type:"failed"}}}async function an(a="pi"){let{verifier:b,challenge:c}=await l(),d=function(){if(!ae)throw Error("OpenAI Codex OAuth is only available in Node.js environments");return ae(16).toString("hex")}(),e=new URL("https://auth.openai.com/oauth/authorize");return e.searchParams.set("response_type","code"),e.searchParams.set("client_id",ag),e.searchParams.set("redirect_uri",ai),e.searchParams.set("scope","openid profile email offline_access"),e.searchParams.set("code_challenge",c),e.searchParams.set("code_challenge_method","S256"),e.searchParams.set("state",d),e.searchParams.set("id_token_add_organizations","true"),e.searchParams.set("codex_cli_simplified_flow","true"),e.searchParams.set("originator",a),{verifier:b,state:d,url:e.toString()}}function ao(a){let b=function(a){try{let b=a.split(".");if(3!==b.length)return null;let c=b[1]??"",d=atob(c);return JSON.parse(d)}catch{return null}}(a),c=b?.["https://api.openai.com/auth"],d=c?.chatgpt_account_id;return"string"==typeof d&&d.length>0?d:null}async function ap(a){let b,{verifier:c,state:d,url:e}=await an(a.originator),f=await function(a){if(!af)throw Error("OpenAI Codex OAuth is only available in Node.js environments");let b=null,c=!1,d=af.createServer((c,d)=>{try{let e=new URL(c.url||"","http://localhost");if("/auth/callback"!==e.pathname){d.statusCode=404,d.end("Not found");return}if(e.searchParams.get("state")!==a){d.statusCode=400,d.end("State mismatch");return}let f=e.searchParams.get("code");if(!f){d.statusCode=400,d.end("Missing authorization code");return}d.statusCode=200,d.setHeader("Content-Type","text/html; charset=utf-8"),d.end(aj),b=f}catch{d.statusCode=500,d.end("Internal error")}});return new Promise(a=>{d.listen(1455,"127.0.0.1",()=>{a({close:()=>d.close(),cancelWait:()=>{c=!0},waitForCode:async()=>{let a=()=>new Promise(a=>setTimeout(a,100));for(let d=0;d<600;d+=1){if(b)return{code:b};if(c)break;await a()}return null}})}).on("error",b=>{console.error("[openai-codex] Failed to bind http://127.0.0.1:1455 (",b.code,") Falling back to manual paste."),a({close:()=>{try{d.close()}catch{}},cancelWait:()=>{},waitForCode:async()=>null})})})}(d);a.onAuth({url:e,instructions:"A browser window should open. Complete login to finish."});try{if(a.onManualCodeInput){let c,e,g=a.onManualCodeInput().then(a=>{c=a,f.cancelWait()}).catch(a=>{e=a instanceof Error?a:Error(String(a)),f.cancelWait()}),h=await f.waitForCode();if(e)throw e;if(h?.code)b=h.code;else if(c){let a=ak(c);if(a.state&&a.state!==d)throw Error("State mismatch");b=a.code}if(!b){if(await g,e)throw e;if(c){let a=ak(c);if(a.state&&a.state!==d)throw Error("State mismatch");b=a.code}}}else{let a=await f.waitForCode();a?.code&&(b=a.code)}if(!b){let c=await a.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),e=ak(c);if(e.state&&e.state!==d)throw Error("State mismatch");b=e.code}if(!b)throw Error("Missing authorization code");let e=await al(b,c);if("success"!==e.type)throw Error("Token exchange failed");let g=ao(e.access);if(!g)throw Error("Failed to extract accountId from token");return{access:e.access,refresh:e.refresh,expires:e.expires,accountId:g}}finally{f.close()}}async function aq(a){let b=await am(a);if("success"!==b.type)throw Error("Failed to refresh OpenAI Codex token");let c=ao(b.access);if(!c)throw Error("Failed to extract accountId from token");return{access:b.access,refresh:b.refresh,expires:b.expires,accountId:c}}let ar=new Map([{id:"anthropic",name:"Anthropic (Claude Pro/Max)",login:async a=>p(b=>a.onAuth({url:b}),()=>a.onPrompt({message:"Paste the authorization code:"})),refreshToken:async a=>q(a.refresh),getApiKey:a=>a.access},{id:"github-copilot",name:"GitHub Copilot",login:async a=>G({onAuth:(b,c)=>a.onAuth({url:b,instructions:c}),onPrompt:a.onPrompt,onProgress:a.onProgress,signal:a.signal}),async refreshToken(a){let b=await C(a.refresh,a.enterpriseUrl);try{let c=await F(b.access,a.enterpriseUrl);Object.keys(c).length>0&&(b.modelLimits=c)}catch{}return b},getApiKey:a=>a.access,modifyModels(a,b){let c=b.enterpriseUrl?v(b.enterpriseUrl)??void 0:void 0,d=x(b.access,c),e=b.modelLimits;return a.map(a=>{if("github-copilot"!==a.provider)return a;let b=e?.[a.id];return{...a,baseUrl:d,...b&&{contextWindow:b.contextWindow,maxTokens:b.maxTokens}}})}},{id:"google-gemini-cli",name:"Google Cloud Code Assist (Gemini CLI)",usesCallbackServer:!0,login:async a=>ad(a.onAuth,a.onProgress,a.onManualCodeInput),async refreshToken(a){if(!a.projectId)throw Error("Google Cloud credentials missing projectId");return ac(a.refresh,a.projectId)},getApiKey:a=>JSON.stringify({token:a.access,projectId:a.projectId})},{id:"google-antigravity",name:"Antigravity (Gemini 3, Claude, GPT-OSS)",usesCallbackServer:!0,login:async a=>U(a.onAuth,a.onProgress,a.onManualCodeInput),async refreshToken(a){if(!a.projectId)throw Error("Antigravity credentials missing projectId");return T(a.refresh,a.projectId)},getApiKey:a=>JSON.stringify({token:a.access,projectId:a.projectId})},{id:"openai-codex",name:"ChatGPT Plus/Pro (Codex Subscription)",usesCallbackServer:!0,login:async a=>ap({onAuth:a.onAuth,onPrompt:a.onPrompt,onProgress:a.onProgress,onManualCodeInput:a.onManualCodeInput}),refreshToken:async a=>aq(a.refresh),getApiKey:a=>a.access}].map(a=>[a.id,a]));class as{constructor(a){this.data={},this.authPath=a,this.reload()}reload(){var a;let b;a=this.authPath,b=(0,g.dirname)(a),(0,e.existsSync)(b)||(0,e.mkdirSync)(b,{recursive:!0,mode:448}),(0,e.existsSync)(a)||((0,e.writeFileSync)(a,"{}","utf-8"),(0,e.chmodSync)(a,384)),this.data=function(a){if(!a||!a.trim())return{};try{let b=JSON.parse(a);return"object"==typeof b&&null!==b?b:{}}catch{return{}}}((0,e.readFileSync)(this.authPath,"utf-8"))}getCredentialsForProvider(a){let b=this.data[a];return b?Array.isArray(b)?b:[b]:[]}set(a,b){let c=this.getCredentialsForProvider(a),d="api_key"===b.type?this.mergeApiKeyCredentials(c,b):this.mergeOAuthCredential(c,b);this.data[a]=1===d.length?d[0]:d,(0,e.writeFileSync)(this.authPath,JSON.stringify(this.data,null,2),"utf-8"),(0,e.chmodSync)(this.authPath,384)}hasAuth(a){return this.getCredentialsForProvider(a).length>0||!!i(a)}getOAuthProviders(){return Array.from(ar.values())}async login(a,b){let c=ar.get(a);if(!c)throw Error(`Unknown OAuth provider: ${a}`);let d=await c.login(b);this.set(a,{type:"oauth",...d})}logout(a){delete this.data[a],(0,e.writeFileSync)(this.authPath,JSON.stringify(this.data,null,2),"utf-8"),(0,e.chmodSync)(this.authPath,384)}mergeApiKeyCredentials(a,b){return a.some(a=>"api_key"===a.type&&a.key===b.key)?a:[...a,b]}mergeOAuthCredential(a,b){return[...a.filter(a=>"api_key"===a.type),b]}}let at=null,au=[{id:"anthropic",label:"Anthropic (Claude)",supportsApiKey:!0,supportsOAuth:!0,recommended:!0},{id:"openai",label:"OpenAI",supportsApiKey:!0,supportsOAuth:!1},{id:"github-copilot",label:"GitHub Copilot",supportsApiKey:!1,supportsOAuth:!0},{id:"openai-codex",label:"ChatGPT Plus/Pro (Codex Subscription)",supportsApiKey:!1,supportsOAuth:!0},{id:"google-gemini-cli",label:"Google Cloud Code Assist (Gemini CLI)",supportsApiKey:!1,supportsOAuth:!0},{id:"google-antigravity",label:"Antigravity (Gemini 3, Claude, GPT-OSS)",supportsApiKey:!1,supportsOAuth:!0},{id:"google",label:"Google (Gemini API)",supportsApiKey:!0,supportsOAuth:!1},{id:"groq",label:"Groq",supportsApiKey:!0,supportsOAuth:!1},{id:"xai",label:"xAI (Grok)",supportsApiKey:!0,supportsOAuth:!1},{id:"openrouter",label:"OpenRouter",supportsApiKey:!0,supportsOAuth:!1},{id:"mistral",label:"Mistral",supportsApiKey:!0,supportsOAuth:!1}],av=[{id:"web_search",label:"Web search",providers:[{id:"brave",label:"Brave Search",envVar:"BRAVE_API_KEY"},{id:"tavily",label:"Tavily",envVar:"TAVILY_API_KEY"}]},{id:"tool_keys",label:"Tool API keys",providers:[{id:"context7",label:"Context7",envVar:"CONTEXT7_API_KEY"},{id:"jina",label:"Jina AI",envVar:"JINA_API_KEY"},{id:"groq",label:"Groq",envVar:"GROQ_API_KEY"}]},{id:"remote_questions",label:"Remote questions",providers:[{id:"discord_bot",label:"Discord",envVar:"DISCORD_BOT_TOKEN"},{id:"slack_bot",label:"Slack",envVar:"SLACK_BOT_TOKEN"}]}],aw=null;function ax(a){return a().toISOString()}function ay(a){return(a instanceof Error?a.message:String(a)).replace(/sk-[A-Za-z0-9_-]{6,}/g,"[redacted]").replace(/xox[baprs]-[A-Za-z0-9-]+/g,"[redacted]").replace(/Bearer\s+[^\s]+/gi,"Bearer [redacted]").replace(/([A-Z0-9_]*(?:API[_-]?KEY|TOKEN|SECRET)["'=:\s]+)([^\s,;"']+)/gi,"$1[redacted]").replace(/\s+/g," ").trim()}function az(){return{phase:"idle",strategy:null,startedAt:null,completedAt:null,error:null}}function aA(a,b){return a.getCredentialsForProvider(b).some(a=>"oauth"===a.type||"string"==typeof a.key&&a.key.trim().length>0)}async function aB(a,b){let c="";try{if((b.headers.get("content-type")||"").includes("application/json")){let a=await b.json();c=function a(b){if(!b)return null;if("string"==typeof b)return b;if("object"!=typeof b)return null;for(let c of[b.message,b.error,b.detail,b.error_description]){if("string"==typeof c&&c.trim().length>0)return c;let b=a(c);if(b)return b}return null}(a)??JSON.stringify(a)}else c=await b.text()}catch{c=""}let d=ay(c);return d?`${a} validation failed (${b.status}): ${d}`:`${a} validation failed (${b.status})`}async function aC(a,b,c,d,e={}){try{let f=await a(c,{headers:{Authorization:`Bearer ${d}`,...e},signal:AbortSignal.timeout(15e3)});if(!f.ok)return{ok:!1,message:await aB(b,f)};return{ok:!0,message:`${b} credentials validated`}}catch(a){return{ok:!1,message:`${b} validation failed: ${ay(a)}`}}}async function aD(a,b){try{let c=new URL("https://generativelanguage.googleapis.com/v1beta/models");c.searchParams.set("key",b);let d=await a(c,{signal:AbortSignal.timeout(15e3)});if(!d.ok)return{ok:!1,message:await aB("google",d)};return{ok:!0,message:"google credentials validated"}}catch(a){return{ok:!1,message:`google validation failed: ${ay(a)}`}}}async function aE(a,b){try{let c=await a("https://api.anthropic.com/v1/models",{headers:{"x-api-key":b,"anthropic-version":"2023-06-01"},signal:AbortSignal.timeout(15e3)});if(!c.ok)return{ok:!1,message:await aB("anthropic",c)};return{ok:!0,message:"anthropic credentials validated"}}catch(a){return{ok:!1,message:`anthropic validation failed: ${ay(a)}`}}}async function aF(a,b,c){switch(a){case"anthropic":return await aE(c,b);case"openai":return await aC(c,a,"https://api.openai.com/v1/models",b);case"google":return await aD(c,b);case"groq":return await aC(c,a,"https://api.groq.com/openai/v1/models",b);case"xai":return await aC(c,a,"https://api.x.ai/v1/models",b);case"openrouter":return await aC(c,a,"https://openrouter.ai/api/v1/models",b,{"HTTP-Referer":"https://localhost","X-Title":"GSD onboarding"});case"mistral":return await aC(c,a,"https://api.mistral.ai/v1/models",b);default:return{ok:!1,message:`${a} does not support API-key validation via onboarding`}}}class aG{constructor(a){this.authStorage=null,this.lastValidation=null,this.activeFlow=null,this.bridgeAuthRefresh=az(),this.deps=a}async getState(){return this.buildState()}async validateAndSaveApiKey(a,b){let c=au.find(b=>b.id===a);if(!c)throw Error(`Unknown onboarding provider: ${a}`);if(!c.supportsApiKey)throw Error(`${a} must be configured with browser sign-in`);let d=b.trim();if(!d)throw Error("API key is required");let e=this.deps.validateApiKey??(async(a,b)=>await aF(a,b,this.deps.fetch??fetch)),f=await e(a,d),g=ax(this.deps.now??(()=>new Date));if(!f.ok)return this.lastValidation={status:"failed",providerId:a,method:"api_key",checkedAt:g,message:ay(f.message),persisted:!1},await this.buildState();let h=await this.getAuthStorage();return h.reload(),h.set(a,{type:"api_key",key:d}),this.lastValidation={status:"succeeded",providerId:a,method:"api_key",checkedAt:g,message:ay(f.message||`${a} credentials validated`),persisted:!0},await this.refreshBridgeAuth(),await this.buildState()}async startProviderFlow(a){let b=await this.getAuthStorage();b.reload();let c=b.getOAuthProviders().find(b=>b.id===a);if(!c)throw Error(`OAuth provider not available for onboarding: ${a}`);this.activeFlow&&["running","awaiting_browser_auth","awaiting_input"].includes(this.activeFlow.state.status)&&this.cancelActiveFlow();let e={state:{flowId:(this.deps.createFlowId??(()=>(0,d.randomUUID)()))(),providerId:a,providerLabel:c.name,status:"running",updatedAt:ax(this.deps.now??(()=>new Date)),auth:null,prompt:null,progress:[],error:null},awaitingInput:null,abortController:new AbortController};return this.activeFlow=e,this.runOAuthFlow(e,c,b),await this.buildState()}async submitProviderFlowInput(a,b){let c=this.activeFlow;if(!c||c.state.flowId!==a)throw Error(`Unknown onboarding flow: ${a}`);if(!c.awaitingInput)throw Error(`Onboarding flow ${a} is not waiting for input`);let d=c.awaitingInput;return c.awaitingInput=null,c.state.prompt=null,c.state.status="running",c.state.updatedAt=ax(this.deps.now??(()=>new Date)),d(b),await this.buildState()}async cancelProviderFlow(a){let b=this.activeFlow;if(!b||b.state.flowId!==a)throw Error(`Unknown onboarding flow: ${a}`);return this.cancelActiveFlow(),await this.buildState()}async logoutProvider(a){let b=await this.getAuthStorage();b.reload();let c=await this.buildState(),d=a.trim()||c.required.satisfiedBy?.providerId||c.required.providers.find(a=>a.configured)?.id;if(!d)throw Error("No configured provider is available to log out");let e=c.required.providers.find(a=>a.id===d),f=e?.label??d;if(!e?.configured)throw Error(`${f} is not configured in this workspace`);if("auth_file"!==e.configuredVia)throw Error(`${f} is configured via ${e.configuredVia} and cannot be logged out from the browser surface`);return this.activeFlow&&this.activeFlow.state.providerId===d&&["running","awaiting_browser_auth","awaiting_input"].includes(this.activeFlow.state.status)&&this.cancelActiveFlow(),b.logout(d),this.lastValidation=null,await this.refreshBridgeAuth(),await this.buildState()}async refreshBridgeAuth(){let a=this.deps.refreshBridgeAuth;if(!a){this.bridgeAuthRefresh=az();return}let b=ax(this.deps.now??(()=>new Date));this.bridgeAuthRefresh={phase:"pending",strategy:"restart",startedAt:b,completedAt:null,error:null};try{await a(),this.bridgeAuthRefresh={phase:"succeeded",strategy:"restart",startedAt:b,completedAt:ax(this.deps.now??(()=>new Date)),error:null}}catch(a){this.bridgeAuthRefresh={phase:"failed",strategy:"restart",startedAt:b,completedAt:ax(this.deps.now??(()=>new Date)),error:ay(a)}}}async getAuthStorage(){return this.authStorage||(this.deps.authStorage?this.authStorage=this.deps.authStorage:this.deps.createAuthStorage?this.authStorage=await this.deps.createAuthStorage(this.deps.authPath??j.sI):this.authStorage=new as(this.deps.authPath??j.sI)),this.authStorage}buildOptionalSectionState(a){let b=this.deps.env??process.env;return av.map(c=>{let d=c.providers.filter(c=>{let d=!!c.envVar&&"string"==typeof b[c.envVar]&&b[c.envVar].trim().length>0,e=aA(a,c.id);return d||e}).map(a=>a.label);return{id:c.id,label:c.label,blocking:!1,skippable:!0,configured:d.length>0,configuredItems:d}})}buildProviderState(a,b){let c=new Map(a.getOAuthProviders().map(a=>[a.id,a]));return au.map(d=>{var e;let f=c.get(d.id),g=(e=d.id,aA(a,e)?"auth_file":b(e)?"environment":a.getCredentialsForProvider(e).length>0?"runtime":null);return{id:d.id,label:f?.name??d.label,required:!0,recommended:!!d.recommended,configured:null!==g,configuredVia:g,supports:{apiKey:d.supportsApiKey,oauth:d.supportsOAuth,oauthAvailable:!!d.supportsOAuth&&!!f,usesCallbackServer:!!f?.usesCallbackServer}}})}async buildState(){var a,b;let c=await this.getAuthStorage(),d=this.deps.getEnvApiKey??i;c.reload();let e=this.buildProviderState(c,d),f=e.find(a=>a.configured)??null,g=this.buildOptionalSectionState(c),h=(a=!!f,b=this.bridgeAuthRefresh,a?"pending"===b.phase?"bridge_refresh_pending":"failed"===b.phase?"bridge_refresh_failed":null:"required_setup");return{status:h?"blocked":"ready",locked:null!==h,lockReason:h,required:{blocking:!0,skippable:!1,satisfied:!!f,satisfiedBy:f?{providerId:f.id,source:f.configuredVia??"runtime"}:null,providers:e},optional:{blocking:!1,skippable:!0,sections:g},lastValidation:this.lastValidation?{...this.lastValidation}:null,activeFlow:this.activeFlow?structuredClone(this.activeFlow.state):null,bridgeAuthRefresh:{...this.bridgeAuthRefresh}}}cancelActiveFlow(){this.activeFlow&&(this.activeFlow.abortController.abort(),this.activeFlow.awaitingInput&&(this.activeFlow.awaitingInput(""),this.activeFlow.awaitingInput=null),this.activeFlow.state.status="cancelled",this.activeFlow.state.prompt=null,this.activeFlow.state.error=null,this.activeFlow.state.updatedAt=ax(this.deps.now??(()=>new Date)))}async runOAuthFlow(a,b,c){try{await c.login(b.id,{onAuth:b=>{a.state.auth=b,a.state.status="awaiting_browser_auth",a.state.updatedAt=ax(this.deps.now??(()=>new Date))},onPrompt:async b=>await this.waitForFlowInput(a,"text",b),onProgress:b=>{a.state.progress=[...a.state.progress,ay(b)].slice(-20),"awaiting_input"!==a.state.status&&(a.state.status="running"),a.state.updatedAt=ax(this.deps.now??(()=>new Date))},onManualCodeInput:async()=>await this.waitForFlowInput(a,"manual_code",{message:"Paste the redirect URL from your browser:",placeholder:"http://localhost:..."}),signal:a.abortController.signal}),a.state.status="succeeded",a.state.prompt=null,a.state.error=null,a.state.updatedAt=ax(this.deps.now??(()=>new Date)),this.lastValidation={status:"succeeded",providerId:b.id,method:"oauth",checkedAt:a.state.updatedAt,message:`${b.id} sign-in complete`,persisted:!0},await this.refreshBridgeAuth()}catch(d){let c=a.abortController.signal.aborted;a.state.status=c?"cancelled":"failed",a.state.prompt=null,a.state.error=c?null:ay(d),a.state.updatedAt=ax(this.deps.now??(()=>new Date)),c||(this.lastValidation={status:"failed",providerId:b.id,method:"oauth",checkedAt:a.state.updatedAt,message:a.state.error||`${b.id} sign-in failed`,persisted:!1})}}async waitForFlowInput(a,b,c){return a.state.status="awaiting_input",a.state.prompt={kind:b,message:c.message,placeholder:c.placeholder,allowEmpty:c.allowEmpty},a.state.updatedAt=ax(this.deps.now??(()=>new Date)),await new Promise(b=>{a.awaitingInput=b})}}function aH(){return aw||(aw=new aG({env:process.env,authPath:j.sI,fetch,now:()=>new Date,createFlowId:()=>(0,d.randomUUID)(),validateApiKey:function(a){if("1"===a.GSD_WEB_TEST_FAKE_API_KEY_VALIDATION)return async(a,b)=>{let c=au.find(b=>b.id===a)?.label??a,d=b.trim().toLowerCase();return!d||d.includes("invalid")||d.includes("reject")||d.includes("fail")?{ok:!1,message:`${c} rejected the supplied key`}:{ok:!0,message:`${c} credentials validated`}}}(process.env),refreshBridgeAuth:at??void 0,...{}})),aw}async function aI(){return await aH().getState()}function aJ(a){at=a,aw=null}},36460:(a,b,c)=>{"use strict";c.d(b,{AL:()=>i,PO:()=>d,_B:()=>j,on:()=>k,ql:()=>h});let d="current_project",e=["threaded","recent","relevance"],f=["all","named"],g=["rename"];function h(a){return e.includes(a??"")}function i(a){return f.includes(a??"")}function j(a){return g.includes(a??"")}function k(a){return{query:a?.query?.trim()??"",sortMode:a?.sortMode??"threaded",nameFilter:a?.nameFilter??"all"}}},52813:(a,b,c)=>{"use strict";c.d(b,{N:()=>h});var d=c(73024),e=c(76760),f=c(73136),g=c(34431);function h(a){let b=a.existsSync??d.existsSync,c=a.execPath??process.execPath,h=function(a){if("rpc"!==a.mode)return[];if(!a.sessionDir)throw Error("RPC CLI entry requires sessionDir");return["--mode","rpc","--continue","--session-dir",a.sessionDir]}(a),i="interactive"===a.mode?a.messages??[]:[],j=(0,e.join)(a.packageRoot,"src","loader.ts"),k=(0,e.join)(a.packageRoot,"src","resources","extensions","gsd","tests","resolve-ts.mjs"),l=(0,e.join)(a.packageRoot,"dist","loader.js"),m=b(j)&&b(k)?{command:c,args:["--import",(0,f.pathToFileURL)(k).href,(0,g.hg)(a.packageRoot),j,...h,...i],cwd:a.cwd}:null,n=b(l)?{command:c,args:[l,...h,...i],cwd:a.cwd}:null;if("packaged-standalone"===a.hostKind){if(n)return n;if(m)return m}else{if(m)return m;if(n)return n}throw Error(`GSD CLI entry not found; checked=${j},${l}`)}},74900:(a,b,c)=>{"use strict";let d;c.d(b,{xD:()=>aa,Fs:()=>_,tL:()=>Z,yd:()=>$,tS:()=>W,pA:()=>v,tl:()=>P,Os:()=>X,jL:()=>R,eG:()=>L,O5:()=>Q,sM:()=>ac});var e=c(31421),f=c(73024),g=c(46193),h=c(76760),i=c(73136),j=c(34431),k=c(36460),l=c(7849),m=c(36152);let n="GSD_AUTO_DASHBOARD_MODULE";function o(){return{active:!1,paused:!1,stepMode:!1,startTime:0,elapsed:0,currentUnit:null,completedUnits:[],basePath:"",totalCost:0,totalTokens:0,rtkSavings:null,rtkEnabled:!1}}async function p(a,b={}){let c=b.env??process.env;if("1"===c.GSD_WEB_TEST_USE_FALLBACK_AUTO_DASHBOARD)return o();let d=b.existsSync??f.existsSync,g=(0,h.join)(a,"src","resources","extensions","gsd","tests","resolve-ts.mjs"),k=c.GSD_WEB_TEST_AUTO_DASHBOARD_MODULE,l=k?{modulePath:k,useCompiledJs:!1}:(0,j.KW)(a,"resources/extensions/gsd/auto.ts",d),m=l.modulePath;if(!l.useCompiledJs&&(!d(g)||!d(m)))throw Error(`authoritative auto dashboard provider not found; checked=${g},${m}`);if(l.useCompiledJs&&!d(m))throw Error(`authoritative auto dashboard provider not found; checked=${m}`);let q=`const { pathToFileURL } = await import("node:url"); const mod = await import(pathToFileURL(process.env.${n}).href); const result = await mod.getAutoDashboardData(); process.stdout.write(JSON.stringify(result));`,r=(0,j.vB)(a,l,(0,i.pathToFileURL)(g).href);return await new Promise((d,f)=>{(0,e.execFile)(b.execPath??process.execPath,[...r,"--eval",q],{cwd:a,env:{...c,[n]:m},maxBuffer:1048576},(a,b,c)=>{if(a)return void f(Error(`authoritative auto dashboard subprocess failed: ${c||a.message}`));try{d(JSON.parse(b))}catch(a){f(Error(`authoritative auto dashboard subprocess returned invalid JSON: ${a instanceof Error?a.message:String(a)}`))}})})}var q=c(52813);let r=new Set(["get_state","get_available_models","get_session_stats","get_messages","get_last_assistant_text","get_fork_messages","get_commands"]);function s(a){return a.toLowerCase().replace(/\s+/g," ").trim()}function t(a){return!!a.name?.trim()}function u(a,b){let c=`${a.id} ${a.name??""} ${a.allMessagesText} ${a.cwd}`;if("regex"===b.mode){if(!b.regex)return{matches:!1,score:0};let a=c.search(b.regex);return a<0?{matches:!1,score:0}:{matches:!0,score:.1*a}}if(0===b.tokens.length)return{matches:!0,score:0};let d=0,e=null;for(let a of b.tokens){if("phrase"===a.kind){null===e&&(e=s(c));let b=s(a.value);if(!b)continue;let f=e.indexOf(b);if(f<0)return{matches:!1,score:0};d+=.1*f;continue}let b=function(a,b){let c=a.toLowerCase(),d=b.toLowerCase(),e=a=>{if(0===a.length)return{matches:!0,score:0};if(a.length>d.length)return{matches:!1,score:0};let b=0,c=0,e=-1,f=0;for(let g=0;g<d.length&&b<a.length;g++){if(d[g]!==a[b])continue;let h=0===g||/[\s\-_./:]/.test(d[g-1]);e===g-1?c-=5*++f:(f=0,e>=0&&(c+=(g-e-1)*2)),h&&(c-=10),c+=.1*g,e=g,b++}return b<a.length?{matches:!1,score:0}:{matches:!0,score:c}},f=e(c);if(f.matches)return f;let g=c.match(/^(?<letters>[a-z]+)(?<digits>[0-9]+)$/),h=c.match(/^(?<digits>[0-9]+)(?<letters>[a-z]+)$/),i=g?`${g.groups?.digits??""}${g.groups?.letters??""}`:h?`${h.groups?.letters??""}${h.groups?.digits??""}`:"";if(!i)return f;let j=e(i);return j.matches?{matches:!0,score:j.score+5}:f}(a.value,c);if(!b.matches)return{matches:!1,score:0};d+=b.score}return{matches:!0,score:d}}function v(a){let b,c=F().existsSync??f.existsSync,d=c((0,h.join)(a,".gsd")),e=c((0,h.join)(a,".planning")),g=c((0,h.join)(a,".git")),i=c((0,h.join)(a,"package.json")),j=c((0,h.join)(a,"Cargo.toml")),k=c((0,h.join)(a,"go.mod")),l=c((0,h.join)(a,"pyproject.toml")),m=function(a,b){let c=b??F().existsSync??f.existsSync;if(c((0,h.join)(a,"pnpm-workspace.yaml"))||c((0,h.join)(a,"lerna.json"))||c((0,h.join)(a,"rush.json"))||c((0,h.join)(a,"nx.json"))||c((0,h.join)(a,"turbo.json")))return!0;let d=(0,h.join)(a,"package.json");if(c(d))try{let a=(0,f.readFileSync)(d,"utf-8"),b=JSON.parse(a);if(null!=b.workspaces)return!0}catch{}return!1}(a,c),n=0;try{n=(0,f.readdirSync)(a).filter(a=>!a.startsWith(".")).length}catch{}let o={hasGsdFolder:d,hasPlanningFolder:e,hasGitRepo:g,hasPackageJson:i,hasCargo:j,hasGoMod:k,hasPyproject:l,isMonorepo:m,fileCount:n};if(d){let c=(0,h.join)(a,".gsd","milestones"),d=!1;try{d=(0,f.readdirSync)(c,{withFileTypes:!0}).some(a=>a.isDirectory())}catch{}b=d?"active-gsd":"empty-gsd"}else b=e?"v1-legacy":i||j||k||l||n>2||g&&n>0?"brownfield":"blank";return{kind:b,signals:o}}let w={spawn:(a,b,c)=>(0,e.spawn)(a,b,c),existsSync:f.existsSync,execPath:process.execPath,env:process.env,indexWorkspace:a=>K(a),getAutoDashboardData:async()=>{let a=F(),b=a.env??process.env,c=L(b);return await p(c.packageRoot,{execPath:a.execPath??process.execPath,env:b,existsSync:a.existsSync??f.existsSync})},listSessions:async a=>J(a)},x=new Map,y=new Map;async function z(a){let b=F(),c=(0,h.join)(a.packageRoot,"packages","pi-coding-agent","dist","core","session-manager.js");if(!(b.existsSync??f.existsSync)(c))throw Error(`session manager module not found; checked=${c}`);return await new Promise((d,f)=>{(0,e.execFile)(b.execPath??process.execPath,["--input-type=module","--eval",'const { pathToFileURL } = await import("node:url"); const mod = await import(pathToFileURL(process.env.GSD_SESSION_MANAGER_MODULE).href); const sessions = await mod.SessionManager.list(process.env.GSD_SESSION_BROWSER_CWD, process.env.GSD_SESSION_BROWSER_DIR); process.stdout.write(JSON.stringify(sessions.map((session) => ({ ...session, created: session.created.toISOString(), modified: session.modified.toISOString() }))));'],{cwd:a.packageRoot,env:{...b.env??process.env,GSD_SESSION_MANAGER_MODULE:c,GSD_SESSION_BROWSER_CWD:a.projectCwd,GSD_SESSION_BROWSER_DIR:a.projectSessionsDir},maxBuffer:1048576},(a,b,c)=>{if(a)return void f(Error(`session list subprocess failed: ${c||a.message}`));try{let a=JSON.parse(b);d(a.map(a=>({...a,created:new Date(a.created),modified:new Date(a.modified)})))}catch(a){f(Error(`session list subprocess returned invalid JSON: ${a instanceof Error?a.message:String(a)}`))}})})}async function A(a,b,c){let d=F(),g=(0,h.join)(a.packageRoot,"packages","pi-coding-agent","dist","core","session-manager.js");if(!(d.existsSync??f.existsSync)(g))throw Error(`session manager module not found; checked=${g}`);await new Promise((f,h)=>{(0,e.execFile)(d.execPath??process.execPath,["--input-type=module","--eval",'const { pathToFileURL } = await import("node:url"); const mod = await import(pathToFileURL(process.env.GSD_SESSION_MANAGER_MODULE).href); const manager = mod.SessionManager.open(process.env.GSD_TARGET_SESSION_PATH, process.env.GSD_SESSION_BROWSER_DIR); manager.appendSessionInfo(process.env.GSD_TARGET_SESSION_NAME);'],{cwd:a.packageRoot,env:{...d.env??process.env,GSD_SESSION_MANAGER_MODULE:g,GSD_SESSION_BROWSER_DIR:a.projectSessionsDir,GSD_TARGET_SESSION_PATH:b,GSD_TARGET_SESSION_NAME:c},maxBuffer:1048576},(a,b,c)=>{a?h(Error(`session rename subprocess failed: ${c||a.message}`)):f()})})}function B(){return new Date().toISOString()}function C(a){return`${JSON.stringify(a)}
12
- `}function D(a){return a.replace(/sk-[A-Za-z0-9_-]{6,}/g,"[redacted]").replace(/xox[baprs]-[A-Za-z0-9-]+/g,"[redacted]").replace(/Bearer\s+[^\s]+/gi,"Bearer [redacted]").replace(/([A-Z0-9_]*(?:API[_-]?KEY|TOKEN|SECRET)["'=:\s]+)([^\s,;"']+)/gi,"$1[redacted]")}function E(a){return D(a instanceof Error?a.message:String(a)).replace(/\s+/g," ").trim()}function F(){return{...w}}function G(a){return structuredClone(a)}async function H(a,b){let c=y.get(a),d=Date.now();if(c?.value&&c.expiresAt>d)return G(c.value);if(c?.promise)return G(await c.promise);let e=b().then(b=>(y.set(a,{value:G(b),expiresAt:Date.now()+3e4,promise:null}),b)).catch(b=>{throw y.delete(a),b});return y.set(a,{value:c?.value??null,expiresAt:0,promise:e}),G(await e)}async function I(a,b){let c=F(),d=c.existsSync??f.existsSync,g=(0,h.join)(b,"src","resources","extensions","gsd","tests","resolve-ts.mjs"),k=(0,j.KW)(b,"resources/extensions/gsd/workspace-index.ts",d),l=k.modulePath;if(!k.useCompiledJs&&(!d(g)||!d(l)))throw Error(`workspace index loader not found; checked=${g},${l}`);if(k.useCompiledJs&&!d(l))throw Error(`workspace index module not found; checked=${l}`);let m=(0,j.vB)(b,k,(0,i.pathToFileURL)(g).href);return await new Promise((d,f)=>{(0,e.execFile)(c.execPath??process.execPath,[...m,"--eval",'const { pathToFileURL } = await import("node:url"); const mod = await import(pathToFileURL(process.env.GSD_WORKSPACE_MODULE).href); const result = await mod.indexWorkspace(process.env.GSD_WORKSPACE_BASE); process.stdout.write(JSON.stringify(result));'],{cwd:b,env:{...c.env??process.env,GSD_WORKSPACE_MODULE:l,GSD_WORKSPACE_BASE:a},maxBuffer:1048576},(a,b,c)=>{if(a)return void f(Error(`workspace index subprocess failed: ${c||a.message}`));try{d(JSON.parse(b))}catch(a){f(Error(`workspace index subprocess returned invalid JSON: ${a instanceof Error?a.message:String(a)}`))}})})}function J(a){if(!(0,f.existsSync)(a))return[];let b=(0,f.readdirSync)(a).filter(a=>a.endsWith(".jsonl")).map(b=>(function(a){try{let b,c=(0,f.readFileSync)(a,"utf-8").split("\n").map(a=>a.trim()).filter(Boolean),d="",e="",g=(0,f.statSync)(a).birthtime,h=0;for(let a of c){let c=JSON.parse(a);"session"===c.type?(d="string"==typeof c.id?c.id:d,e="string"==typeof c.cwd?c.cwd:e,"string"==typeof c.timestamp&&(g=new Date(c.timestamp))):"session_info"===c.type&&"string"==typeof c.name?b=c.name:"message"===c.type&&(h+=1)}if(!d)return null;return{path:a,id:d,cwd:e,name:b,created:g,modified:(0,f.statSync)(a).mtime,messageCount:h}}catch{return null}})((0,h.join)(a,b))).filter(a=>null!==a);return b.sort((a,b)=>b.modified.getTime()-a.modified.getTime()),b}async function K(a){let b=L().packageRoot;return await I(a,b)}function L(a=F().env??process.env,b){let c=b||a.GSD_WEB_PROJECT_CWD||process.cwd(),e=a.GSD_WEB_PROJECT_SESSIONS_DIR||function(a,b=l.vo){let c=`--${a.replace(/^[/\\]/,"").replace(/[/\\:]/g,"-")}--`;return(0,h.join)(b,c)}(c);return{projectCwd:c,projectSessionsDir:e,packageRoot:a.GSD_WEB_PACKAGE_ROOT||function(){if(void 0!==d)return d;try{d=(0,h.resolve)((0,h.dirname)((0,i.fileURLToPath)("file:///__w/gsd-2/gsd-2/src/web/bridge-service.ts")),"../..")}catch{d=process.cwd()}return d}()}}function M(a){return"extension_ui_response"===a.type}function N(a){return a.success?a:{...a,error:D(a.error)}}class O{constructor(a,b){this.subscribers=new Set,this.terminalSubscribers=new Set,this.pendingRequests=new Map,this.process=null,this.detachStdoutReader=null,this.startPromise=null,this.refreshPromise=null,this.authRefreshPromise=null,this.requestCounter=0,this.stderrBuffer="",this.config=a,this.deps=b,this.snapshot={phase:"idle",projectCwd:a.projectCwd,projectSessionsDir:a.projectSessionsDir,packageRoot:a.packageRoot,startedAt:null,updatedAt:B(),connectionCount:0,lastCommandType:null,activeSessionId:null,activeSessionFile:null,sessionState:null,lastError:null}}getSnapshot(){return structuredClone(this.snapshot)}publishLiveStateInvalidation(a){var b,c;let d=(c=a,{type:"live_state_invalidation",at:B(),reason:c.reason,source:c.source,domains:[...new Set(c.domains)],workspaceIndexCacheInvalidated:!!c.workspaceIndexCacheInvalidated});return d.workspaceIndexCacheInvalidated&&((b=this.config.projectCwd)?y.delete(b):y.clear()),this.emit(d),d}async ensureStarted(){if(!this.process||"ready"!==this.snapshot.phase){if(this.startPromise)return await this.startPromise;this.startPromise=this.startInternal();try{await this.startPromise}finally{this.startPromise=null}}}async sendInput(a){if(await this.ensureStarted(),!this.process?.stdin)throw Error(this.snapshot.lastError?.message||"RPC bridge is not connected");if(M(a))return this.process.stdin.write(C(a)),null;let b=N(await this.requestResponse(a));if(this.snapshot.lastCommandType=a.type,this.snapshot.updatedAt=B(),!b.success)return this.recordError(b.error,this.snapshot.phase,{commandType:a.type}),this.broadcastStatus(),b;if("get_state"===a.type&&b.success&&"get_state"===b.command)return this.applySessionState(b.data),this.broadcastStatus(),b;let c=function(a,b){if(!b.success)return null;switch(a.type){case"new_session":return"new_session"===b.command&&!1===b.data.cancelled?{reason:"new_session",source:"rpc_command",domains:["resumable_sessions","recovery"]}:null;case"switch_session":return"switch_session"===b.command&&!1===b.data.cancelled?{reason:"switch_session",source:"rpc_command",domains:["resumable_sessions","recovery"]}:null;case"fork":return"fork"===b.command&&!1===b.data.cancelled?{reason:"fork",source:"rpc_command",domains:["resumable_sessions","recovery"]}:null;case"set_session_name":return"set_session_name"===b.command?{reason:"set_session_name",source:"rpc_command",domains:["resumable_sessions"]}:null;default:return null}}(a,b);return c&&this.publishLiveStateInvalidation(c),this.queueStateRefresh(),this.broadcastStatus(),b}async refreshAuth(){if(this.authRefreshPromise)return await this.authRefreshPromise;this.authRefreshPromise=this.refreshAuthInternal().finally(()=>{this.authRefreshPromise=null}),await this.authRefreshPromise}async refreshAuthInternal(){this.startPromise&&await this.startPromise,this.process&&"ready"===this.snapshot.phase&&this.resetProcessForAuthRefresh(),await this.ensureStarted()}resetProcessForAuthRefresh(){let a=this.process;for(let a of(this.process=null,this.detachStdoutReader?.(),this.detachStdoutReader=null,this.stderrBuffer="",this.pendingRequests.values()))clearTimeout(a.timeout),a.reject(Error("RPC bridge restarting to reload auth"));if(this.pendingRequests.clear(),a){a.removeAllListeners("exit"),a.removeAllListeners("error"),a.kill("SIGTERM");try{a?.stdin?.destroy()}catch{}try{a?.stdout?.destroy()}catch{}try{a?.stderr?.destroy()}catch{}}this.snapshot.phase="idle",this.snapshot.updatedAt=B(),this.snapshot.lastError=null,this.broadcastStatus()}subscribe(a){return this.subscribers.add(a),this.snapshot.connectionCount=this.subscribers.size,this.snapshot.updatedAt=B(),this.broadcastStatus(),()=>{this.subscribers.delete(a),this.snapshot.connectionCount=this.subscribers.size,this.snapshot.updatedAt=B(),this.subscribers.size>0&&this.broadcastStatus()}}subscribeTerminal(a){return this.terminalSubscribers.add(a),()=>{this.terminalSubscribers.delete(a)}}async sendTerminalInput(a){await this.sendTerminalCommand({type:"terminal_input",data:a})}async resizeTerminal(a,b){await this.sendTerminalCommand({type:"terminal_resize",cols:a,rows:b})}async redrawTerminal(){await this.sendTerminalCommand({type:"terminal_redraw"})}async sendTerminalCommand(a){await this.ensureStarted();let b=N(await this.requestResponse(a));if(!b.success)throw this.recordError(b.error,this.snapshot.phase,{commandType:a.type}),this.broadcastStatus(),Error(b.error)}async dispose(){for(let a of(this.detachStdoutReader?.(),this.detachStdoutReader=null,this.terminalSubscribers.clear(),this.pendingRequests.values()))clearTimeout(a.timeout),a.reject(Error("RPC bridge disposed"));this.pendingRequests.clear(),this.process&&(this.process.removeAllListeners(),this.process.kill("SIGTERM"),this.process=null),this.snapshot.phase="idle",this.snapshot.connectionCount=0,this.snapshot.updatedAt=B()}async startInternal(){var a,b,c,d;let h,i,j,k,l,m,n;this.snapshot.phase="starting",this.snapshot.startedAt=B(),this.snapshot.updatedAt=this.snapshot.startedAt,this.snapshot.lastError=null,this.broadcastStatus();try{a=this.config,b=this.deps,h=(0,q.N)({packageRoot:a.packageRoot,cwd:a.projectCwd,execPath:b.execPath??process.execPath,hostKind:(b.env??process.env).GSD_WEB_HOST_KIND,mode:"rpc",sessionDir:a.projectSessionsDir,existsSync:b.existsSync??f.existsSync})}catch(a){throw this.snapshot.phase="failed",this.recordError(a,"starting"),a}let o=this.deps.spawn??((a,b,c)=>(0,e.spawn)(a,b,c)),p={...this.deps.env??process.env};delete p.GSD_CODING_AGENT_DIR,p.GSD_WEB_BRIDGE_TUI="1";let r=o(h.command,h.args,{cwd:h.cwd,env:p,stdio:["pipe","pipe","pipe"]});this.process=r,this.stderrBuffer="",r.stderr.on("data",a=>{var b,c;let d;this.stderrBuffer=(b=this.stderrBuffer,c=a.toString(),(d=`${b}${c}`).length<=8e3?d:d.slice(d.length-8e3))}),this.detachStdoutReader=(c=r.stdout,d=a=>this.handleStdoutLine(a),j=new g.StringDecoder("utf8"),k="",l=a=>{d(a.endsWith("\r")?a.slice(0,-1):a)},m=a=>{for(k+="string"==typeof a?a:j.write(a);;){let a=k.indexOf("\n");if(-1===a)return;l(k.slice(0,a)),k=k.slice(a+1)}},n=()=>{(k+=j.end()).length>0&&(l(k),k="")},c.on("data",m),c.on("end",n),()=>{c.off("data",m),c.off("end",n)}),r.once("exit",(a,b)=>this.handleProcessExit(a,b)),r.once("error",a=>this.handleProcessExit(null,null,a));let s=new Promise((a,b)=>{i=setTimeout(()=>b(Error("RPC bridge startup timed out after 150000ms")),15e4)});try{await Promise.race([this.refreshState(!0),s]),this.snapshot.phase="ready",this.snapshot.updatedAt=B(),this.snapshot.lastError=null,this.broadcastStatus()}catch(a){throw this.snapshot.phase="failed",this.recordError(a,"starting"),this.broadcastStatus(),a}finally{i&&clearTimeout(i)}}async queueStateRefresh(){if(this.refreshPromise)return await this.refreshPromise;this.refreshPromise=this.refreshState(!1).catch(a=>{this.recordError(a,this.snapshot.phase,{commandType:"get_state"})}).finally(()=>{this.refreshPromise=null}),await this.refreshPromise}async refreshState(a){let b=N(await this.requestResponse({type:"get_state"},a?15e4:void 0));if(!b.success)throw Error(b.error);"get_state"===b.command&&this.applySessionState(b.data),this.snapshot.updatedAt=B(),a||this.broadcastStatus()}applySessionState(a){this.snapshot.sessionState=a,this.snapshot.activeSessionId=a.sessionId,this.snapshot.activeSessionFile=a.sessionFile??null}requestResponse(a,b){if(!this.process?.stdin)return Promise.reject(Error("RPC bridge is not connected"));let c=a.id??`web_${++this.requestCounter}`,d={...a,id:c},e=b??3e4;return new Promise((a,b)=>{let f=setTimeout(()=>{this.pendingRequests.delete(c),b(Error(`Timed out waiting for RPC response to ${d.type}`))},e);this.pendingRequests.set(c,{resolve:b=>{clearTimeout(f),a(b)},reject:a=>{clearTimeout(f),b(a)},timeout:f}),this.process.stdin.write(C(d))})}handleStdoutLine(a){var b,c;let d;try{d=JSON.parse(a)}catch{return}if("object"==typeof(b=d)&&null!==b&&"type"in b&&"terminal_output"===b.type&&"string"==typeof b.data)return void this.emitTerminal(d.data);if("object"==typeof d&&null!==d&&"type"in d&&"response"===d.type){let a=N(d);if(a.id&&this.pendingRequests.has(a.id)){let b=this.pendingRequests.get(a.id);this.pendingRequests.delete(a.id),b.resolve(a);return}}let e="object"==typeof(c=d)&&null!==c&&"type"in c&&"extension_error"===c.type?{...c,error:D(c.error)}:c;if(this.emit(e),"object"==typeof e&&null!==e&&"type"in e&&"session_state_changed"===e.type&&"string"==typeof e.reason){let a=function(a){switch(a){case"new_session":return{reason:"new_session",source:"bridge_event",domains:["resumable_sessions","recovery"]};case"switch_session":return{reason:"switch_session",source:"bridge_event",domains:["resumable_sessions","recovery"]};case"fork":return{reason:"fork",source:"bridge_event",domains:["resumable_sessions","recovery"]};case"set_session_name":return{reason:"set_session_name",source:"bridge_event",domains:["resumable_sessions"]};default:return null}}(e.reason);a&&this.publishLiveStateInvalidation(a),this.queueStateRefresh();return}let f=function(a){if("object"!=typeof a||null===a||!("type"in a))return null;switch(a.type){case"agent_end":return{reason:"agent_end",source:"bridge_event",domains:["auto","workspace","recovery"],workspaceIndexCacheInvalidated:!0};case"auto_retry_start":return{reason:"auto_retry_start",source:"bridge_event",domains:["auto","recovery"]};case"auto_retry_end":return{reason:"auto_retry_end",source:"bridge_event",domains:["auto","recovery"]};case"auto_compaction_start":return{reason:"auto_compaction_start",source:"bridge_event",domains:["auto","recovery"]};case"auto_compaction_end":return{reason:"auto_compaction_end",source:"bridge_event",domains:["auto","recovery"]};default:return null}}(e);if(f&&this.publishLiveStateInvalidation(f),"object"==typeof e&&null!==e&&"type"in e){let a=e.type;("agent_end"===a||"auto_retry_start"===a||"auto_retry_end"===a||"auto_compaction_start"===a||"auto_compaction_end"===a)&&this.queueStateRefresh()}}handleProcessExit(a,b,c){var d;let e,f;this.detachStdoutReader?.(),this.detachStdoutReader=null,this.process=null;let g=Error((d=this.stderrBuffer,e=`RPC bridge exited${null!==a?` with code ${a}`:""}${b?` (${b})`:""}`,(f=D(d).trim())?`${e}. stderr=${f}`:e));for(let a of this.pendingRequests.values())clearTimeout(a.timeout),a.reject(g);this.pendingRequests.clear(),this.snapshot.phase="failed",this.snapshot.updatedAt=B(),this.recordError(c??g,this.snapshot.activeSessionId?"ready":"starting"),this.broadcastStatus()}recordError(a,b,c={}){this.snapshot.lastError={message:E(a),at:B(),phase:b,afterSessionAttachment:!!this.snapshot.activeSessionId,commandType:c.commandType},this.snapshot.updatedAt=this.snapshot.lastError.at}emit(a){for(let b of this.subscribers)try{b(a)}catch{}}emitTerminal(a){for(let b of this.terminalSubscribers)try{b(a)}catch{}}broadcastStatus(){0!==this.subscribers.size&&this.emit({type:"bridge_status",bridge:this.getSnapshot()})}}function P(a){let b=(0,h.resolve)(a),c=x.get(b);if(c)return c;let d=new O(L(void 0,b),F());return x.set(b,d),d}function Q(a){try{let b=new URL(a.url).searchParams.get("project");if(b)return decodeURIComponent(b)}catch{}return(F().env??process.env).GSD_WEB_PROJECT_CWD||null}function R(a){let b=Q(a);if(!b)throw new S;return b}class S extends Error{constructor(){super("No project selected"),this.name="NoProjectError"}}function T(){return P(L().projectCwd)}function U(a,b){return{id:a.id,path:a.path,cwd:a.cwd,name:a.name,createdAt:a.created.toISOString(),modifiedAt:a.modified.toISOString(),messageCount:a.messageCount,isActive:!!(b&&a.path===b)}}function V(a,b,c={}){return{success:!1,action:"rename",scope:k.PO,code:a,error:b,...c}}async function W(a={},b){let c=L(F().env??process.env,b),d=b?P(b):T();try{await d.ensureStarted()}catch{}let e=d.getSnapshot(),f=await z(c),g=(0,k.on)(a),i=("threaded"===g.sortMode&&!g.query?function(a){let b=[],c=(a,d,e,f)=>{b.push({session:a.session,depth:d,isLastInThread:f,ancestorHasNextSibling:e});for(let b=0;b<a.children.length;b++){let g=a.children[b];if(!g)continue;let h=b===a.children.length-1,i=d>0&&!f;c(g,d+1,[...e,i],h)}};for(let b=0;b<a.length;b++){let d=a[b];d&&c(d,0,[],b===a.length-1)}return b}(function(a){let b=new Map;for(let c of a)b.set(c.path,{session:c,children:[]});let c=[];for(let d of a){let a=b.get(d.path);if(!a)continue;let e=d.parentSessionPath;if(e&&b.has(e)){b.get(e).children.push(a);continue}c.push(a)}let d=a=>{for(let b of(a.sort((a,b)=>b.session.modified.getTime()-a.session.modified.getTime()),a))d(b.children)};return d(c),c}("named"===g.nameFilter?f.filter(a=>t(a)):f)):(function(a,b,c,d){let e="all"===d?a:a.filter(a=>t(a));if(!b.trim())return e;let f=function(a){let b=a.trim();if(!b)return{mode:"tokens",tokens:[],regex:null};if(b.startsWith("re:")){let a=b.slice(3).trim();if(!a)return{mode:"regex",tokens:[],regex:null,error:"Empty regex"};try{return{mode:"regex",tokens:[],regex:RegExp(a,"i")}}catch(a){return{mode:"regex",tokens:[],regex:null,error:a instanceof Error?a.message:String(a)}}}let c=[],d="",e=!1,f=!1,g=a=>{let b=d.trim();d="",b&&c.push({kind:a,value:b})};for(let a=0;a<b.length;a++){let c=b[a];if(c){if('"'===c){e?(g("phrase"),e=!1):(g("fuzzy"),e=!0);continue}if(!e&&/\s/.test(c)){g("fuzzy");continue}d+=c}}return(e&&(f=!0),f)?{mode:"tokens",tokens:b.split(/\s+/).map(a=>a.trim()).filter(a=>a.length>0).map(a=>({kind:"fuzzy",value:a})),regex:null}:(g(e?"phrase":"fuzzy"),{mode:"tokens",tokens:c,regex:null})}(b);if(f.error)return[];if("recent"===c){let a=[];for(let b of e)u(b,f).matches&&a.push(b);return a}let g=[];for(let a of e){let b=u(a,f);b.matches&&g.push({session:a,score:b.score})}return g.sort((a,b)=>a.score!==b.score?a.score-b.score:b.session.modified.getTime()-a.session.modified.getTime()),g.map(a=>a.session)})(f,g.query,g.sortMode,g.nameFilter).map(a=>({session:a,depth:0,isLastInThread:!0,ancestorHasNextSibling:[]}))).map(a=>(function(a,b){let{session:c}=a,d=!!(b&&(0,h.resolve)(c.path)===(0,h.resolve)(b));return{id:c.id,path:c.path,cwd:c.cwd,name:c.name,createdAt:c.created.toISOString(),modifiedAt:c.modified.toISOString(),messageCount:c.messageCount,parentSessionPath:c.parentSessionPath,firstMessage:c.firstMessage,isActive:d,depth:a.depth,isLastInThread:a.isLastInThread,ancestorHasNextSibling:[...a.ancestorHasNextSibling]}})(a,e.activeSessionFile));return{project:{scope:k.PO,cwd:c.projectCwd,sessionsDir:c.projectSessionsDir,activeSessionPath:e.activeSessionFile},query:g,totalSessions:f.length,returnedSessions:i.length,sessions:i}}async function X(a,b){var c,d;let e,f=L(F().env??process.env,b),g=a.name.trim();if(!g)return V("invalid_request","Session name cannot be empty",{sessionPath:a.sessionPath,name:a.name});let i=(c=await z(f),d=a.sessionPath,e=(0,h.resolve)(d),c.find(a=>(0,h.resolve)(a.path)===e));if(!i)return V("not_found","Session is not available in the current project browser",{sessionPath:a.sessionPath,name:g});let j=b?P(b):T();try{await j.ensureStarted()}catch(a){return V("rename_failed",E(a),{sessionPath:i.path,name:g})}let l=j.getSnapshot().activeSessionFile;if(l&&(0,h.resolve)(l)===(0,h.resolve)(i.path)){let a=await ac({type:"set_session_name",name:g},b);return null===a?V("rename_failed","Active session rename did not return a response",{sessionPath:i.path,name:g,isActiveSession:!0,mutation:"rpc"}):a.success?{success:!0,action:"rename",scope:k.PO,sessionPath:i.path,name:g,isActiveSession:!0,mutation:"rpc"}:V("onboarding_locked"===a.code?"onboarding_locked":"rename_failed",a.error,{sessionPath:i.path,name:g,isActiveSession:!0,mutation:"rpc"})}try{return await A(f,i.path,g),j.publishLiveStateInvalidation({reason:"set_session_name",source:"session_manage",domains:["resumable_sessions"]}),{success:!0,action:"rename",scope:k.PO,sessionPath:i.path,name:g,isActiveSession:!1,mutation:"session_file"}}catch(a){return V("rename_failed",E(a),{sessionPath:i.path,name:g,isActiveSession:!1,mutation:"session_file"})}}async function Y(a,b){if(a.getOnboardingState)return await a.getOnboardingState();if(a.getOnboardingNeeded){var c;return{status:(c=await a.getOnboardingNeeded(l.sI,b))?"blocked":"ready",locked:c,lockReason:c?"required_setup":null,required:{blocking:!0,skippable:!1,satisfied:!c,satisfiedBy:c?null:{providerId:"legacy",source:"runtime"},providers:[]},optional:{blocking:!1,skippable:!0,sections:[]},lastValidation:null,activeFlow:null,bridgeAuthRefresh:{phase:"idle",strategy:null,startedAt:null,completedAt:null,error:null}}}return await (0,m.r$)()}async function Z(a){let b=F(),c=b.env??process.env;return await Y(b,c)}async function $(a=["auto","workspace","resumable_sessions"],b){let c=F(),d=L(c.env??process.env,b),e=b?P(b):T();try{await e.ensureStarted()}catch{}let f=e.getSnapshot(),g=[...new Set(a)],h={bridge:f};if(g.includes("workspace")&&(h.workspace=await H(d.projectCwd,async()=>await (c.indexWorkspace??K)(d.projectCwd))),g.includes("auto")){let a=c.getAutoDashboardData??(()=>o());h.auto=await Promise.resolve(a())}return g.includes("resumable_sessions")&&(h.resumableSessions=(await (c.listSessions??(async a=>J(a)))(d.projectSessionsDir)).map(a=>U(a,f.activeSessionFile))),h}async function _(a){let b=F(),c=b.env??process.env,d=L(c,a),e=b.getAutoDashboardData??(()=>o()),f=b.listSessions??(async a=>J(a)),g=v(d.projectCwd),h=await Y(b,c);if(h.locked&&"packaged-standalone"===c.GSD_WEB_HOST_KIND)return{project:{cwd:d.projectCwd,sessionsDir:d.projectSessionsDir,packageRoot:d.packageRoot},workspace:{milestones:[],active:{phase:"pre-planning"},scopes:[{scope:"project",label:"project",kind:"project"}],validationIssues:[]},auto:o(),onboarding:h,onboardingNeeded:!0,resumableSessions:[],bridge:{phase:"idle",projectCwd:d.projectCwd,projectSessionsDir:d.projectSessionsDir,packageRoot:d.packageRoot,startedAt:null,updatedAt:new Date().toISOString(),connectionCount:0,lastCommandType:null,activeSessionId:null,activeSessionFile:null,sessionState:null,lastError:null},projectDetection:g};let i=a?P(a):T(),j=H(d.projectCwd,async()=>await (b.indexWorkspace??K)(d.projectCwd)),k=Promise.resolve(e()),l=f(d.projectSessionsDir);try{await i.ensureStarted()}catch{}let m=i.getSnapshot(),[n,p,q]=await Promise.all([j,k,l]);return{project:{cwd:d.projectCwd,sessionsDir:d.projectSessionsDir,packageRoot:d.packageRoot},workspace:n,auto:p,onboarding:h,onboardingNeeded:h.locked,resumableSessions:q.map(a=>U(a,m.activeSessionFile)),bridge:m,projectDetection:g}}function aa(a,b){return{type:"response",command:a,success:!1,error:E(b)}}async function ab(a){let b=a?P(a):T();await b.refreshAuth()}async function ac(a,b){if(!(!M(a)&&r.has(a.type))){let b=await (0,m.r$)();if(b.locked){let c;return c=b.lockReason??"required_setup",{type:"response",command:a.type,success:!1,error:"bridge_refresh_failed"===c?"Workspace is locked because bridge auth refresh failed after setup":"bridge_refresh_pending"===c?"Workspace is still locked while bridge auth refresh completes":"Workspace is locked until required onboarding completes",code:"onboarding_locked",details:{reason:c,onboarding:{locked:b.locked,lockReason:b.lockReason,required:b.required,lastValidation:b.lastValidation,bridgeAuthRefresh:b.bridgeAuthRefresh}}}}}let c=b?P(b):T();return await c.sendInput(a)}(0,m.Eu)(async()=>{await ab()})},78335:()=>{},92280:(a,b,c)=>{"use strict";Object.defineProperty(b,"I",{enumerable:!0,get:function(){return g}});let d=c(28208),e=c(47617),f=c(62018);async function g(a,b,c,g){if((0,d.isNodeNextResponse)(b)){var h;b.statusCode=c.status,b.statusMessage=c.statusText;let d=["set-cookie","www-authenticate","proxy-authenticate","vary"];null==(h=c.headers)||h.forEach((a,c)=>{if("x-middleware-set-cookie"!==c.toLowerCase())if("set-cookie"===c.toLowerCase())for(let d of(0,f.splitCookiesString)(a))b.appendHeader(c,d);else{let e=void 0!==b.getHeader(c);(d.includes(c.toLowerCase())||!e)&&b.appendHeader(c,a)}});let{originalResponse:i}=b;c.body&&"HEAD"!==a.method?await (0,e.pipeToNodeResponse)(c.body,i,g):i.end()}}},96487:()=>{}};
11
+ </html>`;function ak(a){let b=a.trim();if(!b)return{};try{let a=new URL(b);return{code:a.searchParams.get("code")??void 0,state:a.searchParams.get("state")??void 0}}catch{}if(b.includes("#")){let[a,c]=b.split("#",2);return{code:a,state:c}}if(b.includes("code=")){let a=new URLSearchParams(b);return{code:a.get("code")??void 0,state:a.get("state")??void 0}}return{code:b}}async function al(a,b,c=ai){let d=await fetch(ah,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:ag,code:a,code_verifier:b,redirect_uri:c}),signal:AbortSignal.timeout(3e4)});if(!d.ok){let a=await d.text().catch(()=>"");return console.error("[openai-codex] code->token failed:",d.status,a),{type:"failed"}}let e=await d.json();return e.access_token&&e.refresh_token&&"number"==typeof e.expires_in?{type:"success",access:e.access_token,refresh:e.refresh_token,expires:Date.now()+1e3*e.expires_in}:(console.error("[openai-codex] token response missing fields:",e),{type:"failed"})}async function am(a){try{let b=await fetch(ah,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:a,client_id:ag}),signal:AbortSignal.timeout(3e4)});if(!b.ok){let a=await b.text().catch(()=>"");return console.error("[openai-codex] Token refresh failed:",b.status,a),{type:"failed"}}let c=await b.json();if(!c.access_token||!c.refresh_token||"number"!=typeof c.expires_in)return console.error("[openai-codex] Token refresh response missing fields:",c),{type:"failed"};return{type:"success",access:c.access_token,refresh:c.refresh_token,expires:Date.now()+1e3*c.expires_in}}catch(a){return console.error("[openai-codex] Token refresh error:",a),{type:"failed"}}}async function an(a="pi"){let{verifier:b,challenge:c}=await l(),d=function(){if(!ae)throw Error("OpenAI Codex OAuth is only available in Node.js environments");return ae(16).toString("hex")}(),e=new URL("https://auth.openai.com/oauth/authorize");return e.searchParams.set("response_type","code"),e.searchParams.set("client_id",ag),e.searchParams.set("redirect_uri",ai),e.searchParams.set("scope","openid profile email offline_access"),e.searchParams.set("code_challenge",c),e.searchParams.set("code_challenge_method","S256"),e.searchParams.set("state",d),e.searchParams.set("id_token_add_organizations","true"),e.searchParams.set("codex_cli_simplified_flow","true"),e.searchParams.set("originator",a),{verifier:b,state:d,url:e.toString()}}function ao(a){let b=function(a){try{let b=a.split(".");if(3!==b.length)return null;let c=b[1]??"",d=atob(c);return JSON.parse(d)}catch{return null}}(a),c=b?.["https://api.openai.com/auth"],d=c?.chatgpt_account_id;return"string"==typeof d&&d.length>0?d:null}async function ap(a){let b,{verifier:c,state:d,url:e}=await an(a.originator),f=await function(a){if(!af)throw Error("OpenAI Codex OAuth is only available in Node.js environments");let b=null,c=!1,d=af.createServer((c,d)=>{try{let e=new URL(c.url||"","http://localhost");if("/auth/callback"!==e.pathname){d.statusCode=404,d.end("Not found");return}if(e.searchParams.get("state")!==a){d.statusCode=400,d.end("State mismatch");return}let f=e.searchParams.get("code");if(!f){d.statusCode=400,d.end("Missing authorization code");return}d.statusCode=200,d.setHeader("Content-Type","text/html; charset=utf-8"),d.end(aj),b=f}catch{d.statusCode=500,d.end("Internal error")}});return new Promise(a=>{d.listen(1455,"127.0.0.1",()=>{a({close:()=>d.close(),cancelWait:()=>{c=!0},waitForCode:async()=>{let a=()=>new Promise(a=>setTimeout(a,100));for(let d=0;d<600;d+=1){if(b)return{code:b};if(c)break;await a()}return null}})}).on("error",b=>{console.error("[openai-codex] Failed to bind http://127.0.0.1:1455 (",b.code,") Falling back to manual paste."),a({close:()=>{try{d.close()}catch{}},cancelWait:()=>{},waitForCode:async()=>null})})})}(d);a.onAuth({url:e,instructions:"A browser window should open. Complete login to finish."});try{if(a.onManualCodeInput){let c,e,g=a.onManualCodeInput().then(a=>{c=a,f.cancelWait()}).catch(a=>{e=a instanceof Error?a:Error(String(a)),f.cancelWait()}),h=await f.waitForCode();if(e)throw e;if(h?.code)b=h.code;else if(c){let a=ak(c);if(a.state&&a.state!==d)throw Error("State mismatch");b=a.code}if(!b){if(await g,e)throw e;if(c){let a=ak(c);if(a.state&&a.state!==d)throw Error("State mismatch");b=a.code}}}else{let a=await f.waitForCode();a?.code&&(b=a.code)}if(!b){let c=await a.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),e=ak(c);if(e.state&&e.state!==d)throw Error("State mismatch");b=e.code}if(!b)throw Error("Missing authorization code");let e=await al(b,c);if("success"!==e.type)throw Error("Token exchange failed");let g=ao(e.access);if(!g)throw Error("Failed to extract accountId from token");return{access:e.access,refresh:e.refresh,expires:e.expires,accountId:g}}finally{f.close()}}async function aq(a){let b=await am(a);if("success"!==b.type)throw Error("Failed to refresh OpenAI Codex token");let c=ao(b.access);if(!c)throw Error("Failed to extract accountId from token");return{access:b.access,refresh:b.refresh,expires:b.expires,accountId:c}}let ar=new Map([{id:"anthropic",name:"Anthropic (Claude Pro/Max)",login:async a=>p(b=>a.onAuth({url:b}),()=>a.onPrompt({message:"Paste the authorization code:"})),refreshToken:async a=>q(a.refresh),getApiKey:a=>a.access},{id:"github-copilot",name:"GitHub Copilot",login:async a=>G({onAuth:(b,c)=>a.onAuth({url:b,instructions:c}),onPrompt:a.onPrompt,onProgress:a.onProgress,signal:a.signal}),async refreshToken(a){let b=await C(a.refresh,a.enterpriseUrl);try{let c=await F(b.access,a.enterpriseUrl);Object.keys(c).length>0&&(b.modelLimits=c)}catch{}return b},getApiKey:a=>a.access,modifyModels(a,b){let c=b.enterpriseUrl?v(b.enterpriseUrl)??void 0:void 0,d=x(b.access,c),e=b.modelLimits;return a.map(a=>{if("github-copilot"!==a.provider)return a;let b=e?.[a.id];return{...a,baseUrl:d,...b&&{contextWindow:b.contextWindow,maxTokens:b.maxTokens}}})}},{id:"google-gemini-cli",name:"Google Cloud Code Assist (Gemini CLI)",usesCallbackServer:!0,login:async a=>ad(a.onAuth,a.onProgress,a.onManualCodeInput),async refreshToken(a){if(!a.projectId)throw Error("Google Cloud credentials missing projectId");return ac(a.refresh,a.projectId)},getApiKey:a=>JSON.stringify({token:a.access,projectId:a.projectId})},{id:"google-antigravity",name:"Antigravity (Gemini 3, Claude, GPT-OSS)",usesCallbackServer:!0,login:async a=>U(a.onAuth,a.onProgress,a.onManualCodeInput),async refreshToken(a){if(!a.projectId)throw Error("Antigravity credentials missing projectId");return T(a.refresh,a.projectId)},getApiKey:a=>JSON.stringify({token:a.access,projectId:a.projectId})},{id:"openai-codex",name:"ChatGPT Plus/Pro (Codex Subscription)",usesCallbackServer:!0,login:async a=>ap({onAuth:a.onAuth,onPrompt:a.onPrompt,onProgress:a.onProgress,onManualCodeInput:a.onManualCodeInput}),refreshToken:async a=>aq(a.refresh),getApiKey:a=>a.access}].map(a=>[a.id,a]));class as{constructor(a){this.data={},this.authPath=a,this.reload()}reload(){var a;let b;a=this.authPath,b=(0,g.dirname)(a),(0,e.existsSync)(b)||(0,e.mkdirSync)(b,{recursive:!0,mode:448}),(0,e.existsSync)(a)||((0,e.writeFileSync)(a,"{}","utf-8"),(0,e.chmodSync)(a,384)),this.data=function(a){if(!a||!a.trim())return{};try{let b=JSON.parse(a);return"object"==typeof b&&null!==b?b:{}}catch{return{}}}((0,e.readFileSync)(this.authPath,"utf-8"))}getCredentialsForProvider(a){let b=this.data[a];return b?Array.isArray(b)?b:[b]:[]}set(a,b){let c=this.getCredentialsForProvider(a),d="api_key"===b.type?this.mergeApiKeyCredentials(c,b):this.mergeOAuthCredential(c,b);this.data[a]=1===d.length?d[0]:d,(0,e.writeFileSync)(this.authPath,JSON.stringify(this.data,null,2),"utf-8"),(0,e.chmodSync)(this.authPath,384)}hasAuth(a){return this.getCredentialsForProvider(a).length>0||!!i(a)}getOAuthProviders(){return Array.from(ar.values())}async login(a,b){let c=ar.get(a);if(!c)throw Error(`Unknown OAuth provider: ${a}`);let d=await c.login(b);this.set(a,{type:"oauth",...d})}logout(a){delete this.data[a],(0,e.writeFileSync)(this.authPath,JSON.stringify(this.data,null,2),"utf-8"),(0,e.chmodSync)(this.authPath,384)}mergeApiKeyCredentials(a,b){return a.some(a=>"api_key"===a.type&&a.key===b.key)?a:[...a,b]}mergeOAuthCredential(a,b){return[...a.filter(a=>"api_key"===a.type),b]}}let at=null,au=[{id:"anthropic",label:"Anthropic (Claude)",supportsApiKey:!0,supportsOAuth:!0,recommended:!0},{id:"openai",label:"OpenAI",supportsApiKey:!0,supportsOAuth:!1},{id:"github-copilot",label:"GitHub Copilot",supportsApiKey:!1,supportsOAuth:!0},{id:"openai-codex",label:"ChatGPT Plus/Pro (Codex Subscription)",supportsApiKey:!1,supportsOAuth:!0},{id:"google-gemini-cli",label:"Google Cloud Code Assist (Gemini CLI)",supportsApiKey:!1,supportsOAuth:!0},{id:"google-antigravity",label:"Antigravity (Gemini 3, Claude, GPT-OSS)",supportsApiKey:!1,supportsOAuth:!0},{id:"google",label:"Google (Gemini API)",supportsApiKey:!0,supportsOAuth:!1},{id:"groq",label:"Groq",supportsApiKey:!0,supportsOAuth:!1},{id:"xai",label:"xAI (Grok)",supportsApiKey:!0,supportsOAuth:!1},{id:"openrouter",label:"OpenRouter",supportsApiKey:!0,supportsOAuth:!1},{id:"mistral",label:"Mistral",supportsApiKey:!0,supportsOAuth:!1}],av=[{id:"web_search",label:"Web search",providers:[{id:"brave",label:"Brave Search",envVar:"BRAVE_API_KEY"},{id:"tavily",label:"Tavily",envVar:"TAVILY_API_KEY"}]},{id:"tool_keys",label:"Tool API keys",providers:[{id:"context7",label:"Context7",envVar:"CONTEXT7_API_KEY"},{id:"jina",label:"Jina AI",envVar:"JINA_API_KEY"},{id:"groq",label:"Groq",envVar:"GROQ_API_KEY"}]},{id:"remote_questions",label:"Remote questions",providers:[{id:"discord_bot",label:"Discord",envVar:"DISCORD_BOT_TOKEN"},{id:"slack_bot",label:"Slack",envVar:"SLACK_BOT_TOKEN"}]}],aw=null;function ax(a){return a().toISOString()}function ay(a){return(a instanceof Error?a.message:String(a)).replace(/sk-[A-Za-z0-9_-]{6,}/g,"[redacted]").replace(/xox[baprs]-[A-Za-z0-9-]+/g,"[redacted]").replace(/Bearer\s+[^\s]+/gi,"Bearer [redacted]").replace(/([A-Z0-9_]*(?:API[_-]?KEY|TOKEN|SECRET)["'=:\s]+)([^\s,;"']+)/gi,"$1[redacted]").replace(/\s+/g," ").trim()}function az(){return{phase:"idle",strategy:null,startedAt:null,completedAt:null,error:null}}function aA(a,b){return a.getCredentialsForProvider(b).some(a=>"oauth"===a.type||"string"==typeof a.key&&a.key.trim().length>0)}async function aB(a,b){let c="";try{if((b.headers.get("content-type")||"").includes("application/json")){let a=await b.json();c=function a(b){if(!b)return null;if("string"==typeof b)return b;if("object"!=typeof b)return null;for(let c of[b.message,b.error,b.detail,b.error_description]){if("string"==typeof c&&c.trim().length>0)return c;let b=a(c);if(b)return b}return null}(a)??JSON.stringify(a)}else c=await b.text()}catch{c=""}let d=ay(c);return d?`${a} validation failed (${b.status}): ${d}`:`${a} validation failed (${b.status})`}async function aC(a,b,c,d,e={}){try{let f=await a(c,{headers:{Authorization:`Bearer ${d}`,...e},signal:AbortSignal.timeout(15e3)});if(!f.ok)return{ok:!1,message:await aB(b,f)};return{ok:!0,message:`${b} credentials validated`}}catch(a){return{ok:!1,message:`${b} validation failed: ${ay(a)}`}}}async function aD(a,b){try{let c=new URL("https://generativelanguage.googleapis.com/v1beta/models");c.searchParams.set("key",b);let d=await a(c,{signal:AbortSignal.timeout(15e3)});if(!d.ok)return{ok:!1,message:await aB("google",d)};return{ok:!0,message:"google credentials validated"}}catch(a){return{ok:!1,message:`google validation failed: ${ay(a)}`}}}async function aE(a,b){try{let c=await a("https://api.anthropic.com/v1/models",{headers:{"x-api-key":b,"anthropic-version":"2023-06-01"},signal:AbortSignal.timeout(15e3)});if(!c.ok)return{ok:!1,message:await aB("anthropic",c)};return{ok:!0,message:"anthropic credentials validated"}}catch(a){return{ok:!1,message:`anthropic validation failed: ${ay(a)}`}}}async function aF(a,b,c){switch(a){case"anthropic":return await aE(c,b);case"openai":return await aC(c,a,"https://api.openai.com/v1/models",b);case"google":return await aD(c,b);case"groq":return await aC(c,a,"https://api.groq.com/openai/v1/models",b);case"xai":return await aC(c,a,"https://api.x.ai/v1/models",b);case"openrouter":return await aC(c,a,"https://openrouter.ai/api/v1/models",b,{"HTTP-Referer":"https://localhost","X-Title":"GSD onboarding"});case"mistral":return await aC(c,a,"https://api.mistral.ai/v1/models",b);default:return{ok:!1,message:`${a} does not support API-key validation via onboarding`}}}class aG{constructor(a){this.authStorage=null,this.lastValidation=null,this.activeFlow=null,this.bridgeAuthRefresh=az(),this.deps=a}async getState(){return this.buildState()}async validateAndSaveApiKey(a,b){let c=au.find(b=>b.id===a);if(!c)throw Error(`Unknown onboarding provider: ${a}`);if(!c.supportsApiKey)throw Error(`${a} must be configured with browser sign-in`);let d=b.trim();if(!d)throw Error("API key is required");let e=this.deps.validateApiKey??(async(a,b)=>await aF(a,b,this.deps.fetch??fetch)),f=await e(a,d),g=ax(this.deps.now??(()=>new Date));if(!f.ok)return this.lastValidation={status:"failed",providerId:a,method:"api_key",checkedAt:g,message:ay(f.message),persisted:!1},await this.buildState();let h=await this.getAuthStorage();return h.reload(),h.set(a,{type:"api_key",key:d}),this.lastValidation={status:"succeeded",providerId:a,method:"api_key",checkedAt:g,message:ay(f.message||`${a} credentials validated`),persisted:!0},await this.refreshBridgeAuth(),await this.buildState()}async startProviderFlow(a){let b=await this.getAuthStorage();b.reload();let c=b.getOAuthProviders().find(b=>b.id===a);if(!c)throw Error(`OAuth provider not available for onboarding: ${a}`);this.activeFlow&&["running","awaiting_browser_auth","awaiting_input"].includes(this.activeFlow.state.status)&&this.cancelActiveFlow();let e={state:{flowId:(this.deps.createFlowId??(()=>(0,d.randomUUID)()))(),providerId:a,providerLabel:c.name,status:"running",updatedAt:ax(this.deps.now??(()=>new Date)),auth:null,prompt:null,progress:[],error:null},awaitingInput:null,abortController:new AbortController};return this.activeFlow=e,this.runOAuthFlow(e,c,b),await this.buildState()}async submitProviderFlowInput(a,b){let c=this.activeFlow;if(!c||c.state.flowId!==a)throw Error(`Unknown onboarding flow: ${a}`);if(!c.awaitingInput)throw Error(`Onboarding flow ${a} is not waiting for input`);let d=c.awaitingInput;return c.awaitingInput=null,c.state.prompt=null,c.state.status="running",c.state.updatedAt=ax(this.deps.now??(()=>new Date)),d(b),await this.buildState()}async cancelProviderFlow(a){let b=this.activeFlow;if(!b||b.state.flowId!==a)throw Error(`Unknown onboarding flow: ${a}`);return this.cancelActiveFlow(),await this.buildState()}async logoutProvider(a){let b=await this.getAuthStorage();b.reload();let c=await this.buildState(),d=a.trim()||c.required.satisfiedBy?.providerId||c.required.providers.find(a=>a.configured)?.id;if(!d)throw Error("No configured provider is available to log out");let e=c.required.providers.find(a=>a.id===d),f=e?.label??d;if(!e?.configured)throw Error(`${f} is not configured in this workspace`);if("auth_file"!==e.configuredVia)throw Error(`${f} is configured via ${e.configuredVia} and cannot be logged out from the browser surface`);return this.activeFlow&&this.activeFlow.state.providerId===d&&["running","awaiting_browser_auth","awaiting_input"].includes(this.activeFlow.state.status)&&this.cancelActiveFlow(),b.logout(d),this.lastValidation=null,await this.refreshBridgeAuth(),await this.buildState()}async refreshBridgeAuth(){let a=this.deps.refreshBridgeAuth;if(!a){this.bridgeAuthRefresh=az();return}let b=ax(this.deps.now??(()=>new Date));this.bridgeAuthRefresh={phase:"pending",strategy:"restart",startedAt:b,completedAt:null,error:null};try{await a(),this.bridgeAuthRefresh={phase:"succeeded",strategy:"restart",startedAt:b,completedAt:ax(this.deps.now??(()=>new Date)),error:null}}catch(a){this.bridgeAuthRefresh={phase:"failed",strategy:"restart",startedAt:b,completedAt:ax(this.deps.now??(()=>new Date)),error:ay(a)}}}async getAuthStorage(){return this.authStorage||(this.deps.authStorage?this.authStorage=this.deps.authStorage:this.deps.createAuthStorage?this.authStorage=await this.deps.createAuthStorage(this.deps.authPath??j.sI):this.authStorage=new as(this.deps.authPath??j.sI)),this.authStorage}buildOptionalSectionState(a){let b=this.deps.env??process.env;return av.map(c=>{let d=c.providers.filter(c=>{let d=!!c.envVar&&"string"==typeof b[c.envVar]&&b[c.envVar].trim().length>0,e=aA(a,c.id);return d||e}).map(a=>a.label);return{id:c.id,label:c.label,blocking:!1,skippable:!0,configured:d.length>0,configuredItems:d}})}buildProviderState(a,b){let c=new Map(a.getOAuthProviders().map(a=>[a.id,a]));return au.map(d=>{var e;let f=c.get(d.id),g=(e=d.id,aA(a,e)?"auth_file":b(e)?"environment":a.getCredentialsForProvider(e).length>0?"runtime":null);return{id:d.id,label:f?.name??d.label,required:!0,recommended:!!d.recommended,configured:null!==g,configuredVia:g,supports:{apiKey:d.supportsApiKey,oauth:d.supportsOAuth,oauthAvailable:!!d.supportsOAuth&&!!f,usesCallbackServer:!!f?.usesCallbackServer}}})}async buildState(){var a,b;let c=await this.getAuthStorage(),d=this.deps.getEnvApiKey??i;c.reload();let e=this.buildProviderState(c,d),f=e.find(a=>a.configured)??null,g=this.buildOptionalSectionState(c),h=(a=!!f,b=this.bridgeAuthRefresh,a?"pending"===b.phase?"bridge_refresh_pending":"failed"===b.phase?"bridge_refresh_failed":null:"required_setup");return{status:h?"blocked":"ready",locked:null!==h,lockReason:h,required:{blocking:!0,skippable:!1,satisfied:!!f,satisfiedBy:f?{providerId:f.id,source:f.configuredVia??"runtime"}:null,providers:e},optional:{blocking:!1,skippable:!0,sections:g},lastValidation:this.lastValidation?{...this.lastValidation}:null,activeFlow:this.activeFlow?structuredClone(this.activeFlow.state):null,bridgeAuthRefresh:{...this.bridgeAuthRefresh}}}cancelActiveFlow(){this.activeFlow&&(this.activeFlow.abortController.abort(),this.activeFlow.awaitingInput&&(this.activeFlow.awaitingInput(""),this.activeFlow.awaitingInput=null),this.activeFlow.state.status="cancelled",this.activeFlow.state.prompt=null,this.activeFlow.state.error=null,this.activeFlow.state.updatedAt=ax(this.deps.now??(()=>new Date)))}async runOAuthFlow(a,b,c){try{await c.login(b.id,{onAuth:b=>{a.state.auth=b,a.state.status="awaiting_browser_auth",a.state.updatedAt=ax(this.deps.now??(()=>new Date))},onPrompt:async b=>await this.waitForFlowInput(a,"text",b),onProgress:b=>{a.state.progress=[...a.state.progress,ay(b)].slice(-20),"awaiting_input"!==a.state.status&&(a.state.status="running"),a.state.updatedAt=ax(this.deps.now??(()=>new Date))},onManualCodeInput:async()=>await this.waitForFlowInput(a,"manual_code",{message:"Paste the redirect URL from your browser:",placeholder:"http://localhost:..."}),signal:a.abortController.signal}),a.state.status="succeeded",a.state.prompt=null,a.state.error=null,a.state.updatedAt=ax(this.deps.now??(()=>new Date)),this.lastValidation={status:"succeeded",providerId:b.id,method:"oauth",checkedAt:a.state.updatedAt,message:`${b.id} sign-in complete`,persisted:!0},await this.refreshBridgeAuth()}catch(d){let c=a.abortController.signal.aborted;a.state.status=c?"cancelled":"failed",a.state.prompt=null,a.state.error=c?null:ay(d),a.state.updatedAt=ax(this.deps.now??(()=>new Date)),c||(this.lastValidation={status:"failed",providerId:b.id,method:"oauth",checkedAt:a.state.updatedAt,message:a.state.error||`${b.id} sign-in failed`,persisted:!1})}}async waitForFlowInput(a,b,c){return a.state.status="awaiting_input",a.state.prompt={kind:b,message:c.message,placeholder:c.placeholder,allowEmpty:c.allowEmpty},a.state.updatedAt=ax(this.deps.now??(()=>new Date)),await new Promise(b=>{a.awaitingInput=b})}}function aH(){return aw||(aw=new aG({env:process.env,authPath:j.sI,fetch,now:()=>new Date,createFlowId:()=>(0,d.randomUUID)(),validateApiKey:function(a){if("1"===a.GSD_WEB_TEST_FAKE_API_KEY_VALIDATION)return async(a,b)=>{let c=au.find(b=>b.id===a)?.label??a,d=b.trim().toLowerCase();return!d||d.includes("invalid")||d.includes("reject")||d.includes("fail")?{ok:!1,message:`${c} rejected the supplied key`}:{ok:!0,message:`${c} credentials validated`}}}(process.env),refreshBridgeAuth:at??void 0,...{}})),aw}async function aI(){return await aH().getState()}function aJ(a){at=a,aw=null}},36460:(a,b,c)=>{"use strict";c.d(b,{AL:()=>i,PO:()=>d,_B:()=>j,on:()=>k,ql:()=>h});let d="current_project",e=["threaded","recent","relevance"],f=["all","named"],g=["rename"];function h(a){return e.includes(a??"")}function i(a){return f.includes(a??"")}function j(a){return g.includes(a??"")}function k(a){return{query:a?.query?.trim()??"",sortMode:a?.sortMode??"threaded",nameFilter:a?.nameFilter??"all"}}},52813:(a,b,c)=>{"use strict";c.d(b,{N:()=>h});var d=c(73024),e=c(76760),f=c(73136),g=c(34431);function h(a){let b=a.existsSync??d.existsSync,c=a.execPath??process.execPath,h=function(a){if("rpc"!==a.mode)return[];if(!a.sessionDir)throw Error("RPC CLI entry requires sessionDir");return["--mode","rpc","--continue","--session-dir",a.sessionDir]}(a),i="interactive"===a.mode?a.messages??[]:[],j=(0,e.join)(a.packageRoot,"src","loader.ts"),k=(0,e.join)(a.packageRoot,"src","resources","extensions","gsd","tests","resolve-ts.mjs"),l=(0,e.join)(a.packageRoot,"dist","loader.js"),m=b(j)&&b(k)?{command:c,args:["--import",(0,f.pathToFileURL)(k).href,(0,g.hg)(a.packageRoot),j,...h,...i],cwd:a.cwd}:null,n=b(l)?{command:c,args:[l,...h,...i],cwd:a.cwd}:null;if("packaged-standalone"===a.hostKind){if(n)return n;if(m)return m}else{if(m)return m;if(n)return n}throw Error(`GSD CLI entry not found; checked=${j},${l}`)}},74900:(a,b,c)=>{"use strict";let d;c.d(b,{xD:()=>aa,Fs:()=>_,tL:()=>Z,yd:()=>$,tS:()=>W,pA:()=>v,tl:()=>P,Os:()=>X,jL:()=>R,eG:()=>L,O5:()=>Q,sM:()=>ac});var e=c(31421),f=c(73024),g=c(46193),h=c(76760),i=c(73136),j=c(34431),k=c(36460),l=c(7849),m=c(36152);let n="GSD_AUTO_DASHBOARD_MODULE";function o(){return{active:!1,paused:!1,stepMode:!1,startTime:0,elapsed:0,currentUnit:null,completedUnits:[],basePath:"",totalCost:0,totalTokens:0,rtkSavings:null,rtkEnabled:!1}}async function p(a,b={}){let c=b.env??process.env;if("1"===c.GSD_WEB_TEST_USE_FALLBACK_AUTO_DASHBOARD)return o();let d=b.existsSync??f.existsSync,g=(0,h.join)(a,"src","resources","extensions","gsd","tests","resolve-ts.mjs"),k=c.GSD_WEB_TEST_AUTO_DASHBOARD_MODULE,l=k?{modulePath:k,useCompiledJs:!1}:(0,j.KW)(a,"resources/extensions/gsd/auto.ts",d),m=l.modulePath;if(!l.useCompiledJs&&(!d(g)||!d(m)))throw Error(`authoritative auto dashboard provider not found; checked=${g},${m}`);if(l.useCompiledJs&&!d(m))throw Error(`authoritative auto dashboard provider not found; checked=${m}`);let q=`const { pathToFileURL } = await import("node:url"); const mod = await import(pathToFileURL(process.env.${n}).href); const result = await mod.getAutoDashboardData(); process.stdout.write(JSON.stringify(result));`,r=(0,j.vB)(a,l,(0,i.pathToFileURL)(g).href);return await new Promise((g,i)=>{(0,e.execFile)(b.execPath??process.execPath,[...r,"--eval",q],{cwd:a,env:{...c,[n]:m},maxBuffer:1048576,windowsHide:!0},(a,b,e)=>{if(a)return void i(Error(`authoritative auto dashboard subprocess failed: ${e||a.message}`));try{let a=JSON.parse(b),e=c.GSD_WEB_PROJECT_CWD||"",i=e?function(a,b,c){if(a.active||a.paused)return a;let d=(0,h.join)(b,".gsd","runtime","paused-session.json");if(c(d))try{return JSON.parse((0,f.readFileSync)(d,"utf-8")),{...a,paused:!0}}catch{}let e=(0,h.join)(b,".gsd","auto.lock");if(c(e))try{let b=JSON.parse((0,f.readFileSync)(e,"utf-8"));if("number"==typeof b.pid&&function(a){try{return process.kill(a,0),!0}catch{return!1}}(b.pid))return{...a,active:!0}}catch{}return a}(a,e,d):a;g(i)}catch(a){i(Error(`authoritative auto dashboard subprocess returned invalid JSON: ${a instanceof Error?a.message:String(a)}`))}})})}var q=c(52813);let r=new Set(["get_state","get_available_models","get_session_stats","get_messages","get_last_assistant_text","get_fork_messages","get_commands"]);function s(a){return a.toLowerCase().replace(/\s+/g," ").trim()}function t(a){return!!a.name?.trim()}function u(a,b){let c=`${a.id} ${a.name??""} ${a.allMessagesText} ${a.cwd}`;if("regex"===b.mode){if(!b.regex)return{matches:!1,score:0};let a=c.search(b.regex);return a<0?{matches:!1,score:0}:{matches:!0,score:.1*a}}if(0===b.tokens.length)return{matches:!0,score:0};let d=0,e=null;for(let a of b.tokens){if("phrase"===a.kind){null===e&&(e=s(c));let b=s(a.value);if(!b)continue;let f=e.indexOf(b);if(f<0)return{matches:!1,score:0};d+=.1*f;continue}let b=function(a,b){let c=a.toLowerCase(),d=b.toLowerCase(),e=a=>{if(0===a.length)return{matches:!0,score:0};if(a.length>d.length)return{matches:!1,score:0};let b=0,c=0,e=-1,f=0;for(let g=0;g<d.length&&b<a.length;g++){if(d[g]!==a[b])continue;let h=0===g||/[\s\-_./:]/.test(d[g-1]);e===g-1?c-=5*++f:(f=0,e>=0&&(c+=(g-e-1)*2)),h&&(c-=10),c+=.1*g,e=g,b++}return b<a.length?{matches:!1,score:0}:{matches:!0,score:c}},f=e(c);if(f.matches)return f;let g=c.match(/^(?<letters>[a-z]+)(?<digits>[0-9]+)$/),h=c.match(/^(?<digits>[0-9]+)(?<letters>[a-z]+)$/),i=g?`${g.groups?.digits??""}${g.groups?.letters??""}`:h?`${h.groups?.letters??""}${h.groups?.digits??""}`:"";if(!i)return f;let j=e(i);return j.matches?{matches:!0,score:j.score+5}:f}(a.value,c);if(!b.matches)return{matches:!1,score:0};d+=b.score}return{matches:!0,score:d}}function v(a){let b,c=F().existsSync??f.existsSync,d=c((0,h.join)(a,".gsd")),e=c((0,h.join)(a,".planning")),g=c((0,h.join)(a,".git")),i=c((0,h.join)(a,"package.json")),j=c((0,h.join)(a,"Cargo.toml")),k=c((0,h.join)(a,"go.mod")),l=c((0,h.join)(a,"pyproject.toml")),m=function(a,b){let c=b??F().existsSync??f.existsSync;if(c((0,h.join)(a,"pnpm-workspace.yaml"))||c((0,h.join)(a,"lerna.json"))||c((0,h.join)(a,"rush.json"))||c((0,h.join)(a,"nx.json"))||c((0,h.join)(a,"turbo.json")))return!0;let d=(0,h.join)(a,"package.json");if(c(d))try{let a=(0,f.readFileSync)(d,"utf-8"),b=JSON.parse(a);if(null!=b.workspaces)return!0}catch{}return!1}(a,c),n=0;try{n=(0,f.readdirSync)(a).filter(a=>!a.startsWith(".")).length}catch{}let o={hasGsdFolder:d,hasPlanningFolder:e,hasGitRepo:g,hasPackageJson:i,hasCargo:j,hasGoMod:k,hasPyproject:l,isMonorepo:m,fileCount:n};if(d){let c=(0,h.join)(a,".gsd","milestones"),d=!1;try{d=(0,f.readdirSync)(c,{withFileTypes:!0}).some(a=>a.isDirectory())}catch{}b=d?"active-gsd":"empty-gsd"}else b=e?"v1-legacy":i||j||k||l||n>2||g&&n>0?"brownfield":"blank";return{kind:b,signals:o}}let w={spawn:(a,b,c)=>(0,e.spawn)(a,b,c),existsSync:f.existsSync,execPath:process.execPath,env:process.env,indexWorkspace:a=>K(a),getAutoDashboardData:async()=>{let a=F(),b=a.env??process.env,c=L(b);return await p(c.packageRoot,{execPath:a.execPath??process.execPath,env:b,existsSync:a.existsSync??f.existsSync})},listSessions:async a=>J(a)},x=new Map,y=new Map;async function z(a){let b=F(),c=(0,h.join)(a.packageRoot,"packages","pi-coding-agent","dist","core","session-manager.js");if(!(b.existsSync??f.existsSync)(c))throw Error(`session manager module not found; checked=${c}`);return await new Promise((d,f)=>{(0,e.execFile)(b.execPath??process.execPath,["--input-type=module","--eval",'const { pathToFileURL } = await import("node:url"); const mod = await import(pathToFileURL(process.env.GSD_SESSION_MANAGER_MODULE).href); const sessions = await mod.SessionManager.list(process.env.GSD_SESSION_BROWSER_CWD, process.env.GSD_SESSION_BROWSER_DIR); process.stdout.write(JSON.stringify(sessions.map((session) => ({ ...session, created: session.created.toISOString(), modified: session.modified.toISOString() }))));'],{cwd:a.packageRoot,env:{...b.env??process.env,GSD_SESSION_MANAGER_MODULE:c,GSD_SESSION_BROWSER_CWD:a.projectCwd,GSD_SESSION_BROWSER_DIR:a.projectSessionsDir},maxBuffer:1048576,windowsHide:!0},(a,b,c)=>{if(a)return void f(Error(`session list subprocess failed: ${c||a.message}`));try{let a=JSON.parse(b);d(a.map(a=>({...a,created:new Date(a.created),modified:new Date(a.modified)})))}catch(a){f(Error(`session list subprocess returned invalid JSON: ${a instanceof Error?a.message:String(a)}`))}})})}async function A(a,b,c){let d=F(),g=(0,h.join)(a.packageRoot,"packages","pi-coding-agent","dist","core","session-manager.js");if(!(d.existsSync??f.existsSync)(g))throw Error(`session manager module not found; checked=${g}`);await new Promise((f,h)=>{(0,e.execFile)(d.execPath??process.execPath,["--input-type=module","--eval",'const { pathToFileURL } = await import("node:url"); const mod = await import(pathToFileURL(process.env.GSD_SESSION_MANAGER_MODULE).href); const manager = mod.SessionManager.open(process.env.GSD_TARGET_SESSION_PATH, process.env.GSD_SESSION_BROWSER_DIR); manager.appendSessionInfo(process.env.GSD_TARGET_SESSION_NAME);'],{cwd:a.packageRoot,env:{...d.env??process.env,GSD_SESSION_MANAGER_MODULE:g,GSD_SESSION_BROWSER_DIR:a.projectSessionsDir,GSD_TARGET_SESSION_PATH:b,GSD_TARGET_SESSION_NAME:c},maxBuffer:1048576,windowsHide:!0},(a,b,c)=>{a?h(Error(`session rename subprocess failed: ${c||a.message}`)):f()})})}function B(){return new Date().toISOString()}function C(a){return`${JSON.stringify(a)}
12
+ `}function D(a){return a.replace(/sk-[A-Za-z0-9_-]{6,}/g,"[redacted]").replace(/xox[baprs]-[A-Za-z0-9-]+/g,"[redacted]").replace(/Bearer\s+[^\s]+/gi,"Bearer [redacted]").replace(/([A-Z0-9_]*(?:API[_-]?KEY|TOKEN|SECRET)["'=:\s]+)([^\s,;"']+)/gi,"$1[redacted]")}function E(a){return D(a instanceof Error?a.message:String(a)).replace(/\s+/g," ").trim()}function F(){return{...w}}function G(a){return structuredClone(a)}async function H(a,b){let c=y.get(a),d=Date.now();if(c?.value&&c.expiresAt>d)return G(c.value);if(c?.promise)return G(await c.promise);let e=b().then(b=>(y.set(a,{value:G(b),expiresAt:Date.now()+3e4,promise:null}),b)).catch(b=>{throw y.delete(a),b});return y.set(a,{value:c?.value??null,expiresAt:0,promise:e}),G(await e)}async function I(a,b){let c=F(),d=c.existsSync??f.existsSync,g=(0,h.join)(b,"src","resources","extensions","gsd","tests","resolve-ts.mjs"),k=(0,j.KW)(b,"resources/extensions/gsd/workspace-index.ts",d),l=k.modulePath;if(!k.useCompiledJs&&(!d(g)||!d(l)))throw Error(`workspace index loader not found; checked=${g},${l}`);if(k.useCompiledJs&&!d(l))throw Error(`workspace index module not found; checked=${l}`);let m=(0,j.vB)(b,k,(0,i.pathToFileURL)(g).href);return await new Promise((d,f)=>{(0,e.execFile)(c.execPath??process.execPath,[...m,"--eval",'const { pathToFileURL } = await import("node:url"); const mod = await import(pathToFileURL(process.env.GSD_WORKSPACE_MODULE).href); const result = await mod.indexWorkspace(process.env.GSD_WORKSPACE_BASE); process.stdout.write(JSON.stringify(result));'],{cwd:b,env:{...c.env??process.env,GSD_WORKSPACE_MODULE:l,GSD_WORKSPACE_BASE:a},maxBuffer:1048576,windowsHide:!0},(a,b,c)=>{if(a)return void f(Error(`workspace index subprocess failed: ${c||a.message}`));try{d(JSON.parse(b))}catch(a){f(Error(`workspace index subprocess returned invalid JSON: ${a instanceof Error?a.message:String(a)}`))}})})}function J(a){if(!(0,f.existsSync)(a))return[];let b=(0,f.readdirSync)(a).filter(a=>a.endsWith(".jsonl")).map(b=>(function(a){try{let b,c=(0,f.readFileSync)(a,"utf-8").split("\n").map(a=>a.trim()).filter(Boolean),d="",e="",g=(0,f.statSync)(a).birthtime,h=0;for(let a of c){let c=JSON.parse(a);"session"===c.type?(d="string"==typeof c.id?c.id:d,e="string"==typeof c.cwd?c.cwd:e,"string"==typeof c.timestamp&&(g=new Date(c.timestamp))):"session_info"===c.type&&"string"==typeof c.name?b=c.name:"message"===c.type&&(h+=1)}if(!d)return null;return{path:a,id:d,cwd:e,name:b,created:g,modified:(0,f.statSync)(a).mtime,messageCount:h}}catch{return null}})((0,h.join)(a,b))).filter(a=>null!==a);return b.sort((a,b)=>b.modified.getTime()-a.modified.getTime()),b}async function K(a){let b=L().packageRoot;return await I(a,b)}function L(a=F().env??process.env,b){let c=b||a.GSD_WEB_PROJECT_CWD||process.cwd(),e=a.GSD_WEB_PROJECT_SESSIONS_DIR||function(a,b=l.vo){let c=`--${a.replace(/^[/\\]/,"").replace(/[/\\:]/g,"-")}--`;return(0,h.join)(b,c)}(c);return{projectCwd:c,projectSessionsDir:e,packageRoot:a.GSD_WEB_PACKAGE_ROOT||function(){if(void 0!==d)return d;try{d=(0,h.resolve)((0,h.dirname)((0,i.fileURLToPath)("file:///__w/gsd-2/gsd-2/src/web/bridge-service.ts")),"../..")}catch{d=process.cwd()}return d}()}}function M(a){return"extension_ui_response"===a.type}function N(a){return a.success?a:{...a,error:D(a.error)}}class O{constructor(a,b){this.subscribers=new Set,this.terminalSubscribers=new Set,this.pendingRequests=new Map,this.process=null,this.detachStdoutReader=null,this.startPromise=null,this.refreshPromise=null,this.authRefreshPromise=null,this.requestCounter=0,this.stderrBuffer="",this.config=a,this.deps=b,this.snapshot={phase:"idle",projectCwd:a.projectCwd,projectSessionsDir:a.projectSessionsDir,packageRoot:a.packageRoot,startedAt:null,updatedAt:B(),connectionCount:0,lastCommandType:null,activeSessionId:null,activeSessionFile:null,sessionState:null,lastError:null}}getSnapshot(){return structuredClone(this.snapshot)}publishLiveStateInvalidation(a){var b,c;let d=(c=a,{type:"live_state_invalidation",at:B(),reason:c.reason,source:c.source,domains:[...new Set(c.domains)],workspaceIndexCacheInvalidated:!!c.workspaceIndexCacheInvalidated});return d.workspaceIndexCacheInvalidated&&((b=this.config.projectCwd)?y.delete(b):y.clear()),this.emit(d),d}async ensureStarted(){if(!this.process||"ready"!==this.snapshot.phase){if(this.startPromise)return await this.startPromise;this.startPromise=this.startInternal();try{await this.startPromise}finally{this.startPromise=null}}}async sendInput(a){if(await this.ensureStarted(),!this.process?.stdin)throw Error(this.snapshot.lastError?.message||"RPC bridge is not connected");if(M(a))return this.process.stdin.write(C(a)),null;let b=N(await this.requestResponse(a));if(this.snapshot.lastCommandType=a.type,this.snapshot.updatedAt=B(),!b.success)return this.recordError(b.error,this.snapshot.phase,{commandType:a.type}),this.broadcastStatus(),b;if("get_state"===a.type&&b.success&&"get_state"===b.command)return this.applySessionState(b.data),this.broadcastStatus(),b;let c=function(a,b){if(!b.success)return null;switch(a.type){case"new_session":return"new_session"===b.command&&!1===b.data.cancelled?{reason:"new_session",source:"rpc_command",domains:["resumable_sessions","recovery"]}:null;case"switch_session":return"switch_session"===b.command&&!1===b.data.cancelled?{reason:"switch_session",source:"rpc_command",domains:["resumable_sessions","recovery"]}:null;case"fork":return"fork"===b.command&&!1===b.data.cancelled?{reason:"fork",source:"rpc_command",domains:["resumable_sessions","recovery"]}:null;case"set_session_name":return"set_session_name"===b.command?{reason:"set_session_name",source:"rpc_command",domains:["resumable_sessions"]}:null;default:return null}}(a,b);return c&&this.publishLiveStateInvalidation(c),this.queueStateRefresh(),this.broadcastStatus(),b}async refreshAuth(){if(this.authRefreshPromise)return await this.authRefreshPromise;this.authRefreshPromise=this.refreshAuthInternal().finally(()=>{this.authRefreshPromise=null}),await this.authRefreshPromise}async refreshAuthInternal(){this.startPromise&&await this.startPromise,this.process&&"ready"===this.snapshot.phase&&this.resetProcessForAuthRefresh(),await this.ensureStarted()}resetProcessForAuthRefresh(){let a=this.process;for(let a of(this.process=null,this.detachStdoutReader?.(),this.detachStdoutReader=null,this.stderrBuffer="",this.pendingRequests.values()))clearTimeout(a.timeout),a.reject(Error("RPC bridge restarting to reload auth"));if(this.pendingRequests.clear(),a){a.removeAllListeners("exit"),a.removeAllListeners("error"),a.kill("SIGTERM");try{a?.stdin?.destroy()}catch{}try{a?.stdout?.destroy()}catch{}try{a?.stderr?.destroy()}catch{}}this.snapshot.phase="idle",this.snapshot.updatedAt=B(),this.snapshot.lastError=null,this.broadcastStatus()}subscribe(a){return this.subscribers.add(a),this.snapshot.connectionCount=this.subscribers.size,this.snapshot.updatedAt=B(),this.broadcastStatus(),()=>{this.subscribers.delete(a),this.snapshot.connectionCount=this.subscribers.size,this.snapshot.updatedAt=B(),this.subscribers.size>0&&this.broadcastStatus()}}subscribeTerminal(a){return this.terminalSubscribers.add(a),()=>{this.terminalSubscribers.delete(a)}}async sendTerminalInput(a){await this.sendTerminalCommand({type:"terminal_input",data:a})}async resizeTerminal(a,b){await this.sendTerminalCommand({type:"terminal_resize",cols:a,rows:b})}async redrawTerminal(){await this.sendTerminalCommand({type:"terminal_redraw"})}async sendTerminalCommand(a){await this.ensureStarted();let b=N(await this.requestResponse(a));if(!b.success)throw this.recordError(b.error,this.snapshot.phase,{commandType:a.type}),this.broadcastStatus(),Error(b.error)}async dispose(){for(let a of(this.detachStdoutReader?.(),this.detachStdoutReader=null,this.terminalSubscribers.clear(),this.pendingRequests.values()))clearTimeout(a.timeout),a.reject(Error("RPC bridge disposed"));this.pendingRequests.clear(),this.process&&(this.process.removeAllListeners(),this.process.kill("SIGTERM"),this.process=null),this.snapshot.phase="idle",this.snapshot.connectionCount=0,this.snapshot.updatedAt=B()}async startInternal(){var a,b,c,d;let h,i,j,k,l,m,n;this.snapshot.phase="starting",this.snapshot.startedAt=B(),this.snapshot.updatedAt=this.snapshot.startedAt,this.snapshot.lastError=null,this.broadcastStatus();try{a=this.config,b=this.deps,h=(0,q.N)({packageRoot:a.packageRoot,cwd:a.projectCwd,execPath:b.execPath??process.execPath,hostKind:(b.env??process.env).GSD_WEB_HOST_KIND,mode:"rpc",sessionDir:a.projectSessionsDir,existsSync:b.existsSync??f.existsSync})}catch(a){throw this.snapshot.phase="failed",this.recordError(a,"starting"),a}let o=this.deps.spawn??((a,b,c)=>(0,e.spawn)(a,b,c)),p={...this.deps.env??process.env};delete p.GSD_CODING_AGENT_DIR,p.GSD_WEB_BRIDGE_TUI="1";let r=o(h.command,h.args,{cwd:h.cwd,env:p,stdio:["pipe","pipe","pipe"],windowsHide:!0});this.process=r,this.stderrBuffer="",r.stderr.on("data",a=>{var b,c;let d;this.stderrBuffer=(b=this.stderrBuffer,c=a.toString(),(d=`${b}${c}`).length<=8e3?d:d.slice(d.length-8e3))}),this.detachStdoutReader=(c=r.stdout,d=a=>this.handleStdoutLine(a),j=new g.StringDecoder("utf8"),k="",l=a=>{d(a.endsWith("\r")?a.slice(0,-1):a)},m=a=>{for(k+="string"==typeof a?a:j.write(a);;){let a=k.indexOf("\n");if(-1===a)return;l(k.slice(0,a)),k=k.slice(a+1)}},n=()=>{(k+=j.end()).length>0&&(l(k),k="")},c.on("data",m),c.on("end",n),()=>{c.off("data",m),c.off("end",n)}),r.once("exit",(a,b)=>this.handleProcessExit(a,b)),r.once("error",a=>this.handleProcessExit(null,null,a));let s=new Promise((a,b)=>{i=setTimeout(()=>b(Error("RPC bridge startup timed out after 150000ms")),15e4)});try{await Promise.race([this.refreshState(!0),s]),this.snapshot.phase="ready",this.snapshot.updatedAt=B(),this.snapshot.lastError=null,this.broadcastStatus()}catch(a){throw this.snapshot.phase="failed",this.recordError(a,"starting"),this.broadcastStatus(),a}finally{i&&clearTimeout(i)}}async queueStateRefresh(){if(this.refreshPromise)return await this.refreshPromise;this.refreshPromise=this.refreshState(!1).catch(a=>{this.recordError(a,this.snapshot.phase,{commandType:"get_state"})}).finally(()=>{this.refreshPromise=null}),await this.refreshPromise}async refreshState(a){let b=N(await this.requestResponse({type:"get_state"},a?15e4:void 0));if(!b.success)throw Error(b.error);"get_state"===b.command&&this.applySessionState(b.data),this.snapshot.updatedAt=B(),a||this.broadcastStatus()}applySessionState(a){this.snapshot.sessionState=a,this.snapshot.activeSessionId=a.sessionId,this.snapshot.activeSessionFile=a.sessionFile??null}requestResponse(a,b){if(!this.process?.stdin)return Promise.reject(Error("RPC bridge is not connected"));let c=a.id??`web_${++this.requestCounter}`,d={...a,id:c},e=b??3e4;return new Promise((a,b)=>{let f=setTimeout(()=>{this.pendingRequests.delete(c),b(Error(`Timed out waiting for RPC response to ${d.type}`))},e);this.pendingRequests.set(c,{resolve:b=>{clearTimeout(f),a(b)},reject:a=>{clearTimeout(f),b(a)},timeout:f}),this.process.stdin.write(C(d))})}handleStdoutLine(a){var b,c;let d;try{d=JSON.parse(a)}catch{return}if("object"==typeof(b=d)&&null!==b&&"type"in b&&"terminal_output"===b.type&&"string"==typeof b.data)return void this.emitTerminal(d.data);if("object"==typeof d&&null!==d&&"type"in d&&"response"===d.type){let a=N(d);if(a.id&&this.pendingRequests.has(a.id)){let b=this.pendingRequests.get(a.id);this.pendingRequests.delete(a.id),b.resolve(a);return}}let e="object"==typeof(c=d)&&null!==c&&"type"in c&&"extension_error"===c.type?{...c,error:D(c.error)}:c;if(this.emit(e),"object"==typeof e&&null!==e&&"type"in e&&"session_state_changed"===e.type&&"string"==typeof e.reason){let a=function(a){switch(a){case"new_session":return{reason:"new_session",source:"bridge_event",domains:["resumable_sessions","recovery"]};case"switch_session":return{reason:"switch_session",source:"bridge_event",domains:["resumable_sessions","recovery"]};case"fork":return{reason:"fork",source:"bridge_event",domains:["resumable_sessions","recovery"]};case"set_session_name":return{reason:"set_session_name",source:"bridge_event",domains:["resumable_sessions"]};default:return null}}(e.reason);a&&this.publishLiveStateInvalidation(a),this.queueStateRefresh();return}let f=function(a){if("object"!=typeof a||null===a||!("type"in a))return null;switch(a.type){case"agent_end":return{reason:"agent_end",source:"bridge_event",domains:["auto","workspace","recovery"],workspaceIndexCacheInvalidated:!0};case"turn_end":return{reason:"turn_end",source:"bridge_event",domains:["workspace"],workspaceIndexCacheInvalidated:!0};case"auto_retry_start":return{reason:"auto_retry_start",source:"bridge_event",domains:["auto","recovery"]};case"auto_retry_end":return{reason:"auto_retry_end",source:"bridge_event",domains:["auto","recovery"]};case"auto_compaction_start":return{reason:"auto_compaction_start",source:"bridge_event",domains:["auto","recovery"]};case"auto_compaction_end":return{reason:"auto_compaction_end",source:"bridge_event",domains:["auto","recovery"]};default:return null}}(e);if(f&&this.publishLiveStateInvalidation(f),"object"==typeof e&&null!==e&&"type"in e){let a=e.type;("agent_end"===a||"turn_end"===a||"auto_retry_start"===a||"auto_retry_end"===a||"auto_compaction_start"===a||"auto_compaction_end"===a)&&this.queueStateRefresh()}}handleProcessExit(a,b,c){var d;let e,f;this.detachStdoutReader?.(),this.detachStdoutReader=null,this.process=null;let g=Error((d=this.stderrBuffer,e=`RPC bridge exited${null!==a?` with code ${a}`:""}${b?` (${b})`:""}`,(f=D(d).trim())?`${e}. stderr=${f}`:e));for(let a of this.pendingRequests.values())clearTimeout(a.timeout),a.reject(g);this.pendingRequests.clear(),this.snapshot.phase="failed",this.snapshot.updatedAt=B(),this.recordError(c??g,this.snapshot.activeSessionId?"ready":"starting"),this.broadcastStatus()}recordError(a,b,c={}){this.snapshot.lastError={message:E(a),at:B(),phase:b,afterSessionAttachment:!!this.snapshot.activeSessionId,commandType:c.commandType},this.snapshot.updatedAt=this.snapshot.lastError.at}emit(a){for(let b of this.subscribers)try{b(a)}catch{}}emitTerminal(a){for(let b of this.terminalSubscribers)try{b(a)}catch{}}broadcastStatus(){0!==this.subscribers.size&&this.emit({type:"bridge_status",bridge:this.getSnapshot()})}}function P(a){let b=(0,h.resolve)(a),c=x.get(b);if(c)return c;let d=new O(L(void 0,b),F());return x.set(b,d),d}function Q(a){try{let b=new URL(a.url).searchParams.get("project");if(b)return decodeURIComponent(b)}catch{}return(F().env??process.env).GSD_WEB_PROJECT_CWD||null}function R(a){let b=Q(a);if(!b)throw new S;return b}class S extends Error{constructor(){super("No project selected"),this.name="NoProjectError"}}function T(){return P(L().projectCwd)}function U(a,b){return{id:a.id,path:a.path,cwd:a.cwd,name:a.name,createdAt:a.created.toISOString(),modifiedAt:a.modified.toISOString(),messageCount:a.messageCount,isActive:!!(b&&a.path===b)}}function V(a,b,c={}){return{success:!1,action:"rename",scope:k.PO,code:a,error:b,...c}}async function W(a={},b){let c=L(F().env??process.env,b),d=b?P(b):T();try{await d.ensureStarted()}catch{}let e=d.getSnapshot(),f=await z(c),g=(0,k.on)(a),i=("threaded"===g.sortMode&&!g.query?function(a){let b=[],c=(a,d,e,f)=>{b.push({session:a.session,depth:d,isLastInThread:f,ancestorHasNextSibling:e});for(let b=0;b<a.children.length;b++){let g=a.children[b];if(!g)continue;let h=b===a.children.length-1,i=d>0&&!f;c(g,d+1,[...e,i],h)}};for(let b=0;b<a.length;b++){let d=a[b];d&&c(d,0,[],b===a.length-1)}return b}(function(a){let b=new Map;for(let c of a)b.set(c.path,{session:c,children:[]});let c=[];for(let d of a){let a=b.get(d.path);if(!a)continue;let e=d.parentSessionPath;if(e&&b.has(e)){b.get(e).children.push(a);continue}c.push(a)}let d=a=>{for(let b of(a.sort((a,b)=>b.session.modified.getTime()-a.session.modified.getTime()),a))d(b.children)};return d(c),c}("named"===g.nameFilter?f.filter(a=>t(a)):f)):(function(a,b,c,d){let e="all"===d?a:a.filter(a=>t(a));if(!b.trim())return e;let f=function(a){let b=a.trim();if(!b)return{mode:"tokens",tokens:[],regex:null};if(b.startsWith("re:")){let a=b.slice(3).trim();if(!a)return{mode:"regex",tokens:[],regex:null,error:"Empty regex"};try{return{mode:"regex",tokens:[],regex:RegExp(a,"i")}}catch(a){return{mode:"regex",tokens:[],regex:null,error:a instanceof Error?a.message:String(a)}}}let c=[],d="",e=!1,f=!1,g=a=>{let b=d.trim();d="",b&&c.push({kind:a,value:b})};for(let a=0;a<b.length;a++){let c=b[a];if(c){if('"'===c){e?(g("phrase"),e=!1):(g("fuzzy"),e=!0);continue}if(!e&&/\s/.test(c)){g("fuzzy");continue}d+=c}}return(e&&(f=!0),f)?{mode:"tokens",tokens:b.split(/\s+/).map(a=>a.trim()).filter(a=>a.length>0).map(a=>({kind:"fuzzy",value:a})),regex:null}:(g(e?"phrase":"fuzzy"),{mode:"tokens",tokens:c,regex:null})}(b);if(f.error)return[];if("recent"===c){let a=[];for(let b of e)u(b,f).matches&&a.push(b);return a}let g=[];for(let a of e){let b=u(a,f);b.matches&&g.push({session:a,score:b.score})}return g.sort((a,b)=>a.score!==b.score?a.score-b.score:b.session.modified.getTime()-a.session.modified.getTime()),g.map(a=>a.session)})(f,g.query,g.sortMode,g.nameFilter).map(a=>({session:a,depth:0,isLastInThread:!0,ancestorHasNextSibling:[]}))).map(a=>(function(a,b){let{session:c}=a,d=!!(b&&(0,h.resolve)(c.path)===(0,h.resolve)(b));return{id:c.id,path:c.path,cwd:c.cwd,name:c.name,createdAt:c.created.toISOString(),modifiedAt:c.modified.toISOString(),messageCount:c.messageCount,parentSessionPath:c.parentSessionPath,firstMessage:c.firstMessage,isActive:d,depth:a.depth,isLastInThread:a.isLastInThread,ancestorHasNextSibling:[...a.ancestorHasNextSibling]}})(a,e.activeSessionFile));return{project:{scope:k.PO,cwd:c.projectCwd,sessionsDir:c.projectSessionsDir,activeSessionPath:e.activeSessionFile},query:g,totalSessions:f.length,returnedSessions:i.length,sessions:i}}async function X(a,b){var c,d;let e,f=L(F().env??process.env,b),g=a.name.trim();if(!g)return V("invalid_request","Session name cannot be empty",{sessionPath:a.sessionPath,name:a.name});let i=(c=await z(f),d=a.sessionPath,e=(0,h.resolve)(d),c.find(a=>(0,h.resolve)(a.path)===e));if(!i)return V("not_found","Session is not available in the current project browser",{sessionPath:a.sessionPath,name:g});let j=b?P(b):T();try{await j.ensureStarted()}catch(a){return V("rename_failed",E(a),{sessionPath:i.path,name:g})}let l=j.getSnapshot().activeSessionFile;if(l&&(0,h.resolve)(l)===(0,h.resolve)(i.path)){let a=await ac({type:"set_session_name",name:g},b);return null===a?V("rename_failed","Active session rename did not return a response",{sessionPath:i.path,name:g,isActiveSession:!0,mutation:"rpc"}):a.success?{success:!0,action:"rename",scope:k.PO,sessionPath:i.path,name:g,isActiveSession:!0,mutation:"rpc"}:V("onboarding_locked"===a.code?"onboarding_locked":"rename_failed",a.error,{sessionPath:i.path,name:g,isActiveSession:!0,mutation:"rpc"})}try{return await A(f,i.path,g),j.publishLiveStateInvalidation({reason:"set_session_name",source:"session_manage",domains:["resumable_sessions"]}),{success:!0,action:"rename",scope:k.PO,sessionPath:i.path,name:g,isActiveSession:!1,mutation:"session_file"}}catch(a){return V("rename_failed",E(a),{sessionPath:i.path,name:g,isActiveSession:!1,mutation:"session_file"})}}async function Y(a,b){if(a.getOnboardingState)return await a.getOnboardingState();if(a.getOnboardingNeeded){var c;return{status:(c=await a.getOnboardingNeeded(l.sI,b))?"blocked":"ready",locked:c,lockReason:c?"required_setup":null,required:{blocking:!0,skippable:!1,satisfied:!c,satisfiedBy:c?null:{providerId:"legacy",source:"runtime"},providers:[]},optional:{blocking:!1,skippable:!0,sections:[]},lastValidation:null,activeFlow:null,bridgeAuthRefresh:{phase:"idle",strategy:null,startedAt:null,completedAt:null,error:null}}}return await (0,m.r$)()}async function Z(a){let b=F(),c=b.env??process.env;return await Y(b,c)}async function $(a=["auto","workspace","resumable_sessions"],b){let c=F(),d=L(c.env??process.env,b),e=b?P(b):T();try{await e.ensureStarted()}catch{}let f=e.getSnapshot(),g=[...new Set(a)],h={bridge:f};if(g.includes("workspace")&&(h.workspace=await H(d.projectCwd,async()=>await (c.indexWorkspace??K)(d.projectCwd))),g.includes("auto")){let a=c.getAutoDashboardData??(()=>o());h.auto=await Promise.resolve(a())}return g.includes("resumable_sessions")&&(h.resumableSessions=(await (c.listSessions??(async a=>J(a)))(d.projectSessionsDir)).map(a=>U(a,f.activeSessionFile))),h}async function _(a){let b=F(),c=b.env??process.env,d=L(c,a),e=b.getAutoDashboardData??(()=>o()),f=b.listSessions??(async a=>J(a)),g=v(d.projectCwd),h=await Y(b,c);if(h.locked&&"packaged-standalone"===c.GSD_WEB_HOST_KIND)return{project:{cwd:d.projectCwd,sessionsDir:d.projectSessionsDir,packageRoot:d.packageRoot},workspace:{milestones:[],active:{phase:"pre-planning"},scopes:[{scope:"project",label:"project",kind:"project"}],validationIssues:[]},auto:o(),onboarding:h,onboardingNeeded:!0,resumableSessions:[],bridge:{phase:"idle",projectCwd:d.projectCwd,projectSessionsDir:d.projectSessionsDir,packageRoot:d.packageRoot,startedAt:null,updatedAt:new Date().toISOString(),connectionCount:0,lastCommandType:null,activeSessionId:null,activeSessionFile:null,sessionState:null,lastError:null},projectDetection:g};let i=a?P(a):T(),j=H(d.projectCwd,async()=>await (b.indexWorkspace??K)(d.projectCwd)),k=Promise.resolve(e()),l=f(d.projectSessionsDir);try{await i.ensureStarted()}catch{}let m=i.getSnapshot(),[n,p,q]=await Promise.all([j,k,l]);return{project:{cwd:d.projectCwd,sessionsDir:d.projectSessionsDir,packageRoot:d.packageRoot},workspace:n,auto:p,onboarding:h,onboardingNeeded:h.locked,resumableSessions:q.map(a=>U(a,m.activeSessionFile)),bridge:m,projectDetection:g}}function aa(a,b){return{type:"response",command:a,success:!1,error:E(b)}}async function ab(a){let b=a?P(a):T();await b.refreshAuth()}async function ac(a,b){if(!(!M(a)&&r.has(a.type))){let b=await (0,m.r$)();if(b.locked){let c;return c=b.lockReason??"required_setup",{type:"response",command:a.type,success:!1,error:"bridge_refresh_failed"===c?"Workspace is locked because bridge auth refresh failed after setup":"bridge_refresh_pending"===c?"Workspace is still locked while bridge auth refresh completes":"Workspace is locked until required onboarding completes",code:"onboarding_locked",details:{reason:c,onboarding:{locked:b.locked,lockReason:b.lockReason,required:b.required,lastValidation:b.lastValidation,bridgeAuthRefresh:b.bridgeAuthRefresh}}}}}let c=b?P(b):T();return await c.sendInput(a)}(0,m.Eu)(async()=>{await ab()})},78335:()=>{},92280:(a,b,c)=>{"use strict";Object.defineProperty(b,"I",{enumerable:!0,get:function(){return g}});let d=c(28208),e=c(47617),f=c(62018);async function g(a,b,c,g){if((0,d.isNodeNextResponse)(b)){var h;b.statusCode=c.status,b.statusMessage=c.statusText;let d=["set-cookie","www-authenticate","proxy-authenticate","vary"];null==(h=c.headers)||h.forEach((a,c)=>{if("x-middleware-set-cookie"!==c.toLowerCase())if("set-cookie"===c.toLowerCase())for(let d of(0,f.splitCookiesString)(a))b.appendHeader(c,d);else{let e=void 0!==b.getHeader(c);(d.includes(c.toLowerCase())||!e)&&b.appendHeader(c,a)}});let{originalResponse:i}=b;c.body&&"HEAD"!==a.method?await (0,e.pipeToNodeResponse)(c.body,i,g):i.end()}}},96487:()=>{}};
@@ -1 +1 @@
1
- globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:[],rootMainFiles:["static/chunks/webpack-61d3afac6d0f0ce7.js","static/chunks/4bd1b696-e5d7c65570c947b7.js","static/chunks/3794-337d1ca25ad99a89.js","static/chunks/main-app-fdab67f7802d7832.js"],rootMainFilesTree:{},pages:{"/_app":[]}},globalThis.__BUILD_MANIFEST.lowPriorityFiles=["/static/"+process.env.__NEXT_BUILD_ID+"/_buildManifest.js","/static/"+process.env.__NEXT_BUILD_ID+"/_ssgManifest.js"];
1
+ globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:[],rootMainFiles:["static/chunks/webpack-a1c1e452c6b32d04.js","static/chunks/4bd1b696-e5d7c65570c947b7.js","static/chunks/3794-337d1ca25ad99a89.js","static/chunks/main-app-fdab67f7802d7832.js"],rootMainFilesTree:{},pages:{"/_app":[]}},globalThis.__BUILD_MANIFEST.lowPriorityFiles=["/static/"+process.env.__NEXT_BUILD_ID+"/_buildManifest.js","/static/"+process.env.__NEXT_BUILD_ID+"/_ssgManifest.js"];