gsd-pi 2.67.0-dev.4fb8afe → 2.67.0-dev.5399650

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 (133) hide show
  1. package/dist/resources/extensions/gsd/auto/session.js +6 -0
  2. package/dist/resources/extensions/gsd/auto.js +27 -0
  3. package/dist/resources/extensions/gsd/commands/handlers/core.js +38 -24
  4. package/dist/resources/extensions/gsd/commands/index.js +8 -1
  5. package/dist/resources/extensions/gsd/init-wizard.js +34 -0
  6. package/dist/resources/extensions/gsd/workflow-logger.js +18 -3
  7. package/dist/resources/extensions/gsd/workflow-mcp.js +38 -7
  8. package/dist/web/standalone/.next/BUILD_ID +1 -1
  9. package/dist/web/standalone/.next/app-path-routes-manifest.json +16 -16
  10. package/dist/web/standalone/.next/build-manifest.json +2 -2
  11. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  12. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  13. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  14. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  15. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  16. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  17. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  18. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  19. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  20. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  21. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  22. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  23. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  24. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  25. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  26. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  27. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  28. package/dist/web/standalone/.next/server/app/index.html +1 -1
  29. package/dist/web/standalone/.next/server/app/index.rsc +1 -1
  30. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  31. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  32. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  33. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  34. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  35. package/dist/web/standalone/.next/server/app-paths-manifest.json +16 -16
  36. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  37. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  38. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  39. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  40. package/package.json +4 -2
  41. package/packages/mcp-server/dist/cli.d.ts +9 -0
  42. package/packages/mcp-server/dist/cli.d.ts.map +1 -0
  43. package/packages/mcp-server/dist/cli.js +58 -0
  44. package/packages/mcp-server/dist/cli.js.map +1 -0
  45. package/packages/mcp-server/dist/index.d.ts +20 -0
  46. package/packages/mcp-server/dist/index.d.ts.map +1 -0
  47. package/packages/mcp-server/dist/index.js +14 -0
  48. package/packages/mcp-server/dist/index.js.map +1 -0
  49. package/packages/mcp-server/dist/readers/captures.d.ts +25 -0
  50. package/packages/mcp-server/dist/readers/captures.d.ts.map +1 -0
  51. package/packages/mcp-server/dist/readers/captures.js +67 -0
  52. package/packages/mcp-server/dist/readers/captures.js.map +1 -0
  53. package/packages/mcp-server/dist/readers/doctor-lite.d.ts +20 -0
  54. package/packages/mcp-server/dist/readers/doctor-lite.d.ts.map +1 -0
  55. package/packages/mcp-server/dist/readers/doctor-lite.js +173 -0
  56. package/packages/mcp-server/dist/readers/doctor-lite.js.map +1 -0
  57. package/packages/mcp-server/dist/readers/index.d.ts +14 -0
  58. package/packages/mcp-server/dist/readers/index.d.ts.map +1 -0
  59. package/packages/mcp-server/dist/readers/index.js +10 -0
  60. package/packages/mcp-server/dist/readers/index.js.map +1 -0
  61. package/packages/mcp-server/dist/readers/knowledge.d.ts +18 -0
  62. package/packages/mcp-server/dist/readers/knowledge.d.ts.map +1 -0
  63. package/packages/mcp-server/dist/readers/knowledge.js +82 -0
  64. package/packages/mcp-server/dist/readers/knowledge.js.map +1 -0
  65. package/packages/mcp-server/dist/readers/metrics.d.ts +32 -0
  66. package/packages/mcp-server/dist/readers/metrics.d.ts.map +1 -0
  67. package/packages/mcp-server/dist/readers/metrics.js +74 -0
  68. package/packages/mcp-server/dist/readers/metrics.js.map +1 -0
  69. package/packages/mcp-server/dist/readers/paths.d.ts +42 -0
  70. package/packages/mcp-server/dist/readers/paths.d.ts.map +1 -0
  71. package/packages/mcp-server/dist/readers/paths.js +199 -0
  72. package/packages/mcp-server/dist/readers/paths.js.map +1 -0
  73. package/packages/mcp-server/dist/readers/roadmap.d.ts +26 -0
  74. package/packages/mcp-server/dist/readers/roadmap.d.ts.map +1 -0
  75. package/packages/mcp-server/dist/readers/roadmap.js +194 -0
  76. package/packages/mcp-server/dist/readers/roadmap.js.map +1 -0
  77. package/packages/mcp-server/dist/readers/state.d.ts +43 -0
  78. package/packages/mcp-server/dist/readers/state.d.ts.map +1 -0
  79. package/packages/mcp-server/dist/readers/state.js +184 -0
  80. package/packages/mcp-server/dist/readers/state.js.map +1 -0
  81. package/packages/mcp-server/dist/server.d.ts +28 -0
  82. package/packages/mcp-server/dist/server.d.ts.map +1 -0
  83. package/packages/mcp-server/dist/server.js +319 -0
  84. package/packages/mcp-server/dist/server.js.map +1 -0
  85. package/packages/mcp-server/dist/session-manager.d.ts +54 -0
  86. package/packages/mcp-server/dist/session-manager.d.ts.map +1 -0
  87. package/packages/mcp-server/dist/session-manager.js +284 -0
  88. package/packages/mcp-server/dist/session-manager.js.map +1 -0
  89. package/packages/mcp-server/dist/types.d.ts +61 -0
  90. package/packages/mcp-server/dist/types.d.ts.map +1 -0
  91. package/packages/mcp-server/dist/types.js +11 -0
  92. package/packages/mcp-server/dist/types.js.map +1 -0
  93. package/packages/mcp-server/dist/workflow-tools.d.ts +9 -0
  94. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -0
  95. package/packages/mcp-server/dist/workflow-tools.js +526 -0
  96. package/packages/mcp-server/dist/workflow-tools.js.map +1 -0
  97. package/packages/mcp-server/tsconfig.json +1 -1
  98. package/packages/rpc-client/dist/index.d.ts +10 -0
  99. package/packages/rpc-client/dist/index.d.ts.map +1 -0
  100. package/packages/rpc-client/dist/index.js +9 -0
  101. package/packages/rpc-client/dist/index.js.map +1 -0
  102. package/packages/rpc-client/dist/jsonl.d.ts +17 -0
  103. package/packages/rpc-client/dist/jsonl.d.ts.map +1 -0
  104. package/packages/rpc-client/dist/jsonl.js +54 -0
  105. package/packages/rpc-client/dist/jsonl.js.map +1 -0
  106. package/packages/rpc-client/dist/rpc-client.d.ts +259 -0
  107. package/packages/rpc-client/dist/rpc-client.d.ts.map +1 -0
  108. package/packages/rpc-client/dist/rpc-client.js +541 -0
  109. package/packages/rpc-client/dist/rpc-client.js.map +1 -0
  110. package/packages/rpc-client/dist/rpc-client.test.d.ts +2 -0
  111. package/packages/rpc-client/dist/rpc-client.test.d.ts.map +1 -0
  112. package/packages/rpc-client/dist/rpc-client.test.js +477 -0
  113. package/packages/rpc-client/dist/rpc-client.test.js.map +1 -0
  114. package/packages/rpc-client/dist/rpc-types.d.ts +566 -0
  115. package/packages/rpc-client/dist/rpc-types.d.ts.map +1 -0
  116. package/packages/rpc-client/dist/rpc-types.js +12 -0
  117. package/packages/rpc-client/dist/rpc-types.js.map +1 -0
  118. package/scripts/ensure-workspace-builds.cjs +2 -0
  119. package/scripts/link-workspace-packages.cjs +21 -14
  120. package/src/resources/extensions/gsd/auto/session.ts +6 -0
  121. package/src/resources/extensions/gsd/auto.ts +29 -1
  122. package/src/resources/extensions/gsd/commands/handlers/core.ts +52 -25
  123. package/src/resources/extensions/gsd/commands/index.ts +7 -1
  124. package/src/resources/extensions/gsd/init-wizard.ts +34 -0
  125. package/src/resources/extensions/gsd/tests/auto-project-root-env.test.ts +29 -0
  126. package/src/resources/extensions/gsd/tests/core-overlay-fallback.test.ts +101 -0
  127. package/src/resources/extensions/gsd/tests/init-bootstrap-completeness.test.ts +121 -0
  128. package/src/resources/extensions/gsd/tests/workflow-logger.test.ts +16 -0
  129. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +39 -1
  130. package/src/resources/extensions/gsd/workflow-logger.ts +19 -3
  131. package/src/resources/extensions/gsd/workflow-mcp.ts +41 -7
  132. /package/dist/web/standalone/.next/static/{IBTC_HlEpTBAa4HXMoV_A → 6_QPFhgX0DQnDhhquheRc}/_buildManifest.js +0 -0
  133. /package/dist/web/standalone/.next/static/{IBTC_HlEpTBAa4HXMoV_A → 6_QPFhgX0DQnDhhquheRc}/_ssgManifest.js +0 -0
