poe-code 3.0.29 → 3.0.31

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 (227) hide show
  1. package/README.md +2 -2
  2. package/dist/bin/poe-claude.js +23 -0
  3. package/dist/bin/poe-codex.js +23 -0
  4. package/dist/bin/poe-kimi-cli.js +23 -0
  5. package/dist/bin/poe-opencode.js +23 -0
  6. package/dist/bin.cjs +9 -0
  7. package/dist/cli/binary-aliases.d.ts +7 -0
  8. package/dist/cli/binary-aliases.js +26 -0
  9. package/dist/cli/binary-aliases.js.map +1 -0
  10. package/dist/cli/bootstrap.d.ts +4 -0
  11. package/dist/cli/bootstrap.js +78 -0
  12. package/dist/cli/bootstrap.js.map +1 -0
  13. package/dist/cli/command-not-found.d.ts +8 -0
  14. package/dist/cli/command-not-found.js +34 -0
  15. package/dist/cli/command-not-found.js.map +1 -0
  16. package/dist/cli/commands/configure-payload.d.ts +15 -0
  17. package/dist/cli/commands/configure-payload.js +31 -0
  18. package/dist/cli/commands/configure-payload.js.map +1 -0
  19. package/dist/cli/commands/configure.d.ts +12 -0
  20. package/dist/cli/commands/configure.js +151 -0
  21. package/dist/cli/commands/configure.js.map +1 -0
  22. package/dist/cli/commands/ensure-isolated-config.d.ts +12 -0
  23. package/dist/cli/commands/ensure-isolated-config.js +53 -0
  24. package/dist/cli/commands/ensure-isolated-config.js.map +1 -0
  25. package/dist/cli/commands/generate.d.ts +9 -0
  26. package/dist/cli/commands/generate.js +322 -0
  27. package/dist/cli/commands/generate.js.map +1 -0
  28. package/dist/cli/commands/install.d.ts +4 -0
  29. package/dist/cli/commands/install.js +40 -0
  30. package/dist/cli/commands/install.js.map +1 -0
  31. package/dist/cli/commands/login.d.ts +6 -0
  32. package/dist/cli/commands/login.js +105 -0
  33. package/dist/cli/commands/login.js.map +1 -0
  34. package/dist/cli/commands/mcp.d.ts +3 -0
  35. package/dist/cli/commands/mcp.js +178 -0
  36. package/dist/cli/commands/mcp.js.map +1 -0
  37. package/dist/cli/commands/models.d.ts +3 -0
  38. package/dist/cli/commands/models.js +183 -0
  39. package/dist/cli/commands/models.js.map +1 -0
  40. package/dist/cli/commands/ralph-worktree.d.ts +3 -0
  41. package/dist/cli/commands/ralph-worktree.js +73 -0
  42. package/dist/cli/commands/ralph-worktree.js.map +1 -0
  43. package/dist/cli/commands/ralph.d.ts +3 -0
  44. package/dist/cli/commands/ralph.js +424 -0
  45. package/dist/cli/commands/ralph.js.map +1 -0
  46. package/dist/cli/commands/shared.d.ts +29 -0
  47. package/dist/cli/commands/shared.js +82 -0
  48. package/dist/cli/commands/shared.js.map +1 -0
  49. package/dist/cli/commands/skill.d.ts +3 -0
  50. package/dist/cli/commands/skill.js +242 -0
  51. package/dist/cli/commands/skill.js.map +1 -0
  52. package/dist/cli/commands/spawn.d.ts +17 -0
  53. package/dist/cli/commands/spawn.js +226 -0
  54. package/dist/cli/commands/spawn.js.map +1 -0
  55. package/dist/cli/commands/test.d.ts +8 -0
  56. package/dist/cli/commands/test.js +124 -0
  57. package/dist/cli/commands/test.js.map +1 -0
  58. package/dist/cli/commands/unconfigure.d.ts +7 -0
  59. package/dist/cli/commands/unconfigure.js +116 -0
  60. package/dist/cli/commands/unconfigure.js.map +1 -0
  61. package/dist/cli/commands/usage.d.ts +3 -0
  62. package/dist/cli/commands/usage.js +186 -0
  63. package/dist/cli/commands/usage.js.map +1 -0
  64. package/dist/cli/commands/version.d.ts +3 -0
  65. package/dist/cli/commands/version.js +31 -0
  66. package/dist/cli/commands/version.js.map +1 -0
  67. package/dist/cli/commands/wrap.d.ts +3 -0
  68. package/dist/cli/commands/wrap.js +61 -0
  69. package/dist/cli/commands/wrap.js.map +1 -0
  70. package/dist/cli/constants.d.ts +24 -0
  71. package/dist/cli/constants.js +44 -0
  72. package/dist/cli/constants.js.map +1 -0
  73. package/dist/cli/container.d.ts +42 -0
  74. package/dist/cli/container.js +90 -0
  75. package/dist/cli/container.js.map +1 -0
  76. package/dist/cli/context.d.ts +33 -0
  77. package/dist/cli/context.js +91 -0
  78. package/dist/cli/context.js.map +1 -0
  79. package/dist/cli/environment.d.ts +21 -0
  80. package/dist/cli/environment.js +106 -0
  81. package/dist/cli/environment.js.map +1 -0
  82. package/dist/cli/error-logger.d.ts +62 -0
  83. package/dist/cli/error-logger.js +155 -0
  84. package/dist/cli/error-logger.js.map +1 -0
  85. package/dist/cli/errors.d.ts +95 -0
  86. package/dist/cli/errors.js +141 -0
  87. package/dist/cli/errors.js.map +1 -0
  88. package/dist/cli/exit-signals.d.ts +4 -0
  89. package/dist/cli/exit-signals.js +8 -0
  90. package/dist/cli/exit-signals.js.map +1 -0
  91. package/dist/cli/http.d.ts +12 -0
  92. package/dist/cli/http.js +2 -0
  93. package/dist/cli/http.js.map +1 -0
  94. package/dist/cli/isolated-env-runner.d.ts +10 -0
  95. package/dist/cli/isolated-env-runner.js +50 -0
  96. package/dist/cli/isolated-env-runner.js.map +1 -0
  97. package/dist/cli/isolated-env.d.ts +24 -0
  98. package/dist/cli/isolated-env.js +210 -0
  99. package/dist/cli/isolated-env.js.map +1 -0
  100. package/dist/cli/logger.d.ts +36 -0
  101. package/dist/cli/logger.js +191 -0
  102. package/dist/cli/logger.js.map +1 -0
  103. package/dist/cli/mcp-output-format.d.ts +2 -0
  104. package/dist/cli/mcp-output-format.js +27 -0
  105. package/dist/cli/mcp-output-format.js.map +1 -0
  106. package/dist/cli/mcp-server.d.ts +21 -0
  107. package/dist/cli/mcp-server.js +321 -0
  108. package/dist/cli/mcp-server.js.map +1 -0
  109. package/dist/cli/options.d.ts +45 -0
  110. package/dist/cli/options.js +111 -0
  111. package/dist/cli/options.js.map +1 -0
  112. package/dist/cli/poe-code-command-runner.d.ts +6 -0
  113. package/dist/cli/poe-code-command-runner.js +63 -0
  114. package/dist/cli/poe-code-command-runner.js.map +1 -0
  115. package/dist/cli/program.d.ts +4 -0
  116. package/dist/cli/program.js +249 -0
  117. package/dist/cli/program.js.map +1 -0
  118. package/dist/cli/prompt-runner.d.ts +10 -0
  119. package/dist/cli/prompt-runner.js +79 -0
  120. package/dist/cli/prompt-runner.js.map +1 -0
  121. package/dist/cli/prompts.d.ts +39 -0
  122. package/dist/cli/prompts.js +42 -0
  123. package/dist/cli/prompts.js.map +1 -0
  124. package/dist/cli/service-registry.d.ts +108 -0
  125. package/dist/cli/service-registry.js +83 -0
  126. package/dist/cli/service-registry.js.map +1 -0
  127. package/dist/cli/types.d.ts +2 -0
  128. package/dist/cli/types.js +2 -0
  129. package/dist/cli/types.js.map +1 -0
  130. package/dist/cli/ui/service-menu.d.ts +7 -0
  131. package/dist/cli/ui/service-menu.js +43 -0
  132. package/dist/cli/ui/service-menu.js.map +1 -0
  133. package/dist/index.d.ts +8 -0
  134. package/dist/index.js +36812 -0
  135. package/dist/index.js.map +7 -0
  136. package/dist/providers/claude-code.d.ts +13 -0
  137. package/dist/providers/claude-code.js +143 -0
  138. package/dist/providers/claude-code.js.map +1 -0
  139. package/dist/providers/codex.d.ts +17 -0
  140. package/dist/providers/codex.js +144 -0
  141. package/dist/providers/codex.js.map +1 -0
  142. package/dist/providers/create-provider.d.ts +29 -0
  143. package/dist/providers/create-provider.js +78 -0
  144. package/dist/providers/create-provider.js.map +1 -0
  145. package/dist/providers/index.d.ts +2 -0
  146. package/dist/providers/index.js +8 -0
  147. package/dist/providers/index.js.map +1 -0
  148. package/dist/providers/kimi.d.ts +4 -0
  149. package/dist/providers/kimi.js +123 -0
  150. package/dist/providers/kimi.js.map +1 -0
  151. package/dist/providers/opencode.d.ts +3 -0
  152. package/dist/providers/opencode.js +119 -0
  153. package/dist/providers/opencode.js.map +1 -0
  154. package/dist/providers/spawn-options.d.ts +13 -0
  155. package/dist/providers/spawn-options.js +2 -0
  156. package/dist/providers/spawn-options.js.map +1 -0
  157. package/dist/sdk/container.d.ts +18 -0
  158. package/dist/sdk/container.js +127 -0
  159. package/dist/sdk/container.js.map +1 -0
  160. package/dist/sdk/credentials.d.ts +9 -0
  161. package/dist/sdk/credentials.js +35 -0
  162. package/dist/sdk/credentials.js.map +1 -0
  163. package/dist/sdk/generate.d.ts +5 -0
  164. package/dist/sdk/generate.js +97 -0
  165. package/dist/sdk/generate.js.map +1 -0
  166. package/dist/sdk/spawn-core.d.ts +23 -0
  167. package/dist/sdk/spawn-core.js +105 -0
  168. package/dist/sdk/spawn-core.js.map +1 -0
  169. package/dist/sdk/spawn.d.ts +31 -0
  170. package/dist/sdk/spawn.js +109 -0
  171. package/dist/sdk/spawn.js.map +1 -0
  172. package/dist/sdk/types.d.ts +44 -0
  173. package/dist/sdk/types.js +2 -0
  174. package/dist/sdk/types.js.map +1 -0
  175. package/dist/services/client-instance.d.ts +12 -0
  176. package/dist/services/client-instance.js +36 -0
  177. package/dist/services/client-instance.js.map +1 -0
  178. package/dist/services/credentials.d.ts +24 -0
  179. package/dist/services/credentials.js +157 -0
  180. package/dist/services/credentials.js.map +1 -0
  181. package/dist/services/llm-client.d.ts +22 -0
  182. package/dist/services/llm-client.js +138 -0
  183. package/dist/services/llm-client.js.map +1 -0
  184. package/dist/services/media-download.d.ts +17 -0
  185. package/dist/services/media-download.js +42 -0
  186. package/dist/services/media-download.js.map +1 -0
  187. package/dist/services/model-strategy.d.ts +99 -0
  188. package/dist/services/model-strategy.js +187 -0
  189. package/dist/services/model-strategy.js.map +1 -0
  190. package/dist/services/mutation-events.d.ts +4 -0
  191. package/dist/services/mutation-events.js +53 -0
  192. package/dist/services/mutation-events.js.map +1 -0
  193. package/dist/services/service-install.d.ts +22 -0
  194. package/dist/services/service-install.js +70 -0
  195. package/dist/services/service-install.js.map +1 -0
  196. package/dist/services/version.d.ts +11 -0
  197. package/dist/services/version.js +28 -0
  198. package/dist/services/version.js.map +1 -0
  199. package/dist/tools/label-generator.d.ts +11 -0
  200. package/dist/tools/label-generator.js +78 -0
  201. package/dist/tools/label-generator.js.map +1 -0
  202. package/dist/utils/backup.d.ts +5 -0
  203. package/dist/utils/backup.js +56 -0
  204. package/dist/utils/backup.js.map +1 -0
  205. package/dist/utils/cli-settings-merge.d.ts +22 -0
  206. package/dist/utils/cli-settings-merge.js +56 -0
  207. package/dist/utils/cli-settings-merge.js.map +1 -0
  208. package/dist/utils/command-checks.d.ts +36 -0
  209. package/dist/utils/command-checks.js +120 -0
  210. package/dist/utils/command-checks.js.map +1 -0
  211. package/dist/utils/command-line.d.ts +1 -0
  212. package/dist/utils/command-line.js +54 -0
  213. package/dist/utils/command-line.js.map +1 -0
  214. package/dist/utils/dry-run.d.ts +39 -0
  215. package/dist/utils/dry-run.js +315 -0
  216. package/dist/utils/dry-run.js.map +1 -0
  217. package/dist/utils/execution-context.d.ts +48 -0
  218. package/dist/utils/execution-context.js +151 -0
  219. package/dist/utils/execution-context.js.map +1 -0
  220. package/dist/utils/file-system.d.ts +21 -0
  221. package/dist/utils/file-system.js +2 -0
  222. package/dist/utils/file-system.js.map +1 -0
  223. package/dist/utils/json.d.ts +12 -0
  224. package/dist/utils/json.js +45 -0
  225. package/dist/utils/json.js.map +1 -0
  226. package/package.json +5 -2
  227. package/packages/tiny-mcp-test-server/dist/index.js +47 -0
