@sylix/coworker 1.3.0 → 1.3.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 (64) hide show
  1. package/dist/cli/index.d.ts.map +1 -1
  2. package/dist/cli/index.js +145 -292
  3. package/dist/cli/index.js.map +1 -1
  4. package/dist/commands/slash/advanced.d.ts +3 -0
  5. package/dist/commands/slash/advanced.d.ts.map +1 -0
  6. package/dist/commands/slash/advanced.js +225 -0
  7. package/dist/commands/slash/advanced.js.map +1 -0
  8. package/dist/commands/slash/config.d.ts +3 -0
  9. package/dist/commands/slash/config.d.ts.map +1 -0
  10. package/dist/commands/slash/config.js +161 -0
  11. package/dist/commands/slash/config.js.map +1 -0
  12. package/dist/commands/slash/context.d.ts +3 -0
  13. package/dist/commands/slash/context.d.ts.map +1 -0
  14. package/dist/commands/slash/context.js +127 -0
  15. package/dist/commands/slash/context.js.map +1 -0
  16. package/dist/commands/slash/core.d.ts +3 -0
  17. package/dist/commands/slash/core.d.ts.map +1 -0
  18. package/dist/commands/slash/core.js +112 -0
  19. package/dist/commands/slash/core.js.map +1 -0
  20. package/dist/commands/slash/developer.d.ts +3 -0
  21. package/dist/commands/slash/developer.d.ts.map +1 -0
  22. package/dist/commands/slash/developer.js +174 -0
  23. package/dist/commands/slash/developer.js.map +1 -0
  24. package/dist/commands/slash/files.d.ts +3 -0
  25. package/dist/commands/slash/files.d.ts.map +1 -0
  26. package/dist/commands/slash/files.js +216 -0
  27. package/dist/commands/slash/files.js.map +1 -0
  28. package/dist/commands/slash/registry.d.ts +36 -0
  29. package/dist/commands/slash/registry.d.ts.map +1 -0
  30. package/dist/commands/slash/registry.js +69 -0
  31. package/dist/commands/slash/registry.js.map +1 -0
  32. package/dist/commands/slash/session.d.ts +3 -0
  33. package/dist/commands/slash/session.d.ts.map +1 -0
  34. package/dist/commands/slash/session.js +144 -0
  35. package/dist/commands/slash/session.js.map +1 -0
  36. package/dist/core/CoWorkerAgent.d.ts +8 -3
  37. package/dist/core/CoWorkerAgent.d.ts.map +1 -1
  38. package/dist/core/CoWorkerAgent.js +99 -32
  39. package/dist/core/CoWorkerAgent.js.map +1 -1
  40. package/dist/session/SessionManager.js +10 -5
  41. package/dist/session/SessionManager.js.map +1 -1
  42. package/dist/skills/HookAndSkillManager.js +2 -1
  43. package/dist/skills/HookAndSkillManager.js.map +1 -1
  44. package/dist/utils/conversations.d.ts +14 -0
  45. package/dist/utils/conversations.d.ts.map +1 -0
  46. package/dist/utils/conversations.js +100 -0
  47. package/dist/utils/conversations.js.map +1 -0
  48. package/dist/utils/inputbar.d.ts +87 -0
  49. package/dist/utils/inputbar.d.ts.map +1 -0
  50. package/dist/utils/inputbar.js +263 -0
  51. package/dist/utils/inputbar.js.map +1 -0
  52. package/dist/utils/output.d.ts +48 -42
  53. package/dist/utils/output.d.ts.map +1 -1
  54. package/dist/utils/output.js +233 -186
  55. package/dist/utils/output.js.map +1 -1
  56. package/dist/utils/palette.d.ts +25 -0
  57. package/dist/utils/palette.d.ts.map +1 -0
  58. package/dist/utils/palette.js +92 -0
  59. package/dist/utils/palette.js.map +1 -0
  60. package/dist/utils/welcome.d.ts +2 -0
  61. package/dist/utils/welcome.d.ts.map +1 -0
  62. package/dist/utils/welcome.js +130 -0
  63. package/dist/utils/welcome.js.map +1 -0
  64. package/package.json +1 -1
