@dsh-enhanced/assistant-delivery 0.1.62 → 0.1.63

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 (46) hide show
  1. package/README.md +27 -10
  2. package/bin/dsh-restart-supervisor.js +76 -0
  3. package/lib/agent-runtime.d.ts +19 -1
  4. package/lib/agent-runtime.d.ts.map +1 -1
  5. package/lib/agent-runtime.js +122 -15
  6. package/lib/agent-runtime.js.map +1 -1
  7. package/lib/operator-snapshot.d.ts +1 -1
  8. package/lib/operator-snapshot.d.ts.map +1 -1
  9. package/lib/operator-snapshot.js +4 -4
  10. package/lib/operator-snapshot.js.map +1 -1
  11. package/lib/restart-native.d.ts +47 -0
  12. package/lib/restart-native.d.ts.map +1 -0
  13. package/lib/restart-native.js +170 -0
  14. package/lib/restart-native.js.map +1 -0
  15. package/lib/restart-runtime.d.ts +38 -0
  16. package/lib/restart-runtime.d.ts.map +1 -0
  17. package/lib/restart-runtime.js +335 -0
  18. package/lib/restart-runtime.js.map +1 -0
  19. package/lib/restart-store.d.ts +132 -0
  20. package/lib/restart-store.d.ts.map +1 -0
  21. package/lib/restart-store.js +757 -0
  22. package/lib/restart-store.js.map +1 -0
  23. package/lib/restart-supervisor.d.ts +129 -0
  24. package/lib/restart-supervisor.d.ts.map +1 -0
  25. package/lib/restart-supervisor.js +615 -0
  26. package/lib/restart-supervisor.js.map +1 -0
  27. package/lib/service.d.ts +42 -1
  28. package/lib/service.d.ts.map +1 -1
  29. package/lib/service.js +455 -6
  30. package/lib/service.js.map +1 -1
  31. package/lib/sqlite.d.ts +1 -1
  32. package/lib/sqlite.d.ts.map +1 -1
  33. package/lib/sqlite.js +44 -2
  34. package/lib/sqlite.js.map +1 -1
  35. package/lib/store.d.ts +23 -0
  36. package/lib/store.d.ts.map +1 -1
  37. package/lib/store.js +222 -85
  38. package/lib/store.js.map +1 -1
  39. package/lib/tools.d.ts.map +1 -1
  40. package/lib/tools.js +21 -2
  41. package/lib/tools.js.map +1 -1
  42. package/lib/types.d.ts +2 -0
  43. package/lib/types.d.ts.map +1 -1
  44. package/lib/version.d.ts +1 -1
  45. package/lib/version.js +1 -1
  46. package/package.json +11 -10
