jazz-ai 0.2.2 → 0.4.3

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 (151) hide show
  1. package/README.md +8 -6
  2. package/dist/cli/commands/chat-agent.d.ts +3 -1
  3. package/dist/cli/commands/chat-agent.d.ts.map +1 -1
  4. package/dist/cli/commands/chat-agent.js +180 -102
  5. package/dist/cli/commands/chat-agent.js.map +1 -1
  6. package/dist/cli/commands/edit-agent.d.ts +2 -2
  7. package/dist/cli/commands/edit-agent.d.ts.map +1 -1
  8. package/dist/cli/commands/edit-agent.js +20 -10
  9. package/dist/cli/commands/edit-agent.js.map +1 -1
  10. package/dist/cli/commands/task-agent.d.ts +1 -1
  11. package/dist/cli/commands/task-agent.d.ts.map +1 -1
  12. package/dist/cli/commands/task-agent.js +6 -6
  13. package/dist/cli/commands/task-agent.js.map +1 -1
  14. package/dist/constants/agent.d.ts +2 -0
  15. package/dist/constants/agent.d.ts.map +1 -0
  16. package/dist/constants/agent.js +5 -0
  17. package/dist/constants/agent.js.map +1 -0
  18. package/dist/core/agent/agent-prompt.d.ts +0 -1
  19. package/dist/core/agent/agent-prompt.d.ts.map +1 -1
  20. package/dist/core/agent/agent-prompt.js +7 -15
  21. package/dist/core/agent/agent-prompt.js.map +1 -1
  22. package/dist/core/agent/agent-runner.d.ts +15 -0
  23. package/dist/core/agent/agent-runner.d.ts.map +1 -1
  24. package/dist/core/agent/agent-runner.js +570 -270
  25. package/dist/core/agent/agent-runner.js.map +1 -1
  26. package/dist/core/agent/agent-service.d.ts +20 -5
  27. package/dist/core/agent/agent-service.d.ts.map +1 -1
  28. package/dist/core/agent/agent-service.js +54 -6
  29. package/dist/core/agent/agent-service.js.map +1 -1
  30. package/dist/core/agent/gmail-agent.js +7 -7
  31. package/dist/core/agent/gmail-agent.js.map +1 -1
  32. package/dist/core/agent/prompts/coder/v1.d.ts +2 -0
  33. package/dist/core/agent/prompts/coder/v1.d.ts.map +1 -0
  34. package/dist/core/agent/prompts/coder/v1.js +370 -0
  35. package/dist/core/agent/prompts/coder/v1.js.map +1 -0
  36. package/dist/core/agent/prompts/default/v2.d.ts +1 -1
  37. package/dist/core/agent/prompts/default/v2.d.ts.map +1 -1
  38. package/dist/core/agent/prompts/default/v2.js +1 -2
  39. package/dist/core/agent/prompts/default/v2.js.map +1 -1
  40. package/dist/core/agent/prompts/gmail/v1.d.ts +1 -1
  41. package/dist/core/agent/prompts/gmail/v1.d.ts.map +1 -1
  42. package/dist/core/agent/prompts/gmail/v1.js +5 -5
  43. package/dist/core/agent/prompts/gmail/v2.d.ts +1 -1
  44. package/dist/core/agent/prompts/gmail/v2.d.ts.map +1 -1
  45. package/dist/core/agent/prompts/gmail/v2.js +7 -7
  46. package/dist/core/agent/tools/base-tool.d.ts +3 -4
  47. package/dist/core/agent/tools/base-tool.d.ts.map +1 -1
  48. package/dist/core/agent/tools/base-tool.js +11 -51
  49. package/dist/core/agent/tools/base-tool.js.map +1 -1
  50. package/dist/core/agent/tools/context-utils.d.ts +6 -0
  51. package/dist/core/agent/tools/context-utils.d.ts.map +1 -0
  52. package/dist/core/agent/tools/context-utils.js +9 -0
  53. package/dist/core/agent/tools/context-utils.js.map +1 -0
  54. package/dist/core/agent/tools/env-utils.d.ts +7 -0
  55. package/dist/core/agent/tools/env-utils.d.ts.map +1 -0
  56. package/dist/core/agent/tools/env-utils.js +39 -0
  57. package/dist/core/agent/tools/env-utils.js.map +1 -0
  58. package/dist/core/agent/tools/fs-tools.d.ts.map +1 -1
  59. package/dist/core/agent/tools/fs-tools.js +48 -53
  60. package/dist/core/agent/tools/fs-tools.js.map +1 -1
  61. package/dist/core/agent/tools/git-tools.d.ts +5 -0
  62. package/dist/core/agent/tools/git-tools.d.ts.map +1 -1
  63. package/dist/core/agent/tools/git-tools.js +716 -154
  64. package/dist/core/agent/tools/git-tools.js.map +1 -1
  65. package/dist/core/agent/tools/gmail-tools.js +35 -35
  66. package/dist/core/agent/tools/gmail-tools.js.map +1 -1
  67. package/dist/core/agent/tools/http-tools.js +2 -2
  68. package/dist/core/agent/tools/http-tools.js.map +1 -1
  69. package/dist/core/agent/tools/register-tools.d.ts +18 -1
  70. package/dist/core/agent/tools/register-tools.d.ts.map +1 -1
  71. package/dist/core/agent/tools/register-tools.js +52 -6
  72. package/dist/core/agent/tools/register-tools.js.map +1 -1
  73. package/dist/core/agent/tools/shell-tools.d.ts.map +1 -1
  74. package/dist/core/agent/tools/shell-tools.js +10 -20
  75. package/dist/core/agent/tools/shell-tools.js.map +1 -1
  76. package/dist/core/agent/tools/tool-registry.d.ts +11 -7
  77. package/dist/core/agent/tools/tool-registry.d.ts.map +1 -1
  78. package/dist/core/agent/tools/tool-registry.js +45 -19
  79. package/dist/core/agent/tools/tool-registry.js.map +1 -1
  80. package/dist/core/agent/tools/web-search-tools.js +1 -1
  81. package/dist/core/agent/tools/web-search-tools.js.map +1 -1
  82. package/dist/core/agent/tracking/agent-run-tracker.d.ts +2 -0
  83. package/dist/core/agent/tracking/agent-run-tracker.d.ts.map +1 -1
  84. package/dist/core/agent/tracking/agent-run-tracker.js +40 -2
  85. package/dist/core/agent/tracking/agent-run-tracker.js.map +1 -1
  86. package/dist/core/types/index.d.ts +82 -15
  87. package/dist/core/types/index.d.ts.map +1 -1
  88. package/dist/core/types/index.js.map +1 -1
  89. package/dist/core/utils/markdown-renderer.d.ts +25 -0
  90. package/dist/core/utils/markdown-renderer.d.ts.map +1 -1
  91. package/dist/core/utils/markdown-renderer.js +100 -1
  92. package/dist/core/utils/markdown-renderer.js.map +1 -1
  93. package/dist/core/utils/output-renderer.d.ts +81 -0
  94. package/dist/core/utils/output-renderer.d.ts.map +1 -0
  95. package/dist/core/utils/output-renderer.js +291 -0
  96. package/dist/core/utils/output-renderer.js.map +1 -0
  97. package/dist/core/utils/output-theme.d.ts +64 -0
  98. package/dist/core/utils/output-theme.d.ts.map +1 -0
  99. package/dist/core/utils/output-theme.js +154 -0
  100. package/dist/core/utils/output-theme.js.map +1 -0
  101. package/dist/core/utils/output-writer.d.ts +79 -0
  102. package/dist/core/utils/output-writer.d.ts.map +1 -0
  103. package/dist/core/utils/output-writer.js +133 -0
  104. package/dist/core/utils/output-writer.js.map +1 -0
  105. package/dist/core/utils/runtime-detection.d.ts +28 -0
  106. package/dist/core/utils/runtime-detection.d.ts.map +1 -0
  107. package/dist/core/utils/runtime-detection.js +62 -0
  108. package/dist/core/utils/runtime-detection.js.map +1 -0
  109. package/dist/core/utils/string.d.ts +8 -0
  110. package/dist/core/utils/string.d.ts.map +1 -0
  111. package/dist/core/utils/string.js +19 -0
  112. package/dist/core/utils/string.js.map +1 -0
  113. package/dist/core/utils/thinking-renderer.d.ts +56 -0
  114. package/dist/core/utils/thinking-renderer.d.ts.map +1 -0
  115. package/dist/core/utils/thinking-renderer.js +174 -0
  116. package/dist/core/utils/thinking-renderer.js.map +1 -0
  117. package/dist/core/utils/tool-formatter.d.ts +21 -0
  118. package/dist/core/utils/tool-formatter.d.ts.map +1 -0
  119. package/dist/core/utils/tool-formatter.js +343 -0
  120. package/dist/core/utils/tool-formatter.js.map +1 -0
  121. package/dist/main.js +11 -4
  122. package/dist/main.js.map +1 -1
  123. package/dist/services/config.d.ts.map +1 -1
  124. package/dist/services/config.js +20 -20
  125. package/dist/services/config.js.map +1 -1
  126. package/dist/services/llm/ai-sdk-service.d.ts.map +1 -1
  127. package/dist/services/llm/ai-sdk-service.js +128 -37
  128. package/dist/services/llm/ai-sdk-service.js.map +1 -1
  129. package/dist/services/llm/stream-detector.d.ts +44 -0
  130. package/dist/services/llm/stream-detector.d.ts.map +1 -0
  131. package/dist/services/llm/stream-detector.js +81 -0
  132. package/dist/services/llm/stream-detector.js.map +1 -0
  133. package/dist/services/llm/stream-processor.d.ts +93 -0
  134. package/dist/services/llm/stream-processor.d.ts.map +1 -0
  135. package/dist/services/llm/stream-processor.js +330 -0
  136. package/dist/services/llm/stream-processor.js.map +1 -0
  137. package/dist/services/llm/streaming-types.d.ts +131 -0
  138. package/dist/services/llm/streaming-types.d.ts.map +1 -0
  139. package/dist/services/llm/streaming-types.js +12 -0
  140. package/dist/services/llm/streaming-types.js.map +1 -0
  141. package/dist/services/llm/types.d.ts +8 -0
  142. package/dist/services/llm/types.d.ts.map +1 -1
  143. package/dist/services/llm/types.js.map +1 -1
  144. package/dist/services/logger.d.ts +4 -4
  145. package/dist/services/logger.d.ts.map +1 -1
  146. package/dist/services/logger.js +23 -45
  147. package/dist/services/logger.js.map +1 -1
  148. package/dist/services/shell.d.ts.map +1 -1
  149. package/dist/services/shell.js +52 -18
  150. package/dist/services/shell.js.map +1 -1
  151. package/package.json +1 -1
