@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.
- package/dist/cli-exit.d.ts +15 -0
- package/dist/cli-exit.d.ts.map +1 -0
- package/dist/cli-exit.js +18 -0
- package/dist/cli-exit.js.map +1 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +349 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/attempt.d.ts +9 -0
- package/dist/commands/attempt.d.ts.map +1 -0
- package/dist/commands/attempt.js +93 -0
- package/dist/commands/attempt.js.map +1 -0
- package/dist/commands/bulk.d.ts +8 -0
- package/dist/commands/bulk.d.ts.map +1 -0
- package/dist/commands/bulk.js +168 -0
- package/dist/commands/bulk.js.map +1 -0
- package/dist/commands/claim.d.ts +39 -0
- package/dist/commands/claim.d.ts.map +1 -0
- package/dist/commands/claim.js +96 -0
- package/dist/commands/claim.js.map +1 -0
- package/dist/commands/compact.d.ts +17 -0
- package/dist/commands/compact.d.ts.map +1 -0
- package/dist/commands/compact.js +167 -0
- package/dist/commands/compact.js.map +1 -0
- package/dist/commands/coordinator.d.ts +12 -0
- package/dist/commands/coordinator.d.ts.map +1 -0
- package/dist/commands/coordinator.js +124 -0
- package/dist/commands/coordinator.js.map +1 -0
- package/dist/commands/cycle.d.ts +12 -0
- package/dist/commands/cycle.d.ts.map +1 -0
- package/dist/commands/cycle.js +109 -0
- package/dist/commands/cycle.js.map +1 -0
- package/dist/commands/daemon.d.ts +16 -0
- package/dist/commands/daemon.d.ts.map +1 -0
- package/dist/commands/daemon.js +635 -0
- package/dist/commands/daemon.js.map +1 -0
- package/dist/commands/dashboard.d.ts +12 -0
- package/dist/commands/dashboard.d.ts.map +1 -0
- package/dist/commands/dashboard.js +105 -0
- package/dist/commands/dashboard.js.map +1 -0
- package/dist/commands/dashboard.test.d.ts +2 -0
- package/dist/commands/dashboard.test.d.ts.map +1 -0
- package/dist/commands/dashboard.test.js +99 -0
- package/dist/commands/dashboard.test.js.map +1 -0
- package/dist/commands/dep.d.ts +9 -0
- package/dist/commands/dep.d.ts.map +1 -0
- package/dist/commands/dep.js +50 -0
- package/dist/commands/dep.js.map +1 -0
- package/dist/commands/doc.d.ts +10 -0
- package/dist/commands/doc.d.ts.map +1 -0
- package/dist/commands/doc.js +397 -0
- package/dist/commands/doc.js.map +1 -0
- package/dist/commands/doctor.d.ts +9 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +168 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/graph.d.ts +58 -0
- package/dist/commands/graph.d.ts.map +1 -0
- package/dist/commands/graph.js +441 -0
- package/dist/commands/graph.js.map +1 -0
- package/dist/commands/hierarchy.d.ts +9 -0
- package/dist/commands/hierarchy.d.ts.map +1 -0
- package/dist/commands/hierarchy.js +68 -0
- package/dist/commands/hierarchy.js.map +1 -0
- package/dist/commands/hooks.d.ts +56 -0
- package/dist/commands/hooks.d.ts.map +1 -0
- package/dist/commands/hooks.js +365 -0
- package/dist/commands/hooks.js.map +1 -0
- package/dist/commands/invariant.d.ts +9 -0
- package/dist/commands/invariant.d.ts.map +1 -0
- package/dist/commands/invariant.js +126 -0
- package/dist/commands/invariant.js.map +1 -0
- package/dist/commands/learning.d.ts +16 -0
- package/dist/commands/learning.d.ts.map +1 -0
- package/dist/commands/learning.js +362 -0
- package/dist/commands/learning.js.map +1 -0
- package/dist/commands/migrate.d.ts +9 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +56 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/orchestrator.d.ts +11 -0
- package/dist/commands/orchestrator.d.ts.map +1 -0
- package/dist/commands/orchestrator.js +129 -0
- package/dist/commands/orchestrator.js.map +1 -0
- package/dist/commands/stats.d.ts +8 -0
- package/dist/commands/stats.d.ts.map +1 -0
- package/dist/commands/stats.js +128 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/commands/sync-platform.d.ts +12 -0
- package/dist/commands/sync-platform.d.ts.map +1 -0
- package/dist/commands/sync-platform.js +74 -0
- package/dist/commands/sync-platform.js.map +1 -0
- package/dist/commands/sync.d.ts +8 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +128 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/task.d.ts +15 -0
- package/dist/commands/task.d.ts.map +1 -0
- package/dist/commands/task.js +233 -0
- package/dist/commands/task.js.map +1 -0
- package/dist/commands/test.d.ts +16 -0
- package/dist/commands/test.d.ts.map +1 -0
- package/dist/commands/test.js +112 -0
- package/dist/commands/test.js.map +1 -0
- package/dist/commands/trace.d.ts +39 -0
- package/dist/commands/trace.d.ts.map +1 -0
- package/dist/commands/trace.js +620 -0
- package/dist/commands/trace.js.map +1 -0
- package/dist/commands/validate.d.ts +9 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +94 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/commands/worker.d.ts +10 -0
- package/dist/commands/worker.d.ts.map +1 -0
- package/dist/commands/worker.js +204 -0
- package/dist/commands/worker.js.map +1 -0
- package/dist/help.d.ts +3 -0
- package/dist/help.d.ts.map +1 -0
- package/dist/help.js +1366 -0
- package/dist/help.js.map +1 -0
- package/dist/output.d.ts +12 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +76 -0
- package/dist/output.js.map +1 -0
- package/dist/tx +0 -0
- package/dist/utils/parse.d.ts +45 -0
- package/dist/utils/parse.d.ts.map +1 -0
- package/dist/utils/parse.js +79 -0
- package/dist/utils/parse.js.map +1 -0
- package/dist/utils/parse.test.d.ts +2 -0
- package/dist/utils/parse.test.d.ts.map +1 -0
- package/dist/utils/parse.test.js +140 -0
- package/dist/utils/parse.test.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +10 -0
- package/dist/version.js.map +1 -0
- 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"}
|