poe-code 3.0.181 → 3.0.183

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 (187) hide show
  1. package/dist/bin/poe-agent.js +1 -1
  2. package/dist/cli/commands/config.js +3 -4
  3. package/dist/cli/commands/config.js.map +1 -1
  4. package/dist/cli/commands/configure.js +12 -3
  5. package/dist/cli/commands/configure.js.map +1 -1
  6. package/dist/cli/commands/dashboard-loop-shared.d.ts +7 -9
  7. package/dist/cli/commands/dashboard-loop-shared.js +16 -9
  8. package/dist/cli/commands/dashboard-loop-shared.js.map +1 -1
  9. package/dist/cli/commands/experiment.js +41 -32
  10. package/dist/cli/commands/experiment.js.map +1 -1
  11. package/dist/cli/commands/mcp.js +7 -2
  12. package/dist/cli/commands/mcp.js.map +1 -1
  13. package/dist/cli/commands/memory.d.ts +3 -0
  14. package/dist/cli/commands/memory.js +181 -0
  15. package/dist/cli/commands/memory.js.map +1 -0
  16. package/dist/cli/commands/pipeline-init.d.ts +17 -0
  17. package/dist/cli/commands/pipeline-init.js +166 -0
  18. package/dist/cli/commands/pipeline-init.js.map +1 -0
  19. package/dist/cli/commands/pipeline.js +187 -45
  20. package/dist/cli/commands/pipeline.js.map +1 -1
  21. package/dist/cli/commands/plan.d.ts +1 -0
  22. package/dist/cli/commands/plan.js +196 -39
  23. package/dist/cli/commands/plan.js.map +1 -1
  24. package/dist/cli/commands/ralph.js +24 -24
  25. package/dist/cli/commands/ralph.js.map +1 -1
  26. package/dist/cli/commands/shared.d.ts +3 -0
  27. package/dist/cli/commands/shared.js +27 -1
  28. package/dist/cli/commands/shared.js.map +1 -1
  29. package/dist/cli/commands/skill.js +21 -10
  30. package/dist/cli/commands/skill.js.map +1 -1
  31. package/dist/cli/commands/spawn-poe-agent.d.ts +2 -0
  32. package/dist/cli/commands/spawn-poe-agent.js +47 -0
  33. package/dist/cli/commands/spawn-poe-agent.js.map +1 -0
  34. package/dist/cli/commands/spawn.js +21 -1
  35. package/dist/cli/commands/spawn.js.map +1 -1
  36. package/dist/cli/commands/utils-symlink-agents.d.ts +6 -0
  37. package/dist/cli/commands/utils-symlink-agents.js +78 -0
  38. package/dist/cli/commands/utils-symlink-agents.js.map +1 -0
  39. package/dist/cli/commands/utils-symlink-ops.d.ts +29 -0
  40. package/dist/cli/commands/utils-symlink-ops.js +76 -0
  41. package/dist/cli/commands/utils-symlink-ops.js.map +1 -0
  42. package/dist/cli/commands/utils-symlink-skills.d.ts +15 -0
  43. package/dist/cli/commands/utils-symlink-skills.js +136 -0
  44. package/dist/cli/commands/utils-symlink-skills.js.map +1 -0
  45. package/dist/cli/commands/utils-symlink.d.ts +3 -0
  46. package/dist/cli/commands/utils-symlink.js +40 -0
  47. package/dist/cli/commands/utils-symlink.js.map +1 -0
  48. package/dist/cli/commands/utils.js +2 -0
  49. package/dist/cli/commands/utils.js.map +1 -1
  50. package/dist/cli/constants.d.ts +2 -2
  51. package/dist/cli/constants.js +1 -1
  52. package/dist/cli/constants.js.map +1 -1
  53. package/dist/cli/poe-agent-main.d.ts +10 -1
  54. package/dist/cli/poe-agent-main.js +89 -47
  55. package/dist/cli/poe-agent-main.js.map +1 -1
  56. package/dist/cli/program.js +13 -1
  57. package/dist/cli/program.js.map +1 -1
  58. package/dist/corpus/001-archaeoastronomy.md +479 -0
  59. package/dist/corpus/002-magnetohydrodynamics.md +475 -0
  60. package/dist/corpus/003-biosemiotics.md +483 -0
  61. package/dist/corpus/004-cryopedology.md +483 -0
  62. package/dist/corpus/005-geomicrobiology.md +479 -0
  63. package/dist/corpus/006-aeronomy.md +487 -0
  64. package/dist/corpus/007-paleoclimatology.md +479 -0
  65. package/dist/corpus/008-hydrogeophysics.md +479 -0
  66. package/dist/corpus/009-magnetostratigraphy.md +475 -0
  67. package/dist/corpus/010-isotope-hydrology.md +481 -0
  68. package/dist/corpus/011-speleothem-geochemistry.md +474 -0
  69. package/dist/corpus/012-astrobiogeochemistry.md +475 -0
  70. package/dist/corpus/013-neuroethology.md +483 -0
  71. package/dist/corpus/014-chronophysiology.md +483 -0
  72. package/dist/corpus/015-limnogeochemistry.md +475 -0
  73. package/dist/corpus/016-palynology.md +483 -0
  74. package/dist/corpus/017-volcanotectonics.md +473 -0
  75. package/dist/corpus/018-seismotectonics.md +473 -0
  76. package/dist/corpus/019-biogeomorphology.md +475 -0
  77. package/dist/corpus/020-geobiophysics.md +479 -0
  78. package/dist/corpus/021-phytolith-analysis.md +481 -0
  79. package/dist/corpus/022-archaeometallurgy.md +479 -0
  80. package/dist/corpus/023-paleomagnetism.md +479 -0
  81. package/dist/corpus/024-biocalorimetry.md +475 -0
  82. package/dist/corpus/025-atmospheric-chemiluminescence.md +473 -0
  83. package/dist/corpus/026-cryoseismology.md +479 -0
  84. package/dist/corpus/027-extremophile-radiobiology.md +475 -0
  85. package/dist/corpus/028-heliophysics.md +479 -0
  86. package/dist/corpus/029-astroparticle-geophysics.md +474 -0
  87. package/dist/corpus/030-glaciohydrology.md +479 -0
  88. package/dist/corpus/031-permafrost-microbiology.md +477 -0
  89. package/dist/corpus/032-ecoacoustics.md +479 -0
  90. package/dist/corpus/033-dendroclimatology.md +473 -0
  91. package/dist/corpus/034-ionospheric-tomography.md +477 -0
  92. package/dist/corpus/035-marine-geodesy.md +481 -0
  93. package/dist/corpus/036-sedimentary-ancient-dna.md +481 -0
  94. package/dist/corpus/037-myrmecochory-dynamics.md +474 -0
  95. package/dist/corpus/038-chemosensory-ecology.md +477 -0
  96. package/dist/corpus/039-spintronics-materials.md +479 -0
  97. package/dist/corpus/040-nanotoxicology.md +483 -0
  98. package/dist/corpus/041-cosmochemistry.md +483 -0
  99. package/dist/corpus/042-quaternary-geochronology.md +471 -0
  100. package/dist/corpus/043-biophotonics.md +479 -0
  101. package/dist/corpus/044-evolutionary-morphometrics.md +481 -0
  102. package/dist/corpus/045-cryovolcanology.md +475 -0
  103. package/dist/corpus/046-exoplanet-atmospheric-dynamics.md +479 -0
  104. package/dist/corpus/047-microbial-electrosynthesis.md +477 -0
  105. package/dist/corpus/048-paleoseismology.md +479 -0
  106. package/dist/corpus/049-actinide-geochemistry.md +477 -0
  107. package/dist/corpus/050-quantum-biology.md +489 -0
  108. package/dist/index.d.ts +3 -2
  109. package/dist/index.js +31666 -23440
  110. package/dist/index.js.map +4 -4
  111. package/dist/plan/document-schema.d.ts +21 -0
  112. package/dist/plan/document-schema.js +16 -0
  113. package/dist/plan/document-schema.js.map +1 -0
  114. package/dist/providers/claude-code.js +31 -13
  115. package/dist/providers/claude-code.js.map +4 -4
  116. package/dist/providers/codex.js +31 -13
  117. package/dist/providers/codex.js.map +4 -4
  118. package/dist/providers/goose.js +32 -14
  119. package/dist/providers/goose.js.map +4 -4
  120. package/dist/providers/kimi.js +31 -13
  121. package/dist/providers/kimi.js.map +4 -4
  122. package/dist/providers/opencode.js +32 -14
  123. package/dist/providers/opencode.js.map +4 -4
  124. package/dist/providers/poe-agent.d.ts +5 -0
  125. package/dist/providers/poe-agent.js +21214 -4016
  126. package/dist/providers/poe-agent.js.map +4 -4
  127. package/dist/sdk/container.js +4 -0
  128. package/dist/sdk/container.js.map +1 -1
  129. package/dist/sdk/pipeline.d.ts +27 -0
  130. package/dist/sdk/pipeline.js +91 -1
  131. package/dist/sdk/pipeline.js.map +1 -1
  132. package/dist/sdk/spawn.js +8 -2
  133. package/dist/sdk/spawn.js.map +1 -1
  134. package/dist/sdk/types.d.ts +5 -1
  135. package/dist/services/config.d.ts +47 -33
  136. package/dist/services/config.js +22 -20
  137. package/dist/services/config.js.map +1 -1
  138. package/dist/templates/pipeline/SKILL_plan.md +22 -8
  139. package/dist/templates/pipeline/steps.yaml.mustache +1 -1
  140. package/dist/templates/skill/poe-generate.md +47 -0
  141. package/dist/templates/skill/terminal-pilot.md +45 -0
  142. package/dist/utils/dry-run.d.ts +8 -0
  143. package/dist/utils/dry-run.js +16 -0
  144. package/dist/utils/dry-run.js.map +1 -1
  145. package/dist/utils/file-system.d.ts +4 -0
  146. package/package.json +19 -9
  147. package/packages/cmdkit/dist/cli.js +42 -22
  148. package/packages/cmdkit/dist/cli.js.map +3 -3
  149. package/packages/cmdkit/dist/index.js +52 -9
  150. package/packages/cmdkit/dist/index.js.map +2 -2
  151. package/packages/cmdkit/dist/mcp.d.ts +15 -0
  152. package/packages/cmdkit/dist/mcp.js +121 -20
  153. package/packages/cmdkit/dist/mcp.js.map +3 -3
  154. package/packages/cmdkit/dist/number-schema.d.ts +3 -0
  155. package/packages/cmdkit/dist/number-schema.js +8 -0
  156. package/packages/cmdkit/dist/schema-scope.d.ts +4 -0
  157. package/packages/cmdkit/dist/schema-scope.js +34 -0
  158. package/packages/cmdkit/dist/sdk.js +58 -3
  159. package/packages/cmdkit/dist/sdk.js.map +3 -3
  160. package/packages/cmdkit-schema/dist/index.compile-check.js +1 -0
  161. package/packages/cmdkit-schema/dist/index.d.ts +59 -16
  162. package/packages/cmdkit-schema/dist/index.js +53 -8
  163. package/packages/design-system/dist/dashboard/components/footer.js +2 -3
  164. package/packages/design-system/dist/dashboard/components/output-pane.d.ts +1 -10
  165. package/packages/design-system/dist/dashboard/components/output-pane.js +5 -74
  166. package/packages/design-system/dist/dashboard/dashboard.js +6 -26
  167. package/packages/design-system/dist/dashboard/index.d.ts +1 -0
  168. package/packages/design-system/dist/dashboard/index.js +1 -0
  169. package/packages/design-system/dist/dashboard/keymap.js +4 -19
  170. package/packages/design-system/dist/dashboard/should-use-dashboard.d.ts +10 -0
  171. package/packages/design-system/dist/dashboard/should-use-dashboard.js +7 -0
  172. package/packages/design-system/dist/dashboard/snapshot.js +1 -5
  173. package/packages/design-system/dist/dashboard/store.d.ts +1 -2
  174. package/packages/design-system/dist/dashboard/store.js +6 -62
  175. package/packages/design-system/dist/dashboard/terminal.d.ts +2 -0
  176. package/packages/design-system/dist/dashboard/terminal.js +18 -0
  177. package/packages/design-system/dist/dashboard/types.d.ts +1 -11
  178. package/packages/design-system/dist/index.d.ts +1 -1
  179. package/packages/design-system/dist/index.js +1 -1
  180. package/packages/design-system/dist/terminal-markdown/ast.d.ts +10 -2
  181. package/packages/design-system/dist/terminal-markdown/parser/block.d.ts +2 -1
  182. package/packages/design-system/dist/terminal-markdown/parser/block.js +400 -110
  183. package/packages/design-system/dist/terminal-markdown/parser/frontmatter.d.ts +2 -0
  184. package/packages/design-system/dist/terminal-markdown/parser/frontmatter.js +28 -11
  185. package/packages/design-system/dist/terminal-markdown/parser/inline.d.ts +4 -0
  186. package/packages/design-system/dist/terminal-markdown/parser/inline.js +134 -55
  187. package/packages/design-system/dist/terminal-markdown/parser.js +36 -7
