@agnt5/sdk 0.2.1

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 (126) hide show
  1. package/README.md +183 -0
  2. package/dist/__tests__/integration/helpers.d.ts +41 -0
  3. package/dist/__tests__/integration/helpers.d.ts.map +1 -0
  4. package/dist/__tests__/integration/helpers.js +78 -0
  5. package/dist/__tests__/integration/helpers.js.map +1 -0
  6. package/dist/agent.d.ts +260 -0
  7. package/dist/agent.d.ts.map +1 -0
  8. package/dist/agent.js +493 -0
  9. package/dist/agent.js.map +1 -0
  10. package/dist/async-context.d.ts +57 -0
  11. package/dist/async-context.d.ts.map +1 -0
  12. package/dist/async-context.js +52 -0
  13. package/dist/async-context.js.map +1 -0
  14. package/dist/batch.d.ts +116 -0
  15. package/dist/batch.d.ts.map +1 -0
  16. package/dist/batch.js +98 -0
  17. package/dist/batch.js.map +1 -0
  18. package/dist/chat.d.ts +137 -0
  19. package/dist/chat.d.ts.map +1 -0
  20. package/dist/chat.js +278 -0
  21. package/dist/chat.js.map +1 -0
  22. package/dist/client.d.ts +394 -0
  23. package/dist/client.d.ts.map +1 -0
  24. package/dist/client.js +757 -0
  25. package/dist/client.js.map +1 -0
  26. package/dist/context.d.ts +47 -0
  27. package/dist/context.d.ts.map +1 -0
  28. package/dist/context.js +244 -0
  29. package/dist/context.js.map +1 -0
  30. package/dist/errors.d.ts +148 -0
  31. package/dist/errors.d.ts.map +1 -0
  32. package/dist/errors.js +201 -0
  33. package/dist/errors.js.map +1 -0
  34. package/dist/eval.d.ts +242 -0
  35. package/dist/eval.d.ts.map +1 -0
  36. package/dist/eval.js +452 -0
  37. package/dist/eval.js.map +1 -0
  38. package/dist/event-emitter.d.ts +28 -0
  39. package/dist/event-emitter.d.ts.map +1 -0
  40. package/dist/event-emitter.js +79 -0
  41. package/dist/event-emitter.js.map +1 -0
  42. package/dist/events.d.ts +285 -0
  43. package/dist/events.d.ts.map +1 -0
  44. package/dist/events.js +256 -0
  45. package/dist/events.js.map +1 -0
  46. package/dist/function.d.ts +61 -0
  47. package/dist/function.d.ts.map +1 -0
  48. package/dist/function.js +78 -0
  49. package/dist/function.js.map +1 -0
  50. package/dist/index.d.ts +67 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +80 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/lm.d.ts +301 -0
  55. package/dist/lm.d.ts.map +1 -0
  56. package/dist/lm.js +283 -0
  57. package/dist/lm.js.map +1 -0
  58. package/dist/logging.d.ts +68 -0
  59. package/dist/logging.d.ts.map +1 -0
  60. package/dist/logging.js +165 -0
  61. package/dist/logging.js.map +1 -0
  62. package/dist/mcp-server.d.ts +98 -0
  63. package/dist/mcp-server.d.ts.map +1 -0
  64. package/dist/mcp-server.js +307 -0
  65. package/dist/mcp-server.js.map +1 -0
  66. package/dist/mcp.d.ts +73 -0
  67. package/dist/mcp.d.ts.map +1 -0
  68. package/dist/mcp.js +224 -0
  69. package/dist/mcp.js.map +1 -0
  70. package/dist/memory.d.ts +234 -0
  71. package/dist/memory.d.ts.map +1 -0
  72. package/dist/memory.js +609 -0
  73. package/dist/memory.js.map +1 -0
  74. package/dist/platform-adapters.d.ts +121 -0
  75. package/dist/platform-adapters.d.ts.map +1 -0
  76. package/dist/platform-adapters.js +174 -0
  77. package/dist/platform-adapters.js.map +1 -0
  78. package/dist/platform-context.d.ts +55 -0
  79. package/dist/platform-context.d.ts.map +1 -0
  80. package/dist/platform-context.js +196 -0
  81. package/dist/platform-context.js.map +1 -0
  82. package/dist/retry-utils.d.ts +169 -0
  83. package/dist/retry-utils.d.ts.map +1 -0
  84. package/dist/retry-utils.js +304 -0
  85. package/dist/retry-utils.js.map +1 -0
  86. package/dist/sandbox.d.ts +103 -0
  87. package/dist/sandbox.d.ts.map +1 -0
  88. package/dist/sandbox.js +168 -0
  89. package/dist/sandbox.js.map +1 -0
  90. package/dist/schema-utils.d.ts +250 -0
  91. package/dist/schema-utils.d.ts.map +1 -0
  92. package/dist/schema-utils.js +444 -0
  93. package/dist/schema-utils.js.map +1 -0
  94. package/dist/scorer.d.ts +130 -0
  95. package/dist/scorer.d.ts.map +1 -0
  96. package/dist/scorer.js +211 -0
  97. package/dist/scorer.js.map +1 -0
  98. package/dist/state.d.ts +92 -0
  99. package/dist/state.d.ts.map +1 -0
  100. package/dist/state.js +151 -0
  101. package/dist/state.js.map +1 -0
  102. package/dist/tool.d.ts +120 -0
  103. package/dist/tool.d.ts.map +1 -0
  104. package/dist/tool.js +215 -0
  105. package/dist/tool.js.map +1 -0
  106. package/dist/tracing.d.ts +82 -0
  107. package/dist/tracing.d.ts.map +1 -0
  108. package/dist/tracing.js +206 -0
  109. package/dist/tracing.js.map +1 -0
  110. package/dist/types.d.ts +139 -0
  111. package/dist/types.d.ts.map +1 -0
  112. package/dist/types.js +2 -0
  113. package/dist/types.js.map +1 -0
  114. package/dist/worker.d.ts +111 -0
  115. package/dist/worker.d.ts.map +1 -0
  116. package/dist/worker.js +944 -0
  117. package/dist/worker.js.map +1 -0
  118. package/dist/workflow-utils.d.ts +257 -0
  119. package/dist/workflow-utils.d.ts.map +1 -0
  120. package/dist/workflow-utils.js +370 -0
  121. package/dist/workflow-utils.js.map +1 -0
  122. package/dist/workflow.d.ts +78 -0
  123. package/dist/workflow.d.ts.map +1 -0
  124. package/dist/workflow.js +138 -0
  125. package/dist/workflow.js.map +1 -0
  126. package/package.json +86 -0
