@dsh-enhanced/assistant-delivery 0.1.62 → 0.1.64

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 (49) hide show
  1. package/README.md +32 -10
  2. package/bin/dsh-restart-supervisor.js +76 -0
  3. package/lib/agent-runtime.d.ts +21 -1
  4. package/lib/agent-runtime.d.ts.map +1 -1
  5. package/lib/agent-runtime.js +192 -23
  6. package/lib/agent-runtime.js.map +1 -1
  7. package/lib/coordinator.d.ts.map +1 -1
  8. package/lib/coordinator.js +10 -0
  9. package/lib/coordinator.js.map +1 -1
  10. package/lib/operator-snapshot.d.ts +1 -1
  11. package/lib/operator-snapshot.d.ts.map +1 -1
  12. package/lib/operator-snapshot.js +5 -5
  13. package/lib/operator-snapshot.js.map +1 -1
  14. package/lib/restart-native.d.ts +47 -0
  15. package/lib/restart-native.d.ts.map +1 -0
  16. package/lib/restart-native.js +170 -0
  17. package/lib/restart-native.js.map +1 -0
  18. package/lib/restart-runtime.d.ts +38 -0
  19. package/lib/restart-runtime.d.ts.map +1 -0
  20. package/lib/restart-runtime.js +335 -0
  21. package/lib/restart-runtime.js.map +1 -0
  22. package/lib/restart-store.d.ts +132 -0
  23. package/lib/restart-store.d.ts.map +1 -0
  24. package/lib/restart-store.js +757 -0
  25. package/lib/restart-store.js.map +1 -0
  26. package/lib/restart-supervisor.d.ts +129 -0
  27. package/lib/restart-supervisor.d.ts.map +1 -0
  28. package/lib/restart-supervisor.js +615 -0
  29. package/lib/restart-supervisor.js.map +1 -0
  30. package/lib/service.d.ts +45 -1
  31. package/lib/service.d.ts.map +1 -1
  32. package/lib/service.js +488 -6
  33. package/lib/service.js.map +1 -1
  34. package/lib/sqlite.d.ts +1 -1
  35. package/lib/sqlite.d.ts.map +1 -1
  36. package/lib/sqlite.js +76 -2
  37. package/lib/sqlite.js.map +1 -1
  38. package/lib/store.d.ts +41 -1
  39. package/lib/store.d.ts.map +1 -1
  40. package/lib/store.js +433 -85
  41. package/lib/store.js.map +1 -1
  42. package/lib/tools.d.ts.map +1 -1
  43. package/lib/tools.js +21 -2
  44. package/lib/tools.js.map +1 -1
  45. package/lib/types.d.ts +33 -0
  46. package/lib/types.d.ts.map +1 -1
  47. package/lib/version.d.ts +1 -1
  48. package/lib/version.js +1 -1
  49. package/package.json +11 -10
