@fabric-harness/sdk 1.12.2 → 1.14.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/agent-definition.d.ts +6 -0
- package/dist/agent-definition.d.ts.map +1 -1
- package/dist/agent-definition.js +5 -4
- package/dist/agent-definition.js.map +1 -1
- package/dist/agent.d.ts +6 -0
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +45 -1
- package/dist/agent.js.map +1 -1
- package/dist/channel.d.ts +77 -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/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/dispatch.d.ts +95 -0
- package/dist/dispatch.d.ts.map +1 -0
- package/dist/dispatch.js +175 -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/filesystem.d.ts +52 -0
- package/dist/filesystem.d.ts.map +1 -0
- package/dist/filesystem.js +24 -0
- package/dist/filesystem.js.map +1 -0
- package/dist/history.d.ts +22 -2
- package/dist/history.d.ts.map +1 -1
- package/dist/history.js +69 -0
- package/dist/history.js.map +1 -1
- package/dist/index.d.ts +31 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -6
- 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 +47 -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 +80 -0
- package/dist/persistent-agent.d.ts.map +1 -0
- package/dist/persistent-agent.js +69 -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 +9 -3
- 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 +40 -1
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +308 -34
- 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 +21 -11
- package/dist/strict.d.ts.map +1 -1
- package/dist/strict.js +11 -6
- package/dist/strict.js.map +1 -1
- 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 +110 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +14 -10
package/dist/cost-budget.d.ts
CHANGED
|
@@ -94,6 +94,21 @@ export interface CostLimit {
|
|
|
94
94
|
* and pause until approved. Re-throw on denial.
|
|
95
95
|
*/
|
|
96
96
|
onExceed?: 'throw' | 'approve';
|
|
97
|
+
/**
|
|
98
|
+
* Whether the scope is tracked incrementally in-process or read from an
|
|
99
|
+
* external source. Defaults to `'incremental'`.
|
|
100
|
+
*/
|
|
101
|
+
scopeSource?: 'incremental' | 'external';
|
|
102
|
+
/**
|
|
103
|
+
* External source for actual (non-estimated) spend. When provided, the
|
|
104
|
+
* budget tracker can query real-time cost data from the provider.
|
|
105
|
+
*/
|
|
106
|
+
actualSource?: ActualCostSource;
|
|
107
|
+
/**
|
|
108
|
+
* TTL for caching actual cost lookups (milliseconds). When omitted, the
|
|
109
|
+
* actual source's default or per-query option is used.
|
|
110
|
+
*/
|
|
111
|
+
actualsCacheTtlMs?: number;
|
|
97
112
|
}
|
|
98
113
|
export interface CostLimitContext {
|
|
99
114
|
scope: 'call' | 'session' | 'cross-process';
|
|
@@ -101,6 +116,85 @@ export interface CostLimitContext {
|
|
|
101
116
|
limitUsd: number;
|
|
102
117
|
/** External scope key, populated for `scope: 'cross-process'`. */
|
|
103
118
|
scopeKey?: string;
|
|
119
|
+
/** ISO timestamp when actual cost data was last fetched from the provider. */
|
|
120
|
+
actualsFetchedAt?: string;
|
|
121
|
+
/** TTL (in ms) for the cached actual cost data used in this observation. */
|
|
122
|
+
cacheTtlMs?: number;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Attribution dimensions for a single cost observation. All fields are
|
|
126
|
+
* optional so callers can tag as much or as little metadata as they have.
|
|
127
|
+
*/
|
|
128
|
+
export interface CostAttribution {
|
|
129
|
+
agentId?: string;
|
|
130
|
+
userId?: string;
|
|
131
|
+
tenantId?: string;
|
|
132
|
+
model?: string;
|
|
133
|
+
provider?: string;
|
|
134
|
+
sessionId?: string;
|
|
135
|
+
turnId?: string;
|
|
136
|
+
[key: string]: string | undefined;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Query filters for retrieving aggregated cost attribution rows.
|
|
140
|
+
*/
|
|
141
|
+
export interface AttributionQuery {
|
|
142
|
+
agentId?: string;
|
|
143
|
+
userId?: string;
|
|
144
|
+
tenantId?: string;
|
|
145
|
+
model?: string;
|
|
146
|
+
provider?: string;
|
|
147
|
+
/** ISO date string (inclusive). */
|
|
148
|
+
startDate?: string;
|
|
149
|
+
/** ISO date string (inclusive). */
|
|
150
|
+
endDate?: string;
|
|
151
|
+
/** Dimensions to group by. Defaults to all if omitted. */
|
|
152
|
+
groupBy?: Array<keyof CostAttribution>;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* A single row of aggregated cost attribution data.
|
|
156
|
+
*/
|
|
157
|
+
export interface CostAttributionRow {
|
|
158
|
+
agentId?: string;
|
|
159
|
+
userId?: string;
|
|
160
|
+
tenantId?: string;
|
|
161
|
+
model?: string;
|
|
162
|
+
provider?: string;
|
|
163
|
+
/** Period identifier, e.g. `day:2026-06-23`. */
|
|
164
|
+
period: string;
|
|
165
|
+
/** Estimated cost from the static price table. */
|
|
166
|
+
estimatedUsd: number;
|
|
167
|
+
/** Actual cost from the provider's billing API. */
|
|
168
|
+
actualUsd: number;
|
|
169
|
+
/** Actual DBU (Databricks Unit) spend, if applicable. */
|
|
170
|
+
actualDbus: number;
|
|
171
|
+
/** Difference between estimated and actual cost. */
|
|
172
|
+
deltaUsd: number;
|
|
173
|
+
/** Number of calls in this aggregation. */
|
|
174
|
+
calls: number;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* External source for actual (non-estimated) spend. Implementations can
|
|
178
|
+
* query provider billing APIs, Databricks usage tables, or other real-time
|
|
179
|
+
* cost data.
|
|
180
|
+
*/
|
|
181
|
+
export interface ActualCostSource {
|
|
182
|
+
/**
|
|
183
|
+
* Fetch the actual USD spend for a scope, optionally filtered by
|
|
184
|
+
* attribution dimensions.
|
|
185
|
+
*/
|
|
186
|
+
getUsd(scopeKey: string, attribution?: CostAttribution, options?: {
|
|
187
|
+
cacheTtlMs?: number;
|
|
188
|
+
}): Promise<{
|
|
189
|
+
usd: number;
|
|
190
|
+
dbus?: number;
|
|
191
|
+
actualsFetchedAt?: string;
|
|
192
|
+
cacheTtlMs?: number;
|
|
193
|
+
}>;
|
|
194
|
+
/**
|
|
195
|
+
* Query aggregated cost attribution rows for reporting or debugging.
|
|
196
|
+
*/
|
|
197
|
+
queryAttribution(filters: AttributionQuery): Promise<CostAttributionRow[]>;
|
|
104
198
|
}
|
|
105
199
|
export declare class CostLimitExceededError extends FabricError {
|
|
106
200
|
readonly context: CostLimitContext;
|
|
@@ -112,7 +206,11 @@ export declare class CostLimitExceededError extends FabricError {
|
|
|
112
206
|
export declare class CostBudgetTracker {
|
|
113
207
|
private readonly limit;
|
|
114
208
|
private sessionTotalUsd;
|
|
209
|
+
private pendingScopeViolation;
|
|
210
|
+
private defaultStore;
|
|
115
211
|
constructor(limit: CostLimit | undefined);
|
|
212
|
+
/** How `perScope` is enforced: `'incremental'` (estimate counter) or `'external'` (actual-cost source). */
|
|
213
|
+
get scopeSource(): 'incremental' | 'external';
|
|
116
214
|
/** Has any budget configured. */
|
|
117
215
|
enabled(): boolean;
|
|
118
216
|
/**
|
|
@@ -125,8 +223,15 @@ export declare class CostBudgetTracker {
|
|
|
125
223
|
* Cross-process scope check. Returns a violation when the scope's running
|
|
126
224
|
* total exceeds `perScope` after incrementing by `callUsd`. No-op when
|
|
127
225
|
* `perScope`/`scopeKey` are not configured.
|
|
226
|
+
*
|
|
227
|
+
* For `scopeSource === 'incremental'` (default), increments the store and
|
|
228
|
+
* compares. For `scopeSource === 'external'`, queries `actualSource` instead.
|
|
128
229
|
*/
|
|
129
|
-
observeScopeAsync(callUsd: number): Promise<CostLimitContext | undefined>;
|
|
230
|
+
observeScopeAsync(callUsd: number, attribution?: CostAttribution): Promise<CostLimitContext | undefined>;
|
|
231
|
+
/** Store a pending scope violation for asynchronous reconciliation. */
|
|
232
|
+
setPendingScopeViolation(violation: CostLimitContext): void;
|
|
233
|
+
/** Take and clear the pending scope violation, if any. */
|
|
234
|
+
takePendingScopeViolation(): CostLimitContext | undefined;
|
|
130
235
|
/** Total spend so far this session. */
|
|
131
236
|
total(): number;
|
|
132
237
|
onExceed(): 'throw' | 'approve';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cost-budget.d.ts","sourceRoot":"","sources":["../src/cost-budget.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC;;;;;;;;;;;;;;;;GAgBG;AACH;;;;;;;;GAQG;AACH,MAAM,WAAW,eAAe;IAC9B,uEAAuE;IACvE,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/D,2CAA2C;IAC3C,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACvC,yDAAyD;IACzD,KAAK,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,eAAe,GACvB,SAAS,CAuBX;AAED,MAAM,WAAW,eAAe;IAC9B,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+EAA+E;IAC/E,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,4CAA4C;IAC5C,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED,6EAA6E;AAC7E,wBAAgB,uBAAuB,IAAI,eAAe,CAezD;AAED,MAAM,WAAW,SAAS;IACxB,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"cost-budget.d.ts","sourceRoot":"","sources":["../src/cost-budget.ts"],"names":[],"mappings":"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"}
|
package/dist/cost-budget.js
CHANGED
|
@@ -86,9 +86,15 @@ export class CostLimitExceededError extends FabricError {
|
|
|
86
86
|
export class CostBudgetTracker {
|
|
87
87
|
limit;
|
|
88
88
|
sessionTotalUsd = 0;
|
|
89
|
+
pendingScopeViolation;
|
|
90
|
+
defaultStore;
|
|
89
91
|
constructor(limit) {
|
|
90
92
|
this.limit = limit;
|
|
91
93
|
}
|
|
94
|
+
/** How `perScope` is enforced: `'incremental'` (estimate counter) or `'external'` (actual-cost source). */
|
|
95
|
+
get scopeSource() {
|
|
96
|
+
return this.limit?.scopeSource ?? 'incremental';
|
|
97
|
+
}
|
|
92
98
|
/** Has any budget configured. */
|
|
93
99
|
enabled() {
|
|
94
100
|
return Boolean(this.limit && (this.limit.perCall !== undefined || this.limit.perSession !== undefined || this.limit.perScope !== undefined));
|
|
@@ -114,17 +120,57 @@ export class CostBudgetTracker {
|
|
|
114
120
|
* Cross-process scope check. Returns a violation when the scope's running
|
|
115
121
|
* total exceeds `perScope` after incrementing by `callUsd`. No-op when
|
|
116
122
|
* `perScope`/`scopeKey` are not configured.
|
|
123
|
+
*
|
|
124
|
+
* For `scopeSource === 'incremental'` (default), increments the store and
|
|
125
|
+
* compares. For `scopeSource === 'external'`, queries `actualSource` instead.
|
|
117
126
|
*/
|
|
118
|
-
async observeScopeAsync(callUsd) {
|
|
127
|
+
async observeScopeAsync(callUsd, attribution) {
|
|
119
128
|
if (!this.limit?.perScope || !this.limit.scopeKey || callUsd <= 0)
|
|
120
129
|
return undefined;
|
|
121
|
-
const
|
|
130
|
+
const scopeSource = this.limit.scopeSource ?? 'incremental';
|
|
131
|
+
if (scopeSource === 'external') {
|
|
132
|
+
if (!this.limit.actualSource)
|
|
133
|
+
return undefined;
|
|
134
|
+
const opts = {};
|
|
135
|
+
if (this.limit.actualsCacheTtlMs !== undefined)
|
|
136
|
+
opts.cacheTtlMs = this.limit.actualsCacheTtlMs;
|
|
137
|
+
const result = await this.limit.actualSource.getUsd(this.limit.scopeKey, attribution, opts);
|
|
138
|
+
if (result.usd > this.limit.perScope) {
|
|
139
|
+
const ctx = {
|
|
140
|
+
scope: 'cross-process',
|
|
141
|
+
observedUsd: result.usd,
|
|
142
|
+
limitUsd: this.limit.perScope,
|
|
143
|
+
scopeKey: this.limit.scopeKey,
|
|
144
|
+
};
|
|
145
|
+
if (result.actualsFetchedAt)
|
|
146
|
+
ctx.actualsFetchedAt = result.actualsFetchedAt;
|
|
147
|
+
if (result.cacheTtlMs !== undefined)
|
|
148
|
+
ctx.cacheTtlMs = result.cacheTtlMs;
|
|
149
|
+
return ctx;
|
|
150
|
+
}
|
|
151
|
+
return undefined;
|
|
152
|
+
}
|
|
153
|
+
// incremental (default) — reuse a single default store instance per tracker
|
|
154
|
+
if (!this.defaultStore) {
|
|
155
|
+
this.defaultStore = this.limit.store ?? inMemoryCostBudgetStore();
|
|
156
|
+
}
|
|
157
|
+
const store = this.defaultStore;
|
|
122
158
|
const total = await store.incrementUsd(this.limit.scopeKey, callUsd);
|
|
123
159
|
if (total > this.limit.perScope) {
|
|
124
160
|
return { scope: 'cross-process', observedUsd: total, limitUsd: this.limit.perScope, scopeKey: this.limit.scopeKey };
|
|
125
161
|
}
|
|
126
162
|
return undefined;
|
|
127
163
|
}
|
|
164
|
+
/** Store a pending scope violation for asynchronous reconciliation. */
|
|
165
|
+
setPendingScopeViolation(violation) {
|
|
166
|
+
this.pendingScopeViolation = violation;
|
|
167
|
+
}
|
|
168
|
+
/** Take and clear the pending scope violation, if any. */
|
|
169
|
+
takePendingScopeViolation() {
|
|
170
|
+
const v = this.pendingScopeViolation;
|
|
171
|
+
this.pendingScopeViolation = undefined;
|
|
172
|
+
return v;
|
|
173
|
+
}
|
|
128
174
|
/** Total spend so far this session. */
|
|
129
175
|
total() {
|
|
130
176
|
return this.sessionTotalUsd;
|
package/dist/cost-budget.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cost-budget.js","sourceRoot":"","sources":["../src/cost-budget.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cost-budget.js","sourceRoot":"","sources":["../src/cost-budget.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import type { CreatedAgent } from './persistent-agent.js';
|
|
2
|
+
import type { FabricActor } from './types.js';
|
|
3
|
+
/** Async delivery request to a persistent agent instance + session. */
|
|
4
|
+
export interface AgentDispatchRequest {
|
|
5
|
+
/** Instance id of the target persistent agent. */
|
|
6
|
+
id: string;
|
|
7
|
+
/** Named session within the instance. Defaults to `"default"`. */
|
|
8
|
+
session?: string;
|
|
9
|
+
/** JSON-serializable payload delivered to the instance. */
|
|
10
|
+
input: unknown;
|
|
11
|
+
}
|
|
12
|
+
/** A dispatch request that names its target agent. */
|
|
13
|
+
export interface NamedAgentDispatchRequest extends AgentDispatchRequest {
|
|
14
|
+
agent: string;
|
|
15
|
+
}
|
|
16
|
+
/** Acceptance confirmation for an enqueued dispatch. */
|
|
17
|
+
export interface DispatchReceipt {
|
|
18
|
+
dispatchId: string;
|
|
19
|
+
acceptedAt: string;
|
|
20
|
+
}
|
|
21
|
+
/** Internal enqueued form, carrying correlation + isolation metadata. */
|
|
22
|
+
export interface DispatchInput {
|
|
23
|
+
dispatchId: string;
|
|
24
|
+
agent: string;
|
|
25
|
+
id: string;
|
|
26
|
+
session: string;
|
|
27
|
+
input: unknown;
|
|
28
|
+
acceptedAt: string;
|
|
29
|
+
tenantId?: string;
|
|
30
|
+
actor?: FabricActor;
|
|
31
|
+
/** Absolute timestamp (ms) after which the dispatch should be aborted. */
|
|
32
|
+
timeoutAt?: number;
|
|
33
|
+
/** Absolute timestamp (ms) after which the dispatch lease expires and may be reclaimed. */
|
|
34
|
+
leaseExpiresAt?: number;
|
|
35
|
+
}
|
|
36
|
+
/** Consumes enqueued dispatches and applies them to an instance session. */
|
|
37
|
+
export interface DispatchProcessor {
|
|
38
|
+
process(input: DispatchInput): Promise<void> | void;
|
|
39
|
+
}
|
|
40
|
+
/** Admission queue for dispatches. The default is in-process; durable backends implement the same shape. */
|
|
41
|
+
export interface DispatchQueue {
|
|
42
|
+
enqueue(input: DispatchInput): Promise<DispatchReceipt>;
|
|
43
|
+
}
|
|
44
|
+
export interface InMemoryDispatchQueueOptions {
|
|
45
|
+
/** Lease duration in milliseconds. Default: 5 minutes. */
|
|
46
|
+
leaseTimeoutMs?: number;
|
|
47
|
+
/** Maximum number of concurrent dispatches. Default: Infinity. */
|
|
48
|
+
maxConcurrent?: number;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* In-process dispatch queue: microtask-drained, concurrent across sessions,
|
|
52
|
+
* serialized within a single session. Suitable for the `inline`/`stateless`
|
|
53
|
+
* runtimes and dev. Durable delivery (surviving restarts) is provided by the
|
|
54
|
+
* Temporal-backed queue, which implements this same interface.
|
|
55
|
+
*/
|
|
56
|
+
export declare class InMemoryDispatchQueue implements DispatchQueue {
|
|
57
|
+
private readonly processor;
|
|
58
|
+
private readonly leaseTimeoutMs;
|
|
59
|
+
private readonly maxConcurrent;
|
|
60
|
+
private readonly pending;
|
|
61
|
+
private readonly inFlight;
|
|
62
|
+
private concurrency;
|
|
63
|
+
private shuttingDown;
|
|
64
|
+
private drainPromise;
|
|
65
|
+
private scheduled;
|
|
66
|
+
constructor(processor: DispatchProcessor, options?: InMemoryDispatchQueueOptions);
|
|
67
|
+
enqueue(input: DispatchInput): Promise<DispatchReceipt>;
|
|
68
|
+
/** Signal the queue to stop accepting new work. */
|
|
69
|
+
shutdown(): void;
|
|
70
|
+
/** Resolve once the queue has drained all pending and in-flight work. */
|
|
71
|
+
whenIdle(): Promise<void>;
|
|
72
|
+
private sessionKey;
|
|
73
|
+
private scheduleDrain;
|
|
74
|
+
private attemptStartDispatches;
|
|
75
|
+
private runDispatch;
|
|
76
|
+
}
|
|
77
|
+
interface DispatchRuntime {
|
|
78
|
+
queue: DispatchQueue;
|
|
79
|
+
}
|
|
80
|
+
/** Configure the ambient dispatch queue used by {@link dispatch}. */
|
|
81
|
+
export declare function configureDispatchRuntime(runtime: DispatchRuntime): void;
|
|
82
|
+
/** Clear the ambient dispatch runtime (tests/teardown). */
|
|
83
|
+
export declare function resetDispatchRuntime(): void;
|
|
84
|
+
/** Register a name for a {@link CreatedAgent} so `dispatch(agent, ...)` can resolve it. */
|
|
85
|
+
export declare function registerCreatedAgentName(agent: CreatedAgent, name: string): void;
|
|
86
|
+
export declare function dispatch(agent: CreatedAgent, request: AgentDispatchRequest): Promise<DispatchReceipt>;
|
|
87
|
+
export declare function dispatch(request: NamedAgentDispatchRequest): Promise<DispatchReceipt>;
|
|
88
|
+
/** Validate + normalize a named request and enqueue it, generating the dispatch id. */
|
|
89
|
+
export declare function enqueueDispatch(queue: DispatchQueue, request: NamedAgentDispatchRequest, extra?: {
|
|
90
|
+
tenantId?: string;
|
|
91
|
+
actor?: FabricActor;
|
|
92
|
+
dispatchId?: string;
|
|
93
|
+
}): Promise<DispatchReceipt>;
|
|
94
|
+
export {};
|
|
95
|
+
//# sourceMappingURL=dispatch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../src/dispatch.ts"],"names":[],"mappings":"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"}
|
package/dist/dispatch.js
ADDED
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-process dispatch queue: microtask-drained, concurrent across sessions,
|
|
3
|
+
* serialized within a single session. Suitable for the `inline`/`stateless`
|
|
4
|
+
* runtimes and dev. Durable delivery (surviving restarts) is provided by the
|
|
5
|
+
* Temporal-backed queue, which implements this same interface.
|
|
6
|
+
*/
|
|
7
|
+
export class InMemoryDispatchQueue {
|
|
8
|
+
processor;
|
|
9
|
+
leaseTimeoutMs;
|
|
10
|
+
maxConcurrent;
|
|
11
|
+
pending = new Map();
|
|
12
|
+
inFlight = new Map();
|
|
13
|
+
concurrency = 0;
|
|
14
|
+
shuttingDown = false;
|
|
15
|
+
drainPromise;
|
|
16
|
+
scheduled = false;
|
|
17
|
+
constructor(processor, options) {
|
|
18
|
+
this.processor = processor;
|
|
19
|
+
this.leaseTimeoutMs = options?.leaseTimeoutMs ?? 5 * 60 * 1000;
|
|
20
|
+
this.maxConcurrent = options?.maxConcurrent ?? Number.POSITIVE_INFINITY;
|
|
21
|
+
}
|
|
22
|
+
async enqueue(input) {
|
|
23
|
+
if (this.shuttingDown) {
|
|
24
|
+
throw new Error('[fabric-harness:dispatch] Dispatch queue is shutting down.');
|
|
25
|
+
}
|
|
26
|
+
const key = this.sessionKey(input);
|
|
27
|
+
const queue = this.pending.get(key) ?? [];
|
|
28
|
+
queue.push(input);
|
|
29
|
+
this.pending.set(key, queue);
|
|
30
|
+
this.scheduleDrain();
|
|
31
|
+
return { dispatchId: input.dispatchId, acceptedAt: input.acceptedAt };
|
|
32
|
+
}
|
|
33
|
+
/** Signal the queue to stop accepting new work. */
|
|
34
|
+
shutdown() {
|
|
35
|
+
this.shuttingDown = true;
|
|
36
|
+
}
|
|
37
|
+
/** Resolve once the queue has drained all pending and in-flight work. */
|
|
38
|
+
async whenIdle() {
|
|
39
|
+
while (this.scheduled || this.inFlight.size > 0) {
|
|
40
|
+
if (this.drainPromise)
|
|
41
|
+
await this.drainPromise;
|
|
42
|
+
if (this.inFlight.size > 0) {
|
|
43
|
+
await Promise.all([...this.inFlight.values()]);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
sessionKey(input) {
|
|
48
|
+
return `${input.agent}::${input.id}::${input.session}`;
|
|
49
|
+
}
|
|
50
|
+
scheduleDrain() {
|
|
51
|
+
if (this.scheduled)
|
|
52
|
+
return;
|
|
53
|
+
this.scheduled = true;
|
|
54
|
+
this.drainPromise = new Promise((resolve) => {
|
|
55
|
+
queueMicrotask(() => {
|
|
56
|
+
void this.attemptStartDispatches().finally(resolve);
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
async attemptStartDispatches() {
|
|
61
|
+
try {
|
|
62
|
+
while (!this.shuttingDown) {
|
|
63
|
+
let startedAny = false;
|
|
64
|
+
for (const [key, queue] of this.pending) {
|
|
65
|
+
if (this.inFlight.has(key))
|
|
66
|
+
continue;
|
|
67
|
+
if (this.concurrency >= this.maxConcurrent)
|
|
68
|
+
break;
|
|
69
|
+
const input = queue.shift();
|
|
70
|
+
if (!input) {
|
|
71
|
+
this.pending.delete(key);
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
startedAny = true;
|
|
75
|
+
input.leaseExpiresAt = Date.now() + this.leaseTimeoutMs;
|
|
76
|
+
this.concurrency++;
|
|
77
|
+
this.runDispatch(key, input);
|
|
78
|
+
}
|
|
79
|
+
if (!startedAny)
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
finally {
|
|
84
|
+
this.scheduled = false;
|
|
85
|
+
const hasStartable = [...this.pending.entries()].some(([key, queue]) => queue.length > 0 && !this.inFlight.has(key));
|
|
86
|
+
if (hasStartable && !this.shuttingDown && this.concurrency < this.maxConcurrent) {
|
|
87
|
+
this.scheduleDrain();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
runDispatch(key, input) {
|
|
92
|
+
const promise = Promise.resolve()
|
|
93
|
+
.then(() => this.processor.process(input))
|
|
94
|
+
.catch((error) => {
|
|
95
|
+
console.error('[fabric-harness:dispatch] processor failed:', error);
|
|
96
|
+
})
|
|
97
|
+
.finally(() => {
|
|
98
|
+
this.inFlight.delete(key);
|
|
99
|
+
this.concurrency--;
|
|
100
|
+
const queue = this.pending.get(key);
|
|
101
|
+
if (queue && queue.length === 0) {
|
|
102
|
+
this.pending.delete(key);
|
|
103
|
+
}
|
|
104
|
+
this.scheduleDrain();
|
|
105
|
+
});
|
|
106
|
+
this.inFlight.set(key, promise);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
let dispatchRuntime;
|
|
110
|
+
const createdAgentNames = new WeakMap();
|
|
111
|
+
/** Configure the ambient dispatch queue used by {@link dispatch}. */
|
|
112
|
+
export function configureDispatchRuntime(runtime) {
|
|
113
|
+
dispatchRuntime = runtime;
|
|
114
|
+
}
|
|
115
|
+
/** Clear the ambient dispatch runtime (tests/teardown). */
|
|
116
|
+
export function resetDispatchRuntime() {
|
|
117
|
+
dispatchRuntime = undefined;
|
|
118
|
+
}
|
|
119
|
+
/** Register a name for a {@link CreatedAgent} so `dispatch(agent, ...)` can resolve it. */
|
|
120
|
+
export function registerCreatedAgentName(agent, name) {
|
|
121
|
+
createdAgentNames.set(agent, name);
|
|
122
|
+
}
|
|
123
|
+
export function dispatch(agentOrRequest, maybeRequest) {
|
|
124
|
+
if (!dispatchRuntime?.queue) {
|
|
125
|
+
throw new Error('[fabric-harness] dispatch() called before a dispatch queue was configured.');
|
|
126
|
+
}
|
|
127
|
+
const named = resolveNamedRequest(agentOrRequest, maybeRequest);
|
|
128
|
+
return enqueueDispatch(dispatchRuntime.queue, named);
|
|
129
|
+
}
|
|
130
|
+
function resolveNamedRequest(agentOrRequest, maybeRequest) {
|
|
131
|
+
if (isNamedRequest(agentOrRequest))
|
|
132
|
+
return agentOrRequest;
|
|
133
|
+
if (!maybeRequest)
|
|
134
|
+
throw new Error('[fabric-harness] dispatch(agent, request) requires a request.');
|
|
135
|
+
const name = createdAgentNames.get(agentOrRequest);
|
|
136
|
+
if (!name) {
|
|
137
|
+
throw new Error('[fabric-harness] dispatch() target is not a registered persistent agent. ' +
|
|
138
|
+
'Use dispatch({ agent: "<name>", id, input }) or register the agent with registerCreatedAgentName().');
|
|
139
|
+
}
|
|
140
|
+
return { ...maybeRequest, agent: name };
|
|
141
|
+
}
|
|
142
|
+
function isNamedRequest(value) {
|
|
143
|
+
return typeof value === 'object' && value !== null && typeof value.agent === 'string';
|
|
144
|
+
}
|
|
145
|
+
/** Validate + normalize a named request and enqueue it, generating the dispatch id. */
|
|
146
|
+
export async function enqueueDispatch(queue, request, extra = {}) {
|
|
147
|
+
if (!request.agent)
|
|
148
|
+
throw new Error('dispatch: a non-empty agent name is required.');
|
|
149
|
+
if (!request.id)
|
|
150
|
+
throw new Error('dispatch: a non-empty instance id is required.');
|
|
151
|
+
if (request.session !== undefined && request.session.trim() === '') {
|
|
152
|
+
throw new Error('dispatch: session must be a non-empty string when provided.');
|
|
153
|
+
}
|
|
154
|
+
let input;
|
|
155
|
+
try {
|
|
156
|
+
input = JSON.parse(JSON.stringify(request.input ?? null));
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
throw new Error('dispatch: input must be JSON-serializable.');
|
|
160
|
+
}
|
|
161
|
+
const dispatchInput = {
|
|
162
|
+
// A caller-supplied id (e.g. derived from a platform event id) gives exactly-once delivery via
|
|
163
|
+
// the persistent-run idempotency marker; otherwise mint a fresh one.
|
|
164
|
+
dispatchId: extra.dispatchId?.trim() || crypto.randomUUID(),
|
|
165
|
+
agent: request.agent,
|
|
166
|
+
id: request.id,
|
|
167
|
+
session: request.session ?? 'default',
|
|
168
|
+
input,
|
|
169
|
+
acceptedAt: new Date().toISOString(),
|
|
170
|
+
...(extra.tenantId ? { tenantId: extra.tenantId } : {}),
|
|
171
|
+
...(extra.actor ? { actor: extra.actor } : {}),
|
|
172
|
+
};
|
|
173
|
+
return queue.enqueue(dispatchInput);
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=dispatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../src/dispatch.ts"],"names":[],"mappings":"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"}
|
package/dist/error.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { JsonObject } from './types.js';
|
|
2
|
-
export type FabricErrorCode = 'AGENT_NOT_FOUND' | 'SESSION_NOT_FOUND' | 'SKILL_NOT_FOUND' | 'ROLE_NOT_FOUND' | 'POLICY_DENIED' | 'APPROVAL_REQUIRED' | 'APPROVAL_DENIED' | 'SANDBOX_UNAVAILABLE' | 'SANDBOX_ESCAPE_BLOCKED' | 'MODEL_TIMEOUT' | 'MODEL_RATE_LIMITED' | 'MODEL_CONTEXT_OVERFLOW' | 'MODEL_AUTH_FAILED' | 'TOOL_NOT_FOUND' | 'TOOL_VALIDATION_FAILED' | 'RESULT_VALIDATION_FAILED' | 'TOOL_EXECUTION_FAILED' | 'COMMAND_DENIED' | 'CHECKPOINT_NOT_FOUND' | 'STORE_CONFLICT' | 'STORE_UNAVAILABLE' | 'INVALID_WORKSPACE' | 'MOUNT_INVALID_PATH' | 'COST_LIMIT_EXCEEDED' | 'WEBHOOK_AUTH_FAILED' | 'UNKNOWN';
|
|
2
|
+
export type FabricErrorCode = 'AGENT_NOT_FOUND' | 'SESSION_NOT_FOUND' | 'SKILL_NOT_FOUND' | 'ROLE_NOT_FOUND' | 'POLICY_DENIED' | 'APPROVAL_REQUIRED' | 'APPROVAL_DENIED' | 'SANDBOX_UNAVAILABLE' | 'SANDBOX_ESCAPE_BLOCKED' | 'MODEL_TIMEOUT' | 'MODEL_RATE_LIMITED' | 'MODEL_CONTEXT_OVERFLOW' | 'MODEL_AUTH_FAILED' | 'TOOL_NOT_FOUND' | 'TOOL_VALIDATION_FAILED' | 'RESULT_VALIDATION_FAILED' | 'RESULT_UNAVAILABLE' | 'TOOL_EXECUTION_FAILED' | 'COMMAND_DENIED' | 'CHECKPOINT_NOT_FOUND' | 'STORE_CONFLICT' | 'STORE_UNAVAILABLE' | 'INVALID_WORKSPACE' | 'MOUNT_INVALID_PATH' | 'INVALID_CONFIG' | 'COST_LIMIT_EXCEEDED' | 'WEBHOOK_AUTH_FAILED' | 'UNKNOWN';
|
|
3
3
|
export interface FabricErrorOptions {
|
|
4
4
|
code: FabricErrorCode;
|
|
5
5
|
message: string;
|
package/dist/error.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,MAAM,eAAe,GACvB,iBAAiB,GACjB,mBAAmB,GACnB,iBAAiB,GACjB,gBAAgB,GAChB,eAAe,GACf,mBAAmB,GACnB,iBAAiB,GACjB,qBAAqB,GACrB,wBAAwB,GACxB,eAAe,GACf,oBAAoB,GACpB,wBAAwB,GACxB,mBAAmB,GACnB,gBAAgB,GAChB,wBAAwB,GACxB,0BAA0B,GAC1B,uBAAuB,GACvB,gBAAgB,GAChB,sBAAsB,GACtB,gBAAgB,GAChB,mBAAmB,GACnB,mBAAmB,GACnB,oBAAoB,GACpB,qBAAqB,GACrB,qBAAqB,GACrB,SAAS,CAAC;AAEd,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,qBAAa,WAAY,SAAQ,KAAK;IACpC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,CAAC,EAAE,UAAU,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;gBAEhB,OAAO,EAAE,kBAAkB;IAUvC,MAAM,CAAC,QAAQ,GAAE,QAAQ,GAAG,WAA+E,GAAG,UAAU;IAOxH,YAAY,IAAI,UAAU;IAI1B,eAAe,IAAI,UAAU;CAG9B;AAQD,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAElE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,kBAAkB,EAAE,OAAO,CAAC,GAAG,WAAW,CAGtG"}
|
|
1
|
+
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,MAAM,eAAe,GACvB,iBAAiB,GACjB,mBAAmB,GACnB,iBAAiB,GACjB,gBAAgB,GAChB,eAAe,GACf,mBAAmB,GACnB,iBAAiB,GACjB,qBAAqB,GACrB,wBAAwB,GACxB,eAAe,GACf,oBAAoB,GACpB,wBAAwB,GACxB,mBAAmB,GACnB,gBAAgB,GAChB,wBAAwB,GACxB,0BAA0B,GAC1B,oBAAoB,GACpB,uBAAuB,GACvB,gBAAgB,GAChB,sBAAsB,GACtB,gBAAgB,GAChB,mBAAmB,GACnB,mBAAmB,GACnB,oBAAoB,GACpB,gBAAgB,GAChB,qBAAqB,GACrB,qBAAqB,GACrB,SAAS,CAAC;AAEd,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,qBAAa,WAAY,SAAQ,KAAK;IACpC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,CAAC,EAAE,UAAU,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;gBAEhB,OAAO,EAAE,kBAAkB;IAUvC,MAAM,CAAC,QAAQ,GAAE,QAAQ,GAAG,WAA+E,GAAG,UAAU;IAOxH,YAAY,IAAI,UAAU;IAI1B,eAAe,IAAI,UAAU;CAG9B;AAQD,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAElE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,kBAAkB,EAAE,OAAO,CAAC,GAAG,WAAW,CAGtG"}
|
package/dist/error.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error.js","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"error.js","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AA2C5C,MAAM,OAAO,WAAY,SAAQ,KAAK;IAC3B,IAAI,CAAkB;IACtB,OAAO,CAAc;IACrB,aAAa,CAAS;IACtB,aAAa,CAAc;IAC3B,SAAS,CAAU;IAE5B,YAAY,OAA2B;QACrC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC3F,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS;YAAE,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9E,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,iBAAiB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAC/F,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS;YAAE,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAChG,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC;IAC9C,CAAC;IAED,MAAM,CAAC,WAAmC,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW;QACzG,MAAM,IAAI,GAAe,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;QACzK,MAAM,OAAO,GAAG,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;QAC1E,IAAI,OAAO,KAAK,SAAS;YAAE,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAClC,CAAC;CACF;AAED,SAAS,iBAAiB,CAAC,IAAqB,EAAE,OAAe;IAC/D,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,YAAY;QAAE,OAAO,UAAU,CAAC,OAAO,CAAW,CAAC;IACnF,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,8CAA8C,CAAC;IAC9E,OAAO,UAAU,CAAC,OAAO,CAAW,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,KAAK,YAAY,WAAW,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAc,EAAE,QAA2C;IACvF,IAAI,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACvC,OAAO,IAAI,WAAW,CAAC,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AACxD,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { FileStat, SandboxEnv } from './sandbox.js';
|
|
2
|
+
/**
|
|
3
|
+
* Out-of-band filesystem surface for a session sandbox.
|
|
4
|
+
*
|
|
5
|
+
* These operations do not write to conversation history and are intended for
|
|
6
|
+
* host-side plumbing: staging files, collecting artifacts, and preparing
|
|
7
|
+
* scratch space. If the model should reason about a file, prompt it to use the
|
|
8
|
+
* normal read/write/edit tools instead.
|
|
9
|
+
*/
|
|
10
|
+
export interface FabricFs {
|
|
11
|
+
/** Read a UTF-8 text file. */
|
|
12
|
+
readText(path: string): Promise<string>;
|
|
13
|
+
/** Alias for `readText()` for parity with sandbox and Flue APIs. */
|
|
14
|
+
readFile(path: string): Promise<string>;
|
|
15
|
+
/** Read a file as raw bytes. */
|
|
16
|
+
readBytes(path: string): Promise<Uint8Array>;
|
|
17
|
+
/** Alias for `readBytes()` for parity with sandbox and Flue APIs. */
|
|
18
|
+
readFileBuffer(path: string): Promise<Uint8Array>;
|
|
19
|
+
/** Write text or bytes, replacing any existing file. */
|
|
20
|
+
write(path: string, content: string | Uint8Array): Promise<void>;
|
|
21
|
+
/** Write a UTF-8 text file. */
|
|
22
|
+
writeText(path: string, content: string): Promise<void>;
|
|
23
|
+
/** Alias for `write()` for parity with sandbox and Flue APIs. */
|
|
24
|
+
writeFile(path: string, content: string | Uint8Array): Promise<void>;
|
|
25
|
+
/** Get file metadata. */
|
|
26
|
+
stat(path: string): Promise<FileStat>;
|
|
27
|
+
/** List directory entries by name. */
|
|
28
|
+
list(path: string): Promise<string[]>;
|
|
29
|
+
/** Alias for `list()`. */
|
|
30
|
+
readdir(path: string): Promise<string[]>;
|
|
31
|
+
/** True if a path exists. */
|
|
32
|
+
exists(path: string): Promise<boolean>;
|
|
33
|
+
/** Create a directory. */
|
|
34
|
+
mkdir(path: string, options?: {
|
|
35
|
+
recursive?: boolean;
|
|
36
|
+
}): Promise<void>;
|
|
37
|
+
/** Remove a file or directory. */
|
|
38
|
+
remove(path: string, options?: {
|
|
39
|
+
recursive?: boolean;
|
|
40
|
+
force?: boolean;
|
|
41
|
+
}): Promise<void>;
|
|
42
|
+
/** Alias for `remove()`. */
|
|
43
|
+
rm(path: string, options?: {
|
|
44
|
+
recursive?: boolean;
|
|
45
|
+
force?: boolean;
|
|
46
|
+
}): Promise<void>;
|
|
47
|
+
/** Resolve a path using the sandbox's cwd and path semantics. */
|
|
48
|
+
resolvePath(path: string): Promise<string>;
|
|
49
|
+
}
|
|
50
|
+
/** Adapt a sandbox into the public filesystem convenience surface. */
|
|
51
|
+
export declare function createFabricFs(sandboxLike: SandboxEnv | Promise<SandboxEnv> | (() => SandboxEnv | Promise<SandboxEnv>)): FabricFs;
|
|
52
|
+
//# sourceMappingURL=filesystem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../src/filesystem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEzD;;;;;;;GAOG;AACH,MAAM,WAAW,QAAQ;IACvB,8BAA8B;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,oEAAoE;IACpE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,gCAAgC;IAChC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC7C,qEAAqE;IACrE,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAClD,wDAAwD;IACxD,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,+BAA+B;IAC/B,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,iEAAiE;IACjE,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,yBAAyB;IACzB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACtC,sCAAsC;IACtC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACtC,0BAA0B;IAC1B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,6BAA6B;IAC7B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,0BAA0B;IAC1B,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,kCAAkC;IAClC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxF,4BAA4B;IAC5B,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpF,iEAAiE;IACjE,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5C;AAED,sEAAsE;AACtE,wBAAgB,cAAc,CAAC,WAAW,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,QAAQ,CAqBjI"}
|