@sentry/warden 0.20.0 → 0.22.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 (77) hide show
  1. package/CHANGELOG.md +353 -0
  2. package/README.md +3 -3
  3. package/dist/cli/args.d.ts +7 -5
  4. package/dist/cli/args.d.ts.map +1 -1
  5. package/dist/cli/args.js +31 -17
  6. package/dist/cli/args.js.map +1 -1
  7. package/dist/cli/commands/runs.d.ts +26 -0
  8. package/dist/cli/commands/runs.d.ts.map +1 -0
  9. package/dist/cli/commands/runs.js +726 -0
  10. package/dist/cli/commands/runs.js.map +1 -0
  11. package/dist/cli/log-cleanup.d.ts.map +1 -1
  12. package/dist/cli/log-cleanup.js +4 -0
  13. package/dist/cli/log-cleanup.js.map +1 -1
  14. package/dist/cli/main.d.ts +15 -0
  15. package/dist/cli/main.d.ts.map +1 -1
  16. package/dist/cli/main.js +428 -128
  17. package/dist/cli/main.js.map +1 -1
  18. package/dist/cli/output/index.d.ts +1 -1
  19. package/dist/cli/output/index.d.ts.map +1 -1
  20. package/dist/cli/output/index.js +1 -1
  21. package/dist/cli/output/index.js.map +1 -1
  22. package/dist/cli/output/ink-runner.d.ts.map +1 -1
  23. package/dist/cli/output/ink-runner.js +50 -14
  24. package/dist/cli/output/ink-runner.js.map +1 -1
  25. package/dist/cli/output/jsonl-schema-gen.d.ts +16 -0
  26. package/dist/cli/output/jsonl-schema-gen.d.ts.map +1 -0
  27. package/dist/cli/output/jsonl-schema-gen.js +65 -0
  28. package/dist/cli/output/jsonl-schema-gen.js.map +1 -0
  29. package/dist/cli/output/jsonl.d.ts +266 -26
  30. package/dist/cli/output/jsonl.d.ts.map +1 -1
  31. package/dist/cli/output/jsonl.js +377 -139
  32. package/dist/cli/output/jsonl.js.map +1 -1
  33. package/dist/cli/output/tasks.d.ts +6 -1
  34. package/dist/cli/output/tasks.d.ts.map +1 -1
  35. package/dist/cli/output/tasks.js +183 -27
  36. package/dist/cli/output/tasks.js.map +1 -1
  37. package/dist/cli/terminal.d.ts.map +1 -1
  38. package/dist/cli/terminal.js +20 -0
  39. package/dist/cli/terminal.js.map +1 -1
  40. package/dist/index.d.ts +2 -2
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +2 -0
  43. package/dist/index.js.map +1 -1
  44. package/dist/sdk/analyze.d.ts.map +1 -1
  45. package/dist/sdk/analyze.js +103 -10
  46. package/dist/sdk/analyze.js.map +1 -1
  47. package/dist/sdk/errors.d.ts +11 -0
  48. package/dist/sdk/errors.d.ts.map +1 -1
  49. package/dist/sdk/errors.js +50 -0
  50. package/dist/sdk/errors.js.map +1 -1
  51. package/dist/sdk/runner.d.ts +1 -1
  52. package/dist/sdk/runner.d.ts.map +1 -1
  53. package/dist/sdk/types.d.ts +28 -1
  54. package/dist/sdk/types.d.ts.map +1 -1
  55. package/dist/types/index.d.ts +130 -6
  56. package/dist/types/index.d.ts.map +1 -1
  57. package/dist/types/index.js +72 -3
  58. package/dist/types/index.js.map +1 -1
  59. package/package.json +2 -1
  60. package/skills/warden/SKILL.md +5 -5
  61. package/skills/warden/SOURCES.md +39 -0
  62. package/skills/warden/references/cli-reference.md +11 -4
  63. package/skills/warden/references/config-schema.md +9 -0
  64. package/skills/warden/references/configuration.md +9 -0
  65. package/skills/warden-sweep/SKILL.md +43 -365
  66. package/skills/warden-sweep/SOURCES.md +43 -0
  67. package/skills/warden-sweep/references/issue-phase.md +24 -0
  68. package/skills/warden-sweep/references/organize-phase.md +31 -0
  69. package/skills/warden-sweep/references/patch-phase.md +142 -0
  70. package/skills/warden-sweep/references/resume-and-artifacts.md +51 -0
  71. package/skills/warden-sweep/references/scan-phase.md +46 -0
  72. package/skills/warden-sweep/references/script-interfaces.md +127 -0
  73. package/skills/warden-sweep/references/verify-phase.md +69 -0
  74. package/dist/cli/commands/logs.d.ts +0 -19
  75. package/dist/cli/commands/logs.d.ts.map +0 -1
  76. package/dist/cli/commands/logs.js +0 -412
  77. package/dist/cli/commands/logs.js.map +0 -1
