@dharma-ai-labs/agent-fabric 0.2.205 → 0.2.207

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 (42) hide show
  1. package/dist/bootstrapHostScope.test.js +2 -1
  2. package/dist/bootstrapHostScope.test.js.map +1 -1
  3. package/dist/bootstrapVaultScope.test.js +32 -1
  4. package/dist/bootstrapVaultScope.test.js.map +1 -1
  5. package/dist/codexInboxSession.d.ts +1 -1
  6. package/dist/cooperativeInboxSession.d.ts +1 -1
  7. package/dist/demoPeer.d.ts +2 -2
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +69 -3
  10. package/dist/index.js.map +1 -1
  11. package/dist/namedSessionAdmission.d.ts +23 -0
  12. package/dist/namedSessionAdmission.d.ts.map +1 -0
  13. package/dist/namedSessionAdmission.js +120 -0
  14. package/dist/namedSessionAdmission.js.map +1 -0
  15. package/dist/namedSessionAdmission.test.d.ts +2 -0
  16. package/dist/namedSessionAdmission.test.d.ts.map +1 -0
  17. package/dist/namedSessionAdmission.test.js +151 -0
  18. package/dist/namedSessionAdmission.test.js.map +1 -0
  19. package/dist/namedSessionMaintenance.d.ts +49 -0
  20. package/dist/namedSessionMaintenance.d.ts.map +1 -0
  21. package/dist/namedSessionMaintenance.js +79 -0
  22. package/dist/namedSessionMaintenance.js.map +1 -0
  23. package/dist/namedSessionMaintenance.test.d.ts +2 -0
  24. package/dist/namedSessionMaintenance.test.d.ts.map +1 -0
  25. package/dist/namedSessionMaintenance.test.js +141 -0
  26. package/dist/namedSessionMaintenance.test.js.map +1 -0
  27. package/dist/namedSessionService.d.ts +5 -0
  28. package/dist/namedSessionService.d.ts.map +1 -1
  29. package/dist/namedSessionService.js +106 -32
  30. package/dist/namedSessionService.js.map +1 -1
  31. package/dist/namedSessionService.test.js +58 -3
  32. package/dist/namedSessionService.test.js.map +1 -1
  33. package/dist/providerSessionReplyRecovery.d.ts +1 -1
  34. package/dist/relayRuntimeUpgrade.test.js +2 -1
  35. package/dist/relayRuntimeUpgrade.test.js.map +1 -1
  36. package/dist/repositoryLaunchers.d.ts.map +1 -1
  37. package/dist/repositoryLaunchers.js +10 -4
  38. package/dist/repositoryLaunchers.js.map +1 -1
  39. package/dist/repositoryLaunchers.test.js +57 -0
  40. package/dist/repositoryLaunchers.test.js.map +1 -1
  41. package/dist/schemas/named-session-maintenance.schema.json +38 -0
  42. package/package.json +1 -1
