@codemieai/code 0.0.2 → 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.
- package/CLAUDE.md +130 -760
- package/README.md +283 -695
- package/bin/codemie-claude.js +122 -0
- package/bin/codemie-code.js +90 -15
- package/bin/codemie-codex.js +138 -0
- package/bin/codemie.js +1 -1
- package/config.example.json +10 -0
- package/dist/agents/adapters/claude-code.d.ts +2 -2
- package/dist/agents/adapters/claude-code.d.ts.map +1 -1
- package/dist/agents/adapters/claude-code.js +20 -42
- package/dist/agents/adapters/claude-code.js.map +1 -1
- package/dist/agents/adapters/codemie-code.d.ts +11 -2
- package/dist/agents/adapters/codemie-code.d.ts.map +1 -1
- package/dist/agents/adapters/codemie-code.js +93 -25
- package/dist/agents/adapters/codemie-code.js.map +1 -1
- package/dist/agents/adapters/codex.d.ts +2 -2
- package/dist/agents/adapters/codex.d.ts.map +1 -1
- package/dist/agents/adapters/codex.js +31 -24
- package/dist/agents/adapters/codex.js.map +1 -1
- package/dist/agents/codemie-code/agent.d.ts +89 -0
- package/dist/agents/codemie-code/agent.d.ts.map +1 -0
- package/dist/agents/codemie-code/agent.js +523 -0
- package/dist/agents/codemie-code/agent.js.map +1 -0
- package/dist/agents/codemie-code/config.d.ts +40 -0
- package/dist/agents/codemie-code/config.d.ts.map +1 -0
- package/dist/agents/codemie-code/config.js +276 -0
- package/dist/agents/codemie-code/config.js.map +1 -0
- package/dist/agents/codemie-code/filters.d.ts +91 -0
- package/dist/agents/codemie-code/filters.d.ts.map +1 -0
- package/dist/agents/codemie-code/filters.js +328 -0
- package/dist/agents/codemie-code/filters.js.map +1 -0
- package/dist/agents/codemie-code/index.d.ts +78 -0
- package/dist/agents/codemie-code/index.d.ts.map +1 -0
- package/dist/agents/codemie-code/index.js +259 -0
- package/dist/agents/codemie-code/index.js.map +1 -0
- package/dist/agents/codemie-code/prompts.d.ts +11 -0
- package/dist/agents/codemie-code/prompts.d.ts.map +1 -0
- package/dist/agents/codemie-code/prompts.js +31 -0
- package/dist/agents/codemie-code/prompts.js.map +1 -0
- package/dist/agents/codemie-code/streaming/events.d.ts +7 -0
- package/dist/agents/codemie-code/streaming/events.d.ts.map +1 -0
- package/dist/agents/codemie-code/streaming/events.js +7 -0
- package/dist/agents/codemie-code/streaming/events.js.map +1 -0
- package/dist/agents/codemie-code/streaming/formatter.d.ts +2 -0
- package/dist/agents/codemie-code/streaming/formatter.d.ts.map +1 -0
- package/dist/agents/codemie-code/streaming/formatter.js +2 -0
- package/dist/agents/codemie-code/streaming/formatter.js.map +1 -0
- package/dist/agents/codemie-code/streaming/ui.d.ts +2 -0
- package/dist/agents/codemie-code/streaming/ui.d.ts.map +1 -0
- package/dist/agents/codemie-code/streaming/ui.js +2 -0
- package/dist/agents/codemie-code/streaming/ui.js.map +1 -0
- package/dist/agents/codemie-code/tokenUtils.d.ts +108 -0
- package/dist/agents/codemie-code/tokenUtils.d.ts.map +1 -0
- package/dist/agents/codemie-code/tokenUtils.js +220 -0
- package/dist/agents/codemie-code/tokenUtils.js.map +1 -0
- package/dist/agents/codemie-code/toolMetadata.d.ts +15 -0
- package/dist/agents/codemie-code/toolMetadata.d.ts.map +1 -0
- package/dist/agents/codemie-code/toolMetadata.js +315 -0
- package/dist/agents/codemie-code/toolMetadata.js.map +1 -0
- package/dist/agents/codemie-code/tools/command.d.ts +2 -0
- package/dist/agents/codemie-code/tools/command.d.ts.map +1 -0
- package/dist/agents/codemie-code/tools/command.js +2 -0
- package/dist/agents/codemie-code/tools/command.js.map +1 -0
- package/dist/agents/codemie-code/tools/filesystem.d.ts +2 -0
- package/dist/agents/codemie-code/tools/filesystem.d.ts.map +1 -0
- package/dist/agents/codemie-code/tools/filesystem.js +2 -0
- package/dist/agents/codemie-code/tools/filesystem.js.map +1 -0
- package/dist/agents/codemie-code/tools/git.d.ts +2 -0
- package/dist/agents/codemie-code/tools/git.d.ts.map +1 -0
- package/dist/agents/codemie-code/tools/git.js +2 -0
- package/dist/agents/codemie-code/tools/git.js.map +1 -0
- package/dist/agents/codemie-code/tools/index.d.ts +19 -0
- package/dist/agents/codemie-code/tools/index.d.ts.map +1 -0
- package/dist/agents/codemie-code/tools/index.js +239 -0
- package/dist/agents/codemie-code/tools/index.js.map +1 -0
- package/dist/agents/codemie-code/tools/security.d.ts +2 -0
- package/dist/agents/codemie-code/tools/security.d.ts.map +1 -0
- package/dist/agents/codemie-code/tools/security.js +2 -0
- package/dist/agents/codemie-code/tools/security.js.map +1 -0
- package/dist/agents/codemie-code/types.d.ts +254 -0
- package/dist/agents/codemie-code/types.d.ts.map +1 -0
- package/dist/agents/codemie-code/types.js +35 -0
- package/dist/agents/codemie-code/types.js.map +1 -0
- package/dist/agents/codemie-code/ui.d.ts +83 -0
- package/dist/agents/codemie-code/ui.d.ts.map +1 -0
- package/dist/agents/codemie-code/ui.js +624 -0
- package/dist/agents/codemie-code/ui.js.map +1 -0
- package/dist/agents/registry.d.ts +1 -1
- package/dist/agents/registry.d.ts.map +1 -1
- package/dist/agents/registry.js +7 -13
- package/dist/agents/registry.js.map +1 -1
- package/dist/cli/commands/config.d.ts +3 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +323 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +113 -69
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/env.d.ts +3 -0
- package/dist/cli/commands/env.d.ts.map +1 -0
- package/dist/cli/commands/env.js +19 -0
- package/dist/cli/commands/env.js.map +1 -0
- package/dist/cli/commands/install.js +27 -33
- package/dist/cli/commands/install.js.map +1 -1
- package/dist/cli/commands/list.js +18 -24
- package/dist/cli/commands/list.js.map +1 -1
- package/dist/cli/commands/run.d.ts.map +1 -1
- package/dist/cli/commands/run.js +291 -31
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/setup.d.ts +3 -0
- package/dist/cli/commands/setup.d.ts.map +1 -0
- package/dist/cli/commands/setup.js +357 -0
- package/dist/cli/commands/setup.js.map +1 -0
- package/dist/cli/commands/uninstall.js +24 -30
- package/dist/cli/commands/uninstall.js.map +1 -1
- package/dist/cli/commands/version.d.ts.map +1 -1
- package/dist/cli/commands/version.js +11 -16
- package/dist/cli/commands/version.js.map +1 -1
- package/dist/cli/index.js +47 -31
- package/dist/cli/index.js.map +1 -1
- package/dist/env/manager.js +9 -46
- package/dist/env/manager.js.map +1 -1
- package/dist/index.d.ts +6 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -43
- package/dist/index.js.map +1 -1
- package/dist/utils/async-tips.d.ts.map +1 -1
- package/dist/utils/async-tips.js +16 -55
- package/dist/utils/async-tips.js.map +1 -1
- package/dist/utils/clipboard.d.ts +16 -0
- package/dist/utils/clipboard.d.ts.map +1 -0
- package/dist/utils/clipboard.js +179 -0
- package/dist/utils/clipboard.js.map +1 -0
- package/dist/utils/config-loader.d.ts +96 -0
- package/dist/utils/config-loader.d.ts.map +1 -0
- package/dist/utils/config-loader.js +351 -0
- package/dist/utils/config-loader.js.map +1 -0
- package/dist/utils/dirname.d.ts +7 -0
- package/dist/utils/dirname.d.ts.map +1 -0
- package/dist/utils/dirname.js +11 -0
- package/dist/utils/dirname.js.map +1 -0
- package/dist/utils/errors.js +7 -17
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/exec.js +3 -6
- package/dist/utils/exec.js.map +1 -1
- package/dist/utils/first-time.d.ts +34 -0
- package/dist/utils/first-time.d.ts.map +1 -0
- package/dist/utils/first-time.js +245 -0
- package/dist/utils/first-time.js.map +1 -0
- package/dist/utils/health-checker.d.ts +20 -0
- package/dist/utils/health-checker.d.ts.map +1 -0
- package/dist/utils/health-checker.js +168 -0
- package/dist/utils/health-checker.js.map +1 -0
- package/dist/utils/logger.js +12 -18
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/model-fetcher.d.ts +21 -0
- package/dist/utils/model-fetcher.d.ts.map +1 -0
- package/dist/utils/model-fetcher.js +137 -0
- package/dist/utils/model-fetcher.js.map +1 -0
- package/dist/utils/tips.d.ts.map +1 -1
- package/dist/utils/tips.js +13 -52
- package/dist/utils/tips.js.map +1 -1
- package/package.json +17 -23
- package/scripts/README.md +80 -0
- package/scripts/release.sh +156 -0
- package/dist/agents/adapters/aider.d.ts +0 -12
- package/dist/agents/adapters/aider.d.ts.map +0 -1
- package/dist/agents/adapters/aider.js +0 -80
- package/dist/agents/adapters/aider.js.map +0 -1
- package/dist/cli/cli.d.ts +0 -4
- package/dist/cli/cli.d.ts.map +0 -1
- package/dist/cli/cli.js +0 -107
- package/dist/cli/cli.js.map +0 -1
- package/dist/cli/commands/mcp.d.ts +0 -3
- package/dist/cli/commands/mcp.d.ts.map +0 -1
- package/dist/cli/commands/mcp.js +0 -459
- package/dist/cli/commands/mcp.js.map +0 -1
- package/dist/code/agent-events.d.ts +0 -39
- package/dist/code/agent-events.d.ts.map +0 -1
- package/dist/code/agent-events.js +0 -4
- package/dist/code/agent-events.js.map +0 -1
- package/dist/code/agent.d.ts +0 -19
- package/dist/code/agent.d.ts.map +0 -1
- package/dist/code/agent.js +0 -144
- package/dist/code/agent.js.map +0 -1
- package/dist/code/config.d.ts +0 -13
- package/dist/code/config.d.ts.map +0 -1
- package/dist/code/config.js +0 -41
- package/dist/code/config.js.map +0 -1
- package/dist/code/index.d.ts +0 -19
- package/dist/code/index.d.ts.map +0 -1
- package/dist/code/index.js +0 -400
- package/dist/code/index.js.map +0 -1
- package/dist/code/prompts.d.ts +0 -2
- package/dist/code/prompts.d.ts.map +0 -1
- package/dist/code/prompts.js +0 -45
- package/dist/code/prompts.js.map +0 -1
- package/dist/code/tools/command.d.ts +0 -8
- package/dist/code/tools/command.d.ts.map +0 -1
- package/dist/code/tools/command.js +0 -83
- package/dist/code/tools/command.js.map +0 -1
- package/dist/code/tools/diff-utils.d.ts +0 -2
- package/dist/code/tools/diff-utils.d.ts.map +0 -1
- package/dist/code/tools/diff-utils.js +0 -45
- package/dist/code/tools/diff-utils.js.map +0 -1
- package/dist/code/tools/filesystem.d.ts +0 -11
- package/dist/code/tools/filesystem.d.ts.map +0 -1
- package/dist/code/tools/filesystem.js +0 -442
- package/dist/code/tools/filesystem.js.map +0 -1
- package/dist/code/tools/git.d.ts +0 -7
- package/dist/code/tools/git.d.ts.map +0 -1
- package/dist/code/tools/git.js +0 -111
- package/dist/code/tools/git.js.map +0 -1
- package/dist/code/tools/mcp.d.ts +0 -13
- package/dist/code/tools/mcp.d.ts.map +0 -1
- package/dist/code/tools/mcp.js +0 -230
- package/dist/code/tools/mcp.js.map +0 -1
- package/dist/data/tips.json +0 -118
- package/dist/ui/terminal-ui.d.ts +0 -73
- package/dist/ui/terminal-ui.d.ts.map +0 -1
- package/dist/ui/terminal-ui.js +0 -900
- package/dist/ui/terminal-ui.js.map +0 -1
- package/dist/utils/env-mapper.d.ts +0 -40
- package/dist/utils/env-mapper.d.ts.map +0 -1
- package/dist/utils/env-mapper.js +0 -122
- package/dist/utils/env-mapper.js.map +0 -1
- package/docs/USER_GUIDE.md +0 -573
- package/tests/agent-direct.test.mjs +0 -45
- package/tests/agent-output.test.mjs +0 -64
- package/tests/codemie-code.test.mjs +0 -42
- package/tests/context7-only.test.mjs +0 -42
- package/tests/conversation-flow.test.mjs +0 -63
- package/tests/interactive-simulation.test.mjs +0 -60
- package/tests/live-output.test.mjs +0 -53
- package/tests/mcp-context7.test.mjs +0 -105
- package/tests/mcp-e2e.test.mjs +0 -109
- package/tests/mcp-time-server.test.mjs +0 -58
- package/tests/streaming.test.mjs +0 -57
- package/tests/test-helpers.mjs +0 -94
- package/tests/text-wrapping.test.mjs +0 -33
- package/tests/tool-count.test.mjs +0 -81
- package/tests/ui-format.test.mjs +0 -39
- package/tests/ui-state.test.mjs +0 -72
package/dist/code/agent.js
DELETED
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.CodeMieAgent = void 0;
|
|
4
|
-
const openai_1 = require("@langchain/openai");
|
|
5
|
-
const messages_1 = require("@langchain/core/messages");
|
|
6
|
-
const prebuilt_1 = require("@langchain/langgraph/prebuilt");
|
|
7
|
-
const prompts_js_1 = require("./prompts.js");
|
|
8
|
-
const errors_js_1 = require("../utils/errors.js");
|
|
9
|
-
class CodeMieAgent {
|
|
10
|
-
model;
|
|
11
|
-
tools;
|
|
12
|
-
agent;
|
|
13
|
-
conversationHistory = [];
|
|
14
|
-
constructor(config, tools) {
|
|
15
|
-
this.tools = tools;
|
|
16
|
-
// Initialize AI model for OpenAI-compatible endpoints (LiteLLM proxy, etc.)
|
|
17
|
-
this.model = new openai_1.ChatOpenAI({
|
|
18
|
-
model: config.model,
|
|
19
|
-
apiKey: config.authToken, // Changed from openAIApiKey to apiKey for LangChain 1.x
|
|
20
|
-
configuration: {
|
|
21
|
-
baseURL: config.baseUrl,
|
|
22
|
-
},
|
|
23
|
-
maxTokens: 4096,
|
|
24
|
-
temperature: 0.7,
|
|
25
|
-
maxRetries: 2,
|
|
26
|
-
timeout: config.timeout * 1000
|
|
27
|
-
});
|
|
28
|
-
// Override the default invocation params to remove top_p
|
|
29
|
-
// This prevents Bedrock errors about both temperature and top_p being set
|
|
30
|
-
const originalInvocationParams = this.model.invocationParams.bind(this.model);
|
|
31
|
-
this.model.invocationParams = function (options) {
|
|
32
|
-
const params = originalInvocationParams(options);
|
|
33
|
-
// Remove top_p if present to avoid Bedrock conflicts
|
|
34
|
-
if ('top_p' in params) {
|
|
35
|
-
delete params.top_p;
|
|
36
|
-
}
|
|
37
|
-
return params;
|
|
38
|
-
};
|
|
39
|
-
// Create LangGraph ReAct agent (matches Python implementation)
|
|
40
|
-
this.agent = (0, prebuilt_1.createReactAgent)({
|
|
41
|
-
llm: this.model,
|
|
42
|
-
tools: this.tools,
|
|
43
|
-
messageModifier: prompts_js_1.SYSTEM_PROMPT
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
async chat(userMessage) {
|
|
47
|
-
// Add user message to history
|
|
48
|
-
this.conversationHistory.push(new messages_1.HumanMessage(userMessage));
|
|
49
|
-
// Invoke agent with conversation history
|
|
50
|
-
const result = await this.agent.invoke({ messages: this.conversationHistory }, { recursionLimit: 200 });
|
|
51
|
-
// Extract final response from agent output
|
|
52
|
-
const messages = result.messages || [];
|
|
53
|
-
const lastMessage = messages[messages.length - 1];
|
|
54
|
-
const response = lastMessage?.content || '';
|
|
55
|
-
// Update conversation history with all messages from agent
|
|
56
|
-
this.conversationHistory = messages;
|
|
57
|
-
return response;
|
|
58
|
-
}
|
|
59
|
-
async chatStream(userMessage, onEvent, signal) {
|
|
60
|
-
// Add user message to history
|
|
61
|
-
this.conversationHistory.push(new messages_1.HumanMessage(userMessage));
|
|
62
|
-
try {
|
|
63
|
-
onEvent({ type: 'thinking_start' });
|
|
64
|
-
// Stream agent execution
|
|
65
|
-
const stream = await this.agent.stream({ messages: this.conversationHistory }, { streamMode: 'updates', recursionLimit: 200 });
|
|
66
|
-
let currentContent = '';
|
|
67
|
-
let allMessages = [];
|
|
68
|
-
for await (const chunk of stream) {
|
|
69
|
-
// Check if execution was cancelled
|
|
70
|
-
if (signal?.aborted) {
|
|
71
|
-
onEvent({ type: 'cancelled' });
|
|
72
|
-
throw new Error('Execution cancelled by user');
|
|
73
|
-
}
|
|
74
|
-
// LangGraph streams updates by node
|
|
75
|
-
// 'agent' node = model thinking/responding
|
|
76
|
-
// 'tools' node = tool execution
|
|
77
|
-
if (chunk.agent) {
|
|
78
|
-
// Agent node update
|
|
79
|
-
const messages = chunk.agent.messages || [];
|
|
80
|
-
for (const msg of messages) {
|
|
81
|
-
if (msg.content && typeof msg.content === 'string') {
|
|
82
|
-
// Stream content chunk
|
|
83
|
-
const newContent = msg.content.slice(currentContent.length);
|
|
84
|
-
if (newContent) {
|
|
85
|
-
currentContent = msg.content;
|
|
86
|
-
onEvent({ type: 'content_chunk', content: newContent });
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
// Check for tool calls
|
|
90
|
-
if (msg.tool_calls && msg.tool_calls.length > 0) {
|
|
91
|
-
for (const toolCall of msg.tool_calls) {
|
|
92
|
-
onEvent({
|
|
93
|
-
type: 'tool_call_start',
|
|
94
|
-
toolName: toolCall.name,
|
|
95
|
-
toolArgs: toolCall.args
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
allMessages.push(msg);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
if (chunk.tools) {
|
|
103
|
-
// Tool execution results
|
|
104
|
-
const messages = chunk.tools.messages || [];
|
|
105
|
-
for (const msg of messages) {
|
|
106
|
-
// Tool message contains the result
|
|
107
|
-
if (msg.content) {
|
|
108
|
-
const toolName = msg.name || 'unknown';
|
|
109
|
-
onEvent({
|
|
110
|
-
type: 'tool_call_result',
|
|
111
|
-
toolName: toolName,
|
|
112
|
-
result: msg.content
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
allMessages.push(msg);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
onEvent({ type: 'thinking_end' });
|
|
120
|
-
// Update conversation history
|
|
121
|
-
this.conversationHistory = allMessages.length > 0 ? allMessages : this.conversationHistory;
|
|
122
|
-
onEvent({ type: 'complete' });
|
|
123
|
-
}
|
|
124
|
-
catch (error) {
|
|
125
|
-
// Don't emit error event for cancellations - already handled by 'cancelled' event
|
|
126
|
-
const errorMsg = (0, errors_js_1.getErrorMessage)(error);
|
|
127
|
-
if (errorMsg !== 'Execution cancelled by user') {
|
|
128
|
-
onEvent({ type: 'error', error: errorMsg });
|
|
129
|
-
}
|
|
130
|
-
throw error; // Re-throw original error without wrapping
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
clearHistory() {
|
|
134
|
-
this.conversationHistory = [];
|
|
135
|
-
}
|
|
136
|
-
getHistory() {
|
|
137
|
-
return this.conversationHistory.map(msg => ({
|
|
138
|
-
role: msg._getType() === 'human' ? 'user' : 'assistant',
|
|
139
|
-
content: msg.content
|
|
140
|
-
}));
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
exports.CodeMieAgent = CodeMieAgent;
|
|
144
|
-
//# sourceMappingURL=agent.js.map
|
package/dist/code/agent.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/code/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/code/config.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { ModelProvider } from '../utils/env-mapper.js';
|
|
2
|
-
export interface CodeMieConfig {
|
|
3
|
-
baseUrl: string;
|
|
4
|
-
authToken: string;
|
|
5
|
-
model: string;
|
|
6
|
-
timeout: number;
|
|
7
|
-
provider: ModelProvider;
|
|
8
|
-
debug: boolean;
|
|
9
|
-
mcpServers?: string[];
|
|
10
|
-
workingDirectory: string;
|
|
11
|
-
}
|
|
12
|
-
export declare function loadConfig(workingDir?: string): CodeMieConfig;
|
|
13
|
-
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/code/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgC,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAIrF,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,aAAa,CAAC;IACxB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,aAAa,CAiC7D"}
|
package/dist/code/config.js
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.loadConfig = loadConfig;
|
|
7
|
-
const dotenv_1 = __importDefault(require("dotenv"));
|
|
8
|
-
const errors_js_1 = require("../utils/errors.js");
|
|
9
|
-
const env_mapper_js_1 = require("../utils/env-mapper.js");
|
|
10
|
-
dotenv_1.default.config();
|
|
11
|
-
function loadConfig(workingDir) {
|
|
12
|
-
// Load AI configuration from environment variables
|
|
13
|
-
// Priority: CODEMIE_* (generic) > ANTHROPIC_*/OPENAI_* (provider-specific)
|
|
14
|
-
let aiConfig;
|
|
15
|
-
try {
|
|
16
|
-
aiConfig = (0, env_mapper_js_1.loadAIConfig)();
|
|
17
|
-
}
|
|
18
|
-
catch (error) {
|
|
19
|
-
throw new errors_js_1.ConfigurationError((0, errors_js_1.getErrorMessage)(error));
|
|
20
|
-
}
|
|
21
|
-
// Detect provider from model
|
|
22
|
-
const provider = (0, env_mapper_js_1.detectProvider)(aiConfig.model);
|
|
23
|
-
// Debug mode
|
|
24
|
-
const debug = process.env.CODEMIE_DEBUG === 'true';
|
|
25
|
-
// MCP configuration
|
|
26
|
-
const mcpServersEnv = process.env.CODEMIE_MCP_SERVERS;
|
|
27
|
-
const mcpServers = mcpServersEnv ? mcpServersEnv.split(',').map(s => s.trim()) : undefined;
|
|
28
|
-
// Working directory
|
|
29
|
-
const workingDirectory = workingDir || process.cwd();
|
|
30
|
-
return {
|
|
31
|
-
baseUrl: aiConfig.baseUrl,
|
|
32
|
-
authToken: aiConfig.authToken,
|
|
33
|
-
model: aiConfig.model,
|
|
34
|
-
timeout: aiConfig.timeout || 300,
|
|
35
|
-
provider,
|
|
36
|
-
debug,
|
|
37
|
-
mcpServers,
|
|
38
|
-
workingDirectory
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
//# sourceMappingURL=config.js.map
|
package/dist/code/config.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/code/config.ts"],"names":[],"mappings":";;;;;AAiBA,gCAiCC;AAlDD,oDAA4B;AAC5B,kDAAyE;AACzE,0DAAqF;AAErF,gBAAM,CAAC,MAAM,EAAE,CAAC;AAahB,SAAgB,UAAU,CAAC,UAAmB;IAC5C,mDAAmD;IACnD,2EAA2E;IAC3E,IAAI,QAAQ,CAAC;IACb,IAAI,CAAC;QACH,QAAQ,GAAG,IAAA,4BAAY,GAAE,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,IAAI,8BAAkB,CAAC,IAAA,2BAAe,EAAC,KAAK,CAAC,CAAC,CAAC;IACvD,CAAC;IAED,6BAA6B;IAC7B,MAAM,QAAQ,GAAG,IAAA,8BAAc,EAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEhD,aAAa;IACb,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,MAAM,CAAC;IAEnD,oBAAoB;IACpB,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IACtD,MAAM,UAAU,GAAG,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE3F,oBAAoB;IACpB,MAAM,gBAAgB,GAAG,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAErD,OAAO;QACL,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,GAAG;QAChC,QAAQ;QACR,KAAK;QACL,UAAU;QACV,gBAAgB;KACjB,CAAC;AACJ,CAAC"}
|
package/dist/code/index.d.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
export declare class CodeMieCode {
|
|
2
|
-
private agent;
|
|
3
|
-
private config;
|
|
4
|
-
private mcpTools;
|
|
5
|
-
constructor(workingDir?: string);
|
|
6
|
-
initialize(options?: {
|
|
7
|
-
showTips?: boolean;
|
|
8
|
-
}): Promise<void>;
|
|
9
|
-
private performInitialization;
|
|
10
|
-
startInteractive(): Promise<void>;
|
|
11
|
-
private handleSlashCommand;
|
|
12
|
-
private loadTips;
|
|
13
|
-
chat(message: string): Promise<string>;
|
|
14
|
-
executeNonInteractive(task: string): Promise<void>;
|
|
15
|
-
private executeSlashCommand;
|
|
16
|
-
dispose(): Promise<void>;
|
|
17
|
-
static testConnection(): Promise<void>;
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=index.d.ts.map
|
package/dist/code/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/code/index.ts"],"names":[],"mappings":"AAgBA,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,QAAQ,CAAyB;gBAE7B,UAAU,CAAC,EAAE,MAAM;IAQzB,UAAU,CAAC,OAAO,GAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC,IAAI,CAAC;YAkBvD,qBAAqB;IA4C7B,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;YAqEzB,kBAAkB;IA8BhC,OAAO,CAAC,QAAQ;IAaV,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQtC,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YA2J1C,mBAAmB;IAe3B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;WAMjB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;CAe7C"}
|
package/dist/code/index.js
DELETED
|
@@ -1,400 +0,0 @@
|
|
|
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
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.CodeMieCode = void 0;
|
|
40
|
-
const filesystem_js_1 = require("./tools/filesystem.js");
|
|
41
|
-
const command_js_1 = require("./tools/command.js");
|
|
42
|
-
const git_js_1 = require("./tools/git.js");
|
|
43
|
-
const mcp_js_1 = require("./tools/mcp.js");
|
|
44
|
-
const agent_js_1 = require("./agent.js");
|
|
45
|
-
const config_js_1 = require("./config.js");
|
|
46
|
-
const logger_js_1 = require("../utils/logger.js");
|
|
47
|
-
const async_tips_js_1 = require("../utils/async-tips.js");
|
|
48
|
-
const terminal_ui_js_1 = require("../ui/terminal-ui.js");
|
|
49
|
-
const errors_js_1 = require("../utils/errors.js");
|
|
50
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
51
|
-
const fs = __importStar(require("fs"));
|
|
52
|
-
const path = __importStar(require("path"));
|
|
53
|
-
const child_process_1 = require("child_process");
|
|
54
|
-
class CodeMieCode {
|
|
55
|
-
agent = null;
|
|
56
|
-
config;
|
|
57
|
-
mcpTools = null;
|
|
58
|
-
constructor(workingDir) {
|
|
59
|
-
this.config = (0, config_js_1.loadConfig)(workingDir);
|
|
60
|
-
if (this.config.debug) {
|
|
61
|
-
logger_js_1.logger.setDebugEnabled(true);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
async initialize(options = {}) {
|
|
65
|
-
const { showTips = true } = options;
|
|
66
|
-
logger_js_1.logger.info('Initializing CodeMie Code...');
|
|
67
|
-
// Show tips during initialization only if requested
|
|
68
|
-
const initPromise = this.performInitialization();
|
|
69
|
-
if (showTips) {
|
|
70
|
-
async_tips_js_1.asyncTipDisplay.showDuring(initPromise);
|
|
71
|
-
}
|
|
72
|
-
await initPromise;
|
|
73
|
-
logger_js_1.logger.success('CodeMie Code initialized');
|
|
74
|
-
logger_js_1.logger.info(`Working directory: ${this.config.workingDirectory}`);
|
|
75
|
-
logger_js_1.logger.info(`Model: ${this.config.model} (${this.config.provider})`);
|
|
76
|
-
}
|
|
77
|
-
async performInitialization() {
|
|
78
|
-
// Collect all tools
|
|
79
|
-
const tools = [];
|
|
80
|
-
// Filesystem tools
|
|
81
|
-
const filesystemTools = new filesystem_js_1.FilesystemTools({
|
|
82
|
-
allowedDirectories: [this.config.workingDirectory]
|
|
83
|
-
});
|
|
84
|
-
tools.push(...filesystemTools.getTools());
|
|
85
|
-
logger_js_1.logger.debug(`Added ${filesystemTools.getTools().length} filesystem tools`);
|
|
86
|
-
// Command tools
|
|
87
|
-
const commandTools = new command_js_1.CommandTools({
|
|
88
|
-
allowedDirectories: [this.config.workingDirectory]
|
|
89
|
-
});
|
|
90
|
-
tools.push(...commandTools.getTools());
|
|
91
|
-
logger_js_1.logger.debug(`Added ${commandTools.getTools().length} command tools`);
|
|
92
|
-
// Git tools
|
|
93
|
-
const gitTools = new git_js_1.GitTools(this.config.workingDirectory);
|
|
94
|
-
tools.push(...gitTools.getTools());
|
|
95
|
-
logger_js_1.logger.debug(`Added ${gitTools.getTools().length} git tools`);
|
|
96
|
-
// MCP tools - always try to initialize to check for configured servers
|
|
97
|
-
// If mcpServers is undefined, MCPTools will load all available servers from config
|
|
98
|
-
// If mcpServers is an empty array, no servers will be loaded
|
|
99
|
-
// If mcpServers has values, only those specific servers will be loaded
|
|
100
|
-
try {
|
|
101
|
-
this.mcpTools = new mcp_js_1.MCPTools(this.config.workingDirectory);
|
|
102
|
-
await this.mcpTools.initialize(this.config.mcpServers);
|
|
103
|
-
const mcpToolsList = await this.mcpTools.getTools();
|
|
104
|
-
if (mcpToolsList.length > 0) {
|
|
105
|
-
tools.push(...mcpToolsList);
|
|
106
|
-
logger_js_1.logger.info(`Added ${mcpToolsList.length} MCP tools`);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
catch (error) {
|
|
110
|
-
logger_js_1.logger.warn(`Failed to initialize MCP tools: ${(0, errors_js_1.getErrorMessage)(error)}`);
|
|
111
|
-
}
|
|
112
|
-
// Create agent
|
|
113
|
-
this.agent = new agent_js_1.CodeMieAgent(this.config, tools);
|
|
114
|
-
logger_js_1.logger.info(`Total tools: ${tools.length}`);
|
|
115
|
-
}
|
|
116
|
-
async startInteractive() {
|
|
117
|
-
if (!this.agent) {
|
|
118
|
-
throw new Error('Agent not initialized. Call initialize() first.');
|
|
119
|
-
}
|
|
120
|
-
// Load tips from file
|
|
121
|
-
const tips = this.loadTips();
|
|
122
|
-
// Create terminal UI
|
|
123
|
-
const ui = new terminal_ui_js_1.TerminalUI({
|
|
124
|
-
onSubmit: async (message) => {
|
|
125
|
-
try {
|
|
126
|
-
const response = await this.agent.chat(message);
|
|
127
|
-
ui.showAssistantResponse(response);
|
|
128
|
-
}
|
|
129
|
-
catch (error) {
|
|
130
|
-
logger_js_1.logger.error('Error during conversation:', error);
|
|
131
|
-
ui.showError((0, errors_js_1.getErrorMessage)(error));
|
|
132
|
-
}
|
|
133
|
-
},
|
|
134
|
-
onSubmitStream: async (message, onEvent, abortSignal) => {
|
|
135
|
-
try {
|
|
136
|
-
await this.agent.chatStream(message, onEvent, abortSignal);
|
|
137
|
-
}
|
|
138
|
-
catch (error) {
|
|
139
|
-
// Check if error is from cancellation
|
|
140
|
-
const errorMsg = (0, errors_js_1.getErrorMessage)(error);
|
|
141
|
-
if (errorMsg === 'Execution cancelled by user') {
|
|
142
|
-
// Cancellation is already handled via event, no need to log as error
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
|
-
logger_js_1.logger.error('Error during streaming conversation:', error);
|
|
146
|
-
onEvent({ type: 'error', error: errorMsg });
|
|
147
|
-
}
|
|
148
|
-
},
|
|
149
|
-
onSlashCommand: async (command, args) => {
|
|
150
|
-
return this.handleSlashCommand(command, args);
|
|
151
|
-
},
|
|
152
|
-
onClear: () => {
|
|
153
|
-
// Clear the agent's conversation history
|
|
154
|
-
this.agent.clearHistory();
|
|
155
|
-
},
|
|
156
|
-
onExit: async () => {
|
|
157
|
-
// Suppress stderr during cleanup to avoid terminfo errors
|
|
158
|
-
const originalStderr = process.stderr.write;
|
|
159
|
-
process.stderr.write = () => true;
|
|
160
|
-
try {
|
|
161
|
-
await this.dispose();
|
|
162
|
-
}
|
|
163
|
-
finally {
|
|
164
|
-
// Restore stderr
|
|
165
|
-
process.stderr.write = originalStderr;
|
|
166
|
-
}
|
|
167
|
-
process.exit(0);
|
|
168
|
-
},
|
|
169
|
-
workingDirectory: this.config.workingDirectory,
|
|
170
|
-
model: this.config.model,
|
|
171
|
-
provider: this.config.provider
|
|
172
|
-
});
|
|
173
|
-
// Set tips for rotation
|
|
174
|
-
ui.setTips(tips);
|
|
175
|
-
// Keep the process running
|
|
176
|
-
return new Promise(() => {
|
|
177
|
-
// This promise never resolves, keeping the UI active
|
|
178
|
-
// The UI will handle exit via onExit callback
|
|
179
|
-
});
|
|
180
|
-
}
|
|
181
|
-
async handleSlashCommand(command, args) {
|
|
182
|
-
try {
|
|
183
|
-
// Build the codemie command
|
|
184
|
-
const fullCommand = `codemie ${command} ${args.join(' ')}`;
|
|
185
|
-
// Execute the command synchronously and capture output
|
|
186
|
-
const output = (0, child_process_1.execSync)(fullCommand, {
|
|
187
|
-
cwd: this.config.workingDirectory,
|
|
188
|
-
encoding: 'utf-8',
|
|
189
|
-
maxBuffer: 10 * 1024 * 1024, // 10MB buffer
|
|
190
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
191
|
-
env: {
|
|
192
|
-
...process.env,
|
|
193
|
-
CODEMIE_IN_ASSISTANT: 'true' // Flag to suppress tips in assistant context
|
|
194
|
-
}
|
|
195
|
-
});
|
|
196
|
-
return output;
|
|
197
|
-
}
|
|
198
|
-
catch (error) {
|
|
199
|
-
// If command fails, return the error output (stderr contains the actual error message)
|
|
200
|
-
if (error && typeof error === 'object' && ('stderr' in error || 'stdout' in error)) {
|
|
201
|
-
const stderr = ('stderr' in error && typeof error.stderr === 'string' ? error.stderr : '').trim();
|
|
202
|
-
const stdout = ('stdout' in error && typeof error.stdout === 'string' ? error.stdout : '').trim();
|
|
203
|
-
const combined = [stdout, stderr].filter(Boolean).join('\n');
|
|
204
|
-
throw new Error(combined || (0, errors_js_1.getErrorMessage)(error));
|
|
205
|
-
}
|
|
206
|
-
throw new Error(`Command failed: ${(0, errors_js_1.getErrorMessage)(error)}`);
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
loadTips() {
|
|
210
|
-
try {
|
|
211
|
-
const tipsPath = path.join(__dirname, '../data/tips.json');
|
|
212
|
-
const tipsData = fs.readFileSync(tipsPath, 'utf-8');
|
|
213
|
-
return JSON.parse(tipsData);
|
|
214
|
-
}
|
|
215
|
-
catch {
|
|
216
|
-
return [
|
|
217
|
-
{ message: 'Run codemie list to see available agents', command: 'codemie list' },
|
|
218
|
-
{ message: 'Use codemie doctor to check your setup', command: 'codemie doctor' }
|
|
219
|
-
];
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
async chat(message) {
|
|
223
|
-
if (!this.agent) {
|
|
224
|
-
throw new Error('Agent not initialized. Call initialize() first.');
|
|
225
|
-
}
|
|
226
|
-
return await this.agent.chat(message);
|
|
227
|
-
}
|
|
228
|
-
async executeNonInteractive(task) {
|
|
229
|
-
if (!this.agent) {
|
|
230
|
-
throw new Error('Agent not initialized. Call initialize() first.');
|
|
231
|
-
}
|
|
232
|
-
// Check if task is a slash command (proxy command)
|
|
233
|
-
if (task.startsWith('/')) {
|
|
234
|
-
const parts = task.slice(1).split(/\s+/);
|
|
235
|
-
const command = parts[0];
|
|
236
|
-
const args = parts.slice(1);
|
|
237
|
-
console.log(chalk_1.default.yellow(`Executing command: /${command} ${args.join(' ')}`));
|
|
238
|
-
console.log();
|
|
239
|
-
try {
|
|
240
|
-
const result = await this.executeSlashCommand(command, args);
|
|
241
|
-
console.log(result);
|
|
242
|
-
process.exit(0);
|
|
243
|
-
}
|
|
244
|
-
catch (error) {
|
|
245
|
-
console.error(chalk_1.default.red('Error:'), (0, errors_js_1.getErrorMessage)(error));
|
|
246
|
-
process.exit(1);
|
|
247
|
-
}
|
|
248
|
-
return;
|
|
249
|
-
}
|
|
250
|
-
// Execute as agent task with streaming output
|
|
251
|
-
console.log(chalk_1.default.cyan('Task:'), task);
|
|
252
|
-
console.log();
|
|
253
|
-
let hasOutput = false;
|
|
254
|
-
let hasError = false;
|
|
255
|
-
let isThinking = false;
|
|
256
|
-
// Create AbortController for cancellation (Ctrl+C in non-interactive mode)
|
|
257
|
-
const abortController = new AbortController();
|
|
258
|
-
const abortHandler = () => {
|
|
259
|
-
console.log(chalk_1.default.yellow('\nCancelling execution...'));
|
|
260
|
-
abortController.abort();
|
|
261
|
-
};
|
|
262
|
-
process.once('SIGINT', abortHandler);
|
|
263
|
-
try {
|
|
264
|
-
await this.agent.chatStream(task, (event) => {
|
|
265
|
-
switch (event.type) {
|
|
266
|
-
case 'thinking_start':
|
|
267
|
-
if (!isThinking) {
|
|
268
|
-
process.stderr.write(chalk_1.default.gray('(thinking...)'));
|
|
269
|
-
isThinking = true;
|
|
270
|
-
}
|
|
271
|
-
break;
|
|
272
|
-
case 'thinking_end':
|
|
273
|
-
// Clear the thinking line
|
|
274
|
-
if (isThinking) {
|
|
275
|
-
process.stderr.write('\r\x1b[K'); // Clear line
|
|
276
|
-
isThinking = false;
|
|
277
|
-
}
|
|
278
|
-
break;
|
|
279
|
-
case 'content_chunk':
|
|
280
|
-
// Clear thinking indicator if still showing
|
|
281
|
-
if (isThinking) {
|
|
282
|
-
process.stderr.write('\r\x1b[K');
|
|
283
|
-
isThinking = false;
|
|
284
|
-
}
|
|
285
|
-
if (!hasOutput) {
|
|
286
|
-
hasOutput = true;
|
|
287
|
-
}
|
|
288
|
-
process.stdout.write(event.content);
|
|
289
|
-
break;
|
|
290
|
-
case 'tool_call_start':
|
|
291
|
-
// Clear thinking indicator if still showing
|
|
292
|
-
if (isThinking) {
|
|
293
|
-
process.stderr.write('\r\x1b[K');
|
|
294
|
-
isThinking = false;
|
|
295
|
-
}
|
|
296
|
-
console.log();
|
|
297
|
-
console.log(chalk_1.default.green('⏺'), chalk_1.default.white(`${event.toolName}(${Object.values(event.toolArgs || {}).join(', ')})`));
|
|
298
|
-
break;
|
|
299
|
-
case 'tool_call_result': {
|
|
300
|
-
// Truncate long results
|
|
301
|
-
const lines = event.result?.split('\n') || [];
|
|
302
|
-
const maxLines = 5;
|
|
303
|
-
const displayLines = lines.slice(0, maxLines);
|
|
304
|
-
console.log(chalk_1.default.gray(' ⎿'), displayLines[0] || '');
|
|
305
|
-
for (let i = 1; i < displayLines.length; i++) {
|
|
306
|
-
console.log(' ', displayLines[i]);
|
|
307
|
-
}
|
|
308
|
-
if (lines.length > maxLines) {
|
|
309
|
-
console.log(chalk_1.default.gray(` … +${lines.length - maxLines} lines`));
|
|
310
|
-
}
|
|
311
|
-
console.log();
|
|
312
|
-
break;
|
|
313
|
-
}
|
|
314
|
-
case 'tool_call_error':
|
|
315
|
-
console.log(chalk_1.default.red('⏺ Error:'), event.error);
|
|
316
|
-
console.log();
|
|
317
|
-
break;
|
|
318
|
-
case 'complete':
|
|
319
|
-
// Clear thinking indicator if still showing
|
|
320
|
-
if (isThinking) {
|
|
321
|
-
process.stderr.write('\r\x1b[K');
|
|
322
|
-
isThinking = false;
|
|
323
|
-
}
|
|
324
|
-
if (hasOutput) {
|
|
325
|
-
console.log(); // Add newline after final output
|
|
326
|
-
}
|
|
327
|
-
break;
|
|
328
|
-
case 'error':
|
|
329
|
-
hasError = true;
|
|
330
|
-
// Clear thinking indicator if still showing
|
|
331
|
-
if (isThinking) {
|
|
332
|
-
process.stderr.write('\r\x1b[K');
|
|
333
|
-
isThinking = false;
|
|
334
|
-
}
|
|
335
|
-
console.error(chalk_1.default.red('Error:'), event.error);
|
|
336
|
-
break;
|
|
337
|
-
case 'cancelled':
|
|
338
|
-
// Clear thinking indicator if still showing
|
|
339
|
-
if (isThinking) {
|
|
340
|
-
process.stderr.write('\r\x1b[K');
|
|
341
|
-
isThinking = false;
|
|
342
|
-
}
|
|
343
|
-
console.log();
|
|
344
|
-
console.log(chalk_1.default.yellow('Execution cancelled.'));
|
|
345
|
-
break;
|
|
346
|
-
}
|
|
347
|
-
}, abortController.signal);
|
|
348
|
-
process.removeListener('SIGINT', abortHandler);
|
|
349
|
-
process.exit(hasError ? 1 : 0);
|
|
350
|
-
}
|
|
351
|
-
catch (error) {
|
|
352
|
-
process.removeListener('SIGINT', abortHandler);
|
|
353
|
-
// Clear thinking indicator if still showing
|
|
354
|
-
if (isThinking) {
|
|
355
|
-
process.stderr.write('\r\x1b[K');
|
|
356
|
-
}
|
|
357
|
-
// Check if error is from cancellation
|
|
358
|
-
const errorMsg = (0, errors_js_1.getErrorMessage)(error);
|
|
359
|
-
if (errorMsg === 'Execution cancelled by user') {
|
|
360
|
-
process.exit(130); // Standard exit code for SIGINT
|
|
361
|
-
}
|
|
362
|
-
console.error(chalk_1.default.red('Error:'), errorMsg);
|
|
363
|
-
process.exit(1);
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
async executeSlashCommand(command, args) {
|
|
367
|
-
// Build the codemie command
|
|
368
|
-
const fullCommand = `codemie ${command} ${args.join(' ')}`;
|
|
369
|
-
// Execute the command synchronously and capture output
|
|
370
|
-
const output = (0, child_process_1.execSync)(fullCommand, {
|
|
371
|
-
cwd: this.config.workingDirectory,
|
|
372
|
-
encoding: 'utf-8',
|
|
373
|
-
maxBuffer: 10 * 1024 * 1024, // 10MB buffer
|
|
374
|
-
stdio: ['pipe', 'pipe', 'pipe']
|
|
375
|
-
});
|
|
376
|
-
return output;
|
|
377
|
-
}
|
|
378
|
-
async dispose() {
|
|
379
|
-
if (this.mcpTools) {
|
|
380
|
-
await this.mcpTools.dispose();
|
|
381
|
-
}
|
|
382
|
-
}
|
|
383
|
-
static async testConnection() {
|
|
384
|
-
try {
|
|
385
|
-
const config = (0, config_js_1.loadConfig)();
|
|
386
|
-
logger_js_1.logger.info(`Testing ${config.provider} connection...`);
|
|
387
|
-
logger_js_1.logger.info(`Base URL: ${config.baseUrl}`);
|
|
388
|
-
logger_js_1.logger.info(`Model: ${config.model}`);
|
|
389
|
-
// Simple test to verify credentials
|
|
390
|
-
const _testAgent = new agent_js_1.CodeMieAgent(config, []);
|
|
391
|
-
logger_js_1.logger.success('Connection test successful!');
|
|
392
|
-
}
|
|
393
|
-
catch (error) {
|
|
394
|
-
logger_js_1.logger.error('Connection test failed:', error);
|
|
395
|
-
throw error;
|
|
396
|
-
}
|
|
397
|
-
}
|
|
398
|
-
}
|
|
399
|
-
exports.CodeMieCode = CodeMieCode;
|
|
400
|
-
//# sourceMappingURL=index.js.map
|