gsd-pi 2.41.0-dev.0acbce9 → 2.41.0-dev.3557dc4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli-web-branch.d.ts +6 -0
- package/dist/cli-web-branch.js +17 -0
- package/dist/onboarding.js +2 -1
- package/dist/resources/extensions/gsd/auto/loop.js +9 -1
- package/dist/resources/extensions/gsd/auto/phases.js +26 -8
- package/dist/resources/extensions/gsd/auto-dashboard.js +6 -2
- package/dist/resources/extensions/gsd/auto-dispatch.js +19 -2
- package/dist/resources/extensions/gsd/auto-post-unit.js +7 -0
- package/dist/resources/extensions/gsd/auto-recovery.js +12 -4
- package/dist/resources/extensions/gsd/auto-start.js +8 -3
- package/dist/resources/extensions/gsd/auto-worktree.js +147 -13
- package/dist/resources/extensions/gsd/auto.js +36 -1
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +199 -164
- package/dist/resources/extensions/gsd/bootstrap/journal-tools.js +62 -0
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +2 -0
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +16 -0
- package/dist/resources/extensions/gsd/commands/catalog.js +8 -1
- package/dist/resources/extensions/gsd/commands/handlers/core.js +1 -0
- package/dist/resources/extensions/gsd/commands/handlers/ops.js +5 -0
- package/dist/resources/extensions/gsd/context-store.js +4 -3
- package/dist/resources/extensions/gsd/db-writer.js +5 -2
- package/dist/resources/extensions/gsd/detection.js +1 -1
- package/dist/resources/extensions/gsd/doctor.js +11 -1
- package/dist/resources/extensions/gsd/exit-command.js +12 -2
- package/dist/resources/extensions/gsd/export.js +9 -13
- package/dist/resources/extensions/gsd/extension-manifest.json +2 -2
- package/dist/resources/extensions/gsd/files.js +28 -11
- package/dist/resources/extensions/gsd/forensics.js +10 -3
- package/dist/resources/extensions/gsd/git-service.js +5 -1
- package/dist/resources/extensions/gsd/gsd-db.js +25 -8
- package/dist/resources/extensions/gsd/guided-flow-queue.js +1 -1
- package/dist/resources/extensions/gsd/guided-flow.js +7 -3
- package/dist/resources/extensions/gsd/journal.js +85 -0
- package/dist/resources/extensions/gsd/md-importer.js +5 -0
- package/dist/resources/extensions/gsd/milestone-ids.js +1 -1
- package/dist/resources/extensions/gsd/native-git-bridge.js +2 -2
- package/dist/resources/extensions/gsd/post-unit-hooks.js +24 -412
- package/dist/resources/extensions/gsd/preferences-types.js +1 -0
- package/dist/resources/extensions/gsd/preferences.js +1 -0
- package/dist/resources/extensions/gsd/prompt-loader.js +34 -4
- package/dist/resources/extensions/gsd/prompts/complete-milestone.md +11 -10
- package/dist/resources/extensions/gsd/prompts/discuss-headless.md +2 -2
- package/dist/resources/extensions/gsd/prompts/discuss.md +1 -1
- package/dist/resources/extensions/gsd/prompts/queue.md +1 -1
- package/dist/resources/extensions/gsd/repo-identity.js +46 -2
- package/dist/resources/extensions/gsd/rule-registry.js +489 -0
- package/dist/resources/extensions/gsd/rule-types.js +6 -0
- package/dist/resources/extensions/gsd/service-tier.js +138 -0
- package/dist/resources/extensions/gsd/structured-data-formatter.js +2 -1
- package/dist/resources/extensions/gsd/templates/decisions.md +2 -2
- package/dist/resources/extensions/gsd/workflow-templates.js +13 -1
- package/dist/resources/extensions/gsd/worktree-manager.js +20 -6
- package/dist/resources/extensions/gsd/worktree-resolver.js +19 -2
- package/dist/resources/extensions/subagent/index.js +7 -3
- package/dist/resources/extensions/voice/index.js +4 -4
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +13 -13
- package/dist/web/standalone/.next/build-manifest.json +3 -3
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.html +2 -2
- package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/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 +13 -13
- package/dist/web/standalone/.next/server/chunks/229.js +3 -3
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/dist/web/standalone/.next/server/pages/404.html +1 -1
- package/dist/web/standalone/.next/server/pages/500.html +2 -2
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/dist/web/standalone/.next/static/chunks/4024.c195dc1fdd2adbea.js +9 -0
- package/dist/web/standalone/.next/static/chunks/{webpack-9afaaebf6042a1d7.js → webpack-fa307370fcf9fb2c.js} +1 -1
- package/dist/web-mode.d.ts +2 -0
- package/dist/web-mode.js +29 -7
- package/package.json +1 -1
- package/packages/native/src/__tests__/text.test.mjs +33 -0
- package/packages/pi-coding-agent/dist/core/discovery-cache.test.js +3 -1
- package/packages/pi-coding-agent/dist/core/discovery-cache.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/login-dialog.js +10 -7
- package/packages/pi-coding-agent/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/packages/pi-coding-agent/src/core/discovery-cache.test.ts +4 -2
- package/packages/pi-coding-agent/src/modes/interactive/components/login-dialog.ts +11 -7
- package/src/resources/extensions/gsd/auto/loop-deps.ts +5 -1
- package/src/resources/extensions/gsd/auto/loop.ts +10 -1
- package/src/resources/extensions/gsd/auto/phases.ts +28 -8
- package/src/resources/extensions/gsd/auto/types.ts +4 -0
- package/src/resources/extensions/gsd/auto-dashboard.ts +7 -2
- package/src/resources/extensions/gsd/auto-dispatch.ts +25 -5
- package/src/resources/extensions/gsd/auto-post-unit.ts +8 -0
- package/src/resources/extensions/gsd/auto-recovery.ts +12 -4
- package/src/resources/extensions/gsd/auto-start.ts +8 -3
- package/src/resources/extensions/gsd/auto-worktree.ts +162 -18
- package/src/resources/extensions/gsd/auto.ts +40 -1
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +209 -162
- package/src/resources/extensions/gsd/bootstrap/journal-tools.ts +62 -0
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +2 -0
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +13 -0
- package/src/resources/extensions/gsd/commands/catalog.ts +8 -1
- package/src/resources/extensions/gsd/commands/handlers/core.ts +1 -0
- package/src/resources/extensions/gsd/commands/handlers/ops.ts +5 -0
- package/src/resources/extensions/gsd/context-store.ts +4 -3
- package/src/resources/extensions/gsd/db-writer.ts +6 -2
- package/src/resources/extensions/gsd/detection.ts +1 -1
- package/src/resources/extensions/gsd/doctor.ts +12 -1
- package/src/resources/extensions/gsd/exit-command.ts +14 -2
- package/src/resources/extensions/gsd/export.ts +8 -15
- package/src/resources/extensions/gsd/extension-manifest.json +2 -2
- package/src/resources/extensions/gsd/files.ts +29 -12
- package/src/resources/extensions/gsd/forensics.ts +9 -3
- package/src/resources/extensions/gsd/git-service.ts +5 -4
- package/src/resources/extensions/gsd/gsd-db.ts +37 -8
- package/src/resources/extensions/gsd/guided-flow-queue.ts +1 -1
- package/src/resources/extensions/gsd/guided-flow.ts +7 -3
- package/src/resources/extensions/gsd/journal.ts +134 -0
- package/src/resources/extensions/gsd/md-importer.ts +6 -0
- package/src/resources/extensions/gsd/milestone-ids.ts +1 -1
- package/src/resources/extensions/gsd/native-git-bridge.ts +2 -2
- package/src/resources/extensions/gsd/post-unit-hooks.ts +24 -462
- package/src/resources/extensions/gsd/preferences-types.ts +3 -0
- package/src/resources/extensions/gsd/preferences.ts +1 -0
- package/src/resources/extensions/gsd/prompt-loader.ts +35 -4
- package/src/resources/extensions/gsd/prompts/complete-milestone.md +11 -10
- package/src/resources/extensions/gsd/prompts/discuss-headless.md +2 -2
- package/src/resources/extensions/gsd/prompts/discuss.md +1 -1
- package/src/resources/extensions/gsd/prompts/queue.md +1 -1
- package/src/resources/extensions/gsd/repo-identity.ts +47 -2
- package/src/resources/extensions/gsd/rule-registry.ts +599 -0
- package/src/resources/extensions/gsd/rule-types.ts +68 -0
- package/src/resources/extensions/gsd/service-tier.ts +171 -0
- package/src/resources/extensions/gsd/structured-data-formatter.ts +3 -1
- package/src/resources/extensions/gsd/templates/decisions.md +2 -2
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +3 -2
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +85 -0
- package/src/resources/extensions/gsd/tests/auto-worktree-milestone-merge.test.ts +202 -0
- package/src/resources/extensions/gsd/tests/context-store.test.ts +10 -5
- package/src/resources/extensions/gsd/tests/db-writer.test.ts +10 -0
- package/src/resources/extensions/gsd/tests/doctor-completion-deferral.test.ts +15 -10
- package/src/resources/extensions/gsd/tests/doctor-fixlevel.test.ts +5 -4
- package/src/resources/extensions/gsd/tests/doctor-roadmap-summary-atomicity.test.ts +167 -0
- package/src/resources/extensions/gsd/tests/doctor-task-done-missing-summary-slice-loop.test.ts +174 -0
- package/src/resources/extensions/gsd/tests/exit-command.test.ts +55 -0
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +8 -1
- package/src/resources/extensions/gsd/tests/gsd-tools.test.ts +7 -7
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +513 -0
- package/src/resources/extensions/gsd/tests/journal-query-tool.test.ts +147 -0
- package/src/resources/extensions/gsd/tests/journal.test.ts +386 -0
- package/src/resources/extensions/gsd/tests/md-importer.test.ts +31 -1
- package/src/resources/extensions/gsd/tests/memory-store.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/milestone-id-reservation.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/parsers.test.ts +110 -0
- package/src/resources/extensions/gsd/tests/preferences.test.ts +47 -25
- package/src/resources/extensions/gsd/tests/prompt-db.test.ts +3 -1
- package/src/resources/extensions/gsd/tests/repo-identity-worktree.test.ts +61 -1
- package/src/resources/extensions/gsd/tests/routing-history.test.ts +11 -22
- package/src/resources/extensions/gsd/tests/rule-registry.test.ts +413 -0
- package/src/resources/extensions/gsd/tests/service-tier.test.ts +98 -0
- package/src/resources/extensions/gsd/tests/skill-lifecycle.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/stalled-tool-recovery.test.ts +102 -0
- package/src/resources/extensions/gsd/tests/structured-data-formatter.test.ts +4 -3
- package/src/resources/extensions/gsd/tests/tool-naming.test.ts +117 -0
- package/src/resources/extensions/gsd/tests/triage-dispatch.test.ts +6 -1
- package/src/resources/extensions/gsd/tests/windows-path-normalization.test.ts +99 -0
- package/src/resources/extensions/gsd/tests/worktree-db-integration.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/worktree-db.test.ts +4 -0
- package/src/resources/extensions/gsd/tests/worktree-health-dispatch.test.ts +178 -0
- package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +78 -3
- package/src/resources/extensions/gsd/tests/worktree-symlink-removal.test.ts +140 -0
- package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +74 -0
- package/src/resources/extensions/gsd/types.ts +3 -0
- package/src/resources/extensions/gsd/workflow-templates.ts +12 -1
- package/src/resources/extensions/gsd/worktree-manager.ts +21 -6
- package/src/resources/extensions/gsd/worktree-resolver.ts +30 -9
- package/src/resources/extensions/subagent/index.ts +7 -3
- package/src/resources/extensions/voice/index.ts +4 -4
- package/dist/web/standalone/.next/static/chunks/4024.279c423e4661ece1.js +0 -9
- /package/dist/web/standalone/.next/static/{SwbKZ7JPNFlEmU4f8pKEv → JBSIr4fSfHXs5g5x2ZBSC}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{SwbKZ7JPNFlEmU4f8pKEv → JBSIr4fSfHXs5g5x2ZBSC}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service Tier — gating, status formatting, icon resolution, and
|
|
3
|
+
* the /gsd fast command handler.
|
|
4
|
+
*
|
|
5
|
+
* Service tiers (priority/flex) are an OpenAI feature that only applies
|
|
6
|
+
* to gpt-5.4 variants. This module centralizes the model-gating logic
|
|
7
|
+
* so that icons, preferences, and the before_provider_request hook all
|
|
8
|
+
* use a single source of truth.
|
|
9
|
+
*/
|
|
10
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
11
|
+
import { saveFile } from "./files.js";
|
|
12
|
+
import { getGlobalGSDPreferencesPath, loadEffectiveGSDPreferences, loadGlobalGSDPreferences, } from "./preferences.js";
|
|
13
|
+
import { ensurePreferencesFile, serializePreferencesToFrontmatter } from "./commands-prefs-wizard.js";
|
|
14
|
+
// ─── Gating ──────────────────────────────────────────────────────────────────
|
|
15
|
+
/**
|
|
16
|
+
* Returns true when the given model ID supports OpenAI service tiers.
|
|
17
|
+
* Currently only gpt-5.4 variants qualify.
|
|
18
|
+
*/
|
|
19
|
+
export function supportsServiceTier(modelId) {
|
|
20
|
+
if (!modelId)
|
|
21
|
+
return false;
|
|
22
|
+
// Strip provider prefix if present (e.g. "openai/gpt-5.4" → "gpt-5.4")
|
|
23
|
+
const bare = modelId.includes("/") ? modelId.split("/").pop() : modelId;
|
|
24
|
+
return bare.startsWith("gpt-5.4");
|
|
25
|
+
}
|
|
26
|
+
// ─── Status Formatting ───────────────────────────────────────────────────────
|
|
27
|
+
/**
|
|
28
|
+
* Human-readable description of the current service tier setting.
|
|
29
|
+
*/
|
|
30
|
+
export function formatServiceTierStatus(tier) {
|
|
31
|
+
if (!tier) {
|
|
32
|
+
return [
|
|
33
|
+
"Service tier: disabled",
|
|
34
|
+
"",
|
|
35
|
+
"Usage:",
|
|
36
|
+
" /gsd fast on Set to priority (2x cost, faster)",
|
|
37
|
+
" /gsd fast flex Set to flex (0.5x cost, slower)",
|
|
38
|
+
" /gsd fast off Disable service tier",
|
|
39
|
+
"",
|
|
40
|
+
"Only affects gpt-5.4 models.",
|
|
41
|
+
].join("\n");
|
|
42
|
+
}
|
|
43
|
+
const label = tier === "priority" ? "priority (2x cost, faster)" : "flex (0.5x cost, slower)";
|
|
44
|
+
return [
|
|
45
|
+
`Service tier: ${label}`,
|
|
46
|
+
"",
|
|
47
|
+
"Usage:",
|
|
48
|
+
" /gsd fast on Set to priority (2x cost, faster)",
|
|
49
|
+
" /gsd fast flex Set to flex (0.5x cost, slower)",
|
|
50
|
+
" /gsd fast off Disable service tier",
|
|
51
|
+
"",
|
|
52
|
+
"Only affects gpt-5.4 models.",
|
|
53
|
+
].join("\n");
|
|
54
|
+
}
|
|
55
|
+
// ─── Icon Resolution ─────────────────────────────────────────────────────────
|
|
56
|
+
/**
|
|
57
|
+
* Returns the appropriate icon for the active service tier and model.
|
|
58
|
+
* Returns empty string when the tier is inactive or the model doesn't
|
|
59
|
+
* support service tiers.
|
|
60
|
+
*/
|
|
61
|
+
export function resolveServiceTierIcon(tier, modelId) {
|
|
62
|
+
if (!tier || !supportsServiceTier(modelId))
|
|
63
|
+
return "";
|
|
64
|
+
return tier === "priority" ? "⚡" : "💰";
|
|
65
|
+
}
|
|
66
|
+
// ─── Preference Read ─────────────────────────────────────────────────────────
|
|
67
|
+
/**
|
|
68
|
+
* Read the effective service_tier setting from preferences.
|
|
69
|
+
*/
|
|
70
|
+
export function getEffectiveServiceTier() {
|
|
71
|
+
const prefs = loadEffectiveGSDPreferences()?.preferences;
|
|
72
|
+
const raw = prefs?.service_tier;
|
|
73
|
+
if (raw === "priority" || raw === "flex")
|
|
74
|
+
return raw;
|
|
75
|
+
return undefined;
|
|
76
|
+
}
|
|
77
|
+
// ─── Preference Write ────────────────────────────────────────────────────────
|
|
78
|
+
function extractBodyAfterFrontmatter(content) {
|
|
79
|
+
const start = content.startsWith("---\n") ? 4 : content.startsWith("---\r\n") ? 5 : -1;
|
|
80
|
+
if (start === -1)
|
|
81
|
+
return null;
|
|
82
|
+
const closingIdx = content.indexOf("\n---", start);
|
|
83
|
+
if (closingIdx === -1)
|
|
84
|
+
return null;
|
|
85
|
+
const after = content.slice(closingIdx + 4);
|
|
86
|
+
return after.trim() ? after : null;
|
|
87
|
+
}
|
|
88
|
+
async function writeGlobalServiceTier(ctx, tier) {
|
|
89
|
+
const path = getGlobalGSDPreferencesPath();
|
|
90
|
+
await ensurePreferencesFile(path, ctx, "global");
|
|
91
|
+
const existing = loadGlobalGSDPreferences();
|
|
92
|
+
const prefs = existing?.preferences ? { ...existing.preferences } : {};
|
|
93
|
+
prefs.version = prefs.version || 1;
|
|
94
|
+
if (tier) {
|
|
95
|
+
prefs.service_tier = tier;
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
delete prefs.service_tier;
|
|
99
|
+
}
|
|
100
|
+
const frontmatter = serializePreferencesToFrontmatter(prefs);
|
|
101
|
+
let body = "\n# GSD Skill Preferences\n\nSee `~/.gsd/agent/extensions/gsd/docs/preferences-reference.md` for full field documentation and examples.\n";
|
|
102
|
+
if (existsSync(path)) {
|
|
103
|
+
const preserved = extractBodyAfterFrontmatter(readFileSync(path, "utf-8"));
|
|
104
|
+
if (preserved)
|
|
105
|
+
body = preserved;
|
|
106
|
+
}
|
|
107
|
+
await saveFile(path, `---\n${frontmatter}---${body}`);
|
|
108
|
+
await ctx.waitForIdle();
|
|
109
|
+
await ctx.reload();
|
|
110
|
+
}
|
|
111
|
+
// ─── Command Handler ─────────────────────────────────────────────────────────
|
|
112
|
+
/**
|
|
113
|
+
* Handle `/gsd fast [on|off|flex|status]`.
|
|
114
|
+
*/
|
|
115
|
+
export async function handleFast(args, ctx) {
|
|
116
|
+
const trimmed = args.trim().toLowerCase();
|
|
117
|
+
if (!trimmed || trimmed === "status") {
|
|
118
|
+
const tier = getEffectiveServiceTier();
|
|
119
|
+
ctx.ui.notify(formatServiceTierStatus(tier), "info");
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
if (trimmed === "on") {
|
|
123
|
+
await writeGlobalServiceTier(ctx, "priority");
|
|
124
|
+
ctx.ui.notify("Service tier set to priority (2x cost, faster responses). Only affects gpt-5.4 models.", "info");
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
if (trimmed === "off") {
|
|
128
|
+
await writeGlobalServiceTier(ctx, undefined);
|
|
129
|
+
ctx.ui.notify("Service tier disabled.", "info");
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
if (trimmed === "flex") {
|
|
133
|
+
await writeGlobalServiceTier(ctx, "flex");
|
|
134
|
+
ctx.ui.notify("Service tier set to flex (0.5x cost, slower responses). Only affects gpt-5.4 models.", "info");
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
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");
|
|
138
|
+
}
|
|
@@ -25,6 +25,7 @@ export function formatDecisionCompact(decision) {
|
|
|
25
25
|
decision.choice,
|
|
26
26
|
decision.rationale,
|
|
27
27
|
decision.revisable,
|
|
28
|
+
decision.made_by ?? 'agent',
|
|
28
29
|
].join(" | ");
|
|
29
30
|
}
|
|
30
31
|
/** Format multiple decisions in compact notation with a Fields header. */
|
|
@@ -32,7 +33,7 @@ export function formatDecisionsCompact(decisions) {
|
|
|
32
33
|
if (decisions.length === 0) {
|
|
33
34
|
return "# Decisions (compact)\n(none)";
|
|
34
35
|
}
|
|
35
|
-
const header = "# Decisions (compact)\nFields: id | when | scope | decision | choice | rationale | revisable";
|
|
36
|
+
const header = "# Decisions (compact)\nFields: id | when | scope | decision | choice | rationale | revisable | made_by";
|
|
36
37
|
const lines = decisions.map(formatDecisionCompact);
|
|
37
38
|
return `${header}\n\n${lines.join("\n")}`;
|
|
38
39
|
}
|
|
@@ -4,5 +4,5 @@
|
|
|
4
4
|
To reverse a decision, add a new row that supersedes it.
|
|
5
5
|
Read this file at the start of any planning or research phase. -->
|
|
6
6
|
|
|
7
|
-
| # | When | Scope | Decision | Choice | Rationale | Revisable? |
|
|
8
|
-
|
|
7
|
+
| # | When | Scope | Decision | Choice | Rationale | Revisable? | Made By |
|
|
8
|
+
|---|------|-------|----------|--------|-----------|------------|---------|
|
|
@@ -7,8 +7,20 @@
|
|
|
7
7
|
import { readFileSync, existsSync } from "node:fs";
|
|
8
8
|
import { join, dirname } from "node:path";
|
|
9
9
|
import { fileURLToPath } from "node:url";
|
|
10
|
-
|
|
10
|
+
import { homedir } from "node:os";
|
|
11
|
+
const __extensionDir = resolveGsdExtensionDir();
|
|
11
12
|
const registryPath = join(__extensionDir, "workflow-templates", "registry.json");
|
|
13
|
+
/** Resolve the GSD extension dir with fallback to ~/.gsd/agent/extensions/gsd/. */
|
|
14
|
+
function resolveGsdExtensionDir() {
|
|
15
|
+
const moduleDir = dirname(fileURLToPath(import.meta.url));
|
|
16
|
+
if (existsSync(join(moduleDir, "workflow-templates")))
|
|
17
|
+
return moduleDir;
|
|
18
|
+
const gsdHome = process.env.GSD_HOME || join(homedir(), ".gsd");
|
|
19
|
+
const agentGsdDir = join(gsdHome, "agent", "extensions", "gsd");
|
|
20
|
+
if (existsSync(join(agentGsdDir, "workflow-templates")))
|
|
21
|
+
return agentGsdDir;
|
|
22
|
+
return moduleDir;
|
|
23
|
+
}
|
|
12
24
|
// ─── Registry Cache ──────────────────────────────────────────────────────────
|
|
13
25
|
let cachedRegistry = null;
|
|
14
26
|
/**
|
|
@@ -206,10 +206,24 @@ export function listWorktrees(basePath) {
|
|
|
206
206
|
* If the process is currently inside the worktree, chdir out first.
|
|
207
207
|
*/
|
|
208
208
|
export function removeWorktree(basePath, name, opts = {}) {
|
|
209
|
-
|
|
210
|
-
const resolvedWtPath = existsSync(wtPath) ? realpathSync(wtPath) : wtPath;
|
|
209
|
+
let wtPath = worktreePath(basePath, name);
|
|
211
210
|
const branch = opts.branch ?? worktreeBranchName(name);
|
|
212
211
|
const { deleteBranch = true, force = true } = opts;
|
|
212
|
+
// Resolve the ACTUAL worktree path from git's worktree list.
|
|
213
|
+
// The computed path may differ when .gsd/ is (or was) a symlink to an
|
|
214
|
+
// external state directory — git resolves symlinks at worktree creation
|
|
215
|
+
// time, so its registered path points to the resolved external location.
|
|
216
|
+
// If syncStateToProjectRoot later creates a real .gsd/ directory that
|
|
217
|
+
// shadows the symlink, the computed path diverges from git's record.
|
|
218
|
+
try {
|
|
219
|
+
const entries = nativeWorktreeList(basePath);
|
|
220
|
+
const entry = entries.find(e => e.branch === branch);
|
|
221
|
+
if (entry?.path) {
|
|
222
|
+
wtPath = entry.path;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
catch { /* fall back to computed path */ }
|
|
226
|
+
const resolvedWtPath = existsSync(wtPath) ? realpathSync(wtPath) : wtPath;
|
|
213
227
|
// If we're inside the worktree, move out first — git can't remove an in-use directory
|
|
214
228
|
const cwd = process.cwd();
|
|
215
229
|
const resolvedCwd = existsSync(cwd) ? realpathSync(cwd) : cwd;
|
|
@@ -226,15 +240,15 @@ export function removeWorktree(basePath, name, opts = {}) {
|
|
|
226
240
|
}
|
|
227
241
|
return;
|
|
228
242
|
}
|
|
229
|
-
// Remove worktree (force if requested, to handle dirty worktrees)
|
|
243
|
+
// Remove worktree using the resolved path (force if requested, to handle dirty worktrees)
|
|
230
244
|
try {
|
|
231
|
-
nativeWorktreeRemove(basePath,
|
|
245
|
+
nativeWorktreeRemove(basePath, resolvedWtPath, force);
|
|
232
246
|
}
|
|
233
247
|
catch { /* may fail */ }
|
|
234
248
|
// If the directory is still there (e.g. locked), try harder with force
|
|
235
|
-
if (existsSync(
|
|
249
|
+
if (existsSync(resolvedWtPath)) {
|
|
236
250
|
try {
|
|
237
|
-
nativeWorktreeRemove(basePath,
|
|
251
|
+
nativeWorktreeRemove(basePath, resolvedWtPath, true);
|
|
238
252
|
}
|
|
239
253
|
catch { /* may fail */ }
|
|
240
254
|
}
|
|
@@ -253,7 +253,18 @@ export class WorktreeResolver {
|
|
|
253
253
|
if (roadmapPath) {
|
|
254
254
|
const roadmapContent = this.deps.readFileSync(roadmapPath, "utf-8");
|
|
255
255
|
const mergeResult = this.deps.mergeMilestoneToMain(originalBase, milestoneId, roadmapContent);
|
|
256
|
-
|
|
256
|
+
if (mergeResult.codeFilesChanged) {
|
|
257
|
+
ctx.notify(`Milestone ${milestoneId} merged to main.${mergeResult.pushed ? " Pushed to remote." : ""}`, "info");
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
// (#1906) Milestone produced only .gsd/ metadata — no actual code was
|
|
261
|
+
// merged. This typically means the LLM wrote planning artifacts
|
|
262
|
+
// (summaries, roadmaps) but never implemented the code. Surface this
|
|
263
|
+
// clearly so the user knows the milestone is not truly complete.
|
|
264
|
+
ctx.notify(`WARNING: Milestone ${milestoneId} merged to main but contained NO code changes — only .gsd/ metadata files. ` +
|
|
265
|
+
`The milestone summary may describe planned work that was never implemented. ` +
|
|
266
|
+
`Review the milestone output and re-run if code is missing.`, "warning");
|
|
267
|
+
}
|
|
257
268
|
}
|
|
258
269
|
else {
|
|
259
270
|
// No roadmap at either location — teardown but PRESERVE the branch so
|
|
@@ -339,7 +350,13 @@ export class WorktreeResolver {
|
|
|
339
350
|
const mergeResult = this.deps.mergeMilestoneToMain(this.s.basePath, milestoneId, roadmapContent);
|
|
340
351
|
// Rebuild GitService after merge (branch HEAD changed)
|
|
341
352
|
this.rebuildGitService();
|
|
342
|
-
|
|
353
|
+
if (mergeResult.codeFilesChanged) {
|
|
354
|
+
ctx.notify(`Milestone ${milestoneId} merged (branch mode).${mergeResult.pushed ? " Pushed to remote." : ""}`, "info");
|
|
355
|
+
}
|
|
356
|
+
else {
|
|
357
|
+
ctx.notify(`WARNING: Milestone ${milestoneId} merged (branch mode) but contained NO code changes — only .gsd/ metadata. ` +
|
|
358
|
+
`Review the milestone output and re-run if code is missing.`, "warning");
|
|
359
|
+
}
|
|
343
360
|
debugLog("WorktreeResolver", {
|
|
344
361
|
action: "mergeAndExit",
|
|
345
362
|
milestoneId,
|
|
@@ -409,12 +409,16 @@ async function runSingleAgentInCmuxSplit(cmuxClient, directionOrSurfaceId, defau
|
|
|
409
409
|
const bundledPaths = (process.env.GSD_BUNDLED_EXTENSION_PATHS ?? "").split(path.delimiter).map((s) => s.trim()).filter(Boolean);
|
|
410
410
|
const extensionArgs = bundledPaths.flatMap((p) => ["--extension", p]);
|
|
411
411
|
const processArgs = [process.env.GSD_BIN_PATH, ...extensionArgs, ...buildSubagentProcessArgs(agent, task, tmpPromptPath)];
|
|
412
|
+
// Normalize all paths to forward slashes before embedding in bash strings.
|
|
413
|
+
// On Windows, backslashes are interpreted as escape characters by bash,
|
|
414
|
+
// mangling paths like C:\Users\user into C:Useruser (#1436).
|
|
415
|
+
const bashPath = (p) => shellEscape(p.replaceAll("\\", "/"));
|
|
412
416
|
const innerScript = [
|
|
413
|
-
`cd ${
|
|
417
|
+
`cd ${bashPath(cwd ?? defaultCwd)}`,
|
|
414
418
|
"set -o pipefail",
|
|
415
|
-
`${
|
|
419
|
+
`${bashPath(process.execPath)} ${processArgs.map(a => bashPath(a)).join(" ")} 2> >(tee ${bashPath(stderrPath)} >&2) | tee ${bashPath(stdoutPath)}`,
|
|
416
420
|
"status=${PIPESTATUS[0]}",
|
|
417
|
-
`printf '%s' "$status" > ${
|
|
421
|
+
`printf '%s' "$status" > ${bashPath(exitPath)}`,
|
|
418
422
|
].join("; ");
|
|
419
423
|
const sent = await cmuxClient.sendSurface(cmuxSurfaceId, `bash -lc ${shellEscape(innerScript)}`);
|
|
420
424
|
if (!sent) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { shortcutDesc } from "../shared/mod.js";
|
|
2
2
|
import { isKeyRelease, Key, matchesKey, truncateToWidth, visibleWidth } from "@gsd/pi-tui";
|
|
3
|
-
import { spawn,
|
|
3
|
+
import { spawn, execFileSync } from "node:child_process";
|
|
4
4
|
import * as fs from "node:fs";
|
|
5
5
|
import * as os from "node:os";
|
|
6
6
|
import * as path from "node:path";
|
|
@@ -22,7 +22,7 @@ function ensureBinary() {
|
|
|
22
22
|
if (fs.existsSync(RECOGNIZER_BIN))
|
|
23
23
|
return true;
|
|
24
24
|
try {
|
|
25
|
-
|
|
25
|
+
execFileSync("swiftc", [SWIFT_SRC, "-o", RECOGNIZER_BIN, "-framework", "Speech", "-framework", "AVFoundation"], {
|
|
26
26
|
timeout: 60000,
|
|
27
27
|
});
|
|
28
28
|
return true;
|
|
@@ -42,7 +42,7 @@ function ensureLinuxReady(ctx) {
|
|
|
42
42
|
}
|
|
43
43
|
// Check python3 exists
|
|
44
44
|
try {
|
|
45
|
-
|
|
45
|
+
execFileSync("which", ["python3"], { stdio: "pipe" });
|
|
46
46
|
}
|
|
47
47
|
catch {
|
|
48
48
|
ctx.ui.notify("Voice: python3 not found — install with: sudo apt install python3", "error");
|
|
@@ -51,7 +51,7 @@ function ensureLinuxReady(ctx) {
|
|
|
51
51
|
// Check that sounddevice is importable
|
|
52
52
|
const py = linuxPython();
|
|
53
53
|
try {
|
|
54
|
-
|
|
54
|
+
execFileSync(py, ["-c", "import sounddevice"], {
|
|
55
55
|
stdio: "pipe",
|
|
56
56
|
timeout: 10000,
|
|
57
57
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
JBSIr4fSfHXs5g5x2ZBSC
|
|
@@ -4,41 +4,41 @@
|
|
|
4
4
|
"/api/boot/route": "/api/boot",
|
|
5
5
|
"/api/bridge-terminal/input/route": "/api/bridge-terminal/input",
|
|
6
6
|
"/api/bridge-terminal/resize/route": "/api/bridge-terminal/resize",
|
|
7
|
-
"/api/browse-directories/route": "/api/browse-directories",
|
|
8
7
|
"/api/bridge-terminal/stream/route": "/api/bridge-terminal/stream",
|
|
9
|
-
"/api/
|
|
8
|
+
"/api/browse-directories/route": "/api/browse-directories",
|
|
10
9
|
"/api/dev-mode/route": "/api/dev-mode",
|
|
11
10
|
"/api/cleanup/route": "/api/cleanup",
|
|
12
|
-
"/api/forensics/route": "/api/forensics",
|
|
13
|
-
"/api/doctor/route": "/api/doctor",
|
|
14
11
|
"/api/export-data/route": "/api/export-data",
|
|
12
|
+
"/api/doctor/route": "/api/doctor",
|
|
13
|
+
"/api/captures/route": "/api/captures",
|
|
14
|
+
"/api/forensics/route": "/api/forensics",
|
|
15
15
|
"/api/git/route": "/api/git",
|
|
16
|
-
"/api/knowledge/route": "/api/knowledge",
|
|
17
16
|
"/api/history/route": "/api/history",
|
|
18
17
|
"/api/inspect/route": "/api/inspect",
|
|
19
18
|
"/api/hooks/route": "/api/hooks",
|
|
19
|
+
"/api/knowledge/route": "/api/knowledge",
|
|
20
20
|
"/api/live-state/route": "/api/live-state",
|
|
21
21
|
"/api/preferences/route": "/api/preferences",
|
|
22
|
+
"/api/onboarding/route": "/api/onboarding",
|
|
22
23
|
"/api/recovery/route": "/api/recovery",
|
|
23
|
-
"/api/projects/route": "/api/projects",
|
|
24
24
|
"/api/session/browser/route": "/api/session/browser",
|
|
25
|
-
"/api/onboarding/route": "/api/onboarding",
|
|
26
25
|
"/api/session/command/route": "/api/session/command",
|
|
27
|
-
"/api/session/events/route": "/api/session/events",
|
|
28
26
|
"/api/settings-data/route": "/api/settings-data",
|
|
27
|
+
"/api/session/events/route": "/api/session/events",
|
|
28
|
+
"/api/files/route": "/api/files",
|
|
29
29
|
"/api/shutdown/route": "/api/shutdown",
|
|
30
|
-
"/api/
|
|
30
|
+
"/api/terminal/input/route": "/api/terminal/input",
|
|
31
31
|
"/api/session/manage/route": "/api/session/manage",
|
|
32
|
+
"/api/skill-health/route": "/api/skill-health",
|
|
32
33
|
"/api/steer/route": "/api/steer",
|
|
33
|
-
"/api/terminal/input/route": "/api/terminal/input",
|
|
34
34
|
"/api/terminal/resize/route": "/api/terminal/resize",
|
|
35
|
-
"/api/terminal/stream/route": "/api/terminal/stream",
|
|
36
35
|
"/api/terminal/sessions/route": "/api/terminal/sessions",
|
|
36
|
+
"/api/terminal/stream/route": "/api/terminal/stream",
|
|
37
37
|
"/api/undo/route": "/api/undo",
|
|
38
38
|
"/api/terminal/upload/route": "/api/terminal/upload",
|
|
39
|
-
"/api/visualizer/route": "/api/visualizer",
|
|
40
39
|
"/api/update/route": "/api/update",
|
|
40
|
+
"/api/visualizer/route": "/api/visualizer",
|
|
41
41
|
"/api/remote-questions/route": "/api/remote-questions",
|
|
42
|
-
"/api/
|
|
42
|
+
"/api/projects/route": "/api/projects",
|
|
43
43
|
"/page": "/"
|
|
44
44
|
}
|
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
],
|
|
5
5
|
"devFiles": [],
|
|
6
6
|
"lowPriorityFiles": [
|
|
7
|
-
"static/
|
|
8
|
-
"static/
|
|
7
|
+
"static/JBSIr4fSfHXs5g5x2ZBSC/_buildManifest.js",
|
|
8
|
+
"static/JBSIr4fSfHXs5g5x2ZBSC/_ssgManifest.js"
|
|
9
9
|
],
|
|
10
10
|
"rootMainFiles": [
|
|
11
|
-
"static/chunks/webpack-
|
|
11
|
+
"static/chunks/webpack-fa307370fcf9fb2c.js",
|
|
12
12
|
"static/chunks/4bd1b696-e5d7c65570c947b7.js",
|
|
13
13
|
"static/chunks/3794-337d1ca25ad99a89.js",
|
|
14
14
|
"static/chunks/main-app-fdab67f7802d7832.js"
|
|
@@ -78,8 +78,8 @@
|
|
|
78
78
|
"dynamicRoutes": {},
|
|
79
79
|
"notFoundRoutes": [],
|
|
80
80
|
"preview": {
|
|
81
|
-
"previewModeId": "
|
|
82
|
-
"previewModeSigningKey": "
|
|
83
|
-
"previewModeEncryptionKey": "
|
|
81
|
+
"previewModeId": "d9e489bf2d3e8fe93667d7bb1cab6aec",
|
|
82
|
+
"previewModeSigningKey": "91aa19c7aa4520984b924c5423a1981370228a25b42b141264ec294eb93bda7a",
|
|
83
|
+
"previewModeEncryptionKey": "e407e423359fa3b4d52d4ed1e4ebcc417c52eb89ee67f8ad33d8c44c51bad6d1"
|
|
84
84
|
}
|
|
85
85
|
}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"static/chunks/363642f4.f9053a63f1b97508.js",
|
|
7
7
|
"static/chunks/4986-c2fc8845ce785303.js",
|
|
8
8
|
"static/chunks/3721.bf31263de6d5fa46.js",
|
|
9
|
-
"static/chunks/4024.
|
|
9
|
+
"static/chunks/4024.c195dc1fdd2adbea.js"
|
|
10
10
|
]
|
|
11
11
|
},
|
|
12
12
|
"components/gsd/chat-mode.tsx -> react-markdown": {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
<!DOCTYPE html><!--
|
|
2
|
-
@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><!--JBSIr4fSfHXs5g5x2ZBSC--><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\":\"JBSIr4fSfHXs5g5x2ZBSC\",\"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":"JBSIr4fSfHXs5g5x2ZBSC","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":"JBSIr4fSfHXs5g5x2ZBSC","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":"JBSIr4fSfHXs5g5x2ZBSC","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":"JBSIr4fSfHXs5g5x2ZBSC","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":"JBSIr4fSfHXs5g5x2ZBSC","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":"JBSIr4fSfHXs5g5x2ZBSC","rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"loading":null,"isPartial":false}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
0:{"buildId":"
|
|
1
|
+
0:{"buildId":"JBSIr4fSfHXs5g5x2ZBSC","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}
|