@clawos-dev/clawd 0.2.29 → 0.2.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.cjs +92 -8
- package/package.json +1 -1
package/dist/cli.cjs
CHANGED
|
@@ -8583,7 +8583,7 @@ var init_zod = __esm({
|
|
|
8583
8583
|
});
|
|
8584
8584
|
|
|
8585
8585
|
// ../protocol/src/persona-schemas.ts
|
|
8586
|
-
var PersonaTokenEntrySchema, PersonaFileSchema, PersonaHelloFrameSchema, PersonaSendFrameSchema, PersonaResetFrameSchema, PersonaPingFrameSchema, PersonaReadyFrameSchema, PersonaHistoryEventFrameSchema, PersonaHistoryDoneFrameSchema, PersonaEventFrameSchema, PersonaErrorFrameSchema, PersonaPongFrameSchema, PersonaClientFrameSchema, PersonaServerFrameSchema, PersonaCreateArgsSchema, PersonaIdArgsSchema, PersonaUpdateArgsSchema, PersonaIssueTokenArgsSchema, PersonaRevokeTokenArgsSchema, PersonaAppendOwnerMessageArgsSchema;
|
|
8586
|
+
var PersonaTokenEntrySchema, PersonaFileSchema, PersonaHelloFrameSchema, PersonaSendFrameSchema, PersonaResetFrameSchema, PersonaPingFrameSchema, PersonaReadyFrameSchema, PersonaHistoryEventFrameSchema, PersonaHistoryDoneFrameSchema, PersonaEventFrameSchema, PersonaErrorFrameSchema, PersonaPongFrameSchema, PersonaHistoryPageRequestFrameSchema, PersonaHistoryPageFrameSchema, PersonaClientFrameSchema, PersonaServerFrameSchema, PersonaCreateArgsSchema, PersonaIdArgsSchema, PersonaUpdateArgsSchema, PersonaIssueTokenArgsSchema, PersonaRevokeTokenArgsSchema, PersonaAppendOwnerMessageArgsSchema;
|
|
8587
8587
|
var init_persona_schemas = __esm({
|
|
8588
8588
|
"../protocol/src/persona-schemas.ts"() {
|
|
8589
8589
|
"use strict";
|
|
@@ -8628,7 +8628,9 @@ var init_persona_schemas = __esm({
|
|
|
8628
8628
|
event: external_exports.unknown()
|
|
8629
8629
|
});
|
|
8630
8630
|
PersonaHistoryDoneFrameSchema = external_exports.object({
|
|
8631
|
-
kind: external_exports.literal("history-done")
|
|
8631
|
+
kind: external_exports.literal("history-done"),
|
|
8632
|
+
offset: external_exports.number().int().nonnegative(),
|
|
8633
|
+
total: external_exports.number().int().nonnegative()
|
|
8632
8634
|
});
|
|
8633
8635
|
PersonaEventFrameSchema = external_exports.object({
|
|
8634
8636
|
kind: external_exports.literal("event"),
|
|
@@ -8648,11 +8650,25 @@ var init_persona_schemas = __esm({
|
|
|
8648
8650
|
PersonaPongFrameSchema = external_exports.object({
|
|
8649
8651
|
kind: external_exports.literal("pong")
|
|
8650
8652
|
});
|
|
8653
|
+
PersonaHistoryPageRequestFrameSchema = external_exports.object({
|
|
8654
|
+
kind: external_exports.literal("history-page-request"),
|
|
8655
|
+
requestId: external_exports.string().min(1),
|
|
8656
|
+
limit: external_exports.number().int().positive(),
|
|
8657
|
+
offset: external_exports.number().int().nonnegative()
|
|
8658
|
+
});
|
|
8659
|
+
PersonaHistoryPageFrameSchema = external_exports.object({
|
|
8660
|
+
kind: external_exports.literal("history-page"),
|
|
8661
|
+
requestId: external_exports.string().min(1),
|
|
8662
|
+
events: external_exports.array(external_exports.unknown()),
|
|
8663
|
+
offset: external_exports.number().int().nonnegative(),
|
|
8664
|
+
total: external_exports.number().int().nonnegative()
|
|
8665
|
+
});
|
|
8651
8666
|
PersonaClientFrameSchema = external_exports.discriminatedUnion("kind", [
|
|
8652
8667
|
PersonaHelloFrameSchema,
|
|
8653
8668
|
PersonaSendFrameSchema,
|
|
8654
8669
|
PersonaResetFrameSchema,
|
|
8655
|
-
PersonaPingFrameSchema
|
|
8670
|
+
PersonaPingFrameSchema,
|
|
8671
|
+
PersonaHistoryPageRequestFrameSchema
|
|
8656
8672
|
]);
|
|
8657
8673
|
PersonaServerFrameSchema = external_exports.discriminatedUnion("kind", [
|
|
8658
8674
|
PersonaReadyFrameSchema,
|
|
@@ -8660,7 +8676,8 @@ var init_persona_schemas = __esm({
|
|
|
8660
8676
|
PersonaHistoryDoneFrameSchema,
|
|
8661
8677
|
PersonaEventFrameSchema,
|
|
8662
8678
|
PersonaErrorFrameSchema,
|
|
8663
|
-
PersonaPongFrameSchema
|
|
8679
|
+
PersonaPongFrameSchema,
|
|
8680
|
+
PersonaHistoryPageFrameSchema
|
|
8664
8681
|
]);
|
|
8665
8682
|
PersonaCreateArgsSchema = external_exports.object({
|
|
8666
8683
|
label: external_exports.string().min(1),
|
|
@@ -17238,6 +17255,32 @@ var SessionManager = class {
|
|
|
17238
17255
|
const runner = this.ensureRunnerFor(file, agentId);
|
|
17239
17256
|
return runner.getState().buffer.map((e) => e.event);
|
|
17240
17257
|
}
|
|
17258
|
+
/**
|
|
17259
|
+
* persona-bound transport 用:基于 readHistoryEvents 的 buffer 切片视图,支持分页。
|
|
17260
|
+
*
|
|
17261
|
+
* Why a new method instead of reusing `history:read` RPC handler:
|
|
17262
|
+
* - `history:read` 走 HandlerDeps.history.read(),读 CC 写盘的 jsonl 文件
|
|
17263
|
+
* - 本方法走 reducer buffer(与实时 `subscribe` 同一数据源)
|
|
17264
|
+
* 两条路径数据形态、时序、字段不同,不能共享 helper。persona-bound 客户端必须
|
|
17265
|
+
* 走 buffer 路径,才能保证首屏回放和实时帧无 gap、无重复。
|
|
17266
|
+
*
|
|
17267
|
+
* Why not 改 readHistoryEvents 加 limit/offset:现有 readHistoryEvents 的语义是
|
|
17268
|
+
* "返回 buffer 全部",被其它路径(rewind uuid 转译等)依赖;保留它不动,新加分页方法。
|
|
17269
|
+
*
|
|
17270
|
+
* 切片语义:clip 安全边界,response.offset 保留请求值便于客户端识别越界请求。
|
|
17271
|
+
* - offset >= total → events: [], offset: 请求值, total: 当前 buffer 长度
|
|
17272
|
+
* - offset + limit > total → 返回 tail [offset, total),长度 = total - offset
|
|
17273
|
+
* - 正常 → 返回 [offset, offset + limit)
|
|
17274
|
+
*
|
|
17275
|
+
* SESSION_NOT_FOUND 行为继承 readHistoryEvents(store.read 返回 null 即抛)。
|
|
17276
|
+
*/
|
|
17277
|
+
readHistoryPage(sessionId, agentId, limit, offset) {
|
|
17278
|
+
const all = this.readHistoryEvents(sessionId, agentId);
|
|
17279
|
+
const total = all.length;
|
|
17280
|
+
const start = Math.min(offset, total);
|
|
17281
|
+
const end = Math.min(start + limit, total);
|
|
17282
|
+
return { events: all.slice(start, end), offset, total };
|
|
17283
|
+
}
|
|
17241
17284
|
/**
|
|
17242
17285
|
* persona-bound transport 用:订阅 sub-session 实时 ParsedEvent。
|
|
17243
17286
|
* 返回 unsubscribe;不破坏现有 wire 广播路径——routeFromRunner 同时 fan-out 到
|
|
@@ -18469,20 +18512,31 @@ var PersonaBoundHandler = class {
|
|
|
18469
18512
|
send({ kind: "event", event });
|
|
18470
18513
|
}
|
|
18471
18514
|
);
|
|
18515
|
+
const FIRST_PAGE_SIZE = 50;
|
|
18516
|
+
let firstPageOffset = 0;
|
|
18517
|
+
let firstPageTotal = 0;
|
|
18472
18518
|
try {
|
|
18473
|
-
const
|
|
18519
|
+
const page = this.deps.sessionManager.readHistoryPage(
|
|
18474
18520
|
subSessionFile.sessionId,
|
|
18475
|
-
personaId
|
|
18521
|
+
personaId,
|
|
18522
|
+
FIRST_PAGE_SIZE,
|
|
18523
|
+
0
|
|
18476
18524
|
);
|
|
18477
|
-
for (const event of
|
|
18525
|
+
for (const event of page.events) {
|
|
18478
18526
|
send({ kind: "history-event", event });
|
|
18479
18527
|
}
|
|
18528
|
+
firstPageOffset = page.events.length;
|
|
18529
|
+
firstPageTotal = page.total;
|
|
18480
18530
|
} catch (err) {
|
|
18481
18531
|
this.deps.logger.warn(
|
|
18482
18532
|
`persona history read failed: ${err.message}`
|
|
18483
18533
|
);
|
|
18484
18534
|
}
|
|
18485
|
-
send({
|
|
18535
|
+
send({
|
|
18536
|
+
kind: "history-done",
|
|
18537
|
+
offset: firstPageOffset,
|
|
18538
|
+
total: firstPageTotal
|
|
18539
|
+
});
|
|
18486
18540
|
return;
|
|
18487
18541
|
}
|
|
18488
18542
|
switch (frame.kind) {
|
|
@@ -18519,6 +18573,36 @@ var PersonaBoundHandler = class {
|
|
|
18519
18573
|
case "ping":
|
|
18520
18574
|
send({ kind: "pong" });
|
|
18521
18575
|
return;
|
|
18576
|
+
case "history-page-request": {
|
|
18577
|
+
try {
|
|
18578
|
+
const page = this.deps.sessionManager.readHistoryPage(
|
|
18579
|
+
scope.subSessionId,
|
|
18580
|
+
scope.personaId,
|
|
18581
|
+
frame.limit,
|
|
18582
|
+
frame.offset
|
|
18583
|
+
);
|
|
18584
|
+
send({
|
|
18585
|
+
kind: "history-page",
|
|
18586
|
+
requestId: frame.requestId,
|
|
18587
|
+
events: page.events,
|
|
18588
|
+
offset: frame.offset,
|
|
18589
|
+
// 请求值原样回传,便于 client 识别越界
|
|
18590
|
+
total: page.total
|
|
18591
|
+
});
|
|
18592
|
+
} catch (err) {
|
|
18593
|
+
this.deps.logger.warn(
|
|
18594
|
+
`persona history-page-request failed: ${err.message}`
|
|
18595
|
+
);
|
|
18596
|
+
send({
|
|
18597
|
+
kind: "history-page",
|
|
18598
|
+
requestId: frame.requestId,
|
|
18599
|
+
events: [],
|
|
18600
|
+
offset: frame.offset,
|
|
18601
|
+
total: 0
|
|
18602
|
+
});
|
|
18603
|
+
}
|
|
18604
|
+
return;
|
|
18605
|
+
}
|
|
18522
18606
|
}
|
|
18523
18607
|
});
|
|
18524
18608
|
ws.on("close", () => {
|