@agentdeck/bridge 1.0.20 → 1.0.21
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/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 +398 -115
- package/dist/cli.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 +14 -1
- package/dist/daemon-server.d.ts.map +1 -1
- package/dist/daemon-server.js +297 -69
- 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/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +30 -11
- 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/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/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/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
package/dist/mdns-discover.js
CHANGED
|
@@ -10,8 +10,46 @@
|
|
|
10
10
|
* local-only flow never imports this module.
|
|
11
11
|
*/
|
|
12
12
|
import Bonjour from 'bonjour-service';
|
|
13
|
+
import { userInfo } from 'node:os';
|
|
14
|
+
import { mdnsUserTag } from '@agentdeck/shared';
|
|
13
15
|
import { debug } from './logger.js';
|
|
14
16
|
import { probeHealthAt } from './session-registry.js';
|
|
17
|
+
/** This process's own mDNS user tag — the value its daemon would advertise. */
|
|
18
|
+
function selfUserTag() {
|
|
19
|
+
return mdnsUserTag(typeof process.getuid === 'function' ? process.getuid() : 0, userInfo().username);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Selection rank, lowest first. Callers take the head of the discovered list,
|
|
23
|
+
* so "first seen" WAS the entire identity filter — and on an office subnet the
|
|
24
|
+
* first answer is an arbitrary colleague's daemon
|
|
25
|
+
* (docs/ENTERPRISE-ROADMAP.md §2.2).
|
|
26
|
+
*/
|
|
27
|
+
export function daemonSelectionRank(d, opts) {
|
|
28
|
+
const selfTag = opts.selfTag ?? selfUserTag();
|
|
29
|
+
if (opts.hostHint && d.host === opts.hostHint)
|
|
30
|
+
return 0; // explicitly named
|
|
31
|
+
if (d.userTag && d.userTag === selfTag)
|
|
32
|
+
return 1; // ours
|
|
33
|
+
if (d.userTag)
|
|
34
|
+
return 2; // identified, someone else's
|
|
35
|
+
return 3; // predates the TXT keys
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Order discovered daemons by how likely each is to be the one this user meant.
|
|
39
|
+
*
|
|
40
|
+
* A preference, never a filter: attaching to another user's daemon across
|
|
41
|
+
* machines is a legitimate thing to ask for (it is what `--daemon-host` exists
|
|
42
|
+
* for), so a daemon is only ever demoted here, never dropped. Stable within a
|
|
43
|
+
* rank, and the comparator is three-way rather than a subtraction.
|
|
44
|
+
*/
|
|
45
|
+
export function sortDiscoveredDaemons(daemons, opts = {}) {
|
|
46
|
+
const selfTag = opts.selfTag ?? selfUserTag();
|
|
47
|
+
return [...daemons].sort((a, b) => {
|
|
48
|
+
const ra = daemonSelectionRank(a, { ...opts, selfTag });
|
|
49
|
+
const rb = daemonSelectionRank(b, { ...opts, selfTag });
|
|
50
|
+
return ra < rb ? -1 : ra > rb ? 1 : 0;
|
|
51
|
+
});
|
|
52
|
+
}
|
|
15
53
|
/** Reject addresses that can't be reached from another device. */
|
|
16
54
|
function isUsableAddress(addr) {
|
|
17
55
|
if (!addr)
|
|
@@ -60,7 +98,11 @@ export async function discoverDaemons(opts) {
|
|
|
60
98
|
const host = ipv4 ?? addrs[0] ?? txtStr(service.txt?.ip);
|
|
61
99
|
if (!host || !isUsableAddress(host))
|
|
62
100
|
return;
|
|
63
|
-
candidates.set(`${host}:${port}`, {
|
|
101
|
+
candidates.set(`${host}:${port}`, {
|
|
102
|
+
host, port, txtToken, project,
|
|
103
|
+
hostLabel: txtStr(service.txt?.host),
|
|
104
|
+
userTag: txtStr(service.txt?.user),
|
|
105
|
+
});
|
|
64
106
|
}
|
|
65
107
|
catch (err) {
|
|
66
108
|
debug('mDNS', `discover: bad service record ignored (${String(err)})`);
|
|
@@ -97,13 +139,24 @@ export async function discoverDaemons(opts) {
|
|
|
97
139
|
return;
|
|
98
140
|
}
|
|
99
141
|
const token = typeof health.pairingToken === 'string' ? health.pairingToken : c.txtToken;
|
|
100
|
-
confirmed.push({
|
|
142
|
+
confirmed.push({
|
|
143
|
+
host: c.host, port: c.port, token, projectName: c.project, sameSocketControl: true,
|
|
144
|
+
hostLabel: c.hostLabel, userTag: c.userTag,
|
|
145
|
+
});
|
|
101
146
|
}));
|
|
102
|
-
//
|
|
103
|
-
|
|
104
|
-
|
|
147
|
+
// Selection order, most specific first. Callers take the head, so "first
|
|
148
|
+
// seen" was the whole identity filter — on an office subnet that is an
|
|
149
|
+
// arbitrary colleague's daemon (docs/ENTERPRISE-ROADMAP.md §2.2).
|
|
150
|
+
//
|
|
151
|
+
// A preference, never a filter: attaching to another user's daemon across
|
|
152
|
+
// machines is a legitimate thing to ask for (it is what `--daemon-host`
|
|
153
|
+
// exists for), so a daemon is only ever demoted here, never dropped.
|
|
154
|
+
const selfTag = selfUserTag();
|
|
155
|
+
const ordered = sortDiscoveredDaemons(confirmed, { hostHint: opts?.hostHint, selfTag });
|
|
156
|
+
if (ordered.length > 1 && daemonSelectionRank(ordered[0], { selfTag }) >= 2) {
|
|
157
|
+
debug('mDNS', `discover: no daemon of this user found; head is ${ordered[0].host}:${ordered[0].port}`);
|
|
105
158
|
}
|
|
106
|
-
debug('mDNS', `discover: ${
|
|
107
|
-
return
|
|
159
|
+
debug('mDNS', `discover: ${ordered.length} daemon(s) on LAN`);
|
|
160
|
+
return ordered;
|
|
108
161
|
}
|
|
109
162
|
//# sourceMappingURL=mdns-discover.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mdns-discover.js","sourceRoot":"","sources":["../src/mdns-discover.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,OAAO,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"mdns-discover.js","sourceRoot":"","sources":["../src/mdns-discover.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,OAAO,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAiBtD,+EAA+E;AAC/E,SAAS,WAAW;IAClB,OAAO,WAAW,CAChB,OAAO,OAAO,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAC3D,QAAQ,EAAE,CAAC,QAAQ,CACpB,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,CAAmB,EACnB,IAA6C;IAE7C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,WAAW,EAAE,CAAC;IAC9C,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ;QAAE,OAAO,CAAC,CAAC,CAAC,mBAAmB;IAC5E,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO;QAAE,OAAO,CAAC,CAAC,CAAQ,OAAO;IAChE,IAAI,CAAC,CAAC,OAAO;QAAE,OAAO,CAAC,CAAC,CAAiC,6BAA6B;IACtF,OAAO,CAAC,CAAC,CAAgD,wBAAwB;AACnF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAA2B,EAC3B,OAAgD,EAAE;IAElD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,WAAW,EAAE,CAAC;IAC9C,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAChC,MAAM,EAAE,GAAG,mBAAmB,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACxD,MAAM,EAAE,GAAG,mBAAmB,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACxD,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,kEAAkE;AAClE,SAAS,eAAe,CAAC,IAAY;IACnC,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,IAAI,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC,CAAC,WAAW;IACxE,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC,CAAe,kBAAkB;IAC/E,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC,CAAsB,kBAAkB;IAC/E,OAAO,IAAI,CAAC;AACd,CAAC;AAED,kFAAkF;AAClF,SAAS,MAAM,CAAC,CAAU;IACxB,IAAI,CAAC,IAAI,IAAI;QAAE,OAAO,SAAS,CAAC;IAChC,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC;IACpC,IAAI,CAAC,YAAY,MAAM;QAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACpD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAgD;IACpF,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,IAAI,CAAC;IAC1C,MAAM,QAAQ,GAAG,IAAI,OAAO,EAAE,CAAC;IAC/B,oEAAoE;IACpE,MAAM,UAAU,GAAG,IAAI,GAAG,EAGtB,CAAC;IAEL,IAAI,CAAC;QACH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE;gBAC/D,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;oBAC/D,IAAI,CAAC,IAAI;wBAAE,OAAO;oBAClB,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;oBAC5C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;oBAC7C,sEAAsE;oBACtE,6EAA6E;oBAC7E,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;oBAChE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;oBACjD,MAAM,IAAI,GAAG,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;oBACzD,IAAI,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;wBAAE,OAAO;oBAC5C,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,EAAE;wBAChC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO;wBAC7B,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC;wBACpC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC;qBACnC,CAAC,CAAC;gBACL,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,KAAK,CAAC,MAAM,EAAE,yCAAyC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACzE,CAAC;YACH,CAAC,CAAC,CAAC;YACH,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,IAAI,CAAC;oBAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;gBAC9C,OAAO,EAAE,CAAC;YACZ,CAAC,EAAE,SAAS,CAAC,CAAC;YACd,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,IAAI,CAAC;YAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IACpD,CAAC;IAED,+EAA+E;IAC/E,6EAA6E;IAC7E,0EAA0E;IAC1E,6EAA6E;IAC7E,+DAA+D;IAC/D,MAAM,SAAS,GAAuB,EAAE,CAAC;IACzC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QACzD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,MAAM,EAAE,IAAI,KAAK,QAAQ;YAAE,OAAO;QACtC,IAAI,MAAM,CAAC,iBAAiB,KAAK,IAAI,EAAE,CAAC;YACtC,KAAK,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,oCAAoC,CAAC,CAAC;YACjF,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QACzF,SAAS,CAAC,IAAI,CAAC;YACb,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,iBAAiB,EAAE,IAAI;YAClF,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO;SAC3C,CAAC,CAAC;IACL,CAAC,CAAC,CAAC,CAAC;IAEJ,yEAAyE;IACzE,uEAAuE;IACvE,kEAAkE;IAClE,EAAE;IACF,0EAA0E;IAC1E,wEAAwE;IACxE,qEAAqE;IACrE,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAG,qBAAqB,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IACxF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5E,KAAK,CAAC,MAAM,EAAE,mDAAmD,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACzG,CAAC;IACD,KAAK,CAAC,MAAM,EAAE,aAAa,OAAO,CAAC,MAAM,mBAAmB,CAAC,CAAC;IAC9D,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/mdns.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mdns.d.ts","sourceRoot":"","sources":["../src/mdns.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mdns.d.ts","sourceRoot":"","sources":["../src/mdns.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAc5C;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB,QAAwD,CAAC;AAEvF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAcvE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAQ7C;AAKD;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,SAAS,GACnB,MAAM,IAAI,CAiJZ"}
|
package/dist/mdns.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import Bonjour from 'bonjour-service';
|
|
2
2
|
import { randomUUID } from 'node:crypto';
|
|
3
|
+
import { hostname, userInfo } from 'node:os';
|
|
3
4
|
import { debug, log } from './logger.js';
|
|
4
|
-
import { getLanIp } from '@agentdeck/shared';
|
|
5
|
+
import { getLanIp, buildMdnsInstanceName, mdnsUserTag, sanitizeMdnsLabel, MDNS_TXT_SCHEMA_VERSION, } from '@agentdeck/shared';
|
|
5
6
|
let instance = null;
|
|
6
7
|
const MDNS_RECOVERY_INTERVAL = 5_000; // 5s — tightens WiFi-change discovery gap (was 30s)
|
|
7
8
|
/**
|
|
@@ -116,19 +117,31 @@ export function advertiseBridge(port, projectName, agentType) {
|
|
|
116
117
|
? { interface: lanIp }
|
|
117
118
|
: undefined;
|
|
118
119
|
instance = new Bonjour(bonjourOpts);
|
|
120
|
+
// An instance name must be unique per network SEGMENT. `${project}-${port}`
|
|
121
|
+
// was the same string on every machine, so an office subnet had fifty
|
|
122
|
+
// daemons fighting over one name — and the conflict path here does not
|
|
123
|
+
// rename, it republishes every 5s forever. Host + user + port are the
|
|
124
|
+
// three ways two daemons on one segment legitimately differ.
|
|
125
|
+
const shortHostname = sanitizeMdnsLabel(hostname());
|
|
126
|
+
const userTag = mdnsUserTag(typeof process.getuid === 'function' ? process.getuid() : 0, userInfo().username);
|
|
119
127
|
const txt = {
|
|
120
128
|
project: projectName,
|
|
121
129
|
agent: agentType,
|
|
122
130
|
// TXT schema version — keep in lockstep with the Swift daemon's
|
|
123
131
|
// advertisement (apple/AgentDeck/Daemon/Modules/MdnsModule.swift) so
|
|
124
132
|
// clients see one contract regardless of which daemon owns the port.
|
|
125
|
-
v:
|
|
133
|
+
v: MDNS_TXT_SCHEMA_VERSION,
|
|
126
134
|
port: String(port),
|
|
135
|
+
// So a client can tell WHICH daemon this is without resolving and
|
|
136
|
+
// dialling it. `user` is a hash, never the account name — multicast is
|
|
137
|
+
// readable by everyone on the segment.
|
|
138
|
+
host: shortHostname,
|
|
139
|
+
user: userTag,
|
|
127
140
|
};
|
|
128
141
|
if (lanIp)
|
|
129
142
|
txt.ip = lanIp;
|
|
130
143
|
const service = instance.publish({
|
|
131
|
-
name:
|
|
144
|
+
name: buildMdnsInstanceName({ project: projectName, hostname: shortHostname, userTag, port }),
|
|
132
145
|
host: MDNS_SERVICE_HOST,
|
|
133
146
|
type: 'agentdeck',
|
|
134
147
|
port,
|
package/dist/mdns.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mdns.js","sourceRoot":"","sources":["../src/mdns.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"mdns.js","sourceRoot":"","sources":["../src/mdns.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adb-module.d.ts","sourceRoot":"","sources":["../../src/modules/adb-module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAI9D;;;GAGG;AACH,qBAAa,SAAU,YAAW,YAAY;IAC5C,QAAQ,CAAC,IAAI,SAAS;IACtB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,WAAW,CAA6B;IAE1C,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAa1D,KAAK,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"adb-module.d.ts","sourceRoot":"","sources":["../../src/modules/adb-module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAI9D;;;GAGG;AACH,qBAAa,SAAU,YAAW,YAAY;IAC5C,QAAQ,CAAC,IAAI,SAAS;IACtB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,WAAW,CAA6B;IAE1C,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAa1D,KAAK,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IASxC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAK5B"}
|
|
@@ -25,8 +25,11 @@ export class AdbModule {
|
|
|
25
25
|
}
|
|
26
26
|
async start(ctx) {
|
|
27
27
|
this.port = ctx.port;
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
// Loopback posture: USB-transport devices only. A TCP/mDNS adb device
|
|
29
|
+
// (`adb connect`, wireless debugging) would carry the tunnel over the LAN.
|
|
30
|
+
const opts = { usbOnly: ctx.loopbackOnly === true };
|
|
31
|
+
setupAdbReverse(ctx.port, opts);
|
|
32
|
+
this.stopPolling = startAdbReversePolling(ctx.port, opts);
|
|
30
33
|
}
|
|
31
34
|
async stop() {
|
|
32
35
|
this.stopPolling?.();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adb-module.js","sourceRoot":"","sources":["../../src/modules/adb-module.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC/F,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;;GAGG;AACH,MAAM,OAAO,SAAS;IACX,IAAI,GAAG,KAAK,CAAC;IACd,IAAI,GAAG,CAAC,CAAC;IACT,WAAW,GAAwB,IAAI,CAAC;IAEhD,KAAK,CAAC,cAAc,CAAC,MAAwB;QAC3C,IAAI,MAAM,KAAK,KAAK;YAAE,OAAO,KAAK,CAAC;QACnC,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QACjC,wEAAwE;QACxE,2DAA2D;QAC3D,IAAI,CAAC;YACH,QAAQ,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7E,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAkB;QAC5B,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACrB,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"adb-module.js","sourceRoot":"","sources":["../../src/modules/adb-module.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC/F,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;;GAGG;AACH,MAAM,OAAO,SAAS;IACX,IAAI,GAAG,KAAK,CAAC;IACd,IAAI,GAAG,CAAC,CAAC;IACT,WAAW,GAAwB,IAAI,CAAC;IAEhD,KAAK,CAAC,cAAc,CAAC,MAAwB;QAC3C,IAAI,MAAM,KAAK,KAAK;YAAE,OAAO,KAAK,CAAC;QACnC,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QACjC,wEAAwE;QACxE,2DAA2D;QAC3D,IAAI,CAAC;YACH,QAAQ,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7E,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAkB;QAC5B,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACrB,sEAAsE;QACtE,2EAA2E;QAC3E,MAAM,IAAI,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;QACpD,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,WAAW,GAAG,sBAAsB,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;CACF"}
|
package/dist/modules/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { DeviceModule, ModuleConfigs, BridgeContext } from './types.js';
|
|
2
2
|
import type { AgentType } from '../types.js';
|
|
3
|
-
export type { DeviceModule, ModuleConfigs, BridgeContext } from './types.js';
|
|
3
|
+
export type { DeviceModule, ModuleConfigs, ModuleName, BridgeContext } from './types.js';
|
|
4
|
+
export { MODULE_NAMES, allModulesOff } from './types.js';
|
|
4
5
|
export { MdnsModule } from './mdns-module.js';
|
|
5
6
|
export { BroadcastModule } from './broadcast-module.js';
|
|
6
7
|
export { AdbModule } from './adb-module.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/modules/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAQ7E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/modules/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAQ7E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACzF,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,SAAS,GAAG,YAAY,EAAE,CAUzE;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,YAAY,EAAE,EACvB,OAAO,EAAE,aAAa,EACtB,GAAG,EAAE,aAAa,GACjB,OAAO,CAAC,YAAY,EAAE,CAAC,CAqBzB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CASxE"}
|
package/dist/modules/index.js
CHANGED
|
@@ -6,6 +6,7 @@ import { PixooModule } from './pixoo-module.js';
|
|
|
6
6
|
import { TimeboxModule } from './timebox-module.js';
|
|
7
7
|
import { IDotMatrixModule } from './idotmatrix-module.js';
|
|
8
8
|
import { debug } from '../logger.js';
|
|
9
|
+
export { MODULE_NAMES, allModulesOff } from './types.js';
|
|
9
10
|
export { MdnsModule } from './mdns-module.js';
|
|
10
11
|
export { BroadcastModule } from './broadcast-module.js';
|
|
11
12
|
export { AdbModule } from './adb-module.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/modules/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAGrC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,SAAoB;IACvD,OAAO;QACL,IAAI,UAAU,CAAC,SAAS,CAAC;QACzB,IAAI,eAAe,CAAC,SAAS,CAAC;QAC9B,IAAI,SAAS,EAAE;QACf,IAAI,YAAY,EAAE;QAClB,IAAI,WAAW,EAAE;QACjB,IAAI,aAAa,EAAE;QACnB,IAAI,gBAAgB,EAAE;KACvB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAuB,EACvB,OAAsB,EACtB,GAAkB;IAElB,MAAM,OAAO,GAAmB,EAAE,CAAC;IAEnC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAI,OAAwD,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC;QAC7F,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,MAA0B,CAAC,CAAC;YAC5E,IAAI,cAAc,EAAE,CAAC;gBACnB,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACrB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAClB,KAAK,CAAC,SAAS,EAAE,GAAG,GAAG,CAAC,IAAI,WAAW,CAAC,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,SAAS,EAAE,GAAG,GAAG,CAAC,IAAI,qBAAqB,MAAM,GAAG,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,KAAK,CAAC,SAAS,EAAE,GAAG,GAAG,CAAC,IAAI,sBAAsB,GAAG,EAAE,CAAC,CAAC;YACzD,6CAA6C;QAC/C,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAuB;IACvD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YACjB,KAAK,CAAC,SAAS,EAAE,GAAG,GAAG,CAAC,IAAI,WAAW,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,KAAK,CAAC,SAAS,EAAE,GAAG,GAAG,CAAC,IAAI,iBAAiB,GAAG,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/modules/index.ts"],"names":[],"mappings":"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"}
|
package/dist/modules/types.d.ts
CHANGED
|
@@ -9,6 +9,14 @@ export interface BridgeContext {
|
|
|
9
9
|
projectName: string;
|
|
10
10
|
wsServer: WsServer;
|
|
11
11
|
broadcastSse?: (evt: BridgeEvent) => void;
|
|
12
|
+
/**
|
|
13
|
+
* Daemon is running loopback-only (`--loopback` / AGENTDECK_LOOPBACK_ONLY).
|
|
14
|
+
* A module that survives that posture must still honour its promise: emit
|
|
15
|
+
* nothing onto the LAN. Today only AdbModule consults it — `adb reverse`
|
|
16
|
+
* is restricted to USB-transport devices, because the same command against
|
|
17
|
+
* a TCP/mDNS adb device stands up a LAN-carried tunnel.
|
|
18
|
+
*/
|
|
19
|
+
loopbackOnly?: boolean;
|
|
12
20
|
}
|
|
13
21
|
/**
|
|
14
22
|
* Pluggable device module interface.
|
|
@@ -26,16 +34,33 @@ export interface DeviceModule {
|
|
|
26
34
|
/** Stop the module and clean up resources. */
|
|
27
35
|
stop(): Promise<void>;
|
|
28
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Every module in the registry, in `createDefaultModules` order.
|
|
39
|
+
*
|
|
40
|
+
* SSOT for both the config type below and `allModulesOff()`. It lives here — in
|
|
41
|
+
* the dependency-free types module — rather than being derived by constructing
|
|
42
|
+
* the registry, so the CLI can ask for "all off" without pulling esp32-serial,
|
|
43
|
+
* the Pixoo bridge, and the BLE clients into `agentdeck --help`.
|
|
44
|
+
*
|
|
45
|
+
* `bridge/src/__tests__/module-registry.test.ts` gates it against the real
|
|
46
|
+
* `createDefaultModules()`, so a module added there and forgotten here fails CI
|
|
47
|
+
* rather than silently reappearing under a flag that promised to disable it.
|
|
48
|
+
*/
|
|
49
|
+
export declare const MODULE_NAMES: readonly ["mdns", "broadcast", "adb", "serial", "pixoo", "timebox", "idotmatrix"];
|
|
50
|
+
export type ModuleName = (typeof MODULE_NAMES)[number];
|
|
29
51
|
/**
|
|
30
52
|
* Per-module configuration: 'auto' (detect), true (force on), false (force off).
|
|
31
53
|
*/
|
|
32
|
-
export
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
54
|
+
export type ModuleConfigs = Partial<Record<ModuleName, 'auto' | boolean>>;
|
|
55
|
+
/**
|
|
56
|
+
* A `ModuleConfigs` record with every registered module forced off.
|
|
57
|
+
*
|
|
58
|
+
* Derived from `MODULE_NAMES` rather than written out as literal keys, because
|
|
59
|
+
* an allow-list of literals drifts every time a module is added: the
|
|
60
|
+
* hand-written `--local` records omitted `idotmatrix` and `broadcast`, and
|
|
61
|
+
* `initModules` defaults an absent key to `'auto'` — so `agentdeck claude
|
|
62
|
+
* --local`, documented as "Disable all device modules", still spawned the
|
|
63
|
+
* iDotMatrix Python BLE client.
|
|
64
|
+
*/
|
|
65
|
+
export declare function allModulesOff(): ModuleConfigs;
|
|
41
66
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/modules/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/modules/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;IAC1C;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE3D,qEAAqE;IACrE,KAAK,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzC,8CAA8C;IAC9C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,YAAY,mFAQf,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvD;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;AAE1E;;;;;;;;;GASG;AACH,wBAAgB,aAAa,IAAI,aAAa,CAE7C"}
|
package/dist/modules/types.js
CHANGED
|
@@ -1,2 +1,35 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Every module in the registry, in `createDefaultModules` order.
|
|
3
|
+
*
|
|
4
|
+
* SSOT for both the config type below and `allModulesOff()`. It lives here — in
|
|
5
|
+
* the dependency-free types module — rather than being derived by constructing
|
|
6
|
+
* the registry, so the CLI can ask for "all off" without pulling esp32-serial,
|
|
7
|
+
* the Pixoo bridge, and the BLE clients into `agentdeck --help`.
|
|
8
|
+
*
|
|
9
|
+
* `bridge/src/__tests__/module-registry.test.ts` gates it against the real
|
|
10
|
+
* `createDefaultModules()`, so a module added there and forgotten here fails CI
|
|
11
|
+
* rather than silently reappearing under a flag that promised to disable it.
|
|
12
|
+
*/
|
|
13
|
+
export const MODULE_NAMES = [
|
|
14
|
+
'mdns',
|
|
15
|
+
'broadcast',
|
|
16
|
+
'adb',
|
|
17
|
+
'serial',
|
|
18
|
+
'pixoo',
|
|
19
|
+
'timebox',
|
|
20
|
+
'idotmatrix',
|
|
21
|
+
];
|
|
22
|
+
/**
|
|
23
|
+
* A `ModuleConfigs` record with every registered module forced off.
|
|
24
|
+
*
|
|
25
|
+
* Derived from `MODULE_NAMES` rather than written out as literal keys, because
|
|
26
|
+
* an allow-list of literals drifts every time a module is added: the
|
|
27
|
+
* hand-written `--local` records omitted `idotmatrix` and `broadcast`, and
|
|
28
|
+
* `initModules` defaults an absent key to `'auto'` — so `agentdeck claude
|
|
29
|
+
* --local`, documented as "Disable all device modules", still spawned the
|
|
30
|
+
* iDotMatrix Python BLE client.
|
|
31
|
+
*/
|
|
32
|
+
export function allModulesOff() {
|
|
33
|
+
return Object.fromEntries(MODULE_NAMES.map((n) => [n, false]));
|
|
34
|
+
}
|
|
2
35
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/modules/types.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/modules/types.ts"],"names":[],"mappings":"AA0CA;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,MAAM;IACN,WAAW;IACX,KAAK;IACL,QAAQ;IACR,OAAO;IACP,SAAS;IACT,YAAY;CACJ,CAAC;AASX;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAkB,CAAC;AAClF,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Daemon network posture — how much of the LAN the daemon is allowed to touch.
|
|
3
|
+
*
|
|
4
|
+
* Two independent axes, deliberately not folded into one flag:
|
|
5
|
+
*
|
|
6
|
+
* - **`--local`** answers "may this daemon drive hardware?". It turns every
|
|
7
|
+
* device module off, USB serial included. The daemon still binds `0.0.0.0`,
|
|
8
|
+
* so a paired phone/tablet companion on the LAN keeps working.
|
|
9
|
+
* - **`--loopback` / `AGENTDECK_LOOPBACK_ONLY=1`** answers "may this daemon be
|
|
10
|
+
* seen or heard on the LAN at all?". It binds `127.0.0.1` *and* silences
|
|
11
|
+
* everything the daemon emits onto the network — mDNS advertisement, the
|
|
12
|
+
* 2-second UDP beacon, the Pixoo subnet sweep, and the BLE scans. USB
|
|
13
|
+
* serial survives, because a board on a cable is not a network peer — and
|
|
14
|
+
* by the same test so does the ADB reverse tunnel for USB-attached devices:
|
|
15
|
+
* `adb reverse` over a cable terminates on the host's own loopback, so it
|
|
16
|
+
* works under a `127.0.0.1` bind and puts nothing on the LAN. Network adb
|
|
17
|
+
* transports (`adb connect <ip>`, wireless debugging) fail that test and are
|
|
18
|
+
* excluded by the module itself (`isNetworkAdbTransport`, threaded via
|
|
19
|
+
* `BridgeContext.loopbackOnly`) — the config value stays `'auto'` here.
|
|
20
|
+
*
|
|
21
|
+
* Until now the env var did exactly one thing — pick the bind address — while
|
|
22
|
+
* the daemon carried on advertising `_agentdeck._tcp`, broadcasting every two
|
|
23
|
+
* seconds, and sweeping the /24 for Pixoo devices. On a corporate segment that
|
|
24
|
+
* is the worst of both worlds: the noise without the function, and a horizontal
|
|
25
|
+
* scan from every developer's machine for a service nobody on that segment can
|
|
26
|
+
* reach. Loopback now means loopback.
|
|
27
|
+
*/
|
|
28
|
+
import { type ModuleConfigs } from './modules/types.js';
|
|
29
|
+
export interface DaemonPosture {
|
|
30
|
+
/** Bind 127.0.0.1 only, and emit nothing onto the LAN. */
|
|
31
|
+
loopbackOnly: boolean;
|
|
32
|
+
/** Every device module off, USB serial included. */
|
|
33
|
+
noDeviceModules: boolean;
|
|
34
|
+
}
|
|
35
|
+
export interface PostureFlags {
|
|
36
|
+
/** `daemon start --local` */
|
|
37
|
+
local?: boolean;
|
|
38
|
+
/** `daemon start --loopback` */
|
|
39
|
+
loopback?: boolean;
|
|
40
|
+
}
|
|
41
|
+
/** True when the fleet-wide env switch is set (MDM/profile-settable). */
|
|
42
|
+
export declare function isLoopbackOnlyEnv(env?: NodeJS.ProcessEnv): boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Resolve the posture from CLI flags plus the environment. Pure — takes `env`
|
|
45
|
+
* so tests can drive it without mutating the real process environment.
|
|
46
|
+
*/
|
|
47
|
+
export declare function resolveDaemonPosture(flags?: PostureFlags, env?: NodeJS.ProcessEnv): DaemonPosture;
|
|
48
|
+
/**
|
|
49
|
+
* Module configuration for a daemon running under `posture`.
|
|
50
|
+
*
|
|
51
|
+
* The two restricted branches are built from `allModulesOff()` and then add
|
|
52
|
+
* back only what the posture permits, so a module added later is off by default
|
|
53
|
+
* under both — the safe direction. `serialMode` is threaded through rather than
|
|
54
|
+
* hard-coded because `AGENTDECK_DAEMON_NO_SERIAL=1` is a separate diagnostic
|
|
55
|
+
* gate that must keep working in every posture.
|
|
56
|
+
*/
|
|
57
|
+
export declare function daemonModuleConfigs(posture: DaemonPosture, serialMode: 'auto' | false): ModuleConfigs;
|
|
58
|
+
/** Bind address implied by the posture. */
|
|
59
|
+
export declare function bindHostFor(posture: DaemonPosture): string;
|
|
60
|
+
/**
|
|
61
|
+
* One startup line naming what is actually off. The old log promised "LAN
|
|
62
|
+
* devices cannot connect", which was true of inbound traffic and said nothing
|
|
63
|
+
* about what the daemon still emitted — so an admin reading it had no way to
|
|
64
|
+
* know the subnet sweep was still running.
|
|
65
|
+
*/
|
|
66
|
+
export declare function describeDaemonPosture(posture: DaemonPosture, port: number): string;
|
|
67
|
+
//# sourceMappingURL=network-posture.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network-posture.d.ts","sourceRoot":"","sources":["../src/network-posture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAiB,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEvE,MAAM,WAAW,aAAa;IAC5B,0DAA0D;IAC1D,YAAY,EAAE,OAAO,CAAC;IACtB,oDAAoD;IACpD,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,6BAA6B;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gCAAgC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,yEAAyE;AACzE,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAE/E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,GAAE,YAAiB,EACxB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,aAAa,CAKf;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,MAAM,GAAG,KAAK,GACzB,aAAa,CAkBf;AAED,2CAA2C;AAC3C,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAE1D;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAiBlF"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Daemon network posture — how much of the LAN the daemon is allowed to touch.
|
|
3
|
+
*
|
|
4
|
+
* Two independent axes, deliberately not folded into one flag:
|
|
5
|
+
*
|
|
6
|
+
* - **`--local`** answers "may this daemon drive hardware?". It turns every
|
|
7
|
+
* device module off, USB serial included. The daemon still binds `0.0.0.0`,
|
|
8
|
+
* so a paired phone/tablet companion on the LAN keeps working.
|
|
9
|
+
* - **`--loopback` / `AGENTDECK_LOOPBACK_ONLY=1`** answers "may this daemon be
|
|
10
|
+
* seen or heard on the LAN at all?". It binds `127.0.0.1` *and* silences
|
|
11
|
+
* everything the daemon emits onto the network — mDNS advertisement, the
|
|
12
|
+
* 2-second UDP beacon, the Pixoo subnet sweep, and the BLE scans. USB
|
|
13
|
+
* serial survives, because a board on a cable is not a network peer — and
|
|
14
|
+
* by the same test so does the ADB reverse tunnel for USB-attached devices:
|
|
15
|
+
* `adb reverse` over a cable terminates on the host's own loopback, so it
|
|
16
|
+
* works under a `127.0.0.1` bind and puts nothing on the LAN. Network adb
|
|
17
|
+
* transports (`adb connect <ip>`, wireless debugging) fail that test and are
|
|
18
|
+
* excluded by the module itself (`isNetworkAdbTransport`, threaded via
|
|
19
|
+
* `BridgeContext.loopbackOnly`) — the config value stays `'auto'` here.
|
|
20
|
+
*
|
|
21
|
+
* Until now the env var did exactly one thing — pick the bind address — while
|
|
22
|
+
* the daemon carried on advertising `_agentdeck._tcp`, broadcasting every two
|
|
23
|
+
* seconds, and sweeping the /24 for Pixoo devices. On a corporate segment that
|
|
24
|
+
* is the worst of both worlds: the noise without the function, and a horizontal
|
|
25
|
+
* scan from every developer's machine for a service nobody on that segment can
|
|
26
|
+
* reach. Loopback now means loopback.
|
|
27
|
+
*/
|
|
28
|
+
import { allModulesOff } from './modules/types.js';
|
|
29
|
+
/** True when the fleet-wide env switch is set (MDM/profile-settable). */
|
|
30
|
+
export function isLoopbackOnlyEnv(env = process.env) {
|
|
31
|
+
return env.AGENTDECK_LOOPBACK_ONLY === '1';
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Resolve the posture from CLI flags plus the environment. Pure — takes `env`
|
|
35
|
+
* so tests can drive it without mutating the real process environment.
|
|
36
|
+
*/
|
|
37
|
+
export function resolveDaemonPosture(flags = {}, env = process.env) {
|
|
38
|
+
return {
|
|
39
|
+
loopbackOnly: !!flags.loopback || isLoopbackOnlyEnv(env),
|
|
40
|
+
noDeviceModules: !!flags.local,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Module configuration for a daemon running under `posture`.
|
|
45
|
+
*
|
|
46
|
+
* The two restricted branches are built from `allModulesOff()` and then add
|
|
47
|
+
* back only what the posture permits, so a module added later is off by default
|
|
48
|
+
* under both — the safe direction. `serialMode` is threaded through rather than
|
|
49
|
+
* hard-coded because `AGENTDECK_DAEMON_NO_SERIAL=1` is a separate diagnostic
|
|
50
|
+
* gate that must keep working in every posture.
|
|
51
|
+
*/
|
|
52
|
+
export function daemonModuleConfigs(posture, serialMode) {
|
|
53
|
+
if (posture.noDeviceModules)
|
|
54
|
+
return allModulesOff();
|
|
55
|
+
if (posture.loopbackOnly) {
|
|
56
|
+
// Everything the daemon would put on the wire is off. A USB-attached board
|
|
57
|
+
// is not a network peer, so serial keeps its normal mode — and ADB reverse
|
|
58
|
+
// passes the same test: the tunnel rides the USB cable into the host's own
|
|
59
|
+
// loopback, which is exactly the interface this posture binds.
|
|
60
|
+
return { ...allModulesOff(), serial: serialMode, adb: 'auto' };
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
mdns: true,
|
|
64
|
+
broadcast: true,
|
|
65
|
+
adb: 'auto',
|
|
66
|
+
serial: serialMode,
|
|
67
|
+
pixoo: 'auto',
|
|
68
|
+
timebox: 'auto',
|
|
69
|
+
idotmatrix: 'auto',
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/** Bind address implied by the posture. */
|
|
73
|
+
export function bindHostFor(posture) {
|
|
74
|
+
return posture.loopbackOnly ? '127.0.0.1' : '0.0.0.0';
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* One startup line naming what is actually off. The old log promised "LAN
|
|
78
|
+
* devices cannot connect", which was true of inbound traffic and said nothing
|
|
79
|
+
* about what the daemon still emitted — so an admin reading it had no way to
|
|
80
|
+
* know the subnet sweep was still running.
|
|
81
|
+
*/
|
|
82
|
+
export function describeDaemonPosture(posture, port) {
|
|
83
|
+
if (posture.loopbackOnly) {
|
|
84
|
+
const usb = posture.noDeviceModules
|
|
85
|
+
? ', USB serial, ADB reverse are all off.'
|
|
86
|
+
: ' are all off; USB serial and ADB reverse (USB-attached devices only) stay on.';
|
|
87
|
+
return `[agentdeck] Loopback-only posture — bound to 127.0.0.1:${port}. `
|
|
88
|
+
+ `mDNS advertisement, UDP discovery beacon, Pixoo LAN sweep, BLE scans${usb} `
|
|
89
|
+
+ `LAN devices (companion apps, ESP32/WiFi boards) cannot connect.`;
|
|
90
|
+
}
|
|
91
|
+
if (posture.noDeviceModules) {
|
|
92
|
+
return `[agentdeck] Listening on all interfaces (:${port}) with every device module off `
|
|
93
|
+
+ `(--local: no mDNS, no UDP beacon, no LAN sweep, no BLE, no ADB, no serial). `
|
|
94
|
+
+ `LAN requests still require the pairing token (~/.agentdeck/auth-token).`;
|
|
95
|
+
}
|
|
96
|
+
return `[agentdeck] Daemon listening on all interfaces (:${port}) — LAN requests require the pairing token `
|
|
97
|
+
+ `(~/.agentdeck/auth-token). Set AGENTDECK_LOOPBACK_ONLY=1 (or pass --loopback) for a loopback-only bind `
|
|
98
|
+
+ `with LAN discovery and device scans disabled.`;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=network-posture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network-posture.js","sourceRoot":"","sources":["../src/network-posture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,aAAa,EAAsB,MAAM,oBAAoB,CAAC;AAgBvE,yEAAyE;AACzE,MAAM,UAAU,iBAAiB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACpE,OAAO,GAAG,CAAC,uBAAuB,KAAK,GAAG,CAAC;AAC7C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,QAAsB,EAAE,EACxB,MAAyB,OAAO,CAAC,GAAG;IAEpC,OAAO;QACL,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,iBAAiB,CAAC,GAAG,CAAC;QACxD,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK;KAC/B,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAAsB,EACtB,UAA0B;IAE1B,IAAI,OAAO,CAAC,eAAe;QAAE,OAAO,aAAa,EAAE,CAAC;IACpD,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,2EAA2E;QAC3E,2EAA2E;QAC3E,2EAA2E;QAC3E,+DAA+D;QAC/D,OAAO,EAAE,GAAG,aAAa,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IACjE,CAAC;IACD,OAAO;QACL,IAAI,EAAE,IAAI;QACV,SAAS,EAAE,IAAI;QACf,GAAG,EAAE,MAAM;QACX,MAAM,EAAE,UAAU;QAClB,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,MAAM;KACnB,CAAC;AACJ,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,WAAW,CAAC,OAAsB;IAChD,OAAO,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;AACxD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAsB,EAAE,IAAY;IACxE,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,OAAO,CAAC,eAAe;YACjC,CAAC,CAAC,wCAAwC;YAC1C,CAAC,CAAC,+EAA+E,CAAC;QACpF,OAAO,0DAA0D,IAAI,IAAI;cACrE,uEAAuE,GAAG,GAAG;cAC7E,iEAAiE,CAAC;IACxE,CAAC;IACD,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;QAC5B,OAAO,6CAA6C,IAAI,iCAAiC;cACrF,8EAA8E;cAC9E,yEAAyE,CAAC;IAChF,CAAC;IACD,OAAO,oDAAoD,IAAI,6CAA6C;UACxG,yGAAyG;UACzG,+CAA+C,CAAC;AACtD,CAAC"}
|
|
@@ -56,6 +56,20 @@ export declare function queueDirective(sid: string, text: string): boolean;
|
|
|
56
56
|
/** Pop exactly one directive (Stop hook drains one per turn end). A pending
|
|
57
57
|
* STOP outranks directives: stopping wins, the queue is discarded. */
|
|
58
58
|
export declare function takeDirective(sid: string): string | undefined;
|
|
59
|
+
/** Take a directive for a Stop hook, given that hook's payload.
|
|
60
|
+
*
|
|
61
|
+
* Delivery works by BLOCKING a hook Claude is waiting on and handing back the
|
|
62
|
+
* directive as the continuation reason, so it is only deliverable when
|
|
63
|
+
* something is actually listening. A synthetic Stop — the missed-Stop
|
|
64
|
+
* watchdog posting to the daemon's own `/hooks/Stop` to close a turn whose
|
|
65
|
+
* real hook dropped — has no listener: the daemon discards that response. So
|
|
66
|
+
* taking here would pop the user's queued follow-up and drop it on the floor,
|
|
67
|
+
* with no error and no trace. Leaving it queued costs one turn of latency and
|
|
68
|
+
* the next real Stop delivers it.
|
|
69
|
+
*
|
|
70
|
+
* This lives next to the queue rather than at the call site because the rule
|
|
71
|
+
* belongs to the queue: any future caller draining it owes the same check. */
|
|
72
|
+
export declare function takeDirectiveForStop(sid: string, payload: Record<string, unknown> | undefined): string | undefined;
|
|
59
73
|
export declare function queuedDirectiveCount(sid: string): number;
|
|
60
74
|
/** User re-engaged in the terminal — their own prompt supersedes anything the
|
|
61
75
|
* deck queued, and a pending STOP is moot. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observed-steering.d.ts","sourceRoot":"","sources":["../src/observed-steering.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"observed-steering.d.ts","sourceRoot":"","sources":["../src/observed-steering.ts"],"names":[],"mappings":"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"}
|
|
@@ -147,6 +147,24 @@ export function takeDirective(sid) {
|
|
|
147
147
|
s.directives = s.directives.filter((d) => now - d.ts < DIRECTIVE_TTL_MS);
|
|
148
148
|
return s.directives.shift()?.text;
|
|
149
149
|
}
|
|
150
|
+
/** Take a directive for a Stop hook, given that hook's payload.
|
|
151
|
+
*
|
|
152
|
+
* Delivery works by BLOCKING a hook Claude is waiting on and handing back the
|
|
153
|
+
* directive as the continuation reason, so it is only deliverable when
|
|
154
|
+
* something is actually listening. A synthetic Stop — the missed-Stop
|
|
155
|
+
* watchdog posting to the daemon's own `/hooks/Stop` to close a turn whose
|
|
156
|
+
* real hook dropped — has no listener: the daemon discards that response. So
|
|
157
|
+
* taking here would pop the user's queued follow-up and drop it on the floor,
|
|
158
|
+
* with no error and no trace. Leaving it queued costs one turn of latency and
|
|
159
|
+
* the next real Stop delivers it.
|
|
160
|
+
*
|
|
161
|
+
* This lives next to the queue rather than at the call site because the rule
|
|
162
|
+
* belongs to the queue: any future caller draining it owes the same check. */
|
|
163
|
+
export function takeDirectiveForStop(sid, payload) {
|
|
164
|
+
if (payload?.synthetic_stop === true)
|
|
165
|
+
return undefined;
|
|
166
|
+
return takeDirective(sid);
|
|
167
|
+
}
|
|
150
168
|
export function queuedDirectiveCount(sid) {
|
|
151
169
|
const s = sessions.get(sid);
|
|
152
170
|
if (!s)
|