clawconnect-agent 0.1.41 → 0.2.0
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/.env.example +3 -0
- package/README.md +2 -1
- package/README.zh-CN.md +2 -1
- package/dist/commands/status.js +7 -2
- package/dist/commands/status.js.map +1 -1
- package/dist/config/env.d.ts +1 -1
- package/dist/config/env.js +3 -0
- package/dist/config/env.js.map +1 -1
- package/dist/hermes/hermes-relay-manager.d.ts +2 -3
- package/dist/hermes/hermes-relay-manager.js +19 -32
- package/dist/hermes/hermes-relay-manager.js.map +1 -1
- package/dist/hermes/runtime/hermes-runtime-api-client.js +28 -13
- package/dist/hermes/runtime/hermes-runtime-api-client.js.map +1 -1
- package/dist/hermes/runtime/hermes-runtime-api-settings.d.ts +8 -3
- package/dist/hermes/runtime/hermes-runtime-api-settings.js +120 -9
- package/dist/hermes/runtime/hermes-runtime-api-settings.js.map +1 -1
- package/dist/hermes/runtime/hermes-runtime-chat.js +51 -0
- package/dist/hermes/runtime/hermes-runtime-chat.js.map +1 -1
- package/dist/hermes/runtime/hermes-runtime-state-db.d.ts +8 -0
- package/dist/hermes/runtime/hermes-runtime-state-db.js +124 -4
- package/dist/hermes/runtime/hermes-runtime-state-db.js.map +1 -1
- package/package.json +1 -1
- package/dist/hermes/relay/hermes-state-db-realtime.d.ts +0 -99
- package/dist/hermes/relay/hermes-state-db-realtime.js +0 -833
- package/dist/hermes/relay/hermes-state-db-realtime.js.map +0 -1
|
@@ -30,14 +30,17 @@ def to_iso(value):
|
|
|
30
30
|
def row_dict(row):
|
|
31
31
|
return {key: row[key] for key in row.keys()}
|
|
32
32
|
|
|
33
|
-
def connect():
|
|
34
|
-
|
|
33
|
+
def connect(writable=False):
|
|
34
|
+
uri_mode = "rw" if writable else "ro"
|
|
35
|
+
conn = sqlite3.connect(f"file:{db_path}?mode={uri_mode}", uri=True, timeout=1.0)
|
|
35
36
|
conn.row_factory = sqlite3.Row
|
|
36
|
-
|
|
37
|
+
if not writable:
|
|
38
|
+
conn.execute("PRAGMA query_only=ON")
|
|
37
39
|
return conn
|
|
38
40
|
|
|
41
|
+
conn = None
|
|
39
42
|
try:
|
|
40
|
-
conn = connect()
|
|
43
|
+
conn = connect(writable=(mode == "rewind_after"))
|
|
41
44
|
if mode == "list":
|
|
42
45
|
rows = conn.execute("""
|
|
43
46
|
SELECT
|
|
@@ -182,10 +185,97 @@ try:
|
|
|
182
185
|
"newestCursor": f"seq:{last_id}" if last_id is not None else None,
|
|
183
186
|
}
|
|
184
187
|
print(json.dumps({"ok": True, "payload": payload}, ensure_ascii=False))
|
|
188
|
+
elif mode == "active_head":
|
|
189
|
+
session_id = sys.argv[3]
|
|
190
|
+
session = conn.execute("SELECT id FROM sessions WHERE id = ?", (session_id,)).fetchone()
|
|
191
|
+
if session is None:
|
|
192
|
+
print(json.dumps({"ok": True, "payload": {"found": False}}, ensure_ascii=False))
|
|
193
|
+
else:
|
|
194
|
+
row = conn.execute("""
|
|
195
|
+
SELECT MAX(id) AS head_message_id FROM messages
|
|
196
|
+
WHERE session_id = ? AND COALESCE(active, 1) != 0
|
|
197
|
+
""", (session_id,)).fetchone()
|
|
198
|
+
print(json.dumps({
|
|
199
|
+
"ok": True,
|
|
200
|
+
"payload": {
|
|
201
|
+
"found": True,
|
|
202
|
+
"headMessageId": int(row["head_message_id"] or 0),
|
|
203
|
+
},
|
|
204
|
+
}, ensure_ascii=False))
|
|
205
|
+
elif mode == "rewind_after":
|
|
206
|
+
session_id = sys.argv[3]
|
|
207
|
+
head_message_id = max(0, int(sys.argv[4]))
|
|
208
|
+
expected_source_run_id = sys.argv[5]
|
|
209
|
+
conn.execute("BEGIN IMMEDIATE")
|
|
210
|
+
session = conn.execute("SELECT id FROM sessions WHERE id = ?", (session_id,)).fetchone()
|
|
211
|
+
if session is None:
|
|
212
|
+
conn.rollback()
|
|
213
|
+
print(json.dumps({"ok": True, "payload": {"found": False}}, ensure_ascii=False))
|
|
214
|
+
else:
|
|
215
|
+
target = conn.execute("""
|
|
216
|
+
SELECT id, role, content FROM messages
|
|
217
|
+
WHERE session_id = ? AND id > ? AND COALESCE(active, 1) != 0
|
|
218
|
+
ORDER BY id ASC LIMIT 1
|
|
219
|
+
""", (session_id, head_message_id)).fetchone()
|
|
220
|
+
if target is None:
|
|
221
|
+
conn.rollback()
|
|
222
|
+
print(json.dumps({
|
|
223
|
+
"ok": True,
|
|
224
|
+
"payload": {"found": True, "rewoundCount": 0},
|
|
225
|
+
}, ensure_ascii=False))
|
|
226
|
+
elif target["role"] != "user":
|
|
227
|
+
conn.rollback()
|
|
228
|
+
print(json.dumps({"ok": False, "error": "rewind target is not a user message"}, ensure_ascii=False))
|
|
229
|
+
elif not isinstance(target["content"], str):
|
|
230
|
+
conn.rollback()
|
|
231
|
+
print(json.dumps({"ok": False, "error": "rewind target has no text metadata"}, ensure_ascii=False))
|
|
232
|
+
else:
|
|
233
|
+
lines = target["content"].splitlines()
|
|
234
|
+
source_run_id_matches = False
|
|
235
|
+
for index, line in enumerate(lines):
|
|
236
|
+
if line.strip() != "[ClawConnect mobile turn]":
|
|
237
|
+
continue
|
|
238
|
+
source_run_id = None
|
|
239
|
+
for metadata_line in lines[index + 1:]:
|
|
240
|
+
stripped = metadata_line.strip()
|
|
241
|
+
if not stripped:
|
|
242
|
+
break
|
|
243
|
+
if stripped.startswith("[") and stripped.endswith("]"):
|
|
244
|
+
break
|
|
245
|
+
if stripped.startswith("sourceRunId:"):
|
|
246
|
+
source_run_id = stripped[len("sourceRunId:"):].strip()
|
|
247
|
+
break
|
|
248
|
+
if source_run_id == expected_source_run_id:
|
|
249
|
+
source_run_id_matches = True
|
|
250
|
+
break
|
|
251
|
+
if not source_run_id_matches:
|
|
252
|
+
conn.rollback()
|
|
253
|
+
print(json.dumps({"ok": False, "error": "rewind target run id mismatch"}, ensure_ascii=False))
|
|
254
|
+
else:
|
|
255
|
+
cursor = conn.execute("""
|
|
256
|
+
UPDATE messages SET active = 0
|
|
257
|
+
WHERE session_id = ? AND id >= ? AND COALESCE(active, 1) != 0
|
|
258
|
+
""", (session_id, int(target["id"])))
|
|
259
|
+
if cursor.rowcount > 0:
|
|
260
|
+
conn.execute("""
|
|
261
|
+
UPDATE sessions SET rewind_count = COALESCE(rewind_count, 0) + 1
|
|
262
|
+
WHERE id = ?
|
|
263
|
+
""", (session_id,))
|
|
264
|
+
conn.commit()
|
|
265
|
+
print(json.dumps({
|
|
266
|
+
"ok": True,
|
|
267
|
+
"payload": {
|
|
268
|
+
"found": True,
|
|
269
|
+
"rewoundCount": int(cursor.rowcount),
|
|
270
|
+
},
|
|
271
|
+
}, ensure_ascii=False))
|
|
185
272
|
else:
|
|
186
273
|
print(json.dumps({"ok": False, "error": "unsupported mode"}, ensure_ascii=False))
|
|
187
274
|
except Exception as exc:
|
|
188
275
|
print(json.dumps({"ok": False, "error": str(exc)}, ensure_ascii=False))
|
|
276
|
+
finally:
|
|
277
|
+
if conn is not None:
|
|
278
|
+
conn.close()
|
|
189
279
|
`;
|
|
190
280
|
export async function listHermesSessionsFromStateDb() {
|
|
191
281
|
const payload = await runHermesStateDbQuery("list", [String(HERMES_STATE_DB_LIST_LIMIT)]);
|
|
@@ -253,6 +343,36 @@ export async function queryHermesHistoryPageFromStateDb(params) {
|
|
|
253
343
|
...(stringValue(record.newestCursor) ? { newestCursor: stringValue(record.newestCursor) } : {}),
|
|
254
344
|
};
|
|
255
345
|
}
|
|
346
|
+
/**
|
|
347
|
+
* Capture an authoritative active-message boundary before resuming a Hermes
|
|
348
|
+
* CLI session. The row id is stable and lets abort recovery exclude only rows
|
|
349
|
+
* created by the canceled invocation without comparing message text or time.
|
|
350
|
+
*/
|
|
351
|
+
export async function captureHermesSessionActiveHead(sessionId) {
|
|
352
|
+
const normalized = sessionId.trim();
|
|
353
|
+
if (!normalized) {
|
|
354
|
+
return undefined;
|
|
355
|
+
}
|
|
356
|
+
const record = toRecord(await runHermesStateDbQuery("active_head", [normalized]));
|
|
357
|
+
if (record.found !== true || typeof record.headMessageId !== "number" || !Number.isSafeInteger(record.headMessageId)) {
|
|
358
|
+
return undefined;
|
|
359
|
+
}
|
|
360
|
+
return Math.max(0, record.headMessageId);
|
|
361
|
+
}
|
|
362
|
+
/** Soft-rewind rows appended after a previously captured active head. */
|
|
363
|
+
export async function rewindHermesSessionAfterActiveHead(sessionId, headMessageId, expectedSourceRunId) {
|
|
364
|
+
const normalized = sessionId.trim();
|
|
365
|
+
const normalizedSourceRunId = expectedSourceRunId.trim();
|
|
366
|
+
if (!normalized || !normalizedSourceRunId || !Number.isSafeInteger(headMessageId) || headMessageId < 0) {
|
|
367
|
+
return false;
|
|
368
|
+
}
|
|
369
|
+
const record = toRecord(await runHermesStateDbQuery("rewind_after", [
|
|
370
|
+
normalized,
|
|
371
|
+
String(headMessageId),
|
|
372
|
+
normalizedSourceRunId,
|
|
373
|
+
]));
|
|
374
|
+
return record.found === true;
|
|
375
|
+
}
|
|
256
376
|
export function buildEmptyHermesHistoryExport(sessionIdentity) {
|
|
257
377
|
return {
|
|
258
378
|
sessionId: sessionIdentity?.trim() || "main",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hermes-runtime-state-db.js","sourceRoot":"","sources":["../../../src/hermes/runtime/hermes-runtime-state-db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EACL,cAAc,GACf,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAC7F,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEnE,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;AACvC,MAAM,gCAAgC,GAAG,KAAK,CAAC;AAC/C,MAAM,0BAA0B,GAAG,GAAG,CAAC;AACvC,MAAM,sCAAsC,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAWhE,MAAM,sBAAsB,GAAG,MAAM,CAAC,GAAG,CAAA
|
|
1
|
+
{"version":3,"file":"hermes-runtime-state-db.js","sourceRoot":"","sources":["../../../src/hermes/runtime/hermes-runtime-state-db.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import { type CanonicalTimelineEvent, type TimelineRole } from "../../core/relay/timeline-event-log.js";
|
|
2
|
-
export type HermesStateDbRealtimeMessageRow = {
|
|
3
|
-
id: number;
|
|
4
|
-
sessionId: string;
|
|
5
|
-
sessionSource: string;
|
|
6
|
-
role: "user" | "assistant" | "tool" | "system";
|
|
7
|
-
content: string;
|
|
8
|
-
timestamp: number;
|
|
9
|
-
active: boolean;
|
|
10
|
-
observed: boolean;
|
|
11
|
-
toolName?: string;
|
|
12
|
-
toolCallId?: string;
|
|
13
|
-
finishReason?: string;
|
|
14
|
-
toolCalls?: string;
|
|
15
|
-
platformMessageId?: string;
|
|
16
|
-
};
|
|
17
|
-
export type HermesStateDbRealtimeOpenTurn = {
|
|
18
|
-
turnId: string;
|
|
19
|
-
runId: string;
|
|
20
|
-
mobileTurn: boolean;
|
|
21
|
-
sessionKey?: string;
|
|
22
|
-
};
|
|
23
|
-
export type HermesStateDbRealtimeCursor = {
|
|
24
|
-
lastMessageId: number;
|
|
25
|
-
openTurnsBySession: Record<string, HermesStateDbRealtimeOpenTurn>;
|
|
26
|
-
};
|
|
27
|
-
export type HermesStateDbRealtimePayload = {
|
|
28
|
-
runId: string;
|
|
29
|
-
sessionKey: string;
|
|
30
|
-
state: "history_sync";
|
|
31
|
-
role: TimelineRole;
|
|
32
|
-
timelineEvents: CanonicalTimelineEvent[];
|
|
33
|
-
};
|
|
34
|
-
export type HermesStateDbRealtimeBuildResult = {
|
|
35
|
-
cursor: HermesStateDbRealtimeCursor;
|
|
36
|
-
payloads: HermesStateDbRealtimePayload[];
|
|
37
|
-
};
|
|
38
|
-
export type HermesStateDbRealtimeWatcher = {
|
|
39
|
-
primeCursor: () => Promise<void>;
|
|
40
|
-
pollOnce: () => Promise<void>;
|
|
41
|
-
start: () => void;
|
|
42
|
-
stop: () => void;
|
|
43
|
-
cursor: () => HermesStateDbRealtimeCursor;
|
|
44
|
-
};
|
|
45
|
-
export declare function buildHermesStateDbRealtimePayloads(params: {
|
|
46
|
-
gatewayId: string;
|
|
47
|
-
cursor: HermesStateDbRealtimeCursor;
|
|
48
|
-
rows: HermesStateDbRealtimeMessageRow[];
|
|
49
|
-
}): HermesStateDbRealtimeBuildResult;
|
|
50
|
-
export declare function queryHermesStateDbMaxMessageId(params: {
|
|
51
|
-
dbPath: string;
|
|
52
|
-
pythonBin?: string;
|
|
53
|
-
}): Promise<number>;
|
|
54
|
-
export declare function queryHermesStateDbRealtimeRows(params: {
|
|
55
|
-
dbPath: string;
|
|
56
|
-
afterMessageId: number;
|
|
57
|
-
limit?: number;
|
|
58
|
-
pythonBin?: string;
|
|
59
|
-
}): Promise<HermesStateDbRealtimeMessageRow[]>;
|
|
60
|
-
export declare function queryHermesStateDbRealtimeOpenTurnRows(params: {
|
|
61
|
-
dbPath: string;
|
|
62
|
-
upToMessageId: number;
|
|
63
|
-
pythonBin?: string;
|
|
64
|
-
}): Promise<HermesStateDbRealtimeMessageRow[]>;
|
|
65
|
-
export type HermesStateDbRealtimeQueryClient = {
|
|
66
|
-
queryMaxMessageId: () => Promise<number>;
|
|
67
|
-
queryRows: (params: {
|
|
68
|
-
afterMessageId: number;
|
|
69
|
-
limit?: number;
|
|
70
|
-
}) => Promise<HermesStateDbRealtimeMessageRow[]>;
|
|
71
|
-
queryOpenTurnRows: (params: {
|
|
72
|
-
upToMessageId: number;
|
|
73
|
-
}) => Promise<HermesStateDbRealtimeMessageRow[]>;
|
|
74
|
-
close: () => void;
|
|
75
|
-
processId: () => number | undefined;
|
|
76
|
-
};
|
|
77
|
-
export declare function createHermesStateDbRealtimeQueryClient(params: {
|
|
78
|
-
dbPath: string;
|
|
79
|
-
pythonBin?: string;
|
|
80
|
-
timeoutMs?: number;
|
|
81
|
-
}): HermesStateDbRealtimeQueryClient;
|
|
82
|
-
export declare function createHermesStateDbRealtimeWatcher(params: {
|
|
83
|
-
gatewayId: string;
|
|
84
|
-
dbPath: string;
|
|
85
|
-
publishPayload: (payload: HermesStateDbRealtimePayload) => void;
|
|
86
|
-
pollIntervalMs?: number;
|
|
87
|
-
queryMaxMessageId?: () => Promise<number>;
|
|
88
|
-
queryRows?: (params: {
|
|
89
|
-
afterMessageId: number;
|
|
90
|
-
}) => Promise<HermesStateDbRealtimeMessageRow[]>;
|
|
91
|
-
queryOpenTurnRows?: (params: {
|
|
92
|
-
upToMessageId: number;
|
|
93
|
-
}) => Promise<HermesStateDbRealtimeMessageRow[]>;
|
|
94
|
-
queryClientFactory?: () => HermesStateDbRealtimeQueryClient;
|
|
95
|
-
onError?: (error: unknown) => void;
|
|
96
|
-
}): HermesStateDbRealtimeWatcher;
|
|
97
|
-
export declare function resolveHermesStateDbRealtimePath(): string | undefined;
|
|
98
|
-
export declare function resolveHermesStateDbRealtimePython(): string;
|
|
99
|
-
export declare function readHermesStateDbRealtimePayload(readOutput: () => Promise<string>, maxAttempts?: number): Promise<unknown>;
|