@@ -0,0 +1,76 @@
1
+ import { dirname } from "node:path";
2
+ import { isNotFound } from "@poe-code/config-mutations";
3
+ export async function tryLstat(fs, path) {
4
+ try {
5
+ return await fs.lstat(path);
6
+ }
7
+ catch (error) {
8
+ if (isNotFound(error)) {
9
+ return null;
10
+ }
11
+ throw error;
12
+ }
13
+ }
14
+ export function formatLoggedPath(message, env) {
15
+ return message
16
+ .replaceAll(`${env.cwd}/`, "")
17
+ .replaceAll(`${env.homeDir}/`, "~/");
18
+ }
19
+ export function isPermissionError(error) {
20
+ return (error instanceof Error &&
21
+ "code" in error &&
22
+ (error.code === "EACCES" || error.code === "EPERM"));
23
+ }
24
+ export async function applySymlinkOps(fs, ops, opts) {
25
+ let conflicts = 0;
26
+ for (const op of ops) {
27
+ switch (op.kind) {
28
+ case "rename": {
29
+ opts.log(`rename ${op.from} -> ${op.to}`);
30
+ if (!opts.dryRun) {
31
+ await fs.mkdir(dirname(op.to), { recursive: true });
32
+ await fs.rename(op.from, op.to);
33
+ }
34
+ break;
35
+ }
36
+ case "symlink": {
37
+ opts.log(`symlink ${op.path} -> ${op.target}`);
38
+ if (!opts.dryRun) {
39
+ await fs.mkdir(dirname(op.path), { recursive: true });
40
+ await fs.symlink(op.target, op.path);
41
+ }
42
+ break;
43
+ }
44
+ case "noop": {
45
+ opts.log(op.reason);
46
+ break;
47
+ }
48
+ case "conflict": {
49
+ conflicts += 1;
50
+ opts.log(op.message);
51
+ break;
52
+ }
53
+ default: {
54
+ const neverOp = op;
55
+ throw new Error(`Unsupported symlink op: ${neverOp.kind}`);
56
+ }
57
+ }
58
+ }
59
+ return { conflicts };
60
+ }
61
+ export async function isSymlinkPointingTo(fs, path, expectedTarget) {
62
+ try {
63
+ const stats = await fs.lstat(path);
64
+ if (!stats.isSymbolicLink()) {
65
+ return false;
66
+ }
67
+ return (await fs.readlink(path)) === expectedTarget;
68
+ }
69
+ catch (error) {
70
+ if (isNotFound(error)) {
71
+ return false;
72
+ }
73
+ throw error;
74
+ }
75
+ }
76
+ //# sourceMappingURL=utils-symlink-ops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils-symlink-ops.js","sourceRoot":"","sources":["../../../src/cli/commands/utils-symlink-ops.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { Command } from "commander";
2
+ import type { CliContainer } from "../container.js";
3
+ import type { FileSystem } from "../../utils/file-system.js";
4
+ import { type SymlinkOp } from "./utils-symlink-ops.js";
5
+ export interface SkillsTargets {
6
+ claudeDir: string;
7
+ agentsDir: string;
8
+ relativeTargetFromClaude: string;
9
+ }
10
+ export declare function registerUtilsSymlinkSkillsCommand(parent: Command, container: CliContainer): void;
11
+ export declare function resolveSkillsTargets(scope: "local" | "global", env: {
12
+ cwd: string;
13
+ homeDir: string;
14
+ }): SkillsTargets;
15
+ export declare function planSkillsSymlink(fs: FileSystem, targets: SkillsTargets): Promise<SymlinkOp[]>;
@@ -0,0 +1,136 @@
1
+ import { join } from "node:path";
2
+ import { cancel, isCancel, select } from "@poe-code/design-system";
3
+ import { resolveCommandFlags } from "./shared.js";
4
+ import { applySymlinkOps, formatLoggedPath, isPermissionError, isSymlinkPointingTo, tryLstat } from "./utils-symlink-ops.js";
5
+ export function registerUtilsSymlinkSkillsCommand(parent, container) {
6
+ parent
7
+ .command("skills")
8
+ .description("Move .claude/skills into .agents/skills and symlink it back.")
9
+ .configureHelp({})
10
+ .option("--dry-run", "Simulate commands without writing changes.")
11
+ .option("--cwd <dir>", "Operate on <dir> instead of the current working directory.")
12
+ .option("--local", "Use local scope (in the current project)")
13
+ .option("--global", "Use global scope (in the user home directory)")
14
+ .option("-y, --yes", "Accept defaults, skip prompts")
15
+ .action(async function (options) {
16
+ const flags = resolveCommandFlags(this);
17
+ const logger = container.loggerFactory.create({
18
+ dryRun: flags.dryRun,
19
+ verbose: flags.verbose,
20
+ scope: "utils:symlink:skills"
21
+ });
22
+ if (container.env.platform === "win32") {
23
+ logger.error("Symlink commands are not supported on Windows.");
24
+ process.exitCode = 2;
25
+ return;
26
+ }
27
+ if (options.local && options.global) {
28
+ logger.error("Use either --local or --global, not both.");
29
+ process.exitCode = 1;
30
+ return;
31
+ }
32
+ let scope;
33
+ if (options.local) {
34
+ scope = "local";
35
+ }
36
+ else if (options.global) {
37
+ scope = "global";
38
+ }
39
+ else if (flags.assumeYes) {
40
+ scope = "global";
41
+ }
42
+ else {
43
+ const selected = await select({
44
+ message: "Select scope:",
45
+ options: [
46
+ { value: "global", label: "Global" },
47
+ { value: "local", label: "Local" }
48
+ ]
49
+ });
50
+ if (isCancel(selected)) {
51
+ cancel("Operation cancelled");
52
+ return;
53
+ }
54
+ scope = selected;
55
+ }
56
+ const targetCwd = options.cwd ?? container.env.cwd;
57
+ const targets = resolveSkillsTargets(scope, {
58
+ cwd: targetCwd,
59
+ homeDir: container.env.homeDir
60
+ });
61
+ try {
62
+ const ops = await planSkillsSymlink(container.fs, targets);
63
+ const result = await applySymlinkOps(container.fs, ops, {
64
+ dryRun: flags.dryRun,
65
+ log: (message) => {
66
+ logger.info(formatLoggedPath(message, {
67
+ cwd: targetCwd,
68
+ homeDir: container.env.homeDir
69
+ }));
70
+ }
71
+ });
72
+ process.exitCode = result.conflicts > 0 ? 1 : 0;
73
+ }
74
+ catch (error) {
75
+ if (isPermissionError(error)) {
76
+ logger.error(error.message);
77
+ process.exitCode = 2;
78
+ return;
79
+ }
80
+ throw error;
81
+ }
82
+ });
83
+ }
84
+ export function resolveSkillsTargets(scope, env) {
85
+ const baseDir = scope === "local" ? env.cwd : env.homeDir;
86
+ return {
87
+ claudeDir: join(baseDir, ".claude", "skills"),
88
+ agentsDir: join(baseDir, ".agents", "skills"),
89
+ relativeTargetFromClaude: "../.agents/skills"
90
+ };
91
+ }
92
+ export async function planSkillsSymlink(fs, targets) {
93
+ const claudeStats = await tryLstat(fs, targets.claudeDir);
94
+ const agentsStats = await tryLstat(fs, targets.agentsDir);
95
+ if (await isSymlinkPointingTo(fs, targets.claudeDir, targets.relativeTargetFromClaude)) {
96
+ return [{ kind: "noop", reason: "already linked" }];
97
+ }
98
+ if (claudeStats?.isSymbolicLink()) {
99
+ const target = await fs.readlink(targets.claudeDir);
100
+ return [
101
+ {
102
+ kind: "conflict",
103
+ message: `.claude/skills is already a symlink to ${target}. Remove it or repoint it manually.`
104
+ }
105
+ ];
106
+ }
107
+ if (claudeStats && agentsStats) {
108
+ return [
109
+ {
110
+ kind: "conflict",
111
+ message: "both .claude/skills and .agents/skills exist. Resolve manually: move the files you want to keep into .agents/skills, remove .claude/skills, then re-run this command."
112
+ }
113
+ ];
114
+ }
115
+ if (!claudeStats && !agentsStats) {
116
+ return [{ kind: "noop", reason: "no .claude/skills found — nothing to do" }];
117
+ }
118
+ if (!claudeStats && agentsStats) {
119
+ return [
120
+ {
121
+ kind: "symlink",
122
+ target: targets.relativeTargetFromClaude,
123
+ path: targets.claudeDir
124
+ }
125
+ ];
126
+ }
127
+ return [
128
+ { kind: "rename", from: targets.claudeDir, to: targets.agentsDir },
129
+ {
130
+ kind: "symlink",
131
+ target: targets.relativeTargetFromClaude,
132
+ path: targets.claudeDir
133
+ }
134
+ ];
135
+ }
136
+ //# sourceMappingURL=utils-symlink-skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils-symlink-skills.js","sourceRoot":"","sources":["../../../src/cli/commands/utils-symlink-skills.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from "commander";
2
+ import type { CliContainer } from "../container.js";
3
+ export declare function registerUtilsSymlinkCommand(parent: Command, container: CliContainer): void;
@@ -0,0 +1,40 @@
1
+ import { throwCommandNotFound } from "../command-not-found.js";
2
+ import { registerUtilsSymlinkAgentsCommand } from "./utils-symlink-agents.js";
3
+ import { registerUtilsSymlinkSkillsCommand } from "./utils-symlink-skills.js";
4
+ export function registerUtilsSymlinkCommand(parent, container) {
5
+ const symlink = parent
6
+ .command("symlink")
7
+ .description("Keep agent tool files interchangeable via symlinks.")
8
+ .usage("[options] [command]")
9
+ .addHelpCommand(false)
10
+ .allowExcessArguments()
11
+ .configureHelp({
12
+ formatHelp: () => [
13
+ "Poe - utils symlink",
14
+ "",
15
+ "Usage: poe-code utils symlink [options] [command]",
16
+ "",
17
+ "Keep agent tool files interchangeable via symlinks.",
18
+ "",
19
+ "Commands:",
20
+ " agents Symlink CLAUDE.md <- AGENTS.md (AGENTS.md is canonical).",
21
+ " skills Move .claude/skills into .agents/skills and symlink it back.",
22
+ ""
23
+ ].join("\n")
24
+ })
25
+ .action(function () {
26
+ if (this.args.length > 0) {
27
+ throwCommandNotFound({
28
+ container,
29
+ scope: "cli",
30
+ unknownCommand: this.args.at(0) ?? "",
31
+ helpArgs: ["utils", "symlink", "--help"],
32
+ moduleUrl: import.meta.url
33
+ });
34
+ }
35
+ this.help();
36
+ });
37
+ registerUtilsSymlinkAgentsCommand(symlink, container);
38
+ registerUtilsSymlinkSkillsCommand(symlink, container);
39
+ }
40
+ //# sourceMappingURL=utils-symlink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils-symlink.js","sourceRoot":"","sources":["../../../src/cli/commands/utils-symlink.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,iCAAiC,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,EAAE,iCAAiC,EAAE,MAAM,2BAA2B,CAAC;AAE9E,MAAM,UAAU,2BAA2B,CACzC,MAAe,EACf,SAAuB;IAEvB,MAAM,OAAO,GAAG,MAAM;SACnB,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,qDAAqD,CAAC;SAClE,KAAK,CAAC,qBAAqB,CAAC;SAC5B,cAAc,CAAC,KAAK,CAAC;SACrB,oBAAoB,EAAE;SACtB,aAAa,CAAC;QACb,UAAU,EAAE,GAAG,EAAE,CAAC;YAChB,qBAAqB;YACrB,EAAE;YACF,mDAAmD;YACnD,EAAE;YACF,qDAAqD;YACrD,EAAE;YACF,WAAW;YACX,qEAAqE;YACrE,yEAAyE;YACzE,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC;KACb,CAAC;SACD,MAAM,CAAC;QACN,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,oBAAoB,CAAC;gBACnB,SAAS;gBACT,KAAK,EAAE,KAAK;gBACZ,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE;gBACrC,QAAQ,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC;gBACxC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG;aAC3B,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEL,iCAAiC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACtD,iCAAiC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AACxD,CAAC"}
@@ -1,9 +1,11 @@
1
1
  import { registerConfigCommand } from "./config.js";
