@agentdeck/bridge 1.0.19 → 1.0.21

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 (192) hide show
  1. package/dist/adapters/openclaw.d.ts +55 -1
  2. package/dist/adapters/openclaw.d.ts.map +1 -1
  3. package/dist/adapters/openclaw.js +278 -45
  4. package/dist/adapters/openclaw.js.map +1 -1
  5. package/dist/adb-reverse.d.ts +26 -3
  6. package/dist/adb-reverse.d.ts.map +1 -1
  7. package/dist/adb-reverse.js +26 -5
  8. package/dist/adb-reverse.js.map +1 -1
  9. package/dist/apme/adapters/codex-turn-manager.js +6 -1
  10. package/dist/apme/adapters/codex-turn-manager.js.map +1 -1
  11. package/dist/apme/adapters/openclaw-hook.d.ts +45 -1
  12. package/dist/apme/adapters/openclaw-hook.d.ts.map +1 -1
  13. package/dist/apme/adapters/openclaw-hook.js +84 -4
  14. package/dist/apme/adapters/openclaw-hook.js.map +1 -1
  15. package/dist/apme/claude-transcript-reader.d.ts +76 -0
  16. package/dist/apme/claude-transcript-reader.d.ts.map +1 -1
  17. package/dist/apme/claude-transcript-reader.js +152 -1
  18. package/dist/apme/claude-transcript-reader.js.map +1 -1
  19. package/dist/apme/collector.d.ts +63 -5
  20. package/dist/apme/collector.d.ts.map +1 -1
  21. package/dist/apme/collector.js +147 -10
  22. package/dist/apme/collector.js.map +1 -1
  23. package/dist/apme/store.d.ts +23 -1
  24. package/dist/apme/store.d.ts.map +1 -1
  25. package/dist/apme/store.js +81 -2
  26. package/dist/apme/store.js.map +1 -1
  27. package/dist/apme/types.d.ts +1 -1
  28. package/dist/apme/types.d.ts.map +1 -1
  29. package/dist/apme/types.js.map +1 -1
  30. package/dist/auth.d.ts +37 -0
  31. package/dist/auth.d.ts.map +1 -1
  32. package/dist/auth.js +23 -0
  33. package/dist/auth.js.map +1 -1
  34. package/dist/bridge-core.d.ts.map +1 -1
  35. package/dist/bridge-core.js +6 -1
  36. package/dist/bridge-core.js.map +1 -1
  37. package/dist/claude-interrupt-marker.d.ts +31 -0
  38. package/dist/claude-interrupt-marker.d.ts.map +1 -0
  39. package/dist/claude-interrupt-marker.js +58 -0
  40. package/dist/claude-interrupt-marker.js.map +1 -0
  41. package/dist/claude-turn-watchdog.d.ts +93 -0
  42. package/dist/claude-turn-watchdog.d.ts.map +1 -0
  43. package/dist/claude-turn-watchdog.js +173 -0
  44. package/dist/claude-turn-watchdog.js.map +1 -0
  45. package/dist/cli.d.ts +6 -0
  46. package/dist/cli.d.ts.map +1 -1
  47. package/dist/cli.js +399 -115
  48. package/dist/cli.js.map +1 -1
  49. package/dist/codex-hook-silence.d.ts +52 -0
  50. package/dist/codex-hook-silence.d.ts.map +1 -0
  51. package/dist/codex-hook-silence.js +80 -0
  52. package/dist/codex-hook-silence.js.map +1 -0
  53. package/dist/daemon-port.d.ts +90 -0
  54. package/dist/daemon-port.d.ts.map +1 -0
  55. package/dist/daemon-port.js +119 -0
  56. package/dist/daemon-port.js.map +1 -0
  57. package/dist/daemon-server.d.ts +14 -1
  58. package/dist/daemon-server.d.ts.map +1 -1
  59. package/dist/daemon-server.js +297 -69
  60. package/dist/daemon-server.js.map +1 -1
  61. package/dist/daemon-settings.d.ts +46 -0
  62. package/dist/daemon-settings.d.ts.map +1 -0
  63. package/dist/daemon-settings.js +85 -0
  64. package/dist/daemon-settings.js.map +1 -0
  65. package/dist/daemon-takeover.d.ts +75 -0
  66. package/dist/daemon-takeover.d.ts.map +1 -0
  67. package/dist/daemon-takeover.js +137 -0
  68. package/dist/daemon-takeover.js.map +1 -0
  69. package/dist/daemon.js +1 -1
  70. package/dist/index.d.ts +4 -1
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +90 -12
  73. package/dist/index.js.map +1 -1
  74. package/dist/kiro-diagnostics.d.ts +90 -0
  75. package/dist/kiro-diagnostics.d.ts.map +1 -0
  76. package/dist/kiro-diagnostics.js +278 -0
  77. package/dist/kiro-diagnostics.js.map +1 -0
  78. package/dist/kiro-session.d.ts +113 -0
  79. package/dist/kiro-session.d.ts.map +1 -0
  80. package/dist/kiro-session.js +688 -0
  81. package/dist/kiro-session.js.map +1 -0
  82. package/dist/kiro-timeline-feed.d.ts +45 -0
  83. package/dist/kiro-timeline-feed.d.ts.map +1 -0
  84. package/dist/kiro-timeline-feed.js +116 -0
  85. package/dist/kiro-timeline-feed.js.map +1 -0
  86. package/dist/kiro-transcript-timeline.d.ts +57 -0
  87. package/dist/kiro-transcript-timeline.d.ts.map +1 -0
  88. package/dist/kiro-transcript-timeline.js +183 -0
  89. package/dist/kiro-transcript-timeline.js.map +1 -0
  90. package/dist/linux-service.d.ts +2 -1
  91. package/dist/linux-service.d.ts.map +1 -1
  92. package/dist/linux-service.js +8 -3
  93. package/dist/linux-service.js.map +1 -1
  94. package/dist/mdns-discover.d.ts +27 -0
  95. package/dist/mdns-discover.d.ts.map +1 -1
  96. package/dist/mdns-discover.js +60 -7
  97. package/dist/mdns-discover.js.map +1 -1
  98. package/dist/mdns.d.ts.map +1 -1
  99. package/dist/mdns.js +16 -3
  100. package/dist/mdns.js.map +1 -1
  101. package/dist/modules/adb-module.d.ts.map +1 -1
  102. package/dist/modules/adb-module.js +5 -2
  103. package/dist/modules/adb-module.js.map +1 -1
  104. package/dist/modules/index.d.ts +2 -1
  105. package/dist/modules/index.d.ts.map +1 -1
  106. package/dist/modules/index.js +1 -0
  107. package/dist/modules/index.js.map +1 -1
  108. package/dist/modules/types.d.ts +34 -9
  109. package/dist/modules/types.d.ts.map +1 -1
  110. package/dist/modules/types.js +34 -1
  111. package/dist/modules/types.js.map +1 -1
  112. package/dist/network-posture.d.ts +67 -0
  113. package/dist/network-posture.d.ts.map +1 -0
  114. package/dist/network-posture.js +100 -0
  115. package/dist/network-posture.js.map +1 -0
  116. package/dist/observed-steering.d.ts +14 -0
  117. package/dist/observed-steering.d.ts.map +1 -1
  118. package/dist/observed-steering.js +18 -0
  119. package/dist/observed-steering.js.map +1 -1
  120. package/dist/observed-turn-watchdogs.d.ts +84 -0
  121. package/dist/observed-turn-watchdogs.d.ts.map +1 -0
  122. package/dist/observed-turn-watchdogs.js +134 -0
  123. package/dist/observed-turn-watchdogs.js.map +1 -0
  124. package/dist/openclaw-session.d.ts +10 -0
  125. package/dist/openclaw-session.d.ts.map +1 -1
  126. package/dist/openclaw-session.js +12 -0
  127. package/dist/openclaw-session.js.map +1 -1
  128. package/dist/passive-observer.d.ts +19 -0
  129. package/dist/passive-observer.d.ts.map +1 -1
  130. package/dist/passive-observer.js +208 -24
  131. package/dist/passive-observer.js.map +1 -1
  132. package/dist/pixoo/micro-glyphs.d.ts +1 -1
  133. package/dist/pixoo/micro-glyphs.d.ts.map +1 -1
  134. package/dist/pixoo/micro-glyphs.js +2 -0
  135. package/dist/pixoo/micro-glyphs.js.map +1 -1
  136. package/dist/pixoo/official-dot-glyphs.generated.d.ts +1 -1
  137. package/dist/pixoo/official-dot-glyphs.generated.d.ts.map +1 -1
  138. package/dist/pixoo/official-dot-glyphs.generated.js +47 -0
  139. package/dist/pixoo/official-dot-glyphs.generated.js.map +1 -1
  140. package/dist/pixoo/pixoo-discover.d.ts +8 -1
  141. package/dist/pixoo/pixoo-discover.d.ts.map +1 -1
  142. package/dist/pixoo/pixoo-discover.js +15 -8
  143. package/dist/pixoo/pixoo-discover.js.map +1 -1
  144. package/dist/pixoo/pixoo-renderer.d.ts +4 -2
  145. package/dist/pixoo/pixoo-renderer.d.ts.map +1 -1
  146. package/dist/pixoo/pixoo-renderer.js +105 -36
  147. package/dist/pixoo/pixoo-renderer.js.map +1 -1
  148. package/dist/pixoo/pixoo-settings.d.ts +19 -2
  149. package/dist/pixoo/pixoo-settings.d.ts.map +1 -1
  150. package/dist/pixoo/pixoo-settings.js +22 -4
  151. package/dist/pixoo/pixoo-settings.js.map +1 -1
  152. package/dist/pixoo/pixoo-sprites.d.ts.map +1 -1
  153. package/dist/pixoo/pixoo-sprites.js +2 -0
  154. package/dist/pixoo/pixoo-sprites.js.map +1 -1
  155. package/dist/session-aggregator.d.ts +9 -1
  156. package/dist/session-aggregator.d.ts.map +1 -1
  157. package/dist/session-aggregator.js +1 -1
  158. package/dist/session-aggregator.js.map +1 -1
  159. package/dist/session-registry.d.ts +71 -3
  160. package/dist/session-registry.d.ts.map +1 -1
  161. package/dist/session-registry.js +126 -19
  162. package/dist/session-registry.js.map +1 -1
  163. package/dist/state-machine.d.ts +38 -1
  164. package/dist/state-machine.d.ts.map +1 -1
  165. package/dist/state-machine.js +112 -8
  166. package/dist/state-machine.js.map +1 -1
  167. package/dist/subagent-timeline.d.ts +38 -7
  168. package/dist/subagent-timeline.d.ts.map +1 -1
  169. package/dist/subagent-timeline.js +154 -23
  170. package/dist/subagent-timeline.js.map +1 -1
  171. package/dist/timeline-store.d.ts.map +1 -1
  172. package/dist/timeline-store.js +26 -1
  173. package/dist/timeline-store.js.map +1 -1
  174. package/dist/tui/renderer.d.ts.map +1 -1
  175. package/dist/tui/renderer.js +13 -1
  176. package/dist/tui/renderer.js.map +1 -1
  177. package/dist/tui/terrarium.d.ts.map +1 -1
  178. package/dist/tui/terrarium.js +10 -5
  179. package/dist/tui/terrarium.js.map +1 -1
  180. package/dist/utils/redact-secrets.d.ts +3 -0
  181. package/dist/utils/redact-secrets.d.ts.map +1 -0
  182. package/dist/utils/redact-secrets.js +29 -0
  183. package/dist/utils/redact-secrets.js.map +1 -0
  184. package/dist/version-check.d.ts +8 -0
  185. package/dist/version-check.d.ts.map +1 -1
  186. package/dist/version-check.js +27 -0
  187. package/dist/version-check.js.map +1 -1
  188. package/dist/windows-service.d.ts +2 -1
  189. package/dist/windows-service.d.ts.map +1 -1
  190. package/dist/windows-service.js +6 -3
  191. package/dist/windows-service.js.map +1 -1
  192. package/package.json +3 -3
