@agentdeck/bridge 1.1.0 → 1.2.1
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/README.md +14 -6
- package/assets/fonts/NOTICE-PocketSansWorld.md +10 -0
- package/assets/fonts/OFL-PocketSansWorld.txt +93 -0
- package/assets/fonts/PocketSansWorld_12.cpfont +0 -0
- package/assets/fonts/pocket-sans-world.manifest.json +49 -0
- package/assets/learning/LICENSE-CC-BY-SA-4.0.txt +10 -0
- package/assets/learning/NOTICE.md +33 -0
- package/assets/learning/jp-n3-ko.manifest.json +27 -0
- package/assets/learning/jp-n3-ko.pdl +0 -0
- package/dist/agent-cli-diagnostics.d.ts +20 -0
- package/dist/agent-cli-diagnostics.d.ts.map +1 -0
- package/dist/agent-cli-diagnostics.js +100 -0
- package/dist/agent-cli-diagnostics.js.map +1 -0
- package/dist/apme/classifier.d.ts.map +1 -1
- package/dist/apme/classifier.js +18 -10
- package/dist/apme/classifier.js.map +1 -1
- package/dist/apme/claude-transcript-reader.d.ts +36 -0
- package/dist/apme/claude-transcript-reader.d.ts.map +1 -1
- package/dist/apme/claude-transcript-reader.js +78 -2
- package/dist/apme/claude-transcript-reader.js.map +1 -1
- package/dist/apme/collector.d.ts +126 -3
- package/dist/apme/collector.d.ts.map +1 -1
- package/dist/apme/collector.js +450 -41
- package/dist/apme/collector.js.map +1 -1
- package/dist/apme/dashboard-html.d.ts.map +1 -1
- package/dist/apme/dashboard-html.js +278 -36
- package/dist/apme/dashboard-html.js.map +1 -1
- package/dist/apme/graph.d.ts +1 -1
- package/dist/apme/graph.d.ts.map +1 -1
- package/dist/apme/graph.js +51 -1
- package/dist/apme/graph.js.map +1 -1
- package/dist/apme/http.d.ts.map +1 -1
- package/dist/apme/http.js +37 -5
- package/dist/apme/http.js.map +1 -1
- package/dist/apme/index.d.ts +4 -0
- package/dist/apme/index.d.ts.map +1 -1
- package/dist/apme/index.js +19 -3
- package/dist/apme/index.js.map +1 -1
- package/dist/apme/runner.d.ts +90 -0
- package/dist/apme/runner.d.ts.map +1 -1
- package/dist/apme/runner.js +524 -48
- package/dist/apme/runner.js.map +1 -1
- package/dist/apme/sample-to-timeline.d.ts.map +1 -1
- package/dist/apme/sample-to-timeline.js +5 -0
- package/dist/apme/sample-to-timeline.js.map +1 -1
- package/dist/apme/settings.d.ts +8 -0
- package/dist/apme/settings.d.ts.map +1 -1
- package/dist/apme/settings.js +4 -0
- package/dist/apme/settings.js.map +1 -1
- package/dist/apme/store.d.ts +118 -9
- package/dist/apme/store.d.ts.map +1 -1
- package/dist/apme/store.js +342 -44
- package/dist/apme/store.js.map +1 -1
- package/dist/apme/task-gradeability.d.ts +82 -0
- package/dist/apme/task-gradeability.d.ts.map +1 -0
- package/dist/apme/task-gradeability.js +126 -0
- package/dist/apme/task-gradeability.js.map +1 -0
- package/dist/awaiting-overlay.d.ts +13 -26
- package/dist/awaiting-overlay.d.ts.map +1 -1
- package/dist/awaiting-overlay.js +7 -40
- package/dist/awaiting-overlay.js.map +1 -1
- package/dist/bridge-core.d.ts +15 -0
- package/dist/bridge-core.d.ts.map +1 -1
- package/dist/bridge-core.js +30 -4
- package/dist/bridge-core.js.map +1 -1
- package/dist/claude-permission-rules.d.ts +20 -32
- package/dist/claude-permission-rules.d.ts.map +1 -1
- package/dist/claude-permission-rules.js +19 -102
- package/dist/claude-permission-rules.js.map +1 -1
- package/dist/claude-usage-recovery.d.ts +54 -0
- package/dist/claude-usage-recovery.d.ts.map +1 -0
- package/dist/claude-usage-recovery.js +200 -0
- package/dist/claude-usage-recovery.js.map +1 -0
- package/dist/cli.d.ts +11 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +81 -14
- package/dist/cli.js.map +1 -1
- package/dist/codex-rate-limits-live.d.ts +180 -10
- package/dist/codex-rate-limits-live.d.ts.map +1 -1
- package/dist/codex-rate-limits-live.js +475 -22
- package/dist/codex-rate-limits-live.js.map +1 -1
- package/dist/codex-rollout-response.d.ts +43 -0
- package/dist/codex-rollout-response.d.ts.map +1 -1
- package/dist/codex-rollout-response.js +67 -0
- package/dist/codex-rollout-response.js.map +1 -1
- package/dist/coordination-evidence.d.ts +150 -0
- package/dist/coordination-evidence.d.ts.map +1 -0
- package/dist/coordination-evidence.js +455 -0
- package/dist/coordination-evidence.js.map +1 -0
- package/dist/daemon-server.d.ts.map +1 -1
- package/dist/daemon-server.js +592 -35
- package/dist/daemon-server.js.map +1 -1
- package/dist/daemon-ws-client.d.ts +1 -0
- package/dist/daemon-ws-client.d.ts.map +1 -1
- package/dist/daemon-ws-client.js +25 -16
- package/dist/daemon-ws-client.js.map +1 -1
- package/dist/daemon.js +1 -1
- package/dist/deferred-reply-read.d.ts +24 -0
- package/dist/deferred-reply-read.d.ts.map +1 -0
- package/dist/deferred-reply-read.js +42 -0
- package/dist/deferred-reply-read.js.map +1 -0
- package/dist/esp32-serial.d.ts +15 -0
- package/dist/esp32-serial.d.ts.map +1 -1
- package/dist/esp32-serial.js +61 -2
- package/dist/esp32-serial.js.map +1 -1
- package/dist/font-pack.d.ts +15 -0
- package/dist/font-pack.d.ts.map +1 -0
- package/dist/font-pack.js +75 -0
- package/dist/font-pack.js.map +1 -0
- package/dist/glance-frame.d.ts.map +1 -1
- package/dist/glance-frame.js +2 -0
- package/dist/glance-frame.js.map +1 -1
- package/dist/hook-codex-sessions.d.ts +9 -0
- package/dist/hook-codex-sessions.d.ts.map +1 -1
- package/dist/hook-codex-sessions.js +35 -2
- package/dist/hook-codex-sessions.js.map +1 -1
- package/dist/hook-opencode-sessions.d.ts +62 -0
- package/dist/hook-opencode-sessions.d.ts.map +1 -0
- package/dist/hook-opencode-sessions.js +180 -0
- package/dist/hook-opencode-sessions.js.map +1 -0
- package/dist/hook-response-source.d.ts +40 -0
- package/dist/hook-response-source.d.ts.map +1 -0
- package/dist/hook-response-source.js +31 -0
- package/dist/hook-response-source.js.map +1 -0
- package/dist/http-auth-gate.d.ts.map +1 -1
- package/dist/http-auth-gate.js +9 -1
- package/dist/http-auth-gate.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/learning-pack.d.ts +24 -0
- package/dist/learning-pack.d.ts.map +1 -0
- package/dist/learning-pack.js +125 -0
- package/dist/learning-pack.js.map +1 -0
- package/dist/mdns.js +1 -1
- package/dist/mdns.js.map +1 -1
- package/dist/native-dependency-diagnostics.d.ts +29 -0
- package/dist/native-dependency-diagnostics.d.ts.map +1 -0
- package/dist/native-dependency-diagnostics.js +95 -0
- package/dist/native-dependency-diagnostics.js.map +1 -0
- package/dist/observed-steering.d.ts +4 -4
- package/dist/observed-steering.d.ts.map +1 -1
- package/dist/observed-steering.js +28 -32
- package/dist/observed-steering.js.map +1 -1
- package/dist/openclaw-gateway-stability.d.ts +94 -0
- package/dist/openclaw-gateway-stability.d.ts.map +1 -0
- package/dist/openclaw-gateway-stability.js +176 -0
- package/dist/openclaw-gateway-stability.js.map +1 -0
- package/dist/pairing-knocks.d.ts +80 -0
- package/dist/pairing-knocks.d.ts.map +1 -0
- package/dist/pairing-knocks.js +312 -0
- package/dist/pairing-knocks.js.map +1 -0
- package/dist/passive-observer.d.ts +5 -0
- package/dist/passive-observer.d.ts.map +1 -1
- package/dist/passive-observer.js +6 -0
- package/dist/passive-observer.js.map +1 -1
- package/dist/pixoo/micro-glyphs.d.ts +4 -0
- package/dist/pixoo/micro-glyphs.d.ts.map +1 -1
- package/dist/pixoo/micro-glyphs.js +29 -0
- package/dist/pixoo/micro-glyphs.js.map +1 -1
- package/dist/pixoo/pixoo-font.d.ts.map +1 -1
- package/dist/pixoo/pixoo-font.js +3 -1
- package/dist/pixoo/pixoo-font.js.map +1 -1
- package/dist/pixoo/pixoo-renderer.d.ts +1 -1
- package/dist/pixoo/pixoo-renderer.d.ts.map +1 -1
- package/dist/pixoo/pixoo-renderer.js +17 -2
- package/dist/pixoo/pixoo-renderer.js.map +1 -1
- package/dist/pty-manager.d.ts +9 -0
- package/dist/pty-manager.d.ts.map +1 -1
- package/dist/pty-manager.js +63 -4
- package/dist/pty-manager.js.map +1 -1
- package/dist/relayed-usage.d.ts +30 -0
- package/dist/relayed-usage.d.ts.map +1 -1
- package/dist/relayed-usage.js +25 -2
- package/dist/relayed-usage.js.map +1 -1
- package/dist/review-runner.js +1 -1
- package/dist/subagent-timeline.d.ts +27 -0
- package/dist/subagent-timeline.d.ts.map +1 -1
- package/dist/subagent-timeline.js +52 -5
- package/dist/subagent-timeline.js.map +1 -1
- package/dist/surface-protocol.d.ts.map +1 -1
- package/dist/surface-protocol.js +2 -0
- package/dist/surface-protocol.js.map +1 -1
- package/dist/tui/dashboard.d.ts.map +1 -1
- package/dist/tui/dashboard.js +8 -1
- package/dist/tui/dashboard.js.map +1 -1
- package/dist/usage-api.d.ts +3 -0
- package/dist/usage-api.d.ts.map +1 -1
- package/dist/usage-api.js +101 -36
- package/dist/usage-api.js.map +1 -1
- package/dist/usage-event.d.ts.map +1 -1
- package/dist/usage-event.js +2 -1
- package/dist/usage-event.js.map +1 -1
- package/dist/ws-server.d.ts +18 -0
- package/dist/ws-server.d.ts.map +1 -1
- package/dist/ws-server.js +40 -2
- package/dist/ws-server.js.map +1 -1
- package/package.json +6 -5
- package/src/timebox/sync_ble.py +35 -16
package/src/timebox/sync_ble.py
CHANGED
|
@@ -151,12 +151,31 @@ async def write_packet(client, packet: bytes) -> None:
|
|
|
151
151
|
await client.write_gatt_char(WRITE_CHAR, packet[i:i + CHUNK_SIZE], response=False)
|
|
152
152
|
|
|
153
153
|
|
|
154
|
-
|
|
155
|
-
"""
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
154
|
+
def make_offline_image() -> PilImage.Image:
|
|
155
|
+
"""Native 11x11 passive-display OFFLINE badge, mirrored by MicroGlyphs."""
|
|
156
|
+
img = PilImage.new("RGB", (TIMEBOX_W, TIMEBOX_H), (2, 6, 10))
|
|
157
|
+
px = img.load()
|
|
158
|
+
for x, y in (
|
|
159
|
+
(0, 0), (1, 0), (0, 1), (9, 0), (10, 0), (10, 1),
|
|
160
|
+
(0, 9), (0, 10), (1, 10), (10, 9), (9, 10), (10, 10),
|
|
161
|
+
):
|
|
162
|
+
px[x, y] = (0, 48, 56)
|
|
163
|
+
for x in range(2, 9):
|
|
164
|
+
px[x, 2] = (68, 88, 92)
|
|
165
|
+
px[x, 8] = (68, 88, 92)
|
|
166
|
+
for y in range(3, 8):
|
|
167
|
+
if y != 7:
|
|
168
|
+
px[2, y] = (68, 88, 92)
|
|
169
|
+
px[8, y] = (68, 88, 92)
|
|
170
|
+
for i in range(7):
|
|
171
|
+
px[2 + i, 8 - i] = (68, 88, 92)
|
|
172
|
+
return img
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
async def offline_panel(client) -> None:
|
|
176
|
+
"""Leave a sparse dark badge instead of a stale live dashboard frame."""
|
|
177
|
+
payload = encode_image_bright(make_offline_image(), 100, 1.0, 1.0, 1.0)
|
|
178
|
+
await write_packet(client, build_static_image_packet(payload))
|
|
160
179
|
|
|
161
180
|
|
|
162
181
|
async def push_micro_frame(client, url, brightness, gamma, sat, contrast, last_key, force=False) -> tuple[str, bool]:
|
|
@@ -190,7 +209,7 @@ async def run(address: str, url: str, brightness: int, gamma: float, sat: float,
|
|
|
190
209
|
status = StatusReporter()
|
|
191
210
|
stop = asyncio.Event()
|
|
192
211
|
# Why we're stopping — decides the farewell. 'signal' = clean daemon shutdown
|
|
193
|
-
# (no successor →
|
|
212
|
+
# (no successor → mark the panel OFFLINE). 'orphan' = parent died (a successor daemon
|
|
194
213
|
# may have taken over → don't clobber its frame). 'bridge_gone' = nobody home.
|
|
195
214
|
exit_reason = {"v": None}
|
|
196
215
|
|
|
@@ -352,31 +371,31 @@ async def run(address: str, url: str, brightness: int, gamma: float, sat: float,
|
|
|
352
371
|
pass
|
|
353
372
|
|
|
354
373
|
# Inner loop exited. If we're shutting down (SIGTERM, orphaned, or
|
|
355
|
-
# bridge gone) and the link is still up,
|
|
374
|
+
# bridge gone) and the link is still up, mark the panel OFFLINE before the
|
|
356
375
|
# `async with` drops BLE — otherwise the stateful LED panel freezes
|
|
357
376
|
# on the last dashboard frame forever (parity with iDotMatrix's
|
|
358
|
-
# OFFLINE farewell and the Swift TimeboxModule's 11x11
|
|
377
|
+
# OFFLINE farewell and the Swift TimeboxModule's matching 11x11 badge).
|
|
359
378
|
#
|
|
360
379
|
# EXCEPT when a successor daemon has already taken over: our parent
|
|
361
380
|
# died abruptly (orphan) but the bridge is answering again, so a new
|
|
362
381
|
# daemon restarted and is repainting the panel. Blanking here would
|
|
363
|
-
# clobber its fresh frame and the panel would sit
|
|
382
|
+
# clobber its fresh frame and the panel would sit offline until a
|
|
364
383
|
# power-cycle — the exact failure this guard prevents.
|
|
365
384
|
successor_took_over = exit_reason["v"] == "orphan" and bridge_reachable(url)
|
|
366
385
|
if successor_took_over:
|
|
367
|
-
print("Successor daemon detected — skipping farewell
|
|
386
|
+
print("Successor daemon detected — skipping farewell badge (it will repaint).")
|
|
368
387
|
if stop.is_set() and client.is_connected and not successor_took_over:
|
|
369
388
|
try:
|
|
370
|
-
await
|
|
371
|
-
#
|
|
389
|
+
await offline_panel(client)
|
|
390
|
+
# offline_panel writes WITHOUT response — the await returns once
|
|
372
391
|
# the packet is queued to the OS, not once it's transmitted.
|
|
373
392
|
# The `async with` below drops the BLE link immediately on
|
|
374
|
-
# exit; without this beat the queued
|
|
393
|
+
# exit; without this beat the queued badge never goes over the
|
|
375
394
|
# air and the panel freezes on its last dashboard frame.
|
|
376
395
|
await asyncio.sleep(0.5)
|
|
377
|
-
print("Shutting down —
|
|
396
|
+
print("Shutting down — Timebox panel marked OFFLINE.")
|
|
378
397
|
except Exception as e:
|
|
379
|
-
print(f"Farewell
|
|
398
|
+
print(f"Farewell OFFLINE badge failed: {e}", file=sys.stderr)
|
|
380
399
|
except Exception as e:
|
|
381
400
|
print(f"BLE connection error: {e}", file=sys.stderr)
|
|
382
401
|
status.failed(f"BLE connection error: {e}")
|