@dharma-ai-labs/agent-fabric 0.2.206 → 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.
- package/dist/bootstrapHostScope.test.js +2 -1
- package/dist/bootstrapHostScope.test.js.map +1 -1
- package/dist/bootstrapVaultScope.test.js +32 -1
- package/dist/bootstrapVaultScope.test.js.map +1 -1
- package/dist/codexInboxSession.d.ts +1 -1
- package/dist/cooperativeInboxSession.d.ts +1 -1
- package/dist/demoPeer.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +69 -3
- package/dist/index.js.map +1 -1
- package/dist/namedSessionAdmission.d.ts +23 -0
- package/dist/namedSessionAdmission.d.ts.map +1 -0
- package/dist/namedSessionAdmission.js +120 -0
- package/dist/namedSessionAdmission.js.map +1 -0
- package/dist/namedSessionAdmission.test.d.ts +2 -0
- package/dist/namedSessionAdmission.test.d.ts.map +1 -0
- package/dist/namedSessionAdmission.test.js +151 -0
- package/dist/namedSessionAdmission.test.js.map +1 -0
- package/dist/namedSessionMaintenance.d.ts +49 -0
- package/dist/namedSessionMaintenance.d.ts.map +1 -0
- package/dist/namedSessionMaintenance.js +79 -0
- package/dist/namedSessionMaintenance.js.map +1 -0
- package/dist/namedSessionMaintenance.test.d.ts +2 -0
- package/dist/namedSessionMaintenance.test.d.ts.map +1 -0
- package/dist/namedSessionMaintenance.test.js +141 -0
- package/dist/namedSessionMaintenance.test.js.map +1 -0
- package/dist/namedSessionService.d.ts +5 -0
- package/dist/namedSessionService.d.ts.map +1 -1
- package/dist/namedSessionService.js +106 -32
- package/dist/namedSessionService.js.map +1 -1
- package/dist/namedSessionService.test.js +58 -3
- package/dist/namedSessionService.test.js.map +1 -1
- package/dist/providerSessionReplyRecovery.d.ts +1 -1
- package/dist/schemas/named-session-maintenance.schema.json +38 -0
- 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":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAC,UAAU,EAAC,MAAM,aAAa,CAAC;AACvC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAC,0BAA0B,EAAE,oBAAoB,EAAE,0BAA0B,EAAC,MAAM,8BAA8B,CAAC;AAC1H,OAAO,EAAC,qCAAqC,EAAC,MAAM,4BAA4B,CAAC;AAGjF,OAAO,EAAC,gBAAgB,EAAC,MAAM,wCAAwC,CAAC;AACxE,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAC;AAE/B,SAAS,OAAO;IACd,MAAM,YAAY,GAA6B,EAAC,MAAM,EAAC,yBAAyB,EAAE,IAAI,EAAC,UAAU;QAC/F,SAAS,EAAC,UAAU,EAAE,EAAE,OAAO,EAAC,IAAI,EAAE,gBAAgB,EAAC,GAAG,EAAE,oBAAoB,EAAC,EAAE;QACnF,QAAQ,EAAC,EAAC,cAAc,EAAC,UAAU,EAAE,mBAAmB,EAAC,UAAU,EAAE,EAAE,WAAW,EAAC,UAAU,EAAE;YAC7F,UAAU,EAAC,UAAU,EAAE,EAAE,YAAY,EAAC,UAAU,EAAE,EAAE,QAAQ,EAAC,UAAU,EAAE,EAAE,QAAQ,EAAC,OAAO,EAAC,EAAC,CAAC;IAClG,MAAM,OAAO,GAAG,UAAU,EAAE,EAAE,UAAU,GAAG,UAAU,EAAE,EAAE,SAAS,GAAG,UAAU,EAAE,CAAC;IAClF,MAAM,MAAM,GAA4B,EAAC,EAAE,EAAC,IAAI,EAAE,IAAI,EAAC,YAAY,CAAC,IAAI,EAAE,SAAS,EAAC,YAAY,CAAC,SAAS;QACxG,GAAG,YAAY,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAC,EAAC,UAAU,EAAE,OAAO,EAAC,IAAI,EAAE,OAAO,EAAC,CAAC,EAAE,KAAK,EAAC,MAAM,EAAC,EAAC,CAAC;IACtG,MAAM,OAAO,GAA4B,EAAC,EAAE,EAAC,IAAI,EAAE,MAAM,EAAC,qCAAqC,EAAE,SAAS,EAAC,UAAU,EAAE;QACrH,GAAG,YAAY,CAAC,QAAQ,EAAE,IAAI,EAAC,YAAY,CAAC,IAAI,EAAE,SAAS,EAAC,YAAY,CAAC,SAAS,EAAE,SAAS;QAC7F,MAAM,EAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAC,MAAM,EAAE,KAAK,EAAC,UAAU,EAAE,OAAO,EAAC,CAAC,EAAE,uBAAuB,EAAC,KAAK,EAAE,UAAU,EAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAC,CAAC;IACvJ,OAAO,EAAC,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAC,CAAC;AAC9D,CAAC;AAED,KAAK,MAAM,MAAM,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,cAAc,CAAU;IAAE,IAAI,CAAC,eAAe,MAAM,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACjK,MAAM,KAAK,GAAG,OAAO,EAAE,EAAE,QAAQ,GAA8B,EAAE,CAAC;QAClE,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;QAC9B,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC;QAC1G,KAAK,CAAC,OAAO,CAAC,uBAAuB,GAAG,MAAM,KAAK,QAAQ,CAAC;QAC5D,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,EAAC,GAAG,KAAK,EAAE,MAAM,EAAE,OAAO,EAAC,KAAK,EAAC,IAAI,EAAC,EAAE;gBAChF,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAAC,OAAO,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;YACnF,CAAC,EAAC,CAAC,CAAC;QACJ,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,EAAC,MAAM,EAAC,QAAQ,EAAC,EAAE,EAAC,MAAM,EAAE,OAAO,EAAC,KAAK,CAAC,OAAO,EAAE,UAAU,EAAC,KAAK,CAAC,UAAU,EAAC,CAAC,CAAC,CAAC;QAC9G,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,sFAAsF,EAAE,KAAK,IAAI,EAAE;IACtG,MAAM,KAAK,GAAG,OAAO,EAAE,EAAE,QAAQ,GAA8B,EAAE,CAAC;IAClE,OAAO,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;IAC9B,MAAM,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAC,GAAG,KAAK,EAAE,MAAM,EAAC,SAAS,EAAE,OAAO,EAAC,KAAK,EAAC,IAAI,EAAC,EAAE;YAC1F,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAAC,OAAO,KAAK,CAAC,MAAM,CAAC;QAC3C,CAAC,EAAC,CAAC,EAAE,wCAAwC,CAAC,CAAC;IAC/C,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,EAAC,MAAM,EAAC,QAAQ,EAAC,CAAC,CAAC,CAAC;AAClD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,oFAAoF,EAAE,KAAK,IAAI,EAAE;IACpG,KAAK,MAAM,GAAG,IAAI,CAAC,MAAM,EAAC,WAAW,EAAC,gBAAgB,EAAC,qBAAqB,EAAC,cAAc,EAAC,UAAU,EAAC,aAAa,EAAC,YAAY,CAAC,EAAE,CAAC;QACnI,MAAM,KAAK,GAAG,OAAO,EAAE,CAAC;QAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,gBAAgB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;QAClI,MAAM,QAAQ,GAA8B,EAAE,CAAC;QAC/C,MAAM,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAC,GAAG,KAAK,EAAE,MAAM,EAAC,SAAS,EAAE,OAAO,EAAC,KAAK,EAAC,IAAI,EAAC,EAAE;gBAC1F,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAAC,OAAO,KAAK,CAAC,MAAM,CAAC;YAC3C,CAAC,EAAC,CAAC,EAAE,8BAA8B,CAAC,CAAC;QACrC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,EAAC,MAAM,EAAC,QAAQ,EAAC,CAAC,CAAC,CAAC;IAClD,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,uFAAuF,EAAE,KAAK,IAAI,EAAE;IACvG,KAAK,MAAM,MAAM,IAAI;QACnB,EAAC,UAAU,EAAC,UAAU,EAAE,EAAC,EAAE,EAAC,OAAO,EAAC,UAAU,EAAE,EAAC,EAAE,EAAC,OAAO,EAAC,CAAC,EAAC,EAAE,EAAC,KAAK,EAAC,MAAM,EAAC,EAAE,EAAC,MAAM,EAAC,QAAQ,EAAC;QACjG,EAAC,QAAQ,EAAC,UAAU,EAAE,EAAC,EAAE,EAAC,SAAS,EAAC,UAAU,EAAE,EAAC,EAAE,EAAC,YAAY,EAAC,UAAU,EAAE,EAAC;QAC9E,EAAC,KAAK,EAAC,yBAAyB,EAAC,EAAE,EAAC,UAAU,EAAC,SAAS,EAAC,EAAE,EAAC,EAAE,EAAC,KAAK,EAAC,EAAE,EAAC,uBAAuB,EAAC,IAAI,EAAC;KACtG,EAAE,CAAC;QACF,MAAM,KAAK,GAAG,OAAO,EAAE,CAAC;QAAA,IAAI,QAAQ,GAAG,CAAC,CAAC;QACzC,MAAM,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAC,GAAG,KAAK,EAAE,MAAM,EAAC,SAAS,EAAE,OAAO,EAAC,KAAK,IAAI,EAAE,CACxF,EAAE,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,GAAG,KAAK,CAAC,OAAO,EAAE,GAAG,MAAM,EAAC,EAAC,CAAC,EAAE,0CAA0C,CAAC,CAAC;QACjH,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;IAC3F,MAAM,KAAK,GAAG,OAAO,EAAE,CAAC;IAAC,IAAI,KAAK,GAAG,CAAC,CAAC;IACvC,MAAM,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAC,GAAG,KAAK,EAAE,MAAM,EAAC,SAAS,EAAE,OAAO,EAAC,KAAK,IAAI,EAAE;YACxF,IAAI,EAAE,KAAK,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC,MAAM,CAAC;YACvC,MAAM,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC3C,CAAC,EAAC,CAAC,EAAE,2BAA2B,CAAC,CAAC;IAClC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACzB,CAAC,CAAC,CAAC;AAEH,SAAS,eAAe;IACtB,MAAM,CAAC,GAAC,OAAO,EAAE,EAAE,YAAY,GAAC,EAAC,GAAG,CAAC,CAAC,YAAY,EAAE,OAAO,EAAC,KAAK;QAC/D,gBAAgB,EAAC,EAAC,OAAO,EAAC,CAAC,CAAC,OAAO,EAAC,UAAU,EAAC,CAAC,CAAC,UAAU,EAAC,EAAC,CAAC;IAChE,IAAI,OAAO,GAAkC,YAAY,EAAE,MAAM,GAAC,CAAC,EAAE,UAAU,GAAC,CAAC,CAAC;IAClF,MAAM,OAAO,GAA8B,EAAC,MAAM,EAAC,0CAA0C;QAC3F,GAAG,YAAY,CAAC,QAAQ,EAAE,SAAS,EAAC,YAAY,CAAC,SAAS,EAAE,KAAK,EAAC,eAAe,EAAE,SAAS,EAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;QACxH,aAAa,EAAC,eAAe,EAAE,SAAS,EAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,SAAS,EAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAC,KAAK,CAAC,CAAC,WAAW,EAAE,EAAE,wBAAwB,EAAC,EAAE,EAAC,CAAC;IACtJ,OAAO,EAAC,GAAG,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAC,GAAE,EAAE,CAAA,MAAM,EAAE,OAAO,EAAC,GAAE,EAAE,CAAA,OAAO;QACzE,KAAK,EAAC,EAAC,YAAY,EAAE,OAAO,EAAC,CAAC,CAAC,OAAO,EAAE,SAAS,EAAC,eAAe,EAAE,YAAY,EAAC,KAAK,IAAI,EAAE,GAAE,UAAU,EAAE,CAAC,CAAA,OAAO,SAAkB,CAAC,CAAA,CAAC;YACnI,gBAAgB,EAAC,KAAK,IAAI,EAAE,CAAC,OAAO,EAAE,WAAW,EAAC,KAAK,IAAI,EAAE,CAAC,OAAO;YACrE,gBAAgB,EAAC,KAAK,EAAE,KAA8B,EAAE,EAAE,GAAE,MAAM,EAAE,CAAC,CAAA,OAAO,GAAC,KAAK,CAAC,CAAA,CAAC,EAAC;QACvF,UAAU,EAAC,GAAE,EAAE,CAAA,UAAU,EAAC,CAAC;AAC/B,CAAC;AAED,IAAI,CAAC,6FAA6F,EAAE,KAAK,IAAI,EAAE;IAC7G,MAAM,CAAC,GAAC,eAAe,EAAE,EAAE,OAAO,GAAC,MAAM,0BAA0B,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC7E,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAC,kBAAkB,CAAC,CAAC;IAAA,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAC,mBAAmB,CAAC,CAAC;IAC9F,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,0BAA0B,EAAC,8BAA8B,CAAC,CAAC;IAChF,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,EAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAAA,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,EAAC,CAAC,CAAC,CAAC;IAAA,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,EAAE,EAAC,CAAC,CAAC,CAAC;IAC9G,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,OAAO,EAAC,KAAK,CAAC,CAAC;IAAA,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,uBAAuB,EAAC,KAAK,CAAC,CAAC;IAC7F,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,gBAAgB,EAAE,gBAAgB,EAAC,IAAI,CAAC,CAAC;IACnE,MAAM,CAAC,MAAM,CAAC,GAAE,EAAE,CAAA,qCAAqC,CAAC,CAAC,CAAC,YAAY,EAAC,CAAC,CAAC,OAAO,EAAE,CAAC,EAAC,wBAAwB,CAAC,CAAC;IAC9G,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAC,SAAS,CAAC,EACtE,2DAA2D,EAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAC,IAAI,CAAC,CAAC;AACnF,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;IAChG,KAAI,MAAM,KAAK,IAAI,CAAC,SAAS,EAAC,SAAS,CAAU,EAAC,CAAC;QAAA,MAAM,CAAC,GAAC,eAAe,EAAE,CAAC;QAC3E,MAAM,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC,EAAC,GAAG,CAAC,CAAC,KAAK,EAAC,YAAY,EAAC,KAAK,IAAE,EAAE,CAAA,KAAK,EAAC,CAAC,EAAC,iCAAiC,CAAC,CAAC;QAC7H,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,EAAC,CAAC,CAAC,CAAC;QAAA,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,OAAO,EAAC,KAAK,CAAC,CAAC;IACtE,CAAC;IACD,MAAM,CAAC,GAAC,eAAe,EAAE,CAAC;IAAA,IAAI,KAAK,GAAC,CAAC,CAAC;IACtC,MAAM,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC,EAAC,GAAG,CAAC,CAAC,KAAK,EAAC,YAAY,EAAC,KAAK,IAAE,EAAE,CAAA,EAAE,KAAK,KAAG,CAAC,CAAA,CAAC,CAAA,SAAS,CAAA,CAAC,CAAA,SAAS,EAAC,CAAC,EAAC,iCAAiC,CAAC,CAAC;IACvJ,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,EAAC,CAAC,CAAC,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,+GAA+G,EAAE,KAAK,IAAI,EAAE;IAC/H,KAAI,MAAM,IAAI,IAAI,CAAC,OAAO,EAAC,SAAS,EAAC,MAAM,EAAC,SAAS,CAAU,EAAC,CAAC;QAAA,MAAM,CAAC,GAAC,eAAe,EAAE,CAAC;QACzF,MAAM,KAAK,GAAC,EAAC,GAAG,CAAC,CAAC,KAAK,EAAC,GAAG,CAAC,IAAI,KAAG,OAAO,CAAA,CAAC,CAAA,EAAC,OAAO,EAAC,UAAU,EAAE,EAAC,CAAA,CAAC,CAAA,EAAE,CAAC;YACnE,GAAG,CAAC,IAAI,KAAG,SAAS,CAAA,CAAC,CAAA,EAAC,WAAW,EAAC,KAAK,IAAE,EAAE,CAAA,CAAC,EAAC,GAAG,CAAC,CAAC,OAAO,EAAC,QAAQ,EAAC,UAAU,EAAE,EAAC,CAAC,EAAC,CAAA,CAAC,CAAA,EAAE,CAAC;YACtF,GAAG,CAAC,IAAI,KAAG,MAAM,CAAA,CAAC,CAAA,EAAC,gBAAgB,EAAC,KAAK,IAAE,EAAE,CAAA,CAAC,EAAC,GAAG,CAAC,CAAC,YAAY,EAAC,gBAAgB,EAAC,GAAG,EAAC,CAAC,EAAC,CAAA,CAAC,CAAA,EAAE,CAAC;YAC5F,GAAG,CAAC,IAAI,KAAG,SAAS,CAAA,CAAC,CAAA,EAAC,WAAW,EAAC,KAAK,IAAE,EAAE,CAAA,CAAC,EAAC,GAAG,CAAC,CAAC,OAAO,EAAC,SAAS,EAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAC,CAAC,EAAC,CAAA,CAAC,CAAA,EAAE,CAAC,EAAC,CAAC;QACxG,MAAM,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC,KAAK,CAAC,EAAC,4BAA4B,CAAC,CAAC;QAAA,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,EAAC,CAAC,CAAC,CAAC;IAClH,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,4FAA4F,EAAE,KAAK,IAAI,EAAE;IAC5G,MAAM,CAAC,GAAC,eAAe,EAAE,CAAC;IAAA,MAAM,0BAA0B,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACpE,MAAM,SAAS,GAAC,CAAC,CAAC,OAAO,EAAG,CAAC;IAAA,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAC,KAAK,CAAC,CAAC;IACnE,MAAM,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC,EAAC,GAAG,CAAC,CAAC,KAAK,EAAC,YAAY,EAAC,SAAS,EAAC,OAAO,EAAC,UAAU,EAAE,EAAC,CAAC,EAAC,6CAA6C,CAAC,CAAC;IACzJ,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,OAAO,EAAC,KAAK,CAAC,CAAC;IACzC,MAAM,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC,EAAC,GAAG,CAAC,CAAC,KAAK,EAAC,YAAY,EAAC,SAAS,EAAC,YAAY,EAAC,KAAK,IAAE,EAAE,CAAC,SAAS,EAAC,CAAC,EAAC,iCAAiC,CAAC,CAAC;IACzJ,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,OAAO,EAAC,KAAK,CAAC,CAAC;IACzC,MAAM,0BAA0B,CAAC,EAAC,GAAG,CAAC,CAAC,KAAK,EAAC,YAAY,EAAC,SAAS,EAAC,CAAC,CAAC;IACtE,MAAM,EAAC,gBAAgB,EAAC,MAAM,EAAC,GAAG,IAAI,EAAC,GAAC,CAAC,CAAC,YAAY,CAAC;IACvD,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,EAAC,EAAC,GAAG,IAAI,EAAC,OAAO,EAAC,IAAI,EAAC,CAAC,CAAC;IACrD,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,EAAC,CAAC,CAAC,CAAC;AAC7B,CAAC,CAAC,CAAC"}
|
|
@@ -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":"AAIA,OAAO,KAAK,EAAE,4BAA4B,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAC3H,OAAO,
|
|
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
|
|
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' :
|
|
133
|
-
|
|
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
|
|
156
|
+
if (closing)
|
|
147
157
|
return Promise.reject(new Error('named_session_busy'));
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
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 (
|
|
354
|
-
await
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
|
|
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
|
|
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":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAe,MAAM,UAAU,CAAC;AACvE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,gBAAgB,EAAsD,MAAM,wCAAwC,CAAC;AAC9H,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,2EAA2E,CAAC;AAE5I,OAAO,EAAC,2BAA2B,EAAC,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,mCAAmC,EAAE,MAAM,8BAA8B,CAAC;AACnF,OAAO,EAAC,+BAA+B,EAAkC,MAAM,+BAA+B,CAAC;AAY/G,SAAS,oBAAoB,CAAC,KAAc,EAAE,IAAY;IACxD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACvH,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,MAAM,IAAI,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,SAAS,CAAC,CAAC;IAChH,MAAM,GAAG,GAAG,CAAC,qBAAqB,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;IAC7F,MAAM,IAAI,GAAG,4EAA4E,CAAC;IAC1F,MAAM,QAAQ,GAAG,MAAM,CAAC,QAA+C,CAAC;IACxE,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,yBAAyB;WAClG,MAAM,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,SAAS;WAC3D,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,KAAK;WAChI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,oBAAoB,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC,GAAG,CAAC;WAC7F,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC;WACrE,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;WACpE,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;WACpE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;WACxF,QAAQ,CAAC,QAAQ,KAAK,OAAO,IAAI,OAAO,QAAQ,CAAC,cAAc,KAAK,QAAQ;WAC5E,CAAC,mCAAmC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;WAClE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,QAAQ,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAW,CAAC,CAAC,EAAE,CAAC;QAC/F,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,IAAY;IAC1D,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IACxF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC3C,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IAC3F,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,IAAI,EAAE,mBAAmB,CAAC;QACrE,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC;AACnF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAY,EAAE,IAAY;IAC/D,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,YAAY,CAAC;IACxD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACvH,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QAChE,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAClC,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAAC,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAAC,MAAM,KAAK,CAAC;IAAC,CAAC;AACvG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAY,EAAE,KAA+B;IAClF,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,GAAG,KAAK,CAAC,YAAY,IAAI,UAAU,EAAE,MAAM,CAAC;IAC9D,MAAM,SAAS,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACtF,MAAM,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAAY,EAAE,IAAY,EAAE,OAAgC;IACpG,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;IAClD,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IAC9F,OAAO,IAAI,OAAO,CAA0B,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE;QACnE,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC;QAC9C,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAChE,MAAM,IAAI,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAAC,QAAQ,GAAG,IAAI,CAAC;YAAC,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;QAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7H,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;QACrD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACrD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ;YAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE;YACxB,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;YACtC,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;gBAAC,IAAI,EAAE,CAAC;gBAAC,OAAO;YAAC,CAAC;YAC7C,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAAC,IAAI,GAAG,GAAG,CAAC;gBAAE,OAAO;YACnD,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;gBAClE,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;gBAC5F,QAAQ,GAAG,IAAI,CAAC;gBAAC,MAAM,CAAC,GAAG,EAAE,CAAC;gBAC9B,IAAI,KAAK,CAAC,EAAE,KAAK,IAAI;oBAAE,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,sBAAsB,CAAC,CAAC,CAAC,CAAC;;oBAClF,YAAY,CAAC,KAAK,CAAC,CAAC;YAC3B,CAAC;YAAC,MAAM,CAAC;gBAAC,IAAI,EAAE,CAAC;YAAC,CAAC;QACrB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,KAgB5C;IACC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvF,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;IACvE,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,EAAE,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;IAClG,IAAI,CAAC,YAAY,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACrE,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,yBAAyB,CAAC,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC3G,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,IAAI,kBAAkB,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAClI,YAAY,CAAC,gBAAgB,CAAC,CAAC;IACjC,MAAM,CAAC,sBAAsB,EAAE,CAAC;IAChC,IAAI,KAAoE,CAAC;IACzE,IAAI,MAAmD,CAAC;IACxD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAiB,CAAC;IAC3C,IAAI,OAAO,GAAG,KAAK,EAAE,OAAO,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7D,IAAI,eAAe,GAAY,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IACrD,IAAI,WAAmG,CAAC;IACxG,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,gCAAgC,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI;QACjG,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,GAAG,YAAY,CAAC,QAAQ;QACpF,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;QACxF,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC5G,IAAI,YAAY,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IACrC,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACzG,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YACzC,MAAM,SAAS,GAAG,GAAG,KAAK,CAAC,MAAM,IAAI,UAAU,EAAE,MAAM,CAAC;YACxD,MAAM,SAAS,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAClE,MAAM,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QACH,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACrC,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IACF,SAAS,OAAO,CAAI,SAA2B;QAC7C,IAAI,OAAO,IAAI,OAAO,IAAI,CAAC;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACpF,OAAO,EAAE,CAAC;QACV,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YACpC,IAAI,CAAC;gBACH,IAAI,OAAO;oBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;gBACtD,OAAO,MAAM,SAAS,EAAE,CAAC;YAC3B,CAAC;oBAAS,CAAC;gBACT,OAAO,EAAE,CAAC;gBACV,MAAM,MAAM,EAAE,CAAC;YACjB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACvD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,qBAAqB,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,YAAY;YAC7D,mBAAmB,EAAE,KAAK,CAAC,kBAAkB;YAC7C,cAAc,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,YAAY,CAAC,oBAAoB;uBACrF,MAAM,CAAC,yBAAyB,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE;YAClD,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,YAAY,CAAC,oBAAoB,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QACvH,0FAA0F;QAC1F,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YAClD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC;YAAC,MAAM,KAAK,CAAC;QACxD,CAAC,CAAC,CAAC;QACH,IAAI,GAAG,EAAE,CAAC;YAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;YAAC,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAAC,CAAC;QAC/G,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,EAAE;YAC7B,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YAChF,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;YAC7C,MAAM,OAAO,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,IAAI,OAAO,CAAO,YAAY,CAAC,EAAE;gBACnE,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;oBAAC,YAAY,EAAE,CAAC;oBAAC,OAAO;gBAAC,CAAC;gBACjD,MAAM,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC;gBAClE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBAC3B,IAAI,CAAC;oBACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;oBAClD,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC3C,CAAC;gBACD,MAAM,CAAC;oBAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBAAC,IAAI,EAAE,CAAC;gBAAC,CAAC;YACrC,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;YACnD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAC7B,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE;gBACxB,IAAI,OAAO;oBAAE,OAAO;gBACpB,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;gBACtC,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;oBAAC,OAAO,GAAG,IAAI,CAAC;oBAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBAAC,OAAO;gBAAC,CAAC;gBACvE,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAAC,IAAI,GAAG,GAAG,CAAC;oBAAE,OAAO;gBACnD,OAAO,GAAG,IAAI,CAAC;gBACf,MAAM,QAAQ,GAAG,CAAC,KAAK,IAAI,EAAE;oBAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAA4B,CAAC;oBAC/F,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ;wBAAE,OAAO,MAAM,EAAE,CAAC;oBACjD,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;wBAAC,OAAO,GAAG,IAAI,CAAC;wBAAC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;oBAAC,CAAC;oBAChG,OAAO,OAAO,CAAC,KAAK,IAAI,EAAE;wBACxB,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;4BAC/B,IAAI,CAAC;gCACH,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,eAAe,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ;uCAC9F,CAAC,MAAM,KAAM,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,KAAK,CAAC,kBAAkB,EAAE;oCAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;gCAC3H,MAAM,MAAM,GAAG,MAAM,2BAA2B,CAAC,EAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAC,CAAC,CAAC;gCACtH,IAAI,CAAC,MAAM,KAAM,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,KAAK,CAAC,kBAAkB,EAAE;oCAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;gCAC1H,OAAO,MAAM,CAAC;4BAChB,CAAC;4BAAC,MAAM,CAAC;gCAAA,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;4BAAA,CAAC;wBAC/D,CAAC;wBACD,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;4BACnC,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,IAAI,CAAC,MAAM,KAAM,CAAC,YAAY,EAAE,EAAE,CAAC;gCACnG,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;4BACzD,CAAC;4BACD,IAAI,WAAuC,CAAC;4BAC5C,IAAI,CAAC;gCACH,WAAW,GAAG,MAAM,KAAK,CAAC,sBAAsB,CAAC,KAAK,IAAI,EAAE,CAC1D,+BAA+B,CAAC,MAAM,KAAK,CAAC,kBAAmB,EAAE,CAAC,CAAC,CAAC;4BACxE,CAAC;4BAAC,MAAM,CAAC;gCAAA,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;4BAAA,CAAC;4BACjE,IAAI,CAAC,MAAM,KAAM,CAAC,YAAY,EAAE;gCAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;4BACzF,OAAO,EAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,mCAAmC,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI;gCACpF,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,GAAG,YAAY,CAAC,QAAQ,EAAE,WAAW,EAAC,CAAC;wBACvG,CAAC;wBACD,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;4BAC9B,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ;gCAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;4BAC5H,qBAAqB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;4BACtC,IAAI,CAAC,MAAM,KAAK,CAAC,kBAAkB,EAAE;gCAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;4BACvG,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM;gCAC1F,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,2BAA2B,CAAC,CAAC;4BACzF,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;4BACzC,IAAI,cAAc,GAAmC,IAAI,CAAC;4BAC1D,IAAI,CAAC;gCACH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,sBAAsB,CAAC,KAAK,EAAC,iBAAiB,EAAC,EAAE;oCAC1E,MAAM,MAAM,GAAG,mCAAmC,CAAC,OAAO,CAAC,MAAgB,EAAE,iBAAiB,CAAC,CAAC;oCAChG,IAAI,CAAC,MAAM,KAAK,CAAC,kBAAkB,EAAE;wCAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;oCACvG,OAAO,KAAM,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAgB;wCACxD,MAAM,EAAE,wBAAwB,EAAE,YAAY,CAAC,oBAAoB;wCACnE,cAAc,EAAE,KAAK,EAAC,OAAO,EAAC,EAAE;4CAC9B,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,EACvE,wBAAwB,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;4CAC9C,IAAI,CAAC,KAAK,CAAC,EAAE;gDAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;4CACjE,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC;4CACzG,cAAc,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,WAAW;gDAClF,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,oCAAoC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gDACxG,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;gDAC1G,2BAA2B,EAAE,KAAK,EAAE,CAAC;4CACvC,IAAI,KAAK,CAAC,qBAAqB,EAAE,CAAC;gDAChC,IAAI,CAAC;oDAAC,cAAc,CAAC,eAAe,GAAG,MAAM,KAAK,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;gDAAC,CAAC;gDACpF,MAAM,CAAC;oDAAC,cAAc,CAAC,eAAe,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,mCAAmC;wDACpG,2BAA2B,EAAE,KAAK,EAAE,CAAC;gDAAC,CAAC;4CAC3C,CAAC;4CACD,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;gDACxB,IAAI,eAA4C,CAAC;gDACjD,IAAI,CAAC;oDACH,eAAe,GAAG,MAAM,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;oDACrD,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,EACzE,wDAAwD,EAAE,eAAe,CAAC,CAAC;oDAC7E,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,eAAe,CAAC,WAAW,KAAK,WAAW,IAAI,eAAe,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS;2DAC5G,eAAe,CAAC,cAAc,KAAK,OAAO,CAAC,cAAc,IAAI,eAAe,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ;2DAC1G,eAAe,CAAC,WAAW,KAAK,OAAO,CAAC,WAAW,IAAI,eAAe,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS;2DACtG,eAAe,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM;wDAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;gDAC5G,CAAC;gDAAC,MAAM,CAAC;oDACP,+FAA+F;oDAC/F,eAAe,GAAG,EAAE,MAAM,EAAE,kCAAkC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc;wDACpG,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS;wDAC1F,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC,QAAQ;wDAC3G,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,uBAAuB;wDACtF,2BAA2B,EAAE,KAAK,EAAE,CAAC;gDACzC,CAAC;gDACD,cAAc,CAAC,eAAe,GAAG,eAAe,CAAC;4CACnD,CAAC;wCACH,CAAC,EAAE,CAAC,CAAC;gCAAC,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;gCACvC,MAAM,OAAO,GAAG,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;gCAClE,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC;gCACnG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;gCACrD,MAAM,MAAM,EAAE,CAAC;gCAAC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;4BACxE,CAAC;4BAAC,OAAO,KAAK,EAAE,CAAC;gCACf,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM;oCAC5G,IAAI,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B,EAAE,cAAc,EAAE,CAAC,CAAC,EAAE,4BAA4B,CAAC,CAAC;gCAChI,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;gCAClD,IAAI,CAAC,MAAM,KAAM,CAAC,YAAY,EAAE;oCAAE,OAAO,GAAG,IAAI,CAAC;gCACjD,MAAM,MAAM,EAAE,CAAC;gCAAC,MAAM,KAAK,CAAC;4BAC9B,CAAC;wBACH,CAAC;wBACD,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK;4BAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,MAAM,KAAM,CAAC,GAAG,CAAC;oCACnE,eAAe,EAAE,MAAM,CAAC,OAAO,CAAC,eAAe,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;oCAC5F,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;oCAClF,wBAAwB,EAAE,YAAY,CAAC,oBAAoB;iCAAE,CAAC,EAAE,CAAC;wBACnE,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM;4BAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,MAAM,KAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,EACrG,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;wBACzE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;oBAClD,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK;oBAC/D,IAAI,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB,EAAE,CAAC,CAAC;qBACxE,KAAK,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACxB,KAAK,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YACvD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,MAAM,IAAI,OAAO,CAAO,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE;YAChD,MAAO,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAAC,MAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAC7E,CAAC,CAAC,CAAC;QACH,MAAM,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAAC,MAAM,MAAM,EAAE,CAAC;QACjD,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,OAAO,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACzC,IAAI,KAAK,CAAC,eAAe,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,gBAAgB,EAAE,CAAC;gBAC5D,MAAM,OAAO,CAAC,KAAK,IAAI,EAAE;oBACvB,IAAI,CAAC;wBAAC,WAAW,GAAG,MAAM,KAAK,CAAC,eAAgB,EAAE,CAAC;oBAAC,CAAC;oBACrD,MAAM,CAAC;wBAAC,WAAW,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;4BACnE,IAAI,EAAE,8BAA8B,EAAE,2BAA2B,EAAE,KAAK,EAAE,CAAC;oBAAC,CAAC;gBACjF,CAAC,CAAC,CAAC;gBACH,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;gBACtC,MAAM,MAAM,EAAE,CAAC;YACjB,CAAC;YACD,IAAI,MAAiE,CAAC;YACtE,IAAI,CAAC;gBAAC,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,sBAAsB,CAAC,GAAG,EAAE,CACnE,KAAM,CAAC,OAAO,CAAC,EAAC,qBAAqB,EAAE,KAAK,CAAC,yBAAyB,EAAC,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC;YAC/E,OAAO,KAAK,EAAE,CAAC;gBAAC,IAAI,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO;oBAAE,MAAM;gBAAC,MAAM,KAAK,CAAC;YAAC,CAAC;YAC1E,eAAe,GAAG,MAAM,CAAC;YAAC,MAAM,MAAM,EAAE,CAAC;YACzC,IAAI,MAAM,CAAC,KAAK,KAAK,eAAe;gBAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;YACrF,MAAM,IAAI,OAAO,CAAO,WAAW,CAAC,EAAE;gBACpC,MAAM,IAAI,GAAG,GAAG,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC5G,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;gBACnG,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO;oBAAE,IAAI,EAAE,CAAC;YACnC,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IACxC,CAAC;YAAS,CAAC;QACT,OAAO,GAAG,IAAI,CAAC;QACf,yFAAyF;QACzF,IAAI,CAAC;YAAC,IAAI,KAAK;gBAAE,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;QAAC,CAAC;gBAC/B,CAAC;YACP,IAAI,CAAC;gBACH,MAAM,YAAY,GAAG,MAAM,EAAE,SAAS;oBACpC,CAAC,CAAC,IAAI,OAAO,CAAO,YAAY,CAAC,EAAE,CAAC,MAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAClF,MAAM,MAAM,CAAC;gBACb,wFAAwF;gBACxF,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;gBACzC,IAAI,MAAM,EAAE,CAAC;oBACX,KAAK,MAAM,UAAU,IAAI,WAAW;wBAAE,UAAU,CAAC,OAAO,EAAE,CAAC;oBAC3D,IAAI,YAAY;wBAAE,MAAM,YAAY,CAAC;oBACrC,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;wBAAE,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3F,CAAC;gBACD,MAAM,MAAM,EAAE,CAAC;YACjB,CAAC;oBAAS,CAAC;gBAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAAC,CAAC;QAC/B,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
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();
|