@songsid/agend 2.1.4-beta.8 → 2.1.4

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 (173) hide show
  1. package/README.md +1 -1
  2. package/README.zh-TW.md +1 -1
  3. package/dist/agent-cli-instructions.md +2 -2
  4. package/dist/agent-endpoint.js +1 -1
  5. package/dist/agent-endpoint.js.map +1 -1
  6. package/dist/backend/antigravity.d.ts +12 -8
  7. package/dist/backend/antigravity.js +189 -42
  8. package/dist/backend/antigravity.js.map +1 -1
  9. package/dist/backend/claude-code.d.ts +87 -23
  10. package/dist/backend/claude-code.js +361 -46
  11. package/dist/backend/claude-code.js.map +1 -1
  12. package/dist/backend/codex.d.ts +18 -0
  13. package/dist/backend/codex.js +139 -5
  14. package/dist/backend/codex.js.map +1 -1
  15. package/dist/backend/gemini-cli.js +2 -2
  16. package/dist/backend/gemini-cli.js.map +1 -1
  17. package/dist/backend/grok.js +2 -2
  18. package/dist/backend/grok.js.map +1 -1
  19. package/dist/backend/kiro.d.ts +52 -2
  20. package/dist/backend/kiro.js +267 -12
  21. package/dist/backend/kiro.js.map +1 -1
  22. package/dist/backend/opencode.js +17 -4
  23. package/dist/backend/opencode.js.map +1 -1
  24. package/dist/backend/types.d.ts +122 -3
  25. package/dist/backend/types.js +5 -1
  26. package/dist/backend/types.js.map +1 -1
  27. package/dist/backend-outage.d.ts +61 -0
  28. package/dist/backend-outage.js +71 -0
  29. package/dist/backend-outage.js.map +1 -0
  30. package/dist/channel/adapters/discord.d.ts +44 -2
  31. package/dist/channel/adapters/discord.js +529 -89
  32. package/dist/channel/adapters/discord.js.map +1 -1
  33. package/dist/channel/adapters/telegram.d.ts +30 -0
  34. package/dist/channel/adapters/telegram.js +221 -19
  35. package/dist/channel/adapters/telegram.js.map +1 -1
  36. package/dist/channel/agy-mcp-launcher.d.ts +2 -0
  37. package/dist/channel/agy-mcp-launcher.js +28 -0
  38. package/dist/channel/agy-mcp-launcher.js.map +1 -0
  39. package/dist/channel/ipc-bridge.d.ts +2 -1
  40. package/dist/channel/ipc-bridge.js +33 -4
  41. package/dist/channel/ipc-bridge.js.map +1 -1
  42. package/dist/channel/markdown-chunk.d.ts +42 -0
  43. package/dist/channel/markdown-chunk.js +205 -0
  44. package/dist/channel/markdown-chunk.js.map +1 -0
  45. package/dist/channel/mcp-server.js +34 -5
  46. package/dist/channel/mcp-server.js.map +1 -1
  47. package/dist/channel/mcp-tools.js +5 -3
  48. package/dist/channel/mcp-tools.js.map +1 -1
  49. package/dist/channel/message-queue.js +64 -8
  50. package/dist/channel/message-queue.js.map +1 -1
  51. package/dist/channel/types.d.ts +31 -1
  52. package/dist/classic-channel-manager.d.ts +65 -0
  53. package/dist/classic-channel-manager.js +172 -3
  54. package/dist/classic-channel-manager.js.map +1 -1
  55. package/dist/cli.js +124 -83
  56. package/dist/cli.js.map +1 -1
  57. package/dist/config-validator.js +16 -0
  58. package/dist/config-validator.js.map +1 -1
  59. package/dist/config.d.ts +4 -0
  60. package/dist/config.js +12 -1
  61. package/dist/config.js.map +1 -1
  62. package/dist/cross-instance-envelope.d.ts +6 -0
  63. package/dist/cross-instance-envelope.js +30 -0
  64. package/dist/cross-instance-envelope.js.map +1 -0
  65. package/dist/daemon.d.ts +538 -11
  66. package/dist/daemon.js +2272 -288
  67. package/dist/daemon.js.map +1 -1
  68. package/dist/doctor.d.ts +41 -0
  69. package/dist/doctor.js +267 -0
  70. package/dist/doctor.js.map +1 -0
  71. package/dist/fleet-context.d.ts +63 -0
  72. package/dist/fleet-context.js.map +1 -1
  73. package/dist/fleet-manager.d.ts +424 -11
  74. package/dist/fleet-manager.js +2753 -444
  75. package/dist/fleet-manager.js.map +1 -1
  76. package/dist/fleet-yaml-slim.d.ts +10 -0
  77. package/dist/fleet-yaml-slim.js +59 -0
  78. package/dist/fleet-yaml-slim.js.map +1 -0
  79. package/dist/general-knowledge/skills/cross-instance-messaging/SKILL.md +1 -0
  80. package/dist/general-knowledge/skills/model-discovery/SKILL.md +63 -16
  81. package/dist/general-knowledge/skills/session-management/SKILL.md +171 -8
  82. package/dist/instance-lifecycle.d.ts +114 -1
  83. package/dist/instance-lifecycle.js +404 -14
  84. package/dist/instance-lifecycle.js.map +1 -1
  85. package/dist/instructions.js +42 -4
  86. package/dist/instructions.js.map +1 -1
  87. package/dist/locale.js +1024 -310
  88. package/dist/locale.js.map +1 -1
  89. package/dist/login-flows.d.ts +91 -0
  90. package/dist/login-flows.js +170 -0
  91. package/dist/login-flows.js.map +1 -0
  92. package/dist/login-manager.d.ts +63 -0
  93. package/dist/login-manager.js +134 -0
  94. package/dist/login-manager.js.map +1 -0
  95. package/dist/network-family.d.ts +18 -0
  96. package/dist/network-family.js +20 -0
  97. package/dist/network-family.js.map +1 -0
  98. package/dist/outbound-handlers.d.ts +16 -1
  99. package/dist/outbound-handlers.js +174 -40
  100. package/dist/outbound-handlers.js.map +1 -1
  101. package/dist/outbound-schemas.d.ts +10 -3
  102. package/dist/outbound-schemas.js +10 -0
  103. package/dist/outbound-schemas.js.map +1 -1
  104. package/dist/pane-input-residue.d.ts +52 -0
  105. package/dist/pane-input-residue.js +107 -0
  106. package/dist/pane-input-residue.js.map +1 -0
  107. package/dist/process-memory.d.ts +6 -0
  108. package/dist/process-memory.js +45 -0
  109. package/dist/process-memory.js.map +1 -1
  110. package/dist/reply-dedup.d.ts +7 -8
  111. package/dist/reply-dedup.js +0 -0
  112. package/dist/reply-dedup.js.map +1 -1
  113. package/dist/restart-progress.d.ts +2 -0
  114. package/dist/restart-progress.js +3 -0
  115. package/dist/restart-progress.js.map +1 -1
  116. package/dist/scheduler/db.d.ts +12 -0
  117. package/dist/scheduler/db.js +59 -0
  118. package/dist/scheduler/db.js.map +1 -1
  119. package/dist/service-installer.d.ts +11 -0
  120. package/dist/service-installer.js +84 -18
  121. package/dist/service-installer.js.map +1 -1
  122. package/dist/settings-api.js +1 -1
  123. package/dist/settings-api.js.map +1 -1
  124. package/dist/setup-wizard.js +2 -2
  125. package/dist/setup-wizard.js.map +1 -1
  126. package/dist/spawn-gate.d.ts +30 -0
  127. package/dist/spawn-gate.js +79 -0
  128. package/dist/spawn-gate.js.map +1 -0
  129. package/dist/steer-capability.d.ts +1 -0
  130. package/dist/steer-capability.js +6 -0
  131. package/dist/steer-capability.js.map +1 -0
  132. package/dist/storm-window.d.ts +83 -0
  133. package/dist/storm-window.js +251 -0
  134. package/dist/storm-window.js.map +1 -0
  135. package/dist/tips.d.ts +44 -0
  136. package/dist/tips.js +355 -0
  137. package/dist/tips.js.map +1 -0
  138. package/dist/tmux-manager.d.ts +16 -0
  139. package/dist/tmux-manager.js +110 -25
  140. package/dist/tmux-manager.js.map +1 -1
  141. package/dist/tool-progress.d.ts +40 -0
  142. package/dist/tool-progress.js +289 -0
  143. package/dist/tool-progress.js.map +1 -0
  144. package/dist/topic-commands.d.ts +45 -6
  145. package/dist/topic-commands.js +394 -66
  146. package/dist/topic-commands.js.map +1 -1
  147. package/dist/transcript-monitor.d.ts +15 -2
  148. package/dist/transcript-monitor.js +63 -17
  149. package/dist/transcript-monitor.js.map +1 -1
  150. package/dist/transcript-sources.d.ts +131 -0
  151. package/dist/transcript-sources.js +580 -0
  152. package/dist/transcript-sources.js.map +1 -0
  153. package/dist/types.d.ts +11 -0
  154. package/dist/ui/dashboard.html +55 -32
  155. package/dist/ui/settings.html +200 -60
  156. package/dist/ui/view.html +147 -30
  157. package/dist/usage/format-rich.d.ts +1 -1
  158. package/dist/usage/format-rich.js +28 -24
  159. package/dist/usage/format-rich.js.map +1 -1
  160. package/dist/usage/i18n-keys.d.ts +7 -0
  161. package/dist/usage/i18n-keys.js +34 -0
  162. package/dist/usage/i18n-keys.js.map +1 -0
  163. package/dist/usage/i18n.d.ts +5 -0
  164. package/dist/usage/i18n.js +27 -0
  165. package/dist/usage/i18n.js.map +1 -0
  166. package/dist/usage/providers.d.ts +21 -0
  167. package/dist/usage/providers.js +153 -75
  168. package/dist/usage/providers.js.map +1 -1
  169. package/dist/usage/usage-api.d.ts +11 -3
  170. package/dist/usage/usage-api.js +61 -24
  171. package/dist/usage/usage-api.js.map +1 -1
  172. package/dist/workflow-templates/default.md +2 -1
  173. package/package.json +2 -2
