@fabric-harness/sdk 1.14.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/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 +8 -1
- package/dist/channel.d.ts.map +1 -1
- package/dist/channel.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/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 +16 -3
- package/dist/dispatch.d.ts.map +1 -1
- package/dist/dispatch.js +5 -1
- package/dist/dispatch.js.map +1 -1
- package/dist/history.d.ts +27 -0
- package/dist/history.d.ts.map +1 -1
- package/dist/history.js +94 -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 +24 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -2
- package/dist/index.js.map +1 -1
- package/dist/persistent-agent.d.ts +6 -0
- package/dist/persistent-agent.d.ts.map +1 -1
- package/dist/persistent-agent.js +6 -0
- package/dist/persistent-agent.js.map +1 -1
- package/dist/session.d.ts +13 -0
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +78 -2
- package/dist/session.js.map +1 -1
- package/dist/strict.d.ts +24 -3
- package/dist/strict.d.ts.map +1 -1
- package/dist/strict.js +13 -2
- 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/types.d.ts +28 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +5 -1
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Durable submission runner (v2 migration, phase A5).
|
|
3
|
+
*
|
|
4
|
+
* The execution engine over an {@link AgentSubmissionStore}: a claim loop
|
|
5
|
+
* that takes runnable session heads with lease-fenced CAS claims, an
|
|
6
|
+
* executor seam that applies the input to the instance session, and a
|
|
7
|
+
* reconciler that classifies interrupted work after a crash and produces
|
|
8
|
+
* exactly-once observable outcomes — completed work settles, repairable
|
|
9
|
+
* work resumes, unstarted work requeues, exhausted work fails with a
|
|
10
|
+
* terminal advisory. Ported from flue's node agent coordinator +
|
|
11
|
+
* `reconcileInterruptedSubmission`, adapted to the harness session model
|
|
12
|
+
* (SessionEntry DAG; `session.prompt({ submission })` is idempotent by
|
|
13
|
+
* submission id, so re-execution after a crash never double-applies input).
|
|
14
|
+
*/
|
|
15
|
+
import type { AgentDispatchAdmission, AgentSubmission, AgentSubmissionStore, SubmissionAttemptRef, SubmissionSettlementObligation } from './submission-store.js';
|
|
16
|
+
import type { AgentSubmissionInput, SubmissionSettledRecord } from './submission-store.js';
|
|
17
|
+
import type { AttachmentStore } from './attachment-store.js';
|
|
18
|
+
import type { DispatchInput, DispatchQueue } from './dispatch.js';
|
|
19
|
+
import type { SubmissionInspection } from './submission-state.js';
|
|
20
|
+
import type { SubmissionTelemetrySink } from './submission-telemetry.js';
|
|
21
|
+
export declare class SubmissionAbortedError extends Error {
|
|
22
|
+
readonly code = "SUBMISSION_ABORTED";
|
|
23
|
+
constructor();
|
|
24
|
+
}
|
|
25
|
+
export declare class SubmissionTimeoutError extends Error {
|
|
26
|
+
readonly code = "SUBMISSION_TIMEOUT";
|
|
27
|
+
constructor();
|
|
28
|
+
}
|
|
29
|
+
export declare class SubmissionRetryExhaustedError extends Error {
|
|
30
|
+
readonly code = "SUBMISSION_RETRY_EXHAUSTED";
|
|
31
|
+
readonly interruptedTools: InterruptedToolCallRef[] | undefined;
|
|
32
|
+
constructor(options: {
|
|
33
|
+
attemptCount: number;
|
|
34
|
+
maxAttempts: number;
|
|
35
|
+
interruptedTools?: InterruptedToolCallRef[];
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
export declare class SubmissionInterruptedError extends Error {
|
|
39
|
+
readonly code = "SUBMISSION_INTERRUPTED";
|
|
40
|
+
readonly phase: 'retry_exhausted_before_input' | 'after_input_application';
|
|
41
|
+
constructor(phase: SubmissionInterruptedError['phase'], detail?: string);
|
|
42
|
+
}
|
|
43
|
+
export interface SubmissionInterruption {
|
|
44
|
+
readonly submissionId: string;
|
|
45
|
+
readonly kind: 'dispatch' | 'direct';
|
|
46
|
+
readonly reason: 'interrupted_before_input_marker' | 'interrupted_after_input_application' | 'exhausted_retry_budget' | 'exceeded_timeout' | 'aborted';
|
|
47
|
+
readonly message: string;
|
|
48
|
+
}
|
|
49
|
+
/** A tool call settled with an explicit interrupted-outcome marker at terminalization. */
|
|
50
|
+
export interface InterruptedToolCallRef {
|
|
51
|
+
readonly name: string;
|
|
52
|
+
readonly id?: string;
|
|
53
|
+
}
|
|
54
|
+
export interface SubmissionExecuteOptions {
|
|
55
|
+
readonly attempt: SubmissionAttemptRef;
|
|
56
|
+
/** Aborted for graceful shutdown or a durable abort request. */
|
|
57
|
+
readonly signal: AbortSignal;
|
|
58
|
+
/**
|
|
59
|
+
* Must be invoked at the input-applied boundary (canonical input durable,
|
|
60
|
+
* no provider work started). Throws when the attempt lost ownership — the
|
|
61
|
+
* executor must let that abort the turn.
|
|
62
|
+
*/
|
|
63
|
+
readonly onInputApplied: () => Promise<void>;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* How the runner touches sessions. `execute` applies the submission's input
|
|
67
|
+
* to the addressed instance session and resolves with the turn result;
|
|
68
|
+
* everything else is store-level and must not require a live agent.
|
|
69
|
+
*
|
|
70
|
+
* Contract requirements:
|
|
71
|
+
* - `execute` must be idempotent by submission id (a resumed attempt whose
|
|
72
|
+
* input entry already exists must not append it again).
|
|
73
|
+
* - `recordTerminal` settles the conversation to a deterministic rest state
|
|
74
|
+
* (unresolved trailing tool calls get explicit interrupted-outcome
|
|
75
|
+
* markers — NEVER re-executed) and appends a terminal advisory.
|
|
76
|
+
* - `appendSettlement` appends the canonical `submission_settled` entry,
|
|
77
|
+
* idempotent by its deterministic record id.
|
|
78
|
+
*/
|
|
79
|
+
export interface SubmissionExecutor {
|
|
80
|
+
execute(submission: AgentSubmission, options: SubmissionExecuteOptions): Promise<unknown>;
|
|
81
|
+
inspect(submission: AgentSubmission): Promise<SubmissionInspection>;
|
|
82
|
+
recordTerminal(submission: AgentSubmission, interruption: SubmissionInterruption): Promise<InterruptedToolCallRef[]>;
|
|
83
|
+
appendSettlement(submission: AgentSubmission, obligation: SubmissionSettlementObligation): Promise<void>;
|
|
84
|
+
/** The canonical settlement record for the submission, when one exists. */
|
|
85
|
+
getSettlement(submission: AgentSubmission): Promise<SubmissionSettledRecord | null>;
|
|
86
|
+
}
|
|
87
|
+
export interface SubmissionSettlement {
|
|
88
|
+
readonly outcome: 'completed' | 'failed' | 'aborted';
|
|
89
|
+
readonly result?: unknown;
|
|
90
|
+
readonly error?: string;
|
|
91
|
+
}
|
|
92
|
+
export interface SubmissionRunnerOptions {
|
|
93
|
+
submissions: AgentSubmissionStore;
|
|
94
|
+
executor: SubmissionExecutor;
|
|
95
|
+
/** Validate an admission target before persisting it (e.g. agent exists). */
|
|
96
|
+
validateInput?: (input: AgentSubmissionInput) => Promise<void> | void;
|
|
97
|
+
/**
|
|
98
|
+
* Durable content-addressed attachment storage. When configured, inline
|
|
99
|
+
* base64 attachments are materialized into refs BEFORE admission so the
|
|
100
|
+
* persisted submission payload never carries the bytes. Materialization is
|
|
101
|
+
* deterministic (ids from the submission/dispatch id + index, digests from
|
|
102
|
+
* content), preserving admission idempotency for exact redeliveries.
|
|
103
|
+
*/
|
|
104
|
+
attachments?: {
|
|
105
|
+
store: AttachmentStore;
|
|
106
|
+
};
|
|
107
|
+
/**
|
|
108
|
+
* Lifecycle telemetry sink (v2 C4): one event per submission transition
|
|
109
|
+
* (accepted / started / settled), keyed by the stable submission id.
|
|
110
|
+
* Failures are reported through `onError` and never affect execution.
|
|
111
|
+
*/
|
|
112
|
+
telemetry?: SubmissionTelemetrySink;
|
|
113
|
+
onSettled?: (submissionId: string, settlement: SubmissionSettlement) => void;
|
|
114
|
+
onError?: (context: string, error: unknown) => void;
|
|
115
|
+
/** Lease renewal cadence for active submissions. Default 10s. */
|
|
116
|
+
heartbeatIntervalMs?: number;
|
|
117
|
+
/** Expired-lease discovery cadence. Default 15s. */
|
|
118
|
+
leaseScanIntervalMs?: number;
|
|
119
|
+
}
|
|
120
|
+
export interface SubmissionRunner {
|
|
121
|
+
/** Durable dispatch admission; processing is asynchronous. */
|
|
122
|
+
admitDispatch(input: DispatchInput): Promise<AgentDispatchAdmission>;
|
|
123
|
+
/** Durable direct-prompt admission; processing is asynchronous. */
|
|
124
|
+
admitDirect(input: AgentSubmissionInput): Promise<AgentSubmission>;
|
|
125
|
+
/**
|
|
126
|
+
* Record a durable abort request for every unsettled submission of the
|
|
127
|
+
* session and abort any attempt running in this process. Returns the
|
|
128
|
+
* affected submission ids (empty when the session was idle).
|
|
129
|
+
*/
|
|
130
|
+
requestAbort(storeSessionId: string): Promise<string[]>;
|
|
131
|
+
/** Reconcile interrupted work from a previous process; call once at startup. */
|
|
132
|
+
reconcile(): Promise<void>;
|
|
133
|
+
/** Resolve when the submission settles, with its outcome. */
|
|
134
|
+
waitForSettlement(submissionId: string, options?: {
|
|
135
|
+
pollIntervalMs?: number;
|
|
136
|
+
signal?: AbortSignal;
|
|
137
|
+
}): Promise<SubmissionSettlement>;
|
|
138
|
+
/** Resolve when no active or runnable work remains. */
|
|
139
|
+
waitForIdle(): Promise<void>;
|
|
140
|
+
/** Stop claiming, abort active work at the turn boundary, wait (with timeout). */
|
|
141
|
+
shutdown(timeoutMs?: number): Promise<void>;
|
|
142
|
+
/** Wake the claim loop (new work may be runnable). */
|
|
143
|
+
wake(): void;
|
|
144
|
+
/** A DispatchQueue façade over durable admission. */
|
|
145
|
+
createDispatchQueue(): DispatchQueue;
|
|
146
|
+
}
|
|
147
|
+
export declare function createSubmissionRunner(options: SubmissionRunnerOptions): SubmissionRunner;
|
|
148
|
+
/** Store-session FIFO key of a submission (re-exported convenience). */
|
|
149
|
+
export declare function submissionSessionKey(input: Pick<AgentSubmissionInput, 'agent' | 'id' | 'session'>): string;
|
|
150
|
+
//# sourceMappingURL=submission-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submission-runner.d.ts","sourceRoot":"","sources":["../src/submission-runner.ts"],"names":[],"mappings":"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"}
|