@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,614 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.getTracesByRunId = exports.getTracesBySessionId = exports.getSessions = exports.getTraceGraph = exports.getTraceById = exports.getSpans = exports.getTraces = exports.getRequests = exports.exportTraces = void 0;
16
+ const cost_mapping_1 = require("../../../cost-mapping/cost-mapping");
17
+ const database_1 = __importDefault(require("../../database"));
18
+ /**
19
+ * Convert NormalizedSpan to SQLite row format
20
+ */
21
+ function normalizedSpanToSqliteRow(span, modelsCostMapping) {
22
+ // Convert startTime from milliseconds to nanoseconds (as string for Timestamp)
23
+ const timestampNs = Math.floor(span.startTime * 1000000).toString();
24
+ // Duration is stored in milliseconds (no conversion needed)
25
+ const durationMs = Math.floor(span.duration);
26
+ // Calculate cost if model and tokens are available
27
+ let cost = span.cost || 0;
28
+ const isSuccess = span.statusCode !== "2";
29
+ const spanAttributes = Object.assign({}, span.spanAttributes);
30
+ if (span.model &&
31
+ span.inputTokens !== undefined &&
32
+ span.outputTokens !== undefined) {
33
+ const priceMap = isSuccess ? modelsCostMapping[span.model] : null;
34
+ if (priceMap) {
35
+ const getCost = (0, cost_mapping_1.getCostFormula)(Number(priceMap.promptPrice || 0), Number(priceMap.completionPrice || 0), 1000);
36
+ cost = getCost(span.inputTokens || 0, span.outputTokens || 0);
37
+ }
38
+ spanAttributes["gen_ai.usage.cost"] = cost;
39
+ }
40
+ // Convert events to consolidated JSON array
41
+ const events = span.events.map((e) => ({
42
+ timestamp: Math.floor(e.timestamp * 1000000),
43
+ name: e.name,
44
+ attributes: e.attributes || {},
45
+ }));
46
+ // Convert links to consolidated JSON array
47
+ const links = span.links.map((l) => ({
48
+ traceId: l.traceId,
49
+ spanId: l.spanId,
50
+ traceState: l.traceState || null,
51
+ attributes: l.attributes || {},
52
+ }));
53
+ return {
54
+ Timestamp: timestampNs,
55
+ TraceId: span.traceId,
56
+ SpanId: span.spanId,
57
+ ParentSpanId: span.parentSpanId || null,
58
+ TraceState: span.traceState || null,
59
+ SpanName: span.name,
60
+ SpanKind: span.kind,
61
+ ServiceName: span.serviceName || null,
62
+ ResourceAttributes: JSON.stringify(span.resourceAttributes || {}),
63
+ SpanAttributes: JSON.stringify(spanAttributes),
64
+ Duration: durationMs,
65
+ EndTime: span.endTime || null,
66
+ StatusCode: span.statusCode,
67
+ StatusMessage: span.statusMessage || null,
68
+ Events: JSON.stringify(events),
69
+ Links: JSON.stringify(links),
70
+ // Normalized columns
71
+ Type: span.type,
72
+ Model: span.model || "",
73
+ InputTokens: span.inputTokens || 0,
74
+ OutputTokens: span.outputTokens || 0,
75
+ TotalTokens: span.totalTokens || 0,
76
+ ReasoningTokens: span.reasoningTokens || 0,
77
+ Cost: cost,
78
+ Input: span.input ? JSON.stringify(span.input) : null,
79
+ Output: span.output || null,
80
+ OutputObject: span.outputObject ? JSON.stringify(span.outputObject) : null,
81
+ ToolCalls: span.toolCalls ? JSON.stringify(span.toolCalls) : null,
82
+ FinishReason: span.finishReason || null,
83
+ Settings: span.settings ? JSON.stringify(span.settings) : null,
84
+ SessionId: span.sessionId || "",
85
+ SessionName: span.sessionName || "",
86
+ UserId: span.userId || "",
87
+ TraceName: span.traceName || "",
88
+ DatasetRunId: span.datasetRunId || "",
89
+ DatasetRunName: span.datasetRunName || "",
90
+ DatasetPath: span.datasetPath || "",
91
+ DatasetItemName: span.datasetItemName || "",
92
+ DatasetExpectedOutput: span.datasetExpectedOutput || "",
93
+ PromptName: span.promptName || "",
94
+ Props: span.props || null,
95
+ Metadata: span.metadata ? JSON.stringify(span.metadata) : null,
96
+ };
97
+ }
98
+ const exportTraces = (normalizedSpans) => __awaiter(void 0, void 0, void 0, function* () {
99
+ // Insert array of normalized spans into sqlite3 using transaction and prepared statement
100
+ const insert = database_1.default.prepare(`
101
+ INSERT INTO traces (
102
+ Timestamp, TraceId, SpanId, ParentSpanId, TraceState, SpanName, SpanKind, ServiceName,
103
+ ResourceAttributes, SpanAttributes, Duration, EndTime, StatusCode, StatusMessage,
104
+ Events, Links,
105
+ Type, Model, InputTokens, OutputTokens, TotalTokens, ReasoningTokens, Cost,
106
+ Input, Output, OutputObject, ToolCalls, FinishReason, Settings,
107
+ SessionId, SessionName, UserId, TraceName,
108
+ DatasetRunId, DatasetRunName, DatasetPath, DatasetItemName, DatasetExpectedOutput,
109
+ PromptName, Props, Metadata
110
+ )
111
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
112
+ `);
113
+ // Get model cost mappings once before the transaction
114
+ const modelsCostMapping = yield (0, cost_mapping_1.getModelCostMappings)();
115
+ const insertMany = database_1.default.transaction((spans) => {
116
+ for (const span of spans) {
117
+ const row = normalizedSpanToSqliteRow(span, modelsCostMapping);
118
+ insert.run(row.Timestamp, row.TraceId, row.SpanId, row.ParentSpanId, row.TraceState, row.SpanName, row.SpanKind, row.ServiceName, row.ResourceAttributes, row.SpanAttributes, row.Duration, row.EndTime, row.StatusCode, row.StatusMessage, row.Events, row.Links, row.Type, row.Model, row.InputTokens, row.OutputTokens, row.TotalTokens, row.ReasoningTokens, row.Cost, row.Input, row.Output, row.OutputObject, row.ToolCalls, row.FinishReason, row.Settings, row.SessionId, row.SessionName, row.UserId, row.TraceName, row.DatasetRunId, row.DatasetRunName, row.DatasetPath, row.DatasetItemName, row.DatasetExpectedOutput, row.PromptName, row.Props, row.Metadata);
119
+ }
120
+ });
121
+ insertMany(normalizedSpans);
122
+ });
123
+ exports.exportTraces = exportTraces;
124
+ const getRequests = () => __awaiter(void 0, void 0, void 0, function* () {
125
+ const sql = `
126
+ SELECT
127
+ SpanId AS id,
128
+ TraceId AS trace_id,
129
+ SpanKind AS span_kind,
130
+ Duration AS latency_ms,
131
+ SpanName AS span_name,
132
+ cast(Timestamp as Real) / 1000000 AS ts,
133
+ PromptName AS prompt_name,
134
+ UserId AS user_id,
135
+ Props AS props,
136
+ CASE
137
+ WHEN Output IS NOT NULL AND Output != '' THEN Output
138
+ WHEN OutputObject IS NOT NULL AND OutputObject != '' THEN OutputObject
139
+ ELSE ToolCalls
140
+ END AS output,
141
+ Input AS input,
142
+ DatasetRunId AS dataset_run_id,
143
+ DatasetItemName AS dataset_item_name,
144
+ DatasetExpectedOutput AS dataset_expected_output,
145
+ Model AS model_used,
146
+ StatusCode AS status,
147
+ StatusMessage AS status_message,
148
+ -- total_tokens = prompt_tokens + completion_tokens
149
+ (COALESCE(InputTokens, 0) + COALESCE(OutputTokens, 0)) AS total_tokens,
150
+ COALESCE(InputTokens, 0) AS prompt_tokens,
151
+ COALESCE(OutputTokens, 0) AS completion_tokens,
152
+ COALESCE(Cost, 0.0) AS cost
153
+ FROM traces
154
+ WHERE Type = 'GENERATION'
155
+ ORDER BY ts DESC
156
+ `;
157
+ const rows = database_1.default.prepare(sql).all();
158
+ return rows;
159
+ });
160
+ exports.getRequests = getRequests;
161
+ const getTraces = () => __awaiter(void 0, void 0, void 0, function* () {
162
+ const sql = `
163
+ WITH
164
+ trace_costs_and_tokens AS (
165
+ SELECT
166
+ TraceId AS id,
167
+ SUM(COALESCE(InputTokens, 0) + COALESCE(OutputTokens, 0)) AS tokens,
168
+ SUM(COALESCE(Cost, 0.0)) AS cost
169
+ FROM traces
170
+ WHERE Type = 'GENERATION'
171
+ GROUP BY TraceId
172
+ ),
173
+
174
+ traces_cte AS (
175
+ SELECT
176
+ TraceId AS id,
177
+ cast(MIN(Timestamp) as Real) / 1000000 AS start,
178
+ cast(MAX(Timestamp) as Real) / 1000000 AS end,
179
+ MAX(CASE
180
+ WHEN StatusCode = '2.0' THEN '2'
181
+ WHEN StatusCode = '2' THEN '2'
182
+ WHEN StatusCode = '1.0' THEN '1'
183
+ WHEN StatusCode = '1' THEN '1'
184
+ ELSE '0'
185
+ END) AS status,
186
+ MIN(DatasetRunId) AS dataset_run_id,
187
+ MIN(DatasetPath) AS dataset_path
188
+ FROM traces
189
+ GROUP BY TraceId
190
+ ),
191
+
192
+ trace_metadata AS (
193
+ SELECT
194
+ t.TraceId AS id,
195
+ COALESCE(
196
+ MAX(NULLIF(t.TraceName, '')),
197
+ MAX(t.SpanName)
198
+ ) AS name,
199
+ MAX(t.StatusMessage) AS status_message,
200
+ MAX(t.Duration) AS latency
201
+ FROM traces t
202
+ LEFT JOIN traces c
203
+ ON c.SpanId = t.ParentSpanId
204
+ WHERE c.SpanId IS NULL
205
+ GROUP BY t.TraceId
206
+ )
207
+
208
+ SELECT
209
+ t.id,
210
+ t.dataset_run_id,
211
+ t.dataset_path,
212
+ t.start,
213
+ t.end,
214
+ t.status,
215
+ c.cost,
216
+ c.tokens,
217
+ m.name,
218
+ m.latency,
219
+ m.status_message
220
+ FROM traces_cte t
221
+ LEFT JOIN trace_costs_and_tokens c ON t.id = c.id
222
+ LEFT JOIN trace_metadata m ON t.id = m.id
223
+ ORDER BY t.start DESC;
224
+ `;
225
+ const rows = database_1.default.prepare(sql).all();
226
+ return rows;
227
+ });
228
+ exports.getTraces = getTraces;
229
+ const getSpans = (traceId) => __awaiter(void 0, void 0, void 0, function* () {
230
+ const sql = `
231
+ SELECT
232
+ SpanId AS id,
233
+ SpanName AS name,
234
+ Duration AS duration,
235
+ ParentSpanId AS parent_id,
236
+ CAST(Timestamp AS REAL) AS timestamp,
237
+ TraceId AS trace_id,
238
+ CASE
239
+ WHEN StatusCode = '2.0' THEN '2'
240
+ WHEN StatusCode = '2' THEN '2'
241
+ WHEN StatusCode = '1.0' THEN '1'
242
+ WHEN StatusCode = '1' THEN '1'
243
+ ELSE '0'
244
+ END AS status_code,
245
+ StatusMessage AS status_message,
246
+ SpanAttributes AS attributes,
247
+ Type AS type,
248
+ Model AS model,
249
+ InputTokens AS inputTokens,
250
+ OutputTokens AS outputTokens,
251
+ TotalTokens AS totalTokens,
252
+ ReasoningTokens AS reasoningTokens,
253
+ Cost AS cost,
254
+ Input AS input,
255
+ Output AS output,
256
+ OutputObject AS outputObject,
257
+ ToolCalls AS toolCalls,
258
+ FinishReason AS finishReason,
259
+ Settings AS settings,
260
+ SessionId AS sessionId,
261
+ SessionName AS sessionName,
262
+ UserId AS userId,
263
+ TraceName AS traceName,
264
+ PromptName AS promptName,
265
+ Props AS props,
266
+ SpanKind AS spanKind,
267
+ ServiceName AS serviceName,
268
+ Metadata AS metadata
269
+ FROM traces
270
+ WHERE TraceId = ?
271
+ ORDER BY CAST(Timestamp AS REAL) ASC
272
+ `;
273
+ const rows = database_1.default.prepare(sql).all(traceId);
274
+ return rows.map((row) => {
275
+ var _a, _b, _c, _d, _e;
276
+ // Parse SpanAttributes JSON
277
+ let spanAttributes = {};
278
+ try {
279
+ if (row.attributes) {
280
+ spanAttributes =
281
+ typeof row.attributes === "string"
282
+ ? JSON.parse(row.attributes)
283
+ : row.attributes;
284
+ }
285
+ }
286
+ catch (_f) {
287
+ // If parsing fails, keep empty object
288
+ }
289
+ // Map all flat fields to data object matching SpanData type
290
+ const data = {
291
+ type: row.type || undefined,
292
+ model: row.model || undefined,
293
+ inputTokens: (_a = row.inputTokens) !== null && _a !== void 0 ? _a : undefined,
294
+ outputTokens: (_b = row.outputTokens) !== null && _b !== void 0 ? _b : undefined,
295
+ totalTokens: (_c = row.totalTokens) !== null && _c !== void 0 ? _c : undefined,
296
+ reasoningTokens: (_d = row.reasoningTokens) !== null && _d !== void 0 ? _d : undefined,
297
+ cost: (_e = row.cost) !== null && _e !== void 0 ? _e : undefined,
298
+ input: row.input || undefined,
299
+ output: row.output || undefined,
300
+ outputObject: row.outputObject || undefined,
301
+ toolCalls: row.toolCalls || undefined,
302
+ finishReason: row.finishReason || undefined,
303
+ settings: row.settings || undefined,
304
+ sessionId: row.sessionId || undefined,
305
+ sessionName: row.sessionName || undefined,
306
+ userId: row.userId || undefined,
307
+ traceName: row.traceName || undefined,
308
+ promptName: row.promptName || undefined,
309
+ props: row.props || undefined,
310
+ attributes: JSON.stringify(spanAttributes), // Include all attributes
311
+ statusMessage: row.status_message || undefined,
312
+ status: row.status_code,
313
+ spanKind: row.spanKind || undefined,
314
+ serviceName: row.serviceName || undefined,
315
+ duration: row.duration || 0,
316
+ metadata: row.metadata ? JSON.parse(row.metadata) : undefined,
317
+ };
318
+ // Convert timestamp from microseconds to milliseconds (JavaScript standard)
319
+ const timestampMs = row.timestamp ? Math.floor(row.timestamp / 1000) : 0;
320
+ return {
321
+ id: row.id,
322
+ name: row.name,
323
+ duration: row.duration || 0,
324
+ parentId: row.parent_id || undefined,
325
+ timestamp: timestampMs,
326
+ traceId: row.trace_id,
327
+ status: row.status_code,
328
+ data,
329
+ };
330
+ });
331
+ });
332
+ exports.getSpans = getSpans;
333
+ const getTraceById = (traceId) => __awaiter(void 0, void 0, void 0, function* () {
334
+ const traceSql = `
335
+ WITH
336
+ trace_costs_and_tokens AS (
337
+ SELECT
338
+ TraceId AS id,
339
+ SUM(COALESCE(InputTokens, 0) + COALESCE(OutputTokens, 0)) AS tokens,
340
+ SUM(COALESCE(Cost, 0.0)) AS cost
341
+ FROM traces
342
+ WHERE Type = 'GENERATION'
343
+ GROUP BY TraceId
344
+ ),
345
+
346
+ traces_cte AS (
347
+ SELECT
348
+ TraceId AS id,
349
+ cast(MIN(Timestamp) as Real) / 1000000 AS start,
350
+ cast(MAX(Timestamp) as Real) / 1000000 AS end,
351
+ MAX(CASE
352
+ WHEN StatusCode = '2.0' THEN '2'
353
+ WHEN StatusCode = '2' THEN '2'
354
+ WHEN StatusCode = '1.0' THEN '1'
355
+ WHEN StatusCode = '1' THEN '1'
356
+ ELSE '0'
357
+ END) AS status,
358
+ MIN(DatasetRunId) AS dataset_run_id,
359
+ MIN(DatasetPath) AS dataset_path
360
+ FROM traces
361
+ GROUP BY TraceId
362
+ ),
363
+
364
+ trace_metadata AS (
365
+ SELECT
366
+ t.TraceId AS id,
367
+ COALESCE(
368
+ MAX(NULLIF(t.TraceName, '')),
369
+ MAX(t.SpanName)
370
+ ) AS name,
371
+ MAX(t.StatusMessage) AS status_message,
372
+ MAX(t.Duration) AS latency
373
+ FROM traces t
374
+ LEFT JOIN traces c
375
+ ON c.SpanId = t.ParentSpanId
376
+ WHERE c.SpanId IS NULL
377
+ GROUP BY t.TraceId
378
+ )
379
+
380
+ SELECT
381
+ t.id AS trace_id,
382
+ t.start,
383
+ t.end,
384
+ t.status,
385
+ t.dataset_run_id,
386
+ t.dataset_path,
387
+ c.tokens AS trace_tokens,
388
+ c.cost AS trace_cost,
389
+ m.name AS trace_name,
390
+ m.latency AS trace_latency,
391
+ m.status_message AS trace_status_message
392
+ FROM traces_cte t
393
+ LEFT JOIN trace_costs_and_tokens c ON t.id = c.id
394
+ LEFT JOIN trace_metadata m ON t.id = m.id
395
+ WHERE t.id = :traceId
396
+ ORDER BY t.start DESC;
397
+ `;
398
+ const traceRow = database_1.default.prepare(traceSql).get({ traceId });
399
+ if (!traceRow)
400
+ return null;
401
+ // Fetch spans separately
402
+ const spans = yield (0, exports.getSpans)(traceId);
403
+ return {
404
+ id: traceRow.trace_id,
405
+ name: traceRow.trace_name,
406
+ spans,
407
+ data: {
408
+ id: traceRow.trace_id,
409
+ name: traceRow.trace_name,
410
+ status: traceRow.status,
411
+ latency: traceRow.trace_latency,
412
+ cost: traceRow.trace_cost,
413
+ tokens: traceRow.trace_tokens,
414
+ start: traceRow.start,
415
+ end: traceRow.end,
416
+ status_message: traceRow.trace_status_message,
417
+ },
418
+ };
419
+ });
420
+ exports.getTraceById = getTraceById;
421
+ const getTraceGraph = (traceId) => __awaiter(void 0, void 0, void 0, function* () {
422
+ const sql = `
423
+ SELECT
424
+ SpanId AS span_id,
425
+ SpanName AS span_name,
426
+ Metadata AS metadata
427
+ FROM traces
428
+ WHERE TraceId = ?
429
+ AND json_extract(json(Metadata), '$."graph.node.id"') != ''
430
+ AND json_extract(json(Metadata), '$."graph.node.id"') IS NOT NULL
431
+ ORDER BY CAST(Timestamp AS REAL) ASC
432
+ `;
433
+ const rows = database_1.default.prepare(sql).all(traceId);
434
+ const graphData = [];
435
+ for (const row of rows) {
436
+ // Parse Metadata JSON
437
+ let metadata = {};
438
+ try {
439
+ if (row.metadata) {
440
+ metadata =
441
+ typeof row.metadata === "string"
442
+ ? JSON.parse(row.metadata)
443
+ : row.metadata;
444
+ }
445
+ }
446
+ catch (_a) {
447
+ // If parsing fails, skip this row
448
+ continue;
449
+ }
450
+ const nodeId = metadata["graph.node.id"] || "";
451
+ if (!nodeId)
452
+ continue;
453
+ // Handle parent_id - can be single value or array
454
+ let parentNodeId;
455
+ const parentIds = JSON.parse(metadata["graph.node.parent_ids"] || "[]");
456
+ const parentId = metadata["graph.node.parent_id"];
457
+ if (Array.isArray(parentIds) && parentIds.length > 0) {
458
+ parentNodeId = parentIds;
459
+ }
460
+ else if (parentId && parentId !== "") {
461
+ parentNodeId = parentId;
462
+ }
463
+ const displayName = metadata["graph.node.display_name"] || "";
464
+ const nodeType = metadata["graph.node.type"] || "";
465
+ if (Array.isArray(parentNodeId)) {
466
+ parentNodeId.forEach((id) => {
467
+ graphData.push({
468
+ parentNodeId: id,
469
+ nodeId,
470
+ spanId: row.span_id,
471
+ nodeType,
472
+ displayName,
473
+ spanName: row.span_name,
474
+ });
475
+ });
476
+ }
477
+ else {
478
+ graphData.push({
479
+ parentNodeId,
480
+ nodeId,
481
+ spanId: row.span_id,
482
+ nodeType,
483
+ displayName,
484
+ spanName: row.span_name,
485
+ });
486
+ }
487
+ }
488
+ return graphData;
489
+ });
490
+ exports.getTraceGraph = getTraceGraph;
491
+ const getSessions = () => __awaiter(void 0, void 0, void 0, function* () {
492
+ const sql = `
493
+ WITH session_spans AS (
494
+ SELECT
495
+ TRIM(SessionId) AS id,
496
+ CAST(Timestamp AS REAL) / 1000000 AS timestamp,
497
+ SessionName AS session_name
498
+ FROM traces
499
+ WHERE SessionId IS NOT NULL
500
+ AND SessionId != ''
501
+ AND SessionId != 'null'
502
+ )
503
+ SELECT
504
+ id,
505
+ MIN(timestamp) AS start,
506
+ MAX(timestamp) AS end,
507
+ MIN(CASE
508
+ WHEN session_name IS NOT NULL AND session_name != ''
509
+ THEN session_name
510
+ ELSE NULL
511
+ END) AS name
512
+ FROM session_spans
513
+ WHERE id IS NOT NULL AND id != ''
514
+ GROUP BY id
515
+ ORDER BY start DESC
516
+ `;
517
+ const rows = database_1.default.prepare(sql).all();
518
+ return rows;
519
+ });
520
+ exports.getSessions = getSessions;
521
+ const getTracesBySessionId = (sessionId) => __awaiter(void 0, void 0, void 0, function* () {
522
+ // First, get all unique trace IDs for this session
523
+ const traceIdsSql = `
524
+ SELECT DISTINCT TraceId
525
+ FROM traces
526
+ WHERE SessionId = ?
527
+ `;
528
+ const traceIdRows = database_1.default.prepare(traceIdsSql).all(sessionId);
529
+ const traceIds = traceIdRows.map((row) => row.TraceId);
530
+ if (traceIds.length === 0) {
531
+ return [];
532
+ }
533
+ // Get all traces for these trace IDs
534
+ const traces = [];
535
+ for (const traceId of traceIds) {
536
+ const trace = yield (0, exports.getTraceById)(traceId);
537
+ if (trace) {
538
+ traces.push(trace);
539
+ }
540
+ }
541
+ return traces;
542
+ });
543
+ exports.getTracesBySessionId = getTracesBySessionId;
544
+ const getTracesByRunId = (runId) => __awaiter(void 0, void 0, void 0, function* () {
545
+ // Return traces in the same aggregated format as getTraces(), filtered by runId
546
+ const sql = `
547
+ WITH
548
+ trace_costs_and_tokens AS (
549
+ SELECT
550
+ TraceId AS id,
551
+ SUM(COALESCE(InputTokens, 0) + COALESCE(OutputTokens, 0)) AS tokens,
552
+ SUM(COALESCE(Cost, 0.0)) AS cost
553
+ FROM traces
554
+ WHERE Type = 'GENERATION'
555
+ GROUP BY TraceId
556
+ ),
557
+
558
+ traces_cte AS (
559
+ SELECT
560
+ TraceId AS id,
561
+ cast(MIN(Timestamp) as Real) / 1000000 AS start,
562
+ cast(MAX(Timestamp) as Real) / 1000000 AS end,
563
+ MAX(CASE
564
+ WHEN StatusCode = '2.0' THEN '2'
565
+ WHEN StatusCode = '2' THEN '2'
566
+ WHEN StatusCode = '1.0' THEN '1'
567
+ WHEN StatusCode = '1' THEN '1'
568
+ ELSE '0'
569
+ END) AS status,
570
+ MIN(DatasetRunId) AS dataset_run_id,
571
+ MIN(DatasetPath) AS dataset_path
572
+ FROM traces
573
+ GROUP BY TraceId
574
+ ),
575
+
576
+ trace_metadata AS (
577
+ SELECT
578
+ t.TraceId AS id,
579
+ COALESCE(
580
+ MAX(NULLIF(t.TraceName, '')),
581
+ MAX(t.SpanName)
582
+ ) AS name,
583
+ MAX(t.StatusMessage) AS status_message,
584
+ MAX(t.Duration) AS latency
585
+ FROM traces t
586
+ LEFT JOIN traces c
587
+ ON c.SpanId = t.ParentSpanId
588
+ WHERE c.SpanId IS NULL
589
+ GROUP BY t.TraceId
590
+ )
591
+
592
+ SELECT
593
+ t.id,
594
+ t.dataset_run_id,
595
+ t.dataset_path,
596
+ t.start,
597
+ t.end,
598
+ t.status,
599
+ c.cost,
600
+ c.tokens,
601
+ m.name,
602
+ m.latency,
603
+ m.status_message
604
+ FROM traces_cte t
605
+ LEFT JOIN trace_costs_and_tokens c ON t.id = c.id
606
+ LEFT JOIN trace_metadata m ON t.id = m.id
607
+ WHERE t.dataset_run_id = ?
608
+ ORDER BY t.start DESC;
609
+ `;
610
+ const rows = database_1.default.prepare(sql).all(runId);
611
+ return rows;
612
+ });
613
+ exports.getTracesByRunId = getTracesByRunId;
614
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../cli-src/server/routes/traces/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,qEAG4C;AAC5C,8DAAgC;AAGhC;;GAEG;AACH,SAAS,yBAAyB,CAChC,IAAoB,EACpB,iBAGC;IAED,+EAA+E;IAC/E,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;IAEpE,4DAA4D;IAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAE7C,mDAAmD;IACnD,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;IAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,KAAK,GAAG,CAAC;IAC1C,MAAM,cAAc,qBAAQ,IAAI,CAAC,cAAc,CAAE,CAAC;IAElD,IACE,IAAI,CAAC,KAAK;QACV,IAAI,CAAC,WAAW,KAAK,SAAS;QAC9B,IAAI,CAAC,YAAY,KAAK,SAAS,EAC/B,CAAC;QACD,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAClE,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,IAAA,6BAAc,EAC5B,MAAM,CAAC,QAAQ,CAAC,WAAW,IAAI,CAAC,CAAC,EACjC,MAAM,CAAC,QAAQ,CAAC,eAAe,IAAI,CAAC,CAAC,EACrC,IAAI,CACL,CAAC;YACF,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,EAAE,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC;QAChE,CAAC;QACD,cAAc,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAAC;IAC7C,CAAC;IAED,4CAA4C;IAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACrC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,GAAG,OAAO,CAAC;QAC5C,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,EAAE;KAC/B,CAAC,CAAC,CAAC;IAEJ,2CAA2C;IAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACnC,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,IAAI;QAChC,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,EAAE;KAC/B,CAAC,CAAC,CAAC;IAEJ,OAAO;QACL,SAAS,EAAE,WAAW;QACtB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,IAAI;QACvC,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI;QACnC,QAAQ,EAAE,IAAI,CAAC,IAAI;QACnB,QAAQ,EAAE,IAAI,CAAC,IAAI;QACnB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;QACrC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,IAAI,EAAE,CAAC;QACjE,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;QAC9C,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI;QAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,IAAI;QACzC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QAC9B,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QAC5B,qBAAqB;QACrB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;QACvB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,CAAC;QAClC,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,CAAC;QACpC,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,CAAC;QAClC,eAAe,EAAE,IAAI,CAAC,eAAe,IAAI,CAAC;QAC1C,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI;QACrD,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI;QAC3B,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI;QAC1E,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI;QACjE,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,IAAI;QACvC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;QAC9D,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE;QAC/B,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;QACnC,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;QACzB,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE;QAC/B,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,EAAE;QACrC,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI,EAAE;QACzC,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;QACnC,eAAe,EAAE,IAAI,CAAC,eAAe,IAAI,EAAE;QAC3C,qBAAqB,EAAE,IAAI,CAAC,qBAAqB,IAAI,EAAE;QACvD,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE;QACjC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI;QACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;KAC/D,CAAC;AACJ,CAAC;AAEM,MAAM,YAAY,GAAG,CAAO,eAAiC,EAAE,EAAE;IACtE,yFAAyF;IACzF,MAAM,MAAM,GAAG,kBAAE,CAAC,OAAO,CACvB;;;;;;;;;;;;KAYC,CACF,CAAC;IAEF,sDAAsD;IACtD,MAAM,iBAAiB,GAAG,MAAM,IAAA,mCAAoB,GAAE,CAAC;IAEvD,MAAM,UAAU,GAAG,kBAAE,CAAC,WAAW,CAAC,CAAC,KAAuB,EAAE,EAAE;QAC5D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,yBAAyB,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;YAC/D,MAAM,CAAC,GAAG,CACR,GAAG,CAAC,SAAS,EACb,GAAG,CAAC,OAAO,EACX,GAAG,CAAC,MAAM,EACV,GAAG,CAAC,YAAY,EAChB,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,QAAQ,EACZ,GAAG,CAAC,QAAQ,EACZ,GAAG,CAAC,WAAW,EACf,GAAG,CAAC,kBAAkB,EACtB,GAAG,CAAC,cAAc,EAClB,GAAG,CAAC,QAAQ,EACZ,GAAG,CAAC,OAAO,EACX,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,aAAa,EACjB,GAAG,CAAC,MAAM,EACV,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,IAAI,EACR,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,WAAW,EACf,GAAG,CAAC,YAAY,EAChB,GAAG,CAAC,WAAW,EACf,GAAG,CAAC,eAAe,EACnB,GAAG,CAAC,IAAI,EACR,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,MAAM,EACV,GAAG,CAAC,YAAY,EAChB,GAAG,CAAC,SAAS,EACb,GAAG,CAAC,YAAY,EAChB,GAAG,CAAC,QAAQ,EACZ,GAAG,CAAC,SAAS,EACb,GAAG,CAAC,WAAW,EACf,GAAG,CAAC,MAAM,EACV,GAAG,CAAC,SAAS,EACb,GAAG,CAAC,YAAY,EAChB,GAAG,CAAC,cAAc,EAClB,GAAG,CAAC,WAAW,EACf,GAAG,CAAC,eAAe,EACnB,GAAG,CAAC,qBAAqB,EACzB,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,QAAQ,CACb,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IACH,UAAU,CAAC,eAAe,CAAC,CAAC;AAC9B,CAAC,CAAA,CAAC;AAtEW,QAAA,YAAY,gBAsEvB;AAEK,MAAM,WAAW,GAAG,GAAS,EAAE;IACpC,MAAM,GAAG,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BX,CAAC;IAEF,MAAM,IAAI,GAAG,kBAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IAEnC,OAAO,IAAI,CAAC;AACd,CAAC,CAAA,CAAC;AArCW,QAAA,WAAW,eAqCtB;AAEK,MAAM,SAAS,GAAG,GAAS,EAAE;IAClC,MAAM,GAAG,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8DX,CAAC;IAEF,MAAM,IAAI,GAAG,kBAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IACnC,OAAO,IAAI,CAAC;AACd,CAAC,CAAA,CAAC;AAnEW,QAAA,SAAS,aAmEpB;AAEK,MAAM,QAAQ,GAAG,CAAO,OAAe,EAAE,EAAE;IAChD,MAAM,GAAG,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CX,CAAC;IAEF,MAAM,IAAI,GAAG,kBAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAU,CAAC;IAEnD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;;QACtB,4BAA4B;QAC5B,IAAI,cAAc,GAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;gBACnB,cAAc;oBACZ,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ;wBAChC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC;wBAC5B,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC;YACvB,CAAC;QACH,CAAC;QAAC,WAAM,CAAC;YACP,sCAAsC;QACxC,CAAC;QAED,4DAA4D;QAC5D,MAAM,IAAI,GAAQ;YAChB,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,SAAS;YAC3B,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,SAAS;YAC7B,WAAW,EAAE,MAAA,GAAG,CAAC,WAAW,mCAAI,SAAS;YACzC,YAAY,EAAE,MAAA,GAAG,CAAC,YAAY,mCAAI,SAAS;YAC3C,WAAW,EAAE,MAAA,GAAG,CAAC,WAAW,mCAAI,SAAS;YACzC,eAAe,EAAE,MAAA,GAAG,CAAC,eAAe,mCAAI,SAAS;YACjD,IAAI,EAAE,MAAA,GAAG,CAAC,IAAI,mCAAI,SAAS;YAC3B,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,SAAS;YAC7B,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,SAAS;YAC/B,YAAY,EAAE,GAAG,CAAC,YAAY,IAAI,SAAS;YAC3C,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,SAAS;YACrC,YAAY,EAAE,GAAG,CAAC,YAAY,IAAI,SAAS;YAC3C,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,SAAS;YACnC,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,SAAS;YACrC,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,SAAS;YACzC,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,SAAS;YAC/B,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,SAAS;YACrC,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,SAAS;YACvC,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,SAAS;YAC7B,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,yBAAyB;YACrE,aAAa,EAAE,GAAG,CAAC,cAAc,IAAI,SAAS;YAC9C,MAAM,EAAE,GAAG,CAAC,WAAW;YACvB,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,SAAS;YACnC,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,SAAS;YACzC,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,CAAC;YAC3B,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;SAC9D,CAAC;QAEF,4EAA4E;QAC5E,MAAM,WAAW,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzE,OAAO;YACL,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,CAAC;YAC3B,QAAQ,EAAE,GAAG,CAAC,SAAS,IAAI,SAAS;YACpC,SAAS,EAAE,WAAW;YACtB,OAAO,EAAE,GAAG,CAAC,QAAQ;YACrB,MAAM,EAAE,GAAG,CAAC,WAAW;YACvB,IAAI;SACL,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAA,CAAC;AAzGW,QAAA,QAAQ,YAyGnB;AAEK,MAAM,YAAY,GAAG,CAAO,OAAe,EAAE,EAAE;IACpD,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+DhB,CAAC;IAEF,MAAM,QAAQ,GAAG,kBAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAQ,CAAC;IAE9D,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,yBAAyB;IACzB,MAAM,KAAK,GAAG,MAAM,IAAA,gBAAQ,EAAC,OAAO,CAAC,CAAC;IAEtC,OAAO;QACL,EAAE,EAAE,QAAQ,CAAC,QAAQ;QACrB,IAAI,EAAE,QAAQ,CAAC,UAAU;QACzB,KAAK;QACL,IAAI,EAAE;YACJ,EAAE,EAAE,QAAQ,CAAC,QAAQ;YACrB,IAAI,EAAE,QAAQ,CAAC,UAAU;YACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,OAAO,EAAE,QAAQ,CAAC,aAAa;YAC/B,IAAI,EAAE,QAAQ,CAAC,UAAU;YACzB,MAAM,EAAE,QAAQ,CAAC,YAAY;YAC7B,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,GAAG,EAAE,QAAQ,CAAC,GAAG;YACjB,cAAc,EAAE,QAAQ,CAAC,oBAAoB;SAC9C;KACF,CAAC;AACJ,CAAC,CAAA,CAAC;AAzFW,QAAA,YAAY,gBAyFvB;AAEK,MAAM,aAAa,GAAG,CAAO,OAAe,EAAE,EAAE;IACrD,MAAM,GAAG,GAAG;;;;;;;;;;GAUX,CAAC;IAEF,MAAM,IAAI,GAAG,kBAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAU,CAAC;IAEnD,MAAM,SAAS,GAOV,EAAE,CAAC;IAER,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,sBAAsB;QACtB,IAAI,QAAQ,GAAQ,EAAE,CAAC;QACvB,IAAI,CAAC;YACH,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;gBACjB,QAAQ;oBACN,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ;wBAC9B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;wBAC1B,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC;YACrB,CAAC;QACH,CAAC;QAAC,WAAM,CAAC;YACP,kCAAkC;YAClC,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAG,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;QAC/C,IAAI,CAAC,MAAM;YAAE,SAAS;QAEtB,kDAAkD;QAClD,IAAI,YAAgD,CAAC;QACrD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,uBAAuB,CAAC,IAAI,IAAI,CAAC,CAAC;QACxE,MAAM,QAAQ,GAAG,QAAQ,CAAC,sBAAsB,CAAC,CAAC;QAElD,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrD,YAAY,GAAG,SAAS,CAAC;QAC3B,CAAC;aAAM,IAAI,QAAQ,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;YACvC,YAAY,GAAG,QAAQ,CAAC;QAC1B,CAAC;QAED,MAAM,WAAW,GAAG,QAAQ,CAAC,yBAAyB,CAAC,IAAI,EAAE,CAAC;QAC9D,MAAM,QAAQ,GAAG,QAAQ,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;QAEnD,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;gBAC1B,SAAS,CAAC,IAAI,CAAC;oBACb,YAAY,EAAE,EAAE;oBAChB,MAAM;oBACN,MAAM,EAAE,GAAG,CAAC,OAAO;oBACnB,QAAQ;oBACR,WAAW;oBACX,QAAQ,EAAE,GAAG,CAAC,SAAS;iBACxB,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,IAAI,CAAC;gBACb,YAAY;gBACZ,MAAM;gBACN,MAAM,EAAE,GAAG,CAAC,OAAO;gBACnB,QAAQ;gBACR,WAAW;gBACX,QAAQ,EAAE,GAAG,CAAC,SAAS;aACxB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAA,CAAC;AAhFW,QAAA,aAAa,iBAgFxB;AAEK,MAAM,WAAW,GAAG,GAAS,EAAE;IACpC,MAAM,GAAG,GAAG;;;;;;;;;;;;;;;;;;;;;;;;GAwBX,CAAC;IAEF,MAAM,IAAI,GAAG,kBAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAW,CAAC;IAC5C,OAAO,IAAI,CAAC;AACd,CAAC,CAAA,CAAC;AA7BW,QAAA,WAAW,eA6BtB;AAEK,MAAM,oBAAoB,GAAG,CAAO,SAAiB,EAAE,EAAE;IAC9D,mDAAmD;IACnD,MAAM,WAAW,GAAG;;;;GAInB,CAAC;IAEF,MAAM,WAAW,GAAG,kBAAE,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,SAAS,CAEvD,CAAC;IACH,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAEvD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,qCAAqC;IACrC,MAAM,MAAM,GAAU,EAAE,CAAC;IACzB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,MAAM,IAAA,oBAAY,EAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAA,CAAC;AA3BW,QAAA,oBAAoB,wBA2B/B;AAEK,MAAM,gBAAgB,GAAG,CAAO,KAAa,EAAE,EAAE;IACtD,gFAAgF;IAChF,MAAM,GAAG,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+DX,CAAC;IAEF,MAAM,IAAI,GAAG,kBAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACxC,OAAO,IAAI,CAAC;AACd,CAAC,CAAA,CAAC;AArEW,QAAA,gBAAgB,oBAqE3B"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Tunnel management for exposing local development servers publicly.
3
+ * Uses localtunnel for free, no-auth public access.
4
+ */
5
+ export interface TunnelInfo {
6
+ url: string;
7
+ provider: 'localtunnel';
8
+ disconnect: () => Promise<void>;
9
+ }
10
+ /**
11
+ * Creates a public tunnel to a local port using localtunnel.
12
+ * Includes retry logic for transient errors.
13
+ *
14
+ * @param port - Local port to expose
15
+ * @param subdomain - Optional subdomain to request (not guaranteed)
16
+ * @param maxRetries - Maximum number of retry attempts (default: 3)
17
+ * @returns Tunnel information with URL and disconnect function
18
+ */
19
+ export declare function createTunnel(port: number, subdomain?: string, maxRetries?: number): Promise<TunnelInfo>;