@@ -0,0 +1,580 @@
1
+ /**
2
+ * Per-backend tool-event sources for the transcript monitor.
3
+ *
4
+ * claude-code keeps its transcript path in statusline.json and is handled
5
+ * inside TranscriptMonitor itself (it predates this file). The sources here
6
+ * cover backends whose CLIs persist their conversation elsewhere:
7
+ *
8
+ * codex — rollout JSONL under <codex home>/sessions/YYYY/MM/DD/,
9
+ * matched to this instance by session_meta.cwd (sessions are a
10
+ * shared symlinked dir across instances, #507)
11
+ * kiro-cli — primary sessions in ~/.local/share/kiro-cli/data.sqlite3
12
+ * (Kiro 2.19+), with ~/.kiro/sessions/cli JSONL fallback for
13
+ * older releases
14
+ * opencode — $XDG_DATA_HOME/opencode/opencode.db `part` table rows of
15
+ * data JSON { type: "tool", tool, state.input }, matched by the
16
+ * `session` table's directory column
17
+ *
18
+ * Common rules, learned the hard way (#528 traps):
19
+ * - No persisted byte offsets. Codex writes a fresh rollout per process and
20
+ * kiro/opencode keep full history — a stale offset is meaningless at best
21
+ * and replays history at worst.
22
+ * - First attach to a PRE-EXISTING transcript baselines to its end: only
23
+ * new work emits. A transcript that APPEARS after the source was created
24
+ * is this instance's own new session and is read from the start.
25
+ * - Every poll re-resolves which transcript is active. Pinning to the first
26
+ * one found silently goes blind when the CLI starts a new session.
27
+ */
28
+ import { closeSync, existsSync, openSync, readdirSync, readFileSync, readSync, realpathSync, statSync } from "node:fs";
29
+ import { open, stat } from "node:fs/promises";
30
+ import { homedir } from "node:os";
31
+ import { join, resolve } from "node:path";
32
+ import Database from "better-sqlite3";
33
+ const EMPTY = { toolUses: [], toolResults: [], assistantTexts: [] };
34
+ function emptyEvents() {
35
+ return { toolUses: [], toolResults: [], assistantTexts: [] };
36
+ }
37
+ /** Shared JSONL tailer: byte-offset incremental reads of a single file. */
38
+ async function readNewLines(path, fromOffset) {
39
+ const stats = await stat(path);
40
+ if (stats.size <= fromOffset)
41
+ return { lines: [], newOffset: fromOffset };
42
+ const fh = await open(path, "r");
43
+ try {
44
+ const length = stats.size - fromOffset;
45
+ const buffer = Buffer.alloc(length);
46
+ await fh.read(buffer, 0, length, fromOffset);
47
+ return { lines: buffer.toString("utf-8").split("\n").filter(l => l.trim()), newOffset: stats.size };
48
+ }
49
+ finally {
50
+ await fh.close();
51
+ }
52
+ }
53
+ /* ------------------------------------------------------------------ codex */
54
+ /**
55
+ * Follows the newest rollout JSONL whose session_meta.cwd matches this
56
+ * instance's working directory. Rollouts are date-sharded and shared across
57
+ * instances, so cwd is the only reliable ownership signal.
58
+ */
59
+ export class CodexRolloutSource {
60
+ workingDirectory;
61
+ sessionsDir;
62
+ currentFile = null;
63
+ byteOffset = 0;
64
+ /** EOF snapshots taken when the monitor attaches; existing history is skipped. */
65
+ initialOffsets = new Map();
66
+ /** Files whose session_meta was read and did NOT match our cwd. */
67
+ rejected = new Set();
68
+ constructor(workingDirectory, sessionsDir = join(process.env.CODEX_HOME?.trim() || join(homedir(), ".codex"), "sessions"), _now = Date.now()) {
69
+ this.workingDirectory = workingDirectory;
70
+ this.sessionsDir = sessionsDir;
71
+ this.snapshotExistingFiles();
72
+ }
73
+ reset() {
74
+ this.currentFile = null;
75
+ this.byteOffset = 0;
76
+ this.rejected.clear();
77
+ this.snapshotExistingFiles();
78
+ }
79
+ snapshotExistingFiles() {
80
+ this.initialOffsets = new Map(this.candidateFiles().map(file => [file.path, file.size]));
81
+ }
82
+ /**
83
+ * Newest rollout files first.
84
+ *
85
+ * A resumed Codex session keeps writing to the date shard where it was first
86
+ * created. Limiting discovery to today's/yesterday's directories therefore
87
+ * makes a long-lived instance silently disappear from tool progress. There
88
+ * are normally only tens of rollout files, and rejected cwd matches are
89
+ * cached, so walking all shards is both correct and cheap.
90
+ */
91
+ candidateFiles() {
92
+ const out = [];
93
+ const walk = (dir, depth) => {
94
+ let entries;
95
+ try {
96
+ entries = readdirSync(dir);
97
+ }
98
+ catch {
99
+ return;
100
+ }
101
+ for (const e of entries) {
102
+ const p = join(dir, e);
103
+ try {
104
+ const st = statSync(p);
105
+ if (st.isDirectory() && depth < 4)
106
+ walk(p, depth + 1);
107
+ else if (e.startsWith("rollout-") && e.endsWith(".jsonl")) {
108
+ out.push({ path: p, mtimeMs: st.mtimeMs, size: st.size });
109
+ }
110
+ }
111
+ catch { /* raced with deletion */ }
112
+ }
113
+ };
114
+ walk(this.sessionsDir, 0);
115
+ return out.sort((a, b) => b.mtimeMs - a.mtimeMs);
116
+ }
117
+ fileBelongsToUs(path) {
118
+ if (this.rejected.has(path))
119
+ return false;
120
+ try {
121
+ // session_meta is the first line. It can carry long instructions, so
122
+ // give it headroom — but never read the whole rollout.
123
+ const fd = openSync(path, "r");
124
+ let head;
125
+ try {
126
+ const buf = Buffer.alloc(65536);
127
+ const bytes = readSync(fd, buf, 0, buf.length, 0);
128
+ head = buf.toString("utf-8", 0, bytes);
129
+ }
130
+ finally {
131
+ closeSync(fd);
132
+ }
133
+ const firstLine = head.split("\n")[0];
134
+ const meta = JSON.parse(firstLine);
135
+ const cwd = meta?.payload?.cwd;
136
+ if (meta?.type === "session_meta" && cwd === this.workingDirectory)
137
+ return true;
138
+ this.rejected.add(path);
139
+ return false;
140
+ }
141
+ catch {
142
+ // First line unreadable/partial — retry next poll, do not cache the verdict.
143
+ return false;
144
+ }
145
+ }
146
+ async poll() {
147
+ // Re-resolve every poll: a restarted codex writes a NEW rollout, and
148
+ // staying pinned to the old one goes silently blind (#528 trap 1).
149
+ const candidates = this.candidateFiles();
150
+ const active = candidates.find(c => this.fileBelongsToUs(c.path));
151
+ if (!active)
152
+ return EMPTY;
153
+ if (active.path !== this.currentFile) {
154
+ this.currentFile = active.path;
155
+ // Existing rollout: continue at the EOF captured when the source was
156
+ // created. New rollout: read from the start. Using current mtime here is
157
+ // wrong because appending to a resumed rollout makes an old file look new.
158
+ this.byteOffset = this.initialOffsets.get(active.path) ?? 0;
159
+ }
160
+ const { lines, newOffset } = await readNewLines(this.currentFile, this.byteOffset);
161
+ this.byteOffset = newOffset;
162
+ const events = emptyEvents();
163
+ for (const line of lines) {
164
+ let entry;
165
+ try {
166
+ entry = JSON.parse(line);
167
+ }
168
+ catch {
169
+ continue;
170
+ }
171
+ if (entry.type !== "response_item")
172
+ continue;
173
+ const p = entry.payload;
174
+ if (!p)
175
+ continue;
176
+ if (p.type === "function_call") {
177
+ let input = p.arguments;
178
+ if (typeof input === "string") {
179
+ try {
180
+ input = JSON.parse(input);
181
+ }
182
+ catch { /* keep raw */ }
183
+ }
184
+ events.toolUses.push({ name: String(p.name ?? "unknown"), input });
185
+ }
186
+ else if (p.type === "custom_tool_call") {
187
+ events.toolUses.push({ name: String(p.name ?? "unknown"), input: p.input });
188
+ }
189
+ else if (p.type === "local_shell_call") {
190
+ const action = p.action;
191
+ events.toolUses.push({ name: "shell", input: { command: action?.command } });
192
+ }
193
+ else if (p.type === "function_call_output" || p.type === "custom_tool_call_output") {
194
+ events.toolResults.push({ name: String(p.name ?? "unknown") });
195
+ }
196
+ else if (p.type === "message" && p.role === "assistant") {
197
+ const content = p.content;
198
+ for (const block of content ?? []) {
199
+ const text = block.text;
200
+ if (typeof text === "string" && text.trim())
201
+ events.assistantTexts.push(text);
202
+ }
203
+ }
204
+ }
205
+ return events;
206
+ }
207
+ }
208
+ /* -------------------------------------------------------------------- kiro */
209
+ /**
210
+ * Follows the newest Kiro conversation whose cwd matches this instance.
211
+ * Kiro 2.19 moved primary conversations to conversations_v2 in data.sqlite3;
212
+ * legacy releases use <uuid>.jsonl plus sibling <uuid>.json metadata.
213
+ */
214
+ export class KiroSessionSource {
215
+ workingDirectory;
216
+ sessionsDir;
217
+ dbPath;
218
+ currentFile = null;
219
+ byteOffset = 0;
220
+ createdAt;
221
+ dbConversationId = null;
222
+ dbHistoryCursor = 0;
223
+ dbSignature = "";
224
+ dbToolNames = new Map();
225
+ constructor(workingDirectory, sessionsDir = join(homedir(), ".kiro", "sessions", "cli"), now = Date.now(), dbPath = join(process.env.XDG_DATA_HOME || join(homedir(), ".local", "share"), "kiro-cli", "data.sqlite3")) {
226
+ this.workingDirectory = workingDirectory;
227
+ this.sessionsDir = sessionsDir;
228
+ this.dbPath = dbPath;
229
+ this.createdAt = now;
230
+ this.snapshotDbBaseline();
231
+ }
232
+ reset() {
233
+ this.currentFile = null;
234
+ this.byteOffset = 0;
235
+ this.dbConversationId = null;
236
+ this.dbHistoryCursor = 0;
237
+ this.dbSignature = "";
238
+ this.dbToolNames.clear();
239
+ this.snapshotDbBaseline();
240
+ }
241
+ workingDirectoryKeys() {
242
+ const keys = new Set([this.workingDirectory, resolve(this.workingDirectory)]);
243
+ try {
244
+ keys.add(realpathSync(this.workingDirectory));
245
+ }
246
+ catch { /* keep literal/absolute cwd */ }
247
+ return [...keys];
248
+ }
249
+ newestDbRow(db) {
250
+ const keys = this.workingDirectoryKeys();
251
+ const placeholders = keys.map(() => "?").join(", ");
252
+ return db.prepare(`SELECT conversation_id, created_at, updated_at, length(value) AS size
253
+ FROM conversations_v2 WHERE key IN (${placeholders})
254
+ ORDER BY updated_at DESC LIMIT 1`).get(...keys);
255
+ }
256
+ readDbHistory(db, conversationId) {
257
+ const row = db.prepare("SELECT value FROM conversations_v2 WHERE conversation_id = ? ORDER BY updated_at DESC LIMIT 1").get(conversationId);
258
+ if (!row)
259
+ return null;
260
+ try {
261
+ const parsed = JSON.parse(row.value);
262
+ return Array.isArray(parsed.history) ? parsed.history : [];
263
+ }
264
+ catch {
265
+ return null;
266
+ }
267
+ }
268
+ /**
269
+ * Kiro 2.19 moved primary conversations into data.sqlite3. Snapshot the
270
+ * active row synchronously at monitor creation so its existing history is
271
+ * never replayed as live tool progress.
272
+ */
273
+ snapshotDbBaseline() {
274
+ if (!existsSync(this.dbPath))
275
+ return;
276
+ let db;
277
+ try {
278
+ db = new Database(this.dbPath, { readonly: true, fileMustExist: true });
279
+ const row = this.newestDbRow(db);
280
+ if (!row)
281
+ return;
282
+ const history = this.readDbHistory(db, row.conversation_id);
283
+ if (!history)
284
+ return;
285
+ this.dbConversationId = row.conversation_id;
286
+ this.dbHistoryCursor = history.length;
287
+ this.dbSignature = `${row.updated_at}:${row.size}`;
288
+ }
289
+ catch { /* old Kiro schema or busy DB — legacy JSONL remains available */ }
290
+ finally {
291
+ try {
292
+ db?.close();
293
+ }
294
+ catch { /* already closed */ }
295
+ }
296
+ }
297
+ pollDb() {
298
+ if (!existsSync(this.dbPath))
299
+ return null;
300
+ let db;
301
+ try {
302
+ db = new Database(this.dbPath, { readonly: true, fileMustExist: true });
303
+ const row = this.newestDbRow(db);
304
+ if (!row)
305
+ return null;
306
+ const signature = `${row.updated_at}:${row.size}`;
307
+ if (row.conversation_id === this.dbConversationId && signature === this.dbSignature)
308
+ return EMPTY;
309
+ const history = this.readDbHistory(db, row.conversation_id);
310
+ if (!history)
311
+ return EMPTY;
312
+ if (row.conversation_id !== this.dbConversationId) {
313
+ this.dbConversationId = row.conversation_id;
314
+ this.dbToolNames.clear();
315
+ // A conversation created after this monitor belongs to this daemon;
316
+ // an older conversation selected by --resume is history to baseline.
317
+ this.dbHistoryCursor = row.created_at >= this.createdAt ? 0 : history.length;
318
+ }
319
+ if (history.length < this.dbHistoryCursor) {
320
+ // Compaction can replace history with a shorter summary. Treat the new
321
+ // compacted body as a baseline instead of waiting for it to grow past
322
+ // the old cursor (or replaying retained history).
323
+ this.dbHistoryCursor = history.length;
324
+ this.dbSignature = signature;
325
+ return EMPTY;
326
+ }
327
+ const events = emptyEvents();
328
+ for (const entry of history.slice(this.dbHistoryCursor)) {
329
+ collectKiroDbEvents(entry, events, this.dbToolNames);
330
+ }
331
+ this.dbHistoryCursor = history.length;
332
+ this.dbSignature = signature;
333
+ return events;
334
+ }
335
+ catch {
336
+ return null;
337
+ }
338
+ finally {
339
+ try {
340
+ db?.close();
341
+ }
342
+ catch { /* already closed */ }
343
+ }
344
+ }
345
+ resolveActiveSession() {
346
+ let entries;
347
+ try {
348
+ entries = readdirSync(this.sessionsDir);
349
+ }
350
+ catch {
351
+ return null;
352
+ }
353
+ let best = null;
354
+ for (const e of entries) {
355
+ if (!e.endsWith(".json") || e.endsWith(".jsonl"))
356
+ continue;
357
+ const metaPath = join(this.sessionsDir, e);
358
+ try {
359
+ const meta = JSON.parse(readFileSync(metaPath, "utf-8"));
360
+ if (meta.cwd !== this.workingDirectory)
361
+ continue;
362
+ // Subagent sessions are children of a turn already being reported.
363
+ if (meta.session_created_reason === "subagent")
364
+ continue;
365
+ const updated = Date.parse(meta.updated_at ?? "") || 0;
366
+ const created = Date.parse(meta.created_at ?? "") || 0;
367
+ if (!best || updated > best.updated) {
368
+ const jsonlPath = join(this.sessionsDir, e.replace(/\.json$/, ".jsonl"));
369
+ best = { jsonlPath, updated, createdAtMs: created };
370
+ }
371
+ }
372
+ catch { /* partially written metadata — next poll */ }
373
+ }
374
+ return best && existsSync(best.jsonlPath)
375
+ ? { jsonlPath: best.jsonlPath, createdAtMs: best.createdAtMs }
376
+ : null;
377
+ }
378
+ async poll() {
379
+ // Current Kiro stores the primary session in SQLite; JSONL is now mostly
380
+ // used for subagents. Keep the legacy path as a compatibility fallback.
381
+ const dbEvents = this.pollDb();
382
+ if (dbEvents !== null)
383
+ return dbEvents;
384
+ const active = this.resolveActiveSession();
385
+ if (!active)
386
+ return EMPTY;
387
+ if (active.jsonlPath !== this.currentFile) {
388
+ this.currentFile = active.jsonlPath;
389
+ if (active.createdAtMs >= this.createdAt) {
390
+ this.byteOffset = 0; // our own fresh session — observable from the start
391
+ }
392
+ else {
393
+ try {
394
+ this.byteOffset = (await stat(active.jsonlPath)).size;
395
+ }
396
+ catch {
397
+ this.byteOffset = 0;
398
+ }
399
+ return EMPTY;
400
+ }
401
+ }
402
+ const { lines, newOffset } = await readNewLines(this.currentFile, this.byteOffset);
403
+ this.byteOffset = newOffset;
404
+ const events = emptyEvents();
405
+ for (const line of lines) {
406
+ let entry;
407
+ try {
408
+ entry = JSON.parse(line);
409
+ }
410
+ catch {
411
+ continue;
412
+ }
413
+ collectKiroEvents(entry, events);
414
+ }
415
+ return events;
416
+ }
417
+ }
418
+ function collectKiroDbEvents(entry, out, toolNames) {
419
+ if (!entry || typeof entry !== "object")
420
+ return;
421
+ const record = entry;
422
+ const assistant = record.assistant;
423
+ const toolUse = assistant?.ToolUse;
424
+ const uses = toolUse?.tool_uses;
425
+ if (Array.isArray(uses)) {
426
+ for (const raw of uses) {
427
+ if (!raw || typeof raw !== "object")
428
+ continue;
429
+ const use = raw;
430
+ const name = String(use.name ?? use.orig_name ?? "unknown");
431
+ const id = typeof use.id === "string" ? use.id : undefined;
432
+ if (id)
433
+ toolNames.set(id, name);
434
+ out.toolUses.push({ name, input: use.args ?? use.orig_args });
435
+ }
436
+ }
437
+ const user = record.user;
438
+ const content = user?.content;
439
+ const resultsContainer = content?.ToolUseResults;
440
+ const results = resultsContainer?.tool_use_results;
441
+ if (Array.isArray(results)) {
442
+ for (const raw of results) {
443
+ if (!raw || typeof raw !== "object")
444
+ continue;
445
+ const result = raw;
446
+ const id = typeof result.tool_use_id === "string" ? result.tool_use_id : "";
447
+ out.toolResults.push({ name: toolNames.get(id) ?? "toolResult" });
448
+ }
449
+ }
450
+ }
451
+ /**
452
+ * Kiro nests { kind: "toolUse", data: { name, input } } blocks inside
453
+ * AssistantMessage content; exact nesting has shifted across kiro versions,
454
+ * so walk the tree for the kind markers instead of hardcoding a path.
455
+ */
456
+ function collectKiroEvents(node, out, depth = 0) {
457
+ if (depth > 8 || node === null || typeof node !== "object")
458
+ return;
459
+ if (Array.isArray(node)) {
460
+ for (const item of node)
461
+ collectKiroEvents(item, out, depth + 1);
462
+ return;
463
+ }
464
+ const obj = node;
465
+ if (obj.kind === "toolUse" && obj.data && typeof obj.data === "object") {
466
+ const d = obj.data;
467
+ out.toolUses.push({ name: String(d.name ?? "unknown"), input: d.input });
468
+ return;
469
+ }
470
+ if (obj.kind === "toolResult" && obj.data && typeof obj.data === "object") {
471
+ out.toolResults.push({ name: "toolResult" });
472
+ return;
473
+ }
474
+ for (const value of Object.values(obj))
475
+ collectKiroEvents(value, out, depth + 1);
476
+ }
477
+ function loadSqlite() {
478
+ try {
479
+ return process
480
+ .getBuiltinModule?.("node:sqlite");
481
+ }
482
+ catch {
483
+ return undefined;
484
+ }
485
+ }
486
+ /**
487
+ * Reads tool parts from opencode's sqlite DB for the newest top-level
488
+ * session in this instance's working directory. Rows are cursored by
489
+ * time_created, which is immutable — a part that later flips from `running`
490
+ * to `completed` only changes time_updated, so each tool use emits once.
491
+ *
492
+ * Requires node:sqlite (Node ≥22.13); silently inert otherwise, matching the
493
+ * session-resume feature's degradation.
494
+ */
495
+ export class OpenCodeDbSource {
496
+ workingDirectory;
497
+ dbPath;
498
+ sessionId = null;
499
+ partCursor = 0;
500
+ createdAt;
501
+ constructor(workingDirectory, dbPath = join(process.env.XDG_DATA_HOME || join(homedir(), ".local", "share"), "opencode", "opencode.db"), now = Date.now()) {
502
+ this.workingDirectory = workingDirectory;
503
+ this.dbPath = dbPath;
504
+ this.createdAt = now;
505
+ }
506
+ reset() {
507
+ this.sessionId = null;
508
+ this.partCursor = 0;
509
+ }
510
+ async poll() {
511
+ const sqlite = loadSqlite();
512
+ if (!sqlite || !existsSync(this.dbPath))
513
+ return EMPTY;
514
+ let db;
515
+ try {
516
+ db = new sqlite.DatabaseSync(this.dbPath, { readOnly: true });
517
+ }
518
+ catch {
519
+ return EMPTY;
520
+ }
521
+ try {
522
+ const session = db.prepare("SELECT id, time_created FROM session WHERE directory = ? AND parent_id IS NULL ORDER BY time_updated DESC LIMIT 1").get(this.workingDirectory);
523
+ if (!session)
524
+ return EMPTY;
525
+ if (session.id !== this.sessionId) {
526
+ this.sessionId = session.id;
527
+ // Fresh session started under us → report from its beginning;
528
+ // pre-existing session → only new parts.
529
+ this.partCursor = session.time_created >= this.createdAt ? 0 : Date.now();
530
+ }
531
+ const rows = db.prepare("SELECT data, time_created FROM part WHERE session_id = ? AND time_created > ? ORDER BY time_created ASC LIMIT 100").all(this.sessionId, this.partCursor);
532
+ const events = emptyEvents();
533
+ for (const row of rows) {
534
+ this.partCursor = Math.max(this.partCursor, row.time_created);
535
+ let data;
536
+ try {
537
+ data = JSON.parse(row.data);
538
+ }
539
+ catch {
540
+ continue;
541
+ }
542
+ if (data.type === "tool") {
543
+ const state = data.state;
544
+ events.toolUses.push({ name: String(data.tool ?? "unknown"), input: state?.input });
545
+ }
546
+ else if (data.type === "text") {
547
+ const text = data.text;
548
+ if (typeof text === "string" && text.trim())
549
+ events.assistantTexts.push(text);
550
+ }
551
+ }
552
+ return events;
553
+ }
554
+ catch {
555
+ return EMPTY;
556
+ }
557
+ finally {
558
+ try {
559
+ db.close();
560
+ }
561
+ catch { /* already closed */ }
562
+ }
563
+ }
564
+ }
565
+ /* ----------------------------------------------------------------- factory */
566
+ /**
567
+ * Source for a backend, or null for backends handled elsewhere (claude-code
568
+ * lives inside TranscriptMonitor) and backends with no known source
569
+ * (antigravity, gemini-cli — nothing usable found on disk; grok has
570
+ * events.jsonl with tool names only and can be added later).
571
+ */
572
+ export function createTranscriptSource(backend, workingDirectory) {
573
+ switch (backend) {
574
+ case "codex": return new CodexRolloutSource(workingDirectory);
575
+ case "kiro-cli": return new KiroSessionSource(workingDirectory);
576
+ case "opencode": return new OpenCodeDbSource(workingDirectory);
577
+ default: return null;
578
+ }
579
+ }
580
+ //# sourceMappingURL=transcript-sources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript-sources.js","sourceRoot":"","sources":["../src/transcript-sources.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -119,6 +119,13 @@ export interface InstanceConfig {
119
119
  kiro_ui?: "legacy" | "tui" | "v3";
