gsd-pi 2.42.0-dev.eedc83f → 2.43.0-dev.5717b75
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.js +3 -2
- package/dist/loader.js +3 -1
- package/dist/resources/extensions/async-jobs/await-tool.js +5 -0
- package/dist/resources/extensions/async-jobs/index.js +2 -0
- package/dist/resources/extensions/gsd/auto/phases.js +1 -3
- package/dist/resources/extensions/gsd/auto-prompts.js +3 -16
- package/dist/resources/extensions/gsd/auto-start.js +8 -11
- package/dist/resources/extensions/gsd/git-service.js +3 -69
- package/dist/resources/extensions/gsd/worktree.js +2 -2
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +14 -14
- 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/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 +14 -14
- 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/package.json +1 -1
- package/packages/pi-coding-agent/package.json +1 -1
- package/pkg/package.json +1 -1
- package/src/resources/extensions/async-jobs/await-tool.test.ts +47 -0
- package/src/resources/extensions/async-jobs/await-tool.ts +5 -0
- package/src/resources/extensions/async-jobs/index.ts +1 -0
- package/src/resources/extensions/async-jobs/job-manager.ts +2 -0
- package/src/resources/extensions/gsd/auto/loop-deps.ts +0 -1
- package/src/resources/extensions/gsd/auto/phases.ts +1 -3
- package/src/resources/extensions/gsd/auto-prompts.ts +2 -18
- package/src/resources/extensions/gsd/auto-start.ts +7 -10
- package/src/resources/extensions/gsd/git-service.ts +2 -72
- package/src/resources/extensions/gsd/gitignore.ts +1 -1
- package/src/resources/extensions/gsd/tests/git-service.test.ts +9 -14
- package/src/resources/extensions/gsd/tests/skill-activation.test.ts +56 -3
- package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +1 -2
- package/src/resources/extensions/gsd/worktree-resolver.ts +0 -1
- package/src/resources/extensions/gsd/worktree.ts +2 -2
- /package/dist/web/standalone/.next/static/{JUBX5FUR73jiViQU5a-Cx → 5ULZcR9XhHFzlAZFiSKRl}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{JUBX5FUR73jiViQU5a-Cx → 5ULZcR9XhHFzlAZFiSKRl}/_ssgManifest.js +0 -0
package/dist/cli.js
CHANGED
|
@@ -544,8 +544,9 @@ if (!process.stdin.isTTY) {
|
|
|
544
544
|
process.stderr.write('[gsd] gsd --mode text "message" Text output mode\n');
|
|
545
545
|
process.exit(1);
|
|
546
546
|
}
|
|
547
|
-
// Welcome screen — shown on every fresh interactive session before TUI takes over
|
|
548
|
-
|
|
547
|
+
// Welcome screen — shown on every fresh interactive session before TUI takes over.
|
|
548
|
+
// Skip when the first-run banner was already printed in loader.ts (prevents double banner).
|
|
549
|
+
if (!process.env.GSD_FIRST_RUN_BANNER) {
|
|
549
550
|
const { printWelcomeScreen } = await import('./welcome-screen.js');
|
|
550
551
|
printWelcomeScreen({
|
|
551
552
|
version: process.env.GSD_VERSION || '0.0.0',
|
package/dist/loader.js
CHANGED
|
@@ -42,7 +42,8 @@ const pkgDir = resolve(dirname(fileURLToPath(import.meta.url)), '..', 'pkg');
|
|
|
42
42
|
process.env.PI_PACKAGE_DIR = pkgDir;
|
|
43
43
|
process.env.PI_SKIP_VERSION_CHECK = '1'; // GSD runs its own update check in cli.ts — suppress pi's
|
|
44
44
|
process.title = 'gsd';
|
|
45
|
-
// Print branded banner on first launch (before ~/.gsd/ exists)
|
|
45
|
+
// Print branded banner on first launch (before ~/.gsd/ exists).
|
|
46
|
+
// Set GSD_FIRST_RUN_BANNER so cli.ts skips the duplicate welcome screen.
|
|
46
47
|
if (!existsSync(appRoot)) {
|
|
47
48
|
const cyan = '\x1b[36m';
|
|
48
49
|
const green = '\x1b[32m';
|
|
@@ -53,6 +54,7 @@ if (!existsSync(appRoot)) {
|
|
|
53
54
|
'\n' +
|
|
54
55
|
` Get Shit Done ${dim}v${gsdVersion}${reset}\n` +
|
|
55
56
|
` ${green}Welcome.${reset} Setting up your environment...\n\n`);
|
|
57
|
+
process.env.GSD_FIRST_RUN_BANNER = '1';
|
|
56
58
|
}
|
|
57
59
|
// GSD_CODING_AGENT_DIR — tells pi's getAgentDir() to return ~/.gsd/agent/ instead of ~/.gsd/agent/
|
|
58
60
|
process.env.GSD_CODING_AGENT_DIR = agentDir;
|
|
@@ -54,6 +54,11 @@ export function createAwaitTool(getManager) {
|
|
|
54
54
|
};
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
|
+
// Mark all watched jobs as awaited upfront so the onJobComplete
|
|
58
|
+
// callback (which fires synchronously in the promise .then()) knows
|
|
59
|
+
// to suppress the follow-up message.
|
|
60
|
+
for (const j of watched)
|
|
61
|
+
j.awaited = true;
|
|
57
62
|
// If all watched jobs are already done, return immediately
|
|
58
63
|
const running = watched.filter((j) => j.status === "running");
|
|
59
64
|
if (running.length === 0) {
|
|
@@ -34,6 +34,8 @@ export default function AsyncJobs(pi) {
|
|
|
34
34
|
latestCwd = ctx.cwd;
|
|
35
35
|
manager = new AsyncJobManager({
|
|
36
36
|
onJobComplete: (job) => {
|
|
37
|
+
if (job.awaited)
|
|
38
|
+
return;
|
|
37
39
|
const statusEmoji = job.status === "completed" ? "done" : "error";
|
|
38
40
|
const elapsed = ((Date.now() - job.startTime) / 1000).toFixed(1);
|
|
39
41
|
const output = job.status === "completed"
|
|
@@ -165,9 +165,7 @@ export async function runPreDispatch(ic, loopState) {
|
|
|
165
165
|
midTitle = state.activeMilestone?.title;
|
|
166
166
|
if (mid) {
|
|
167
167
|
if (deps.getIsolationMode() !== "none") {
|
|
168
|
-
deps.captureIntegrationBranch(s.basePath, mid
|
|
169
|
-
commitDocs: prefs?.git?.commit_docs,
|
|
170
|
-
});
|
|
168
|
+
deps.captureIntegrationBranch(s.basePath, mid);
|
|
171
169
|
}
|
|
172
170
|
deps.resolver.enterMilestone(mid, ctx.ui);
|
|
173
171
|
}
|
|
@@ -337,7 +337,7 @@ function formatSkillActivationBlock(skillNames) {
|
|
|
337
337
|
}
|
|
338
338
|
export function buildSkillActivationBlock(params) {
|
|
339
339
|
const prefs = params.preferences ?? loadEffectiveGSDPreferences()?.preferences;
|
|
340
|
-
const contextTokens = tokenizeSkillContext(params.milestoneId, params.milestoneTitle, params.sliceId, params.sliceTitle, params.taskId, params.taskTitle
|
|
340
|
+
const contextTokens = tokenizeSkillContext(params.milestoneId, params.milestoneTitle, params.sliceId, params.sliceTitle, params.taskId, params.taskTitle);
|
|
341
341
|
const visibleSkills = (typeof getLoadedSkills === 'function' ? getLoadedSkills() : []).filter(skill => !skill.disableModelInvocation);
|
|
342
342
|
const installedNames = new Set(visibleSkills.map(skill => normalizeSkillReference(skill.name)));
|
|
343
343
|
const avoided = new Set(resolvePreferenceSkillNames(prefs?.avoid_skills ?? [], params.base));
|
|
@@ -364,11 +364,6 @@ export function buildSkillActivationBlock(params) {
|
|
|
364
364
|
// Non-fatal — malformed task plan should not break prompt construction
|
|
365
365
|
}
|
|
366
366
|
}
|
|
367
|
-
for (const skill of visibleSkills) {
|
|
368
|
-
if (skillMatchesContext(skill, contextTokens)) {
|
|
369
|
-
matched.add(normalizeSkillReference(skill.name));
|
|
370
|
-
}
|
|
371
|
-
}
|
|
372
367
|
const ordered = [...matched]
|
|
373
368
|
.filter(name => installedNames.has(name) && !avoided.has(name))
|
|
374
369
|
.sort();
|
|
@@ -846,11 +841,7 @@ export async function buildPlanSlicePrompt(mid, _midTitle, sid, sTitle, base, le
|
|
|
846
841
|
// Build executor context constraints from the budget engine
|
|
847
842
|
const executorContextConstraints = formatExecutorConstraints();
|
|
848
843
|
const outputRelPath = relSliceFile(base, mid, sid, "PLAN");
|
|
849
|
-
const
|
|
850
|
-
const commitDocsEnabled = prefs?.preferences?.git?.commit_docs !== false;
|
|
851
|
-
const commitInstruction = commitDocsEnabled
|
|
852
|
-
? `Commit the plan files only: \`git add --force ${relSlicePath(base, mid, sid)}/ .gsd/DECISIONS.md .gitignore && git commit -m "docs(${sid}): add slice plan"\`. Do not stage .gsd/STATE.md or other runtime files — the system manages those.`
|
|
853
|
-
: "Do not commit — planning docs are not tracked in git for this project.";
|
|
844
|
+
const commitInstruction = "Do not commit — .gsd/ planning docs are managed externally and not tracked in git.";
|
|
854
845
|
return loadPrompt("plan-slice", {
|
|
855
846
|
workingDirectory: base,
|
|
856
847
|
milestoneId: mid, sliceId: sid, sliceTitle: sTitle,
|
|
@@ -1281,11 +1272,7 @@ export async function buildReassessRoadmapPrompt(mid, midTitle, completedSliceId
|
|
|
1281
1272
|
catch {
|
|
1282
1273
|
// Non-fatal — captures module may not be available
|
|
1283
1274
|
}
|
|
1284
|
-
const
|
|
1285
|
-
const reassessCommitDocsEnabled = reassessPrefs?.preferences?.git?.commit_docs !== false;
|
|
1286
|
-
const reassessCommitInstruction = reassessCommitDocsEnabled
|
|
1287
|
-
? `Commit: \`docs(${mid}): reassess roadmap after ${completedSliceId}\`. Stage only the .gsd/milestones/ files you changed — do not stage .gsd/STATE.md or other runtime files.`
|
|
1288
|
-
: "Do not commit — planning docs are not tracked in git for this project.";
|
|
1275
|
+
const reassessCommitInstruction = "Do not commit — .gsd/ planning docs are managed externally and not tracked in git.";
|
|
1289
1276
|
return loadPrompt("reassess-roadmap", {
|
|
1290
1277
|
workingDirectory: base,
|
|
1291
1278
|
milestoneId: mid,
|
|
@@ -93,23 +93,20 @@ export async function bootstrapAutoSession(s, ctx, pi, base, verboseMode, reques
|
|
|
93
93
|
// ensureGitignore checks for git-tracked .gsd/ files and skips the
|
|
94
94
|
// ".gsd" pattern if the project intentionally tracks .gsd/ in git.
|
|
95
95
|
const gitPrefs = loadEffectiveGSDPreferences()?.preferences?.git;
|
|
96
|
-
const commitDocs = gitPrefs?.commit_docs;
|
|
97
96
|
const manageGitignore = gitPrefs?.manage_gitignore;
|
|
98
|
-
ensureGitignore(base, {
|
|
97
|
+
ensureGitignore(base, { manageGitignore });
|
|
99
98
|
if (manageGitignore !== false)
|
|
100
99
|
untrackRuntimeFiles(base);
|
|
101
100
|
// Bootstrap .gsd/ if it doesn't exist
|
|
102
101
|
const gsdDir = join(base, ".gsd");
|
|
103
102
|
if (!existsSync(gsdDir)) {
|
|
104
103
|
mkdirSync(join(gsdDir, "milestones"), { recursive: true });
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
/* nothing to commit */
|
|
112
|
-
}
|
|
104
|
+
try {
|
|
105
|
+
nativeAddAll(base);
|
|
106
|
+
nativeCommit(base, "chore: init gsd");
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
/* nothing to commit */
|
|
113
110
|
}
|
|
114
111
|
}
|
|
115
112
|
// Initialize GitServiceImpl
|
|
@@ -347,7 +344,7 @@ export async function bootstrapAutoSession(s, ctx, pi, base, verboseMode, reques
|
|
|
347
344
|
// Capture integration branch
|
|
348
345
|
if (s.currentMilestoneId) {
|
|
349
346
|
if (getIsolationMode() !== "none") {
|
|
350
|
-
captureIntegrationBranch(base, s.currentMilestoneId
|
|
347
|
+
captureIntegrationBranch(base, s.currentMilestoneId);
|
|
351
348
|
}
|
|
352
349
|
setActiveMilestoneId(base, s.currentMilestoneId);
|
|
353
350
|
}
|
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
* paths, commit type inference, and the runGit shell helper.
|
|
9
9
|
*/
|
|
10
10
|
import { execFileSync, execSync } from "node:child_process";
|
|
11
|
-
import { existsSync,
|
|
12
|
-
import { join
|
|
11
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
12
|
+
import { join } from "node:path";
|
|
13
13
|
import { gsdRoot } from "./paths.js";
|
|
14
14
|
import { GIT_NO_PROMPT_ENV } from "./git-constants.js";
|
|
15
15
|
import { loadEffectiveGSDPreferences } from "./preferences.js";
|
|
@@ -130,7 +130,7 @@ export function readIntegrationBranch(basePath, milestoneId) {
|
|
|
130
130
|
*/
|
|
131
131
|
/** Regex matching GSD quick-task branches: gsd/quick/<num>-<slug> */
|
|
132
132
|
export const QUICK_BRANCH_RE = /^gsd\/quick\//;
|
|
133
|
-
export function writeIntegrationBranch(basePath, milestoneId, branch
|
|
133
|
+
export function writeIntegrationBranch(basePath, milestoneId, branch) {
|
|
134
134
|
// Don't record slice branches as the integration target
|
|
135
135
|
if (SLICE_BRANCH_RE.test(branch))
|
|
136
136
|
return;
|
|
@@ -342,75 +342,9 @@ export class GitServiceImpl {
|
|
|
342
342
|
// git add -A already skips it and the exclusions are harmless no-ops.
|
|
343
343
|
const allExclusions = [...RUNTIME_EXCLUSION_PATHS, ...extraExclusions];
|
|
344
344
|
nativeAddAllWithExclusions(this.basePath, allExclusions);
|
|
345
|
-
// Force-add .gsd/milestones/ when .gsd is a symlink (#2104).
|
|
346
|
-
// When .gsd is a symlink (external state projects), ensureGitignore adds
|
|
347
|
-
// `.gsd` to .gitignore. The nativeAddAllWithExclusions call above falls
|
|
348
|
-
// back to plain `git add -A` (symlink pathspec rejection), which respects
|
|
349
|
-
// .gitignore and silently skips new .gsd/milestones/ files.
|
|
350
|
-
//
|
|
351
|
-
// `git add -f` also fails with "beyond a symbolic link", so we use
|
|
352
|
-
// `git hash-object -w` + `git update-index --add --cacheinfo` to bypass
|
|
353
|
-
// the symlink restriction entirely. This stages each milestone artifact
|
|
354
|
-
// individually by hashing the file content and updating the index directly.
|
|
355
|
-
const gsdPath = join(this.basePath, ".gsd");
|
|
356
|
-
const milestonesDir = join(gsdPath, "milestones");
|
|
357
|
-
try {
|
|
358
|
-
if (existsSync(gsdPath) &&
|
|
359
|
-
lstatSync(gsdPath).isSymbolicLink() &&
|
|
360
|
-
existsSync(milestonesDir)) {
|
|
361
|
-
this._forceAddMilestoneArtifacts(milestonesDir);
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
catch {
|
|
365
|
-
// Non-fatal: if force-add fails, the commit proceeds without these files.
|
|
366
|
-
// This matches existing behavior where milestone artifacts were silently
|
|
367
|
-
// omitted — but now we at least attempt to include them.
|
|
368
|
-
}
|
|
369
345
|
}
|
|
370
346
|
/** Tracks whether runtime file cleanup has run this session. */
|
|
371
347
|
_runtimeFilesCleanedUp = false;
|
|
372
|
-
/**
|
|
373
|
-
* Recursively collect all files under a directory.
|
|
374
|
-
* Returns paths relative to `basePath` (e.g. ".gsd/milestones/M009/SUMMARY.md").
|
|
375
|
-
*/
|
|
376
|
-
_collectFiles(dir) {
|
|
377
|
-
const files = [];
|
|
378
|
-
for (const entry of readdirSync(dir, { withFileTypes: true })) {
|
|
379
|
-
const full = join(dir, entry.name);
|
|
380
|
-
if (entry.isDirectory()) {
|
|
381
|
-
files.push(...this._collectFiles(full));
|
|
382
|
-
}
|
|
383
|
-
else if (entry.isFile()) {
|
|
384
|
-
files.push(relative(this.basePath, full));
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
return files;
|
|
388
|
-
}
|
|
389
|
-
/**
|
|
390
|
-
* Stage milestone artifacts through a symlinked .gsd directory (#2104).
|
|
391
|
-
*
|
|
392
|
-
* `git add` (even with `-f`) refuses to stage files "beyond a symbolic link".
|
|
393
|
-
* This method bypasses that restriction by hashing each file with
|
|
394
|
-
* `git hash-object -w` and inserting the blob into the index with
|
|
395
|
-
* `git update-index --add --cacheinfo 100644 <hash> <path>`.
|
|
396
|
-
*/
|
|
397
|
-
_forceAddMilestoneArtifacts(milestonesDir) {
|
|
398
|
-
const files = this._collectFiles(milestonesDir);
|
|
399
|
-
for (const filePath of files) {
|
|
400
|
-
const hash = execFileSync("git", ["hash-object", "-w", filePath], {
|
|
401
|
-
cwd: this.basePath,
|
|
402
|
-
stdio: ["ignore", "pipe", "pipe"],
|
|
403
|
-
encoding: "utf-8",
|
|
404
|
-
env: GIT_NO_PROMPT_ENV,
|
|
405
|
-
}).trim();
|
|
406
|
-
execFileSync("git", ["update-index", "--add", "--cacheinfo", "100644", hash, filePath], {
|
|
407
|
-
cwd: this.basePath,
|
|
408
|
-
stdio: ["ignore", "pipe", "pipe"],
|
|
409
|
-
encoding: "utf-8",
|
|
410
|
-
env: GIT_NO_PROMPT_ENV,
|
|
411
|
-
});
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
348
|
/**
|
|
415
349
|
* Stage files (smart staging) and commit.
|
|
416
350
|
* Returns the commit message string on success, or null if nothing to commit.
|
|
@@ -48,14 +48,14 @@ export function setActiveMilestoneId(basePath, milestoneId) {
|
|
|
48
48
|
* record when the user starts from a different branch (#300). Always a no-op
|
|
49
49
|
* if on a GSD slice branch.
|
|
50
50
|
*/
|
|
51
|
-
export function captureIntegrationBranch(basePath, milestoneId
|
|
51
|
+
export function captureIntegrationBranch(basePath, milestoneId) {
|
|
52
52
|
// In a worktree, the base branch is implicit (worktree/<name>).
|
|
53
53
|
// Writing it to META.json would leave stale metadata after merge back to main.
|
|
54
54
|
if (detectWorktreeName(basePath))
|
|
55
55
|
return;
|
|
56
56
|
const svc = getService(basePath);
|
|
57
57
|
const current = svc.getCurrentBranch();
|
|
58
|
-
writeIntegrationBranch(basePath, milestoneId, current
|
|
58
|
+
writeIntegrationBranch(basePath, milestoneId, current);
|
|
59
59
|
}
|
|
60
60
|
// ─── Pure Utility Functions (unchanged) ────────────────────────────────────
|
|
61
61
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
5ULZcR9XhHFzlAZFiSKRl
|
|
@@ -1,44 +1,44 @@
|
|
|
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",
|
|
4
5
|
"/api/boot/route": "/api/boot",
|
|
5
6
|
"/api/bridge-terminal/resize/route": "/api/bridge-terminal/resize",
|
|
6
|
-
"/api/bridge-terminal/input/route": "/api/bridge-terminal/input",
|
|
7
|
-
"/api/cleanup/route": "/api/cleanup",
|
|
8
|
-
"/api/captures/route": "/api/captures",
|
|
9
7
|
"/api/browse-directories/route": "/api/browse-directories",
|
|
8
|
+
"/api/captures/route": "/api/captures",
|
|
10
9
|
"/api/bridge-terminal/stream/route": "/api/bridge-terminal/stream",
|
|
11
|
-
"/api/doctor/route": "/api/doctor",
|
|
12
10
|
"/api/dev-mode/route": "/api/dev-mode",
|
|
11
|
+
"/api/cleanup/route": "/api/cleanup",
|
|
13
12
|
"/api/export-data/route": "/api/export-data",
|
|
14
13
|
"/api/forensics/route": "/api/forensics",
|
|
14
|
+
"/api/doctor/route": "/api/doctor",
|
|
15
15
|
"/api/git/route": "/api/git",
|
|
16
|
-
"/api/history/route": "/api/history",
|
|
17
16
|
"/api/hooks/route": "/api/hooks",
|
|
18
|
-
"/api/
|
|
17
|
+
"/api/history/route": "/api/history",
|
|
19
18
|
"/api/knowledge/route": "/api/knowledge",
|
|
19
|
+
"/api/inspect/route": "/api/inspect",
|
|
20
20
|
"/api/live-state/route": "/api/live-state",
|
|
21
|
-
"/api/onboarding/route": "/api/onboarding",
|
|
22
21
|
"/api/preferences/route": "/api/preferences",
|
|
23
|
-
"/api/recovery/route": "/api/recovery",
|
|
24
|
-
"/api/session/browser/route": "/api/session/browser",
|
|
25
22
|
"/api/projects/route": "/api/projects",
|
|
23
|
+
"/api/onboarding/route": "/api/onboarding",
|
|
24
|
+
"/api/recovery/route": "/api/recovery",
|
|
25
|
+
"/api/session/command/route": "/api/session/command",
|
|
26
|
+
"/api/files/route": "/api/files",
|
|
26
27
|
"/api/session/events/route": "/api/session/events",
|
|
27
|
-
"/api/session/manage/route": "/api/session/manage",
|
|
28
28
|
"/api/settings-data/route": "/api/settings-data",
|
|
29
29
|
"/api/shutdown/route": "/api/shutdown",
|
|
30
|
-
"/api/session/
|
|
30
|
+
"/api/session/manage/route": "/api/session/manage",
|
|
31
31
|
"/api/skill-health/route": "/api/skill-health",
|
|
32
32
|
"/api/steer/route": "/api/steer",
|
|
33
|
-
"/api/terminal/resize/route": "/api/terminal/resize",
|
|
34
33
|
"/api/terminal/input/route": "/api/terminal/input",
|
|
34
|
+
"/api/terminal/resize/route": "/api/terminal/resize",
|
|
35
35
|
"/api/terminal/sessions/route": "/api/terminal/sessions",
|
|
36
36
|
"/api/terminal/stream/route": "/api/terminal/stream",
|
|
37
37
|
"/api/terminal/upload/route": "/api/terminal/upload",
|
|
38
38
|
"/api/undo/route": "/api/undo",
|
|
39
|
-
"/api/update/route": "/api/update",
|
|
40
39
|
"/api/visualizer/route": "/api/visualizer",
|
|
40
|
+
"/api/update/route": "/api/update",
|
|
41
|
+
"/api/session/browser/route": "/api/session/browser",
|
|
41
42
|
"/api/remote-questions/route": "/api/remote-questions",
|
|
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/5ULZcR9XhHFzlAZFiSKRl/_buildManifest.js",
|
|
8
|
+
"static/5ULZcR9XhHFzlAZFiSKRl/_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": "2c36b514ea7a8784a912b91a736192fd",
|
|
82
|
+
"previewModeSigningKey": "76257add515006e1a1e0325b64d1a463434697ec58cc2dc2b5386d4ea6fdea94",
|
|
83
|
+
"previewModeEncryptionKey": "6c9de1ca95591378effbfab7db7daf5179ada860f8d7269a8a8380351d4b7162"
|
|
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><!--5ULZcR9XhHFzlAZFiSKRl--><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\":\"5ULZcR9XhHFzlAZFiSKRl\",\"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":"5ULZcR9XhHFzlAZFiSKRl","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":"5ULZcR9XhHFzlAZFiSKRl","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":"5ULZcR9XhHFzlAZFiSKRl","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":"5ULZcR9XhHFzlAZFiSKRl","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":"5ULZcR9XhHFzlAZFiSKRl","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":"5ULZcR9XhHFzlAZFiSKRl","rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"loading":null,"isPartial":false}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
0:{"buildId":"
|
|
1
|
+
0:{"buildId":"5ULZcR9XhHFzlAZFiSKRl","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}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><!--
|
|
1
|
+
<!DOCTYPE html><!--5ULZcR9XhHFzlAZFiSKRl--><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/4cf2300e9c8272f7-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/93f479601ee12b01-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/de70bee13400563f.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/123c0bb039697968.css" data-precedence="next"/><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><script src="/_next/static/chunks/4986-c2fc8845ce785303.js" async=""></script><script src="/_next/static/chunks/app/layout-a16c7a7ecdf0c2cf.js" async=""></script><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><title>GSD</title><meta name="description" content="The evolution of Get Shit Done — now a real coding agent. One command. Walk away. Come back to a built project."/><meta name="application-name" content="GSD"/><link rel="icon" href="/icon-light-32x32.png" media="(prefers-color-scheme: light)"/><link rel="icon" href="/icon-dark-32x32.png" media="(prefers-color-scheme: dark)"/><link rel="icon" href="/icon.svg" type="image/svg+xml"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__variable_188709 __variable_9a8899 font-sans antialiased"><div hidden=""><!--$--><!--/$--></div><script>((a,b,c,d,e,f,g,h)=>{let i=document.documentElement,j=["light","dark"];function k(b){var c;(Array.isArray(a)?a:[a]).forEach(a=>{let c="class"===a,d=c&&f?e.map(a=>f[a]||a):e;c?(i.classList.remove(...d),i.classList.add(f&&f[b]?f[b]:b)):i.setAttribute(a,b)}),c=b,h&&j.includes(c)&&(i.style.colorScheme=c)}if(d)k(d);else try{let a=localStorage.getItem(b)||c,d=g&&"system"===a?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":a;k(d)}catch(a){}})("class","theme","dark",null,["light","dark"],null,true,true)</script><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>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@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:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><section aria-label="Notifications alt+T" tabindex="-1" aria-live="polite" aria-relevant="additions text" aria-atomic="false"></section><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[21942,[\"4986\",\"static/chunks/4986-c2fc8845ce785303.js\",\"7177\",\"static/chunks/app/layout-a16c7a7ecdf0c2cf.js\"],\"ThemeProvider\"]\n3:I[57121,[],\"\"]\n4:I[74581,[],\"\"]\n5:I[61549,[\"4986\",\"static/chunks/4986-c2fc8845ce785303.js\",\"7177\",\"static/chunks/app/layout-a16c7a7ecdf0c2cf.js\"],\"Toaster\"]\n6:I[90484,[],\"OutletBoundary\"]\n7:\"$Sreact.suspense\"\n9:I[90484,[],\"ViewportBoundary\"]\nb:I[90484,[],\"MetadataBoundary\"]\nd:I[27123,[],\"\"]\n:HL[\"/_next/static/media/4cf2300e9c8272f7-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/93f479601ee12b01-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/de70bee13400563f.css\",\"style\"]\n:HL[\"/_next/static/css/123c0bb039697968.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"5ULZcR9XhHFzlAZFiSKRl\",\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/de70bee13400563f.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/123c0bb039697968.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"className\":\"__variable_188709 __variable_9a8899 font-sans antialiased\",\"children\":[\"$\",\"$L2\",null,{\"attribute\":\"class\",\"defaultTheme\":\"dark\",\"children\":[[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}],[\"$\",\"$L5\",null,{\"position\":\"bottom-right\"}]]}]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"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,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@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\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@8\"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L9\",null,{\"children\":\"$La\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lb\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lc\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$d\",[]],\"S\":true}\n"])</script><script>self.__next_f.push([1,"a:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"e:I[86869,[],\"IconMark\"]\n8:null\nc:[[\"$\",\"title\",\"0\",{\"children\":\"GSD\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"The evolution of Get Shit Done — now a real coding agent. One command. Walk away. Come back to a built project.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"application-name\",\"content\":\"GSD\"}],[\"$\",\"link\",\"3\",{\"rel\":\"icon\",\"href\":\"/icon-light-32x32.png\",\"media\":\"(prefers-color-scheme: light)\"}],[\"$\",\"link\",\"4\",{\"rel\":\"icon\",\"href\":\"/icon-dark-32x32.png\",\"media\":\"(prefers-color-scheme: dark)\"}],[\"$\",\"link\",\"5\",{\"rel\":\"icon\",\"href\":\"/icon.svg\",\"type\":\"image/svg+xml\"}],[\"$\",\"$Le\",\"6\",{}]]\n"])</script></body></html>
|