@agentdeck/bridge 1.0.24 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/README.md +14 -6
  2. package/assets/fonts/NOTICE-PocketSansWorld.md +10 -0
  3. package/assets/fonts/OFL-PocketSansWorld.txt +93 -0
  4. package/assets/fonts/PocketSansWorld_12.cpfont +0 -0
  5. package/assets/fonts/pocket-sans-world.manifest.json +49 -0
  6. package/assets/learning/LICENSE-CC-BY-SA-4.0.txt +10 -0
  7. package/assets/learning/NOTICE.md +33 -0
  8. package/assets/learning/jp-n3-ko.manifest.json +27 -0
  9. package/assets/learning/jp-n3-ko.pdl +0 -0
  10. package/dist/adapters/openclaw.d.ts +74 -4
  11. package/dist/adapters/openclaw.d.ts.map +1 -1
  12. package/dist/adapters/openclaw.js +235 -43
  13. package/dist/adapters/openclaw.js.map +1 -1
  14. package/dist/agent-cli-diagnostics.d.ts +20 -0
  15. package/dist/agent-cli-diagnostics.d.ts.map +1 -0
  16. package/dist/agent-cli-diagnostics.js +100 -0
  17. package/dist/agent-cli-diagnostics.js.map +1 -0
  18. package/dist/apme/adapters/openclaw-hook.d.ts +38 -10
  19. package/dist/apme/adapters/openclaw-hook.d.ts.map +1 -1
  20. package/dist/apme/adapters/openclaw-hook.js +181 -37
  21. package/dist/apme/adapters/openclaw-hook.js.map +1 -1
  22. package/dist/apme/collector.d.ts +55 -2
  23. package/dist/apme/collector.d.ts.map +1 -1
  24. package/dist/apme/collector.js +324 -37
  25. package/dist/apme/collector.js.map +1 -1
  26. package/dist/apme/dashboard-html.d.ts.map +1 -1
  27. package/dist/apme/dashboard-html.js +275 -35
  28. package/dist/apme/dashboard-html.js.map +1 -1
  29. package/dist/apme/http.d.ts.map +1 -1
  30. package/dist/apme/http.js +33 -5
  31. package/dist/apme/http.js.map +1 -1
  32. package/dist/apme/index.d.ts.map +1 -1
  33. package/dist/apme/index.js +6 -2
  34. package/dist/apme/index.js.map +1 -1
  35. package/dist/apme/pareto.d.ts +2 -1
  36. package/dist/apme/pareto.d.ts.map +1 -1
  37. package/dist/apme/pareto.js +15 -4
  38. package/dist/apme/pareto.js.map +1 -1
  39. package/dist/apme/recommend.d.ts +24 -1
  40. package/dist/apme/recommend.d.ts.map +1 -1
  41. package/dist/apme/recommend.js +43 -7
  42. package/dist/apme/recommend.js.map +1 -1
  43. package/dist/apme/store.d.ts +47 -1
  44. package/dist/apme/store.d.ts.map +1 -1
  45. package/dist/apme/store.js +397 -99
  46. package/dist/apme/store.js.map +1 -1
  47. package/dist/bridge-core.d.ts +25 -1
  48. package/dist/bridge-core.d.ts.map +1 -1
  49. package/dist/bridge-core.js +50 -9
  50. package/dist/bridge-core.js.map +1 -1
  51. package/dist/card-feed.d.ts +46 -1
  52. package/dist/card-feed.d.ts.map +1 -1
  53. package/dist/card-feed.js +166 -6
  54. package/dist/card-feed.js.map +1 -1
  55. package/dist/cli.d.ts +56 -0
  56. package/dist/cli.d.ts.map +1 -1
  57. package/dist/cli.js +442 -34
  58. package/dist/cli.js.map +1 -1
  59. package/dist/codex-rate-limits-live.d.ts +180 -10
  60. package/dist/codex-rate-limits-live.d.ts.map +1 -1
  61. package/dist/codex-rate-limits-live.js +475 -22
  62. package/dist/codex-rate-limits-live.js.map +1 -1
  63. package/dist/daemon-build-identity.d.ts +124 -0
  64. package/dist/daemon-build-identity.d.ts.map +1 -0
  65. package/dist/daemon-build-identity.js +310 -0
  66. package/dist/daemon-build-identity.js.map +1 -0
  67. package/dist/daemon-server.d.ts +34 -6
  68. package/dist/daemon-server.d.ts.map +1 -1
  69. package/dist/daemon-server.js +876 -109
  70. package/dist/daemon-server.js.map +1 -1
  71. package/dist/daemon-takeover.d.ts +11 -0
  72. package/dist/daemon-takeover.d.ts.map +1 -1
  73. package/dist/daemon-takeover.js +62 -17
  74. package/dist/daemon-takeover.js.map +1 -1
  75. package/dist/daemon-ws-client.d.ts +1 -0
  76. package/dist/daemon-ws-client.d.ts.map +1 -1
  77. package/dist/daemon-ws-client.js +25 -16
  78. package/dist/daemon-ws-client.js.map +1 -1
  79. package/dist/daemon.js +1 -1
  80. package/dist/daemon.js.map +1 -1
  81. package/dist/esp32-serial.d.ts +18 -0
  82. package/dist/esp32-serial.d.ts.map +1 -1
  83. package/dist/esp32-serial.js +23 -1
  84. package/dist/esp32-serial.js.map +1 -1
  85. package/dist/font-pack.d.ts +15 -0
  86. package/dist/font-pack.d.ts.map +1 -0
  87. package/dist/font-pack.js +75 -0
  88. package/dist/font-pack.js.map +1 -0
  89. package/dist/glance-frame.d.ts.map +1 -1
  90. package/dist/glance-frame.js +5 -1
  91. package/dist/glance-frame.js.map +1 -1
  92. package/dist/hook-codex-sessions.d.ts +3 -1
  93. package/dist/hook-codex-sessions.d.ts.map +1 -1
  94. package/dist/hook-codex-sessions.js +27 -7
  95. package/dist/hook-codex-sessions.js.map +1 -1
  96. package/dist/http-auth-gate.d.ts.map +1 -1
  97. package/dist/http-auth-gate.js +9 -1
  98. package/dist/http-auth-gate.js.map +1 -1
  99. package/dist/index.js +2 -2
  100. package/dist/index.js.map +1 -1
  101. package/dist/learning-pack.d.ts +24 -0
  102. package/dist/learning-pack.d.ts.map +1 -0
  103. package/dist/learning-pack.js +125 -0
  104. package/dist/learning-pack.js.map +1 -0
  105. package/dist/legacy-rearm-ledger.d.ts +56 -0
  106. package/dist/legacy-rearm-ledger.d.ts.map +1 -0
  107. package/dist/legacy-rearm-ledger.js +66 -0
  108. package/dist/legacy-rearm-ledger.js.map +1 -0
  109. package/dist/mdns.d.ts +33 -0
  110. package/dist/mdns.d.ts.map +1 -1
  111. package/dist/mdns.js +92 -3
  112. package/dist/mdns.js.map +1 -1
  113. package/dist/openclaw-session.d.ts.map +1 -1
  114. package/dist/openclaw-session.js +13 -0
  115. package/dist/openclaw-session.js.map +1 -1
  116. package/dist/openclaw-timeline-feed.d.ts +84 -0
  117. package/dist/openclaw-timeline-feed.d.ts.map +1 -0
  118. package/dist/openclaw-timeline-feed.js +162 -0
  119. package/dist/openclaw-timeline-feed.js.map +1 -0
  120. package/dist/openclaw-transcript-timeline.d.ts +103 -0
  121. package/dist/openclaw-transcript-timeline.d.ts.map +1 -0
  122. package/dist/openclaw-transcript-timeline.js +328 -0
  123. package/dist/openclaw-transcript-timeline.js.map +1 -0
  124. package/dist/pairing-knocks.d.ts +80 -0
  125. package/dist/pairing-knocks.d.ts.map +1 -0
  126. package/dist/pairing-knocks.js +312 -0
  127. package/dist/pairing-knocks.js.map +1 -0
  128. package/dist/passive-observer.d.ts +21 -1
  129. package/dist/passive-observer.d.ts.map +1 -1
  130. package/dist/passive-observer.js +37 -3
  131. package/dist/passive-observer.js.map +1 -1
  132. package/dist/pixoo/micro-glyphs.d.ts +4 -0
  133. package/dist/pixoo/micro-glyphs.d.ts.map +1 -1
  134. package/dist/pixoo/micro-glyphs.js +29 -0
  135. package/dist/pixoo/micro-glyphs.js.map +1 -1
  136. package/dist/pixoo/pixoo-font.d.ts.map +1 -1
  137. package/dist/pixoo/pixoo-font.js +3 -1
  138. package/dist/pixoo/pixoo-font.js.map +1 -1
  139. package/dist/pixoo/pixoo-renderer.d.ts +1 -1
  140. package/dist/pixoo/pixoo-renderer.d.ts.map +1 -1
  141. package/dist/pixoo/pixoo-renderer.js +17 -2
  142. package/dist/pixoo/pixoo-renderer.js.map +1 -1
  143. package/dist/pty-manager.d.ts +9 -0
  144. package/dist/pty-manager.d.ts.map +1 -1
  145. package/dist/pty-manager.js +63 -4
  146. package/dist/pty-manager.js.map +1 -1
  147. package/dist/relayed-usage.d.ts +98 -0
  148. package/dist/relayed-usage.d.ts.map +1 -0
  149. package/dist/relayed-usage.js +103 -0
  150. package/dist/relayed-usage.js.map +1 -0
  151. package/dist/session-aggregator.d.ts +3 -0
  152. package/dist/session-aggregator.d.ts.map +1 -1
  153. package/dist/session-aggregator.js.map +1 -1
  154. package/dist/session-registry.d.ts +1 -0
  155. package/dist/session-registry.d.ts.map +1 -1
  156. package/dist/surface-protocol.d.ts +84 -0
  157. package/dist/surface-protocol.d.ts.map +1 -0
  158. package/dist/surface-protocol.js +237 -0
  159. package/dist/surface-protocol.js.map +1 -0
  160. package/dist/timeline-store.d.ts +1 -1
  161. package/dist/timeline-store.d.ts.map +1 -1
  162. package/dist/timeline-store.js +16 -1
  163. package/dist/timeline-store.js.map +1 -1
  164. package/dist/tui/dashboard.d.ts.map +1 -1
  165. package/dist/tui/dashboard.js +8 -1
  166. package/dist/tui/dashboard.js.map +1 -1
  167. package/dist/tui/renderer.d.ts.map +1 -1
  168. package/dist/tui/renderer.js +35 -0
  169. package/dist/tui/renderer.js.map +1 -1
  170. package/dist/weather-config.d.ts +17 -0
  171. package/dist/weather-config.d.ts.map +1 -0
  172. package/dist/weather-config.js +54 -0
  173. package/dist/weather-config.js.map +1 -0
  174. package/dist/weather.d.ts +44 -4
  175. package/dist/weather.d.ts.map +1 -1
  176. package/dist/weather.js +223 -15
  177. package/dist/weather.js.map +1 -1
  178. package/dist/ws-server.d.ts +18 -0
  179. package/dist/ws-server.d.ts.map +1 -1
  180. package/dist/ws-server.js +95 -7
  181. package/dist/ws-server.js.map +1 -1
  182. package/fm-helper/AgentDeckFMHelper.swift +51 -5
  183. package/package.json +4 -3
  184. package/src/timebox/sync_ble.py +35 -16