120
120
  /** MCP tool profile: "full" (20 tools), "standard" (8), "minimal" (3). Default: "full" */
121
121
  tool_set?: string;
122
+ /**
123
+ * Tool-progress detail shown in the channel processing bubble.
124
+ * "standard" shows semantic labels with no shell arguments;
125
+ * "verbose" adds truncated command previews; "off" disables the list.
126
+ * Defaults to "off" so upgrades do not start broadcasting tool activity.
127
+ */
128
+ tool_progress?: "off" | "standard" | "verbose";
122
129
  /** Skip non-essential subsystems (transcript monitor, context guardian, approval server, prompt detector) */
123
130
  lightweight?: boolean;
124
131
  /** System prompt — supports comma-separated file: paths for modularization */
@@ -179,6 +186,8 @@ export interface FleetDefaults extends Partial<InstanceConfig> {
179
186
  locale?: string;
180
187
  /** Seconds before the cancel button starts showing elapsed time (default 30). */
181
188
  progress_min_elapsed?: number;
189
+ /** Maximum UTF-8 byte size of one cross-instance tool message body. Default: 12288. */
190
+ max_cross_instance_message_bytes?: number;
182
191
  scheduler?: {
183
192
  max_schedules?: number;
184
193
  default_timezone?: string;
@@ -192,6 +201,8 @@ export interface FleetDefaults extends Partial<InstanceConfig> {
192
201
  cost_guard?: CostGuardConfig;
193
202
  hang_detector?: HangDetectorConfig;
194
203
  daily_summary?: DailySummaryConfig;
204
+ /** Daily General-topic tips and update-completion tip. Default: true. */
205
+ tips?: boolean;
195
206
  webhooks?: WebhookConfig[];
196
207
  }
197
208
  export type RotationSnapshotEvent = {