@agentdeck/bridge 0.2.2 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/fm-helper/agentdeck-fm-helper +0 -0
- 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 +133 -6
- package/dist/apme/collector.d.ts.map +1 -1
- package/dist/apme/collector.js +471 -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 +117 -11
- package/dist/apme/dashboard-html.js.map +1 -1
- package/dist/apme/http.d.ts.map +1 -1
- package/dist/apme/http.js +52 -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 +146 -9
- package/dist/apme/index.js.map +1 -1
- package/dist/apme/judge-detect.d.ts +26 -0
- package/dist/apme/judge-detect.d.ts.map +1 -0
- package/dist/apme/judge-detect.js +69 -0
- package/dist/apme/judge-detect.js.map +1 -0
- 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 +99 -4
- package/dist/apme/runner.d.ts.map +1 -1
- package/dist/apme/runner.js +743 -72
- 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 +17 -11
- package/dist/apme/settings.d.ts.map +1 -1
- package/dist/apme/settings.js +30 -9
- 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 +112 -0
- package/dist/awaiting-overlay.d.ts.map +1 -0
- package/dist/awaiting-overlay.js +179 -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 +34 -1
- package/dist/bridge-core.d.ts.map +1 -1
- package/dist/bridge-core.js +207 -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/claude-permission-rules.d.ts +55 -0
- package/dist/claude-permission-rules.d.ts.map +1 -0
- package/dist/claude-permission-rules.js +197 -0
- package/dist/claude-permission-rules.js.map +1 -0
- package/dist/cli.d.ts +15 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +1030 -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/d200h/image-renderer.d.ts +4 -16
- package/dist/d200h/image-renderer.d.ts.map +1 -1
- package/dist/d200h/image-renderer.js +46 -212
- package/dist/d200h/image-renderer.js.map +1 -1
- package/dist/daemon-server.d.ts +85 -0
- package/dist/daemon-server.d.ts.map +1 -1
- package/dist/daemon-server.js +1975 -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 +190 -1
- package/dist/esp32-serial.d.ts.map +1 -1
- package/dist/esp32-serial.js +1090 -156
- 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 +119 -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 +23 -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 +217 -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 +3 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +18 -5
- 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/model-catalog.d.ts +1 -1
- package/dist/model-catalog.d.ts.map +1 -1
- package/dist/model-catalog.js +2 -4
- package/dist/model-catalog.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/d200h-module.d.ts +22 -0
- package/dist/modules/d200h-module.d.ts.map +1 -1
- package/dist/modules/d200h-module.js +200 -65
- package/dist/modules/d200h-module.js.map +1 -1
- 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/trmnl-module.d.ts +38 -0
- package/dist/modules/trmnl-module.d.ts.map +1 -0
- package/dist/modules/trmnl-module.js +111 -0
- package/dist/modules/trmnl-module.js.map +1 -0
- package/dist/modules/types.d.ts +4 -2
- package/dist/modules/types.d.ts.map +1 -1
- package/dist/observed-steering.d.ts +93 -0
- package/dist/observed-steering.d.ts.map +1 -0
- package/dist/observed-steering.js +247 -0
- package/dist/observed-steering.js.map +1 -0
- 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/opencode-steering.d.ts +36 -0
- package/dist/opencode-steering.d.ts.map +1 -0
- package/dist/opencode-steering.js +84 -0
- package/dist/opencode-steering.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 +172 -18
- package/dist/output-parser.js.map +1 -1
- package/dist/passive-observer.d.ts +32 -0
- package/dist/passive-observer.d.ts.map +1 -1
- package/dist/passive-observer.js +288 -49
- package/dist/passive-observer.js.map +1 -1
- package/dist/permission-resolver.d.ts +55 -0
- package/dist/permission-resolver.d.ts.map +1 -0
- package/dist/permission-resolver.js +112 -0
- package/dist/permission-resolver.js.map +1 -0
- package/dist/pixoo/micro-glyphs.d.ts +18 -0
- package/dist/pixoo/micro-glyphs.d.ts.map +1 -0
- package/dist/pixoo/micro-glyphs.js +143 -0
- package/dist/pixoo/micro-glyphs.js.map +1 -0
- package/dist/pixoo/official-dot-glyphs.generated.d.ts +8 -0
- package/dist/pixoo/official-dot-glyphs.generated.d.ts.map +1 -0
- package/dist/pixoo/official-dot-glyphs.generated.js +247 -0
- package/dist/pixoo/official-dot-glyphs.generated.js.map +1 -0
- package/dist/pixoo/pixoo-bridge.d.ts +16 -8
- package/dist/pixoo/pixoo-bridge.d.ts.map +1 -1
- package/dist/pixoo/pixoo-bridge.js +127 -35
- 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 +27 -3
- package/dist/pixoo/pixoo-renderer.d.ts.map +1 -1
- package/dist/pixoo/pixoo-renderer.js +533 -135
- 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 +84 -11
- package/dist/pixoo/pixoo-sprites.d.ts.map +1 -1
- package/dist/pixoo/pixoo-sprites.js +620 -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/review-runner.d.ts +113 -0
- package/dist/review-runner.d.ts.map +1 -0
- package/dist/review-runner.js +428 -0
- package/dist/review-runner.js.map +1 -0
- 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 +25 -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-focus-relay.d.ts.map +1 -1
- package/dist/session-focus-relay.js +7 -1
- package/dist/session-focus-relay.js.map +1 -1
- package/dist/session-registry.d.ts +74 -3
- package/dist/session-registry.d.ts.map +1 -1
- package/dist/session-registry.js +140 -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 +112 -3
- package/dist/timeline-store.d.ts.map +1 -1
- package/dist/timeline-store.js +460 -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/trmnl/byos-server.d.ts +39 -0
- package/dist/trmnl/byos-server.d.ts.map +1 -0
- package/dist/trmnl/byos-server.js +301 -0
- package/dist/trmnl/byos-server.js.map +1 -0
- package/dist/trmnl/frame-cache.d.ts +37 -0
- package/dist/trmnl/frame-cache.d.ts.map +1 -0
- package/dist/trmnl/frame-cache.js +157 -0
- package/dist/trmnl/frame-cache.js.map +1 -0
- package/dist/trmnl/image-renderer.d.ts +27 -0
- package/dist/trmnl/image-renderer.d.ts.map +1 -0
- package/dist/trmnl/image-renderer.js +235 -0
- package/dist/trmnl/image-renderer.js.map +1 -0
- package/dist/trmnl/trmnl-settings.d.ts +96 -0
- package/dist/trmnl/trmnl-settings.d.ts.map +1 -0
- package/dist/trmnl/trmnl-settings.js +177 -0
- package/dist/trmnl/trmnl-settings.js.map +1 -0
- package/dist/trmnl/trmnl-telemetry.d.ts +47 -0
- package/dist/trmnl/trmnl-telemetry.d.ts.map +1 -0
- package/dist/trmnl/trmnl-telemetry.js +56 -0
- package/dist/trmnl/trmnl-telemetry.js.map +1 -0
- 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 +38 -11
- 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 +355 -121
- package/dist/tui/renderer.js.map +1 -1
- package/dist/tui/terrarium.d.ts.map +1 -1
- package/dist/tui/terrarium.js +44 -51
- 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 +98 -13
- 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/version-check.d.ts.map +1 -1
- package/dist/version-check.js +1 -17
- package/dist/version-check.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 +17 -3
- package/dist/ws-server.d.ts.map +1 -1
- package/dist/ws-server.js +78 -8
- package/dist/ws-server.js.map +1 -1
- package/fm-helper/AgentDeckFMHelper.swift +112 -0
- package/package.json +10 -4
- 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
|
@@ -9,6 +9,10 @@ export declare class SerialModule implements DeviceModule {
|
|
|
9
9
|
setStateProvider(provider: () => BridgeEvent | null): void;
|
|
10
10
|
/** Set a function that provides the latest usage event for ESP32 heartbeat. */
|
|
11
11
|
setUsageProvider(provider: () => BridgeEvent | null): void;
|
|
12
|
+
/** Set a function that provides the current display_state for heartbeat re-sync. */
|
|
13
|
+
setDisplayStateProvider(provider: () => BridgeEvent | null): void;
|
|
14
|
+
/** Set a function that provides the current sessions_list for heartbeat re-sync. */
|
|
15
|
+
setSessionsListProvider(provider: () => BridgeEvent | null): void;
|
|
12
16
|
private initialStateProvider;
|
|
13
17
|
/** Set a provider that returns all initial state events for newly connected devices. */
|
|
14
18
|
setInitialStateProvider(provider: () => BridgeEvent[]): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serial-module.d.ts","sourceRoot":"","sources":["../../src/modules/serial-module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"serial-module.d.ts","sourceRoot":"","sources":["../../src/modules/serial-module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAW9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,qBAAa,YAAa,YAAW,YAAY;IAC/C,QAAQ,CAAC,IAAI,YAAY;IACzB,OAAO,CAAC,aAAa,CAA2C;IAE1D,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAShE;yFACqF;IACrF,gBAAgB,CAAC,QAAQ,EAAE,MAAM,WAAW,GAAG,IAAI,GAAG,IAAI;IAK1D,+EAA+E;IAC/E,gBAAgB,CAAC,QAAQ,EAAE,MAAM,WAAW,GAAG,IAAI,GAAG,IAAI;IAI1D,oFAAoF;IACpF,uBAAuB,CAAC,QAAQ,EAAE,MAAM,WAAW,GAAG,IAAI,GAAG,IAAI;IAIjE,oFAAoF;IACpF,uBAAuB,CAAC,QAAQ,EAAE,MAAM,WAAW,GAAG,IAAI,GAAG,IAAI;IAIjE,OAAO,CAAC,oBAAoB,CAAsC;IAElE,wFAAwF;IACxF,uBAAuB,CAAC,QAAQ,EAAE,MAAM,WAAW,EAAE,GAAG,IAAI;IAKtD,KAAK,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAG5B"}
|
|
@@ -1,21 +1,15 @@
|
|
|
1
|
-
import { startESP32Serial, stopESP32Serial, broadcastESP32, setESP32StateProvider, setESP32UsageProvider, setESP32InitialStateProvider, } from '../esp32-serial.js';
|
|
1
|
+
import { startESP32Serial, stopESP32Serial, broadcastESP32, setESP32StateProvider, setESP32UsageProvider, setESP32DisplayStateProvider, setESP32SessionsListProvider, setESP32InitialStateProvider, } from '../esp32-serial.js';
|
|
2
2
|
export class SerialModule {
|
|
3
3
|
name = 'serial';
|
|
4
4
|
stateProvider = null;
|
|
5
5
|
async shouldActivate(config) {
|
|
6
6
|
if (config === false)
|
|
7
7
|
return false;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
//
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const devFiles = readdirSync('/dev');
|
|
14
|
-
return devFiles.some((f) => f.startsWith('tty.usbserial') || f.startsWith('tty.wchusbserial') || f.startsWith('tty.usbmodem'));
|
|
15
|
-
}
|
|
16
|
-
catch {
|
|
17
|
-
return false;
|
|
18
|
-
}
|
|
8
|
+
// Always activate for 'auto' or true: startESP32Serial() polls /dev every 10s
|
|
9
|
+
// internally, so the module is harmless when no device is attached at daemon start.
|
|
10
|
+
// Checking /dev at startup caused a bug where plugging in ESP32 *after* the daemon
|
|
11
|
+
// started would never be detected (pollForDevices never ran).
|
|
12
|
+
return true;
|
|
19
13
|
}
|
|
20
14
|
/** Set a function that provides the latest state event for ESP32 heartbeat.
|
|
21
15
|
* Can be called before or after start() — if already started, wires immediately. */
|
|
@@ -27,6 +21,14 @@ export class SerialModule {
|
|
|
27
21
|
setUsageProvider(provider) {
|
|
28
22
|
setESP32UsageProvider(provider);
|
|
29
23
|
}
|
|
24
|
+
/** Set a function that provides the current display_state for heartbeat re-sync. */
|
|
25
|
+
setDisplayStateProvider(provider) {
|
|
26
|
+
setESP32DisplayStateProvider(provider);
|
|
27
|
+
}
|
|
28
|
+
/** Set a function that provides the current sessions_list for heartbeat re-sync. */
|
|
29
|
+
setSessionsListProvider(provider) {
|
|
30
|
+
setESP32SessionsListProvider(provider);
|
|
31
|
+
}
|
|
30
32
|
initialStateProvider = null;
|
|
31
33
|
/** Set a provider that returns all initial state events for newly connected devices. */
|
|
32
34
|
setInitialStateProvider(provider) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serial-module.js","sourceRoot":"","sources":["../../src/modules/serial-module.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,4BAA4B,GAC7B,MAAM,oBAAoB,CAAC;AAI5B,MAAM,OAAO,YAAY;IACd,IAAI,GAAG,QAAQ,CAAC;IACjB,aAAa,GAAsC,IAAI,CAAC;IAEhE,KAAK,CAAC,cAAc,CAAC,MAAwB;QAC3C,IAAI,MAAM,KAAK,KAAK;YAAE,OAAO,KAAK,CAAC;QACnC,
|
|
1
|
+
{"version":3,"file":"serial-module.js","sourceRoot":"","sources":["../../src/modules/serial-module.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,4BAA4B,EAC5B,4BAA4B,EAC5B,4BAA4B,GAC7B,MAAM,oBAAoB,CAAC;AAI5B,MAAM,OAAO,YAAY;IACd,IAAI,GAAG,QAAQ,CAAC;IACjB,aAAa,GAAsC,IAAI,CAAC;IAEhE,KAAK,CAAC,cAAc,CAAC,MAAwB;QAC3C,IAAI,MAAM,KAAK,KAAK;YAAE,OAAO,KAAK,CAAC;QACnC,8EAA8E;QAC9E,oFAAoF;QACpF,mFAAmF;QACnF,8DAA8D;QAC9D,OAAO,IAAI,CAAC;IACd,CAAC;IAED;yFACqF;IACrF,gBAAgB,CAAC,QAAkC;QACjD,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;QAC9B,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IAED,+EAA+E;IAC/E,gBAAgB,CAAC,QAAkC;QACjD,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IAED,oFAAoF;IACpF,uBAAuB,CAAC,QAAkC;QACxD,4BAA4B,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;IAED,oFAAoF;IACpF,uBAAuB,CAAC,QAAkC;QACxD,4BAA4B,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;IAEO,oBAAoB,GAAiC,IAAI,CAAC;IAElE,wFAAwF;IACxF,uBAAuB,CAAC,QAA6B;QACnD,IAAI,CAAC,oBAAoB,GAAG,QAAQ,CAAC;QACrC,4BAA4B,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAkB;QAC5B,gBAAgB,EAAE,CAAC;QACnB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC5C,CAAC;QACD,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,IAAI;QACR,eAAe,EAAE,CAAC;IACpB,CAAC;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { BridgeContext, DeviceModule } from './types.js';
|
|
2
|
+
export declare class TimeboxModule implements DeviceModule {
|
|
3
|
+
readonly name = "timebox";
|
|
4
|
+
shouldActivate(config: 'auto' | boolean): Promise<boolean>;
|
|
5
|
+
start(ctx: BridgeContext): Promise<void>;
|
|
6
|
+
stop(): Promise<void>;
|
|
7
|
+
statusSnapshot(): Record<string, unknown>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=timebox-module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timebox-module.d.ts","sourceRoot":"","sources":["../../src/modules/timebox-module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAS9D,qBAAa,aAAc,YAAW,YAAY;IAChD,QAAQ,CAAC,IAAI,aAAa;IAEpB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAO1D,KAAK,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAaxC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAa1C"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { loadTimeboxDevices, deviceId, isTimeboxAutoDiscoverEnabled, } from '../timebox/timebox-settings.js';
|
|
2
|
+
import { startTimeboxSync, stopTimeboxSync } from '../timebox/timebox-daemon-sync.js';
|
|
3
|
+
import { autoDiscoverTimebox } from '../timebox/timebox-discover.js';
|
|
4
|
+
export class TimeboxModule {
|
|
5
|
+
name = 'timebox';
|
|
6
|
+
async shouldActivate(config) {
|
|
7
|
+
if (config === false)
|
|
8
|
+
return false;
|
|
9
|
+
if (config === true)
|
|
10
|
+
return true;
|
|
11
|
+
// Activate when a device is configured OR auto-discovery may find one.
|
|
12
|
+
return loadTimeboxDevices().length > 0 || isTimeboxAutoDiscoverEnabled();
|
|
13
|
+
}
|
|
14
|
+
async start(ctx) {
|
|
15
|
+
// Start sync for any already-configured device immediately, then run a
|
|
16
|
+
// background BLE scan if none is configured. Discovery is non-blocking so
|
|
17
|
+
// daemon startup isn't delayed by the ~5s scan; when it adds a device we
|
|
18
|
+
// re-invoke startTimeboxSync (idempotent per-address) to pick it up.
|
|
19
|
+
startTimeboxSync(ctx.port);
|
|
20
|
+
if (loadTimeboxDevices().length === 0 && isTimeboxAutoDiscoverEnabled()) {
|
|
21
|
+
void autoDiscoverTimebox().then((added) => {
|
|
22
|
+
if (added > 0)
|
|
23
|
+
startTimeboxSync(ctx.port);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
async stop() {
|
|
28
|
+
// Await each child's blank-panel farewell so the panel doesn't freeze on its
|
|
29
|
+
// last dashboard frame when the daemon exits.
|
|
30
|
+
await stopTimeboxSync(true);
|
|
31
|
+
}
|
|
32
|
+
statusSnapshot() {
|
|
33
|
+
const devices = loadTimeboxDevices();
|
|
34
|
+
return {
|
|
35
|
+
configuredDeviceCount: devices.length,
|
|
36
|
+
devices: devices.map((d) => ({
|
|
37
|
+
id: deviceId(d),
|
|
38
|
+
transport: 'ble',
|
|
39
|
+
address: d.address,
|
|
40
|
+
name: d.name ?? 'Timebox Mini',
|
|
41
|
+
brightness: d.brightness ?? 100,
|
|
42
|
+
})),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=timebox-module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timebox-module.js","sourceRoot":"","sources":["../../src/modules/timebox-module.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAClB,QAAQ,EACR,4BAA4B,GAC7B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACtF,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAErE,MAAM,OAAO,aAAa;IACf,IAAI,GAAG,SAAS,CAAC;IAE1B,KAAK,CAAC,cAAc,CAAC,MAAwB;QAC3C,IAAI,MAAM,KAAK,KAAK;YAAE,OAAO,KAAK,CAAC;QACnC,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QACjC,uEAAuE;QACvE,OAAO,kBAAkB,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,4BAA4B,EAAE,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAkB;QAC5B,uEAAuE;QACvE,0EAA0E;QAC1E,yEAAyE;QACzE,qEAAqE;QACrE,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,kBAAkB,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,4BAA4B,EAAE,EAAE,CAAC;YACxE,KAAK,mBAAmB,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;gBACxC,IAAI,KAAK,GAAG,CAAC;oBAAE,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC5C,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI;QACR,6EAA6E;QAC7E,8CAA8C;QAC9C,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,cAAc;QACZ,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;QACrC,OAAO;YACL,qBAAqB,EAAE,OAAO,CAAC,MAAM;YACrC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC3B,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;gBACf,SAAS,EAAE,KAAK;gBAChB,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,cAAc;gBAC9B,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,GAAG;aAChC,CAAC,CAAC;SACJ,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TRMNL device module — keeps the BYOS frame cache fresh.
|
|
3
|
+
*
|
|
4
|
+
* TRMNL is a WiFi e-ink display that PULLS rendered images from a server on its
|
|
5
|
+
* own schedule (the BYOS /api/display contract), so unlike Pixoo/D200H this
|
|
6
|
+
* module never pushes to hardware. It only subscribes to AgentDeck state
|
|
7
|
+
* broadcasts and re-renders the cached 800×480 1-bit frame when the visual state
|
|
8
|
+
* changes; the daemon's HTTP routes (bridge/src/trmnl/byos-server.ts) serve that
|
|
9
|
+
* frame when a device polls.
|
|
10
|
+
*
|
|
11
|
+
* Rendering is gated on a device being registered (or `trmnl.enabled`) so a
|
|
12
|
+
* machine with no TRMNL panel does no extra rasterization. The gate is refreshed
|
|
13
|
+
* from settings on a short interval and immediately when a device enrolls.
|
|
14
|
+
*/
|
|
15
|
+
import type { DeviceModule, BridgeContext } from './types.js';
|
|
16
|
+
export declare class TrmnlModule implements DeviceModule {
|
|
17
|
+
readonly name = "trmnl";
|
|
18
|
+
private lastState;
|
|
19
|
+
private lastUsage;
|
|
20
|
+
private lastSessions;
|
|
21
|
+
private gateActive;
|
|
22
|
+
private gateTimer;
|
|
23
|
+
shouldActivate(config: 'auto' | boolean): Promise<boolean>;
|
|
24
|
+
start(ctx: BridgeContext): Promise<void>;
|
|
25
|
+
stop(): Promise<void>;
|
|
26
|
+
statusSnapshot(): Record<string, unknown>;
|
|
27
|
+
/** Re-read settings to decide whether rendering is worthwhile. */
|
|
28
|
+
private refreshGate;
|
|
29
|
+
private render;
|
|
30
|
+
/**
|
|
31
|
+
* Combine the latest state_update + usage_update + sessions into one render
|
|
32
|
+
* event. usage_update is spread last so its 5H/7D + reset fields win. No time
|
|
33
|
+
* component is added: the frame hash must change only on real visual change so
|
|
34
|
+
* a real TRMNL can skip the (battery + flaky-WiFi) re-download otherwise.
|
|
35
|
+
*/
|
|
36
|
+
private buildRenderState;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=trmnl-module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trmnl-module.d.ts","sourceRoot":"","sources":["../../src/modules/trmnl-module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAgB9D,qBAAa,WAAY,YAAW,YAAY;IAC9C,QAAQ,CAAC,IAAI,WAAW;IAExB,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAA+C;IAE1D,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ1D,KAAK,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBxC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAoBzC,kEAAkE;IAClE,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,MAAM;IAWd;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;CAYzB"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { initTrmnlRenderer, isTrmnlResvgLoaded } from '../trmnl/image-renderer.js';
|
|
2
|
+
import { refreshTrmnlFrame, setTrmnlState, getTrmnlFrameKeys, getTrmnlActivity } from '../trmnl/frame-cache.js';
|
|
3
|
+
import { loadTrmnlConfig, effectiveRefreshRate } from '../trmnl/trmnl-settings.js';
|
|
4
|
+
import { getTelemetryHealth } from '../trmnl/trmnl-telemetry.js';
|
|
5
|
+
import { debug } from '../logger.js';
|
|
6
|
+
const TAG = 'trmnl';
|
|
7
|
+
const GATE_REFRESH_MS = 30_000;
|
|
8
|
+
function isControllableOrObserved(session) {
|
|
9
|
+
// TRMNL is a read-only dashboard — show every live session (controllable or
|
|
10
|
+
// observed), unlike D200H which filters to controllable for its buttons.
|
|
11
|
+
return !!session && session.alive !== false;
|
|
12
|
+
}
|
|
13
|
+
export class TrmnlModule {
|
|
14
|
+
name = 'trmnl';
|
|
15
|
+
lastState = null;
|
|
16
|
+
lastUsage = null;
|
|
17
|
+
lastSessions = [];
|
|
18
|
+
gateActive = false;
|
|
19
|
+
gateTimer = null;
|
|
20
|
+
async shouldActivate(config) {
|
|
21
|
+
if (config === false)
|
|
22
|
+
return false;
|
|
23
|
+
if (config === true)
|
|
24
|
+
return true;
|
|
25
|
+
// auto: active if a device is registered or the user forced it on.
|
|
26
|
+
const cfg = loadTrmnlConfig();
|
|
27
|
+
return cfg.enabled || cfg.devices.length > 0;
|
|
28
|
+
}
|
|
29
|
+
async start(ctx) {
|
|
30
|
+
await initTrmnlRenderer();
|
|
31
|
+
this.refreshGate();
|
|
32
|
+
this.gateTimer = setInterval(() => this.refreshGate(), GATE_REFRESH_MS);
|
|
33
|
+
ctx.wsServer.onBroadcast((evt) => {
|
|
34
|
+
if (evt?.type === 'state_update') {
|
|
35
|
+
this.lastState = evt;
|
|
36
|
+
this.render();
|
|
37
|
+
}
|
|
38
|
+
else if (evt?.type === 'usage_update') {
|
|
39
|
+
// state_update never carries usage; the 5H/7D gauges + token/cost footer
|
|
40
|
+
// only exist on usage_update (same as Pixoo/ESP32). Without this the panel
|
|
41
|
+
// renders a confident 0% forever.
|
|
42
|
+
this.lastUsage = evt;
|
|
43
|
+
this.render();
|
|
44
|
+
}
|
|
45
|
+
else if (evt?.type === 'sessions_list') {
|
|
46
|
+
this.lastSessions = (evt.sessions ?? []).filter(isControllableOrObserved);
|
|
47
|
+
this.render();
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
debug(TAG, `started (resvg=${isTrmnlResvgLoaded()}, gate=${this.gateActive})`);
|
|
51
|
+
}
|
|
52
|
+
async stop() {
|
|
53
|
+
if (this.gateTimer) {
|
|
54
|
+
clearInterval(this.gateTimer);
|
|
55
|
+
this.gateTimer = null;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
statusSnapshot() {
|
|
59
|
+
const cfg = loadTrmnlConfig();
|
|
60
|
+
const activeResolutions = getTrmnlFrameKeys();
|
|
61
|
+
const activity = getTrmnlActivity();
|
|
62
|
+
const currentRefreshRate = effectiveRefreshRate(cfg, activity);
|
|
63
|
+
return {
|
|
64
|
+
resvgLoaded: isTrmnlResvgLoaded(),
|
|
65
|
+
gateActive: this.gateActive,
|
|
66
|
+
enabled: cfg.enabled,
|
|
67
|
+
deviceCount: cfg.devices.length,
|
|
68
|
+
refreshRate: cfg.refreshRate,
|
|
69
|
+
refreshActive: cfg.refreshActive,
|
|
70
|
+
currentRefreshRate,
|
|
71
|
+
activeResolutions,
|
|
72
|
+
frameCount: activeResolutions.length,
|
|
73
|
+
// Health uses the current adaptive cadence so "stale" tracks real expectations.
|
|
74
|
+
telemetry: getTelemetryHealth(currentRefreshRate),
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/** Re-read settings to decide whether rendering is worthwhile. */
|
|
78
|
+
refreshGate() {
|
|
79
|
+
const cfg = loadTrmnlConfig();
|
|
80
|
+
this.gateActive = cfg.enabled || cfg.devices.length > 0;
|
|
81
|
+
}
|
|
82
|
+
render() {
|
|
83
|
+
const evt = this.buildRenderState();
|
|
84
|
+
if (!this.gateActive) {
|
|
85
|
+
// No device yet — remember the state so the frame is correct the instant a
|
|
86
|
+
// device enrolls (byos-server forces a render then), but skip rasterizing.
|
|
87
|
+
setTrmnlState(evt);
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
refreshTrmnlFrame(evt);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Combine the latest state_update + usage_update + sessions into one render
|
|
94
|
+
* event. usage_update is spread last so its 5H/7D + reset fields win. No time
|
|
95
|
+
* component is added: the frame hash must change only on real visual change so
|
|
96
|
+
* a real TRMNL can skip the (battery + flaky-WiFi) re-download otherwise.
|
|
97
|
+
*/
|
|
98
|
+
buildRenderState() {
|
|
99
|
+
const u = this.lastUsage ?? {};
|
|
100
|
+
// Usage is "known" only when the hub actually has subscription quota (the
|
|
101
|
+
// gauges are meaningful); otherwise the layout renders "—" instead of 0%.
|
|
102
|
+
const usageKnown = u.fiveHourPercent != null || u.sevenDayPercent != null;
|
|
103
|
+
return {
|
|
104
|
+
...(this.lastState ?? {}),
|
|
105
|
+
...u,
|
|
106
|
+
usageKnown,
|
|
107
|
+
allSessions: this.lastSessions,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=trmnl-module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trmnl-module.js","sourceRoot":"","sources":["../../src/modules/trmnl-module.ts"],"names":[],"mappings":"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"}
|
package/dist/modules/types.d.ts
CHANGED
|
@@ -12,7 +12,7 @@ export interface BridgeContext {
|
|
|
12
12
|
}
|
|
13
13
|
/**
|
|
14
14
|
* Pluggable device module interface.
|
|
15
|
-
* Modules wrap optional device integrations (mDNS, ADB, ESP32 serial, Pixoo).
|
|
15
|
+
* Modules wrap optional device integrations (mDNS, ADB, ESP32 serial, Pixoo, Timebox).
|
|
16
16
|
*/
|
|
17
17
|
export interface DeviceModule {
|
|
18
18
|
readonly name: string;
|
|
@@ -31,9 +31,11 @@ export interface DeviceModule {
|
|
|
31
31
|
*/
|
|
32
32
|
export interface ModuleConfigs {
|
|
33
33
|
mdns?: 'auto' | boolean;
|
|
34
|
+
broadcast?: 'auto' | boolean;
|
|
34
35
|
adb?: 'auto' | boolean;
|
|
35
36
|
serial?: 'auto' | boolean;
|
|
36
37
|
pixoo?: 'auto' | boolean;
|
|
37
|
-
|
|
38
|
+
timebox?: 'auto' | boolean;
|
|
39
|
+
idotmatrix?: 'auto' | boolean;
|
|
38
40
|
}
|
|
39
41
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/modules/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;CAC3C;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE3D,qEAAqE;IACrE,KAAK,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzC,8CAA8C;IAC9C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/modules/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;CAC3C;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE3D,qEAAqE;IACrE,KAAK,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzC,8CAA8C;IAC9C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC/B"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Steering state for observed (direct `claude`, no PTY) sessions.
|
|
3
|
+
*
|
|
4
|
+
* The daemon cannot type into an observed session's terminal, but Claude Code
|
|
5
|
+
* hooks form a synchronous RPC channel that supports three steering
|
|
6
|
+
* primitives, all resolved here:
|
|
7
|
+
*
|
|
8
|
+
* 1. Device approval — a held PreToolUse response (permission-resolver.ts)
|
|
9
|
+
* answers a genuine permission prompt with allow/deny. Gate eligibility
|
|
10
|
+
* is decided by `shouldHoldPreToolUse` below (precision-first: every
|
|
11
|
+
* uncertainty resolves to "don't hold" — see claude-permission-rules.ts).
|
|
12
|
+
* 2. Soft STOP — a stop flag consumed by the next PreToolUse, which returns
|
|
13
|
+
* `deny` with an instruction to halt. Not an instant Ctrl+C (pure text
|
|
14
|
+
* generation runs to the next tool call), but a real stop at the next
|
|
15
|
+
* tool boundary.
|
|
16
|
+
* 3. Turn-end directives — prompts queued while the session is processing,
|
|
17
|
+
* delivered by the Stop hook as `{decision:'block', reason}` so Claude
|
|
18
|
+
* continues with the queued instruction instead of ending the turn.
|
|
19
|
+
* Bounded by design: each Stop drains at most one directive, the queue
|
|
20
|
+
* is hard-capped, and an empty queue always lets the turn end (no
|
|
21
|
+
* stop_hook_active loop).
|
|
22
|
+
*
|
|
23
|
+
* Keyed by the Claude session UUID (same key as awaiting-overlay.ts). Lives
|
|
24
|
+
* outside the state machine for the same reason: per-session attribution.
|
|
25
|
+
*/
|
|
26
|
+
/** Bash signature = first two command tokens (the granularity of Claude's own
|
|
27
|
+
* "always allow `git push`"-style session approvals); other tools = tool name. */
|
|
28
|
+
export declare function gateSignature(tool: string, toolInput: Record<string, unknown> | undefined): string;
|
|
29
|
+
/** Human-readable question for the gate's awaiting overlay — device-native
|
|
30
|
+
* semantics ("Allow Bash: git push …?"), never a fabricated mirror of the
|
|
31
|
+
* TUI prompt's option labels. Overlay caps length at 120 chars. */
|
|
32
|
+
export declare function buildGateQuestion(tool: string, toolInput?: Record<string, unknown>): string;
|
|
33
|
+
export declare function requestStop(sid: string): void;
|
|
34
|
+
export declare function clearStop(sid: string): boolean;
|
|
35
|
+
export declare function isStopRequested(sid: string): boolean;
|
|
36
|
+
/** One-shot consume by the PreToolUse deny path. */
|
|
37
|
+
export declare function consumeStop(sid: string): boolean;
|
|
38
|
+
export declare const STOP_DENY_REASON: string;
|
|
39
|
+
export declare function queueDirective(sid: string, text: string): boolean;
|
|
40
|
+
/** Pop exactly one directive (Stop hook drains one per turn end). A pending
|
|
41
|
+
* STOP outranks directives: stopping wins, the queue is discarded. */
|
|
42
|
+
export declare function takeDirective(sid: string): string | undefined;
|
|
43
|
+
export declare function queuedDirectiveCount(sid: string): number;
|
|
44
|
+
/** User re-engaged in the terminal — their own prompt supersedes anything the
|
|
45
|
+
* deck queued, and a pending STOP is moot. */
|
|
46
|
+
export declare function clearOnUserPrompt(sid: string): boolean;
|
|
47
|
+
export declare function clearSession(sid: string): void;
|
|
48
|
+
export interface HoldDecision {
|
|
49
|
+
hold: boolean;
|
|
50
|
+
requestId?: string;
|
|
51
|
+
reason: string;
|
|
52
|
+
}
|
|
53
|
+
export interface HoldContext {
|
|
54
|
+
sessionId: string;
|
|
55
|
+
tool: string;
|
|
56
|
+
toolInput: Record<string, unknown> | undefined;
|
|
57
|
+
permissionMode: string | undefined;
|
|
58
|
+
cwd: string | undefined;
|
|
59
|
+
/** Connected dashboard clients that could answer — no client, no hold. */
|
|
60
|
+
clientCount: number;
|
|
61
|
+
enabled: boolean;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Should this PreToolUse be held for device approval? Precision-first: hold
|
|
65
|
+
* ONLY when every check says Claude would genuinely prompt the user. Any
|
|
66
|
+
* uncertainty → pass through untouched (Claude's normal flow, zero latency).
|
|
67
|
+
*/
|
|
68
|
+
export declare function shouldHoldPreToolUse(ctx: HoldContext): HoldDecision;
|
|
69
|
+
/** The held gate resolved (device decision, timeout, sweep). `undecided` marks
|
|
70
|
+
* a pass-through release, which arms the auto-approval learner below. */
|
|
71
|
+
export declare function gateReleased(sid: string, requestId: string, opts: {
|
|
72
|
+
undecided: boolean;
|
|
73
|
+
tool: string;
|
|
74
|
+
toolInput?: Record<string, unknown>;
|
|
75
|
+
}): void;
|
|
76
|
+
/** A permission_prompt Notification arrived — every recent undecided release
|
|
77
|
+
* was a GENUINE prompt, so nothing should be learned as auto-approved. */
|
|
78
|
+
export declare function notePermissionPromptShown(sid: string): void;
|
|
79
|
+
/**
|
|
80
|
+
* PostToolUse arrived. If a recent undecided release matches this tool and no
|
|
81
|
+
* permission_prompt Notification came in between, Claude auto-approved it
|
|
82
|
+
* (session-scoped "always allow" we cannot read) — suppress the signature so
|
|
83
|
+
* it is never held again this session.
|
|
84
|
+
*/
|
|
85
|
+
export declare function noteToolEnd(sid: string, tool: string | undefined): void;
|
|
86
|
+
/** Enrichment snapshot for sessions_list (devices render STOPPING / queue badges). */
|
|
87
|
+
export declare function steeringSnapshot(sid: string): {
|
|
88
|
+
stopRequested: boolean;
|
|
89
|
+
queuedDirectives: number;
|
|
90
|
+
};
|
|
91
|
+
/** Test helper. */
|
|
92
|
+
export declare function _resetSteering(): void;
|
|
93
|
+
//# sourceMappingURL=observed-steering.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observed-steering.d.ts","sourceRoot":"","sources":["../src/observed-steering.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AA4CH;mFACmF;AACnF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,MAAM,CAMlG;AAED;;oEAEoE;AACpE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAK3F;AAID,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAG7C;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAK9C;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAQpD;AAED,oDAAoD;AACpD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAKhD;AAED,eAAO,MAAM,gBAAgB,QAGuC,CAAC;AAIrE,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAUjE;AAED;uEACuE;AACvE,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAU7D;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMxD;AAED;+CAC+C;AAC/C,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOtD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE9C;AAID,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAC/C,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,0EAA0E;IAC1E,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,WAAW,GAAG,YAAY,CAqBnE;AAED;0EAC0E;AAC1E,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAC9E,IAAI,CAYN;AAED;2EAC2E;AAC3E,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAG3D;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAevE;AAED,sFAAsF;AACtF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,aAAa,EAAE,OAAO,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,CAKlG;AAED,mBAAmB;AACnB,wBAAgB,cAAc,IAAI,IAAI,CAErC"}
|