@rcrsr/claude-code-runner 0.10.0 → 0.11.1

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 (81) hide show
  1. package/README.md +13 -10
  2. package/dist/cli/args.d.ts.map +1 -1
  3. package/dist/cli/args.js +25 -4
  4. package/dist/cli/args.js.map +1 -1
  5. package/dist/cli/docs.d.ts +9 -0
  6. package/dist/cli/docs.d.ts.map +1 -0
  7. package/dist/cli/docs.js +55 -0
  8. package/dist/cli/docs.js.map +1 -0
  9. package/dist/cli/index.d.ts +1 -0
  10. package/dist/cli/index.d.ts.map +1 -1
  11. package/dist/cli/index.js +1 -0
  12. package/dist/cli/index.js.map +1 -1
  13. package/dist/index.js +7 -1
  14. package/dist/index.js.map +1 -1
  15. package/dist/output/colors.d.ts +29 -1
  16. package/dist/output/colors.d.ts.map +1 -1
  17. package/dist/output/colors.js +95 -1
  18. package/dist/output/colors.js.map +1 -1
  19. package/dist/output/formatter.d.ts +6 -0
  20. package/dist/output/formatter.d.ts.map +1 -1
  21. package/dist/output/formatter.js +50 -9
  22. package/dist/output/formatter.js.map +1 -1
  23. package/dist/rill/context.d.ts +2 -0
  24. package/dist/rill/context.d.ts.map +1 -1
  25. package/dist/rill/context.js +84 -13
  26. package/dist/rill/context.js.map +1 -1
  27. package/dist/rill/runner.d.ts.map +1 -1
  28. package/dist/rill/runner.js +56 -1
  29. package/dist/rill/runner.js.map +1 -1
  30. package/dist/types/runner.d.ts +10 -1
  31. package/dist/types/runner.d.ts.map +1 -1
  32. package/dist/types/runner.js.map +1 -1
  33. package/dist/utils/constants.d.ts +4 -0
  34. package/dist/utils/constants.d.ts.map +1 -1
  35. package/dist/utils/constants.js +5 -0
  36. package/dist/utils/constants.js.map +1 -1
  37. package/package.json +2 -4
  38. package/dist/core/index.d.ts +0 -2
  39. package/dist/core/index.d.ts.map +0 -1
  40. package/dist/core/index.js +0 -2
  41. package/dist/core/index.js.map +0 -1
  42. package/dist/core/runner.d.ts +0 -22
  43. package/dist/core/runner.d.ts.map +0 -1
  44. package/dist/core/runner.js +0 -100
  45. package/dist/core/runner.js.map +0 -1
  46. package/dist/output/ui-components.d.ts +0 -34
  47. package/dist/output/ui-components.d.ts.map +0 -1
  48. package/dist/output/ui-components.js +0 -158
  49. package/dist/output/ui-components.js.map +0 -1
  50. package/dist/output/ui-renderer.d.ts +0 -18
  51. package/dist/output/ui-renderer.d.ts.map +0 -1
  52. package/dist/output/ui-renderer.js +0 -75
  53. package/dist/output/ui-renderer.js.map +0 -1
  54. package/dist/output/ui-state.d.ts +0 -71
  55. package/dist/output/ui-state.d.ts.map +0 -1
  56. package/dist/output/ui-state.js +0 -131
  57. package/dist/output/ui-state.js.map +0 -1
  58. package/dist/parsers/signals.d.ts +0 -10
  59. package/dist/parsers/signals.d.ts.map +0 -1
  60. package/dist/parsers/signals.js +0 -21
  61. package/dist/parsers/signals.js.map +0 -1
  62. package/dist/script/index.d.ts +0 -8
  63. package/dist/script/index.d.ts.map +0 -1
  64. package/dist/script/index.js +0 -10
  65. package/dist/script/index.js.map +0 -1
  66. package/dist/script/loader.d.ts +0 -13
  67. package/dist/script/loader.d.ts.map +0 -1
  68. package/dist/script/loader.js +0 -66
  69. package/dist/script/loader.js.map +0 -1
  70. package/dist/script/parser.d.ts +0 -63
  71. package/dist/script/parser.d.ts.map +0 -1
  72. package/dist/script/parser.js +0 -349
  73. package/dist/script/parser.js.map +0 -1
  74. package/dist/script/types.d.ts +0 -49
  75. package/dist/script/types.d.ts.map +0 -1
  76. package/dist/script/types.js +0 -5
  77. package/dist/script/types.js.map +0 -1
  78. package/dist/script/variables.d.ts +0 -27
  79. package/dist/script/variables.d.ts.map +0 -1
  80. package/dist/script/variables.js +0 -74
  81. package/dist/script/variables.js.map +0 -1
