@agentdeck/bridge 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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/collector.d.ts +18 -1
- package/dist/apme/collector.d.ts.map +1 -1
- package/dist/apme/collector.js +48 -3
- package/dist/apme/collector.js.map +1 -1
- package/dist/apme/dashboard-html.d.ts.map +1 -1
- package/dist/apme/dashboard-html.js +275 -35
- package/dist/apme/dashboard-html.js.map +1 -1
- package/dist/apme/http.d.ts.map +1 -1
- package/dist/apme/http.js +33 -5
- package/dist/apme/http.js.map +1 -1
- package/dist/apme/index.d.ts.map +1 -1
- package/dist/apme/index.js +6 -2
- package/dist/apme/index.js.map +1 -1
- package/dist/apme/store.d.ts +41 -1
- package/dist/apme/store.d.ts.map +1 -1
- package/dist/apme/store.js +153 -27
- package/dist/apme/store.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/cli.d.ts +11 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +55 -8
- 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/daemon-server.d.ts.map +1 -1
- package/dist/daemon-server.js +263 -1
- 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/esp32-serial.d.ts +4 -0
- package/dist/esp32-serial.d.ts.map +1 -1
- package/dist/esp32-serial.js +4 -0
- 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/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.js +2 -2
- 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/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/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/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/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 +4 -3
- package/src/timebox/sync_ble.py +35 -16
package/dist/mdns.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mdns.js","sourceRoot":"","sources":["../src/mdns.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"mdns.js","sourceRoot":"","sources":["../src/mdns.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A knock is worth showing for this long after its last attempt. Long enough
|
|
3
|
+
* that the operator can walk to the machine; short enough that a device carried
|
|
4
|
+
* out of the building stops being offered.
|
|
5
|
+
*/
|
|
6
|
+
export declare const KNOCK_TTL_MS: number;
|
|
7
|
+
/** Cap on simultaneously-tracked peers. */
|
|
8
|
+
export declare const MAX_KNOCKS = 12;
|
|
9
|
+
export interface PairingKnock {
|
|
10
|
+
/**
|
|
11
|
+
* What an approval will be recorded against. `device:<id>` when the client
|
|
12
|
+
* identified itself, `ip:<addr>` otherwise — never the bare string, so the
|
|
13
|
+
* two can never collide or be confused downstream.
|
|
14
|
+
*/
|
|
15
|
+
key: string;
|
|
16
|
+
ip: string;
|
|
17
|
+
deviceId: string | null;
|
|
18
|
+
attempts: number;
|
|
19
|
+
firstSeen: number;
|
|
20
|
+
lastSeen: number;
|
|
21
|
+
/**
|
|
22
|
+
* True when the peer presented a token we do not accept, rather than no token
|
|
23
|
+
* at all. Reads very differently to an operator: usually a provisioned device
|
|
24
|
+
* whose credential went stale, not a new device.
|
|
25
|
+
*/
|
|
26
|
+
staleToken: boolean;
|
|
27
|
+
/** Display only — `key` already encodes which kind this is. */
|
|
28
|
+
deviceScoped: boolean;
|
|
29
|
+
}
|
|
30
|
+
export interface PairingApproval {
|
|
31
|
+
key: string;
|
|
32
|
+
/**
|
|
33
|
+
* Where it last connected from. Display only — an approval keyed on a device
|
|
34
|
+
* id must not start depending on the address, or it would silently reacquire
|
|
35
|
+
* the NAT and DHCP problems it exists to escape.
|
|
36
|
+
*/
|
|
37
|
+
lastIP: string;
|
|
38
|
+
approvedAt: number;
|
|
39
|
+
deviceId: string | null;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* The one place a key is spelled, so the gate, the store and the UI cannot
|
|
43
|
+
* disagree about what "this peer" means.
|
|
44
|
+
*/
|
|
45
|
+
export declare function peerKey(ip: string, deviceId: unknown): string;
|
|
46
|
+
/**
|
|
47
|
+
* Called from the refusal path. Cheap on purpose — it runs for every rejected
|
|
48
|
+
* handshake, and a looping device produces one every few seconds.
|
|
49
|
+
*/
|
|
50
|
+
export declare function recordKnock(ip: string, deviceId: unknown, staleToken: boolean, now?: number): void;
|
|
51
|
+
/** Live knocks, newest first. Expiry is applied here — see the header. */
|
|
52
|
+
export declare function pairingKnocks(now?: number): PairingKnock[];
|
|
53
|
+
/**
|
|
54
|
+
* Drop a knock without approving it. Not a block: the peer may knock again,
|
|
55
|
+
* which is deliberate — a permanent denylist keyed on an address a stranger can
|
|
56
|
+
* change is security theatre, and it would silently strand a real device that
|
|
57
|
+
* later inherits that address.
|
|
58
|
+
*/
|
|
59
|
+
export declare function dismissKnock(key: string): boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Approving is what a pairing code would have done, minus the typing: from here
|
|
62
|
+
* on this peer authenticates by its key. Persisted immediately.
|
|
63
|
+
*/
|
|
64
|
+
export declare function approvePeer(key: string, now?: number): boolean;
|
|
65
|
+
export declare function revokePeer(key: string): boolean;
|
|
66
|
+
/**
|
|
67
|
+
* The question the WebSocket gate asks.
|
|
68
|
+
*
|
|
69
|
+
* A device id wins when the client sent one; the address is consulted only as
|
|
70
|
+
* the legacy path, so a client that adopts the header stops depending on its
|
|
71
|
+
* address the moment it does. Both are checked rather than one, because a
|
|
72
|
+
* device approved by address before it learned to send an id must not be locked
|
|
73
|
+
* out by the upgrade that taught it.
|
|
74
|
+
*/
|
|
75
|
+
export declare function isApprovedPeer(ip: string, deviceId: unknown): boolean;
|
|
76
|
+
export declare function pairingApprovals(): PairingApproval[];
|
|
77
|
+
/** Read the device id a client offered on the handshake, if any. */
|
|
78
|
+
export declare function deviceIdFromHeaders(headers: Record<string, string | string[] | undefined> | undefined, headerName: string): string | null;
|
|
79
|
+
export declare function resetPairingKnocksForTests(): void;
|
|
80
|
+
//# sourceMappingURL=pairing-knocks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pairing-knocks.d.ts","sourceRoot":"","sources":["../src/pairing-knocks.ts"],"names":[],"mappings":"AAgEA;;;;GAIG;AACH,eAAO,MAAM,YAAY,QAAc,CAAC;AAExC,2CAA2C;AAC3C,eAAO,MAAM,UAAU,KAAK,CAAC;AAE7B,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB,+DAA+D;IAC/D,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,CAI7D;AA8ID;;;GAGG;AACH,wBAAgB,WAAW,CACzB,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,OAAO,EACjB,UAAU,EAAE,OAAO,EACnB,GAAG,SAAa,GACf,IAAI,CAwBN;AAED,0EAA0E;AAC1E,wBAAgB,aAAa,CAAC,GAAG,SAAa,GAAG,YAAY,EAAE,CAK9D;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,OAAO,CAQlE;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAK/C;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAMrE;AAED,wBAAgB,gBAAgB,IAAI,eAAe,EAAE,CAEpD;AAED,oEAAoE;AACpE,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,SAAS,EAClE,UAAU,EAAE,MAAM,GACjB,MAAM,GAAG,IAAI,CAGf;AAED,wBAAgB,0BAA0B,IAAI,IAAI,CAGjD"}
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Who tried to connect, and who the operator let in — the Node daemon's half
|
|
3
|
+
* of the operator-approval credential path (`PairingKnockStore.swift`).
|
|
4
|
+
*
|
|
5
|
+
* The daemon already knew everything this needs: it refuses an unauthenticated
|
|
6
|
+
* LAN peer at the WebSocket handshake and logs the address. What it did not do
|
|
7
|
+
* was tell anyone. So a device with no credential retried forever into a log
|
|
8
|
+
* nobody reads, while every way to give it a credential asked the DEVICE to do
|
|
9
|
+
* something — scan a QR, type six digits, type a 32-character token. An e-ink
|
|
10
|
+
* reader can do none of them comfortably, and one with no camera cannot do the
|
|
11
|
+
* first at all.
|
|
12
|
+
*
|
|
13
|
+
* Turning the refusal into a prompt inverts that: the device does nothing, and
|
|
14
|
+
* the operator — who is holding the machine — approves a peer they can see.
|
|
15
|
+
* That is also the stronger of the two trust models. A pairing code trusts
|
|
16
|
+
* whoever knows a secret, so anyone in range may guess at it while the window
|
|
17
|
+
* is open; an approval trusts a specific peer the operator pointed at, and an
|
|
18
|
+
* attacker cannot approve themselves.
|
|
19
|
+
*
|
|
20
|
+
* This file is the Node parity port. It is deliberately a near-transliteration
|
|
21
|
+
* of the Swift store rather than a re-derivation: both daemons take turns
|
|
22
|
+
* owning port 9120 and they read each other's state, so a rule that is restated
|
|
23
|
+
* in this file's own words is a rule that can drift. The properties below are
|
|
24
|
+
* the ones that must hold in both.
|
|
25
|
+
*
|
|
26
|
+
* **Identity is the device id when the client sends one, and the address only
|
|
27
|
+
* when it does not.** The refusal happens at the HTTP upgrade, before any frame
|
|
28
|
+
* — `client_register`, where a device says its name, arrives only after a
|
|
29
|
+
* socket exists — so the daemon must learn who this is from the handshake
|
|
30
|
+
* itself. A client that sends `x-agentdeck-device` is approved as that device:
|
|
31
|
+
* two devices behind one NAT are told apart, a DHCP lease change does not
|
|
32
|
+
* retire the grant, and one device can be revoked without touching the token
|
|
33
|
+
* the whole fleet shares.
|
|
34
|
+
*
|
|
35
|
+
* The address remains the key for clients that send no id, and that path must
|
|
36
|
+
* keep working: every device already in the field predates the header, and
|
|
37
|
+
* refusing them would turn an upgrade into a fleet-wide outage. An IP-keyed
|
|
38
|
+
* approval carries the old caveats — it retires when the lease changes, and
|
|
39
|
+
* behind NAT it is not an identity at all — so a row says which kind it is
|
|
40
|
+
* instead of letting the two read alike.
|
|
41
|
+
*
|
|
42
|
+
* Neither kind is proof. The link is plaintext `ws://`, so a device id in the
|
|
43
|
+
* handshake is replayable by a passive observer on the same segment — exactly
|
|
44
|
+
* as true of the `?token=` every paired device already carries. This is no
|
|
45
|
+
* weaker than what ships today; it buys granularity and revocation, not
|
|
46
|
+
* secrecy.
|
|
47
|
+
*
|
|
48
|
+
* **A claimed name is never identity.** Nothing here reads one. If a name is
|
|
49
|
+
* ever surfaced it must sit beside the address, never instead of it.
|
|
50
|
+
*
|
|
51
|
+
* **Bounded, and expired on read.** A hostile peer must not be able to grow
|
|
52
|
+
* this list without limit, so it is capped and the oldest knock is dropped —
|
|
53
|
+
* which does mean a flood can push a real device out of view, and the cap is
|
|
54
|
+
* chosen high enough that a human notices the flood first. Expiry is evaluated
|
|
55
|
+
* when the list is read, never by a timer: a timer that fires late on a
|
|
56
|
+
* sleeping laptop would keep a stale knock alive past its promise, exactly as
|
|
57
|
+
* in `pairing-window.ts`.
|
|
58
|
+
*/
|
|
59
|
+
import { readFileSync, writeFileSync, renameSync, unlinkSync, mkdirSync } from 'fs';
|
|
60
|
+
import { join } from 'path';
|
|
61
|
+
import { homedir } from 'os';
|
|
62
|
+
import { normalizeDeviceId } from '@agentdeck/shared';
|
|
63
|
+
import { debug } from './logger.js';
|
|
64
|
+
/**
|
|
65
|
+
* A knock is worth showing for this long after its last attempt. Long enough
|
|
66
|
+
* that the operator can walk to the machine; short enough that a device carried
|
|
67
|
+
* out of the building stops being offered.
|
|
68
|
+
*/
|
|
69
|
+
export const KNOCK_TTL_MS = 15 * 60_000;
|
|
70
|
+
/** Cap on simultaneously-tracked peers. */
|
|
71
|
+
export const MAX_KNOCKS = 12;
|
|
72
|
+
/**
|
|
73
|
+
* The one place a key is spelled, so the gate, the store and the UI cannot
|
|
74
|
+
* disagree about what "this peer" means.
|
|
75
|
+
*/
|
|
76
|
+
export function peerKey(ip, deviceId) {
|
|
77
|
+
const normalized = normalizeDeviceId(deviceId);
|
|
78
|
+
if (normalized)
|
|
79
|
+
return `device:${normalized}`;
|
|
80
|
+
return `ip:${ip}`;
|
|
81
|
+
}
|
|
82
|
+
function deviceIdOfKey(key) {
|
|
83
|
+
return key.startsWith('device:') ? key.slice('device:'.length) : null;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Every other module resolves its state through
|
|
87
|
+
* `AGENTDECK_DATA_DIR || ~/.agentdeck`; mirror that here rather than hardcoding
|
|
88
|
+
* the home path, or a daemon started with a custom data dir would keep its
|
|
89
|
+
* approvals somewhere else than the rest of its state.
|
|
90
|
+
*/
|
|
91
|
+
function dataDir() {
|
|
92
|
+
return process.env.AGENTDECK_DATA_DIR || join(homedir(), '.agentdeck');
|
|
93
|
+
}
|
|
94
|
+
function approvalsFile() {
|
|
95
|
+
return join(dataDir(), 'pairing-approved.json');
|
|
96
|
+
}
|
|
97
|
+
/** Cached per resolved directory, so pointing AGENTDECK_DATA_DIR elsewhere re-reads. */
|
|
98
|
+
let cache = null;
|
|
99
|
+
const pending = new Map();
|
|
100
|
+
/**
|
|
101
|
+
* Read a timestamp written by either daemon.
|
|
102
|
+
*
|
|
103
|
+
* The two encode `approvedAt` differently — this file writes epoch ms, while
|
|
104
|
+
* Swift's `JSONEncoder` default writes a Foundation reference-date Double
|
|
105
|
+
* (seconds since 2001-01-01). The files do not collide today, because the
|
|
106
|
+
* sandboxed app keeps its copy inside its container and this one lives in
|
|
107
|
+
* `~/.agentdeck`. But the two daemons take turns owning port 9120, and the day
|
|
108
|
+
* those paths converge a silent misread would date every approval to 1970 or to
|
|
109
|
+
* the far future — so accept both now, by magnitude, rather than discovering it
|
|
110
|
+
* as a bug later. A reference-date value for any plausible date is < 1e11;
|
|
111
|
+
* epoch ms is > 1e12.
|
|
112
|
+
*/
|
|
113
|
+
const FOUNDATION_REFERENCE_EPOCH_MS = 978_307_200_000; // 2001-01-01T00:00:00Z
|
|
114
|
+
function toEpoch(value) {
|
|
115
|
+
if (typeof value === 'number' && Number.isFinite(value)) {
|
|
116
|
+
if (Math.abs(value) < 1e11)
|
|
117
|
+
return Math.round(value * 1000) + FOUNDATION_REFERENCE_EPOCH_MS;
|
|
118
|
+
return value;
|
|
119
|
+
}
|
|
120
|
+
if (typeof value === 'string') {
|
|
121
|
+
const parsed = Date.parse(value);
|
|
122
|
+
if (!Number.isNaN(parsed))
|
|
123
|
+
return parsed;
|
|
124
|
+
}
|
|
125
|
+
return 0;
|
|
126
|
+
}
|
|
127
|
+
function loadApprovals() {
|
|
128
|
+
const dir = dataDir();
|
|
129
|
+
if (cache && cache.dir === dir)
|
|
130
|
+
return cache.approved;
|
|
131
|
+
const table = new Map();
|
|
132
|
+
let raw = null;
|
|
133
|
+
try {
|
|
134
|
+
raw = readFileSync(approvalsFile(), 'utf8');
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
// No file yet is the common case: nobody has been approved.
|
|
138
|
+
cache = { dir, approved: table };
|
|
139
|
+
return table;
|
|
140
|
+
}
|
|
141
|
+
let parsed;
|
|
142
|
+
try {
|
|
143
|
+
parsed = JSON.parse(raw);
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
// Unparseable is NOT "nobody is approved" — see the migration note below.
|
|
147
|
+
// We cannot recover rows from it, but we must not overwrite the file
|
|
148
|
+
// either, so leave it on disk untouched for the operator to inspect.
|
|
149
|
+
debug('Pair', 'approvals file is unparseable; treating as empty without overwriting it');
|
|
150
|
+
cache = { dir, approved: table };
|
|
151
|
+
return table;
|
|
152
|
+
}
|
|
153
|
+
if (Array.isArray(parsed)) {
|
|
154
|
+
for (const row of parsed) {
|
|
155
|
+
if (!row || typeof row !== 'object')
|
|
156
|
+
continue;
|
|
157
|
+
const r = row;
|
|
158
|
+
if (typeof r.key === 'string' && r.key.length > 0) {
|
|
159
|
+
table.set(r.key, {
|
|
160
|
+
key: r.key,
|
|
161
|
+
lastIP: typeof r.lastIP === 'string' ? r.lastIP : '',
|
|
162
|
+
approvedAt: toEpoch(r.approvedAt),
|
|
163
|
+
deviceId: deviceIdOfKey(r.key),
|
|
164
|
+
});
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
// Migrate rather than discard. A decode that merely fails reads as
|
|
168
|
+
// "nobody is approved", which silently un-pairs every device the operator
|
|
169
|
+
// already let in — the same failure the tmp+rename below exists to
|
|
170
|
+
// prevent, arriving through the schema instead of the disk.
|
|
171
|
+
const legacy = row;
|
|
172
|
+
if (typeof legacy.ip === 'string' && legacy.ip.length > 0) {
|
|
173
|
+
const key = `ip:${legacy.ip}`;
|
|
174
|
+
table.set(key, {
|
|
175
|
+
key,
|
|
176
|
+
lastIP: legacy.ip,
|
|
177
|
+
approvedAt: toEpoch(legacy.approvedAt),
|
|
178
|
+
deviceId: null,
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
cache = { dir, approved: table };
|
|
184
|
+
return table;
|
|
185
|
+
}
|
|
186
|
+
function persist(approved) {
|
|
187
|
+
const rows = [...approved.values()].sort((a, b) => a.approvedAt - b.approvedAt);
|
|
188
|
+
const path = approvalsFile();
|
|
189
|
+
const tmp = `${path}.tmp`;
|
|
190
|
+
try {
|
|
191
|
+
mkdirSync(dataDir(), { recursive: true });
|
|
192
|
+
// tmp+rename, as everywhere else that writes the data dir: a truncated
|
|
193
|
+
// approvals file reads as "nobody is approved" and silently locks the whole
|
|
194
|
+
// fleet out.
|
|
195
|
+
writeFileSync(tmp, JSON.stringify(rows, null, 2), { mode: 0o600 });
|
|
196
|
+
renameSync(tmp, path);
|
|
197
|
+
}
|
|
198
|
+
catch (err) {
|
|
199
|
+
try {
|
|
200
|
+
unlinkSync(tmp);
|
|
201
|
+
}
|
|
202
|
+
catch { /* nothing to clean up */ }
|
|
203
|
+
debug('Pair', `failed to persist approvals: ${String(err)}`);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
function evictIfNeeded() {
|
|
207
|
+
if (pending.size <= MAX_KNOCKS)
|
|
208
|
+
return;
|
|
209
|
+
const ordered = [...pending.values()].sort((a, b) => a.lastSeen - b.lastSeen);
|
|
210
|
+
for (const knock of ordered.slice(0, pending.size - MAX_KNOCKS)) {
|
|
211
|
+
pending.delete(knock.key);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Called from the refusal path. Cheap on purpose — it runs for every rejected
|
|
216
|
+
* handshake, and a looping device produces one every few seconds.
|
|
217
|
+
*/
|
|
218
|
+
export function recordKnock(ip, deviceId, staleToken, now = Date.now()) {
|
|
219
|
+
if (!ip)
|
|
220
|
+
return;
|
|
221
|
+
const normalized = normalizeDeviceId(deviceId);
|
|
222
|
+
const key = peerKey(ip, normalized);
|
|
223
|
+
if (loadApprovals().has(key))
|
|
224
|
+
return; // already let in; not a knock
|
|
225
|
+
const existing = pending.get(key);
|
|
226
|
+
if (existing) {
|
|
227
|
+
existing.attempts += 1;
|
|
228
|
+
existing.lastSeen = now;
|
|
229
|
+
existing.staleToken = staleToken;
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
pending.set(key, {
|
|
233
|
+
key,
|
|
234
|
+
ip,
|
|
235
|
+
deviceId: normalized,
|
|
236
|
+
attempts: 1,
|
|
237
|
+
firstSeen: now,
|
|
238
|
+
lastSeen: now,
|
|
239
|
+
staleToken,
|
|
240
|
+
deviceScoped: normalized !== null,
|
|
241
|
+
});
|
|
242
|
+
evictIfNeeded();
|
|
243
|
+
}
|
|
244
|
+
/** Live knocks, newest first. Expiry is applied here — see the header. */
|
|
245
|
+
export function pairingKnocks(now = Date.now()) {
|
|
246
|
+
for (const [key, knock] of pending) {
|
|
247
|
+
if (now - knock.lastSeen >= KNOCK_TTL_MS)
|
|
248
|
+
pending.delete(key);
|
|
249
|
+
}
|
|
250
|
+
return [...pending.values()].sort((a, b) => b.lastSeen - a.lastSeen);
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Drop a knock without approving it. Not a block: the peer may knock again,
|
|
254
|
+
* which is deliberate — a permanent denylist keyed on an address a stranger can
|
|
255
|
+
* change is security theatre, and it would silently strand a real device that
|
|
256
|
+
* later inherits that address.
|
|
257
|
+
*/
|
|
258
|
+
export function dismissKnock(key) {
|
|
259
|
+
return pending.delete(key);
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Approving is what a pairing code would have done, minus the typing: from here
|
|
263
|
+
* on this peer authenticates by its key. Persisted immediately.
|
|
264
|
+
*/
|
|
265
|
+
export function approvePeer(key, now = Date.now()) {
|
|
266
|
+
if (!key)
|
|
267
|
+
return false;
|
|
268
|
+
const approved = loadApprovals();
|
|
269
|
+
const lastIP = pending.get(key)?.ip ?? approved.get(key)?.lastIP ?? '';
|
|
270
|
+
approved.set(key, { key, lastIP, approvedAt: now, deviceId: deviceIdOfKey(key) });
|
|
271
|
+
pending.delete(key);
|
|
272
|
+
persist(approved);
|
|
273
|
+
return true;
|
|
274
|
+
}
|
|
275
|
+
export function revokePeer(key) {
|
|
276
|
+
const approved = loadApprovals();
|
|
277
|
+
if (!approved.delete(key))
|
|
278
|
+
return false;
|
|
279
|
+
persist(approved);
|
|
280
|
+
return true;
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* The question the WebSocket gate asks.
|
|
284
|
+
*
|
|
285
|
+
* A device id wins when the client sent one; the address is consulted only as
|
|
286
|
+
* the legacy path, so a client that adopts the header stops depending on its
|
|
287
|
+
* address the moment it does. Both are checked rather than one, because a
|
|
288
|
+
* device approved by address before it learned to send an id must not be locked
|
|
289
|
+
* out by the upgrade that taught it.
|
|
290
|
+
*/
|
|
291
|
+
export function isApprovedPeer(ip, deviceId) {
|
|
292
|
+
const approved = loadApprovals();
|
|
293
|
+
const normalized = normalizeDeviceId(deviceId);
|
|
294
|
+
if (normalized && approved.has(`device:${normalized}`))
|
|
295
|
+
return true;
|
|
296
|
+
if (!ip)
|
|
297
|
+
return false;
|
|
298
|
+
return approved.has(`ip:${ip}`);
|
|
299
|
+
}
|
|
300
|
+
export function pairingApprovals() {
|
|
301
|
+
return [...loadApprovals().values()].sort((a, b) => b.approvedAt - a.approvedAt);
|
|
302
|
+
}
|
|
303
|
+
/** Read the device id a client offered on the handshake, if any. */
|
|
304
|
+
export function deviceIdFromHeaders(headers, headerName) {
|
|
305
|
+
const raw = headers?.[headerName];
|
|
306
|
+
return normalizeDeviceId(Array.isArray(raw) ? raw[0] : raw);
|
|
307
|
+
}
|
|
308
|
+
export function resetPairingKnocksForTests() {
|
|
309
|
+
pending.clear();
|
|
310
|
+
cache = null;
|
|
311
|
+
}
|
|
312
|
+
//# sourceMappingURL=pairing-knocks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pairing-knocks.js","sourceRoot":"","sources":["../src/pairing-knocks.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,4 +15,8 @@ export type MicroAggregate = 'idle' | 'processing' | 'awaiting' | 'error';
|
|
|
15
15
|
export declare const MICRO_SIZE = 11;
|
|
16
16
|
/** Paint a complete 11×11 Agent Beacon frame. */
|
|
17
17
|
export declare function paintTimeboxBeacon(buf: Uint8Array, creature: MicroCreature | null, aggregate: MicroAggregate, animFrame: number): void;
|
|
18
|
+
/** Static 11×11 compact equivalent of the passive OFFLINE card. Literal text
|
|
19
|
+
* cannot fit this panel, so a broken-link ring carries the state while the dim
|
|
20
|
+
* cyan corner accents preserve the same dark AgentDeck grammar with sparse LEDs. */
|
|
21
|
+
export declare function paintTimeboxOffline(buf: Uint8Array): void;
|
|
18
22
|
//# sourceMappingURL=micro-glyphs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"micro-glyphs.d.ts","sourceRoot":"","sources":["../../src/pixoo/micro-glyphs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAQH,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,GAAG,MAAM,CAAC;AACvG,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,YAAY,GAAG,UAAU,GAAG,OAAO,CAAC;AAE1E,eAAO,MAAM,UAAU,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"micro-glyphs.d.ts","sourceRoot":"","sources":["../../src/pixoo/micro-glyphs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAQH,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,GAAG,MAAM,CAAC;AACvG,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,YAAY,GAAG,UAAU,GAAG,OAAO,CAAC;AAE1E,eAAO,MAAM,UAAU,KAAK,CAAC;AAkI7B,iDAAiD;AACjD,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,UAAU,EACf,QAAQ,EAAE,aAAa,GAAG,IAAI,EAC9B,SAAS,EAAE,cAAc,EACzB,SAAS,EAAE,MAAM,GAChB,IAAI,CAMN;AAED;;oFAEoF;AACpF,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI,CAoBzD"}
|
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
import { OFFICIAL_TIMEBOX_GLYPHS, OFFICIAL_TIMEBOX_GLYPH_SIZE, } from './official-dot-glyphs.generated.js';
|
|
13
13
|
export const MICRO_SIZE = 11;
|
|
14
14
|
const BACKGROUND = [2, 6, 10];
|
|
15
|
+
const OFFLINE_ACCENT = [0, 48, 56];
|
|
16
|
+
const OFFLINE_GLYPH = [68, 88, 92];
|
|
15
17
|
const IDLE_RAIL = [38, 170, 116];
|
|
16
18
|
const PROCESSING_RAIL = [82, 220, 255];
|
|
17
19
|
const AWAITING_RAIL = [255, 184, 54];
|
|
@@ -142,4 +144,31 @@ export function paintTimeboxBeacon(buf, creature, aggregate, animFrame) {
|
|
|
142
144
|
paintStandby(buf, animFrame);
|
|
143
145
|
paintStatusRail(buf, aggregate, animFrame);
|
|
144
146
|
}
|
|
147
|
+
/** Static 11×11 compact equivalent of the passive OFFLINE card. Literal text
|
|
148
|
+
* cannot fit this panel, so a broken-link ring carries the state while the dim
|
|
149
|
+
* cyan corner accents preserve the same dark AgentDeck grammar with sparse LEDs. */
|
|
150
|
+
export function paintTimeboxOffline(buf) {
|
|
151
|
+
if (buf.length !== MICRO_SIZE * MICRO_SIZE * 3)
|
|
152
|
+
return;
|
|
153
|
+
for (let i = 0; i < MICRO_SIZE * MICRO_SIZE; i++)
|
|
154
|
+
buf.set(BACKGROUND, i * 3);
|
|
155
|
+
for (const [x, y] of [
|
|
156
|
+
[0, 0], [1, 0], [0, 1], [9, 0], [10, 0], [10, 1],
|
|
157
|
+
[0, 9], [0, 10], [1, 10], [10, 9], [9, 10], [10, 10],
|
|
158
|
+
])
|
|
159
|
+
setPixel(buf, x, y, OFFLINE_ACCENT);
|
|
160
|
+
// 7×7 open ring + slash. The gap at the lower-left keeps the slash and ring
|
|
161
|
+
// from merging into an unreadable filled diamond through the diffuser.
|
|
162
|
+
for (let x = 2; x <= 8; x++) {
|
|
163
|
+
setPixel(buf, x, 2, OFFLINE_GLYPH);
|
|
164
|
+
setPixel(buf, x, 8, OFFLINE_GLYPH);
|
|
165
|
+
}
|
|
166
|
+
for (let y = 3; y <= 7; y++) {
|
|
167
|
+
if (y !== 7)
|
|
168
|
+
setPixel(buf, 2, y, OFFLINE_GLYPH);
|
|
169
|
+
setPixel(buf, 8, y, OFFLINE_GLYPH);
|
|
170
|
+
}
|
|
171
|
+
for (let i = 0; i < 7; i++)
|
|
172
|
+
setPixel(buf, 2 + i, 8 - i, OFFLINE_GLYPH);
|
|
173
|
+
}
|
|
145
174
|
//# sourceMappingURL=micro-glyphs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"micro-glyphs.js","sourceRoot":"","sources":["../../src/pixoo/micro-glyphs.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"micro-glyphs.js","sourceRoot":"","sources":["../../src/pixoo/micro-glyphs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pixoo-font.d.ts","sourceRoot":"","sources":["../../src/pixoo/pixoo-font.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"pixoo-font.d.ts","sourceRoot":"","sources":["../../src/pixoo/pixoo-font.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAqEH;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CACtB,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GACjE,IAAI,CA2BN;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGhD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GACtD,IAAI,CAIN"}
|
package/dist/pixoo/pixoo-font.js
CHANGED
|
@@ -20,7 +20,9 @@ const GLYPHS = {
|
|
|
20
20
|
'K': [0b101, 0b110, 0b100, 0b110, 0b101],
|
|
21
21
|
'L': [0b100, 0b100, 0b100, 0b100, 0b111],
|
|
22
22
|
'M': [0b101, 0b111, 0b111, 0b101, 0b101],
|
|
23
|
-
|
|
23
|
+
// A diagonal, not the old M-shaped double-join. At 3px wide the fully
|
|
24
|
+
// connected form makes N byte-identical to M and reads as a smudged block.
|
|
25
|
+
'N': [0b101, 0b110, 0b101, 0b011, 0b101],
|
|
24
26
|
'O': [0b010, 0b101, 0b101, 0b101, 0b010],
|
|
25
27
|
'P': [0b110, 0b101, 0b110, 0b100, 0b100],
|
|
26
28
|
'Q': [0b010, 0b101, 0b101, 0b110, 0b011],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pixoo-font.js","sourceRoot":"","sources":["../../src/pixoo/pixoo-font.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,mEAAmE;AACnE,0EAA0E;AAC1E,MAAM,MAAM,GAA6B;IACvC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE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"}
|
|
1
|
+
{"version":3,"file":"pixoo-font.js","sourceRoot":"","sources":["../../src/pixoo/pixoo-font.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,mEAAmE;AACnE,0EAA0E;AAC1E,MAAM,MAAM,GAA6B;IACvC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,sEAAsE;IACtE,2EAA2E;IAC3E,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACxC,GAAG,EAAE,CAAC,KAAK,EAAE,KAA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"}
|
|
@@ -33,7 +33,7 @@ export declare function formatResetDetailed(resetsAt: string | undefined): strin
|
|
|
33
33
|
* `'standard'` is the full terrarium.
|
|
34
34
|
*/
|
|
35
35
|
export declare function renderFrame(stateEvent: StateUpdateEvent | null, usageEvent: UsageEvent | null, sessions: SessionInfo[] | null, timeOverrideMs?: number, size?: 11 | 32 | 64, layout?: 'standard' | 'micro', subagentActivity?: SubagentActivityBySession): Uint8Array;
|
|
36
|
-
/** Render
|
|
36
|
+
/** Render the static, dark passive-display OFFLINE card. */
|
|
37
37
|
export declare function renderDisconnectedFrame(): Uint8Array;
|
|
38
38
|
/**
|
|
39
39
|
* Introspection seam: the creature set `renderFrame` would draw for this input,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pixoo-renderer.d.ts","sourceRoot":"","sources":["../../src/pixoo/pixoo-renderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,EAEL,KAAK,yBAAyB,EAE/B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AA6E9D,KAAK,YAAY,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,aAAa,GAAG,MAAM,CAAC;AAMlF,qDAAqD;AACrD,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,GAAG,MAAM,CAc3E;AAokBD,kDAAkD;AAClD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAcxE;AAiiBD;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,UAAU,EAAE,gBAAgB,GAAG,IAAI,EACnC,UAAU,EAAE,UAAU,GAAG,IAAI,EAC7B,QAAQ,EAAE,WAAW,EAAE,GAAG,IAAI,EAC9B,cAAc,CAAC,EAAE,MAAM,EACvB,IAAI,GAAE,EAAE,GAAG,EAAE,GAAG,EAAO,EACvB,MAAM,GAAE,UAAU,GAAG,OAAoB,EACzC,gBAAgB,GAAE,yBAA8B,GAC/C,UAAU,CAmQZ;AAID,
|
|
1
|
+
{"version":3,"file":"pixoo-renderer.d.ts","sourceRoot":"","sources":["../../src/pixoo/pixoo-renderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,EAEL,KAAK,yBAAyB,EAE/B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AA6E9D,KAAK,YAAY,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,aAAa,GAAG,MAAM,CAAC;AAMlF,qDAAqD;AACrD,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,GAAG,MAAM,CAc3E;AAokBD,kDAAkD;AAClD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAcxE;AAiiBD;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,UAAU,EAAE,gBAAgB,GAAG,IAAI,EACnC,UAAU,EAAE,UAAU,GAAG,IAAI,EAC7B,QAAQ,EAAE,WAAW,EAAE,GAAG,IAAI,EAC9B,cAAc,CAAC,EAAE,MAAM,EACvB,IAAI,GAAE,EAAE,GAAG,EAAE,GAAG,EAAO,EACvB,MAAM,GAAE,UAAU,GAAG,OAAoB,EACzC,gBAAgB,GAAE,yBAA8B,GAC/C,UAAU,CAmQZ;AAID,4DAA4D;AAC5D,wBAAgB,uBAAuB,IAAI,UAAU,CAcpD;AAGD;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,WAAW,EAAE,GAAG,IAAI,EAC9B,UAAU,EAAE,gBAAgB,GAAG,IAAI,EACnC,UAAU,GAAE,UAAU,GAAG,IAAW,GACnC,KAAK,CAAC;IACP,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,YAAY,CAAC;IAC3B,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,UAAU,CAAC;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC,CAWD;AAED,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACxE,YAAY,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -1267,9 +1267,24 @@ export function renderFrame(stateEvent, usageEvent, sessions, timeOverrideMs, si
|
|
|
1267
1267
|
return outputBuf;
|
|
1268
1268
|
}
|
|
1269
1269
|
// ===== Disconnected Frame =====
|
|
1270
|
-
/** Render
|
|
1270
|
+
/** Render the static, dark passive-display OFFLINE card. */
|
|
1271
1271
|
export function renderDisconnectedFrame() {
|
|
1272
|
-
const buf = new Uint8Array(64 * 64 * 3);
|
|
1272
|
+
const buf = new Uint8Array(64 * 64 * 3);
|
|
1273
|
+
for (let i = 0; i < 64 * 64; i++)
|
|
1274
|
+
buf.set(COLORS.tankWall, i * 3);
|
|
1275
|
+
const accent = [0, 48, 56];
|
|
1276
|
+
// Sparse corner rails survive 64→32 reduction while keeping almost every
|
|
1277
|
+
// LED at the low-power background level.
|
|
1278
|
+
for (let i = 0; i < 9; i++) {
|
|
1279
|
+
setPixel(buf, 4 + i, 4, accent);
|
|
1280
|
+
setPixel(buf, 4, 4 + i, accent);
|
|
1281
|
+
setPixel(buf, 51 + i, 4, accent);
|
|
1282
|
+
setPixel(buf, 59, 4 + i, accent);
|
|
1283
|
+
setPixel(buf, 4 + i, 59, accent);
|
|
1284
|
+
setPixel(buf, 4, 51 + i, accent);
|
|
1285
|
+
setPixel(buf, 51 + i, 59, accent);
|
|
1286
|
+
setPixel(buf, 59, 51 + i, accent);
|
|
1287
|
+
}
|
|
1273
1288
|
drawTextCentered(buf, 29, PASSIVE_OFFLINE_LABEL, '#555555');
|
|
1274
1289
|
return buf;
|
|
1275
1290
|
}
|