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,150 @@
1
+ import { buildProviderContext, createExecutionResources, registerProviderPrerequisites, resolveCommandFlags, resolveServiceAdapter, runPrerequisites } from "./shared.js";
2
+ import { DEFAULT_MODEL, DEFAULT_REASONING, DEFAULT_ROO_BASE_URL, DEFAULT_ROO_CONFIG_NAME, DEFAULT_ROO_MODEL } from "../constants.js";
3
+ import { registerConfigureAgentsCommand } from "./configure-agents.js";
4
+ export function registerConfigureCommand(program, container) {
5
+ const configureCommand = program
6
+ .command("configure")
7
+ .description("Configure developer tooling for Poe API.")
8
+ .argument("[service]", "Service to configure (claude-code | codex | opencode | roo-code)")
9
+ .option("--api-key <key>", "Poe API key")
10
+ .option("--model <model>", "Model identifier")
11
+ .option("--reasoning-effort <level>", "Reasoning effort level")
12
+ .option("--config-name <name>", "Configuration profile name")
13
+ .option("--base-url <url>", "API base URL")
14
+ .action(async (service, options) => {
15
+ const resolved = await resolveServiceArgument(program, container, service);
16
+ await executeConfigure(program, container, resolved, options);
17
+ });
18
+ registerConfigureAgentsCommand(configureCommand, container);
19
+ }
20
+ export async function executeConfigure(program, container, service, options) {
21
+ const adapter = resolveServiceAdapter(container, service);
22
+ const flags = resolveCommandFlags(program);
23
+ const resources = createExecutionResources(container, flags, `configure:${service}`);
24
+ const providerContext = buildProviderContext(container, adapter, resources);
25
+ registerProviderPrerequisites(adapter, resources);
26
+ await container.registry.invoke(service, "install", async (entry) => {
27
+ if (!entry.install) {
28
+ return;
29
+ }
30
+ await entry.install(providerContext);
31
+ });
32
+ await runPrerequisites(adapter, resources, "before");
33
+ const payload = await createConfigurePayload({
34
+ service,
35
+ container,
36
+ flags,
37
+ options,
38
+ resources
39
+ });
40
+ await container.registry.invoke(service, "configure", async (entry) => {
41
+ if (!entry.configure) {
42
+ throw new Error(`Service "${service}" does not support configure.`);
43
+ }
44
+ await entry.configure(providerContext, payload);
45
+ });
46
+ await runPrerequisites(adapter, resources, "after");
47
+ const dryMessage = service === "claude-code"
48
+ ? `${adapter.label} (dry run)`
49
+ : `Dry run: would configure ${adapter.label}.`;
50
+ resources.context.complete({
51
+ success: `Configured ${adapter.label}.`,
52
+ dry: dryMessage
53
+ });
54
+ }
55
+ async function createConfigurePayload(init) {
56
+ const { service, container, flags, options, resources } = init;
57
+ const mutationHooks = resources.mutationHooks;
58
+ switch (service) {
59
+ case "claude-code": {
60
+ const apiKey = await container.options.resolveApiKey({
61
+ value: options.apiKey,
62
+ dryRun: flags.dryRun
63
+ });
64
+ const defaultModel = await container.options.resolveClaudeModel(options.model);
65
+ return {
66
+ apiKey,
67
+ defaultModel,
68
+ mutationHooks
69
+ };
70
+ }
71
+ case "codex": {
72
+ const apiKey = await container.options.resolveApiKey({
73
+ value: options.apiKey,
74
+ dryRun: flags.dryRun
75
+ });
76
+ const model = await container.options.resolveModel(options.model, DEFAULT_MODEL);
77
+ const reasoningEffort = await container.options.resolveReasoning(options.reasoningEffort, DEFAULT_REASONING);
78
+ return {
79
+ apiKey,
80
+ model,
81
+ reasoningEffort,
82
+ mutationHooks
83
+ };
84
+ }
85
+ case "opencode": {
86
+ const apiKey = await container.options.resolveApiKey({
87
+ value: options.apiKey,
88
+ dryRun: flags.dryRun
89
+ });
90
+ return {
91
+ apiKey,
92
+ mutationHooks
93
+ };
94
+ }
95
+ case "roo-code": {
96
+ const apiKey = await container.options.resolveApiKey({
97
+ value: options.apiKey,
98
+ dryRun: flags.dryRun
99
+ });
100
+ const model = await container.options.resolveModel(options.model, DEFAULT_ROO_MODEL);
101
+ const configName = await container.options.resolveConfigName(options.configName, DEFAULT_ROO_CONFIG_NAME);
102
+ const baseUrl = options.baseUrl ?? DEFAULT_ROO_BASE_URL;
103
+ return {
104
+ apiKey,
105
+ model,
106
+ baseUrl,
107
+ configName,
108
+ mutationHooks
109
+ };
110
+ }
111
+ default:
112
+ throw new Error(`Unknown service "${service}".`);
113
+ }
114
+ }
115
+ async function resolveServiceArgument(program, container, provided) {
116
+ if (provided) {
117
+ return provided;
118
+ }
119
+ const services = container.registry.list();
120
+ if (services.length === 0) {
121
+ throw new Error("No services available to configure.");
122
+ }
123
+ const flags = resolveCommandFlags(program);
124
+ const logger = container.loggerFactory.create({
125
+ dryRun: flags.dryRun,
126
+ verbose: flags.verbose,
127
+ scope: "configure"
128
+ });
129
+ services.forEach((entry, index) => {
130
+ logger.info(`${index + 1}) ${entry.name}`);
131
+ });
132
+ logger.info("Enter number that you want to configure:");
133
+ const descriptor = container.promptLibrary.serviceSelection();
134
+ const response = await container.prompts(descriptor);
135
+ const selection = response[descriptor.name];
136
+ const normalized = typeof selection === "number"
137
+ ? selection
138
+ : typeof selection === "string"
139
+ ? Number.parseInt(selection, 10)
140
+ : NaN;
141
+ if (!Number.isInteger(normalized)) {
142
+ throw new Error("Invalid service selection.");
143
+ }
144
+ const index = normalized - 1;
145
+ if (index < 0 || index >= services.length) {
146
+ throw new Error("Invalid service selection.");
147
+ }
148
+ return services[index].name;
149
+ }
150
+ //# sourceMappingURL=configure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure.js","sourceRoot":"","sources":["../../../src/cli/commands/configure.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { Command } from "commander";
2
+ import type { CliContainer } from "../container.js";
3
+ export interface InitCommandOptions {
4
+ projectName?: string;
5
+ apiKey?: string;
6
+ model?: string;
7
+ }
8
+ export declare function registerInitCommand(program: Command, container: CliContainer): void;
@@ -0,0 +1,45 @@
1
+ import { initProject } from "../../commands/init.js";
2
+ import { createExecutionResources, resolveCommandFlags } from "./shared.js";
3
+ import { DEFAULT_MODEL } from "../constants.js";
4
+ export function registerInitCommand(program, container) {
5
+ program
6
+ .command("init")
7
+ .description("Initialize a Python project preconfigured for Poe API.")
8
+ .option("--project-name <name>", "Project directory name")
9
+ .option("--api-key <key>", "Poe API key")
10
+ .option("--model <model>", "Model identifier")
11
+ .action(async (options) => {
12
+ const flags = resolveCommandFlags(program);
13
+ const resources = createExecutionResources(container, flags, "init");
14
+ const projectName = options.projectName ?? (await promptForProjectName(container));
15
+ const apiKey = await container.options.resolveApiKey({
16
+ value: options.apiKey,
17
+ dryRun: flags.dryRun
18
+ });
19
+ const model = await container.options.resolveModel(options.model, DEFAULT_MODEL);
20
+ await initProject({
21
+ fs: resources.context.fs,
22
+ cwd: container.env.cwd,
23
+ projectName,
24
+ apiKey,
25
+ model
26
+ });
27
+ resources.context.complete({
28
+ success: `Initialized project "${projectName}".`,
29
+ dry: `Dry run: would initialize project "${projectName}".`
30
+ });
31
+ });
32
+ }
33
+ async function promptForProjectName(container) {
34
+ const response = await container.prompts({
35
+ type: "text",
36
+ name: "projectName",
37
+ message: "Project name"
38
+ });
39
+ const value = response.projectName;
40
+ if (!value || typeof value !== "string") {
41
+ throw new Error("Project name is required.");
42
+ }
43
+ return value;
44
+ }
45
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAQhD,MAAM,UAAU,mBAAmB,CACjC,OAAgB,EAChB,SAAuB;IAEvB,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,wDAAwD,CAAC;SACrE,MAAM,CAAC,uBAAuB,EAAE,wBAAwB,CAAC;SACzD,MAAM,CAAC,iBAAiB,EAAE,aAAa,CAAC;SACxC,MAAM,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;SAC7C,MAAM,CAAC,KAAK,EAAE,OAA2B,EAAE,EAAE;QAC5C,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,wBAAwB,CACxC,SAAS,EACT,KAAK,EACL,MAAM,CACP,CAAC;QAEF,MAAM,WAAW,GACf,OAAO,CAAC,WAAW,IAAI,CAAC,MAAM,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC;QAEjE,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,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,YAAY,CAChD,OAAO,CAAC,KAAK,EACb,aAAa,CACd,CAAC;QAEF,MAAM,WAAW,CAAC;YAChB,EAAE,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE;YACxB,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG;YACtB,WAAW;YACX,MAAM;YACN,KAAK;SACN,CAAC,CAAC;QAEH,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC;YACzB,OAAO,EAAE,wBAAwB,WAAW,IAAI;YAChD,GAAG,EAAE,sCAAsC,WAAW,IAAI;SAC3D,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,SAAuB;IAEvB,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC;QACvC,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,cAAc;KACxB,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC;IACnC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from "commander";
2
+ import type { CliContainer } from "../container.js";
3
+ export declare function registerInteractiveCommand(program: Command, container: CliContainer): void;
@@ -0,0 +1,17 @@
1
+ export function registerInteractiveCommand(program, container) {
2
+ program
3
+ .command("interactive")
4
+ .alias("i")
5
+ .description("Launch interactive mode with a visual CLI interface.")
6
+ .action(async () => {
7
+ const logger = container.loggerFactory.create({
8
+ dryRun: false,
9
+ verbose: true,
10
+ scope: "interactive"
11
+ });
12
+ logger.info("Launching interactive mode...");
13
+ const { launchInteractiveMode } = await import("../interactive-launcher.js");
14
+ await launchInteractiveMode(container.dependencies);
15
+ });
16
+ }
17
+ //# sourceMappingURL=interactive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive.js","sourceRoot":"","sources":["../../../src/cli/commands/interactive.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,0BAA0B,CACxC,OAAgB,EAChB,SAAuB;IAEvB,OAAO;SACJ,OAAO,CAAC,aAAa,CAAC;SACtB,KAAK,CAAC,GAAG,CAAC;SACV,WAAW,CAAC,sDAAsD,CAAC;SACnE,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC;YAC5C,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,aAAa;SACrB,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC7C,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAC5C,4BAA4B,CAC7B,CAAC;QACF,MAAM,qBAAqB,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { Command } from "commander";
2
+ import type { CliContainer } from "../container.js";
3
+ export interface LoginCommandOptions {
4
+ apiKey?: string;
5
+ }
6
+ export declare function registerLoginCommand(program: Command, container: CliContainer): void;
@@ -0,0 +1,51 @@
1
+ import { createExecutionResources, resolveCommandFlags } from "./shared.js";
2
+ import { saveCredentials } from "../../services/credentials.js";
3
+ import { ValidationError } from "../errors.js";
4
+ export function registerLoginCommand(program, container) {
5
+ program
6
+ .command("login")
7
+ .description("Store a Poe API key for reuse across commands.")
8
+ .option("--api-key <key>", "Poe API key")
9
+ .action(async (options) => {
10
+ const flags = resolveCommandFlags(program);
11
+ const resources = createExecutionResources(container, flags, "login");
12
+ try {
13
+ const apiKey = await resolveApiKeyInput(container, options);
14
+ const normalized = container.options.normalizeApiKey(apiKey);
15
+ await saveCredentials({
16
+ fs: resources.context.fs,
17
+ filePath: container.env.credentialsPath,
18
+ apiKey: normalized
19
+ });
20
+ resources.context.complete({
21
+ success: `Poe API key stored at ${container.env.credentialsPath}.`,
22
+ dry: `Dry run: would store Poe API key at ${container.env.credentialsPath}.`
23
+ });
24
+ }
25
+ catch (error) {
26
+ if (error instanceof Error) {
27
+ resources.logger.logException(error, "login command", {
28
+ operation: "save credentials",
29
+ credentialsPath: container.env.credentialsPath
30
+ });
31
+ }
32
+ throw error;
33
+ }
34
+ });
35
+ }
36
+ async function resolveApiKeyInput(container, options) {
37
+ if (options.apiKey) {
38
+ return options.apiKey;
39
+ }
40
+ const descriptor = container.promptLibrary.loginApiKey();
41
+ const response = await container.prompts(descriptor);
42
+ const result = response[descriptor.name];
43
+ if (!result || typeof result !== "string") {
44
+ throw new ValidationError("POE API key is required.", {
45
+ operation: "login",
46
+ field: "apiKey"
47
+ });
48
+ }
49
+ return result;
50
+ }
51
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/cli/commands/login.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAmB,MAAM,cAAc,CAAC;AAMhE,MAAM,UAAU,oBAAoB,CAClC,OAAgB,EAChB,SAAuB;IAEvB,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,gDAAgD,CAAC;SAC7D,MAAM,CAAC,iBAAiB,EAAE,aAAa,CAAC;SACxC,MAAM,CAAC,KAAK,EAAE,OAA4B,EAAE,EAAE;QAC7C,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,wBAAwB,CACxC,SAAS,EACT,KAAK,EACL,OAAO,CACR,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC5D,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YAE7D,MAAM,eAAe,CAAC;gBACpB,EAAE,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE;gBACxB,QAAQ,EAAE,SAAS,CAAC,GAAG,CAAC,eAAe;gBACvC,MAAM,EAAE,UAAU;aACnB,CAAC,CAAC;YAEH,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACzB,OAAO,EAAE,yBAAyB,SAAS,CAAC,GAAG,CAAC,eAAe,GAAG;gBAClE,GAAG,EAAE,uCAAuC,SAAS,CAAC,GAAG,CAAC,eAAe,GAAG;aAC7E,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,eAAe,EAAE;oBACpD,SAAS,EAAE,kBAAkB;oBAC7B,eAAe,EAAE,SAAS,CAAC,GAAG,CAAC,eAAe;iBAC/C,CAAC,CAAC;YACL,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,SAAuB,EACvB,OAA4B;IAE5B,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,OAAO,CAAC,MAAM,CAAC;IACxB,CAAC;IACD,MAAM,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;IACzD,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1C,MAAM,IAAI,eAAe,CAAC,0BAA0B,EAAE;YACpD,SAAS,EAAE,OAAO;YAClB,KAAK,EAAE,QAAQ;SAChB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from "commander";
2
+ import type { CliContainer } from "../container.js";
3
+ export declare function registerLogoutCommand(program: Command, container: CliContainer): void;
@@ -0,0 +1,31 @@
1
+ import { createExecutionResources, resolveCommandFlags } from "./shared.js";
2
+ import { deleteCredentials, loadCredentials } from "../../services/credentials.js";
3
+ export function registerLogoutCommand(program, container) {
4
+ program
5
+ .command("logout")
6
+ .description("Remove the stored Poe API key.")
7
+ .action(async () => {
8
+ const flags = resolveCommandFlags(program);
9
+ const resources = createExecutionResources(container, flags, "logout");
10
+ const stored = await loadCredentials({
11
+ fs: container.fs,
12
+ filePath: container.env.credentialsPath
13
+ });
14
+ if (!stored) {
15
+ resources.context.complete({
16
+ success: "No stored Poe API key found.",
17
+ dry: "Dry run: no stored Poe API key to remove."
18
+ });
19
+ return;
20
+ }
21
+ await deleteCredentials({
22
+ fs: resources.context.fs,
23
+ filePath: container.env.credentialsPath
24
+ });
25
+ resources.context.complete({
26
+ success: "Removed stored Poe API key.",
27
+ dry: "Dry run: would remove stored Poe API key."
28
+ });
29
+ });
30
+ }
31
+ //# sourceMappingURL=logout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.js","sourceRoot":"","sources":["../../../src/cli/commands/logout.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,iBAAiB,EACjB,eAAe,EAChB,MAAM,+BAA+B,CAAC;AAEvC,MAAM,UAAU,qBAAqB,CACnC,OAAgB,EAChB,SAAuB;IAEvB,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,gCAAgC,CAAC;SAC7C,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,wBAAwB,CACxC,SAAS,EACT,KAAK,EACL,QAAQ,CACT,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;YACnC,EAAE,EAAE,SAAS,CAAC,EAAE;YAChB,QAAQ,EAAE,SAAS,CAAC,GAAG,CAAC,eAAe;SACxC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACzB,OAAO,EAAE,8BAA8B;gBACvC,GAAG,EAAE,2CAA2C;aACjD,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,MAAM,iBAAiB,CAAC;YACtB,EAAE,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE;YACxB,QAAQ,EAAE,SAAS,CAAC,GAAG,CAAC,eAAe;SACxC,CAAC,CAAC;QAEH,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC;YACzB,OAAO,EAAE,6BAA6B;YACtC,GAAG,EAAE,2CAA2C;SACjD,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from "commander";
2
+ import type { CliContainer } from "../container.js";
3
+ export declare function registerPrerequisitesCommand(program: Command, container: CliContainer): void;
@@ -0,0 +1,23 @@
1
+ import { createExecutionResources, normalizePhase, registerProviderPrerequisites, resolveCommandFlags, resolveServiceAdapter, runPrerequisites } from "./shared.js";
2
+ export function registerPrerequisitesCommand(program, container) {
3
+ program
4
+ .command("prerequisites")
5
+ .description("Run prerequisite checks for a service.")
6
+ .argument("<service>", "Service to check (claude-code | codex | opencode)")
7
+ .argument("<phase>", "Phase to execute (before | after)")
8
+ .action(async (service, phase) => {
9
+ const normalizedPhase = normalizePhase(phase);
10
+ const adapter = resolveServiceAdapter(container, service);
11
+ const flags = resolveCommandFlags(program);
12
+ const resources = createExecutionResources(container, flags, `prerequisites:${service}`);
13
+ registerProviderPrerequisites(adapter, resources);
14
+ await container.registry.invoke(service, "prerequisites", async () => {
15
+ await runPrerequisites(adapter, resources, normalizedPhase);
16
+ });
17
+ resources.context.complete({
18
+ success: `${adapter.label} ${normalizedPhase} prerequisites succeeded.`,
19
+ dry: `Dry run: would run ${adapter.label} ${normalizedPhase} prerequisites.`
20
+ });
21
+ });
22
+ }
23
+ //# sourceMappingURL=prerequisites.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prerequisites.js","sourceRoot":"","sources":["../../../src/cli/commands/prerequisites.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,wBAAwB,EACxB,cAAc,EACd,6BAA6B,EAC7B,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EACjB,MAAM,aAAa,CAAC;AAErB,MAAM,UAAU,4BAA4B,CAC1C,OAAgB,EAChB,SAAuB;IAEvB,OAAO;SACJ,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,wCAAwC,CAAC;SACrD,QAAQ,CACP,WAAW,EACX,mDAAmD,CACpD;SACA,QAAQ,CAAC,SAAS,EAAE,mCAAmC,CAAC;SACxD,MAAM,CAAC,KAAK,EAAE,OAAe,EAAE,KAAa,EAAE,EAAE;QAC/C,MAAM,eAAe,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,qBAAqB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC1D,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,wBAAwB,CACxC,SAAS,EACT,KAAK,EACL,iBAAiB,OAAO,EAAE,CAC3B,CAAC;QAEF,6BAA6B,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAElD,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,IAAI,EAAE;YACnE,MAAM,gBAAgB,CAAC,OAAO,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC;YACzB,OAAO,EAAE,GAAG,OAAO,CAAC,KAAK,IAAI,eAAe,2BAA2B;YACvE,GAAG,EAAE,sBAAsB,OAAO,CAAC,KAAK,IAAI,eAAe,iBAAiB;SAC7E,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { Command } from "commander";
2
+ import type { CliContainer } from "../container.js";
3
+ export interface QueryCommandOptions {
4
+ apiKey?: string;
5
+ model?: string;
6
+ }
7
+ export declare function registerQueryCommand(program: Command, container: CliContainer): void;
@@ -0,0 +1,46 @@
1
+ import { resolveCommandFlags } from "./shared.js";
2
+ import { DEFAULT_QUERY_MODEL } from "../constants.js";
3
+ export function registerQueryCommand(program, container) {
4
+ program
5
+ .command("query")
6
+ .description("Send a prompt to a Poe model via the OpenAI-compatible API and print the response.")
7
+ .argument("<text>", "Prompt text to send")
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: "query"
16
+ });
17
+ const model = options.model ?? DEFAULT_QUERY_MODEL;
18
+ if (flags.dryRun) {
19
+ logger.dryRun(`Dry run: would query "${model}" with text "${text}".`);
20
+ return;
21
+ }
22
+ try {
23
+ const apiKey = await container.options.resolveApiKey({
24
+ value: options.apiKey,
25
+ dryRun: flags.dryRun
26
+ });
27
+ const content = await container.poeApiClient.query({
28
+ apiKey,
29
+ model,
30
+ prompt: text
31
+ });
32
+ logger.info(`${model}: ${content}`);
33
+ }
34
+ catch (error) {
35
+ if (error instanceof Error) {
36
+ logger.logException(error, "query command", {
37
+ operation: "query model",
38
+ model,
39
+ promptLength: text.length
40
+ });
41
+ }
42
+ throw error;
43
+ }
44
+ });
45
+ }
46
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/cli/commands/query.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAOtD,MAAM,UAAU,oBAAoB,CAClC,OAAgB,EAChB,SAAuB;IAEvB,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CACV,oFAAoF,CACrF;SACA,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAC;SACzC,MAAM,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,mBAAmB,CAAC;SAClE,MAAM,CAAC,iBAAiB,EAAE,aAAa,CAAC;SACxC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAA4B,EAAE,EAAE;QAC3D,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,OAAO;SACf,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,mBAAmB,CAAC;QAEnD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,CAAC,MAAM,CACX,yBAAyB,KAAK,gBAAgB,IAAI,IAAI,CACvD,CAAC;YACF,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC;gBACnD,KAAK,EAAE,OAAO,CAAC,MAAM;gBACrB,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC;gBACjD,MAAM;gBACN,KAAK;gBACL,MAAM,EAAE,IAAI;aACb,CAAC,CAAC;YAEH,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,KAAK,OAAO,EAAE,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,eAAe,EAAE;oBAC1C,SAAS,EAAE,aAAa;oBACxB,KAAK;oBACL,YAAY,EAAE,IAAI,CAAC,MAAM;iBAC1B,CAAC,CAAC;YACL,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { Command } from "commander";
2
+ import type { CliContainer } from "../container.js";
3
+ export interface RemoveCommandOptions {
4
+ configName?: string;
5
+ }
6
+ export declare function registerRemoveCommand(program: Command, container: CliContainer): void;
@@ -0,0 +1,80 @@
1
+ import { buildProviderContext, createExecutionResources, resolveCommandFlags, resolveServiceAdapter } from "./shared.js";
2
+ import { DEFAULT_ROO_CONFIG_NAME } from "../constants.js";
3
+ export function registerRemoveCommand(program, container) {
4
+ program
5
+ .command("remove")
6
+ .description("Remove existing Poe API tooling configuration.")
7
+ .argument("<service>", "Service to remove (claude-code | codex | opencode | roo-code)")
8
+ .option("--config-name <name>", "Configuration profile name")
9
+ .action(async (service, options) => {
10
+ const adapter = resolveServiceAdapter(container, service);
11
+ const flags = resolveCommandFlags(program);
12
+ const resources = createExecutionResources(container, flags, `remove:${service}`);
13
+ const providerContext = buildProviderContext(container, adapter, resources);
14
+ const payload = await createRemovePayload(service, container, options, resources);
15
+ const removed = await container.registry.invoke(service, "remove", async (entry) => {
16
+ if (!entry.remove) {
17
+ throw new Error(`Service "${service}" does not support remove.`);
18
+ }
19
+ return await entry.remove(providerContext, payload);
20
+ });
21
+ const messages = formatRemovalMessages(service, adapter.label, removed, payload);
22
+ resources.context.complete(messages);
23
+ });
24
+ }
25
+ async function createRemovePayload(service, container, options, resources) {
26
+ const mutationHooks = resources.mutationHooks;
27
+ if (service === "roo-code") {
28
+ const configName = await container.options.resolveConfigName(options.configName, DEFAULT_ROO_CONFIG_NAME);
29
+ return {
30
+ configName,
31
+ mutationHooks
32
+ };
33
+ }
34
+ return { mutationHooks };
35
+ }
36
+ function formatRemovalMessages(service, label, removed, payload) {
37
+ const didRemove = typeof removed === "boolean" ? removed : Boolean(removed);
38
+ switch (service) {
39
+ case "claude-code":
40
+ return {
41
+ success: didRemove
42
+ ? "Removed Claude Code configuration."
43
+ : "No Claude Code configuration found.",
44
+ dry: "Dry run: would remove Claude Code configuration."
45
+ };
46
+ case "codex":
47
+ return {
48
+ success: didRemove
49
+ ? "Removed Codex configuration."
50
+ : "No Codex configuration found.",
51
+ dry: "Dry run: would remove Codex configuration."
52
+ };
53
+ case "opencode":
54
+ return {
55
+ success: didRemove
56
+ ? "Removed OpenCode CLI configuration."
57
+ : "No OpenCode CLI configuration found.",
58
+ dry: "Dry run: would remove OpenCode CLI configuration."
59
+ };
60
+ case "roo-code": {
61
+ const configName = typeof payload.configName === "string"
62
+ ? payload.configName
63
+ : DEFAULT_ROO_CONFIG_NAME;
64
+ return {
65
+ success: didRemove
66
+ ? `Removed Roo Code configuration "${configName}".`
67
+ : `No Roo Code configuration named "${configName}" found.`,
68
+ dry: "Dry run: would remove Roo Code configuration."
69
+ };
70
+ }
71
+ default:
72
+ return {
73
+ success: didRemove
74
+ ? `Removed ${label} configuration.`
75
+ : `No ${label} configuration found.`,
76
+ dry: `Dry run: would remove ${label} configuration.`
77
+ };
78
+ }
79
+ }
80
+ //# sourceMappingURL=remove.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove.js","sourceRoot":"","sources":["../../../src/cli/commands/remove.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 registerRootHandler(program: Command, container: CliContainer): void;
@@ -0,0 +1,7 @@
1
+ import { launchInteractiveMode } from "../interactive-launcher.js";
2
+ export function registerRootHandler(program, container) {
3
+ program.action(async () => {
4
+ await launchInteractiveMode(container.dependencies);
5
+ });
6
+ }
7
+ //# sourceMappingURL=root.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"root.js","sourceRoot":"","sources":["../../../src/cli/commands/root.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,MAAM,UAAU,mBAAmB,CACjC,OAAgB,EAChB,SAAuB;IAEvB,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;QACxB,MAAM,qBAAqB,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { Command } from "commander";
2
+ import type { CliContainer } from "../container.js";
3
+ import type { ProviderAdapter, ProviderContext } from "../service-registry.js";
4
+ import { normalizePhase, type CommandContext, type MutationLogEntry } from "../context.js";
5
+ import type { ScopedLogger } from "../logger.js";
6
+ import type { ServiceMutationHooks } from "../../services/service-manifest.js";
7
+ import type { PrerequisitePhase } from "../../utils/prerequisites.js";
8
+ export interface CommandFlags {
9
+ dryRun: boolean;
10
+ verbose: boolean;
11
+ }
12
+ export interface ExecutionResources {
13
+ logger: ScopedLogger;
14
+ context: CommandContext;
15
+ mutationHooks?: ServiceMutationHooks;
16
+ recordMutation?: (entry: MutationLogEntry) => void;
17
+ }
18
+ export declare function resolveCommandFlags(program: Command): CommandFlags;
19
+ export declare function createExecutionResources(container: CliContainer, flags: CommandFlags, scope: string): ExecutionResources;
20
+ export declare function buildProviderContext(container: CliContainer, adapter: ProviderAdapter, resources: ExecutionResources): ProviderContext;
21
+ export declare function registerProviderPrerequisites(adapter: ProviderAdapter, resources: ExecutionResources): void;
22
+ export declare function runPrerequisites(adapter: ProviderAdapter, resources: ExecutionResources, phase: PrerequisitePhase): Promise<void>;
23
+ export declare function resolveServiceAdapter(container: CliContainer, service: string): ProviderAdapter;
24
+ export { normalizePhase };