@rcrsr/claude-code-runner 0.3.0 → 0.5.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 (87) hide show
  1. package/README.md +131 -37
  2. package/dist/cli/args.d.ts +0 -3
  3. package/dist/cli/args.d.ts.map +1 -1
  4. package/dist/cli/args.js +74 -25
  5. package/dist/cli/args.js.map +1 -1
  6. package/dist/core/runner.d.ts +6 -2
  7. package/dist/core/runner.d.ts.map +1 -1
  8. package/dist/core/runner.js +31 -23
  9. package/dist/core/runner.js.map +1 -1
  10. package/dist/deaddrop/client.d.ts +23 -0
  11. package/dist/deaddrop/client.d.ts.map +1 -0
  12. package/dist/deaddrop/client.js +47 -0
  13. package/dist/deaddrop/client.js.map +1 -0
  14. package/dist/deaddrop/index.d.ts +2 -0
  15. package/dist/deaddrop/index.d.ts.map +1 -0
  16. package/dist/deaddrop/index.js +2 -0
  17. package/dist/deaddrop/index.js.map +1 -0
  18. package/dist/index.js +115 -44
  19. package/dist/index.js.map +1 -1
  20. package/dist/output/colors.d.ts +25 -5
  21. package/dist/output/colors.d.ts.map +1 -1
  22. package/dist/output/colors.js +33 -14
  23. package/dist/output/colors.js.map +1 -1
  24. package/dist/output/deaddrop-queue.d.ts +45 -0
  25. package/dist/output/deaddrop-queue.d.ts.map +1 -0
  26. package/dist/output/deaddrop-queue.js +82 -0
  27. package/dist/output/deaddrop-queue.js.map +1 -0
  28. package/dist/output/formatter.d.ts +5 -0
  29. package/dist/output/formatter.d.ts.map +1 -1
  30. package/dist/output/formatter.js +24 -22
  31. package/dist/output/formatter.js.map +1 -1
  32. package/dist/process/pty.d.ts.map +1 -1
  33. package/dist/process/pty.js +3 -2
  34. package/dist/process/pty.js.map +1 -1
  35. package/dist/script/index.d.ts +8 -0
  36. package/dist/script/index.d.ts.map +1 -0
  37. package/dist/script/index.js +10 -0
  38. package/dist/script/index.js.map +1 -0
  39. package/dist/script/loader.d.ts +13 -0
  40. package/dist/script/loader.d.ts.map +1 -0
  41. package/dist/script/loader.js +66 -0
  42. package/dist/script/loader.js.map +1 -0
  43. package/dist/script/parser.d.ts +63 -0
  44. package/dist/script/parser.d.ts.map +1 -0
  45. package/dist/script/parser.js +349 -0
  46. package/dist/script/parser.js.map +1 -0
  47. package/dist/script/types.d.ts +49 -0
  48. package/dist/script/types.d.ts.map +1 -0
  49. package/dist/script/types.js +5 -0
  50. package/dist/script/types.js.map +1 -0
  51. package/dist/script/variables.d.ts +27 -0
  52. package/dist/script/variables.d.ts.map +1 -0
  53. package/dist/script/variables.js +74 -0
  54. package/dist/script/variables.js.map +1 -0
  55. package/dist/templates/command.d.ts +38 -9
  56. package/dist/templates/command.d.ts.map +1 -1
  57. package/dist/templates/command.js +81 -27
  58. package/dist/templates/command.js.map +1 -1
  59. package/dist/types/index.d.ts +1 -0
  60. package/dist/types/index.d.ts.map +1 -1
  61. package/dist/types/index.js +1 -0
  62. package/dist/types/index.js.map +1 -1
  63. package/dist/types/runner.d.ts +13 -0
  64. package/dist/types/runner.d.ts.map +1 -1
  65. package/dist/types/runner.js +5 -3
  66. package/dist/types/runner.js.map +1 -1
  67. package/dist/types/tools.d.ts +64 -0
  68. package/dist/types/tools.d.ts.map +1 -0
  69. package/dist/types/tools.js +12 -0
  70. package/dist/types/tools.js.map +1 -0
  71. package/dist/utils/arguments.d.ts +19 -0
  72. package/dist/utils/arguments.d.ts.map +1 -0
  73. package/dist/utils/arguments.js +31 -0
  74. package/dist/utils/arguments.js.map +1 -0
  75. package/dist/utils/constants.d.ts +49 -0
  76. package/dist/utils/constants.d.ts.map +1 -0
  77. package/dist/utils/constants.js +54 -0
  78. package/dist/utils/constants.js.map +1 -0
  79. package/dist/utils/formatting.d.ts +10 -0
  80. package/dist/utils/formatting.d.ts.map +1 -0
  81. package/dist/utils/formatting.js +19 -0
  82. package/dist/utils/formatting.js.map +1 -0
  83. package/dist/utils/index.d.ts +7 -0
  84. package/dist/utils/index.d.ts.map +1 -0
  85. package/dist/utils/index.js +7 -0
  86. package/dist/utils/index.js.map +1 -0
  87. package/package.json +1 -1
