poe-code 0.1.26
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 +64 -0
- package/dist/cli/api-client.d.ts +14 -0
- package/dist/cli/api-client.js +140 -0
- package/dist/cli/api-client.js.map +1 -0
- package/dist/cli/chat.d.ts +32 -0
- package/dist/cli/chat.js +2 -0
- package/dist/cli/chat.js.map +1 -0
- package/dist/cli/command-runner.d.ts +2 -0
- package/dist/cli/command-runner.js +37 -0
- package/dist/cli/command-runner.js.map +1 -0
- package/dist/cli/commands/agent.d.ts +18 -0
- package/dist/cli/commands/agent.js +84 -0
- package/dist/cli/commands/agent.js.map +1 -0
- package/dist/cli/commands/configure-agents.d.ts +3 -0
- package/dist/cli/commands/configure-agents.js +72 -0
- package/dist/cli/commands/configure-agents.js.map +1 -0
- package/dist/cli/commands/configure.d.ts +11 -0
- package/dist/cli/commands/configure.js +150 -0
- package/dist/cli/commands/configure.js.map +1 -0
- package/dist/cli/commands/init.d.ts +8 -0
- package/dist/cli/commands/init.js +45 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/interactive.d.ts +3 -0
- package/dist/cli/commands/interactive.js +17 -0
- package/dist/cli/commands/interactive.js.map +1 -0
- package/dist/cli/commands/login.d.ts +6 -0
- package/dist/cli/commands/login.js +51 -0
- package/dist/cli/commands/login.js.map +1 -0
- package/dist/cli/commands/logout.d.ts +3 -0
- package/dist/cli/commands/logout.js +31 -0
- package/dist/cli/commands/logout.js.map +1 -0
- package/dist/cli/commands/prerequisites.d.ts +3 -0
- package/dist/cli/commands/prerequisites.js +23 -0
- package/dist/cli/commands/prerequisites.js.map +1 -0
- package/dist/cli/commands/query.d.ts +7 -0
- package/dist/cli/commands/query.js +46 -0
- package/dist/cli/commands/query.js.map +1 -0
- package/dist/cli/commands/remove.d.ts +6 -0
- package/dist/cli/commands/remove.js +80 -0
- package/dist/cli/commands/remove.js.map +1 -0
- package/dist/cli/commands/root.d.ts +3 -0
- package/dist/cli/commands/root.js +7 -0
- package/dist/cli/commands/root.js.map +1 -0
- package/dist/cli/commands/shared.d.ts +24 -0
- package/dist/cli/commands/shared.js +61 -0
- package/dist/cli/commands/shared.js.map +1 -0
- package/dist/cli/commands/spawn-worktree.d.ts +6 -0
- package/dist/cli/commands/spawn-worktree.js +91 -0
- package/dist/cli/commands/spawn-worktree.js.map +1 -0
- package/dist/cli/commands/spawn.d.ts +7 -0
- package/dist/cli/commands/spawn.js +112 -0
- package/dist/cli/commands/spawn.js.map +1 -0
- package/dist/cli/commands/test.d.ts +6 -0
- package/dist/cli/commands/test.js +26 -0
- package/dist/cli/commands/test.js.map +1 -0
- package/dist/cli/constants.d.ts +10 -0
- package/dist/cli/constants.js +11 -0
- package/dist/cli/constants.js.map +1 -0
- package/dist/cli/container.d.ts +48 -0
- package/dist/cli/container.js +94 -0
- package/dist/cli/container.js.map +1 -0
- package/dist/cli/context.d.ts +37 -0
- package/dist/cli/context.js +198 -0
- package/dist/cli/context.js.map +1 -0
- package/dist/cli/environment.d.ts +19 -0
- package/dist/cli/environment.js +26 -0
- package/dist/cli/environment.js.map +1 -0
- package/dist/cli/error-logger.d.ts +46 -0
- package/dist/cli/error-logger.js +137 -0
- package/dist/cli/error-logger.js.map +1 -0
- package/dist/cli/errors.d.ts +91 -0
- package/dist/cli/errors.js +128 -0
- package/dist/cli/errors.js.map +1 -0
- package/dist/cli/file-mentions.d.ts +13 -0
- package/dist/cli/file-mentions.js +87 -0
- package/dist/cli/file-mentions.js.map +1 -0
- package/dist/cli/file-picker-state.d.ts +14 -0
- package/dist/cli/file-picker-state.js +23 -0
- package/dist/cli/file-picker-state.js.map +1 -0
- package/dist/cli/http.d.ts +11 -0
- package/dist/cli/http.js +2 -0
- package/dist/cli/http.js.map +1 -0
- package/dist/cli/interactive-command-runner.d.ts +11 -0
- package/dist/cli/interactive-command-runner.js +142 -0
- package/dist/cli/interactive-command-runner.js.map +1 -0
- package/dist/cli/interactive-launcher.d.ts +2 -0
- package/dist/cli/interactive-launcher.js +404 -0
- package/dist/cli/interactive-launcher.js.map +1 -0
- package/dist/cli/interactive-tasks.d.ts +7 -0
- package/dist/cli/interactive-tasks.js +199 -0
- package/dist/cli/interactive-tasks.js.map +1 -0
- package/dist/cli/interactive.d.ts +19 -0
- package/dist/cli/interactive.js +479 -0
- package/dist/cli/interactive.js.map +1 -0
- package/dist/cli/logger.d.ts +26 -0
- package/dist/cli/logger.js +87 -0
- package/dist/cli/logger.js.map +1 -0
- package/dist/cli/markdown-renderer.d.ts +27 -0
- package/dist/cli/markdown-renderer.js +178 -0
- package/dist/cli/markdown-renderer.js.map +1 -0
- package/dist/cli/markdown-renderer.test.d.ts +1 -0
- package/dist/cli/markdown-renderer.test.js +105 -0
- package/dist/cli/markdown-renderer.test.js.map +1 -0
- package/dist/cli/options.d.ts +30 -0
- package/dist/cli/options.js +84 -0
- package/dist/cli/options.js.map +1 -0
- package/dist/cli/program.d.ts +4 -0
- package/dist/cli/program.js +64 -0
- package/dist/cli/program.js.map +1 -0
- package/dist/cli/prompts.d.ts +23 -0
- package/dist/cli/prompts.js +58 -0
- package/dist/cli/prompts.js.map +1 -0
- package/dist/cli/service-registry.d.ts +33 -0
- package/dist/cli/service-registry.js +35 -0
- package/dist/cli/service-registry.js.map +1 -0
- package/dist/cli/telemetry.d.ts +15 -0
- package/dist/cli/telemetry.js +45 -0
- package/dist/cli/telemetry.js.map +1 -0
- package/dist/cli/types.d.ts +2 -0
- package/dist/cli/types.js +2 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/commands/init.d.ts +9 -0
- package/dist/commands/init.js +43 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/publish-placeholder.d.ts +8 -0
- package/dist/commands/publish-placeholder.js +50 -0
- package/dist/commands/publish-placeholder.js.map +1 -0
- package/dist/commands/spawn-worktree.d.ts +25 -0
- package/dist/commands/spawn-worktree.js +139 -0
- package/dist/commands/spawn-worktree.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +81 -0
- package/dist/index.js.map +1 -0
- package/dist/providers/claude-code-adapter.d.ts +20 -0
- package/dist/providers/claude-code-adapter.js +48 -0
- package/dist/providers/claude-code-adapter.js.map +1 -0
- package/dist/providers/codex-adapter.d.ts +19 -0
- package/dist/providers/codex-adapter.js +49 -0
- package/dist/providers/codex-adapter.js.map +1 -0
- package/dist/providers/index.d.ts +2 -0
- package/dist/providers/index.js +13 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/opencode-adapter.d.ts +18 -0
- package/dist/providers/opencode-adapter.js +45 -0
- package/dist/providers/opencode-adapter.js.map +1 -0
- package/dist/providers/roo-code-adapter.d.ts +19 -0
- package/dist/providers/roo-code-adapter.js +70 -0
- package/dist/providers/roo-code-adapter.js.map +1 -0
- package/dist/services/agent-config-manager.d.ts +32 -0
- package/dist/services/agent-config-manager.js +130 -0
- package/dist/services/agent-config-manager.js.map +1 -0
- package/dist/services/agent-registry.d.ts +27 -0
- package/dist/services/agent-registry.js +89 -0
- package/dist/services/agent-registry.js.map +1 -0
- package/dist/services/agent-session.d.ts +24 -0
- package/dist/services/agent-session.js +107 -0
- package/dist/services/agent-session.js.map +1 -0
- package/dist/services/agent-task-registry.d.ts +131 -0
- package/dist/services/agent-task-registry.js +491 -0
- package/dist/services/agent-task-registry.js.map +1 -0
- package/dist/services/chat.d.ts +94 -0
- package/dist/services/chat.js +241 -0
- package/dist/services/chat.js.map +1 -0
- package/dist/services/claude-code.d.ts +28 -0
- package/dist/services/claude-code.js +155 -0
- package/dist/services/claude-code.js.map +1 -0
- package/dist/services/codex.d.ts +27 -0
- package/dist/services/codex.js +231 -0
- package/dist/services/codex.js.map +1 -0
- package/dist/services/credentials.d.ts +11 -0
- package/dist/services/credentials.js +44 -0
- package/dist/services/credentials.js.map +1 -0
- package/dist/services/mcp-client.d.ts +38 -0
- package/dist/services/mcp-client.js +170 -0
- package/dist/services/mcp-client.js.map +1 -0
- package/dist/services/mcp-manager.d.ts +28 -0
- package/dist/services/mcp-manager.js +157 -0
- package/dist/services/mcp-manager.js.map +1 -0
- package/dist/services/model-strategy.d.ts +99 -0
- package/dist/services/model-strategy.js +182 -0
- package/dist/services/model-strategy.js.map +1 -0
- package/dist/services/opencode.d.ts +25 -0
- package/dist/services/opencode.js +161 -0
- package/dist/services/opencode.js.map +1 -0
- package/dist/services/poe-code.d.ts +7 -0
- package/dist/services/poe-code.js +5 -0
- package/dist/services/poe-code.js.map +1 -0
- package/dist/services/roo-code.d.ts +22 -0
- package/dist/services/roo-code.js +134 -0
- package/dist/services/roo-code.js.map +1 -0
- package/dist/services/service-install.d.ts +21 -0
- package/dist/services/service-install.js +47 -0
- package/dist/services/service-install.js.map +1 -0
- package/dist/services/service-manifest.d.ts +122 -0
- package/dist/services/service-manifest.js +368 -0
- package/dist/services/service-manifest.js.map +1 -0
- package/dist/services/task-logger.d.ts +24 -0
- package/dist/services/task-logger.js +73 -0
- package/dist/services/task-logger.js.map +1 -0
- package/dist/services/task-runner.d.ts +19 -0
- package/dist/services/task-runner.js +157 -0
- package/dist/services/task-runner.js.map +1 -0
- package/dist/services/tools.d.ts +76 -0
- package/dist/services/tools.js +870 -0
- package/dist/services/tools.js.map +1 -0
- package/dist/templates/claude-code/anthropic_key.sh.hbs +2 -0
- package/dist/templates/codex/config.toml.hbs +9 -0
- package/dist/templates/python/env.hbs +3 -0
- package/dist/templates/python/main.py.hbs +17 -0
- package/dist/templates/python/requirements.txt.hbs +2 -0
- package/dist/utils/backup.d.ts +5 -0
- package/dist/utils/backup.js +61 -0
- package/dist/utils/backup.js.map +1 -0
- package/dist/utils/command-line.d.ts +1 -0
- package/dist/utils/command-line.js +54 -0
- package/dist/utils/command-line.js.map +1 -0
- package/dist/utils/dry-run.d.ts +38 -0
- package/dist/utils/dry-run.js +211 -0
- package/dist/utils/dry-run.js.map +1 -0
- package/dist/utils/e2e-flags.d.ts +1 -0
- package/dist/utils/e2e-flags.js +9 -0
- package/dist/utils/e2e-flags.js.map +1 -0
- package/dist/utils/file-system.d.ts +21 -0
- package/dist/utils/file-system.js +2 -0
- package/dist/utils/file-system.js.map +1 -0
- package/dist/utils/json.d.ts +12 -0
- package/dist/utils/json.js +42 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/prerequisites.d.ts +41 -0
- package/dist/utils/prerequisites.js +92 -0
- package/dist/utils/prerequisites.js.map +1 -0
- package/dist/utils/templates.d.ts +4 -0
- package/dist/utils/templates.js +22 -0
- package/dist/utils/templates.js.map +1 -0
- package/dist/utils/toml.d.ts +8 -0
- package/dist/utils/toml.js +30 -0
- package/dist/utils/toml.js.map +1 -0
- package/dist/utils/worktree.d.ts +40 -0
- package/dist/utils/worktree.js +179 -0
- package/dist/utils/worktree.js.map +1 -0
- package/package.json +84 -0
- package/shared/conversation-layout.cjs +11 -0
- package/shared/conversation-layout.d.ts +7 -0
- package/shared/conversation-layout.js +11 -0
- package/shared/package.json +13 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { createLoggingCommandRunner, createMutationLogger, createPrerequisiteHooks, normalizePhase } from "../context.js";
|
|
2
|
+
export function resolveCommandFlags(program) {
|
|
3
|
+
const opts = program.optsWithGlobals();
|
|
4
|
+
return {
|
|
5
|
+
dryRun: Boolean(opts.dryRun),
|
|
6
|
+
verbose: Boolean(opts.verbose)
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
export function createExecutionResources(container, flags, scope) {
|
|
10
|
+
const baseLogger = container.loggerFactory.create({
|
|
11
|
+
dryRun: flags.dryRun,
|
|
12
|
+
verbose: flags.verbose,
|
|
13
|
+
scope
|
|
14
|
+
});
|
|
15
|
+
const runner = flags.verbose
|
|
16
|
+
? createLoggingCommandRunner(container.commandRunner, baseLogger)
|
|
17
|
+
: container.commandRunner;
|
|
18
|
+
const context = container.contextFactory.create({
|
|
19
|
+
dryRun: flags.dryRun,
|
|
20
|
+
logger: baseLogger,
|
|
21
|
+
runner
|
|
22
|
+
});
|
|
23
|
+
const mutationHooks = createMutationLogger(baseLogger, {
|
|
24
|
+
collector: context.recordMutation
|
|
25
|
+
});
|
|
26
|
+
return {
|
|
27
|
+
logger: baseLogger,
|
|
28
|
+
context,
|
|
29
|
+
mutationHooks,
|
|
30
|
+
recordMutation: context.recordMutation
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export function buildProviderContext(container, adapter, resources) {
|
|
34
|
+
return {
|
|
35
|
+
env: container.env,
|
|
36
|
+
paths: adapter.resolvePaths(container.env),
|
|
37
|
+
command: resources.context,
|
|
38
|
+
logger: resources.logger
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export function registerProviderPrerequisites(adapter, resources) {
|
|
42
|
+
adapter.registerPrerequisites?.(resources.context.prerequisites);
|
|
43
|
+
}
|
|
44
|
+
export async function runPrerequisites(adapter, resources, phase) {
|
|
45
|
+
const hooks = createPrerequisiteHooks(phase, resources.logger);
|
|
46
|
+
if (hooks) {
|
|
47
|
+
await resources.context.prerequisites.run(phase, hooks);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
await resources.context.prerequisites.run(phase);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export function resolveServiceAdapter(container, service) {
|
|
54
|
+
const adapter = container.registry.get(service);
|
|
55
|
+
if (!adapter) {
|
|
56
|
+
throw new Error(`Unknown service "${service}".`);
|
|
57
|
+
}
|
|
58
|
+
return adapter;
|
|
59
|
+
}
|
|
60
|
+
export { normalizePhase };
|
|
61
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/cli/commands/shared.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,0BAA0B,EAC1B,oBAAoB,EACpB,uBAAuB,EACvB,cAAc,EAGf,MAAM,eAAe,CAAC;AAiBvB,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,MAAM,IAAI,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IACvC,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;QAC5B,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;KAC/B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,SAAuB,EACvB,KAAmB,EACnB,KAAa;IAEb,MAAM,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC;QAChD,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK;KACN,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO;QAC1B,CAAC,CAAC,0BAA0B,CAAC,SAAS,CAAC,aAAa,EAAE,UAAU,CAAC;QACjE,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC;IAC5B,MAAM,OAAO,GAAG,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC;QAC9C,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM,EAAE,UAAU;QAClB,MAAM;KACP,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,oBAAoB,CAAC,UAAU,EAAE;QACrD,SAAS,EAAE,OAAO,CAAC,cAAc;KAClC,CAAC,CAAC;IAEH,OAAO;QACL,MAAM,EAAE,UAAU;QAClB,OAAO;QACP,aAAa;QACb,cAAc,EAAE,OAAO,CAAC,cAAc;KACvC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,SAAuB,EACvB,OAAwB,EACxB,SAA6B;IAE7B,OAAO;QACL,GAAG,EAAE,SAAS,CAAC,GAAG;QAClB,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC;QAC1C,OAAO,EAAE,SAAS,CAAC,OAAO;QAC1B,MAAM,EAAE,SAAS,CAAC,MAAM;KACzB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,OAAwB,EACxB,SAA6B;IAE7B,OAAO,CAAC,qBAAqB,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAwB,EACxB,SAA6B,EAC7B,KAAwB;IAExB,MAAM,KAAK,GAAG,uBAAuB,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAC/D,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC1D,CAAC;SAAM,CAAC;QACN,MAAM,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,SAAuB,EACvB,OAAe;IAEf,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAChD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,IAAI,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Command } from "commander";
|
|
2
|
+
import type { CliContainer } from "../container.js";
|
|
3
|
+
export interface SpawnWorktreeCommandOptions {
|
|
4
|
+
branch?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function registerSpawnWorktreeCommand(program: Command, container: CliContainer): void;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { buildProviderContext, resolveCommandFlags, resolveServiceAdapter } from "./shared.js";
|
|
2
|
+
import { spawnGitWorktree } from "../../commands/spawn-worktree.js";
|
|
3
|
+
import { simpleGit as createSimpleGit } from "simple-git";
|
|
4
|
+
export function registerSpawnWorktreeCommand(program, container) {
|
|
5
|
+
program
|
|
6
|
+
.command("spawn-git-worktree")
|
|
7
|
+
.description("Create a git worktree, run an agent, and attempt to merge changes.")
|
|
8
|
+
.argument("<service>", "Service to spawn (claude-code | codex | opencode)")
|
|
9
|
+
.argument("<prompt>", "Prompt to provide to the agent")
|
|
10
|
+
.argument("[agentArgs...]", "Additional arguments forwarded to the agent")
|
|
11
|
+
.option("--branch <name>", "Target branch to merge into")
|
|
12
|
+
.action(async (service, promptText, agentArgs = [], options) => {
|
|
13
|
+
const adapter = resolveServiceAdapter(container, service);
|
|
14
|
+
if (!adapter.supportsSpawn) {
|
|
15
|
+
throw new Error(`${adapter.label} does not support spawn.`);
|
|
16
|
+
}
|
|
17
|
+
const flags = resolveCommandFlags(program);
|
|
18
|
+
const logger = container.loggerFactory.create({
|
|
19
|
+
dryRun: flags.dryRun,
|
|
20
|
+
verbose: flags.verbose,
|
|
21
|
+
scope: "spawn-worktree"
|
|
22
|
+
});
|
|
23
|
+
if (flags.dryRun) {
|
|
24
|
+
const argsSuffix = agentArgs.length > 0
|
|
25
|
+
? ` with args ${JSON.stringify(agentArgs)}`
|
|
26
|
+
: "";
|
|
27
|
+
const branchSuffix = options.branch ? ` into ${options.branch}` : "";
|
|
28
|
+
logger.dryRun(`Dry run: would create git worktree, run ${adapter.label}${argsSuffix}, and merge${branchSuffix}.`);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const runner = flags.verbose
|
|
32
|
+
? createVerboseRunner(container, logger)
|
|
33
|
+
: container.commandRunner;
|
|
34
|
+
const currentBranch = await resolveTargetBranch(container, options.branch);
|
|
35
|
+
await spawnGitWorktree({
|
|
36
|
+
agent: service,
|
|
37
|
+
prompt: promptText,
|
|
38
|
+
agentArgs,
|
|
39
|
+
basePath: container.env.cwd,
|
|
40
|
+
targetBranch: currentBranch,
|
|
41
|
+
logger: (message) => logger.info(message),
|
|
42
|
+
runAgent: async ({ agent, prompt, args }) => {
|
|
43
|
+
if (agent !== service) {
|
|
44
|
+
throw new Error(`Mismatched agent request "${agent}" (expected "${service}").`);
|
|
45
|
+
}
|
|
46
|
+
return await spawnWithCustomRunner(container, adapter, flags.verbose, runner, prompt, args);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
function createVerboseRunner(container, logger) {
|
|
52
|
+
return async (command, args) => {
|
|
53
|
+
logger.verbose(`> ${[command, ...args].join(" ").trim()}`);
|
|
54
|
+
return container.commandRunner(command, args);
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
async function resolveTargetBranch(container, branchOverride) {
|
|
58
|
+
if (branchOverride) {
|
|
59
|
+
return branchOverride;
|
|
60
|
+
}
|
|
61
|
+
const git = createSimpleGit({ baseDir: container.env.cwd });
|
|
62
|
+
const branch = await git.revparse(["--abbrev-ref", "HEAD"]);
|
|
63
|
+
return branch.trim();
|
|
64
|
+
}
|
|
65
|
+
async function spawnWithCustomRunner(container, adapter, verbose, runner, prompt, args) {
|
|
66
|
+
const scopedLogger = container.loggerFactory.create({
|
|
67
|
+
dryRun: false,
|
|
68
|
+
verbose,
|
|
69
|
+
scope: `spawn:${adapter.name}`
|
|
70
|
+
});
|
|
71
|
+
const context = container.contextFactory.create({
|
|
72
|
+
dryRun: false,
|
|
73
|
+
logger: scopedLogger,
|
|
74
|
+
runner
|
|
75
|
+
});
|
|
76
|
+
const resources = {
|
|
77
|
+
logger: scopedLogger,
|
|
78
|
+
context
|
|
79
|
+
};
|
|
80
|
+
const providerContext = buildProviderContext(container, adapter, resources);
|
|
81
|
+
return (await container.registry.invoke(adapter.name, "spawn", async (entry) => {
|
|
82
|
+
if (!entry.spawn) {
|
|
83
|
+
throw new Error(`${adapter.label} does not support spawn.`);
|
|
84
|
+
}
|
|
85
|
+
return (await entry.spawn(providerContext, {
|
|
86
|
+
prompt,
|
|
87
|
+
args
|
|
88
|
+
}));
|
|
89
|
+
}));
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=spawn-worktree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spawn-worktree.js","sourceRoot":"","sources":["../../../src/cli/commands/spawn-worktree.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Command } from "commander";
|
|
2
|
+
import type { CliContainer } from "../container.js";
|
|
3
|
+
export interface SpawnCommandOptions {
|
|
4
|
+
prompt: string;
|
|
5
|
+
args: string[];
|
|
6
|
+
}
|
|
7
|
+
export declare function registerSpawnCommand(program: Command, container: CliContainer): void;
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { buildProviderContext, createExecutionResources, resolveCommandFlags, resolveServiceAdapter } from "./shared.js";
|
|
2
|
+
import { DEFAULT_QUERY_MODEL } from "../constants.js";
|
|
3
|
+
import { runAgentConversation } from "./agent.js";
|
|
4
|
+
export function registerSpawnCommand(program, container) {
|
|
5
|
+
program
|
|
6
|
+
.command("spawn")
|
|
7
|
+
.description("Run a single prompt through a configured service CLI.")
|
|
8
|
+
.argument("<service>", "Service to spawn (claude-code | codex | opencode | poe-code)")
|
|
9
|
+
.argument("<prompt>", "Prompt text to send")
|
|
10
|
+
.argument("[agentArgs...]", "Additional arguments forwarded to the service CLI")
|
|
11
|
+
.action(async (service, promptText, agentArgs = []) => {
|
|
12
|
+
const flags = resolveCommandFlags(program);
|
|
13
|
+
const resources = createExecutionResources(container, flags, `spawn:${service}`);
|
|
14
|
+
if (service === "poe-code") {
|
|
15
|
+
await runPoeCodeSpawn({
|
|
16
|
+
container,
|
|
17
|
+
flags,
|
|
18
|
+
resources,
|
|
19
|
+
prompt: promptText,
|
|
20
|
+
args: agentArgs
|
|
21
|
+
});
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
const adapter = resolveServiceAdapter(container, service);
|
|
25
|
+
if (!adapter.supportsSpawn) {
|
|
26
|
+
throw new Error(`${adapter.label} does not support spawn.`);
|
|
27
|
+
}
|
|
28
|
+
const providerContext = buildProviderContext(container, adapter, resources);
|
|
29
|
+
if (flags.dryRun) {
|
|
30
|
+
const extra = agentArgs.length > 0 ? ` with args ${JSON.stringify(agentArgs)}` : "";
|
|
31
|
+
resources.logger.dryRun(`Dry run: would spawn ${adapter.label} with prompt "${promptText}"${extra}.`);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const result = (await container.registry.invoke(service, "spawn", async (entry) => {
|
|
35
|
+
if (!entry.spawn) {
|
|
36
|
+
throw new Error(`${adapter.label} does not support spawn.`);
|
|
37
|
+
}
|
|
38
|
+
const output = await entry.spawn(providerContext, {
|
|
39
|
+
prompt: promptText,
|
|
40
|
+
args: agentArgs
|
|
41
|
+
});
|
|
42
|
+
return output;
|
|
43
|
+
}));
|
|
44
|
+
if (!result) {
|
|
45
|
+
resources.logger.info(`${adapter.label} spawn completed.`);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
if (result.exitCode !== 0) {
|
|
49
|
+
const detail = result.stderr.trim() || result.stdout.trim();
|
|
50
|
+
const suffix = detail ? `: ${detail}` : "";
|
|
51
|
+
throw new Error(`${adapter.label} spawn failed with exit code ${result.exitCode}${suffix}`);
|
|
52
|
+
}
|
|
53
|
+
const trimmedStdout = result.stdout.trim();
|
|
54
|
+
if (trimmedStdout) {
|
|
55
|
+
resources.logger.info(trimmedStdout);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const trimmedStderr = result.stderr.trim();
|
|
59
|
+
if (trimmedStderr) {
|
|
60
|
+
resources.logger.info(trimmedStderr);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
resources.logger.info(`${adapter.label} spawn completed.`);
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
async function runPoeCodeSpawn(options) {
|
|
67
|
+
const parsedArgs = parsePoeCodeArgs(options.args);
|
|
68
|
+
const model = parsedArgs.model ?? DEFAULT_QUERY_MODEL;
|
|
69
|
+
if (options.flags.dryRun) {
|
|
70
|
+
options.resources.logger.dryRun(`Dry run: would spawn Poe Code with prompt "${options.prompt}" using model "${model}".`);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const apiKey = await options.container.options.resolveApiKey({
|
|
74
|
+
value: parsedArgs.apiKey,
|
|
75
|
+
dryRun: options.flags.dryRun
|
|
76
|
+
});
|
|
77
|
+
const message = await runAgentConversation({
|
|
78
|
+
container: options.container,
|
|
79
|
+
logger: options.resources.logger,
|
|
80
|
+
text: options.prompt,
|
|
81
|
+
model,
|
|
82
|
+
apiKey
|
|
83
|
+
});
|
|
84
|
+
options.resources.logger.info(message.replace("Agent response", "Poe Code response"));
|
|
85
|
+
}
|
|
86
|
+
function parsePoeCodeArgs(args) {
|
|
87
|
+
const result = {};
|
|
88
|
+
let index = 0;
|
|
89
|
+
while (index < args.length) {
|
|
90
|
+
const current = args[index];
|
|
91
|
+
const next = args[index + 1];
|
|
92
|
+
if (current === "--model") {
|
|
93
|
+
if (next == null) {
|
|
94
|
+
throw new Error("Missing value for --model.");
|
|
95
|
+
}
|
|
96
|
+
result.model = next;
|
|
97
|
+
index += 2;
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
if (current === "--api-key") {
|
|
101
|
+
if (next == null) {
|
|
102
|
+
throw new Error("Missing value for --api-key.");
|
|
103
|
+
}
|
|
104
|
+
result.apiKey = next;
|
|
105
|
+
index += 2;
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
throw new Error(`Unknown option "${current}" for poe-code spawn.`);
|
|
109
|
+
}
|
|
110
|
+
return result;
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=spawn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spawn.js","sourceRoot":"","sources":["../../../src/cli/commands/spawn.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,qBAAqB,EAGtB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAOlD,MAAM,UAAU,oBAAoB,CAClC,OAAgB,EAChB,SAAuB;IAEvB,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,uDAAuD,CAAC;SACpE,QAAQ,CACP,WAAW,EACX,8DAA8D,CAC/D;SACA,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAC;SAC3C,QAAQ,CACP,gBAAgB,EAChB,mDAAmD,CACpD;SACA,MAAM,CAAC,KAAK,EAAE,OAAe,EAAE,UAAkB,EAAE,YAAsB,EAAE,EAAE,EAAE;QAC9E,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,wBAAwB,CACxC,SAAS,EACT,KAAK,EACL,SAAS,OAAO,EAAE,CACnB,CAAC;QAEF,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;YAC3B,MAAM,eAAe,CAAC;gBACpB,SAAS;gBACT,KAAK;gBACL,SAAS;gBACT,MAAM,EAAE,UAAU;gBAClB,IAAI,EAAE,SAAS;aAChB,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,qBAAqB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC1D,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,0BAA0B,CAAC,CAAC;QAC9D,CAAC;QAED,MAAM,eAAe,GAAG,oBAAoB,CAC1C,SAAS,EACT,OAAO,EACP,SAAS,CACV,CAAC;QAEF,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,KAAK,GACT,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxE,SAAS,CAAC,MAAM,CAAC,MAAM,CACrB,wBAAwB,OAAO,CAAC,KAAK,iBAAiB,UAAU,IAAI,KAAK,GAAG,CAC7E,CAAC;YACF,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,CAAC,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,CAC7C,OAAO,EACP,OAAO,EACP,KAAK,EAAE,KAAK,EAAE,EAAE;YACd,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,0BAA0B,CAAC,CAAC;YAC9D,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,eAAe,EAAE;gBAChD,MAAM,EAAE,UAAU;gBAClB,IAAI,EAAE,SAAS;aAChB,CAAC,CAAC;YACH,OAAO,MAAoC,CAAC;QAC9C,CAAC,CACF,CAA+B,CAAC;QAEjC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,mBAAmB,CAAC,CAAC;YAC3D,OAAO;QACT,CAAC;QAED,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5D,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CACb,GAAG,OAAO,CAAC,KAAK,gCAAgC,MAAM,CAAC,QAAQ,GAAG,MAAM,EAAE,CAC3E,CAAC;QACJ,CAAC;QAED,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC3C,IAAI,aAAa,EAAE,CAAC;YAClB,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACrC,OAAO;QACT,CAAC;QAED,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC3C,IAAI,aAAa,EAAE,CAAC;YAClB,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACrC,OAAO;QACT,CAAC;QAED,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,mBAAmB,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACP,CAAC;AAUD,KAAK,UAAU,eAAe,CAAC,OAA0B;IACvD,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,IAAI,mBAAmB,CAAC;IAEtD,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACzB,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAC7B,8CAA8C,OAAO,CAAC,MAAM,kBAAkB,KAAK,IAAI,CACxF,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC;QAC3D,KAAK,EAAE,UAAU,CAAC,MAAM;QACxB,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM;KAC7B,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC;QACzC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,MAAM;QAChC,IAAI,EAAE,OAAO,CAAC,MAAM;QACpB,KAAK;QACL,MAAM;KACP,CAAC,CAAC;IAEH,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,CAAC,CAAC;AACxF,CAAC;AAOD,SAAS,gBAAgB,CAAC,IAAc;IACtC,MAAM,MAAM,GAAqB,EAAE,CAAC;IACpC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAC7B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAChD,CAAC;YACD,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;YACpB,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QACD,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;YAC5B,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAClD,CAAC;YACD,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;YACrB,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,mBAAmB,OAAO,uBAAuB,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { resolveCommandFlags } from "./shared.js";
|
|
2
|
+
export function registerTestCommand(program, container) {
|
|
3
|
+
program
|
|
4
|
+
.command("test")
|
|
5
|
+
.description('Verify the Poe API key by sending "Ping" to EchoBot.')
|
|
6
|
+
.option("--api-key <key>", "Poe API key")
|
|
7
|
+
.action(async (options) => {
|
|
8
|
+
const flags = resolveCommandFlags(program);
|
|
9
|
+
const logger = container.loggerFactory.create({
|
|
10
|
+
dryRun: flags.dryRun,
|
|
11
|
+
verbose: flags.verbose,
|
|
12
|
+
scope: "test"
|
|
13
|
+
});
|
|
14
|
+
const apiKey = await container.options.resolveApiKey({
|
|
15
|
+
value: options.apiKey,
|
|
16
|
+
dryRun: flags.dryRun
|
|
17
|
+
});
|
|
18
|
+
if (flags.dryRun) {
|
|
19
|
+
logger.dryRun('would verify Poe API key by calling EchoBot with "Ping".');
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
await container.poeApiClient.verify({ apiKey });
|
|
23
|
+
logger.info("Poe API key verified via EchoBot.");
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../../src/cli/commands/test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAMlD,MAAM,UAAU,mBAAmB,CACjC,OAAgB,EAChB,SAAuB;IAEvB,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,sDAAsD,CAAC;SACnE,MAAM,CAAC,iBAAiB,EAAE,aAAa,CAAC;SACxC,MAAM,CAAC,KAAK,EAAE,OAA2B,EAAE,EAAE;QAC5C,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC;YAC5C,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC;YACnD,KAAK,EAAE,OAAO,CAAC,MAAM;YACrB,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,CAAC,CAAC;QAEH,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,CAAC,MAAM,CACX,0DAA0D,CAC3D,CAAC;YACF,OAAO;QACT,CAAC;QAED,MAAM,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const CLAUDE_MODEL_SONNET = "Claude-Sonnet-4.5";
|
|
2
|
+
export declare const CLAUDE_MODEL_OPUS = "Claude-Opus-4.1";
|
|
3
|
+
export declare const CLAUDE_MODEL_HAIKU = "Claude-Haiku-4.5";
|
|
4
|
+
export declare const DEFAULT_MODEL = "gpt-5";
|
|
5
|
+
export declare const DEFAULT_REASONING = "medium";
|
|
6
|
+
export declare const DEFAULT_QUERY_MODEL = "Claude-Sonnet-4.5";
|
|
7
|
+
export declare const DEFAULT_ROO_MODEL = "Claude-Sonnet-4.5";
|
|
8
|
+
export declare const DEFAULT_ROO_BASE_URL = "https://api.poe.com/v1";
|
|
9
|
+
export declare const DEFAULT_ROO_CONFIG_NAME = "poe";
|
|
10
|
+
export declare const DEFAULT_CLAUDE_MODEL = "Claude-Sonnet-4.5";
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export const CLAUDE_MODEL_SONNET = "Claude-Sonnet-4.5";
|
|
2
|
+
export const CLAUDE_MODEL_OPUS = "Claude-Opus-4.1";
|
|
3
|
+
export const CLAUDE_MODEL_HAIKU = "Claude-Haiku-4.5";
|
|
4
|
+
export const DEFAULT_MODEL = "gpt-5";
|
|
5
|
+
export const DEFAULT_REASONING = "medium";
|
|
6
|
+
export const DEFAULT_QUERY_MODEL = CLAUDE_MODEL_SONNET;
|
|
7
|
+
export const DEFAULT_ROO_MODEL = CLAUDE_MODEL_SONNET;
|
|
8
|
+
export const DEFAULT_ROO_BASE_URL = "https://api.poe.com/v1";
|
|
9
|
+
export const DEFAULT_ROO_CONFIG_NAME = "poe";
|
|
10
|
+
export const DEFAULT_CLAUDE_MODEL = CLAUDE_MODEL_SONNET;
|
|
11
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/cli/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,mBAAmB,CAAC;AACvD,MAAM,CAAC,MAAM,iBAAiB,GAAG,iBAAiB,CAAC;AACnD,MAAM,CAAC,MAAM,kBAAkB,GAAG,kBAAkB,CAAC;AAErD,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC;AACrC,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AAC1C,MAAM,CAAC,MAAM,mBAAmB,GAAG,mBAAmB,CAAC;AACvD,MAAM,CAAC,MAAM,iBAAiB,GAAG,mBAAmB,CAAC;AACrD,MAAM,CAAC,MAAM,oBAAoB,GAAG,wBAAwB,CAAC;AAC7D,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAC;AAC7C,MAAM,CAAC,MAAM,oBAAoB,GAAG,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { FileSystem } from "../utils/file-system.js";
|
|
2
|
+
import { createCliEnvironment } from "./environment.js";
|
|
3
|
+
import { createServiceRegistry, type ProviderAdapter } from "./service-registry.js";
|
|
4
|
+
import { type CommandContextFactory } from "./context.js";
|
|
5
|
+
import { createPromptLibrary } from "./prompts.js";
|
|
6
|
+
import { type OptionResolvers } from "./options.js";
|
|
7
|
+
import { type LoggerFactory, type ScopedLogger } from "./logger.js";
|
|
8
|
+
import { ErrorLogger } from "./error-logger.js";
|
|
9
|
+
import { type PoeApiClient } from "./api-client.js";
|
|
10
|
+
import type { PromptFn, LoggerFn } from "./types.js";
|
|
11
|
+
import type { HttpClient } from "./http.js";
|
|
12
|
+
import type { CommandRunner } from "../utils/prerequisites.js";
|
|
13
|
+
import type { ChatServiceFactory } from "./chat.js";
|
|
14
|
+
export interface CliDependencies {
|
|
15
|
+
fs: FileSystem;
|
|
16
|
+
prompts: PromptFn;
|
|
17
|
+
env: {
|
|
18
|
+
cwd: string;
|
|
19
|
+
homeDir: string;
|
|
20
|
+
platform?: NodeJS.Platform;
|
|
21
|
+
variables?: Record<string, string | undefined>;
|
|
22
|
+
};
|
|
23
|
+
logger?: LoggerFn;
|
|
24
|
+
exitOverride?: boolean;
|
|
25
|
+
suppressCommanderOutput?: boolean;
|
|
26
|
+
httpClient?: HttpClient;
|
|
27
|
+
commandRunner?: CommandRunner;
|
|
28
|
+
chatServiceFactory?: ChatServiceFactory;
|
|
29
|
+
}
|
|
30
|
+
export interface CliContainer {
|
|
31
|
+
readonly env: ReturnType<typeof createCliEnvironment>;
|
|
32
|
+
readonly fs: FileSystem;
|
|
33
|
+
readonly prompts: PromptFn;
|
|
34
|
+
readonly promptLibrary: ReturnType<typeof createPromptLibrary>;
|
|
35
|
+
readonly loggerFactory: LoggerFactory;
|
|
36
|
+
readonly errorLogger: ErrorLogger;
|
|
37
|
+
readonly options: OptionResolvers;
|
|
38
|
+
readonly contextFactory: CommandContextFactory;
|
|
39
|
+
readonly registry: ReturnType<typeof createServiceRegistry>;
|
|
40
|
+
readonly httpClient: HttpClient;
|
|
41
|
+
readonly poeApiClient: PoeApiClient;
|
|
42
|
+
readonly commandRunner: CommandRunner;
|
|
43
|
+
readonly chatServiceFactory: ChatServiceFactory;
|
|
44
|
+
readonly telemetryLogger: ScopedLogger;
|
|
45
|
+
readonly providers: ProviderAdapter[];
|
|
46
|
+
readonly dependencies: CliDependencies;
|
|
47
|
+
}
|
|
48
|
+
export declare function createCliContainer(dependencies: CliDependencies): CliContainer;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import * as nodeFsSync from "node:fs";
|
|
2
|
+
import { loadCredentials, saveCredentials } from "../services/credentials.js";
|
|
3
|
+
import { createCliEnvironment } from "./environment.js";
|
|
4
|
+
import { createServiceRegistry } from "./service-registry.js";
|
|
5
|
+
import { createCommandContextFactory } from "./context.js";
|
|
6
|
+
import { createPromptLibrary } from "./prompts.js";
|
|
7
|
+
import { createOptionResolvers } from "./options.js";
|
|
8
|
+
import { createLoggerFactory } from "./logger.js";
|
|
9
|
+
import { ErrorLogger } from "./error-logger.js";
|
|
10
|
+
import { createTelemetryClient } from "./telemetry.js";
|
|
11
|
+
import { createPoeApiClient } from "./api-client.js";
|
|
12
|
+
import { createDefaultCommandRunner } from "./command-runner.js";
|
|
13
|
+
import { getDefaultProviders } from "../providers/index.js";
|
|
14
|
+
export function createCliContainer(dependencies) {
|
|
15
|
+
const environment = createCliEnvironment({
|
|
16
|
+
cwd: dependencies.env.cwd,
|
|
17
|
+
homeDir: dependencies.env.homeDir,
|
|
18
|
+
platform: dependencies.env.platform,
|
|
19
|
+
variables: dependencies.env.variables
|
|
20
|
+
});
|
|
21
|
+
const loggerFactory = createLoggerFactory(dependencies.logger ?? ((message) => console.log(message)));
|
|
22
|
+
// Create error logger - use node:fs for sync operations
|
|
23
|
+
const errorLogger = new ErrorLogger({
|
|
24
|
+
fs: nodeFsSync,
|
|
25
|
+
logDir: environment.logDir,
|
|
26
|
+
logToStderr: true
|
|
27
|
+
});
|
|
28
|
+
// Attach error logger to logger factory
|
|
29
|
+
loggerFactory.setErrorLogger(errorLogger);
|
|
30
|
+
const contextFactory = createCommandContextFactory({
|
|
31
|
+
fs: dependencies.fs
|
|
32
|
+
});
|
|
33
|
+
const httpClient = dependencies.httpClient ??
|
|
34
|
+
(async (url, init) => {
|
|
35
|
+
const response = await globalThis.fetch(url, init);
|
|
36
|
+
return {
|
|
37
|
+
ok: response.ok,
|
|
38
|
+
status: response.status,
|
|
39
|
+
json: () => response.json()
|
|
40
|
+
};
|
|
41
|
+
});
|
|
42
|
+
const commandRunner = dependencies.commandRunner ?? createDefaultCommandRunner();
|
|
43
|
+
const chatServiceFactory = dependencies.chatServiceFactory ??
|
|
44
|
+
(async (options) => {
|
|
45
|
+
const { createAgentSession } = (await import("../services/agent-session.js"));
|
|
46
|
+
return await createAgentSession(options);
|
|
47
|
+
});
|
|
48
|
+
const promptLibrary = createPromptLibrary();
|
|
49
|
+
const options = createOptionResolvers({
|
|
50
|
+
prompts: dependencies.prompts,
|
|
51
|
+
promptLibrary,
|
|
52
|
+
apiKeyStore: {
|
|
53
|
+
read: () => loadCredentials({
|
|
54
|
+
fs: dependencies.fs,
|
|
55
|
+
filePath: environment.credentialsPath
|
|
56
|
+
}),
|
|
57
|
+
write: (value) => saveCredentials({
|
|
58
|
+
fs: dependencies.fs,
|
|
59
|
+
filePath: environment.credentialsPath,
|
|
60
|
+
apiKey: value
|
|
61
|
+
})
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
const telemetryLogger = loggerFactory.create({
|
|
65
|
+
scope: "telemetry",
|
|
66
|
+
verbose: true
|
|
67
|
+
});
|
|
68
|
+
const registry = createServiceRegistry({
|
|
69
|
+
telemetry: createTelemetryClient(telemetryLogger)
|
|
70
|
+
});
|
|
71
|
+
const providers = getDefaultProviders();
|
|
72
|
+
for (const adapter of providers) {
|
|
73
|
+
registry.register(adapter);
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
env: environment,
|
|
77
|
+
fs: dependencies.fs,
|
|
78
|
+
prompts: dependencies.prompts,
|
|
79
|
+
promptLibrary,
|
|
80
|
+
loggerFactory,
|
|
81
|
+
errorLogger,
|
|
82
|
+
options,
|
|
83
|
+
contextFactory,
|
|
84
|
+
registry,
|
|
85
|
+
httpClient,
|
|
86
|
+
poeApiClient: createPoeApiClient(httpClient),
|
|
87
|
+
commandRunner,
|
|
88
|
+
chatServiceFactory,
|
|
89
|
+
telemetryLogger,
|
|
90
|
+
providers,
|
|
91
|
+
dependencies
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=container.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/cli/container.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { FileSystem } from "../utils/file-system.js";
|
|
2
|
+
import type { CommandRunner, PrerequisiteManager, PrerequisitePhase, PrerequisiteRunHooks } from "../utils/prerequisites.js";
|
|
3
|
+
import type { ServiceMutationHooks } from "../services/service-manifest.js";
|
|
4
|
+
import type { ScopedLogger } from "./logger.js";
|
|
5
|
+
export interface CommandContextOptions {
|
|
6
|
+
dryRun: boolean;
|
|
7
|
+
logger: ScopedLogger;
|
|
8
|
+
runner: CommandRunner;
|
|
9
|
+
}
|
|
10
|
+
export interface CommandContextComplete {
|
|
11
|
+
success: string;
|
|
12
|
+
dry: string;
|
|
13
|
+
}
|
|
14
|
+
export interface MutationLogEntry {
|
|
15
|
+
command: string;
|
|
16
|
+
message: string;
|
|
17
|
+
}
|
|
18
|
+
export interface CommandContext {
|
|
19
|
+
fs: FileSystem;
|
|
20
|
+
prerequisites: PrerequisiteManager;
|
|
21
|
+
recordMutation?: (entry: MutationLogEntry) => void;
|
|
22
|
+
runCommand: CommandRunner;
|
|
23
|
+
complete(messages: CommandContextComplete): void;
|
|
24
|
+
}
|
|
25
|
+
export interface CommandContextFactoryInit {
|
|
26
|
+
fs: FileSystem;
|
|
27
|
+
}
|
|
28
|
+
export interface CommandContextFactory {
|
|
29
|
+
create(options: CommandContextOptions): CommandContext;
|
|
30
|
+
}
|
|
31
|
+
export declare function createCommandContextFactory(init: CommandContextFactoryInit): CommandContextFactory;
|
|
32
|
+
export declare function createLoggingCommandRunner(runner: CommandRunner, logger: ScopedLogger): CommandRunner;
|
|
33
|
+
export declare function createPrerequisiteHooks(phase: PrerequisitePhase, logger: ScopedLogger): PrerequisiteRunHooks | undefined;
|
|
34
|
+
export declare function createMutationLogger(logger: ScopedLogger, options: {
|
|
35
|
+
collector?: (entry: MutationLogEntry) => void;
|
|
36
|
+
}): ServiceMutationHooks | undefined;
|
|
37
|
+
export declare function normalizePhase(value: string): PrerequisitePhase;
|