regionclaw 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -0
- package/apps/ui/regionclaw-build/BUILD_ID +1 -1
- package/apps/ui/regionclaw-build/app-path-routes-manifest.json +2 -0
- package/apps/ui/regionclaw-build/build-manifest.json +2 -2
- package/apps/ui/regionclaw-build/prerender-manifest.json +0 -48
- package/apps/ui/regionclaw-build/routes-manifest.json +12 -0
- package/apps/ui/regionclaw-build/server/app/(app)/dashboard/page.js +3 -3
- package/apps/ui/regionclaw-build/server/app/(app)/dashboard/page_client-reference-manifest.js +1 -1
- package/apps/ui/regionclaw-build/server/app/_global-error/page.js +3 -3
- package/apps/ui/regionclaw-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/apps/ui/regionclaw-build/server/app/_global-error.html +1 -1
- package/apps/ui/regionclaw-build/server/app/_global-error.rsc +1 -1
- package/apps/ui/regionclaw-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/apps/ui/regionclaw-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/apps/ui/regionclaw-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/apps/ui/regionclaw-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/apps/ui/regionclaw-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/apps/ui/regionclaw-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/apps/ui/regionclaw-build/server/app/_not-found/page.js +2 -2
- package/apps/ui/regionclaw-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/apps/ui/regionclaw-build/server/app/_not-found.html +1 -1
- package/apps/ui/regionclaw-build/server/app/_not-found.rsc +4 -4
- package/apps/ui/regionclaw-build/server/app/_not-found.segments/_full.segment.rsc +4 -4
- package/apps/ui/regionclaw-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/apps/ui/regionclaw-build/server/app/_not-found.segments/_index.segment.rsc +4 -4
- package/apps/ui/regionclaw-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/apps/ui/regionclaw-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/apps/ui/regionclaw-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/apps/ui/regionclaw-build/server/app/api/auth/[...nextauth]/route.js +1 -1
- package/apps/ui/regionclaw-build/server/app/api/auth/first-run/route.js +1 -1
- package/apps/ui/regionclaw-build/server/app/api/trpc/[trpc]/route.js +2 -2
- package/apps/ui/regionclaw-build/server/app/api/update/run/route.js +1 -0
- package/apps/ui/regionclaw-build/server/app/api/update/run/route.js.nft.json +1 -0
- package/apps/ui/regionclaw-build/server/app/api/update/run/route_client-reference-manifest.js +1 -0
- package/apps/ui/regionclaw-build/server/app/api/update/status/route.js +1 -0
- package/apps/ui/regionclaw-build/server/app/api/update/status/route.js.nft.json +1 -0
- package/apps/ui/regionclaw-build/server/app/api/update/status/route_client-reference-manifest.js +1 -0
- package/apps/ui/regionclaw-build/server/app/favicon.ico/route.js +1 -1
- package/apps/ui/regionclaw-build/server/app/login/page.js +2 -2
- package/apps/ui/regionclaw-build/server/app/login/page_client-reference-manifest.js +1 -1
- package/apps/ui/regionclaw-build/server/app/page.js +2 -2
- package/apps/ui/regionclaw-build/server/app/page_client-reference-manifest.js +1 -1
- package/apps/ui/regionclaw-build/server/app/setup/page.js +2 -2
- package/apps/ui/regionclaw-build/server/app/setup/page_client-reference-manifest.js +1 -1
- package/apps/ui/regionclaw-build/server/app-paths-manifest.json +2 -0
- package/apps/ui/regionclaw-build/server/chunks/263.js +2 -2
- package/apps/ui/regionclaw-build/server/chunks/324.js +1 -1
- package/apps/ui/regionclaw-build/server/chunks/902.js +3 -3
- package/apps/ui/regionclaw-build/server/middleware-build-manifest.js +1 -1
- package/apps/ui/regionclaw-build/server/pages/404.html +1 -1
- package/apps/ui/regionclaw-build/server/pages/500.html +1 -1
- package/apps/ui/regionclaw-build/static/ZSgRLh43NEMa5560KIFa0/_buildManifest.js +1 -0
- package/apps/ui/regionclaw-build/static/chunks/557-16373a4e3e7fff4a.js +1 -0
- package/apps/ui/regionclaw-build/static/chunks/609-413da697ed2385f4.js +1 -0
- package/apps/ui/regionclaw-build/static/chunks/{777-2c6a164314456938.js → 835-8d09234672e1cdbd.js} +2 -2
- package/apps/ui/regionclaw-build/static/chunks/app/(app)/dashboard/page-fdd3dce681b59047.js +1 -0
- package/apps/ui/regionclaw-build/static/chunks/app/(app)/layout-16f7ce76f7f41b68.js +1 -0
- package/apps/ui/regionclaw-build/static/chunks/app/_global-error/page-fdd3dce681b59047.js +1 -0
- package/apps/ui/regionclaw-build/static/chunks/app/api/auth/[...nextauth]/route-fdd3dce681b59047.js +1 -0
- package/apps/ui/regionclaw-build/static/chunks/app/api/auth/first-run/route-fdd3dce681b59047.js +1 -0
- package/apps/ui/regionclaw-build/static/chunks/app/api/trpc/[trpc]/route-fdd3dce681b59047.js +1 -0
- package/apps/ui/regionclaw-build/static/chunks/app/api/update/run/route-fdd3dce681b59047.js +1 -0
- package/apps/ui/regionclaw-build/static/chunks/app/api/update/status/route-fdd3dce681b59047.js +1 -0
- package/apps/ui/regionclaw-build/static/chunks/app/{layout-87ffd83df9489fc3.js → layout-812a5dd3c2548265.js} +1 -1
- package/apps/ui/regionclaw-build/static/chunks/app/page-fdd3dce681b59047.js +1 -0
- package/apps/ui/regionclaw-build/static/chunks/next/dist/client/components/builtin/app-error-fdd3dce681b59047.js +1 -0
- package/apps/ui/regionclaw-build/static/chunks/next/dist/client/components/builtin/forbidden-fdd3dce681b59047.js +1 -0
- package/apps/ui/regionclaw-build/static/chunks/next/dist/client/components/builtin/not-found-fdd3dce681b59047.js +1 -0
- package/apps/ui/regionclaw-build/static/chunks/next/dist/client/components/builtin/unauthorized-fdd3dce681b59047.js +1 -0
- package/apps/ui/regionclaw-build/types/app/api/update/run/route.ts +351 -0
- package/apps/ui/regionclaw-build/types/app/api/update/status/route.ts +351 -0
- package/apps/ui/regionclaw-build/types/link.d.ts +2 -0
- package/apps/ui/regionclaw-build/types/routes.d.ts +3 -1
- package/apps/ui/regionclaw-build/types/validator.ts +18 -0
- package/apps/ui/src/app/(app)/layout.tsx +7 -1
- package/apps/ui/src/app/api/update/run/route.ts +36 -0
- package/apps/ui/src/app/api/update/status/route.ts +24 -0
- package/apps/ui/src/components/app-layout-header.tsx +8 -2
- package/apps/ui/src/components/app-sidebar.tsx +3 -0
- package/apps/ui/src/components/regionclaw-update-banner.tsx +229 -0
- package/apps/ui/src/server/regionclaw-meta.ts +3 -0
- package/apps/ui/src/server/update-cli.ts +88 -0
- package/bin/regionclaw.js +357 -3
- package/package.json +1 -1
- package/scripts/restart-running-regionclaw.mjs +54 -0
- package/apps/ui/regionclaw-build/server/app/index.html +0 -1
- package/apps/ui/regionclaw-build/server/app/index.meta +0 -16
- package/apps/ui/regionclaw-build/server/app/index.rsc +0 -21
- package/apps/ui/regionclaw-build/server/app/index.segments/__PAGE__.segment.rsc +0 -6
- package/apps/ui/regionclaw-build/server/app/index.segments/_full.segment.rsc +0 -21
- package/apps/ui/regionclaw-build/server/app/index.segments/_head.segment.rsc +0 -6
- package/apps/ui/regionclaw-build/server/app/index.segments/_index.segment.rsc +0 -9
- package/apps/ui/regionclaw-build/server/app/index.segments/_tree.segment.rsc +0 -5
- package/apps/ui/regionclaw-build/server/app/login.html +0 -1
- package/apps/ui/regionclaw-build/server/app/login.meta +0 -17
- package/apps/ui/regionclaw-build/server/app/login.rsc +0 -23
- package/apps/ui/regionclaw-build/server/app/login.segments/_full.segment.rsc +0 -23
- package/apps/ui/regionclaw-build/server/app/login.segments/_head.segment.rsc +0 -6
- package/apps/ui/regionclaw-build/server/app/login.segments/_index.segment.rsc +0 -9
- package/apps/ui/regionclaw-build/server/app/login.segments/_tree.segment.rsc +0 -5
- package/apps/ui/regionclaw-build/server/app/login.segments/login/__PAGE__.segment.rsc +0 -6
- package/apps/ui/regionclaw-build/server/app/login.segments/login.segment.rsc +0 -5
- package/apps/ui/regionclaw-build/static/chunks/314-50a286a8a2defe3e.js +0 -1
- package/apps/ui/regionclaw-build/static/chunks/774-b72ba79217cd49b6.js +0 -1
- package/apps/ui/regionclaw-build/static/chunks/app/(app)/dashboard/page-ee954e3484be7e8f.js +0 -1
- package/apps/ui/regionclaw-build/static/chunks/app/(app)/layout-8c2cbeb73ce3441e.js +0 -1
- package/apps/ui/regionclaw-build/static/chunks/app/_global-error/page-ee954e3484be7e8f.js +0 -1
- package/apps/ui/regionclaw-build/static/chunks/app/api/auth/[...nextauth]/route-ee954e3484be7e8f.js +0 -1
- package/apps/ui/regionclaw-build/static/chunks/app/api/auth/first-run/route-ee954e3484be7e8f.js +0 -1
- package/apps/ui/regionclaw-build/static/chunks/app/api/trpc/[trpc]/route-ee954e3484be7e8f.js +0 -1
- package/apps/ui/regionclaw-build/static/chunks/app/page-ee954e3484be7e8f.js +0 -1
- package/apps/ui/regionclaw-build/static/chunks/next/dist/client/components/builtin/app-error-ee954e3484be7e8f.js +0 -1
- package/apps/ui/regionclaw-build/static/chunks/next/dist/client/components/builtin/forbidden-ee954e3484be7e8f.js +0 -1
- package/apps/ui/regionclaw-build/static/chunks/next/dist/client/components/builtin/not-found-ee954e3484be7e8f.js +0 -1
- package/apps/ui/regionclaw-build/static/chunks/next/dist/client/components/builtin/unauthorized-ee954e3484be7e8f.js +0 -1
- package/apps/ui/regionclaw-build/static/tx6PZf8zETvK0EvVfqK73/_buildManifest.js +0 -1
- /package/apps/ui/regionclaw-build/static/{tx6PZf8zETvK0EvVfqK73 → ZSgRLh43NEMa5560KIFa0}/_ssgManifest.js +0 -0
package/bin/regionclaw.js
CHANGED
|
@@ -1,16 +1,22 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
const { spawn } = require("node:child_process");
|
|
3
|
+
const { spawn, spawnSync } = require("node:child_process");
|
|
4
4
|
const crypto = require("node:crypto");
|
|
5
5
|
const fs = require("node:fs");
|
|
6
6
|
const os = require("node:os");
|
|
7
7
|
const path = require("node:path");
|
|
8
8
|
|
|
9
|
+
const packageRoot = path.join(__dirname, "..");
|
|
9
10
|
const appDir = path.join(__dirname, "..", "apps", "ui");
|
|
10
11
|
const stateDir = path.join(os.homedir(), ".regionclaw");
|
|
11
12
|
const configFilePath = path.join(stateDir, "regionclaw.json");
|
|
12
13
|
const packagedBuildDir = path.join(appDir, "regionclaw-build");
|
|
13
14
|
const runtimeBuildDir = path.join(appDir, ".next");
|
|
15
|
+
const packageJson = JSON.parse(
|
|
16
|
+
fs.readFileSync(path.join(packageRoot, "package.json"), "utf8"),
|
|
17
|
+
);
|
|
18
|
+
const PACKAGE_NAME = packageJson.name || "regionclaw";
|
|
19
|
+
const PACKAGE_VERSION = packageJson.version || "0.0.0";
|
|
14
20
|
const DEFAULT_PORT = 3180;
|
|
15
21
|
const DEFAULT_HOST = "127.0.0.1";
|
|
16
22
|
|
|
@@ -24,9 +30,12 @@ function printHelp() {
|
|
|
24
30
|
" npx regionclaw --dev",
|
|
25
31
|
" npx regionclaw --port 3000",
|
|
26
32
|
" npx regionclaw --host 127.0.0.1 --port 3000",
|
|
33
|
+
" regionclaw update",
|
|
34
|
+
" regionclaw update status",
|
|
27
35
|
"",
|
|
28
36
|
"Options:",
|
|
29
37
|
" --dev Run in Next.js development mode",
|
|
38
|
+
" --json Print machine-readable JSON for update commands",
|
|
30
39
|
" -p, --port <port> Port to bind. Default: regionclaw.json or 3180",
|
|
31
40
|
" -H, --host <host> Hostname to bind. Default: regionclaw.json or 127.0.0.1",
|
|
32
41
|
" -h, --help Show this help message",
|
|
@@ -37,20 +46,38 @@ function printHelp() {
|
|
|
37
46
|
|
|
38
47
|
function parseArgs(argv) {
|
|
39
48
|
const parsed = {
|
|
49
|
+
command: "start",
|
|
50
|
+
updateAction: "run",
|
|
40
51
|
dev: false,
|
|
41
52
|
port: undefined,
|
|
42
53
|
host: undefined,
|
|
43
54
|
help: false,
|
|
55
|
+
json: false,
|
|
44
56
|
};
|
|
45
57
|
|
|
46
58
|
for (let index = 0; index < argv.length; index += 1) {
|
|
47
59
|
const value = argv[index];
|
|
48
60
|
|
|
61
|
+
if (index === 0 && value === "update") {
|
|
62
|
+
parsed.command = "update";
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if (parsed.command === "update" && value === "status") {
|
|
67
|
+
parsed.updateAction = "status";
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
|
|
49
71
|
if (value === "-h" || value === "--help") {
|
|
50
72
|
parsed.help = true;
|
|
51
73
|
continue;
|
|
52
74
|
}
|
|
53
75
|
|
|
76
|
+
if (value === "--json") {
|
|
77
|
+
parsed.json = true;
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
|
|
54
81
|
if (value === "--dev") {
|
|
55
82
|
parsed.dev = true;
|
|
56
83
|
continue;
|
|
@@ -72,6 +99,320 @@ function parseArgs(argv) {
|
|
|
72
99
|
return parsed;
|
|
73
100
|
}
|
|
74
101
|
|
|
102
|
+
function parseComparableVersion(value) {
|
|
103
|
+
const raw = String(value || "").trim();
|
|
104
|
+
const [mainPart, prereleasePart = ""] = raw.split("-", 2);
|
|
105
|
+
const parts = mainPart.split(".").map((part) => Number.parseInt(part, 10));
|
|
106
|
+
if (parts.length !== 3 || parts.some((part) => !Number.isFinite(part))) {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
return {
|
|
111
|
+
parts,
|
|
112
|
+
prerelease: prereleasePart || null,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
function compareVersions(a, b) {
|
|
117
|
+
const left = parseComparableVersion(a);
|
|
118
|
+
const right = parseComparableVersion(b);
|
|
119
|
+
if (!left || !right) {
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
for (let index = 0; index < 3; index += 1) {
|
|
124
|
+
const diff = left.parts[index] - right.parts[index];
|
|
125
|
+
if (diff !== 0) {
|
|
126
|
+
return diff;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
if (left.prerelease === right.prerelease) {
|
|
131
|
+
return 0;
|
|
132
|
+
}
|
|
133
|
+
if (!left.prerelease) {
|
|
134
|
+
return 1;
|
|
135
|
+
}
|
|
136
|
+
if (!right.prerelease) {
|
|
137
|
+
return -1;
|
|
138
|
+
}
|
|
139
|
+
return left.prerelease.localeCompare(right.prerelease);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
async function fetchLatestPackageVersion(tag = "latest") {
|
|
143
|
+
const response = await fetch(`https://registry.npmjs.org/${PACKAGE_NAME}/${tag}`, {
|
|
144
|
+
headers: {
|
|
145
|
+
accept: "application/json",
|
|
146
|
+
},
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
if (!response.ok) {
|
|
150
|
+
throw new Error(`npm registry request failed with ${response.status}`);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
const payload = await response.json();
|
|
154
|
+
if (!payload || typeof payload.version !== "string") {
|
|
155
|
+
throw new Error("npm registry response did not include a version");
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
return payload.version;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
function safeRealpath(targetPath) {
|
|
162
|
+
try {
|
|
163
|
+
return fs.realpathSync(targetPath);
|
|
164
|
+
} catch {
|
|
165
|
+
return path.resolve(targetPath);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
function runCapturedCommand(command, args) {
|
|
170
|
+
const result = spawnSync(command, args, {
|
|
171
|
+
encoding: "utf8",
|
|
172
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
return {
|
|
176
|
+
ok: !result.error && result.status === 0,
|
|
177
|
+
status: result.status ?? null,
|
|
178
|
+
stdout: result.stdout ?? "",
|
|
179
|
+
stderr: result.stderr ?? "",
|
|
180
|
+
error: result.error ? String(result.error) : null,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
function detectGlobalInstallManager() {
|
|
185
|
+
const packageRootReal = safeRealpath(packageRoot);
|
|
186
|
+
|
|
187
|
+
const candidates = [
|
|
188
|
+
{ manager: "pnpm", command: "pnpm", args: ["root", "-g"] },
|
|
189
|
+
{ manager: "npm", command: "npm", args: ["root", "-g"] },
|
|
190
|
+
];
|
|
191
|
+
|
|
192
|
+
for (const candidate of candidates) {
|
|
193
|
+
const result = runCapturedCommand(candidate.command, candidate.args);
|
|
194
|
+
if (!result.ok) {
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
const globalRoot = result.stdout.trim();
|
|
199
|
+
if (!globalRoot) {
|
|
200
|
+
continue;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
const installedPackageRoot = safeRealpath(path.join(globalRoot, PACKAGE_NAME));
|
|
204
|
+
if (installedPackageRoot === packageRootReal) {
|
|
205
|
+
return candidate.manager;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
return null;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
function detectInstallKind(globalManager) {
|
|
213
|
+
if (globalManager) {
|
|
214
|
+
return "global";
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
const currentRoot = safeRealpath(packageRoot);
|
|
218
|
+
const home = os.homedir();
|
|
219
|
+
const npxMarkers = [
|
|
220
|
+
path.join(home, ".npm", "_npx"),
|
|
221
|
+
path.join(home, "Library", "Caches", "pnpm", "dlx"),
|
|
222
|
+
path.join(home, ".local", "share", "pnpm", "dlx"),
|
|
223
|
+
path.join(home, ".bun"),
|
|
224
|
+
];
|
|
225
|
+
|
|
226
|
+
if (npxMarkers.some((marker) => currentRoot.includes(marker))) {
|
|
227
|
+
return "npx";
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
return "local";
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
function buildRecommendedUpdateCommand(installKind, packageManager, version = "latest") {
|
|
234
|
+
const spec = `${PACKAGE_NAME}@${version}`;
|
|
235
|
+
|
|
236
|
+
if (installKind === "global" && packageManager === "pnpm") {
|
|
237
|
+
return `pnpm add -g ${spec}`;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
if (installKind === "global") {
|
|
241
|
+
return `npm install -g ${spec}`;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
if (installKind === "npx") {
|
|
245
|
+
return `npx --yes ${spec}`;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
return null;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
async function getUpdateStatus() {
|
|
252
|
+
const packageManager = detectGlobalInstallManager() || "unknown";
|
|
253
|
+
const installKind = detectInstallKind(packageManager === "unknown" ? null : packageManager);
|
|
254
|
+
|
|
255
|
+
try {
|
|
256
|
+
const latestVersion = await fetchLatestPackageVersion("latest");
|
|
257
|
+
const versionDiff = compareVersions(latestVersion, PACKAGE_VERSION);
|
|
258
|
+
const updateAvailable = versionDiff != null ? versionDiff > 0 : latestVersion !== PACKAGE_VERSION;
|
|
259
|
+
|
|
260
|
+
return {
|
|
261
|
+
ok: true,
|
|
262
|
+
packageName: PACKAGE_NAME,
|
|
263
|
+
currentVersion: PACKAGE_VERSION,
|
|
264
|
+
latestVersion,
|
|
265
|
+
updateAvailable,
|
|
266
|
+
installKind,
|
|
267
|
+
packageManager,
|
|
268
|
+
canUpdateInPlace: installKind === "global",
|
|
269
|
+
recommendedCommand: buildRecommendedUpdateCommand(installKind, packageManager),
|
|
270
|
+
};
|
|
271
|
+
} catch (error) {
|
|
272
|
+
return {
|
|
273
|
+
ok: false,
|
|
274
|
+
packageName: PACKAGE_NAME,
|
|
275
|
+
currentVersion: PACKAGE_VERSION,
|
|
276
|
+
latestVersion: null,
|
|
277
|
+
updateAvailable: false,
|
|
278
|
+
installKind,
|
|
279
|
+
packageManager,
|
|
280
|
+
canUpdateInPlace: false,
|
|
281
|
+
recommendedCommand: buildRecommendedUpdateCommand(installKind, packageManager),
|
|
282
|
+
error: error instanceof Error ? error.message : String(error),
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
function printJson(payload) {
|
|
288
|
+
process.stdout.write(`${JSON.stringify(payload, null, 2)}\n`);
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
function printUpdateStatus(status) {
|
|
292
|
+
if (!status.ok) {
|
|
293
|
+
process.stderr.write(
|
|
294
|
+
`Failed to check for RegionClaw updates: ${status.error || "unknown error"}\n`,
|
|
295
|
+
);
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
process.stdout.write(`RegionClaw v${status.currentVersion}\n`);
|
|
300
|
+
process.stdout.write(`Latest: ${status.latestVersion}\n`);
|
|
301
|
+
process.stdout.write(`Install: ${status.installKind} (${status.packageManager})\n`);
|
|
302
|
+
|
|
303
|
+
if (!status.updateAvailable) {
|
|
304
|
+
process.stdout.write("RegionClaw is already up to date.\n");
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
process.stdout.write(`Update available: v${status.latestVersion}\n`);
|
|
309
|
+
if (status.recommendedCommand) {
|
|
310
|
+
process.stdout.write(`Run: ${status.recommendedCommand}\n`);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
function runInstallCommand(command, args) {
|
|
315
|
+
const result = spawnSync(command, args, {
|
|
316
|
+
encoding: "utf8",
|
|
317
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
318
|
+
});
|
|
319
|
+
|
|
320
|
+
return {
|
|
321
|
+
ok: !result.error && result.status === 0,
|
|
322
|
+
status: result.status ?? null,
|
|
323
|
+
stdout: result.stdout ?? "",
|
|
324
|
+
stderr: result.stderr ?? "",
|
|
325
|
+
error: result.error ? String(result.error) : null,
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
async function runUpdateAction(args) {
|
|
330
|
+
const status = await getUpdateStatus();
|
|
331
|
+
|
|
332
|
+
if (args.updateAction === "status") {
|
|
333
|
+
if (args.json) {
|
|
334
|
+
printJson(status);
|
|
335
|
+
return status.ok ? 0 : 1;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
printUpdateStatus(status);
|
|
339
|
+
return status.ok ? 0 : 1;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
if (!status.ok) {
|
|
343
|
+
const result = {
|
|
344
|
+
...status,
|
|
345
|
+
status: "error",
|
|
346
|
+
message: status.error || "Failed to check for updates.",
|
|
347
|
+
};
|
|
348
|
+
if (args.json) {
|
|
349
|
+
printJson(result);
|
|
350
|
+
} else {
|
|
351
|
+
process.stderr.write(`${result.message}\n`);
|
|
352
|
+
}
|
|
353
|
+
return 1;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
if (!status.updateAvailable) {
|
|
357
|
+
const result = {
|
|
358
|
+
...status,
|
|
359
|
+
status: "already-current",
|
|
360
|
+
message: `RegionClaw is already on v${status.currentVersion}.`,
|
|
361
|
+
};
|
|
362
|
+
if (args.json) {
|
|
363
|
+
printJson(result);
|
|
364
|
+
} else {
|
|
365
|
+
process.stdout.write(`${result.message}\n`);
|
|
366
|
+
}
|
|
367
|
+
return 0;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
if (!status.canUpdateInPlace) {
|
|
371
|
+
const result = {
|
|
372
|
+
...status,
|
|
373
|
+
status: "manual",
|
|
374
|
+
message: status.recommendedCommand
|
|
375
|
+
? `This install cannot self-update in place. Run: ${status.recommendedCommand}`
|
|
376
|
+
: "This install cannot self-update in place.",
|
|
377
|
+
requiresRestart: false,
|
|
378
|
+
};
|
|
379
|
+
if (args.json) {
|
|
380
|
+
printJson(result);
|
|
381
|
+
} else {
|
|
382
|
+
process.stdout.write(`${result.message}\n`);
|
|
383
|
+
}
|
|
384
|
+
return 0;
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
const installArgs =
|
|
388
|
+
status.packageManager === "pnpm"
|
|
389
|
+
? ["add", "-g", `${PACKAGE_NAME}@latest`]
|
|
390
|
+
: ["install", "-g", `${PACKAGE_NAME}@latest`, "--no-fund", "--no-audit", "--loglevel=error"];
|
|
391
|
+
const command = status.packageManager === "pnpm" ? "pnpm" : "npm";
|
|
392
|
+
const install = runInstallCommand(command, installArgs);
|
|
393
|
+
const result = {
|
|
394
|
+
...status,
|
|
395
|
+
status: install.ok ? "updated" : "error",
|
|
396
|
+
requiresRestart: install.ok,
|
|
397
|
+
message: install.ok
|
|
398
|
+
? `RegionClaw updated to v${status.latestVersion}. Restart RegionClaw to use the new version.`
|
|
399
|
+
: install.error || install.stderr.trim() || `Update command exited with ${install.status ?? "unknown"}.`,
|
|
400
|
+
command: `${command} ${installArgs.join(" ")}`,
|
|
401
|
+
stdout: install.stdout.trim() || null,
|
|
402
|
+
stderr: install.stderr.trim() || null,
|
|
403
|
+
};
|
|
404
|
+
|
|
405
|
+
if (args.json) {
|
|
406
|
+
printJson(result);
|
|
407
|
+
} else if (install.ok) {
|
|
408
|
+
process.stdout.write(`${result.message}\n`);
|
|
409
|
+
} else {
|
|
410
|
+
process.stderr.write(`${result.message}\n`);
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
return install.ok ? 0 : 1;
|
|
414
|
+
}
|
|
415
|
+
|
|
75
416
|
function defaultConfig() {
|
|
76
417
|
return {
|
|
77
418
|
meta: {
|
|
@@ -132,13 +473,18 @@ function ensureProductionBuild() {
|
|
|
132
473
|
fs.cpSync(packagedBuildDir, runtimeBuildDir, { recursive: true });
|
|
133
474
|
}
|
|
134
475
|
|
|
135
|
-
function main() {
|
|
476
|
+
async function main() {
|
|
136
477
|
const args = parseArgs(process.argv.slice(2));
|
|
137
478
|
if (args.help) {
|
|
138
479
|
printHelp();
|
|
139
480
|
return;
|
|
140
481
|
}
|
|
141
482
|
|
|
483
|
+
if (args.command === "update") {
|
|
484
|
+
process.exitCode = await runUpdateAction(args);
|
|
485
|
+
return;
|
|
486
|
+
}
|
|
487
|
+
|
|
142
488
|
const config = loadOrCreateConfig();
|
|
143
489
|
const port = String(args.port || process.env.PORT || config.server?.port || DEFAULT_PORT);
|
|
144
490
|
const host = String(args.host || process.env.HOST || config.server?.host || DEFAULT_HOST);
|
|
@@ -180,6 +526,11 @@ function main() {
|
|
|
180
526
|
PORT: port,
|
|
181
527
|
HOST: host,
|
|
182
528
|
DATABASE_URL: databaseUrl,
|
|
529
|
+
REGIONCLAW_HOST: host,
|
|
530
|
+
REGIONCLAW_PORT: port,
|
|
531
|
+
REGIONCLAW_PARENT_PID: String(process.pid),
|
|
532
|
+
REGIONCLAW_PACKAGE_ROOT: packageRoot,
|
|
533
|
+
REGIONCLAW_VERSION: PACKAGE_VERSION,
|
|
183
534
|
NEXTAUTH_SECRET: nextAuthSecret,
|
|
184
535
|
NEXTAUTH_URL: nextAuthUrl,
|
|
185
536
|
},
|
|
@@ -205,4 +556,7 @@ function main() {
|
|
|
205
556
|
});
|
|
206
557
|
}
|
|
207
558
|
|
|
208
|
-
main()
|
|
559
|
+
main().catch((error) => {
|
|
560
|
+
process.stderr.write(`${error instanceof Error ? error.stack || error.message : String(error)}\n`);
|
|
561
|
+
process.exit(1);
|
|
562
|
+
});
|
package/package.json
CHANGED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
|
|
4
|
+
const [parentPidRaw, binPath, host, port] = process.argv.slice(2);
|
|
5
|
+
const parentPid = Number.parseInt(parentPidRaw ?? "", 10);
|
|
6
|
+
|
|
7
|
+
function sleep(ms) {
|
|
8
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function isPidRunning(pid) {
|
|
12
|
+
if (!Number.isFinite(pid) || pid <= 0) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
try {
|
|
17
|
+
process.kill(pid, 0);
|
|
18
|
+
return true;
|
|
19
|
+
} catch {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
async function main() {
|
|
25
|
+
if (!Number.isFinite(parentPid) || !binPath || !host || !port) {
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
try {
|
|
30
|
+
process.kill(parentPid, "SIGTERM");
|
|
31
|
+
} catch {
|
|
32
|
+
// Parent may already be gone.
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
for (let attempt = 0; attempt < 40; attempt += 1) {
|
|
36
|
+
if (!isPidRunning(parentPid)) {
|
|
37
|
+
break;
|
|
38
|
+
}
|
|
39
|
+
await sleep(250);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const child = spawn(process.execPath, [binPath, "--host", host, "--port", port], {
|
|
43
|
+
cwd: path.resolve(path.dirname(binPath), ".."),
|
|
44
|
+
detached: true,
|
|
45
|
+
stdio: "ignore",
|
|
46
|
+
env: process.env,
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
child.unref();
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
main().catch(() => {
|
|
53
|
+
process.exit(1);
|
|
54
|
+
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-95e4dbce7bf11a3e.js"/><script src="/_next/static/chunks/628c8b96-cdfc45e32fce7014.js" async=""></script><script src="/_next/static/chunks/16-7d9bc77e936a4cb6.js" async=""></script><script src="/_next/static/chunks/main-app-e0f42b94daafe3ad.js" async=""></script><title>RegionClaw</title><meta name="description" content="RegionClaw workspace scaffold"/><link rel="icon" href="/favicon.ico?603d046c9a6fdfbb" type="image/x-icon" sizes="16x16"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><script src="/_next/static/chunks/webpack-95e4dbce7bf11a3e.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[1827,[\"473\",\"static/chunks/473-41dc1131ba74f205.js\",\"774\",\"static/chunks/774-b72ba79217cd49b6.js\",\"314\",\"static/chunks/314-50a286a8a2defe3e.js\",\"177\",\"static/chunks/app/layout-87ffd83df9489fc3.js\"],\"Providers\"]\n3:I[7434,[\"473\",\"static/chunks/473-41dc1131ba74f205.js\",\"774\",\"static/chunks/774-b72ba79217cd49b6.js\",\"314\",\"static/chunks/314-50a286a8a2defe3e.js\",\"177\",\"static/chunks/app/layout-87ffd83df9489fc3.js\"],\"TooltipProvider\"]\n4:I[1166,[],\"\"]\n5:I[6660,[],\"\"]\n6:I[3222,[\"473\",\"static/chunks/473-41dc1131ba74f205.js\",\"774\",\"static/chunks/774-b72ba79217cd49b6.js\",\"314\",\"static/chunks/314-50a286a8a2defe3e.js\",\"177\",\"static/chunks/app/layout-87ffd83df9489fc3.js\"],\"Toaster\"]\n8:I[8007,[],\"OutletBoundary\"]\n9:\"$Sreact.suspense\"\nb:I[8007,[],\"ViewportBoundary\"]\nd:I[8007,[],\"MetadataBoundary\"]\nf:I[1702,[],\"default\",1]\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/9a04963144d959d5.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$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/9a04963144d959d5.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"className\":\"__variable_188709 __variable_9a8899 h-full antialiased\",\"children\":[\"$\",\"body\",null,{\"className\":\"flex min-h-full flex-col bg-background\",\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"children\":[[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"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.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}],[\"$\",\"$L6\",null,{}]]}]}]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[\"$L7\",null,[\"$\",\"$L8\",null,{\"children\":[\"$\",\"$9\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@a\"}]}]]}],{},null,false,null]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$Lb\",null,{\"children\":\"$Lc\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Ld\",null,{\"children\":[\"$\",\"$9\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Le\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$f\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"tx6PZf8zETvK0EvVfqK73\"}\n"])</script><script>self.__next_f.push([1,"c:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"7:E{\"digest\":\"NEXT_REDIRECT;replace;/setup;307;\"}\n"])</script><script>self.__next_f.push([1,"10:I[5766,[],\"IconMark\"]\na:null\ne:[[\"$\",\"title\",\"0\",{\"children\":\"RegionClaw\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"RegionClaw workspace scaffold\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?603d046c9a6fdfbb\",\"type\":\"image/x-icon\",\"sizes\":\"16x16\"}],[\"$\",\"$L10\",\"3\",{}]]\n"])</script></body></html>
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"status": 307,
|
|
3
|
-
"headers": {
|
|
4
|
-
"location": "/setup",
|
|
5
|
-
"x-nextjs-stale-time": "300",
|
|
6
|
-
"x-nextjs-prerender": "1",
|
|
7
|
-
"x-next-cache-tags": "_N_T_/layout,_N_T_/page,_N_T_/,_N_T_/index"
|
|
8
|
-
},
|
|
9
|
-
"segmentPaths": [
|
|
10
|
-
"/_tree",
|
|
11
|
-
"/_full",
|
|
12
|
-
"/__PAGE__",
|
|
13
|
-
"/_index",
|
|
14
|
-
"/_head"
|
|
15
|
-
]
|
|
16
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
1:"$Sreact.fragment"
|
|
2
|
-
2:I[1827,["473","static/chunks/473-41dc1131ba74f205.js","774","static/chunks/774-b72ba79217cd49b6.js","314","static/chunks/314-50a286a8a2defe3e.js","177","static/chunks/app/layout-87ffd83df9489fc3.js"],"Providers"]
|
|
3
|
-
3:I[7434,["473","static/chunks/473-41dc1131ba74f205.js","774","static/chunks/774-b72ba79217cd49b6.js","314","static/chunks/314-50a286a8a2defe3e.js","177","static/chunks/app/layout-87ffd83df9489fc3.js"],"TooltipProvider"]
|
|
4
|
-
4:I[1166,[],""]
|
|
5
|
-
5:I[6660,[],""]
|
|
6
|
-
6:I[3222,["473","static/chunks/473-41dc1131ba74f205.js","774","static/chunks/774-b72ba79217cd49b6.js","314","static/chunks/314-50a286a8a2defe3e.js","177","static/chunks/app/layout-87ffd83df9489fc3.js"],"Toaster"]
|
|
7
|
-
8:I[8007,[],"OutletBoundary"]
|
|
8
|
-
9:"$Sreact.suspense"
|
|
9
|
-
b:I[8007,[],"ViewportBoundary"]
|
|
10
|
-
d:I[8007,[],"MetadataBoundary"]
|
|
11
|
-
f:I[1702,[],"default",1]
|
|
12
|
-
:HL["/_next/static/media/4cf2300e9c8272f7-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
|
|
13
|
-
:HL["/_next/static/media/93f479601ee12b01-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
|
|
14
|
-
:HL["/_next/static/css/de70bee13400563f.css","style"]
|
|
15
|
-
:HL["/_next/static/css/9a04963144d959d5.css","style"]
|
|
16
|
-
0:{"P":null,"c":["",""],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",16],[["$","$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/9a04963144d959d5.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"className":"__variable_188709 __variable_9a8899 h-full antialiased","children":["$","body",null,{"className":"flex min-h-full flex-col bg-background","children":["$","$L2",null,{"children":["$","$L3",null,{"children":[["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","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."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$L6",null,{}]]}]}]}]}]]}],{"children":[["$","$1","c",{"children":["$L7",null,["$","$L8",null,{"children":["$","$9",null,{"name":"Next.MetadataOutlet","children":"$@a"}]}]]}],{},null,false,null]},null,false,null],["$","$1","h",{"children":[null,["$","$Lb",null,{"children":"$Lc"}],["$","div",null,{"hidden":true,"children":["$","$Ld",null,{"children":["$","$9",null,{"name":"Next.Metadata","children":"$Le"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$f",[]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"tx6PZf8zETvK0EvVfqK73"}
|
|
17
|
-
c:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
|
|
18
|
-
7:E{"digest":"NEXT_REDIRECT;replace;/setup;307;"}
|
|
19
|
-
10:I[5766,[],"IconMark"]
|
|
20
|
-
a:null
|
|
21
|
-
e:[["$","title","0",{"children":"RegionClaw"}],["$","meta","1",{"name":"description","content":"RegionClaw workspace scaffold"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?603d046c9a6fdfbb","type":"image/x-icon","sizes":"16x16"}],["$","$L10","3",{}]]
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
1:"$Sreact.fragment"
|
|
2
|
-
3:I[8007,[],"OutletBoundary"]
|
|
3
|
-
4:"$Sreact.suspense"
|
|
4
|
-
0:{"rsc":["$","$1","c",{"children":["$L2",null,["$","$L3",null,{"children":["$","$4",null,{"name":"Next.MetadataOutlet","children":"$@5"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"tx6PZf8zETvK0EvVfqK73"}
|
|
5
|
-
5:null
|
|
6
|
-
2:E{"digest":"NEXT_REDIRECT;replace;/setup;307;"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
1:"$Sreact.fragment"
|
|
2
|
-
2:I[1827,["473","static/chunks/473-41dc1131ba74f205.js","774","static/chunks/774-b72ba79217cd49b6.js","314","static/chunks/314-50a286a8a2defe3e.js","177","static/chunks/app/layout-87ffd83df9489fc3.js"],"Providers"]
|
|
3
|
-
3:I[7434,["473","static/chunks/473-41dc1131ba74f205.js","774","static/chunks/774-b72ba79217cd49b6.js","314","static/chunks/314-50a286a8a2defe3e.js","177","static/chunks/app/layout-87ffd83df9489fc3.js"],"TooltipProvider"]
|
|
4
|
-
4:I[1166,[],""]
|
|
5
|
-
5:I[6660,[],""]
|
|
6
|
-
6:I[3222,["473","static/chunks/473-41dc1131ba74f205.js","774","static/chunks/774-b72ba79217cd49b6.js","314","static/chunks/314-50a286a8a2defe3e.js","177","static/chunks/app/layout-87ffd83df9489fc3.js"],"Toaster"]
|
|
7
|
-
8:I[8007,[],"OutletBoundary"]
|
|
8
|
-
9:"$Sreact.suspense"
|
|
9
|
-
b:I[8007,[],"ViewportBoundary"]
|
|
10
|
-
d:I[8007,[],"MetadataBoundary"]
|
|
11
|
-
f:I[1702,[],"default",1]
|
|
12
|
-
:HL["/_next/static/media/4cf2300e9c8272f7-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
|
|
13
|
-
:HL["/_next/static/media/93f479601ee12b01-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
|
|
14
|
-
:HL["/_next/static/css/de70bee13400563f.css","style"]
|
|
15
|
-
:HL["/_next/static/css/9a04963144d959d5.css","style"]
|
|
16
|
-
0:{"P":null,"c":["",""],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",16],[["$","$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/9a04963144d959d5.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"className":"__variable_188709 __variable_9a8899 h-full antialiased","children":["$","body",null,{"className":"flex min-h-full flex-col bg-background","children":["$","$L2",null,{"children":["$","$L3",null,{"children":[["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","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."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$L6",null,{}]]}]}]}]}]]}],{"children":[["$","$1","c",{"children":["$L7",null,["$","$L8",null,{"children":["$","$9",null,{"name":"Next.MetadataOutlet","children":"$@a"}]}]]}],{},null,false,null]},null,false,null],["$","$1","h",{"children":[null,["$","$Lb",null,{"children":"$Lc"}],["$","div",null,{"hidden":true,"children":["$","$Ld",null,{"children":["$","$9",null,{"name":"Next.Metadata","children":"$Le"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$f",[]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"tx6PZf8zETvK0EvVfqK73"}
|
|
17
|
-
c:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
|
|
18
|
-
7:E{"digest":"NEXT_REDIRECT;replace;/setup;307;"}
|
|
19
|
-
10:I[5766,[],"IconMark"]
|
|
20
|
-
a:null
|
|
21
|
-
e:[["$","title","0",{"children":"RegionClaw"}],["$","meta","1",{"name":"description","content":"RegionClaw workspace scaffold"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?603d046c9a6fdfbb","type":"image/x-icon","sizes":"16x16"}],["$","$L10","3",{}]]
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
1:"$Sreact.fragment"
|
|
2
|
-
2:I[8007,[],"ViewportBoundary"]
|
|
3
|
-
3:I[8007,[],"MetadataBoundary"]
|
|
4
|
-
4:"$Sreact.suspense"
|
|
5
|
-
5:I[5766,[],"IconMark"]
|
|
6
|
-
0:{"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":[["$","title","0",{"children":"RegionClaw"}],["$","meta","1",{"name":"description","content":"RegionClaw workspace scaffold"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?603d046c9a6fdfbb","type":"image/x-icon","sizes":"16x16"}],["$","$L5","3",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"tx6PZf8zETvK0EvVfqK73"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
1:"$Sreact.fragment"
|
|
2
|
-
2:I[1827,["473","static/chunks/473-41dc1131ba74f205.js","774","static/chunks/774-b72ba79217cd49b6.js","314","static/chunks/314-50a286a8a2defe3e.js","177","static/chunks/app/layout-87ffd83df9489fc3.js"],"Providers"]
|
|
3
|
-
3:I[7434,["473","static/chunks/473-41dc1131ba74f205.js","774","static/chunks/774-b72ba79217cd49b6.js","314","static/chunks/314-50a286a8a2defe3e.js","177","static/chunks/app/layout-87ffd83df9489fc3.js"],"TooltipProvider"]
|
|
4
|
-
4:I[1166,[],""]
|
|
5
|
-
5:I[6660,[],""]
|
|
6
|
-
6:I[3222,["473","static/chunks/473-41dc1131ba74f205.js","774","static/chunks/774-b72ba79217cd49b6.js","314","static/chunks/314-50a286a8a2defe3e.js","177","static/chunks/app/layout-87ffd83df9489fc3.js"],"Toaster"]
|
|
7
|
-
:HL["/_next/static/css/de70bee13400563f.css","style"]
|
|
8
|
-
:HL["/_next/static/css/9a04963144d959d5.css","style"]
|
|
9
|
-
0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/de70bee13400563f.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/9a04963144d959d5.css","precedence":"next"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"className":"__variable_188709 __variable_9a8899 h-full antialiased","children":["$","body",null,{"className":"flex min-h-full flex-col bg-background","children":["$","$L2",null,{"children":["$","$L3",null,{"children":[["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","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."}]}]]}]}]],[]]}],["$","$L6",null,{}]]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"tx6PZf8zETvK0EvVfqK73"}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
:HL["/_next/static/media/4cf2300e9c8272f7-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
|
|
2
|
-
:HL["/_next/static/media/93f479601ee12b01-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
|
|
3
|
-
:HL["/_next/static/css/de70bee13400563f.css","style"]
|
|
4
|
-
:HL["/_next/static/css/9a04963144d959d5.css","style"]
|
|
5
|
-
0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}},"staleTime":300,"buildId":"tx6PZf8zETvK0EvVfqK73"}
|