@clawos-dev/clawd 0.2.611 → 0.2.612
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/app-builder-plugin/mcp-server.cjs +2 -0
- package/dist/cli.cjs +147 -68
- package/dist/cloud-persona-conversations.html +1 -1
- package/dist/dispatch/mcp-server.cjs +2 -0
- package/dist/persona-defaults/persona-app-builder/mcp/clawd-app-builder/mcp-server.cjs +2 -0
- package/dist/persona-defaults/persona-dataclaw-builder/mcp/clawd-app-builder/mcp-server.cjs +2 -0
- package/dist/share-ui/assets/{guest-DJt5YvKE.js → guest-DU3dcVMc.js} +60 -60
- package/dist/share-ui/guest.html +1 -1
- package/package.json +1 -1
|
@@ -23892,6 +23892,8 @@ var HistoryReadArgs = external_exports.object({
|
|
|
23892
23892
|
limit: external_exports.number().int().positive().max(5e3).optional(),
|
|
23893
23893
|
/** 不传时走 tail 语义:daemon 返回最后 limit 条(offset = max(0, total - limit)) */
|
|
23894
23894
|
offset: external_exports.number().int().nonnegative().optional(),
|
|
23895
|
+
/** 云历史分页快照标识;续页原样带回,避免多条链交错时混读。 */
|
|
23896
|
+
snapshotId: external_exports.string().uuid().optional(),
|
|
23895
23897
|
/**
|
|
23896
23898
|
* 瘦身投影(2026-07-18 android-tasks-tab 迭代,v2 语义):true = daemon 裁掉窄消费面客户端
|
|
23897
23899
|
* (mobile)不渲染的大字段(input / output / raw / toolResultExtra / memories /
|
package/dist/cli.cjs
CHANGED
|
@@ -8759,6 +8759,8 @@ var init_schemas = __esm({
|
|
|
8759
8759
|
limit: external_exports.number().int().positive().max(5e3).optional(),
|
|
8760
8760
|
/** 不传时走 tail 语义:daemon 返回最后 limit 条(offset = max(0, total - limit)) */
|
|
8761
8761
|
offset: external_exports.number().int().nonnegative().optional(),
|
|
8762
|
+
/** 云历史分页快照标识;续页原样带回,避免多条链交错时混读。 */
|
|
8763
|
+
snapshotId: external_exports.string().uuid().optional(),
|
|
8762
8764
|
/**
|
|
8763
8765
|
* 瘦身投影(2026-07-18 android-tasks-tab 迭代,v2 语义):true = daemon 裁掉窄消费面客户端
|
|
8764
8766
|
* (mobile)不渲染的大字段(input / output / raw / toolResultExtra / memories /
|
|
@@ -33103,7 +33105,7 @@ var require_websocket = __commonJS({
|
|
|
33103
33105
|
var http2 = require("http");
|
|
33104
33106
|
var net2 = require("net");
|
|
33105
33107
|
var tls = require("tls");
|
|
33106
|
-
var { randomBytes: randomBytes2, createHash:
|
|
33108
|
+
var { randomBytes: randomBytes2, createHash: createHash4 } = require("crypto");
|
|
33107
33109
|
var { Duplex, Readable: Readable4 } = require("stream");
|
|
33108
33110
|
var { URL: URL2 } = require("url");
|
|
33109
33111
|
var PerMessageDeflate2 = require_permessage_deflate();
|
|
@@ -33763,7 +33765,7 @@ var require_websocket = __commonJS({
|
|
|
33763
33765
|
abortHandshake(websocket, socket, "Invalid Upgrade header");
|
|
33764
33766
|
return;
|
|
33765
33767
|
}
|
|
33766
|
-
const digest =
|
|
33768
|
+
const digest = createHash4("sha1").update(key + GUID).digest("base64");
|
|
33767
33769
|
if (res.headers["sec-websocket-accept"] !== digest) {
|
|
33768
33770
|
abortHandshake(websocket, socket, "Invalid Sec-WebSocket-Accept header");
|
|
33769
33771
|
return;
|
|
@@ -34130,7 +34132,7 @@ var require_websocket_server = __commonJS({
|
|
|
34130
34132
|
var EventEmitter2 = require("events");
|
|
34131
34133
|
var http2 = require("http");
|
|
34132
34134
|
var { Duplex } = require("stream");
|
|
34133
|
-
var { createHash:
|
|
34135
|
+
var { createHash: createHash4 } = require("crypto");
|
|
34134
34136
|
var extension2 = require_extension();
|
|
34135
34137
|
var PerMessageDeflate2 = require_permessage_deflate();
|
|
34136
34138
|
var subprotocol2 = require_subprotocol();
|
|
@@ -34431,7 +34433,7 @@ var require_websocket_server = __commonJS({
|
|
|
34431
34433
|
);
|
|
34432
34434
|
}
|
|
34433
34435
|
if (this._state > RUNNING) return abortHandshake(socket, 503);
|
|
34434
|
-
const digest =
|
|
34436
|
+
const digest = createHash4("sha1").update(key + GUID).digest("base64");
|
|
34435
34437
|
const headers = [
|
|
34436
34438
|
"HTTP/1.1 101 Switching Protocols",
|
|
34437
34439
|
"Upgrade: websocket",
|
|
@@ -44796,7 +44798,7 @@ Env (advanced):
|
|
|
44796
44798
|
var import_node_path84 = __toESM(require("path"), 1);
|
|
44797
44799
|
var import_node_fs65 = __toESM(require("fs"), 1);
|
|
44798
44800
|
var import_node_os31 = __toESM(require("os"), 1);
|
|
44799
|
-
var
|
|
44801
|
+
var import_node_crypto27 = require("crypto");
|
|
44800
44802
|
var import_node_url6 = require("url");
|
|
44801
44803
|
|
|
44802
44804
|
// src/logger.ts
|
|
@@ -52155,7 +52157,7 @@ function walkRollouts(dir, visit) {
|
|
|
52155
52157
|
}
|
|
52156
52158
|
return true;
|
|
52157
52159
|
}
|
|
52158
|
-
async function withSubagentResults(parent, parentThreadId, loadChild, logger) {
|
|
52160
|
+
async function withSubagentResults(parent, parentThreadId, loadChild, logger, rethrowLoadError = false) {
|
|
52159
52161
|
const messages = [];
|
|
52160
52162
|
const started = new Map(parent.subagents.map((s2) => [s2.toolUseId, s2]));
|
|
52161
52163
|
for (const m3 of parent.messages) {
|
|
@@ -52166,6 +52168,7 @@ async function withSubagentResults(parent, parentThreadId, loadChild, logger) {
|
|
|
52166
52168
|
try {
|
|
52167
52169
|
text = await loadChild(sub.agentId);
|
|
52168
52170
|
} catch (error) {
|
|
52171
|
+
if (rethrowLoadError) throw error;
|
|
52169
52172
|
logger?.warn("codex subagent rollout unreadable", { childThreadId: sub.agentId, message: error.message });
|
|
52170
52173
|
continue;
|
|
52171
52174
|
}
|
|
@@ -52345,6 +52348,73 @@ var CodexHistoryReader = class {
|
|
|
52345
52348
|
}
|
|
52346
52349
|
};
|
|
52347
52350
|
|
|
52351
|
+
// src/tools/cloud-history-pages.ts
|
|
52352
|
+
var import_node_crypto6 = require("crypto");
|
|
52353
|
+
var CloudHistoryPages = class _CloudHistoryPages {
|
|
52354
|
+
constructor(log) {
|
|
52355
|
+
this.log = log;
|
|
52356
|
+
}
|
|
52357
|
+
log;
|
|
52358
|
+
snapshots = [];
|
|
52359
|
+
firstReads = /* @__PURE__ */ new Map();
|
|
52360
|
+
static IDLE_MS = 5 * 6e4;
|
|
52361
|
+
async read(args, load) {
|
|
52362
|
+
const key = `${args.cwd}\0${args.toolSessionId}`;
|
|
52363
|
+
const now = Date.now();
|
|
52364
|
+
for (let i2 = this.snapshots.length - 1; i2 >= 0; i2--) {
|
|
52365
|
+
if (now - this.snapshots[i2].lastUsedAt > _CloudHistoryPages.IDLE_MS) this.snapshots.splice(i2, 1);
|
|
52366
|
+
}
|
|
52367
|
+
let first = args.offset === void 0;
|
|
52368
|
+
let cached;
|
|
52369
|
+
if (!first) {
|
|
52370
|
+
for (let i2 = this.snapshots.length - 1; i2 >= 0; i2--) {
|
|
52371
|
+
const candidate = this.snapshots[i2];
|
|
52372
|
+
if (candidate.key === key && (args.snapshotId ? candidate.id === args.snapshotId : candidate.nextOffset === args.offset)) {
|
|
52373
|
+
cached = candidate;
|
|
52374
|
+
break;
|
|
52375
|
+
}
|
|
52376
|
+
}
|
|
52377
|
+
}
|
|
52378
|
+
if (args.snapshotId && !cached) first = true;
|
|
52379
|
+
const pageArgs = first ? { limit: args.limit } : args;
|
|
52380
|
+
const threadHash = (0, import_node_crypto6.createHash)("sha256").update(key).digest("hex").slice(0, 12);
|
|
52381
|
+
let source = "central";
|
|
52382
|
+
let messages;
|
|
52383
|
+
try {
|
|
52384
|
+
if (cached) {
|
|
52385
|
+
source = "snapshot";
|
|
52386
|
+
messages = cached.messages;
|
|
52387
|
+
} else if (first) {
|
|
52388
|
+
let pending = this.firstReads.get(key);
|
|
52389
|
+
if (!pending) {
|
|
52390
|
+
pending = load();
|
|
52391
|
+
this.firstReads.set(key, pending);
|
|
52392
|
+
void pending.finally(() => {
|
|
52393
|
+
if (this.firstReads.get(key) === pending) this.firstReads.delete(key);
|
|
52394
|
+
}).catch(() => {
|
|
52395
|
+
});
|
|
52396
|
+
} else {
|
|
52397
|
+
source = "shared";
|
|
52398
|
+
}
|
|
52399
|
+
messages = await pending;
|
|
52400
|
+
} else {
|
|
52401
|
+
messages = await load();
|
|
52402
|
+
}
|
|
52403
|
+
} catch (error) {
|
|
52404
|
+
this.log?.({ threadHash, source, outcome: error.status === 429 ? "429" : "error" });
|
|
52405
|
+
throw error;
|
|
52406
|
+
}
|
|
52407
|
+
this.log?.({ threadHash, source, outcome: "success" });
|
|
52408
|
+
const page = pageMessages(messages, pageArgs);
|
|
52409
|
+
const snapshotId = cached?.id ?? (0, import_node_crypto6.randomUUID)();
|
|
52410
|
+
if (cached) this.snapshots.splice(this.snapshots.indexOf(cached), 1);
|
|
52411
|
+
if (page.offset > 0 && args.limit !== void 0) {
|
|
52412
|
+
this.snapshots.push({ key, id: snapshotId, messages, nextOffset: Math.max(0, page.offset - args.limit), lastUsedAt: now });
|
|
52413
|
+
}
|
|
52414
|
+
return { ...page, snapshotId };
|
|
52415
|
+
}
|
|
52416
|
+
};
|
|
52417
|
+
|
|
52348
52418
|
// src/tools/codex-cloud-history.ts
|
|
52349
52419
|
function personaIdFromCloudCwd(cwd) {
|
|
52350
52420
|
const m3 = /\/p\/([^/?#]+)(?:[/?#]|$)/.exec(cwd);
|
|
@@ -52359,9 +52429,11 @@ var CloudCodexHistoryReader = class {
|
|
|
52359
52429
|
constructor(client, logger) {
|
|
52360
52430
|
this.client = client;
|
|
52361
52431
|
this.logger = logger;
|
|
52432
|
+
this.pages = new CloudHistoryPages((meta) => logger?.info?.("cloud history page", meta));
|
|
52362
52433
|
}
|
|
52363
52434
|
client;
|
|
52364
52435
|
logger;
|
|
52436
|
+
pages;
|
|
52365
52437
|
async listProjects() {
|
|
52366
52438
|
return [];
|
|
52367
52439
|
}
|
|
@@ -52370,14 +52442,16 @@ var CloudCodexHistoryReader = class {
|
|
|
52370
52442
|
return [];
|
|
52371
52443
|
}
|
|
52372
52444
|
async read(args) {
|
|
52373
|
-
|
|
52374
|
-
|
|
52375
|
-
|
|
52376
|
-
|
|
52377
|
-
|
|
52378
|
-
|
|
52379
|
-
|
|
52380
|
-
|
|
52445
|
+
return this.pages.read(args, async () => {
|
|
52446
|
+
const parent = await this.fetchThread(args.toolSessionId);
|
|
52447
|
+
return withSubagentResults(
|
|
52448
|
+
parent,
|
|
52449
|
+
args.toolSessionId,
|
|
52450
|
+
(agentId) => this.client.fetchRollout(agentId),
|
|
52451
|
+
this.logger,
|
|
52452
|
+
true
|
|
52453
|
+
);
|
|
52454
|
+
});
|
|
52381
52455
|
}
|
|
52382
52456
|
async listSubagents(args) {
|
|
52383
52457
|
return subagentSummaries(await this.fetchThread(args.toolSessionId));
|
|
@@ -52630,9 +52704,11 @@ var CloudPiHistoryReader = class {
|
|
|
52630
52704
|
constructor(client, logger) {
|
|
52631
52705
|
this.client = client;
|
|
52632
52706
|
this.logger = logger;
|
|
52707
|
+
this.pages = new CloudHistoryPages((meta) => logger?.info?.("cloud history page", meta));
|
|
52633
52708
|
}
|
|
52634
52709
|
client;
|
|
52635
52710
|
logger;
|
|
52711
|
+
pages;
|
|
52636
52712
|
async listProjects() {
|
|
52637
52713
|
return [];
|
|
52638
52714
|
}
|
|
@@ -52641,11 +52717,13 @@ var CloudPiHistoryReader = class {
|
|
|
52641
52717
|
return [];
|
|
52642
52718
|
}
|
|
52643
52719
|
async read(args) {
|
|
52644
|
-
|
|
52645
|
-
|
|
52646
|
-
|
|
52647
|
-
|
|
52648
|
-
|
|
52720
|
+
return this.pages.read(args, async () => {
|
|
52721
|
+
const text = await this.client.fetchRollout(args.toolSessionId);
|
|
52722
|
+
if (text === null) throw new Error(`pi session not found for ${args.toolSessionId}`);
|
|
52723
|
+
const parsed = parsePiSession(text);
|
|
52724
|
+
if (!parsed.meta) this.logger?.warn("cloud pi session has no header line", { toolSessionId: args.toolSessionId });
|
|
52725
|
+
return parsed.messages;
|
|
52726
|
+
});
|
|
52649
52727
|
}
|
|
52650
52728
|
async listSubagents(_args) {
|
|
52651
52729
|
return [];
|
|
@@ -52795,7 +52873,7 @@ async function centralGetThread(opts) {
|
|
|
52795
52873
|
if (typeof body?.message === "string" && body.message) detail = `: ${body.message}`;
|
|
52796
52874
|
} catch {
|
|
52797
52875
|
}
|
|
52798
|
-
throw new CentralClientError("API_ERROR", `central server HTTP ${res.status}${detail}
|
|
52876
|
+
throw new CentralClientError("API_ERROR", `central server HTTP ${res.status}${detail}`, void 0, res.status);
|
|
52799
52877
|
}
|
|
52800
52878
|
return await res.text();
|
|
52801
52879
|
}
|
|
@@ -53074,7 +53152,7 @@ function tryLoadShareUi(logger) {
|
|
|
53074
53152
|
}
|
|
53075
53153
|
|
|
53076
53154
|
// src/visitor/visitor-token.ts
|
|
53077
|
-
var
|
|
53155
|
+
var import_node_crypto7 = __toESM(require("crypto"), 1);
|
|
53078
53156
|
|
|
53079
53157
|
// ../protocol/src/index.ts
|
|
53080
53158
|
init_runtime();
|
|
@@ -53082,7 +53160,7 @@ init_runtime();
|
|
|
53082
53160
|
// src/visitor/visitor-token.ts
|
|
53083
53161
|
var DOMAIN_PREFIX3 = "clawd-visitor-v1|";
|
|
53084
53162
|
function hmac(secret, body) {
|
|
53085
|
-
return
|
|
53163
|
+
return import_node_crypto7.default.createHmac("sha256", secret).update(`${DOMAIN_PREFIX3}${body}`).digest("base64url");
|
|
53086
53164
|
}
|
|
53087
53165
|
function signVisitorToken(secret, payload) {
|
|
53088
53166
|
const body = Buffer.from(JSON.stringify(payload)).toString("base64url");
|
|
@@ -53095,7 +53173,7 @@ function verifyVisitorToken(secret, token, now) {
|
|
|
53095
53173
|
const sig = token.slice(dot + 1);
|
|
53096
53174
|
const expected = hmac(secret, body);
|
|
53097
53175
|
if (sig.length !== expected.length) return { ok: false, reason: "BAD_SIGNATURE" };
|
|
53098
|
-
if (!
|
|
53176
|
+
if (!import_node_crypto7.default.timingSafeEqual(Buffer.from(sig), Buffer.from(expected))) {
|
|
53099
53177
|
return { ok: false, reason: "BAD_SIGNATURE" };
|
|
53100
53178
|
}
|
|
53101
53179
|
let payload;
|
|
@@ -54618,7 +54696,7 @@ var CodexAdapter = class {
|
|
|
54618
54696
|
};
|
|
54619
54697
|
|
|
54620
54698
|
// src/tools/claude-tui.ts
|
|
54621
|
-
var
|
|
54699
|
+
var import_node_crypto8 = require("crypto");
|
|
54622
54700
|
var import_node_fs25 = __toESM(require("fs"), 1);
|
|
54623
54701
|
var import_node_os10 = __toESM(require("os"), 1);
|
|
54624
54702
|
var import_node_path24 = __toESM(require("path"), 1);
|
|
@@ -55506,7 +55584,7 @@ function observeScreenIdle(surface, opts) {
|
|
|
55506
55584
|
};
|
|
55507
55585
|
}
|
|
55508
55586
|
function shortHash(s2) {
|
|
55509
|
-
return (0,
|
|
55587
|
+
return (0, import_node_crypto8.createHash)("sha1").update(s2).digest("hex").slice(0, 8);
|
|
55510
55588
|
}
|
|
55511
55589
|
function firstLineDiff(prev, next) {
|
|
55512
55590
|
const p3 = prev.split("\n");
|
|
@@ -56637,7 +56715,7 @@ function resolveSourceJsonlPath(sourceFile, home) {
|
|
|
56637
56715
|
// src/shift/store.ts
|
|
56638
56716
|
var import_promises3 = __toESM(require("fs/promises"), 1);
|
|
56639
56717
|
var import_node_path35 = __toESM(require("path"), 1);
|
|
56640
|
-
var
|
|
56718
|
+
var import_node_crypto9 = require("crypto");
|
|
56641
56719
|
|
|
56642
56720
|
// src/shift/schedule.ts
|
|
56643
56721
|
var import_cron_parser = __toESM(require_dist(), 1);
|
|
@@ -56741,7 +56819,7 @@ function createShiftStore(deps) {
|
|
|
56741
56819
|
const shift = {
|
|
56742
56820
|
...input,
|
|
56743
56821
|
schedule,
|
|
56744
|
-
id: (0,
|
|
56822
|
+
id: (0, import_node_crypto9.randomUUID)(),
|
|
56745
56823
|
createdAtMs: now,
|
|
56746
56824
|
updatedAtMs: now,
|
|
56747
56825
|
state: { nextRunAtMs },
|
|
@@ -57172,7 +57250,7 @@ function redactEvidence(evidence) {
|
|
|
57172
57250
|
// src/deploy/deploy-file.ts
|
|
57173
57251
|
var import_promises4 = __toESM(require("fs/promises"), 1);
|
|
57174
57252
|
var import_node_path37 = __toESM(require("path"), 1);
|
|
57175
|
-
var
|
|
57253
|
+
var import_node_crypto10 = require("crypto");
|
|
57176
57254
|
init_zod();
|
|
57177
57255
|
init_protocol();
|
|
57178
57256
|
|
|
@@ -57378,7 +57456,7 @@ async function restoreDeployFileRaw(dir, raw) {
|
|
|
57378
57456
|
}
|
|
57379
57457
|
var emptyScanFile = () => ({ version: 3, scans: [], releases: [] });
|
|
57380
57458
|
var LEGACY_SCAN_ID = "legacy";
|
|
57381
|
-
var newScanId = () => (0,
|
|
57459
|
+
var newScanId = () => (0, import_node_crypto10.randomBytes)(4).toString("hex");
|
|
57382
57460
|
var z1 = DeployScanSchema.omit({ id: true, manifest: true }).extend({ releasedHead: DeployScanSchema.shape.head }).strict();
|
|
57383
57461
|
function migrateV1(v1, manifest) {
|
|
57384
57462
|
const { releasedHead, ...rest } = v1;
|
|
@@ -57516,7 +57594,7 @@ function requiredEnvNames(manifest) {
|
|
|
57516
57594
|
}
|
|
57517
57595
|
|
|
57518
57596
|
// src/deploy/artifact.ts
|
|
57519
|
-
var
|
|
57597
|
+
var import_node_crypto11 = require("crypto");
|
|
57520
57598
|
var import_node_fs34 = __toESM(require("fs"), 1);
|
|
57521
57599
|
var import_node_os11 = __toESM(require("os"), 1);
|
|
57522
57600
|
var import_node_path38 = __toESM(require("path"), 1);
|
|
@@ -57555,7 +57633,7 @@ function downloadArtifact(exec) {
|
|
|
57555
57633
|
if (declared > ARTIFACT_MAX_BYTES) throw new Error(`\u8D44\u4EA7 ${declared} \u5B57\u8282\uFF0C\u8D85\u8FC7\u4E0A\u9650 ${ARTIFACT_MAX_BYTES}\uFF1A${url}`);
|
|
57556
57634
|
const dir = await import_node_fs34.default.promises.mkdtemp(import_node_path38.default.join(import_node_os11.default.tmpdir(), "clawd-artifact-"));
|
|
57557
57635
|
const file = import_node_path38.default.join(dir, "pkg");
|
|
57558
|
-
const hash = (0,
|
|
57636
|
+
const hash = (0, import_node_crypto11.createHash)("sha256");
|
|
57559
57637
|
let size = 0;
|
|
57560
57638
|
const meter = new import_node_stream3.Transform({
|
|
57561
57639
|
transform(chunk, _enc, cb) {
|
|
@@ -63904,7 +63982,7 @@ ${formatLarkSpeakerReminder(speaker)}`
|
|
|
63904
63982
|
}
|
|
63905
63983
|
|
|
63906
63984
|
// src/lark-bot-connector/envelope.ts
|
|
63907
|
-
var
|
|
63985
|
+
var import_node_crypto12 = require("crypto");
|
|
63908
63986
|
var LARK_ENVELOPE_PREFIX = "clawdlbe1";
|
|
63909
63987
|
function verifyLarkEventEnvelope(args) {
|
|
63910
63988
|
const { token, publicKeyPem } = args;
|
|
@@ -63923,7 +64001,7 @@ function verifyLarkEventEnvelope(args) {
|
|
|
63923
64001
|
const data = Buffer.from(`${prefix}.${payloadB64}`, "utf8");
|
|
63924
64002
|
let sigOk = false;
|
|
63925
64003
|
try {
|
|
63926
|
-
sigOk = (0,
|
|
64004
|
+
sigOk = (0, import_node_crypto12.verify)(null, data, publicKeyPem, Buffer.from(sigB64, "base64url"));
|
|
63927
64005
|
} catch {
|
|
63928
64006
|
sigOk = false;
|
|
63929
64007
|
}
|
|
@@ -65366,7 +65444,7 @@ var PiRpcClient = class {
|
|
|
65366
65444
|
|
|
65367
65445
|
// src/tools/pi-session.ts
|
|
65368
65446
|
var import_node_child_process11 = require("child_process");
|
|
65369
|
-
var
|
|
65447
|
+
var import_node_crypto13 = require("crypto");
|
|
65370
65448
|
var import_node_fs40 = __toESM(require("fs"), 1);
|
|
65371
65449
|
var import_node_path44 = __toESM(require("path"), 1);
|
|
65372
65450
|
|
|
@@ -65639,7 +65717,7 @@ ${dirs.map((d2) => `- ${d2}`).join("\n")}`;
|
|
|
65639
65717
|
}
|
|
65640
65718
|
function createPiSession(ctx, sink, deps = {}) {
|
|
65641
65719
|
const cmd = process.env.PI_BIN ?? "pi";
|
|
65642
|
-
const sessionId = ctx.toolSessionId ?? (0,
|
|
65720
|
+
const sessionId = ctx.toolSessionId ?? (0, import_node_crypto13.randomUUID)();
|
|
65643
65721
|
const skillsDir = import_node_path44.default.join(ctx.cwd, ".claude", "skills");
|
|
65644
65722
|
const exists = deps.skillsDirExists ?? ((d2) => import_node_fs40.default.existsSync(d2));
|
|
65645
65723
|
const args = buildPiArgs(ctx, {
|
|
@@ -65876,13 +65954,13 @@ var PiAdapter = class {
|
|
|
65876
65954
|
};
|
|
65877
65955
|
|
|
65878
65956
|
// src/tools/pi-cloud-session.ts
|
|
65879
|
-
var
|
|
65957
|
+
var import_node_crypto14 = require("crypto");
|
|
65880
65958
|
function cloudPiInstructions(ctx) {
|
|
65881
65959
|
return [ctx.extraSystemPrompt, workDirPrompt(CLOUD_WORKSPACE_SLOT, ctx.personaMode ?? "owner")].filter((x2) => Boolean(x2)).join("\n\n");
|
|
65882
65960
|
}
|
|
65883
65961
|
function createCloudPiSession(ctx, sink, deps) {
|
|
65884
65962
|
const personaId2 = personaIdFromCloudCwd(ctx.cwd);
|
|
65885
|
-
const sessionId = ctx.toolSessionId ?? (0,
|
|
65963
|
+
const sessionId = ctx.toolSessionId ?? (0, import_node_crypto14.randomUUID)();
|
|
65886
65964
|
let channel = null;
|
|
65887
65965
|
let closed = false;
|
|
65888
65966
|
let exited = false;
|
|
@@ -67039,7 +67117,7 @@ var wrapper_default = import_websocket.default;
|
|
|
67039
67117
|
|
|
67040
67118
|
// src/transport/local-ws-server.ts
|
|
67041
67119
|
var import_node_http = __toESM(require("http"), 1);
|
|
67042
|
-
var
|
|
67120
|
+
var import_node_crypto15 = require("crypto");
|
|
67043
67121
|
var LocalWsServer = class {
|
|
67044
67122
|
constructor(opts) {
|
|
67045
67123
|
this.opts = opts;
|
|
@@ -67256,7 +67334,7 @@ var LocalWsServer = class {
|
|
|
67256
67334
|
}
|
|
67257
67335
|
}
|
|
67258
67336
|
onConnection(socket, remoteAddress) {
|
|
67259
|
-
const id = (0,
|
|
67337
|
+
const id = (0, import_node_crypto15.randomUUID)();
|
|
67260
67338
|
const subscribedSessions = /* @__PURE__ */ new Map();
|
|
67261
67339
|
const handle = {
|
|
67262
67340
|
id,
|
|
@@ -68221,7 +68299,7 @@ var import_node_path53 = __toESM(require("path"), 1);
|
|
|
68221
68299
|
// src/attachment/upload.ts
|
|
68222
68300
|
var import_node_fs47 = __toESM(require("fs"), 1);
|
|
68223
68301
|
var import_node_path51 = __toESM(require("path"), 1);
|
|
68224
|
-
var
|
|
68302
|
+
var import_node_crypto16 = __toESM(require("crypto"), 1);
|
|
68225
68303
|
var import_promises8 = require("stream/promises");
|
|
68226
68304
|
var UploadError = class extends Error {
|
|
68227
68305
|
constructor(code, message) {
|
|
@@ -68245,11 +68323,11 @@ async function writeUploadedAttachment(args) {
|
|
|
68245
68323
|
} catch (err) {
|
|
68246
68324
|
throw new UploadError("STORAGE_ERROR", `mkdir failed: ${err.message}`);
|
|
68247
68325
|
}
|
|
68248
|
-
const hasher =
|
|
68326
|
+
const hasher = import_node_crypto16.default.createHash("sha256");
|
|
68249
68327
|
let actualSize = 0;
|
|
68250
68328
|
const tmpPath = import_node_path51.default.join(
|
|
68251
68329
|
attachmentsRoot,
|
|
68252
|
-
`.upload-${process.pid}-${Date.now()}-${
|
|
68330
|
+
`.upload-${process.pid}-${Date.now()}-${import_node_crypto16.default.randomBytes(4).toString("hex")}`
|
|
68253
68331
|
);
|
|
68254
68332
|
try {
|
|
68255
68333
|
await (0, import_promises8.pipeline)(
|
|
@@ -69100,7 +69178,7 @@ function runAttachmentGc(args) {
|
|
|
69100
69178
|
// src/attachment/group.ts
|
|
69101
69179
|
var import_node_fs50 = __toESM(require("fs"), 1);
|
|
69102
69180
|
var import_node_path55 = __toESM(require("path"), 1);
|
|
69103
|
-
var
|
|
69181
|
+
var import_node_crypto17 = __toESM(require("crypto"), 1);
|
|
69104
69182
|
init_protocol();
|
|
69105
69183
|
var GroupFileStore = class {
|
|
69106
69184
|
dataDir;
|
|
@@ -69189,7 +69267,7 @@ var GroupFileStore = class {
|
|
|
69189
69267
|
entries[idx] = next;
|
|
69190
69268
|
} else {
|
|
69191
69269
|
next = {
|
|
69192
|
-
id: `gf-${
|
|
69270
|
+
id: `gf-${import_node_crypto17.default.randomBytes(6).toString("base64url")}`,
|
|
69193
69271
|
relPath: input.relPath,
|
|
69194
69272
|
from: input.from,
|
|
69195
69273
|
label: input.label,
|
|
@@ -69335,7 +69413,7 @@ function readSpawnedByDesktopFromEnv(env = process.env) {
|
|
|
69335
69413
|
// src/tunnel/tunnel-manager.ts
|
|
69336
69414
|
var import_node_fs55 = __toESM(require("fs"), 1);
|
|
69337
69415
|
var import_node_path60 = __toESM(require("path"), 1);
|
|
69338
|
-
var
|
|
69416
|
+
var import_node_crypto18 = __toESM(require("crypto"), 1);
|
|
69339
69417
|
var import_node_child_process16 = require("child_process");
|
|
69340
69418
|
|
|
69341
69419
|
// src/tunnel/tunnel-store.ts
|
|
@@ -69834,7 +69912,7 @@ var TunnelManager = class {
|
|
|
69834
69912
|
override: this.deps.frpcBinaryOverride ?? void 0
|
|
69835
69913
|
});
|
|
69836
69914
|
const tomlPath = import_node_path60.default.join(this.deps.dataDir, "frpc.toml");
|
|
69837
|
-
const proxyName = `clawd-${t2.subdomain}-${localPort}-${
|
|
69915
|
+
const proxyName = `clawd-${t2.subdomain}-${localPort}-${import_node_crypto18.default.randomBytes(3).toString("hex")}`;
|
|
69838
69916
|
const toml = buildFrpcToml({
|
|
69839
69917
|
serverAddr: t2.frpsHost,
|
|
69840
69918
|
serverPort: t2.frpsPort,
|
|
@@ -69935,7 +70013,7 @@ async function waitForFrpcReady(proc, timeoutMs) {
|
|
|
69935
70013
|
// src/tunnel/device-key.ts
|
|
69936
70014
|
var import_node_os22 = __toESM(require("os"), 1);
|
|
69937
70015
|
var import_node_path61 = __toESM(require("path"), 1);
|
|
69938
|
-
var
|
|
70016
|
+
var import_node_crypto19 = __toESM(require("crypto"), 1);
|
|
69939
70017
|
var DERIVE_SALT = "clawd-tunnel-device-v1";
|
|
69940
70018
|
function deriveStableDeviceKey(opts = {}) {
|
|
69941
70019
|
const hostname = opts.hostname ?? import_node_os22.default.hostname();
|
|
@@ -69945,13 +70023,13 @@ function deriveStableDeviceKey(opts = {}) {
|
|
|
69945
70023
|
const normalizedDataDir = opts.dataDir ? import_node_path61.default.resolve(opts.dataDir) : null;
|
|
69946
70024
|
const isDefaultDir = normalizedDataDir == null || normalizedDataDir === defaultDataDir;
|
|
69947
70025
|
const input = isDefaultDir ? `${hostname}::${uid}` : `${hostname}::${uid}::${normalizedDataDir}`;
|
|
69948
|
-
return
|
|
70026
|
+
return import_node_crypto19.default.createHmac("sha256", DERIVE_SALT).update(input).digest("hex").slice(0, 32);
|
|
69949
70027
|
}
|
|
69950
70028
|
|
|
69951
70029
|
// src/auth-store.ts
|
|
69952
70030
|
var import_node_fs56 = __toESM(require("fs"), 1);
|
|
69953
70031
|
var import_node_path62 = __toESM(require("path"), 1);
|
|
69954
|
-
var
|
|
70032
|
+
var import_node_crypto20 = __toESM(require("crypto"), 1);
|
|
69955
70033
|
var AUTH_FILE_NAME = "auth.json";
|
|
69956
70034
|
function authFilePath(dataDir) {
|
|
69957
70035
|
return import_node_path62.default.join(dataDir, AUTH_FILE_NAME);
|
|
@@ -69988,10 +70066,10 @@ function loadOrCreateTunnelDeviceKey(opts) {
|
|
|
69988
70066
|
return tunnelDeviceKey;
|
|
69989
70067
|
}
|
|
69990
70068
|
function defaultGenerateToken() {
|
|
69991
|
-
return
|
|
70069
|
+
return import_node_crypto20.default.randomBytes(32).toString("base64url");
|
|
69992
70070
|
}
|
|
69993
70071
|
function defaultGenerateOwnerPrincipalId() {
|
|
69994
|
-
return `owner-${
|
|
70072
|
+
return `owner-${import_node_crypto20.default.randomUUID()}`;
|
|
69995
70073
|
}
|
|
69996
70074
|
function readAuthFile(file) {
|
|
69997
70075
|
try {
|
|
@@ -70123,7 +70201,7 @@ var OwnerIdentityStore = class {
|
|
|
70123
70201
|
};
|
|
70124
70202
|
|
|
70125
70203
|
// src/feishu-auth/login-flow.ts
|
|
70126
|
-
var
|
|
70204
|
+
var import_node_crypto21 = __toESM(require("crypto"), 1);
|
|
70127
70205
|
var STATE_TTL_MS = 5 * 60 * 1e3;
|
|
70128
70206
|
var LoginFlow = class {
|
|
70129
70207
|
constructor(deps) {
|
|
@@ -70132,7 +70210,7 @@ var LoginFlow = class {
|
|
|
70132
70210
|
deps;
|
|
70133
70211
|
pendingStates = /* @__PURE__ */ new Map();
|
|
70134
70212
|
start() {
|
|
70135
|
-
const state =
|
|
70213
|
+
const state = import_node_crypto21.default.randomBytes(16).toString("base64url");
|
|
70136
70214
|
const now = (this.deps.now ?? Date.now)();
|
|
70137
70215
|
this.pendingStates.set(state, now);
|
|
70138
70216
|
this.gcExpired(now);
|
|
@@ -70663,7 +70741,7 @@ init_protocol();
|
|
|
70663
70741
|
var import_node_fs59 = __toESM(require("fs"), 1);
|
|
70664
70742
|
var import_node_os24 = __toESM(require("os"), 1);
|
|
70665
70743
|
var import_node_path65 = __toESM(require("path"), 1);
|
|
70666
|
-
var
|
|
70744
|
+
var import_node_crypto22 = require("crypto");
|
|
70667
70745
|
init_claude_history();
|
|
70668
70746
|
function readJsonlEntries(file) {
|
|
70669
70747
|
const raw = import_node_fs59.default.readFileSync(file, "utf8");
|
|
@@ -70700,7 +70778,7 @@ function forkSession(input) {
|
|
|
70700
70778
|
throw new Error(`fork: messageUuid not found in transcript: ${input.messageUuid}`);
|
|
70701
70779
|
}
|
|
70702
70780
|
const sliced = mainEntries.slice(0, targetIdx + 1);
|
|
70703
|
-
const forkedToolSessionId = (0,
|
|
70781
|
+
const forkedToolSessionId = (0, import_node_crypto22.randomUUID)();
|
|
70704
70782
|
let parentUuid = null;
|
|
70705
70783
|
const forkedLines = [];
|
|
70706
70784
|
for (const entry of sliced) {
|
|
@@ -71787,7 +71865,8 @@ function buildHistoryHandlers(deps) {
|
|
|
71787
71865
|
cwd: f2.cwd,
|
|
71788
71866
|
toolSessionId: f2.toolSessionId,
|
|
71789
71867
|
limit: args.limit,
|
|
71790
|
-
offset: args.offset
|
|
71868
|
+
offset: args.offset,
|
|
71869
|
+
snapshotId: args.snapshotId
|
|
71791
71870
|
});
|
|
71792
71871
|
} catch (err) {
|
|
71793
71872
|
logger?.warn("chatflow.history.daemon.error", {
|
|
@@ -73487,7 +73566,7 @@ function computeMethodAccess(args) {
|
|
|
73487
73566
|
}
|
|
73488
73567
|
|
|
73489
73568
|
// src/version.ts
|
|
73490
|
-
var version = "0.2.
|
|
73569
|
+
var version = "0.2.612".length > 0 ? "0.2.612" : "dev";
|
|
73491
73570
|
|
|
73492
73571
|
// src/cli-probe/probe.ts
|
|
73493
73572
|
var fs83 = __toESM(require("fs"), 1);
|
|
@@ -73884,7 +73963,7 @@ init_protocol();
|
|
|
73884
73963
|
// src/extension/bundle-zip.ts
|
|
73885
73964
|
var import_promises12 = __toESM(require("fs/promises"), 1);
|
|
73886
73965
|
var import_node_path73 = __toESM(require("path"), 1);
|
|
73887
|
-
var
|
|
73966
|
+
var import_node_crypto23 = __toESM(require("crypto"), 1);
|
|
73888
73967
|
var import_jszip2 = __toESM(require_lib3(), 1);
|
|
73889
73968
|
async function bundleExtensionDir(dir) {
|
|
73890
73969
|
const entries = await listFilesSorted(dir);
|
|
@@ -73899,7 +73978,7 @@ async function bundleExtensionDir(dir) {
|
|
|
73899
73978
|
compression: "DEFLATE",
|
|
73900
73979
|
compressionOptions: { level: 6 }
|
|
73901
73980
|
});
|
|
73902
|
-
const sha256 =
|
|
73981
|
+
const sha256 = import_node_crypto23.default.createHash("sha256").update(buffer).digest("hex");
|
|
73903
73982
|
return { buffer, sha256 };
|
|
73904
73983
|
}
|
|
73905
73984
|
var FIXED_DATE = /* @__PURE__ */ new Date("2020-01-01T00:00:00.000Z");
|
|
@@ -73967,7 +74046,7 @@ function computePublishCheck(args) {
|
|
|
73967
74046
|
var import_promises13 = __toESM(require("fs/promises"), 1);
|
|
73968
74047
|
var import_node_path75 = __toESM(require("path"), 1);
|
|
73969
74048
|
var import_node_os28 = __toESM(require("os"), 1);
|
|
73970
|
-
var
|
|
74049
|
+
var import_node_crypto24 = __toESM(require("crypto"), 1);
|
|
73971
74050
|
var import_jszip3 = __toESM(require_lib3(), 1);
|
|
73972
74051
|
|
|
73973
74052
|
// src/extension/paths.ts
|
|
@@ -73996,7 +74075,7 @@ var InstallError = class extends Error {
|
|
|
73996
74075
|
};
|
|
73997
74076
|
async function installFromChannel(args, deps) {
|
|
73998
74077
|
const { channelRef, snapshotHash, bundleZip } = args;
|
|
73999
|
-
const computed =
|
|
74078
|
+
const computed = import_node_crypto24.default.createHash("sha256").update(bundleZip).digest("hex");
|
|
74000
74079
|
if (computed !== snapshotHash) {
|
|
74001
74080
|
throw new InstallError(
|
|
74002
74081
|
"HASH_MISMATCH",
|
|
@@ -74088,7 +74167,7 @@ async function installFromChannel(args, deps) {
|
|
|
74088
74167
|
var import_promises14 = __toESM(require("fs/promises"), 1);
|
|
74089
74168
|
var import_node_path76 = __toESM(require("path"), 1);
|
|
74090
74169
|
var import_node_os29 = __toESM(require("os"), 1);
|
|
74091
|
-
var
|
|
74170
|
+
var import_node_crypto25 = __toESM(require("crypto"), 1);
|
|
74092
74171
|
var import_jszip4 = __toESM(require_lib3(), 1);
|
|
74093
74172
|
var UpdateError = class extends Error {
|
|
74094
74173
|
constructor(code, message) {
|
|
@@ -74126,7 +74205,7 @@ async function updateFromChannel(args, deps) {
|
|
|
74126
74205
|
if (e instanceof UpdateError) throw e;
|
|
74127
74206
|
throw e;
|
|
74128
74207
|
}
|
|
74129
|
-
const computed =
|
|
74208
|
+
const computed = import_node_crypto25.default.createHash("sha256").update(bundleZip).digest("hex");
|
|
74130
74209
|
if (computed !== snapshotHash) {
|
|
74131
74210
|
throw new UpdateError(
|
|
74132
74211
|
"HASH_MISMATCH",
|
|
@@ -75255,7 +75334,7 @@ async function uninstall(deps) {
|
|
|
75255
75334
|
}
|
|
75256
75335
|
|
|
75257
75336
|
// src/handlers/index.ts
|
|
75258
|
-
var
|
|
75337
|
+
var import_node_crypto26 = require("crypto");
|
|
75259
75338
|
|
|
75260
75339
|
// src/handlers/peer-exec.ts
|
|
75261
75340
|
init_protocol();
|
|
@@ -75412,7 +75491,7 @@ function buildMethodHandlers(deps) {
|
|
|
75412
75491
|
const c2 = deps.contactStore.get(deviceId);
|
|
75413
75492
|
return c2 ? { deviceId: c2.deviceId, remoteUrl: c2.remoteUrl, connectToken: c2.connectToken } : null;
|
|
75414
75493
|
},
|
|
75415
|
-
genId: () => (0,
|
|
75494
|
+
genId: () => (0, import_node_crypto26.randomUUID)(),
|
|
75416
75495
|
now: () => Date.now(),
|
|
75417
75496
|
forwardInboxPostToPeer,
|
|
75418
75497
|
logger: deps.logger
|
|
@@ -76145,7 +76224,7 @@ async function startDaemon(config) {
|
|
|
76145
76224
|
const channelStore = createChannelStore({
|
|
76146
76225
|
filePath: import_node_path84.default.join(config.dataDir, "channels.json"),
|
|
76147
76226
|
now: () => Date.now(),
|
|
76148
|
-
genId: () => `ch-${(0,
|
|
76227
|
+
genId: () => `ch-${(0, import_node_crypto27.randomUUID)().slice(0, 8)}`,
|
|
76149
76228
|
onFlushError: (err) => logger.error("channel store flush failed", {
|
|
76150
76229
|
reason: err instanceof Error ? err.message : String(err)
|
|
76151
76230
|
})
|
|
@@ -76154,7 +76233,7 @@ async function startDaemon(config) {
|
|
|
76154
76233
|
const topicStore = createTopicStore({
|
|
76155
76234
|
filePath: import_node_path84.default.join(config.dataDir, "topics.json"),
|
|
76156
76235
|
now: () => Date.now(),
|
|
76157
|
-
genId: () => `tp-${(0,
|
|
76236
|
+
genId: () => `tp-${(0, import_node_crypto27.randomUUID)().slice(0, 8)}`,
|
|
76158
76237
|
onFlushError: (err) => logger.error("topic store flush failed", {
|
|
76159
76238
|
reason: err instanceof Error ? err.message : String(err)
|
|
76160
76239
|
})
|
|
@@ -76162,7 +76241,7 @@ async function startDaemon(config) {
|
|
|
76162
76241
|
await topicStore.load();
|
|
76163
76242
|
let deliverPendingRef;
|
|
76164
76243
|
const personaDispatchManager = new PersonaDispatchManager({
|
|
76165
|
-
genId: () => (0,
|
|
76244
|
+
genId: () => (0, import_node_crypto27.randomUUID)(),
|
|
76166
76245
|
store: dispatchStore,
|
|
76167
76246
|
now: () => Date.now(),
|
|
76168
76247
|
onCompleted: (sid) => deliverPendingRef?.(sid),
|