@agentdeck/bridge 0.2.3 → 1.0.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.
Files changed (185) hide show
  1. package/assets/fm-helper/agentdeck-fm-helper +0 -0
  2. package/dist/apme/collector.d.ts +4 -0
  3. package/dist/apme/collector.d.ts.map +1 -1
  4. package/dist/apme/collector.js +1 -0
  5. package/dist/apme/collector.js.map +1 -1
  6. package/dist/apme/dashboard-html.d.ts.map +1 -1
  7. package/dist/apme/dashboard-html.js +30 -0
  8. package/dist/apme/dashboard-html.js.map +1 -1
  9. package/dist/apme/http.d.ts.map +1 -1
  10. package/dist/apme/http.js +9 -0
  11. package/dist/apme/http.js.map +1 -1
  12. package/dist/apme/index.d.ts.map +1 -1
  13. package/dist/apme/index.js +14 -3
  14. package/dist/apme/index.js.map +1 -1
  15. package/dist/apme/judge-detect.d.ts +26 -0
  16. package/dist/apme/judge-detect.d.ts.map +1 -0
  17. package/dist/apme/judge-detect.js +69 -0
  18. package/dist/apme/judge-detect.js.map +1 -0
  19. package/dist/apme/runner.d.ts +7 -0
  20. package/dist/apme/runner.d.ts.map +1 -1
  21. package/dist/apme/runner.js +188 -33
  22. package/dist/apme/runner.js.map +1 -1
  23. package/dist/apme/settings.d.ts +10 -8
  24. package/dist/apme/settings.d.ts.map +1 -1
  25. package/dist/apme/settings.js +11 -16
  26. package/dist/apme/settings.js.map +1 -1
  27. package/dist/awaiting-overlay.d.ts +17 -4
  28. package/dist/awaiting-overlay.d.ts.map +1 -1
  29. package/dist/awaiting-overlay.js +39 -8
  30. package/dist/awaiting-overlay.js.map +1 -1
  31. package/dist/bridge-core.d.ts +10 -0
  32. package/dist/bridge-core.d.ts.map +1 -1
  33. package/dist/bridge-core.js +50 -0
  34. package/dist/bridge-core.js.map +1 -1
  35. package/dist/claude-permission-rules.d.ts +55 -0
  36. package/dist/claude-permission-rules.d.ts.map +1 -0
  37. package/dist/claude-permission-rules.js +197 -0
  38. package/dist/claude-permission-rules.js.map +1 -0
  39. package/dist/cli.d.ts.map +1 -1
  40. package/dist/cli.js +10 -1
  41. package/dist/cli.js.map +1 -1
  42. package/dist/d200h/hid-protocol.d.ts +62 -0
  43. package/dist/d200h/hid-protocol.d.ts.map +1 -0
  44. package/dist/d200h/hid-protocol.js +124 -0
  45. package/dist/d200h/hid-protocol.js.map +1 -0
  46. package/dist/d200h/image-renderer.d.ts +24 -0
  47. package/dist/d200h/image-renderer.d.ts.map +1 -0
  48. package/dist/d200h/image-renderer.js +321 -0
  49. package/dist/d200h/image-renderer.js.map +1 -0
  50. package/dist/daemon-server.d.ts.map +1 -1
  51. package/dist/daemon-server.js +374 -26
  52. package/dist/daemon-server.js.map +1 -1
  53. package/dist/daemon.js +1 -1
  54. package/dist/esp32-serial.d.ts +30 -0
  55. package/dist/esp32-serial.d.ts.map +1 -1
  56. package/dist/esp32-serial.js +148 -11
  57. package/dist/esp32-serial.js.map +1 -1
  58. package/dist/fallback-task-timeline.d.ts.map +1 -1
  59. package/dist/fallback-task-timeline.js +9 -2
  60. package/dist/fallback-task-timeline.js.map +1 -1
  61. package/dist/hook-server.d.ts.map +1 -1
  62. package/dist/hook-server.js +6 -5
  63. package/dist/hook-server.js.map +1 -1
  64. package/dist/idotmatrix/idotmatrix-daemon-sync.js +2 -2
  65. package/dist/idotmatrix/idotmatrix-daemon-sync.js.map +1 -1
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js +2 -0
  68. package/dist/index.js.map +1 -1
  69. package/dist/logger.d.ts +3 -1
  70. package/dist/logger.d.ts.map +1 -1
  71. package/dist/logger.js +6 -2
  72. package/dist/logger.js.map +1 -1
  73. package/dist/model-catalog.d.ts +1 -1
  74. package/dist/model-catalog.d.ts.map +1 -1
  75. package/dist/model-catalog.js +2 -4
  76. package/dist/model-catalog.js.map +1 -1
  77. package/dist/modules/d200h-module.d.ts +65 -0
  78. package/dist/modules/d200h-module.d.ts.map +1 -0
  79. package/dist/modules/d200h-module.js +495 -0
  80. package/dist/modules/d200h-module.js.map +1 -0
  81. package/dist/modules/d200h-renderer.d.ts +7 -0
  82. package/dist/modules/d200h-renderer.d.ts.map +1 -0
  83. package/dist/modules/d200h-renderer.js +321 -0
  84. package/dist/modules/d200h-renderer.js.map +1 -0
  85. package/dist/modules/trmnl-module.d.ts +38 -0
  86. package/dist/modules/trmnl-module.d.ts.map +1 -0
  87. package/dist/modules/trmnl-module.js +111 -0
  88. package/dist/modules/trmnl-module.js.map +1 -0
  89. package/dist/observed-steering.d.ts +93 -0
  90. package/dist/observed-steering.d.ts.map +1 -0
  91. package/dist/observed-steering.js +247 -0
  92. package/dist/observed-steering.js.map +1 -0
  93. package/dist/opencode-steering.d.ts +36 -0
  94. package/dist/opencode-steering.d.ts.map +1 -0
  95. package/dist/opencode-steering.js +84 -0
  96. package/dist/opencode-steering.js.map +1 -0
  97. package/dist/output-parser.d.ts.map +1 -1
  98. package/dist/output-parser.js +48 -10
  99. package/dist/output-parser.js.map +1 -1
  100. package/dist/passive-observer.d.ts +6 -0
  101. package/dist/passive-observer.d.ts.map +1 -1
  102. package/dist/passive-observer.js +31 -1
  103. package/dist/passive-observer.js.map +1 -1
  104. package/dist/permission-resolver.d.ts +13 -5
  105. package/dist/permission-resolver.d.ts.map +1 -1
  106. package/dist/permission-resolver.js +18 -9
  107. package/dist/permission-resolver.js.map +1 -1
  108. package/dist/pixoo/micro-glyphs.d.ts +10 -41
  109. package/dist/pixoo/micro-glyphs.d.ts.map +1 -1
  110. package/dist/pixoo/micro-glyphs.js +130 -263
  111. package/dist/pixoo/micro-glyphs.js.map +1 -1
  112. package/dist/pixoo/official-dot-glyphs.generated.d.ts +8 -0
  113. package/dist/pixoo/official-dot-glyphs.generated.d.ts.map +1 -0
  114. package/dist/pixoo/official-dot-glyphs.generated.js +247 -0
  115. package/dist/pixoo/official-dot-glyphs.generated.js.map +1 -0
  116. package/dist/pixoo/pixoo-bridge.d.ts +14 -6
  117. package/dist/pixoo/pixoo-bridge.d.ts.map +1 -1
  118. package/dist/pixoo/pixoo-bridge.js +63 -39
  119. package/dist/pixoo/pixoo-bridge.js.map +1 -1
  120. package/dist/pixoo/pixoo-renderer.d.ts +21 -2
  121. package/dist/pixoo/pixoo-renderer.d.ts.map +1 -1
  122. package/dist/pixoo/pixoo-renderer.js +401 -132
  123. package/dist/pixoo/pixoo-renderer.js.map +1 -1
  124. package/dist/pixoo/pixoo-sprites.d.ts +24 -0
  125. package/dist/pixoo/pixoo-sprites.d.ts.map +1 -1
  126. package/dist/pixoo/pixoo-sprites.js +108 -0
  127. package/dist/pixoo/pixoo-sprites.js.map +1 -1
  128. package/dist/review-runner.d.ts +113 -0
  129. package/dist/review-runner.d.ts.map +1 -0
  130. package/dist/review-runner.js +428 -0
  131. package/dist/review-runner.js.map +1 -0
  132. package/dist/session-aggregator.d.ts +8 -0
  133. package/dist/session-aggregator.d.ts.map +1 -1
  134. package/dist/session-aggregator.js.map +1 -1
  135. package/dist/session-focus-relay.d.ts.map +1 -1
  136. package/dist/session-focus-relay.js +7 -1
  137. package/dist/session-focus-relay.js.map +1 -1
  138. package/dist/session-registry.d.ts +3 -0
  139. package/dist/session-registry.d.ts.map +1 -1
  140. package/dist/session-registry.js +3 -0
  141. package/dist/session-registry.js.map +1 -1
  142. package/dist/timeline-store.d.ts +49 -0
  143. package/dist/timeline-store.d.ts.map +1 -1
  144. package/dist/timeline-store.js +175 -7
  145. package/dist/timeline-store.js.map +1 -1
  146. package/dist/trmnl/byos-server.d.ts +39 -0
  147. package/dist/trmnl/byos-server.d.ts.map +1 -0
  148. package/dist/trmnl/byos-server.js +301 -0
  149. package/dist/trmnl/byos-server.js.map +1 -0
  150. package/dist/trmnl/frame-cache.d.ts +37 -0
  151. package/dist/trmnl/frame-cache.d.ts.map +1 -0
  152. package/dist/trmnl/frame-cache.js +157 -0
  153. package/dist/trmnl/frame-cache.js.map +1 -0
  154. package/dist/trmnl/image-renderer.d.ts +27 -0
  155. package/dist/trmnl/image-renderer.d.ts.map +1 -0
  156. package/dist/trmnl/image-renderer.js +235 -0
  157. package/dist/trmnl/image-renderer.js.map +1 -0
  158. package/dist/trmnl/trmnl-settings.d.ts +96 -0
  159. package/dist/trmnl/trmnl-settings.d.ts.map +1 -0
  160. package/dist/trmnl/trmnl-settings.js +177 -0
  161. package/dist/trmnl/trmnl-settings.js.map +1 -0
  162. package/dist/trmnl/trmnl-telemetry.d.ts +47 -0
  163. package/dist/trmnl/trmnl-telemetry.d.ts.map +1 -0
  164. package/dist/trmnl/trmnl-telemetry.js +56 -0
  165. package/dist/trmnl/trmnl-telemetry.js.map +1 -0
  166. package/dist/tui/dashboard.d.ts.map +1 -1
  167. package/dist/tui/dashboard.js +14 -4
  168. package/dist/tui/dashboard.js.map +1 -1
  169. package/dist/tui/renderer.d.ts.map +1 -1
  170. package/dist/tui/renderer.js +63 -13
  171. package/dist/tui/renderer.js.map +1 -1
  172. package/dist/tui/terrarium.d.ts.map +1 -1
  173. package/dist/tui/terrarium.js +7 -2
  174. package/dist/tui/terrarium.js.map +1 -1
  175. package/dist/usage-event.d.ts.map +1 -1
  176. package/dist/usage-event.js +25 -2
  177. package/dist/usage-event.js.map +1 -1
  178. package/dist/version-check.d.ts.map +1 -1
  179. package/dist/version-check.js +1 -17
  180. package/dist/version-check.js.map +1 -1
  181. package/dist/ws-server.d.ts +0 -7
  182. package/dist/ws-server.d.ts.map +1 -1
  183. package/dist/ws-server.js +5 -20
  184. package/dist/ws-server.js.map +1 -1
  185. package/package.json +4 -4
