@jamesaphoenix/tx-cli 0.4.3

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 (138) hide show
  1. package/dist/cli-exit.d.ts +15 -0
  2. package/dist/cli-exit.d.ts.map +1 -0
  3. package/dist/cli-exit.js +18 -0
  4. package/dist/cli-exit.js.map +1 -0
  5. package/dist/cli.d.ts +8 -0
  6. package/dist/cli.d.ts.map +1 -0
  7. package/dist/cli.js +349 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/commands/attempt.d.ts +9 -0
  10. package/dist/commands/attempt.d.ts.map +1 -0
  11. package/dist/commands/attempt.js +93 -0
  12. package/dist/commands/attempt.js.map +1 -0
  13. package/dist/commands/bulk.d.ts +8 -0
  14. package/dist/commands/bulk.d.ts.map +1 -0
  15. package/dist/commands/bulk.js +168 -0
  16. package/dist/commands/bulk.js.map +1 -0
  17. package/dist/commands/claim.d.ts +39 -0
  18. package/dist/commands/claim.d.ts.map +1 -0
  19. package/dist/commands/claim.js +96 -0
  20. package/dist/commands/claim.js.map +1 -0
  21. package/dist/commands/compact.d.ts +17 -0
  22. package/dist/commands/compact.d.ts.map +1 -0
  23. package/dist/commands/compact.js +167 -0
  24. package/dist/commands/compact.js.map +1 -0
  25. package/dist/commands/coordinator.d.ts +12 -0
  26. package/dist/commands/coordinator.d.ts.map +1 -0
  27. package/dist/commands/coordinator.js +124 -0
  28. package/dist/commands/coordinator.js.map +1 -0
  29. package/dist/commands/cycle.d.ts +12 -0
  30. package/dist/commands/cycle.d.ts.map +1 -0
  31. package/dist/commands/cycle.js +109 -0
  32. package/dist/commands/cycle.js.map +1 -0
  33. package/dist/commands/daemon.d.ts +16 -0
  34. package/dist/commands/daemon.d.ts.map +1 -0
  35. package/dist/commands/daemon.js +635 -0
  36. package/dist/commands/daemon.js.map +1 -0
  37. package/dist/commands/dashboard.d.ts +12 -0
  38. package/dist/commands/dashboard.d.ts.map +1 -0
  39. package/dist/commands/dashboard.js +105 -0
  40. package/dist/commands/dashboard.js.map +1 -0
  41. package/dist/commands/dashboard.test.d.ts +2 -0
  42. package/dist/commands/dashboard.test.d.ts.map +1 -0
  43. package/dist/commands/dashboard.test.js +99 -0
  44. package/dist/commands/dashboard.test.js.map +1 -0
  45. package/dist/commands/dep.d.ts +9 -0
  46. package/dist/commands/dep.d.ts.map +1 -0
  47. package/dist/commands/dep.js +50 -0
  48. package/dist/commands/dep.js.map +1 -0
  49. package/dist/commands/doc.d.ts +10 -0
  50. package/dist/commands/doc.d.ts.map +1 -0
  51. package/dist/commands/doc.js +397 -0
  52. package/dist/commands/doc.js.map +1 -0
  53. package/dist/commands/doctor.d.ts +9 -0
  54. package/dist/commands/doctor.d.ts.map +1 -0
  55. package/dist/commands/doctor.js +168 -0
  56. package/dist/commands/doctor.js.map +1 -0
  57. package/dist/commands/graph.d.ts +58 -0
  58. package/dist/commands/graph.d.ts.map +1 -0
  59. package/dist/commands/graph.js +441 -0
  60. package/dist/commands/graph.js.map +1 -0
  61. package/dist/commands/hierarchy.d.ts +9 -0
  62. package/dist/commands/hierarchy.d.ts.map +1 -0
  63. package/dist/commands/hierarchy.js +68 -0
  64. package/dist/commands/hierarchy.js.map +1 -0
  65. package/dist/commands/hooks.d.ts +56 -0
  66. package/dist/commands/hooks.d.ts.map +1 -0
  67. package/dist/commands/hooks.js +365 -0
  68. package/dist/commands/hooks.js.map +1 -0
  69. package/dist/commands/invariant.d.ts +9 -0
  70. package/dist/commands/invariant.d.ts.map +1 -0
  71. package/dist/commands/invariant.js +126 -0
  72. package/dist/commands/invariant.js.map +1 -0
  73. package/dist/commands/learning.d.ts +16 -0
  74. package/dist/commands/learning.d.ts.map +1 -0
  75. package/dist/commands/learning.js +362 -0
  76. package/dist/commands/learning.js.map +1 -0
  77. package/dist/commands/migrate.d.ts +9 -0
  78. package/dist/commands/migrate.d.ts.map +1 -0
  79. package/dist/commands/migrate.js +56 -0
  80. package/dist/commands/migrate.js.map +1 -0
  81. package/dist/commands/orchestrator.d.ts +11 -0
  82. package/dist/commands/orchestrator.d.ts.map +1 -0
  83. package/dist/commands/orchestrator.js +129 -0
  84. package/dist/commands/orchestrator.js.map +1 -0
  85. package/dist/commands/stats.d.ts +8 -0
  86. package/dist/commands/stats.d.ts.map +1 -0
  87. package/dist/commands/stats.js +128 -0
  88. package/dist/commands/stats.js.map +1 -0
  89. package/dist/commands/sync-platform.d.ts +12 -0
  90. package/dist/commands/sync-platform.d.ts.map +1 -0
  91. package/dist/commands/sync-platform.js +74 -0
  92. package/dist/commands/sync-platform.js.map +1 -0
  93. package/dist/commands/sync.d.ts +8 -0
  94. package/dist/commands/sync.d.ts.map +1 -0
  95. package/dist/commands/sync.js +128 -0
  96. package/dist/commands/sync.js.map +1 -0
  97. package/dist/commands/task.d.ts +15 -0
  98. package/dist/commands/task.d.ts.map +1 -0
  99. package/dist/commands/task.js +233 -0
  100. package/dist/commands/task.js.map +1 -0
  101. package/dist/commands/test.d.ts +16 -0
  102. package/dist/commands/test.d.ts.map +1 -0
  103. package/dist/commands/test.js +112 -0
  104. package/dist/commands/test.js.map +1 -0
  105. package/dist/commands/trace.d.ts +39 -0
  106. package/dist/commands/trace.d.ts.map +1 -0
  107. package/dist/commands/trace.js +620 -0
  108. package/dist/commands/trace.js.map +1 -0
  109. package/dist/commands/validate.d.ts +9 -0
  110. package/dist/commands/validate.d.ts.map +1 -0
  111. package/dist/commands/validate.js +94 -0
  112. package/dist/commands/validate.js.map +1 -0
  113. package/dist/commands/worker.d.ts +10 -0
  114. package/dist/commands/worker.d.ts.map +1 -0
  115. package/dist/commands/worker.js +204 -0
  116. package/dist/commands/worker.js.map +1 -0
  117. package/dist/help.d.ts +3 -0
  118. package/dist/help.d.ts.map +1 -0
  119. package/dist/help.js +1366 -0
  120. package/dist/help.js.map +1 -0
  121. package/dist/output.d.ts +12 -0
  122. package/dist/output.d.ts.map +1 -0
  123. package/dist/output.js +76 -0
  124. package/dist/output.js.map +1 -0
  125. package/dist/tx +0 -0
  126. package/dist/utils/parse.d.ts +45 -0
  127. package/dist/utils/parse.d.ts.map +1 -0
  128. package/dist/utils/parse.js +79 -0
  129. package/dist/utils/parse.js.map +1 -0
  130. package/dist/utils/parse.test.d.ts +2 -0
  131. package/dist/utils/parse.test.d.ts.map +1 -0
  132. package/dist/utils/parse.test.js +140 -0
  133. package/dist/utils/parse.test.js.map +1 -0
  134. package/dist/version.d.ts +2 -0
  135. package/dist/version.d.ts.map +1 -0
  136. package/dist/version.js +10 -0
  137. package/dist/version.js.map +1 -0
  138. package/package.json +58 -0
