@agentmark-ai/cli 0.9.0 → 0.10.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/README.md +143 -1
- package/dist/.next/BUILD_ID +1 -1
- package/dist/.next/app-build-manifest.json +65 -15
- package/dist/.next/app-path-routes-manifest.json +3 -0
- package/dist/.next/build-manifest.json +2 -2
- package/dist/.next/cache/.previewinfo +1 -1
- package/dist/.next/cache/.rscinfo +1 -1
- package/dist/.next/cache/.tsbuildinfo +1 -1
- package/dist/.next/cache/config.json +3 -3
- package/dist/.next/cache/webpack/client-production/0.pack +0 -0
- package/dist/.next/cache/webpack/client-production/index.pack +0 -0
- package/dist/.next/cache/webpack/edge-server-production/index.pack +0 -0
- package/dist/.next/cache/webpack/server-production/0.pack +0 -0
- package/dist/.next/cache/webpack/server-production/index.pack +0 -0
- package/dist/.next/prerender-manifest.json +61 -13
- package/dist/.next/routes-manifest.json +22 -1
- package/dist/.next/server/app/_not-found/page.js +1 -1
- package/dist/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/_not-found.html +1 -1
- package/dist/.next/server/app/_not-found.rsc +7 -6
- package/dist/.next/server/app/experiments/[id]/page.js +2 -0
- package/dist/.next/server/app/experiments/[id]/page.js.nft.json +1 -0
- package/dist/.next/server/app/experiments/[id]/page_client-reference-manifest.js +1 -0
- package/dist/.next/server/app/experiments/compare/page.js +2 -0
- package/dist/.next/server/app/experiments/compare/page.js.nft.json +1 -0
- package/dist/.next/server/app/experiments/compare/page_client-reference-manifest.js +1 -0
- package/dist/.next/server/app/experiments/compare.html +1 -0
- package/dist/.next/server/app/experiments/compare.meta +7 -0
- package/dist/.next/server/app/experiments/compare.rsc +24 -0
- package/dist/.next/server/app/experiments/page.js +2 -0
- package/dist/.next/server/app/experiments/page.js.nft.json +1 -0
- package/dist/.next/server/app/experiments/page_client-reference-manifest.js +1 -0
- package/dist/.next/server/app/experiments.html +1 -0
- package/dist/.next/server/app/experiments.meta +7 -0
- package/dist/.next/server/app/experiments.rsc +24 -0
- package/dist/.next/server/app/index.html +1 -1
- package/dist/.next/server/app/index.rsc +9 -9
- package/dist/.next/server/app/page.js +1 -1
- package/dist/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/requests/page.js +1 -1
- package/dist/.next/server/app/requests/page.js.nft.json +1 -1
- package/dist/.next/server/app/requests/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/requests.html +1 -1
- package/dist/.next/server/app/requests.rsc +8 -8
- package/dist/.next/server/app/sessions/page.js +1 -1
- package/dist/.next/server/app/sessions/page.js.nft.json +1 -1
- package/dist/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/sessions.html +1 -1
- package/dist/.next/server/app/sessions.rsc +8 -8
- package/dist/.next/server/app/traces/page.js +1 -1
- package/dist/.next/server/app/traces/page.js.nft.json +1 -1
- package/dist/.next/server/app/traces/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/traces.html +1 -1
- package/dist/.next/server/app/traces.rsc +8 -8
- package/dist/.next/server/app-paths-manifest.json +3 -0
- package/dist/.next/server/chunks/101.js +1 -0
- package/dist/.next/server/chunks/203.js +5 -5
- package/dist/.next/server/chunks/225.js +173 -0
- package/dist/.next/server/chunks/335.js +1 -0
- package/dist/.next/server/chunks/478.js +3 -3
- package/dist/.next/server/chunks/547.js +1 -1
- package/dist/.next/server/chunks/672.js +1 -0
- package/dist/.next/server/chunks/934.js +1 -0
- package/dist/.next/server/chunks/936.js +29 -0
- package/dist/.next/server/pages/404.html +1 -1
- package/dist/.next/server/pages/500.html +1 -1
- package/dist/.next/server/server-reference-manifest.json +1 -1
- package/dist/.next/static/2NZm040KzCzDPOX6MqoKG/_buildManifest.js +1 -0
- package/dist/.next/static/chunks/181-396b329bd35e4de0.js +1 -0
- package/dist/.next/static/chunks/349-9266e48c00c8ac76.js +37 -0
- package/dist/.next/static/chunks/352-d7aa9d2da963e9e5.js +1 -0
- package/dist/.next/static/chunks/41-f512c46d7ea943f6.js +1 -0
- package/dist/.next/static/chunks/444-d88bd1e37e750aee.js +1 -0
- package/dist/.next/static/chunks/49-6efbcf2b4f20d950.js +1 -0
- package/dist/.next/static/chunks/729-21a669506b8ae33c.js +1 -0
- package/dist/.next/static/chunks/757-19ef6a21d87937d9.js +1 -0
- package/dist/.next/static/chunks/{902-8d8c521535a2c32f.js → 860-75914efffd5add16.js} +1 -1
- package/dist/.next/static/chunks/866-87ad78bf0bef953a.js +28 -0
- package/dist/.next/static/chunks/app/experiments/[id]/page-1522aa0a86d6d004.js +1 -0
- package/dist/.next/static/chunks/app/experiments/compare/page-b99f5e9ebb5488b4.js +1 -0
- package/dist/.next/static/chunks/app/experiments/page-e17f8133f9467da7.js +1 -0
- package/dist/.next/static/chunks/app/layout-3af953219517dd3e.js +1 -0
- package/dist/.next/static/chunks/app/requests/{page-91666bcc2877f9ee.js → page-aa9725ed8b67059b.js} +1 -1
- package/dist/.next/static/chunks/app/sessions/{page-679425471f82f56d.js → page-bf2019c391763736.js} +1 -1
- package/dist/.next/static/chunks/app/traces/page-c43b6aa5cd13fdf1.js +1 -0
- package/dist/.next/trace +56 -54
- package/dist/.next/types/app/experiments/[id]/page.ts +84 -0
- package/dist/.next/types/app/experiments/compare/page.ts +84 -0
- package/dist/.next/types/app/experiments/page.ts +84 -0
- package/dist/.next/types/routes.d.ts +4 -1
- package/dist/.next/types/validator.ts +27 -0
- package/dist/api-server.js +28 -1
- package/dist/api-server.js.map +1 -1
- package/dist/commands/deploy.d.ts +27 -0
- package/dist/commands/deploy.js +223 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/dev.d.ts +0 -1
- package/dist/commands/dev.js +79 -66
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/run-experiment.js +7 -28
- package/dist/commands/run-experiment.js.map +1 -1
- package/dist/commands/run-prompt.js +6 -27
- package/dist/commands/run-prompt.js.map +1 -1
- package/dist/config.d.ts +2 -12
- package/dist/config.js +5 -45
- package/dist/config.js.map +1 -1
- package/dist/connect/job-handler.d.ts +23 -0
- package/dist/connect/job-handler.js +187 -0
- package/dist/connect/job-handler.js.map +1 -0
- package/dist/forwarding/config.js +1 -1
- package/dist/forwarding/config.js.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/runner-server.d.ts +0 -6
- package/dist/runner-server.js +3 -39
- package/dist/runner-server.js.map +1 -1
- package/dist/server/routes/experiments/index.d.ts +31 -0
- package/dist/server/routes/experiments/index.js +192 -0
- package/dist/server/routes/experiments/index.js.map +1 -0
- package/package.json +4 -3
- package/dist/.next/server/chunks/525.js +0 -201
- package/dist/.next/static/_uH98Yva4C-QS08PL-_0P/_buildManifest.js +0 -1
- package/dist/.next/static/chunks/397-361c64519c49911b.js +0 -37
- package/dist/.next/static/chunks/41-f3c56d50aeb34db9.js +0 -1
- package/dist/.next/static/chunks/602-1f23cff16de7187a.js +0 -28
- package/dist/.next/static/chunks/app/layout-eaddb6da201ab019.js +0 -1
- package/dist/.next/static/chunks/app/traces/page-15500a82980abfc8.js +0 -1
- package/dist/cloudflared/download.d.ts +0 -12
- package/dist/cloudflared/download.js +0 -130
- package/dist/cloudflared/download.js.map +0 -1
- package/dist/cloudflared/index.d.ts +0 -9
- package/dist/cloudflared/index.js +0 -20
- package/dist/cloudflared/index.js.map +0 -1
- package/dist/cloudflared/platform.d.ts +0 -20
- package/dist/cloudflared/platform.js +0 -79
- package/dist/cloudflared/platform.js.map +0 -1
- package/dist/cloudflared/tunnel.d.ts +0 -16
- package/dist/cloudflared/tunnel.js +0 -129
- package/dist/cloudflared/tunnel.js.map +0 -1
- package/dist/cloudflared/types.d.ts +0 -53
- package/dist/cloudflared/types.js +0 -8
- package/dist/cloudflared/types.js.map +0 -1
- package/dist/runner-server/middleware/signature-verification.d.ts +0 -37
- package/dist/runner-server/middleware/signature-verification.js +0 -55
- package/dist/runner-server/middleware/signature-verification.js.map +0 -1
- package/dist/tunnel.d.ts +0 -6
- package/dist/tunnel.js +0 -11
- package/dist/tunnel.js.map +0 -1
- /package/dist/.next/static/{_uH98Yva4C-QS08PL-_0P → 2NZm040KzCzDPOX6MqoKG}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Job handler for the AgentMark Connect protocol.
|
|
4
|
+
*
|
|
5
|
+
* Receives job messages from the platform via the WebSocketClient,
|
|
6
|
+
* proxies execution to the local webhook server (which runs in a
|
|
7
|
+
* separate child process), and streams results back through the
|
|
8
|
+
* WebSocket connection.
|
|
9
|
+
*/
|
|
10
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
11
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
12
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
13
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
14
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
15
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
16
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.JobHandler = void 0;
|
|
21
|
+
class JobHandler {
|
|
22
|
+
constructor(wsClient, webhookUrl) {
|
|
23
|
+
this.activeJobs = new Map();
|
|
24
|
+
this.wsClient = wsClient;
|
|
25
|
+
this.webhookUrl = webhookUrl;
|
|
26
|
+
}
|
|
27
|
+
/** Returns the IDs of all currently active (in-progress) jobs. */
|
|
28
|
+
getActiveJobIds() {
|
|
29
|
+
return Array.from(this.activeJobs.keys());
|
|
30
|
+
}
|
|
31
|
+
/** Dispatches an incoming platform message to the appropriate handler. */
|
|
32
|
+
handleMessage(message) {
|
|
33
|
+
if (message.type === 'job-cancel') {
|
|
34
|
+
this.handleCancel(message);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
// Fire-and-forget; errors are sent back over the socket
|
|
38
|
+
this.handleJob(message).catch((err) => {
|
|
39
|
+
console.error('[connect] Unexpected error in job handler:', err instanceof Error ? err.message : String(err));
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
// ── Job execution ─────────────────────────────────────────────────────────
|
|
43
|
+
handleJob(message) {
|
|
44
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
45
|
+
const { jobId, request } = message;
|
|
46
|
+
const abortController = new AbortController();
|
|
47
|
+
this.activeJobs.set(jobId, { abortController });
|
|
48
|
+
try {
|
|
49
|
+
console.log(` [connect] Received ${request.type} job (${jobId.slice(0, 8)}...)`);
|
|
50
|
+
// Forward as an HTTP POST to the local webhook server, matching the
|
|
51
|
+
// same WebhookRequest shape that handleWebhookRequest expects.
|
|
52
|
+
const response = yield fetch(this.webhookUrl, {
|
|
53
|
+
method: 'POST',
|
|
54
|
+
headers: { 'Content-Type': 'application/json' },
|
|
55
|
+
body: JSON.stringify({
|
|
56
|
+
type: request.type,
|
|
57
|
+
data: request.data,
|
|
58
|
+
}),
|
|
59
|
+
signal: abortController.signal,
|
|
60
|
+
});
|
|
61
|
+
if (abortController.signal.aborted)
|
|
62
|
+
return;
|
|
63
|
+
// Check if response is streaming
|
|
64
|
+
const isStreaming = response.headers.get('AgentMark-Streaming') === 'true';
|
|
65
|
+
if (!response.ok && !isStreaming) {
|
|
66
|
+
const errorBody = yield response.text();
|
|
67
|
+
let errorMessage;
|
|
68
|
+
try {
|
|
69
|
+
const parsed = JSON.parse(errorBody);
|
|
70
|
+
errorMessage = parsed.message || parsed.error || errorBody;
|
|
71
|
+
}
|
|
72
|
+
catch (_a) {
|
|
73
|
+
errorMessage = errorBody || `HTTP ${response.status}`;
|
|
74
|
+
}
|
|
75
|
+
this.wsClient.send({
|
|
76
|
+
type: 'job-error',
|
|
77
|
+
jobId,
|
|
78
|
+
error: errorMessage,
|
|
79
|
+
details: `Webhook server returned ${response.status}`,
|
|
80
|
+
});
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
if (isStreaming && response.body) {
|
|
84
|
+
yield this.streamResponse(jobId, response.body, abortController.signal);
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
// Non-streaming JSON response
|
|
88
|
+
const data = yield response.json();
|
|
89
|
+
this.wsClient.send({
|
|
90
|
+
type: 'job-result',
|
|
91
|
+
jobId,
|
|
92
|
+
result: {
|
|
93
|
+
type: data.type || 'text',
|
|
94
|
+
result: data.result,
|
|
95
|
+
traceId: data.traceId || '',
|
|
96
|
+
usage: data.usage,
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
console.log(` [connect] Job complete (${jobId.slice(0, 8)}...)`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
catch (err) {
|
|
103
|
+
if (abortController.signal.aborted) {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
107
|
+
const stack = err instanceof Error ? err.stack : undefined;
|
|
108
|
+
this.wsClient.send({
|
|
109
|
+
type: 'job-error',
|
|
110
|
+
jobId,
|
|
111
|
+
error: message,
|
|
112
|
+
details: stack,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
finally {
|
|
116
|
+
this.activeJobs.delete(jobId);
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
// ── Stream reading ────────────────────────────────────────────────────────
|
|
121
|
+
streamResponse(jobId, body, signal) {
|
|
122
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
123
|
+
const reader = body.getReader();
|
|
124
|
+
const decoder = new TextDecoder();
|
|
125
|
+
let lastTraceId = '';
|
|
126
|
+
try {
|
|
127
|
+
while (true) {
|
|
128
|
+
if (signal.aborted) {
|
|
129
|
+
reader.cancel();
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
const { done, value } = yield reader.read();
|
|
133
|
+
if (done)
|
|
134
|
+
break;
|
|
135
|
+
const text = decoder.decode(value, { stream: true });
|
|
136
|
+
// Filter out "done" events (extract traceId) and forward remaining lines
|
|
137
|
+
const lines = text.split('\n');
|
|
138
|
+
const forwardLines = [];
|
|
139
|
+
for (const line of lines) {
|
|
140
|
+
if (!line.trim()) {
|
|
141
|
+
forwardLines.push(line);
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
try {
|
|
145
|
+
const parsed = JSON.parse(line);
|
|
146
|
+
if (parsed.type === 'done' && parsed.traceId) {
|
|
147
|
+
lastTraceId = parsed.traceId;
|
|
148
|
+
continue; // Strip the "done" event from forwarded data
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
catch (_a) {
|
|
152
|
+
// Not valid JSON — forward as-is
|
|
153
|
+
}
|
|
154
|
+
forwardLines.push(line);
|
|
155
|
+
}
|
|
156
|
+
const filtered = forwardLines.join('\n');
|
|
157
|
+
if (filtered.trim()) {
|
|
158
|
+
this.wsClient.send({
|
|
159
|
+
type: 'job-stream-chunk',
|
|
160
|
+
jobId,
|
|
161
|
+
chunk: filtered,
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
this.wsClient.send({
|
|
166
|
+
type: 'job-stream-end',
|
|
167
|
+
jobId,
|
|
168
|
+
traceId: lastTraceId,
|
|
169
|
+
});
|
|
170
|
+
console.log(` [connect] Stream complete (${jobId.slice(0, 8)}...)`);
|
|
171
|
+
}
|
|
172
|
+
finally {
|
|
173
|
+
reader.releaseLock();
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
// ── Cancellation ──────────────────────────────────────────────────────────
|
|
178
|
+
handleCancel(message) {
|
|
179
|
+
const active = this.activeJobs.get(message.jobId);
|
|
180
|
+
if (active) {
|
|
181
|
+
console.log(` [connect] Cancelling job ${message.jobId.slice(0, 8)}... (${message.reason})`);
|
|
182
|
+
active.abortController.abort();
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
exports.JobHandler = JobHandler;
|
|
187
|
+
//# sourceMappingURL=job-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job-handler.js","sourceRoot":"","sources":["../../cli-src/connect/job-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,7 +22,7 @@ const config_1 = require("../config");
|
|
|
22
22
|
*/
|
|
23
23
|
function getConfigPath() {
|
|
24
24
|
if (process.env.NODE_ENV === 'test' || process.env.VITEST) {
|
|
25
|
-
return path_1.default.join(os_1.default.tmpdir(),
|
|
25
|
+
return path_1.default.join(os_1.default.tmpdir(), `.agentmark-dev-config-${process.pid}.json`);
|
|
26
26
|
}
|
|
27
27
|
const cwd = process.cwd();
|
|
28
28
|
return path_1.default.join(cwd, '.agentmark', 'dev-config.json');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../cli-src/forwarding/config.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;AA4CH,oDAGC;AAMD,oDAIC;AAMD,sDAIC;AAOD,oCAKC;AA7ED,4CAAoB;AACpB,gDAAwB;AACxB,4CAAoB;AACpB,sCAAyD;AAIzD;;;;GAIG;AACH,SAAS,aAAa;IACpB,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QAC1D,OAAO,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,MAAM,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../cli-src/forwarding/config.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;AA4CH,oDAGC;AAMD,oDAIC;AAMD,sDAIC;AAOD,oCAKC;AA7ED,4CAAoB;AACpB,gDAAwB;AACxB,4CAAoB;AACpB,sCAAyD;AAIzD;;;;GAIG;AACH,SAAS,aAAa;IACpB,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QAC1D,OAAO,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,MAAM,EAAE,EAAE,yBAAyB,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,OAAO,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,EAAE,iBAAiB,CAAC,CAAC;AACzD,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,MAAmB;IACtC,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IAEnC,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,cAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,YAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC;QACD,YAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACzE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,oBAAoB;;IAClC,MAAM,MAAM,GAAG,IAAA,wBAAe,GAAE,CAAC;IACjC,OAAO,MAAA,MAAM,CAAC,UAAU,mCAAI,IAAI,CAAC;AACnC,CAAC;AAED;;;GAGG;AACH,SAAgB,oBAAoB,CAAC,UAA4B;IAC/D,MAAM,MAAM,GAAG,IAAA,wBAAe,GAAE,CAAC;IACjC,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,WAAW,CAAC,MAAM,CAAC,CAAC;AACtB,CAAC;AAED;;;GAGG;AACH,SAAgB,qBAAqB;IACnC,MAAM,MAAM,GAAG,IAAA,wBAAe,GAAE,CAAC;IACjC,OAAO,MAAM,CAAC,UAAU,CAAC;IACzB,WAAW,CAAC,MAAM,CAAC,CAAC;AACtB,CAAC;AAED;;;;GAIG;AACH,SAAgB,YAAY,CAAC,MAAwB;IACnD,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC3D,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -29,6 +29,7 @@ const build_1 = __importDefault(require("./commands/build"));
|
|
|
29
29
|
const login_1 = __importDefault(require("./commands/login"));
|
|
30
30
|
const logout_1 = __importDefault(require("./commands/logout"));
|
|
31
31
|
const link_1 = __importDefault(require("./commands/link"));
|
|
32
|
+
const deploy_1 = __importDefault(require("./commands/deploy"));
|
|
32
33
|
const update_notifier_1 = require("./update-notifier");
|
|
33
34
|
// Start async update check early (non-blocking)
|
|
34
35
|
const updateCheckPromise = (0, update_notifier_1.startUpdateCheck)();
|
|
@@ -43,8 +44,7 @@ commander_1.program
|
|
|
43
44
|
.option("--api-port <number>", "API server port (default: 9418)")
|
|
44
45
|
.option("--webhook-port <number>", "Webhook server port (default: 9417)")
|
|
45
46
|
.option("--app-port <number>", "AgentMark UI app port (default: 3000)")
|
|
46
|
-
.option("-r, --remote", "Connect to platform (
|
|
47
|
-
.option("-t, --tunnel", "Expose webhook server publicly via tunnel")
|
|
47
|
+
.option("-r, --remote", "Connect to platform (WebSocket + forwarding)")
|
|
48
48
|
.option("--no-forward", "Disable trace forwarding (only relevant with --remote)")
|
|
49
49
|
.description("Start development servers (API server + webhook + UI app)")
|
|
50
50
|
.action((options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
@@ -53,7 +53,6 @@ commander_1.program
|
|
|
53
53
|
webhookPort: options.webhookPort ? parseInt(options.webhookPort, 10) : undefined,
|
|
54
54
|
appPort: options.appPort ? parseInt(options.appPort, 10) : undefined,
|
|
55
55
|
remote: options.remote || false,
|
|
56
|
-
tunnel: options.tunnel || false,
|
|
57
56
|
forward: options.forward, // Commander.js --no-forward sets this to false; defaults to true
|
|
58
57
|
});
|
|
59
58
|
}));
|
|
@@ -183,6 +182,7 @@ commander_1.program
|
|
|
183
182
|
commander_1.program.error(error.message);
|
|
184
183
|
}
|
|
185
184
|
}));
|
|
185
|
+
commander_1.program.addCommand((0, deploy_1.default)());
|
|
186
186
|
// Parse and run command, then display update notification
|
|
187
187
|
// Using parseAsync ensures notification displays after command completes
|
|
188
188
|
commander_1.program.parseAsync(process.argv).then(() => __awaiter(void 0, void 0, void 0, function* () {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../cli-src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAEA,gDAAgD;AAChD,mCAAgC;AAChC,IAAA,eAAM,GAAE,CAAC;AAET,yCAAoC;AACpC,2BAAkC;AAClC,+BAA4B;AAC5B,yDAAiC;AACjC,+EAAsD;AACtD,iFAAwD;AACxD,yEAAgD;AAChD,uEAA8C;AAC9C,+EAAsD;AACtD,6DAAqC;AACrC,6DAAqC;AACrC,+DAAuC;AACvC,2DAAmC;AACnC,uDAAgF;AAEhF,gDAAgD;AAChD,MAAM,kBAAkB,GAAG,IAAA,kCAAgB,GAAE,CAAC;AAE9C,iCAAiC;AACjC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,IAAA,WAAI,EAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAE1F,mBAAO;KACJ,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,4BAA4B,CAAC;KAC3E,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,mDAAmD,CAAC,CAAC;AAEpE,mBAAO;KACJ,OAAO,CAAC,KAAK,CAAC;KACd,MAAM,CAAC,qBAAqB,EAAE,iCAAiC,CAAC;KAChE,MAAM,CAAC,yBAAyB,EAAE,qCAAqC,CAAC;KACxE,MAAM,CAAC,qBAAqB,EAAE,uCAAuC,CAAC;KACtE,MAAM,CAAC,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../cli-src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/runner-server.d.ts
CHANGED
|
@@ -6,18 +6,12 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { Server } from 'node:http';
|
|
8
8
|
import type { WebhookHandler } from './runner-server/types';
|
|
9
|
-
import { type SignatureVerificationOptions } from './runner-server/middleware/signature-verification';
|
|
10
9
|
export type { WebhookHandler } from './runner-server/types';
|
|
11
10
|
export interface WebhookServerOptions {
|
|
12
11
|
port?: number;
|
|
13
12
|
handler: WebhookHandler;
|
|
14
13
|
apiServerUrl?: string;
|
|
15
14
|
templatesDirectory?: string;
|
|
16
|
-
/**
|
|
17
|
-
* Webhook signature verification options.
|
|
18
|
-
* If not provided, will check AGENTMARK_WEBHOOK_SECRET env var.
|
|
19
|
-
*/
|
|
20
|
-
signatureVerification?: SignatureVerificationOptions;
|
|
21
15
|
}
|
|
22
16
|
/**
|
|
23
17
|
* Creates an HTTP server that wraps a webhook handler instance.
|
package/dist/runner-server.js
CHANGED
|
@@ -24,8 +24,6 @@ const express_1 = __importDefault(require("express"));
|
|
|
24
24
|
const express_rate_limit_1 = __importDefault(require("express-rate-limit"));
|
|
25
25
|
const node_http_1 = require("node:http");
|
|
26
26
|
const core_1 = require("./runner-server/core");
|
|
27
|
-
const signature_verification_1 = require("./runner-server/middleware/signature-verification");
|
|
28
|
-
const config_1 = require("./config");
|
|
29
27
|
// Set up rate limiter: 100 requests per 15 minutes per IP
|
|
30
28
|
const limiter = (0, express_rate_limit_1.default)({
|
|
31
29
|
windowMs: 15 * 60 * 1000, // 15 minutes
|
|
@@ -36,7 +34,7 @@ const limiter = (0, express_rate_limit_1.default)({
|
|
|
36
34
|
/**
|
|
37
35
|
* Creates an Express middleware handler for AgentMark webhook requests.
|
|
38
36
|
*/
|
|
39
|
-
function createMiddleware(handler
|
|
37
|
+
function createMiddleware(handler) {
|
|
40
38
|
return (req, res) => __awaiter(this, void 0, void 0, function* () {
|
|
41
39
|
try {
|
|
42
40
|
// Log incoming request
|
|
@@ -44,29 +42,6 @@ function createMiddleware(handler, signatureOptions) {
|
|
|
44
42
|
const clientIp = req.ip || req.socket.remoteAddress || 'unknown';
|
|
45
43
|
console.log(`\n[${timestamp}] ${req.method} ${req.path} - ${clientIp}`);
|
|
46
44
|
const body = req.body || {};
|
|
47
|
-
// Verify signature if configured
|
|
48
|
-
if (signatureOptions && !(0, signature_verification_1.shouldSkipVerification)(signatureOptions)) {
|
|
49
|
-
const headerName = signatureOptions.headerName || 'x-agentmark-signature-256';
|
|
50
|
-
const signature = req.headers[headerName.toLowerCase()];
|
|
51
|
-
if (!signature) {
|
|
52
|
-
console.error(' ❌ 401 Missing signature header');
|
|
53
|
-
console.error(` Expected header: ${headerName}`);
|
|
54
|
-
console.error(' Ensure the client is sending a signed request with AGENTMARK_WEBHOOK_SECRET.');
|
|
55
|
-
return res.status(401).json({
|
|
56
|
-
message: `Missing signature header: Expected ${headerName} header for webhook verification`
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
const bodyString = typeof body === 'string' ? body : JSON.stringify(body);
|
|
60
|
-
const isValid = yield (0, signature_verification_1.verifyWebhookSignature)(bodyString, signature, signatureOptions.secret);
|
|
61
|
-
if (!isValid) {
|
|
62
|
-
console.error(' ❌ 401 Invalid webhook signature');
|
|
63
|
-
console.error(' The signature in the request header does not match.');
|
|
64
|
-
return res.status(401).json({
|
|
65
|
-
message: 'Invalid webhook signature - signature verification failed'
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
console.log(' ✓ Signature verified');
|
|
69
|
-
}
|
|
70
45
|
// Call platform-agnostic core handler
|
|
71
46
|
const result = yield (0, core_1.handleWebhookRequest)(body, handler);
|
|
72
47
|
// Handle error responses
|
|
@@ -145,19 +120,8 @@ function createMiddleware(handler, signatureOptions) {
|
|
|
145
120
|
*/
|
|
146
121
|
function createWebhookServer(options) {
|
|
147
122
|
return __awaiter(this, void 0, void 0, function* () {
|
|
148
|
-
const { port = 9417, handler
|
|
149
|
-
// Setup signature verification options
|
|
150
|
-
let sigOptions = signatureVerification;
|
|
151
|
-
if (!sigOptions) {
|
|
152
|
-
// Check for env var
|
|
153
|
-
const secret = (0, config_1.getWebhookSecret)();
|
|
154
|
-
if (secret) {
|
|
155
|
-
sigOptions = { secret };
|
|
156
|
-
}
|
|
157
|
-
}
|
|
123
|
+
const { port = 9417, handler } = options;
|
|
158
124
|
const app = (0, express_1.default)();
|
|
159
|
-
// Trust first proxy hop (for tunnels like ngrok, cloudflare, etc.)
|
|
160
|
-
// Using 1 instead of true limits trust to single proxy, more secure for dev
|
|
161
125
|
app.set('trust proxy', 1);
|
|
162
126
|
// Parse JSON bodies (up to 10mb)
|
|
163
127
|
app.use(express_1.default.json({ limit: '10mb' }));
|
|
@@ -363,7 +327,7 @@ ${promptsList}
|
|
|
363
327
|
`.trim());
|
|
364
328
|
}));
|
|
365
329
|
// Mount the webhook handler middleware at POST /
|
|
366
|
-
app.post('/', limiter, createMiddleware(handler
|
|
330
|
+
app.post('/', limiter, createMiddleware(handler));
|
|
367
331
|
// Create HTTP server and start listening
|
|
368
332
|
const server = (0, node_http_1.createServer)(app);
|
|
369
333
|
yield new Promise(resolve => server.listen(port, resolve));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner-server.js","sourceRoot":"","sources":["../cli-src/runner-server.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"runner-server.js","sourceRoot":"","sources":["../cli-src/runner-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export interface ExperimentSummary {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
promptName: string;
|
|
5
|
+
datasetPath: string;
|
|
6
|
+
itemCount: number;
|
|
7
|
+
avgLatencyMs: number;
|
|
8
|
+
totalCost: number;
|
|
9
|
+
avgScore: number | null;
|
|
10
|
+
createdAt: string;
|
|
11
|
+
}
|
|
12
|
+
export interface ExperimentItem {
|
|
13
|
+
traceId: string;
|
|
14
|
+
itemName: string;
|
|
15
|
+
input: string;
|
|
16
|
+
expectedOutput: string;
|
|
17
|
+
actualOutput: string;
|
|
18
|
+
latencyMs: number;
|
|
19
|
+
cost: number;
|
|
20
|
+
scores: Array<{
|
|
21
|
+
name: string;
|
|
22
|
+
score: number;
|
|
23
|
+
label: string;
|
|
24
|
+
reason: string;
|
|
25
|
+
}>;
|
|
26
|
+
}
|
|
27
|
+
export declare const getExperiments: () => Promise<ExperimentSummary[]>;
|
|
28
|
+
export declare const getExperimentById: (experimentId: string) => Promise<{
|
|
29
|
+
summary: ExperimentSummary;
|
|
30
|
+
items: ExperimentItem[];
|
|
31
|
+
} | null>;
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.getExperimentById = exports.getExperiments = void 0;
|
|
16
|
+
const database_1 = __importDefault(require("../../database"));
|
|
17
|
+
const getExperiments = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
18
|
+
// Root spans have dataset metadata; child spans with Model set have cost/promptName.
|
|
19
|
+
// Use Model != '' instead of Type = 'GENERATION' since type classification may not
|
|
20
|
+
// match for all SDK versions (e.g. OpenTelemetry GenAI vs Vercel AI SDK conventions).
|
|
21
|
+
// Scores are stored with resource_id = TraceId (not SpanId).
|
|
22
|
+
const sql = `
|
|
23
|
+
SELECT
|
|
24
|
+
root.DatasetRunId AS id,
|
|
25
|
+
COALESCE(NULLIF(root.DatasetRunName, ''), root.DatasetRunId) AS name,
|
|
26
|
+
COALESCE(MAX(NULLIF(gen.PromptName, '')), MAX(NULLIF(root.PromptName, ''))) AS promptName,
|
|
27
|
+
MAX(NULLIF(root.DatasetPath, '')) AS datasetPath,
|
|
28
|
+
COUNT(DISTINCT root.TraceId) AS itemCount,
|
|
29
|
+
AVG(root.Duration) AS avgLatencyMs,
|
|
30
|
+
COALESCE(SUM(gen.item_cost), 0.0) AS totalCost,
|
|
31
|
+
MIN(root.CreatedAt) AS createdAt
|
|
32
|
+
FROM traces root
|
|
33
|
+
LEFT JOIN (
|
|
34
|
+
SELECT TraceId,
|
|
35
|
+
SUM(COALESCE(Cost, 0.0)) AS item_cost,
|
|
36
|
+
MAX(NULLIF(PromptName, '')) AS PromptName
|
|
37
|
+
FROM traces
|
|
38
|
+
WHERE Model IS NOT NULL AND Model != ''
|
|
39
|
+
GROUP BY TraceId
|
|
40
|
+
) gen ON gen.TraceId = root.TraceId
|
|
41
|
+
WHERE root.DatasetRunId IS NOT NULL
|
|
42
|
+
AND root.DatasetRunId != ''
|
|
43
|
+
AND root.ParentSpanId IS NULL
|
|
44
|
+
GROUP BY root.DatasetRunId
|
|
45
|
+
ORDER BY MIN(root.CreatedAt) DESC
|
|
46
|
+
`;
|
|
47
|
+
const rows = database_1.default.prepare(sql).all();
|
|
48
|
+
// Fetch average scores — scores.resource_id stores the OTEL TraceId
|
|
49
|
+
return rows.map((row) => {
|
|
50
|
+
var _a;
|
|
51
|
+
const scoresSql = `
|
|
52
|
+
SELECT AVG(s.score) AS avg_score
|
|
53
|
+
FROM scores s
|
|
54
|
+
WHERE s.resource_id IN (
|
|
55
|
+
SELECT DISTINCT TraceId FROM traces WHERE DatasetRunId = ?
|
|
56
|
+
)
|
|
57
|
+
`;
|
|
58
|
+
const scoreRow = database_1.default.prepare(scoresSql).get(row.id);
|
|
59
|
+
return {
|
|
60
|
+
id: row.id,
|
|
61
|
+
name: row.name,
|
|
62
|
+
promptName: row.promptName || "",
|
|
63
|
+
datasetPath: row.datasetPath || "",
|
|
64
|
+
itemCount: row.itemCount,
|
|
65
|
+
avgLatencyMs: Math.round(row.avgLatencyMs || 0),
|
|
66
|
+
totalCost: row.totalCost || 0,
|
|
67
|
+
avgScore: (_a = scoreRow === null || scoreRow === void 0 ? void 0 : scoreRow.avg_score) !== null && _a !== void 0 ? _a : null,
|
|
68
|
+
createdAt: row.createdAt,
|
|
69
|
+
};
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
exports.getExperiments = getExperiments;
|
|
73
|
+
const getExperimentById = (experimentId) => __awaiter(void 0, void 0, void 0, function* () {
|
|
74
|
+
var _a;
|
|
75
|
+
// Summary: root spans for dataset metadata, JOIN child model spans for cost/promptName
|
|
76
|
+
const summarySql = `
|
|
77
|
+
SELECT
|
|
78
|
+
root.DatasetRunId AS id,
|
|
79
|
+
COALESCE(NULLIF(root.DatasetRunName, ''), root.DatasetRunId) AS name,
|
|
80
|
+
COALESCE(MAX(NULLIF(gen.PromptName, '')), MAX(NULLIF(root.PromptName, ''))) AS promptName,
|
|
81
|
+
MAX(NULLIF(root.DatasetPath, '')) AS datasetPath,
|
|
82
|
+
COUNT(DISTINCT root.TraceId) AS itemCount,
|
|
83
|
+
AVG(root.Duration) AS avgLatencyMs,
|
|
84
|
+
COALESCE(SUM(gen.item_cost), 0.0) AS totalCost,
|
|
85
|
+
MIN(root.CreatedAt) AS createdAt
|
|
86
|
+
FROM traces root
|
|
87
|
+
LEFT JOIN (
|
|
88
|
+
SELECT TraceId,
|
|
89
|
+
SUM(COALESCE(Cost, 0.0)) AS item_cost,
|
|
90
|
+
MAX(NULLIF(PromptName, '')) AS PromptName
|
|
91
|
+
FROM traces
|
|
92
|
+
WHERE Model IS NOT NULL AND Model != ''
|
|
93
|
+
GROUP BY TraceId
|
|
94
|
+
) gen ON gen.TraceId = root.TraceId
|
|
95
|
+
WHERE root.DatasetRunId = ?
|
|
96
|
+
AND root.ParentSpanId IS NULL
|
|
97
|
+
GROUP BY root.DatasetRunId
|
|
98
|
+
`;
|
|
99
|
+
const summaryRow = database_1.default.prepare(summarySql).get(experimentId);
|
|
100
|
+
if (!summaryRow)
|
|
101
|
+
return null;
|
|
102
|
+
// Scores use resource_id = TraceId (OTEL trace ID)
|
|
103
|
+
const scoresSql = `
|
|
104
|
+
SELECT AVG(s.score) AS avg_score
|
|
105
|
+
FROM scores s
|
|
106
|
+
WHERE s.resource_id IN (
|
|
107
|
+
SELECT DISTINCT TraceId FROM traces WHERE DatasetRunId = ?
|
|
108
|
+
)
|
|
109
|
+
`;
|
|
110
|
+
const scoreRow = database_1.default.prepare(scoresSql).get(experimentId);
|
|
111
|
+
const summary = {
|
|
112
|
+
id: summaryRow.id,
|
|
113
|
+
name: summaryRow.name,
|
|
114
|
+
promptName: summaryRow.promptName || "",
|
|
115
|
+
datasetPath: summaryRow.datasetPath || "",
|
|
116
|
+
itemCount: summaryRow.itemCount,
|
|
117
|
+
avgLatencyMs: Math.round(summaryRow.avgLatencyMs || 0),
|
|
118
|
+
totalCost: summaryRow.totalCost || 0,
|
|
119
|
+
avgScore: (_a = scoreRow === null || scoreRow === void 0 ? void 0 : scoreRow.avg_score) !== null && _a !== void 0 ? _a : null,
|
|
120
|
+
createdAt: summaryRow.createdAt,
|
|
121
|
+
};
|
|
122
|
+
// Items: root span for dataset metadata, JOIN child model spans for input/output/cost.
|
|
123
|
+
// Input/Output may be in normalized columns (Vercel AI SDK) or in SpanAttributes JSON
|
|
124
|
+
// as gen_ai.prompt / gen_ai.completion (OpenTelemetry GenAI conventions).
|
|
125
|
+
const itemsSql = `
|
|
126
|
+
SELECT
|
|
127
|
+
root.TraceId AS traceId,
|
|
128
|
+
COALESCE(NULLIF(root.DatasetItemName, ''), root.SpanName, 'Item') AS itemName,
|
|
129
|
+
COALESCE(
|
|
130
|
+
NULLIF(gen.input, ''),
|
|
131
|
+
NULLIF(gen.genai_input, ''),
|
|
132
|
+
NULLIF(root.Input, ''),
|
|
133
|
+
''
|
|
134
|
+
) AS input,
|
|
135
|
+
COALESCE(root.DatasetExpectedOutput, '') AS expectedOutput,
|
|
136
|
+
COALESCE(
|
|
137
|
+
NULLIF(gen.output, ''),
|
|
138
|
+
NULLIF(gen.outputObject, ''),
|
|
139
|
+
NULLIF(gen.genai_output, ''),
|
|
140
|
+
NULLIF(root.Output, ''),
|
|
141
|
+
NULLIF(root.OutputObject, ''),
|
|
142
|
+
''
|
|
143
|
+
) AS actualOutput,
|
|
144
|
+
COALESCE(root.Duration, 0) AS latencyMs,
|
|
145
|
+
COALESCE(gen.item_cost, root.Cost, 0.0) AS cost
|
|
146
|
+
FROM traces root
|
|
147
|
+
LEFT JOIN (
|
|
148
|
+
SELECT TraceId,
|
|
149
|
+
MAX(Input) AS input,
|
|
150
|
+
MAX(Output) AS output,
|
|
151
|
+
MAX(OutputObject) AS outputObject,
|
|
152
|
+
SUM(COALESCE(Cost, 0.0)) AS item_cost,
|
|
153
|
+
MAX(json_extract(SpanAttributes, '$."gen_ai.prompt"')) AS genai_input,
|
|
154
|
+
MAX(json_extract(SpanAttributes, '$."gen_ai.completion"')) AS genai_output
|
|
155
|
+
FROM traces
|
|
156
|
+
WHERE Model IS NOT NULL AND Model != ''
|
|
157
|
+
GROUP BY TraceId
|
|
158
|
+
) gen ON gen.TraceId = root.TraceId
|
|
159
|
+
WHERE root.DatasetRunId = ?
|
|
160
|
+
AND root.ParentSpanId IS NULL
|
|
161
|
+
ORDER BY CAST(root.Timestamp AS REAL) ASC
|
|
162
|
+
`;
|
|
163
|
+
const itemRows = database_1.default.prepare(itemsSql).all(experimentId);
|
|
164
|
+
const items = itemRows.map((item) => {
|
|
165
|
+
// Scores use resource_id = TraceId (OTEL trace ID, not SpanId)
|
|
166
|
+
const itemScoresSql = `
|
|
167
|
+
SELECT name, score, label, reason
|
|
168
|
+
FROM scores
|
|
169
|
+
WHERE resource_id = ?
|
|
170
|
+
ORDER BY created_at ASC
|
|
171
|
+
`;
|
|
172
|
+
const itemScores = database_1.default.prepare(itemScoresSql).all(item.traceId);
|
|
173
|
+
return {
|
|
174
|
+
traceId: item.traceId,
|
|
175
|
+
itemName: item.itemName,
|
|
176
|
+
input: item.input,
|
|
177
|
+
expectedOutput: item.expectedOutput,
|
|
178
|
+
actualOutput: item.actualOutput,
|
|
179
|
+
latencyMs: item.latencyMs,
|
|
180
|
+
cost: item.cost,
|
|
181
|
+
scores: itemScores.map((s) => ({
|
|
182
|
+
name: s.name,
|
|
183
|
+
score: s.score,
|
|
184
|
+
label: s.label,
|
|
185
|
+
reason: s.reason,
|
|
186
|
+
})),
|
|
187
|
+
};
|
|
188
|
+
});
|
|
189
|
+
return { summary, items };
|
|
190
|
+
});
|
|
191
|
+
exports.getExperimentById = getExperimentById;
|
|
192
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../cli-src/server/routes/experiments/index.ts"],"names":[],"mappings":"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"}
|