@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,88 @@
|
|
|
1
|
+
// This file is generated automatically by Next.js
|
|
2
|
+
// Do not edit this file manually
|
|
3
|
+
// This file validates that all pages and layouts export the correct types
|
|
4
|
+
|
|
5
|
+
import type { AppRoutes, LayoutRoutes, ParamMap } from "./routes.js"
|
|
6
|
+
import type { ResolvingMetadata, ResolvingViewport } from "next/types.js"
|
|
7
|
+
|
|
8
|
+
type AppPageConfig<Route extends AppRoutes = AppRoutes> = {
|
|
9
|
+
default: React.ComponentType<{ params: Promise<ParamMap[Route]> } & any> | ((props: { params: Promise<ParamMap[Route]> } & any) => React.ReactNode | Promise<React.ReactNode> | never | void | Promise<void>)
|
|
10
|
+
generateStaticParams?: (props: { params: ParamMap[Route] }) => Promise<any[]> | any[]
|
|
11
|
+
generateMetadata?: (
|
|
12
|
+
props: { params: Promise<ParamMap[Route]> } & any,
|
|
13
|
+
parent: ResolvingMetadata
|
|
14
|
+
) => Promise<any> | any
|
|
15
|
+
generateViewport?: (
|
|
16
|
+
props: { params: Promise<ParamMap[Route]> } & any,
|
|
17
|
+
parent: ResolvingViewport
|
|
18
|
+
) => Promise<any> | any
|
|
19
|
+
metadata?: any
|
|
20
|
+
viewport?: any
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
type LayoutConfig<Route extends LayoutRoutes = LayoutRoutes> = {
|
|
24
|
+
default: React.ComponentType<LayoutProps<Route>> | ((props: LayoutProps<Route>) => React.ReactNode | Promise<React.ReactNode> | never | void | Promise<void>)
|
|
25
|
+
generateStaticParams?: (props: { params: ParamMap[Route] }) => Promise<any[]> | any[]
|
|
26
|
+
generateMetadata?: (
|
|
27
|
+
props: { params: Promise<ParamMap[Route]> } & any,
|
|
28
|
+
parent: ResolvingMetadata
|
|
29
|
+
) => Promise<any> | any
|
|
30
|
+
generateViewport?: (
|
|
31
|
+
props: { params: Promise<ParamMap[Route]> } & any,
|
|
32
|
+
parent: ResolvingViewport
|
|
33
|
+
) => Promise<any> | any
|
|
34
|
+
metadata?: any
|
|
35
|
+
viewport?: any
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
// Validate ../../../src/app/page.tsx
|
|
40
|
+
{
|
|
41
|
+
type __IsExpected<Specific extends AppPageConfig<"/">> = Specific
|
|
42
|
+
const handler = {} as typeof import("../../../src/app/page.js")
|
|
43
|
+
type __Check = __IsExpected<typeof handler>
|
|
44
|
+
// @ts-ignore
|
|
45
|
+
type __Unused = __Check
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Validate ../../../src/app/requests/page.tsx
|
|
49
|
+
{
|
|
50
|
+
type __IsExpected<Specific extends AppPageConfig<"/requests">> = Specific
|
|
51
|
+
const handler = {} as typeof import("../../../src/app/requests/page.js")
|
|
52
|
+
type __Check = __IsExpected<typeof handler>
|
|
53
|
+
// @ts-ignore
|
|
54
|
+
type __Unused = __Check
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Validate ../../../src/app/sessions/page.tsx
|
|
58
|
+
{
|
|
59
|
+
type __IsExpected<Specific extends AppPageConfig<"/sessions">> = Specific
|
|
60
|
+
const handler = {} as typeof import("../../../src/app/sessions/page.js")
|
|
61
|
+
type __Check = __IsExpected<typeof handler>
|
|
62
|
+
// @ts-ignore
|
|
63
|
+
type __Unused = __Check
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Validate ../../../src/app/traces/page.tsx
|
|
67
|
+
{
|
|
68
|
+
type __IsExpected<Specific extends AppPageConfig<"/traces">> = Specific
|
|
69
|
+
const handler = {} as typeof import("../../../src/app/traces/page.js")
|
|
70
|
+
type __Check = __IsExpected<typeof handler>
|
|
71
|
+
// @ts-ignore
|
|
72
|
+
type __Unused = __Check
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
// Validate ../../../src/app/layout.tsx
|
|
82
|
+
{
|
|
83
|
+
type __IsExpected<Specific extends LayoutConfig<"/">> = Specific
|
|
84
|
+
const handler = {} as typeof import("../../../src/app/layout.js")
|
|
85
|
+
type __Check = __IsExpected<typeof handler>
|
|
86
|
+
// @ts-ignore
|
|
87
|
+
type __Unused = __Check
|
|
88
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function createApiServer(port: number): Promise<unknown>;
|
|
@@ -0,0 +1,545 @@
|
|
|
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.createApiServer = createApiServer;
|
|
16
|
+
const express_1 = __importDefault(require("express"));
|
|
17
|
+
const fs_1 = __importDefault(require("fs"));
|
|
18
|
+
const express_rate_limit_1 = __importDefault(require("express-rate-limit"));
|
|
19
|
+
const path_1 = __importDefault(require("path"));
|
|
20
|
+
const shared_utils_1 = require("@agentmark-ai/shared-utils");
|
|
21
|
+
const cors_1 = __importDefault(require("cors"));
|
|
22
|
+
const traces_1 = require("./server/routes/traces");
|
|
23
|
+
const scores_1 = require("./server/routes/scores");
|
|
24
|
+
function safePath() {
|
|
25
|
+
try {
|
|
26
|
+
return process.cwd();
|
|
27
|
+
}
|
|
28
|
+
catch (_a) {
|
|
29
|
+
return process.env.PWD || process.env.INIT_CWD || ".";
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function createApiServer(port) {
|
|
33
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
34
|
+
const app = (0, express_1.default)();
|
|
35
|
+
// Trust first proxy hop (for tunnels like ngrok, cloudflare, etc.)
|
|
36
|
+
app.set('trust proxy', 1);
|
|
37
|
+
app.use(express_1.default.json());
|
|
38
|
+
app.use((0, cors_1.default)());
|
|
39
|
+
const currentPath = safePath();
|
|
40
|
+
const basePath = path_1.default.join(currentPath);
|
|
41
|
+
let agentmarkTemplatesBase = path_1.default.join(basePath, "agentmark");
|
|
42
|
+
try {
|
|
43
|
+
const jsonPath = path_1.default.join(currentPath, "agentmark.json");
|
|
44
|
+
if (fs_1.default.existsSync(jsonPath)) {
|
|
45
|
+
const agentmarkJson = JSON.parse(fs_1.default.readFileSync(jsonPath, "utf-8"));
|
|
46
|
+
if (agentmarkJson === null || agentmarkJson === void 0 ? void 0 : agentmarkJson.agentmarkPath) {
|
|
47
|
+
agentmarkTemplatesBase = path_1.default.join(basePath, agentmarkJson.agentmarkPath, "agentmark");
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch (_a) {
|
|
52
|
+
// Ignore errors when reading agentmark.json
|
|
53
|
+
}
|
|
54
|
+
// Landing page for browser access
|
|
55
|
+
app.get("/", (_req, res) => __awaiter(this, void 0, void 0, function* () {
|
|
56
|
+
let promptsList = "";
|
|
57
|
+
try {
|
|
58
|
+
const promptFiles = yield (0, shared_utils_1.findPromptFiles)(agentmarkTemplatesBase);
|
|
59
|
+
if (promptFiles.length > 0) {
|
|
60
|
+
const relativePaths = promptFiles.map((file) => path_1.default.relative(agentmarkTemplatesBase, file));
|
|
61
|
+
promptsList = relativePaths
|
|
62
|
+
.map((p) => ` <li><code>${p}</code></li>`)
|
|
63
|
+
.join("\n");
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
promptsList = ' <li style="color: #64748b;">No prompts found</li>';
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch (_a) {
|
|
70
|
+
promptsList =
|
|
71
|
+
' <li style="color: #ef4444;">Error listing prompts</li>';
|
|
72
|
+
}
|
|
73
|
+
res.setHeader("Content-Type", "text/html; charset=utf-8");
|
|
74
|
+
res.send(`
|
|
75
|
+
<!DOCTYPE html>
|
|
76
|
+
<html lang="en">
|
|
77
|
+
<head>
|
|
78
|
+
<meta charset="UTF-8">
|
|
79
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
80
|
+
<title>AgentMark API Server</title>
|
|
81
|
+
<style>
|
|
82
|
+
body {
|
|
83
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
84
|
+
max-width: 900px;
|
|
85
|
+
margin: 40px auto;
|
|
86
|
+
padding: 20px;
|
|
87
|
+
line-height: 1.6;
|
|
88
|
+
color: #333;
|
|
89
|
+
}
|
|
90
|
+
h1 { color: #2563eb; margin-bottom: 10px; }
|
|
91
|
+
.subtitle { color: #64748b; margin-bottom: 30px; }
|
|
92
|
+
.status {
|
|
93
|
+
background: #dcfce7;
|
|
94
|
+
border-left: 4px solid #22c55e;
|
|
95
|
+
padding: 15px;
|
|
96
|
+
margin: 20px 0;
|
|
97
|
+
border-radius: 4px;
|
|
98
|
+
}
|
|
99
|
+
.info-box {
|
|
100
|
+
background: #f0f9ff;
|
|
101
|
+
border-left: 4px solid #2563eb;
|
|
102
|
+
padding: 15px;
|
|
103
|
+
margin: 20px 0;
|
|
104
|
+
border-radius: 4px;
|
|
105
|
+
}
|
|
106
|
+
.endpoint {
|
|
107
|
+
background: #f8fafc;
|
|
108
|
+
border: 1px solid #e2e8f0;
|
|
109
|
+
border-radius: 6px;
|
|
110
|
+
padding: 15px;
|
|
111
|
+
margin: 15px 0;
|
|
112
|
+
}
|
|
113
|
+
.endpoint-title {
|
|
114
|
+
font-weight: 600;
|
|
115
|
+
color: #1e293b;
|
|
116
|
+
margin-bottom: 8px;
|
|
117
|
+
}
|
|
118
|
+
.endpoint-method {
|
|
119
|
+
display: inline-block;
|
|
120
|
+
background: #22c55e;
|
|
121
|
+
color: white;
|
|
122
|
+
padding: 2px 8px;
|
|
123
|
+
border-radius: 3px;
|
|
124
|
+
font-size: 12px;
|
|
125
|
+
font-weight: 600;
|
|
126
|
+
margin-right: 8px;
|
|
127
|
+
}
|
|
128
|
+
.endpoint-method.post {
|
|
129
|
+
background: #3b82f6;
|
|
130
|
+
}
|
|
131
|
+
.endpoint-desc {
|
|
132
|
+
color: #64748b;
|
|
133
|
+
font-size: 14px;
|
|
134
|
+
margin-top: 8px;
|
|
135
|
+
}
|
|
136
|
+
code {
|
|
137
|
+
background: #1e293b;
|
|
138
|
+
color: #e2e8f0;
|
|
139
|
+
padding: 2px 6px;
|
|
140
|
+
border-radius: 3px;
|
|
141
|
+
font-size: 13px;
|
|
142
|
+
}
|
|
143
|
+
ul {
|
|
144
|
+
margin: 10px 0;
|
|
145
|
+
}
|
|
146
|
+
li {
|
|
147
|
+
margin: 5px 0;
|
|
148
|
+
}
|
|
149
|
+
a { color: #2563eb; text-decoration: none; }
|
|
150
|
+
a:hover { text-decoration: underline; }
|
|
151
|
+
footer {
|
|
152
|
+
margin-top: 40px;
|
|
153
|
+
padding-top: 20px;
|
|
154
|
+
border-top: 1px solid #e2e8f0;
|
|
155
|
+
color: #64748b;
|
|
156
|
+
font-size: 14px;
|
|
157
|
+
}
|
|
158
|
+
</style>
|
|
159
|
+
</head>
|
|
160
|
+
<body>
|
|
161
|
+
<h1>AgentMark API Server</h1>
|
|
162
|
+
<div class="subtitle">Local development server for serving prompts and datasets</div>
|
|
163
|
+
|
|
164
|
+
<div class="status">
|
|
165
|
+
<strong>✓ Server Status:</strong> Running on port ${port}
|
|
166
|
+
</div>
|
|
167
|
+
|
|
168
|
+
<div class="info-box">
|
|
169
|
+
<strong>📁 Templates Directory:</strong><br>
|
|
170
|
+
<code>${agentmarkTemplatesBase}</code>
|
|
171
|
+
</div>
|
|
172
|
+
|
|
173
|
+
<h2>What is this?</h2>
|
|
174
|
+
<p>
|
|
175
|
+
This is the <strong>AgentMark API Server</strong>, an internal development server that provides
|
|
176
|
+
HTTP access to your local prompt files and datasets. It's automatically started when you run
|
|
177
|
+
<code>agentmark dev</code> and enables your development runner to load templates and data.
|
|
178
|
+
</p>
|
|
179
|
+
|
|
180
|
+
<h2>Available Endpoints</h2>
|
|
181
|
+
|
|
182
|
+
<div class="endpoint">
|
|
183
|
+
<div class="endpoint-title">
|
|
184
|
+
<span class="endpoint-method">GET</span>
|
|
185
|
+
/v1/templates?path=your-prompt.prompt.mdx
|
|
186
|
+
</div>
|
|
187
|
+
<div class="endpoint-desc">
|
|
188
|
+
Fetch and parse a prompt file, returning the AST (Abstract Syntax Tree)
|
|
189
|
+
</div>
|
|
190
|
+
</div>
|
|
191
|
+
|
|
192
|
+
<div class="endpoint">
|
|
193
|
+
<div class="endpoint-title">
|
|
194
|
+
<span class="endpoint-method">GET</span>
|
|
195
|
+
/v1/templates?path=your-dataset.jsonl
|
|
196
|
+
</div>
|
|
197
|
+
<div class="endpoint-desc">
|
|
198
|
+
Fetch a dataset file in JSONL format (supports both array and streaming responses)
|
|
199
|
+
</div>
|
|
200
|
+
</div>
|
|
201
|
+
|
|
202
|
+
<div class="endpoint">
|
|
203
|
+
<div class="endpoint-title">
|
|
204
|
+
<span class="endpoint-method">GET</span>
|
|
205
|
+
/v1/prompts
|
|
206
|
+
</div>
|
|
207
|
+
<div class="endpoint-desc">
|
|
208
|
+
List all available prompt files in the templates directory
|
|
209
|
+
</div>
|
|
210
|
+
</div>
|
|
211
|
+
|
|
212
|
+
<div class="endpoint">
|
|
213
|
+
<div class="endpoint-title">
|
|
214
|
+
<span class="endpoint-method post">POST</span>
|
|
215
|
+
/v1/traces
|
|
216
|
+
</div>
|
|
217
|
+
<div class="endpoint-desc">
|
|
218
|
+
Accept OpenTelemetry traces in OTLP JSON format
|
|
219
|
+
</div>
|
|
220
|
+
</div>
|
|
221
|
+
|
|
222
|
+
<div class="endpoint">
|
|
223
|
+
<div class="endpoint-title">
|
|
224
|
+
<span class="endpoint-method">GET</span>
|
|
225
|
+
/v1/traces
|
|
226
|
+
</div>
|
|
227
|
+
<div class="endpoint-desc">
|
|
228
|
+
Get list of all traces with aggregated metadata (name, status, latency, cost, tokens, start, end)
|
|
229
|
+
</div>
|
|
230
|
+
</div>
|
|
231
|
+
|
|
232
|
+
<div class="endpoint">
|
|
233
|
+
<div class="endpoint-title">
|
|
234
|
+
<span class="endpoint-method">GET</span>
|
|
235
|
+
/v1/traces/:traceId
|
|
236
|
+
</div>
|
|
237
|
+
<div class="endpoint-desc">
|
|
238
|
+
Get a single trace with all its spans in TraceData format
|
|
239
|
+
</div>
|
|
240
|
+
</div>
|
|
241
|
+
|
|
242
|
+
<div class="endpoint">
|
|
243
|
+
<div class="endpoint-title">
|
|
244
|
+
<span class="endpoint-method">GET</span>
|
|
245
|
+
/v1/traces/:traceId/graph
|
|
246
|
+
</div>
|
|
247
|
+
<div class="endpoint-desc">
|
|
248
|
+
Get graph data for a trace (nodes and edges for visualization)
|
|
249
|
+
</div>
|
|
250
|
+
</div>
|
|
251
|
+
|
|
252
|
+
<div class="endpoint">
|
|
253
|
+
<div class="endpoint-title">
|
|
254
|
+
<span class="endpoint-method post">POST</span>
|
|
255
|
+
/v1/score
|
|
256
|
+
</div>
|
|
257
|
+
<div class="endpoint-desc">
|
|
258
|
+
Create a new evaluation score for a span or trace
|
|
259
|
+
</div>
|
|
260
|
+
</div>
|
|
261
|
+
|
|
262
|
+
<div class="endpoint">
|
|
263
|
+
<div class="endpoint-title">
|
|
264
|
+
<span class="endpoint-method">GET</span>
|
|
265
|
+
/v1/score?resourceId=xxx
|
|
266
|
+
</div>
|
|
267
|
+
<div class="endpoint-desc">
|
|
268
|
+
Get all evaluation scores for a specific span or trace resource
|
|
269
|
+
</div>
|
|
270
|
+
</div>
|
|
271
|
+
|
|
272
|
+
<h2>Your Prompts</h2>
|
|
273
|
+
<ul>
|
|
274
|
+
${promptsList}
|
|
275
|
+
</ul>
|
|
276
|
+
|
|
277
|
+
<h2>Usage</h2>
|
|
278
|
+
<p>
|
|
279
|
+
This server is accessed automatically by your development runner. You don't need to make
|
|
280
|
+
HTTP requests directly. Just run your prompts using CLI commands:
|
|
281
|
+
</p>
|
|
282
|
+
<p>
|
|
283
|
+
<code>agentmark run-prompt <file></code> or <code>agentmark run-experiment <file></code>
|
|
284
|
+
</p>
|
|
285
|
+
|
|
286
|
+
<footer>
|
|
287
|
+
<div><strong>AgentMark Development Server</strong></div>
|
|
288
|
+
<div>Learn more: <a href="https://docs.agentmark.co" target="_blank">docs.agentmark.co</a></div>
|
|
289
|
+
</footer>
|
|
290
|
+
</body>
|
|
291
|
+
</html>
|
|
292
|
+
`.trim());
|
|
293
|
+
}));
|
|
294
|
+
// Rate limiter: 100 requests per 15 minutes per IP for file system endpoint
|
|
295
|
+
const templatesRateLimiter = (0, express_rate_limit_1.default)({
|
|
296
|
+
windowMs: 15 * 60 * 1000,
|
|
297
|
+
max: 100,
|
|
298
|
+
standardHeaders: true,
|
|
299
|
+
legacyHeaders: false,
|
|
300
|
+
message: { error: "Too many requests. Please try again later." },
|
|
301
|
+
});
|
|
302
|
+
app.get("/v1/templates", templatesRateLimiter, (req, res) => __awaiter(this, void 0, void 0, function* () {
|
|
303
|
+
const filePath = req.query.path;
|
|
304
|
+
if (!filePath || typeof filePath !== "string") {
|
|
305
|
+
return res
|
|
306
|
+
.status(400)
|
|
307
|
+
.json({ error: "Path query parameter must be a single string value" });
|
|
308
|
+
}
|
|
309
|
+
// Reject absolute paths
|
|
310
|
+
if (path_1.default.isAbsolute(filePath)) {
|
|
311
|
+
return res.status(400).json({ error: "Absolute paths are not allowed" });
|
|
312
|
+
}
|
|
313
|
+
// Normalize the path and remove leading ./
|
|
314
|
+
const normalizedPath = path_1.default.normalize(filePath.startsWith("./") ? filePath.slice(2) : filePath);
|
|
315
|
+
// Prevent path traversal with .. sequences
|
|
316
|
+
if (normalizedPath.includes("..") || normalizedPath.startsWith("/")) {
|
|
317
|
+
return res
|
|
318
|
+
.status(400)
|
|
319
|
+
.json({ error: "Invalid path: path traversal detected" });
|
|
320
|
+
}
|
|
321
|
+
// Join with base path
|
|
322
|
+
let fullPath = path_1.default.join(agentmarkTemplatesBase, normalizedPath);
|
|
323
|
+
// Verify the resolved path is still within the base directory
|
|
324
|
+
const resolvedPath = path_1.default.resolve(fullPath);
|
|
325
|
+
const resolvedBase = path_1.default.resolve(agentmarkTemplatesBase);
|
|
326
|
+
if (!resolvedPath.startsWith(resolvedBase + path_1.default.sep) &&
|
|
327
|
+
resolvedPath !== resolvedBase) {
|
|
328
|
+
return res
|
|
329
|
+
.status(403)
|
|
330
|
+
.json({ error: "Access denied: path outside allowed directory" });
|
|
331
|
+
}
|
|
332
|
+
// Try alternative path for .jsonl files in templates directory
|
|
333
|
+
if (!fs_1.default.existsSync(fullPath) && filePath.endsWith(".jsonl")) {
|
|
334
|
+
const altPath = path_1.default.join(agentmarkTemplatesBase, "templates", path_1.default.basename(filePath));
|
|
335
|
+
const resolvedAltPath = path_1.default.resolve(altPath);
|
|
336
|
+
if (resolvedAltPath.startsWith(resolvedBase + path_1.default.sep) &&
|
|
337
|
+
fs_1.default.existsSync(altPath)) {
|
|
338
|
+
fullPath = altPath;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
try {
|
|
342
|
+
if (fullPath.endsWith(".jsonl")) {
|
|
343
|
+
// Dataset: default to JSON array unless client explicitly requests NDJSON
|
|
344
|
+
if (!fs_1.default.existsSync(fullPath))
|
|
345
|
+
return res.status(404).json({ error: "Dataset not found" });
|
|
346
|
+
const accept = (req.get("accept") || "").toLowerCase();
|
|
347
|
+
const explicitlyNdjson = accept.includes("application/x-ndjson");
|
|
348
|
+
const wantsJsonArray = req.query.format === "json" || !explicitlyNdjson;
|
|
349
|
+
if (wantsJsonArray) {
|
|
350
|
+
try {
|
|
351
|
+
const lines = fs_1.default
|
|
352
|
+
.readFileSync(fullPath, "utf-8")
|
|
353
|
+
.split(/\r?\n/)
|
|
354
|
+
.filter(Boolean);
|
|
355
|
+
const arr = lines.map((l) => JSON.parse(l));
|
|
356
|
+
return res.json(arr);
|
|
357
|
+
}
|
|
358
|
+
catch (_e) {
|
|
359
|
+
return res.status(500).json({ error: "Failed to read dataset" });
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
res.setHeader("Content-Type", "application/x-ndjson; charset=utf-8");
|
|
363
|
+
return fs_1.default.createReadStream(fullPath).pipe(res);
|
|
364
|
+
}
|
|
365
|
+
// Prompt: parse and return AST (no datasetUrl coupling)
|
|
366
|
+
const { parse } = yield import("@agentmark-ai/templatedx");
|
|
367
|
+
const fileContent = fs_1.default.readFileSync(fullPath, "utf-8");
|
|
368
|
+
const data = yield parse(fileContent, path_1.default.dirname(fullPath), (p) => __awaiter(this, void 0, void 0, function* () {
|
|
369
|
+
const resolved = path_1.default.isAbsolute(p)
|
|
370
|
+
? p
|
|
371
|
+
: path_1.default.join(path_1.default.dirname(fullPath), p);
|
|
372
|
+
// Validate that the resolved path is within the base directory
|
|
373
|
+
const resolvedImportPath = path_1.default.resolve(resolved);
|
|
374
|
+
const resolvedBase = path_1.default.resolve(agentmarkTemplatesBase);
|
|
375
|
+
if (!resolvedImportPath.startsWith(resolvedBase + path_1.default.sep) &&
|
|
376
|
+
resolvedImportPath !== resolvedBase) {
|
|
377
|
+
throw new Error("Access denied: import path outside allowed directory");
|
|
378
|
+
}
|
|
379
|
+
return fs_1.default.readFileSync(resolvedImportPath, "utf-8");
|
|
380
|
+
}));
|
|
381
|
+
return res.json({ data });
|
|
382
|
+
}
|
|
383
|
+
catch (_error) {
|
|
384
|
+
return res.status(404).json({ error: "File not found or invalid" });
|
|
385
|
+
}
|
|
386
|
+
}));
|
|
387
|
+
app.post("/v1/traces", (req, res) => __awaiter(this, void 0, void 0, function* () {
|
|
388
|
+
try {
|
|
389
|
+
// Parse OTLP ExportTraceServiceRequest
|
|
390
|
+
const body = req.body;
|
|
391
|
+
if (!body || !body.resourceSpans || !Array.isArray(body.resourceSpans)) {
|
|
392
|
+
return res.status(400).json({
|
|
393
|
+
error: "Invalid OTLP payload: expected ExportTraceServiceRequest with resourceSpans array"
|
|
394
|
+
});
|
|
395
|
+
}
|
|
396
|
+
// Normalize OTLP spans using shared normalizer
|
|
397
|
+
const normalizedSpans = (0, shared_utils_1.normalizeOtlpSpans)(body.resourceSpans);
|
|
398
|
+
// Write normalized spans to SQLite
|
|
399
|
+
yield (0, traces_1.exportTraces)(normalizedSpans);
|
|
400
|
+
return res.json({ success: true });
|
|
401
|
+
}
|
|
402
|
+
catch (error) {
|
|
403
|
+
console.error("Error processing traces:", error);
|
|
404
|
+
return res.status(500).json({ error: error.message || "Failed to export traces" });
|
|
405
|
+
}
|
|
406
|
+
}));
|
|
407
|
+
app.get("/v1/requests", (_req, res) => __awaiter(this, void 0, void 0, function* () {
|
|
408
|
+
try {
|
|
409
|
+
const requests = yield (0, traces_1.getRequests)();
|
|
410
|
+
return res.json({ requests });
|
|
411
|
+
}
|
|
412
|
+
catch (error) {
|
|
413
|
+
console.error("Error getting requests:", error);
|
|
414
|
+
return res.status(500).json({ error: "Failed to get requests" });
|
|
415
|
+
}
|
|
416
|
+
}));
|
|
417
|
+
app.get("/v1/prompts", (_req, res) => __awaiter(this, void 0, void 0, function* () {
|
|
418
|
+
try {
|
|
419
|
+
const promptFiles = yield (0, shared_utils_1.findPromptFiles)(agentmarkTemplatesBase);
|
|
420
|
+
const paths = promptFiles.map((file) => path_1.default.relative(agentmarkTemplatesBase, file));
|
|
421
|
+
res.json({ paths });
|
|
422
|
+
}
|
|
423
|
+
catch (_error) {
|
|
424
|
+
res.status(500).json({ error: "Failed to list prompts" });
|
|
425
|
+
}
|
|
426
|
+
}));
|
|
427
|
+
app.get("/v1/traces", (_req, res) => __awaiter(this, void 0, void 0, function* () {
|
|
428
|
+
try {
|
|
429
|
+
const traces = yield (0, traces_1.getTraces)();
|
|
430
|
+
return res.json({ traces });
|
|
431
|
+
}
|
|
432
|
+
catch (error) {
|
|
433
|
+
console.error("Error getting traces:", error);
|
|
434
|
+
return res.status(500).json({ error: "Failed to get traces" });
|
|
435
|
+
}
|
|
436
|
+
}));
|
|
437
|
+
app.get("/v1/traces/:traceId", (req, res) => __awaiter(this, void 0, void 0, function* () {
|
|
438
|
+
try {
|
|
439
|
+
const { traceId } = req.params;
|
|
440
|
+
if (!traceId) {
|
|
441
|
+
return res.status(400).json({ error: "traceId parameter is required" });
|
|
442
|
+
}
|
|
443
|
+
const trace = yield (0, traces_1.getTraceById)(traceId);
|
|
444
|
+
if (!trace) {
|
|
445
|
+
return res.status(404).json({ error: "Trace not found" });
|
|
446
|
+
}
|
|
447
|
+
return res.json({ trace });
|
|
448
|
+
}
|
|
449
|
+
catch (error) {
|
|
450
|
+
console.error("Error getting trace:", error);
|
|
451
|
+
return res.status(500).json({ error: "Failed to get trace" });
|
|
452
|
+
}
|
|
453
|
+
}));
|
|
454
|
+
app.get("/v1/traces/:traceId/graph", (req, res) => __awaiter(this, void 0, void 0, function* () {
|
|
455
|
+
try {
|
|
456
|
+
const { traceId } = req.params;
|
|
457
|
+
if (!traceId) {
|
|
458
|
+
return res.status(400).json({ error: "traceId parameter is required" });
|
|
459
|
+
}
|
|
460
|
+
const graphData = yield (0, traces_1.getTraceGraph)(traceId);
|
|
461
|
+
return res.json({ graphData });
|
|
462
|
+
}
|
|
463
|
+
catch (error) {
|
|
464
|
+
console.error("Error getting trace graph:", error);
|
|
465
|
+
return res.status(500).json({ error: "Failed to get trace graph" });
|
|
466
|
+
}
|
|
467
|
+
}));
|
|
468
|
+
app.post("/v1/score", (req, res) => __awaiter(this, void 0, void 0, function* () {
|
|
469
|
+
try {
|
|
470
|
+
const body = req.body;
|
|
471
|
+
if (!body.resourceId) {
|
|
472
|
+
return res.status(400).json({ error: "resourceId is required" });
|
|
473
|
+
}
|
|
474
|
+
const result = yield (0, scores_1.createScore)(body);
|
|
475
|
+
return res.json(result);
|
|
476
|
+
}
|
|
477
|
+
catch (error) {
|
|
478
|
+
console.error("Error creating score:", error);
|
|
479
|
+
return res
|
|
480
|
+
.status(500)
|
|
481
|
+
.json({ error: error.message || "Failed to create score" });
|
|
482
|
+
}
|
|
483
|
+
}));
|
|
484
|
+
app.get("/v1/score", (req, res) => __awaiter(this, void 0, void 0, function* () {
|
|
485
|
+
try {
|
|
486
|
+
const resourceId = req.query.resourceId;
|
|
487
|
+
if (!resourceId) {
|
|
488
|
+
return res
|
|
489
|
+
.status(400)
|
|
490
|
+
.json({ error: "resourceId query parameter is required" });
|
|
491
|
+
}
|
|
492
|
+
const scores = yield (0, scores_1.getScoresByResourceId)(resourceId);
|
|
493
|
+
return res.json({ scores });
|
|
494
|
+
}
|
|
495
|
+
catch (error) {
|
|
496
|
+
console.error("Error getting scores:", error);
|
|
497
|
+
return res.status(500).json({ error: "Failed to get scores" });
|
|
498
|
+
}
|
|
499
|
+
}));
|
|
500
|
+
app.get("/v1/sessions", (_req, res) => __awaiter(this, void 0, void 0, function* () {
|
|
501
|
+
try {
|
|
502
|
+
const sessions = yield (0, traces_1.getSessions)();
|
|
503
|
+
return res.json({ sessions });
|
|
504
|
+
}
|
|
505
|
+
catch (error) {
|
|
506
|
+
console.error("Error getting sessions:", error);
|
|
507
|
+
return res.status(500).json({ error: "Failed to get sessions" });
|
|
508
|
+
}
|
|
509
|
+
}));
|
|
510
|
+
app.get("/v1/sessions/:sessionId/traces", (req, res) => __awaiter(this, void 0, void 0, function* () {
|
|
511
|
+
try {
|
|
512
|
+
const { sessionId } = req.params;
|
|
513
|
+
if (!sessionId) {
|
|
514
|
+
return res.status(400).json({ error: "sessionId parameter is required" });
|
|
515
|
+
}
|
|
516
|
+
const traces = yield (0, traces_1.getTracesBySessionId)(sessionId);
|
|
517
|
+
return res.json({ traces });
|
|
518
|
+
}
|
|
519
|
+
catch (error) {
|
|
520
|
+
console.error("Error getting traces for session:", error);
|
|
521
|
+
return res.status(500).json({ error: "Failed to get traces for session" });
|
|
522
|
+
}
|
|
523
|
+
}));
|
|
524
|
+
app.get("/v1/runs/:runId/traces", (req, res) => __awaiter(this, void 0, void 0, function* () {
|
|
525
|
+
try {
|
|
526
|
+
const { runId } = req.params;
|
|
527
|
+
if (!runId) {
|
|
528
|
+
return res.status(400).json({ error: "runId parameter is required" });
|
|
529
|
+
}
|
|
530
|
+
const traces = yield (0, traces_1.getTracesByRunId)(runId);
|
|
531
|
+
return res.json({ traces });
|
|
532
|
+
}
|
|
533
|
+
catch (error) {
|
|
534
|
+
console.error("Error getting traces for run:", error);
|
|
535
|
+
return res.status(500).json({ error: "Failed to get traces for run" });
|
|
536
|
+
}
|
|
537
|
+
}));
|
|
538
|
+
return new Promise((resolve) => {
|
|
539
|
+
const server = app.listen(port, () => {
|
|
540
|
+
resolve(server);
|
|
541
|
+
});
|
|
542
|
+
});
|
|
543
|
+
});
|
|
544
|
+
}
|
|
545
|
+
//# sourceMappingURL=api-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-server.js","sourceRoot":"","sources":["../cli-src/api-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
interface BuildOptions {
|
|
2
|
+
outDir?: string;
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* Build command - compiles all .prompt.mdx files to pre-built AST JSON files.
|
|
6
|
+
* Also copies dataset files (.jsonl) to the output directory.
|
|
7
|
+
*/
|
|
8
|
+
declare const build: (options?: BuildOptions) => Promise<void>;
|
|
9
|
+
export default build;
|