@@ -0,0 +1,620 @@
1
+ /**
2
+ * Trace commands: list, show, transcript, stderr, errors
3
+ *
4
+ * CLI commands for execution tracing (PRD-019).
5
+ */
6
+ import { Effect } from "effect";
7
+ import { existsSync, readFileSync } from "node:fs";
8
+ import { join, resolve } from "node:path";
9
+ import { RunRepository, SqliteClient, getAdapter } from "@jamesaphoenix/tx-core";
10
+ import { toJson, truncate } from "../output.js";
11
+ import { commandHelp } from "../help.js";
12
+ import { flag, parseIntOpt } from "../utils/parse.js";
13
+ /**
14
+ * Calculate relative time string (e.g., "2h ago", "3d ago").
15
+ */
16
+ function relativeTime(date) {
17
+ const now = Date.now();
18
+ const diff = now - date.getTime();
19
+ const seconds = Math.floor(diff / 1000);
20
+ const minutes = Math.floor(seconds / 60);
21
+ const hours = Math.floor(minutes / 60);
22
+ const days = Math.floor(hours / 24);
23
+ if (days > 0)
24
+ return `${days}d ago`;
25
+ if (hours > 0)
26
+ return `${hours}h ago`;
27
+ if (minutes > 0)
28
+ return `${minutes}m ago`;
29
+ return "just now";
30
+ }
31
+ /**
32
+ * Get span counts for multiple runs in a single query.
33
+ */
34
+ const getSpanCountsForRuns = (db, runIds) => {
35
+ if (runIds.length === 0)
36
+ return new Map();
37
+ const placeholders = runIds.map(() => "?").join(",");
38
+ const rows = db.prepare(`
39
+ SELECT run_id, COUNT(*) as count
40
+ FROM events
41
+ WHERE run_id IN (${placeholders}) AND event_type = 'span'
42
+ GROUP BY run_id
43
+ `).all(...runIds);
44
+ const counts = new Map();
45
+ for (const row of rows) {
46
+ counts.set(row.run_id, row.count);
47
+ }
48
+ return counts;
49
+ };
50
+ /**
51
+ * tx trace list - Show recent runs with event counts.
52
+ */
53
+ export const traceList = (_pos, flags) => Effect.gen(function* () {
54
+ const runRepo = yield* RunRepository;
55
+ const db = yield* SqliteClient;
56
+ // Parse options
57
+ const limit = parseIntOpt(flags, "limit", "limit", "n") ?? 20;
58
+ const hours = parseIntOpt(flags, "hours", "hours") ?? 24;
59
+ // Get recent runs - for now we'll get more than needed and filter by time
60
+ // A more efficient approach would be to add a time-filtered query to RunRepository
61
+ const allRuns = yield* runRepo.findRecent(limit * 2); // Get extra to account for time filtering
62
+ // Filter to runs within the specified hours
63
+ const cutoff = Date.now() - hours * 60 * 60 * 1000;
64
+ const recentRuns = allRuns
65
+ .filter(r => r.startedAt.getTime() >= cutoff)
66
+ .slice(0, limit);
67
+ // Get span counts for all runs
68
+ const runIds = recentRuns.map(r => r.id);
69
+ const spanCounts = getSpanCountsForRuns(db, runIds);
70
+ // Build runs with span counts
71
+ const runsWithCounts = recentRuns.map(r => ({
72
+ ...r,
73
+ spanCount: spanCounts.get(r.id) ?? 0
74
+ }));
75
+ if (flag(flags, "json")) {
76
+ console.log(toJson(runsWithCounts));
77
+ }
78
+ else {
79
+ if (runsWithCounts.length === 0) {
80
+ console.log(`No runs found in the last ${hours} hours`);
81
+ return;
82
+ }
83
+ console.log(`Recent Runs (last ${hours}h)`);
84
+ console.log("─".repeat(75));
85
+ // Print header
86
+ const header = [
87
+ "ID".padEnd(14),
88
+ "Agent".padEnd(16),
89
+ "Task".padEnd(14),
90
+ "Status".padEnd(10),
91
+ "Spans".padStart(6),
92
+ "Time".padStart(8)
93
+ ].join(" ");
94
+ console.log(header);
95
+ // Print runs
96
+ for (const run of runsWithCounts) {
97
+ const line = [
98
+ truncate(run.id, 14).padEnd(14),
99
+ truncate(run.agent, 16).padEnd(16),
100
+ (run.taskId ? truncate(run.taskId, 14) : "-").padEnd(14),
101
+ run.status.padEnd(10),
102
+ String(run.spanCount).padStart(6),
103
+ relativeTime(run.startedAt).padStart(8)
104
+ ].join(" ");
105
+ console.log(line);
106
+ }
107
+ console.log("");
108
+ console.log(`${runsWithCounts.length} run(s)`);
109
+ }
110
+ });
111
+ /**
112
+ * Get events for a run from the database.
113
+ */
114
+ const getEventsForRun = (db, runId) => {
115
+ return db.prepare(`
116
+ SELECT id, timestamp, event_type, run_id, task_id, agent, tool_name, content, metadata, duration_ms
117
+ FROM events
118
+ WHERE run_id = ?
119
+ ORDER BY timestamp ASC, id ASC
120
+ `).all(runId);
121
+ };
122
+ /**
123
+ * Parse an event row into a structured event.
124
+ */
125
+ const parseEvent = (row) => {
126
+ let metadata = {};
127
+ try {
128
+ metadata = JSON.parse(row.metadata);
129
+ }
130
+ catch {
131
+ // Ignore parse errors
132
+ }
133
+ const status = metadata.status === "ok" ? "ok"
134
+ : metadata.status === "error" ? "error"
135
+ : "unknown";
136
+ return {
137
+ timestamp: new Date(row.timestamp),
138
+ type: row.event_type === "span" ? "span"
139
+ : row.event_type === "metric" ? "metric"
140
+ : "other",
141
+ name: row.content ?? row.event_type,
142
+ durationMs: row.duration_ms,
143
+ status,
144
+ error: metadata.error,
145
+ attributes: metadata.attributes
146
+ };
147
+ };
148
+ /**
149
+ * Format time as HH:MM:SS.
150
+ */
151
+ const formatTime = (date) => {
152
+ return date.toTimeString().slice(0, 8);
153
+ };
154
+ /**
155
+ * Format time as HH:MM:SS.mmm for detailed view.
156
+ */
157
+ const formatTimeWithMs = (date) => {
158
+ const time = date.toTimeString().slice(0, 8);
159
+ const ms = String(date.getMilliseconds()).padStart(3, "0");
160
+ return `${time}.${ms}`;
161
+ };
162
+ /**
163
+ * Read transcript file and parse tool calls.
164
+ */
165
+ const readTranscriptToolCalls = (transcriptPath, agentType, txDir) => {
166
+ // Resolve transcript path relative to .tx directory
167
+ const fullPath = transcriptPath.startsWith("/")
168
+ ? transcriptPath
169
+ : resolve(txDir, transcriptPath);
170
+ if (!existsSync(fullPath)) {
171
+ return [];
172
+ }
173
+ try {
174
+ const content = readFileSync(fullPath, "utf-8");
175
+ const lines = content.split("\n").filter(Boolean);
176
+ const adapter = getAdapter(agentType);
177
+ return [...adapter.parseToolCalls(lines)];
178
+ }
179
+ catch {
180
+ return [];
181
+ }
182
+ };
183
+ /**
184
+ * tx trace transcript <run-id> - Display raw transcript content.
185
+ *
186
+ * Outputs raw JSONL content from the transcript file.
187
+ * Designed to be piped to jq for filtering tool calls.
188
+ */
189
+ export const traceTranscript = (pos, _flags) => Effect.gen(function* () {
190
+ const runId = pos[0];
191
+ if (!runId) {
192
+ console.error("Error: run-id is required");
193
+ console.error("Usage: tx trace transcript <run-id>");
194
+ process.exit(1);
195
+ }
196
+ const runRepo = yield* RunRepository;
197
+ // Get run details
198
+ const run = yield* runRepo.findById(runId);
199
+ if (!run) {
200
+ console.error(`Error: Run not found: ${runId}`);
201
+ process.exit(1);
202
+ }
203
+ // Check if transcript path exists
204
+ if (!run.transcriptPath) {
205
+ console.error(`Error: No transcript recorded for run: ${runId}`);
206
+ process.exit(1);
207
+ }
208
+ // Resolve transcript path relative to .tx directory
209
+ const txDir = join(process.cwd(), ".tx");
210
+ const fullPath = run.transcriptPath.startsWith("/")
211
+ ? run.transcriptPath
212
+ : resolve(txDir, run.transcriptPath);
213
+ if (!existsSync(fullPath)) {
214
+ console.error(`Error: Transcript file not found: ${fullPath}`);
215
+ process.exit(1);
216
+ }
217
+ // Read and output raw content
218
+ try {
219
+ const content = readFileSync(fullPath, "utf-8");
220
+ process.stdout.write(content);
221
+ }
222
+ catch (err) {
223
+ const message = err instanceof Error ? err.message : String(err);
224
+ console.error(`Error: Failed to read transcript file: ${message}`);
225
+ process.exit(1);
226
+ }
227
+ });
228
+ /**
229
+ * tx trace stderr <run-id> - Display stderr file content.
230
+ *
231
+ * Outputs raw stderr content from the stderr file.
232
+ * Useful for debugging failed runs.
233
+ */
234
+ export const traceStderr = (pos, _flags) => Effect.gen(function* () {
235
+ const runId = pos[0];
236
+ if (!runId) {
237
+ console.error("Error: run-id is required");
238
+ console.error("Usage: tx trace stderr <run-id>");
239
+ process.exit(1);
240
+ }
241
+ const runRepo = yield* RunRepository;
242
+ // Get run details
243
+ const run = yield* runRepo.findById(runId);
244
+ if (!run) {
245
+ console.error(`Error: Run not found: ${runId}`);
246
+ process.exit(1);
247
+ }
248
+ // Check if stderr path exists
249
+ if (!run.stderrPath) {
250
+ console.error(`Error: No stderr recorded for run: ${runId}`);
251
+ process.exit(1);
252
+ }
253
+ // Resolve stderr path relative to .tx directory
254
+ const txDir = join(process.cwd(), ".tx");
255
+ const fullPath = run.stderrPath.startsWith("/")
256
+ ? run.stderrPath
257
+ : resolve(txDir, run.stderrPath);
258
+ if (!existsSync(fullPath)) {
259
+ console.error(`Error: Stderr file not found: ${fullPath}`);
260
+ process.exit(1);
261
+ }
262
+ // Read and output raw content
263
+ try {
264
+ const content = readFileSync(fullPath, "utf-8");
265
+ process.stdout.write(content);
266
+ }
267
+ catch (err) {
268
+ const message = err instanceof Error ? err.message : String(err);
269
+ console.error(`Error: Failed to read stderr file: ${message}`);
270
+ process.exit(1);
271
+ }
272
+ });
273
+ /**
274
+ * tx trace show <run-id> - Show metrics events for a run.
275
+ */
276
+ export const traceShow = (pos, flags) => Effect.gen(function* () {
277
+ const runId = pos[0];
278
+ if (!runId) {
279
+ console.error("Error: run-id is required");
280
+ console.error("Usage: tx trace show <run-id> [--full] [--json]");
281
+ process.exit(1);
282
+ }
283
+ const runRepo = yield* RunRepository;
284
+ const db = yield* SqliteClient;
285
+ // Get run details
286
+ const run = yield* runRepo.findById(runId);
287
+ if (!run) {
288
+ console.error(`Error: Run not found: ${runId}`);
289
+ process.exit(1);
290
+ }
291
+ // Get events for this run
292
+ const eventRows = getEventsForRun(db, runId);
293
+ const events = eventRows.map(parseEvent);
294
+ // Filter to spans and metrics only (for basic view)
295
+ const metricsEvents = events.filter(e => e.type === "span" || e.type === "metric");
296
+ // Check for --full flag
297
+ const showFull = flag(flags, "full");
298
+ if (flag(flags, "json")) {
299
+ // JSON output
300
+ const output = {
301
+ run: {
302
+ id: run.id,
303
+ agent: run.agent,
304
+ taskId: run.taskId,
305
+ status: run.status,
306
+ startedAt: run.startedAt.toISOString(),
307
+ endedAt: run.endedAt?.toISOString() ?? null,
308
+ transcriptPath: run.transcriptPath,
309
+ stderrPath: run.stderrPath,
310
+ stdoutPath: run.stdoutPath,
311
+ exitCode: run.exitCode,
312
+ errorMessage: run.errorMessage
313
+ },
314
+ events: metricsEvents.map(e => ({
315
+ timestamp: e.timestamp.toISOString(),
316
+ type: e.type,
317
+ name: e.name,
318
+ durationMs: e.durationMs,
319
+ status: e.status,
320
+ error: e.error,
321
+ attributes: e.attributes
322
+ }))
323
+ };
324
+ if (showFull && run.transcriptPath) {
325
+ // Get .tx directory (parent of tasks.db)
326
+ const txDir = join(process.cwd(), ".tx");
327
+ const toolCalls = readTranscriptToolCalls(run.transcriptPath, run.agent, txDir);
328
+ output.toolCalls = toolCalls;
329
+ }
330
+ console.log(toJson(output));
331
+ return;
332
+ }
333
+ // Human-readable output
334
+ console.log(`Run: ${run.id}`);
335
+ console.log(`Agent: ${run.agent}`);
336
+ console.log(`Task: ${run.taskId ?? "-"}`);
337
+ console.log(`Status: ${run.status}`);
338
+ if (run.startedAt) {
339
+ console.log(`Started: ${run.startedAt.toISOString()}`);
340
+ }
341
+ if (run.endedAt) {
342
+ console.log(`Ended: ${run.endedAt.toISOString()}`);
343
+ }
344
+ if (run.exitCode !== null) {
345
+ console.log(`Exit Code: ${run.exitCode}`);
346
+ }
347
+ if (run.errorMessage) {
348
+ console.log(`Error: ${run.errorMessage}`);
349
+ }
350
+ if (run.transcriptPath) {
351
+ console.log(`Transcript: ${run.transcriptPath}`);
352
+ }
353
+ if (run.stderrPath) {
354
+ console.log(`Stderr: ${run.stderrPath}`);
355
+ }
356
+ if (run.stdoutPath) {
357
+ console.log(`Stdout: ${run.stdoutPath}`);
358
+ }
359
+ console.log("");
360
+ if (showFull && run.transcriptPath) {
361
+ // Combined timeline view
362
+ console.log("Combined Timeline:");
363
+ console.log("─".repeat(75));
364
+ // Get tool calls from transcript
365
+ const txDir = join(process.cwd(), ".tx");
366
+ const toolCalls = readTranscriptToolCalls(run.transcriptPath, run.agent, txDir);
367
+ // Build combined timeline
368
+ const timeline = [];
369
+ // Add events
370
+ for (const event of metricsEvents) {
371
+ timeline.push({
372
+ timestamp: event.timestamp,
373
+ entryType: event.type === "metric" ? "metric" : "span",
374
+ name: event.name,
375
+ durationMs: event.durationMs ?? undefined,
376
+ status: event.status
377
+ });
378
+ }
379
+ // Add tool calls
380
+ for (const toolCall of toolCalls) {
381
+ const inputSummary = toolCall.input.command
382
+ ?? toolCall.input.file_path
383
+ ?? toolCall.input.pattern
384
+ ?? "";
385
+ timeline.push({
386
+ timestamp: new Date(toolCall.timestamp),
387
+ entryType: "tool",
388
+ name: toolCall.name,
389
+ detail: typeof inputSummary === "string" ? truncate(inputSummary, 40) : undefined
390
+ });
391
+ }
392
+ // Sort by timestamp
393
+ timeline.sort((a, b) => a.timestamp.getTime() - b.timestamp.getTime());
394
+ if (timeline.length === 0) {
395
+ console.log(" No events or tool calls recorded");
396
+ }
397
+ else {
398
+ for (const entry of timeline) {
399
+ const time = formatTimeWithMs(entry.timestamp);
400
+ const typeTag = `[${entry.entryType}]`.padEnd(8);
401
+ if (entry.entryType === "tool") {
402
+ const detail = entry.detail ? `: ${entry.detail}` : "";
403
+ console.log(`${time} ${typeTag} ${entry.name}${detail}`);
404
+ }
405
+ else {
406
+ const duration = entry.durationMs !== undefined ? `${entry.durationMs}ms` : "-";
407
+ const status = entry.status ?? "unknown";
408
+ const line = `${time} ${typeTag} ${entry.name.padEnd(30)} ${duration.padStart(8)} ${status}`;
409
+ console.log(line);
410
+ // Show error on next line if present
411
+ const event = metricsEvents.find(e => e.timestamp.getTime() === entry.timestamp.getTime() && e.name === entry.name);
412
+ if (event?.error) {
413
+ console.log(` └─ ${truncate(event.error, 60)}`);
414
+ }
415
+ }
416
+ }
417
+ }
418
+ }
419
+ else {
420
+ // Basic metrics events view
421
+ console.log("Metrics Events:");
422
+ console.log("─".repeat(75));
423
+ if (metricsEvents.length === 0) {
424
+ console.log(" No events recorded");
425
+ }
426
+ else {
427
+ for (const event of metricsEvents) {
428
+ const time = formatTime(event.timestamp);
429
+ const typeTag = `[${event.type}]`;
430
+ const duration = event.durationMs !== null ? `${event.durationMs}ms` : "-";
431
+ const line = `${time} ${typeTag} ${event.name.padEnd(30)} ${duration.padStart(8)} ${event.status}`;
432
+ console.log(line);
433
+ // Show error on next line if present
434
+ if (event.error) {
435
+ console.log(` └─ ${truncate(event.error, 60)}`);
436
+ }
437
+ }
438
+ }
439
+ }
440
+ console.log("");
441
+ console.log(`${metricsEvents.length} event(s)`);
442
+ });
443
+ /**
444
+ * tx trace errors - Show recent errors across all runs.
445
+ */
446
+ export const traceErrors = (_pos, flags) => Effect.gen(function* () {
447
+ const db = yield* SqliteClient;
448
+ // Parse options
449
+ const limit = parseIntOpt(flags, "limit", "limit", "n") ?? 20;
450
+ const hours = parseIntOpt(flags, "hours", "hours") ?? 24;
451
+ const cutoff = new Date(Date.now() - hours * 60 * 60 * 1000).toISOString();
452
+ const errors = [];
453
+ // Query 1: Failed runs
454
+ const failedRuns = db.prepare(`
455
+ SELECT id, task_id, agent, ended_at, error_message
456
+ FROM runs
457
+ WHERE status = 'failed' AND ended_at >= ?
458
+ ORDER BY ended_at DESC
459
+ LIMIT ?
460
+ `).all(cutoff, limit);
461
+ for (const run of failedRuns) {
462
+ errors.push({
463
+ timestamp: run.ended_at ? new Date(run.ended_at) : new Date(),
464
+ source: "run",
465
+ runId: run.id,
466
+ taskId: run.task_id,
467
+ agent: run.agent,
468
+ name: "Run failed",
469
+ error: run.error_message ?? "Unknown error",
470
+ durationMs: null
471
+ });
472
+ }
473
+ // Query 2: Error spans (spans with status='error' in metadata)
474
+ const errorSpans = db.prepare(`
475
+ SELECT timestamp, run_id, task_id, agent, content, metadata, duration_ms
476
+ FROM events
477
+ WHERE event_type = 'span'
478
+ AND timestamp >= ?
479
+ AND json_extract(metadata, '$.status') = 'error'
480
+ ORDER BY timestamp DESC
481
+ LIMIT ?
482
+ `).all(cutoff, limit);
483
+ for (const span of errorSpans) {
484
+ let errorMessage = "Unknown error";
485
+ try {
486
+ const metadata = JSON.parse(span.metadata);
487
+ if (metadata.error) {
488
+ errorMessage = String(metadata.error);
489
+ }
490
+ }
491
+ catch {
492
+ // Ignore parse errors
493
+ }
494
+ errors.push({
495
+ timestamp: new Date(span.timestamp),
496
+ source: "span",
497
+ runId: span.run_id,
498
+ taskId: span.task_id,
499
+ agent: span.agent,
500
+ name: span.content ?? "Unknown span",
501
+ error: errorMessage,
502
+ durationMs: span.duration_ms
503
+ });
504
+ }
505
+ // Query 3: Error events (event_type='error')
506
+ const errorEvents = db.prepare(`
507
+ SELECT timestamp, run_id, task_id, agent, content, metadata, duration_ms
508
+ FROM events
509
+ WHERE event_type = 'error' AND timestamp >= ?
510
+ ORDER BY timestamp DESC
511
+ LIMIT ?
512
+ `).all(cutoff, limit);
513
+ for (const event of errorEvents) {
514
+ errors.push({
515
+ timestamp: new Date(event.timestamp),
516
+ source: "event",
517
+ runId: event.run_id,
518
+ taskId: event.task_id,
519
+ agent: event.agent,
520
+ name: "Error event",
521
+ error: event.content ?? "Unknown error",
522
+ durationMs: event.duration_ms
523
+ });
524
+ }
525
+ // Sort all errors by timestamp descending
526
+ errors.sort((a, b) => b.timestamp.getTime() - a.timestamp.getTime());
527
+ // Limit to requested number
528
+ const limitedErrors = errors.slice(0, limit);
529
+ if (flag(flags, "json")) {
530
+ console.log(toJson(limitedErrors.map(e => ({
531
+ timestamp: e.timestamp.toISOString(),
532
+ source: e.source,
533
+ runId: e.runId,
534
+ taskId: e.taskId,
535
+ agent: e.agent,
536
+ name: e.name,
537
+ error: e.error,
538
+ durationMs: e.durationMs
539
+ }))));
540
+ }
541
+ else {
542
+ if (limitedErrors.length === 0) {
543
+ console.log(`No errors found in the last ${hours} hours`);
544
+ return;
545
+ }
546
+ console.log(`Recent Errors (last ${hours}h)`);
547
+ console.log("─".repeat(80));
548
+ for (const err of limitedErrors) {
549
+ const time = formatTime(err.timestamp);
550
+ const sourceTag = `[${err.source}]`.padEnd(7);
551
+ const runInfo = err.runId ? truncate(err.runId, 14) : "-";
552
+ const agentInfo = err.agent ? truncate(err.agent, 14) : "-";
553
+ console.log(`${time} ${sourceTag} ${runInfo.padEnd(14)} ${agentInfo.padEnd(14)}`);
554
+ console.log(` Name: ${err.name}`);
555
+ console.log(` Error: ${truncate(err.error, 70)}`);
556
+ if (err.taskId) {
557
+ console.log(` Task: ${err.taskId}`);
558
+ }
559
+ if (err.durationMs !== null) {
560
+ console.log(` Duration: ${err.durationMs}ms`);
561
+ }
562
+ console.log("");
563
+ }
564
+ console.log(`${limitedErrors.length} error(s)`);
565
+ }
566
+ });
567
+ /**
568
+ * Main trace command dispatcher.
569
+ */
570
+ export const trace = (pos, flags) => Effect.gen(function* () {
571
+ const subcommand = pos[0];
572
+ if (!subcommand || subcommand === "help") {
573
+ console.log(commandHelp["trace"] ?? `
574
+ Usage: tx trace <subcommand> [options]
575
+
576
+ Subcommands:
577
+ list Show recent runs with event counts
578
+ show <run-id> Show metrics events for a run
579
+ transcript <run-id> Display raw transcript content
580
+ stderr <run-id> Display stderr content
581
+ errors Show recent errors across all runs
582
+
583
+ Options:
584
+ --json Output as JSON
585
+ --hours <n> Time window in hours (default: 24)
586
+ --limit <n> Maximum number of results (default: 20)
587
+ --help, -h Show this help message
588
+ `);
589
+ return;
590
+ }
591
+ // Check for --help on subcommand
592
+ if (flag(flags, "help", "h")) {
593
+ const helpKey = `trace ${subcommand}`;
594
+ if (commandHelp[helpKey]) {
595
+ console.log(commandHelp[helpKey]);
596
+ return;
597
+ }
598
+ }
599
+ if (subcommand === "list") {
600
+ yield* traceList(pos.slice(1), flags);
601
+ }
602
+ else if (subcommand === "show") {
603
+ yield* traceShow(pos.slice(1), flags);
604
+ }
605
+ else if (subcommand === "transcript") {
606
+ yield* traceTranscript(pos.slice(1), flags);
607
+ }
608
+ else if (subcommand === "stderr") {
609
+ yield* traceStderr(pos.slice(1), flags);
610
+ }
611
+ else if (subcommand === "errors") {
612
+ yield* traceErrors(pos.slice(1), flags);
613
+ }
614
+ else {
615
+ console.error(`Unknown trace subcommand: ${subcommand}`);
616
+ console.error(`Run 'tx trace --help' for usage information`);
617
+ process.exit(1);
618
+ }
619
+ });
620
+ //# sourceMappingURL=trace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace.js","sourceRoot":"","sources":["../../src/commands/trace.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Validate command: Pre-flight database health checks
3
+ */
4
+ import { Effect } from "effect";
5
+ import { ValidationService } from "@jamesaphoenix/tx-core";
6
+ type Flags = Record<string, string | boolean>;
7
+ export declare const validate: (_pos: string[], flags: Flags) => Effect.Effect<void, import("@jamesaphoenix/tx-core").DatabaseError, ValidationService>;
8
+ export {};
9
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAI1D,KAAK,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAA;AAoF7C,eAAO,MAAM,QAAQ,GAAI,MAAM,MAAM,EAAE,EAAE,OAAO,KAAK,2FAiBjD,CAAA"}