@@ -0,0 +1,428 @@
1
+ /**
2
+ * On-demand independent review (the REVIEW deck button).
3
+ *
4
+ * NOT a prompt to the agent: the daemon collects the session's latest work
5
+ * product (working-tree delta of its cwd) and has an INDEPENDENT judge model
6
+ * assess risk — the same local-first judge stack APME uses (MLX / Foundation
7
+ * Models relay / opt-in API). Because no agent control is involved, every
8
+ * session type qualifies: managed, observed Claude/OpenCode, and even
9
+ * control-less observed Codex.
10
+ *
11
+ * Output fan-out:
12
+ * - `review_status` / `review_result` WS events (dashboards, future UIs)
13
+ * - SessionInfo badge fields via `reviewSnapshot` (REVIEW tile verdict)
14
+ * - a self-contained HTML report written under <dataDir>/reviews/ and
15
+ * opened in the default browser — the "no macOS app" tier's popup.
16
+ */
17
+ import { execFile } from 'child_process';
18
+ import { mkdirSync, writeFileSync } from 'fs';
19
+ import { join } from 'path';
20
+ import { homedir } from 'os';
21
+ import { callJudgeWithMeta, probeJudgeBackend } from './apme/runner.js';
22
+ import { loadApmeConfig } from './apme/settings.js';
23
+ import { debug, logError } from './logger.js';
24
+ const DIFF_BYTE_CAP = 60_000;
25
+ /** Basic-tier judges (on-device FM relay) overflow long diffs — keep the
26
+ * whole prompt inside a small context window. */
27
+ const BASIC_DIFF_BYTE_CAP = 12_000;
28
+ /** Recent user-request ↔ agent-response context appended to the prompt so
29
+ * the judge evaluates the diff against what the user actually asked. */
30
+ const ACTIVITY_CHAR_CAP = 4_000;
31
+ const GIT_TIMEOUT_MS = 10_000;
32
+ export function reviewJudgeTier(backend) {
33
+ return backend === 'foundationModels' ? 'basic' : 'advanced';
34
+ }
35
+ /** Verdicts older than this stop badging the REVIEW tile. */
36
+ const BADGE_TTL_MS = 30 * 60_000;
37
+ const stateBySession = new Map();
38
+ /** Badge fields for the sessions_list enricher. */
39
+ export function reviewSnapshot(sessionId) {
40
+ const s = stateBySession.get(sessionId);
41
+ if (!s)
42
+ return {};
43
+ if (Date.now() - s.ts > BADGE_TTL_MS) {
44
+ stateBySession.delete(sessionId);
45
+ return {};
46
+ }
47
+ return {
48
+ reviewStatus: s.status,
49
+ ...(s.risk ? { reviewRisk: s.risk } : {}),
50
+ ...(s.findings != null ? { reviewFindings: s.findings } : {}),
51
+ };
52
+ }
53
+ export function isReviewRunning(sessionId) {
54
+ return stateBySession.get(sessionId)?.status === 'running';
55
+ }
56
+ function git(cwd, args) {
57
+ // External-process await: hard timeout is the first line of defense
58
+ // (a wedged git must never wedge a review).
59
+ return new Promise((resolve, reject) => {
60
+ execFile('git', ['-C', cwd, ...args], {
61
+ timeout: GIT_TIMEOUT_MS, maxBuffer: 4 * 1024 * 1024,
62
+ }, (err, stdout) => {
63
+ if (err)
64
+ reject(err);
65
+ else
66
+ resolve(stdout);
67
+ });
68
+ });
69
+ }
70
+ async function collectDelta(cwd, byteCap = DIFF_BYTE_CAP) {
71
+ try {
72
+ await git(cwd, ['rev-parse', '--is-inside-work-tree']);
73
+ }
74
+ catch {
75
+ return null; // not a git repo — trajectory-less Node review has no input
76
+ }
77
+ const [stat, status] = await Promise.all([
78
+ git(cwd, ['diff', 'HEAD', '--stat']).catch(() => ''),
79
+ git(cwd, ['status', '--porcelain']).catch(() => ''),
80
+ ]);
81
+ let diff = await git(cwd, ['diff', 'HEAD']).catch(() => '');
82
+ const untracked = status.split('\n')
83
+ .filter((l) => l.startsWith('??'))
84
+ .map((l) => l.slice(3).trim())
85
+ .filter(Boolean);
86
+ let truncated = false;
87
+ if (diff.length > byteCap) {
88
+ diff = diff.slice(0, byteCap);
89
+ truncated = true;
90
+ }
91
+ return { diff, stat, untracked, truncated };
92
+ }
93
+ /**
94
+ * The review answers the user's question: "what did I ask this agent
95
+ * recently, how did it handle it, and is the result appropriate?" — sized to
96
+ * what the configured judge can actually do (mirrors apple
97
+ * ReviewRunner.buildPrompt). `recentActivity` is the session's recent
98
+ * user-request ↔ agent-response lines so the diff is judged against intent.
99
+ */
100
+ function buildJudgePrompt(projectName, delta, tier, recentActivity) {
101
+ const activity = recentActivity?.trim()
102
+ ? [
103
+ '--- recent session activity (what the user asked ↔ what the agent answered) ---',
104
+ recentActivity.slice(-ACTIVITY_CHAR_CAP),
105
+ '',
106
+ ]
107
+ : [];
108
+ const shared = [
109
+ `Project: ${projectName}`,
110
+ delta.truncated ? `(diff truncated to the first ${tier === 'basic' ? '12' : '60'}KB)` : '',
111
+ '',
112
+ ...activity,
113
+ '--- git diff --stat ---',
114
+ delta.stat || '(empty)',
115
+ delta.untracked.length ? `Untracked files: ${delta.untracked.slice(0, 20).join(', ')}` : '',
116
+ '--- git diff ---',
117
+ delta.diff || '(no tracked changes)',
118
+ '',
119
+ 'Respond with STRICT JSON only, no prose, exactly this shape:',
120
+ '{"risk":"low|medium|high","summary":"<one sentence: what the user asked and whether the change handles it appropriately>","findings":[{"severity":"high|medium|low","title":"...","detail":"...","file":"..."}]}',
121
+ 'Include "file" only when it names a real file from the diff; otherwise',
122
+ 'omit the key. Every finding must cite something actually present above —',
123
+ 'return an empty findings array when nothing is genuinely risky. Do not',
124
+ 'invent findings to fill space.',
125
+ ];
126
+ if (tier === 'basic') {
127
+ // Small on-device model: one narrow, checkable task — no broad
128
+ // security-audit rubric (small judges fill it with invented findings).
129
+ return [
130
+ 'You are reviewing a coding agent\'s uncommitted changes for its user.',
131
+ 'Answer one question: does this change look like a reasonable, complete',
132
+ 'response to what the user asked? Flag only what you can point to in',
133
+ 'the diff: code that is obviously broken or unfinished, deleted files',
134
+ 'or data the user did not ask to remove, and leftover debug or secret',
135
+ 'material.',
136
+ '',
137
+ ...shared,
138
+ ].filter(Boolean).join('\n');
139
+ }
140
+ return [
141
+ 'You are an independent code reviewer helping the USER of a coding agent',
142
+ 'answer: "what did I ask this agent recently, how did it handle it, and',
143
+ 'is the result appropriate?" Judge only the delta below — not overall',
144
+ 'project quality. Assess, in order of importance: alignment between the',
145
+ 'user\'s requests and the change; destructive or irreversible operations;',
146
+ 'security issues (secrets, injection, permissions); broken or untested',
147
+ 'code paths; incomplete work (TODO/FIXME/stubs); and changes that',
148
+ 'contradict their apparent intent. A documentation issue is not a',
149
+ 'security issue; use "high"/"medium" only for concrete, evidenced risk.',
150
+ '',
151
+ ...shared,
152
+ ].filter(Boolean).join('\n');
153
+ }
154
+ function parseJudgeJson(text) {
155
+ const start = text.indexOf('{');
156
+ const end = text.lastIndexOf('}');
157
+ if (start < 0 || end <= start)
158
+ return null;
159
+ try {
160
+ const parsed = JSON.parse(text.slice(start, end + 1));
161
+ const risk = parsed.risk === 'high' || parsed.risk === 'medium' ? parsed.risk : 'low';
162
+ const summary = typeof parsed.summary === 'string' ? parsed.summary.slice(0, 400) : '';
163
+ const findings = Array.isArray(parsed.findings)
164
+ ? parsed.findings.slice(0, 20).flatMap((f) => {
165
+ if (!f || typeof f !== 'object')
166
+ return [];
167
+ const o = f;
168
+ return [{
169
+ severity: o.severity === 'high' || o.severity === 'medium' ? o.severity : 'low',
170
+ title: typeof o.title === 'string' ? o.title.slice(0, 160) : 'Finding',
171
+ detail: typeof o.detail === 'string' ? o.detail.slice(0, 1000) : '',
172
+ // Small judges echo schema placeholders back as the path.
173
+ ...(typeof o.file === 'string' && o.file && o.file !== 'optional/path' && o.file !== '...'
174
+ ? { file: o.file.slice(0, 200) } : {}),
175
+ }];
176
+ })
177
+ : [];
178
+ // Coherence guard (mirrored in apple ReviewRunner.parse): an above-low
179
+ // risk with zero findings is judge noise — the badge would alarm with
180
+ // nothing to show. Risk must be substantiated by at least one finding.
181
+ return { risk: findings.length === 0 ? 'low' : risk, summary, findings };
182
+ }
183
+ catch {
184
+ return null;
185
+ }
186
+ }
187
+ function esc(s) {
188
+ return s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
189
+ }
190
+ /** Self-contained aquarium-tide report — no external assets (works offline,
191
+ * same file doubles as the App Store tier's browser fallback template). */
192
+ export function renderReviewHtml(opts) {
193
+ const { outcome } = opts;
194
+ const riskColor = outcome.risk === 'high' ? '#c2410c' : outcome.risk === 'medium' ? '#b45309' : '#15803d';
195
+ const rows = outcome.findings.map((f) => `
196
+ <div class="finding sev-${f.severity}">
197
+ <div class="head"><span class="sev">${f.severity.toUpperCase()}</span> <strong>${esc(f.title)}</strong>${f.file ? `<code>${esc(f.file)}</code>` : ''}</div>
198
+ <p>${esc(f.detail)}</p>
199
+ </div>`).join('\n');
200
+ return `<!doctype html>
201
+ <html lang="en"><head><meta charset="utf-8"><title>AgentDeck Review — ${esc(opts.projectName)}</title>
202
+ <style>
203
+ :root { color-scheme: light; }
204
+ body { font-family: "IBM Plex Sans", -apple-system, sans-serif; background: #f6f3ec; color: #1c2a25; margin: 0; padding: 32px; }
205
+ .card { max-width: 760px; margin: 0 auto; background: #fffdf8; border: 1px solid #e2dcc9; border-radius: 12px; padding: 28px 32px; }
206
+ h1 { font-size: 20px; margin: 0 0 4px; }
207
+ .meta { color: #5b6f66; font-size: 13px; margin-bottom: 20px; }
208
+ .risk { display: inline-block; padding: 4px 12px; border-radius: 999px; color: #fffdf8; background: ${riskColor}; font-weight: 600; font-size: 13px; letter-spacing: 0.04em; }
209
+ .summary { font-size: 15px; margin: 16px 0 24px; }
210
+ .finding { border-left: 3px solid #e2dcc9; padding: 8px 14px; margin: 12px 0; }
211
+ .finding.sev-high { border-color: #c2410c; }
212
+ .finding.sev-medium { border-color: #b45309; }
213
+ .finding .sev { font-size: 11px; font-weight: 700; color: #5b6f66; margin-right: 6px; }
214
+ .finding code { margin-left: 8px; font-family: "JetBrains Mono", monospace; font-size: 12px; color: #3b5249; }
215
+ .finding p { margin: 6px 0 0; font-size: 14px; }
216
+ pre { background: #efe9da; border-radius: 8px; padding: 12px; overflow-x: auto; font-family: "JetBrains Mono", monospace; font-size: 12px; }
217
+ .empty { color: #5b6f66; font-style: italic; }
218
+ footer { margin-top: 24px; color: #8a9a91; font-size: 12px; }
219
+ </style></head><body><div class="card">
220
+ <h1>Independent Review — ${esc(opts.projectName)}</h1>
221
+ <div class="meta">${esc(opts.sessionLabel)} · ${opts.generatedAt.toISOString()}</div>
222
+ <span class="risk">RISK ${esc(outcome.risk.toUpperCase())}</span>
223
+ <p class="summary">${esc(outcome.summary || 'No summary provided by the judge.')}</p>
224
+ ${outcome.findings.length ? rows : '<p class="empty">No risky findings — the judge saw nothing worth flagging in this delta.</p>'}
225
+ <h2 style="font-size:15px">Changed files</h2>
226
+ <pre>${esc(opts.deltaStat || '(no tracked changes)')}</pre>
227
+ <footer>judge: ${esc(outcome.backend)}${opts.tierNote ? ` · ${esc(opts.tierNote)}` : ''} · generated by AgentDeck (independent of the coding agent)</footer>
228
+ </div></body></html>`;
229
+ }
230
+ function reviewsDir() {
231
+ return join(process.env.AGENTDECK_DATA_DIR ?? join(homedir(), '.agentdeck'), 'reviews');
232
+ }
233
+ /**
234
+ * Honest capability note per judge backend. A risk review is only as good as
235
+ * the judge — an on-device ~3B model can screen for obvious hazards but not
236
+ * audit; small local models below ~8B are not worth trusting at all.
237
+ */
238
+ export function judgeTierNote(backend) {
239
+ if (backend === 'foundationModels') {
240
+ return 'judge tier: on-device small model — basic screening only, not a thorough audit';
241
+ }
242
+ if (backend === 'mlx' || backend === 'openai') {
243
+ return 'judge tier: configured model — review depth depends on model size (8B minimum, 30B-class recommended for local)';
244
+ }
245
+ return undefined; // api / openclaw route to frontier-class models
246
+ }
247
+ /**
248
+ * Setup guidance shown when the REVIEW button is pressed with no usable
249
+ * judge. Written to <dataDir>/reviews/ and opened in the browser — the same
250
+ * channel the report itself uses, so the "popup" behaviour is consistent.
251
+ * Deliberately calm: not using REVIEW is a fully supported choice.
252
+ */
253
+ export function renderJudgeGuidanceHtml(opts) {
254
+ const detected = opts.detected ?? [];
255
+ const detectedBlock = detected.length ? `
256
+ <h2 style="color:#15803d">✓ Detected on this machine — use what you already have</h2>
257
+ ${detected.map((d) => `<div style="margin:8px 0;padding:10px 12px;background:#e8f2ea;border:1px solid #bcd9c2;border-radius:8px">
258
+ <strong>${esc(d.label)}</strong> <span class="tier">at ${esc(d.endpoint)}</span>
259
+ <div style="font-size:12px;color:#3b5249;margin-top:2px">${d.models.length} model${d.models.length === 1 ? '' : 's'}: ${esc(d.models.slice(0, 6).join(', '))}</div>
260
+ <pre style="margin-top:6px">{ "apme": { "judge": { "backend": "openai", "endpoint": "${esc(d.endpoint)}", "model": "${esc(d.models[0] ?? '')}" } } }</pre>
261
+ </div>`).join('')}
262
+ <p style="font-size:12px;color:#5b6f66">Point AgentDeck at a server you already run — nothing new to install. An 8B-class instruct model is the realistic minimum for a trustworthy review; smaller models give unreliable findings.</p>
263
+ ` : '';
264
+ return `<!doctype html>
265
+ <html lang="en"><head><meta charset="utf-8"><title>AgentDeck Review — judge setup</title>
266
+ <style>
267
+ body { font-family: "IBM Plex Sans", -apple-system, sans-serif; background: #f6f3ec; color: #1c2a25; margin: 0; padding: 32px; }
268
+ .card { max-width: 760px; margin: 0 auto; background: #fffdf8; border: 1px solid #e2dcc9; border-radius: 12px; padding: 28px 32px; }
269
+ h1 { font-size: 20px; margin: 0 0 8px; }
270
+ h2 { font-size: 15px; margin: 22px 0 6px; }
271
+ .why { background: #efe9da; border-radius: 8px; padding: 10px 14px; font-size: 13px; }
272
+ code, pre { font-family: "JetBrains Mono", monospace; font-size: 12px; }
273
+ pre { background: #efe9da; border-radius: 8px; padding: 12px; overflow-x: auto; }
274
+ .rank { display: inline-block; min-width: 20px; text-align: center; background: #1c2a25; color: #fffdf8; border-radius: 999px; font-size: 12px; margin-right: 6px; }
275
+ .tier { color: #5b6f66; font-size: 12px; }
276
+ .optout { margin-top: 24px; padding: 12px 14px; border: 1px dashed #e2dcc9; border-radius: 8px; font-size: 13px; color: #5b6f66; }
277
+ footer { margin-top: 20px; color: #8a9a91; font-size: 12px; }
278
+ </style></head><body><div class="card">
279
+ <h1>REVIEW needs a judge model</h1>
280
+ <div class="why">The REVIEW button runs an <strong>independent</strong> risk review of your session's work — a separate model (never the coding agent itself) reads the changes and reports risks. Right now no usable judge is configured:<br><br>
281
+ <code>backend: ${esc(opts.backend)}${opts.model ? ` · model: ${esc(opts.model)}` : ''}</code><br>
282
+ <code>${esc(opts.reason ?? 'not ready')}</code></div>
283
+ ${detectedBlock}
284
+ <h2>All options <span class="tier">— ranked by review quality</span></h2>
285
+ <h2><span class="rank">1</span>Anthropic API <span class="tier">— best review quality (usage-billed, opt-in)</span></h2>
286
+ <pre>{ "apme": { "judge": { "backend": "api", "model": "claude-opus-4-8" } } }</pre>
287
+ <p style="font-size:13px">Credential: <code>export ANTHROPIC_API_KEY=…</code>, or <code>ant auth login</code>, or add <code>"apiKey"</code> next to the model. <code>claude-haiku-4-5</code> is the budget option if review volume is high.</p>
288
+
289
+ <h2><span class="rank">2</span>OpenRouter <span class="tier">— one key, hundreds of models (usage-billed)</span></h2>
290
+ <pre>{ "apme": { "judge": { "backend": "openai",
291
+ "endpoint": "https://openrouter.ai/api/v1",
292
+ "apiKey": "sk-or-…", "model": "anthropic/claude-opus-4" } } }</pre>
293
+ <p style="font-size:13px">If you already have an OpenRouter key. Any OpenAI-compatible cloud (Together, Groq, Fireworks, …) works the same way — set <code>endpoint</code> + <code>apiKey</code> + <code>model</code>.</p>
294
+
295
+ <h2><span class="rank">3</span>OpenClaw gateway <span class="tier">— strong quality via your existing subscription models</span></h2>
296
+ <pre>{ "apme": { "judge": { "backend": "openclaw" } } }</pre>
297
+ <p style="font-size:13px">Works when the OpenClaw gateway is connected in AgentDeck.</p>
298
+
299
+ <h2><span class="rank">4</span>Local Ollama / LM Studio / MLX <span class="tier">— free &amp; private; needs a capable model</span></h2>
300
+ <pre># Ollama (default port)
301
+ { "apme": { "judge": { "backend": "openai",
302
+ "endpoint": "http://127.0.0.1:11434/v1", "model": "qwen2.5-coder:32b" } } }</pre>
303
+ <p style="font-size:13px">Any local OpenAI-compatible server (Ollama :11434, LM Studio :1234, MLX, vLLM, llama.cpp). Realistic minimum is an <strong>8B-class instruct model</strong>; 30B-class recommended.</p>
304
+
305
+ <h2><span class="rank">5</span>Apple Intelligence <span class="tier">— free, on-device, basic screening only</span></h2>
306
+ <p style="font-size:13px">Available automatically when the AgentDeck macOS app runs with Apple Intelligence enabled (<code>backend: "foundationModels"</code>). Fine for a quick smoke check; the on-device model is small, so large changes may not fit — use one of the above for a thorough audit.</p>
307
+
308
+ <div class="optout">Not planning to use REVIEW? Nothing to do — the button stays, nothing runs in the background, and no popups will nag you. This page only appears when you press REVIEW without a judge.</div>
309
+ <footer>AgentDeck independent review · settings.json path: <code>~/.agentdeck/settings.json</code> (or the app's sandbox container) · details: docs/apme.md</footer>
310
+ </div></body></html>`;
311
+ }
312
+ function openInBrowser(path) {
313
+ const opener = process.platform === 'darwin' ? 'open'
314
+ : process.platform === 'win32' ? 'cmd'
315
+ : 'xdg-open';
316
+ const args = process.platform === 'win32' ? ['/c', 'start', '', path] : [path];
317
+ execFile(opener, args, { timeout: 5_000 }, () => { });
318
+ }
319
+ export async function runSessionReview(opts) {
320
+ const { sessionId, cwd, projectName } = opts;
321
+ if (isReviewRunning(sessionId))
322
+ return;
323
+ stateBySession.set(sessionId, { status: 'running', ts: Date.now() });
324
+ opts.onEvent({ type: 'review_status', sessionId, status: 'running' });
325
+ const fail = (message) => {
326
+ stateBySession.set(sessionId, { status: 'error', ts: Date.now() });
327
+ opts.onEvent({ type: 'review_status', sessionId, status: 'error', message });
328
+ debug('review', `review failed for ${sessionId}: ${message}`);
329
+ };
330
+ try {
331
+ // Judge preflight FIRST — the most common setup gap, and the one with an
332
+ // actionable fix. When no usable judge exists, open the setup guide in
333
+ // the browser (the same channel the report uses) instead of a bare error.
334
+ const judgeCfg = loadApmeConfig().judge;
335
+ const probe = await probeJudgeBackend(judgeCfg);
336
+ if (probe.status !== 'ready') {
337
+ try {
338
+ // Offer the user's already-running local servers first.
339
+ const { detectLocalJudgeProviders } = await import('./apme/judge-detect.js');
340
+ const detected = await detectLocalJudgeProviders().catch(() => []);
341
+ const dir = reviewsDir();
342
+ mkdirSync(dir, { recursive: true });
343
+ const guidePath = join(dir, 'review-judge-setup.html');
344
+ writeFileSync(guidePath, renderJudgeGuidanceHtml({
345
+ backend: judgeCfg.backend,
346
+ model: judgeCfg.model,
347
+ reason: probe.reason,
348
+ detected,
349
+ }));
350
+ openInBrowser(guidePath);
351
+ }
352
+ catch (err) {
353
+ logError(`[review] guidance write failed: ${String(err)}`);
354
+ }
355
+ return fail(`no usable judge (${judgeCfg.backend}: ${probe.reason ?? 'not ready'}) — setup guide opened in browser`);
356
+ }
357
+ if (!cwd)
358
+ return fail('session working directory unknown');
359
+ // Tier decides the diff budget and the prompt shape (basic = on-device
360
+ // FM relay with a small context; advanced = server/frontier judges).
361
+ const tier = reviewJudgeTier(judgeCfg.backend);
362
+ const delta = await collectDelta(cwd, tier === 'basic' ? BASIC_DIFF_BYTE_CAP : DIFF_BYTE_CAP);
363
+ if (!delta)
364
+ return fail(`not a git repository: ${cwd}`);
365
+ if (!delta.diff.trim() && delta.untracked.length === 0) {
366
+ return fail('working tree is clean — nothing to review');
367
+ }
368
+ const prompt = buildJudgePrompt(projectName, delta, tier, opts.recentActivity);
369
+ const result = await callJudgeWithMeta(prompt, judgeCfg);
370
+ const parsed = parseJudgeJson(result.text);
371
+ if (!parsed)
372
+ return fail(`judge returned unparseable output (${result.effectiveLabel})`);
373
+ const outcome = { ...parsed, backend: result.effectiveLabel };
374
+ // HTML report + browser open — the CLI tier's "popup".
375
+ let reportPath;
376
+ try {
377
+ const dir = reviewsDir();
378
+ mkdirSync(dir, { recursive: true });
379
+ reportPath = join(dir, `review-${Date.now()}-${projectName.replace(/[^a-zA-Z0-9_-]/g, '_').slice(0, 40)}.html`);
380
+ writeFileSync(reportPath, renderReviewHtml({
381
+ projectName,
382
+ sessionLabel: sessionId,
383
+ outcome,
384
+ deltaStat: delta.stat,
385
+ generatedAt: new Date(),
386
+ tierNote: judgeTierNote(judgeCfg.backend),
387
+ }));
388
+ openInBrowser(reportPath);
389
+ }
390
+ catch (err) {
391
+ logError(`[review] report write failed: ${String(err)}`);
392
+ }
393
+ stateBySession.set(sessionId, {
394
+ status: 'done', risk: outcome.risk, findings: outcome.findings.length, ts: Date.now(),
395
+ });
396
+ // Manual reviews and the automatic APME pipeline share one purpose — so
397
+ // record this into the same eval store, flagged manual_review.
398
+ try {
399
+ const score = outcome.risk === 'high' ? 0 : outcome.risk === 'medium' ? 0.5 : 1;
400
+ opts.recordEval?.({
401
+ sessionId, risk: outcome.risk, score,
402
+ summary: outcome.summary, findings: outcome.findings.length,
403
+ judgeModel: outcome.backend,
404
+ raw: JSON.stringify({ risk: outcome.risk, summary: outcome.summary, findings: outcome.findings }),
405
+ });
406
+ }
407
+ catch (err) {
408
+ logError(`[review] eval record failed: ${String(err)}`);
409
+ }
410
+ opts.onEvent({
411
+ type: 'review_result',
412
+ sessionId,
413
+ risk: outcome.risk,
414
+ findings: outcome.findings.length,
415
+ summary: outcome.summary,
416
+ ...(reportPath ? { reportPath } : {}),
417
+ });
418
+ debug('review', `review done for ${sessionId}: risk=${outcome.risk} findings=${outcome.findings.length} backend=${outcome.backend}`);
419
+ }
420
+ catch (err) {
421
+ fail(String(err));
422
+ }
423
+ }
424
+ /** Test helper. */
425
+ export function _resetReviewState() {
426
+ stateBySession.clear();
427
+ }
428
+ //# sourceMappingURL=review-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-runner.js","sourceRoot":"","sources":["../src/review-runner.ts"],"names":[],"mappings":"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"}
@@ -29,6 +29,14 @@ export interface EnrichedSession {
29
29
  /** Daemon-synthesized "what is this agent doing right now" one-liner (heuristic,
30
30
  * upgraded to a Foundation Models summary when available). Shared by X3 + TRMNL. */
31
31
  activity?: string;
32
+ /** Daemon-computed latest MILESTONE timeline row for this session (TIMELINE
33
+ * parity for glance devices — IPS10 cards render "HH:MM task • text" from
34
+ * these instead of their tiny reboot-empty on-device timeline ring). */
35
+ lastEventText?: string;
36
+ /** Resolved enclosing-task label for that row ("" / absent when none). */
37
+ lastEventTask?: string;
38
+ /** Host-local "HH:MM" of that row (boards are NTP-UTC or clockless). */
39
+ lastEventHm?: string;
32
40
  }