@@ -33,6 +33,9 @@ export class AutoSession {
33
33
  // ── Paths ────────────────────────────────────────────────────────────────
34
34
  basePath = "";
35
35
  originalBasePath = "";
36
+ previousProjectRootEnv = null;
37
+ hadProjectRootEnv = false;
38
+ projectRootEnvCaptured = false;
36
39
  gitService = null;
37
40
  // ── Dispatch counters ────────────────────────────────────────────────────
38
41
  unitDispatchCount = new Map();
@@ -132,6 +135,9 @@ export class AutoSession {
132
135
  // Paths
133
136
  this.basePath = "";
134
137
  this.originalBasePath = "";
138
+ this.previousProjectRootEnv = null;
139
+ this.hadProjectRootEnv = false;
140
+ this.projectRootEnvCaptured = false;
135
141
  this.gitService = null;
136
142
  // Dispatch
137
143
  this.unitDispatchCount.clear();
@@ -79,6 +79,27 @@ export { MAX_UNIT_DISPATCHES, STUB_RECOVERY_THRESHOLD, MAX_LIFETIME_DISPATCHES,
79
79
  const s = new AutoSession();
80
80
  /** Throttle STATE.md rebuilds — at most once per 30 seconds */
81
81
  const STATE_REBUILD_MIN_INTERVAL_MS = 30_000;
82
+ function captureProjectRootEnv(projectRoot) {
83
+ if (!s.projectRootEnvCaptured) {
84
+ s.hadProjectRootEnv = Object.prototype.hasOwnProperty.call(process.env, "GSD_PROJECT_ROOT");
85
+ s.previousProjectRootEnv = process.env.GSD_PROJECT_ROOT ?? null;
86
+ s.projectRootEnvCaptured = true;
87
+ }
88
+ process.env.GSD_PROJECT_ROOT = projectRoot;
89
+ }
90
+ function restoreProjectRootEnv() {
91
+ if (!s.projectRootEnvCaptured)
92
+ return;
93
+ if (s.hadProjectRootEnv && s.previousProjectRootEnv !== null) {
94
+ process.env.GSD_PROJECT_ROOT = s.previousProjectRootEnv;
95
+ }
96
+ else {
97
+ delete process.env.GSD_PROJECT_ROOT;
98
+ }
99
+ s.previousProjectRootEnv = null;
100
+ s.hadProjectRootEnv = false;
101
+ s.projectRootEnvCaptured = false;
102
+ }
82
103
  export function shouldUseWorktreeIsolation() {
83
104
  const prefs = loadEffectiveGSDPreferences()?.preferences?.git;
84
105
  if (prefs?.isolation === "worktree")
@@ -315,6 +336,7 @@ function handleLostSessionLock(ctx, lockStatus) {
315
336
  s.active = false;
316
337
  s.paused = false;
317
338
  clearUnitTimeout();
339
+ restoreProjectRootEnv();
318
340
  deregisterSigtermHandler();
319
341
  clearCmuxSidebar(loadEffectiveGSDPreferences()?.preferences);
320
342
  const base = lockBase();
@@ -345,6 +367,7 @@ function cleanupAfterLoopExit(ctx) {
345
367
  s.currentUnit = null;
346
368
  s.active = false;
347
369
  clearUnitTimeout();
370
+ restoreProjectRootEnv();
348
371
  // Clear crash lock and release session lock so the next `/gsd next` does
349
372
  // not see a stale lock with the current PID and treat it as a "remote"
350
373
  // session (which would cause it to SIGTERM itself). (#2730)
@@ -601,6 +624,7 @@ export async function stopAuto(ctx, pi, reason) {
601
624
  ctx?.ui.setStatus("gsd-auto", undefined);
602
625
  ctx?.ui.setWidget("gsd-progress", undefined);
603
626
  ctx?.ui.setFooter(undefined);
627
+ restoreProjectRootEnv();
604
628
  // Reset all session state in one call
605
629
  s.reset();
606
630
  }
@@ -674,6 +698,7 @@ export async function pauseAuto(ctx, _pi, _errorContext) {
674
698
  _resetPendingResolve();
675
699
  s.active = false;
676
700
  s.paused = true;
701
+ restoreProjectRootEnv();
677
702
  s.pendingVerificationRetry = null;
678
703
  s.verificationRetryCount.clear();
679
704
  ctx?.ui.setStatus("gsd-auto", "paused");
@@ -981,6 +1006,7 @@ export async function startAuto(ctx, pi, base, verboseMode, options) {
981
1006
  updateSessionLock(lockBase(), "resuming", s.currentMilestoneId ?? "unknown");
982
1007
  writeLock(lockBase(), "resuming", s.currentMilestoneId ?? "unknown");
983
1008
  logCmuxEvent(loadEffectiveGSDPreferences()?.preferences, s.stepMode ? "Step-mode resumed." : "Auto-mode resumed.", "progress");
1009
+ captureProjectRootEnv(s.originalBasePath || s.basePath);
984
1010
  await autoLoop(ctx, pi, s, buildLoopDeps());
985
1011
  cleanupAfterLoopExit(ctx);
986
1012
  return;
@@ -995,6 +1021,7 @@ export async function startAuto(ctx, pi, base, verboseMode, options) {
995
1021
  const ready = await bootstrapAutoSession(s, ctx, pi, base, verboseMode, requestedStepMode, bootstrapDeps);
996
1022
  if (!ready)
997
1023
  return;
1024
+ captureProjectRootEnv(s.originalBasePath || s.basePath);
998
1025
  try {
999
1026
  syncCmuxSidebar(loadEffectiveGSDPreferences()?.preferences, await deriveState(s.basePath));
1000
1027
  }
@@ -168,6 +168,42 @@ function sortModelsForSelection(models, currentModel) {
168
168
  return a.id.localeCompare(b.id);
169
169
  });
170
170
  }
171
+ function buildProviderModelGroups(models, currentModel) {
172
+ const byProvider = new Map();
173
+ for (const model of sortModelsForSelection(models, currentModel)) {
174
+ let group = byProvider.get(model.provider);
175
+ if (!group) {
176
+ group = [];
177
+ byProvider.set(model.provider, group);
178
+ }
179
+ group.push(model);
180
+ }
181
+ return byProvider;
182
+ }
183
+ async function selectModelByProvider(title, models, ctx, currentModel) {
184
+ const byProvider = buildProviderModelGroups(models, currentModel);
185
+ const providerOptions = Array.from(byProvider.entries()).map(([provider, group]) => `${provider} (${group.length} model${group.length === 1 ? "" : "s"})`);
186
+ providerOptions.push("(cancel)");
187
+ const providerChoice = await ctx.ui.select(`${title} — choose provider:`, providerOptions);
188
+ if (!providerChoice || typeof providerChoice !== "string" || providerChoice === "(cancel)")
189
+ return undefined;
190
+ const providerName = providerChoice.replace(/ \(\d+ models?\)$/, "");
191
+ const providerModels = byProvider.get(providerName);
192
+ if (!providerModels || providerModels.length === 0)
193
+ return undefined;
194
+ const optionToModel = new Map();
195
+ const modelOptions = providerModels.map((model) => {
196
+ const isCurrent = currentModel && model.provider === currentModel.provider && model.id === currentModel.id;
197
+ const label = `${isCurrent ? "* " : ""}${model.id}`;
198
+ optionToModel.set(label, model);
199
+ return label;
200
+ });
201
+ modelOptions.push("(cancel)");
202
+ const modelChoice = await ctx.ui.select(`${title} — ${providerName}:`, modelOptions);
203
+ if (!modelChoice || typeof modelChoice !== "string" || modelChoice === "(cancel)")
204
+ return undefined;
205
+ return optionToModel.get(modelChoice);
206
+ }
171
207
  async function resolveRequestedModel(query, ctx) {
172
208
  const { resolveModelId } = await import("../../auto-model-selection.js");
173
209
  const models = ctx.modelRegistry.getAvailable();
@@ -181,18 +217,7 @@ async function resolveRequestedModel(query, ctx) {
181
217
  return partialMatches[0];
182
218
  if (partialMatches.length === 0 || !ctx.hasUI)
183
219
  return undefined;
184
- const sorted = sortModelsForSelection(partialMatches, ctx.model);
185
- const optionToModel = new Map();
186
- const options = sorted.map((model) => {
187
- const label = `${model.provider}/${model.id}`;
188
- optionToModel.set(label, model);
189
- return label;
190
- });
191
- options.push("(cancel)");
192
- const choice = await ctx.ui.select(`Multiple models match "${query}" — choose one:`, options);
193
- if (!choice || typeof choice !== "string" || choice === "(cancel)")
194
- return undefined;
195
- return optionToModel.get(choice);
220
+ return selectModelByProvider(`Multiple models match "${query}"`, partialMatches, ctx, ctx.model);
196
221
  }
197
222
  async function handleModel(trimmedArgs, ctx, pi) {
198
223
  const availableModels = ctx.modelRegistry.getAvailable();
@@ -212,18 +237,7 @@ async function handleModel(trimmedArgs, ctx, pi) {
212
237
  ctx.ui.notify(`Current model: ${current}\nUsage: /gsd model <provider/model|model-id>`, "info");
213
238
  return;
214
239
  }
215
- const optionToModel = new Map();
216
- const options = sortModelsForSelection(availableModels, ctx.model).map((model) => {
217
- const isCurrent = ctx.model && model.provider === ctx.model.provider && model.id === ctx.model.id;
218
- const label = `${isCurrent ? "* " : ""}${model.provider}/${model.id}`;
219
- optionToModel.set(label, model);
220
- return label;
221
- });
222
- options.push("(cancel)");
223
- const choice = await ctx.ui.select("Select session model:", options);
224
- if (!choice || typeof choice !== "string" || choice === "(cancel)")
225
- return;
226
- targetModel = optionToModel.get(choice);
240
+ targetModel = await selectModelByProvider("Select session model:", availableModels, ctx, ctx.model);
227
241
  }
228
242
  else {
229
243
  targetModel = await resolveRequestedModel(trimmed, ctx);
@@ -5,7 +5,14 @@ export function registerGSDCommand(pi) {
5
5
  getArgumentCompletions: getGsdArgumentCompletions,
6
6
  handler: async (args, ctx) => {
7
7
  const { handleGSDCommand } = await import("./dispatcher.js");
8
- await handleGSDCommand(args, ctx, pi);
8
+ const { setStderrLoggingEnabled } = await import("../workflow-logger.js");
9
+ const previousStderrSetting = setStderrLoggingEnabled(false);
10
+ try {
11
+ await handleGSDCommand(args, ctx, pi);
12
+ }
13
+ finally {
14
+ setStderrLoggingEnabled(previousStderrSetting);
15
+ }
9
16
  },
10
17
  });
11
18
  }
@@ -187,6 +187,20 @@ export async function showProjectInit(ctx, pi, basePath, detection) {
187
187
  }
188
188
  // ── Step 9: Bootstrap .gsd/ ────────────────────────────────────────────────
189
189
  bootstrapGsdDirectory(basePath, prefs, signals);
190
+ // Initialize SQLite database so GSD starts in full-capability mode (#3880).
191
+ // Without this, isDbAvailable() returns false and GSD enters degraded
192
+ // markdown-only mode until a tool handler happens to call ensureDbOpen().
193
+ let dbReady = false;
194
+ try {
195
+ const { ensureDbOpen } = await import("./bootstrap/dynamic-tools.js");
196
+ dbReady = await ensureDbOpen(basePath);
197
+ }
198
+ catch {
199
+ // Swallowed — warning surfaced below
200
+ }
201
+ if (!dbReady) {
202
+ ctx.ui.notify("Warning: database initialization failed — GSD will run in degraded mode until the next /gsd invocation.", "warning");
203
+ }
190
204
  // Ensure .gitignore
191
205
  ensureGitignore(basePath);
192
206
  untrackRuntimeFiles(basePath);
@@ -201,6 +215,25 @@ export async function showProjectInit(ctx, pi, basePath, detection) {
201
215
  catch {
202
216
  // Non-fatal — codebase map generation failure should never block project init
203
217
  }
218
+ // Write initial STATE.md so it exists before the first /gsd invocation.
219
+ // The explicit /gsd init path (ops.ts) returns without entering showSmartEntry(),
220
+ // which would otherwise generate STATE.md at guided-flow.ts:1358.
221
+ let stateReady = false;
222
+ try {
223
+ const { deriveState } = await import("./state.js");
224
+ const { buildStateMarkdown } = await import("./doctor.js");
225
+ const { saveFile } = await import("./files.js");
226
+ const { resolveGsdRootFile } = await import("./paths.js");
227
+ const state = await deriveState(basePath);
228
+ await saveFile(resolveGsdRootFile(basePath, "STATE"), buildStateMarkdown(state));
229
+ stateReady = true;
230
+ }
231
+ catch {
232
+ // Swallowed — warning surfaced below
233
+ }
234
+ if (!stateReady) {
235
+ ctx.ui.notify("Warning: initial STATE.md generation failed — it will be created on the next /gsd invocation.", "warning");
236
+ }
204
237
  ctx.ui.notify("GSD initialized. Starting your first milestone...", "info");
205
238
  return { completed: true, bootstrapped: true };
206
239
  }
@@ -348,6 +381,7 @@ function bootstrapGsdDirectory(basePath, prefs, signals) {
348
381
  assertSafeDirectory(basePath);
349
382
  const gsd = gsdRoot(basePath);
350
383
  mkdirSync(join(gsd, "milestones"), { recursive: true });
384
+ mkdirSync(join(gsd, "runtime"), { recursive: true });
351
385
  // Write PREFERENCES.md from wizard answers
352
386
  const preferencesContent = buildPreferencesFile(prefs);
353
387
  writeFileSync(join(gsd, "PREFERENCES.md"), preferencesContent, "utf-8");
@@ -22,6 +22,7 @@ import { appendNotification } from "./notification-store.js";
22
22
  const MAX_BUFFER = 100;
23
23
  let _buffer = [];
24
24
  let _auditBasePath = null;
25
+ let _stderrEnabled = true;
25
26
  /**
26
27
  * Set the base path for persistent audit log writes.
27
28
  * Should be called once at engine init with the project root.
@@ -30,6 +31,15 @@ let _auditBasePath = null;
30
31
  export function setLogBasePath(basePath) {
31
32
  _auditBasePath = basePath;
32
33
  }
34
+ /**
35
+ * Enable or disable immediate stderr writes for workflow logs.
36
+ * Returns the previous setting so callers can restore it.
37
+ */
38
+ export function setStderrLoggingEnabled(enabled) {
39
+ const previous = _stderrEnabled;
40
+ _stderrEnabled = enabled;
41
+ return previous;
42
+ }
33
43
  // ─── Public API ─────────────────────────────────────────────────────────
34
44
  /**
35
45
  * Record a warning. Also writes to stderr for terminal visibility.
@@ -179,13 +189,13 @@ function _push(severity, component, message, context) {
179
189
  // Always forward to stderr so terminal watchers see it (see module header for policy)
180
190
  const prefix = severity === "error" ? "ERROR" : "WARN";
181
191
  const ctxStr = context ? ` ${JSON.stringify(context)}` : "";
182
- process.stderr.write(`[gsd:${component}] ${prefix}: ${message}${ctxStr}\n`);
192
+ _writeStderr(`[gsd:${component}] ${prefix}: ${message}${ctxStr}\n`);
183
193
  // Persist to notification store (both warnings and errors)
184
194
  try {
185
195
  appendNotification(`[${component}] ${message}`, severity === "error" ? "error" : "warning", "workflow-logger");
186
196
  }
187
197
  catch (notifErr) {
188
- process.stderr.write(`[gsd:workflow-logger] notification-store append failed: ${notifErr.message}\n`);
198
+ _writeStderr(`[gsd:workflow-logger] notification-store append failed: ${notifErr.message}\n`);
189
199
  }
190
200
  // Buffer for auto-loop to drain
191
201
  _buffer.push(entry);
@@ -204,10 +214,15 @@ function _push(severity, component, message, context) {
204
214
  }
205
215
  catch (auditErr) {
206
216
  // Best-effort — never let audit write failures bubble up
207
- process.stderr.write(`[gsd:audit] failed to persist log entry: ${auditErr.message}\n`);
217
+ _writeStderr(`[gsd:audit] failed to persist log entry: ${auditErr.message}\n`);
208
218
  }
209
219
  }
210
220
  }
221
+ function _writeStderr(message) {
222
+ if (!_stderrEnabled)
223
+ return;
224
+ process.stderr.write(message);
225
+ }
211
226
  /**
212
227
  * Sanitize a log entry before persisting to the audit JSONL file.
213
228
  * Strips potentially sensitive context (raw paths, cwd, full error text)
@@ -1,6 +1,7 @@
1
1
  import { execSync } from "node:child_process";
2
2
  import { existsSync } from "node:fs";
3
3
  import { resolve } from "node:path";
4
+ import { fileURLToPath } from "node:url";
4
5
  const MCP_WORKFLOW_TOOL_SURFACE = new Set([
5
6
  "gsd_complete_milestone",
6
7
  "gsd_complete_task",
@@ -47,20 +48,36 @@ function lookupCommand(command, platform = process.platform) {
47
48
  return null;
48
49
  }
49
50
  }
51
+ function getBundledWorkflowMcpCliPath(env) {
52
+ if (!env.GSD_BIN_PATH?.trim() && !env.GSD_CLI_PATH?.trim())
53
+ return null;
54
+ const candidates = [
55
+ resolve(fileURLToPath(new URL("../../../../packages/mcp-server/dist/cli.js", import.meta.url))),
56
+ resolve(fileURLToPath(new URL("../../../../../packages/mcp-server/dist/cli.js", import.meta.url))),
57
+ ];
58
+ for (const bundledCli of candidates) {
59
+ if (existsSync(bundledCli))
60
+ return bundledCli;
61
+ }
62
+ return null;
63
+ }
50
64
  export function detectWorkflowMcpLaunchConfig(projectRoot = process.cwd(), env = process.env) {
51
65
  const name = env.GSD_WORKFLOW_MCP_NAME?.trim() || "gsd-workflow";
52
66
  const explicitCommand = env.GSD_WORKFLOW_MCP_COMMAND?.trim();
53
67
  const explicitArgs = parseJsonEnv(env, "GSD_WORKFLOW_MCP_ARGS");
54
68
  const explicitEnv = parseJsonEnv(env, "GSD_WORKFLOW_MCP_ENV");
55
69
  const explicitCwd = env.GSD_WORKFLOW_MCP_CWD?.trim();
70
+ const gsdCliPath = env.GSD_CLI_PATH?.trim() || env.GSD_BIN_PATH?.trim();
56
71
  const workflowProjectRoot = explicitEnv?.GSD_WORKFLOW_PROJECT_ROOT?.trim() ||
57
72
  env.GSD_WORKFLOW_PROJECT_ROOT?.trim() ||
73
+ env.GSD_PROJECT_ROOT?.trim() ||
58
74
  explicitCwd ||
59
75
  projectRoot;
76
+ const resolvedWorkflowProjectRoot = resolve(workflowProjectRoot);
60
77
  if (explicitCommand) {
61
78
  const launchEnv = {
62
79
  ...(explicitEnv ?? {}),
63
- ...(env.GSD_CLI_PATH ? { GSD_CLI_PATH: env.GSD_CLI_PATH } : {}),
80
+ ...(gsdCliPath ? { GSD_CLI_PATH: gsdCliPath } : {}),
64
81
  GSD_PERSIST_WRITE_GATE_STATE: "1",
65
82
  GSD_WORKFLOW_PROJECT_ROOT: resolve(workflowProjectRoot),
66
83
  };
@@ -72,17 +89,31 @@ export function detectWorkflowMcpLaunchConfig(projectRoot = process.cwd(), env =
72
89
  env: Object.keys(launchEnv).length > 0 ? launchEnv : undefined,
73
90
  };
74
91
  }
75
- const distCli = resolve(projectRoot, "packages", "mcp-server", "dist", "cli.js");
92
+ const distCli = resolve(resolvedWorkflowProjectRoot, "packages", "mcp-server", "dist", "cli.js");
76
93
  if (existsSync(distCli)) {
77
94
  return {
78
95
  name,
79
96
  command: process.execPath,
80
97
  args: [distCli],
81
- cwd: projectRoot,
98
+ cwd: resolvedWorkflowProjectRoot,
99
+ env: {
100
+ ...(gsdCliPath ? { GSD_CLI_PATH: gsdCliPath } : {}),
101
+ GSD_PERSIST_WRITE_GATE_STATE: "1",
102
+ GSD_WORKFLOW_PROJECT_ROOT: resolvedWorkflowProjectRoot,
103
+ },
104
+ };
105
+ }
106
+ const bundledCli = getBundledWorkflowMcpCliPath(env);
107
+ if (bundledCli) {
108
+ return {
109
+ name,
110
+ command: process.execPath,
111
+ args: [bundledCli],
112
+ cwd: resolvedWorkflowProjectRoot,
82
113
  env: {
83
- ...(env.GSD_CLI_PATH ? { GSD_CLI_PATH: env.GSD_CLI_PATH } : {}),
114
+ ...(gsdCliPath ? { GSD_CLI_PATH: gsdCliPath } : {}),
84
115
  GSD_PERSIST_WRITE_GATE_STATE: "1",
85
- GSD_WORKFLOW_PROJECT_ROOT: resolve(projectRoot),
116
+ GSD_WORKFLOW_PROJECT_ROOT: resolvedWorkflowProjectRoot,
86
117
  },
87
118
  };
88
119
  }
@@ -92,9 +123,9 @@ export function detectWorkflowMcpLaunchConfig(projectRoot = process.cwd(), env =
92
123
  name,
93
124
  command: binPath,
94
125
  env: {
95
- ...(env.GSD_CLI_PATH ? { GSD_CLI_PATH: env.GSD_CLI_PATH } : {}),
126
+ ...(gsdCliPath ? { GSD_CLI_PATH: gsdCliPath } : {}),
96
127
  GSD_PERSIST_WRITE_GATE_STATE: "1",
97
- GSD_WORKFLOW_PROJECT_ROOT: resolve(projectRoot),
128
+ GSD_WORKFLOW_PROJECT_ROOT: resolvedWorkflowProjectRoot,
98
129
  },
99
130
  };
100
131
  }
@@ -1 +1 @@
1
- IBTC_HlEpTBAa4HXMoV_A
1
+ 6_QPFhgX0DQnDhhquheRc
@@ -1,47 +1,47 @@
1
1
  {
2
2
  "/_not-found/page": "/_not-found",
3
3
  "/_global-error/page": "/_global-error",
4
- "/api/bridge-terminal/input/route": "/api/bridge-terminal/input",
5
- "/api/boot/route": "/api/boot",
6
4
  "/api/bridge-terminal/resize/route": "/api/bridge-terminal/resize",
7
- "/api/cleanup/route": "/api/cleanup",
8
- "/api/dev-mode/route": "/api/dev-mode",
5
+ "/api/boot/route": "/api/boot",
6
+ "/api/bridge-terminal/input/route": "/api/bridge-terminal/input",
9
7
  "/api/bridge-terminal/stream/route": "/api/bridge-terminal/stream",
10
- "/api/captures/route": "/api/captures",
8
+ "/api/dev-mode/route": "/api/dev-mode",
9
+ "/api/cleanup/route": "/api/cleanup",
11
10
  "/api/doctor/route": "/api/doctor",
11
+ "/api/captures/route": "/api/captures",
12
12
  "/api/export-data/route": "/api/export-data",
13
- "/api/browse-directories/route": "/api/browse-directories",
14
13
  "/api/forensics/route": "/api/forensics",
15
14
  "/api/git/route": "/api/git",
16
- "/api/hooks/route": "/api/hooks",
17
15
  "/api/history/route": "/api/history",
16
+ "/api/hooks/route": "/api/hooks",
17
+ "/api/experimental/route": "/api/experimental",
18
18
  "/api/inspect/route": "/api/inspect",
19
19
  "/api/knowledge/route": "/api/knowledge",
20
- "/api/notifications/route": "/api/notifications",
21
20
  "/api/live-state/route": "/api/live-state",
21
+ "/api/notifications/route": "/api/notifications",
22
+ "/api/browse-directories/route": "/api/browse-directories",
22
23
  "/api/preferences/route": "/api/preferences",
23
- "/api/experimental/route": "/api/experimental",
24
24
  "/api/recovery/route": "/api/recovery",
25
25
  "/api/onboarding/route": "/api/onboarding",
26
- "/api/projects/route": "/api/projects",
27
26
  "/api/session/browser/route": "/api/session/browser",
27
+ "/api/projects/route": "/api/projects",
28
+ "/api/files/route": "/api/files",
28
29
  "/api/session/command/route": "/api/session/command",
29
- "/api/session/events/route": "/api/session/events",
30
30
  "/api/settings-data/route": "/api/settings-data",
31
31
  "/api/shutdown/route": "/api/shutdown",
32
32
  "/api/session/manage/route": "/api/session/manage",
33
33
  "/api/skill-health/route": "/api/skill-health",
34
+ "/api/session/events/route": "/api/session/events",
34
35
  "/api/steer/route": "/api/steer",
35
36
  "/api/terminal/input/route": "/api/terminal/input",
36
- "/api/remote-questions/route": "/api/remote-questions",
37
+ "/api/switch-root/route": "/api/switch-root",
37
38
  "/api/terminal/resize/route": "/api/terminal/resize",
39
+ "/api/terminal/stream/route": "/api/terminal/stream",
38
40
  "/api/terminal/sessions/route": "/api/terminal/sessions",
39
- "/api/switch-root/route": "/api/switch-root",
40
- "/api/files/route": "/api/files",
41
- "/api/terminal/upload/route": "/api/terminal/upload",
42
41
  "/api/undo/route": "/api/undo",
42
+ "/api/terminal/upload/route": "/api/terminal/upload",
43
+ "/api/remote-questions/route": "/api/remote-questions",
43
44
  "/api/visualizer/route": "/api/visualizer",
44
45
  "/api/update/route": "/api/update",
45
- "/api/terminal/stream/route": "/api/terminal/stream",
46
46
  "/page": "/"
47
47
  }
@@ -4,8 +4,8 @@
4
4
  ],
5
5
  "devFiles": [],
6
6
  "lowPriorityFiles": [
7
- "static/IBTC_HlEpTBAa4HXMoV_A/_buildManifest.js",
8
- "static/IBTC_HlEpTBAa4HXMoV_A/_ssgManifest.js"
7
+ "static/6_QPFhgX0DQnDhhquheRc/_buildManifest.js",
8
+ "static/6_QPFhgX0DQnDhhquheRc/_ssgManifest.js"
9
9
  ],
10
10
  "rootMainFiles": [
11
11
  "static/chunks/webpack-b49b09f97429b5d0.js",
@@ -78,8 +78,8 @@
78
78
  "dynamicRoutes": {},
79
79
  "notFoundRoutes": [],
80
80
  "preview": {
81
- "previewModeId": "9ec7f633ba29922b0cd5bdc6324c1874",
82
- "previewModeSigningKey": "f69825dd29ffcad7cc739fc023e673b88733aeebfb88d552c388441e087bff8f",
83
- "previewModeEncryptionKey": "652fa33ba15b7373d6273964e8aa97d5ce3e88e37f5d9f2f1f6d134a86d94245"
81
+ "previewModeId": "9c536f8266b01265b1ebee217e0efc1b",
82
+ "previewModeSigningKey": "5b60db0abf8d057ddba2380fb60834195822203cb82af6183262d849ca0e1102",
83
+ "previewModeEncryptionKey": "142968ff1bfe3a146c20f8b98e6f25b79ab34b623145f4b12223271b1625cdc6"
84
84
  }
85
85
  }
@@ -1 +1 @@
1
- <!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-b49b09f97429b5d0.js"/><script src="/_next/static/chunks/4bd1b696-e356ca5ba0218e27.js" async=""></script><script src="/_next/static/chunks/3794-42fdce068d44fa4f.js" async=""></script><script src="/_next/static/chunks/main-app-fdab67f7802d7832.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-b49b09f97429b5d0.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[57121,[],\"\"]\n3:I[74581,[],\"\"]\n4:I[90484,[],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[90484,[],\"ViewportBoundary\"]\na:I[90484,[],\"MetadataBoundary\"]\nc:I[27123,[],\"default\",1]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_global-error\",{\"children\":[\"__PAGE__\",{}]}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"IBTC_HlEpTBAa4HXMoV_A\"}\n"])</script><script>self.__next_f.push([1,"d:[]\n7:\"$Wd\"\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\nb:[]\n"])</script></body></html>
1
+ <!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-b49b09f97429b5d0.js"/><script src="/_next/static/chunks/4bd1b696-e356ca5ba0218e27.js" async=""></script><script src="/_next/static/chunks/3794-42fdce068d44fa4f.js" async=""></script><script src="/_next/static/chunks/main-app-fdab67f7802d7832.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-b49b09f97429b5d0.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[57121,[],\"\"]\n3:I[74581,[],\"\"]\n4:I[90484,[],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[90484,[],\"ViewportBoundary\"]\na:I[90484,[],\"MetadataBoundary\"]\nc:I[27123,[],\"default\",1]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_global-error\",{\"children\":[\"__PAGE__\",{}]}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"6_QPFhgX0DQnDhhquheRc\"}\n"])</script><script>self.__next_f.push([1,"d:[]\n7:\"$Wd\"\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\nb:[]\n"])</script></body></html>
@@ -6,7 +6,7 @@
6
6
  8:I[90484,[],"ViewportBoundary"]
7
7
  a:I[90484,[],"MetadataBoundary"]
8
8
  c:I[27123,[],"default",1]
9
- 0:{"P":null,"c":["","_global-error"],"q":"","i":false,"f":[[["",{"children":["_global-error",{"children":["__PAGE__",{}]}]}],[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":[["$","title",null,{"children":"500: This page couldn’t load"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }"}}]]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","display":"flex","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"marginTop":"-32px","maxWidth":"325px","padding":"32px 28px","textAlign":"left"},"children":[["$","svg",null,{"width":"32","height":"32","viewBox":"-0.2 -1.5 32 32","fill":"none","style":{"marginBottom":"24px"},"children":["$","path",null,{"d":"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z","fill":"var(--next-error-title)"}]}],["$","h1",null,{"style":{"fontSize":"24px","fontWeight":500,"letterSpacing":"-0.02em","lineHeight":"32px","margin":"0 0 12px 0","color":"var(--next-error-title)"},"children":"This page couldn’t load"}],["$","p",null,{"style":{"fontSize":"14px","fontWeight":400,"lineHeight":"21px","margin":"0 0 20px 0","color":"var(--next-error-message)"},"children":"A server error occurred. Reload to try again."}],["$","form",null,{"style":{"margin":0},"children":["$","button",null,{"type":"submit","style":{"display":"inline-flex","alignItems":"center","justifyContent":"center","height":"32px","padding":"0 12px","fontSize":"14px","fontWeight":500,"lineHeight":"20px","borderRadius":"6px","cursor":"pointer","color":"var(--next-error-btn-text)","background":"var(--next-error-btn-bg)","border":"var(--next-error-btn-border)"},"children":"Reload"}]}]]}]}]}]]}],null,["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],{},null,false,null]},null,false,"$@7"]},null,false,"$@7"],["$","$1","h",{"children":[null,["$","$L8",null,{"children":"$L9"}],["$","div",null,{"hidden":true,"children":["$","$La",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$Lb"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$c",[]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"IBTC_HlEpTBAa4HXMoV_A"}
9
+ 0:{"P":null,"c":["","_global-error"],"q":"","i":false,"f":[[["",{"children":["_global-error",{"children":["__PAGE__",{}]}]}],[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":[["$","title",null,{"children":"500: This page couldn’t load"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }"}}]]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","display":"flex","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"marginTop":"-32px","maxWidth":"325px","padding":"32px 28px","textAlign":"left"},"children":[["$","svg",null,{"width":"32","height":"32","viewBox":"-0.2 -1.5 32 32","fill":"none","style":{"marginBottom":"24px"},"children":["$","path",null,{"d":"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z","fill":"var(--next-error-title)"}]}],["$","h1",null,{"style":{"fontSize":"24px","fontWeight":500,"letterSpacing":"-0.02em","lineHeight":"32px","margin":"0 0 12px 0","color":"var(--next-error-title)"},"children":"This page couldn’t load"}],["$","p",null,{"style":{"fontSize":"14px","fontWeight":400,"lineHeight":"21px","margin":"0 0 20px 0","color":"var(--next-error-message)"},"children":"A server error occurred. Reload to try again."}],["$","form",null,{"style":{"margin":0},"children":["$","button",null,{"type":"submit","style":{"display":"inline-flex","alignItems":"center","justifyContent":"center","height":"32px","padding":"0 12px","fontSize":"14px","fontWeight":500,"lineHeight":"20px","borderRadius":"6px","cursor":"pointer","color":"var(--next-error-btn-text)","background":"var(--next-error-btn-bg)","border":"var(--next-error-btn-border)"},"children":"Reload"}]}]]}]}]}]]}],null,["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],{},null,false,null]},null,false,"$@7"]},null,false,"$@7"],["$","$1","h",{"children":[null,["$","$L8",null,{"children":"$L9"}],["$","div",null,{"hidden":true,"children":["$","$La",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$Lb"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$c",[]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"6_QPFhgX0DQnDhhquheRc"}
10
10
  d:[]
11
11
  7:"$Wd"
12
12
  9:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
@@ -6,7 +6,7 @@
6
6
  8:I[90484,[],"ViewportBoundary"]
7
7
  a:I[90484,[],"MetadataBoundary"]
8
8
  c:I[27123,[],"default",1]
9
- 0:{"P":null,"c":["","_global-error"],"q":"","i":false,"f":[[["",{"children":["_global-error",{"children":["__PAGE__",{}]}]}],[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":[["$","title",null,{"children":"500: This page couldn’t load"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }"}}]]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","display":"flex","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"marginTop":"-32px","maxWidth":"325px","padding":"32px 28px","textAlign":"left"},"children":[["$","svg",null,{"width":"32","height":"32","viewBox":"-0.2 -1.5 32 32","fill":"none","style":{"marginBottom":"24px"},"children":["$","path",null,{"d":"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z","fill":"var(--next-error-title)"}]}],["$","h1",null,{"style":{"fontSize":"24px","fontWeight":500,"letterSpacing":"-0.02em","lineHeight":"32px","margin":"0 0 12px 0","color":"var(--next-error-title)"},"children":"This page couldn’t load"}],["$","p",null,{"style":{"fontSize":"14px","fontWeight":400,"lineHeight":"21px","margin":"0 0 20px 0","color":"var(--next-error-message)"},"children":"A server error occurred. Reload to try again."}],["$","form",null,{"style":{"margin":0},"children":["$","button",null,{"type":"submit","style":{"display":"inline-flex","alignItems":"center","justifyContent":"center","height":"32px","padding":"0 12px","fontSize":"14px","fontWeight":500,"lineHeight":"20px","borderRadius":"6px","cursor":"pointer","color":"var(--next-error-btn-text)","background":"var(--next-error-btn-bg)","border":"var(--next-error-btn-border)"},"children":"Reload"}]}]]}]}]}]]}],null,["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],{},null,false,null]},null,false,"$@7"]},null,false,"$@7"],["$","$1","h",{"children":[null,["$","$L8",null,{"children":"$L9"}],["$","div",null,{"hidden":true,"children":["$","$La",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$Lb"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$c",[]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"IBTC_HlEpTBAa4HXMoV_A"}
9
+ 0:{"P":null,"c":["","_global-error"],"q":"","i":false,"f":[[["",{"children":["_global-error",{"children":["__PAGE__",{}]}]}],[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":[["$","title",null,{"children":"500: This page couldn’t load"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }"}}]]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","display":"flex","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"marginTop":"-32px","maxWidth":"325px","padding":"32px 28px","textAlign":"left"},"children":[["$","svg",null,{"width":"32","height":"32","viewBox":"-0.2 -1.5 32 32","fill":"none","style":{"marginBottom":"24px"},"children":["$","path",null,{"d":"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z","fill":"var(--next-error-title)"}]}],["$","h1",null,{"style":{"fontSize":"24px","fontWeight":500,"letterSpacing":"-0.02em","lineHeight":"32px","margin":"0 0 12px 0","color":"var(--next-error-title)"},"children":"This page couldn’t load"}],["$","p",null,{"style":{"fontSize":"14px","fontWeight":400,"lineHeight":"21px","margin":"0 0 20px 0","color":"var(--next-error-message)"},"children":"A server error occurred. Reload to try again."}],["$","form",null,{"style":{"margin":0},"children":["$","button",null,{"type":"submit","style":{"display":"inline-flex","alignItems":"center","justifyContent":"center","height":"32px","padding":"0 12px","fontSize":"14px","fontWeight":500,"lineHeight":"20px","borderRadius":"6px","cursor":"pointer","color":"var(--next-error-btn-text)","background":"var(--next-error-btn-bg)","border":"var(--next-error-btn-border)"},"children":"Reload"}]}]]}]}]}]]}],null,["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],{},null,false,null]},null,false,"$@7"]},null,false,"$@7"],["$","$1","h",{"children":[null,["$","$L8",null,{"children":"$L9"}],["$","div",null,{"hidden":true,"children":["$","$La",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$Lb"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$c",[]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"6_QPFhgX0DQnDhhquheRc"}
10
10
  d:[]
11
11
  7:"$Wd"
12
12
  9:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]