@dharma-ai-labs/agent-fabric 0.2.129 → 0.2.131

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 (86) hide show
  1. package/AGENT_FABRIC_ONBOARDING.md +1 -1
  2. package/README.md +43 -0
  3. package/dist/demoEnrollment.d.ts.map +1 -1
  4. package/dist/demoEnrollment.js +3 -2
  5. package/dist/demoEnrollment.js.map +1 -1
  6. package/dist/demoPackage.d.ts.map +1 -1
  7. package/dist/demoPackage.js +29 -9
  8. package/dist/demoPackage.js.map +1 -1
  9. package/dist/demoPackage.test.js +75 -1
  10. package/dist/demoPackage.test.js.map +1 -1
  11. package/dist/demoStateRename.d.ts +7 -0
  12. package/dist/demoStateRename.d.ts.map +1 -0
  13. package/dist/demoStateRename.js +21 -0
  14. package/dist/demoStateRename.js.map +1 -0
  15. package/dist/demoStateRename.test.d.ts +2 -0
  16. package/dist/demoStateRename.test.d.ts.map +1 -0
  17. package/dist/demoStateRename.test.js +67 -0
  18. package/dist/demoStateRename.test.js.map +1 -0
  19. package/dist/index.d.ts +2 -0
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +107 -21
  22. package/dist/index.js.map +1 -1
  23. package/dist/index.test.js +5 -2
  24. package/dist/index.test.js.map +1 -1
  25. package/dist/namedSessionPackageGate.d.ts +22 -0
  26. package/dist/namedSessionPackageGate.d.ts.map +1 -0
  27. package/dist/namedSessionPackageGate.js +135 -0
  28. package/dist/namedSessionPackageGate.js.map +1 -0
  29. package/dist/namedSessionPackageGate.test.d.ts +2 -0
  30. package/dist/namedSessionPackageGate.test.d.ts.map +1 -0
  31. package/dist/namedSessionPackageGate.test.js +20 -0
  32. package/dist/namedSessionPackageGate.test.js.map +1 -0
  33. package/dist/namedSessionRepositoryState.d.ts +65 -0
  34. package/dist/namedSessionRepositoryState.d.ts.map +1 -0
  35. package/dist/namedSessionRepositoryState.js +54 -0
  36. package/dist/namedSessionRepositoryState.js.map +1 -0
  37. package/dist/namedSessionRepositoryState.test.d.ts +2 -0
  38. package/dist/namedSessionRepositoryState.test.d.ts.map +1 -0
  39. package/dist/namedSessionRepositoryState.test.js +76 -0
  40. package/dist/namedSessionRepositoryState.test.js.map +1 -0
  41. package/dist/namedSessionService.d.ts +5 -1
  42. package/dist/namedSessionService.d.ts.map +1 -1
  43. package/dist/namedSessionService.js +26 -2
  44. package/dist/namedSessionService.js.map +1 -1
  45. package/dist/namedSessionService.test.js +47 -3
  46. package/dist/namedSessionService.test.js.map +1 -1
  47. package/dist/namedSessionTaskExport.d.ts +22 -0
  48. package/dist/namedSessionTaskExport.d.ts.map +1 -0
  49. package/dist/namedSessionTaskExport.js +158 -0
  50. package/dist/namedSessionTaskExport.js.map +1 -0
  51. package/dist/namedSessionTaskExport.test.d.ts +2 -0
  52. package/dist/namedSessionTaskExport.test.d.ts.map +1 -0
  53. package/dist/namedSessionTaskExport.test.js +385 -0
  54. package/dist/namedSessionTaskExport.test.js.map +1 -0
  55. package/dist/namedSessionTaskExportSync.d.ts +57 -0
  56. package/dist/namedSessionTaskExportSync.d.ts.map +1 -0
  57. package/dist/namedSessionTaskExportSync.js +193 -0
  58. package/dist/namedSessionTaskExportSync.js.map +1 -0
  59. package/dist/pidLock.test.js +33 -1
  60. package/dist/pidLock.test.js.map +1 -1
  61. package/dist/relayAutostart.d.ts +5 -3
  62. package/dist/relayAutostart.d.ts.map +1 -1
  63. package/dist/relayAutostart.js +151 -24
  64. package/dist/relayAutostart.js.map +1 -1
  65. package/dist/relayAutostart.test.js +138 -2
  66. package/dist/relayAutostart.test.js.map +1 -1
  67. package/dist/relaySupervisor.test.js +9 -4
  68. package/dist/relaySupervisor.test.js.map +1 -1
  69. package/dist/repositoryPackage.d.ts.map +1 -1
  70. package/dist/repositoryPackage.js +18 -2
  71. package/dist/repositoryPackage.js.map +1 -1
  72. package/dist/repositoryPackage.test.js +29 -0
  73. package/dist/repositoryPackage.test.js.map +1 -1
  74. package/dist/repositoryPackageDelivery.test.js +34 -1
  75. package/dist/repositoryPackageDelivery.test.js.map +1 -1
  76. package/dist/repositoryRelaySupervisor.d.ts +1 -1
  77. package/dist/repositoryRelaySupervisor.d.ts.map +1 -1
  78. package/dist/repositoryRelaySupervisor.js +3 -2
  79. package/dist/repositoryRelaySupervisor.js.map +1 -1
  80. package/dist/repositoryRelaySupervisor.test.js +17 -0
  81. package/dist/repositoryRelaySupervisor.test.js.map +1 -1
  82. package/dist/schemas/codex-task-export-upload-receipt.schema.json +24 -0
  83. package/dist/schemas/codex-task-observation.schema.json +99 -0
  84. package/dist/schemas/codex-task-replay-export.schema.json +375 -0
  85. package/dist/schemas/named-session-task-export-outbox.schema.json +29 -0
  86. package/package.json +7 -7
