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.
- package/README.md +33 -3
- package/dist/cli/commands/spawn.js +154 -150
- package/dist/cli/commands/spawn.js.map +1 -1
- package/dist/cli/poe-agent-main.js +10 -9
- package/dist/cli/poe-agent-main.js.map +1 -1
- package/dist/cli/program.js +0 -2
- package/dist/cli/program.js.map +1 -1
- package/dist/index.js +1113 -1087
- package/dist/index.js.map +4 -4
- package/dist/prompts/github-issue-opened.md +20 -1
- package/dist/providers/claude-code.js +29 -23
- package/dist/providers/claude-code.js.map +4 -4
- package/dist/providers/codex.js +29 -23
- package/dist/providers/codex.js.map +4 -4
- package/dist/providers/kimi.js +29 -23
- package/dist/providers/kimi.js.map +4 -4
- package/dist/providers/opencode.js +29 -23
- package/dist/providers/opencode.js.map +4 -4
- package/dist/sdk/launch.js +17 -1
- package/dist/sdk/launch.js.map +1 -1
- package/dist/sdk/spawn-core.d.ts +1 -1
- package/dist/sdk/spawn-core.js +54 -57
- package/dist/sdk/spawn-core.js.map +1 -1
- package/dist/sdk/spawn.js +31 -12
- package/dist/sdk/spawn.js.map +1 -1
- package/dist/sdk/types.d.ts +3 -3
- package/dist/workspace/resolve-spawn-workspace.d.ts +15 -0
- package/dist/workspace/resolve-spawn-workspace.js +28 -0
- package/dist/workspace/resolve-spawn-workspace.js.map +1 -0
- package/package.json +2 -1
- package/dist/cli/commands/research.d.ts +0 -13
- package/dist/cli/commands/research.js +0 -158
- package/dist/cli/commands/research.js.map +0 -1
- package/dist/sdk/research.d.ts +0 -62
- package/dist/sdk/research.js +0 -343
- 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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"}
|
package/dist/sdk/research.d.ts
DELETED
|
@@ -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 {};
|
package/dist/sdk/research.js
DELETED
|
@@ -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
|
package/dist/sdk/research.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"research.js","sourceRoot":"","sources":["../../src/sdk/research.ts"],"names":[],"mappings":"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"}
|