0xkobold 0.6.4 → 0.6.6
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 +9 -3
- package/dist/package.json +4 -2
- package/dist/src/cli/index.js +0 -0
- package/dist/src/extensions/core/workspace-footer-extension.js +2 -11
- package/dist/src/extensions/core/workspace-footer-extension.js.map +1 -1
- package/dist/src/index.js +31 -5
- package/dist/src/index.js.map +1 -1
- package/package.json +4 -2
- package/dist/src/agents/task-router.js +0 -194
- package/dist/src/agents/task-router.js.map +0 -1
- package/dist/src/agents/tools/index.js +0 -2
- package/dist/src/agents/tools/index.js.map +0 -1
- package/dist/src/agents/tools/spawn-agent.js +0 -200
- package/dist/src/agents/tools/spawn-agent.js.map +0 -1
- package/dist/src/agents/types/definitions.js +0 -317
- package/dist/src/agents/types/definitions.js.map +0 -1
- package/dist/src/agents/types/index.js +0 -2
- package/dist/src/agents/types/index.js.map +0 -1
- package/dist/src/cli/program-fixed.js +0 -1
- package/dist/src/cli/program-fixed.js.map +0 -1
- package/dist/src/extensions/core/agent-lifecycle-extension.js +0 -323
- package/dist/src/extensions/core/agent-lifecycle-extension.js.map +0 -1
- package/dist/src/extensions/core/agent-registry-extension.js +0 -541
- package/dist/src/extensions/core/agent-registry-extension.js.map +0 -1
- package/dist/src/extensions/core/agent-worker.js +0 -148
- package/dist/src/extensions/core/agent-worker.js.map +0 -1
- package/dist/src/extensions/core/agent-workspace-extension.js +0 -174
- package/dist/src/extensions/core/agent-workspace-extension.js.map +0 -1
- package/dist/src/extensions/core/auto-compact-on-error-extension.js +0 -244
- package/dist/src/extensions/core/auto-compact-on-error-extension.js.map +0 -1
- package/dist/src/extensions/core/autonomous-executor-extension.js +0 -145
- package/dist/src/extensions/core/autonomous-executor-extension.js.map +0 -1
- package/dist/src/extensions/core/autonomous-subagent-extension.js +0 -333
- package/dist/src/extensions/core/autonomous-subagent-extension.js.map +0 -1
- package/dist/src/extensions/core/compaction-safeguard-v2.js +0 -95
- package/dist/src/extensions/core/compaction-safeguard-v2.js.map +0 -1
- package/dist/src/extensions/core/confirm-destructive.js +0 -43
- package/dist/src/extensions/core/confirm-destructive.js.map +0 -1
- package/dist/src/extensions/core/context-aware-extension.js +0 -124
- package/dist/src/extensions/core/context-aware-extension.js.map +0 -1
- package/dist/src/extensions/core/deprecated/agent-lifecycle-extension.js +0 -323
- package/dist/src/extensions/core/deprecated/agent-lifecycle-extension.js.map +0 -1
- package/dist/src/extensions/core/deprecated/autonomous-subagent-extension.js +0 -333
- package/dist/src/extensions/core/deprecated/autonomous-subagent-extension.js.map +0 -1
- package/dist/src/extensions/core/deprecated/subagent-extension.js +0 -647
- package/dist/src/extensions/core/deprecated/subagent-extension.js.map +0 -1
- package/dist/src/extensions/core/dirty-repo-guard.js +0 -42
- package/dist/src/extensions/core/dirty-repo-guard.js.map +0 -1
- package/dist/src/extensions/core/env-loader-extension.js +0 -157
- package/dist/src/extensions/core/env-loader-extension.js.map +0 -1
- package/dist/src/extensions/core/git-checkpoint.js +0 -46
- package/dist/src/extensions/core/git-checkpoint.js.map +0 -1
- package/dist/src/extensions/core/handoff-extension.js +0 -206
- package/dist/src/extensions/core/handoff-extension.js.map +0 -1
- package/dist/src/extensions/core/memory-extension.js +0 -120
- package/dist/src/extensions/core/memory-extension.js.map +0 -1
- package/dist/src/extensions/core/memory-synthesis-extension.js +0 -137
- package/dist/src/extensions/core/memory-synthesis-extension.js.map +0 -1
- package/dist/src/extensions/core/mode-manager-extension.js +0 -592
- package/dist/src/extensions/core/mode-manager-extension.js.map +0 -1
- package/dist/src/extensions/core/ollama-cloud-extension.js +0 -132
- package/dist/src/extensions/core/ollama-cloud-extension.js.map +0 -1
- package/dist/src/extensions/core/ollama-provider-extension.js +0 -66
- package/dist/src/extensions/core/ollama-provider-extension.js.map +0 -1
- package/dist/src/extensions/core/ollama-router-extension.js +0 -41
- package/dist/src/extensions/core/ollama-router-extension.js.map +0 -1
- package/dist/src/extensions/core/protected-paths.js +0 -24
- package/dist/src/extensions/core/protected-paths.js.map +0 -1
- package/dist/src/extensions/core/questionnaire-extension.js +0 -242
- package/dist/src/extensions/core/questionnaire-extension.js.map +0 -1
- package/dist/src/extensions/core/session-bridge-extension.js +0 -14
- package/dist/src/extensions/core/session-bridge-extension.js.map +0 -1
- package/dist/src/extensions/core/session-manager-extension.js +0 -336
- package/dist/src/extensions/core/session-manager-extension.js.map +0 -1
- package/dist/src/extensions/core/session-name-extension.js +0 -88
- package/dist/src/extensions/core/session-name-extension.js.map +0 -1
- package/dist/src/extensions/core/session-pruning-extension.js +0 -480
- package/dist/src/extensions/core/session-pruning-extension.js.map +0 -1
- package/dist/src/extensions/core/subagent-extension.js +0 -647
- package/dist/src/extensions/core/subagent-extension.js.map +0 -1
- package/dist/src/extensions/core/tui-integration-extension-fixed.js +0 -3
- package/dist/src/extensions/core/tui-integration-extension-fixed.js.map +0 -1
- package/dist/src/extensions/core/websearch-extension.js +0 -489
- package/dist/src/extensions/core/websearch-extension.js.map +0 -1
- package/dist/src/extensions/core/websearch-v2-extension.js +0 -303
- package/dist/src/extensions/core/websearch-v2-extension.js.map +0 -1
- package/dist/src/tui/commands/final-functions.js +0 -39
- package/dist/src/tui/commands/final-functions.js.map +0 -1
- package/dist/src/tui/commands/orchestration-final-section.js +0 -84
- package/dist/src/tui/commands/orchestration-final-section.js.map +0 -1
- package/dist/src/tui/components/footer.js +0 -106
- package/dist/src/tui/components/footer.js.map +0 -1
- package/dist/src/tui/components/sidebar.js +0 -82
- package/dist/src/tui/components/sidebar.js.map +0 -1
- package/dist/src/tui/gateway-chat-client.js +0 -218
- package/dist/src/tui/gateway-chat-client.js.map +0 -1
- package/dist/src/tui/pi-tui-integration.js +0 -260
- package/dist/src/tui/pi-tui-integration.js.map +0 -1
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bun
|
|
2
|
-
/**
|
|
3
|
-
* Agent Worker Process
|
|
4
|
-
*
|
|
5
|
-
* This is spawned as a subprocess by agent-registry-extension.ts
|
|
6
|
-
* Connects to gateway, authenticates, executes task, reports completion.
|
|
7
|
-
*/
|
|
8
|
-
const AGENT_ID = process.env.KOBOLD_AGENT_ID;
|
|
9
|
-
const AGENT_TYPE = process.env.KOBOLD_AGENT_TYPE;
|
|
10
|
-
const AGENT_TASK = process.env.KOBOLD_AGENT_TASK;
|
|
11
|
-
const SESSION_KEY = process.env.KOBOLD_SESSION_KEY;
|
|
12
|
-
const PARENT_ID = process.env.KOBOLD_PARENT_ID || "";
|
|
13
|
-
const WORKSPACE = process.env.KOBOLD_WORKSPACE;
|
|
14
|
-
const GATEWAY_PORT = parseInt(process.env.KOBOLD_GATEWAY_PORT || "18789");
|
|
15
|
-
if (!AGENT_ID || !SESSION_KEY) {
|
|
16
|
-
console.error("[AgentWorker] Missing required environment variables");
|
|
17
|
-
process.exit(1);
|
|
18
|
-
}
|
|
19
|
-
console.log(`[AgentWorker] ${AGENT_ID} starting...`);
|
|
20
|
-
console.log(`[AgentWorker] Type: ${AGENT_TYPE}`);
|
|
21
|
-
console.log(`[AgentWorker] Task: ${AGENT_TASK?.slice(0, 100)}...`);
|
|
22
|
-
console.log(`[AgentWorker] Workspace: ${WORKSPACE}`);
|
|
23
|
-
// Results tracking
|
|
24
|
-
let tokensInput = 0;
|
|
25
|
-
let tokensOutput = 0;
|
|
26
|
-
let result = "";
|
|
27
|
-
let exitCode = 0;
|
|
28
|
-
// Main execution
|
|
29
|
-
async function main() {
|
|
30
|
-
try {
|
|
31
|
-
// Connect to gateway
|
|
32
|
-
await connectToGateway();
|
|
33
|
-
// Execute the task
|
|
34
|
-
await executeTask();
|
|
35
|
-
// Report completion
|
|
36
|
-
await reportCompletion("success");
|
|
37
|
-
console.log("[AgentWorker] Completed successfully");
|
|
38
|
-
process.exit(0);
|
|
39
|
-
}
|
|
40
|
-
catch (error) {
|
|
41
|
-
console.error("[AgentWorker] Error:", error);
|
|
42
|
-
await reportCompletion("error", String(error));
|
|
43
|
-
process.exit(1);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
async function connectToGateway() {
|
|
47
|
-
return new Promise((resolve, reject) => {
|
|
48
|
-
const ws = new WebSocket(`ws://127.0.0.1:${GATEWAY_PORT}`);
|
|
49
|
-
ws.onopen = () => {
|
|
50
|
-
console.log("[AgentWorker] Connected to gateway");
|
|
51
|
-
// Send connect frame with authentication
|
|
52
|
-
const connectFrame = {
|
|
53
|
-
type: "connect",
|
|
54
|
-
id: `conn-${Date.now()}`,
|
|
55
|
-
params: {
|
|
56
|
-
role: "node",
|
|
57
|
-
client: AGENT_ID,
|
|
58
|
-
caps: ["subagent"],
|
|
59
|
-
device: { id: AGENT_ID, platform: "bun-subprocess" },
|
|
60
|
-
sessionKey: SESSION_KEY,
|
|
61
|
-
},
|
|
62
|
-
};
|
|
63
|
-
ws.send(JSON.stringify(connectFrame));
|
|
64
|
-
// Wait for response
|
|
65
|
-
const onMessage = (data) => {
|
|
66
|
-
try {
|
|
67
|
-
const frame = JSON.parse(data.data);
|
|
68
|
-
if (frame.type === "res" && frame.ok) {
|
|
69
|
-
console.log("[AgentWorker] Authenticated with gateway");
|
|
70
|
-
ws.removeEventListener("message", onMessage);
|
|
71
|
-
resolve();
|
|
72
|
-
}
|
|
73
|
-
else if (frame.type === "res" && !frame.ok) {
|
|
74
|
-
reject(new Error(frame.error || "Authentication failed"));
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
catch { }
|
|
78
|
-
};
|
|
79
|
-
ws.addEventListener("message", onMessage);
|
|
80
|
-
};
|
|
81
|
-
ws.onerror = (err) => {
|
|
82
|
-
reject(new Error(`WebSocket error: ${err}`));
|
|
83
|
-
};
|
|
84
|
-
// Timeout after 10 seconds
|
|
85
|
-
setTimeout(() => reject(new Error("Gateway connection timeout")), 10000);
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
async function executeTask() {
|
|
89
|
-
const task = AGENT_TASK || "";
|
|
90
|
-
// Simulate work - in real implementation, this would:
|
|
91
|
-
// - Initialize the pi-coding-agent framework
|
|
92
|
-
// - Execute the task using available tools
|
|
93
|
-
// - Track token usage
|
|
94
|
-
// - Generate output
|
|
95
|
-
console.log("[AgentWorker] Executing task...");
|
|
96
|
-
// Simulate processing time
|
|
97
|
-
await delay(2000 + Math.random() * 3000);
|
|
98
|
-
// Simulate token counting
|
|
99
|
-
tokensInput = task.length * 2;
|
|
100
|
-
tokensOutput = Math.floor(Math.random() * 500) + 100;
|
|
101
|
-
// Generate result
|
|
102
|
-
result = `Task completed by ${AGENT_ID}\\n` +
|
|
103
|
-
`Type: ${AGENT_TYPE}\\n` +
|
|
104
|
-
`Task: ${task.slice(0, 50)}...\\n` +
|
|
105
|
-
`Output: ${tokensOutput} tokens generated`;
|
|
106
|
-
console.log("[AgentWorker] Task complete");
|
|
107
|
-
console.log(`[AgentWorker] Input tokens: ${tokensInput}`);
|
|
108
|
-
console.log(`[AgentWorker] Output tokens: ${tokensOutput}`);
|
|
109
|
-
}
|
|
110
|
-
async function reportCompletion(status, errorMessage) {
|
|
111
|
-
const ws = new WebSocket(`ws://127.0.0.1:${GATEWAY_PORT}`);
|
|
112
|
-
return new Promise((resolve) => {
|
|
113
|
-
ws.onopen = () => {
|
|
114
|
-
const announceFrame = {
|
|
115
|
-
type: "req",
|
|
116
|
-
id: `announce-${Date.now()}`,
|
|
117
|
-
method: "agent.announce",
|
|
118
|
-
params: {
|
|
119
|
-
sessionKey: SESSION_KEY,
|
|
120
|
-
source: "subagent",
|
|
121
|
-
childSessionKey: SESSION_KEY,
|
|
122
|
-
taskLabel: AGENT_TASK?.slice(0, 50),
|
|
123
|
-
status: status === "success" ? "success" : "error",
|
|
124
|
-
result: errorMessage || result,
|
|
125
|
-
tokens: { input: tokensInput, output: tokensOutput },
|
|
126
|
-
runtime: Date.now() - startTime,
|
|
127
|
-
exitCode: status === "success" ? 0 : 1,
|
|
128
|
-
},
|
|
129
|
-
};
|
|
130
|
-
ws.send(JSON.stringify(announceFrame));
|
|
131
|
-
// Close after sending
|
|
132
|
-
setTimeout(() => {
|
|
133
|
-
ws.close();
|
|
134
|
-
resolve();
|
|
135
|
-
}, 500);
|
|
136
|
-
};
|
|
137
|
-
ws.onerror = () => {
|
|
138
|
-
console.error("[AgentWorker] Failed to report completion");
|
|
139
|
-
resolve();
|
|
140
|
-
};
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
function delay(ms) {
|
|
144
|
-
return new Promise(resolve => setTimeout(resolve, ms));
|
|
145
|
-
}
|
|
146
|
-
const startTime = Date.now();
|
|
147
|
-
main();
|
|
148
|
-
//# sourceMappingURL=agent-worker.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-worker.js","sourceRoot":"","sources":["../../../../src/extensions/core/agent-worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,174 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Agent Workspace Extension - v0.2.0
|
|
3
|
-
*
|
|
4
|
-
* Manages main agent workspaces and configuration.
|
|
5
|
-
* Discovers agents from ~/.0xkobold/agents/
|
|
6
|
-
*
|
|
7
|
-
* @version 0.2.0
|
|
8
|
-
*/
|
|
9
|
-
import { Type } from "@sinclair/typebox";
|
|
10
|
-
import * as fs from "node:fs/promises";
|
|
11
|
-
import * as path from "node:path";
|
|
12
|
-
import { homedir } from "node:os";
|
|
13
|
-
import { existsSync } from "node:fs";
|
|
14
|
-
const AGENTS_DIR = path.join(homedir(), ".0xkobold", "agents");
|
|
15
|
-
async function discoverAgents() {
|
|
16
|
-
const agents = new Map();
|
|
17
|
-
try {
|
|
18
|
-
const entries = await fs.readdir(AGENTS_DIR, { withFileTypes: true });
|
|
19
|
-
for (const entry of entries) {
|
|
20
|
-
if (entry.isDirectory()) {
|
|
21
|
-
const agentDir = path.join(AGENTS_DIR, entry.name);
|
|
22
|
-
const configPath = path.join(agentDir, "config.json");
|
|
23
|
-
if (existsSync(configPath)) {
|
|
24
|
-
try {
|
|
25
|
-
const content = await fs.readFile(configPath, "utf-8");
|
|
26
|
-
const config = JSON.parse(content);
|
|
27
|
-
// Validate required fields
|
|
28
|
-
if (config.name && config.workspace) {
|
|
29
|
-
agents.set(config.name, {
|
|
30
|
-
name: config.name,
|
|
31
|
-
config,
|
|
32
|
-
status: "stopped",
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
catch (error) {
|
|
37
|
-
console.log(`[AgentWorkspace] Failed to load ${entry.name}: ${error}`);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
catch (error) {
|
|
44
|
-
console.log(`[AgentWorkspace] Agents directory not accessible: ${AGENTS_DIR}`);
|
|
45
|
-
}
|
|
46
|
-
return agents;
|
|
47
|
-
}
|
|
48
|
-
async function createDefaultAgent(name) {
|
|
49
|
-
const agentDir = path.join(AGENTS_DIR, name);
|
|
50
|
-
const workspaceDir = path.join(agentDir, "workspace");
|
|
51
|
-
const memoryDir = path.join(agentDir, "memory");
|
|
52
|
-
const logsDir = path.join(agentDir, "logs");
|
|
53
|
-
const agentsDir = path.join(agentDir, "agents");
|
|
54
|
-
// Create directories
|
|
55
|
-
await fs.mkdir(agentDir, { recursive: true });
|
|
56
|
-
await fs.mkdir(workspaceDir, { recursive: true });
|
|
57
|
-
await fs.mkdir(memoryDir, { recursive: true });
|
|
58
|
-
await fs.mkdir(logsDir, { recursive: true });
|
|
59
|
-
await fs.mkdir(agentsDir, { recursive: true });
|
|
60
|
-
// Create config
|
|
61
|
-
const config = {
|
|
62
|
-
name,
|
|
63
|
-
description: `Main agent for ${name}`,
|
|
64
|
-
version: "1.0.0",
|
|
65
|
-
enabled: true,
|
|
66
|
-
autoStart: false,
|
|
67
|
-
workspace: {
|
|
68
|
-
path: workspaceDir,
|
|
69
|
-
},
|
|
70
|
-
activation: {
|
|
71
|
-
manual: true,
|
|
72
|
-
},
|
|
73
|
-
model: {
|
|
74
|
-
provider: "ollama",
|
|
75
|
-
model: "qwen2.5-coder:14b",
|
|
76
|
-
},
|
|
77
|
-
capabilities: [
|
|
78
|
-
"read", "write", "edit", "search", "shell", "subagent_spawn"
|
|
79
|
-
],
|
|
80
|
-
memory: {
|
|
81
|
-
enabled: true,
|
|
82
|
-
},
|
|
83
|
-
};
|
|
84
|
-
await fs.writeFile(path.join(agentDir, "config.json"), JSON.stringify(config, null, 2));
|
|
85
|
-
console.log(`[AgentWorkspace] Created agent: ${name}`);
|
|
86
|
-
}
|
|
87
|
-
// Note: Web scraping functionality moved to websearch-enhanced-extension.ts
|
|
88
|
-
// Use 'web_fetch' tool instead of 'advanced_web_fetch'
|
|
89
|
-
export default async function agentWorkspaceExtension(pi) {
|
|
90
|
-
console.log("[AgentWorkspace] Extension loaded");
|
|
91
|
-
// Ensure agents directory exists
|
|
92
|
-
await fs.mkdir(AGENTS_DIR, { recursive: true });
|
|
93
|
-
// Discover agents
|
|
94
|
-
const agents = await discoverAgents();
|
|
95
|
-
console.log(`[AgentWorkspace] Discovered ${agents.size} agents`);
|
|
96
|
-
// TOOL: agent_workspace_list
|
|
97
|
-
pi.registerTool({
|
|
98
|
-
name: "agent_workspace_list",
|
|
99
|
-
label: "List Agent Workspaces",
|
|
100
|
-
description: "List all configured agent workspaces with their status",
|
|
101
|
-
parameters: Type.Object({}),
|
|
102
|
-
// @ts-ignore execute signature
|
|
103
|
-
async execute() {
|
|
104
|
-
const list = Array.from(agents.entries()).map(([name, info]) => ({
|
|
105
|
-
name,
|
|
106
|
-
description: info.config.description,
|
|
107
|
-
status: info.status,
|
|
108
|
-
enabled: info.config.enabled,
|
|
109
|
-
autoStart: info.config.autoStart,
|
|
110
|
-
capabilities: info.config.capabilities.length,
|
|
111
|
-
}));
|
|
112
|
-
return {
|
|
113
|
-
content: [{
|
|
114
|
-
type: "text",
|
|
115
|
-
text: `Found ${list.length} agents:\n\n${list.map(a => `- ${a.name}: ${a.status} (${a.enabled ? 'enabled' : 'disabled'})`).join('\n')}`,
|
|
116
|
-
}],
|
|
117
|
-
details: { agents: list },
|
|
118
|
-
};
|
|
119
|
-
},
|
|
120
|
-
});
|
|
121
|
-
// TOOL: agent_workspace_create
|
|
122
|
-
pi.registerTool({
|
|
123
|
-
name: "agent_workspace_create",
|
|
124
|
-
label: "Create Agent Workspace",
|
|
125
|
-
description: "Create a new main agent workspace with directory structure",
|
|
126
|
-
parameters: Type.Object({
|
|
127
|
-
name: Type.String({ description: "Agent name" }),
|
|
128
|
-
description: Type.Optional(Type.String({ description: "Agent description" })),
|
|
129
|
-
}),
|
|
130
|
-
// @ts-ignore execute signature
|
|
131
|
-
async execute(_toolCallId, params) {
|
|
132
|
-
const name = params.name;
|
|
133
|
-
if (agents.has(name)) {
|
|
134
|
-
return {
|
|
135
|
-
content: [{ type: "text", text: `❌ Agent '${name}' already exists` }],
|
|
136
|
-
details: { success: false, error: "agent_exists" },
|
|
137
|
-
};
|
|
138
|
-
}
|
|
139
|
-
try {
|
|
140
|
-
await createDefaultAgent(name);
|
|
141
|
-
// Reload
|
|
142
|
-
const newAgents = await discoverAgents();
|
|
143
|
-
agents.clear();
|
|
144
|
-
for (const [k, v] of newAgents)
|
|
145
|
-
agents.set(k, v);
|
|
146
|
-
return {
|
|
147
|
-
content: [{
|
|
148
|
-
type: "text",
|
|
149
|
-
text: `✅ Created agent '${name}'\n\nWorkspace: ~/.0xkobold/agents/${name}/`,
|
|
150
|
-
}],
|
|
151
|
-
details: { success: true, name, path: path.join(AGENTS_DIR, name) },
|
|
152
|
-
};
|
|
153
|
-
}
|
|
154
|
-
catch (error) {
|
|
155
|
-
return {
|
|
156
|
-
content: [{ type: "text", text: `❌ Failed to create agent: ${error}` }],
|
|
157
|
-
details: { success: false, error: String(error) },
|
|
158
|
-
};
|
|
159
|
-
}
|
|
160
|
-
},
|
|
161
|
-
});
|
|
162
|
-
// Export for other extensions
|
|
163
|
-
pi.state = {
|
|
164
|
-
...pi.state,
|
|
165
|
-
agentWorkspace: {
|
|
166
|
-
agents,
|
|
167
|
-
discoverAgents,
|
|
168
|
-
AGENTS_DIR,
|
|
169
|
-
},
|
|
170
|
-
};
|
|
171
|
-
// Note: advanced_web_fetch removed - use web_fetch from websearch-enhanced-extension
|
|
172
|
-
console.log("[AgentWorkspace] Ready");
|
|
173
|
-
}
|
|
174
|
-
//# sourceMappingURL=agent-workspace-extension.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-workspace-extension.js","sourceRoot":"","sources":["../../../../src/extensions/core/agent-workspace-extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,244 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Auto-Compact on Error Extension
|
|
3
|
-
*
|
|
4
|
-
* Automatically detects context overflow errors from LLM providers and
|
|
5
|
-
* triggers compaction to reduce context size, then retries the request.
|
|
6
|
-
*
|
|
7
|
-
* This prevents the "prompt too long; exceeded max context length" errors
|
|
8
|
-
* by proactively checking context size before requests and auto-compacting
|
|
9
|
-
* when errors occur.
|
|
10
|
-
*
|
|
11
|
-
* Adapted from OpenClaw error handling patterns.
|
|
12
|
-
*/
|
|
13
|
-
const sessionStates = new Map();
|
|
14
|
-
const MAX_RETRIES = 2;
|
|
15
|
-
const RETRY_RESET_DELAY_MS = 30000; // Reset retry count after 30 seconds of no errors
|
|
16
|
-
const COMPACTION_COOLDOWN_MS = 5000; // Don't compact more often than every 5 seconds
|
|
17
|
-
// Context overflow error patterns (adapted from OpenClaw)
|
|
18
|
-
const CONTEXT_OVERFLOW_PATTERNS = [
|
|
19
|
-
/request_too_large/i,
|
|
20
|
-
/request exceeds the maximum size/i,
|
|
21
|
-
/context length exceeded/i,
|
|
22
|
-
/maximum context length/i,
|
|
23
|
-
/prompt is too long/i,
|
|
24
|
-
/exceeds model context window/i,
|
|
25
|
-
/model token limit/i,
|
|
26
|
-
/context overflow/i,
|
|
27
|
-
/exceed context limit/i,
|
|
28
|
-
/exceeds the model's maximum context/i,
|
|
29
|
-
/context_window_exceeded/i,
|
|
30
|
-
/exceeded max context length/i,
|
|
31
|
-
/exceeded.*context.*limit/i,
|
|
32
|
-
/prompt too long/i,
|
|
33
|
-
/400 Bad Request.*prompt too long/i,
|
|
34
|
-
// Chinese proxy error messages
|
|
35
|
-
/上下文过[长多]/i,
|
|
36
|
-
/上下文超出/i,
|
|
37
|
-
/上下文长度超/i,
|
|
38
|
-
/超出最大上下文/i,
|
|
39
|
-
/请压缩上下文/i,
|
|
40
|
-
];
|
|
41
|
-
// TPM (tokens per minute) patterns - these are rate limits, NOT context overflow
|
|
42
|
-
const TPM_PATTERNS = [
|
|
43
|
-
/tpm/i,
|
|
44
|
-
/tokens per minute/i,
|
|
45
|
-
/rate limit.*token/i,
|
|
46
|
-
];
|
|
47
|
-
/**
|
|
48
|
-
* Check if error is a context overflow error
|
|
49
|
-
*/
|
|
50
|
-
function isContextOverflowError(errorMessage) {
|
|
51
|
-
if (!errorMessage)
|
|
52
|
-
return false;
|
|
53
|
-
// Exclude TPM/rate limit errors
|
|
54
|
-
if (TPM_PATTERNS.some(p => p.test(errorMessage))) {
|
|
55
|
-
return false;
|
|
56
|
-
}
|
|
57
|
-
// Check for context overflow patterns
|
|
58
|
-
return CONTEXT_OVERFLOW_PATTERNS.some(pattern => pattern.test(errorMessage));
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Check if error is a reasoning constraint error (not overflow)
|
|
62
|
-
*/
|
|
63
|
-
function isReasoningConstraintError(errorMessage) {
|
|
64
|
-
if (!errorMessage)
|
|
65
|
-
return false;
|
|
66
|
-
const lower = errorMessage.toLowerCase();
|
|
67
|
-
return (lower.includes("reasoning is mandatory") ||
|
|
68
|
-
lower.includes("reasoning is required") ||
|
|
69
|
-
lower.includes("requires reasoning") ||
|
|
70
|
-
(lower.includes("reasoning") && lower.includes("cannot be disabled")));
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Get or create session state
|
|
74
|
-
*/
|
|
75
|
-
function getSessionState(ctx) {
|
|
76
|
-
// @ts-ignore - sessionManager may have getSessionId
|
|
77
|
-
const sessionId = ctx.sessionManager?.getSessionId?.() ?? 'default';
|
|
78
|
-
if (!sessionStates.has(sessionId)) {
|
|
79
|
-
sessionStates.set(sessionId, {
|
|
80
|
-
retryAttempts: 0,
|
|
81
|
-
warnedAt90Percent: false,
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
return sessionStates.get(sessionId);
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Auto-Compact on Error Extension
|
|
88
|
-
*/
|
|
89
|
-
export default function autoCompactOnErrorExtension(pi) {
|
|
90
|
-
console.log("[AutoCompactOnError] Extension loaded");
|
|
91
|
-
// Listen for turn_end to check for errors and detect context overflow
|
|
92
|
-
pi.on("turn_end", async (event, ctx) => {
|
|
93
|
-
const message = event.message;
|
|
94
|
-
const state = getSessionState(ctx);
|
|
95
|
-
// Check if this is an error message
|
|
96
|
-
if (message.role === 'assistant' && message.errorMessage) {
|
|
97
|
-
// Extract error text - use errorMessage first, then check content
|
|
98
|
-
let errorText = message.errorMessage;
|
|
99
|
-
if (typeof message.content === 'string') {
|
|
100
|
-
errorText = message.content + ' ' + errorText;
|
|
101
|
-
}
|
|
102
|
-
else if (Array.isArray(message.content)) {
|
|
103
|
-
const contentText = message.content
|
|
104
|
-
.filter(c => c.type === 'text')
|
|
105
|
-
.map(c => c.text)
|
|
106
|
-
.join(' ');
|
|
107
|
-
errorText = contentText + ' ' + errorText;
|
|
108
|
-
}
|
|
109
|
-
// Check if it's a context overflow error
|
|
110
|
-
if (!isContextOverflowError(errorText) || isReasoningConstraintError(errorText)) {
|
|
111
|
-
// Reset retry count on non-context-overflow errors
|
|
112
|
-
state.retryAttempts = 0;
|
|
113
|
-
return;
|
|
114
|
-
}
|
|
115
|
-
// Context overflow error detected!
|
|
116
|
-
if (state.retryAttempts >= MAX_RETRIES) {
|
|
117
|
-
console.log(`[AutoCompactOnError] Max retries (${MAX_RETRIES}) reached`);
|
|
118
|
-
ctx.ui.notify(`⚠️ Context overflow persisted after ${MAX_RETRIES} compaction attempts.\n` +
|
|
119
|
-
`You may need to start a new session with /new or manually compact with /compact.`, "error");
|
|
120
|
-
// Don't reset here - let the user see the error
|
|
121
|
-
return;
|
|
122
|
-
}
|
|
123
|
-
// Check compaction cooldown
|
|
124
|
-
const now = Date.now();
|
|
125
|
-
if (state.lastCompactionTime && (now - state.lastCompactionTime) < COMPACTION_COOLDOWN_MS) {
|
|
126
|
-
ctx.ui.notify(`⏳ Compaction cooldown active. Please wait a moment before retrying.`, "warning");
|
|
127
|
-
return;
|
|
128
|
-
}
|
|
129
|
-
state.retryAttempts++;
|
|
130
|
-
state.lastCompactionTime = now;
|
|
131
|
-
console.log(`[AutoCompactOnError] Context overflow detected! Auto-compacting (attempt ${state.retryAttempts}/${MAX_RETRIES})`);
|
|
132
|
-
ctx.ui.notify(`🗜️ Context overflow detected!\n` +
|
|
133
|
-
`Automatically compacting conversation... (attempt ${state.retryAttempts}/${MAX_RETRIES})`, "warning");
|
|
134
|
-
// Trigger compaction
|
|
135
|
-
if (ctx.compact) {
|
|
136
|
-
try {
|
|
137
|
-
let compactionCompleted = false;
|
|
138
|
-
ctx.compact({
|
|
139
|
-
onComplete: (result) => {
|
|
140
|
-
compactionCompleted = true;
|
|
141
|
-
console.log("[AutoCompactOnError] Compaction completed:", result);
|
|
142
|
-
ctx.ui.notify(`✅ Compaction complete! Summarized ${result.tokensBefore.toLocaleString()} tokens.\n` +
|
|
143
|
-
`The conversation is ready to continue. Please retry your request.`, "info");
|
|
144
|
-
},
|
|
145
|
-
onError: (error) => {
|
|
146
|
-
console.error("[AutoCompactOnError] Compaction failed:", error);
|
|
147
|
-
ctx.ui.notify(`❌ Auto-compaction failed: ${error.message}\n` +
|
|
148
|
-
`Please try /compact manually or start a new session with /new.`, "error");
|
|
149
|
-
}
|
|
150
|
-
});
|
|
151
|
-
// Note: We can't automatically retry here because the turn has already ended with an error.
|
|
152
|
-
// The user will need to send their message again, but now with compacted context.
|
|
153
|
-
}
|
|
154
|
-
catch (err) {
|
|
155
|
-
console.error("[AutoCompactOnError] Error triggering compaction:", err);
|
|
156
|
-
ctx.ui.notify(`❌ Failed to trigger compaction: ${err}`, "error");
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
else {
|
|
160
|
-
ctx.ui.notify(`⚠️ Context is full and auto-compaction is not available.\n` +
|
|
161
|
-
`Please run /compact manually or start a new session with /new.`, "error");
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
else {
|
|
165
|
-
// Successful turn - reset retry count after delay
|
|
166
|
-
if (state.retryAttempts > 0) {
|
|
167
|
-
const now = Date.now();
|
|
168
|
-
if (state.lastCompactionTime && (now - state.lastCompactionTime) > RETRY_RESET_DELAY_MS) {
|
|
169
|
-
state.retryAttempts = 0;
|
|
170
|
-
state.warnedAt90Percent = false;
|
|
171
|
-
console.log("[AutoCompactOnError] Reset retry count after successful period");
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
});
|
|
176
|
-
// Proactive warning when context is getting full
|
|
177
|
-
pi.on("before_provider_request", async (event, ctx) => {
|
|
178
|
-
const usage = ctx.getContextUsage?.();
|
|
179
|
-
const state = getSessionState(ctx);
|
|
180
|
-
if (!usage || usage.tokens === null) {
|
|
181
|
-
return;
|
|
182
|
-
}
|
|
183
|
-
// Warning at 85% (before we hit the 90% danger zone)
|
|
184
|
-
const warningThreshold = usage.contextWindow * 0.85;
|
|
185
|
-
const dangerThreshold = usage.contextWindow * 0.95;
|
|
186
|
-
if (usage.tokens > dangerThreshold) {
|
|
187
|
-
// Very close to limit - suggest immediate compaction
|
|
188
|
-
ctx.ui.notify(`🚨 Context is ${usage.percent?.toFixed(1)}% full (${usage.tokens?.toLocaleString()}/${usage.contextWindow.toLocaleString()} tokens).\n` +
|
|
189
|
-
`⚠️ Dangerously close to overflow! Consider running /compact now.`, "error");
|
|
190
|
-
}
|
|
191
|
-
else if (usage.tokens > warningThreshold && !state.warnedAt90Percent) {
|
|
192
|
-
// First time crossing 85% - warn user
|
|
193
|
-
state.warnedAt90Percent = true;
|
|
194
|
-
ctx.ui.notify(`⚠️ Context is ${usage.percent?.toFixed(1)}% full (${usage.tokens?.toLocaleString()}/${usage.contextWindow.toLocaleString()} tokens).\n` +
|
|
195
|
-
`Consider running /compact soon to prevent overflow errors.`, "warning");
|
|
196
|
-
}
|
|
197
|
-
});
|
|
198
|
-
// Register command for manual triggering and status
|
|
199
|
-
pi.registerCommand("auto-compact", {
|
|
200
|
-
description: "Configure auto-compaction on context overflow errors",
|
|
201
|
-
handler: async (args, ctx) => {
|
|
202
|
-
const parts = args.trim().split(" ");
|
|
203
|
-
const subcommand = parts[0];
|
|
204
|
-
const state = getSessionState(ctx);
|
|
205
|
-
if (subcommand === "status") {
|
|
206
|
-
const usage = ctx.getContextUsage?.();
|
|
207
|
-
ctx.ui.notify(`Auto-compact status:\n` +
|
|
208
|
-
` Max retries: ${MAX_RETRIES}\n` +
|
|
209
|
-
` Current retry attempts: ${state.retryAttempts}\n` +
|
|
210
|
-
` Last compaction: ${state.lastCompactionTime ? new Date(state.lastCompactionTime).toLocaleTimeString() : 'never'}\n` +
|
|
211
|
-
` Context usage: ${usage ? `${usage.percent?.toFixed(1)}% (${usage.tokens?.toLocaleString()}/${usage.contextWindow.toLocaleString()})` : 'unknown'}`, "info");
|
|
212
|
-
return;
|
|
213
|
-
}
|
|
214
|
-
if (subcommand === "reset") {
|
|
215
|
-
state.retryAttempts = 0;
|
|
216
|
-
state.warnedAt90Percent = false;
|
|
217
|
-
ctx.ui.notify("Auto-compact state reset for current session.", "info");
|
|
218
|
-
return;
|
|
219
|
-
}
|
|
220
|
-
if (subcommand === "compact") {
|
|
221
|
-
// Manual trigger for testing
|
|
222
|
-
ctx.ui.notify("Triggering compaction...", "info");
|
|
223
|
-
if (ctx.compact) {
|
|
224
|
-
ctx.compact({
|
|
225
|
-
onComplete: (result) => {
|
|
226
|
-
ctx.ui.notify(`✅ Compaction complete! Summarized ${result.tokensBefore.toLocaleString()} tokens.`, "info");
|
|
227
|
-
},
|
|
228
|
-
onError: (error) => {
|
|
229
|
-
ctx.ui.notify(`❌ Compaction failed: ${error.message}`, "error");
|
|
230
|
-
}
|
|
231
|
-
});
|
|
232
|
-
}
|
|
233
|
-
return;
|
|
234
|
-
}
|
|
235
|
-
ctx.ui.notify(`Usage: /auto-compact [status|reset|compact]\n\n` +
|
|
236
|
-
`Auto-compact automatically triggers when:\n` +
|
|
237
|
-
`• "prompt too long" or "context overflow" errors occur\n` +
|
|
238
|
-
`• Up to ${MAX_RETRIES} automatic retries before giving up\n\n` +
|
|
239
|
-
`Proactive warnings appear at 85% context usage.`, "info");
|
|
240
|
-
},
|
|
241
|
-
});
|
|
242
|
-
console.log("[AutoCompactOnError] Extension initialized");
|
|
243
|
-
}
|
|
244
|
-
//# sourceMappingURL=auto-compact-on-error-extension.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auto-compact-on-error-extension.js","sourceRoot":"","sources":["../../../../src/extensions/core/auto-compact-on-error-extension.ts"],"names":[],"mappings":"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"}
|