@agentmark-ai/cli 0.1.0

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