@@ -0,0 +1,170 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { freezeMessage, MessageId } from '@deepseek-ai/dsh-llm';
3
+ const continuationSource = {
4
+ kind: 'assistant-delivery',
5
+ form: 'notice',
6
+ summary: 'Resume the interrupted owner task',
7
+ };
8
+ export class RestartContinuationError extends Error {
9
+ code;
10
+ constructor(code, message) {
11
+ super(message);
12
+ this.code = code;
13
+ this.name = 'RestartContinuationError';
14
+ }
15
+ }
16
+ /** The stable identity is stored by Delivery before any native admission. */
17
+ export function createRestartContinuation(input) {
18
+ if (!/^[A-Za-z0-9][A-Za-z0-9._:-]{0,199}$/u.test(input.continuationId)
19
+ || input.text.trim() === '' || Buffer.byteLength(input.text, 'utf8') > 4_096) {
20
+ throw new RestartContinuationError('invalid', 'invalid restart continuation identity or text');
21
+ }
22
+ const id = MessageId(`dsh-restart-${createHash('sha256').update(input.continuationId).digest('hex')}`);
23
+ return freezeMessage({
24
+ id, role: 'user', content: [{ type: 'text', text: input.text }],
25
+ source: continuationSource,
26
+ });
27
+ }
28
+ function sameMessage(candidate, expected) {
29
+ return JSON.stringify(candidate) === JSON.stringify(expected);
30
+ }
31
+ /**
32
+ * Inspect the complete native log, not just today's pending projection. A
33
+ * previously claimed message must never be made pending again after restart.
34
+ */
35
+ export function inspectRestartContinuation(agent, message) {
36
+ if (message.source.kind !== continuationSource.kind
37
+ || message.source.form !== continuationSource.form
38
+ || message.source.summary !== continuationSource.summary) {
39
+ throw new RestartContinuationError('invalid', 'restart continuation source is not Host-owned');
40
+ }
41
+ const pending = { 'next-turn': [], 'next-step': [] };
42
+ let seen = false;
43
+ let removedWithoutCancellation = false;
44
+ let claimedTurn;
45
+ let settledReason;
46
+ let openTurn;
47
+ for (const event of agent.session.snapshotEvents()) {
48
+ if (event.type === 'turn/start')
49
+ openTurn = event.data.turn;
50
+ if (event.type === 'agent/inbox/spliced') {
51
+ const target = event.data.target;
52
+ const entries = pending[target];
53
+ const start = event.data.start;
54
+ const removed = entries.slice(start, start + (event.data.removedCount ?? 0));
55
+ if (removed.some(item => item.id === message.id) && event.data.outcome !== 'canceled') {
56
+ removedWithoutCancellation = true;
57
+ }
58
+ for (const inserted of event.data.inserted) {
59
+ if (inserted.id !== message.id)
60
+ continue;
61
+ seen = true;
62
+ if (!sameMessage(inserted, message)) {
63
+ throw new RestartContinuationError('conflict', 'restart continuation identity has different native content');
64
+ }
65
+ }
66
+ entries.splice(start, event.data.removedCount ?? 0, ...event.data.inserted);
67
+ }
68
+ if (event.type === 'user/message' && event.data.id === message.id) {
69
+ seen = true;
70
+ if (!sameMessage(event.data, message)) {
71
+ throw new RestartContinuationError('conflict', 'restart continuation identity has different entered content');
72
+ }
73
+ if (openTurn === undefined || claimedTurn !== undefined) {
74
+ throw new RestartContinuationError('ambiguous', 'restart continuation has no unique native turn');
75
+ }
76
+ claimedTurn = openTurn;
77
+ }
78
+ if (event.type === 'turn/end' && event.data.turn === claimedTurn) {
79
+ settledReason = event.data.reason.kind;
80
+ }
81
+ }
82
+ const liveTurn = agent.inbox.nextTurn.filter(item => item.id === message.id);
83
+ const liveStep = agent.inbox.nextStep.filter(item => item.id === message.id);
84
+ if (JSON.stringify(pending['next-turn']) !== JSON.stringify(agent.inbox.nextTurn)
85
+ || JSON.stringify(pending['next-step']) !== JSON.stringify(agent.inbox.nextStep)) {
86
+ throw new RestartContinuationError('ambiguous', 'native Inbox projection differs from its event log');
87
+ }
88
+ if (claimedTurn !== undefined) {
89
+ if (liveTurn.length > 0 || liveStep.length > 0) {
90
+ throw new RestartContinuationError('ambiguous', 'a claimed restart continuation is pending again');
91
+ }
92
+ return settledReason === undefined
93
+ ? { kind: 'claimed', turn: claimedTurn }
94
+ : { kind: 'settled', turn: claimedTurn, reason: settledReason };
95
+ }
96
+ if (removedWithoutCancellation || liveStep.length > 0 || liveTurn.length > 1)
97
+ return { kind: 'ambiguous' };
98
+ if (liveTurn.length === 1)
99
+ return { kind: 'pending' };
100
+ return seen ? { kind: 'ambiguous' } : { kind: 'unseen' };
101
+ }
102
+ /**
103
+ * The caller must install its model/tool dispatch fences before invoking this.
104
+ * Native maintenance keeps the wake parked until Session persistence confirms
105
+ * the splice. Failure cancels that wake and requires the caller to dispose the
106
+ * Agent handle before attempting another admission.
107
+ */
108
+ export async function admitRestartContinuation(agent, message, admission) {
109
+ const check = async () => {
110
+ if (admission.signal?.aborted) {
111
+ throw new RestartContinuationError('authorization-revoked', 'restart continuation was cancelled');
112
+ }
113
+ await admission.authorize();
114
+ if (admission.signal?.aborted) {
115
+ throw new RestartContinuationError('authorization-revoked', 'restart continuation was cancelled');
116
+ }
117
+ };
118
+ return agent.runMaintenance(async (signal) => {
119
+ let wakeParked = false;
120
+ try {
121
+ await check();
122
+ if (signal.aborted)
123
+ throw new RestartContinuationError('authorization-revoked', 'native maintenance was cancelled');
124
+ const state = inspectRestartContinuation(agent, message);
125
+ if (state.kind === 'claimed' || state.kind === 'settled')
126
+ return state;
127
+ if (state.kind === 'ambiguous') {
128
+ throw new RestartContinuationError('ambiguous', 'restart continuation history cannot prove a safe admission');
129
+ }
130
+ if (agent.inbox.nextStep.length > 0
131
+ || agent.inbox.nextTurn.some(item => item.id !== message.id)) {
132
+ throw new RestartContinuationError('ambiguous', 'another native input is pending before restart continuation');
133
+ }
134
+ if (state.kind === 'pending' && !agent.inbox.remove(message.id)) {
135
+ throw new RestartContinuationError('ambiguous', 'restart continuation pending identity changed');
136
+ }
137
+ // Native followup may append before throwing. Suppress its wake even when
138
+ // its caller never receives a successful return.
139
+ wakeParked = true;
140
+ agent.followup(message);
141
+ let flushed;
142
+ try {
143
+ flushed = await admission.flush();
144
+ }
145
+ catch (error) {
146
+ throw new RestartContinuationError('flush-failed', `restart continuation flush failed: ${String(error)}`);
147
+ }
148
+ if (!flushed)
149
+ throw new RestartContinuationError('flush-failed', 'restart continuation flush was not confirmed');
150
+ await check();
151
+ if (signal.aborted)
152
+ throw new RestartContinuationError('authorization-revoked', 'native maintenance was cancelled');
153
+ admission.onAdmitted?.();
154
+ return { kind: 'pending' };
155
+ }
156
+ catch (error) {
157
+ // A disposed cancellation suppresses runMaintenance's latched wake. The
158
+ // caller still owns the awaitable handle teardown; this cannot establish
159
+ // quiescence for any already dispatched external action.
160
+ if (wakeParked) {
161
+ try {
162
+ agent.cancel({ kind: 'disposed' }, { keepInbox: true });
163
+ }
164
+ catch { /* The caller still owns the handle's mandatory teardown. */ }
165
+ }
166
+ throw error;
167
+ }
168
+ });
169
+ }
170
+ //# sourceMappingURL=restart-native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restart-native.js","sourceRoot":"","sources":["../src/restart-native.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { Agent } from '@deepseek-ai/dsh-agent';
2
+ import type { ConversationBinding, InboundEnvelope } from './types.js';
3
+ import type { RestartRecord, RestartStore } from './restart-store.js';
4
+ export interface RestartConfig {
5
+ databasePath: string;
6
+ ownerRouteId: string;
7
+ maxModelRequests: number;
8
+ maxToolCalls: number;
9
+ taskTimeoutMs: number;
10
+ /** Restart-safe read-only tools; ordinary owner tool availability is unchanged. */
11
+ allowedTools: readonly string[];
12
+ }
13
+ export declare 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.";
14
+ export declare const restartDigest: (value: unknown) => string;
15
+ export interface RestartRun {
16
+ readonly agent: Agent;
17
+ readonly inboxId: string;
18
+ readonly continuation?: RestartRecord;
19
+ canRequest(): boolean;
20
+ request(reason: string): RestartRecord;
21
+ requested(): RestartRecord | undefined;
22
+ checkpoint(): Promise<RestartRecord | undefined>;
23
+ dispose(): void;
24
+ }
25
+ /** Host-owned barriers around the existing native loop; this class never schedules work. */
26
+ export declare function attachRestartRun(input: {
27
+ agent: Agent;
28
+ inboxId: string;
29
+ binding: Readonly<ConversationBinding>;
30
+ envelope: Readonly<InboundEnvelope>;
31
+ continuation?: RestartRecord;
32
+ store: RestartStore;
33
+ config: RestartConfig;
34
+ isRestartSafeTool(agent: Agent, name: string): boolean;
35
+ authorize(): boolean;
36
+ authorizeRestart(): boolean;
37
+ }): RestartRun;
38
+ //# sourceMappingURL=restart-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restart-runtime.d.ts","sourceRoot":"","sources":["../src/restart-runtime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAEnD,OAAO,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAGrE,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,gBAAgB,EAAE,MAAM,CAAA;IACxB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,mFAAmF;IACnF,YAAY,EAAE,SAAS,MAAM,EAAE,CAAA;CAChC;AAED,eAAO,MAAM,uBAAuB,2UAA2U,CAAA;AAC/W,eAAO,MAAM,aAAa,GAAI,OAAO,OAAO,KAAG,MAA0E,CAAA;AAEzH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,YAAY,CAAC,EAAE,aAAa,CAAA;IACrC,UAAU,IAAI,OAAO,CAAA;IACrB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAAA;IACtC,SAAS,IAAI,aAAa,GAAG,SAAS,CAAA;IACtC,UAAU,IAAI,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAAA;IAChD,OAAO,IAAI,IAAI,CAAA;CAChB;AAED,4FAA4F;AAC5F,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IACtC,KAAK,EAAE,KAAK,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAA;IACtC,QAAQ,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAA;IACnC,YAAY,CAAC,EAAE,aAAa,CAAA;IAC5B,KAAK,EAAE,YAAY,CAAA;IACnB,MAAM,EAAE,aAAa,CAAA;IACrB,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;IACtD,SAAS,IAAI,OAAO,CAAA;IACpB,gBAAgB,IAAI,OAAO,CAAA;CAC5B,GAAG,UAAU,CAqPb"}
@@ -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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"}