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.
Files changed (245) hide show
  1. package/README.md +64 -0
  2. package/dist/cli/api-client.d.ts +14 -0
  3. package/dist/cli/api-client.js +140 -0
  4. package/dist/cli/api-client.js.map +1 -0
  5. package/dist/cli/chat.d.ts +32 -0
  6. package/dist/cli/chat.js +2 -0
  7. package/dist/cli/chat.js.map +1 -0
  8. package/dist/cli/command-runner.d.ts +2 -0
  9. package/dist/cli/command-runner.js +37 -0
  10. package/dist/cli/command-runner.js.map +1 -0
  11. package/dist/cli/commands/agent.d.ts +18 -0
  12. package/dist/cli/commands/agent.js +84 -0
  13. package/dist/cli/commands/agent.js.map +1 -0
  14. package/dist/cli/commands/configure-agents.d.ts +3 -0
  15. package/dist/cli/commands/configure-agents.js +72 -0
  16. package/dist/cli/commands/configure-agents.js.map +1 -0
  17. package/dist/cli/commands/configure.d.ts +11 -0
  18. package/dist/cli/commands/configure.js +150 -0
  19. package/dist/cli/commands/configure.js.map +1 -0
  20. package/dist/cli/commands/init.d.ts +8 -0
  21. package/dist/cli/commands/init.js +45 -0
  22. package/dist/cli/commands/init.js.map +1 -0
  23. package/dist/cli/commands/interactive.d.ts +3 -0
  24. package/dist/cli/commands/interactive.js +17 -0
  25. package/dist/cli/commands/interactive.js.map +1 -0
  26. package/dist/cli/commands/login.d.ts +6 -0
  27. package/dist/cli/commands/login.js +51 -0
  28. package/dist/cli/commands/login.js.map +1 -0
  29. package/dist/cli/commands/logout.d.ts +3 -0
  30. package/dist/cli/commands/logout.js +31 -0
  31. package/dist/cli/commands/logout.js.map +1 -0
  32. package/dist/cli/commands/prerequisites.d.ts +3 -0
  33. package/dist/cli/commands/prerequisites.js +23 -0
  34. package/dist/cli/commands/prerequisites.js.map +1 -0
  35. package/dist/cli/commands/query.d.ts +7 -0
  36. package/dist/cli/commands/query.js +46 -0
  37. package/dist/cli/commands/query.js.map +1 -0
  38. package/dist/cli/commands/remove.d.ts +6 -0
  39. package/dist/cli/commands/remove.js +80 -0
  40. package/dist/cli/commands/remove.js.map +1 -0
  41. package/dist/cli/commands/root.d.ts +3 -0
  42. package/dist/cli/commands/root.js +7 -0
  43. package/dist/cli/commands/root.js.map +1 -0
  44. package/dist/cli/commands/shared.d.ts +24 -0
  45. package/dist/cli/commands/shared.js +61 -0
  46. package/dist/cli/commands/shared.js.map +1 -0
  47. package/dist/cli/commands/spawn-worktree.d.ts +6 -0
  48. package/dist/cli/commands/spawn-worktree.js +91 -0
  49. package/dist/cli/commands/spawn-worktree.js.map +1 -0
  50. package/dist/cli/commands/spawn.d.ts +7 -0
  51. package/dist/cli/commands/spawn.js +112 -0
  52. package/dist/cli/commands/spawn.js.map +1 -0
  53. package/dist/cli/commands/test.d.ts +6 -0
  54. package/dist/cli/commands/test.js +26 -0
  55. package/dist/cli/commands/test.js.map +1 -0
  56. package/dist/cli/constants.d.ts +10 -0
  57. package/dist/cli/constants.js +11 -0
  58. package/dist/cli/constants.js.map +1 -0
  59. package/dist/cli/container.d.ts +48 -0
  60. package/dist/cli/container.js +94 -0
  61. package/dist/cli/container.js.map +1 -0
  62. package/dist/cli/context.d.ts +37 -0
  63. package/dist/cli/context.js +198 -0
  64. package/dist/cli/context.js.map +1 -0
  65. package/dist/cli/environment.d.ts +19 -0
  66. package/dist/cli/environment.js +26 -0
  67. package/dist/cli/environment.js.map +1 -0
  68. package/dist/cli/error-logger.d.ts +46 -0
  69. package/dist/cli/error-logger.js +137 -0
  70. package/dist/cli/error-logger.js.map +1 -0
  71. package/dist/cli/errors.d.ts +91 -0
  72. package/dist/cli/errors.js +128 -0
  73. package/dist/cli/errors.js.map +1 -0
  74. package/dist/cli/file-mentions.d.ts +13 -0
  75. package/dist/cli/file-mentions.js +87 -0
  76. package/dist/cli/file-mentions.js.map +1 -0
  77. package/dist/cli/file-picker-state.d.ts +14 -0
  78. package/dist/cli/file-picker-state.js +23 -0
  79. package/dist/cli/file-picker-state.js.map +1 -0
  80. package/dist/cli/http.d.ts +11 -0
  81. package/dist/cli/http.js +2 -0
  82. package/dist/cli/http.js.map +1 -0
  83. package/dist/cli/interactive-command-runner.d.ts +11 -0
  84. package/dist/cli/interactive-command-runner.js +142 -0
  85. package/dist/cli/interactive-command-runner.js.map +1 -0
  86. package/dist/cli/interactive-launcher.d.ts +2 -0
  87. package/dist/cli/interactive-launcher.js +404 -0
  88. package/dist/cli/interactive-launcher.js.map +1 -0
  89. package/dist/cli/interactive-tasks.d.ts +7 -0
  90. package/dist/cli/interactive-tasks.js +199 -0
  91. package/dist/cli/interactive-tasks.js.map +1 -0
  92. package/dist/cli/interactive.d.ts +19 -0
  93. package/dist/cli/interactive.js +479 -0
  94. package/dist/cli/interactive.js.map +1 -0
  95. package/dist/cli/logger.d.ts +26 -0
  96. package/dist/cli/logger.js +87 -0
  97. package/dist/cli/logger.js.map +1 -0
  98. package/dist/cli/markdown-renderer.d.ts +27 -0
  99. package/dist/cli/markdown-renderer.js +178 -0
  100. package/dist/cli/markdown-renderer.js.map +1 -0
  101. package/dist/cli/markdown-renderer.test.d.ts +1 -0
  102. package/dist/cli/markdown-renderer.test.js +105 -0
  103. package/dist/cli/markdown-renderer.test.js.map +1 -0
  104. package/dist/cli/options.d.ts +30 -0
  105. package/dist/cli/options.js +84 -0
  106. package/dist/cli/options.js.map +1 -0
  107. package/dist/cli/program.d.ts +4 -0
  108. package/dist/cli/program.js +64 -0
  109. package/dist/cli/program.js.map +1 -0
  110. package/dist/cli/prompts.d.ts +23 -0
  111. package/dist/cli/prompts.js +58 -0
  112. package/dist/cli/prompts.js.map +1 -0
  113. package/dist/cli/service-registry.d.ts +33 -0
  114. package/dist/cli/service-registry.js +35 -0
  115. package/dist/cli/service-registry.js.map +1 -0
  116. package/dist/cli/telemetry.d.ts +15 -0
  117. package/dist/cli/telemetry.js +45 -0
  118. package/dist/cli/telemetry.js.map +1 -0
  119. package/dist/cli/types.d.ts +2 -0
  120. package/dist/cli/types.js +2 -0
  121. package/dist/cli/types.js.map +1 -0
  122. package/dist/commands/init.d.ts +9 -0
  123. package/dist/commands/init.js +43 -0
  124. package/dist/commands/init.js.map +1 -0
  125. package/dist/commands/publish-placeholder.d.ts +8 -0
  126. package/dist/commands/publish-placeholder.js +50 -0
  127. package/dist/commands/publish-placeholder.js.map +1 -0
  128. package/dist/commands/spawn-worktree.d.ts +25 -0
  129. package/dist/commands/spawn-worktree.js +139 -0
  130. package/dist/commands/spawn-worktree.js.map +1 -0
  131. package/dist/index.d.ts +4 -0
  132. package/dist/index.js +81 -0
  133. package/dist/index.js.map +1 -0
  134. package/dist/providers/claude-code-adapter.d.ts +20 -0
  135. package/dist/providers/claude-code-adapter.js +48 -0
  136. package/dist/providers/claude-code-adapter.js.map +1 -0
  137. package/dist/providers/codex-adapter.d.ts +19 -0
  138. package/dist/providers/codex-adapter.js +49 -0
  139. package/dist/providers/codex-adapter.js.map +1 -0
  140. package/dist/providers/index.d.ts +2 -0
  141. package/dist/providers/index.js +13 -0
  142. package/dist/providers/index.js.map +1 -0
  143. package/dist/providers/opencode-adapter.d.ts +18 -0
  144. package/dist/providers/opencode-adapter.js +45 -0
  145. package/dist/providers/opencode-adapter.js.map +1 -0
  146. package/dist/providers/roo-code-adapter.d.ts +19 -0
  147. package/dist/providers/roo-code-adapter.js +70 -0
  148. package/dist/providers/roo-code-adapter.js.map +1 -0
  149. package/dist/services/agent-config-manager.d.ts +32 -0
  150. package/dist/services/agent-config-manager.js +130 -0
  151. package/dist/services/agent-config-manager.js.map +1 -0
  152. package/dist/services/agent-registry.d.ts +27 -0
  153. package/dist/services/agent-registry.js +89 -0
  154. package/dist/services/agent-registry.js.map +1 -0
  155. package/dist/services/agent-session.d.ts +24 -0
  156. package/dist/services/agent-session.js +107 -0
  157. package/dist/services/agent-session.js.map +1 -0
  158. package/dist/services/agent-task-registry.d.ts +131 -0
  159. package/dist/services/agent-task-registry.js +491 -0
  160. package/dist/services/agent-task-registry.js.map +1 -0
  161. package/dist/services/chat.d.ts +94 -0
  162. package/dist/services/chat.js +241 -0
  163. package/dist/services/chat.js.map +1 -0
  164. package/dist/services/claude-code.d.ts +28 -0
  165. package/dist/services/claude-code.js +155 -0
  166. package/dist/services/claude-code.js.map +1 -0
  167. package/dist/services/codex.d.ts +27 -0
  168. package/dist/services/codex.js +231 -0
  169. package/dist/services/codex.js.map +1 -0
  170. package/dist/services/credentials.d.ts +11 -0
  171. package/dist/services/credentials.js +44 -0
  172. package/dist/services/credentials.js.map +1 -0
  173. package/dist/services/mcp-client.d.ts +38 -0
  174. package/dist/services/mcp-client.js +170 -0
  175. package/dist/services/mcp-client.js.map +1 -0
  176. package/dist/services/mcp-manager.d.ts +28 -0
  177. package/dist/services/mcp-manager.js +157 -0
  178. package/dist/services/mcp-manager.js.map +1 -0
  179. package/dist/services/model-strategy.d.ts +99 -0
  180. package/dist/services/model-strategy.js +182 -0
  181. package/dist/services/model-strategy.js.map +1 -0
  182. package/dist/services/opencode.d.ts +25 -0
  183. package/dist/services/opencode.js +161 -0
  184. package/dist/services/opencode.js.map +1 -0
  185. package/dist/services/poe-code.d.ts +7 -0
  186. package/dist/services/poe-code.js +5 -0
  187. package/dist/services/poe-code.js.map +1 -0
  188. package/dist/services/roo-code.d.ts +22 -0
  189. package/dist/services/roo-code.js +134 -0
  190. package/dist/services/roo-code.js.map +1 -0
  191. package/dist/services/service-install.d.ts +21 -0
  192. package/dist/services/service-install.js +47 -0
  193. package/dist/services/service-install.js.map +1 -0
  194. package/dist/services/service-manifest.d.ts +122 -0
  195. package/dist/services/service-manifest.js +368 -0
  196. package/dist/services/service-manifest.js.map +1 -0
  197. package/dist/services/task-logger.d.ts +24 -0
  198. package/dist/services/task-logger.js +73 -0
  199. package/dist/services/task-logger.js.map +1 -0
  200. package/dist/services/task-runner.d.ts +19 -0
  201. package/dist/services/task-runner.js +157 -0
  202. package/dist/services/task-runner.js.map +1 -0
  203. package/dist/services/tools.d.ts +76 -0
  204. package/dist/services/tools.js +870 -0
  205. package/dist/services/tools.js.map +1 -0
  206. package/dist/templates/claude-code/anthropic_key.sh.hbs +2 -0
  207. package/dist/templates/codex/config.toml.hbs +9 -0
  208. package/dist/templates/python/env.hbs +3 -0
  209. package/dist/templates/python/main.py.hbs +17 -0
  210. package/dist/templates/python/requirements.txt.hbs +2 -0
  211. package/dist/utils/backup.d.ts +5 -0
  212. package/dist/utils/backup.js +61 -0
  213. package/dist/utils/backup.js.map +1 -0
  214. package/dist/utils/command-line.d.ts +1 -0
  215. package/dist/utils/command-line.js +54 -0
  216. package/dist/utils/command-line.js.map +1 -0
  217. package/dist/utils/dry-run.d.ts +38 -0
  218. package/dist/utils/dry-run.js +211 -0
  219. package/dist/utils/dry-run.js.map +1 -0
  220. package/dist/utils/e2e-flags.d.ts +1 -0
  221. package/dist/utils/e2e-flags.js +9 -0
  222. package/dist/utils/e2e-flags.js.map +1 -0
  223. package/dist/utils/file-system.d.ts +21 -0
  224. package/dist/utils/file-system.js +2 -0
  225. package/dist/utils/file-system.js.map +1 -0
  226. package/dist/utils/json.d.ts +12 -0
  227. package/dist/utils/json.js +42 -0
  228. package/dist/utils/json.js.map +1 -0
  229. package/dist/utils/prerequisites.d.ts +41 -0
  230. package/dist/utils/prerequisites.js +92 -0
  231. package/dist/utils/prerequisites.js.map +1 -0
  232. package/dist/utils/templates.d.ts +4 -0
  233. package/dist/utils/templates.js +22 -0
  234. package/dist/utils/templates.js.map +1 -0
  235. package/dist/utils/toml.d.ts +8 -0
  236. package/dist/utils/toml.js +30 -0
  237. package/dist/utils/toml.js.map +1 -0
  238. package/dist/utils/worktree.d.ts +40 -0
  239. package/dist/utils/worktree.js +179 -0
  240. package/dist/utils/worktree.js.map +1 -0
  241. package/package.json +84 -0
  242. package/shared/conversation-layout.cjs +11 -0
  243. package/shared/conversation-layout.d.ts +7 -0
  244. package/shared/conversation-layout.js +11 -0
  245. package/shared/package.json +13 -0