@@ -1,412 +0,0 @@
1
- import { existsSync, readdirSync, readFileSync, unlinkSync } from 'node:fs';
2
- import { dirname, join, resolve } from 'node:path';
3
- import chalk from 'chalk';
4
- import { loadWardenConfig } from '../../config/loader.js';
5
- import { getRepoRoot } from '../git.js';
6
- import { findExpiredArtifacts } from '../log-cleanup.js';
7
- import { renderTerminalReport, filterReports } from '../terminal.js';
8
- import { pluralize, formatDuration, formatCost, shortRunId, parseJsonlReports, parseLogMetadata, renderJsonlString, } from '../output/index.js';
9
- /**
10
- * Resolve a log directory path from the repo root.
11
- */
12
- function resolveLogDir() {
13
- const cwd = process.cwd();
14
- let repoPath;
15
- try {
16
- repoPath = getRepoRoot(cwd);
17
- }
18
- catch {
19
- return undefined;
20
- }
21
- return { logDir: join(repoPath, '.warden', 'logs'), repoPath };
22
- }
23
- /**
24
- * Resolve a file argument to a full path.
25
- * If the argument looks like a run ID (no `/` or `.`), look up matching files in .warden/logs/.
26
- */
27
- function resolveFileArg(arg, logDir) {
28
- // If it contains path separators or dots, treat as a file path
29
- if (arg.includes('/') || arg.includes('.')) {
30
- return [resolve(process.cwd(), arg)];
31
- }
32
- // Treat as a short run ID — glob for matching files
33
- try {
34
- const entries = readdirSync(logDir);
35
- const matches = entries
36
- .filter((e) => e.endsWith('.jsonl') && e.startsWith(arg))
37
- .map((e) => join(logDir, e));
38
- return matches;
39
- }
40
- catch {
41
- return [];
42
- }
43
- }
44
- // eslint-disable-next-line no-control-regex
45
- const ANSI_RE = /\x1b\[[0-9;]*m/g;
46
- /**
47
- * Get the visual width of a string (ignoring ANSI escape codes).
48
- */
49
- function visualWidth(str) {
50
- return str.replace(ANSI_RE, '').length;
51
- }
52
- /**
53
- * Pad a string to a visual width, accounting for ANSI codes.
54
- */
55
- function padToWidth(str, width) {
56
- const pad = width - visualWidth(str);
57
- return pad > 0 ? str + ' '.repeat(pad) : str;
58
- }
59
- /**
60
- * Right-align a string to a visual width, accounting for ANSI codes.
61
- */
62
- function rightAlign(str, width) {
63
- const pad = width - visualWidth(str);
64
- return pad > 0 ? ' '.repeat(pad) + str : str;
65
- }
66
- /**
67
- * Format a date as a human-friendly relative or short absolute string.
68
- */
69
- function formatRelativeTime(date) {
70
- const now = Date.now();
71
- const diffMs = now - date.getTime();
72
- const diffSec = Math.floor(diffMs / 1000);
73
- const diffMin = Math.floor(diffSec / 60);
74
- const diffHr = Math.floor(diffMin / 60);
75
- const diffDays = Math.floor(diffHr / 24);
76
- if (diffSec < 60)
77
- return 'just now';
78
- if (diffMin < 60)
79
- return `${diffMin}m ago`;
80
- if (diffHr < 24)
81
- return `${diffHr}h ago`;
82
- if (diffDays === 1)
83
- return 'yesterday';
84
- if (diffDays < 7)
85
- return `${diffDays}d ago`;
86
- // Older than a week: show short date
87
- const month = date.toLocaleString('en-US', { month: 'short' });
88
- const day = date.getDate();
89
- const year = date.getFullYear();
90
- const currentYear = new Date().getFullYear();
91
- return year === currentYear ? `${month} ${day}` : `${month} ${day}, ${year}`;
92
- }
93
- const SEVERITY_COLORS = {
94
- high: chalk.red,
95
- medium: chalk.yellow,
96
- low: chalk.green,
97
- };
98
- /**
99
- * Format a severity breakdown as colored counts.
100
- */
101
- function formatSeverityBreakdown(bySeverity) {
102
- const severities = ['high', 'medium', 'low'];
103
- const parts = severities.map((sev) => {
104
- const count = bySeverity[sev] ?? 0;
105
- return count > 0 ? SEVERITY_COLORS[sev](String(count)) : chalk.dim('0');
106
- });
107
- return parts.join(chalk.dim(' / '));
108
- }
109
- /**
110
- * List all JSONL log files in .warden/logs/.
111
- */
112
- export async function runLogsList(options, reporter) {
113
- const resolved = resolveLogDir();
114
- if (!resolved) {
115
- reporter.error('Not a git repository');
116
- return 1;
117
- }
118
- const { logDir } = resolved;
119
- let entries;
120
- try {
121
- entries = readdirSync(logDir)
122
- .filter((e) => e.endsWith('.jsonl'))
123
- .sort()
124
- .reverse(); // newest first (filenames embed timestamps)
125
- }
126
- catch {
127
- entries = [];
128
- }
129
- if (entries.length === 0) {
130
- reporter.warning('No log files found');
131
- reporter.tip('Run warden to generate logs in .warden/logs/');
132
- return 0;
133
- }
134
- // Parse all logs for metadata and sort by timestamp (newest first)
135
- const logData = [];
136
- for (const entry of entries) {
137
- const filePath = join(logDir, entry);
138
- logData.push({ entry, meta: parseLogMetadata(filePath) });
139
- }
140
- logData.sort((a, b) => {
141
- const tsA = a.meta?.summary.run.timestamp ?? '';
142
- const tsB = b.meta?.summary.run.timestamp ?? '';
143
- return tsB.localeCompare(tsA);
144
- });
145
- if (options.json) {
146
- const results = logData.map(({ entry, meta }) => ({
147
- file: entry,
148
- runId: meta?.summary.run.runId,
149
- timestamp: meta?.summary.run.timestamp,
150
- model: meta?.model,
151
- headSha: meta?.headSha,
152
- files: meta?.totalFiles,
153
- findings: meta?.summary.totalFindings,
154
- bySeverity: meta?.summary.bySeverity,
155
- durationMs: meta?.summary.run.durationMs,
156
- costUSD: meta?.summary.usage?.costUSD,
157
- skills: meta?.skills,
158
- }));
159
- process.stdout.write(JSON.stringify(results, null, 2) + '\n');
160
- return 0;
161
- }
162
- const rows = [];
163
- // Aggregate totals across all runs
164
- const totals = {
165
- findings: 0,
166
- bySeverity: { high: 0, medium: 0, low: 0 },
167
- costUSD: 0,
168
- durationMs: 0,
169
- skills: new Set(),
170
- };
171
- for (const { entry, meta } of logData) {
172
- if (!meta) {
173
- rows.push({
174
- runId: entry.slice(0, 8),
175
- date: '',
176
- files: '',
177
- findings: chalk.dim('parse error'),
178
- time: '',
179
- cost: '',
180
- sha: '',
181
- model: '-',
182
- skills: '',
183
- });
184
- continue;
185
- }
186
- const { summary, skills } = meta;
187
- totals.findings += summary.totalFindings;
188
- totals.durationMs += summary.run.durationMs;
189
- if (summary.usage) {
190
- totals.costUSD += summary.usage.costUSD;
191
- }
192
- for (const [sev, count] of Object.entries(summary.bySeverity)) {
193
- totals.bySeverity[sev] += count;
194
- }
195
- for (const skill of skills) {
196
- totals.skills.add(skill);
197
- }
198
- rows.push({
199
- runId: shortRunId(summary.run.runId),
200
- date: formatRelativeTime(new Date(summary.run.timestamp)),
201
- files: meta.totalFiles > 0 ? String(meta.totalFiles) : '',
202
- findings: formatSeverityBreakdown(summary.bySeverity),
203
- time: formatDuration(summary.run.durationMs),
204
- cost: summary.usage ? formatCost(summary.usage.costUSD) : '',
205
- sha: meta.headSha ? meta.headSha.slice(0, 7) : '',
206
- model: meta.model ?? '-',
207
- skills: skills.join(', '),
208
- });
209
- }
210
- // Calculate column widths
211
- const headers = {
212
- runId: 'RUN',
213
- date: 'DATE',
214
- files: 'FILES',
215
- findings: 'FINDINGS',
216
- time: 'TIME',
217
- cost: 'COST',
218
- sha: 'SHA',
219
- model: 'MODEL',
220
- skills: 'SKILLS',
221
- };
222
- const widths = Object.fromEntries(Object.keys(headers).map((key) => {
223
- const col = key;
224
- return [col, Math.max(headers[col].length, ...rows.map((r) => visualWidth(r[col])))];
225
- }));
226
- // Header row
227
- const headerLine = ` ${padToWidth(headers.runId, widths.runId)} ` +
228
- `${padToWidth(headers.date, widths.date)} ` +
229
- `${rightAlign(headers.files, widths.files)} ` +
230
- `${padToWidth(headers.findings, widths.findings)} ` +
231
- `${rightAlign(headers.time, widths.time)} ` +
232
- `${rightAlign(headers.cost, widths.cost)} ` +
233
- `${padToWidth(headers.sha, widths.sha)} ` +
234
- `${padToWidth(headers.model, widths.model)} ` +
235
- `${headers.skills}`;
236
- reporter.text(chalk.dim(headerLine));
237
- // Data rows
238
- for (const row of rows) {
239
- const line = ` ${padToWidth(chalk.bold(row.runId), widths.runId)} ` +
240
- `${padToWidth(chalk.dim(row.date), widths.date)} ` +
241
- `${rightAlign(chalk.dim(row.files), widths.files)} ` +
242
- `${padToWidth(row.findings, widths.findings)} ` +
243
- `${rightAlign(chalk.dim(row.time), widths.time)} ` +
244
- `${rightAlign(chalk.dim(row.cost), widths.cost)} ` +
245
- `${padToWidth(chalk.dim(row.sha), widths.sha)} ` +
246
- `${padToWidth(chalk.dim(row.model), widths.model)} ` +
247
- `${chalk.dim(row.skills)}`;
248
- reporter.text(line);
249
- }
250
- // Summary footer
251
- reporter.blank();
252
- reporter.text(chalk.dim(`${entries.length} ${pluralize(entries.length, 'run')} · ` +
253
- `${totals.findings} ${pluralize(totals.findings, 'finding')} `) +
254
- formatSeverityBreakdown(totals.bySeverity) +
255
- chalk.dim(` · ${formatDuration(totals.durationMs)}` +
256
- ` · ${formatCost(totals.costUSD)}` +
257
- ` · ${totals.skills.size} ${pluralize(totals.skills.size, 'skill')}`));
258
- return 0;
259
- }
260
- /**
261
- * Show results from JSONL log files (replaces `warden replay`).
262
- */
263
- export async function runLogsShow(logsOptions, options, reporter) {
264
- const { files: fileArgs } = logsOptions;
265
- if (fileArgs.length === 0) {
266
- reporter.error('No log files specified');
267
- reporter.tip('Usage: warden logs show <file.jsonl> [file2.jsonl ...]');
268
- return 1;
269
- }
270
- // Resolve file arguments (may be paths or run IDs)
271
- const resolved = resolveLogDir();
272
- const logDir = resolved?.logDir;
273
- const resolvedFiles = [];
274
- for (const arg of fileArgs) {
275
- if (logDir) {
276
- const matches = resolveFileArg(arg, logDir);
277
- if (matches.length > 0) {
278
- resolvedFiles.push(...matches);
279
- continue;
280
- }
281
- }
282
- // Fall back to treating as a direct path
283
- resolvedFiles.push(resolve(process.cwd(), arg));
284
- }
285
- // Validate all files exist
286
- const missingFiles = [];
287
- for (const file of resolvedFiles) {
288
- if (!existsSync(file)) {
289
- missingFiles.push(file);
290
- }
291
- }
292
- if (missingFiles.length > 0) {
293
- reporter.error(`Log ${pluralize(missingFiles.length, 'file')} not found: ${missingFiles.join(', ')}`);
294
- return 1;
295
- }
296
- // Parse and merge reports from all files
297
- const allReports = [];
298
- let totalDurationMs = 0;
299
- let lastRunMetadata;
300
- for (const file of resolvedFiles) {
301
- try {
302
- const content = readFileSync(file, 'utf-8');
303
- const parsed = parseJsonlReports(content);
304
- allReports.push(...parsed.reports);
305
- totalDurationMs += parsed.totalDurationMs;
306
- if (parsed.runMetadata) {
307
- lastRunMetadata = parsed.runMetadata;
308
- reporter.debug(`Loaded ${parsed.reports.length} ${pluralize(parsed.reports.length, 'skill')} from ${file}`);
309
- reporter.debug(` Run ID: ${parsed.runMetadata.runId}`);
310
- reporter.debug(` Timestamp: ${parsed.runMetadata.timestamp}`);
311
- }
312
- }
313
- catch (err) {
314
- reporter.error(`Failed to parse ${file}: ${err instanceof Error ? err.message : String(err)}`);
315
- return 1;
316
- }
317
- }
318
- if (allReports.length === 0) {
319
- reporter.warning('No skill reports found in log files');
320
- return 0;
321
- }
322
- // Load config for minConfidence default (matches main run flow)
323
- let configMinConfidence;
324
- if (resolved) {
325
- try {
326
- const configPath = resolve(resolved.repoPath, 'warden.toml');
327
- if (existsSync(configPath)) {
328
- const config = loadWardenConfig(dirname(configPath));
329
- configMinConfidence = config.defaults?.minConfidence;
330
- }
331
- }
332
- catch {
333
- // Use default
334
- }
335
- }
336
- // Apply filtering
337
- const filteredReports = filterReports(allReports, options.reportOn, options.minConfidence ?? configMinConfidence ?? 'medium');
338
- // Output results
339
- reporter.blank();
340
- if (options.json) {
341
- const jsonlContent = renderJsonlString(filteredReports, totalDurationMs, lastRunMetadata ? {
342
- runId: lastRunMetadata.runId,
343
- traceId: lastRunMetadata.traceId,
344
- timestamp: new Date(lastRunMetadata.timestamp),
345
- model: lastRunMetadata.model,
346
- headSha: lastRunMetadata.headSha,
347
- cwd: lastRunMetadata.cwd,
348
- } : undefined);
349
- process.stdout.write(jsonlContent);
350
- }
351
- else {
352
- console.log(renderTerminalReport(filteredReports, reporter.mode, { verbosity: reporter.verbosity }));
353
- }
354
- // Show summary
355
- reporter.blank();
356
- reporter.renderSummary(filteredReports, totalDurationMs);
357
- return 0;
358
- }
359
- /**
360
- * Garbage-collect expired log files.
361
- */
362
- export async function runLogsGc(options, reporter) {
363
- const resolved = resolveLogDir();
364
- if (!resolved) {
365
- reporter.error('Not a git repository');
366
- return 1;
367
- }
368
- const { logDir, repoPath } = resolved;
369
- // Load config for retentionDays
370
- let retentionDays = 30;
371
- try {
372
- const configPath = resolve(repoPath, 'warden.toml');
373
- if (existsSync(configPath)) {
374
- const config = loadWardenConfig(dirname(configPath));
375
- retentionDays = config.logs?.retentionDays ?? 30;
376
- }
377
- }
378
- catch {
379
- // Use default
380
- }
381
- const expired = findExpiredArtifacts(logDir, retentionDays);
382
- if (expired.length === 0) {
383
- reporter.success('Nothing to clean up');
384
- return 0;
385
- }
386
- let deleted = 0;
387
- for (const filePath of expired) {
388
- try {
389
- unlinkSync(filePath);
390
- deleted++;
391
- }
392
- catch {
393
- // Skip files we can't delete
394
- }
395
- }
396
- reporter.success(`Removed ${deleted} expired ${pluralize(deleted, 'log file')}`);
397
- return 0;
398
- }
399
- /**
400
- * Dispatch to the appropriate logs subcommand.
401
- */
402
- export async function runLogs(logsOptions, options, reporter) {
403
- switch (logsOptions.subcommand) {
404
- case 'list':
405
- return runLogsList(options, reporter);
406
- case 'show':
407
- return runLogsShow(logsOptions, options, reporter);
408
- case 'gc':
409
- return runLogsGc(options, reporter);
410
- }
411
- }
412
- //# sourceMappingURL=logs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../../src/cli/commands/logs.ts"],"names":[],"mappings":"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"}