@agentmark-ai/cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/.next/BUILD_ID +1 -0
- package/dist/.next/app-build-manifest.json +66 -0
- package/dist/.next/app-path-routes-manifest.json +7 -0
- package/dist/.next/build-manifest.json +33 -0
- package/dist/.next/cache/.previewinfo +1 -0
- package/dist/.next/cache/.rscinfo +1 -0
- package/dist/.next/cache/.tsbuildinfo +1 -0
- package/dist/.next/cache/config.json +7 -0
- 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/0.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/diagnostics/build-diagnostics.json +6 -0
- package/dist/.next/diagnostics/framework.json +1 -0
- package/dist/.next/export-marker.json +6 -0
- package/dist/.next/images-manifest.json +57 -0
- package/dist/.next/next-minimal-server.js.nft.json +1 -0
- package/dist/.next/next-server.js.nft.json +1 -0
- package/dist/.next/package.json +1 -0
- package/dist/.next/prerender-manifest.json +133 -0
- package/dist/.next/react-loadable-manifest.json +1 -0
- package/dist/.next/required-server-files.json +325 -0
- package/dist/.next/routes-manifest.json +77 -0
- package/dist/.next/server/app/_not-found/page.js +2 -0
- package/dist/.next/server/app/_not-found/page.js.nft.json +1 -0
- package/dist/.next/server/app/_not-found/page_client-reference-manifest.js +1 -0
- package/dist/.next/server/app/_not-found.html +1 -0
- package/dist/.next/server/app/_not-found.meta +8 -0
- package/dist/.next/server/app/_not-found.rsc +19 -0
- package/dist/.next/server/app/index.html +1 -0
- package/dist/.next/server/app/index.meta +7 -0
- package/dist/.next/server/app/index.rsc +20 -0
- package/dist/.next/server/app/page.js +2 -0
- package/dist/.next/server/app/page.js.nft.json +1 -0
- package/dist/.next/server/app/page_client-reference-manifest.js +1 -0
- package/dist/.next/server/app/requests/page.js +2 -0
- package/dist/.next/server/app/requests/page.js.nft.json +1 -0
- package/dist/.next/server/app/requests/page_client-reference-manifest.js +1 -0
- package/dist/.next/server/app/requests.html +1 -0
- package/dist/.next/server/app/requests.meta +7 -0
- package/dist/.next/server/app/requests.rsc +25 -0
- package/dist/.next/server/app/sessions/page.js +2 -0
- package/dist/.next/server/app/sessions/page.js.nft.json +1 -0
- package/dist/.next/server/app/sessions/page_client-reference-manifest.js +1 -0
- package/dist/.next/server/app/sessions.html +1 -0
- package/dist/.next/server/app/sessions.meta +7 -0
- package/dist/.next/server/app/sessions.rsc +25 -0
- package/dist/.next/server/app/traces/page.js +2 -0
- package/dist/.next/server/app/traces/page.js.nft.json +1 -0
- package/dist/.next/server/app/traces/page_client-reference-manifest.js +1 -0
- package/dist/.next/server/app/traces.html +1 -0
- package/dist/.next/server/app/traces.meta +7 -0
- package/dist/.next/server/app/traces.rsc +25 -0
- package/dist/.next/server/app-paths-manifest.json +7 -0
- package/dist/.next/server/chunks/18.js +198 -0
- package/dist/.next/server/chunks/383.js +6 -0
- package/dist/.next/server/chunks/478.js +22 -0
- package/dist/.next/server/chunks/547.js +1 -0
- package/dist/.next/server/chunks/84.js +138 -0
- package/dist/.next/server/functions-config-manifest.json +4 -0
- package/dist/.next/server/interception-route-rewrite-manifest.js +1 -0
- package/dist/.next/server/middleware-build-manifest.js +1 -0
- package/dist/.next/server/middleware-manifest.json +6 -0
- package/dist/.next/server/middleware-react-loadable-manifest.js +1 -0
- package/dist/.next/server/next-font-manifest.js +1 -0
- package/dist/.next/server/next-font-manifest.json +1 -0
- package/dist/.next/server/pages/404.html +1 -0
- package/dist/.next/server/pages/500.html +1 -0
- package/dist/.next/server/pages/_app.js +1 -0
- package/dist/.next/server/pages/_app.js.nft.json +1 -0
- package/dist/.next/server/pages/_document.js +1 -0
- package/dist/.next/server/pages/_document.js.nft.json +1 -0
- package/dist/.next/server/pages/_error.js +19 -0
- package/dist/.next/server/pages/_error.js.nft.json +1 -0
- package/dist/.next/server/pages-manifest.json +6 -0
- package/dist/.next/server/server-reference-manifest.js +1 -0
- package/dist/.next/server/server-reference-manifest.json +1 -0
- package/dist/.next/server/webpack-runtime.js +1 -0
- package/dist/.next/static/WXGM4V1PBw_hLKICZoZaB/_buildManifest.js +1 -0
- package/dist/.next/static/WXGM4V1PBw_hLKICZoZaB/_ssgManifest.js +1 -0
- package/dist/.next/static/chunks/18-57c2d8d3aff89bcb.js +1 -0
- package/dist/.next/static/chunks/248-9028c24b6529c0c7.js +77 -0
- package/dist/.next/static/chunks/41-1291c1f5f295280d.js +1 -0
- package/dist/.next/static/chunks/602-7e76e1ee986e97d5.js +28 -0
- package/dist/.next/static/chunks/6b3bb038-67c653ff0a93a5bd.js +1 -0
- package/dist/.next/static/chunks/87c73c54-09e1ba5c70e60a51.js +1 -0
- package/dist/.next/static/chunks/902-50df3a419e9a9cef.js +1 -0
- package/dist/.next/static/chunks/app/_not-found/page-6711055aaf38bfb8.js +1 -0
- package/dist/.next/static/chunks/app/layout-eaddb6da201ab019.js +1 -0
- package/dist/.next/static/chunks/app/page-93d2401dc395548b.js +1 -0
- package/dist/.next/static/chunks/app/requests/page-20818b6519923653.js +1 -0
- package/dist/.next/static/chunks/app/sessions/page-cff6cd4b8819d0e5.js +1 -0
- package/dist/.next/static/chunks/app/traces/page-e556a466332fc75b.js +1 -0
- package/dist/.next/static/chunks/baeaa4ff-0a317ff4d32584cd.js +1 -0
- package/dist/.next/static/chunks/framework-3c3dfe0642f415ba.js +1 -0
- package/dist/.next/static/chunks/main-314a36b6249f35e5.js +1 -0
- package/dist/.next/static/chunks/main-app-0b5725cb98f081b4.js +1 -0
- package/dist/.next/static/chunks/pages/_app-d6f6b3bbc3d81ee1.js +1 -0
- package/dist/.next/static/chunks/pages/_error-75a96cf1997cc3b9.js +1 -0
- package/dist/.next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
- package/dist/.next/static/chunks/webpack-f10b0ea54196b48e.js +1 -0
- package/dist/.next/static/css/a00826fc162bd22d.css +31 -0
- package/dist/.next/trace +51 -0
- package/dist/.next/types/app/layout.ts +84 -0
- package/dist/.next/types/app/page.ts +84 -0
- package/dist/.next/types/app/requests/page.ts +84 -0
- package/dist/.next/types/app/sessions/page.ts +84 -0
- package/dist/.next/types/app/traces/page.ts +84 -0
- package/dist/.next/types/cache-life.d.ts +141 -0
- package/dist/.next/types/package.json +1 -0
- package/dist/.next/types/routes.d.ts +60 -0
- package/dist/.next/types/validator.ts +88 -0
- package/dist/api-server.d.ts +1 -0
- package/dist/api-server.js +545 -0
- package/dist/api-server.js.map +1 -0
- package/dist/commands/build.d.ts +9 -0
- package/dist/commands/build.js +206 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/dev.d.ts +7 -0
- package/dist/commands/dev.js +406 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/generate-types.d.ts +7 -0
- package/dist/commands/generate-types.js +31 -0
- package/dist/commands/generate-types.js.map +1 -0
- package/dist/commands/pull-models.d.ts +2 -0
- package/dist/commands/pull-models.js +105 -0
- package/dist/commands/pull-models.js.map +1 -0
- package/dist/commands/run-experiment.d.ts +7 -0
- package/dist/commands/run-experiment.js +579 -0
- package/dist/commands/run-experiment.js.map +1 -0
- package/dist/commands/run-prompt.d.ts +8 -0
- package/dist/commands/run-prompt.js +397 -0
- package/dist/commands/run-prompt.js.map +1 -0
- package/dist/config.d.ts +23 -0
- package/dist/config.js +170 -0
- package/dist/config.js.map +1 -0
- package/dist/cost-mapping/cost-mapping.d.ts +7 -0
- package/dist/cost-mapping/cost-mapping.js +36 -0
- package/dist/cost-mapping/cost-mapping.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +127 -0
- package/dist/index.js.map +1 -0
- package/dist/runner-server/core.d.ts +15 -0
- package/dist/runner-server/core.js +180 -0
- package/dist/runner-server/core.js.map +1 -0
- package/dist/runner-server/middleware/signature-verification.d.ts +37 -0
- package/dist/runner-server/middleware/signature-verification.js +55 -0
- package/dist/runner-server/middleware/signature-verification.js.map +1 -0
- package/dist/runner-server/types.d.ts +67 -0
- package/dist/runner-server/types.js +7 -0
- package/dist/runner-server/types.js.map +1 -0
- package/dist/runner-server.d.ts +32 -0
- package/dist/runner-server.js +376 -0
- package/dist/runner-server.js.map +1 -0
- package/dist/server/database/index.d.ts +3 -0
- package/dist/server/database/index.js +97 -0
- package/dist/server/database/index.js.map +1 -0
- package/dist/server/routes/scores/index.d.ts +14 -0
- package/dist/server/routes/scores/index.js +60 -0
- package/dist/server/routes/scores/index.js.map +1 -0
- package/dist/server/routes/traces/index.d.ts +50 -0
- package/dist/server/routes/traces/index.js +614 -0
- package/dist/server/routes/traces/index.js.map +1 -0
- package/dist/tunnel.d.ts +19 -0
- package/dist/tunnel.js +134 -0
- package/dist/tunnel.js.map +1 -0
- package/dist/utils/prompt-detection.d.ts +8 -0
- package/dist/utils/prompt-detection.js +24 -0
- package/dist/utils/prompt-detection.js.map +1 -0
- package/dist/utils/providers.d.ts +38 -0
- package/dist/utils/providers.js +82 -0
- package/dist/utils/providers.js.map +1 -0
- package/next.config.ts +18 -0
- package/package.json +90 -0
- package/public/favicon.ico +0 -0
- package/public/file.svg +1 -0
- package/public/logo.svg +1 -0
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* AgentMark Webhook Server
|
|
4
|
+
*
|
|
5
|
+
* This file provides the webhook server for local development,
|
|
6
|
+
* used to execute prompts and experiments via Express.
|
|
7
|
+
*/
|
|
8
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
9
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
10
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
11
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
12
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
13
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
14
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
15
|
+
});
|
|
16
|
+
};
|
|
17
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
18
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
19
|
+
};
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.handleWebhookRequest = void 0;
|
|
22
|
+
exports.createWebhookServer = createWebhookServer;
|
|
23
|
+
const express_1 = __importDefault(require("express"));
|
|
24
|
+
const express_rate_limit_1 = __importDefault(require("express-rate-limit"));
|
|
25
|
+
const node_http_1 = require("node:http");
|
|
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
|
+
// Set up rate limiter: 100 requests per 15 minutes per IP
|
|
30
|
+
const limiter = (0, express_rate_limit_1.default)({
|
|
31
|
+
windowMs: 15 * 60 * 1000, // 15 minutes
|
|
32
|
+
max: 100, // limit each IP to 100 requests per windowMs
|
|
33
|
+
standardHeaders: true, // Return rate limit info in the `RateLimit-*` headers
|
|
34
|
+
legacyHeaders: false, // Disable the `X-RateLimit-*` headers
|
|
35
|
+
});
|
|
36
|
+
/**
|
|
37
|
+
* Creates an Express middleware handler for AgentMark webhook requests.
|
|
38
|
+
*/
|
|
39
|
+
function createMiddleware(handler, signatureOptions) {
|
|
40
|
+
return (req, res) => __awaiter(this, void 0, void 0, function* () {
|
|
41
|
+
try {
|
|
42
|
+
// Log incoming request
|
|
43
|
+
const timestamp = new Date().toISOString();
|
|
44
|
+
const clientIp = req.ip || req.socket.remoteAddress || 'unknown';
|
|
45
|
+
console.log(`\n[${timestamp}] ${req.method} ${req.path} - ${clientIp}`);
|
|
46
|
+
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
|
+
// Call platform-agnostic core handler
|
|
71
|
+
const result = yield (0, core_1.handleWebhookRequest)(body, handler);
|
|
72
|
+
// Handle error responses
|
|
73
|
+
if (result.type === 'error') {
|
|
74
|
+
const errorMessage = result.details || result.error;
|
|
75
|
+
console.log(` → ${result.status} Error: ${errorMessage}`);
|
|
76
|
+
return res.status(result.status).json({
|
|
77
|
+
message: errorMessage
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
// Handle streaming responses
|
|
81
|
+
if (result.type === 'stream') {
|
|
82
|
+
// Set streaming headers
|
|
83
|
+
for (const [key, value] of Object.entries(result.headers)) {
|
|
84
|
+
res.setHeader(key, value);
|
|
85
|
+
}
|
|
86
|
+
// Stream the response
|
|
87
|
+
const reader = result.stream.getReader();
|
|
88
|
+
const decoder = new TextDecoder();
|
|
89
|
+
try {
|
|
90
|
+
while (true) {
|
|
91
|
+
const { value, done } = yield reader.read();
|
|
92
|
+
if (done)
|
|
93
|
+
break;
|
|
94
|
+
const chunk = typeof value === 'string' ? value : decoder.decode(value);
|
|
95
|
+
// Log errors from the stream
|
|
96
|
+
try {
|
|
97
|
+
const parsed = JSON.parse(chunk.trim());
|
|
98
|
+
if (parsed.type === 'error') {
|
|
99
|
+
console.error(` ❌ Error: ${parsed.error || parsed.message || 'Unknown error'}`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
catch (_a) {
|
|
103
|
+
// Not JSON or multi-line, ignore parsing errors
|
|
104
|
+
}
|
|
105
|
+
res.write(chunk);
|
|
106
|
+
}
|
|
107
|
+
// Send traceId as final event if available
|
|
108
|
+
if (result.traceId) {
|
|
109
|
+
res.write(JSON.stringify({ type: 'done', traceId: result.traceId }) + '\n');
|
|
110
|
+
}
|
|
111
|
+
res.end();
|
|
112
|
+
}
|
|
113
|
+
catch (streamError) {
|
|
114
|
+
console.error('Streaming error:', streamError);
|
|
115
|
+
if (!res.headersSent) {
|
|
116
|
+
res.status(500).json({
|
|
117
|
+
message: streamError instanceof Error ? streamError.message : String(streamError)
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
res.end();
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
// Handle regular JSON responses
|
|
127
|
+
console.log(` → ${result.status || 200} Success`);
|
|
128
|
+
return res.status(result.status || 200).json(result.data);
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
console.error(' → 500 Internal Error:', error);
|
|
132
|
+
return res.status(500).json({
|
|
133
|
+
message: error instanceof Error ? error.message : String(error)
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Creates an HTTP server that wraps a webhook handler instance.
|
|
140
|
+
* This server provides endpoints for executing prompts and experiments via HTTP.
|
|
141
|
+
* Used by the CLI and local development workflows.
|
|
142
|
+
*
|
|
143
|
+
* @param options - Server configuration options
|
|
144
|
+
* @returns HTTP server instance
|
|
145
|
+
*/
|
|
146
|
+
function createWebhookServer(options) {
|
|
147
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
148
|
+
const { port = 9417, handler, signatureVerification } = options;
|
|
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
|
+
}
|
|
158
|
+
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
|
+
app.set('trust proxy', 1);
|
|
162
|
+
// Parse JSON bodies (up to 10mb)
|
|
163
|
+
app.use(express_1.default.json({ limit: '10mb' }));
|
|
164
|
+
// Landing page for browser access
|
|
165
|
+
app.get('/', (_req, res) => __awaiter(this, void 0, void 0, function* () {
|
|
166
|
+
const { apiServerUrl, templatesDirectory } = options;
|
|
167
|
+
// Fetch available prompts dynamically
|
|
168
|
+
let promptsList = '';
|
|
169
|
+
if (apiServerUrl) {
|
|
170
|
+
try {
|
|
171
|
+
const response = yield fetch(`${apiServerUrl}/v1/prompts`);
|
|
172
|
+
if (response.ok) {
|
|
173
|
+
const data = yield response.json();
|
|
174
|
+
if (data.paths && data.paths.length > 0) {
|
|
175
|
+
promptsList = data.paths.map((p) => ` <li><code>${p}</code></li>`).join('\n');
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
promptsList = ' <li style="color: #64748b;">No prompts found</li>';
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
promptsList = ' <li style="color: #64748b;">Unable to fetch prompts</li>';
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
catch (_a) {
|
|
186
|
+
promptsList = ' <li style="color: #64748b;">API server not available</li>';
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
promptsList = ' <li style="color: #64748b;">API server URL not configured</li>';
|
|
191
|
+
}
|
|
192
|
+
const templatesDir = templatesDirectory || 'agentmark/';
|
|
193
|
+
const apiServerInfo = apiServerUrl ?
|
|
194
|
+
`<div class="info-box">
|
|
195
|
+
<strong>📁 Templates Directory:</strong><br>
|
|
196
|
+
<code>${templatesDir}</code><br><br>
|
|
197
|
+
<strong>🔗 API:</strong><br>
|
|
198
|
+
<a href="${apiServerUrl}" target="_blank">${apiServerUrl}</a>
|
|
199
|
+
</div>` : '';
|
|
200
|
+
res.setHeader('Content-Type', 'text/html; charset=utf-8');
|
|
201
|
+
res.send(`
|
|
202
|
+
<!DOCTYPE html>
|
|
203
|
+
<html lang="en">
|
|
204
|
+
<head>
|
|
205
|
+
<meta charset="UTF-8">
|
|
206
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
207
|
+
<title>AgentMark CLI Runner</title>
|
|
208
|
+
<style>
|
|
209
|
+
body {
|
|
210
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
211
|
+
max-width: 800px;
|
|
212
|
+
margin: 40px auto;
|
|
213
|
+
padding: 20px;
|
|
214
|
+
line-height: 1.6;
|
|
215
|
+
color: #333;
|
|
216
|
+
}
|
|
217
|
+
h1 { color: #2563eb; margin-bottom: 10px; }
|
|
218
|
+
.subtitle { color: #64748b; margin-bottom: 30px; }
|
|
219
|
+
.status {
|
|
220
|
+
background: #dcfce7;
|
|
221
|
+
border-left: 4px solid #22c55e;
|
|
222
|
+
padding: 15px;
|
|
223
|
+
margin: 20px 0;
|
|
224
|
+
border-radius: 4px;
|
|
225
|
+
}
|
|
226
|
+
.endpoint {
|
|
227
|
+
background: #f8fafc;
|
|
228
|
+
border: 1px solid #e2e8f0;
|
|
229
|
+
border-radius: 6px;
|
|
230
|
+
padding: 15px;
|
|
231
|
+
margin: 15px 0;
|
|
232
|
+
}
|
|
233
|
+
.endpoint-title {
|
|
234
|
+
font-weight: 600;
|
|
235
|
+
color: #1e293b;
|
|
236
|
+
margin-bottom: 8px;
|
|
237
|
+
}
|
|
238
|
+
.endpoint-desc {
|
|
239
|
+
color: #64748b;
|
|
240
|
+
font-size: 14px;
|
|
241
|
+
margin-bottom: 10px;
|
|
242
|
+
}
|
|
243
|
+
code {
|
|
244
|
+
background: #1e293b;
|
|
245
|
+
color: #e2e8f0;
|
|
246
|
+
padding: 2px 6px;
|
|
247
|
+
border-radius: 3px;
|
|
248
|
+
font-size: 13px;
|
|
249
|
+
}
|
|
250
|
+
.command {
|
|
251
|
+
background: #1e293b;
|
|
252
|
+
color: #e2e8f0;
|
|
253
|
+
padding: 12px;
|
|
254
|
+
border-radius: 4px;
|
|
255
|
+
margin: 10px 0;
|
|
256
|
+
overflow-x: auto;
|
|
257
|
+
font-family: 'Monaco', 'Menlo', 'Courier New', monospace;
|
|
258
|
+
font-size: 13px;
|
|
259
|
+
}
|
|
260
|
+
.info-box {
|
|
261
|
+
background: #f0f9ff;
|
|
262
|
+
border-left: 4px solid #2563eb;
|
|
263
|
+
padding: 15px;
|
|
264
|
+
margin: 20px 0;
|
|
265
|
+
border-radius: 4px;
|
|
266
|
+
}
|
|
267
|
+
a { color: #2563eb; text-decoration: none; }
|
|
268
|
+
a:hover { text-decoration: underline; }
|
|
269
|
+
footer {
|
|
270
|
+
margin-top: 40px;
|
|
271
|
+
padding-top: 20px;
|
|
272
|
+
border-top: 1px solid #e2e8f0;
|
|
273
|
+
color: #64748b;
|
|
274
|
+
font-size: 14px;
|
|
275
|
+
}
|
|
276
|
+
table {
|
|
277
|
+
width: 100%;
|
|
278
|
+
border-collapse: collapse;
|
|
279
|
+
margin: 15px 0;
|
|
280
|
+
font-size: 14px;
|
|
281
|
+
}
|
|
282
|
+
th {
|
|
283
|
+
background: #f1f5f9;
|
|
284
|
+
padding: 10px;
|
|
285
|
+
text-align: left;
|
|
286
|
+
font-weight: 600;
|
|
287
|
+
border-bottom: 2px solid #e2e8f0;
|
|
288
|
+
}
|
|
289
|
+
td {
|
|
290
|
+
padding: 10px;
|
|
291
|
+
border-bottom: 1px solid #e2e8f0;
|
|
292
|
+
}
|
|
293
|
+
td code {
|
|
294
|
+
background: #1e293b;
|
|
295
|
+
color: #e2e8f0;
|
|
296
|
+
padding: 2px 6px;
|
|
297
|
+
border-radius: 3px;
|
|
298
|
+
font-size: 12px;
|
|
299
|
+
}
|
|
300
|
+
</style>
|
|
301
|
+
</head>
|
|
302
|
+
<body>
|
|
303
|
+
<h1>AgentMark CLI Runner</h1>
|
|
304
|
+
<div class="subtitle">Local development server for executing prompts and experiments</div>
|
|
305
|
+
|
|
306
|
+
<div class="status">
|
|
307
|
+
<strong>✓ Server Status:</strong> Running on port ${port}
|
|
308
|
+
</div>
|
|
309
|
+
|
|
310
|
+
${apiServerInfo}
|
|
311
|
+
|
|
312
|
+
<h2>What is this?</h2>
|
|
313
|
+
<p>
|
|
314
|
+
This is the <strong>AgentMark CLI Runner</strong>, an internal development server that executes
|
|
315
|
+
prompts and experiments locally. It's automatically started when you run <code>agentmark dev</code>
|
|
316
|
+
and is used by CLI commands to process your prompts.
|
|
317
|
+
</p>
|
|
318
|
+
|
|
319
|
+
<h2>Your Prompts</h2>
|
|
320
|
+
<ul>
|
|
321
|
+
${promptsList}
|
|
322
|
+
</ul>
|
|
323
|
+
|
|
324
|
+
<h2>Available Commands</h2>
|
|
325
|
+
|
|
326
|
+
<h3>Run a Single Prompt</h3>
|
|
327
|
+
<div class="command">$ npm run prompt agentmark/<file>.prompt.mdx</div>
|
|
328
|
+
|
|
329
|
+
<h3>Run Experiments with Datasets</h3>
|
|
330
|
+
<div class="command">$ npm run experiment agentmark/<file>.prompt.mdx</div>
|
|
331
|
+
|
|
332
|
+
<h2>API Endpoints</h2>
|
|
333
|
+
|
|
334
|
+
<table>
|
|
335
|
+
<thead>
|
|
336
|
+
<tr>
|
|
337
|
+
<th>Endpoint</th>
|
|
338
|
+
<th>Method</th>
|
|
339
|
+
<th>Description</th>
|
|
340
|
+
</tr>
|
|
341
|
+
</thead>
|
|
342
|
+
<tbody>
|
|
343
|
+
<tr>
|
|
344
|
+
<td><code>POST /</code></td>
|
|
345
|
+
<td>POST</td>
|
|
346
|
+
<td>Execute prompts or run experiments</td>
|
|
347
|
+
</tr>
|
|
348
|
+
</tbody>
|
|
349
|
+
</table>
|
|
350
|
+
|
|
351
|
+
<p><strong>Event Types:</strong></p>
|
|
352
|
+
<ul>
|
|
353
|
+
<li><code>prompt-run</code> - Execute a single prompt with test props</li>
|
|
354
|
+
<li><code>dataset-run</code> - Run experiments across a dataset</li>
|
|
355
|
+
</ul>
|
|
356
|
+
|
|
357
|
+
<footer>
|
|
358
|
+
<div><strong>AgentMark Development Server</strong></div>
|
|
359
|
+
<div>Learn more: <a href="https://docs.agentmark.co" target="_blank">docs.agentmark.co</a></div>
|
|
360
|
+
</footer>
|
|
361
|
+
</body>
|
|
362
|
+
</html>
|
|
363
|
+
`.trim());
|
|
364
|
+
}));
|
|
365
|
+
// Mount the webhook handler middleware at POST /
|
|
366
|
+
app.post('/', limiter, createMiddleware(handler, sigOptions));
|
|
367
|
+
// Create HTTP server and start listening
|
|
368
|
+
const server = (0, node_http_1.createServer)(app);
|
|
369
|
+
yield new Promise(resolve => server.listen(port, resolve));
|
|
370
|
+
return server;
|
|
371
|
+
});
|
|
372
|
+
}
|
|
373
|
+
// Re-export core handler and types
|
|
374
|
+
var core_2 = require("./runner-server/core");
|
|
375
|
+
Object.defineProperty(exports, "handleWebhookRequest", { enumerable: true, get: function () { return core_2.handleWebhookRequest; } });
|
|
376
|
+
//# sourceMappingURL=runner-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner-server.js","sourceRoot":"","sources":["../cli-src/runner-server.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;AA8JH,kDA0OC;AAtYD,sDAAqE;AACrE,4EAA2C;AAC3C,yCAAiD;AACjD,+CAA4D;AAE5D,8FAI2D;AAC3D,qCAA4C;AAE5C,0DAA0D;AAC1D,MAAM,OAAO,GAAG,IAAA,4BAAS,EAAC;IACxB,QAAQ,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,aAAa;IACvC,GAAG,EAAE,GAAG,EAAE,6CAA6C;IACvD,eAAe,EAAE,IAAI,EAAE,sDAAsD;IAC7E,aAAa,EAAE,KAAK,EAAE,sCAAsC;CAC7D,CAAC,CAAC;AAiBH;;GAEG;AACH,SAAS,gBAAgB,CACvB,OAAuB,EACvB,gBAA+C;IAE/C,OAAO,CAAO,GAAY,EAAE,GAAa,EAAE,EAAE;QAC3C,IAAI,CAAC;YACH,uBAAuB;YACvB,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC3C,MAAM,QAAQ,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,aAAa,IAAI,SAAS,CAAC;YACjE,OAAO,CAAC,GAAG,CAAC,MAAM,SAAS,KAAK,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,MAAM,QAAQ,EAAE,CAAC,CAAC;YAExE,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;YAE5B,iCAAiC;YACjC,IAAI,gBAAgB,IAAI,CAAC,IAAA,+CAAsB,EAAC,gBAAgB,CAAC,EAAE,CAAC;gBAClE,MAAM,UAAU,GAAG,gBAAgB,CAAC,UAAU,IAAI,2BAA2B,CAAC;gBAC9E,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAW,CAAC;gBAElE,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;oBACnD,OAAO,CAAC,KAAK,CAAC,0BAA0B,UAAU,EAAE,CAAC,CAAC;oBACtD,OAAO,CAAC,KAAK,CAAC,oFAAoF,CAAC,CAAC;oBACpG,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;wBAC1B,OAAO,EAAE,sCAAsC,UAAU,kCAAkC;qBAC5F,CAAC,CAAC;gBACL,CAAC;gBAED,MAAM,UAAU,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBAC1E,MAAM,OAAO,GAAG,MAAM,IAAA,+CAAsB,EAAC,UAAU,EAAE,SAAS,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;gBAE7F,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;oBACpD,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;oBAC3E,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;wBAC1B,OAAO,EAAE,2DAA2D;qBACrE,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;YACzC,CAAC;YAED,sCAAsC;YACtC,MAAM,MAAM,GAAG,MAAM,IAAA,2BAAoB,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAEzD,yBAAyB;YACzB,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC5B,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC;gBACpD,OAAO,CAAC,GAAG,CAAC,QAAQ,MAAM,CAAC,MAAM,WAAW,YAAY,EAAE,CAAC,CAAC;gBAC5D,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;oBACpC,OAAO,EAAE,YAAY;iBACtB,CAAC,CAAC;YACL,CAAC;YAED,6BAA6B;YAC7B,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7B,wBAAwB;gBACxB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC1D,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC5B,CAAC;gBAED,sBAAsB;gBACtB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBACzC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;gBAElC,IAAI,CAAC;oBACH,OAAO,IAAI,EAAE,CAAC;wBACZ,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;wBAC5C,IAAI,IAAI;4BAAE,MAAM;wBAChB,MAAM,KAAK,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;wBACxE,6BAA6B;wBAC7B,IAAI,CAAC;4BACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;4BACxC,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gCAC5B,OAAO,CAAC,KAAK,CAAC,eAAe,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,IAAI,eAAe,EAAE,CAAC,CAAC;4BACpF,CAAC;wBACH,CAAC;wBAAC,WAAM,CAAC;4BACP,gDAAgD;wBAClD,CAAC;wBACD,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBACnB,CAAC;oBACD,2CAA2C;oBAC3C,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;wBACnB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;oBAC9E,CAAC;oBACD,GAAG,CAAC,GAAG,EAAE,CAAC;gBACZ,CAAC;gBAAC,OAAO,WAAW,EAAE,CAAC;oBACrB,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC;oBAC/C,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;wBACrB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;4BACnB,OAAO,EAAE,WAAW,YAAY,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;yBAClF,CAAC,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACN,GAAG,CAAC,GAAG,EAAE,CAAC;oBACZ,CAAC;gBACH,CAAC;gBACD,OAAO;YACT,CAAC;YAED,gCAAgC;YAChC,OAAO,CAAC,GAAG,CAAC,QAAQ,MAAM,CAAC,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC;YACpD,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAE5D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;YACjD,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC1B,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAChE,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAA,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,SAAsB,mBAAmB,CAAC,OAA6B;;QACrE,MAAM,EAAE,IAAI,GAAG,IAAI,EAAE,OAAO,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAC;QAEhE,uCAAuC;QACvC,IAAI,UAAU,GAAG,qBAAqB,CAAC;QACvC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,oBAAoB;YACpB,MAAM,MAAM,GAAG,IAAA,yBAAgB,GAAE,CAAC;YAClC,IAAI,MAAM,EAAE,CAAC;gBACX,UAAU,GAAG,EAAE,MAAM,EAAE,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,MAAM,GAAG,GAAG,IAAA,iBAAO,GAAE,CAAC;QAEtB,mEAAmE;QACnE,4EAA4E;QAC5E,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QAE1B,iCAAiC;QACjC,GAAG,CAAC,GAAG,CAAC,iBAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QAEzC,kCAAkC;QAClC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAO,IAAa,EAAE,GAAa,EAAE,EAAE;YAClD,MAAM,EAAE,YAAY,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC;YAErD,sCAAsC;YACtC,IAAI,WAAW,GAAG,EAAE,CAAC;YAErB,IAAI,YAAY,EAAE,CAAC;gBACjB,IAAI,CAAC;oBACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,YAAY,aAAa,CAAC,CAAC;oBAC3D,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;wBAChB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;wBACnC,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BACxC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CACzC,mBAAmB,CAAC,cAAc,CACnC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACf,CAAC;6BAAM,CAAC;4BACN,WAAW,GAAG,yDAAyD,CAAC;wBAC1E,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACN,WAAW,GAAG,gEAAgE,CAAC;oBACjF,CAAC;gBACH,CAAC;gBAAC,WAAM,CAAC;oBACP,WAAW,GAAG,iEAAiE,CAAC;gBAClF,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,WAAW,GAAG,sEAAsE,CAAC;YACvF,CAAC;YAED,MAAM,YAAY,GAAG,kBAAkB,IAAI,YAAY,CAAC;YACxD,MAAM,aAAa,GAAG,YAAY,CAAC,CAAC;gBAClC;;gBAEU,YAAY;;mBAET,YAAY,qBAAqB,YAAY;aACnD,CAAC,CAAC,CAAC,EAAE,CAAC;YAEf,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,0BAA0B,CAAC,CAAC;YAC1D,GAAG,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wDA0G2C,IAAI;;;IAGxD,aAAa;;;;;;;;;;;EAWf,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA0CR,CAAC,IAAI,EAAE,CAAC,CAAC;QACZ,CAAC,CAAA,CAAC,CAAC;QAEH,iDAAiD;QACjD,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;QAE9D,yCAAyC;QACzC,MAAM,MAAM,GAAG,IAAA,wBAAY,EAAC,GAAG,CAAC,CAAC;QACjC,MAAM,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QAEjE,OAAO,MAAM,CAAC;IAChB,CAAC;CAAA;AAED,mCAAmC;AACnC,6CAA4D;AAAnD,4GAAA,oBAAoB,OAAA"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
|
|
7
|
+
const db = new better_sqlite3_1.default(":memory:");
|
|
8
|
+
db.exec(`
|
|
9
|
+
CREATE TABLE IF NOT EXISTS traces (
|
|
10
|
+
-- Identity
|
|
11
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
12
|
+
TraceId TEXT NOT NULL,
|
|
13
|
+
SpanId TEXT NOT NULL,
|
|
14
|
+
ParentSpanId TEXT,
|
|
15
|
+
|
|
16
|
+
-- Core type and classification
|
|
17
|
+
Type TEXT NOT NULL DEFAULT 'SPAN', -- 'SPAN' | 'GENERATION' | 'EVENT'
|
|
18
|
+
|
|
19
|
+
-- Timing
|
|
20
|
+
Timestamp TEXT NOT NULL, -- Start time (ISO 8601)
|
|
21
|
+
EndTime REAL, -- End time in milliseconds (Unix timestamp)
|
|
22
|
+
Duration INTEGER, -- Duration in milliseconds
|
|
23
|
+
|
|
24
|
+
-- Span metadata
|
|
25
|
+
SpanName TEXT,
|
|
26
|
+
SpanKind TEXT,
|
|
27
|
+
ServiceName TEXT,
|
|
28
|
+
TraceState TEXT,
|
|
29
|
+
StatusCode TEXT,
|
|
30
|
+
StatusMessage TEXT,
|
|
31
|
+
|
|
32
|
+
-- Normalized LLM generation fields
|
|
33
|
+
Model TEXT DEFAULT '',
|
|
34
|
+
InputTokens INTEGER DEFAULT 0,
|
|
35
|
+
OutputTokens INTEGER DEFAULT 0,
|
|
36
|
+
TotalTokens INTEGER DEFAULT 0,
|
|
37
|
+
ReasoningTokens INTEGER DEFAULT 0,
|
|
38
|
+
Cost REAL DEFAULT 0.0,
|
|
39
|
+
|
|
40
|
+
-- I/O fields
|
|
41
|
+
Input TEXT, -- JSON array of Message objects
|
|
42
|
+
Output TEXT, -- Plain text or JSON-stringified structured data
|
|
43
|
+
OutputObject TEXT, -- JSON-stringified structured object output
|
|
44
|
+
ToolCalls TEXT, -- JSON array of ToolCall objects
|
|
45
|
+
FinishReason TEXT, -- Unified finish reason (stop, tool-calls, length, etc.)
|
|
46
|
+
Settings TEXT, -- JSON-stringified model generation settings
|
|
47
|
+
|
|
48
|
+
-- Trace context fields
|
|
49
|
+
SessionId TEXT DEFAULT '',
|
|
50
|
+
SessionName TEXT DEFAULT '',
|
|
51
|
+
UserId TEXT DEFAULT '',
|
|
52
|
+
TraceName TEXT DEFAULT '',
|
|
53
|
+
|
|
54
|
+
-- Dataset/evaluation fields
|
|
55
|
+
DatasetRunId TEXT DEFAULT '',
|
|
56
|
+
DatasetRunName TEXT DEFAULT '',
|
|
57
|
+
DatasetPath TEXT DEFAULT '',
|
|
58
|
+
DatasetItemName TEXT DEFAULT '',
|
|
59
|
+
DatasetExpectedOutput TEXT DEFAULT '',
|
|
60
|
+
|
|
61
|
+
-- Prompt/template fields
|
|
62
|
+
PromptName TEXT DEFAULT '',
|
|
63
|
+
Props TEXT, -- JSON or string metadata props
|
|
64
|
+
Metadata TEXT, -- JSON-encoded custom metadata (Record<string, string>)
|
|
65
|
+
|
|
66
|
+
-- Raw data for export/debug (JSON-encoded)
|
|
67
|
+
ResourceAttributes TEXT,
|
|
68
|
+
SpanAttributes TEXT,
|
|
69
|
+
Events TEXT, -- JSON array of event objects [{timestamp, name, attributes}, ...]
|
|
70
|
+
Links TEXT, -- JSON array of link objects [{traceId, spanId, traceState?, attributes?}, ...]
|
|
71
|
+
|
|
72
|
+
-- Audit
|
|
73
|
+
CreatedAt TEXT DEFAULT (datetime('now'))
|
|
74
|
+
)
|
|
75
|
+
`);
|
|
76
|
+
db.exec(`
|
|
77
|
+
CREATE TABLE IF NOT EXISTS scores (
|
|
78
|
+
id TEXT PRIMARY KEY,
|
|
79
|
+
resource_id TEXT NOT NULL,
|
|
80
|
+
score REAL NOT NULL,
|
|
81
|
+
label TEXT NOT NULL,
|
|
82
|
+
reason TEXT NOT NULL,
|
|
83
|
+
name TEXT NOT NULL,
|
|
84
|
+
type TEXT,
|
|
85
|
+
source TEXT DEFAULT 'eval',
|
|
86
|
+
created_at TEXT DEFAULT (datetime('now'))
|
|
87
|
+
)
|
|
88
|
+
`);
|
|
89
|
+
// Create indexes for efficient querying
|
|
90
|
+
db.exec(`
|
|
91
|
+
CREATE INDEX IF NOT EXISTS idx_traces_trace_id ON traces(TraceId);
|
|
92
|
+
CREATE INDEX IF NOT EXISTS idx_traces_session_id ON traces(SessionId);
|
|
93
|
+
CREATE INDEX IF NOT EXISTS idx_traces_type_timestamp ON traces(Type, Timestamp DESC);
|
|
94
|
+
CREATE INDEX IF NOT EXISTS idx_traces_dataset_run_id ON traces(DatasetRunId);
|
|
95
|
+
`);
|
|
96
|
+
exports.default = db;
|
|
97
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../cli-src/server/database/index.ts"],"names":[],"mappings":";;;;;AAAA,oEAAyE;AAEzE,MAAM,EAAE,GAAiB,IAAI,wBAAQ,CAAC,UAAU,CAAC,CAAC;AAElD,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmEP,CAAC,CAAA;AAEF,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;CAYP,CAAC,CAAA;AAEF,wCAAwC;AACxC,EAAE,CAAC,IAAI,CAAC;;;;;CAKP,CAAC,CAAA;AAEF,kBAAe,EAAE,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
type ScoreBody = {
|
|
2
|
+
resourceId: string;
|
|
3
|
+
score: number;
|
|
4
|
+
label: string;
|
|
5
|
+
reason: string;
|
|
6
|
+
name: string;
|
|
7
|
+
type?: string;
|
|
8
|
+
};
|
|
9
|
+
export declare const createScore: (body: ScoreBody) => Promise<{
|
|
10
|
+
id: `${string}-${string}-${string}-${string}-${string}`;
|
|
11
|
+
message: string;
|
|
12
|
+
}>;
|
|
13
|
+
export declare const getScoresByResourceId: (resourceId: string) => Promise<any[]>;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,60 @@
|
|
|
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.getScoresByResourceId = exports.createScore = void 0;
|
|
16
|
+
const database_1 = __importDefault(require("../../database"));
|
|
17
|
+
const crypto_1 = require("crypto");
|
|
18
|
+
const createScore = (body) => __awaiter(void 0, void 0, void 0, function* () {
|
|
19
|
+
const { resourceId, score, label, reason, name, type } = body;
|
|
20
|
+
if (!resourceId) {
|
|
21
|
+
throw new Error("resourceId is required");
|
|
22
|
+
}
|
|
23
|
+
const id = (0, crypto_1.randomUUID)();
|
|
24
|
+
const insert = database_1.default.prepare(`
|
|
25
|
+
INSERT INTO scores (id, resource_id, score, label, reason, name, type, source, created_at)
|
|
26
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
27
|
+
`);
|
|
28
|
+
insert.run(id, resourceId, score, label, reason, name, type || null, "eval", new Date().toISOString());
|
|
29
|
+
return { id, message: "Score created successfully" };
|
|
30
|
+
});
|
|
31
|
+
exports.createScore = createScore;
|
|
32
|
+
const getScoresByResourceId = (resourceId) => __awaiter(void 0, void 0, void 0, function* () {
|
|
33
|
+
const sql = `
|
|
34
|
+
SELECT
|
|
35
|
+
id,
|
|
36
|
+
resource_id,
|
|
37
|
+
score,
|
|
38
|
+
label,
|
|
39
|
+
reason,
|
|
40
|
+
name,
|
|
41
|
+
type,
|
|
42
|
+
source,
|
|
43
|
+
created_at
|
|
44
|
+
FROM scores
|
|
45
|
+
WHERE resource_id = ?
|
|
46
|
+
ORDER BY created_at DESC
|
|
47
|
+
`;
|
|
48
|
+
const rows = database_1.default.prepare(sql).all(resourceId);
|
|
49
|
+
return rows.map((row) => ({
|
|
50
|
+
id: row.id,
|
|
51
|
+
name: row.name,
|
|
52
|
+
score: row.score,
|
|
53
|
+
label: row.label,
|
|
54
|
+
reason: row.reason,
|
|
55
|
+
source: row.source || "eval",
|
|
56
|
+
created_at: row.created_at,
|
|
57
|
+
}));
|
|
58
|
+
});
|
|
59
|
+
exports.getScoresByResourceId = getScoresByResourceId;
|
|
60
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../cli-src/server/routes/scores/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,8DAAgC;AAChC,mCAAoC;AAW7B,MAAM,WAAW,GAAG,CAAO,IAAe,EAAE,EAAE;IACnD,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IAE9D,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,EAAE,GAAG,IAAA,mBAAU,GAAE,CAAC;IAExB,MAAM,MAAM,GAAG,kBAAE,CAAC,OAAO,CAAC;;;GAGzB,CAAC,CAAC;IAEH,MAAM,CAAC,GAAG,CACR,EAAE,EACF,UAAU,EACV,KAAK,EACL,KAAK,EACL,MAAM,EACN,IAAI,EACJ,IAAI,IAAI,IAAI,EACZ,MAAM,EACN,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CACzB,CAAC;IAEF,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC;AACvD,CAAC,CAAA,CAAC;AA3BW,QAAA,WAAW,eA2BtB;AAEK,MAAM,qBAAqB,GAAG,CACnC,UAAkB,EACF,EAAE;IAClB,MAAM,GAAG,GAAG;;;;;;;;;;;;;;GAcX,CAAC;IAEF,MAAM,IAAI,GAAG,kBAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAU,CAAC;IAEtD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACxB,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,MAAM;QAC5B,UAAU,EAAE,GAAG,CAAC,UAAU;KAC3B,CAAC,CAAC,CAAC;AACN,CAAC,CAAA,CAAC;AA9BW,QAAA,qBAAqB,yBA8BhC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { NormalizedSpan } from "@agentmark-ai/shared-utils";
|
|
2
|
+
export declare const exportTraces: (normalizedSpans: NormalizedSpan[]) => Promise<void>;
|
|
3
|
+
export declare const getRequests: () => Promise<unknown[]>;
|
|
4
|
+
export declare const getTraces: () => Promise<unknown[]>;
|
|
5
|
+
export declare const getSpans: (traceId: string) => Promise<{
|
|
6
|
+
id: any;
|
|
7
|
+
name: any;
|
|
8
|
+
duration: any;
|
|
9
|
+
parentId: any;
|
|
10
|
+
timestamp: number;
|
|
11
|
+
traceId: any;
|
|
12
|
+
status: any;
|
|
13
|
+
data: any;
|
|
14
|
+
}[]>;
|
|
15
|
+
export declare const getTraceById: (traceId: string) => Promise<{
|
|
16
|
+
id: any;
|
|
17
|
+
name: any;
|
|
18
|
+
spans: {
|
|
19
|
+
id: any;
|
|
20
|
+
name: any;
|
|
21
|
+
duration: any;
|
|
22
|
+
parentId: any;
|
|
23
|
+
timestamp: number;
|
|
24
|
+
traceId: any;
|
|
25
|
+
status: any;
|
|
26
|
+
data: any;
|
|
27
|
+
}[];
|
|
28
|
+
data: {
|
|
29
|
+
id: any;
|
|
30
|
+
name: any;
|
|
31
|
+
status: any;
|
|
32
|
+
latency: any;
|
|
33
|
+
cost: any;
|
|
34
|
+
tokens: any;
|
|
35
|
+
start: any;
|
|
36
|
+
end: any;
|
|
37
|
+
status_message: any;
|
|
38
|
+
};
|
|
39
|
+
} | null>;
|
|
40
|
+
export declare const getTraceGraph: (traceId: string) => Promise<{
|
|
41
|
+
parentNodeId?: string;
|
|
42
|
+
nodeId: string;
|
|
43
|
+
spanId: string;
|
|
44
|
+
nodeType: string;
|
|
45
|
+
displayName: string;
|
|
46
|
+
spanName: string;
|
|
47
|
+
}[]>;
|
|
48
|
+
export declare const getSessions: () => Promise<any[]>;
|
|
49
|
+
export declare const getTracesBySessionId: (sessionId: string) => Promise<any[]>;
|
|
50
|
+
export declare const getTracesByRunId: (runId: string) => Promise<unknown[]>;
|