@@ -0,0 +1,47 @@
1
+ /**
2
+ * DeadDrop client for sending messages to a Deaddrop endpoint
3
+ * https://deaddrop.sh
4
+ */
5
+ const DEFAULT_HOST = 'https://deaddrop.bezoan.com';
6
+ /**
7
+ * Create a DeadDrop client from environment variables
8
+ * Returns null if DEADDROP_API_KEY is not set
9
+ */
10
+ export function createDeadDropClientFromEnv(runId) {
11
+ const apiKey = process.env['DEADDROP_API_KEY'];
12
+ if (!apiKey) {
13
+ return null;
14
+ }
15
+ const host = process.env['DEADDROP_HOST'] ?? DEFAULT_HOST;
16
+ return createDeadDropClient({ apiKey, host, runId });
17
+ }
18
+ /**
19
+ * Create a DeadDrop client with the given configuration
20
+ */
21
+ export function createDeadDropClient(config) {
22
+ const host = config.host.replace(/\/+$/, ''); // Remove trailing slashes
23
+ const url = `${host}/v1/messages`;
24
+ return {
25
+ async send(content, user) {
26
+ try {
27
+ const response = await fetch(url, {
28
+ method: 'POST',
29
+ headers: {
30
+ 'Content-Type': 'text/markdown',
31
+ 'X-API-Key': config.apiKey,
32
+ 'X-DeadDrop-User': user,
33
+ 'X-DeadDrop-Subject': config.runId,
34
+ },
35
+ body: content,
36
+ });
37
+ if (!response.ok) {
38
+ console.warn(`[DEADDROP] Warning: Failed to send message (${response.status})`);
39
+ }
40
+ }
41
+ catch (err) {
42
+ console.warn(`[DEADDROP] Warning: ${err.message}`);
43
+ }
44
+ },
45
+ };
46
+ }
47
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/deaddrop/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH,MAAM,YAAY,GAAG,6BAA6B,CAAC;AAEnD;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CACzC,KAAa;IAEb,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAC/C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,YAAY,CAAC;IAC1D,OAAO,oBAAoB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAsB;IACzD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,0BAA0B;IACxE,MAAM,GAAG,GAAG,GAAG,IAAI,cAAc,CAAC;IAElC,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,OAAe,EAAE,IAAkB;YAC5C,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;oBAChC,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE;wBACP,cAAc,EAAE,eAAe;wBAC/B,WAAW,EAAE,MAAM,CAAC,MAAM;wBAC1B,iBAAiB,EAAE,IAAI;wBACvB,oBAAoB,EAAE,MAAM,CAAC,KAAK;qBACnC;oBACD,IAAI,EAAE,OAAO;iBACd,CAAC,CAAC;gBAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACjB,OAAO,CAAC,IAAI,CACV,+CAA+C,QAAQ,CAAC,MAAM,GAAG,CAClE,CAAC;gBACJ,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CAAC,uBAAwB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './client.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/deaddrop/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './client.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/deaddrop/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -3,21 +3,53 @@
3
3
  * Claude Code Runner - executes claude CLI with proper TTY handling
4
4
  * Shows intermediate tool calls and responses in real-time
5
5
  */
6
- import { parseArgs, parseCommandLine } from './cli/args.js';
7
- import { runWithSignals } from './core/runner.js';
8
- import { colors, formatElapsed, printRunner } from './output/colors.js';
6
+ import { randomBytes } from 'crypto';
7
+ import { parseArgs } from './cli/args.js';
8
+ import { runWithSignals, } from './core/runner.js';
9
+ import { createDeadDropClientFromEnv } from './deaddrop/index.js';
10
+ import { configureDeadDrop, flushDeadDrop, printRunner, printRunnerInfo, } from './output/colors.js';
9
11
  import { createFormatterState } from './output/formatter.js';
10
12
  import { createLogger } from './output/logger.js';