2
+ import { registerUtilsSymlinkCommand } from "./utils-symlink.js";
2
3
  export function registerUtilsCommand(program, container) {
3
4
  const utils = program
4
5
  .command("utils")
5
6
  .description("Utility commands for inspecting and managing poe-code.")
6
7
  .addHelpCommand(false);
7
8
  registerConfigCommand(utils, container);
9
+ registerUtilsSymlinkCommand(utils, container);
8
10
  }
9
11
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/cli/commands/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEpD,MAAM,UAAU,oBAAoB,CAAC,OAAgB,EAAE,SAAuB;IAC5E,MAAM,KAAK,GAAG,OAAO;SAClB,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,wDAAwD,CAAC;SACrE,cAAc,CAAC,KAAK,CAAC,CAAC;IAEzB,qBAAqB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAC1C,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/cli/commands/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAEjE,MAAM,UAAU,oBAAoB,CAAC,OAAgB,EAAE,SAAuB;IAC5E,MAAM,KAAK,GAAG,OAAO;SAClB,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,wDAAwD,CAAC;SACrE,cAAc,CAAC,KAAK,CAAC,CAAC;IAEzB,qBAAqB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACxC,2BAA2B,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAChD,CAAC"}
@@ -1,5 +1,5 @@
1
1
  export declare const FRONTIER_MODELS: readonly ["anthropic/claude-opus-4.7", "anthropic/claude-sonnet-4.6", "openai/gpt-5.3-codex", "openai/gpt-5.4", "google/gemini-3.1-pro"];
