@linkshell/host 0.1.1 → 0.1.3

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.
Files changed (67) hide show
  1. package/dist/host/src/carry.d.ts +15 -0
  2. package/dist/host/src/carry.js +83 -0
  3. package/dist/host/src/carry.js.map +1 -0
  4. package/dist/host/src/drivers/acp/driver.d.ts +13 -3
  5. package/dist/host/src/drivers/acp/driver.js +43 -8
  6. package/dist/host/src/drivers/acp/driver.js.map +1 -1
  7. package/dist/host/src/drivers/acp/mapper.d.ts +5 -1
  8. package/dist/host/src/drivers/acp/mapper.js +53 -5
  9. package/dist/host/src/drivers/acp/mapper.js.map +1 -1
  10. package/dist/host/src/drivers/claude/driver.d.ts +53 -8
  11. package/dist/host/src/drivers/claude/driver.js +357 -40
  12. package/dist/host/src/drivers/claude/driver.js.map +1 -1
  13. package/dist/host/src/drivers/claude/holders.d.ts +9 -0
  14. package/dist/host/src/drivers/claude/holders.js +61 -0
  15. package/dist/host/src/drivers/claude/holders.js.map +1 -0
  16. package/dist/host/src/drivers/claude/transcript.d.ts +103 -65
  17. package/dist/host/src/drivers/claude/transcript.js +246 -26
  18. package/dist/host/src/drivers/claude/transcript.js.map +1 -1
  19. package/dist/host/src/drivers/codex/commands.d.ts +27 -0
  20. package/dist/host/src/drivers/codex/commands.js +23 -0
  21. package/dist/host/src/drivers/codex/commands.js.map +1 -0
  22. package/dist/host/src/drivers/codex/driver.d.ts +15 -1
  23. package/dist/host/src/drivers/codex/driver.js +110 -1
  24. package/dist/host/src/drivers/codex/driver.js.map +1 -1
  25. package/dist/host/src/drivers/codex/mapper.d.ts +4 -0
  26. package/dist/host/src/drivers/codex/mapper.js +29 -5
  27. package/dist/host/src/drivers/codex/mapper.js.map +1 -1
  28. package/dist/host/src/drivers/types.d.ts +34 -3
  29. package/dist/host/src/fs.d.ts +26 -4
  30. package/dist/host/src/fs.js +71 -17
  31. package/dist/host/src/fs.js.map +1 -1
  32. package/dist/host/src/gateway.d.ts +3 -0
  33. package/dist/host/src/gateway.js +9 -0
  34. package/dist/host/src/gateway.js.map +1 -1
  35. package/dist/host/src/host.d.ts +7 -3
  36. package/dist/host/src/host.js +42 -18
  37. package/dist/host/src/host.js.map +1 -1
  38. package/dist/host/src/hub.d.ts +91 -15
  39. package/dist/host/src/hub.js +556 -33
  40. package/dist/host/src/hub.js.map +1 -1
  41. package/dist/host/src/rpc/server.d.ts +4 -2
  42. package/dist/host/src/rpc/server.js +51 -6
  43. package/dist/host/src/rpc/server.js.map +1 -1
  44. package/dist/host/src/screen.d.ts +11 -0
  45. package/dist/host/src/screen.js +57 -3
  46. package/dist/host/src/screen.js.map +1 -1
  47. package/dist/host/src/slim.d.ts +17 -0
  48. package/dist/host/src/slim.js +66 -0
  49. package/dist/host/src/slim.js.map +1 -0
  50. package/dist/host/src/store.d.ts +75 -3
  51. package/dist/host/src/store.js +216 -16
  52. package/dist/host/src/store.js.map +1 -1
  53. package/dist/host/src/worktrees.d.ts +36 -0
  54. package/dist/host/src/worktrees.js +96 -0
  55. package/dist/host/src/worktrees.js.map +1 -0
  56. package/dist/host/tsconfig.tsbuildinfo +1 -1
  57. package/dist/wire/src/model.d.ts +148 -0
  58. package/dist/wire/src/model.js +55 -0
  59. package/dist/wire/src/model.js.map +1 -1
  60. package/dist/wire/src/relay-client.d.ts +2 -0
  61. package/dist/wire/src/relay-client.js +12 -0
  62. package/dist/wire/src/relay-client.js.map +1 -1
  63. package/dist/wire/src/rpc.d.ts +5977 -259
  64. package/dist/wire/src/rpc.js +130 -7
  65. package/dist/wire/src/rpc.js.map +1 -1
  66. package/dist/wire/src/updates.d.ts +79 -79
  67. package/package.json +2 -2
