@agentconnect.md/daemon 1.0.0-rc.22 → 1.0.0-rc.221

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.
Files changed (55) hide show
  1. package/dist/acp-host-zyZ_j0yY.js +10570 -0
  2. package/dist/acp-host-zyZ_j0yY.js.map +1 -0
  3. package/dist/agent-list-Vx-p1X3q.js +21 -0
  4. package/dist/agent-list-Vx-p1X3q.js.map +1 -0
  5. package/dist/bridge-DoUrmBw9.js +9904 -0
  6. package/dist/bridge-DoUrmBw9.js.map +1 -0
  7. package/dist/chat-CqfkPkqK.js +79 -0
  8. package/dist/chat-CqfkPkqK.js.map +1 -0
  9. package/dist/commander-B5QVEFzH.js +2965 -0
  10. package/dist/commander-B5QVEFzH.js.map +1 -0
  11. package/dist/esm-DrGCKNjx.js +1516 -0
  12. package/dist/esm-DrGCKNjx.js.map +1 -0
  13. package/dist/execAsync-C-9b-eWN.js +12 -0
  14. package/dist/execAsync-C-9b-eWN.js.map +1 -0
  15. package/dist/getMachineId-bsd-CfqSzACM.js +29 -0
  16. package/dist/getMachineId-bsd-CfqSzACM.js.map +1 -0
  17. package/dist/getMachineId-darwin-CDKafrUs.js +26 -0
  18. package/dist/getMachineId-darwin-CDKafrUs.js.map +1 -0
  19. package/dist/getMachineId-linux-DG3AvXtg.js +22 -0
  20. package/dist/getMachineId-linux-DG3AvXtg.js.map +1 -0
  21. package/dist/getMachineId-unsupported-BIPpTXqb.js +17 -0
  22. package/dist/getMachineId-unsupported-BIPpTXqb.js.map +1 -0
  23. package/dist/getMachineId-win-DNO3uByP.js +28 -0
  24. package/dist/getMachineId-win-DNO3uByP.js.map +1 -0
  25. package/dist/git-credential-BfkyzKn2.js +99 -0
  26. package/dist/git-credential-BfkyzKn2.js.map +1 -0
  27. package/dist/gitcred-server-Dcsq6QJe.js +236 -0
  28. package/dist/gitcred-server-Dcsq6QJe.js.map +1 -0
  29. package/dist/index.js +67364 -79446
  30. package/dist/index.js.map +1 -1
  31. package/dist/ipc-2Xbxe7uu.js +35 -0
  32. package/dist/ipc-2Xbxe7uu.js.map +1 -0
  33. package/dist/load-agents-C1m5Y9n_.js +317 -0
  34. package/dist/load-agents-C1m5Y9n_.js.map +1 -0
  35. package/dist/lock-CA9Bm8_s.js +66 -0
  36. package/dist/lock-CA9Bm8_s.js.map +1 -0
  37. package/dist/login-DUhkVhAr.js +229 -0
  38. package/dist/login-DUhkVhAr.js.map +1 -0
  39. package/dist/paths-CcRUjFjy.js +2 -0
  40. package/dist/paths-DEcUO8lC.js +43 -0
  41. package/dist/paths-DEcUO8lC.js.map +1 -0
  42. package/dist/rolldown-runtime-CE-6LUnI.js +44 -0
  43. package/dist/run-foreground-PSOzCSP8.js +2 -0
  44. package/dist/run-foreground-mvTzCScX.js +84591 -0
  45. package/dist/run-foreground-mvTzCScX.js.map +1 -0
  46. package/dist/schemas-DujcoO0q.js +4357 -0
  47. package/dist/schemas-DujcoO0q.js.map +1 -0
  48. package/dist/service-6w0WKhdx.js +2 -0
  49. package/dist/service-BQVw7wbz.js +245 -0
  50. package/dist/service-BQVw7wbz.js.map +1 -0
  51. package/dist/src-DDtlVutj.js +811 -0
  52. package/dist/src-DDtlVutj.js.map +1 -0
  53. package/dist/version-DGaRXjBK.js +7 -0
  54. package/dist/version-DGaRXjBK.js.map +1 -0
  55. package/package.json +3 -2
