steroids-cli 0.6.5 → 0.8.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 (84) hide show
  1. package/dist/cleanup/invocation-logs.d.ts +30 -0
  2. package/dist/cleanup/invocation-logs.d.ts.map +1 -0
  3. package/dist/cleanup/invocation-logs.js +69 -0
  4. package/dist/cleanup/invocation-logs.js.map +1 -0
  5. package/dist/commands/cleanup.d.ts +3 -0
  6. package/dist/commands/cleanup.d.ts.map +1 -0
  7. package/dist/commands/cleanup.js +116 -0
  8. package/dist/commands/cleanup.js.map +1 -0
  9. package/dist/commands/completion.d.ts.map +1 -1
  10. package/dist/commands/completion.js +6 -1
  11. package/dist/commands/completion.js.map +1 -1
  12. package/dist/commands/health-stuck.d.ts +5 -0
  13. package/dist/commands/health-stuck.d.ts.map +1 -0
  14. package/dist/commands/health-stuck.js +312 -0
  15. package/dist/commands/health-stuck.js.map +1 -0
  16. package/dist/commands/health.d.ts.map +1 -1
  17. package/dist/commands/health.js +14 -1
  18. package/dist/commands/health.js.map +1 -1
  19. package/dist/config/loader.d.ts +8 -0
  20. package/dist/config/loader.d.ts.map +1 -1
  21. package/dist/config/loader.js +14 -0
  22. package/dist/config/loader.js.map +1 -1
  23. package/dist/config/schema.d.ts.map +1 -1
  24. package/dist/config/schema.js +40 -0
  25. package/dist/config/schema.js.map +1 -1
  26. package/dist/database/queries.d.ts +2 -0
  27. package/dist/database/queries.d.ts.map +1 -1
  28. package/dist/database/queries.js +15 -1
  29. package/dist/database/queries.js.map +1 -1
  30. package/dist/database/schema.d.ts +2 -2
  31. package/dist/database/schema.d.ts.map +1 -1
  32. package/dist/database/schema.js +26 -0
  33. package/dist/database/schema.js.map +1 -1
  34. package/dist/health/stuck-task-detector.d.ts +131 -0
  35. package/dist/health/stuck-task-detector.d.ts.map +1 -0
  36. package/dist/health/stuck-task-detector.js +238 -0
  37. package/dist/health/stuck-task-detector.js.map +1 -0
  38. package/dist/health/stuck-task-recovery.d.ts +45 -0
  39. package/dist/health/stuck-task-recovery.d.ts.map +1 -0
  40. package/dist/health/stuck-task-recovery.js +312 -0
  41. package/dist/health/stuck-task-recovery.js.map +1 -0
  42. package/dist/index.js +5 -0
  43. package/dist/index.js.map +1 -1
  44. package/dist/migrations/manifest.d.ts.map +1 -1
  45. package/dist/migrations/manifest.js +2 -1
  46. package/dist/migrations/manifest.js.map +1 -1
  47. package/dist/orchestrator/coder.d.ts.map +1 -1
  48. package/dist/orchestrator/coder.js +11 -11
  49. package/dist/orchestrator/coder.js.map +1 -1
  50. package/dist/orchestrator/coordinator.d.ts.map +1 -1
  51. package/dist/orchestrator/coordinator.js +3 -4
  52. package/dist/orchestrator/coordinator.js.map +1 -1
  53. package/dist/orchestrator/invoke.js +11 -11
  54. package/dist/orchestrator/invoke.js.map +1 -1
  55. package/dist/orchestrator/reviewer.d.ts.map +1 -1
  56. package/dist/orchestrator/reviewer.js +11 -11
  57. package/dist/orchestrator/reviewer.js.map +1 -1
  58. package/dist/providers/claude.d.ts.map +1 -1
  59. package/dist/providers/claude.js +5 -2
  60. package/dist/providers/claude.js.map +1 -1
  61. package/dist/providers/codex.d.ts.map +1 -1
  62. package/dist/providers/codex.js +44 -2
  63. package/dist/providers/codex.js.map +1 -1
  64. package/dist/providers/gemini.d.ts.map +1 -1
  65. package/dist/providers/gemini.js +5 -2
  66. package/dist/providers/gemini.js.map +1 -1
  67. package/dist/providers/interface.d.ts +12 -0
  68. package/dist/providers/interface.d.ts.map +1 -1
  69. package/dist/providers/interface.js.map +1 -1
  70. package/dist/providers/invocation-logger.d.ts +7 -24
  71. package/dist/providers/invocation-logger.d.ts.map +1 -1
  72. package/dist/providers/invocation-logger.js +132 -44
  73. package/dist/providers/invocation-logger.js.map +1 -1
  74. package/dist/providers/openai.d.ts.map +1 -1
  75. package/dist/providers/openai.js +5 -2
  76. package/dist/providers/openai.js.map +1 -1
  77. package/dist/runners/wakeup.d.ts +3 -0
  78. package/dist/runners/wakeup.d.ts.map +1 -1
  79. package/dist/runners/wakeup.js +163 -93
  80. package/dist/runners/wakeup.js.map +1 -1
  81. package/migrations/009_add_incidents_and_failure_tracking.sql +35 -0
  82. package/migrations/010_add_lifecycle_timestamps.sql +27 -0
  83. package/migrations/manifest.json +17 -1
  84. package/package.json +1 -1
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Retention cleanup for invocation activity logs.
3
+ *
4
+ * These are JSONL files created at:
5
+ * .steroids/invocations/<invocationId>.log
6
+ */
7
+ export interface CleanupInvocationLogsOptions {
8
+ /**
9
+ * Keep logs within this retention window.
10
+ * If <= 0, no files will be deleted.
11
+ */
12
+ retentionDays?: number;
13
+ /** Preview without deleting files. */
14
+ dryRun?: boolean;
15
+ /** Inject current time for deterministic tests. */
16
+ nowMs?: number;
17
+ }
18
+ export interface CleanupInvocationLogsResult {
19
+ scannedFiles: number;
20
+ deletedFiles: number;
21
+ freedBytes: number;
22
+ cutoffMs: number;
23
+ }
24
+ /**
25
+ * Delete old `.steroids/invocations/*.log` files based on mtime.
26
+ *
27
+ * Best-effort: errors are swallowed and reflected as zero deletions.
28
+ */
29
+ export declare function cleanupInvocationLogs(projectPath: string, options?: CleanupInvocationLogsOptions): CleanupInvocationLogsResult;
30
+ //# sourceMappingURL=invocation-logs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invocation-logs.d.ts","sourceRoot":"","sources":["../../src/cleanup/invocation-logs.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,MAAM,WAAW,4BAA4B;IAC3C;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sCAAsC;IACtC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,2BAA2B;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,4BAAiC,GACzC,2BAA2B,CAqD7B"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ /**
3
+ * Retention cleanup for invocation activity logs.
4
+ *
5
+ * These are JSONL files created at:
6
+ * .steroids/invocations/<invocationId>.log
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.cleanupInvocationLogs = cleanupInvocationLogs;
10
+ const node_fs_1 = require("node:fs");
11
+ const node_path_1 = require("node:path");
12
+ const DAY_MS = 24 * 60 * 60 * 1000;
13
+ /**
14
+ * Delete old `.steroids/invocations/*.log` files based on mtime.
15
+ *
16
+ * Best-effort: errors are swallowed and reflected as zero deletions.
17
+ */
18
+ function cleanupInvocationLogs(projectPath, options = {}) {
19
+ const retentionDays = options.retentionDays ?? 7;
20
+ const nowMs = options.nowMs ?? Date.now();
21
+ const retentionMs = retentionDays * DAY_MS;
22
+ const cutoffMs = nowMs - retentionMs;
23
+ if (retentionDays <= 0) {
24
+ return { scannedFiles: 0, deletedFiles: 0, freedBytes: 0, cutoffMs };
25
+ }
26
+ const logsDir = (0, node_path_1.join)(projectPath, '.steroids', 'invocations');
27
+ if (!(0, node_fs_1.existsSync)(logsDir)) {
28
+ return { scannedFiles: 0, deletedFiles: 0, freedBytes: 0, cutoffMs };
29
+ }
30
+ let scannedFiles = 0;
31
+ let deletedFiles = 0;
32
+ let freedBytes = 0;
33
+ try {
34
+ const entries = (0, node_fs_1.readdirSync)(logsDir, { withFileTypes: true });
35
+ for (const entry of entries) {
36
+ if (!entry.isFile())
37
+ continue;
38
+ if (!entry.name.endsWith('.log'))
39
+ continue;
40
+ scannedFiles++;
41
+ const filePath = (0, node_path_1.join)(logsDir, entry.name);
42
+ let st;
43
+ try {
44
+ st = (0, node_fs_1.statSync)(filePath);
45
+ }
46
+ catch {
47
+ continue;
48
+ }
49
+ if (st.mtimeMs >= cutoffMs)
50
+ continue;
51
+ deletedFiles++;
52
+ freedBytes += st.size;
53
+ if (!options.dryRun) {
54
+ try {
55
+ (0, node_fs_1.unlinkSync)(filePath);
56
+ }
57
+ catch {
58
+ // If deletion fails, keep counts as best-effort; this is cleanup code.
59
+ }
60
+ }
61
+ }
62
+ }
63
+ catch {
64
+ // Directory read error; treat as no-op.
65
+ return { scannedFiles: 0, deletedFiles: 0, freedBytes: 0, cutoffMs };
66
+ }
67
+ return { scannedFiles, deletedFiles, freedBytes, cutoffMs };
68
+ }
69
+ //# sourceMappingURL=invocation-logs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invocation-logs.js","sourceRoot":"","sources":["../../src/cleanup/invocation-logs.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AA+BH,sDAwDC;AArFD,qCAAwE;AACxE,yCAAiC;AAEjC,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAqBnC;;;;GAIG;AACH,SAAgB,qBAAqB,CACnC,WAAmB,EACnB,UAAwC,EAAE;IAE1C,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IAC1C,MAAM,WAAW,GAAG,aAAa,GAAG,MAAM,CAAC;IAC3C,MAAM,QAAQ,GAAG,KAAK,GAAG,WAAW,CAAC;IAErC,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvE,CAAC;IAED,MAAM,OAAO,GAAG,IAAA,gBAAI,EAAC,WAAW,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;IAC9D,IAAI,CAAC,IAAA,oBAAU,EAAC,OAAO,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvE,CAAC;IAED,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAA,qBAAW,EAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;gBAAE,SAAS;YAC9B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,SAAS;YAE3C,YAAY,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,IAAA,gBAAI,EAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAE3C,IAAI,EAAE,CAAC;YACP,IAAI,CAAC;gBACH,EAAE,GAAG,IAAA,kBAAQ,EAAC,QAAQ,CAAC,CAAC;YAC1B,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YAED,IAAI,EAAE,CAAC,OAAO,IAAI,QAAQ;gBAAE,SAAS;YAErC,YAAY,EAAE,CAAC;YACf,UAAU,IAAI,EAAE,CAAC,IAAI,CAAC;YACtB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;gBACpB,IAAI,CAAC;oBACH,IAAA,oBAAU,EAAC,QAAQ,CAAC,CAAC;gBACvB,CAAC;gBAAC,MAAM,CAAC;oBACP,uEAAuE;gBACzE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,wCAAwC;QACxC,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvE,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;AAC9D,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { GlobalFlags } from '../cli/flags.js';
2
+ export declare function cleanupCommand(args: string[], flags: GlobalFlags): Promise<void>;
3
+ //# sourceMappingURL=cleanup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cleanup.d.ts","sourceRoot":"","sources":["../../src/commands/cleanup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAsCnD,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBtF"}
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cleanupCommand = cleanupCommand;
4
+ /**
5
+ * steroids cleanup - Cleanup utilities (non-destructive retention)
6
+ *
7
+ * Subcommands:
8
+ * - logs: Clean up old invocation activity logs (.steroids/invocations/*.log)
9
+ */
10
+ const node_util_1 = require("node:util");
11
+ const connection_js_1 = require("../database/connection.js");
12
+ const help_js_1 = require("../cli/help.js");
13
+ const invocation_logs_js_1 = require("../cleanup/invocation-logs.js");
14
+ const HELP = (0, help_js_1.generateHelp)({
15
+ command: 'cleanup',
16
+ description: 'Cleanup utilities',
17
+ details: `Cleanup operations that are safe to run regularly (retention-based).`,
18
+ usage: [
19
+ 'steroids cleanup <subcommand> [options]',
20
+ ],
21
+ subcommands: [
22
+ { name: 'logs', description: 'Clean up old invocation activity logs' },
23
+ ],
24
+ options: [
25
+ { long: 'retention-days', description: 'Days to keep invocation activity logs (logs)', values: '<n>', default: '7' },
26
+ ],
27
+ examples: [
28
+ { command: 'steroids cleanup logs', description: 'Delete invocation activity logs older than 7 days' },
29
+ { command: 'steroids cleanup logs --retention-days 30', description: 'Keep 30 days of invocation activity logs' },
30
+ { command: 'steroids cleanup logs --dry-run', description: 'Preview what would be deleted' },
31
+ ],
32
+ related: [
33
+ { command: 'steroids logs', description: 'View invocation logs' },
34
+ { command: 'steroids gc', description: 'Garbage collection' },
35
+ { command: 'steroids purge', description: 'Purge old data' },
36
+ ],
37
+ });
38
+ async function cleanupCommand(args, flags) {
39
+ // Check global help flag
40
+ if (flags.help || args.length === 0 || args[0] === '-h' || args[0] === '--help') {
41
+ console.log(HELP);
42
+ return;
43
+ }
44
+ const subcommand = args[0];
45
+ const subArgs = args.slice(1);
46
+ switch (subcommand) {
47
+ case 'logs':
48
+ await cleanupLogs(subArgs, flags);
49
+ break;
50
+ default:
51
+ console.error(`Unknown subcommand: ${subcommand}`);
52
+ console.log(HELP);
53
+ process.exit(1);
54
+ }
55
+ }
56
+ async function cleanupLogs(args, flags) {
57
+ const { values } = (0, node_util_1.parseArgs)({
58
+ args,
59
+ options: {
60
+ help: { type: 'boolean', short: 'h', default: false },
61
+ 'retention-days': { type: 'string', default: '7' },
62
+ },
63
+ allowPositionals: false,
64
+ });
65
+ if (values.help) {
66
+ console.log(`
67
+ steroids cleanup logs - Clean up old invocation activity logs
68
+
69
+ USAGE:
70
+ steroids cleanup logs [options]
71
+
72
+ OPTIONS:
73
+ --retention-days <n> Days to keep invocation activity logs (default: 7)
74
+ --dry-run Preview without deleting files (global)
75
+ -j, --json Output as JSON (global)
76
+ -h, --help Show help
77
+ `);
78
+ return;
79
+ }
80
+ const projectPath = process.cwd();
81
+ if (!(0, connection_js_1.isInitialized)(projectPath)) {
82
+ console.error('Steroids not initialized. Run "steroids init" first.');
83
+ process.exit(1);
84
+ }
85
+ const retentionDays = parseInt(values['retention-days'] ?? '7', 10);
86
+ if (!Number.isFinite(retentionDays) || retentionDays < 0) {
87
+ console.error(`Invalid --retention-days value: ${values['retention-days']}. Must be >= 0.`);
88
+ process.exit(1);
89
+ }
90
+ const result = (0, invocation_logs_js_1.cleanupInvocationLogs)(projectPath, { retentionDays, dryRun: flags.dryRun });
91
+ if (flags.json) {
92
+ console.log(JSON.stringify({
93
+ success: true,
94
+ command: 'cleanup logs',
95
+ dryRun: flags.dryRun,
96
+ data: {
97
+ retentionDays,
98
+ scannedFiles: result.scannedFiles,
99
+ deletedFiles: result.deletedFiles,
100
+ freedBytes: result.freedBytes,
101
+ },
102
+ error: null,
103
+ }, null, 2));
104
+ return;
105
+ }
106
+ const prefix = flags.dryRun ? 'Would delete' : 'Deleted';
107
+ console.log(`${prefix} ${result.deletedFiles} invocation activity log file(s) (scanned ${result.scannedFiles}, freed ${formatSize(result.freedBytes)}).`);
108
+ }
109
+ function formatSize(bytes) {
110
+ if (bytes < 1024)
111
+ return `${bytes}B`;
112
+ if (bytes < 1024 * 1024)
113
+ return `${(bytes / 1024).toFixed(1)}KB`;
114
+ return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;
115
+ }
116
+ //# sourceMappingURL=cleanup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../../src/commands/cleanup.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAgFnD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BzF"}
1
+ {"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAiFnD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BzF"}
@@ -41,10 +41,11 @@ const COMMANDS = {
41
41
  loop: [],
42
42
  runners: ['list', 'start', 'stop', 'status', 'logs', 'wakeup', 'cron'],
43
43
  config: ['init', 'show', 'get', 'set', 'validate', 'path', 'edit', 'browse'],
44
- health: [],
44
+ health: ['check', 'incidents'],
45
45
  scan: [],
46
46
  backup: ['create', 'restore', 'list', 'clean'],
47
47
  logs: ['show', 'list', 'tail', 'purge'],
48
+ cleanup: ['logs'],
48
49
  gc: [],
49
50
  disputes: ['create', 'list', 'show', 'resolve', 'log'],
50
51
  purge: ['tasks', 'ids', 'logs', 'all'],
@@ -323,6 +324,10 @@ function getSubcommandDescription(cmd, sub) {
323
324
  wakeup: 'Check and start runners for projects with work',
324
325
  cron: 'Manage cron job for auto-wakeup',
325
326
  },
327
+ health: {
328
+ check: 'Detect and recover stuck tasks/runners',
329
+ incidents: 'View and manage stuck-task incident history',
330
+ },
326
331
  config: {
327
332
  init: 'Create configuration file',
328
333
  show: 'Show configuration',
@@ -1 +1 @@
1
- {"version":3,"file":"completion.js","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"completion.js","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { GlobalFlags } from '../cli/flags.js';
2
+ type HealthSubcommand = 'check' | 'incidents';
3
+ export declare function runHealthSubcommand(subcommand: HealthSubcommand, args: string[], flags: GlobalFlags): Promise<void>;
4
+ export {};
5
+ //# sourceMappingURL=health-stuck.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health-stuck.d.ts","sourceRoot":"","sources":["../../src/commands/health-stuck.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAgBnD,KAAK,gBAAgB,GAAG,OAAO,GAAG,WAAW,CAAC;AA+H9C,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,gBAAgB,EAC5B,IAAI,EAAE,MAAM,EAAE,EACd,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,IAAI,CAAC,CAaf"}
@@ -0,0 +1,312 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runHealthSubcommand = runHealthSubcommand;
4
+ /**
5
+ * steroids health check|incidents - Stuck task detection & incident management
6
+ *
7
+ * Routed from src/commands/health.ts to avoid bloating the health scoring command.
8
+ */
9
+ const node_util_1 = require("node:util");
10
+ const flags_js_1 = require("../cli/flags.js");
11
+ const help_js_1 = require("../cli/help.js");
12
+ const output_js_1 = require("../cli/output.js");
13
+ const connection_js_1 = require("../database/connection.js");
14
+ const loader_js_1 = require("../config/loader.js");
15
+ const global_db_js_1 = require("../runners/global-db.js");
16
+ const stuck_task_recovery_js_1 = require("../health/stuck-task-recovery.js");
17
+ const HELP_CHECK = (0, help_js_1.generateHelp)({
18
+ command: 'health check',
19
+ description: 'Detect and (optionally) recover stuck tasks/runners',
20
+ details: `Runs stuck-task detection (orphaned tasks, hanging invocations, zombie/dead runners).
21
+ If auto-recovery is enabled in config (health.autoRecover), it will attempt safe recovery actions.
22
+ Use --dry-run to preview actions without mutating any databases.`,
23
+ usage: ['steroids health check [options]'],
24
+ options: [
25
+ { long: 'watch', description: 'Continuously run health check (Ctrl+C to stop)' },
26
+ { long: 'watch-interval', description: 'Watch interval', values: '<duration> (e.g., 5s, 1m)', default: '5s' },
27
+ ],
28
+ examples: [
29
+ { command: 'steroids health check', description: 'Run stuck-task health check once' },
30
+ { command: 'steroids health check --watch', description: 'Watch for stuck tasks continuously' },
31
+ { command: 'steroids health check --dry-run', description: 'Preview recovery actions without changes' },
32
+ { command: 'steroids health check --json', description: 'Machine-readable output' },
33
+ ],
34
+ related: [
35
+ { command: 'steroids health incidents', description: 'View incident history' },
36
+ { command: 'steroids runners wakeup', description: 'Wake and recover stale runners across projects' },
37
+ ],
38
+ showExitCodes: true,
39
+ });
40
+ const HELP_INCIDENTS = (0, help_js_1.generateHelp)({
41
+ command: 'health incidents',
42
+ description: 'View and manage stuck-task incident history',
43
+ details: `Incidents are logged when stuck-task recovery detects and handles problems.
44
+ Use --task to filter incidents for a specific task.
45
+ Use --clear to delete resolved incidents older than 7 days.`,
46
+ usage: ['steroids health incidents [options]'],
47
+ options: [
48
+ { long: 'task', description: 'Filter incidents for a task ID/prefix', values: '<taskId>' },
49
+ { long: 'limit', description: 'Max rows to show', values: '<n>', default: '50' },
50
+ { long: 'clear', description: 'Delete resolved incidents older than 7 days' },
51
+ ],
52
+ examples: [
53
+ { command: 'steroids health incidents', description: 'Show recent incidents' },
54
+ { command: 'steroids health incidents --task abc123', description: 'Filter incidents for a task' },
55
+ { command: 'steroids health incidents --clear', description: 'Clear old resolved incidents' },
56
+ ],
57
+ related: [{ command: 'steroids health check', description: 'Run stuck-task health check' }],
58
+ showExitCodes: true,
59
+ });
60
+ function formatTimestampLocal(d) {
61
+ return d.toLocaleString();
62
+ }
63
+ function padRight(s, width) {
64
+ if (s.length >= width)
65
+ return s;
66
+ return s + ' '.repeat(width - s.length);
67
+ }
68
+ function drawBox(lines, width) {
69
+ const w = Math.max(20, width);
70
+ const top = `\u250c${'\u2500'.repeat(w - 2)}\u2510`;
71
+ const mid = `\u251c${'\u2500'.repeat(w - 2)}\u2524`;
72
+ const bot = `\u2514${'\u2500'.repeat(w - 2)}\u2518`;
73
+ const body = lines.map((l) => `\u2502${padRight(` ${l}`, w - 2)}\u2502`);
74
+ return [top, body[0] ?? `\u2502${padRight(' ', w - 2)}\u2502`, mid, ...body.slice(1), bot].join('\n');
75
+ }
76
+ function yesNoMark(ok) {
77
+ return ok ? '\u2713' : '\u2717';
78
+ }
79
+ function describeSignals(result) {
80
+ const report = result.report;
81
+ const orphaned = report.orphanedTasks.length;
82
+ const hanging = report.hangingInvocations.length;
83
+ const zombie = report.zombieRunners.length;
84
+ const dead = report.deadRunners.length;
85
+ const incidentCount = orphaned + hanging + zombie + dead;
86
+ const lines = [];
87
+ lines.push('HEALTH CHECK REPORT');
88
+ lines.push(`Timestamp: ${formatTimestampLocal(report.timestamp)}`);
89
+ lines.push('');
90
+ lines.push(`Orphaned Tasks: ${orphaned} ${yesNoMark(orphaned === 0)}`);
91
+ lines.push(`Hanging Invocations: ${hanging} ${yesNoMark(hanging === 0)}`);
92
+ lines.push(`Zombie Runners: ${zombie} ${yesNoMark(zombie === 0)}`);
93
+ lines.push(`Dead Runners: ${dead} ${yesNoMark(dead === 0)}`);
94
+ if (report.dbInconsistencies.length > 0) {
95
+ lines.push(`DB Inconsistencies: ${report.dbInconsistencies.length} ${yesNoMark(false)}`);
96
+ }
97
+ lines.push('');
98
+ lines.push(`Incidents Found: ${incidentCount}`);
99
+ if (incidentCount > 0) {
100
+ for (const t of report.orphanedTasks) {
101
+ const mins = Math.round(t.secondsSinceUpdate / 60);
102
+ lines.push(` - orphaned_task: ${t.taskId} (${mins}min inactive)`);
103
+ }
104
+ for (const h of report.hangingInvocations) {
105
+ const mins = Math.round(h.secondsSinceUpdate / 60);
106
+ lines.push(` - hanging_invocation: ${h.taskId} (${h.phase}, ${mins}min)`);
107
+ }
108
+ for (const r of report.zombieRunners) {
109
+ const mins = Math.round(r.secondsSinceHeartbeat / 60);
110
+ lines.push(` - zombie_runner: ${r.runnerId} (${mins}min no heartbeat)`);
111
+ }
112
+ for (const r of report.deadRunners) {
113
+ const mins = Math.round(r.secondsSinceHeartbeat / 60);
114
+ lines.push(` - dead_runner: ${r.runnerId} (${mins}min since heartbeat)`);
115
+ }
116
+ }
117
+ lines.push('');
118
+ lines.push(`Actions Taken: ${result.actions.length}`);
119
+ for (const a of result.actions) {
120
+ lines.push(` - ${a.resolution}: ${a.reason}`);
121
+ }
122
+ if (result.skippedDueToSafetyLimit) {
123
+ lines.push('');
124
+ lines.push('Warning: Skipped recovery due to maxIncidentsPerHour safety limit.');
125
+ }
126
+ return lines;
127
+ }
128
+ async function runHealthSubcommand(subcommand, args, flags) {
129
+ switch (subcommand) {
130
+ case 'check':
131
+ await runHealthCheck(args, flags);
132
+ return;
133
+ case 'incidents':
134
+ await runHealthIncidents(args, flags);
135
+ return;
136
+ default: {
137
+ const _exhaustive = subcommand;
138
+ throw new Error(`Unknown health subcommand: ${_exhaustive}`);
139
+ }
140
+ }
141
+ }
142
+ async function runHealthCheck(args, flags) {
143
+ const out = (0, output_js_1.createOutput)({ command: 'health', subcommand: 'check', flags });
144
+ const { values } = (0, node_util_1.parseArgs)({
145
+ args,
146
+ options: {
147
+ help: { type: 'boolean', short: 'h', default: false },
148
+ watch: { type: 'boolean', default: false },
149
+ 'watch-interval': { type: 'string' },
150
+ },
151
+ allowPositionals: false,
152
+ });
153
+ if (values.help || flags.help) {
154
+ out.log(HELP_CHECK);
155
+ return;
156
+ }
157
+ const projectPath = process.cwd();
158
+ const config = (0, loader_js_1.loadConfig)(projectPath);
159
+ const { db: projectDb, close: closeProject } = (0, connection_js_1.openDatabase)(projectPath);
160
+ const global = (0, global_db_js_1.openGlobalDatabase)();
161
+ const runOnce = async () => {
162
+ const result = await (0, stuck_task_recovery_js_1.recoverStuckTasks)({
163
+ projectPath,
164
+ projectDb,
165
+ globalDb: global.db,
166
+ config,
167
+ dryRun: flags.dryRun,
168
+ });
169
+ if (out.isJson()) {
170
+ out.success({
171
+ timestamp: result.report.timestamp.toISOString(),
172
+ counts: {
173
+ orphanedTasks: result.report.orphanedTasks.length,
174
+ hangingInvocations: result.report.hangingInvocations.length,
175
+ zombieRunners: result.report.zombieRunners.length,
176
+ deadRunners: result.report.deadRunners.length,
177
+ dbInconsistencies: result.report.dbInconsistencies.length,
178
+ },
179
+ report: result.report,
180
+ actions: result.actions,
181
+ dryRun: flags.dryRun,
182
+ skippedDueToSafetyLimit: result.skippedDueToSafetyLimit,
183
+ });
184
+ return;
185
+ }
186
+ if (values.watch) {
187
+ process.stdout.write('\x1B[2J\x1B[0f');
188
+ }
189
+ out.log(drawBox(describeSignals(result), 61));
190
+ };
191
+ try {
192
+ if (values.watch) {
193
+ const intervalStr = values['watch-interval'] ?? '5s';
194
+ const intervalMs = (0, flags_js_1.parseDuration)(intervalStr);
195
+ await runOnce();
196
+ const intervalId = setInterval(() => {
197
+ runOnce().catch((err) => {
198
+ if (!out.isJson()) {
199
+ const msg = err instanceof Error ? err.message : String(err);
200
+ console.error(`Health check failed: ${msg}`);
201
+ }
202
+ });
203
+ }, intervalMs);
204
+ process.on('SIGINT', () => {
205
+ clearInterval(intervalId);
206
+ closeProject();
207
+ global.close();
208
+ if (!out.isJson())
209
+ console.log('\nStopped watching.');
210
+ process.exit(0);
211
+ });
212
+ await new Promise(() => { });
213
+ }
214
+ else {
215
+ await runOnce();
216
+ }
217
+ }
218
+ finally {
219
+ if (!values.watch) {
220
+ closeProject();
221
+ global.close();
222
+ }
223
+ }
224
+ }
225
+ function normalizeTaskPrefix(input) {
226
+ return input.trim();
227
+ }
228
+ async function runHealthIncidents(args, flags) {
229
+ const out = (0, output_js_1.createOutput)({ command: 'health', subcommand: 'incidents', flags });
230
+ const { values } = (0, node_util_1.parseArgs)({
231
+ args,
232
+ options: {
233
+ help: { type: 'boolean', short: 'h', default: false },
234
+ task: { type: 'string' },
235
+ limit: { type: 'string' },
236
+ clear: { type: 'boolean', default: false },
237
+ },
238
+ allowPositionals: false,
239
+ });
240
+ if (values.help || flags.help) {
241
+ out.log(HELP_INCIDENTS);
242
+ return;
243
+ }
244
+ const projectPath = process.cwd();
245
+ const { db, close } = (0, connection_js_1.openDatabase)(projectPath);
246
+ try {
247
+ const limit = (() => {
248
+ const raw = values.limit ?? '50';
249
+ const n = parseInt(raw, 10);
250
+ return Number.isFinite(n) && n > 0 ? n : 50;
251
+ })();
252
+ if (values.clear) {
253
+ const countRow = db
254
+ .prepare(`SELECT COUNT(*) as c
255
+ FROM incidents
256
+ WHERE resolved_at IS NOT NULL
257
+ AND resolved_at < datetime('now', '-7 days')`)
258
+ .get();
259
+ const toDelete = countRow?.c ?? 0;
260
+ if (!flags.dryRun) {
261
+ db.prepare(`DELETE FROM incidents
262
+ WHERE resolved_at IS NOT NULL
263
+ AND resolved_at < datetime('now', '-7 days')`).run();
264
+ }
265
+ if (out.isJson()) {
266
+ out.success({ deleted: flags.dryRun ? 0 : toDelete, wouldDelete: flags.dryRun ? toDelete : 0 });
267
+ }
268
+ else {
269
+ out.log(flags.dryRun ? `Would delete ${toDelete} incident(s).` : `Deleted ${toDelete} incident(s).`);
270
+ }
271
+ return;
272
+ }
273
+ const taskPrefix = values.task ? normalizeTaskPrefix(values.task) : null;
274
+ const incidents = (() => {
275
+ if (taskPrefix) {
276
+ return db
277
+ .prepare(`SELECT id, task_id, runner_id, failure_mode, detected_at, resolved_at, resolution, details, created_at
278
+ FROM incidents
279
+ WHERE task_id LIKE ?
280
+ ORDER BY detected_at DESC
281
+ LIMIT ?`)
282
+ .all(`${taskPrefix}%`, limit);
283
+ }
284
+ return db
285
+ .prepare(`SELECT id, task_id, runner_id, failure_mode, detected_at, resolved_at, resolution, details, created_at
286
+ FROM incidents
287
+ ORDER BY detected_at DESC
288
+ LIMIT ?`)
289
+ .all(limit);
290
+ })();
291
+ if (out.isJson()) {
292
+ out.success({ total: incidents.length, incidents });
293
+ return;
294
+ }
295
+ if (incidents.length === 0) {
296
+ out.log('No incidents found.');
297
+ return;
298
+ }
299
+ const rows = incidents.map((i) => {
300
+ const resolved = i.resolved_at ? 'yes' : 'no';
301
+ const task = i.task_id ?? '-';
302
+ const runner = i.runner_id ?? '-';
303
+ const resolution = i.resolution ?? '-';
304
+ return [i.detected_at, i.failure_mode, task, runner, resolved, resolution];
305
+ });
306
+ out.table(['detected_at', 'failure_mode', 'task', 'runner', 'resolved', 'resolution'], rows);
307
+ }
308
+ finally {
309
+ close();
310
+ }
311
+ }
312
+ //# sourceMappingURL=health-stuck.js.map