@@ -44,6 +44,10 @@ export declare const SECONDS_PER_MINUTE = 60;
44
44
  export declare const SECONDS_PER_HOUR = 3600;
45
45
  /** Default parallel tool detection threshold in ms */
46
46
  export declare const DEFAULT_PARALLEL_THRESHOLD_MS = 100;
47
+ /** Truncation suffix for overflow in status line */
48
+ export declare const STATUS_LINE_ELLIPSIS = "...";
49
+ /** Minimum terminal width for status line display */
50
+ export declare const STATUS_LINE_MIN_WIDTH = 20;
47
51
  /** Regex pattern for self-closing ccr:result tags */
48
52
  export declare const CCR_RESULT_SELF_CLOSING_PATTERN: RegExp;
49
53
  /** Regex pattern for ccr:result tags with content */
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,sDAAsD;AACtD,eAAO,MAAM,gBAAgB,OAAO,CAAC;AACrC,yDAAyD;AACzD,eAAO,MAAM,gBAAgB,UAAU,CAAC;AAGxC,gDAAgD;AAChD,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,iDAAiD;AACjD,eAAO,MAAM,qBAAqB,KAAK,CAAC;AACxC,6CAA6C;AAC7C,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,iDAAiD;AACjD,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,yCAAyC;AACzC,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,8CAA8C;AAC9C,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,2CAA2C;AAC3C,eAAO,MAAM,cAAc,MAAM,CAAC;AAClC,6CAA6C;AAC7C,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,sDAAsD;AACtD,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,qFAAqF;AACrF,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAC1C,uDAAuD;AACvD,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,sDAAsD;AACtD,eAAO,MAAM,eAAe,MAAM,CAAC;AACnC,wDAAwD;AACxD,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAGzC,4BAA4B;AAC5B,eAAO,MAAM,QAAQ,MAAM,CAAC;AAC5B,yBAAyB;AACzB,eAAO,MAAM,QAAQ,KAAK,CAAC;AAG3B,8BAA8B;AAC9B,eAAO,MAAM,aAAa,OAAO,CAAC;AAClC,yBAAyB;AACzB,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,uBAAuB;AACvB,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAGrC,sDAAsD;AACtD,eAAO,MAAM,6BAA6B,MAAM,CAAC;AAGjD,qDAAqD;AACrD,eAAO,MAAM,+BAA+B,QAA8B,CAAC;AAC3E,qDAAqD;AACrD,eAAO,MAAM,+BAA+B,QACM,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,sDAAsD;AACtD,eAAO,MAAM,gBAAgB,OAAO,CAAC;AACrC,yDAAyD;AACzD,eAAO,MAAM,gBAAgB,UAAU,CAAC;AAGxC,gDAAgD;AAChD,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,iDAAiD;AACjD,eAAO,MAAM,qBAAqB,KAAK,CAAC;AACxC,6CAA6C;AAC7C,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,iDAAiD;AACjD,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,yCAAyC;AACzC,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,8CAA8C;AAC9C,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,2CAA2C;AAC3C,eAAO,MAAM,cAAc,MAAM,CAAC;AAClC,6CAA6C;AAC7C,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,sDAAsD;AACtD,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,qFAAqF;AACrF,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAC1C,uDAAuD;AACvD,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,sDAAsD;AACtD,eAAO,MAAM,eAAe,MAAM,CAAC;AACnC,wDAAwD;AACxD,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAGzC,4BAA4B;AAC5B,eAAO,MAAM,QAAQ,MAAM,CAAC;AAC5B,yBAAyB;AACzB,eAAO,MAAM,QAAQ,KAAK,CAAC;AAG3B,8BAA8B;AAC9B,eAAO,MAAM,aAAa,OAAO,CAAC;AAClC,yBAAyB;AACzB,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,uBAAuB;AACvB,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAGrC,sDAAsD;AACtD,eAAO,MAAM,6BAA6B,MAAM,CAAC;AAGjD,oDAAoD;AACpD,eAAO,MAAM,oBAAoB,QAAQ,CAAC;AAC1C,qDAAqD;AACrD,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAGxC,qDAAqD;AACrD,eAAO,MAAM,+BAA+B,QAA8B,CAAC;AAC3E,qDAAqD;AACrD,eAAO,MAAM,+BAA+B,QACM,CAAC"}
@@ -49,6 +49,11 @@ export const SECONDS_PER_HOUR = 3600;
49
49
  // === Default Configuration ===