@@ -0,0 +1,263 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.InputBarManager = void 0;
37
+ exports.drawTopBorder = drawTopBorder;
38
+ exports.drawBottomBorder = drawBottomBorder;
39
+ exports.drawStatusLine = drawStatusLine;
40
+ exports.getPromptString = getPromptString;
41
+ exports.drawInputFrame = drawInputFrame;
42
+ exports.clearInputFrame = clearInputFrame;
43
+ exports.lockInputBar = lockInputBar;
44
+ exports.flashSuccess = flashSuccess;
45
+ const readline = __importStar(require("readline"));
46
+ const output_1 = require("./output");
47
+ /**
48
+ * ═══════════════════════════════════════════════════════════════════
49
+ * Premium Input Bar — Fixed-bottom framed input zone
50
+ * ═══════════════════════════════════════════════════════════════════
51
+ *
52
+ * Design:
53
+ * ────────────────────────────────────────────────────────────────
54
+ * ◆ [user input text here]█
55
+ * ────────────────────────────────────────────────────────────────
56
+ * ? /help for commands · Ctrl+C to exit
57
+ *
58
+ * States: ready, typing, slash, sending, receiving, success
59
+ */
60
+ // Colors
61
+ const borderColor = (s) => output_1.theme.dim(s);
62
+ const prefixReady = () => output_1.theme.brand(' ◆ ');
63
+ const prefixLocked = () => output_1.theme.dim(' ◆ ');
64
+ const prefixSuccess = () => output_1.theme.success(' ✓ ');
65
+ const inputColor = (s) => output_1.theme.white(s);
66
+ const STATUS_MESSAGES = {
67
+ ready: ' ? /help for commands · Ctrl+C to exit',
68
+ typing: ' ? /help for commands · Ctrl+C to exit',
69
+ slash: ' ↑↓ navigate · Enter select · Esc dismiss',
70
+ sending: ' ◆ thinking...',
71
+ receiving: ' ◆ CoWorker is responding...',
72
+ success: ' ✓ done',
73
+ };
74
+ /**
75
+ * Draws the framed input bar. This is called:
76
+ * - Before readline prompt (draws the frame)
77
+ * - On state changes (thinking, receiving, etc.)
78
+ *
79
+ * The input bar uses a simple approach:
80
+ * readline handles the actual input on a bordered line.
81
+ * We print borders and status around it.
82
+ */
83
+ function drawTopBorder() {
84
+ const cols = (0, output_1.getTermWidth)();
85
+ console.log(borderColor('─'.repeat(cols)));
86
+ }
87
+ function drawBottomBorder() {
88
+ const cols = (0, output_1.getTermWidth)();
89
+ console.log(borderColor('─'.repeat(cols)));
90
+ }
91
+ function drawStatusLine(state) {
92
+ const msg = STATUS_MESSAGES[state] || STATUS_MESSAGES.ready;
93
+ console.log(output_1.theme.dim(msg));
94
+ }
95
+ /**
96
+ * Get the readline prompt string (the ◆ prefix).
97
+ */
98
+ function getPromptString(state = 'ready') {
99
+ switch (state) {
100
+ case 'success': return prefixSuccess();
101
+ case 'sending':
102
+ case 'receiving': return prefixLocked();
103
+ default: return prefixReady();
104
+ }
105
+ }
106
+ /**
107
+ * Draw the full input frame (top border, prompt placeholder, bottom border, status).
108
+ * Used when transitioning states.
109
+ */
110
+ function drawInputFrame(state, inputText = '') {
111
+ drawTopBorder();
112
+ const prefix = getPromptString(state);
113
+ console.log(prefix + inputColor(inputText));
114
+ drawBottomBorder();
115
+ drawStatusLine(state);
116
+ }
117
+ /**
118
+ * Clear the input frame (4 lines: top border, input, bottom border, status).
119
+ * Move cursor up and clear each line.
120
+ */
121
+ function clearInputFrame(lines = 4) {
122
+ for (let i = 0; i < lines; i++) {
123
+ process.stdout.write('\x1b[1A\x1b[2K'); // move up, clear line
124
+ }
125
+ }
126
+ /**
127
+ * Show the locked state while AI is working.
128
+ * Replaces the input frame with a locked version.
129
+ */
130
+ function lockInputBar(state, inputText) {
131
+ drawTopBorder();
132
+ console.log(getPromptString(state) + (inputText ? output_1.theme.dim(inputText) : ''));
133
+ drawBottomBorder();
134
+ drawStatusLine(state);
135
+ }
136
+ /**
137
+ * Show a brief success flash then return to ready.
138
+ */
139
+ function flashSuccess() {
140
+ drawTopBorder();
141
+ console.log(prefixSuccess());
142
+ drawBottomBorder();
143
+ drawStatusLine('success');
144
+ }
145
+ /**
146
+ * Manages the complete input bar lifecycle during the REPL.
147
+ *
148
+ * Usage in REPL:
149
+ * const bar = new InputBarManager();
150
+ * bar.drawReady(); // show empty input bar
151
+ * const input = await bar.ask() // get user input (readline inside frame)
152
+ * bar.showSending(input); // lock bar while thinking
153
+ * // ... AI response renders above ...
154
+ * bar.showReceiving(); // update status while streaming
155
+ * // ... response done ...
156
+ * bar.drawReady(); // unlock for next input
157
+ */
158
+ class InputBarManager {
159
+ constructor() {
160
+ this.rl = null;
161
+ this.state = 'ready';
162
+ this.resizeHandler = null;
163
+ // Handle terminal resize
164
+ this.resizeHandler = () => {
165
+ // On resize, we don't need to redraw mid-input since readline handles it
166
+ };
167
+ process.stdout.on('resize', this.resizeHandler);
168
+ }
169
+ /**
170
+ * Draw the ready input frame (borders + status).
171
+ * Does NOT start readline — that's done in ask().
172
+ */
173
+ drawReady() {
174
+ this.state = 'ready';
175
+ drawTopBorder();
176
+ // The readline prompt will fill this line
177
+ }
178
+ /**
179
+ * Ask for user input inside the framed bar.
180
+ * Returns the trimmed input string.
181
+ */
182
+ ask(history = []) {
183
+ return new Promise((resolve) => {
184
+ this.rl = readline.createInterface({
185
+ input: process.stdin,
186
+ output: process.stdout,
187
+ terminal: true,
188
+ history: history,
189
+ historySize: 100,
190
+ });
191
+ const prompt = getPromptString('ready');
192
+ this.rl.question(prompt, (answer) => {
193
+ const trimmed = answer.trim();
194
+ // After user hits Enter, draw bottom border and status
195
+ drawBottomBorder();
196
+ // Determine which status to show based on input
197
+ if (trimmed.startsWith('/')) {
198
+ drawStatusLine('ready');
199
+ }
200
+ else if (trimmed) {
201
+ drawStatusLine('sending');
202
+ }
203
+ else {
204
+ drawStatusLine('ready');
205
+ }
206
+ this.rl?.close();
207
+ this.rl = null;
208
+ resolve(trimmed);
209
+ });
210
+ });
211
+ }
212
+ /**
213
+ * Lock the bar in "sending" state (user just hit Enter).
214
+ */
215
+ showSending(inputText) {
216
+ this.state = 'sending';
217
+ // Clear the bottom border + status that ask() drew
218
+ process.stdout.write('\x1b[1A\x1b[2K'); // clear status
219
+ process.stdout.write('\x1b[1A\x1b[2K'); // clear bottom border
220
+ drawBottomBorder();
221
+ drawStatusLine('sending');
222
+ }
223
+ /**
224
+ * Update to "receiving" state while AI streams response.
225
+ */
226
+ showReceiving() {
227
+ this.state = 'receiving';
228
+ // Overwrite the status line
229
+ process.stdout.write('\x1b[1A\x1b[2K'); // clear current status
230
+ drawStatusLine('receiving');
231
+ }
232
+ /**
233
+ * Show success flash briefly.
234
+ */
235
+ showSuccess() {
236
+ this.state = 'success';
237
+ process.stdout.write('\x1b[1A\x1b[2K');
238
+ drawStatusLine('success');
239
+ }
240
+ /**
241
+ * Reset to ready state for next input.
242
+ * Clears old status and draws fresh frame.
243
+ */
244
+ reset() {
245
+ this.state = 'ready';
246
+ console.log(''); // blank line after response
247
+ }
248
+ /**
249
+ * Clean up on exit.
250
+ */
251
+ destroy() {
252
+ if (this.rl) {
253
+ this.rl.close();
254
+ this.rl = null;
255
+ }
256
+ if (this.resizeHandler) {
257
+ process.stdout.removeListener('resize', this.resizeHandler);
258
+ this.resizeHandler = null;
259
+ }
260
+ }
261
+ }
262
+ exports.InputBarManager = InputBarManager;
263
+ //# sourceMappingURL=inputbar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inputbar.js","sourceRoot":"","sources":["../../src/utils/inputbar.ts"],"names":[],"mappings":"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"}
@@ -3,13 +3,10 @@
3
3
  * CoWorker v1.3.0 by Sylix — Premium Output System
