poe-code 3.0.169 → 3.0.171
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-goose.js +23 -0
- package/dist/cli/commands/configure-payload.js +10 -0
- package/dist/cli/commands/configure-payload.js.map +1 -1
- package/dist/cli/commands/experiment.js +1 -1
- package/dist/cli/commands/experiment.js.map +1 -1
- package/dist/cli/commands/pipeline.js +1 -1
- package/dist/cli/commands/pipeline.js.map +1 -1
- package/dist/cli/commands/spawn.js +4 -0
- package/dist/cli/commands/spawn.js.map +1 -1
- package/dist/cli/constants.d.ts +2 -0
- package/dist/cli/constants.js +2 -0
- package/dist/cli/constants.js.map +1 -1
- package/dist/cli/service-registry.d.ts +9 -0
- package/dist/cli/service-registry.js.map +1 -1
- package/dist/index.js +434 -91
- package/dist/index.js.map +4 -4
- package/dist/providers/claude-code.js +197 -27
- package/dist/providers/claude-code.js.map +4 -4
- package/dist/providers/codex.js +203 -33
- package/dist/providers/codex.js.map +4 -4
- package/dist/providers/create-provider.d.ts +1 -0
- package/dist/providers/create-provider.js +6 -5
- package/dist/providers/create-provider.js.map +1 -1
- package/dist/providers/goose.d.ts +16 -0
- package/dist/providers/goose.js +2514 -0
- package/dist/providers/goose.js.map +7 -0
- package/dist/providers/kimi.js +196 -26
- package/dist/providers/kimi.js.map +4 -4
- package/dist/providers/opencode.js +196 -26
- package/dist/providers/opencode.js.map +4 -4
- package/dist/providers/poe-agent.js +96 -43
- package/dist/providers/poe-agent.js.map +4 -4
- package/dist/utils/command-checks.js +4 -2
- package/dist/utils/command-checks.js.map +1 -1
- package/package.json +2 -2
- /package/dist/templates/pipeline/{steps.yaml.hbs → steps.yaml.mustache} +0 -0
|
@@ -80,30 +80,30 @@ var require_src = __commonJS({
|
|
|
80
80
|
}
|
|
81
81
|
});
|
|
82
82
|
|
|
83
|
-
// src/templates/py-poe-spawn/env.
|
|
83
|
+
// src/templates/py-poe-spawn/env.mustache
|
|
84
84
|
var require_env = __commonJS({
|
|
85
|
-
"src/templates/py-poe-spawn/env.
|
|
85
|
+
"src/templates/py-poe-spawn/env.mustache"(exports, module) {
|
|
86
86
|
module.exports = "POE_API_KEY={{apiKey}}\nPOE_BASE_URL=https://api.poe.com/v1\nMODEL={{model}}\n";
|
|
87
87
|
}
|
|
88
88
|
});
|
|
89
89
|
|
|
90
|
-
// src/templates/py-poe-spawn/main.py.
|
|
90
|
+
// src/templates/py-poe-spawn/main.py.mustache
|
|
91
91
|
var require_main_py = __commonJS({
|
|
92
|
-
"src/templates/py-poe-spawn/main.py.
|
|
92
|
+
"src/templates/py-poe-spawn/main.py.mustache"(exports, module) {
|
|
93
93
|
module.exports = 'import os\nfrom openai import OpenAI\nfrom dotenv import load_dotenv\n\nload_dotenv()\n\nclient = OpenAI(\n api_key=os.getenv("POE_API_KEY"),\n base_url=os.getenv("POE_BASE_URL")\n)\n\nresponse = client.chat.completions.create(\n model=os.getenv("MODEL", "{{model}}"),\n messages=[{"role": "user", "content": "Tell me a joke"}]\n)\n\nprint(response.choices[0].message.content)\n';
|
|
94
94
|
}
|
|
95
95
|
});
|
|
96
96
|
|
|
97
|
-
// src/templates/py-poe-spawn/requirements.txt.
|
|
97
|
+
// src/templates/py-poe-spawn/requirements.txt.mustache
|
|
98
98
|
var require_requirements_txt = __commonJS({
|
|
99
|
-
"src/templates/py-poe-spawn/requirements.txt.
|
|
99
|
+
"src/templates/py-poe-spawn/requirements.txt.mustache"(exports, module) {
|
|
100
100
|
module.exports = "openai>=1.0.0\npython-dotenv>=1.0.0\n";
|
|
101
101
|
}
|
|
102
102
|
});
|
|
103
103
|
|
|
104
|
-
// src/templates/codex/config.toml.
|
|
104
|
+
// src/templates/codex/config.toml.mustache
|
|
105
105
|
var require_config_toml = __commonJS({
|
|
106
|
-
"src/templates/codex/config.toml.
|
|
106
|
+
"src/templates/codex/config.toml.mustache"(exports, module) {
|
|
107
107
|
module.exports = 'model_provider = "poe"\n\n[profiles."{{{profileName}}}"]\nmodel = "{{{model}}}"\nmodel_provider = "poe"\nmodel_reasoning_effort = "{{reasoningEffort}}"\nmodel_verbosity = "medium"\n\n[model_providers.poe]\nname = "poe"\nbase_url = "{{{baseUrl}}}"\nwire_api = "responses"\nexperimental_bearer_token = "{{apiKey}}"\nrequires_openai_auth = false\nsupports_websockets = false\n';
|
|
108
108
|
}
|
|
109
109
|
});
|
|
@@ -147,6 +147,17 @@ var PROVIDER_NAME = "poe";
|
|
|
147
147
|
// packages/agent-spawn/src/run-command.ts
|
|
148
148
|
import { spawn } from "node:child_process";
|
|
149
149
|
|
|
150
|
+
// packages/agent-spawn/src/types.ts
|
|
151
|
+
function resolveModeConfig(modeConfig) {
|
|
152
|
+
if (Array.isArray(modeConfig)) {
|
|
153
|
+
return { args: modeConfig };
|
|
154
|
+
}
|
|
155
|
+
return {
|
|
156
|
+
args: modeConfig.args ?? [],
|
|
157
|
+
env: modeConfig.env && Object.keys(modeConfig.env).length > 0 ? modeConfig.env : void 0
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
|
|
150
161
|
// packages/agent-defs/src/agents/claude-code.ts
|
|
151
162
|
var claudeCodeAgent = {
|
|
152
163
|
id: "claude-code",
|
|
@@ -228,13 +239,30 @@ var kimiAgent = {
|
|
|
228
239
|
}
|
|
229
240
|
};
|
|
230
241
|
|
|
242
|
+
// packages/agent-defs/src/agents/goose.ts
|
|
243
|
+
var gooseAgent = {
|
|
244
|
+
id: "goose",
|
|
245
|
+
name: "goose",
|
|
246
|
+
label: "Goose",
|
|
247
|
+
summary: "Block's open-source AI agent with ACP support.",
|
|
248
|
+
binaryName: "goose",
|
|
249
|
+
configPath: "~/.config/goose/config.yaml",
|
|
250
|
+
branding: {
|
|
251
|
+
colors: {
|
|
252
|
+
dark: "#FF6B35",
|
|
253
|
+
light: "#E85D26"
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
};
|
|
257
|
+
|
|
231
258
|
// packages/agent-defs/src/registry.ts
|
|
232
259
|
var allAgents = [
|
|
233
260
|
claudeCodeAgent,
|
|
234
261
|
claudeDesktopAgent,
|
|
235
262
|
codexAgent,
|
|
236
263
|
openCodeAgent,
|
|
237
|
-
kimiAgent
|
|
264
|
+
kimiAgent,
|
|
265
|
+
gooseAgent
|
|
238
266
|
];
|
|
239
267
|
var lookup = /* @__PURE__ */ new Map();
|
|
240
268
|
for (const agent of allAgents) {
|
|
@@ -310,6 +338,12 @@ function serializeCodexMcpArgs(servers) {
|
|
|
310
338
|
}
|
|
311
339
|
return args;
|
|
312
340
|
}
|
|
341
|
+
function serializeGooseMcpArgs(servers) {
|
|
342
|
+
return Object.values(servers).flatMap((server) => [
|
|
343
|
+
"--with-extension",
|
|
344
|
+
[server.command, ...server.args ?? []].join(" ")
|
|
345
|
+
]);
|
|
346
|
+
}
|
|
313
347
|
|
|
314
348
|
// packages/agent-spawn/src/configs/claude-code.ts
|
|
315
349
|
var claudeCodeSpawnConfig = {
|
|
@@ -437,12 +471,47 @@ var kimiAcpSpawnConfig = {
|
|
|
437
471
|
acpArgs: ["acp"]
|
|
438
472
|
};
|
|
439
473
|
|
|
474
|
+
// packages/agent-spawn/src/configs/goose.ts
|
|
475
|
+
var gooseSpawnConfig = {
|
|
476
|
+
kind: "cli",
|
|
477
|
+
agentId: "goose",
|
|
478
|
+
adapter: "native",
|
|
479
|
+
promptFlag: "--text",
|
|
480
|
+
modelFlag: "--model",
|
|
481
|
+
modelStripProviderPrefix: false,
|
|
482
|
+
defaultArgs: ["run", "--output-format", "stream-json"],
|
|
483
|
+
defaultArgsPosition: "beforePrompt",
|
|
484
|
+
mcpArgs: serializeGooseMcpArgs,
|
|
485
|
+
mcpArgsPosition: "beforePrompt",
|
|
486
|
+
modes: {
|
|
487
|
+
yolo: { env: { GOOSE_MODE: "auto" } },
|
|
488
|
+
edit: { env: { GOOSE_MODE: "smart_approve" } },
|
|
489
|
+
read: { env: { GOOSE_MODE: "chat" } }
|
|
490
|
+
},
|
|
491
|
+
stdinMode: {
|
|
492
|
+
omitPrompt: true,
|
|
493
|
+
extraArgs: ["--instructions", "-"]
|
|
494
|
+
},
|
|
495
|
+
interactive: {
|
|
496
|
+
defaultArgs: ["session"],
|
|
497
|
+
defaultArgsPosition: "beforePrompt"
|
|
498
|
+
},
|
|
499
|
+
resumeCommand: () => ["run", "--resume", "--text", "continue"]
|
|
500
|
+
};
|
|
501
|
+
var gooseAcpSpawnConfig = {
|
|
502
|
+
kind: "acp",
|
|
503
|
+
agentId: "goose",
|
|
504
|
+
acpArgs: ["acp"],
|
|
505
|
+
skipAuth: true
|
|
506
|
+
};
|
|
507
|
+
|
|
440
508
|
// packages/agent-spawn/src/configs/index.ts
|
|
441
509
|
var allSpawnConfigs = [
|
|
442
510
|
claudeCodeSpawnConfig,
|
|
443
511
|
codexSpawnConfig,
|
|
444
512
|
openCodeSpawnConfig,
|
|
445
|
-
kimiSpawnConfig
|
|
513
|
+
kimiSpawnConfig,
|
|
514
|
+
gooseSpawnConfig
|
|
446
515
|
];
|
|
447
516
|
var lookup2 = /* @__PURE__ */ new Map();
|
|
448
517
|
for (const config of allSpawnConfigs) {
|
|
@@ -451,6 +520,7 @@ for (const config of allSpawnConfigs) {
|
|
|
451
520
|
var acpLookup = /* @__PURE__ */ new Map();
|
|
452
521
|
acpLookup.set(openCodeAcpSpawnConfig.agentId, openCodeAcpSpawnConfig);
|
|
453
522
|
acpLookup.set(kimiAcpSpawnConfig.agentId, kimiAcpSpawnConfig);
|
|
523
|
+
acpLookup.set(gooseAcpSpawnConfig.agentId, gooseAcpSpawnConfig);
|
|
454
524
|
function getSpawnConfig(input) {
|
|
455
525
|
const resolvedId = resolveAgentId(input);
|
|
456
526
|
if (!resolvedId) {
|
|
@@ -537,10 +607,27 @@ function resolveCliConfig(agentId) {
|
|
|
537
607
|
spawnConfig: resolved.spawnConfig
|
|
538
608
|
};
|
|
539
609
|
}
|
|
610
|
+
function getDefaultArgsPosition(config) {
|
|
611
|
+
return config.defaultArgsPosition ?? "afterPrompt";
|
|
612
|
+
}
|
|
613
|
+
function getMcpArgsPosition(config) {
|
|
614
|
+
if (config.mcpArgsPosition) {
|
|
615
|
+
return config.mcpArgsPosition;
|
|
616
|
+
}
|
|
617
|
+
return config.mcpArgsBeforeCommand ? "beforeCommand" : "afterCommand";
|
|
618
|
+
}
|
|
540
619
|
function buildCliArgs(config, options, stdinMode) {
|
|
541
620
|
const mcpArgs = getMcpArgs(config, options.mcpServers);
|
|
621
|
+
const defaultArgsPosition = getDefaultArgsPosition(config);
|
|
622
|
+
const mcpArgsPosition = getMcpArgsPosition(config);
|
|
542
623
|
const args = [];
|
|
543
|
-
if (
|
|
624
|
+
if (mcpArgsPosition === "beforeCommand") {
|
|
625
|
+
args.push(...mcpArgs);
|
|
626
|
+
}
|
|
627
|
+
if (defaultArgsPosition === "beforePrompt") {
|
|
628
|
+
args.push(...config.defaultArgs);
|
|
629
|
+
}
|
|
630
|
+
if (mcpArgsPosition === "beforePrompt") {
|
|
544
631
|
args.push(...mcpArgs);
|
|
545
632
|
}
|
|
546
633
|
if (stdinMode) {
|
|
@@ -557,20 +644,24 @@ function buildCliArgs(config, options, stdinMode) {
|
|
|
557
644
|
if (config.modelTransform) model = config.modelTransform(model);
|
|
558
645
|
args.push(config.modelFlag, model);
|
|
559
646
|
}
|
|
560
|
-
|
|
561
|
-
|
|
647
|
+
if (defaultArgsPosition === "afterPrompt") {
|
|
648
|
+
args.push(...config.defaultArgs);
|
|
649
|
+
}
|
|
650
|
+
if (mcpArgsPosition === "afterCommand") {
|
|
562
651
|
args.push(...mcpArgs);
|
|
563
652
|
}
|
|
564
|
-
|
|
653
|
+
const mode = resolveModeConfig(config.modes[options.mode ?? "yolo"]);
|
|
654
|
+
args.push(...mode.args);
|
|
565
655
|
if (options.args && options.args.length > 0) {
|
|
566
656
|
args.push(...options.args);
|
|
567
657
|
}
|
|
568
|
-
return args;
|
|
658
|
+
return { args, env: mode.env };
|
|
569
659
|
}
|
|
570
660
|
function buildSpawnArgs(agentId, options) {
|
|
571
661
|
const { binaryName, spawnConfig } = resolveCliConfig(agentId);
|
|
572
662
|
const stdinMode = options.useStdin && spawnConfig.stdinMode ? spawnConfig.stdinMode : void 0;
|
|
573
|
-
|
|
663
|
+
const result = buildCliArgs(spawnConfig, options, stdinMode);
|
|
664
|
+
return { binaryName, args: result.args, env: result.env };
|
|
574
665
|
}
|
|
575
666
|
|
|
576
667
|
// packages/agent-spawn/src/spawn-interactive.ts
|
|
@@ -1029,7 +1120,7 @@ ${stderr}`;
|
|
|
1029
1120
|
}
|
|
1030
1121
|
function createSpawnHealthCheck(agentId, options) {
|
|
1031
1122
|
const prompt = `Output exactly: ${options.expectedOutput}`;
|
|
1032
|
-
const { binaryName, args } = buildSpawnArgs(agentId, {
|
|
1123
|
+
const { binaryName, args, env: modeEnv } = buildSpawnArgs(agentId, {
|
|
1033
1124
|
prompt,
|
|
1034
1125
|
model: options.model,
|
|
1035
1126
|
mode: "yolo"
|
|
@@ -1044,7 +1135,7 @@ function createSpawnHealthCheck(agentId, options) {
|
|
|
1044
1135
|
);
|
|
1045
1136
|
return;
|
|
1046
1137
|
}
|
|
1047
|
-
const result = await context.runCommand(binaryName, args);
|
|
1138
|
+
const result = modeEnv ? await context.runCommand(binaryName, args, { env: modeEnv }) : await context.runCommand(binaryName, args);
|
|
1048
1139
|
if (result.exitCode !== 0) {
|
|
1049
1140
|
throw new Error(
|
|
1050
1141
|
`spawn ${agentId} failed with exit code ${result.exitCode}.
|
|
@@ -1349,14 +1440,92 @@ var tomlFormat = {
|
|
|
1349
1440
|
prune: prune3
|
|
1350
1441
|
};
|
|
1351
1442
|
|
|
1443
|
+
// packages/config-mutations/src/formats/yaml.ts
|
|
1444
|
+
import { parse as parseYaml, stringify as stringifyYaml } from "yaml";
|
|
1445
|
+
function isConfigObject3(value) {
|
|
1446
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
1447
|
+
}
|
|
1448
|
+
function parse5(content) {
|
|
1449
|
+
if (!content || content.trim() === "") {
|
|
1450
|
+
return {};
|
|
1451
|
+
}
|
|
1452
|
+
const parsed = parseYaml(content);
|
|
1453
|
+
if (parsed === null || parsed === void 0) {
|
|
1454
|
+
return {};
|
|
1455
|
+
}
|
|
1456
|
+
if (!isConfigObject3(parsed)) {
|
|
1457
|
+
throw new Error("Expected YAML object.");
|
|
1458
|
+
}
|
|
1459
|
+
return parsed;
|
|
1460
|
+
}
|
|
1461
|
+
function serialize3(obj) {
|
|
1462
|
+
const serialized = stringifyYaml(obj);
|
|
1463
|
+
return serialized.endsWith("\n") ? serialized : `${serialized}
|
|
1464
|
+
`;
|
|
1465
|
+
}
|
|
1466
|
+
function merge4(base, patch) {
|
|
1467
|
+
const result = { ...base };
|
|
1468
|
+
for (const [key, value] of Object.entries(patch)) {
|
|
1469
|
+
if (value === void 0) {
|
|
1470
|
+
continue;
|
|
1471
|
+
}
|
|
1472
|
+
const existing = result[key];
|
|
1473
|
+
if (isConfigObject3(existing) && isConfigObject3(value)) {
|
|
1474
|
+
result[key] = merge4(existing, value);
|
|
1475
|
+
continue;
|
|
1476
|
+
}
|
|
1477
|
+
result[key] = value;
|
|
1478
|
+
}
|
|
1479
|
+
return result;
|
|
1480
|
+
}
|
|
1481
|
+
function prune4(obj, shape) {
|
|
1482
|
+
let changed = false;
|
|
1483
|
+
const result = { ...obj };
|
|
1484
|
+
for (const [key, pattern] of Object.entries(shape)) {
|
|
1485
|
+
if (!(key in result)) {
|
|
1486
|
+
continue;
|
|
1487
|
+
}
|
|
1488
|
+
const current = result[key];
|
|
1489
|
+
if (isConfigObject3(pattern) && Object.keys(pattern).length === 0) {
|
|
1490
|
+
delete result[key];
|
|
1491
|
+
changed = true;
|
|
1492
|
+
continue;
|
|
1493
|
+
}
|
|
1494
|
+
if (isConfigObject3(pattern) && isConfigObject3(current)) {
|
|
1495
|
+
const { changed: childChanged, result: childResult } = prune4(current, pattern);
|
|
1496
|
+
if (childChanged) {
|
|
1497
|
+
changed = true;
|
|
1498
|
+
}
|
|
1499
|
+
if (Object.keys(childResult).length === 0) {
|
|
1500
|
+
delete result[key];
|
|
1501
|
+
} else {
|
|
1502
|
+
result[key] = childResult;
|
|
1503
|
+
}
|
|
1504
|
+
continue;
|
|
1505
|
+
}
|
|
1506
|
+
delete result[key];
|
|
1507
|
+
changed = true;
|
|
1508
|
+
}
|
|
1509
|
+
return { changed, result };
|
|
1510
|
+
}
|
|
1511
|
+
var yamlFormat = {
|
|
1512
|
+
parse: parse5,
|
|
1513
|
+
serialize: serialize3,
|
|
1514
|
+
merge: merge4,
|
|
1515
|
+
prune: prune4
|
|
1516
|
+
};
|
|
1517
|
+
|
|
1352
1518
|
// packages/config-mutations/src/formats/index.ts
|
|
1353
1519
|
var formatRegistry = {
|
|
1354
1520
|
json: jsonFormat,
|
|
1355
|
-
toml: tomlFormat
|
|
1521
|
+
toml: tomlFormat,
|
|
1522
|
+
yaml: yamlFormat
|
|
1356
1523
|
};
|
|
1357
1524
|
var extensionMap = {
|
|
1358
1525
|
".json": "json",
|
|
1359
|
-
".toml": "toml"
|
|
1526
|
+
".toml": "toml",
|
|
1527
|
+
".yaml": "yaml",
|
|
1528
|
+
".yml": "yaml"
|
|
1360
1529
|
};
|
|
1361
1530
|
function getConfigFormat(pathOrFormat) {
|
|
1362
1531
|
if (pathOrFormat in formatRegistry) {
|
|
@@ -1505,7 +1674,7 @@ function pruneKeysByPrefix(table, prefix) {
|
|
|
1505
1674
|
}
|
|
1506
1675
|
return result;
|
|
1507
1676
|
}
|
|
1508
|
-
function
|
|
1677
|
+
function isConfigObject4(value) {
|
|
1509
1678
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
1510
1679
|
}
|
|
1511
1680
|
function mergeWithPruneByPrefix(base, patch, pruneByPrefix) {
|
|
@@ -1514,7 +1683,7 @@ function mergeWithPruneByPrefix(base, patch, pruneByPrefix) {
|
|
|
1514
1683
|
for (const [key, value] of Object.entries(patch)) {
|
|
1515
1684
|
const current = result[key];
|
|
1516
1685
|
const prefix = prefixMap[key];
|
|
1517
|
-
if (
|
|
1686
|
+
if (isConfigObject4(current) && isConfigObject4(value)) {
|
|
1518
1687
|
if (prefix) {
|
|
1519
1688
|
const pruned = pruneKeysByPrefix(current, prefix);
|
|
1520
1689
|
result[key] = { ...pruned, ...value };
|
|
@@ -2108,10 +2277,10 @@ async function runInstallStep(step, context) {
|
|
|
2108
2277
|
|
|
2109
2278
|
// src/providers/create-provider.ts
|
|
2110
2279
|
var templateImports = {
|
|
2111
|
-
"py-poe-spawn/env.
|
|
2112
|
-
"py-poe-spawn/main.py.
|
|
2113
|
-
"py-poe-spawn/requirements.txt.
|
|
2114
|
-
"codex/config.toml.
|
|
2280
|
+
"py-poe-spawn/env.mustache": () => Promise.resolve().then(() => __toESM(require_env(), 1)),
|
|
2281
|
+
"py-poe-spawn/main.py.mustache": () => Promise.resolve().then(() => __toESM(require_main_py(), 1)),
|
|
2282
|
+
"py-poe-spawn/requirements.txt.mustache": () => Promise.resolve().then(() => __toESM(require_requirements_txt(), 1)),
|
|
2283
|
+
"codex/config.toml.mustache": () => Promise.resolve().then(() => __toESM(require_config_toml(), 1))
|
|
2115
2284
|
};
|
|
2116
2285
|
async function loadTemplate(templateId) {
|
|
2117
2286
|
const loader = templateImports[templateId];
|
|
@@ -2134,6 +2303,7 @@ function createProvider(opts) {
|
|
|
2134
2303
|
supportsMcpSpawn: opts.supportsMcpSpawn,
|
|
2135
2304
|
configurePrompts: opts.configurePrompts,
|
|
2136
2305
|
postConfigureMessages: opts.postConfigureMessages,
|
|
2306
|
+
extendConfigurePayload: opts.extendConfigurePayload,
|
|
2137
2307
|
isolatedEnv: opts.isolatedEnv,
|
|
2138
2308
|
async configure(context, runOptions) {
|
|
2139
2309
|
await runMutations(opts.manifest.configure, {
|