50
50
  /** Default parallel tool detection threshold in ms */
51
51
  export const DEFAULT_PARALLEL_THRESHOLD_MS = 100;
52
+ // === Status Line ===
53
+ /** Truncation suffix for overflow in status line */
54
+ export const STATUS_LINE_ELLIPSIS = '...';
55
+ /** Minimum terminal width for status line display */
56
+ export const STATUS_LINE_MIN_WIDTH = 20;
52
57
  // === Result XML Patterns ===
53
58
  /** Regex pattern for self-closing ccr:result tags */
54
59
  export const CCR_RESULT_SELF_CLOSING_PATTERN = /<ccr:result\s+([^>]*?)\/>/;
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,0BAA0B;AAC1B,sDAAsD;AACtD,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AACrC,yDAAyD;AACzD,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC;AAExC,yBAAyB;AACzB,gDAAgD;AAChD,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AACnC,iDAAiD;AACjD,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACxC,6CAA6C;AAC7C,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AACrC,iDAAiD;AACjD,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AACpC,yCAAyC;AACzC,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AACnC,8CAA8C;AAC9C,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AACrC,2CAA2C;AAC3C,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC;AAClC,6CAA6C;AAC7C,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AACpC,sDAAsD;AACtD,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AACzC,qFAAqF;AACrF,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAC1C,uDAAuD;AACvD,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AACzC,sDAAsD;AACtD,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAC;AACnC,wDAAwD;AACxD,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAEzC,4BAA4B;AAC5B,4BAA4B;AAC5B,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,CAAC;AAC5B,yBAAyB;AACzB,MAAM,CAAC,MAAM,QAAQ,GAAG,EAAE,CAAC;AAE3B,yBAAyB;AACzB,8BAA8B;AAC9B,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC;AAClC,yBAAyB;AACzB,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AACrC,uBAAuB;AACvB,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAErC,gCAAgC;AAChC,sDAAsD;AACtD,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAAG,CAAC;AAEjD,8BAA8B;AAC9B,qDAAqD;AACrD,MAAM,CAAC,MAAM,+BAA+B,GAAG,2BAA2B,CAAC;AAC3E,qDAAqD;AACrD,MAAM,CAAC,MAAM,+BAA+B,GAC1C,gDAAgD,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,0BAA0B;AAC1B,sDAAsD;AACtD,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AACrC,yDAAyD;AACzD,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC;AAExC,yBAAyB;AACzB,gDAAgD;AAChD,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AACnC,iDAAiD;AACjD,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACxC,6CAA6C;AAC7C,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AACrC,iDAAiD;AACjD,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AACpC,yCAAyC;AACzC,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AACnC,8CAA8C;AAC9C,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AACrC,2CAA2C;AAC3C,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC;AAClC,6CAA6C;AAC7C,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AACpC,sDAAsD;AACtD,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AACzC,qFAAqF;AACrF,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAC1C,uDAAuD;AACvD,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AACzC,sDAAsD;AACtD,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAC;AACnC,wDAAwD;AACxD,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAEzC,4BAA4B;AAC5B,4BAA4B;AAC5B,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,CAAC;AAC5B,yBAAyB;AACzB,MAAM,CAAC,MAAM,QAAQ,GAAG,EAAE,CAAC;AAE3B,yBAAyB;AACzB,8BAA8B;AAC9B,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC;AAClC,yBAAyB;AACzB,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AACrC,uBAAuB;AACvB,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAErC,gCAAgC;AAChC,sDAAsD;AACtD,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAAG,CAAC;AAEjD,sBAAsB;AACtB,oDAAoD;AACpD,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC;AAC1C,qDAAqD;AACrD,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAExC,8BAA8B;AAC9B,qDAAqD;AACrD,MAAM,CAAC,MAAM,+BAA+B,GAAG,2BAA2B,CAAC;AAC3E,qDAAqD;AACrD,MAAM,CAAC,MAAM,+BAA+B,GAC1C,gDAAgD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rcrsr/claude-code-runner",
3
- "version": "0.10.0",
3
+ "version": "0.11.1",
4
4
  "description": "Execute Claude CLI with PTY handling, real-time tool visualization, and iterative execution support",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -46,7 +46,7 @@
46
46
  "author": "Andre Bremer",
47
47
  "license": "MIT",
48
48
  "dependencies": {
49
- "@rcrsr/rill": "~0.5.0",
49
+ "@rcrsr/rill": "~0.7.2",
50
50
  "node-pty": "^1.1.0"
51
51
  },