@@ -0,0 +1,241 @@
1
+ import { ModelStrategyFactory, StrategyConfigManager, } from "./model-strategy.js";
2
+ export class PoeChatService {
3
+ constructor(apiKey, model = "Claude-Sonnet-4.5", toolExecutor, onToolCall, systemPrompt, taskRegistry) {
4
+ this.conversationHistory = [];
5
+ this.strategyEnabled = false;
6
+ this.apiKey = apiKey;
7
+ this.baseUrl = "https://api.poe.com/v1";
8
+ this.currentModel = model;
9
+ this.toolExecutor = toolExecutor;
10
+ this.onToolCall = onToolCall;
11
+ this.taskRegistry = taskRegistry;
12
+ // Load saved strategy configuration
13
+ const savedConfig = StrategyConfigManager.loadConfig();
14
+ if (savedConfig) {
15
+ this.modelStrategy = ModelStrategyFactory.createStrategy(savedConfig);
16
+ // Enable strategy if it's not a fixed strategy with the same model
17
+ this.strategyEnabled = !(savedConfig.type === "fixed" && savedConfig.fixedModel === model);
18
+ }
19
+ // Add system prompt if provided
20
+ if (systemPrompt) {
21
+ this.conversationHistory.push({
22
+ role: "system",
23
+ content: systemPrompt
24
+ });
25
+ }
26
+ }
27
+ setToolCallCallback(callback) {
28
+ this.onToolCall = callback;
29
+ }
30
+ setModel(model) {
31
+ this.currentModel = model;
32
+ }
33
+ getModel() {
34
+ return this.currentModel;
35
+ }
36
+ setStrategy(config) {
37
+ this.modelStrategy = ModelStrategyFactory.createStrategy(config);
38
+ this.strategyEnabled = true;
39
+ StrategyConfigManager.saveConfig(config);
40
+ }
41
+ getStrategy() {
42
+ return this.modelStrategy;
43
+ }
44
+ getStrategyInfo() {
45
+ if (!this.modelStrategy) {
46
+ return "No strategy enabled (using fixed model)";
47
+ }
48
+ return `${this.modelStrategy.getName()}: ${this.modelStrategy.getDescription()}`;
49
+ }
50
+ disableStrategy() {
51
+ this.strategyEnabled = false;
52
+ }
53
+ enableStrategy() {
54
+ if (this.modelStrategy) {
55
+ this.strategyEnabled = true;
56
+ }
57
+ }
58
+ isStrategyEnabled() {
59
+ return this.strategyEnabled;
60
+ }
61
+ getHistory() {
62
+ return [...this.conversationHistory];
63
+ }
64
+ clearHistory() {
65
+ this.conversationHistory = [];
66
+ }
67
+ addSystemMessage(content) {
68
+ this.conversationHistory.push({
69
+ role: "system",
70
+ content
71
+ });
72
+ }
73
+ async sendMessage(userMessage, tools, options) {
74
+ this.injectCompletedTasks();
75
+ // Add user message to history
76
+ this.conversationHistory.push({
77
+ role: "user",
78
+ content: userMessage
79
+ });
80
+ // Use strategy to select model if enabled
81
+ if (this.strategyEnabled && this.modelStrategy) {
82
+ const context = this.detectMessageContext(userMessage);
83
+ const selectedModel = this.modelStrategy.getNextModel(context);
84
+ this.currentModel = selectedModel;
85
+ }
86
+ let attempts = 0;
87
+ const maxAttempts = 100;
88
+ while (attempts < maxAttempts) {
89
+ const response = await this.makeApiRequest(tools, options?.signal);
90
+ const assistantMessage = response.choices[0].message;
91
+ this.conversationHistory.push(assistantMessage);
92
+ // Check if the model wants to call tools
93
+ if (assistantMessage.tool_calls &&
94
+ assistantMessage.tool_calls.length > 0 &&
95
+ this.toolExecutor) {
96
+ // Execute all tool calls
97
+ for (const toolCall of assistantMessage.tool_calls) {
98
+ let result;
99
+ let error;
100
+ try {
101
+ const args = JSON.parse(toolCall.function.arguments);
102
+ // Notify callback that tool call is starting
103
+ if (this.onToolCall) {
104
+ this.onToolCall({
105
+ toolName: toolCall.function.name,
106
+ args
107
+ });
108
+ }
109
+ result = await this.toolExecutor.executeTool(toolCall.function.name, args);
110
+ // Notify callback of success
111
+ if (this.onToolCall) {
112
+ this.onToolCall({
113
+ toolName: toolCall.function.name,
114
+ args,
115
+ result
116
+ });
117
+ }
118
+ // Add tool result to conversation
119
+ this.conversationHistory.push({
120
+ role: "tool",
121
+ tool_call_id: toolCall.id,
122
+ name: toolCall.function.name,
123
+ content: result
124
+ });
125
+ }
126
+ catch (err) {
127
+ error = err instanceof Error ? err.message : String(err);
128
+ // Notify callback of error
129
+ if (this.onToolCall) {
130
+ this.onToolCall({
131
+ toolName: toolCall.function.name,
132
+ args: JSON.parse(toolCall.function.arguments),
133
+ error
134
+ });
135
+ }
136
+ // Add error as tool result
137
+ this.conversationHistory.push({
138
+ role: "tool",
139
+ tool_call_id: toolCall.id,
140
+ name: toolCall.function.name,
141
+ content: `Error: ${error}`
142
+ });
143
+ }
144
+ }
145
+ // Continue the conversation with tool results
146
+ attempts++;
147
+ continue;
148
+ }
149
+ // No more tool calls, return the final message
150
+ if (assistantMessage.content && assistantMessage.content.length > 0) {
151
+ options?.onChunk?.(assistantMessage.content);
152
+ }
153
+ return assistantMessage;
154
+ }
155
+ throw new Error("Maximum tool call iterations reached");
156
+ }
157
+ injectCompletedTasks() {
158
+ if (!this.taskRegistry) {
159
+ return;
160
+ }
161
+ const completed = this.taskRegistry.getCompletedTasks();
162
+ if (completed.length === 0) {
163
+ return;
164
+ }
165
+ for (const task of completed) {
166
+ const symbol = task.status === "completed" ? "✅" : task.status === "failed" ? "❌" : "⏹";
167
+ const details = task.result ?? task.error ?? "Task finished.";
168
+ this.conversationHistory.push({
169
+ role: "system",
170
+ content: `${symbol} Task ${task.id} finished\n\n${details}`
171
+ });
172
+ }
173
+ this.taskRegistry.clearCompleted();
174
+ }
175
+ detectMessageContext(message) {
176
+ const lowerMessage = message.toLowerCase();
177
+ // Detect code-related keywords
178
+ const codeKeywords = [
179
+ "code", "function", "class", "implement", "debug", "error",
180
+ "refactor", "optimize", "algorithm", "bug", "fix", "compile",
181
+ "typescript", "javascript", "python", "java", "react", "component"
182
+ ];
183
+ // Detect reasoning keywords
184
+ const reasoningKeywords = [
185
+ "why", "how", "explain", "analyze", "compare", "evaluate",
186
+ "reasoning", "logic", "understand", "clarify"
187
+ ];
188
+ const hasCodeKeywords = codeKeywords.some(keyword => lowerMessage.includes(keyword));
189
+ const hasReasoningKeywords = reasoningKeywords.some(keyword => lowerMessage.includes(keyword));
190
+ // Determine message type
191
+ let messageType = "general";
192
+ if (hasCodeKeywords) {
193
+ messageType = "code";
194
+ }
195
+ else if (hasReasoningKeywords) {
196
+ messageType = "reasoning";
197
+ }
198
+ else if (message.length < 100) {
199
+ messageType = "chat";
200
+ }
201
+ // Determine complexity based on message length and structure
202
+ let complexity = "medium";
203
+ if (message.length > 500 || message.split("\n").length > 10) {
204
+ complexity = "complex";
205
+ }
206
+ else if (message.length < 100) {
207
+ complexity = "simple";
208
+ }
209
+ return {
210
+ messageType,
211
+ complexity,
212
+ previousModel: this.currentModel
213
+ };
214
+ }
215
+ async makeApiRequest(tools, signal) {
216
+ const request = {
217
+ model: this.currentModel,
218
+ messages: this.conversationHistory,
219
+ temperature: 0.7
220
+ };
221
+ if (tools && tools.length > 0) {
222
+ request.tools = tools;
223
+ }
224
+ const response = await fetch(`${this.baseUrl}/chat/completions`, {
225
+ method: "POST",
226
+ headers: {
227
+ "Content-Type": "application/json",
228
+ Authorization: `Bearer ${this.apiKey}`
229
+ },
230
+ body: JSON.stringify(request),
231
+ signal
232
+ });
233
+ if (!response.ok) {
234
+ const errorText = await response.text();
235
+ throw new Error(`Poe API request failed (${response.status}): ${errorText}`);
236
+ }
237
+ const result = await response.json();
238
+ return result;
239
+ }
240
+ }
241
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/services/chat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { FileSystem } from "../utils/file-system.js";
2
+ import type { CommandRunner, CommandRunnerResult, PrerequisiteDefinition, PrerequisiteManager } from "../utils/prerequisites.js";
3
+ import { type ServiceRunOptions } from "./service-manifest.js";
4
+ import { type InstallContext } from "./service-install.js";
5
+ export interface ConfigureClaudeCodeOptions {
6
+ fs: FileSystem;
7
+ apiKey: string;
8
+ settingsPath: string;
9
+ keyHelperPath: string;
10
+ credentialsPath: string;
11
+ defaultModel: string;
12
+ }
13
+ export interface RemoveClaudeCodeOptions {
14
+ fs: FileSystem;
15
+ settingsPath: string;
16
+ keyHelperPath: string;
17
+ }
18
+ export interface SpawnClaudeCodeOptions {
19
+ prompt: string;
20
+ args?: string[];
21
+ runCommand: CommandRunner;
22
+ }
23
+ export declare function configureClaudeCode(options: ConfigureClaudeCodeOptions, runOptions?: ServiceRunOptions): Promise<void>;
24
+ export declare function spawnClaudeCode(options: SpawnClaudeCodeOptions): Promise<CommandRunnerResult>;
25
+ export declare function removeClaudeCode(options: RemoveClaudeCodeOptions, runOptions?: ServiceRunOptions): Promise<boolean>;
26
+ export declare function registerClaudeCodePrerequisites(prerequisites: PrerequisiteManager): void;
27
+ export declare function installClaudeCode(context: InstallContext): Promise<boolean>;
28
+ export declare function createClaudeCliBinaryCheck(): PrerequisiteDefinition;
@@ -0,0 +1,155 @@
1
+ import path from "node:path";
2
+ import { createBinaryExistsCheck } from "../utils/prerequisites.js";
3
+ import { ensureDirectory, jsonMergeMutation, jsonPruneMutation, runServiceConfigure, runServiceRemove, writeTemplateMutation } from "./service-manifest.js";
4
+ import { runServiceInstall } from "./service-install.js";
5
+ import { CLAUDE_MODEL_OPUS, CLAUDE_MODEL_SONNET, CLAUDE_MODEL_HAIKU } from "../cli/constants.js";
6
+ const KEY_HELPER_TEMPLATE_ID = "claude-code/anthropic_key.sh.hbs";
7
+ const KEY_HELPER_MODE = 0o700;
8
+ const CLAUDE_ENV_SHAPE = {
9
+ apiKeyHelper: true,
10
+ env: {
11
+ ANTHROPIC_BASE_URL: true,
12
+ ANTHROPIC_DEFAULT_HAIKU_MODEL: true,
13
+ ANTHROPIC_DEFAULT_SONNET_MODEL: true,
14
+ ANTHROPIC_DEFAULT_OPUS_MODEL: true
15
+ },
16
+ model: true
17
+ };
18
+ const CLAUDE_CODE_MANIFEST = {
19
+ id: "claude-code",
20
+ summary: "Configure Claude Code to route through Poe.",
21
+ prerequisites: {
22
+ after: ["claude-cli-health"]
23
+ },
24
+ configure: [
25
+ ensureDirectory({
26
+ path: ({ options }) => path.dirname(options.settingsPath),
27
+ label: "Ensure Claude settings directory"
28
+ }),
29
+ writeTemplateMutation({
30
+ target: ({ options }) => options.keyHelperPath,
31
+ templateId: KEY_HELPER_TEMPLATE_ID,
32
+ context: ({ options }) => ({
33
+ credentialsPathLiteral: toSingleQuotedLiteral(options.credentialsPath)
34
+ }),
35
+ label: "Write API key helper script"
36
+ }),
37
+ createChmodMutation(),
38
+ jsonMergeMutation({
39
+ target: ({ options }) => options.settingsPath,
40
+ label: "Merge Claude settings",
41
+ value: ({ options }) => ({
42
+ apiKeyHelper: options.keyHelperPath,
43
+ env: {
44
+ ANTHROPIC_BASE_URL: "https://api.poe.com",
45
+ ANTHROPIC_DEFAULT_HAIKU_MODEL: CLAUDE_MODEL_HAIKU,
46
+ ANTHROPIC_DEFAULT_SONNET_MODEL: CLAUDE_MODEL_SONNET,
47
+ ANTHROPIC_DEFAULT_OPUS_MODEL: CLAUDE_MODEL_OPUS
48
+ },
49
+ model: options.defaultModel
50
+ })
51
+ })
52
+ ],
53
+ remove: [
54
+ jsonPruneMutation({
55
+ target: ({ options }) => options.settingsPath,
56
+ label: "Prune Claude settings",
57
+ shape: () => CLAUDE_ENV_SHAPE
58
+ }),
59
+ removeKeyHelperMutation()
60
+ ]
61
+ };
62
+ const CLAUDE_CODE_INSTALL_DEFINITION = {
63
+ id: "claude-code",
64
+ summary: "Claude CLI",
65
+ check: createClaudeCliBinaryCheck(),
66
+ steps: [
67
+ {
68
+ id: "install-claude-cli-npm",
69
+ description: "Install Claude CLI via npm",
70
+ command: "npm",
71
+ args: ["install", "-g", "@anthropic-ai/claude-code"]
72
+ }
73
+ ],
74
+ successMessage: "Installed Claude CLI via npm."
75
+ };
76
+ function createChmodMutation() {
77
+ return {
78
+ kind: "transformFile",
79
+ target: ({ options }) => options.keyHelperPath,
80
+ label: "Make API key helper executable",
81
+ async transform({ content, context }) {
82
+ if (typeof context.fs.chmod === "function" &&
83
+ content != null) {
84
+ await context.fs.chmod(context.options.keyHelperPath, KEY_HELPER_MODE);
85
+ }
86
+ return { content, changed: false };
87
+ }
88
+ };
89
+ }
90
+ function removeKeyHelperMutation() {
91
+ return {
92
+ kind: "removeFile",
93
+ target: ({ options }) => options.keyHelperPath,
94
+ label: "Remove API key helper script"
95
+ };
96
+ }
97
+ function toSingleQuotedLiteral(targetPath) {
98
+ const escaped = targetPath.replace(/'/g, `'\\''`);
99
+ return `'${escaped}'`;
100
+ }
101
+ export async function configureClaudeCode(options, runOptions) {
102
+ await runServiceConfigure(CLAUDE_CODE_MANIFEST, {
103
+ fs: options.fs,
104
+ options
105
+ }, runOptions);
106
+ }
107
+ export async function spawnClaudeCode(options) {
108
+ const defaults = [
109
+ "-p",
110
+ options.prompt,
111
+ "--allowedTools",
112
+ "Bash,Read",
113
+ "--permission-mode",
114
+ "acceptEdits",
115
+ "--output-format",
116
+ "text"
117
+ ];
118
+ const args = [...defaults, ...(options.args ?? [])];
119
+ return options.runCommand("claude", args);
120
+ }
121
+ export async function removeClaudeCode(options, runOptions) {
122
+ return runServiceRemove(CLAUDE_CODE_MANIFEST, {
123
+ fs: options.fs,
124
+ options
125
+ }, runOptions);
126
+ }
127
+ export function registerClaudeCodePrerequisites(prerequisites) {
128
+ prerequisites.registerAfter(createClaudeCliHealthCheck());
129
+ }
130
+ export async function installClaudeCode(context) {
131
+ return runServiceInstall(CLAUDE_CODE_INSTALL_DEFINITION, context);
132
+ }
133
+ export function createClaudeCliBinaryCheck() {
134
+ return createBinaryExistsCheck("claude", "claude-cli-binary", "Claude CLI binary must exist");
135
+ }
136
+ function createClaudeCliHealthCheck() {
137
+ return {
138
+ id: "claude-cli-health",
139
+ description: "Claude CLI health check must succeed",
140
+ async run({ runCommand }) {
141
+ const result = await spawnClaudeCode({
142
+ prompt: "Output exactly: CLAUDE_CODE_OK",
143
+ runCommand
144
+ });
145
+ if (result.exitCode !== 0) {
146
+ throw new Error(`Claude CLI health check failed with exit code ${result.exitCode}.`);
147
+ }
148
+ const output = result.stdout.trim();
149
+ if (output !== "CLAUDE_CODE_OK") {
150
+ throw new Error(`Claude CLI health check failed: expected "CLAUDE_CODE_OK" but received "${output}".`);
151
+ }
152
+ }
153
+ };
154
+ }
155
+ //# sourceMappingURL=claude-code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/services/claude-code.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
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 ConfigureCodexOptions {
6
+ fs: FileSystem;
7
+ configPath: string;
8
+ apiKey: string;
9
+ model: string;
10
+ reasoningEffort: string;
11
+ timestamp?: () => string;
12
+ }
13
+ export interface RemoveCodexOptions {
14
+ fs: FileSystem;
15
+ configPath: string;
16
+ }
17
+ export interface SpawnCodexOptions {
18
+ prompt: string;
19
+ args?: string[];
20
+ runCommand: CommandRunner;
21
+ }
22
+ export declare function configureCodex(options: ConfigureCodexOptions, runOptions?: ServiceRunOptions): Promise<void>;
23
+ export declare function spawnCodex(options: SpawnCodexOptions): Promise<CommandRunnerResult>;
24
+ export declare function removeCodex(options: RemoveCodexOptions, runOptions?: ServiceRunOptions): Promise<boolean>;
25
+ export declare function installCodex(context: InstallContext): Promise<boolean>;
26
+ export declare function registerCodexPrerequisites(prerequisites: PrerequisiteManager): void;
27
+ export declare function buildCodexExecArgs(prompt: string, extraArgs?: string[]): string[];