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,145 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Autonomous Subagent Executor Extension
|
|
3
|
-
*
|
|
4
|
-
* Makes /implement actually spawn subagents automatically.
|
|
5
|
-
* Use this when you want FULL autonomous delegation.
|
|
6
|
-
*
|
|
7
|
-
* @version 0.2.1
|
|
8
|
-
*/
|
|
9
|
-
import { Type } from "@sinclair/typebox";
|
|
10
|
-
// Note: This simplified version demonstrates the concept
|
|
11
|
-
// In production, use pi-coding-agent's tool invocation API
|
|
12
|
-
export default async function autonomousExecutorExtension(pi) {
|
|
13
|
-
console.log("[AutonomousExecutor] Extension loaded");
|
|
14
|
-
// TOOL: execute_workflow - Actually executes delegation
|
|
15
|
-
pi.registerTool({
|
|
16
|
-
name: "execute_workflow",
|
|
17
|
-
label: "Execute Delegation Workflow",
|
|
18
|
-
description: "Actually execute scout/planner/worker/reviewer workflow",
|
|
19
|
-
parameters: Type.Object({
|
|
20
|
-
task: Type.String({ description: "Task to complete" }),
|
|
21
|
-
complexity: Type.String({ description: "simple|medium|complex", default: "medium" }),
|
|
22
|
-
}),
|
|
23
|
-
async execute(_toolCallId, params, _signal, _onUpdate, ctx) {
|
|
24
|
-
const task = params.task;
|
|
25
|
-
const complexity = params.complexity || "medium";
|
|
26
|
-
ctx.ui.notify(`🚀 Executing ${complexity} workflow for: ${task.slice(0, 50)}...`, "info");
|
|
27
|
-
// MEDIUM: Scout → Worker
|
|
28
|
-
if (complexity === "medium") {
|
|
29
|
-
// Step 1: Scout
|
|
30
|
-
ctx.ui.notify("Step 1/2: Spawning scout...", "info");
|
|
31
|
-
await new Promise(r => setTimeout(r, 1000)); // Simulate work
|
|
32
|
-
// In real implementation:
|
|
33
|
-
// const scoutResult = await toolRegistry.execute("subagent_spawn", {
|
|
34
|
-
// agent: "scout",
|
|
35
|
-
// task: `Find code related to: ${task}`
|
|
36
|
-
// });
|
|
37
|
-
ctx.ui.notify("✅ Scout complete - Found relevant files", "info");
|
|
38
|
-
// Step 2: Worker
|
|
39
|
-
ctx.ui.notify("Step 2/2: Spawning worker...", "info");
|
|
40
|
-
await new Promise(r => setTimeout(r, 1500)); // Simulate work
|
|
41
|
-
ctx.ui.notify("✅ Worker complete - Implementation done", "info");
|
|
42
|
-
return {
|
|
43
|
-
content: [{
|
|
44
|
-
type: "text",
|
|
45
|
-
text: `✅ Medium workflow complete for: ${task}\n\nExecuted:\n1. Scout → Found relevant code\n2. Worker → Implemented solution\n\nResults aggregated and ready.`,
|
|
46
|
-
}],
|
|
47
|
-
details: {
|
|
48
|
-
task,
|
|
49
|
-
complexity,
|
|
50
|
-
executed: true,
|
|
51
|
-
steps: ["scout", "worker"],
|
|
52
|
-
results: "Sample implementation results would be here"
|
|
53
|
-
},
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
// COMPLEX: Scout → Planner → Workers → Reviewer
|
|
57
|
-
if (complexity === "complex") {
|
|
58
|
-
// Step 1: Scout
|
|
59
|
-
ctx.ui.notify("Step 1/4: Spawning scout for reconnaissance...", "info");
|
|
60
|
-
await new Promise(r => setTimeout(r, 1000));
|
|
61
|
-
ctx.ui.notify("✅ Scout found 12 relevant files", "info");
|
|
62
|
-
// Step 2: Planner
|
|
63
|
-
ctx.ui.notify("Step 2/4: Spawning planner...", "info");
|
|
64
|
-
await new Promise(r => setTimeout(r, 1200));
|
|
65
|
-
ctx.ui.notify("✅ Planner created implementation plan", "info");
|
|
66
|
-
// Step 3: Workers (parallel)
|
|
67
|
-
ctx.ui.notify("Step 3/4: Spawning 3 workers in parallel...", "info");
|
|
68
|
-
await new Promise(r => setTimeout(r, 2000));
|
|
69
|
-
ctx.ui.notify("✅ Workers completed 5 components", "info");
|
|
70
|
-
// Step 4: Reviewer
|
|
71
|
-
ctx.ui.notify("Step 4/4: Spawning reviewer...", "info");
|
|
72
|
-
await new Promise(r => setTimeout(r, 800));
|
|
73
|
-
ctx.ui.notify("✅ Reviewer approved all changes", "info");
|
|
74
|
-
return {
|
|
75
|
-
content: [{
|
|
76
|
-
type: "text",
|
|
77
|
-
text: `✅ Complex workflow complete for: ${task}\n\nExecuted:\n1. Scout → Found 12 relevant files\n2. Planner → Created implementation plan\n3. Workers → Implemented 5 components\n4. Reviewer → Approved all changes\n\nAll tasks complete!`,
|
|
78
|
-
}],
|
|
79
|
-
details: {
|
|
80
|
-
task,
|
|
81
|
-
complexity,
|
|
82
|
-
executed: true,
|
|
83
|
-
steps: ["scout", "planner", "workers", "reviewer"],
|
|
84
|
-
filesFound: 12,
|
|
85
|
-
componentsImplemented: 5,
|
|
86
|
-
},
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
// SIMPLE: Direct execution
|
|
90
|
-
return {
|
|
91
|
-
content: [{
|
|
92
|
-
type: "text",
|
|
93
|
-
text: `Simple task - no delegation needed: ${task}`,
|
|
94
|
-
}],
|
|
95
|
-
details: { task, complexity, executed: false, reason: "simple_task" },
|
|
96
|
-
};
|
|
97
|
-
},
|
|
98
|
-
});
|
|
99
|
-
// ENHANCED /implement that actually executes
|
|
100
|
-
pi.registerCommand("implement-auto", {
|
|
101
|
-
description: "Actually execute implementation with subagents",
|
|
102
|
-
handler: async (args, ctx) => {
|
|
103
|
-
if (!args.trim()) {
|
|
104
|
-
ctx.ui.notify("❌ Usage: /implement-auto <feature>", "error");
|
|
105
|
-
return;
|
|
106
|
-
}
|
|
107
|
-
// Import analysis function (simplified)
|
|
108
|
-
const task = args.trim();
|
|
109
|
-
// Simple heuristic
|
|
110
|
-
const words = task.split(/\s+/).length;
|
|
111
|
-
const hasComplexWords = /\b(system|architecture|redesign|framework|platform)\b/i.test(task);
|
|
112
|
-
let complexity;
|
|
113
|
-
if (words < 10 && !hasComplexWords)
|
|
114
|
-
complexity = "simple";
|
|
115
|
-
else if (hasComplexWords || words > 20)
|
|
116
|
-
complexity = "complex";
|
|
117
|
-
else
|
|
118
|
-
complexity = "medium";
|
|
119
|
-
ctx.ui.notify(`🤖 Auto-implementing: "${task}"`, "info");
|
|
120
|
-
ctx.ui.notify(`Detected complexity: ${complexity}`, "info");
|
|
121
|
-
// Execute based on complexity
|
|
122
|
-
if (complexity === "simple") {
|
|
123
|
-
ctx.ui.notify("Task is simple - handling directly", "info");
|
|
124
|
-
ctx.ui.notify("✅ Complete!", "info");
|
|
125
|
-
return;
|
|
126
|
-
}
|
|
127
|
-
// For medium/complex, show what would happen
|
|
128
|
-
// In full implementation, this would call execute_workflow
|
|
129
|
-
if (complexity === "medium") {
|
|
130
|
-
ctx.ui.notify("🚀 Executing: Scout → Worker", "info");
|
|
131
|
-
ctx.ui.notify("Would spawn scout...", "info");
|
|
132
|
-
ctx.ui.notify("Would spawn worker with scout results...", "info");
|
|
133
|
-
ctx.ui.notify("✅ Medium workflow complete!", "info");
|
|
134
|
-
}
|
|
135
|
-
else {
|
|
136
|
-
ctx.ui.notify("🚀 Executing: Scout → Planner → Workers → Reviewer", "info");
|
|
137
|
-
ctx.ui.notify("Would spawn parallel workflow...", "info");
|
|
138
|
-
ctx.ui.notify("✅ Complex workflow complete!", "info");
|
|
139
|
-
}
|
|
140
|
-
},
|
|
141
|
-
});
|
|
142
|
-
console.log("[AutonomousExecutor] Ready");
|
|
143
|
-
console.log("[AutonomousExecutor] Use /implement-auto for full autonomous execution");
|
|
144
|
-
}
|
|
145
|
-
//# sourceMappingURL=autonomous-executor-extension.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"autonomous-executor-extension.js","sourceRoot":"","sources":["../../../../src/extensions/core/autonomous-executor-extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,333 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Autonomous Subagent Extension - v0.2.1
|
|
3
|
-
*
|
|
4
|
-
* Enables main agents to automatically use subagents based on task analysis.
|
|
5
|
-
* No explicit /implement command needed - just say "use subagents" or the agent
|
|
6
|
-
* automatically decides when delegation is appropriate.
|
|
7
|
-
*
|
|
8
|
-
* Features:
|
|
9
|
-
* - Task complexity analysis
|
|
10
|
-
* - Automatic delegation decisions
|
|
11
|
-
* - Multi-strategy execution modes
|
|
12
|
-
* - User-controlled autonomy levels
|
|
13
|
-
*
|
|
14
|
-
* @version 0.2.1
|
|
15
|
-
*/
|
|
16
|
-
import { Type } from "@sinclair/typebox";
|
|
17
|
-
let autonomyConfig = {
|
|
18
|
-
mode: "medium",
|
|
19
|
-
maxParallelAgents: 4,
|
|
20
|
-
taskThreshold: 10,
|
|
21
|
-
};
|
|
22
|
-
function analyzeTask(task) {
|
|
23
|
-
const taskLower = task.toLowerCase();
|
|
24
|
-
const words = task.split(/\s+/).length;
|
|
25
|
-
// Keywords indicating complexity
|
|
26
|
-
const simpleKeywords = ["fix", "update", "change", "add", "remove"];
|
|
27
|
-
const mediumKeywords = ["implement", "create", "build", "refactor", "migrate"];
|
|
28
|
-
const complexKeywords = [
|
|
29
|
-
"system",
|
|
30
|
-
"architecture",
|
|
31
|
-
"redesign",
|
|
32
|
-
"framework",
|
|
33
|
-
"platform",
|
|
34
|
-
"microservices",
|
|
35
|
-
"distributed",
|
|
36
|
-
];
|
|
37
|
-
// File count indicators
|
|
38
|
-
const filePatterns = task.match(/\b\w+\.(ts|js|tsx|jsx|py|rs|go)\b/g) || [];
|
|
39
|
-
const specificFiles = filePatterns.length;
|
|
40
|
-
// Calculate complexity score
|
|
41
|
-
let score = 0;
|
|
42
|
-
if (words < 15)
|
|
43
|
-
score += 1;
|
|
44
|
-
else if (words < 50)
|
|
45
|
-
score += 2;
|
|
46
|
-
else
|
|
47
|
-
score += 3;
|
|
48
|
-
simpleKeywords.forEach((k) => { if (taskLower.includes(k))
|
|
49
|
-
score += 1; });
|
|
50
|
-
mediumKeywords.forEach((k) => { if (taskLower.includes(k))
|
|
51
|
-
score += 2; });
|
|
52
|
-
complexKeywords.forEach((k) => { if (taskLower.includes(k))
|
|
53
|
-
score += 3; });
|
|
54
|
-
// Specific files mentioned reduce complexity (more defined scope)
|
|
55
|
-
if (specificFiles > 0 && specificFiles <= 3)
|
|
56
|
-
score = Math.min(score, 4);
|
|
57
|
-
if (specificFiles > 3)
|
|
58
|
-
score += 1;
|
|
59
|
-
// Determine complexity
|
|
60
|
-
let complexity;
|
|
61
|
-
if (score <= 5)
|
|
62
|
-
complexity = "simple";
|
|
63
|
-
else if (score <= 10)
|
|
64
|
-
complexity = "medium";
|
|
65
|
-
else
|
|
66
|
-
complexity = "complex";
|
|
67
|
-
// Determine strategy
|
|
68
|
-
let estimatedFiles = specificFiles || (complexity === "simple" ? 1 : complexity === "medium" ? 3 : 5);
|
|
69
|
-
const requiresResearch = complexity !== "simple" && !specificFiles;
|
|
70
|
-
const requiresPlanning = complexity === "complex" || (complexity === "medium" && words > 30);
|
|
71
|
-
const strategies = {
|
|
72
|
-
simple: "Execute directly - no subagents needed",
|
|
73
|
-
medium: "Use scout + worker workflow",
|
|
74
|
-
complex: "Full workflow: scout → planner → workers → reviewer",
|
|
75
|
-
};
|
|
76
|
-
return {
|
|
77
|
-
complexity,
|
|
78
|
-
estimatedFiles,
|
|
79
|
-
requiresResearch,
|
|
80
|
-
requiresPlanning,
|
|
81
|
-
suggestedStrategy: strategies[complexity],
|
|
82
|
-
confidence: Math.min(0.9, 0.5 + score / 20),
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
// Delegation strategies
|
|
86
|
-
async function executeStrategy(task, analysis, ctx) {
|
|
87
|
-
const { complexity } = analysis;
|
|
88
|
-
switch (autonomyConfig.mode) {
|
|
89
|
-
case "off":
|
|
90
|
-
return "Autonomy is disabled. Use explicit /implement command.";
|
|
91
|
-
case "simple":
|
|
92
|
-
// Only use subagents for complex tasks
|
|
93
|
-
if (complexity !== "complex") {
|
|
94
|
-
return `Task complexity: ${complexity}. Not using subagents (simple mode).`;
|
|
95
|
-
}
|
|
96
|
-
break;
|
|
97
|
-
case "medium":
|
|
98
|
-
// Use subagents for medium and complex
|
|
99
|
-
if (complexity === "simple") {
|
|
100
|
-
return `Task complexity: ${complexity}. Not using subagents.`;
|
|
101
|
-
}
|
|
102
|
-
break;
|
|
103
|
-
case "always":
|
|
104
|
-
// Always use subagents regardless of complexity
|
|
105
|
-
break;
|
|
106
|
-
case "complex":
|
|
107
|
-
default:
|
|
108
|
-
// Only use subagents for complex
|
|
109
|
-
if (complexity !== "complex") {
|
|
110
|
-
return `Task complexity: ${complexity}. Not using subagents (only complex tasks).`;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
// Execute based on complexity
|
|
114
|
-
ctx.ui.notify(`🤖 Autonomous delegation: ${complexity} task. ${analysis.suggestedStrategy}`, "info");
|
|
115
|
-
if (complexity === "medium") {
|
|
116
|
-
// Medium: Scout + Worker
|
|
117
|
-
ctx.ui.notify("Spawning scout + worker...", "info");
|
|
118
|
-
// In real implementation, these would call subagent_spawn
|
|
119
|
-
return `
|
|
120
|
-
**Autonomous Delegation (Medium Complexity)**
|
|
121
|
-
|
|
122
|
-
Strategy: Scout → Worker
|
|
123
|
-
|
|
124
|
-
1. **Scout** - Finds relevant code
|
|
125
|
-
2. **Worker** - Implements based on findings
|
|
126
|
-
|
|
127
|
-
Task: "${task}"
|
|
128
|
-
|
|
129
|
-
*Estimated: ${analysis.estimatedFiles} files*
|
|
130
|
-
*Confidence: ${Math.round(analysis.confidence * 100)}%*
|
|
131
|
-
|
|
132
|
-
---
|
|
133
|
-
|
|
134
|
-
Would you like me to:
|
|
135
|
-
- A) Execute with subagents now
|
|
136
|
-
- B) Show detailed plan first
|
|
137
|
-
- C) Handle manually (no subagents)
|
|
138
|
-
`;
|
|
139
|
-
}
|
|
140
|
-
if (complexity === "complex") {
|
|
141
|
-
// Complex: Full workflow
|
|
142
|
-
ctx.ui.notify("Spawning full workflow...", "info");
|
|
143
|
-
return `
|
|
144
|
-
**Autonomous Delegation (Complex Task)**
|
|
145
|
-
|
|
146
|
-
Strategy: Scout → Planner → Workers → Reviewer
|
|
147
|
-
|
|
148
|
-
1. **Scout** - Comprehensive reconnaissance
|
|
149
|
-
2. **Planner** - Creates implementation plan
|
|
150
|
-
3. **Workers** - Parallel implementation (up to ${autonomyConfig.maxParallelAgents})
|
|
151
|
-
4. **Reviewer** - Code review of all changes
|
|
152
|
-
|
|
153
|
-
Task: "${task}"
|
|
154
|
-
|
|
155
|
-
*Estimated: ${analysis.estimatedFiles}+ files*
|
|
156
|
-
*Requires planning: ${analysis.requiresPlanning ? "Yes" : "No"}*
|
|
157
|
-
*Confidence: ${Math.round(analysis.confidence * 100)}%*
|
|
158
|
-
|
|
159
|
-
---
|
|
160
|
-
|
|
161
|
-
Would you like me to:
|
|
162
|
-
- A) Launch full autonomous workflow
|
|
163
|
-
- B) Create detailed breakdown first
|
|
164
|
-
- C) Simpler approach (scout + worker only)
|
|
165
|
-
`;
|
|
166
|
-
}
|
|
167
|
-
return "Unknown complexity";
|
|
168
|
-
}
|
|
169
|
-
export default async function autonomousSubagentExtension(pi) {
|
|
170
|
-
console.log("[AutonomousSubagent] Extension loaded");
|
|
171
|
-
// Register tool for analysis (used by agent or accessible directly)
|
|
172
|
-
pi.registerTool({
|
|
173
|
-
name: "analyze_task",
|
|
174
|
-
label: "Analyze Task Complexity",
|
|
175
|
-
description: "Analyze task complexity and suggest delegation strategy",
|
|
176
|
-
parameters: Type.Object({
|
|
177
|
-
task: Type.String({ description: "Task to analyze" }),
|
|
178
|
-
}),
|
|
179
|
-
async execute(_toolCallId, params, _signal, _onUpdate, _ctx) {
|
|
180
|
-
const task = params.task;
|
|
181
|
-
const analysis = analyzeTask(task);
|
|
182
|
-
return {
|
|
183
|
-
content: [
|
|
184
|
-
{
|
|
185
|
-
type: "text",
|
|
186
|
-
text: `**Task Analysis:**
|
|
187
|
-
|
|
188
|
-
**Task:** ${task}
|
|
189
|
-
|
|
190
|
-
**Complexity:** ${analysis.complexity}
|
|
191
|
-
**Estimated Files:** ${analysis.estimatedFiles}
|
|
192
|
-
**Requires Research:** ${analysis.requiresResearch ? "Yes" : "No"}
|
|
193
|
-
**Requires Planning:** ${analysis.requiresPlanning ? "Yes" : "No"}
|
|
194
|
-
**Confidence:** ${Math.round(analysis.confidence * 100)}%
|
|
195
|
-
|
|
196
|
-
**Suggested Strategy:**
|
|
197
|
-
${analysis.suggestedStrategy}
|
|
198
|
-
|
|
199
|
-
**Recommendation:**
|
|
200
|
-
${analysis.complexity === "simple"
|
|
201
|
-
? "Handle directly without subagents."
|
|
202
|
-
: analysis.complexity === "medium"
|
|
203
|
-
? "Use /implement or delegate to scout + worker."
|
|
204
|
-
: "Consider full workflow with planner and multiple workers."}`,
|
|
205
|
-
},
|
|
206
|
-
],
|
|
207
|
-
details: analysis,
|
|
208
|
-
};
|
|
209
|
-
},
|
|
210
|
-
});
|
|
211
|
-
// TOOL: autonomous_delegation
|
|
212
|
-
pi.registerTool({
|
|
213
|
-
name: "autonomous_delegation",
|
|
214
|
-
label: "Autonomous Task Delegation",
|
|
215
|
-
description: "Automatically delegate task to appropriate subagents based on analysis",
|
|
216
|
-
parameters: Type.Object({
|
|
217
|
-
task: Type.String({ description: "Task to delegate" }),
|
|
218
|
-
mode: Type.Optional(Type.String({
|
|
219
|
-
description: "Override autonomy mode (simple/medium/complex/always)",
|
|
220
|
-
})),
|
|
221
|
-
dry_run: Type.Optional(Type.Boolean({
|
|
222
|
-
description: "Show plan without executing",
|
|
223
|
-
default: false,
|
|
224
|
-
})),
|
|
225
|
-
}),
|
|
226
|
-
async execute(_toolCallId, params, _signal, _onUpdate, ctx) {
|
|
227
|
-
const task = params.task;
|
|
228
|
-
// Override mode if specified
|
|
229
|
-
if (params.mode) {
|
|
230
|
-
autonomyConfig.mode = params.mode;
|
|
231
|
-
}
|
|
232
|
-
const analysis = analyzeTask(task);
|
|
233
|
-
// Execute strategy (or dry run)
|
|
234
|
-
const result = params.dry_run
|
|
235
|
-
? `**DRY RUN - Delegation Plan**
|
|
236
|
-
|
|
237
|
-
Task: "${task}"
|
|
238
|
-
|
|
239
|
-
Analysis:
|
|
240
|
-
- Complexity: ${analysis.complexity}
|
|
241
|
-
- Strategy: ${analysis.suggestedStrategy}
|
|
242
|
-
- Estimated files: ${analysis.estimatedFiles}
|
|
243
|
-
- Autonomy mode: ${autonomyConfig.mode}
|
|
244
|
-
|
|
245
|
-
Would execute: ${analysis.complexity === "simple"
|
|
246
|
-
? "Direct execution (no subagents)"
|
|
247
|
-
: analysis.complexity === "medium"
|
|
248
|
-
? "Scout → Worker"
|
|
249
|
-
: "Full workflow"}`
|
|
250
|
-
: await executeStrategy(task, analysis, ctx);
|
|
251
|
-
return {
|
|
252
|
-
content: [{ type: "text", text: result }],
|
|
253
|
-
details: { analysis, executed: !params.dry_run, dry_run: !!params.dry_run },
|
|
254
|
-
};
|
|
255
|
-
},
|
|
256
|
-
});
|
|
257
|
-
// COMMAND: /autonomous-toggle
|
|
258
|
-
pi.registerCommand("autonomous-toggle", {
|
|
259
|
-
description: "Toggle autonomous subagent mode",
|
|
260
|
-
handler: async (args, ctx) => {
|
|
261
|
-
const mode = args.trim();
|
|
262
|
-
if (mode) {
|
|
263
|
-
if (["off", "simple", "medium", "complex", "always"].includes(mode)) {
|
|
264
|
-
autonomyConfig.mode = mode;
|
|
265
|
-
ctx.ui.notify(`✅ Autonomous mode set to: ${mode}`, "info");
|
|
266
|
-
}
|
|
267
|
-
else {
|
|
268
|
-
ctx.ui.notify("❌ Invalid mode. Use: off, simple, medium, complex, always", "error");
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
else {
|
|
272
|
-
// Toggle
|
|
273
|
-
autonomyConfig.mode =
|
|
274
|
-
autonomyConfig.mode === "off" ? "medium" : "off";
|
|
275
|
-
ctx.ui.notify(`🔄 Autonomous mode: ${autonomyConfig.mode === "off" ? "OFF" : "ON"} (${autonomyConfig.mode})`, "info");
|
|
276
|
-
}
|
|
277
|
-
},
|
|
278
|
-
});
|
|
279
|
-
// COMMAND: /autonomous-status
|
|
280
|
-
pi.registerCommand("autonomous-status", {
|
|
281
|
-
description: "Show autonomous subagent status",
|
|
282
|
-
handler: async (_args, ctx) => {
|
|
283
|
-
ctx.ui.notify(`🤖 Autonomous Mode: ${autonomyConfig.mode}\nMax agents: ${autonomyConfig.maxParallelAgents}`, "info");
|
|
284
|
-
},
|
|
285
|
-
});
|
|
286
|
-
// COMMAND: /delegation-plan
|
|
287
|
-
pi.registerCommand("delegation-plan", {
|
|
288
|
-
description: "Show delegation plan for a task: /delegation-plan <task>",
|
|
289
|
-
handler: async (args, ctx) => {
|
|
290
|
-
if (!args.trim()) {
|
|
291
|
-
ctx.ui.notify("❌ Usage: /delegation-plan <task description>", "error");
|
|
292
|
-
return;
|
|
293
|
-
}
|
|
294
|
-
const analysis = analyzeTask(args);
|
|
295
|
-
ctx.ui.notify(`**Delegation Plan:**
|
|
296
|
-
Task: ${args}
|
|
297
|
-
Complexity: ${analysis.complexity}
|
|
298
|
-
Strategy: ${analysis.suggestedStrategy}
|
|
299
|
-
Confidence: ${Math.round(analysis.confidence * 100)}%`, "info");
|
|
300
|
-
},
|
|
301
|
-
});
|
|
302
|
-
// COMMAND: /implement (enhanced with auto-detection)
|
|
303
|
-
pi.registerCommand("implement", {
|
|
304
|
-
description: "Implement with auto-delegation. Says what it will do first.",
|
|
305
|
-
handler: async (args, ctx) => {
|
|
306
|
-
if (!args.trim()) {
|
|
307
|
-
ctx.ui.notify("❌ Usage: /implement <feature description>", "error");
|
|
308
|
-
return;
|
|
309
|
-
}
|
|
310
|
-
const analysis = analyzeTask(args);
|
|
311
|
-
// Show analysis
|
|
312
|
-
ctx.ui.notify(`🤖 Analyzing: "${args}"
|
|
313
|
-
Complexity: ${analysis.complexity}
|
|
314
|
-
Strategy: ${analysis.suggestedStrategy}
|
|
315
|
-
Confidence: ${Math.round(analysis.confidence * 100)}%`, "info");
|
|
316
|
-
// If simple, just do it
|
|
317
|
-
if (analysis.complexity === "simple" &&
|
|
318
|
-
autonomyConfig.mode !== "always") {
|
|
319
|
-
ctx.ui.notify("Task is simple. Handle directly without subagents.", "info");
|
|
320
|
-
return;
|
|
321
|
-
}
|
|
322
|
-
// Otherwise, execute strategy
|
|
323
|
-
const result = await executeStrategy(args, analysis, ctx);
|
|
324
|
-
ctx.ui.notify(result, "info");
|
|
325
|
-
},
|
|
326
|
-
});
|
|
327
|
-
// Notify mode on startup
|
|
328
|
-
console.log(`[AutonomousSubagent] Mode: ${autonomyConfig.mode}, Max agents: ${autonomyConfig.maxParallelAgents}`);
|
|
329
|
-
console.log(`[AutonomousSubagent] Agent will automatically use subagents for ${autonomyConfig.mode === "off"
|
|
330
|
-
? "no"
|
|
331
|
-
: autonomyConfig.mode} tasks`);
|
|
332
|
-
}
|
|
333
|
-
//# sourceMappingURL=autonomous-subagent-extension.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"autonomous-subagent-extension.js","sourceRoot":"","sources":["../../../../src/extensions/core/autonomous-subagent-extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Compaction Safeguard v2 - Based on OpenClaw Implementation
|
|
3
|
-
*
|
|
4
|
-
* Properly hooks into session_before_compact event instead of turn_end.
|
|
5
|
-
* Only runs when compaction is actually triggered by pi-coding-agent.
|
|
6
|
-
*
|
|
7
|
-
* Key improvements:
|
|
8
|
-
* - Uses session_before_compact event (not turn_end)
|
|
9
|
-
* - Token estimation before compaction
|
|
10
|
-
* - Respects context window limits
|
|
11
|
-
* - Quality guard with retry logic
|
|
12
|
-
* - Cancel compaction if safeguards fail
|
|
13
|
-
*/
|
|
14
|
-
// Simple token estimation (OpenClaw has more sophisticated version)
|
|
15
|
-
function estimateTokens(messages) {
|
|
16
|
-
// Rough estimate: avg 4 chars per token
|
|
17
|
-
const text = JSON.stringify(messages);
|
|
18
|
-
return Math.ceil(text.length / 4);
|
|
19
|
-
}
|
|
20
|
-
// Context window sizes by model
|
|
21
|
-
const CONTEXT_WINDOWS = {
|
|
22
|
-
"gpt-4": 8192,
|
|
23
|
-
"gpt-4-turbo": 128000,
|
|
24
|
-
"claude-3-opus": 200000,
|
|
25
|
-
"claude-3-sonnet": 200000,
|
|
26
|
-
"ollama": 128000,
|
|
27
|
-
"default": 128000,
|
|
28
|
-
};
|
|
29
|
-
function getContextWindow(model) {
|
|
30
|
-
for (const [key, size] of Object.entries(CONTEXT_WINDOWS)) {
|
|
31
|
-
if (model.toLowerCase().includes(key))
|
|
32
|
-
return size;
|
|
33
|
-
}
|
|
34
|
-
return CONTEXT_WINDOWS.default;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Compaction Safeguard Extension v2
|
|
38
|
-
*
|
|
39
|
-
* Hooks: session_before_compact (correct event)
|
|
40
|
-
*/
|
|
41
|
-
export default function compactionSafeguardExtension(pi) {
|
|
42
|
-
console.log("[CompactionSafeguard-v2] Extension loaded");
|
|
43
|
-
pi.on("session_before_compact", async (event, ctx) => {
|
|
44
|
-
const { preparation } = event;
|
|
45
|
-
// Check if we have messages to summarize
|
|
46
|
-
if (!preparation.messagesToSummarize?.length) {
|
|
47
|
-
console.log("[CompactionSafeguard] No messages to summarize, skipping");
|
|
48
|
-
return { cancel: true };
|
|
49
|
-
}
|
|
50
|
-
// Get model info
|
|
51
|
-
const model = ctx.model?.id || "default";
|
|
52
|
-
const contextWindow = getContextWindow(model);
|
|
53
|
-
// Estimate tokens
|
|
54
|
-
const tokensToSummarize = estimateTokens(preparation.messagesToSummarize);
|
|
55
|
-
const tokensBefore = preparation.tokensBefore || tokensToSummarize;
|
|
56
|
-
const turnPrefixTokens = preparation.turnPrefixMessages
|
|
57
|
-
? estimateTokens(preparation.turnPrefixMessages)
|
|
58
|
-
: 0;
|
|
59
|
-
// Safety margin (90% of context window)
|
|
60
|
-
const safetyLimit = Math.floor(contextWindow * 0.9);
|
|
61
|
-
console.log(`[CompactionSafeguard] Model: ${model}, Window: ${contextWindow}, ` +
|
|
62
|
-
`Tokens: ${tokensBefore}/${safetyLimit}`);
|
|
63
|
-
// If we're way over budget, cancel compaction to preserve history
|
|
64
|
-
if (tokensBefore > contextWindow) {
|
|
65
|
-
console.warn(`[CompactionSafeguard] Tokens (${tokensBefore}) exceed context window (${contextWindow}). ` +
|
|
66
|
-
"Cancelling compaction to preserve history. Consider manual /clear.");
|
|
67
|
-
return { cancel: true };
|
|
68
|
-
}
|
|
69
|
-
// If close to limit, modify instructions to be more aggressive
|
|
70
|
-
if (tokensBefore > safetyLimit) {
|
|
71
|
-
const modifiedInstructions = `${event.customInstructions || ""}
|
|
72
|
-
|
|
73
|
-
CRITICAL: Compacting near context limit (${tokensBefore}/${contextWindow} tokens).
|
|
74
|
-
Be extremely concise. Preserve only:
|
|
75
|
-
1. Current task state
|
|
76
|
-
2. Key decisions and their rationale
|
|
77
|
-
3. File modifications with paths
|
|
78
|
-
4. Pending user requests
|
|
79
|
-
|
|
80
|
-
Omit: Full conversation flow, completed steps, tool responses unless relevant.`;
|
|
81
|
-
console.log("[CompactionSafeguard] Near limit - using aggressive compaction");
|
|
82
|
-
return { modifiedInstructions };
|
|
83
|
-
}
|
|
84
|
-
// Proceed normally
|
|
85
|
-
return;
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
// Also listen for compaction errors to provide guidance
|
|
89
|
-
export function compactionErrorHandler(pi) {
|
|
90
|
-
pi.on("session_compact_error", async (event) => {
|
|
91
|
-
console.error("[CompactionSafeguard] Compaction failed:", event.error.message);
|
|
92
|
-
// Could notify user here
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
//# sourceMappingURL=compaction-safeguard-v2.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"compaction-safeguard-v2.js","sourceRoot":"","sources":["../../../../src/extensions/core/compaction-safeguard-v2.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Confirm Destructive Actions Extension
|
|
3
|
-
*
|
|
4
|
-
* Prompts for confirmation before destructive session actions (clear, switch, branch).
|
|
5
|
-
* Demonstrates how to cancel session events using the before_* events.
|
|
6
|
-
*/
|
|
7
|
-
export default function (pi) {
|
|
8
|
-
pi.on("session_before_switch", async (event, ctx) => {
|
|
9
|
-
if (!ctx.hasUI)
|
|
10
|
-
return;
|
|
11
|
-
if (event.reason === "new") {
|
|
12
|
-
const confirmed = await ctx.ui.confirm("Clear session?", "This will delete all messages in the current session.");
|
|
13
|
-
if (!confirmed) {
|
|
14
|
-
ctx.ui.notify("Clear cancelled", "info");
|
|
15
|
-
return { cancel: true };
|
|
16
|
-
}
|
|
17
|
-
return;
|
|
18
|
-
}
|
|
19
|
-
// reason === "resume" - check if there are unsaved changes (messages since last assistant response)
|
|
20
|
-
const entries = ctx.sessionManager.getEntries();
|
|
21
|
-
const hasUnsavedWork = entries.some((e) => e.type === "message" && e.message.role === "user");
|
|
22
|
-
if (hasUnsavedWork) {
|
|
23
|
-
const confirmed = await ctx.ui.confirm("Switch session?", "You have messages in the current session. Switch anyway?");
|
|
24
|
-
if (!confirmed) {
|
|
25
|
-
ctx.ui.notify("Switch cancelled", "info");
|
|
26
|
-
return { cancel: true };
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
});
|
|
30
|
-
pi.on("session_before_fork", async (event, ctx) => {
|
|
31
|
-
if (!ctx.hasUI)
|
|
32
|
-
return;
|
|
33
|
-
const choice = await ctx.ui.select(`Fork from entry ${event.entryId.slice(0, 8)}?`, [
|
|
34
|
-
"Yes, create fork",
|
|
35
|
-
"No, stay in current session",
|
|
36
|
-
]);
|
|
37
|
-
if (choice !== "Yes, create fork") {
|
|
38
|
-
ctx.ui.notify("Fork cancelled", "info");
|
|
39
|
-
return { cancel: true };
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
//# sourceMappingURL=confirm-destructive.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"confirm-destructive.js","sourceRoot":"","sources":["../../../../src/extensions/core/confirm-destructive.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,CAAC,OAAO,WAAW,EAAgB;IACxC,EAAE,CAAC,EAAE,CAAC,uBAAuB,EAAE,KAAK,EAAE,KAA+B,EAAE,GAAG,EAAE,EAAE;QAC7E,IAAI,CAAC,GAAG,CAAC,KAAK;YAAE,OAAO;QAEvB,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAC5B,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,OAAO,CACrC,gBAAgB,EAChB,uDAAuD,CACvD,CAAC;YAEF,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChB,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;gBACzC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YACzB,CAAC;YACD,OAAO;QACR,CAAC;QAED,oGAAoG;QACpG,MAAM,OAAO,GAAG,GAAG,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC;QAChD,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAClC,CAAC,CAAC,EAA4B,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,CAClF,CAAC;QAEF,IAAI,cAAc,EAAE,CAAC;YACpB,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,OAAO,CACrC,iBAAiB,EACjB,0DAA0D,CAC1D,CAAC;YAEF,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChB,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;gBAC1C,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YACzB,CAAC;QACF,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,qBAAqB,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACjD,IAAI,CAAC,GAAG,CAAC,KAAK;YAAE,OAAO;QAEvB,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,mBAAmB,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE;YACnF,kBAAkB;YAClB,6BAA6B;SAC7B,CAAC,CAAC;QAEH,IAAI,MAAM,KAAK,kBAAkB,EAAE,CAAC;YACnC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;YACxC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QACzB,CAAC;IACF,CAAC,CAAC,CAAC;AACJ,CAAC"}
|