@codemieai/code 0.0.1 → 0.0.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 (244) hide show
  1. package/.codemie/guides/git-workflow.md +493 -0
  2. package/CLAUDE.md +130 -761
  3. package/README.md +283 -695
  4. package/bin/codemie-claude.js +122 -0
  5. package/bin/codemie-code.js +90 -15
  6. package/bin/codemie-codex.js +138 -0
  7. package/bin/codemie.js +1 -1
  8. package/config.example.json +10 -0
  9. package/dist/agents/adapters/claude-code.d.ts +2 -2
  10. package/dist/agents/adapters/claude-code.d.ts.map +1 -1
  11. package/dist/agents/adapters/claude-code.js +20 -42
  12. package/dist/agents/adapters/claude-code.js.map +1 -1
  13. package/dist/agents/adapters/codemie-code.d.ts +11 -2
  14. package/dist/agents/adapters/codemie-code.d.ts.map +1 -1
  15. package/dist/agents/adapters/codemie-code.js +93 -25
  16. package/dist/agents/adapters/codemie-code.js.map +1 -1
  17. package/dist/agents/adapters/codex.d.ts +2 -2
  18. package/dist/agents/adapters/codex.d.ts.map +1 -1
  19. package/dist/agents/adapters/codex.js +31 -24
  20. package/dist/agents/adapters/codex.js.map +1 -1
  21. package/dist/agents/codemie-code/agent.d.ts +89 -0
  22. package/dist/agents/codemie-code/agent.d.ts.map +1 -0
  23. package/dist/agents/codemie-code/agent.js +523 -0
  24. package/dist/agents/codemie-code/agent.js.map +1 -0
  25. package/dist/agents/codemie-code/config.d.ts +40 -0
  26. package/dist/agents/codemie-code/config.d.ts.map +1 -0
  27. package/dist/agents/codemie-code/config.js +276 -0
  28. package/dist/agents/codemie-code/config.js.map +1 -0
  29. package/dist/agents/codemie-code/filters.d.ts +91 -0
  30. package/dist/agents/codemie-code/filters.d.ts.map +1 -0
  31. package/dist/agents/codemie-code/filters.js +328 -0
  32. package/dist/agents/codemie-code/filters.js.map +1 -0
  33. package/dist/agents/codemie-code/index.d.ts +78 -0
  34. package/dist/agents/codemie-code/index.d.ts.map +1 -0
  35. package/dist/agents/codemie-code/index.js +259 -0
  36. package/dist/agents/codemie-code/index.js.map +1 -0
  37. package/dist/agents/codemie-code/prompts.d.ts +11 -0
  38. package/dist/agents/codemie-code/prompts.d.ts.map +1 -0
  39. package/dist/agents/codemie-code/prompts.js +31 -0
  40. package/dist/agents/codemie-code/prompts.js.map +1 -0
  41. package/dist/agents/codemie-code/streaming/events.d.ts +7 -0
  42. package/dist/agents/codemie-code/streaming/events.d.ts.map +1 -0
  43. package/dist/agents/codemie-code/streaming/events.js +7 -0
  44. package/dist/agents/codemie-code/streaming/events.js.map +1 -0
  45. package/dist/agents/codemie-code/streaming/formatter.d.ts +2 -0
  46. package/dist/agents/codemie-code/streaming/formatter.d.ts.map +1 -0
  47. package/dist/agents/codemie-code/streaming/formatter.js +2 -0
  48. package/dist/agents/codemie-code/streaming/formatter.js.map +1 -0
  49. package/dist/agents/codemie-code/streaming/ui.d.ts +2 -0
  50. package/dist/agents/codemie-code/streaming/ui.d.ts.map +1 -0
  51. package/dist/agents/codemie-code/streaming/ui.js +2 -0
  52. package/dist/agents/codemie-code/streaming/ui.js.map +1 -0
  53. package/dist/agents/codemie-code/tokenUtils.d.ts +108 -0
  54. package/dist/agents/codemie-code/tokenUtils.d.ts.map +1 -0
  55. package/dist/agents/codemie-code/tokenUtils.js +220 -0
  56. package/dist/agents/codemie-code/tokenUtils.js.map +1 -0
  57. package/dist/agents/codemie-code/toolMetadata.d.ts +15 -0
  58. package/dist/agents/codemie-code/toolMetadata.d.ts.map +1 -0
  59. package/dist/agents/codemie-code/toolMetadata.js +315 -0
  60. package/dist/agents/codemie-code/toolMetadata.js.map +1 -0
  61. package/dist/agents/codemie-code/tools/command.d.ts +2 -0
  62. package/dist/agents/codemie-code/tools/command.d.ts.map +1 -0
  63. package/dist/agents/codemie-code/tools/command.js +2 -0
  64. package/dist/agents/codemie-code/tools/command.js.map +1 -0
  65. package/dist/agents/codemie-code/tools/filesystem.d.ts +2 -0
  66. package/dist/agents/codemie-code/tools/filesystem.d.ts.map +1 -0
  67. package/dist/agents/codemie-code/tools/filesystem.js +2 -0
  68. package/dist/agents/codemie-code/tools/filesystem.js.map +1 -0
  69. package/dist/agents/codemie-code/tools/git.d.ts +2 -0
  70. package/dist/agents/codemie-code/tools/git.d.ts.map +1 -0
  71. package/dist/agents/codemie-code/tools/git.js +2 -0
  72. package/dist/agents/codemie-code/tools/git.js.map +1 -0
  73. package/dist/agents/codemie-code/tools/index.d.ts +19 -0
  74. package/dist/agents/codemie-code/tools/index.d.ts.map +1 -0
  75. package/dist/agents/codemie-code/tools/index.js +239 -0
  76. package/dist/agents/codemie-code/tools/index.js.map +1 -0
  77. package/dist/agents/codemie-code/tools/security.d.ts +2 -0
  78. package/dist/agents/codemie-code/tools/security.d.ts.map +1 -0
  79. package/dist/agents/codemie-code/tools/security.js +2 -0
  80. package/dist/agents/codemie-code/tools/security.js.map +1 -0
  81. package/dist/agents/codemie-code/types.d.ts +254 -0
  82. package/dist/agents/codemie-code/types.d.ts.map +1 -0
  83. package/dist/agents/codemie-code/types.js +35 -0
  84. package/dist/agents/codemie-code/types.js.map +1 -0
  85. package/dist/agents/codemie-code/ui.d.ts +83 -0
  86. package/dist/agents/codemie-code/ui.d.ts.map +1 -0
  87. package/dist/agents/codemie-code/ui.js +624 -0
  88. package/dist/agents/codemie-code/ui.js.map +1 -0
  89. package/dist/agents/registry.d.ts +1 -1
  90. package/dist/agents/registry.d.ts.map +1 -1
  91. package/dist/agents/registry.js +7 -13
  92. package/dist/agents/registry.js.map +1 -1
  93. package/dist/cli/commands/config.d.ts +3 -0
  94. package/dist/cli/commands/config.d.ts.map +1 -0
  95. package/dist/cli/commands/config.js +323 -0
  96. package/dist/cli/commands/config.js.map +1 -0
  97. package/dist/cli/commands/doctor.d.ts.map +1 -1
  98. package/dist/cli/commands/doctor.js +113 -69
  99. package/dist/cli/commands/doctor.js.map +1 -1
  100. package/dist/cli/commands/env.d.ts +3 -0
  101. package/dist/cli/commands/env.d.ts.map +1 -0
  102. package/dist/cli/commands/env.js +19 -0
  103. package/dist/cli/commands/env.js.map +1 -0
  104. package/dist/cli/commands/install.js +27 -33
  105. package/dist/cli/commands/install.js.map +1 -1
  106. package/dist/cli/commands/list.js +18 -24
  107. package/dist/cli/commands/list.js.map +1 -1
  108. package/dist/cli/commands/run.d.ts.map +1 -1
  109. package/dist/cli/commands/run.js +307 -21
  110. package/dist/cli/commands/run.js.map +1 -1
  111. package/dist/cli/commands/setup.d.ts +3 -0
  112. package/dist/cli/commands/setup.d.ts.map +1 -0
  113. package/dist/cli/commands/setup.js +357 -0
  114. package/dist/cli/commands/setup.js.map +1 -0
  115. package/dist/cli/commands/uninstall.js +24 -30
  116. package/dist/cli/commands/uninstall.js.map +1 -1
  117. package/dist/cli/commands/version.d.ts.map +1 -1
  118. package/dist/cli/commands/version.js +11 -16
  119. package/dist/cli/commands/version.js.map +1 -1
  120. package/dist/cli/index.js +47 -31
  121. package/dist/cli/index.js.map +1 -1
  122. package/dist/env/manager.js +9 -46
  123. package/dist/env/manager.js.map +1 -1
  124. package/dist/index.d.ts +6 -13
  125. package/dist/index.d.ts.map +1 -1
  126. package/dist/index.js +6 -43
  127. package/dist/index.js.map +1 -1
  128. package/dist/utils/async-tips.d.ts.map +1 -1
  129. package/dist/utils/async-tips.js +16 -55
  130. package/dist/utils/async-tips.js.map +1 -1
  131. package/dist/utils/clipboard.d.ts +16 -0
  132. package/dist/utils/clipboard.d.ts.map +1 -0
  133. package/dist/utils/clipboard.js +179 -0
  134. package/dist/utils/clipboard.js.map +1 -0
  135. package/dist/utils/config-loader.d.ts +96 -0
  136. package/dist/utils/config-loader.d.ts.map +1 -0
  137. package/dist/utils/config-loader.js +351 -0
  138. package/dist/utils/config-loader.js.map +1 -0
  139. package/dist/utils/dirname.d.ts +7 -0
  140. package/dist/utils/dirname.d.ts.map +1 -0
  141. package/dist/utils/dirname.js +11 -0
  142. package/dist/utils/dirname.js.map +1 -0
  143. package/dist/utils/errors.js +7 -17
  144. package/dist/utils/errors.js.map +1 -1
  145. package/dist/utils/exec.js +3 -6
  146. package/dist/utils/exec.js.map +1 -1
  147. package/dist/utils/first-time.d.ts +34 -0
  148. package/dist/utils/first-time.d.ts.map +1 -0
  149. package/dist/utils/first-time.js +245 -0
  150. package/dist/utils/first-time.js.map +1 -0
  151. package/dist/utils/health-checker.d.ts +20 -0
  152. package/dist/utils/health-checker.d.ts.map +1 -0
  153. package/dist/utils/health-checker.js +168 -0
  154. package/dist/utils/health-checker.js.map +1 -0
  155. package/dist/utils/logger.js +12 -18
  156. package/dist/utils/logger.js.map +1 -1
  157. package/dist/utils/model-fetcher.d.ts +21 -0
  158. package/dist/utils/model-fetcher.d.ts.map +1 -0
  159. package/dist/utils/model-fetcher.js +137 -0
  160. package/dist/utils/model-fetcher.js.map +1 -0
  161. package/dist/utils/tips.d.ts.map +1 -1
  162. package/dist/utils/tips.js +13 -52
  163. package/dist/utils/tips.js.map +1 -1
  164. package/package.json +17 -23
  165. package/scripts/README.md +80 -0
  166. package/scripts/release.sh +156 -0
  167. package/dist/agents/adapters/aider.d.ts +0 -12
  168. package/dist/agents/adapters/aider.d.ts.map +0 -1
  169. package/dist/agents/adapters/aider.js +0 -80
  170. package/dist/agents/adapters/aider.js.map +0 -1
  171. package/dist/cli/cli.d.ts +0 -4
  172. package/dist/cli/cli.d.ts.map +0 -1
  173. package/dist/cli/cli.js +0 -107
  174. package/dist/cli/cli.js.map +0 -1
  175. package/dist/cli/commands/mcp.d.ts +0 -3
  176. package/dist/cli/commands/mcp.d.ts.map +0 -1
  177. package/dist/cli/commands/mcp.js +0 -459
  178. package/dist/cli/commands/mcp.js.map +0 -1
  179. package/dist/code/agent-events.d.ts +0 -39
  180. package/dist/code/agent-events.d.ts.map +0 -1
  181. package/dist/code/agent-events.js +0 -4
  182. package/dist/code/agent-events.js.map +0 -1
  183. package/dist/code/agent.d.ts +0 -19
  184. package/dist/code/agent.d.ts.map +0 -1
  185. package/dist/code/agent.js +0 -144
  186. package/dist/code/agent.js.map +0 -1
  187. package/dist/code/config.d.ts +0 -13
  188. package/dist/code/config.d.ts.map +0 -1
  189. package/dist/code/config.js +0 -41
  190. package/dist/code/config.js.map +0 -1
  191. package/dist/code/index.d.ts +0 -19
  192. package/dist/code/index.d.ts.map +0 -1
  193. package/dist/code/index.js +0 -400
  194. package/dist/code/index.js.map +0 -1
  195. package/dist/code/prompts.d.ts +0 -2
  196. package/dist/code/prompts.d.ts.map +0 -1
  197. package/dist/code/prompts.js +0 -45
  198. package/dist/code/prompts.js.map +0 -1
  199. package/dist/code/tools/command.d.ts +0 -8
  200. package/dist/code/tools/command.d.ts.map +0 -1
  201. package/dist/code/tools/command.js +0 -83
  202. package/dist/code/tools/command.js.map +0 -1
  203. package/dist/code/tools/diff-utils.d.ts +0 -2
  204. package/dist/code/tools/diff-utils.d.ts.map +0 -1
  205. package/dist/code/tools/diff-utils.js +0 -45
  206. package/dist/code/tools/diff-utils.js.map +0 -1
  207. package/dist/code/tools/filesystem.d.ts +0 -11
  208. package/dist/code/tools/filesystem.d.ts.map +0 -1
  209. package/dist/code/tools/filesystem.js +0 -442
  210. package/dist/code/tools/filesystem.js.map +0 -1
  211. package/dist/code/tools/git.d.ts +0 -7
  212. package/dist/code/tools/git.d.ts.map +0 -1
  213. package/dist/code/tools/git.js +0 -111
  214. package/dist/code/tools/git.js.map +0 -1
  215. package/dist/code/tools/mcp.d.ts +0 -13
  216. package/dist/code/tools/mcp.d.ts.map +0 -1
  217. package/dist/code/tools/mcp.js +0 -230
  218. package/dist/code/tools/mcp.js.map +0 -1
  219. package/dist/data/tips.json +0 -118
  220. package/dist/ui/terminal-ui.d.ts +0 -73
  221. package/dist/ui/terminal-ui.d.ts.map +0 -1
  222. package/dist/ui/terminal-ui.js +0 -900
  223. package/dist/ui/terminal-ui.js.map +0 -1
  224. package/dist/utils/env-mapper.d.ts +0 -40
  225. package/dist/utils/env-mapper.d.ts.map +0 -1
  226. package/dist/utils/env-mapper.js +0 -122
  227. package/dist/utils/env-mapper.js.map +0 -1
  228. package/docs/USER_GUIDE.md +0 -573
  229. package/tests/agent-direct.test.mjs +0 -45
  230. package/tests/agent-output.test.mjs +0 -64
  231. package/tests/codemie-code.test.mjs +0 -42
  232. package/tests/context7-only.test.mjs +0 -42
  233. package/tests/conversation-flow.test.mjs +0 -63
  234. package/tests/interactive-simulation.test.mjs +0 -60
  235. package/tests/live-output.test.mjs +0 -53
  236. package/tests/mcp-context7.test.mjs +0 -105
  237. package/tests/mcp-e2e.test.mjs +0 -109
  238. package/tests/mcp-time-server.test.mjs +0 -58
  239. package/tests/streaming.test.mjs +0 -57
  240. package/tests/test-helpers.mjs +0 -94
  241. package/tests/text-wrapping.test.mjs +0 -33
  242. package/tests/tool-count.test.mjs +0 -81
  243. package/tests/ui-format.test.mjs +0 -39
  244. package/tests/ui-state.test.mjs +0 -72
