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,61 @@
1
+ import { createLoggingCommandRunner, createMutationLogger, createPrerequisiteHooks, normalizePhase } from "../context.js";
2
+ export function resolveCommandFlags(program) {
3
+ const opts = program.optsWithGlobals();
4
+ return {
5
+ dryRun: Boolean(opts.dryRun),
6
+ verbose: Boolean(opts.verbose)
7
+ };
8
+ }
9
+ export function createExecutionResources(container, flags, scope) {
10
+ const baseLogger = container.loggerFactory.create({
11
+ dryRun: flags.dryRun,
12
+ verbose: flags.verbose,
13
+ scope
14
+ });
15
+ const runner = flags.verbose
16
+ ? createLoggingCommandRunner(container.commandRunner, baseLogger)
17
+ : container.commandRunner;
18
+ const context = container.contextFactory.create({
19
+ dryRun: flags.dryRun,
20
+ logger: baseLogger,
21
+ runner
22
+ });
23
+ const mutationHooks = createMutationLogger(baseLogger, {
24
+ collector: context.recordMutation
25
+ });
26
+ return {
27
+ logger: baseLogger,
28
+ context,
29
+ mutationHooks,
30
+ recordMutation: context.recordMutation
31
+ };
32
+ }
33
+ export function buildProviderContext(container, adapter, resources) {
34
+ return {
35
+ env: container.env,
36
+ paths: adapter.resolvePaths(container.env),
37
+ command: resources.context,
38
+ logger: resources.logger
39
+ };
40
+ }
41
+ export function registerProviderPrerequisites(adapter, resources) {
42
+ adapter.registerPrerequisites?.(resources.context.prerequisites);
43
+ }
44
+ export async function runPrerequisites(adapter, resources, phase) {
45
+ const hooks = createPrerequisiteHooks(phase, resources.logger);
46
+ if (hooks) {
47
+ await resources.context.prerequisites.run(phase, hooks);
48
+ }
49
+ else {
50
+ await resources.context.prerequisites.run(phase);
51
+ }
52
+ }
53
+ export function resolveServiceAdapter(container, service) {
54
+ const adapter = container.registry.get(service);
55
+ if (!adapter) {
56
+ throw new Error(`Unknown service "${service}".`);
57
+ }
58
+ return adapter;
59
+ }
60
+ export { normalizePhase };
61
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/cli/commands/shared.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,0BAA0B,EAC1B,oBAAoB,EACpB,uBAAuB,EACvB,cAAc,EAGf,MAAM,eAAe,CAAC;AAiBvB,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,MAAM,IAAI,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IACvC,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;QAC5B,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;KAC/B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,SAAuB,EACvB,KAAmB,EACnB,KAAa;IAEb,MAAM,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC;QAChD,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK;KACN,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO;QAC1B,CAAC,CAAC,0BAA0B,CAAC,SAAS,CAAC,aAAa,EAAE,UAAU,CAAC;QACjE,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC;IAC5B,MAAM,OAAO,GAAG,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC;QAC9C,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM,EAAE,UAAU;QAClB,MAAM;KACP,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,oBAAoB,CAAC,UAAU,EAAE;QACrD,SAAS,EAAE,OAAO,CAAC,cAAc;KAClC,CAAC,CAAC;IAEH,OAAO;QACL,MAAM,EAAE,UAAU;QAClB,OAAO;QACP,aAAa;QACb,cAAc,EAAE,OAAO,CAAC,cAAc;KACvC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,SAAuB,EACvB,OAAwB,EACxB,SAA6B;IAE7B,OAAO;QACL,GAAG,EAAE,SAAS,CAAC,GAAG;QAClB,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC;QAC1C,OAAO,EAAE,SAAS,CAAC,OAAO;QAC1B,MAAM,EAAE,SAAS,CAAC,MAAM;KACzB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,OAAwB,EACxB,SAA6B;IAE7B,OAAO,CAAC,qBAAqB,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAwB,EACxB,SAA6B,EAC7B,KAAwB;IAExB,MAAM,KAAK,GAAG,uBAAuB,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAC/D,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC1D,CAAC;SAAM,CAAC;QACN,MAAM,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,SAAuB,EACvB,OAAe;IAEf,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAChD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,IAAI,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { Command } from "commander";
2
+ import type { CliContainer } from "../container.js";
3
+ export interface SpawnWorktreeCommandOptions {
4
+ branch?: string;
5
+ }
6
+ export declare function registerSpawnWorktreeCommand(program: Command, container: CliContainer): void;
@@ -0,0 +1,91 @@
1
+ import { buildProviderContext, resolveCommandFlags, resolveServiceAdapter } from "./shared.js";
2
+ import { spawnGitWorktree } from "../../commands/spawn-worktree.js";
3
+ import { simpleGit as createSimpleGit } from "simple-git";
4
+ export function registerSpawnWorktreeCommand(program, container) {
5
+ program
6
+ .command("spawn-git-worktree")
7
+ .description("Create a git worktree, run an agent, and attempt to merge changes.")
8
+ .argument("<service>", "Service to spawn (claude-code | codex | opencode)")
9
+ .argument("<prompt>", "Prompt to provide to the agent")
10
+ .argument("[agentArgs...]", "Additional arguments forwarded to the agent")
11
+ .option("--branch <name>", "Target branch to merge into")
12
+ .action(async (service, promptText, agentArgs = [], options) => {
13
+ const adapter = resolveServiceAdapter(container, service);
14
+ if (!adapter.supportsSpawn) {
15
+ throw new Error(`${adapter.label} does not support spawn.`);
16
+ }
17
+ const flags = resolveCommandFlags(program);
18
+ const logger = container.loggerFactory.create({
19
+ dryRun: flags.dryRun,
20
+ verbose: flags.verbose,
21
+ scope: "spawn-worktree"
22
+ });
23
+ if (flags.dryRun) {
24
+ const argsSuffix = agentArgs.length > 0
25
+ ? ` with args ${JSON.stringify(agentArgs)}`
26
+ : "";
27
+ const branchSuffix = options.branch ? ` into ${options.branch}` : "";
28
+ logger.dryRun(`Dry run: would create git worktree, run ${adapter.label}${argsSuffix}, and merge${branchSuffix}.`);
29
+ return;
30
+ }
31
+ const runner = flags.verbose
32
+ ? createVerboseRunner(container, logger)
33
+ : container.commandRunner;
34
+ const currentBranch = await resolveTargetBranch(container, options.branch);
35
+ await spawnGitWorktree({
36
+ agent: service,
37
+ prompt: promptText,
38
+ agentArgs,
39
+ basePath: container.env.cwd,
40
+ targetBranch: currentBranch,
41
+ logger: (message) => logger.info(message),
42
+ runAgent: async ({ agent, prompt, args }) => {
43
+ if (agent !== service) {
44
+ throw new Error(`Mismatched agent request "${agent}" (expected "${service}").`);
45
+ }
46
+ return await spawnWithCustomRunner(container, adapter, flags.verbose, runner, prompt, args);
47
+ }
48
+ });
49
+ });
50
+ }
51
+ function createVerboseRunner(container, logger) {
52
+ return async (command, args) => {
53
+ logger.verbose(`> ${[command, ...args].join(" ").trim()}`);
54
+ return container.commandRunner(command, args);
55
+ };
56
+ }
57
+ async function resolveTargetBranch(container, branchOverride) {
58
+ if (branchOverride) {
59
+ return branchOverride;
60
+ }
61
+ const git = createSimpleGit({ baseDir: container.env.cwd });
62
+ const branch = await git.revparse(["--abbrev-ref", "HEAD"]);
63
+ return branch.trim();
64
+ }
65
+ async function spawnWithCustomRunner(container, adapter, verbose, runner, prompt, args) {
66
+ const scopedLogger = container.loggerFactory.create({
67
+ dryRun: false,
68
+ verbose,
69
+ scope: `spawn:${adapter.name}`
70
+ });
71
+ const context = container.contextFactory.create({
72
+ dryRun: false,
73
+ logger: scopedLogger,
74
+ runner
75
+ });
76
+ const resources = {
77
+ logger: scopedLogger,
78
+ context
79
+ };
80
+ const providerContext = buildProviderContext(container, adapter, resources);
81
+ return (await container.registry.invoke(adapter.name, "spawn", async (entry) => {
82
+ if (!entry.spawn) {
83
+ throw new Error(`${adapter.label} does not support spawn.`);
84
+ }
85
+ return (await entry.spawn(providerContext, {
86
+ prompt,
87
+ args
88
+ }));
89
+ }));
90
+ }
91
+ //# sourceMappingURL=spawn-worktree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn-worktree.js","sourceRoot":"","sources":["../../../src/cli/commands/spawn-worktree.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { Command } from "commander";
2
+ import type { CliContainer } from "../container.js";
3
+ export interface SpawnCommandOptions {
4
+ prompt: string;
5
+ args: string[];
6
+ }
7
+ export declare function registerSpawnCommand(program: Command, container: CliContainer): void;
@@ -0,0 +1,112 @@
1
+ import { buildProviderContext, createExecutionResources, resolveCommandFlags, resolveServiceAdapter } from "./shared.js";
2
+ import { DEFAULT_QUERY_MODEL } from "../constants.js";
3
+ import { runAgentConversation } from "./agent.js";
4
+ export function registerSpawnCommand(program, container) {
5
+ program
6
+ .command("spawn")
7
+ .description("Run a single prompt through a configured service CLI.")
8
+ .argument("<service>", "Service to spawn (claude-code | codex | opencode | poe-code)")
9
+ .argument("<prompt>", "Prompt text to send")
10
+ .argument("[agentArgs...]", "Additional arguments forwarded to the service CLI")
11
+ .action(async (service, promptText, agentArgs = []) => {
12
+ const flags = resolveCommandFlags(program);
13
+ const resources = createExecutionResources(container, flags, `spawn:${service}`);
14
+ if (service === "poe-code") {
15
+ await runPoeCodeSpawn({
16
+ container,
17
+ flags,
18
+ resources,
19
+ prompt: promptText,
20
+ args: agentArgs
21
+ });
22
+ return;
23
+ }
24
+ const adapter = resolveServiceAdapter(container, service);
25
+ if (!adapter.supportsSpawn) {
26
+ throw new Error(`${adapter.label} does not support spawn.`);
27
+ }
28
+ const providerContext = buildProviderContext(container, adapter, resources);
29
+ if (flags.dryRun) {
30
+ const extra = agentArgs.length > 0 ? ` with args ${JSON.stringify(agentArgs)}` : "";
31
+ resources.logger.dryRun(`Dry run: would spawn ${adapter.label} with prompt "${promptText}"${extra}.`);
32
+ return;
33
+ }
34
+ const result = (await container.registry.invoke(service, "spawn", async (entry) => {
35
+ if (!entry.spawn) {
36
+ throw new Error(`${adapter.label} does not support spawn.`);
37
+ }
38
+ const output = await entry.spawn(providerContext, {
39
+ prompt: promptText,
40
+ args: agentArgs
41
+ });
42
+ return output;
43
+ }));
44
+ if (!result) {
45
+ resources.logger.info(`${adapter.label} spawn completed.`);
46
+ return;
47
+ }
48
+ if (result.exitCode !== 0) {
49
+ const detail = result.stderr.trim() || result.stdout.trim();
50
+ const suffix = detail ? `: ${detail}` : "";
51
+ throw new Error(`${adapter.label} spawn failed with exit code ${result.exitCode}${suffix}`);
52
+ }
53
+ const trimmedStdout = result.stdout.trim();
54
+ if (trimmedStdout) {
55
+ resources.logger.info(trimmedStdout);
56
+ return;
57
+ }
58
+ const trimmedStderr = result.stderr.trim();
59
+ if (trimmedStderr) {
60
+ resources.logger.info(trimmedStderr);
61
+ return;
62
+ }
63
+ resources.logger.info(`${adapter.label} spawn completed.`);
64
+ });
65
+ }
66
+ async function runPoeCodeSpawn(options) {
67
+ const parsedArgs = parsePoeCodeArgs(options.args);
68
+ const model = parsedArgs.model ?? DEFAULT_QUERY_MODEL;
69
+ if (options.flags.dryRun) {
70
+ options.resources.logger.dryRun(`Dry run: would spawn Poe Code with prompt "${options.prompt}" using model "${model}".`);
71
+ return;
72
+ }
73
+ const apiKey = await options.container.options.resolveApiKey({
74
+ value: parsedArgs.apiKey,
75
+ dryRun: options.flags.dryRun
76
+ });
77
+ const message = await runAgentConversation({
78
+ container: options.container,
79
+ logger: options.resources.logger,
80
+ text: options.prompt,
81
+ model,
82
+ apiKey
83
+ });
84
+ options.resources.logger.info(message.replace("Agent response", "Poe Code response"));
85
+ }
86
+ function parsePoeCodeArgs(args) {
87
+ const result = {};
88
+ let index = 0;
89
+ while (index < args.length) {
90
+ const current = args[index];
91
+ const next = args[index + 1];
92
+ if (current === "--model") {
93
+ if (next == null) {
94
+ throw new Error("Missing value for --model.");
95
+ }
96
+ result.model = next;
97
+ index += 2;
98
+ continue;
99
+ }
100
+ if (current === "--api-key") {
101
+ if (next == null) {
102
+ throw new Error("Missing value for --api-key.");
103
+ }
104
+ result.apiKey = next;
105
+ index += 2;
106
+ continue;
107
+ }
108
+ throw new Error(`Unknown option "${current}" for poe-code spawn.`);
109
+ }
110
+ return result;
111
+ }
112
+ //# sourceMappingURL=spawn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn.js","sourceRoot":"","sources":["../../../src/cli/commands/spawn.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,qBAAqB,EAGtB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAOlD,MAAM,UAAU,oBAAoB,CAClC,OAAgB,EAChB,SAAuB;IAEvB,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,uDAAuD,CAAC;SACpE,QAAQ,CACP,WAAW,EACX,8DAA8D,CAC/D;SACA,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAC;SAC3C,QAAQ,CACP,gBAAgB,EAChB,mDAAmD,CACpD;SACA,MAAM,CAAC,KAAK,EAAE,OAAe,EAAE,UAAkB,EAAE,YAAsB,EAAE,EAAE,EAAE;QAC9E,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,wBAAwB,CACxC,SAAS,EACT,KAAK,EACL,SAAS,OAAO,EAAE,CACnB,CAAC;QAEF,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;YAC3B,MAAM,eAAe,CAAC;gBACpB,SAAS;gBACT,KAAK;gBACL,SAAS;gBACT,MAAM,EAAE,UAAU;gBAClB,IAAI,EAAE,SAAS;aAChB,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,qBAAqB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC1D,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,0BAA0B,CAAC,CAAC;QAC9D,CAAC;QAED,MAAM,eAAe,GAAG,oBAAoB,CAC1C,SAAS,EACT,OAAO,EACP,SAAS,CACV,CAAC;QAEF,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,KAAK,GACT,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxE,SAAS,CAAC,MAAM,CAAC,MAAM,CACrB,wBAAwB,OAAO,CAAC,KAAK,iBAAiB,UAAU,IAAI,KAAK,GAAG,CAC7E,CAAC;YACF,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,CAAC,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,CAC7C,OAAO,EACP,OAAO,EACP,KAAK,EAAE,KAAK,EAAE,EAAE;YACd,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,0BAA0B,CAAC,CAAC;YAC9D,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,eAAe,EAAE;gBAChD,MAAM,EAAE,UAAU;gBAClB,IAAI,EAAE,SAAS;aAChB,CAAC,CAAC;YACH,OAAO,MAAoC,CAAC;QAC9C,CAAC,CACF,CAA+B,CAAC;QAEjC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,mBAAmB,CAAC,CAAC;YAC3D,OAAO;QACT,CAAC;QAED,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5D,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CACb,GAAG,OAAO,CAAC,KAAK,gCAAgC,MAAM,CAAC,QAAQ,GAAG,MAAM,EAAE,CAC3E,CAAC;QACJ,CAAC;QAED,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC3C,IAAI,aAAa,EAAE,CAAC;YAClB,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACrC,OAAO;QACT,CAAC;QAED,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC3C,IAAI,aAAa,EAAE,CAAC;YAClB,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACrC,OAAO;QACT,CAAC;QAED,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,mBAAmB,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACP,CAAC;AAUD,KAAK,UAAU,eAAe,CAAC,OAA0B;IACvD,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,IAAI,mBAAmB,CAAC;IAEtD,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACzB,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAC7B,8CAA8C,OAAO,CAAC,MAAM,kBAAkB,KAAK,IAAI,CACxF,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC;QAC3D,KAAK,EAAE,UAAU,CAAC,MAAM;QACxB,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM;KAC7B,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC;QACzC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,MAAM;QAChC,IAAI,EAAE,OAAO,CAAC,MAAM;QACpB,KAAK;QACL,MAAM;KACP,CAAC,CAAC;IAEH,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,CAAC,CAAC;AACxF,CAAC;AAOD,SAAS,gBAAgB,CAAC,IAAc;IACtC,MAAM,MAAM,GAAqB,EAAE,CAAC;IACpC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAC7B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAChD,CAAC;YACD,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;YACpB,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QACD,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;YAC5B,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAClD,CAAC;YACD,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;YACrB,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,mBAAmB,OAAO,uBAAuB,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { Command } from "commander";
2
+ import type { CliContainer } from "../container.js";
3
+ export interface TestCommandOptions {
4
+ apiKey?: string;
5
+ }
6
+ export declare function registerTestCommand(program: Command, container: CliContainer): void;
@@ -0,0 +1,26 @@
1
+ import { resolveCommandFlags } from "./shared.js";
2
+ export function registerTestCommand(program, container) {
3
+ program
4
+ .command("test")
5
+ .description('Verify the Poe API key by sending "Ping" to EchoBot.')
6
+ .option("--api-key <key>", "Poe API key")
7
+ .action(async (options) => {
8
+ const flags = resolveCommandFlags(program);
9
+ const logger = container.loggerFactory.create({
10
+ dryRun: flags.dryRun,
11
+ verbose: flags.verbose,
12
+ scope: "test"
13
+ });
14
+ const apiKey = await container.options.resolveApiKey({
15
+ value: options.apiKey,
16
+ dryRun: flags.dryRun
17
+ });
18
+ if (flags.dryRun) {
19
+ logger.dryRun('would verify Poe API key by calling EchoBot with "Ping".');
20
+ return;
21
+ }
22
+ await container.poeApiClient.verify({ apiKey });
23
+ logger.info("Poe API key verified via EchoBot.");
24
+ });
25
+ }
26
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../../src/cli/commands/test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAMlD,MAAM,UAAU,mBAAmB,CACjC,OAAgB,EAChB,SAAuB;IAEvB,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,sDAAsD,CAAC;SACnE,MAAM,CAAC,iBAAiB,EAAE,aAAa,CAAC;SACxC,MAAM,CAAC,KAAK,EAAE,OAA2B,EAAE,EAAE;QAC5C,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC;YAC5C,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC;YACnD,KAAK,EAAE,OAAO,CAAC,MAAM;YACrB,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,CAAC,CAAC;QAEH,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,CAAC,MAAM,CACX,0DAA0D,CAC3D,CAAC;YACF,OAAO;QACT,CAAC;QAED,MAAM,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,10 @@
1
+ export declare const CLAUDE_MODEL_SONNET = "Claude-Sonnet-4.5";
2
+ export declare const CLAUDE_MODEL_OPUS = "Claude-Opus-4.1";
3
+ export declare const CLAUDE_MODEL_HAIKU = "Claude-Haiku-4.5";
4
+ export declare const DEFAULT_MODEL = "gpt-5";
5
+ export declare const DEFAULT_REASONING = "medium";
6
+ export declare const DEFAULT_QUERY_MODEL = "Claude-Sonnet-4.5";
7
+ export declare const DEFAULT_ROO_MODEL = "Claude-Sonnet-4.5";
8
+ export declare const DEFAULT_ROO_BASE_URL = "https://api.poe.com/v1";
9
+ export declare const DEFAULT_ROO_CONFIG_NAME = "poe";
10
+ export declare const DEFAULT_CLAUDE_MODEL = "Claude-Sonnet-4.5";
@@ -0,0 +1,11 @@
1
+ export const CLAUDE_MODEL_SONNET = "Claude-Sonnet-4.5";
2
+ export const CLAUDE_MODEL_OPUS = "Claude-Opus-4.1";
3
+ export const CLAUDE_MODEL_HAIKU = "Claude-Haiku-4.5";
4
+ export const DEFAULT_MODEL = "gpt-5";
5
+ export const DEFAULT_REASONING = "medium";
6
+ export const DEFAULT_QUERY_MODEL = CLAUDE_MODEL_SONNET;
7
+ export const DEFAULT_ROO_MODEL = CLAUDE_MODEL_SONNET;
8
+ export const DEFAULT_ROO_BASE_URL = "https://api.poe.com/v1";
9
+ export const DEFAULT_ROO_CONFIG_NAME = "poe";
10
+ export const DEFAULT_CLAUDE_MODEL = CLAUDE_MODEL_SONNET;
11
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/cli/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,mBAAmB,CAAC;AACvD,MAAM,CAAC,MAAM,iBAAiB,GAAG,iBAAiB,CAAC;AACnD,MAAM,CAAC,MAAM,kBAAkB,GAAG,kBAAkB,CAAC;AAErD,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC;AACrC,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AAC1C,MAAM,CAAC,MAAM,mBAAmB,GAAG,mBAAmB,CAAC;AACvD,MAAM,CAAC,MAAM,iBAAiB,GAAG,mBAAmB,CAAC;AACrD,MAAM,CAAC,MAAM,oBAAoB,GAAG,wBAAwB,CAAC;AAC7D,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAC;AAC7C,MAAM,CAAC,MAAM,oBAAoB,GAAG,mBAAmB,CAAC"}
@@ -0,0 +1,48 @@
1
+ import type { FileSystem } from "../utils/file-system.js";
2
+ import { createCliEnvironment } from "./environment.js";
3
+ import { createServiceRegistry, type ProviderAdapter } from "./service-registry.js";
4
+ import { type CommandContextFactory } from "./context.js";
5
+ import { createPromptLibrary } from "./prompts.js";
6
+ import { type OptionResolvers } from "./options.js";
7
+ import { type LoggerFactory, type ScopedLogger } from "./logger.js";
8
+ import { ErrorLogger } from "./error-logger.js";
9
+ import { type PoeApiClient } from "./api-client.js";
10
+ import type { PromptFn, LoggerFn } from "./types.js";
11
+ import type { HttpClient } from "./http.js";
12
+ import type { CommandRunner } from "../utils/prerequisites.js";
13
+ import type { ChatServiceFactory } from "./chat.js";
14
+ export interface CliDependencies {
15
+ fs: FileSystem;
16
+ prompts: PromptFn;
17
+ env: {
18
+ cwd: string;
19
+ homeDir: string;
20
+ platform?: NodeJS.Platform;
21
+ variables?: Record<string, string | undefined>;
22
+ };
23
+ logger?: LoggerFn;
24
+ exitOverride?: boolean;
25
+ suppressCommanderOutput?: boolean;
26
+ httpClient?: HttpClient;
27
+ commandRunner?: CommandRunner;
28
+ chatServiceFactory?: ChatServiceFactory;
29
+ }
30
+ export interface CliContainer {
31
+ readonly env: ReturnType<typeof createCliEnvironment>;
32
+ readonly fs: FileSystem;
33
+ readonly prompts: PromptFn;
34
+ readonly promptLibrary: ReturnType<typeof createPromptLibrary>;
35
+ readonly loggerFactory: LoggerFactory;
36
+ readonly errorLogger: ErrorLogger;
37
+ readonly options: OptionResolvers;
38
+ readonly contextFactory: CommandContextFactory;
39
+ readonly registry: ReturnType<typeof createServiceRegistry>;
40
+ readonly httpClient: HttpClient;
41
+ readonly poeApiClient: PoeApiClient;
42
+ readonly commandRunner: CommandRunner;
43
+ readonly chatServiceFactory: ChatServiceFactory;
44
+ readonly telemetryLogger: ScopedLogger;
45
+ readonly providers: ProviderAdapter[];
46
+ readonly dependencies: CliDependencies;
47
+ }
48
+ export declare function createCliContainer(dependencies: CliDependencies): CliContainer;
@@ -0,0 +1,94 @@
1
+ import * as nodeFsSync from "node:fs";
2
+ import { loadCredentials, saveCredentials } from "../services/credentials.js";
3
+ import { createCliEnvironment } from "./environment.js";
4
+ import { createServiceRegistry } from "./service-registry.js";
5
+ import { createCommandContextFactory } from "./context.js";
6
+ import { createPromptLibrary } from "./prompts.js";
7
+ import { createOptionResolvers } from "./options.js";
8
+ import { createLoggerFactory } from "./logger.js";
9
+ import { ErrorLogger } from "./error-logger.js";
10
+ import { createTelemetryClient } from "./telemetry.js";
11
+ import { createPoeApiClient } from "./api-client.js";
12
+ import { createDefaultCommandRunner } from "./command-runner.js";
13
+ import { getDefaultProviders } from "../providers/index.js";
14
+ export function createCliContainer(dependencies) {
15
+ const environment = createCliEnvironment({
16
+ cwd: dependencies.env.cwd,
17
+ homeDir: dependencies.env.homeDir,
18
+ platform: dependencies.env.platform,
19
+ variables: dependencies.env.variables
20
+ });
21
+ const loggerFactory = createLoggerFactory(dependencies.logger ?? ((message) => console.log(message)));
22
+ // Create error logger - use node:fs for sync operations
23
+ const errorLogger = new ErrorLogger({
24
+ fs: nodeFsSync,
25
+ logDir: environment.logDir,
26
+ logToStderr: true
27
+ });
28
+ // Attach error logger to logger factory
29
+ loggerFactory.setErrorLogger(errorLogger);
30
+ const contextFactory = createCommandContextFactory({
31
+ fs: dependencies.fs
32
+ });
33
+ const httpClient = dependencies.httpClient ??
34
+ (async (url, init) => {
35
+ const response = await globalThis.fetch(url, init);
36
+ return {
37
+ ok: response.ok,
38
+ status: response.status,
39
+ json: () => response.json()
40
+ };
41
+ });
42
+ const commandRunner = dependencies.commandRunner ?? createDefaultCommandRunner();
43
+ const chatServiceFactory = dependencies.chatServiceFactory ??
44
+ (async (options) => {
45
+ const { createAgentSession } = (await import("../services/agent-session.js"));
46
+ return await createAgentSession(options);
47
+ });
48
+ const promptLibrary = createPromptLibrary();
49
+ const options = createOptionResolvers({
50
+ prompts: dependencies.prompts,
51
+ promptLibrary,
52
+ apiKeyStore: {
53
+ read: () => loadCredentials({
54
+ fs: dependencies.fs,
55
+ filePath: environment.credentialsPath
56
+ }),
57
+ write: (value) => saveCredentials({
58
+ fs: dependencies.fs,
59
+ filePath: environment.credentialsPath,
60
+ apiKey: value
61
+ })
62
+ }
63
+ });
64
+ const telemetryLogger = loggerFactory.create({
65
+ scope: "telemetry",
66
+ verbose: true
67
+ });
68
+ const registry = createServiceRegistry({
69
+ telemetry: createTelemetryClient(telemetryLogger)
70
+ });
71
+ const providers = getDefaultProviders();
72
+ for (const adapter of providers) {
73
+ registry.register(adapter);
74
+ }
75
+ return {
76
+ env: environment,
77
+ fs: dependencies.fs,
78
+ prompts: dependencies.prompts,
79
+ promptLibrary,
80
+ loggerFactory,
81
+ errorLogger,
82
+ options,
83
+ contextFactory,
84
+ registry,
85
+ httpClient,
86
+ poeApiClient: createPoeApiClient(httpClient),
87
+ commandRunner,
88
+ chatServiceFactory,
89
+ telemetryLogger,
90
+ providers,
91
+ dependencies
92
+ };
93
+ }
94
+ //# sourceMappingURL=container.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/cli/container.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { FileSystem } from "../utils/file-system.js";
2
+ import type { CommandRunner, PrerequisiteManager, PrerequisitePhase, PrerequisiteRunHooks } from "../utils/prerequisites.js";
3
+ import type { ServiceMutationHooks } from "../services/service-manifest.js";
4
+ import type { ScopedLogger } from "./logger.js";
5
+ export interface CommandContextOptions {
6
+ dryRun: boolean;
7
+ logger: ScopedLogger;
8
+ runner: CommandRunner;
9
+ }
10
+ export interface CommandContextComplete {
11
+ success: string;
12
+ dry: string;
13
+ }
14
+ export interface MutationLogEntry {
15
+ command: string;
16
+ message: string;
17
+ }
18
+ export interface CommandContext {
19
+ fs: FileSystem;
20
+ prerequisites: PrerequisiteManager;
21
+ recordMutation?: (entry: MutationLogEntry) => void;
22
+ runCommand: CommandRunner;
23
+ complete(messages: CommandContextComplete): void;
24
+ }
25
+ export interface CommandContextFactoryInit {
26
+ fs: FileSystem;
27
+ }
28
+ export interface CommandContextFactory {
29
+ create(options: CommandContextOptions): CommandContext;
30
+ }
31
+ export declare function createCommandContextFactory(init: CommandContextFactoryInit): CommandContextFactory;
32
+ export declare function createLoggingCommandRunner(runner: CommandRunner, logger: ScopedLogger): CommandRunner;
33
+ export declare function createPrerequisiteHooks(phase: PrerequisitePhase, logger: ScopedLogger): PrerequisiteRunHooks | undefined;
34
+ export declare function createMutationLogger(logger: ScopedLogger, options: {
35
+ collector?: (entry: MutationLogEntry) => void;
36
+ }): ServiceMutationHooks | undefined;
37
+ export declare function normalizePhase(value: string): PrerequisitePhase;