@you-agent-factory/factory-emulator 0.0.0 → 0.0.2
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/LICENSE.md +19 -1
- package/README.md +305 -286
- package/dist/compatibility.d.ts +19 -0
- package/dist/compatibility.js +156 -0
- package/dist/event-sink.d.ts +29 -0
- package/dist/event-sink.js +58 -0
- package/dist/generated/scenario-schema.d.ts +268 -0
- package/dist/generated/scenario-schema.js +319 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +8 -0
- package/dist/logical-move.d.ts +10 -0
- package/dist/logical-move.js +18 -0
- package/dist/recording-sink.d.ts +22 -0
- package/dist/recording-sink.js +122 -0
- package/dist/runtime-reference-conformance.d.ts +20 -0
- package/dist/runtime-reference-conformance.js +138 -0
- package/dist/runtime-reference-evidence.d.ts +9 -0
- package/dist/runtime-reference-evidence.js +193 -0
- package/dist/runtime-reference-fixtures.d.ts +7 -0
- package/dist/runtime-reference-fixtures.js +308 -0
- package/dist/runtime-reference.d.ts +48 -0
- package/dist/runtime-reference.js +143 -0
- package/dist/scenario-contracts.d.ts +81 -0
- package/dist/scenario-contracts.js +11 -0
- package/dist/scenario.d.ts +271 -0
- package/dist/scenario.js +333 -0
- package/dist/scheduler.d.ts +24 -0
- package/dist/scheduler.js +104 -0
- package/dist/session-contracts.d.ts +262 -0
- package/dist/session-contracts.js +74 -0
- package/dist/session.d.ts +4 -0
- package/dist/session.js +1490 -0
- package/dist/submission-replay.d.ts +14 -0
- package/dist/submission-replay.js +96 -0
- package/dist/submission-validation.d.ts +3 -0
- package/dist/submission-validation.js +113 -0
- package/examples/customer-support.scenario.v1.json +45 -0
- package/package.json +44 -22
- package/schema/scenario.schema.json +171 -0
- package/generated/factory-emulator-scenario.schema.json +0 -191
- package/generated/factory.schema.json +0 -2606
- package/src/contracts.ts +0 -41
- package/src/data-error.js +0 -21
- package/src/data-only.js +0 -208
- package/src/emulator.js +0 -195
- package/src/emulator.ts +0 -86
- package/src/examples.js +0 -86
- package/src/examples.ts +0 -11
- package/src/generated/factory-schema.d.ts +0 -3
- package/src/generated/factory-schema.js +0 -5
- package/src/generated/scenario-schema.d.ts +0 -4
- package/src/generated/scenario-schema.js +0 -6
- package/src/generated/scenario.ts +0 -103
- package/src/identity.js +0 -55
- package/src/index.js +0 -34
- package/src/index.ts +0 -102
- package/src/limits.js +0 -125
- package/src/parser.js +0 -113
- package/src/parser.ts +0 -56
- package/src/scheduler.js +0 -374
- package/src/semantics.js +0 -354
- package/src/semantics.ts +0 -38
- package/src/session.js +0 -1201
- package/src/session.ts +0 -324
- package/src/sinks.js +0 -118
- package/src/sinks.ts +0 -56
- package/src/support.js +0 -334
- package/src/support.ts +0 -15
- package/src/virtual-time.js +0 -36
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
import type { FactoryDefinition, FactoryEvent } from "@you-agent-factory/client";
|
|
2
|
+
import type { FactoryEventSink } from "./event-sink.js";
|
|
3
|
+
import type { FactoryEmulatorInitialSubmission, FactoryEmulatorScenario, FactoryEmulatorScenarioIssue, FactoryEmulatorSubmissionBatch } from "./scenario-contracts.js";
|
|
4
|
+
export declare const DEFAULT_FACTORY_EMULATOR_LIMITS: Readonly<{
|
|
5
|
+
maxCompletedDispatches: 1000;
|
|
6
|
+
maxEvents: 10000;
|
|
7
|
+
maxVirtualElapsedMs: 3600000;
|
|
8
|
+
maxZeroDurationBatches: 1000;
|
|
9
|
+
maxSynchronousBatches: 100;
|
|
10
|
+
maxSynchronousWorkItems: 1000;
|
|
11
|
+
}>;
|
|
12
|
+
export declare const FACTORY_EMULATOR_LIMIT_HARD_CAPS: Readonly<{
|
|
13
|
+
maxCompletedDispatches: 100000;
|
|
14
|
+
maxEvents: 1000000;
|
|
15
|
+
maxVirtualElapsedMs: 86400000;
|
|
16
|
+
maxZeroDurationBatches: 10000;
|
|
17
|
+
maxSynchronousBatches: 10000;
|
|
18
|
+
maxSynchronousWorkItems: 100000;
|
|
19
|
+
}>;
|
|
20
|
+
export interface FactoryEmulatorLimits {
|
|
21
|
+
readonly maxCompletedDispatches?: number;
|
|
22
|
+
readonly maxEvents?: number;
|
|
23
|
+
readonly maxVirtualElapsedMs?: number;
|
|
24
|
+
readonly maxZeroDurationBatches?: number;
|
|
25
|
+
readonly maxSynchronousBatches?: number;
|
|
26
|
+
readonly maxSynchronousWorkItems?: number;
|
|
27
|
+
}
|
|
28
|
+
export type ResolvedFactoryEmulatorLimits = Readonly<Required<FactoryEmulatorLimits>>;
|
|
29
|
+
export type FactoryEmulatorConfigurationDiagnostic = {
|
|
30
|
+
readonly code: "incompatible_factory" | "invalid_factory" | "invalid_limit" | "invalid_sink" | "invalid_yield_control";
|
|
31
|
+
readonly path: readonly (string | number)[];
|
|
32
|
+
readonly message: string;
|
|
33
|
+
} | FactoryEmulatorScenarioIssue;
|
|
34
|
+
export declare class FactoryEmulatorConfigurationError extends Error {
|
|
35
|
+
readonly code: "invalid_configuration";
|
|
36
|
+
readonly diagnostics: readonly FactoryEmulatorConfigurationDiagnostic[];
|
|
37
|
+
constructor(diagnostics: readonly FactoryEmulatorConfigurationDiagnostic[]);
|
|
38
|
+
}
|
|
39
|
+
export type FactoryEmulatorCommand = "start" | "submit" | "advanceBy" | "advanceToNext" | "close" | "reset";
|
|
40
|
+
export declare class FactoryEmulatorLifecycleError extends Error {
|
|
41
|
+
readonly code: "invalid_lifecycle";
|
|
42
|
+
readonly command: FactoryEmulatorCommand;
|
|
43
|
+
readonly lifecycle: FactoryEmulatorSessionState["lifecycle"];
|
|
44
|
+
constructor(command: FactoryEmulatorCommand, lifecycle: FactoryEmulatorSessionState["lifecycle"]);
|
|
45
|
+
}
|
|
46
|
+
export declare class FactoryEmulatorPendingCommandError extends Error {
|
|
47
|
+
readonly code: "pending_transaction";
|
|
48
|
+
readonly attemptedCommand: FactoryEmulatorCommand;
|
|
49
|
+
readonly pendingCommand: FactoryEmulatorCommand;
|
|
50
|
+
constructor(attemptedCommand: FactoryEmulatorCommand, pendingCommand: FactoryEmulatorCommand);
|
|
51
|
+
}
|
|
52
|
+
export declare class FactoryEmulatorDurationError extends Error {
|
|
53
|
+
readonly code: "invalid_duration";
|
|
54
|
+
readonly durationMs: number;
|
|
55
|
+
constructor(durationMs: number);
|
|
56
|
+
}
|
|
57
|
+
export declare class FactoryEmulatorSubmissionError extends Error {
|
|
58
|
+
readonly code: "invalid_submission";
|
|
59
|
+
readonly diagnostics: readonly FactoryEmulatorScenarioIssue[];
|
|
60
|
+
constructor(diagnostics: readonly FactoryEmulatorScenarioIssue[]);
|
|
61
|
+
}
|
|
62
|
+
export type FactoryEmulatorExecutionDiagnostic = {
|
|
63
|
+
readonly kind: "budget-exceeded";
|
|
64
|
+
readonly limit: "completedDispatches" | "events" | "virtualElapsedMs";
|
|
65
|
+
readonly configured: number;
|
|
66
|
+
readonly observed: number;
|
|
67
|
+
readonly virtualTime: string;
|
|
68
|
+
readonly virtualElapsedMs: number;
|
|
69
|
+
} | {
|
|
70
|
+
readonly kind: "zero-duration-cycle";
|
|
71
|
+
readonly limit: "zeroDurationBatches";
|
|
72
|
+
readonly configured: number;
|
|
73
|
+
readonly observed: number;
|
|
74
|
+
readonly virtualTime: string;
|
|
75
|
+
readonly virtualElapsedMs: number;
|
|
76
|
+
} | {
|
|
77
|
+
readonly kind: "bounded-work-exceeded";
|
|
78
|
+
readonly limit: "synchronousWorkItems";
|
|
79
|
+
readonly configured: number;
|
|
80
|
+
readonly observed: number;
|
|
81
|
+
readonly virtualTime: string;
|
|
82
|
+
readonly virtualElapsedMs: number;
|
|
83
|
+
};
|
|
84
|
+
export declare class FactoryEmulatorExecutionPausedError extends Error {
|
|
85
|
+
readonly code: "execution_paused";
|
|
86
|
+
readonly diagnostic: FactoryEmulatorExecutionDiagnostic;
|
|
87
|
+
constructor(diagnostic: FactoryEmulatorExecutionDiagnostic);
|
|
88
|
+
}
|
|
89
|
+
export interface FactoryEmulatorSessionOptions {
|
|
90
|
+
readonly factory: FactoryDefinition;
|
|
91
|
+
readonly scenario: FactoryEmulatorScenario;
|
|
92
|
+
readonly sink: FactoryEventSink;
|
|
93
|
+
readonly limits?: FactoryEmulatorLimits;
|
|
94
|
+
/** Host-owned cooperative boundary. The kernel never schedules browser timers. */
|
|
95
|
+
readonly yieldControl?: () => void | PromiseLike<void>;
|
|
96
|
+
}
|
|
97
|
+
export interface FactoryEmulatorSessionCounters {
|
|
98
|
+
readonly commands: number;
|
|
99
|
+
readonly events: number;
|
|
100
|
+
readonly completedDispatches: number;
|
|
101
|
+
}
|
|
102
|
+
export interface FactoryEmulatorNormalizedRelation {
|
|
103
|
+
readonly type: "DEPENDS_ON";
|
|
104
|
+
readonly sourceWorkName: string;
|
|
105
|
+
readonly targetWorkName: string;
|
|
106
|
+
readonly targetWorkId: string;
|
|
107
|
+
readonly requiredState: string;
|
|
108
|
+
}
|
|
109
|
+
export interface FactoryEmulatorSessionWork {
|
|
110
|
+
readonly submissionId: string;
|
|
111
|
+
readonly requestId: string;
|
|
112
|
+
readonly traceId: string;
|
|
113
|
+
/** Consumable token identity; routed fan-out tokens may share one Work ID. */
|
|
114
|
+
readonly tokenId: string;
|
|
115
|
+
readonly workId: string;
|
|
116
|
+
/** Stable root identity used by lineage-scoped scenario cursors. */
|
|
117
|
+
readonly rootWorkId: string;
|
|
118
|
+
/** Deterministic transition visit counts carried by this Work lineage. */
|
|
119
|
+
readonly visits: Readonly<Record<string, number>>;
|
|
120
|
+
readonly workType: string;
|
|
121
|
+
readonly state: string;
|
|
122
|
+
readonly input?: string;
|
|
123
|
+
readonly parent?: string;
|
|
124
|
+
/** Canonical outbound execution relationships for which this Work is blocked. */
|
|
125
|
+
readonly relations?: readonly FactoryEmulatorNormalizedRelation[];
|
|
126
|
+
/** Virtual instant when this Work entered its current queue. */
|
|
127
|
+
readonly queuedElapsedMs: number;
|
|
128
|
+
/** Earliest completed dispatch for this Work lineage, when initialized. */
|
|
129
|
+
readonly lastDispatchElapsedMs?: number;
|
|
130
|
+
readonly phase: "ready" | "waiting" | "active" | "completed";
|
|
131
|
+
readonly dispatch?: {
|
|
132
|
+
readonly dispatchId: string;
|
|
133
|
+
readonly completionId: string;
|
|
134
|
+
readonly transitionId: string;
|
|
135
|
+
readonly workstation: string;
|
|
136
|
+
readonly worker: string;
|
|
137
|
+
readonly startedElapsedMs: number;
|
|
138
|
+
readonly dueElapsedMs: number;
|
|
139
|
+
/** Stable declared-input order for every token consumed by this dispatch. */
|
|
140
|
+
readonly inputTokenIds: readonly string[];
|
|
141
|
+
/** Factory-scoped capacity held until this dispatch reaches an outcome. */
|
|
142
|
+
readonly resources: readonly {
|
|
143
|
+
readonly name: string;
|
|
144
|
+
readonly capacity: number;
|
|
145
|
+
}[];
|
|
146
|
+
readonly outcome: import("./scenario-contracts.js").FactoryEmulatorOutcome;
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
export type FactoryEmulatorSessionState = {
|
|
150
|
+
readonly lifecycle: "pre-start";
|
|
151
|
+
readonly virtualElapsedMs: 0;
|
|
152
|
+
readonly counters: FactoryEmulatorSessionCounters;
|
|
153
|
+
} | {
|
|
154
|
+
readonly lifecycle: "started";
|
|
155
|
+
readonly sessionId: string;
|
|
156
|
+
readonly virtualTime: string;
|
|
157
|
+
readonly virtualElapsedMs: number;
|
|
158
|
+
readonly works: readonly FactoryEmulatorSessionWork[];
|
|
159
|
+
readonly ruleCursors: Readonly<Record<string, number>>;
|
|
160
|
+
readonly counters: FactoryEmulatorSessionCounters;
|
|
161
|
+
} | {
|
|
162
|
+
readonly lifecycle: "closed";
|
|
163
|
+
readonly sessionId: string;
|
|
164
|
+
readonly virtualTime: string;
|
|
165
|
+
readonly virtualElapsedMs: number;
|
|
166
|
+
readonly works: readonly FactoryEmulatorSessionWork[];
|
|
167
|
+
readonly ruleCursors: Readonly<Record<string, number>>;
|
|
168
|
+
readonly counters: FactoryEmulatorSessionCounters;
|
|
169
|
+
};
|
|
170
|
+
export interface FactoryEmulatorBudgetUsage {
|
|
171
|
+
readonly completedDispatches: {
|
|
172
|
+
readonly used: number;
|
|
173
|
+
readonly limit: number;
|
|
174
|
+
};
|
|
175
|
+
readonly events: {
|
|
176
|
+
readonly used: number;
|
|
177
|
+
readonly limit: number;
|
|
178
|
+
};
|
|
179
|
+
readonly virtualElapsedMs: {
|
|
180
|
+
readonly used: number;
|
|
181
|
+
readonly limit: number;
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
export interface FactoryEmulatorPendingTransactionStatus {
|
|
185
|
+
readonly command: FactoryEmulatorCommand;
|
|
186
|
+
readonly phase: "sink-write" | "sink-close";
|
|
187
|
+
readonly eventCount: number;
|
|
188
|
+
}
|
|
189
|
+
export type FactoryEmulatorSessionError = {
|
|
190
|
+
readonly code: "sink_write_rejected";
|
|
191
|
+
readonly operation: "write";
|
|
192
|
+
readonly command: FactoryEmulatorCommand;
|
|
193
|
+
readonly message: string;
|
|
194
|
+
} | {
|
|
195
|
+
readonly code: "sink_close_rejected";
|
|
196
|
+
readonly operation: "close";
|
|
197
|
+
readonly command: FactoryEmulatorCommand;
|
|
198
|
+
readonly message: string;
|
|
199
|
+
} | {
|
|
200
|
+
readonly code: "execution_paused";
|
|
201
|
+
readonly operation: "execute";
|
|
202
|
+
readonly command: FactoryEmulatorCommand;
|
|
203
|
+
readonly message: string;
|
|
204
|
+
readonly diagnostic: FactoryEmulatorExecutionDiagnostic;
|
|
205
|
+
};
|
|
206
|
+
export interface FactoryEmulatorSessionStatus {
|
|
207
|
+
readonly phase: "error" | "closed" | "active" | "ready" | "waiting" | "idle";
|
|
208
|
+
readonly reason: string;
|
|
209
|
+
readonly virtualTime?: string;
|
|
210
|
+
readonly virtualElapsedMs: number;
|
|
211
|
+
readonly budgetUsage: FactoryEmulatorBudgetUsage;
|
|
212
|
+
readonly pendingTransaction?: FactoryEmulatorPendingTransactionStatus;
|
|
213
|
+
readonly error?: FactoryEmulatorSessionError;
|
|
214
|
+
}
|
|
215
|
+
export interface FactoryEmulatorStartReceipt {
|
|
216
|
+
readonly status: "started";
|
|
217
|
+
readonly batches: readonly (readonly FactoryEvent[])[];
|
|
218
|
+
readonly state: Extract<FactoryEmulatorSessionState, {
|
|
219
|
+
lifecycle: "started";
|
|
220
|
+
}>;
|
|
221
|
+
}
|
|
222
|
+
export interface FactoryEmulatorSubmitReceipt {
|
|
223
|
+
readonly status: "submitted";
|
|
224
|
+
readonly batch: readonly FactoryEvent[];
|
|
225
|
+
readonly state: Extract<FactoryEmulatorSessionState, {
|
|
226
|
+
lifecycle: "started";
|
|
227
|
+
}>;
|
|
228
|
+
}
|
|
229
|
+
export interface FactoryEmulatorAdvanceReceipt {
|
|
230
|
+
readonly status: "advanced" | "idle";
|
|
231
|
+
readonly command: "advanceBy" | "advanceToNext";
|
|
232
|
+
readonly fromVirtualTime: string;
|
|
233
|
+
readonly virtualTime: string;
|
|
234
|
+
readonly virtualElapsedMs: number;
|
|
235
|
+
readonly batches: readonly (readonly FactoryEvent[])[];
|
|
236
|
+
readonly state: Extract<FactoryEmulatorSessionState, {
|
|
237
|
+
lifecycle: "started";
|
|
238
|
+
}>;
|
|
239
|
+
}
|
|
240
|
+
export interface FactoryEmulatorCloseReceipt {
|
|
241
|
+
readonly status: "closed";
|
|
242
|
+
readonly batch: readonly FactoryEvent[];
|
|
243
|
+
readonly state: Extract<FactoryEmulatorSessionState, {
|
|
244
|
+
lifecycle: "closed";
|
|
245
|
+
}>;
|
|
246
|
+
}
|
|
247
|
+
export interface FactoryEmulatorResetReceipt {
|
|
248
|
+
readonly status: "reset";
|
|
249
|
+
readonly state: Extract<FactoryEmulatorSessionState, {
|
|
250
|
+
lifecycle: "pre-start";
|
|
251
|
+
}>;
|
|
252
|
+
}
|
|
253
|
+
export interface FactoryEmulatorSession {
|
|
254
|
+
start(): Promise<FactoryEmulatorStartReceipt>;
|
|
255
|
+
submit(submissionOrBatch: FactoryEmulatorInitialSubmission | readonly FactoryEmulatorInitialSubmission[] | FactoryEmulatorSubmissionBatch): Promise<FactoryEmulatorSubmitReceipt>;
|
|
256
|
+
advanceBy(durationMs: number): Promise<FactoryEmulatorAdvanceReceipt>;
|
|
257
|
+
advanceToNext(): Promise<FactoryEmulatorAdvanceReceipt>;
|
|
258
|
+
close(): Promise<FactoryEmulatorCloseReceipt>;
|
|
259
|
+
reset(): FactoryEmulatorResetReceipt;
|
|
260
|
+
state(): FactoryEmulatorSessionState;
|
|
261
|
+
status(): FactoryEmulatorSessionStatus;
|
|
262
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
export const DEFAULT_FACTORY_EMULATOR_LIMITS = Object.freeze({
|
|
2
|
+
maxCompletedDispatches: 1_000,
|
|
3
|
+
maxEvents: 10_000,
|
|
4
|
+
maxVirtualElapsedMs: 3_600_000,
|
|
5
|
+
maxZeroDurationBatches: 1_000,
|
|
6
|
+
maxSynchronousBatches: 100,
|
|
7
|
+
maxSynchronousWorkItems: 1_000,
|
|
8
|
+
});
|
|
9
|
+
export const FACTORY_EMULATOR_LIMIT_HARD_CAPS = Object.freeze({
|
|
10
|
+
maxCompletedDispatches: 100_000,
|
|
11
|
+
maxEvents: 1_000_000,
|
|
12
|
+
maxVirtualElapsedMs: 86_400_000,
|
|
13
|
+
maxZeroDurationBatches: 10_000,
|
|
14
|
+
maxSynchronousBatches: 10_000,
|
|
15
|
+
maxSynchronousWorkItems: 100_000,
|
|
16
|
+
});
|
|
17
|
+
export class FactoryEmulatorConfigurationError extends Error {
|
|
18
|
+
code = "invalid_configuration";
|
|
19
|
+
diagnostics;
|
|
20
|
+
constructor(diagnostics) {
|
|
21
|
+
super("Factory emulator session configuration is invalid.");
|
|
22
|
+
this.name = "FactoryEmulatorConfigurationError";
|
|
23
|
+
this.diagnostics = JSON.parse(JSON.stringify(diagnostics));
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export class FactoryEmulatorLifecycleError extends Error {
|
|
27
|
+
code = "invalid_lifecycle";
|
|
28
|
+
command;
|
|
29
|
+
lifecycle;
|
|
30
|
+
constructor(command, lifecycle) {
|
|
31
|
+
super(`Cannot ${command} an emulator session in ${lifecycle} lifecycle.`);
|
|
32
|
+
this.name = "FactoryEmulatorLifecycleError";
|
|
33
|
+
this.command = command;
|
|
34
|
+
this.lifecycle = lifecycle;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export class FactoryEmulatorPendingCommandError extends Error {
|
|
38
|
+
code = "pending_transaction";
|
|
39
|
+
attemptedCommand;
|
|
40
|
+
pendingCommand;
|
|
41
|
+
constructor(attemptedCommand, pendingCommand) {
|
|
42
|
+
super(`Cannot ${attemptedCommand} while ${pendingCommand} is awaiting the event sink.`);
|
|
43
|
+
this.name = "FactoryEmulatorPendingCommandError";
|
|
44
|
+
this.attemptedCommand = attemptedCommand;
|
|
45
|
+
this.pendingCommand = pendingCommand;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
export class FactoryEmulatorDurationError extends Error {
|
|
49
|
+
code = "invalid_duration";
|
|
50
|
+
durationMs;
|
|
51
|
+
constructor(durationMs) {
|
|
52
|
+
super("durationMs must be a non-negative safe integer.");
|
|
53
|
+
this.name = "FactoryEmulatorDurationError";
|
|
54
|
+
this.durationMs = durationMs;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export class FactoryEmulatorSubmissionError extends Error {
|
|
58
|
+
code = "invalid_submission";
|
|
59
|
+
diagnostics;
|
|
60
|
+
constructor(diagnostics) {
|
|
61
|
+
super("Factory emulator Work submission is invalid.");
|
|
62
|
+
this.name = "FactoryEmulatorSubmissionError";
|
|
63
|
+
this.diagnostics = JSON.parse(JSON.stringify(diagnostics));
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
export class FactoryEmulatorExecutionPausedError extends Error {
|
|
67
|
+
code = "execution_paused";
|
|
68
|
+
diagnostic;
|
|
69
|
+
constructor(diagnostic) {
|
|
70
|
+
super(`Factory emulator execution paused: ${diagnostic.kind}.`);
|
|
71
|
+
this.name = "FactoryEmulatorExecutionPausedError";
|
|
72
|
+
this.diagnostic = JSON.parse(JSON.stringify(diagnostic));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type FactoryEmulatorSession, type FactoryEmulatorSessionOptions } from "./session-contracts.js";
|
|
2
|
+
export * from "./session-contracts.js";
|
|
3
|
+
/** Creates one validated, caller-owned deterministic Factory emulator session. */
|
|
4
|
+
export declare function createFactoryEmulatorSession(options: FactoryEmulatorSessionOptions): FactoryEmulatorSession;
|