@agentdeck/bridge 0.2.2 → 0.2.3
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.
- package/assets/fonts/IBMPlexSans-Bold.ttf +0 -0
- package/assets/fonts/IBMPlexSans-Regular.ttf +0 -0
- package/assets/fonts/JetBrainsMono-Bold.ttf +0 -0
- package/assets/fonts/JetBrainsMono-Regular.ttf +0 -0
- package/assets/fonts/LICENSES.md +22 -0
- package/dist/adapters/claude-code.d.ts +6 -0
- package/dist/adapters/claude-code.d.ts.map +1 -1
- package/dist/adapters/claude-code.js +8 -0
- package/dist/adapters/claude-code.js.map +1 -1
- package/dist/adapters/openclaw.d.ts +24 -0
- package/dist/adapters/openclaw.d.ts.map +1 -1
- package/dist/adapters/openclaw.js +291 -35
- package/dist/adapters/openclaw.js.map +1 -1
- package/dist/adapters/opencode-adapter.d.ts +59 -0
- package/dist/adapters/opencode-adapter.d.ts.map +1 -1
- package/dist/adapters/opencode-adapter.js +297 -35
- package/dist/adapters/opencode-adapter.js.map +1 -1
- package/dist/adb-reverse.d.ts +1 -1
- package/dist/adb-reverse.js +1 -1
- package/dist/antigravity-local.d.ts +1 -0
- package/dist/antigravity-local.d.ts.map +1 -1
- package/dist/antigravity-local.js +33 -0
- package/dist/antigravity-local.js.map +1 -1
- package/dist/apme/adapters/claude-hook.d.ts.map +1 -1
- package/dist/apme/adapters/claude-hook.js +5 -0
- package/dist/apme/adapters/claude-hook.js.map +1 -1
- package/dist/apme/adapters/codex-hook.d.ts +17 -0
- package/dist/apme/adapters/codex-hook.d.ts.map +1 -0
- package/dist/apme/adapters/codex-hook.js +95 -0
- package/dist/apme/adapters/codex-hook.js.map +1 -0
- package/dist/apme/adapters/codex-turn-manager.d.ts +86 -0
- package/dist/apme/adapters/codex-turn-manager.d.ts.map +1 -0
- package/dist/apme/adapters/codex-turn-manager.js +496 -0
- package/dist/apme/adapters/codex-turn-manager.js.map +1 -0
- package/dist/apme/adapters/openclaw-hook.d.ts +99 -0
- package/dist/apme/adapters/openclaw-hook.d.ts.map +1 -0
- package/dist/apme/adapters/openclaw-hook.js +234 -0
- package/dist/apme/adapters/openclaw-hook.js.map +1 -0
- package/dist/apme/adapters/opencode-hook.d.ts +56 -0
- package/dist/apme/adapters/opencode-hook.d.ts.map +1 -0
- package/dist/apme/adapters/opencode-hook.js +182 -0
- package/dist/apme/adapters/opencode-hook.js.map +1 -0
- package/dist/apme/adapters/timeline.d.ts.map +1 -1
- package/dist/apme/adapters/timeline.js +6 -1
- package/dist/apme/adapters/timeline.js.map +1 -1
- package/dist/apme/antigravity-transcript.d.ts +18 -0
- package/dist/apme/antigravity-transcript.d.ts.map +1 -0
- package/dist/apme/antigravity-transcript.js +94 -0
- package/dist/apme/antigravity-transcript.js.map +1 -0
- package/dist/apme/classify-turn.d.ts +13 -0
- package/dist/apme/classify-turn.d.ts.map +1 -0
- package/dist/apme/classify-turn.js +49 -0
- package/dist/apme/classify-turn.js.map +1 -0
- package/dist/apme/claude-transcript-reader.d.ts +10 -0
- package/dist/apme/claude-transcript-reader.d.ts.map +1 -1
- package/dist/apme/claude-transcript-reader.js +35 -0
- package/dist/apme/claude-transcript-reader.js.map +1 -1
- package/dist/apme/collector.d.ts +129 -6
- package/dist/apme/collector.d.ts.map +1 -1
- package/dist/apme/collector.js +470 -23
- package/dist/apme/collector.js.map +1 -1
- package/dist/apme/dashboard-html.d.ts.map +1 -1
- package/dist/apme/dashboard-html.js +87 -11
- package/dist/apme/dashboard-html.js.map +1 -1
- package/dist/apme/http.d.ts.map +1 -1
- package/dist/apme/http.js +43 -6
- package/dist/apme/http.js.map +1 -1
- package/dist/apme/index.d.ts +26 -5
- package/dist/apme/index.d.ts.map +1 -1
- package/dist/apme/index.js +135 -9
- package/dist/apme/index.js.map +1 -1
- package/dist/apme/pareto.d.ts +39 -0
- package/dist/apme/pareto.d.ts.map +1 -0
- package/dist/apme/pareto.js +59 -0
- package/dist/apme/pareto.js.map +1 -0
- package/dist/apme/recommend.d.ts +3 -0
- package/dist/apme/recommend.d.ts.map +1 -1
- package/dist/apme/recommend.js +43 -1
- package/dist/apme/recommend.js.map +1 -1
- package/dist/apme/runner.d.ts +92 -4
- package/dist/apme/runner.d.ts.map +1 -1
- package/dist/apme/runner.js +586 -70
- package/dist/apme/runner.js.map +1 -1
- package/dist/apme/sample-to-timeline.d.ts +26 -0
- package/dist/apme/sample-to-timeline.d.ts.map +1 -0
- package/dist/apme/sample-to-timeline.js +95 -0
- package/dist/apme/sample-to-timeline.js.map +1 -0
- package/dist/apme/scorers/index.d.ts +47 -0
- package/dist/apme/scorers/index.d.ts.map +1 -0
- package/dist/apme/scorers/index.js +96 -0
- package/dist/apme/scorers/index.js.map +1 -0
- package/dist/apme/settings.d.ts +14 -10
- package/dist/apme/settings.d.ts.map +1 -1
- package/dist/apme/settings.js +34 -8
- package/dist/apme/settings.js.map +1 -1
- package/dist/apme/store.d.ts +33 -1
- package/dist/apme/store.d.ts.map +1 -1
- package/dist/apme/store.js +334 -25
- package/dist/apme/store.js.map +1 -1
- package/dist/awaiting-overlay.d.ts +99 -0
- package/dist/awaiting-overlay.d.ts.map +1 -0
- package/dist/awaiting-overlay.js +148 -0
- package/dist/awaiting-overlay.js.map +1 -0
- package/dist/ble-sync-spawn.d.ts +63 -0
- package/dist/ble-sync-spawn.d.ts.map +1 -0
- package/dist/ble-sync-spawn.js +196 -0
- package/dist/ble-sync-spawn.js.map +1 -0
- package/dist/bridge-core.d.ts +24 -1
- package/dist/bridge-core.d.ts.map +1 -1
- package/dist/bridge-core.js +157 -24
- package/dist/bridge-core.js.map +1 -1
- package/dist/broadcast.d.ts +3 -0
- package/dist/broadcast.d.ts.map +1 -0
- package/dist/broadcast.js +122 -0
- package/dist/broadcast.js.map +1 -0
- package/dist/check-deps.d.ts.map +1 -1
- package/dist/check-deps.js +25 -9
- package/dist/check-deps.js.map +1 -1
- package/dist/cli.d.ts +15 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +1021 -93
- package/dist/cli.js.map +1 -1
- package/dist/codex-auth.d.ts +21 -0
- package/dist/codex-auth.d.ts.map +1 -1
- package/dist/codex-auth.js +52 -1
- package/dist/codex-auth.js.map +1 -1
- package/dist/codex-output-parser.d.ts +8 -0
- package/dist/codex-output-parser.d.ts.map +1 -1
- package/dist/codex-output-parser.js +110 -25
- package/dist/codex-output-parser.js.map +1 -1
- package/dist/codex-rate-limits.d.ts +16 -0
- package/dist/codex-rate-limits.d.ts.map +1 -0
- package/dist/codex-rate-limits.js +197 -0
- package/dist/codex-rate-limits.js.map +1 -0
- package/dist/codex-rollout-response.d.ts +31 -0
- package/dist/codex-rollout-response.d.ts.map +1 -0
- package/dist/codex-rollout-response.js +135 -0
- package/dist/codex-rollout-response.js.map +1 -0
- package/dist/daemon-server.d.ts +85 -0
- package/dist/daemon-server.d.ts.map +1 -1
- package/dist/daemon-server.js +1627 -159
- package/dist/daemon-server.js.map +1 -1
- package/dist/daemon.js +15 -6
- package/dist/daemon.js.map +1 -1
- package/dist/display-dim.d.ts +9 -0
- package/dist/display-dim.d.ts.map +1 -0
- package/dist/display-dim.js +53 -0
- package/dist/display-dim.js.map +1 -0
- package/dist/display-monitor.d.ts +15 -2
- package/dist/display-monitor.d.ts.map +1 -1
- package/dist/display-monitor.js +104 -26
- package/dist/display-monitor.js.map +1 -1
- package/dist/esp32-serial.d.ts +160 -1
- package/dist/esp32-serial.d.ts.map +1 -1
- package/dist/esp32-serial.js +950 -153
- package/dist/esp32-serial.js.map +1 -1
- package/dist/fallback-task-timeline.d.ts +42 -0
- package/dist/fallback-task-timeline.d.ts.map +1 -0
- package/dist/fallback-task-timeline.js +112 -0
- package/dist/fallback-task-timeline.js.map +1 -0
- package/dist/foundation-models-helper.d.ts +11 -0
- package/dist/foundation-models-helper.d.ts.map +1 -0
- package/dist/foundation-models-helper.js +241 -0
- package/dist/foundation-models-helper.js.map +1 -0
- package/dist/hook-migration.js +1 -1
- package/dist/hook-migration.js.map +1 -1
- package/dist/hook-server.d.ts +2 -3
- package/dist/hook-server.d.ts.map +1 -1
- package/dist/hook-server.js +22 -10
- package/dist/hook-server.js.map +1 -1
- package/dist/idotmatrix/idotmatrix-daemon-sync.d.ts +33 -0
- package/dist/idotmatrix/idotmatrix-daemon-sync.d.ts.map +1 -0
- package/dist/idotmatrix/idotmatrix-daemon-sync.js +164 -0
- package/dist/idotmatrix/idotmatrix-daemon-sync.js.map +1 -0
- package/dist/idotmatrix/idotmatrix-discover.d.ts +18 -0
- package/dist/idotmatrix/idotmatrix-discover.d.ts.map +1 -0
- package/dist/idotmatrix/idotmatrix-discover.js +85 -0
- package/dist/idotmatrix/idotmatrix-discover.js.map +1 -0
- package/dist/idotmatrix/idotmatrix-settings.d.ts +20 -0
- package/dist/idotmatrix/idotmatrix-settings.d.ts.map +1 -0
- package/dist/idotmatrix/idotmatrix-settings.js +57 -0
- package/dist/idotmatrix/idotmatrix-settings.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +215 -179
- package/dist/index.js.map +1 -1
- package/dist/log-stream.d.ts +15 -16
- package/dist/log-stream.d.ts.map +1 -1
- package/dist/log-stream.js +18 -96
- package/dist/log-stream.js.map +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +12 -3
- package/dist/logger.js.map +1 -1
- package/dist/mdns.d.ts +17 -0
- package/dist/mdns.d.ts.map +1 -1
- package/dist/mdns.js +52 -18
- package/dist/mdns.js.map +1 -1
- package/dist/modules/adb-module.d.ts +1 -1
- package/dist/modules/adb-module.d.ts.map +1 -1
- package/dist/modules/adb-module.js +4 -3
- package/dist/modules/adb-module.js.map +1 -1
- package/dist/modules/broadcast-module.d.ts +17 -0
- package/dist/modules/broadcast-module.d.ts.map +1 -0
- package/dist/modules/broadcast-module.js +26 -0
- package/dist/modules/broadcast-module.js.map +1 -0
- package/dist/modules/idotmatrix-module.d.ts +9 -0
- package/dist/modules/idotmatrix-module.d.ts.map +1 -0
- package/dist/modules/idotmatrix-module.js +46 -0
- package/dist/modules/idotmatrix-module.js.map +1 -0
- package/dist/modules/index.d.ts +3 -1
- package/dist/modules/index.d.ts.map +1 -1
- package/dist/modules/index.js +9 -3
- package/dist/modules/index.js.map +1 -1
- package/dist/modules/pixoo-module.d.ts.map +1 -1
- package/dist/modules/pixoo-module.js +14 -4
- package/dist/modules/pixoo-module.js.map +1 -1
- package/dist/modules/serial-module.d.ts +4 -0
- package/dist/modules/serial-module.d.ts.map +1 -1
- package/dist/modules/serial-module.js +14 -12
- package/dist/modules/serial-module.js.map +1 -1
- package/dist/modules/timebox-module.d.ts +9 -0
- package/dist/modules/timebox-module.d.ts.map +1 -0
- package/dist/modules/timebox-module.js +46 -0
- package/dist/modules/timebox-module.js.map +1 -0
- package/dist/modules/types.d.ts +4 -2
- package/dist/modules/types.d.ts.map +1 -1
- package/dist/openclaw-session.d.ts +18 -0
- package/dist/openclaw-session.d.ts.map +1 -0
- package/dist/openclaw-session.js +34 -0
- package/dist/openclaw-session.js.map +1 -0
- package/dist/output-parser.d.ts +30 -0
- package/dist/output-parser.d.ts.map +1 -1
- package/dist/output-parser.js +125 -9
- package/dist/output-parser.js.map +1 -1
- package/dist/passive-observer.d.ts +26 -0
- package/dist/passive-observer.d.ts.map +1 -1
- package/dist/passive-observer.js +258 -49
- package/dist/passive-observer.js.map +1 -1
- package/dist/permission-resolver.d.ts +47 -0
- package/dist/permission-resolver.d.ts.map +1 -0
- package/dist/permission-resolver.js +103 -0
- package/dist/permission-resolver.js.map +1 -0
- package/dist/pixoo/micro-glyphs.d.ts +49 -0
- package/dist/pixoo/micro-glyphs.d.ts.map +1 -0
- package/dist/pixoo/micro-glyphs.js +276 -0
- package/dist/pixoo/micro-glyphs.js.map +1 -0
- package/dist/pixoo/pixoo-bridge.d.ts +2 -2
- package/dist/pixoo/pixoo-bridge.d.ts.map +1 -1
- package/dist/pixoo/pixoo-bridge.js +93 -25
- package/dist/pixoo/pixoo-bridge.js.map +1 -1
- package/dist/pixoo/pixoo-camera.d.ts +19 -3
- package/dist/pixoo/pixoo-camera.d.ts.map +1 -1
- package/dist/pixoo/pixoo-camera.js +62 -27
- package/dist/pixoo/pixoo-camera.js.map +1 -1
- package/dist/pixoo/pixoo-client.d.ts +13 -3
- package/dist/pixoo/pixoo-client.d.ts.map +1 -1
- package/dist/pixoo/pixoo-client.js +51 -22
- package/dist/pixoo/pixoo-client.js.map +1 -1
- package/dist/pixoo/pixoo-discover.d.ts +37 -0
- package/dist/pixoo/pixoo-discover.d.ts.map +1 -0
- package/dist/pixoo/pixoo-discover.js +105 -0
- package/dist/pixoo/pixoo-discover.js.map +1 -0
- package/dist/pixoo/pixoo-renderer.d.ts +8 -3
- package/dist/pixoo/pixoo-renderer.d.ts.map +1 -1
- package/dist/pixoo/pixoo-renderer.js +189 -60
- package/dist/pixoo/pixoo-renderer.js.map +1 -1
- package/dist/pixoo/pixoo-settings.d.ts +6 -0
- package/dist/pixoo/pixoo-settings.d.ts.map +1 -1
- package/dist/pixoo/pixoo-settings.js +9 -0
- package/dist/pixoo/pixoo-settings.js.map +1 -1
- package/dist/pixoo/pixoo-sprites.d.ts +60 -11
- package/dist/pixoo/pixoo-sprites.d.ts.map +1 -1
- package/dist/pixoo/pixoo-sprites.js +512 -209
- package/dist/pixoo/pixoo-sprites.js.map +1 -1
- package/dist/pty-manager.d.ts.map +1 -1
- package/dist/pty-manager.js +8 -2
- package/dist/pty-manager.js.map +1 -1
- package/dist/session-activity.d.ts +14 -0
- package/dist/session-activity.d.ts.map +1 -0
- package/dist/session-activity.js +160 -0
- package/dist/session-activity.js.map +1 -0
- package/dist/session-aggregator.d.ts +17 -0
- package/dist/session-aggregator.d.ts.map +1 -1
- package/dist/session-aggregator.js +48 -9
- package/dist/session-aggregator.js.map +1 -1
- package/dist/session-registry.d.ts +71 -3
- package/dist/session-registry.d.ts.map +1 -1
- package/dist/session-registry.js +137 -8
- package/dist/session-registry.js.map +1 -1
- package/dist/session-timeline-relay.d.ts.map +1 -1
- package/dist/session-timeline-relay.js +13 -4
- package/dist/session-timeline-relay.js.map +1 -1
- package/dist/session-transcript-timeline.d.ts +49 -0
- package/dist/session-transcript-timeline.d.ts.map +1 -0
- package/dist/session-transcript-timeline.js +276 -0
- package/dist/session-transcript-timeline.js.map +1 -0
- package/dist/state-machine.d.ts +6 -1
- package/dist/state-machine.d.ts.map +1 -1
- package/dist/state-machine.js +86 -28
- package/dist/state-machine.js.map +1 -1
- package/dist/timebox/timebox-daemon-sync.d.ts +19 -0
- package/dist/timebox/timebox-daemon-sync.d.ts.map +1 -0
- package/dist/timebox/timebox-daemon-sync.js +135 -0
- package/dist/timebox/timebox-daemon-sync.js.map +1 -0
- package/dist/timebox/timebox-discover.d.ts +19 -0
- package/dist/timebox/timebox-discover.d.ts.map +1 -0
- package/dist/timebox/timebox-discover.js +87 -0
- package/dist/timebox/timebox-discover.js.map +1 -0
- package/dist/timebox/timebox-settings.d.ts +32 -0
- package/dist/timebox/timebox-settings.d.ts.map +1 -0
- package/dist/timebox/timebox-settings.js +80 -0
- package/dist/timebox/timebox-settings.js.map +1 -0
- package/dist/timeline-store.d.ts +63 -3
- package/dist/timeline-store.d.ts.map +1 -1
- package/dist/timeline-store.js +292 -14
- package/dist/timeline-store.js.map +1 -1
- package/dist/timeline-summarizer.d.ts.map +1 -1
- package/dist/timeline-summarizer.js +29 -5
- package/dist/timeline-summarizer.js.map +1 -1
- package/dist/tui/ansi.d.ts +0 -4
- package/dist/tui/ansi.d.ts.map +1 -1
- package/dist/tui/ansi.js +14 -7
- package/dist/tui/ansi.js.map +1 -1
- package/dist/tui/dashboard.d.ts +1 -0
- package/dist/tui/dashboard.d.ts.map +1 -1
- package/dist/tui/dashboard.js +24 -7
- package/dist/tui/dashboard.js.map +1 -1
- package/dist/tui/renderer.d.ts +36 -0
- package/dist/tui/renderer.d.ts.map +1 -1
- package/dist/tui/renderer.js +303 -119
- package/dist/tui/renderer.js.map +1 -1
- package/dist/tui/terrarium.d.ts.map +1 -1
- package/dist/tui/terrarium.js +37 -49
- package/dist/tui/terrarium.js.map +1 -1
- package/dist/types.d.ts +2 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -2
- package/dist/types.js.map +1 -1
- package/dist/usage-api.d.ts.map +1 -1
- package/dist/usage-api.js +7 -1
- package/dist/usage-api.js.map +1 -1
- package/dist/usage-event.d.ts +10 -3
- package/dist/usage-event.d.ts.map +1 -1
- package/dist/usage-event.js +74 -12
- package/dist/usage-event.js.map +1 -1
- package/dist/utility-proxy.d.ts.map +1 -1
- package/dist/utility-proxy.js +8 -0
- package/dist/utility-proxy.js.map +1 -1
- package/dist/utils/project-name.d.ts +3 -0
- package/dist/utils/project-name.d.ts.map +1 -1
- package/dist/utils/project-name.js +44 -2
- package/dist/utils/project-name.js.map +1 -1
- package/dist/windows-service.d.ts +26 -0
- package/dist/windows-service.d.ts.map +1 -0
- package/dist/windows-service.js +145 -0
- package/dist/windows-service.js.map +1 -0
- package/dist/ws-server.d.ts +22 -1
- package/dist/ws-server.d.ts.map +1 -1
- package/dist/ws-server.js +89 -4
- package/dist/ws-server.js.map +1 -1
- package/fm-helper/AgentDeckFMHelper.swift +112 -0
- package/package.json +9 -3
- package/scripts/build-fm-helper.mjs +26 -0
- package/LICENSE +0 -21
- package/dist/apme/tuner.d.ts +0 -64
- package/dist/apme/tuner.d.ts.map +0 -1
- package/dist/apme/tuner.js +0 -297
- package/dist/apme/tuner.js.map +0 -1
- package/dist/d200h/hid-protocol.d.ts +0 -62
- package/dist/d200h/hid-protocol.d.ts.map +0 -1
- package/dist/d200h/hid-protocol.js +0 -124
- package/dist/d200h/hid-protocol.js.map +0 -1
- package/dist/d200h/image-renderer.d.ts +0 -36
- package/dist/d200h/image-renderer.d.ts.map +0 -1
- package/dist/d200h/image-renderer.js +0 -487
- package/dist/d200h/image-renderer.js.map +0 -1
- package/dist/modules/d200h-module.d.ts +0 -43
- package/dist/modules/d200h-module.d.ts.map +0 -1
- package/dist/modules/d200h-module.js +0 -360
- package/dist/modules/d200h-module.js.map +0 -1
- package/dist/modules/d200h-renderer.d.ts +0 -7
- package/dist/modules/d200h-renderer.d.ts.map +0 -1
- package/dist/modules/d200h-renderer.js +0 -321
- package/dist/modules/d200h-renderer.js.map +0 -1
package/dist/display-monitor.js
CHANGED
|
@@ -31,7 +31,12 @@ while True:
|
|
|
31
31
|
*/
|
|
32
32
|
export class DisplayMonitor extends EventEmitter {
|
|
33
33
|
proc = null;
|
|
34
|
-
|
|
34
|
+
displayAsleepByCG = false;
|
|
35
|
+
displayAsleepByPower = false;
|
|
36
|
+
screenLocked = false;
|
|
37
|
+
screensaverActive = false;
|
|
38
|
+
sessionInactive = false;
|
|
39
|
+
lastDisplayOn = true;
|
|
35
40
|
running = false;
|
|
36
41
|
restartCount = 0;
|
|
37
42
|
restartTimer = null;
|
|
@@ -39,6 +44,15 @@ export class DisplayMonitor extends EventEmitter {
|
|
|
39
44
|
start() {
|
|
40
45
|
if (this.running)
|
|
41
46
|
return;
|
|
47
|
+
// Both the CGDisplayIsAsleep + pmset paths are macOS-only. On other
|
|
48
|
+
// platforms keep `isDisplayOn()` at its default `true` (display assumed
|
|
49
|
+
// on) and skip the python3/pmset spawn loop — otherwise Windows users
|
|
50
|
+
// see a console window flash every 5s as the doomed python3 restart
|
|
51
|
+
// timer fires.
|
|
52
|
+
if (process.platform !== 'darwin') {
|
|
53
|
+
debug('display', `DisplayMonitor skipped (platform=${process.platform})`);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
42
56
|
this.running = true;
|
|
43
57
|
this.restartCount = 0;
|
|
44
58
|
debug('display', `DisplayMonitor started (${POLL_INTERVAL_S}s persistent poll)`);
|
|
@@ -61,7 +75,30 @@ export class DisplayMonitor extends EventEmitter {
|
|
|
61
75
|
}
|
|
62
76
|
}
|
|
63
77
|
isDisplayOn() {
|
|
64
|
-
return this.
|
|
78
|
+
return this.computeDisplayOn();
|
|
79
|
+
}
|
|
80
|
+
computeDisplayOn() {
|
|
81
|
+
return !this.displayAsleepByCG
|
|
82
|
+
&& !this.displayAsleepByPower
|
|
83
|
+
&& !this.screenLocked
|
|
84
|
+
&& !this.screensaverActive
|
|
85
|
+
&& !this.sessionInactive;
|
|
86
|
+
}
|
|
87
|
+
emitIfChanged(reason) {
|
|
88
|
+
const nowOn = this.computeDisplayOn();
|
|
89
|
+
if (nowOn !== this.lastDisplayOn) {
|
|
90
|
+
this.lastDisplayOn = nowOn;
|
|
91
|
+
debug('display', `display state changed: ${nowOn ? 'ON' : 'ASLEEP'} (cause=${reason}) `
|
|
92
|
+
+ `[cgAsleep=${this.displayAsleepByCG} powerAsleep=${this.displayAsleepByPower} `
|
|
93
|
+
+ `locked=${this.screenLocked} screensaver=${this.screensaverActive} sessionInactive=${this.sessionInactive}]`);
|
|
94
|
+
this.emit('display_state_changed', nowOn);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
setComponent(key, value, reason) {
|
|
98
|
+
if (this[key] === value)
|
|
99
|
+
return;
|
|
100
|
+
this[key] = value;
|
|
101
|
+
this.emitIfChanged(reason);
|
|
65
102
|
}
|
|
66
103
|
spawnProcess() {
|
|
67
104
|
if (!this.running)
|
|
@@ -82,12 +119,7 @@ export class DisplayMonitor extends EventEmitter {
|
|
|
82
119
|
const trimmed = line.trim();
|
|
83
120
|
if (trimmed !== '0' && trimmed !== '1')
|
|
84
121
|
return;
|
|
85
|
-
|
|
86
|
-
if (nowOn !== this.displayOn) {
|
|
87
|
-
this.displayOn = nowOn;
|
|
88
|
-
debug('display', `display state changed: ${nowOn ? 'ON' : 'ASLEEP'}`);
|
|
89
|
-
this.emit('display_state_changed', nowOn);
|
|
90
|
-
}
|
|
122
|
+
this.setComponent('displayAsleepByCG', trimmed === '1', trimmed === '1' ? 'cgDisplaySleep' : 'cgDisplayWake');
|
|
91
123
|
});
|
|
92
124
|
}
|
|
93
125
|
this.proc.on('error', (err) => {
|
|
@@ -115,29 +147,75 @@ export class DisplayMonitor extends EventEmitter {
|
|
|
115
147
|
this.spawnProcess();
|
|
116
148
|
}, RESTART_DELAY_MS);
|
|
117
149
|
}
|
|
118
|
-
/** Fallback poll using
|
|
150
|
+
/** Fallback poll using public macOS CLIs (works even if python/CGDisplayIsAsleep fails). */
|
|
119
151
|
startFallbackPoll() {
|
|
120
152
|
if (this.fallbackTimer)
|
|
121
153
|
return;
|
|
122
|
-
this.
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
this.emit('display_state_changed', nowOn);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
154
|
+
this.pollFallbackOnce();
|
|
155
|
+
this.fallbackTimer = setInterval(() => this.pollFallbackOnce(), FALLBACK_POLL_MS);
|
|
156
|
+
}
|
|
157
|
+
pollFallbackOnce() {
|
|
158
|
+
try {
|
|
159
|
+
const out = execFileSync('pmset', ['-g', 'powerstate', 'IODisplayWrangler'], { encoding: 'utf8' });
|
|
160
|
+
const match = out.match(/state:\s*(\d+)/);
|
|
161
|
+
if (match) {
|
|
162
|
+
const stateNum = parseInt(match[1], 10);
|
|
163
|
+
// 4 = awake, 1 = asleep (common mapping)
|
|
164
|
+
this.setComponent('displayAsleepByPower', stateNum < 4, `pmset:${stateNum}`);
|
|
136
165
|
}
|
|
137
|
-
|
|
138
|
-
|
|
166
|
+
}
|
|
167
|
+
catch (err) {
|
|
168
|
+
debug('display', `pmset poll failed: ${err}`);
|
|
169
|
+
}
|
|
170
|
+
try {
|
|
171
|
+
const out = execFileSync('ioreg', ['-n', 'Root', '-d1'], { encoding: 'utf8' });
|
|
172
|
+
const presence = parseIoregPresence(out);
|
|
173
|
+
if (presence.screenLocked !== undefined) {
|
|
174
|
+
this.setComponent('screenLocked', presence.screenLocked, presence.screenLocked ? 'screenLock' : 'screenUnlock');
|
|
175
|
+
}
|
|
176
|
+
if (presence.sessionInactive !== undefined) {
|
|
177
|
+
this.setComponent('sessionInactive', presence.sessionInactive, presence.sessionInactive ? 'sessionResign' : 'sessionResume');
|
|
139
178
|
}
|
|
140
|
-
}
|
|
179
|
+
}
|
|
180
|
+
catch (err) {
|
|
181
|
+
debug('display', `ioreg presence poll failed: ${err}`);
|
|
182
|
+
}
|
|
183
|
+
const screensaverActive = isScreensaverProcessActive();
|
|
184
|
+
this.setComponent('screensaverActive', screensaverActive, screensaverActive ? 'screensaverStart' : 'screensaverStop');
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
function parseIoregBool(output, key) {
|
|
188
|
+
// Real ioreg output prefixes most IOConsoleUsers keys with "k"
|
|
189
|
+
// ("kCGSSessionOnConsoleKey"=Yes); the lock marker historically appears
|
|
190
|
+
// both with and without it. Accept either.
|
|
191
|
+
const match = output.match(new RegExp(`"k?${key}"\\s*=\\s*(Yes|No|true|false|1|0)`, 'i'));
|
|
192
|
+
if (!match)
|
|
193
|
+
return undefined;
|
|
194
|
+
return /^(yes|true|1)$/i.test(match[1]);
|
|
195
|
+
}
|
|
196
|
+
export function parseIoregPresence(output) {
|
|
197
|
+
let screenLocked = parseIoregBool(output, 'CGSSessionScreenIsLocked');
|
|
198
|
+
const onConsole = parseIoregBool(output, 'CGSSessionOnConsoleKey');
|
|
199
|
+
// macOS REMOVES the ScreenIsLocked key on unlock rather than flipping it to
|
|
200
|
+
// No. If we can see the console-users dict at all, an absent lock key means
|
|
201
|
+
// UNLOCKED — returning undefined here latched screenLocked=true forever
|
|
202
|
+
// after the first lock, which kept displayOn=false and put every panel to
|
|
203
|
+
// sleep until the daemon restarted.
|
|
204
|
+
if (screenLocked === undefined && /IOConsoleUsers/.test(output)) {
|
|
205
|
+
screenLocked = false;
|
|
206
|
+
}
|
|
207
|
+
return {
|
|
208
|
+
...(screenLocked !== undefined ? { screenLocked } : {}),
|
|
209
|
+
...(onConsole !== undefined ? { sessionInactive: !onConsole } : {}),
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
function isScreensaverProcessActive() {
|
|
213
|
+
try {
|
|
214
|
+
execFileSync('pgrep', ['-x', 'ScreenSaverEngine'], { stdio: 'ignore' });
|
|
215
|
+
return true;
|
|
216
|
+
}
|
|
217
|
+
catch {
|
|
218
|
+
return false;
|
|
141
219
|
}
|
|
142
220
|
}
|
|
143
221
|
//# sourceMappingURL=display-monitor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"display-monitor.js","sourceRoot":"","sources":["../src/display-monitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,YAAY,EAAqB,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,MAAM,eAAe,GAAG,CAAC,CAAC;AAC1B,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,sBAAsB;AACrD,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAC/B,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAE/B,MAAM,aAAa,GAAG;;;;;;;;;;;;;iBAaL,eAAe;CAC/B,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,OAAO,cAAe,SAAQ,YAAY;IACtC,IAAI,GAAwB,IAAI,CAAC;IACjC,
|
|
1
|
+
{"version":3,"file":"display-monitor.js","sourceRoot":"","sources":["../src/display-monitor.ts"],"names":[],"mappings":"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"}
|
package/dist/esp32-serial.d.ts
CHANGED
|
@@ -20,6 +20,7 @@ export declare const EXCLUDE_PATTERNS: RegExp[];
|
|
|
20
20
|
/** @internal Exported for testing only */
|
|
21
21
|
export interface SerialConnection {
|
|
22
22
|
port: string;
|
|
23
|
+
fd: number | null;
|
|
23
24
|
stream: WriteStream;
|
|
24
25
|
reader: ReadStream | null;
|
|
25
26
|
readBuf: string;
|
|
@@ -27,10 +28,41 @@ export interface SerialConnection {
|
|
|
27
28
|
deviceInfo: {
|
|
28
29
|
board?: string;
|
|
29
30
|
version?: string;
|
|
31
|
+
buildHash?: string;
|
|
32
|
+
buildEpoch?: number;
|
|
30
33
|
wifiConfigured?: boolean;
|
|
31
34
|
wifiConnected?: boolean;
|
|
35
|
+
wifiRadioParked?: boolean;
|
|
36
|
+
/** The board's own WiFi IP as it reports over serial. Lets the daemon match
|
|
37
|
+
* this serial connection to the same board's WiFi WebSocket and prefer the
|
|
38
|
+
* single serial path (getSerialReachableBoards → transport dedup). */
|
|
39
|
+
ip?: string;
|
|
40
|
+
uptimeSec?: number;
|
|
41
|
+
resetReason?: string;
|
|
42
|
+
resetReasonCode?: number;
|
|
43
|
+
otaSupported?: boolean;
|
|
44
|
+
otaSlotCount?: number;
|
|
45
|
+
otaSlotSize?: number;
|
|
46
|
+
otaFreeSketchSpace?: number;
|
|
47
|
+
otaReason?: string;
|
|
48
|
+
timelineCount?: number;
|
|
49
|
+
sessionCount?: number;
|
|
50
|
+
usageFiveH?: number;
|
|
51
|
+
processingCount?: number;
|
|
32
52
|
} | null;
|
|
53
|
+
/** True once a device_info arrived on THIS connection (vs. cache-seeded).
|
|
54
|
+
* Identify retries key off this — a cache-seeded deviceInfo must not stop
|
|
55
|
+
* re-requests, or a reflashed board keeps its stale buildHash in /devices
|
|
56
|
+
* until the next reboot-while-attached. */
|
|
57
|
+
deviceInfoFresh: boolean;
|
|
33
58
|
provisionSent: boolean;
|
|
59
|
+
connectedAt: number;
|
|
60
|
+
lastReadAt: number;
|
|
61
|
+
lastWriteAt: number;
|
|
62
|
+
lastDeviceInfoRequestAt: number;
|
|
63
|
+
deviceInfoRequestsSent: number;
|
|
64
|
+
writeQueue: string[];
|
|
65
|
+
writeTimer: ReturnType<typeof setTimeout> | null;
|
|
34
66
|
}
|
|
35
67
|
/**
|
|
36
68
|
* Prepare a BridgeEvent for serial transmission.
|
|
@@ -38,7 +70,23 @@ export interface SerialConnection {
|
|
|
38
70
|
* - Strip fields the ESP32 firmware doesn't parse (reduce size for small RX buffers)
|
|
39
71
|
*/
|
|
40
72
|
/** @internal Exported for testing only */
|
|
41
|
-
export declare
|
|
73
|
+
export declare const SERIAL_SESSIONS_CAP = 10;
|
|
74
|
+
/**
|
|
75
|
+
* Pick which sessions survive the serial session cap.
|
|
76
|
+
*
|
|
77
|
+
* A naive `slice(0, cap)` lets a single agent type (e.g. several idle Claude Code
|
|
78
|
+
* sessions) fill every slot and starve other agents — a running Codex/OpenClaw
|
|
79
|
+
* session that lands past the cap never reaches the firmware's creature renderer.
|
|
80
|
+
*
|
|
81
|
+
* Instead we round-robin across agent types so each present type claims at least
|
|
82
|
+
* one slot before any type takes a second. Within a type, live + active
|
|
83
|
+
* (non-idle) sessions are preferred so a processing session is never dropped in
|
|
84
|
+
* favour of an idle sibling. Order within a type is otherwise preserved (stable).
|
|
85
|
+
*/
|
|
86
|
+
export declare function roundRobinByAgentType(sessions: any[], cap: number): any[];
|
|
87
|
+
export declare function prepareForSerial(event: BridgeEvent, _conn?: Pick<SerialConnection, 'deviceInfo'>): BridgeEvent;
|
|
88
|
+
/** @internal Exported for testing only */
|
|
89
|
+
export declare function isRetryableSerialIoError(err: unknown): boolean;
|
|
42
90
|
/** @internal Exported for testing only */
|
|
43
91
|
export declare function handleSerialLine(conn: SerialConnection, line: string): void;
|
|
44
92
|
/**
|
|
@@ -52,6 +100,21 @@ export declare function setESP32StateProvider(provider: () => BridgeEvent | null
|
|
|
52
100
|
* Heartbeat sends both state + usage every cycle so ESP32 stays in sync.
|
|
53
101
|
*/
|
|
54
102
|
export declare function setESP32UsageProvider(provider: () => BridgeEvent | null): void;
|
|
103
|
+
/**
|
|
104
|
+
* Register a callback that returns the current display_state event.
|
|
105
|
+
* display_state is otherwise edge-triggered (on change + on connect); a board
|
|
106
|
+
* that misses the wake edge (half-open serial, daemon handoff) would stay
|
|
107
|
+
* dark until power-cycled. The heartbeat re-sync makes it self-heal.
|
|
108
|
+
*/
|
|
109
|
+
export declare function setESP32DisplayStateProvider(provider: () => BridgeEvent | null): void;
|
|
110
|
+
/**
|
|
111
|
+
* Register a callback that returns the current sessions_list event.
|
|
112
|
+
* Like display_state it is otherwise edge-triggered (on change + on connect);
|
|
113
|
+
* a board that (re)connects during a quiet window — daemon handoff, half-open
|
|
114
|
+
* serial — would sit on an empty roster ("no active sessions") until the next
|
|
115
|
+
* unrelated session change. The heartbeat re-sync makes it self-heal.
|
|
116
|
+
*/
|
|
117
|
+
export declare function setESP32SessionsListProvider(provider: () => BridgeEvent | null): void;
|
|
55
118
|
/**
|
|
56
119
|
* Register a provider that returns all initial state events (state + usage + sessions).
|
|
57
120
|
* Called when a new ESP32 device connects to send full state immediately.
|
|
@@ -62,6 +125,43 @@ export declare function setESP32InitialStateProvider(provider: () => BridgeEvent
|
|
|
62
125
|
* Called with (portPath, parsedMessage) for each JSON message.
|
|
63
126
|
*/
|
|
64
127
|
export declare function onESP32Message(handler: (port: string, msg: ESP32ToHostMessage) => void): void;
|
|
128
|
+
/**
|
|
129
|
+
* A connection that opened cleanly but has never spoken the AgentDeck protocol:
|
|
130
|
+
* no device_info, no cached board for this port, and not a single valid JSON
|
|
131
|
+
* line read. Strong evidence it's a foreign device (e.g. a TRMNL panel) we
|
|
132
|
+
* should stop holding/resetting rather than an AgentDeck board that's just slow.
|
|
133
|
+
*/
|
|
134
|
+
/** @internal Exported for testing only */
|
|
135
|
+
export declare function isUnidentifiedForeign(conn: SerialConnection): boolean;
|
|
136
|
+
/**
|
|
137
|
+
* A CDC port that IS an AgentDeck board (live device_info, or a cached board for
|
|
138
|
+
* this port) yet has produced no read since this (re)connection. A healthy board
|
|
139
|
+
* answers device_info/keepalive within seconds, so lastReadAt===0 well past a
|
|
140
|
+
* generous grace means a half-open USB-CDC pipe (board reset / re-enumerated)
|
|
141
|
+
* that heartbeat writes will never revive — the FD must be recycled so re-poll
|
|
142
|
+
* re-probes. Mutually exclusive with isUnidentifiedForeign (this REQUIRES an
|
|
143
|
+
* identified board; that one requires none).
|
|
144
|
+
*/
|
|
145
|
+
/** @internal Exported for testing only */
|
|
146
|
+
export declare function isHalfOpenIdentifiedCdc(conn: Pick<SerialConnection, 'port' | 'deviceInfo' | 'lastReadAt' | 'connectedAt'>, now?: number): boolean;
|
|
147
|
+
/**
|
|
148
|
+
* Whether the periodic heartbeat should (re)send a device_info_request to
|
|
149
|
+
* re-identify this connection. Keys off deviceInfoFresh (a LIVE reply on THIS
|
|
150
|
+
* connection), NOT conn.deviceInfo — a cache-seeded connection carries a stale
|
|
151
|
+
* deviceInfo but deviceInfoFresh=false and must keep re-requesting until the
|
|
152
|
+
* board answers, so a reflashed/OTA-updated board on the same port refreshes
|
|
153
|
+
* its buildHash/OTA fields instead of freezing at the cache seed. Capped by
|
|
154
|
+
* DEVICE_INFO_MAX_REQUESTS and paced by DEVICE_INFO_RETRY_MS.
|
|
155
|
+
*/
|
|
156
|
+
/** @internal Exported for testing only */
|
|
157
|
+
export declare function shouldRetryDeviceInfoIdentify(conn: Pick<SerialConnection, 'connected' | 'deviceInfoFresh' | 'deviceInfoRequestsSent' | 'lastDeviceInfoRequestAt'>, now?: number): boolean;
|
|
158
|
+
/** @internal Exported for testing only. True if the port is in active cooldown. */
|
|
159
|
+
export declare function isForeignPortDenylisted(port: string, now?: number): boolean;
|
|
160
|
+
/** @internal Exported for testing only. Clear all foreign-port tracking state. */
|
|
161
|
+
export declare function __resetForeignPortState(): void;
|
|
162
|
+
/** @internal Exported for testing only.
|
|
163
|
+
* Count a failed identification cycle; denylist once it crosses the threshold. */
|
|
164
|
+
export declare function recordForeignProbeFailure(port: string): void;
|
|
65
165
|
/**
|
|
66
166
|
* Start ESP32 serial bridge.
|
|
67
167
|
* Detects USB serial ports and opens connections.
|
|
@@ -83,6 +183,8 @@ export declare function sendWifiProvision(port: string, msg: WifiProvisionMessag
|
|
|
83
183
|
* Send WiFi provision to all connected ESP32 devices that haven't been provisioned.
|
|
84
184
|
*/
|
|
85
185
|
export declare function sendWifiProvisionToAll(msg: WifiProvisionMessage): number;
|
|
186
|
+
/** @internal Exported for testing only */
|
|
187
|
+
export declare function shouldSendWifiProvision(conn: Pick<SerialConnection, 'connected' | 'deviceInfo' | 'provisionSent'>): boolean;
|
|
86
188
|
/**
|
|
87
189
|
* Get device info for all connected ESP32 devices.
|
|
88
190
|
*/
|
|
@@ -90,8 +192,33 @@ export declare function getESP32DeviceInfo(): Array<{
|
|
|
90
192
|
port: string;
|
|
91
193
|
board?: string;
|
|
92
194
|
version?: string;
|
|
195
|
+
buildHash?: string;
|
|
196
|
+
buildEpoch?: number;
|
|
93
197
|
wifiConfigured?: boolean;
|
|
94
198
|
wifiConnected?: boolean;
|
|
199
|
+
wifiRadioParked?: boolean;
|
|
200
|
+
uptimeSec?: number;
|
|
201
|
+
otaSupported?: boolean;
|
|
202
|
+
otaSlotCount?: number;
|
|
203
|
+
otaSlotSize?: number;
|
|
204
|
+
otaFreeSketchSpace?: number;
|
|
205
|
+
otaReason?: string;
|
|
206
|
+
}>;
|
|
207
|
+
/**
|
|
208
|
+
* Board identities currently reachable over a LIVE, responsive USB serial
|
|
209
|
+
* connection (has announced device_info and is actively read/written). The
|
|
210
|
+
* daemon uses this to enforce single-path communication: when a physical board
|
|
211
|
+
* is driven over serial, its WiFi WebSocket copy is redundant and is suppressed
|
|
212
|
+
* (see daemon-server transport dedup). A power-only USB (no enumerated port) or
|
|
213
|
+
* a silent/booting port is NOT responsive, so it never appears here and the
|
|
214
|
+
* board keeps using WiFi — exactly the desired fallback.
|
|
215
|
+
*
|
|
216
|
+
* `ip` is the board's own WiFi IP (when connected), used to confirm the serial
|
|
217
|
+
* connection and the WiFi socket are the same physical unit before deduping.
|
|
218
|
+
*/
|
|
219
|
+
export declare function getSerialReachableBoards(): Array<{
|
|
220
|
+
board: string;
|
|
221
|
+
ip?: string;
|
|
95
222
|
}>;
|
|
96
223
|
/**
|
|
97
224
|
* Wake recovery — close stale file descriptors, force immediate re-poll.
|
|
@@ -109,4 +236,36 @@ export declare function esp32ConnectionCount(): number;
|
|
|
109
236
|
* Get list of connected ESP32 serial port paths.
|
|
110
237
|
*/
|
|
111
238
|
export declare function getESP32Ports(): string[];
|
|
239
|
+
/**
|
|
240
|
+
* Get detailed connection status for all ESP32 devices.
|
|
241
|
+
* Used by /api/status endpoint to show connection health.
|
|
242
|
+
*/
|
|
243
|
+
export declare function getSerialConnectionStatus(): Array<{
|
|
244
|
+
port: string;
|
|
245
|
+
connected: boolean;
|
|
246
|
+
board?: string;
|
|
247
|
+
version?: string;
|
|
248
|
+
buildHash?: string;
|
|
249
|
+
buildEpoch?: number;
|
|
250
|
+
wifiConfigured?: boolean;
|
|
251
|
+
wifiConnected?: boolean;
|
|
252
|
+
wifiRadioParked?: boolean;
|
|
253
|
+
uptimeSec?: number;
|
|
254
|
+
otaSupported?: boolean;
|
|
255
|
+
otaSlotCount?: number;
|
|
256
|
+
otaSlotSize?: number;
|
|
257
|
+
otaFreeSketchSpace?: number;
|
|
258
|
+
otaReason?: string;
|
|
259
|
+
timelineCount?: number;
|
|
260
|
+
sessionCount?: number;
|
|
261
|
+
usageFiveH?: number;
|
|
262
|
+
processingCount?: number;
|
|
263
|
+
transportOpen: boolean;
|
|
264
|
+
lastReadAt: number;
|
|
265
|
+
lastWriteAt: number;
|
|
266
|
+
lastReadSecondsAgo: number | null;
|
|
267
|
+
lastWriteSecondsAgo: number;
|
|
268
|
+
stale: boolean;
|
|
269
|
+
}>;
|
|
270
|
+
export declare function getSerialLastError(): string | null;
|
|
112
271
|
//# sourceMappingURL=esp32-serial.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"esp32-serial.d.ts","sourceRoot":"","sources":["../src/esp32-serial.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,
|
|
1
|
+
{"version":3,"file":"esp32-serial.d.ts","sourceRoot":"","sources":["../src/esp32-serial.ts"],"names":[],"mappings":"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"}
|