@@ -0,0 +1,141 @@
1
+ import assert from 'node:assert/strict';
2
+ import { randomUUID } from 'node:crypto';
3
+ import test from 'node:test';
4
+ import { activateMaintenanceRestart, maintainNamedSession, recoverStoppedNamedSession } from './namedSessionMaintenance.js';
5
+ import { assertNamedSessionStartupRegistration } from './namedSessionAdmission.js';
6
+ import { validateContract } from '@dharma-ai-labs/agent-fabric-contracts';
7
+ import { join } from 'node:path';
8
+ function fixture() {
9
+ const registration = { schema: 'dharma.named-session/v1', name: 'reviewer',
10
+ bindingId: randomUUID(), enabled: true, maximumCostCents: 100, maximumTurnCostCents: 25,
11
+ identity: { organizationId: 'org_test', repositoryBindingId: randomUUID(), workspaceId: randomUUID(),
12
+ endpointId: randomUUID(), membershipId: randomUUID(), deviceId: randomUUID(), provider: 'codex' } };
13
+ const fenceId = randomUUID(), generation = randomUUID(), sessionId = randomUUID();
14
+ const status = { ok: true, name: registration.name, bindingId: registration.bindingId,
15
+ ...registration.identity, sessionId, admission: { generation, fenceId: null, pending: 0, state: 'open' } };
16
+ const receipt = { ok: true, schema: 'dharma.named-session-maintenance/v1', receiptId: randomUUID(),
17
+ ...registration.identity, name: registration.name, bindingId: registration.bindingId, sessionId,
18
+ action: 'quiesce', fenceId, generation, mode: 'live', state: 'quiesced', pending: 0, automaticRestartEnabled: false, observedAt: new Date().toISOString() };
19
+ return { registration, fenceId, generation, status, receipt };
20
+ }
21
+ for (const action of ['quiesce', 'resume', 'stop-drained'])
22
+ test(`maintenance ${action} binds the actual owner generation and scoped receipt`, async () => {
23
+ const value = fixture(), requests = [];
24
+ value.receipt.action = action;
25
+ value.receipt.state = action === 'quiesce' ? 'quiesced' : action === 'resume' ? 'open' : 'stop_requested';
26
+ value.receipt.automaticRestartEnabled = action === 'resume';
27
+ const result = await maintainNamedSession({ ...value, action, request: async (body) => {
28
+ requests.push(body);
29
+ return requests.length === 1 ? value.status : value.receipt;
30
+ } });
31
+ assert.deepEqual(requests, [{ action: 'status' }, { action, fenceId: value.fenceId, generation: value.generation }]);
32
+ assert.deepEqual(result, value.receipt);
33
+ });
34
+ test('a legacy service lacking a real admission fence is rejected before a control request', async () => {
35
+ const value = fixture(), requests = [];
36
+ delete value.status.admission;
37
+ await assert.rejects(maintainNamedSession({ ...value, action: 'quiesce', request: async (body) => {
38
+ requests.push(body);
39
+ return value.status;
40
+ } }), /named_session_quiescence_not_supported/);
41
+ assert.deepEqual(requests, [{ action: 'status' }]);
42
+ });
43
+ test('foreign owner, repository, member or device cannot authorize a maintenance request', async () => {
44
+ for (const key of ['name', 'bindingId', 'organizationId', 'repositoryBindingId', 'membershipId', 'deviceId', 'workspaceId', 'endpointId']) {
45
+ const value = fixture();
46
+ value.status[key] = key === 'name' ? 'foreign' : key === 'organizationId' ? 'org_foreign' : randomUUID();
47
+ const requests = [];
48
+ await assert.rejects(maintainNamedSession({ ...value, action: 'quiesce', request: async (body) => {
49
+ requests.push(body);
50
+ return value.status;
51
+ } }), /named_session_scope_mismatch/);
52
+ assert.deepEqual(requests, [{ action: 'status' }]);
53
+ }
54
+ });
55
+ test('invalid, stale, foreign or secret-bearing receipts never establish a drained boundary', async () => {
56
+ for (const change of [
57
+ { generation: randomUUID() }, { fenceId: randomUUID() }, { pending: 1 }, { state: 'open' }, { action: 'resume' },
58
+ { deviceId: randomUUID() }, { sessionId: randomUUID() }, { membershipId: randomUUID() },
59
+ { grant: 'dhab_PRIVATE_TEST_GRANT' }, { observedAt: 'invalid' }, { ok: false }, { automaticRestartEnabled: true },
60
+ ]) {
61
+ const value = fixture();
62
+ let requests = 0;
63
+ await assert.rejects(maintainNamedSession({ ...value, action: 'quiesce', request: async () => ++requests === 1 ? value.status : { ...value.receipt, ...change } }), /named_session_maintenance_scope_mismatch/);
64
+ assert.equal(requests, 2);
65
+ }
66
+ });
67
+ test('lost control responses are not retried or interpreted as successful drain', async () => {
68
+ const value = fixture();
69
+ let calls = 0;
70
+ await assert.rejects(maintainNamedSession({ ...value, action: 'quiesce', request: async () => {
71
+ if (++calls === 1)
72
+ return value.status;
73
+ throw Error('named_session_unavailable');
74
+ } }), /named_session_unavailable/);
75
+ assert.equal(calls, 2);
76
+ });
77
+ function recoveryFixture() {
78
+ const f = fixture(), registration = { ...f.registration, enabled: false,
79
+ maintenanceFence: { fenceId: f.fenceId, generation: f.generation } };
80
+ let current = registration, writes = 0, stateReads = 0;
81
+ const binding = { schema: 'dharma.local-provider-session-binding/v1',
82
+ ...registration.identity, bindingId: registration.bindingId, owner: 'dharma_bridge', sessionId: String(f.receipt.sessionId),
83
+ workspaceRoot: '/fixture/repo', createdAt: new Date().toISOString(), expiresAt: new Date(Date.now() + 60000).toISOString(), maximumProviderCostCents: 25 };
84
+ return { ...f, registration, binding, writes: () => writes, current: () => current,
85
+ input: { registration, fenceId: f.fenceId, workspace: '/fixture/repo', processState: async () => { stateReads++; return 'stopped'; },
86
+ readRegistration: async () => current, readBinding: async () => binding,
87
+ saveRegistration: async (value) => { writes++; current = value; } },
88
+ stateReads: () => stateReads };
89
+ }
90
+ test('explicit stopped-owner recovery preserves binding and budgets and does not start a provider', async () => {
91
+ const f = recoveryFixture(), receipt = await recoverStoppedNamedSession(f.input);
92
+ assert.equal(receipt.mode, 'stopped_recovery');
93
+ assert.equal(receipt.state, 'restart_permitted');
94
+ assert.equal(receipt.interruptedWorkDisposition, 'preserved_for_verified_start');
95
+ assert.equal(receipt.sessionId, f.binding.sessionId);
96
+ assert.equal(f.writes(), 1);
97
+ assert.equal(f.stateReads(), 2);
98
+ assert.equal(f.current()?.enabled, false);
99
+ assert.equal(receipt.automaticRestartEnabled, false);
100
+ assert.equal(f.current()?.maintenanceFence?.restartPermitted, true);
101
+ assert.throws(() => assertNamedSessionStartupRegistration(f.registration, f.current()), /named_session_quiesced/);
102
+ assert.equal((await validateContract(join(import.meta.dirname, 'schemas'), 'https://schemas.dharma-ai.io/named-session-maintenance/v1', receipt)).ok, true);
103
+ });
104
+ test('unavailable live owner and unknown process state never clear a persisted fence', async () => {
105
+ for (const state of ['running', 'unknown']) {
106
+ const f = recoveryFixture();
107
+ await assert.rejects(recoverStoppedNamedSession({ ...f.input, processState: async () => state }), /named_session_owner_not_stopped/);
108
+ assert.equal(f.writes(), 0);
109
+ assert.equal(f.current()?.enabled, false);
110
+ }
111
+ const f = recoveryFixture();
112
+ let reads = 0;
113
+ await assert.rejects(recoverStoppedNamedSession({ ...f.input, processState: async () => ++reads === 1 ? 'stopped' : 'running' }), /named_session_owner_not_stopped/);
114
+ assert.equal(f.writes(), 0);
115
+ });
116
+ test('stopped recovery rejects wrong fence, foreign binding, changed disk scope and expired authority before writes', async () => {
117
+ for (const kind of ['fence', 'binding', 'disk', 'expired']) {
118
+ const f = recoveryFixture();
119
+ const input = { ...f.input, ...(kind === 'fence' ? { fenceId: randomUUID() } : {}),
120
+ ...(kind === 'binding' ? { readBinding: async () => ({ ...f.binding, deviceId: randomUUID() }) } : {}),
121
+ ...(kind === 'disk' ? { readRegistration: async () => ({ ...f.registration, maximumCostCents: 200 }) } : {}),
122
+ ...(kind === 'expired' ? { readBinding: async () => ({ ...f.binding, expiresAt: new Date(0).toISOString() }) } : {}) };
123
+ await assert.rejects(recoverStoppedNamedSession(input), /named_session_maintenance_/);
124
+ assert.equal(f.writes(), 0);
125
+ }
126
+ });
127
+ test('restart-permitted registration remains supervisor-disabled until a matching explicit start', async () => {
128
+ const f = recoveryFixture();
129
+ await recoverStoppedNamedSession(f.input);
130
+ const permitted = f.current();
131
+ assert.equal(permitted.enabled, false);
132
+ await assert.rejects(activateMaintenanceRestart({ ...f.input, registration: permitted, fenceId: randomUUID() }), /named_session_maintenance_start_unavailable/);
133
+ assert.equal(f.current()?.enabled, false);
134
+ await assert.rejects(activateMaintenanceRestart({ ...f.input, registration: permitted, processState: async () => 'running' }), /named_session_owner_not_stopped/);
135
+ assert.equal(f.current()?.enabled, false);
136
+ await activateMaintenanceRestart({ ...f.input, registration: permitted });
137
+ const { maintenanceFence: _fence, ...base } = f.registration;
138
+ assert.deepEqual(f.current(), { ...base, enabled: true });
139
+ assert.equal(f.writes(), 2);
140
+ });
141
+ //# sourceMappingURL=namedSessionMaintenance.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"namedSessionMaintenance.test.js","sourceRoot":"","sources":["../src/namedSessionMaintenance.test.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,11 @@ export interface NamedSessionRegistration {
12
12
  maximumCostCents: number;
