@fabric-harness/sdk 1.13.0 → 2.0.0
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/action.d.ts +69 -0
- package/dist/action.d.ts.map +1 -0
- package/dist/action.js +119 -0
- package/dist/action.js.map +1 -0
- package/dist/agent-definition.d.ts +6 -0
- package/dist/agent-definition.d.ts.map +1 -1
- package/dist/agent-definition.js.map +1 -1
- package/dist/agent.d.ts +2 -0
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +35 -1
- package/dist/agent.js.map +1 -1
- package/dist/attachment-store-contract.d.ts +34 -0
- package/dist/attachment-store-contract.d.ts.map +1 -0
- package/dist/attachment-store-contract.js +0 -0
- package/dist/attachment-store-contract.js.map +1 -0
- package/dist/attachment-store.d.ts +107 -0
- package/dist/attachment-store.d.ts.map +1 -0
- package/dist/attachment-store.js +164 -0
- package/dist/attachment-store.js.map +1 -0
- package/dist/channel.d.ts +84 -0
- package/dist/channel.d.ts.map +1 -0
- package/dist/channel.js +115 -0
- package/dist/channel.js.map +1 -0
- package/dist/context-budget.d.ts +16 -0
- package/dist/context-budget.d.ts.map +1 -1
- package/dist/context-budget.js +38 -3
- package/dist/context-budget.js.map +1 -1
- package/dist/conversation-projection.d.ts +52 -0
- package/dist/conversation-projection.d.ts.map +1 -0
- package/dist/conversation-projection.js +207 -0
- package/dist/conversation-projection.js.map +1 -0
- package/dist/conversation-stream-contract.d.ts +37 -0
- package/dist/conversation-stream-contract.d.ts.map +1 -0
- package/dist/conversation-stream-contract.js +453 -0
- package/dist/conversation-stream-contract.js.map +1 -0
- package/dist/conversation-stream.d.ts +141 -0
- package/dist/conversation-stream.d.ts.map +1 -0
- package/dist/conversation-stream.js +159 -0
- package/dist/conversation-stream.js.map +1 -0
- package/dist/cost-budget.d.ts +106 -1
- package/dist/cost-budget.d.ts.map +1 -1
- package/dist/cost-budget.js +48 -2
- package/dist/cost-budget.js.map +1 -1
- package/dist/delivered-message.d.ts +90 -0
- package/dist/delivered-message.d.ts.map +1 -0
- package/dist/delivered-message.js +154 -0
- package/dist/delivered-message.js.map +1 -0
- package/dist/dispatch.d.ts +108 -0
- package/dist/dispatch.d.ts.map +1 -0
- package/dist/dispatch.js +179 -0
- package/dist/dispatch.js.map +1 -0
- package/dist/error.d.ts +1 -1
- package/dist/error.d.ts.map +1 -1
- package/dist/error.js.map +1 -1
- package/dist/history.d.ts +49 -2
- package/dist/history.d.ts.map +1 -1
- package/dist/history.js +163 -0
- package/dist/history.js.map +1 -1
- package/dist/in-memory-submission-store.d.ts +53 -0
- package/dist/in-memory-submission-store.d.ts.map +1 -0
- package/dist/in-memory-submission-store.js +340 -0
- package/dist/in-memory-submission-store.js.map +1 -0
- package/dist/index.d.ts +51 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +28 -7
- package/dist/index.js.map +1 -1
- package/dist/loop.d.ts +29 -3
- package/dist/loop.d.ts.map +1 -1
- package/dist/loop.js +167 -24
- package/dist/loop.js.map +1 -1
- package/dist/model.d.ts +37 -0
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +250 -79
- package/dist/model.js.map +1 -1
- package/dist/otel-observer.d.ts +44 -0
- package/dist/otel-observer.d.ts.map +1 -0
- package/dist/otel-observer.js +165 -0
- package/dist/otel-observer.js.map +1 -0
- package/dist/persistence.d.ts +70 -0
- package/dist/persistence.d.ts.map +1 -0
- package/dist/persistence.js +17 -0
- package/dist/persistence.js.map +1 -0
- package/dist/persistent-agent.d.ts +86 -0
- package/dist/persistent-agent.d.ts.map +1 -0
- package/dist/persistent-agent.js +75 -0
- package/dist/persistent-agent.js.map +1 -0
- package/dist/pi-loop-runtime.d.ts.map +1 -1
- package/dist/pi-loop-runtime.js +7 -1
- package/dist/pi-loop-runtime.js.map +1 -1
- package/dist/profile.d.ts +33 -0
- package/dist/profile.d.ts.map +1 -0
- package/dist/profile.js +10 -0
- package/dist/profile.js.map +1 -0
- package/dist/providers.d.ts +14 -0
- package/dist/providers.d.ts.map +1 -1
- package/dist/providers.js +18 -1
- package/dist/providers.js.map +1 -1
- package/dist/result.d.ts +12 -0
- package/dist/result.d.ts.map +1 -1
- package/dist/result.js +26 -0
- package/dist/result.js.map +1 -1
- package/dist/retrieval.d.ts +61 -0
- package/dist/retrieval.d.ts.map +1 -0
- package/dist/retrieval.js +26 -0
- package/dist/retrieval.js.map +1 -0
- package/dist/runtime-mode.d.ts +1 -1
- package/dist/runtime-mode.d.ts.map +1 -1
- package/dist/runtime-mode.js +2 -1
- package/dist/runtime-mode.js.map +1 -1
- package/dist/scope-key.d.ts +25 -0
- package/dist/scope-key.d.ts.map +1 -0
- package/dist/scope-key.js +34 -0
- package/dist/scope-key.js.map +1 -0
- package/dist/session.d.ts +47 -1
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +364 -35
- package/dist/session.js.map +1 -1
- package/dist/skills.d.ts +33 -0
- package/dist/skills.d.ts.map +1 -0
- package/dist/skills.js +65 -0
- package/dist/skills.js.map +1 -0
- package/dist/store.d.ts +36 -1
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +83 -0
- package/dist/store.js.map +1 -1
- package/dist/stream-chunks.d.ts +42 -0
- package/dist/stream-chunks.d.ts.map +1 -0
- package/dist/stream-chunks.js +138 -0
- package/dist/stream-chunks.js.map +1 -0
- package/dist/strict.d.ts +40 -11
- package/dist/strict.d.ts.map +1 -1
- package/dist/strict.js +22 -7
- package/dist/strict.js.map +1 -1
- package/dist/submission-context.d.ts +26 -0
- package/dist/submission-context.d.ts.map +1 -0
- package/dist/submission-context.js +20 -0
- package/dist/submission-context.js.map +1 -0
- package/dist/submission-runner.d.ts +150 -0
- package/dist/submission-runner.d.ts.map +1 -0
- package/dist/submission-runner.js +767 -0
- package/dist/submission-runner.js.map +1 -0
- package/dist/submission-state.d.ts +50 -0
- package/dist/submission-state.d.ts.map +1 -0
- package/dist/submission-state.js +82 -0
- package/dist/submission-state.js.map +1 -0
- package/dist/submission-store-contract.d.ts +31 -0
- package/dist/submission-store-contract.d.ts.map +1 -0
- package/dist/submission-store-contract.js +730 -0
- package/dist/submission-store-contract.js.map +1 -0
- package/dist/submission-store.d.ts +365 -0
- package/dist/submission-store.d.ts.map +1 -0
- package/dist/submission-store.js +191 -0
- package/dist/submission-store.js.map +1 -0
- package/dist/submission-telemetry.d.ts +56 -0
- package/dist/submission-telemetry.d.ts.map +1 -0
- package/dist/submission-telemetry.js +36 -0
- package/dist/submission-telemetry.js.map +1 -0
- package/dist/testing-contracts.d.ts +17 -0
- package/dist/testing-contracts.d.ts.map +1 -0
- package/dist/testing-contracts.js +14 -0
- package/dist/testing-contracts.js.map +1 -0
- package/dist/tools.d.ts +32 -4
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +132 -6
- package/dist/tools.js.map +1 -1
- package/dist/types.d.ts +132 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +16 -8
package/dist/history.js
CHANGED
|
@@ -55,6 +55,38 @@ export class SessionHistory {
|
|
|
55
55
|
}
|
|
56
56
|
return path.reverse();
|
|
57
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* Rewind the active path to a specific entry. Used during interrupted-tool
|
|
60
|
+
* repair to branch from a prior entry when partial out-of-order results need
|
|
61
|
+
* to be replaced with a correctly ordered complete batch.
|
|
62
|
+
*/
|
|
63
|
+
setLeaf(entryId) {
|
|
64
|
+
if (!this.byId.has(entryId)) {
|
|
65
|
+
throw new Error(`Cannot set leaf: entry "${entryId}" does not exist.`);
|
|
66
|
+
}
|
|
67
|
+
this.leafId = entryId;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Active-path entries appended after `afterLeafId` (exclusive), in order.
|
|
71
|
+
*
|
|
72
|
+
* - `afterLeafId` is null/undefined means "from the start of the path" →
|
|
73
|
+
* returns the entire active path.
|
|
74
|
+
* - When the id is found, returns entries strictly after it.
|
|
75
|
+
* - When the id is *not* on the current active path (e.g. a branch switch
|
|
76
|
+
* happened mid-window), returns `[]`. Callers use this for bounded windowing
|
|
77
|
+
* — falling back to the full path would silently include unrelated history.
|
|
78
|
+
* An empty result is the safer answer for usage aggregation: zero is loud
|
|
79
|
+
* (sums won't match expectations) while full-history is silent overcounting.
|
|
80
|
+
*/
|
|
81
|
+
getActivePathSince(afterLeafId) {
|
|
82
|
+
const path = this.getActivePath();
|
|
83
|
+
if (afterLeafId == null)
|
|
84
|
+
return path;
|
|
85
|
+
const startIndex = path.findIndex((entry) => entry.id === afterLeafId);
|
|
86
|
+
if (startIndex === -1)
|
|
87
|
+
return [];
|
|
88
|
+
return path.slice(startIndex + 1);
|
|
89
|
+
}
|
|
58
90
|
getLatestCompaction() {
|
|
59
91
|
const path = this.getActivePath();
|
|
60
92
|
for (let index = path.length - 1; index >= 0; index -= 1) {
|
|
@@ -64,6 +96,10 @@ export class SessionHistory {
|
|
|
64
96
|
}
|
|
65
97
|
return undefined;
|
|
66
98
|
}
|
|
99
|
+
/** Trailing dangling tool calls on THIS history's active path. See {@link findTrailingDanglingToolCalls}. */
|
|
100
|
+
findTrailingDanglingToolCalls() {
|
|
101
|
+
return findTrailingDanglingToolCalls(this.getActivePath());
|
|
102
|
+
}
|
|
67
103
|
buildContextEntries() {
|
|
68
104
|
const path = this.getActivePath();
|
|
69
105
|
const compaction = this.getLatestCompaction();
|
|
@@ -118,6 +154,96 @@ export class SessionHistory {
|
|
|
118
154
|
export function buildModelMessagesFromHistory(data, role) {
|
|
119
155
|
return SessionHistory.fromData(data).buildModelMessages(role);
|
|
120
156
|
}
|
|
157
|
+
/**
|
|
158
|
+
* Entry types that end a turn's trailing tool window. A tool_call before any
|
|
159
|
+
* of these is either settled within the window or was abandoned by an
|
|
160
|
+
* interrupted turn.
|
|
161
|
+
*/
|
|
162
|
+
const TOOL_WINDOW_BOUNDARY_TYPES = new Set([
|
|
163
|
+
'user_prompt',
|
|
164
|
+
'user_message',
|
|
165
|
+
'assistant_message',
|
|
166
|
+
'result',
|
|
167
|
+
'compaction',
|
|
168
|
+
'signal',
|
|
169
|
+
'submission_settled',
|
|
170
|
+
]);
|
|
171
|
+
/**
|
|
172
|
+
* Find trailing `tool_call` entries on the active path that were never
|
|
173
|
+
* settled — no matching `tool_result` (paired by `toolCallId`, falling back
|
|
174
|
+
* to tool name) and no subsequent `error` entry for the same tool.
|
|
175
|
+
*
|
|
176
|
+
* A dangling call means a model turn died (crash/abort) between recording
|
|
177
|
+
* the call and recording its outcome. Left in place it produces an
|
|
178
|
+
* assistant `tool_use` with no `tool_result` on resume, which providers
|
|
179
|
+
* reject — the repair path appends synthetic interrupted outcomes for
|
|
180
|
+
* exactly the entries returned here.
|
|
181
|
+
*
|
|
182
|
+
* Conservative by construction: only the window after the last turn
|
|
183
|
+
* boundary (user prompt / assistant message / result / compaction / signal)
|
|
184
|
+
* is examined, so historical, already-settled turns are never re-judged.
|
|
185
|
+
* Both the resume-repair and the submission terminalization derive the
|
|
186
|
+
* dangling set through this single function so they can never disagree.
|
|
187
|
+
*/
|
|
188
|
+
export function findTrailingDanglingToolCalls(path) {
|
|
189
|
+
let windowStart = 0;
|
|
190
|
+
for (let index = path.length - 1; index >= 0; index -= 1) {
|
|
191
|
+
const entry = path[index];
|
|
192
|
+
if (entry && TOOL_WINDOW_BOUNDARY_TYPES.has(entry.type)) {
|
|
193
|
+
windowStart = index + 1;
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
const window = path.slice(windowStart);
|
|
198
|
+
const dangling = [];
|
|
199
|
+
for (let index = 0; index < window.length; index += 1) {
|
|
200
|
+
const entry = window[index];
|
|
201
|
+
if (!entry || entry.type !== 'tool_call')
|
|
202
|
+
continue;
|
|
203
|
+
const callId = typeof entry.data?.toolCallId === 'string' ? entry.data.toolCallId : undefined;
|
|
204
|
+
const tool = typeof entry.data?.tool === 'string' ? entry.data.tool : undefined;
|
|
205
|
+
const settled = window.slice(index + 1).some((later) => {
|
|
206
|
+
if (later.type === 'tool_result') {
|
|
207
|
+
const laterId = typeof later.data?.toolCallId === 'string' ? later.data.toolCallId : undefined;
|
|
208
|
+
if (callId && laterId)
|
|
209
|
+
return laterId === callId;
|
|
210
|
+
return typeof later.data?.tool === 'string' && later.data.tool === tool;
|
|
211
|
+
}
|
|
212
|
+
// Tool failures and unavailable/denied tools record an `error` entry
|
|
213
|
+
// (no toolCallId) instead of a tool_result.
|
|
214
|
+
if (later.type === 'error') {
|
|
215
|
+
return typeof later.data?.tool === 'string' && later.data.tool === tool;
|
|
216
|
+
}
|
|
217
|
+
return false;
|
|
218
|
+
});
|
|
219
|
+
if (!settled)
|
|
220
|
+
dangling.push(entry);
|
|
221
|
+
}
|
|
222
|
+
return dangling;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Trailing `task_start` entries in the same window with no matching
|
|
226
|
+
* `task_end` — a subtask that was in flight when the turn died. These do not
|
|
227
|
+
* corrupt model context (task entries are bookkeeping), but settling them
|
|
228
|
+
* keeps UI/audit state coherent.
|
|
229
|
+
*/
|
|
230
|
+
export function findTrailingUnfinishedTasks(path) {
|
|
231
|
+
let windowStart = 0;
|
|
232
|
+
for (let index = path.length - 1; index >= 0; index -= 1) {
|
|
233
|
+
const entry = path[index];
|
|
234
|
+
if (entry && TOOL_WINDOW_BOUNDARY_TYPES.has(entry.type)) {
|
|
235
|
+
windowStart = index + 1;
|
|
236
|
+
break;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
const window = path.slice(windowStart);
|
|
240
|
+
const ended = new Set(window
|
|
241
|
+
.filter((entry) => entry.type === 'task_end')
|
|
242
|
+
.map((entry) => (typeof entry.data?.taskId === 'string' ? entry.data.taskId : '')));
|
|
243
|
+
return window.filter((entry) => entry.type === 'task_start' &&
|
|
244
|
+
typeof entry.data?.taskId === 'string' &&
|
|
245
|
+
!ended.has(entry.data.taskId));
|
|
246
|
+
}
|
|
121
247
|
function entryToModelMessage(entry) {
|
|
122
248
|
switch (entry.type) {
|
|
123
249
|
case 'compaction': {
|
|
@@ -142,6 +268,24 @@ function entryToModelMessage(entry) {
|
|
|
142
268
|
const toolCallId = typeof entry.data?.toolCallId === 'string' ? entry.data.toolCallId : undefined;
|
|
143
269
|
return { role: 'tool', name: tool, content: JSON.stringify(output ?? null), ...(toolCallId ? { toolCallId } : {}) };
|
|
144
270
|
}
|
|
271
|
+
case 'signal': {
|
|
272
|
+
const data = entry.data;
|
|
273
|
+
if (!data)
|
|
274
|
+
return undefined;
|
|
275
|
+
return { role: 'user', content: renderSignalMessage(data) };
|
|
276
|
+
}
|
|
277
|
+
case 'shell_command': {
|
|
278
|
+
const cmd = typeof entry.data?.command === 'string' ? entry.data.command : undefined;
|
|
279
|
+
return cmd ? { role: 'user', content: `Run shell command: ${cmd}` } : undefined;
|
|
280
|
+
}
|
|
281
|
+
case 'shell_result': {
|
|
282
|
+
const output = {
|
|
283
|
+
exitCode: entry.data?.exitCode,
|
|
284
|
+
stdout: entry.data?.stdout,
|
|
285
|
+
stderr: entry.data?.stderr,
|
|
286
|
+
};
|
|
287
|
+
return { role: 'tool', name: 'bash', content: JSON.stringify(output) };
|
|
288
|
+
}
|
|
145
289
|
case 'error': {
|
|
146
290
|
const error = typeof entry.data?.error === 'string' ? entry.data.error : undefined;
|
|
147
291
|
return error ? { role: 'user', content: `[Error]\n\n${error}` } : undefined;
|
|
@@ -150,4 +294,23 @@ function entryToModelMessage(entry) {
|
|
|
150
294
|
return undefined;
|
|
151
295
|
}
|
|
152
296
|
}
|
|
297
|
+
export function renderSignalMessage(data) {
|
|
298
|
+
const tagName = data.tagName ?? 'signal';
|
|
299
|
+
const attributes = [['type', data.signalType]];
|
|
300
|
+
if (data.attributes) {
|
|
301
|
+
for (const [key, value] of Object.entries(data.attributes)) {
|
|
302
|
+
attributes.push([key, value]);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
const attrStr = attributes
|
|
306
|
+
.map(([name, value]) => ` ${escapeXmlAttribute(name)}="${escapeXmlAttribute(value)}"`)
|
|
307
|
+
.join('');
|
|
308
|
+
return `<${tagName}${attrStr}>\n${escapeXmlText(data.content)}\n</${tagName}>`;
|
|
309
|
+
}
|
|
310
|
+
function escapeXmlText(value) {
|
|
311
|
+
return value.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>');
|
|
312
|
+
}
|
|
313
|
+
function escapeXmlAttribute(value) {
|
|
314
|
+
return escapeXmlText(value).replaceAll('"', '"');
|
|
315
|
+
}
|
|
153
316
|
//# sourceMappingURL=history.js.map
|
package/dist/history.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history.js","sourceRoot":"","sources":["../src/history.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"history.js","sourceRoot":"","sources":["../src/history.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory reference implementation of {@link AgentSubmissionStore}.
|
|
3
|
+
*
|
|
4
|
+
* Suitable for the inline runtime, dev, and tests. Single-threaded JS makes
|
|
5
|
+
* every compare-and-set trivially atomic, but the observable gating
|
|
6
|
+
* conditions — runnable-head FIFO per session, owner checks, first-terminal-
|
|
7
|
+
* wins, idempotent admission with payload-conflict detection — match the
|
|
8
|
+
* durable backends exactly so the contract suite passes unchanged.
|
|
9
|
+
*/
|
|
10
|
+
import type { AgentAttemptMarker, AgentDispatchAdmission, AgentSubmission, AgentSubmissionInput, AgentSubmissionStore, SubmissionAttemptRef, SubmissionClaimRef, AgentSubmissionDurability, SubmissionSettledRecord, SubmissionSettlementObligation } from './submission-store.js';
|
|
11
|
+
import type { DispatchInput } from './dispatch.js';
|
|
12
|
+
export declare class InMemorySubmissionStore implements AgentSubmissionStore {
|
|
13
|
+
private nextSequence;
|
|
14
|
+
private readonly submissions;
|
|
15
|
+
private readonly dispatchReceipts;
|
|
16
|
+
private readonly attemptMarkers;
|
|
17
|
+
private readonly obligations;
|
|
18
|
+
getSubmission(submissionId: string): Promise<AgentSubmission | null>;
|
|
19
|
+
hasUnsettledSubmissions(): Promise<boolean>;
|
|
20
|
+
listRunnableSubmissions(): Promise<AgentSubmission[]>;
|
|
21
|
+
listUnreadySubmissions(): Promise<AgentSubmission[]>;
|
|
22
|
+
listRunningSubmissions(): Promise<AgentSubmission[]>;
|
|
23
|
+
listPendingSubmissionSettlements(): Promise<SubmissionSettlementObligation[]>;
|
|
24
|
+
replaceSubmissionAttempt(attempt: SubmissionAttemptRef, nextAttemptId: string, lease?: {
|
|
25
|
+
ownerId: string;
|
|
26
|
+
leaseExpiresAt: number;
|
|
27
|
+
}): Promise<AgentSubmission | null>;
|
|
28
|
+
admitDispatch(input: DispatchInput): Promise<AgentDispatchAdmission>;
|
|
29
|
+
admitDirect(input: AgentSubmissionInput): Promise<AgentSubmission>;
|
|
30
|
+
markSubmissionCanonicalReady(submissionId: string): Promise<AgentSubmission | null>;
|
|
31
|
+
claimSubmission(claim: SubmissionClaimRef): Promise<AgentSubmission | null>;
|
|
32
|
+
markSubmissionInputApplied(attempt: SubmissionAttemptRef, durability?: AgentSubmissionDurability): Promise<boolean>;
|
|
33
|
+
requestSubmissionRecovery(attempt: SubmissionAttemptRef): Promise<boolean>;
|
|
34
|
+
requestSessionAbort(storeSessionId: string): Promise<string[]>;
|
|
35
|
+
requeueSubmissionBeforeInputApplied(attempt: SubmissionAttemptRef): Promise<boolean>;
|
|
36
|
+
reserveSubmissionSettlement(attempt: SubmissionAttemptRef, settlement: {
|
|
37
|
+
recordId: string;
|
|
38
|
+
record: SubmissionSettledRecord;
|
|
39
|
+
}): Promise<SubmissionSettlementObligation | null>;
|
|
40
|
+
finalizeSubmissionSettlement(attempt: SubmissionAttemptRef, recordId: string): Promise<boolean>;
|
|
41
|
+
completeSubmission(attempt: SubmissionAttemptRef): Promise<boolean>;
|
|
42
|
+
failSubmission(attempt: SubmissionAttemptRef, error: unknown): Promise<boolean>;
|
|
43
|
+
insertAttemptMarker(attempt: SubmissionAttemptRef): Promise<void>;
|
|
44
|
+
deleteAttemptMarker(attempt: SubmissionAttemptRef): Promise<void>;
|
|
45
|
+
listAttemptMarkers(): Promise<AgentAttemptMarker[]>;
|
|
46
|
+
renewLeases(ownerId: string, submissionIds: string[]): Promise<void>;
|
|
47
|
+
listExpiredSubmissions(): Promise<AgentSubmission[]>;
|
|
48
|
+
private admitSubmission;
|
|
49
|
+
private ordered;
|
|
50
|
+
private hasEarlierUnsettled;
|
|
51
|
+
private ownedRunning;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=in-memory-submission-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-memory-submission-store.d.ts","sourceRoot":"","sources":["../src/in-memory-submission-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory reference implementation of {@link AgentSubmissionStore}.
|
|
3
|
+
*
|
|
4
|
+
* Suitable for the inline runtime, dev, and tests. Single-threaded JS makes
|
|
5
|
+
* every compare-and-set trivially atomic, but the observable gating
|
|
6
|
+
* conditions — runnable-head FIFO per session, owner checks, first-terminal-
|
|
7
|
+
* wins, idempotent admission with payload-conflict detection — match the
|
|
8
|
+
* durable backends exactly so the contract suite passes unchanged.
|
|
9
|
+
*/
|
|
10
|
+
import { admitSubmissionWithBackend, createDispatchAgentSubmissionInput, DURABILITY_DEFAULT_MAX_ATTEMPTS, DURABILITY_DEFAULT_TIMEOUT_MS, LEASE_DURATION_MS, } from './submission-store.js';
|
|
11
|
+
const UNSETTLED = ['queued', 'running', 'terminalizing'];
|
|
12
|
+
export class InMemorySubmissionStore {
|
|
13
|
+
nextSequence = 1;
|
|
14
|
+
submissions = new Map();
|
|
15
|
+
dispatchReceipts = new Map();
|
|
16
|
+
attemptMarkers = new Map();
|
|
17
|
+
obligations = new Map();
|
|
18
|
+
// ── Query ────────────────────────────────────────────────────────────
|
|
19
|
+
async getSubmission(submissionId) {
|
|
20
|
+
const row = this.submissions.get(submissionId);
|
|
21
|
+
return row ? parseStoredSubmission(row) : null;
|
|
22
|
+
}
|
|
23
|
+
async hasUnsettledSubmissions() {
|
|
24
|
+
for (const row of this.submissions.values()) {
|
|
25
|
+
if (UNSETTLED.includes(row.status))
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
async listRunnableSubmissions() {
|
|
31
|
+
return this.ordered()
|
|
32
|
+
.filter((row) => row.status === 'queued' &&
|
|
33
|
+
row.canonicalReadyAt !== null &&
|
|
34
|
+
!this.hasEarlierUnsettled(row))
|
|
35
|
+
.map(parseStoredSubmission);
|
|
36
|
+
}
|
|
37
|
+
async listUnreadySubmissions() {
|
|
38
|
+
return this.ordered()
|
|
39
|
+
.filter((row) => row.status === 'queued' && row.canonicalReadyAt === null)
|
|
40
|
+
.map(parseStoredSubmission);
|
|
41
|
+
}
|
|
42
|
+
async listRunningSubmissions() {
|
|
43
|
+
return this.ordered()
|
|
44
|
+
.filter((row) => row.status === 'running')
|
|
45
|
+
.map(parseStoredSubmission);
|
|
46
|
+
}
|
|
47
|
+
async listPendingSubmissionSettlements() {
|
|
48
|
+
return this.ordered()
|
|
49
|
+
.filter((row) => row.status === 'terminalizing')
|
|
50
|
+
.map((row) => {
|
|
51
|
+
const obligation = this.obligations.get(row.submissionId);
|
|
52
|
+
if (!obligation) {
|
|
53
|
+
throw new Error('[fabric-harness] Terminalizing submission is missing its settlement obligation.');
|
|
54
|
+
}
|
|
55
|
+
return parseObligation(obligation);
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
async replaceSubmissionAttempt(attempt, nextAttemptId, lease) {
|
|
59
|
+
const row = this.ownedRunning(attempt);
|
|
60
|
+
if (!row)
|
|
61
|
+
return null;
|
|
62
|
+
row.attemptId = nextAttemptId;
|
|
63
|
+
row.recoveryRequestedAt = undefined;
|
|
64
|
+
row.startedAt = Date.now();
|
|
65
|
+
row.attemptCount += 1;
|
|
66
|
+
if (lease) {
|
|
67
|
+
row.ownerId = lease.ownerId;
|
|
68
|
+
row.leaseExpiresAt = lease.leaseExpiresAt;
|
|
69
|
+
}
|
|
70
|
+
return parseStoredSubmission(row);
|
|
71
|
+
}
|
|
72
|
+
// ── Admission ────────────────────────────────────────────────────────
|
|
73
|
+
async admitDispatch(input) {
|
|
74
|
+
return this.admitSubmission(createDispatchAgentSubmissionInput(input));
|
|
75
|
+
}
|
|
76
|
+
async admitDirect(input) {
|
|
77
|
+
const admission = this.admitSubmission(input);
|
|
78
|
+
if (admission.kind !== 'submission') {
|
|
79
|
+
throw new Error('[fabric-harness] Internal direct admission returned an unexpected result.');
|
|
80
|
+
}
|
|
81
|
+
return admission.submission;
|
|
82
|
+
}
|
|
83
|
+
async markSubmissionCanonicalReady(submissionId) {
|
|
84
|
+
const row = this.submissions.get(submissionId);
|
|
85
|
+
if (!row || row.status !== 'queued')
|
|
86
|
+
return null;
|
|
87
|
+
row.canonicalReadyAt = row.canonicalReadyAt ?? Date.now();
|
|
88
|
+
return parseStoredSubmission(row);
|
|
89
|
+
}
|
|
90
|
+
// ── Submission lifecycle ─────────────────────────────────────────────
|
|
91
|
+
async claimSubmission(claim) {
|
|
92
|
+
const row = this.submissions.get(claim.submissionId);
|
|
93
|
+
if (!row ||
|
|
94
|
+
row.status !== 'queued' ||
|
|
95
|
+
row.canonicalReadyAt === null ||
|
|
96
|
+
this.hasEarlierUnsettled(row)) {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
const now = Date.now();
|
|
100
|
+
row.status = 'running';
|
|
101
|
+
row.attemptId = claim.attemptId;
|
|
102
|
+
row.startedAt = now;
|
|
103
|
+
row.attemptCount += 1;
|
|
104
|
+
row.maxRetry = DURABILITY_DEFAULT_MAX_ATTEMPTS;
|
|
105
|
+
if (row.timeoutAt === 0)
|
|
106
|
+
row.timeoutAt = now + DURABILITY_DEFAULT_TIMEOUT_MS;
|
|
107
|
+
row.ownerId = claim.ownerId;
|
|
108
|
+
row.leaseExpiresAt = claim.leaseExpiresAt;
|
|
109
|
+
return parseStoredSubmission(row);
|
|
110
|
+
}
|
|
111
|
+
async markSubmissionInputApplied(attempt, durability) {
|
|
112
|
+
const row = this.ownedRunning(attempt);
|
|
113
|
+
if (!row)
|
|
114
|
+
return false;
|
|
115
|
+
if (row.inputAppliedAt === undefined) {
|
|
116
|
+
const now = Date.now();
|
|
117
|
+
row.inputAppliedAt = now;
|
|
118
|
+
row.maxRetry = durability?.maxRetry ?? DURABILITY_DEFAULT_MAX_ATTEMPTS;
|
|
119
|
+
row.timeoutAt = durability?.timeoutAt ?? now + DURABILITY_DEFAULT_TIMEOUT_MS;
|
|
120
|
+
}
|
|
121
|
+
return true;
|
|
122
|
+
}
|
|
123
|
+
async requestSubmissionRecovery(attempt) {
|
|
124
|
+
const row = this.ownedRunning(attempt);
|
|
125
|
+
if (!row)
|
|
126
|
+
return false;
|
|
127
|
+
row.recoveryRequestedAt = row.recoveryRequestedAt ?? Date.now();
|
|
128
|
+
return true;
|
|
129
|
+
}
|
|
130
|
+
async requestSessionAbort(storeSessionId) {
|
|
131
|
+
const now = Date.now();
|
|
132
|
+
const affected = [];
|
|
133
|
+
for (const row of this.ordered()) {
|
|
134
|
+
if (row.storeSessionId !== storeSessionId)
|
|
135
|
+
continue;
|
|
136
|
+
if (row.status !== 'queued' && row.status !== 'running')
|
|
137
|
+
continue;
|
|
138
|
+
row.abortRequestedAt = row.abortRequestedAt ?? now;
|
|
139
|
+
affected.push(row.submissionId);
|
|
140
|
+
}
|
|
141
|
+
return affected;
|
|
142
|
+
}
|
|
143
|
+
async requeueSubmissionBeforeInputApplied(attempt) {
|
|
144
|
+
const row = this.ownedRunning(attempt);
|
|
145
|
+
if (!row || row.inputAppliedAt !== undefined)
|
|
146
|
+
return false;
|
|
147
|
+
row.status = 'queued';
|
|
148
|
+
row.attemptId = undefined;
|
|
149
|
+
row.recoveryRequestedAt = undefined;
|
|
150
|
+
row.startedAt = undefined;
|
|
151
|
+
row.ownerId = undefined;
|
|
152
|
+
row.leaseExpiresAt = 0;
|
|
153
|
+
return true;
|
|
154
|
+
}
|
|
155
|
+
async reserveSubmissionSettlement(attempt, settlement) {
|
|
156
|
+
if (settlement.record.submissionId !== attempt.submissionId)
|
|
157
|
+
return null;
|
|
158
|
+
const recordJson = JSON.stringify(settlement.record);
|
|
159
|
+
const row = this.submissions.get(attempt.submissionId);
|
|
160
|
+
if (!row || row.kind !== 'direct')
|
|
161
|
+
return null;
|
|
162
|
+
if (row.status === 'running' && row.attemptId === attempt.attemptId) {
|
|
163
|
+
row.status = 'terminalizing';
|
|
164
|
+
const obligation = {
|
|
165
|
+
submissionId: row.submissionId,
|
|
166
|
+
storeSessionId: row.storeSessionId,
|
|
167
|
+
attemptId: attempt.attemptId,
|
|
168
|
+
recordId: settlement.recordId,
|
|
169
|
+
recordJson,
|
|
170
|
+
};
|
|
171
|
+
this.obligations.set(row.submissionId, obligation);
|
|
172
|
+
return parseObligation(obligation);
|
|
173
|
+
}
|
|
174
|
+
if (row.status === 'terminalizing' && row.attemptId === attempt.attemptId) {
|
|
175
|
+
const existing = this.obligations.get(row.submissionId);
|
|
176
|
+
if (existing &&
|
|
177
|
+
existing.attemptId === attempt.attemptId &&
|
|
178
|
+
existing.recordId === settlement.recordId &&
|
|
179
|
+
existing.recordJson === recordJson) {
|
|
180
|
+
return parseObligation(existing);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return null;
|
|
184
|
+
}
|
|
185
|
+
async finalizeSubmissionSettlement(attempt, recordId) {
|
|
186
|
+
const row = this.submissions.get(attempt.submissionId);
|
|
187
|
+
if (!row || row.status !== 'terminalizing' || row.attemptId !== attempt.attemptId)
|
|
188
|
+
return false;
|
|
189
|
+
const obligation = this.obligations.get(attempt.submissionId);
|
|
190
|
+
if (!obligation || obligation.recordId !== recordId)
|
|
191
|
+
return false;
|
|
192
|
+
row.status = 'settled';
|
|
193
|
+
row.settledAt = Date.now();
|
|
194
|
+
row.error = undefined;
|
|
195
|
+
this.obligations.delete(attempt.submissionId);
|
|
196
|
+
return true;
|
|
197
|
+
}
|
|
198
|
+
async completeSubmission(attempt) {
|
|
199
|
+
const row = this.ownedRunning(attempt);
|
|
200
|
+
if (!row)
|
|
201
|
+
return false;
|
|
202
|
+
row.status = 'settled';
|
|
203
|
+
row.settledAt = Date.now();
|
|
204
|
+
row.error = undefined;
|
|
205
|
+
return true;
|
|
206
|
+
}
|
|
207
|
+
async failSubmission(attempt, error) {
|
|
208
|
+
const row = this.ownedRunning(attempt);
|
|
209
|
+
if (!row)
|
|
210
|
+
return false;
|
|
211
|
+
row.status = 'settled';
|
|
212
|
+
row.settledAt = Date.now();
|
|
213
|
+
row.error = error instanceof Error ? error.message : String(error);
|
|
214
|
+
return true;
|
|
215
|
+
}
|
|
216
|
+
// ── Attempt markers ──────────────────────────────────────────────────
|
|
217
|
+
async insertAttemptMarker(attempt) {
|
|
218
|
+
const key = markerKey(attempt);
|
|
219
|
+
if (this.attemptMarkers.has(key))
|
|
220
|
+
return;
|
|
221
|
+
this.attemptMarkers.set(key, {
|
|
222
|
+
submissionId: attempt.submissionId,
|
|
223
|
+
attemptId: attempt.attemptId,
|
|
224
|
+
createdAt: Date.now(),
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
async deleteAttemptMarker(attempt) {
|
|
228
|
+
this.attemptMarkers.delete(markerKey(attempt));
|
|
229
|
+
}
|
|
230
|
+
async listAttemptMarkers() {
|
|
231
|
+
return [...this.attemptMarkers.values()];
|
|
232
|
+
}
|
|
233
|
+
// ── Lease management ─────────────────────────────────────────────────
|
|
234
|
+
async renewLeases(ownerId, submissionIds) {
|
|
235
|
+
if (submissionIds.length === 0)
|
|
236
|
+
return;
|
|
237
|
+
const leaseExpiresAt = Date.now() + LEASE_DURATION_MS;
|
|
238
|
+
for (const submissionId of submissionIds) {
|
|
239
|
+
const row = this.submissions.get(submissionId);
|
|
240
|
+
if (row && row.status === 'running' && row.ownerId === ownerId) {
|
|
241
|
+
row.leaseExpiresAt = leaseExpiresAt;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
async listExpiredSubmissions() {
|
|
246
|
+
const now = Date.now();
|
|
247
|
+
return this.ordered()
|
|
248
|
+
.filter((row) => row.status === 'running' && row.leaseExpiresAt > 0 && row.leaseExpiresAt < now)
|
|
249
|
+
.map(parseStoredSubmission);
|
|
250
|
+
}
|
|
251
|
+
// ── Private ──────────────────────────────────────────────────────────
|
|
252
|
+
admitSubmission(input) {
|
|
253
|
+
const admission = admitSubmissionWithBackend(input, {
|
|
254
|
+
getDispatchReceipt: (submissionId) => this.dispatchReceipts.get(submissionId) ?? null,
|
|
255
|
+
insertIfAbsent: (row) => {
|
|
256
|
+
if (this.submissions.has(row.submissionId))
|
|
257
|
+
return;
|
|
258
|
+
this.submissions.set(row.submissionId, {
|
|
259
|
+
sequence: this.nextSequence++,
|
|
260
|
+
submissionId: row.submissionId,
|
|
261
|
+
storeSessionId: row.storeSessionId,
|
|
262
|
+
kind: row.kind,
|
|
263
|
+
payload: row.payload,
|
|
264
|
+
status: 'queued',
|
|
265
|
+
acceptedAt: row.acceptedAt,
|
|
266
|
+
canonicalReadyAt: null,
|
|
267
|
+
attemptCount: 0,
|
|
268
|
+
maxRetry: DURABILITY_DEFAULT_MAX_ATTEMPTS,
|
|
269
|
+
timeoutAt: 0,
|
|
270
|
+
leaseExpiresAt: 0,
|
|
271
|
+
});
|
|
272
|
+
},
|
|
273
|
+
getExisting: (submissionId) => this.submissions.get(submissionId),
|
|
274
|
+
parseSubmission: parseStoredSubmission,
|
|
275
|
+
});
|
|
276
|
+
// Unreachable: every backend callback above is synchronous, so the shared
|
|
277
|
+
// algorithm completes synchronously.
|
|
278
|
+
if (admission instanceof Promise) {
|
|
279
|
+
throw new Error('[fabric-harness] Internal in-memory admission backend must be synchronous.');
|
|
280
|
+
}
|
|
281
|
+
return admission;
|
|
282
|
+
}
|
|
283
|
+
ordered() {
|
|
284
|
+
return [...this.submissions.values()].sort((a, b) => a.sequence - b.sequence);
|
|
285
|
+
}
|
|
286
|
+
hasEarlierUnsettled(row) {
|
|
287
|
+
for (const candidate of this.submissions.values()) {
|
|
288
|
+
if (candidate.storeSessionId === row.storeSessionId &&
|
|
289
|
+
candidate.sequence < row.sequence &&
|
|
290
|
+
UNSETTLED.includes(candidate.status)) {
|
|
291
|
+
return true;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
return false;
|
|
295
|
+
}
|
|
296
|
+
ownedRunning(attempt) {
|
|
297
|
+
const row = this.submissions.get(attempt.submissionId);
|
|
298
|
+
if (!row || row.status !== 'running' || row.attemptId !== attempt.attemptId)
|
|
299
|
+
return undefined;
|
|
300
|
+
return row;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
function markerKey(attempt) {
|
|
304
|
+
return `${attempt.submissionId}${attempt.attemptId}`;
|
|
305
|
+
}
|
|
306
|
+
function parseObligation(obligation) {
|
|
307
|
+
return {
|
|
308
|
+
submissionId: obligation.submissionId,
|
|
309
|
+
storeSessionId: obligation.storeSessionId,
|
|
310
|
+
attemptId: obligation.attemptId,
|
|
311
|
+
recordId: obligation.recordId,
|
|
312
|
+
record: JSON.parse(obligation.recordJson),
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
function parseStoredSubmission(row) {
|
|
316
|
+
return {
|
|
317
|
+
sequence: row.sequence,
|
|
318
|
+
submissionId: row.submissionId,
|
|
319
|
+
storeSessionId: row.storeSessionId,
|
|
320
|
+
kind: row.kind,
|
|
321
|
+
input: JSON.parse(row.payload),
|
|
322
|
+
status: row.status,
|
|
323
|
+
acceptedAt: row.acceptedAt,
|
|
324
|
+
canonicalReadyAt: row.canonicalReadyAt,
|
|
325
|
+
...(row.attemptId !== undefined ? { attemptId: row.attemptId } : {}),
|
|
326
|
+
...(row.inputAppliedAt !== undefined ? { inputAppliedAt: row.inputAppliedAt } : {}),
|
|
327
|
+
...(row.recoveryRequestedAt !== undefined
|
|
328
|
+
? { recoveryRequestedAt: row.recoveryRequestedAt }
|
|
329
|
+
: {}),
|
|
330
|
+
...(row.abortRequestedAt !== undefined ? { abortRequestedAt: row.abortRequestedAt } : {}),
|
|
331
|
+
...(row.startedAt !== undefined ? { startedAt: row.startedAt } : {}),
|
|
332
|
+
...(row.error !== undefined ? { error: row.error } : {}),
|
|
333
|
+
attemptCount: row.attemptCount,
|
|
334
|
+
maxRetry: row.maxRetry,
|
|
335
|
+
timeoutAt: row.timeoutAt,
|
|
336
|
+
...(row.ownerId !== undefined ? { ownerId: row.ownerId } : {}),
|
|
337
|
+
leaseExpiresAt: row.leaseExpiresAt,
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
//# sourceMappingURL=in-memory-submission-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-memory-submission-store.js","sourceRoot":"","sources":["../src/in-memory-submission-store.ts"],"names":[],"mappings":"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"}
|