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,95 @@
1
+ import type { ErrorContext } from "./error-logger.js";
2
+ /**
3
+ * Base error class for all CLI errors with context support
4
+ */
5
+ export declare class CliError extends Error {
6
+ readonly context?: ErrorContext;
7
+ readonly isUserError: boolean;
8
+ constructor(message: string, context?: ErrorContext, options?: {
9
+ isUserError?: boolean;
10
+ });
11
+ }
12
+ /**
13
+ * Error used purely for control flow: exits the CLI silently with code 0.
14
+ */
15
+ export declare class SilentError extends CliError {
16
+ constructor(message?: string, options?: {
17
+ isUserError?: boolean;
18
+ });
19
+ }
20
+ /**
21
+ * API-related errors (network, HTTP status, API responses)
22
+ */
23
+ export declare class ApiError extends CliError {
24
+ readonly httpStatus?: number;
25
+ readonly endpoint?: string;
26
+ constructor(message: string, options?: {
27
+ httpStatus?: number;
28
+ endpoint?: string;
29
+ context?: ErrorContext;
30
+ });
31
+ }
32
+ /**
33
+ * Configuration and validation errors (user input, config files)
34
+ */
35
+ export declare class ValidationError extends CliError {
36
+ constructor(message: string, context?: ErrorContext);
37
+ }
38
+ /**
39
+ * File system operation errors
40
+ */
41
+ export declare class FileSystemError extends CliError {
42
+ readonly filePath?: string;
43
+ readonly operation?: string;
44
+ constructor(message: string, options?: {
45
+ filePath?: string;
46
+ operation?: string;
47
+ context?: ErrorContext;
48
+ });
49
+ }
50
+ /**
51
+ * Authentication and credential errors
52
+ */
53
+ export declare class AuthenticationError extends CliError {
54
+ constructor(message: string, context?: ErrorContext);
55
+ }
56
+ /**
57
+ * Command execution errors
58
+ */
59
+ export declare class CommandExecutionError extends CliError {
60
+ readonly command?: string;
61
+ readonly exitCode?: number;
62
+ constructor(message: string, options?: {
63
+ command?: string;
64
+ exitCode?: number;
65
+ context?: ErrorContext;
66
+ });
67
+ }
68
+ /**
69
+ * Service provider errors (MCP, Codex, etc.)
70
+ */
71
+ export declare class ServiceError extends CliError {
72
+ readonly service?: string;
73
+ constructor(message: string, options?: {
74
+ service?: string;
75
+ context?: ErrorContext;
76
+ });
77
+ }
78
+ /**
79
+ * Graceful cancellation triggered by the user (Ctrl+C, escape, etc.)
80
+ */
81
+ export declare class OperationCancelledError extends SilentError {
82
+ constructor(message?: string);
83
+ }
84
+ /**
85
+ * Helper to determine if an error should be shown to users
86
+ */
87
+ export declare function isUserFacingError(error: unknown): boolean;
88
+ /**
89
+ * Helper to extract error context from any error
90
+ */
91
+ export declare function extractErrorContext(error: unknown): ErrorContext | undefined;
92
+ /**
93
+ * Helper to create a standardized error message with context
94
+ */
95
+ export declare function formatErrorWithContext(error: Error, context?: ErrorContext): string;
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Base error class for all CLI errors with context support
3
+ */
4
+ export class CliError extends Error {
5
+ context;
6
+ isUserError;
7
+ constructor(message, context, options) {
8
+ super(message);
9
+ this.name = this.constructor.name;
10
+ this.context = context;
11
+ this.isUserError = options?.isUserError ?? false;
12
+ // Maintains proper stack trace for where error was thrown
13
+ if (Error.captureStackTrace) {
14
+ Error.captureStackTrace(this, this.constructor);
15
+ }
16
+ }
17
+ }
18
+ /**
19
+ * Error used purely for control flow: exits the CLI silently with code 0.
20
+ */
21
+ export class SilentError extends CliError {
22
+ constructor(message = "", options) {
23
+ super(message, undefined, { isUserError: options?.isUserError ?? false });
24
+ }
25
+ }
26
+ /**
27
+ * API-related errors (network, HTTP status, API responses)
28
+ */
29
+ export class ApiError extends CliError {
30
+ httpStatus;
31
+ endpoint;
32
+ constructor(message, options) {
33
+ super(message, {
34
+ ...options?.context,
35
+ httpStatus: options?.httpStatus,
36
+ apiEndpoint: options?.endpoint
37
+ });
38
+ this.httpStatus = options?.httpStatus;
39
+ this.endpoint = options?.endpoint;
40
+ }
41
+ }
42
+ /**
43
+ * Configuration and validation errors (user input, config files)
44
+ */
45
+ export class ValidationError extends CliError {
46
+ constructor(message, context) {
47
+ super(message, context, { isUserError: true });
48
+ }
49
+ }
50
+ /**
51
+ * File system operation errors
52
+ */
53
+ export class FileSystemError extends CliError {
54
+ filePath;
55
+ operation;
56
+ constructor(message, options) {
57
+ super(message, {
58
+ ...options?.context,
59
+ filePath: options?.filePath,
60
+ operation: options?.operation
61
+ });
62
+ this.filePath = options?.filePath;
63
+ this.operation = options?.operation;
64
+ }
65
+ }
66
+ /**
67
+ * Authentication and credential errors
68
+ */
69
+ export class AuthenticationError extends CliError {
70
+ constructor(message, context) {
71
+ super(message, context, { isUserError: true });
72
+ }
73
+ }
74
+ /**
75
+ * Command execution errors
76
+ */
77
+ export class CommandExecutionError extends CliError {
78
+ command;
79
+ exitCode;
80
+ constructor(message, options) {
81
+ super(message, {
82
+ ...options?.context,
83
+ command: options?.command,
84
+ exitCode: options?.exitCode
85
+ });
86
+ this.command = options?.command;
87
+ this.exitCode = options?.exitCode;
88
+ }
89
+ }
90
+ /**
91
+ * Service provider errors (MCP, Codex, etc.)
92
+ */
93
+ export class ServiceError extends CliError {
94
+ service;
95
+ constructor(message, options) {
96
+ super(message, {
97
+ ...options?.context,
98
+ service: options?.service
99
+ });
100
+ this.service = options?.service;
101
+ }
102
+ }
103
+ /**
104
+ * Graceful cancellation triggered by the user (Ctrl+C, escape, etc.)
105
+ */
106
+ export class OperationCancelledError extends SilentError {
107
+ constructor(message = "Operation cancelled.") {
108
+ super(message, { isUserError: true });
109
+ }
110
+ }
111
+ /**
112
+ * Helper to determine if an error should be shown to users
113
+ */
114
+ export function isUserFacingError(error) {
115
+ return error instanceof CliError && error.isUserError;
116
+ }
117
+ /**
118
+ * Helper to extract error context from any error
119
+ */
120
+ export function extractErrorContext(error) {
121
+ if (error instanceof CliError) {
122
+ return error.context;
123
+ }
124
+ return undefined;
125
+ }
126
+ /**
127
+ * Helper to create a standardized error message with context
128
+ */
129
+ export function formatErrorWithContext(error, context) {
130
+ const parts = [error.message];
131
+ if (context) {
132
+ if (context.operation) {
133
+ parts.push(`Operation: ${context.operation}`);
134
+ }
135
+ if (context.component) {
136
+ parts.push(`Component: ${context.component}`);
137
+ }
138
+ }
139
+ return parts.join(" | ");
140
+ }
141
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/cli/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { SilentError } from "./errors.js";
2
+ export declare class VersionExit extends SilentError {
3
+ constructor();
4
+ }
@@ -0,0 +1,8 @@
1
+ import { SilentError } from "./errors.js";
2
+ export class VersionExit extends SilentError {
3
+ constructor() {
4
+ super("", { isUserError: false });
5
+ this.name = "VersionExit";
6
+ }
7
+ }
8
+ //# sourceMappingURL=exit-signals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exit-signals.js","sourceRoot":"","sources":["../../src/cli/exit-signals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,OAAO,WAAY,SAAQ,WAAW;IAC1C;QACE,KAAK,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ export interface HttpResponse {
2
+ ok: boolean;
3
+ status: number;
4
+ json(): Promise<unknown>;
5
+ text?: () => Promise<string>;
6
+ }
7
+ export interface HttpClientRequest {
8
+ method?: string;
9
+ headers?: Record<string, string>;
10
+ body?: string;
11
+ }
12
+ export type HttpClient = (url: string, init?: HttpClientRequest) => Promise<HttpResponse>;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/cli/http.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ import type { ProviderIsolatedEnv } from "./service-registry.js";
2
+ import type { CliEnvironment } from "./environment.js";
3
+ import type { FileSystem } from "../utils/file-system.js";
4
+ export declare function isolatedEnvRunner(input: {
5
+ env: CliEnvironment;
6
+ providerName: string;
7
+ isolated: ProviderIsolatedEnv;
8
+ argv: string[];
9
+ fs?: FileSystem;
10
+ }): Promise<never>;
@@ -0,0 +1,50 @@
1
+ import { spawn } from "node:child_process";
2
+ import { isNotFound } from "@poe-code/config-mutations";
3
+ import { resolveCliSettings, resolveIsolatedEnvDetails } from "./isolated-env.js";
4
+ import { buildArgsWithMergedSettings } from "../utils/cli-settings-merge.js";
5
+ export async function isolatedEnvRunner(input) {
6
+ const details = await resolveIsolatedEnvDetails(input.env, input.isolated, input.providerName, input.fs);
7
+ let args = input.argv.slice(2);
8
+ if (input.isolated.requiresConfig !== false) {
9
+ const hasConfig = await configExists(input.fs, details.configProbePath);
10
+ if (!hasConfig) {
11
+ throw new Error(`${input.providerName} is not configured. Run 'poe-code login' or 'poe-code configure ${input.providerName}'.`);
12
+ }
13
+ }
14
+ // Merge CLI settings if provider defines them
15
+ if (input.isolated.cliSettings) {
16
+ const resolvedSettings = await resolveCliSettings(input.isolated.cliSettings, input.env, input.fs);
17
+ args = buildArgsWithMergedSettings(args, resolvedSettings);
18
+ }
19
+ const child = spawn(details.agentBinary, args, {
20
+ stdio: "inherit",
21
+ env: {
22
+ ...process.env,
23
+ ...details.env
24
+ }
25
+ });
26
+ return await new Promise((_, reject) => {
27
+ child.on("error", (error) => {
28
+ reject(error);
29
+ });
30
+ child.on("close", (code) => {
31
+ process.exit(code ?? 0);
32
+ });
33
+ });
34
+ }
35
+ async function configExists(fs, filePath) {
36
+ if (!fs) {
37
+ return true;
38
+ }
39
+ try {
40
+ await fs.stat(filePath);
41
+ return true;
42
+ }
43
+ catch (error) {
44
+ if (isNotFound(error)) {
45
+ return false;
46
+ }
47
+ throw error;
48
+ }
49
+ }
50
+ //# sourceMappingURL=isolated-env-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isolated-env-runner.js","sourceRoot":"","sources":["../../src/cli/isolated-env-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAGxD,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAElF,OAAO,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAE7E,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,KAMvC;IACC,MAAM,OAAO,GAAG,MAAM,yBAAyB,CAC7C,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,EAAE,CACT,CAAC;IACF,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE/B,IAAI,KAAK,CAAC,QAAQ,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;QAC5C,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,eAAgB,CAAC,CAAC;QACzE,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,CAAC,YAAY,mEAAmE,KAAK,CAAC,YAAY,IAAI,CAC/G,CAAC;QACJ,CAAC;IACH,CAAC;IAED,8CAA8C;IAC9C,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC/B,MAAM,gBAAgB,GAAG,MAAM,kBAAkB,CAC/C,KAAK,CAAC,QAAQ,CAAC,WAAW,EAC1B,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,EAAE,CACT,CAAC;QACF,IAAI,GAAG,2BAA2B,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE;QAC7C,KAAK,EAAE,SAAS;QAChB,GAAG,EAAE;YACH,GAAI,OAAO,CAAC,GAA0C;YACtD,GAAG,OAAO,CAAC,GAAG;SACf;KACF,CAAC,CAAC;IAEH,OAAO,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;QACrC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC1B,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,EAA0B,EAC1B,QAAgB;IAEhB,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { CliEnvironment } from "./environment.js";
2
+ import type { FileSystem } from "../utils/file-system.js";
3
+ import type { IsolatedCliSettings, ProviderIsolatedEnv } from "./service-registry.js";
4
+ import type { CliSettings } from "../utils/cli-settings-merge.js";
5
+ export interface IsolatedEnvDetails {
6
+ agentBinary: string;
7
+ env: Record<string, string>;
8
+ configProbePath?: string;
9
+ }
10
+ export declare function resolveIsolatedEnvDetails(env: CliEnvironment, isolated: ProviderIsolatedEnv, providerName?: string, fs?: FileSystem): Promise<IsolatedEnvDetails>;
11
+ export declare function resolveIsolatedTargetDirectory(input: {
12
+ targetDirectory: string;
13
+ isolated: ProviderIsolatedEnv;
14
+ env: CliEnvironment;
15
+ providerName: string;
16
+ }): string;
17
+ export declare function isolatedConfigExists(fs: FileSystem, configProbePath: string): Promise<boolean>;
18
+ export declare function applyIsolatedEnvRepairs(input: {
19
+ fs: FileSystem;
20
+ env: CliEnvironment;
21
+ providerName: string;
22
+ isolated: ProviderIsolatedEnv;
23
+ }): Promise<void>;
24
+ export declare function resolveCliSettings(cliSettings: IsolatedCliSettings, env: CliEnvironment, fs?: FileSystem): Promise<CliSettings>;
@@ -0,0 +1,210 @@
1
+ import path from "node:path";
2
+ import { isNotFound } from "@poe-code/config-mutations";
3
+ import { loadCredentials } from "../services/credentials.js";
4
+ export async function resolveIsolatedEnvDetails(env, isolated, providerName, fs) {
5
+ if (!providerName) {
6
+ throw new Error("resolveIsolatedEnvDetails requires providerName.");
7
+ }
8
+ const baseDir = resolveIsolatedBaseDir(env, providerName);
9
+ const requiresConfig = isolated.requiresConfig !== false;
10
+ if (requiresConfig && !isolated.configProbe) {
11
+ throw new Error(`resolveIsolatedEnvDetails requires configProbe when requiresConfig is true (provider "${providerName}").`);
12
+ }
13
+ return {
14
+ agentBinary: isolated.agentBinary,
15
+ env: await resolveIsolatedEnvVars(env, baseDir, isolated.env, fs),
16
+ configProbePath: isolated.configProbe
17
+ ? resolveIsolatedEnvPath(env, baseDir, isolated.configProbe)
18
+ : undefined
19
+ };
20
+ }
21
+ export function resolveIsolatedTargetDirectory(input) {
22
+ const expanded = expandHomeShortcut(input.env, input.targetDirectory);
23
+ const baseDir = resolveIsolatedBaseDir(input.env, input.providerName);
24
+ const homeDir = input.env.homeDir;
25
+ const homeDirWithSep = `${homeDir}${path.sep}`;
26
+ if (expanded !== homeDir && !expanded.startsWith(homeDirWithSep)) {
27
+ throw new Error(`Isolated config targets must live under the user's home directory (received "${input.targetDirectory}").`);
28
+ }
29
+ if (expanded === baseDir) {
30
+ return baseDir;
31
+ }
32
+ if (expanded === homeDir) {
33
+ return baseDir;
34
+ }
35
+ if (!expanded.startsWith(homeDirWithSep)) {
36
+ return expanded;
37
+ }
38
+ const mapped = path.join(baseDir, expanded.slice(homeDirWithSep.length));
39
+ return stripAgentHome(mapped, baseDir, input.isolated.agentBinary);
40
+ }
41
+ function resolveIsolatedBaseDir(env, providerName) {
42
+ return env.resolveHomePath(".poe-code", providerName);
43
+ }
44
+ async function resolveIsolatedEnvVars(env, baseDir, vars, fs) {
45
+ const out = {};
46
+ for (const [key, value] of Object.entries(vars)) {
47
+ out[key] = await resolveIsolatedEnvValue(env, baseDir, value, fs);
48
+ }
49
+ return out;
50
+ }
51
+ async function resolveIsolatedEnvValue(env, baseDir, value, fs) {
52
+ if (typeof value === "string") {
53
+ return expandHomeShortcut(env, value);
54
+ }
55
+ if (isEnvVarReference(value)) {
56
+ const resolved = env.getVariable(value.name);
57
+ if (typeof resolved !== "string" || resolved.trim().length === 0) {
58
+ throw new Error(`Missing required environment variable "${value.name}" for isolated wrapper.`);
59
+ }
60
+ return resolved;
61
+ }
62
+ if (isPoeApiKeyReference(value)) {
63
+ const resolved = env.getVariable("POE_API_KEY");
64
+ if (typeof resolved === "string" && resolved.trim().length > 0) {
65
+ return resolved;
66
+ }
67
+ if (!fs) {
68
+ throw new Error('Missing Poe API key for isolated wrapper. Set "POE_API_KEY" or run "poe-code login".');
69
+ }
70
+ return await resolvePoeApiKeyFromCredentials({ fs, env });
71
+ }
72
+ if (isPoeBaseUrlReference(value)) {
73
+ return env.poeBaseUrl;
74
+ }
75
+ if (value.kind === "isolatedDir" || value.kind === "isolatedFile") {
76
+ return resolveIsolatedEnvPath(env, baseDir, value);
77
+ }
78
+ throw new Error("Unsupported isolated environment value.");
79
+ }
80
+ function resolveIsolatedEnvPath(env, baseDir, value) {
81
+ switch (value.kind) {
82
+ case "isolatedDir":
83
+ return value.relativePath
84
+ ? path.join(baseDir, value.relativePath)
85
+ : baseDir;
86
+ case "isolatedFile":
87
+ return path.join(baseDir, value.relativePath);
88
+ }
89
+ }
90
+ function isEnvVarReference(value) {
91
+ return typeof value === "object" && value.kind === "envVar";
92
+ }
93
+ function isPoeApiKeyReference(value) {
94
+ return typeof value === "object" && value.kind === "poeApiKey";
95
+ }
96
+ function isPoeBaseUrlReference(value) {
97
+ return typeof value === "object" && value.kind === "poeBaseUrl";
98
+ }
99
+ async function resolvePoeApiKeyFromCredentials(input) {
100
+ const stored = (await loadCredentials({ fs: input.fs, filePath: input.env.credentialsPath })) ??
101
+ undefined;
102
+ if (typeof stored !== "string" || stored.trim().length === 0) {
103
+ throw new Error('Missing Poe API key for isolated wrapper. Set "POE_API_KEY" or run "poe-code login".');
104
+ }
105
+ return stored;
106
+ }
107
+ export async function isolatedConfigExists(fs, configProbePath) {
108
+ try {
109
+ await fs.stat(configProbePath);
110
+ return true;
111
+ }
112
+ catch (error) {
113
+ if (isNotFound(error)) {
114
+ return false;
115
+ }
116
+ throw error;
117
+ }
118
+ }
119
+ export async function applyIsolatedEnvRepairs(input) {
120
+ const repairs = input.isolated.repairs ?? [];
121
+ if (repairs.length === 0 || typeof input.fs.chmod !== "function") {
122
+ return;
123
+ }
124
+ const baseDir = input.env.resolveHomePath(".poe-code", input.providerName);
125
+ for (const repair of repairs) {
126
+ if (repair.kind !== "chmod") {
127
+ continue;
128
+ }
129
+ if (path.isAbsolute(repair.relativePath)) {
130
+ continue;
131
+ }
132
+ const repairPath = path.join(baseDir, repair.relativePath);
133
+ try {
134
+ await input.fs.chmod(repairPath, repair.mode);
135
+ }
136
+ catch (error) {
137
+ if (isNotFound(error)) {
138
+ continue;
139
+ }
140
+ throw error;
141
+ }
142
+ }
143
+ }
144
+ export async function resolveCliSettings(cliSettings, env, fs) {
145
+ const result = { ...cliSettings.values };
146
+ // Resolve top-level settings
147
+ if (cliSettings.resolved) {
148
+ for (const [key, value] of Object.entries(cliSettings.resolved)) {
149
+ result[key] = await resolveCliSettingValue(value, env, fs);
150
+ }
151
+ }
152
+ // Resolve env settings (nested under settings.env)
153
+ if (cliSettings.env) {
154
+ const resolvedEnv = {};
155
+ for (const [key, value] of Object.entries(cliSettings.env)) {
156
+ if (typeof value === "string") {
157
+ resolvedEnv[key] = value;
158
+ }
159
+ else {
160
+ resolvedEnv[key] = await resolveCliSettingValue(value, env, fs);
161
+ }
162
+ }
163
+ result.env = resolvedEnv;
164
+ }
165
+ return result;
166
+ }
167
+ async function resolveCliSettingValue(value, env, fs) {
168
+ if (isPoeApiKeyReference(value)) {
169
+ const resolved = env.getVariable("POE_API_KEY");
170
+ if (typeof resolved === "string" && resolved.trim().length > 0) {
171
+ return resolved;
172
+ }
173
+ if (fs) {
174
+ return await resolvePoeApiKeyFromCredentials({ fs, env });
175
+ }
176
+ throw new Error('Missing Poe API key for CLI settings. Set "POE_API_KEY" or run "poe-code login".');
177
+ }
178
+ if (isPoeBaseUrlReference(value)) {
179
+ return env.poeBaseUrl;
180
+ }
181
+ throw new Error("Unsupported CLI setting value type.");
182
+ }
183
+ function stripAgentHome(mapped, baseDir, agentBinary) {
184
+ const agentDir = `.${agentBinary}`;
185
+ const prefix = path.join(baseDir, agentDir);
186
+ if (mapped === prefix) {
187
+ return baseDir;
188
+ }
189
+ const withSep = `${prefix}${path.sep}`;
190
+ if (mapped.startsWith(withSep)) {
191
+ return path.join(baseDir, mapped.slice(withSep.length));
192
+ }
193
+ return mapped;
194
+ }
195
+ function expandHomeShortcut(env, input) {
196
+ if (!input.startsWith("~")) {
197
+ return input;
198
+ }
199
+ if (input === "~") {
200
+ return env.homeDir;
201
+ }
202
+ if (input.startsWith("~/") || input.startsWith(`~${path.sep}`)) {
203
+ return path.join(env.homeDir, input.slice(2));
204
+ }
205
+ if (input.startsWith("~./") || input.startsWith(`~.${path.sep}`)) {
206
+ return path.join(env.homeDir, `.${input.slice(3)}`);
207
+ }
208
+ return input;
209
+ }
210
+ //# sourceMappingURL=isolated-env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isolated-env.js","sourceRoot":"","sources":["../../src/cli/isolated-env.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { LoggerFn } from "./types.js";
2
+ import type { ErrorLogger, ErrorContext } from "./error-logger.js";
3
+ export interface LoggerContext {
4
+ dryRun?: boolean;
5
+ verbose?: boolean;
6
+ scope?: string;
7
+ }
8
+ export interface ScopedLogger {
9
+ readonly context: Required<Pick<LoggerContext, "dryRun" | "verbose">> & Pick<LoggerContext, "scope">;
10
+ info(message: string): void;
11
+ success(message: string): void;
12
+ warn(message: string): void;
13
+ error(message: string): void;
14
+ errorResolved(label: string, value: string): void;
15
+ errorWithStack(error: Error, context?: ErrorContext): void;
16
+ logException(error: Error, operation: string, context?: ErrorContext): void;
17
+ dryRun(message: string): void;
18
+ verbose(message: string): void;
19
+ intro(title: string): void;
20
+ resolved(label: string, value: string): void;
21
+ nextSteps(steps: string[]): void;
22
+ feedback(label: string, url: string): void;
23
+ child(context: Partial<LoggerContext>): ScopedLogger;
24
+ }
25
+ export interface LoggerFactory {
26
+ base: LoggerFn;
27
+ errorLogger?: ErrorLogger;
28
+ create(context?: LoggerContext): ScopedLogger;
29
+ setErrorLogger(errorLogger: ErrorLogger): void;
30
+ }
31
+ export interface LoggerTheme {
32
+ intro?: (text: string) => string;
33
+ resolvedSymbol?: string;
34
+ errorSymbol?: string;
35
+ }
36
+ export declare function createLoggerFactory(emitter?: LoggerFn, theme?: LoggerTheme): LoggerFactory;