@agentdeck/bridge 1.0.20 → 1.0.22
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/adapters/openclaw.d.ts +55 -1
- package/dist/adapters/openclaw.d.ts.map +1 -1
- package/dist/adapters/openclaw.js +278 -45
- package/dist/adapters/openclaw.js.map +1 -1
- package/dist/adb-reverse.d.ts +26 -3
- package/dist/adb-reverse.d.ts.map +1 -1
- package/dist/adb-reverse.js +26 -5
- package/dist/adb-reverse.js.map +1 -1
- package/dist/apme/adapters/openclaw-hook.d.ts +45 -1
- package/dist/apme/adapters/openclaw-hook.d.ts.map +1 -1
- package/dist/apme/adapters/openclaw-hook.js +84 -4
- package/dist/apme/adapters/openclaw-hook.js.map +1 -1
- package/dist/apme/claude-transcript-reader.d.ts +54 -0
- package/dist/apme/claude-transcript-reader.d.ts.map +1 -1
- package/dist/apme/claude-transcript-reader.js +77 -0
- package/dist/apme/claude-transcript-reader.js.map +1 -1
- package/dist/apme/collector.d.ts +63 -5
- package/dist/apme/collector.d.ts.map +1 -1
- package/dist/apme/collector.js +147 -10
- package/dist/apme/collector.js.map +1 -1
- package/dist/apme/store.d.ts +23 -1
- package/dist/apme/store.d.ts.map +1 -1
- package/dist/apme/store.js +81 -2
- package/dist/apme/store.js.map +1 -1
- package/dist/apme/types.d.ts +1 -1
- package/dist/apme/types.d.ts.map +1 -1
- package/dist/apme/types.js.map +1 -1
- package/dist/auth.d.ts +37 -0
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +23 -0
- package/dist/auth.js.map +1 -1
- package/dist/ble-sync-spawn.d.ts +27 -0
- package/dist/ble-sync-spawn.d.ts.map +1 -1
- package/dist/ble-sync-spawn.js +32 -0
- package/dist/ble-sync-spawn.js.map +1 -1
- package/dist/bridge-core.d.ts +21 -4
- package/dist/bridge-core.d.ts.map +1 -1
- package/dist/bridge-core.js +52 -23
- package/dist/bridge-core.js.map +1 -1
- package/dist/claude-interrupt-marker.d.ts +31 -0
- package/dist/claude-interrupt-marker.d.ts.map +1 -0
- package/dist/claude-interrupt-marker.js +58 -0
- package/dist/claude-interrupt-marker.js.map +1 -0
- package/dist/claude-turn-watchdog.d.ts +23 -0
- package/dist/claude-turn-watchdog.d.ts.map +1 -1
- package/dist/claude-turn-watchdog.js +30 -4
- package/dist/claude-turn-watchdog.js.map +1 -1
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +411 -115
- package/dist/cli.js.map +1 -1
- package/dist/codex-rate-limits-live.d.ts +58 -9
- package/dist/codex-rate-limits-live.d.ts.map +1 -1
- package/dist/codex-rate-limits-live.js +64 -15
- package/dist/codex-rate-limits-live.js.map +1 -1
- package/dist/codex-rate-limits.d.ts +2 -2
- package/dist/codex-rate-limits.d.ts.map +1 -1
- package/dist/codex-rate-limits.js +34 -16
- package/dist/codex-rate-limits.js.map +1 -1
- package/dist/daemon-port.d.ts +90 -0
- package/dist/daemon-port.d.ts.map +1 -0
- package/dist/daemon-port.js +119 -0
- package/dist/daemon-port.js.map +1 -0
- package/dist/daemon-server.d.ts +60 -3
- package/dist/daemon-server.d.ts.map +1 -1
- package/dist/daemon-server.js +362 -109
- package/dist/daemon-server.js.map +1 -1
- package/dist/daemon-settings.d.ts +46 -0
- package/dist/daemon-settings.d.ts.map +1 -0
- package/dist/daemon-settings.js +85 -0
- package/dist/daemon-settings.js.map +1 -0
- package/dist/daemon-takeover.d.ts +75 -0
- package/dist/daemon-takeover.d.ts.map +1 -0
- package/dist/daemon-takeover.js +137 -0
- package/dist/daemon-takeover.js.map +1 -0
- package/dist/daemon.js +1 -1
- package/dist/hook-server.d.ts.map +1 -1
- package/dist/hook-server.js +17 -0
- package/dist/hook-server.js.map +1 -1
- package/dist/idotmatrix/idotmatrix-daemon-sync.d.ts.map +1 -1
- package/dist/idotmatrix/idotmatrix-daemon-sync.js +13 -1
- package/dist/idotmatrix/idotmatrix-daemon-sync.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +34 -12
- package/dist/index.js.map +1 -1
- package/dist/kiro-diagnostics.d.ts +90 -0
- package/dist/kiro-diagnostics.d.ts.map +1 -0
- package/dist/kiro-diagnostics.js +278 -0
- package/dist/kiro-diagnostics.js.map +1 -0
- package/dist/kiro-session.d.ts +113 -0
- package/dist/kiro-session.d.ts.map +1 -0
- package/dist/kiro-session.js +688 -0
- package/dist/kiro-session.js.map +1 -0
- package/dist/kiro-timeline-feed.d.ts +45 -0
- package/dist/kiro-timeline-feed.d.ts.map +1 -0
- package/dist/kiro-timeline-feed.js +116 -0
- package/dist/kiro-timeline-feed.js.map +1 -0
- package/dist/kiro-transcript-timeline.d.ts +57 -0
- package/dist/kiro-transcript-timeline.d.ts.map +1 -0
- package/dist/kiro-transcript-timeline.js +183 -0
- package/dist/kiro-transcript-timeline.js.map +1 -0
- package/dist/linux-service.d.ts +2 -1
- package/dist/linux-service.d.ts.map +1 -1
- package/dist/linux-service.js +8 -3
- package/dist/linux-service.js.map +1 -1
- package/dist/mdns-discover.d.ts +27 -0
- package/dist/mdns-discover.d.ts.map +1 -1
- package/dist/mdns-discover.js +60 -7
- package/dist/mdns-discover.js.map +1 -1
- package/dist/mdns.d.ts.map +1 -1
- package/dist/mdns.js +16 -3
- package/dist/mdns.js.map +1 -1
- package/dist/modules/adb-module.d.ts.map +1 -1
- package/dist/modules/adb-module.js +5 -2
- package/dist/modules/adb-module.js.map +1 -1
- package/dist/modules/index.d.ts +2 -1
- package/dist/modules/index.d.ts.map +1 -1
- package/dist/modules/index.js +1 -0
- package/dist/modules/index.js.map +1 -1
- package/dist/modules/types.d.ts +34 -9
- package/dist/modules/types.d.ts.map +1 -1
- package/dist/modules/types.js +34 -1
- package/dist/modules/types.js.map +1 -1
- package/dist/network-posture.d.ts +67 -0
- package/dist/network-posture.d.ts.map +1 -0
- package/dist/network-posture.js +100 -0
- package/dist/network-posture.js.map +1 -0
- package/dist/observed-steering.d.ts +14 -0
- package/dist/observed-steering.d.ts.map +1 -1
- package/dist/observed-steering.js +18 -0
- package/dist/observed-steering.js.map +1 -1
- package/dist/observed-turn-watchdogs.d.ts +84 -0
- package/dist/observed-turn-watchdogs.d.ts.map +1 -0
- package/dist/observed-turn-watchdogs.js +134 -0
- package/dist/observed-turn-watchdogs.js.map +1 -0
- package/dist/openclaw-session.d.ts +10 -0
- package/dist/openclaw-session.d.ts.map +1 -1
- package/dist/openclaw-session.js +12 -0
- package/dist/openclaw-session.js.map +1 -1
- package/dist/passive-observer.d.ts +19 -0
- package/dist/passive-observer.d.ts.map +1 -1
- package/dist/passive-observer.js +208 -24
- package/dist/passive-observer.js.map +1 -1
- package/dist/pixoo/micro-glyphs.d.ts +1 -1
- package/dist/pixoo/micro-glyphs.d.ts.map +1 -1
- package/dist/pixoo/micro-glyphs.js +2 -0
- package/dist/pixoo/micro-glyphs.js.map +1 -1
- package/dist/pixoo/official-dot-glyphs.generated.d.ts +1 -1
- package/dist/pixoo/official-dot-glyphs.generated.d.ts.map +1 -1
- package/dist/pixoo/official-dot-glyphs.generated.js +47 -0
- package/dist/pixoo/official-dot-glyphs.generated.js.map +1 -1
- package/dist/pixoo/pixoo-discover.d.ts +8 -1
- package/dist/pixoo/pixoo-discover.d.ts.map +1 -1
- package/dist/pixoo/pixoo-discover.js +15 -8
- package/dist/pixoo/pixoo-discover.js.map +1 -1
- package/dist/pixoo/pixoo-renderer.d.ts +4 -2
- package/dist/pixoo/pixoo-renderer.d.ts.map +1 -1
- package/dist/pixoo/pixoo-renderer.js +105 -36
- package/dist/pixoo/pixoo-renderer.js.map +1 -1
- package/dist/pixoo/pixoo-settings.d.ts +19 -2
- package/dist/pixoo/pixoo-settings.d.ts.map +1 -1
- package/dist/pixoo/pixoo-settings.js +22 -4
- package/dist/pixoo/pixoo-settings.js.map +1 -1
- package/dist/pixoo/pixoo-sprites.d.ts.map +1 -1
- package/dist/pixoo/pixoo-sprites.js +2 -0
- package/dist/pixoo/pixoo-sprites.js.map +1 -1
- package/dist/python-ble-runtime.d.ts +2 -0
- package/dist/python-ble-runtime.d.ts.map +1 -1
- package/dist/python-ble-runtime.js +101 -7
- package/dist/python-ble-runtime.js.map +1 -1
- package/dist/session-aggregator.d.ts +9 -1
- package/dist/session-aggregator.d.ts.map +1 -1
- package/dist/session-aggregator.js +1 -1
- 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 +126 -19
- package/dist/session-registry.js.map +1 -1
- package/dist/subagent-timeline.d.ts +38 -7
- package/dist/subagent-timeline.d.ts.map +1 -1
- package/dist/subagent-timeline.js +154 -23
- package/dist/subagent-timeline.js.map +1 -1
- package/dist/timebox/timebox-daemon-sync.d.ts.map +1 -1
- package/dist/timebox/timebox-daemon-sync.js +11 -1
- package/dist/timebox/timebox-daemon-sync.js.map +1 -1
- package/dist/timeline-store.d.ts.map +1 -1
- package/dist/timeline-store.js +26 -1
- package/dist/timeline-store.js.map +1 -1
- package/dist/tui/renderer.d.ts.map +1 -1
- package/dist/tui/renderer.js +13 -1
- package/dist/tui/renderer.js.map +1 -1
- package/dist/tui/terrarium.d.ts.map +1 -1
- package/dist/tui/terrarium.js +10 -5
- package/dist/tui/terrarium.js.map +1 -1
- package/dist/usage-api.d.ts +28 -1
- package/dist/usage-api.d.ts.map +1 -1
- package/dist/usage-api.js +74 -33
- package/dist/usage-api.js.map +1 -1
- package/dist/usage-event.d.ts.map +1 -1
- package/dist/usage-event.js +2 -17
- package/dist/usage-event.js.map +1 -1
- package/dist/utils/redact-secrets.d.ts +3 -0
- package/dist/utils/redact-secrets.d.ts.map +1 -0
- package/dist/utils/redact-secrets.js +29 -0
- package/dist/utils/redact-secrets.js.map +1 -0
- package/dist/windows-service.d.ts +2 -1
- package/dist/windows-service.d.ts.map +1 -1
- package/dist/windows-service.js +6 -3
- package/dist/windows-service.js.map +1 -1
- package/package.json +3 -3
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* inspects it and never performs network installation on its own.
|
|
8
8
|
*/
|
|
9
9
|
import { spawnSync } from 'child_process';
|
|
10
|
-
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
|
|
10
|
+
import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'fs';
|
|
11
11
|
import { homedir } from 'os';
|
|
12
12
|
import { dirname, join } from 'path';
|
|
13
13
|
import { fileURLToPath } from 'url';
|
|
@@ -51,6 +51,65 @@ export function resolveBleRuntimePaths(options = {}) {
|
|
|
51
51
|
},
|
|
52
52
|
};
|
|
53
53
|
}
|
|
54
|
+
// CPU types from <mach/machine.h>, CPU_ARCH_ABI64-tagged.
|
|
55
|
+
const CPU_TYPE_X86_64 = 0x01000007;
|
|
56
|
+
const CPU_TYPE_ARM64 = 0x0100000c;
|
|
57
|
+
/**
|
|
58
|
+
* Best-effort Mach-O CPU-type probe (thin and fat headers). Returns null when
|
|
59
|
+
* the file is unreadable or not recognizably Mach-O — never a claim.
|
|
60
|
+
*/
|
|
61
|
+
function machOCpuTypes(path) {
|
|
62
|
+
let buf;
|
|
63
|
+
try {
|
|
64
|
+
buf = readFileSync(path); // follows the venv's bin/python symlink chain
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
if (buf.length < 8)
|
|
70
|
+
return null;
|
|
71
|
+
const magicLE = buf.readUInt32LE(0);
|
|
72
|
+
if (magicLE === 0xfeedfacf || magicLE === 0xfeedface)
|
|
73
|
+
return [buf.readUInt32LE(4)];
|
|
74
|
+
const magicBE = buf.readUInt32BE(0);
|
|
75
|
+
if (magicBE === 0xcafebabe || magicBE === 0xcafebabf) {
|
|
76
|
+
// Fat headers are big-endian. Java class files share FAT_MAGIC; their
|
|
77
|
+
// version field lands where nfat_arch does and is always > 32, so the
|
|
78
|
+
// bound doubles as the disambiguator.
|
|
79
|
+
const count = buf.readUInt32BE(4);
|
|
80
|
+
if (count === 0 || count > 32)
|
|
81
|
+
return null;
|
|
82
|
+
const entrySize = magicBE === 0xcafebabf ? 32 : 20;
|
|
83
|
+
const types = [];
|
|
84
|
+
for (let i = 0; i < count; i++) {
|
|
85
|
+
const off = 8 + i * entrySize;
|
|
86
|
+
if (off + 4 > buf.length)
|
|
87
|
+
return null;
|
|
88
|
+
types.push(buf.readUInt32BE(off));
|
|
89
|
+
}
|
|
90
|
+
return types;
|
|
91
|
+
}
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Non-null when `python` is an x86_64-only interpreter on an arm64 Mac — a
|
|
96
|
+
* Rosetta leftover (e.g. a venv created by an Intel-Homebrew python that
|
|
97
|
+
* survived a machine migration). It imports everything fine under Rosetta, so
|
|
98
|
+
* a dependency probe cannot catch it; only the binary itself says. Such an
|
|
99
|
+
* environment must be rebuilt, not used: every BLE client it runs is a
|
|
100
|
+
* translated process, and its native wheels are the wrong architecture for
|
|
101
|
+
* any native interpreter that replaces it.
|
|
102
|
+
*/
|
|
103
|
+
function rosettaInterpreterReason(python, platform, hostArch) {
|
|
104
|
+
if (platform !== 'darwin' || hostArch !== 'arm64')
|
|
105
|
+
return null;
|
|
106
|
+
const types = machOCpuTypes(python);
|
|
107
|
+
if (!types || types.includes(CPU_TYPE_ARM64))
|
|
108
|
+
return null;
|
|
109
|
+
if (!types.includes(CPU_TYPE_X86_64))
|
|
110
|
+
return null; // unknown arch — no claim
|
|
111
|
+
return `${python} is an x86_64 (Rosetta) Python on this arm64 Mac`;
|
|
112
|
+
}
|
|
54
113
|
function packagedAssetsMissing(paths) {
|
|
55
114
|
return [paths.requirements, ...Object.values(paths.scripts)].filter((path) => !existsSync(path));
|
|
56
115
|
}
|
|
@@ -74,6 +133,8 @@ function readyMarkerMatches(paths) {
|
|
|
74
133
|
*/
|
|
75
134
|
export function getBleRuntimeStatus(options = {}) {
|
|
76
135
|
const env = options.env ?? process.env;
|
|
136
|
+
const platform = options.platform ?? process.platform;
|
|
137
|
+
const hostArch = options.hostArch ?? process.arch;
|
|
77
138
|
const paths = resolveBleRuntimePaths(options);
|
|
78
139
|
const missing = packagedAssetsMissing(paths);
|
|
79
140
|
if (missing.length > 0) {
|
|
@@ -90,12 +151,18 @@ export function getBleRuntimeStatus(options = {}) {
|
|
|
90
151
|
: { ready: false, paths, reason: `AGENTDECK_BLE_PYTHON does not exist: ${override}` };
|
|
91
152
|
}
|
|
92
153
|
if (existsSync(paths.venvPython) && readyMarkerMatches(paths)) {
|
|
93
|
-
|
|
154
|
+
const rosetta = rosettaInterpreterReason(paths.venvPython, platform, hostArch);
|
|
155
|
+
if (!rosetta)
|
|
156
|
+
return { ready: true, python: paths.venvPython, paths };
|
|
157
|
+
return { ready: false, paths, reason: `${rosetta}; run \`agentdeck ble setup\` to rebuild it` };
|
|
94
158
|
}
|
|
95
159
|
// Preserve source-checkout and pre-1.0.4 manual environments. An explicit BLE
|
|
96
160
|
// command will import-probe this interpreter before using it.
|
|
97
161
|
if (existsSync(paths.legacyPython)) {
|
|
98
|
-
|
|
162
|
+
const rosetta = rosettaInterpreterReason(paths.legacyPython, platform, hostArch);
|
|
163
|
+
if (!rosetta)
|
|
164
|
+
return { ready: true, python: paths.legacyPython, paths };
|
|
165
|
+
return { ready: false, paths, reason: `${rosetta}; run \`agentdeck ble setup\` to rebuild it` };
|
|
99
166
|
}
|
|
100
167
|
return {
|
|
101
168
|
ready: false,
|
|
@@ -120,7 +187,7 @@ function dependencyProbe(run, python) {
|
|
|
120
187
|
'import bleak; import PIL; import idotmatrix',
|
|
121
188
|
]);
|
|
122
189
|
}
|
|
123
|
-
function systemPython(run, platform) {
|
|
190
|
+
function systemPython(run, platform, hostArch) {
|
|
124
191
|
const candidates = platform === 'win32'
|
|
125
192
|
? [
|
|
126
193
|
{ command: 'py', prefix: ['-3'] },
|
|
@@ -128,6 +195,14 @@ function systemPython(run, platform) {
|
|
|
128
195
|
{ command: 'python', prefix: [] },
|
|
129
196
|
]
|
|
130
197
|
: [
|
|
198
|
+
// On an arm64 Mac a bare `python3` can resolve to a leftover Intel
|
|
199
|
+
// Homebrew install (/usr/local precedes /opt/homebrew in the default
|
|
200
|
+
// /etc/paths order for daemon-spawned shells), building the whole BLE
|
|
201
|
+
// venv on Rosetta. Probe the native Homebrew interpreter first; it is
|
|
202
|
+
// simply skipped where it does not exist.
|
|
203
|
+
...(platform === 'darwin' && hostArch === 'arm64'
|
|
204
|
+
? [{ command: '/opt/homebrew/bin/python3', prefix: [] }]
|
|
205
|
+
: []),
|
|
131
206
|
{ command: 'python3', prefix: [] },
|
|
132
207
|
{ command: 'python', prefix: [] },
|
|
133
208
|
];
|
|
@@ -149,6 +224,7 @@ function systemPython(run, platform) {
|
|
|
149
224
|
export function ensureBleRuntime(options = {}) {
|
|
150
225
|
const env = options.env ?? process.env;
|
|
151
226
|
const platform = options.platform ?? process.platform;
|
|
227
|
+
const hostArch = options.hostArch ?? process.arch;
|
|
152
228
|
const paths = resolveBleRuntimePaths(options);
|
|
153
229
|
const log = options.log ?? (() => { });
|
|
154
230
|
const run = options.run ?? defaultRun;
|
|
@@ -168,7 +244,13 @@ export function ensureBleRuntime(options = {}) {
|
|
|
168
244
|
}
|
|
169
245
|
return { ready: true, python: override, paths };
|
|
170
246
|
}
|
|
171
|
-
|
|
247
|
+
// The Rosetta check precedes the dependency probe: a translated interpreter
|
|
248
|
+
// imports everything just fine, so probing it would accept exactly the
|
|
249
|
+
// environment we need to rebuild.
|
|
250
|
+
const venvRosetta = existsSync(paths.venvPython)
|
|
251
|
+
? rosettaInterpreterReason(paths.venvPython, platform, hostArch)
|
|
252
|
+
: null;
|
|
253
|
+
if (existsSync(paths.venvPython) && !venvRosetta && dependencyProbe(run, paths.venvPython)) {
|
|
172
254
|
mkdirSync(paths.runtimeDir, { recursive: true });
|
|
173
255
|
writeFileSync(paths.readyMarker, JSON.stringify({
|
|
174
256
|
requirementsSha256: requirementsDigest(paths),
|
|
@@ -176,13 +258,25 @@ export function ensureBleRuntime(options = {}) {
|
|
|
176
258
|
}, null, 2) + '\n');
|
|
177
259
|
return { ready: true, python: paths.venvPython, paths };
|
|
178
260
|
}
|
|
179
|
-
|
|
261
|
+
const legacyRosetta = existsSync(paths.legacyPython)
|
|
262
|
+
? rosettaInterpreterReason(paths.legacyPython, platform, hostArch)
|
|
263
|
+
: null;
|
|
264
|
+
if (legacyRosetta)
|
|
265
|
+
log(`Ignoring legacy BLE venv: ${legacyRosetta}.`);
|
|
266
|
+
if (existsSync(paths.legacyPython) && !legacyRosetta && dependencyProbe(run, paths.legacyPython)) {
|
|
180
267
|
return { ready: true, python: paths.legacyPython, paths };
|
|
181
268
|
}
|
|
182
|
-
const python = systemPython(run, platform);
|
|
269
|
+
const python = systemPython(run, platform, hostArch);
|
|
183
270
|
if (!python) {
|
|
184
271
|
throw new Error('Python 3.10 or newer is required for optional BLE device support.');
|
|
185
272
|
}
|
|
273
|
+
if (venvRosetta) {
|
|
274
|
+
// `python -m venv` over an existing venv relinks the interpreter but keeps
|
|
275
|
+
// site-packages — native wheels compiled for the wrong architecture. Start
|
|
276
|
+
// clean instead.
|
|
277
|
+
log(`Rebuilding BLE venv: ${venvRosetta}.`);
|
|
278
|
+
rmSync(paths.venvDir, { recursive: true, force: true });
|
|
279
|
+
}
|
|
186
280
|
mkdirSync(paths.runtimeDir, { recursive: true });
|
|
187
281
|
log(`Preparing optional BLE support in ${paths.runtimeDir}...`);
|
|
188
282
|
const create = run(python.command, [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"python-ble-runtime.js","sourceRoot":"","sources":["../src/python-ble-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAyB,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAkDpC,SAAS,kBAAkB;IACzB,2CAA2C;IAC3C,4CAA4C;IAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,YAAY,CAAC,OAAe,EAAE,QAAyB;IAC9D,OAAO,QAAQ,KAAK,OAAO;QACzB,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,YAAY,CAAC;QACxC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,UAA6B,EAAE;IACpE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;IACtD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,kBAAkB,EAAE,CAAC;IAChE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,GAAG,CAAC,kBAAkB,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;IAC3F,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACzC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAC7C,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAEvD,OAAO;QACL,WAAW;QACX,OAAO;QACP,UAAU;QACV,OAAO;QACP,UAAU,EAAE,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC;QAC3C,YAAY,EAAE,YAAY,CAAC,aAAa,EAAE,QAAQ,CAAC;QACnD,YAAY,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,sBAAsB,CAAC;QACjE,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC;QAC3C,OAAO,EAAE;YACP,cAAc,EAAE,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,SAAS,CAAC;YAC1D,kBAAkB,EAAE,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,uBAAuB,CAAC;YAC5E,oBAAoB,EAAE,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,eAAe,CAAC;YACtE,cAAc,EAAE,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,SAAS,CAAC;YAC1D,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,aAAa,CAAC;YACxD,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,aAAa,CAAC;YACxD,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,uBAAuB,CAAC;SACjE;KACF,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAsB;IACnD,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AACnG,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAsB;IAChD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrF,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAsB;IAChD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC;QAAE,OAAO,KAAK,CAAC;IACjD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,CAAoC,CAAC;QACtG,OAAO,MAAM,CAAC,kBAAkB,KAAK,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAA6B,EAAE;IACjE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACvC,MAAM,KAAK,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC7C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK;YACL,MAAM,EAAE,0BAA0B,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;SAC/G,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,CAAC,oBAAoB,CAAC;IAC1C,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,UAAU,CAAC,QAAQ,CAAC;YACzB,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE;YAC1C,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,wCAAwC,QAAQ,EAAE,EAAE,CAAC;IAC1F,CAAC;IAED,IAAI,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9D,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC;IAC1D,CAAC;IAED,8EAA8E;IAC9E,8DAA8D;IAC9D,IAAI,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;QACnC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,EAAE,CAAC;IAC5D,CAAC;IAED,OAAO;QACL,KAAK,EAAE,KAAK;QACZ,KAAK;QACL,MAAM,EAAE,sCAAsC;KAC/C,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,OAAe,EAAE,IAAc,EAAE,OAA0B;IAC7E,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3E,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CACvB,GAAqB,EACrB,OAAe,EACf,IAAc,EACd,UAA4B,EAAE;IAE9B,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,QAAQ,EAAE,CAAC,CAAC;IACpF,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,eAAe,CAAC,GAAqB,EAAE,MAAc;IAC5D,OAAO,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE;QACnC,IAAI;QACJ,6CAA6C;KAC9C,CAAC,CAAC;AACL,CAAC;AAED,SAAS,YAAY,CACnB,GAAqB,EACrB,QAAyB;IAEzB,MAAM,UAAU,GAAG,QAAQ,KAAK,OAAO;QACrC,CAAC,CAAC;YACE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;YACjC,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE;YAClC,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE;SAClC;QACH,CAAC,CAAC;YACE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE;YAClC,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE;SAClC,CAAC;IAEN,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,gBAAgB,CAAC,GAAG,EAAE,SAAS,CAAC,OAAO,EAAE;YAC3C,GAAG,SAAS,CAAC,MAAM;YACnB,IAAI;YACJ,uEAAuE;SACxE,CAAC,EAAE,CAAC;YACH,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAA6B,EAAE;IAC9D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;IACtD,MAAM,KAAK,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,UAAU,CAAC;IACtC,MAAM,OAAO,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAE7C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,kEAAkE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;YACxF,6CAA6C,CAC9C,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,CAAC,oBAAoB,CAAC;IAC1C,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,wCAAwC,QAAQ,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CACb,qEAAqE,QAAQ,IAAI;gBACjF,iCAAiC,KAAK,CAAC,YAAY,GAAG,CACvD,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAClD,CAAC;IAED,IAAI,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3E,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACjD,aAAa,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC;YAC9C,kBAAkB,EAAE,kBAAkB,CAAC,KAAK,CAAC;YAC7C,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACrC,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACpB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC;IAC1D,CAAC;IAED,IAAI,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/E,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,EAAE,CAAC;IAC5D,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;IACvF,CAAC;IAED,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,GAAG,CAAC,qCAAqC,KAAK,CAAC,UAAU,KAAK,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE;QACjC,GAAG,MAAM,CAAC,MAAM;QAChB,IAAI;QACJ,MAAM;QACN,KAAK,CAAC,OAAO;KACd,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACzB,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QACzE,MAAM,IAAI,KAAK,CAAC,kDAAkD,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;IACtF,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE;QACpC,IAAI;QACJ,KAAK;QACL,SAAS;QACT,6BAA6B;QAC7B,eAAe;QACf,KAAK,CAAC,YAAY;KACnB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACzB,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QACrF,MAAM,IAAI,KAAK,CACb,kFAAkF;YAClF,cAAc,KAAK,CAAC,YAAY,GAAG,CACpC,CAAC;IACJ,CAAC;IAED,aAAa,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC;QAC9C,kBAAkB,EAAE,kBAAkB,CAAC,KAAK,CAAC;QAC7C,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACrC,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACpB,GAAG,CAAC,gCAAgC,CAAC,CAAC;IACtC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC;AAC1D,CAAC"}
|
|
1
|
+
{"version":3,"file":"python-ble-runtime.js","sourceRoot":"","sources":["../src/python-ble-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type SessionEntry } from './session-registry.js';
|
|
2
2
|
import type { AgentType } from './types.js';
|
|
3
|
-
import { type PromptOption } from '@agentdeck/shared';
|
|
3
|
+
import { type PromptOption, type SubagentSummary } from '@agentdeck/shared';
|
|
4
4
|
export interface EnrichedSession {
|
|
5
5
|
id: string;
|
|
6
6
|
port: number;
|
|
@@ -28,6 +28,10 @@ export interface EnrichedSession {
|
|
|
28
28
|
requestId?: string;
|
|
29
29
|
promptType?: 'yes_no' | 'yes_no_always' | 'multi_select' | 'diff_review';
|
|
30
30
|
options?: PromptOption[];
|
|
31
|
+
/** A device press on `options` reaches this session's real answer path
|
|
32
|
+
* (observed steering, or the OpenClaw Gateway's approval RPC). Without it the
|
|
33
|
+
* option cells render display-only. Mirrors `SessionInfo.liveAnswerable`. */
|
|
34
|
+
liveAnswerable?: boolean;
|
|
31
35
|
/** Seconds since startedAt — derived at broadcast time so NTP-less devices (ESP32) render elapsed per session. */
|
|
32
36
|
elapsedSec?: number;
|
|
33
37
|
/** Daemon-synthesized "what is this agent doing right now" one-liner (heuristic,
|
|
@@ -41,6 +45,10 @@ export interface EnrichedSession {
|
|
|
41
45
|
lastEventTask?: string;
|
|
42
46
|
/** Host-local "HH:MM" of that row (boards are NTP-UTC or clockless). */
|
|
43
47
|
lastEventHm?: string;
|
|
48
|
+
/** Live child-agent census (see `SubagentSummary`). A second axis to `state`:
|
|
49
|
+
* a parent whose turn closed is genuinely `idle` while its subagents keep
|
|
50
|
+
* running, and without this the deck says "idle" through the whole fan-out. */
|
|
51
|
+
subagents?: SubagentSummary;
|
|
44
52
|
}
|
|
45
53
|
/** Update push-channel cache (called from daemon-server when session_push_state arrives) */
|
|
46
54
|
export declare function updatePushState(sessionId: string, state: string, modelName?: string, effortLevel?: string, permissionMode?: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-aggregator.d.ts","sourceRoot":"","sources":["../src/session-aggregator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC5F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,
|
|
1
|
+
{"version":3,"file":"session-aggregator.d.ts","sourceRoot":"","sources":["../src/session-aggregator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { listActive as listActiveSessions } from './session-registry.js';
|
|
2
|
-
import { sortSessions, sanitizeWeightForWire } from '@agentdeck/shared';
|
|
2
|
+
import { sortSessions, sanitizeWeightForWire, } from '@agentdeck/shared';
|
|
3
3
|
/** Cache last-known sibling state to avoid propagating undefined on transient fetch failures.
|
|
4
4
|
* `updatedAt` bounds how long a vanished session may ride its last-known state: once the
|
|
5
5
|
* cache ages past LIVENESS_GRACE_MS without a successful probe/push, we stop treating it as
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-aggregator.js","sourceRoot":"","sources":["../src/session-aggregator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,kBAAkB,EAAqB,MAAM,uBAAuB,CAAC;AAE5F,OAAO,
|
|
1
|
+
{"version":3,"file":"session-aggregator.js","sourceRoot":"","sources":["../src/session-aggregator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { type LocalPeerOwnership } from './auth.js';
|
|
2
|
+
/** Allow tests to override the data directory via env var */
|
|
3
|
+
export declare function getDataDir(): string;
|
|
1
4
|
/**
|
|
2
5
|
* Ordered list of data directories this process should READ from.
|
|
3
6
|
*
|
|
@@ -29,8 +32,39 @@ export declare function getCandidateDaemonJsonPaths(): string[];
|
|
|
29
32
|
* candidate dir (see `latestTimelinePath`), but the daemon writes only here. */
|
|
30
33
|
export declare function getOwnTimelineFile(): string;
|
|
31
34
|
export declare const DAEMON_DEFAULT_PORT = 9120;
|
|
32
|
-
/** Documented daemon port window (docs/daemon.md)
|
|
33
|
-
export declare const
|
|
35
|
+
/** Documented daemon port window (docs/daemon.md). */
|
|
36
|
+
export declare const DEFAULT_DAEMON_PORT_WINDOW: readonly [number, number];
|
|
37
|
+
/**
|
|
38
|
+
* Resolve the port window this process works in.
|
|
39
|
+
*
|
|
40
|
+
* The window is a cross-implementation discovery contract, so the default is
|
|
41
|
+
* fixed and every real client scans it. It is overridable ONLY to make an
|
|
42
|
+
* isolated daemon testable: the singleton guard sweeps this range and concedes
|
|
43
|
+
* to any live daemon it finds, which is correct for the machine's one real
|
|
44
|
+
* daemon and is exactly what made a throwaway daemon impossible to start —
|
|
45
|
+
* neither `AGENTDECK_DATA_DIR` nor an explicit `-p` moved the sweep off 9120,
|
|
46
|
+
* so the only way to exercise a posture was to restart the production daemon
|
|
47
|
+
* into it.
|
|
48
|
+
*
|
|
49
|
+
* A daemon started outside the default window is invisible to clients that
|
|
50
|
+
* scan the documented range. That is the point for a test daemon and a
|
|
51
|
+
* footgun for anything else, so `daemon start` says so out loud when the
|
|
52
|
+
* window is not the default.
|
|
53
|
+
*
|
|
54
|
+
* Format: `AGENTDECK_PORT_WINDOW=9200-9209`. Anything unparseable, inverted,
|
|
55
|
+
* or outside 1024–65535 is ignored in favour of the default — a malformed
|
|
56
|
+
* window must not silently disable the guard that prevents two live daemons.
|
|
57
|
+
*/
|
|
58
|
+
export declare function resolveDaemonPortWindow(raw?: string | undefined): readonly [number, number];
|
|
59
|
+
/** True when this process is working in the documented window. */
|
|
60
|
+
export declare function isDefaultDaemonPortWindow(window?: readonly [number, number]): boolean;
|
|
61
|
+
/** Daemon port window for THIS process — the default unless overridden.
|
|
62
|
+
*
|
|
63
|
+
* Resolved per call, not once at import: `daemon start --port-window` sets the
|
|
64
|
+
* env inside its action, which runs long after this module is imported, so a
|
|
65
|
+
* module-level constant would freeze the default and make the flag a no-op.
|
|
66
|
+
* Reading an env var a few dozen times during startup costs nothing. */
|
|
67
|
+
export declare function daemonPortWindow(): readonly [number, number];
|
|
34
68
|
export interface DaemonInfo {
|
|
35
69
|
port: number;
|
|
36
70
|
pid: number;
|
|
@@ -82,6 +116,20 @@ export declare function findExistingDaemon(): SessionEntry | null;
|
|
|
82
116
|
export declare function findAvailablePort(opts?: {
|
|
83
117
|
reserveDaemon?: boolean;
|
|
84
118
|
}): Promise<number>;
|
|
119
|
+
/**
|
|
120
|
+
* Why the window ran out, in the terms the user can act on.
|
|
121
|
+
*
|
|
122
|
+
* The old message said "Stop an existing session first", which names the wrong
|
|
123
|
+
* cause on a shared box: the ports this install can see in its own registry are
|
|
124
|
+
* only the ones it owns. Another OS user's daemon and sessions are invisible
|
|
125
|
+
* here — they show up as ports that simply refuse to bind — and telling that
|
|
126
|
+
* user to stop *their* sessions is advice that cannot work. Counting the two
|
|
127
|
+
* kinds separately is the cheapest honest distinction available without probing
|
|
128
|
+
* socket ownership, which needs a subprocess and is not portable.
|
|
129
|
+
*
|
|
130
|
+
* @internal Exported for the unit test.
|
|
131
|
+
*/
|
|
132
|
+
export declare function portExhaustionMessage(basePort: number, maxPort: number, mine: number, foreign: number): string;
|
|
85
133
|
/** Detect tmux session name if running inside tmux */
|
|
86
134
|
export declare function detectTmuxSession(): string | undefined;
|
|
87
135
|
/** Write daemon.json so clients can discover the daemon port */
|
|
@@ -125,6 +173,10 @@ export declare function probeDaemonHealth(port: number): Promise<{
|
|
|
125
173
|
isSwift?: boolean;
|
|
126
174
|
sameSocketControl?: boolean;
|
|
127
175
|
pairingToken?: string;
|
|
176
|
+
posture?: {
|
|
177
|
+
loopbackOnly?: boolean;
|
|
178
|
+
noDeviceModules?: boolean;
|
|
179
|
+
};
|
|
128
180
|
} | null>;
|
|
129
181
|
/**
|
|
130
182
|
* Sweep the daemon port window for live daemons that file-based discovery
|
|
@@ -199,8 +251,24 @@ export declare function findDaemonPort(): number | null;
|
|
|
199
251
|
*
|
|
200
252
|
* Returns `{ port, httpPort? }` for callers that need both (WS connects
|
|
201
253
|
* on `port`, hook HTTP posts target `httpPort ?? port`).
|
|
254
|
+
*
|
|
255
|
+
* The scan half is the one place a session can attach to a daemon nobody told
|
|
256
|
+
* it about, so it is also the one place it can attach to a **coworker's**
|
|
257
|
+
* daemon: on a shared host the first `mode: 'daemon'` answer in the window may
|
|
258
|
+
* belong to another OS user, and registering there hands them a session their
|
|
259
|
+
* Stream Deck can focus and type into. A port owned by another user is skipped
|
|
260
|
+
* and named, because refuse-and-explain is the right failure — the registry
|
|
261
|
+
* half needs no such check, since `daemon.json` is resolved per user through
|
|
262
|
+
* `$HOME` and already answers with this user's own daemon.
|
|
202
263
|
*/
|
|
203
|
-
export declare function findDaemonPortAsync(
|
|
264
|
+
export declare function findDaemonPortAsync(deps?: {
|
|
265
|
+
probe?: (port: number) => Promise<{
|
|
266
|
+
mode?: string;
|
|
267
|
+
pid?: number;
|
|
268
|
+
sameSocketControl?: boolean;
|
|
269
|
+
} | null>;
|
|
270
|
+
ownership?: (pid: number | null | undefined) => LocalPeerOwnership;
|
|
271
|
+
}): Promise<{
|
|
204
272
|
port: number;
|
|
205
273
|
httpPort?: number;
|
|
206
274
|
sameSocketControl?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-registry.d.ts","sourceRoot":"","sources":["../src/session-registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session-registry.d.ts","sourceRoot":"","sources":["../src/session-registry.ts"],"names":[],"mappings":"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"}
|
package/dist/session-registry.js
CHANGED
|
@@ -5,9 +5,10 @@ import { join } from 'path';
|
|
|
5
5
|
import { homedir } from 'os';
|
|
6
6
|
import { randomUUID } from 'crypto';
|
|
7
7
|
import http from 'http';
|
|
8
|
-
import { debug, logError } from './logger.js';
|
|
8
|
+
import { debug, log, logError } from './logger.js';
|
|
9
|
+
import { localPeerOwnership } from './auth.js';
|
|
9
10
|
/** Allow tests to override the data directory via env var */
|
|
10
|
-
function getDataDir() {
|
|
11
|
+
export function getDataDir() {
|
|
11
12
|
return process.env.AGENTDECK_DATA_DIR || join(homedir(), '.agentdeck');
|
|
12
13
|
}
|
|
13
14
|
/**
|
|
@@ -59,10 +60,57 @@ function getSessionsFile() { return join(getDataDir(), 'sessions.json'); }
|
|
|
59
60
|
export function getOwnTimelineFile() { return join(getDataDir(), 'timeline.json'); }
|
|
60
61
|
function getDaemonFile() { return join(getDataDir(), 'daemon.json'); }
|
|
61
62
|
export const DAEMON_DEFAULT_PORT = 9120;
|
|
62
|
-
|
|
63
|
-
const
|
|
64
|
-
/**
|
|
65
|
-
|
|
63
|
+
/** Documented daemon port window (docs/daemon.md). */
|
|
64
|
+
export const DEFAULT_DAEMON_PORT_WINDOW = [9120, 9139];
|
|
65
|
+
/**
|
|
66
|
+
* Resolve the port window this process works in.
|
|
67
|
+
*
|
|
68
|
+
* The window is a cross-implementation discovery contract, so the default is
|
|
69
|
+
* fixed and every real client scans it. It is overridable ONLY to make an
|
|
70
|
+
* isolated daemon testable: the singleton guard sweeps this range and concedes
|
|
71
|
+
* to any live daemon it finds, which is correct for the machine's one real
|
|
72
|
+
* daemon and is exactly what made a throwaway daemon impossible to start —
|
|
73
|
+
* neither `AGENTDECK_DATA_DIR` nor an explicit `-p` moved the sweep off 9120,
|
|
74
|
+
* so the only way to exercise a posture was to restart the production daemon
|
|
75
|
+
* into it.
|
|
76
|
+
*
|
|
77
|
+
* A daemon started outside the default window is invisible to clients that
|
|
78
|
+
* scan the documented range. That is the point for a test daemon and a
|
|
79
|
+
* footgun for anything else, so `daemon start` says so out loud when the
|
|
80
|
+
* window is not the default.
|
|
81
|
+
*
|
|
82
|
+
* Format: `AGENTDECK_PORT_WINDOW=9200-9209`. Anything unparseable, inverted,
|
|
83
|
+
* or outside 1024–65535 is ignored in favour of the default — a malformed
|
|
84
|
+
* window must not silently disable the guard that prevents two live daemons.
|
|
85
|
+
*/
|
|
86
|
+
export function resolveDaemonPortWindow(raw = process.env.AGENTDECK_PORT_WINDOW) {
|
|
87
|
+
const text = raw?.trim();
|
|
88
|
+
if (!text)
|
|
89
|
+
return DEFAULT_DAEMON_PORT_WINDOW;
|
|
90
|
+
const match = /^(\d{4,5})\s*-\s*(\d{4,5})$/.exec(text);
|
|
91
|
+
if (!match)
|
|
92
|
+
return DEFAULT_DAEMON_PORT_WINDOW;
|
|
93
|
+
const lo = Number(match[1]);
|
|
94
|
+
const hi = Number(match[2]);
|
|
95
|
+
if (!Number.isInteger(lo) || !Number.isInteger(hi))
|
|
96
|
+
return DEFAULT_DAEMON_PORT_WINDOW;
|
|
97
|
+
if (lo < 1024 || hi > 65535 || hi < lo)
|
|
98
|
+
return DEFAULT_DAEMON_PORT_WINDOW;
|
|
99
|
+
return [lo, hi];
|
|
100
|
+
}
|
|
101
|
+
/** True when this process is working in the documented window. */
|
|
102
|
+
export function isDefaultDaemonPortWindow(window = daemonPortWindow()) {
|
|
103
|
+
return window[0] === DEFAULT_DAEMON_PORT_WINDOW[0] && window[1] === DEFAULT_DAEMON_PORT_WINDOW[1];
|
|
104
|
+
}
|
|
105
|
+
/** Daemon port window for THIS process — the default unless overridden.
|
|
106
|
+
*
|
|
107
|
+
* Resolved per call, not once at import: `daemon start --port-window` sets the
|
|
108
|
+
* env inside its action, which runs long after this module is imported, so a
|
|
109
|
+
* module-level constant would freeze the default and make the flag a no-op.
|
|
110
|
+
* Reading an env var a few dozen times during startup costs nothing. */
|
|
111
|
+
export function daemonPortWindow() {
|
|
112
|
+
return resolveDaemonPortWindow();
|
|
113
|
+
}
|
|
66
114
|
function ensureDir() {
|
|
67
115
|
const dir = getDataDir();
|
|
68
116
|
if (!existsSync(dir)) {
|
|
@@ -199,14 +247,51 @@ export async function findAvailablePort(opts) {
|
|
|
199
247
|
const sessions = listActive();
|
|
200
248
|
const usedPorts = new Set(sessions.map((s) => s.port));
|
|
201
249
|
// Session bridges start from BASE_PORT+1 to reserve 9120 for the daemon.
|
|
202
|
-
const
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
250
|
+
const [basePort, maxPort] = daemonPortWindow();
|
|
251
|
+
const startPort = opts?.reserveDaemon ? basePort + 1 : basePort;
|
|
252
|
+
let mine = 0;
|
|
253
|
+
let foreign = 0;
|
|
254
|
+
for (let port = startPort; port <= maxPort; port++) {
|
|
255
|
+
if (usedPorts.has(port)) {
|
|
256
|
+
mine++;
|
|
257
|
+
continue;
|
|
206
258
|
}
|
|
259
|
+
if (await isPortFree(port))
|
|
260
|
+
return port;
|
|
261
|
+
foreign++;
|
|
207
262
|
}
|
|
208
|
-
// All ports exhausted — throw instead of silently colliding
|
|
209
|
-
throw new Error(
|
|
263
|
+
// All ports exhausted — throw instead of silently colliding.
|
|
264
|
+
throw new Error(portExhaustionMessage(basePort, maxPort, mine, foreign));
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Why the window ran out, in the terms the user can act on.
|
|
268
|
+
*
|
|
269
|
+
* The old message said "Stop an existing session first", which names the wrong
|
|
270
|
+
* cause on a shared box: the ports this install can see in its own registry are
|
|
271
|
+
* only the ones it owns. Another OS user's daemon and sessions are invisible
|
|
272
|
+
* here — they show up as ports that simply refuse to bind — and telling that
|
|
273
|
+
* user to stop *their* sessions is advice that cannot work. Counting the two
|
|
274
|
+
* kinds separately is the cheapest honest distinction available without probing
|
|
275
|
+
* socket ownership, which needs a subprocess and is not portable.
|
|
276
|
+
*
|
|
277
|
+
* @internal Exported for the unit test.
|
|
278
|
+
*/
|
|
279
|
+
export function portExhaustionMessage(basePort, maxPort, mine, foreign) {
|
|
280
|
+
const parts = [`All AgentDeck ports (${basePort}–${maxPort}) are in use`];
|
|
281
|
+
const detail = [];
|
|
282
|
+
if (mine > 0)
|
|
283
|
+
detail.push(`${mine} held by this install's own sessions`);
|
|
284
|
+
if (foreign > 0)
|
|
285
|
+
detail.push(`${foreign} by processes outside its registry (another user's AgentDeck, or unrelated software)`);
|
|
286
|
+
if (detail.length)
|
|
287
|
+
parts.push(`: ${detail.join(', ')}`);
|
|
288
|
+
parts.push('.');
|
|
289
|
+
if (mine > 0)
|
|
290
|
+
parts.push(" Stop an existing session, or");
|
|
291
|
+
else
|
|
292
|
+
parts.push(' Nothing here can free those ports —');
|
|
293
|
+
parts.push(` give this install its own window with AGENTDECK_PORT_WINDOW=${maxPort + 1}-${maxPort + 20}.`);
|
|
294
|
+
return parts.join('');
|
|
210
295
|
}
|
|
211
296
|
/** Detect tmux session name if running inside tmux */
|
|
212
297
|
export function detectTmuxSession() {
|
|
@@ -350,7 +435,7 @@ export function probeDaemonHealth(port) {
|
|
|
350
435
|
* Probes all window ports concurrently (localhost refusals resolve instantly)
|
|
351
436
|
* and returns every occupant whose `/health` reports `mode: 'daemon'`.
|
|
352
437
|
*/
|
|
353
|
-
export async function scanDaemonPortWindow(skip = new Set(), window =
|
|
438
|
+
export async function scanDaemonPortWindow(skip = new Set(), window = daemonPortWindow()) {
|
|
354
439
|
const ports = [];
|
|
355
440
|
for (let p = window[0]; p <= window[1]; p++) {
|
|
356
441
|
if (!skip.has(p))
|
|
@@ -485,13 +570,24 @@ export function findDaemonPort() {
|
|
|
485
570
|
*
|
|
486
571
|
* Returns `{ port, httpPort? }` for callers that need both (WS connects
|
|
487
572
|
* on `port`, hook HTTP posts target `httpPort ?? port`).
|
|
573
|
+
*
|
|
574
|
+
* The scan half is the one place a session can attach to a daemon nobody told
|
|
575
|
+
* it about, so it is also the one place it can attach to a **coworker's**
|
|
576
|
+
* daemon: on a shared host the first `mode: 'daemon'` answer in the window may
|
|
577
|
+
* belong to another OS user, and registering there hands them a session their
|
|
578
|
+
* Stream Deck can focus and type into. A port owned by another user is skipped
|
|
579
|
+
* and named, because refuse-and-explain is the right failure — the registry
|
|
580
|
+
* half needs no such check, since `daemon.json` is resolved per user through
|
|
581
|
+
* `$HOME` and already answers with this user's own daemon.
|
|
488
582
|
*/
|
|
489
|
-
export async function findDaemonPortAsync() {
|
|
583
|
+
export async function findDaemonPortAsync(deps) {
|
|
584
|
+
const probe = deps?.probe ?? probeDaemonHealth;
|
|
585
|
+
const ownership = deps?.ownership ?? localPeerOwnership;
|
|
490
586
|
// 1. Registry first — matches the sync path.
|
|
491
587
|
const info = readDaemonInfo();
|
|
492
588
|
if (info) {
|
|
493
589
|
const probePort = info.httpPort ?? info.port;
|
|
494
|
-
const health = await
|
|
590
|
+
const health = await probe(probePort);
|
|
495
591
|
if (health?.mode === 'daemon') {
|
|
496
592
|
return { port: info.port, httpPort: info.httpPort, sameSocketControl: health.sameSocketControl === true };
|
|
497
593
|
}
|
|
@@ -501,11 +597,22 @@ export async function findDaemonPortAsync() {
|
|
|
501
597
|
// 2. Port scan fallback — covers the "App Store daemon is up but its
|
|
502
598
|
// daemon.json sits in a dir this process can't read" case. Narrow
|
|
503
599
|
// range (9120-9139) matches the documented daemon port window.
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
600
|
+
const [scanLo, scanHi] = daemonPortWindow();
|
|
601
|
+
const foreignPorts = [];
|
|
602
|
+
for (let p = scanLo; p <= scanHi; p++) {
|
|
603
|
+
const health = await probe(p);
|
|
604
|
+
if (health?.mode !== 'daemon')
|
|
605
|
+
continue;
|
|
606
|
+
if (ownership(health.pid) === 'other-user') {
|
|
607
|
+
foreignPorts.push(p);
|
|
608
|
+
continue;
|
|
508
609
|
}
|
|
610
|
+
return { port: p, sameSocketControl: health.sameSocketControl === true };
|
|
611
|
+
}
|
|
612
|
+
if (foreignPorts.length > 0) {
|
|
613
|
+
log(`No daemon of yours found. Port${foreignPorts.length > 1 ? 's' : ''} `
|
|
614
|
+
+ `${foreignPorts.join(', ')} ${foreignPorts.length > 1 ? 'are' : 'is'} held by another user's daemon `
|
|
615
|
+
+ `and will not be joined — start your own with 'agentdeck daemon start', or attach explicitly with --daemon-host.`);
|
|
509
616
|
}
|
|
510
617
|
return null;
|
|
511
618
|
}
|