2
- export declare const DEFAULT_FRONTIER_MODEL = "anthropic/claude-sonnet-4.6";
2
+ export declare const DEFAULT_FRONTIER_MODEL = "anthropic/claude-opus-4.7";
3
3
  export declare const DEFAULT_TEXT_MODEL = "anthropic/claude-sonnet-4.6";
4
4
  export declare const DEFAULT_IMAGE_BOT = "google/nano-banana-pro";
5
5
  export declare const DEFAULT_AUDIO_BOT = "elevenlabs/elevenlabs-v3";
@@ -20,7 +20,7 @@ export declare const DEFAULT_CODEX_MODEL: "openai/gpt-5.4";
20
20
  export declare const KIMI_MODELS: readonly ["novitaai/kimi-k2.5", "novitaai/kimi-k2-thinking", "novitaai/kimi-k2.5-fw"];
21
21
  export declare const DEFAULT_KIMI_MODEL: "novitaai/kimi-k2.5";
22
22
  export declare const GOOSE_MODELS: readonly ["anthropic/claude-opus-4.7", "anthropic/claude-sonnet-4.6", "openai/gpt-5.3-codex", "openai/gpt-5.4", "google/gemini-3.1-pro"];
23
- export declare const DEFAULT_GOOSE_MODEL = "anthropic/claude-sonnet-4.6";
23
+ export declare const DEFAULT_GOOSE_MODEL = "anthropic/claude-opus-4.7";
24
24
  export declare const DEFAULT_REASONING = "medium";