4
4
  * ═══════════════════════════════════════════════════════════════════
5
5
  *
6
- * Full Claude Code-level terminal rendering:
7
- * - Animated line-by-line banner with word-by-word tagline
8
- * - Thinking animation with rotating messages
9
- * - Markdown-aware response rendering (code blocks, bold, inline code)
10
- * - Score cards, commit boxes, diff previews
6
+ * Premium terminal rendering with true streaming support.
7
+ * All response text renders inside ╷│╵ borders as it arrives.
11
8
  */
12
- export declare const CW_VERSION = "1.3.0";
9
+ export declare const CW_VERSION = "1.3.1";
13
10
  export declare const theme: {
14
11
  brand: (s: string) => string;
15
12
  accent: (s: string) => string;
@@ -18,29 +15,14 @@ export declare const theme: {
18
15
  warning: (s: string) => string;
19
16
  ai: (s: string) => string;
20
17
  dim: (s: string) => string;
18
+ border: (s: string) => string;
21
19
  white: (s: string) => string;
22
20
  code: (s: string) => string;
23
21
  purple: (s: string) => string;
24
22
  };
25
23
  export declare function getTermWidth(): number;
26
- /**
27
- * Full animated startup banner for CoWorker v1.3.0.
28
- *
29
- * 1. Logo slides in line-by-line (60ms between lines)
30
- * 2. Tagline fades in word-by-word with semantic coloring
31
- * 3. Divider draws left-to-right (3ms/char)
32
- * 4. Info line fades in
33
- * 5. Session info appears with 50ms delay between lines
34
- * Total: under 1.5 seconds
35
- */
36
24
  export declare function showBanner(version: string, userEmail?: string, model?: string): Promise<void>;
37
- /**
38
- * Static banner for non-TTY / piped / quick modes.
39
- */
40
25
  export declare function showStaticBanner(version: string): void;
41
- /**
42
- * Session info lines — appear with delay between each.
43
- */
44
26
  export declare function showSessionInfo(cwd: string, sessionId: string): Promise<void>;
45
27
  export declare class ThinkingAnimation {
46
28
  private interval;
@@ -51,17 +33,46 @@ export declare class ThinkingAnimation {
51
33
  stop(): void;
52
34
  }
53
35
  /**
54
- * Renders a block of AI response text with markdown awareness.
55
- * Handles: code blocks, **bold**, `inline code`, ## headers, - lists
36
+ * Manages the response box state during streaming.
37
+ *
38
+ * Correct output:
39
+ * ╷
40
+ * │ Hi! I'm CoWorker, your AI coding assistant.
41
+ * │
42
+ * │ I can help you with:
43
+ * │ · Writing and debugging code
44
+ * │
45
+ * ╵ ✦ 1.2s · 34 tokens
46
+ *
47
+ * Rules:
48
+ * - ALL text inside ╷│╵ border
49
+ * - Border chars (╷ │ ╵) in dim gray #4B5563
50
+ * - Response text in purple #A78BFA
51
+ * - Code blocks switch to yellow #FCD34D
52
+ * - On every \n → print "\n │ "
56
53
  */
57
- export declare function renderMarkdown(text: string): string;
54
+ export declare class StreamRenderer {
55
+ private started;
56
+ private inCodeBlock;
57
+ private startTime;
58
+ private charCount;
59
+ constructor();
60
+ /**
61
+ * Call this for EACH chunk as it arrives from the SSE stream.
62
+ * Renders immediately — no buffering.
63
+ */
64
+ write(chunk: string): void;
65
+ /**
66
+ * Close the response box and print footer.
67
+ */
68
+ finish(): void;
69
+ /** Returns the estimated token count. */
70
+ getTokenEstimate(): number;
71
+ /** Returns elapsed ms. */
72
+ getElapsed(): number;
73
+ }
58
74
  export declare function printResponseHeader(): void;
59
- export declare function printResponseLine(text: string): void;
60
75
  export declare function printResponseFooter(elapsed: number, tokenEstimate?: number): void;
61
- /**
62
- * Streams AI response text into the response box with markdown rendering.
63
- * Call printResponseHeader() first, then stream chunks, then printResponseFooter().
64
- */
65
76
  export declare function streamResponseChunk(chunk: string): void;
66
77
  export declare function printUserPrompt(input: string): void;
67
78
  export declare function printError(title: string, details?: string, hint?: string): void;
@@ -81,20 +92,14 @@ export declare function printDiff(fileName: string, changes: Array<{
81
92
  type: 'add' | 'remove' | 'context';
82
93
  line: string;
83
94
  }>): void;
84
- export declare function printHelp(): void;
85
- export declare function printCompact(msgCount: number, tokenEst: number, sessionId: string): void;
86
- export interface SlashCommand {
87
- name: string;
88
- desc: string;
89
- }
90
95
  /**
91
- * Returns matching slash commands for a partial input.
96
+ * Shows the CoWorker branded workspace trust prompt.
97
+ * Returns true if user trusts, false if they want to exit.
98
+ * Skips silently if the directory is already trusted.
92
99
  */
93
- export declare function getSlashCompletions(partial: string): SlashCommand[];
94
- /**
95
- * Renders the slash completion menu below the input.
96
- */
97
- export declare function renderSlashMenu(matches: SlashCommand[]): string;
100
+ export declare function checkWorkspaceTrust(cwd: string): Promise<boolean>;
101
+ export declare function printHelp(): void;
102
+ export declare function printCompact(msgCount: number, tokenEst: number, sessionId: string): void;
98
103
  export declare function printBox(label: string, lines: string[]): void;
99
104
  export declare class Timer {
100
105
  private start;
@@ -102,4 +107,5 @@ export declare class Timer {
102
107
  elapsed(): number;
103
108
  formatted(): string;
104
109
  }
110
+ export declare function renderMarkdown(text: string): string;
105
111
  //# sourceMappingURL=output.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AAEH,eAAO,MAAM,UAAU,UAAU,CAAC;AAkBlC,eAAO,MAAM,KAAK;eATe,MAAM,KAAK,MAAM;gBAAjB,MAAM,KAAK,MAAM;iBAAjB,MAAM,KAAK,MAAM;eAAjB,MAAM,KAAK,MAAM;iBAAjB,MAAM,KAAK,MAAM;YAAjB,MAAM,KAAK,MAAM;aAAjB,MAAM,KAAK,MAAM;eAAjB,MAAM,KAAK,MAAM;cAAjB,MAAM,KAAK,MAAM;gBAAjB,MAAM,KAAK,MAAM;CAoBjD,CAAC;AAMF,wBAAgB,YAAY,IAAI,MAAM,CAErC;AA+BD;;;;;;;;;GASG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,EAClB,KAAK,GAAE,MAAoB,GAC1B,OAAO,CAAC,IAAI,CAAC,CA+Df;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAMtD;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAmBf;AAgBD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAA+C;IAC/D,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,OAAO,CAAS;gBAEZ,aAAa,CAAC,EAAE,MAAM;IAIlC,KAAK,IAAI,IAAI;IAeb,IAAI,IAAI,IAAI;CASb;AAMD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA6DnD;AAeD,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAiBpD;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAIjF;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAUvD;AAMD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEnD;AAMD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAgB/E;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElD;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElD;AAMD,wBAAgB,SAAS,IAAI,IAAI,CAKhC;AAMD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAErD;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAGrE;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAEpE;AAMD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,IAAI,CAoBpH;AAMD,wBAAgB,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAoB1D;AAMD,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,IAAI,CAoBtH;AAMD,wBAAgB,SAAS,IAAI,IAAI,CAWhC;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAcxF;AAMD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAYD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE,CAGnE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,CAS/D;AAMD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAU7D;AAMD,qBAAa,KAAK;IAChB,OAAO,CAAC,KAAK,CAAS;;IAItB,OAAO,IAAI,MAAM;IAGjB,SAAS,IAAI,MAAM;CAIpB"}
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"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"}