13
13
  maximumTurnCostCents: number;
14
14
  enabled: boolean;
15
+ maintenanceFence?: {
16
+ fenceId: string;
17
+ generation: string;
18
+ restartPermitted?: true;
19
+ };
15
20
  }
16
21
  export declare function namedSessionPaths(home: string, name: string): {
17
22
  root: string;
@@ -1 +1 @@
1
- {"version":3,"file":"namedSessionService.d.ts","sourceRoot":"","sources":["../src/namedSessionService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"namedSessionService.d.ts","sourceRoot":"","sources":["../src/namedSessionService.ts"],"names":[],"mappings":"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"}
@@ -2,20 +2,22 @@ import { createHash, randomUUID } from 'node:crypto';
2
2
  import { chmod, lstat, mkdir, readFile, rename, unlink, writeFile } from 'node:fs/promises';
3
3
  import { createConnection, createServer } from 'node:net';
4
4
  import { join, resolve } from 'node:path';
5
- import { validateContract } from '@dharma-ai-labs/agent-fabric-contracts';
5
+ import { canonicalize, validateContract } from '@dharma-ai-labs/agent-fabric-contracts';
6
6
  import { openCodexInboxSession } from './codexInboxSession.js';
7
7
  import { assertCodexWorkPrompt, codexWorkCaptureSchemaId } from '@dharma-ai-labs/agent-fabric-provider-adapters/experimental/codex-session';
8
8
  import { readNamedSessionNativeAudit } from './namedSessionNativeAudit.js';
9
9
  import { composeNamedSessionRepositoryPrompt } from './namedSessionPackageGate.js';
10
10
  import { parseNamedCodexSkillObservation } from './namedCodexSkillDiscovery.js';
11
+ import { NamedSessionAdmission } from './namedSessionAdmission.js';
11
12
  function validateRegistration(value, name) {
12
13
  if (!value || typeof value !== 'object' || Array.isArray(value))
13
14
  throw new Error('named_session_registration_invalid');
14
15
  const record = value;
15
- const keys = ['schema', 'name', 'bindingId', 'identity', 'maximumCostCents', 'maximumTurnCostCents', 'enabled'];
16
+ const keys = ['schema', 'name', 'bindingId', 'identity', 'maximumCostCents', 'maximumTurnCostCents', 'enabled', 'maintenanceFence'];
16
17
  const ids = ['repositoryBindingId', 'workspaceId', 'endpointId', 'membershipId', 'deviceId'];
17
18
  const uuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
18
19
  const identity = record.identity;
20
+ const fence = record.maintenanceFence;
19
21
  if (Object.keys(record).some(key => !keys.includes(key)) || record.schema !== 'dharma.named-session/v1'
20
22
  || record.name !== name || typeof record.enabled !== 'boolean'
21
23
  || !Number.isSafeInteger(record.maximumCostCents) || Number(record.maximumCostCents) < 1 || Number(record.maximumCostCents) > 10000
@@ -26,7 +28,12 @@ function validateRegistration(value, name) {
26
28
  || Object.keys(identity).some(key => ![...ids, 'organizationId', 'provider'].includes(key))
27
29
  || identity.provider !== 'codex' || typeof identity.organizationId !== 'string'
28
30
  || !/^[A-Za-z0-9][A-Za-z0-9_-]{0,199}$/.test(identity.organizationId)
29
- || ids.some(key => typeof identity[key] !== 'string' || !uuid.test(identity[key]))) {
31
+ || ids.some(key => typeof identity[key] !== 'string' || !uuid.test(identity[key]))
32
+ || fence !== undefined && (!fence || typeof fence !== 'object' || Array.isArray(fence)
33
+ || !['fenceId,generation', 'fenceId,generation,restartPermitted'].includes(Object.keys(fence).sort().join(',')) || record.enabled !== false
34
+ || fence.restartPermitted !== undefined && fence.restartPermitted !== true
35
+ || typeof fence.fenceId !== 'string' || !uuid.test(fence.fenceId)
36
+ || typeof fence.generation !== 'string' || !uuid.test(fence.generation))) {
30
37
  throw new Error('named_session_registration_invalid');
31
38
  }
32
39
  }
@@ -72,7 +79,7 @@ export async function namedSessionRequest(home, name, request) {
72
79
  return new Promise((resolveReply, reject) => {
73
80
  const socket = createConnection(paths.socket);
74
81
  let bytes = Buffer.alloc(0), complete = false;
75
- socket.setTimeout(request.action === 'work' ? 310_000 : 30_000);
82
+ socket.setTimeout(request.action === 'work' || request.action === 'quiesce' ? 310_000 : 30_000);
76
83
  const fail = () => { if (!complete) {
77
84
  complete = true;
78
85
  reject(new Error('named_session_unavailable'));
@@ -124,13 +131,16 @@ export async function runNamedSessionService(input) {
124
131
  let server;
125
132
  const connections = new Set();
126
133
  const responses = new Set();
127
- let closing = false, pending = 0, serial = Promise.resolve();
134
+ let closing = false;
135
+ const admission = new NamedSessionAdmission();
128
136
  let lastObservation = { state: 'starting' };
129
137
  let taskExports;
130
138
  const status = () => ({ ok: true, schema: 'dharma.named-session-status/v1', name: registration.name,
131
139
  bindingId: binding.bindingId, sessionId: binding.sessionId, ...registration.identity,
132
- state: closing ? 'stopping' : pending ? 'executing' : 'running', budget: budget.status(),
133
- queued: pending, lastObservation, lastWork: budget.lastWork(), ...(taskExports ? { taskExports } : {}) });
140
+ state: closing ? 'stopping' : admission.snapshot().state !== 'open' ? admission.snapshot().state
141
+ : admission.snapshot().pending ? 'executing' : 'running', budget: budget.status(),
142
+ queued: admission.snapshot().pending, admission: admission.snapshot(),
143
+ lastObservation, lastWork: budget.lastWork(), ...(taskExports ? { taskExports } : {}) });
134
144
  let healthWrites = Promise.resolve();
135
145
  const health = () => {
136
146
  const snapshot = JSON.stringify({ ...status(), pid: process.pid, observedAt: new Date().toISOString() });
@@ -143,22 +153,35 @@ export async function runNamedSessionService(input) {
143
153
  return write;
144
154
  };
145
155
  function enqueue(operation) {
146
- if (closing || pending >= 8)
156
+ if (closing)
147
157
  return Promise.reject(new Error('named_session_busy'));
148
- pending++;
149
- const result = serial.then(async () => {
150
- try {
151
- if (closing)
152
- throw new Error('named_session_stopped');
153
- return await operation();
154
- }
155
- finally {
156
- pending--;
157
- await health();
158
- }
159
- });
160
- serial = result.then(() => undefined, () => undefined);
161
- return result;
158
+ return admission.enqueue(async () => {
159
+ if (closing)
160
+ throw new Error('named_session_stopped');
161
+ return operation();
162
+ }, health);
163
+ }
164
+ async function maintenanceRegistration(enabled, write, fenceId, generation) {
165
+ try {
166
+ const { maintenanceFence: _oldFence, ...base } = registration;
167
+ const fence = { fenceId, generation };
168
+ const current = await readNamedSession(input.home, registration.name);
169
+ if (!current)
170
+ throw new Error('unconfirmed');
171
+ const { maintenanceFence: currentFence, ...currentBase } = current;
172
+ if (canonicalize({ ...currentBase, enabled: base.enabled }) !== canonicalize(base)
173
+ || currentFence && canonicalize(currentFence) !== canonicalize(fence))
174
+ throw new Error('unconfirmed');
175
+ const expected = enabled ? { ...base, enabled: true } : { ...base, enabled: false, maintenanceFence: fence };
176
+ if (write)
177
+ await saveNamedSession(input.home, expected);
178
+ const observed = await readNamedSession(input.home, registration.name);
179
+ if (!observed || canonicalize(observed) !== canonicalize(expected))
180
+ throw new Error('unconfirmed');
181
+ }
182
+ catch {
183
+ throw new Error('named_session_maintenance_persistence_unconfirmed');
184
+ }
162
185
  }
163
186
  try {
164
187
  owner = await openCodexInboxSession({ ...input, ...registration,
@@ -216,7 +239,39 @@ export async function runNamedSessionService(input) {
216
239
  const request = JSON.parse(bytes.subarray(0, end).toString('utf8'));
217
240
  if (request.action === 'status')
218
241
  return status();
242
+ if (['quiesce', 'resume', 'stop-drained'].includes(String(request.action))) {
243
+ if (Object.keys(request).sort().join(',') !== 'action,fenceId,generation'
244
+ || typeof request.fenceId !== 'string' || typeof request.generation !== 'string'
245
+ || !await owner.assertActive())
246
+ throw new Error('named_session_maintenance_unavailable');
247
+ let state;
248
+ if (request.action === 'quiesce') {
249
+ await admission.quiesce(request.fenceId, request.generation, () => maintenanceRegistration(false, true, request.fenceId, request.generation));
250
+ if (!await owner.assertActive())
251
+ throw new Error('named_session_maintenance_unavailable');
252
+ state = 'quiesced';
253
+ }
254
+ else if (request.action === 'resume') {
255
+ await admission.resume(request.fenceId, request.generation, () => maintenanceRegistration(true, true, request.fenceId, request.generation));
256
+ state = 'open';
257
+ }
258
+ else {
259
+ // Quiescence already disabled automatic restart; verify it before irreversible shutdown.
260
+ await admission.stopDrained(request.fenceId, request.generation, () => maintenanceRegistration(false, false, request.fenceId, request.generation));
261
+ closing = true;
262
+ state = 'stop_requested';
263
+ }
264
+ const result = { ok: true, schema: 'dharma.named-session-maintenance/v1', receiptId: randomUUID(),
265
+ name: registration.name, bindingId: binding.bindingId, sessionId: binding.sessionId,
266
+ ...registration.identity, action: request.action, fenceId: request.fenceId,
267
+ generation: request.generation, mode: 'live', state, pending: 0, automaticRestartEnabled: state === 'open',
268
+ observedAt: new Date().toISOString() };
269
+ await health();
270
+ return result;
271
+ }
219
272
  if (request.action === 'stop') {
273
+ admission.stop();
274
+ await saveNamedSession(input.home, { ...registration, enabled: false });
220
275
  closing = true;
221
276
  return { ok: true, state: 'stop_requested' };
222
277
  }
@@ -350,16 +405,33 @@ export async function runNamedSessionService(input) {
350
405
  await health();
351
406
  let nextExportSyncAt = 0;
352
407
  while (!closing && !input.signal.aborted) {
353
- if (input.syncTaskExports && Date.now() >= nextExportSyncAt) {
354
- await enqueue(async () => {
355
- try {
356
- taskExports = await input.syncTaskExports();
357
- }
358
- catch {
359
- taskExports = { state: 'pending', pending: null, delivered: 0,
360
- code: 'task_export_sync_unavailable', acceptedLearningObservation: false };
361
- }
408
+ if (admission.snapshot().state !== 'open') {
409
+ await new Promise(resolveWait => {
410
+ const done = () => { clearTimeout(timer); input.signal.removeEventListener('abort', done); resolveWait(); };
411
+ const timer = setTimeout(done, 1000);
412
+ input.signal.addEventListener('abort', done, { once: true });
413
+ if (input.signal.aborted)
414
+ done();
362
415
  });
416
+ continue;
417
+ }
418
+ if (input.syncTaskExports && Date.now() >= nextExportSyncAt) {
419
+ try {
420
+ await enqueue(async () => {
421
+ try {
422
+ taskExports = await input.syncTaskExports();
423
+ }
424
+ catch {
425
+ taskExports = { state: 'pending', pending: null, delivered: 0,
426
+ code: 'task_export_sync_unavailable', acceptedLearningObservation: false };
427
+ }
428
+ });
429
+ }
430
+ catch (error) {
431
+ if (error instanceof Error && error.message === 'named_session_quiesced')
432
+ continue;
433
+ throw error;
434
+ }
363
435
  nextExportSyncAt = Date.now() + 30000;
364
436
  await health();
365
437
  }
@@ -370,6 +442,8 @@ export async function runNamedSessionService(input) {
370
442
  catch (error) {
371
443
  if (closing || input.signal.aborted)
372
444
  break;
445
+ if (error instanceof Error && error.message === 'named_session_quiesced')
446
+ continue;
373
447
  throw error;
374
448
  }
375
449
  lastObservation = result;
@@ -397,7 +471,7 @@ export async function runNamedSessionService(input) {
397
471
  try {
398
472
  const serverClosed = server?.listening
399
473
  ? new Promise(resolveClose => server.close(() => resolveClose())) : null;
400
- await serial;
474
+ await admission.settled();
401
475
  // An accepted work failure must reach its caller before shutdown tears down the socket.
402
476
  await Promise.allSettled([...responses]);
403
477
  if (server) {
@@ -1 +1 @@
1
- {"version":3,"file":"namedSessionService.js","sourceRoot":"","sources":["../src/namedSessionService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"namedSessionService.js","sourceRoot":"","sources":["../src/namedSessionService.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import assert from 'node:assert/strict';
2
2
  import { generateKeyPairSync, randomBytes, randomUUID } from 'node:crypto';
3
- import { mkdir, mkdtemp, readFile, readdir, writeFile } from 'node:fs/promises';
3
+ import { chmod, mkdir, mkdtemp, readFile, readdir, writeFile } from 'node:fs/promises';
4
4
  import { tmpdir } from 'node:os';
5
5
  import { join } from 'node:path';
6
6
  import test from 'node:test';
@@ -15,6 +15,15 @@ test('durable named registration excludes credentials, grants and foreign shape'
15
15
  const good = { schema: 'dharma.named-session/v1', name: 'reviewer', bindingId: randomUUID(),
16
16
  identity, maximumCostCents: 100, maximumTurnCostCents: 25, enabled: true };
17
17
  await saveNamedSession(home, good);
18
+ const paused = { ...good, enabled: false, maintenanceFence: { fenceId: randomUUID(), generation: randomUUID() } };
19
+ await saveNamedSession(home, paused);
20
+ await assert.rejects(saveNamedSession(home, { ...paused, enabled: true }), /registration_invalid/);
21
+ assert.deepEqual(await readNamedSession(home, 'reviewer'), paused);
22
+ const permitted = { ...paused, maintenanceFence: { ...paused.maintenanceFence, restartPermitted: true } };
23
+ await saveNamedSession(home, permitted);
24
+ assert.deepEqual(await readNamedSession(home, 'reviewer'), permitted);
25
+ await assert.rejects(saveNamedSession(home, { ...permitted, enabled: true }), /registration_invalid/);
26
+ await saveNamedSession(home, good);
18
27
  for (const invalid of [{ ...good, grant: 'private-fixture' }, { ...good, maximumTurnCostCents: 101 },
19
28
  { ...good, identity: { ...identity, credential: 'private-fixture' } },
20
29
  { ...good, identity: { ...identity, membershipId: 'unbound-email' } }]) {
@@ -51,7 +60,7 @@ for (const queueFailure of [false, true])
51
60
  vault.saveProviderSessionBinding(binding);
52
61
  const controller = new AbortController(), turns = [], replies = [];
53
62
  const listeners = new Set();
54
- let offered = false, accepted = false, active = 0, maximumActive = 0, closed = false, revision = 0;
63
+ let offered = false, accepted = false, active = 0, maximumActive = 0, closed = false, revision = 0, inboxPolls = 0;
55
64
  const questionId = randomUUID(), taskId = randomUUID(), now = new Date();
56
65
  const unsigned = { schema: 'dharma.session-question/v1', questionId, taskId,
57
66
  organizationId: identity.organizationId, repositoryBindingId: identity.repositoryBindingId,
@@ -134,8 +143,10 @@ for (const queueFailure of [false, true])
134
143
  organizationId: undefined, mode: 'bridge_owned', revision: ++revision, state: 'attached',
135
144
  leaseUntil: new Date(Date.now() + 60000).toISOString(), replay: false } };
136
145
  }
137
- if (value.action === 'inbox')
146
+ if (value.action === 'inbox') {
147
+ inboxPolls++;
138
148
  return { ...base, result: { offers: offered && !accepted ? [question] : [] } };
149
+ }
139
150
  if (value.action === 'accept')
140
151
  accepted = true;
141
152
  if (value.action === 'reply')
@@ -386,6 +397,40 @@ for (const queueFailure of [false, true])
386
397
  const completion = JSON.parse((await vault.getBlob(health.lastObservation.completionHash)).toString('utf8'));
387
398
  assert.equal((await validateContract(join(import.meta.dirname, 'schemas'), 'https://schemas.dharma-ai.io/provider-session-completion/v1', completion)).ok, true);
388
399
  assert.equal((await namedSessionRequest(home, 'implementer', { action: 'status' })).sessionId, binding.sessionId);
400
+ const current = await namedSessionRequest(home, 'implementer', { action: 'status' });
401
+ const generation = current.admission.generation, fenceId = randomUUID();
402
+ const failedFence = randomUUID(), registrationRoot = namedSessionPaths(home, 'implementer').root;
403
+ await chmod(registrationRoot, 0o500);
404
+ try {
405
+ await assert.rejects(namedSessionRequest(home, 'implementer', { action: 'quiesce', fenceId: failedFence, generation }), { message: 'named_session_maintenance_persistence_unconfirmed' });
406
+ assert.equal((await namedSessionRequest(home, 'implementer', { action: 'status' })).admission.state, 'quiesced');
407
+ await assert.rejects(namedSessionRequest(home, 'implementer', { action: 'work', workId: randomUUID(), prompt: 'Do not admit' }), /named_session_quiesced/);
408
+ }
409
+ finally {
410
+ await chmod(registrationRoot, 0o700);
411
+ }
412
+ await namedSessionRequest(home, 'implementer', { action: 'resume', fenceId: failedFence, generation });
413
+ assert.equal((await readNamedSession(home, 'implementer'))?.enabled, true);
414
+ await assert.rejects(namedSessionRequest(home, 'implementer', { action: 'quiesce', fenceId, generation: randomUUID() }), /named_session_generation_changed/);
415
+ const quiesced = await namedSessionRequest(home, 'implementer', { action: 'quiesce', fenceId, generation });
416
+ assert.equal(quiesced.state, 'quiesced');
417
+ assert.equal(quiesced.pending, 0);
418
+ assert.equal(quiesced.automaticRestartEnabled, false);
419
+ assert.equal((await readNamedSession(home, 'implementer'))?.enabled, false);
420
+ assert.deepEqual((await readNamedSession(home, 'implementer'))?.maintenanceFence, { fenceId, generation });
421
+ assert.equal((await validateContract(join(import.meta.dirname, 'schemas'), 'https://schemas.dharma-ai.io/named-session-maintenance/v1', quiesced)).ok, true);
422
+ const pollsAtFence = inboxPolls, budgetAtFence = (await namedSessionRequest(home, 'implementer', { action: 'status' })).budget;
423
+ await assert.rejects(namedSessionRequest(home, 'implementer', { action: 'work', workId: randomUUID(), prompt: 'Do not admit' }), /named_session_quiesced/);
424
+ await assert.rejects(namedSessionRequest(home, 'implementer', { action: 'resume', fenceId: randomUUID(), generation }), /named_session_fence_conflict/);
425
+ await assert.rejects(namedSessionRequest(home, 'implementer', { action: 'stop' }), /named_session_fence_required/);
426
+ await new Promise(resolveWait => setTimeout(resolveWait, 1100));
427
+ assert.equal(inboxPolls, pollsAtFence);
428
+ assert.equal(turns.length, 3);
429
+ assert.equal(active, 0);
430
+ assert.deepEqual((await namedSessionRequest(home, 'implementer', { action: 'status' })).budget, budgetAtFence);
431
+ assert.equal((await namedSessionRequest(home, 'implementer', { action: 'resume', fenceId, generation })).state, 'open');
432
+ assert.equal((await readNamedSession(home, 'implementer'))?.enabled, true);
433
+ assert.equal((await readNamedSession(home, 'implementer'))?.maintenanceFence, undefined);
389
434
  const retention = await vault.enforceRawEvidenceRetention({ retentionDays: 30,
390
435
  now: new Date(Date.now() + 31 * 86400000) });
391
436
  assert.equal(retention.deleted, 2);
@@ -393,6 +438,16 @@ for (const queueFailure of [false, true])
393
438
  await assert.rejects(vault.getBlob(String(receipt.nativeEvidence.contentHash)));
394
439
  assert.ok(await vault.getBlob(String(receipt.completionHash)));
395
440
  }
441
+ const stopFence = randomUUID();
442
+ await namedSessionRequest(home, 'implementer', { action: 'quiesce', fenceId: stopFence, generation });
443
+ await assert.rejects(namedSessionRequest(home, 'implementer', { action: 'stop-drained', fenceId: randomUUID(), generation }), /named_session_fence_conflict/);
444
+ assert.equal((await readNamedSession(home, 'implementer'))?.enabled, false);
445
+ const stopped = await namedSessionRequest(home, 'implementer', { action: 'stop-drained', fenceId: stopFence, generation });
446
+ assert.equal(stopped.state, 'stop_requested');
447
+ await service;
448
+ assert.equal((await readNamedSession(home, 'implementer'))?.enabled, false);
449
+ assert.equal(active, 0);
450
+ assert.equal(turns.length, 3);
396
451
  }
397
452
  finally {
398
453
  controller.abort();