@reticlehq/browser 2.0.1 → 2.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 (179) hide show
  1. package/NOTICE +5 -0
  2. package/dist/actions/actions-dom.d.ts.map +1 -1
  3. package/dist/actions/actions-dom.js +3 -20
  4. package/dist/actions/actions-dom.js.map +1 -1
  5. package/dist/actions/actions.d.ts +1 -1
  6. package/dist/actions/actions.d.ts.map +1 -1
  7. package/dist/actions/actions.js +37 -19
  8. package/dist/actions/actions.js.map +1 -1
  9. package/dist/commands/commands.d.ts +2 -0
  10. package/dist/commands/commands.d.ts.map +1 -1
  11. package/dist/commands/commands.js +30 -31
  12. package/dist/commands/commands.js.map +1 -1
  13. package/dist/dom/a11y.d.ts +17 -6
  14. package/dist/dom/a11y.d.ts.map +1 -1
  15. package/dist/dom/a11y.js +68 -32
  16. package/dist/dom/a11y.js.map +1 -1
  17. package/dist/dom/auto-anchor.d.ts +10 -10
  18. package/dist/dom/auto-anchor.js +10 -10
  19. package/dist/dom/blind-spots.d.ts +14 -0
  20. package/dist/dom/blind-spots.d.ts.map +1 -0
  21. package/dist/dom/blind-spots.js +30 -0
  22. package/dist/dom/blind-spots.js.map +1 -0
  23. package/dist/dom/chart.d.ts +93 -0
  24. package/dist/dom/chart.d.ts.map +1 -0
  25. package/dist/dom/chart.js +119 -0
  26. package/dist/dom/chart.js.map +1 -0
  27. package/dist/dom/dom-ignore.d.ts +2 -0
  28. package/dist/dom/dom-ignore.d.ts.map +1 -1
  29. package/dist/dom/dom-ignore.js +17 -2
  30. package/dist/dom/dom-ignore.js.map +1 -1
  31. package/dist/dom/occlusion.d.ts +9 -0
  32. package/dist/dom/occlusion.d.ts.map +1 -0
  33. package/dist/dom/occlusion.js +21 -0
  34. package/dist/dom/occlusion.js.map +1 -0
  35. package/dist/dom/query.d.ts +17 -4
  36. package/dist/dom/query.d.ts.map +1 -1
  37. package/dist/dom/query.js +185 -30
  38. package/dist/dom/query.js.map +1 -1
  39. package/dist/dom/refs.d.ts +26 -3
  40. package/dist/dom/refs.d.ts.map +1 -1
  41. package/dist/dom/refs.js +79 -4
  42. package/dist/dom/refs.js.map +1 -1
  43. package/dist/dom/snapshot.d.ts +7 -1
  44. package/dist/dom/snapshot.d.ts.map +1 -1
  45. package/dist/dom/snapshot.js +43 -16
  46. package/dist/dom/snapshot.js.map +1 -1
  47. package/dist/dom/source.d.ts +40 -0
  48. package/dist/dom/source.d.ts.map +1 -0
  49. package/dist/dom/source.js +59 -0
  50. package/dist/dom/source.js.map +1 -0
  51. package/dist/dom/theme.js +2 -2
  52. package/dist/dom/theme.js.map +1 -1
  53. package/dist/index.d.ts +6 -2
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +9 -1
  56. package/dist/index.js.map +1 -1
  57. package/dist/observers/animation.d.ts +1 -1
  58. package/dist/observers/animation.d.ts.map +1 -1
  59. package/dist/observers/animation.js +1 -1
  60. package/dist/observers/animation.js.map +1 -1
  61. package/dist/observers/blind-spots.d.ts +19 -0
  62. package/dist/observers/blind-spots.d.ts.map +1 -0
  63. package/dist/observers/blind-spots.js +89 -0
  64. package/dist/observers/blind-spots.js.map +1 -0
  65. package/dist/observers/console.d.ts.map +1 -1
  66. package/dist/observers/console.js +39 -6
  67. package/dist/observers/console.js.map +1 -1
  68. package/dist/observers/dom.d.ts +1 -1
  69. package/dist/observers/dom.d.ts.map +1 -1
  70. package/dist/observers/dom.js +69 -10
  71. package/dist/observers/dom.js.map +1 -1
  72. package/dist/observers/focus.d.ts +10 -0
  73. package/dist/observers/focus.d.ts.map +1 -0
  74. package/dist/observers/focus.js +49 -0
  75. package/dist/observers/focus.js.map +1 -0
  76. package/dist/observers/network-body.d.ts +19 -0
  77. package/dist/observers/network-body.d.ts.map +1 -0
  78. package/dist/observers/network-body.js +143 -0
  79. package/dist/observers/network-body.js.map +1 -0
  80. package/dist/observers/network-redact.d.ts +8 -0
  81. package/dist/observers/network-redact.d.ts.map +1 -0
  82. package/dist/observers/network-redact.js +66 -0
  83. package/dist/observers/network-redact.js.map +1 -0
  84. package/dist/observers/network.d.ts +19 -7
  85. package/dist/observers/network.d.ts.map +1 -1
  86. package/dist/observers/network.js +439 -53
  87. package/dist/observers/network.js.map +1 -1
  88. package/dist/observers/perf.d.ts +13 -0
  89. package/dist/observers/perf.d.ts.map +1 -0
  90. package/dist/observers/perf.js +62 -0
  91. package/dist/observers/perf.js.map +1 -0
  92. package/dist/observers/route.d.ts.map +1 -1
  93. package/dist/observers/route.js +19 -10
  94. package/dist/observers/route.js.map +1 -1
  95. package/dist/observers/scroll.d.ts +1 -1
  96. package/dist/observers/scroll.d.ts.map +1 -1
  97. package/dist/observers/scroll.js +36 -9
  98. package/dist/observers/scroll.js.map +1 -1
  99. package/dist/observers/state.d.ts +20 -0
  100. package/dist/observers/state.d.ts.map +1 -0
  101. package/dist/observers/state.js +87 -0
  102. package/dist/observers/state.js.map +1 -0
  103. package/dist/observers/storage.d.ts +23 -0
  104. package/dist/observers/storage.d.ts.map +1 -0
  105. package/dist/observers/storage.js +177 -0
  106. package/dist/observers/storage.js.map +1 -0
  107. package/dist/observers/types.d.ts +15 -0
  108. package/dist/observers/types.d.ts.map +1 -1
  109. package/dist/observers/types.js +29 -1
  110. package/dist/observers/types.js.map +1 -1
  111. package/dist/patching/capture-method.d.ts +27 -0
  112. package/dist/patching/capture-method.d.ts.map +1 -0
  113. package/dist/patching/capture-method.js +37 -0
  114. package/dist/patching/capture-method.js.map +1 -0
  115. package/dist/presenter/presenter-config.d.ts +3 -3
  116. package/dist/presenter/presenter-config.d.ts.map +1 -1
  117. package/dist/presenter/presenter-config.js +3 -3
  118. package/dist/presenter/presenter-config.js.map +1 -1
  119. package/dist/presenter/presenter-controls.d.ts +1 -1
  120. package/dist/presenter/presenter-controls.d.ts.map +1 -1
  121. package/dist/presenter/presenter-controls.js +3 -3
  122. package/dist/presenter/presenter-controls.js.map +1 -1
  123. package/dist/presenter/presenter-glow.d.ts +1 -1
  124. package/dist/presenter/presenter-glow.js +1 -1
  125. package/dist/presenter/presenter-styles.d.ts +1 -1
  126. package/dist/presenter/presenter-styles.d.ts.map +1 -1
  127. package/dist/presenter/presenter-styles.js +12 -3
  128. package/dist/presenter/presenter-styles.js.map +1 -1
  129. package/dist/presenter/presenter-test-helpers.d.ts +16 -0
  130. package/dist/presenter/presenter-test-helpers.d.ts.map +1 -0
  131. package/dist/presenter/presenter-test-helpers.js +42 -0
  132. package/dist/presenter/presenter-test-helpers.js.map +1 -0
  133. package/dist/presenter/presenter.d.ts +4 -6
  134. package/dist/presenter/presenter.d.ts.map +1 -1
  135. package/dist/presenter/presenter.js +5 -9
  136. package/dist/presenter/presenter.js.map +1 -1
  137. package/dist/recorder/recorder.d.ts +8 -8
  138. package/dist/recorder/recorder.d.ts.map +1 -1
  139. package/dist/recorder/recorder.js +22 -9
  140. package/dist/recorder/recorder.js.map +1 -1
  141. package/dist/registry/capabilities.d.ts +2 -2
  142. package/dist/registry/capabilities.d.ts.map +1 -1
  143. package/dist/registry/capabilities.js +1 -1
  144. package/dist/registry/capabilities.js.map +1 -1
  145. package/dist/registry/domains.d.ts +1 -1
  146. package/dist/registry/domains.js +1 -1
  147. package/dist/registry/emitter.d.ts +2 -2
  148. package/dist/registry/emitter.js +2 -2
  149. package/dist/registry/store-adapters.d.ts +128 -0
  150. package/dist/registry/store-adapters.d.ts.map +1 -0
  151. package/dist/registry/store-adapters.js +135 -0
  152. package/dist/registry/store-adapters.js.map +1 -0
  153. package/dist/registry/stores.d.ts +45 -3
  154. package/dist/registry/stores.d.ts.map +1 -1
  155. package/dist/registry/stores.js +121 -8
  156. package/dist/registry/stores.js.map +1 -1
  157. package/dist/reticle.d.ts +28 -4
  158. package/dist/reticle.d.ts.map +1 -1
  159. package/dist/reticle.js +83 -15
  160. package/dist/reticle.js.map +1 -1
  161. package/dist/review/annotator.d.ts.map +1 -1
  162. package/dist/review/annotator.js +4 -2
  163. package/dist/review/annotator.js.map +1 -1
  164. package/dist/review/mark-anchor.d.ts.map +1 -1
  165. package/dist/review/mark-anchor.js +1 -21
  166. package/dist/review/mark-anchor.js.map +1 -1
  167. package/dist/security/serialization.d.ts +29 -1
  168. package/dist/security/serialization.d.ts.map +1 -1
  169. package/dist/security/serialization.js +172 -20
  170. package/dist/security/serialization.js.map +1 -1
  171. package/dist/timers/clock.d.ts +13 -0
  172. package/dist/timers/clock.d.ts.map +1 -1
  173. package/dist/timers/clock.js +76 -6
  174. package/dist/timers/clock.js.map +1 -1
  175. package/dist/transport/transport.d.ts +1 -1
  176. package/dist/transport/transport.d.ts.map +1 -1
  177. package/dist/transport/transport.js +49 -8
  178. package/dist/transport/transport.js.map +1 -1
  179. package/package.json +7 -3
@@ -1,2 +1,30 @@
1
- export {};
1
+ /**
2
+ * Run an observation so it can never escape into the app's call stack.
3
+ *
4
+ * Every monkey-patch calls its observation INSIDE the function it replaced, so a throw does not surface
5
+ * as an SDK error — it propagates out of `localStorage.setItem` after the write already succeeded, out
6
+ * of `history.pushState` (crashing a router's navigate), or out of `console.log` before the message
7
+ * reaches the console. Guarding the transport hop alone is not enough: the payload is BUILT here too
8
+ * (reading the old value, resolving the area, redacting), and any of that can throw on a hostile or
9
+ * exotic object.
10
+ *
11
+ * A dev-only observability SDK must never be able to break the app it is observing.
12
+ */
13
+ export function observeSafely(observation) {
14
+ try {
15
+ observation();
16
+ }
17
+ catch {
18
+ /* observation is best-effort; the host app's control flow is not */
19
+ }
20
+ }
21
+ /** Like observeSafely, but for reading a value the observation needs; undefined if the read throws. */
22
+ export function observeValue(read) {
23
+ try {
24
+ return read();
25
+ }
26
+ catch {
27
+ return undefined;
28
+ }
29
+ }
2
30
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/observers/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/observers/types.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAAC,WAAuB;IACnD,IAAI,CAAC;QACH,WAAW,EAAE,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,oEAAoE;IACtE,CAAC;AACH,CAAC;AAED,uGAAuG;AACvG,MAAM,UAAU,YAAY,CAAI,IAAa;IAC3C,IAAI,CAAC;QACH,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Capture a method off an object so it can be restored — or re-invoked via `.call` — later.
3
+ *
4
+ * Monkeypatching is unavoidable in this SDK: observing history, console, fetch and XHR means
5
+ * replacing a method and putting the original back on teardown. Putting it back requires holding the
6
+ * UNBOUND original, because identity is what teardown compares — a bound copy is a different function
7
+ * and would leave the patch installed forever.
8
+ *
9
+ * `@typescript-eslint/unbound-method` exists to catch the common mistake this pattern deliberately
10
+ * makes, so every such site used to carry an eslint-disable. Disabling a rule seven times to express
11
+ * one intention is worse than naming the intention once: those disables also suppressed the rule for
12
+ * any OTHER unbound access on the same lines, which is exactly what the rule is for.
13
+ *
14
+ * The generic index access here is not something the rule flags, so callers stay clean and the
15
+ * "I meant to do this" is stated in one place instead of seven.
16
+ */
17
+ export declare function captureMethod<T, K extends keyof T>(target: T, key: K): T[K];
18
+ /**
19
+ * The `value` setter defined on a prototype, for inputs whose value must be set the way the browser
20
+ * does it — React installs its own descriptor, and assigning `el.value` directly skips the tracker it
21
+ * relies on to notice a change.
22
+ *
23
+ * Same reason as `captureMethod` for existing separately from its call site: a property descriptor's
24
+ * `set` is an unbound function, and naming that intention once beats disabling the rule at each use.
25
+ */
26
+ export declare function captureValueSetter(proto: object): ((this: HTMLElement, value: string) => void) | undefined;
27
+ //# sourceMappingURL=capture-method.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture-method.d.ts","sourceRoot":"","sources":["../../src/patching/capture-method.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAE3E;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,GACZ,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAO1D"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Capture a method off an object so it can be restored — or re-invoked via `.call` — later.
3
+ *
4
+ * Monkeypatching is unavoidable in this SDK: observing history, console, fetch and XHR means
5
+ * replacing a method and putting the original back on teardown. Putting it back requires holding the
6
+ * UNBOUND original, because identity is what teardown compares — a bound copy is a different function
7
+ * and would leave the patch installed forever.
8
+ *
9
+ * `@typescript-eslint/unbound-method` exists to catch the common mistake this pattern deliberately
10
+ * makes, so every such site used to carry an eslint-disable. Disabling a rule seven times to express
11
+ * one intention is worse than naming the intention once: those disables also suppressed the rule for
12
+ * any OTHER unbound access on the same lines, which is exactly what the rule is for.
13
+ *
14
+ * The generic index access here is not something the rule flags, so callers stay clean and the
15
+ * "I meant to do this" is stated in one place instead of seven.
16
+ */
17
+ export function captureMethod(target, key) {
18
+ return target[key];
19
+ }
20
+ /**
21
+ * The `value` setter defined on a prototype, for inputs whose value must be set the way the browser
22
+ * does it — React installs its own descriptor, and assigning `el.value` directly skips the tracker it
23
+ * relies on to notice a change.
24
+ *
25
+ * Same reason as `captureMethod` for existing separately from its call site: a property descriptor's
26
+ * `set` is an unbound function, and naming that intention once beats disabling the rule at each use.
27
+ */
28
+ export function captureValueSetter(proto) {
29
+ const descriptor = Object.getOwnPropertyDescriptor(proto, 'value');
30
+ if (descriptor === undefined)
31
+ return undefined;
32
+ // Read through the same generic index access `captureMethod` uses: reaching for `.set` directly is
33
+ // what the rule flags, and it is right to in general — this is the one place that means it.
34
+ const setter = captureMethod(descriptor, 'set');
35
+ return setter;
36
+ }
37
+ //# sourceMappingURL=capture-method.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture-method.js","sourceRoot":"","sources":["../../src/patching/capture-method.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,aAAa,CAAuB,MAAS,EAAE,GAAM;IACnE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AACrB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAa;IAEb,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACnE,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC/C,mGAAmG;IACnG,4FAA4F;IAC5F,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAChD,OAAO,MAAkE,CAAC;AAC5E,CAAC"}
@@ -50,7 +50,7 @@ export interface PresenterOptions {
50
50
  }
