@agentdeck/bridge 1.0.15 → 1.0.18
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/dist/auth.d.ts +30 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +162 -29
- package/dist/auth.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +99 -0
- package/dist/cli.js.map +1 -1
- package/dist/daemon-server.d.ts.map +1 -1
- package/dist/daemon-server.js +190 -27
- package/dist/daemon-server.js.map +1 -1
- package/dist/daemon.js +1 -1
- package/dist/esp32-serial.d.ts +23 -1
- package/dist/esp32-serial.d.ts.map +1 -1
- package/dist/esp32-serial.js +50 -1
- package/dist/esp32-serial.js.map +1 -1
- package/dist/http-auth-gate.d.ts +22 -5
- package/dist/http-auth-gate.d.ts.map +1 -1
- package/dist/http-auth-gate.js +14 -2
- package/dist/http-auth-gate.js.map +1 -1
- package/dist/pairing-window.d.ts +95 -0
- package/dist/pairing-window.d.ts.map +1 -0
- package/dist/pairing-window.js +268 -0
- package/dist/pairing-window.js.map +1 -0
- package/dist/passive-observer.d.ts +1 -0
- package/dist/passive-observer.d.ts.map +1 -1
- package/dist/passive-observer.js +13 -4
- package/dist/passive-observer.js.map +1 -1
- package/dist/pixoo/pixoo-renderer.d.ts.map +1 -1
- package/dist/pixoo/pixoo-renderer.js +17 -9
- package/dist/pixoo/pixoo-renderer.js.map +1 -1
- package/dist/pty-manager.d.ts.map +1 -1
- package/dist/pty-manager.js +7 -1
- package/dist/pty-manager.js.map +1 -1
- package/dist/session-registry.d.ts +1 -0
- package/dist/session-registry.d.ts.map +1 -1
- package/dist/usage-event.d.ts.map +1 -1
- package/dist/usage-event.js +23 -4
- package/dist/usage-event.js.map +1 -1
- package/dist/ws-server.d.ts +36 -0
- package/dist/ws-server.d.ts.map +1 -1
- package/dist/ws-server.js +105 -2
- package/dist/ws-server.js.map +1 -1
- package/package.json +3 -3
- 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 -24
- package/dist/d200h/image-renderer.d.ts.map +0 -1
- package/dist/d200h/image-renderer.js +0 -321
- package/dist/d200h/image-renderer.js.map +0 -1
- package/dist/hook-migration.d.ts +0 -2
- package/dist/hook-migration.d.ts.map +0 -1
- package/dist/hook-migration.js +0 -116
- package/dist/hook-migration.js.map +0 -1
- package/dist/modules/d200h-module.d.ts +0 -65
- package/dist/modules/d200h-module.d.ts.map +0 -1
- package/dist/modules/d200h-module.js +0 -495
- package/dist/modules/d200h-module.js.map +0 -1
- package/dist/modules/d200h-renderer.d.ts +0 -7
- package/dist/modules/d200h-renderer.d.ts.map +0 -1
- package/dist/modules/d200h-renderer.js +0 -321
- package/dist/modules/d200h-renderer.js.map +0 -1
- package/dist/modules/trmnl-module.d.ts +0 -38
- package/dist/modules/trmnl-module.d.ts.map +0 -1
- package/dist/modules/trmnl-module.js +0 -111
- package/dist/modules/trmnl-module.js.map +0 -1
- package/dist/trmnl/byos-server.d.ts +0 -39
- package/dist/trmnl/byos-server.d.ts.map +0 -1
- package/dist/trmnl/byos-server.js +0 -301
- package/dist/trmnl/byos-server.js.map +0 -1
- package/dist/trmnl/frame-cache.d.ts +0 -37
- package/dist/trmnl/frame-cache.d.ts.map +0 -1
- package/dist/trmnl/frame-cache.js +0 -157
- package/dist/trmnl/frame-cache.js.map +0 -1
- package/dist/trmnl/image-renderer.d.ts +0 -27
- package/dist/trmnl/image-renderer.d.ts.map +0 -1
- package/dist/trmnl/image-renderer.js +0 -235
- package/dist/trmnl/image-renderer.js.map +0 -1
- package/dist/trmnl/trmnl-settings.d.ts +0 -96
- package/dist/trmnl/trmnl-settings.d.ts.map +0 -1
- package/dist/trmnl/trmnl-settings.js +0 -177
- package/dist/trmnl/trmnl-settings.js.map +0 -1
- package/dist/trmnl/trmnl-telemetry.d.ts +0 -47
- package/dist/trmnl/trmnl-telemetry.d.ts.map +0 -1
- package/dist/trmnl/trmnl-telemetry.js +0 -56
- package/dist/trmnl/trmnl-telemetry.js.map +0 -1
- package/dist/whisper-server-manager.d.ts +0 -19
- package/dist/whisper-server-manager.d.ts.map +0 -1
- package/dist/whisper-server-manager.js +0 -171
- package/dist/whisper-server-manager.js.map +0 -1
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Whisper-server singleton manager.
|
|
3
|
-
*
|
|
4
|
-
* Fixed port 9100 — one server shared across all agentdeck sessions.
|
|
5
|
-
* Info file at ~/.agentdeck/whisper-server.json for discovery.
|
|
6
|
-
* Last session to exit kills the server.
|
|
7
|
-
*/
|
|
8
|
-
export declare const WHISPER_SERVER_PORT = 9100;
|
|
9
|
-
/**
|
|
10
|
-
* Ensure a whisper-server is running on the singleton port.
|
|
11
|
-
* Returns port on success, null if unavailable (binary missing, model missing, etc).
|
|
12
|
-
*/
|
|
13
|
-
export declare function ensureWhisperServer(serverBin: string, modelPath: string): Promise<number | null>;
|
|
14
|
-
/**
|
|
15
|
-
* Release the whisper-server if no other sessions remain.
|
|
16
|
-
* Call AFTER deregisterSession() so the count is already decremented.
|
|
17
|
-
*/
|
|
18
|
-
export declare function releaseWhisperServer(): void;
|
|
19
|
-
//# sourceMappingURL=whisper-server-manager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"whisper-server-manager.d.ts","sourceRoot":"","sources":["../src/whisper-server-manager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAaH,eAAO,MAAM,mBAAmB,OAAO,CAAC;AA2DxC;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA6ExB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAiB3C"}
|
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Whisper-server singleton manager.
|
|
3
|
-
*
|
|
4
|
-
* Fixed port 9100 — one server shared across all agentdeck sessions.
|
|
5
|
-
* Info file at ~/.agentdeck/whisper-server.json for discovery.
|
|
6
|
-
* Last session to exit kills the server.
|
|
7
|
-
*/
|
|
8
|
-
import { spawn } from 'child_process';
|
|
9
|
-
import { readFileSync, writeFileSync, renameSync, unlinkSync, mkdirSync, existsSync, } from 'fs';
|
|
10
|
-
import { join } from 'path';
|
|
11
|
-
import { homedir } from 'os';
|
|
12
|
-
import { randomUUID } from 'crypto';
|
|
13
|
-
import { listActive } from './session-registry.js';
|
|
14
|
-
import { debug } from './logger.js';
|
|
15
|
-
export const WHISPER_SERVER_PORT = 9100;
|
|
16
|
-
const INFO_DIR = join(homedir(), '.agentdeck');
|
|
17
|
-
const INFO_FILE = join(INFO_DIR, 'whisper-server.json');
|
|
18
|
-
function ensureDir() {
|
|
19
|
-
if (!existsSync(INFO_DIR)) {
|
|
20
|
-
mkdirSync(INFO_DIR, { recursive: true });
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
function readInfo() {
|
|
24
|
-
try {
|
|
25
|
-
return JSON.parse(readFileSync(INFO_FILE, 'utf-8'));
|
|
26
|
-
}
|
|
27
|
-
catch {
|
|
28
|
-
return null;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
function writeInfo(info) {
|
|
32
|
-
ensureDir();
|
|
33
|
-
const tmp = join(INFO_DIR, `.whisper-server.${randomUUID()}.tmp`);
|
|
34
|
-
writeFileSync(tmp, JSON.stringify(info, null, 2), 'utf-8');
|
|
35
|
-
renameSync(tmp, INFO_FILE);
|
|
36
|
-
}
|
|
37
|
-
function removeInfo() {
|
|
38
|
-
try {
|
|
39
|
-
unlinkSync(INFO_FILE);
|
|
40
|
-
}
|
|
41
|
-
catch { /* already gone */ }
|
|
42
|
-
}
|
|
43
|
-
function isProcessAlive(pid) {
|
|
44
|
-
try {
|
|
45
|
-
process.kill(pid, 0);
|
|
46
|
-
return true;
|
|
47
|
-
}
|
|
48
|
-
catch {
|
|
49
|
-
return false;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
async function isServerResponding(port) {
|
|
53
|
-
try {
|
|
54
|
-
await fetch(`http://127.0.0.1:${port}`, { signal: AbortSignal.timeout(1000) });
|
|
55
|
-
return true;
|
|
56
|
-
}
|
|
57
|
-
catch {
|
|
58
|
-
return false;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
async function pollUntilReady(port, maxMs) {
|
|
62
|
-
const start = Date.now();
|
|
63
|
-
while (Date.now() - start < maxMs) {
|
|
64
|
-
if (await isServerResponding(port))
|
|
65
|
-
return true;
|
|
66
|
-
await new Promise((r) => setTimeout(r, 500));
|
|
67
|
-
}
|
|
68
|
-
return false;
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Ensure a whisper-server is running on the singleton port.
|
|
72
|
-
* Returns port on success, null if unavailable (binary missing, model missing, etc).
|
|
73
|
-
*/
|
|
74
|
-
export async function ensureWhisperServer(serverBin, modelPath) {
|
|
75
|
-
if (!existsSync(serverBin)) {
|
|
76
|
-
debug('WhisperMgr', `whisper-server not found at ${serverBin}, skipping`);
|
|
77
|
-
return null;
|
|
78
|
-
}
|
|
79
|
-
// 1. Check existing info file
|
|
80
|
-
const info = readInfo();
|
|
81
|
-
if (info) {
|
|
82
|
-
if (isProcessAlive(info.pid)) {
|
|
83
|
-
// PID alive — check if server is responding
|
|
84
|
-
if (await isServerResponding(info.port)) {
|
|
85
|
-
debug('WhisperMgr', `Reusing existing server (pid=${info.pid}, port=${info.port})`);
|
|
86
|
-
return info.port;
|
|
87
|
-
}
|
|
88
|
-
// PID alive but not responding — model may still be loading, poll 30s
|
|
89
|
-
debug('WhisperMgr', `Server pid=${info.pid} alive but not responding, waiting for model load...`);
|
|
90
|
-
if (await pollUntilReady(info.port, 30_000)) {
|
|
91
|
-
debug('WhisperMgr', `Server became ready (pid=${info.pid}, port=${info.port})`);
|
|
92
|
-
return info.port;
|
|
93
|
-
}
|
|
94
|
-
// Still not responding after 30s — stale
|
|
95
|
-
debug('WhisperMgr', `Server pid=${info.pid} never responded, treating as stale`);
|
|
96
|
-
}
|
|
97
|
-
// PID dead or stale — clean up
|
|
98
|
-
removeInfo();
|
|
99
|
-
}
|
|
100
|
-
// 2. Spawn new server (detached so it survives parent exit)
|
|
101
|
-
debug('WhisperMgr', `Starting whisper-server on port ${WHISPER_SERVER_PORT}...`);
|
|
102
|
-
const args = [
|
|
103
|
-
'--model', modelPath,
|
|
104
|
-
'--port', String(WHISPER_SERVER_PORT),
|
|
105
|
-
'--host', '127.0.0.1',
|
|
106
|
-
'-l', 'auto',
|
|
107
|
-
'--no-timestamps',
|
|
108
|
-
'--convert',
|
|
109
|
-
'--prompt', 'coding, programming, Claude, terminal, git, function, component, API',
|
|
110
|
-
];
|
|
111
|
-
const proc = spawn(serverBin, args, {
|
|
112
|
-
stdio: 'ignore',
|
|
113
|
-
detached: true,
|
|
114
|
-
});
|
|
115
|
-
proc.unref();
|
|
116
|
-
const pid = proc.pid;
|
|
117
|
-
if (!pid) {
|
|
118
|
-
debug('WhisperMgr', 'Failed to spawn whisper-server (no pid)');
|
|
119
|
-
return null;
|
|
120
|
-
}
|
|
121
|
-
// 3. Brief wait to detect immediate crash (e.g. port conflict)
|
|
122
|
-
await new Promise((r) => setTimeout(r, 200));
|
|
123
|
-
if (!isProcessAlive(pid)) {
|
|
124
|
-
debug('WhisperMgr', `whisper-server died immediately (pid=${pid}), checking for existing server...`);
|
|
125
|
-
// Another process may have won the port race — re-check info file
|
|
126
|
-
const otherInfo = readInfo();
|
|
127
|
-
if (otherInfo && isProcessAlive(otherInfo.pid) && await isServerResponding(otherInfo.port)) {
|
|
128
|
-
debug('WhisperMgr', `Found winner server (pid=${otherInfo.pid}, port=${otherInfo.port})`);
|
|
129
|
-
return otherInfo.port;
|
|
130
|
-
}
|
|
131
|
-
removeInfo();
|
|
132
|
-
return null;
|
|
133
|
-
}
|
|
134
|
-
// 4. Write info file
|
|
135
|
-
writeInfo({ pid, port: WHISPER_SERVER_PORT, modelPath, startedAt: new Date().toISOString() });
|
|
136
|
-
// 5. Poll until ready (up to 30s for model loading)
|
|
137
|
-
if (await pollUntilReady(WHISPER_SERVER_PORT, 30_000)) {
|
|
138
|
-
debug('WhisperMgr', `whisper-server ready on port ${WHISPER_SERVER_PORT} (pid=${pid})`);
|
|
139
|
-
return WHISPER_SERVER_PORT;
|
|
140
|
-
}
|
|
141
|
-
debug('WhisperMgr', 'whisper-server failed to become ready within 30s');
|
|
142
|
-
return null;
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* Release the whisper-server if no other sessions remain.
|
|
146
|
-
* Call AFTER deregisterSession() so the count is already decremented.
|
|
147
|
-
*/
|
|
148
|
-
export function releaseWhisperServer() {
|
|
149
|
-
const activeSessions = listActive();
|
|
150
|
-
if (activeSessions.length > 0) {
|
|
151
|
-
debug('WhisperMgr', `Keeping whisper-server alive (${activeSessions.length} session(s) remain)`);
|
|
152
|
-
return;
|
|
153
|
-
}
|
|
154
|
-
const info = readInfo();
|
|
155
|
-
if (!info)
|
|
156
|
-
return;
|
|
157
|
-
debug('WhisperMgr', `Killing whisper-server (pid=${info.pid})`);
|
|
158
|
-
try {
|
|
159
|
-
process.kill(info.pid, 'SIGTERM');
|
|
160
|
-
}
|
|
161
|
-
catch { /* already dead */ }
|
|
162
|
-
// Force kill after 3s
|
|
163
|
-
setTimeout(() => {
|
|
164
|
-
try {
|
|
165
|
-
process.kill(info.pid, 'SIGKILL');
|
|
166
|
-
}
|
|
167
|
-
catch { /* already dead */ }
|
|
168
|
-
}, 3000);
|
|
169
|
-
removeInfo();
|
|
170
|
-
}
|
|
171
|
-
//# sourceMappingURL=whisper-server-manager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"whisper-server-manager.js","sourceRoot":"","sources":["../src/whisper-server-manager.ts"],"names":[],"mappings":"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"}
|