@@ -0,0 +1,66 @@
1
+ // What a client is sent of an event. The log keeps everything an agent
2
+ // produced; a phone reading a session through a relay needs the conversation,
3
+ // not every screenshot and file dump in it. Pictures become references the
4
+ // client loads when it shows them, and very long text is cut.
5
+ /** Pictures up to this size (base64 characters) travel inline. */
6
+ const INLINE_IMAGE = 16 * 1024;
7
+ /** Text beyond this is cut. */
8
+ const MAX_TEXT = 32 * 1024;
9
+ const KEPT_TEXT = 24 * 1024;
10
+ const IMAGE_URI = /^linkshell-event:(\d+)\/(\d+)$/;
11
+ function isLargeImage(value) {
12
+ const block = value;
13
+ return block?.type === "image" && typeof block.data === "string" && block.data.length > INLINE_IMAGE && typeof block.mimeType === "string";
14
+ }
15
+ /** Visits every large picture in an update, in a fixed order; `replace` returns what takes its place. */
16
+ function walk(value, state, replace, cut) {
17
+ if (typeof value === "string") {
18
+ if (!cut || value.length <= MAX_TEXT)
19
+ return value;
20
+ return `${value.slice(0, KEPT_TEXT)}\n… [已省略 ${Math.round((value.length - KEPT_TEXT) / 1024)} KB,完整内容在电脑上]`;
21
+ }
22
+ if (Array.isArray(value)) {
23
+ let out;
24
+ value.forEach((entry, i) => {
25
+ const next = walk(entry, state, replace, cut);
26
+ if (next !== entry)
27
+ (out ??= value.slice())[i] = next;
28
+ });
29
+ return out ?? value;
30
+ }
31
+ if (value && typeof value === "object") {
32
+ if (isLargeImage(value))
33
+ return replace(value, state.images++);
34
+ let out;
35
+ for (const [key, entry] of Object.entries(value)) {
36
+ const next = walk(entry, state, replace, cut);
37
+ if (next !== entry)
38
+ (out ??= { ...value })[key] = next;
39
+ }
40
+ return out ?? value;
41
+ }
42
+ return value;
43
+ }
44
+ /** The event as sent to a client; the same object when nothing in it is heavy. */
45
+ export function slimEvent(event, options = {}) {
46
+ const update = walk(event.update, { images: 0 }, (image, index) => options.lazyImages
47
+ ? { type: "image", mimeType: image.mimeType, uri: `linkshell-event:${event.seq}/${index}` }
48
+ : { type: "text", text: "[图片]" }, true);
49
+ return update === event.update ? event : { ...event, update: update };
50
+ }
51
+ /** Which event and which of its pictures a `linkshell-event:` uri names. */
52
+ export function parseImageUri(uri) {
53
+ const match = IMAGE_URI.exec(uri);
54
+ return match ? { seq: Number(match[1]), index: Number(match[2]) } : undefined;
55
+ }
56
+ /** The picture `slimEvent` replaced with reference `index`. */
57
+ export function imageOf(event, index) {
58
+ let found;
59
+ walk(event.update, { images: 0 }, (image, at) => {
60
+ if (at === index)
61
+ found = { mimeType: image.mimeType, data: image.data };
62
+ return image;
63
+ }, false);
64
+ return found;
65
+ }
66
+ //# sourceMappingURL=slim.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slim.js","sourceRoot":"","sources":["../../../src/slim.ts"],"names":[],"mappings":"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"}
@@ -36,6 +36,33 @@ export type SessionPatch = Partial<{
36
36
  archived: boolean;
37
37
  customTitle: string | null;
38
38
  }>;