13
+ import { captureOutput, createVariableStore, getSubstitutionList, loadScript, substituteVariables, } from './script/index.js';
14
+ import { loadCommandTemplate } from './templates/command.js';
11
15
  import { DEFAULT_CONFIG } from './types/runner.js';
16
+ import { formatSize } from './utils/formatting.js';
17
+ /**
18
+ * Generate a short unique run ID (8 chars, uppercase)
19
+ */
20
+ function generateRunId() {
21
+ return randomBytes(4).toString('hex').toUpperCase();
22
+ }
23
+ /**
24
+ * Format variables used for "with X" clause
25
+ */
26
+ function formatVarsUsed(vars) {
27
+ if (vars.length === 0)
28
+ return '';
29
+ // Convert $_ to "last result", keep others as-is
30
+ const labels = vars.map((v) => (v === '$_' ? 'last result' : v));
31
+ return `with ${labels.join(', ')}: `;
32
+ }
12
33
  async function main() {
13
34
  const totalStart = Date.now();
14
35
  const args = process.argv.slice(2);
15
36
  const parsed = parseArgs(args);
37
+ // Generate run ID for this session
38
+ const runId = generateRunId();
16
39
  // Merge config with defaults
17
40
  const config = {
18
41
  ...DEFAULT_CONFIG,
19
42
  ...parsed.config,
20
43
  };
44
+ // Configure deaddrop if enabled
45
+ if (config.deaddrop) {
46
+ const client = createDeadDropClientFromEnv(runId);
47
+ if (!client) {
48
+ console.error('Error: --deaddrop requires DEADDROP_API_KEY environment variable');
49
+ process.exit(1);
50
+ }
51
+ configureDeadDrop(client.send.bind(client));
52
+ }
21
53
  // Create logger
22
54
  const commandName = parsed.scriptMode
23
55
  ? 'script'
@@ -33,69 +65,108 @@ async function main() {
33
65
  logger,
34
66
  formatterState,
35
67
  cwd: process.cwd(),
68
+ runId,
36
69
  };
37
- // Print config with [RUNNER] messages
38
- printRunner(`Mode: ${parsed.subcommand} | Verbosity: ${config.verbosity}`);
70
+ // Emit starting run message first (operational, sent to deaddrop)
71
+ printRunner(`Starting run ${runId}`);
72
+ // Print config with [RUNNER] messages (informational, not sent to deaddrop)
73
+ printRunnerInfo(`Mode: ${parsed.subcommand} | Verbosity: ${config.verbosity}`);
39
74
  if (config.model) {
40
- printRunner(`Model: ${config.model}`);
75
+ printRunnerInfo(`Model: ${config.model}`);
76
+ }
77
+ if (config.deaddrop) {
78
+ printRunnerInfo(`Deaddrop: enabled`);
41
79
  }
42
80
  if (logger.filePath) {
43
- printRunner(`Log: ${logger.filePath}`);
81
+ printRunnerInfo(`Log: ${logger.filePath}`);
44
82
  }
45
83
  logger.log(`Started: ${new Date().toISOString()}`);
46
- if (parsed.scriptMode) {
47
- // Script mode: run each line
48
- await runScriptMode(parsed.scriptLines, context, totalStart);
84
+ // Build script lines - single prompt/command becomes a 1-step script
85
+ let lines;
86
+ let scriptArgs = [];
87
+ if (parsed.scriptMode && parsed.scriptFile) {
88
+ const script = loadScript(parsed.scriptFile, parsed.scriptArgs);
89
+ lines = script.lines;
90
+ scriptArgs = parsed.scriptArgs;
49
91
  }
50
92
  else {
51
- // Single command mode
52
- await runSingleMode(parsed.prompt, parsed.subcommand, parsed.displayCommand, context, totalStart);
93
+ // Single prompt or command becomes a 1-step script
94
+ lines = [{ type: 'prompt', text: parsed.prompt }];
53
95
  }
96
+ // Run the script
97
+ const success = await runScript(lines, scriptArgs, context, totalStart);
98
+ context.logger.close();
99
+ await flushDeadDrop();
100
+ process.exit(success ? 0 : 1);
54
101
  }
55
102
  /**
56
- * Run in single command mode (prompt or command)
103
+ * Build display string for a script line
57
104
  */
58
- async function runSingleMode(prompt, subcommand, displayCommand, context, startTime) {
59
- context.logger.log(`${subcommand}: ${displayCommand}\n`);
60
- const result = await runWithSignals(prompt, displayCommand, startTime, context);
61
- context.logger.close();
62
- process.exit(result === 'ok' ? 0 : 1);
105
+ function getDisplayLine(line) {
106
+ if (line.type === 'prompt') {
107
+ const preview = line.text.length > 50 ? line.text.slice(0, 50) + '...' : line.text;
108
+ return `"${preview}"`;
109
+ }
110
+ return `command("${line.name}")`;
63
111
  }
64
112
  /**
65
- * Run in script mode
113
+ * Run a script (unified execution for single prompts and multi-step scripts)
66
114
  */
67
- async function runScriptMode(scriptLines, context, startTime) {
68
- printRunner(`Running script: ${scriptLines.length} commands`);
69
- context.logger.log(`Script: ${scriptLines.length} commands\n`);
70
- for (const [i, line] of scriptLines.entries()) {
71
- context.logger.log(`\n=== [${i + 1}/${scriptLines.length}] ${line} ===\n`);
72
- let result;
73
- try {
74
- const parsed = parseCommandLine(line);
75
- result = await runWithSignals(parsed.prompt, line, startTime, context);
115
+ async function runScript(lines, scriptArgs, context, startTime) {
116
+ const store = createVariableStore();
117
+ let completedSteps = 0;
118
+ for (const [i, line] of lines.entries()) {
119
+ const stepNum = i + 1;
120
+ const displayLine = getDisplayLine(line);
121
+ context.logger.log(`\n=== Step ${stepNum}: ${displayLine} ===\n`);
122
+ // Get the prompt text
123
+ let promptText;
124
+ if (line.type === 'prompt') {
125
+ promptText = line.text;
76
126
  }
77
- catch (err) {
78
- printRunner(`${colors.red}Parse error:${colors.reset} ${err.message}`);
79
- result = 'error';
127
+ else {
128
+ const template = loadCommandTemplate(line.name, line.args);
129
+ promptText = template.prompt;
80
130
  }
81
- if (result === 'blocked' || result === 'error') {
82
- const totalDuration = Math.round((Date.now() - startTime) / 1000);
83
- printRunner(`${colors.red}Script stopped${colors.reset} [${i + 1}/${scriptLines.length}] steps in ${formatElapsed(totalDuration)}`);
84
- context.logger.log(`\nSCRIPT STOPPED at step ${i + 1}, ${totalDuration}s total`);
85
- context.logger.close();
86
- process.exit(1);
131
+ // Substitute variables
132
+ const varsUsed = getSubstitutionList(promptText, store);
133
+ const finalPrompt = substituteVariables(promptText, store, scriptArgs);
134
+ // Build display: show substituted prompt and what variables were used
135
+ const substitutedDisplay = getDisplayLine({
136
+ type: 'prompt',
137
+ text: finalPrompt,
138
+ });
139
+ const withClause = formatVarsUsed(varsUsed);
140
+ // Set step number for formatter output
141
+ context.formatterState.currentStep = stepNum;
142
+ // Run via runWithSignals (handles iterations, signals, output)
143
+ const stepContext = { stepNum };
144
+ const result = await runWithSignals(finalPrompt, `${withClause}${substitutedDisplay}`, startTime, context, stepContext);
145
+ // Capture output for variable store
146
+ captureOutput(store, result.claudeText, line.capture);
147
+ // Print step completion with result size
148
+ const durationMs = context.formatterState.lastStepDurationMs;
149
+ const duration = durationMs ? `${(durationMs / 1000).toFixed(1)}s` : '?';
150
+ const size = formatSize(result.claudeText.length);
151
+ const captureLabel = line.capture ? `$${line.capture}` : 'result';
152
+ printRunner(`Completed step ${stepNum} in ${duration}, ${captureLabel} = ${size}`);
153
+ // Handle failure (runWithSignals already printed the error)
154
+ if (result.status !== 'ok') {
155
+ return false;
87
156
  }
157
+ completedSteps++;
88
158
  }
89
- // All commands completed
90
- const totalDuration = Math.round((Date.now() - startTime) / 1000);
91
- printRunner(`${colors.green}Script completed${colors.reset} [${scriptLines.length}] steps in ${formatElapsed(totalDuration)}`);
92
- context.logger.log(`\nSCRIPT COMPLETE, ${scriptLines.length} commands, ${totalDuration}s total`);
93
- context.logger.close();
94
- process.exit(0);
159
+ // Print completion with run ID, step count, and duration
160
+ const totalDuration = Date.now() - startTime;
161
+ const stepWord = completedSteps === 1 ? 'step' : 'steps';
162
+ const durationSec = (totalDuration / 1000).toFixed(1);
163
+ printRunner(`Completed run ${context.runId} (${completedSteps} ${stepWord}) in ${durationSec}s`);
164
+ return true;
95
165
  }
96
166
  // Run main
97
167
  main().catch((err) => {
98
- console.error('Fatal error:', err);
168
+ const message = err instanceof Error ? err.message : String(err);
169
+ console.error(`Error: ${message}`);
99
170
  process.exit(1);
100
171
  });
101
172
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
1
  /**
2
2
  * ANSI color codes for terminal output
3
3
  */
4
+ import { configureDeadDrop, flushDeadDrop } from './deaddrop-queue.js';
5
+ export { configureDeadDrop, flushDeadDrop };
4
6
  export declare const colors: {
5
7
  readonly reset: "\u001B[0m";
6
8
  readonly dim: "\u001B[2m";
@@ -24,6 +26,7 @@ export declare function colorize(text: string, color: ColorName): string;
24
26
  export declare function truncate(str: string, len: number): string;
25
27
  /**
26
28
  * Format duration in human-readable form
29
+ * Examples: 450ms, 2.5s, 1m30s, 1h2m3s
27
30
  */
28
31
  export declare function formatDuration(ms: number): string;
29
32
  /**
@@ -34,16 +37,33 @@ export declare function shortenPath(filePath: string): string;
34
37
  * Format current timestamp as HH:MM:SS.mmm
35
38
  */
36
39
  export declare function formatTimestamp(date?: Date): string;
37
- /**
38
- * Format elapsed seconds as hh:mm:ss
39
- */
40
- export declare function formatElapsed(seconds: number): string;
41
40
  /**
42
41
  * Get a timestamped prefix for output lines
43
42
  */
44
43
  export declare function timestampPrefix(): string;
45
44
  /**
46
- * Print a [RUNNER] control message with timestamp
45
+ * Deaddrop user type
46
+ */
47
+ export type DeadDropUser = 'Runner' | 'Claude Code';
48
+ /**
49
+ * Deaddrop send function type (to avoid circular imports)
50
+ */
51
+ export type DeadDropSender = (content: string, user: DeadDropUser) => Promise<void>;
52
+ /**
53
+ * Print a [RUNNER] operational message with timestamp
54
+ * Automatically sends to Deaddrop if configured (without prefix)
47
55
  */
48
56
  export declare function printRunner(message: string): void;
57
+ /**
58
+ * Print a [RUNNER] informational message with timestamp
59
+ * Does NOT send to Deaddrop (used for startup config, debug info)
60
+ */
61
+ export declare function printRunnerInfo(message: string): void;
62
+ /**
63
+ * Print a [CLAUDE] message with timestamp
64
+ * Automatically sends to Deaddrop if configured (without prefix)
65
+ * @param message - Display message (may be truncated/formatted for console)
66
+ * @param rawForDeaddrop - Original unmodified text to send to deaddrop (preserves newlines)
67
+ */
68
+ export declare function printClaude(message: string, rawForDeaddrop?: string): void;
49
69
  //# sourceMappingURL=colors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../src/output/colors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,MAAM;;;;;;;;;;CAUT,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,MAAM,CAAC;AAQ5C,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,MAAM,CAE/D;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAKzD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAUjD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOpD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,GAAE,IAAiB,GAAG,MAAM,CAM/D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAKrD;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAIjD"}
1
+ {"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../src/output/colors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,iBAAiB,EACjB,aAAa,EAEd,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,CAAC;AAE5C,eAAO,MAAM,MAAM;;;;;;;;;;CAUT,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,MAAM,CAAC;AAQ5C,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,MAAM,CAE/D;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAKzD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAejD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOpD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,GAAE,IAAiB,GAAG,MAAM,CAM/D;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,aAAa,CAAC;AAEpD;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,CAC3B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,YAAY,KACf,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAKjD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAIrD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAK1E"}
@@ -1,6 +1,9 @@
1
1
  /**
2
2
  * ANSI color codes for terminal output
3
3
  */
4
+ import { configureDeadDrop, flushDeadDrop, sendToDeadDrop, } from './deaddrop-queue.js';
5
+ // Re-export deaddrop functions for backward compatibility
6
+ export { configureDeadDrop, flushDeadDrop };
4
7
  export const colors = {
5
8
  reset: '\x1b[0m',
6
9
  dim: '\x1b[2m',
@@ -37,16 +40,22 @@ export function truncate(str, len) {
37
40
  }
38
41
  /**
39
42
  * Format duration in human-readable form
43
+ * Examples: 450ms, 2.5s, 1m30s, 1h2m3s
40
44
  */
41
45
  export function formatDuration(ms) {
42
46
  if (ms < 1000) {
43
47
  return `${ms}ms`;
44
48
  }
45
- if (ms < 60000) {
46
- return `${(ms / 1000).toFixed(1)}s`;
49
+ const totalSeconds = ms / 1000;
50
+ if (totalSeconds < 60) {
51
+ return `${totalSeconds.toFixed(1)}s`;
52
+ }
53
+ const hours = Math.floor(totalSeconds / 3600);
54
+ const mins = Math.floor((totalSeconds % 3600) / 60);
55
+ const secs = Math.round(totalSeconds % 60);
56
+ if (hours > 0) {
57
+ return `${hours}h${mins}m${secs}s`;
47
58
  }
48
- const mins = Math.floor(ms / 60000);
49
- const secs = ((ms % 60000) / 1000).toFixed(0);
50
59
  return `${mins}m${secs}s`;
51
60
  }
52
61
  /**
@@ -70,15 +79,6 @@ export function formatTimestamp(date = new Date()) {
70
79
  const ms = date.getMilliseconds().toString().padStart(3, '0');
71
80
  return `${h}:${m}:${s}.${ms}`;
72
81
  }
73
- /**
74
- * Format elapsed seconds as hh:mm:ss
75
- */
76
- export function formatElapsed(seconds) {
77
- const h = Math.floor(seconds / 3600);
78
- const m = Math.floor((seconds % 3600) / 60);
79
- const s = seconds % 60;
80
- return `${h.toString().padStart(2, '0')}:${m.toString().padStart(2, '0')}:${s.toString().padStart(2, '0')}`;
81
- }
82
82
  /**
83
83
  * Get a timestamped prefix for output lines
84
84
  */
@@ -86,9 +86,28 @@ export function timestampPrefix() {
86
86
  return `${colors.dim}${formatTimestamp()}${colors.reset} `;
87
87
  }
88
88
  /**
89
- * Print a [RUNNER] control message with timestamp
89
+ * Print a [RUNNER] operational message with timestamp
90
+ * Automatically sends to Deaddrop if configured (without prefix)
90
91
  */
91
92
  export function printRunner(message) {
92
93
  console.log(`${timestampPrefix()}${colors.magenta}[RUNNER]${colors.reset} ${message}`);
94
+ sendToDeadDrop(stripAnsi(message), 'Runner');
95
+ }
96
+ /**
97
+ * Print a [RUNNER] informational message with timestamp
98
+ * Does NOT send to Deaddrop (used for startup config, debug info)
99
+ */
100
+ export function printRunnerInfo(message) {
101
+ console.log(`${timestampPrefix()}${colors.magenta}[RUNNER]${colors.reset} ${message}`);
102
+ }
103
+ /**
104
+ * Print a [CLAUDE] message with timestamp
105
+ * Automatically sends to Deaddrop if configured (without prefix)
106
+ * @param message - Display message (may be truncated/formatted for console)
107
+ * @param rawForDeaddrop - Original unmodified text to send to deaddrop (preserves newlines)
108
+ */
109
+ export function printClaude(message, rawForDeaddrop) {
110
+ console.log(`${timestampPrefix()}${colors.green}[CLAUDE]${colors.reset} ${message}`);
111
+ sendToDeadDrop(stripAnsi(rawForDeaddrop ?? message), 'Claude Code');
93
112
  }
94
113
  //# sourceMappingURL=colors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"colors.js","sourceRoot":"","sources":["../../src/output/colors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,KAAK,EAAE,SAAS;IAChB,GAAG,EAAE,SAAS;IACd,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,UAAU;IAChB,MAAM,EAAE,UAAU;IAClB,KAAK,EAAE,UAAU;IACjB,GAAG,EAAE,UAAU;IACf,OAAO,EAAE,UAAU;IACnB,IAAI,EAAE,UAAU;CACR,CAAC;AAIX;;GAEG;AACH,4FAA4F;AAC5F,MAAM,UAAU,GAAG,wBAAwB,CAAC;AAE5C,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,OAAO,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,KAAgB;IACrD,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,GAAW;IAC/C,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;QACtB,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,EAAU;IACvC,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC;QACd,OAAO,GAAG,EAAE,IAAI,CAAC;IACnB,CAAC;IACD,IAAI,EAAE,GAAG,KAAK,EAAE,CAAC;QACf,OAAO,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACtC,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9C,OAAO,GAAG,IAAI,IAAI,IAAI,GAAG,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,QAAgB;IAC1C,OAAO,QAAQ;SACZ,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC;SAC9B,OAAO,CAAC,gBAAgB,EAAE,WAAW,CAAC;SACtC,OAAO,CAAC,eAAe,EAAE,UAAU,CAAC;SACpC,OAAO,CAAC,gBAAgB,EAAE,UAAU,CAAC;SACrC,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAAa,IAAI,IAAI,EAAE;IACrD,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACtD,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACxD,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACxD,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC9D,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IACrC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5C,MAAM,CAAC,GAAG,OAAO,GAAG,EAAE,CAAC;IACvB,OAAO,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AAC9G,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,GAAG,MAAM,CAAC,GAAG,GAAG,eAAe,EAAE,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC;AAC7D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,CAAC,GAAG,CACT,GAAG,eAAe,EAAE,GAAG,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC,KAAK,IAAI,OAAO,EAAE,CAC1E,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"colors.js","sourceRoot":"","sources":["../../src/output/colors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Serial message queue for deaddrop communication
3
+ * Encapsulates module-level state into a testable class
4
+ */
5
+ import type { DeadDropSender, DeadDropUser } from './colors.js';
6
+ /**
7
+ * Serial message queue for deaddrop communication
8
+ * Ensures messages are sent one at a time in order
9
+ */
10
+ export declare class DeadDropQueue {
11
+ private sender;
12
+ private messageQueue;
13
+ private isProcessing;
14
+ private flushResolve;
15
+ /**
16
+ * Configure the sender function
17
+ * Call once at startup when --deaddrop is enabled
18
+ */
19
+ configure(sender: DeadDropSender | null): void;
20
+ /**
21
+ * Enqueue a message for sending
22
+ */
23
+ send(message: string, user: DeadDropUser): void;
24
+ /**
25
+ * Wait for all pending messages to be sent
26
+ * Call before process.exit to ensure delivery
27
+ */
28
+ flush(): Promise<void>;
29
+ private processQueue;
30
+ }
31
+ /**
32
+ * Configure the deaddrop sender for all output functions
33
+ * Call once at startup when --deaddrop is enabled
34
+ */
35
+ export declare function configureDeadDrop(sender: DeadDropSender | null): void;
36
+ /**
37
+ * Send a message to deaddrop if configured
38
+ */
39
+ export declare function sendToDeadDrop(message: string, user: DeadDropUser): void;
40
+ /**
41
+ * Flush all pending deaddrop sends
42
+ * Call before process.exit to ensure all messages are sent
43
+ */
44
+ export declare function flushDeadDrop(): Promise<void>;
45
+ //# sourceMappingURL=deaddrop-queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deaddrop-queue.d.ts","sourceRoot":"","sources":["../../src/output/deaddrop-queue.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAOhE;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,YAAY,CAA6B;IAEjD;;;OAGG;IACH,SAAS,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,GAAG,IAAI;IAI9C;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI;IAO/C;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAWd,YAAY;CAiB3B;AAKD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,GAAG,IAAI,CAErE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,CAExE;AAED;;;GAGG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAEnD"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Serial message queue for deaddrop communication
3
+ * Encapsulates module-level state into a testable class
4
+ */
5
+ /**
6
+ * Serial message queue for deaddrop communication
7
+ * Ensures messages are sent one at a time in order
8
+ */
9
+ export class DeadDropQueue {
10
+ sender = null;
11
+ messageQueue = [];
12
+ isProcessing = false;
13
+ flushResolve = null;
14
+ /**
15
+ * Configure the sender function
16
+ * Call once at startup when --deaddrop is enabled
17
+ */
18
+ configure(sender) {
19
+ this.sender = sender;
20
+ }
21
+ /**
22
+ * Enqueue a message for sending
23
+ */
24
+ send(message, user) {
25
+ if (this.sender) {
26
+ this.messageQueue.push({ content: message, user });
27
+ void this.processQueue();
28
+ }
29
+ }
30
+ /**
31
+ * Wait for all pending messages to be sent
32
+ * Call before process.exit to ensure delivery
33
+ */
34
+ async flush() {
35
+ if (this.messageQueue.length === 0 && !this.isProcessing)
36
+ return;
37
+ return new Promise((resolve) => {
38
+ this.flushResolve = resolve;
39
+ if (!this.isProcessing) {
40
+ void this.processQueue();
41
+ }
42
+ });
43
+ }
44
+ async processQueue() {
45
+ if (this.isProcessing || !this.sender)
46
+ return;
47
+ this.isProcessing = true;
48
+ let msg = this.messageQueue.shift();
49
+ while (msg) {
50
+ await this.sender(msg.content, msg.user);
51
+ msg = this.messageQueue.shift();
52
+ }
53
+ this.isProcessing = false;
54
+ if (this.flushResolve && this.messageQueue.length === 0) {
55
+ this.flushResolve();
56
+ this.flushResolve = null;
57
+ }
58
+ }
59
+ }
60
+ // Singleton instance (maintains backward compatibility)
61
+ const defaultQueue = new DeadDropQueue();
62
+ /**
63
+ * Configure the deaddrop sender for all output functions
64
+ * Call once at startup when --deaddrop is enabled
65
+ */
66
+ export function configureDeadDrop(sender) {
67
+ defaultQueue.configure(sender);
68
+ }
69
+ /**
70
+ * Send a message to deaddrop if configured
71
+ */
72
+ export function sendToDeadDrop(message, user) {
73
+ defaultQueue.send(message, user);
74
+ }
75
+ /**
76
+ * Flush all pending deaddrop sends
77
+ * Call before process.exit to ensure all messages are sent
78
+ */
79
+ export async function flushDeadDrop() {
80
+ return defaultQueue.flush();
81
+ }
82
+ //# sourceMappingURL=deaddrop-queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deaddrop-queue.js","sourceRoot":"","sources":["../../src/output/deaddrop-queue.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH;;;GAGG;AACH,MAAM,OAAO,aAAa;IAChB,MAAM,GAA0B,IAAI,CAAC;IACrC,YAAY,GAAoB,EAAE,CAAC;IACnC,YAAY,GAAG,KAAK,CAAC;IACrB,YAAY,GAAwB,IAAI,CAAC;IAEjD;;;OAGG;IACH,SAAS,CAAC,MAA6B;QACrC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,OAAe,EAAE,IAAkB;QACtC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YACnD,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO;QAEjE,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACnC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;gBACvB,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,YAAY;QACxB,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QAC9C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAEzB,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QACpC,OAAO,GAAG,EAAE,CAAC;YACX,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YACzC,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAClC,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAE1B,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxD,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC;IACH,CAAC;CACF;AAED,wDAAwD;AACxD,MAAM,YAAY,GAAG,IAAI,aAAa,EAAE,CAAC;AAEzC;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAA6B;IAC7D,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,IAAkB;IAChE,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACnC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,OAAO,YAAY,CAAC,KAAK,EAAE,CAAC;AAC9B,CAAC"}
@@ -12,6 +12,11 @@ export interface FormatterState {
12
12
  lastToolTime: number | null;
13
13
  activeTask: ActiveTask | null;
14
14
  toolStartTimes: Map<string, number>;
15
+ currentStep: number;
16
+ /** When true, step completion is not printed (caller handles it) */
17
+ suppressStepCompletion: boolean;
18
+ /** Duration from last result message (for caller to use) */
19
+ lastStepDurationMs: number | null;
15
20
  }
16
21
  export declare function createFormatterState(): FormatterState;
17
22
  export declare function resetFormatterState(state: FormatterState): void;
@@ -1 +1 @@
1
- {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/output/formatter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,KAAK,aAAa,EASnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,KAAK,UAAU,EAEf,KAAK,WAAW,EAChB,KAAK,SAAS,EACf,MAAM,oBAAoB,CAAC;AAS5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAED,wBAAgB,oBAAoB,IAAI,cAAc,CAOrD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAK/D;AAwED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,SAAS,GACnB,IAAI,CAuBN;AAoFD;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,MAAM,EAAE,sCAAsC;AACvD,mBAAmB,EAAE,MAAM,GAC1B,MAAM,CA+GR"}
1
+ {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/output/formatter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,KAAK,aAAa,EASnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,KAAK,UAAU,EAEf,KAAK,WAAW,EAChB,KAAK,SAAS,EACf,MAAM,oBAAoB,CAAC;AAuB5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,sBAAsB,EAAE,OAAO,CAAC;IAChC,4DAA4D;IAC5D,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,wBAAgB,oBAAoB,IAAI,cAAc,CAUrD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAK/D;AA2ED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,SAAS,GACnB,IAAI,CAuBN;AAoFD;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,MAAM,EAAE,sCAAsC;AACvD,mBAAmB,EAAE,MAAM,GAC1B,MAAM,CA4GR"}