25
25
  export declare const PROVIDER_NAME = "poe";
26
26
  export declare const FEEDBACK_URL = "https://github.com/poe-platform/poe-code/issues";
@@ -5,7 +5,7 @@ export const FRONTIER_MODELS = [
5
5
  "openai/gpt-5.4",
6
6
  "google/gemini-3.1-pro"
7
7
  ];
8
- export const DEFAULT_FRONTIER_MODEL = "anthropic/claude-sonnet-4.6";
8
+ export const DEFAULT_FRONTIER_MODEL = "anthropic/claude-opus-4.7";
9
9
  export const DEFAULT_TEXT_MODEL = "anthropic/claude-sonnet-4.6";
10
10
  export const DEFAULT_IMAGE_BOT = "google/nano-banana-pro";
11
11
  export const DEFAULT_AUDIO_BOT = "elevenlabs/elevenlabs-v3";
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/cli/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,2BAA2B;IAC3B,6BAA6B;IAC7B,sBAAsB;IACtB,gBAAgB;IAChB,uBAAuB;CACf,CAAC;AAEX,MAAM,CAAC,MAAM,sBAAsB,GAAG,6BAA6B,CAAC;AAEpE,MAAM,CAAC,MAAM,kBAAkB,GAAG,6BAA6B,CAAC;AAChE,MAAM,CAAC,MAAM,iBAAiB,GAAG,wBAAwB,CAAC;AAC1D,MAAM,CAAC,MAAM,iBAAiB,GAAG,0BAA0B,CAAC;AAC5D,MAAM,CAAC,MAAM,iBAAiB,GAAG,gBAAgB,CAAC;AAElD,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,KAAK,EAAE,4BAA4B;IACnC,MAAM,EAAE,6BAA6B;IACrC,IAAI,EAAE,2BAA2B;CACzB,CAAC;AAEX,MAAM,CAAC,MAAM,yBAAyB,GAAG,oBAAoB,CAAC,MAAM,CAAC;AAErE;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,EAAE,GAAG,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IACnE,OAAO,EAAE,CAAC,WAAW,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,gBAAgB;IAChB,sBAAsB;IACtB,4BAA4B;IAC5B,sBAAsB;IACtB,gBAAgB;IAChB,qBAAqB;IACrB,oBAAoB;IACpB,gBAAgB;IAChB,2BAA2B;IAC3B,2BAA2B;CACnB,CAAC;AACX,MAAM,CAAC,MAAM,mBAAmB,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;AAEnD,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,oBAAoB;IACpB,2BAA2B;IAC3B,uBAAuB;CACf,CAAC;AACX,MAAM,CAAC,MAAM,kBAAkB,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AAEjD,MAAM,CAAC,MAAM,YAAY,GAAG,eAAe,CAAC;AAC5C,MAAM,CAAC,MAAM,mBAAmB,GAAG,sBAAsB,CAAC;AAE1D,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AAC1C,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC;AACnC,MAAM,CAAC,MAAM,YAAY,GAAG,iDAAiD,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/cli/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,2BAA2B;IAC3B,6BAA6B;IAC7B,sBAAsB;IACtB,gBAAgB;IAChB,uBAAuB;CACf,CAAC;AAEX,MAAM,CAAC,MAAM,sBAAsB,GAAG,2BAA2B,CAAC;AAElE,MAAM,CAAC,MAAM,kBAAkB,GAAG,6BAA6B,CAAC;AAChE,MAAM,CAAC,MAAM,iBAAiB,GAAG,wBAAwB,CAAC;AAC1D,MAAM,CAAC,MAAM,iBAAiB,GAAG,0BAA0B,CAAC;AAC5D,MAAM,CAAC,MAAM,iBAAiB,GAAG,gBAAgB,CAAC;AAElD,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,KAAK,EAAE,4BAA4B;IACnC,MAAM,EAAE,6BAA6B;IACrC,IAAI,EAAE,2BAA2B;CACzB,CAAC;AAEX,MAAM,CAAC,MAAM,yBAAyB,GAAG,oBAAoB,CAAC,MAAM,CAAC;AAErE;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,EAAE,GAAG,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IACnE,OAAO,EAAE,CAAC,WAAW,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,gBAAgB;IAChB,sBAAsB;IACtB,4BAA4B;IAC5B,sBAAsB;IACtB,gBAAgB;IAChB,qBAAqB;IACrB,oBAAoB;IACpB,gBAAgB;IAChB,2BAA2B;IAC3B,2BAA2B;CACnB,CAAC;AACX,MAAM,CAAC,MAAM,mBAAmB,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;AAEnD,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,oBAAoB;IACpB,2BAA2B;IAC3B,uBAAuB;CACf,CAAC;AACX,MAAM,CAAC,MAAM,kBAAkB,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AAEjD,MAAM,CAAC,MAAM,YAAY,GAAG,eAAe,CAAC;AAC5C,MAAM,CAAC,MAAM,mBAAmB,GAAG,sBAAsB,CAAC;AAE1D,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AAC1C,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC;AACnC,MAAM,CAAC,MAAM,YAAY,GAAG,iDAAiD,CAAC"}
@@ -1,3 +1,12 @@
1
1
  import { Command } from "commander";
