@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.
Files changed (114) hide show
  1. package/dist/agent-definition.d.ts +6 -0
  2. package/dist/agent-definition.d.ts.map +1 -1
  3. package/dist/agent-definition.js +5 -4
  4. package/dist/agent-definition.js.map +1 -1
  5. package/dist/agent.d.ts +6 -0
  6. package/dist/agent.d.ts.map +1 -1
  7. package/dist/agent.js +45 -1
  8. package/dist/agent.js.map +1 -1
  9. package/dist/channel.d.ts +77 -0
  10. package/dist/channel.d.ts.map +1 -0
  11. package/dist/channel.js +115 -0
  12. package/dist/channel.js.map +1 -0
  13. package/dist/context-budget.d.ts +16 -0
  14. package/dist/context-budget.d.ts.map +1 -1
  15. package/dist/context-budget.js +38 -3
  16. package/dist/context-budget.js.map +1 -1
  17. package/dist/cost-budget.d.ts +106 -1
  18. package/dist/cost-budget.d.ts.map +1 -1
  19. package/dist/cost-budget.js +48 -2
  20. package/dist/cost-budget.js.map +1 -1
  21. package/dist/dispatch.d.ts +95 -0
  22. package/dist/dispatch.d.ts.map +1 -0
  23. package/dist/dispatch.js +175 -0
  24. package/dist/dispatch.js.map +1 -0
  25. package/dist/error.d.ts +1 -1
  26. package/dist/error.d.ts.map +1 -1
  27. package/dist/error.js.map +1 -1
  28. package/dist/filesystem.d.ts +52 -0
  29. package/dist/filesystem.d.ts.map +1 -0
  30. package/dist/filesystem.js +24 -0
  31. package/dist/filesystem.js.map +1 -0
  32. package/dist/history.d.ts +22 -2
  33. package/dist/history.d.ts.map +1 -1
  34. package/dist/history.js +69 -0
  35. package/dist/history.js.map +1 -1
  36. package/dist/index.d.ts +31 -12
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +17 -6
  39. package/dist/index.js.map +1 -1
  40. package/dist/loop.d.ts +29 -3
  41. package/dist/loop.d.ts.map +1 -1
  42. package/dist/loop.js +167 -24
  43. package/dist/loop.js.map +1 -1
  44. package/dist/model.d.ts +47 -0
  45. package/dist/model.d.ts.map +1 -1
  46. package/dist/model.js +250 -79
  47. package/dist/model.js.map +1 -1
  48. package/dist/otel-observer.d.ts +44 -0
  49. package/dist/otel-observer.d.ts.map +1 -0
  50. package/dist/otel-observer.js +165 -0
  51. package/dist/otel-observer.js.map +1 -0
  52. package/dist/persistence.d.ts +70 -0
  53. package/dist/persistence.d.ts.map +1 -0
  54. package/dist/persistence.js +17 -0
  55. package/dist/persistence.js.map +1 -0
  56. package/dist/persistent-agent.d.ts +80 -0
  57. package/dist/persistent-agent.d.ts.map +1 -0
  58. package/dist/persistent-agent.js +69 -0
  59. package/dist/persistent-agent.js.map +1 -0
  60. package/dist/pi-loop-runtime.d.ts.map +1 -1
  61. package/dist/pi-loop-runtime.js +9 -3
  62. package/dist/pi-loop-runtime.js.map +1 -1
  63. package/dist/profile.d.ts +33 -0
  64. package/dist/profile.d.ts.map +1 -0
  65. package/dist/profile.js +10 -0
  66. package/dist/profile.js.map +1 -0
  67. package/dist/providers.d.ts +14 -0
  68. package/dist/providers.d.ts.map +1 -1
  69. package/dist/providers.js +18 -1
  70. package/dist/providers.js.map +1 -1
  71. package/dist/result.d.ts +12 -0
  72. package/dist/result.d.ts.map +1 -1
  73. package/dist/result.js +26 -0
  74. package/dist/result.js.map +1 -1
  75. package/dist/retrieval.d.ts +61 -0
  76. package/dist/retrieval.d.ts.map +1 -0
  77. package/dist/retrieval.js +26 -0
  78. package/dist/retrieval.js.map +1 -0
  79. package/dist/runtime-mode.d.ts +1 -1
  80. package/dist/runtime-mode.d.ts.map +1 -1
  81. package/dist/runtime-mode.js +2 -1
  82. package/dist/runtime-mode.js.map +1 -1
  83. package/dist/scope-key.d.ts +25 -0
  84. package/dist/scope-key.d.ts.map +1 -0
  85. package/dist/scope-key.js +34 -0
  86. package/dist/scope-key.js.map +1 -0
  87. package/dist/session.d.ts +40 -1
  88. package/dist/session.d.ts.map +1 -1
  89. package/dist/session.js +308 -34
  90. package/dist/session.js.map +1 -1
  91. package/dist/skills.d.ts +33 -0
  92. package/dist/skills.d.ts.map +1 -0
  93. package/dist/skills.js +65 -0
  94. package/dist/skills.js.map +1 -0
  95. package/dist/store.d.ts +36 -1
  96. package/dist/store.d.ts.map +1 -1
  97. package/dist/store.js +83 -0
  98. package/dist/store.js.map +1 -1
  99. package/dist/stream-chunks.d.ts +42 -0
  100. package/dist/stream-chunks.d.ts.map +1 -0
  101. package/dist/stream-chunks.js +138 -0
  102. package/dist/stream-chunks.js.map +1 -0
  103. package/dist/strict.d.ts +21 -11
  104. package/dist/strict.d.ts.map +1 -1
  105. package/dist/strict.js +11 -6
  106. package/dist/strict.js.map +1 -1
  107. package/dist/tools.d.ts +32 -4
  108. package/dist/tools.d.ts.map +1 -1
  109. package/dist/tools.js +132 -6
  110. package/dist/tools.js.map +1 -1
  111. package/dist/types.d.ts +110 -3
  112. package/dist/types.d.ts.map +1 -1
  113. package/dist/types.js.map +1 -1
  114. package/package.json +14 -10
@@ -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;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,eAAe,CAAC;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,sBAAuB,SAAQ,WAAW;aACzB,OAAO,EAAE,gBAAgB;gBAAzB,OAAO,EAAE,gBAAgB;CAQtD;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAGhB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAFlC,OAAO,CAAC,eAAe,CAAK;gBAEC,KAAK,EAAE,SAAS,GAAG,SAAS;IAEzD,iCAAiC;IACjC,OAAO,IAAI,OAAO;IAMlB;;;;OAIG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAYtD;;;;OAIG;IACG,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAU/E,uCAAuC;IACvC,KAAK,IAAI,MAAM;IAIf,QAAQ,IAAI,OAAO,GAAG,SAAS;CAGhC"}
1
+ {"version":3,"file":"cost-budget.d.ts","sourceRoot":"","sources":["../src/cost-budget.ts"],"names":[],"mappings":"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"}
@@ -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 store = this.limit.store ?? inMemoryCostBudgetStore();
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;
@@ -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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"}
@@ -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;
@@ -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;AAyC5C,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"}
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"}