poe-code 1.2.1 → 2.0.0
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 +16 -20
- package/dist/cli/bootstrap.d.ts +4 -0
- package/dist/cli/bootstrap.js +75 -0
- package/dist/cli/bootstrap.js.map +1 -0
- package/dist/cli/commands/configure.d.ts +2 -1
- package/dist/cli/commands/configure.js +7 -7
- package/dist/cli/commands/configure.js.map +1 -1
- package/dist/cli/container.d.ts +0 -5
- package/dist/cli/container.js +0 -8
- package/dist/cli/container.js.map +1 -1
- package/dist/cli/error-logger.d.ts +17 -2
- package/dist/cli/error-logger.js.map +1 -1
- package/dist/cli/errors.d.ts +6 -0
- package/dist/cli/errors.js +8 -0
- package/dist/cli/errors.js.map +1 -1
- package/dist/cli/program.js +6 -26
- package/dist/cli/program.js.map +1 -1
- package/dist/cli/prompt-runner.d.ts +3 -0
- package/dist/cli/prompt-runner.js +9 -0
- package/dist/cli/prompt-runner.js.map +1 -0
- package/dist/cli/service-registry.d.ts +8 -0
- package/dist/cli/service-registry.js.map +1 -1
- package/dist/cli/ui/service-menu.d.ts +6 -0
- package/dist/cli/ui/service-menu.js +37 -0
- package/dist/cli/ui/service-menu.js.map +1 -0
- package/dist/cli/ui/theme.d.ts +16 -0
- package/dist/cli/ui/theme.js +78 -0
- package/dist/cli/ui/theme.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -74
- package/dist/index.js.map +1 -1
- package/dist/providers/claude-code-adapter.js +6 -0
- package/dist/providers/claude-code-adapter.js.map +1 -1
- package/dist/providers/codex-adapter.js +6 -0
- package/dist/providers/codex-adapter.js.map +1 -1
- package/dist/providers/opencode-adapter.js +6 -0
- package/dist/providers/opencode-adapter.js.map +1 -1
- package/package.json +13 -34
- package/dist/cli/api-client.d.ts +0 -14
- package/dist/cli/api-client.js +0 -140
- package/dist/cli/api-client.js.map +0 -1
- package/dist/cli/chat.d.ts +0 -32
- package/dist/cli/chat.js +0 -2
- package/dist/cli/chat.js.map +0 -1
- package/dist/cli/commands/agent.d.ts +0 -18
- package/dist/cli/commands/agent.js +0 -84
- package/dist/cli/commands/agent.js.map +0 -1
- package/dist/cli/commands/configure-agents.d.ts +0 -3
- package/dist/cli/commands/configure-agents.js +0 -72
- package/dist/cli/commands/configure-agents.js.map +0 -1
- package/dist/cli/commands/init.d.ts +0 -8
- package/dist/cli/commands/init.js +0 -45
- package/dist/cli/commands/init.js.map +0 -1
- package/dist/cli/commands/interactive.d.ts +0 -3
- package/dist/cli/commands/interactive.js +0 -17
- package/dist/cli/commands/interactive.js.map +0 -1
- package/dist/cli/commands/login.d.ts +0 -6
- package/dist/cli/commands/login.js +0 -51
- package/dist/cli/commands/login.js.map +0 -1
- package/dist/cli/commands/logout.d.ts +0 -3
- package/dist/cli/commands/logout.js +0 -31
- package/dist/cli/commands/logout.js.map +0 -1
- package/dist/cli/commands/prerequisites.d.ts +0 -3
- package/dist/cli/commands/prerequisites.js +0 -23
- package/dist/cli/commands/prerequisites.js.map +0 -1
- package/dist/cli/commands/query.d.ts +0 -7
- package/dist/cli/commands/query.js +0 -46
- package/dist/cli/commands/query.js.map +0 -1
- package/dist/cli/commands/remove.d.ts +0 -6
- package/dist/cli/commands/remove.js +0 -80
- package/dist/cli/commands/remove.js.map +0 -1
- package/dist/cli/commands/root.d.ts +0 -3
- package/dist/cli/commands/root.js +0 -7
- package/dist/cli/commands/root.js.map +0 -1
- package/dist/cli/commands/spawn-worktree.d.ts +0 -6
- package/dist/cli/commands/spawn-worktree.js +0 -91
- package/dist/cli/commands/spawn-worktree.js.map +0 -1
- package/dist/cli/commands/spawn.d.ts +0 -7
- package/dist/cli/commands/spawn.js +0 -112
- package/dist/cli/commands/spawn.js.map +0 -1
- package/dist/cli/commands/test.d.ts +0 -6
- package/dist/cli/commands/test.js +0 -26
- package/dist/cli/commands/test.js.map +0 -1
- package/dist/cli/file-mentions.d.ts +0 -13
- package/dist/cli/file-mentions.js +0 -87
- package/dist/cli/file-mentions.js.map +0 -1
- package/dist/cli/file-picker-state.d.ts +0 -14
- package/dist/cli/file-picker-state.js +0 -23
- package/dist/cli/file-picker-state.js.map +0 -1
- package/dist/cli/interactive-command-runner.d.ts +0 -11
- package/dist/cli/interactive-command-runner.js +0 -142
- package/dist/cli/interactive-command-runner.js.map +0 -1
- package/dist/cli/interactive-launcher.d.ts +0 -2
- package/dist/cli/interactive-launcher.js +0 -404
- package/dist/cli/interactive-launcher.js.map +0 -1
- package/dist/cli/interactive-tasks.d.ts +0 -7
- package/dist/cli/interactive-tasks.js +0 -199
- package/dist/cli/interactive-tasks.js.map +0 -1
- package/dist/cli/interactive.d.ts +0 -19
- package/dist/cli/interactive.js +0 -479
- package/dist/cli/interactive.js.map +0 -1
- package/dist/cli/markdown-renderer.d.ts +0 -27
- package/dist/cli/markdown-renderer.js +0 -178
- package/dist/cli/markdown-renderer.js.map +0 -1
- package/dist/cli/markdown-renderer.test.d.ts +0 -1
- package/dist/cli/markdown-renderer.test.js +0 -105
- package/dist/cli/markdown-renderer.test.js.map +0 -1
- package/dist/commands/init.d.ts +0 -9
- package/dist/commands/init.js +0 -43
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/spawn-worktree.d.ts +0 -25
- package/dist/commands/spawn-worktree.js +0 -139
- package/dist/commands/spawn-worktree.js.map +0 -1
- package/dist/services/agent-config-manager.d.ts +0 -32
- package/dist/services/agent-config-manager.js +0 -130
- package/dist/services/agent-config-manager.js.map +0 -1
- package/dist/services/agent-registry.d.ts +0 -27
- package/dist/services/agent-registry.js +0 -89
- package/dist/services/agent-registry.js.map +0 -1
- package/dist/services/agent-session.d.ts +0 -24
- package/dist/services/agent-session.js +0 -107
- package/dist/services/agent-session.js.map +0 -1
- package/dist/services/agent-task-registry.d.ts +0 -131
- package/dist/services/agent-task-registry.js +0 -491
- package/dist/services/agent-task-registry.js.map +0 -1
- package/dist/services/chat.d.ts +0 -94
- package/dist/services/chat.js +0 -241
- package/dist/services/chat.js.map +0 -1
- package/dist/services/mcp-client.d.ts +0 -38
- package/dist/services/mcp-client.js +0 -170
- package/dist/services/mcp-client.js.map +0 -1
- package/dist/services/mcp-manager.d.ts +0 -28
- package/dist/services/mcp-manager.js +0 -157
- package/dist/services/mcp-manager.js.map +0 -1
- package/dist/services/poe-code.d.ts +0 -7
- package/dist/services/poe-code.js +0 -5
- package/dist/services/poe-code.js.map +0 -1
- package/dist/services/task-logger.d.ts +0 -24
- package/dist/services/task-logger.js +0 -73
- package/dist/services/task-logger.js.map +0 -1
- package/dist/services/task-runner.d.ts +0 -19
- package/dist/services/task-runner.js +0 -157
- package/dist/services/task-runner.js.map +0 -1
- package/dist/services/tools.d.ts +0 -76
- package/dist/services/tools.js +0 -870
- package/dist/services/tools.js.map +0 -1
- package/dist/utils/e2e-flags.d.ts +0 -1
- package/dist/utils/e2e-flags.js +0 -9
- package/dist/utils/e2e-flags.js.map +0 -1
- package/dist/utils/worktree.d.ts +0 -40
- package/dist/utils/worktree.js +0 -179
- package/dist/utils/worktree.js.map +0 -1
- package/shared/conversation-layout.cjs +0 -11
- package/shared/conversation-layout.d.ts +0 -7
- package/shared/conversation-layout.js +0 -11
- package/shared/package.json +0 -13
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
import path from "node:path";
|
|
2
|
-
import { LEGACY_DEFAULT_AGENTS } from "./agent-registry.js";
|
|
3
|
-
const CONFIG_SCHEMA_URL = "https://poe.com/schemas/agent-config.schema.json";
|
|
4
|
-
export class AgentConfigManager {
|
|
5
|
-
constructor(init) {
|
|
6
|
-
this.cachedConfig = null;
|
|
7
|
-
this.fs = init.fs;
|
|
8
|
-
this.registry = init.registry;
|
|
9
|
-
this.homeDir = init.homeDir;
|
|
10
|
-
this.configPath = path.join(this.homeDir, ".poe-code", "agent-config.json");
|
|
11
|
-
}
|
|
12
|
-
getConfigPath() {
|
|
13
|
-
return this.configPath;
|
|
14
|
-
}
|
|
15
|
-
async loadConfig() {
|
|
16
|
-
if (this.cachedConfig) {
|
|
17
|
-
return cloneConfig(this.cachedConfig);
|
|
18
|
-
}
|
|
19
|
-
const existing = await this.readConfig();
|
|
20
|
-
const merged = this.mergeWithRegistry(existing);
|
|
21
|
-
if (!existing || !configsEqual(existing, merged)) {
|
|
22
|
-
await this.writeConfig(merged);
|
|
23
|
-
}
|
|
24
|
-
this.cachedConfig = merged;
|
|
25
|
-
return cloneConfig(merged);
|
|
26
|
-
}
|
|
27
|
-
async getEnabledAgents() {
|
|
28
|
-
const config = await this.loadConfig();
|
|
29
|
-
return config.agents
|
|
30
|
-
.filter((entry) => entry.enabled)
|
|
31
|
-
.map((entry) => ({ ...entry }));
|
|
32
|
-
}
|
|
33
|
-
async updateAgent(update) {
|
|
34
|
-
const config = await this.loadConfig();
|
|
35
|
-
const adapter = this.registry.get(update.id);
|
|
36
|
-
if (!adapter) {
|
|
37
|
-
throw new Error(`Unknown agent "${update.id}".`);
|
|
38
|
-
}
|
|
39
|
-
const target = config.agents.find((entry) => entry.id === update.id);
|
|
40
|
-
if (!target) {
|
|
41
|
-
throw new Error(`Agent "${update.id}" is not present in configuration.`);
|
|
42
|
-
}
|
|
43
|
-
if (target.enabled === update.enabled) {
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
target.enabled = update.enabled;
|
|
47
|
-
await this.writeConfig(config);
|
|
48
|
-
this.cachedConfig = config;
|
|
49
|
-
}
|
|
50
|
-
async readConfig() {
|
|
51
|
-
try {
|
|
52
|
-
const content = await this.fs.readFile(this.configPath, "utf8");
|
|
53
|
-
const parsed = JSON.parse(content);
|
|
54
|
-
if (!Array.isArray(parsed.agents)) {
|
|
55
|
-
return null;
|
|
56
|
-
}
|
|
57
|
-
const agents = parsed.agents
|
|
58
|
-
.filter((entry) => entry && typeof entry.id === "string")
|
|
59
|
-
.map((entry) => ({
|
|
60
|
-
id: entry.id,
|
|
61
|
-
enabled: Boolean(entry.enabled)
|
|
62
|
-
}));
|
|
63
|
-
const sanitized = {
|
|
64
|
-
$schema: typeof parsed.$schema === "string"
|
|
65
|
-
? parsed.$schema
|
|
66
|
-
: undefined,
|
|
67
|
-
agents
|
|
68
|
-
};
|
|
69
|
-
return sanitized;
|
|
70
|
-
}
|
|
71
|
-
catch (error) {
|
|
72
|
-
if (error &&
|
|
73
|
-
typeof error === "object" &&
|
|
74
|
-
"code" in error &&
|
|
75
|
-
error.code === "ENOENT") {
|
|
76
|
-
return null;
|
|
77
|
-
}
|
|
78
|
-
return null;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
mergeWithRegistry(existing) {
|
|
82
|
-
const existingMap = new Map();
|
|
83
|
-
if (existing) {
|
|
84
|
-
for (const entry of existing.agents) {
|
|
85
|
-
if (typeof entry.id === "string") {
|
|
86
|
-
existingMap.set(entry.id, Boolean(entry.enabled));
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
const agents = this.registry.list().map((adapter) => {
|
|
91
|
-
const current = existingMap.get(adapter.id);
|
|
92
|
-
const enabled = current !== undefined
|
|
93
|
-
? current
|
|
94
|
-
: adapter.defaultEnabled ??
|
|
95
|
-
LEGACY_DEFAULT_AGENTS.some((legacy) => legacy === adapter.id);
|
|
96
|
-
return { id: adapter.id, enabled };
|
|
97
|
-
});
|
|
98
|
-
return {
|
|
99
|
-
$schema: CONFIG_SCHEMA_URL,
|
|
100
|
-
agents
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
async writeConfig(config) {
|
|
104
|
-
await this.ensureDirectory();
|
|
105
|
-
const serialized = serializeConfig(config);
|
|
106
|
-
await this.fs.writeFile(this.configPath, serialized, { encoding: "utf8" });
|
|
107
|
-
}
|
|
108
|
-
async ensureDirectory() {
|
|
109
|
-
const dir = path.dirname(this.configPath);
|
|
110
|
-
try {
|
|
111
|
-
await this.fs.stat(dir);
|
|
112
|
-
}
|
|
113
|
-
catch {
|
|
114
|
-
await this.fs.mkdir(dir, { recursive: true });
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
function cloneConfig(config) {
|
|
119
|
-
return {
|
|
120
|
-
$schema: config.$schema,
|
|
121
|
-
agents: config.agents.map((entry) => ({ ...entry }))
|
|
122
|
-
};
|
|
123
|
-
}
|
|
124
|
-
function serializeConfig(config) {
|
|
125
|
-
return JSON.stringify(config, null, 2);
|
|
126
|
-
}
|
|
127
|
-
function configsEqual(a, b) {
|
|
128
|
-
return serializeConfig(a) === serializeConfig(b);
|
|
129
|
-
}
|
|
130
|
-
//# sourceMappingURL=agent-config-manager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-config-manager.js","sourceRoot":"","sources":["../../src/services/agent-config-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import type { CommandRunner, CommandRunnerResult } from "../utils/prerequisites.js";
|
|
2
|
-
export interface AgentSpawnOptions {
|
|
3
|
-
prompt: string;
|
|
4
|
-
args: string[];
|
|
5
|
-
runCommand: CommandRunner;
|
|
6
|
-
}
|
|
7
|
-
export interface AgentDetectionContext {
|
|
8
|
-
runCommand: CommandRunner;
|
|
9
|
-
}
|
|
10
|
-
export interface AgentAdapter {
|
|
11
|
-
id: string;
|
|
12
|
-
label: string;
|
|
13
|
-
spawn: (options: AgentSpawnOptions) => Promise<CommandRunnerResult>;
|
|
14
|
-
detect?: (context: AgentDetectionContext) => Promise<boolean>;
|
|
15
|
-
defaultEnabled?: boolean;
|
|
16
|
-
description?: string;
|
|
17
|
-
}
|
|
18
|
-
export declare class AgentRegistry {
|
|
19
|
-
private readonly adapters;
|
|
20
|
-
constructor(initialAdapters?: AgentAdapter[]);
|
|
21
|
-
register(adapter: AgentAdapter): void;
|
|
22
|
-
get(id: string): AgentAdapter | undefined;
|
|
23
|
-
has(id: string): boolean;
|
|
24
|
-
list(): AgentAdapter[];
|
|
25
|
-
}
|
|
26
|
-
export declare const LEGACY_DEFAULT_AGENTS: readonly ["claude-code", "codex", "opencode"];
|
|
27
|
-
export declare function createDefaultAgentRegistry(): AgentRegistry;
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
import { spawnCodex } from "./codex.js";
|
|
2
|
-
import { spawnClaudeCode } from "./claude-code.js";
|
|
3
|
-
import { spawnOpenCode } from "./opencode.js";
|
|
4
|
-
import { spawnPoeCode } from "./poe-code.js";
|
|
5
|
-
export class AgentRegistry {
|
|
6
|
-
constructor(initialAdapters = []) {
|
|
7
|
-
this.adapters = new Map();
|
|
8
|
-
for (const adapter of initialAdapters) {
|
|
9
|
-
this.register(adapter);
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
register(adapter) {
|
|
13
|
-
this.adapters.set(adapter.id, adapter);
|
|
14
|
-
}
|
|
15
|
-
get(id) {
|
|
16
|
-
return this.adapters.get(id);
|
|
17
|
-
}
|
|
18
|
-
has(id) {
|
|
19
|
-
return this.adapters.has(id);
|
|
20
|
-
}
|
|
21
|
-
list() {
|
|
22
|
-
return Array.from(this.adapters.values());
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
export const LEGACY_DEFAULT_AGENTS = [
|
|
26
|
-
"claude-code",
|
|
27
|
-
"codex",
|
|
28
|
-
"opencode"
|
|
29
|
-
];
|
|
30
|
-
export function createDefaultAgentRegistry() {
|
|
31
|
-
const registry = new AgentRegistry();
|
|
32
|
-
registry.register({
|
|
33
|
-
id: "claude-code",
|
|
34
|
-
label: "Claude Code",
|
|
35
|
-
spawn: async (options) => await spawnClaudeCode({
|
|
36
|
-
prompt: options.prompt,
|
|
37
|
-
args: options.args,
|
|
38
|
-
runCommand: options.runCommand
|
|
39
|
-
}),
|
|
40
|
-
detect: createBinaryDetector("claude"),
|
|
41
|
-
defaultEnabled: true
|
|
42
|
-
});
|
|
43
|
-
registry.register({
|
|
44
|
-
id: "codex",
|
|
45
|
-
label: "Codex CLI",
|
|
46
|
-
spawn: async (options) => await spawnCodex({
|
|
47
|
-
prompt: options.prompt,
|
|
48
|
-
args: options.args,
|
|
49
|
-
runCommand: options.runCommand
|
|
50
|
-
}),
|
|
51
|
-
detect: createBinaryDetector("codex"),
|
|
52
|
-
defaultEnabled: true
|
|
53
|
-
});
|
|
54
|
-
registry.register({
|
|
55
|
-
id: "opencode",
|
|
56
|
-
label: "OpenCode CLI",
|
|
57
|
-
spawn: async (options) => await spawnOpenCode({
|
|
58
|
-
prompt: options.prompt,
|
|
59
|
-
args: options.args,
|
|
60
|
-
runCommand: options.runCommand
|
|
61
|
-
}),
|
|
62
|
-
detect: createBinaryDetector("opencode"),
|
|
63
|
-
defaultEnabled: true
|
|
64
|
-
});
|
|
65
|
-
registry.register({
|
|
66
|
-
id: "poe-code",
|
|
67
|
-
label: "Poe Code",
|
|
68
|
-
spawn: async (options) => await spawnPoeCode({
|
|
69
|
-
prompt: options.prompt,
|
|
70
|
-
args: options.args,
|
|
71
|
-
runCommand: options.runCommand
|
|
72
|
-
}),
|
|
73
|
-
detect: async () => true,
|
|
74
|
-
defaultEnabled: false
|
|
75
|
-
});
|
|
76
|
-
return registry;
|
|
77
|
-
}
|
|
78
|
-
function createBinaryDetector(command) {
|
|
79
|
-
return async ({ runCommand }) => {
|
|
80
|
-
try {
|
|
81
|
-
const result = await runCommand(command, ["--version"]);
|
|
82
|
-
return result.exitCode === 0;
|
|
83
|
-
}
|
|
84
|
-
catch {
|
|
85
|
-
return false;
|
|
86
|
-
}
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
//# sourceMappingURL=agent-registry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-registry.js","sourceRoot":"","sources":["../../src/services/agent-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import type { FileSystem } from "../utils/file-system.js";
|
|
2
|
-
import { type ChatMessage, type ToolCallCallback } from "./chat.js";
|
|
3
|
-
import { type AgentTask } from "./agent-task-registry.js";
|
|
4
|
-
export interface AgentSession {
|
|
5
|
-
getModel(): string;
|
|
6
|
-
setToolCallCallback(callback: ToolCallCallback): void;
|
|
7
|
-
sendMessage(prompt: string, options?: {
|
|
8
|
-
signal?: AbortSignal;
|
|
9
|
-
onChunk?: (chunk: string) => void;
|
|
10
|
-
}): Promise<ChatMessage>;
|
|
11
|
-
waitForAllTasks(): Promise<void>;
|
|
12
|
-
drainCompletedTasks(): AgentTask[];
|
|
13
|
-
dispose(): Promise<void>;
|
|
14
|
-
}
|
|
15
|
-
export interface AgentSessionOptions {
|
|
16
|
-
fs: FileSystem;
|
|
17
|
-
cwd: string;
|
|
18
|
-
homeDir: string;
|
|
19
|
-
apiKey: string;
|
|
20
|
-
model: string;
|
|
21
|
-
logger: (message: string) => void;
|
|
22
|
-
awaitTasksOnDispose?: boolean;
|
|
23
|
-
}
|
|
24
|
-
export declare function createAgentSession(options: AgentSessionOptions): Promise<AgentSession>;
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
import path from "node:path";
|
|
2
|
-
import * as fs from "node:fs";
|
|
3
|
-
import { DefaultToolExecutor, getAvailableTools } from "./tools.js";
|
|
4
|
-
import { McpManager } from "./mcp-manager.js";
|
|
5
|
-
import { PoeChatService } from "./chat.js";
|
|
6
|
-
import { AgentTaskRegistry } from "./agent-task-registry.js";
|
|
7
|
-
import { AgentConfigManager } from "./agent-config-manager.js";
|
|
8
|
-
import { createDefaultAgentRegistry } from "./agent-registry.js";
|
|
9
|
-
export async function createAgentSession(options) {
|
|
10
|
-
const mcpManager = new McpManager(options.fs, options.homeDir);
|
|
11
|
-
try {
|
|
12
|
-
await mcpManager.connectAll();
|
|
13
|
-
}
|
|
14
|
-
catch (error) {
|
|
15
|
-
options.logger(`Failed to connect to some MCP servers: ${formatError(error)}`);
|
|
16
|
-
}
|
|
17
|
-
let systemPrompt;
|
|
18
|
-
try {
|
|
19
|
-
const systemPromptPath = path.join(options.cwd, "SYSTEM_PROMPT.md");
|
|
20
|
-
systemPrompt = await options.fs.readFile(systemPromptPath, "utf8");
|
|
21
|
-
}
|
|
22
|
-
catch {
|
|
23
|
-
systemPrompt = undefined;
|
|
24
|
-
}
|
|
25
|
-
const cwdContext = `\n\nIMPORTANT: You are working in the directory: ${options.cwd}\nWhen accessing files, use paths relative to this directory.`;
|
|
26
|
-
systemPrompt = systemPrompt ? `${systemPrompt}${cwdContext}` : cwdContext;
|
|
27
|
-
const tasksDir = path.join(options.homeDir, ".poe-code", "tasks");
|
|
28
|
-
const logsDir = path.join(options.homeDir, ".poe-code", "logs", "tasks");
|
|
29
|
-
const nativeFs = fs;
|
|
30
|
-
const taskRegistry = new AgentTaskRegistry({
|
|
31
|
-
fs: nativeFs,
|
|
32
|
-
tasksDir,
|
|
33
|
-
logsDir,
|
|
34
|
-
logger: (event, payload) => {
|
|
35
|
-
options.logger(`task:${event} ${JSON.stringify(payload ?? {})}`);
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
const awaitTasksOnDispose = options.awaitTasksOnDispose ?? false;
|
|
39
|
-
const agentRegistry = createDefaultAgentRegistry();
|
|
40
|
-
const agentConfigManager = new AgentConfigManager({
|
|
41
|
-
fs: options.fs,
|
|
42
|
-
homeDir: options.homeDir,
|
|
43
|
-
registry: agentRegistry
|
|
44
|
-
});
|
|
45
|
-
try {
|
|
46
|
-
await agentConfigManager.loadConfig();
|
|
47
|
-
}
|
|
48
|
-
catch (error) {
|
|
49
|
-
options.logger(`Failed to load agent configuration: ${formatError(error)}`);
|
|
50
|
-
}
|
|
51
|
-
const toolExecutor = new DefaultToolExecutor({
|
|
52
|
-
fs: options.fs,
|
|
53
|
-
cwd: options.cwd,
|
|
54
|
-
allowedPaths: [options.cwd, options.homeDir],
|
|
55
|
-
mcpManager,
|
|
56
|
-
taskRegistry,
|
|
57
|
-
onWriteFile: async ({ relativePath }) => {
|
|
58
|
-
options.logger(`Tool write_file -> ${relativePath}`);
|
|
59
|
-
},
|
|
60
|
-
agentRegistry,
|
|
61
|
-
agentConfigManager,
|
|
62
|
-
homeDir: options.homeDir
|
|
63
|
-
});
|
|
64
|
-
let toolCallback;
|
|
65
|
-
const chatService = new PoeChatService(options.apiKey, options.model, toolExecutor, (event) => {
|
|
66
|
-
toolCallback?.(event);
|
|
67
|
-
}, systemPrompt, taskRegistry);
|
|
68
|
-
return {
|
|
69
|
-
getModel() {
|
|
70
|
-
return chatService.getModel();
|
|
71
|
-
},
|
|
72
|
-
setToolCallCallback(callback) {
|
|
73
|
-
toolCallback = callback;
|
|
74
|
-
chatService.setToolCallCallback(callback);
|
|
75
|
-
},
|
|
76
|
-
async sendMessage(prompt, options) {
|
|
77
|
-
const tools = await getAvailableTools({
|
|
78
|
-
agentRegistry,
|
|
79
|
-
agentConfigManager,
|
|
80
|
-
mcpManager
|
|
81
|
-
});
|
|
82
|
-
return chatService.sendMessage(prompt, tools, options);
|
|
83
|
-
},
|
|
84
|
-
async waitForAllTasks() {
|
|
85
|
-
await taskRegistry.waitForAllTasks();
|
|
86
|
-
},
|
|
87
|
-
drainCompletedTasks() {
|
|
88
|
-
const completed = taskRegistry.getCompletedTasks();
|
|
89
|
-
taskRegistry.clearCompleted();
|
|
90
|
-
return completed;
|
|
91
|
-
},
|
|
92
|
-
async dispose() {
|
|
93
|
-
if (awaitTasksOnDispose) {
|
|
94
|
-
await taskRegistry.waitForAllTasks();
|
|
95
|
-
}
|
|
96
|
-
taskRegistry.dispose();
|
|
97
|
-
await mcpManager.disconnectAll();
|
|
98
|
-
}
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
function formatError(error) {
|
|
102
|
-
if (error instanceof Error) {
|
|
103
|
-
return error.message;
|
|
104
|
-
}
|
|
105
|
-
return String(error);
|
|
106
|
-
}
|
|
107
|
-
//# sourceMappingURL=agent-session.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-session.js","sourceRoot":"","sources":["../../src/services/agent-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
import type { FSWatcher, Stats } from "node:fs";
|
|
2
|
-
export type AgentTaskStatus = "running" | "completed" | "failed" | "killed";
|
|
3
|
-
export interface AgentTask {
|
|
4
|
-
id: string;
|
|
5
|
-
toolName: string;
|
|
6
|
-
args: Record<string, unknown>;
|
|
7
|
-
status: AgentTaskStatus;
|
|
8
|
-
startTime: number;
|
|
9
|
-
endTime?: number;
|
|
10
|
-
result?: string;
|
|
11
|
-
error?: string;
|
|
12
|
-
logFile: string;
|
|
13
|
-
progressFile: string;
|
|
14
|
-
pid?: number;
|
|
15
|
-
command?: string;
|
|
16
|
-
worktreePath?: string;
|
|
17
|
-
}
|
|
18
|
-
export interface ProgressUpdate {
|
|
19
|
-
type: "progress" | "complete" | "error";
|
|
20
|
-
message?: string;
|
|
21
|
-
result?: string;
|
|
22
|
-
error?: string;
|
|
23
|
-
timestamp: number;
|
|
24
|
-
}
|
|
25
|
-
type MinimalStats = Pick<Stats, "size" | "mtimeMs">;
|
|
26
|
-
export interface FsLike {
|
|
27
|
-
promises: {
|
|
28
|
-
mkdir(path: string, options?: {
|
|
29
|
-
recursive?: boolean;
|
|
30
|
-
}): Promise<void>;
|
|
31
|
-
readFile(path: string, encoding: BufferEncoding): Promise<string>;
|
|
32
|
-
writeFile(path: string, data: string | Uint8Array, options?: {
|
|
33
|
-
encoding?: BufferEncoding;
|
|
34
|
-
}): Promise<void>;
|
|
35
|
-
appendFile(path: string, data: string | Uint8Array, options?: {
|
|
36
|
-
encoding?: BufferEncoding;
|
|
37
|
-
}): Promise<void>;
|
|
38
|
-
readdir(path: string): Promise<string[]>;
|
|
39
|
-
stat(path: string): Promise<MinimalStats>;
|
|
40
|
-
unlink(path: string): Promise<void>;
|
|
41
|
-
rename(oldPath: string, newPath: string): Promise<void>;
|
|
42
|
-
};
|
|
43
|
-
watch(filename: string, listener: (event: string, filename: string | null) => void): FSWatcher;
|
|
44
|
-
existsSync(path: string): boolean;
|
|
45
|
-
mkdirSync(path: string, options?: {
|
|
46
|
-
recursive?: boolean;
|
|
47
|
-
}): void;
|
|
48
|
-
readFileSync(path: string, encoding: BufferEncoding): string;
|
|
49
|
-
writeFileSync(path: string, data: string, options?: {
|
|
50
|
-
encoding?: BufferEncoding;
|
|
51
|
-
}): void;
|
|
52
|
-
appendFileSync(path: string, data: string): void;
|
|
53
|
-
statSync(path: string): MinimalStats;
|
|
54
|
-
unlinkSync(path: string): void;
|
|
55
|
-
renameSync(oldPath: string, newPath: string): void;
|
|
56
|
-
readdirSync(path: string): string[];
|
|
57
|
-
}
|
|
58
|
-
export interface AgentTaskRegistryOptions {
|
|
59
|
-
fs: FsLike;
|
|
60
|
-
tasksDir: string;
|
|
61
|
-
logsDir: string;
|
|
62
|
-
now?: () => number;
|
|
63
|
-
maxTasks?: number;
|
|
64
|
-
archiveAfterMs?: number;
|
|
65
|
-
logRetentionMs?: number;
|
|
66
|
-
completionRetentionMs?: number;
|
|
67
|
-
watchFactory?: (dir: string, listener: (event: string, filename: string | null) => void) => FSWatcher;
|
|
68
|
-
debounceMs?: number;
|
|
69
|
-
logger?: (event: string, payload?: Record<string, unknown>) => void;
|
|
70
|
-
}
|
|
71
|
-
export declare class AgentTaskRegistry {
|
|
72
|
-
private readonly fs;
|
|
73
|
-
private readonly tasksDir;
|
|
74
|
-
private readonly logsDir;
|
|
75
|
-
private readonly now;
|
|
76
|
-
private readonly maxTasks;
|
|
77
|
-
private readonly archiveAfterMs;
|
|
78
|
-
private readonly logRetentionMs;
|
|
79
|
-
private readonly completionRetentionMs;
|
|
80
|
-
private readonly watchFactory?;
|
|
81
|
-
private readonly debounceMs;
|
|
82
|
-
private readonly logger?;
|
|
83
|
-
private watcher?;
|
|
84
|
-
private readonly tasks;
|
|
85
|
-
private readonly taskOrder;
|
|
86
|
-
private readonly completionCallbacks;
|
|
87
|
-
private readonly progressCallbacks;
|
|
88
|
-
private readonly completedQueue;
|
|
89
|
-
private readonly completedSet;
|
|
90
|
-
private readonly pendingDebounce;
|
|
91
|
-
constructor(options: AgentTaskRegistryOptions);
|
|
92
|
-
get size(): number;
|
|
93
|
-
getTasksDirectory(): string;
|
|
94
|
-
getLogsDirectory(): string;
|
|
95
|
-
registerTask(input: {
|
|
96
|
-
toolName: string;
|
|
97
|
-
args: Record<string, unknown>;
|
|
98
|
-
}): string;
|
|
99
|
-
updateTask(id: string, patch: Partial<AgentTask>): void;
|
|
100
|
-
getTask(id: string): AgentTask | undefined;
|
|
101
|
-
getAllTasks(): AgentTask[];
|
|
102
|
-
getRunningTasks(): AgentTask[];
|
|
103
|
-
getCompletedTasks(): AgentTask[];
|
|
104
|
-
clearCompleted(): void;
|
|
105
|
-
onTaskComplete(callback: (task: AgentTask) => void): void;
|
|
106
|
-
onTaskProgress(callback: (taskId: string, update: ProgressUpdate) => void): void;
|
|
107
|
-
killTask(id: string): boolean;
|
|
108
|
-
readProgress(taskId: string): ProgressUpdate[];
|
|
109
|
-
waitForTask(id: string, onUpdate: (update: ProgressUpdate) => void): Promise<AgentTask | undefined>;
|
|
110
|
-
dispose(): void;
|
|
111
|
-
waitForAllTasks(): Promise<void>;
|
|
112
|
-
private ensureDirectories;
|
|
113
|
-
private bootstrapFromDisk;
|
|
114
|
-
private loadExistingTasks;
|
|
115
|
-
private cleanupCompletedTasks;
|
|
116
|
-
private cleanupArchives;
|
|
117
|
-
private cleanupLogs;
|
|
118
|
-
private startWatching;
|
|
119
|
-
private handleFileChange;
|
|
120
|
-
private enqueueCompletion;
|
|
121
|
-
private readLatestProgress;
|
|
122
|
-
archiveTask(id: string): void;
|
|
123
|
-
private trimCache;
|
|
124
|
-
private ensureFile;
|
|
125
|
-
private persistTask;
|
|
126
|
-
private loadTask;
|
|
127
|
-
private createTaskId;
|
|
128
|
-
private isTerminal;
|
|
129
|
-
private isProcessAlive;
|
|
130
|
-
}
|
|
131
|
-
export {};
|