@agtlantis/core 0.5.0 → 0.6.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 (278) hide show
  1. package/README.md +18 -5
  2. package/dist/errors/index.d.ts +4 -0
  3. package/dist/errors/index.d.ts.map +1 -0
  4. package/dist/errors/index.js +3 -0
  5. package/dist/errors/index.js.map +1 -0
  6. package/dist/errors/types.d.ts +69 -0
  7. package/dist/errors/types.d.ts.map +1 -0
  8. package/dist/errors/types.js +116 -0
  9. package/dist/errors/types.js.map +1 -0
  10. package/dist/errors/utils.d.ts +17 -0
  11. package/dist/errors/utils.d.ts.map +1 -0
  12. package/dist/errors/utils.js +16 -0
  13. package/dist/errors/utils.js.map +1 -0
  14. package/dist/execution/constants.d.ts +7 -0
  15. package/dist/execution/constants.d.ts.map +1 -0
  16. package/dist/execution/constants.js +7 -0
  17. package/dist/execution/constants.js.map +1 -0
  18. package/dist/execution/index.d.ts +8 -0
  19. package/dist/execution/index.d.ts.map +1 -0
  20. package/dist/execution/index.js +7 -0
  21. package/dist/execution/index.js.map +1 -0
  22. package/dist/execution/mapping.d.ts +17 -0
  23. package/dist/execution/mapping.d.ts.map +1 -0
  24. package/dist/execution/mapping.js +197 -0
  25. package/dist/execution/mapping.js.map +1 -0
  26. package/dist/execution/shared.d.ts +86 -0
  27. package/dist/execution/shared.d.ts.map +1 -0
  28. package/dist/execution/shared.js +100 -0
  29. package/dist/execution/shared.js.map +1 -0
  30. package/dist/execution/simple-host.d.ts +56 -0
  31. package/dist/execution/simple-host.d.ts.map +1 -0
  32. package/dist/execution/simple-host.js +126 -0
  33. package/dist/execution/simple-host.js.map +1 -0
  34. package/dist/execution/streaming-host.d.ts +79 -0
  35. package/dist/execution/streaming-host.d.ts.map +1 -0
  36. package/dist/execution/streaming-host.js +276 -0
  37. package/dist/execution/streaming-host.js.map +1 -0
  38. package/dist/execution/testing/fixtures.d.ts +67 -0
  39. package/dist/execution/testing/fixtures.d.ts.map +1 -0
  40. package/dist/execution/testing/fixtures.js +145 -0
  41. package/dist/execution/testing/fixtures.js.map +1 -0
  42. package/dist/execution/testing/helpers.d.ts +218 -0
  43. package/dist/execution/testing/helpers.d.ts.map +1 -0
  44. package/dist/execution/testing/helpers.js +327 -0
  45. package/dist/execution/testing/helpers.js.map +1 -0
  46. package/dist/execution/testing/host-configs.d.ts +56 -0
  47. package/dist/execution/testing/host-configs.d.ts.map +1 -0
  48. package/dist/execution/testing/host-configs.js +154 -0
  49. package/dist/execution/testing/host-configs.js.map +1 -0
  50. package/dist/execution/testing/vitest-assertions.d.ts +102 -0
  51. package/dist/execution/testing/vitest-assertions.d.ts.map +1 -0
  52. package/dist/execution/testing/vitest-assertions.js +142 -0
  53. package/dist/execution/testing/vitest-assertions.js.map +1 -0
  54. package/dist/execution/types.d.ts +432 -0
  55. package/dist/execution/types.d.ts.map +1 -0
  56. package/dist/execution/types.js +2 -0
  57. package/dist/execution/types.js.map +1 -0
  58. package/dist/execution/utils.d.ts +68 -0
  59. package/dist/execution/utils.d.ts.map +1 -0
  60. package/dist/execution/utils.js +93 -0
  61. package/dist/execution/utils.js.map +1 -0
  62. package/dist/index.d.ts +10 -1506
  63. package/dist/index.d.ts.map +1 -0
  64. package/dist/index.js +9 -2979
  65. package/dist/index.js.map +1 -1
  66. package/dist/observability/index.d.ts +4 -0
  67. package/dist/observability/index.d.ts.map +1 -0
  68. package/dist/observability/index.js +2 -0
  69. package/dist/observability/index.js.map +1 -0
  70. package/dist/observability/logger.d.ts +161 -0
  71. package/dist/observability/logger.d.ts.map +1 -0
  72. package/dist/observability/logger.js +31 -0
  73. package/dist/observability/logger.js.map +1 -0
  74. package/dist/observability/types.d.ts +46 -0
  75. package/dist/observability/types.d.ts.map +1 -0
  76. package/dist/observability/types.js +2 -0
  77. package/dist/observability/types.js.map +1 -0
  78. package/dist/patterns/index.d.ts +2 -0
  79. package/dist/patterns/index.d.ts.map +1 -0
  80. package/dist/patterns/index.js +2 -0
  81. package/dist/patterns/index.js.map +1 -0
  82. package/dist/patterns/progressive/index.d.ts +2 -0
  83. package/dist/patterns/progressive/index.d.ts.map +1 -0
  84. package/dist/patterns/progressive/index.js +2 -0
  85. package/dist/patterns/progressive/index.js.map +1 -0
  86. package/dist/patterns/progressive/progressive-pattern.d.ts +174 -0
  87. package/dist/patterns/progressive/progressive-pattern.d.ts.map +1 -0
  88. package/dist/patterns/progressive/progressive-pattern.js +260 -0
  89. package/dist/patterns/progressive/progressive-pattern.js.map +1 -0
  90. package/dist/pricing/calculator.d.ts +71 -0
  91. package/dist/pricing/calculator.d.ts.map +1 -0
  92. package/dist/pricing/calculator.js +127 -0
  93. package/dist/pricing/calculator.js.map +1 -0
  94. package/dist/pricing/config.d.ts +61 -0
  95. package/dist/pricing/config.d.ts.map +1 -0
  96. package/dist/pricing/config.js +87 -0
  97. package/dist/pricing/config.js.map +1 -0
  98. package/dist/pricing/defaults.d.ts +29 -0
  99. package/dist/pricing/defaults.d.ts.map +1 -0
  100. package/dist/pricing/defaults.js +139 -0
  101. package/dist/pricing/defaults.js.map +1 -0
  102. package/dist/pricing/index.d.ts +40 -0
  103. package/dist/pricing/index.d.ts.map +1 -0
  104. package/dist/pricing/index.js +43 -0
  105. package/dist/pricing/index.js.map +1 -0
  106. package/dist/pricing/types.d.ts +96 -0
  107. package/dist/pricing/types.d.ts.map +1 -0
  108. package/dist/pricing/types.js +7 -0
  109. package/dist/pricing/types.js.map +1 -0
  110. package/dist/pricing/validator.d.ts +55 -0
  111. package/dist/pricing/validator.d.ts.map +1 -0
  112. package/dist/pricing/validator.js +84 -0
  113. package/dist/pricing/validator.js.map +1 -0
  114. package/dist/prompt/errors.d.ts +112 -0
  115. package/dist/prompt/errors.d.ts.map +1 -0
  116. package/dist/prompt/errors.js +174 -0
  117. package/dist/prompt/errors.js.map +1 -0
  118. package/dist/prompt/file-prompt-repository.d.ts +80 -0
  119. package/dist/prompt/file-prompt-repository.d.ts.map +1 -0
  120. package/dist/prompt/file-prompt-repository.js +287 -0
  121. package/dist/prompt/file-prompt-repository.js.map +1 -0
  122. package/dist/prompt/index.d.ts +34 -0
  123. package/dist/prompt/index.d.ts.map +1 -0
  124. package/dist/prompt/index.js +37 -0
  125. package/dist/prompt/index.js.map +1 -0
  126. package/dist/prompt/prompt-template.d.ts +64 -0
  127. package/dist/prompt/prompt-template.d.ts.map +1 -0
  128. package/dist/prompt/prompt-template.js +90 -0
  129. package/dist/prompt/prompt-template.js.map +1 -0
  130. package/dist/prompt/template.d.ts +23 -0
  131. package/dist/prompt/template.d.ts.map +1 -0
  132. package/dist/prompt/template.js +70 -0
  133. package/dist/prompt/template.js.map +1 -0
  134. package/dist/prompt/types.d.ts +148 -0
  135. package/dist/prompt/types.d.ts.map +1 -0
  136. package/dist/prompt/types.js +7 -0
  137. package/dist/prompt/types.js.map +1 -0
  138. package/dist/provider/base-file-manager.d.ts +14 -0
  139. package/dist/provider/base-file-manager.d.ts.map +1 -0
  140. package/dist/provider/base-file-manager.js +91 -0
  141. package/dist/provider/base-file-manager.js.map +1 -0
  142. package/dist/provider/base-provider.d.ts +41 -0
  143. package/dist/provider/base-provider.d.ts.map +1 -0
  144. package/dist/provider/base-provider.js +21 -0
  145. package/dist/provider/base-provider.js.map +1 -0
  146. package/dist/provider/file-cache.d.ts +14 -0
  147. package/dist/provider/file-cache.d.ts.map +1 -0
  148. package/dist/provider/file-cache.js +29 -0
  149. package/dist/provider/file-cache.js.map +1 -0
  150. package/dist/provider/file-source.d.ts +32 -0
  151. package/dist/provider/file-source.d.ts.map +1 -0
  152. package/dist/provider/file-source.js +180 -0
  153. package/dist/provider/file-source.js.map +1 -0
  154. package/dist/provider/file-utils.d.ts +5 -0
  155. package/dist/provider/file-utils.d.ts.map +1 -0
  156. package/dist/provider/file-utils.js +15 -0
  157. package/dist/provider/file-utils.js.map +1 -0
  158. package/dist/provider/google/factory.d.ts +107 -0
  159. package/dist/provider/google/factory.d.ts.map +1 -0
  160. package/dist/provider/google/factory.js +143 -0
  161. package/dist/provider/google/factory.js.map +1 -0
  162. package/dist/provider/google/file-manager.d.ts +10 -0
  163. package/dist/provider/google/file-manager.d.ts.map +1 -0
  164. package/dist/provider/google/file-manager.js +93 -0
  165. package/dist/provider/google/file-manager.js.map +1 -0
  166. package/dist/provider/google/index.d.ts +8 -0
  167. package/dist/provider/google/index.d.ts.map +1 -0
  168. package/dist/provider/google/index.js +10 -0
  169. package/dist/provider/google/index.js.map +1 -0
  170. package/dist/provider/hash.d.ts +3 -0
  171. package/dist/provider/hash.d.ts.map +1 -0
  172. package/dist/provider/hash.js +34 -0
  173. package/dist/provider/hash.js.map +1 -0
  174. package/dist/provider/index.d.ts +10 -0
  175. package/dist/provider/index.d.ts.map +1 -0
  176. package/dist/provider/index.js +12 -0
  177. package/dist/provider/index.js.map +1 -0
  178. package/dist/provider/noop-file-manager.d.ts +9 -0
  179. package/dist/provider/noop-file-manager.d.ts.map +1 -0
  180. package/dist/provider/noop-file-manager.js +28 -0
  181. package/dist/provider/noop-file-manager.js.map +1 -0
  182. package/dist/provider/openai/factory.d.ts +67 -0
  183. package/dist/provider/openai/factory.d.ts.map +1 -0
  184. package/dist/provider/openai/factory.js +100 -0
  185. package/dist/provider/openai/factory.js.map +1 -0
  186. package/dist/provider/openai/file-manager.d.ts +17 -0
  187. package/dist/provider/openai/file-manager.d.ts.map +1 -0
  188. package/dist/provider/openai/file-manager.js +108 -0
  189. package/dist/provider/openai/file-manager.js.map +1 -0
  190. package/dist/provider/openai/index.d.ts +8 -0
  191. package/dist/provider/openai/index.d.ts.map +1 -0
  192. package/dist/provider/openai/index.js +8 -0
  193. package/dist/provider/openai/index.js.map +1 -0
  194. package/dist/provider/types.d.ts +105 -0
  195. package/dist/provider/types.d.ts.map +1 -0
  196. package/dist/provider/types.js +19 -0
  197. package/dist/provider/types.js.map +1 -0
  198. package/dist/session/index.d.ts +7 -0
  199. package/dist/session/index.d.ts.map +1 -0
  200. package/dist/session/index.js +5 -0
  201. package/dist/session/index.js.map +1 -0
  202. package/dist/session/simple-session.d.ts +98 -0
  203. package/dist/session/simple-session.d.ts.map +1 -0
  204. package/dist/session/simple-session.js +299 -0
  205. package/dist/session/simple-session.js.map +1 -0
  206. package/dist/session/streaming-session.d.ts +90 -0
  207. package/dist/session/streaming-session.d.ts.map +1 -0
  208. package/dist/session/streaming-session.js +151 -0
  209. package/dist/session/streaming-session.js.map +1 -0
  210. package/dist/session/test-utils.d.ts +19 -0
  211. package/dist/session/test-utils.d.ts.map +1 -0
  212. package/dist/session/test-utils.js +65 -0
  213. package/dist/session/test-utils.js.map +1 -0
  214. package/dist/session/types.d.ts +219 -0
  215. package/dist/session/types.d.ts.map +1 -0
  216. package/dist/session/types.js +181 -0
  217. package/dist/session/types.js.map +1 -0
  218. package/dist/session/usage-extractors.d.ts +7 -0
  219. package/dist/session/usage-extractors.d.ts.map +1 -0
  220. package/dist/session/usage-extractors.js +71 -0
  221. package/dist/session/usage-extractors.js.map +1 -0
  222. package/dist/testing/fixtures.d.ts +34 -0
  223. package/dist/testing/fixtures.d.ts.map +1 -0
  224. package/dist/testing/fixtures.js +65 -0
  225. package/dist/testing/fixtures.js.map +1 -0
  226. package/dist/testing/helpers.d.ts +20 -0
  227. package/dist/testing/helpers.d.ts.map +1 -0
  228. package/dist/testing/helpers.js +32 -0
  229. package/dist/testing/helpers.js.map +1 -0
  230. package/dist/testing/index.d.ts +7 -519
  231. package/dist/testing/index.d.ts.map +1 -0
  232. package/dist/testing/index.js +21 -2123
  233. package/dist/testing/index.js.map +1 -1
  234. package/dist/testing/mock-provider.d.ts +79 -0
  235. package/dist/testing/mock-provider.d.ts.map +1 -0
  236. package/dist/testing/mock-provider.js +152 -0
  237. package/dist/testing/mock-provider.js.map +1 -0
  238. package/dist/testing/mock.d.ts +29 -0
  239. package/dist/testing/mock.d.ts.map +1 -0
  240. package/dist/testing/mock.js +154 -0
  241. package/dist/testing/mock.js.map +1 -0
  242. package/dist/testing/test-execution.d.ts +14 -0
  243. package/dist/testing/test-execution.d.ts.map +1 -0
  244. package/dist/testing/test-execution.js +108 -0
  245. package/dist/testing/test-execution.js.map +1 -0
  246. package/dist/utils/deep-merge.d.ts +6 -0
  247. package/dist/utils/deep-merge.d.ts.map +1 -0
  248. package/dist/utils/deep-merge.js +24 -0
  249. package/dist/utils/deep-merge.js.map +1 -0
  250. package/dist/validation/errors.d.ts +28 -0
  251. package/dist/validation/errors.d.ts.map +1 -0
  252. package/dist/validation/errors.js +38 -0
  253. package/dist/validation/errors.js.map +1 -0
  254. package/dist/validation/index.d.ts +5 -0
  255. package/dist/validation/index.d.ts.map +1 -0
  256. package/dist/validation/index.js +4 -0
  257. package/dist/validation/index.js.map +1 -0
  258. package/dist/validation/types.d.ts +49 -0
  259. package/dist/validation/types.d.ts.map +1 -0
  260. package/dist/validation/types.js +2 -0
  261. package/dist/validation/types.js.map +1 -0
  262. package/dist/validation/validation-history.d.ts +12 -0
  263. package/dist/validation/validation-history.d.ts.map +1 -0
  264. package/dist/validation/validation-history.js +29 -0
  265. package/dist/validation/validation-history.js.map +1 -0
  266. package/dist/validation/with-validation.d.ts +38 -0
  267. package/dist/validation/with-validation.d.ts.map +1 -0
  268. package/dist/validation/with-validation.js +58 -0
  269. package/dist/validation/with-validation.js.map +1 -0
  270. package/package.json +71 -75
  271. package/dist/base-provider-2TTw5HAa.d.cts +0 -1254
  272. package/dist/base-provider-2TTw5HAa.d.ts +0 -1254
  273. package/dist/index.cjs +0 -3085
  274. package/dist/index.cjs.map +0 -1
  275. package/dist/index.d.cts +0 -1506
  276. package/dist/testing/index.cjs +0 -2167
  277. package/dist/testing/index.cjs.map +0 -1
  278. package/dist/testing/index.d.cts +0 -520