51
51
  export declare const DEFAULT_PACE = 450;
52
52
  /**
53
- * Glow state machine phases (exposed via glowPhase() for tests). A burst of activity flips the
53
+ * Glow state machine phases (exposed via glowPhase for tests). A burst of activity flips the
54
54
  * border IN once on the first activity, holds steady (the slow reticle-pulse breathing keeps running
55
55
  * uninterrupted — no per-action restart/strobe), then fades OUT once after a quiet window.
56
56
  */
@@ -71,11 +71,11 @@ export declare const HEARTBEAT_MS = 1000;
71
71
  */
72
72
  export declare const IDLE_NOTICE_MS = 4000;
73
73
  /** Default session-idle-end: after this much quiet the session auto-ends (glow off, panel persists
74
- * for analysis). Agent-tweakable via reticle_session { idleEndMs } for the app's needs. */
74
+ * for analysis). Agent-tweakable via reticle_session { idleEndMs } for the app's needs. */
75
75
  export declare const IDLE_END_MS = 300000;
76
76
  /** Floor for a tweaked idle-end so the agent can't set a uselessly tiny window. */
77
77
  export declare const IDLE_END_MIN_MS = 5000;
78
- /** Must match the glow CSS opacity transition (.25s) so phase reaches idle after the fade paints. */
78
+ /** Must match the glow CSS opacity transition.25s) so phase reaches idle after the fade paints. */
79
79
  export declare const GLOW_FADE_MS = 250;
80
80
  export declare const GLOW_ON = "1";
81
81
  export declare const GLOW_OFF = "0";
