poe-code 3.0.95 → 3.0.97
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/dist/bin/poe-agent.js +9 -0
- package/dist/cli/poe-agent-main.d.ts +3 -0
- package/dist/cli/poe-agent-main.js +142 -0
- package/dist/cli/poe-agent-main.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +5431 -4388
- package/dist/index.js.map +4 -4
- package/package.json +2 -1
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
var _major = parseInt(process.versions.node.split(".")[0], 10);
|
|
3
|
+
if (_major < 18) {
|
|
4
|
+
console.error(
|
|
5
|
+
"poe-agent requires Node.js 18 or later. Current: " + process.version
|
|
6
|
+
);
|
|
7
|
+
process.exit(1);
|
|
8
|
+
}
|
|
9
|
+
import("../index.js").then(function (m) { m.poeAgentMain(); }).catch(function (err) { console.error(err); process.exit(1); })
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import { renderAcpStream } from "@poe-code/agent-spawn";
|
|
4
|
+
import { log } from "@poe-code/design-system";
|
|
5
|
+
import { DEFAULT_FRONTIER_MODEL, FEEDBACK_URL } from "./constants.js";
|
|
6
|
+
import { ValidationError } from "./errors.js";
|
|
7
|
+
function parseMcpSpawnConfig(input) {
|
|
8
|
+
if (!input) {
|
|
9
|
+
return undefined;
|
|
10
|
+
}
|
|
11
|
+
let parsed;
|
|
12
|
+
try {
|
|
13
|
+
parsed = JSON.parse(input);
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
throw new ValidationError("--mcp-config must be valid JSON in this shape: {name: {command, args?, env?}}");
|
|
17
|
+
}
|
|
18
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
19
|
+
throw new ValidationError("--mcp-config must be an object in this shape: {name: {command, args?, env?}}");
|
|
20
|
+
}
|
|
21
|
+
const servers = {};
|
|
22
|
+
for (const [name, value] of Object.entries(parsed)) {
|
|
23
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
24
|
+
throw new ValidationError(`--mcp-config entry "${name}" must be an object: {command, args?, env?}`);
|
|
25
|
+
}
|
|
26
|
+
const entry = value;
|
|
27
|
+
const command = entry.command;
|
|
28
|
+
if (typeof command !== "string" || command.trim().length === 0) {
|
|
29
|
+
throw new ValidationError(`--mcp-config entry "${name}" must include a non-empty string "command"`);
|
|
30
|
+
}
|
|
31
|
+
let args;
|
|
32
|
+
if ("args" in entry && entry.args !== undefined) {
|
|
33
|
+
if (!Array.isArray(entry.args) || entry.args.some((a) => typeof a !== "string")) {
|
|
34
|
+
throw new ValidationError(`--mcp-config entry "${name}".args must be an array of strings`);
|
|
35
|
+
}
|
|
36
|
+
args = entry.args;
|
|
37
|
+
}
|
|
38
|
+
let env;
|
|
39
|
+
if ("env" in entry && entry.env !== undefined) {
|
|
40
|
+
if (typeof entry.env !== "object" || entry.env === null || Array.isArray(entry.env)) {
|
|
41
|
+
throw new ValidationError(`--mcp-config entry "${name}".env must be an object of string values`);
|
|
42
|
+
}
|
|
43
|
+
env = {};
|
|
44
|
+
for (const [envKey, envValue] of Object.entries(entry.env)) {
|
|
45
|
+
if (typeof envValue !== "string") {
|
|
46
|
+
throw new ValidationError(`--mcp-config entry "${name}".env must be an object of string values`);
|
|
47
|
+
}
|
|
48
|
+
env[envKey] = envValue;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
servers[name] = {
|
|
52
|
+
command,
|
|
53
|
+
...(args ? { args } : {}),
|
|
54
|
+
...(env ? { env } : {})
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
return Object.keys(servers).length > 0 ? servers : undefined;
|
|
58
|
+
}
|
|
59
|
+
function resolveWorkingDirectory(baseDir, candidate) {
|
|
60
|
+
if (!candidate || candidate.trim().length === 0) {
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
if (path.isAbsolute(candidate)) {
|
|
64
|
+
return candidate;
|
|
65
|
+
}
|
|
66
|
+
return path.resolve(baseDir, candidate);
|
|
67
|
+
}
|
|
68
|
+
export function createPoeAgentProgram() {
|
|
69
|
+
const program = new Command();
|
|
70
|
+
program
|
|
71
|
+
.name("poe-agent")
|
|
72
|
+
.description("Run a single prompt through the Poe agent runtime.")
|
|
73
|
+
.version("0.0.0")
|
|
74
|
+
.option("--model <model>", "Model identifier override")
|
|
75
|
+
.option("-C, --cwd <path>", "Working directory for the agent")
|
|
76
|
+
.option("--stdin", "Read the prompt from stdin")
|
|
77
|
+
.option("--mcp-config <json>", "MCP server config JSON: {name: {command, args?, env?}}")
|
|
78
|
+
.argument("[prompt]", "Prompt text to send (or '-' / stdin)")
|
|
79
|
+
.argument("[args...]", "Additional arguments forwarded to the agent")
|
|
80
|
+
.action(async function (promptText, _args = []) {
|
|
81
|
+
const commandOptions = this.opts();
|
|
82
|
+
const mcpServers = parseMcpSpawnConfig(commandOptions.mcpConfig);
|
|
83
|
+
const cwdOverride = resolveWorkingDirectory(process.cwd(), commandOptions.cwd);
|
|
84
|
+
const wantsStdinFlag = commandOptions.stdin === true;
|
|
85
|
+
const shouldReadFromStdin = wantsStdinFlag ||
|
|
86
|
+
promptText === "-" ||
|
|
87
|
+
(!promptText && !process.stdin.isTTY);
|
|
88
|
+
if (wantsStdinFlag || promptText === "-") {
|
|
89
|
+
promptText = undefined;
|
|
90
|
+
}
|
|
91
|
+
if (!promptText && shouldReadFromStdin) {
|
|
92
|
+
const chunks = [];
|
|
93
|
+
for await (const chunk of process.stdin) {
|
|
94
|
+
chunks.push(chunk);
|
|
95
|
+
}
|
|
96
|
+
promptText = Buffer.concat(chunks).toString("utf8").trim();
|
|
97
|
+
}
|
|
98
|
+
if (!promptText) {
|
|
99
|
+
throw new ValidationError("No prompt provided via argument or stdin");
|
|
100
|
+
}
|
|
101
|
+
const { spawnPoeAgentWithAcp } = await import("../providers/poe-agent.js");
|
|
102
|
+
const { events, done } = spawnPoeAgentWithAcp({
|
|
103
|
+
prompt: promptText,
|
|
104
|
+
model: commandOptions.model ?? DEFAULT_FRONTIER_MODEL,
|
|
105
|
+
cwd: cwdOverride ?? process.cwd(),
|
|
106
|
+
mcpServers,
|
|
107
|
+
});
|
|
108
|
+
await renderAcpStream(events);
|
|
109
|
+
const result = await done;
|
|
110
|
+
if (result.exitCode !== 0) {
|
|
111
|
+
const detail = result.stderr.trim() || result.stdout.trim();
|
|
112
|
+
const suffix = detail ? `: ${detail}` : "";
|
|
113
|
+
throw new Error(`poe-agent failed with exit code ${result.exitCode}${suffix}`);
|
|
114
|
+
}
|
|
115
|
+
const trimmedStdout = result.stdout.trim();
|
|
116
|
+
if (trimmedStdout) {
|
|
117
|
+
log.info(trimmedStdout);
|
|
118
|
+
}
|
|
119
|
+
process.exitCode = result.exitCode;
|
|
120
|
+
});
|
|
121
|
+
return program;
|
|
122
|
+
}
|
|
123
|
+
export async function poeAgentMain() {
|
|
124
|
+
const program = createPoeAgentProgram();
|
|
125
|
+
try {
|
|
126
|
+
await program.parseAsync(process.argv);
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
if (error instanceof Error) {
|
|
130
|
+
if (error instanceof ValidationError) {
|
|
131
|
+
log.error(error.message);
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
log.error(`Error: ${error.message}`);
|
|
135
|
+
}
|
|
136
|
+
log.message(`Problems? ${FEEDBACK_URL}`);
|
|
137
|
+
process.exit(1);
|
|
138
|
+
}
|
|
139
|
+
throw error;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=poe-agent-main.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poe-agent-main.js","sourceRoot":"","sources":["../../src/cli/poe-agent-main.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -8,3 +8,4 @@ export type { PipelineRunOptions, PipelineRunResult } from "./sdk/pipeline.js";
|
|
|
8
8
|
declare function main(): Promise<void>;
|
|
9
9
|
declare function isCliInvocation(argv: string[], moduleUrl: string, realpath?: (path: string) => string): boolean;
|
|
10
10
|
export { main, isCliInvocation };
|
|
11
|
+
export { poeAgentMain } from "./cli/poe-agent-main.js";
|