@@ -0,0 +1,291 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OutputRenderer = void 0;
4
+ const effect_1 = require("effect");
5
+ const markdown_renderer_1 = require("./markdown-renderer");
6
+ const output_theme_1 = require("./output-theme");
7
+ const output_writer_1 = require("./output-writer");
8
+ const thinking_renderer_1 = require("./thinking-renderer");
9
+ const tool_formatter_1 = require("./tool-formatter");
10
+ /**
11
+ * Output renderer for terminal display
12
+ * Handles progressive rendering of streaming LLM responses
13
+ * Supports multiple output modes: normal, quiet, verbose, json, accessible
14
+ */
15
+ class OutputRenderer {
16
+ config;
17
+ writer;
18
+ theme;
19
+ thinkingRenderer;
20
+ toolNameMap = new Map();
21
+ mode;
22
+ constructor(config) {
23
+ this.config = config;
24
+ // Determine color profile
25
+ const colorProfile = config.displayConfig.colorProfile || (0, output_theme_1.detectColorProfile)();
26
+ // Determine output mode
27
+ this.mode = config.displayConfig.mode;
28
+ // Create appropriate writer based on mode
29
+ this.writer = this.createWriter(this.mode);
30
+ // Create theme (use no-color for json/accessible modes)
31
+ this.theme = (0, output_theme_1.createTheme)(this.mode === "json" || this.mode === "accessible" ? "none" : colorProfile);
32
+ // Create thinking renderer
33
+ this.thinkingRenderer = new thinking_renderer_1.ThinkingRenderer(this.theme);
34
+ }
35
+ /**
36
+ * Create writer based on output mode
37
+ */
38
+ createWriter(mode) {
39
+ switch (mode) {
40
+ case "quiet":
41
+ return new output_writer_1.QuietWriter();
42
+ case "json":
43
+ return new output_writer_1.JSONWriter();
44
+ case "normal":
45
+ case "verbose":
46
+ case "accessible":
47
+ return new output_writer_1.TerminalWriter();
48
+ }
49
+ }
50
+ /**
51
+ * Handle a streaming event and update output
52
+ */
53
+ handleEvent(event) {
54
+ return effect_1.Effect.gen(this, function* () {
55
+ const output = this.renderEvent(event);
56
+ if (output) {
57
+ yield* this.writer.write(output);
58
+ }
59
+ });
60
+ }
61
+ /**
62
+ * Render an event to a string (pure function for easier testing)
63
+ */
64
+ renderEvent(event) {
65
+ // In quiet mode, only show errors
66
+ if (this.mode === "quiet" && event.type !== "error") {
67
+ return null;
68
+ }
69
+ switch (event.type) {
70
+ case "stream_start":
71
+ return this.renderStreamStart(event);
72
+ case "thinking_start":
73
+ if (this.config.displayConfig.showThinking) {
74
+ return this.thinkingRenderer.handleStart();
75
+ }
76
+ return null;
77
+ case "thinking_chunk":
78
+ if (this.config.displayConfig.showThinking && this.thinkingRenderer.isActive()) {
79
+ return this.thinkingRenderer.handleChunk(event.content);
80
+ }
81
+ return null;
82
+ case "thinking_complete":
83
+ if (this.config.displayConfig.showThinking) {
84
+ const { output, shouldClearLines } = this.thinkingRenderer.handleComplete(event.totalTokens);
85
+ if (shouldClearLines > 0) {
86
+ // Need to clear previous lines first
87
+ effect_1.Effect.runSync(this.writer.clearLines(shouldClearLines));
88
+ }
89
+ return output;
90
+ }
91
+ return null;
92
+ case "text_start":
93
+ // No visual indicator needed
94
+ return null;
95
+ case "text_chunk":
96
+ return this.renderTextChunk(event.delta);
97
+ case "tool_call":
98
+ // Tool call detected - execution will be handled by separate events
99
+ if (this.mode === "verbose") {
100
+ return this.renderToolCallVerbose(event.toolCall);
101
+ }
102
+ return null;
103
+ case "tools_detected":
104
+ if (this.config.displayConfig.showToolExecution) {
105
+ return this.renderToolsDetected(event);
106
+ }
107
+ return null;
108
+ case "tool_execution_start":
109
+ if (this.config.displayConfig.showToolExecution) {
110
+ return this.renderToolExecutionStart(event);
111
+ }
112
+ return null;
113
+ case "tool_execution_complete":
114
+ if (this.config.displayConfig.showToolExecution) {
115
+ return this.renderToolExecutionComplete(event);
116
+ }
117
+ return null;
118
+ case "usage_update":
119
+ if (this.mode === "verbose") {
120
+ return this.renderUsageUpdate(event);
121
+ }
122
+ return null;
123
+ case "error":
124
+ return this.renderError(event.error);
125
+ case "complete":
126
+ return this.renderComplete(event);
127
+ default:
128
+ return null;
129
+ }
130
+ }
131
+ renderStreamStart(event) {
132
+ // Reset thinking state for new stream
133
+ this.thinkingRenderer.reset();
134
+ const reasoningInfo = this.config.reasoningEffort
135
+ ? this.theme.colors.dim(` [Reasoning: ${this.config.reasoningEffort}]`)
136
+ : "";
137
+ return ("\n" +
138
+ this.theme.colors.agentName(this.config.agentName) +
139
+ ` (${event.provider}/${event.model})` +
140
+ reasoningInfo +
141
+ ":\n");
142
+ }
143
+ renderTextChunk(delta) {
144
+ // Always use markdown rendering since LLMs output markdown
145
+ if (this.config.streamingConfig.progressiveMarkdown &&
146
+ this.mode !== "json" &&
147
+ this.mode !== "accessible") {
148
+ // Use markdown renderer with buffering
149
+ const bufferMs = this.config.streamingConfig.textBufferMs ?? 50;
150
+ try {
151
+ const rendered = markdown_renderer_1.MarkdownRenderer.renderChunk(delta, bufferMs);
152
+ return rendered;
153
+ }
154
+ catch (error) {
155
+ // Fallback to plain text if markdown rendering fails
156
+ // Log warning in verbose mode
157
+ if (this.mode === "verbose") {
158
+ console.warn("Markdown rendering failed:", error);
159
+ }
160
+ return delta;
161
+ }
162
+ }
163
+ else {
164
+ // Plain text streaming for accessible/json modes
165
+ return delta;
166
+ }
167
+ }
168
+ renderToolCallVerbose(toolCall) {
169
+ const { colors, icons } = this.theme;
170
+ return ("\n" +
171
+ colors.dim(`${icons.tool} Tool call detected: `) +
172
+ colors.toolName(toolCall.function.name) +
173
+ "\n");
174
+ }
175
+ renderToolsDetected(event) {
176
+ const { colors, icons } = this.theme;
177
+ const tools = event.toolNames.join(", ");
178
+ return ("\n" +
179
+ colors.warning(`${icons.tool} ${event.agentName} is using tools: `) +
180
+ colors.toolName(tools) +
181
+ "\n");
182
+ }
183
+ renderToolExecutionStart(event) {
184
+ // Store tool name for later use in completion
185
+ this.toolNameMap.set(event.toolCallId, event.toolName);
186
+ const argsStr = OutputRenderer.formatToolArguments(event.toolName, event.arguments);
187
+ const { colors, icons } = this.theme;
188
+ return ("\n" +
189
+ colors.toolName(`${icons.tool} Executing tool: `) +
190
+ colors.toolName(event.toolName) +
191
+ argsStr +
192
+ "...");
193
+ }
194
+ renderToolExecutionComplete(event) {
195
+ // Get tool name from map
196
+ const toolName = this.toolNameMap.get(event.toolCallId) || "";
197
+ const summary = event.summary || OutputRenderer.formatToolResult(toolName, event.result);
198
+ const { colors, icons } = this.theme;
199
+ // Clean up
200
+ this.toolNameMap.delete(event.toolCallId);
201
+ return (` ${colors.success(icons.success)}` +
202
+ (summary ? ` ${summary}` : "") +
203
+ ` ${colors.dim(`(${event.durationMs}ms)`)}` +
204
+ "\n");
205
+ }
206
+ renderUsageUpdate(event) {
207
+ const { colors } = this.theme;
208
+ return (colors.dim(`\n[Tokens: ${event.usage.promptTokens} prompt + ${event.usage.completionTokens} completion = ${event.usage.totalTokens} total]\n`) + "\n");
209
+ }
210
+ renderError(error) {
211
+ const { colors, icons } = this.theme;
212
+ return "\n" + colors.error(`${icons.error} Error: ${error.message}`) + "\n";
213
+ }
214
+ renderComplete(event) {
215
+ // Flush any remaining buffered markdown content
216
+ if (this.config.streamingConfig.progressiveMarkdown &&
217
+ this.mode !== "json" &&
218
+ this.mode !== "accessible") {
219
+ try {
220
+ const remaining = markdown_renderer_1.MarkdownRenderer.flushBuffer();
221
+ if (remaining.length > 0) {
222
+ // Write immediately (side effect, but necessary for proper output)
223
+ effect_1.Effect.runSync(this.writer.write(remaining));
224
+ }
225
+ }
226
+ catch {
227
+ // Silently ignore flush errors
228
+ }
229
+ }
230
+ let output = "";
231
+ // Show metrics if enabled and available
232
+ if (this.config.showMetrics && event.metrics) {
233
+ const parts = [];
234
+ if (event.metrics.firstTokenLatencyMs) {
235
+ parts.push(`First token: ${event.metrics.firstTokenLatencyMs}ms`);
236
+ }
237
+ if (event.metrics.tokensPerSecond) {
238
+ parts.push(`Speed: ${event.metrics.tokensPerSecond.toFixed(1)} tok/s`);
239
+ }
240
+ if (event.metrics.totalTokens) {
241
+ parts.push(`Total: ${event.metrics.totalTokens} tokens`);
242
+ }
243
+ if (parts.length > 0) {
244
+ output += this.theme.colors.dim(`\n[${parts.join(" | ")}]\n`);
245
+ }
246
+ }
247
+ // In verbose mode, show total duration
248
+ if (this.mode === "verbose") {
249
+ output += this.theme.colors.dim(`\n[Total duration: ${event.totalDurationMs}ms]\n`);
250
+ }
251
+ // Add final newline for separation
252
+ output += "\n";
253
+ return output;
254
+ }
255
+ /**
256
+ * Format tool arguments for display (used in both streaming and non-streaming modes)
257
+ */
258
+ static formatToolArguments(toolName, args) {
259
+ return (0, tool_formatter_1.formatToolArguments)(toolName, args, { style: "colored" });
260
+ }
261
+ /**
262
+ * Format tool result for display (used in both streaming and non-streaming modes)
263
+ */
264
+ static formatToolResult(toolName, result) {
265
+ return (0, tool_formatter_1.formatToolResult)(toolName, result);
266
+ }
267
+ /**
268
+ * Reset renderer state (call between conversations)
269
+ */
270
+ reset() {
271
+ return effect_1.Effect.sync(() => {
272
+ this.toolNameMap.clear();
273
+ this.thinkingRenderer.reset();
274
+ markdown_renderer_1.MarkdownRenderer.resetStreamingBuffer();
275
+ });
276
+ }
277
+ /**
278
+ * Flush any pending output
279
+ */
280
+ flush() {
281
+ return this.writer.flush();
282
+ }
283
+ /**
284
+ * Get the underlying writer (useful for testing)
285
+ */
286
+ getWriter() {
287
+ return this.writer;
288
+ }
289
+ }
290
+ exports.OutputRenderer = OutputRenderer;
291
+ //# sourceMappingURL=output-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-renderer.js","sourceRoot":"","sources":["../../../src/core/utils/output-renderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Color profile for terminal output
3
+ */
4
+ export type ColorProfile = "full" | "basic" | "none";
5
+ /**
6
+ * Output mode controls what content is displayed
7
+ */
8
+ export type OutputMode = "normal" | "quiet" | "verbose" | "json" | "accessible";
9
+ /**
10
+ * Theme configuration for rendering output
11
+ */
12
+ export interface RenderTheme {
13
+ readonly colors: {
14
+ readonly thinking: (text: string) => string;
15
+ readonly thinkingContent: (text: string) => string;
16
+ readonly toolName: (text: string) => string;
17
+ readonly toolArgs: (text: string) => string;
18
+ readonly success: (text: string) => string;
19
+ readonly error: (text: string) => string;
20
+ readonly warning: (text: string) => string;
21
+ readonly info: (text: string) => string;
22
+ readonly dim: (text: string) => string;
23
+ readonly highlight: (text: string) => string;
24
+ readonly agentName: (text: string) => string;
25
+ };
26
+ readonly icons: {
27
+ readonly thinking: string;
28
+ readonly tool: string;
29
+ readonly success: string;
30
+ readonly error: string;
31
+ readonly warning: string;
32
+ readonly info: string;
33
+ };
34
+ readonly separatorWidth: number;
35
+ readonly separatorChar: string;
36
+ }
37
+ /**
38
+ * ANSI escape sequences
39
+ */
40
+ export declare const ANSI: {
41
+ readonly MOVE_UP_1_CLEAR: "\u001B[1A\u001B[0J";
42
+ readonly MOVE_UP_2_CLEAR: "\u001B[2A\u001B[0J";
43
+ readonly MOVE_UP_3_CLEAR: "\u001B[3A\u001B[0J";
44
+ readonly CLEAR_LINE: "\u001B[2K";
45
+ readonly CURSOR_TO_START: "\u001B[0G";
46
+ };
47
+ /**
48
+ * Display constants
49
+ */
50
+ export declare const DISPLAY: {
51
+ readonly SEPARATOR_WIDTH: 60;
52
+ readonly SEPARATOR_CHAR: "─";
53
+ readonly MAX_TOOL_ARG_LENGTH: 60;
54
+ readonly MAX_TOOL_RESULT_PREVIEW: 50;
55
+ };
56
+ /**
57
+ * Create a theme based on color profile
58
+ */
59
+ export declare function createTheme(profile: ColorProfile): RenderTheme;
60
+ /**
61
+ * Detect appropriate color profile based on environment
62
+ */
63
+ export declare function detectColorProfile(): ColorProfile;
64
+ //# sourceMappingURL=output-theme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-theme.d.ts","sourceRoot":"","sources":["../../../src/core/utils/output-theme.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAErD;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,YAAY,CAAC;AAEhF;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;QAC5C,QAAQ,CAAC,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;QACnD,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;QAC5C,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;QAC5C,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;QAC3C,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;QACzC,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;QAC3C,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;QACxC,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;QACvC,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;QAC7C,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;KAC9C,CAAC;IACF,QAAQ,CAAC,KAAK,EAAE;QACd,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED;;GAEG;AACH,eAAO,MAAM,IAAI;;;;;;CAMP,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,OAAO;;;;;CAKV,CAAC;AAEX;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,WAAW,CAS9D;AAiGD;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,YAAY,CAsBjD"}
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DISPLAY = exports.ANSI = void 0;
4
+ exports.createTheme = createTheme;
5
+ exports.detectColorProfile = detectColorProfile;
6
+ const tslib_1 = require("tslib");
7
+ const chalk_1 = tslib_1.__importDefault(require("chalk"));
8
+ /**
9
+ * ANSI escape sequences
10
+ */
11
+ exports.ANSI = {
12
+ MOVE_UP_1_CLEAR: "\x1b[1A\x1b[0J",
13
+ MOVE_UP_2_CLEAR: "\x1b[2A\x1b[0J",
14
+ MOVE_UP_3_CLEAR: "\x1b[3A\x1b[0J",
15
+ CLEAR_LINE: "\x1b[2K",
16
+ CURSOR_TO_START: "\x1b[0G",
17
+ };
18
+ /**
19
+ * Display constants
20
+ */
21
+ exports.DISPLAY = {
22
+ SEPARATOR_WIDTH: 60,
23
+ SEPARATOR_CHAR: "─",
24
+ MAX_TOOL_ARG_LENGTH: 60,
25
+ MAX_TOOL_RESULT_PREVIEW: 50,
26
+ };
27
+ /**
28
+ * Create a theme based on color profile
29
+ */
30
+ function createTheme(profile) {
31
+ switch (profile) {
32
+ case "full":
33
+ return createFullColorTheme();
34
+ case "basic":
35
+ return createBasicColorTheme();
36
+ case "none":
37
+ return createNoColorTheme();
38
+ }
39
+ }
40
+ /**
41
+ * Full color theme with all features
42
+ */
43
+ function createFullColorTheme() {
44
+ return {
45
+ colors: {
46
+ thinking: chalk_1.default.blue.bold,
47
+ thinkingContent: chalk_1.default.italic.gray.dim,
48
+ toolName: chalk_1.default.cyan,
49
+ toolArgs: chalk_1.default.cyan,
50
+ success: chalk_1.default.green,
51
+ error: chalk_1.default.red,
52
+ warning: chalk_1.default.yellow,
53
+ info: chalk_1.default.blue,
54
+ dim: chalk_1.default.dim,
55
+ highlight: chalk_1.default.bold.white,
56
+ agentName: chalk_1.default.bold.blue,
57
+ },
58
+ icons: {
59
+ thinking: "🧠",
60
+ tool: "🔧",
61
+ success: "✓",
62
+ error: "✗",
63
+ warning: "⚠️",
64
+ info: "ℹ️",
65
+ },
66
+ separatorWidth: exports.DISPLAY.SEPARATOR_WIDTH,
67
+ separatorChar: exports.DISPLAY.SEPARATOR_CHAR,
68
+ };
69
+ }
70
+ /**
71
+ * Basic color theme (16 colors only, no emojis)
72
+ */
73
+ function createBasicColorTheme() {
74
+ return {
75
+ colors: {
76
+ thinking: chalk_1.default.blue,
77
+ thinkingContent: chalk_1.default.gray,
78
+ toolName: chalk_1.default.cyan,
79
+ toolArgs: chalk_1.default.cyan,
80
+ success: chalk_1.default.green,
81
+ error: chalk_1.default.red,
82
+ warning: chalk_1.default.yellow,
83
+ info: chalk_1.default.blue,
84
+ dim: chalk_1.default.gray,
85
+ highlight: chalk_1.default.white,
86
+ agentName: chalk_1.default.blue,
87
+ },
88
+ icons: {
89
+ thinking: "[*]",
90
+ tool: "[>]",
91
+ success: "[+]",
92
+ error: "[!]",
93
+ warning: "[!]",
94
+ info: "[i]",
95
+ },
96
+ separatorWidth: exports.DISPLAY.SEPARATOR_WIDTH,
97
+ separatorChar: "-",
98
+ };
99
+ }
100
+ /**
101
+ * No color theme (accessible mode)
102
+ */
103
+ function createNoColorTheme() {
104
+ const identity = (text) => text;
105
+ return {
106
+ colors: {
107
+ thinking: identity,
108
+ thinkingContent: identity,
109
+ toolName: identity,
110
+ toolArgs: identity,
111
+ success: identity,
112
+ error: identity,
113
+ warning: identity,
114
+ info: identity,
115
+ dim: identity,
116
+ highlight: identity,
117
+ agentName: identity,
118
+ },
119
+ icons: {
120
+ thinking: "[THINKING]",
121
+ tool: "[TOOL]",
122
+ success: "[OK]",
123
+ error: "[ERROR]",
124
+ warning: "[WARNING]",
125
+ info: "[INFO]",
126
+ },
127
+ separatorWidth: exports.DISPLAY.SEPARATOR_WIDTH,
128
+ separatorChar: "-",
129
+ };
130
+ }
131
+ /**
132
+ * Detect appropriate color profile based on environment
133
+ */
134
+ function detectColorProfile() {
135
+ // Check if colors are disabled
136
+ if (process.env['NO_COLOR'] || process.env['NODE_DISABLE_COLORS']) {
137
+ return "none";
138
+ }
139
+ // Check if we're in a TTY
140
+ if (!process.stdout.isTTY) {
141
+ return "none";
142
+ }
143
+ // Check color support level
144
+ const colorLevel = chalk_1.default.level;
145
+ if (colorLevel === 0) {
146
+ return "none";
147
+ }
148
+ if (colorLevel === 1) {
149
+ return "basic";
150
+ }
151
+ // Full color support (256 colors or truecolor)
152
+ return "full";
153
+ }
154
+ //# sourceMappingURL=output-theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-theme.js","sourceRoot":"","sources":["../../../src/core/utils/output-theme.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ import { Effect } from "effect";
2
+ /**
3
+ * Output writer interface - abstracts where output goes
4
+ * This enables testing, JSON output, file logging, and other output targets
5
+ */
6
+ export interface OutputWriter {
7
+ /**
8
+ * Write text without newline
9
+ */
10
+ write(text: string): Effect.Effect<void, never>;
11
+ /**
12
+ * Write text with newline
13
+ */
14
+ writeLine(text: string): Effect.Effect<void, never>;
15
+ /**
16
+ * Clear N lines from the terminal (for updating previous content)
17
+ * This is a no-op for non-terminal writers (JSON, file)
18
+ */
19
+ clearLines(count: number): Effect.Effect<void, never>;
20
+ /**
21
+ * Flush any buffered output
22
+ */
23
+ flush(): Effect.Effect<void, never>;
24
+ }
25
+ /**
26
+ * Terminal writer - writes to stdout/stderr
27
+ */
28
+ export declare class TerminalWriter implements OutputWriter {
29
+ write(text: string): Effect.Effect<void, never>;
30
+ writeLine(text: string): Effect.Effect<void, never>;
31
+ clearLines(count: number): Effect.Effect<void, never>;
32
+ flush(): Effect.Effect<void, never>;
33
+ }
34
+ /**
35
+ * JSON writer - accumulates structured output for programmatic consumption
36
+ */
37
+ export declare class JSONWriter implements OutputWriter {
38
+ private events;
39
+ write(text: string): Effect.Effect<void, never>;
40
+ writeLine(text: string): Effect.Effect<void, never>;
41
+ clearLines(_count: number): Effect.Effect<void, never>;
42
+ flush(): Effect.Effect<void, never>;
43
+ /**
44
+ * Get accumulated events without flushing
45
+ */
46
+ getEvents(): ReadonlyArray<{
47
+ type: string;
48
+ content: string;
49
+ timestamp: number;
50
+ }>;
51
+ }
52
+ /**
53
+ * Test writer - captures output for testing
54
+ */
55
+ export declare class TestWriter implements OutputWriter {
56
+ private buffer;
57
+ write(text: string): Effect.Effect<void, never>;
58
+ writeLine(text: string): Effect.Effect<void, never>;
59
+ clearLines(_count: number): Effect.Effect<void, never>;
60
+ flush(): Effect.Effect<void, never>;
61
+ /**
62
+ * Get all captured output as a single string
63
+ */
64
+ getOutput(): string;
65
+ /**
66
+ * Clear the buffer
67
+ */
68
+ clear(): void;
69
+ }
70
+ /**
71
+ * Quiet writer - suppresses all output except errors
72
+ */
73
+ export declare class QuietWriter implements OutputWriter {
74
+ write(_text: string): Effect.Effect<void, never>;
75
+ writeLine(_text: string): Effect.Effect<void, never>;
76
+ clearLines(_count: number): Effect.Effect<void, never>;
77
+ flush(): Effect.Effect<void, never>;
78
+ }
79
+ //# sourceMappingURL=output-writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-writer.d.ts","sourceRoot":"","sources":["../../../src/core/utils/output-writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAEhD;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAEpD;;;OAGG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAEtD;;OAEG;IACH,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;CACrC;AAED;;GAEG;AACH,qBAAa,cAAe,YAAW,YAAY;IACjD,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;IAM/C,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;IAMnD,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;IASrD,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;CAQpC;AAED;;GAEG;AACH,qBAAa,UAAW,YAAW,YAAY;IAC7C,OAAO,CAAC,MAAM,CAAmE;IAEjF,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;IAU/C,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;IAUnD,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;IAKtD,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;IAQnC;;OAEG;IACH,SAAS,IAAI,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;CAGjF;AAED;;GAEG;AACH,qBAAa,UAAW,YAAW,YAAY;IAC7C,OAAO,CAAC,MAAM,CAAgB;IAE9B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;IAM/C,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;IAMnD,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;IAKtD,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;IAInC;;OAEG;IACH,SAAS,IAAI,MAAM;IAInB;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd;AAED;;GAEG;AACH,qBAAa,WAAY,YAAW,YAAY;IAC9C,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;IAIhD,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;IAIpD,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;IAItD,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;CAGpC"}