@@ -0,0 +1,7 @@
1
+ import type { Command } from "commander";
2
+ import type { CliContainer } from "../container.js";
3
+ export interface UnconfigureCommandOptions {
4
+ configName?: string;
5
+ }
6
+ export declare function registerUnconfigureCommand(program: Command, container: CliContainer): Command;
7
+ export declare function executeUnconfigure(program: Command, container: CliContainer, service: string, options: UnconfigureCommandOptions): Promise<void>;
@@ -0,0 +1,116 @@
1
+ import { unconfigureService } from "../../services/credentials.js";
2
+ import { createMutationReporter } from "../../services/mutation-events.js";
3
+ import { resolveIsolatedTargetDirectory } from "../isolated-env.js";
4
+ import { buildProviderContext, createExecutionResources, resolveCommandFlags, resolveServiceAdapter, formatServiceList } from "./shared.js";
5
+ export function registerUnconfigureCommand(program, container) {
6
+ const serviceNames = container.registry.list().map((service) => service.name);
7
+ const serviceDescription = `Agent to unconfigure${formatServiceList(serviceNames)}`;
8
+ return program
9
+ .command("unconfigure")
10
+ .description("Remove existing Poe API tooling configuration.")
11
+ .argument("<agent>", serviceDescription)
12
+ .action(async (service, options) => {
13
+ await executeUnconfigure(program, container, service, options);
14
+ });
15
+ }
16
+ export async function executeUnconfigure(program, container, service, options) {
17
+ const adapter = resolveServiceAdapter(container, service);
18
+ const canonicalService = adapter.name;
19
+ const flags = resolveCommandFlags(program);
20
+ const resources = createExecutionResources(container, flags, `unconfigure:${canonicalService}`);
21
+ resources.logger.intro(`unconfigure ${canonicalService}`);
22
+ const providerContext = buildProviderContext(container, adapter, resources);
23
+ const mutationLogger = createMutationReporter(resources.logger);
24
+ const payload = await createUnconfigurePayload({
25
+ service: canonicalService,
26
+ container,
27
+ options,
28
+ context: providerContext
29
+ });
30
+ const unconfigured = await container.registry.invoke(canonicalService, "unconfigure", async (entry) => {
31
+ if (!entry.unconfigure) {
32
+ throw new Error(`Agent "${canonicalService}" does not support unconfigure.`);
33
+ }
34
+ const result = await entry.unconfigure({
35
+ fs: providerContext.command.fs,
36
+ env: providerContext.env,
37
+ command: providerContext.command,
38
+ options: payload
39
+ }, { observers: mutationLogger });
40
+ const isolated = adapter.isolatedEnv;
41
+ if (isolated && isolated.requiresConfig !== false) {
42
+ await entry.unconfigure({
43
+ fs: providerContext.command.fs,
44
+ env: providerContext.env,
45
+ command: providerContext.command,
46
+ options: payload,
47
+ pathMapper: {
48
+ mapTargetDirectory: ({ targetDirectory }) => resolveIsolatedTargetDirectory({
49
+ targetDirectory,
50
+ isolated,
51
+ env: providerContext.env,
52
+ providerName: adapter.name
53
+ })
54
+ }
55
+ }, { observers: mutationLogger });
56
+ }
57
+ return result;
58
+ });
59
+ if (!flags.dryRun) {
60
+ await unconfigureService({
61
+ fs: container.fs,
62
+ filePath: providerContext.env.credentialsPath,
63
+ service: canonicalService
64
+ });
65
+ }
66
+ const messages = formatUnconfigureMessages(canonicalService, adapter.label, unconfigured, payload);
67
+ resources.context.complete(messages);
68
+ resources.context.finalize();
69
+ }
70
+ async function createUnconfigurePayload(init) {
71
+ const { service, context } = init;
72
+ switch (service) {
73
+ case "claude-code":
74
+ return { env: context.env };
75
+ case "codex":
76
+ return { env: context.env };
77
+ case "opencode":
78
+ return { env: context.env };
79
+ default:
80
+ return {};
81
+ }
82
+ }
83
+ function formatUnconfigureMessages(service, label, unconfigured, _payload) {
84
+ const didUnconfigure = typeof unconfigured === "boolean" ? unconfigured : Boolean(unconfigured);
85
+ switch (service) {
86
+ case "claude-code":
87
+ return {
88
+ success: didUnconfigure
89
+ ? "Removed Claude Code configuration."
90
+ : "No Claude Code configuration found.",
91
+ dry: "Dry run: would remove Claude Code configuration."
92
+ };
93
+ case "codex":
94
+ return {
95
+ success: didUnconfigure
96
+ ? "Removed Codex configuration."
97
+ : "No Codex configuration found.",
98
+ dry: "Dry run: would remove Codex configuration."
99
+ };
100
+ case "opencode":
101
+ return {
102
+ success: didUnconfigure
103
+ ? "Removed OpenCode CLI configuration."
104
+ : "No OpenCode CLI configuration found.",
105
+ dry: "Dry run: would remove OpenCode CLI configuration."
106
+ };
107
+ default:
108
+ return {
109
+ success: didUnconfigure
110
+ ? `Removed ${label} configuration.`
111
+ : `No ${label} configuration found.`,
112
+ dry: `Dry run: would remove ${label} configuration.`
113
+ };
114
+ }
115
+ }
116
+ //# sourceMappingURL=unconfigure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unconfigure.js","sourceRoot":"","sources":["../../../src/cli/commands/unconfigure.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 registerUsageCommand(program: Command, container: CliContainer): void;
@@ -0,0 +1,186 @@
1
+ import { createExecutionResources, resolveCommandFlags } from "./shared.js";
2
+ import { loadCredentials } from "../../services/credentials.js";
3
+ import { AuthenticationError, ApiError } from "../errors.js";
4
+ import { confirm, isCancel, getTheme, widths, typography, renderTable } from "@poe-code/design-system";
5
+ async function executeBalance(program, container) {
6
+ const flags = resolveCommandFlags(program);
7
+ const resources = createExecutionResources(container, flags, "usage:balance");
8
+ resources.logger.intro("usage balance");
9
+ try {
10
+ const apiKey = await loadCredentials({
11
+ fs: container.fs,
12
+ filePath: container.env.credentialsPath
13
+ });
14
+ if (!apiKey) {
15
+ throw new AuthenticationError("Poe API key not found. Run 'poe-code login' first.");
16
+ }
17
+ if (flags.dryRun) {
18
+ resources.logger.dryRun("Dry run: would fetch usage balance from Poe API.");
19
+ return;
20
+ }
21
+ const response = await container.httpClient(`${container.env.poeBaseUrl}/usage/current_balance`, {
22
+ method: "GET",
23
+ headers: {
24
+ Authorization: `Bearer ${apiKey}`
25
+ }
26
+ });
27
+ if (!response.ok) {
28
+ throw new ApiError(`Failed to fetch usage balance (HTTP ${response.status})`, {
29
+ httpStatus: response.status,
30
+ endpoint: "/usage/current_balance"
31
+ });
32
+ }
33
+ const data = (await response.json());
34
+ const theme = getTheme();
35
+ const formatted = data.current_point_balance.toLocaleString("en-US");
36
+ const styledBalance = typography.bold(theme.accent(formatted));
37
+ resources.logger.info(`Current balance: ${styledBalance} points`);
38
+ resources.logger.feedback("Need more points?", "https://poe.com/api/keys");
39
+ }
40
+ catch (error) {
41
+ if (error instanceof Error) {
42
+ resources.logger.logException(error, "usage balance", {
43
+ operation: "fetch-balance"
44
+ });
45
+ }
46
+ throw error;
47
+ }
48
+ }
49
+ export function registerUsageCommand(program, container) {
50
+ const usage = program
51
+ .command("usage")
52
+ .description("Check Poe API usage information.")
53
+ .action(async () => {
54
+ await executeBalance(program, container);
55
+ });
56
+ usage
57
+ .command("balance")
58
+ .description("Display current point balance.")
59
+ .action(async () => {
60
+ await executeBalance(program, container);
61
+ });
62
+ usage
63
+ .command("list")
64
+ .description("Display usage history.")
65
+ .option("--filter <model>", "Filter results by model name")
66
+ .option("--pages <count>", "Number of pages to load automatically", parseInt)
67
+ .action(async function () {
68
+ const flags = resolveCommandFlags(program);
69
+ const resources = createExecutionResources(container, flags, "usage:list");
70
+ const commandOptions = this.opts();
71
+ resources.logger.intro("usage list");
72
+ try {
73
+ const apiKey = await loadCredentials({
74
+ fs: container.fs,
75
+ filePath: container.env.credentialsPath
76
+ });
77
+ if (!apiKey) {
78
+ throw new AuthenticationError("Poe API key not found. Run 'poe-code login' first.");
79
+ }
80
+ if (flags.dryRun) {
81
+ resources.logger.dryRun("Dry run: would fetch usage history from Poe API.");
82
+ return;
83
+ }
84
+ const theme = getTheme();
85
+ const filterTerm = commandOptions.filter;
86
+ const tzAbbr = Intl.DateTimeFormat("en-US", { timeZoneName: "short" })
87
+ .formatToParts(new Date())
88
+ .find((p) => p.type === "timeZoneName")?.value ?? "local";
89
+ const dateTitle = `Date [${tzAbbr}]`;
90
+ const dateWidth = Math.max(16, dateTitle.length);
91
+ const costTitle = "Cost (compute points)";
92
+ const costWidth = Math.max(10, costTitle.length);
93
+ const tableChrome = 10;
94
+ const modelMaxWidth = widths.maxLine - dateWidth - costWidth - tableChrome;
95
+ const tableColumns = [
96
+ { name: "Date", title: dateTitle, alignment: "left", maxLen: dateWidth },
97
+ { name: "Model", title: "Model", alignment: "left", maxLen: modelMaxWidth },
98
+ { name: "Cost", title: costTitle, alignment: "right", maxLen: costWidth }
99
+ ];
100
+ const formatEntry = (entry) => {
101
+ const date = new Date(entry.creation_time / 1000);
102
+ const year = date.getFullYear();
103
+ const month = String(date.getMonth() + 1).padStart(2, "0");
104
+ const day = String(date.getDate()).padStart(2, "0");
105
+ const hours = String(date.getHours()).padStart(2, "0");
106
+ const minutes = String(date.getMinutes()).padStart(2, "0");
107
+ const formatted = `${year}-${month}-${day} ${hours}:${minutes}`;
108
+ const modelName = entry.bot_name.length > modelMaxWidth
109
+ ? entry.bot_name.slice(0, modelMaxWidth - 1) + "\u2026"
110
+ : entry.bot_name;
111
+ return {
112
+ Date: theme.muted(formatted),
113
+ Model: theme.accent(modelName),
114
+ Cost: entry.cost_points < 0
115
+ ? theme.error(String(entry.cost_points))
116
+ : theme.success(String(entry.cost_points))
117
+ };
118
+ };
119
+ let totalFetched = 0;
120
+ let totalFiltered = 0;
121
+ let startingAfter;
122
+ let pagesLoaded = 0;
123
+ const maxPages = commandOptions.pages;
124
+ while (true) {
125
+ let url = `${container.env.poeBaseUrl}/usage/points_history?limit=20`;
126
+ if (startingAfter) {
127
+ url += `&starting_after=${startingAfter}`;
128
+ }
129
+ const response = await container.httpClient(url, {
130
+ method: "GET",
131
+ headers: {
132
+ Authorization: `Bearer ${apiKey}`
133
+ }
134
+ });
135
+ if (!response.ok) {
136
+ throw new ApiError(`Failed to fetch usage history (HTTP ${response.status})`, {
137
+ httpStatus: response.status,
138
+ endpoint: "/usage/points_history"
139
+ });
140
+ }
141
+ const result = (await response.json());
142
+ pagesLoaded++;
143
+ totalFetched += result.data.length;
144
+ const pageEntries = filterTerm
145
+ ? result.data.filter((entry) => entry.bot_name.toLowerCase().includes(filterTerm.toLowerCase()))
146
+ : result.data;
147
+ totalFiltered += pageEntries.length;
148
+ if (pageEntries.length > 0) {
149
+ const rows = pageEntries.map(formatEntry);
150
+ resources.logger.info(renderTable({ theme, columns: tableColumns, rows }));
151
+ }
152
+ if (!result.has_more || result.data.length === 0) {
153
+ break;
154
+ }
155
+ if (maxPages !== undefined && pagesLoaded >= maxPages) {
156
+ break;
157
+ }
158
+ startingAfter = result.data[result.data.length - 1].query_id;
159
+ if (maxPages === undefined) {
160
+ const shouldContinue = await confirm({ message: "Load more?" });
161
+ if (isCancel(shouldContinue) || !shouldContinue) {
162
+ break;
163
+ }
164
+ }
165
+ }
166
+ if (totalFetched === 0) {
167
+ resources.logger.info("No usage history found.");
168
+ }
169
+ else if (filterTerm && totalFiltered === 0) {
170
+ resources.logger.info(`No entries match "${filterTerm}".`);
171
+ }
172
+ else if (filterTerm && totalFiltered > 0) {
173
+ resources.logger.info(`Showing entries matching "${filterTerm}".`);
174
+ }
175
+ }
176
+ catch (error) {
177
+ if (error instanceof Error) {
178
+ resources.logger.logException(error, "usage list", {
179
+ operation: "fetch-history"
180
+ });
181
+ }
182
+ throw error;
183
+ }
184
+ });
185
+ }
186
+ //# sourceMappingURL=usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage.js","sourceRoot":"","sources":["../../../src/cli/commands/usage.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 registerVersionOption(program: Command, container: CliContainer, currentVersion: string): void;
@@ -0,0 +1,31 @@
1
+ import { checkForUpdate } from "../../services/version.js";
2
+ import { VersionExit } from "../exit-signals.js";
3
+ export function registerVersionOption(program, container, currentVersion) {
4
+ program.option("-V, --version", "Output the version number.");
5
+ program.hook("preAction", async (thisCommand) => {
6
+ const opts = thisCommand.opts();
7
+ if (opts.version) {
8
+ await displayVersion(container, currentVersion);
9
+ throw new VersionExit();
10
+ }
11
+ });
12
+ }
13
+ async function displayVersion(container, currentVersion) {
14
+ const { loggerFactory, httpClient } = container;
15
+ const logger = loggerFactory.create({
16
+ dryRun: false,
17
+ verbose: false,
18
+ scope: "version"
19
+ });
20
+ logger.info(`poe-code ${currentVersion}`);
21
+ const result = await checkForUpdate({
22
+ currentVersion,
23
+ httpClient
24
+ });
25
+ if (result?.updateAvailable) {
26
+ logger.info("");
27
+ logger.info(`Update available: ${result.currentVersion} -> ${result.latestVersion}`);
28
+ logger.info("Run: npm install -g poe-code@latest");
29
+ }
30
+ }
31
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/cli/commands/version.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,UAAU,qBAAqB,CACnC,OAAgB,EAChB,SAAuB,EACvB,cAAsB;IAEtB,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,4BAA4B,CAAC,CAAC;IAE9D,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE;QAC9C,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,cAAc,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;YAChD,MAAM,IAAI,WAAW,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,SAAuB,EACvB,cAAsB;IAEtB,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,SAAS,CAAC;IAChD,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC;QAClC,MAAM,EAAE,KAAK;QACb,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,SAAS;KACjB,CAAC,CAAC;IAEH,MAAM,CAAC,IAAI,CAAC,YAAY,cAAc,EAAE,CAAC,CAAC;IAE1C,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC;QAClC,cAAc;QACd,UAAU;KACX,CAAC,CAAC;IAEH,IAAI,MAAM,EAAE,eAAe,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,CAAC,IAAI,CACT,qBAAqB,MAAM,CAAC,cAAc,OAAO,MAAM,CAAC,aAAa,EAAE,CACxE,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IACrD,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from "commander";
2
+ import type { CliContainer } from "../container.js";
3
+ export declare function registerWrapCommand(program: Command, container: CliContainer): Command;
@@ -0,0 +1,61 @@
1
+ import { formatServiceList, listIsolatedServiceIds, resolveCommandFlags, resolveServiceAdapter } from "./shared.js";
2
+ import { isolatedEnvRunner } from "../isolated-env-runner.js";
3
+ import { ensureIsolatedConfigForService } from "./ensure-isolated-config.js";
4
+ import { applyIsolatedEnvRepairs } from "../isolated-env.js";
5
+ export function registerWrapCommand(program, container) {
6
+ const serviceNames = listIsolatedServiceIds(container);
7
+ const serviceDescription = `Agent to wrap${formatServiceList(serviceNames)}`;
8
+ return program
9
+ .command("wrap")
10
+ .description("Run an agent CLI with Poe isolated configuration.")
11
+ .allowUnknownOption(true)
12
+ .allowExcessArguments(true)
13
+ .argument("<agent>", serviceDescription)
14
+ .argument("[agentArgs...]", "Arguments forwarded to the agent")
15
+ .action(async (service, agentArgs = []) => {
16
+ const requestedService = service;
17
+ const flags = resolveCommandFlags(program);
18
+ const adapter = resolveServiceAdapter(container, requestedService);
19
+ const canonicalService = adapter.name;
20
+ const isolated = adapter.isolatedEnv;
21
+ if (!isolated) {
22
+ throw new Error(`Agent "${requestedService}" does not support isolated configuration wrappers.`);
23
+ }
24
+ const argv = process.argv;
25
+ const wrapIndex = argv.indexOf("wrap");
26
+ const serviceIndex = wrapIndex >= 0 && argv[wrapIndex + 1] === requestedService
27
+ ? wrapIndex + 1
28
+ : argv.indexOf(requestedService);
29
+ const startIndex = serviceIndex >= 0 ? serviceIndex + 1 : argv.length;
30
+ let forwarded = argv.slice(startIndex);
31
+ if (forwarded[0] === "--") {
32
+ forwarded = forwarded.slice(1);
33
+ }
34
+ if (forwarded.length === 0) {
35
+ forwarded = agentArgs;
36
+ }
37
+ if (isolated.requiresConfig !== false) {
38
+ await ensureIsolatedConfigForService({
39
+ container,
40
+ adapter,
41
+ service: canonicalService,
42
+ flags,
43
+ refresh: true
44
+ });
45
+ }
46
+ await applyIsolatedEnvRepairs({
47
+ fs: container.fs,
48
+ env: container.env,
49
+ providerName: adapter.name,
50
+ isolated
51
+ });
52
+ await isolatedEnvRunner({
53
+ env: container.env,
54
+ fs: container.fs,
55
+ providerName: adapter.name,
56
+ isolated,
57
+ argv: ["node", "poe-code", ...forwarded]
58
+ });
59
+ });
60
+ }
61
+ //# sourceMappingURL=wrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrap.js","sourceRoot":"","sources":["../../../src/cli/commands/wrap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ export declare const FRONTIER_MODELS: readonly ["anthropic/claude-opus-4.6", "anthropic/claude-sonnet-4.5", "openai/gpt-5.2", "google/gemini-3-pro"];
2
+ export declare const DEFAULT_FRONTIER_MODEL = "anthropic/claude-sonnet-4.5";
3
+ export declare const DEFAULT_TEXT_MODEL = "anthropic/claude-sonnet-4.5";
4
+ export declare const DEFAULT_IMAGE_BOT = "google/nano-banana-pro";
5
+ export declare const DEFAULT_AUDIO_BOT = "elevenlabs/elevenlabs-v3";
6
+ export declare const DEFAULT_VIDEO_BOT = "google/veo-3.1";
7
+ export declare const CLAUDE_CODE_VARIANTS: {
8
+ readonly haiku: "anthropic/claude-haiku-4.5";
9
+ readonly sonnet: "anthropic/claude-sonnet-4.5";
10
+ readonly opus: "anthropic/claude-opus-4.6";
11
+ };
12
+ export declare const DEFAULT_CLAUDE_CODE_MODEL: "anthropic/claude-opus-4.6";
13
+ /**
14
+ * Extracts the model ID from a namespaced model slug (lowercase).
15
+ * e.g., "anthropic/claude-sonnet-4.5" -> "claude-sonnet-4.5"
16
+ */
17
+ export declare function stripModelNamespace(model: string): string;
18
+ export declare const CODEX_MODELS: readonly ["openai/gpt-5.2-codex", "openai/gpt-5.2", "openai/gpt-5.2-chat", "openai/gpt-5.2-pro", "openai/gpt-5.1", "openai/gpt-5.1-codex-mini"];
19
+ export declare const DEFAULT_CODEX_MODEL: "openai/gpt-5.2-codex";
20
+ export declare const KIMI_MODELS: readonly ["novitaai/kimi-k2.5", "novitaai/kimi-k2-thinking"];
21
+ export declare const DEFAULT_KIMI_MODEL: "novitaai/kimi-k2.5";
22
+ export declare const DEFAULT_REASONING = "medium";
23
+ export declare const PROVIDER_NAME = "poe";
24
+ export declare const FEEDBACK_URL = "https://github.com/poe-platform/poe-code/issues";
@@ -0,0 +1,44 @@
1
+ export const FRONTIER_MODELS = [
2
+ "anthropic/claude-opus-4.6",
3
+ "anthropic/claude-sonnet-4.5",
4
+ "openai/gpt-5.2",
5
+ "google/gemini-3-pro"
6
+ ];
7
+ export const DEFAULT_FRONTIER_MODEL = "anthropic/claude-sonnet-4.5";
8
+ export const DEFAULT_TEXT_MODEL = "anthropic/claude-sonnet-4.5";
9
+ export const DEFAULT_IMAGE_BOT = "google/nano-banana-pro";
10
+ export const DEFAULT_AUDIO_BOT = "elevenlabs/elevenlabs-v3";
11
+ export const DEFAULT_VIDEO_BOT = "google/veo-3.1";
12
+ export const CLAUDE_CODE_VARIANTS = {
13
+ haiku: "anthropic/claude-haiku-4.5",
14
+ sonnet: "anthropic/claude-sonnet-4.5",
15
+ opus: "anthropic/claude-opus-4.6"
16
+ };
17
+ export const DEFAULT_CLAUDE_CODE_MODEL = CLAUDE_CODE_VARIANTS.opus;
18
+ /**
19
+ * Extracts the model ID from a namespaced model slug (lowercase).
20
+ * e.g., "anthropic/claude-sonnet-4.5" -> "claude-sonnet-4.5"
21
+ */
22
+ export function stripModelNamespace(model) {
23
+ const slashIndex = model.indexOf("/");
24
+ const id = slashIndex === -1 ? model : model.slice(slashIndex + 1);
25
+ return id.toLowerCase();
26
+ }
27
+ export const CODEX_MODELS = [
28
+ "openai/gpt-5.2-codex",
29
+ "openai/gpt-5.2",
30
+ "openai/gpt-5.2-chat",
31
+ "openai/gpt-5.2-pro",
32
+ "openai/gpt-5.1",
33
+ "openai/gpt-5.1-codex-mini"
34
+ ];
35
+ export const DEFAULT_CODEX_MODEL = CODEX_MODELS[0];
36
+ export const KIMI_MODELS = [
37
+ "novitaai/kimi-k2.5",
38
+ "novitaai/kimi-k2-thinking",
39
+ ];
40
+ export const DEFAULT_KIMI_MODEL = KIMI_MODELS[0];
41
+ export const DEFAULT_REASONING = "medium";
42
+ export const PROVIDER_NAME = "poe";
43
+ export const FEEDBACK_URL = "https://github.com/poe-platform/poe-code/issues";
44
+ //# 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,eAAe,GAAG;IAC7B,2BAA2B;IAC3B,6BAA6B;IAC7B,gBAAgB;IAChB,qBAAqB;CACb,CAAC;AAEX,MAAM,CAAC,MAAM,sBAAsB,GAAG,6BAA6B,CAAC;AAEpE,MAAM,CAAC,MAAM,kBAAkB,GAAG,6BAA6B,CAAC;AAChE,MAAM,CAAC,MAAM,iBAAiB,GAAG,wBAAwB,CAAC;AAC1D,MAAM,CAAC,MAAM,iBAAiB,GAAG,0BAA0B,CAAC;AAC5D,MAAM,CAAC,MAAM,iBAAiB,GAAG,gBAAgB,CAAC;AAElD,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,KAAK,EAAE,4BAA4B;IACnC,MAAM,EAAE,6BAA6B;IACrC,IAAI,EAAE,2BAA2B;CACzB,CAAC;AAEX,MAAM,CAAC,MAAM,yBAAyB,GAAG,oBAAoB,CAAC,IAAI,CAAC;AAEnE;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,EAAE,GAAG,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IACnE,OAAO,EAAE,CAAC,WAAW,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,sBAAsB;IACtB,gBAAgB;IAChB,qBAAqB;IACrB,oBAAoB;IACpB,gBAAgB;IAChB,2BAA2B;CACnB,CAAC;AACX,MAAM,CAAC,MAAM,mBAAmB,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;AAEnD,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,oBAAoB;IACpB,2BAA2B;CACnB,CAAC;AACX,MAAM,CAAC,MAAM,kBAAkB,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AAEjD,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AAC1C,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC;AACnC,MAAM,CAAC,MAAM,YAAY,GAAG,iDAAiD,CAAC"}
@@ -0,0 +1,42 @@
1
+ import type { FileSystem } from "../utils/file-system.js";
2
+ import { createCliEnvironment } from "./environment.js";
3
+ import { createServiceRegistry, type ProviderService } 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 } from "./logger.js";
8
+ import { ErrorLogger } from "./error-logger.js";
9
+ import type { PromptFn, LoggerFn } from "./types.js";
10
+ import type { HttpClient } from "./http.js";
11
+ import type { CommandRunner } from "../utils/command-checks.js";
12
+ export interface CliDependencies {
13
+ fs: FileSystem;
14
+ prompts: PromptFn;
15
+ env: {
16
+ cwd: string;
17
+ homeDir: string;
18
+ platform?: NodeJS.Platform;
19
+ variables?: Record<string, string | undefined>;
20
+ };
21
+ logger?: LoggerFn;
22
+ exitOverride?: boolean;
23
+ suppressCommanderOutput?: boolean;
24
+ httpClient?: HttpClient;
25
+ commandRunner?: CommandRunner;
26
+ }
27
+ export interface CliContainer {
28
+ readonly env: ReturnType<typeof createCliEnvironment>;
29
+ readonly fs: FileSystem;
30
+ readonly prompts: PromptFn;
31
+ readonly promptLibrary: ReturnType<typeof createPromptLibrary>;
32
+ readonly loggerFactory: LoggerFactory;
33
+ readonly errorLogger: ErrorLogger;
34
+ readonly options: OptionResolvers;
35
+ readonly contextFactory: CommandContextFactory;
36
+ readonly registry: ReturnType<typeof createServiceRegistry>;
37
+ readonly httpClient: HttpClient;
38
+ readonly commandRunner: CommandRunner;
39
+ readonly providers: ProviderService[];
40
+ readonly dependencies: CliDependencies;
41
+ }
42
+ export declare function createCliContainer(dependencies: CliDependencies): CliContainer;