@dharma-ai-labs/agent-fabric 0.2.198 → 0.2.200

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 (36) hide show
  1. package/AGENT_FABRIC_ONBOARDING.md +2 -0
  2. package/dist/bootstrapRelayOrdering.test.js +28 -2
  3. package/dist/bootstrapRelayOrdering.test.js.map +1 -1
  4. package/dist/bootstrapStartupPreflight.test.js +10 -0
  5. package/dist/bootstrapStartupPreflight.test.js.map +1 -1
  6. package/dist/bootstrapTargetPreflight.test.d.ts +2 -0
  7. package/dist/bootstrapTargetPreflight.test.d.ts.map +1 -0
  8. package/dist/bootstrapTargetPreflight.test.js +70 -0
  9. package/dist/bootstrapTargetPreflight.test.js.map +1 -0
  10. package/dist/codexBootstrapCompletion.test.js +16 -1
  11. package/dist/codexBootstrapCompletion.test.js.map +1 -1
  12. package/dist/codexSetupPortalIngress.test.js +61 -1
  13. package/dist/codexSetupPortalIngress.test.js.map +1 -1
  14. package/dist/codexSetupSessionHandoff.test.js +4 -2
  15. package/dist/codexSetupSessionHandoff.test.js.map +1 -1
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +32 -14
  18. package/dist/index.js.map +1 -1
  19. package/dist/relayAutostart.d.ts +4 -2
  20. package/dist/relayAutostart.d.ts.map +1 -1
  21. package/dist/relayAutostart.js +20 -3
  22. package/dist/relayAutostart.js.map +1 -1
  23. package/dist/repositoryOnboardingCaller.test.js +22 -5
  24. package/dist/repositoryOnboardingCaller.test.js.map +1 -1
  25. package/dist/schemas/wsl-relay-host.v1.schema.json +18 -0
  26. package/dist/startupCommitScope.test.js +6 -0
  27. package/dist/startupCommitScope.test.js.map +1 -1
  28. package/dist/wslRelayHost.d.ts +30 -0
  29. package/dist/wslRelayHost.d.ts.map +1 -0
  30. package/dist/wslRelayHost.js +269 -0
  31. package/dist/wslRelayHost.js.map +1 -0
  32. package/dist/wslRelayHost.test.d.ts +2 -0
  33. package/dist/wslRelayHost.test.d.ts.map +1 -0
  34. package/dist/wslRelayHost.test.js +308 -0
  35. package/dist/wslRelayHost.test.js.map +1 -0
  36. package/package.json +1 -1