39
+ /** A git worktree made for sessions (see worktrees.ts). */
40
+ export interface WorktreeRecord {
41
+ /** The worktree's top directory. */
42
+ path: string;
43
+ branch: string;
44
+ /** The repository's top directory. */
45
+ source: string;
46
+ /** The directory the first session in it was started from (a project, possibly inside the repository). */
47
+ sourceCwd: string;
48
+ /** The commit it started at. */
49
+ base: string;
50
+ createdAt: number;
51
+ }
52
+ /** The worktree `cwd` is in, if any. */
53
+ export declare function worktreeOf(cwd: string, worktrees: WorktreeRecord[]): WorktreeRecord | undefined;
54
+ /** How much history one page carries (see `pageStart`). */
55
+ export interface PageBudget {
56
+ /** A page goes back whole turns until it has this many events or bytes… */
57
+ minEvents: number;
58
+ minBytes: number;
59
+ /** …and never more than this, even inside one turn. */
60
+ maxEvents: number;
61
+ maxBytes: number;
62
+ /** What one event counts for at most: its size as sent, not as stored. */
63
+ eventBytes: number;
64
+ }
65
+ export declare const PAGE: PageBudget;
39
66
  /**
40
67
  * Durable host state: session summaries plus one append-only event log per
41
68
  * session. Every update a client sees gets a per-session `seq`, so a client
@@ -66,9 +93,54 @@ export declare class HostStore {
66
93
  includeArchived?: boolean;
67
94
  }): SessionSummary[];
68
95
  listProjects(limit?: number): ProjectSummary[];
69
- /** Appends one update to the session's log and returns it with its seq. */
70
- appendEvent(sessionId: string, update: SessionUpdate, ts?: number): SessionEvent;
71
- readEvents(sessionId: string, afterSeq: number, limit?: number): SessionEvent[];
96
+ saveWorktree(worktree: WorktreeRecord): void;
97
+ listWorktrees(): WorktreeRecord[];
98
+ deleteWorktree(path: string): void;
99
+ /** Sessions whose directory is `path` or inside it. */
100
+ sessionsUnder(path: string): string[];
101
+ /** The seq of the latest event that mentions message or tool call `itemId`, and how many turns had started by then. */
102
+ locateItem(sessionId: string, itemId: string): {
103
+ seq: number;
104
+ turn: number;
105
+ } | undefined;
106
+ /** Where the exchange that `seq` is in ends: just before the user speaks next, or the end of the session. */
107
+ turnEnd(sessionId: string, seq: number): number;
108
+ /**
109
+ * Appends one update to the session's log and returns it with its seq.
110
+ * `activity` false: the session's "last updated" stays (a setting or a name
111
+ * is not something happening in the session).
112
+ */
113
+ appendEvent(sessionId: string, update: SessionUpdate, ts?: number, activity?: boolean): SessionEvent;
114
+ /** Events after `afterSeq`, up to and including `upToSeq` when given. */
115
+ readEvents(sessionId: string, afterSeq: number, limit?: number, upToSeq?: number): SessionEvent[];
116
+ readEvent(sessionId: string, seq: number): SessionEvent | undefined;
117
+ /** How much was logged after `afterSeq`. */
118
+ sizeAfter(sessionId: string, afterSeq: number): {
119
+ events: number;
120
+ bytes: number;
121
+ };
122
+ /**
123
+ * Where a page of history ending at `beforeSeq` starts: the seq before its
124
+ * first event (0: the beginning of the log). Pages are whole turns, going
125
+ * back until one is worth showing; a single turn too big for a page is cut.
126
+ */
127
+ pageStart(sessionId: string, beforeSeq: number, page?: PageBudget): number;
128
+ /** The calls that started a sub-agent, oldest first. */
129
+ subagentCalls(sessionId: string): SessionEvent[];
130
+ /** A tool call's own events (the call and its updates), oldest first. */
131
+ toolEvents(sessionId: string, toolCallId: string): SessionEvent[];
132
+ /** The latest `limit` events of the sub-agent under a tool call, oldest first. */
133
+ eventsUnder(sessionId: string, toolCallId: string, limit: number): SessionEvent[];
134
+ /** A tool call's latest status, whether the sub-agent under it is in a turn, and when that sub-agent last did anything. */
135
+ toolState(sessionId: string, toolCallId: string): {
136
+ status?: string;
137
+ ts?: number;
138
+ turnActive?: boolean;
139
+ lastChildTs?: number;
140
+ };
141
+ private joined;
142
+ /** The latest event of `kind` at or before `seq`. */
143
+ latestOfKind(sessionId: string, kind: SessionUpdate["sessionUpdate"], seq: number, limit?: number): SessionEvent[];
72
144
  /** Marks a native item (message, tool call) as present in the log. Returns false if it already was. */
73
145
  markItemLogged(sessionId: string, itemId: string): boolean;
