poe-code 3.0.131 → 3.0.133

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 (36) hide show
  1. package/README.md +33 -3
  2. package/dist/cli/commands/spawn.js +154 -150
  3. package/dist/cli/commands/spawn.js.map +1 -1
  4. package/dist/cli/poe-agent-main.js +10 -9
  5. package/dist/cli/poe-agent-main.js.map +1 -1
  6. package/dist/cli/program.js +0 -2
  7. package/dist/cli/program.js.map +1 -1
  8. package/dist/index.js +1113 -1087
  9. package/dist/index.js.map +4 -4
  10. package/dist/prompts/github-issue-opened.md +20 -1
  11. package/dist/providers/claude-code.js +29 -23
  12. package/dist/providers/claude-code.js.map +4 -4
  13. package/dist/providers/codex.js +29 -23
  14. package/dist/providers/codex.js.map +4 -4
  15. package/dist/providers/kimi.js +29 -23
  16. package/dist/providers/kimi.js.map +4 -4
  17. package/dist/providers/opencode.js +29 -23
  18. package/dist/providers/opencode.js.map +4 -4
  19. package/dist/sdk/launch.js +17 -1
  20. package/dist/sdk/launch.js.map +1 -1
  21. package/dist/sdk/spawn-core.d.ts +1 -1
  22. package/dist/sdk/spawn-core.js +54 -57
  23. package/dist/sdk/spawn-core.js.map +1 -1
  24. package/dist/sdk/spawn.js +31 -12
  25. package/dist/sdk/spawn.js.map +1 -1
  26. package/dist/sdk/types.d.ts +3 -3
  27. package/dist/workspace/resolve-spawn-workspace.d.ts +15 -0
  28. package/dist/workspace/resolve-spawn-workspace.js +28 -0
  29. package/dist/workspace/resolve-spawn-workspace.js.map +1 -0
  30. package/package.json +2 -1
  31. package/dist/cli/commands/research.d.ts +0 -13
  32. package/dist/cli/commands/research.js +0 -158
  33. package/dist/cli/commands/research.js.map +0 -1
  34. package/dist/sdk/research.d.ts +0 -62
  35. package/dist/sdk/research.js +0 -343
  36. package/dist/sdk/research.js.map +0 -1