33
41
  /** Update push-channel cache (called from daemon-server when session_push_state arrives) */
34
42
  export declare function updatePushState(sessionId: string, state: string, modelName?: string, effortLevel?: string): void;
@@ -1 +1 @@
1
- {"version":3,"file":"session-aggregator.d.ts","sourceRoot":"","sources":["../src/session-aggregator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC5F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEpE,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;IACrC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,QAAQ,GAAG,eAAe,GAAG,cAAc,GAAG,aAAa,CAAC;IACzE,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,kHAAkH;IAClH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;yFACqF;IACrF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAaD,4FAA4F;AAC5F,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAIhH;AAED,wDAAwD;AACxD,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAUvH;AAED,uFAAuF;AACvF,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAG9D;AAoBD;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,YAAY,EAAE,EACxB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,YAAY,CAAC,EAAE,MAAM,EACrB,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,eAAe,EAAE,CAAC,CAsC5B;AAED;;;;;;GAMG;AACH,wBAAsB,yBAAyB,CAC7C,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,YAAY,CAAC,EAAE,MAAM,EACrB,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,eAAe,EAAE,CAAC,CAI5B"}
1
+ {"version":3,"file":"session-aggregator.d.ts","sourceRoot":"","sources":["../src/session-aggregator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC5F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEpE,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;IACrC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,QAAQ,GAAG,eAAe,GAAG,cAAc,GAAG,aAAa,CAAC;IACzE,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,kHAAkH;IAClH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;yFACqF;IACrF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;6EAEyE;IACzE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,0EAA0E;IAC1E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAaD,4FAA4F;AAC5F,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAIhH;AAED,wDAAwD;AACxD,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAUvH;AAED,uFAAuF;AACvF,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAG9D;AAoBD;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,YAAY,EAAE,EACxB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,YAAY,CAAC,EAAE,MAAM,EACrB,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,eAAe,EAAE,CAAC,CAsC5B;AAED;;;;;;GAMG;AACH,wBAAsB,yBAAyB,CAC7C,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,YAAY,CAAC,EAAE,MAAM,EACrB,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,eAAe,EAAE,CAAC,CAI5B"}
@@ -1 +1 @@
1
- {"version":3,"file":"session-aggregator.js","sourceRoot":"","sources":["../src/session-aggregator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-aggregator.js","sourceRoot":"","sources":["../src/session-aggregator.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"session-focus-relay.d.ts","sourceRoot":"","sources":["../src/session-focus-relay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAuB7D,MAAM,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;AAE7D,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,MAAM,CAAS;IAEvB,yEAAyE;IACzE,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAIjD,uCAAuC;IACvC,mBAAmB,IAAI,MAAM,GAAG,IAAI;IAIpC,gEAAgE;IAChE,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAqB9B,+BAA+B;IAC/B,OAAO,IAAI,IAAI;IAaf,uEAAuE;IACvE,YAAY,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO;IAYzC,2BAA2B;IAC3B,IAAI,IAAI,IAAI;IAKZ,OAAO,CAAC,OAAO;CAkChB"}
1
+ {"version":3,"file":"session-focus-relay.d.ts","sourceRoot":"","sources":["../src/session-focus-relay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAuB7D,MAAM,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;AAE7D,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,MAAM,CAAS;IAEvB,yEAAyE;IACzE,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAIjD,uCAAuC;IACvC,mBAAmB,IAAI,MAAM,GAAG,IAAI;IAIpC,gEAAgE;IAChE,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAqB9B,+BAA+B;IAC/B,OAAO,IAAI,IAAI;IAaf,uEAAuE;IACvE,YAAY,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO;IAYzC,2BAA2B;IAC3B,IAAI,IAAI,IAAI;IAKZ,OAAO,CAAC,OAAO;CAwChB"}
@@ -108,7 +108,13 @@ export class SessionFocusRelay {
108
108
  const evt = JSON.parse(raw.toString());
109
109
  if (RELAYED_EVENTS.has(evt.type)) {
110
110
  debug(TAG, `Relay ${evt.type} from session ${sessionId}`);
111
- this.onEvent?.(evt);
111
+ // prompt_options used to be source-less, allowing a late event from
112
+ // the previous focus to become buttons for the newly selected session.
113
+ // Stamp the captured relay identity before it leaves this boundary.
114
+ const tagged = evt.type === 'prompt_options' && sessionId
115
+ ? { ...evt, sessionId, focusedSessionId: sessionId }
116
+ : evt;
117
+ this.onEvent?.(tagged);
112
118
  }
113
119
  }
114
120
  catch {
@@ -1 +1 @@
1
- {"version":3,"file":"session-focus-relay.js","sourceRoot":"","sources":["../src/session-focus-relay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,SAAS,MAAM,IAAI,CAAC;AAC3B,OAAO,EAAE,UAAU,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEzE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,MAAM,GAAG,GAAG,aAAa,CAAC;AAE1B,4DAA4D;AAC5D,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC;IAC7B,cAAc;IACd,gBAAgB;IAChB,cAAc;CACf,CAAC,CAAC;AAEH,6DAA6D;AAC7D,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,SAAS;IACT,WAAW;IACX,QAAQ;IACR,eAAe;IACf,aAAa;IACb,iBAAiB;IACjB,aAAa;CACd,CAAC,CAAC;AAIH,MAAM,OAAO,iBAAiB;IACpB,EAAE,GAAqB,IAAI,CAAC;IAC5B,gBAAgB,GAAkB,IAAI,CAAC;IACvC,WAAW,GAAkB,IAAI,CAAC;IAClC,OAAO,GAA6B,IAAI,CAAC;IACzC,MAAM,GAAG,KAAK,CAAC;IAEvB,yEAAyE;IACzE,eAAe,CAAC,OAA0B;QACxC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,uCAAuC;IACvC,mBAAmB;QACjB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED,gEAAgE;IAChE,KAAK,CAAC,SAAiB;QACrB,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,IAAI,IAAI,CAAC,EAAE,EAAE,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YAClF,KAAK,CAAC,GAAG,EAAE,sBAAsB,SAAS,EAAE,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,CAAC;QAEf,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,IAAI,CAAC,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC;QACnF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,KAAK,CAAC,GAAG,EAAE,WAAW,SAAS,yBAAyB,CAAC,CAAC;YAC1D,OAAO;QACT,CAAC;QAED,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;QAClC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;QAChC,KAAK,CAAC,GAAG,EAAE,oBAAoB,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACtE,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAED,+BAA+B;IAC/B,OAAO;QACL,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,CAAC,EAAE,CAAC,kBAAkB,EAAE,CAAC;YAC7B,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;QACjB,CAAC;QACD,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,KAAK,CAAC,GAAG,EAAE,qBAAqB,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,uEAAuE;IACvE,YAAY,CAAC,GAAkB;QAC7B,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YAChF,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,KAAK,CAAC,GAAG,EAAE,WAAW,GAAG,CAAC,IAAI,cAAc,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;QACrE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,2BAA2B;IAC3B,IAAI;QACF,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAEO,OAAO;QACb,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO;QAE7C,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,kBAAkB,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAExC,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YACjB,KAAK,CAAC,GAAG,EAAE,wBAAwB,SAAS,YAAY,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC9E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAoB,EAAE,EAAE;YACxC,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS;gBAAE,OAAO;YAEhD,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAgB,CAAC;gBACtD,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBACjC,KAAK,CAAC,GAAG,EAAE,SAAS,GAAG,CAAC,IAAI,iBAAiB,SAAS,EAAE,CAAC,CAAC;oBAC1D,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,2BAA2B;YAC7B,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAClB,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;gBACxC,KAAK,CAAC,GAAG,EAAE,WAAW,SAAS,YAAY,CAAC,CAAC;gBAC7C,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;YACjB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC3B,CAAC;CACF"}
1
+ {"version":3,"file":"session-focus-relay.js","sourceRoot":"","sources":["../src/session-focus-relay.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,9 @@ export declare function getCandidateDataDirs(): string[];
25
25
  * generate a shell snippet with the same discovery order.
26
26
  */
27
27
  export declare function getCandidateDaemonJsonPaths(): string[];
28
+ /** Where THIS process persists the device timeline. Reads may come from any
29
+ * candidate dir (see `latestTimelinePath`), but the daemon writes only here. */
30
+ export declare function getOwnTimelineFile(): string;
28
31
  export declare const DAEMON_DEFAULT_PORT = 9120;
29
32
  /** Documented daemon port window (docs/daemon.md) — scanned for cross-implementation discovery. */
30
33
  export declare const DAEMON_PORT_WINDOW: readonly [number, number];
@@ -1 +1 @@
1
- {"version":3,"file":"session-registry.d.ts","sourceRoot":"","sources":["../src/session-registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-registry.d.ts","sourceRoot":"","sources":["../src/session-registry.ts"],"names":[],"mappings":"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"}
@@ -54,6 +54,9 @@ export function getCandidateDaemonJsonPaths() {
54
54
  return getCandidateDataDirs().map((d) => join(d, 'daemon.json'));
55
55
  }
56
56
  function getSessionsFile() { return join(getDataDir(), 'sessions.json'); }
57
+ /** Where THIS process persists the device timeline. Reads may come from any
58
+ * candidate dir (see `latestTimelinePath`), but the daemon writes only here. */
59
+ export function getOwnTimelineFile() { return join(getDataDir(), 'timeline.json'); }
57
60
  function getDaemonFile() { return join(getDataDir(), 'daemon.json'); }
58
61
  export const DAEMON_DEFAULT_PORT = 9120;
59
62
  const BASE_PORT = 9120;