@@ -0,0 +1,523 @@
1
+ /**
2
+ * CodeMie Native Agent Implementation
3
+ *
4
+ * Core LangGraph ReAct agent using LangChain v1.0+ with streaming support
5
+ */
6
+ import { createReactAgent } from '@langchain/langgraph/prebuilt';
7
+ import { ChatOpenAI } from '@langchain/openai';
8
+ import { ChatAnthropic } from '@langchain/anthropic';
9
+ import { HumanMessage } from '@langchain/core/messages';
10
+ import { getSystemPrompt } from './prompts.js';
11
+ import { CodeMieAgentError } from './types.js';
12
+ import { extractToolMetadata } from './toolMetadata.js';
13
+ import { extractTokenUsageFromStreamChunk, extractTokenUsageFromFinalState } from './tokenUtils.js';
14
+ export class CodeMieAgent {
15
+ agent;
16
+ config;
17
+ tools;
18
+ conversationHistory = [];
19
+ toolCallArgs = new Map(); // Store tool args by tool call ID
20
+ currentExecutionSteps = [];
21
+ currentStepNumber = 0;
22
+ currentLLMTokenUsage = null; // Store token usage for associating with next tool call
23
+ isFirstLLMCall = true; // Track if this is the initial user input processing
24
+ stats = {
25
+ inputTokens: 0,
26
+ outputTokens: 0,
27
+ cachedTokens: 0,
28
+ totalTokens: 0,
29
+ estimatedTotalCost: 0,
30
+ executionTime: 0,
31
+ toolCalls: 0,
32
+ successfulTools: 0,
33
+ failedTools: 0,
34
+ llmCalls: 0,
35
+ executionSteps: []
36
+ };
37
+ constructor(config, tools) {
38
+ this.config = config;
39
+ this.tools = tools;
40
+ // Create the appropriate LLM based on provider
41
+ const llm = this.createLLM();
42
+ // Create LangGraph ReAct agent with system prompt
43
+ this.agent = createReactAgent({
44
+ llm,
45
+ tools: this.tools,
46
+ messageModifier: getSystemPrompt(config.workingDirectory)
47
+ });
48
+ if (config.debug) {
49
+ console.log(`[DEBUG] CodeMie Agent initialized with ${tools.length} tools`);
50
+ }
51
+ }
52
+ /**
53
+ * Create the appropriate LLM instance based on provider configuration
54
+ */
55
+ createLLM() {
56
+ const commonConfig = {
57
+ temperature: 0.7,
58
+ maxTokens: 4096,
59
+ timeout: this.config.timeout * 1000
60
+ };
61
+ switch (this.config.provider) {
62
+ case 'anthropic':
63
+ return new ChatAnthropic({
64
+ model: this.config.model,
65
+ apiKey: this.config.authToken,
66
+ // Note: Custom baseUrl not currently supported in ChatAnthropic
67
+ ...commonConfig
68
+ });
69
+ case 'openai':
70
+ return new ChatOpenAI({
71
+ model: this.config.model,
72
+ apiKey: this.config.authToken,
73
+ configuration: {
74
+ ...(this.config.baseUrl !== 'https://api.openai.com/v1' && {
75
+ baseURL: this.config.baseUrl
76
+ })
77
+ },
78
+ ...commonConfig
79
+ });
80
+ case 'azure':
81
+ return new ChatOpenAI({
82
+ model: this.config.model,
83
+ apiKey: this.config.authToken,
84
+ configuration: {
85
+ baseURL: this.config.baseUrl,
86
+ defaultQuery: { 'api-version': '2024-02-01' }
87
+ },
88
+ ...commonConfig
89
+ });
90
+ case 'bedrock':
91
+ // For Bedrock, we'll use Anthropic format but with special configuration
92
+ // Note: Bedrock configuration may need special handling
93
+ return new ChatAnthropic({
94
+ model: this.config.model,
95
+ apiKey: this.config.authToken,
96
+ // baseUrl not supported in ChatAnthropic - will handle differently in future
97
+ ...commonConfig
98
+ });
99
+ case 'litellm':
100
+ // LiteLLM proxy - use OpenAI format as it's most compatible
101
+ return new ChatOpenAI({
102
+ model: this.config.model,
103
+ apiKey: this.config.authToken,
104
+ configuration: {
105
+ baseURL: this.config.baseUrl
106
+ },
107
+ ...commonConfig
108
+ });
109
+ default:
110
+ throw new CodeMieAgentError(`Unsupported provider: ${this.config.provider}`, 'INVALID_PROVIDER', { provider: this.config.provider });
111
+ }
112
+ }
113
+ /**
114
+ * Create a HumanMessage with optional image support (multiple images)
115
+ */
116
+ createHumanMessage(text, images = []) {
117
+ if (images.length === 0) {
118
+ // Text-only message
119
+ return new HumanMessage(text);
120
+ }
121
+ // Multimodal message with images
122
+ const content = [
123
+ {
124
+ type: "text",
125
+ text: text
126
+ }
127
+ ];
128
+ // Add all images to the content
129
+ for (const image of images) {
130
+ content.push({
131
+ type: "image_url",
132
+ image_url: `data:${image.mimeType};base64,${image.data}`
133
+ });
134
+ }
135
+ return new HumanMessage({
136
+ content: content
137
+ });
138
+ }
139
+ /**
140
+ * Stream a chat interaction with the agent
141
+ */
142
+ async chatStream(message, onEvent, images = []) {
143
+ const startTime = Date.now();
144
+ let currentToolCall = null;
145
+ let currentStep = null;
146
+ // Reset execution steps for new conversation
147
+ this.currentExecutionSteps = [];
148
+ this.currentStepNumber = 0;
149
+ this.isFirstLLMCall = true;
150
+ try {
151
+ if (this.config.debug) {
152
+ console.log(`[DEBUG] Processing message: ${message.substring(0, 100)}...`);
153
+ }
154
+ // Add user message to conversation history (with optional images)
155
+ const userMessage = this.createHumanMessage(message, images);
156
+ this.conversationHistory.push(userMessage);
157
+ // Notify start of thinking
158
+ onEvent({ type: 'thinking_start' });
159
+ // Start the first LLM call step
160
+ currentStep = this.startLLMStep();
161
+ // Create the stream with conversation history
162
+ const stream = await this.agent.stream({ messages: this.conversationHistory }, {
163
+ streamMode: 'updates',
164
+ recursionLimit: 50
165
+ });
166
+ let hasContent = false;
167
+ // Process stream chunks
168
+ for await (const chunk of stream) {
169
+ // Try to extract token usage from stream chunk
170
+ const tokenUsage = extractTokenUsageFromStreamChunk(chunk, this.config.model, this.config.provider);
171
+ if (tokenUsage && currentStep && currentStep.type === 'llm_call') {
172
+ // Update current step with token usage
173
+ currentStep.tokenUsage = tokenUsage;
174
+ this.updateStatsWithTokenUsage(tokenUsage);
175
+ // Store token usage to associate with next tool call
176
+ this.currentLLMTokenUsage = tokenUsage;
177
+ if (this.config.debug) {
178
+ console.log(`[DEBUG] Token usage: ${tokenUsage.inputTokens} in, ${tokenUsage.outputTokens} out`);
179
+ }
180
+ }
181
+ this.processStreamChunk(chunk, onEvent, (toolStarted) => {
182
+ if (toolStarted) {
183
+ // Complete current LLM step if it exists
184
+ if (currentStep && currentStep.type === 'llm_call') {
185
+ this.completeStep(currentStep);
186
+ currentStep = null;
187
+ }
188
+ // Start tool execution step
189
+ currentStep = this.startToolStep(toolStarted);
190
+ currentToolCall = toolStarted;
191
+ this.stats.toolCalls++;
192
+ }
193
+ else if (currentToolCall && currentStep) {
194
+ // Complete tool step
195
+ currentStep.toolSuccess = true;
196
+ this.completeStep(currentStep);
197
+ currentStep = null;
198
+ this.stats.successfulTools++;
199
+ currentToolCall = null;
200
+ // Start new LLM step for next reasoning cycle (processing tool result)
201
+ currentStep = this.startLLMStep();
202
+ }
203
+ });
204
+ // Check if we have content
205
+ if (chunk.agent?.messages) {
206
+ const lastMessage = chunk.agent.messages.at(-1);
207
+ if (lastMessage?.content && !hasContent) {
208
+ hasContent = true;
209
+ }
210
+ }
211
+ }
212
+ // Complete any remaining step
213
+ if (currentStep) {
214
+ this.completeStep(currentStep);
215
+ }
216
+ // Update conversation history with final messages and try to extract any missed token usage
217
+ try {
218
+ const finalState = await this.agent.getState();
219
+ if (finalState?.messages) {
220
+ this.conversationHistory = finalState.messages;
221
+ // Try to extract token usage from final state if we missed it during streaming
222
+ const finalTokenUsage = extractTokenUsageFromFinalState(finalState, this.config.model, this.config.provider);
223
+ if (finalTokenUsage && this.currentExecutionSteps.length > 0) {
224
+ // Find the last LLM step that doesn't have token usage
225
+ for (let i = this.currentExecutionSteps.length - 1; i >= 0; i--) {
226
+ const step = this.currentExecutionSteps[i];
227
+ if (step.type === 'llm_call' && !step.tokenUsage) {
228
+ step.tokenUsage = finalTokenUsage;
229
+ this.updateStatsWithTokenUsage(finalTokenUsage);
230
+ break;
231
+ }
232
+ }
233
+ }
234
+ }
235
+ }
236
+ catch {
237
+ // If getState fails, continue without updating history
238
+ if (this.config.debug) {
239
+ console.log('[DEBUG] Could not get final state, continuing...');
240
+ }
241
+ }
242
+ // Finalize execution statistics
243
+ this.stats.executionTime = Date.now() - startTime;
244
+ this.stats.executionSteps = [...this.currentExecutionSteps];
245
+ // Notify thinking end and completion
246
+ onEvent({ type: 'thinking_end' });
247
+ onEvent({ type: 'complete' });
248
+ if (this.config.debug) {
249
+ console.log(`[DEBUG] Agent completed in ${this.stats.executionTime}ms`);
250
+ console.log(`[DEBUG] Total tokens: ${this.stats.totalTokens} (${this.stats.inputTokens} in, ${this.stats.outputTokens} out)`);
251
+ console.log(`[DEBUG] Estimated cost: $${this.stats.estimatedTotalCost.toFixed(4)}`);
252
+ }
253
+ }
254
+ catch (error) {
255
+ this.stats.executionTime = Date.now() - startTime;
256
+ if (currentToolCall) {
257
+ this.stats.failedTools++;
258
+ }
259
+ const errorMessage = error instanceof Error ? error.message : String(error);
260
+ if (this.config.debug) {
261
+ console.error(`[DEBUG] Agent error:`, error);
262
+ }
263
+ onEvent({
264
+ type: 'error',
265
+ error: errorMessage
266
+ });
267
+ throw new CodeMieAgentError(`Agent execution failed: ${errorMessage}`, 'EXECUTION_ERROR', { originalError: error, stats: this.stats });
268
+ }
269
+ }
270
+ /**
271
+ * Process individual stream chunks from LangGraph
272
+ */
273
+ processStreamChunk(chunk, onEvent, onToolEvent) {
274
+ try {
275
+ // Handle agent node updates (LLM responses)
276
+ if (chunk.agent?.messages) {
277
+ const messages = chunk.agent.messages;
278
+ const lastMessage = messages[messages.length - 1];
279
+ // Stream content chunks
280
+ if (lastMessage?.content && typeof lastMessage.content === 'string') {
281
+ onEvent({
282
+ type: 'content_chunk',
283
+ content: lastMessage.content
284
+ });
285
+ }
286
+ // Handle tool calls
287
+ if (lastMessage?.tool_calls && lastMessage.tool_calls.length > 0) {
288
+ for (const toolCall of lastMessage.tool_calls) {
289
+ // Store tool args for later use in result processing
290
+ // Use tool name as key since LangGraph may not preserve IDs consistently
291
+ this.toolCallArgs.set(toolCall.name, toolCall.args);
292
+ onEvent({
293
+ type: 'tool_call_start',
294
+ toolName: toolCall.name,
295
+ toolArgs: toolCall.args
296
+ });
297
+ if (onToolEvent) {
298
+ onToolEvent(toolCall.name);
299
+ }
300
+ }
301
+ }
302
+ }
303
+ // Handle tool node updates (tool execution results)
304
+ if (chunk.tools?.messages) {
305
+ const messages = chunk.tools.messages;
306
+ for (const toolMessage of messages) {
307
+ const toolName = toolMessage.name || 'unknown';
308
+ const result = toolMessage.content || '';
309
+ // Get the stored tool args for this tool name
310
+ const toolArgs = this.toolCallArgs.get(toolName);
311
+ if (toolArgs) {
312
+ this.toolCallArgs.delete(toolName); // Clean up after use
313
+ }
314
+ // Extract enhanced metadata from the tool result
315
+ let toolMetadata = extractToolMetadata(toolName, result, toolArgs);
316
+ // Associate token usage from the LLM call that triggered this tool
317
+ if (toolMetadata && this.currentLLMTokenUsage) {
318
+ toolMetadata = {
319
+ ...toolMetadata,
320
+ tokenUsage: this.currentLLMTokenUsage
321
+ };
322
+ // Clear the stored token usage after associating it
323
+ this.currentLLMTokenUsage = null;
324
+ }
325
+ onEvent({
326
+ type: 'tool_call_result',
327
+ toolName,
328
+ result,
329
+ toolMetadata
330
+ });
331
+ if (onToolEvent) {
332
+ onToolEvent(); // Signal tool completion
333
+ }
334
+ }
335
+ }
336
+ }
337
+ catch (error) {
338
+ if (this.config.debug) {
339
+ console.error(`[DEBUG] Error processing stream chunk:`, error);
340
+ }
341
+ // Don't throw here, just log - let the main stream continue
342
+ onEvent({
343
+ type: 'error',
344
+ error: `Stream processing error: ${error instanceof Error ? error.message : String(error)}`
345
+ });
346
+ }
347
+ }
348
+ /**
349
+ * Execute a single message without streaming (for non-interactive use)
350
+ */
351
+ async executeMessage(message) {
352
+ return new Promise((resolve, reject) => {
353
+ let response = '';
354
+ let hasError = false;
355
+ this.chatStream(message, (event) => {
356
+ switch (event.type) {
357
+ case 'content_chunk':
358
+ response += event.content || '';
359
+ break;
360
+ case 'complete':
361
+ if (!hasError) {
362
+ resolve(response.trim());
363
+ }
364
+ break;
365
+ case 'error':
366
+ hasError = true;
367
+ reject(new Error(event.error));
368
+ break;
369
+ }
370
+ }).catch(reject);
371
+ });
372
+ }
373
+ /**
374
+ * Clear conversation history
375
+ */
376
+ clearHistory() {
377
+ this.conversationHistory = [];
378
+ this.toolCallArgs.clear(); // Clear stored tool args
379
+ this.currentExecutionSteps = [];
380
+ this.currentStepNumber = 0;
381
+ this.currentLLMTokenUsage = null;
382
+ this.isFirstLLMCall = true;
383
+ // Reset stats
384
+ this.stats = {
385
+ inputTokens: 0,
386
+ outputTokens: 0,
387
+ cachedTokens: 0,
388
+ totalTokens: 0,
389
+ estimatedTotalCost: 0,
390
+ executionTime: 0,
391
+ toolCalls: 0,
392
+ successfulTools: 0,
393
+ failedTools: 0,
394
+ llmCalls: 0,
395
+ executionSteps: []
396
+ };
397
+ if (this.config.debug) {
398
+ console.log('[DEBUG] Conversation history cleared');
399
+ }
400
+ }
401
+ /**
402
+ * Get current conversation history
403
+ */
404
+ getHistory() {
405
+ return [...this.conversationHistory];
406
+ }
407
+ /**
408
+ * Get agent runtime statistics
409
+ */
410
+ getStats() {
411
+ return { ...this.stats };
412
+ }
413
+ /**
414
+ * Get available tools
415
+ */
416
+ getTools() {
417
+ return [...this.tools];
418
+ }
419
+ /**
420
+ * Get agent configuration
421
+ */
422
+ getConfig() {
423
+ // Return sanitized config (without sensitive data)
424
+ return {
425
+ ...this.config,
426
+ authToken: `${this.config.authToken.substring(0, 8)}***`
427
+ };
428
+ }
429
+ /**
430
+ * Health check for the agent
431
+ */
432
+ async healthCheck() {
433
+ try {
434
+ // Simple test message
435
+ await this.executeMessage('Hello, can you confirm you are working?');
436
+ return {
437
+ status: 'healthy',
438
+ provider: this.config.provider,
439
+ model: this.config.model,
440
+ toolCount: this.tools.length
441
+ };
442
+ }
443
+ catch (error) {
444
+ return {
445
+ status: 'unhealthy',
446
+ provider: this.config.provider,
447
+ model: this.config.model,
448
+ toolCount: this.tools.length,
449
+ error: error instanceof Error ? error.message : String(error)
450
+ };
451
+ }
452
+ }
453
+ /**
454
+ * Start a new LLM call step
455
+ */
456
+ startLLMStep() {
457
+ // Determine the context based on whether this is the first call and if we just had a tool execution
458
+ let llmContext;
459
+ if (this.isFirstLLMCall) {
460
+ llmContext = 'initial_input';
461
+ this.isFirstLLMCall = false;
462
+ }
463
+ else {
464
+ // Check if the previous step was a tool execution
465
+ const prevStep = this.currentExecutionSteps[this.currentExecutionSteps.length - 1];
466
+ llmContext = (prevStep?.type === 'tool_execution') ? 'processing_tool_result' : 'final_response';
467
+ }
468
+ const step = {
469
+ stepNumber: ++this.currentStepNumber,
470
+ type: 'llm_call',
471
+ startTime: Date.now(),
472
+ llmContext
473
+ };
474
+ this.currentExecutionSteps.push(step);
475
+ this.stats.llmCalls++;
476
+ if (this.config.debug) {
477
+ console.log(`[DEBUG] Started LLM step ${step.stepNumber} (${llmContext})`);
478
+ }
479
+ return step;
480
+ }
481
+ /**
482
+ * Start a new tool execution step
483
+ */
484
+ startToolStep(toolName) {
485
+ const step = {
486
+ stepNumber: ++this.currentStepNumber,
487
+ type: 'tool_execution',
488
+ startTime: Date.now(),
489
+ toolName
490
+ };
491
+ this.currentExecutionSteps.push(step);
492
+ if (this.config.debug) {
493
+ console.log(`[DEBUG] Started tool step ${step.stepNumber}: ${toolName}`);
494
+ }
495
+ return step;
496
+ }
497
+ /**
498
+ * Complete an execution step
499
+ */
500
+ completeStep(step) {
501
+ step.endTime = Date.now();
502
+ step.duration = step.endTime - step.startTime;
503
+ if (this.config.debug) {
504
+ const type = step.type === 'llm_call' ? 'LLM' : `Tool (${step.toolName})`;
505
+ console.log(`[DEBUG] Completed ${type} step ${step.stepNumber} in ${step.duration}ms`);
506
+ }
507
+ }
508
+ /**
509
+ * Update aggregate statistics with token usage
510
+ */
511
+ updateStatsWithTokenUsage(tokenUsage) {
512
+ this.stats.inputTokens += tokenUsage.inputTokens;
513
+ this.stats.outputTokens += tokenUsage.outputTokens;
514
+ if (tokenUsage.cachedTokens) {
515
+ this.stats.cachedTokens += tokenUsage.cachedTokens;
516
+ }
517
+ this.stats.totalTokens = this.stats.inputTokens + this.stats.outputTokens;
518
+ if (tokenUsage.estimatedCost) {
519
+ this.stats.estimatedTotalCost += tokenUsage.estimatedCost;
520
+ }
521
+ }
522
+ }
523
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../src/agents/codemie-code/agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Configuration Management for CodeMie Native Agent
3
+ *
4
+ * Integrates with the existing CodeMie configuration system while providing
5
+ * agent-specific configuration loading and validation.
6
+ */
7
+ import { type CodeMieConfigOptions } from '../../utils/config-loader.js';
8
+ import type { CodeMieConfig, ProviderConfig } from './types.js';
9
+ /**
10
+ * Load and validate configuration for the CodeMie native agent
11
+ */
12
+ export declare function loadCodeMieConfig(workingDir?: string, cliOverrides?: Partial<CodeMieConfigOptions>): Promise<CodeMieConfig>;
13
+ /**
14
+ * Get provider-specific environment variables for the agent
15
+ */
16
+ export declare function getProviderEnvVars(config: CodeMieConfig): Record<string, string>;
17
+ /**
18
+ * Create provider-specific configuration
19
+ */
20
+ export declare function createProviderConfig(config: CodeMieConfig): ProviderConfig[keyof ProviderConfig];
21
+ /**
22
+ * Get configuration summary for display
23
+ */
24
+ export declare function getConfigSummary(config: CodeMieConfig): string;
25
+ /**
26
+ * Check if configuration is valid without throwing
27
+ */
28
+ export declare function isConfigValid(workingDir?: string): Promise<boolean>;
29
+ /**
30
+ * Get configuration status for health checks
31
+ */
32
+ export declare function getConfigStatus(workingDir?: string): Promise<{
33
+ valid: boolean;
34
+ hasGlobalConfig: boolean;
35
+ hasProjectConfig: boolean;
36
+ provider?: string;
37
+ model?: string;
38
+ error?: string;
39
+ }>;
40
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/agents/codemie-code/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAgB,KAAK,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACvF,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGhE;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAC3C,OAAO,CAAC,aAAa,CAAC,CA6BxB;AAsJD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAShF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,GAAG,cAAc,CAAC,MAAM,cAAc,CAAC,CAwChG;AAiBD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAU9D;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOzE;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAClE,KAAK,EAAE,OAAO,CAAC;IACf,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CA0BD"}