@@ -1,11 +1,12 @@
1
1
  import { execFile } from 'node:child_process';
2
2
  import { createHash } from 'node:crypto';
3
- import { mkdir, readFile, rm, writeFile } from 'node:fs/promises';
3
+ import { lstat, mkdir, readFile, rm, writeFile } from 'node:fs/promises';
4
4
  import { homedir } from 'node:os';
5
- import { dirname, join } from 'node:path';
5
+ import { dirname, isAbsolute, join } from 'node:path';
6
6
  import { promisify } from 'node:util';
7
7
  const execFileAsync = promisify(execFile);
8
8
  const UNIT_NAME = 'dharma-agent-fabric.service';
9
+ const MAC_LABEL = 'io.dharma.agent-fabric.relay';
9
10
  const VERSION = /^(?=.{1,64}$)\d+\.\d+\.\d+(?:-[a-zA-Z0-9.-]+)?$/;
10
11
  const defaultRunner = async (file, args) => {
11
12
  const { stdout } = await execFileAsync(file, args, { timeout: 15_000, maxBuffer: 64 * 1024 });
@@ -23,6 +24,83 @@ function systemdValue(value) {
23
24
  function psLiteral(value) {
24
25
  return `'${safeLine(value).replace(/'/g, "''")}'`;
25
26
  }
27
+ function xmlString(value) {
28
+ const line = safeLine(value);
29
+ if (/[\x00-\x1f]/.test(line))
30
+ throw new Error('Invalid LaunchAgent path.');
31
+ return `<string>${line.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;')
32
+ .replace(/"/g, '&quot;').replace(/'/g, '&apos;')}</string>`;
33
+ }
34
+ export function macRelayLaunchAgent(launcher, policy, workspace, home) {
35
+ if (![launcher, workspace, home, ...(policy === null ? [] : [policy])].every(isAbsolute)) {
36
+ throw new Error('LaunchAgent paths must be absolute.');
37
+ }
38
+ const args = [launcher, 'relay', 'supervise', ...(policy === null ? ['--demo-only'] : ['--policy', policy])];
39
+ return '<?xml version="1.0" encoding="UTF-8"?>\n'
40
+ + '<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">\n'
41
+ + '<plist version="1.0"><dict>\n'
42
+ + `<key>Label</key>${xmlString(MAC_LABEL)}\n`
43
+ + `<key>ProgramArguments</key><array>${args.map(xmlString).join('')}</array>\n`
44
+ + `<key>WorkingDirectory</key>${xmlString(workspace)}\n`
45
+ + `<key>EnvironmentVariables</key><dict><key>DHARMA_HOME</key>${xmlString(home)}</dict>\n`
46
+ + '<key>RunAtLoad</key><true/>\n<key>KeepAlive</key><true/>\n'
47
+ + '<key>ThrottleInterval</key><integer>10</integer>\n'
48
+ + '<key>LimitLoadToSessionType</key><string>Aqua</string>\n'
49
+ + '<key>StandardOutPath</key><string>/dev/null</string>\n'
50
+ + '<key>StandardErrorPath</key><string>/dev/null</string>\n'
51
+ + '</dict></plist>\n';
52
+ }
53
+ function backendPlatform(backend) {
54
+ return backend === 'systemd-user' ? 'linux' : backend === 'launchd-user' ? 'darwin' : 'win32';
55
+ }
56
+ function macDomain(options) {
57
+ const uid = options.uid ?? process.getuid?.();
58
+ if (!Number.isSafeInteger(uid) || uid <= 0)
59
+ throw new Error('launchd_user_unavailable: a non-root signed-in user is required.');
60
+ return `gui/${uid}`;
61
+ }
62
+ function macPath(options) {
63
+ return join(options.userHome || homedir(), 'Library', 'LaunchAgents', `${MAC_LABEL}.plist`);
64
+ }
65
+ function startupPath(options, backend) {
66
+ return backend === 'systemd-user' ? unitPath(options.userHome || homedir())
67
+ : backend === 'launchd-user' ? macPath(options) : scriptPath(options.home);
68
+ }
69
+ function startupContents(options, registration) {
70
+ return registration.backend === 'systemd-user'
71
+ ? linuxRelayUnit(registration.launcher, registration.policy, registration.workspace, options.home)
72
+ : registration.backend === 'launchd-user'
73
+ ? macRelayLaunchAgent(registration.launcher, registration.policy, registration.workspace, options.home)
74
+ : windowsRelayStartupScript(registration.launcher, registration.policy, options.home);
75
+ }
76
+ // launchctl print is diagnostic text: unknown layouts fail closed until qualified.
77
+ async function macLoaded(options, registration) {
78
+ let output;
79
+ try {
80
+ output = (await (options.run || defaultRunner)('/bin/launchctl', ['print', `${macDomain(options)}/${MAC_LABEL}`])).stdout;
81
+ }
82
+ catch (error) {
83
+ const failure = error;
84
+ if (failure.code === 113 && /Could not find service/.test(failure.stderr || ''))
85
+ return false;
86
+ throw error;
87
+ }
88
+ const path = output.match(/^\s*path = (.+)$/m)?.[1];
89
+ const program = output.match(/^\s*program = (.+)$/m)?.[1];
90
+ const workspace = output.match(/^\s*working directory = (.+)$/m)?.[1];
91
+ const environment = output.match(/^\s*environment = \{\n([\s\S]*?)^\s*\}/m)?.[1];
92
+ const home = environment?.match(/^\s*DHARMA_HOME => (.+)$/m)?.[1];
93
+ const args = output.match(/^\s*arguments = \{\n([\s\S]*?)^\s*\}/m)?.[1]
94
+ ?.trim().split('\n').map(line => line.trim());
95
+ const expected = [registration.launcher, 'relay', 'supervise',
96
+ ...(registration.policy === null ? ['--demo-only'] : ['--policy', registration.policy])];
97
+ if (path !== macPath(options) || program !== registration.launcher
98
+ || workspace !== registration.workspace || home !== options.home
99
+ || JSON.stringify(args) !== JSON.stringify(expected)) {
100
+ throw new Error('autostart_conflict: loaded LaunchAgent does not match its ownership receipt.');
101
+ }
102
+ return true;
103
+ }
26
104
  export function linuxRelayUnit(launcher, policy, workspace, home) {
27
105
  return renderLinuxRelayUnit(launcher, policy, workspace, home, false);
28
106
  }
@@ -60,7 +138,7 @@ async function readRegistration(home) {
60
138
  try {
61
139
  const value = JSON.parse(await readFile(registrationPath(home), 'utf8'));
62
140
  if (!value || typeof value !== 'object' || Array.isArray(value)
63
- || !['systemd-user', 'windows-task'].includes(value.backend)
141
+ || !['systemd-user', 'windows-task', 'launchd-user'].includes(value.backend)
64
142
  || typeof value.version !== 'string' || !VERSION.test(value.version)
65
143
  || typeof value.launcher !== 'string' || typeof value.workspace !== 'string'
66
144
  || (value.backend === 'windows-task' ? value.taskName !== taskName(home) : value.taskName !== null)) {
@@ -93,11 +171,13 @@ async function readRegistration(home) {
93
171
  }
94
172
  }
95
173
  async function ownsStartupFile(options, registration, allowLegacy = false) {
96
- const path = registration.backend === 'systemd-user'
97
- ? unitPath(options.userHome || homedir()) : scriptPath(options.home);
98
- const expected = registration.backend === 'systemd-user'
99
- ? linuxRelayUnit(registration.launcher, registration.policy, registration.workspace, options.home)
100
- : windowsRelayStartupScript(registration.launcher, registration.policy, options.home);
174
+ const path = startupPath(options, registration.backend);
175
+ if (registration.backend === 'launchd-user') {
176
+ const stat = await lstat(path).catch(() => null);
177
+ if (!stat?.isFile() || stat.isSymbolicLink() || (stat.mode & 0o022) !== 0)
178
+ return false;
179
+ }
180
+ const expected = startupContents(options, registration);
101
181
  const actual = await readFile(path, 'utf8').catch(() => null);
102
182
  return actual === expected || (allowLegacy && registration.backend === 'systemd-user'
103
183
  && actual === renderLinuxRelayUnit(registration.launcher, registration.policy, registration.workspace, options.home, true));
@@ -133,8 +213,7 @@ export async function relayAutostartStatus(options) {
133
213
  return { state: 'disabled', backend: null };
134
214
  const platform = options.platform || process.platform;
135
215
  const run = options.run || defaultRunner;
136
- if ((platform === 'linux' && registration.backend !== 'systemd-user')
137
- || (platform === 'win32' && registration.backend !== 'windows-task')) {
216
+ if (platform !== backendPlatform(registration.backend)) {
138
217
  return { state: 'unavailable', backend: registration.backend, version: registration.version, reason: 'platform_mismatch' };
139
218
  }
140
219
  if (!await ownsStartupFile(options, registration)) {
@@ -142,6 +221,13 @@ export async function relayAutostartStatus(options) {
142
221
  reason: 'autostart_conflict' };
143
222
  }
144
223
  try {
224
+ if (registration.backend === 'launchd-user') {
225
+ await macLoaded(options, registration);
226
+ const disabled = (await run('/bin/launchctl', ['print-disabled', macDomain(options)])).stdout;
227
+ const match = disabled.match(/"io\.dharma\.agent-fabric\.relay"\s*=>\s*(true|false)/);
228
+ return { state: match?.[1] === 'false' ? 'enabled' : 'disabled',
229
+ backend: registration.backend, version: registration.version };
230
+ }
145
231
  const result = registration.backend === 'systemd-user'
146
232
  ? await run('systemctl', ['--user', 'is-enabled', UNIT_NAME])
147
233
  : await run('powershell.exe', encodedPowerShell(windowsTaskLookup(registration)
@@ -154,14 +240,16 @@ export async function relayAutostartStatus(options) {
154
240
  return { state: result.stdout.trim() === 'enabled' ? 'enabled' : 'disabled',
155
241
  backend: registration.backend, version: registration.version };
156
242
  }
157
- catch {
243
+ catch (error) {
158
244
  return { state: 'unavailable', backend: registration.backend, version: registration.version,
159
- reason: registration.backend === 'systemd-user' ? 'systemd_user_unavailable' : 'task_scheduler_unavailable' };
245
+ reason: error instanceof Error && error.message.startsWith('autostart_conflict:') ? 'autostart_conflict'
246
+ : registration.backend === 'systemd-user' ? 'systemd_user_unavailable'
247
+ : registration.backend === 'launchd-user' ? 'launchd_user_unavailable' : 'task_scheduler_unavailable' };
160
248
  }
161
249
  }
162
250
  export async function enableRelayAutostart(options) {
163
251
  const platform = options.platform || process.platform;
164
- if (platform !== 'linux' && platform !== 'win32') {
252
+ if (platform !== 'linux' && platform !== 'win32' && platform !== 'darwin') {
165
253
  throw new Error(`Relay autostart is unsupported on ${platform}.`);
166
254
  }
167
255
  if (!VERSION.test(options.version))
@@ -169,7 +257,8 @@ export async function enableRelayAutostart(options) {
169
257
  const userHome = options.userHome || homedir();
170
258
  const run = options.run || defaultRunner;
171
259
  const previous = await readRegistration(options.home);
172
- if (previous && previous.backend !== (platform === 'linux' ? 'systemd-user' : 'windows-task')) {
260
+ const backend = platform === 'linux' ? 'systemd-user' : platform === 'darwin' ? 'launchd-user' : 'windows-task';
261
+ if (previous && previous.backend !== backend) {
173
262
  throw new Error('Existing relay autostart belongs to a different operating system.');
174
263
  }
175
264
  // Demo scopes share a standard service when one already owns this user's startup entry.
@@ -182,7 +271,7 @@ export async function enableRelayAutostart(options) {
182
271
  const registration = {
183
272
  ...(policy === null ? { schema: 'dharma.relay-autostart/v2', mode: 'demo-only', policy: null }
184
273
  : { schema: 'dharma.relay-autostart/v1', policy: safeLine(policy) }),
185
- backend: platform === 'linux' ? 'systemd-user' : 'windows-task',
274
+ backend,
186
275
  launcher: safeLine(preserve ? previous.launcher : options.launcher),
187
276
  workspace: safeLine(workspace), version: options.version,
188
277
  taskName: platform === 'win32' ? taskName(options.home) : null,
@@ -194,15 +283,25 @@ export async function enableRelayAutostart(options) {
194
283
  throw new Error('autostart_conflict: a Windows startup task exists without this enrollment receipt.');
195
284
  }
196
285
  }
197
- const destination = platform === 'linux' ? unitPath(userHome) : scriptPath(options.home);
286
+ const destination = startupPath({ ...options, userHome }, backend);
287
+ if (platform === 'darwin') {
288
+ const stat = await lstat(destination).catch((error) => {
289
+ if (error.code === 'ENOENT')
290
+ return null;
291
+ throw error;
292
+ });
293
+ if (stat && (!stat.isFile() || stat.isSymbolicLink() || (stat.mode & 0o022) !== 0)) {
294
+ throw new Error('autostart_conflict: LaunchAgent must be a private regular file.');
295
+ }
296
+ // Validate paths before touching an already loaded service.
297
+ startupContents(options, registration);
298
+ }
198
299
  const existingContents = await readFile(destination, 'utf8').catch((error) => {
199
300
  if (error.code === 'ENOENT')
200
301
  return null;
201
302
  throw error;
202
303
  });
203
- const ownedContents = previous && (platform === 'linux'
204
- ? linuxRelayUnit(previous.launcher, previous.policy, previous.workspace, options.home)
205
- : windowsRelayStartupScript(previous.launcher, previous.policy, options.home));
304
+ const ownedContents = previous && startupContents(options, previous);
206
305
  const ownedLegacyContents = previous && platform === 'linux'
207
306
  ? renderLinuxRelayUnit(previous.launcher, previous.policy, previous.workspace, options.home, true) : null;
208
307
  if (existingContents !== null && existingContents !== ownedContents && existingContents !== ownedLegacyContents) {
@@ -217,16 +316,26 @@ export async function enableRelayAutostart(options) {
217
316
  if (status.state === 'enabled')
218
317
  return status;
219
318
  }
319
+ if (platform === 'darwin') {
320
+ const loaded = await macLoaded(options, previous || registration);
321
+ if (loaded && !previous)
322
+ throw new Error('autostart_conflict: LaunchAgent exists without an ownership receipt.');
323
+ if (loaded)
324
+ await run('/bin/launchctl', ['bootout', `${macDomain(options)}/${MAC_LABEL}`]);
325
+ }
220
326
  await mkdir(dirname(destination), { recursive: true, mode: 0o700 });
221
327
  await mkdir(dirname(registrationPath(options.home)), { recursive: true, mode: 0o700 });
222
- await writeFile(destination, platform === 'linux'
223
- ? linuxRelayUnit(registration.launcher, registration.policy, registration.workspace, options.home)
224
- : windowsRelayStartupScript(registration.launcher, registration.policy, options.home), { mode: 0o600 });
328
+ await writeFile(destination, startupContents(options, registration), { mode: 0o600 });
225
329
  await writeFile(registrationPath(options.home), `${JSON.stringify(registration, null, 2)}\n`, { mode: 0o600 });
226
330
  if (platform === 'linux') {
227
331
  await run('systemctl', ['--user', 'daemon-reload']);
228
332
  await run('systemctl', ['--user', 'enable', UNIT_NAME]);
229
333
  }
334
+ else if (platform === 'darwin') {
335
+ await run('/usr/bin/plutil', ['-lint', destination]);
336
+ await run('/bin/launchctl', ['enable', `${macDomain(options)}/${MAC_LABEL}`]);
337
+ await run('/bin/launchctl', ['bootstrap', macDomain(options), destination]);
338
+ }
230
339
  else {
231
340
  const script = scriptPath(options.home);
232
341
  const command = `$identity = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name; `
@@ -251,7 +360,7 @@ export async function disableRelayAutostart(options) {
251
360
  if (!registration)
252
361
  return { state: 'disabled', backend: null };
253
362
  const platform = options.platform || process.platform;
254
- if (platform !== (registration.backend === 'systemd-user' ? 'linux' : 'win32')) {
363
+ if (platform !== backendPlatform(registration.backend)) {
255
364
  throw new Error('autostart_conflict: startup registration belongs to a different operating system.');
256
365
  }
257
366
  if (!await ownsStartupFile(options, registration, true)) {
@@ -263,6 +372,12 @@ export async function disableRelayAutostart(options) {
263
372
  await rm(unitPath(options.userHome || homedir()), { force: true });
264
373
  await run('systemctl', ['--user', 'daemon-reload']);
265
374
  }
375
+ else if (registration.backend === 'launchd-user') {
376
+ if (await macLoaded(options, registration))
377
+ await run('/bin/launchctl', ['bootout', `${macDomain(options)}/${MAC_LABEL}`]);
378
+ await run('/bin/launchctl', ['disable', `${macDomain(options)}/${MAC_LABEL}`]);
379
+ await rm(macPath(options), { force: true });
380
+ }
266
381
  else {
267
382
  if (registration.taskName !== taskName(options.home))
268
383
  throw new Error('Relay autostart task identity is invalid.');
@@ -283,6 +398,12 @@ export async function startRelayAutostart(options) {
283
398
  if (registration.backend === 'systemd-user') {
284
399
  await run('systemctl', ['--user', 'start', UNIT_NAME]);
285
400
  }
401
+ else if (registration.backend === 'launchd-user') {
402
+ if (!await macLoaded(options, registration)) {
403
+ await run('/bin/launchctl', ['bootstrap', macDomain(options), macPath(options)]);
404
+ }
405
+ await run('/bin/launchctl', ['kickstart', `${macDomain(options)}/${MAC_LABEL}`]);
406
+ }
286
407
  else {
287
408
  await run('powershell.exe', encodedPowerShell(windowsTaskLookup(registration)
288
409
  + windowsTaskGuard(registration, options.home)
@@ -296,12 +417,14 @@ export async function inspectOwnedRelayAutostart(options) {
296
417
  throw new Error('autostart_conflict: a verified owned startup entry is required.');
297
418
  }
298
419
  const platform = options.platform || process.platform;
299
- if (platform !== (registration.backend === 'systemd-user' ? 'linux' : 'win32')) {
420
+ if (platform !== backendPlatform(registration.backend)) {
300
421
  throw new Error('autostart_conflict: startup registration belongs to another operating system.');
301
422
  }
302
423
  if (registration.backend === 'windows-task') {
303
424
  await (options.run || defaultRunner)('powershell.exe', encodedPowerShell(windowsTaskLookup(registration) + windowsTaskGuard(registration, options.home)));
304
425
  }
426
+ if (registration.backend === 'launchd-user')
427
+ await macLoaded(options, registration);
305
428
  return registration;
306
429
  }
307
430
  export async function stopRelayAutostart(options) {
@@ -310,6 +433,10 @@ export async function stopRelayAutostart(options) {
310
433
  if (registration.backend === 'systemd-user') {
311
434
  await run('systemctl', ['--user', 'stop', UNIT_NAME]);
312
435
  }
436
+ else if (registration.backend === 'launchd-user') {
437
+ if (await macLoaded(options, registration))
438
+ await run('/bin/launchctl', ['bootout', `${macDomain(options)}/${MAC_LABEL}`]);
439
+ }
313
440
  else {
314
441
  await run('powershell.exe', encodedPowerShell(windowsTaskLookup(registration)
315
442
  + windowsTaskGuard(registration, options.home)
@@ -1 +1 @@
1
- {"version":3,"file":"relayAutostart.js","sourceRoot":"","sources":["../src/relayAutostart.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"relayAutostart.js","sourceRoot":"","sources":["../src/relayAutostart.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,146 @@
1
1
  import assert from 'node:assert/strict';
2
2
  import { spawnSync } from 'node:child_process';
3
- import { mkdir, mkdtemp, readFile, writeFile } from 'node:fs/promises';
3
+ import { mkdir, mkdtemp, readFile, symlink, writeFile } from 'node:fs/promises';
4
4
  import { tmpdir } from 'node:os';
5
5
  import { basename, join, posix } from 'node:path';
6
6
  import test from 'node:test';
7
- import { disableRelayAutostart, enableRelayAutostart, linuxRelayUnit, relayAutostartStatus, windowsRelayStartupScript, startRelayAutostart, } from './relayAutostart.js';
7
+ import { disableRelayAutostart, enableRelayAutostart, linuxRelayUnit, relayAutostartStatus, windowsRelayStartupScript, startRelayAutostart, stopRelayAutostart, inspectOwnedRelayAutostart, macRelayLaunchAgent, } from './relayAutostart.js';
8
+ async function macFixture() {
9
+ const root = await mkdtemp(join(tmpdir(), 'dharma-mac-startup-'));
10
+ const calls = [];
11
+ let loaded = false, disabled = true, foreign = false;
12
+ const options = { platform: 'darwin', uid: 501, userHome: root, home: join(root, 'dharma'),
13
+ workspace: '/Users/fixture/Repo Space', launcher: '/Users/fixture/Repo Space/.dharma/bin/dharma',
14
+ policy: '/Users/fixture/Repo Space/.dharma/policy.json', version: '0.2.130',
15
+ run: async (file, args) => {
16
+ calls.push([file, ...args]);
17
+ if (file === '/usr/bin/plutil')
18
+ return { stdout: 'OK\n' };
19
+ assert.equal(file, '/bin/launchctl');
20
+ if (args[0] === 'print') {
21
+ if (!loaded)
22
+ throw Object.assign(new Error('not loaded'), { code: 113, stderr: 'Could not find service' });
23
+ return { stdout: `gui/501/io.dharma.agent-fabric.relay = {\n`
24
+ + ` path = ${join(root, 'Library', 'LaunchAgents', 'io.dharma.agent-fabric.relay.plist')}\n`
25
+ + ` program = ${foreign ? '/foreign' : options.launcher}\n arguments = {\n`
26
+ + ` ${options.launcher}\n relay\n supervise\n --policy\n ${options.policy}\n }\n`
27
+ + ` working directory = ${options.workspace}\n environment = {\n DHARMA_HOME => ${options.home}\n }\n}\n` };
28
+ }
29
+ if (args[0] === 'print-disabled')
30
+ return { stdout: `disabled services = {\n "io.dharma.agent-fabric.relay" => ${disabled}\n}\n` };
31
+ if (args[0] === 'enable')
32
+ disabled = false;
33
+ if (args[0] === 'disable')
34
+ disabled = true;
35
+ if (args[0] === 'bootstrap') {
36
+ assert.equal(loaded, false);
37
+ loaded = true;
38
+ }
39
+ if (args[0] === 'bootout')
40
+ loaded = false;
41
+ return { stdout: '' };
42
+ } };
43
+ return { options, calls, plist: join(root, 'Library', 'LaunchAgents', 'io.dharma.agent-fabric.relay.plist'),
44
+ setForeign: () => { foreign = true; }, setLoaded: () => { loaded = true; } };
45
+ }
46
+ // Windows permission bits cannot model launchd's private-file ownership checks.
47
+ const macFilesystem = { skip: process.platform === 'win32' };
48
+ test('macOS owned registration supports restart, stop, same-device upgrade and disable', macFilesystem, async () => {
49
+ const { options, calls, plist } = await macFixture();
50
+ assert.equal((await enableRelayAutostart(options)).state, 'enabled');
51
+ const xml = await readFile(plist, 'utf8');
52
+ assert.match(xml, /RunAtLoad/);
53
+ assert.match(xml, /KeepAlive/);
54
+ assert.doesNotMatch(xml, /--grant|token|password/);
55
+ assert.equal((await inspectOwnedRelayAutostart(options)).backend, 'launchd-user');
56
+ await stopRelayAutostart(options);
57
+ assert.equal((await relayAutostartStatus(options)).state, 'enabled');
58
+ await startRelayAutostart(options);
59
+ assert.equal(calls.filter(call => call[1] === 'bootstrap').length, 2);
60
+ assert.equal((await enableRelayAutostart({ ...options, version: '0.2.131' })).state, 'enabled');
61
+ assert.equal((await relayAutostartStatus(options)).version, '0.2.131');
62
+ assert.equal((await disableRelayAutostart(options)).state, 'disabled');
63
+ assert.equal((await relayAutostartStatus(options)).state, 'disabled');
64
+ });
65
+ test('macOS preserves the established startup anchor for another repository', macFilesystem, async () => {
66
+ const { options, calls, plist } = await macFixture();
67
+ await enableRelayAutostart(options);
68
+ const before = await readFile(plist, 'utf8');
69
+ calls.length = 0;
70
+ await enableRelayAutostart({ ...options, workspace: '/Users/other', launcher: '/Users/other/dharma',
71
+ policy: '/Users/other/policy.json', preserveStandardAnchor: true });
72
+ assert.equal(await readFile(plist, 'utf8'), before);
73
+ assert.ok(!calls.some(call => ['bootstrap', 'bootout'].includes(call[1])));
74
+ });
75
+ test('macOS refuses foreign loaded services and tampered startup files', macFilesystem, async () => {
76
+ const fixture = await macFixture();
77
+ await enableRelayAutostart(fixture.options);
78
+ fixture.setForeign();
79
+ fixture.calls.length = 0;
80
+ await assert.rejects(enableRelayAutostart(fixture.options), /autostart_conflict/);
81
+ await assert.rejects(stopRelayAutostart(fixture.options), /autostart_conflict/);
82
+ await assert.rejects(disableRelayAutostart(fixture.options), /autostart_conflict/);
83
+ assert.ok(!fixture.calls.some(call => ['bootout', 'disable'].includes(call[1])));
84
+ const clean = await macFixture();
85
+ await enableRelayAutostart(clean.options);
86
+ await writeFile(clean.plist, 'foreign');
87
+ clean.calls.length = 0;
88
+ assert.equal((await relayAutostartStatus(clean.options)).reason, 'autostart_conflict');
89
+ await assert.rejects(disableRelayAutostart(clean.options), /autostart_conflict/);
90
+ assert.deepEqual(clean.calls, []);
91
+ });
92
+ test('macOS will not take over a loaded service without a receipt', async () => {
93
+ const fixture = await macFixture();
94
+ fixture.setLoaded();
95
+ await assert.rejects(enableRelayAutostart(fixture.options), /without an ownership receipt/);
96
+ assert.ok(!fixture.calls.some(call => call[1] === 'bootout'));
97
+ });
98
+ test('macOS will not follow a plist symlink', { skip: process.platform === 'win32' }, async () => {
99
+ const linked = await macFixture();
100
+ await mkdir(join(linked.options.userHome, 'Library', 'LaunchAgents'), { recursive: true });
101
+ await writeFile(join(linked.options.userHome, 'foreign.plist'), 'foreign');
102
+ await symlink(join(linked.options.userHome, 'foreign.plist'), linked.plist);
103
+ await assert.rejects(enableRelayAutostart(linked.options), /private regular file/);
104
+ assert.equal(await readFile(linked.plist, 'utf8'), 'foreign');
105
+ });
106
+ test('macOS loaded scope and argument mismatches fail before mutation', macFilesystem, async () => {
107
+ for (const [from, to] of [[' supervise\n', ' bootstrap\n'], [' working directory = ', ' wrong directory = '],
108
+ [' DHARMA_HOME => ', ' FOREIGN_HOME => '], [' path = ', ' unknown path = ']]) {
109
+ const fixture = await macFixture();
110
+ await enableRelayAutostart(fixture.options);
111
+ const run = fixture.options.run;
112
+ const modified = { ...fixture.options, run: async (file, args) => {
113
+ const result = await run(file, args);
114
+ return { stdout: args[0] === 'print' ? result.stdout.replace(from, to) : result.stdout };
115
+ } };
116
+ fixture.calls.length = 0;
117
+ assert.equal((await relayAutostartStatus(modified)).reason, 'autostart_conflict');
118
+ await assert.rejects(enableRelayAutostart(modified), /autostart_conflict/);
119
+ await assert.rejects(disableRelayAutostart(modified), /autostart_conflict/);
120
+ assert.ok(!fixture.calls.some(call => ['bootout', 'disable'].includes(call[1])));
121
+ }
122
+ });
123
+ test('macOS rejects relative or control-character paths and root registration', async () => {
124
+ assert.throws(() => macRelayLaunchAgent('relative', null, '/repo', '/home'), /absolute/);
125
+ assert.throws(() => macRelayLaunchAgent('/bin/true', null, '/repo\tbad', '/home'), /Invalid LaunchAgent path/);
126
+ const { options, calls } = await macFixture();
127
+ await assert.rejects(enableRelayAutostart({ ...options, uid: 0 }), /non-root/);
128
+ assert.deepEqual(calls, []);
129
+ });
130
+ test('macOS launchd failure does not produce enabled status', macFilesystem, async () => {
131
+ const { options } = await macFixture();
132
+ await enableRelayAutostart(options);
133
+ const unavailable = { ...options, run: async () => { throw new Error('GUI domain unavailable'); } };
134
+ assert.equal((await relayAutostartStatus(unavailable)).state, 'unavailable');
135
+ await assert.rejects(startRelayAutostart(unavailable), /autostart_conflict/);
136
+ });
137
+ test('macOS generated plist passes the native property-list parser', { skip: process.platform !== 'darwin' }, async () => {
138
+ const root = await mkdtemp(join(tmpdir(), 'dharma-native-plist-'));
139
+ const file = join(root, 'test.plist');
140
+ await writeFile(file, macRelayLaunchAgent('/bin/true', '/Users/test/Policy & "quote"', '/Users/test/Repo Space', root));
141
+ const result = spawnSync('/usr/bin/plutil', ['-lint', file], { encoding: 'utf8', timeout: 15_000 });
142
+ assert.equal(result.status, 0, result.stderr || result.stdout);
143
+ });
8
144
  // Mock Linux OS paths remain POSIX even when receipt files live on Windows.
9
145
  const linuxWorkspace = (root, name) => posix.join('/fixtures', basename(root), name);
10
146
  test('Linux startup invokes only the pinned launcher and canonical policy', () => {