clawconnect-agent 0.1.42 → 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.
@@ -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
- conn = sqlite3.connect(f"file:{db_path}?mode=ro", uri=True, timeout=1.0)
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
- conn.execute("PRAGMA query_only=ON")
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":"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"}
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,6 +1,6 @@
1
1
  {
2
2
  "name": "clawconnect-agent",
3
- "version": "0.1.42",
3
+ "version": "0.2.0",
4
4
  "description": "ClawConnect host agent for OpenClaw remote access",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -1,108 +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
- invalidMobileTurn?: boolean;
23
- };
24
- export type HermesStateDbRealtimeCursor = {
25
- lastMessageId: number;
26
- openTurnsBySession: Record<string, HermesStateDbRealtimeOpenTurn>;
27
- };
28
- export type HermesStateDbRealtimePayload = {
29
- runId: string;
30
- sessionKey: string;
31
- state: "history_sync";
32
- role: TimelineRole;
33
- timelineEvents: CanonicalTimelineEvent[];
34
- };
35
- export type HermesStateDbRealtimeBuildResult = {
36
- cursor: HermesStateDbRealtimeCursor;
37
- payloads: HermesStateDbRealtimePayload[];
38
- warnings: HermesStateDbRealtimeWarning[];
39
- };
40
- export type HermesStateDbRealtimeWarning = {
41
- code: "mobile_turn_metadata_incomplete";
42
- sessionId: string;
43
- rowId: number;
44
- missingFields: Array<"sourceRunId" | "sessionKey">;
45
- };
46
- export type HermesStateDbRealtimeWatcher = {
47
- primeCursor: () => Promise<void>;
48
- pollOnce: () => Promise<void>;
49
- start: () => void;
50
- stop: () => void;
51
- cursor: () => HermesStateDbRealtimeCursor;
52
- };
53
- export declare function buildHermesStateDbRealtimePayloads(params: {
54
- gatewayId: string;
55
- cursor: HermesStateDbRealtimeCursor;
56
- rows: HermesStateDbRealtimeMessageRow[];
57
- }): HermesStateDbRealtimeBuildResult;
58
- export declare function queryHermesStateDbMaxMessageId(params: {
59
- dbPath: string;
60
- pythonBin?: string;
61
- }): Promise<number>;
62
- export declare function queryHermesStateDbRealtimeRows(params: {
63
- dbPath: string;
64
- afterMessageId: number;
65
- limit?: number;
66
- pythonBin?: string;
67
- }): Promise<HermesStateDbRealtimeMessageRow[]>;
68
- export declare function queryHermesStateDbRealtimeOpenTurnRows(params: {
69
- dbPath: string;
70
- upToMessageId: number;
71
- pythonBin?: string;
72
- }): Promise<HermesStateDbRealtimeMessageRow[]>;
73
- export type HermesStateDbRealtimeQueryClient = {
74
- queryMaxMessageId: () => Promise<number>;
75
- queryRows: (params: {
76
- afterMessageId: number;
77
- limit?: number;
78
- }) => Promise<HermesStateDbRealtimeMessageRow[]>;
79
- queryOpenTurnRows: (params: {
80
- upToMessageId: number;
81
- }) => Promise<HermesStateDbRealtimeMessageRow[]>;
82
- close: () => void;
83
- processId: () => number | undefined;
84
- };
85
- export declare function createHermesStateDbRealtimeQueryClient(params: {
86
- dbPath: string;
87
- pythonBin?: string;
88
- timeoutMs?: number;
89
- }): HermesStateDbRealtimeQueryClient;
90
- export declare function createHermesStateDbRealtimeWatcher(params: {
91
- gatewayId: string;
92
- dbPath: string;
93
- publishPayload: (payload: HermesStateDbRealtimePayload) => void;
94
- pollIntervalMs?: number;
95
- queryMaxMessageId?: () => Promise<number>;
96
- queryRows?: (params: {
97
- afterMessageId: number;
98
- }) => Promise<HermesStateDbRealtimeMessageRow[]>;
99
- queryOpenTurnRows?: (params: {
100
- upToMessageId: number;
101
- }) => Promise<HermesStateDbRealtimeMessageRow[]>;
102
- queryClientFactory?: () => HermesStateDbRealtimeQueryClient;
103
- onWarning?: (warning: HermesStateDbRealtimeWarning) => void;
104
- onError?: (error: unknown) => void;
105
- }): HermesStateDbRealtimeWatcher;
106
- export declare function resolveHermesStateDbRealtimePath(): string | undefined;
107
- export declare function resolveHermesStateDbRealtimePython(): string;
108
- export declare function readHermesStateDbRealtimePayload(readOutput: () => Promise<string>, maxAttempts?: number): Promise<unknown>;