poe-code 0.1.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (245) hide show
  1. package/README.md +64 -0
  2. package/dist/cli/api-client.d.ts +14 -0
  3. package/dist/cli/api-client.js +140 -0
  4. package/dist/cli/api-client.js.map +1 -0
  5. package/dist/cli/chat.d.ts +32 -0
  6. package/dist/cli/chat.js +2 -0
  7. package/dist/cli/chat.js.map +1 -0
  8. package/dist/cli/command-runner.d.ts +2 -0
  9. package/dist/cli/command-runner.js +37 -0
  10. package/dist/cli/command-runner.js.map +1 -0
  11. package/dist/cli/commands/agent.d.ts +18 -0
  12. package/dist/cli/commands/agent.js +84 -0
  13. package/dist/cli/commands/agent.js.map +1 -0
  14. package/dist/cli/commands/configure-agents.d.ts +3 -0
  15. package/dist/cli/commands/configure-agents.js +72 -0
  16. package/dist/cli/commands/configure-agents.js.map +1 -0
  17. package/dist/cli/commands/configure.d.ts +11 -0
  18. package/dist/cli/commands/configure.js +150 -0
  19. package/dist/cli/commands/configure.js.map +1 -0
  20. package/dist/cli/commands/init.d.ts +8 -0
  21. package/dist/cli/commands/init.js +45 -0
  22. package/dist/cli/commands/init.js.map +1 -0
  23. package/dist/cli/commands/interactive.d.ts +3 -0
  24. package/dist/cli/commands/interactive.js +17 -0
  25. package/dist/cli/commands/interactive.js.map +1 -0
  26. package/dist/cli/commands/login.d.ts +6 -0
  27. package/dist/cli/commands/login.js +51 -0
  28. package/dist/cli/commands/login.js.map +1 -0
  29. package/dist/cli/commands/logout.d.ts +3 -0
  30. package/dist/cli/commands/logout.js +31 -0
  31. package/dist/cli/commands/logout.js.map +1 -0
  32. package/dist/cli/commands/prerequisites.d.ts +3 -0
  33. package/dist/cli/commands/prerequisites.js +23 -0
  34. package/dist/cli/commands/prerequisites.js.map +1 -0
  35. package/dist/cli/commands/query.d.ts +7 -0
  36. package/dist/cli/commands/query.js +46 -0
  37. package/dist/cli/commands/query.js.map +1 -0
  38. package/dist/cli/commands/remove.d.ts +6 -0
  39. package/dist/cli/commands/remove.js +80 -0
  40. package/dist/cli/commands/remove.js.map +1 -0
  41. package/dist/cli/commands/root.d.ts +3 -0
  42. package/dist/cli/commands/root.js +7 -0
  43. package/dist/cli/commands/root.js.map +1 -0
  44. package/dist/cli/commands/shared.d.ts +24 -0
  45. package/dist/cli/commands/shared.js +61 -0
  46. package/dist/cli/commands/shared.js.map +1 -0
  47. package/dist/cli/commands/spawn-worktree.d.ts +6 -0
  48. package/dist/cli/commands/spawn-worktree.js +91 -0
  49. package/dist/cli/commands/spawn-worktree.js.map +1 -0
  50. package/dist/cli/commands/spawn.d.ts +7 -0
  51. package/dist/cli/commands/spawn.js +112 -0
  52. package/dist/cli/commands/spawn.js.map +1 -0
  53. package/dist/cli/commands/test.d.ts +6 -0
  54. package/dist/cli/commands/test.js +26 -0
  55. package/dist/cli/commands/test.js.map +1 -0
  56. package/dist/cli/constants.d.ts +10 -0
  57. package/dist/cli/constants.js +11 -0
  58. package/dist/cli/constants.js.map +1 -0
  59. package/dist/cli/container.d.ts +48 -0
  60. package/dist/cli/container.js +94 -0
  61. package/dist/cli/container.js.map +1 -0
  62. package/dist/cli/context.d.ts +37 -0
  63. package/dist/cli/context.js +198 -0
  64. package/dist/cli/context.js.map +1 -0
  65. package/dist/cli/environment.d.ts +19 -0
  66. package/dist/cli/environment.js +26 -0
  67. package/dist/cli/environment.js.map +1 -0
  68. package/dist/cli/error-logger.d.ts +46 -0
  69. package/dist/cli/error-logger.js +137 -0
  70. package/dist/cli/error-logger.js.map +1 -0
  71. package/dist/cli/errors.d.ts +91 -0
  72. package/dist/cli/errors.js +128 -0
  73. package/dist/cli/errors.js.map +1 -0
  74. package/dist/cli/file-mentions.d.ts +13 -0
  75. package/dist/cli/file-mentions.js +87 -0
  76. package/dist/cli/file-mentions.js.map +1 -0
  77. package/dist/cli/file-picker-state.d.ts +14 -0
  78. package/dist/cli/file-picker-state.js +23 -0
  79. package/dist/cli/file-picker-state.js.map +1 -0
  80. package/dist/cli/http.d.ts +11 -0
  81. package/dist/cli/http.js +2 -0
  82. package/dist/cli/http.js.map +1 -0
  83. package/dist/cli/interactive-command-runner.d.ts +11 -0
  84. package/dist/cli/interactive-command-runner.js +142 -0
  85. package/dist/cli/interactive-command-runner.js.map +1 -0
  86. package/dist/cli/interactive-launcher.d.ts +2 -0
  87. package/dist/cli/interactive-launcher.js +404 -0
  88. package/dist/cli/interactive-launcher.js.map +1 -0
  89. package/dist/cli/interactive-tasks.d.ts +7 -0
  90. package/dist/cli/interactive-tasks.js +199 -0
  91. package/dist/cli/interactive-tasks.js.map +1 -0
  92. package/dist/cli/interactive.d.ts +19 -0
  93. package/dist/cli/interactive.js +479 -0
  94. package/dist/cli/interactive.js.map +1 -0
  95. package/dist/cli/logger.d.ts +26 -0
  96. package/dist/cli/logger.js +87 -0
  97. package/dist/cli/logger.js.map +1 -0
  98. package/dist/cli/markdown-renderer.d.ts +27 -0
  99. package/dist/cli/markdown-renderer.js +178 -0
  100. package/dist/cli/markdown-renderer.js.map +1 -0
  101. package/dist/cli/markdown-renderer.test.d.ts +1 -0
  102. package/dist/cli/markdown-renderer.test.js +105 -0
  103. package/dist/cli/markdown-renderer.test.js.map +1 -0
  104. package/dist/cli/options.d.ts +30 -0
  105. package/dist/cli/options.js +84 -0
  106. package/dist/cli/options.js.map +1 -0
  107. package/dist/cli/program.d.ts +4 -0
  108. package/dist/cli/program.js +64 -0
  109. package/dist/cli/program.js.map +1 -0
  110. package/dist/cli/prompts.d.ts +23 -0
  111. package/dist/cli/prompts.js +58 -0
  112. package/dist/cli/prompts.js.map +1 -0
  113. package/dist/cli/service-registry.d.ts +33 -0
  114. package/dist/cli/service-registry.js +35 -0
  115. package/dist/cli/service-registry.js.map +1 -0
  116. package/dist/cli/telemetry.d.ts +15 -0
  117. package/dist/cli/telemetry.js +45 -0
  118. package/dist/cli/telemetry.js.map +1 -0
  119. package/dist/cli/types.d.ts +2 -0
  120. package/dist/cli/types.js +2 -0
  121. package/dist/cli/types.js.map +1 -0
  122. package/dist/commands/init.d.ts +9 -0
  123. package/dist/commands/init.js +43 -0
  124. package/dist/commands/init.js.map +1 -0
  125. package/dist/commands/publish-placeholder.d.ts +8 -0
  126. package/dist/commands/publish-placeholder.js +50 -0
  127. package/dist/commands/publish-placeholder.js.map +1 -0
  128. package/dist/commands/spawn-worktree.d.ts +25 -0
  129. package/dist/commands/spawn-worktree.js +139 -0
  130. package/dist/commands/spawn-worktree.js.map +1 -0
  131. package/dist/index.d.ts +4 -0
  132. package/dist/index.js +81 -0
  133. package/dist/index.js.map +1 -0
  134. package/dist/providers/claude-code-adapter.d.ts +20 -0
  135. package/dist/providers/claude-code-adapter.js +48 -0
  136. package/dist/providers/claude-code-adapter.js.map +1 -0
  137. package/dist/providers/codex-adapter.d.ts +19 -0
  138. package/dist/providers/codex-adapter.js +49 -0
  139. package/dist/providers/codex-adapter.js.map +1 -0
  140. package/dist/providers/index.d.ts +2 -0
  141. package/dist/providers/index.js +13 -0
  142. package/dist/providers/index.js.map +1 -0
  143. package/dist/providers/opencode-adapter.d.ts +18 -0
  144. package/dist/providers/opencode-adapter.js +45 -0
  145. package/dist/providers/opencode-adapter.js.map +1 -0
  146. package/dist/providers/roo-code-adapter.d.ts +19 -0
  147. package/dist/providers/roo-code-adapter.js +70 -0
  148. package/dist/providers/roo-code-adapter.js.map +1 -0
  149. package/dist/services/agent-config-manager.d.ts +32 -0
  150. package/dist/services/agent-config-manager.js +130 -0
  151. package/dist/services/agent-config-manager.js.map +1 -0
  152. package/dist/services/agent-registry.d.ts +27 -0
  153. package/dist/services/agent-registry.js +89 -0
  154. package/dist/services/agent-registry.js.map +1 -0
  155. package/dist/services/agent-session.d.ts +24 -0
  156. package/dist/services/agent-session.js +107 -0
  157. package/dist/services/agent-session.js.map +1 -0
  158. package/dist/services/agent-task-registry.d.ts +131 -0
  159. package/dist/services/agent-task-registry.js +491 -0
  160. package/dist/services/agent-task-registry.js.map +1 -0
  161. package/dist/services/chat.d.ts +94 -0
  162. package/dist/services/chat.js +241 -0
  163. package/dist/services/chat.js.map +1 -0
  164. package/dist/services/claude-code.d.ts +28 -0
  165. package/dist/services/claude-code.js +155 -0
  166. package/dist/services/claude-code.js.map +1 -0
  167. package/dist/services/codex.d.ts +27 -0
  168. package/dist/services/codex.js +231 -0
  169. package/dist/services/codex.js.map +1 -0
  170. package/dist/services/credentials.d.ts +11 -0
  171. package/dist/services/credentials.js +44 -0
  172. package/dist/services/credentials.js.map +1 -0
  173. package/dist/services/mcp-client.d.ts +38 -0
  174. package/dist/services/mcp-client.js +170 -0
  175. package/dist/services/mcp-client.js.map +1 -0
  176. package/dist/services/mcp-manager.d.ts +28 -0
  177. package/dist/services/mcp-manager.js +157 -0
  178. package/dist/services/mcp-manager.js.map +1 -0
  179. package/dist/services/model-strategy.d.ts +99 -0
  180. package/dist/services/model-strategy.js +182 -0
  181. package/dist/services/model-strategy.js.map +1 -0
  182. package/dist/services/opencode.d.ts +25 -0
  183. package/dist/services/opencode.js +161 -0
  184. package/dist/services/opencode.js.map +1 -0
  185. package/dist/services/poe-code.d.ts +7 -0
  186. package/dist/services/poe-code.js +5 -0
  187. package/dist/services/poe-code.js.map +1 -0
  188. package/dist/services/roo-code.d.ts +22 -0
  189. package/dist/services/roo-code.js +134 -0
  190. package/dist/services/roo-code.js.map +1 -0
  191. package/dist/services/service-install.d.ts +21 -0
  192. package/dist/services/service-install.js +47 -0
  193. package/dist/services/service-install.js.map +1 -0
  194. package/dist/services/service-manifest.d.ts +122 -0
  195. package/dist/services/service-manifest.js +368 -0
  196. package/dist/services/service-manifest.js.map +1 -0
  197. package/dist/services/task-logger.d.ts +24 -0
  198. package/dist/services/task-logger.js +73 -0
  199. package/dist/services/task-logger.js.map +1 -0
  200. package/dist/services/task-runner.d.ts +19 -0
  201. package/dist/services/task-runner.js +157 -0
  202. package/dist/services/task-runner.js.map +1 -0
  203. package/dist/services/tools.d.ts +76 -0
  204. package/dist/services/tools.js +870 -0
  205. package/dist/services/tools.js.map +1 -0
  206. package/dist/templates/claude-code/anthropic_key.sh.hbs +2 -0
  207. package/dist/templates/codex/config.toml.hbs +9 -0
  208. package/dist/templates/python/env.hbs +3 -0
  209. package/dist/templates/python/main.py.hbs +17 -0
  210. package/dist/templates/python/requirements.txt.hbs +2 -0
  211. package/dist/utils/backup.d.ts +5 -0
  212. package/dist/utils/backup.js +61 -0
  213. package/dist/utils/backup.js.map +1 -0
  214. package/dist/utils/command-line.d.ts +1 -0
  215. package/dist/utils/command-line.js +54 -0
  216. package/dist/utils/command-line.js.map +1 -0
  217. package/dist/utils/dry-run.d.ts +38 -0
  218. package/dist/utils/dry-run.js +211 -0
  219. package/dist/utils/dry-run.js.map +1 -0
  220. package/dist/utils/e2e-flags.d.ts +1 -0
  221. package/dist/utils/e2e-flags.js +9 -0
  222. package/dist/utils/e2e-flags.js.map +1 -0
  223. package/dist/utils/file-system.d.ts +21 -0
  224. package/dist/utils/file-system.js +2 -0
  225. package/dist/utils/file-system.js.map +1 -0
  226. package/dist/utils/json.d.ts +12 -0
  227. package/dist/utils/json.js +42 -0
  228. package/dist/utils/json.js.map +1 -0
  229. package/dist/utils/prerequisites.d.ts +41 -0
  230. package/dist/utils/prerequisites.js +92 -0
  231. package/dist/utils/prerequisites.js.map +1 -0
  232. package/dist/utils/templates.d.ts +4 -0
  233. package/dist/utils/templates.js +22 -0
  234. package/dist/utils/templates.js.map +1 -0
  235. package/dist/utils/toml.d.ts +8 -0
  236. package/dist/utils/toml.js +30 -0
  237. package/dist/utils/toml.js.map +1 -0
  238. package/dist/utils/worktree.d.ts +40 -0
  239. package/dist/utils/worktree.js +179 -0
  240. package/dist/utils/worktree.js.map +1 -0
  241. package/package.json +84 -0
  242. package/shared/conversation-layout.cjs +11 -0
  243. package/shared/conversation-layout.d.ts +7 -0
  244. package/shared/conversation-layout.js +11 -0
  245. package/shared/package.json +13 -0
