poe-code 0.1.26
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 +64 -0
- package/dist/cli/api-client.d.ts +14 -0
- package/dist/cli/api-client.js +140 -0
- package/dist/cli/api-client.js.map +1 -0
- package/dist/cli/chat.d.ts +32 -0
- package/dist/cli/chat.js +2 -0
- package/dist/cli/chat.js.map +1 -0
- package/dist/cli/command-runner.d.ts +2 -0
- package/dist/cli/command-runner.js +37 -0
- package/dist/cli/command-runner.js.map +1 -0
- package/dist/cli/commands/agent.d.ts +18 -0
- package/dist/cli/commands/agent.js +84 -0
- package/dist/cli/commands/agent.js.map +1 -0
- package/dist/cli/commands/configure-agents.d.ts +3 -0
- package/dist/cli/commands/configure-agents.js +72 -0
- package/dist/cli/commands/configure-agents.js.map +1 -0
- package/dist/cli/commands/configure.d.ts +11 -0
- package/dist/cli/commands/configure.js +150 -0
- package/dist/cli/commands/configure.js.map +1 -0
- package/dist/cli/commands/init.d.ts +8 -0
- package/dist/cli/commands/init.js +45 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/interactive.d.ts +3 -0
- package/dist/cli/commands/interactive.js +17 -0
- package/dist/cli/commands/interactive.js.map +1 -0
- package/dist/cli/commands/login.d.ts +6 -0
- package/dist/cli/commands/login.js +51 -0
- package/dist/cli/commands/login.js.map +1 -0
- package/dist/cli/commands/logout.d.ts +3 -0
- package/dist/cli/commands/logout.js +31 -0
- package/dist/cli/commands/logout.js.map +1 -0
- package/dist/cli/commands/prerequisites.d.ts +3 -0
- package/dist/cli/commands/prerequisites.js +23 -0
- package/dist/cli/commands/prerequisites.js.map +1 -0
- package/dist/cli/commands/query.d.ts +7 -0
- package/dist/cli/commands/query.js +46 -0
- package/dist/cli/commands/query.js.map +1 -0
- package/dist/cli/commands/remove.d.ts +6 -0
- package/dist/cli/commands/remove.js +80 -0
- package/dist/cli/commands/remove.js.map +1 -0
- package/dist/cli/commands/root.d.ts +3 -0
- package/dist/cli/commands/root.js +7 -0
- package/dist/cli/commands/root.js.map +1 -0
- package/dist/cli/commands/shared.d.ts +24 -0
- package/dist/cli/commands/shared.js +61 -0
- package/dist/cli/commands/shared.js.map +1 -0
- package/dist/cli/commands/spawn-worktree.d.ts +6 -0
- package/dist/cli/commands/spawn-worktree.js +91 -0
- package/dist/cli/commands/spawn-worktree.js.map +1 -0
- package/dist/cli/commands/spawn.d.ts +7 -0
- package/dist/cli/commands/spawn.js +112 -0
- package/dist/cli/commands/spawn.js.map +1 -0
- package/dist/cli/commands/test.d.ts +6 -0
- package/dist/cli/commands/test.js +26 -0
- package/dist/cli/commands/test.js.map +1 -0
- package/dist/cli/constants.d.ts +10 -0
- package/dist/cli/constants.js +11 -0
- package/dist/cli/constants.js.map +1 -0
- package/dist/cli/container.d.ts +48 -0
- package/dist/cli/container.js +94 -0
- package/dist/cli/container.js.map +1 -0
- package/dist/cli/context.d.ts +37 -0
- package/dist/cli/context.js +198 -0
- package/dist/cli/context.js.map +1 -0
- package/dist/cli/environment.d.ts +19 -0
- package/dist/cli/environment.js +26 -0
- package/dist/cli/environment.js.map +1 -0
- package/dist/cli/error-logger.d.ts +46 -0
- package/dist/cli/error-logger.js +137 -0
- package/dist/cli/error-logger.js.map +1 -0
- package/dist/cli/errors.d.ts +91 -0
- package/dist/cli/errors.js +128 -0
- package/dist/cli/errors.js.map +1 -0
- package/dist/cli/file-mentions.d.ts +13 -0
- package/dist/cli/file-mentions.js +87 -0
- package/dist/cli/file-mentions.js.map +1 -0
- package/dist/cli/file-picker-state.d.ts +14 -0
- package/dist/cli/file-picker-state.js +23 -0
- package/dist/cli/file-picker-state.js.map +1 -0
- package/dist/cli/http.d.ts +11 -0
- package/dist/cli/http.js +2 -0
- package/dist/cli/http.js.map +1 -0
- package/dist/cli/interactive-command-runner.d.ts +11 -0
- package/dist/cli/interactive-command-runner.js +142 -0
- package/dist/cli/interactive-command-runner.js.map +1 -0
- package/dist/cli/interactive-launcher.d.ts +2 -0
- package/dist/cli/interactive-launcher.js +404 -0
- package/dist/cli/interactive-launcher.js.map +1 -0
- package/dist/cli/interactive-tasks.d.ts +7 -0
- package/dist/cli/interactive-tasks.js +199 -0
- package/dist/cli/interactive-tasks.js.map +1 -0
- package/dist/cli/interactive.d.ts +19 -0
- package/dist/cli/interactive.js +479 -0
- package/dist/cli/interactive.js.map +1 -0
- package/dist/cli/logger.d.ts +26 -0
- package/dist/cli/logger.js +87 -0
- package/dist/cli/logger.js.map +1 -0
- package/dist/cli/markdown-renderer.d.ts +27 -0
- package/dist/cli/markdown-renderer.js +178 -0
- package/dist/cli/markdown-renderer.js.map +1 -0
- package/dist/cli/markdown-renderer.test.d.ts +1 -0
- package/dist/cli/markdown-renderer.test.js +105 -0
- package/dist/cli/markdown-renderer.test.js.map +1 -0
- package/dist/cli/options.d.ts +30 -0
- package/dist/cli/options.js +84 -0
- package/dist/cli/options.js.map +1 -0
- package/dist/cli/program.d.ts +4 -0
- package/dist/cli/program.js +64 -0
- package/dist/cli/program.js.map +1 -0
- package/dist/cli/prompts.d.ts +23 -0
- package/dist/cli/prompts.js +58 -0
- package/dist/cli/prompts.js.map +1 -0
- package/dist/cli/service-registry.d.ts +33 -0
- package/dist/cli/service-registry.js +35 -0
- package/dist/cli/service-registry.js.map +1 -0
- package/dist/cli/telemetry.d.ts +15 -0
- package/dist/cli/telemetry.js +45 -0
- package/dist/cli/telemetry.js.map +1 -0
- package/dist/cli/types.d.ts +2 -0
- package/dist/cli/types.js +2 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/commands/init.d.ts +9 -0
- package/dist/commands/init.js +43 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/publish-placeholder.d.ts +8 -0
- package/dist/commands/publish-placeholder.js +50 -0
- package/dist/commands/publish-placeholder.js.map +1 -0
- package/dist/commands/spawn-worktree.d.ts +25 -0
- package/dist/commands/spawn-worktree.js +139 -0
- package/dist/commands/spawn-worktree.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +81 -0
- package/dist/index.js.map +1 -0
- package/dist/providers/claude-code-adapter.d.ts +20 -0
- package/dist/providers/claude-code-adapter.js +48 -0
- package/dist/providers/claude-code-adapter.js.map +1 -0
- package/dist/providers/codex-adapter.d.ts +19 -0
- package/dist/providers/codex-adapter.js +49 -0
- package/dist/providers/codex-adapter.js.map +1 -0
- package/dist/providers/index.d.ts +2 -0
- package/dist/providers/index.js +13 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/opencode-adapter.d.ts +18 -0
- package/dist/providers/opencode-adapter.js +45 -0
- package/dist/providers/opencode-adapter.js.map +1 -0
- package/dist/providers/roo-code-adapter.d.ts +19 -0
- package/dist/providers/roo-code-adapter.js +70 -0
- package/dist/providers/roo-code-adapter.js.map +1 -0
- package/dist/services/agent-config-manager.d.ts +32 -0
- package/dist/services/agent-config-manager.js +130 -0
- package/dist/services/agent-config-manager.js.map +1 -0
- package/dist/services/agent-registry.d.ts +27 -0
- package/dist/services/agent-registry.js +89 -0
- package/dist/services/agent-registry.js.map +1 -0
- package/dist/services/agent-session.d.ts +24 -0
- package/dist/services/agent-session.js +107 -0
- package/dist/services/agent-session.js.map +1 -0
- package/dist/services/agent-task-registry.d.ts +131 -0
- package/dist/services/agent-task-registry.js +491 -0
- package/dist/services/agent-task-registry.js.map +1 -0
- package/dist/services/chat.d.ts +94 -0
- package/dist/services/chat.js +241 -0
- package/dist/services/chat.js.map +1 -0
- package/dist/services/claude-code.d.ts +28 -0
- package/dist/services/claude-code.js +155 -0
- package/dist/services/claude-code.js.map +1 -0
- package/dist/services/codex.d.ts +27 -0
- package/dist/services/codex.js +231 -0
- package/dist/services/codex.js.map +1 -0
- package/dist/services/credentials.d.ts +11 -0
- package/dist/services/credentials.js +44 -0
- package/dist/services/credentials.js.map +1 -0
- package/dist/services/mcp-client.d.ts +38 -0
- package/dist/services/mcp-client.js +170 -0
- package/dist/services/mcp-client.js.map +1 -0
- package/dist/services/mcp-manager.d.ts +28 -0
- package/dist/services/mcp-manager.js +157 -0
- package/dist/services/mcp-manager.js.map +1 -0
- package/dist/services/model-strategy.d.ts +99 -0
- package/dist/services/model-strategy.js +182 -0
- package/dist/services/model-strategy.js.map +1 -0
- package/dist/services/opencode.d.ts +25 -0
- package/dist/services/opencode.js +161 -0
- package/dist/services/opencode.js.map +1 -0
- package/dist/services/poe-code.d.ts +7 -0
- package/dist/services/poe-code.js +5 -0
- package/dist/services/poe-code.js.map +1 -0
- package/dist/services/roo-code.d.ts +22 -0
- package/dist/services/roo-code.js +134 -0
- package/dist/services/roo-code.js.map +1 -0
- package/dist/services/service-install.d.ts +21 -0
- package/dist/services/service-install.js +47 -0
- package/dist/services/service-install.js.map +1 -0
- package/dist/services/service-manifest.d.ts +122 -0
- package/dist/services/service-manifest.js +368 -0
- package/dist/services/service-manifest.js.map +1 -0
- package/dist/services/task-logger.d.ts +24 -0
- package/dist/services/task-logger.js +73 -0
- package/dist/services/task-logger.js.map +1 -0
- package/dist/services/task-runner.d.ts +19 -0
- package/dist/services/task-runner.js +157 -0
- package/dist/services/task-runner.js.map +1 -0
- package/dist/services/tools.d.ts +76 -0
- package/dist/services/tools.js +870 -0
- package/dist/services/tools.js.map +1 -0
- package/dist/templates/claude-code/anthropic_key.sh.hbs +2 -0
- package/dist/templates/codex/config.toml.hbs +9 -0
- package/dist/templates/python/env.hbs +3 -0
- package/dist/templates/python/main.py.hbs +17 -0
- package/dist/templates/python/requirements.txt.hbs +2 -0
- package/dist/utils/backup.d.ts +5 -0
- package/dist/utils/backup.js +61 -0
- package/dist/utils/backup.js.map +1 -0
- package/dist/utils/command-line.d.ts +1 -0
- package/dist/utils/command-line.js +54 -0
- package/dist/utils/command-line.js.map +1 -0
- package/dist/utils/dry-run.d.ts +38 -0
- package/dist/utils/dry-run.js +211 -0
- package/dist/utils/dry-run.js.map +1 -0
- package/dist/utils/e2e-flags.d.ts +1 -0
- package/dist/utils/e2e-flags.js +9 -0
- package/dist/utils/e2e-flags.js.map +1 -0
- package/dist/utils/file-system.d.ts +21 -0
- package/dist/utils/file-system.js +2 -0
- package/dist/utils/file-system.js.map +1 -0
- package/dist/utils/json.d.ts +12 -0
- package/dist/utils/json.js +42 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/prerequisites.d.ts +41 -0
- package/dist/utils/prerequisites.js +92 -0
- package/dist/utils/prerequisites.js.map +1 -0
- package/dist/utils/templates.d.ts +4 -0
- package/dist/utils/templates.js +22 -0
- package/dist/utils/templates.js.map +1 -0
- package/dist/utils/toml.d.ts +8 -0
- package/dist/utils/toml.js +30 -0
- package/dist/utils/toml.js.map +1 -0
- package/dist/utils/worktree.d.ts +40 -0
- package/dist/utils/worktree.js +179 -0
- package/dist/utils/worktree.js.map +1 -0
- package/package.json +84 -0
- package/shared/conversation-layout.cjs +11 -0
- package/shared/conversation-layout.d.ts +7 -0
- package/shared/conversation-layout.js +11 -0
- package/shared/package.json +13 -0
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { McpClient } from "./mcp-client.js";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
export class McpManager {
|
|
4
|
+
constructor(fs, homeDir) {
|
|
5
|
+
this.clients = new Map();
|
|
6
|
+
this.fs = fs;
|
|
7
|
+
this.configPath = path.join(homeDir, ".poe-code", "mcp-servers.json");
|
|
8
|
+
}
|
|
9
|
+
async loadConfig() {
|
|
10
|
+
try {
|
|
11
|
+
const content = await this.fs.readFile(this.configPath, "utf8");
|
|
12
|
+
return JSON.parse(content);
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
// Config doesn't exist, return empty
|
|
16
|
+
return { servers: [] };
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
async saveConfig(config) {
|
|
20
|
+
const dir = path.dirname(this.configPath);
|
|
21
|
+
try {
|
|
22
|
+
await this.fs.stat(dir);
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
await this.fs.mkdir(dir, { recursive: true });
|
|
26
|
+
}
|
|
27
|
+
await this.fs.writeFile(this.configPath, JSON.stringify(config, null, 2), { encoding: "utf8" });
|
|
28
|
+
}
|
|
29
|
+
async addServer(config) {
|
|
30
|
+
const currentConfig = await this.loadConfig();
|
|
31
|
+
// Check if server already exists
|
|
32
|
+
const existingIndex = currentConfig.servers.findIndex((s) => s.name === config.name);
|
|
33
|
+
if (existingIndex >= 0) {
|
|
34
|
+
currentConfig.servers[existingIndex] = config;
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
currentConfig.servers.push(config);
|
|
38
|
+
}
|
|
39
|
+
await this.saveConfig(currentConfig);
|
|
40
|
+
}
|
|
41
|
+
async removeServer(name) {
|
|
42
|
+
const currentConfig = await this.loadConfig();
|
|
43
|
+
const initialLength = currentConfig.servers.length;
|
|
44
|
+
currentConfig.servers = currentConfig.servers.filter((s) => s.name !== name);
|
|
45
|
+
if (currentConfig.servers.length < initialLength) {
|
|
46
|
+
await this.saveConfig(currentConfig);
|
|
47
|
+
// Also disconnect the client if running
|
|
48
|
+
await this.disconnectServer(name);
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
async connectServer(name) {
|
|
54
|
+
const config = await this.loadConfig();
|
|
55
|
+
const serverConfig = config.servers.find((s) => s.name === name);
|
|
56
|
+
if (!serverConfig) {
|
|
57
|
+
throw new Error(`MCP server "${name}" not found in configuration`);
|
|
58
|
+
}
|
|
59
|
+
if (this.clients.has(name)) {
|
|
60
|
+
throw new Error(`MCP server "${name}" is already connected`);
|
|
61
|
+
}
|
|
62
|
+
const client = new McpClient(serverConfig);
|
|
63
|
+
client.on("error", (error) => {
|
|
64
|
+
console.error(`[MCP ${name}] Error:`, error);
|
|
65
|
+
});
|
|
66
|
+
client.on("log", (message) => {
|
|
67
|
+
console.log(`[MCP ${name}]`, message);
|
|
68
|
+
});
|
|
69
|
+
client.on("close", () => {
|
|
70
|
+
this.clients.delete(name);
|
|
71
|
+
});
|
|
72
|
+
await client.connect();
|
|
73
|
+
this.clients.set(name, client);
|
|
74
|
+
}
|
|
75
|
+
async disconnectServer(name) {
|
|
76
|
+
const client = this.clients.get(name);
|
|
77
|
+
if (client) {
|
|
78
|
+
await client.disconnect();
|
|
79
|
+
this.clients.delete(name);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
async connectAll() {
|
|
83
|
+
const config = await this.loadConfig();
|
|
84
|
+
for (const serverConfig of config.servers) {
|
|
85
|
+
try {
|
|
86
|
+
if (!this.clients.has(serverConfig.name)) {
|
|
87
|
+
await this.connectServer(serverConfig.name);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
console.error(`Failed to connect to MCP server "${serverConfig.name}":`, error);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
async disconnectAll() {
|
|
96
|
+
const names = Array.from(this.clients.keys());
|
|
97
|
+
for (const name of names) {
|
|
98
|
+
await this.disconnectServer(name);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
getAllTools() {
|
|
102
|
+
const tools = [];
|
|
103
|
+
for (const [serverName, client] of this.clients.entries()) {
|
|
104
|
+
if (!client.isConnected())
|
|
105
|
+
continue;
|
|
106
|
+
const mcpTools = client.getTools();
|
|
107
|
+
for (const mcpTool of mcpTools) {
|
|
108
|
+
tools.push({
|
|
109
|
+
type: "function",
|
|
110
|
+
function: {
|
|
111
|
+
name: `mcp__${serverName}__${mcpTool.name}`,
|
|
112
|
+
description: `[MCP: ${serverName}] ${mcpTool.description}`,
|
|
113
|
+
parameters: {
|
|
114
|
+
type: "object",
|
|
115
|
+
properties: mcpTool.inputSchema.properties,
|
|
116
|
+
required: mcpTool.inputSchema.required
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return tools;
|
|
123
|
+
}
|
|
124
|
+
async executeTool(toolName, args) {
|
|
125
|
+
// Tool name format: mcp__<servername>__<toolname>
|
|
126
|
+
if (!toolName.startsWith("mcp__")) {
|
|
127
|
+
throw new Error(`Not an MCP tool: ${toolName}`);
|
|
128
|
+
}
|
|
129
|
+
const parts = toolName.substring(5).split("__");
|
|
130
|
+
if (parts.length !== 2) {
|
|
131
|
+
throw new Error(`Invalid MCP tool name format: ${toolName}`);
|
|
132
|
+
}
|
|
133
|
+
const [serverName, actualToolName] = parts;
|
|
134
|
+
const client = this.clients.get(serverName);
|
|
135
|
+
if (!client || !client.isConnected()) {
|
|
136
|
+
throw new Error(`MCP server "${serverName}" is not connected`);
|
|
137
|
+
}
|
|
138
|
+
return await client.callTool(actualToolName, args);
|
|
139
|
+
}
|
|
140
|
+
getConnectedServers() {
|
|
141
|
+
return Array.from(this.clients.keys()).filter((name) => this.clients.get(name)?.isConnected());
|
|
142
|
+
}
|
|
143
|
+
async listServers() {
|
|
144
|
+
const config = await this.loadConfig();
|
|
145
|
+
return config.servers.map((server) => {
|
|
146
|
+
const client = this.clients.get(server.name);
|
|
147
|
+
const connected = client?.isConnected() || false;
|
|
148
|
+
const toolCount = connected ? client.getTools().length : 0;
|
|
149
|
+
return {
|
|
150
|
+
name: server.name,
|
|
151
|
+
connected,
|
|
152
|
+
toolCount
|
|
153
|
+
};
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=mcp-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-manager.js","sourceRoot":"","sources":["../../src/services/mcp-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Available model identifiers
|
|
3
|
+
*/
|
|
4
|
+
export declare const AVAILABLE_MODELS: readonly ["Claude-Sonnet-4.5", "GPT-5", "GPT-4o", "Claude-3.5-Sonnet", "GPT-5-Codex"];
|
|
5
|
+
export type ModelIdentifier = (typeof AVAILABLE_MODELS)[number];
|
|
6
|
+
/**
|
|
7
|
+
* Strategy types for model selection
|
|
8
|
+
*/
|
|
9
|
+
export type StrategyType = "mixed" | "smart" | "fixed" | "round-robin";
|
|
10
|
+
/**
|
|
11
|
+
* Configuration for model strategy
|
|
12
|
+
*/
|
|
13
|
+
export interface StrategyConfig {
|
|
14
|
+
type: StrategyType;
|
|
15
|
+
fixedModel?: ModelIdentifier;
|
|
16
|
+
customOrder?: ModelIdentifier[];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Base interface for all model strategies
|
|
20
|
+
*/
|
|
21
|
+
export interface ModelStrategy {
|
|
22
|
+
getNextModel(context?: ModelContext): ModelIdentifier;
|
|
23
|
+
getName(): string;
|
|
24
|
+
getDescription(): string;
|
|
25
|
+
reset(): void;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Context for smart model selection
|
|
29
|
+
*/
|
|
30
|
+
export interface ModelContext {
|
|
31
|
+
messageType?: "code" | "chat" | "reasoning" | "general";
|
|
32
|
+
complexity?: "simple" | "medium" | "complex";
|
|
33
|
+
previousModel?: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Mixed strategy: alternates between GPT-5 and Claude-Sonnet-4.5
|
|
37
|
+
*/
|
|
38
|
+
export declare class MixedStrategy implements ModelStrategy {
|
|
39
|
+
private currentIndex;
|
|
40
|
+
private models;
|
|
41
|
+
getNextModel(): ModelIdentifier;
|
|
42
|
+
getName(): string;
|
|
43
|
+
getDescription(): string;
|
|
44
|
+
reset(): void;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Smart strategy: selects model based on task type
|
|
48
|
+
*/
|
|
49
|
+
export declare class SmartStrategy implements ModelStrategy {
|
|
50
|
+
private lastModel;
|
|
51
|
+
getNextModel(context?: ModelContext): ModelIdentifier;
|
|
52
|
+
getName(): string;
|
|
53
|
+
getDescription(): string;
|
|
54
|
+
reset(): void;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Fixed strategy: always uses the same model
|
|
58
|
+
*/
|
|
59
|
+
export declare class FixedStrategy implements ModelStrategy {
|
|
60
|
+
private model;
|
|
61
|
+
constructor(model?: ModelIdentifier);
|
|
62
|
+
getNextModel(): ModelIdentifier;
|
|
63
|
+
setModel(model: ModelIdentifier): void;
|
|
64
|
+
getName(): string;
|
|
65
|
+
getDescription(): string;
|
|
66
|
+
reset(): void;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Round-robin strategy: cycles through all available models
|
|
70
|
+
*/
|
|
71
|
+
export declare class RoundRobinStrategy implements ModelStrategy {
|
|
72
|
+
private currentIndex;
|
|
73
|
+
private models;
|
|
74
|
+
constructor(models?: ModelIdentifier[]);
|
|
75
|
+
getNextModel(): ModelIdentifier;
|
|
76
|
+
getName(): string;
|
|
77
|
+
getDescription(): string;
|
|
78
|
+
reset(): void;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Factory for creating model strategies
|
|
82
|
+
*/
|
|
83
|
+
export declare class ModelStrategyFactory {
|
|
84
|
+
static createStrategy(config: StrategyConfig): ModelStrategy;
|
|
85
|
+
static getAvailableStrategies(): Array<{
|
|
86
|
+
type: StrategyType;
|
|
87
|
+
description: string;
|
|
88
|
+
}>;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Manager for persisting and loading strategy configuration
|
|
92
|
+
*/
|
|
93
|
+
export declare class StrategyConfigManager {
|
|
94
|
+
private static CONFIG_DIR;
|
|
95
|
+
private static CONFIG_FILE;
|
|
96
|
+
static saveConfig(config: StrategyConfig): void;
|
|
97
|
+
static loadConfig(): StrategyConfig | null;
|
|
98
|
+
static getDefaultConfig(): StrategyConfig;
|
|
99
|
+
}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import * as fs from "fs";
|
|
2
|
+
import * as path from "path";
|
|
3
|
+
import * as os from "os";
|
|
4
|
+
/**
|
|
5
|
+
* Available model identifiers
|
|
6
|
+
*/
|
|
7
|
+
export const AVAILABLE_MODELS = [
|
|
8
|
+
"Claude-Sonnet-4.5",
|
|
9
|
+
"GPT-5",
|
|
10
|
+
"GPT-4o",
|
|
11
|
+
"Claude-3.5-Sonnet",
|
|
12
|
+
"GPT-5-Codex",
|
|
13
|
+
];
|
|
14
|
+
/**
|
|
15
|
+
* Mixed strategy: alternates between GPT-5 and Claude-Sonnet-4.5
|
|
16
|
+
*/
|
|
17
|
+
export class MixedStrategy {
|
|
18
|
+
constructor() {
|
|
19
|
+
this.currentIndex = 0;
|
|
20
|
+
this.models = ["GPT-5", "Claude-Sonnet-4.5"];
|
|
21
|
+
}
|
|
22
|
+
getNextModel() {
|
|
23
|
+
const model = this.models[this.currentIndex];
|
|
24
|
+
this.currentIndex = (this.currentIndex + 1) % this.models.length;
|
|
25
|
+
return model;
|
|
26
|
+
}
|
|
27
|
+
getName() {
|
|
28
|
+
return "mixed";
|
|
29
|
+
}
|
|
30
|
+
getDescription() {
|
|
31
|
+
return "Alternates between GPT-5 and Claude-Sonnet-4.5 on each call";
|
|
32
|
+
}
|
|
33
|
+
reset() {
|
|
34
|
+
this.currentIndex = 0;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Smart strategy: selects model based on task type
|
|
39
|
+
*/
|
|
40
|
+
export class SmartStrategy {
|
|
41
|
+
constructor() {
|
|
42
|
+
this.lastModel = "Claude-Sonnet-4.5";
|
|
43
|
+
}
|
|
44
|
+
getNextModel(context) {
|
|
45
|
+
if (!context) {
|
|
46
|
+
return "Claude-Sonnet-4.5";
|
|
47
|
+
}
|
|
48
|
+
// Smart selection based on context
|
|
49
|
+
if (context.messageType === "code" || context.messageType === "reasoning") {
|
|
50
|
+
// Use GPT-5 for complex coding and reasoning tasks
|
|
51
|
+
if (context.complexity === "complex") {
|
|
52
|
+
this.lastModel = "GPT-5";
|
|
53
|
+
return "GPT-5";
|
|
54
|
+
}
|
|
55
|
+
// Use Claude for medium complexity code
|
|
56
|
+
this.lastModel = "Claude-Sonnet-4.5";
|
|
57
|
+
return "Claude-Sonnet-4.5";
|
|
58
|
+
}
|
|
59
|
+
if (context.messageType === "chat") {
|
|
60
|
+
// Use GPT-4o for general chat
|
|
61
|
+
this.lastModel = "GPT-4o";
|
|
62
|
+
return "GPT-4o";
|
|
63
|
+
}
|
|
64
|
+
// Default to Claude
|
|
65
|
+
this.lastModel = "Claude-Sonnet-4.5";
|
|
66
|
+
return "Claude-Sonnet-4.5";
|
|
67
|
+
}
|
|
68
|
+
getName() {
|
|
69
|
+
return "smart";
|
|
70
|
+
}
|
|
71
|
+
getDescription() {
|
|
72
|
+
return "Intelligently selects model based on task complexity and type";
|
|
73
|
+
}
|
|
74
|
+
reset() {
|
|
75
|
+
this.lastModel = "Claude-Sonnet-4.5";
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Fixed strategy: always uses the same model
|
|
80
|
+
*/
|
|
81
|
+
export class FixedStrategy {
|
|
82
|
+
constructor(model = "Claude-Sonnet-4.5") {
|
|
83
|
+
this.model = model;
|
|
84
|
+
}
|
|
85
|
+
getNextModel() {
|
|
86
|
+
return this.model;
|
|
87
|
+
}
|
|
88
|
+
setModel(model) {
|
|
89
|
+
this.model = model;
|
|
90
|
+
}
|
|
91
|
+
getName() {
|
|
92
|
+
return "fixed";
|
|
93
|
+
}
|
|
94
|
+
getDescription() {
|
|
95
|
+
return `Always uses ${this.model}`;
|
|
96
|
+
}
|
|
97
|
+
reset() {
|
|
98
|
+
// No state to reset
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Round-robin strategy: cycles through all available models
|
|
103
|
+
*/
|
|
104
|
+
export class RoundRobinStrategy {
|
|
105
|
+
constructor(models) {
|
|
106
|
+
this.currentIndex = 0;
|
|
107
|
+
this.models = models || [...AVAILABLE_MODELS];
|
|
108
|
+
}
|
|
109
|
+
getNextModel() {
|
|
110
|
+
const model = this.models[this.currentIndex];
|
|
111
|
+
this.currentIndex = (this.currentIndex + 1) % this.models.length;
|
|
112
|
+
return model;
|
|
113
|
+
}
|
|
114
|
+
getName() {
|
|
115
|
+
return "round-robin";
|
|
116
|
+
}
|
|
117
|
+
getDescription() {
|
|
118
|
+
return `Cycles through: ${this.models.join(", ")}`;
|
|
119
|
+
}
|
|
120
|
+
reset() {
|
|
121
|
+
this.currentIndex = 0;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Factory for creating model strategies
|
|
126
|
+
*/
|
|
127
|
+
export class ModelStrategyFactory {
|
|
128
|
+
static createStrategy(config) {
|
|
129
|
+
switch (config.type) {
|
|
130
|
+
case "mixed":
|
|
131
|
+
return new MixedStrategy();
|
|
132
|
+
case "smart":
|
|
133
|
+
return new SmartStrategy();
|
|
134
|
+
case "fixed":
|
|
135
|
+
return new FixedStrategy(config.fixedModel);
|
|
136
|
+
case "round-robin":
|
|
137
|
+
return new RoundRobinStrategy(config.customOrder);
|
|
138
|
+
default:
|
|
139
|
+
return new MixedStrategy();
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
static getAvailableStrategies() {
|
|
143
|
+
return [
|
|
144
|
+
{ type: "mixed", description: "Alternate between GPT-5 and Claude-Sonnet-4.5" },
|
|
145
|
+
{ type: "smart", description: "Intelligently select based on task type" },
|
|
146
|
+
{ type: "fixed", description: "Always use the same model" },
|
|
147
|
+
{ type: "round-robin", description: "Cycle through all available models" },
|
|
148
|
+
];
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Manager for persisting and loading strategy configuration
|
|
153
|
+
*/
|
|
154
|
+
export class StrategyConfigManager {
|
|
155
|
+
static saveConfig(config) {
|
|
156
|
+
if (!fs.existsSync(this.CONFIG_DIR)) {
|
|
157
|
+
fs.mkdirSync(this.CONFIG_DIR, { recursive: true });
|
|
158
|
+
}
|
|
159
|
+
fs.writeFileSync(this.CONFIG_FILE, JSON.stringify(config, null, 2));
|
|
160
|
+
}
|
|
161
|
+
static loadConfig() {
|
|
162
|
+
try {
|
|
163
|
+
if (fs.existsSync(this.CONFIG_FILE)) {
|
|
164
|
+
const data = fs.readFileSync(this.CONFIG_FILE, "utf-8");
|
|
165
|
+
return JSON.parse(data);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
console.error("Failed to load strategy config:", error);
|
|
170
|
+
}
|
|
171
|
+
return null;
|
|
172
|
+
}
|
|
173
|
+
static getDefaultConfig() {
|
|
174
|
+
return {
|
|
175
|
+
type: "fixed",
|
|
176
|
+
fixedModel: "Claude-Sonnet-4.5",
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
StrategyConfigManager.CONFIG_DIR = path.join(os.homedir(), ".poe-code");
|
|
181
|
+
StrategyConfigManager.CONFIG_FILE = path.join(StrategyConfigManager.CONFIG_DIR, "strategy-config.json");
|
|
182
|
+
//# sourceMappingURL=model-strategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-strategy.js","sourceRoot":"","sources":["../../src/services/model-strategy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { FileSystem } from "../utils/file-system.js";
|
|
2
|
+
import type { CommandRunner, CommandRunnerResult, PrerequisiteManager } from "../utils/prerequisites.js";
|
|
3
|
+
import { type ServiceRunOptions } from "./service-manifest.js";
|
|
4
|
+
import { type InstallContext } from "./service-install.js";
|
|
5
|
+
export interface ConfigureOpenCodeOptions {
|
|
6
|
+
fs: FileSystem;
|
|
7
|
+
configPath: string;
|
|
8
|
+
authPath: string;
|
|
9
|
+
apiKey: string;
|
|
10
|
+
}
|
|
11
|
+
export interface RemoveOpenCodeOptions {
|
|
12
|
+
fs: FileSystem;
|
|
13
|
+
configPath: string;
|
|
14
|
+
authPath: string;
|
|
15
|
+
}
|
|
16
|
+
export interface SpawnOpenCodeOptions {
|
|
17
|
+
prompt: string;
|
|
18
|
+
args?: string[];
|
|
19
|
+
runCommand: CommandRunner;
|
|
20
|
+
}
|
|
21
|
+
export declare function configureOpenCode(options: ConfigureOpenCodeOptions, runOptions?: ServiceRunOptions): Promise<void>;
|
|
22
|
+
export declare function spawnOpenCode(options: SpawnOpenCodeOptions): Promise<CommandRunnerResult>;
|
|
23
|
+
export declare function removeOpenCode(options: RemoveOpenCodeOptions, runOptions?: ServiceRunOptions): Promise<boolean>;
|
|
24
|
+
export declare function installOpenCode(context: InstallContext): Promise<boolean>;
|
|
25
|
+
export declare function registerOpenCodePrerequisites(prerequisites: PrerequisiteManager): void;
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { createBinaryExistsCheck, formatCommandRunnerResult } from "../utils/prerequisites.js";
|
|
3
|
+
import { ensureDirectory, jsonMergeMutation, jsonPruneMutation, removeFileMutation, runServiceConfigure, runServiceRemove } from "./service-manifest.js";
|
|
4
|
+
import { runServiceInstall } from "./service-install.js";
|
|
5
|
+
const OPEN_CODE_CONFIG_TEMPLATE = {
|
|
6
|
+
$schema: "https://opencode.ai/config.json",
|
|
7
|
+
provider: {
|
|
8
|
+
poe: {
|
|
9
|
+
npm: "@ai-sdk/openai-compatible",
|
|
10
|
+
name: "poe.com",
|
|
11
|
+
options: {
|
|
12
|
+
baseURL: "https://api.poe.com/v1"
|
|
13
|
+
},
|
|
14
|
+
models: {
|
|
15
|
+
"Claude-Sonnet-4.5": {
|
|
16
|
+
name: "Claude Sonnet 4.5"
|
|
17
|
+
},
|
|
18
|
+
"GPT-5-Codex": {
|
|
19
|
+
name: "GPT-5-Codex"
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
const OPEN_CODE_CONFIG_SHAPE = {
|
|
26
|
+
provider: {
|
|
27
|
+
poe: true
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
const OPEN_CODE_AUTH_SHAPE = {
|
|
31
|
+
poe: true
|
|
32
|
+
};
|
|
33
|
+
const OPEN_CODE_MANIFEST = {
|
|
34
|
+
id: "opencode",
|
|
35
|
+
summary: "Configure OpenCode CLI to use the Poe API.",
|
|
36
|
+
prerequisites: {
|
|
37
|
+
after: ["opencode-cli-health"]
|
|
38
|
+
},
|
|
39
|
+
configure: [
|
|
40
|
+
ensureDirectory({
|
|
41
|
+
path: ({ options }) => path.dirname(options.configPath),
|
|
42
|
+
label: "Ensure OpenCode config directory"
|
|
43
|
+
}),
|
|
44
|
+
ensureDirectory({
|
|
45
|
+
path: ({ options }) => path.dirname(options.authPath),
|
|
46
|
+
label: "Ensure OpenCode auth directory"
|
|
47
|
+
}),
|
|
48
|
+
jsonMergeMutation({
|
|
49
|
+
target: ({ options }) => options.configPath,
|
|
50
|
+
label: "Merge OpenCode config",
|
|
51
|
+
value: () => OPEN_CODE_CONFIG_TEMPLATE
|
|
52
|
+
}),
|
|
53
|
+
jsonMergeMutation({
|
|
54
|
+
target: ({ options }) => options.authPath,
|
|
55
|
+
label: "Merge OpenCode auth",
|
|
56
|
+
value: ({ options }) => ({
|
|
57
|
+
poe: {
|
|
58
|
+
type: "api",
|
|
59
|
+
key: options.apiKey
|
|
60
|
+
}
|
|
61
|
+
})
|
|
62
|
+
})
|
|
63
|
+
],
|
|
64
|
+
remove: [
|
|
65
|
+
jsonPruneMutation({
|
|
66
|
+
target: ({ options }) => options.configPath,
|
|
67
|
+
label: "Prune OpenCode config",
|
|
68
|
+
shape: () => OPEN_CODE_CONFIG_SHAPE
|
|
69
|
+
}),
|
|
70
|
+
jsonPruneMutation({
|
|
71
|
+
target: ({ options }) => options.authPath,
|
|
72
|
+
label: "Prune OpenCode auth",
|
|
73
|
+
shape: () => OPEN_CODE_AUTH_SHAPE
|
|
74
|
+
}),
|
|
75
|
+
removeFileMutation({
|
|
76
|
+
target: ({ options }) => options.authPath,
|
|
77
|
+
label: "Delete OpenCode auth when empty",
|
|
78
|
+
whenEmpty: true
|
|
79
|
+
})
|
|
80
|
+
]
|
|
81
|
+
};
|
|
82
|
+
const OPEN_CODE_INSTALL_DEFINITION = {
|
|
83
|
+
id: "opencode",
|
|
84
|
+
summary: "OpenCode CLI",
|
|
85
|
+
check: createOpenCodeBinaryCheck(),
|
|
86
|
+
steps: [
|
|
87
|
+
{
|
|
88
|
+
id: "install-opencode-cli-npm",
|
|
89
|
+
description: "Install OpenCode CLI via npm",
|
|
90
|
+
command: "npm",
|
|
91
|
+
args: ["install", "-g", "opencode-ai"]
|
|
92
|
+
}
|
|
93
|
+
],
|
|
94
|
+
postChecks: [createOpenCodeVersionCheck()],
|
|
95
|
+
successMessage: "Installed OpenCode CLI via npm."
|
|
96
|
+
};
|
|
97
|
+
export async function configureOpenCode(options, runOptions) {
|
|
98
|
+
await runServiceConfigure(OPEN_CODE_MANIFEST, {
|
|
99
|
+
fs: options.fs,
|
|
100
|
+
options
|
|
101
|
+
}, runOptions);
|
|
102
|
+
}
|
|
103
|
+
export async function spawnOpenCode(options) {
|
|
104
|
+
const args = ["run", options.prompt, ...(options.args ?? [])];
|
|
105
|
+
return options.runCommand("opencode", args);
|
|
106
|
+
}
|
|
107
|
+
export async function removeOpenCode(options, runOptions) {
|
|
108
|
+
return runServiceRemove(OPEN_CODE_MANIFEST, {
|
|
109
|
+
fs: options.fs,
|
|
110
|
+
options
|
|
111
|
+
}, runOptions);
|
|
112
|
+
}
|
|
113
|
+
export async function installOpenCode(context) {
|
|
114
|
+
return runServiceInstall(OPEN_CODE_INSTALL_DEFINITION, context);
|
|
115
|
+
}
|
|
116
|
+
export function registerOpenCodePrerequisites(prerequisites) {
|
|
117
|
+
prerequisites.registerAfter(createOpenCodeHealthCheck());
|
|
118
|
+
}
|
|
119
|
+
function createOpenCodeBinaryCheck() {
|
|
120
|
+
return createBinaryExistsCheck("opencode", "opencode-cli-binary", "OpenCode CLI binary must exist");
|
|
121
|
+
}
|
|
122
|
+
function createOpenCodeVersionCheck() {
|
|
123
|
+
return {
|
|
124
|
+
id: "opencode-cli-version",
|
|
125
|
+
description: "OpenCode CLI responds to --version",
|
|
126
|
+
async run({ runCommand }) {
|
|
127
|
+
const result = await runCommand("opencode", ["--version"]);
|
|
128
|
+
if (result.exitCode !== 0) {
|
|
129
|
+
throw new Error(`OpenCode CLI --version failed with exit code ${result.exitCode}.`);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
function createOpenCodeHealthCheck() {
|
|
135
|
+
return {
|
|
136
|
+
id: "opencode-cli-health",
|
|
137
|
+
description: "OpenCode CLI health check must succeed",
|
|
138
|
+
async run({ runCommand }) {
|
|
139
|
+
const result = await spawnOpenCode({
|
|
140
|
+
prompt: "Output exactly: OPEN_CODE_OK",
|
|
141
|
+
runCommand
|
|
142
|
+
});
|
|
143
|
+
if (result.exitCode !== 0) {
|
|
144
|
+
const detail = formatCommandRunnerResult(result);
|
|
145
|
+
throw new Error([
|
|
146
|
+
`OpenCode CLI health check failed with exit code ${result.exitCode}.`,
|
|
147
|
+
detail
|
|
148
|
+
].join("\n"));
|
|
149
|
+
}
|
|
150
|
+
const output = result.stdout.trim();
|
|
151
|
+
if (output !== "OPEN_CODE_OK") {
|
|
152
|
+
const detail = formatCommandRunnerResult(result);
|
|
153
|
+
throw new Error([
|
|
154
|
+
`OpenCode CLI health check failed: expected "OPEN_CODE_OK" but received "${output}".`,
|
|
155
|
+
detail
|
|
156
|
+
].join("\n"));
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=opencode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../src/services/opencode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { CommandRunner, CommandRunnerResult } from "../utils/prerequisites.js";
|
|
2
|
+
export interface SpawnPoeCodeOptions {
|
|
3
|
+
prompt: string;
|
|
4
|
+
args?: string[];
|
|
5
|
+
runCommand: CommandRunner;
|
|
6
|
+
}
|
|
7
|
+
export declare function spawnPoeCode(options: SpawnPoeCodeOptions): Promise<CommandRunnerResult>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poe-code.js","sourceRoot":"","sources":["../../src/services/poe-code.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAA4B;IAE5B,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;IAChE,OAAO,MAAM,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AACpD,CAAC"}
|