poe-code 3.0.130 → 3.0.132
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 +15 -1
- package/dist/cli/commands/spawn.js +175 -130
- 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/codegen/agent-spawn-py-types.d.ts +19 -0
- package/dist/codegen/agent-spawn-py-types.js +330 -0
- package/dist/codegen/agent-spawn-py-types.js.map +1 -0
- package/dist/index.js +10217 -9564
- package/dist/index.js.map +4 -4
- package/dist/providers/claude-code.js +67 -33
- package/dist/providers/claude-code.js.map +4 -4
- package/dist/providers/codex.js +67 -33
- package/dist/providers/codex.js.map +4 -4
- package/dist/providers/create-provider.js +3 -3
- package/dist/providers/create-provider.js.map +1 -1
- package/dist/providers/kimi.js +76 -33
- package/dist/providers/kimi.js.map +4 -4
- package/dist/providers/opencode.js +67 -33
- package/dist/providers/opencode.js.map +4 -4
- package/dist/providers/poe-agent.js +13 -10
- package/dist/providers/poe-agent.js.map +3 -3
- package/dist/providers/spawn-options.d.ts +2 -0
- package/dist/sdk/experiment.js +23 -10
- package/dist/sdk/experiment.js.map +1 -1
- package/dist/sdk/launch.js +17 -1
- package/dist/sdk/launch.js.map +1 -1
- package/dist/sdk/pipeline.js +25 -11
- package/dist/sdk/pipeline.js.map +1 -1
- package/dist/sdk/ralph.js +23 -10
- package/dist/sdk/ralph.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 +95 -12
- package/dist/sdk/spawn.js.map +1 -1
- package/dist/sdk/types.d.ts +9 -1
- 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 +21 -3
- 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
package/dist/sdk/experiment.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import * as fsPromises from "node:fs/promises";
|
|
3
3
|
import { ExperimentJournal, runExperimentLoop as runWorkspaceExperimentLoop } from "@poe-code/experiment-loop";
|
|
4
|
-
import { renderAcpStream } from "@poe-code/agent-spawn";
|
|
4
|
+
import { renderAcpStream, isActivityTimeoutError } from "@poe-code/agent-spawn";
|
|
5
5
|
import { spawn as sdkSpawn } from "./spawn.js";
|
|
6
6
|
function createDefaultFs() {
|
|
7
7
|
return {
|
|
@@ -34,19 +34,32 @@ function resolveAbsoluteDocPath(docPath, cwd, homeDir) {
|
|
|
34
34
|
function resolveJournalPath(docPath) {
|
|
35
35
|
return path.join(path.dirname(docPath), `${path.basename(docPath, path.extname(docPath))}.journal.jsonl`);
|
|
36
36
|
}
|
|
37
|
+
const AUTONOMOUS_ACTIVITY_TIMEOUT_MS = 10 * 60 * 1000; // 10 minutes
|
|
38
|
+
const MAX_TIMEOUT_RETRIES = 3;
|
|
37
39
|
export async function runExperiment(options) {
|
|
38
40
|
return runWorkspaceExperimentLoop({
|
|
39
41
|
...options,
|
|
40
42
|
runAgent: async (input) => {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
43
|
+
for (let attempt = 1; attempt <= MAX_TIMEOUT_RETRIES; attempt++) {
|
|
44
|
+
try {
|
|
45
|
+
const { events, result } = sdkSpawn(input.agent, {
|
|
46
|
+
prompt: input.prompt,
|
|
47
|
+
cwd: input.cwd,
|
|
48
|
+
model: input.model,
|
|
49
|
+
mode: "yolo",
|
|
50
|
+
activityTimeoutMs: AUTONOMOUS_ACTIVITY_TIMEOUT_MS,
|
|
51
|
+
...(input.signal ? { signal: input.signal } : {})
|
|
52
|
+
});
|
|
53
|
+
await renderAcpStream(events);
|
|
54
|
+
return await result;
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
if (!isActivityTimeoutError(error) || attempt === MAX_TIMEOUT_RETRIES) {
|
|
58
|
+
throw error;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
throw new Error("Unreachable");
|
|
50
63
|
}
|
|
51
64
|
});
|
|
52
65
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"experiment.js","sourceRoot":"","sources":["../../src/sdk/experiment.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EACL,iBAAiB,EACjB,iBAAiB,IAAI,0BAA0B,EAKhD,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"experiment.js","sourceRoot":"","sources":["../../src/sdk/experiment.ts"],"names":[],"mappings":"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"}
|
package/dist/sdk/launch.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { spawnSync } from "node:child_process";
|
|
3
|
+
import { parseLocator } from "@poe-code/workspace-resolver";
|
|
3
4
|
import { followManagedLogs, listManagedProcesses, readManagedLogs, removeManagedProcess, restartManagedProcess, runManagedProcess, startManagedProcess, stopManagedProcess } from "@poe-code/process-launcher";
|
|
4
5
|
import { createHostRunner, detectEngine } from "@poe-code/process-runner";
|
|
5
6
|
import { getCurrentExecutionContext } from "../utils/execution-context.js";
|
|
@@ -9,9 +10,10 @@ export async function startLaunch(options) {
|
|
|
9
10
|
const variables = options.variables ?? process.env;
|
|
10
11
|
const executionContext = getCurrentExecutionContext(import.meta.url);
|
|
11
12
|
const runner = createHostRunner({ detached: true });
|
|
13
|
+
const spec = normalizeLaunchSpec(options.spec, cwd);
|
|
12
14
|
return await startManagedProcess({
|
|
13
15
|
baseDir: resolveLaunchBaseDir(homeDir),
|
|
14
|
-
spec
|
|
16
|
+
spec,
|
|
15
17
|
spawnDaemon: async (id) => {
|
|
16
18
|
const handle = runner.exec({
|
|
17
19
|
args: [...executionContext.command.args, "launch", "__run", id],
|
|
@@ -114,6 +116,20 @@ function resolveHomeDir(homeDir) {
|
|
|
114
116
|
}
|
|
115
117
|
return process.env.HOME ?? process.cwd();
|
|
116
118
|
}
|
|
119
|
+
function normalizeLaunchSpec(spec, baseDir) {
|
|
120
|
+
if (!spec.cwd) {
|
|
121
|
+
return spec;
|
|
122
|
+
}
|
|
123
|
+
const locator = parseLocator(spec.cwd);
|
|
124
|
+
if (locator.scheme !== "local") {
|
|
125
|
+
return spec;
|
|
126
|
+
}
|
|
127
|
+
const cwd = path.isAbsolute(locator.path) ? locator.path : path.resolve(baseDir, locator.path);
|
|
128
|
+
return {
|
|
129
|
+
...spec,
|
|
130
|
+
cwd
|
|
131
|
+
};
|
|
132
|
+
}
|
|
117
133
|
function sendSignalToManagedProcess(pid, signal) {
|
|
118
134
|
if (process.platform === "win32") {
|
|
119
135
|
process.kill(pid, signal);
|
package/dist/sdk/launch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launch.js","sourceRoot":"","sources":["../../src/sdk/launch.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAInB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAe,MAAM,0BAA0B,CAAC;AACvF,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAgD3E,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAA2B;IAC3D,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC;IACnD,MAAM,gBAAgB,GAAG,0BAA0B,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAEpD,OAAO,MAAM,mBAAmB,CAAC;QAC/B,OAAO,EAAE,oBAAoB,CAAC,OAAO,CAAC;QACtC,IAAI
|
|
1
|
+
{"version":3,"file":"launch.js","sourceRoot":"","sources":["../../src/sdk/launch.ts"],"names":[],"mappings":"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"}
|
package/dist/sdk/pipeline.js
CHANGED
|
@@ -1,21 +1,35 @@
|
|
|
1
1
|
import { runPipeline as runWorkspacePipeline } from "@poe-code/pipeline";
|
|
2
|
-
import { renderAcpStream } from "@poe-code/agent-spawn";
|
|
2
|
+
import { renderAcpStream, isActivityTimeoutError } from "@poe-code/agent-spawn";
|
|
3
3
|
import { spawn as sdkSpawn } from "./spawn.js";
|
|
4
4
|
export { resolvePlanDirectory } from "@poe-code/pipeline";
|
|
5
|
+
const AUTONOMOUS_ACTIVITY_TIMEOUT_MS = 10 * 60 * 1000; // 10 minutes
|
|
6
|
+
const MAX_TIMEOUT_RETRIES = 3;
|
|
5
7
|
export async function runPipeline(options) {
|
|
6
8
|
return runWorkspacePipeline({
|
|
7
9
|
...options,
|
|
8
10
|
runAgent: async (input) => {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
11
|
+
for (let attempt = 1; attempt <= MAX_TIMEOUT_RETRIES; attempt++) {
|
|
12
|
+
try {
|
|
13
|
+
const { events, result } = sdkSpawn(input.agent, {
|
|
14
|
+
prompt: input.prompt,
|
|
15
|
+
cwd: input.cwd,
|
|
16
|
+
logDir: input.logDir,
|
|
17
|
+
model: input.model,
|
|
18
|
+
mode: input.mode,
|
|
19
|
+
activityTimeoutMs: AUTONOMOUS_ACTIVITY_TIMEOUT_MS,
|
|
20
|
+
...(input.mcpServers ? { mcpServers: input.mcpServers } : {}),
|
|
21
|
+
...(input.signal ? { signal: input.signal } : {})
|
|
22
|
+
});
|
|
23
|
+
await renderAcpStream(events);
|
|
24
|
+
return await result;
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
if (!isActivityTimeoutError(error) || attempt === MAX_TIMEOUT_RETRIES) {
|
|
28
|
+
throw error;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
throw new Error("Unreachable");
|
|
19
33
|
}
|
|
20
34
|
});
|
|
21
35
|
}
|
package/dist/sdk/pipeline.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/sdk/pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,IAAI,oBAAoB,EAGpC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/sdk/pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,IAAI,oBAAoB,EAGpC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAAE,KAAK,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AAkB/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAG1D,MAAM,8BAA8B,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa;AACpE,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAE9B,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAA2B;IAE3B,OAAO,oBAAoB,CAAC;QAC1B,GAAG,OAAO;QACV,QAAQ,EAAE,KAAK,EAAE,KAAiE,EAAE,EAAE;YACpF,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,mBAAmB,EAAE,OAAO,EAAE,EAAE,CAAC;gBAChE,IAAI,CAAC;oBACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE;wBAC/C,MAAM,EAAE,KAAK,CAAC,MAAM;wBACpB,GAAG,EAAE,KAAK,CAAC,GAAG;wBACd,MAAM,EAAE,KAAK,CAAC,MAAM;wBACpB,KAAK,EAAE,KAAK,CAAC,KAAK;wBAClB,IAAI,EAAE,KAAK,CAAC,IAAI;wBAChB,iBAAiB,EAAE,8BAA8B;wBACjD,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC7D,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAClD,CAAC,CAAC;oBACH,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC;oBAC9B,OAAO,MAAM,MAAM,CAAC;gBACtB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,mBAAmB,EAAE,CAAC;wBACtE,MAAM,KAAK,CAAC;oBACd,CAAC;gBACH,CAAC;YACH,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;QACjC,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
package/dist/sdk/ralph.js
CHANGED
|
@@ -1,19 +1,32 @@
|
|
|
1
1
|
import { runRalph as runWorkspaceRalph } from "@poe-code/ralph";
|
|
2
|
-
import { renderAcpStream } from "@poe-code/agent-spawn";
|
|
2
|
+
import { renderAcpStream, isActivityTimeoutError } from "@poe-code/agent-spawn";
|
|
3
3
|
import { spawn as sdkSpawn } from "./spawn.js";
|
|
4
|
+
const AUTONOMOUS_ACTIVITY_TIMEOUT_MS = 10 * 60 * 1000; // 10 minutes
|
|
5
|
+
const MAX_TIMEOUT_RETRIES = 3;
|
|
4
6
|
export async function runRalph(options) {
|
|
5
7
|
return runWorkspaceRalph({
|
|
6
8
|
...options,
|
|
7
9
|
runAgent: async (input) => {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
10
|
+
for (let attempt = 1; attempt <= MAX_TIMEOUT_RETRIES; attempt++) {
|
|
11
|
+
try {
|
|
12
|
+
const { events, result } = sdkSpawn(input.agent, {
|
|
13
|
+
prompt: input.prompt,
|
|
14
|
+
cwd: input.cwd,
|
|
15
|
+
model: input.model,
|
|
16
|
+
mode: "yolo",
|
|
17
|
+
activityTimeoutMs: AUTONOMOUS_ACTIVITY_TIMEOUT_MS,
|
|
18
|
+
...(input.signal ? { signal: input.signal } : {})
|
|
19
|
+
});
|
|
20
|
+
await renderAcpStream(events);
|
|
21
|
+
return result;
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
if (!isActivityTimeoutError(error) || attempt === MAX_TIMEOUT_RETRIES) {
|
|
25
|
+
throw error;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
throw new Error("Unreachable");
|
|
17
30
|
}
|
|
18
31
|
});
|
|
19
32
|
}
|
package/dist/sdk/ralph.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ralph.js","sourceRoot":"","sources":["../../src/sdk/ralph.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,IAAI,iBAAiB,EAG9B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"ralph.js","sourceRoot":"","sources":["../../src/sdk/ralph.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,IAAI,iBAAiB,EAG9B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAAE,KAAK,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AAU/C,MAAM,8BAA8B,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa;AACpE,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAE9B,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,OAAwB;IAExB,OAAO,iBAAiB,CAAC;QACvB,GAAG,OAAO;QACV,QAAQ,EAAE,KAAK,EACb,KAA8D,EAC9D,EAAE;YACF,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,mBAAmB,EAAE,OAAO,EAAE,EAAE,CAAC;gBAChE,IAAI,CAAC;oBACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE;wBAC/C,MAAM,EAAE,KAAK,CAAC,MAAM;wBACpB,GAAG,EAAE,KAAK,CAAC,GAAG;wBACd,KAAK,EAAE,KAAK,CAAC,KAAK;wBAClB,IAAI,EAAE,MAAM;wBACZ,iBAAiB,EAAE,8BAA8B;wBACjD,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAClD,CAAC,CAAC;oBACH,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC;oBAC9B,OAAO,MAAM,CAAC;gBAChB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,mBAAmB,EAAE,CAAC;wBACtE,MAAM,KAAK,CAAC;oBACd,CAAC;gBACH,CAAC;YACH,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;QACjC,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
package/dist/sdk/spawn-core.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import type { McpSpawnConfig, SpawnMode } from "@poe-code/agent-spawn";
|
|
|
4
4
|
export interface SpawnCoreOptions {
|
|
5
5
|
/** The prompt to send to the provider */
|
|
6
6
|
prompt: string;
|
|
7
|
-
/** Working directory for the service CLI */
|
|
7
|
+
/** Working directory or workspace locator for the service CLI */
|
|
8
8
|
cwd?: string;
|
|
9
9
|
/** Model identifier override */
|
|
10
10
|
model?: string;
|
package/dist/sdk/spawn-core.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import path from "node:path";
|
|
2
1
|
import chalk from "chalk";
|
|
3
2
|
import { resolveAgentId, parseAgentSpecifier } from "@poe-code/agent-defs";
|
|
4
3
|
import { resolveConfigModel } from "@poe-code/poe-code-config";
|
|
5
4
|
import { buildProviderContext, createExecutionResources } from "../cli/commands/shared.js";
|
|
5
|
+
import { resolveSpawnWorkspace } from "../workspace/resolve-spawn-workspace.js";
|
|
6
6
|
/**
|
|
7
7
|
* Core spawn implementation used by both SDK and CLI.
|
|
8
8
|
* Accepts an existing container to avoid creating a new one.
|
|
@@ -13,60 +13,66 @@ export async function spawnCore(container, service, options, flags = { dryRun: f
|
|
|
13
13
|
throw new Error(`Unknown service "${service}".`);
|
|
14
14
|
}
|
|
15
15
|
const model = await resolveConfiguredModel(container, service, options.model);
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
const spawnOptions = {
|
|
20
|
-
prompt: options.prompt,
|
|
21
|
-
args: options.args,
|
|
22
|
-
model,
|
|
16
|
+
const workspace = await resolveSpawnWorkspace(options.cwd, {
|
|
17
|
+
baseDir: container.env.cwd,
|
|
18
|
+
homeDir: container.env.homeDir,
|
|
23
19
|
mode: options.mode,
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
exitCode: 0
|
|
20
|
+
resolveRemoteLocators: !flags.dryRun,
|
|
21
|
+
fs: container.fs,
|
|
22
|
+
exec: container.commandRunner
|
|
23
|
+
});
|
|
24
|
+
const cwdOverride = workspace.cwd;
|
|
25
|
+
try {
|
|
26
|
+
const spawnOptions = {
|
|
27
|
+
prompt: options.prompt,
|
|
28
|
+
args: options.args,
|
|
29
|
+
model,
|
|
30
|
+
mode: options.mode,
|
|
31
|
+
mcpServers: options.mcpServers,
|
|
32
|
+
cwd: cwdOverride,
|
|
33
|
+
useStdin: options.useStdin ?? false
|
|
39
34
|
};
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
if (
|
|
35
|
+
const commandFlags = { dryRun: flags.dryRun, assumeYes: true, verbose: flags.verbose };
|
|
36
|
+
const resources = createExecutionResources(container, commandFlags, `spawn:${service}`);
|
|
37
|
+
if (flags.dryRun) {
|
|
38
|
+
const summary = formatSpawnDryRunMessage(adapter.label, spawnOptions);
|
|
39
|
+
resources.logger.dryRun(summary);
|
|
40
|
+
return {
|
|
41
|
+
stdout: "",
|
|
42
|
+
stderr: "",
|
|
43
|
+
exitCode: 0
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
if (typeof adapter.spawn !== "function") {
|
|
52
47
|
throw new Error(`${adapter.label} does not support spawn.`);
|
|
53
48
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
49
|
+
if (spawnOptions.useStdin && !adapter.supportsStdinPrompt) {
|
|
50
|
+
throw new Error(`${adapter.label} does not support stdin prompts. Use a different service (e.g. "codex") or pass the prompt as an argument.`);
|
|
51
|
+
}
|
|
52
|
+
const providerContext = buildProviderContext(container, adapter, resources);
|
|
53
|
+
const result = (await container.registry.invoke(adapter.name, "spawn", async (entry) => {
|
|
54
|
+
if (!entry.spawn) {
|
|
55
|
+
throw new Error(`${adapter.label} does not support spawn.`);
|
|
56
|
+
}
|
|
57
|
+
const output = await entry.spawn(providerContext, spawnOptions);
|
|
58
|
+
return output;
|
|
59
|
+
}));
|
|
60
|
+
if (!result) {
|
|
61
|
+
return {
|
|
62
|
+
stdout: "",
|
|
63
|
+
stderr: "",
|
|
64
|
+
exitCode: 0
|
|
65
|
+
};
|
|
66
|
+
}
|
|
59
67
|
return {
|
|
60
|
-
stdout:
|
|
61
|
-
stderr:
|
|
62
|
-
exitCode:
|
|
68
|
+
stdout: result.stdout,
|
|
69
|
+
stderr: result.stderr,
|
|
70
|
+
exitCode: result.exitCode
|
|
63
71
|
};
|
|
64
72
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
exitCode: result.exitCode
|
|
69
|
-
};
|
|
73
|
+
finally {
|
|
74
|
+
await workspace.cleanup?.();
|
|
75
|
+
}
|
|
70
76
|
}
|
|
71
77
|
export async function resolveConfiguredModel(container, service, model) {
|
|
72
78
|
if (model != null) {
|
|
@@ -113,13 +119,4 @@ function formatSpawnArg(arg) {
|
|
|
113
119
|
function formatQuoted(value) {
|
|
114
120
|
return JSON.stringify(value);
|
|
115
121
|
}
|
|
116
|
-
function resolveSpawnWorkingDirectory(baseDir, candidate) {
|
|
117
|
-
if (!candidate || candidate.trim().length === 0) {
|
|
118
|
-
return undefined;
|
|
119
|
-
}
|
|
120
|
-
if (path.isAbsolute(candidate)) {
|
|
121
|
-
return candidate;
|
|
122
|
-
}
|
|
123
|
-
return path.resolve(baseDir, candidate);
|
|
124
|
-
}
|
|
125
122
|
//# sourceMappingURL=spawn-core.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spawn-core.js","sourceRoot":"","sources":["../../src/sdk/spawn-core.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"spawn-core.js","sourceRoot":"","sources":["../../src/sdk/spawn-core.ts"],"names":[],"mappings":"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"}
|
package/dist/sdk/spawn.js
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
|
+
import * as nodeFs from "node:fs/promises";
|
|
2
|
+
import os from "node:os";
|
|
1
3
|
import { getPoeApiKey } from "./credentials.js";
|
|
2
4
|
import { resolveConfiguredModel, spawnCore } from "./spawn-core.js";
|
|
3
5
|
import { createSdkContainer } from "./container.js";
|
|
4
|
-
import { getSpawnConfig, spawn as spawnNonStreaming, spawnInteractive, spawnStreaming, renderAcpStream, applyMiddlewares, sessionCapture, usageCapture, spawnLog } from "@poe-code/agent-spawn";
|
|
6
|
+
import { getAcpSpawnConfig, getSpawnConfig, spawn as spawnNonStreaming, spawnAcp, spawnInteractive, spawnStreaming, renderAcpStream, applyMiddlewares, sessionCapture, usageCapture, spawnLog, runCommand } from "@poe-code/agent-spawn";
|
|
7
|
+
import { resolveSpawnWorkspace } from "../workspace/resolve-spawn-workspace.js";
|
|
5
8
|
export function spawn(service, promptOrOptions, maybeOptions) {
|
|
6
9
|
const options = typeof promptOrOptions === "string"
|
|
7
10
|
? { ...maybeOptions, prompt: promptOrOptions }
|
|
8
11
|
: promptOrOptions;
|
|
12
|
+
const resolvedMcpServers = options.mcpServers ?? options.mcpConfig;
|
|
9
13
|
const emptyEvents = (async function* () { })();
|
|
10
14
|
/**
|
|
11
15
|
* Deferred event stream resolution.
|
|
@@ -40,11 +44,24 @@ export function spawn(service, promptOrOptions, maybeOptions) {
|
|
|
40
44
|
}
|
|
41
45
|
})();
|
|
42
46
|
const result = (async () => {
|
|
47
|
+
let workspace;
|
|
43
48
|
try {
|
|
49
|
+
workspace = await resolveSpawnWorkspace(options.cwd, {
|
|
50
|
+
baseDir: process.cwd(),
|
|
51
|
+
homeDir: os.homedir(),
|
|
52
|
+
mode: options.mode,
|
|
53
|
+
fs: {
|
|
54
|
+
mkdir: async (target, resolveOptions) => await nodeFs.mkdir(target, resolveOptions).then(() => undefined),
|
|
55
|
+
stat: async (target) => await nodeFs.stat(target),
|
|
56
|
+
rm: async (target, resolveOptions) => await nodeFs.rm(target, resolveOptions)
|
|
57
|
+
},
|
|
58
|
+
exec: runCommand
|
|
59
|
+
});
|
|
60
|
+
const cwd = workspace.cwd;
|
|
44
61
|
await getPoeApiKey();
|
|
45
62
|
let container;
|
|
46
63
|
const getContainer = () => {
|
|
47
|
-
container ??= createSdkContainer({ cwd
|
|
64
|
+
container ??= createSdkContainer({ cwd });
|
|
48
65
|
return container;
|
|
49
66
|
};
|
|
50
67
|
const resolveModel = async () => options.model ?? await resolveConfiguredModel(getContainer(), service);
|
|
@@ -53,12 +70,12 @@ export function spawn(service, promptOrOptions, maybeOptions) {
|
|
|
53
70
|
const model = await resolveModel();
|
|
54
71
|
const interactiveResult = await spawnInteractive(service, {
|
|
55
72
|
prompt: options.prompt,
|
|
56
|
-
cwd
|
|
73
|
+
cwd,
|
|
57
74
|
model,
|
|
58
75
|
mode: options.mode,
|
|
59
76
|
signal: options.signal,
|
|
60
77
|
args: options.args,
|
|
61
|
-
...(
|
|
78
|
+
...(resolvedMcpServers ? { mcpServers: resolvedMcpServers } : {})
|
|
62
79
|
});
|
|
63
80
|
return {
|
|
64
81
|
stdout: interactiveResult.stdout,
|
|
@@ -67,6 +84,50 @@ export function spawn(service, promptOrOptions, maybeOptions) {
|
|
|
67
84
|
...(interactiveResult.usage ? { usage: interactiveResult.usage } : {})
|
|
68
85
|
};
|
|
69
86
|
}
|
|
87
|
+
const acpSpawnConfig = getAcpSpawnConfig(service);
|
|
88
|
+
if (acpSpawnConfig) {
|
|
89
|
+
const model = await resolveModel();
|
|
90
|
+
const { events: rawEvents, done } = spawnAcp({
|
|
91
|
+
agentId: service,
|
|
92
|
+
prompt: options.prompt,
|
|
93
|
+
cwd: options.cwd,
|
|
94
|
+
model,
|
|
95
|
+
mode: options.mode,
|
|
96
|
+
mcpServers: options.mcpServers,
|
|
97
|
+
signal: options.signal,
|
|
98
|
+
});
|
|
99
|
+
const middlewareContext = {
|
|
100
|
+
sessionId: "unknown",
|
|
101
|
+
agent: service,
|
|
102
|
+
logDir: options.logDir,
|
|
103
|
+
events: [],
|
|
104
|
+
usage: {
|
|
105
|
+
inputTokens: 0,
|
|
106
|
+
outputTokens: 0
|
|
107
|
+
},
|
|
108
|
+
eventStream: rawEvents,
|
|
109
|
+
prompt: options.prompt,
|
|
110
|
+
model,
|
|
111
|
+
mode: options.mode,
|
|
112
|
+
cwd: options.cwd,
|
|
113
|
+
startedAt: new Date()
|
|
114
|
+
};
|
|
115
|
+
await applyMiddlewares([sessionCapture, usageCapture, spawnLog], middlewareContext);
|
|
116
|
+
resolveEventsOnce(middlewareContext.eventStream ?? emptyEvents);
|
|
117
|
+
const final = await done;
|
|
118
|
+
const threadId = middlewareContext.threadId ?? final.threadId;
|
|
119
|
+
const sessionId = (middlewareContext.sessionId !== "unknown" ? middlewareContext.sessionId : undefined) ??
|
|
120
|
+
final.sessionId ??
|
|
121
|
+
threadId;
|
|
122
|
+
return {
|
|
123
|
+
stdout: final.stdout,
|
|
124
|
+
stderr: final.stderr,
|
|
125
|
+
exitCode: final.exitCode,
|
|
126
|
+
...(threadId ? { threadId } : {}),
|
|
127
|
+
...(sessionId ? { sessionId } : {}),
|
|
128
|
+
...(final.usage ? { usage: final.usage } : {})
|
|
129
|
+
};
|
|
130
|
+
}
|
|
70
131
|
const spawnConfig = getSpawnConfig(service);
|
|
71
132
|
const supportsStreaming = !!spawnConfig &&
|
|
72
133
|
spawnConfig.kind === "cli" &&
|
|
@@ -76,12 +137,15 @@ export function spawn(service, promptOrOptions, maybeOptions) {
|
|
|
76
137
|
const { events: rawEvents, done } = spawnStreaming({
|
|
77
138
|
agentId: service,
|
|
78
139
|
prompt: options.prompt,
|
|
79
|
-
cwd
|
|
140
|
+
cwd,
|
|
80
141
|
model,
|
|
81
142
|
mode: options.mode,
|
|
82
143
|
args: options.args,
|
|
83
144
|
signal: options.signal,
|
|
84
|
-
...(
|
|
145
|
+
...(resolvedMcpServers ? { mcpServers: resolvedMcpServers } : {}),
|
|
146
|
+
...(options.activityTimeoutMs !== undefined
|
|
147
|
+
? { activityTimeoutMs: options.activityTimeoutMs }
|
|
148
|
+
: {}),
|
|
85
149
|
useStdin: false
|
|
86
150
|
});
|
|
87
151
|
const middlewareContext = {
|
|
@@ -97,7 +161,7 @@ export function spawn(service, promptOrOptions, maybeOptions) {
|
|
|
97
161
|
prompt: options.prompt,
|
|
98
162
|
model,
|
|
99
163
|
mode: options.mode,
|
|
100
|
-
cwd
|
|
164
|
+
cwd,
|
|
101
165
|
startedAt: new Date()
|
|
102
166
|
};
|
|
103
167
|
await applyMiddlewares([sessionCapture, usageCapture, spawnLog], middlewareContext);
|
|
@@ -107,13 +171,14 @@ export function spawn(service, promptOrOptions, maybeOptions) {
|
|
|
107
171
|
const sessionId = (middlewareContext.sessionId !== "unknown" ? middlewareContext.sessionId : undefined) ??
|
|
108
172
|
final.sessionId ??
|
|
109
173
|
threadId;
|
|
174
|
+
const usage = final.usage ?? getCapturedUsage(middlewareContext.usage);
|
|
110
175
|
return {
|
|
111
176
|
stdout: final.stdout,
|
|
112
177
|
stderr: final.stderr,
|
|
113
178
|
exitCode: final.exitCode,
|
|
114
179
|
...(threadId ? { threadId } : {}),
|
|
115
180
|
...(sessionId ? { sessionId } : {}),
|
|
116
|
-
...(
|
|
181
|
+
...(usage ? { usage } : {})
|
|
117
182
|
};
|
|
118
183
|
}
|
|
119
184
|
if (spawnConfig && spawnConfig.kind === "cli") {
|
|
@@ -121,12 +186,15 @@ export function spawn(service, promptOrOptions, maybeOptions) {
|
|
|
121
186
|
const model = await resolveModel();
|
|
122
187
|
return spawnNonStreaming(service, {
|
|
123
188
|
prompt: options.prompt,
|
|
124
|
-
cwd
|
|
189
|
+
cwd,
|
|
125
190
|
model,
|
|
126
191
|
mode: options.mode,
|
|
127
192
|
args: options.args,
|
|
128
193
|
signal: options.signal,
|
|
129
|
-
...(
|
|
194
|
+
...(resolvedMcpServers ? { mcpServers: resolvedMcpServers } : {}),
|
|
195
|
+
...(options.activityTimeoutMs !== undefined
|
|
196
|
+
? { activityTimeoutMs: options.activityTimeoutMs }
|
|
197
|
+
: {}),
|
|
130
198
|
useStdin: false
|
|
131
199
|
});
|
|
132
200
|
}
|
|
@@ -134,11 +202,11 @@ export function spawn(service, promptOrOptions, maybeOptions) {
|
|
|
134
202
|
const model = await resolveModel();
|
|
135
203
|
return spawnCore(getContainer(), service, {
|
|
136
204
|
prompt: options.prompt,
|
|
137
|
-
cwd
|
|
205
|
+
cwd,
|
|
138
206
|
model,
|
|
139
207
|
mode: options.mode,
|
|
140
208
|
args: options.args,
|
|
141
|
-
...(
|
|
209
|
+
...(resolvedMcpServers ? { mcpServers: resolvedMcpServers } : {}),
|
|
142
210
|
useStdin: false
|
|
143
211
|
});
|
|
144
212
|
}
|
|
@@ -146,9 +214,24 @@ export function spawn(service, promptOrOptions, maybeOptions) {
|
|
|
146
214
|
resolveEventsOnce(emptyEvents);
|
|
147
215
|
throw error;
|
|
148
216
|
}
|
|
217
|
+
finally {
|
|
218
|
+
await workspace?.cleanup?.();
|
|
219
|
+
}
|
|
149
220
|
})();
|
|
150
221
|
return { events, result };
|
|
151
222
|
}
|
|
223
|
+
function getCapturedUsage(usage) {
|
|
224
|
+
if (!usage) {
|
|
225
|
+
return undefined;
|
|
226
|
+
}
|
|
227
|
+
if (usage.inputTokens > 0 || usage.outputTokens > 0) {
|
|
228
|
+
return usage;
|
|
229
|
+
}
|
|
230
|
+
if (usage.cachedTokens !== undefined || usage.costUsd !== undefined) {
|
|
231
|
+
return usage;
|
|
232
|
+
}
|
|
233
|
+
return undefined;
|
|
234
|
+
}
|
|
152
235
|
/**
|
|
153
236
|
* Spawns an agent and renders ACP events to stdout with pretty formatting.
|
|
154
237
|
*
|