@@ -0,0 +1,308 @@
1
+ import assert from 'node:assert/strict';
2
+ import { spawnSync } from 'node:child_process';
3
+ import { mkdtemp, readFile, realpath, rm, writeFile } from 'node:fs/promises';
4
+ import { tmpdir } from 'node:os';
5
+ import { join } from 'node:path';
6
+ import { compileFunction } from 'node:vm';
7
+ import test from 'node:test';
8
+ import ts from 'typescript';
9
+ import { enableRelayAutostart, relayAutostartStatus, disableRelayAutostart, startRelayAutostart, assertRelayStartupOwnership } from './relayAutostart.js';
10
+ import { resolveWslRelayContext } from './wslRelayHost.js';
11
+ import { validateContract } from '@dharma-ai-labs/agent-fabric-contracts';
12
+ import { prepareCodexBootstrapHost, runCodexBootstrapHostScope } from './bootstrapHostScope.js';
13
+ test('real WSL Windows launch uses a fixed Windows cwd rather than the Linux caller directory', async () => {
14
+ const source = await readFile(new URL('../src/wslRelayHost.ts', import.meta.url), 'utf8');
15
+ const ast = ts.createSourceFile('wslRelayHost.ts', source, ts.ScriptTarget.Latest, true);
16
+ const declaration = ast.statements.find(node => ts.isFunctionDeclaration(node) && node.name?.text === 'windows');
17
+ assert.ok(declaration && ts.isFunctionDeclaration(declaration));
18
+ const compiled = ts.transpileModule(declaration.getText(ast), { compilerOptions: {
19
+ target: ts.ScriptTarget.ES2023, module: ts.ModuleKind.CommonJS
20
+ } }).outputText;
21
+ let calls = 0;
22
+ const launch = compileFunction(compiled + '\nreturn windows;', ['currentBootstrapHostScope', 'execFile', 'windowsArgs', 'captureBootstrapHostChild'])(() => undefined, (file, args, options, done) => {
23
+ calls++;
24
+ assert.equal(file, '/init');
25
+ assert.deepEqual(args, ['public-arguments']);
26
+ assert.equal(options.cwd, '/mnt/c/Windows/System32', 'Linux cwd must not become a Windows UNC current directory');
27
+ assert.equal(options.timeout, 15000);
28
+ assert.equal(options.maxBuffer, 16384);
29
+ done(null, '{"public":true}');
30
+ return {};
31
+ }, () => ['public-arguments'], () => { throw new Error('no setup scope in this fixture'); });
32
+ assert.deepEqual(await launch('public-script'), { stdout: '{"public":true}' });
33
+ assert.equal(calls, 1);
34
+ });
35
+ async function fixture(t) {
36
+ const root = await realpath(await mkdtemp(join(tmpdir(), 'dharma-wsl-host-')));
37
+ t.after(() => rm(root, { recursive: true, force: true }));
38
+ const scripts = [];
39
+ let exists = false;
40
+ let running = false;
41
+ let loseRegistrationResponse = false;
42
+ const options = { platform: 'linux', home: join(root, 'device'), userHome: root,
43
+ workspace: '/fixtures/repo', launcher: '/fixtures/repo/.dharma/bin/dharma',
44
+ policy: '/fixtures/repo/.dharma/approved-policy.json', version: '0.2.198',
45
+ run: async () => ({ stdout: 'enabled\n' }),
46
+ wslHost: {
47
+ context: async () => ({ distribution: 'Ubuntu', linuxUser: 'maatru' }),
48
+ run: async (script) => {
49
+ scripts.push(script);
50
+ if (script.includes('dharma-wsl-host:identity'))
51
+ return { stdout: JSON.stringify({
52
+ sid: 'S-1-5-21-123-456-789-1001', executable: 'C:\\Windows\\System32\\wsl.exe'
53
+ }) };
54
+ if (script.includes('dharma-wsl-host:register')) {
55
+ exists = true;
56
+ if (loseRegistrationResponse)
57
+ throw new Error('registration response lost');
58
+ }
59
+ if (script.includes('dharma-wsl-host:start'))
60
+ running = true;
61
+ if (script.includes('dharma-wsl-host:disable')) {
62
+ exists = false;
63
+ running = false;
64
+ }
65
+ return { stdout: JSON.stringify({ exists, enabled: exists, running }) };
66
+ },
67
+ },
68
+ };
69
+ return { options, scripts, foreignTask: () => { exists = true; }, loseResponse: () => { loseRegistrationResponse = true; } };
70
+ }
71
+ function registeredTaskAction(scripts) {
72
+ const registration = scripts.find(script => script.includes('dharma-wsl-host:register'));
73
+ const match = /New-ScheduledTaskAction -Execute '([^']+)' -Argument '([^']+)'/.exec(registration);
74
+ assert.ok(match, 'expected one fixed task action');
75
+ return { execute: match[1], arguments: match[2] };
76
+ }
77
+ test('WSL task uses the verified PowerShell host for its fixed native wait action', async (t) => {
78
+ const f = await fixture(t);
79
+ await enableRelayAutostart(f.options);
80
+ const action = registeredTaskAction(f.scripts);
81
+ assert.equal(action.execute, 'C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe');
82
+ assert.match(action.arguments, /^-NoLogo -NoProfile -NonInteractive -WindowStyle Hidden -EncodedCommand [A-Za-z0-9+/=]+$/);
83
+ const script = Buffer.from(action.arguments.split(' ').at(-1), 'base64').toString('utf16le');
84
+ assert.equal(script, "$ErrorActionPreference='Stop'; & 'C:\\Windows\\System32\\wsl.exe' --distribution 'Ubuntu' --user 'maatru' --cd / --exec /usr/bin/systemctl --user start --wait dharma-agent-fabric.service; exit $LASTEXITCODE");
85
+ assert.doesNotMatch(script, /ExecutionPolicy|credential|password|token|grant|Start-Process|Invoke-Expression/i);
86
+ });
87
+ test('optional WSL task lookup distinguishes exact absence from a failed scheduler read', async () => {
88
+ const source = await readFile(new URL('../src/wslRelayHost.ts', import.meta.url), 'utf8');
89
+ const ast = ts.createSourceFile('wslRelayHost.ts', source, ts.ScriptTarget.Latest, true);
90
+ const declaration = ast.statements.find(node => ts.isFunctionDeclaration(node) && node.name?.text === 'lookup');
91
+ assert.ok(declaration && ts.isFunctionDeclaration(declaration));
92
+ const compiled = ts.transpileModule(declaration.getText(ast), { compilerOptions: {
93
+ target: ts.ScriptTarget.ES2023, module: ts.ModuleKind.CommonJS
94
+ } }).outputText;
95
+ const lookup = compileFunction(compiled + '\nreturn lookup;', ['literal'])((s) => `'${s.replaceAll("'", "''")}'`);
96
+ const query = lookup({ taskName: 'SyntheticFixture' });
97
+ assert.doesNotMatch(query, /SilentlyContinue/);
98
+ assert.match(query, /-ErrorAction Stop/);
99
+ assert.match(query, /CmdletizationQuery_NotFound,Get-ScheduledTask/);
100
+ assert.match(query, /ObjectNotFound/);
101
+ if (process.platform === 'win32') {
102
+ for (const id of ['CmdletizationQuery_NotFound,Get-ScheduledTask', 'AccessDenied', 'SchedulerUnavailable']) {
103
+ const script = `function Get-ScheduledTask { throw [System.Management.Automation.ErrorRecord]::new(`
104
+ + `[Exception]::new('synthetic'), '${id}', [System.Management.Automation.ErrorCategory]::ObjectNotFound, $null) }; `
105
+ + `try { ${query}; if($null -eq $task){[Console]::Out.Write('absent')} } catch {[Console]::Out.Write('failed')} `;
106
+ const result = spawnSync('powershell.exe', ['-NoProfile', '-NonInteractive', '-EncodedCommand',
107
+ Buffer.from(script, 'utf16le').toString('base64')], { encoding: 'utf8', timeout: 15000, windowsHide: true });
108
+ assert.equal(result.status, 0, result.stderr);
109
+ assert.equal(result.stdout, id.startsWith('CmdletizationQuery_NotFound,') ? 'absent' : 'failed');
110
+ }
111
+ }
112
+ });
113
+ test('WSL startup registers an exact user-logon host action instead of relying on systemd lifetime', async (t) => {
114
+ const { options, scripts } = await fixture(t);
115
+ await enableRelayAutostart(options);
116
+ assert(scripts.some(script => script.includes('dharma-wsl-host:register')), 'an enabled Linux service alone cannot keep the WSL distro alive');
117
+ const receipt = await readFile(join(options.home, 'relay', 'wsl-host.json'), 'utf8');
118
+ assert.doesNotMatch(receipt, /password|token|grant|credential/i);
119
+ const action = scripts.find(script => script.includes('dharma-wsl-host:register'));
120
+ const nativeAction = registeredTaskAction(scripts);
121
+ assert.match(Buffer.from(nativeAction.arguments.split(' ').at(-1), 'base64').toString('utf16le'), /start --wait dharma-agent-fabric\.service/);
122
+ assert.match(action, /-LogonType Interactive -RunLevel Limited/);
123
+ assert.match(action, /New-ScheduledTaskTrigger -AtLogOn -User \$current\.Name/);
124
+ assert.match(action, /New-ScheduledTaskPrincipal -UserId \$current\.Name/);
125
+ assert.match(action, /Export-ScheduledTask -TaskPath/);
126
+ assert.match(action, /\$principals\[0\]\.UserId -cne \$current\.User\.Value/);
127
+ assert.doesNotMatch(action, /-Force|ExecutionPolicy|wsl.*--shutdown|sleep infinity/);
128
+ const status = await relayAutostartStatus(options);
129
+ assert.equal(status.state, 'enabled');
130
+ assert.equal(Reflect.get(status, 'restartCoverage'), 'wsl-host-logon');
131
+ assert.equal(Reflect.get(status, 'hostLifecycle'), 'registered');
132
+ await startRelayAutostart(options);
133
+ assert.equal(Reflect.get(await relayAutostartStatus(options), 'hostLifecycle'), 'running');
134
+ const registrationCalls = scripts.filter(script => script.includes('dharma-wsl-host:register')).length;
135
+ await enableRelayAutostart(options);
136
+ assert.equal(scripts.filter(script => script.includes('dharma-wsl-host:register')).length, registrationCalls);
137
+ await disableRelayAutostart(options);
138
+ assert(scripts.some(script => script.includes('dharma-wsl-host:disable')));
139
+ await assert.rejects(readFile(join(options.home, 'relay', 'wsl-host.json')), { code: 'ENOENT' });
140
+ });
141
+ test('the actual WSL guard validates the persisted SID rather than a normalized account alias', { skip: process.platform !== 'win32' }, async (t) => {
142
+ const f = await fixture(t);
143
+ await enableRelayAutostart(f.options);
144
+ const preamble = f.scripts.find(s => s.includes('dharma-wsl-host:status'));
145
+ const start = preamble.indexOf('function '), end = preamble.indexOf('if ($null -eq $task)');
146
+ assert.ok(start > 0 && end > start);
147
+ const guard = preamble.slice(start, end);
148
+ const task = { Description: 'synthetic', Actions: [{ Execute: 'C:\\Windows\\System32\\wsl.exe', Arguments: 'synthetic' }],
149
+ Principal: { UserId: '', LogonType: 'Interactive', RunLevel: 'Limited' },
150
+ Triggers: [{ CimClass: { CimClassName: 'MSFT_TaskLogonTrigger' }, Enabled: true, UserId: '' }],
151
+ Settings: { MultipleInstances: 'IgnoreNew', ExecutionTimeLimit: 'PT0S', RestartCount: 0, DisallowStartIfOnBatteries: false, StopIfGoingOnBatteries: false } };
152
+ const receipt = JSON.parse(await readFile(join(f.options.home, 'relay', 'wsl-host.json'), 'utf8'));
153
+ const action = registeredTaskAction(f.scripts);
154
+ task.Description = receipt.description;
155
+ task.Actions[0].Execute = action.execute;
156
+ task.Actions[0].Arguments = action.arguments;
157
+ for (const { foreign, legacyDirectAction } of [{ foreign: false, legacyDirectAction: false },
158
+ { foreign: true, legacyDirectAction: false }, { foreign: false, legacyDirectAction: true }]) {
159
+ const rejected = foreign || legacyDirectAction;
160
+ const taskFixture = structuredClone(task);
161
+ if (legacyDirectAction) {
162
+ taskFixture.Actions[0].Execute = receipt.executable;
163
+ taskFixture.Actions[0].Arguments = receipt.arguments;
164
+ }
165
+ const script = `$ErrorActionPreference='Stop';$current=[System.Security.Principal.WindowsIdentity]::GetCurrent(); `
166
+ + `$fixturePrincipalSid=${foreign ? "'S-1-5-18'" : '$current.User.Value'}; `
167
+ + `function Export-ScheduledTask { '<Task><Principals><Principal><UserId>'+$fixturePrincipalSid+'</UserId></Principal></Principals></Task>' }; `
168
+ + `$task=ConvertFrom-Json ([Console]::In.ReadToEnd());$task.Principal.UserId=($current.Name -split '\\\\')[-1]; `
169
+ + `$task.Triggers[0].UserId=$current.Name; ${guard}; `
170
+ + `try{Assert-OwnedTask $task;[Console]::Out.Write('owned')}catch{[Console]::Out.Write('refused');`
171
+ + `if(!${rejected ? '$true' : '$false'}){[Console]::Error.Write($_.Exception.Message)}}`;
172
+ const result = spawnSync('powershell.exe', ['-NoProfile', '-NonInteractive', '-EncodedCommand', Buffer.from(script, 'utf16le').toString('base64')], { input: JSON.stringify(taskFixture), encoding: 'utf8', timeout: 15000, windowsHide: true });
173
+ assert.equal(result.status, 0, result.stderr);
174
+ assert.equal(result.stdout, rejected ? 'refused' : 'owned', result.stderr);
175
+ }
176
+ });
177
+ test('a foreign WSL host task is refused before startup registration writes', async (t) => {
178
+ const f = await fixture(t);
179
+ f.foreignTask();
180
+ await assert.rejects(assertRelayStartupOwnership(f.options), /autostart_conflict/);
181
+ await assert.rejects(enableRelayAutostart(f.options), /autostart_conflict/);
182
+ assert(!f.scripts.some(script => script.includes('dharma-wsl-host:register')));
183
+ await assert.rejects(readFile(join(f.options.home, 'relay', 'autostart.json')), { code: 'ENOENT' });
184
+ });
185
+ test('a lost registration response preserves ownership and readback reconciles without replacement', async (t) => {
186
+ const f = await fixture(t);
187
+ f.loseResponse();
188
+ await assert.rejects(enableRelayAutostart(f.options), /wsl_host_startup_unavailable/);
189
+ assert.equal((await relayAutostartStatus(f.options)).state, 'enabled');
190
+ const before = f.scripts.filter(script => script.includes('dharma-wsl-host:register')).length;
191
+ await enableRelayAutostart(f.options);
192
+ assert.equal(f.scripts.filter(script => script.includes('dharma-wsl-host:register')).length, before);
193
+ });
194
+ test('changed WSL recipient and injected host fields cannot be adopted, started or disabled', async (t) => {
195
+ const f = await fixture(t);
196
+ await enableRelayAutostart(f.options);
197
+ const path = join(f.options.home, 'relay', 'wsl-host.json');
198
+ const original = await readFile(path, 'utf8');
199
+ const record = JSON.parse(original);
200
+ for (const delta of [{ windowsSid: 'S-1-5-21-123-456-789-9001' }, { arguments: 'arbitrary.exe' },
201
+ { distribution: 'foreign' }, { extra: 'CANARY_PRIVATE_MATERIAL' }]) {
202
+ await writeFile(path, JSON.stringify({ ...record, ...delta }));
203
+ f.scripts.length = 0;
204
+ assert.equal((await relayAutostartStatus(f.options)).state, 'unavailable');
205
+ await assert.rejects(startRelayAutostart(f.options), /autostart_conflict|unavailable/);
206
+ await assert.rejects(disableRelayAutostart(f.options), /autostart_conflict|unavailable/);
207
+ assert(!f.scripts.some(script => /dharma-wsl-host:(register|start|disable)/.test(script)));
208
+ }
209
+ });
210
+ test('unavailable WSL interop and malformed distro metadata fail before startup writes', async (t) => {
211
+ const f = await fixture(t);
212
+ const badContexts = [{ distribution: 'Ubuntu"; cmd', linuxUser: 'maatru' },
213
+ { distribution: 'Ubuntu\n', linuxUser: 'maatru' }, { distribution: 'Ubuntu', linuxUser: 'maatru;cmd' }];
214
+ for (const current of badContexts) {
215
+ await assert.rejects(enableRelayAutostart({ ...f.options, wslHost: { ...f.options.wslHost,
216
+ context: async () => current } }), /wsl_host_startup_unavailable/);
217
+ }
218
+ await assert.rejects(enableRelayAutostart({ ...f.options, wslHost: { ...f.options.wslHost,
219
+ run: async () => { throw new Error('interop unavailable'); } } }), /wsl_host_startup_unavailable/);
220
+ await assert.rejects(readFile(join(f.options.home, 'relay', 'autostart.json')), { code: 'ENOENT' });
221
+ assert.deepEqual(f.scripts, []);
222
+ });
223
+ test('WSL cannot report complete startup coverage after its host receipt is lost', async (t) => {
224
+ const { options } = await fixture(t);
225
+ await enableRelayAutostart(options);
226
+ await rm(join(options.home, 'relay', 'wsl-host.json'), { force: true });
227
+ const status = await relayAutostartStatus(options);
228
+ assert.equal(status.state, 'unavailable');
229
+ assert.equal(status.reason, 'wsl_host_startup_unavailable');
230
+ });
231
+ test('bare Linux startup does not query or register any Windows host task', async (t) => {
232
+ const { options, scripts } = await fixture(t);
233
+ const bare = { ...options, wslHost: { ...options.wslHost, context: async () => null } };
234
+ await enableRelayAutostart(bare);
235
+ assert.equal((await relayAutostartStatus(bare)).state, 'enabled');
236
+ assert.deepEqual(scripts, []);
237
+ });
238
+ test('injected OS controls also contain Windows interop instead of escaping through a real runner', async (t) => {
239
+ const f = await fixture(t);
240
+ const seen = [];
241
+ const options = { ...f.options, wslHost: { context: f.options.wslHost.context },
242
+ run: async (file, args) => {
243
+ seen.push(file);
244
+ if (file === 'systemctl')
245
+ return { stdout: 'enabled\n' };
246
+ assert.equal(file, '/init');
247
+ return f.options.wslHost.run(Buffer.from(args.at(-1), 'base64').toString('utf16le'));
248
+ } };
249
+ await enableRelayAutostart(options);
250
+ assert(seen.includes('/init'));
251
+ });
252
+ test('withdrawal during WSL registration preserves the receipt but admits no later OS action', async (t) => {
253
+ const f = await fixture(t), controller = new AbortController(), now = Date.now();
254
+ const prepared = prepareCodexBootstrapHost({ workspace: f.options.userHome, signal: controller.signal, current: async () => true,
255
+ intent: { schema: 'dharma.codex-setup-intent/v1', operationId: '11111111-1111-4111-8111-111111111111',
256
+ setupReference: '22222222-2222-4222-8222-222222222222', organizationId: 'org_demo',
257
+ recipientMembershipId: '33333333-3333-4333-8333-333333333333', origin: 'https://hq.example',
258
+ repositoryFingerprint: `sha256:${'a'.repeat(64)}`, policyRevision: 'policy-v1',
259
+ scopeDigest: `sha256:${'a'.repeat(64)}`, contractDigest: `sha256:${'b'.repeat(64)}`,
260
+ hostContextId: '44444444-4444-4444-8444-444444444444', issuedAt: new Date(now - 1000).toISOString(),
261
+ expiresAt: new Date(now + 60000).toISOString() } });
262
+ t.after(() => prepared.scope.close());
263
+ const options = { ...f.options, wslHost: { ...f.options.wslHost, run: async (script) => {
264
+ const result = await f.options.wslHost.run(script);
265
+ if (script.includes('dharma-wsl-host:register'))
266
+ controller.abort();
267
+ return result;
268
+ } } };
269
+ await assert.rejects(runCodexBootstrapHostScope(prepared.scope, () => enableRelayAutostart(options)), /scope_unavailable/);
270
+ assert(f.scripts.at(-1)?.includes('dharma-wsl-host:register'));
271
+ assert.equal(JSON.parse(await readFile(join(options.home, 'relay', 'wsl-host.json'), 'utf8')).schema, 'dharma.wsl-relay-host/v1');
272
+ });
273
+ test('WSL systemd startup resolves missing session metadata only from its owned binding', () => {
274
+ const installed = { schema: 'dharma.wsl-relay-host/v1', distribution: 'Ubuntu', linuxUser: 'maatru' };
275
+ assert.deepEqual(resolveWslRelayContext(undefined, 'maatru', installed), { distribution: 'Ubuntu', linuxUser: 'maatru' });
276
+ for (const value of [null, {}, { ...installed, linuxUser: 'other' }, { ...installed, distribution: 'Ubuntu\n' }]) {
277
+ assert.throws(() => resolveWslRelayContext(undefined, 'maatru', value), /wsl_host_startup_unavailable/);
278
+ }
279
+ });
280
+ test('WSL host receipt schema excludes secrets and unbounded command authority', async (t) => {
281
+ const f = await fixture(t);
282
+ await enableRelayAutostart(f.options);
283
+ const record = JSON.parse(await readFile(join(f.options.home, 'relay', 'wsl-host.json'), 'utf8'));
284
+ const schema = 'https://schemas.dharma-ai.io/wsl-relay-host/v1';
285
+ const validate = (value) => validateContract(join(import.meta.dirname, 'schemas'), schema, value);
286
+ assert.equal((await validate(record)).ok, true);
287
+ for (const delta of [{ token: 'CANARY_NEVER_ALLOWED' }, { password: 'CANARY_NEVER_ALLOWED' },
288
+ { arguments: 'arbitrary.exe' }, { windowsSid: '*' }, { linuxUser: 'user;cmd' }]) {
289
+ assert.equal((await validate({ ...record, ...delta })).ok, false);
290
+ }
291
+ });
292
+ test('generated WSL host commands pass the actual Windows PowerShell parser without execution', { skip: process.platform !== 'win32' }, async (t) => {
293
+ const f = await fixture(t);
294
+ await enableRelayAutostart(f.options);
295
+ await startRelayAutostart(f.options);
296
+ await disableRelayAutostart(f.options);
297
+ const script = `$items=ConvertFrom-Json ([Console]::In.ReadToEnd()); `
298
+ + `foreach($item in $items) {$tokens=$null;$errors=$null; `
299
+ + `[System.Management.Automation.Language.Parser]::ParseInput($item,[ref]$tokens,[ref]$errors)|Out-Null; `
300
+ + `if ($errors.Count -gt 0) {[Console]::Error.Write('generated_wsl_host_parse_error');exit 1}}; `
301
+ + `[Console]::Out.Write($items.Count)`;
302
+ const result = spawnSync('powershell.exe', ['-NoLogo', '-NoProfile', '-NonInteractive', '-EncodedCommand',
303
+ Buffer.from(script, 'utf16le').toString('base64')], { input: JSON.stringify(f.scripts), encoding: 'utf8', timeout: 15000, windowsHide: true, maxBuffer: 16384 });
304
+ assert.equal(result.error, undefined);
305
+ assert.equal(result.status, 0, result.stderr);
306
+ assert.equal(Number(result.stdout), f.scripts.length);
307
+ });
308
+ //# sourceMappingURL=wslRelayHost.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wslRelayHost.test.js","sourceRoot":"","sources":["../src/wslRelayHost.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dharma-ai-labs/agent-fabric",
3
- "version": "0.2.198",
3
+ "version": "0.2.200",
4
4
  "description": "Local-first CLI for connecting coding agents to Dharma evaluation, orchestration, and signed Skill delivery",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/dharma-ai-labs/dharma-agent-fabric/tree/main/packages/cli#readme",