@@ -1 +1 @@
1
- {"version":3,"file":"presenter-config.d.ts","sourceRoot":"","sources":["../../src/presenter/presenter-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D;;;;GAIG;AAEH;;;;GAIG;AACH,eAAO,MAAM,UAAU;;;CAAgD,CAAC;AACxE,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC;AACtE,eAAO,MAAM,mBAAmB,EAAE,UAA+B,CAAC;AAClE,eAAO,MAAM,SAAS,cAAc,CAAC;AACrC,eAAO,MAAM,OAAO,MAAM,CAAC;AAC3B,eAAO,MAAM,QAAQ,MAAM,CAAC;AAE5B,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qFAAqF;IACrF,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+FAA+F;IAC/F,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uGAAuG;IACvG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wGAAwG;IACxG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mFAAmF;IACnF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,kFAAkF;IAClF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uFAAuF;IACvF,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,YAAY,MAAM,CAAC;AAEhC;;;;GAIG;AACH,eAAO,MAAM,SAAS;;;;CAIZ,CAAC;AACX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC;AAEnE,0CAA0C;AAC1C,eAAO,MAAM,aAAa,MAAM,CAAC;AACjC,2FAA2F;AAC3F,eAAO,MAAM,YAAY,OAAO,CAAC;AACjC;;;;GAIG;AACH,eAAO,MAAM,cAAc,OAAO,CAAC;AACnC;4FAC4F;AAC5F,eAAO,MAAM,WAAW,SAAU,CAAC;AACnC,mFAAmF;AACnF,eAAO,MAAM,eAAe,OAAQ,CAAC;AACrC,qGAAqG;AACrG,eAAO,MAAM,YAAY,MAAM,CAAC;AAChC,eAAO,MAAM,OAAO,MAAM,CAAC;AAC3B,eAAO,MAAM,QAAQ,MAAM,CAAC;AAC5B,eAAO,MAAM,OAAO,YAAY,CAAC;AACjC,2EAA2E;AAC3E,eAAO,MAAM,QAAQ,qBAAqB,CAAC;AAC3C,eAAO,MAAM,cAAc,2BAA2B,CAAC"}
1
+ {"version":3,"file":"presenter-config.d.ts","sourceRoot":"","sources":["../../src/presenter/presenter-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D;;;;GAIG;AAEH;;;;GAIG;AACH,eAAO,MAAM,UAAU;;;CAAgD,CAAC;AACxE,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC;AACtE,eAAO,MAAM,mBAAmB,EAAE,UAA+B,CAAC;AAClE,eAAO,MAAM,SAAS,cAAc,CAAC;AACrC,eAAO,MAAM,OAAO,MAAM,CAAC;AAC3B,eAAO,MAAM,QAAQ,MAAM,CAAC;AAE5B,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qFAAqF;IACrF,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+FAA+F;IAC/F,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uGAAuG;IACvG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wGAAwG;IACxG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mFAAmF;IACnF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,kFAAkF;IAClF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uFAAuF;IACvF,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,YAAY,MAAM,CAAC;AAEhC;;;;GAIG;AACH,eAAO,MAAM,SAAS;;;;CAIZ,CAAC;AACX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC;AAEnE,0CAA0C;AAC1C,eAAO,MAAM,aAAa,MAAM,CAAC;AACjC,2FAA2F;AAC3F,eAAO,MAAM,YAAY,OAAO,CAAC;AACjC;;;;GAIG;AACH,eAAO,MAAM,cAAc,OAAO,CAAC;AACnC;2FAC2F;AAC3F,eAAO,MAAM,WAAW,SAAU,CAAC;AACnC,mFAAmF;AACnF,eAAO,MAAM,eAAe,OAAQ,CAAC;AACrC,mGAAmG;AACnG,eAAO,MAAM,YAAY,MAAM,CAAC;AAChC,eAAO,MAAM,OAAO,MAAM,CAAC;AAC3B,eAAO,MAAM,QAAQ,MAAM,CAAC;AAC5B,eAAO,MAAM,OAAO,YAAY,CAAC;AACjC,2EAA2E;AAC3E,eAAO,MAAM,QAAQ,qBAAqB,CAAC;AAC3C,eAAO,MAAM,cAAc,2BAA2B,CAAC"}
@@ -16,7 +16,7 @@ export const BUSY_ON = '1';
16
16
  export const BUSY_OFF = '0';
17
17
  export const DEFAULT_PACE = 450;
18
18
  /**
19
- * Glow state machine phases (exposed via glowPhase() for tests). A burst of activity flips the
19
+ * Glow state machine phases (exposed via glowPhase for tests). A burst of activity flips the
20
20
  * border IN once on the first activity, holds steady (the slow reticle-pulse breathing keeps running
21
21
  * uninterrupted — no per-action restart/strobe), then fades OUT once after a quiet window.
22
22
  */
@@ -36,11 +36,11 @@ export const HEARTBEAT_MS = 1000;
36
36
  */
37
37
  export const IDLE_NOTICE_MS = 4000;
38
38
  /** Default session-idle-end: after this much quiet the session auto-ends (glow off, panel persists
39
- * for analysis). Agent-tweakable via reticle_session { idleEndMs } for the app's needs. */
39
+ * for analysis). Agent-tweakable via reticle_session { idleEndMs } for the app's needs. */
40
40
  export const IDLE_END_MS = 300_000;
41
41
  /** Floor for a tweaked idle-end so the agent can't set a uselessly tiny window. */
42
42
  export const IDLE_END_MIN_MS = 5_000;
43
- /** Must match the glow CSS opacity transition (.25s) so phase reaches idle after the fade paints. */
43
+ /** Must match the glow CSS opacity transition.25s) so phase reaches idle after the fade paints. */
44
44
  export const GLOW_FADE_MS = 250;
45
45
  export const GLOW_ON = '1';
46
46
  export const GLOW_OFF = '0';
@@ -1 +1 @@
1
- {"version":3,"file":"presenter-config.js","sourceRoot":"","sources":["../../src/presenter/presenter-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,MAAM,yBAAyB,CAAC;AAE9D;;;;GAIG;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAW,CAAC;AAExE,MAAM,CAAC,MAAM,mBAAmB,GAAe,UAAU,CAAC,OAAO,CAAC;AAClE,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAC;AACrC,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,CAAC;AAC3B,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,CAAC;AAiC5B,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,CAAC;AAEhC;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;CACR,CAAC;AAGX,0CAA0C;AAC1C,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAC;AACjC,2FAA2F;AAC3F,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;AACjC;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;AACnC;4FAC4F;AAC5F,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC;AACnC,mFAAmF;AACnF,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC;AACrC,qGAAqG;AACrG,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,CAAC;AAChC,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,CAAC;AAC3B,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,CAAC;AAC5B,MAAM,CAAC,MAAM,OAAO,GAAG,SAAS,CAAC;AACjC,2EAA2E;AAC3E,MAAM,CAAC,MAAM,QAAQ,GAAG,kBAAkB,CAAC;AAC3C,MAAM,CAAC,MAAM,cAAc,GAAG,wBAAwB,CAAC"}
1
+ {"version":3,"file":"presenter-config.js","sourceRoot":"","sources":["../../src/presenter/presenter-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,MAAM,yBAAyB,CAAC;AAE9D;;;;GAIG;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAW,CAAC;AAExE,MAAM,CAAC,MAAM,mBAAmB,GAAe,UAAU,CAAC,OAAO,CAAC;AAClE,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAC;AACrC,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,CAAC;AAC3B,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,CAAC;AAiC5B,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,CAAC;AAEhC;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;CACR,CAAC;AAGX,0CAA0C;AAC1C,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAC;AACjC,2FAA2F;AAC3F,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;AACjC;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;AACnC;2FAC2F;AAC3F,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC;AACnC,mFAAmF;AACnF,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC;AACrC,mGAAmG;AACnG,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,CAAC;AAChC,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,CAAC;AAC3B,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,CAAC;AAC5B,MAAM,CAAC,MAAM,OAAO,GAAG,SAAS,CAAC;AACjC,2EAA2E;AAC3E,MAAM,CAAC,MAAM,QAAQ,GAAG,kBAAkB,CAAC;AAC3C,MAAM,CAAC,MAAM,cAAc,GAAG,wBAAwB,CAAC"}
@@ -53,7 +53,7 @@ export declare class ControlPanel {
53
53
  /** Clear any pending ended-fade timer (called from Presenter.destroy). */
54
54
  teardown(): void;
55
55
  /** Render the replayable-flow chips from the server push. Each ▶ click re-runs that flow, no agent.
56
- * Takes the raw wire value and narrows it here (the panel is the consumer of this push). */
56
+ * Takes the raw wire value and narrows it here (the panel is the consumer of this push). */
57
57
  setFlows(flows: unknown): void;
58
58
  /**
59
59
  * Re-render the replay chips for the CURRENT page. A flow "starts here" iff its first step's anchor
@@ -1 +1 @@
1
- {"version":3,"file":"presenter-controls.d.ts","sourceRoot":"","sources":["../../src/presenter/presenter-controls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAShF,4FAA4F;AAC5F,QAAA,MAAM,kBAAkB,uBAAuB,CAAC;AAwBhD,yFAAyF;AACzF,eAAO,MAAM,aAAa,OAAO,CAAC;AAKlC;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,2EAA2E;AAC3E,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,gBAAgB,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AACD,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;AAE7D,wFAAwF;AACxF,eAAO,MAAM,YAAY,kxPA8ExB,CAAC;AAEF,iGAAiG;AACjG,eAAO,MAAM,kBAAkB,QAAmQ,CAAC;AAEnS,iEAAiE;AACjE,eAAO,MAAM,oBAAoB,0EAA+E,CAAC;AAEjH,uGAAuG;AACvG,eAAO,MAAM,mBAAmB,iHAA8G,CAAC;AAK/I,8FAA8F;AAC9F,eAAO,MAAM,kBAAkB,QAA8kB,CAAC;AA6B9mB,oGAAoG;AACpG,UAAU,gBAAgB;IACxB,kGAAkG;IAClG,IAAI,EAAE,CAAC,IAAI,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACtD,4DAA4D;IAC5D,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,QAAQ,EAAE,MAAM,OAAO,CAAC;CACzB;AAED;;;;;GAKG;AACH,qBAAa,YAAY;;gBAoBX,IAAI,EAAE,gBAAgB;IAIlC,IAAI,KAAK,IAAI,YAAY,CAExB;IAED,gGAAgG;IAChG,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,GAAG,SAAS,GAAG,IAAI;IAwD7D,0EAA0E;IAC1E,QAAQ,IAAI,IAAI;IAwChB;iGAC6F;IAC7F,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAkB9B;;;;;;OAMG;IACH,aAAa,IAAI,IAAI;IAwBrB;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,IAAI;CAuCzE;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"presenter-controls.d.ts","sourceRoot":"","sources":["../../src/presenter/presenter-controls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAShF,4FAA4F;AAC5F,QAAA,MAAM,kBAAkB,uBAAuB,CAAC;AAwBhD,yFAAyF;AACzF,eAAO,MAAM,aAAa,OAAO,CAAC;AAKlC;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,2EAA2E;AAC3E,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,gBAAgB,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AACD,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;AAE7D,wFAAwF;AACxF,eAAO,MAAM,YAAY,kxPA8ExB,CAAC;AAEF,iGAAiG;AACjG,eAAO,MAAM,kBAAkB,QAAmQ,CAAC;AAEnS,iEAAiE;AACjE,eAAO,MAAM,oBAAoB,0EAA+E,CAAC;AAEjH,uGAAuG;AACvG,eAAO,MAAM,mBAAmB,iHAA8G,CAAC;AAK/I,8FAA8F;AAC9F,eAAO,MAAM,kBAAkB,QAA8kB,CAAC;AA6B9mB,oGAAoG;AACpG,UAAU,gBAAgB;IACxB,kGAAkG;IAClG,IAAI,EAAE,CAAC,IAAI,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACtD,4DAA4D;IAC5D,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,QAAQ,EAAE,MAAM,OAAO,CAAC;CACzB;AAED;;;;;GAKG;AACH,qBAAa,YAAY;;gBAoBX,IAAI,EAAE,gBAAgB;IAIlC,IAAI,KAAK,IAAI,YAAY,CAExB;IAED,gGAAgG;IAChG,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,GAAG,SAAS,GAAG,IAAI;IAwD7D,0EAA0E;IAC1E,QAAQ,IAAI,IAAI;IAwChB;gGAC4F;IAC5F,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAkB9B;;;;;;OAMG;IACH,aAAa,IAAI,IAAI;IAwBrB;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,IAAI;CAuCzE;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
@@ -32,7 +32,7 @@ const RUN_FILENAME = 'reticle-run.json';
32
32
  /** Border fade-out delay after a session ends (native timer; presenter-only tunable). */
33
33
  export const ENDED_FADE_MS = 4000;
34
34
  /** Max composer height (px) before it scrolls. One source for both the CSS cap and the JS auto-grow
35
- * clamp — they measure the same border-box, so the scrollbar appears exactly when growth stops. */
35
+ * clamp — they measure the same border-box, so the scrollbar appears exactly when growth stops. */
36
36
  const MSG_MAX_H = 96;
37
37
  /** CSS for the control surface (injected with the rest of the presenter stylesheet). */
38
38
  export const CONTROLS_CSS = `
@@ -257,7 +257,7 @@ export class ControlPanel {
257
257
  this.#autosize();
258
258
  }
259
259
  /** Grow the composer to fit its content (up to the CSS max-height), then shrink back — soothing,
260
- * no scrollbar until it's genuinely long. Driven on input and after a send clears the field. */
260
+ * no scrollbar until it's genuinely long. Driven on input and after a send clears the field. */
261
261
  #autosize() {
262
262
  const el = this.#refs.input;
263
263
  if (el === undefined)
@@ -266,7 +266,7 @@ export class ControlPanel {
266
266
  el.style.height = `${String(Math.min(el.scrollHeight, MSG_MAX_H))}px`;
267
267
  }
268
268
  /** Render the replayable-flow chips from the server push. Each ▶ click re-runs that flow, no agent.
269
- * Takes the raw wire value and narrows it here (the panel is the consumer of this push). */
269
+ * Takes the raw wire value and narrows it here (the panel is the consumer of this push). */
270
270
  setFlows(flows) {
271
271
  const list = Array.isArray(flows) ? flows : [];
272
272
  this.#flowItems = list
@@ -1 +1 @@
1
- {"version":3,"file":"presenter-controls.js","sourceRoot":"","sources":["../../src/presenter/presenter-controls.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"presenter-controls.js","sourceRoot":"","sources":["../../src/presenter/presenter-controls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAElF,+FAA+F;AAC/F,qGAAqG;AACrG,+FAA+F;AAC/F,mGAAmG;AACnG,iGAAiG;AAEjG,4FAA4F;AAC5F,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AAChD,wGAAwG;AACxG,MAAM,iBAAiB,GAAG,mBAAmB,CAAC;AAC9C,MAAM,OAAO,GAAG,SAAS,CAAC;AAC1B,MAAM,QAAQ,GAAG,GAAG,CAAC;AAErB,4DAA4D;AAC5D,MAAM,aAAa,GAAG;IACpB,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;IAChB,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;CACJ,CAAC;AACX,MAAM,iBAAiB,GAAG,2BAA2B,CAAC;AACtD,kFAAkF;AAClF,MAAM,gBAAgB,GAAG,sBAAsB,CAAC;AAChD,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AACnC,MAAM,iBAAiB,GAAG,eAAe,CAAC;AAC1C,MAAM,UAAU,GAAG,UAAU,CAAC;AAC9B,MAAM,YAAY,GAAG,QAAQ,CAAC;AAC9B,MAAM,WAAW,GAAG,eAAe,CAAC;AACpC,MAAM,WAAW,GAAG,UAAU,CAAC;AAC/B,oDAAoD;AACpD,MAAM,YAAY,GAAG,kBAAkB,CAAC;AACxC,yFAAyF;AACzF,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC;AAClC;mGACmG;AACnG,MAAM,SAAS,GAAG,EAAE,CAAC;AAkBrB,wFAAwF;AACxF,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;2CAmBe,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2DnD,CAAC;AAEF,iGAAiG;AACjG,MAAM,CAAC,MAAM,kBAAkB,GAAG,gEAAgE,aAAa,CAAC,KAAK,uEAAuE,aAAa,CAAC,GAAG,2DAA2D,iBAAiB,SAAS,CAAC;AAEnS,iEAAiE;AACjE,MAAM,CAAC,MAAM,oBAAoB,GAAG,mDAAmD,iBAAiB,QAAQ,CAAC;AAEjH,uGAAuG;AACvG,MAAM,CAAC,MAAM,mBAAmB,GAAG,iFAAiF,WAAW,eAAe,CAAC;AAE/I,8FAA8F;AAC9F,MAAM,SAAS,GAAG,+QAA+Q,CAAC;AAElS,8FAA8F;AAC9F,MAAM,CAAC,MAAM,kBAAkB,GAAG,8HAA8H,gBAAgB,kBAAkB,iBAAiB,yFAAyF,aAAa,CAAC,IAAI,KAAK,SAAS,0GAA0G,UAAU,0EAA0E,YAAY,uFAAuF,CAAC;AAe9mB,SAAS,gBAAgB,CAAC,IAAiB;IACzC,OAAO;QACL,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAoB,sBAAsB,CAAC,IAAI,SAAS;QACpF,MAAM,EAAE,IAAI,CAAC,aAAa,CAAoB,oBAAoB,CAAC,IAAI,SAAS;QAChF,KAAK,EAAE,IAAI,CAAC,aAAa,CAAsB,sBAAsB,CAAC,IAAI,SAAS;QACnF,OAAO,EAAE,IAAI,CAAC,aAAa,CAAoB,qBAAqB,CAAC,IAAI,SAAS;QAClF,MAAM,EAAE,IAAI,CAAC,aAAa,CAAc,uBAAuB,CAAC,IAAI,SAAS;QAC7E,OAAO,EAAE,IAAI,CAAC,aAAa,CAAoB,qBAAqB,CAAC,IAAI,SAAS;QAClF,SAAS,EAAE,IAAI,CAAC,aAAa,CAAoB,uBAAuB,CAAC,IAAI,SAAS;QACtF,SAAS,EAAE,IAAI,CAAC,aAAa,CAAc,2BAA2B,CAAC,IAAI,SAAS;QACpF,KAAK,EAAE,IAAI,CAAC,aAAa,CAAc,sBAAsB,CAAC,IAAI,SAAS;KAC5E,CAAC;AACJ,CAAC;AAcD;;;;;GAKG;AACH,MAAM,OAAO,YAAY;IACvB,KAAK,GAAgB;QACnB,QAAQ,EAAE,SAAS;QACnB,MAAM,EAAE,SAAS;QACjB,KAAK,EAAE,SAAS;QAChB,OAAO,EAAE,SAAS;QAClB,MAAM,EAAE,SAAS;QACjB,OAAO,EAAE,SAAS;QAClB,SAAS,EAAE,SAAS;QACpB,SAAS,EAAE,SAAS;QACpB,KAAK,EAAE,SAAS;KACjB,CAAC;IACF,MAAM,GAAiB,YAAY,CAAC,MAAM,CAAC;IAC3C,UAAU,CAAqB;IAC/B,KAAK,CAA0B;IAC/B,KAAK,CAA0B;IAC/B,8FAA8F;IAC9F,UAAU,GAAe,EAAE,CAAC;IACnB,KAAK,CAAmB;IAEjC,YAAY,IAAsB;QAChC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,gGAAgG;IAChG,KAAK,CAAC,IAAiB,EAAE,IAA6B;QACpD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QAC5E,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACpE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;YAClD,wFAAwF;YACxF,IAAI,CAAC,YAAY,aAAa,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;gBACnE,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QACpE,gGAAgG;QAChG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;YAChD,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;YACxB,IAAI,CAAC,CAAC,MAAM,YAAY,WAAW,CAAC;gBAAE,OAAO;YAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC,EAAE,YAAY,CAAC,qBAAqB,CAAC,CAAC;YAC1F,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3D,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACjD,CAAC;QACH,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACpE,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QACxE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAED,8DAA8D;IAC9D,QAAQ;QACN,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,2EAA2E;IAC3E,OAAO;QACL,KAAK,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;QACjC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC;YAC9B,GAAG,CAAC,YAAY,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;YACnC,gBAAgB,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,kDAAkD;IAClD,SAAS;QACP,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC;QACvE,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACtC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC;QACb,CAAC,CAAC,QAAQ,GAAG,YAAY,CAAC;QAC1B,CAAC,CAAC,KAAK,EAAE,CAAC;QACV,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,0EAA0E;IAC1E,QAAQ;QACN,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;YAAE,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvE,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,CAAC;IAED,cAAc;QACZ,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM,EAAE,CAAC;YACxC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YACzC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACrC,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM,EAAE,CAAC;YAC/C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACxC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,MAAM;QACJ,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY,CAAC,KAAK;YAAE,OAAO;QAC/C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY,CAAC,KAAK;YAAE,OAAO;QAC/C,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACpD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC9B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS;YAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;QAChE,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAED;oGACgG;IAChG,SAAS;QACP,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAC5B,IAAI,EAAE,KAAK,SAAS;YAAE,OAAO;QAC7B,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QACzB,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC;IACxE,CAAC;IAED;gGAC4F;IAC5F,QAAQ,CAAC,KAAc;QACrB,MAAM,IAAI,GAAc,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,KAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,IAAI,CAAC,UAAU,GAAG,IAAI;aACnB,GAAG,CAAC,CAAC,CAAC,EAAmB,EAAE;YAC1B,IAAI,OAAO,CAAC,KAAK,QAAQ;gBAAE,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACpE,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;gBACxC,MAAM,GAAG,GAAG,CAA4B,CAAC;gBACzC,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;gBACzB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,IAAI,CAAC;gBAC/D,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC3B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;YACpF,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,CAAC,EAAiB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED;;;;;;OAMG;IACH,aAAa;QACX,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED,YAAY;QACV,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAC5B,IAAI,EAAE,KAAK,SAAS;YAAE,OAAO;QAC7B,MAAM,GAAG,GAAG,EAAE,CAAC,aAAa,CAAC;QAC7B,MAAM,OAAO,GAAG,IAAI,GAAG,CACrB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAC5F,CAAC;QACF,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7F,EAAE,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,4BAA4B;QACrG,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YACxC,GAAG,CAAC,IAAI,GAAG,QAAQ,CAAC;YACpB,GAAG,CAAC,SAAS,GAAG,cAAc,CAAC;YAC/B,GAAG,CAAC,YAAY,CAAC,qBAAqB,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,iDAAiD;YACrG,GAAG,CAAC,WAAW,GAAG,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;YACnC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;QACD,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC9D,CAAC;IAED;;;;OAIG;IACH,QAAQ,CAAC,KAAmB,EAAE,IAAa,EAAE,IAAoB;QAC/D,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;QACpD,qGAAqG;QACrG,MAAM,OAAO,GAAG,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,aAAa,CAAC,IAAI,CAAC;QAClE,IAAI,OAAO;YAAE,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;;YAC1D,IAAI,CAAC,KAAK,EAAE,eAAe,CAAC,iBAAiB,CAAC,CAAC;QACpD,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAClC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACpC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC9B,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,MAAM,KAAK,GAAG,KAAK,KAAK,YAAY,CAAC,KAAK,CAAC;QAC3C,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAChC,IAAI,CAAC,QAAQ,CAAC,WAAW;gBACvB,KAAK,KAAK,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC;YAC7E,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,KAAK,CAAC;QACjC,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC5D,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;YAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC9D,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;YAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC1D,oGAAoG;QACpG,6FAA6F;QAC7F,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChF,IAAI,CAAC,MAAM,CAAC,WAAW;gBACrB,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;oBAC3B,CAAC,CAAC,OAAO;oBACT,CAAC,CAAC,GAAG,iBAAiB,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC3E,CAAC;QACD,IAAI,KAAK,EAAE,CAAC;YACV,8FAA8F;YAC9F,gGAAgG;YAChG,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;YACxB,IAAI,CAAC,UAAU,GAAG,gBAAgB,CAAC,GAAG,EAAE;gBACtC,IAAI,EAAE,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YACxC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;CACF;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
@@ -31,7 +31,7 @@ export declare class GlowController {
31
31
  resetActivity(ms: number): void;
32
32
  /**
33
33
  * Record agent activity. Idempotent while busy — only the first activity from idle/fading flips the
34
- * glow on (no strobe). `ms` lets log() read the clock exactly once per row.
34
+ * glow on (no strobe). `ms` lets log read the clock exactly once per row.
35
35
  */
36
36
  markActivity(ms?: number): void;
37
37
  /** Re-arm the quiet-window idle check (kept for reticle.ts's finally block). */
@@ -48,7 +48,7 @@ export class GlowController {
48
48
  }
49
49
  /**
50
50
  * Record agent activity. Idempotent while busy — only the first activity from idle/fading flips the
51
- * glow on (no strobe). `ms` lets log() read the clock exactly once per row.
51
+ * glow on (no strobe). `ms` lets log read the clock exactly once per row.
52
52
  */
53
53
  markActivity(ms = this.#now()) {
54
54
  this.#lastActivityMs = ms;
@@ -3,5 +3,5 @@
3
3
  * Split out of presenter.ts so that file stays a cohesive controller under the size cap; this is
4
4
  * pure style data (no behavior). LOG_CSS + CONTROLS_CSS are composed in at the end as before.
5
5
  */
6
- export declare const PRESENTER_CSS = "\n@import url(\"https://fonts.googleapis.com/css2?family=IBM+Plex+Serif:wght@400;500&family=Inter:wght@400;450;500;600&display=swap\");\n[data-reticle-glow]{position:fixed;inset:0;pointer-events:none;z-index:2147483600;opacity:0;\n transition:opacity .25s ease;box-shadow:inset 0 0 0 3px rgba(99,102,241,.9),inset 0 0 28px 6px rgba(99,102,241,.45);}\n[data-reticle-glow][data-on=\"1\"]{opacity:1;animation:reticle-pulse 1.6s ease-in-out infinite;}\n[data-reticle-glow][data-on=\"1\"][data-busy=\"1\"]{animation:reticle-shimmer 1.1s ease-in-out infinite;}\n@keyframes reticle-pulse{0%,100%{box-shadow:inset 0 0 0 3px rgba(99,102,241,.9),inset 0 0 22px 4px rgba(99,102,241,.35)}\n 50%{box-shadow:inset 0 0 0 3px rgba(124,127,242,1),inset 0 0 40px 10px rgba(99,102,241,.6)}}\n@keyframes reticle-shimmer{0%,100%{box-shadow:inset 0 0 0 3px rgba(124,127,242,1),inset 0 0 34px 8px rgba(99,102,241,.55)}\n 50%{box-shadow:inset 0 0 0 3px rgba(140,142,255,1),inset 0 0 48px 12px rgba(99,102,241,.7)}}\n[data-reticle-cursor]{position:fixed;top:0;left:0;width:22px;height:22px;margin:-11px 0 0 -11px;\n border:2px solid #6366f1;border-radius:50%;background:rgba(99,102,241,.25);pointer-events:none;\n z-index:2147483646;opacity:0;transition:transform .32s cubic-bezier(.22,1,.36,1),opacity .2s ease;}\n[data-reticle-cursor][data-on=\"1\"]{opacity:1;}\n[data-reticle-cursor]::after{content:\"\";position:absolute;inset:7px;border-radius:50%;background:#6366f1;}\n[data-reticle-ripple]{position:fixed;width:14px;height:14px;margin:-7px 0 0 -7px;border-radius:50%;\n background:rgba(99,102,241,.5);pointer-events:none;z-index:2147483645;animation:reticle-ripple .5s ease-out forwards;}\n@keyframes reticle-ripple{from{transform:scale(.4);opacity:.8}to{transform:scale(5);opacity:0}}\n[data-reticle-ring]{position:fixed;pointer-events:none;z-index:2147483644;border:2px solid #22c55e;border-radius:8px;\n box-shadow:0 0 0 3px rgba(34,197,94,.25);opacity:0;transition:opacity .15s ease;}\n[data-reticle-ring][data-on=\"1\"]{opacity:1;}\n[data-reticle-hud]{\n --reticle-accent:#7c83ff;--reticle-accent-soft:rgba(124,131,255,.16);\n --reticle-bg:rgba(13,15,22,.80);--reticle-bg2:rgba(19,22,32,.74);\n --reticle-fg:#e9ebf2;--reticle-muted:#9aa0b2;--reticle-faint:#6a7186;\n --reticle-line:rgba(255,255,255,.09);--reticle-line2:rgba(255,255,255,.05);\n --reticle-read:#54d2e6;--reticle-ok:#3dd7a6;--reticle-bad:#ff7a7a;\n --reticle-font:\"Inter\",system-ui,-apple-system,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif;\n --reticle-serif:\"IBM Plex Serif\",Georgia,\"Times New Roman\",serif;\n position:fixed;left:50%;right:auto;bottom:20px;box-sizing:border-box;\n width:384px;height:468px;max-width:calc(100vw - 32px);max-height:calc(100vh - 32px);\n display:flex;flex-direction:column;overflow:hidden;text-align:left;z-index:2147483647;pointer-events:none;\n font-family:var(--reticle-font);font-size:13px;line-height:1.5;color:var(--reticle-fg);-webkit-font-smoothing:antialiased;\n background:linear-gradient(180deg,var(--reticle-bg),var(--reticle-bg2));\n -webkit-backdrop-filter:blur(24px) saturate(1.5);backdrop-filter:blur(24px) saturate(1.5);\n border:1px solid var(--reticle-line);border-radius:20px;\n box-shadow:0 28px 70px -18px rgba(0,0,0,.66),0 0 0 1px rgba(0,0,0,.35),inset 0 1px 0 rgba(255,255,255,.07),0 0 54px -22px var(--reticle-accent);\n opacity:0;transform:translateX(-50%) translateY(14px) scale(.985);\n transition:opacity .3s ease,transform .42s cubic-bezier(.16,1,.3,1),height .42s cubic-bezier(.16,1,.3,1),border-radius .42s ease,box-shadow .35s ease;}\n[data-reticle-overlay][data-reticle-state=\"paused\"] [data-reticle-hud]{--reticle-accent:#f6b44c;--reticle-accent-soft:rgba(246,180,76,.16);}\n[data-reticle-overlay][data-reticle-state=\"ended\"] [data-reticle-hud]{--reticle-accent:#3dd7a6;--reticle-accent-soft:rgba(61,215,166,.14);}\n[data-reticle-hud]::before{content:\"\";position:absolute;inset:0;border-radius:inherit;pointer-events:none;\n background:radial-gradient(130% 90% at 50% 0%,var(--reticle-accent-soft),transparent 60%);}\n[data-reticle-hud]>*{position:relative;}\n[data-reticle-hud][data-on=\"1\"]{opacity:1;transform:translateX(-50%) translateY(0) scale(1);}\n/* Click-through: the glassy panel itself never blocks the app \u2014 only its interactive controls\n capture clicks (buttons / inputs), so a human can click straight through the HUD to the page.\n The log auto-scrolls, so it stays click-through too (drag-scroll is traded for click-through). */\n[data-reticle-hud] button,[data-reticle-hud] input,[data-reticle-hud] textarea,\n[data-reticle-hud] select,[data-reticle-hud] [contenteditable]{pointer-events:auto;}\n/* When minimised to a pill, the whole bar is the (single) click target to restore. */\n[data-reticle-overlay][data-reticle-min=\"1\"] [data-reticle-hud][data-on=\"1\"]{pointer-events:auto;}\n[data-reticle-hud] .reticle-hud-head{display:flex;align-items:center;gap:8px;flex:none;\n padding:12px 12px 12px 15px;border-bottom:1px solid var(--reticle-line2);}\n[data-reticle-hud] .reticle-dot{width:9px;height:9px;border-radius:50%;flex:none;background:var(--reticle-accent);\n animation:reticle-breathe 2.6s ease-in-out infinite;}\n@keyframes reticle-breathe{0%,100%{box-shadow:0 0 0 0 var(--reticle-accent),0 0 7px 1px var(--reticle-accent);opacity:.85}\n 50%{box-shadow:0 0 0 4px var(--reticle-accent-soft),0 0 15px 3px var(--reticle-accent);opacity:1}}\n[data-reticle-hud] .reticle-brand{font-family:var(--reticle-serif);font-weight:500;font-size:15px;letter-spacing:.01em;color:var(--reticle-fg);}\n[data-reticle-hud] .reticle-head-sp{flex:1;}\n[data-reticle-hud] .reticle-live{display:none;flex:1;min-width:0;color:var(--reticle-muted);font-size:12.5px;\n white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}\n[data-reticle-hud] .reticle-maxhint{display:none;flex:none;color:var(--reticle-faint);font-size:13px;line-height:1;}\n[data-reticle-hud] .reticle-act-strip{flex:none;padding:7px 15px;border-bottom:1px solid var(--reticle-line2);background:rgba(0,0,0,.14);}\n[data-reticle-hud] .reticle-act{display:block;color:var(--reticle-muted);font-size:11.5px;\n white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}\n[data-reticle-hud] [data-reticle-min-btn]{flex:none;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;\n width:26px;height:26px;border-radius:8px;border:1px solid var(--reticle-line);background:rgba(255,255,255,.04);\n color:var(--reticle-muted);font-size:15px;line-height:1;transition:background .15s,color .15s,transform .1s;}\n[data-reticle-hud] [data-reticle-min-btn]:hover{color:var(--reticle-fg);background:rgba(255,255,255,.08);}\n[data-reticle-hud] [data-reticle-min-btn]:active{transform:scale(.94);}\n[data-reticle-hud] .reticle-pass{color:var(--reticle-ok);}[data-reticle-hud] .reticle-fail{color:var(--reticle-bad);}\n[data-reticle-hud] .reticle-tally{flex:none;display:inline-flex;align-items:center;gap:8px;font-size:11.5px;\n font-weight:600;font-variant-numeric:tabular-nums;letter-spacing:.01em;}\n[data-reticle-hud] .reticle-tally[hidden]{display:none;}\n[data-reticle-hud] .reticle-tally .reticle-t-pass{color:var(--reticle-ok);}\n[data-reticle-hud] .reticle-tally .reticle-t-fail{color:var(--reticle-bad);}\n[data-reticle-hud] .reticle-tally [data-z=\"1\"]{opacity:.4;}\n@keyframes reticle-tally-pop{0%{transform:scale(1)}38%{transform:scale(1.3)}100%{transform:scale(1)}}\n[data-reticle-hud] .reticle-tally [data-bump=\"1\"]{display:inline-block;animation:reticle-tally-pop .36s cubic-bezier(.16,1,.3,1);}\n[data-reticle-hud] .reticle-chip{display:none;flex:none;font-size:9px;font-weight:600;letter-spacing:.08em;\n padding:2px 7px;border-radius:6px;vertical-align:middle;}\n[data-reticle-hud] .reticle-chip[data-mode=\"reading\"]{display:inline-block;color:var(--reticle-read);\n background:rgba(84,210,230,.12);border:1px solid rgba(84,210,230,.32);}\n[data-reticle-hud] .reticle-chip[data-mode=\"acting\"]{display:inline-block;color:var(--reticle-accent);\n background:var(--reticle-accent-soft);border:1px solid var(--reticle-accent);}\n[data-reticle-hud] .reticle-chip[data-mode=\"idle\"]{display:none;}\n[data-reticle-overlay][data-reticle-min=\"1\"] [data-reticle-hud]{height:50px;border-radius:25px;cursor:pointer;}\n[data-reticle-overlay][data-reticle-min=\"1\"] [data-reticle-hud] .reticle-hud-head{border-bottom:none;height:50px;padding:0 12px 0 16px;}\n[data-reticle-overlay][data-reticle-min=\"1\"] [data-reticle-hud] .reticle-brand,\n[data-reticle-overlay][data-reticle-min=\"1\"] [data-reticle-hud] .reticle-chip,\n[data-reticle-overlay][data-reticle-min=\"1\"] [data-reticle-hud] .reticle-head-sp,\n[data-reticle-overlay][data-reticle-min=\"1\"] [data-reticle-hud] [data-reticle-min-btn],\n[data-reticle-overlay][data-reticle-min=\"1\"] [data-reticle-hud] .reticle-ctl,\n[data-reticle-overlay][data-reticle-min=\"1\"] [data-reticle-hud] .reticle-badge,\n[data-reticle-overlay][data-reticle-min=\"1\"] [data-reticle-hud] .reticle-act-strip,\n[data-reticle-overlay][data-reticle-min=\"1\"] [data-reticle-hud] [data-reticle-log],\n[data-reticle-overlay][data-reticle-min=\"1\"] [data-reticle-hud] [data-reticle-foot],\n[data-reticle-overlay][data-reticle-min=\"1\"] [data-reticle-hud] .reticle-banner{display:none;}\n[data-reticle-overlay][data-reticle-min=\"1\"] [data-reticle-hud] .reticle-live{display:block;}\n[data-reticle-overlay][data-reticle-min=\"1\"] [data-reticle-hud] .reticle-maxhint{display:inline-flex;}\n[data-reticle-mode=\"reading\"] [data-reticle-glow][data-on=\"1\"]{\n box-shadow:inset 0 0 0 3px rgba(34,211,238,.9),inset 0 0 28px 6px rgba(34,211,238,.4);}\n[data-reticle-mode=\"reading\"] [data-reticle-ring]{border-color:#22d3ee;\n box-shadow:0 0 0 3px rgba(34,211,238,.25);}\n[data-reticle-overlay][data-reticle-throttled=\"1\"] [data-reticle-glow][data-on=\"1\"]{\n box-shadow:inset 0 0 0 3px rgba(251,191,36,.9),inset 0 0 28px 6px rgba(251,191,36,.45);}\n[data-reticle-overlay][data-reticle-throttled=\"1\"] [data-reticle-hud]{--reticle-accent:#fbbf24;--reticle-accent-soft:rgba(251,191,36,.16);}\n\n[data-reticle-log]{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;display:flex;flex-direction:column;\n gap:7px;padding:12px 14px;scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.16) transparent;}\n[data-reticle-log]::-webkit-scrollbar{width:9px;}\n[data-reticle-log]::-webkit-scrollbar-thumb{background:rgba(255,255,255,.14);border-radius:9px;border:2px solid transparent;background-clip:content-box;}\n[data-reticle-log]::-webkit-scrollbar-thumb:hover{background:rgba(255,255,255,.26);background-clip:content-box;}\n[data-reticle-log-row]{display:flex;align-items:baseline;gap:8px;font-size:12px;line-height:1.45;\n animation:reticle-row-in .26s cubic-bezier(.16,1,.3,1);}\n@keyframes reticle-row-in{from{opacity:0;transform:translateY(5px);}to{opacity:1;transform:none;}}\n[data-reticle-log-ts]{flex:none;color:var(--reticle-faint);font-size:10px;font-variant-numeric:tabular-nums;padding-top:1px;}\n[data-reticle-log] .reticle-log-text{flex:1;min-width:0;color:#d6dae4;overflow-wrap:anywhere;word-break:break-word;}\n[data-reticle-log] .reticle-res{flex:none;font-weight:700;}\n[data-reticle-log-row][data-kind=\"human\"]{align-self:flex-end;max-width:88%;\n background:var(--reticle-accent-soft);border:1px solid var(--reticle-accent);border-radius:13px 13px 4px 13px;padding:6px 11px;}\n[data-reticle-log-row][data-kind=\"human\"] [data-reticle-log-ts]{display:none;}\n[data-reticle-log-row][data-kind=\"human\"] .reticle-log-text{color:var(--reticle-fg);}\n\n\n[data-reticle-hud] .reticle-ctl{pointer-events:auto;cursor:pointer;flex:none;display:inline-flex;align-items:center;justify-content:center;\n height:26px;padding:0 11px;border-radius:8px;border:1px solid var(--reticle-line);background:rgba(255,255,255,.04);\n color:var(--reticle-muted);font-family:var(--reticle-font);font-size:11px;font-weight:500;letter-spacing:.01em;line-height:1;\n transition:background .15s,color .15s,border-color .15s,transform .1s;}\n[data-reticle-hud] .reticle-ctl:hover{color:var(--reticle-fg);background:rgba(255,255,255,.09);}\n[data-reticle-hud] .reticle-ctl:active{transform:scale(.95);}\n[data-reticle-hud] .reticle-ctl:disabled{opacity:.35;cursor:default;}\n[data-reticle-hud] [data-reticle-end]{color:#ff9aa2;border-color:rgba(255,107,107,.22);}\n[data-reticle-hud] [data-reticle-end]:hover{color:#ff7a7a;border-color:rgba(255,107,107,.5);background:rgba(255,107,107,.1);}\n[data-reticle-hud] .reticle-badge{display:none;align-items:center;flex:none;font-weight:600;letter-spacing:.1em;font-size:9px;\n color:var(--reticle-accent);border:1px solid var(--reticle-accent);background:var(--reticle-accent-soft);padding:2px 8px;border-radius:999px;}\n[data-reticle-overlay][data-reticle-state=\"paused\"] [data-reticle-badge]{display:inline-flex;}\n[data-reticle-hud] [data-reticle-foot]{flex:none;padding:10px 12px 12px;border-top:1px solid var(--reticle-line2);background:rgba(0,0,0,.16);}\n[data-reticle-hud] .reticle-composer{display:flex;align-items:flex-end;gap:6px;background:rgba(255,255,255,.05);\n border:1px solid var(--reticle-line);border-radius:14px;padding:5px 6px 5px 14px;transition:border-color .15s,box-shadow .15s;}\n[data-reticle-hud] .reticle-composer:focus-within{border-color:var(--reticle-accent);box-shadow:0 0 0 3px var(--reticle-accent-soft);}\n[data-reticle-hud] .reticle-msg{flex:1;min-width:0;pointer-events:auto;background:transparent;border:none;outline:none;resize:none;\n box-sizing:border-box;color:var(--reticle-fg);font-family:var(--reticle-font);font-size:13px;line-height:18px;\n height:28px;min-height:28px;max-height:96px;padding:5px 0;overflow-y:auto;\n scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.14) transparent;}\n[data-reticle-hud] .reticle-msg::-webkit-scrollbar{width:9px;}\n[data-reticle-hud] .reticle-msg::-webkit-scrollbar-thumb{background:rgba(255,255,255,.14);border-radius:9px;border:2px solid transparent;background-clip:content-box;}\n[data-reticle-hud] .reticle-msg::placeholder{color:var(--reticle-faint);}\n[data-reticle-hud] .reticle-msg:disabled{opacity:.5;}\n[data-reticle-hud] .reticle-send{flex:none;width:30px;height:30px;padding:0;border-radius:10px;border:none;cursor:pointer;pointer-events:auto;\n background:var(--reticle-accent);color:#0b0d14;display:inline-flex;align-items:center;justify-content:center;transition:filter .15s,transform .1s;}\n[data-reticle-hud] .reticle-send svg{display:block;}\n[data-reticle-hud] .reticle-send:hover{filter:brightness(1.12);}\n[data-reticle-hud] .reticle-send:active{transform:scale(.9);}\n[data-reticle-hud] .reticle-send:disabled{opacity:.4;cursor:default;}\n[data-reticle-hud] .reticle-banner{display:none;flex:none;padding:8px 15px;color:var(--reticle-accent);\n font-size:11.5px;font-weight:500;border-bottom:1px solid var(--reticle-line2);background:var(--reticle-accent-soft);}\n[data-reticle-overlay][data-reticle-state=\"ended\"] [data-reticle-banner]{display:block;}\n/* Export row: hidden during a live session; revealed when ended so the run can be copied/saved. */\n[data-reticle-hud] .reticle-export{display:none;align-items:center;gap:8px;margin-top:9px;}\n[data-reticle-overlay][data-reticle-state=\"ended\"] [data-reticle-hud] .reticle-export{display:flex;}\n[data-reticle-hud] .reticle-export-msg{color:var(--reticle-ok);font-size:11px;opacity:0;transition:opacity .15s;}\n[data-reticle-hud] .reticle-export-msg[data-show=\"1\"]{opacity:1;}\n[data-reticle-overlay][data-reticle-state=\"paused\"] [data-reticle-glow][data-on=\"1\"]{animation:none;\n box-shadow:inset 0 0 0 3px rgba(246,180,76,.9),inset 0 0 30px 6px rgba(246,180,76,.4);}\n[data-reticle-overlay][data-reticle-state=\"ended\"] [data-reticle-glow][data-on=\"1\"]{animation:none;\n box-shadow:inset 0 0 0 2px rgba(61,215,166,.55);}\n/* Handoff tones tell the human the agent's mode at a glance. waiting = calm teal \"your turn\" (no\n alarm); ask = amber \"answer me\" with a pulse; warn = amber \"agent crashed\" with a pulse. Each leads\n the banner with an icon and overrides the calm ended-green accent. */\n[data-reticle-overlay][data-reticle-tone=\"waiting\"] [data-reticle-hud]{--reticle-accent:#38bdf8;--reticle-accent-soft:rgba(56,189,248,.16);}\n[data-reticle-overlay][data-reticle-tone=\"waiting\"] [data-reticle-banner]{font-weight:600;color:#7dd3fc;}\n[data-reticle-overlay][data-reticle-tone=\"waiting\"] [data-reticle-banner]::before{content:\"\\270B \";}\n[data-reticle-overlay][data-reticle-tone=\"waiting\"] [data-reticle-glow][data-on=\"1\"]{animation:none;\n box-shadow:inset 0 0 0 2px rgba(56,189,248,.5);}\n[data-reticle-overlay][data-reticle-tone=\"ask\"] [data-reticle-hud],\n[data-reticle-overlay][data-reticle-tone=\"warn\"] [data-reticle-hud]{--reticle-accent:#fb923c;--reticle-accent-soft:rgba(251,146,60,.18);}\n[data-reticle-overlay][data-reticle-tone=\"ask\"] [data-reticle-banner],\n[data-reticle-overlay][data-reticle-tone=\"warn\"] [data-reticle-banner]{font-weight:600;color:#fdba74;}\n[data-reticle-overlay][data-reticle-tone=\"ask\"] [data-reticle-banner]::before{content:\"\\2753 \";}\n[data-reticle-overlay][data-reticle-tone=\"warn\"] [data-reticle-banner]::before{content:\"\\26A0\\FE0F \";}\n[data-reticle-overlay][data-reticle-tone=\"ask\"] [data-reticle-glow][data-on=\"1\"],\n[data-reticle-overlay][data-reticle-tone=\"warn\"] [data-reticle-glow][data-on=\"1\"]{animation:reticle-warn-pulse 1.5s ease-in-out infinite;\n box-shadow:inset 0 0 0 2px rgba(251,146,60,.7);}\n@keyframes reticle-warn-pulse{0%,100%{box-shadow:inset 0 0 0 2px rgba(251,146,60,.32);}\n 50%{box-shadow:inset 0 0 0 3px rgba(251,146,60,.85),inset 0 0 26px 5px rgba(251,146,60,.34);}}\n/* Replay-a-flow row: the human re-runs a saved flow with no agent. Hidden until flows are pushed.\n Bounded + self-scrolling: it sits between the flex:1 log and the flex:none composer, so without a\n height cap a long flow list would squeeze the log to nothing and push the message input past the\n panel's overflow:hidden clip. flex:none + max-height + overflow-y keep the log and input always\n visible; extra flow chips scroll inside this section instead of growing the panel. */\n[data-reticle-hud] .reticle-flows{display:none;flex:none;flex-wrap:wrap;align-content:flex-start;gap:6px;\n padding:9px 12px;border-top:1px solid var(--reticle-line2);max-height:88px;overflow-y:auto;overscroll-behavior:contain;}\n[data-reticle-hud] .reticle-flows[data-has=\"1\"]{display:flex;}\n[data-reticle-hud] .reticle-flows::-webkit-scrollbar{width:9px;}\n[data-reticle-hud] .reticle-flows::-webkit-scrollbar-thumb{background:rgba(255,255,255,.14);border-radius:9px;border:2px solid transparent;background-clip:content-box;}\n[data-reticle-hud] .reticle-flows-cap{flex:0 0 100%;margin-bottom:1px;color:var(--reticle-faint);font-size:9.5px;letter-spacing:.09em;text-transform:uppercase;}\n[data-reticle-hud] .reticle-flow{pointer-events:auto;cursor:pointer;display:inline-flex;align-items:center;gap:5px;height:24px;padding:0 10px;\n border-radius:7px;border:1px solid var(--reticle-line);background:rgba(255,255,255,.04);color:var(--reticle-muted);\n font-family:var(--reticle-font);font-size:11px;font-weight:500;transition:background .15s,color .15s,border-color .15s,transform .1s;}\n[data-reticle-hud] .reticle-flow:hover{color:var(--reticle-fg);background:var(--reticle-accent-soft);border-color:var(--reticle-accent);}\n[data-reticle-hud] .reticle-flow:active{transform:scale(.95);}\n";
6
+ export declare const PRESENTER_CSS = "\n[data-reticle-glow]{position:fixed;inset:0;pointer-events:none;z-index:2147483600;opacity:0;\n transition:opacity .25s ease;box-shadow:inset 0 0 0 3px rgba(99,102,241,.9),inset 0 0 28px 6px rgba(99,102,241,.45);}\n[data-reticle-glow][data-on=\"1\"]{opacity:1;animation:reticle-pulse 1.6s ease-in-out infinite;}\n[data-reticle-glow][data-on=\"1\"][data-busy=\"1\"]{animation:reticle-shimmer 1.1s ease-in-out infinite;}\n@keyframes reticle-pulse{0%,100%{box-shadow:inset 0 0 0 3px rgba(99,102,241,.9),inset 0 0 22px 4px rgba(99,102,241,.35)}\n 50%{box-shadow:inset 0 0 0 3px rgba(124,127,242,1),inset 0 0 40px 10px rgba(99,102,241,.6)}}\n@keyframes reticle-shimmer{0%,100%{box-shadow:inset 0 0 0 3px rgba(124,127,242,1),inset 0 0 34px 8px rgba(99,102,241,.55)}\n 50%{box-shadow:inset 0 0 0 3px rgba(140,142,255,1),inset 0 0 48px 12px rgba(99,102,241,.7)}}\n[data-reticle-cursor]{position:fixed;top:0;left:0;width:22px;height:22px;margin:-11px 0 0 -11px;\n border:2px solid #6366f1;border-radius:50%;background:rgba(99,102,241,.25);pointer-events:none;\n z-index:2147483646;opacity:0;transition:transform .32s cubic-bezier(.22,1,.36,1),opacity .2s ease;}\n[data-reticle-cursor][data-on=\"1\"]{opacity:1;}\n[data-reticle-cursor]::after{content:\"\";position:absolute;inset:7px;border-radius:50%;background:#6366f1;}\n[data-reticle-ripple]{position:fixed;width:14px;height:14px;margin:-7px 0 0 -7px;border-radius:50%;\n background:rgba(99,102,241,.5);pointer-events:none;z-index:2147483645;animation:reticle-ripple .5s ease-out forwards;}\n@keyframes reticle-ripple{from{transform:scale(.4);opacity:.8}to{transform:scale(5);opacity:0}}\n[data-reticle-ring]{position:fixed;pointer-events:none;z-index:2147483644;border:2px solid #22c55e;border-radius:8px;\n box-shadow:0 0 0 3px rgba(34,197,94,.25);opacity:0;transition:opacity .15s ease;}\n[data-reticle-ring][data-on=\"1\"]{opacity:1;}\n[data-reticle-hud]{\n --reticle-accent:#7c83ff;--reticle-accent-soft:rgba(124,131,255,.16);\n --reticle-bg:rgba(13,15,22,.92);--reticle-bg2:rgba(19,22,32,.88);\n --reticle-fg:#e9ebf2;--reticle-muted:#9aa0b2;--reticle-faint:#6a7186;\n --reticle-line:rgba(255,255,255,.09);--reticle-line2:rgba(255,255,255,.05);\n --reticle-read:#54d2e6;--reticle-ok:#3dd7a6;--reticle-bad:#ff7a7a;\n --reticle-font:\"Inter\",system-ui,-apple-system,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif;\n --reticle-serif:\"IBM Plex Serif\",Georgia,\"Times New Roman\",serif;\n position:fixed;left:50%;right:auto;bottom:20px;box-sizing:border-box;\n width:384px;height:468px;max-width:calc(100vw - 32px);max-height:calc(100vh - 32px);\n display:flex;flex-direction:column;overflow:hidden;text-align:left;z-index:2147483647;pointer-events:none;\n font-family:var(--reticle-font);font-size:13px;line-height:1.5;color:var(--reticle-fg);-webkit-font-smoothing:antialiased;\n background:linear-gradient(180deg,var(--reticle-bg),var(--reticle-bg2));\n /* No backdrop-filter here, deliberately. blur(24px) on this panel was measured as the single most\n expensive thing the whole SDK does: a backdrop blur must re-sample everything behind it whenever\n that content changes, and on a page repainting at 60fps that is continuous full-panel work. On\n the hostile fixture it cost +4.0pp of main thread \u2014 five times the rest of the presenter, and\n more than every observer combined. Removing it took total main-thread time from 2.15s to 1.67s\n over an 8s window. The panel background is ~85% opaque, so the glass effect it bought was\n marginal. If you want it back, add it here and expect to pay that. */\n border:1px solid var(--reticle-line);border-radius:20px;\n box-shadow:0 28px 70px -18px rgba(0,0,0,.66),0 0 0 1px rgba(0,0,0,.35),inset 0 1px 0 rgba(255,255,255,.07),0 0 54px -22px var(--reticle-accent);\n opacity:0;transform:translateX(-50%) translateY(14px) scale(.985);\n transition:opacity .3s ease,transform .42s cubic-bezier(.16,1,.3,1),height .42s cubic-bezier(.16,1,.3,1),border-radius .42s ease,box-shadow .35s ease;}\n[data-reticle-overlay][data-reticle-state=\"paused\"] [data-reticle-hud]{--reticle-accent:#f6b44c;--reticle-accent-soft:rgba(246,180,76,.16);}\n[data-reticle-overlay][data-reticle-state=\"ended\"] [data-reticle-hud]{--reticle-accent:#3dd7a6;--reticle-accent-soft:rgba(61,215,166,.14);}\n[data-reticle-hud]::before{content:\"\";position:absolute;inset:0;border-radius:inherit;pointer-events:none;\n background:radial-gradient(130% 90% at 50% 0%,var(--reticle-accent-soft),transparent 60%);}\n[data-reticle-hud]>*{position:relative;}\n[data-reticle-hud][data-on=\"1\"]{opacity:1;transform:translateX(-50%) translateY(0) scale(1);}\n/* Click-through: the glassy panel itself never blocks the app \u2014 only its interactive controls\n capture clicks (buttons / inputs), so a human can click straight through the HUD to the page.\n The log auto-scrolls, so it stays click-through too (drag-scroll is traded for click-through). */\n[data-reticle-hud] button,[data-reticle-hud] input,[data-reticle-hud] textarea,\n[data-reticle-hud] select,[data-reticle-hud] [contenteditable]{pointer-events:auto;}\n/* When minimised to a pill, the whole bar is the (single) click target to restore. */\n[data-reticle-overlay][data-reticle-min=\"1\"] [data-reticle-hud][data-on=\"1\"]{pointer-events:auto;}\n[data-reticle-hud] .reticle-hud-head{display:flex;align-items:center;gap:8px;flex:none;\n padding:12px 12px 12px 15px;border-bottom:1px solid var(--reticle-line2);}\n[data-reticle-hud] .reticle-dot{width:9px;height:9px;border-radius:50%;flex:none;background:var(--reticle-accent);\n animation:reticle-breathe 2.6s ease-in-out infinite;}\n@keyframes reticle-breathe{0%,100%{box-shadow:0 0 0 0 var(--reticle-accent),0 0 7px 1px var(--reticle-accent);opacity:.85}\n 50%{box-shadow:0 0 0 4px var(--reticle-accent-soft),0 0 15px 3px var(--reticle-accent);opacity:1}}\n[data-reticle-hud] .reticle-brand{font-family:var(--reticle-serif);font-weight:500;font-size:15px;letter-spacing:.01em;color:var(--reticle-fg);}\n[data-reticle-hud] .reticle-head-sp{flex:1;}\n[data-reticle-hud] .reticle-live{display:none;flex:1;min-width:0;color:var(--reticle-muted);font-size:12.5px;\n white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}\n[data-reticle-hud] .reticle-maxhint{display:none;flex:none;color:var(--reticle-faint);font-size:13px;line-height:1;}\n[data-reticle-hud] .reticle-act-strip{flex:none;padding:7px 15px;border-bottom:1px solid var(--reticle-line2);background:rgba(0,0,0,.14);}\n[data-reticle-hud] .reticle-act{display:block;color:var(--reticle-muted);font-size:11.5px;\n white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}\n[data-reticle-hud] [data-reticle-min-btn]{flex:none;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;\n width:26px;height:26px;border-radius:8px;border:1px solid var(--reticle-line);background:rgba(255,255,255,.04);\n color:var(--reticle-muted);font-size:15px;line-height:1;transition:background .15s,color .15s,transform .1s;}\n[data-reticle-hud] [data-reticle-min-btn]:hover{color:var(--reticle-fg);background:rgba(255,255,255,.08);}\n[data-reticle-hud] [data-reticle-min-btn]:active{transform:scale(.94);}\n[data-reticle-hud] .reticle-pass{color:var(--reticle-ok);}[data-reticle-hud] .reticle-fail{color:var(--reticle-bad);}\n[data-reticle-hud] .reticle-tally{flex:none;display:inline-flex;align-items:center;gap:8px;font-size:11.5px;\n font-weight:600;font-variant-numeric:tabular-nums;letter-spacing:.01em;}\n[data-reticle-hud] .reticle-tally[hidden]{display:none;}\n[data-reticle-hud] .reticle-tally .reticle-t-pass{color:var(--reticle-ok);}\n[data-reticle-hud] .reticle-tally .reticle-t-fail{color:var(--reticle-bad);}\n[data-reticle-hud] .reticle-tally [data-z=\"1\"]{opacity:.4;}\n@keyframes reticle-tally-pop{0%{transform:scale(1)}38%{transform:scale(1.3)}100%{transform:scale(1)}}\n[data-reticle-hud] .reticle-tally [data-bump=\"1\"]{display:inline-block;animation:reticle-tally-pop .36s cubic-bezier(.16,1,.3,1);}\n[data-reticle-hud] .reticle-chip{display:none;flex:none;font-size:9px;font-weight:600;letter-spacing:.08em;\n padding:2px 7px;border-radius:6px;vertical-align:middle;}\n[data-reticle-hud] .reticle-chip[data-mode=\"reading\"]{display:inline-block;color:var(--reticle-read);\n background:rgba(84,210,230,.12);border:1px solid rgba(84,210,230,.32);}\n[data-reticle-hud] .reticle-chip[data-mode=\"acting\"]{display:inline-block;color:var(--reticle-accent);\n background:var(--reticle-accent-soft);border:1px solid var(--reticle-accent);}\n[data-reticle-hud] .reticle-chip[data-mode=\"idle\"]{display:none;}\n[data-reticle-overlay][data-reticle-min=\"1\"] [data-reticle-hud]{height:50px;border-radius:25px;cursor:pointer;}\n[data-reticle-overlay][data-reticle-min=\"1\"] [data-reticle-hud] .reticle-hud-head{border-bottom:none;height:50px;padding:0 12px 0 16px;}\n[data-reticle-overlay][data-reticle-min=\"1\"] [data-reticle-hud] .reticle-brand,\n[data-reticle-overlay][data-reticle-min=\"1\"] [data-reticle-hud] .reticle-chip,\n[data-reticle-overlay][data-reticle-min=\"1\"] [data-reticle-hud] .reticle-head-sp,\n[data-reticle-overlay][data-reticle-min=\"1\"] [data-reticle-hud] [data-reticle-min-btn],\n[data-reticle-overlay][data-reticle-min=\"1\"] [data-reticle-hud] .reticle-ctl,\n[data-reticle-overlay][data-reticle-min=\"1\"] [data-reticle-hud] .reticle-badge,\n[data-reticle-overlay][data-reticle-min=\"1\"] [data-reticle-hud] .reticle-act-strip,\n[data-reticle-overlay][data-reticle-min=\"1\"] [data-reticle-hud] [data-reticle-log],\n[data-reticle-overlay][data-reticle-min=\"1\"] [data-reticle-hud] [data-reticle-foot],\n[data-reticle-overlay][data-reticle-min=\"1\"] [data-reticle-hud] .reticle-banner{display:none;}\n[data-reticle-overlay][data-reticle-min=\"1\"] [data-reticle-hud] .reticle-live{display:block;}\n[data-reticle-overlay][data-reticle-min=\"1\"] [data-reticle-hud] .reticle-maxhint{display:inline-flex;}\n[data-reticle-mode=\"reading\"] [data-reticle-glow][data-on=\"1\"]{\n box-shadow:inset 0 0 0 3px rgba(34,211,238,.9),inset 0 0 28px 6px rgba(34,211,238,.4);}\n[data-reticle-mode=\"reading\"] [data-reticle-ring]{border-color:#22d3ee;\n box-shadow:0 0 0 3px rgba(34,211,238,.25);}\n[data-reticle-overlay][data-reticle-throttled=\"1\"] [data-reticle-glow][data-on=\"1\"]{\n box-shadow:inset 0 0 0 3px rgba(251,191,36,.9),inset 0 0 28px 6px rgba(251,191,36,.45);}\n[data-reticle-overlay][data-reticle-throttled=\"1\"] [data-reticle-hud]{--reticle-accent:#fbbf24;--reticle-accent-soft:rgba(251,191,36,.16);}\n\n[data-reticle-log]{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;display:flex;flex-direction:column;\n gap:7px;padding:12px 14px;scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.16) transparent;}\n[data-reticle-log]::-webkit-scrollbar{width:9px;}\n[data-reticle-log]::-webkit-scrollbar-thumb{background:rgba(255,255,255,.14);border-radius:9px;border:2px solid transparent;background-clip:content-box;}\n[data-reticle-log]::-webkit-scrollbar-thumb:hover{background:rgba(255,255,255,.26);background-clip:content-box;}\n[data-reticle-log-row]{display:flex;align-items:baseline;gap:8px;font-size:12px;line-height:1.45;\n animation:reticle-row-in .26s cubic-bezier(.16,1,.3,1);}\n@keyframes reticle-row-in{from{opacity:0;transform:translateY(5px);}to{opacity:1;transform:none;}}\n[data-reticle-log-ts]{flex:none;color:var(--reticle-faint);font-size:10px;font-variant-numeric:tabular-nums;padding-top:1px;}\n[data-reticle-log] .reticle-log-text{flex:1;min-width:0;color:#d6dae4;overflow-wrap:anywhere;word-break:break-word;}\n[data-reticle-log] .reticle-res{flex:none;font-weight:700;}\n[data-reticle-log-row][data-kind=\"human\"]{align-self:flex-end;max-width:88%;\n background:var(--reticle-accent-soft);border:1px solid var(--reticle-accent);border-radius:13px 13px 4px 13px;padding:6px 11px;}\n[data-reticle-log-row][data-kind=\"human\"] [data-reticle-log-ts]{display:none;}\n[data-reticle-log-row][data-kind=\"human\"] .reticle-log-text{color:var(--reticle-fg);}\n\n\n[data-reticle-hud] .reticle-ctl{pointer-events:auto;cursor:pointer;flex:none;display:inline-flex;align-items:center;justify-content:center;\n height:26px;padding:0 11px;border-radius:8px;border:1px solid var(--reticle-line);background:rgba(255,255,255,.04);\n color:var(--reticle-muted);font-family:var(--reticle-font);font-size:11px;font-weight:500;letter-spacing:.01em;line-height:1;\n transition:background .15s,color .15s,border-color .15s,transform .1s;}\n[data-reticle-hud] .reticle-ctl:hover{color:var(--reticle-fg);background:rgba(255,255,255,.09);}\n[data-reticle-hud] .reticle-ctl:active{transform:scale(.95);}\n[data-reticle-hud] .reticle-ctl:disabled{opacity:.35;cursor:default;}\n[data-reticle-hud] [data-reticle-end]{color:#ff9aa2;border-color:rgba(255,107,107,.22);}\n[data-reticle-hud] [data-reticle-end]:hover{color:#ff7a7a;border-color:rgba(255,107,107,.5);background:rgba(255,107,107,.1);}\n[data-reticle-hud] .reticle-badge{display:none;align-items:center;flex:none;font-weight:600;letter-spacing:.1em;font-size:9px;\n color:var(--reticle-accent);border:1px solid var(--reticle-accent);background:var(--reticle-accent-soft);padding:2px 8px;border-radius:999px;}\n[data-reticle-overlay][data-reticle-state=\"paused\"] [data-reticle-badge]{display:inline-flex;}\n[data-reticle-hud] [data-reticle-foot]{flex:none;padding:10px 12px 12px;border-top:1px solid var(--reticle-line2);background:rgba(0,0,0,.16);}\n[data-reticle-hud] .reticle-composer{display:flex;align-items:flex-end;gap:6px;background:rgba(255,255,255,.05);\n border:1px solid var(--reticle-line);border-radius:14px;padding:5px 6px 5px 14px;transition:border-color .15s,box-shadow .15s;}\n[data-reticle-hud] .reticle-composer:focus-within{border-color:var(--reticle-accent);box-shadow:0 0 0 3px var(--reticle-accent-soft);}\n[data-reticle-hud] .reticle-msg{flex:1;min-width:0;pointer-events:auto;background:transparent;border:none;outline:none;resize:none;\n box-sizing:border-box;color:var(--reticle-fg);font-family:var(--reticle-font);font-size:13px;line-height:18px;\n height:28px;min-height:28px;max-height:96px;padding:5px 0;overflow-y:auto;\n scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.14) transparent;}\n[data-reticle-hud] .reticle-msg::-webkit-scrollbar{width:9px;}\n[data-reticle-hud] .reticle-msg::-webkit-scrollbar-thumb{background:rgba(255,255,255,.14);border-radius:9px;border:2px solid transparent;background-clip:content-box;}\n[data-reticle-hud] .reticle-msg::placeholder{color:var(--reticle-faint);}\n[data-reticle-hud] .reticle-msg:disabled{opacity:.5;}\n[data-reticle-hud] .reticle-send{flex:none;width:30px;height:30px;padding:0;border-radius:10px;border:none;cursor:pointer;pointer-events:auto;\n background:var(--reticle-accent);color:#0b0d14;display:inline-flex;align-items:center;justify-content:center;transition:filter .15s,transform .1s;}\n[data-reticle-hud] .reticle-send svg{display:block;}\n[data-reticle-hud] .reticle-send:hover{filter:brightness(1.12);}\n[data-reticle-hud] .reticle-send:active{transform:scale(.9);}\n[data-reticle-hud] .reticle-send:disabled{opacity:.4;cursor:default;}\n[data-reticle-hud] .reticle-banner{display:none;flex:none;padding:8px 15px;color:var(--reticle-accent);\n font-size:11.5px;font-weight:500;border-bottom:1px solid var(--reticle-line2);background:var(--reticle-accent-soft);}\n[data-reticle-overlay][data-reticle-state=\"ended\"] [data-reticle-banner]{display:block;}\n/* Export row: hidden during a live session; revealed when ended so the run can be copied/saved. */\n[data-reticle-hud] .reticle-export{display:none;align-items:center;gap:8px;margin-top:9px;}\n[data-reticle-overlay][data-reticle-state=\"ended\"] [data-reticle-hud] .reticle-export{display:flex;}\n[data-reticle-hud] .reticle-export-msg{color:var(--reticle-ok);font-size:11px;opacity:0;transition:opacity .15s;}\n[data-reticle-hud] .reticle-export-msg[data-show=\"1\"]{opacity:1;}\n[data-reticle-overlay][data-reticle-state=\"paused\"] [data-reticle-glow][data-on=\"1\"]{animation:none;\n box-shadow:inset 0 0 0 3px rgba(246,180,76,.9),inset 0 0 30px 6px rgba(246,180,76,.4);}\n[data-reticle-overlay][data-reticle-state=\"ended\"] [data-reticle-glow][data-on=\"1\"]{animation:none;\n box-shadow:inset 0 0 0 2px rgba(61,215,166,.55);}\n/* Handoff tones tell the human the agent's mode at a glance. waiting = calm teal \"your turn\" (no\n alarm); ask = amber \"answer me\" with a pulse; warn = amber \"agent crashed\" with a pulse. Each leads\n the banner with an icon and overrides the calm ended-green accent. */\n[data-reticle-overlay][data-reticle-tone=\"waiting\"] [data-reticle-hud]{--reticle-accent:#38bdf8;--reticle-accent-soft:rgba(56,189,248,.16);}\n[data-reticle-overlay][data-reticle-tone=\"waiting\"] [data-reticle-banner]{font-weight:600;color:#7dd3fc;}\n[data-reticle-overlay][data-reticle-tone=\"waiting\"] [data-reticle-banner]::before{content:\"\\270B \";}\n[data-reticle-overlay][data-reticle-tone=\"waiting\"] [data-reticle-glow][data-on=\"1\"]{animation:none;\n box-shadow:inset 0 0 0 2px rgba(56,189,248,.5);}\n[data-reticle-overlay][data-reticle-tone=\"ask\"] [data-reticle-hud],\n[data-reticle-overlay][data-reticle-tone=\"warn\"] [data-reticle-hud]{--reticle-accent:#fb923c;--reticle-accent-soft:rgba(251,146,60,.18);}\n[data-reticle-overlay][data-reticle-tone=\"ask\"] [data-reticle-banner],\n[data-reticle-overlay][data-reticle-tone=\"warn\"] [data-reticle-banner]{font-weight:600;color:#fdba74;}\n[data-reticle-overlay][data-reticle-tone=\"ask\"] [data-reticle-banner]::before{content:\"\\2753 \";}\n[data-reticle-overlay][data-reticle-tone=\"warn\"] [data-reticle-banner]::before{content:\"\\26A0\\FE0F \";}\n[data-reticle-overlay][data-reticle-tone=\"ask\"] [data-reticle-glow][data-on=\"1\"],\n[data-reticle-overlay][data-reticle-tone=\"warn\"] [data-reticle-glow][data-on=\"1\"]{animation:reticle-warn-pulse 1.5s ease-in-out infinite;\n box-shadow:inset 0 0 0 2px rgba(251,146,60,.7);}\n@keyframes reticle-warn-pulse{0%,100%{box-shadow:inset 0 0 0 2px rgba(251,146,60,.32);}\n 50%{box-shadow:inset 0 0 0 3px rgba(251,146,60,.85),inset 0 0 26px 5px rgba(251,146,60,.34);}}\n/* Replay-a-flow row: the human re-runs a saved flow with no agent. Hidden until flows are pushed.\n Bounded + self-scrolling: it sits between the flex:1 log and the flex:none composer, so without a\n height cap a long flow list would squeeze the log to nothing and push the message input past the\n panel's overflow:hidden clip. flex:none + max-height + overflow-y keep the log and input always\n visible; extra flow chips scroll inside this section instead of growing the panel. */\n[data-reticle-hud] .reticle-flows{display:none;flex:none;flex-wrap:wrap;align-content:flex-start;gap:6px;\n padding:9px 12px;border-top:1px solid var(--reticle-line2);max-height:88px;overflow-y:auto;overscroll-behavior:contain;}\n[data-reticle-hud] .reticle-flows[data-has=\"1\"]{display:flex;}\n[data-reticle-hud] .reticle-flows::-webkit-scrollbar{width:9px;}\n[data-reticle-hud] .reticle-flows::-webkit-scrollbar-thumb{background:rgba(255,255,255,.14);border-radius:9px;border:2px solid transparent;background-clip:content-box;}\n[data-reticle-hud] .reticle-flows-cap{flex:0 0 100%;margin-bottom:1px;color:var(--reticle-faint);font-size:9.5px;letter-spacing:.09em;text-transform:uppercase;}\n[data-reticle-hud] .reticle-flow{pointer-events:auto;cursor:pointer;display:inline-flex;align-items:center;gap:5px;height:24px;padding:0 10px;\n border-radius:7px;border:1px solid var(--reticle-line);background:rgba(255,255,255,.04);color:var(--reticle-muted);\n font-family:var(--reticle-font);font-size:11px;font-weight:500;transition:background .15s,color .15s,border-color .15s,transform .1s;}\n[data-reticle-hud] .reticle-flow:hover{color:var(--reticle-fg);background:var(--reticle-accent-soft);border-color:var(--reticle-accent);}\n[data-reticle-hud] .reticle-flow:active{transform:scale(.95);}\n";
7
7
  //# sourceMappingURL=presenter-styles.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"presenter-styles.d.ts","sourceRoot":"","sources":["../../src/presenter/presenter-styles.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,eAAO,MAAM,aAAa,qnmBA6GV,CAAC"}
1
+ {"version":3,"file":"presenter-styles.d.ts","sourceRoot":"","sources":["../../src/presenter/presenter-styles.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AAKH,eAAO,MAAM,aAAa,4jnBAkHV,CAAC"}
@@ -5,8 +5,11 @@ import { CONTROLS_CSS } from './presenter-controls.js';
5
5
  * Split out of presenter.ts so that file stays a cohesive controller under the size cap; this is
6
6
  * pure style data (no behavior). LOG_CSS + CONTROLS_CSS are composed in at the end as before.
7
7
  */
8
+ // No web-font @import: a dev-only SDK must not make the host page issue a cross-origin request to
9
+ // fonts.googleapis.com (and trip a `style-src 'self'` CSP with a console violation) just for HUD
10
+ // polish. The font vars below already prefer Inter/IBM Plex Serif if present and fall back to the
11
+ // system stack otherwise — so the overlay stays self-contained and never touches the network.
8
12
  export const PRESENTER_CSS = `
9
- @import url("https://fonts.googleapis.com/css2?family=IBM+Plex+Serif:wght@400;500&family=Inter:wght@400;450;500;600&display=swap");
10
13
  [data-reticle-glow]{position:fixed;inset:0;pointer-events:none;z-index:2147483600;opacity:0;
11
14
  transition:opacity .25s ease;box-shadow:inset 0 0 0 3px rgba(99,102,241,.9),inset 0 0 28px 6px rgba(99,102,241,.45);}
12
15
  [data-reticle-glow][data-on="1"]{opacity:1;animation:reticle-pulse 1.6s ease-in-out infinite;}
@@ -28,7 +31,7 @@ export const PRESENTER_CSS = `
28
31
  [data-reticle-ring][data-on="1"]{opacity:1;}
29
32
  [data-reticle-hud]{
30
33
  --reticle-accent:#7c83ff;--reticle-accent-soft:rgba(124,131,255,.16);
31
- --reticle-bg:rgba(13,15,22,.80);--reticle-bg2:rgba(19,22,32,.74);
34
+ --reticle-bg:rgba(13,15,22,.92);--reticle-bg2:rgba(19,22,32,.88);
32
35
  --reticle-fg:#e9ebf2;--reticle-muted:#9aa0b2;--reticle-faint:#6a7186;
33
36
  --reticle-line:rgba(255,255,255,.09);--reticle-line2:rgba(255,255,255,.05);
34
37
  --reticle-read:#54d2e6;--reticle-ok:#3dd7a6;--reticle-bad:#ff7a7a;
@@ -39,7 +42,13 @@ export const PRESENTER_CSS = `
39
42
  display:flex;flex-direction:column;overflow:hidden;text-align:left;z-index:2147483647;pointer-events:none;
40
43
  font-family:var(--reticle-font);font-size:13px;line-height:1.5;color:var(--reticle-fg);-webkit-font-smoothing:antialiased;
41
44
  background:linear-gradient(180deg,var(--reticle-bg),var(--reticle-bg2));
42
- -webkit-backdrop-filter:blur(24px) saturate(1.5);backdrop-filter:blur(24px) saturate(1.5);
45
+ /* No backdrop-filter here, deliberately. blur(24px) on this panel was measured as the single most
46
+ expensive thing the whole SDK does: a backdrop blur must re-sample everything behind it whenever
47
+ that content changes, and on a page repainting at 60fps that is continuous full-panel work. On
48
+ the hostile fixture it cost +4.0pp of main thread — five times the rest of the presenter, and
49
+ more than every observer combined. Removing it took total main-thread time from 2.15s to 1.67s
50
+ over an 8s window. The panel background is ~85% opaque, so the glass effect it bought was
51
+ marginal. If you want it back, add it here and expect to pay that. */
43
52
  border:1px solid var(--reticle-line);border-radius:20px;
44
53
  box-shadow:0 28px 70px -18px rgba(0,0,0,.66),0 0 0 1px rgba(0,0,0,.35),inset 0 1px 0 rgba(255,255,255,.07),0 0 54px -22px var(--reticle-accent);
45
54
  opacity:0;transform:translateX(-50%) translateY(14px) scale(.985);
@@ -1 +1 @@
1
- {"version":3,"file":"presenter-styles.js","sourceRoot":"","sources":["../../src/presenter/presenter-styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4G3B,OAAO;EACP,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"presenter-styles.js","sourceRoot":"","sources":["../../src/presenter/presenter-styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD;;;;GAIG;AACH,kGAAkG;AAClG,iGAAiG;AACjG,kGAAkG;AAClG,8FAA8F;AAC9F,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiH3B,OAAO;EACP,YAAY,EAAE,CAAC"}
@@ -0,0 +1,16 @@
1
+ /** Shared fixtures for the presenter test suites (presenter.test.ts + presenter-lifecycle.test.ts). */
2
+ export declare const FAST_IDLE_MS = 20;
3
+ export declare const FAST_FADE_MS = 5;
4
+ export declare const flush: () => Promise<void>;
5
+ export declare const wait: (ms: number) => Promise<void>;
6
+ /** Poll a predicate until true or timeout — robust to real-timer lateness under load (no flake). */
7
+ export declare const until: (pred: () => boolean, ms?: number) => Promise<boolean>;
8
+ export declare const dataOn: () => string | null;
9
+ export declare const dataBusy: () => string | null;
10
+ export interface GlowFlips {
11
+ enters: number;
12
+ exits: number;
13
+ stop: () => void;
14
+ }
15
+ export declare function trackGlowFlips(glow: HTMLElement): GlowFlips;
16
+ //# sourceMappingURL=presenter-test-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presenter-test-helpers.d.ts","sourceRoot":"","sources":["../../src/presenter/presenter-test-helpers.ts"],"names":[],"mappings":"AAAA,uGAAuG;AAEvG,eAAO,MAAM,YAAY,KAAK,CAAC;AAC/B,eAAO,MAAM,YAAY,IAAI,CAAC;AAC9B,eAAO,MAAM,KAAK,QAAO,OAAO,CAAC,IAAI,CAAyC,CAAC;AAC/E,eAAO,MAAM,IAAI,GAAI,IAAI,MAAM,KAAG,OAAO,CAAC,IAAI,CAA0C,CAAC;AAEzF,oGAAoG;AACpG,eAAO,MAAM,KAAK,GAAU,MAAM,MAAM,OAAO,EAAE,WAAS,KAAG,OAAO,CAAC,OAAO,CAO3E,CAAC;AAEF,eAAO,MAAM,MAAM,QAAO,MAAM,GAAG,IAC6C,CAAC;AACjF,eAAO,MAAM,QAAQ,QAAO,MAAM,GAAG,IAC6C,CAAC;AAEnF,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,SAAS,CAoB3D"}
@@ -0,0 +1,42 @@
1
+ /** Shared fixtures for the presenter test suites (presenter.test.ts + presenter-lifecycle.test.ts). */
2
+ export const FAST_IDLE_MS = 20;
3
+ export const FAST_FADE_MS = 5;
4
+ export const flush = () => new Promise((r) => setTimeout(r, 0));
5
+ export const wait = (ms) => new Promise((r) => setTimeout(r, ms));
6
+ /** Poll a predicate until true or timeout — robust to real-timer lateness under load (no flake). */
7
+ export const until = async (pred, ms = 1000) => {
8
+ const t0 = Date.now();
9
+ while (!pred()) {
10
+ if (Date.now() - t0 > ms)
11
+ return false;
12
+ await wait(5);
13
+ }
14
+ return true;
15
+ };
16
+ export const dataOn = () => document.querySelector('[data-reticle-glow]')?.getAttribute('data-on') ?? null;
17
+ export const dataBusy = () => document.querySelector('[data-reticle-glow]')?.getAttribute('data-busy') ?? null;
18
+ export function trackGlowFlips(glow) {
19
+ const counts = { enters: 0, exits: 0 };
20
+ const obs = new MutationObserver((recs) => {
21
+ for (const r of recs) {
22
+ if (r.attributeName !== 'data-on')
23
+ continue;
24
+ const v = glow.getAttribute('data-on');
25
+ if (v === '1')
26
+ counts.enters++;
27
+ if (v === '0')
28
+ counts.exits++;
29
+ }
30
+ });
31
+ obs.observe(glow, { attributes: true, attributeFilter: ['data-on'] });
32
+ return {
33
+ get enters() {
34
+ return counts.enters;
35
+ },
36
+ get exits() {
37
+ return counts.exits;
38
+ },
39
+ stop: () => obs.disconnect(),
40
+ };
41
+ }
42
+ //# sourceMappingURL=presenter-test-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presenter-test-helpers.js","sourceRoot":"","sources":["../../src/presenter/presenter-test-helpers.ts"],"names":[],"mappings":"AAAA,uGAAuG;AAEvG,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,CAAC;AAC/B,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC;AAC9B,MAAM,CAAC,MAAM,KAAK,GAAG,GAAkB,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/E,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,EAAU,EAAiB,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAEzF,oGAAoG;AACpG,MAAM,CAAC,MAAM,KAAK,GAAG,KAAK,EAAE,IAAmB,EAAE,EAAE,GAAG,IAAI,EAAoB,EAAE;IAC9E,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACtB,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QACf,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;YAAE,OAAO,KAAK,CAAC;QACvC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;IAChB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG,GAAkB,EAAE,CACxC,QAAQ,CAAC,aAAa,CAAC,qBAAqB,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;AACjF,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAkB,EAAE,CAC1C,QAAQ,CAAC,aAAa,CAAC,qBAAqB,CAAC,EAAE,YAAY,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC;AAQnF,MAAM,UAAU,cAAc,CAAC,IAAiB;IAC9C,MAAM,MAAM,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IACvC,MAAM,GAAG,GAAG,IAAI,gBAAgB,CAAC,CAAC,IAAI,EAAE,EAAE;QACxC,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,IAAI,CAAC,CAAC,aAAa,KAAK,SAAS;gBAAE,SAAS;YAC5C,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YACvC,IAAI,CAAC,KAAK,GAAG;gBAAE,MAAM,CAAC,MAAM,EAAE,CAAC;YAC/B,IAAI,CAAC,KAAK,GAAG;gBAAE,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,CAAC;IACH,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACtE,OAAO;QACL,IAAI,MAAM;YACR,OAAO,MAAM,CAAC,MAAM,CAAC;QACvB,CAAC;QACD,IAAI,KAAK;YACP,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB,CAAC;QACD,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE;KAC7B,CAAC;AACJ,CAAC"}
@@ -18,8 +18,8 @@ export declare class Presenter {
18
18
  /** Drive the panel's live-control visual state (server-push / agent path; never emits). */
19
19
  setState(state: SessionState, text?: string, tone?: PresenterTone): void;
20
20
  /** Apply a bridge→browser presenter push: PRESENTER (state echo) or FLOWS (replay list, the human's
21
- * no-agent replay surface). Owns the wire parsing so the SDK dispatcher stays a thin router;
22
- * setState-only so an echo can't re-emit. */
21
+ * no-agent replay surface). Owns the wire parsing so the SDK dispatcher stays a thin router;
22
+ * setState-only so an echo can't re-emit. */
23
23
  /** Re-scope the replay-flow chips to the current page (called by the SDK on route change). */
24
24
  refilterFlows(): void;
25
25
  handlePush(command: {
@@ -33,7 +33,7 @@ export declare class Presenter {
33
33
  destroy(): void;
34
34
  /**
35
35
  * Session start: in 'session' border mode this fades the base border IN and keeps it on until
36
- * sessionEnd(). Idempotent, and a no-op when unmounted or in 'busy' border mode.
36
+ * sessionEnd. Idempotent, and a no-op when unmounted or in 'busy' border mode.
37
37
  */
38
38
  sessionStart(): void;
39
39
  /**
@@ -75,10 +75,8 @@ export declare class Presenter {
75
75
  log(kind: LogKind, text: string, result?: LogResult): LogHandle | undefined;
76
76
  /** Back-compat: narration appends to the live log (append-only, never overwrites). */
77
77
  narrate(text: string, level?: string): LogHandle | undefined;
78
- /** Legacy no-op kept for source compat; outcomes now flow through LogHandle.result(). */
79
- result(_ok: boolean): void;
80
78
  /**
81
- * Mirror the server's session.throttled() state onto the HUD border. When throttled (tab
79
+ * Mirror the server's session.throttled state onto the HUD border. When throttled (tab
82
80
  * backgrounded or stale), the border turns amber so the developer knows actions are no-oping —
83
81
  * the same signal the agent already reads from result.session.throttled.
84
82
  */
@@ -1 +1 @@
1
- {"version":3,"file":"presenter.d.ts","sourceRoot":"","sources":["../../src/presenter/presenter.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,aAAa,EACb,KAAK,aAAa,EAClB,YAAY,EAGb,MAAM,iBAAiB,CAAC;AAIzB,OAAO,EASL,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAML,SAAS,EAYT,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAIjF,OAAO,EAOL,KAAK,cAAc,EACpB,MAAM,yBAAyB,CAAC;AAEjC,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAG7E,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzE,OAAO,EACL,QAAQ,EACR,UAAU,EACV,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,SAAS,GACf,MAAM,oBAAoB,CAAC;AAO5B,qBAAa,SAAS;;gBA2CR,OAAO,GAAE,gBAAqB;IA2B1C,6EAA6E;IAC7E,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAIhD,uFAAuF;IACvF,IAAI,KAAK,IAAI,YAAY,CAExB;IAED,wGAAwG;IACxG,IAAI,aAAa,IAAI,OAAO,CAE3B;IAED,2FAA2F;IAC3F,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,IAAI;IAIxE;;kDAE8C;IAC9C,8FAA8F;IAC9F,aAAa,IAAI,IAAI;IAIrB,UAAU,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,IAAI;IAS1E,2CAA2C;IAC3C,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,MAAM,CAAC,CAAC,EAAE,MAAM,EAGnB;IAED,KAAK,IAAI,IAAI;IA+Cb,OAAO,IAAI,IAAI;IAaf;;;OAGG;IACH,YAAY,IAAI,IAAI;IAgCpB;;;OAGG;IACH,UAAU,IAAI,IAAI;IAclB;;;;OAIG;IACH,YAAY,IAAI,IAAI;IAIpB,gFAAgF;IAChF,YAAY,IAAI,IAAI;IAIpB,2DAA2D;IAC3D,SAAS,IAAI,SAAS;IAItB,2EAA2E;IAC3E,IAAI,IAAI,IAAI,aAAa,CAExB;IAED;;;OAGG;IACH,OAAO,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAWlC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IA4C1B,mGAAmG;IACnG,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAK9B;;;;OAIG;IACH,QAAQ,IAAI,iBAAiB;IAW7B;;;;OAIG;IACH,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS;IAqC3E,sFAAsF;IACtF,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,SAAS,GAAG,SAAS,GAAG,SAAS;IAY5D,yFAAyF;IACzF,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAI1B;;;;OAIG;IACH,YAAY,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI;IAQtC,uFAAuF;IACjF,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAgB7E"}
1
+ {"version":3,"file":"presenter.d.ts","sourceRoot":"","sources":["../../src/presenter/presenter.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,aAAa,EACb,KAAK,aAAa,EAClB,YAAY,EAGb,MAAM,iBAAiB,CAAC;AAIzB,OAAO,EASL,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAML,SAAS,EAYT,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAIjF,OAAO,EAOL,KAAK,cAAc,EACpB,MAAM,yBAAyB,CAAC;AAEjC,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAG7E,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzE,OAAO,EACL,QAAQ,EACR,UAAU,EACV,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,SAAS,GACf,MAAM,oBAAoB,CAAC;AAO5B,qBAAa,SAAS;;gBA2CR,OAAO,GAAE,gBAAqB;IA2B1C,6EAA6E;IAC7E,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAIhD,uFAAuF;IACvF,IAAI,KAAK,IAAI,YAAY,CAExB;IAED,wGAAwG;IACxG,IAAI,aAAa,IAAI,OAAO,CAE3B;IAED,2FAA2F;IAC3F,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,IAAI;IAIxE;;iDAE6C;IAC7C,8FAA8F;IAC9F,aAAa,IAAI,IAAI;IAIrB,UAAU,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,IAAI;IAS1E,2CAA2C;IAC3C,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,MAAM,CAAC,CAAC,EAAE,MAAM,EAGnB;IAED,KAAK,IAAI,IAAI;IA+Cb,OAAO,IAAI,IAAI;IAaf;;;OAGG;IACH,YAAY,IAAI,IAAI;IAgCpB;;;OAGG;IACH,UAAU,IAAI,IAAI;IAclB;;;;OAIG;IACH,YAAY,IAAI,IAAI;IAIpB,gFAAgF;IAChF,YAAY,IAAI,IAAI;IAIpB,2DAA2D;IAC3D,SAAS,IAAI,SAAS;IAItB,2EAA2E;IAC3E,IAAI,IAAI,IAAI,aAAa,CAExB;IAED;;;OAGG;IACH,OAAO,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAWlC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IA4C1B,mGAAmG;IACnG,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAK9B;;;;OAIG;IACH,QAAQ,IAAI,iBAAiB;IAW7B;;;;OAIG;IACH,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS;IAqC3E,sFAAsF;IACtF,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,SAAS,GAAG,SAAS,GAAG,SAAS;IAY5D;;;;OAIG;IACH,YAAY,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI;IAQtC,uFAAuF;IACjF,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAgB7E"}
@@ -51,7 +51,7 @@ export class Presenter {
51
51
  // v2: narration + action status accumulate in a persistent, timestamped, scrollable log.
52
52
  #logMax;
53
53
  #log;
54
- /** now() of the first row, the baseline for the +elapsed timestamps. */
54
+ /** now of the first row, the baseline for the +elapsed timestamps. */
55
55
  #logBaseMs;
56
56
  // Live-control panel: the two-way control surface (Pause/Resume + End + message Send).
57
57
  #onControl;
@@ -99,8 +99,8 @@ export class Presenter {
99
99
  this.#panel.setState(state, text, tone);
100
100
  }
101
101
  /** Apply a bridge→browser presenter push: PRESENTER (state echo) or FLOWS (replay list, the human's
102
- * no-agent replay surface). Owns the wire parsing so the SDK dispatcher stays a thin router;
103
- * setState-only so an echo can't re-emit. */
102
+ * no-agent replay surface). Owns the wire parsing so the SDK dispatcher stays a thin router;
103
+ * setState-only so an echo can't re-emit. */
104
104
  /** Re-scope the replay-flow chips to the current page (called by the SDK on route change). */
105
105
  refilterFlows() {
106
106
  this.#panel.refilterFlows();
@@ -185,7 +185,7 @@ export class Presenter {
185
185
  }
186
186
  /**
187
187
  * Session start: in 'session' border mode this fades the base border IN and keeps it on until
188
- * sessionEnd(). Idempotent, and a no-op when unmounted or in 'busy' border mode.
188
+ * sessionEnd. Idempotent, and a no-op when unmounted or in 'busy' border mode.
189
189
  */
190
190
  sessionStart() {
191
191
  // Returning agent activity after the session ended (idle or explicit) revives it as a fresh run.
@@ -391,12 +391,8 @@ export class Presenter {
391
391
  this.#log.firstElementChild?.remove();
392
392
  }
393
393
  }
394
- /** Legacy no-op kept for source compat; outcomes now flow through LogHandle.result(). */
395
- result(_ok) {
396
- /* no-op */
397
- }
398
394
  /**
399
- * Mirror the server's session.throttled() state onto the HUD border. When throttled (tab
395
+ * Mirror the server's session.throttled state onto the HUD border. When throttled (tab
400
396
  * backgrounded or stale), the border turns amber so the developer knows actions are no-oping —
401
397
  * the same signal the agent already reads from result.session.throttled.
402
398
  */