52
52
  "devDependencies": {
@@ -55,8 +55,6 @@
55
55
  "@vitest/coverage-v8": "^4.0.18",
56
56
  "eslint": "^9.39.2",
57
57
  "eslint-plugin-simple-import-sort": "^12.1.1",
58
- "ink": "^6.6.0",
59
- "ink-spinner": "^5.0.0",
60
58
  "prettier": "^3.8.1",
61
59
  "react": "^19.2.4",
62
60
  "tsc-files": "^1.1.4",
@@ -1,2 +0,0 @@
1
- export * from './runner.js';
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
@@ -1,2 +0,0 @@
1
- export * from './runner.js';
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
@@ -1,22 +0,0 @@
1
- /**
2
- * Core runner with iteration control and signal detection
3
- */
4
- import type { FormatterState } from '../output/formatter.js';
5
- import type { Logger } from '../output/logger.js';
6
- import type { RunnerConfig, SignalRunResult } from '../types/runner.js';
7
- export interface RunnerContext {
8
- config: RunnerConfig;
9
- logger: Logger;
10
- formatterState: FormatterState;
11
- cwd: string;
12
- runId: string | null;
13
- }
14
- export interface StepContext {
15
- stepNum: number;
16
- }
17
- /**
18
- * Run a command with RUNNER signal support
19
- * Handles iteration loop and signal detection
20
- */
21
- export declare function runWithSignals(promptText: string, displayCommand: string, startTime: number, context: RunnerContext, step?: StepContext): Promise<SignalRunResult>;
22
- //# sourceMappingURL=runner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGlD,OAAO,KAAK,EACV,YAAY,EAEZ,eAAe,EAChB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,cAAc,CAAC;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,aAAa,EACtB,IAAI,GAAE,WAA4B,GACjC,OAAO,CAAC,eAAe,CAAC,CAwG1B"}
@@ -1,100 +0,0 @@
1
- /**
2
- * Core runner with iteration control and signal detection
3
- */
4
- import { colors, formatDuration, printRunner } from '../output/colors.js';
5
- import { detectRunnerSignal } from '../parsers/signals.js';
6
- import { spawnClaude } from '../process/pty.js';
7
- /**
8
- * Run a command with RUNNER signal support
9
- * Handles iteration loop and signal detection
10
- */
11
- export async function runWithSignals(promptText, displayCommand, startTime, context, step = { stepNum: 1 }) {
12
- const { config, logger, formatterState, cwd } = context;
13
- const { verbosity, maxIterations, parallelThresholdMs, iterationPauseMs, model, } = config;
14
- let iteration = 0;
15
- let lastClaudeText = '';
16
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- intentional infinite loop with internal exits
17
- while (true) {
18
- iteration++;
19
- // Check max iterations
20
- if (iteration > maxIterations) {
21
- const totalDuration = Date.now() - startTime;
22
- printRunner(`${colors.red}Run stopped${colors.reset} max iterations (${maxIterations}) in ${formatDuration(totalDuration)}`);
23
- logger.logEvent({
24
- event: 'max_iterations',
25
- step: step.stepNum,
26
- maxIterations,
27
- });
28
- return { status: 'error', claudeText: lastClaudeText };
29
- }
30
- // Log iteration for subsequent iterations
31
- if (iteration > 1) {
32
- logger.logEvent({
33
- event: 'iteration_start',
34
- step: step.stepNum,
35
- iteration,
36
- });
37
- }
38
- // Print running message
39
- if (verbosity !== 'quiet') {
40
- const iterLabel = iteration > 1 ? ` (iter ${iteration})` : '';
41
- const separator = displayCommand.startsWith('with ') ? ' ' : ': ';
42
- printRunner(`Running step ${step.stepNum}${iterLabel}${separator}${displayCommand}`);
43
- }
44
- // Update formatter with current step
45
- formatterState.currentStep = iteration;
46
- // Run Claude
47
- const { exitCode, claudeText } = await spawnClaude({
48
- prompt: promptText,
49
- cwd,
50
- verbosity,
51
- logger,
52
- formatterState,
53
- parallelThresholdMs,
54
- model,
55
- });
56
- lastClaudeText = claudeText;
57
- const signal = detectRunnerSignal(claudeText);
58
- const stepDuration = Date.now() - startTime;
59
- if (signal === 'blocked') {
60
- printRunner(`${colors.red}Blocked${colors.reset} step ${step.stepNum} in ${formatDuration(stepDuration)}`);
61
- logger.logEvent({ event: 'blocked', step: step.stepNum });
62
- return { status: 'blocked', claudeText };
63
- }
64
- else if (signal === 'error') {
65
- printRunner(`${colors.red}Failed${colors.reset} step ${step.stepNum} in ${formatDuration(stepDuration)}`);
66
- logger.logEvent({ event: 'error', step: step.stepNum });
67
- return { status: 'error', claudeText };
68
- }
69
- else if (signal === 'repeat_step') {
70
- printRunner(`Repeating step ${step.stepNum}`);
71
- logger.logEvent({
72
- event: 'iteration_complete',
73
- step: step.stepNum,
74
- iteration,
75
- repeating: true,
76
- });
77
- await sleep(iterationPauseMs);
78
- }
79
- else {
80
- // No signal - step completed
81
- const exitStatus = exitCode === 0 ? 'ok' : 'error';
82
- if (exitCode !== 0) {
83
- printRunner(`${colors.red}Failed${colors.reset} step ${step.stepNum} in ${formatDuration(stepDuration)}`);
84
- }
85
- logger.logEvent({
86
- event: 'step_complete',
87
- step: step.stepNum,
88
- exit: exitCode,
89
- });
90
- return { status: exitStatus, claudeText };
91
- }
92
- }
93
- }
94
- /**
95
- * Sleep for a given number of milliseconds
96
- */
97
- function sleep(ms) {
98
- return new Promise((resolve) => setTimeout(resolve, ms));
99
- }
100
- //# sourceMappingURL=runner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":"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"}
@@ -1,34 +0,0 @@
1
- /**
2
- * UI component formatting functions for parallel agent display
3
- */
4
- import type { AgentState, LogEntry } from './ui-state.js';
5
- /**
6
- * Format single log entry with colors
7
- * Timestamp: dim HH:MM:SS.mmm
8
- * Agent name: yellow
9
- * Agent label: magenta
10
- * Tool names: blue
11
- * Completion stats: green duration and count
12
- */
13
- export declare function formatLogEntry(entry: LogEntry): string;
14
- /**
15
- * Generate ANSI-formatted lines for consolidated timeline
16
- * Shows max 10 entries during execution, all entries when complete
17
- *
18
- * @param entries - Log entries sorted chronologically
19
- * @param allComplete - Whether all agents have completed
20
- * @returns Array of formatted lines including header and entries
21
- */
22
- export declare function renderMainLog(entries: LogEntry[], allComplete: boolean): string[];
23
- /**
24
- * Generate ANSI-formatted lines for single agent box
25
- * Width adapts to terminal width, max 70 characters
26
- * Single-line border style using box-drawing characters
27
- *
28
- * @param agent - Agent state with name, label, description, tool calls
29
- * @param width - Box width in characters
30
- * @returns Array of formatted lines representing the box
31
- * @throws {Error} if width < 30
32
- */
33
- export declare function renderAgentBox(agent: AgentState, width: number): string[];
34
- //# sourceMappingURL=ui-components.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ui-components.d.ts","sourceRoot":"","sources":["../../src/output/ui-components.ts"],"names":[],"mappings":"AAAA;;GAEG;AAeH,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAkB1D;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,CA4CtD;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,QAAQ,EAAE,EACnB,WAAW,EAAE,OAAO,GACnB,MAAM,EAAE,CAoBV;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CA6EzE"}
@@ -1,158 +0,0 @@
1
- /**
2
- * UI component formatting functions for parallel agent display
3
- */
4
- import { UI_MAX_VISIBLE_LOG, UI_MAX_VISIBLE_TOOLS, UI_MIN_BOX_WIDTH, } from '../utils/constants.js';
5
- import { colors } from './colors.js';
6
- import { colorize, formatDuration, formatTimestamp, stripAnsi, truncate, } from './colors.js';
7
- /**
8
- * Spinner frames for loading animation
9
- */
10
- const SPINNER_FRAMES = [
11
- '⠋',
12
- '⠙',
13
- '⠹',
14
- '⠸',
15
- '⠼',
16
- '⠴',
17
- '⠦',
18
- '⠧',
19
- '⠇',
20
- '⠏',
21
- ];
22
- /**
23
- * Format single log entry with colors
24
- * Timestamp: dim HH:MM:SS.mmm
25
- * Agent name: yellow
26
- * Agent label: magenta
27
- * Tool names: blue
28
- * Completion stats: green duration and count
29
- */
30
- export function formatLogEntry(entry) {
31
- const timestamp = colorize(formatTimestamp(entry.timestamp), 'dim');
32
- const agentName = colorize(entry.agentName, 'yellow');
33
- const label = colorize(`[${entry.agentLabel}]`, 'magenta');
34
- switch (entry.type) {
35
- case 'invocation': {
36
- return `${timestamp} ${label} ${agentName} ${entry.content}`;
37
- }
38
- case 'tool': {
39
- // Extract tool name and args from content format: "toolName(args)"
40
- const regex = /^([^(]+)\((.*)\)$/;
41
- const match = regex.exec(entry.content);
42
- const toolNamePart = match?.[1];
43
- const argsPart = match?.[2];
44
- if (toolNamePart !== undefined && argsPart !== undefined) {
45
- const toolName = colorize(toolNamePart, 'blue');
46
- return `${timestamp} ${label} ${agentName} ${toolName}(${argsPart})`;
47
- }
48
- // Fallback if content doesn't match expected format
49
- return `${timestamp} ${label} ${agentName} ${entry.content}`;
50
- }
51
- case 'completion': {
52
- const duration = entry.duration !== undefined
53
- ? colorize(formatDuration(entry.duration), 'green')
54
- : '';
55
- const messageCount = entry.messageCount !== undefined
56
- ? colorize(`${entry.messageCount} msgs`, 'green')
57
- : '';
58
- const stats = [duration, messageCount].filter(Boolean).join(' ');
59
- return `${timestamp} ${label} ${agentName} ${entry.content}${stats ? ` ${stats}` : ''}`;
60
- }
61
- default: {
62
- // Exhaustiveness check - should never reach here
63
- entry.type;
64
- return `${timestamp} ${label} ${agentName} ${entry.content}`;
65
- }
66
- }
67
- }
68
- /**
69
- * Generate ANSI-formatted lines for consolidated timeline
70
- * Shows max 10 entries during execution, all entries when complete
71
- *
72
- * @param entries - Log entries sorted chronologically
73
- * @param allComplete - Whether all agents have completed
74
- * @returns Array of formatted lines including header and entries
75
- */
76
- export function renderMainLog(entries, allComplete) {
77
- const lines = [];
78
- // Generate header with centered "main log" and optional spinner
79
- const headerText = 'main log';
80
- const spinner = allComplete ? '' : SPINNER_FRAMES[0];
81
- const header = spinner ? `${spinner} ${headerText}` : headerText;
82
- lines.push(header);
83
- // Determine which entries to show based on completion status
84
- const visibleEntries = allComplete
85
- ? entries
86
- : entries.slice(-UI_MAX_VISIBLE_LOG);
87
- // Format and add each visible entry
88
- for (const entry of visibleEntries) {
89
- lines.push(formatLogEntry(entry));
90
- }
91
- return lines;
92
- }
93
- /**
94
- * Generate ANSI-formatted lines for single agent box
95
- * Width adapts to terminal width, max 70 characters
96
- * Single-line border style using box-drawing characters
97
- *
98
- * @param agent - Agent state with name, label, description, tool calls
99
- * @param width - Box width in characters
100
- * @returns Array of formatted lines representing the box
101
- * @throws {Error} if width < 30
102
- */
103
- export function renderAgentBox(agent, width) {
104
- // EC-9: Validate minimum width
105
- if (width < UI_MIN_BOX_WIDTH) {
106
- throw new Error(`Box width ${width} below minimum 30`);
107
- }
108
- const lines = [];
109
- const contentWidth = width - 4; // Account for border characters and padding
110
- // Header: yellow name, magenta label, description
111
- const nameText = colorize(agent.name, 'yellow');
112
- const labelText = colorize(`[${agent.label}]`, 'magenta');
113
- // Calculate plain text lengths for layout
114
- const nameLen = agent.name.length;
115
- const labelLen = agent.label.length + 2; // brackets add 2 chars
116
- const prefixLen = nameLen + 1 + labelLen + 1; // name + space + label + space
117
- // Truncate description if needed (truncate adds '...' so subtract 3 from available space)
118
- const descMaxLen = contentWidth - prefixLen;
119
- const truncatedDesc = agent.description.length > descMaxLen
120
- ? truncate(agent.description, descMaxLen - 3)
121
- : agent.description;
122
- const headerContent = `${nameText} ${labelText} ${truncatedDesc}`;
123
- // Top border
124
- lines.push(`┌${'─'.repeat(width - 2)}┐`);
125
- // Header line - calculate padding based on actual plain-text length
126
- const headerPlainLength = stripAnsi(headerContent).length;
127
- lines.push(`│ ${headerContent}${' '.repeat(Math.max(0, contentWidth - headerPlainLength))} │`);
128
- // Body: 5 tool call lines or ellipsis
129
- if (agent.toolCalls.length === 0) {
130
- // AC-14: Empty tool call list shows ellipsis
131
- lines.push(`│ ${colors.dim}...${colors.reset}${' '.repeat(contentWidth - 3)} │`);
132
- }
133
- else {
134
- // Show last 5 tool calls
135
- const visibleCalls = agent.toolCalls.slice(-UI_MAX_VISIBLE_TOOLS);
136
- for (const call of visibleCalls) {
137
- const toolText = colorize(call.toolName, 'blue');
138
- const argsText = truncate(call.args, contentWidth - call.toolName.length - 2);
139
- const lineContent = `${toolText}(${argsText})`;
140
- const plainContent = `${call.toolName}(${argsText})`;
141
- const padding = ' '.repeat(Math.max(0, contentWidth - plainContent.length));
142
- lines.push(`│ ${lineContent}${padding} │`);
143
- }
144
- }
145
- // Footer: dim elapsed time, message count, spinner
146
- const elapsed = Date.now() - agent.startTime;
147
- const elapsedText = colorize(formatDuration(elapsed), 'dim');
148
- const messageText = colorize(`${agent.messageCount} msgs`, 'dim');
149
- const spinnerChar = agent.status === 'running' ? SPINNER_FRAMES[0] : '';
150
- const footerContent = `${elapsedText} ${messageText} ${spinnerChar}`;
151
- const footerPlain = `${formatDuration(elapsed)} ${agent.messageCount} msgs ${spinnerChar}`;
152
- const footerPadding = ' '.repeat(Math.max(0, contentWidth - footerPlain.length));
153
- lines.push(`│ ${footerContent}${footerPadding} │`);
154
- // Bottom border
155
- lines.push(`└${'─'.repeat(width - 2)}┘`);
156
- return lines;
157
- }
158
- //# sourceMappingURL=ui-components.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ui-components.js","sourceRoot":"","sources":["../../src/output/ui-components.ts"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- /**
2
- * UI renderer for parallel agent display
3
- * Manages 60fps render loop with terminal clear/redraw
4
- */
5
- import type { UIState } from './ui-state.js';
6
- export interface UIRenderer {
7
- start(): void;
8
- stop(): void;
9
- render(): void;
10
- }
11
- /**
12
- * Create a UI renderer with 60fps render loop
13
- * @param state - UI state to render
14
- * @returns UIRenderer interface
15
- * @throws {Error} EC-8: Terminal width < 70
16
- */
17
- export declare function createUIRenderer(state: UIState): UIRenderer;
18
- //# sourceMappingURL=ui-renderer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ui-renderer.d.ts","sourceRoot":"","sources":["../../src/output/ui-renderer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,WAAW,UAAU;IACzB,KAAK,IAAI,IAAI,CAAC;IACd,IAAI,IAAI,IAAI,CAAC;IACb,MAAM,IAAI,IAAI,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAgF3D"}
@@ -1,75 +0,0 @@
1
- /**
2
- * UI renderer for parallel agent display
3
- * Manages 60fps render loop with terminal clear/redraw
4
- */
5
- import { UI_MAX_BOX_WIDTH, UI_MIN_TERMINAL_WIDTH, UI_RENDER_INTERVAL_MS, UI_SPINNER_INTERVAL_MS, } from '../utils/constants.js';
6
- import { terminalLog } from './colors.js';
7
- import { renderAgentBox, renderMainLog } from './ui-components.js';
8
- /**
9
- * Create a UI renderer with 60fps render loop
10
- * @param state - UI state to render
11
- * @returns UIRenderer interface
12
- * @throws {Error} EC-8: Terminal width < 70
13
- */
14
- export function createUIRenderer(state) {
15
- let intervalId = null;
16
- let frameCount = 0;
17
- return {
18
- start() {
19
- // EC-7: Already started → Error
20
- if (intervalId !== null) {
21
- throw new Error('Renderer already running');
22
- }
23
- // EC-8: Terminal width < 70 → Error
24
- const terminalWidth = process.stdout.columns || 80;
25
- if (terminalWidth < UI_MIN_TERMINAL_WIDTH) {
26
- throw new Error(`Terminal width ${terminalWidth} below minimum ${UI_MIN_TERMINAL_WIDTH}`);
27
- }
28
- // Start 60fps render loop (16ms interval)
29
- intervalId = setInterval(() => {
30
- frameCount++;
31
- // Advance spinner every 96ms (every 6 frames)
32
- if (frameCount % (UI_SPINNER_INTERVAL_MS / UI_RENDER_INTERVAL_MS) ===
33
- 0) {
34
- state.spinnerFrame = (state.spinnerFrame + 1) % 4;
35
- }
36
- // Clear terminal and render current state
37
- this.render();
38
- // Stop when all agents complete
39
- const allComplete = Array.from(state.agents.values()).every((agent) => agent.status === 'complete');
40
- if (allComplete && state.agents.size > 0) {
41
- this.stop();
42
- }
43
- }, UI_RENDER_INTERVAL_MS);
44
- },
45
- stop() {
46
- if (intervalId !== null) {
47
- clearInterval(intervalId);
48
- intervalId = null;
49
- }
50
- },
51
- render() {
52
- // Clear terminal
53
- console.clear();
54
- // Calculate box width (terminal width capped at max)
55
- const terminalWidth = process.stdout.columns || 80;
56
- const boxWidth = Math.min(terminalWidth - 2, UI_MAX_BOX_WIDTH);
57
- // Show running agents with box rendering
58
- const runningAgents = Array.from(state.agents.values()).filter((agent) => agent.status === 'running');
59
- for (const agent of runningAgents) {
60
- const boxLines = renderAgentBox(agent, boxWidth);
61
- for (const line of boxLines) {
62
- terminalLog(line);
63
- }
64
- terminalLog(''); // Spacing between boxes
65
- }
66
- // Show main log
67
- const allComplete = runningAgents.length === 0 && state.agents.size > 0;
68
- const logLines = renderMainLog(state.mainLog, allComplete);
69
- for (const line of logLines) {
70
- terminalLog(line);
71
- }
72
- },
73
- };
74
- }
75
- //# sourceMappingURL=ui-renderer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ui-renderer.js","sourceRoot":"","sources":["../../src/output/ui-renderer.ts"],"names":[],"mappings":"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"}
@@ -1,71 +0,0 @@
1
- /**
2
- * UI state management for parallel agent display
3
- */
4
- import type { ActiveTask } from '../types/runner.js';
5
- /**
6
- * Entry in the main execution log
7
- */
8
- export interface LogEntry {
9
- timestamp: Date;
10
- agentLabel: string;
11
- agentName: string;
12
- type: 'invocation' | 'tool' | 'completion';
13
- content: string;
14
- duration?: number;
15
- messageCount?: number;
16
- }
17
- /**
18
- * Individual tool call record
19
- */
20
- export interface ToolCallEntry {
21
- toolName: string;
22
- args: string;
23
- timestamp: Date;
24
- }
25
- /**
26
- * State for a single agent/task
27
- */
28
- export interface AgentState {
29
- id: string;
30
- name: string;
31
- description: string;
32
- label: string;
33
- toolCalls: ToolCallEntry[];
34
- messageCount: number;
35
- startTime: number;
36
- status: 'running' | 'complete';
37
- }
38
- /**
39
- * Overall UI state for parallel agent display
40
- */
41
- export interface UIState {
42
- agents: Map<string, AgentState>;
43
- mainLog: LogEntry[];
44
- renderStartTime: number;
45
- spinnerFrame: number;
46
- /** Callback invoked when first agent is registered */
47
- onFirstAgent?: () => void;
48
- }
49
- /**
50
- * Create initial UI state with empty agents and log
51
- */
52
- export declare function createUIState(): UIState;
53
- /**
54
- * Register a new agent in the UI state
55
- * @throws {Error} if agent count exceeds UI_MAX_AGENTS
56
- * @throws {Error} if agent ID already registered
57
- */
58
- export declare function registerAgent(state: UIState, task: ActiveTask, description: string): void;
59
- /**
60
- * Record a tool call for an agent
61
- * @throws {Error} if agent ID not found
62
- * @throws {Error} if tool name empty
63
- */
64
- export declare function recordToolCall(state: UIState, agentId: string, toolName: string, args: string): void;
65
- /**
66
- * Mark agent complete and add completion entry to main log
67
- * @throws {Error} if agent ID not found
68
- * @throws {Error} if agent already complete
69
- */
70
- export declare function completeAgent(state: UIState, agentId: string): void;
71
- //# sourceMappingURL=ui-state.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ui-state.d.ts","sourceRoot":"","sources":["../../src/output/ui-state.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAOrD;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,IAAI,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,YAAY,GAAG,MAAM,GAAG,YAAY,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,UAAU,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAChC,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAOvC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,UAAU,EAChB,WAAW,EAAE,MAAM,GAClB,IAAI,CAkDN;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GACX,IAAI,CAqCN;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CA8BnE"}