2
- export declare function createPoeAgentProgram(): Command;
2
+ import type { FileSystem } from "../utils/file-system.js";
3
+ type PoeAgentConfigFs = Pick<FileSystem, "mkdir" | "readFile" | "writeFile">;
4
+ interface PoeAgentProgramOptions {
5
+ cwd?: string;
6
+ homeDir?: string;
7
+ fs?: PoeAgentConfigFs;
8
+ }
9
+ export declare function createPoeAgentProgram(options?: PoeAgentProgramOptions): Command;
10
+ export declare function normalizePoeAgentArgv(argv: string[]): string[];
3
11
  export declare function poeAgentMain(): Promise<void>;
12
+ export {};
@@ -1,7 +1,11 @@
1
+ import os from "node:os";
1
2
  import path from "node:path";
3
+ import fsPromises from "node:fs/promises";
2
4
  import { Command } from "commander";
3
5
  import { renderAcpStream } from "@poe-code/agent-spawn";
4
6
  import { log } from "@poe-code/design-system";
7
+ import { createConfigStore, resolveConfigPath, resolveProjectConfigPath } from "@poe-code/poe-code-config";
8
+ import { agentConfigScope } from "../services/config.js";
5
9
  import { DEFAULT_FRONTIER_MODEL, FEEDBACK_URL } from "./constants.js";
