@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,397 @@
|
|
|
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_1 = __importDefault(require("fs"));
|
|
17
|
+
const prompt_detection_js_1 = require("../utils/prompt-detection.js");
|
|
18
|
+
function resolveAgainstCwdOrEnv(inputPath) {
|
|
19
|
+
if (path_1.default.isAbsolute(inputPath))
|
|
20
|
+
return inputPath;
|
|
21
|
+
let base;
|
|
22
|
+
try {
|
|
23
|
+
base = process.cwd();
|
|
24
|
+
}
|
|
25
|
+
catch (_a) {
|
|
26
|
+
base = process.env.PWD;
|
|
27
|
+
}
|
|
28
|
+
if (!base)
|
|
29
|
+
throw new Error('Invalid working directory. Provide an absolute path or set PWD.');
|
|
30
|
+
return path_1.default.resolve(base, inputPath);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Loads an AST from either a pre-built JSON file or an MDX file.
|
|
34
|
+
* @param resolvedFilepath - Absolute path to the file
|
|
35
|
+
* @returns The AST and prompt name
|
|
36
|
+
*/
|
|
37
|
+
function loadAst(resolvedFilepath) {
|
|
38
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
39
|
+
var _a;
|
|
40
|
+
if (resolvedFilepath.endsWith('.json')) {
|
|
41
|
+
// Load pre-built AST from JSON file
|
|
42
|
+
const content = fs_1.default.readFileSync(resolvedFilepath, 'utf-8');
|
|
43
|
+
const built = JSON.parse(content);
|
|
44
|
+
if (!built.ast) {
|
|
45
|
+
throw new Error('Invalid pre-built prompt file: missing "ast" field');
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
ast: built.ast,
|
|
49
|
+
promptName: (_a = built.metadata) === null || _a === void 0 ? void 0 : _a.name
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
else if (resolvedFilepath.endsWith('.mdx')) {
|
|
53
|
+
// Parse MDX file using prompt-core's TemplateDX instances (which have tags registered)
|
|
54
|
+
const { getTemplateDXInstance } = yield import("@agentmark-ai/prompt-core");
|
|
55
|
+
// Read content to detect prompt type
|
|
56
|
+
const content = fs_1.default.readFileSync(resolvedFilepath, 'utf-8');
|
|
57
|
+
const parserType = (0, prompt_detection_js_1.detectPromptTypeFromContent)(content);
|
|
58
|
+
// Get the appropriate TemplateDX instance with AgentMark tags registered
|
|
59
|
+
const templateDX = getTemplateDXInstance(parserType);
|
|
60
|
+
// Create content loader for resolving imports
|
|
61
|
+
const baseDir = path_1.default.dirname(resolvedFilepath);
|
|
62
|
+
const contentLoader = (filePath) => __awaiter(this, void 0, void 0, function* () {
|
|
63
|
+
const { readFile } = yield import('fs/promises');
|
|
64
|
+
const resolvedPath = path_1.default.resolve(baseDir, filePath);
|
|
65
|
+
return readFile(resolvedPath, 'utf-8');
|
|
66
|
+
});
|
|
67
|
+
// Parse the MDX content
|
|
68
|
+
const ast = yield templateDX.parse(content, baseDir, contentLoader);
|
|
69
|
+
const frontmatter = templateDX.getFrontMatter(ast);
|
|
70
|
+
return {
|
|
71
|
+
ast,
|
|
72
|
+
promptName: frontmatter.name
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
throw new Error('File must be an .mdx or .json file');
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
const runPrompt = (filepath_1, ...args_1) => __awaiter(void 0, [filepath_1, ...args_1], void 0, function* (filepath, options = {}) {
|
|
81
|
+
var _a, _b, _c, _d, _f, _g, _h;
|
|
82
|
+
const resolvedFilepath = resolveAgainstCwdOrEnv(filepath);
|
|
83
|
+
if (!fs_1.default.existsSync(resolvedFilepath)) {
|
|
84
|
+
throw new Error(`File not found: ${resolvedFilepath}`);
|
|
85
|
+
}
|
|
86
|
+
if (!resolvedFilepath.endsWith('.mdx') && !resolvedFilepath.endsWith('.json')) {
|
|
87
|
+
throw new Error('File must be an .mdx or .json file');
|
|
88
|
+
}
|
|
89
|
+
// Parse props from CLI or file
|
|
90
|
+
let customProps;
|
|
91
|
+
if (options.propsFile) {
|
|
92
|
+
const propsFilePath = resolveAgainstCwdOrEnv(options.propsFile);
|
|
93
|
+
if (!fs_1.default.existsSync(propsFilePath)) {
|
|
94
|
+
throw new Error(`Props file not found: ${propsFilePath}`);
|
|
95
|
+
}
|
|
96
|
+
const content = fs_1.default.readFileSync(propsFilePath, 'utf-8');
|
|
97
|
+
if (propsFilePath.endsWith('.json')) {
|
|
98
|
+
customProps = JSON.parse(content);
|
|
99
|
+
}
|
|
100
|
+
else if (propsFilePath.endsWith('.yaml') || propsFilePath.endsWith('.yml')) {
|
|
101
|
+
const { parse: parseYaml } = yield import('yaml');
|
|
102
|
+
customProps = parseYaml(content);
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
throw new Error('Props file must be .json, .yaml, or .yml');
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
else if (options.props) {
|
|
109
|
+
try {
|
|
110
|
+
customProps = JSON.parse(options.props);
|
|
111
|
+
}
|
|
112
|
+
catch (_e) {
|
|
113
|
+
throw new Error('Invalid JSON in --props argument');
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// Load webhook secret BEFORE changing directory
|
|
117
|
+
// (so we get it from the project root, not the prompt directory)
|
|
118
|
+
let webhookSecret = process.env.AGENTMARK_WEBHOOK_SECRET;
|
|
119
|
+
if (!webhookSecret) {
|
|
120
|
+
try {
|
|
121
|
+
const { loadLocalConfig } = yield import('../config.js');
|
|
122
|
+
const config = loadLocalConfig();
|
|
123
|
+
if (config && config.webhookSecret) {
|
|
124
|
+
webhookSecret = config.webhookSecret;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
catch (_j) {
|
|
128
|
+
// No config file, continue without signature
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
// If current cwd is invalid, switch to the prompt's directory to stabilize deps that use process.cwd()
|
|
132
|
+
try {
|
|
133
|
+
process.chdir(path_1.default.dirname(resolvedFilepath));
|
|
134
|
+
}
|
|
135
|
+
catch (_k) {
|
|
136
|
+
// Ignore errors when changing directory
|
|
137
|
+
}
|
|
138
|
+
// Load AST from MDX or pre-built JSON file
|
|
139
|
+
const { ast, promptName } = yield loadAst(resolvedFilepath);
|
|
140
|
+
// Determine prompt kind from frontmatter for better headers (Text/Object/Image/Speech)
|
|
141
|
+
let promptHeader = 'Text';
|
|
142
|
+
try {
|
|
143
|
+
const yamlNode = (_a = ast === null || ast === void 0 ? void 0 : ast.children) === null || _a === void 0 ? void 0 : _a.find((n) => (n === null || n === void 0 ? void 0 : n.type) === 'yaml');
|
|
144
|
+
if (yamlNode && typeof yamlNode.value === 'string') {
|
|
145
|
+
const { parse: parseYaml } = yield import('yaml');
|
|
146
|
+
const fm = parseYaml(yamlNode.value) || {};
|
|
147
|
+
if (fm.object_config)
|
|
148
|
+
promptHeader = 'Object';
|
|
149
|
+
else if (fm.image_config)
|
|
150
|
+
promptHeader = 'Image';
|
|
151
|
+
else if (fm.speech_config)
|
|
152
|
+
promptHeader = 'Speech';
|
|
153
|
+
else
|
|
154
|
+
promptHeader = 'Text';
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
catch (_l) {
|
|
158
|
+
// Ignore errors when parsing frontmatter
|
|
159
|
+
}
|
|
160
|
+
// Ensure server resolves resources relative to the prompt file if it needs it in the AST
|
|
161
|
+
try {
|
|
162
|
+
process.env.AGENTMARK_ROOT = path_1.default.dirname(resolvedFilepath);
|
|
163
|
+
}
|
|
164
|
+
catch (_m) {
|
|
165
|
+
// Ignore errors when setting environment variable
|
|
166
|
+
}
|
|
167
|
+
const server = options.server || process.env.AGENTMARK_WEBHOOK_URL || 'http://localhost:9417';
|
|
168
|
+
if (!server || !/^https?:\/\//i.test(server)) {
|
|
169
|
+
throw new Error('Server URL is required. Run your runner (e.g., npm run dev) and set --server if needed.');
|
|
170
|
+
}
|
|
171
|
+
try {
|
|
172
|
+
console.log(customProps ? "Running prompt with custom props..." : "Running prompt with test props...");
|
|
173
|
+
// Prefer streaming when available for better UX
|
|
174
|
+
const body = JSON.stringify({ type: 'prompt-run', data: { ast, customProps, promptPath: promptName, options: { shouldStream: true } } });
|
|
175
|
+
// Add webhook signature if secret is available
|
|
176
|
+
const headers = { 'Content-Type': 'application/json' };
|
|
177
|
+
if (webhookSecret) {
|
|
178
|
+
const { createSignature } = yield import('@agentmark-ai/shared-utils');
|
|
179
|
+
const signature = yield createSignature(webhookSecret, body);
|
|
180
|
+
headers['x-agentmark-signature-256'] = signature;
|
|
181
|
+
}
|
|
182
|
+
let res;
|
|
183
|
+
try {
|
|
184
|
+
res = yield fetch(server, { method: 'POST', headers, body });
|
|
185
|
+
}
|
|
186
|
+
catch (fetchError) {
|
|
187
|
+
// Network-level errors (server not running, connection refused, etc.)
|
|
188
|
+
const isConnectionError = ((_b = fetchError.message) === null || _b === void 0 ? void 0 : _b.includes('ECONNREFUSED')) ||
|
|
189
|
+
((_c = fetchError.message) === null || _c === void 0 ? void 0 : _c.includes('fetch failed')) ||
|
|
190
|
+
((_d = fetchError.cause) === null || _d === void 0 ? void 0 : _d.code) === 'ECONNREFUSED';
|
|
191
|
+
if (isConnectionError) {
|
|
192
|
+
throw new Error(`❌ Could not connect to AgentMark server at ${server}\n\n` +
|
|
193
|
+
`The server is not running or not reachable.\n\n` +
|
|
194
|
+
`To start the server, run:\n` +
|
|
195
|
+
` agentmark dev\n\n` +
|
|
196
|
+
`Or specify a different server URL with:\n` +
|
|
197
|
+
` agentmark run-prompt <filepath> --server <url>`);
|
|
198
|
+
}
|
|
199
|
+
// Re-throw other network errors with context
|
|
200
|
+
throw new Error(`Network error connecting to ${server}: ${fetchError.message}`);
|
|
201
|
+
}
|
|
202
|
+
if (!res.ok) {
|
|
203
|
+
let raw = '';
|
|
204
|
+
try {
|
|
205
|
+
raw = yield res.text();
|
|
206
|
+
}
|
|
207
|
+
catch (_o) {
|
|
208
|
+
// Ignore errors when reading response text
|
|
209
|
+
}
|
|
210
|
+
let parsed = null;
|
|
211
|
+
try {
|
|
212
|
+
parsed = JSON.parse(raw);
|
|
213
|
+
}
|
|
214
|
+
catch (_p) {
|
|
215
|
+
// Ignore errors when parsing JSON
|
|
216
|
+
}
|
|
217
|
+
const ct = res.headers.get('content-type') || '';
|
|
218
|
+
const statusLine = `${res.status}${res.statusText ? ' ' + res.statusText : ''}`;
|
|
219
|
+
const errMsg = (parsed === null || parsed === void 0 ? void 0 : parsed.error) || (parsed === null || parsed === void 0 ? void 0 : parsed.message) || ((_f = raw === null || raw === void 0 ? void 0 : raw.slice) === null || _f === void 0 ? void 0 : _f.call(raw, 0, 2000)) || 'Unknown error';
|
|
220
|
+
const details = `HTTP ${statusLine} — Content-Type: ${ct}`;
|
|
221
|
+
const msg = `Runner request failed. ${details}\nURL: ${server}\nBody: ${errMsg}`;
|
|
222
|
+
console.error(msg);
|
|
223
|
+
throw new Error(msg);
|
|
224
|
+
}
|
|
225
|
+
const isStreaming = !!res.headers.get('AgentMark-Streaming');
|
|
226
|
+
const resp = isStreaming ? { type: 'stream', stream: res.body } : yield res.json();
|
|
227
|
+
// Ensure a visible header precedes results; for streams use prompt frontmatter, else fallback to response type
|
|
228
|
+
const respType = resp === null || resp === void 0 ? void 0 : resp.type;
|
|
229
|
+
const nonStreamHeader = respType === 'object' ? 'Object' : respType === 'image' ? 'Image' : respType === 'speech' ? 'Speech' : 'Text';
|
|
230
|
+
const header = isStreaming ? promptHeader : nonStreamHeader;
|
|
231
|
+
console.log(`\n=== ${header} Prompt Results ===`);
|
|
232
|
+
if (resp.type === 'stream') {
|
|
233
|
+
const reader = resp.stream.getReader();
|
|
234
|
+
const decoder = new TextDecoder();
|
|
235
|
+
let buffered = '';
|
|
236
|
+
// Object streaming rendering state
|
|
237
|
+
let lastObjectRenderLineCount = 0;
|
|
238
|
+
let finalObjectString;
|
|
239
|
+
let hasSeenToolResult = false;
|
|
240
|
+
let hasPrintedFinalHeader = false;
|
|
241
|
+
let usageInfo = null;
|
|
242
|
+
let streamTraceId;
|
|
243
|
+
for (;;) {
|
|
244
|
+
const { done, value } = yield reader.read();
|
|
245
|
+
if (done)
|
|
246
|
+
break;
|
|
247
|
+
buffered += decoder.decode(value, { stream: true });
|
|
248
|
+
let idx;
|
|
249
|
+
while ((idx = buffered.indexOf("\n")) !== -1) {
|
|
250
|
+
const line = buffered.slice(0, idx);
|
|
251
|
+
buffered = buffered.slice(idx + 1);
|
|
252
|
+
try {
|
|
253
|
+
const evt = JSON.parse(line);
|
|
254
|
+
if (evt.type === 'text' && typeof evt.result === 'string') {
|
|
255
|
+
// Print separator before the first text after tool results
|
|
256
|
+
if (hasSeenToolResult && !hasPrintedFinalHeader) {
|
|
257
|
+
process.stdout.write('\n📝 ');
|
|
258
|
+
hasPrintedFinalHeader = true;
|
|
259
|
+
}
|
|
260
|
+
process.stdout.write(evt.result);
|
|
261
|
+
}
|
|
262
|
+
if (evt.type === 'text' && evt.toolCall) {
|
|
263
|
+
const tc = evt.toolCall;
|
|
264
|
+
const argsStr = JSON.stringify(tc.args);
|
|
265
|
+
process.stdout.write(`\n\n🔧→ ${tc.toolName}(${argsStr})\n`);
|
|
266
|
+
}
|
|
267
|
+
if (evt.type === 'text' && evt.toolResult) {
|
|
268
|
+
const tr = evt.toolResult;
|
|
269
|
+
const resultStr = JSON.stringify(tr.result);
|
|
270
|
+
process.stdout.write(`🔧← ${resultStr}\n`);
|
|
271
|
+
hasSeenToolResult = true;
|
|
272
|
+
}
|
|
273
|
+
if (evt.type === 'text' && evt.usage) {
|
|
274
|
+
usageInfo = evt.usage;
|
|
275
|
+
}
|
|
276
|
+
if (evt.type === 'object' && evt.usage) {
|
|
277
|
+
usageInfo = evt.usage;
|
|
278
|
+
}
|
|
279
|
+
if (evt.type === 'object' && evt.result) {
|
|
280
|
+
const next = JSON.stringify(evt.result, null, 2);
|
|
281
|
+
// Clear previously rendered object lines (if any), move cursor up, then render new object
|
|
282
|
+
if (lastObjectRenderLineCount > 0) {
|
|
283
|
+
for (let i = 0; i < lastObjectRenderLineCount; i++) {
|
|
284
|
+
process.stdout.write('\x1b[1A'); // cursor up
|
|
285
|
+
process.stdout.write('\x1b[2K'); // clear line
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
process.stdout.write(next + '\n');
|
|
289
|
+
lastObjectRenderLineCount = next.split('\n').length;
|
|
290
|
+
finalObjectString = next;
|
|
291
|
+
}
|
|
292
|
+
if (evt.type === 'error' && evt.error) {
|
|
293
|
+
const errorMsg = typeof evt.error === 'string'
|
|
294
|
+
? evt.error
|
|
295
|
+
: (evt.error.message || JSON.stringify(evt.error, null, 2));
|
|
296
|
+
console.error(`❌ ${errorMsg}`);
|
|
297
|
+
}
|
|
298
|
+
if (evt.type === 'done' && evt.traceId)
|
|
299
|
+
streamTraceId = evt.traceId;
|
|
300
|
+
}
|
|
301
|
+
catch (_q) {
|
|
302
|
+
// Ignore errors when parsing stream events
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
// Ensure final object is printed once (replacing the live-updated one)
|
|
307
|
+
if (finalObjectString && lastObjectRenderLineCount > 0) {
|
|
308
|
+
for (let i = 0; i < lastObjectRenderLineCount; i++) {
|
|
309
|
+
process.stdout.write('\x1b[1A');
|
|
310
|
+
process.stdout.write('\x1b[2K');
|
|
311
|
+
}
|
|
312
|
+
console.log(finalObjectString);
|
|
313
|
+
}
|
|
314
|
+
// Display token usage if available
|
|
315
|
+
if (usageInfo) {
|
|
316
|
+
const promptTokens = usageInfo.promptTokens || 0;
|
|
317
|
+
const completionTokens = usageInfo.completionTokens || 0;
|
|
318
|
+
const totalTokens = usageInfo.totalTokens || (promptTokens + completionTokens);
|
|
319
|
+
console.log('\n' + '─'.repeat(60));
|
|
320
|
+
console.log(`🪙 ${promptTokens.toLocaleString()} in, ${completionTokens.toLocaleString()} out, ${totalTokens.toLocaleString()} total`);
|
|
321
|
+
console.log('─'.repeat(60));
|
|
322
|
+
}
|
|
323
|
+
// Display trace link (only for text or object prompts)
|
|
324
|
+
if (streamTraceId && (promptHeader === 'Text' || promptHeader === 'Object')) {
|
|
325
|
+
console.log(`\n📊 View trace: http://localhost:3000/traces?traceId=${streamTraceId}`);
|
|
326
|
+
}
|
|
327
|
+
console.log('');
|
|
328
|
+
}
|
|
329
|
+
else {
|
|
330
|
+
// Non-streaming responses
|
|
331
|
+
if (resp.type === 'text') {
|
|
332
|
+
console.log(String((_g = resp.result) !== null && _g !== void 0 ? _g : '(no content)'));
|
|
333
|
+
}
|
|
334
|
+
else if (resp.type === 'object') {
|
|
335
|
+
console.log(JSON.stringify(resp.result, null, 2));
|
|
336
|
+
}
|
|
337
|
+
else if (resp.type === 'image') {
|
|
338
|
+
const outputs = resp.result;
|
|
339
|
+
const outDir = path_1.default.join(process.cwd(), '.agentmark-outputs');
|
|
340
|
+
try {
|
|
341
|
+
fs_1.default.mkdirSync(outDir, { recursive: true });
|
|
342
|
+
}
|
|
343
|
+
catch (_r) {
|
|
344
|
+
// Ignore errors when creating output directory
|
|
345
|
+
}
|
|
346
|
+
const saved = [];
|
|
347
|
+
const timestamp = Date.now();
|
|
348
|
+
outputs.forEach((img, idx) => {
|
|
349
|
+
var _a;
|
|
350
|
+
const ext = ((_a = img.mimeType) === null || _a === void 0 ? void 0 : _a.split('/')[1]) || 'png';
|
|
351
|
+
const filePath = path_1.default.join(outDir, `image-${idx + 1}-${timestamp}.${ext}`);
|
|
352
|
+
fs_1.default.writeFileSync(filePath, Buffer.from(img.base64, 'base64'));
|
|
353
|
+
saved.push(filePath);
|
|
354
|
+
});
|
|
355
|
+
console.log(saved.length ? `Saved ${saved.length} image(s) to:\n- ${saved.join('\n- ')}` : '(no content)');
|
|
356
|
+
}
|
|
357
|
+
else if (resp.type === 'speech') {
|
|
358
|
+
const audio = resp.result;
|
|
359
|
+
const outDir = path_1.default.join(process.cwd(), '.agentmark-outputs');
|
|
360
|
+
try {
|
|
361
|
+
fs_1.default.mkdirSync(outDir, { recursive: true });
|
|
362
|
+
}
|
|
363
|
+
catch (_s) {
|
|
364
|
+
// Ignore errors when creating output directory
|
|
365
|
+
}
|
|
366
|
+
const timestamp = Date.now();
|
|
367
|
+
const ext = audio.format || (((_h = audio.mimeType) === null || _h === void 0 ? void 0 : _h.split('/')[1]) || 'mp3');
|
|
368
|
+
const filePath = path_1.default.join(outDir, `audio-${timestamp}.${ext}`);
|
|
369
|
+
fs_1.default.writeFileSync(filePath, Buffer.from(audio.base64, 'base64'));
|
|
370
|
+
console.log(`Saved audio to: ${filePath}`);
|
|
371
|
+
}
|
|
372
|
+
else {
|
|
373
|
+
console.log('(no content)');
|
|
374
|
+
}
|
|
375
|
+
// Display token usage for non-streaming responses
|
|
376
|
+
const usage = resp.usage;
|
|
377
|
+
if (usage) {
|
|
378
|
+
const promptTokens = usage.promptTokens || 0;
|
|
379
|
+
const completionTokens = usage.completionTokens || 0;
|
|
380
|
+
const totalTokens = usage.totalTokens || (promptTokens + completionTokens);
|
|
381
|
+
console.log('\n' + '─'.repeat(60));
|
|
382
|
+
console.log(`🪙 ${promptTokens.toLocaleString()} in, ${completionTokens.toLocaleString()} out, ${totalTokens.toLocaleString()} total`);
|
|
383
|
+
console.log('─'.repeat(60));
|
|
384
|
+
}
|
|
385
|
+
// Display trace link (only for text or object prompts)
|
|
386
|
+
if (resp.traceId && (promptHeader === 'Text' || promptHeader === 'Object')) {
|
|
387
|
+
console.log(`\n📊 View trace: http://localhost:3000/traces?traceId=${resp.traceId}`);
|
|
388
|
+
}
|
|
389
|
+
console.log('');
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
catch (error) {
|
|
393
|
+
throw new Error(`Error running prompt: ${error.message}`);
|
|
394
|
+
}
|
|
395
|
+
});
|
|
396
|
+
exports.default = runPrompt;
|
|
397
|
+
//# sourceMappingURL=run-prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-prompt.js","sourceRoot":"","sources":["../../cli-src/commands/run-prompt.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,gDAAwB;AACxB,4CAAoB;AAEpB,sEAA2E;AAE3E,SAAS,sBAAsB,CAAC,SAAiB;IAC/C,IAAI,cAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IACjD,IAAI,IAAwB,CAAC;IAC7B,IAAI,CAAC;QAAC,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAAC,CAAC;IAAC,WAAM,CAAC;QAAC,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;IAAC,CAAC;IAC/D,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IAC9F,OAAO,cAAI,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AACvC,CAAC;AASD;;;;GAIG;AACH,SAAe,OAAO,CAAC,gBAAwB;;;QAC7C,IAAI,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACvC,oCAAoC;YACpC,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;YAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAElC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACxE,CAAC;YAED,OAAO;gBACL,GAAG,EAAE,KAAK,CAAC,GAAW;gBACtB,UAAU,EAAE,MAAA,KAAK,CAAC,QAAQ,0CAAE,IAAI;aACjC,CAAC;QACJ,CAAC;aAAM,IAAI,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7C,uFAAuF;YACvF,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;YAE5E,qCAAqC;YACrC,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;YAC3D,MAAM,UAAU,GAAG,IAAA,iDAA2B,EAAC,OAAO,CAAC,CAAC;YAExD,yEAAyE;YACzE,MAAM,UAAU,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;YAErD,8CAA8C;YAC9C,MAAM,OAAO,GAAG,cAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;YAC/C,MAAM,aAAa,GAAG,CAAO,QAAgB,EAAE,EAAE;gBAC/C,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;gBACjD,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;gBACrD,OAAO,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACzC,CAAC,CAAA,CAAC;YAEF,wBAAwB;YACxB,MAAM,GAAG,GAAS,MAAM,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;YAC1E,MAAM,WAAW,GAAG,UAAU,CAAC,cAAc,CAAC,GAAG,CAAsB,CAAC;YAExE,OAAO;gBACL,GAAG;gBACH,UAAU,EAAE,WAAW,CAAC,IAAI;aAC7B,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;CAAA;AAED,MAAM,SAAS,GAAG,wBAAyD,EAAE,+DAApD,QAAgB,EAAE,UAA4B,EAAE;;IACvE,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAE1D,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,mBAAmB,gBAAgB,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9E,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IAED,+BAA+B;IAC/B,IAAI,WAA4C,CAAC;IACjD,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,MAAM,aAAa,GAAG,sBAAsB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAChE,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,yBAAyB,aAAa,EAAE,CAAC,CAAC;QAC5D,CAAC;QACD,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACxD,IAAI,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACpC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;aAAM,IAAI,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7E,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;YAClD,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;SAAM,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,gDAAgD;IAChD,iEAAiE;IACjE,IAAI,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;IACzD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;YACzD,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;YACjC,IAAI,MAAM,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;gBACnC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;YACvC,CAAC;QACH,CAAC;QAAC,WAAM,CAAC;YACP,6CAA6C;QAC/C,CAAC;IACH,CAAC;IAED,uGAAuG;IACvG,IAAI,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,cAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAAC,CAAC;IAAC,WAAM,CAAC;QAC5D,wCAAwC;IAC1C,CAAC;IAED,2CAA2C;IAC3C,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAE5D,uFAAuF;IACvF,IAAI,YAAY,GAA2C,MAAM,CAAC;IAClE,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAC,GAAW,aAAX,GAAG,uBAAH,GAAG,CAAU,QAAQ,0CAAE,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,IAAI,MAAK,MAAM,CAAC,CAAC;QAC9E,IAAI,QAAQ,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACnD,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;YAClD,MAAM,EAAE,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAC3C,IAAI,EAAE,CAAC,aAAa;gBAAE,YAAY,GAAG,QAAQ,CAAC;iBACzC,IAAI,EAAE,CAAC,YAAY;gBAAE,YAAY,GAAG,OAAO,CAAC;iBAC5C,IAAI,EAAE,CAAC,aAAa;gBAAE,YAAY,GAAG,QAAQ,CAAC;;gBAC9C,YAAY,GAAG,MAAM,CAAC;QAC7B,CAAC;IACH,CAAC;IAAC,WAAM,CAAC;QACP,yCAAyC;IAC3C,CAAC;IACD,yFAAyF;IACzF,IAAI,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,cAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAAC,CAAC;IAAC,WAAM,CAAC;QAC1E,kDAAkD;IACpD,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,uBAAuB,CAAC;IAC9F,IAAI,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,yFAAyF,CAAC,CAAC;IAC7G,CAAC;IAED,IAAI,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,qCAAqC,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC;QACvG,gDAAgD;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAEzI,+CAA+C;QAC/C,MAAM,OAAO,GAA2B,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;QAE/E,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAC;YACvE,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;YAC7D,OAAO,CAAC,2BAA2B,CAAC,GAAG,SAAS,CAAC;QACnD,CAAC;QAED,IAAI,GAAG,CAAC;QACR,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D,CAAC;QAAC,OAAO,UAAe,EAAE,CAAC;YACzB,sEAAsE;YACtE,MAAM,iBAAiB,GACrB,CAAA,MAAA,UAAU,CAAC,OAAO,0CAAE,QAAQ,CAAC,cAAc,CAAC;iBAC5C,MAAA,UAAU,CAAC,OAAO,0CAAE,QAAQ,CAAC,cAAc,CAAC,CAAA;gBAC5C,CAAA,MAAA,UAAU,CAAC,KAAK,0CAAE,IAAI,MAAK,cAAc,CAAC;YAE5C,IAAI,iBAAiB,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CACb,8CAA8C,MAAM,MAAM;oBAC1D,iDAAiD;oBACjD,6BAA6B;oBAC7B,qBAAqB;oBACrB,2CAA2C;oBAC3C,kDAAkD,CACnD,CAAC;YACJ,CAAC;YACD,6CAA6C;YAC7C,MAAM,IAAI,KAAK,CAAC,+BAA+B,MAAM,KAAK,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;QAClF,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,GAAG,GAAG,EAAE,CAAC;YACb,IAAI,CAAC;gBAAC,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAAC,CAAC;YAAC,WAAM,CAAC;gBACrC,2CAA2C;YAC7C,CAAC;YACD,IAAI,MAAM,GAAQ,IAAI,CAAC;YACvB,IAAI,CAAC;gBAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAAC,CAAC;YAAC,WAAM,CAAC;gBACvC,kCAAkC;YACpC,CAAC;YACD,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;YACjD,MAAM,UAAU,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAChF,MAAM,MAAM,GAAG,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,MAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,CAAA,KAAI,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,KAAK,oDAAG,CAAC,EAAE,IAAI,CAAC,CAAA,IAAI,eAAe,CAAC;YAC5F,MAAM,OAAO,GAAG,QAAQ,UAAU,oBAAoB,EAAE,EAAE,CAAC;YAC3D,MAAM,GAAG,GAAG,0BAA0B,OAAO,UAAU,MAAM,WAAW,MAAM,EAAE,CAAC;YACjF,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;QACD,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QAC7D,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,IAAK,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QACpF,+GAA+G;QAC/G,MAAM,QAAQ,GAAI,IAAY,aAAZ,IAAI,uBAAJ,IAAI,CAAU,IAAI,CAAC;QACrC,MAAM,eAAe,GAAG,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;QACtI,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,qBAAqB,CAAC,CAAC;QAClD,IAAK,IAAY,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACpC,MAAM,MAAM,GAAI,IAAY,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAChD,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;YAClC,IAAI,QAAQ,GAAG,EAAE,CAAC;YAClB,mCAAmC;YACnC,IAAI,yBAAyB,GAAG,CAAC,CAAC;YAClC,IAAI,iBAAqC,CAAC;YAC1C,IAAI,iBAAiB,GAAG,KAAK,CAAC;YAC9B,IAAI,qBAAqB,GAAG,KAAK,CAAC;YAClC,IAAI,SAAS,GAAQ,IAAI,CAAC;YAC1B,IAAI,aAAiC,CAAC;YACtC,SAAS,CAAC;gBACR,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC5C,IAAI,IAAI;oBAAE,MAAM;gBAChB,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBACpD,IAAI,GAAG,CAAC;gBACR,OAAO,CAAC,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;oBAC7C,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;oBACpC,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;oBACnC,IAAI,CAAC;wBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBAC7B,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;4BAC1D,2DAA2D;4BAC3D,IAAI,iBAAiB,IAAI,CAAC,qBAAqB,EAAE,CAAC;gCAChD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gCAC9B,qBAAqB,GAAG,IAAI,CAAC;4BAC/B,CAAC;4BACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;wBACnC,CAAC;wBACD,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;4BACxC,MAAM,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC;4BACxB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;4BACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,IAAI,OAAO,KAAK,CAAC,CAAC;wBAC/D,CAAC;wBACD,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;4BAC1C,MAAM,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC;4BAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;4BAC5C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,SAAS,IAAI,CAAC,CAAC;4BAC3C,iBAAiB,GAAG,IAAI,CAAC;wBAC3B,CAAC;wBACD,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;4BACrC,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC;wBACxB,CAAC;wBACD,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;4BACvC,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC;wBACxB,CAAC;wBACD,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;4BACxC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;4BACjD,0FAA0F;4BAC1F,IAAI,yBAAyB,GAAG,CAAC,EAAE,CAAC;gCAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,yBAAyB,EAAE,CAAC,EAAE,EAAE,CAAC;oCACnD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY;oCAC7C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa;gCAChD,CAAC;4BACH,CAAC;4BACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;4BAClC,yBAAyB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;4BACpD,iBAAiB,GAAG,IAAI,CAAC;wBAC3B,CAAC;wBACD,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;4BACtC,MAAM,QAAQ,GAAG,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ;gCAC5C,CAAC,CAAC,GAAG,CAAC,KAAK;gCACX,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;4BAC9D,OAAO,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC;wBACjC,CAAC;wBACD,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,OAAO;4BAAE,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC;oBACtE,CAAC;oBAAC,WAAM,CAAC;wBACP,2CAA2C;oBAC7C,CAAC;gBACH,CAAC;YACH,CAAC;YACD,uEAAuE;YACvE,IAAI,iBAAiB,IAAI,yBAAyB,GAAG,CAAC,EAAE,CAAC;gBACvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,yBAAyB,EAAE,CAAC,EAAE,EAAE,CAAC;oBACnD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;oBAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBAClC,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;YACjC,CAAC;YAED,mCAAmC;YACnC,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,YAAY,GAAG,SAAS,CAAC,YAAY,IAAI,CAAC,CAAC;gBACjD,MAAM,gBAAgB,GAAG,SAAS,CAAC,gBAAgB,IAAI,CAAC,CAAC;gBACzD,MAAM,WAAW,GAAG,SAAS,CAAC,WAAW,IAAI,CAAC,YAAY,GAAG,gBAAgB,CAAC,CAAC;gBAC/E,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;gBACnC,OAAO,CAAC,GAAG,CAAC,MAAM,YAAY,CAAC,cAAc,EAAE,QAAQ,gBAAgB,CAAC,cAAc,EAAE,SAAS,WAAW,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;gBACvI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9B,CAAC;YACD,uDAAuD;YACvD,IAAI,aAAa,IAAI,CAAC,YAAY,KAAK,MAAM,IAAI,YAAY,KAAK,QAAQ,CAAC,EAAE,CAAC;gBAC5E,OAAO,CAAC,GAAG,CAAC,yDAAyD,aAAa,EAAE,CAAC,CAAC;YACxF,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,0BAA0B;YAC1B,IAAK,IAAY,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAClC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAC,IAAY,CAAC,MAAM,mCAAI,cAAc,CAAC,CAAC,CAAC;YAC9D,CAAC;iBAAM,IAAK,IAAY,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC3C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAE,IAAY,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7D,CAAC;iBAAM,IAAK,IAAY,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC1C,MAAM,OAAO,GAAI,IAAY,CAAC,MAAqD,CAAC;gBACpF,MAAM,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,oBAAoB,CAAC,CAAC;gBAC9D,IAAI,CAAC;oBAAC,YAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAAC,CAAC;gBAAC,WAAM,CAAC;oBACxD,+CAA+C;gBACjD,CAAC;gBACD,MAAM,KAAK,GAAa,EAAE,CAAC;gBAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC7B,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;;oBAC3B,MAAM,GAAG,GAAG,CAAA,MAAA,GAAG,CAAC,QAAQ,0CAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,KAAI,KAAK,CAAC;oBACjD,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,SAAS,IAAI,GAAG,EAAE,CAAC,CAAC;oBAC3E,YAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;oBAC9D,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACvB,CAAC,CAAC,CAAC;gBACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,MAAM,oBAAoB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;YAC7G,CAAC;iBAAM,IAAK,IAAY,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC3C,MAAM,KAAK,GAAI,IAAY,CAAC,MAAgE,CAAC;gBAC7F,MAAM,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,oBAAoB,CAAC,CAAC;gBAC9D,IAAI,CAAC;oBAAC,YAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAAC,CAAC;gBAAC,WAAM,CAAC;oBACxD,+CAA+C;gBACjD,CAAC;gBACD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC7B,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,CAAA,MAAA,KAAK,CAAC,QAAQ,0CAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,KAAI,KAAK,CAAC,CAAC;gBACrE,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,SAAS,IAAI,GAAG,EAAE,CAAC,CAAC;gBAChE,YAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;gBAChE,OAAO,CAAC,GAAG,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAC;YAC7C,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAC9B,CAAC;YAED,kDAAkD;YAClD,MAAM,KAAK,GAAI,IAAY,CAAC,KAAK,CAAC;YAClC,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;gBAC7C,MAAM,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,IAAI,CAAC,CAAC;gBACrD,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,CAAC,YAAY,GAAG,gBAAgB,CAAC,CAAC;gBAC3E,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;gBACnC,OAAO,CAAC,GAAG,CAAC,MAAM,YAAY,CAAC,cAAc,EAAE,QAAQ,gBAAgB,CAAC,cAAc,EAAE,SAAS,WAAW,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;gBACvI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9B,CAAC;YACD,uDAAuD;YACvD,IAAK,IAAY,CAAC,OAAO,IAAI,CAAC,YAAY,KAAK,MAAM,IAAI,YAAY,KAAK,QAAQ,CAAC,EAAE,CAAC;gBACpF,OAAO,CAAC,GAAG,CAAC,yDAA0D,IAAY,CAAC,OAAO,EAAE,CAAC,CAAC;YAChG,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;IACL,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC,CAAA,CAAC;AAEF,kBAAe,SAAS,CAAC"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local development configuration management.
|
|
3
|
+
* Stores persistent settings like webhook secrets and tunnel preferences.
|
|
4
|
+
*/
|
|
5
|
+
export interface LocalConfig {
|
|
6
|
+
webhookSecret?: string;
|
|
7
|
+
tunnelSubdomain?: string;
|
|
8
|
+
createdAt?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Loads the local development configuration.
|
|
12
|
+
* Creates a new config with generated secrets if none exists.
|
|
13
|
+
* Results are cached to avoid repeated file I/O.
|
|
14
|
+
*/
|
|
15
|
+
export declare function loadLocalConfig(): LocalConfig;
|
|
16
|
+
/**
|
|
17
|
+
* Gets the webhook secret, using local config or env var
|
|
18
|
+
*/
|
|
19
|
+
export declare function getWebhookSecret(): string;
|
|
20
|
+
/**
|
|
21
|
+
* Gets the tunnel subdomain preference
|
|
22
|
+
*/
|
|
23
|
+
export declare function getTunnelSubdomain(): string | undefined;
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Local development configuration management.
|
|
4
|
+
* Stores persistent settings like webhook secrets and tunnel preferences.
|
|
5
|
+
*/
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.loadLocalConfig = loadLocalConfig;
|
|
11
|
+
exports.getWebhookSecret = getWebhookSecret;
|
|
12
|
+
exports.getTunnelSubdomain = getTunnelSubdomain;
|
|
13
|
+
const fs_1 = __importDefault(require("fs"));
|
|
14
|
+
const path_1 = __importDefault(require("path"));
|
|
15
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
16
|
+
// Configuration constants
|
|
17
|
+
const CONFIG_EXPIRATION_DAYS = 30;
|
|
18
|
+
const MS_PER_DAY = 1000 * 60 * 60 * 24;
|
|
19
|
+
const WEBHOOK_SECRET_BYTES = 32;
|
|
20
|
+
const SUBDOMAIN_RANDOM_BYTES = 4;
|
|
21
|
+
// Cache for loaded config to avoid repeated file I/O
|
|
22
|
+
let cachedConfig = null;
|
|
23
|
+
let cachedConfigPath = null;
|
|
24
|
+
function getConfigPath() {
|
|
25
|
+
// Use temp directory during tests to avoid polluting the project
|
|
26
|
+
if (process.env.NODE_ENV === 'test' || process.env.VITEST) {
|
|
27
|
+
const tmpDir = process.env.TMPDIR || '/tmp';
|
|
28
|
+
return path_1.default.join(tmpDir, '.agentmark-dev-config.json');
|
|
29
|
+
}
|
|
30
|
+
// Use .agentmark directory in project root for config
|
|
31
|
+
try {
|
|
32
|
+
const cwd = process.cwd();
|
|
33
|
+
const configDir = path_1.default.join(cwd, '.agentmark');
|
|
34
|
+
// Create .agentmark directory if it doesn't exist
|
|
35
|
+
if (!fs_1.default.existsSync(configDir)) {
|
|
36
|
+
fs_1.default.mkdirSync(configDir, { recursive: true });
|
|
37
|
+
}
|
|
38
|
+
// Ensure .gitignore exists and includes dev-config.json
|
|
39
|
+
ensureGitignoreEntry(cwd);
|
|
40
|
+
return path_1.default.join(configDir, 'dev-config.json');
|
|
41
|
+
}
|
|
42
|
+
catch (_a) {
|
|
43
|
+
// Fallback to temp directory if can't write to project
|
|
44
|
+
const tmpDir = process.env.TMPDIR || '/tmp';
|
|
45
|
+
return path_1.default.join(tmpDir, '.agentmark-dev-config.json');
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Ensures .gitignore contains .agentmark/dev-config.json
|
|
50
|
+
*/
|
|
51
|
+
function ensureGitignoreEntry(projectRoot) {
|
|
52
|
+
try {
|
|
53
|
+
const gitignorePath = path_1.default.join(projectRoot, '.gitignore');
|
|
54
|
+
const entry = '.agentmark/dev-config.json';
|
|
55
|
+
let gitignoreContent = '';
|
|
56
|
+
if (fs_1.default.existsSync(gitignorePath)) {
|
|
57
|
+
gitignoreContent = fs_1.default.readFileSync(gitignorePath, 'utf-8');
|
|
58
|
+
}
|
|
59
|
+
// Check if entry already exists
|
|
60
|
+
if (!gitignoreContent.includes(entry)) {
|
|
61
|
+
// Add entry with a comment
|
|
62
|
+
const newContent = gitignoreContent +
|
|
63
|
+
(gitignoreContent.endsWith('\n') ? '' : '\n') +
|
|
64
|
+
'\n# AgentMark local development config (contains webhook secrets)\n' +
|
|
65
|
+
entry + '\n';
|
|
66
|
+
fs_1.default.writeFileSync(gitignorePath, newContent, 'utf-8');
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch (_a) {
|
|
70
|
+
// Silently fail - not critical
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Generates a secure random webhook secret
|
|
75
|
+
*/
|
|
76
|
+
function generateWebhookSecret() {
|
|
77
|
+
return crypto_1.default.randomBytes(WEBHOOK_SECRET_BYTES).toString('hex');
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Generates a random subdomain for tunneling
|
|
81
|
+
*/
|
|
82
|
+
function generateSubdomain() {
|
|
83
|
+
// Use a memorable format: agentmark-{random}
|
|
84
|
+
const randomPart = crypto_1.default.randomBytes(SUBDOMAIN_RANDOM_BYTES).toString('hex');
|
|
85
|
+
return `agentmark-${randomPart}`;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Loads the local development configuration.
|
|
89
|
+
* Creates a new config with generated secrets if none exists.
|
|
90
|
+
* Results are cached to avoid repeated file I/O.
|
|
91
|
+
*/
|
|
92
|
+
function loadLocalConfig() {
|
|
93
|
+
const configPath = getConfigPath();
|
|
94
|
+
// Return cached config if path hasn't changed
|
|
95
|
+
if (cachedConfig && cachedConfigPath === configPath) {
|
|
96
|
+
return cachedConfig;
|
|
97
|
+
}
|
|
98
|
+
try {
|
|
99
|
+
if (fs_1.default.existsSync(configPath)) {
|
|
100
|
+
const data = fs_1.default.readFileSync(configPath, 'utf-8');
|
|
101
|
+
const config = JSON.parse(data);
|
|
102
|
+
// Check if config is older than expiration period
|
|
103
|
+
if (config.createdAt) {
|
|
104
|
+
const createdDate = new Date(config.createdAt);
|
|
105
|
+
const daysSinceCreation = (Date.now() - createdDate.getTime()) / MS_PER_DAY;
|
|
106
|
+
if (daysSinceCreation > CONFIG_EXPIRATION_DAYS) {
|
|
107
|
+
console.log(`⚠️ Local config is older than ${CONFIG_EXPIRATION_DAYS} days, regenerating...`);
|
|
108
|
+
const newConfig = createNewConfig();
|
|
109
|
+
cachedConfig = newConfig;
|
|
110
|
+
cachedConfigPath = configPath;
|
|
111
|
+
return newConfig;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
cachedConfig = config;
|
|
115
|
+
cachedConfigPath = configPath;
|
|
116
|
+
return config;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
console.error('Error reading local config:', error);
|
|
121
|
+
}
|
|
122
|
+
const newConfig = createNewConfig();
|
|
123
|
+
cachedConfig = newConfig;
|
|
124
|
+
cachedConfigPath = configPath;
|
|
125
|
+
return newConfig;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Creates a new configuration with generated secrets
|
|
129
|
+
*/
|
|
130
|
+
function createNewConfig() {
|
|
131
|
+
const config = {
|
|
132
|
+
webhookSecret: generateWebhookSecret(),
|
|
133
|
+
tunnelSubdomain: generateSubdomain(),
|
|
134
|
+
createdAt: new Date().toISOString(),
|
|
135
|
+
};
|
|
136
|
+
saveLocalConfig(config);
|
|
137
|
+
return config;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Saves the configuration to disk
|
|
141
|
+
*/
|
|
142
|
+
function saveLocalConfig(config) {
|
|
143
|
+
const configPath = getConfigPath();
|
|
144
|
+
try {
|
|
145
|
+
fs_1.default.writeFileSync(configPath, JSON.stringify(config, null, 2), 'utf-8');
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
console.error('Error saving local config:', error);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Gets the webhook secret, using local config or env var
|
|
153
|
+
*/
|
|
154
|
+
function getWebhookSecret() {
|
|
155
|
+
// First check if user has set their own secret (not empty string)
|
|
156
|
+
if (process.env.AGENTMARK_WEBHOOK_SECRET && process.env.AGENTMARK_WEBHOOK_SECRET.trim() !== '') {
|
|
157
|
+
return process.env.AGENTMARK_WEBHOOK_SECRET;
|
|
158
|
+
}
|
|
159
|
+
// Otherwise use the locally generated one
|
|
160
|
+
const config = loadLocalConfig();
|
|
161
|
+
return config.webhookSecret;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Gets the tunnel subdomain preference
|
|
165
|
+
*/
|
|
166
|
+
function getTunnelSubdomain() {
|
|
167
|
+
const config = loadLocalConfig();
|
|
168
|
+
return config.tunnelSubdomain;
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../cli-src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const getModelCostMappings: () => Promise<{
|
|
2
|
+
[key: string]: {
|
|
3
|
+
promptPrice: number;
|
|
4
|
+
completionPrice: number;
|
|
5
|
+
};
|
|
6
|
+
}>;
|
|
7
|
+
export declare const getCostFormula: (inputCost: number, outputCost: number, unitScale: number) => (inputTokens: number, outputTokens: number) => number;
|