@agentdeck/bridge 0.2.1 → 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 +1025 -94
- 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/mdns.js
CHANGED
|
@@ -1,22 +1,38 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { networkInterfaces } from 'os';
|
|
1
|
+
import Bonjour from 'bonjour-service';
|
|
3
2
|
import { debug, log } from './logger.js';
|
|
3
|
+
import { getLanIp } from '@agentdeck/shared';
|
|
4
4
|
let instance = null;
|
|
5
|
-
/** Find the first routable (non-link-local, non-loopback) IPv4 address. */
|
|
6
|
-
function getLanIp() {
|
|
7
|
-
const nets = networkInterfaces();
|
|
8
|
-
for (const addrs of Object.values(nets)) {
|
|
9
|
-
if (!addrs)
|
|
10
|
-
continue;
|
|
11
|
-
for (const a of addrs) {
|
|
12
|
-
if (a.family === 'IPv4' && !a.internal && !a.address.startsWith('169.254.')) {
|
|
13
|
-
return a.address;
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
return undefined;
|
|
18
|
-
}
|
|
19
5
|
const MDNS_RECOVERY_INTERVAL = 5_000; // 5s — tightens WiFi-change discovery gap (was 30s)
|
|
6
|
+
/**
|
|
7
|
+
* True if an uncaught error is a non-fatal mDNS multicast failure that should be
|
|
8
|
+
* tolerated (instance invalidated + recovery timer re-publishes) rather than
|
|
9
|
+
* crashing the daemon.
|
|
10
|
+
*
|
|
11
|
+
* `bonjour-service` performs async `send()` to the mDNS multicast group
|
|
12
|
+
* (224.0.0.251:5353 / ff02::fb:5353). On network-interface changes — sleep/wake,
|
|
13
|
+
* WiFi reconnect, VPN toggle, or a WSL/Hyper-V virtual interface that has no route
|
|
14
|
+
* to the multicast group (Windows) — that send rejects asynchronously and surfaces
|
|
15
|
+
* as an uncaughtException. None of these are recoverable by crashing.
|
|
16
|
+
*
|
|
17
|
+
* Covers:
|
|
18
|
+
* - "already in use on the network" (duplicate service name)
|
|
19
|
+
* - bind/send failures targeting the mDNS endpoint: EADDRNOTAVAIL, EHOSTUNREACH,
|
|
20
|
+
* ENETUNREACH, EHOSTDOWN, ENETDOWN, EADDRINUSE, EPERM, EACCES, ENODEV
|
|
21
|
+
*/
|
|
22
|
+
export function isNonFatalMdnsError(msg, code) {
|
|
23
|
+
if (msg.includes('already in use on the network'))
|
|
24
|
+
return true;
|
|
25
|
+
// Scope socket errors to the mDNS multicast endpoint so unrelated network
|
|
26
|
+
// failures (e.g. EHOSTUNREACH to a peer) still crash as before.
|
|
27
|
+
const targetsMdns = msg.includes('5353') || msg.includes('224.0.0.251') || msg.includes('ff02::fb');
|
|
28
|
+
if (!targetsMdns)
|
|
29
|
+
return false;
|
|
30
|
+
const mdnsCodes = [
|
|
31
|
+
'EADDRNOTAVAIL', 'EHOSTUNREACH', 'ENETUNREACH', 'EHOSTDOWN',
|
|
32
|
+
'ENETDOWN', 'EADDRINUSE', 'EPERM', 'EACCES', 'ENODEV',
|
|
33
|
+
];
|
|
34
|
+
return mdnsCodes.some((c) => code === c || msg.includes(c));
|
|
35
|
+
}
|
|
20
36
|
/**
|
|
21
37
|
* Called from uncaughtException handler when mDNS socket fails.
|
|
22
38
|
* Nulls the instance so the recovery timer knows to re-publish.
|
|
@@ -65,12 +81,30 @@ export function advertiseBridge(port, projectName, agentType, token) {
|
|
|
65
81
|
catch { /* ignore cleanup errors */ }
|
|
66
82
|
instance = null;
|
|
67
83
|
}
|
|
68
|
-
instance = new Bonjour();
|
|
69
84
|
const lanIp = getLanIp();
|
|
85
|
+
// Windows multi-homed egress fix: a Hyper-V/WSL host has several IPv4
|
|
86
|
+
// interfaces (the real LAN adapter plus host-only virtual switches on
|
|
87
|
+
// 172.x and APIPA 169.254.x). Left to its own devices, `multicast-dns`
|
|
88
|
+
// joins the mDNS group on *all* of them and lets the OS pick the outbound
|
|
89
|
+
// multicast interface — which can be a virtual switch, so the announcement
|
|
90
|
+
// never egresses on the WiFi/LAN adapter and a remote iOS device never
|
|
91
|
+
// sees the service. Pinning `interface` to the default-route LAN IP makes
|
|
92
|
+
// multicast-dns bind the socket, addMembership, and setMulticastInterface
|
|
93
|
+
// all to that one adapter. Gated to win32 so macOS/Linux multi-interface
|
|
94
|
+
// discovery (where bonjour-service correctly fans out) is unaffected.
|
|
95
|
+
// `interface` isn't on bonjour-service's ServiceConfig type but is passed
|
|
96
|
+
// straight through to multicast-dns, so cast through the options object.
|
|
97
|
+
const bonjourOpts = process.platform === 'win32' && lanIp && lanIp !== '127.0.0.1'
|
|
98
|
+
? { interface: lanIp }
|
|
99
|
+
: undefined;
|
|
100
|
+
instance = new Bonjour(bonjourOpts);
|
|
70
101
|
const txt = {
|
|
71
102
|
project: projectName,
|
|
72
103
|
agent: agentType,
|
|
73
|
-
|
|
104
|
+
// TXT schema version — keep in lockstep with the Swift daemon's
|
|
105
|
+
// advertisement (apple/AgentDeck/Daemon/Modules/MdnsModule.swift) so
|
|
106
|
+
// clients see one contract regardless of which daemon owns the port.
|
|
107
|
+
v: '3',
|
|
74
108
|
port: String(port),
|
|
75
109
|
};
|
|
76
110
|
if (token)
|
package/dist/mdns.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mdns.js","sourceRoot":"","sources":["../src/mdns.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"mdns.js","sourceRoot":"","sources":["../src/mdns.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { DeviceModule, BridgeContext } from './types.js';
|
|
2
2
|
/**
|
|
3
3
|
* ADB reverse tunnel module for Android dashboard clients.
|
|
4
|
-
* D200H Deck Dock is
|
|
4
|
+
* D200H Deck Dock is driven by the Ulanzi Studio plugin over WebSocket.
|
|
5
5
|
*/
|
|
6
6
|
export declare class AdbModule implements DeviceModule {
|
|
7
7
|
readonly name = "adb";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adb-module.d.ts","sourceRoot":"","sources":["../../src/modules/adb-module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAI9D;;;GAGG;AACH,qBAAa,SAAU,YAAW,YAAY;IAC5C,QAAQ,CAAC,IAAI,SAAS;IACtB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,WAAW,CAA6B;IAE1C,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"adb-module.d.ts","sourceRoot":"","sources":["../../src/modules/adb-module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAI9D;;;GAGG;AACH,qBAAa,SAAU,YAAW,YAAY;IAC5C,QAAQ,CAAC,IAAI,SAAS;IACtB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,WAAW,CAA6B;IAE1C,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAa1D,KAAK,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAMxC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAK5B"}
|
|
@@ -2,7 +2,7 @@ import { setupAdbReverse, cleanupAdbReverse, startAdbReversePolling } from '../a
|
|
|
2
2
|
import { execSync } from 'child_process';
|
|
3
3
|
/**
|
|
4
4
|
* ADB reverse tunnel module for Android dashboard clients.
|
|
5
|
-
* D200H Deck Dock is
|
|
5
|
+
* D200H Deck Dock is driven by the Ulanzi Studio plugin over WebSocket.
|
|
6
6
|
*/
|
|
7
7
|
export class AdbModule {
|
|
8
8
|
name = 'adb';
|
|
@@ -13,9 +13,10 @@ export class AdbModule {
|
|
|
13
13
|
return false;
|
|
14
14
|
if (config === true)
|
|
15
15
|
return true;
|
|
16
|
-
// auto: check if adb is available
|
|
16
|
+
// auto: check if adb is available. Use `adb version` instead of `which`
|
|
17
|
+
// so detection works on Windows too (which lacks `which`).
|
|
17
18
|
try {
|
|
18
|
-
execSync('
|
|
19
|
+
execSync('adb version', { stdio: 'pipe', timeout: 2000 });
|
|
19
20
|
return true;
|
|
20
21
|
}
|
|
21
22
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adb-module.js","sourceRoot":"","sources":["../../src/modules/adb-module.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC/F,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;;GAGG;AACH,MAAM,OAAO,SAAS;IACX,IAAI,GAAG,KAAK,CAAC;IACd,IAAI,GAAG,CAAC,CAAC;IACT,WAAW,GAAwB,IAAI,CAAC;IAEhD,KAAK,CAAC,cAAc,CAAC,MAAwB;QAC3C,IAAI,MAAM,KAAK,KAAK;YAAE,OAAO,KAAK,CAAC;QACnC,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QACjC,
|
|
1
|
+
{"version":3,"file":"adb-module.js","sourceRoot":"","sources":["../../src/modules/adb-module.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC/F,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;;GAGG;AACH,MAAM,OAAO,SAAS;IACX,IAAI,GAAG,KAAK,CAAC;IACd,IAAI,GAAG,CAAC,CAAC;IACT,WAAW,GAAwB,IAAI,CAAC;IAEhD,KAAK,CAAC,cAAc,CAAC,MAAwB;QAC3C,IAAI,MAAM,KAAK,KAAK;YAAE,OAAO,KAAK,CAAC;QACnC,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QACjC,wEAAwE;QACxE,2DAA2D;QAC3D,IAAI,CAAC;YACH,QAAQ,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1D,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAkB;QAC5B,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACrB,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,CAAC,WAAW,GAAG,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;CACF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { DeviceModule, BridgeContext } from './types.js';
|
|
2
|
+
import type { AgentType } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* UDP-broadcast daemon discovery. Runs alongside the mDNS module as a fallback
|
|
5
|
+
* for routers that silently drop multicast — same payload shape, different
|
|
6
|
+
* transport. Always activates unless explicitly disabled in module config.
|
|
7
|
+
*/
|
|
8
|
+
export declare class BroadcastModule implements DeviceModule {
|
|
9
|
+
readonly name = "broadcast";
|
|
10
|
+
private cleanup;
|
|
11
|
+
private agentType;
|
|
12
|
+
constructor(agentType: AgentType);
|
|
13
|
+
shouldActivate(_config: 'auto' | boolean): Promise<boolean>;
|
|
14
|
+
start(ctx: BridgeContext): Promise<void>;
|
|
15
|
+
stop(): Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=broadcast-module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"broadcast-module.d.ts","sourceRoot":"","sources":["../../src/modules/broadcast-module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C;;;;GAIG;AACH,qBAAa,eAAgB,YAAW,YAAY;IAClD,QAAQ,CAAC,IAAI,eAAe;IAC5B,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,SAAS,CAAY;gBAEjB,SAAS,EAAE,SAAS;IAI1B,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAK3D,KAAK,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAI5B"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { advertiseUdpBroadcast } from '../broadcast.js';
|
|
2
|
+
/**
|
|
3
|
+
* UDP-broadcast daemon discovery. Runs alongside the mDNS module as a fallback
|
|
4
|
+
* for routers that silently drop multicast — same payload shape, different
|
|
5
|
+
* transport. Always activates unless explicitly disabled in module config.
|
|
6
|
+
*/
|
|
7
|
+
export class BroadcastModule {
|
|
8
|
+
name = 'broadcast';
|
|
9
|
+
cleanup = null;
|
|
10
|
+
agentType;
|
|
11
|
+
constructor(agentType) {
|
|
12
|
+
this.agentType = agentType;
|
|
13
|
+
}
|
|
14
|
+
async shouldActivate(_config) {
|
|
15
|
+
// Lightweight UDP beacon — always on unless explicitly disabled.
|
|
16
|
+
return _config !== false;
|
|
17
|
+
}
|
|
18
|
+
async start(ctx) {
|
|
19
|
+
this.cleanup = advertiseUdpBroadcast(ctx.port, ctx.projectName, this.agentType, ctx.authToken);
|
|
20
|
+
}
|
|
21
|
+
async stop() {
|
|
22
|
+
this.cleanup?.();
|
|
23
|
+
this.cleanup = null;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=broadcast-module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"broadcast-module.js","sourceRoot":"","sources":["../../src/modules/broadcast-module.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAGxD;;;;GAIG;AACH,MAAM,OAAO,eAAe;IACjB,IAAI,GAAG,WAAW,CAAC;IACpB,OAAO,GAAwB,IAAI,CAAC;IACpC,SAAS,CAAY;IAE7B,YAAY,SAAoB;QAC9B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,OAAyB;QAC5C,iEAAiE;QACjE,OAAO,OAAO,KAAK,KAAK,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAkB;QAC5B,IAAI,CAAC,OAAO,GAAG,qBAAqB,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;IACjG,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACtB,CAAC;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { BridgeContext, DeviceModule } from './types.js';
|
|
2
|
+
export declare class IDotMatrixModule implements DeviceModule {
|
|
3
|
+
readonly name = "idotmatrix";
|
|
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=idotmatrix-module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idotmatrix-module.d.ts","sourceRoot":"","sources":["../../src/modules/idotmatrix-module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAQ9D,qBAAa,gBAAiB,YAAW,YAAY;IACnD,QAAQ,CAAC,IAAI,gBAAgB;IAEvB,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 { loadIDotMatrixDevices, isIDotMatrixAutoDiscoverEnabled, } from '../idotmatrix/idotmatrix-settings.js';
|
|
2
|
+
import { startIDotMatrixSync, stopIDotMatrixSync } from '../idotmatrix/idotmatrix-daemon-sync.js';
|
|
3
|
+
import { autoDiscoverIDotMatrix } from '../idotmatrix/idotmatrix-discover.js';
|
|
4
|
+
export class IDotMatrixModule {
|
|
5
|
+
name = 'idotmatrix';
|
|
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 loadIDotMatrixDevices().length > 0 || isIDotMatrixAutoDiscoverEnabled();
|
|
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 ~8s scan; when it adds a device we
|
|
18
|
+
// re-invoke startIDotMatrixSync (no-op if already running) to pick it up.
|
|
19
|
+
startIDotMatrixSync(ctx.port);
|
|
20
|
+
if (loadIDotMatrixDevices().length === 0 && isIDotMatrixAutoDiscoverEnabled()) {
|
|
21
|
+
void autoDiscoverIDotMatrix().then((added) => {
|
|
22
|
+
if (added > 0)
|
|
23
|
+
startIDotMatrixSync(ctx.port);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
async stop() {
|
|
28
|
+
// Await the child's OFFLINE-frame farewell so the panel doesn't freeze on its
|
|
29
|
+
// last dashboard frame when the daemon exits.
|
|
30
|
+
await stopIDotMatrixSync(true);
|
|
31
|
+
}
|
|
32
|
+
statusSnapshot() {
|
|
33
|
+
const devices = loadIDotMatrixDevices();
|
|
34
|
+
return {
|
|
35
|
+
configuredDeviceCount: devices.length,
|
|
36
|
+
devices: devices.map((d) => ({
|
|
37
|
+
id: d.address,
|
|
38
|
+
transport: 'ble',
|
|
39
|
+
address: d.address,
|
|
40
|
+
name: d.name ?? 'iDotMatrix',
|
|
41
|
+
brightness: d.brightness ?? 100,
|
|
42
|
+
})),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=idotmatrix-module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idotmatrix-module.js","sourceRoot":"","sources":["../../src/modules/idotmatrix-module.ts"],"names":[],"mappings":"AACA,OAAO,EACL,qBAAqB,EACrB,+BAA+B,GAChC,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAClG,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAE9E,MAAM,OAAO,gBAAgB;IAClB,IAAI,GAAG,YAAY,CAAC;IAE7B,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,qBAAqB,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,+BAA+B,EAAE,CAAC;IACjF,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAkB;QAC5B,uEAAuE;QACvE,0EAA0E;QAC1E,yEAAyE;QACzE,0EAA0E;QAC1E,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,qBAAqB,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,+BAA+B,EAAE,EAAE,CAAC;YAC9E,KAAK,sBAAsB,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC3C,IAAI,KAAK,GAAG,CAAC;oBAAE,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC/C,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI;QACR,8EAA8E;QAC9E,8CAA8C;QAC9C,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,cAAc;QACZ,MAAM,OAAO,GAAG,qBAAqB,EAAE,CAAC;QACxC,OAAO;YACL,qBAAqB,EAAE,OAAO,CAAC,MAAM;YACrC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC3B,EAAE,EAAE,CAAC,CAAC,OAAO;gBACb,SAAS,EAAE,KAAK;gBAChB,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,YAAY;gBAC5B,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,GAAG;aAChC,CAAC,CAAC;SACJ,CAAC;IACJ,CAAC;CACF"}
|
package/dist/modules/index.d.ts
CHANGED
|
@@ -2,10 +2,12 @@ import type { DeviceModule, ModuleConfigs, BridgeContext } from './types.js';
|
|
|
2
2
|
import type { AgentType } from '../types.js';
|
|
3
3
|
export type { DeviceModule, ModuleConfigs, BridgeContext } from './types.js';
|
|
4
4
|
export { MdnsModule } from './mdns-module.js';
|
|
5
|
+
export { BroadcastModule } from './broadcast-module.js';
|
|
5
6
|
export { AdbModule } from './adb-module.js';
|
|
6
7
|
export { SerialModule } from './serial-module.js';
|
|
7
8
|
export { PixooModule } from './pixoo-module.js';
|
|
8
|
-
export {
|
|
9
|
+
export { TimeboxModule } from './timebox-module.js';
|
|
10
|
+
export { IDotMatrixModule } from './idotmatrix-module.js';
|
|
9
11
|
/**
|
|
10
12
|
* Create default module instances for a given agent type.
|
|
11
13
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/modules/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/modules/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAQ7E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,SAAS,GAAG,YAAY,EAAE,CAUzE;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,YAAY,EAAE,EACvB,OAAO,EAAE,aAAa,EACtB,GAAG,EAAE,aAAa,GACjB,OAAO,CAAC,YAAY,EAAE,CAAC,CAqBzB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CASxE"}
|
package/dist/modules/index.js
CHANGED
|
@@ -1,24 +1,30 @@
|
|
|
1
1
|
import { MdnsModule } from './mdns-module.js';
|
|
2
|
+
import { BroadcastModule } from './broadcast-module.js';
|
|
2
3
|
import { AdbModule } from './adb-module.js';
|
|
3
4
|
import { SerialModule } from './serial-module.js';
|
|
4
5
|
import { PixooModule } from './pixoo-module.js';
|
|
5
|
-
import {
|
|
6
|
+
import { TimeboxModule } from './timebox-module.js';
|
|
7
|
+
import { IDotMatrixModule } from './idotmatrix-module.js';
|
|
6
8
|
import { debug } from '../logger.js';
|
|
7
9
|
export { MdnsModule } from './mdns-module.js';
|
|
10
|
+
export { BroadcastModule } from './broadcast-module.js';
|
|
8
11
|
export { AdbModule } from './adb-module.js';
|
|
9
12
|
export { SerialModule } from './serial-module.js';
|
|
10
13
|
export { PixooModule } from './pixoo-module.js';
|
|
11
|
-
export {
|
|
14
|
+
export { TimeboxModule } from './timebox-module.js';
|
|
15
|
+
export { IDotMatrixModule } from './idotmatrix-module.js';
|
|
12
16
|
/**
|
|
13
17
|
* Create default module instances for a given agent type.
|
|
14
18
|
*/
|
|
15
19
|
export function createDefaultModules(agentType) {
|
|
16
20
|
return [
|
|
17
21
|
new MdnsModule(agentType),
|
|
22
|
+
new BroadcastModule(agentType),
|
|
18
23
|
new AdbModule(),
|
|
19
24
|
new SerialModule(),
|
|
20
25
|
new PixooModule(),
|
|
21
|
-
new
|
|
26
|
+
new TimeboxModule(),
|
|
27
|
+
new IDotMatrixModule(),
|
|
22
28
|
];
|
|
23
29
|
}
|
|
24
30
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/modules/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/modules/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAGrC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,SAAoB;IACvD,OAAO;QACL,IAAI,UAAU,CAAC,SAAS,CAAC;QACzB,IAAI,eAAe,CAAC,SAAS,CAAC;QAC9B,IAAI,SAAS,EAAE;QACf,IAAI,YAAY,EAAE;QAClB,IAAI,WAAW,EAAE;QACjB,IAAI,aAAa,EAAE;QACnB,IAAI,gBAAgB,EAAE;KACvB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAuB,EACvB,OAAsB,EACtB,GAAkB;IAElB,MAAM,OAAO,GAAmB,EAAE,CAAC;IAEnC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAI,OAAwD,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC;QAC7F,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,MAA0B,CAAC,CAAC;YAC5E,IAAI,cAAc,EAAE,CAAC;gBACnB,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACrB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAClB,KAAK,CAAC,SAAS,EAAE,GAAG,GAAG,CAAC,IAAI,WAAW,CAAC,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,SAAS,EAAE,GAAG,GAAG,CAAC,IAAI,qBAAqB,MAAM,GAAG,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,KAAK,CAAC,SAAS,EAAE,GAAG,GAAG,CAAC,IAAI,sBAAsB,GAAG,EAAE,CAAC,CAAC;YACzD,6CAA6C;QAC/C,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAuB;IACvD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YACjB,KAAK,CAAC,SAAS,EAAE,GAAG,GAAG,CAAC,IAAI,WAAW,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,KAAK,CAAC,SAAS,EAAE,GAAG,GAAG,CAAC,IAAI,iBAAiB,GAAG,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pixoo-module.d.ts","sourceRoot":"","sources":["../../src/modules/pixoo-module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"pixoo-module.d.ts","sourceRoot":"","sources":["../../src/modules/pixoo-module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAK9D,qBAAa,WAAY,YAAW,YAAY;IAC9C,QAAQ,CAAC,IAAI,WAAW;IAElB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAO1D,KAAK,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBxC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAG5B"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { startPixooBridge, stopPixooBridge, broadcastPixoo, setPixooBroadcast } from '../pixoo/pixoo-bridge.js';
|
|
2
|
-
import { loadPixooDevices } from '../pixoo/pixoo-settings.js';
|
|
2
|
+
import { loadPixooDevices, isPixooAutoDiscoverEnabled } from '../pixoo/pixoo-settings.js';
|
|
3
|
+
import { autoDiscoverPixoo } from '../pixoo/pixoo-discover.js';
|
|
3
4
|
export class PixooModule {
|
|
4
5
|
name = 'pixoo';
|
|
5
6
|
async shouldActivate(config) {
|
|
@@ -7,15 +8,24 @@ export class PixooModule {
|
|
|
7
8
|
return false;
|
|
8
9
|
if (config === true)
|
|
9
10
|
return true;
|
|
10
|
-
// auto:
|
|
11
|
-
|
|
12
|
-
return devices.length > 0;
|
|
11
|
+
// auto: a configured device OR auto-discovery may find one on the LAN.
|
|
12
|
+
return loadPixooDevices().length > 0 || isPixooAutoDiscoverEnabled();
|
|
13
13
|
}
|
|
14
14
|
async start(ctx) {
|
|
15
15
|
const devices = loadPixooDevices();
|
|
16
16
|
setPixooBroadcast((event) => ctx.wsServer.broadcast(event));
|
|
17
17
|
startPixooBridge(devices);
|
|
18
18
|
ctx.wsServer.onBroadcast(broadcastPixoo);
|
|
19
|
+
// No device configured → run a background LAN discovery (cloud API, then a
|
|
20
|
+
// bounded subnet sweep). startPixooBridge([]) above returned early without
|
|
21
|
+
// registering its status listener, so re-calling it after discovery adds
|
|
22
|
+
// devices wires the listener exactly once.
|
|
23
|
+
if (devices.length === 0 && isPixooAutoDiscoverEnabled()) {
|
|
24
|
+
void autoDiscoverPixoo().then((added) => {
|
|
25
|
+
if (added > 0)
|
|
26
|
+
startPixooBridge(loadPixooDevices());
|
|
27
|
+
});
|
|
28
|
+
}
|
|
19
29
|
}
|
|
20
30
|
async stop() {
|
|
21
31
|
await stopPixooBridge();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pixoo-module.js","sourceRoot":"","sources":["../../src/modules/pixoo-module.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAChH,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"pixoo-module.js","sourceRoot":"","sources":["../../src/modules/pixoo-module.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAChH,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAC1F,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D,MAAM,OAAO,WAAW;IACb,IAAI,GAAG,OAAO,CAAC;IAExB,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,gBAAgB,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,0BAA0B,EAAE,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAkB;QAC5B,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;QACnC,iBAAiB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5D,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC1B,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QAEzC,2EAA2E;QAC3E,2EAA2E;QAC3E,yEAAyE;QACzE,2CAA2C;QAC3C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,0BAA0B,EAAE,EAAE,CAAC;YACzD,KAAK,iBAAiB,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;gBACtC,IAAI,KAAK,GAAG,CAAC;oBAAE,gBAAgB,CAAC,gBAAgB,EAAE,CAAC,CAAC;YACtD,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,eAAe,EAAE,CAAC;IAC1B,CAAC;CACF"}
|
|
@@ -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"}
|
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,18 @@
|
|
|
1
|
+
import type { EnrichedSession } from './session-aggregator.js';
|
|
2
|
+
export interface InjectOpenClawOptions {
|
|
3
|
+
/** SSOT gate — inject only when the Gateway is authenticated. */
|
|
4
|
+
gatewayConnected: boolean;
|
|
5
|
+
/** Daemon-hub extras (the CLI bridge omits these → a minimal session row). */
|
|
6
|
+
state?: string;
|
|
7
|
+
projectName?: string;
|
|
8
|
+
modelName?: string;
|
|
9
|
+
controlMode?: 'managed';
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Append the virtual `openclaw` session iff the Gateway is authenticated
|
|
13
|
+
* (`gatewayConnected`) and one isn't already present. Reachability
|
|
14
|
+
* (`gatewayAvailable`) and health alone must NEVER materialize a session — that
|
|
15
|
+
* kept a phantom OpenClaw alive on devices after it was off.
|
|
16
|
+
*/
|
|
17
|
+
export declare function injectOpenClawSession(sessions: EnrichedSession[], opts: InjectOpenClawOptions): EnrichedSession[];
|
|
18
|
+
//# sourceMappingURL=openclaw-session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclaw-session.d.ts","sourceRoot":"","sources":["../src/openclaw-session.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,MAAM,WAAW,qBAAqB;IACpC,iEAAiE;IACjE,gBAAgB,EAAE,OAAO,CAAC;IAC1B,8EAA8E;IAC9E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,SAAS,CAAC;CACzB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,eAAe,EAAE,EAC3B,IAAI,EAAE,qBAAqB,GAC1B,eAAe,EAAE,CAcnB"}
|