@dsh-enhanced/assistant-work-items 0.0.0-stage → 0.1.66

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 (152) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +685 -2
  3. package/cordis.patch.yml +11 -0
  4. package/lib/acceptance-binding.d.ts +86 -0
  5. package/lib/acceptance-binding.d.ts.map +1 -0
  6. package/lib/acceptance-binding.js +250 -0
  7. package/lib/acceptance-binding.js.map +1 -0
  8. package/lib/admission.d.ts +95 -0
  9. package/lib/admission.d.ts.map +1 -0
  10. package/lib/admission.js +642 -0
  11. package/lib/admission.js.map +1 -0
  12. package/lib/authority.d.ts +92 -0
  13. package/lib/authority.d.ts.map +1 -0
  14. package/lib/authority.js +205 -0
  15. package/lib/authority.js.map +1 -0
  16. package/lib/config.d.ts +365 -0
  17. package/lib/config.d.ts.map +1 -0
  18. package/lib/config.js +672 -0
  19. package/lib/config.js.map +1 -0
  20. package/lib/continuation-contract.d.ts +126 -0
  21. package/lib/continuation-contract.d.ts.map +1 -0
  22. package/lib/continuation-contract.js +109 -0
  23. package/lib/continuation-contract.js.map +1 -0
  24. package/lib/continuation-record.d.ts +32 -0
  25. package/lib/continuation-record.d.ts.map +1 -0
  26. package/lib/continuation-record.js +57 -0
  27. package/lib/continuation-record.js.map +1 -0
  28. package/lib/continuation.d.ts +89 -0
  29. package/lib/continuation.d.ts.map +1 -0
  30. package/lib/continuation.js +607 -0
  31. package/lib/continuation.js.map +1 -0
  32. package/lib/diagnosis-contract.d.ts +95 -0
  33. package/lib/diagnosis-contract.d.ts.map +1 -0
  34. package/lib/diagnosis-contract.js +167 -0
  35. package/lib/diagnosis-contract.js.map +1 -0
  36. package/lib/diagnosis.d.ts +70 -0
  37. package/lib/diagnosis.d.ts.map +1 -0
  38. package/lib/diagnosis.js +466 -0
  39. package/lib/diagnosis.js.map +1 -0
  40. package/lib/dispatch.d.ts +100 -0
  41. package/lib/dispatch.d.ts.map +1 -0
  42. package/lib/dispatch.js +317 -0
  43. package/lib/dispatch.js.map +1 -0
  44. package/lib/engineering-context.d.ts +86 -0
  45. package/lib/engineering-context.d.ts.map +1 -0
  46. package/lib/engineering-context.js +263 -0
  47. package/lib/engineering-context.js.map +1 -0
  48. package/lib/evaluation.d.ts +125 -0
  49. package/lib/evaluation.d.ts.map +1 -0
  50. package/lib/evaluation.js +295 -0
  51. package/lib/evaluation.js.map +1 -0
  52. package/lib/event-follow.d.ts +93 -0
  53. package/lib/event-follow.d.ts.map +1 -0
  54. package/lib/event-follow.js +150 -0
  55. package/lib/event-follow.js.map +1 -0
  56. package/lib/feedback-targets.d.ts +91 -0
  57. package/lib/feedback-targets.d.ts.map +1 -0
  58. package/lib/feedback-targets.js +362 -0
  59. package/lib/feedback-targets.js.map +1 -0
  60. package/lib/index.d.ts +27 -0
  61. package/lib/index.d.ts.map +1 -0
  62. package/lib/index.js +25 -0
  63. package/lib/index.js.map +1 -0
  64. package/lib/intake-admission.d.ts +49 -0
  65. package/lib/intake-admission.d.ts.map +1 -0
  66. package/lib/intake-admission.js +100 -0
  67. package/lib/intake-admission.js.map +1 -0
  68. package/lib/intake-evaluation-runtime.d.ts +74 -0
  69. package/lib/intake-evaluation-runtime.d.ts.map +1 -0
  70. package/lib/intake-evaluation-runtime.js +343 -0
  71. package/lib/intake-evaluation-runtime.js.map +1 -0
  72. package/lib/intake-evaluation.d.ts +180 -0
  73. package/lib/intake-evaluation.d.ts.map +1 -0
  74. package/lib/intake-evaluation.js +440 -0
  75. package/lib/intake-evaluation.js.map +1 -0
  76. package/lib/intake.d.ts +118 -0
  77. package/lib/intake.d.ts.map +1 -0
  78. package/lib/intake.js +137 -0
  79. package/lib/intake.js.map +1 -0
  80. package/lib/ledger.d.ts +86 -0
  81. package/lib/ledger.d.ts.map +1 -0
  82. package/lib/ledger.js +145 -0
  83. package/lib/ledger.js.map +1 -0
  84. package/lib/mandate.d.ts +45 -0
  85. package/lib/mandate.d.ts.map +1 -0
  86. package/lib/mandate.js +168 -0
  87. package/lib/mandate.js.map +1 -0
  88. package/lib/outcome.d.ts +137 -0
  89. package/lib/outcome.d.ts.map +1 -0
  90. package/lib/outcome.js +303 -0
  91. package/lib/outcome.js.map +1 -0
  92. package/lib/owner-access.d.ts +35 -0
  93. package/lib/owner-access.d.ts.map +1 -0
  94. package/lib/owner-access.js +152 -0
  95. package/lib/owner-access.js.map +1 -0
  96. package/lib/owner-continuation.d.ts +27 -0
  97. package/lib/owner-continuation.d.ts.map +1 -0
  98. package/lib/owner-continuation.js +131 -0
  99. package/lib/owner-continuation.js.map +1 -0
  100. package/lib/owner-recall.d.ts +85 -0
  101. package/lib/owner-recall.d.ts.map +1 -0
  102. package/lib/owner-recall.js +134 -0
  103. package/lib/owner-recall.js.map +1 -0
  104. package/lib/owner-replies.d.ts +44 -0
  105. package/lib/owner-replies.d.ts.map +1 -0
  106. package/lib/owner-replies.js +232 -0
  107. package/lib/owner-replies.js.map +1 -0
  108. package/lib/peers.d.ts +622 -0
  109. package/lib/peers.d.ts.map +1 -0
  110. package/lib/peers.js +10 -0
  111. package/lib/peers.js.map +1 -0
  112. package/lib/policy-notice.d.ts +31 -0
  113. package/lib/policy-notice.d.ts.map +1 -0
  114. package/lib/policy-notice.js +137 -0
  115. package/lib/policy-notice.js.map +1 -0
  116. package/lib/reply-contract.d.ts +67 -0
  117. package/lib/reply-contract.d.ts.map +1 -0
  118. package/lib/reply-contract.js +58 -0
  119. package/lib/reply-contract.js.map +1 -0
  120. package/lib/service.d.ts +625 -0
  121. package/lib/service.d.ts.map +1 -0
  122. package/lib/service.js +2388 -0
  123. package/lib/service.js.map +1 -0
  124. package/lib/settlement.d.ts +74 -0
  125. package/lib/settlement.d.ts.map +1 -0
  126. package/lib/settlement.js +233 -0
  127. package/lib/settlement.js.map +1 -0
  128. package/lib/signals.d.ts +176 -0
  129. package/lib/signals.d.ts.map +1 -0
  130. package/lib/signals.js +497 -0
  131. package/lib/signals.js.map +1 -0
  132. package/lib/store.d.ts +789 -0
  133. package/lib/store.d.ts.map +1 -0
  134. package/lib/store.js +3266 -0
  135. package/lib/store.js.map +1 -0
  136. package/lib/tools.d.ts +7 -0
  137. package/lib/tools.d.ts.map +1 -0
  138. package/lib/tools.js +443 -0
  139. package/lib/tools.js.map +1 -0
  140. package/lib/types.d.ts +831 -0
  141. package/lib/types.d.ts.map +1 -0
  142. package/lib/types.js +29 -0
  143. package/lib/types.js.map +1 -0
  144. package/lib/version.d.ts +2 -0
  145. package/lib/version.d.ts.map +1 -0
  146. package/lib/version.js +2 -0
  147. package/lib/version.js.map +1 -0
  148. package/lib/workspace.d.ts +43 -0
  149. package/lib/workspace.d.ts.map +1 -0
  150. package/lib/workspace.js +137 -0
  151. package/lib/workspace.js.map +1 -0
  152. package/package.json +101 -3
