@agentdeck/bridge 1.0.4 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/fm-helper/agentdeck-fm-helper +0 -0
- package/dist/adapters/claude-code.d.ts.map +1 -1
- package/dist/adapters/claude-code.js +3 -0
- package/dist/adapters/claude-code.js.map +1 -1
- package/dist/adb-reverse.d.ts.map +1 -1
- package/dist/adb-reverse.js +4 -2
- package/dist/adb-reverse.js.map +1 -1
- package/dist/apme/collector.js +2 -2
- package/dist/apme/collector.js.map +1 -1
- package/dist/apme/outcome.js +2 -2
- package/dist/apme/outcome.js.map +1 -1
- package/dist/apme/runner.js +3 -3
- package/dist/apme/runner.js.map +1 -1
- package/dist/ble-sync-spawn.js +1 -1
- package/dist/ble-sync-spawn.js.map +1 -1
- package/dist/calendar.d.ts +82 -0
- package/dist/calendar.d.ts.map +1 -0
- package/dist/calendar.js +324 -0
- package/dist/calendar.js.map +1 -0
- package/dist/card-feed.d.ts +63 -5
- package/dist/card-feed.d.ts.map +1 -1
- package/dist/card-feed.js +218 -14
- package/dist/card-feed.js.map +1 -1
- package/dist/card-modules.d.ts +4 -0
- package/dist/card-modules.d.ts.map +1 -1
- package/dist/card-modules.js +5 -3
- package/dist/card-modules.js.map +1 -1
- package/dist/check-deps.js +4 -4
- package/dist/check-deps.js.map +1 -1
- package/dist/cli.d.ts +35 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +269 -9
- package/dist/cli.js.map +1 -1
- package/dist/codex-otel.d.ts +89 -0
- package/dist/codex-otel.d.ts.map +1 -0
- package/dist/codex-otel.js +487 -0
- package/dist/codex-otel.js.map +1 -0
- package/dist/codex-rate-limits.d.ts.map +1 -1
- package/dist/codex-rate-limits.js +15 -3
- package/dist/codex-rate-limits.js.map +1 -1
- package/dist/daemon-server.d.ts +4 -0
- package/dist/daemon-server.d.ts.map +1 -1
- package/dist/daemon-server.js +880 -63
- package/dist/daemon-server.js.map +1 -1
- package/dist/daemon-ws-client.d.ts +108 -24
- package/dist/daemon-ws-client.d.ts.map +1 -1
- package/dist/daemon-ws-client.js +175 -39
- package/dist/daemon-ws-client.js.map +1 -1
- package/dist/daemon.js +1 -1
- package/dist/device-voice-reply.d.ts +1 -10
- package/dist/device-voice-reply.d.ts.map +1 -1
- package/dist/device-voice-reply.js +19 -36
- package/dist/device-voice-reply.js.map +1 -1
- package/dist/device-voice.d.ts +37 -0
- package/dist/device-voice.d.ts.map +1 -1
- package/dist/device-voice.js +130 -1
- package/dist/device-voice.js.map +1 -1
- package/dist/diag-analyzer.d.ts.map +1 -1
- package/dist/diag-analyzer.js +1 -0
- package/dist/diag-analyzer.js.map +1 -1
- package/dist/display-monitor.d.ts.map +1 -1
- package/dist/display-monitor.js +1 -0
- package/dist/display-monitor.js.map +1 -1
- package/dist/esp32-serial.d.ts +4 -0
- package/dist/esp32-serial.d.ts.map +1 -1
- package/dist/esp32-serial.js +6 -3
- package/dist/esp32-serial.js.map +1 -1
- package/dist/foundation-models-helper.d.ts +23 -0
- package/dist/foundation-models-helper.d.ts.map +1 -1
- package/dist/foundation-models-helper.js +90 -21
- package/dist/foundation-models-helper.js.map +1 -1
- package/dist/gateway-probe.js +1 -1
- package/dist/gateway-probe.js.map +1 -1
- package/dist/glance-frame.d.ts +64 -0
- package/dist/glance-frame.d.ts.map +1 -0
- package/dist/glance-frame.js +364 -0
- package/dist/glance-frame.js.map +1 -0
- package/dist/hook-codex-sessions.d.ts +40 -0
- package/dist/hook-codex-sessions.d.ts.map +1 -0
- package/dist/hook-codex-sessions.js +174 -0
- package/dist/hook-codex-sessions.js.map +1 -0
- package/dist/idotmatrix/idotmatrix-discover.d.ts.map +1 -1
- package/dist/idotmatrix/idotmatrix-discover.js +7 -4
- package/dist/idotmatrix/idotmatrix-discover.js.map +1 -1
- package/dist/idotmatrix/idotmatrix-settings.d.ts +15 -0
- package/dist/idotmatrix/idotmatrix-settings.d.ts.map +1 -1
- package/dist/idotmatrix/idotmatrix-settings.js +21 -0
- package/dist/idotmatrix/idotmatrix-settings.js.map +1 -1
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +88 -7
- package/dist/index.js.map +1 -1
- package/dist/linux-service.d.ts +52 -0
- package/dist/linux-service.d.ts.map +1 -0
- package/dist/linux-service.js +206 -0
- package/dist/linux-service.js.map +1 -0
- package/dist/logger.d.ts +6 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +15 -0
- package/dist/logger.js.map +1 -1
- package/dist/mdns-discover.d.ts +19 -0
- package/dist/mdns-discover.d.ts.map +1 -0
- package/dist/mdns-discover.js +109 -0
- package/dist/mdns-discover.js.map +1 -0
- package/dist/model-catalog.d.ts.map +1 -1
- package/dist/model-catalog.js +1 -0
- package/dist/model-catalog.js.map +1 -1
- package/dist/modules/adb-module.js +1 -1
- package/dist/modules/adb-module.js.map +1 -1
- package/dist/openclaw-session.d.ts +6 -0
- package/dist/openclaw-session.d.ts.map +1 -1
- package/dist/openclaw-session.js +7 -1
- package/dist/openclaw-session.js.map +1 -1
- package/dist/output-parser.d.ts +9 -0
- package/dist/output-parser.d.ts.map +1 -1
- package/dist/output-parser.js +67 -16
- package/dist/output-parser.js.map +1 -1
- package/dist/passive-observer.d.ts +57 -8
- package/dist/passive-observer.d.ts.map +1 -1
- package/dist/passive-observer.js +210 -74
- package/dist/passive-observer.js.map +1 -1
- package/dist/pixoo/pixoo-bridge.d.ts.map +1 -1
- package/dist/pixoo/pixoo-bridge.js +47 -6
- package/dist/pixoo/pixoo-bridge.js.map +1 -1
- package/dist/pixoo/pixoo-renderer.d.ts +2 -1
- package/dist/pixoo/pixoo-renderer.d.ts.map +1 -1
- package/dist/pixoo/pixoo-renderer.js +137 -8
- package/dist/pixoo/pixoo-renderer.js.map +1 -1
- package/dist/pocket-autonomy.d.ts +78 -0
- package/dist/pocket-autonomy.d.ts.map +1 -0
- package/dist/pocket-autonomy.js +529 -0
- package/dist/pocket-autonomy.js.map +1 -0
- package/dist/pty-manager.d.ts.map +1 -1
- package/dist/pty-manager.js +3 -2
- package/dist/pty-manager.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 +2 -1
- package/dist/python-ble-runtime.js.map +1 -1
- package/dist/remote-sessions.d.ts +64 -0
- package/dist/remote-sessions.d.ts.map +1 -0
- package/dist/remote-sessions.js +81 -0
- package/dist/remote-sessions.js.map +1 -0
- package/dist/review-runner.js +2 -2
- package/dist/review-runner.js.map +1 -1
- package/dist/session-aggregator.d.ts +2 -0
- package/dist/session-aggregator.d.ts.map +1 -1
- package/dist/session-aggregator.js +6 -1
- package/dist/session-aggregator.js.map +1 -1
- package/dist/session-focus-relay.d.ts +47 -1
- package/dist/session-focus-relay.d.ts.map +1 -1
- package/dist/session-focus-relay.js +130 -15
- package/dist/session-focus-relay.js.map +1 -1
- package/dist/session-push-channel.d.ts +31 -0
- package/dist/session-push-channel.d.ts.map +1 -0
- package/dist/session-push-channel.js +94 -0
- package/dist/session-push-channel.js.map +1 -0
- package/dist/session-registry.d.ts +126 -0
- package/dist/session-registry.d.ts.map +1 -1
- package/dist/session-registry.js +180 -3
- package/dist/session-registry.js.map +1 -1
- package/dist/subagent-timeline.d.ts +34 -0
- package/dist/subagent-timeline.d.ts.map +1 -0
- package/dist/subagent-timeline.js +156 -0
- package/dist/subagent-timeline.js.map +1 -0
- package/dist/timebox/timebox-discover.js +1 -1
- package/dist/timebox/timebox-discover.js.map +1 -1
- package/dist/tui/gauge.d.ts +4 -2
- package/dist/tui/gauge.d.ts.map +1 -1
- package/dist/tui/gauge.js +8 -4
- package/dist/tui/gauge.js.map +1 -1
- package/dist/tui/renderer.d.ts.map +1 -1
- package/dist/tui/renderer.js +28 -0
- package/dist/tui/renderer.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/usage-api.d.ts +43 -0
- package/dist/usage-api.d.ts.map +1 -1
- package/dist/usage-api.js +114 -9
- package/dist/usage-api.js.map +1 -1
- package/dist/usage-event.d.ts +19 -0
- package/dist/usage-event.d.ts.map +1 -1
- package/dist/usage-event.js +35 -0
- package/dist/usage-event.js.map +1 -1
- package/dist/utils/project-name.d.ts.map +1 -1
- package/dist/utils/project-name.js +1 -0
- package/dist/utils/project-name.js.map +1 -1
- package/dist/version-check.d.ts.map +1 -1
- package/dist/version-check.js +3 -2
- package/dist/version-check.js.map +1 -1
- package/dist/voice-assistant.d.ts.map +1 -1
- package/dist/voice-assistant.js +2 -1
- package/dist/voice-assistant.js.map +1 -1
- package/dist/voice.d.ts.map +1 -1
- package/dist/voice.js +1 -0
- package/dist/voice.js.map +1 -1
- package/dist/weather.d.ts +72 -0
- package/dist/weather.d.ts.map +1 -0
- package/dist/weather.js +206 -0
- package/dist/weather.js.map +1 -0
- package/dist/windows-service.js +5 -5
- package/dist/windows-service.js.map +1 -1
- package/fm-helper/AgentDeckFMHelper.swift +200 -0
- package/fm-helper/Info.plist +27 -0
- package/package.json +15 -13
- package/scripts/build-fm-helper.mjs +35 -3
- package/src/idotmatrix/identity_generated.py +50 -0
- package/src/idotmatrix/scan.py +33 -13
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export declare const SERVICE_NAME = "agentdeck-daemon";
|
|
2
|
+
export declare function getDaemonNodeTarget(): {
|
|
3
|
+
node: string;
|
|
4
|
+
cliJs: string;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* The daemon's data directory — the same resolver the daemon itself uses
|
|
8
|
+
* (`AGENTDECK_DATA_DIR` override, else `~/.agentdeck`). Kept byte-identical to
|
|
9
|
+
* the inline resolution in session-registry.ts / apme/store.ts so the unit's
|
|
10
|
+
* WorkingDirectory always matches where the daemon actually reads/writes.
|
|
11
|
+
*/
|
|
12
|
+
export declare function getDataDir(): string;
|
|
13
|
+
/**
|
|
14
|
+
* Validate the AGENTDECK_DATA_DIR override for use in a systemd unit. Because
|
|
15
|
+
* `WorkingDirectory=` is verbatim, values that are relative, `~`, leading-`-`
|
|
16
|
+
* (systemd's ignore-missing prefix), or edge-whitespace-padded (trimmed by the
|
|
17
|
+
* unit parser, hence unrepresentable) would silently mean something else —
|
|
18
|
+
* reject them with an actionable error instead.
|
|
19
|
+
*/
|
|
20
|
+
export declare function validateDataDirOverride(value: string): void;
|
|
21
|
+
/** Render one quoted `Environment=` assignment ($ stays literal there). */
|
|
22
|
+
export declare function escapeUnitEnvAssignment(name: string, value: string): string;
|
|
23
|
+
/** Quote one ExecStart word ($ must be doubled — expanded even inside quotes). */
|
|
24
|
+
export declare function escapeExecWord(word: string): string;
|
|
25
|
+
/** ~/.config/systemd/user (honors $XDG_CONFIG_HOME). */
|
|
26
|
+
export declare function getUnitDir(): string;
|
|
27
|
+
/** Full path to the installed unit file. */
|
|
28
|
+
export declare function getUnitPath(): string;
|
|
29
|
+
export declare function buildUnitFile(opts?: {
|
|
30
|
+
node?: string;
|
|
31
|
+
cliJs?: string;
|
|
32
|
+
dataDirOverride?: string;
|
|
33
|
+
}): string;
|
|
34
|
+
/**
|
|
35
|
+
* True if `systemctl --user` is usable (systemd present + a user D-Bus session).
|
|
36
|
+
* Guards non-systemd distros and headless contexts without a user manager.
|
|
37
|
+
*/
|
|
38
|
+
export declare function hasSystemctl(): boolean;
|
|
39
|
+
/** True if the unit file is installed on disk. */
|
|
40
|
+
export declare function unitExists(): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Write the unit file and enable it. Throws if systemctl fails (e.g. no user
|
|
43
|
+
* D-Bus session).
|
|
44
|
+
*/
|
|
45
|
+
export declare function installUnit(): void;
|
|
46
|
+
/** Start the unit now (so no re-login is required). */
|
|
47
|
+
export declare function startUnit(): void;
|
|
48
|
+
/** Stop the unit (best-effort). */
|
|
49
|
+
export declare function stopUnit(): void;
|
|
50
|
+
/** Disable + stop the unit, remove the file, and reload. Idempotent. */
|
|
51
|
+
export declare function disableUnit(): void;
|
|
52
|
+
//# sourceMappingURL=linux-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linux-service.d.ts","sourceRoot":"","sources":["../src/linux-service.ts"],"names":[],"mappings":"AAuBA,eAAO,MAAM,YAAY,qBAAqB,CAAC;AAO/C,wBAAgB,mBAAmB,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAGrE;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AA6BD;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAc3D;AAYD,2EAA2E;AAC3E,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAG3E;AAED,kFAAkF;AAClF,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED,wDAAwD;AACxD,wBAAgB,UAAU,IAAI,MAAM,CAGnC;AAED,4CAA4C;AAC5C,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,wBAAgB,aAAa,CAAC,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAgCxG;AAED;;;GAGG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAYtC;AAED,kDAAkD;AAClD,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAYlC;AAED,uDAAuD;AACvD,wBAAgB,SAAS,IAAI,IAAI,CAEhC;AAED,mCAAmC;AACnC,wBAAgB,QAAQ,IAAI,IAAI,CAE/B;AAED,wEAAwE;AACxE,wBAAgB,WAAW,IAAI,IAAI,CAIlC"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Linux daemon autostart via a systemd `--user` unit (default.target).
|
|
3
|
+
*
|
|
4
|
+
* The macOS LaunchAgent / Windows Scheduled-Task analog on Linux is a per-user
|
|
5
|
+
* systemd unit installed under ~/.config/systemd/user. It runs in the user's
|
|
6
|
+
* session, needs no root, and `Restart=on-failure` mirrors LaunchAgent KeepAlive
|
|
7
|
+
* / the Windows RestartOnFailure. `--foreground` makes the unit process BE the
|
|
8
|
+
* daemon so systemd supervises the real process.
|
|
9
|
+
*
|
|
10
|
+
* Note: a user unit only auto-starts on graphical/SSH login. For boot-without-
|
|
11
|
+
* login (headless servers), the user must run `loginctl enable-linger $USER`
|
|
12
|
+
* once — we surface that as an informational hint rather than doing it here,
|
|
13
|
+
* since it can require elevated privileges.
|
|
14
|
+
*
|
|
15
|
+
* The pure unit-file builder is unit-tested (cross-platform); the `systemctl`
|
|
16
|
+
* calls are integration-only (real Linux host + side effects).
|
|
17
|
+
*/
|
|
18
|
+
import { writeFileSync, unlinkSync, mkdirSync, existsSync } from 'fs';
|
|
19
|
+
import { homedir } from 'os';
|
|
20
|
+
import { dirname, join } from 'path';
|
|
21
|
+
import { execSync } from 'child_process';
|
|
22
|
+
import { fileURLToPath } from 'url';
|
|
23
|
+
export const SERVICE_NAME = 'agentdeck-daemon';
|
|
24
|
+
const UNIT_FILE = `${SERVICE_NAME}.service`;
|
|
25
|
+
// Resolve node + cli.js directly rather than the `agentdeck` npm shim: the
|
|
26
|
+
// global bin may be a wrapper script, and pointing systemd at the real node
|
|
27
|
+
// binary + cli.js keeps ExecStart stable across PATH changes. process.execPath
|
|
28
|
+
// is the running node; cli.js sits next to this module in the dist dir.
|
|
29
|
+
export function getDaemonNodeTarget() {
|
|
30
|
+
const distDir = dirname(fileURLToPath(import.meta.url));
|
|
31
|
+
return { node: process.execPath, cliJs: join(distDir, 'cli.js') };
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* The daemon's data directory — the same resolver the daemon itself uses
|
|
35
|
+
* (`AGENTDECK_DATA_DIR` override, else `~/.agentdeck`). Kept byte-identical to
|
|
36
|
+
* the inline resolution in session-registry.ts / apme/store.ts so the unit's
|
|
37
|
+
* WorkingDirectory always matches where the daemon actually reads/writes.
|
|
38
|
+
*/
|
|
39
|
+
export function getDataDir() {
|
|
40
|
+
return process.env.AGENTDECK_DATA_DIR || join(homedir(), '.agentdeck');
|
|
41
|
+
}
|
|
42
|
+
// ── Unit-file escaping ────────────────────────────────────────────────
|
|
43
|
+
//
|
|
44
|
+
// The data-dir override is user-controlled and travels through a file format
|
|
45
|
+
// with its own quoting rules, so every generated value is escaped for the
|
|
46
|
+
// exact directive it lands in. The rules differ per directive:
|
|
47
|
+
// - Environment= word-splits with double-quote grouping; `\` and `"` need
|
|
48
|
+
// C-style escaping inside quotes; `%` specifiers expand (→ `%%`); `$` is
|
|
49
|
+
// NOT expanded and stays literal.
|
|
50
|
+
// - ExecStart= word-splits like Environment=, but ADDITIONALLY expands
|
|
51
|
+
// `$VAR`/`${VAR}` even inside double quotes → a literal `$` must be `$$`.
|
|
52
|
+
// - WorkingDirectory= takes the rest of the line verbatim (no word split,
|
|
53
|
+
// no unquoting — quotes would become literal path bytes); `%` specifiers
|
|
54
|
+
// still expand (`%h` is the documented home-dir idiom) → only `%%`.
|
|
55
|
+
// Expected bytes are pinned in linux-service.test.ts and were verified against
|
|
56
|
+
// real systemd (Debian 13) via this PR's user-unit install test.
|
|
57
|
+
/** Throw if a value cannot be represented on a single unit-file line. */
|
|
58
|
+
function assertUnitLineSafe(value, what) {
|
|
59
|
+
const ctrl = /[\x00-\x1f\x7f]/.exec(value);
|
|
60
|
+
if (ctrl) {
|
|
61
|
+
throw new Error(`${what} contains a control character (code ${ctrl[0].charCodeAt(0)}) — ` +
|
|
62
|
+
'it cannot be written safely into a systemd unit file');
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Validate the AGENTDECK_DATA_DIR override for use in a systemd unit. Because
|
|
67
|
+
* `WorkingDirectory=` is verbatim, values that are relative, `~`, leading-`-`
|
|
68
|
+
* (systemd's ignore-missing prefix), or edge-whitespace-padded (trimmed by the
|
|
69
|
+
* unit parser, hence unrepresentable) would silently mean something else —
|
|
70
|
+
* reject them with an actionable error instead.
|
|
71
|
+
*/
|
|
72
|
+
export function validateDataDirOverride(value) {
|
|
73
|
+
assertUnitLineSafe(value, 'AGENTDECK_DATA_DIR');
|
|
74
|
+
if (value !== value.trim()) {
|
|
75
|
+
throw new Error('AGENTDECK_DATA_DIR has leading/trailing whitespace — the systemd unit parser trims it, ' +
|
|
76
|
+
'so the path cannot be represented in the unit. Use a path without edge whitespace.');
|
|
77
|
+
}
|
|
78
|
+
if (!value.startsWith('/')) {
|
|
79
|
+
throw new Error(`AGENTDECK_DATA_DIR must be an absolute path to be usable in a systemd unit (got '${value}') — ` +
|
|
80
|
+
"'~', relative paths, and '-'-prefixed values mean something else to systemd.");
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/** Escape for the inside of a double-quoted unit-file string. */
|
|
84
|
+
function escapeQuoted(value) {
|
|
85
|
+
return value.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
|
|
86
|
+
}
|
|
87
|
+
/** `%` → `%%` — systemd expands % specifiers in Environment/Exec/path settings. */
|
|
88
|
+
function escapeSpecifiers(value) {
|
|
89
|
+
return value.replace(/%/g, '%%');
|
|
90
|
+
}
|
|
91
|
+
/** Render one quoted `Environment=` assignment ($ stays literal there). */
|
|
92
|
+
export function escapeUnitEnvAssignment(name, value) {
|
|
93
|
+
assertUnitLineSafe(value, name);
|
|
94
|
+
return `"${name}=${escapeSpecifiers(escapeQuoted(value))}"`;
|
|
95
|
+
}
|
|
96
|
+
/** Quote one ExecStart word ($ must be doubled — expanded even inside quotes). */
|
|
97
|
+
export function escapeExecWord(word) {
|
|
98
|
+
assertUnitLineSafe(word, 'ExecStart path');
|
|
99
|
+
return `"${escapeSpecifiers(escapeQuoted(word)).replace(/\$/g, '$$$$')}"`;
|
|
100
|
+
}
|
|
101
|
+
/** ~/.config/systemd/user (honors $XDG_CONFIG_HOME). */
|
|
102
|
+
export function getUnitDir() {
|
|
103
|
+
const configHome = process.env.XDG_CONFIG_HOME || join(homedir(), '.config');
|
|
104
|
+
return join(configHome, 'systemd', 'user');
|
|
105
|
+
}
|
|
106
|
+
/** Full path to the installed unit file. */
|
|
107
|
+
export function getUnitPath() {
|
|
108
|
+
return join(getUnitDir(), UNIT_FILE);
|
|
109
|
+
}
|
|
110
|
+
export function buildUnitFile(opts) {
|
|
111
|
+
const { node, cliJs } = { ...getDaemonNodeTarget(), ...opts };
|
|
112
|
+
// Single override source: BOTH WorkingDirectory= and the Environment= line
|
|
113
|
+
// derive from the same value, so the unit can never chdir into one directory
|
|
114
|
+
// while the daemon process resolves another (the split-state failure mode).
|
|
115
|
+
const override = opts?.dataDirOverride ?? process.env.AGENTDECK_DATA_DIR ?? '';
|
|
116
|
+
if (override)
|
|
117
|
+
validateDataDirOverride(override);
|
|
118
|
+
const workingDir = override || join(homedir(), '.agentdeck');
|
|
119
|
+
// A systemd user manager does not inherit the install shell's environment
|
|
120
|
+
// after login/boot, so an explicitly selected AGENTDECK_DATA_DIR must be
|
|
121
|
+
// persisted into the unit — otherwise the daemon falls back to ~/.agentdeck
|
|
122
|
+
// while systemd merely chdirs into the override. Emitted only when set.
|
|
123
|
+
const envLine = override
|
|
124
|
+
? `Environment=${escapeUnitEnvAssignment('AGENTDECK_DATA_DIR', override)}\n`
|
|
125
|
+
: '';
|
|
126
|
+
// Both ExecStart words quoted so paths with spaces survive; --foreground so
|
|
127
|
+
// the unit process IS the daemon (lets Restart=on-failure track it).
|
|
128
|
+
return `[Unit]
|
|
129
|
+
Description=AgentDeck monitoring daemon
|
|
130
|
+
After=network-online.target
|
|
131
|
+
Wants=network-online.target
|
|
132
|
+
|
|
133
|
+
[Service]
|
|
134
|
+
Type=simple
|
|
135
|
+
ExecStart=${escapeExecWord(node)} ${escapeExecWord(cliJs)} daemon start --foreground
|
|
136
|
+
WorkingDirectory=${escapeSpecifiers(workingDir)}
|
|
137
|
+
${envLine}Restart=on-failure
|
|
138
|
+
RestartSec=5
|
|
139
|
+
|
|
140
|
+
[Install]
|
|
141
|
+
WantedBy=default.target
|
|
142
|
+
`;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* True if `systemctl --user` is usable (systemd present + a user D-Bus session).
|
|
146
|
+
* Guards non-systemd distros and headless contexts without a user manager.
|
|
147
|
+
*/
|
|
148
|
+
export function hasSystemctl() {
|
|
149
|
+
try {
|
|
150
|
+
// `is-system-running` prints a status word and exits; even a non-zero exit
|
|
151
|
+
// (degraded/starting) means the user manager answered. A missing binary or
|
|
152
|
+
// absent user bus throws.
|
|
153
|
+
execSync('systemctl --user is-system-running', { stdio: 'pipe' });
|
|
154
|
+
return true;
|
|
155
|
+
}
|
|
156
|
+
catch (e) {
|
|
157
|
+
// Exit codes >0 with output still mean systemctl responded (e.g. "degraded").
|
|
158
|
+
const hasOutput = Boolean(e.stdout?.length);
|
|
159
|
+
return hasOutput;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/** True if the unit file is installed on disk. */
|
|
163
|
+
export function unitExists() {
|
|
164
|
+
return existsSync(getUnitPath());
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Write the unit file and enable it. Throws if systemctl fails (e.g. no user
|
|
168
|
+
* D-Bus session).
|
|
169
|
+
*/
|
|
170
|
+
export function installUnit() {
|
|
171
|
+
// Build (and thereby validate any AGENTDECK_DATA_DIR override) BEFORE any
|
|
172
|
+
// side effect, so a rejected install leaves no stray directory behind.
|
|
173
|
+
const unit = buildUnitFile();
|
|
174
|
+
// Ensure the unit's WorkingDirectory exists — on a fresh install ~/.agentdeck
|
|
175
|
+
// (or the AGENTDECK_DATA_DIR override) may not exist yet, and systemd fails at
|
|
176
|
+
// the CHDIR step before Node starts if it's missing.
|
|
177
|
+
mkdirSync(getDataDir(), { recursive: true });
|
|
178
|
+
mkdirSync(getUnitDir(), { recursive: true });
|
|
179
|
+
writeFileSync(getUnitPath(), unit, 'utf-8');
|
|
180
|
+
execSync('systemctl --user daemon-reload', { stdio: 'pipe' });
|
|
181
|
+
execSync(`systemctl --user enable ${UNIT_FILE}`, { stdio: 'pipe' });
|
|
182
|
+
}
|
|
183
|
+
/** Start the unit now (so no re-login is required). */
|
|
184
|
+
export function startUnit() {
|
|
185
|
+
execSync(`systemctl --user start ${UNIT_FILE}`, { stdio: 'pipe' });
|
|
186
|
+
}
|
|
187
|
+
/** Stop the unit (best-effort). */
|
|
188
|
+
export function stopUnit() {
|
|
189
|
+
execSync(`systemctl --user stop ${UNIT_FILE}`, { stdio: 'pipe' });
|
|
190
|
+
}
|
|
191
|
+
/** Disable + stop the unit, remove the file, and reload. Idempotent. */
|
|
192
|
+
export function disableUnit() {
|
|
193
|
+
try {
|
|
194
|
+
execSync(`systemctl --user disable --now ${UNIT_FILE}`, { stdio: 'pipe' });
|
|
195
|
+
}
|
|
196
|
+
catch { /* not enabled */ }
|
|
197
|
+
try {
|
|
198
|
+
unlinkSync(getUnitPath());
|
|
199
|
+
}
|
|
200
|
+
catch { /* already gone */ }
|
|
201
|
+
try {
|
|
202
|
+
execSync('systemctl --user daemon-reload', { stdio: 'pipe' });
|
|
203
|
+
}
|
|
204
|
+
catch { /* best-effort */ }
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=linux-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linux-service.js","sourceRoot":"","sources":["../src/linux-service.ts"],"names":[],"mappings":"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"}
|
package/dist/logger.d.ts
CHANGED
|
@@ -17,4 +17,10 @@ export declare function logTagged(tag: string, ...args: unknown[]): void;
|
|
|
17
17
|
export declare function logError(...args: unknown[]): void;
|
|
18
18
|
/** Debug logging — only goes to file when --debug is enabled */
|
|
19
19
|
export declare function debug(tag: string, ...args: unknown[]): void;
|
|
20
|
+
/**
|
|
21
|
+
* Debug logging for events that repeat on a timer — an unrecognized OTel span
|
|
22
|
+
* batch, a periodic probe failure. Emits at most once per `minIntervalMs` per
|
|
23
|
+
* `key`, so `--debug` stays readable instead of thousands of lines a minute.
|
|
24
|
+
*/
|
|
25
|
+
export declare function debugThrottled(tag: string, key: string, minIntervalMs: number, ...args: unknown[]): void;
|
|
20
26
|
//# sourceMappingURL=logger.d.ts.map
|
package/dist/logger.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,SAAwC,GAAG,IAAI,CAIjF;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAEjD;AAYD,kFAAkF;AAClF,wBAAgB,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAS5C;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAS/D;AAED,6EAA6E;AAC7E,wBAAgB,QAAQ,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAOjD;AAED,gEAAgE;AAChE,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAI3D"}
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,SAAwC,GAAG,IAAI,CAIjF;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAEjD;AAYD,kFAAkF;AAClF,wBAAgB,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAS5C;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAS/D;AAED,6EAA6E;AAC7E,wBAAgB,QAAQ,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAOjD;AAED,gEAAgE;AAChE,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAI3D;AAID;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,MAAM,EACrB,GAAG,IAAI,EAAE,OAAO,EAAE,GACjB,IAAI,CAMN"}
|
package/dist/logger.js
CHANGED
|
@@ -68,4 +68,19 @@ export function debug(tag, ...args) {
|
|
|
68
68
|
const ts = new Date().toISOString().slice(11, 23); // HH:MM:SS.mmm
|
|
69
69
|
debugStream.write(`${ts} [${tag}] ${args.map(String).join(' ')}\n`);
|
|
70
70
|
}
|
|
71
|
+
const throttledDebugAt = new Map();
|
|
72
|
+
/**
|
|
73
|
+
* Debug logging for events that repeat on a timer — an unrecognized OTel span
|
|
74
|
+
* batch, a periodic probe failure. Emits at most once per `minIntervalMs` per
|
|
75
|
+
* `key`, so `--debug` stays readable instead of thousands of lines a minute.
|
|
76
|
+
*/
|
|
77
|
+
export function debugThrottled(tag, key, minIntervalMs, ...args) {
|
|
78
|
+
if (!debugEnabled || !debugStream)
|
|
79
|
+
return;
|
|
80
|
+
const now = Date.now();
|
|
81
|
+
if (now - (throttledDebugAt.get(key) ?? 0) < minIntervalMs)
|
|
82
|
+
return;
|
|
83
|
+
throttledDebugAt.set(key, now);
|
|
84
|
+
debug(tag, ...args);
|
|
85
|
+
}
|
|
71
86
|
//# sourceMappingURL=logger.js.map
|
package/dist/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAoB,MAAM,IAAI,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,IAAI,WAAW,GAAuB,IAAI,CAAC;AAC3C,IAAI,YAAY,GAAG,KAAK,CAAC;AACzB,IAAI,OAAO,GAAG,KAAK,CAAC;AAEpB;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,qBAAqB,CAAC;IACzE,WAAW,GAAG,iBAAiB,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IACtD,YAAY,GAAG,IAAI,CAAC;IACpB,WAAW,CAAC,KAAK,CAAC,oCAAoC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;AACtF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,OAAgB;IACzC,OAAO,GAAG,OAAO,CAAC;AACpB,CAAC;AAED;;;;;GAKG;AACH,SAAS,KAAK;IACZ,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAClC,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,GAAG,CAAC,GAAG,IAAe;IACpC,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,YAAY,IAAI,WAAW,EAAE,CAAC;YAChC,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAClD,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,UAAU,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnE,CAAC;QACD,OAAO;IACT,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,EAAE,gBAAgB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAW,EAAE,GAAG,IAAe;IACvD,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,YAAY,IAAI,WAAW,EAAE,CAAC;YAChC,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAClD,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtE,CAAC;QACD,OAAO;IACT,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,EAAE,KAAK,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC9E,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,QAAQ,CAAC,GAAG,IAAe;IACzC,MAAM,GAAG,GAAG,GAAG,KAAK,EAAE,uBAAuB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;IAC5E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,YAAY,IAAI,WAAW,EAAE,CAAC;QAChC,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAClD,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,YAAY,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,KAAK,CAAC,GAAW,EAAE,GAAG,IAAe;IACnD,IAAI,CAAC,YAAY,IAAI,CAAC,WAAW;QAAE,OAAO;IAC1C,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe;IAClE,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACtE,CAAC"}
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface DiscoveredDaemon {
|
|
2
|
+
host: string;
|
|
3
|
+
port: number;
|
|
4
|
+
token?: string;
|
|
5
|
+
projectName?: string;
|
|
6
|
+
/** Daemon advertises same-socket reverse control (always true for confirmed
|
|
7
|
+
* candidates — daemons without it are filtered during the /health confirm). */
|
|
8
|
+
sameSocketControl?: boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Browse the LAN for AgentDeck daemons. Collects services for `timeoutMs`, then
|
|
12
|
+
* confirms each via `/health` (keeps only `mode === 'daemon'`). A `hostHint`
|
|
13
|
+
* floats a matching candidate to the front of the list.
|
|
14
|
+
*/
|
|
15
|
+
export declare function discoverDaemons(opts?: {
|
|
16
|
+
timeoutMs?: number;
|
|
17
|
+
hostHint?: string;
|
|
18
|
+
}): Promise<DiscoveredDaemon[]>;
|
|
19
|
+
//# sourceMappingURL=mdns-discover.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mdns-discover.d.ts","sourceRoot":"","sources":["../src/mdns-discover.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;oFACgF;IAChF,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAmBD;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,IAAI,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CA0DnH"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mDNS/Bonjour browser — the consume side of `mdns.ts` (which only publishes).
|
|
3
|
+
*
|
|
4
|
+
* Lets a session bridge find a daemon hub on the LAN the same way the iOS and
|
|
5
|
+
* Android apps do: browse `_agentdeck._tcp`, read the TXT record, then confirm
|
|
6
|
+
* each candidate with a `/health` GET (which also yields the pairing token when
|
|
7
|
+
* the TXT omitted it). Mirrors `apple/AgentDeck/Net/BridgeDiscovery.swift`.
|
|
8
|
+
*
|
|
9
|
+
* Used only on the opt-in remote-attach path (`--remote-daemon`); the default
|
|
10
|
+
* local-only flow never imports this module.
|
|
11
|
+
*/
|
|
12
|
+
import Bonjour from 'bonjour-service';
|
|
13
|
+
import { debug } from './logger.js';
|
|
14
|
+
import { probeHealthAt } from './session-registry.js';
|
|
15
|
+
/** Reject addresses that can't be reached from another device. */
|
|
16
|
+
function isUsableAddress(addr) {
|
|
17
|
+
if (!addr)
|
|
18
|
+
return false;
|
|
19
|
+
if (addr.startsWith('127.') || addr === '::1')
|
|
20
|
+
return false; // loopback
|
|
21
|
+
if (addr.startsWith('169.254.'))
|
|
22
|
+
return false; // IPv4 link-local
|
|
23
|
+
if (/^fe80:/i.test(addr))
|
|
24
|
+
return false; // IPv6 link-local
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
/** Coerce a bonjour-service TXT value (string | Buffer | undefined) to string. */
|
|
28
|
+
function txtStr(v) {
|
|
29
|
+
if (v == null)
|
|
30
|
+
return undefined;
|
|
31
|
+
if (typeof v === 'string')
|
|
32
|
+
return v;
|
|
33
|
+
if (v instanceof Buffer)
|
|
34
|
+
return v.toString('utf-8');
|
|
35
|
+
return String(v);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Browse the LAN for AgentDeck daemons. Collects services for `timeoutMs`, then
|
|
39
|
+
* confirms each via `/health` (keeps only `mode === 'daemon'`). A `hostHint`
|
|
40
|
+
* floats a matching candidate to the front of the list.
|
|
41
|
+
*/
|
|
42
|
+
export async function discoverDaemons(opts) {
|
|
43
|
+
const timeoutMs = opts?.timeoutMs ?? 2500;
|
|
44
|
+
const instance = new Bonjour();
|
|
45
|
+
// Dedup by host:port — the same daemon shows up on every interface.
|
|
46
|
+
const candidates = new Map();
|
|
47
|
+
try {
|
|
48
|
+
await new Promise((resolve) => {
|
|
49
|
+
const browser = instance.find({ type: 'agentdeck' }, (service) => {
|
|
50
|
+
try {
|
|
51
|
+
const port = Number(txtStr(service.txt?.port)) || service.port;
|
|
52
|
+
if (!port)
|
|
53
|
+
return;
|
|
54
|
+
const txtToken = txtStr(service.txt?.token);
|
|
55
|
+
const project = txtStr(service.txt?.project);
|
|
56
|
+
// Prefer a resolvable IP from the service addresses; fall back to the
|
|
57
|
+
// TXT `ip` the daemon self-reported (may be stale, but better than nothing).
|
|
58
|
+
const addrs = (service.addresses ?? []).filter(isUsableAddress);
|
|
59
|
+
const ipv4 = addrs.find((a) => !a.includes(':'));
|
|
60
|
+
const host = ipv4 ?? addrs[0] ?? txtStr(service.txt?.ip);
|
|
61
|
+
if (!host || !isUsableAddress(host))
|
|
62
|
+
return;
|
|
63
|
+
candidates.set(`${host}:${port}`, { host, port, txtToken, project });
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
debug('mDNS', `discover: bad service record ignored (${String(err)})`);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
const timer = setTimeout(() => {
|
|
70
|
+
try {
|
|
71
|
+
browser.stop();
|
|
72
|
+
}
|
|
73
|
+
catch { /* ignore */ }
|
|
74
|
+
resolve();
|
|
75
|
+
}, timeoutMs);
|
|
76
|
+
timer.unref?.();
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
finally {
|
|
80
|
+
try {
|
|
81
|
+
instance.destroy();
|
|
82
|
+
}
|
|
83
|
+
catch { /* ignore */ }
|
|
84
|
+
}
|
|
85
|
+
// Confirm reachability + resolve token from /health (the daemon's pairingToken
|
|
86
|
+
// is authoritative; the TXT token can lag a token rotation). Candidates that
|
|
87
|
+
// don't advertise sameSocketControl (e.g. the Swift App Store daemon) are
|
|
88
|
+
// dropped here: selecting one would register a remote session the daemon has
|
|
89
|
+
// no control frames to drive — it must never be auto-selected.
|
|
90
|
+
const confirmed = [];
|
|
91
|
+
await Promise.all([...candidates.values()].map(async (c) => {
|
|
92
|
+
const health = await probeHealthAt(c.host, c.port);
|
|
93
|
+
if (health?.mode !== 'daemon')
|
|
94
|
+
return;
|
|
95
|
+
if (health.sameSocketControl !== true) {
|
|
96
|
+
debug('mDNS', `discover: ${c.host}:${c.port} lacks sameSocketControl — skipped`);
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
const token = typeof health.pairingToken === 'string' ? health.pairingToken : c.txtToken;
|
|
100
|
+
confirmed.push({ host: c.host, port: c.port, token, projectName: c.project, sameSocketControl: true });
|
|
101
|
+
}));
|
|
102
|
+
// Float an explicit host hint to the front so callers can pin a node.
|
|
103
|
+
if (opts?.hostHint) {
|
|
104
|
+
confirmed.sort((a, b) => (a.host === opts.hostHint ? -1 : b.host === opts.hostHint ? 1 : 0));
|
|
105
|
+
}
|
|
106
|
+
debug('mDNS', `discover: ${confirmed.length} daemon(s) on LAN`);
|
|
107
|
+
return confirmed;
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=mdns-discover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mdns-discover.js","sourceRoot":"","sources":["../src/mdns-discover.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-catalog.d.ts","sourceRoot":"","sources":["../src/model-catalog.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAGpD,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AA0CD;;;;GAIG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAAC,GAAG,EAAE,aAAa,EAAE,CAAA;CAAE,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"model-catalog.d.ts","sourceRoot":"","sources":["../src/model-catalog.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAGpD,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AA0CD;;;;GAIG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAAC,GAAG,EAAE,aAAa,EAAE,CAAA;CAAE,GAAG,IAAI,CAAC,CA8ChH;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAMlE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAI3C"}
|
package/dist/model-catalog.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-catalog.js","sourceRoot":"","sources":["../src/model-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAkBlD,QAAQ;AACR,IAAI,aAAa,GAA+B,IAAI,CAAC;AACrD,IAAI,SAAS,GAA2B,IAAI,CAAC;AAC7C,IAAI,SAAS,GAAG,CAAC,CAAC;AAClB,MAAM,YAAY,GAAG,MAAM,CAAC;AAE5B,IAAI,YAAY,GAAkF,IAAI,CAAC;AAEvG;;;;;GAKG;AACH,SAAS,SAAS,CAAC,IAAc;IAC/B,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAC5C,IAAI,KAAK;YAAE,OAAO,YAAY,KAAK,CAAC,CAAC,CAAC,EAA0B,CAAC;IACnE,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,SAAS,SAAS,CAAC,MAAuB;IACxC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxB,GAAG,EAAE,CAAC,CAAC,GAAG;QACV,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;QAC7B,SAAS,EAAE,CAAC,CAAC,SAAS,KAAK,KAAK;KACjC,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,IAAI,aAAa,IAAI,SAAS,IAAI,GAAG,GAAG,SAAS,GAAG,YAAY,EAAE,CAAC;QACjE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;IACpD,CAAC;IAED,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,YAAY,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QACrC,QAAQ,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE;YACjD,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,OAAO;YACjB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"model-catalog.js","sourceRoot":"","sources":["../src/model-catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,7 +16,7 @@ export class AdbModule {
|
|
|
16
16
|
// auto: check if adb is available. Use `adb version` instead of `which`
|
|
17
17
|
// so detection works on Windows too (which lacks `which`).
|
|
18
18
|
try {
|
|
19
|
-
execSync('adb version', { stdio: 'pipe', timeout: 2000 });
|
|
19
|
+
execSync('adb version', { stdio: 'pipe', timeout: 2000, windowsHide: true });
|
|
20
20
|
return true;
|
|
21
21
|
}
|
|
22
22
|
catch {
|
|
@@ -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,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,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,CAAC,WAAW,GAAG,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtD,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"}
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import type { EnrichedSession } from './session-aggregator.js';
|
|
2
|
+
/**
|
|
3
|
+
* Id of the virtual Gateway session row. Defined here because this injector is
|
|
4
|
+
* what creates it; import it instead of retyping the literal, which is how a
|
|
5
|
+
* comparison against it silently stops matching.
|
|
6
|
+
*/
|
|
7
|
+
export declare const OPENCLAW_SESSION_ID = "openclaw-gateway";
|
|
2
8
|
export interface InjectOpenClawOptions {
|
|
3
9
|
/** SSOT gate — inject only when the Gateway is authenticated. */
|
|
4
10
|
gatewayConnected: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openclaw-session.d.ts","sourceRoot":"","sources":["../src/openclaw-session.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,MAAM,WAAW,qBAAqB;IACpC,iEAAiE;IACjE,gBAAgB,EAAE,OAAO,CAAC;IAC1B,8EAA8E;IAC9E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,SAAS,CAAC;CACzB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,eAAe,EAAE,EAC3B,IAAI,EAAE,qBAAqB,GAC1B,eAAe,EAAE,CAcnB"}
|
|
1
|
+
{"version":3,"file":"openclaw-session.d.ts","sourceRoot":"","sources":["../src/openclaw-session.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,qBAAqB,CAAC;AAEtD,MAAM,WAAW,qBAAqB;IACpC,iEAAiE;IACjE,gBAAgB,EAAE,OAAO,CAAC;IAC1B,8EAA8E;IAC9E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,SAAS,CAAC;CACzB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,eAAe,EAAE,EAC3B,IAAI,EAAE,qBAAqB,GAC1B,eAAe,EAAE,CAcnB"}
|
package/dist/openclaw-session.js
CHANGED
|
@@ -5,6 +5,12 @@
|
|
|
5
5
|
* drift. Mirror of Swift `buildSessionsListEvent`.
|
|
6
6
|
*/
|
|
7
7
|
import { isOpenClawSessionActive, hasOpenClawSession } from '@agentdeck/shared';
|
|
8
|
+
/**
|
|
9
|
+
* Id of the virtual Gateway session row. Defined here because this injector is
|
|
10
|
+
* what creates it; import it instead of retyping the literal, which is how a
|
|
11
|
+
* comparison against it silently stops matching.
|
|
12
|
+
*/
|
|
13
|
+
export const OPENCLAW_SESSION_ID = 'openclaw-gateway';
|
|
8
14
|
/**
|
|
9
15
|
* Append the virtual `openclaw` session iff the Gateway is authenticated
|
|
10
16
|
* (`gatewayConnected`) and one isn't already present. Reachability
|
|
@@ -17,7 +23,7 @@ export function injectOpenClawSession(sessions, opts) {
|
|
|
17
23
|
if (hasOpenClawSession(sessions))
|
|
18
24
|
return sessions;
|
|
19
25
|
const injected = {
|
|
20
|
-
id:
|
|
26
|
+
id: OPENCLAW_SESSION_ID,
|
|
21
27
|
port: 18789,
|
|
22
28
|
projectName: opts.projectName ?? 'OpenClaw',
|
|
23
29
|
agentType: 'openclaw',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openclaw-session.js","sourceRoot":"","sources":["../src/openclaw-session.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"openclaw-session.js","sourceRoot":"","sources":["../src/openclaw-session.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAGhF;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,kBAAkB,CAAC;AAYtD;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CACnC,QAA2B,EAC3B,IAA2B;IAE3B,IAAI,CAAC,uBAAuB,CAAC,EAAE,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC3F,IAAI,kBAAkB,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IAClD,MAAM,QAAQ,GAAoB;QAChC,EAAE,EAAE,mBAAmB;QACvB,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,UAAU;QAC3C,SAAS,EAAE,UAAU;QACrB,KAAK,EAAE,IAAI;KACZ,CAAC;IACF,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;QAAE,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IAC1D,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;QAAE,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IACtE,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;QAAE,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IAC5E,OAAO,CAAC,GAAG,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACjC,CAAC"}
|
package/dist/output-parser.d.ts
CHANGED
|
@@ -19,6 +19,8 @@ export declare class OutputParser extends EventEmitter {
|
|
|
19
19
|
private lastCursorIndex;
|
|
20
20
|
private pendingAnsi;
|
|
21
21
|
private interactiveCooldown;
|
|
22
|
+
private interactivePromptActive;
|
|
23
|
+
private interactivePromptNavigable;
|
|
22
24
|
private remoteUrl;
|
|
23
25
|
feed(rawData: string): void;
|
|
24
26
|
private processFeed;
|
|
@@ -80,6 +82,13 @@ export declare class OutputParser extends EventEmitter {
|
|
|
80
82
|
private resetOptionTimer;
|
|
81
83
|
/** Brief cooldown after permission/diff emit or navigation — prevents false idle from PTY echo */
|
|
82
84
|
startInteractiveCooldown(): void;
|
|
85
|
+
/**
|
|
86
|
+
* Observe input forwarded to the managed PTY. Navigable prompts remain active
|
|
87
|
+
* through arrow-key movement and resolve on Enter/Esc/Ctrl+C. Shortcut-style
|
|
88
|
+
* prompts resolve on any non-navigation input.
|
|
89
|
+
*/
|
|
90
|
+
notifyUserInput(data: string): void;
|
|
91
|
+
private clearInteractivePrompt;
|
|
83
92
|
private resetInteractiveCooldown;
|
|
84
93
|
/**
|
|
85
94
|
* Pre-seed the project name resolved by the bridge (git-aware). With a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output-parser.d.ts","sourceRoot":"","sources":["../src/output-parser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AA8ItC,qBAAa,YAAa,SAAQ,YAAY;IAC5C,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,YAAY,CAA8C;IAClE,OAAO,CAAC,SAAS,CAA8C;IAC/D,OAAO,CAAC,WAAW,CAA8C;IACjE,OAAO,CAAC,WAAW,CAAuB;IAC1C,2EAA2E;IAC3E,OAAO,CAAC,iBAAiB,CAAuB;IAChD,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,WAAW,CAAuB;IAG1C,OAAO,CAAC,aAAa,CAAS;IAE9B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,eAAe,CAA8C;IAErE,OAAO,CAAC,oBAAoB,CAA8C;IAC1E,OAAO,CAAC,mBAAmB,CAAuB;IAElD,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,WAAW,CAAM;IAGzB,OAAO,CAAC,mBAAmB,CAA8C;
|
|
1
|
+
{"version":3,"file":"output-parser.d.ts","sourceRoot":"","sources":["../src/output-parser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AA8ItC,qBAAa,YAAa,SAAQ,YAAY;IAC5C,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,YAAY,CAA8C;IAClE,OAAO,CAAC,SAAS,CAA8C;IAC/D,OAAO,CAAC,WAAW,CAA8C;IACjE,OAAO,CAAC,WAAW,CAAuB;IAC1C,2EAA2E;IAC3E,OAAO,CAAC,iBAAiB,CAAuB;IAChD,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,WAAW,CAAuB;IAG1C,OAAO,CAAC,aAAa,CAAS;IAE9B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,eAAe,CAA8C;IAErE,OAAO,CAAC,oBAAoB,CAA8C;IAC1E,OAAO,CAAC,mBAAmB,CAAuB;IAElD,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,WAAW,CAAM;IAGzB,OAAO,CAAC,mBAAmB,CAA8C;IAMzE,OAAO,CAAC,uBAAuB,CAAS;IACxC,OAAO,CAAC,0BAA0B,CAAS;IAC3C,OAAO,CAAC,SAAS,CAAuB;IAExC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAqB3B,OAAO,CAAC,WAAW;IAmCnB,0FAA0F;IAC1F,OAAO,CAAC,eAAe;IAqEvB,wDAAwD;IACxD,OAAO,CAAC,kBAAkB;IAgE1B,6CAA6C;IAC7C,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,cAAc;IAyUtB,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,cAAc;IA+BtB,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,eAAe;IA6BvB,OAAO,CAAC,cAAc;IAuCtB,OAAO,CAAC,mBAAmB;IAmB3B,iFAAiF;IACjF,oBAAoB,IAAI,IAAI;IAa5B,sEAAsE;IACtE,OAAO,CAAC,sBAAsB;IAuB9B;;;sFAGkF;IAClF,OAAO,CAAC,0BAA0B;IAYlC;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,mBAAmB;IAsC3B,8DAA8D;IAC9D,OAAO,CAAC,gBAAgB;IAoBxB,qDAAqD;IACrD,OAAO,CAAC,aAAa;IAYrB,+FAA+F;IAC/F,OAAO,CAAC,mBAAmB;IAK3B,oFAAoF;IACpF,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,YAAY;IAuJpB,OAAO,CAAC,qBAAqB;IAO7B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAwDxB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,gBAAgB;IAIxB,kGAAkG;IAClG,wBAAwB,IAAI,IAAI;IAOhC;;;;OAIG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAenC,OAAO,CAAC,sBAAsB;IAK9B,OAAO,CAAC,wBAAwB;IAIhC;;;;;;;OAOG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOnC,cAAc,IAAI,MAAM,GAAG,IAAI;IAC/B,YAAY,IAAI,MAAM,GAAG,IAAI;IAC7B,cAAc,IAAI,MAAM,GAAG,IAAI;IAE/B,KAAK,IAAI,IAAI;CA0Bd"}
|