74
146
  isItemLogged(sessionId: string, itemId: string): boolean;
@@ -27,6 +27,18 @@ CREATE TABLE IF NOT EXISTS events (
27
27
  body TEXT NOT NULL,
28
28
  PRIMARY KEY (session_id, seq)
29
29
  ) WITHOUT ROWID;
30
+ CREATE TABLE IF NOT EXISTS event_meta (
31
+ session_id TEXT NOT NULL,
32
+ seq INTEGER NOT NULL,
33
+ kind TEXT NOT NULL,
34
+ bytes INTEGER NOT NULL,
35
+ opens_turn INTEGER NOT NULL DEFAULT 0,
36
+ tool TEXT,
37
+ parent TEXT,
38
+ spawns INTEGER NOT NULL DEFAULT 0,
39
+ PRIMARY KEY (session_id, seq)
40
+ ) WITHOUT ROWID;
41
+ CREATE INDEX IF NOT EXISTS event_meta_by_kind ON event_meta (session_id, kind, seq);
30
42
  CREATE TABLE IF NOT EXISTS logged_items (
31
43
  session_id TEXT NOT NULL,
32
44
  item_id TEXT NOT NULL,
@@ -48,6 +60,14 @@ CREATE TABLE IF NOT EXISTS removed_sessions (
48
60
  id TEXT PRIMARY KEY,
49
61
  ts INTEGER NOT NULL
50
62
  ) WITHOUT ROWID;
63
+ CREATE TABLE IF NOT EXISTS worktrees (
64
+ path TEXT PRIMARY KEY,
65
+ branch TEXT NOT NULL,
66
+ source TEXT NOT NULL,
67
+ source_cwd TEXT NOT NULL,
68
+ base TEXT NOT NULL,
69
+ created_at INTEGER NOT NULL
70
+ ) WITHOUT ROWID;
51
71
  CREATE TABLE IF NOT EXISTS terminals (
52
72
  id TEXT PRIMARY KEY,
53
73
  cwd TEXT NOT NULL,
@@ -93,6 +113,15 @@ function toSummary(row) {
93
113
  archived: row.archived === 1,
94
114
  };
95
115
  }
116
+ /** The worktree `cwd` is in, if any. */
117
+ export function worktreeOf(cwd, worktrees) {
118
+ return worktrees.find((worktree) => cwd === worktree.path || cwd.startsWith(`${worktree.path}/`));
119
+ }
120
+ /** The project a session in `cwd` belongs to: for a worktree, the directory it was made from. */
121
+ function projectOf(cwd, worktrees) {
122
+ return worktreeOf(cwd, worktrees)?.sourceCwd ?? cwd;
123
+ }
124
+ export const PAGE = { minEvents: 120, minBytes: 384 * 1024, maxEvents: 600, maxBytes: 2 * 1024 * 1024, eventBytes: 40 * 1024 };
96
125
  /**
97
126
  * Durable host state: session summaries plus one append-only event log per
98
127
  * session. Every update a client sees gets a per-session `seq`, so a client
@@ -110,13 +139,41 @@ export class HostStore {
110
139
  const columns = new Set(this.db.prepare("PRAGMA table_info(sessions)").all().map((c) => c.name));
111
140
  if (!columns.has("custom_title"))
112
141
  this.db.exec("ALTER TABLE sessions ADD COLUMN custom_title TEXT");
142
+ // event_meta came later (and its sub-agent columns later still): describe
143
+ // the events logged before it, once.
144
+ const meta = new Set(this.db.prepare("PRAGMA table_info(event_meta)").all().map((c) => c.name));
145
+ if (!meta.has("tool")) {
146
+ this.db.exec("ALTER TABLE event_meta ADD COLUMN tool TEXT; ALTER TABLE event_meta ADD COLUMN parent TEXT; ALTER TABLE event_meta ADD COLUMN spawns INTEGER NOT NULL DEFAULT 0;");
147
+ }
148
+ this.db.exec(`
149
+ CREATE INDEX IF NOT EXISTS event_meta_by_tool ON event_meta (session_id, tool, seq) WHERE tool IS NOT NULL;
150
+ CREATE INDEX IF NOT EXISTS event_meta_by_parent ON event_meta (session_id, parent, seq) WHERE parent IS NOT NULL;
151
+ CREATE INDEX IF NOT EXISTS event_meta_spawns ON event_meta (session_id, seq) WHERE spawns = 1;
152
+ `);
153
+ const { user_version: version } = this.db.prepare("PRAGMA user_version").get();
154
+ if (version < 2) {
155
+ this.db.exec(`
156
+ INSERT OR REPLACE INTO event_meta (session_id, seq, kind, bytes, opens_turn, tool, parent, spawns)
157
+ SELECT session_id, seq, COALESCE(json_extract(body, '$.sessionUpdate'), ''), length(CAST(body AS BLOB)),
158
+ CASE json_extract(body, '$.sessionUpdate')
159
+ WHEN 'user_message_chunk' THEN 1
160
+ WHEN 'ls_turn' THEN COALESCE(json_extract(body, '$.state') = 'started' AND json_extract(body, '$.parentToolCallId') IS NULL, 0)
161
+ ELSE 0 END,
162
+ json_extract(body, '$.toolCallId'),
163
+ json_extract(body, '$.parentToolCallId'),
164
+ COALESCE(json_extract(body, '$.sessionUpdate') = 'tool_call' AND json_extract(body, '$.detail.type') = 'subagent'
165
+ AND COALESCE(json_extract(body, '$.detail.action'), 'spawn') = 'spawn', 0)
166
+ FROM events;
167
+ PRAGMA user_version = 2;
168
+ `);
169
+ }
113
170
  }
114
171
  // ── removal ───────────────────────────────────────────────────────
115
172
  /** Deleted by the user: forgotten, and kept out of rediscovery. */
116
173
  removeSession(id) {
117
174
  this.db.exec("BEGIN IMMEDIATE");
118
175
  try {
119
- for (const table of ["sessions", "events", "logged_items", "driver_state", "client_messages"]) {
176
+ for (const table of ["sessions", "events", "event_meta", "logged_items", "driver_state", "client_messages"]) {
120
177
  const column = table === "sessions" ? "id" : "session_id";
121
178
  this.db.prepare(`DELETE FROM ${table} WHERE ${column} = ?`).run(id);
122
179
  }
@@ -225,28 +282,90 @@ export class HostStore {
225
282
  }
226
283
  listProjects(limit = 50) {
227
284
  const rows = this.db
228
- .prepare(`SELECT cwd, MAX(updated_at) AS last_active_at, COUNT(*) AS session_count
229
- FROM sessions WHERE archived = 0 GROUP BY cwd ORDER BY last_active_at DESC LIMIT ?`)
230
- .all(limit);
285
+ .prepare(`SELECT cwd, MAX(updated_at) AS last_active_at, COUNT(*) AS session_count FROM sessions WHERE archived = 0 GROUP BY cwd`)
286
+ .all();
287
+ // A session in a worktree belongs to the project the worktree was made from.
288
+ const worktrees = this.listWorktrees();
289
+ const projects = new Map();
290
+ for (const row of rows) {
291
+ const cwd = projectOf(row.cwd, worktrees);
292
+ const project = projects.get(cwd) ?? { cwd, name: basename(cwd) || cwd, lastActiveAt: 0, sessionCount: 0 };
293
+ project.lastActiveAt = Math.max(project.lastActiveAt, row.last_active_at);
294
+ project.sessionCount += row.session_count;
295
+ projects.set(cwd, project);
296
+ }
297
+ return [...projects.values()].sort((a, b) => b.lastActiveAt - a.lastActiveAt).slice(0, limit);
298
+ }
299
+ // ── worktrees ─────────────────────────────────────────────────────
300
+ saveWorktree(worktree) {
301
+ this.db
302
+ .prepare("INSERT OR REPLACE INTO worktrees (path, branch, source, source_cwd, base, created_at) VALUES (?, ?, ?, ?, ?, ?)")
303
+ .run(worktree.path, worktree.branch, worktree.source, worktree.sourceCwd, worktree.base, worktree.createdAt);
304
+ }
305
+ listWorktrees() {
306
+ const rows = this.db.prepare("SELECT * FROM worktrees ORDER BY created_at DESC").all();
231
307
  return rows.map((row) => ({
232
- cwd: row.cwd,
233
- name: basename(row.cwd) || row.cwd,
234
- lastActiveAt: row.last_active_at,
235
- sessionCount: row.session_count,
308
+ path: String(row.path),
309
+ branch: String(row.branch),
310
+ source: String(row.source),
311
+ sourceCwd: String(row.source_cwd),
312
+ base: String(row.base),
313
+ createdAt: Number(row.created_at),
236
314
  }));
237
315
  }
238
- /** Appends one update to the session's log and returns it with its seq. */
239
- appendEvent(sessionId, update, ts = Date.now()) {
316
+ deleteWorktree(path) {
317
+ this.db.prepare("DELETE FROM worktrees WHERE path = ?").run(path);
318
+ }
319
+ /** Sessions whose directory is `path` or inside it. */
320
+ sessionsUnder(path) {
321
+ const rows = this.db.prepare("SELECT id FROM sessions WHERE cwd = ? OR substr(cwd, 1, ?) = ?").all(path, path.length + 1, `${path}/`);
322
+ return rows.map((row) => row.id);
323
+ }
324
+ /** The seq of the latest event that mentions message or tool call `itemId`, and how many turns had started by then. */
325
+ locateItem(sessionId, itemId) {
326
+ const tool = this.db
327
+ .prepare("SELECT MAX(seq) AS seq FROM event_meta WHERE session_id = ? AND tool = ?")
328
+ .get(sessionId, itemId);
329
+ const needle = `"messageId":${JSON.stringify(itemId)}`;
330
+ const message = this.db
331
+ .prepare("SELECT MAX(seq) AS seq FROM events WHERE session_id = ? AND instr(body, ?) > 0")
332
+ .get(sessionId, needle);
333
+ const seq = Math.max(tool.seq ?? 0, message.seq ?? 0);
334
+ if (seq === 0)
335
+ return undefined;
336
+ const { turn } = this.db
337
+ .prepare("SELECT COUNT(*) AS turn FROM event_meta WHERE session_id = ? AND kind = 'ls_turn' AND opens_turn = 1 AND seq <= ?")
338
+ .get(sessionId, seq);
339
+ return { seq, turn };
340
+ }
341
+ /** Where the exchange that `seq` is in ends: just before the user speaks next, or the end of the session. */
342
+ turnEnd(sessionId, seq) {
343
+ const next = this.db
344
+ .prepare("SELECT MIN(seq) AS seq FROM event_meta WHERE session_id = ? AND kind = 'user_message_chunk' AND seq > ?")
345
+ .get(sessionId, seq);
346
+ return next.seq ? next.seq - 1 : (this.getSession(sessionId)?.lastSeq ?? seq);
347
+ }
348
+ /**
349
+ * Appends one update to the session's log and returns it with its seq.
350
+ * `activity` false: the session's "last updated" stays (a setting or a name
351
+ * is not something happening in the session).
352
+ */
353
+ appendEvent(sessionId, update, ts = Date.now(), activity = true) {
240
354
  this.db.exec("BEGIN IMMEDIATE");
241
355
  try {
242
356
  const row = this.db.prepare("SELECT last_seq FROM sessions WHERE id = ?").get(sessionId);
243
357
  if (!row)
244
358
  throw new Error(`unknown session ${sessionId}`);
245
359
  const seq = row.last_seq + 1;
360
+ const body = JSON.stringify(update);
361
+ this.db.prepare("INSERT INTO events (session_id, seq, ts, body) VALUES (?, ?, ?, ?)").run(sessionId, seq, ts, body);
362
+ const fields = update;
363
+ const opensTurn = update.sessionUpdate === "user_message_chunk" || (update.sessionUpdate === "ls_turn" && update.state === "started" && !fields.parentToolCallId);
364
+ const spawns = update.sessionUpdate === "tool_call" && update.detail?.type === "subagent" && (update.detail.action ?? "spawn") === "spawn";
246
365
  this.db
247
- .prepare("INSERT INTO events (session_id, seq, ts, body) VALUES (?, ?, ?, ?)")
248
- .run(sessionId, seq, ts, JSON.stringify(update));
249
- this.db.prepare("UPDATE sessions SET last_seq = ?, updated_at = MAX(updated_at, ?) WHERE id = ?").run(seq, ts, sessionId);
366
+ .prepare("INSERT INTO event_meta (session_id, seq, kind, bytes, opens_turn, tool, parent, spawns) VALUES (?, ?, ?, ?, ?, ?, ?, ?)")
367
+ .run(sessionId, seq, update.sessionUpdate, Buffer.byteLength(body), opensTurn ? 1 : 0, fields.toolCallId ?? null, fields.parentToolCallId ?? null, spawns ? 1 : 0);
368
+ this.db.prepare("UPDATE sessions SET last_seq = ?, updated_at = MAX(updated_at, ?) WHERE id = ?").run(seq, activity ? ts : 0, sessionId);
250
369
  this.db.exec("COMMIT");
251
370
  return { sessionId, seq, ts, update };
252
371
  }
@@ -255,10 +374,91 @@ export class HostStore {
255
374
  throw error;
256
375
  }
257
376
  }
258
- readEvents(sessionId, afterSeq, limit = 5000) {
377
+ /** Events after `afterSeq`, up to and including `upToSeq` when given. */
378
+ readEvents(sessionId, afterSeq, limit = 5000, upToSeq = Number.MAX_SAFE_INTEGER) {
379
+ const rows = this.db
380
+ .prepare("SELECT seq, ts, body FROM events WHERE session_id = ? AND seq > ? AND seq <= ? ORDER BY seq ASC LIMIT ?")
381
+ .all(sessionId, afterSeq, upToSeq, limit);
382
+ return rows.map((row) => ({ sessionId, seq: row.seq, ts: row.ts, update: JSON.parse(row.body) }));
383
+ }
384
+ readEvent(sessionId, seq) {
385
+ return this.readEvents(sessionId, seq - 1, 1, seq)[0];
386
+ }
387
+ /** How much was logged after `afterSeq`. */
388
+ sizeAfter(sessionId, afterSeq) {
389
+ const row = this.db
390
+ .prepare("SELECT COUNT(*) AS events, COALESCE(SUM(bytes), 0) AS bytes FROM event_meta WHERE session_id = ? AND seq > ?")
391
+ .get(sessionId, afterSeq);
392
+ return row;
393
+ }
394
+ /**
395
+ * Where a page of history ending at `beforeSeq` starts: the seq before its
396
+ * first event (0: the beginning of the log). Pages are whole turns, going
397
+ * back until one is worth showing; a single turn too big for a page is cut.
398
+ */
399
+ pageStart(sessionId, beforeSeq, page = PAGE) {
400
+ const rows = this.db
401
+ .prepare("SELECT seq, bytes, opens_turn FROM event_meta WHERE session_id = ? AND seq <= ? ORDER BY seq DESC LIMIT ?")
402
+ .all(sessionId, beforeSeq, page.maxEvents + 1);
403
+ let events = 0;
404
+ let bytes = 0;
405
+ for (let i = 0; i < rows.length; i++) {
406
+ const row = rows[i];
407
+ const previous = rows[i + 1];
408
+ events += 1;
409
+ // What a client receives: pictures are left out and long text is cut.
410
+ bytes += Math.min(row.bytes, page.eventBytes);
411
+ if (!previous)
412
+ return 0;
413
+ const turnStarts = row.opens_turn === 1 && previous.opens_turn === 0;
414
+ if (turnStarts && (events >= page.minEvents || bytes >= page.minBytes))
415
+ return previous.seq;
416
+ if (events >= page.maxEvents || bytes >= page.maxBytes)
417
+ return previous.seq;
418
+ }
419
+ return 0;
420
+ }
421
+ /** The calls that started a sub-agent, oldest first. */
422
+ subagentCalls(sessionId) {
423
+ return this.joined("m.session_id = ? AND m.spawns = 1 ORDER BY m.seq ASC", [sessionId]);
424
+ }
425
+ /** A tool call's own events (the call and its updates), oldest first. */
426
+ toolEvents(sessionId, toolCallId) {
427
+ return this.joined("m.session_id = ? AND m.tool = ? AND m.parent IS NULL ORDER BY m.seq ASC", [sessionId, toolCallId]);
428
+ }
429
+ /** The latest `limit` events of the sub-agent under a tool call, oldest first. */
430
+ eventsUnder(sessionId, toolCallId, limit) {
431
+ return this.joined("m.session_id = ? AND m.parent = ? ORDER BY m.seq DESC LIMIT ?", [sessionId, toolCallId, limit]).reverse();
432
+ }
433
+ /** A tool call's latest status, whether the sub-agent under it is in a turn, and when that sub-agent last did anything. */
434
+ toolState(sessionId, toolCallId) {
435
+ const last = this.db
436
+ .prepare(`SELECT e.ts, json_extract(e.body, '$.status') AS status FROM event_meta m JOIN events e ON e.session_id = m.session_id AND e.seq = m.seq
437
+ WHERE m.session_id = ? AND m.tool = ? AND m.parent IS NULL AND json_extract(e.body, '$.status') IS NOT NULL ORDER BY m.seq DESC LIMIT 1`)
438
+ .get(sessionId, toolCallId);
439
+ const turn = this.db
440
+ .prepare(`SELECT json_extract(e.body, '$.state') AS state FROM event_meta m JOIN events e ON e.session_id = m.session_id AND e.seq = m.seq
441
+ WHERE m.session_id = ? AND m.parent = ? AND m.kind = 'ls_turn' ORDER BY m.seq DESC LIMIT 1`)
442
+ .get(sessionId, toolCallId);
443
+ const child = this.db
444
+ .prepare(`SELECT e.ts FROM event_meta m JOIN events e ON e.session_id = m.session_id AND e.seq = m.seq
445
+ WHERE m.session_id = ? AND m.parent = ? ORDER BY m.seq DESC LIMIT 1`)
446
+ .get(sessionId, toolCallId);
447
+ return { status: last?.status, ts: last?.ts, turnActive: turn ? turn.state === "started" : undefined, lastChildTs: child?.ts };
448
+ }
449
+ joined(where, values) {
450
+ const rows = this.db
451
+ .prepare(`SELECT e.seq, e.ts, e.body FROM event_meta m JOIN events e ON e.session_id = m.session_id AND e.seq = m.seq WHERE ${where}`)
452
+ .all(...values);
453
+ const sessionId = String(values[0]);
454
+ return rows.map((row) => ({ sessionId, seq: row.seq, ts: row.ts, update: JSON.parse(row.body) }));
455
+ }
456
+ /** The latest event of `kind` at or before `seq`. */
457
+ latestOfKind(sessionId, kind, seq, limit = 1) {
259
458
  const rows = this.db
260
- .prepare("SELECT seq, ts, body FROM events WHERE session_id = ? AND seq > ? ORDER BY seq ASC LIMIT ?")
261
- .all(sessionId, afterSeq, limit);
459
+ .prepare(`SELECT e.seq, e.ts, e.body FROM event_meta m JOIN events e ON e.session_id = m.session_id AND e.seq = m.seq
460
+ WHERE m.session_id = ? AND m.kind = ? AND m.seq <= ? ORDER BY m.seq DESC LIMIT ?`)
461
+ .all(sessionId, kind, seq, limit);
262
462
  return rows.map((row) => ({ sessionId, seq: row.seq, ts: row.ts, update: JSON.parse(row.body) }));
263
463
  }
264
464
  /** Marks a native item (message, tool call) as present in the log. Returns false if it already was. */
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { type GitInfo } from "@linkshell/wire";
2
+ /** What git says about a directory; undefined when it isn't in a repository (or git is missing). */
3
+ export declare function gitInfo(path: string): Promise<GitInfo | undefined>;
4
+ /**
5
+ * The branch checked out in a directory (the abbreviated commit on a detached
6
+ * HEAD); undefined outside a repository. Doesn't look at the working tree, so
7
+ * it stays quick in a large repository.
8
+ */
9
+ export declare function gitBranch(path: string): Promise<string | undefined>;
10
+ export interface CreatedWorktree {
11
+ /** The worktree's top directory. */
12
+ path: string;
13
+ /** Where a session started from `cwd` works: the same place inside the worktree. */
14
+ cwd: string;
15
+ branch: string;
16
+ /** The repository it was made from. */
17
+ source: string;
18
+ /** The commit it started at. */
19
+ base: string;
20
+ }
21
+ /**
22
+ * Makes a worktree of the repository `cwd` is in, on a new branch at its
23
+ * current commit. Uncommitted changes stay where they are.
24
+ */
25
+ export declare function createWorktree(cwd: string, home: string, label: string): Promise<CreatedWorktree>;
26
+ /** Whether removing the worktree would lose work: uncommitted changes, and commits since it was made. */
27
+ export declare function worktreeState(path: string, base: string): Promise<{
28
+ dirty: boolean;
29
+ ahead: number;
30
+ }>;
31
+ /** Removes a worktree and the branch made for it. */
32
+ export declare function removeWorktree(worktree: {
33
+ path: string;
34
+ branch: string;
35
+ source: string;
36
+ }): Promise<void>;