@@ -0,0 +1,466 @@
1
+ import { randomBytes } from 'node:crypto';
2
+ import { acceptanceCanonicalJson, acceptanceDigest } from '@dsh-enhanced/task-acceptance-contract';
3
+ import { OPEN_STATES } from './types.js';
4
+ import { assertDiagnosisSource, canonicalDiagnosis, createDiagnosisPlan, diagnosisConfigurationDigest, diagnosisDefinition, diagnosisDefinitionHash, diagnosisExternalId, diagnosisFail, diagnosisToolDigest, parseDiagnosisActivation, DIAGNOSIS_EXECUTOR, DIAGNOSIS_OWNER, DIAGNOSIS_PROMPT_VERSION, DIAGNOSIS_SOURCE, DIAGNOSIS_TOOLS, } from './diagnosis-contract.js';
5
+ const ACTIVATION_KEY = 'diagnosis.activation/v1';
6
+ const CURSOR_KEY = `signal.cursor:${DIAGNOSIS_SOURCE}`;
7
+ const SWEPT_KEY = `signal.sweptAt:${DIAGNOSIS_SOURCE}`;
8
+ export function persistedDiagnosisIntervention(store, unprovenReports = false) {
9
+ try {
10
+ if (store.diagnosisInterventionItems(1).length > 0)
11
+ return true;
12
+ // An unavailable runtime cannot prove an outer success receipt. A report is
13
+ // not completion: a crash may precede the durable unknown event.
14
+ if (unprovenReports) {
15
+ const report = store.latestWorkerDiagnosisReport();
16
+ if (report && !store.diagnosisExplicitlyDisposed(report.itemId))
17
+ return true;
18
+ }
19
+ return store.listItems({ states: OPEN_STATES, limit: 100 }).some(item => {
20
+ try {
21
+ const dispatch = store.getDispatch(item.id);
22
+ return !store.readDiagnosisPlan(item.id) || dispatch?.state === 'failed' && dispatch.reason === 'unknown_after_send'
23
+ || unprovenReports && dispatch?.state === 'dispatched'
24
+ || item.attempt > 0 && item.lastReportStatus !== 'waiting' && (item.leaseUntil === null || item.leaseUntil <= Date.now());
25
+ }
26
+ catch {
27
+ return true;
28
+ }
29
+ });
30
+ }
31
+ catch {
32
+ return true;
33
+ }
34
+ }
35
+ /** Consumer-owned Host adapter. Every Agent is still created and driven by Automations. */
36
+ export class WorkItemDiagnosis {
37
+ context;
38
+ config;
39
+ store;
40
+ admission;
41
+ dispatch;
42
+ hooks;
43
+ #controller = new AbortController();
44
+ #runs = new Map();
45
+ #activation;
46
+ #remove;
47
+ #closed = false;
48
+ #sweeping = false;
49
+ #lastError = null;
50
+ constructor(context, config, store, admission, dispatch, hooks) {
51
+ this.context = context;
52
+ this.config = config;
53
+ this.store = store;
54
+ this.admission = admission;
55
+ this.dispatch = dispatch;
56
+ this.hooks = hooks;
57
+ }
58
+ automations() {
59
+ if (this.#closed || this.#controller.signal.aborted)
60
+ diagnosisFail('diagnosis consumer is disposed');
61
+ const peer = this.context.get('assistantAutomations');
62
+ if (!peer || peer.hostAgentAuthorizationVersion?.() !== 1 || typeof peer.runAgentForHostExecution !== 'function'
63
+ || typeof peer.registerHostExecutor !== 'function' || typeof peer.reconcileSystem !== 'function'
64
+ || typeof peer.inspectSystemOwned !== 'function' || typeof peer.inspectSystemOwnedActivation !== 'function')
65
+ diagnosisFail('diagnosis requires the fenced Host Agent execution peer');
66
+ return peer;
67
+ }
68
+ delivery() {
69
+ const peer = this.context.get('assistantDelivery');
70
+ if (!peer || typeof peer.listOwnerForegroundTaskSources !== 'function' || typeof peer.inspectOwnerForegroundTaskSource !== 'function'
71
+ || typeof peer.readOwnerForegroundTaskInput !== 'function')
72
+ diagnosisFail('diagnosis source peer is unavailable');
73
+ return peer;
74
+ }
75
+ schemas() {
76
+ const schemas = this.context.tools.schemas().filter(schema => DIAGNOSIS_TOOLS.includes(schema.name));
77
+ diagnosisToolDigest(schemas);
78
+ return JSON.parse(acceptanceCanonicalJson(schemas));
79
+ }
80
+ owner() {
81
+ const scope = this.config.scope;
82
+ if (!scope || !this.config.diagnosis || Date.now() >= Math.min(scope.expiresAt, this.config.diagnosis.expiresAt))
83
+ diagnosisFail('diagnosis authorization expired');
84
+ const receipt = this.delivery().validateOwnerRoute({ authorityId: scope.ownerRouteId, principalId: scope.principalId,
85
+ workspace: scope.workspace, agentPreset: scope.preset });
86
+ if (receipt.receiptVersion !== 2 || receipt.authorityId !== scope.ownerRouteId || receipt.principalId !== scope.principalId
87
+ || receipt.workspace !== scope.workspace || receipt.agentPreset !== scope.preset)
88
+ diagnosisFail('diagnosis owner receipt differs');
89
+ return receipt;
90
+ }
91
+ sourceScope(receipt) {
92
+ const scope = this.config.scope;
93
+ return { authorityId: scope.ownerRouteId, principalId: scope.principalId, workspace: scope.workspace, agentPreset: scope.preset,
94
+ expectedOwner: { authorityHash: receipt.authorityHash, principalRecordId: receipt.principalRecordId, principalVersion: receipt.principalVersion } };
95
+ }
96
+ start() {
97
+ const config = this.config, scope = config.scope, diagnosis = config.diagnosis;
98
+ if (!diagnosis || !scope || config.mode !== 'active' || !config.enabled)
99
+ diagnosisFail('diagnosis requires explicit active configuration');
100
+ const peer = this.automations(), receipt = this.owner(), schemas = this.schemas();
101
+ const policy = this.context.get('assistantPolicy');
102
+ if (policy?.authorize({ subject: { kind: 'background', id: config.intakeSourceId, workspace: scope.workspace, principal: scope.principalId },
103
+ action: 'admit', resource: { kind: 'automation', id: config.workerAutomationId }, context: { initiator: 'background' } }, { idempotencyKey: `diagnosis-activation-admit:${config.intakeSourceId}:${config.workerAutomationId}` }).effect !== 'allow')
104
+ diagnosisFail('diagnosis activation admission is denied');
105
+ const configurationDigest = diagnosisConfigurationDigest(config, schemas);
106
+ const catalogDigest = acceptanceDigest({ protocol: DIAGNOSIS_PROMPT_VERSION, toolSchemaDigest: diagnosisToolDigest(schemas) });
107
+ const prior = this.store.readCanonicalMeta(ACTIVATION_KEY);
108
+ let activation;
109
+ if (prior === undefined) {
110
+ const nonce = randomBytes(32).toString('hex'), definition = diagnosisDefinition(config, nonce, catalogDigest);
111
+ activation = Object.freeze({ protocol: 'assistant-work-items/diagnosis-activation/v1', stage: 'pending', configurationDigest,
112
+ activationNonce: nonce, reconciliationKey: `diagnosis-${acceptanceDigest({ configurationDigest, nonce })}`,
113
+ definitionHash: diagnosisDefinitionHash(definition), definitionVersion: 1, catalogDigest, ownerReceipt: receipt });
114
+ this.store.setMeta(ACTIVATION_KEY, canonicalDiagnosis(activation));
115
+ }
116
+ else
117
+ activation = parseDiagnosisActivation(prior);
118
+ if (activation.configurationDigest !== configurationDigest || activation.catalogDigest !== catalogDigest
119
+ || acceptanceCanonicalJson(activation.ownerReceipt) !== acceptanceCanonicalJson(receipt)
120
+ || activation.definitionHash !== diagnosisDefinitionHash(diagnosisDefinition(config, activation.activationNonce, catalogDigest)))
121
+ diagnosisFail('diagnosis activation configuration or owner changed');
122
+ this.#activation = activation;
123
+ this.#remove = peer.registerHostExecutor({ descriptor: { executorId: DIAGNOSIS_EXECUTOR, contractVersion: 1, catalogDigest },
124
+ accepts: spec => !this.#closed && spec.kind === 'host' && spec.executorId === DIAGNOSIS_EXECUTOR
125
+ && spec.executorContractVersion === 1 && spec.runbookId === 'foreground-diagnosis' && spec.runbookVersion === 1
126
+ && spec.catalogDigest === catalogDigest && spec.activationNonce === activation.activationNonce
127
+ && spec.ownerRouteId === scope.ownerRouteId && spec.targetScope.workspace === scope.workspace && spec.targetScope.preset === scope.preset,
128
+ execute: input => this.execute(input),
129
+ });
130
+ if (activation.stage === 'pending') {
131
+ let present = false;
132
+ try {
133
+ peer.inspectSystemOwned({ owner: DIAGNOSIS_OWNER, automationId: config.workerAutomationId });
134
+ present = true;
135
+ }
136
+ catch (error) {
137
+ if (!(error && typeof error === 'object' && 'code' in error && error.code === 'not-found'))
138
+ throw error;
139
+ }
140
+ if (!present)
141
+ peer.reconcileSystem({ owner: DIAGNOSIS_OWNER, automationId: config.workerAutomationId,
142
+ idempotencyKey: activation.reconciliationKey, definition: diagnosisDefinition(config, activation.activationNonce, catalogDigest), desiredStatus: 'active' });
143
+ this.assertActivation(activation);
144
+ activation = Object.freeze({ ...activation, stage: 'established' });
145
+ this.store.setMeta(ACTIVATION_KEY, canonicalDiagnosis(activation));
146
+ this.#activation = activation;
147
+ }
148
+ else
149
+ this.assertActivation(activation);
150
+ this.wakePending();
151
+ }
152
+ assertActivation(expected = this.#activation) {
153
+ if (!expected)
154
+ diagnosisFail('diagnosis activation is unavailable');
155
+ const peer = this.automations(), receipt = this.owner();
156
+ const current = parseDiagnosisActivation(this.store.readCanonicalMeta(ACTIVATION_KEY));
157
+ if (acceptanceCanonicalJson(current) !== acceptanceCanonicalJson(expected)
158
+ || current.configurationDigest !== diagnosisConfigurationDigest(this.config, this.schemas())
159
+ || acceptanceCanonicalJson(current.ownerReceipt) !== acceptanceCanonicalJson(receipt))
160
+ diagnosisFail('diagnosis activation receipt changed');
161
+ const input = { owner: DIAGNOSIS_OWNER, automationId: this.config.workerAutomationId };
162
+ const state = peer.inspectSystemOwned(input), binding = peer.inspectSystemOwnedActivation(input);
163
+ if (state.owner !== DIAGNOSIS_OWNER || state.automationId !== input.automationId || state.automationStatus !== 'active'
164
+ || state.definitionHash !== current.definitionHash || state.definitionVersion !== current.definitionVersion
165
+ || !binding || binding.definitionHash !== current.definitionHash || binding.activationNonce !== current.activationNonce
166
+ || binding.ownerRouteId !== this.config.scope.ownerRouteId)
167
+ diagnosisFail('diagnosis worker is paused, missing or changed');
168
+ return current;
169
+ }
170
+ currentPlan(item) {
171
+ const plan = this.store.readDiagnosisPlan(item.id);
172
+ if (!plan)
173
+ diagnosisFail('diagnosis item has no original frozen plan');
174
+ const activation = this.assertActivation(), receipt = this.hooks.assertOwner(item);
175
+ this.hooks.assertMandate(item);
176
+ const source = this.delivery().inspectOwnerForegroundTaskSource({ ...this.sourceScope(receipt), inboxId: plan.source.inboxId });
177
+ if (!source || source.sourceDigest !== plan.source.sourceDigest)
178
+ diagnosisFail('diagnosis source was withdrawn or changed');
179
+ assertDiagnosisSource(source, this.config, receipt);
180
+ const expected = createDiagnosisPlan(item, source, this.config, activation, this.schemas());
181
+ if (acceptanceCanonicalJson(plan) !== acceptanceCanonicalJson(expected))
182
+ diagnosisFail('diagnosis frozen execution contract differs');
183
+ return plan;
184
+ }
185
+ outerSucceeded(binding) {
186
+ const activation = this.#activation;
187
+ if (!activation)
188
+ return false;
189
+ const state = this.automations().inspectSystemOwned({ owner: DIAGNOSIS_OWNER, automationId: this.config.workerAutomationId });
190
+ const run = state.latestTerminalRuns?.production, scope = this.config.scope;
191
+ return !!run && run.occurrenceId === binding.occurrenceId && run.executionMode === 'production' && run.status === 'succeeded'
192
+ && run.diagnostic.budgetSettlementState === 'finalized' && run.immutableContext.state === 'verified'
193
+ && run.immutableContext.definitionHash === activation.definitionHash && run.immutableContext.definitionVersion === activation.definitionVersion
194
+ && run.immutableContext.scope.workspace === scope.workspace && run.immutableContext.scope.agentPreset === scope.preset;
195
+ }
196
+ previousReportSettled() {
197
+ const binding = this.store.latestWorkerDiagnosisReport(this.config.workerAutomationId);
198
+ return !binding || this.store.diagnosisExplicitlyDisposed(binding.itemId) || this.outerSucceeded(binding);
199
+ }
200
+ validateWake(item) {
201
+ try {
202
+ if (this.#runs.size > 0 || this.store.diagnosisInterventionPending(item.id))
203
+ return false;
204
+ this.currentPlan(item);
205
+ const dispatch = this.store.getDispatch(item.id);
206
+ return !!dispatch && dispatch.state === 'pending' && !item.observed
207
+ && (item.attempt === 0 && dispatch.generation === 0 && item.state === 'queued'
208
+ || item.state === 'waiting' && item.lastReportStatus === 'waiting' && dispatch.reason === 'waiting-resume' && item.attempt < item.maxAttempts
209
+ && this.outerSucceeded(this.store.diagnosisReportOccurrence(item.id, this.store.reports(item.id).at(-1).revision)));
210
+ }
211
+ catch {
212
+ return false;
213
+ }
214
+ }
215
+ /** Consumer lifetime only; safe after the last peer authorization callback. */
216
+ isWakeCurrent() {
217
+ return !this.#closed && !this.#controller.signal.aborted && !this.store.closed && this.#activation?.stage === 'established';
218
+ }
219
+ wakePending() {
220
+ for (const dispatch of this.store.listOpenDispatches(10)) {
221
+ const item = this.store.findItemById(dispatch.itemId);
222
+ if (item && this.validateWake(item))
223
+ this.dispatch.wake(item);
224
+ }
225
+ }
226
+ assertRun(run) {
227
+ if (this.#closed || this.#controller.signal.aborted || run.input.signal.aborted || run.controller.signal.aborted || this.#runs.get(run.input.occurrenceId) !== run)
228
+ diagnosisFail('diagnosis invocation was revoked');
229
+ const item = this.store.findItemById(run.itemId);
230
+ if (!item || item.observed || ['dropped', 'observed'].includes(item.state))
231
+ diagnosisFail('diagnosis item was retired');
232
+ const plan = this.currentPlan(item), dispatch = this.store.getDispatch(item.id);
233
+ if (plan.digest !== run.plan.digest || !dispatch || dispatch.occurrenceId !== run.input.occurrenceId
234
+ && !(run.phase === 'reported' && dispatch.state === 'pending' && dispatch.reason === 'waiting-resume' && dispatch.generation === run.generation + 1))
235
+ diagnosisFail('diagnosis occurrence or dispatch changed');
236
+ const claim = this.store.activeClaim(item.id), now = Date.now();
237
+ if (run.phase === 'before-claim') {
238
+ if (claim && claim.runId === run.input.occurrenceId && claim.leasedUntil > now)
239
+ run.phase = 'claimed';
240
+ else if (!['queued', 'waiting'].includes(item.state) || claim && claim.leasedUntil > now)
241
+ diagnosisFail('diagnosis is not eligible before claim');
242
+ }
243
+ if (run.phase === 'claimed' && (!claim || claim.runId !== run.input.occurrenceId || claim.leasedUntil <= now
244
+ || item.leaseRunId !== run.input.occurrenceId || item.leaseUntil === null || item.leaseUntil <= now))
245
+ diagnosisFail('diagnosis claim expired or changed');
246
+ if (run.phase === 'reported') {
247
+ const latest = this.store.reports(item.id).at(-1);
248
+ if (!latest || latest.revision !== run.reportRevision || latest.status !== run.reportStatus
249
+ || item.lastReportStatus !== run.reportStatus || !['waiting', 'ready', 'blocked', 'failed'].includes(item.state)
250
+ || claim && claim.leasedUntil > now)
251
+ diagnosisFail('diagnosis final summary no longer owns its report');
252
+ }
253
+ return item;
254
+ }
255
+ assertTool(occurrenceId, name) {
256
+ const run = this.#runs.get(occurrenceId);
257
+ if (!run)
258
+ diagnosisFail('diagnosis tools require the live Host invocation');
259
+ this.assertRun(run);
260
+ if (run.phase === 'reported' && !['work_item_status', 'work_item_read_report'].includes(name))
261
+ diagnosisFail('diagnosis report ended this attempt');
262
+ if (name === 'work_item_read_source' && run.phase !== 'claimed')
263
+ diagnosisFail('diagnosis source reading requires an active claim');
264
+ }
265
+ retire(itemIds) {
266
+ for (const run of this.#runs.values())
267
+ if (itemIds.includes(run.itemId))
268
+ run.controller.abort('diagnosis-withdrawn');
269
+ }
270
+ reported(occurrenceId, status, revision) {
271
+ const run = this.#runs.get(occurrenceId);
272
+ if (!run || status === 'progress')
273
+ return;
274
+ run.phase = 'reported';
275
+ run.reportRevision = revision;
276
+ run.reportStatus = status;
277
+ }
278
+ readSource(occurrenceId, input) {
279
+ this.assertTool(occurrenceId, 'work_item_read_source');
280
+ const run = this.#runs.get(occurrenceId), item = this.assertRun(run), receipt = this.hooks.assertOwner(item);
281
+ const page = this.delivery().readOwnerForegroundTaskInput({ ...this.sourceScope(receipt), inboxId: run.plan.source.inboxId,
282
+ expectedSourceDigest: run.plan.source.sourceDigest, ...input });
283
+ if (!page || page.sourceDigest !== run.plan.source.sourceDigest)
284
+ diagnosisFail('diagnosis original input is unavailable');
285
+ return Object.freeze({ itemId: item.id, ...page.input, sourceDigest: page.sourceDigest, nextOffset: page.input.nextOffset ?? null });
286
+ }
287
+ async execute(input) {
288
+ let started = false, run, itemId;
289
+ try {
290
+ const activation = this.assertActivation(), scope = this.config.scope;
291
+ const item = this.store.findItemByOccurrence(input.occurrenceId), dispatch = item && this.store.getDispatch(item.id);
292
+ itemId = item?.id;
293
+ if (this.store.diagnosisInterventionItems(1).length > 0)
294
+ diagnosisFail('diagnosis awaits explicit intervention');
295
+ if (!item || !dispatch || !['queued', 'waiting'].includes(item.state) || item.observed
296
+ || input.executionMode !== 'production' || input.automationId !== this.config.workerAutomationId
297
+ || input.definitionHash !== activation.definitionHash || input.activationNonce !== activation.activationNonce
298
+ || input.catalogDigest !== activation.catalogDigest || input.ownerRouteId !== scope.ownerRouteId || input.principal !== scope.principalId
299
+ || input.targetScope.workspace !== scope.workspace || input.targetScope.preset !== scope.preset
300
+ || this.#runs.has(input.occurrenceId))
301
+ diagnosisFail('diagnosis Host execution identity differs');
302
+ if (item.state === 'waiting' && (item.lastReportStatus !== 'waiting'
303
+ || !this.outerSucceeded(this.store.diagnosisReportOccurrence(item.id, this.store.reports(item.id).at(-1).revision))))
304
+ diagnosisFail('previous diagnosis occurrence has no exact finalized success');
305
+ const plan = this.currentPlan(item);
306
+ run = { input, itemId: item.id, plan, generation: dispatch.generation, phase: 'before-claim', controller: new AbortController() };
307
+ this.#runs.set(input.occurrenceId, run);
308
+ this.assertRun(run);
309
+ started = true;
310
+ const result = await this.automations().runAgentForHostExecution(input, plan.contract, { signal: AbortSignal.any([this.#controller.signal, run.controller.signal]), assertCurrent: () => { this.assertRun(run); } });
311
+ if (result.outcome === 'succeeded' && result.quiescent === true && run.phase === 'reported')
312
+ return {
313
+ outcome: 'succeeded', failureClass: 'none', failurePhase: 'none', failureCode: 'none', sideEffectState: 'none', retryability: 'safe',
314
+ };
315
+ this.store.appendEvent(item.id, 'diagnosis-unknown', 'diagnosis-runtime', { occurrenceId: input.occurrenceId,
316
+ reason: result.quiescent !== true ? 'teardown-unconfirmed' : run.phase !== 'reported' ? 'report-missing' : 'agent-unsuccessful' });
317
+ this.#lastError = 'diagnosis-awaits-intervention';
318
+ return { outcome: result.quiescent === true && result.outcome !== 'unknown' ? 'failed' : 'unknown', failureClass: 'execution',
319
+ failurePhase: 'host-execution', failureCode: 'diagnosis-agent-incomplete', sideEffectState: 'unknown', retryability: 'unsafe' };
320
+ }
321
+ catch {
322
+ this.#lastError = started ? 'diagnosis-awaits-intervention' : 'diagnosis-execution-refused';
323
+ if (itemId && !started)
324
+ this.store.appendEvent(itemId, 'diagnosis-refused', 'diagnosis-runtime', { occurrenceId: input.occurrenceId });
325
+ if (run && started)
326
+ this.store.appendEvent(run.itemId, 'diagnosis-unknown', 'diagnosis-runtime', { occurrenceId: input.occurrenceId, reason: 'execution-interrupted' });
327
+ return started ? { outcome: 'unknown', failureClass: 'unknown', failurePhase: 'host-execution', failureCode: 'diagnosis-execution-unknown', sideEffectState: 'unknown', retryability: 'unsafe' }
328
+ : { outcome: 'failed', failureClass: 'policy', failurePhase: 'preflight', failureCode: 'diagnosis-execution-refused', sideEffectState: 'none', retryability: 'after-intervention' };
329
+ }
330
+ finally {
331
+ if (run && this.#runs.get(input.occurrenceId) === run)
332
+ this.#runs.delete(input.occurrenceId);
333
+ }
334
+ }
335
+ sweep(force = false) {
336
+ const report = {
337
+ source: DIAGNOSIS_SOURCE, skipped: null, degraded: null, scanned: 0, admitted: 0, duplicates: 0, fenced: 0, withdrawn: 0, retired: 0, rejected: 0, failed: false,
338
+ };
339
+ if (this.#sweeping || this.#closed)
340
+ return { sources: [{ ...report, skipped: 'disabled' }] };
341
+ const now = Date.now(), config = this.config.sources.foregroundFailures;
342
+ // A single Host definition uses queue-one. Never enqueue a second item that its coalescer could silently skip.
343
+ if (this.#runs.size > 0 || this.store.countOpenItems() > 0 || this.store.diagnosisInterventionItems(1).length > 0)
344
+ return { sources: [{ ...report, skipped: 'not-due' }] };
345
+ const last = Number(this.store.meta(SWEPT_KEY));
346
+ if (!force && Number.isFinite(last) && last > 0 && now - last < config.sweepIntervalMs)
347
+ return { sources: [{ ...report, skipped: 'not-due' }] };
348
+ this.#sweeping = true;
349
+ this.store.setMeta(SWEPT_KEY, String(now));
350
+ try {
351
+ const activation = this.assertActivation();
352
+ if (!this.previousReportSettled()) {
353
+ report.skipped = 'not-due';
354
+ return { sources: [Object.freeze(report)] };
355
+ }
356
+ const receipt = this.owner(), raw = this.store.meta(CURSOR_KEY);
357
+ const cursor = raw ? JSON.parse(raw) : undefined;
358
+ const page = this.delivery().listOwnerForegroundTaskSources({ ...this.sourceScope(receipt), ...(cursor === undefined ? {} : { after: cursor }), limit: config.maxCandidatesPerSweep });
359
+ let consumedCursor = cursor;
360
+ let complete = true;
361
+ for (const source of page.items) {
362
+ report.scanned += 1;
363
+ let eligible = true;
364
+ try {
365
+ assertDiagnosisSource(source, this.config, receipt, true);
366
+ }
367
+ catch {
368
+ eligible = false;
369
+ }
370
+ if (eligible) {
371
+ const input = { kind: config.kind, externalId: diagnosisExternalId(source), title: 'Diagnose an interrupted owner request',
372
+ brief: 'Read-only diagnosis of the original owner task. Its external effects remain unknown. Read the bounded source with work_item_read_source; do not replay the original operation.',
373
+ originBindingId: source.binding.id, provenance: { source: DIAGNOSIS_SOURCE, sourceVersion: 'assistant-delivery/foreground-termination/v1',
374
+ signalDigest: `sha256:${source.sourceDigest}`, observedAt: now, evidence: { inboxId: source.inboxId, completionSequence: source.completionSequence,
375
+ authorityHash: source.authorityHash, bindingVersion: source.binding.version, completedAt: source.execution.completedAt } } };
376
+ if (source.termination.kind === 'owner-cancelled') {
377
+ const result = this.admission.withdraw(input);
378
+ report.withdrawn += 1;
379
+ report.retired += result.outcome === 'withdrawn' ? result.items.length : 0;
380
+ }
381
+ else {
382
+ try {
383
+ const result = this.hooks.admit(input, item => {
384
+ const current = this.delivery().inspectOwnerForegroundTaskSource({ ...this.sourceScope(receipt), inboxId: source.inboxId });
385
+ if (!current || current.sourceDigest !== source.sourceDigest)
386
+ diagnosisFail('diagnosis source changed before admission');
387
+ assertDiagnosisSource(current, this.config, receipt);
388
+ return createDiagnosisPlan(item, current, this.config, this.assertActivation(activation), this.schemas());
389
+ });
390
+ if (result.created)
391
+ report.admitted += 1;
392
+ else if (result.reason === 'fenced')
393
+ report.fenced += 1;
394
+ else
395
+ report.duplicates += 1;
396
+ if (this.validateWake(result.item))
397
+ this.dispatch.wake(result.item);
398
+ }
399
+ catch {
400
+ report.rejected += 1;
401
+ complete = false;
402
+ break;
403
+ }
404
+ }
405
+ }
406
+ // Keep the actual Delivery cursor namespace and stop at the consumed row, not the end of its page.
407
+ if (page.nextCursor && typeof page.nextCursor === 'object')
408
+ consumedCursor = { ...page.nextCursor, sequence: source.completionSequence };
409
+ if (this.store.countOpenItems() > 0 || report.admitted >= config.maxAdmitsPerSweep) {
410
+ complete = false;
411
+ break;
412
+ }
413
+ }
414
+ const next = complete ? page.nextCursor : consumedCursor;
415
+ this.store.setMeta(CURSOR_KEY, next === undefined ? '' : JSON.stringify(next));
416
+ }
417
+ catch {
418
+ this.#lastError = 'diagnosis-source-unavailable';
419
+ report.failed = true;
420
+ this.store.setMeta(CURSOR_KEY, '');
421
+ }
422
+ finally {
423
+ this.#sweeping = false;
424
+ }
425
+ return { sources: [Object.freeze(report)] };
426
+ }
427
+ health() {
428
+ let ready = !this.#closed && this.#activation?.stage === 'established';
429
+ if (ready) {
430
+ try {
431
+ this.assertActivation();
432
+ }
433
+ catch {
434
+ ready = false;
435
+ }
436
+ }
437
+ const persisted = persistedDiagnosisIntervention(this.store);
438
+ let unproven = false;
439
+ if (this.#runs.size === 0) {
440
+ try {
441
+ unproven = !this.previousReportSettled() || this.store.listItems({ states: OPEN_STATES, limit: 100 }).some(item => {
442
+ const dispatch = this.store.getDispatch(item.id);
443
+ // A sent occurrence without a report may have died before this
444
+ // consumer entered execute. Neither attempt=0 nor silence proves it
445
+ // never ran; retain the slot and expose the unconfirmed disposition.
446
+ return dispatch?.state === 'dispatched' && item.lastReportStatus === null && !this.store.diagnosisExplicitlyDisposed(item.id);
447
+ });
448
+ }
449
+ catch {
450
+ unproven = true;
451
+ }
452
+ }
453
+ const interventionRequired = persisted || unproven;
454
+ return Object.freeze({ enabled: true, ready: ready && !interventionRequired, running: this.#runs.size,
455
+ lastError: interventionRequired ? 'diagnosis-awaits-intervention' : !ready ? 'diagnosis-activation-unavailable' : this.#lastError, interventionRequired });
456
+ }
457
+ close() {
458
+ if (this.#closed)
459
+ return;
460
+ this.#closed = true;
461
+ this.#controller.abort('diagnosis-consumer-disposed');
462
+ this.#remove?.();
463
+ this.#remove = undefined;
464
+ }
465
+ }
466
+ //# sourceMappingURL=diagnosis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnosis.js","sourceRoot":"","sources":["../src/diagnosis.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ import type { WorkItemAuthority } from './authority.ts';
2
+ import type { NormalizedConfig } from './config.ts';
3
+ import type { WorkItemLedger } from './ledger.ts';
4
+ import type { PeerAutomationsService, PeerDeliveryService } from './peers.ts';
5
+ import type { WorkItemStore } from './store.ts';
6
+ import type { WorkItemNotification, WorkItemRecord, WorkItemReportRecord } from './types.ts';
7
+ /** WP21 slice 8: how a report held for acceptance settles before release. */
8
+ export type HeldReportRelease = Readonly<{
9
+ kind: 'achieved';
10
+ }> | Readonly<{
11
+ kind: 'unverified';
12
+ timeoutMs: number;
13
+ }> | Readonly<{
14
+ kind: 'blocked';
15
+ reason: string;
16
+ }>
17
+ /**
18
+ * The row was never actually held (it has no acceptance binding any more),
19
+ * so it is recovered as an ordinary report: no timeout note, normal delivery
20
+ * identity, the self-reported status unchanged.
21
+ */
22
+ | Readonly<{
23
+ kind: 'plain';
24
+ }>;
25
+ export interface DispatchDependencies {
26
+ readonly config: NormalizedConfig;
27
+ readonly store: WorkItemStore;
28
+ readonly ledger: WorkItemLedger;
29
+ readonly automations: PeerAutomationsService | undefined | (() => PeerAutomationsService | undefined);
30
+ readonly delivery: PeerDeliveryService | undefined | (() => PeerDeliveryService | undefined);
31
+ readonly validateWake?: (item: WorkItemRecord) => boolean;
32
+ /** Pure, consumer-owned lifecycle fence; implementations must call no peer. */
33
+ readonly validateWakeLocal?: (item: WorkItemRecord) => boolean;
34
+ readonly replyReportEligible?: (item: WorkItemRecord, report: WorkItemReportRecord, notification: WorkItemNotification) => boolean;
35
+ /** Admission-mandate revalidation gate; unset means single-authority mode. */
36
+ readonly authority?: WorkItemAuthority;
37
+ readonly now?: () => number;
38
+ }
39
+ /**
40
+ * The two external effects of the ledger, both reused rather than reimplemented.
41
+ *
42
+ * `wake` hands one admitted item to the existing `assistant-automations`
43
+ * external-event intake, which owns the occurrence, the native agent run and
44
+ * the attempt budget. `notify` hands one terminal report to the existing
45
+ * `assistant-delivery` background outbox. Neither path owns a timer, an outbox
46
+ * or a session of its own.
47
+ */
48
+ export declare class WorkItemDispatch {
49
+ #private;
50
+ constructor(dependencies: DispatchDependencies);
51
+ /**
52
+ * Wake the worker automation for one dispatch generation.
53
+ *
54
+ * The event identity is read from the dispatch row, never reconstructed from
55
+ * the item: generation 0 uses the admission identity, and every re-arm has a
56
+ * distinct `(eventId, occurredAt)` pair so the automation intake starts a new
57
+ * occurrence instead of replaying the completed one. Within one generation
58
+ * the identity is stable, which is what makes a retry after a crash safe.
59
+ *
60
+ * Revalidation happens here, before the external effect: a revoked or
61
+ * unavailable mandate parks the item and returns `false` without creating an
62
+ * occurrence, so no worker run is ever started under a decision policy no
63
+ * longer supports. A later allow resumes the same row unchanged.
64
+ *
65
+ * Returns `true` only when this call actually handed the row to the worker.
66
+ */
67
+ wake(item: WorkItemRecord): boolean;
68
+ /**
69
+ * Bounded lazy sweep over dispatch rows this host still owes a run.
70
+ *
71
+ * Unknown-outcome rows get their one same-generation retry first, then due
72
+ * pending rows are woken normally. Nothing here runs on a timer: the sweep is
73
+ * driven by the existing claim/admit/report touches and by startup.
74
+ */
75
+ wakePending(limit?: number): readonly WorkItemRecord[];
76
+ /** Build the owner-facing notification for one terminal report. */
77
+ notification(item: WorkItemRecord, report: WorkItemReportRecord, note?: string): WorkItemNotification;
78
+ /** True when this report status escalates to the owner. */
79
+ shouldNotify(report: WorkItemReportRecord): boolean;
80
+ /**
81
+ * Send one terminal notification through the delivery outbox.
82
+ *
83
+ * Delivery owns retry and the fail-closed policy check; the ledger only
84
+ * records the outcome, including `unknown` when the enqueue result is lost.
85
+ */
86
+ notify(item: WorkItemRecord, report: WorkItemReportRecord): Promise<boolean>;
87
+ /**
88
+ * WP21 slice 8 (`acceptance.holdReport`): send the report held while the
89
+ * verifier settles the binding. `achieved` sends the ordinary report,
90
+ * `unverified` sends it with an explicit timeout note, `blocked` sends a
91
+ * `blocked` report instead of the self-reported `ready` one, and `plain`
92
+ * recovers a row that lost its binding (or was never really held) by sending
93
+ * it exactly like an ordinary report. The delivery coordinates stay on the
94
+ * held report revision, so a crash or a later wake can never enqueue the same
95
+ * held report twice.
96
+ */
97
+ notifyHeld(item: WorkItemRecord, report: WorkItemReportRecord, release: HeldReportRelease): Promise<boolean>;
98
+ now(): number;
99
+ }
100
+ //# sourceMappingURL=dispatch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../src/dispatch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAEnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,KAAK,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAC7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAY5F,6EAA6E;AAC7E,MAAM,MAAM,iBAAiB,GACzB,QAAQ,CAAC;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC,GAC9B,QAAQ,CAAC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,GACnD,QAAQ,CAAC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAC/C;;;;GAIG;GACD,QAAQ,CAAC;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,CAAA;AAE/B,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAA;IACjC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAA;IAC7B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAA;IAC/B,QAAQ,CAAC,WAAW,EAAE,sBAAsB,GAAG,SAAS,GAAG,CAAC,MAAM,sBAAsB,GAAG,SAAS,CAAC,CAAA;IACrG,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,GAAG,SAAS,GAAG,CAAC,MAAM,mBAAmB,GAAG,SAAS,CAAC,CAAA;IAC5F,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,OAAO,CAAA;IACzD,+EAA+E;IAC/E,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,OAAO,CAAA;IAC9D,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,oBAAoB,EAAE,YAAY,EAAE,oBAAoB,KAAK,OAAO,CAAA;IAClI,8EAA8E;IAC9E,QAAQ,CAAC,SAAS,CAAC,EAAE,iBAAiB,CAAA;IACtC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CAC5B;AAED;;;;;;;;GAQG;AACH,qBAAa,gBAAgB;;gBAIf,YAAY,EAAE,oBAAoB;IAK9C;;;;;;;;;;;;;;;OAeG;IACH,IAAI,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO;IAwFnC;;;;;;OAMG;IACH,WAAW,CAAC,KAAK,SAAK,GAAG,SAAS,cAAc,EAAE;IA4BlD,mEAAmE;IACnE,YAAY,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,oBAAoB,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,oBAAoB;IA0BrG,2DAA2D;IAC3D,YAAY,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO;IAInD;;;;;OAKG;IACG,MAAM,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAKlF;;;;;;;;;OASG;IACG,UAAU,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,oBAAoB,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;IA6ElH,GAAG,IAAI,MAAM;CAGd"}