@agentuity/runtime 2.0.11 → 3.0.0-alpha.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.
- package/dist/index.d.ts +37 -65
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +59 -61
- package/dist/index.js.map +1 -1
- package/package.json +9 -38
- package/src/index.ts +58 -259
- package/AGENTS.md +0 -116
- package/dist/_config.d.ts +0 -100
- package/dist/_config.d.ts.map +0 -1
- package/dist/_config.js +0 -147
- package/dist/_config.js.map +0 -1
- package/dist/_context.d.ts +0 -80
- package/dist/_context.d.ts.map +0 -1
- package/dist/_context.js +0 -160
- package/dist/_context.js.map +0 -1
- package/dist/_events.d.ts +0 -64
- package/dist/_events.d.ts.map +0 -1
- package/dist/_events.js +0 -92
- package/dist/_events.js.map +0 -1
- package/dist/_globals.d.ts +0 -58
- package/dist/_globals.d.ts.map +0 -1
- package/dist/_globals.js +0 -71
- package/dist/_globals.js.map +0 -1
- package/dist/_idle.d.ts +0 -7
- package/dist/_idle.d.ts.map +0 -1
- package/dist/_idle.js +0 -10
- package/dist/_idle.js.map +0 -1
- package/dist/_metadata.d.ts +0 -117
- package/dist/_metadata.d.ts.map +0 -1
- package/dist/_metadata.js +0 -268
- package/dist/_metadata.js.map +0 -1
- package/dist/_process-protection.d.ts +0 -27
- package/dist/_process-protection.d.ts.map +0 -1
- package/dist/_process-protection.js +0 -56
- package/dist/_process-protection.js.map +0 -1
- package/dist/_server.d.ts +0 -50
- package/dist/_server.d.ts.map +0 -1
- package/dist/_server.js +0 -89
- package/dist/_server.js.map +0 -1
- package/dist/_services.d.ts +0 -25
- package/dist/_services.d.ts.map +0 -1
- package/dist/_services.js +0 -286
- package/dist/_services.js.map +0 -1
- package/dist/_standalone.d.ts +0 -212
- package/dist/_standalone.d.ts.map +0 -1
- package/dist/_standalone.js +0 -556
- package/dist/_standalone.js.map +0 -1
- package/dist/_tokens.d.ts +0 -12
- package/dist/_tokens.d.ts.map +0 -1
- package/dist/_tokens.js +0 -97
- package/dist/_tokens.js.map +0 -1
- package/dist/_util.d.ts +0 -16
- package/dist/_util.d.ts.map +0 -1
- package/dist/_util.js +0 -54
- package/dist/_util.js.map +0 -1
- package/dist/_validation.d.ts +0 -89
- package/dist/_validation.d.ts.map +0 -1
- package/dist/_validation.js +0 -29
- package/dist/_validation.js.map +0 -1
- package/dist/_waituntil.d.ts +0 -32
- package/dist/_waituntil.d.ts.map +0 -1
- package/dist/_waituntil.js +0 -156
- package/dist/_waituntil.js.map +0 -1
- package/dist/agent.d.ts +0 -1262
- package/dist/agent.d.ts.map +0 -1
- package/dist/agent.js +0 -981
- package/dist/agent.js.map +0 -1
- package/dist/app.d.ts +0 -514
- package/dist/app.d.ts.map +0 -1
- package/dist/app.js +0 -228
- package/dist/app.js.map +0 -1
- package/dist/bootstrap.d.ts +0 -44
- package/dist/bootstrap.d.ts.map +0 -1
- package/dist/bootstrap.js +0 -259
- package/dist/bootstrap.js.map +0 -1
- package/dist/bun-s3-patch.d.ts +0 -37
- package/dist/bun-s3-patch.d.ts.map +0 -1
- package/dist/bun-s3-patch.js +0 -142
- package/dist/bun-s3-patch.js.map +0 -1
- package/dist/cors.d.ts +0 -42
- package/dist/cors.d.ts.map +0 -1
- package/dist/cors.js +0 -117
- package/dist/cors.js.map +0 -1
- package/dist/dev-patches/aisdk.d.ts +0 -17
- package/dist/dev-patches/aisdk.d.ts.map +0 -1
- package/dist/dev-patches/aisdk.js +0 -160
- package/dist/dev-patches/aisdk.js.map +0 -1
- package/dist/dev-patches/gateway.d.ts +0 -16
- package/dist/dev-patches/gateway.d.ts.map +0 -1
- package/dist/dev-patches/gateway.js +0 -54
- package/dist/dev-patches/gateway.js.map +0 -1
- package/dist/dev-patches/index.d.ts +0 -21
- package/dist/dev-patches/index.d.ts.map +0 -1
- package/dist/dev-patches/index.js +0 -33
- package/dist/dev-patches/index.js.map +0 -1
- package/dist/dev-patches/otel-llm.d.ts +0 -12
- package/dist/dev-patches/otel-llm.d.ts.map +0 -1
- package/dist/dev-patches/otel-llm.js +0 -352
- package/dist/dev-patches/otel-llm.js.map +0 -1
- package/dist/devmode.d.ts +0 -3
- package/dist/devmode.d.ts.map +0 -1
- package/dist/devmode.js +0 -167
- package/dist/devmode.js.map +0 -1
- package/dist/eval.d.ts +0 -91
- package/dist/eval.d.ts.map +0 -1
- package/dist/eval.js +0 -16
- package/dist/eval.js.map +0 -1
- package/dist/handlers/_route-meta.d.ts +0 -22
- package/dist/handlers/_route-meta.d.ts.map +0 -1
- package/dist/handlers/_route-meta.js +0 -25
- package/dist/handlers/_route-meta.js.map +0 -1
- package/dist/handlers/cron.d.ts +0 -73
- package/dist/handlers/cron.d.ts.map +0 -1
- package/dist/handlers/cron.js +0 -43
- package/dist/handlers/cron.js.map +0 -1
- package/dist/handlers/index.d.ts +0 -6
- package/dist/handlers/index.d.ts.map +0 -1
- package/dist/handlers/index.js +0 -6
- package/dist/handlers/index.js.map +0 -1
- package/dist/handlers/sse.d.ts +0 -163
- package/dist/handlers/sse.d.ts.map +0 -1
- package/dist/handlers/sse.js +0 -175
- package/dist/handlers/sse.js.map +0 -1
- package/dist/handlers/stream.d.ts +0 -52
- package/dist/handlers/stream.d.ts.map +0 -1
- package/dist/handlers/stream.js +0 -108
- package/dist/handlers/stream.js.map +0 -1
- package/dist/handlers/webrtc.d.ts +0 -49
- package/dist/handlers/webrtc.d.ts.map +0 -1
- package/dist/handlers/webrtc.js +0 -109
- package/dist/handlers/webrtc.js.map +0 -1
- package/dist/handlers/websocket.d.ts +0 -88
- package/dist/handlers/websocket.d.ts.map +0 -1
- package/dist/handlers/websocket.js +0 -161
- package/dist/handlers/websocket.js.map +0 -1
- package/dist/logger/console.d.ts +0 -70
- package/dist/logger/console.d.ts.map +0 -1
- package/dist/logger/console.js +0 -278
- package/dist/logger/console.js.map +0 -1
- package/dist/logger/index.d.ts +0 -3
- package/dist/logger/index.d.ts.map +0 -1
- package/dist/logger/index.js +0 -3
- package/dist/logger/index.js.map +0 -1
- package/dist/logger/internal.d.ts +0 -79
- package/dist/logger/internal.d.ts.map +0 -1
- package/dist/logger/internal.js +0 -133
- package/dist/logger/internal.js.map +0 -1
- package/dist/logger/logger.d.ts +0 -41
- package/dist/logger/logger.d.ts.map +0 -1
- package/dist/logger/logger.js +0 -2
- package/dist/logger/logger.js.map +0 -1
- package/dist/logger/user.d.ts +0 -8
- package/dist/logger/user.d.ts.map +0 -1
- package/dist/logger/user.js +0 -7
- package/dist/logger/user.js.map +0 -1
- package/dist/logger/util.d.ts +0 -11
- package/dist/logger/util.d.ts.map +0 -1
- package/dist/logger/util.js +0 -77
- package/dist/logger/util.js.map +0 -1
- package/dist/middleware.d.ts +0 -105
- package/dist/middleware.d.ts.map +0 -1
- package/dist/middleware.js +0 -763
- package/dist/middleware.js.map +0 -1
- package/dist/otel/config.d.ts +0 -19
- package/dist/otel/config.d.ts.map +0 -1
- package/dist/otel/config.js +0 -26
- package/dist/otel/config.js.map +0 -1
- package/dist/otel/console.d.ts +0 -33
- package/dist/otel/console.d.ts.map +0 -1
- package/dist/otel/console.js +0 -86
- package/dist/otel/console.js.map +0 -1
- package/dist/otel/exporters/index.d.ts +0 -4
- package/dist/otel/exporters/index.d.ts.map +0 -1
- package/dist/otel/exporters/index.js +0 -4
- package/dist/otel/exporters/index.js.map +0 -1
- package/dist/otel/exporters/jsonl-log-exporter.d.ts +0 -36
- package/dist/otel/exporters/jsonl-log-exporter.d.ts.map +0 -1
- package/dist/otel/exporters/jsonl-log-exporter.js +0 -103
- package/dist/otel/exporters/jsonl-log-exporter.js.map +0 -1
- package/dist/otel/exporters/jsonl-metric-exporter.d.ts +0 -40
- package/dist/otel/exporters/jsonl-metric-exporter.d.ts.map +0 -1
- package/dist/otel/exporters/jsonl-metric-exporter.js +0 -104
- package/dist/otel/exporters/jsonl-metric-exporter.js.map +0 -1
- package/dist/otel/exporters/jsonl-trace-exporter.d.ts +0 -36
- package/dist/otel/exporters/jsonl-trace-exporter.d.ts.map +0 -1
- package/dist/otel/exporters/jsonl-trace-exporter.js +0 -111
- package/dist/otel/exporters/jsonl-trace-exporter.js.map +0 -1
- package/dist/otel/fetch.d.ts +0 -12
- package/dist/otel/fetch.d.ts.map +0 -1
- package/dist/otel/fetch.js +0 -82
- package/dist/otel/fetch.js.map +0 -1
- package/dist/otel/http.d.ts +0 -16
- package/dist/otel/http.d.ts.map +0 -1
- package/dist/otel/http.js +0 -44
- package/dist/otel/http.js.map +0 -1
- package/dist/otel/logger.d.ts +0 -37
- package/dist/otel/logger.d.ts.map +0 -1
- package/dist/otel/logger.js +0 -265
- package/dist/otel/logger.js.map +0 -1
- package/dist/otel/otel.d.ts +0 -68
- package/dist/otel/otel.d.ts.map +0 -1
- package/dist/otel/otel.js +0 -245
- package/dist/otel/otel.js.map +0 -1
- package/dist/otel/tracestate.d.ts +0 -44
- package/dist/otel/tracestate.d.ts.map +0 -1
- package/dist/otel/tracestate.js +0 -84
- package/dist/otel/tracestate.js.map +0 -1
- package/dist/router.d.ts +0 -66
- package/dist/router.d.ts.map +0 -1
- package/dist/router.js +0 -44
- package/dist/router.js.map +0 -1
- package/dist/services/evalrun/composite.d.ts +0 -21
- package/dist/services/evalrun/composite.d.ts.map +0 -1
- package/dist/services/evalrun/composite.js +0 -26
- package/dist/services/evalrun/composite.js.map +0 -1
- package/dist/services/evalrun/http.d.ts +0 -24
- package/dist/services/evalrun/http.d.ts.map +0 -1
- package/dist/services/evalrun/http.js +0 -115
- package/dist/services/evalrun/http.js.map +0 -1
- package/dist/services/evalrun/index.d.ts +0 -5
- package/dist/services/evalrun/index.d.ts.map +0 -1
- package/dist/services/evalrun/index.js +0 -5
- package/dist/services/evalrun/index.js.map +0 -1
- package/dist/services/evalrun/json.d.ts +0 -21
- package/dist/services/evalrun/json.d.ts.map +0 -1
- package/dist/services/evalrun/json.js +0 -38
- package/dist/services/evalrun/json.js.map +0 -1
- package/dist/services/evalrun/local.d.ts +0 -19
- package/dist/services/evalrun/local.d.ts.map +0 -1
- package/dist/services/evalrun/local.js +0 -22
- package/dist/services/evalrun/local.js.map +0 -1
- package/dist/services/local/_db.d.ts +0 -4
- package/dist/services/local/_db.d.ts.map +0 -1
- package/dist/services/local/_db.js +0 -281
- package/dist/services/local/_db.js.map +0 -1
- package/dist/services/local/_router.d.ts +0 -3
- package/dist/services/local/_router.d.ts.map +0 -1
- package/dist/services/local/_router.js +0 -28
- package/dist/services/local/_router.js.map +0 -1
- package/dist/services/local/_util.d.ts +0 -18
- package/dist/services/local/_util.d.ts.map +0 -1
- package/dist/services/local/_util.js +0 -44
- package/dist/services/local/_util.js.map +0 -1
- package/dist/services/local/email.d.ts +0 -24
- package/dist/services/local/email.d.ts.map +0 -1
- package/dist/services/local/email.js +0 -58
- package/dist/services/local/email.js.map +0 -1
- package/dist/services/local/index.d.ts +0 -10
- package/dist/services/local/index.d.ts.map +0 -1
- package/dist/services/local/index.js +0 -10
- package/dist/services/local/index.js.map +0 -1
- package/dist/services/local/keyvalue.d.ts +0 -17
- package/dist/services/local/keyvalue.d.ts.map +0 -1
- package/dist/services/local/keyvalue.js +0 -133
- package/dist/services/local/keyvalue.js.map +0 -1
- package/dist/services/local/queue.d.ts +0 -10
- package/dist/services/local/queue.d.ts.map +0 -1
- package/dist/services/local/queue.js +0 -96
- package/dist/services/local/queue.js.map +0 -1
- package/dist/services/local/stream.d.ts +0 -12
- package/dist/services/local/stream.d.ts.map +0 -1
- package/dist/services/local/stream.js +0 -266
- package/dist/services/local/stream.js.map +0 -1
- package/dist/services/local/task.d.ts +0 -55
- package/dist/services/local/task.d.ts.map +0 -1
- package/dist/services/local/task.js +0 -1248
- package/dist/services/local/task.js.map +0 -1
- package/dist/services/local/vector.d.ts +0 -17
- package/dist/services/local/vector.d.ts.map +0 -1
- package/dist/services/local/vector.js +0 -303
- package/dist/services/local/vector.js.map +0 -1
- package/dist/services/sandbox/http.d.ts +0 -23
- package/dist/services/sandbox/http.d.ts.map +0 -1
- package/dist/services/sandbox/http.js +0 -327
- package/dist/services/sandbox/http.js.map +0 -1
- package/dist/services/sandbox/index.d.ts +0 -2
- package/dist/services/sandbox/index.d.ts.map +0 -1
- package/dist/services/sandbox/index.js +0 -2
- package/dist/services/sandbox/index.js.map +0 -1
- package/dist/services/session/composite.d.ts +0 -21
- package/dist/services/session/composite.d.ts.map +0 -1
- package/dist/services/session/composite.js +0 -26
- package/dist/services/session/composite.js.map +0 -1
- package/dist/services/session/http.d.ts +0 -34
- package/dist/services/session/http.d.ts.map +0 -1
- package/dist/services/session/http.js +0 -124
- package/dist/services/session/http.js.map +0 -1
- package/dist/services/session/index.d.ts +0 -5
- package/dist/services/session/index.d.ts.map +0 -1
- package/dist/services/session/index.js +0 -5
- package/dist/services/session/index.js.map +0 -1
- package/dist/services/session/json.d.ts +0 -22
- package/dist/services/session/json.d.ts.map +0 -1
- package/dist/services/session/json.js +0 -35
- package/dist/services/session/json.js.map +0 -1
- package/dist/services/session/local.d.ts +0 -19
- package/dist/services/session/local.d.ts.map +0 -1
- package/dist/services/session/local.js +0 -23
- package/dist/services/session/local.js.map +0 -1
- package/dist/services/thread/local.d.ts +0 -20
- package/dist/services/thread/local.d.ts.map +0 -1
- package/dist/services/thread/local.js +0 -158
- package/dist/services/thread/local.js.map +0 -1
- package/dist/session.d.ts +0 -734
- package/dist/session.d.ts.map +0 -1
- package/dist/session.js +0 -1140
- package/dist/session.js.map +0 -1
- package/dist/signature.d.ts +0 -22
- package/dist/signature.d.ts.map +0 -1
- package/dist/signature.js +0 -63
- package/dist/signature.js.map +0 -1
- package/dist/validator.d.ts +0 -142
- package/dist/validator.d.ts.map +0 -1
- package/dist/validator.js +0 -149
- package/dist/validator.js.map +0 -1
- package/dist/version-check.d.ts +0 -20
- package/dist/version-check.d.ts.map +0 -1
- package/dist/version-check.js +0 -157
- package/dist/version-check.js.map +0 -1
- package/dist/web.d.ts +0 -8
- package/dist/web.d.ts.map +0 -1
- package/dist/web.js +0 -67
- package/dist/web.js.map +0 -1
- package/dist/webrtc-signaling.d.ts +0 -80
- package/dist/webrtc-signaling.d.ts.map +0 -1
- package/dist/webrtc-signaling.js +0 -237
- package/dist/webrtc-signaling.js.map +0 -1
- package/dist/workbench.d.ts +0 -17
- package/dist/workbench.d.ts.map +0 -1
- package/dist/workbench.js +0 -605
- package/dist/workbench.js.map +0 -1
- package/src/_config.ts +0 -163
- package/src/_context.ts +0 -240
- package/src/_events.ts +0 -142
- package/src/_globals.ts +0 -92
- package/src/_idle.ts +0 -10
- package/src/_metadata.ts +0 -407
- package/src/_process-protection.ts +0 -71
- package/src/_server.ts +0 -109
- package/src/_services.ts +0 -379
- package/src/_standalone.ts +0 -710
- package/src/_tokens.ts +0 -114
- package/src/_util.ts +0 -62
- package/src/_validation.ts +0 -119
- package/src/_waituntil.ts +0 -188
- package/src/agent.ts +0 -2739
- package/src/app.ts +0 -769
- package/src/bootstrap.ts +0 -321
- package/src/bun-s3-patch.ts +0 -224
- package/src/cors.ts +0 -137
- package/src/dev-patches/aisdk.ts +0 -169
- package/src/dev-patches/gateway.ts +0 -68
- package/src/dev-patches/index.ts +0 -37
- package/src/dev-patches/otel-llm.ts +0 -405
- package/src/devmode.ts +0 -171
- package/src/eval.ts +0 -109
- package/src/globals.d.ts +0 -28
- package/src/handlers/_route-meta.ts +0 -33
- package/src/handlers/cron.ts +0 -141
- package/src/handlers/index.ts +0 -18
- package/src/handlers/sse.ts +0 -358
- package/src/handlers/stream.ts +0 -121
- package/src/handlers/webrtc.ts +0 -125
- package/src/handlers/websocket.ts +0 -203
- package/src/logger/console.ts +0 -323
- package/src/logger/index.ts +0 -2
- package/src/logger/internal.ts +0 -165
- package/src/logger/logger.ts +0 -44
- package/src/logger/user.ts +0 -15
- package/src/logger/util.ts +0 -80
- package/src/middleware.ts +0 -1095
- package/src/otel/config.ts +0 -47
- package/src/otel/console.ts +0 -91
- package/src/otel/exporters/README.md +0 -217
- package/src/otel/exporters/index.ts +0 -3
- package/src/otel/exporters/jsonl-log-exporter.ts +0 -113
- package/src/otel/exporters/jsonl-metric-exporter.ts +0 -120
- package/src/otel/exporters/jsonl-trace-exporter.ts +0 -121
- package/src/otel/fetch.ts +0 -105
- package/src/otel/http.ts +0 -53
- package/src/otel/logger.ts +0 -293
- package/src/otel/otel.ts +0 -354
- package/src/otel/tracestate.ts +0 -108
- package/src/router.ts +0 -75
- package/src/services/evalrun/composite.ts +0 -34
- package/src/services/evalrun/http.ts +0 -167
- package/src/services/evalrun/index.ts +0 -4
- package/src/services/evalrun/json.ts +0 -46
- package/src/services/evalrun/local.ts +0 -28
- package/src/services/local/README.md +0 -1576
- package/src/services/local/_db.ts +0 -353
- package/src/services/local/_router.ts +0 -40
- package/src/services/local/_util.ts +0 -55
- package/src/services/local/email.ts +0 -91
- package/src/services/local/index.ts +0 -9
- package/src/services/local/keyvalue.ts +0 -174
- package/src/services/local/queue.ts +0 -145
- package/src/services/local/stream.ts +0 -358
- package/src/services/local/task.ts +0 -1711
- package/src/services/local/vector.ts +0 -438
- package/src/services/sandbox/http.ts +0 -522
- package/src/services/sandbox/index.ts +0 -1
- package/src/services/session/composite.ts +0 -33
- package/src/services/session/http.ts +0 -167
- package/src/services/session/index.ts +0 -4
- package/src/services/session/json.ts +0 -42
- package/src/services/session/local.ts +0 -33
- package/src/services/thread/local.ts +0 -199
- package/src/session.ts +0 -1960
- package/src/signature.ts +0 -82
- package/src/validator.ts +0 -283
- package/src/version-check.ts +0 -184
- package/src/web.ts +0 -76
- package/src/webrtc-signaling.ts +0 -288
- package/src/workbench.ts +0 -725
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
import { APIClient, APIResponseSchemaNoData } from '@agentuity/server';
|
|
2
|
-
import {
|
|
3
|
-
type SessionEventProvider,
|
|
4
|
-
type SessionStartEvent,
|
|
5
|
-
SessionStartEventDelayedSchema,
|
|
6
|
-
SessionCompleteEventDelayedSchema,
|
|
7
|
-
type SessionCompleteEvent,
|
|
8
|
-
type Logger,
|
|
9
|
-
StructuredError,
|
|
10
|
-
} from '@agentuity/core';
|
|
11
|
-
import { context, trace, SpanStatusCode } from '@opentelemetry/api';
|
|
12
|
-
import { internal } from '../../logger/internal';
|
|
13
|
-
|
|
14
|
-
const SessionResponseError = StructuredError('SessionResponseError');
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* An implementation of the SessionEventProvider which uses HTTP for delivery.
|
|
18
|
-
*
|
|
19
|
-
* This provider checks that the event has required fields (orgId, projectId for start events)
|
|
20
|
-
* before sending to the backend. If required fields are missing, the event is silently skipped.
|
|
21
|
-
*/
|
|
22
|
-
export class HTTPSessionEventProvider implements SessionEventProvider {
|
|
23
|
-
private apiClient: APIClient;
|
|
24
|
-
private logger: Logger;
|
|
25
|
-
|
|
26
|
-
constructor(client: APIClient, logger: Logger) {
|
|
27
|
-
this.apiClient = client;
|
|
28
|
-
this.logger = logger;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Check if a start event has all required fields for HTTP delivery
|
|
33
|
-
*/
|
|
34
|
-
private canSendStartEvent(event: SessionStartEvent): boolean {
|
|
35
|
-
// orgId and projectId are required for the backend
|
|
36
|
-
if (!event.orgId || !event.projectId) {
|
|
37
|
-
internal.info(
|
|
38
|
-
'[session-http] skipping start event - missing required fields: orgId=%s, projectId=%s',
|
|
39
|
-
event.orgId ?? 'missing',
|
|
40
|
-
event.projectId ?? 'missing'
|
|
41
|
-
);
|
|
42
|
-
return false;
|
|
43
|
-
}
|
|
44
|
-
return true;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* called when the session starts
|
|
49
|
-
*
|
|
50
|
-
* @param event SessionStartEvent
|
|
51
|
-
*/
|
|
52
|
-
async start(event: SessionStartEvent): Promise<void> {
|
|
53
|
-
// Check required fields before sending
|
|
54
|
-
if (!this.canSendStartEvent(event)) {
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
const tracer = trace.getTracer('session');
|
|
59
|
-
const currentContext = context.active();
|
|
60
|
-
const span = tracer.startSpan('Session Start', {}, currentContext);
|
|
61
|
-
|
|
62
|
-
try {
|
|
63
|
-
internal.info('[session-http] sending start event: %s', event.id);
|
|
64
|
-
this.logger.debug('Sending session start event: %s', event.id);
|
|
65
|
-
|
|
66
|
-
const spanContext = trace.setSpan(currentContext, span);
|
|
67
|
-
const resp = await context.with(spanContext, () =>
|
|
68
|
-
this.apiClient.post(
|
|
69
|
-
'/session',
|
|
70
|
-
{ ...event, timestamp: Date.now() },
|
|
71
|
-
APIResponseSchemaNoData(),
|
|
72
|
-
SessionStartEventDelayedSchema
|
|
73
|
-
)
|
|
74
|
-
);
|
|
75
|
-
|
|
76
|
-
if (resp.success) {
|
|
77
|
-
internal.info('[session-http] start event sent successfully: %s', event.id);
|
|
78
|
-
this.logger.debug('Session start event sent successfully: %s', event.id);
|
|
79
|
-
this.startedSessions.add(event.id);
|
|
80
|
-
span.setStatus({ code: SpanStatusCode.OK });
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
internal.info('[session-http] start event failed: %s - %s', event.id, resp.message);
|
|
84
|
-
span.setStatus({ code: SpanStatusCode.ERROR, message: resp.message });
|
|
85
|
-
throw new SessionResponseError({ message: resp.message });
|
|
86
|
-
} catch (error) {
|
|
87
|
-
span.recordException(error as Error);
|
|
88
|
-
span.setStatus({
|
|
89
|
-
code: SpanStatusCode.ERROR,
|
|
90
|
-
message: error instanceof Error ? error.message : String(error),
|
|
91
|
-
});
|
|
92
|
-
throw error;
|
|
93
|
-
} finally {
|
|
94
|
-
span.end();
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Track session IDs that have been started (to know if we should send complete)
|
|
100
|
-
*/
|
|
101
|
-
private startedSessions = new Set<string>();
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* called when the session completes
|
|
105
|
-
*
|
|
106
|
-
* @param event SessionCompleteEvent
|
|
107
|
-
*/
|
|
108
|
-
async complete(event: SessionCompleteEvent): Promise<void> {
|
|
109
|
-
// Always create the "Session End" span for telemetry purposes.
|
|
110
|
-
// This span is used by Catalyst to detect when a session has completed,
|
|
111
|
-
// so it must always be emitted even if we don't send the HTTP event.
|
|
112
|
-
const tracer = trace.getTracer('session');
|
|
113
|
-
const currentContext = context.active();
|
|
114
|
-
const span = tracer.startSpan('Session End', {}, currentContext);
|
|
115
|
-
|
|
116
|
-
try {
|
|
117
|
-
// Only send HTTP complete event if we successfully sent a start event.
|
|
118
|
-
// This prevents sending orphaned complete events when start was skipped.
|
|
119
|
-
// However, we still create the span above for telemetry.
|
|
120
|
-
if (!this.startedSessions.has(event.id)) {
|
|
121
|
-
internal.info(
|
|
122
|
-
'[session-http] skipping HTTP complete event (no matching start), but emitting Session End span: %s',
|
|
123
|
-
event.id
|
|
124
|
-
);
|
|
125
|
-
span.setStatus({ code: SpanStatusCode.OK });
|
|
126
|
-
return;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
internal.info(
|
|
130
|
-
'[session-http] sending complete event: %s, userData: %s',
|
|
131
|
-
event.id,
|
|
132
|
-
event.userData ? `${event.userData.length} bytes` : 'none'
|
|
133
|
-
);
|
|
134
|
-
this.logger.debug('Sending session complete event: %s', event.id);
|
|
135
|
-
|
|
136
|
-
const spanContext = trace.setSpan(currentContext, span);
|
|
137
|
-
const resp = await context.with(spanContext, () =>
|
|
138
|
-
this.apiClient.put(
|
|
139
|
-
'/session',
|
|
140
|
-
{ ...event, timestamp: Date.now() },
|
|
141
|
-
APIResponseSchemaNoData(),
|
|
142
|
-
SessionCompleteEventDelayedSchema
|
|
143
|
-
)
|
|
144
|
-
);
|
|
145
|
-
|
|
146
|
-
if (resp.success) {
|
|
147
|
-
this.startedSessions.delete(event.id);
|
|
148
|
-
internal.info('[session-http] complete event sent successfully: %s', event.id);
|
|
149
|
-
this.logger.debug('Session complete event sent successfully: %s', event.id);
|
|
150
|
-
span.setStatus({ code: SpanStatusCode.OK });
|
|
151
|
-
return;
|
|
152
|
-
}
|
|
153
|
-
internal.info('[session-http] complete event failed: %s - %s', event.id, resp.message);
|
|
154
|
-
span.setStatus({ code: SpanStatusCode.ERROR, message: resp.message });
|
|
155
|
-
throw new SessionResponseError({ message: resp.message });
|
|
156
|
-
} catch (error) {
|
|
157
|
-
span.recordException(error as Error);
|
|
158
|
-
span.setStatus({
|
|
159
|
-
code: SpanStatusCode.ERROR,
|
|
160
|
-
message: error instanceof Error ? error.message : String(error),
|
|
161
|
-
});
|
|
162
|
-
throw error;
|
|
163
|
-
} finally {
|
|
164
|
-
span.end();
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { join } from 'node:path';
|
|
2
|
-
import { randomUUID } from 'node:crypto';
|
|
3
|
-
import {
|
|
4
|
-
type SessionEventProvider,
|
|
5
|
-
type SessionStartEvent,
|
|
6
|
-
type SessionCompleteEvent,
|
|
7
|
-
} from '@agentuity/core';
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* An implementation of the SessionEventProvider which uses JSON logs for delivery
|
|
11
|
-
*/
|
|
12
|
-
export class JSONSessionEventProvider implements SessionEventProvider {
|
|
13
|
-
private directory: string;
|
|
14
|
-
|
|
15
|
-
constructor(directory: string) {
|
|
16
|
-
this.directory = directory;
|
|
17
|
-
}
|
|
18
|
-
private makeFilename(type: 'start' | 'complete'): string {
|
|
19
|
-
return join(this.directory, `session-${type}.${Date.now()}${randomUUID()}.json`);
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* called when the session starts
|
|
23
|
-
*
|
|
24
|
-
* @param event SessionStartEvent
|
|
25
|
-
*/
|
|
26
|
-
async start(event: SessionStartEvent): Promise<void> {
|
|
27
|
-
const filename = this.makeFilename('start');
|
|
28
|
-
const payload = JSON.stringify({ ...event, timestamp: new Date() }) + '\n';
|
|
29
|
-
await Bun.file(filename).write(payload);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* called when the session completes
|
|
34
|
-
*
|
|
35
|
-
* @param event SessionCompleteEvent
|
|
36
|
-
*/
|
|
37
|
-
async complete(event: SessionCompleteEvent): Promise<void> {
|
|
38
|
-
const filename = this.makeFilename('complete');
|
|
39
|
-
const payload = JSON.stringify({ ...event, timestamp: new Date() }) + '\n';
|
|
40
|
-
await Bun.file(filename).write(payload);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
type SessionEventProvider,
|
|
3
|
-
type SessionStartEvent,
|
|
4
|
-
type SessionCompleteEvent,
|
|
5
|
-
} from '@agentuity/core';
|
|
6
|
-
import { internal } from '../../logger/internal';
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* An implementation of the SessionEventProvider which is no-op
|
|
10
|
-
*/
|
|
11
|
-
export class LocalSessionEventProvider implements SessionEventProvider {
|
|
12
|
-
/**
|
|
13
|
-
* called when the session starts
|
|
14
|
-
*
|
|
15
|
-
* @param event SessionStartEvent
|
|
16
|
-
*/
|
|
17
|
-
async start(event: SessionStartEvent): Promise<void> {
|
|
18
|
-
internal.info('[session-local] start event (no-op): %s', event.id);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* called when the session completes
|
|
23
|
-
*
|
|
24
|
-
* @param event SessionCompleteEvent
|
|
25
|
-
*/
|
|
26
|
-
async complete(event: SessionCompleteEvent): Promise<void> {
|
|
27
|
-
internal.info(
|
|
28
|
-
'[session-local] complete event (no-op): %s, userData: %s',
|
|
29
|
-
event.id,
|
|
30
|
-
event.userData ? `${event.userData.length} bytes` : 'none'
|
|
31
|
-
);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
@@ -1,199 +0,0 @@
|
|
|
1
|
-
import type { Context } from 'hono';
|
|
2
|
-
import type { Database } from 'bun:sqlite';
|
|
3
|
-
import type { AppState } from '../../index';
|
|
4
|
-
import type { Env } from '../../app';
|
|
5
|
-
import {
|
|
6
|
-
DefaultThread,
|
|
7
|
-
DefaultThreadIDProvider,
|
|
8
|
-
parseThreadData,
|
|
9
|
-
validateThreadIdOrThrow,
|
|
10
|
-
type Thread,
|
|
11
|
-
type ThreadIDProvider,
|
|
12
|
-
type ThreadProvider,
|
|
13
|
-
} from '../../session';
|
|
14
|
-
import { getLocalDB } from '../local/_db';
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Local thread provider with SQLite persistence.
|
|
18
|
-
* Stores thread state in local DB for development and testing.
|
|
19
|
-
* Suitable for local development and testing with persistence across requests.
|
|
20
|
-
*/
|
|
21
|
-
export class LocalThreadProvider implements ThreadProvider {
|
|
22
|
-
private appState: AppState | null = null;
|
|
23
|
-
private threadIDProvider: ThreadIDProvider = new DefaultThreadIDProvider();
|
|
24
|
-
private db: Database | null = null;
|
|
25
|
-
|
|
26
|
-
async initialize(appState: AppState): Promise<void> {
|
|
27
|
-
this.appState = appState;
|
|
28
|
-
this.db = getLocalDB();
|
|
29
|
-
|
|
30
|
-
// Create threads table if it doesn't exist
|
|
31
|
-
this.db.run(`
|
|
32
|
-
CREATE TABLE IF NOT EXISTS threads (
|
|
33
|
-
id TEXT PRIMARY KEY,
|
|
34
|
-
state TEXT NOT NULL,
|
|
35
|
-
updated_at INTEGER NOT NULL
|
|
36
|
-
)
|
|
37
|
-
`);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
setThreadIDProvider(provider: ThreadIDProvider): void {
|
|
41
|
-
this.threadIDProvider = provider;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
async restore(ctx: Context<Env>): Promise<Thread> {
|
|
45
|
-
if (this.appState === null || this.db === null) {
|
|
46
|
-
throw new Error(
|
|
47
|
-
'LocalThreadProvider.restore called before initialize(): appState/db not set; call initialize(appState) first'
|
|
48
|
-
);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
const threadId = await this.threadIDProvider.getThreadId(this.appState, ctx);
|
|
52
|
-
validateThreadIdOrThrow(threadId);
|
|
53
|
-
|
|
54
|
-
// Create a restore function for lazy loading
|
|
55
|
-
const restoreFn = async (): Promise<{
|
|
56
|
-
state: Map<string, unknown>;
|
|
57
|
-
metadata: Record<string, unknown>;
|
|
58
|
-
}> => {
|
|
59
|
-
if (!this.db) {
|
|
60
|
-
return { state: new Map(), metadata: {} };
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
const row = this.db
|
|
64
|
-
.query<{ state: string }, [string]>('SELECT state FROM threads WHERE id = ?')
|
|
65
|
-
.get(threadId);
|
|
66
|
-
|
|
67
|
-
const { flatStateJson, metadata } = parseThreadData(row?.state);
|
|
68
|
-
|
|
69
|
-
const state = new Map<string, unknown>();
|
|
70
|
-
if (flatStateJson) {
|
|
71
|
-
try {
|
|
72
|
-
const data = JSON.parse(flatStateJson);
|
|
73
|
-
for (const [key, value] of Object.entries(data)) {
|
|
74
|
-
state.set(key, value);
|
|
75
|
-
}
|
|
76
|
-
} catch {
|
|
77
|
-
// Continue with empty state if parsing fails
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
return { state, metadata: metadata || {} };
|
|
82
|
-
};
|
|
83
|
-
|
|
84
|
-
return new DefaultThread(this, threadId, restoreFn);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
async save(thread: Thread): Promise<void> {
|
|
88
|
-
if (!this.db || !(thread instanceof DefaultThread)) {
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
const saveMode = thread.getSaveMode();
|
|
93
|
-
if (saveMode === 'none') {
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
const now = Date.now();
|
|
98
|
-
|
|
99
|
-
if (saveMode === 'merge') {
|
|
100
|
-
// For merge, we need to load existing state, apply operations, then save
|
|
101
|
-
const operations = thread.getPendingOperations();
|
|
102
|
-
const metadata = thread.getMetadataForSave();
|
|
103
|
-
|
|
104
|
-
// Load existing state
|
|
105
|
-
const row = this.db
|
|
106
|
-
.query<{ state: string }, [string]>('SELECT state FROM threads WHERE id = ?')
|
|
107
|
-
.get(thread.id);
|
|
108
|
-
|
|
109
|
-
const { flatStateJson, metadata: existingMetadata } = parseThreadData(row?.state);
|
|
110
|
-
|
|
111
|
-
const state: Record<string, unknown> = {};
|
|
112
|
-
if (flatStateJson) {
|
|
113
|
-
try {
|
|
114
|
-
Object.assign(state, JSON.parse(flatStateJson));
|
|
115
|
-
} catch {
|
|
116
|
-
// Continue with empty state if parsing fails
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
// Apply operations
|
|
121
|
-
for (const op of operations) {
|
|
122
|
-
switch (op.op) {
|
|
123
|
-
case 'clear':
|
|
124
|
-
for (const key of Object.keys(state)) {
|
|
125
|
-
delete state[key];
|
|
126
|
-
}
|
|
127
|
-
break;
|
|
128
|
-
case 'set':
|
|
129
|
-
if (op.key !== undefined) {
|
|
130
|
-
state[op.key] = op.value;
|
|
131
|
-
}
|
|
132
|
-
break;
|
|
133
|
-
case 'delete':
|
|
134
|
-
if (op.key !== undefined) {
|
|
135
|
-
delete state[op.key];
|
|
136
|
-
}
|
|
137
|
-
break;
|
|
138
|
-
case 'push':
|
|
139
|
-
if (op.key !== undefined) {
|
|
140
|
-
const existing = state[op.key];
|
|
141
|
-
let arr: unknown[];
|
|
142
|
-
if (Array.isArray(existing)) {
|
|
143
|
-
existing.push(op.value);
|
|
144
|
-
arr = existing;
|
|
145
|
-
} else if (existing === undefined) {
|
|
146
|
-
arr = [op.value];
|
|
147
|
-
state[op.key] = arr;
|
|
148
|
-
} else {
|
|
149
|
-
// If non-array, silently skip
|
|
150
|
-
continue;
|
|
151
|
-
}
|
|
152
|
-
// Apply maxRecords limit
|
|
153
|
-
if (op.maxRecords !== undefined && arr.length > op.maxRecords) {
|
|
154
|
-
state[op.key] = arr.slice(arr.length - op.maxRecords);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
break;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
// Build final data
|
|
162
|
-
const finalMetadata = metadata || existingMetadata || {};
|
|
163
|
-
const hasState = Object.keys(state).length > 0;
|
|
164
|
-
const hasMetadata = Object.keys(finalMetadata).length > 0;
|
|
165
|
-
|
|
166
|
-
let stateJson = '';
|
|
167
|
-
if (hasState || hasMetadata) {
|
|
168
|
-
const data: { state?: Record<string, unknown>; metadata?: Record<string, unknown> } =
|
|
169
|
-
{};
|
|
170
|
-
if (hasState) data.state = state;
|
|
171
|
-
if (hasMetadata) data.metadata = finalMetadata;
|
|
172
|
-
stateJson = JSON.stringify(data);
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
this.db.run(
|
|
176
|
-
`INSERT INTO threads (id, state, updated_at) VALUES (?, ?, ?)
|
|
177
|
-
ON CONFLICT(id) DO UPDATE SET state = ?, updated_at = ?`,
|
|
178
|
-
[thread.id, stateJson, now, stateJson, now]
|
|
179
|
-
);
|
|
180
|
-
} else {
|
|
181
|
-
// Full save
|
|
182
|
-
const stateJson = await thread.getSerializedState();
|
|
183
|
-
this.db.run(
|
|
184
|
-
`INSERT INTO threads (id, state, updated_at) VALUES (?, ?, ?)
|
|
185
|
-
ON CONFLICT(id) DO UPDATE SET state = ?, updated_at = ?`,
|
|
186
|
-
[thread.id, stateJson, now, stateJson, now]
|
|
187
|
-
);
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
async destroy(thread: Thread): Promise<void> {
|
|
192
|
-
if (!this.db) {
|
|
193
|
-
return;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
// Delete thread from DB
|
|
197
|
-
this.db.run('DELETE FROM threads WHERE id = ?', [thread.id]);
|
|
198
|
-
}
|
|
199
|
-
}
|