gsd-pi 2.42.0-dev.97e9e30 → 2.42.0-dev.eedc83f
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 +23 -0
- package/dist/cli.js +15 -1
- package/dist/resource-loader.js +39 -6
- package/dist/resources/extensions/async-jobs/async-bash-tool.js +52 -4
- package/dist/resources/extensions/gsd/auto-prompts.js +1 -1
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +11 -5
- package/dist/resources/extensions/gsd/detection.js +19 -0
- package/dist/resources/extensions/gsd/doctor-checks.js +31 -1
- package/dist/resources/extensions/gsd/doctor-providers.js +10 -0
- package/dist/resources/extensions/gsd/forensics.js +84 -0
- package/dist/resources/extensions/gsd/git-constants.js +1 -0
- package/dist/resources/extensions/gsd/git-service.js +68 -2
- package/dist/resources/extensions/gsd/native-git-bridge.js +1 -0
- package/dist/resources/extensions/gsd/preferences-types.js +1 -0
- package/dist/resources/extensions/gsd/preferences.js +59 -8
- package/dist/resources/extensions/gsd/prompts/forensics.md +12 -5
- package/dist/resources/extensions/gsd/repo-identity.js +46 -5
- package/dist/resources/extensions/gsd/service-tier.js +13 -4
- package/dist/resources/extensions/gsd/session-lock.js +2 -2
- package/dist/resources/extensions/gsd/worktree-resolver.js +2 -2
- package/dist/resources/extensions/mcp-client/index.js +2 -1
- package/dist/resources/extensions/search-the-web/tool-search.js +3 -3
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +12 -12
- package/dist/web/standalone/.next/build-manifest.json +2 -2
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- 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/git/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 +12 -12
- package/dist/web/standalone/.next/server/chunks/229.js +2 -2
- 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-mode.d.ts +2 -0
- package/dist/web-mode.js +40 -4
- package/package.json +1 -1
- package/packages/pi-agent-core/dist/agent.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/agent.js +2 -0
- package/packages/pi-agent-core/dist/agent.js.map +1 -1
- package/packages/pi-agent-core/dist/types.d.ts +6 -0
- package/packages/pi-agent-core/dist/types.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/types.js.map +1 -1
- package/packages/pi-agent-core/src/agent.test.ts +53 -0
- package/packages/pi-agent-core/src/agent.ts +3 -0
- package/packages/pi-agent-core/src/types.ts +6 -0
- package/packages/pi-agent-core/tsconfig.json +1 -1
- package/packages/pi-ai/dist/models.d.ts +5 -3
- package/packages/pi-ai/dist/models.d.ts.map +1 -1
- package/packages/pi-ai/dist/models.generated.d.ts +801 -1468
- package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
- package/packages/pi-ai/dist/models.generated.js +1135 -1588
- package/packages/pi-ai/dist/models.generated.js.map +1 -1
- package/packages/pi-ai/dist/models.js.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/github-copilot.d.ts.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/github-copilot.js +60 -2
- package/packages/pi-ai/dist/utils/oauth/github-copilot.js.map +1 -1
- package/packages/pi-ai/scripts/generate-models.ts +1543 -0
- package/packages/pi-ai/src/models.generated.ts +1140 -1593
- package/packages/pi-ai/src/models.ts +7 -4
- package/packages/pi-ai/src/utils/oauth/github-copilot.ts +74 -2
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js +8 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/auth-storage.d.ts +7 -0
- package/packages/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/auth-storage.js +29 -2
- package/packages/pi-coding-agent/dist/core/auth-storage.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/auth-storage.test.js +60 -0
- package/packages/pi-coding-agent/dist/core/auth-storage.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.js +18 -0
- package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/client.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/client.js +23 -0
- package/packages/pi-coding-agent/dist/core/lsp/client.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry.js +2 -0
- package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/package-manager.d.ts +6 -0
- package/packages/pi-coding-agent/dist/core/package-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/package-manager.js +63 -11
- package/packages/pi-coding-agent/dist/core/package-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/resource-loader.d.ts +9 -0
- package/packages/pi-coding-agent/dist/core/resource-loader.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/resource-loader.js +20 -6
- package/packages/pi-coding-agent/dist/core/resource-loader.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/system-prompt.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/system-prompt.js +6 -5
- package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/extension-editor.js +3 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/extension-editor.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +9 -6
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
- 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 +30 -10
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/pi-coding-agent/src/core/agent-session.ts +7 -1
- package/packages/pi-coding-agent/src/core/auth-storage.test.ts +68 -0
- package/packages/pi-coding-agent/src/core/auth-storage.ts +30 -2
- package/packages/pi-coding-agent/src/core/extensions/loader.ts +18 -0
- package/packages/pi-coding-agent/src/core/lsp/client.ts +29 -0
- package/packages/pi-coding-agent/src/core/model-registry.ts +3 -0
- package/packages/pi-coding-agent/src/core/package-manager.ts +99 -58
- package/packages/pi-coding-agent/src/core/resource-loader.ts +24 -6
- package/packages/pi-coding-agent/src/core/system-prompt.ts +6 -5
- package/packages/pi-coding-agent/src/modes/interactive/components/extension-editor.ts +3 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +10 -6
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +31 -11
- package/src/resources/extensions/async-jobs/async-bash-timeout.test.ts +122 -0
- package/src/resources/extensions/async-jobs/async-bash-tool.ts +40 -4
- package/src/resources/extensions/gsd/auto-prompts.ts +1 -1
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +13 -5
- package/src/resources/extensions/gsd/detection.ts +19 -0
- package/src/resources/extensions/gsd/doctor-checks.ts +32 -1
- package/src/resources/extensions/gsd/doctor-providers.ts +13 -0
- package/src/resources/extensions/gsd/doctor-types.ts +1 -0
- package/src/resources/extensions/gsd/forensics.ts +92 -0
- package/src/resources/extensions/gsd/git-constants.ts +1 -0
- package/src/resources/extensions/gsd/git-service.ts +71 -2
- package/src/resources/extensions/gsd/native-git-bridge.ts +1 -0
- package/src/resources/extensions/gsd/preferences-types.ts +3 -0
- package/src/resources/extensions/gsd/preferences.ts +62 -6
- package/src/resources/extensions/gsd/prompts/forensics.md +12 -5
- package/src/resources/extensions/gsd/repo-identity.ts +48 -5
- package/src/resources/extensions/gsd/service-tier.ts +17 -4
- package/src/resources/extensions/gsd/session-lock.ts +2 -2
- package/src/resources/extensions/gsd/tests/activity-log.test.ts +31 -69
- package/src/resources/extensions/gsd/tests/forensics-dedup.test.ts +48 -0
- package/src/resources/extensions/gsd/tests/forensics-issue-routing.test.ts +43 -0
- package/src/resources/extensions/gsd/tests/git-locale.test.ts +133 -0
- package/src/resources/extensions/gsd/tests/git-service.test.ts +49 -0
- package/src/resources/extensions/gsd/tests/journal.test.ts +82 -127
- package/src/resources/extensions/gsd/tests/manifest-status.test.ts +73 -82
- package/src/resources/extensions/gsd/tests/service-tier.test.ts +30 -1
- package/src/resources/extensions/gsd/tests/symlink-numbered-variants.test.ts +151 -0
- package/src/resources/extensions/gsd/tests/verification-gate.test.ts +156 -263
- package/src/resources/extensions/gsd/tests/worktree-health-dispatch.test.ts +35 -78
- package/src/resources/extensions/gsd/tests/worktree-manager.test.ts +81 -74
- package/src/resources/extensions/gsd/worktree-resolver.ts +2 -2
- package/src/resources/extensions/mcp-client/index.ts +5 -1
- package/src/resources/extensions/search-the-web/tool-search.ts +3 -3
- /package/dist/web/standalone/.next/static/{PXrI5DoWsm7rwAVnEU2rD → JUBX5FUR73jiViQU5a-Cx}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{PXrI5DoWsm7rwAVnEU2rD → JUBX5FUR73jiViQU5a-Cx}/_ssgManifest.js +0 -0
|
@@ -129,14 +129,21 @@ function loadPreferencesFile(path, scope) {
|
|
|
129
129
|
export function parsePreferencesMarkdown(content) {
|
|
130
130
|
// Use indexOf instead of [\s\S]*? regex to avoid backtracking (#468)
|
|
131
131
|
const startMarker = content.startsWith('---\r\n') ? '---\r\n' : '---\n';
|
|
132
|
-
if (
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
132
|
+
if (content.startsWith(startMarker)) {
|
|
133
|
+
const searchStart = startMarker.length;
|
|
134
|
+
const endIdx = content.indexOf('\n---', searchStart);
|
|
135
|
+
if (endIdx === -1)
|
|
136
|
+
return null;
|
|
137
|
+
const block = content.slice(searchStart, endIdx);
|
|
138
|
+
return parseFrontmatterBlock(block.replace(/\r/g, ''));
|
|
139
|
+
}
|
|
140
|
+
// Fallback: heading+list format (e.g. "## Git\n- isolation: none") (#2036)
|
|
141
|
+
// GSD agents may write preferences files without frontmatter delimiters.
|
|
142
|
+
if (/^##\s+\w/m.test(content)) {
|
|
143
|
+
return parseHeadingListFormat(content);
|
|
144
|
+
}
|
|
145
|
+
console.warn("[parsePreferencesMarkdown] preferences.md exists but uses an unrecognized format — skipping.");
|
|
146
|
+
return null;
|
|
140
147
|
}
|
|
141
148
|
function parseFrontmatterBlock(frontmatter) {
|
|
142
149
|
try {
|
|
@@ -151,6 +158,49 @@ function parseFrontmatterBlock(frontmatter) {
|
|
|
151
158
|
return {};
|
|
152
159
|
}
|
|
153
160
|
}
|
|
161
|
+
/**
|
|
162
|
+
* Parse heading+list format into a nested object, then cast to GSDPreferences.
|
|
163
|
+
* Handles markdown like:
|
|
164
|
+
* ## Git
|
|
165
|
+
* - isolation: none
|
|
166
|
+
* - commit_docs: true
|
|
167
|
+
* ## Models
|
|
168
|
+
* - planner: sonnet
|
|
169
|
+
*/
|
|
170
|
+
function parseHeadingListFormat(content) {
|
|
171
|
+
const result = {};
|
|
172
|
+
let currentSection = null;
|
|
173
|
+
for (const rawLine of content.split('\n')) {
|
|
174
|
+
const line = rawLine.replace(/\r$/, '');
|
|
175
|
+
const headingMatch = line.match(/^##\s+(.+)$/);
|
|
176
|
+
if (headingMatch) {
|
|
177
|
+
currentSection = headingMatch[1].trim().toLowerCase().replace(/\s+/g, '_');
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
if (currentSection) {
|
|
181
|
+
const itemMatch = line.match(/^-\s+([^:]+):\s*(.*)$/);
|
|
182
|
+
if (itemMatch) {
|
|
183
|
+
if (!result[currentSection])
|
|
184
|
+
result[currentSection] = {};
|
|
185
|
+
const value = itemMatch[2].trim();
|
|
186
|
+
// Coerce "true"/"false" strings and numbers
|
|
187
|
+
result[currentSection][itemMatch[1].trim()] = value;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
// Convert string values to appropriate types via YAML parser for each section
|
|
192
|
+
const typed = {};
|
|
193
|
+
for (const [section, entries] of Object.entries(result)) {
|
|
194
|
+
const yamlLines = Object.entries(entries).map(([k, v]) => `${k}: ${v}`).join('\n');
|
|
195
|
+
try {
|
|
196
|
+
typed[section] = parseYaml(yamlLines);
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
typed[section] = entries;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return typed;
|
|
203
|
+
}
|
|
154
204
|
// ─── Merging ────────────────────────────────────────────────────────────────
|
|
155
205
|
/**
|
|
156
206
|
* Apply mode defaults as the lowest-priority layer.
|
|
@@ -215,6 +265,7 @@ function mergePreferences(base, override) {
|
|
|
215
265
|
? { ...(base.github ?? {}), ...(override.github ?? {}) }
|
|
216
266
|
: undefined,
|
|
217
267
|
service_tier: override.service_tier ?? base.service_tier,
|
|
268
|
+
forensics_dedup: override.forensics_dedup ?? base.forensics_dedup,
|
|
218
269
|
};
|
|
219
270
|
}
|
|
220
271
|
function mergeStringLists(base, override) {
|
|
@@ -101,11 +101,19 @@ Explain your findings:
|
|
|
101
101
|
- **Code snippet** — the problematic code and what it should do instead
|
|
102
102
|
- **Recovery** — what the user can do right now to get unstuck
|
|
103
103
|
|
|
104
|
+
{{dedupSection}}
|
|
105
|
+
|
|
104
106
|
Then **offer GitHub issue creation**: "Would you like me to create a GitHub issue for this on gsd-build/gsd-2?"
|
|
105
107
|
|
|
106
|
-
|
|
108
|
+
**CRITICAL: The `github_issues` tool ONLY targets the current user's repository — it has no `repo` parameter. You MUST use `gh issue create --repo gsd-build/gsd-2` via the `bash` tool to file on the correct repo. Do NOT use the `github_issues` tool for this.**
|
|
107
109
|
|
|
108
|
-
|
|
110
|
+
If yes, create using the `bash` tool:
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
gh issue create --repo gsd-build/gsd-2 \
|
|
114
|
+
--title "..." \
|
|
115
|
+
--label "bug" --label "auto-generated" \
|
|
116
|
+
--body "$(cat <<'EOF'
|
|
109
117
|
## Problem
|
|
110
118
|
[1-2 sentence summary]
|
|
111
119
|
|
|
@@ -128,11 +136,10 @@ If yes, create using `gh issue create` with this format:
|
|
|
128
136
|
|
|
129
137
|
---
|
|
130
138
|
*Auto-generated by `/gsd forensics`*
|
|
139
|
+
EOF
|
|
140
|
+
)"
|
|
131
141
|
```
|
|
132
142
|
|
|
133
|
-
**Repository:** gsd-build/gsd-2
|
|
134
|
-
**Labels:** bug, auto-generated
|
|
135
|
-
|
|
136
143
|
### Redaction Rules (CRITICAL)
|
|
137
144
|
|
|
138
145
|
Before creating the issue, you MUST:
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { createHash } from "node:crypto";
|
|
9
9
|
import { execFileSync } from "node:child_process";
|
|
10
|
-
import { existsSync, lstatSync, mkdirSync, readFileSync, realpathSync, rmSync, symlinkSync, writeFileSync } from "node:fs";
|
|
10
|
+
import { existsSync, lstatSync, mkdirSync, readdirSync, readFileSync, realpathSync, rmSync, symlinkSync, writeFileSync } from "node:fs";
|
|
11
11
|
import { homedir } from "node:os";
|
|
12
12
|
import { basename, dirname, join, resolve } from "node:path";
|
|
13
13
|
const gsdHome = process.env.GSD_HOME || join(homedir(), ".gsd");
|
|
@@ -247,14 +247,52 @@ export function externalProjectsRoot() {
|
|
|
247
247
|
const base = process.env.GSD_STATE_DIR || gsdHome;
|
|
248
248
|
return join(base, "projects");
|
|
249
249
|
}
|
|
250
|
+
// ─── Numbered Variant Cleanup ────────────────────────────────────────────────
|
|
251
|
+
/**
|
|
252
|
+
* macOS collision pattern: `.gsd 2`, `.gsd 3`, `.gsd 4`, etc.
|
|
253
|
+
*
|
|
254
|
+
* When `symlinkSync` (or Finder) tries to create `.gsd` but a real directory
|
|
255
|
+
* already exists at that path, macOS APFS silently renames the new entry to
|
|
256
|
+
* `.gsd 2`, then `.gsd 3`, and so on. These numbered variants confuse GSD
|
|
257
|
+
* because the canonical `.gsd` path no longer resolves to the external state
|
|
258
|
+
* directory, making tracked planning files appear deleted.
|
|
259
|
+
*
|
|
260
|
+
* This helper scans the project root for entries matching `.gsd <digits>` and
|
|
261
|
+
* removes them. It is called early in `ensureGsdSymlink()` so that the
|
|
262
|
+
* canonical `.gsd` path is always the one in use.
|
|
263
|
+
*/
|
|
264
|
+
const GSD_NUMBERED_VARIANT_RE = /^\.gsd \d+$/;
|
|
265
|
+
export function cleanNumberedGsdVariants(projectPath) {
|
|
266
|
+
const removed = [];
|
|
267
|
+
try {
|
|
268
|
+
const entries = readdirSync(projectPath);
|
|
269
|
+
for (const entry of entries) {
|
|
270
|
+
if (GSD_NUMBERED_VARIANT_RE.test(entry)) {
|
|
271
|
+
const fullPath = join(projectPath, entry);
|
|
272
|
+
try {
|
|
273
|
+
rmSync(fullPath, { recursive: true, force: true });
|
|
274
|
+
removed.push(entry);
|
|
275
|
+
}
|
|
276
|
+
catch {
|
|
277
|
+
// Best-effort: if removal fails (e.g. permissions), continue with next
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
catch {
|
|
283
|
+
// Non-fatal: readdir failure should not block symlink creation
|
|
284
|
+
}
|
|
285
|
+
return removed;
|
|
286
|
+
}
|
|
250
287
|
// ─── Symlink Management ─────────────────────────────────────────────────────
|
|
251
288
|
/**
|
|
252
289
|
* Ensure the `<project>/.gsd` symlink points to the external state directory.
|
|
253
290
|
*
|
|
254
|
-
* 1.
|
|
255
|
-
* 2.
|
|
256
|
-
* 3. If `<project>/.gsd`
|
|
257
|
-
* 4. If `<project>/.gsd` is
|
|
291
|
+
* 1. Clean up any macOS numbered collision variants (`.gsd 2`, `.gsd 3`, etc.)
|
|
292
|
+
* 2. mkdir -p the external dir
|
|
293
|
+
* 3. If `<project>/.gsd` doesn't exist → create symlink
|
|
294
|
+
* 4. If `<project>/.gsd` is already the correct symlink → no-op
|
|
295
|
+
* 5. If `<project>/.gsd` is a real directory → return as-is (migration handles later)
|
|
258
296
|
*
|
|
259
297
|
* Returns the resolved external path.
|
|
260
298
|
*/
|
|
@@ -270,6 +308,9 @@ export function ensureGsdSymlink(projectPath) {
|
|
|
270
308
|
if (localGsdNormalized === gsdHomePath) {
|
|
271
309
|
return localGsd;
|
|
272
310
|
}
|
|
311
|
+
// Clean up macOS numbered collision variants (.gsd 2, .gsd 3, etc.) before
|
|
312
|
+
// any existence checks — otherwise they accumulate and confuse state (#2205).
|
|
313
|
+
cleanNumberedGsdVariants(projectPath);
|
|
273
314
|
// Ensure external directory exists
|
|
274
315
|
mkdirSync(externalPath, { recursive: true });
|
|
275
316
|
// Write repo metadata once so cleanup commands can identify this directory later.
|
|
@@ -11,6 +11,7 @@ import { existsSync, readFileSync } from "node:fs";
|
|
|
11
11
|
import { saveFile } from "./files.js";
|
|
12
12
|
import { getGlobalGSDPreferencesPath, loadEffectiveGSDPreferences, loadGlobalGSDPreferences, } from "./preferences.js";
|
|
13
13
|
import { ensurePreferencesFile, serializePreferencesToFrontmatter } from "./commands-prefs-wizard.js";
|
|
14
|
+
const SERVICE_TIER_SCOPE_NOTE = "Only affects gpt-5.4 models, regardless of provider.";
|
|
14
15
|
// ─── Gating ──────────────────────────────────────────────────────────────────
|
|
15
16
|
/**
|
|
16
17
|
* Returns true when the given model ID supports OpenAI service tiers.
|
|
@@ -37,7 +38,7 @@ export function formatServiceTierStatus(tier) {
|
|
|
37
38
|
" /gsd fast flex Set to flex (0.5x cost, slower)",
|
|
38
39
|
" /gsd fast off Disable service tier",
|
|
39
40
|
"",
|
|
40
|
-
|
|
41
|
+
SERVICE_TIER_SCOPE_NOTE,
|
|
41
42
|
].join("\n");
|
|
42
43
|
}
|
|
43
44
|
const label = tier === "priority" ? "priority (2x cost, faster)" : "flex (0.5x cost, slower)";
|
|
@@ -49,9 +50,14 @@ export function formatServiceTierStatus(tier) {
|
|
|
49
50
|
" /gsd fast flex Set to flex (0.5x cost, slower)",
|
|
50
51
|
" /gsd fast off Disable service tier",
|
|
51
52
|
"",
|
|
52
|
-
|
|
53
|
+
SERVICE_TIER_SCOPE_NOTE,
|
|
53
54
|
].join("\n");
|
|
54
55
|
}
|
|
56
|
+
export function formatServiceTierFooterStatus(tier, modelId) {
|
|
57
|
+
if (!tier || !modelId || !supportsServiceTier(modelId))
|
|
58
|
+
return undefined;
|
|
59
|
+
return tier === "priority" ? "fast: ⚡ priority" : "fast: 💰 flex";
|
|
60
|
+
}
|
|
55
61
|
// ─── Icon Resolution ─────────────────────────────────────────────────────────
|
|
56
62
|
/**
|
|
57
63
|
* Returns the appropriate icon for the active service tier and model.
|
|
@@ -121,17 +127,20 @@ export async function handleFast(args, ctx) {
|
|
|
121
127
|
}
|
|
122
128
|
if (trimmed === "on") {
|
|
123
129
|
await writeGlobalServiceTier(ctx, "priority");
|
|
124
|
-
ctx.ui.
|
|
130
|
+
ctx.ui.setStatus("gsd-fast", formatServiceTierFooterStatus("priority", ctx.model?.id));
|
|
131
|
+
ctx.ui.notify("Service tier set to priority (2x cost, faster responses). Only affects gpt-5.4 models, regardless of provider.", "info");
|
|
125
132
|
return;
|
|
126
133
|
}
|
|
127
134
|
if (trimmed === "off") {
|
|
128
135
|
await writeGlobalServiceTier(ctx, undefined);
|
|
136
|
+
ctx.ui.setStatus("gsd-fast", undefined);
|
|
129
137
|
ctx.ui.notify("Service tier disabled.", "info");
|
|
130
138
|
return;
|
|
131
139
|
}
|
|
132
140
|
if (trimmed === "flex") {
|
|
133
141
|
await writeGlobalServiceTier(ctx, "flex");
|
|
134
|
-
ctx.ui.
|
|
142
|
+
ctx.ui.setStatus("gsd-fast", formatServiceTierFooterStatus("flex", ctx.model?.id));
|
|
143
|
+
ctx.ui.notify("Service tier set to flex (0.5x cost, slower responses). Only affects gpt-5.4 models, regardless of provider.", "info");
|
|
135
144
|
return;
|
|
136
145
|
}
|
|
137
146
|
ctx.ui.notify("Usage: /gsd fast [on|off|flex|status]\n\n on Priority tier (2x cost, faster)\n off Disable service tier\n flex Flex tier (0.5x cost, slower)\n status Show current setting", "warning");
|
|
@@ -199,7 +199,7 @@ export function acquireSessionLock(basePath) {
|
|
|
199
199
|
// during a long LLM call — not a real takeover. Log and continue.
|
|
200
200
|
const elapsed = Date.now() - _lockAcquiredAt;
|
|
201
201
|
if (elapsed < 1_800_000) {
|
|
202
|
-
process.stderr.write(`[gsd] Lock heartbeat
|
|
202
|
+
process.stderr.write(`[gsd] Lock heartbeat caught up after ${Math.round(elapsed / 1000)}s — long LLM call, no action needed.\n`);
|
|
203
203
|
return; // Suppress false positive
|
|
204
204
|
}
|
|
205
205
|
// Past the stale window — check if the lock file still belongs to us before
|
|
@@ -252,7 +252,7 @@ export function acquireSessionLock(basePath) {
|
|
|
252
252
|
// on benign mtime drift (laptop sleep, heavy LLM event loop stalls).
|
|
253
253
|
const elapsed = Date.now() - _lockAcquiredAt;
|
|
254
254
|
if (elapsed < 1_800_000) {
|
|
255
|
-
process.stderr.write(`[gsd] Lock heartbeat
|
|
255
|
+
process.stderr.write(`[gsd] Lock heartbeat caught up after ${Math.round(elapsed / 1000)}s — long LLM call, no action needed.\n`);
|
|
256
256
|
return;
|
|
257
257
|
}
|
|
258
258
|
// Check PID ownership before declaring compromise (#1578)
|
|
@@ -286,9 +286,9 @@ export class WorktreeResolver {
|
|
|
286
286
|
});
|
|
287
287
|
// Surface a clear, actionable error. The worktree and milestone branch are
|
|
288
288
|
// intentionally preserved — nothing has been deleted. The user can retry
|
|
289
|
-
// /complete-milestone or merge manually once the underlying issue is fixed
|
|
289
|
+
// /gsd dispatch complete-milestone or merge manually once the underlying issue is fixed
|
|
290
290
|
// (e.g. checkout to wrong branch, unresolved conflicts). (#1668)
|
|
291
|
-
ctx.notify(`Milestone merge failed: ${msg}. Your worktree and milestone branch are preserved — retry /complete-milestone or merge manually.`, "warning");
|
|
291
|
+
ctx.notify(`Milestone merge failed: ${msg}. Your worktree and milestone branch are preserved — retry /gsd dispatch complete-milestone or merge manually.`, "warning");
|
|
292
292
|
// Clean up stale merge state left by failed squash-merge (#1389)
|
|
293
293
|
try {
|
|
294
294
|
const gitDir = join(originalBase || this.s.basePath, ".git");
|
|
@@ -108,7 +108,8 @@ async function getOrConnect(name, signal) {
|
|
|
108
108
|
});
|
|
109
109
|
}
|
|
110
110
|
else if (config.transport === "http" && config.url) {
|
|
111
|
-
|
|
111
|
+
const resolvedUrl = config.url.replace(/\$\{([^}]+)\}/g, (_, name) => process.env[name] ?? "");
|
|
112
|
+
transport = new StreamableHTTPClientTransport(new URL(resolvedUrl));
|
|
112
113
|
}
|
|
113
114
|
else {
|
|
114
115
|
throw new Error(`Server "${name}" has unsupported transport: ${config.transport}`);
|
|
@@ -259,9 +259,9 @@ export function registerSearchTool(pi) {
|
|
|
259
259
|
// with brief interruptions every MAX_CONSECUTIVE_DUPES+1 calls.
|
|
260
260
|
if (cacheKey === lastSearchKey) {
|
|
261
261
|
consecutiveDupeCount++;
|
|
262
|
-
if (consecutiveDupeCount
|
|
262
|
+
if (consecutiveDupeCount > MAX_CONSECUTIVE_DUPES) {
|
|
263
263
|
return {
|
|
264
|
-
content: [{ type: "text", text: `⚠️ Search loop detected: the query "${params.query}" has been searched ${consecutiveDupeCount
|
|
264
|
+
content: [{ type: "text", text: `⚠️ Search loop detected: the query "${params.query}" has been searched ${consecutiveDupeCount} times consecutively with identical results. The information you need is already in the previous search results above. Stop searching and use those results to proceed with your task.` }],
|
|
265
265
|
isError: true,
|
|
266
266
|
details: { errorKind: "search_loop", error: "Consecutive duplicate search detected" },
|
|
267
267
|
};
|
|
@@ -269,7 +269,7 @@ export function registerSearchTool(pi) {
|
|
|
269
269
|
}
|
|
270
270
|
else {
|
|
271
271
|
lastSearchKey = cacheKey;
|
|
272
|
-
consecutiveDupeCount =
|
|
272
|
+
consecutiveDupeCount = 1;
|
|
273
273
|
}
|
|
274
274
|
const cached = searchCache.get(cacheKey);
|
|
275
275
|
if (cached) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
JUBX5FUR73jiViQU5a-Cx
|
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"/_not-found/page": "/_not-found",
|
|
3
3
|
"/_global-error/page": "/_global-error",
|
|
4
|
-
"/api/bridge-terminal/input/route": "/api/bridge-terminal/input",
|
|
5
4
|
"/api/boot/route": "/api/boot",
|
|
6
5
|
"/api/bridge-terminal/resize/route": "/api/bridge-terminal/resize",
|
|
7
|
-
"/api/
|
|
8
|
-
"/api/doctor/route": "/api/doctor",
|
|
9
|
-
"/api/browse-directories/route": "/api/browse-directories",
|
|
6
|
+
"/api/bridge-terminal/input/route": "/api/bridge-terminal/input",
|
|
10
7
|
"/api/cleanup/route": "/api/cleanup",
|
|
8
|
+
"/api/captures/route": "/api/captures",
|
|
9
|
+
"/api/browse-directories/route": "/api/browse-directories",
|
|
10
|
+
"/api/bridge-terminal/stream/route": "/api/bridge-terminal/stream",
|
|
11
|
+
"/api/doctor/route": "/api/doctor",
|
|
12
|
+
"/api/dev-mode/route": "/api/dev-mode",
|
|
11
13
|
"/api/export-data/route": "/api/export-data",
|
|
12
14
|
"/api/forensics/route": "/api/forensics",
|
|
13
15
|
"/api/git/route": "/api/git",
|
|
14
16
|
"/api/history/route": "/api/history",
|
|
15
|
-
"/api/captures/route": "/api/captures",
|
|
16
17
|
"/api/hooks/route": "/api/hooks",
|
|
17
18
|
"/api/inspect/route": "/api/inspect",
|
|
18
19
|
"/api/knowledge/route": "/api/knowledge",
|
|
@@ -20,25 +21,24 @@
|
|
|
20
21
|
"/api/onboarding/route": "/api/onboarding",
|
|
21
22
|
"/api/preferences/route": "/api/preferences",
|
|
22
23
|
"/api/recovery/route": "/api/recovery",
|
|
24
|
+
"/api/session/browser/route": "/api/session/browser",
|
|
23
25
|
"/api/projects/route": "/api/projects",
|
|
24
|
-
"/api/bridge-terminal/stream/route": "/api/bridge-terminal/stream",
|
|
25
|
-
"/api/session/command/route": "/api/session/command",
|
|
26
26
|
"/api/session/events/route": "/api/session/events",
|
|
27
27
|
"/api/session/manage/route": "/api/session/manage",
|
|
28
|
-
"/api/shutdown/route": "/api/shutdown",
|
|
29
28
|
"/api/settings-data/route": "/api/settings-data",
|
|
30
|
-
"/api/
|
|
29
|
+
"/api/shutdown/route": "/api/shutdown",
|
|
30
|
+
"/api/session/command/route": "/api/session/command",
|
|
31
31
|
"/api/skill-health/route": "/api/skill-health",
|
|
32
32
|
"/api/steer/route": "/api/steer",
|
|
33
|
-
"/api/terminal/input/route": "/api/terminal/input",
|
|
34
33
|
"/api/terminal/resize/route": "/api/terminal/resize",
|
|
34
|
+
"/api/terminal/input/route": "/api/terminal/input",
|
|
35
35
|
"/api/terminal/sessions/route": "/api/terminal/sessions",
|
|
36
|
-
"/api/undo/route": "/api/undo",
|
|
37
36
|
"/api/terminal/stream/route": "/api/terminal/stream",
|
|
38
|
-
"/api/remote-questions/route": "/api/remote-questions",
|
|
39
37
|
"/api/terminal/upload/route": "/api/terminal/upload",
|
|
38
|
+
"/api/undo/route": "/api/undo",
|
|
40
39
|
"/api/update/route": "/api/update",
|
|
41
40
|
"/api/visualizer/route": "/api/visualizer",
|
|
41
|
+
"/api/remote-questions/route": "/api/remote-questions",
|
|
42
42
|
"/api/files/route": "/api/files",
|
|
43
43
|
"/page": "/"
|
|
44
44
|
}
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
],
|
|
5
5
|
"devFiles": [],
|
|
6
6
|
"lowPriorityFiles": [
|
|
7
|
-
"static/
|
|
8
|
-
"static/
|
|
7
|
+
"static/JUBX5FUR73jiViQU5a-Cx/_buildManifest.js",
|
|
8
|
+
"static/JUBX5FUR73jiViQU5a-Cx/_ssgManifest.js"
|
|
9
9
|
],
|
|
10
10
|
"rootMainFiles": [
|
|
11
11
|
"static/chunks/webpack-fa307370fcf9fb2c.js",
|
|
@@ -78,8 +78,8 @@
|
|
|
78
78
|
"dynamicRoutes": {},
|
|
79
79
|
"notFoundRoutes": [],
|
|
80
80
|
"preview": {
|
|
81
|
-
"previewModeId": "
|
|
82
|
-
"previewModeSigningKey": "
|
|
83
|
-
"previewModeEncryptionKey": "
|
|
81
|
+
"previewModeId": "aa931b3054a117e6e3c0ce1b420926ae",
|
|
82
|
+
"previewModeSigningKey": "06ef66b13a30b390666f5b46ed0172a79c6428a31935d74e46135dfeb86df96e",
|
|
83
|
+
"previewModeEncryptionKey": "c518ad9054015901502acc7300cfb776858ec72098ebd3f079638cab2fc6bd7c"
|
|
84
84
|
}
|
|
85
85
|
}
|
|
@@ -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-fa307370fcf9fb2c.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\":\"
|
|
1
|
+
<!DOCTYPE html><!--JUBX5FUR73jiViQU5a_Cx--><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-fa307370fcf9fb2c.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-fa307370fcf9fb2c.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\":\"JUBX5FUR73jiViQU5a-Cx\",\"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":"JUBX5FUR73jiViQU5a-Cx","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":"JUBX5FUR73jiViQU5a-Cx","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":"JUBX5FUR73jiViQU5a-Cx","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":"JUBX5FUR73jiViQU5a-Cx","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":"JUBX5FUR73jiViQU5a-Cx","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":"JUBX5FUR73jiViQU5a-Cx","rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"loading":null,"isPartial":false}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
0:{"buildId":"
|
|
1
|
+
0:{"buildId":"JUBX5FUR73jiViQU5a-Cx","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}
|