@agentuity/runtime 0.0.51 → 0.0.53

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 (113) hide show
  1. package/dist/_config.js +99 -0
  2. package/dist/_config.js.map +1 -0
  3. package/dist/_context.d.ts +11 -11
  4. package/dist/_context.d.ts.map +1 -1
  5. package/dist/_context.js +84 -0
  6. package/dist/_context.js.map +1 -0
  7. package/dist/_idle.js +24 -0
  8. package/dist/_idle.js.map +1 -0
  9. package/dist/_server.js +489 -0
  10. package/dist/_server.js.map +1 -0
  11. package/dist/_services.js +258 -0
  12. package/dist/_services.js.map +1 -0
  13. package/dist/_tokens.js +98 -0
  14. package/dist/_tokens.js.map +1 -0
  15. package/dist/_util.js +54 -0
  16. package/dist/_util.js.map +1 -0
  17. package/dist/_waituntil.js +87 -0
  18. package/dist/_waituntil.js.map +1 -0
  19. package/dist/agent.d.ts +24 -15
  20. package/dist/agent.d.ts.map +1 -1
  21. package/dist/agent.js +507 -0
  22. package/dist/agent.js.map +1 -0
  23. package/dist/app.d.ts +6 -1
  24. package/dist/app.d.ts.map +1 -1
  25. package/dist/app.js +72 -0
  26. package/dist/app.js.map +1 -0
  27. package/dist/eval.d.ts +1 -1
  28. package/dist/eval.d.ts.map +1 -1
  29. package/dist/eval.js +2 -0
  30. package/dist/eval.js.map +1 -0
  31. package/dist/index.js +11 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/io/email.js +154 -0
  34. package/dist/io/email.js.map +1 -0
  35. package/dist/logger/console.js +274 -0
  36. package/dist/logger/console.js.map +1 -0
  37. package/dist/logger/index.js +3 -0
  38. package/dist/logger/index.js.map +1 -0
  39. package/dist/logger/internal.js +133 -0
  40. package/dist/logger/internal.js.map +1 -0
  41. package/dist/logger/logger.js +2 -0
  42. package/dist/logger/logger.js.map +1 -0
  43. package/dist/logger/user.js +7 -0
  44. package/dist/logger/user.js.map +1 -0
  45. package/dist/logger/util.js +77 -0
  46. package/dist/logger/util.js.map +1 -0
  47. package/dist/otel/config.js +23 -0
  48. package/dist/otel/config.js.map +1 -0
  49. package/dist/otel/console.js +52 -0
  50. package/dist/otel/console.js.map +1 -0
  51. package/dist/otel/exporters/index.js +4 -0
  52. package/dist/otel/exporters/index.js.map +1 -0
  53. package/dist/otel/exporters/jsonl-log-exporter.js +103 -0
  54. package/dist/otel/exporters/jsonl-log-exporter.js.map +1 -0
  55. package/dist/otel/exporters/jsonl-metric-exporter.js +104 -0
  56. package/dist/otel/exporters/jsonl-metric-exporter.js.map +1 -0
  57. package/dist/otel/exporters/jsonl-trace-exporter.js +111 -0
  58. package/dist/otel/exporters/jsonl-trace-exporter.js.map +1 -0
  59. package/dist/otel/fetch.js +81 -0
  60. package/dist/otel/fetch.js.map +1 -0
  61. package/dist/otel/http.js +44 -0
  62. package/dist/otel/http.js.map +1 -0
  63. package/dist/otel/logger.js +278 -0
  64. package/dist/otel/logger.js.map +1 -0
  65. package/dist/otel/otel.js +233 -0
  66. package/dist/otel/otel.js.map +1 -0
  67. package/dist/router.js +350 -0
  68. package/dist/router.js.map +1 -0
  69. package/dist/services/evalrun/composite.js +26 -0
  70. package/dist/services/evalrun/composite.js.map +1 -0
  71. package/dist/services/evalrun/http.js +74 -0
  72. package/dist/services/evalrun/http.js.map +1 -0
  73. package/dist/services/evalrun/index.js +5 -0
  74. package/dist/services/evalrun/index.js.map +1 -0
  75. package/dist/services/evalrun/json.js +38 -0
  76. package/dist/services/evalrun/json.js.map +1 -0
  77. package/dist/services/evalrun/local.js +22 -0
  78. package/dist/services/evalrun/local.js.map +1 -0
  79. package/dist/services/local/_db.js +144 -0
  80. package/dist/services/local/_db.js.map +1 -0
  81. package/dist/services/local/_router.js +60 -0
  82. package/dist/services/local/_router.js.map +1 -0
  83. package/dist/services/local/_util.js +42 -0
  84. package/dist/services/local/_util.js.map +1 -0
  85. package/dist/services/local/index.js +8 -0
  86. package/dist/services/local/index.js.map +1 -0
  87. package/dist/services/local/keyvalue.js +114 -0
  88. package/dist/services/local/keyvalue.js.map +1 -0
  89. package/dist/services/local/objectstore.js +117 -0
  90. package/dist/services/local/objectstore.js.map +1 -0
  91. package/dist/services/local/stream.js +218 -0
  92. package/dist/services/local/stream.js.map +1 -0
  93. package/dist/services/local/vector.js +183 -0
  94. package/dist/services/local/vector.js.map +1 -0
  95. package/dist/services/session/composite.js +26 -0
  96. package/dist/services/session/composite.js.map +1 -0
  97. package/dist/services/session/http.js +42 -0
  98. package/dist/services/session/http.js.map +1 -0
  99. package/dist/services/session/index.js +5 -0
  100. package/dist/services/session/index.js.map +1 -0
  101. package/dist/services/session/json.js +35 -0
  102. package/dist/services/session/json.js.map +1 -0
  103. package/dist/services/session/local.js +22 -0
  104. package/dist/services/session/local.js.map +1 -0
  105. package/dist/session.js +199 -0
  106. package/dist/session.js.map +1 -0
  107. package/dist/workbench.js +38 -0
  108. package/dist/workbench.js.map +1 -0
  109. package/package.json +5 -5
  110. package/src/_context.ts +34 -13
  111. package/src/agent.ts +76 -40
  112. package/src/app.ts +6 -1
  113. package/src/eval.ts +1 -1
