gsd-pi 2.67.0-dev.5399650 → 2.67.0-dev.6fc2289
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/README.md +1 -1
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +152 -70
- package/dist/resources/extensions/gsd/auto/session.js +4 -0
- package/dist/resources/extensions/gsd/auto-dispatch.js +1 -1
- package/dist/resources/extensions/gsd/auto-start.js +16 -30
- package/dist/resources/extensions/gsd/auto-worktree.js +62 -15
- package/dist/resources/extensions/gsd/auto.js +94 -59
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +7 -2
- package/dist/resources/extensions/gsd/commands/catalog.js +2 -1
- package/dist/resources/extensions/gsd/commands/handlers/core.js +1 -1
- package/dist/resources/extensions/gsd/commands-mcp-status.js +43 -7
- package/dist/resources/extensions/gsd/doctor-git-checks.js +4 -4
- package/dist/resources/extensions/gsd/doctor-proactive.js +3 -3
- package/dist/resources/extensions/gsd/doctor.js +8 -4
- package/dist/resources/extensions/gsd/guided-flow.js +40 -31
- package/dist/resources/extensions/gsd/init-wizard.js +15 -12
- package/dist/resources/extensions/gsd/interrupted-session.js +146 -0
- package/dist/resources/extensions/gsd/mcp-project-config.js +83 -0
- package/dist/resources/extensions/gsd/workflow-mcp.js +64 -24
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +16 -16
- 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 +2 -2
- package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
- 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/page_client-reference-manifest.js +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/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +2 -2
- 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/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +16 -16
- 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 +1 -1
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/dist/web/standalone/.next/static/chunks/2826.821e01b07d92e948.js +9 -0
- package/dist/web/standalone/.next/static/chunks/app/{page-0c485498795110d6.js → page-f1e30ab6bb269149.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/{webpack-b49b09f97429b5d0.js → webpack-6e4d7e9a4f57bed4.js} +1 -1
- package/package.json +1 -1
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +10 -4
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/src/workflow-tools.ts +13 -2
- package/packages/pi-agent-core/dist/agent-loop.js +14 -6
- package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/packages/pi-agent-core/src/agent-loop.test.ts +53 -0
- package/packages/pi-agent-core/src/agent-loop.ts +20 -6
- package/packages/pi-coding-agent/dist/core/contextual-tips.d.ts +43 -0
- package/packages/pi-coding-agent/dist/core/contextual-tips.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/contextual-tips.js +208 -0
- package/packages/pi-coding-agent/dist/core/contextual-tips.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/contextual-tips.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/contextual-tips.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/contextual-tips.test.js +227 -0
- package/packages/pi-coding-agent/dist/core/contextual-tips.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/index.d.ts +1 -0
- package/packages/pi-coding-agent/dist/core/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/index.js +1 -0
- package/packages/pi-coding-agent/dist/core/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +28 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +17 -12
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +19 -0
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.d.ts +4 -0
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js +14 -0
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +3 -0
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +15 -12
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/pi-coding-agent/src/core/contextual-tips.test.ts +259 -0
- package/packages/pi-coding-agent/src/core/contextual-tips.ts +232 -0
- package/packages/pi-coding-agent/src/core/index.ts +2 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +54 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +18 -12
- package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +21 -0
- package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.ts +19 -0
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +19 -15
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +190 -93
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +89 -116
- package/src/resources/extensions/gsd/auto/session.ts +4 -0
- package/src/resources/extensions/gsd/auto-dispatch.ts +1 -1
- package/src/resources/extensions/gsd/auto-start.ts +23 -55
- package/src/resources/extensions/gsd/auto-worktree.ts +59 -15
- package/src/resources/extensions/gsd/auto.ts +104 -63
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +8 -2
- package/src/resources/extensions/gsd/commands/catalog.ts +2 -1
- package/src/resources/extensions/gsd/commands/handlers/core.ts +1 -1
- package/src/resources/extensions/gsd/commands-mcp-status.ts +53 -7
- package/src/resources/extensions/gsd/doctor-git-checks.ts +4 -4
- package/src/resources/extensions/gsd/doctor-proactive.ts +3 -3
- package/src/resources/extensions/gsd/doctor.ts +9 -5
- package/src/resources/extensions/gsd/guided-flow.ts +42 -36
- package/src/resources/extensions/gsd/init-wizard.ts +17 -11
- package/src/resources/extensions/gsd/interrupted-session.ts +224 -0
- package/src/resources/extensions/gsd/mcp-project-config.ts +128 -0
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +668 -2
- package/src/resources/extensions/gsd/tests/cold-resume-db-reopen.test.ts +14 -4
- package/src/resources/extensions/gsd/tests/copy-planning-artifacts-samepath.test.ts +21 -0
- package/src/resources/extensions/gsd/tests/crash-recovery.test.ts +380 -2
- package/src/resources/extensions/gsd/tests/forensics-context-persist.test.ts +30 -0
- package/src/resources/extensions/gsd/tests/guided-flow-session-isolation.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/integration/doctor-fixlevel.test.ts +52 -1
- package/src/resources/extensions/gsd/tests/integration/doctor-git.test.ts +2 -9
- package/src/resources/extensions/gsd/tests/integration/doctor-proactive.test.ts +0 -33
- package/src/resources/extensions/gsd/tests/integration/merge-cwd-restore.test.ts +169 -0
- package/src/resources/extensions/gsd/tests/interrupted-session-auto.test.ts +146 -0
- package/src/resources/extensions/gsd/tests/interrupted-session-ui.test.ts +136 -0
- package/src/resources/extensions/gsd/tests/mcp-project-config.test.ts +85 -0
- package/src/resources/extensions/gsd/tests/mcp-status.test.ts +15 -0
- package/src/resources/extensions/gsd/tests/verification-operational-gate.test.ts +11 -0
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +178 -17
- package/src/resources/extensions/gsd/workflow-mcp.ts +76 -23
- package/dist/web/standalone/.next/static/chunks/6502.b804e48b7919f55e.js +0 -9
- package/packages/pi-coding-agent/dist/modes/interactive/provider-auth-setup.d.ts +0 -13
- package/packages/pi-coding-agent/dist/modes/interactive/provider-auth-setup.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/modes/interactive/provider-auth-setup.js +0 -27
- package/packages/pi-coding-agent/dist/modes/interactive/provider-auth-setup.js.map +0 -1
- package/packages/pi-coding-agent/src/modes/interactive/provider-auth-setup.ts +0 -40
- package/src/resources/extensions/gsd/tests/init-bootstrap-completeness.test.ts +0 -121
- /package/dist/web/standalone/.next/static/{6_QPFhgX0DQnDhhquheRc → yh2vT27L1E6PChb_C1N_F}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{6_QPFhgX0DQnDhhquheRc → yh2vT27L1E6PChb_C1N_F}/_ssgManifest.js +0 -0
|
@@ -190,16 +190,12 @@ export async function showProjectInit(ctx, pi, basePath, detection) {
|
|
|
190
190
|
// Initialize SQLite database so GSD starts in full-capability mode (#3880).
|
|
191
191
|
// Without this, isDbAvailable() returns false and GSD enters degraded
|
|
192
192
|
// markdown-only mode until a tool handler happens to call ensureDbOpen().
|
|
193
|
-
let dbReady = false;
|
|
194
193
|
try {
|
|
195
194
|
const { ensureDbOpen } = await import("./bootstrap/dynamic-tools.js");
|
|
196
|
-
|
|
195
|
+
await ensureDbOpen(basePath);
|
|
197
196
|
}
|
|
198
197
|
catch {
|
|
199
|
-
//
|
|
200
|
-
}
|
|
201
|
-
if (!dbReady) {
|
|
202
|
-
ctx.ui.notify("Warning: database initialization failed — GSD will run in degraded mode until the next /gsd invocation.", "warning");
|
|
198
|
+
// Non-fatal — DB creation failure should not block project init
|
|
203
199
|
}
|
|
204
200
|
// Ensure .gitignore
|
|
205
201
|
ensureGitignore(basePath);
|
|
@@ -218,7 +214,6 @@ export async function showProjectInit(ctx, pi, basePath, detection) {
|
|
|
218
214
|
// Write initial STATE.md so it exists before the first /gsd invocation.
|
|
219
215
|
// The explicit /gsd init path (ops.ts) returns without entering showSmartEntry(),
|
|
220
216
|
// which would otherwise generate STATE.md at guided-flow.ts:1358.
|
|
221
|
-
let stateReady = false;
|
|
222
217
|
try {
|
|
223
218
|
const { deriveState } = await import("./state.js");
|
|
224
219
|
const { buildStateMarkdown } = await import("./doctor.js");
|
|
@@ -226,13 +221,21 @@ export async function showProjectInit(ctx, pi, basePath, detection) {
|
|
|
226
221
|
const { resolveGsdRootFile } = await import("./paths.js");
|
|
227
222
|
const state = await deriveState(basePath);
|
|
228
223
|
await saveFile(resolveGsdRootFile(basePath, "STATE"), buildStateMarkdown(state));
|
|
229
|
-
stateReady = true;
|
|
230
224
|
}
|
|
231
225
|
catch {
|
|
232
|
-
//
|
|
233
|
-
}
|
|
234
|
-
if (
|
|
235
|
-
|
|
226
|
+
// Non-fatal — STATE.md will be regenerated on next /gsd invocation
|
|
227
|
+
}
|
|
228
|
+
if (ctx.model?.provider === "claude-code") {
|
|
229
|
+
try {
|
|
230
|
+
const { ensureProjectWorkflowMcpConfig } = await import("./mcp-project-config.js");
|
|
231
|
+
const result = ensureProjectWorkflowMcpConfig(basePath);
|
|
232
|
+
if (result.status !== "unchanged") {
|
|
233
|
+
ctx.ui.notify(`Claude Code MCP prepared at ${result.configPath}`, "info");
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
catch (err) {
|
|
237
|
+
ctx.ui.notify(`Claude Code MCP prep failed: ${err instanceof Error ? err.message : String(err)}`, "warning");
|
|
238
|
+
}
|
|
236
239
|
}
|
|
237
240
|
ctx.ui.notify("GSD initialized. Starting your first milestone...", "info");
|
|
238
241
|
return { completed: true, bootstrapped: true };
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { verifyExpectedArtifact } from "./auto-recovery.js";
|
|
4
|
+
import { formatCrashInfo, isLockProcessAlive, readCrashLock, } from "./crash-recovery.js";
|
|
5
|
+
import { gsdRoot } from "./paths.js";
|
|
6
|
+
import { synthesizeCrashRecovery, } from "./session-forensics.js";
|
|
7
|
+
import { deriveState } from "./state.js";
|
|
8
|
+
export function readPausedSessionMetadata(basePath) {
|
|
9
|
+
const pausedPath = join(gsdRoot(basePath), "runtime", "paused-session.json");
|
|
10
|
+
if (!existsSync(pausedPath))
|
|
11
|
+
return null;
|
|
12
|
+
try {
|
|
13
|
+
return JSON.parse(readFileSync(pausedPath, "utf-8"));
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export function isBootstrapCrashLock(lock) {
|
|
20
|
+
return !!(lock &&
|
|
21
|
+
lock.unitType === "starting" &&
|
|
22
|
+
lock.unitId === "bootstrap");
|
|
23
|
+
}
|
|
24
|
+
export function hasResumableDerivedState(state) {
|
|
25
|
+
return !!(state?.activeMilestone && state.phase !== "complete");
|
|
26
|
+
}
|
|
27
|
+
export async function assessInterruptedSession(basePath) {
|
|
28
|
+
const pausedSession = readPausedSessionMetadata(basePath);
|
|
29
|
+
const worktreeExists = pausedSession?.worktreePath
|
|
30
|
+
? existsSync(pausedSession.worktreePath)
|
|
31
|
+
: false;
|
|
32
|
+
const assessmentBasePath = worktreeExists ? pausedSession.worktreePath : basePath;
|
|
33
|
+
const rawLock = readCrashLock(basePath);
|
|
34
|
+
const lock = rawLock && rawLock.pid !== process.pid ? rawLock : null;
|
|
35
|
+
if (!lock && !pausedSession) {
|
|
36
|
+
return {
|
|
37
|
+
classification: "none",
|
|
38
|
+
lock: null,
|
|
39
|
+
pausedSession: null,
|
|
40
|
+
state: null,
|
|
41
|
+
recovery: null,
|
|
42
|
+
recoveryPrompt: null,
|
|
43
|
+
recoveryToolCallCount: 0,
|
|
44
|
+
artifactSatisfied: false,
|
|
45
|
+
hasResumableDiskState: false,
|
|
46
|
+
isBootstrapCrash: false,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
if (lock && isLockProcessAlive(lock)) {
|
|
50
|
+
return {
|
|
51
|
+
classification: "running",
|
|
52
|
+
lock,
|
|
53
|
+
pausedSession,
|
|
54
|
+
state: null,
|
|
55
|
+
recovery: null,
|
|
56
|
+
recoveryPrompt: null,
|
|
57
|
+
recoveryToolCallCount: 0,
|
|
58
|
+
artifactSatisfied: false,
|
|
59
|
+
hasResumableDiskState: false,
|
|
60
|
+
isBootstrapCrash: false,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
const isBootstrapCrash = isBootstrapCrashLock(lock);
|
|
64
|
+
const state = await deriveState(assessmentBasePath);
|
|
65
|
+
const hasResumableDiskState = hasResumableDerivedState(state);
|
|
66
|
+
const artifactSatisfied = !!(lock &&
|
|
67
|
+
!isBootstrapCrash &&
|
|
68
|
+
verifyExpectedArtifact(lock.unitType, lock.unitId, assessmentBasePath));
|
|
69
|
+
let recovery = null;
|
|
70
|
+
if (lock && !isBootstrapCrash && !artifactSatisfied) {
|
|
71
|
+
recovery = synthesizeCrashRecovery(assessmentBasePath, lock.unitType, lock.unitId, lock.sessionFile, join(gsdRoot(assessmentBasePath), "activity"));
|
|
72
|
+
}
|
|
73
|
+
const recoveryToolCallCount = recovery?.trace.toolCallCount ?? 0;
|
|
74
|
+
const recoveryPrompt = recoveryToolCallCount > 0 ? recovery.prompt : null;
|
|
75
|
+
if (isBootstrapCrash) {
|
|
76
|
+
return {
|
|
77
|
+
classification: pausedSession ? "recoverable" : "stale",
|
|
78
|
+
lock,
|
|
79
|
+
pausedSession,
|
|
80
|
+
state,
|
|
81
|
+
recovery,
|
|
82
|
+
recoveryPrompt,
|
|
83
|
+
recoveryToolCallCount,
|
|
84
|
+
artifactSatisfied,
|
|
85
|
+
hasResumableDiskState,
|
|
86
|
+
isBootstrapCrash: true,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
if (!hasResumableDiskState && pausedSession && !lock && recoveryToolCallCount === 0) {
|
|
90
|
+
return {
|
|
91
|
+
classification: "stale",
|
|
92
|
+
lock,
|
|
93
|
+
pausedSession,
|
|
94
|
+
state,
|
|
95
|
+
recovery,
|
|
96
|
+
recoveryPrompt,
|
|
97
|
+
recoveryToolCallCount,
|
|
98
|
+
artifactSatisfied,
|
|
99
|
+
hasResumableDiskState,
|
|
100
|
+
isBootstrapCrash: false,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
if (lock && artifactSatisfied && !hasResumableDiskState && recoveryToolCallCount === 0) {
|
|
104
|
+
return {
|
|
105
|
+
classification: "stale",
|
|
106
|
+
lock,
|
|
107
|
+
pausedSession,
|
|
108
|
+
state,
|
|
109
|
+
recovery,
|
|
110
|
+
recoveryPrompt,
|
|
111
|
+
recoveryToolCallCount,
|
|
112
|
+
artifactSatisfied,
|
|
113
|
+
hasResumableDiskState,
|
|
114
|
+
isBootstrapCrash: false,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
const hasStrongRecoverySignal = hasResumableDiskState || recoveryToolCallCount > 0;
|
|
118
|
+
return {
|
|
119
|
+
classification: hasStrongRecoverySignal ? "recoverable" : "stale",
|
|
120
|
+
lock,
|
|
121
|
+
pausedSession,
|
|
122
|
+
state,
|
|
123
|
+
recovery,
|
|
124
|
+
recoveryPrompt,
|
|
125
|
+
recoveryToolCallCount,
|
|
126
|
+
artifactSatisfied,
|
|
127
|
+
hasResumableDiskState,
|
|
128
|
+
isBootstrapCrash: false,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
export function formatInterruptedSessionSummary(assessment) {
|
|
132
|
+
if (assessment.lock)
|
|
133
|
+
return [formatCrashInfo(assessment.lock)];
|
|
134
|
+
if (assessment.pausedSession?.milestoneId) {
|
|
135
|
+
return [
|
|
136
|
+
`Paused auto-mode session detected for ${assessment.pausedSession.milestoneId}.`,
|
|
137
|
+
];
|
|
138
|
+
}
|
|
139
|
+
return ["Paused auto-mode session detected."];
|
|
140
|
+
}
|
|
141
|
+
export function formatInterruptedSessionRunningMessage(assessment) {
|
|
142
|
+
const pid = assessment.lock?.pid;
|
|
143
|
+
return pid
|
|
144
|
+
? `Another auto-mode session (PID ${pid}) appears to be running.\nStop it with \`kill ${pid}\` before starting a new session.`
|
|
145
|
+
: "Another auto-mode session appears to be running.";
|
|
146
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { assertSafeDirectory } from "./validate-directory.js";
|
|
5
|
+
import { detectWorkflowMcpLaunchConfig } from "./workflow-mcp.js";
|
|
6
|
+
export const GSD_WORKFLOW_MCP_SERVER_NAME = "gsd-workflow";
|
|
7
|
+
export function resolveBundledGsdCliPath(env = process.env) {
|
|
8
|
+
const explicit = env.GSD_CLI_PATH?.trim() || env.GSD_BIN_PATH?.trim();
|
|
9
|
+
if (explicit)
|
|
10
|
+
return explicit;
|
|
11
|
+
const candidates = [
|
|
12
|
+
resolve(fileURLToPath(new URL("../../../../scripts/dev-cli.js", import.meta.url))),
|
|
13
|
+
resolve(fileURLToPath(new URL("../../../../dist/loader.js", import.meta.url))),
|
|
14
|
+
resolve(fileURLToPath(new URL("../../../loader.js", import.meta.url))),
|
|
15
|
+
];
|
|
16
|
+
for (const candidate of candidates) {
|
|
17
|
+
if (existsSync(candidate))
|
|
18
|
+
return candidate;
|
|
19
|
+
}
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
export function buildProjectWorkflowMcpServerConfig(projectRoot, env = process.env) {
|
|
23
|
+
const resolvedProjectRoot = resolve(projectRoot);
|
|
24
|
+
const gsdCliPath = resolveBundledGsdCliPath(env);
|
|
25
|
+
const launch = detectWorkflowMcpLaunchConfig(resolvedProjectRoot, {
|
|
26
|
+
...env,
|
|
27
|
+
...(gsdCliPath ? { GSD_CLI_PATH: gsdCliPath, GSD_BIN_PATH: gsdCliPath } : {}),
|
|
28
|
+
});
|
|
29
|
+
if (!launch) {
|
|
30
|
+
throw new Error("Unable to resolve the GSD workflow MCP server. Build this checkout or install gsd-mcp-server on PATH.");
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
command: launch.command,
|
|
34
|
+
...(launch.args && launch.args.length > 0 ? { args: launch.args } : {}),
|
|
35
|
+
...(launch.cwd ? { cwd: launch.cwd } : {}),
|
|
36
|
+
...(launch.env ? { env: launch.env } : {}),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function readExistingConfig(configPath) {
|
|
40
|
+
if (!existsSync(configPath))
|
|
41
|
+
return {};
|
|
42
|
+
const raw = readFileSync(configPath, "utf-8");
|
|
43
|
+
try {
|
|
44
|
+
const parsed = JSON.parse(raw);
|
|
45
|
+
return parsed && typeof parsed === "object" ? parsed : {};
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
throw new Error(`Failed to parse ${configPath}: ${err instanceof Error ? err.message : String(err)}`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
export function ensureProjectWorkflowMcpConfig(projectRoot, env = process.env) {
|
|
52
|
+
const resolvedProjectRoot = resolve(projectRoot);
|
|
53
|
+
assertSafeDirectory(resolvedProjectRoot);
|
|
54
|
+
const configPath = resolve(resolvedProjectRoot, ".mcp.json");
|
|
55
|
+
const existing = readExistingConfig(configPath);
|
|
56
|
+
const desiredServer = buildProjectWorkflowMcpServerConfig(resolvedProjectRoot, env);
|
|
57
|
+
const previousServers = existing.mcpServers ?? {};
|
|
58
|
+
const nextServers = {
|
|
59
|
+
...previousServers,
|
|
60
|
+
[GSD_WORKFLOW_MCP_SERVER_NAME]: desiredServer,
|
|
61
|
+
};
|
|
62
|
+
const alreadyPresent = existsSync(configPath);
|
|
63
|
+
const unchanged = JSON.stringify(previousServers[GSD_WORKFLOW_MCP_SERVER_NAME] ?? null)
|
|
64
|
+
=== JSON.stringify(desiredServer)
|
|
65
|
+
&& existing.mcpServers !== undefined;
|
|
66
|
+
if (unchanged) {
|
|
67
|
+
return {
|
|
68
|
+
configPath,
|
|
69
|
+
serverName: GSD_WORKFLOW_MCP_SERVER_NAME,
|
|
70
|
+
status: "unchanged",
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
const nextConfig = {
|
|
74
|
+
...existing,
|
|
75
|
+
mcpServers: nextServers,
|
|
76
|
+
};
|
|
77
|
+
writeFileSync(configPath, `${JSON.stringify(nextConfig, null, 2)}\n`, "utf-8");
|
|
78
|
+
return {
|
|
79
|
+
configPath,
|
|
80
|
+
serverName: GSD_WORKFLOW_MCP_SERVER_NAME,
|
|
81
|
+
status: alreadyPresent ? "updated" : "created",
|
|
82
|
+
};
|
|
83
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { execSync } from "node:child_process";
|
|
2
2
|
import { existsSync } from "node:fs";
|
|
3
|
-
import { resolve } from "node:path";
|
|
3
|
+
import { dirname, resolve } from "node:path";
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
5
|
const MCP_WORKFLOW_TOOL_SURFACE = new Set([
|
|
6
6
|
"gsd_complete_milestone",
|
|
@@ -48,9 +48,30 @@ function lookupCommand(command, platform = process.platform) {
|
|
|
48
48
|
return null;
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
|
+
function findWorkflowCliFromAncestorPath(startPath) {
|
|
52
|
+
let current = resolve(startPath);
|
|
53
|
+
while (true) {
|
|
54
|
+
const candidate = resolve(current, "packages", "mcp-server", "dist", "cli.js");
|
|
55
|
+
if (existsSync(candidate))
|
|
56
|
+
return candidate;
|
|
57
|
+
const parent = dirname(current);
|
|
58
|
+
if (parent === current)
|
|
59
|
+
break;
|
|
60
|
+
current = parent;
|
|
61
|
+
}
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
51
64
|
function getBundledWorkflowMcpCliPath(env) {
|
|
52
|
-
|
|
53
|
-
|
|
65
|
+
const envAnchors = [
|
|
66
|
+
env.GSD_BIN_PATH?.trim(),
|
|
67
|
+
env.GSD_CLI_PATH?.trim(),
|
|
68
|
+
env.GSD_WORKFLOW_PATH?.trim(),
|
|
69
|
+
].filter((value) => typeof value === "string" && value.length > 0);
|
|
70
|
+
for (const anchor of envAnchors) {
|
|
71
|
+
const candidate = findWorkflowCliFromAncestorPath(anchor);
|
|
72
|
+
if (candidate)
|
|
73
|
+
return candidate;
|
|
74
|
+
}
|
|
54
75
|
const candidates = [
|
|
55
76
|
resolve(fileURLToPath(new URL("../../../../packages/mcp-server/dist/cli.js", import.meta.url))),
|
|
56
77
|
resolve(fileURLToPath(new URL("../../../../../packages/mcp-server/dist/cli.js", import.meta.url))),
|
|
@@ -61,6 +82,42 @@ function getBundledWorkflowMcpCliPath(env) {
|
|
|
61
82
|
}
|
|
62
83
|
return null;
|
|
63
84
|
}
|
|
85
|
+
function getBundledWorkflowExecutorModulePath() {
|
|
86
|
+
const candidates = [
|
|
87
|
+
resolve(fileURLToPath(new URL("../../../../dist/resources/extensions/gsd/tools/workflow-tool-executors.js", import.meta.url))),
|
|
88
|
+
resolve(fileURLToPath(new URL("./tools/workflow-tool-executors.js", import.meta.url))),
|
|
89
|
+
resolve(fileURLToPath(new URL("./tools/workflow-tool-executors.ts", import.meta.url))),
|
|
90
|
+
];
|
|
91
|
+
for (const candidate of candidates) {
|
|
92
|
+
if (existsSync(candidate))
|
|
93
|
+
return candidate;
|
|
94
|
+
}
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
function getBundledWorkflowWriteGateModulePath() {
|
|
98
|
+
const candidates = [
|
|
99
|
+
resolve(fileURLToPath(new URL("../../../../dist/resources/extensions/gsd/bootstrap/write-gate.js", import.meta.url))),
|
|
100
|
+
resolve(fileURLToPath(new URL("./bootstrap/write-gate.js", import.meta.url))),
|
|
101
|
+
resolve(fileURLToPath(new URL("./bootstrap/write-gate.ts", import.meta.url))),
|
|
102
|
+
];
|
|
103
|
+
for (const candidate of candidates) {
|
|
104
|
+
if (existsSync(candidate))
|
|
105
|
+
return candidate;
|
|
106
|
+
}
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
function buildWorkflowLaunchEnv(projectRoot, gsdCliPath, explicitEnv) {
|
|
110
|
+
const executorModulePath = getBundledWorkflowExecutorModulePath();
|
|
111
|
+
const writeGateModulePath = getBundledWorkflowWriteGateModulePath();
|
|
112
|
+
return {
|
|
113
|
+
...(explicitEnv ?? {}),
|
|
114
|
+
...(gsdCliPath ? { GSD_CLI_PATH: gsdCliPath } : {}),
|
|
115
|
+
...(executorModulePath ? { GSD_WORKFLOW_EXECUTORS_MODULE: executorModulePath } : {}),
|
|
116
|
+
...(writeGateModulePath ? { GSD_WORKFLOW_WRITE_GATE_MODULE: writeGateModulePath } : {}),
|
|
117
|
+
GSD_PERSIST_WRITE_GATE_STATE: "1",
|
|
118
|
+
GSD_WORKFLOW_PROJECT_ROOT: projectRoot,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
64
121
|
export function detectWorkflowMcpLaunchConfig(projectRoot = process.cwd(), env = process.env) {
|
|
65
122
|
const name = env.GSD_WORKFLOW_MCP_NAME?.trim() || "gsd-workflow";
|
|
66
123
|
const explicitCommand = env.GSD_WORKFLOW_MCP_COMMAND?.trim();
|
|
@@ -75,12 +132,7 @@ export function detectWorkflowMcpLaunchConfig(projectRoot = process.cwd(), env =
|
|
|
75
132
|
projectRoot;
|
|
76
133
|
const resolvedWorkflowProjectRoot = resolve(workflowProjectRoot);
|
|
77
134
|
if (explicitCommand) {
|
|
78
|
-
const launchEnv =
|
|
79
|
-
...(explicitEnv ?? {}),
|
|
80
|
-
...(gsdCliPath ? { GSD_CLI_PATH: gsdCliPath } : {}),
|
|
81
|
-
GSD_PERSIST_WRITE_GATE_STATE: "1",
|
|
82
|
-
GSD_WORKFLOW_PROJECT_ROOT: resolve(workflowProjectRoot),
|
|
83
|
-
};
|
|
135
|
+
const launchEnv = buildWorkflowLaunchEnv(resolve(workflowProjectRoot), gsdCliPath, explicitEnv);
|
|
84
136
|
return {
|
|
85
137
|
name,
|
|
86
138
|
command: explicitCommand,
|
|
@@ -96,11 +148,7 @@ export function detectWorkflowMcpLaunchConfig(projectRoot = process.cwd(), env =
|
|
|
96
148
|
command: process.execPath,
|
|
97
149
|
args: [distCli],
|
|
98
150
|
cwd: resolvedWorkflowProjectRoot,
|
|
99
|
-
env:
|
|
100
|
-
...(gsdCliPath ? { GSD_CLI_PATH: gsdCliPath } : {}),
|
|
101
|
-
GSD_PERSIST_WRITE_GATE_STATE: "1",
|
|
102
|
-
GSD_WORKFLOW_PROJECT_ROOT: resolvedWorkflowProjectRoot,
|
|
103
|
-
},
|
|
151
|
+
env: buildWorkflowLaunchEnv(resolvedWorkflowProjectRoot, gsdCliPath),
|
|
104
152
|
};
|
|
105
153
|
}
|
|
106
154
|
const bundledCli = getBundledWorkflowMcpCliPath(env);
|
|
@@ -110,11 +158,7 @@ export function detectWorkflowMcpLaunchConfig(projectRoot = process.cwd(), env =
|
|
|
110
158
|
command: process.execPath,
|
|
111
159
|
args: [bundledCli],
|
|
112
160
|
cwd: resolvedWorkflowProjectRoot,
|
|
113
|
-
env:
|
|
114
|
-
...(gsdCliPath ? { GSD_CLI_PATH: gsdCliPath } : {}),
|
|
115
|
-
GSD_PERSIST_WRITE_GATE_STATE: "1",
|
|
116
|
-
GSD_WORKFLOW_PROJECT_ROOT: resolvedWorkflowProjectRoot,
|
|
117
|
-
},
|
|
161
|
+
env: buildWorkflowLaunchEnv(resolvedWorkflowProjectRoot, gsdCliPath),
|
|
118
162
|
};
|
|
119
163
|
}
|
|
120
164
|
const binPath = lookupCommand("gsd-mcp-server");
|
|
@@ -122,11 +166,7 @@ export function detectWorkflowMcpLaunchConfig(projectRoot = process.cwd(), env =
|
|
|
122
166
|
return {
|
|
123
167
|
name,
|
|
124
168
|
command: binPath,
|
|
125
|
-
env:
|
|
126
|
-
...(gsdCliPath ? { GSD_CLI_PATH: gsdCliPath } : {}),
|
|
127
|
-
GSD_PERSIST_WRITE_GATE_STATE: "1",
|
|
128
|
-
GSD_WORKFLOW_PROJECT_ROOT: resolvedWorkflowProjectRoot,
|
|
129
|
-
},
|
|
169
|
+
env: buildWorkflowLaunchEnv(resolvedWorkflowProjectRoot, gsdCliPath),
|
|
130
170
|
};
|
|
131
171
|
}
|
|
132
172
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
yh2vT27L1E6PChb_C1N_F
|
|
@@ -1,47 +1,47 @@
|
|
|
1
1
|
{
|
|
2
2
|
"/_not-found/page": "/_not-found",
|
|
3
3
|
"/_global-error/page": "/_global-error",
|
|
4
|
-
"/api/bridge-terminal/resize/route": "/api/bridge-terminal/resize",
|
|
5
4
|
"/api/boot/route": "/api/boot",
|
|
6
5
|
"/api/bridge-terminal/input/route": "/api/bridge-terminal/input",
|
|
7
|
-
"/api/bridge-terminal/
|
|
8
|
-
"/api/dev-mode/route": "/api/dev-mode",
|
|
6
|
+
"/api/bridge-terminal/resize/route": "/api/bridge-terminal/resize",
|
|
9
7
|
"/api/cleanup/route": "/api/cleanup",
|
|
10
|
-
"/api/doctor/route": "/api/doctor",
|
|
11
8
|
"/api/captures/route": "/api/captures",
|
|
9
|
+
"/api/dev-mode/route": "/api/dev-mode",
|
|
10
|
+
"/api/browse-directories/route": "/api/browse-directories",
|
|
11
|
+
"/api/doctor/route": "/api/doctor",
|
|
12
12
|
"/api/export-data/route": "/api/export-data",
|
|
13
13
|
"/api/forensics/route": "/api/forensics",
|
|
14
|
+
"/api/experimental/route": "/api/experimental",
|
|
14
15
|
"/api/git/route": "/api/git",
|
|
15
16
|
"/api/history/route": "/api/history",
|
|
16
17
|
"/api/hooks/route": "/api/hooks",
|
|
17
|
-
"/api/experimental/route": "/api/experimental",
|
|
18
18
|
"/api/inspect/route": "/api/inspect",
|
|
19
|
+
"/api/bridge-terminal/stream/route": "/api/bridge-terminal/stream",
|
|
19
20
|
"/api/knowledge/route": "/api/knowledge",
|
|
20
21
|
"/api/live-state/route": "/api/live-state",
|
|
21
22
|
"/api/notifications/route": "/api/notifications",
|
|
22
|
-
"/api/browse-directories/route": "/api/browse-directories",
|
|
23
23
|
"/api/preferences/route": "/api/preferences",
|
|
24
|
-
"/api/
|
|
24
|
+
"/api/files/route": "/api/files",
|
|
25
25
|
"/api/onboarding/route": "/api/onboarding",
|
|
26
|
-
"/api/
|
|
26
|
+
"/api/recovery/route": "/api/recovery",
|
|
27
27
|
"/api/projects/route": "/api/projects",
|
|
28
|
-
"/api/
|
|
29
|
-
"/api/session/
|
|
28
|
+
"/api/session/browser/route": "/api/session/browser",
|
|
29
|
+
"/api/session/events/route": "/api/session/events",
|
|
30
30
|
"/api/settings-data/route": "/api/settings-data",
|
|
31
|
+
"/api/session/command/route": "/api/session/command",
|
|
31
32
|
"/api/shutdown/route": "/api/shutdown",
|
|
32
33
|
"/api/session/manage/route": "/api/session/manage",
|
|
33
34
|
"/api/skill-health/route": "/api/skill-health",
|
|
34
|
-
"/api/session/events/route": "/api/session/events",
|
|
35
35
|
"/api/steer/route": "/api/steer",
|
|
36
|
-
"/api/terminal/input/route": "/api/terminal/input",
|
|
37
36
|
"/api/switch-root/route": "/api/switch-root",
|
|
38
|
-
"/api/terminal/
|
|
39
|
-
"/api/terminal/stream/route": "/api/terminal/stream",
|
|
37
|
+
"/api/terminal/input/route": "/api/terminal/input",
|
|
40
38
|
"/api/terminal/sessions/route": "/api/terminal/sessions",
|
|
41
|
-
"/api/
|
|
42
|
-
"/api/terminal/upload/route": "/api/terminal/upload",
|
|
39
|
+
"/api/terminal/resize/route": "/api/terminal/resize",
|
|
43
40
|
"/api/remote-questions/route": "/api/remote-questions",
|
|
41
|
+
"/api/terminal/upload/route": "/api/terminal/upload",
|
|
44
42
|
"/api/visualizer/route": "/api/visualizer",
|
|
43
|
+
"/api/undo/route": "/api/undo",
|
|
45
44
|
"/api/update/route": "/api/update",
|
|
45
|
+
"/api/terminal/stream/route": "/api/terminal/stream",
|
|
46
46
|
"/page": "/"
|
|
47
47
|
}
|
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
],
|
|
5
5
|
"devFiles": [],
|
|
6
6
|
"lowPriorityFiles": [
|
|
7
|
-
"static/
|
|
8
|
-
"static/
|
|
7
|
+
"static/yh2vT27L1E6PChb_C1N_F/_buildManifest.js",
|
|
8
|
+
"static/yh2vT27L1E6PChb_C1N_F/_ssgManifest.js"
|
|
9
9
|
],
|
|
10
10
|
"rootMainFiles": [
|
|
11
|
-
"static/chunks/webpack-
|
|
11
|
+
"static/chunks/webpack-6e4d7e9a4f57bed4.js",
|
|
12
12
|
"static/chunks/4bd1b696-e356ca5ba0218e27.js",
|
|
13
13
|
"static/chunks/3794-42fdce068d44fa4f.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": "2d37a349be50ac937c61a539f8a27f2e",
|
|
82
|
+
"previewModeSigningKey": "7cbe27818262dc45964f3e579507b977175f4587a2991eb4af84d469ca44b520",
|
|
83
|
+
"previewModeEncryptionKey": "bf90146580294c958fc137e154442ee89e64e08c1bc2dc318f88db074f4eca45"
|
|
84
84
|
}
|
|
85
85
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"app/page.tsx -> @/components/gsd/app-shell": {
|
|
3
|
-
"id":
|
|
3
|
+
"id": 62826,
|
|
4
4
|
"files": [
|
|
5
5
|
"static/css/659eccb5db697b76.css",
|
|
6
6
|
"static/chunks/363642f4.cf8b455e0d94b478.js",
|
|
7
7
|
"static/chunks/4986-c2fc8845ce785303.js",
|
|
8
8
|
"static/chunks/2008.71ee9230ad78df21.js",
|
|
9
|
-
"static/chunks/
|
|
9
|
+
"static/chunks/2826.821e01b07d92e948.js"
|
|
10
10
|
]
|
|
11
11
|
},
|
|
12
12
|
"components/gsd/chat-mode.tsx -> react-markdown": {
|
package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/_global-error/page"]={"moduleLoading":{"prefix":"/_next/"},"ssrModuleMapping":{"21942":{"*":{"id":"18550","name":"*","chunks":[],"async":false}},"27123":{"*":{"id":"81921","name":"*","chunks":[],"async":false}},"57121":{"*":{"id":"35421","name":"*","chunks":[],"async":false}},"61304":{"*":{"id":"60440","name":"*","chunks":[],"async":false}},"61549":{"*":{"id":"99703","name":"*","chunks":[],"async":false}},"64777":{"*":{"id":"82265","name":"*","chunks":[],"async":false}},"66919":{"*":{"id":"65720","name":"*","chunks":[],"async":false}},"74581":{"*":{"id":"61335","name":"*","chunks":[],"async":false}},"78616":{"*":{"id":"84342","name":"*","chunks":[],"async":false}},"86869":{"*":{"id":"74661","name":"*","chunks":[],"async":false}},"90484":{"*":{"id":"70664","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/__w/gsd-2/gsd-2/web/node_modules/next/dist/client/components/builtin/global-error.js":{"id":27123,"name":"*","chunks":[],"async":false},"/__w/gsd-2/gsd-2/web/node_modules/next/dist/esm/client/components/builtin/global-error.js":{"id":27123,"name":"*","chunks":[],"async":false},"/__w/gsd-2/gsd-2/web/node_modules/next/dist/client/components/client-page.js":{"id":61304,"name":"*","chunks":[],"async":false},"/__w/gsd-2/gsd-2/web/node_modules/next/dist/esm/client/components/client-page.js":{"id":61304,"name":"*","chunks":[],"async":false},"/__w/gsd-2/gsd-2/web/node_modules/next/dist/client/components/client-segment.js":{"id":78616,"name":"*","chunks":[],"async":false},"/__w/gsd-2/gsd-2/web/node_modules/next/dist/esm/client/components/client-segment.js":{"id":78616,"name":"*","chunks":[],"async":false},"/__w/gsd-2/gsd-2/web/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js":{"id":64777,"name":"*","chunks":[],"async":false},"/__w/gsd-2/gsd-2/web/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":64777,"name":"*","chunks":[],"async":false},"/__w/gsd-2/gsd-2/web/node_modules/next/dist/client/components/layout-router.js":{"id":57121,"name":"*","chunks":[],"async":false},"/__w/gsd-2/gsd-2/web/node_modules/next/dist/esm/client/components/layout-router.js":{"id":57121,"name":"*","chunks":[],"async":false},"/__w/gsd-2/gsd-2/web/node_modules/next/dist/client/components/render-from-template-context.js":{"id":74581,"name":"*","chunks":[],"async":false},"/__w/gsd-2/gsd-2/web/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":74581,"name":"*","chunks":[],"async":false},"/__w/gsd-2/gsd-2/web/node_modules/next/dist/lib/framework/boundary-components.js":{"id":90484,"name":"*","chunks":[],"async":false},"/__w/gsd-2/gsd-2/web/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":90484,"name":"*","chunks":[],"async":false},"/__w/gsd-2/gsd-2/web/node_modules/next/dist/lib/metadata/generate/icon-mark.js":{"id":86869,"name":"*","chunks":[],"async":false},"/__w/gsd-2/gsd-2/web/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":86869,"name":"*","chunks":[],"async":false},"/__w/gsd-2/gsd-2/web/components/theme-provider.tsx":{"id":21942,"name":"*","chunks":["4986","static/chunks/4986-c2fc8845ce785303.js","7177","static/chunks/app/layout-a16c7a7ecdf0c2cf.js"],"async":false},"/__w/gsd-2/gsd-2/web/components/ui/sonner.tsx":{"id":61549,"name":"*","chunks":["4986","static/chunks/4986-c2fc8845ce785303.js","7177","static/chunks/app/layout-a16c7a7ecdf0c2cf.js"],"async":false},"/__w/gsd-2/gsd-2/web/node_modules/next/font/google/target.css?{\"path\":\"app/layout.tsx\",\"import\":\"Geist\",\"arguments\":[{\"subsets\":[\"latin\"],\"variable\":\"--font-geist-sans\"}],\"variableName\":\"geistSans\"}":{"id":85048,"name":"*","chunks":["4986","static/chunks/4986-c2fc8845ce785303.js","7177","static/chunks/app/layout-a16c7a7ecdf0c2cf.js"],"async":false},"/__w/gsd-2/gsd-2/web/node_modules/next/font/google/target.css?{\"path\":\"app/layout.tsx\",\"import\":\"Geist_Mono\",\"arguments\":[{\"subsets\":[\"latin\"],\"variable\":\"--font-geist-mono\"}],\"variableName\":\"geistMono\"}":{"id":35696,"name":"*","chunks":["4986","static/chunks/4986-c2fc8845ce785303.js","7177","static/chunks/app/layout-a16c7a7ecdf0c2cf.js"],"async":false},"/__w/gsd-2/gsd-2/web/app/globals.css":{"id":66872,"name":"*","chunks":["4986","static/chunks/4986-c2fc8845ce785303.js","7177","static/chunks/app/layout-a16c7a7ecdf0c2cf.js"],"async":false},"/__w/gsd-2/gsd-2/web/app/page.tsx":{"id":66919,"name":"*","chunks":["8974","static/chunks/app/page-
|
|
1
|
+
globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/_global-error/page"]={"moduleLoading":{"prefix":"/_next/"},"ssrModuleMapping":{"21942":{"*":{"id":"18550","name":"*","chunks":[],"async":false}},"27123":{"*":{"id":"81921","name":"*","chunks":[],"async":false}},"57121":{"*":{"id":"35421","name":"*","chunks":[],"async":false}},"61304":{"*":{"id":"60440","name":"*","chunks":[],"async":false}},"61549":{"*":{"id":"99703","name":"*","chunks":[],"async":false}},"64777":{"*":{"id":"82265","name":"*","chunks":[],"async":false}},"66919":{"*":{"id":"65720","name":"*","chunks":[],"async":false}},"74581":{"*":{"id":"61335","name":"*","chunks":[],"async":false}},"78616":{"*":{"id":"84342","name":"*","chunks":[],"async":false}},"86869":{"*":{"id":"74661","name":"*","chunks":[],"async":false}},"90484":{"*":{"id":"70664","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/__w/gsd-2/gsd-2/web/node_modules/next/dist/client/components/builtin/global-error.js":{"id":27123,"name":"*","chunks":[],"async":false},"/__w/gsd-2/gsd-2/web/node_modules/next/dist/esm/client/components/builtin/global-error.js":{"id":27123,"name":"*","chunks":[],"async":false},"/__w/gsd-2/gsd-2/web/node_modules/next/dist/client/components/client-page.js":{"id":61304,"name":"*","chunks":[],"async":false},"/__w/gsd-2/gsd-2/web/node_modules/next/dist/esm/client/components/client-page.js":{"id":61304,"name":"*","chunks":[],"async":false},"/__w/gsd-2/gsd-2/web/node_modules/next/dist/client/components/client-segment.js":{"id":78616,"name":"*","chunks":[],"async":false},"/__w/gsd-2/gsd-2/web/node_modules/next/dist/esm/client/components/client-segment.js":{"id":78616,"name":"*","chunks":[],"async":false},"/__w/gsd-2/gsd-2/web/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js":{"id":64777,"name":"*","chunks":[],"async":false},"/__w/gsd-2/gsd-2/web/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":64777,"name":"*","chunks":[],"async":false},"/__w/gsd-2/gsd-2/web/node_modules/next/dist/client/components/layout-router.js":{"id":57121,"name":"*","chunks":[],"async":false},"/__w/gsd-2/gsd-2/web/node_modules/next/dist/esm/client/components/layout-router.js":{"id":57121,"name":"*","chunks":[],"async":false},"/__w/gsd-2/gsd-2/web/node_modules/next/dist/client/components/render-from-template-context.js":{"id":74581,"name":"*","chunks":[],"async":false},"/__w/gsd-2/gsd-2/web/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":74581,"name":"*","chunks":[],"async":false},"/__w/gsd-2/gsd-2/web/node_modules/next/dist/lib/framework/boundary-components.js":{"id":90484,"name":"*","chunks":[],"async":false},"/__w/gsd-2/gsd-2/web/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":90484,"name":"*","chunks":[],"async":false},"/__w/gsd-2/gsd-2/web/node_modules/next/dist/lib/metadata/generate/icon-mark.js":{"id":86869,"name":"*","chunks":[],"async":false},"/__w/gsd-2/gsd-2/web/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":86869,"name":"*","chunks":[],"async":false},"/__w/gsd-2/gsd-2/web/components/theme-provider.tsx":{"id":21942,"name":"*","chunks":["4986","static/chunks/4986-c2fc8845ce785303.js","7177","static/chunks/app/layout-a16c7a7ecdf0c2cf.js"],"async":false},"/__w/gsd-2/gsd-2/web/components/ui/sonner.tsx":{"id":61549,"name":"*","chunks":["4986","static/chunks/4986-c2fc8845ce785303.js","7177","static/chunks/app/layout-a16c7a7ecdf0c2cf.js"],"async":false},"/__w/gsd-2/gsd-2/web/node_modules/next/font/google/target.css?{\"path\":\"app/layout.tsx\",\"import\":\"Geist\",\"arguments\":[{\"subsets\":[\"latin\"],\"variable\":\"--font-geist-sans\"}],\"variableName\":\"geistSans\"}":{"id":85048,"name":"*","chunks":["4986","static/chunks/4986-c2fc8845ce785303.js","7177","static/chunks/app/layout-a16c7a7ecdf0c2cf.js"],"async":false},"/__w/gsd-2/gsd-2/web/node_modules/next/font/google/target.css?{\"path\":\"app/layout.tsx\",\"import\":\"Geist_Mono\",\"arguments\":[{\"subsets\":[\"latin\"],\"variable\":\"--font-geist-mono\"}],\"variableName\":\"geistMono\"}":{"id":35696,"name":"*","chunks":["4986","static/chunks/4986-c2fc8845ce785303.js","7177","static/chunks/app/layout-a16c7a7ecdf0c2cf.js"],"async":false},"/__w/gsd-2/gsd-2/web/app/globals.css":{"id":66872,"name":"*","chunks":["4986","static/chunks/4986-c2fc8845ce785303.js","7177","static/chunks/app/layout-a16c7a7ecdf0c2cf.js"],"async":false},"/__w/gsd-2/gsd-2/web/app/page.tsx":{"id":66919,"name":"*","chunks":["8974","static/chunks/app/page-f1e30ab6bb269149.js"],"async":false}},"entryCSSFiles":{"/__w/gsd-2/gsd-2/web/":[],"/__w/gsd-2/gsd-2/web/app/layout":[{"inlined":false,"path":"static/css/de70bee13400563f.css"},{"inlined":false,"path":"static/css/f6e8833d46e738d8.css"}],"/__w/gsd-2/gsd-2/web/app/page":[],"/__w/gsd-2/gsd-2/web/app/_global-error/page":[]},"rscModuleMapping":{"21942":{"*":{"id":"9796","name":"*","chunks":[],"async":false}},"27123":{"*":{"id":"95547","name":"*","chunks":[],"async":false}},"57121":{"*":{"id":"98099","name":"*","chunks":[],"async":false}},"61304":{"*":{"id":"15098","name":"*","chunks":[],"async":false}},"61549":{"*":{"id":"85561","name":"*","chunks":[],"async":false}},"64777":{"*":{"id":"33859","name":"*","chunks":[],"async":false}},"66872":{"*":{"id":"82704","name":"*","chunks":[],"async":false}},"66919":{"*":{"id":"99647","name":"*","chunks":[],"async":false}},"74581":{"*":{"id":"16237","name":"*","chunks":[],"async":false}},"78616":{"*":{"id":"47644","name":"*","chunks":[],"async":false}},"86869":{"*":{"id":"36675","name":"*","chunks":[],"async":false}},"90484":{"*":{"id":"98562","name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{}};
|
|
@@ -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-
|
|
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-6e4d7e9a4f57bed4.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,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";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-6e4d7e9a4f57bed4.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\":\"yh2vT27L1E6PChb_C1N_F\"}\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>
|