@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
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { debug } from './logger.js';
|
|
2
|
+
const pending = new Map();
|
|
3
|
+
function buildDecisionBody(decision) {
|
|
4
|
+
return JSON.stringify({
|
|
5
|
+
hookSpecificOutput: {
|
|
6
|
+
hookEventName: 'PreToolUse',
|
|
7
|
+
permissionDecision: decision,
|
|
8
|
+
},
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
/** End a held response with a decision and drop the entry. Safe if the socket
|
|
12
|
+
* is already gone. */
|
|
13
|
+
function endWith(key, entry, decision) {
|
|
14
|
+
clearTimeout(entry.timer);
|
|
15
|
+
pending.delete(key);
|
|
16
|
+
try {
|
|
17
|
+
entry.res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
18
|
+
entry.res.end(buildDecisionBody(decision));
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
/* client disconnected */
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
entry.onResolved?.(decision);
|
|
25
|
+
}
|
|
26
|
+
catch { /* callback must never throw the resolver */ }
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Register a held hook response. Auto-resolves to `ask` after `timeoutMs` so a
|
|
30
|
+
* never-answered prompt falls back to Claude's own terminal prompt. The hook's
|
|
31
|
+
* curl `--max-time` must exceed `timeoutMs` so this fallback reaches Claude
|
|
32
|
+
* before curl gives up.
|
|
33
|
+
*/
|
|
34
|
+
export function registerPending(requestId, res, opts) {
|
|
35
|
+
// Defensive: if a stale entry exists under this id, resolve it to ask first.
|
|
36
|
+
const existing = pending.get(requestId);
|
|
37
|
+
if (existing)
|
|
38
|
+
endWith(requestId, existing, 'ask');
|
|
39
|
+
const timer = setTimeout(() => {
|
|
40
|
+
const entry = pending.get(requestId);
|
|
41
|
+
if (entry) {
|
|
42
|
+
debug('permission', `pending ${requestId} timed out → ask`);
|
|
43
|
+
endWith(requestId, entry, 'ask');
|
|
44
|
+
}
|
|
45
|
+
}, opts.timeoutMs);
|
|
46
|
+
pending.set(requestId, {
|
|
47
|
+
res,
|
|
48
|
+
timer,
|
|
49
|
+
sessionId: opts.sessionId,
|
|
50
|
+
tool: opts.tool,
|
|
51
|
+
createdAt: Date.now(),
|
|
52
|
+
onResolved: opts.onResolved,
|
|
53
|
+
});
|
|
54
|
+
debug('permission', `registered pending ${requestId} (tool=${opts.tool ?? '?'} session=${opts.sessionId ?? '?'})`);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Resolve a pending request from a device decision. Returns the affected
|
|
58
|
+
* sessionId (so the caller can clear the awaiting overlay + rebroadcast), or
|
|
59
|
+
* null if no such pending request exists (already resolved / unknown id).
|
|
60
|
+
*/
|
|
61
|
+
export function resolvePending(requestId, decision) {
|
|
62
|
+
const entry = pending.get(requestId);
|
|
63
|
+
if (!entry)
|
|
64
|
+
return null;
|
|
65
|
+
const sessionId = entry.sessionId ?? null;
|
|
66
|
+
endWith(requestId, entry, decision);
|
|
67
|
+
debug('permission', `resolved pending ${requestId} → ${decision}`);
|
|
68
|
+
return sessionId;
|
|
69
|
+
}
|
|
70
|
+
/** Drop a pending entry without sending a decision (e.g. the hook's socket
|
|
71
|
+
* closed because Claude moved on). The held response is already dead. */
|
|
72
|
+
export function abandonPending(requestId) {
|
|
73
|
+
const entry = pending.get(requestId);
|
|
74
|
+
if (!entry)
|
|
75
|
+
return;
|
|
76
|
+
clearTimeout(entry.timer);
|
|
77
|
+
pending.delete(requestId);
|
|
78
|
+
}
|
|
79
|
+
/** Sweep entries older than maxAgeMs (backstop for any timer that didn't fire),
|
|
80
|
+
* resolving them to `ask`. Returns the number swept. */
|
|
81
|
+
export function sweepStalePending(maxAgeMs, now = Date.now()) {
|
|
82
|
+
let swept = 0;
|
|
83
|
+
for (const [key, entry] of Array.from(pending.entries())) {
|
|
84
|
+
if (now - entry.createdAt > maxAgeMs) {
|
|
85
|
+
endWith(key, entry, 'ask');
|
|
86
|
+
swept++;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
if (swept > 0)
|
|
90
|
+
debug('permission', `swept ${swept} stale pending requests`);
|
|
91
|
+
return swept;
|
|
92
|
+
}
|
|
93
|
+
/** Resolve all pending to `ask` and clear — used on daemon shutdown. */
|
|
94
|
+
export function drainAllPending() {
|
|
95
|
+
for (const [key, entry] of Array.from(pending.entries())) {
|
|
96
|
+
endWith(key, entry, 'ask');
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/** Test/diagnostic helper. */
|
|
100
|
+
export function _pendingCount() {
|
|
101
|
+
return pending.size;
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=permission-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permission-resolver.js","sourceRoot":"","sources":["../src/permission-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Native 11×11 creature glyphs for the Timebox Mini micro layout.
|
|
3
|
+
*
|
|
4
|
+
* The Timebox Mini has only 121 LEDs. Downscaling the 32×32 terrarium creature to
|
|
5
|
+
* 11×11 bottoms out at a fuzzy silhouette — so for this device the creatures are
|
|
6
|
+
* **hand-authored directly at 11×11** as bold, high-contrast bitmaps. Every pixel
|
|
7
|
+
* is intentional, which is dramatically more legible than any downscale. Treat
|
|
8
|
+
* this screen as a status badge, not a shrunken aquarium: one dominant creature,
|
|
9
|
+
* no labels, no HUD chrome, and only the pixels that identify the canonical mark.
|
|
10
|
+
*
|
|
11
|
+
* The glyphs are the canonical brand marks (matching assets/logos/*_creature_gen.png
|
|
12
|
+
* and design/brand/*.svg), not loose creature approximations:
|
|
13
|
+
* Claude → rusty robot (rectangular body, dark cutout eyes, arms, legs)
|
|
14
|
+
* Codex → lavender cloud carrying a white `>_` terminal prompt
|
|
15
|
+
* OpenClaw→ red lobster (side claws, antennae, teal eyes)
|
|
16
|
+
* OpenCode→ hollow rectangular ring logo
|
|
17
|
+
* Antigravity→ peak/arc logo
|
|
18
|
+
* The MicroCreature keys are legacy internal codenames kept for the renderer
|
|
19
|
+
* mapping — only the art behind them is brand-true.
|
|
20
|
+
*
|
|
21
|
+
* Each glyph is an 11-row × 11-col string grid. Characters map to colors:
|
|
22
|
+
* '.' transparent (shows the status-color background)
|
|
23
|
+
* 'B' body 'A' arm/antenna/leg 'C' claw 'D' joint/shadow 'E' eye 'K' cutout 'M' prompt mark 'F' logo frame
|
|
24
|
+
* Antigravity additionally uses gradient bands: L/T/Q/Y/O/R/P/V/U/N plus K for black cutout.
|
|
25
|
+
* `work` is an optional second frame for a simple processing animation (leg wiggle).
|
|
26
|
+
*/
|
|
27
|
+
export type RGB = readonly [number, number, number];
|
|
28
|
+
export type MicroCreature = 'octopus' | 'jellyfish' | 'opencode' | 'crayfish' | 'antigravity';
|
|
29
|
+
export type MicroState = 'idle' | 'working' | 'asking';
|
|
30
|
+
export declare const MICRO_SIZE = 11;
|
|
31
|
+
/**
|
|
32
|
+
* Dark status-color field so the bright creature pops.
|
|
33
|
+
*
|
|
34
|
+
* Idle is a steady green so a resting session reads as calm/still. Both active
|
|
35
|
+
* states animate the field so the tiny panel visibly "does something" while the
|
|
36
|
+
* agent is busy — the device only re-pushes when the frame changes, so a
|
|
37
|
+
* breathing field is also what keeps working sessions live on screen:
|
|
38
|
+
* • processing → a slow blue "breathing" pulse (calm, ~3s cycle)
|
|
39
|
+
* • awaiting → a faster, brighter amber pulse (urgent)
|
|
40
|
+
* Error is a steady deep red (no motion — a frozen alarm reads as more severe).
|
|
41
|
+
*/
|
|
42
|
+
export declare function microStatusBg(state: 'idle' | 'processing' | 'awaiting' | 'error', animFrame: number): RGB;
|
|
43
|
+
/**
|
|
44
|
+
* Paint a creature glyph onto an 11×11 RGB buffer (only non-transparent pixels).
|
|
45
|
+
* `working` alternates two leg frames; `asking` reuses the idle pose (the amber
|
|
46
|
+
* field already signals "awaiting").
|
|
47
|
+
*/
|
|
48
|
+
export declare function paintMicroGlyph(buf: Uint8Array, creature: MicroCreature, state: MicroState, animFrame: number): void;
|
|
49
|
+
//# sourceMappingURL=micro-glyphs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"micro-glyphs.d.ts","sourceRoot":"","sources":["../../src/pixoo/micro-glyphs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,MAAM,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AACpD,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,GAAG,aAAa,CAAC;AAC9F,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEvD,eAAO,MAAM,UAAU,KAAK,CAAC;AA6M7B;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,UAAU,GAAG,OAAO,EACnD,SAAS,EAAE,MAAM,GAChB,GAAG,CAeL;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,UAAU,EACf,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,UAAU,EACjB,SAAS,EAAE,MAAM,GAChB,IAAI,CAoBN"}
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Native 11×11 creature glyphs for the Timebox Mini micro layout.
|
|
3
|
+
*
|
|
4
|
+
* The Timebox Mini has only 121 LEDs. Downscaling the 32×32 terrarium creature to
|
|
5
|
+
* 11×11 bottoms out at a fuzzy silhouette — so for this device the creatures are
|
|
6
|
+
* **hand-authored directly at 11×11** as bold, high-contrast bitmaps. Every pixel
|
|
7
|
+
* is intentional, which is dramatically more legible than any downscale. Treat
|
|
8
|
+
* this screen as a status badge, not a shrunken aquarium: one dominant creature,
|
|
9
|
+
* no labels, no HUD chrome, and only the pixels that identify the canonical mark.
|
|
10
|
+
*
|
|
11
|
+
* The glyphs are the canonical brand marks (matching assets/logos/*_creature_gen.png
|
|
12
|
+
* and design/brand/*.svg), not loose creature approximations:
|
|
13
|
+
* Claude → rusty robot (rectangular body, dark cutout eyes, arms, legs)
|
|
14
|
+
* Codex → lavender cloud carrying a white `>_` terminal prompt
|
|
15
|
+
* OpenClaw→ red lobster (side claws, antennae, teal eyes)
|
|
16
|
+
* OpenCode→ hollow rectangular ring logo
|
|
17
|
+
* Antigravity→ peak/arc logo
|
|
18
|
+
* The MicroCreature keys are legacy internal codenames kept for the renderer
|
|
19
|
+
* mapping — only the art behind them is brand-true.
|
|
20
|
+
*
|
|
21
|
+
* Each glyph is an 11-row × 11-col string grid. Characters map to colors:
|
|
22
|
+
* '.' transparent (shows the status-color background)
|
|
23
|
+
* 'B' body 'A' arm/antenna/leg 'C' claw 'D' joint/shadow 'E' eye 'K' cutout 'M' prompt mark 'F' logo frame
|
|
24
|
+
* Antigravity additionally uses gradient bands: L/T/Q/Y/O/R/P/V/U/N plus K for black cutout.
|
|
25
|
+
* `work` is an optional second frame for a simple processing animation (leg wiggle).
|
|
26
|
+
*/
|
|
27
|
+
export const MICRO_SIZE = 11;
|
|
28
|
+
// Claude Code — rusty robot (design/brand/claudecode.svg): broad rectangular
|
|
29
|
+
// body, full-width side arms, straight vertical legs, and two narrow vertical
|
|
30
|
+
// cutout eyes. The eyes occupy two LED rows because the SVG holes are taller
|
|
31
|
+
// than they are wide; the legs stay aligned instead of wiggling.
|
|
32
|
+
const OCTOPUS = {
|
|
33
|
+
// `E` is the lit "active" eye used only in the work pose: the rusty robot's
|
|
34
|
+
// dark cutout eyes (`K`) light up cyan while it is processing, so the panel
|
|
35
|
+
// reads as "thinking" at a glance instead of a frozen idle robot.
|
|
36
|
+
colors: { B: [235, 130, 90], D: [150, 84, 64], K: [0, 0, 0], E: [120, 226, 255] },
|
|
37
|
+
idle: [
|
|
38
|
+
'...........',
|
|
39
|
+
'.BBBBBBBBB.',
|
|
40
|
+
'.BBBBBBBBB.',
|
|
41
|
+
'.BBKBBBKBB.',
|
|
42
|
+
'.BBKBBBKBB.',
|
|
43
|
+
'BBBBBBBBBBB',
|
|
44
|
+
'BBBBBBBBBBB',
|
|
45
|
+
'.BBBBBBBBB.',
|
|
46
|
+
'..BB...BB..',
|
|
47
|
+
'..BB...BB..',
|
|
48
|
+
'...........',
|
|
49
|
+
],
|
|
50
|
+
// Working: eyes light up + the legs take a stride (left up / right planted),
|
|
51
|
+
// so the alternation with `idle` gives a visible blink + walk while busy.
|
|
52
|
+
work: [
|
|
53
|
+
'...........',
|
|
54
|
+
'.BBBBBBBBB.',
|
|
55
|
+
'.BBBBBBBBB.',
|
|
56
|
+
'.BBEBBBEBB.',
|
|
57
|
+
'.BBEBBBEBB.',
|
|
58
|
+
'BBBBBBBBBBB',
|
|
59
|
+
'BBBBBBBBBBB',
|
|
60
|
+
'.BBBBBBBBB.',
|
|
61
|
+
'..BB...BB..',
|
|
62
|
+
'...B...BB..',
|
|
63
|
+
'...........',
|
|
64
|
+
],
|
|
65
|
+
};
|
|
66
|
+
// Codex — lavender cloud (assets/logos/cloud_creature_gen.png, design/brand/codex.svg):
|
|
67
|
+
// puffy cloud outline with no dangling legs, plus an oversized `>_` prompt. The
|
|
68
|
+
// prompt is deliberately brighter than the body so it survives the LED diffuser.
|
|
69
|
+
const JELLYFISH = {
|
|
70
|
+
// `M` is PURE white (not off-white) and the body is a deeper indigo than the
|
|
71
|
+
// old lavender so the `>_` prompt actually pops on the LED diffuser instead of
|
|
72
|
+
// washing into the cloud. The mark is a bold 2px chevron + full-width cursor.
|
|
73
|
+
colors: { B: [86, 92, 220], M: [255, 255, 255] },
|
|
74
|
+
idle: [
|
|
75
|
+
'...........',
|
|
76
|
+
'...BBBBB...',
|
|
77
|
+
'.BBBBBBBBB.',
|
|
78
|
+
'BBBBBBBBBBB',
|
|
79
|
+
'BBMMBBBBBBB',
|
|
80
|
+
'BBBMMBBBBBB',
|
|
81
|
+
'BBMMBBBBBBB',
|
|
82
|
+
'BBBBBBBBBBB',
|
|
83
|
+
'BBBMMMMMBBB',
|
|
84
|
+
'.BBBBBBBBB.',
|
|
85
|
+
'...BBBBB...',
|
|
86
|
+
],
|
|
87
|
+
// Working: the cursor blinks off so the alternation reads as a live terminal
|
|
88
|
+
// prompt (chevron steady, underscore pulsing) while Codex is processing.
|
|
89
|
+
work: [
|
|
90
|
+
'...........',
|
|
91
|
+
'...BBBBB...',
|
|
92
|
+
'.BBBBBBBBB.',
|
|
93
|
+
'BBBBBBBBBBB',
|
|
94
|
+
'BBMMBBBBBBB',
|
|
95
|
+
'BBBMMBBBBBB',
|
|
96
|
+
'BBMMBBBBBBB',
|
|
97
|
+
'BBBBBBBBBBB',
|
|
98
|
+
'BBBBBBBBBBB',
|
|
99
|
+
'.BBBBBBBBB.',
|
|
100
|
+
'...BBBBB...',
|
|
101
|
+
],
|
|
102
|
+
};
|
|
103
|
+
// OpenCode — canonical opencode.svg: a single tall rectangular ring, not two
|
|
104
|
+
// overlapping squares and not a filled core. Light stroke so it reads on LEDs
|
|
105
|
+
// (#3a3a3a brand gray is too dark for this panel).
|
|
106
|
+
const OPENCODE = {
|
|
107
|
+
colors: { F: [232, 232, 232] },
|
|
108
|
+
idle: [
|
|
109
|
+
'...........',
|
|
110
|
+
'..FFFFFFF..',
|
|
111
|
+
'..FFFFFFF..',
|
|
112
|
+
'..FF...FF..',
|
|
113
|
+
'..FF...FF..',
|
|
114
|
+
'..FF...FF..',
|
|
115
|
+
'..FF...FF..',
|
|
116
|
+
'..FF...FF..',
|
|
117
|
+
'..FFFFFFF..',
|
|
118
|
+
'..FFFFFFF..',
|
|
119
|
+
'...........',
|
|
120
|
+
],
|
|
121
|
+
// Working: the ring thickens inward (hole narrows to 1px), so the alternation
|
|
122
|
+
// with `idle` reads as a steady pulse while OpenCode is processing.
|
|
123
|
+
work: [
|
|
124
|
+
'...........',
|
|
125
|
+
'..FFFFFFF..',
|
|
126
|
+
'..FFFFFFF..',
|
|
127
|
+
'..FFF.FFF..',
|
|
128
|
+
'..FFF.FFF..',
|
|
129
|
+
'..FFF.FFF..',
|
|
130
|
+
'..FFF.FFF..',
|
|
131
|
+
'..FFF.FFF..',
|
|
132
|
+
'..FFFFFFF..',
|
|
133
|
+
'..FFFFFFF..',
|
|
134
|
+
'...........',
|
|
135
|
+
],
|
|
136
|
+
};
|
|
137
|
+
// Antigravity — rainbow peak/arc mark, simplified for an 11×11 matrix. The
|
|
138
|
+
// central hollow is transparent, not black, so the status field shows through
|
|
139
|
+
// like the open space in the official arc silhouette.
|
|
140
|
+
const ANTIGRAVITY = {
|
|
141
|
+
colors: {
|
|
142
|
+
L: [92, 214, 77],
|
|
143
|
+
T: [31, 198, 179],
|
|
144
|
+
Q: [58, 199, 235],
|
|
145
|
+
Y: [245, 203, 36],
|
|
146
|
+
O: [255, 132, 16],
|
|
147
|
+
R: [255, 82, 65],
|
|
148
|
+
P: [183, 92, 182],
|
|
149
|
+
V: [102, 111, 225],
|
|
150
|
+
U: [36, 126, 255],
|
|
151
|
+
N: [41, 184, 238],
|
|
152
|
+
},
|
|
153
|
+
idle: [
|
|
154
|
+
'.....O.....',
|
|
155
|
+
'....YOR....',
|
|
156
|
+
'...LYORP...',
|
|
157
|
+
'...LYORPV..',
|
|
158
|
+
'...LTQRPV..',
|
|
159
|
+
'..LTQRPVU..',
|
|
160
|
+
'..TQ...VU..',
|
|
161
|
+
'..Q.....U..',
|
|
162
|
+
'.NQ.....UU.',
|
|
163
|
+
'.N.......UU',
|
|
164
|
+
'...........',
|
|
165
|
+
],
|
|
166
|
+
work: [
|
|
167
|
+
'....YO.....',
|
|
168
|
+
'....YORP...',
|
|
169
|
+
'...LYORPV..',
|
|
170
|
+
'...LTQRPV..',
|
|
171
|
+
'..LTQRPVU..',
|
|
172
|
+
'..TQ...VU..',
|
|
173
|
+
'..Q.....U..',
|
|
174
|
+
'.NQ.....UU.',
|
|
175
|
+
'.N.......UU',
|
|
176
|
+
'...........',
|
|
177
|
+
'...........',
|
|
178
|
+
],
|
|
179
|
+
};
|
|
180
|
+
// OpenClaw — red mechanical lobster (assets/logos/lobster_creature_gen.png,
|
|
181
|
+
// Pixoo LOD): side claws, small antennae, teal eyes, and a tapered body. The
|
|
182
|
+
// full asset's raised claws are too tall for 11px and read as a different head.
|
|
183
|
+
const CRAYFISH = {
|
|
184
|
+
colors: { B: [255, 92, 92], C: [210, 52, 52], A: [225, 180, 170], E: [0, 229, 204] },
|
|
185
|
+
idle: [
|
|
186
|
+
'...A...A...',
|
|
187
|
+
'....A.A....',
|
|
188
|
+
'....BBB....',
|
|
189
|
+
'...BEBEB...',
|
|
190
|
+
'C.BBBBBBB.C',
|
|
191
|
+
'CC.BBBBB.CC',
|
|
192
|
+
'.CBBBBBBB.C',
|
|
193
|
+
'..BBBBBBB..',
|
|
194
|
+
'...BBBBB...',
|
|
195
|
+
'...BB.BB...',
|
|
196
|
+
'..BB...BB..',
|
|
197
|
+
],
|
|
198
|
+
work: [
|
|
199
|
+
'....A.A....',
|
|
200
|
+
'...A...A...',
|
|
201
|
+
'....BBB....',
|
|
202
|
+
'...BEBEB...',
|
|
203
|
+
'.CBBBBBBB.C',
|
|
204
|
+
'CC.BBBBB.CC',
|
|
205
|
+
'C.BBBBBBB.C',
|
|
206
|
+
'..BBBBBBB..',
|
|
207
|
+
'...BBBBB...',
|
|
208
|
+
'...B.B.B...',
|
|
209
|
+
'..BB...BB..',
|
|
210
|
+
],
|
|
211
|
+
};
|
|
212
|
+
const GLYPHS = {
|
|
213
|
+
octopus: OCTOPUS,
|
|
214
|
+
jellyfish: JELLYFISH,
|
|
215
|
+
opencode: OPENCODE,
|
|
216
|
+
crayfish: CRAYFISH,
|
|
217
|
+
antigravity: ANTIGRAVITY,
|
|
218
|
+
};
|
|
219
|
+
/**
|
|
220
|
+
* Dark status-color field so the bright creature pops.
|
|
221
|
+
*
|
|
222
|
+
* Idle is a steady green so a resting session reads as calm/still. Both active
|
|
223
|
+
* states animate the field so the tiny panel visibly "does something" while the
|
|
224
|
+
* agent is busy — the device only re-pushes when the frame changes, so a
|
|
225
|
+
* breathing field is also what keeps working sessions live on screen:
|
|
226
|
+
* • processing → a slow blue "breathing" pulse (calm, ~3s cycle)
|
|
227
|
+
* • awaiting → a faster, brighter amber pulse (urgent)
|
|
228
|
+
* Error is a steady deep red (no motion — a frozen alarm reads as more severe).
|
|
229
|
+
*/
|
|
230
|
+
export function microStatusBg(state, animFrame) {
|
|
231
|
+
switch (state) {
|
|
232
|
+
case 'error': return [64, 18, 18];
|
|
233
|
+
case 'awaiting': {
|
|
234
|
+
const p = 0.78 + 0.22 * ((Math.sin(animFrame * 0.25) + 1) / 2);
|
|
235
|
+
return [Math.round(74 * p), Math.round(50 * p), Math.round(10 * p)];
|
|
236
|
+
}
|
|
237
|
+
case 'processing': {
|
|
238
|
+
// Breathe between a dim floor and a brighter blue on a ~3s cycle. Sampled
|
|
239
|
+
// at the device's ~1.5s poll this reads as a steady "working" heartbeat.
|
|
240
|
+
const p = 0.68 + 0.32 * ((Math.sin(animFrame * 0.18) + 1) / 2);
|
|
241
|
+
return [Math.round(16 * p), Math.round(40 * p), Math.round(88 * p)];
|
|
242
|
+
}
|
|
243
|
+
default: return [16, 56, 28];
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Paint a creature glyph onto an 11×11 RGB buffer (only non-transparent pixels).
|
|
248
|
+
* `working` alternates two leg frames; `asking` reuses the idle pose (the amber
|
|
249
|
+
* field already signals "awaiting").
|
|
250
|
+
*/
|
|
251
|
+
export function paintMicroGlyph(buf, creature, state, animFrame) {
|
|
252
|
+
const g = GLYPHS[creature];
|
|
253
|
+
const grid = state === 'working' && g.work && ((animFrame >> 2) & 1) ? g.work : g.idle;
|
|
254
|
+
const drift = creature === 'antigravity' ? Math.floor(animFrame / 6) % 4 : 0;
|
|
255
|
+
const offsetX = creature === 'antigravity' && state === 'working'
|
|
256
|
+
? (drift === 1 ? 1 : drift === 3 ? -1 : 0)
|
|
257
|
+
: 0;
|
|
258
|
+
const offsetY = creature === 'antigravity' && state !== 'idle' && (drift === 0 || drift === 1) ? -1 : 0;
|
|
259
|
+
for (let y = 0; y < MICRO_SIZE; y++) {
|
|
260
|
+
const row = grid[y];
|
|
261
|
+
for (let x = 0; x < MICRO_SIZE; x++) {
|
|
262
|
+
const col = g.colors[row[x]];
|
|
263
|
+
if (!col)
|
|
264
|
+
continue;
|
|
265
|
+
const dx = x + offsetX;
|
|
266
|
+
const dy = y + offsetY;
|
|
267
|
+
if (dx < 0 || dx >= MICRO_SIZE || dy < 0 || dy >= MICRO_SIZE)
|
|
268
|
+
continue;
|
|
269
|
+
const i = (dy * MICRO_SIZE + dx) * 3;
|
|
270
|
+
buf[i] = col[0];
|
|
271
|
+
buf[i + 1] = col[1];
|
|
272
|
+
buf[i + 2] = col[2];
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
//# sourceMappingURL=micro-glyphs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"micro-glyphs.js","sourceRoot":"","sources":["../../src/pixoo/micro-glyphs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAMH,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,CAAC;AAQ7B,6EAA6E;AAC7E,8EAA8E;AAC9E,6EAA6E;AAC7E,iEAAiE;AACjE,MAAM,OAAO,GAAU;IACrB,4EAA4E;IAC5E,4EAA4E;IAC5E,kEAAkE;IAClE,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE;IACjF,IAAI,EAAE;QACJ,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;KACd;IACD,6EAA6E;IAC7E,0EAA0E;IAC1E,IAAI,EAAE;QACJ,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;KACd;CACF,CAAC;AAEF,wFAAwF;AACxF,gFAAgF;AAChF,iFAAiF;AACjF,MAAM,SAAS,GAAU;IACvB,6EAA6E;IAC7E,+EAA+E;IAC/E,8EAA8E;IAC9E,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE;IAChD,IAAI,EAAE;QACJ,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;KACd;IACD,6EAA6E;IAC7E,yEAAyE;IACzE,IAAI,EAAE;QACJ,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;KACd;CACF,CAAC;AAEF,6EAA6E;AAC7E,8EAA8E;AAC9E,mDAAmD;AACnD,MAAM,QAAQ,GAAU;IACtB,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE;IAC9B,IAAI,EAAE;QACJ,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;KACd;IACD,8EAA8E;IAC9E,oEAAoE;IACpE,IAAI,EAAE;QACJ,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;KACd;CACF,CAAC;AAEF,2EAA2E;AAC3E,8EAA8E;AAC9E,sDAAsD;AACtD,MAAM,WAAW,GAAU;IACzB,MAAM,EAAE;QACN,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC;QAChB,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;QACjB,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;QACjB,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;QACjB,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;QACjB,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;QAChB,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;QACjB,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;QAClB,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;QACjB,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;KAClB;IACD,IAAI,EAAE;QACJ,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;KACd;IACD,IAAI,EAAE;QACJ,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;KACd;CACF,CAAC;AAEF,4EAA4E;AAC5E,6EAA6E;AAC7E,gFAAgF;AAChF,MAAM,QAAQ,GAAU;IACtB,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE;IACpF,IAAI,EAAE;QACJ,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;KACd;IACD,IAAI,EAAE;QACJ,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;KACd;CACF,CAAC;AAEF,MAAM,MAAM,GAAiC;IAC3C,OAAO,EAAE,OAAO;IAChB,SAAS,EAAE,SAAS;IACpB,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,QAAQ;IAClB,WAAW,EAAE,WAAW;CACzB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAmD,EACnD,SAAiB;IAEjB,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAClC,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/D,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QACtE,CAAC;QACD,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,0EAA0E;YAC1E,yEAAyE;YACzE,MAAM,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/D,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAC7B,GAAe,EACf,QAAuB,EACvB,KAAiB,EACjB,SAAiB;IAEjB,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAG,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvF,MAAM,KAAK,GAAG,QAAQ,KAAK,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,MAAM,OAAO,GAAG,QAAQ,KAAK,aAAa,IAAI,KAAK,KAAK,SAAS;QAC/D,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC,CAAC;IACN,MAAM,OAAO,GAAG,QAAQ,KAAK,aAAa,IAAI,KAAK,KAAK,MAAM,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,CAAC,GAAG;gBAAE,SAAS;YACnB,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC;YACvB,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC;YACvB,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,UAAU,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,UAAU;gBAAE,SAAS;YACvE,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,UAAU,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;YACrC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -42,9 +42,9 @@ export declare function getPixooDeviceDetails(): Array<{
|
|
|
42
42
|
* Render a fresh frame using current cached state.
|
|
43
43
|
* Used by the live preview endpoint when no Pixoo device is connected.
|
|
44
44
|
*/
|
|
45
|
-
export declare function renderPreviewFrame(): Uint8Array;
|
|
45
|
+
export declare function renderPreviewFrame(size?: 11 | 32 | 64, layout?: 'standard' | 'micro'): Uint8Array;
|
|
46
46
|
/**
|
|
47
47
|
* Get the last calculated frame.
|
|
48
48
|
*/
|
|
49
|
-
export declare function getLastFrame(): Uint8Array | null;
|
|
49
|
+
export declare function getLastFrame(size?: 11 | 32 | 64, layout?: 'standard' | 'micro'): Uint8Array | null;
|
|
50
50
|
//# sourceMappingURL=pixoo-bridge.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pixoo-bridge.d.ts","sourceRoot":"","sources":["../../src/pixoo/pixoo-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAgC,MAAM,aAAa,CAAC;AAW7E,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;
|
|
1
|
+
{"version":3,"file":"pixoo-bridge.d.ts","sourceRoot":"","sources":["../../src/pixoo/pixoo-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAgC,MAAM,aAAa,CAAC;AAW7E,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA2CD,4EAA4E;AAC5E,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,IAAI,CAExE;AAED,wBAAgB,gBAAgB,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,GAAG,IAAI,CAwCnE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAmFvD;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CA8BrD;AAED,mEAAmE;AACnE,wBAAgB,eAAe,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI,CAG3E;AAED,+BAA+B;AAC/B,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI,CAG5E;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAO/C;AAED,uCAAuC;AACvC,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,qBAAqB,IAAI,KAAK,CAAC;IAC7C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC,CAYD;AA8ED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,GAAE,UAAU,GAAG,OAAoB,GAAG,UAAU,CAE7G;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,GAAE,UAAU,GAAG,OAAoB,GAAG,UAAU,GAAG,IAAI,CAE9G"}
|