@@ -0,0 +1,233 @@
1
+ import opentelemetry, { metrics, propagation } from '@opentelemetry/api';
2
+ import * as LogsAPI from '@opentelemetry/api-logs';
3
+ import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node';
4
+ import { CompositePropagator, W3CBaggagePropagator, W3CTraceContextPropagator, } from '@opentelemetry/core';
5
+ import { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http';
6
+ import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';
7
+ import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
8
+ import { HostMetrics } from '@opentelemetry/host-metrics';
9
+ import { CompressionAlgorithm } from '@opentelemetry/otlp-exporter-base';
10
+ import { resourceFromAttributes } from '@opentelemetry/resources';
11
+ import { BatchLogRecordProcessor, LoggerProvider, SimpleLogRecordProcessor, } from '@opentelemetry/sdk-logs';
12
+ import { MeterProvider, PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics';
13
+ import { NodeSDK } from '@opentelemetry/sdk-node';
14
+ import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
15
+ import { initialize } from '@traceloop/node-server-sdk';
16
+ import { ConsoleLogRecordExporter } from './console';
17
+ import { instrumentFetch } from './fetch';
18
+ import { createLogger, patchConsole } from './logger';
19
+ import { getSDKVersion, isAuthenticated } from '../_config';
20
+ import { JSONLLogExporter, JSONLTraceExporter, JSONLMetricExporter } from './exporters';
21
+ const devmodeExportInterval = 1_000; // 1 second
22
+ const productionExportInterval = 10_000; // 10 seconds
23
+ export const createResource = (config) => {
24
+ const { name, version, orgId, projectId, deploymentId, environment, devmode, cliVersion } = config;
25
+ const sdkVersion = getSDKVersion();
26
+ return resourceFromAttributes({
27
+ [ATTR_SERVICE_NAME]: name,
28
+ [ATTR_SERVICE_VERSION]: version,
29
+ '@agentuity/orgId': orgId ?? 'unknown',
30
+ '@agentuity/projectId': projectId ?? 'unknown',
31
+ '@agentuity/deploymentId': deploymentId ?? 'unknown',
32
+ '@agentuity/env': environment,
33
+ '@agentuity/devmode': devmode,
34
+ '@agentuity/sdkVersion': sdkVersion ?? 'unknown',
35
+ '@agentuity/cliVersion': cliVersion ?? 'unknown',
36
+ });
37
+ };
38
+ export const createAgentuityLoggerProvider = ({ url, headers, resource, logLevel, jsonlBasePath, }) => {
39
+ let processor;
40
+ let exporter;
41
+ if (jsonlBasePath) {
42
+ exporter = new JSONLLogExporter(jsonlBasePath);
43
+ processor = new BatchLogRecordProcessor(exporter);
44
+ }
45
+ else if (url) {
46
+ // Original OTLP export behavior
47
+ const otlpExporter = new OTLPLogExporter({
48
+ url: `${url}/v1/logs`,
49
+ headers,
50
+ compression: CompressionAlgorithm.GZIP,
51
+ timeoutMillis: 10_000,
52
+ });
53
+ exporter = otlpExporter;
54
+ processor = new BatchLogRecordProcessor(otlpExporter);
55
+ }
56
+ else {
57
+ processor = new SimpleLogRecordProcessor(new ConsoleLogRecordExporter(logLevel));
58
+ }
59
+ const provider = new LoggerProvider({
60
+ resource,
61
+ processors: [processor],
62
+ });
63
+ LogsAPI.logs.setGlobalLoggerProvider(provider);
64
+ return {
65
+ processor,
66
+ provider,
67
+ exporter,
68
+ };
69
+ };
70
+ export const createUserLoggerProvider = ({ url, headers, resource, }) => {
71
+ const exporter = new OTLPLogExporter({
72
+ url: `${url}/v1/logs`,
73
+ headers,
74
+ compression: CompressionAlgorithm.GZIP,
75
+ timeoutMillis: 10_000,
76
+ });
77
+ const processor = new BatchLogRecordProcessor(exporter);
78
+ const provider = new LoggerProvider({
79
+ resource,
80
+ processors: [processor],
81
+ });
82
+ return {
83
+ provider,
84
+ exporter,
85
+ processor,
86
+ };
87
+ };
88
+ /**
89
+ * Registers and initializes OpenTelemetry with the specified configuration
90
+ *
91
+ * @param config - The configuration for OpenTelemetry
92
+ * @returns An object containing the tracer, logger, and shutdown function
93
+ */
94
+ export function registerOtel(config) {
95
+ const { url, name, version, bearerToken, environment = 'development', orgId, projectId, deploymentId, devmode = false, logLevel = 'warn', jsonlBasePath = undefined, } = config;
96
+ let headers;
97
+ if (bearerToken) {
98
+ headers = {};
99
+ headers.Authorization = `Bearer ${bearerToken}`;
100
+ }
101
+ const resource = createResource(config);
102
+ const loggerProvider = createAgentuityLoggerProvider({
103
+ url,
104
+ headers,
105
+ resource,
106
+ logLevel,
107
+ jsonlBasePath,
108
+ });
109
+ const attrs = {
110
+ '@agentuity/orgId': orgId ?? 'unknown',
111
+ '@agentuity/projectId': projectId ?? 'unknown',
112
+ '@agentuity/deploymentId': deploymentId ?? 'unknown',
113
+ '@agentuity/env': environment,
114
+ '@agentuity/devmode': devmode,
115
+ '@agentuity/language': 'javascript',
116
+ };
117
+ const logger = createLogger(!!url, attrs, logLevel);
118
+ // must do this after we have created the logger
119
+ patchConsole(!!url, attrs, logLevel);
120
+ const traceExporter = url
121
+ ? jsonlBasePath
122
+ ? new JSONLTraceExporter(jsonlBasePath)
123
+ : new OTLPTraceExporter({
124
+ url: `${url}/v1/traces`,
125
+ headers,
126
+ keepAlive: true,
127
+ })
128
+ : undefined;
129
+ const metricExporter = url
130
+ ? jsonlBasePath
131
+ ? new JSONLMetricExporter(jsonlBasePath)
132
+ : new OTLPMetricExporter({
133
+ url: `${url}/v1/metrics`,
134
+ headers,
135
+ keepAlive: true,
136
+ })
137
+ : undefined;
138
+ // Create a separate metric reader for the NodeSDK
139
+ const sdkMetricReader = url && metricExporter
140
+ ? new PeriodicExportingMetricReader({
141
+ exporter: metricExporter,
142
+ exportTimeoutMillis: devmode ? devmodeExportInterval : productionExportInterval,
143
+ exportIntervalMillis: devmode ? devmodeExportInterval : productionExportInterval,
144
+ })
145
+ : undefined;
146
+ // Create a separate metric reader for the MeterProvider
147
+ const hostMetricReader = url && metricExporter
148
+ ? new PeriodicExportingMetricReader({
149
+ exporter: metricExporter,
150
+ exportTimeoutMillis: devmode ? devmodeExportInterval : productionExportInterval,
151
+ exportIntervalMillis: devmode ? devmodeExportInterval : productionExportInterval,
152
+ })
153
+ : undefined;
154
+ const meterProvider = hostMetricReader
155
+ ? new MeterProvider({
156
+ resource,
157
+ readers: [hostMetricReader],
158
+ })
159
+ : undefined;
160
+ if (meterProvider) {
161
+ metrics.setGlobalMeterProvider(meterProvider);
162
+ }
163
+ const hostMetrics = meterProvider ? new HostMetrics({ meterProvider }) : undefined;
164
+ let running = false;
165
+ let instrumentationSDK;
166
+ if (url) {
167
+ const propagator = new CompositePropagator({
168
+ propagators: [new W3CTraceContextPropagator(), new W3CBaggagePropagator()],
169
+ });
170
+ propagation.setGlobalPropagator(propagator);
171
+ instrumentFetch();
172
+ instrumentationSDK = new NodeSDK({
173
+ logRecordProcessor: loggerProvider.processor,
174
+ traceExporter,
175
+ metricReader: sdkMetricReader,
176
+ instrumentations: [getNodeAutoInstrumentations()],
177
+ resource,
178
+ textMapPropagator: propagator,
179
+ spanProcessors: config.spanProcessors,
180
+ });
181
+ instrumentationSDK.start();
182
+ hostMetrics?.start();
183
+ try {
184
+ const projectName = config.projectId || '';
185
+ const orgId = config.orgId || '';
186
+ const appName = `${orgId}:${projectName}`;
187
+ const traceloopHeaders = {};
188
+ if (bearerToken) {
189
+ traceloopHeaders.Authorization = `Bearer ${bearerToken}`;
190
+ }
191
+ initialize({
192
+ appName,
193
+ baseUrl: url,
194
+ headers: traceloopHeaders,
195
+ disableBatch: devmode,
196
+ logLevel: 'error',
197
+ tracingEnabled: false, // Disable traceloop's own tracing (equivalent to Python's telemetryEnabled: false)
198
+ // Note: JavaScript SDK doesn't support resourceAttributes like Python
199
+ });
200
+ logger.debug(`Telemetry initialized with app_name: ${appName}`);
201
+ logger.debug('Telemetry configured successfully');
202
+ }
203
+ catch (error) {
204
+ logger.warn('Telemetry not available, skipping automatic instrumentation', {
205
+ error: error instanceof Error ? error.message : String(error),
206
+ });
207
+ }
208
+ running = true;
209
+ }
210
+ const tracer = opentelemetry.trace.getTracer(name, version);
211
+ const meter = metrics.getMeter(name, version);
212
+ const shutdown = async () => {
213
+ if (running) {
214
+ running = false;
215
+ logger.debug('shutting down OpenTelemetry');
216
+ await loggerProvider.provider
217
+ .forceFlush()
218
+ .catch((e) => logger.warn('error in forceFlush of otel provider. %s', e));
219
+ await loggerProvider.exporter
220
+ ?.shutdown()
221
+ .catch((e) => !devmode && logger.warn('error in shutdown of otel exporter. %s', e));
222
+ await instrumentationSDK
223
+ ?.shutdown()
224
+ .catch((e) => !devmode && logger.warn('error in shutdown of otel instrumentation. %s', e));
225
+ logger.debug('shut down OpenTelemetry');
226
+ }
227
+ };
228
+ if (url && isAuthenticated()) {
229
+ logger.debug('connected to Agentuity Agent Cloud');
230
+ }
231
+ return { tracer, meter, logger, shutdown };
232
+ }
233
+ //# sourceMappingURL=otel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otel.js","sourceRoot":"","sources":["../../src/otel/otel.ts"],"names":[],"mappings":"AACA,OAAO,aAAa,EAAE,EAAc,OAAO,EAAE,WAAW,EAAe,MAAM,oBAAoB,CAAC;AAClG,OAAO,KAAK,OAAO,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,2BAA2B,EAAE,MAAM,2CAA2C,CAAC;AACxF,OAAO,EACN,mBAAmB,EACnB,oBAAoB,EACpB,yBAAyB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,EACN,uBAAuB,EACvB,cAAc,EAEd,wBAAwB,GACxB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAC;AAC1F,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC9F,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAExD,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE5D,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AA+BxF,MAAM,qBAAqB,GAAG,KAAK,CAAC,CAAC,WAAW;AAChD,MAAM,wBAAwB,GAAG,MAAM,CAAC,CAAC,aAAa;AAEtD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAkB,EAAY,EAAE;IAC9D,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,GACxF,MAAM,CAAC;IAER,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IAEnC,OAAO,sBAAsB,CAAC;QAC7B,CAAC,iBAAiB,CAAC,EAAE,IAAI;QACzB,CAAC,oBAAoB,CAAC,EAAE,OAAO;QAC/B,kBAAkB,EAAE,KAAK,IAAI,SAAS;QACtC,sBAAsB,EAAE,SAAS,IAAI,SAAS;QAC9C,yBAAyB,EAAE,YAAY,IAAI,SAAS;QACpD,gBAAgB,EAAE,WAAW;QAC7B,oBAAoB,EAAE,OAAO;QAC7B,uBAAuB,EAAE,UAAU,IAAI,SAAS;QAChD,uBAAuB,EAAE,UAAU,IAAI,SAAS;KAChD,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,EAC7C,GAAG,EACH,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,aAAa,GAOb,EAAE,EAAE;IACJ,IAAI,SAA6B,CAAC;IAClC,IAAI,QAAwD,CAAC;IAE7D,IAAI,aAAa,EAAE,CAAC;QACnB,QAAQ,GAAG,IAAI,gBAAgB,CAAC,aAAa,CAAC,CAAC;QAC/C,SAAS,GAAG,IAAI,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IACnD,CAAC;SAAM,IAAI,GAAG,EAAE,CAAC;QAChB,gCAAgC;QAChC,MAAM,YAAY,GAAG,IAAI,eAAe,CAAC;YACxC,GAAG,EAAE,GAAG,GAAG,UAAU;YACrB,OAAO;YACP,WAAW,EAAE,oBAAoB,CAAC,IAAI;YACtC,aAAa,EAAE,MAAM;SACrB,CAAC,CAAC;QACH,QAAQ,GAAG,YAAY,CAAC;QACxB,SAAS,GAAG,IAAI,uBAAuB,CAAC,YAAY,CAAC,CAAC;IACvD,CAAC;SAAM,CAAC;QACP,SAAS,GAAG,IAAI,wBAAwB,CAAC,IAAI,wBAAwB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClF,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC;QACnC,QAAQ;QACR,UAAU,EAAE,CAAC,SAAS,CAAC;KACvB,CAAC,CAAC;IACH,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAE/C,OAAO;QACN,SAAS;QACT,QAAQ;QACR,QAAQ;KACR,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,EACxC,GAAG,EACH,OAAO,EACP,QAAQ,GAKR,EAAE,EAAE;IACJ,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC;QACpC,GAAG,EAAE,GAAG,GAAG,UAAU;QACrB,OAAO;QACP,WAAW,EAAE,oBAAoB,CAAC,IAAI;QACtC,aAAa,EAAE,MAAM;KACrB,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,IAAI,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC;QACnC,QAAQ;QACR,UAAU,EAAE,CAAC,SAAS,CAAC;KACvB,CAAC,CAAC;IACH,OAAO;QACN,QAAQ;QACR,QAAQ;QACR,SAAS;KACT,CAAC;AACH,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,MAAkB;IAC9C,MAAM,EACL,GAAG,EACH,IAAI,EACJ,OAAO,EACP,WAAW,EACX,WAAW,GAAG,aAAa,EAC3B,KAAK,EACL,SAAS,EACT,YAAY,EACZ,OAAO,GAAG,KAAK,EACf,QAAQ,GAAG,MAAM,EACjB,aAAa,GAAG,SAAS,GACzB,GAAG,MAAM,CAAC;IAEX,IAAI,OAA2C,CAAC;IAEhD,IAAI,WAAW,EAAE,CAAC;QACjB,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,aAAa,GAAG,UAAU,WAAW,EAAE,CAAC;IACjD,CAAC;IAED,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,cAAc,GAAG,6BAA6B,CAAC;QACpD,GAAG;QACH,OAAO;QACP,QAAQ;QACR,QAAQ;QACR,aAAa;KACb,CAAC,CAAC;IACH,MAAM,KAAK,GAAG;QACb,kBAAkB,EAAE,KAAK,IAAI,SAAS;QACtC,sBAAsB,EAAE,SAAS,IAAI,SAAS;QAC9C,yBAAyB,EAAE,YAAY,IAAI,SAAS;QACpD,gBAAgB,EAAE,WAAW;QAC7B,oBAAoB,EAAE,OAAO;QAC7B,qBAAqB,EAAE,YAAY;KACnC,CAAC;IACF,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAEpD,gDAAgD;IAChD,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAErC,MAAM,aAAa,GAAG,GAAG;QACxB,CAAC,CAAC,aAAa;YACd,CAAC,CAAC,IAAI,kBAAkB,CAAC,aAAa,CAAC;YACvC,CAAC,CAAC,IAAI,iBAAiB,CAAC;gBACtB,GAAG,EAAE,GAAG,GAAG,YAAY;gBACvB,OAAO;gBACP,SAAS,EAAE,IAAI;aACf,CAAC;QACJ,CAAC,CAAC,SAAS,CAAC;IAEb,MAAM,cAAc,GAAG,GAAG;QACzB,CAAC,CAAC,aAAa;YACd,CAAC,CAAC,IAAI,mBAAmB,CAAC,aAAa,CAAC;YACxC,CAAC,CAAC,IAAI,kBAAkB,CAAC;gBACvB,GAAG,EAAE,GAAG,GAAG,aAAa;gBACxB,OAAO;gBACP,SAAS,EAAE,IAAI;aACf,CAAC;QACJ,CAAC,CAAC,SAAS,CAAC;IAEb,kDAAkD;IAClD,MAAM,eAAe,GACpB,GAAG,IAAI,cAAc;QACpB,CAAC,CAAC,IAAI,6BAA6B,CAAC;YAClC,QAAQ,EAAE,cAAc;YACxB,mBAAmB,EAAE,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,wBAAwB;YAC/E,oBAAoB,EAAE,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,wBAAwB;SAChF,CAAC;QACH,CAAC,CAAC,SAAS,CAAC;IAEd,wDAAwD;IACxD,MAAM,gBAAgB,GACrB,GAAG,IAAI,cAAc;QACpB,CAAC,CAAC,IAAI,6BAA6B,CAAC;YAClC,QAAQ,EAAE,cAAc;YACxB,mBAAmB,EAAE,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,wBAAwB;YAC/E,oBAAoB,EAAE,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,wBAAwB;SAChF,CAAC;QACH,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,aAAa,GAAG,gBAAgB;QACrC,CAAC,CAAC,IAAI,aAAa,CAAC;YAClB,QAAQ;YACR,OAAO,EAAE,CAAC,gBAAgB,CAAC;SAC3B,CAAC;QACH,CAAC,CAAC,SAAS,CAAC;IAEb,IAAI,aAAa,EAAE,CAAC;QACnB,OAAO,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,WAAW,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEnF,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,kBAAuC,CAAC;IAE5C,IAAI,GAAG,EAAE,CAAC;QACT,MAAM,UAAU,GAAG,IAAI,mBAAmB,CAAC;YAC1C,WAAW,EAAE,CAAC,IAAI,yBAAyB,EAAE,EAAE,IAAI,oBAAoB,EAAE,CAAC;SAC1E,CAAC,CAAC;QACH,WAAW,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;QAE5C,eAAe,EAAE,CAAC;QAClB,kBAAkB,GAAG,IAAI,OAAO,CAAC;YAChC,kBAAkB,EAAE,cAAc,CAAC,SAAS;YAC5C,aAAa;YACb,YAAY,EAAE,eAAe;YAC7B,gBAAgB,EAAE,CAAC,2BAA2B,EAAE,CAAC;YACjD,QAAQ;YACR,iBAAiB,EAAE,UAAU;YAC7B,cAAc,EAAE,MAAM,CAAC,cAAc;SACrC,CAAC,CAAC;QACH,kBAAkB,CAAC,KAAK,EAAE,CAAC;QAC3B,WAAW,EAAE,KAAK,EAAE,CAAC;QAErB,IAAI,CAAC;YACJ,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;YAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,GAAG,KAAK,IAAI,WAAW,EAAE,CAAC;YAE1C,MAAM,gBAAgB,GAA2B,EAAE,CAAC;YACpD,IAAI,WAAW,EAAE,CAAC;gBACjB,gBAAgB,CAAC,aAAa,GAAG,UAAU,WAAW,EAAE,CAAC;YAC1D,CAAC;YAED,UAAU,CAAC;gBACV,OAAO;gBACP,OAAO,EAAE,GAAG;gBACZ,OAAO,EAAE,gBAAgB;gBACzB,YAAY,EAAE,OAAO;gBACrB,QAAQ,EAAE,OAAO;gBACjB,cAAc,EAAE,KAAK,EAAE,mFAAmF;gBAC1G,sEAAsE;aACtE,CAAC,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,wCAAwC,OAAO,EAAE,CAAC,CAAC;YAChE,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,6DAA6D,EAAE;gBAC1E,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC7D,CAAC,CAAC;QACJ,CAAC;QACD,OAAO,GAAG,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAE9C,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC3B,IAAI,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,KAAK,CAAC;YAChB,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAC5C,MAAM,cAAc,CAAC,QAAQ;iBAC3B,UAAU,EAAE;iBACZ,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,0CAA0C,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3E,MAAM,cAAc,CAAC,QAAQ;gBAC5B,EAAE,QAAQ,EAAE;iBACX,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,wCAAwC,EAAE,CAAC,CAAC,CAAC,CAAC;YACrF,MAAM,kBAAkB;gBACvB,EAAE,QAAQ,EAAE;iBACX,KAAK,CACL,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,+CAA+C,EAAE,CAAC,CAAC,CAClF,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACzC,CAAC;IACF,CAAC,CAAC;IAEF,IAAI,GAAG,IAAI,eAAe,EAAE,EAAE,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC5C,CAAC"}
package/dist/router.js ADDED
@@ -0,0 +1,350 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ /* eslint-disable @typescript-eslint/no-empty-object-type */
3
+ import { Hono } from 'hono';
4
+ import { stream as honoStream, streamSSE as honoStreamSSE } from 'hono/streaming';
5
+ import { upgradeWebSocket as honoUpgradeWebSocket } from 'hono/bun';
6
+ import { hash, returnResponse } from './_util';
7
+ import { getAgentAsyncLocalStorage } from './_context';
8
+ import { parseEmail } from './io/email';
9
+ export const createRouter = () => {
10
+ const router = new Hono();
11
+ // tslint:disable-next-line:no-any no-unused-variable
12
+ // biome-ignore lint:no-any
13
+ const _router = router;
14
+ for (const method of ['get', 'put', 'post', 'delete', 'options', 'patch']) {
15
+ const _originalInvoker = _router[method].bind(router);
16
+ _router[method] = (path, ...args) => {
17
+ if (args.length === 1) {
18
+ const arg = args[0];
19
+ // Check if it's a middleware (not our agent handler)
20
+ if (typeof arg === 'function' && arg.length === 2) {
21
+ // Middleware only: (path, middleware)
22
+ return _originalInvoker(path, arg);
23
+ }
24
+ // 2-arg: (path, handler)
25
+ const handler = arg;
26
+ const wrapper = async (c) => {
27
+ let result = handler(c);
28
+ if (result instanceof Promise)
29
+ result = await result;
30
+ // If handler returns a Response (e.g., websocket upgrade), return it unchanged
31
+ if (result instanceof Response)
32
+ return result;
33
+ return returnResponse(c, result);
34
+ };
35
+ return _originalInvoker(path, wrapper);
36
+ }
37
+ else {
38
+ // 3-arg: (path, middleware, handler)
39
+ const middleware = args[0];
40
+ const handler = args[1];
41
+ const wrapper = async (c) => {
42
+ let result = handler(c);
43
+ if (result instanceof Promise)
44
+ result = await result;
45
+ // If handler returns a Response (e.g., websocket upgrade), return it unchanged
46
+ if (result instanceof Response) {
47
+ return result;
48
+ }
49
+ return returnResponse(c, result);
50
+ };
51
+ return _originalInvoker(path, middleware, wrapper);
52
+ }
53
+ };
54
+ }
55
+ // shim in special routes
56
+ _router.email = (address, ...args) => {
57
+ let middleware;
58
+ let handler;
59
+ if (args.length === 1) {
60
+ handler = args[0];
61
+ }
62
+ else {
63
+ middleware = args[0];
64
+ handler = args[1];
65
+ }
66
+ const id = hash(address);
67
+ const path = `/${id}`;
68
+ // registerEmailHandler(address)
69
+ const wrapper = async (c) => {
70
+ const contentType = (c.req.header('content-type') || '').trim().toLowerCase();
71
+ if (!contentType.includes('message/rfc822')) {
72
+ return c.text('Bad Request: Content-Type must be message/rfc822', 400);
73
+ }
74
+ const arrayBuffer = await c.req.arrayBuffer();
75
+ const buffer = Buffer.from(arrayBuffer);
76
+ const email = await parseEmail(buffer);
77
+ let result = handler(email, c);
78
+ if (result instanceof Promise)
79
+ result = await result;
80
+ if (result === undefined) {
81
+ return c.text('OK', 200);
82
+ }
83
+ return returnResponse(c, result);
84
+ };
85
+ if (middleware) {
86
+ return router.post(path, middleware, wrapper);
87
+ }
88
+ else {
89
+ return router.post(path, wrapper);
90
+ }
91
+ };
92
+ _router.sms = ({ number }, handler) => {
93
+ const id = hash(number);
94
+ const path = `/${id}`;
95
+ // registerSMSHandler(number)
96
+ const wrapper = async (c) => {
97
+ let result = handler(c);
98
+ if (result instanceof Promise)
99
+ result = await result;
100
+ return returnResponse(c, result);
101
+ };
102
+ return router.post(path, wrapper);
103
+ };
104
+ _router.cron = (schedule, handler) => {
105
+ const id = hash(schedule);
106
+ const path = `/${id}`;
107
+ // registerCronHandler(schedule)
108
+ const wrapper = async (c) => {
109
+ let result = handler(c);
110
+ if (result instanceof Promise)
111
+ result = await result;
112
+ return returnResponse(c, result);
113
+ };
114
+ return router.post(path, wrapper);
115
+ };
116
+ _router.stream = (path, ...args) => {
117
+ let middleware;
118
+ let handler;
119
+ if (args.length === 1) {
120
+ handler = args[0];
121
+ }
122
+ else {
123
+ middleware = args[0];
124
+ handler = args[1];
125
+ }
126
+ const wrapper = (c) => {
127
+ // Capture the AgentContext from the request
128
+ const asyncLocalStorage = getAgentAsyncLocalStorage();
129
+ const capturedContext = asyncLocalStorage.getStore();
130
+ return honoStream(c, async (s) => {
131
+ const runInContext = async () => {
132
+ try {
133
+ let streamResult = handler(c);
134
+ if (streamResult instanceof Promise)
135
+ streamResult = await streamResult;
136
+ await s.pipe(streamResult);
137
+ }
138
+ catch (err) {
139
+ c.var.logger.error('Stream error:', err);
140
+ throw err;
141
+ }
142
+ };
143
+ if (capturedContext) {
144
+ await asyncLocalStorage.run(capturedContext, runInContext);
145
+ }
146
+ else {
147
+ await runInContext();
148
+ }
149
+ });
150
+ };
151
+ if (middleware) {
152
+ return router.get(path, middleware, wrapper);
153
+ }
154
+ else {
155
+ return router.get(path, wrapper);
156
+ }
157
+ };
158
+ _router.websocket = (path, ...args) => {
159
+ let middleware;
160
+ let handler;
161
+ if (args.length === 1) {
162
+ handler = args[0];
163
+ }
164
+ else {
165
+ middleware = args[0];
166
+ handler = args[1];
167
+ }
168
+ const wrapper = honoUpgradeWebSocket((c) => {
169
+ let openHandler;
170
+ let messageHandler;
171
+ let closeHandler;
172
+ let initialized = false;
173
+ // Capture the AgentContext from the upgrade request
174
+ const asyncLocalStorage = getAgentAsyncLocalStorage();
175
+ const capturedContext = asyncLocalStorage.getStore();
176
+ const wsConnection = {
177
+ onOpen: (h) => {
178
+ openHandler = h;
179
+ },
180
+ onMessage: (h) => {
181
+ messageHandler = h;
182
+ },
183
+ onClose: (h) => {
184
+ closeHandler = h;
185
+ },
186
+ send: (_data) => {
187
+ // This will be bound to the actual ws in the handlers
188
+ },
189
+ };
190
+ const setupResult = handler(c);
191
+ const setupFn = typeof setupResult === 'function' ? setupResult : null;
192
+ // Call setup IMMEDIATELY during upgrade, not in onOpen
193
+ // This allows the user's code to register handlers before events fire
194
+ if (setupFn) {
195
+ if (capturedContext) {
196
+ asyncLocalStorage.run(capturedContext, () => setupFn(wsConnection));
197
+ }
198
+ else {
199
+ setupFn(wsConnection);
200
+ }
201
+ initialized = true;
202
+ }
203
+ return {
204
+ onOpen: async (event, ws) => {
205
+ try {
206
+ // Bind the real ws.send now that we have the actual websocket
207
+ wsConnection.send = (data) => ws.send(data);
208
+ if (openHandler) {
209
+ // Run handler in captured context
210
+ const handler = openHandler;
211
+ if (capturedContext) {
212
+ await asyncLocalStorage.run(capturedContext, () => handler(event));
213
+ }
214
+ else {
215
+ await handler(event);
216
+ }
217
+ }
218
+ }
219
+ catch (err) {
220
+ c.var.logger?.error('WebSocket onOpen error:', err);
221
+ throw err;
222
+ }
223
+ },
224
+ onMessage: async (event, ws) => {
225
+ try {
226
+ // Lazy initialization fallback (shouldn't normally happen)
227
+ if (!initialized && setupFn) {
228
+ wsConnection.send = (data) => ws.send(data);
229
+ if (capturedContext) {
230
+ await asyncLocalStorage.run(capturedContext, async () => {
231
+ const result = setupFn(wsConnection);
232
+ if (result instanceof Promise)
233
+ await result;
234
+ });
235
+ }
236
+ else {
237
+ const result = setupFn(wsConnection);
238
+ if (result instanceof Promise)
239
+ await result;
240
+ }
241
+ initialized = true;
242
+ }
243
+ if (messageHandler) {
244
+ // Run handler in captured context
245
+ const handler = messageHandler;
246
+ if (capturedContext) {
247
+ await asyncLocalStorage.run(capturedContext, () => handler(event));
248
+ }
249
+ else {
250
+ await handler(event);
251
+ }
252
+ }
253
+ }
254
+ catch (err) {
255
+ c.var.logger?.error('WebSocket onMessage error:', err);
256
+ throw err;
257
+ }
258
+ },
259
+ onClose: async (event, _ws) => {
260
+ try {
261
+ if (closeHandler) {
262
+ // Run handler in captured context
263
+ const handler = closeHandler;
264
+ if (capturedContext) {
265
+ await asyncLocalStorage.run(capturedContext, () => handler(event));
266
+ }
267
+ else {
268
+ await handler(event);
269
+ }
270
+ }
271
+ }
272
+ catch (err) {
273
+ c.var.logger?.error('WebSocket onClose error:', err);
274
+ }
275
+ },
276
+ };
277
+ });
278
+ // wrapper is what upgradeWebSocket(...) returned. Force arity=2 so our get shim
279
+ // recognizes it as middleware and does not wrap/convert undefined -> 200.
280
+ const wsMiddleware = (c, next) => wrapper(c, next);
281
+ if (middleware) {
282
+ // Compose into a single middleware to avoid the 3-arg route which treats the
283
+ // second function as a handler and wraps it.
284
+ const composed = async (c, next) => {
285
+ return middleware(c, async () => {
286
+ await wsMiddleware(c, next);
287
+ });
288
+ };
289
+ return router.get(path, composed);
290
+ }
291
+ else {
292
+ return router.get(path, wsMiddleware);
293
+ }
294
+ };
295
+ _router.sse = (path, ...args) => {
296
+ let middleware;
297
+ let handler;
298
+ if (args.length === 1) {
299
+ handler = args[0];
300
+ }
301
+ else {
302
+ middleware = args[0];
303
+ handler = args[1];
304
+ }
305
+ const wrapper = (c) => {
306
+ // Capture the AgentContext from the request
307
+ const asyncLocalStorage = getAgentAsyncLocalStorage();
308
+ const capturedContext = asyncLocalStorage.getStore();
309
+ return honoStreamSSE(c, async (stream) => {
310
+ // Wrap the stream to intercept write() calls
311
+ const wrappedStream = {
312
+ ...stream,
313
+ write: async (data) => {
314
+ // Convert simple write to writeSSE format
315
+ if (typeof data === 'string' ||
316
+ typeof data === 'number' ||
317
+ typeof data === 'boolean') {
318
+ return stream.writeSSE({ data: String(data) });
319
+ }
320
+ else if (typeof data === 'object' && data !== null) {
321
+ // If it's already an SSE message object, pass it through
322
+ return stream.writeSSE(data);
323
+ }
324
+ return stream.writeSSE({ data: String(data) });
325
+ },
326
+ writeSSE: stream.writeSSE.bind(stream),
327
+ onAbort: stream.onAbort.bind(stream),
328
+ close: stream.close?.bind(stream),
329
+ };
330
+ const runInContext = async () => {
331
+ await handler(c)(wrappedStream);
332
+ };
333
+ if (capturedContext) {
334
+ await asyncLocalStorage.run(capturedContext, runInContext);
335
+ }
336
+ else {
337
+ await runInContext();
338
+ }
339
+ });
340
+ };
341
+ if (middleware) {
342
+ return router.get(path, middleware, wrapper);
343
+ }
344
+ else {
345
+ return router.get(path, wrapper);
346
+ }
347
+ };
348
+ return router;
349
+ };
350
+ //# sourceMappingURL=router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * An implementation of the EvalRunEventProvider which wraps multiple providers
3
+ */
4
+ export class CompositeEvalRunEventProvider {
5
+ providers;
6
+ constructor(...providers) {
7
+ this.providers = providers;
8
+ }
9
+ /**
10
+ * called when the eval run starts
11
+ *
12
+ * @param event EvalRunStartEvent
13
+ */
14
+ async start(event) {
15
+ await Promise.allSettled(this.providers.map((provider) => provider.start(event)));
16
+ }
17
+ /**
18
+ * called when the eval run completes
19
+ *
20
+ * @param event EvalRunCompleteEvent
21
+ */
22
+ async complete(event) {
23
+ await Promise.allSettled(this.providers.map((provider) => provider.complete(event)));
24
+ }
25
+ }
26
+ //# sourceMappingURL=composite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composite.js","sourceRoot":"","sources":["../../../src/services/evalrun/composite.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,MAAM,OAAO,6BAA6B;IACjC,SAAS,CAAyB;IAE1C,YAAY,GAAG,SAAiC;QAC/C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAK,CAAC,KAAwB;QACnC,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnF,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,QAAQ,CAAC,KAA2B;QACzC,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACtF,CAAC;CACD"}