package/dist/eval.js ADDED
@@ -0,0 +1,452 @@
1
+ /**
2
+ * Evaluation framework for scoring component outputs.
3
+ *
4
+ * Provides EvalResponse, BatchEval types, EvalContext, and LLMJudge
5
+ * for local and platform-based evaluation workflows.
6
+ */
7
+ import { RunError } from './errors.js';
8
+ // ─── EvalContext ─────────────────────────────────────────────────────
9
+ /**
10
+ * Context passed to custom evaluation logic.
11
+ * Contains the input/output pair, optional expected value, and trace events.
12
+ */
13
+ export class EvalContext {
14
+ constructor(opts) {
15
+ this.input = opts.input;
16
+ this.output = opts.output;
17
+ this.expected = opts.expected;
18
+ this.runId = opts.runId;
19
+ this.traceId = opts.traceId;
20
+ this.events = opts.events || [];
21
+ }
22
+ /** Get events filtered by type */
23
+ getEventsByType(eventType) {
24
+ return this.events.filter(e => e.eventType === eventType);
25
+ }
26
+ /** Get LM call events */
27
+ getLmCalls() {
28
+ return this.events.filter(e => e.eventType === 'lm.call.completed');
29
+ }
30
+ /** Get total tokens across all LM calls */
31
+ getTotalTokens() {
32
+ return this.getLmCalls().reduce((sum, e) => sum + (e.data.total_tokens || 0), 0);
33
+ }
34
+ /** Get events for a specific step */
35
+ getStepEvents(stepName) {
36
+ return this.events.filter(e => e.name === stepName);
37
+ }
38
+ }
39
+ // ─── EvalResponse ────────────────────────────────────────────────────
40
+ /**
41
+ * Response from a single evaluation (client.eval()).
42
+ *
43
+ * Contains the component output, scorer results, and pass/fail status.
44
+ */
45
+ export class EvalResponse {
46
+ constructor(raw) {
47
+ this.output = raw.output;
48
+ this.runId = raw.run_id || raw.runId || '';
49
+ this.traceId = raw.trace_id || raw.traceId;
50
+ this.durationMs = raw.duration_ms || raw.durationMs;
51
+ // Parse error
52
+ if (raw.error) {
53
+ if (typeof raw.error === 'string') {
54
+ this.error = { code: 'EVAL_FAILED', message: raw.error };
55
+ }
56
+ else {
57
+ this.error = {
58
+ code: raw.error.code || 'EVAL_FAILED',
59
+ message: raw.error.message || String(raw.error),
60
+ details: raw.error.details,
61
+ };
62
+ }
63
+ }
64
+ // Parse scores
65
+ const rawScores = raw.scores || raw.scorer_results || [];
66
+ this.scores = rawScores.map((s) => ({
67
+ scorer: s.scorer || s.name || '',
68
+ score: s.score ?? 0,
69
+ passed: s.passed ?? (s.score >= 0.5),
70
+ explanation: s.explanation,
71
+ label: s.label,
72
+ metadata: s.metadata,
73
+ }));
74
+ // Overall pass: all scorers pass and no error
75
+ this.passed = raw.passed ?? (!this.error && this.scores.every(s => s.passed));
76
+ }
77
+ /** True if run completed without error (may have failing scores) */
78
+ get isSuccess() {
79
+ return !this.error;
80
+ }
81
+ /** True if there was an error */
82
+ get isError() {
83
+ return !!this.error;
84
+ }
85
+ /** Duration as milliseconds */
86
+ get elapsed() {
87
+ return this.durationMs;
88
+ }
89
+ /** Get score by scorer name */
90
+ getScore(scorerName) {
91
+ return this.scores.find(s => s.scorer === scorerName);
92
+ }
93
+ /** Throw if there was an error */
94
+ raiseForStatus() {
95
+ if (this.error) {
96
+ throw new RunError(this.error.message, this.runId, undefined, this.error.code);
97
+ }
98
+ }
99
+ }
100
+ /** Result of a single item in a batch evaluation */
101
+ export class BatchEvalItemResult {
102
+ constructor(raw) {
103
+ this.index = raw.index ?? 0;
104
+ this.runId = raw.run_id || raw.runId || '';
105
+ this.output = raw.output;
106
+ this.durationMs = raw.duration_ms || raw.durationMs || 0;
107
+ this.itemId = raw.item_id || raw.itemId;
108
+ this.traceId = raw.trace_id || raw.traceId;
109
+ this.error = raw.error;
110
+ const rawScores = raw.scores || raw.scorer_results || [];
111
+ this.scores = rawScores.map((s) => ({
112
+ scorer: s.scorer || s.name || '',
113
+ score: s.score ?? 0,
114
+ passed: s.passed ?? (s.score >= 0.5),
115
+ explanation: s.explanation,
116
+ label: s.label,
117
+ metadata: s.metadata,
118
+ }));
119
+ this.passed = raw.passed ?? (!this.error && this.scores.every(s => s.passed));
120
+ }
121
+ get isSuccess() {
122
+ return !this.error;
123
+ }
124
+ get isFailed() {
125
+ return !!this.error;
126
+ }
127
+ /** Get score by scorer name */
128
+ getScore(scorerName) {
129
+ return this.scores.find(s => s.scorer === scorerName);
130
+ }
131
+ /** Create from an EvalResponse */
132
+ static fromEvalResponse(response, index, itemId) {
133
+ return new BatchEvalItemResult({
134
+ index,
135
+ run_id: response.runId,
136
+ output: response.output,
137
+ scores: response.scores,
138
+ passed: response.passed,
139
+ duration_ms: response.durationMs || 0,
140
+ item_id: itemId,
141
+ trace_id: response.traceId,
142
+ error: response.error?.message,
143
+ });
144
+ }
145
+ /** Create from an exception */
146
+ static fromException(error, index, itemId) {
147
+ return new BatchEvalItemResult({
148
+ index,
149
+ run_id: '',
150
+ output: undefined,
151
+ scores: [],
152
+ passed: false,
153
+ duration_ms: 0,
154
+ item_id: itemId,
155
+ error: error.message,
156
+ });
157
+ }
158
+ }
159
+ /**
160
+ * Result of a batch evaluation (client.batchEval()).
161
+ */
162
+ export class BatchEvalResult {
163
+ constructor(opts) {
164
+ this.batchId = opts.batchId;
165
+ this.status = opts.status;
166
+ this.results = opts.results.sort((a, b) => a.index - b.index);
167
+ if (opts.stats) {
168
+ this.stats = opts.stats;
169
+ }
170
+ else {
171
+ // Compute stats from results
172
+ const completed = this.results.filter(r => r.isSuccess).length;
173
+ const failed = this.results.filter(r => r.isFailed).length;
174
+ const passed = this.results.filter(r => r.passed).length;
175
+ const totalDuration = this.results.reduce((s, r) => s + r.durationMs, 0);
176
+ this.stats = {
177
+ totalItems: this.results.length,
178
+ completedItems: completed,
179
+ failedItems: failed,
180
+ passedItems: passed,
181
+ avgDurationMs: this.results.length > 0 ? Math.round(totalDuration / this.results.length) : 0,
182
+ durationMs: opts.durationMs || totalDuration,
183
+ };
184
+ }
185
+ }
186
+ /** Pass rate: fraction of items where passed=true */
187
+ get passRate() {
188
+ if (this.results.length === 0)
189
+ return 0;
190
+ return this.stats.passedItems / this.stats.totalItems;
191
+ }
192
+ get isSuccess() {
193
+ return this.status === 'completed';
194
+ }
195
+ get isPartialFailure() {
196
+ return this.status === 'partial_failure';
197
+ }
198
+ /** All outputs sorted by index */
199
+ get outputs() {
200
+ return this.results.map(r => r.output);
201
+ }
202
+ /** Items that had errors */
203
+ failedItems() {
204
+ return this.results.filter(r => r.isFailed);
205
+ }
206
+ /** Items where passed=false (may not have errors) */
207
+ failingItems() {
208
+ return this.results.filter(r => !r.passed);
209
+ }
210
+ /** Items where passed=true */
211
+ passingItems() {
212
+ return this.results.filter(r => r.passed);
213
+ }
214
+ }
215
+ /**
216
+ * LLM-as-judge scorer specification.
217
+ *
218
+ * Used with client.eval() to evaluate outputs using an LLM.
219
+ *
220
+ * @example
221
+ * ```typescript
222
+ * const judge = new LLMJudge({
223
+ * criteria: 'Is the response helpful and accurate?',
224
+ * model: 'openai/gpt-4o-mini',
225
+ * });
226
+ *
227
+ * const result = await client.eval('my-function', { input: 'hello' }, {
228
+ * scorers: [judge],
229
+ * });
230
+ * ```
231
+ */
232
+ export class LLMJudge {
233
+ constructor(config) {
234
+ this.criteria = config.criteria;
235
+ this.model = config.model || 'openai/gpt-4o-mini';
236
+ this.includeInput = config.includeInput ?? false;
237
+ this.temperature = config.temperature ?? 0.0;
238
+ }
239
+ /** Convert to scorer spec for platform API */
240
+ toScorerSpec() {
241
+ const [provider, ...modelParts] = this.model.split('/');
242
+ return {
243
+ name: 'llm_judge',
244
+ config: {
245
+ criteria: this.criteria,
246
+ provider,
247
+ model: modelParts.join('/'),
248
+ include_input: this.includeInput,
249
+ temperature: this.temperature,
250
+ },
251
+ };
252
+ }
253
+ }
254
+ /**
255
+ * Assertion types for glassbox trace evaluation.
256
+ *
257
+ * Mirrors the Rust sdk-core TraceAssertion enum.
258
+ *
259
+ * @example
260
+ * ```typescript
261
+ * const assertions = [
262
+ * TraceAssertion.maxTokens(1000),
263
+ * TraceAssertion.maxLmCalls(5),
264
+ * TraceAssertion.noErrors(),
265
+ * ];
266
+ * const result = traceScorer(trace, assertions);
267
+ * ```
268
+ */
269
+ export class TraceAssertion {
270
+ constructor(_check) {
271
+ this._check = _check;
272
+ }
273
+ check(trace) {
274
+ return this._check(trace);
275
+ }
276
+ /** Assert total tokens used is at most `max`. */
277
+ static maxTokens(max) {
278
+ return new TraceAssertion((trace) => {
279
+ const total = trace
280
+ .filter(e => e.eventType === 'lm.call.completed')
281
+ .reduce((sum, e) => sum + (e.data.total_tokens ?? 0), 0);
282
+ return {
283
+ name: `max_tokens(${max})`,
284
+ passed: total <= max,
285
+ explanation: `Token usage: ${total} (max: ${max})`,
286
+ };
287
+ });
288
+ }
289
+ /** Assert number of LLM calls is at most `max`. */
290
+ static maxLmCalls(max) {
291
+ return new TraceAssertion((trace) => {
292
+ const count = trace.filter(e => e.eventType === 'lm.call.completed').length;
293
+ return {
294
+ name: `max_lm_calls(${max})`,
295
+ passed: count <= max,
296
+ explanation: `LLM calls: ${count} (max: ${max})`,
297
+ };
298
+ });
299
+ }
300
+ /** Assert events occur in the specified order (subsequence match). */
301
+ static eventSequence(events) {
302
+ return new TraceAssertion((trace) => {
303
+ const types = trace.map(e => e.eventType);
304
+ let j = 0;
305
+ for (const expected of events) {
306
+ while (j < types.length && types[j] !== expected)
307
+ j++;
308
+ if (j >= types.length) {
309
+ return {
310
+ name: 'event_sequence',
311
+ passed: false,
312
+ explanation: `Missing event '${expected}' in sequence`,
313
+ };
314
+ }
315
+ j++;
316
+ }
317
+ return { name: 'event_sequence', passed: true, explanation: 'All events found in expected order' };
318
+ });
319
+ }
320
+ /** Assert a specific step was memoized (retrieved from cache). */
321
+ static stepMemoized(stepName) {
322
+ return new TraceAssertion((trace) => {
323
+ const memoized = trace
324
+ .filter(e => e.eventType === 'workflow.step.completed' && e.name === stepName)
325
+ .some(e => e.data.is_memoized === true);
326
+ return {
327
+ name: `step_memoized(${stepName})`,
328
+ passed: memoized,
329
+ explanation: memoized
330
+ ? `Step '${stepName}' was memoized`
331
+ : `Step '${stepName}' was NOT memoized`,
332
+ };
333
+ });
334
+ }
335
+ /** Assert no error events occurred. */
336
+ static noErrors() {
337
+ const errorTypes = ['run.failed', 'workflow.step.failed', 'agent.failed', 'lm.call.failed', 'function.failed'];
338
+ return new TraceAssertion((trace) => {
339
+ const errors = trace.filter(e => errorTypes.includes(e.eventType));
340
+ return {
341
+ name: 'no_errors',
342
+ passed: errors.length === 0,
343
+ explanation: errors.length === 0 ? 'No error events found' : `Found ${errors.length} error event(s)`,
344
+ };
345
+ });
346
+ }
347
+ /** Assert total duration is under `maxMs` milliseconds. */
348
+ static durationUnder(maxMs) {
349
+ return new TraceAssertion((trace) => {
350
+ if (trace.length === 0) {
351
+ return { name: `duration_under(${maxMs}ms)`, passed: true, explanation: 'Duration: 0ms (no events)' };
352
+ }
353
+ const first = Math.min(...trace.map(e => e.timestampNs));
354
+ const last = Math.max(...trace.map(e => e.timestampNs));
355
+ const durationMs = Math.floor((last - first) / 1000000);
356
+ return {
357
+ name: `duration_under(${maxMs}ms)`,
358
+ passed: durationMs <= maxMs,
359
+ explanation: `Duration: ${durationMs}ms (max: ${maxMs}ms)`,
360
+ };
361
+ });
362
+ }
363
+ /** Assert a specific event type occurred at least `min` times. */
364
+ static eventCount(eventType, min) {
365
+ return new TraceAssertion((trace) => {
366
+ const count = trace.filter(e => e.eventType === eventType).length;
367
+ return {
368
+ name: `event_count(${eventType}, min=${min})`,
369
+ passed: count >= min,
370
+ explanation: `Event '${eventType}' occurred ${count} times (min: ${min})`,
371
+ };
372
+ });
373
+ }
374
+ }
375
+ /**
376
+ * Score a trace against multiple assertions.
377
+ *
378
+ * @returns TraceScorerResult with aggregate score (proportion of assertions passed)
379
+ *
380
+ * @example
381
+ * ```typescript
382
+ * const trace = await client.getEvents(runId);
383
+ * const result = traceScorer(trace.events, [
384
+ * TraceAssertion.maxTokens(1000),
385
+ * TraceAssertion.noErrors(),
386
+ * ]);
387
+ * console.log(`Score: ${result.score}, Passed: ${result.passed}`);
388
+ * ```
389
+ */
390
+ export function traceScorer(trace, assertions) {
391
+ if (assertions.length === 0) {
392
+ return { score: 1.0, passed: true, label: 'pass', explanation: 'No assertions to check' };
393
+ }
394
+ const results = assertions.map(a => a.check(trace));
395
+ const passedCount = results.filter(r => r.passed).length;
396
+ const score = passedCount / results.length;
397
+ const allPassed = results.every(r => r.passed);
398
+ const failed = results.filter(r => !r.passed);
399
+ const explanation = failed.length === 0
400
+ ? 'All assertions passed'
401
+ : 'Failed assertions:\n' + failed.map(r => `- ${r.name}: ${r.explanation}`).join('\n');
402
+ return {
403
+ score,
404
+ passed: allPassed,
405
+ label: allPassed ? 'pass' : 'fail',
406
+ explanation,
407
+ };
408
+ }
409
+ // ─── Helpers ─────────────────────────────────────────────────────────
410
+ /**
411
+ * Normalize batch eval items to a consistent format.
412
+ *
413
+ * Accepts:
414
+ * 1. BatchEvalItem[] — already normalized
415
+ * 2. { input, expected }[] — dict format
416
+ * 3. Plain input dicts with separate expected list
417
+ */
418
+ export function normalizeBatchEvalItems(items, expected) {
419
+ return items.map((item, i) => {
420
+ if ('input' in item && item.input !== undefined) {
421
+ return {
422
+ input: item.input,
423
+ expected: item.expected ?? expected?.[i],
424
+ itemId: item.itemId,
425
+ index: item.index ?? i,
426
+ };
427
+ }
428
+ // Plain input dict
429
+ return {
430
+ input: item,
431
+ expected: expected?.[i],
432
+ index: i,
433
+ };
434
+ });
435
+ }
436
+ /**
437
+ * Normalize scorer specs for the platform API.
438
+ *
439
+ * Accepts strings ("exact_match"), LLMJudge instances, or raw spec dicts.
440
+ */
441
+ export function normalizeScorerSpecs(scorers) {
442
+ return scorers.map(s => {
443
+ if (typeof s === 'string') {
444
+ return { name: s };
445
+ }
446
+ if (s instanceof LLMJudge) {
447
+ return s.toScorerSpec();
448
+ }
449
+ return s;
450
+ });
451
+ }
452
+ //# sourceMappingURL=eval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval.js","sourceRoot":"","sources":["../src/eval.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * EventEmitter routes events to the platform via NAPI Worker methods.
3
+ *
4
+ * Mirrors Python SDK's EventEmitter (events.py):
5
+ * - Checkpoint events → nativeWorker.emitCheckpoint() → EE gRPC WriteCheckpoint
6
+ * - SSE-only events → nativeWorker.queueEvent() → JournalEventQueue → flush task
7
+ */
8
+ import type { BaseEvent } from './events.js';
9
+ export declare class EventEmitter {
10
+ private runId;
11
+ private baseMetadata;
12
+ private sequence;
13
+ private nativeWorker;
14
+ constructor(runId: string, baseMetadata?: Record<string, string>);
15
+ /**
16
+ * Set the NAPI Worker reference for event emission.
17
+ * Must be called before emit() — events are silently dropped without a worker.
18
+ */
19
+ setWorker(nativeWorker: any): void;
20
+ /**
21
+ * Emit an event to the platform.
22
+ *
23
+ * Checkpoint events (lifecycle) are sent synchronously via gRPC WriteCheckpoint.
24
+ * SSE-only events (streaming) are queued for async batch flush.
25
+ */
26
+ emit(event: BaseEvent): Promise<void>;
27
+ }
28
+ //# sourceMappingURL=event-emitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-emitter.d.ts","sourceRoot":"","sources":["../src/event-emitter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AA6B7C,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,YAAY,CAAyB;IAC7C,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,YAAY,CAAa;gBAErB,KAAK,EAAE,MAAM,EAAE,YAAY,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM;IAKpE;;;OAGG;IACH,SAAS,CAAC,YAAY,EAAE,GAAG,GAAG,IAAI;IAIlC;;;;;OAKG;IACG,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;CAiD5C"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * EventEmitter routes events to the platform via NAPI Worker methods.
3
+ *
4
+ * Mirrors Python SDK's EventEmitter (events.py):
5
+ * - Checkpoint events → nativeWorker.emitCheckpoint() → EE gRPC WriteCheckpoint
6
+ * - SSE-only events → nativeWorker.queueEvent() → JournalEventQueue → flush task
7
+ */
8
+ import { isCheckpointEvent } from './events.js';
9
+ /**
10
+ * Convert camelCase key to snake_case.
11
+ */
12
+ function toSnakeCase(key) {
13
+ return key.replace(/[A-Z]/g, letter => `_${letter.toLowerCase()}`);
14
+ }
15
+ /**
16
+ * Serialize a BaseEvent to a full JSON string matching Python SDK's event.to_dict().
17
+ *
18
+ * Python sends ALL fields (event_type, correlation_id, name, etc.) in the event data.
19
+ * The EE/Studio UI needs these fields (especially correlation_id) to link events
20
+ * to the correct run lifecycle. Keys are converted from camelCase to snake_case.
21
+ */
22
+ function serializeEvent(event) {
23
+ const payload = {};
24
+ for (const [key, value] of Object.entries(event)) {
25
+ // Convert BigInt to Number for JSON serialization
26
+ const serializedValue = typeof value === 'bigint' ? Number(value) : value;
27
+ payload[toSnakeCase(key)] = serializedValue;
28
+ }
29
+ return JSON.stringify(payload);
30
+ }
31
+ export class EventEmitter {
32
+ constructor(runId, baseMetadata = {}) {
33
+ this.sequence = 0;
34
+ this.nativeWorker = null;
35
+ this.runId = runId;
36
+ this.baseMetadata = baseMetadata;
37
+ }
38
+ /**
39
+ * Set the NAPI Worker reference for event emission.
40
+ * Must be called before emit() — events are silently dropped without a worker.
41
+ */
42
+ setWorker(nativeWorker) {
43
+ this.nativeWorker = nativeWorker;
44
+ }
45
+ /**
46
+ * Emit an event to the platform.
47
+ *
48
+ * Checkpoint events (lifecycle) are sent synchronously via gRPC WriteCheckpoint.
49
+ * SSE-only events (streaming) are queued for async batch flush.
50
+ */
51
+ async emit(event) {
52
+ if (!this.nativeWorker) {
53
+ return; // No worker — running locally or in tests
54
+ }
55
+ this.sequence++;
56
+ // Serialize full event with snake_case keys (matches Python SDK's event.to_dict())
57
+ const eventData = serializeEvent(event);
58
+ const metadata = { ...this.baseMetadata };
59
+ // Copy string metadata from event (skip non-string values)
60
+ for (const [k, v] of Object.entries(event.metadata || {})) {
61
+ if (typeof v === 'string') {
62
+ metadata[k] = v;
63
+ }
64
+ }
65
+ const timestampNs = Number(event.timestampNs);
66
+ if (isCheckpointEvent(event.eventType)) {
67
+ // Add correlation IDs to metadata (matches Python EventEmitter convention)
68
+ metadata['cid'] = event.correlationId;
69
+ metadata['pcid'] = event.parentCorrelationId || '';
70
+ await this.nativeWorker.emitCheckpoint(this.runId, event.eventType, eventData, this.sequence, metadata, timestampNs, 5000);
71
+ }
72
+ else {
73
+ // SSE-only — push to journal queue (non-blocking)
74
+ this.nativeWorker.queueEvent(this.runId, event.eventType, eventData, 0, // contentIndex
75
+ this.sequence, metadata, timestampNs, event.correlationId, event.parentCorrelationId || '');
76
+ }
77
+ }
78
+ }
79
+ //# sourceMappingURL=event-emitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-emitter.js","sourceRoot":"","sources":["../src/event-emitter.ts"],"names":[],"mappings":"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"}