@@ -0,0 +1,103 @@
1
+ import { mergeRelayedSessionUsage } from './usage-event.js';
2
+ import { pickBestCodexRateLimits } from './codex-rate-limits-live.js';
3
+ /**
4
+ * Decide what the daemon broadcasts when a session bridge relays a
5
+ * `usage_update`, and keep that decision out of the callback it used to be
6
+ * inlined in.
7
+ *
8
+ * A session bridge broadcasts usage on EVERY state change. In daemon-first mode
9
+ * its snapshot usually has no model context, so the Claude quota model gate
10
+ * (`isClaudeSubscriptionModel`) yields no percents and the event carries
11
+ * `usageStale=true`. Forwarding that bare event verbatim clobbered the daemon's
12
+ * own authoritative aggregate on the dashboard: the Claude gauge blanked to
13
+ * "No usage data" on every state tick (the Codex gauge, which ignores global
14
+ * staleness, stayed put — hence the Claude-only flicker).
15
+ *
16
+ * Suppressing the relay instead is NOT an option: `usage_update` is the ONLY
17
+ * carrier of per-session tokens / cost / duration (`state_update` has none of
18
+ * those fields), and the daemon's own `buildUsage()` reads a UsageTracker that
19
+ * no PTY ever feeds, so its session half is zeros. Dropping the event would
20
+ * blank the session numbers for every focus that legitimately carries no Claude
21
+ * quota — Codex, OpenCode, API billing.
22
+ *
23
+ * So the event is split by HALF, not by event: the ACCOUNT half (quota, scoped
24
+ * caps, extra usage, subscriptions, Codex/Ollama, `usageStale`) comes from the
25
+ * daemon's authoritative aggregate, the SESSION half from the relay.
26
+ *
27
+ * ## Why the Claude-bearing branch is not just the same merge
28
+ *
29
+ * When the relay carries Claude percentages the event already holds the account
30
+ * half the merge exists to protect, so it goes out as-is — except for
31
+ * `codexRateLimits`, which is the one account-half field a session bridge
32
+ * cannot compute as well as the daemon. A bridge keeps host processes off by
33
+ * design, so it has only the passive rollout read; the daemon additionally
34
+ * holds a throttled `codex app-server` reading. They agree whenever a
35
+ * plan-matching rollout exists. When none does, the daemon holds a live
36
+ * snapshot with real windows while the bridge holds a mismatched one that
37
+ * `normalizeCodexRateLimits` voids to a windowless block — and successive
38
+ * events then alternated between a real Codex window and a voided one, which
39
+ * reads as a flickering/blanking Codex gauge on every surface (issue #253).
40
+ *
41
+ * The two blocks are RECONCILED rather than one overwriting the other, by the
42
+ * same `pickBestCodexRateLimits` rule the daemon already applies to its own two
43
+ * readings. Both inputs arrive already normalized against the same `auth.json`
44
+ * by their own producer, so no account tier is read here: voiding has already
45
+ * stripped `capturedAt` from a mismatched block, which is exactly what makes it
46
+ * lose to a stamped one under plan-agnostic newest-wins. That matters in both
47
+ * directions — the daemon's block is normally the better one, but a bridge that
48
+ * just read a newer rollout than the daemon's last build still wins on recency.
49
+ *
50
+ * Recency rules WITHIN a limit family, not across one, and this call site is
51
+ * where that distinction bites hardest. A bridge has only the passive read, so
52
+ * once the account's weekly quota is exhausted its block is the per-model pool
53
+ * wearing the account's `limit_id` — and always seconds old, because the rollout
54
+ * is appended every couple of seconds while Codex works. So a cross-family
55
+ * disagreement is resolved toward the daemon's block rather than by age.
56
+ *
57
+ * But only when the daemon actually HAS that answer. `lastBuiltCodexRateLimits`
58
+ * is the daemon's last published value, which is the app-server reading only
59
+ * when it won its own pick — a daemon whose PATH carries no `codex` binary holds
60
+ * nothing but a rollout read, exactly like the bridge. Deciding a cross-family
61
+ * disagreement between two rollout reads by which process is holding one is not
62
+ * a rule, and with the roles reversed (the daemon on the mislabelled pool line,
63
+ * the bridge on the account line) it would invert the fix it exists to deliver.
64
+ * So `ownLiveFamilyAuthorityExpiresAtMs` gates the guard — an instant, judged
65
+ * against this event's clock, because the flag is produced by a usage build and
66
+ * consumed here later; without it the tie falls back to recency as before. A second bound applies whenever the guard does fire: a
67
+ * block with no weekly window — the synthetic credit gauge, a voided snapshot —
68
+ * can never reject anything, so a windowless block cannot displace a windowed
69
+ * one. Inside one family nothing changes: the fresher rollout still wins.
70
+ *
71
+ * ## Why `buildOwnUsage` is a thunk
72
+ *
73
+ * `BridgeCore.buildUsage()` is the call that arms the throttled `codex
74
+ * app-server` spawn gate and re-derives the whole account half. It must run on
75
+ * the merged branch only — the Claude-bearing branch is the daemon's most
76
+ * flicker-sensitive path, and its entire history is about not clobbering the
77
+ * dashboard. Passing it as a thunk puts that in the signature instead of in a
78
+ * comment, so a test can assert it was never called.
79
+ *
80
+ * `ownCodexRateLimits` is the block from the daemon's own last built usage
81
+ * event — a remembered value, never a fresh build, so reading it costs nothing
82
+ * and cannot arm the spawn. Null before the daemon has built one, in which case
83
+ * the relayed block stands, which is the pre-#253 behaviour.
84
+ */
85
+ export function resolveRelayedUsageEvent(input) {
86
+ const { relayed, ownCodexRateLimits, ownLiveFamilyAuthorityExpiresAtMs = null, nowMs = Date.now(), buildOwnUsage, } = input;
87
+ const hasClaudeData = relayed.fiveHourPercent != null || relayed.sevenDayPercent != null;
88
+ if (!hasClaudeData) {
89
+ return mergeRelayedSessionUsage(buildOwnUsage(), relayed);
90
+ }
91
+ const relayedCodex = (relayed.codexRateLimits ?? null);
92
+ const best = pickBestCodexRateLimits(relayedCodex, ownCodexRateLimits, undefined, nowMs, {
93
+ liveOwnsFamilyAuthority: ownLiveFamilyAuthorityExpiresAtMs != null && nowMs < ownLiveFamilyAuthorityExpiresAtMs,
94
+ });
95
+ // Identity, not deep-equality: the picker returns one of its two arguments, so
96
+ // an unchanged pick must leave the relayed event object untouched — including
97
+ // an absent `codexRateLimits` key, which under retain-on-absent merging is
98
+ // "no information" and must not become an explicit `undefined`.
99
+ if (best === relayedCodex)
100
+ return relayed;
101
+ return { ...relayed, codexRateLimits: best ?? undefined };
102
+ }
103
+ //# sourceMappingURL=relayed-usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relayed-usage.js","sourceRoot":"","sources":["../src/relayed-usage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAEtE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiFG;AACH,MAAM,UAAU,wBAAwB,CAAC,KAaxC;IACC,MAAM,EACJ,OAAO,EACP,kBAAkB,EAClB,iCAAiC,GAAG,IAAI,EACxC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,EAClB,aAAa,GACd,GAAG,KAAK,CAAC;IAEV,MAAM,aAAa,GAAG,OAAO,CAAC,eAAe,IAAI,IAAI,IAAI,OAAO,CAAC,eAAe,IAAI,IAAI,CAAC;IACzF,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,wBAAwB,CAAC,aAAa,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,YAAY,GAAG,CAAC,OAAO,CAAC,eAAe,IAAI,IAAI,CAA2B,CAAC;IACjF,MAAM,IAAI,GAAG,uBAAuB,CAAC,YAAY,EAAE,kBAAkB,EAAE,SAAS,EAAE,KAAK,EAAE;QACvF,uBAAuB,EACrB,iCAAiC,IAAI,IAAI,IAAI,KAAK,GAAG,iCAAiC;KACzF,CAAC,CAAC;IACH,+EAA+E;IAC/E,8EAA8E;IAC9E,2EAA2E;IAC3E,gEAAgE;IAChE,IAAI,IAAI,KAAK,YAAY;QAAE,OAAO,OAAgC,CAAC;IACnE,OAAO,EAAE,GAAI,OAAiC,EAAE,eAAe,EAAE,IAAI,IAAI,SAAS,EAAE,CAAC;AACvF,CAAC"}
@@ -25,6 +25,9 @@ export interface EnrichedSession {
25
25
  contextPercent?: number;
26
26
  totalTokens?: number;
27
27
  question?: string;
28
+ /** Supporting lines under `question` (reason approval is required, cwd,
29
+ * originating session key). Mirrors `SessionInfo.questionDetail`. */
30
+ questionDetail?: string;
28
31
  requestId?: string;
29
32
  promptType?: 'yes_no' | 'yes_no_always' | 'multi_select' | 'diff_review';
30
33
  options?: PromptOption[];
@@ -1 +1 @@
1
- {"version":3,"file":"session-aggregator.d.ts","sourceRoot":"","sources":["../src/session-aggregator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-aggregator.d.ts","sourceRoot":"","sources":["../src/session-aggregator.ts"],"names":[],"mappings":"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"}
@@ -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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"}
@@ -171,6 +171,7 @@ export declare function probeDaemonHealth(port: number): Promise<{
171
171
  mode?: string;
172
172
  pid?: number;
173
173
  isSwift?: boolean;
174
+ build?: string;
174
175
  sameSocketControl?: boolean;
175
176
  pairingToken?: string;
176
177
  posture?: {
@@ -1 +1 @@
1
- {"version":3,"file":"session-registry.d.ts","sourceRoot":"","sources":["../src/session-registry.ts"],"names":[],"mappings":"AAQA,OAAO,EAAsB,KAAK,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAExE,6DAA6D;AAC7D,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAe/C;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,IAAI,MAAM,EAAE,CAEtD;AAGD;iFACiF;AACjF,wBAAgB,kBAAkB,IAAI,MAAM,CAAgD;AAE5F,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,sDAAsD;AACtD,eAAO,MAAM,0BAA0B,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAgB,CAAC;AAElF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,GAAE,MAAM,GAAG,SAA6C,GAC1D,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAU3B;AAED,kEAAkE;AAClE,wBAAgB,yBAAyB,CACvC,MAAM,GAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAsB,GACrD,OAAO,CAET;AAED;;;;;yEAKyE;AACzE,wBAAgB,gBAAgB,IAAI,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAE5D;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB;qEACiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAyCD,8BAA8B;AAC9B,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOnD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,EAChD,OAAO,EAAE,MAAM,EACf,UAAU,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAwB,GACpD,OAAO,CAKT;AAOD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAOlD;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAO3C;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,GAAG,MAAM,CAAC,GAAG,IAAI,CASnF;AAED,wBAAgB,UAAU,IAAI,YAAY,EAAE,CAQ3C;AAED,mDAAmD;AACnD,wBAAgB,kBAAkB,IAAI,YAAY,GAAG,IAAI,CAGxD;AAqBD,wBAAsB,iBAAiB,CAAC,IAAI,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAe3F;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,MAAM,CAWR;AAED,sDAAsD;AACtD,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAWtD;AAID,gEAAgE;AAChE,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAOtD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAuB1D;AAED;wEACwE;AACxE,wBAAgB,gBAAgB,IAAI,IAAI,CAWvC;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,IAAI,UAAU,GAAG,IAAI,CAmBlD;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;CAAE,GAAG,IAAI,CAAC,CAiBvO;AAED;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,GAAE,WAAW,CAAC,MAAM,CAAa,EACrC,MAAM,GAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAsB,GACrD,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;CAAE,CAAC,CAAC,CAU9F;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAOxF;AAcD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAO1F;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBjE;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAgBrE;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,MAAM,GAAG,IAAI,CAU9C;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,CAAC,EAAE;IACL,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IACvG,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,KAAK,kBAAkB,CAAC;CACpE,GACA,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAAC,CAqClF;AAID,+DAA+D;AAC/D,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,kFAAkF;AAClF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAYnH;AAED,+DAA+D;AAC/D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,4EAA4E;AAC5E,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAY1E;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IAClG,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IACrF,QAAQ,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC,CAAC;IAC5G,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EAC9E,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,OAAO,CAAA;CAAE,CAYtF;AAID;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAIjE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,EAClE,IAAI,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAChC,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CA4E9B"}
1
+ {"version":3,"file":"session-registry.d.ts","sourceRoot":"","sources":["../src/session-registry.ts"],"names":[],"mappings":"AAQA,OAAO,EAAsB,KAAK,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAExE,6DAA6D;AAC7D,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAe/C;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,IAAI,MAAM,EAAE,CAEtD;AAGD;iFACiF;AACjF,wBAAgB,kBAAkB,IAAI,MAAM,CAAgD;AAE5F,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,sDAAsD;AACtD,eAAO,MAAM,0BAA0B,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAgB,CAAC;AAElF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,GAAE,MAAM,GAAG,SAA6C,GAC1D,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAU3B;AAED,kEAAkE;AAClE,wBAAgB,yBAAyB,CACvC,MAAM,GAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAsB,GACrD,OAAO,CAET;AAED;;;;;yEAKyE;AACzE,wBAAgB,gBAAgB,IAAI,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAE5D;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB;qEACiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAyCD,8BAA8B;AAC9B,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOnD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,EAChD,OAAO,EAAE,MAAM,EACf,UAAU,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAwB,GACpD,OAAO,CAKT;AAOD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAOlD;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAO3C;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,GAAG,MAAM,CAAC,GAAG,IAAI,CASnF;AAED,wBAAgB,UAAU,IAAI,YAAY,EAAE,CAQ3C;AAED,mDAAmD;AACnD,wBAAgB,kBAAkB,IAAI,YAAY,GAAG,IAAI,CAGxD;AAqBD,wBAAsB,iBAAiB,CAAC,IAAI,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAe3F;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,MAAM,CAWR;AAED,sDAAsD;AACtD,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAWtD;AAID,gEAAgE;AAChE,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAOtD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAuB1D;AAED;wEACwE;AACxE,wBAAgB,gBAAgB,IAAI,IAAI,CAWvC;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,IAAI,UAAU,GAAG,IAAI,CAmBlD;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;CAAE,GAAG,IAAI,CAAC,CAiBvP;AAED;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,GAAE,WAAW,CAAC,MAAM,CAAa,EACrC,MAAM,GAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAsB,GACrD,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;CAAE,CAAC,CAAC,CAU9F;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAOxF;AAcD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAO1F;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBjE;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAgBrE;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,MAAM,GAAG,IAAI,CAU9C;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,CAAC,EAAE;IACL,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IACvG,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,KAAK,kBAAkB,CAAC;CACpE,GACA,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAAC,CAqClF;AAID,+DAA+D;AAC/D,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,kFAAkF;AAClF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAYnH;AAED,+DAA+D;AAC/D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,4EAA4E;AAC5E,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAY1E;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IAClG,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IACrF,QAAQ,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC,CAAC;IAC5G,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EAC9E,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,OAAO,CAAA;CAAE,CAYtF;AAID;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAIjE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,EAClE,IAAI,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAChC,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CA4E9B"}
@@ -0,0 +1,84 @@
1
+ export declare const SURFACE_PROTOCOL_MAJOR: 1;
2
+ export declare const PORTABLE_READER_PROFILE: "portable-reader/v1";
3
+ export declare const OTA_RESUME_PARTIAL_CAPABILITY: "ota.resume-206";
4
+ export declare const AGENTDECK_FIRMWARE_PRODUCT_ID: "dev.agentdeck.dashboard-firmware";
5
+ export declare const POCKET_DAILY_PRODUCT_ID: "io.pocketdaily.reader";
6
+ export declare const SURFACE_SERVER_VERSION: string;
7
+ declare const PROFILE_CAPABILITIES: {
8
+ readonly 'dashboard-live/v1': Set<string>;
9
+ readonly 'companion-control/v1': Set<string>;
10
+ readonly "portable-reader/v1": Set<string>;
11
+ readonly 'display-only/v1': Set<string>;
12
+ };
13
+ export type SurfaceProfileId = keyof typeof PROFILE_CAPABILITIES;
14
+ export interface SurfaceIdentity {
15
+ protocol: 1;
16
+ profile: SurfaceProfileId;
17
+ clientId: string;
18
+ clientVersion: string;
19
+ productId: string;
20
+ capabilities: string[];
21
+ board: string;
22
+ updateChannel: string;
23
+ }
24
+ export interface SurfaceOffer {
25
+ protocol?: unknown;
26
+ clientId?: unknown;
27
+ clientVersion?: unknown;
28
+ productId?: unknown;
29
+ profiles?: unknown;
30
+ }
31
+ export interface SurfaceWelcome {
32
+ type: 'surface_welcome';
33
+ protocol: 1;
34
+ profile: SurfaceProfileId;
35
+ capabilities: string[];
36
+ serverVersion: string;
37
+ }
38
+ export interface SurfaceNegotiation {
39
+ clientId: string;
40
+ clientVersion: string;
41
+ productId: string;
42
+ profile: SurfaceProfileId;
43
+ capabilities: string[];
44
+ welcome: SurfaceWelcome;
45
+ }
46
+ export declare class SurfaceProtocolError extends Error {
47
+ readonly status: number;
48
+ readonly code: string;
49
+ constructor(status: number, code: string, message: string);
50
+ }
51
+ type HeaderRecord = Record<string, string | string[] | undefined>;
52
+ export interface SurfaceOtaIdentity {
53
+ productId: string;
54
+ board: string;
55
+ updateChannel: string;
56
+ }
57
+ /** Validate an OTA namespace independently of an HTTP request. Staging and
58
+ * serving both call this so a product-aware image can never fall back to a
59
+ * board-only namespace. */
60
+ export declare function validateSurfaceOtaIdentity(identity: SurfaceOtaIdentity): SurfaceOtaIdentity;
61
+ /** Parse the all-or-nothing HTTP Surface declaration. No Surface headers is
62
+ * the legacy baseline; one or more headers means all eight must be valid. */
63
+ export declare function parseHttpSurfaceIdentity(headers: HeaderRecord, requiredCapability?: string): SurfaceIdentity | undefined;
64
+ /** Select the resumable OTA response shape without guessing from a client
65
+ * version. Legacy clients append `?from=` bodies but only accept status 200;
66
+ * negotiated clients explicitly opt into the standard 206 response. */
67
+ export declare function pullOtaResponseStatus(from: number, identity: Pick<SurfaceIdentity, 'capabilities'> | undefined): 200 | 206;
68
+ /** A product-aware request may repeat the tuple in the query, but repetition
69
+ * is correlation, not override: every supplied member must match the headers. */
70
+ export declare function validateSurfaceQueryTuple(identity: SurfaceIdentity, params: URLSearchParams): void;
71
+ export declare function negotiateSurface(offer: SurfaceOffer): SurfaceNegotiation;
72
+ export declare function surfaceErrorBody(error: SurfaceProtocolError): {
73
+ error: string;
74
+ message: string;
75
+ };
76
+ export declare function isPortableReaderProfile(profile: string | undefined): boolean;
77
+ /** Public WS event boundary for a negotiated profile. The portable profile is
78
+ * deliberately pull-first and does not inherit private dashboard broadcasts. */
79
+ export declare function surfaceAllowsEvent(profile: SurfaceProfileId, eventType: string): boolean;
80
+ /** Additive projection switch: negotiated headers are preferred, while the
81
+ * historical query remains valid for old Pocket builds. */
82
+ export declare function usesPortableReaderProjection(identity: SurfaceIdentity | undefined, params: URLSearchParams): boolean;
83
+ export {};
84
+ //# sourceMappingURL=surface-protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surface-protocol.d.ts","sourceRoot":"","sources":["../src/surface-protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,237 @@
1
+ import { createRequire } from 'node:module';
2
+ import { ESP32_BOARDS } from '@agentdeck/shared';
3
+ export const SURFACE_PROTOCOL_MAJOR = 1;
4
+ export const PORTABLE_READER_PROFILE = 'portable-reader/v1';
5
+ export const OTA_RESUME_PARTIAL_CAPABILITY = 'ota.resume-206';
6
+ export const AGENTDECK_FIRMWARE_PRODUCT_ID = 'dev.agentdeck.dashboard-firmware';
7
+ export const POCKET_DAILY_PRODUCT_ID = 'io.pocketdaily.reader';
8
+ const packageJson = createRequire(import.meta.url)('../package.json');
9
+ export const SURFACE_SERVER_VERSION = packageJson.version;
10
+ const PROFILE_CAPABILITIES = {
11
+ 'dashboard-live/v1': new Set([
12
+ 'sessions.read', 'usage.read', 'timeline.read', 'display-state.read',
13
+ ]),
14
+ 'companion-control/v1': new Set([
15
+ 'sessions.read', 'usage.read', 'session.focus', 'permission.decide',
16
+ 'prompt.select', 'session.prompt', 'session.interrupt', 'session.escape', 'review.run',
17
+ ]),
18
+ [PORTABLE_READER_PROFILE]: new Set([
19
+ 'feed.pull', 'feed.conditional', 'outbox.push', 'glance.read',
20
+ 'weather.snapshot.read', 'weather.cues.display', 'weather.cues.notify',
21
+ 'learning.pack.read', 'learning.pack.update',
22
+ 'font.pack.read', 'font.pack.update',
23
+ 'ota.feed', OTA_RESUME_PARTIAL_CAPABILITY, 'device.telemetry',
24
+ // Deliberately no inbox.ws until the public invalidation runtime exists.
25
+ ]),
26
+ 'display-only/v1': new Set([
27
+ 'sessions.read', 'usage.read', 'timeline.read', 'display-state.read',
28
+ ]),
29
+ };
30
+ const PRODUCT_RULES = {
31
+ [POCKET_DAILY_PRODUCT_ID]: {
32
+ profiles: new Set([PORTABLE_READER_PROFILE]),
33
+ boards: new Set(['xteink_x3', 'xteink_x4']),
34
+ channels: new Set(['stable']),
35
+ },
36
+ [AGENTDECK_FIRMWARE_PRODUCT_ID]: {
37
+ profiles: new Set([PORTABLE_READER_PROFILE]),
38
+ boards: new Set(ESP32_BOARDS.map((board) => board.id)),
39
+ channels: new Set(['stable']),
40
+ },
41
+ };
42
+ const HEADER_NAMES = {
43
+ protocol: 'agentdeck-surface-protocol',
44
+ profile: 'agentdeck-surface-profile',
45
+ clientId: 'agentdeck-client-id',
46
+ clientVersion: 'agentdeck-client-version',
47
+ productId: 'agentdeck-product-id',
48
+ capabilities: 'agentdeck-capabilities',
49
+ board: 'agentdeck-board',
50
+ updateChannel: 'agentdeck-update-channel',
51
+ };
52
+ export class SurfaceProtocolError extends Error {
53
+ status;
54
+ code;
55
+ constructor(status, code, message) {
56
+ super(message);
57
+ this.status = status;
58
+ this.code = code;
59
+ }
60
+ }
61
+ function header(headers, name) {
62
+ const raw = headers[name];
63
+ if (Array.isArray(raw))
64
+ return raw.length === 1 ? raw[0]?.trim() : undefined;
65
+ return typeof raw === 'string' ? raw.trim() : undefined;
66
+ }
67
+ function boundedToken(value, label, max = 128) {
68
+ if (!value || value.length > max || !/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(value)) {
69
+ throw new SurfaceProtocolError(400, 'surface_identity_invalid', `${label} is malformed`);
70
+ }
71
+ return value;
72
+ }
73
+ function knownProfile(value) {
74
+ if (!Object.prototype.hasOwnProperty.call(PROFILE_CAPABILITIES, value)) {
75
+ throw new SurfaceProtocolError(406, 'surface_profile_unsupported', `Surface profile "${value}" is not supported`);
76
+ }
77
+ return value;
78
+ }
79
+ function capabilityIntersection(profile, offered) {
80
+ if (!Array.isArray(offered))
81
+ return [];
82
+ const known = PROFILE_CAPABILITIES[profile];
83
+ const out = [];
84
+ for (const value of offered) {
85
+ if (typeof value !== 'string' || !known.has(value) || out.includes(value))
86
+ continue;
87
+ out.push(value);
88
+ }
89
+ return out;
90
+ }
91
+ function validateProductTuple(identity) {
92
+ const rule = PRODUCT_RULES[identity.productId];
93
+ if (!rule) {
94
+ throw new SurfaceProtocolError(422, 'surface_product_unsupported', `Surface product "${identity.productId}" is not registered`);
95
+ }
96
+ if (!rule.profiles.has(identity.profile)) {
97
+ throw new SurfaceProtocolError(409, 'surface_product_profile_mismatch', 'Surface product and profile do not match');
98
+ }
99
+ if (rule.boards !== '*' && !rule.boards.has(identity.board)) {
100
+ throw new SurfaceProtocolError(409, 'surface_product_board_mismatch', 'Surface product and board do not match');
101
+ }
102
+ if (!rule.channels.has(identity.updateChannel)) {
103
+ throw new SurfaceProtocolError(409, 'surface_product_channel_mismatch', 'Surface product and update channel do not match');
104
+ }
105
+ }
106
+ /** Validate an OTA namespace independently of an HTTP request. Staging and
107
+ * serving both call this so a product-aware image can never fall back to a
108
+ * board-only namespace. */
109
+ export function validateSurfaceOtaIdentity(identity) {
110
+ const bounded = {
111
+ productId: boundedToken(identity.productId, 'productId'),
112
+ board: boundedToken(identity.board, 'board', 96),
113
+ updateChannel: boundedToken(identity.updateChannel, 'updateChannel', 48),
114
+ };
115
+ validateProductTuple({ ...bounded, profile: PORTABLE_READER_PROFILE });
116
+ return bounded;
117
+ }
118
+ /** Parse the all-or-nothing HTTP Surface declaration. No Surface headers is
119
+ * the legacy baseline; one or more headers means all eight must be valid. */
120
+ export function parseHttpSurfaceIdentity(headers, requiredCapability) {
121
+ const values = Object.fromEntries(Object.entries(HEADER_NAMES).map(([key, name]) => [key, header(headers, name)]));
122
+ const present = Object.values(values).filter((value) => value !== undefined).length;
123
+ if (present === 0)
124
+ return undefined;
125
+ if (present !== Object.keys(HEADER_NAMES).length) {
126
+ throw new SurfaceProtocolError(400, 'surface_identity_incomplete', 'All eight AgentDeck Surface identity headers are required');
127
+ }
128
+ if (values.protocol !== String(SURFACE_PROTOCOL_MAJOR)) {
129
+ throw new SurfaceProtocolError(426, 'surface_protocol_unsupported', `Surface protocol ${values.protocol} is not supported`);
130
+ }
131
+ const profile = knownProfile(values.profile);
132
+ if (profile !== PORTABLE_READER_PROFILE) {
133
+ throw new SurfaceProtocolError(406, 'surface_profile_route_mismatch', 'This HTTP route requires portable-reader/v1');
134
+ }
135
+ const offeredCapabilities = values.capabilities.split(',').map((value) => value.trim()).filter(Boolean);
136
+ const capabilities = capabilityIntersection(profile, offeredCapabilities);
137
+ if (requiredCapability && !capabilities.includes(requiredCapability)) {
138
+ throw new SurfaceProtocolError(403, 'surface_capability_required', `Capability "${requiredCapability}" was not granted`);
139
+ }
140
+ const identity = {
141
+ protocol: SURFACE_PROTOCOL_MAJOR,
142
+ profile,
143
+ clientId: boundedToken(values.clientId, 'AgentDeck-Client-Id'),
144
+ clientVersion: boundedToken(values.clientVersion, 'AgentDeck-Client-Version', 96),
145
+ productId: boundedToken(values.productId, 'AgentDeck-Product-Id'),
146
+ capabilities,
147
+ board: boundedToken(values.board, 'AgentDeck-Board', 96),
148
+ updateChannel: boundedToken(values.updateChannel, 'AgentDeck-Update-Channel', 48),
149
+ };
150
+ validateProductTuple(identity);
151
+ return identity;
152
+ }
153
+ /** Select the resumable OTA response shape without guessing from a client
154
+ * version. Legacy clients append `?from=` bodies but only accept status 200;
155
+ * negotiated clients explicitly opt into the standard 206 response. */
156
+ export function pullOtaResponseStatus(from, identity) {
157
+ return from > 0 && identity?.capabilities.includes(OTA_RESUME_PARTIAL_CAPABILITY) === true
158
+ ? 206 : 200;
159
+ }
160
+ /** A product-aware request may repeat the tuple in the query, but repetition
161
+ * is correlation, not override: every supplied member must match the headers. */
162
+ export function validateSurfaceQueryTuple(identity, params) {
163
+ const query = {
164
+ productId: params.get('productId'),
165
+ board: params.get('board'),
166
+ updateChannel: params.get('updateChannel'),
167
+ };
168
+ for (const [field, value] of Object.entries(query)) {
169
+ if (value !== null && value !== identity[field]) {
170
+ throw new SurfaceProtocolError(409, 'surface_query_identity_mismatch', `Query ${field} does not match Surface identity`);
171
+ }
172
+ }
173
+ }
174
+ export function negotiateSurface(offer) {
175
+ if (offer.protocol !== SURFACE_PROTOCOL_MAJOR) {
176
+ throw new SurfaceProtocolError(426, 'surface_protocol_unsupported', `Surface protocol ${String(offer.protocol)} is not supported`);
177
+ }
178
+ const clientId = boundedToken(String(offer.clientId ?? ''), 'surface.clientId');
179
+ const clientVersion = boundedToken(String(offer.clientVersion ?? ''), 'surface.clientVersion', 96);
180
+ const productId = boundedToken(String(offer.productId ?? ''), 'surface.productId');
181
+ if (!Array.isArray(offer.profiles) || offer.profiles.length === 0) {
182
+ throw new SurfaceProtocolError(406, 'surface_profile_unsupported', 'At least one Surface profile offer is required');
183
+ }
184
+ let selected;
185
+ for (const raw of offer.profiles) {
186
+ if (!raw || typeof raw !== 'object')
187
+ continue;
188
+ const profile = raw;
189
+ if (typeof profile.id !== 'string' || !Object.prototype.hasOwnProperty.call(PROFILE_CAPABILITIES, profile.id))
190
+ continue;
191
+ const id = profile.id;
192
+ selected = { id, capabilities: capabilityIntersection(id, profile.capabilities) };
193
+ break;
194
+ }
195
+ if (!selected) {
196
+ throw new SurfaceProtocolError(406, 'surface_profile_unsupported', 'No offered Surface profile is supported');
197
+ }
198
+ if (selected.id === PORTABLE_READER_PROFILE) {
199
+ const rule = PRODUCT_RULES[productId];
200
+ if (!rule || !rule.profiles.has(selected.id)) {
201
+ throw new SurfaceProtocolError(422, 'surface_product_unsupported', 'Portable-reader product is not registered');
202
+ }
203
+ }
204
+ return {
205
+ clientId,
206
+ clientVersion,
207
+ productId,
208
+ profile: selected.id,
209
+ capabilities: selected.capabilities,
210
+ welcome: {
211
+ type: 'surface_welcome',
212
+ protocol: SURFACE_PROTOCOL_MAJOR,
213
+ profile: selected.id,
214
+ capabilities: selected.capabilities,
215
+ serverVersion: SURFACE_SERVER_VERSION,
216
+ },
217
+ };
218
+ }
219
+ export function surfaceErrorBody(error) {
220
+ return { error: error.code, message: error.message };
221
+ }
222
+ export function isPortableReaderProfile(profile) {
223
+ return profile === PORTABLE_READER_PROFILE;
224
+ }
225
+ /** Public WS event boundary for a negotiated profile. The portable profile is
226
+ * deliberately pull-first and does not inherit private dashboard broadcasts. */
227
+ export function surfaceAllowsEvent(profile, eventType) {
228
+ if (profile !== PORTABLE_READER_PROFILE)
229
+ return true;
230
+ return eventType === 'surface_welcome' || eventType === 'connection' || eventType === 'device_info_request';
231
+ }
232
+ /** Additive projection switch: negotiated headers are preferred, while the
233
+ * historical query remains valid for old Pocket builds. */
234
+ export function usesPortableReaderProjection(identity, params) {
235
+ return identity !== undefined || params.get('surface') === 'pocket-reader';
236
+ }
237
+ //# sourceMappingURL=surface-protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surface-protocol.js","sourceRoot":"","sources":["../src/surface-protocol.ts"],"names":[],"mappings":"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"}
@@ -105,7 +105,7 @@ export declare class BridgeTimelineStore {
105
105
  /** Recent entries attributed to one session, for the `query_session_timeline`
106
106
  * poll — lets a device that connects mid-session fill its Detail view. */
107
107
  getHistoryForSession(sessionId: string, since?: number, limit?: number): TimelineEntry[];
108
- updateEntryStatus(approvalId: string, status: 'approved' | 'denied'): void;
108
+ updateEntryStatus(approvalId: string, status: 'approved' | 'denied' | 'abandoned'): void;
109
109
  /** Update existing entry with same ts+type (1s tolerance), or add new.
110
110
  *
111
111
  * Update path: the existing entry's session/task/run/project attribution
@@ -1 +1 @@
1
- {"version":3,"file":"timeline-store.d.ts","sourceRoot":"","sources":["../src/timeline-store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAKhD,KAAK,aAAa,GAAG,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;AACtE;;;qEAGqE;AACrE,KAAK,eAAe,GAAG,CAAC,KAAK,EAAE,aAAa,KAAK,aAAa,CAAC;AA0B/D,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,UAAU,CAAgC;IAClD;;uCAEmC;IACnC,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,YAAY,CAA8C;IAClE,OAAO,CAAC,KAAK,CAAS;IACtB;;8EAE0E;IAC1E,OAAO,CAAC,qBAAqB,CAAS;IAEtC,wBAAwB,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAI1C;;;+CAG2C;IAC3C,aAAa,CAAC,EAAE,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI;IAI/C,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE;QAAE,iBAAiB,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IA+D5E;;;;;wDAKoD;IACpD,OAAO,CAAC,QAAQ;IAgDhB;;;;;;;;;;OAUG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIrC,4DAA4D;IAC5D,OAAO,CAAC,eAAe;IAWvB;;;;;;;OAOG;IACH,YAAY,IAAI,IAAI;IAgBpB,yEAAyE;IACzE,eAAe,IAAI,IAAI;IAQvB,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE;IAO3C;;;;;OAKG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAiBvC,oBAAoB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAuB3C;;;;;;;;6EAQyE;IACzE,oBAAoB,IAAI,MAAM;IAwC9B;;;;;;;;;;;;;;;;eAgBW;IACX,oBAAoB,CAClB,OAAO,SAAc,EACrB,GAAG,SAAa,EAChB,cAAc,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GACnC,MAAM;IAsCT;+EAC2E;IAC3E,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,aAAa,EAAE;IAkBpF,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,QAAQ,GAAG,IAAI;IAS1E;;;;;;;;;;;oEAWgE;IAChE,WAAW,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE;QAAE,iBAAiB,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IA4D/E,gDAAgD;IAChD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAOhD,OAAO,CAAC,EAAE,EAAE,aAAa,GAAG,IAAI;IAIhC,cAAc,CAAC,EAAE,EAAE,aAAa,GAAG,IAAI;IAKvC,OAAO,CAAC,uBAAuB;CAiChC"}
1
+ {"version":3,"file":"timeline-store.d.ts","sourceRoot":"","sources":["../src/timeline-store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAKhD,KAAK,aAAa,GAAG,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;AACtE;;;qEAGqE;AACrE,KAAK,eAAe,GAAG,CAAC,KAAK,EAAE,aAAa,KAAK,aAAa,CAAC;AA0B/D,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,UAAU,CAAgC;IAClD;;uCAEmC;IACnC,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,YAAY,CAA8C;IAClE,OAAO,CAAC,KAAK,CAAS;IACtB;;8EAE0E;IAC1E,OAAO,CAAC,qBAAqB,CAAS;IAEtC,wBAAwB,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAI1C;;;+CAG2C;IAC3C,aAAa,CAAC,EAAE,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI;IAI/C,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE;QAAE,iBAAiB,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IA+D5E;;;;;wDAKoD;IACpD,OAAO,CAAC,QAAQ;IAiEhB;;;;;;;;;;OAUG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIrC,4DAA4D;IAC5D,OAAO,CAAC,eAAe;IAWvB;;;;;;;OAOG;IACH,YAAY,IAAI,IAAI;IAgBpB,yEAAyE;IACzE,eAAe,IAAI,IAAI;IAQvB,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE;IAO3C;;;;;OAKG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAiBvC,oBAAoB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAuB3C;;;;;;;;6EAQyE;IACzE,oBAAoB,IAAI,MAAM;IAwC9B;;;;;;;;;;;;;;;;eAgBW;IACX,oBAAoB,CAClB,OAAO,SAAc,EACrB,GAAG,SAAa,EAChB,cAAc,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GACnC,MAAM;IAsCT;+EAC2E;IAC3E,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,aAAa,EAAE;IAkBpF,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,IAAI;IASxF;;;;;;;;;;;oEAWgE;IAChE,WAAW,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE;QAAE,iBAAiB,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IA4D/E,gDAAgD;IAChD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAOhD,OAAO,CAAC,EAAE,EAAE,aAAa,GAAG,IAAI;IAIhC,cAAc,CAAC,EAAE,EAAE,aAAa,GAAG,IAAI;IAKvC,OAAO,CAAC,uBAAuB;CAiChC"}
@@ -149,7 +149,22 @@ export class BridgeTimelineStore {
149
149
  // fan-out sessions, so the dispatch row was always the first casualty and
150
150
  // the completions below it read as unattached. Skip them here; they still
151
151
  // FIFO out with everything else once the plain tool rows are gone.
152
- const toolIdx = this.entries.findIndex((e) => e.type === 'tool_exec' && !e.subagentId);
152
+ //
153
+ // OpenClaw transcript rows are the second exception, for the same reason
154
+ // read the other way round. This rule targets the observed-agent hook
155
+ // firehose — one row per internal action, measured at 87% of a live buffer.
156
+ // OpenClaw's tool rows are neither hooks nor a firehose: the Gateway stream
157
+ // carries no tool calls at all, so they are read from OpenClaw's own
158
+ // transcript (`openclaw-timeline-feed.ts`) and are the ONLY account of what
159
+ // it did, deliberately bounded at the producer (recently-active sessions
160
+ // only, a dozen rows per session per tick, measured traffic 28 tool calls
161
+ // in 3 h). Shedding them first did not thin them — it deleted them
162
+ // outright: `addEntry` pushes then evicts, so on a full buffer an OpenClaw
163
+ // row was the only plain `tool_exec` present and therefore evicted ITSELF
164
+ // on insertion. Measured 2026-08-23 against a live daemon and reproduced at
165
+ // this store: the feed emitted its row, and the buffer never held one. They
166
+ // still FIFO out with everything else once the plain tool rows are gone.
167
+ const toolIdx = this.entries.findIndex((e) => e.type === 'tool_exec' && !e.subagentId && e.agentType !== 'openclaw');
153
168
  if (toolIdx >= 0) {
154
169
  this.entries.splice(toolIdx, 1);
155
170
  return;