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,242 @@
1
+ import { select, isCancel, cancel } from "@poe-code/design-system";
2
+ import { supportedAgents, configure, unconfigure, resolveAgentSupport } from "@poe-code/agent-skill-config";
3
+ import { createExecutionResources, resolveCommandFlags } from "./shared.js";
4
+ import { throwCommandNotFound } from "../command-not-found.js";
5
+ const DEFAULT_SKILL_AGENT = "claude-code";
6
+ function buildHelpText() {
7
+ return [
8
+ "",
9
+ "Skill directories:",
10
+ "- poe-code skill configure installs skill directories for supported agents.",
11
+ "- poe-code skill unconfigure removes skill directories."
12
+ ].join("\n");
13
+ }
14
+ export function registerSkillCommand(program, container) {
15
+ const skill = program
16
+ .command("skill")
17
+ .description("Skill directory commands")
18
+ .addHelpText("after", buildHelpText())
19
+ .action(function () {
20
+ if (this.args.length > 0) {
21
+ throwCommandNotFound({
22
+ container,
23
+ scope: "skill",
24
+ unknownCommand: this.args.at(0) ?? "",
25
+ helpArgs: ["skill", "--help"],
26
+ moduleUrl: import.meta.url
27
+ });
28
+ }
29
+ this.help();
30
+ });
31
+ skill
32
+ .command("configure [agent]")
33
+ .description("Install skill directories for an agent")
34
+ .option("--agent <name>", "Agent to configure skills for")
35
+ .option("--local", "Use local scope (in the current project)")
36
+ .option("--global", "Use global scope (in the user home directory)")
37
+ .action(async (agentArg, options) => {
38
+ const flags = resolveCommandFlags(program);
39
+ const resources = createExecutionResources(container, flags, "skill");
40
+ if (options.local && options.global) {
41
+ resources.logger.error("Use either --local or --global, not both.");
42
+ return;
43
+ }
44
+ let agent = options.agent ?? agentArg;
45
+ if (!agent) {
46
+ if (flags.assumeYes) {
47
+ agent = DEFAULT_SKILL_AGENT;
48
+ }
49
+ else {
50
+ const selected = await select({
51
+ message: "Select agent to configure:",
52
+ options: supportedAgents.map((a) => ({ value: a, label: a }))
53
+ });
54
+ if (isCancel(selected)) {
55
+ cancel("Operation cancelled");
56
+ return;
57
+ }
58
+ agent = selected;
59
+ }
60
+ }
61
+ const support = resolveAgentSupport(agent);
62
+ if (support.status === "unknown") {
63
+ resources.logger.error(`Unknown agent: ${agent}`);
64
+ return;
65
+ }
66
+ if (support.status === "unsupported") {
67
+ resources.logger.error(`Skills not supported for ${support.id}.`);
68
+ return;
69
+ }
70
+ const resolvedAgent = support.id ?? agent;
71
+ const config = support.config;
72
+ let scope;
73
+ if (options.local) {
74
+ scope = "local";
75
+ }
76
+ else if (options.global) {
77
+ scope = "global";
78
+ }
79
+ else if (flags.assumeYes) {
80
+ scope = "global";
81
+ }
82
+ else {
83
+ const selected = await select({
84
+ message: "Select scope:",
85
+ options: [
86
+ { value: "global", label: "Global" },
87
+ { value: "local", label: "Local" }
88
+ ]
89
+ });
90
+ if (isCancel(selected)) {
91
+ cancel("Operation cancelled");
92
+ return;
93
+ }
94
+ scope = selected;
95
+ }
96
+ const displayPath = scope === "global"
97
+ ? config.globalSkillDir
98
+ : config.localSkillDir.startsWith("./")
99
+ ? config.localSkillDir
100
+ : `./${config.localSkillDir}`;
101
+ resources.logger.intro(`skill configure ${resolvedAgent}`);
102
+ await configure(resolvedAgent, {
103
+ fs: container.fs,
104
+ homeDir: container.env.homeDir,
105
+ cwd: container.env.cwd,
106
+ scope,
107
+ dryRun: flags.dryRun,
108
+ observers: {
109
+ onStart: (details) => {
110
+ if (flags.dryRun) {
111
+ resources.logger.dryRun(`Would ${details.label.toLowerCase()}`);
112
+ }
113
+ },
114
+ onComplete: (details, outcome) => {
115
+ if (!flags.dryRun && outcome.changed) {
116
+ resources.logger.verbose(details.label);
117
+ }
118
+ }
119
+ }
120
+ });
121
+ resources.context.complete({
122
+ success: `Configured skills for ${resolvedAgent} at ${displayPath}`,
123
+ dry: `Would configure skills for ${resolvedAgent} at ${displayPath}`
124
+ });
125
+ resources.context.finalize();
126
+ });
127
+ skill
128
+ .command("unconfigure [agent]")
129
+ .description("Remove skill directories for an agent")
130
+ .option("--agent <name>", "Agent to unconfigure skills for")
131
+ .option("--local", "Use local scope (in the current project)")
132
+ .option("--global", "Use global scope (in the user home directory)")
133
+ .option("--force", "Remove directory even if it contains files")
134
+ .action(async (agentArg, options) => {
135
+ const flags = resolveCommandFlags(program);
136
+ const resources = createExecutionResources(container, flags, "skill");
137
+ if (options.local && options.global) {
138
+ resources.logger.error("Use either --local or --global, not both.");
139
+ return;
140
+ }
141
+ let agent = options.agent ?? agentArg;
142
+ if (!agent) {
143
+ const selected = await select({
144
+ message: "Select agent to unconfigure:",
145
+ options: supportedAgents.map((a) => ({ value: a, label: a }))
146
+ });
147
+ if (isCancel(selected)) {
148
+ cancel("Operation cancelled");
149
+ return;
150
+ }
151
+ agent = selected;
152
+ }
153
+ const support = resolveAgentSupport(agent);
154
+ if (support.status === "unknown") {
155
+ resources.logger.error(`Unknown agent: ${agent}`);
156
+ return;
157
+ }
158
+ if (support.status === "unsupported") {
159
+ resources.logger.error(`Skills not supported for ${support.id}.`);
160
+ return;
161
+ }
162
+ const resolvedAgent = support.id ?? agent;
163
+ const config = support.config;
164
+ let scope;
165
+ if (options.local) {
166
+ scope = "local";
167
+ }
168
+ else if (options.global) {
169
+ scope = "global";
170
+ }
171
+ else {
172
+ const selected = await select({
173
+ message: "Select scope:",
174
+ options: [
175
+ { value: "global", label: "Global" },
176
+ { value: "local", label: "Local" }
177
+ ]
178
+ });
179
+ if (isCancel(selected)) {
180
+ cancel("Operation cancelled");
181
+ return;
182
+ }
183
+ scope = selected;
184
+ }
185
+ const displayPath = scope === "global" ? config.globalSkillDir : config.localSkillDir;
186
+ resources.logger.intro(`skill unconfigure ${resolvedAgent}`);
187
+ let targetPath;
188
+ let removed = false;
189
+ await unconfigure(resolvedAgent, {
190
+ fs: container.fs,
191
+ homeDir: container.env.homeDir,
192
+ cwd: container.env.cwd,
193
+ scope,
194
+ force: Boolean(options.force),
195
+ dryRun: flags.dryRun,
196
+ observers: {
197
+ onStart: (details) => {
198
+ if (flags.dryRun) {
199
+ resources.logger.dryRun(`Would ${details.label.toLowerCase()}`);
200
+ }
201
+ },
202
+ onComplete: (details, outcome) => {
203
+ targetPath = details.targetPath;
204
+ removed = outcome.changed;
205
+ if (!flags.dryRun && outcome.changed) {
206
+ resources.logger.verbose(details.label);
207
+ }
208
+ }
209
+ }
210
+ });
211
+ if (flags.dryRun) {
212
+ resources.context.complete({
213
+ success: `Removed skill directory for ${resolvedAgent} at ${displayPath}`,
214
+ dry: `Would remove skill directory for ${resolvedAgent} at ${displayPath}`
215
+ });
216
+ resources.context.finalize();
217
+ return;
218
+ }
219
+ if (removed) {
220
+ resources.context.complete({
221
+ success: `Removed skill directory for ${resolvedAgent} at ${displayPath}`,
222
+ dry: `Would remove skill directory for ${resolvedAgent} at ${displayPath}`
223
+ });
224
+ resources.context.finalize();
225
+ return;
226
+ }
227
+ if (!options.force && targetPath) {
228
+ try {
229
+ const entries = await container.fs.readdir(targetPath);
230
+ if (entries.length > 0) {
231
+ resources.logger.warn(`Skill directory for ${resolvedAgent} at ${displayPath} has files. Use --force to remove.`);
232
+ return;
233
+ }
234
+ }
235
+ catch {
236
+ // Directory missing or unreadable.
237
+ }
238
+ }
239
+ resources.logger.info(`No skill directory found for ${resolvedAgent} at ${displayPath}.`);
240
+ });
241
+ }
242
+ //# sourceMappingURL=skill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill.js","sourceRoot":"","sources":["../../../src/cli/commands/skill.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { Command } from "commander";
2
+ import type { CliContainer } from "../container.js";
3
+ import { type CommandFlags, type ExecutionResources } from "./shared.js";
4
+ import type { SpawnCommandOptions } from "../../providers/spawn-options.js";
5
+ export interface CustomSpawnHandlerContext {
6
+ container: CliContainer;
7
+ service: string;
8
+ options: SpawnCommandOptions;
9
+ flags: CommandFlags;
10
+ resources: ExecutionResources;
11
+ }
12
+ export type CustomSpawnHandler = (context: CustomSpawnHandlerContext) => Promise<void>;
13
+ export interface RegisterSpawnCommandOptions {
14
+ handlers?: Record<string, CustomSpawnHandler>;
15
+ extraServices?: string[];
16
+ }
17
+ export declare function registerSpawnCommand(program: Command, container: CliContainer, options?: RegisterSpawnCommandOptions): void;
@@ -0,0 +1,226 @@
1
+ import path from "node:path";
2
+ import { renderAcpStream, spawnInteractive, getSpawnConfig } from "@poe-code/agent-spawn";
3
+ import { allAgents, resolveAgentId } from "@poe-code/agent-defs";
4
+ import { text } from "@poe-code/design-system";
5
+ import { createExecutionResources, resolveCommandFlags, resolveServiceAdapter, formatServiceList } from "./shared.js";
6
+ import { spawnCore } from "../../sdk/spawn-core.js";
7
+ import { spawn as spawnSdk } from "../../sdk/spawn.js";
8
+ export function registerSpawnCommand(program, container, options = {}) {
9
+ const spawnServices = container.registry
10
+ .list()
11
+ .filter((service) => typeof service.spawn === "function")
12
+ .map((service) => service.name);
13
+ const extraServices = options.extraServices ?? [];
14
+ const serviceList = [...spawnServices, ...extraServices];
15
+ const serviceDescription = `Agent to spawn${formatServiceList(serviceList)}`;
16
+ program
17
+ .command("spawn")
18
+ .description("Run a single prompt through a configured agent CLI.")
19
+ .option("--model <model>", "Model identifier override passed to the agent CLI")
20
+ .option("-C, --cwd <path>", "Working directory for the agent CLI")
21
+ .option("--stdin", "Read the prompt from stdin")
22
+ .option("-i, --interactive", "Launch the agent in interactive TUI mode")
23
+ .argument("<agent>", serviceDescription)
24
+ .argument("[prompt]", "Prompt text to send (or '-' / stdin)")
25
+ .argument("[agentArgs...]", "Additional arguments forwarded to the agent CLI")
26
+ .action(async function (service, promptText, agentArgs = []) {
27
+ const flags = resolveCommandFlags(program);
28
+ const commandOptions = this.opts();
29
+ const cwdOverride = resolveSpawnWorkingDirectory(container.env.cwd, commandOptions.cwd);
30
+ const wantsStdinFlag = commandOptions.stdin === true;
31
+ const shouldReadFromStdin = wantsStdinFlag ||
32
+ promptText === "-" ||
33
+ (!promptText && !process.stdin.isTTY);
34
+ const forwardedArgs = wantsStdinFlag
35
+ ? [...(promptText ? [promptText] : []), ...agentArgs]
36
+ : agentArgs;
37
+ if (wantsStdinFlag) {
38
+ promptText = undefined;
39
+ }
40
+ if (promptText === "-") {
41
+ promptText = undefined;
42
+ }
43
+ if (commandOptions.interactive) {
44
+ const adapter = resolveServiceAdapter(container, service);
45
+ const result = await spawnInteractive(adapter.name, {
46
+ prompt: promptText ?? "",
47
+ args: forwardedArgs,
48
+ model: commandOptions.model,
49
+ cwd: cwdOverride
50
+ });
51
+ process.exitCode = result.exitCode;
52
+ return;
53
+ }
54
+ if (!promptText && shouldReadFromStdin) {
55
+ const chunks = [];
56
+ for await (const chunk of process.stdin) {
57
+ chunks.push(chunk);
58
+ }
59
+ promptText = Buffer.concat(chunks).toString("utf8").trim();
60
+ }
61
+ if (!promptText) {
62
+ throw new Error("No prompt provided via argument or stdin");
63
+ }
64
+ const spawnOptions = {
65
+ prompt: promptText,
66
+ args: forwardedArgs,
67
+ model: commandOptions.model,
68
+ cwd: cwdOverride,
69
+ useStdin: shouldReadFromStdin
70
+ };
71
+ // Check for custom handlers first
72
+ const directHandler = options.handlers?.[service];
73
+ if (directHandler) {
74
+ const resources = createExecutionResources(container, flags, `spawn:${service}`);
75
+ resources.logger.intro(`spawn ${service}`);
76
+ await directHandler({
77
+ container,
78
+ service,
79
+ options: spawnOptions,
80
+ flags,
81
+ resources
82
+ });
83
+ resources.context.finalize();
84
+ return;
85
+ }
86
+ const adapter = resolveServiceAdapter(container, service);
87
+ const canonicalService = adapter.name;
88
+ const resources = createExecutionResources(container, flags, `spawn:${canonicalService}`);
89
+ resources.logger.intro(`spawn ${canonicalService}`);
90
+ const canonicalHandler = options.handlers?.[canonicalService];
91
+ if (canonicalHandler) {
92
+ try {
93
+ await canonicalHandler({
94
+ container,
95
+ service: canonicalService,
96
+ options: spawnOptions,
97
+ flags,
98
+ resources
99
+ });
100
+ return;
101
+ }
102
+ finally {
103
+ resources.context.finalize();
104
+ }
105
+ }
106
+ try {
107
+ if (flags.dryRun) {
108
+ // spawnCore already logs the dry run details.
109
+ await spawnCore(container, canonicalService, spawnOptions, {
110
+ dryRun: true,
111
+ verbose: flags.verbose
112
+ });
113
+ return;
114
+ }
115
+ const { events, result } = spawnSdk(canonicalService, {
116
+ prompt: spawnOptions.prompt,
117
+ args: spawnOptions.args,
118
+ model: spawnOptions.model,
119
+ cwd: spawnOptions.cwd
120
+ });
121
+ await renderAcpStream(events);
122
+ const final = await result;
123
+ if (final.exitCode !== 0) {
124
+ const detail = final.stderr.trim() || final.stdout.trim();
125
+ const suffix = detail ? `: ${detail}` : "";
126
+ throw new Error(`${adapter.label} spawn failed with exit code ${final.exitCode}${suffix}`);
127
+ }
128
+ const trimmedStdout = final.stdout.trim();
129
+ if (trimmedStdout) {
130
+ resources.logger.info(trimmedStdout);
131
+ }
132
+ else {
133
+ const trimmedStderr = final.stderr.trim();
134
+ if (trimmedStderr) {
135
+ resources.logger.info(trimmedStderr);
136
+ }
137
+ else {
138
+ resources.logger.info(`${adapter.label} spawn completed.`);
139
+ }
140
+ }
141
+ if (final.threadId) {
142
+ const spawnConfig = getSpawnConfig(canonicalService);
143
+ if (spawnConfig?.kind === "cli" && spawnConfig.resumeCommand) {
144
+ const resolvedId = resolveAgentId(canonicalService) ?? canonicalService;
145
+ const agentDefinition = allAgents.find((agent) => agent.id === resolvedId);
146
+ const binaryName = agentDefinition?.binaryName;
147
+ if (binaryName) {
148
+ const resumeCwd = path.resolve(spawnOptions.cwd ?? process.cwd());
149
+ const args = spawnConfig.resumeCommand(final.threadId, resumeCwd);
150
+ const agentCommand = [binaryName, ...args.map(shlexQuote)].join(" ");
151
+ const needsCdPrefix = !args.includes(resumeCwd);
152
+ const resumeCommand = needsCdPrefix
153
+ ? `cd ${shlexQuote(resumeCwd)} && ${agentCommand}`
154
+ : agentCommand;
155
+ resources.logger.info(text.muted(`\nResume: ${resumeCommand}`));
156
+ }
157
+ }
158
+ }
159
+ }
160
+ finally {
161
+ resources.context.finalize();
162
+ }
163
+ });
164
+ }
165
+ function shlexQuote(value) {
166
+ if (value.length === 0) {
167
+ return "''";
168
+ }
169
+ let isSafe = true;
170
+ for (let index = 0; index < value.length; index += 1) {
171
+ if (!isSafeShellChar(value.charCodeAt(index))) {
172
+ isSafe = false;
173
+ break;
174
+ }
175
+ }
176
+ if (isSafe) {
177
+ return value;
178
+ }
179
+ let output = "'";
180
+ for (let index = 0; index < value.length; index += 1) {
181
+ const char = value[index];
182
+ if (char === "'") {
183
+ output += `'"'"'`;
184
+ continue;
185
+ }
186
+ output += char;
187
+ }
188
+ output += "'";
189
+ return output;
190
+ }
191
+ function isSafeShellChar(code) {
192
+ if (code >= 48 && code <= 57) {
193
+ return true;
194
+ }
195
+ if (code >= 65 && code <= 90) {
196
+ return true;
197
+ }
198
+ if (code >= 97 && code <= 122) {
199
+ return true;
200
+ }
201
+ switch (code) {
202
+ case 95: // _
203
+ case 64: // @
204
+ case 37: // %
205
+ case 43: // +
206
+ case 61: // =
207
+ case 58: // :
208
+ case 44: // ,
209
+ case 46: // .
210
+ case 47: // /
211
+ case 45: // -
212
+ return true;
213
+ default:
214
+ return false;
215
+ }
216
+ }
217
+ function resolveSpawnWorkingDirectory(baseDir, candidate) {
218
+ if (!candidate || candidate.trim().length === 0) {
219
+ return undefined;
220
+ }
221
+ if (path.isAbsolute(candidate)) {
222
+ return candidate;
223
+ }
224
+ return path.resolve(baseDir, candidate);
225
+ }
226
+ //# sourceMappingURL=spawn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn.js","sourceRoot":"","sources":["../../../src/cli/commands/spawn.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { Command } from "commander";
2
+ import type { CliContainer } from "../container.js";
3
+ export declare function registerTestCommand(program: Command, container: CliContainer): Command;
4
+ export declare function executeTest(program: Command, container: CliContainer, service: string, options?: {
5
+ isolated?: boolean;
6
+ stdin?: boolean;
7
+ model?: string;
8
+ }): Promise<void>;
@@ -0,0 +1,124 @@
1
+ import { buildProviderContext, createExecutionResources, resolveCommandFlags, resolveServiceAdapter, formatServiceList } from "./shared.js";
2
+ import { resolveServiceArgument } from "./configure.js";
3
+ import { resolveIsolatedEnvDetails } from "../isolated-env.js";
4
+ import { formatCommandRunnerResult, stdoutMatchesExpected } from "../../utils/command-checks.js";
5
+ export function registerTestCommand(program, container) {
6
+ const serviceNames = container.registry
7
+ .list()
8
+ .filter((service) => typeof service.test === "function")
9
+ .map((service) => service.name);
10
+ const serviceDescription = `Agent to test${formatServiceList(serviceNames)}`;
11
+ return program
12
+ .command("test")
13
+ .description("Run agent health checks.")
14
+ .option("--stdin", "Verify stdin prompt support via spawn")
15
+ .option("--model <model>", "Model identifier override (requires --stdin)")
16
+ .argument("[agent]", serviceDescription)
17
+ .option("--isolated", "Run the health check using isolated configuration.")
18
+ .action(async function (service) {
19
+ const resolved = await resolveServiceArgument(program, container, service, { action: "test" });
20
+ const opts = this.opts();
21
+ await executeTest(this, container, resolved, {
22
+ isolated: Boolean(opts.isolated),
23
+ stdin: Boolean(opts.stdin),
24
+ model: opts.model
25
+ });
26
+ });
27
+ }
28
+ export async function executeTest(program, container, service, options = {}) {
29
+ const adapter = resolveServiceAdapter(container, service);
30
+ const canonicalService = adapter.name;
31
+ const flags = resolveCommandFlags(program);
32
+ const resources = createExecutionResources(container, flags, `test:${canonicalService}`);
33
+ resources.logger.intro(`test ${canonicalService}`);
34
+ const providerContext = buildProviderContext(container, adapter, resources);
35
+ if (options.model && !options.stdin) {
36
+ throw new Error("The --model option requires --stdin.");
37
+ }
38
+ const isolatedDetails = options.isolated && adapter.isolatedEnv
39
+ ? await resolveIsolatedEnvDetails(container.env, adapter.isolatedEnv, adapter.name, container.fs)
40
+ : null;
41
+ if (options.isolated && adapter.isolatedEnv) {
42
+ const { ensureIsolatedConfigForService } = await import("./ensure-isolated-config.js");
43
+ await ensureIsolatedConfigForService({
44
+ container,
45
+ adapter,
46
+ service: canonicalService,
47
+ flags
48
+ });
49
+ }
50
+ if (options.stdin) {
51
+ if (!adapter.supportsStdinPrompt) {
52
+ throw new Error(`${adapter.label} does not support stdin prompts.`);
53
+ }
54
+ if (flags.dryRun) {
55
+ resources.context.complete({
56
+ success: `Tested ${adapter.label}.`,
57
+ dry: `Dry run: would run a stdin spawn test for ${adapter.label}.`
58
+ });
59
+ return;
60
+ }
61
+ const expectedOutput = "STDIN_OK";
62
+ const prompt = `Output exactly: ${expectedOutput}`;
63
+ const result = (await container.registry.invoke(canonicalService, "spawn", async (entry) => {
64
+ if (!entry.spawn) {
65
+ throw new Error(`Agent "${canonicalService}" does not support spawn.`);
66
+ }
67
+ const output = await entry.spawn(providerContext, {
68
+ prompt,
69
+ useStdin: true,
70
+ model: options.model
71
+ });
72
+ return output;
73
+ }));
74
+ if (!result) {
75
+ throw new Error(`Stdin spawn test for ${adapter.label} did not return command output.`);
76
+ }
77
+ if (result.exitCode !== 0) {
78
+ throw new Error([
79
+ `Stdin spawn test for ${adapter.label} failed with exit code ${result.exitCode}.`,
80
+ formatCommandRunnerResult(result)
81
+ ].join("\n"));
82
+ }
83
+ if (!stdoutMatchesExpected(result.stdout, expectedOutput)) {
84
+ throw new Error([
85
+ `Stdin spawn test for ${adapter.label} failed: expected "${expectedOutput}" but received "${result.stdout.trim()}".`,
86
+ formatCommandRunnerResult(result)
87
+ ].join("\n"));
88
+ }
89
+ }
90
+ else {
91
+ await container.registry.invoke(canonicalService, "test", async (entry) => {
92
+ if (!entry.test) {
93
+ throw new Error(`Agent "${canonicalService}" does not support test.`);
94
+ }
95
+ const activeContext = isolatedDetails
96
+ ? {
97
+ ...providerContext,
98
+ runCheck: async (check) => {
99
+ await check.run({
100
+ isDryRun: providerContext.logger.context.dryRun,
101
+ runCommand: (command, args) => resources.context.runCommand("poe-code", [
102
+ "wrap",
103
+ canonicalService,
104
+ "--",
105
+ ...args
106
+ ]),
107
+ logDryRun: (message) => providerContext.logger.dryRun(message)
108
+ });
109
+ }
110
+ }
111
+ : providerContext;
112
+ await entry.test(activeContext);
113
+ });
114
+ }
115
+ const dryMessage = canonicalService === "claude-code"
116
+ ? `${adapter.label} test (dry run)`
117
+ : `Dry run: would test ${adapter.label}.`;
118
+ resources.context.complete({
119
+ success: `Tested ${adapter.label}.`,
120
+ dry: dryMessage
121
+ });
122
+ resources.context.finalize();
123
+ }
124
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../../src/cli/commands/test.ts"],"names":[],"mappings":"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"}