@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.
Files changed (180) hide show
  1. package/README.md +1 -0
  2. package/dist/.next/BUILD_ID +1 -0
  3. package/dist/.next/app-build-manifest.json +66 -0
  4. package/dist/.next/app-path-routes-manifest.json +7 -0
  5. package/dist/.next/build-manifest.json +33 -0
  6. package/dist/.next/cache/.previewinfo +1 -0
  7. package/dist/.next/cache/.rscinfo +1 -0
  8. package/dist/.next/cache/.tsbuildinfo +1 -0
  9. package/dist/.next/cache/config.json +7 -0
  10. package/dist/.next/cache/webpack/client-production/0.pack +0 -0
  11. package/dist/.next/cache/webpack/client-production/index.pack +0 -0
  12. package/dist/.next/cache/webpack/edge-server-production/0.pack +0 -0
  13. package/dist/.next/cache/webpack/edge-server-production/index.pack +0 -0
  14. package/dist/.next/cache/webpack/server-production/0.pack +0 -0
  15. package/dist/.next/cache/webpack/server-production/index.pack +0 -0
  16. package/dist/.next/diagnostics/build-diagnostics.json +6 -0
  17. package/dist/.next/diagnostics/framework.json +1 -0
  18. package/dist/.next/export-marker.json +6 -0
  19. package/dist/.next/images-manifest.json +57 -0
  20. package/dist/.next/next-minimal-server.js.nft.json +1 -0
  21. package/dist/.next/next-server.js.nft.json +1 -0
  22. package/dist/.next/package.json +1 -0
  23. package/dist/.next/prerender-manifest.json +133 -0
  24. package/dist/.next/react-loadable-manifest.json +1 -0
  25. package/dist/.next/required-server-files.json +325 -0
  26. package/dist/.next/routes-manifest.json +77 -0
  27. package/dist/.next/server/app/_not-found/page.js +2 -0
  28. package/dist/.next/server/app/_not-found/page.js.nft.json +1 -0
  29. package/dist/.next/server/app/_not-found/page_client-reference-manifest.js +1 -0
  30. package/dist/.next/server/app/_not-found.html +1 -0
  31. package/dist/.next/server/app/_not-found.meta +8 -0
  32. package/dist/.next/server/app/_not-found.rsc +19 -0
  33. package/dist/.next/server/app/index.html +1 -0
  34. package/dist/.next/server/app/index.meta +7 -0
  35. package/dist/.next/server/app/index.rsc +20 -0
  36. package/dist/.next/server/app/page.js +2 -0
  37. package/dist/.next/server/app/page.js.nft.json +1 -0
  38. package/dist/.next/server/app/page_client-reference-manifest.js +1 -0
  39. package/dist/.next/server/app/requests/page.js +2 -0
  40. package/dist/.next/server/app/requests/page.js.nft.json +1 -0
  41. package/dist/.next/server/app/requests/page_client-reference-manifest.js +1 -0
  42. package/dist/.next/server/app/requests.html +1 -0
  43. package/dist/.next/server/app/requests.meta +7 -0
  44. package/dist/.next/server/app/requests.rsc +25 -0
  45. package/dist/.next/server/app/sessions/page.js +2 -0
  46. package/dist/.next/server/app/sessions/page.js.nft.json +1 -0
  47. package/dist/.next/server/app/sessions/page_client-reference-manifest.js +1 -0
  48. package/dist/.next/server/app/sessions.html +1 -0
  49. package/dist/.next/server/app/sessions.meta +7 -0
  50. package/dist/.next/server/app/sessions.rsc +25 -0
  51. package/dist/.next/server/app/traces/page.js +2 -0
  52. package/dist/.next/server/app/traces/page.js.nft.json +1 -0
  53. package/dist/.next/server/app/traces/page_client-reference-manifest.js +1 -0
  54. package/dist/.next/server/app/traces.html +1 -0
  55. package/dist/.next/server/app/traces.meta +7 -0
  56. package/dist/.next/server/app/traces.rsc +25 -0
  57. package/dist/.next/server/app-paths-manifest.json +7 -0
  58. package/dist/.next/server/chunks/18.js +198 -0
  59. package/dist/.next/server/chunks/383.js +6 -0
  60. package/dist/.next/server/chunks/478.js +22 -0
  61. package/dist/.next/server/chunks/547.js +1 -0
  62. package/dist/.next/server/chunks/84.js +138 -0
  63. package/dist/.next/server/functions-config-manifest.json +4 -0
  64. package/dist/.next/server/interception-route-rewrite-manifest.js +1 -0
  65. package/dist/.next/server/middleware-build-manifest.js +1 -0
  66. package/dist/.next/server/middleware-manifest.json +6 -0
  67. package/dist/.next/server/middleware-react-loadable-manifest.js +1 -0
  68. package/dist/.next/server/next-font-manifest.js +1 -0
  69. package/dist/.next/server/next-font-manifest.json +1 -0
  70. package/dist/.next/server/pages/404.html +1 -0
  71. package/dist/.next/server/pages/500.html +1 -0
  72. package/dist/.next/server/pages/_app.js +1 -0
  73. package/dist/.next/server/pages/_app.js.nft.json +1 -0
  74. package/dist/.next/server/pages/_document.js +1 -0
  75. package/dist/.next/server/pages/_document.js.nft.json +1 -0
  76. package/dist/.next/server/pages/_error.js +19 -0
  77. package/dist/.next/server/pages/_error.js.nft.json +1 -0
  78. package/dist/.next/server/pages-manifest.json +6 -0
  79. package/dist/.next/server/server-reference-manifest.js +1 -0
  80. package/dist/.next/server/server-reference-manifest.json +1 -0
  81. package/dist/.next/server/webpack-runtime.js +1 -0
  82. package/dist/.next/static/WXGM4V1PBw_hLKICZoZaB/_buildManifest.js +1 -0
  83. package/dist/.next/static/WXGM4V1PBw_hLKICZoZaB/_ssgManifest.js +1 -0
  84. package/dist/.next/static/chunks/18-57c2d8d3aff89bcb.js +1 -0
  85. package/dist/.next/static/chunks/248-9028c24b6529c0c7.js +77 -0
  86. package/dist/.next/static/chunks/41-1291c1f5f295280d.js +1 -0
  87. package/dist/.next/static/chunks/602-7e76e1ee986e97d5.js +28 -0
  88. package/dist/.next/static/chunks/6b3bb038-67c653ff0a93a5bd.js +1 -0
  89. package/dist/.next/static/chunks/87c73c54-09e1ba5c70e60a51.js +1 -0
  90. package/dist/.next/static/chunks/902-50df3a419e9a9cef.js +1 -0
  91. package/dist/.next/static/chunks/app/_not-found/page-6711055aaf38bfb8.js +1 -0
  92. package/dist/.next/static/chunks/app/layout-eaddb6da201ab019.js +1 -0
  93. package/dist/.next/static/chunks/app/page-93d2401dc395548b.js +1 -0
  94. package/dist/.next/static/chunks/app/requests/page-20818b6519923653.js +1 -0
  95. package/dist/.next/static/chunks/app/sessions/page-cff6cd4b8819d0e5.js +1 -0
  96. package/dist/.next/static/chunks/app/traces/page-e556a466332fc75b.js +1 -0
  97. package/dist/.next/static/chunks/baeaa4ff-0a317ff4d32584cd.js +1 -0
  98. package/dist/.next/static/chunks/framework-3c3dfe0642f415ba.js +1 -0
  99. package/dist/.next/static/chunks/main-314a36b6249f35e5.js +1 -0
  100. package/dist/.next/static/chunks/main-app-0b5725cb98f081b4.js +1 -0
  101. package/dist/.next/static/chunks/pages/_app-d6f6b3bbc3d81ee1.js +1 -0
  102. package/dist/.next/static/chunks/pages/_error-75a96cf1997cc3b9.js +1 -0
  103. package/dist/.next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
  104. package/dist/.next/static/chunks/webpack-f10b0ea54196b48e.js +1 -0
  105. package/dist/.next/static/css/a00826fc162bd22d.css +31 -0
  106. package/dist/.next/trace +51 -0
  107. package/dist/.next/types/app/layout.ts +84 -0
  108. package/dist/.next/types/app/page.ts +84 -0
  109. package/dist/.next/types/app/requests/page.ts +84 -0
  110. package/dist/.next/types/app/sessions/page.ts +84 -0
  111. package/dist/.next/types/app/traces/page.ts +84 -0
  112. package/dist/.next/types/cache-life.d.ts +141 -0
  113. package/dist/.next/types/package.json +1 -0
  114. package/dist/.next/types/routes.d.ts +60 -0
  115. package/dist/.next/types/validator.ts +88 -0
  116. package/dist/api-server.d.ts +1 -0
  117. package/dist/api-server.js +545 -0
  118. package/dist/api-server.js.map +1 -0
  119. package/dist/commands/build.d.ts +9 -0
  120. package/dist/commands/build.js +206 -0
  121. package/dist/commands/build.js.map +1 -0
  122. package/dist/commands/dev.d.ts +7 -0
  123. package/dist/commands/dev.js +406 -0
  124. package/dist/commands/dev.js.map +1 -0
  125. package/dist/commands/generate-types.d.ts +7 -0
  126. package/dist/commands/generate-types.js +31 -0
  127. package/dist/commands/generate-types.js.map +1 -0
  128. package/dist/commands/pull-models.d.ts +2 -0
  129. package/dist/commands/pull-models.js +105 -0
  130. package/dist/commands/pull-models.js.map +1 -0
  131. package/dist/commands/run-experiment.d.ts +7 -0
  132. package/dist/commands/run-experiment.js +579 -0
  133. package/dist/commands/run-experiment.js.map +1 -0
  134. package/dist/commands/run-prompt.d.ts +8 -0
  135. package/dist/commands/run-prompt.js +397 -0
  136. package/dist/commands/run-prompt.js.map +1 -0
  137. package/dist/config.d.ts +23 -0
  138. package/dist/config.js +170 -0
  139. package/dist/config.js.map +1 -0
  140. package/dist/cost-mapping/cost-mapping.d.ts +7 -0
  141. package/dist/cost-mapping/cost-mapping.js +36 -0
  142. package/dist/cost-mapping/cost-mapping.js.map +1 -0
  143. package/dist/index.d.ts +2 -0
  144. package/dist/index.js +127 -0
  145. package/dist/index.js.map +1 -0
  146. package/dist/runner-server/core.d.ts +15 -0
  147. package/dist/runner-server/core.js +180 -0
  148. package/dist/runner-server/core.js.map +1 -0
  149. package/dist/runner-server/middleware/signature-verification.d.ts +37 -0
  150. package/dist/runner-server/middleware/signature-verification.js +55 -0
  151. package/dist/runner-server/middleware/signature-verification.js.map +1 -0
  152. package/dist/runner-server/types.d.ts +67 -0
  153. package/dist/runner-server/types.js +7 -0
  154. package/dist/runner-server/types.js.map +1 -0
  155. package/dist/runner-server.d.ts +32 -0
  156. package/dist/runner-server.js +376 -0
  157. package/dist/runner-server.js.map +1 -0
  158. package/dist/server/database/index.d.ts +3 -0
  159. package/dist/server/database/index.js +97 -0
  160. package/dist/server/database/index.js.map +1 -0
  161. package/dist/server/routes/scores/index.d.ts +14 -0
  162. package/dist/server/routes/scores/index.js +60 -0
  163. package/dist/server/routes/scores/index.js.map +1 -0
  164. package/dist/server/routes/traces/index.d.ts +50 -0
  165. package/dist/server/routes/traces/index.js +614 -0
  166. package/dist/server/routes/traces/index.js.map +1 -0
  167. package/dist/tunnel.d.ts +19 -0
  168. package/dist/tunnel.js +134 -0
  169. package/dist/tunnel.js.map +1 -0
  170. package/dist/utils/prompt-detection.d.ts +8 -0
  171. package/dist/utils/prompt-detection.js +24 -0
  172. package/dist/utils/prompt-detection.js.map +1 -0
  173. package/dist/utils/providers.d.ts +38 -0
  174. package/dist/utils/providers.js +82 -0
  175. package/dist/utils/providers.js.map +1 -0
  176. package/next.config.ts +18 -0
  177. package/package.json +90 -0
  178. package/public/favicon.ico +0 -0
  179. package/public/file.svg +1 -0
  180. 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/&lt;file&gt;.prompt.mdx</div>
328
+
329
+ <h3>Run Experiments with Datasets</h3>
330
+ <div class="command">$ npm run experiment agentmark/&lt;file&gt;.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":"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"}
@@ -0,0 +1,3 @@
1
+ import { type Database as DatabaseType } from "better-sqlite3";
2
+ declare const db: DatabaseType;
3
+ export default db;
@@ -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[]>;