@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,206 @@
|
|
|
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
|
+
const path_1 = __importDefault(require("path"));
|
|
16
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
17
|
+
/**
|
|
18
|
+
* Reads the agentmark.json config file from the current directory.
|
|
19
|
+
*/
|
|
20
|
+
function getAgentmarkConfig() {
|
|
21
|
+
const configPath = path_1.default.join(process.cwd(), "agentmark.json");
|
|
22
|
+
if (!fs_extra_1.default.existsSync(configPath)) {
|
|
23
|
+
throw new Error("agentmark.json not found in current directory. Run this command from your AgentMark project root.");
|
|
24
|
+
}
|
|
25
|
+
return fs_extra_1.default.readJsonSync(configPath);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Determines the prompt kind based on frontmatter content.
|
|
29
|
+
*/
|
|
30
|
+
function determinePromptKind(frontmatter) {
|
|
31
|
+
if (frontmatter.text_config)
|
|
32
|
+
return 'text';
|
|
33
|
+
if (frontmatter.object_config)
|
|
34
|
+
return 'object';
|
|
35
|
+
if (frontmatter.image_config)
|
|
36
|
+
return 'image';
|
|
37
|
+
if (frontmatter.speech_config)
|
|
38
|
+
return 'speech';
|
|
39
|
+
throw new Error('Could not determine prompt kind from frontmatter');
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Detect prompt type from raw file content by scanning frontmatter.
|
|
43
|
+
* This allows us to choose the correct parser before full parsing.
|
|
44
|
+
*/
|
|
45
|
+
function detectPromptTypeFromContent(content) {
|
|
46
|
+
// Simple detection by looking for config keys in frontmatter
|
|
47
|
+
const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
|
|
48
|
+
if (!frontmatterMatch) {
|
|
49
|
+
return 'language'; // Default to language if no frontmatter
|
|
50
|
+
}
|
|
51
|
+
const frontmatter = frontmatterMatch[1];
|
|
52
|
+
if (frontmatter.includes('image_config:'))
|
|
53
|
+
return 'image';
|
|
54
|
+
if (frontmatter.includes('speech_config:'))
|
|
55
|
+
return 'speech';
|
|
56
|
+
return 'language'; // text_config and object_config use language parser
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Recursively find all files matching a pattern in a directory.
|
|
60
|
+
*/
|
|
61
|
+
function findFiles(dir, pattern) {
|
|
62
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
63
|
+
const results = [];
|
|
64
|
+
function walk(currentDir) {
|
|
65
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
66
|
+
const entries = yield fs_extra_1.default.readdir(currentDir, { withFileTypes: true });
|
|
67
|
+
for (const entry of entries) {
|
|
68
|
+
const fullPath = path_1.default.join(currentDir, entry.name);
|
|
69
|
+
if (entry.isDirectory()) {
|
|
70
|
+
yield walk(fullPath);
|
|
71
|
+
}
|
|
72
|
+
else if (entry.isFile() && pattern.test(entry.name)) {
|
|
73
|
+
results.push(fullPath);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
yield walk(dir);
|
|
79
|
+
return results;
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Build command - compiles all .prompt.mdx files to pre-built AST JSON files.
|
|
84
|
+
* Also copies dataset files (.jsonl) to the output directory.
|
|
85
|
+
*/
|
|
86
|
+
const build = (...args_1) => __awaiter(void 0, [...args_1], void 0, function* (options = {}) {
|
|
87
|
+
const cwd = process.cwd();
|
|
88
|
+
const config = getAgentmarkConfig();
|
|
89
|
+
// Determine source directory from agentmark.json
|
|
90
|
+
const agentmarkPath = config.agentmarkPath || ".";
|
|
91
|
+
const sourceDir = path_1.default.resolve(cwd, agentmarkPath, "agentmark");
|
|
92
|
+
if (!fs_extra_1.default.existsSync(sourceDir)) {
|
|
93
|
+
throw new Error(`AgentMark directory not found: ${sourceDir}. Check your agentmark.json configuration.`);
|
|
94
|
+
}
|
|
95
|
+
// Determine output directory
|
|
96
|
+
const outDir = path_1.default.resolve(cwd, options.outDir || "dist/agentmark");
|
|
97
|
+
console.log("Building AgentMark prompts...");
|
|
98
|
+
console.log(` Source: ${sourceDir}`);
|
|
99
|
+
console.log(` Output: ${outDir}`);
|
|
100
|
+
// Ensure output directory exists
|
|
101
|
+
yield fs_extra_1.default.ensureDir(outDir);
|
|
102
|
+
// Import templatedx for parsing
|
|
103
|
+
const { getTemplateDXInstance } = yield import("@agentmark-ai/prompt-core");
|
|
104
|
+
const { compressAst } = yield import("@agentmark-ai/templatedx");
|
|
105
|
+
// Find all prompt files
|
|
106
|
+
const promptFilesAbsolute = yield findFiles(sourceDir, /\.prompt\.mdx$/);
|
|
107
|
+
const promptFiles = promptFilesAbsolute.map((f) => path_1.default.relative(sourceDir, f));
|
|
108
|
+
// Find all dataset files
|
|
109
|
+
const datasetFilesAbsolute = yield findFiles(sourceDir, /\.jsonl$/);
|
|
110
|
+
const datasetFiles = datasetFilesAbsolute.map((f) => path_1.default.relative(sourceDir, f));
|
|
111
|
+
console.log(`\nFound ${promptFiles.length} prompt(s) and ${datasetFiles.length} dataset(s)`);
|
|
112
|
+
// Track build results
|
|
113
|
+
const results = {
|
|
114
|
+
prompts: [],
|
|
115
|
+
datasets: [],
|
|
116
|
+
errors: [],
|
|
117
|
+
};
|
|
118
|
+
// Build each prompt file
|
|
119
|
+
for (const promptFile of promptFiles) {
|
|
120
|
+
const sourcePath = path_1.default.join(sourceDir, promptFile);
|
|
121
|
+
const relativePath = promptFile;
|
|
122
|
+
try {
|
|
123
|
+
// Read the file content
|
|
124
|
+
const content = yield fs_extra_1.default.readFile(sourcePath, "utf-8");
|
|
125
|
+
// Create a content loader for resolving imports
|
|
126
|
+
const contentLoader = (filePath) => __awaiter(void 0, void 0, void 0, function* () {
|
|
127
|
+
const resolvedPath = path_1.default.resolve(path_1.default.dirname(sourcePath), filePath);
|
|
128
|
+
// Ensure the resolved path is within the source directory
|
|
129
|
+
if (!resolvedPath.startsWith(sourceDir)) {
|
|
130
|
+
throw new Error(`Access denied: path outside source directory: ${filePath}`);
|
|
131
|
+
}
|
|
132
|
+
return fs_extra_1.default.readFile(resolvedPath, "utf-8");
|
|
133
|
+
});
|
|
134
|
+
// Detect prompt type from content to choose the right parser
|
|
135
|
+
const parserType = detectPromptTypeFromContent(content);
|
|
136
|
+
const templateDX = getTemplateDXInstance(parserType);
|
|
137
|
+
const ast = yield templateDX.parse(content, sourceDir, contentLoader);
|
|
138
|
+
// Extract frontmatter to determine prompt kind and get metadata
|
|
139
|
+
const frontmatter = templateDX.getFrontMatter(ast);
|
|
140
|
+
const promptKind = determinePromptKind(frontmatter);
|
|
141
|
+
// Compress AST to reduce file size (modifies in place)
|
|
142
|
+
compressAst(ast);
|
|
143
|
+
// Build output structure
|
|
144
|
+
const output = {
|
|
145
|
+
ast,
|
|
146
|
+
metadata: {
|
|
147
|
+
path: relativePath,
|
|
148
|
+
kind: promptKind,
|
|
149
|
+
name: frontmatter.name || path_1.default.basename(promptFile, ".prompt.mdx"),
|
|
150
|
+
builtAt: new Date().toISOString(),
|
|
151
|
+
},
|
|
152
|
+
};
|
|
153
|
+
// Write the built prompt
|
|
154
|
+
// Output path mirrors source structure: foo/bar.prompt.mdx -> foo/bar.prompt.json
|
|
155
|
+
const outputPath = path_1.default.join(outDir, relativePath.replace(/\.mdx$/, ".json"));
|
|
156
|
+
yield fs_extra_1.default.ensureDir(path_1.default.dirname(outputPath));
|
|
157
|
+
yield fs_extra_1.default.writeJson(outputPath, output, { spaces: 2 });
|
|
158
|
+
results.prompts.push(relativePath);
|
|
159
|
+
console.log(` ā ${relativePath}`);
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
results.errors.push(`${relativePath}: ${error.message}`);
|
|
163
|
+
console.error(` ā ${relativePath}: ${error.message}`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// Copy dataset files
|
|
167
|
+
for (const datasetFile of datasetFiles) {
|
|
168
|
+
const sourcePath = path_1.default.join(sourceDir, datasetFile);
|
|
169
|
+
const outputPath = path_1.default.join(outDir, datasetFile);
|
|
170
|
+
try {
|
|
171
|
+
yield fs_extra_1.default.ensureDir(path_1.default.dirname(outputPath));
|
|
172
|
+
yield fs_extra_1.default.copy(sourcePath, outputPath);
|
|
173
|
+
results.datasets.push(datasetFile);
|
|
174
|
+
console.log(` ā ${datasetFile} (dataset)`);
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
results.errors.push(`${datasetFile}: ${error.message}`);
|
|
178
|
+
console.error(` ā ${datasetFile}: ${error.message}`);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
// Write manifest
|
|
182
|
+
const manifest = {
|
|
183
|
+
version: "1.0",
|
|
184
|
+
builtAt: new Date().toISOString(),
|
|
185
|
+
prompts: results.prompts.map((p) => ({
|
|
186
|
+
path: p,
|
|
187
|
+
outputPath: p.replace(/\.mdx$/, ".json"),
|
|
188
|
+
})),
|
|
189
|
+
datasets: results.datasets,
|
|
190
|
+
};
|
|
191
|
+
yield fs_extra_1.default.writeJson(path_1.default.join(outDir, "manifest.json"), manifest, { spaces: 2 });
|
|
192
|
+
// Summary
|
|
193
|
+
console.log("\n" + "ā".repeat(50));
|
|
194
|
+
console.log("Build complete!");
|
|
195
|
+
console.log(` Prompts: ${results.prompts.length} built`);
|
|
196
|
+
console.log(` Datasets: ${results.datasets.length} copied`);
|
|
197
|
+
if (results.errors.length > 0) {
|
|
198
|
+
console.log(` Errors: ${results.errors.length}`);
|
|
199
|
+
}
|
|
200
|
+
console.log(` Output: ${outDir}`);
|
|
201
|
+
if (results.errors.length > 0) {
|
|
202
|
+
process.exit(1);
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
exports.default = build;
|
|
206
|
+
//# sourceMappingURL=build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../cli-src/commands/build.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,406 @@
|
|
|
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
|
+
const child_process_1 = require("child_process");
|
|
16
|
+
const path_1 = __importDefault(require("path"));
|
|
17
|
+
const fs_1 = __importDefault(require("fs"));
|
|
18
|
+
const net_1 = __importDefault(require("net"));
|
|
19
|
+
const api_server_1 = require("../api-server");
|
|
20
|
+
const tunnel_1 = require("../tunnel");
|
|
21
|
+
const config_1 = require("../config");
|
|
22
|
+
function getSafeCwd() {
|
|
23
|
+
try {
|
|
24
|
+
return process.cwd();
|
|
25
|
+
}
|
|
26
|
+
catch (_a) {
|
|
27
|
+
return process.env.PWD || process.env.INIT_CWD || '.';
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function detectProjectLanguage(cwd) {
|
|
31
|
+
// Check for Python project indicators
|
|
32
|
+
const pyprojectPath = path_1.default.join(cwd, 'pyproject.toml');
|
|
33
|
+
const agentmarkClientPy = path_1.default.join(cwd, 'agentmark_client.py');
|
|
34
|
+
const pythonDevServer = path_1.default.join(cwd, '.agentmark', 'dev_server.py');
|
|
35
|
+
if (fs_1.default.existsSync(pyprojectPath) || fs_1.default.existsSync(agentmarkClientPy) || fs_1.default.existsSync(pythonDevServer)) {
|
|
36
|
+
return "python";
|
|
37
|
+
}
|
|
38
|
+
// Default to TypeScript
|
|
39
|
+
return "typescript";
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Find Python executable, preferring virtual environment if present.
|
|
43
|
+
* Checks .venv and venv directories in the project root.
|
|
44
|
+
*/
|
|
45
|
+
function findPythonExecutable(cwd) {
|
|
46
|
+
const isWindows = process.platform === 'win32';
|
|
47
|
+
const binDir = isWindows ? 'Scripts' : 'bin';
|
|
48
|
+
const pythonName = isWindows ? 'python.exe' : 'python';
|
|
49
|
+
// Check common virtual environment directories
|
|
50
|
+
const venvDirs = ['.venv', 'venv'];
|
|
51
|
+
for (const venvDir of venvDirs) {
|
|
52
|
+
const venvPython = path_1.default.join(cwd, venvDir, binDir, pythonName);
|
|
53
|
+
if (fs_1.default.existsSync(venvPython)) {
|
|
54
|
+
console.log(`Using virtual environment: ${venvDir}/`);
|
|
55
|
+
return venvPython;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// Fallback to system Python
|
|
59
|
+
return isWindows ? 'python' : 'python3';
|
|
60
|
+
}
|
|
61
|
+
function isPortFree(port) {
|
|
62
|
+
return new Promise((resolve) => {
|
|
63
|
+
const tester = net_1.default.createServer()
|
|
64
|
+
.once('error', () => resolve(false))
|
|
65
|
+
.once('listening', () => tester.close(() => resolve(true)))
|
|
66
|
+
.listen(port);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
function getConfigDaysRemaining(config) {
|
|
70
|
+
if (!config.createdAt)
|
|
71
|
+
return 30;
|
|
72
|
+
const createdDate = new Date(config.createdAt);
|
|
73
|
+
const daysSinceCreation = (Date.now() - createdDate.getTime()) / (1000 * 60 * 60 * 24);
|
|
74
|
+
return Math.ceil(30 - daysSinceCreation);
|
|
75
|
+
}
|
|
76
|
+
const dev = (...args_1) => __awaiter(void 0, [...args_1], void 0, function* (options = {}) {
|
|
77
|
+
const apiPort = options.apiPort || 9418;
|
|
78
|
+
const webhookPort = options.webhookPort || 9417;
|
|
79
|
+
const appPort = options.appPort || 3000;
|
|
80
|
+
const useTunnel = options.tunnel || false;
|
|
81
|
+
const cwd = getSafeCwd();
|
|
82
|
+
// Load or create local config with webhook secret
|
|
83
|
+
const config = (0, config_1.loadLocalConfig)();
|
|
84
|
+
// Set webhook secret from local config if not already set
|
|
85
|
+
// This is the source of truth for local development
|
|
86
|
+
if (!process.env.AGENTMARK_WEBHOOK_SECRET && config.webhookSecret) {
|
|
87
|
+
process.env.AGENTMARK_WEBHOOK_SECRET = config.webhookSecret;
|
|
88
|
+
}
|
|
89
|
+
// For local-only mode, skip signature verification for convenience
|
|
90
|
+
if (!useTunnel) {
|
|
91
|
+
process.env.AGENTMARK_WEBHOOK_SECRET = '';
|
|
92
|
+
}
|
|
93
|
+
// Detect project language
|
|
94
|
+
const projectLanguage = detectProjectLanguage(cwd);
|
|
95
|
+
console.log(`Detected ${projectLanguage} project`);
|
|
96
|
+
// Check for appropriate client config file based on language
|
|
97
|
+
if (projectLanguage === "python") {
|
|
98
|
+
const pythonConfigPath = path_1.default.join(cwd, 'agentmark_client.py');
|
|
99
|
+
if (!fs_1.default.existsSync(pythonConfigPath)) {
|
|
100
|
+
console.error('Error: agentmark_client.py not found in current directory');
|
|
101
|
+
console.error('Run this command from your AgentMark Python project root');
|
|
102
|
+
process.exit(1);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
const configPath = path_1.default.join(cwd, 'agentmark.client.ts');
|
|
107
|
+
if (!fs_1.default.existsSync(configPath)) {
|
|
108
|
+
console.error('Error: agentmark.client.ts not found in current directory');
|
|
109
|
+
console.error('Run this command from your AgentMark project root');
|
|
110
|
+
process.exit(1);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// Determine which dev server entry point to use based on language
|
|
114
|
+
let devServerFile;
|
|
115
|
+
if (projectLanguage === "python") {
|
|
116
|
+
const customPythonDevServer = path_1.default.join(cwd, 'dev_server.py');
|
|
117
|
+
const autoGeneratedPythonEntry = path_1.default.join(cwd, '.agentmark', 'dev_server.py');
|
|
118
|
+
if (fs_1.default.existsSync(customPythonDevServer)) {
|
|
119
|
+
console.log('Using custom dev_server.py');
|
|
120
|
+
devServerFile = customPythonDevServer;
|
|
121
|
+
}
|
|
122
|
+
else if (fs_1.default.existsSync(autoGeneratedPythonEntry)) {
|
|
123
|
+
devServerFile = autoGeneratedPythonEntry;
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
console.error('Error: No Python dev server entry point found.');
|
|
127
|
+
console.error('Expected .agentmark/dev_server.py to be created during initialization.');
|
|
128
|
+
console.error('Please run "npx create-agentmark --python" to set up a new project.');
|
|
129
|
+
process.exit(1);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
const customDevServer = path_1.default.join(cwd, 'dev-server.ts');
|
|
134
|
+
const autoGeneratedEntry = path_1.default.join(cwd, '.agentmark', 'dev-entry.ts');
|
|
135
|
+
if (fs_1.default.existsSync(customDevServer)) {
|
|
136
|
+
console.log('Using custom dev-server.ts');
|
|
137
|
+
devServerFile = customDevServer;
|
|
138
|
+
}
|
|
139
|
+
else if (fs_1.default.existsSync(autoGeneratedEntry)) {
|
|
140
|
+
devServerFile = autoGeneratedEntry;
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
console.error('Error: No dev server entry point found.');
|
|
144
|
+
console.error('Expected .agentmark/dev-entry.ts to be created during initialization.');
|
|
145
|
+
console.error('Please run "npx create-agentmark" to set up a new project.');
|
|
146
|
+
process.exit(1);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
// Start API server directly
|
|
150
|
+
let apiServerInstance;
|
|
151
|
+
try {
|
|
152
|
+
console.log(`Starting...`);
|
|
153
|
+
apiServerInstance = yield (0, api_server_1.createApiServer)(apiPort);
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
console.error('Failed to start API server:', error.message);
|
|
157
|
+
console.error(error.stack);
|
|
158
|
+
process.exit(1);
|
|
159
|
+
}
|
|
160
|
+
const killProcessTree = (pid) => {
|
|
161
|
+
try {
|
|
162
|
+
// Kill all child processes first
|
|
163
|
+
try {
|
|
164
|
+
const result = (0, child_process_1.spawn)('pkill', ['-TERM', '-P', String(pid)], { stdio: 'pipe' });
|
|
165
|
+
result.on('close', () => {
|
|
166
|
+
// After children are killed, kill the parent
|
|
167
|
+
try {
|
|
168
|
+
process.kill(pid, 'SIGTERM');
|
|
169
|
+
}
|
|
170
|
+
catch (_a) {
|
|
171
|
+
// Ignore errors (process may already be dead)
|
|
172
|
+
}
|
|
173
|
+
// Force kill after delay if still alive
|
|
174
|
+
setTimeout(() => {
|
|
175
|
+
try {
|
|
176
|
+
process.kill(pid, 'SIGKILL');
|
|
177
|
+
}
|
|
178
|
+
catch (_a) {
|
|
179
|
+
// Ignore errors (process may already be dead)
|
|
180
|
+
}
|
|
181
|
+
}, 200);
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
catch (_a) {
|
|
185
|
+
// If pkill fails, just kill the parent process
|
|
186
|
+
try {
|
|
187
|
+
process.kill(pid, 'SIGTERM');
|
|
188
|
+
setTimeout(() => {
|
|
189
|
+
try {
|
|
190
|
+
process.kill(pid, 'SIGKILL');
|
|
191
|
+
}
|
|
192
|
+
catch (_a) {
|
|
193
|
+
// Ignore errors (process may already be dead)
|
|
194
|
+
}
|
|
195
|
+
}, 200);
|
|
196
|
+
}
|
|
197
|
+
catch (_b) {
|
|
198
|
+
// Ignore errors (process may already be dead)
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
catch (_c) {
|
|
203
|
+
// Ignore errors (process may already be dead)
|
|
204
|
+
}
|
|
205
|
+
};
|
|
206
|
+
// Track shutdown state to suppress exit messages during intentional shutdown
|
|
207
|
+
let isShuttingDown = false;
|
|
208
|
+
// Start webhook server based on project language
|
|
209
|
+
let webhookServer;
|
|
210
|
+
if (projectLanguage === "python") {
|
|
211
|
+
// For Python projects, spawn the Python dev server
|
|
212
|
+
// Find Python executable (prefers virtual environment if present)
|
|
213
|
+
const pythonCommand = findPythonExecutable(cwd);
|
|
214
|
+
webhookServer = (0, child_process_1.spawn)(pythonCommand, [
|
|
215
|
+
devServerFile,
|
|
216
|
+
`--webhook-port=${webhookPort}`,
|
|
217
|
+
`--api-server-port=${apiPort}`
|
|
218
|
+
], {
|
|
219
|
+
stdio: 'inherit',
|
|
220
|
+
cwd,
|
|
221
|
+
env: Object.assign(Object.assign({}, process.env), { PYTHONDONTWRITEBYTECODE: '1', PYTHONUNBUFFERED: '1' })
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
// For TypeScript projects, use tsx with watch mode
|
|
226
|
+
const tsxPath = path_1.default.join(require.resolve('tsx'), '../../dist/cli.mjs');
|
|
227
|
+
webhookServer = (0, child_process_1.spawn)(process.execPath, [tsxPath, '--watch', devServerFile, 'agentmark.client.ts', 'agentmark/**/*', `--webhook-port=${webhookPort}`, `--api-server-port=${apiPort}`], {
|
|
228
|
+
stdio: 'inherit',
|
|
229
|
+
cwd
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
webhookServer.on('error', (error) => {
|
|
233
|
+
console.error('Failed to start webhook server:', error.message);
|
|
234
|
+
if (apiServerInstance) {
|
|
235
|
+
try {
|
|
236
|
+
apiServerInstance.close();
|
|
237
|
+
}
|
|
238
|
+
catch (_a) {
|
|
239
|
+
// Ignore errors when closing API server
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
process.exit(1);
|
|
243
|
+
});
|
|
244
|
+
webhookServer.on('exit', (code) => {
|
|
245
|
+
// Only log if not shutting down intentionally
|
|
246
|
+
if (!isShuttingDown) {
|
|
247
|
+
if (code === 0 || code === null) {
|
|
248
|
+
console.log('\nWebhook server stopped');
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
console.error(`\nā Webhook server exited with error code ${code}`);
|
|
252
|
+
console.error('Check the output above for error details');
|
|
253
|
+
}
|
|
254
|
+
if (apiServerInstance) {
|
|
255
|
+
try {
|
|
256
|
+
apiServerInstance.close();
|
|
257
|
+
}
|
|
258
|
+
catch (_a) {
|
|
259
|
+
// Ignore errors when closing API server
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
process.exit(code || 0);
|
|
263
|
+
}
|
|
264
|
+
});
|
|
265
|
+
// Start AgentMark UI app (Next.js production server)
|
|
266
|
+
const nextCwd = path_1.default.join(__dirname, '..', '..');
|
|
267
|
+
let actualAppPort = appPort;
|
|
268
|
+
let uiServer = null;
|
|
269
|
+
function startAgentMarkServer() {
|
|
270
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
271
|
+
var _a, _b;
|
|
272
|
+
while (!(yield isPortFree(actualAppPort))) {
|
|
273
|
+
console.warn(`Port ${actualAppPort} is busy, trying ${actualAppPort + 1}`);
|
|
274
|
+
actualAppPort++;
|
|
275
|
+
}
|
|
276
|
+
uiServer = (0, child_process_1.spawn)('npm', ['start', '--', '-p', `${actualAppPort}`], {
|
|
277
|
+
stdio: 'pipe',
|
|
278
|
+
cwd: nextCwd,
|
|
279
|
+
env: Object.assign(Object.assign({}, process.env), { NEXT_PUBLIC_AGENTMARK_API_PORT: String(apiPort) }),
|
|
280
|
+
});
|
|
281
|
+
// Capture output for debugging
|
|
282
|
+
(_a = uiServer.stdout) === null || _a === void 0 ? void 0 : _a.on('data', () => {
|
|
283
|
+
// Silently consume stdout
|
|
284
|
+
});
|
|
285
|
+
(_b = uiServer.stderr) === null || _b === void 0 ? void 0 : _b.on('data', (data) => {
|
|
286
|
+
console.error(`AgentMark UI error: ${data.toString()}`);
|
|
287
|
+
});
|
|
288
|
+
uiServer.on('exit', (code) => {
|
|
289
|
+
// Only log if not shutting down intentionally
|
|
290
|
+
if (!isShuttingDown) {
|
|
291
|
+
console.log(`AgentMark UI server exited with code ${code}`);
|
|
292
|
+
process.exit(code || 0);
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
uiServer.on('error', (err) => {
|
|
296
|
+
console.error('Failed to start AgentMark UI server:', err.message);
|
|
297
|
+
process.exit(1);
|
|
298
|
+
});
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
// Start the AgentMark app
|
|
302
|
+
startAgentMarkServer();
|
|
303
|
+
// Store tunnel info for cleanup
|
|
304
|
+
let tunnelInfo = null;
|
|
305
|
+
// Give servers time to start, then print summary and optionally setup tunnel
|
|
306
|
+
setTimeout(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
307
|
+
// Verify webhook server is still running before showing success message
|
|
308
|
+
if (webhookServer.exitCode !== null) {
|
|
309
|
+
console.error('\nā Webhook server failed to start');
|
|
310
|
+
console.error('The API server is running, but the webhook server did not start successfully');
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
// Setup tunnel if requested
|
|
314
|
+
if (useTunnel) {
|
|
315
|
+
try {
|
|
316
|
+
const subdomain = (0, config_1.getTunnelSubdomain)();
|
|
317
|
+
tunnelInfo = yield (0, tunnel_1.createTunnel)(webhookPort, subdomain);
|
|
318
|
+
}
|
|
319
|
+
catch (_a) {
|
|
320
|
+
console.error('Continuing without tunnel...\n');
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
console.log('\n' + 'ā'.repeat(70));
|
|
324
|
+
console.log('š AgentMark Development Servers Running');
|
|
325
|
+
console.log('ā'.repeat(70));
|
|
326
|
+
console.log(`\n API: http://localhost:${apiPort}`);
|
|
327
|
+
console.log(` Webhook: http://localhost:${webhookPort}`);
|
|
328
|
+
console.log(` App: http://localhost:${actualAppPort}`);
|
|
329
|
+
if (useTunnel && tunnelInfo) {
|
|
330
|
+
console.log('\n Public Webhook:');
|
|
331
|
+
console.log(` URL: ${tunnelInfo.url}`);
|
|
332
|
+
console.log(` Secret: ${config.webhookSecret}`);
|
|
333
|
+
console.log(` Valid: ${getConfigDaysRemaining(config)} days remaining`);
|
|
334
|
+
}
|
|
335
|
+
console.log('\n' + 'ā'.repeat(70));
|
|
336
|
+
console.log('How to run prompts and experiments:');
|
|
337
|
+
console.log('ā'.repeat(70));
|
|
338
|
+
console.log('\n Open a new terminal window and run:');
|
|
339
|
+
console.log('\n Run a prompt:');
|
|
340
|
+
console.log(' $ npm run prompt ./agentmark/party-planner.prompt.mdx');
|
|
341
|
+
console.log('\n Run an experiment:');
|
|
342
|
+
console.log(' $ npm run experiment ./agentmark/party-planner.prompt.mdx');
|
|
343
|
+
console.log('\n (Replace with any prompt file in ./agentmark/)');
|
|
344
|
+
console.log('\n' + 'ā'.repeat(70));
|
|
345
|
+
console.log('Press Ctrl+C in this terminal to stop the servers');
|
|
346
|
+
console.log('ā'.repeat(70) + '\n');
|
|
347
|
+
}), 3000);
|
|
348
|
+
// Handle process termination
|
|
349
|
+
const cleanup = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
350
|
+
if (isShuttingDown)
|
|
351
|
+
return;
|
|
352
|
+
isShuttingDown = true;
|
|
353
|
+
console.log('\nShutting down servers...');
|
|
354
|
+
// Close tunnel first
|
|
355
|
+
if (tunnelInfo) {
|
|
356
|
+
try {
|
|
357
|
+
console.log(' Stopping tunnel...');
|
|
358
|
+
yield tunnelInfo.disconnect();
|
|
359
|
+
}
|
|
360
|
+
catch (error) {
|
|
361
|
+
console.error(' Error disconnecting tunnel:', error);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
// Close API server with force close on all connections
|
|
365
|
+
if (apiServerInstance) {
|
|
366
|
+
try {
|
|
367
|
+
console.log(' Stopping API server...');
|
|
368
|
+
// Force close all connections
|
|
369
|
+
yield new Promise((resolve) => {
|
|
370
|
+
var _a;
|
|
371
|
+
(_a = apiServerInstance.closeAllConnections) === null || _a === void 0 ? void 0 : _a.call(apiServerInstance);
|
|
372
|
+
apiServerInstance.close(() => {
|
|
373
|
+
resolve();
|
|
374
|
+
});
|
|
375
|
+
// Timeout in case close hangs
|
|
376
|
+
setTimeout(resolve, 1000);
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
catch (error) {
|
|
380
|
+
console.error(' Error stopping API server:', error);
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
// Kill webhook server process tree
|
|
384
|
+
if (webhookServer.pid) {
|
|
385
|
+
console.log(' Stopping webhook server...');
|
|
386
|
+
killProcessTree(webhookServer.pid);
|
|
387
|
+
}
|
|
388
|
+
// Kill UI server process tree
|
|
389
|
+
if (uiServer && uiServer.pid) {
|
|
390
|
+
console.log(' Stopping UI server...');
|
|
391
|
+
killProcessTree(uiServer.pid);
|
|
392
|
+
}
|
|
393
|
+
console.log('Servers stopped.');
|
|
394
|
+
// Give processes time to die, then force exit
|
|
395
|
+
// Increased timeout to allow for graceful shutdown
|
|
396
|
+
setTimeout(() => {
|
|
397
|
+
process.exit(0);
|
|
398
|
+
}, 1000);
|
|
399
|
+
});
|
|
400
|
+
process.on('SIGINT', cleanup);
|
|
401
|
+
process.on('SIGTERM', cleanup);
|
|
402
|
+
// Don't use exit handler - it causes issues with async cleanup
|
|
403
|
+
// The SIGINT/SIGTERM handlers will trigger process.exit()
|
|
404
|
+
});
|
|
405
|
+
exports.default = dev;
|
|
406
|
+
//# sourceMappingURL=dev.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../cli-src/commands/dev.ts"],"names":[],"mappings":"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"}
|