gsd-pi 2.67.0-dev.43b0159 → 2.67.0-dev.46f9884
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.
- package/dist/resources/extensions/gsd/commands/catalog.js +1 -2
- package/dist/resources/extensions/gsd/commands/dispatcher.js +1 -1
- package/dist/resources/extensions/gsd/commands/handlers/core.js +1 -91
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +5 -39
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +3 -3
- package/dist/resources/extensions/gsd/prompts/execute-task.md +3 -3
- package/dist/resources/extensions/gsd/prompts/validate-milestone.md +5 -7
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +18 -18
- package/dist/web/standalone/.next/build-manifest.json +3 -3
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.html +2 -2
- package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +18 -18
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/dist/web/standalone/.next/server/pages/404.html +1 -1
- package/dist/web/standalone/.next/server/pages/500.html +2 -2
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/dist/web/standalone/.next/static/chunks/{6502.b804e48b7919f55e.js → 6502.8874bcae249c02e1.js} +3 -3
- package/dist/web/standalone/.next/static/chunks/{webpack-65f0501b197d1c49.js → webpack-9fed74684e1c5bb1.js} +1 -1
- package/package.json +1 -1
- package/src/resources/extensions/gsd/commands/catalog.ts +1 -2
- package/src/resources/extensions/gsd/commands/dispatcher.ts +2 -1
- package/src/resources/extensions/gsd/commands/handlers/core.ts +2 -107
- package/src/resources/extensions/gsd/commands-prefs-wizard.ts +7 -38
- package/src/resources/extensions/gsd/prompts/complete-slice.md +3 -3
- package/src/resources/extensions/gsd/prompts/execute-task.md +3 -3
- package/src/resources/extensions/gsd/prompts/validate-milestone.md +5 -7
- package/src/resources/extensions/gsd/tests/commands-workflow-custom.test.ts +0 -12
- package/src/resources/extensions/gsd/tests/core-overlay-fallback.test.ts +0 -32
- package/src/resources/extensions/gsd/tests/preferences.test.ts +0 -17
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +3 -18
- /package/dist/web/standalone/.next/static/{CrKrzIIxk55witDF1eS0L → FRT6f5ou3wPxpZ7ojoB7E}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{CrKrzIIxk55witDF1eS0L → FRT6f5ou3wPxpZ7ojoB7E}/_ssgManifest.js +0 -0
|
@@ -4,7 +4,7 @@ import { join } from "node:path";
|
|
|
4
4
|
import { loadRegistry } from "../workflow-templates.js";
|
|
5
5
|
import { resolveProjectRoot } from "../worktree.js";
|
|
6
6
|
const gsdHome = process.env.GSD_HOME || join(homedir(), ".gsd");
|
|
7
|
-
export const GSD_COMMAND_DESCRIPTION = "GSD — Get Shit Done: /gsd help|start|templates|next|auto|stop|pause|status|widget|visualize|queue|quick|discuss|capture|triage|dispatch|history|undo|undo-task|reset-slice|rate|skip|export|cleanup|
|
|
7
|
+
export const GSD_COMMAND_DESCRIPTION = "GSD — Get Shit Done: /gsd help|start|templates|next|auto|stop|pause|status|widget|visualize|queue|quick|discuss|capture|triage|dispatch|history|undo|undo-task|reset-slice|rate|skip|export|cleanup|mode|prefs|config|keys|hooks|run-hook|skill-health|doctor|logs|forensics|changelog|migrate|remote|steer|knowledge|new-milestone|parallel|cmux|park|unpark|init|setup|inspect|extensions|update|fast|mcp|rethink|codebase|notifications";
|
|
8
8
|
export const TOP_LEVEL_SUBCOMMANDS = [
|
|
9
9
|
{ cmd: "help", desc: "Categorized command reference with descriptions" },
|
|
10
10
|
{ cmd: "next", desc: "Explicit step mode (same as /gsd)" },
|
|
@@ -29,7 +29,6 @@ export const TOP_LEVEL_SUBCOMMANDS = [
|
|
|
29
29
|
{ cmd: "skip", desc: "Prevent a unit from auto-mode dispatch" },
|
|
30
30
|
{ cmd: "export", desc: "Export milestone/slice results" },
|
|
31
31
|
{ cmd: "cleanup", desc: "Remove merged branches or snapshots" },
|
|
32
|
-
{ cmd: "model", desc: "Switch the active session model or open a picker" },
|
|
33
32
|
{ cmd: "mode", desc: "Switch workflow mode (solo/team)" },
|
|
34
33
|
{ cmd: "prefs", desc: "Manage preferences (model selection, timeouts, etc.)" },
|
|
35
34
|
{ cmd: "config", desc: "Set API keys for external tools" },
|
|
@@ -6,7 +6,7 @@ import { handleWorkflowCommand } from "./handlers/workflow.js";
|
|
|
6
6
|
export async function handleGSDCommand(args, ctx, pi) {
|
|
7
7
|
const trimmed = (typeof args === "string" ? args : "").trim();
|
|
8
8
|
const handlers = [
|
|
9
|
-
() => handleCoreCommand(trimmed, ctx
|
|
9
|
+
() => handleCoreCommand(trimmed, ctx),
|
|
10
10
|
() => handleAutoCommand(trimmed, ctx, pi),
|
|
11
11
|
() => handleParallelCommand(trimmed, ctx, pi),
|
|
12
12
|
() => handleWorkflowCommand(trimmed, ctx, pi),
|
|
@@ -44,7 +44,6 @@ export function showHelp(ctx) {
|
|
|
44
44
|
"SETUP & CONFIGURATION",
|
|
45
45
|
" /gsd init Project init wizard — detect, configure, bootstrap .gsd/",
|
|
46
46
|
" /gsd setup Global setup status [llm|search|remote|keys|prefs]",
|
|
47
|
-
" /gsd model Switch active session model [provider/model|model-id]",
|
|
48
47
|
" /gsd mode Set workflow mode (solo/team) [global|project]",
|
|
49
48
|
" /gsd prefs Manage preferences [global|project|status|wizard|setup|import-claude]",
|
|
50
49
|
" /gsd cmux Manage cmux integration [status|on|off|notifications|sidebar|splits|browser]",
|
|
@@ -153,92 +152,7 @@ export async function handleSetup(args, ctx) {
|
|
|
153
152
|
" /gsd setup keys — Tool API keys\n" +
|
|
154
153
|
" /gsd setup prefs — Global preferences wizard", "info");
|
|
155
154
|
}
|
|
156
|
-
function
|
|
157
|
-
return [...models].sort((a, b) => {
|
|
158
|
-
const aCurrent = currentModel && a.provider === currentModel.provider && a.id === currentModel.id;
|
|
159
|
-
const bCurrent = currentModel && b.provider === currentModel.provider && b.id === currentModel.id;
|
|
160
|
-
if (aCurrent && !bCurrent)
|
|
161
|
-
return -1;
|
|
162
|
-
if (!aCurrent && bCurrent)
|
|
163
|
-
return 1;
|
|
164
|
-
const providerCmp = a.provider.localeCompare(b.provider);
|
|
165
|
-
if (providerCmp !== 0)
|
|
166
|
-
return providerCmp;
|
|
167
|
-
return a.id.localeCompare(b.id);
|
|
168
|
-
});
|
|
169
|
-
}
|
|
170
|
-
async function resolveRequestedModel(query, ctx) {
|
|
171
|
-
const { resolveModelId } = await import("../../auto-model-selection.js");
|
|
172
|
-
const models = ctx.modelRegistry.getAvailable();
|
|
173
|
-
const exact = resolveModelId(query, models, ctx.model?.provider);
|
|
174
|
-
if (exact)
|
|
175
|
-
return exact;
|
|
176
|
-
const lowerQuery = query.toLowerCase();
|
|
177
|
-
const partialMatches = models.filter((model) => model.id.toLowerCase().includes(lowerQuery)
|
|
178
|
-
|| `${model.provider}/${model.id}`.toLowerCase().includes(lowerQuery));
|
|
179
|
-
if (partialMatches.length === 1)
|
|
180
|
-
return partialMatches[0];
|
|
181
|
-
if (partialMatches.length === 0 || !ctx.hasUI)
|
|
182
|
-
return undefined;
|
|
183
|
-
const sorted = sortModelsForSelection(partialMatches, ctx.model);
|
|
184
|
-
const optionToModel = new Map();
|
|
185
|
-
const options = sorted.map((model) => {
|
|
186
|
-
const label = `${model.provider}/${model.id}`;
|
|
187
|
-
optionToModel.set(label, model);
|
|
188
|
-
return label;
|
|
189
|
-
});
|
|
190
|
-
options.push("(cancel)");
|
|
191
|
-
const choice = await ctx.ui.select(`Multiple models match "${query}" — choose one:`, options);
|
|
192
|
-
if (!choice || typeof choice !== "string" || choice === "(cancel)")
|
|
193
|
-
return undefined;
|
|
194
|
-
return optionToModel.get(choice);
|
|
195
|
-
}
|
|
196
|
-
async function handleModel(trimmedArgs, ctx, pi) {
|
|
197
|
-
const availableModels = ctx.modelRegistry.getAvailable();
|
|
198
|
-
if (availableModels.length === 0) {
|
|
199
|
-
ctx.ui.notify("No available models found. Check provider auth and model discovery.", "warning");
|
|
200
|
-
return;
|
|
201
|
-
}
|
|
202
|
-
if (!pi) {
|
|
203
|
-
ctx.ui.notify("Model switching is unavailable in this context.", "warning");
|
|
204
|
-
return;
|
|
205
|
-
}
|
|
206
|
-
const trimmed = trimmedArgs.trim();
|
|
207
|
-
let targetModel;
|
|
208
|
-
if (!trimmed) {
|
|
209
|
-
if (!ctx.hasUI) {
|
|
210
|
-
const current = ctx.model ? `${ctx.model.provider}/${ctx.model.id}` : "(none)";
|
|
211
|
-
ctx.ui.notify(`Current model: ${current}\nUsage: /gsd model <provider/model|model-id>`, "info");
|
|
212
|
-
return;
|
|
213
|
-
}
|
|
214
|
-
const optionToModel = new Map();
|
|
215
|
-
const options = sortModelsForSelection(availableModels, ctx.model).map((model) => {
|
|
216
|
-
const isCurrent = ctx.model && model.provider === ctx.model.provider && model.id === ctx.model.id;
|
|
217
|
-
const label = `${isCurrent ? "* " : ""}${model.provider}/${model.id}`;
|
|
218
|
-
optionToModel.set(label, model);
|
|
219
|
-
return label;
|
|
220
|
-
});
|
|
221
|
-
options.push("(cancel)");
|
|
222
|
-
const choice = await ctx.ui.select("Select session model:", options);
|
|
223
|
-
if (!choice || typeof choice !== "string" || choice === "(cancel)")
|
|
224
|
-
return;
|
|
225
|
-
targetModel = optionToModel.get(choice);
|
|
226
|
-
}
|
|
227
|
-
else {
|
|
228
|
-
targetModel = await resolveRequestedModel(trimmed, ctx);
|
|
229
|
-
}
|
|
230
|
-
if (!targetModel) {
|
|
231
|
-
ctx.ui.notify(`Model "${trimmed}" not found. Use /gsd model with an exact provider/model or a unique model ID.`, "warning");
|
|
232
|
-
return;
|
|
233
|
-
}
|
|
234
|
-
const ok = await pi.setModel(targetModel);
|
|
235
|
-
if (!ok) {
|
|
236
|
-
ctx.ui.notify(`No API key for ${targetModel.provider}/${targetModel.id}`, "warning");
|
|
237
|
-
return;
|
|
238
|
-
}
|
|
239
|
-
ctx.ui.notify(`Model: ${targetModel.provider}/${targetModel.id}`, "info");
|
|
240
|
-
}
|
|
241
|
-
export async function handleCoreCommand(trimmed, ctx, pi) {
|
|
155
|
+
export async function handleCoreCommand(trimmed, ctx) {
|
|
242
156
|
if (trimmed === "help" || trimmed === "h" || trimmed === "?") {
|
|
243
157
|
showHelp(ctx);
|
|
244
158
|
return true;
|
|
@@ -263,10 +177,6 @@ export async function handleCoreCommand(trimmed, ctx, pi) {
|
|
|
263
177
|
ctx.ui.notify(`Widget: ${getWidgetMode()}`, "info");
|
|
264
178
|
return true;
|
|
265
179
|
}
|
|
266
|
-
if (trimmed === "model" || trimmed.startsWith("model ")) {
|
|
267
|
-
await handleModel(trimmed.replace(/^model\s*/, "").trim(), ctx, pi);
|
|
268
|
-
return true;
|
|
269
|
-
}
|
|
270
180
|
if (trimmed === "mode" || trimmed.startsWith("mode ")) {
|
|
271
181
|
const modeArgs = trimmed.replace(/^mode\s*/, "").trim();
|
|
272
182
|
const scope = modeArgs === "project" ? "project" : "global";
|
|
@@ -137,7 +137,7 @@ export function buildCategorySummaries(prefs) {
|
|
|
137
137
|
const models = prefs.models;
|
|
138
138
|
let modelsSummary = "(not configured)";
|
|
139
139
|
if (models && Object.keys(models).length > 0) {
|
|
140
|
-
const parts = Object.entries(models).map(([phase, model]) => `${phase}: ${
|
|
140
|
+
const parts = Object.entries(models).map(([phase, model]) => `${phase}: ${model}`);
|
|
141
141
|
modelsSummary = parts.join(", ");
|
|
142
142
|
}
|
|
143
143
|
// Timeouts
|
|
@@ -220,39 +220,8 @@ export function buildCategorySummaries(prefs) {
|
|
|
220
220
|
};
|
|
221
221
|
}
|
|
222
222
|
// ─── Category configuration functions ────────────────────────────────────────
|
|
223
|
-
export function formatConfiguredModel(config) {
|
|
224
|
-
if (typeof config === "string")
|
|
225
|
-
return config;
|
|
226
|
-
if (!config || typeof config !== "object")
|
|
227
|
-
return "(invalid)";
|
|
228
|
-
const maybeConfig = config;
|
|
229
|
-
if (typeof maybeConfig.model !== "string" || maybeConfig.model.trim() === "")
|
|
230
|
-
return "(invalid)";
|
|
231
|
-
if (typeof maybeConfig.provider === "string" && maybeConfig.provider && !maybeConfig.model.includes("/")) {
|
|
232
|
-
return `${maybeConfig.provider}/${maybeConfig.model}`;
|
|
233
|
-
}
|
|
234
|
-
return maybeConfig.model;
|
|
235
|
-
}
|
|
236
|
-
export function toPersistedModelId(provider, modelId) {
|
|
237
|
-
if (!provider.trim())
|
|
238
|
-
return modelId;
|
|
239
|
-
const normalizedProvider = provider.trim();
|
|
240
|
-
const normalizedModelId = modelId.trim();
|
|
241
|
-
return normalizedModelId.startsWith(`${normalizedProvider}/`)
|
|
242
|
-
? normalizedModelId
|
|
243
|
-
: `${normalizedProvider}/${normalizedModelId}`;
|
|
244
|
-
}
|
|
245
223
|
async function configureModels(ctx, prefs) {
|
|
246
|
-
const modelPhases = [
|
|
247
|
-
"research",
|
|
248
|
-
"planning",
|
|
249
|
-
"discuss",
|
|
250
|
-
"execution",
|
|
251
|
-
"execution_simple",
|
|
252
|
-
"completion",
|
|
253
|
-
"validation",
|
|
254
|
-
"subagent",
|
|
255
|
-
];
|
|
224
|
+
const modelPhases = ["research", "planning", "execution", "completion"];
|
|
256
225
|
const models = prefs.models ?? {};
|
|
257
226
|
const availableModels = ctx.modelRegistry.getAvailable();
|
|
258
227
|
if (availableModels.length > 0) {
|
|
@@ -284,7 +253,7 @@ async function configureModels(ctx, prefs) {
|
|
|
284
253
|
});
|
|
285
254
|
providerOptions.push("(keep current)", "(clear)", "(type manually)");
|
|
286
255
|
for (const phase of modelPhases) {
|
|
287
|
-
const current =
|
|
256
|
+
const current = models[phase] ?? "";
|
|
288
257
|
const phaseLabel = `Model for ${phase} phase${current ? ` (current: ${current})` : ""}`;
|
|
289
258
|
// Step 1: pick provider
|
|
290
259
|
const providerChoice = await ctx.ui.select(`${phaseLabel} — choose provider:`, providerOptions);
|
|
@@ -316,14 +285,14 @@ async function configureModels(ctx, prefs) {
|
|
|
316
285
|
delete models[phase];
|
|
317
286
|
}
|
|
318
287
|
else {
|
|
319
|
-
models[phase] =
|
|
288
|
+
models[phase] = modelChoice;
|
|
320
289
|
}
|
|
321
290
|
}
|
|
322
291
|
}
|
|
323
292
|
}
|
|
324
293
|
else {
|
|
325
294
|
for (const phase of modelPhases) {
|
|
326
|
-
const current =
|
|
295
|
+
const current = models[phase] ?? "";
|
|
327
296
|
const input = await ctx.ui.input(`Model for ${phase} phase${current ? ` (current: ${current})` : ""}:`, current || "e.g. claude-sonnet-4-20250514");
|
|
328
297
|
if (input !== null && input !== undefined) {
|
|
329
298
|
const val = input.trim();
|
|
@@ -339,9 +308,6 @@ async function configureModels(ctx, prefs) {
|
|
|
339
308
|
if (Object.keys(models).length > 0) {
|
|
340
309
|
prefs.models = models;
|
|
341
310
|
}
|
|
342
|
-
else {
|
|
343
|
-
delete prefs.models;
|
|
344
|
-
}
|
|
345
311
|
}
|
|
346
312
|
async function configureTimeouts(ctx, prefs) {
|
|
347
313
|
const autoSup = prefs.auto_supervisor ?? {};
|
|
@@ -25,11 +25,11 @@ Then:
|
|
|
25
25
|
4. If the slice plan includes observability/diagnostic surfaces, confirm they work. Skip this for simple slices that don't have observability sections.
|
|
26
26
|
5. If the slice involved runtime behavior, fill the **Operational Readiness** section (Q8) in the slice summary: health signal, failure signal, recovery procedure, and monitoring gaps. Omit entirely for simple slices with no runtime concerns.
|
|
27
27
|
6. If this slice produced evidence that a requirement changed status (Active → Validated, Active → Deferred, etc.), call `gsd_requirement_update` with the requirement ID, updated `status`, and `validation` evidence. Do NOT write `.gsd/REQUIREMENTS.md` directly — the engine renders it from the database.
|
|
28
|
-
7.
|
|
29
|
-
8.
|
|
28
|
+
7. Write `{{sliceSummaryPath}}` (compress all task summaries).
|
|
29
|
+
8. Write `{{sliceUatPath}}` — a concrete UAT script with real test cases derived from the slice plan and task summaries. Include preconditions, numbered steps with expected outcomes, and edge cases. This must NOT be a placeholder or generic template — tailor every test case to what this slice actually built.
|
|
30
30
|
9. Review task summaries for `key_decisions`. Append any significant decisions to `.gsd/DECISIONS.md` if missing.
|
|
31
31
|
10. Review task summaries for patterns, gotchas, or non-obvious lessons learned. If any would save future agents from repeating investigation or hitting the same issues, append them to `.gsd/KNOWLEDGE.md`. Only add entries that are genuinely useful — don't pad with obvious observations.
|
|
32
|
-
11. Call `gsd_complete_slice` with
|
|
32
|
+
11. Call `gsd_complete_slice` with milestoneId, sliceId, the slice summary, and the UAT result. Do NOT manually mark the roadmap checkbox — the tool writes to the DB and renders the ROADMAP.md projection automatically.
|
|
33
33
|
12. Do not run git commands — the system commits your changes and handles any merge after this unit succeeds.
|
|
34
34
|
13. Update `.gsd/PROJECT.md` if it exists — refresh current state if needed: use the `write` tool with `path: ".gsd/PROJECT.md"` and `content` containing the full updated document reflecting current project state. Do NOT use the `edit` tool for this — PROJECT.md is a full-document refresh.
|
|
35
35
|
|
|
@@ -69,14 +69,14 @@ Then:
|
|
|
69
69
|
16. If you made an architectural, pattern, library, or observability decision during this task that downstream work should know about, append it to `.gsd/DECISIONS.md` (read the template at `~/.gsd/agent/extensions/gsd/templates/decisions.md` if the file doesn't exist yet). Not every task produces decisions — only append when a meaningful choice was made.
|
|
70
70
|
17. If you discover a non-obvious rule, recurring gotcha, or useful pattern during execution, append it to `.gsd/KNOWLEDGE.md`. Only add entries that would save future agents from repeating your investigation. Don't add obvious things.
|
|
71
71
|
18. Read the template at `~/.gsd/agent/extensions/gsd/templates/task-summary.md`
|
|
72
|
-
19.
|
|
73
|
-
20. Call `gsd_complete_task` with milestoneId, sliceId, taskId, and
|
|
72
|
+
19. Write `{{taskSummaryPath}}`
|
|
73
|
+
20. Call `gsd_complete_task` with milestoneId, sliceId, taskId, and a summary of what was accomplished. This is your final required step — do NOT manually edit PLAN.md checkboxes. The tool marks the task complete, updates the DB, and renders PLAN.md automatically.
|
|
74
74
|
21. Do not run git commands — the system reads your task summary after completion and creates a meaningful commit from it (type inferred from title, message from your one-liner, key files from frontmatter). Write a clear, specific one-liner in the summary — it becomes the commit message.
|
|
75
75
|
|
|
76
76
|
All work stays in your working directory: `{{workingDirectory}}`.
|
|
77
77
|
|
|
78
78
|
**Autonomous execution:** Do not call `ask_user_questions` or `secure_env_collect`. You are running in auto-mode — there is no human available to answer questions. Make reasonable assumptions and document them in the task summary. If a decision genuinely requires human input, note it in the summary and proceed with the best available option.
|
|
79
79
|
|
|
80
|
-
**You MUST call `gsd_complete_task`
|
|
80
|
+
**You MUST call `gsd_complete_task` AND write `{{taskSummaryPath}}` before finishing.**
|
|
81
81
|
|
|
82
82
|
When done, say: "Task {{taskId}} complete."
|
|
@@ -40,9 +40,9 @@ After all reviewers complete, aggregate their verdicts:
|
|
|
40
40
|
- If any reviewer says NEEDS-ATTENTION → overall verdict: `needs-attention`
|
|
41
41
|
- If any reviewer says FAIL → overall verdict: `needs-remediation`
|
|
42
42
|
|
|
43
|
-
### Step 3 —
|
|
43
|
+
### Step 3 — Write VALIDATION File
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
Write to `{{validationPath}}`:
|
|
46
46
|
|
|
47
47
|
```markdown
|
|
48
48
|
---
|
|
@@ -69,15 +69,13 @@ reviewers: 3
|
|
|
69
69
|
<if verdict is not pass: specific actions required>
|
|
70
70
|
```
|
|
71
71
|
|
|
72
|
-
Call `gsd_validate_milestone` with the camelCase fields `milestoneId`, `verdict`, `remediationRound`, `successCriteriaChecklist`, `sliceDeliveryAudit`, `crossSliceIntegration`, `requirementCoverage`, `verdictRationale`, and `remediationPlan` when needed. If you include verification-class analysis, pass it in `verificationClasses`.
|
|
73
|
-
|
|
74
72
|
**DB access safety:** Do NOT query `.gsd/gsd.db` directly via `sqlite3` or `node -e require('better-sqlite3')` — the engine owns the WAL connection. Use `gsd_milestone_status` to read milestone and slice state. All data you need is already inlined in the context above or accessible via the `gsd_*` tools. Direct DB access corrupts the WAL and bypasses tool-level validation.
|
|
75
73
|
|
|
76
74
|
If verdict is `needs-remediation`:
|
|
77
|
-
-
|
|
78
|
-
-
|
|
75
|
+
- Add new slices to `{{roadmapPath}}` with unchecked `[ ]` status
|
|
76
|
+
- These slices will be planned and executed before validation re-runs
|
|
79
77
|
|
|
80
|
-
**You MUST
|
|
78
|
+
**You MUST write `{{validationPath}}` before finishing.**
|
|
81
79
|
|
|
82
80
|
**File system safety:** When scanning milestone directories for evidence, use `ls` or `find` to list directory contents first — never pass a directory path (e.g. `tasks/`, `slices/`) directly to the `read` tool. The `read` tool only accepts file paths, not directories.
|
|
83
81
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
FRT6f5ou3wPxpZ7ojoB7E
|
|
@@ -2,46 +2,46 @@
|
|
|
2
2
|
"/_not-found/page": "/_not-found",
|
|
3
3
|
"/_global-error/page": "/_global-error",
|
|
4
4
|
"/api/boot/route": "/api/boot",
|
|
5
|
-
"/api/bridge-terminal/input/route": "/api/bridge-terminal/input",
|
|
6
5
|
"/api/bridge-terminal/resize/route": "/api/bridge-terminal/resize",
|
|
6
|
+
"/api/bridge-terminal/input/route": "/api/bridge-terminal/input",
|
|
7
|
+
"/api/bridge-terminal/stream/route": "/api/bridge-terminal/stream",
|
|
7
8
|
"/api/dev-mode/route": "/api/dev-mode",
|
|
9
|
+
"/api/browse-directories/route": "/api/browse-directories",
|
|
8
10
|
"/api/cleanup/route": "/api/cleanup",
|
|
11
|
+
"/api/captures/route": "/api/captures",
|
|
9
12
|
"/api/doctor/route": "/api/doctor",
|
|
10
|
-
"/api/browse-directories/route": "/api/browse-directories",
|
|
11
13
|
"/api/export-data/route": "/api/export-data",
|
|
12
14
|
"/api/forensics/route": "/api/forensics",
|
|
13
|
-
"/api/captures/route": "/api/captures",
|
|
14
15
|
"/api/git/route": "/api/git",
|
|
15
|
-
"/api/history/route": "/api/history",
|
|
16
16
|
"/api/hooks/route": "/api/hooks",
|
|
17
|
-
"/api/
|
|
17
|
+
"/api/history/route": "/api/history",
|
|
18
18
|
"/api/knowledge/route": "/api/knowledge",
|
|
19
|
+
"/api/inspect/route": "/api/inspect",
|
|
19
20
|
"/api/live-state/route": "/api/live-state",
|
|
20
21
|
"/api/experimental/route": "/api/experimental",
|
|
21
|
-
"/api/bridge-terminal/stream/route": "/api/bridge-terminal/stream",
|
|
22
22
|
"/api/notifications/route": "/api/notifications",
|
|
23
|
-
"/api/recovery/route": "/api/recovery",
|
|
24
23
|
"/api/preferences/route": "/api/preferences",
|
|
25
|
-
"/api/
|
|
24
|
+
"/api/recovery/route": "/api/recovery",
|
|
26
25
|
"/api/projects/route": "/api/projects",
|
|
27
|
-
"/api/session/
|
|
26
|
+
"/api/session/browser/route": "/api/session/browser",
|
|
28
27
|
"/api/onboarding/route": "/api/onboarding",
|
|
28
|
+
"/api/session/command/route": "/api/session/command",
|
|
29
|
+
"/api/settings-data/route": "/api/settings-data",
|
|
29
30
|
"/api/session/events/route": "/api/session/events",
|
|
30
|
-
"/api/
|
|
31
|
+
"/api/skill-health/route": "/api/skill-health",
|
|
31
32
|
"/api/shutdown/route": "/api/shutdown",
|
|
32
|
-
"/api/
|
|
33
|
-
"/api/terminal/input/route": "/api/terminal/input",
|
|
33
|
+
"/api/session/manage/route": "/api/session/manage",
|
|
34
34
|
"/api/steer/route": "/api/steer",
|
|
35
|
+
"/api/terminal/input/route": "/api/terminal/input",
|
|
36
|
+
"/api/files/route": "/api/files",
|
|
35
37
|
"/api/switch-root/route": "/api/switch-root",
|
|
36
|
-
"/api/terminal/resize/route": "/api/terminal/resize",
|
|
37
|
-
"/api/skill-health/route": "/api/skill-health",
|
|
38
38
|
"/api/terminal/sessions/route": "/api/terminal/sessions",
|
|
39
|
-
"/api/terminal/
|
|
40
|
-
"/api/terminal/stream/route": "/api/terminal/stream",
|
|
39
|
+
"/api/terminal/resize/route": "/api/terminal/resize",
|
|
41
40
|
"/api/visualizer/route": "/api/visualizer",
|
|
42
|
-
"/api/update/route": "/api/update",
|
|
43
41
|
"/api/undo/route": "/api/undo",
|
|
42
|
+
"/api/terminal/stream/route": "/api/terminal/stream",
|
|
43
|
+
"/api/update/route": "/api/update",
|
|
44
44
|
"/api/remote-questions/route": "/api/remote-questions",
|
|
45
|
-
"/api/
|
|
45
|
+
"/api/terminal/upload/route": "/api/terminal/upload",
|
|
46
46
|
"/page": "/"
|
|
47
47
|
}
|
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
],
|
|
5
5
|
"devFiles": [],
|
|
6
6
|
"lowPriorityFiles": [
|
|
7
|
-
"static/
|
|
8
|
-
"static/
|
|
7
|
+
"static/FRT6f5ou3wPxpZ7ojoB7E/_buildManifest.js",
|
|
8
|
+
"static/FRT6f5ou3wPxpZ7ojoB7E/_ssgManifest.js"
|
|
9
9
|
],
|
|
10
10
|
"rootMainFiles": [
|
|
11
|
-
"static/chunks/webpack-
|
|
11
|
+
"static/chunks/webpack-9fed74684e1c5bb1.js",
|
|
12
12
|
"static/chunks/4bd1b696-e5d7c65570c947b7.js",
|
|
13
13
|
"static/chunks/3794-337d1ca25ad99a89.js",
|
|
14
14
|
"static/chunks/main-app-fdab67f7802d7832.js"
|
|
@@ -78,8 +78,8 @@
|
|
|
78
78
|
"dynamicRoutes": {},
|
|
79
79
|
"notFoundRoutes": [],
|
|
80
80
|
"preview": {
|
|
81
|
-
"previewModeId": "
|
|
82
|
-
"previewModeSigningKey": "
|
|
83
|
-
"previewModeEncryptionKey": "
|
|
81
|
+
"previewModeId": "bbe6c686c4a57f8dc695113c1f101d92",
|
|
82
|
+
"previewModeSigningKey": "ffae9f8bf1c7f6c2b23ab516a9d39761f8d8122f00795dfd23d30669f7122459",
|
|
83
|
+
"previewModeEncryptionKey": "d9efa46afb760c77c90ee31e6f00d2966a87bcbef8ecfb4f84ec3533a57ed265"
|
|
84
84
|
}
|
|
85
85
|
}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"static/chunks/363642f4.f9053a63f1b97508.js",
|
|
7
7
|
"static/chunks/4986-c2fc8845ce785303.js",
|
|
8
8
|
"static/chunks/2008.817d0885545aaea9.js",
|
|
9
|
-
"static/chunks/6502.
|
|
9
|
+
"static/chunks/6502.8874bcae249c02e1.js"
|
|
10
10
|
]
|
|
11
11
|
},
|
|
12
12
|
"components/gsd/chat-mode.tsx -> react-markdown": {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
<!DOCTYPE html><!--
|
|
2
|
-
@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><!--FRT6f5ou3wPxpZ7ojoB7E--><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-9fed74684e1c5bb1.js"/><script src="/_next/static/chunks/4bd1b696-e5d7c65570c947b7.js" async=""></script><script src="/_next/static/chunks/3794-337d1ca25ad99a89.js" async=""></script><script src="/_next/static/chunks/main-app-fdab67f7802d7832.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: Internal Server Error.</title><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}
|
|
2
|
+
@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-9fed74684e1c5bb1.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\"\n7:I[90484,[],\"ViewportBoundary\"]\n9:I[90484,[],\"MetadataBoundary\"]\nb:I[27123,[],\"\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"FRT6f5ou3wPxpZ7ojoB7E\",\"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: Internal Server Error.\"}]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"lineHeight\":\"48px\"},\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\\n@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"paddingRight\":23,\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\"},\"children\":\"500\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"28px\"},\"children\":\"Internal Server Error.\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L7\",null,{\"children\":\"$L8\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L9\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$La\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$b\",[]],\"S\":true}\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"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\na:[]\n"])</script></body></html>
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
7:I[90484,[],"ViewportBoundary"]
|
|
7
7
|
9:I[90484,[],"MetadataBoundary"]
|
|
8
8
|
b:I[27123,[],""]
|
|
9
|
-
0:{"P":null,"b":"
|
|
9
|
+
0:{"P":null,"b":"FRT6f5ou3wPxpZ7ojoB7E","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: Internal Server Error."}]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"lineHeight":"48px"},"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\n@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","paddingRight":23,"fontSize":24,"fontWeight":500,"verticalAlign":"top"},"children":"500"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"28px"},"children":"Internal Server Error."}]}]]}]}]}]]}],null,["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],["$","$1","h",{"children":[null,["$","$L7",null,{"children":"$L8"}],["$","div",null,{"hidden":true,"children":["$","$L9",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$La"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$b",[]],"S":true}
|
|
10
10
|
8:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
|
|
11
11
|
6:null
|
|
12
12
|
a:[]
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
7:I[90484,[],"ViewportBoundary"]
|
|
7
7
|
9:I[90484,[],"MetadataBoundary"]
|
|
8
8
|
b:I[27123,[],""]
|
|
9
|
-
0:{"P":null,"b":"
|
|
9
|
+
0:{"P":null,"b":"FRT6f5ou3wPxpZ7ojoB7E","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: Internal Server Error."}]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"lineHeight":"48px"},"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\n@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","paddingRight":23,"fontSize":24,"fontWeight":500,"verticalAlign":"top"},"children":"500"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"28px"},"children":"Internal Server Error."}]}]]}]}]}]]}],null,["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],["$","$1","h",{"children":[null,["$","$L7",null,{"children":"$L8"}],["$","div",null,{"hidden":true,"children":["$","$L9",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$La"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$b",[]],"S":true}
|
|
10
10
|
8:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
|
|
11
11
|
6:null
|
|
12
12
|
a:[]
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
1:"$Sreact.fragment"
|
|
2
2
|
2:I[90484,[],"OutletBoundary"]
|
|
3
3
|
3:"$Sreact.suspense"
|
|
4
|
-
0:{"buildId":"
|
|
4
|
+
0:{"buildId":"FRT6f5ou3wPxpZ7ojoB7E","rsc":["$","$1","c",{"children":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":["$","title",null,{"children":"500: Internal Server Error."}]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"lineHeight":"48px"},"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\n@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","paddingRight":23,"fontSize":24,"fontWeight":500,"verticalAlign":"top"},"children":"500"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"28px"},"children":"Internal Server Error."}]}]]}]}]}]]}],null,["$","$L2",null,{"children":["$","$3",null,{"name":"Next.MetadataOutlet","children":"$@4"}]}]]}],"loading":null,"isPartial":false}
|
|
5
5
|
4:null
|
package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
1:"$Sreact.fragment"
|
|
2
2
|
2:I[57121,[],""]
|
|
3
3
|
3:I[74581,[],""]
|
|
4
|
-
0:{"buildId":"
|
|
4
|
+
0:{"buildId":"FRT6f5ou3wPxpZ7ojoB7E","rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"loading":null,"isPartial":false}
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
2:I[90484,[],"ViewportBoundary"]
|
|
3
3
|
3:I[90484,[],"MetadataBoundary"]
|
|
4
4
|
4:"$Sreact.suspense"
|
|
5
|
-
0:{"buildId":"
|
|
5
|
+
0:{"buildId":"FRT6f5ou3wPxpZ7ojoB7E","rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"loading":null,"isPartial":false}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
1:"$Sreact.fragment"
|
|
2
2
|
2:I[57121,[],""]
|
|
3
3
|
3:I[74581,[],""]
|
|
4
|
-
0:{"buildId":"
|
|
4
|
+
0:{"buildId":"FRT6f5ou3wPxpZ7ojoB7E","rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"loading":null,"isPartial":false}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
0:{"buildId":"
|
|
1
|
+
0:{"buildId":"FRT6f5ou3wPxpZ7ojoB7E","tree":{"name":"","paramType":null,"paramKey":"","hasRuntimePrefetch":false,"slots":{"children":{"name":"_global-error","paramType":null,"paramKey":"_global-error","hasRuntimePrefetch":false,"slots":{"children":{"name":"__PAGE__","paramType":null,"paramKey":"__PAGE__","hasRuntimePrefetch":false,"slots":null,"isRootLayout":false}},"isRootLayout":false}},"isRootLayout":false},"staleTime":300}
|