6
10
  import { ValidationError } from "./errors.js";
7
11
  function parseMcpSpawnConfig(input) {
@@ -65,66 +69,104 @@ function resolveWorkingDirectory(baseDir, candidate) {
65
69
  }
66
70
  return path.resolve(baseDir, candidate);
67
71
  }
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")
72
+ function configurePoeAgentRunOptions(command) {
73
+ return command
74
+ .option("-y, --yes", "Accept configured defaults without prompting")
74
75
  .option("--model <model>", "Model identifier override")
76
+ .option("--prompt <text>", "Prompt text to send")
75
77
  .option("-C, --cwd <path>", "Working directory for the agent")
76
78
  .option("--stdin", "Read the prompt from stdin")
77
79
  .option("--mcp-servers <json>", "MCP server config JSON: {name: {command, args?, env?}}")
78
80
  .option("--mcp-config <json>", "[deprecated: use --mcp-servers]")
79
81
  .argument("[prompt]", "Prompt text to send (or '-' / stdin)")
80
- .argument("[args...]", "Additional arguments forwarded to the agent")
81
- .action(async function (promptText, _args = []) {
82
- const commandOptions = this.opts();
83
- const mcpServers = parseMcpSpawnConfig(commandOptions.mcpServers ?? commandOptions.mcpConfig);
84
- const cwdOverride = resolveWorkingDirectory(process.cwd(), commandOptions.cwd);
85
- const wantsStdinFlag = commandOptions.stdin === true;
86
- const shouldReadFromStdin = wantsStdinFlag ||
87
- promptText === "-" ||
88
- (!promptText && !process.stdin.isTTY);
89
- if (wantsStdinFlag || promptText === "-") {
90
- promptText = undefined;
91
- }
92
- if (!promptText && shouldReadFromStdin) {
93
- const chunks = [];
94
- for await (const chunk of process.stdin) {
95
- chunks.push(chunk);
96
- }
97
- promptText = Buffer.concat(chunks).toString("utf8").trim();
98
- }
99
- if (!promptText) {
100
- throw new ValidationError("No prompt provided via argument or stdin");
101
- }
102
- const { spawnPoeAgentWithAcp } = await import("../providers/poe-agent.js");
103
- const { events, done } = spawnPoeAgentWithAcp({
104
- prompt: promptText,
105
- model: commandOptions.model ?? DEFAULT_FRONTIER_MODEL,
106
- cwd: cwdOverride ?? process.cwd(),
107
- mcpServers,
108
- });
109
- await renderAcpStream(events);
110
- const result = await done;
111
- if (result.exitCode !== 0) {
112
- const detail = result.stderr.trim() || result.stdout.trim();
113
- const suffix = detail ? `: ${detail}` : "";
114
- throw new Error(`poe-agent failed with exit code ${result.exitCode}${suffix}`);
115
- }
116
- const trimmedStdout = result.stdout.trim();
117
- if (trimmedStdout) {
118
- log.info(trimmedStdout);
82
+ .argument("[args...]", "Additional arguments forwarded to the agent");
83
+ }
84
+ async function runPoeAgentCommand(options) {
85
+ const mcpServers = parseMcpSpawnConfig(options.commandOptions.mcpServers ?? options.commandOptions.mcpConfig);
86
+ const cwdOverride = resolveWorkingDirectory(options.baseDir, options.commandOptions.cwd);
87
+ const cwd = cwdOverride ?? options.baseDir;
88
+ const configStore = createConfigStore({
89
+ fs: options.fs,
90
+ filePath: resolveConfigPath(options.homeDir),
91
+ projectFilePath: resolveProjectConfigPath(cwd)
92
+ });
93
+ const configuredModel = (await configStore.scope(agentConfigScope).get("model")).trim();
94
+ const model = options.commandOptions.model ?? configuredModel;
95
+ if (options.commandOptions.yes && model.length === 0) {
96
+ throw new ValidationError("Error: --model is required in non-interactive mode (--yes) and no agent.model is configured.");
97
+ }
98
+ let promptText = options.commandOptions.prompt ?? options.promptText;
99
+ const wantsStdinFlag = options.commandOptions.stdin === true;
100
+ const shouldReadFromStdin = wantsStdinFlag ||
101
+ promptText === "-" ||
102
+ (!promptText && !process.stdin.isTTY);
103
+ if (wantsStdinFlag || promptText === "-") {
104
+ promptText = undefined;
105
+ }
106
+ if (!promptText && shouldReadFromStdin) {
107
+ const chunks = [];
108
+ for await (const chunk of process.stdin) {
109
+ chunks.push(chunk);
119
110
  }
120
- process.exitCode = result.exitCode;
111
+ promptText = Buffer.concat(chunks).toString("utf8").trim();
112
+ }
113
+ if (!promptText) {
114
+ throw new ValidationError("No prompt provided via argument or stdin");
115
+ }
116
+ const { spawnPoeAgentWithAcp } = await import("../providers/poe-agent.js");
117
+ const { events, done } = spawnPoeAgentWithAcp({
118
+ prompt: promptText,
119
+ model: model || DEFAULT_FRONTIER_MODEL,
120
+ cwd,
121
+ mcpServers,
122
+ homeDir: options.homeDir,
123
+ configPath: resolveConfigPath(options.homeDir),
124
+ projectConfigPath: resolveProjectConfigPath(cwd),
125
+ fs: options.fs,
121
126
  });
127
+ await renderAcpStream(events);
128
+ const result = await done;
129
+ if (result.exitCode !== 0) {
130
+ const detail = result.stderr.trim() || result.stdout.trim();
131
+ const suffix = detail ? `: ${detail}` : "";
132
+ throw new Error(`poe-agent failed with exit code ${result.exitCode}${suffix}`);
133
+ }
134
+ const trimmedStdout = result.stdout.trim();
135
+ if (trimmedStdout) {
136
+ log.info(trimmedStdout);
137
+ }
138
+ process.exitCode = result.exitCode;
139
+ }
140
+ export function createPoeAgentProgram(options = {}) {
141
+ const program = new Command();
142
+ const baseDir = options.cwd ?? process.cwd();
143
+ const homeDir = options.homeDir ?? os.homedir();
144
+ const fs = options.fs ?? fsPromises;
145
+ const runAction = async function (promptText, _args = [], commandOptions) {
146
+ await runPoeAgentCommand({
147
+ baseDir,
148
+ homeDir,
149
+ fs,
150
+ promptText,
151
+ commandOptions
152
+ });
153
+ };
154
+ configurePoeAgentRunOptions(program
155
+ .name("poe-agent")
156
+ .description("Run a single prompt through the Poe agent runtime.")
157
+ .version("0.0.0")).action(runAction);
122
158
  return program;
123
159
  }
160
+ export function normalizePoeAgentArgv(argv) {
161
+ if (argv[2] !== "run") {
162
+ return argv;
163
+ }
164
+ return [argv[0] ?? "node", argv[1] ?? "poe-agent", ...argv.slice(3)];
165
+ }
124
166
  export async function poeAgentMain() {
125
167
  const program = createPoeAgentProgram();
126
168
  try {
127
- await program.parseAsync(process.argv);
169
+ await program.parseAsync(normalizePoeAgentArgv(process.argv));
128
170
  }
129
171
  catch (error) {
130
172
  if (error instanceof Error) {
@@ -1 +1 @@
1
- {"version":3,"file":"poe-agent-main.js","sourceRoot":"","sources":["../../src/cli/poe-agent-main.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"poe-agent-main.js","sourceRoot":"","sources":["../../src/cli/poe-agent-main.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ import { text } from "@poe-code/design-system";
8
8
  import { registerConfigureCommand } from "./commands/configure.js";
9
9
  import { registerAgentCommand } from "./commands/agent.js";
10
10
  import { registerSpawnCommand } from "./commands/spawn.js";
11
+ import { createPoeAgentSpawnHandler } from "./commands/spawn-poe-agent.js";
11
12
  import { registerWrapCommand } from "./commands/wrap.js";
12
13
  import { registerLoginCommand } from "./commands/login.js";
13
14
  import { registerLogoutCommand } from "./commands/logout.js";
@@ -27,6 +28,7 @@ import { registerPlanCommand } from "./commands/plan.js";
27
28
  import { registerRalphCommand } from "./commands/ralph.js";
28
29
  import { registerExperimentCommand } from "./commands/experiment.js";
29
30
  import { registerLaunchCommand } from "./commands/launch.js";
31
+ import { registerMemoryCommand } from "./commands/memory.js";
30
32
  import packageJson from "../../package.json" with { type: "json" };
31
33
  import { throwCommandNotFound } from "./command-not-found.js";
32
34
  import { detectExecutionContext, formatCliHelpCommand, formatCliUsageCommand } from "../utils/execution-context.js";
@@ -68,6 +70,12 @@ const ROOT_HELP_COMMAND_SPECS = [
68
70
  { path: ["plan"], args: "[question]" },
69
71
  { path: ["plan", "install"] },
70
72
  { path: ["plan", "browse"] },
73
+ { path: ["plan", "markdown-read"], args: "<file>" },
74
+ { path: ["plan", "markdown-read-section"], args: "<file> <section>" },
75
+ { path: ["plan", "markdown-reader-mcp"] },
76
+ { path: ["memory", "init"] },
77
+ { path: ["memory", "ls"] },
78
+ { path: ["memory", "status"] },
71
79
  { path: ["experiment", "install"] },
72
80
  { path: ["experiment", "run"] },
73
81
  { path: ["experiment", "journal"] },
@@ -304,7 +312,10 @@ function bootstrapProgram(container) {
304
312
  registerInstallCommand(program, container);
305
313
  registerConfigureCommand(program, container);
306
314
  registerAgentCommand(program, container);
307
- registerSpawnCommand(program, container);
315
+ registerSpawnCommand(program, container, {
316
+ handlers: { "poe-agent": createPoeAgentSpawnHandler() },
317
+ extraServices: ["poe-agent"]
318
+ });
308
319
  registerWrapCommand(program, container);
309
320
  registerGenerateCommand(program, container);
310
321
  registerTestCommand(program, container);
@@ -320,6 +331,7 @@ function bootstrapProgram(container) {
320
331
  registerRalphCommand(program, container);
321
332
  registerExperimentCommand(program, container);
322
333
  registerLaunchCommand(program, container);
334
+ registerMemoryCommand(program, container);
323
335
  program
324
336
  .command(ghGroup.name)
325
337
  .description(ghGroup.description ?? "")