@@ -1,158 +0,0 @@
1
- import { renderAcpStream, getSpawnConfig } from "@poe-code/agent-spawn";
2
- import { loadConfiguredServices } from "../../services/config.js";
3
- import { research } from "../../sdk/research.js";
4
- import { OperationCancelledError } from "../errors.js";
5
- import { buildResumeCommand, createExecutionResources, formatServiceList, resolveCommandFlags, resolveServiceAdapter } from "./shared.js";
6
- export function registerResearchCommand(program, container) {
7
- const spawnServices = container.registry
8
- .list()
9
- .filter((service) => typeof service.spawn === "function" || getSpawnConfig(service.name))
10
- .map((service) => service.name);
11
- const serviceDescription = `Agent to research with${formatServiceList(spawnServices)}`;
12
- program
13
- .command("research")
14
- .description("Research a codebase using a coding agent.")
15
- .option("--agent <agent>", serviceDescription)
16
- .option("--model <model>", "Model identifier override passed to the agent CLI")
17
- .option("--mode <mode>", "Permission mode: yolo | edit | read (default: read)")
18
- .option("-C, --cwd <path>", "Working directory override")
19
- .option("--path <path>", "Local directory to research")
20
- .option("--github <repo>", "Clone and research a GitHub repo")
21
- .option("--stdin", "Read the prompt from stdin")
22
- .option("--keep", "Keep the cloned repo when using --github")
23
- .argument("[prompt]", "Prompt text to send (or '-' / stdin)")
24
- .argument("[agentArgs...]", "Additional arguments forwarded to the agent CLI")
25
- .action(async function (promptText, agentArgs = []) {
26
- const flags = resolveCommandFlags(program);
27
- const commandOptions = this.opts();
28
- const wantsStdinFlag = commandOptions.stdin === true;
29
- const shouldReadFromStdin = wantsStdinFlag || promptText === "-" || (!promptText && !process.stdin.isTTY);
30
- const forwardedArgs = wantsStdinFlag
31
- ? [...(promptText ? [promptText] : []), ...agentArgs]
32
- : agentArgs;
33
- if (wantsStdinFlag) {
34
- promptText = undefined;
35
- }
36
- if (promptText === "-") {
37
- promptText = undefined;
38
- }
39
- if (!promptText && shouldReadFromStdin) {
40
- const chunks = [];
41
- for await (const chunk of process.stdin) {
42
- chunks.push(chunk);
43
- }
44
- promptText = Buffer.concat(chunks).toString("utf8").trim();
45
- }
46
- if (!promptText) {
47
- throw new Error("No prompt provided via argument or stdin");
48
- }
49
- const resolvedAgent = await resolveResearchAgent({
50
- container,
51
- flags,
52
- agent: commandOptions.agent
53
- });
54
- const adapter = resolveServiceAdapter(container, resolvedAgent);
55
- const canonicalService = adapter.name;
56
- const resources = createExecutionResources(container, flags, `research:${canonicalService}`);
57
- resources.logger.intro(`research ${canonicalService}`);
58
- const model = await resolveResearchModel({
59
- container,
60
- flags,
61
- adapter,
62
- value: commandOptions.model
63
- });
64
- try {
65
- const { events, result } = await research(container, {
66
- prompt: promptText,
67
- agent: canonicalService,
68
- agentLabel: adapter.label,
69
- model,
70
- mode: commandOptions.mode,
71
- args: forwardedArgs,
72
- cwd: commandOptions.cwd,
73
- path: commandOptions.path,
74
- github: commandOptions.github,
75
- keep: commandOptions.keep,
76
- logger: resources.logger,
77
- resolveResumeCommand: (threadId, cwdValue) => buildResumeCommand(canonicalService, threadId, cwdValue)
78
- });
79
- await renderAcpStream(events);
80
- await result;
81
- }
82
- finally {
83
- resources.context.finalize();
84
- }
85
- });
86
- }
87
- async function resolveResearchAgent(input) {
88
- if (input.agent) {
89
- return input.agent;
90
- }
91
- const spawnable = input.container.registry
92
- .list()
93
- .filter((service) => typeof service.spawn === "function" || getSpawnConfig(service.name));
94
- if (spawnable.length === 0) {
95
- throw new Error("No spawn-capable agents available.");
96
- }
97
- if (input.flags.assumeYes) {
98
- const configured = await loadConfiguredServices({
99
- fs: input.container.fs,
100
- filePath: input.container.env.configPath,
101
- projectFilePath: input.container.env.projectConfigPath
102
- });
103
- const configuredService = spawnable.find((service) => service.name in configured);
104
- return configuredService?.name ?? spawnable[0].name;
105
- }
106
- const choices = spawnable.map((service) => ({
107
- title: service.label,
108
- value: service.name
109
- }));
110
- const descriptor = input.container.promptLibrary.serviceSelection({
111
- message: "Pick an agent to research with:",
112
- choices
113
- });
114
- const response = await input.container.prompts(descriptor);
115
- const selectionValue = response[descriptor.name];
116
- if (typeof selectionValue !== "string") {
117
- throw new OperationCancelledError();
118
- }
119
- const resolved = spawnable.find((service) => service.name === selectionValue);
120
- if (!resolved) {
121
- throw new Error("Invalid agent selection.");
122
- }
123
- return resolved.name;
124
- }
125
- async function resolveResearchModel(input) {
126
- if (input.value) {
127
- return input.value;
128
- }
129
- const modelPrompt = input.adapter.configurePrompts?.model;
130
- if (modelPrompt) {
131
- return await input.container.options.resolveModel({
132
- value: input.value,
133
- assumeDefault: input.flags.assumeYes,
134
- defaultValue: modelPrompt.defaultValue,
135
- choices: modelPrompt.choices,
136
- label: modelPrompt.label
137
- });
138
- }
139
- if (input.flags.assumeYes) {
140
- return undefined;
141
- }
142
- const descriptor = {
143
- name: "model",
144
- message: "Model identifier",
145
- type: "text"
146
- };
147
- const response = await input.container.prompts(descriptor);
148
- const result = response[descriptor.name];
149
- if (typeof result !== "string") {
150
- throw new OperationCancelledError();
151
- }
152
- const trimmed = result.trim();
153
- if (trimmed.length === 0) {
154
- throw new Error("Model identifier is required.");
155
- }
156
- return trimmed;
157
- }
158
- //# sourceMappingURL=research.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"research.js","sourceRoot":"","sources":["../../../src/cli/commands/research.ts"],"names":[],"mappings":"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"}
@@ -1,62 +0,0 @@
1
- import type { CliContainer } from "../cli/container.js";
2
- import type { AcpEvent, SpawnMode } from "@poe-code/agent-spawn";
3
- import type { SpawnResult } from "./types.js";
4
- export interface ResearchLogger {
5
- info?: (message: string) => void;
6
- warn?: (message: string) => void;
7
- }
8
- export interface ResearchOptions {
9
- prompt: string;
10
- agent: string;
11
- agentLabel?: string;
12
- model?: string;
13
- mode?: SpawnMode;
14
- args?: string[];
15
- cwd?: string;
16
- path?: string;
17
- github?: string;
18
- keep?: boolean;
19
- logger?: ResearchLogger;
20
- resolveResumeCommand?: (threadId: string, cwd: string) => string | undefined;
21
- }
22
- export interface ResearchResult extends SpawnResult {
23
- markdownOutput: string;
24
- outputPath: string;
25
- cwd: string;
26
- github?: string;
27
- }
28
- interface ResolvedSource {
29
- cwd: string;
30
- github?: string;
31
- clonePath?: string;
32
- shouldCleanup: boolean;
33
- }
34
- export declare function research(container: CliContainer, options: ResearchOptions): Promise<{
35
- events: AsyncIterable<AcpEvent>;
36
- result: Promise<ResearchResult>;
37
- }>;
38
- export declare function buildSlug(value: string): string;
39
- export declare function buildResearchPrompt(prompt: string): string;
40
- export declare function buildResearchDocument(input: {
41
- prompt: string;
42
- agent: string;
43
- path: string;
44
- github?: string;
45
- resumeCommand?: string;
46
- markdown: string;
47
- }): string;
48
- export declare function buildClonePath(homeDir: string, github: string): string;
49
- export declare function extractRepoSlug(value: string): string;
50
- export declare function buildOutputPath(homeDir: string, prompt: string, now?: Date): string;
51
- export declare function resolveGithubCloneUrl(value: string): string;
52
- export declare function resolveSource(input: {
53
- container: CliContainer;
54
- options: {
55
- cwd?: string;
56
- path?: string;
57
- github?: string;
58
- keep?: boolean;
59
- };
60
- logger?: ResearchLogger;
61
- }): Promise<ResolvedSource>;
62
- export {};
@@ -1,343 +0,0 @@
1
- import path from "node:path";
2
- import { spawn as spawnSdk } from "./spawn.js";
3
- const RESEARCH_SYSTEM_PROMPT = [
4
- "You are a codebase research assistant.",
5
- "Read files and answer the user's question about the codebase.",
6
- "Do not modify files or suggest edits.",
7
- "Respond in Markdown."
8
- ].join("\n");
9
- export async function research(container, options) {
10
- const logger = options.logger;
11
- const source = await resolveSource({
12
- container,
13
- options,
14
- logger
15
- });
16
- const researchPrompt = buildResearchPrompt(options.prompt);
17
- const mode = options.mode ?? "read";
18
- const { events, result } = spawnSdk(options.agent, {
19
- prompt: researchPrompt,
20
- args: options.args ?? [],
21
- model: options.model,
22
- mode,
23
- cwd: source.cwd
24
- });
25
- const { teed, getOutput, done } = teeAcpStream(events);
26
- const resultPromise = (async () => {
27
- let outputPath;
28
- let markdownOutput = "";
29
- try {
30
- const final = await result;
31
- await done;
32
- markdownOutput = getOutput();
33
- const resumeCommand = final.threadId && options.resolveResumeCommand
34
- ? options.resolveResumeCommand(final.threadId, source.cwd)
35
- : undefined;
36
- const document = buildResearchDocument({
37
- prompt: options.prompt,
38
- agent: options.agent,
39
- path: source.cwd,
40
- github: source.github,
41
- resumeCommand,
42
- markdown: markdownOutput
43
- });
44
- outputPath = buildOutputPath(container.env.homeDir, options.prompt);
45
- await ensureDirectory(container.fs, path.dirname(outputPath));
46
- await container.fs.writeFile(outputPath, document, {
47
- encoding: "utf8"
48
- });
49
- if (final.exitCode !== 0) {
50
- const detail = final.stderr.trim() || final.stdout.trim();
51
- const suffix = detail ? `: ${detail}` : "";
52
- const label = options.agentLabel ?? options.agent;
53
- throw new Error(`${label} research failed with exit code ${final.exitCode}${suffix}`);
54
- }
55
- if (outputPath) {
56
- logger?.info?.(`Saved research to ${outputPath}`);
57
- }
58
- return {
59
- ...final,
60
- markdownOutput,
61
- outputPath,
62
- cwd: source.cwd,
63
- github: source.github
64
- };
65
- }
66
- finally {
67
- if (source.shouldCleanup && source.clonePath) {
68
- await removePath(container.fs, source.clonePath);
69
- }
70
- }
71
- })();
72
- return { events: teed, result: resultPromise };
73
- }
74
- export function buildSlug(value) {
75
- const trimmed = value.trim().toLowerCase();
76
- const maxLength = 48;
77
- let output = "";
78
- let pendingSeparator = false;
79
- for (let index = 0; index < trimmed.length; index += 1) {
80
- const char = trimmed[index] ?? "";
81
- const code = char.charCodeAt(0);
82
- if (isSlugChar(code)) {
83
- if (pendingSeparator && output.length > 0) {
84
- output += "-";
85
- }
86
- pendingSeparator = false;
87
- output += char;
88
- }
89
- else {
90
- pendingSeparator = true;
91
- }
92
- if (output.length >= maxLength) {
93
- break;
94
- }
95
- }
96
- output = trimTrailingDashes(output.slice(0, maxLength));
97
- return output.length > 0 ? output : "research";
98
- }
99
- export function buildResearchPrompt(prompt) {
100
- return `${RESEARCH_SYSTEM_PROMPT}\n\n${prompt}`;
101
- }
102
- export function buildResearchDocument(input) {
103
- const lines = ["---"];
104
- lines.push(`research_prompt: ${formatYamlString(input.prompt)}`);
105
- lines.push(`agent: ${formatYamlString(input.agent)}`);
106
- lines.push(`path: ${formatYamlString(input.path)}`);
107
- if (input.github) {
108
- lines.push(`github: ${formatYamlString(input.github)}`);
109
- }
110
- if (input.resumeCommand) {
111
- lines.push(`resume_session_cmd: ${formatYamlString(input.resumeCommand)}`);
112
- }
113
- lines.push("---", "", input.markdown);
114
- return lines.join("\n");
115
- }
116
- export function buildClonePath(homeDir, github) {
117
- const slug = extractRepoSlug(github);
118
- return path.join(homeDir, ".poe-code", "repos", slug);
119
- }
120
- export function extractRepoSlug(value) {
121
- const trimmed = value.trim();
122
- if (trimmed.length === 0) {
123
- return "repo";
124
- }
125
- let pathPart = trimmed;
126
- const schemeIndex = trimmed.indexOf("://");
127
- if (schemeIndex !== -1) {
128
- try {
129
- const url = new URL(trimmed);
130
- pathPart = url.pathname;
131
- }
132
- catch {
133
- pathPart = trimmed.slice(schemeIndex + 3);
134
- }
135
- }
136
- else if (trimmed.startsWith("git@")) {
137
- const colonIndex = trimmed.indexOf(":");
138
- if (colonIndex !== -1) {
139
- pathPart = trimmed.slice(colonIndex + 1);
140
- }
141
- }
142
- if (pathPart.startsWith("/")) {
143
- pathPart = pathPart.slice(1);
144
- }
145
- if (pathPart.endsWith(".git")) {
146
- pathPart = pathPart.slice(0, -4);
147
- }
148
- const parts = pathPart.split("/");
149
- const owner = parts[0] ?? "";
150
- const repo = parts[1] ?? "";
151
- const combined = repo.length > 0 ? `${owner}-${repo}` : owner;
152
- const slug = buildSlug(combined);
153
- return slug.length > 0 ? slug : buildSlug(trimmed);
154
- }
155
- export function buildOutputPath(homeDir, prompt, now = new Date()) {
156
- const timestamp = formatTimestamp(now);
157
- const slug = buildSlug(prompt);
158
- return path.join(homeDir, ".poe-code", "research", `${timestamp}-${slug}.md`);
159
- }
160
- export function resolveGithubCloneUrl(value) {
161
- const trimmed = value.trim();
162
- if (trimmed.startsWith("git@") || trimmed.includes("://")) {
163
- return trimmed;
164
- }
165
- const suffix = trimmed.endsWith(".git") ? trimmed : `${trimmed}.git`;
166
- return `https://github.com/${suffix}`;
167
- }
168
- export async function resolveSource(input) {
169
- const { container, options } = input;
170
- const logger = input.logger;
171
- if (options.github) {
172
- const cloneUrl = resolveGithubCloneUrl(options.github);
173
- const clonePath = buildClonePath(container.env.homeDir, options.github);
174
- await ensureDirectory(container.fs, path.dirname(clonePath));
175
- const exists = await pathExists(container.fs, clonePath);
176
- if (!exists) {
177
- const cloneResult = await container.commandRunner("git", ["clone", "--depth", "1", cloneUrl, clonePath]);
178
- if (cloneResult.exitCode !== 0) {
179
- throw new Error(`git clone failed with exit code ${cloneResult.exitCode}: ${cloneResult.stderr.trim()}`);
180
- }
181
- return {
182
- cwd: clonePath,
183
- github: options.github,
184
- clonePath,
185
- shouldCleanup: !options.keep
186
- };
187
- }
188
- const statusResult = await container.commandRunner("git", ["status", "--porcelain"], { cwd: clonePath });
189
- if (statusResult.exitCode !== 0) {
190
- logger?.warn?.("Unable to check git status; using existing clone.");
191
- }
192
- else if (statusResult.stdout.trim().length > 0) {
193
- logger?.warn?.("Repo has uncommitted changes; skipping update.");
194
- }
195
- else {
196
- const pullResult = await container.commandRunner("git", ["pull", "--ff-only"], { cwd: clonePath });
197
- if (pullResult.exitCode !== 0) {
198
- logger?.warn?.("Git pull failed; using existing clone.");
199
- }
200
- }
201
- return {
202
- cwd: clonePath,
203
- github: options.github,
204
- clonePath,
205
- shouldCleanup: false
206
- };
207
- }
208
- if (options.path) {
209
- return {
210
- cwd: resolvePath(container.env.cwd, options.path),
211
- shouldCleanup: false
212
- };
213
- }
214
- if (options.cwd) {
215
- return {
216
- cwd: resolvePath(container.env.cwd, options.cwd),
217
- shouldCleanup: false
218
- };
219
- }
220
- return {
221
- cwd: container.env.cwd,
222
- shouldCleanup: false
223
- };
224
- }
225
- function isSlugChar(code) {
226
- if (code >= 48 && code <= 57) {
227
- return true;
228
- }
229
- if (code >= 97 && code <= 122) {
230
- return true;
231
- }
232
- return false;
233
- }
234
- function trimTrailingDashes(value) {
235
- let output = value;
236
- while (output.endsWith("-")) {
237
- output = output.slice(0, -1);
238
- }
239
- return output;
240
- }
241
- function formatTimestamp(now) {
242
- const year = now.getUTCFullYear();
243
- const month = padNumber(now.getUTCMonth() + 1, 2);
244
- const day = padNumber(now.getUTCDate(), 2);
245
- const hours = padNumber(now.getUTCHours(), 2);
246
- const minutes = padNumber(now.getUTCMinutes(), 2);
247
- const seconds = padNumber(now.getUTCSeconds(), 2);
248
- return `${year}${month}${day}-${hours}${minutes}${seconds}`;
249
- }
250
- function padNumber(value, length) {
251
- let output = String(value);
252
- while (output.length < length) {
253
- output = `0${output}`;
254
- }
255
- return output;
256
- }
257
- function formatYamlString(value) {
258
- return JSON.stringify(value);
259
- }
260
- function resolvePath(baseDir, candidate) {
261
- if (path.isAbsolute(candidate)) {
262
- return candidate;
263
- }
264
- return path.resolve(baseDir, candidate);
265
- }
266
- function teeAcpStream(events) {
267
- const chunks = [];
268
- let resolveDone;
269
- const done = new Promise((resolve) => {
270
- resolveDone = resolve;
271
- });
272
- const teed = (async function* () {
273
- try {
274
- for await (const event of events) {
275
- if (event.event === "agent_message") {
276
- chunks.push(event.text);
277
- }
278
- yield event;
279
- }
280
- }
281
- finally {
282
- resolveDone?.();
283
- }
284
- })();
285
- return {
286
- teed,
287
- getOutput: () => chunks.join(""),
288
- done
289
- };
290
- }
291
- async function ensureDirectory(fs, target) {
292
- await fs.mkdir(target, { recursive: true });
293
- }
294
- async function pathExists(fs, target) {
295
- try {
296
- await fs.stat(target);
297
- return true;
298
- }
299
- catch (error) {
300
- if (error &&
301
- typeof error === "object" &&
302
- "code" in error &&
303
- error.code === "ENOENT") {
304
- return false;
305
- }
306
- throw error;
307
- }
308
- }
309
- async function removePath(fs, target) {
310
- if (typeof fs.rm === "function") {
311
- await fs.rm(target, { recursive: true, force: true });
312
- return;
313
- }
314
- await removePathFallback(fs, target);
315
- }
316
- async function removePathFallback(fs, target) {
317
- let stats;
318
- try {
319
- stats = await fs.stat(target);
320
- }
321
- catch (error) {
322
- if (error &&
323
- typeof error === "object" &&
324
- "code" in error &&
325
- error.code === "ENOENT") {
326
- return;
327
- }
328
- throw error;
329
- }
330
- if (stats && typeof stats.isDirectory === "function" && stats.isDirectory()) {
331
- const entries = await fs.readdir(target);
332
- for (const entry of entries) {
333
- await removePathFallback(fs, path.join(target, entry));
334
- }
335
- }
336
- try {
337
- await fs.unlink(target);
338
- }
339
- catch {
340
- // Ignore errors if unlink fails on directories in fallback.
341
- }
342
- }
343
- //# sourceMappingURL=research.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"research.js","sourceRoot":"","sources":["../../src/sdk/research.ts"],"names":[],"mappings":"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"}