@@ -0,0 +1,335 @@
1
+ import { createHash, randomUUID } from 'node:crypto';
2
+ import { createRestartContinuation } from './restart-native.js';
3
+ export const restartContinuationText = 'The serving process completed a planned maintenance restart. Continue the same owner task from the persisted conversation. The restart tool already succeeded; do not restart again or repeat completed operations. Inspect any uncertain external result before further writes. This is a Host continuation, not a new human request.';
4
+ export const restartDigest = (value) => createHash('sha256').update(JSON.stringify(value)).digest('hex');
5
+ /** Host-owned barriers around the existing native loop; this class never schedules work. */
6
+ export function attachRestartRun(input) {
7
+ const { agent, store, inboxId } = input;
8
+ const task = store.getTask(inboxId);
9
+ if (task === undefined)
10
+ throw new Error('assistant-delivery: restart task budget is missing');
11
+ const original = input.continuation === undefined;
12
+ const taskEventOffset = agent.session.snapshotEvents().length;
13
+ let live = true;
14
+ let eligible = true;
15
+ let open = 0;
16
+ let ownRequestId = input.continuation?.id;
17
+ let timer;
18
+ let observationWarned = false;
19
+ const safeTool = (name) => {
20
+ if (!input.config.allowedTools.includes(name))
21
+ return false;
22
+ try {
23
+ return input.isRestartSafeTool(agent, name);
24
+ }
25
+ catch {
26
+ return false;
27
+ }
28
+ };
29
+ const markIneligible = (reason) => {
30
+ eligible = false;
31
+ if (!original || ownRequestId !== undefined)
32
+ return;
33
+ // An unavailable journal removes restart eligibility, but never denies
34
+ // the owner's unrelated model or tool operation.
35
+ try {
36
+ store.markIneligible(inboxId, reason);
37
+ }
38
+ catch { /* fail closed for restart only */ }
39
+ };
40
+ const observationFailed = () => {
41
+ markIneligible('observation-unavailable');
42
+ if (observationWarned)
43
+ return;
44
+ observationWarned = true;
45
+ try {
46
+ agent.ctx.logger.warn('assistant-delivery: restart observation unavailable; ordinary task continues');
47
+ }
48
+ catch { /* logging cannot change the ordinary task outcome */ }
49
+ };
50
+ const observedTask = () => {
51
+ try {
52
+ return store.getTask(inboxId);
53
+ }
54
+ catch {
55
+ observationFailed();
56
+ return undefined;
57
+ }
58
+ };
59
+ const observe = (kind) => {
60
+ try {
61
+ store.observe(inboxId, kind, randomUUID());
62
+ }
63
+ catch {
64
+ observationFailed();
65
+ }
66
+ };
67
+ const startTimer = () => {
68
+ if (timer !== undefined)
69
+ return;
70
+ timer = setTimeout(() => agent.cancel({ kind: 'hook', reason: 'assistant-delivery-restart-budget-expired' }), Math.max(1, task.deadline - Date.now()));
71
+ timer.unref?.();
72
+ };
73
+ const assertRecovery = () => {
74
+ if (!live || Date.now() >= task.deadline || !input.authorize()) {
75
+ throw new Error('assistant-delivery: restart task authority or deadline changed');
76
+ }
77
+ const current = store.activeRequestForBinding(input.binding.id);
78
+ if (ownRequestId !== undefined && (current?.id !== ownRequestId
79
+ || (input.continuation !== undefined && current.status !== 'resuming'))) {
80
+ throw new Error('assistant-delivery: restart operation was cancelled or replaced');
81
+ }
82
+ if (current !== undefined && (current.inboxId !== inboxId
83
+ || (input.continuation !== undefined && current.status !== 'resuming'))) {
84
+ throw new Error('assistant-delivery: restart continuation no longer owns this task');
85
+ }
86
+ };
87
+ const requested = () => {
88
+ if (original && ownRequestId === undefined)
89
+ return undefined;
90
+ const record = store.activeRequestForBinding(input.binding.id);
91
+ return record?.inboxId === inboxId && record.status === 'requested' ? record : undefined;
92
+ };
93
+ const noNewWork = () => {
94
+ assertRecovery();
95
+ if (original && store.activeRequestForBinding(input.binding.id) !== undefined) {
96
+ throw new Error('assistant-delivery: restart checkpoint is pending');
97
+ }
98
+ };
99
+ const flush = async () => {
100
+ if (!await agent.ctx.sessions.flush(agent.session))
101
+ throw new Error('assistant-delivery: restart session flush failed');
102
+ assertRecovery();
103
+ };
104
+ const taskEvents = () => agent.session.snapshotEvents().slice(taskEventOffset);
105
+ const toolEvidence = (pendingRestartCallId) => {
106
+ const calls = new Map();
107
+ const results = new Set();
108
+ for (const event of taskEvents()) {
109
+ if (event.type === 'tool/call') {
110
+ const id = String(event.data.callId);
111
+ if (calls.has(id))
112
+ return false;
113
+ calls.set(id, event.data.name);
114
+ if (id !== pendingRestartCallId && !safeTool(event.data.name)
115
+ && !(event.data.name === 'delivery_request_restart' && ownRequestId !== undefined))
116
+ return false;
117
+ }
118
+ else if (event.type === 'tool/result') {
119
+ const id = String(event.data.message.toolCallId);
120
+ if (!calls.has(id) || results.has(id) || event.data.message.isError === true)
121
+ return false;
122
+ results.add(id);
123
+ }
124
+ }
125
+ return [...calls].every(([id, name]) => (id === pendingRestartCallId && name === 'delivery_request_restart') || results.has(id));
126
+ };
127
+ const removers = [];
128
+ removers.push(agent.ctx.on('session/event', (session, event) => {
129
+ if (session !== agent.session || !original)
130
+ return;
131
+ if (event.type === 'tool/call' && event.data.name !== 'delivery_request_restart' && !safeTool(event.data.name)) {
132
+ markIneligible('unsafe-tool-call');
133
+ }
134
+ else if (event.type === 'tool/result' && event.data.message.isError === true) {
135
+ markIneligible('tool-result-error');
136
+ }
137
+ else if (event.type === 'turn/end' && event.data.reason.kind !== 'completed') {
138
+ markIneligible('turn-incomplete');
139
+ }
140
+ }));
141
+ removers.push(agent.ctx.on('llm/stream', async function* (options, next) {
142
+ const initiator = agent.ctx.agents.currentInitiator();
143
+ const ownSession = options.sessionId === agent.session.id;
144
+ // llm/stream is a process-wide hook. A different initiating Agent with a
145
+ // different Session is unrelated work; a call causally owned by this Agent
146
+ // but routed to another Session is delegation and remains in this budget.
147
+ if (!ownSession && initiator !== agent) {
148
+ yield* next();
149
+ return;
150
+ }
151
+ if (original && ownRequestId === undefined) {
152
+ try {
153
+ store.observeModel(inboxId, { provider: options.provider, model: options.model,
154
+ ...(options.reasoningEffort === undefined ? {} : { reasoningEffort: options.reasoningEffort }) });
155
+ }
156
+ catch {
157
+ observationFailed();
158
+ }
159
+ observe('model');
160
+ if (initiator !== agent || !ownSession)
161
+ markIneligible('delegated-model');
162
+ if (options.maxTokens === undefined || options.maxTokens > task.maxOutputTokens)
163
+ markIneligible('model-output-budget');
164
+ const current = observedTask();
165
+ const frozen = current?.model;
166
+ if (frozen?.provider !== options.provider || frozen.model !== options.model
167
+ || frozen.reasoningEffort !== options.reasoningEffort)
168
+ markIneligible('model-drift');
169
+ if (current !== undefined && current.modelRequests > task.maxModelRequests)
170
+ markIneligible('model-count-budget');
171
+ try {
172
+ yield* next();
173
+ }
174
+ catch (error) {
175
+ markIneligible('model-result-unknown');
176
+ throw error;
177
+ }
178
+ return;
179
+ }
180
+ if (initiator !== agent || !ownSession)
181
+ throw new Error('assistant-delivery: restart task cannot delegate a model call');
182
+ noNewWork();
183
+ const model = store.getTask(inboxId)?.model;
184
+ if (model === undefined || options.provider !== model.provider || options.model !== model.model
185
+ || options.reasoningEffort !== model.reasoningEffort
186
+ || options.maxTokens === undefined || options.maxTokens > task.maxOutputTokens) {
187
+ throw new Error('assistant-delivery: restart frozen model or output budget changed');
188
+ }
189
+ store.reserve(inboxId, 'model', randomUUID());
190
+ await flush();
191
+ noNewWork();
192
+ open += 1;
193
+ try {
194
+ for await (const chunk of next()) {
195
+ assertRecovery();
196
+ yield chunk;
197
+ }
198
+ }
199
+ finally {
200
+ open -= 1;
201
+ }
202
+ }, { prepend: true }));
203
+ removers.push(agent.ctx.on('tools/execute', async (execution, next) => {
204
+ // Tool dispatches carry the exact target Agent. Preserve unrelated peers;
205
+ // a different target still belongs here when this Agent initiated it.
206
+ const initiator = agent.ctx.agents.currentInitiator();
207
+ if (execution.agent !== agent && initiator !== agent)
208
+ return await next();
209
+ if (original && ownRequestId === undefined) {
210
+ observe('tool');
211
+ if (execution.agent !== agent || initiator !== agent)
212
+ markIneligible('delegated-tool');
213
+ if (execution.name !== 'delivery_request_restart' && !safeTool(execution.name))
214
+ markIneligible('unsafe-tool');
215
+ const current = observedTask();
216
+ if (current !== undefined && current.toolCalls > task.maxToolCalls)
217
+ markIneligible('tool-count-budget');
218
+ open += 1;
219
+ try {
220
+ const result = await next();
221
+ if (result.isError)
222
+ markIneligible('tool-result-error');
223
+ return result;
224
+ }
225
+ catch (error) {
226
+ markIneligible('tool-result-unknown');
227
+ throw error;
228
+ }
229
+ finally {
230
+ open -= 1;
231
+ }
232
+ }
233
+ if (execution.agent !== agent || initiator !== agent)
234
+ throw new Error('assistant-delivery: restart task cannot delegate tools');
235
+ noNewWork();
236
+ if (execution.name === 'delivery_request_restart' || !safeTool(execution.name)) {
237
+ throw new Error('assistant-delivery: tool is outside the restart-safe capability contract');
238
+ }
239
+ store.reserve(inboxId, 'tool', randomUUID());
240
+ await flush();
241
+ noNewWork();
242
+ open += 1;
243
+ try {
244
+ return await next();
245
+ }
246
+ finally {
247
+ open -= 1;
248
+ }
249
+ }, { prepend: true }));
250
+ removers.push(agent.ctx.on('agent/pre-step', async (payload, next) => {
251
+ if (payload.agent !== agent)
252
+ return await next();
253
+ if (original && ownRequestId === undefined)
254
+ return await next();
255
+ if (original && store.activeRequestForBinding(input.binding.id) !== undefined)
256
+ return { kind: 'reject' };
257
+ assertRecovery();
258
+ return await next();
259
+ }, { prepend: true }));
260
+ if (!original)
261
+ startTimer();
262
+ const dispose = () => {
263
+ if (!live)
264
+ return;
265
+ live = false;
266
+ if (timer !== undefined)
267
+ clearTimeout(timer);
268
+ for (const remove of removers)
269
+ remove();
270
+ };
271
+ agent.ctx.effect(() => dispose, 'assistant-delivery.restart-task');
272
+ return {
273
+ agent, inboxId, ...(input.continuation === undefined ? {} : { continuation: input.continuation }), requested, dispose,
274
+ canRequest() {
275
+ try {
276
+ const current = store.getTask(inboxId);
277
+ return live && original && ownRequestId === undefined && eligible && current !== undefined
278
+ && current.toolCalls < task.maxToolCalls && store.isEligible(inboxId)
279
+ && store.activeRequestForBinding(input.binding.id) === undefined
280
+ && input.authorizeRestart();
281
+ }
282
+ catch {
283
+ return false;
284
+ }
285
+ },
286
+ request(reason) {
287
+ assertRecovery();
288
+ if (!original || !eligible || !store.isEligible(inboxId) || !input.authorizeRestart()) {
289
+ throw new Error('assistant-delivery: restart is not authorized for this task');
290
+ }
291
+ const response = agent.session.snapshotEvents().findLast(event => event.type === 'assistant/message');
292
+ const calls = response?.type === 'assistant/message'
293
+ ? response.data.message.content.filter(block => block.type === 'tool-call') : [];
294
+ if (calls.length !== 1 || calls[0]?.type !== 'tool-call' || calls[0].name !== 'delivery_request_restart') {
295
+ markIneligible('restart-not-exclusive');
296
+ throw new Error('assistant-delivery: restart must be the only tool in its model response');
297
+ }
298
+ if (open !== 1 || !toolEvidence(String(calls[0].id))) {
299
+ markIneligible('tool-evidence-unknown');
300
+ throw new Error('assistant-delivery: prior effects are not proven restart-safe');
301
+ }
302
+ const current = store.getTask(inboxId);
303
+ if (current === undefined || current.modelRequests >= task.maxModelRequests
304
+ || current.toolCalls > task.maxToolCalls || Date.now() >= task.deadline) {
305
+ markIneligible('restart-budget-exhausted');
306
+ throw new Error('assistant-delivery: restart has no remaining budget or deadline');
307
+ }
308
+ const result = store.request(inboxId, { reason, requestKey: `restart:${inboxId}` });
309
+ ownRequestId = result.id;
310
+ startTimer();
311
+ return result;
312
+ },
313
+ async checkpoint() {
314
+ const record = requested();
315
+ if (record === undefined)
316
+ return undefined;
317
+ assertRecovery();
318
+ if (!eligible || open !== 0 || agent.status !== 'idle'
319
+ || agent.inbox.nextTurn.length !== 0 || agent.inbox.nextStep.length !== 0) {
320
+ throw new Error('assistant-delivery: restart checkpoint is not quiescent');
321
+ }
322
+ await flush();
323
+ if (!toolEvidence())
324
+ throw new Error('assistant-delivery: restart tool effects are not all settled');
325
+ const events = agent.session.snapshotEvents();
326
+ return store.checkpoint(record.id, {
327
+ sessionEventCount: events.length,
328
+ sessionDigest: restartDigest(events),
329
+ continuationMessageId: createRestartContinuation({ continuationId: record.id, text: restartContinuationText }).id,
330
+ continuationTextDigest: restartDigest(restartContinuationText),
331
+ });
332
+ },
333
+ };
334
+ }
335
+ //# sourceMappingURL=restart-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restart-runtime.js","sourceRoot":"","sources":["../src/restart-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,132 @@
1
+ import type { ConversationRef, ExternalPrincipalKey, ModelRouteRef } from './types.js';
2
+ /** This is an operation journal, not another Agent or task scheduler. */
3
+ export type RestartStatus = 'requested' | 'checkpoint' | 'ready' | 'restarting' | 'restarted' | 'resuming' | 'completed' | 'failed' | 'cancelled';
4
+ export interface RestartBindingSnapshot {
5
+ id: string;
6
+ version: number;
7
+ generation: number;
8
+ sessionId: string;
9
+ workspace: string;
10
+ preset: string;
11
+ policyRef: string;
12
+ authorityHash: string;
13
+ conversation: ConversationRef;
14
+ principal: ExternalPrincipalKey;
15
+ }
16
+ export interface RestartTaskInput {
17
+ inboxId: string;
18
+ eventId: string;
19
+ binding: RestartBindingSnapshot;
20
+ owner: {
21
+ principalRecordId: string;
22
+ principalVersion: number;
23
+ };
24
+ /** The exact invocation that admitted the original foreground task. */
25
+ sourceInvocationId: string;
26
+ maxModelRequests: number;
27
+ maxToolCalls: number;
28
+ maxOutputTokens: number;
29
+ capabilityDigest: string;
30
+ deadline: number;
31
+ }
32
+ export interface RestartTask extends RestartTaskInput {
33
+ createdAt: number;
34
+ model?: ModelRouteRef;
35
+ modelRequests: number;
36
+ toolCalls: number;
37
+ }
38
+ export interface RestartCheckpoint {
39
+ sessionEventCount: number;
40
+ sessionDigest: string;
41
+ continuationMessageId: string;
42
+ continuationTextDigest: string;
43
+ }
44
+ export interface RestartRecord {
45
+ id: string;
46
+ inboxId: string;
47
+ requestKey: string;
48
+ reason: string;
49
+ status: RestartStatus;
50
+ sourceInvocationId: string;
51
+ restartInvocationId?: string;
52
+ restartHolderId?: string;
53
+ continuationHolderId?: string;
54
+ checkpoint?: RestartCheckpoint;
55
+ failureCode?: string;
56
+ createdAt: number;
57
+ updatedAt: number;
58
+ }
59
+ export type RestartStoreErrorCode = 'invalid' | 'conflict' | 'not-found' | 'deadline' | 'budget' | 'corrupt' | 'closed';
60
+ export declare class RestartStoreError extends Error {
61
+ readonly code: RestartStoreErrorCode;
62
+ constructor(code: RestartStoreErrorCode, message: string);
63
+ }
64
+ interface RestartStoreOptions {
65
+ path: string;
66
+ now?: () => number;
67
+ readOnly?: boolean;
68
+ }
69
+ export declare class RestartStore {
70
+ private readonly database;
71
+ private readonly now;
72
+ private readonly readOnly;
73
+ private closed;
74
+ constructor(options: RestartStoreOptions);
75
+ private assertOpen;
76
+ private write;
77
+ private task;
78
+ getTask(inboxId: string): RestartTask | undefined;
79
+ private ineligibility;
80
+ private markIneligibleWithinWrite;
81
+ markIneligible(inboxId: string, reason: string): void;
82
+ isEligible(inboxId: string): boolean;
83
+ beginTask(input: RestartTaskInput): RestartTask;
84
+ captureModel(inboxId: string, input: ModelRouteRef): RestartTask;
85
+ /** A supplier change ends recovery eligibility without interrupting normal work. */
86
+ observeModel(inboxId: string, input: ModelRouteRef): RestartTask;
87
+ /** Normal foreground calls are observed durably, even after recovery becomes impossible. */
88
+ observe(inboxId: string, kind: 'model' | 'tool', operationId: string): RestartTask;
89
+ /** A held request/tool reservation is never refunded after an unknown result. */
90
+ reserve(inboxId: string, kind: 'model' | 'tool', operationId: string): RestartTask;
91
+ private requestById;
92
+ getRequest(id: string): RestartRecord | undefined;
93
+ getRequestForTask(inboxId: string): RestartRecord | undefined;
94
+ request(inboxId: string, input: {
95
+ reason: string;
96
+ requestKey: string;
97
+ }): RestartRecord;
98
+ private event;
99
+ private transition;
100
+ checkpoint(id: string, input: RestartCheckpoint): RestartRecord;
101
+ ready(id: string): RestartRecord;
102
+ claimRestart(id: string, input: {
103
+ holderId: string;
104
+ invocationId: string;
105
+ }): RestartRecord;
106
+ /** Observation only: this never grants another restart dispatch. */
107
+ markRestarted(id: string, input: {
108
+ invocationId: string;
109
+ }): RestartRecord;
110
+ claimContinuation(id: string, input: {
111
+ holderId: string;
112
+ invocationId: string;
113
+ }): RestartRecord;
114
+ complete(id: string): RestartRecord;
115
+ fail(id: string, code: string): RestartRecord;
116
+ cancelForBinding(bindingId: string): RestartRecord[];
117
+ listRequests(input?: {
118
+ statuses?: readonly RestartStatus[];
119
+ limit?: number;
120
+ after?: {
121
+ createdAt: number;
122
+ id: string;
123
+ };
124
+ }): RestartRecord[];
125
+ /** Count durable restart dispatch claims for an external global circuit breaker. */
126
+ countDispatchedSince(sinceMs: number): number;
127
+ hasReservation(inboxId: string, kind: 'model' | 'tool', operationId: string): boolean;
128
+ activeRequestForBinding(bindingId: string): RestartRecord | undefined;
129
+ close(): void;
130
+ }
131
+ export {};
132
+ //# sourceMappingURL=restart-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restart-store.d.ts","sourceRoot":"","sources":["../src/restart-store.ts"],"names":[],"mappings":"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"}