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
package/README.md ADDED
@@ -0,0 +1,64 @@
1
+ # poe-code
2
+
3
+ > Fast CLI to wire your local dev tools to the Poe API
4
+
5
+ ## Quick Start
6
+
7
+ ```bash
8
+ npm i -g poe-code
9
+ poe-code login
10
+ poe-code configure claude-code
11
+ ```
12
+
13
+ ## Features
14
+
15
+ - 🚀 **90-second setup** for coding agents with Poe API
16
+ - 🤖 **Multiple agents** - Claude Code, Codex, OpenCode
17
+ - 💬 **Interactive mode** for conversational workflows
18
+ - ⚡ **Async spawning** with git worktree support
19
+
20
+ ## Installation
21
+
22
+ ```bash
23
+ npm i -g poe-code
24
+ ```
25
+
26
+ ## Usage
27
+
28
+ ### Authentication
29
+
30
+ ```bash
31
+ poe-code login
32
+ ```
33
+
34
+ ### Configure Coding Agents
35
+
36
+ ```bash
37
+ # Claude Code
38
+ poe-code configure claude-code
39
+
40
+ # Codex
41
+ poe-code configure codex
42
+
43
+ # OpenCode
44
+ poe-code configure opencode
45
+ ```
46
+
47
+ ### Interactive Mode
48
+
49
+ ```bash
50
+ poe-code
51
+ ```
52
+
53
+ ### Non-Interactive Mode
54
+
55
+ ```bash
56
+ poe-code agent "Recommend me Python web framework"
57
+ ```
58
+
59
+ ### Spawn Async Agents
60
+
61
+ ```bash
62
+ poe-code spawn claude-code "What is the best web framework?"
63
+ poe-code spawn-git-worktree claude-code "Build me a random fun game"
64
+ ```
@@ -0,0 +1,14 @@
1
+ import type { HttpClient } from "./http.js";
2
+ export interface VerifyApiKeyOptions {
3
+ apiKey: string;
4
+ }
5
+ export interface QueryOptions {
6
+ apiKey: string;
7
+ model: string;
8
+ prompt: string;
9
+ }
10
+ export interface PoeApiClient {
11
+ verify(options: VerifyApiKeyOptions): Promise<void>;
12
+ query(options: QueryOptions): Promise<string>;
13
+ }
14
+ export declare function createPoeApiClient(client: HttpClient): PoeApiClient;
@@ -0,0 +1,140 @@
1
+ import { ApiError } from "./errors.js";
2
+ const POE_API_ENDPOINT = "https://api.poe.com/v1/chat/completions";
3
+ export function createPoeApiClient(client) {
4
+ const verify = async (options) => {
5
+ const requestBody = {
6
+ model: "EchoBot",
7
+ messages: [{ role: "user", content: "Ping" }]
8
+ };
9
+ let response;
10
+ let responseBody;
11
+ try {
12
+ response = await client(POE_API_ENDPOINT, {
13
+ method: "POST",
14
+ headers: {
15
+ "Content-Type": "application/json",
16
+ Authorization: `Bearer ${options.apiKey}`
17
+ },
18
+ body: JSON.stringify(requestBody)
19
+ });
20
+ responseBody = await response.json();
21
+ if (!response.ok) {
22
+ throw new ApiError("Poe API test failed", {
23
+ httpStatus: response.status,
24
+ endpoint: POE_API_ENDPOINT,
25
+ context: {
26
+ operation: "verify API key",
27
+ requestBody,
28
+ responseBody
29
+ }
30
+ });
31
+ }
32
+ const echoed = extractMessageContent(responseBody);
33
+ if (echoed !== "Ping") {
34
+ throw new ApiError("Poe API test failed: unexpected response payload", {
35
+ httpStatus: response.status,
36
+ endpoint: POE_API_ENDPOINT,
37
+ context: {
38
+ operation: "verify API key",
39
+ expected: "Ping",
40
+ received: echoed,
41
+ responseBody
42
+ }
43
+ });
44
+ }
45
+ }
46
+ catch (error) {
47
+ if (error instanceof ApiError) {
48
+ throw error;
49
+ }
50
+ // Network or other errors
51
+ throw new ApiError(`Failed to connect to Poe API: ${String(error)}`, {
52
+ endpoint: POE_API_ENDPOINT,
53
+ context: {
54
+ operation: "verify API key",
55
+ requestBody,
56
+ originalError: String(error)
57
+ }
58
+ });
59
+ }
60
+ };
61
+ const query = async (options) => {
62
+ const requestBody = {
63
+ model: options.model,
64
+ messages: [{ role: "user", content: options.prompt }]
65
+ };
66
+ let response;
67
+ let responseBody;
68
+ try {
69
+ response = await client(POE_API_ENDPOINT, {
70
+ method: "POST",
71
+ headers: {
72
+ "Content-Type": "application/json",
73
+ Authorization: `Bearer ${options.apiKey}`
74
+ },
75
+ body: JSON.stringify(requestBody)
76
+ });
77
+ responseBody = await response.json();
78
+ if (!response.ok) {
79
+ throw new ApiError("Poe API query failed", {
80
+ httpStatus: response.status,
81
+ endpoint: POE_API_ENDPOINT,
82
+ context: {
83
+ operation: "query",
84
+ model: options.model,
85
+ requestBody,
86
+ responseBody
87
+ }
88
+ });
89
+ }
90
+ const content = extractMessageContent(responseBody);
91
+ if (!content) {
92
+ throw new ApiError("Poe API query failed: missing response content", {
93
+ httpStatus: response.status,
94
+ endpoint: POE_API_ENDPOINT,
95
+ context: {
96
+ operation: "query",
97
+ model: options.model,
98
+ responseBody
99
+ }
100
+ });
101
+ }
102
+ return content;
103
+ }
104
+ catch (error) {
105
+ if (error instanceof ApiError) {
106
+ throw error;
107
+ }
108
+ // Network or other errors
109
+ throw new ApiError(`Failed to connect to Poe API: ${String(error)}`, {
110
+ endpoint: POE_API_ENDPOINT,
111
+ context: {
112
+ operation: "query",
113
+ model: options.model,
114
+ requestBody,
115
+ originalError: String(error)
116
+ }
117
+ });
118
+ }
119
+ };
120
+ return { verify, query };
121
+ }
122
+ function extractMessageContent(payload) {
123
+ if (!isPoeResponse(payload)) {
124
+ return null;
125
+ }
126
+ const [first] = payload.choices;
127
+ if (!first || typeof first !== "object") {
128
+ return null;
129
+ }
130
+ const content = first.message?.content;
131
+ return typeof content === "string" ? content : null;
132
+ }
133
+ function isPoeResponse(value) {
134
+ if (typeof value !== "object" || value === null) {
135
+ return false;
136
+ }
137
+ const candidate = value;
138
+ return Array.isArray(candidate.choices) && candidate.choices.length > 0;
139
+ }
140
+ //# sourceMappingURL=api-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/cli/api-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type { FileSystem } from "../utils/file-system.js";
2
+ import type { AgentTask } from "../services/agent-task-registry.js";
3
+ import type { LoggerFn } from "./types.js";
4
+ export interface AgentToolCallEvent {
5
+ toolName: string;
6
+ args: Record<string, unknown>;
7
+ result?: string;
8
+ error?: string;
9
+ }
10
+ export interface AgentSession {
11
+ getModel?(): string;
12
+ setToolCallCallback?(callback: (event: AgentToolCallEvent) => void): void;
13
+ sendMessage(prompt: string, options?: {
14
+ signal?: AbortSignal;
15
+ onChunk?: (chunk: string) => void;
16
+ }): Promise<{
17
+ content: string;
18
+ }>;
19
+ waitForAllTasks?(): Promise<void>;
20
+ drainCompletedTasks?(): AgentTask[];
21
+ dispose?(): Promise<void> | void;
22
+ }
23
+ export interface ChatServiceFactoryOptions {
24
+ apiKey: string;
25
+ model: string;
26
+ cwd: string;
27
+ homeDir: string;
28
+ fs: FileSystem;
29
+ logger: LoggerFn;
30
+ awaitTasksOnDispose?: boolean;
31
+ }
32
+ export type ChatServiceFactory = (options: ChatServiceFactoryOptions) => Promise<AgentSession> | AgentSession;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/cli/chat.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ import type { CommandRunner } from "../utils/prerequisites.js";
2
+ export declare function createDefaultCommandRunner(): CommandRunner;
@@ -0,0 +1,37 @@
1
+ import { spawn } from "node:child_process";
2
+ export function createDefaultCommandRunner() {
3
+ return async (command, args) => await new Promise((resolve) => {
4
+ const child = spawn(command, args, { stdio: ["ignore", "pipe", "pipe"] });
5
+ let stdout = "";
6
+ let stderr = "";
7
+ child.stdout?.setEncoding("utf8");
8
+ child.stdout?.on("data", (chunk) => {
9
+ stdout += chunk.toString();
10
+ });
11
+ child.stderr?.setEncoding("utf8");
12
+ child.stderr?.on("data", (chunk) => {
13
+ stderr += chunk.toString();
14
+ });
15
+ child.on("error", (error) => {
16
+ const exitCode = typeof error.code === "number"
17
+ ? error.code
18
+ : typeof error.errno === "number"
19
+ ? error.errno
20
+ : 127;
21
+ const message = error instanceof Error ? error.message : String(error ?? "error");
22
+ resolve({
23
+ stdout,
24
+ stderr: stderr ? `${stderr}${message}` : message,
25
+ exitCode
26
+ });
27
+ });
28
+ child.on("close", (code) => {
29
+ resolve({
30
+ stdout,
31
+ stderr,
32
+ exitCode: code ?? 0
33
+ });
34
+ });
35
+ });
36
+ }
37
+ //# sourceMappingURL=command-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-runner.js","sourceRoot":"","sources":["../../src/cli/command-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAM3C,MAAM,UAAU,0BAA0B;IACxC,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAgC,EAAE,CAC3D,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1E,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QAClC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAsB,EAAE,EAAE;YAClD,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QAClC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAsB,EAAE,EAAE;YAClD,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAA4B,EAAE,EAAE;YACjD,MAAM,QAAQ,GACZ,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;gBAC5B,CAAC,CAAC,KAAK,CAAC,IAAI;gBACZ,CAAC,CAAC,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;oBACjC,CAAC,CAAC,KAAK,CAAC,KAAK;oBACb,CAAC,CAAC,GAAG,CAAC;YACV,MAAM,OAAO,GACX,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,CAAC;YACpE,OAAO,CAAC;gBACN,MAAM;gBACN,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO;gBAChD,QAAQ;aACT,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,OAAO,CAAC;gBACN,MAAM;gBACN,MAAM;gBACN,QAAQ,EAAE,IAAI,IAAI,CAAC;aACpB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { Command } from "commander";
2
+ import type { AgentToolCallEvent } from "../chat.js";
3
+ import type { ScopedLogger } from "../logger.js";
4
+ import type { CliContainer } from "../container.js";
5
+ export interface AgentCommandOptions {
6
+ apiKey?: string;
7
+ model?: string;
8
+ }
9
+ export declare function registerAgentCommand(program: Command, container: CliContainer): void;
10
+ export interface AgentConversationOptions {
11
+ container: CliContainer;
12
+ logger: ScopedLogger;
13
+ text: string;
14
+ model: string;
15
+ apiKey: string;
16
+ }
17
+ export declare function runAgentConversation(options: AgentConversationOptions): Promise<string>;
18
+ export declare function logToolCallEvent(event: AgentToolCallEvent, logger: ScopedLogger): void;
@@ -0,0 +1,84 @@
1
+ import { resolveCommandFlags } from "./shared.js";
2
+ import { DEFAULT_QUERY_MODEL } from "../constants.js";
3
+ export function registerAgentCommand(program, container) {
4
+ program
5
+ .command("agent")
6
+ .description("Run a single Poe agent prompt with local tooling support.")
7
+ .argument("<text>", "Prompt text to send to the agent")
8
+ .option("--model <model>", "Model identifier", DEFAULT_QUERY_MODEL)
9
+ .option("--api-key <key>", "Poe API key")
10
+ .action(async (text, options) => {
11
+ const flags = resolveCommandFlags(program);
12
+ const logger = container.loggerFactory.create({
13
+ dryRun: flags.dryRun,
14
+ verbose: flags.verbose,
15
+ scope: "agent"
16
+ });
17
+ const model = options.model ?? DEFAULT_QUERY_MODEL;
18
+ if (flags.dryRun) {
19
+ logger.dryRun(`would run agent with model "${model}" and prompt "${text}".`);
20
+ return;
21
+ }
22
+ const apiKey = await container.options.resolveApiKey({
23
+ value: options.apiKey,
24
+ dryRun: flags.dryRun
25
+ });
26
+ const message = await runAgentConversation({
27
+ container,
28
+ logger,
29
+ text,
30
+ model,
31
+ apiKey
32
+ });
33
+ logger.info(message);
34
+ });
35
+ }
36
+ export async function runAgentConversation(options) {
37
+ const session = await options.container.chatServiceFactory({
38
+ apiKey: options.apiKey,
39
+ model: options.model,
40
+ cwd: options.container.env.cwd,
41
+ homeDir: options.container.env.homeDir,
42
+ fs: options.container.fs,
43
+ logger: (message) => options.logger.info(message),
44
+ awaitTasksOnDispose: true
45
+ });
46
+ try {
47
+ if ("setToolCallCallback" in session && session.setToolCallCallback) {
48
+ session.setToolCallCallback((event) => logToolCallEvent(event, options.logger));
49
+ }
50
+ const response = await session.sendMessage(options.text);
51
+ if ("waitForAllTasks" in session && typeof session.waitForAllTasks === "function") {
52
+ await session.waitForAllTasks();
53
+ }
54
+ if ("drainCompletedTasks" in session && typeof session.drainCompletedTasks === "function") {
55
+ const completed = session.drainCompletedTasks();
56
+ for (const task of completed) {
57
+ const summary = task.result ?? task.error ?? "Task finished.";
58
+ options.logger.info(`Task ${task.id} finished (${task.toolName}): ${summary}`);
59
+ }
60
+ }
61
+ const activeModel = "getModel" in session && session.getModel
62
+ ? session.getModel()
63
+ : options.model;
64
+ return `Agent response (${activeModel}): ${response.content}`;
65
+ }
66
+ finally {
67
+ if ("dispose" in session && session.dispose) {
68
+ await session.dispose();
69
+ }
70
+ }
71
+ }
72
+ export function logToolCallEvent(event, logger) {
73
+ const serializedArgs = JSON.stringify(event.args);
74
+ if (event.error) {
75
+ logger.error(`Tool ${event.toolName} failed: ${event.error}`);
76
+ return;
77
+ }
78
+ if (event.result) {
79
+ logger.info(`Tool ${event.toolName} result: ${event.result}`);
80
+ return;
81
+ }
82
+ logger.verbose(`Tool ${event.toolName} invoked with args ${serializedArgs}`);
83
+ }
84
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../src/cli/commands/agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from "commander";
2
+ import type { CliContainer } from "../container.js";
3
+ export declare function registerConfigureAgentsCommand(configureCommand: Command, container: CliContainer): void;
@@ -0,0 +1,72 @@
1
+ import { resolveCommandFlags } from "./shared.js";
2
+ import { AgentConfigManager } from "../../services/agent-config-manager.js";
3
+ import { createDefaultAgentRegistry } from "../../services/agent-registry.js";
4
+ export function registerConfigureAgentsCommand(configureCommand, container) {
5
+ configureCommand
6
+ .command("agents")
7
+ .description("Enable or disable agents for the worktree tool.")
8
+ .action(async function () {
9
+ const flags = resolveCommandFlags(this);
10
+ const logger = container.loggerFactory.create({
11
+ scope: "configure:agents",
12
+ dryRun: flags.dryRun,
13
+ verbose: flags.verbose
14
+ });
15
+ const registry = createDefaultAgentRegistry();
16
+ const manager = new AgentConfigManager({
17
+ fs: container.fs,
18
+ homeDir: container.env.homeDir,
19
+ registry
20
+ });
21
+ await manager.loadConfig();
22
+ const enabledEntries = await manager.getEnabledAgents();
23
+ const enabledSet = new Set(enabledEntries.map((entry) => entry.id));
24
+ const detectionResults = await Promise.all(registry.list().map(async (adapter) => {
25
+ if (!adapter.detect) {
26
+ logger.info(`${adapter.id}: available`);
27
+ return { adapter, installed: true };
28
+ }
29
+ try {
30
+ const installed = await adapter.detect({
31
+ runCommand: container.commandRunner
32
+ });
33
+ logger.info(`${adapter.id}: ${installed ? "available" : "not detected"}`);
34
+ return { adapter, installed };
35
+ }
36
+ catch (error) {
37
+ const message = error instanceof Error ? error.message : String(error);
38
+ logger.info(`${adapter.id}: not detected (${message})`);
39
+ return { adapter, installed: false };
40
+ }
41
+ }));
42
+ const promptResponse = await container.prompts({
43
+ name: "agents",
44
+ type: "multiselect",
45
+ message: "Select agents to enable",
46
+ choices: detectionResults.map(({ adapter, installed }) => ({
47
+ title: installed
48
+ ? `${adapter.label} (${adapter.id})`
49
+ : `${adapter.label} (${adapter.id}) [not detected]`,
50
+ value: adapter.id,
51
+ selected: enabledSet.has(adapter.id)
52
+ }))
53
+ });
54
+ const selectedValue = promptResponse?.agents;
55
+ const selectedIds = Array.isArray(selectedValue)
56
+ ? selectedValue.map((id) => String(id))
57
+ : [];
58
+ if (flags.dryRun) {
59
+ logger.dryRun(`would enable agents: ${selectedIds.length > 0 ? selectedIds.join(", ") : "<none>"}`);
60
+ return;
61
+ }
62
+ const selectedSet = new Set(selectedIds);
63
+ for (const adapter of registry.list()) {
64
+ await manager.updateAgent({
65
+ id: adapter.id,
66
+ enabled: selectedSet.has(adapter.id)
67
+ });
68
+ }
69
+ logger.info("Updated agent configuration.");
70
+ });
71
+ }
72
+ //# sourceMappingURL=configure-agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure-agents.js","sourceRoot":"","sources":["../../../src/cli/commands/configure-agents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { Command } from "commander";
2
+ import type { CliContainer } from "../container.js";
3
+ export interface ConfigureCommandOptions {
4
+ apiKey?: string;
5
+ model?: string;
6
+ reasoningEffort?: string;
7
+ configName?: string;
8
+ baseUrl?: string;
9
+ }
10
+ export declare function registerConfigureCommand(program: Command, container: CliContainer): void;
11
+ export declare function executeConfigure(program: Command, container: CliContainer, service: string, options: ConfigureCommandOptions): Promise<void>;