@@ -0,0 +1,276 @@
1
+ import { ERRORS } from './constants.js';
2
+ import { combineSignals, Deferred } from './utils.js';
3
+ import { isAbortError, normalizeError, createHookRunner } from './shared.js';
4
+ /**
5
+ * Streaming execution host that uses StreamingSession.
6
+ * Starts execution eagerly on construction - events are buffered automatically.
7
+ *
8
+ * @typeParam TEvent - User's pure domain event type with required `type` field (metrics added automatically)
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * const execution = new StreamingExecutionHost(
13
+ * () => new StreamingSession({
14
+ * defaultLanguageModel: provider.model,
15
+ * fileManager: new GoogleFileManager(apiKey),
16
+ * }),
17
+ * async function* (session) {
18
+ * session.onDone(() => session.fileManager.clear());
19
+ * const result = await session.generateText({ prompt: 'Hello' });
20
+ * yield session.emit({ type: 'progress', message: 'Working...' });
21
+ * return session.done(result.text);
22
+ * }
23
+ * );
24
+ * // ↑ Execution already started, events being buffered
25
+ *
26
+ * // Option 1: Stream events (buffered + real-time)
27
+ * for await (const event of execution.stream()) {
28
+ * console.log(event.type, event.metrics.elapsedMs);
29
+ * }
30
+ * const result = await execution.result();
31
+ *
32
+ * // Option 2: Skip streaming, events available in result
33
+ * const result = await execution.result();
34
+ * console.log(`Received ${result.events.length} events`);
35
+ *
36
+ * if (result.status === 'succeeded') {
37
+ * console.log(result.value);
38
+ * }
39
+ * ```
40
+ */
41
+ export class StreamingExecutionHost {
42
+ createSession;
43
+ generator;
44
+ abortController = new AbortController();
45
+ effectiveSignal;
46
+ consumerPromise;
47
+ eventBuffer = [];
48
+ subscribers = new Set();
49
+ completed = false;
50
+ cleaned = false;
51
+ hookRunner = null;
52
+ cancelRequested = false;
53
+ extractedOutcome = null;
54
+ extractedSummary = null;
55
+ constructor(createSession, generator, userSignal) {
56
+ this.createSession = createSession;
57
+ this.generator = generator;
58
+ // Combine user signal with internal controller for dual cancellation support
59
+ this.effectiveSignal = userSignal
60
+ ? combineSignals(userSignal, this.abortController.signal)
61
+ : this.abortController.signal;
62
+ // Eager start! Begin consuming immediately
63
+ this.consumerPromise = this.startConsuming();
64
+ }
65
+ hasDataField(event) {
66
+ return 'data' in event && event.data !== undefined;
67
+ }
68
+ hasSummaryField(event) {
69
+ return 'summary' in event && event.summary !== undefined;
70
+ }
71
+ hasErrorField(event) {
72
+ return 'error' in event && event.error instanceof Error;
73
+ }
74
+ extractResultAndMetadata(event) {
75
+ const isCompleteOrError = event.type === 'complete' || event.type === 'error';
76
+ if (!isCompleteOrError) {
77
+ return;
78
+ }
79
+ // Extract outcome (error takes precedence if both present)
80
+ if (this.hasErrorField(event)) {
81
+ this.extractedOutcome = { type: 'error', error: event.error };
82
+ }
83
+ else if (this.hasDataField(event)) {
84
+ this.extractedOutcome = { type: 'result', value: event.data };
85
+ }
86
+ if (this.hasSummaryField(event)) {
87
+ this.extractedSummary = event.summary;
88
+ }
89
+ }
90
+ notifySubscribers(event) {
91
+ this.subscribers.forEach(fn => fn(event));
92
+ }
93
+ async startConsuming() {
94
+ // Pass the effective signal to session for AI SDK cancellation
95
+ const session = this.createSession(this.effectiveSignal);
96
+ this.hookRunner = createHookRunner(() => session.runOnDoneHooks());
97
+ const gen = this.generator(session);
98
+ try {
99
+ let next = await gen.next();
100
+ while (!next.done) {
101
+ // Buffer and notify
102
+ this.eventBuffer.push(next.value);
103
+ this.notifySubscribers(next.value);
104
+ // Auto-abort after terminal events to prevent further AI calls
105
+ const isTerminal = next.value.type === 'complete' || next.value.type === 'error';
106
+ if (isTerminal) {
107
+ this.extractResultAndMetadata(next.value);
108
+ this.abortController.abort();
109
+ break;
110
+ }
111
+ if (this.abortController.signal.aborted) {
112
+ break;
113
+ }
114
+ next = await gen.next();
115
+ }
116
+ // Handle return value from generator
117
+ if (next.done && next.value !== undefined) {
118
+ const finalEvent = await Promise.resolve(next.value);
119
+ this.eventBuffer.push(finalEvent);
120
+ this.notifySubscribers(finalEvent);
121
+ this.extractResultAndMetadata(finalEvent);
122
+ // Auto-abort after terminal event from return statement
123
+ const isTerminal = finalEvent.type === 'complete' || finalEvent.type === 'error';
124
+ if (isTerminal) {
125
+ this.abortController.abort();
126
+ }
127
+ }
128
+ return this.buildResult(session);
129
+ }
130
+ catch (error) {
131
+ const errorObj = normalizeError(error);
132
+ // AbortError is treated as normal cancellation
133
+ if (isAbortError(error, this.abortController.signal)) {
134
+ return {
135
+ success: false,
136
+ aborted: true,
137
+ error: errorObj,
138
+ summary: await session.getSummary(),
139
+ };
140
+ }
141
+ // Generate error event via session.fail()
142
+ const errorEvent = await session.fail(errorObj);
143
+ this.eventBuffer.push(errorEvent);
144
+ this.notifySubscribers(errorEvent);
145
+ this.extractResultAndMetadata(errorEvent);
146
+ // Auto-abort after error event
147
+ this.abortController.abort();
148
+ return this.buildResult(session);
149
+ }
150
+ finally {
151
+ this.completed = true;
152
+ // Note: Don't clear subscribers here - each stream() consumer
153
+ // cleans up its own subscriber in its finally block to avoid orphaning
154
+ await this.hookRunner?.ensureRun();
155
+ await gen.return(undefined);
156
+ }
157
+ }
158
+ async buildResult(session) {
159
+ const summary = this.extractedSummary ?? await session.getSummary();
160
+ // Use discriminated union for clean pattern matching
161
+ if (this.extractedOutcome?.type === 'error') {
162
+ return {
163
+ success: false,
164
+ aborted: false,
165
+ error: this.extractedOutcome.error,
166
+ summary,
167
+ };
168
+ }
169
+ if (this.extractedOutcome?.type === 'result') {
170
+ return {
171
+ success: true,
172
+ result: this.extractedOutcome.value,
173
+ summary,
174
+ };
175
+ }
176
+ // No result extracted - likely canceled or abnormal termination
177
+ return {
178
+ success: false,
179
+ aborted: true,
180
+ error: new Error(ERRORS.NO_RESULT),
181
+ summary,
182
+ };
183
+ }
184
+ /**
185
+ * Get the event stream.
186
+ * Returns buffered events first, then real-time events.
187
+ * Can be called multiple times - replays buffer each time.
188
+ */
189
+ async *stream() {
190
+ // 1. Yield buffered events first
191
+ let index = 0;
192
+ while (index < this.eventBuffer.length) {
193
+ yield this.eventBuffer[index++];
194
+ }
195
+ // 2. If completed, we're done
196
+ if (this.completed) {
197
+ return;
198
+ }
199
+ // 3. Subscribe for real-time events using Deferred for clean async coordination
200
+ const queue = [];
201
+ let pending = new Deferred();
202
+ const subscriber = (event) => {
203
+ queue.push(event);
204
+ pending.resolve();
205
+ };
206
+ this.subscribers.add(subscriber);
207
+ try {
208
+ while (!this.completed || queue.length > 0) {
209
+ if (queue.length > 0) {
210
+ yield queue.shift();
211
+ }
212
+ else if (!this.completed) {
213
+ await pending.promise;
214
+ pending = new Deferred(); // Reset for next wait
215
+ }
216
+ }
217
+ }
218
+ finally {
219
+ this.subscribers.delete(subscriber);
220
+ }
221
+ }
222
+ cancel() {
223
+ this.cancelRequested = true;
224
+ this.abortController.abort();
225
+ }
226
+ async cleanup() {
227
+ if (this.cleaned) {
228
+ return;
229
+ }
230
+ this.cleaned = true;
231
+ // Cancel if still running
232
+ if (!this.completed) {
233
+ this.cancel();
234
+ await this.consumerPromise.catch(() => { });
235
+ }
236
+ // Clean up resources
237
+ this.subscribers.clear();
238
+ await this.hookRunner?.ensureRun();
239
+ }
240
+ async [Symbol.asyncDispose]() {
241
+ await this.cleanup();
242
+ }
243
+ /**
244
+ * Get the execution result with status, summary, and all events.
245
+ * Never throws - returns a discriminated union with status.
246
+ */
247
+ async result() {
248
+ const internal = await this.consumerPromise;
249
+ const events = Object.freeze([...this.eventBuffer]);
250
+ // Success state
251
+ if (internal.success) {
252
+ return {
253
+ status: 'succeeded',
254
+ value: internal.result,
255
+ summary: internal.summary,
256
+ events,
257
+ };
258
+ }
259
+ // Canceled state
260
+ if (this.cancelRequested || internal.aborted) {
261
+ return {
262
+ status: 'canceled',
263
+ summary: internal.summary,
264
+ events,
265
+ };
266
+ }
267
+ // Failed state
268
+ return {
269
+ status: 'failed',
270
+ error: internal.error,
271
+ summary: internal.summary,
272
+ events,
273
+ };
274
+ }
275
+ }
276
+ //# sourceMappingURL=streaming-host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming-host.js","sourceRoot":"","sources":["../../src/execution/streaming-host.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Test fixtures for execution module tests.
3
+ * Provides mock factories and session factories for testing.
4
+ *
5
+ * These fixtures are framework-agnostic (no vitest/jest dependency).
6
+ * Pass your own mock function (vi.fn, jest.fn, etc.) or use the noop default.
7
+ */
8
+ import type { LanguageModel, LanguageModelUsage } from 'ai';
9
+ import type { CompletionEvent } from '../types.js';
10
+ import type { FileManager } from '../../provider/types.js';
11
+ import type { Logger } from '../../observability/logger.js';
12
+ import { SimpleSession } from '../../session/simple-session.js';
13
+ import { StreamingSession } from '../../session/streaming-session.js';
14
+ export type MockFn = (...args: unknown[]) => unknown;
15
+ export type MockFnFactory = () => MockFn;
16
+ export declare const TEST_PROVIDER_TYPE: 'google';
17
+ /**
18
+ * Base test event — the domain event users emit via session.emit().
19
+ */
20
+ export interface TestBaseEvent {
21
+ type: string;
22
+ message?: string;
23
+ data?: string;
24
+ }
25
+ /**
26
+ * Full test event union including CompletionEvent.
27
+ * ExtractResult<TestEvent> = string, EmittableEventInput<TestEvent> = TestBaseEvent.
28
+ */
29
+ export type TestEvent = TestBaseEvent | CompletionEvent<string>;
30
+ export interface CreateMockModelOptions {
31
+ mockFn?: MockFnFactory;
32
+ }
33
+ export declare function createMockModel(options?: CreateMockModelOptions): LanguageModel;
34
+ export interface CreateMockFileManagerOptions {
35
+ mockFn?: MockFnFactory;
36
+ }
37
+ export declare function createMockFileManager(options?: CreateMockFileManagerOptions): FileManager;
38
+ export interface CreateMockLoggerOptions {
39
+ mockFn?: MockFnFactory;
40
+ }
41
+ export declare function createMockLogger(options?: CreateMockLoggerOptions): Logger;
42
+ export declare function createMockUsage(overrides?: Partial<LanguageModelUsage>): LanguageModelUsage;
43
+ export interface CreateSessionFactoryOptions {
44
+ mockFn?: MockFnFactory;
45
+ logger?: Logger;
46
+ }
47
+ export declare function createSimpleSessionFactory(options?: CreateSessionFactoryOptions): (signal?: AbortSignal) => SimpleSession;
48
+ export declare function createStreamingSessionFactory<TEvent extends {
49
+ type: string;
50
+ } = TestEvent>(options?: CreateSessionFactoryOptions): () => StreamingSession<TEvent>;
51
+ export interface CreateStreamingSessionFactoryWithSignalOptions extends CreateSessionFactoryOptions {
52
+ onSignalCapture?: (signal: AbortSignal | undefined) => void;
53
+ }
54
+ export declare function createStreamingSessionFactoryWithSignal<TEvent extends {
55
+ type: string;
56
+ } = TestEvent>(options?: CreateStreamingSessionFactoryWithSignalOptions): (signal?: AbortSignal) => StreamingSession<TEvent>;
57
+ export declare function collectEvents<T>(stream: AsyncIterable<T>): Promise<T[]>;
58
+ /**
59
+ * Creates a controllable promise for testing async flows
60
+ */
61
+ export declare function createControllablePromise<T = void>(): {
62
+ promise: Promise<T>;
63
+ resolve: (value: T) => void;
64
+ reject: (error: Error) => void;
65
+ };
66
+ export { createAbortScenario, createAlreadyAbortedSignal, type AbortScenario, createSimpleGenerator, createErrorGenerator, createCancelableGenerator, createCancelableFunction, createDelayedGenerator, createSlowGenerator, collectStreamAsync, createNeverEndingGenerator, createOrderTrackingLogger, type LoggerEventType, } from './helpers.js';
67
+ //# sourceMappingURL=fixtures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../../src/execution/testing/fixtures.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Test fixtures for execution module tests.
3
+ * Provides mock factories and session factories for testing.
4
+ *
5
+ * These fixtures are framework-agnostic (no vitest/jest dependency).
6
+ * Pass your own mock function (vi.fn, jest.fn, etc.) or use the noop default.
7
+ */
8
+ import { SimpleSession } from '../../session/simple-session.js';
9
+ import { StreamingSession } from '../../session/streaming-session.js';
10
+ export const TEST_PROVIDER_TYPE = 'google';
11
+ // ============================================================================
12
+ // Default noop mock factory
13
+ // ============================================================================
14
+ const noop = () => { };
15
+ const noopFactory = () => noop;
16
+ function createNoopWithReturn(value) {
17
+ return () => value;
18
+ }
19
+ function createNoopAsync(value) {
20
+ return () => Promise.resolve(value);
21
+ }
22
+ export function createMockModel(options = {}) {
23
+ const { mockFn = noopFactory } = options;
24
+ return {
25
+ specificationVersion: 'v1',
26
+ provider: 'test-provider',
27
+ modelId: 'test-model',
28
+ defaultObjectGenerationMode: 'json',
29
+ doGenerate: mockFn(),
30
+ doStream: mockFn(),
31
+ };
32
+ }
33
+ export function createMockFileManager(options = {}) {
34
+ const { mockFn } = options;
35
+ if (mockFn) {
36
+ return {
37
+ upload: mockFn(),
38
+ delete: mockFn(),
39
+ clear: mockFn(),
40
+ getUploadedFiles: mockFn(),
41
+ };
42
+ }
43
+ // Default noop implementation with proper return values
44
+ return {
45
+ upload: createNoopAsync([]),
46
+ delete: createNoopAsync(undefined),
47
+ clear: createNoopAsync(undefined),
48
+ getUploadedFiles: createNoopWithReturn([]),
49
+ };
50
+ }
51
+ export function createMockLogger(options = {}) {
52
+ const { mockFn = noopFactory } = options;
53
+ return {
54
+ onLLMCallStart: mockFn(),
55
+ onLLMCallEnd: mockFn(),
56
+ onExecutionStart: mockFn(),
57
+ onExecutionEmit: mockFn(),
58
+ onExecutionDone: mockFn(),
59
+ onExecutionError: mockFn(),
60
+ };
61
+ }
62
+ export function createMockUsage(overrides = {}) {
63
+ return {
64
+ inputTokens: 100,
65
+ outputTokens: 50,
66
+ totalTokens: 150,
67
+ inputTokenDetails: {
68
+ noCacheTokens: 100,
69
+ cacheReadTokens: 0,
70
+ cacheWriteTokens: 0,
71
+ },
72
+ outputTokenDetails: {
73
+ textTokens: 50,
74
+ reasoningTokens: 0,
75
+ },
76
+ ...overrides,
77
+ };
78
+ }
79
+ export function createSimpleSessionFactory(options = {}) {
80
+ const { mockFn, logger } = options;
81
+ return (signal) => new SimpleSession({
82
+ defaultLanguageModel: createMockModel({ mockFn }),
83
+ providerType: TEST_PROVIDER_TYPE,
84
+ fileManager: createMockFileManager({ mockFn }),
85
+ signal,
86
+ logger,
87
+ });
88
+ }
89
+ export function createStreamingSessionFactory(options = {}) {
90
+ const { mockFn, logger } = options;
91
+ return () => new StreamingSession({
92
+ defaultLanguageModel: createMockModel({ mockFn }),
93
+ providerType: TEST_PROVIDER_TYPE,
94
+ fileManager: createMockFileManager({ mockFn }),
95
+ logger,
96
+ });
97
+ }
98
+ export function createStreamingSessionFactoryWithSignal(options = {}) {
99
+ const { mockFn, logger, onSignalCapture } = options;
100
+ return (signal) => {
101
+ onSignalCapture?.(signal);
102
+ return new StreamingSession({
103
+ defaultLanguageModel: createMockModel({ mockFn }),
104
+ providerType: TEST_PROVIDER_TYPE,
105
+ fileManager: createMockFileManager({ mockFn }),
106
+ signal,
107
+ logger,
108
+ });
109
+ };
110
+ }
111
+ // ============================================================================
112
+ // Utilities
113
+ // ============================================================================
114
+ export async function collectEvents(stream) {
115
+ const events = [];
116
+ for await (const event of stream) {
117
+ events.push(event);
118
+ }
119
+ return events;
120
+ }
121
+ /**
122
+ * Creates a controllable promise for testing async flows
123
+ */
124
+ export function createControllablePromise() {
125
+ let resolve;
126
+ let reject;
127
+ const promise = new Promise((res, rej) => {
128
+ resolve = res;
129
+ reject = rej;
130
+ });
131
+ return { promise, resolve, reject };
132
+ }
133
+ // ============================================================================
134
+ // Re-export Test Helpers
135
+ // ============================================================================
136
+ export {
137
+ // Abort/Signal helpers
138
+ createAbortScenario, createAlreadyAbortedSignal,
139
+ // Generator helpers
140
+ createSimpleGenerator, createErrorGenerator, createCancelableGenerator, createCancelableFunction, createDelayedGenerator,
141
+ // Race condition & concurrency helpers
142
+ createSlowGenerator, collectStreamAsync, createNeverEndingGenerator,
143
+ // Logger helpers
144
+ createOrderTrackingLogger, } from './helpers.js';
145
+ //# sourceMappingURL=fixtures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../../../src/execution/testing/fixtures.ts"],"names":[],"mappings":"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"}