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,119 @@
1
+ import { DEFAULT_FRONTIER_MODEL, FRONTIER_MODELS, PROVIDER_NAME } from "../cli/constants.js";
2
+ import { createBinaryExistsCheck, createCommandExpectationCheck } from "../utils/command-checks.js";
3
+ import { configMutation, fileMutation } from "@poe-code/config-mutations";
4
+ import { createProvider } from "./create-provider.js";
5
+ import { openCodeAgent } from "@poe-code/agent-defs";
6
+ function providerModel(model) {
7
+ const value = model ?? DEFAULT_FRONTIER_MODEL;
8
+ const prefix = `${PROVIDER_NAME}/`;
9
+ return value.startsWith(prefix) ? value : `${prefix}${value}`;
10
+ }
11
+ export const OPEN_CODE_INSTALL_DEFINITION = {
12
+ id: "opencode",
13
+ summary: "OpenCode CLI",
14
+ check: createBinaryExistsCheck("opencode", "opencode-cli-binary", "OpenCode CLI binary must exist"),
15
+ steps: [
16
+ {
17
+ id: "install-opencode-cli-npm",
18
+ command: "npm",
19
+ args: ["install", "-g", "opencode-ai"]
20
+ }
21
+ ],
22
+ successMessage: "Installed OpenCode CLI via npm."
23
+ };
24
+ function getModelArgs(model) {
25
+ return ["--model", providerModel(model)];
26
+ }
27
+ export const openCodeService = createProvider({
28
+ ...openCodeAgent,
29
+ supportsStdinPrompt: false,
30
+ configurePrompts: {
31
+ model: {
32
+ label: "OpenCode model",
33
+ defaultValue: DEFAULT_FRONTIER_MODEL,
34
+ choices: FRONTIER_MODELS.map((id) => ({
35
+ title: id,
36
+ value: id
37
+ }))
38
+ }
39
+ },
40
+ isolatedEnv: {
41
+ agentBinary: openCodeAgent.binaryName,
42
+ configProbe: {
43
+ kind: "isolatedFile",
44
+ relativePath: ".config/opencode/config.json"
45
+ },
46
+ env: {
47
+ XDG_CONFIG_HOME: { kind: "isolatedDir", relativePath: ".config" },
48
+ XDG_DATA_HOME: { kind: "isolatedDir", relativePath: ".local/share" }
49
+ }
50
+ },
51
+ manifest: {
52
+ configure: [
53
+ fileMutation.ensureDirectory({ path: "~/.config/opencode" }),
54
+ configMutation.merge({
55
+ target: "~/.config/opencode/config.json",
56
+ value: (ctx) => {
57
+ const { model } = (ctx ?? {});
58
+ return {
59
+ $schema: "https://opencode.ai/config.json",
60
+ model: providerModel(model),
61
+ enabled_providers: [PROVIDER_NAME]
62
+ };
63
+ }
64
+ }),
65
+ fileMutation.ensureDirectory({ path: "~/.opencode-data" }),
66
+ configMutation.merge({
67
+ target: "~/.opencode-data/auth.json",
68
+ value: (ctx) => {
69
+ const { apiKey } = (ctx ?? {});
70
+ return {
71
+ [PROVIDER_NAME]: {
72
+ type: "api",
73
+ key: apiKey ?? ""
74
+ }
75
+ };
76
+ }
77
+ })
78
+ ],
79
+ unconfigure: [
80
+ configMutation.prune({
81
+ target: "~/.config/opencode/config.json",
82
+ shape: { enabled_providers: true }
83
+ }),
84
+ configMutation.prune({
85
+ target: "~/.opencode-data/auth.json",
86
+ shape: { [PROVIDER_NAME]: true }
87
+ })
88
+ ]
89
+ },
90
+ install: OPEN_CODE_INSTALL_DEFINITION,
91
+ test(context) {
92
+ return context.runCheck(createCommandExpectationCheck({
93
+ id: "opencode-cli-health",
94
+ command: "opencode",
95
+ args: [
96
+ ...getModelArgs(DEFAULT_FRONTIER_MODEL),
97
+ "run",
98
+ "Output exactly: OPEN_CODE_OK"
99
+ ],
100
+ expectedOutput: "OPEN_CODE_OK"
101
+ }));
102
+ },
103
+ spawn(context, options) {
104
+ const opts = (options ?? {});
105
+ const args = [
106
+ ...getModelArgs(opts.model),
107
+ "run",
108
+ opts.prompt,
109
+ ...(opts.args ?? [])
110
+ ];
111
+ if (opts.cwd) {
112
+ return context.command.runCommand("poe-code", ["wrap", "opencode", ...args], {
113
+ cwd: opts.cwd
114
+ });
115
+ }
116
+ return context.command.runCommand("poe-code", ["wrap", "opencode", ...args]);
117
+ }
118
+ });
119
+ //# sourceMappingURL=opencode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../src/providers/opencode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export interface SpawnCommandOptions {
2
+ prompt: string;
3
+ args?: string[];
4
+ model?: string;
5
+ cwd?: string;
6
+ useStdin?: boolean;
7
+ interactive?: boolean;
8
+ }
9
+ export type ProviderSpawnOptions<Extra extends Record<string, unknown> = Record<string, never>> = SpawnCommandOptions & Extra;
10
+ export interface ModelConfigureOptions {
11
+ model: string;
12
+ }
13
+ export type EmptyProviderOptions = Record<string, never>;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=spawn-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn-options.js","sourceRoot":"","sources":["../../src/providers/spawn-options.ts"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ import type { CliContainer } from "../cli/container.js";
2
+ export interface SdkContainerOptions {
3
+ /** Working directory (defaults to process.cwd()) */
4
+ cwd?: string;
5
+ /** Home directory (defaults to os.homedir()) */
6
+ homeDir?: string;
7
+ /** Environment variables (defaults to process.env) */
8
+ variables?: Record<string, string | undefined>;
9
+ /** Enable verbose logging (defaults to false) */
10
+ verbose?: boolean;
11
+ }
12
+ /**
13
+ * Creates a lightweight container for SDK usage.
14
+ * Uses real file system and command runner.
15
+ * No prompts needed (non-interactive).
16
+ * Minimal logger (silent by default).
17
+ */
18
+ export declare function createSdkContainer(options?: SdkContainerOptions): CliContainer;
@@ -0,0 +1,127 @@
1
+ import * as fs from "node:fs/promises";
2
+ import * as os from "node:os";
3
+ import { createCliEnvironment } from "../cli/environment.js";
4
+ import { createServiceRegistry } from "../cli/service-registry.js";
5
+ import { createCommandContextFactory } from "../cli/context.js";
6
+ import { createPromptLibrary } from "../cli/prompts.js";
7
+ import { createOptionResolvers } from "../cli/options.js";
8
+ import { createLoggerFactory } from "../cli/logger.js";
9
+ import { ErrorLogger } from "../cli/error-logger.js";
10
+ import { runCommand } from "@poe-code/agent-spawn";
11
+ import { getDefaultProviders } from "../providers/index.js";
12
+ import { createPoeCodeCommandRunner } from "../cli/poe-code-command-runner.js";
13
+ import { loadCredentials, saveCredentials } from "../services/credentials.js";
14
+ import * as nodeFsSync from "node:fs";
15
+ /**
16
+ * Creates a lightweight container for SDK usage.
17
+ * Uses real file system and command runner.
18
+ * No prompts needed (non-interactive).
19
+ * Minimal logger (silent by default).
20
+ */
21
+ export function createSdkContainer(options) {
22
+ const cwd = options?.cwd ?? process.cwd();
23
+ const homeDir = options?.homeDir ?? os.homedir();
24
+ const variables = options?.variables ?? process.env;
25
+ const verbose = options?.verbose ?? false;
26
+ const environment = createCliEnvironment({
27
+ cwd,
28
+ homeDir,
29
+ platform: process.platform,
30
+ variables
31
+ });
32
+ // Silent logger for SDK - only emits if verbose
33
+ const silentEmitter = verbose ? undefined : () => { };
34
+ const loggerFactory = createLoggerFactory(silentEmitter);
35
+ // Create error logger with sync fs
36
+ const errorLogger = new ErrorLogger({
37
+ fs: nodeFsSync,
38
+ logDir: environment.logDir,
39
+ logToStderr: false
40
+ });
41
+ loggerFactory.setErrorLogger(errorLogger);
42
+ // Create async file system adapter
43
+ const asyncFs = {
44
+ readFile: ((path, encoding) => {
45
+ if (encoding) {
46
+ return fs.readFile(path, encoding);
47
+ }
48
+ return fs.readFile(path);
49
+ }),
50
+ writeFile: (path, data, opts) => fs.writeFile(path, data, opts),
51
+ mkdir: (path, opts) => fs.mkdir(path, opts).then(() => { }),
52
+ stat: (path) => fs.stat(path),
53
+ rm: (path, opts) => fs.rm(path, opts),
54
+ unlink: (path) => fs.unlink(path),
55
+ readdir: (path) => fs.readdir(path),
56
+ copyFile: (src, dest) => fs.copyFile(src, dest),
57
+ chmod: (path, mode) => fs.chmod(path, mode)
58
+ };
59
+ const contextFactory = createCommandContextFactory({ fs: asyncFs });
60
+ // No-op prompts for SDK (non-interactive)
61
+ const noopPrompts = async () => {
62
+ throw new Error("SDK does not support interactive prompts");
63
+ };
64
+ const promptLibrary = createPromptLibrary();
65
+ const optionResolvers = createOptionResolvers({
66
+ prompts: noopPrompts,
67
+ promptLibrary,
68
+ apiKeyStore: {
69
+ read: () => loadCredentials({
70
+ fs: asyncFs,
71
+ filePath: environment.credentialsPath
72
+ }),
73
+ write: (value) => saveCredentials({
74
+ fs: asyncFs,
75
+ filePath: environment.credentialsPath,
76
+ apiKey: value
77
+ })
78
+ }
79
+ });
80
+ const registry = createServiceRegistry();
81
+ const providers = getDefaultProviders().filter((adapter) => !adapter.disabled);
82
+ for (const adapter of providers) {
83
+ registry.register(adapter);
84
+ }
85
+ const baseRunner = runCommand;
86
+ // Create container with wrapped runner
87
+ let container = null;
88
+ const wrappedRunner = createPoeCodeCommandRunner({
89
+ getContainer: () => container,
90
+ baseRunner
91
+ });
92
+ // HTTP client using global fetch
93
+ const httpClient = async (url, init) => {
94
+ const response = await globalThis.fetch(url, init);
95
+ return {
96
+ ok: response.ok,
97
+ status: response.status,
98
+ json: () => response.json()
99
+ };
100
+ };
101
+ container = {
102
+ env: environment,
103
+ fs: asyncFs,
104
+ prompts: noopPrompts,
105
+ promptLibrary,
106
+ loggerFactory,
107
+ errorLogger,
108
+ options: optionResolvers,
109
+ contextFactory,
110
+ registry,
111
+ httpClient,
112
+ commandRunner: wrappedRunner,
113
+ providers,
114
+ dependencies: {
115
+ fs: asyncFs,
116
+ prompts: noopPrompts,
117
+ env: {
118
+ cwd,
119
+ homeDir,
120
+ platform: process.platform,
121
+ variables
122
+ }
123
+ }
124
+ };
125
+ return container;
126
+ }
127
+ //# sourceMappingURL=container.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/sdk/container.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Reads the Poe API key with the following priority:
3
+ * 1. `POE_API_KEY` environment variable (if set)
4
+ * 2. Credentials file (`~/.poe-code/credentials.json`)
5
+ *
6
+ * @returns The API key
7
+ * @throws Error if no credentials found
8
+ */
9
+ export declare function getPoeApiKey(): Promise<string>;
@@ -0,0 +1,35 @@
1
+ import * as fs from "node:fs/promises";
2
+ import * as os from "node:os";
3
+ import * as path from "node:path";
4
+ const CREDENTIALS_RELATIVE_PATH = ".poe-code/credentials.json";
5
+ /**
6
+ * Reads the Poe API key with the following priority:
7
+ * 1. `POE_API_KEY` environment variable (if set)
8
+ * 2. Credentials file (`~/.poe-code/credentials.json`)
9
+ *
10
+ * @returns The API key
11
+ * @throws Error if no credentials found
12
+ */
13
+ export async function getPoeApiKey() {
14
+ const envKey = process.env.POE_API_KEY;
15
+ if (typeof envKey === "string" && envKey.trim().length > 0) {
16
+ return envKey.trim();
17
+ }
18
+ const homeDir = os.homedir();
19
+ const credentialsPath = path.join(homeDir, CREDENTIALS_RELATIVE_PATH);
20
+ try {
21
+ const content = await fs.readFile(credentialsPath, "utf8");
22
+ const parsed = JSON.parse(content);
23
+ if (typeof parsed === "object" &&
24
+ parsed !== null &&
25
+ typeof parsed.apiKey === "string" &&
26
+ parsed.apiKey.length > 0) {
27
+ return parsed.apiKey;
28
+ }
29
+ }
30
+ catch {
31
+ // File doesn't exist or is invalid
32
+ }
33
+ throw new Error("No API key found. Set POE_API_KEY or run 'poe-code login'.");
34
+ }
35
+ //# sourceMappingURL=credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/sdk/credentials.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,MAAM,yBAAyB,GAAG,4BAA4B,CAAC;AAE/D;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IACvC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3D,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAED,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC7B,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC;IAEtE,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,IACE,OAAO,MAAM,KAAK,QAAQ;YAC1B,MAAM,KAAK,IAAI;YACf,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ;YACjC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EACxB,CAAC;YACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACvB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,mCAAmC;IACrC,CAAC;IAED,MAAM,IAAI,KAAK,CACb,4DAA4D,CAC7D,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { GenerateOptions, GenerateResult, MediaGenerateOptions, MediaGenerateResult } from "./types.js";
2
+ export declare function generate(prompt: string, options?: GenerateOptions): Promise<GenerateResult>;
3
+ export declare function generateImage(prompt: string, options?: MediaGenerateOptions): Promise<MediaGenerateResult>;
4
+ export declare function generateVideo(prompt: string, options?: MediaGenerateOptions): Promise<MediaGenerateResult>;
5
+ export declare function generateAudio(prompt: string, options?: MediaGenerateOptions): Promise<MediaGenerateResult>;
@@ -0,0 +1,97 @@
1
+ import { DEFAULT_TEXT_MODEL, DEFAULT_IMAGE_BOT, DEFAULT_VIDEO_BOT, DEFAULT_AUDIO_BOT } from "../cli/constants.js";
2
+ import { getPoeApiKey } from "./credentials.js";
3
+ import { getGlobalClient, setGlobalClient } from "../services/client-instance.js";
4
+ import { createPoeClient } from "../services/llm-client.js";
5
+ const MODEL_ENV_KEYS = {
6
+ text: "POE_TEXT_MODEL",
7
+ image: "POE_IMAGE_MODEL",
8
+ video: "POE_VIDEO_MODEL",
9
+ audio: "POE_AUDIO_MODEL"
10
+ };
11
+ const DEFAULT_MODELS = {
12
+ text: DEFAULT_TEXT_MODEL,
13
+ image: DEFAULT_IMAGE_BOT,
14
+ video: DEFAULT_VIDEO_BOT,
15
+ audio: DEFAULT_AUDIO_BOT
16
+ };
17
+ export async function generate(prompt, options = {}) {
18
+ if (!prompt) {
19
+ throw new Error("Prompt is required");
20
+ }
21
+ const client = await resolveClient();
22
+ const model = resolveSdkModel("text", options);
23
+ const response = await client.text({
24
+ model,
25
+ prompt,
26
+ params: options.params
27
+ });
28
+ if (!response.content) {
29
+ throw new Error("No response from LLM");
30
+ }
31
+ return { content: response.content };
32
+ }
33
+ export async function generateImage(prompt, options = {}) {
34
+ return generateMedia("image", prompt, options);
35
+ }
36
+ export async function generateVideo(prompt, options = {}) {
37
+ return generateMedia("video", prompt, options);
38
+ }
39
+ export async function generateAudio(prompt, options = {}) {
40
+ return generateMedia("audio", prompt, options);
41
+ }
42
+ async function generateMedia(type, prompt, options) {
43
+ if (!prompt) {
44
+ throw new Error("Prompt is required");
45
+ }
46
+ const client = await resolveClient();
47
+ const model = resolveSdkModel(type, options);
48
+ const response = await client.media(type, {
49
+ model,
50
+ prompt,
51
+ params: options.params
52
+ });
53
+ if (!response.url) {
54
+ throw new Error(`No ${type} URL returned`);
55
+ }
56
+ return { url: response.url, mimeType: response.mimeType };
57
+ }
58
+ async function resolveClient() {
59
+ try {
60
+ return getGlobalClient();
61
+ }
62
+ catch {
63
+ const apiKey = await getPoeApiKey();
64
+ const baseUrl = normalizeBaseUrl(process.env.POE_API_BASE_URL);
65
+ const client = createPoeClient({
66
+ apiKey,
67
+ baseUrl
68
+ });
69
+ setGlobalClient(client);
70
+ return client;
71
+ }
72
+ }
73
+ function resolveSdkModel(type, options) {
74
+ if (options.model) {
75
+ return options.model;
76
+ }
77
+ const envKey = MODEL_ENV_KEYS[type];
78
+ const envModel = normalizeEnvModel(process.env[envKey]);
79
+ if (envModel) {
80
+ return envModel;
81
+ }
82
+ return DEFAULT_MODELS[type];
83
+ }
84
+ function normalizeEnvModel(value) {
85
+ if (typeof value !== "string") {
86
+ return undefined;
87
+ }
88
+ const trimmed = value.trim();
89
+ return trimmed.length > 0 ? trimmed : undefined;
90
+ }
91
+ function normalizeBaseUrl(value) {
92
+ if (typeof value === "string" && value.trim().length > 0) {
93
+ return value.trim();
94
+ }
95
+ return "https://api.poe.com/v1";
96
+ }
97
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/sdk/generate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { CliContainer } from "../cli/container.js";
2
+ import type { SpawnResult } from "./types.js";
3
+ export interface SpawnCoreOptions {
4
+ /** The prompt to send to the provider */
5
+ prompt: string;
6
+ /** Working directory for the service CLI */
7
+ cwd?: string;
8
+ /** Model identifier override */
9
+ model?: string;
10
+ /** Additional arguments forwarded to the CLI */
11
+ args?: string[];
12
+ /** Whether prompt was read from stdin */
13
+ useStdin?: boolean;
14
+ }
15
+ export interface SpawnCoreFlags {
16
+ dryRun: boolean;
17
+ verbose: boolean;
18
+ }
19
+ /**
20
+ * Core spawn implementation used by both SDK and CLI.
21
+ * Accepts an existing container to avoid creating a new one.
22
+ */
23
+ export declare function spawnCore(container: CliContainer, service: string, options: SpawnCoreOptions, flags?: SpawnCoreFlags): Promise<SpawnResult>;
@@ -0,0 +1,105 @@
1
+ import path from "node:path";
2
+ import chalk from "chalk";
3
+ import { buildProviderContext, createExecutionResources } from "../cli/commands/shared.js";
4
+ /**
5
+ * Core spawn implementation used by both SDK and CLI.
6
+ * Accepts an existing container to avoid creating a new one.
7
+ */
8
+ export async function spawnCore(container, service, options, flags = { dryRun: false, verbose: false }) {
9
+ // Resolve working directory
10
+ const cwdOverride = resolveSpawnWorkingDirectory(container.env.cwd, options.cwd);
11
+ // Build spawn command options (internal format)
12
+ const spawnOptions = {
13
+ prompt: options.prompt,
14
+ args: options.args,
15
+ model: options.model,
16
+ cwd: cwdOverride,
17
+ useStdin: options.useStdin ?? false
18
+ };
19
+ // Resolve service adapter
20
+ const adapter = container.registry.get(service);
21
+ if (!adapter) {
22
+ throw new Error(`Unknown service "${service}".`);
23
+ }
24
+ if (typeof adapter.spawn !== "function") {
25
+ throw new Error(`${adapter.label} does not support spawn.`);
26
+ }
27
+ if (spawnOptions.useStdin && !adapter.supportsStdinPrompt) {
28
+ throw new Error(`${adapter.label} does not support stdin prompts. Use a different service (e.g. "codex") or pass the prompt as an argument.`);
29
+ }
30
+ // Create execution resources (logger, context)
31
+ const commandFlags = { dryRun: flags.dryRun, assumeYes: true, verbose: flags.verbose };
32
+ const resources = createExecutionResources(container, commandFlags, `spawn:${service}`);
33
+ // Build provider context
34
+ const providerContext = buildProviderContext(container, adapter, resources);
35
+ // Handle dry run
36
+ if (flags.dryRun) {
37
+ const summary = formatSpawnDryRunMessage(adapter.label, spawnOptions);
38
+ resources.logger.dryRun(summary);
39
+ return {
40
+ stdout: "",
41
+ stderr: "",
42
+ exitCode: 0
43
+ };
44
+ }
45
+ // Invoke spawn through registry
46
+ const result = (await container.registry.invoke(adapter.name, "spawn", async (entry) => {
47
+ if (!entry.spawn) {
48
+ throw new Error(`${adapter.label} does not support spawn.`);
49
+ }
50
+ const output = await entry.spawn(providerContext, spawnOptions);
51
+ return output;
52
+ }));
53
+ // Return normalized result
54
+ if (!result) {
55
+ return {
56
+ stdout: "",
57
+ stderr: "",
58
+ exitCode: 0
59
+ };
60
+ }
61
+ return {
62
+ stdout: result.stdout,
63
+ stderr: result.stderr,
64
+ exitCode: result.exitCode
65
+ };
66
+ }
67
+ function formatSpawnDryRunMessage(label, options) {
68
+ const lines = [`Dry run: would spawn ${label}.`];
69
+ const details = [];
70
+ const promptDetail = options.useStdin
71
+ ? `(stdin, ${options.prompt.length} chars)`
72
+ : formatQuoted(options.prompt);
73
+ details.push(`${chalk.dim("Prompt:")} ${chalk.cyan(promptDetail)}`);
74
+ if (options.args && options.args.length > 0) {
75
+ const renderedArgs = options.args.map((arg) => formatSpawnArg(arg)).join(" ");
76
+ details.push(`${chalk.dim("Args:")} ${chalk.cyan(renderedArgs)}`);
77
+ }
78
+ if (options.cwd) {
79
+ details.push(`${chalk.dim("Cwd:")} ${chalk.cyan(options.cwd)}`);
80
+ }
81
+ if (details.length > 0) {
82
+ lines.push(...details.map((line) => ` ${line}`));
83
+ }
84
+ return lines.join("\n");
85
+ }
86
+ function formatSpawnArg(arg) {
87
+ const needsQuotes = arg.includes(" ") || arg.includes("\t");
88
+ if (!needsQuotes) {
89
+ return arg;
90
+ }
91
+ return `"${arg.split("\"").join("\\\"")}"`;
92
+ }
93
+ function formatQuoted(value) {
94
+ return JSON.stringify(value);
95
+ }
96
+ function resolveSpawnWorkingDirectory(baseDir, candidate) {
97
+ if (!candidate || candidate.trim().length === 0) {
98
+ return undefined;
99
+ }
100
+ if (path.isAbsolute(candidate)) {
101
+ return candidate;
102
+ }
103
+ return path.resolve(baseDir, candidate);
104
+ }
105
+ //# sourceMappingURL=spawn-core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn-core.js","sourceRoot":"","sources":["../../src/sdk/spawn-core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { type AcpEvent } from "@poe-code/agent-spawn";
2
+ import type { SpawnOptions, SpawnResult } from "./types.js";
3
+ /**
4
+ * Spawns an agent with optional streaming.
5
+ *
6
+ * Returns both:
7
+ * - `events`: an async stream of ACP events (empty when the provider doesn't support streaming)
8
+ * - `result`: a promise resolving to the final SpawnResult
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * import { spawn } from "poe-code"
13
+ *
14
+ * const { events, result } = spawn("codex", "Fix the bug in auth.ts")
15
+ *
16
+ * for await (const e of events) {
17
+ * // render or log events
18
+ * }
19
+ *
20
+ * const final = await result
21
+ * console.log(final.exitCode)
22
+ * ```
23
+ */
24
+ export declare function spawn(service: string, prompt: string, options?: Omit<SpawnOptions, "prompt">): {
25
+ events: AsyncIterable<AcpEvent>;
26
+ result: Promise<SpawnResult>;
27
+ };
28
+ export declare function spawn(service: string, options: SpawnOptions): {
29
+ events: AsyncIterable<AcpEvent>;
30
+ result: Promise<SpawnResult>;
31
+ };