@@ -0,0 +1,229 @@
1
+ import { t as DAEMON_VERSION } from "./version-DGaRXjBK.js";
2
+ import { c as ConfigSchema } from "./load-agents-C1m5Y9n_.js";
3
+ import { l as resolveRoot, t as configPath } from "./paths-DEcUO8lC.js";
4
+ import { f as buildEnvelope, l as isFrame, m as encode, p as decodeEnvelope } from "./acp-host-zyZ_j0yY.js";
5
+ import { n as ClientTransport, t as runForeground } from "./run-foreground-mvTzCScX.js";
6
+ import { n as resolveController } from "./service-BQVw7wbz.js";
7
+ import { dirname } from "node:path";
8
+ import { fileURLToPath } from "node:url";
9
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
10
+ import { createInterface } from "node:readline";
11
+ //#region src/cp/auth-probe.ts
12
+ /**
13
+ * `probeAuth` — a one-shot CP auth check used by `agentconnect login`. It dials
14
+ * the CP, sends ONLY the `auth` frame (no `register`), and resolves with the
15
+ * authoritative daemonId from `auth/ok`, or a human-readable failure reason on
16
+ * a `4401` close, a correlated `error`, a dial failure, or a timeout. It always
17
+ * closes the socket and never leaves a connection open.
18
+ */
19
+ async function probeAuth(opts) {
20
+ const timeoutMs = opts.timeoutMs ?? 1e4;
21
+ const dial = opts.connect ?? (() => ClientTransport.dial(opts.url));
22
+ let transport;
23
+ try {
24
+ transport = await dial();
25
+ } catch (err) {
26
+ return {
27
+ ok: false,
28
+ reason: `cannot reach ${opts.url}: ${err.message}`
29
+ };
30
+ }
31
+ const authPayload = {
32
+ apiKey: opts.token,
33
+ agentVersion: opts.agentVersion ?? "probe"
34
+ };
35
+ if (opts.daemonId) authPayload.daemonId = opts.daemonId;
36
+ const frame = buildEnvelope("auth", authPayload);
37
+ return await new Promise((resolve) => {
38
+ let settled = false;
39
+ const done = (r) => {
40
+ if (settled) return;
41
+ settled = true;
42
+ clearTimeout(timer);
43
+ try {
44
+ transport.close(1e3, "probe done");
45
+ } catch {}
46
+ resolve(r);
47
+ };
48
+ const timer = setTimeout(() => done({
49
+ ok: false,
50
+ reason: `timed out after ${timeoutMs}ms waiting for auth/ok`
51
+ }), timeoutMs);
52
+ transport.onMessage((text) => {
53
+ const decoded = decodeEnvelope(text);
54
+ if (!decoded.ok) return;
55
+ const f = decoded.frame;
56
+ if (f.corr !== frame.id) return;
57
+ if (f.type === "error") {
58
+ const e = f.payload;
59
+ done({
60
+ ok: false,
61
+ reason: `${e.code}: ${e.message}`
62
+ });
63
+ return;
64
+ }
65
+ if (isFrame("auth/ok")(f)) {
66
+ const ok = f.payload;
67
+ done({
68
+ ok: true,
69
+ daemonId: ok.daemonId
70
+ });
71
+ }
72
+ });
73
+ transport.onClose((code) => {
74
+ if (code === 4401) done({
75
+ ok: false,
76
+ reason: "authentication failed (4401) — check the daemon token"
77
+ });
78
+ else done({
79
+ ok: false,
80
+ reason: `connection closed (${code}) before auth/ok`
81
+ });
82
+ });
83
+ transport.send(encode(frame));
84
+ });
85
+ }
86
+ //#endregion
87
+ //#region src/cli/login.ts
88
+ /**
89
+ * `agentconnect login` — interactive onboarding. It tests the Control Plane auth
90
+ * flow, persists credentials only on success, then offers to install the OS
91
+ * service. If installed it starts the service (`up`) and returns; otherwise it
92
+ * runs the daemon in the foreground (the same path as `agentconnect run`).
93
+ *
94
+ * `persistCredentials` is the pure config-merge half (token-only onboarding:
95
+ * `daemonId` is omitted unless given — the first connect adopts it from the
96
+ * token's `sub`). `runLogin` is the orchestrator, with injectable deps for tests.
97
+ */
98
+ /** Merge url/token into config.json (validated), returning the written path. */
99
+ function persistCredentials(opts) {
100
+ const root = resolveRoot(opts.root);
101
+ const file = opts.configPath ?? configPath(root);
102
+ const raw = existsSync(file) ? JSON.parse(readFileSync(file, "utf8")) : { version: 1 };
103
+ raw.controlPlane = {
104
+ ...raw.controlPlane ?? {},
105
+ url: opts.cpUrl,
106
+ key: opts.cpKey,
107
+ enabled: true
108
+ };
109
+ if (opts.daemonId) raw.daemonId = opts.daemonId;
110
+ ConfigSchema.parse(raw);
111
+ mkdirSync(dirname(file), { recursive: true });
112
+ writeFileSync(file, JSON.stringify(raw, null, 2) + "\n");
113
+ return file;
114
+ }
115
+ /**
116
+ * Build the InstallOpts for the OS service installer.
117
+ *
118
+ * Exported as a pure helper so it can be unit-tested independently of the
119
+ * full `runLogin` orchestration. The caller (index.ts) passes `cliEntry` so
120
+ * the correct bundle path always flows through; if omitted we fall back to
121
+ * `import.meta.url` (correct only when login.ts is the entry, e.g. in tests).
122
+ */
123
+ function buildInstallOpts(opts) {
124
+ return {
125
+ execPath: process.execPath,
126
+ cliEntry: opts.cliEntry ?? fileURLToPath(import.meta.url),
127
+ includeRootEnv: resolveRoot(opts.root) !== resolveRoot(void 0)
128
+ };
129
+ }
130
+ function realDeps(opts) {
131
+ return {
132
+ probe: (o) => probeAuth({
133
+ url: o.url,
134
+ token: o.token,
135
+ agentVersion: DAEMON_VERSION
136
+ }),
137
+ installService: async () => {
138
+ const controller = resolveController({ root: opts.root });
139
+ await controller.install(buildInstallOpts(opts));
140
+ await controller.up();
141
+ },
142
+ runForeground: () => runForeground({
143
+ root: opts.root,
144
+ overrides: {
145
+ cpUrl: opts.cpUrl,
146
+ cpKey: opts.cpKey,
147
+ daemonId: opts.daemonId
148
+ }
149
+ }),
150
+ out: process.stdout,
151
+ input: process.stdin,
152
+ isTTY: Boolean(process.stdin.isTTY)
153
+ };
154
+ }
155
+ /** Read the next line from a readline interface via async iterator. */
156
+ async function nextLine(iter, prompt, out) {
157
+ out.write(prompt);
158
+ const { value, done } = await iter.next();
159
+ if (done) throw new Error(`unexpected end of input waiting for: ${prompt}`);
160
+ return value.trim();
161
+ }
162
+ async function runLogin(opts, partial = {}) {
163
+ const deps = {
164
+ ...realDeps(opts),
165
+ ...partial
166
+ };
167
+ const { out } = deps;
168
+ if (!deps.isTTY) {
169
+ if (!opts.cpUrl) throw new Error("login requires --cp-url <url>");
170
+ if (!opts.cpKey) throw new Error("login requires --cp-key <key>");
171
+ const r = await deps.probe({
172
+ url: opts.cpUrl,
173
+ token: opts.cpKey
174
+ });
175
+ if (!r.ok) throw new Error(`authentication failed: ${r.reason}`);
176
+ persistCredentials({
177
+ ...opts,
178
+ cpUrl: opts.cpUrl,
179
+ cpKey: opts.cpKey
180
+ });
181
+ out.write(`✓ authenticated${r.daemonId ? ` (daemon ${r.daemonId})` : ""} — credentials saved\n`);
182
+ return;
183
+ }
184
+ if (opts.configPath) throw new Error("interactive login does not support --config — use --root <dir> so the daemon and the installed service read the same config");
185
+ const rl = createInterface({
186
+ input: deps.input,
187
+ output: out
188
+ });
189
+ const iter = rl[Symbol.asyncIterator]();
190
+ let url = opts.cpUrl;
191
+ let token = opts.cpKey;
192
+ try {
193
+ if (!url) url = await nextLine(iter, "Control Plane URL: ", out);
194
+ for (let attempt = 0;; attempt++) {
195
+ if (!token) token = await nextLine(iter, "Daemon API key: ", out);
196
+ out.write(`Testing connection to ${url}…\n`);
197
+ const r = await deps.probe({
198
+ url,
199
+ token
200
+ });
201
+ if (r.ok) {
202
+ out.write(`✓ authenticated${r.daemonId ? ` (daemon ${r.daemonId})` : ""}\n`);
203
+ break;
204
+ }
205
+ out.write(`✗ ${r.reason}\n`);
206
+ if (attempt >= 1) throw new Error("authentication failed");
207
+ token = void 0;
208
+ }
209
+ persistCredentials({
210
+ ...opts,
211
+ cpUrl: url,
212
+ cpKey: token
213
+ });
214
+ const ans = (await nextLine(iter, "Install AgentConnect as a background service? (y/N) ", out)).toLowerCase();
215
+ if (ans === "y" || ans === "yes") {
216
+ await deps.installService();
217
+ out.write("Service installed and started. Manage it with `agentconnect up` / `down` / `status`.\n");
218
+ return;
219
+ }
220
+ out.write("Starting in the foreground (Ctrl-C to stop)…\n");
221
+ } finally {
222
+ rl.close();
223
+ }
224
+ await deps.runForeground();
225
+ }
226
+ //#endregion
227
+ export { buildInstallOpts, persistCredentials, runLogin };
228
+
229
+ //# sourceMappingURL=login-DUhkVhAr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login-DUhkVhAr.js","names":["realRunForeground"],"sources":["../src/cp/auth-probe.ts","../src/cli/login.ts"],"sourcesContent":["/**\n * `probeAuth` — a one-shot CP auth check used by `agentconnect login`. It dials\n * the CP, sends ONLY the `auth` frame (no `register`), and resolves with the\n * authoritative daemonId from `auth/ok`, or a human-readable failure reason on\n * a `4401` close, a correlated `error`, a dial failure, or a timeout. It always\n * closes the socket and never leaves a connection open.\n */\nimport { buildEnvelope, decodeEnvelope, encode, isFrame } from '@agentconnect.md/protocol'\nimport { ClientTransport, type Transport } from './transport.js'\n\nexport interface ProbeResult {\n ok: boolean\n daemonId?: string\n reason?: string\n}\n\nexport interface ProbeOpts {\n url: string\n token: string\n daemonId?: string\n agentVersion?: string\n timeoutMs?: number\n /** Injectable for tests; defaults to dialing the real WebSocket. */\n connect?: () => Promise<Transport>\n}\n\nexport async function probeAuth(opts: ProbeOpts): Promise<ProbeResult> {\n const timeoutMs = opts.timeoutMs ?? 10_000\n const dial = opts.connect ?? (() => ClientTransport.dial(opts.url))\n\n let transport: Transport\n try {\n transport = await dial()\n } catch (err) {\n return { ok: false, reason: `cannot reach ${opts.url}: ${(err as Error).message}` }\n }\n\n const authPayload: Record<string, unknown> = {\n apiKey: opts.token,\n agentVersion: opts.agentVersion ?? 'probe'\n }\n if (opts.daemonId) authPayload.daemonId = opts.daemonId\n const frame = buildEnvelope('auth', authPayload)\n\n return await new Promise<ProbeResult>((resolve) => {\n let settled = false\n const done = (r: ProbeResult): void => {\n if (settled) return\n settled = true\n clearTimeout(timer)\n try {\n transport.close(1000, 'probe done')\n } catch {\n // socket may already be closed\n }\n resolve(r)\n }\n\n const timer = setTimeout(\n () => done({ ok: false, reason: `timed out after ${timeoutMs}ms waiting for auth/ok` }),\n timeoutMs\n )\n\n transport.onMessage((text) => {\n const decoded = decodeEnvelope(text)\n if (!decoded.ok) return\n const f = decoded.frame\n if (f.corr !== frame.id) return\n if (f.type === 'error') {\n const e = f.payload as { code: string; message: string }\n done({ ok: false, reason: `${e.code}: ${e.message}` })\n return\n }\n if (isFrame('auth/ok')(f)) {\n const ok = f.payload as { daemonId: string }\n done({ ok: true, daemonId: ok.daemonId })\n }\n })\n\n transport.onClose((code) => {\n if (code === 4401) done({ ok: false, reason: 'authentication failed (4401) — check the daemon token' })\n else done({ ok: false, reason: `connection closed (${code}) before auth/ok` })\n })\n\n transport.send(encode(frame))\n })\n}\n","/**\n * `agentconnect login` — interactive onboarding. It tests the Control Plane auth\n * flow, persists credentials only on success, then offers to install the OS\n * service. If installed it starts the service (`up`) and returns; otherwise it\n * runs the daemon in the foreground (the same path as `agentconnect run`).\n *\n * `persistCredentials` is the pure config-merge half (token-only onboarding:\n * `daemonId` is omitted unless given — the first connect adopts it from the\n * token's `sub`). `runLogin` is the orchestrator, with injectable deps for tests.\n */\nimport { readFileSync, existsSync, writeFileSync, mkdirSync } from 'node:fs'\nimport { dirname } from 'node:path'\nimport { createInterface } from 'node:readline'\nimport { fileURLToPath } from 'node:url'\nimport { ConfigSchema } from '../config/config-schema.js'\nimport { resolveRoot, configPath } from '../paths.js'\nimport { DAEMON_VERSION } from '../version.js'\nimport { probeAuth, type ProbeResult } from '../cp/auth-probe.js'\nimport { resolveController, type InstallOpts } from '../service/index.js'\nimport { runForeground as realRunForeground } from './run-foreground.js'\n\nexport interface PersistCredsOpts {\n cpUrl: string\n cpKey: string\n daemonId?: string\n root?: string\n configPath?: string\n}\n\n/** Merge url/token into config.json (validated), returning the written path. */\nexport function persistCredentials(opts: PersistCredsOpts): string {\n const root = resolveRoot(opts.root)\n const file = opts.configPath ?? configPath(root)\n const raw: Record<string, unknown> = existsSync(file) ? JSON.parse(readFileSync(file, 'utf8')) : { version: 1 }\n\n const cp = (raw.controlPlane as Record<string, unknown> | undefined) ?? {}\n raw.controlPlane = { ...cp, url: opts.cpUrl, key: opts.cpKey, enabled: true }\n if (opts.daemonId) raw.daemonId = opts.daemonId\n\n ConfigSchema.parse(raw) // fail before writing if the merge is invalid\n\n mkdirSync(dirname(file), { recursive: true })\n writeFileSync(file, JSON.stringify(raw, null, 2) + '\\n')\n return file\n}\n\nexport interface RunLoginOpts {\n cpUrl?: string\n cpKey?: string\n daemonId?: string\n root?: string\n configPath?: string\n /** The resolved CLI entry path. Must be supplied by the CLI entry point\n * (index.ts) so the correct bundle path is used rather than inferring it\n * from login.ts's own import.meta.url (which is the same bundle but the\n * `../` path calculation would be wrong). Falls back to import.meta.url\n * for the pure test path where login.ts is loaded standalone. */\n cliEntry?: string\n}\n\n/**\n * Build the InstallOpts for the OS service installer.\n *\n * Exported as a pure helper so it can be unit-tested independently of the\n * full `runLogin` orchestration. The caller (index.ts) passes `cliEntry` so\n * the correct bundle path always flows through; if omitted we fall back to\n * `import.meta.url` (correct only when login.ts is the entry, e.g. in tests).\n */\nexport function buildInstallOpts(opts: { root?: string; cliEntry?: string }): InstallOpts {\n return {\n execPath: process.execPath,\n cliEntry: opts.cliEntry ?? fileURLToPath(import.meta.url),\n includeRootEnv: resolveRoot(opts.root) !== resolveRoot(undefined)\n }\n}\n\nexport interface LoginDeps {\n probe: (o: { url: string; token: string }) => Promise<ProbeResult>\n installService: () => Promise<void>\n runForeground: () => Promise<void>\n out: NodeJS.WritableStream\n input: NodeJS.ReadableStream\n isTTY: boolean\n}\n\nfunction realDeps(opts: RunLoginOpts): LoginDeps {\n return {\n probe: (o) => probeAuth({ url: o.url, token: o.token, agentVersion: DAEMON_VERSION }),\n installService: async () => {\n const controller = resolveController({ root: opts.root })\n await controller.install(buildInstallOpts(opts))\n await controller.up()\n },\n runForeground: () =>\n realRunForeground({\n root: opts.root,\n overrides: { cpUrl: opts.cpUrl, cpKey: opts.cpKey, daemonId: opts.daemonId }\n }),\n out: process.stdout,\n input: process.stdin,\n isTTY: Boolean(process.stdin.isTTY)\n }\n}\n\n/** Read the next line from a readline interface via async iterator. */\nasync function nextLine(\n iter: AsyncIterableIterator<string>,\n prompt: string,\n out: NodeJS.WritableStream\n): Promise<string> {\n out.write(prompt)\n const { value, done } = await iter.next()\n if (done) throw new Error(`unexpected end of input waiting for: ${prompt}`)\n return (value as string).trim()\n}\n\nexport async function runLogin(opts: RunLoginOpts, partial: Partial<LoginDeps> = {}): Promise<void> {\n const deps: LoginDeps = { ...realDeps(opts), ...partial }\n const { out } = deps\n\n // ── Non-interactive: flags required; probe; persist. No prompts, no handoff. ──\n if (!deps.isTTY) {\n if (!opts.cpUrl) throw new Error('login requires --cp-url <url>')\n if (!opts.cpKey) throw new Error('login requires --cp-key <key>')\n const r = await deps.probe({ url: opts.cpUrl, token: opts.cpKey })\n if (!r.ok) throw new Error(`authentication failed: ${r.reason}`)\n persistCredentials({ ...opts, cpUrl: opts.cpUrl, cpKey: opts.cpKey })\n out.write(`✓ authenticated${r.daemonId ? ` (daemon ${r.daemonId})` : ''} — credentials saved\\n`)\n return\n }\n\n // Both interactive handoffs read `<root>/config.json`: the installed service\n // runs `… run` (no `--config`), and the foreground `Daemon` loads by root. A\n // custom `--config` would persist credentials the daemon never reads, so the\n // install/run branch would look successful but start without them. Reject it;\n // `--root` is the knob that keeps persist + service + foreground in sync.\n if (opts.configPath) {\n throw new Error(\n 'interactive login does not support --config — use --root <dir> so the daemon and the installed service read the same config'\n )\n }\n\n // ── Interactive ──\n const rl = createInterface({ input: deps.input, output: out })\n const iter = rl[Symbol.asyncIterator]()\n let url = opts.cpUrl\n let token = opts.cpKey\n try {\n if (!url) url = await nextLine(iter, 'Control Plane URL: ', out)\n\n for (let attempt = 0; ; attempt++) {\n if (!token) token = await nextLine(iter, 'Daemon API key: ', out)\n out.write(`Testing connection to ${url}…\\n`)\n const r = await deps.probe({ url: url!, token: token! })\n if (r.ok) {\n out.write(`✓ authenticated${r.daemonId ? ` (daemon ${r.daemonId})` : ''}\\n`)\n break\n }\n out.write(`✗ ${r.reason}\\n`)\n if (attempt >= 1) throw new Error('authentication failed')\n token = undefined // re-prompt on retry\n }\n\n persistCredentials({ ...opts, cpUrl: url!, cpKey: token! })\n\n const ans = (await nextLine(iter, 'Install AgentConnect as a background service? (y/N) ', out)).toLowerCase()\n if (ans === 'y' || ans === 'yes') {\n await deps.installService()\n out.write('Service installed and started. Manage it with `agentconnect up` / `down` / `status`.\\n')\n return\n }\n out.write('Starting in the foreground (Ctrl-C to stop)…\\n')\n } finally {\n rl.close()\n }\n\n await deps.runForeground()\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { a as logsDir, c as registryPath, i as lockPath, l as resolveRoot, n as daemonLogPath, o as mcpSocketPath, r as defaultAgentsDir, s as registryCachePath, t as configPath, u as statePath } from "./paths-DEcUO8lC.js";
2
+ export { configPath, daemonLogPath, defaultAgentsDir, lockPath, logsDir, mcpSocketPath, registryCachePath, registryPath, resolveRoot, statePath };
@@ -0,0 +1,43 @@
1
+ import { join, resolve } from "node:path";
2
+ import { homedir } from "node:os";
3
+ //#region src/paths.ts
4
+ function resolveRoot(root) {
5
+ return resolve((root ?? process.env.AGENTCONNECT_ROOT ?? join(homedir(), ".agentconnect")).replace(/^~(?=$|\/)/, homedir()));
6
+ }
7
+ function configPath(root) {
8
+ return join(root, "config.json");
9
+ }
10
+ function statePath(root) {
11
+ return join(root, "state", "local.sqlite");
12
+ }
13
+ function defaultAgentsDir(root) {
14
+ return join(root, "agents");
15
+ }
16
+ function registryPath(root) {
17
+ return join(root, "acp_registry.json");
18
+ }
19
+ function registryCachePath(root) {
20
+ return join(root, "acp_registry.cache.json");
21
+ }
22
+ function logsDir(root) {
23
+ return join(root, "logs");
24
+ }
25
+ /**
26
+ * Unix-domain socket the daemon's MCP control server listens on. The stdio
27
+ * `agentconnect mcp-bridge` subprocess (spawned by the agent harness) connects
28
+ * here to forward tool calls back to the daemon. Kept short (macOS caps UDS
29
+ * paths at ~104 bytes) and under `run/` so it's separate from durable state.
30
+ */
31
+ function mcpSocketPath(root) {
32
+ return join(root, "run", "mcp.sock");
33
+ }
34
+ function daemonLogPath(root) {
35
+ return join(root, "logs", "daemon.log");
36
+ }
37
+ function lockPath(root) {
38
+ return join(root, "daemon.lock");
39
+ }
40
+ //#endregion
41
+ export { logsDir as a, registryPath as c, lockPath as i, resolveRoot as l, daemonLogPath as n, mcpSocketPath as o, defaultAgentsDir as r, registryCachePath as s, configPath as t, statePath as u };
42
+
43
+ //# sourceMappingURL=paths-DEcUO8lC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths-DEcUO8lC.js","names":[],"sources":["../src/paths.ts"],"sourcesContent":["import { homedir } from 'node:os'\nimport { join, resolve } from 'node:path'\n\nexport function resolveRoot(root?: string): string {\n const r = root ?? process.env.AGENTCONNECT_ROOT ?? join(homedir(), '.agentconnect')\n return resolve(r.replace(/^~(?=$|\\/)/, homedir()))\n}\n\nexport function configPath(root: string): string {\n return join(root, 'config.json')\n}\n\nexport function statePath(root: string): string {\n return join(root, 'state', 'local.sqlite')\n}\n\nexport function defaultAgentsDir(root: string): string {\n return join(root, 'agents')\n}\n\nexport function registryPath(root: string): string {\n return join(root, 'acp_registry.json')\n}\n\nexport function registryCachePath(root: string): string {\n return join(root, 'acp_registry.cache.json')\n}\n\nexport function logsDir(root: string): string {\n return join(root, 'logs')\n}\n\n/**\n * Unix-domain socket the daemon's MCP control server listens on. The stdio\n * `agentconnect mcp-bridge` subprocess (spawned by the agent harness) connects\n * here to forward tool calls back to the daemon. Kept short (macOS caps UDS\n * paths at ~104 bytes) and under `run/` so it's separate from durable state.\n */\nexport function mcpSocketPath(root: string): string {\n return join(root, 'run', 'mcp.sock')\n}\n\nexport function daemonLogPath(root: string): string {\n return join(root, 'logs', 'daemon.log')\n}\n\nexport function lockPath(root: string): string {\n return join(root, 'daemon.lock')\n}\n"],"mappings":";;;AAGA,SAAgB,YAAY,MAAuB;CAEjD,OAAO,SADG,QAAQ,QAAQ,IAAI,qBAAqB,KAAK,QAAQ,GAAG,eAAe,EAAA,CACjE,QAAQ,cAAc,QAAQ,CAAC,CAAC;AACnD;AAEA,SAAgB,WAAW,MAAsB;CAC/C,OAAO,KAAK,MAAM,aAAa;AACjC;AAEA,SAAgB,UAAU,MAAsB;CAC9C,OAAO,KAAK,MAAM,SAAS,cAAc;AAC3C;AAEA,SAAgB,iBAAiB,MAAsB;CACrD,OAAO,KAAK,MAAM,QAAQ;AAC5B;AAEA,SAAgB,aAAa,MAAsB;CACjD,OAAO,KAAK,MAAM,mBAAmB;AACvC;AAEA,SAAgB,kBAAkB,MAAsB;CACtD,OAAO,KAAK,MAAM,yBAAyB;AAC7C;AAEA,SAAgB,QAAQ,MAAsB;CAC5C,OAAO,KAAK,MAAM,MAAM;AAC1B;;;;;;;AAQA,SAAgB,cAAc,MAAsB;CAClD,OAAO,KAAK,MAAM,OAAO,UAAU;AACrC;AAEA,SAAgB,cAAc,MAAsB;CAClD,OAAO,KAAK,MAAM,QAAQ,YAAY;AACxC;AAEA,SAAgB,SAAS,MAAsB;CAC7C,OAAO,KAAK,MAAM,aAAa;AACjC"}
@@ -0,0 +1,44 @@
1
+ import { createRequire } from "node:module";
2
+ //#region \0rolldown/runtime.js
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __esmMin = (fn, res, err) => () => {
10
+ if (err) throw err[0];
11
+ try {
12
+ return fn && (res = fn(fn = 0)), res;
13
+ } catch (e) {
14
+ throw err = [e], e;
15
+ }
16
+ };
17
+ var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
18
+ var __exportAll = (all, no_symbols) => {
19
+ let target = {};
20
+ for (var name in all) __defProp(target, name, {
21
+ get: all[name],
22
+ enumerable: true
23
+ });
24
+ if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" });
25
+ return target;
26
+ };
27
+ var __copyProps = (to, from, except, desc) => {
28
+ if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
29
+ key = keys[i];
30
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
31
+ get: ((k) => from[k]).bind(null, key),
32
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
33
+ });
34
+ }
35
+ return to;
36
+ };
37
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
38
+ value: mod,
39
+ enumerable: true
40
+ }) : target, mod));
41
+ var __toCommonJS = (mod) => __hasOwnProp.call(mod, "module.exports") ? mod["module.exports"] : __copyProps(__defProp({}, "__esModule", { value: true }), mod);
42
+ var __require = /* #__PURE__ */ (() => createRequire(import.meta.url))();
43
+ //#endregion
44
+ export { __toCommonJS as a, __require as i, __esmMin as n, __toESM as o, __exportAll as r, __commonJSMin as t };
@@ -0,0 +1,2 @@
1
+ import { t as runForeground } from "./run-foreground-mvTzCScX.js";
2
+ export { runForeground };