@@ -0,0 +1,278 @@
1
+ import { createHash, randomBytes } from 'node:crypto';
2
+ import { rawSessionId } from '@agentdeck/shared';
3
+ import { activeKiroCliProcesses, collectKiroSessionsFromSnapshots, collectProcessInfo, cwdForPids, isKiroCliProcessCommand, isKiroIdeProcessCommand, kiroResumeSessionId, resolveHostApp, } from './passive-observer.js';
4
+ import { readKiroNativeSessionSnapshots } from './kiro-session.js';
5
+ /**
6
+ * Collect a shareable Kiro observation report without requiring the daemon.
7
+ * Transcript bodies are parsed locally, but only schema markers and booleans
8
+ * cross this boundary. Paths and session ids use a report-scoped salted key.
9
+ */
10
+ export async function collectKiroDiagnosticReport() {
11
+ const processes = await collectProcessInfo();
12
+ const kiroProcesses = processes.filter((proc) => isKiroCliProcessCommand(proc.command) || isKiroIdeProcessCommand(proc.command));
13
+ const cwdByPid = await cwdForPids(kiroProcesses.map((proc) => proc.pid));
14
+ const native = await readKiroNativeSessionSnapshots();
15
+ const availableStores = [
16
+ native.sqliteReadable ? 'sqlite-v2' : undefined,
17
+ native.v3DirectoryPresent ? 'jsonl-v3' : undefined,
18
+ native.jsonlDirectoryPresent ? 'jsonl-legacy' : undefined,
19
+ ].filter((store) => Boolean(store));
20
+ const primaryStore = availableStores.length > 1
21
+ ? 'mixed'
22
+ : availableStores[0] ?? 'none';
23
+ return buildKiroDiagnosticReport({
24
+ processes,
25
+ snapshots: native.snapshots,
26
+ cwdByPid,
27
+ totalConversationRecords: native.snapshots.length,
28
+ directoryPresent: native.jsonlDirectoryPresent,
29
+ v3DirectoryPresent: native.v3DirectoryPresent,
30
+ sqliteDatabasePresent: native.sqliteDatabasePresent,
31
+ sqliteReadable: native.sqliteReadable,
32
+ primaryStore,
33
+ kiroHomeSource: process.env.KIRO_HOME?.trim() ? 'KIRO_HOME' : 'default',
34
+ });
35
+ }
36
+ /** Pure projection kept separate so privacy invariants can be regression-tested. */
37
+ export function buildKiroDiagnosticReport(input) {
38
+ const now = input.now ?? Date.now();
39
+ const cwdByPid = input.cwdByPid ?? new Map();
40
+ const salt = input.salt ?? randomBytes(32).toString('hex');
41
+ const opaqueKey = (kind, value) => `${kind}-${createHash('sha256').update(salt).update('\0').update(value).digest('hex').slice(0, 12)}`;
42
+ const byPid = new Map(input.processes.map((proc) => [proc.pid, proc]));
43
+ const cli = activeKiroCliProcesses(input.processes);
44
+ const ide = input.processes.filter((proc) => isKiroIdeProcessCommand(proc.command));
45
+ const kiroProcesses = [...cli, ...ide.filter((proc) => !cli.some((item) => item.pid === proc.pid))];
46
+ const observed = collectKiroSessionsFromSnapshots(input.processes, input.snapshots, cwdByPid, now);
47
+ const observedByPid = new Map(observed.map((session) => [session.pid, session]));
48
+ const processEntries = kiroProcesses.map((proc) => {
49
+ const cwd = cwdByPid.get(proc.pid);
50
+ const cliSurface = isKiroCliProcessCommand(proc.command);
51
+ return {
52
+ pid: proc.pid,
53
+ surface: cliSurface ? 'cli' : 'ide',
54
+ ttyAttached: Boolean(proc.tty && proc.tty !== '??'),
55
+ cwdKnown: Boolean(cwd),
56
+ ...(cwd ? { cwdKey: opaqueKey('cwd', cwd) } : {}),
57
+ hostedByKiro: resolveHostApp(proc.pid, byPid)?.toLowerCase() === 'kiro',
58
+ v3Flag: /(?:^|\s)--v3(?:\s|$)/.test(proc.command),
59
+ resumeIdFlag: Boolean(kiroResumeSessionId(proc.command)),
60
+ };
61
+ });
62
+ const sessionEntries = input.snapshots.map((snapshot) => {
63
+ const recordKinds = safeDiagnosticRecordKinds(snapshot.recordKinds);
64
+ return {
65
+ sessionKey: opaqueKey('sid', snapshot.sessionId),
66
+ cwdKnown: Boolean(snapshot.cwd),
67
+ ...(snapshot.cwd ? { cwdKey: opaqueKey('cwd', snapshot.cwd) } : {}),
68
+ ageSeconds: Math.max(0, Math.round((now - snapshot.lastActivityAt) / 1000)),
69
+ format: diagnosticFormat(recordKinds, snapshot.transcriptLineCount),
70
+ recordKinds,
71
+ hasModel: Boolean(snapshot.modelName),
72
+ hasCreatedAt: snapshot.createdAt !== undefined,
73
+ hasUpdatedAt: snapshot.updatedAt !== undefined,
74
+ state: snapshot.state,
75
+ };
76
+ });
77
+ const correlations = kiroProcesses
78
+ .map((proc) => {
79
+ const session = observedByPid.get(proc.pid);
80
+ if (!session)
81
+ return undefined;
82
+ const rawId = rawSessionId(session.id);
83
+ const snapshot = input.snapshots.find((item) => item.sessionId === rawId);
84
+ const cwd = session.cwd ?? cwdByPid.get(proc.pid);
85
+ const explicitId = kiroResumeSessionId(proc.command);
86
+ const sameCwd = Boolean(snapshot?.cwd && cwdByPid.get(proc.pid) && sameDiagnosticPath(snapshot.cwd, cwdByPid.get(proc.pid)));
87
+ const surface = session.agentType === 'kiro-ide' ? 'kiro-ide' : 'kiro-cli';
88
+ const confidence = snapshot
89
+ ? explicitId === snapshot.sessionId
90
+ ? 'exact-resume-id'
91
+ : sameCwd
92
+ ? 'cwd-newest'
93
+ : 'newest-fallback'
94
+ : surface === 'kiro-ide'
95
+ ? 'ide-process-only'
96
+ : 'process-only';
97
+ return {
98
+ pid: proc.pid,
99
+ surface,
100
+ matchedSession: Boolean(snapshot),
101
+ ...(snapshot ? { sessionKey: opaqueKey('sid', snapshot.sessionId) } : {}),
102
+ ...(cwd ? { cwdKey: opaqueKey('cwd', cwd) } : {}),
103
+ confidence,
104
+ state: session.state === 'processing' ? 'processing' : 'idle',
105
+ };
106
+ })
107
+ .filter((entry) => Boolean(entry));
108
+ const findings = [];
109
+ if (kiroProcesses.length === 0) {
110
+ findings.push('No running Kiro process detected. Start Kiro normally and rerun this command.');
111
+ }
112
+ const sqliteReadable = input.sqliteReadable ?? false;
113
+ const jsonlPresent = input.directoryPresent ?? true;
114
+ const v3Present = input.v3DirectoryPresent ?? false;
115
+ const primaryStore = input.primaryStore
116
+ ?? ([sqliteReadable, v3Present, jsonlPresent].filter(Boolean).length > 1
117
+ ? 'mixed'
118
+ : sqliteReadable ? 'sqlite-v2' : v3Present ? 'jsonl-v3' : jsonlPresent ? 'jsonl-legacy' : 'none');
119
+ if (input.sqliteDatabasePresent && !sqliteReadable && !jsonlPresent && !v3Present) {
120
+ findings.push('Kiro SQLite conversation store is present but unreadable or uses an unrecognized schema.');
121
+ }
122
+ else if (primaryStore === 'none') {
123
+ findings.push('No supported Kiro conversation store was found.');
124
+ }
125
+ else if ((input.totalConversationRecords ?? input.snapshots.length) === 0) {
126
+ findings.push('The Kiro conversation store is readable but contains no sessions.');
127
+ }
128
+ if (correlations.some((entry) => !entry.matchedSession && entry.surface === 'kiro-cli')) {
129
+ findings.push('At least one Kiro CLI process could not be correlated with a conversation record.');
130
+ }
131
+ if (sessionEntries.some((entry) => entry.format === 'unknown')) {
132
+ findings.push('At least one inspected transcript uses an unrecognized record format.');
133
+ }
134
+ const knownCliCwds = cli.map((proc) => cwdByPid.get(proc.pid)).filter((cwd) => Boolean(cwd));
135
+ if (new Set(knownCliCwds).size < knownCliCwds.length) {
136
+ findings.push('Multiple Kiro CLI processes share a cwd; newest-session correlation may be ambiguous.');
137
+ }
138
+ if (findings.length === 0)
139
+ findings.push('Kiro passive observation prerequisites look healthy.');
140
+ return {
141
+ schemaVersion: 1,
142
+ timestamp: new Date(now).toISOString(),
143
+ platform: input.platform ?? process.platform,
144
+ privacy: [
145
+ 'No prompt, response, tool input, command line, session title, model name, or tty name is included.',
146
+ 'Session ids and cwd paths are replaced with report-scoped salted keys.',
147
+ ],
148
+ config: {
149
+ kiroHomeSource: input.kiroHomeSource ?? 'default',
150
+ sessionsPath: '$KIRO_HOME/sessions/cli',
151
+ directoryPresent: jsonlPresent,
152
+ v3SessionsPath: '$KIRO_HOME/sessions/<workspace>/<session>',
153
+ v3DirectoryPresent: v3Present,
154
+ sqlitePath: '$KIRO_APP_DATA/data.sqlite3',
155
+ sqliteDatabasePresent: input.sqliteDatabasePresent ?? false,
156
+ sqliteReadable,
157
+ primaryStore,
158
+ },
159
+ processes: {
160
+ total: kiroProcesses.length,
161
+ cli: cli.length,
162
+ ide: ide.length,
163
+ entries: processEntries,
164
+ },
165
+ sessions: {
166
+ totalRecords: input.totalConversationRecords ?? input.snapshots.length,
167
+ inspected: input.snapshots.length,
168
+ entries: sessionEntries,
169
+ },
170
+ correlations,
171
+ findings,
172
+ };
173
+ }
174
+ export function formatKiroDiagnosticReport(report) {
175
+ const lines = [
176
+ 'Kiro diagnostic (privacy-safe)',
177
+ `Time: ${report.timestamp}`,
178
+ `Platform: ${report.platform}`,
179
+ `Kiro home: ${report.config.kiroHomeSource}`,
180
+ `Conversation store: ${report.config.primaryStore}`,
181
+ `SQLite v2: ${report.config.sqliteDatabasePresent ? (report.config.sqliteReadable ? 'available' : 'present but unreadable') : 'missing'} (${report.config.sqlitePath})`,
182
+ `JSONL v3: ${report.config.v3DirectoryPresent ? 'available' : 'missing'} (${report.config.v3SessionsPath})`,
183
+ `Legacy JSONL fallback: ${report.config.directoryPresent ? 'available' : 'missing'} (${report.config.sessionsPath})`,
184
+ `Processes: ${report.processes.total} (${report.processes.cli} CLI, ${report.processes.ide} IDE)`,
185
+ `Conversation records: ${report.sessions.totalRecords} (${report.sessions.inspected} inspected)`,
186
+ '',
187
+ 'Correlations:',
188
+ ];
189
+ if (report.correlations.length === 0)
190
+ lines.push('- none');
191
+ for (const entry of report.correlations) {
192
+ const target = entry.sessionKey ?? 'no conversation record';
193
+ lines.push(`- pid ${entry.pid}: ${entry.surface} -> ${target} (${entry.confidence}, ${entry.state})`);
194
+ }
195
+ lines.push('', 'Transcript formats:');
196
+ if (report.sessions.entries.length === 0)
197
+ lines.push('- none');
198
+ for (const entry of report.sessions.entries) {
199
+ const kinds = entry.recordKinds.length > 0
200
+ ? entry.recordKinds.join(', ')
201
+ : (entry.format === 'empty' ? 'no records yet' : 'no recognized markers');
202
+ lines.push(`- ${entry.sessionKey}: ${entry.format}; ${kinds}; age ${entry.ageSeconds}s`);
203
+ }
204
+ lines.push('', 'Findings:', ...report.findings.map((finding) => `- ${finding}`));
205
+ lines.push('', `Privacy: ${report.privacy.join(' ')}`);
206
+ return lines.join('\n');
207
+ }
208
+ // A transcript with no records is not a transcript in an unknown FORMAT — it is
209
+ // a session that has not been prompted yet, which is the normal state of a chat
210
+ // for the seconds between launching it and typing. Reporting that as
211
+ // "unrecognized record format" sends the reader hunting a parser gap that does
212
+ // not exist (measured 2026-08-17: a 14s-old `kiro-cli chat` with a 0-byte
213
+ // messages file raised exactly that finding).
214
+ //
215
+ // But "no recognized kinds" is NOT the same claim as "nothing was written", and
216
+ // gating on the kind set alone conflated them in the other direction: a
217
+ // transcript whose lines fail to parse, or whose records carry no
218
+ // `kind`/`type`/`method`, also yields an empty kind set — and reporting THAT as
219
+ // "no records yet" suppresses the unrecognized-format finding at the exact
220
+ // moment it is true. So `empty` requires evidence of emptiness: zero non-blank
221
+ // lines. Lines present with nothing recognized is `unknown`, which is what the
222
+ // finding is for. `lineCount` is optional because older snapshots predate it;
223
+ // absent it, fall back to the kind set rather than inventing a count.
224
+ function diagnosticFormat(kinds, lineCount) {
225
+ if (kinds.length === 0) {
226
+ if (lineCount === undefined)
227
+ return 'empty';
228
+ return lineCount === 0 ? 'empty' : 'unknown';
229
+ }
230
+ const v2 = kinds.some((kind) => ['ConversationV2', 'Prompt', 'AssistantMessage', 'ToolResults', 'ToolResult'].includes(kind));
231
+ const v3 = kinds.some((kind) => ['user', 'assistant', 'turn_start', 'turn_end', 'session_start'].includes(kind));
232
+ const acp = kinds.some((kind) => kind === 'session/prompt' || kind.startsWith('session/notification'));
233
+ if ([v2, v3, acp].filter(Boolean).length > 1)
234
+ return 'mixed';
235
+ if (v2)
236
+ return 'v2';
237
+ if (v3)
238
+ return 'v3';
239
+ if (acp)
240
+ return 'acp';
241
+ return 'unknown';
242
+ }
243
+ function safeDiagnosticRecordKinds(kinds) {
244
+ const known = new Set([
245
+ 'ConversationV2',
246
+ 'user',
247
+ 'assistant',
248
+ 'turn_start',
249
+ 'turn_end',
250
+ 'session_start',
251
+ 'session_event',
252
+ 'session_metadata',
253
+ 'usage_summary',
254
+ 'ContextualHookInvoked',
255
+ 'Prompt',
256
+ 'AssistantMessage',
257
+ 'ToolResults',
258
+ 'ToolResult',
259
+ 'TurnEnd',
260
+ 'turn_end',
261
+ 'session/prompt',
262
+ 'session/notification',
263
+ 'session/notification:AgentMessageChunk',
264
+ 'session/notification:ToolCall',
265
+ 'session/notification:ToolCallUpdate',
266
+ 'session/notification:TurnEnd',
267
+ 'session/notification:other',
268
+ 'other',
269
+ ]);
270
+ return [...new Set(kinds.map((kind) => (known.has(kind) ? kind : 'other')))].sort();
271
+ }
272
+ function sameDiagnosticPath(a, b) {
273
+ const normalize = (value) => value.replace(/[\\/]+$/, '');
274
+ const left = normalize(a);
275
+ const right = normalize(b);
276
+ return process.platform === 'win32' ? left.toLowerCase() === right.toLowerCase() : left === right;
277
+ }
278
+ //# sourceMappingURL=kiro-diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kiro-diagnostics.js","sourceRoot":"","sources":["../src/kiro-diagnostics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ export interface KiroSqliteRow {
2
+ cwd: string;
3
+ sessionId: string;
4
+ createdAt: number;
5
+ updatedAt: number;
6
+ modelName?: string;
7
+ goal?: string;
8
+ response?: string;
9
+ historyCount: number;
10
+ hasAssistant: number;
11
+ }
12
+ export interface KiroNativeSessionRead {
13
+ snapshots: KiroSessionSnapshot[];
14
+ jsonlDirectoryPresent: boolean;
15
+ v3DirectoryPresent: boolean;
16
+ sqliteDatabasePresent: boolean;
17
+ sqliteReadable: boolean;
18
+ promptHistoryMtimeMs?: number;
19
+ }
20
+ export interface KiroSessionMetadata {
21
+ sessionId?: string;
22
+ cwd?: string;
23
+ title?: string;
24
+ modelName?: string;
25
+ createdAt?: number;
26
+ updatedAt?: number;
27
+ }
28
+ export interface KiroTranscriptSummary {
29
+ state: 'idle' | 'processing';
30
+ goal?: string;
31
+ currentTask?: string;
32
+ response?: string;
33
+ }
34
+ export interface KiroSessionSnapshot extends KiroSessionMetadata, KiroTranscriptSummary {
35
+ sessionId: string;
36
+ transcriptPath: string;
37
+ lastActivityAt: number;
38
+ recordKinds: string[];
39
+ /** Non-blank lines in the sampled transcript, whether or not they parsed.
40
+ * `recordKinds` alone cannot tell "nothing has been written yet" from
41
+ * "written, but this build could not read any of it" — `parseJsonl` drops
42
+ * unreadable lines silently, and a record with no `kind`/`type`/`method`
43
+ * contributes nothing either. Both collapse to an empty kind set, and
44
+ * calling that "empty" hides exactly the format drift the diagnostic is
45
+ * meant to surface. */
46
+ transcriptLineCount?: number;
47
+ }
48
+ interface KiroSessionCacheEntry {
49
+ transcriptMtimeMs: number;
50
+ transcriptSize: number;
51
+ metadataMtimeMs: number;
52
+ metadataSize: number;
53
+ snapshot: KiroSessionSnapshot;
54
+ }
55
+ /** Reuses parsed snapshots across the passive observer's five-second polls. */
56
+ export declare class KiroSessionCache {
57
+ private entries;
58
+ get(path: string, signature: Omit<KiroSessionCacheEntry, 'snapshot'>): KiroSessionSnapshot | undefined;
59
+ set(path: string, entry: KiroSessionCacheEntry): void;
60
+ retain(paths: ReadonlySet<string>): void;
61
+ get size(): number;
62
+ }
63
+ /** Kiro's relocatable config root. `KIRO_HOME` names the root itself. */
64
+ export declare function kiroConfigRoot(): string;
65
+ export declare function kiroSessionsDir(): string;
66
+ export declare function kiroV3SessionsRoot(): string;
67
+ /** Measured Kiro CLI 2.18.1 v2 desktop store. */
68
+ export declare function kiroDataDbPath(): string;
69
+ export declare function kiroPromptHistoryPath(): string;
70
+ /**
71
+ * Read the stable subset of Kiro's sibling `<session>.json` metadata. Kiro 2.x
72
+ * stores the model under `session_state.rts_model_state.model_info.model_id`;
73
+ * the flatter alternatives keep this reader useful for the incompatible 3.x
74
+ * session format without pretending the undocumented remainder is stable.
75
+ */
76
+ export declare function parseKiroSessionMetadata(raw: string, fallbackSessionId?: string): KiroSessionMetadata;
77
+ /**
78
+ * Summarize measured Kiro 2.x records, v3 `payload.type` envelopes, and ACP
79
+ * notifications. Unknown records are ignored: a Kiro
80
+ * upgrade may reduce detail, but must never make daemon observation fail.
81
+ */
82
+ export declare function parseKiroTranscript(raw: string): KiroTranscriptSummary;
83
+ /**
84
+ * Return schema markers only. Safe for diagnostics: values, prompt text,
85
+ * tool input, response text, and message ids never leave this function.
86
+ */
87
+ /** Non-blank lines in a transcript sample — the evidence that something WAS
88
+ * written, independent of whether this build could interpret it. */
89
+ export declare function kiroTranscriptLineCount(raw: string): number;
90
+ export declare function kiroTranscriptRecordKinds(raw: string): string[];
91
+ /** Read the newest bounded set of Kiro CLI session pairs. */
92
+ export declare function readKiroSessionSnapshots(sessionsDir?: string, maxSessions?: number, cache?: KiroSessionCache): Promise<KiroSessionSnapshot[]>;
93
+ /** Read Kiro CLI 3.0's measured `<workspace>/<session>/messages.jsonl` store. */
94
+ export declare function readKiroV3SessionSnapshots(sessionsRoot?: string, maxSessions?: number, cache?: KiroSessionCache): Promise<KiroSessionSnapshot[]>;
95
+ /**
96
+ * Read every currently-known native Kiro store without changing how Kiro is
97
+ * launched. Kiro CLI 2.18.1 on macOS persists `conversations_v2` in its app
98
+ * SQLite database; v3 writes nested `session.json` + `messages.jsonl` pairs.
99
+ * Legacy flat JSONL remains a fallback. Sources are merged by session id.
100
+ */
101
+ export declare function readKiroNativeSessionSnapshots(maxSessions?: number, cache?: KiroSessionCache): Promise<KiroNativeSessionRead>;
102
+ /**
103
+ * Kiro appends the submitted prompt to `.cli_bash_history` immediately, but
104
+ * only commits `conversations_v2` after the response completes. A newer prompt
105
+ * history mtime therefore brackets the current turn without reading its text.
106
+ * The marker is global, so only the newest persisted conversation is promoted;
107
+ * simultaneous Kiro chats remain an explicitly ambiguous best effort.
108
+ */
109
+ export declare function applyKiroPendingTurnMarker(snapshots: KiroSessionSnapshot[], promptHistoryMtimeMs: number | undefined, now?: number): KiroSessionSnapshot[];
110
+ /** Convert only the allowlisted conversation columns selected above. */
111
+ export declare function parseKiroSqliteRows(rows: readonly KiroSqliteRow[], dbPath: string): KiroSessionSnapshot[];
112
+ export {};
113
+ //# sourceMappingURL=kiro-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kiro-session.d.ts","sourceRoot":"","sources":["../src/kiro-session.ts"],"names":[],"mappings":"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"}