@@ -0,0 +1,198 @@
1
+ import chalk from "chalk";
2
+ import { DryRunRecorder, formatDryRunOperations } from "../utils/dry-run.js";
3
+ import { createDryRunFileSystem } from "../utils/dry-run.js";
4
+ import { createPrerequisiteManager } from "../utils/prerequisites.js";
5
+ export function createCommandContextFactory(init) {
6
+ const { fs } = init;
7
+ const create = (options) => {
8
+ const prerequisites = createPrerequisiteManager({
9
+ isDryRun: options.dryRun,
10
+ runCommand: options.runner
11
+ });
12
+ if (!options.dryRun) {
13
+ return {
14
+ fs,
15
+ prerequisites,
16
+ runCommand: options.runner,
17
+ complete(messages) {
18
+ options.logger.info(messages.success);
19
+ }
20
+ };
21
+ }
22
+ const recorder = new DryRunRecorder();
23
+ const proxyFs = createDryRunFileSystem(fs, recorder);
24
+ const recordedCommands = new Set();
25
+ const entries = [];
26
+ const recordMutation = (entry) => {
27
+ entries.push(entry);
28
+ recordedCommands.add(entry.command);
29
+ };
30
+ const flush = () => {
31
+ for (const entry of entries) {
32
+ options.logger.info(entry.message);
33
+ }
34
+ for (const line of formatDryRunOperations(recorder.drain())) {
35
+ const base = extractBaseCommand(line);
36
+ if (!recordedCommands.has(base)) {
37
+ options.logger.info(line);
38
+ recordedCommands.add(base);
39
+ }
40
+ }
41
+ };
42
+ return {
43
+ fs: proxyFs,
44
+ prerequisites,
45
+ recordMutation,
46
+ runCommand: options.runner,
47
+ complete(messages) {
48
+ options.logger.dryRun(messages.dry);
49
+ flush();
50
+ }
51
+ };
52
+ };
53
+ return { create };
54
+ }
55
+ export function createLoggingCommandRunner(runner, logger) {
56
+ return async (command, args) => {
57
+ const rendered = [command, ...args].join(" ").trim();
58
+ logger.verbose(`> ${rendered}`);
59
+ return runner(command, args);
60
+ };
61
+ }
62
+ export function createPrerequisiteHooks(phase, logger) {
63
+ if (!logger.context.verbose) {
64
+ return undefined;
65
+ }
66
+ return {
67
+ onStart(prerequisite) {
68
+ logger.verbose(`Running ${phase} prerequisite: ${prerequisite.description}`);
69
+ },
70
+ onSuccess(prerequisite) {
71
+ logger.verbose(`✓ ${prerequisite.description}`);
72
+ },
73
+ onFailure(prerequisite, error) {
74
+ const detail = error instanceof Error ? error.message : String(error ?? "Unknown error");
75
+ logger.error(`✖ ${prerequisite.description}: ${detail}`);
76
+ }
77
+ };
78
+ }
79
+ export function createMutationLogger(logger, options) {
80
+ const { collector } = options;
81
+ const verbose = logger.context.verbose;
82
+ if (!verbose && !collector) {
83
+ return undefined;
84
+ }
85
+ const emit = (entry) => {
86
+ collector?.(entry);
87
+ if (verbose) {
88
+ logger.info(entry.message);
89
+ }
90
+ };
91
+ return {
92
+ onStart() {
93
+ // Start is intentionally silent to keep verbose logging focused on results.
94
+ },
95
+ onComplete(details, outcome) {
96
+ const command = formatMutationCommand(details, outcome);
97
+ emit({
98
+ command,
99
+ message: decorateMutationCommand(command, outcome)
100
+ });
101
+ },
102
+ onError(details, error) {
103
+ const command = formatMutationCommand(details);
104
+ const rendered = renderMutationError(command, error);
105
+ logger.error(rendered);
106
+ collector?.({ command, message: rendered });
107
+ }
108
+ };
109
+ }
110
+ export function normalizePhase(value) {
111
+ const normalized = value.toLowerCase();
112
+ if (normalized === "before" || normalized === "after") {
113
+ return normalized;
114
+ }
115
+ throw new Error(`Unknown phase "${value}". Use "before" or "after".`);
116
+ }
117
+ function renderMutationError(command, error) {
118
+ const detail = error instanceof Error ? error.message : String(error);
119
+ return chalk.red(`${command} ! ${detail}`);
120
+ }
121
+ function formatMutationCommand(details, outcome) {
122
+ const target = details.targetPath;
123
+ const effect = outcome?.effect;
124
+ if (effect && effect !== "none") {
125
+ return describeEffect(effect, target);
126
+ }
127
+ switch (details.kind) {
128
+ case "ensureDirectory":
129
+ return describeEffect("mkdir", target);
130
+ case "createBackup":
131
+ return describeEffect("copy", target);
132
+ case "removeFile":
133
+ return describeEffect("delete", target);
134
+ case "writeTemplate":
135
+ case "transformFile":
136
+ return describeEffect("write", target);
137
+ default:
138
+ return details.label;
139
+ }
140
+ }
141
+ function decorateMutationCommand(command, outcome) {
142
+ const colored = colorizeMutation(command, outcome);
143
+ const suffix = describeOutcomeDetail(outcome);
144
+ return suffix ? `${colored} ${chalk.dim(`# ${suffix}`)}` : colored;
145
+ }
146
+ function colorizeMutation(command, outcome) {
147
+ if (!outcome.changed || outcome.effect === "none") {
148
+ return chalk.dim(command);
149
+ }
150
+ switch (outcome.effect) {
151
+ case "mkdir":
152
+ case "copy":
153
+ return chalk.cyan(command);
154
+ case "delete":
155
+ return chalk.red(command);
156
+ case "write":
157
+ return chalk.green(command);
158
+ default:
159
+ return command;
160
+ }
161
+ }
162
+ function describeOutcomeDetail(outcome) {
163
+ switch (outcome.detail) {
164
+ case "create":
165
+ return "create";
166
+ case "update":
167
+ return "update";
168
+ case "delete":
169
+ return "delete";
170
+ case "noop":
171
+ return "no change";
172
+ default:
173
+ return outcome.detail;
174
+ }
175
+ }
176
+ function describeEffect(effect, target) {
177
+ switch (effect) {
178
+ case "mkdir":
179
+ return target ? `mkdir -p ${target}` : "mkdir -p";
180
+ case "copy":
181
+ return target ? `cp ${target} ${target}.bak` : "cp <target> <target>.bak";
182
+ case "write":
183
+ return target ? `cat > ${target}` : "cat > <target>";
184
+ case "delete":
185
+ return target ? `rm ${target}` : "rm <target>";
186
+ default:
187
+ return effect;
188
+ }
189
+ }
190
+ function extractBaseCommand(message) {
191
+ const raw = stripAnsi(message);
192
+ const detailIndex = raw.indexOf(" #");
193
+ return detailIndex >= 0 ? raw.slice(0, detailIndex).trim() : raw.trim();
194
+ }
195
+ function stripAnsi(value) {
196
+ return value.replace(/\u001B\[[0-9;]*m/g, "");
197
+ }
198
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/cli/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export interface CliEnvironmentInit {
2
+ cwd: string;
3
+ homeDir: string;
4
+ platform?: NodeJS.Platform;
5
+ variables?: Record<string, string | undefined>;
6
+ }
7
+ export interface CliEnvironment {
8
+ readonly cwd: string;
9
+ readonly homeDir: string;
10
+ readonly platform: NodeJS.Platform;
11
+ readonly credentialsPath: string;
12
+ readonly logDir: string;
13
+ readonly variables: Record<string, string | undefined>;
14
+ resolveHomePath: (...segments: string[]) => string;
15
+ getVariable: (name: string) => string | undefined;
16
+ }
17
+ export declare function createCliEnvironment(init: CliEnvironmentInit): CliEnvironment;
18
+ export declare function resolveCredentialsPath(homeDir: string): string;
19
+ export declare function resolveLogDir(homeDir: string): string;
@@ -0,0 +1,26 @@
1
+ import path from "node:path";
2
+ export function createCliEnvironment(init) {
3
+ const platform = init.platform ?? process.platform;
4
+ const variables = init.variables ?? process.env;
5
+ const credentialsPath = resolveCredentialsPath(init.homeDir);
6
+ const logDir = resolveLogDir(init.homeDir);
7
+ const resolveHomePath = (...segments) => path.join(init.homeDir, ...segments);
8
+ const getVariable = (name) => variables[name];
9
+ return {
10
+ cwd: init.cwd,
11
+ homeDir: init.homeDir,
12
+ platform,
13
+ credentialsPath,
14
+ logDir,
15
+ variables,
16
+ resolveHomePath,
17
+ getVariable
18
+ };
19
+ }
20
+ export function resolveCredentialsPath(homeDir) {
21
+ return path.join(homeDir, ".poe-code", "credentials.json");
22
+ }
23
+ export function resolveLogDir(homeDir) {
24
+ return path.join(homeDir, ".poe-code", "logs");
25
+ }
26
+ //# sourceMappingURL=environment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.js","sourceRoot":"","sources":["../../src/cli/environment.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAoB7B,MAAM,UAAU,oBAAoB,CAAC,IAAwB;IAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;IACnD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC;IAChD,MAAM,eAAe,GAAG,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAE3C,MAAM,eAAe,GAAG,CAAC,GAAG,QAAkB,EAAU,EAAE,CACxD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,CAAC;IAEvC,MAAM,WAAW,GAAG,CAAC,IAAY,EAAsB,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAE1E,OAAO;QACL,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,QAAQ;QACR,eAAe;QACf,MAAM;QACN,SAAS;QACT,eAAe;QACf,WAAW;KACZ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAe;IACpD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,kBAAkB,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;AACjD,CAAC"}
@@ -0,0 +1,46 @@
1
+ import type { FsLike } from "../services/agent-task-registry.js";
2
+ export interface ErrorContext {
3
+ operation?: string;
4
+ component?: string;
5
+ apiEndpoint?: string;
6
+ httpStatus?: number;
7
+ requestBody?: unknown;
8
+ responseBody?: unknown;
9
+ [key: string]: unknown;
10
+ }
11
+ export interface ErrorLogEntry {
12
+ timestamp: string;
13
+ level: "ERROR" | "WARN";
14
+ message: string;
15
+ stack?: string;
16
+ context?: ErrorContext;
17
+ }
18
+ export interface ErrorLoggerOptions {
19
+ fs: FsLike;
20
+ logDir: string;
21
+ logToStderr?: boolean;
22
+ maxSize?: number;
23
+ maxBackups?: number;
24
+ now?: () => Date;
25
+ }
26
+ export declare class ErrorLogger {
27
+ private readonly fs;
28
+ private readonly logFilePath;
29
+ private readonly logToStderr;
30
+ private readonly maxSize;
31
+ private readonly maxBackups;
32
+ private readonly now;
33
+ constructor(options: ErrorLoggerOptions);
34
+ logError(error: Error | string, context?: ErrorContext): void;
35
+ logWarning(message: string, context?: ErrorContext): void;
36
+ logErrorWithStackTrace(error: Error, operation: string, context?: ErrorContext): void;
37
+ private createErrorEntry;
38
+ private createWarningEntry;
39
+ private writeEntry;
40
+ private formatEntry;
41
+ private writeToStderr;
42
+ private rotateIfNeeded;
43
+ private performRotation;
44
+ private buildBackupPath;
45
+ private ensureLogDirectory;
46
+ }
@@ -0,0 +1,137 @@
1
+ import path from "node:path";
2
+ const DEFAULT_MAX_SIZE = 10 * 1024 * 1024; // 10MB
3
+ const DEFAULT_MAX_BACKUPS = 5;
4
+ export class ErrorLogger {
5
+ constructor(options) {
6
+ this.fs = options.fs;
7
+ this.logFilePath = path.join(options.logDir, "errors.log");
8
+ this.logToStderr = options.logToStderr ?? true;
9
+ this.maxSize = options.maxSize ?? DEFAULT_MAX_SIZE;
10
+ this.maxBackups = options.maxBackups ?? DEFAULT_MAX_BACKUPS;
11
+ this.now = options.now ?? (() => new Date());
12
+ this.ensureLogDirectory();
13
+ }
14
+ logError(error, context) {
15
+ const entry = this.createErrorEntry(error, "ERROR", context);
16
+ this.writeEntry(entry);
17
+ if (this.logToStderr) {
18
+ this.writeToStderr(entry);
19
+ }
20
+ }
21
+ logWarning(message, context) {
22
+ const entry = this.createWarningEntry(message, context);
23
+ this.writeEntry(entry);
24
+ if (this.logToStderr) {
25
+ this.writeToStderr(entry);
26
+ }
27
+ }
28
+ logErrorWithStackTrace(error, operation, context) {
29
+ const fullContext = {
30
+ ...context,
31
+ operation
32
+ };
33
+ this.logError(error, fullContext);
34
+ }
35
+ createErrorEntry(error, level, context) {
36
+ const errorObj = typeof error === "string" ? new Error(error) : error;
37
+ return {
38
+ timestamp: this.now().toISOString(),
39
+ level,
40
+ message: errorObj.message,
41
+ stack: errorObj.stack,
42
+ context
43
+ };
44
+ }
45
+ createWarningEntry(message, context) {
46
+ return {
47
+ timestamp: this.now().toISOString(),
48
+ level: "WARN",
49
+ message,
50
+ context
51
+ };
52
+ }
53
+ writeEntry(entry) {
54
+ this.rotateIfNeeded();
55
+ const formattedEntry = this.formatEntry(entry);
56
+ try {
57
+ this.fs.appendFileSync(this.logFilePath, formattedEntry + "\n");
58
+ }
59
+ catch (writeError) {
60
+ // Fallback to stderr if file write fails
61
+ console.error("Failed to write to error log file:", writeError);
62
+ this.writeToStderr(entry);
63
+ }
64
+ }
65
+ formatEntry(entry) {
66
+ const parts = [`[${entry.timestamp}] ${entry.level}: ${entry.message}`];
67
+ if (entry.context && Object.keys(entry.context).length > 0) {
68
+ parts.push(`Context: ${JSON.stringify(entry.context)}`);
69
+ }
70
+ if (entry.stack) {
71
+ parts.push(`Stack trace:\n${entry.stack}`);
72
+ }
73
+ return parts.join("\n");
74
+ }
75
+ writeToStderr(entry) {
76
+ const formatted = this.formatEntry(entry);
77
+ console.error(formatted);
78
+ }
79
+ rotateIfNeeded() {
80
+ try {
81
+ if (!this.fs.existsSync(this.logFilePath)) {
82
+ return;
83
+ }
84
+ const stats = this.fs.statSync(this.logFilePath);
85
+ if (stats.size < this.maxSize) {
86
+ return;
87
+ }
88
+ this.performRotation();
89
+ }
90
+ catch (error) {
91
+ console.error("Error during log rotation:", error);
92
+ }
93
+ }
94
+ performRotation() {
95
+ if (this.maxBackups < 1) {
96
+ this.fs.unlinkSync(this.logFilePath);
97
+ return;
98
+ }
99
+ // Delete oldest backup
100
+ const oldestPath = this.buildBackupPath(this.maxBackups);
101
+ if (this.fs.existsSync(oldestPath)) {
102
+ this.fs.unlinkSync(oldestPath);
103
+ }
104
+ // Rotate existing backups
105
+ for (let i = this.maxBackups - 1; i >= 1; i--) {
106
+ const source = this.buildBackupPath(i);
107
+ if (this.fs.existsSync(source)) {
108
+ const target = this.buildBackupPath(i + 1);
109
+ this.fs.renameSync(source, target);
110
+ }
111
+ }
112
+ // Move current log to backup.1
113
+ if (this.fs.existsSync(this.logFilePath)) {
114
+ this.fs.renameSync(this.logFilePath, this.buildBackupPath(1));
115
+ }
116
+ }
117
+ buildBackupPath(index) {
118
+ return `${this.logFilePath}.${index}`;
119
+ }
120
+ ensureLogDirectory() {
121
+ const directory = path.dirname(this.logFilePath);
122
+ try {
123
+ if (!this.fs.existsSync(directory)) {
124
+ this.fs.mkdirSync(directory, { recursive: true });
125
+ }
126
+ if (!this.fs.existsSync(this.logFilePath)) {
127
+ this.fs.writeFileSync(this.logFilePath, "", { encoding: "utf8" });
128
+ }
129
+ }
130
+ catch (error) {
131
+ // Silently fail during directory creation - this is expected in test environments
132
+ // where the log directory path may not exist. The logger will still function,
133
+ // just without file logging capability.
134
+ }
135
+ }
136
+ }
137
+ //# sourceMappingURL=error-logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-logger.js","sourceRoot":"","sources":["../../src/cli/error-logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
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
+ * API-related errors (network, HTTP status, API responses)
14
+ */
15
+ export declare class ApiError extends CliError {
16
+ readonly httpStatus?: number;
17
+ readonly endpoint?: string;
18
+ constructor(message: string, options?: {
19
+ httpStatus?: number;
20
+ endpoint?: string;
21
+ context?: ErrorContext;
22
+ });
23
+ }
24
+ /**
25
+ * Configuration and validation errors (user input, config files)
26
+ */
27
+ export declare class ValidationError extends CliError {
28
+ constructor(message: string, context?: ErrorContext);
29
+ }
30
+ /**
31
+ * File system operation errors
32
+ */
33
+ export declare class FileSystemError extends CliError {
34
+ readonly filePath?: string;
35
+ readonly operation?: string;
36
+ constructor(message: string, options?: {
37
+ filePath?: string;
38
+ operation?: string;
39
+ context?: ErrorContext;
40
+ });
41
+ }
42
+ /**
43
+ * Authentication and credential errors
44
+ */
45
+ export declare class AuthenticationError extends CliError {
46
+ constructor(message: string, context?: ErrorContext);
47
+ }
48
+ /**
49
+ * Command execution errors
50
+ */
51
+ export declare class CommandExecutionError extends CliError {
52
+ readonly command?: string;
53
+ readonly exitCode?: number;
54
+ constructor(message: string, options?: {
55
+ command?: string;
56
+ exitCode?: number;
57
+ context?: ErrorContext;
58
+ });
59
+ }
60
+ /**
61
+ * Prerequisite check failures
62
+ */
63
+ export declare class PrerequisiteError extends CliError {
64
+ readonly checks?: string[];
65
+ constructor(message: string, options?: {
66
+ checks?: string[];
67
+ context?: ErrorContext;
68
+ });
69
+ }
70
+ /**
71
+ * Service provider errors (MCP, Codex, etc.)
72
+ */
73
+ export declare class ServiceError extends CliError {
74
+ readonly service?: string;
75
+ constructor(message: string, options?: {
76
+ service?: string;
77
+ context?: ErrorContext;
78
+ });
79
+ }
80
+ /**
81
+ * Helper to determine if an error should be shown to users
82
+ */
83
+ export declare function isUserFacingError(error: unknown): boolean;
84
+ /**
85
+ * Helper to extract error context from any error
86
+ */
87
+ export declare function extractErrorContext(error: unknown): ErrorContext | undefined;
88
+ /**
89
+ * Helper to create a standardized error message with context
90
+ */
91
+ export declare function formatErrorWithContext(error: Error, context?: ErrorContext): string;
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Base error class for all CLI errors with context support
3
+ */
4
+ export class CliError extends Error {
5
+ constructor(message, context, options) {
6
+ super(message);
7
+ this.name = this.constructor.name;
8
+ this.context = context;
9
+ this.isUserError = options?.isUserError ?? false;
10
+ // Maintains proper stack trace for where error was thrown
11
+ if (Error.captureStackTrace) {
12
+ Error.captureStackTrace(this, this.constructor);
13
+ }
14
+ }
15
+ }
16
+ /**
17
+ * API-related errors (network, HTTP status, API responses)
18
+ */
19
+ export class ApiError extends CliError {
20
+ constructor(message, options) {
21
+ super(message, {
22
+ ...options?.context,
23
+ httpStatus: options?.httpStatus,
24
+ apiEndpoint: options?.endpoint
25
+ });
26
+ this.httpStatus = options?.httpStatus;
27
+ this.endpoint = options?.endpoint;
28
+ }
29
+ }
30
+ /**
31
+ * Configuration and validation errors (user input, config files)
32
+ */
33
+ export class ValidationError extends CliError {
34
+ constructor(message, context) {
35
+ super(message, context, { isUserError: true });
36
+ }
37
+ }
38
+ /**
39
+ * File system operation errors
40
+ */
41
+ export class FileSystemError extends CliError {
42
+ constructor(message, options) {
43
+ super(message, {
44
+ ...options?.context,
45
+ filePath: options?.filePath,
46
+ operation: options?.operation
47
+ });
48
+ this.filePath = options?.filePath;
49
+ this.operation = options?.operation;
50
+ }
51
+ }
52
+ /**
53
+ * Authentication and credential errors
54
+ */
55
+ export class AuthenticationError extends CliError {
56
+ constructor(message, context) {
57
+ super(message, context, { isUserError: true });
58
+ }
59
+ }
60
+ /**
61
+ * Command execution errors
62
+ */
63
+ export class CommandExecutionError extends CliError {
64
+ constructor(message, options) {
65
+ super(message, {
66
+ ...options?.context,
67
+ command: options?.command,
68
+ exitCode: options?.exitCode
69
+ });
70
+ this.command = options?.command;
71
+ this.exitCode = options?.exitCode;
72
+ }
73
+ }
74
+ /**
75
+ * Prerequisite check failures
76
+ */
77
+ export class PrerequisiteError extends CliError {
78
+ constructor(message, options) {
79
+ super(message, {
80
+ ...options?.context,
81
+ failedChecks: options?.checks
82
+ });
83
+ this.checks = options?.checks;
84
+ }
85
+ }
86
+ /**
87
+ * Service provider errors (MCP, Codex, etc.)
88
+ */
89
+ export class ServiceError extends CliError {
90
+ constructor(message, options) {
91
+ super(message, {
92
+ ...options?.context,
93
+ service: options?.service
94
+ });
95
+ this.service = options?.service;
96
+ }
97
+ }
98
+ /**
99
+ * Helper to determine if an error should be shown to users
100
+ */
101
+ export function isUserFacingError(error) {
102
+ return error instanceof CliError && error.isUserError;
103
+ }
104
+ /**
105
+ * Helper to extract error context from any error
106
+ */
107
+ export function extractErrorContext(error) {
108
+ if (error instanceof CliError) {
109
+ return error.context;
110
+ }
111
+ return undefined;
112
+ }
113
+ /**
114
+ * Helper to create a standardized error message with context
115
+ */
116
+ export function formatErrorWithContext(error, context) {
117
+ const parts = [error.message];
118
+ if (context) {
119
+ if (context.operation) {
120
+ parts.push(`Operation: ${context.operation}`);
121
+ }
122
+ if (context.component) {
123
+ parts.push(`Component: ${context.component}`);
124
+ }
125
+ }
126
+ return parts.join(" | ");
127
+ }
128
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/cli/errors.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,OAAO,QAAS,SAAQ,KAAK;IAIjC,YACE,OAAe,EACf,OAAsB,EACtB,OAAmC;QAEnC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAClC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,KAAK,CAAC;QAEjD,0DAA0D;QAC1D,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC5B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,QAAS,SAAQ,QAAQ;IAIpC,YACE,OAAe,EACf,OAIC;QAED,KAAK,CAAC,OAAO,EAAE;YACb,GAAG,OAAO,EAAE,OAAO;YACnB,UAAU,EAAE,OAAO,EAAE,UAAU;YAC/B,WAAW,EAAE,OAAO,EAAE,QAAQ;SAC/B,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,GAAG,OAAO,EAAE,UAAU,CAAC;QACtC,IAAI,CAAC,QAAQ,GAAG,OAAO,EAAE,QAAQ,CAAC;IACpC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAC3C,YAAY,OAAe,EAAE,OAAsB;QACjD,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAI3C,YACE,OAAe,EACf,OAIC;QAED,KAAK,CAAC,OAAO,EAAE;YACb,GAAG,OAAO,EAAE,OAAO;YACnB,QAAQ,EAAE,OAAO,EAAE,QAAQ;YAC3B,SAAS,EAAE,OAAO,EAAE,SAAS;SAC9B,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,GAAG,OAAO,EAAE,QAAQ,CAAC;QAClC,IAAI,CAAC,SAAS,GAAG,OAAO,EAAE,SAAS,CAAC;IACtC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,QAAQ;IAC/C,YAAY,OAAe,EAAE,OAAsB;QACjD,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,QAAQ;IAIjD,YACE,OAAe,EACf,OAIC;QAED,KAAK,CAAC,OAAO,EAAE;YACb,GAAG,OAAO,EAAE,OAAO;YACnB,OAAO,EAAE,OAAO,EAAE,OAAO;YACzB,QAAQ,EAAE,OAAO,EAAE,QAAQ;SAC5B,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,OAAO,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,OAAO,EAAE,QAAQ,CAAC;IACpC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,iBAAkB,SAAQ,QAAQ;IAG7C,YACE,OAAe,EACf,OAGC;QAED,KAAK,CAAC,OAAO,EAAE;YACb,GAAG,OAAO,EAAE,OAAO;YACnB,YAAY,EAAE,OAAO,EAAE,MAAM;SAC9B,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,GAAG,OAAO,EAAE,MAAM,CAAC;IAChC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,YAAa,SAAQ,QAAQ;IAGxC,YACE,OAAe,EACf,OAGC;QAED,KAAK,CAAC,OAAO,EAAE;YACb,GAAG,OAAO,EAAE,OAAO;YACnB,OAAO,EAAE,OAAO,EAAE,OAAO;SAC1B,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,OAAO,CAAC;IAClC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,OAAO,KAAK,YAAY,QAAQ,IAAI,KAAK,CAAC,WAAW,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,KAAY,EACZ,OAAsB;IAEtB,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAE9B,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,cAAc,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,cAAc,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC"}