denchclaw 2.4.5 → 2.4.6
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/apps/web/.next/standalone/apps/web/.next/BUILD_ID +1 -1
- package/apps/web/.next/standalone/apps/web/.next/app-build-manifest.json +94 -94
- package/apps/web/.next/standalone/apps/web/.next/app-path-routes-manifest.json +26 -26
- package/apps/web/.next/standalone/apps/web/.next/build-manifest.json +2 -2
- package/apps/web/.next/standalone/apps/web/.next/cache/config.json +3 -3
- package/apps/web/.next/standalone/apps/web/.next/prerender-manifest.json +3 -3
- package/apps/web/.next/standalone/apps/web/.next/required-server-files.json +1 -1
- package/apps/web/.next/standalone/apps/web/.next/routes-manifest.json +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/apps/cron/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/apps/proxy/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/apps/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/apps/serve/[...path]/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/apps/store/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/apps/webhooks/[...path]/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/active/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/route.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/runs/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/stop/route.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/stop/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/stream/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/subagents/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/cron/jobs/[jobId]/runs/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/cron/jobs/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/cron/runs/[sessionId]/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/cron/runs/search-transcript/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/feedback/route.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/feedback/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/gateway/channels/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/gateway/chat/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/gateway/chat/stream/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/gateway/sessions/[id]/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/gateway/sessions/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/memories/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/profiles/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/profiles/switch/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/sessions/[sessionId]/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/sessions/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/terminal/port/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/web-sessions/[id]/messages/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/web-sessions/[id]/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/web-sessions/route.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/web-sessions/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/assets/[...path]/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/browse/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/browse-file/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/context/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/copy/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/db/introspect/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/db/query/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/delete/route.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/delete/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/execute/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/file/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/init/route.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/init/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/link-preview/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/list/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/mkdir/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/move/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/actions/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/actions/runs/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/display-field/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/entries/[id]/content/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/entries/[id]/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/entries/bulk-delete/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/entries/options/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/entries/route.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/entries/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/fields/[fieldId]/enum-rename/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/fields/[fieldId]/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/fields/reorder/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/fields/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/views/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/open-file/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/path-info/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/query/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/raw-file/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/rename/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/reports/execute/route.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/reports/execute/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/search-index/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/suggest-files/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/switch/route.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/switch/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/thumbnail/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/tree/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/upload/route.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/upload/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/virtual-file/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/watch/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/write-binary/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/page.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/page_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/workspace/page_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app-paths-manifest.json +26 -26
- package/apps/web/.next/standalone/apps/web/.next/server/chunks/6787.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/functions-config-manifest.json +4 -4
- package/apps/web/.next/standalone/apps/web/.next/server/pages/500.html +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/server-reference-manifest.json +1 -1
- package/apps/web/.next/{static/chunks/app/layout-a597017db7df698d.js → standalone/apps/web/.next/static/chunks/app/layout-3b33b798ff1504e9.js} +1 -1
- package/apps/web/.next/{static/chunks/app/page-6702f960a7cc2d6f.js → standalone/apps/web/.next/static/chunks/app/page-c8e88d7669047677.js} +1 -1
- package/apps/web/.next/standalone/apps/web/server.js +1 -1
- package/apps/web/.next/standalone/package.json +1 -1
- package/apps/web/.next/{standalone/apps/web/.next/static/chunks/app/layout-a597017db7df698d.js → static/chunks/app/layout-3b33b798ff1504e9.js} +1 -1
- package/apps/web/.next/{standalone/apps/web/.next/static/chunks/app/page-6702f960a7cc2d6f.js → static/chunks/app/page-c8e88d7669047677.js} +1 -1
- package/dist/entry.js +1 -1
- package/dist/{program-D2RfLoKh.js → program-BDz7WHcZ.js} +188 -1
- package/dist/{run-main-giTi_or5.js → run-main-Ddx9Tsa1.js} +1 -1
- package/extensions/posthog-analytics/lib/build-env.js +1 -1
- package/package.json +1 -1
- /package/apps/web/.next/standalone/apps/web/.next/static/{6km2S2lfAi2PQ3TlStEAM → bHQQHboaVXn6uVyBK8na1}/_buildManifest.js +0 -0
- /package/apps/web/.next/standalone/apps/web/.next/static/{6km2S2lfAi2PQ3TlStEAM → bHQQHboaVXn6uVyBK8na1}/_ssgManifest.js +0 -0
- /package/apps/web/.next/static/{6km2S2lfAi2PQ3TlStEAM → bHQQHboaVXn6uVyBK8na1}/_buildManifest.js +0 -0
- /package/apps/web/.next/static/{6km2S2lfAi2PQ3TlStEAM → bHQQHboaVXn6uVyBK8na1}/_ssgManifest.js +0 -0
package/dist/entry.js
CHANGED
|
@@ -1147,7 +1147,7 @@ if (!ensureExperimentalWarningSuppressed()) {
|
|
|
1147
1147
|
const appliedProfile = applyCliProfileEnv({ profile: parsed.profile ?? void 0 });
|
|
1148
1148
|
if (appliedProfile.warning) console.warn(`[denchclaw] ${appliedProfile.warning}`);
|
|
1149
1149
|
process$1.argv = parsed.argv;
|
|
1150
|
-
import("./run-main-
|
|
1150
|
+
import("./run-main-Ddx9Tsa1.js").then(({ runCli }) => runCli(process$1.argv)).then(() => import("./telemetry-DguRjCZq.js").then((n) => n.n).then(({ shutdownTelemetry }) => shutdownTelemetry())).catch((error) => {
|
|
1151
1151
|
console.error("[denchclaw] Failed to start CLI:", error instanceof Error ? error.stack ?? error.message : error);
|
|
1152
1152
|
process$1.exitCode = 1;
|
|
1153
1153
|
});
|
|
@@ -1548,6 +1548,15 @@ const OPENCLAW_CLI_CHECK_CACHE_TTL_MS = 5 * 6e4;
|
|
|
1548
1548
|
const OPENCLAW_UPDATE_PROMPT_SUPPRESS_AFTER_INSTALL_MS = 5 * 6e4;
|
|
1549
1549
|
const OPENCLAW_CLI_CHECK_CACHE_FILE = "openclaw-cli-check.json";
|
|
1550
1550
|
const OPENCLAW_SETUP_PROGRESS_BAR_WIDTH = 16;
|
|
1551
|
+
const BOOTSTRAP_DEVICE_PAIRING_COMMAND_TIMEOUT_MS = 1e4;
|
|
1552
|
+
const BOOTSTRAP_DEVICE_PAIRING_POLL_DELAY_MS = 500;
|
|
1553
|
+
const READY_WEB_DEVICE_PAIRING_POLL_ATTEMPTS = 1;
|
|
1554
|
+
const UNREADY_WEB_DEVICE_PAIRING_POLL_ATTEMPTS = 4;
|
|
1555
|
+
const BOOTSTRAP_DEVICE_PAIRING_REQUIRED_SCOPES = [
|
|
1556
|
+
"operator.read",
|
|
1557
|
+
"operator.write",
|
|
1558
|
+
"operator.pairing"
|
|
1559
|
+
];
|
|
1551
1560
|
function resolveCommandForPlatform(command) {
|
|
1552
1561
|
if (process$1.platform !== "win32") return command;
|
|
1553
1562
|
if (path.extname(command)) return command;
|
|
@@ -1693,9 +1702,15 @@ function resolveGatewayLaunchAgentLabel(profile) {
|
|
|
1693
1702
|
function uniqueStrings(values) {
|
|
1694
1703
|
return [...new Set(values.map((value) => value.trim()).filter(Boolean))];
|
|
1695
1704
|
}
|
|
1705
|
+
function toStringArray(value) {
|
|
1706
|
+
return Array.isArray(value) ? value.filter((item) => typeof item === "string") : [];
|
|
1707
|
+
}
|
|
1696
1708
|
function asRecord(value) {
|
|
1697
1709
|
return value && typeof value === "object" && !Array.isArray(value) ? value : void 0;
|
|
1698
1710
|
}
|
|
1711
|
+
function toFiniteNumber(value) {
|
|
1712
|
+
return typeof value === "number" && Number.isFinite(value) ? value : void 0;
|
|
1713
|
+
}
|
|
1699
1714
|
function normalizeFilesystemPath(value) {
|
|
1700
1715
|
try {
|
|
1701
1716
|
return realpathSync.native(value);
|
|
@@ -2056,6 +2071,156 @@ function parseJsonPayload(raw) {
|
|
|
2056
2071
|
}
|
|
2057
2072
|
}
|
|
2058
2073
|
}
|
|
2074
|
+
function normalizeDeviceListEntry(value) {
|
|
2075
|
+
const record = asRecord(value);
|
|
2076
|
+
if (!record) return;
|
|
2077
|
+
return {
|
|
2078
|
+
requestId: typeof record.requestId === "string" ? record.requestId : typeof record.id === "string" ? record.id : void 0,
|
|
2079
|
+
deviceId: typeof record.deviceId === "string" ? record.deviceId : void 0,
|
|
2080
|
+
clientId: typeof record.clientId === "string" ? record.clientId : void 0,
|
|
2081
|
+
clientMode: typeof record.clientMode === "string" ? record.clientMode : void 0,
|
|
2082
|
+
platform: typeof record.platform === "string" ? record.platform : void 0,
|
|
2083
|
+
role: typeof record.role === "string" ? record.role : void 0,
|
|
2084
|
+
roles: uniqueStrings(toStringArray(record.roles)),
|
|
2085
|
+
scopes: uniqueStrings(toStringArray(record.scopes)),
|
|
2086
|
+
createdAtMs: toFiniteNumber(record.createdAtMs) ?? toFiniteNumber(record.requestedAtMs) ?? toFiniteNumber(record.updatedAtMs)
|
|
2087
|
+
};
|
|
2088
|
+
}
|
|
2089
|
+
function parsePendingDeviceRequests(raw) {
|
|
2090
|
+
const payload = parseJsonPayload(raw);
|
|
2091
|
+
if (!payload) return;
|
|
2092
|
+
if (!Array.isArray(payload.pending)) return [];
|
|
2093
|
+
return payload.pending.map((value) => normalizeDeviceListEntry(value)).filter((value) => Boolean(value));
|
|
2094
|
+
}
|
|
2095
|
+
function resolveDeviceListEntryRoles(entry) {
|
|
2096
|
+
return uniqueStrings([...entry.roles, entry.role ?? ""]);
|
|
2097
|
+
}
|
|
2098
|
+
function hasBootstrapDevicePairingScopes(entry) {
|
|
2099
|
+
const scopes = new Set(entry.scopes);
|
|
2100
|
+
return BOOTSTRAP_DEVICE_PAIRING_REQUIRED_SCOPES.every((scope) => scopes.has(scope));
|
|
2101
|
+
}
|
|
2102
|
+
function scoreBootstrapDevicePairingRequest(entry) {
|
|
2103
|
+
let score = 0;
|
|
2104
|
+
if (resolveDeviceListEntryRoles(entry).includes("operator")) score += 4;
|
|
2105
|
+
if (entry.platform === process$1.platform) score += 4;
|
|
2106
|
+
if (entry.clientId === "cli") score += 3;
|
|
2107
|
+
if (entry.clientMode === "cli") score += 2;
|
|
2108
|
+
if (hasBootstrapDevicePairingScopes(entry)) score += 3;
|
|
2109
|
+
if (entry.scopes.includes("operator.approvals")) score += 1;
|
|
2110
|
+
if (entry.scopes.includes("operator.admin")) score += 1;
|
|
2111
|
+
return score;
|
|
2112
|
+
}
|
|
2113
|
+
function selectBootstrapDevicePairingRequest(pending) {
|
|
2114
|
+
const candidates = pending.filter((entry) => {
|
|
2115
|
+
const roles = resolveDeviceListEntryRoles(entry);
|
|
2116
|
+
return (!entry.platform || entry.platform === process$1.platform) && roles.includes("operator") && hasBootstrapDevicePairingScopes(entry);
|
|
2117
|
+
}).map((entry) => ({
|
|
2118
|
+
entry,
|
|
2119
|
+
score: scoreBootstrapDevicePairingRequest(entry)
|
|
2120
|
+
})).sort((a, b) => b.score - a.score || (b.entry.createdAtMs ?? 0) - (a.entry.createdAtMs ?? 0));
|
|
2121
|
+
if (candidates.length === 0) return {
|
|
2122
|
+
status: "none",
|
|
2123
|
+
detail: "no pending local operator pairing request found"
|
|
2124
|
+
};
|
|
2125
|
+
const top = candidates[0];
|
|
2126
|
+
if (!top?.entry.requestId) return {
|
|
2127
|
+
status: "failed",
|
|
2128
|
+
detail: "pending device request is missing requestId"
|
|
2129
|
+
};
|
|
2130
|
+
const second = candidates[1];
|
|
2131
|
+
if (second && second.score === top.score) return {
|
|
2132
|
+
status: "ambiguous",
|
|
2133
|
+
detail: `found ${candidates.length} equally likely pending operator pairing requests`
|
|
2134
|
+
};
|
|
2135
|
+
return {
|
|
2136
|
+
status: "selected",
|
|
2137
|
+
detail: `selected ${top.entry.requestId}`,
|
|
2138
|
+
request: top.entry
|
|
2139
|
+
};
|
|
2140
|
+
}
|
|
2141
|
+
async function attemptBootstrapDevicePairing(params) {
|
|
2142
|
+
const pollDelayMs = params.pollDelayMs ?? BOOTSTRAP_DEVICE_PAIRING_POLL_DELAY_MS;
|
|
2143
|
+
let lastDetail = "no pending local operator pairing request found";
|
|
2144
|
+
for (let attempt = 0; attempt < params.pollAttempts; attempt += 1) {
|
|
2145
|
+
const listResult = await runOpenClaw(params.openclawCommand, [
|
|
2146
|
+
"--profile",
|
|
2147
|
+
params.profile,
|
|
2148
|
+
"devices",
|
|
2149
|
+
"list",
|
|
2150
|
+
"--json"
|
|
2151
|
+
], BOOTSTRAP_DEVICE_PAIRING_COMMAND_TIMEOUT_MS).catch((error) => {
|
|
2152
|
+
return {
|
|
2153
|
+
code: 1,
|
|
2154
|
+
stdout: "",
|
|
2155
|
+
stderr: error instanceof Error ? error.message : String(error)
|
|
2156
|
+
};
|
|
2157
|
+
});
|
|
2158
|
+
if (listResult.code !== 0) return {
|
|
2159
|
+
status: "failed",
|
|
2160
|
+
detail: firstNonEmptyLine$1(listResult.stderr, listResult.stdout) ?? "Failed to list device pairing requests."
|
|
2161
|
+
};
|
|
2162
|
+
const pending = parsePendingDeviceRequests([listResult.stdout, listResult.stderr].filter(Boolean).join("\n"));
|
|
2163
|
+
if (!pending) return {
|
|
2164
|
+
status: "failed",
|
|
2165
|
+
detail: "Failed to parse pending device pairing requests."
|
|
2166
|
+
};
|
|
2167
|
+
const selection = selectBootstrapDevicePairingRequest(pending);
|
|
2168
|
+
lastDetail = selection.detail;
|
|
2169
|
+
if (selection.status === "none") {
|
|
2170
|
+
if (attempt < params.pollAttempts - 1) {
|
|
2171
|
+
await sleep(pollDelayMs);
|
|
2172
|
+
continue;
|
|
2173
|
+
}
|
|
2174
|
+
return {
|
|
2175
|
+
status: "none",
|
|
2176
|
+
detail: selection.detail
|
|
2177
|
+
};
|
|
2178
|
+
}
|
|
2179
|
+
if (selection.status === "ambiguous" || selection.status === "failed") return {
|
|
2180
|
+
status: selection.status,
|
|
2181
|
+
detail: selection.detail
|
|
2182
|
+
};
|
|
2183
|
+
const request = selection.request;
|
|
2184
|
+
const requestId = request?.requestId;
|
|
2185
|
+
if (!requestId) return {
|
|
2186
|
+
status: "failed",
|
|
2187
|
+
detail: "selected device pairing request is missing requestId"
|
|
2188
|
+
};
|
|
2189
|
+
const approveResult = await runOpenClaw(params.openclawCommand, [
|
|
2190
|
+
"--profile",
|
|
2191
|
+
params.profile,
|
|
2192
|
+
"devices",
|
|
2193
|
+
"approve",
|
|
2194
|
+
requestId
|
|
2195
|
+
], BOOTSTRAP_DEVICE_PAIRING_COMMAND_TIMEOUT_MS).catch((error) => {
|
|
2196
|
+
return {
|
|
2197
|
+
code: 1,
|
|
2198
|
+
stdout: "",
|
|
2199
|
+
stderr: error instanceof Error ? error.message : String(error)
|
|
2200
|
+
};
|
|
2201
|
+
});
|
|
2202
|
+
if (approveResult.code === 0) return {
|
|
2203
|
+
status: "approved",
|
|
2204
|
+
requestId,
|
|
2205
|
+
detail: `Approved ${request.deviceId ? `${request.deviceId} (${requestId})` : requestId}.`
|
|
2206
|
+
};
|
|
2207
|
+
const approveDetail = firstNonEmptyLine$1(approveResult.stderr, approveResult.stdout) ?? `Failed to approve ${requestId}.`;
|
|
2208
|
+
if (attempt < params.pollAttempts - 1 && /(superseded|stale|not found|no pending|expired)/iu.test(approveDetail)) {
|
|
2209
|
+
lastDetail = approveDetail;
|
|
2210
|
+
await sleep(pollDelayMs);
|
|
2211
|
+
continue;
|
|
2212
|
+
}
|
|
2213
|
+
return {
|
|
2214
|
+
status: "failed",
|
|
2215
|
+
requestId,
|
|
2216
|
+
detail: approveDetail
|
|
2217
|
+
};
|
|
2218
|
+
}
|
|
2219
|
+
return {
|
|
2220
|
+
status: "none",
|
|
2221
|
+
detail: lastDetail
|
|
2222
|
+
};
|
|
2223
|
+
}
|
|
2059
2224
|
function resolveOpenClawCliCheckCachePath(stateDir) {
|
|
2060
2225
|
return path.join(stateDir, "cache", OPENCLAW_CLI_CHECK_CACHE_FILE);
|
|
2061
2226
|
}
|
|
@@ -3027,13 +3192,27 @@ async function bootstrapCommand(opts, runtime = defaultRuntime) {
|
|
|
3027
3192
|
const gatewayUrl = `ws://127.0.0.1:${gatewayPort}`;
|
|
3028
3193
|
const preferredWebPort = parseOptionalPort$1(opts.webPort) ?? DEFAULT_WEB_APP_PORT;
|
|
3029
3194
|
postOnboardSpinner?.message(`Starting web runtime on port ${preferredWebPort}…`);
|
|
3030
|
-
|
|
3195
|
+
let webRuntimeStatus = await ensureManagedWebRuntime({
|
|
3031
3196
|
stateDir,
|
|
3032
3197
|
packageRoot,
|
|
3033
3198
|
denchVersion: VERSION,
|
|
3034
3199
|
port: preferredWebPort,
|
|
3035
3200
|
gatewayPort
|
|
3036
3201
|
});
|
|
3202
|
+
postOnboardSpinner?.message("Checking local device pairing…");
|
|
3203
|
+
const devicePairing = await attemptBootstrapDevicePairing({
|
|
3204
|
+
openclawCommand,
|
|
3205
|
+
profile,
|
|
3206
|
+
pollAttempts: webRuntimeStatus.ready ? READY_WEB_DEVICE_PAIRING_POLL_ATTEMPTS : UNREADY_WEB_DEVICE_PAIRING_POLL_ATTEMPTS
|
|
3207
|
+
});
|
|
3208
|
+
if (!webRuntimeStatus.ready && devicePairing.status === "approved") {
|
|
3209
|
+
postOnboardSpinner?.message("Waiting for web runtime after pairing…");
|
|
3210
|
+
const webRuntimeRetry = await waitForWebRuntime(preferredWebPort);
|
|
3211
|
+
webRuntimeStatus = {
|
|
3212
|
+
ready: webRuntimeRetry.ok,
|
|
3213
|
+
reason: webRuntimeRetry.reason
|
|
3214
|
+
};
|
|
3215
|
+
}
|
|
3037
3216
|
postOnboardSpinner?.stop(webRuntimeStatus.ready ? "Post-onboard setup complete." : "Post-onboard setup complete (web runtime unhealthy).");
|
|
3038
3217
|
const webReachable = webRuntimeStatus.ready;
|
|
3039
3218
|
const webUrl = `http://localhost:${preferredWebPort}`;
|
|
@@ -3068,6 +3247,14 @@ async function bootstrapCommand(opts, runtime = defaultRuntime) {
|
|
|
3068
3247
|
}
|
|
3069
3248
|
if (!opts.json) {
|
|
3070
3249
|
if (!webRuntimeStatus.ready) runtime.log(theme.warn(`Managed web runtime check failed: ${webRuntimeStatus.reason}`));
|
|
3250
|
+
if (devicePairing.status === "approved") runtime.log(theme.muted("Approved the pending local OpenClaw device pairing request."));
|
|
3251
|
+
else if (devicePairing.status === "ambiguous") {
|
|
3252
|
+
runtime.log(theme.warn(`Automatic device pairing skipped: ${devicePairing.detail}.`));
|
|
3253
|
+
runtime.log(theme.muted(`Run \`openclaw --profile ${profile} devices list\` and approve the correct request manually.`));
|
|
3254
|
+
} else if (devicePairing.status === "failed") {
|
|
3255
|
+
runtime.log(theme.warn(`Automatic device pairing failed: ${devicePairing.detail}`));
|
|
3256
|
+
runtime.log(theme.muted(`If the Control UI still reports "pairing required", run \`openclaw --profile ${profile} devices list\` and approve the pending request.`));
|
|
3257
|
+
}
|
|
3071
3258
|
if (installResult.installed) runtime.log(theme.muted("Installed global OpenClaw CLI via npm."));
|
|
3072
3259
|
if (isProjectLocalOpenClawPath(installResult.shellCommandPath)) {
|
|
3073
3260
|
runtime.log(theme.warn(`\`openclaw\` currently resolves to a project-local binary (${installResult.shellCommandPath}).`));
|
|
@@ -220,7 +220,7 @@ async function runCli(argv = process$1.argv) {
|
|
|
220
220
|
process$1.exitCode = await delegateToGlobalOpenClaw(parseArgv);
|
|
221
221
|
return;
|
|
222
222
|
}
|
|
223
|
-
const { buildProgram } = await import("./program-
|
|
223
|
+
const { buildProgram } = await import("./program-BDz7WHcZ.js");
|
|
224
224
|
await buildProgram().parseAsync(parseArgv);
|
|
225
225
|
}
|
|
226
226
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "denchclaw",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.6",
|
|
4
4
|
"description": "Fully Managed OpenClaw Framework for managing your CRM, Sales Automation and Outreach agents. The only local productivity tool you need.",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"homepage": "https://github.com/DenchHQ/DenchClaw#readme",
|
|
File without changes
|
|
File without changes
|
/package/apps/web/.next/static/{6km2S2lfAi2PQ3TlStEAM → bHQQHboaVXn6uVyBK8na1}/_buildManifest.js
RENAMED
|
File without changes
|
/package/apps/web/.next/static/{6km2S2lfAi2PQ3TlStEAM → bHQQHboaVXn6uVyBK8na1}/_ssgManifest.js
RENAMED
|
File without changes
|