poe-code 1.2.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -20
- package/dist/cli/bootstrap.d.ts +4 -0
- package/dist/cli/bootstrap.js +75 -0
- package/dist/cli/bootstrap.js.map +1 -0
- package/dist/cli/commands/configure.d.ts +2 -1
- package/dist/cli/commands/configure.js +7 -7
- package/dist/cli/commands/configure.js.map +1 -1
- package/dist/cli/container.d.ts +0 -5
- package/dist/cli/container.js +0 -8
- package/dist/cli/container.js.map +1 -1
- package/dist/cli/error-logger.d.ts +17 -2
- package/dist/cli/error-logger.js.map +1 -1
- package/dist/cli/errors.d.ts +6 -0
- package/dist/cli/errors.js +8 -0
- package/dist/cli/errors.js.map +1 -1
- package/dist/cli/program.js +6 -26
- package/dist/cli/program.js.map +1 -1
- package/dist/cli/prompt-runner.d.ts +3 -0
- package/dist/cli/prompt-runner.js +9 -0
- package/dist/cli/prompt-runner.js.map +1 -0
- package/dist/cli/service-registry.d.ts +8 -0
- package/dist/cli/service-registry.js.map +1 -1
- package/dist/cli/ui/service-menu.d.ts +6 -0
- package/dist/cli/ui/service-menu.js +37 -0
- package/dist/cli/ui/service-menu.js.map +1 -0
- package/dist/cli/ui/theme.d.ts +16 -0
- package/dist/cli/ui/theme.js +78 -0
- package/dist/cli/ui/theme.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -74
- package/dist/index.js.map +1 -1
- package/dist/providers/claude-code-adapter.js +6 -0
- package/dist/providers/claude-code-adapter.js.map +1 -1
- package/dist/providers/codex-adapter.js +6 -0
- package/dist/providers/codex-adapter.js.map +1 -1
- package/dist/providers/opencode-adapter.js +6 -0
- package/dist/providers/opencode-adapter.js.map +1 -1
- package/package.json +13 -34
- package/dist/cli/api-client.d.ts +0 -14
- package/dist/cli/api-client.js +0 -140
- package/dist/cli/api-client.js.map +0 -1
- package/dist/cli/chat.d.ts +0 -32
- package/dist/cli/chat.js +0 -2
- package/dist/cli/chat.js.map +0 -1
- package/dist/cli/commands/agent.d.ts +0 -18
- package/dist/cli/commands/agent.js +0 -84
- package/dist/cli/commands/agent.js.map +0 -1
- package/dist/cli/commands/configure-agents.d.ts +0 -3
- package/dist/cli/commands/configure-agents.js +0 -72
- package/dist/cli/commands/configure-agents.js.map +0 -1
- package/dist/cli/commands/init.d.ts +0 -8
- package/dist/cli/commands/init.js +0 -45
- package/dist/cli/commands/init.js.map +0 -1
- package/dist/cli/commands/interactive.d.ts +0 -3
- package/dist/cli/commands/interactive.js +0 -17
- package/dist/cli/commands/interactive.js.map +0 -1
- package/dist/cli/commands/login.d.ts +0 -6
- package/dist/cli/commands/login.js +0 -51
- package/dist/cli/commands/login.js.map +0 -1
- package/dist/cli/commands/logout.d.ts +0 -3
- package/dist/cli/commands/logout.js +0 -31
- package/dist/cli/commands/logout.js.map +0 -1
- package/dist/cli/commands/prerequisites.d.ts +0 -3
- package/dist/cli/commands/prerequisites.js +0 -23
- package/dist/cli/commands/prerequisites.js.map +0 -1
- package/dist/cli/commands/query.d.ts +0 -7
- package/dist/cli/commands/query.js +0 -46
- package/dist/cli/commands/query.js.map +0 -1
- package/dist/cli/commands/remove.d.ts +0 -6
- package/dist/cli/commands/remove.js +0 -80
- package/dist/cli/commands/remove.js.map +0 -1
- package/dist/cli/commands/root.d.ts +0 -3
- package/dist/cli/commands/root.js +0 -7
- package/dist/cli/commands/root.js.map +0 -1
- package/dist/cli/commands/spawn-worktree.d.ts +0 -6
- package/dist/cli/commands/spawn-worktree.js +0 -91
- package/dist/cli/commands/spawn-worktree.js.map +0 -1
- package/dist/cli/commands/spawn.d.ts +0 -7
- package/dist/cli/commands/spawn.js +0 -112
- package/dist/cli/commands/spawn.js.map +0 -1
- package/dist/cli/commands/test.d.ts +0 -6
- package/dist/cli/commands/test.js +0 -26
- package/dist/cli/commands/test.js.map +0 -1
- package/dist/cli/file-mentions.d.ts +0 -13
- package/dist/cli/file-mentions.js +0 -87
- package/dist/cli/file-mentions.js.map +0 -1
- package/dist/cli/file-picker-state.d.ts +0 -14
- package/dist/cli/file-picker-state.js +0 -23
- package/dist/cli/file-picker-state.js.map +0 -1
- package/dist/cli/interactive-command-runner.d.ts +0 -11
- package/dist/cli/interactive-command-runner.js +0 -142
- package/dist/cli/interactive-command-runner.js.map +0 -1
- package/dist/cli/interactive-launcher.d.ts +0 -2
- package/dist/cli/interactive-launcher.js +0 -404
- package/dist/cli/interactive-launcher.js.map +0 -1
- package/dist/cli/interactive-tasks.d.ts +0 -7
- package/dist/cli/interactive-tasks.js +0 -199
- package/dist/cli/interactive-tasks.js.map +0 -1
- package/dist/cli/interactive.d.ts +0 -19
- package/dist/cli/interactive.js +0 -479
- package/dist/cli/interactive.js.map +0 -1
- package/dist/cli/markdown-renderer.d.ts +0 -27
- package/dist/cli/markdown-renderer.js +0 -178
- package/dist/cli/markdown-renderer.js.map +0 -1
- package/dist/cli/markdown-renderer.test.d.ts +0 -1
- package/dist/cli/markdown-renderer.test.js +0 -105
- package/dist/cli/markdown-renderer.test.js.map +0 -1
- package/dist/commands/init.d.ts +0 -9
- package/dist/commands/init.js +0 -43
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/spawn-worktree.d.ts +0 -25
- package/dist/commands/spawn-worktree.js +0 -139
- package/dist/commands/spawn-worktree.js.map +0 -1
- package/dist/services/agent-config-manager.d.ts +0 -32
- package/dist/services/agent-config-manager.js +0 -130
- package/dist/services/agent-config-manager.js.map +0 -1
- package/dist/services/agent-registry.d.ts +0 -27
- package/dist/services/agent-registry.js +0 -89
- package/dist/services/agent-registry.js.map +0 -1
- package/dist/services/agent-session.d.ts +0 -24
- package/dist/services/agent-session.js +0 -107
- package/dist/services/agent-session.js.map +0 -1
- package/dist/services/agent-task-registry.d.ts +0 -131
- package/dist/services/agent-task-registry.js +0 -491
- package/dist/services/agent-task-registry.js.map +0 -1
- package/dist/services/chat.d.ts +0 -94
- package/dist/services/chat.js +0 -241
- package/dist/services/chat.js.map +0 -1
- package/dist/services/mcp-client.d.ts +0 -38
- package/dist/services/mcp-client.js +0 -170
- package/dist/services/mcp-client.js.map +0 -1
- package/dist/services/mcp-manager.d.ts +0 -28
- package/dist/services/mcp-manager.js +0 -157
- package/dist/services/mcp-manager.js.map +0 -1
- package/dist/services/poe-code.d.ts +0 -7
- package/dist/services/poe-code.js +0 -5
- package/dist/services/poe-code.js.map +0 -1
- package/dist/services/task-logger.d.ts +0 -24
- package/dist/services/task-logger.js +0 -73
- package/dist/services/task-logger.js.map +0 -1
- package/dist/services/task-runner.d.ts +0 -19
- package/dist/services/task-runner.js +0 -157
- package/dist/services/task-runner.js.map +0 -1
- package/dist/services/tools.d.ts +0 -76
- package/dist/services/tools.js +0 -870
- package/dist/services/tools.js.map +0 -1
- package/dist/utils/e2e-flags.d.ts +0 -1
- package/dist/utils/e2e-flags.js +0 -9
- package/dist/utils/e2e-flags.js.map +0 -1
- package/dist/utils/worktree.d.ts +0 -40
- package/dist/utils/worktree.js +0 -179
- package/dist/utils/worktree.js.map +0 -1
- package/shared/conversation-layout.cjs +0 -11
- package/shared/conversation-layout.d.ts +0 -7
- package/shared/conversation-layout.js +0 -11
- package/shared/package.json +0 -13
|
@@ -1,404 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { render } from "ink";
|
|
3
|
-
import path from "node:path";
|
|
4
|
-
import * as nodeFs from "node:fs";
|
|
5
|
-
import { InteractiveCli } from "./interactive.js";
|
|
6
|
-
import { ErrorLogger } from "./error-logger.js";
|
|
7
|
-
import { resolveFileMentions } from "./file-mentions.js";
|
|
8
|
-
import { deleteCredentials, loadCredentials, saveCredentials } from "../services/credentials.js";
|
|
9
|
-
import { PoeChatService } from "../services/chat.js";
|
|
10
|
-
import { DefaultToolExecutor, getAvailableTools } from "../services/tools.js";
|
|
11
|
-
import { AgentConfigManager } from "../services/agent-config-manager.js";
|
|
12
|
-
import { createDefaultAgentRegistry } from "../services/agent-registry.js";
|
|
13
|
-
import { McpManager } from "../services/mcp-manager.js";
|
|
14
|
-
import { resolveCredentialsPath } from "./environment.js";
|
|
15
|
-
import { AgentTaskRegistry } from "../services/agent-task-registry.js";
|
|
16
|
-
import { handleTasksCommand } from "./interactive-tasks.js";
|
|
17
|
-
export async function launchInteractiveMode(dependencies) {
|
|
18
|
-
const { fs: fileSystem, env } = dependencies;
|
|
19
|
-
const logDir = path.join(env.homeDir, ".poe-code", "logs");
|
|
20
|
-
const errorLogger = new ErrorLogger({
|
|
21
|
-
fs: nodeFs,
|
|
22
|
-
logDir,
|
|
23
|
-
logToStderr: true
|
|
24
|
-
});
|
|
25
|
-
const credentialsPath = resolveCredentialsPath(env.homeDir);
|
|
26
|
-
// Initialize MCP manager
|
|
27
|
-
const mcpManager = new McpManager(fileSystem, env.homeDir);
|
|
28
|
-
// Auto-connect to configured MCP servers
|
|
29
|
-
try {
|
|
30
|
-
await mcpManager.connectAll();
|
|
31
|
-
}
|
|
32
|
-
catch (error) {
|
|
33
|
-
const failure = error instanceof Error ? error : new Error(String(error));
|
|
34
|
-
errorLogger.logErrorWithStackTrace(failure, "interactive mcp connect", {
|
|
35
|
-
component: "interactive",
|
|
36
|
-
operation: "connect mcp servers"
|
|
37
|
-
});
|
|
38
|
-
dependencies.logger?.(`interactive:mcp connect failed ${failure.message}`);
|
|
39
|
-
}
|
|
40
|
-
// Initialize chat service
|
|
41
|
-
let chatService = null;
|
|
42
|
-
const apiKey = await loadCredentials({ fs: fileSystem, filePath: credentialsPath });
|
|
43
|
-
// Tool call callback handler (will be set by React component)
|
|
44
|
-
let toolCallHandler;
|
|
45
|
-
// Load system prompt
|
|
46
|
-
let systemPrompt;
|
|
47
|
-
try {
|
|
48
|
-
const systemPromptPath = path.join(env.cwd, "SYSTEM_PROMPT.md");
|
|
49
|
-
systemPrompt = await fileSystem.readFile(systemPromptPath, "utf8");
|
|
50
|
-
}
|
|
51
|
-
catch {
|
|
52
|
-
// System prompt file doesn't exist, use default behavior
|
|
53
|
-
}
|
|
54
|
-
// Add working directory context
|
|
55
|
-
const cwdContext = `\n\nIMPORTANT: You are working in the directory: ${env.cwd}\nWhen accessing files, use relative paths from this directory (e.g., 'package.json', 'src/index.ts').\nPrefer using the built-in tools (read_file, write_file, list_files) over MCP tools for local file operations.`;
|
|
56
|
-
systemPrompt = systemPrompt ? systemPrompt + cwdContext : cwdContext;
|
|
57
|
-
const forwardToolCall = (event) => {
|
|
58
|
-
if (toolCallHandler) {
|
|
59
|
-
toolCallHandler(event.toolName, event.args, event.result, event.error);
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
const tasksDir = path.join(env.homeDir, ".poe-code", "tasks");
|
|
63
|
-
const logsDir = path.join(env.homeDir, ".poe-code", "logs", "tasks");
|
|
64
|
-
const fsLike = nodeFs;
|
|
65
|
-
const taskRegistry = new AgentTaskRegistry({
|
|
66
|
-
fs: fsLike,
|
|
67
|
-
tasksDir,
|
|
68
|
-
logsDir,
|
|
69
|
-
logger: (event, payload) => {
|
|
70
|
-
dependencies.logger?.(`task:${event} ${JSON.stringify(payload ?? {})}`);
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
|
-
const agentRegistry = createDefaultAgentRegistry();
|
|
74
|
-
const agentConfigManager = new AgentConfigManager({
|
|
75
|
-
fs: fileSystem,
|
|
76
|
-
homeDir: env.homeDir,
|
|
77
|
-
registry: agentRegistry
|
|
78
|
-
});
|
|
79
|
-
let agentConfigLoaded = false;
|
|
80
|
-
const ensureAgentConfigLoaded = async () => {
|
|
81
|
-
if (agentConfigLoaded) {
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
try {
|
|
85
|
-
await agentConfigManager.loadConfig();
|
|
86
|
-
}
|
|
87
|
-
catch (error) {
|
|
88
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
89
|
-
dependencies.logger?.(`interactive:agent-config load failed ${message}`);
|
|
90
|
-
}
|
|
91
|
-
finally {
|
|
92
|
-
agentConfigLoaded = true;
|
|
93
|
-
}
|
|
94
|
-
};
|
|
95
|
-
async function initializeChatService(apiKeyValue) {
|
|
96
|
-
await ensureAgentConfigLoaded();
|
|
97
|
-
const toolExecutor = new DefaultToolExecutor({
|
|
98
|
-
fs: fileSystem,
|
|
99
|
-
cwd: env.cwd,
|
|
100
|
-
allowedPaths: [env.cwd, env.homeDir],
|
|
101
|
-
mcpManager,
|
|
102
|
-
taskRegistry,
|
|
103
|
-
logger: (event, payload) => {
|
|
104
|
-
dependencies.logger?.(`tool:${event} ${JSON.stringify(payload ?? {})}`);
|
|
105
|
-
},
|
|
106
|
-
agentRegistry,
|
|
107
|
-
agentConfigManager,
|
|
108
|
-
homeDir: env.homeDir
|
|
109
|
-
});
|
|
110
|
-
chatService = new PoeChatService(apiKeyValue, "Claude-Sonnet-4.5", toolExecutor, forwardToolCall, systemPrompt, taskRegistry);
|
|
111
|
-
return "Chat service initialized with Claude-Sonnet-4.5";
|
|
112
|
-
}
|
|
113
|
-
if (apiKey) {
|
|
114
|
-
await initializeChatService(apiKey);
|
|
115
|
-
}
|
|
116
|
-
const setToolCallHandler = (handler) => {
|
|
117
|
-
toolCallHandler = handler;
|
|
118
|
-
};
|
|
119
|
-
const handleCommand = async (input, commandOptions) => {
|
|
120
|
-
const trimmedInput = input.trim();
|
|
121
|
-
// Check for slash commands
|
|
122
|
-
if (trimmedInput.startsWith("/")) {
|
|
123
|
-
const parts = trimmedInput.substring(1).split(/\s+/);
|
|
124
|
-
const slashCommand = parts[0].toLowerCase();
|
|
125
|
-
const slashArgs = parts.slice(1);
|
|
126
|
-
if (slashCommand === "help") {
|
|
127
|
-
return `Available commands:
|
|
128
|
-
- /login <api-key> - Store your Poe API key and connect the agent
|
|
129
|
-
- /logout - Remove stored credentials and disconnect the agent
|
|
130
|
-
- /model [model-name] - Show or change the current model
|
|
131
|
-
- /strategy [...] - Configure multi-model strategy options
|
|
132
|
-
- /clear - Clear the current conversation history
|
|
133
|
-
- /history - Show the current conversation history
|
|
134
|
-
- /tools - List available tools
|
|
135
|
-
- /tasks [...] - Manage background tasks
|
|
136
|
-
- /mcp [...] - Manage MCP servers`;
|
|
137
|
-
}
|
|
138
|
-
if (slashCommand === "login") {
|
|
139
|
-
const apiKeyValue = slashArgs.join(" ").trim();
|
|
140
|
-
if (apiKeyValue.length === 0) {
|
|
141
|
-
return "Usage: /login <api-key>";
|
|
142
|
-
}
|
|
143
|
-
const normalizedApiKey = apiKeyValue.trim();
|
|
144
|
-
await saveCredentials({
|
|
145
|
-
fs: fileSystem,
|
|
146
|
-
filePath: credentialsPath,
|
|
147
|
-
apiKey: normalizedApiKey
|
|
148
|
-
});
|
|
149
|
-
const message = await initializeChatService(normalizedApiKey);
|
|
150
|
-
return `Stored Poe API key.\n${message}`;
|
|
151
|
-
}
|
|
152
|
-
if (slashCommand === "logout") {
|
|
153
|
-
await deleteCredentials({
|
|
154
|
-
fs: fileSystem,
|
|
155
|
-
filePath: credentialsPath
|
|
156
|
-
});
|
|
157
|
-
chatService = null;
|
|
158
|
-
return "Removed stored Poe API key.";
|
|
159
|
-
}
|
|
160
|
-
if (slashCommand === "model") {
|
|
161
|
-
if (slashArgs.length === 0) {
|
|
162
|
-
const currentModel = chatService?.getModel() || "Not connected";
|
|
163
|
-
return `Current model: ${currentModel}\n\nAvailable models:\n- Claude-Sonnet-4.5\n- GPT-5.1\n- GPT-4o\n- Claude-3.5-Sonnet\n\nUsage: /model <model-name>`;
|
|
164
|
-
}
|
|
165
|
-
const newModel = slashArgs.join(" ");
|
|
166
|
-
if (!chatService) {
|
|
167
|
-
return "Please login first with: /login <api-key>";
|
|
168
|
-
}
|
|
169
|
-
chatService.setModel(newModel);
|
|
170
|
-
return `Switched to model: ${newModel}`;
|
|
171
|
-
}
|
|
172
|
-
if (slashCommand === "strategy") {
|
|
173
|
-
if (!chatService) {
|
|
174
|
-
return "Please login first with: /login <api-key>";
|
|
175
|
-
}
|
|
176
|
-
if (slashArgs.length === 0) {
|
|
177
|
-
const strategyInfo = chatService.getStrategyInfo();
|
|
178
|
-
const isEnabled = chatService.isStrategyEnabled();
|
|
179
|
-
return `Current strategy: ${strategyInfo}\nStatus: ${isEnabled ? "Enabled" : "Disabled"}\n\nAvailable strategies:\n- mixed - Alternate between GPT-5.1 and Claude-Sonnet-4.5\n- smart - Intelligently select based on task type\n- fixed - Always use the same model\n- round-robin - Cycle through all available models\n\nUsage:\n /strategy mixed\n /strategy smart\n /strategy fixed <model-name>\n /strategy round-robin [model1,model2,...]\n /strategy enable\n /strategy disable`;
|
|
180
|
-
}
|
|
181
|
-
const strategyType = slashArgs[0].toLowerCase();
|
|
182
|
-
if (strategyType === "enable") {
|
|
183
|
-
chatService.enableStrategy();
|
|
184
|
-
return "Strategy enabled";
|
|
185
|
-
}
|
|
186
|
-
if (strategyType === "disable") {
|
|
187
|
-
chatService.disableStrategy();
|
|
188
|
-
return "Strategy disabled (using fixed model)";
|
|
189
|
-
}
|
|
190
|
-
if (strategyType === "mixed") {
|
|
191
|
-
chatService.setStrategy({ type: "mixed" });
|
|
192
|
-
return "Strategy set to: mixed (alternating between GPT-5.1 and Claude-Sonnet-4.5)";
|
|
193
|
-
}
|
|
194
|
-
if (strategyType === "smart") {
|
|
195
|
-
chatService.setStrategy({ type: "smart" });
|
|
196
|
-
return "Strategy set to: smart (intelligently selecting based on task type)";
|
|
197
|
-
}
|
|
198
|
-
if (strategyType === "fixed") {
|
|
199
|
-
if (slashArgs.length < 2) {
|
|
200
|
-
return "Usage: /strategy fixed <model-name>\n\nExample: /strategy fixed Claude-Sonnet-4.5";
|
|
201
|
-
}
|
|
202
|
-
const fixedModel = slashArgs.slice(1).join(" ");
|
|
203
|
-
chatService.setStrategy({ type: "fixed", fixedModel: fixedModel });
|
|
204
|
-
return `Strategy set to: fixed (always using ${fixedModel})`;
|
|
205
|
-
}
|
|
206
|
-
if (strategyType === "round-robin") {
|
|
207
|
-
const customOrder = slashArgs.length > 1
|
|
208
|
-
? slashArgs.slice(1).join(" ").split(",").map(m => m.trim())
|
|
209
|
-
: undefined;
|
|
210
|
-
chatService.setStrategy({ type: "round-robin", customOrder });
|
|
211
|
-
return `Strategy set to: round-robin${customOrder ? ` (custom order: ${customOrder.join(", ")})` : " (using all available models)"}`;
|
|
212
|
-
}
|
|
213
|
-
return `Unknown strategy type: ${strategyType}\nType '/strategy' for help`;
|
|
214
|
-
}
|
|
215
|
-
if (slashCommand === "clear") {
|
|
216
|
-
if (!chatService) {
|
|
217
|
-
return "Please login first with: /login <api-key>";
|
|
218
|
-
}
|
|
219
|
-
chatService.clearHistory();
|
|
220
|
-
return "Conversation history cleared";
|
|
221
|
-
}
|
|
222
|
-
if (slashCommand === "history") {
|
|
223
|
-
if (!chatService) {
|
|
224
|
-
return "Please login first with: /login <api-key>";
|
|
225
|
-
}
|
|
226
|
-
const history = chatService.getHistory();
|
|
227
|
-
return `Conversation history (${history.length} messages):\n${JSON.stringify(history, null, 2)}`;
|
|
228
|
-
}
|
|
229
|
-
if (slashCommand === "tools") {
|
|
230
|
-
await ensureAgentConfigLoaded();
|
|
231
|
-
const tools = await getAvailableTools({
|
|
232
|
-
agentRegistry,
|
|
233
|
-
agentConfigManager,
|
|
234
|
-
mcpManager
|
|
235
|
-
});
|
|
236
|
-
const builtInTools = tools.filter((t) => !t.function.name.startsWith("mcp__"));
|
|
237
|
-
const mcpTools = tools.filter((t) => t.function.name.startsWith("mcp__"));
|
|
238
|
-
let result = "Built-in tools:\n";
|
|
239
|
-
result += builtInTools.map((t) => `- ${t.function.name}: ${t.function.description}`).join("\n");
|
|
240
|
-
if (mcpTools.length > 0) {
|
|
241
|
-
result += "\n\nMCP tools:\n";
|
|
242
|
-
result += mcpTools.map((t) => `- ${t.function.name}: ${t.function.description}`).join("\n");
|
|
243
|
-
}
|
|
244
|
-
result += "\n\nUse '/mcp' to manage MCP servers";
|
|
245
|
-
return result;
|
|
246
|
-
}
|
|
247
|
-
if (slashCommand === "tasks") {
|
|
248
|
-
const output = await handleTasksCommand(slashArgs, {
|
|
249
|
-
registry: taskRegistry,
|
|
250
|
-
fs: fsLike,
|
|
251
|
-
now: Date.now
|
|
252
|
-
});
|
|
253
|
-
return output;
|
|
254
|
-
}
|
|
255
|
-
if (slashCommand === "mcp") {
|
|
256
|
-
if (slashArgs.length === 0) {
|
|
257
|
-
const servers = await mcpManager.listServers();
|
|
258
|
-
if (servers.length === 0) {
|
|
259
|
-
return `No MCP servers configured.
|
|
260
|
-
|
|
261
|
-
Add a server with:
|
|
262
|
-
/mcp add <name> <command> [args...]
|
|
263
|
-
|
|
264
|
-
Example:
|
|
265
|
-
/mcp add filesystem npx -y @modelcontextprotocol/server-filesystem /path/to/dir`;
|
|
266
|
-
}
|
|
267
|
-
let result = "MCP Servers:\n";
|
|
268
|
-
for (const server of servers) {
|
|
269
|
-
const status = server.connected ? "✓ connected" : "✗ disconnected";
|
|
270
|
-
result += `- ${server.name} (${status}, ${server.toolCount} tools)\n`;
|
|
271
|
-
}
|
|
272
|
-
result += `\nCommands:
|
|
273
|
-
/mcp add <name> <command> [args...] - Add MCP server
|
|
274
|
-
/mcp remove <name> - Remove MCP server
|
|
275
|
-
/mcp connect <name> - Connect to server
|
|
276
|
-
/mcp disconnect <name> - Disconnect from server
|
|
277
|
-
/mcp reconnect - Reconnect all servers`;
|
|
278
|
-
return result;
|
|
279
|
-
}
|
|
280
|
-
const mcpAction = slashArgs[0].toLowerCase();
|
|
281
|
-
const mcpArgs = slashArgs.slice(1);
|
|
282
|
-
if (mcpAction === "add") {
|
|
283
|
-
if (mcpArgs.length < 2) {
|
|
284
|
-
return "Usage: /mcp add <name> <command> [args...]\n\nExample:\n /mcp add filesystem npx -y @modelcontextprotocol/server-filesystem /path/to/dir";
|
|
285
|
-
}
|
|
286
|
-
const [name, command, ...args] = mcpArgs;
|
|
287
|
-
await mcpManager.addServer({ name, command, args });
|
|
288
|
-
// Try to connect immediately
|
|
289
|
-
try {
|
|
290
|
-
await mcpManager.connectServer(name);
|
|
291
|
-
return `Added and connected to MCP server "${name}"`;
|
|
292
|
-
}
|
|
293
|
-
catch (error) {
|
|
294
|
-
return `Added MCP server "${name}" but failed to connect: ${error instanceof Error ? error.message : String(error)}`;
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
if (mcpAction === "remove") {
|
|
298
|
-
if (mcpArgs.length === 0) {
|
|
299
|
-
return "Usage: /mcp remove <name>";
|
|
300
|
-
}
|
|
301
|
-
const removed = await mcpManager.removeServer(mcpArgs[0]);
|
|
302
|
-
if (removed) {
|
|
303
|
-
return `Removed MCP server "${mcpArgs[0]}"`;
|
|
304
|
-
}
|
|
305
|
-
else {
|
|
306
|
-
return `MCP server "${mcpArgs[0]}" not found`;
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
if (mcpAction === "connect") {
|
|
310
|
-
if (mcpArgs.length === 0) {
|
|
311
|
-
return "Usage: /mcp connect <name>";
|
|
312
|
-
}
|
|
313
|
-
try {
|
|
314
|
-
await mcpManager.connectServer(mcpArgs[0]);
|
|
315
|
-
return `Connected to MCP server "${mcpArgs[0]}"`;
|
|
316
|
-
}
|
|
317
|
-
catch (error) {
|
|
318
|
-
throw new Error(`Failed to connect: ${error instanceof Error ? error.message : String(error)}`);
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
if (mcpAction === "disconnect") {
|
|
322
|
-
if (mcpArgs.length === 0) {
|
|
323
|
-
return "Usage: /mcp disconnect <name>";
|
|
324
|
-
}
|
|
325
|
-
await mcpManager.disconnectServer(mcpArgs[0]);
|
|
326
|
-
return `Disconnected from MCP server "${mcpArgs[0]}"`;
|
|
327
|
-
}
|
|
328
|
-
if (mcpAction === "reconnect") {
|
|
329
|
-
await mcpManager.disconnectAll();
|
|
330
|
-
await mcpManager.connectAll();
|
|
331
|
-
const servers = await mcpManager.listServers();
|
|
332
|
-
const connected = servers.filter((s) => s.connected).length;
|
|
333
|
-
return `Reconnected to ${connected}/${servers.length} MCP servers`;
|
|
334
|
-
}
|
|
335
|
-
return `Unknown MCP command: ${mcpAction}\nType '/mcp' for help`;
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
|
-
// If chat service is initialized, treat this as a chat message
|
|
339
|
-
if (chatService) {
|
|
340
|
-
try {
|
|
341
|
-
const mentionResult = await resolveFileMentions({
|
|
342
|
-
input: trimmedInput,
|
|
343
|
-
cwd: env.cwd,
|
|
344
|
-
readFile: (filePath, encoding) => fileSystem.readFile(filePath, encoding),
|
|
345
|
-
errorLogger
|
|
346
|
-
});
|
|
347
|
-
const processedInput = mentionResult.processedInput;
|
|
348
|
-
await ensureAgentConfigLoaded();
|
|
349
|
-
const tools = await getAvailableTools({
|
|
350
|
-
agentRegistry,
|
|
351
|
-
agentConfigManager,
|
|
352
|
-
mcpManager
|
|
353
|
-
});
|
|
354
|
-
const response = await chatService.sendMessage(processedInput, tools, {
|
|
355
|
-
signal: commandOptions?.signal,
|
|
356
|
-
onChunk: commandOptions?.onChunk
|
|
357
|
-
});
|
|
358
|
-
const modelName = chatService.getModel();
|
|
359
|
-
const finalContent = response.content || "No response from model";
|
|
360
|
-
const output = `[Model: ${modelName}]\n\n${finalContent}`;
|
|
361
|
-
commandOptions?.onChunk?.(finalContent);
|
|
362
|
-
return output;
|
|
363
|
-
}
|
|
364
|
-
catch (error) {
|
|
365
|
-
if (error instanceof Error && error.name === "AbortError") {
|
|
366
|
-
throw error;
|
|
367
|
-
}
|
|
368
|
-
const failure = error instanceof Error ? error : new Error(String(error));
|
|
369
|
-
errorLogger.logErrorWithStackTrace(failure, "interactive chat", {
|
|
370
|
-
component: "interactive",
|
|
371
|
-
operation: "send message"
|
|
372
|
-
});
|
|
373
|
-
throw new Error(`Chat error: ${failure.message}`);
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
else {
|
|
377
|
-
return `Please login first with: /login <api-key>\n\nType '/help' for a list of commands.`;
|
|
378
|
-
}
|
|
379
|
-
};
|
|
380
|
-
// Cleanup MCP connections on exit
|
|
381
|
-
const originalHandleExit = () => {
|
|
382
|
-
void mcpManager.disconnectAll();
|
|
383
|
-
console.log("Goodbye!");
|
|
384
|
-
};
|
|
385
|
-
const { waitUntilExit } = render(React.createElement(InteractiveCli, {
|
|
386
|
-
onExit: originalHandleExit,
|
|
387
|
-
onCommand: handleCommand,
|
|
388
|
-
onSetToolCallHandler: setToolCallHandler,
|
|
389
|
-
cwd: env.cwd,
|
|
390
|
-
fs: {
|
|
391
|
-
readdir: (path) => fileSystem.readdir(path),
|
|
392
|
-
stat: (path) => fileSystem.stat(path)
|
|
393
|
-
},
|
|
394
|
-
logError: (error, context) => {
|
|
395
|
-
errorLogger.logErrorWithStackTrace(error, "interactive ui", {
|
|
396
|
-
component: "interactive",
|
|
397
|
-
...context
|
|
398
|
-
});
|
|
399
|
-
}
|
|
400
|
-
}));
|
|
401
|
-
await waitUntilExit();
|
|
402
|
-
taskRegistry.dispose();
|
|
403
|
-
}
|
|
404
|
-
//# sourceMappingURL=interactive-launcher.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"interactive-launcher.js","sourceRoot":"","sources":["../../src/cli/interactive-launcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { AgentTaskRegistry, FsLike } from "../services/agent-task-registry.js";
|
|
2
|
-
export interface TasksCommandOptions {
|
|
3
|
-
registry: Pick<AgentTaskRegistry, "getAllTasks" | "getTask" | "readProgress" | "killTask" | "waitForTask" | "getRunningTasks" | "updateTask" | "archiveTask">;
|
|
4
|
-
fs: FsLike;
|
|
5
|
-
now: () => number;
|
|
6
|
-
}
|
|
7
|
-
export declare function handleTasksCommand(args: string[], options: TasksCommandOptions): Promise<string>;
|
|
@@ -1,199 +0,0 @@
|
|
|
1
|
-
export async function handleTasksCommand(args, options) {
|
|
2
|
-
const parsed = parseArgs(args);
|
|
3
|
-
// Handle cleanup-all flag (archives all failed/completed tasks immediately)
|
|
4
|
-
if (parsed.flags.cleanupAll) {
|
|
5
|
-
const allTasks = options.registry.getAllTasks();
|
|
6
|
-
const toCleanup = allTasks.filter((task) => task.status === "failed" || task.status === "completed" || task.status === "killed");
|
|
7
|
-
for (const task of toCleanup) {
|
|
8
|
-
// Archive immediately
|
|
9
|
-
options.registry.archiveTask(task.id);
|
|
10
|
-
}
|
|
11
|
-
return toCleanup.length > 0
|
|
12
|
-
? `Archived ${toCleanup.length} task(s).`
|
|
13
|
-
: "No tasks to clean up.";
|
|
14
|
-
}
|
|
15
|
-
// Handle cleanup flag (detects and marks zombie tasks)
|
|
16
|
-
if (parsed.flags.cleanup) {
|
|
17
|
-
const allTasks = options.registry.getAllTasks();
|
|
18
|
-
const runningBefore = allTasks.filter((t) => t.status === "running");
|
|
19
|
-
// Trigger zombie detection by calling getRunningTasks (modifies tasks in-place)
|
|
20
|
-
options.registry.getRunningTasks();
|
|
21
|
-
// Check how many are still running after zombie detection
|
|
22
|
-
const allTasksAfter = options.registry.getAllTasks();
|
|
23
|
-
const runningAfter = allTasksAfter.filter((t) => t.status === "running");
|
|
24
|
-
const cleaned = runningBefore.length - runningAfter.length;
|
|
25
|
-
if (cleaned > 0) {
|
|
26
|
-
const zombieIds = runningBefore
|
|
27
|
-
.filter((t) => !runningAfter.find((r) => r.id === t.id))
|
|
28
|
-
.map((t) => t.id);
|
|
29
|
-
return `Cleaned up ${cleaned} zombie task(s):\n${zombieIds.join("\n")}`;
|
|
30
|
-
}
|
|
31
|
-
return "No zombie tasks found.";
|
|
32
|
-
}
|
|
33
|
-
if (!parsed.id) {
|
|
34
|
-
// Trigger zombie detection before listing tasks
|
|
35
|
-
options.registry.getRunningTasks();
|
|
36
|
-
return renderTaskList(options.registry.getAllTasks(), options.now);
|
|
37
|
-
}
|
|
38
|
-
const task = options.registry.getTask(parsed.id);
|
|
39
|
-
if (!task) {
|
|
40
|
-
return `Task ${parsed.id} not found.`;
|
|
41
|
-
}
|
|
42
|
-
if (parsed.flags.kill) {
|
|
43
|
-
const killed = await Promise.resolve(options.registry.killTask(parsed.id));
|
|
44
|
-
return killed
|
|
45
|
-
? `Task ${parsed.id} terminated.`
|
|
46
|
-
: `Unable to terminate task ${parsed.id}.`;
|
|
47
|
-
}
|
|
48
|
-
if (parsed.flags.logs) {
|
|
49
|
-
return await renderTaskLogs(task, options.fs);
|
|
50
|
-
}
|
|
51
|
-
if (parsed.flags.follow) {
|
|
52
|
-
return await renderTaskFollow(task, options);
|
|
53
|
-
}
|
|
54
|
-
return renderTaskDetails(task, options.now, options.registry.getRunningTasks());
|
|
55
|
-
}
|
|
56
|
-
function parseArgs(args) {
|
|
57
|
-
const result = {
|
|
58
|
-
flags: {
|
|
59
|
-
logs: false,
|
|
60
|
-
follow: false,
|
|
61
|
-
kill: false,
|
|
62
|
-
cleanup: false,
|
|
63
|
-
cleanupAll: false
|
|
64
|
-
}
|
|
65
|
-
};
|
|
66
|
-
for (const arg of args) {
|
|
67
|
-
if (arg === "--logs") {
|
|
68
|
-
result.flags.logs = true;
|
|
69
|
-
continue;
|
|
70
|
-
}
|
|
71
|
-
if (arg === "--follow") {
|
|
72
|
-
result.flags.follow = true;
|
|
73
|
-
continue;
|
|
74
|
-
}
|
|
75
|
-
if (arg === "--kill") {
|
|
76
|
-
result.flags.kill = true;
|
|
77
|
-
continue;
|
|
78
|
-
}
|
|
79
|
-
if (arg === "--cleanup") {
|
|
80
|
-
result.flags.cleanup = true;
|
|
81
|
-
continue;
|
|
82
|
-
}
|
|
83
|
-
if (arg === "--cleanup-all") {
|
|
84
|
-
result.flags.cleanupAll = true;
|
|
85
|
-
continue;
|
|
86
|
-
}
|
|
87
|
-
if (!result.id) {
|
|
88
|
-
result.id = arg;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
return result;
|
|
92
|
-
}
|
|
93
|
-
function renderTaskList(tasks, now) {
|
|
94
|
-
if (tasks.length === 0) {
|
|
95
|
-
return "No background tasks recorded.";
|
|
96
|
-
}
|
|
97
|
-
const lines = [];
|
|
98
|
-
lines.push("Background tasks:");
|
|
99
|
-
for (const task of tasks) {
|
|
100
|
-
const endTime = task.endTime ?? now();
|
|
101
|
-
const duration = formatDuration(endTime - task.startTime);
|
|
102
|
-
lines.push(`- ${task.id} • ${task.toolName} • ${task.status} • ${duration}`);
|
|
103
|
-
}
|
|
104
|
-
return lines.join("\n");
|
|
105
|
-
}
|
|
106
|
-
function renderTaskDetails(task, now, running) {
|
|
107
|
-
const endTime = task.endTime ?? now();
|
|
108
|
-
const duration = formatDuration(endTime - task.startTime);
|
|
109
|
-
const sections = [];
|
|
110
|
-
sections.push(`Task: ${task.id}`);
|
|
111
|
-
sections.push(`Tool: ${task.toolName}`);
|
|
112
|
-
sections.push(`Status: ${task.status}`);
|
|
113
|
-
sections.push(`Started: ${new Date(task.startTime).toISOString()}`);
|
|
114
|
-
sections.push(`Duration: ${duration}`);
|
|
115
|
-
if (task.pid) {
|
|
116
|
-
sections.push(`PID: ${task.pid}`);
|
|
117
|
-
}
|
|
118
|
-
if (task.command) {
|
|
119
|
-
sections.push(`Command: ${task.command}`);
|
|
120
|
-
}
|
|
121
|
-
if (task.worktreePath) {
|
|
122
|
-
sections.push(`Worktree: ${task.worktreePath}`);
|
|
123
|
-
}
|
|
124
|
-
sections.push("Args:");
|
|
125
|
-
sections.push(JSON.stringify(task.args, null, 2));
|
|
126
|
-
if (task.result) {
|
|
127
|
-
sections.push("");
|
|
128
|
-
sections.push("Result:");
|
|
129
|
-
sections.push(task.result);
|
|
130
|
-
}
|
|
131
|
-
if (task.error) {
|
|
132
|
-
sections.push("");
|
|
133
|
-
sections.push("Error:");
|
|
134
|
-
sections.push(task.error);
|
|
135
|
-
}
|
|
136
|
-
const runningIds = running.filter((item) => item.status === "running").map((item) => item.id);
|
|
137
|
-
if (runningIds.length > 0) {
|
|
138
|
-
sections.push("");
|
|
139
|
-
sections.push("Running tasks:");
|
|
140
|
-
sections.push(runningIds.join(", "));
|
|
141
|
-
}
|
|
142
|
-
return sections.join("\n");
|
|
143
|
-
}
|
|
144
|
-
async function renderTaskLogs(task, fs) {
|
|
145
|
-
if (!fs.existsSync(task.logFile)) {
|
|
146
|
-
return `No logs available for ${task.id}.`;
|
|
147
|
-
}
|
|
148
|
-
const content = await fs.promises.readFile(task.logFile, "utf8");
|
|
149
|
-
return `Logs for ${task.id}:\n${content}`;
|
|
150
|
-
}
|
|
151
|
-
async function renderTaskFollow(task, options) {
|
|
152
|
-
const updates = options.registry.readProgress(task.id);
|
|
153
|
-
const lines = ["Progress:"];
|
|
154
|
-
for (const update of updates) {
|
|
155
|
-
lines.push(formatProgressLine(update));
|
|
156
|
-
}
|
|
157
|
-
if (task.status === "running") {
|
|
158
|
-
lines.push("");
|
|
159
|
-
lines.push("Waiting for task to complete...");
|
|
160
|
-
const resolved = await options.registry.waitForTask(task.id, (update) => lines.push(formatProgressLine(update)));
|
|
161
|
-
if (resolved) {
|
|
162
|
-
lines.push("");
|
|
163
|
-
lines.push(resolved.result
|
|
164
|
-
? `Completed: ${resolved.result}`
|
|
165
|
-
: resolved.error
|
|
166
|
-
? `Failed: ${resolved.error}`
|
|
167
|
-
: "Task finished.");
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
return lines.join("\n");
|
|
171
|
-
}
|
|
172
|
-
function formatProgressLine(update) {
|
|
173
|
-
const timestamp = new Date(update.timestamp).toISOString();
|
|
174
|
-
if (update.type === "progress") {
|
|
175
|
-
return `[${timestamp}] ${update.message ?? ""}`;
|
|
176
|
-
}
|
|
177
|
-
if (update.type === "complete") {
|
|
178
|
-
return `[${timestamp}] ✅ ${update.result ?? "Done"}`;
|
|
179
|
-
}
|
|
180
|
-
return `[${timestamp}] ❌ ${update.error ?? "Failed"}`;
|
|
181
|
-
}
|
|
182
|
-
function formatDuration(input) {
|
|
183
|
-
if (input < 0) {
|
|
184
|
-
return "0s";
|
|
185
|
-
}
|
|
186
|
-
const seconds = Math.floor(input / 1000);
|
|
187
|
-
if (seconds < 60) {
|
|
188
|
-
return `${seconds}s`;
|
|
189
|
-
}
|
|
190
|
-
const minutes = Math.floor(seconds / 60);
|
|
191
|
-
if (minutes < 60) {
|
|
192
|
-
const remainder = seconds - minutes * 60;
|
|
193
|
-
return `${minutes}m ${remainder}s`;
|
|
194
|
-
}
|
|
195
|
-
const hours = Math.floor(minutes / 60);
|
|
196
|
-
const remainderMinutes = minutes - hours * 60;
|
|
197
|
-
return `${hours}h ${remainderMinutes}m`;
|
|
198
|
-
}
|
|
199
|
-
//# sourceMappingURL=interactive-tasks.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"interactive-tasks.js","sourceRoot":"","sources":["../../src/cli/interactive-tasks.ts"],"names":[],"mappings":"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"}
|