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.
Files changed (98) hide show
  1. package/README.md +9 -3
  2. package/dist/package.json +4 -2
  3. package/dist/src/cli/index.js +0 -0
  4. package/dist/src/extensions/core/workspace-footer-extension.js +2 -11
  5. package/dist/src/extensions/core/workspace-footer-extension.js.map +1 -1
  6. package/dist/src/index.js +31 -5
  7. package/dist/src/index.js.map +1 -1
  8. package/package.json +4 -2
  9. package/dist/src/agents/task-router.js +0 -194
  10. package/dist/src/agents/task-router.js.map +0 -1
  11. package/dist/src/agents/tools/index.js +0 -2
  12. package/dist/src/agents/tools/index.js.map +0 -1
  13. package/dist/src/agents/tools/spawn-agent.js +0 -200
  14. package/dist/src/agents/tools/spawn-agent.js.map +0 -1
  15. package/dist/src/agents/types/definitions.js +0 -317
  16. package/dist/src/agents/types/definitions.js.map +0 -1
  17. package/dist/src/agents/types/index.js +0 -2
  18. package/dist/src/agents/types/index.js.map +0 -1
  19. package/dist/src/cli/program-fixed.js +0 -1
  20. package/dist/src/cli/program-fixed.js.map +0 -1
  21. package/dist/src/extensions/core/agent-lifecycle-extension.js +0 -323
  22. package/dist/src/extensions/core/agent-lifecycle-extension.js.map +0 -1
  23. package/dist/src/extensions/core/agent-registry-extension.js +0 -541
  24. package/dist/src/extensions/core/agent-registry-extension.js.map +0 -1
  25. package/dist/src/extensions/core/agent-worker.js +0 -148
  26. package/dist/src/extensions/core/agent-worker.js.map +0 -1
  27. package/dist/src/extensions/core/agent-workspace-extension.js +0 -174
  28. package/dist/src/extensions/core/agent-workspace-extension.js.map +0 -1
  29. package/dist/src/extensions/core/auto-compact-on-error-extension.js +0 -244
  30. package/dist/src/extensions/core/auto-compact-on-error-extension.js.map +0 -1
  31. package/dist/src/extensions/core/autonomous-executor-extension.js +0 -145
  32. package/dist/src/extensions/core/autonomous-executor-extension.js.map +0 -1
  33. package/dist/src/extensions/core/autonomous-subagent-extension.js +0 -333
  34. package/dist/src/extensions/core/autonomous-subagent-extension.js.map +0 -1
  35. package/dist/src/extensions/core/compaction-safeguard-v2.js +0 -95
  36. package/dist/src/extensions/core/compaction-safeguard-v2.js.map +0 -1
  37. package/dist/src/extensions/core/confirm-destructive.js +0 -43
  38. package/dist/src/extensions/core/confirm-destructive.js.map +0 -1
  39. package/dist/src/extensions/core/context-aware-extension.js +0 -124
  40. package/dist/src/extensions/core/context-aware-extension.js.map +0 -1
  41. package/dist/src/extensions/core/deprecated/agent-lifecycle-extension.js +0 -323
  42. package/dist/src/extensions/core/deprecated/agent-lifecycle-extension.js.map +0 -1
  43. package/dist/src/extensions/core/deprecated/autonomous-subagent-extension.js +0 -333
  44. package/dist/src/extensions/core/deprecated/autonomous-subagent-extension.js.map +0 -1
  45. package/dist/src/extensions/core/deprecated/subagent-extension.js +0 -647
  46. package/dist/src/extensions/core/deprecated/subagent-extension.js.map +0 -1
  47. package/dist/src/extensions/core/dirty-repo-guard.js +0 -42
  48. package/dist/src/extensions/core/dirty-repo-guard.js.map +0 -1
  49. package/dist/src/extensions/core/env-loader-extension.js +0 -157
  50. package/dist/src/extensions/core/env-loader-extension.js.map +0 -1
  51. package/dist/src/extensions/core/git-checkpoint.js +0 -46
  52. package/dist/src/extensions/core/git-checkpoint.js.map +0 -1
  53. package/dist/src/extensions/core/handoff-extension.js +0 -206
  54. package/dist/src/extensions/core/handoff-extension.js.map +0 -1
  55. package/dist/src/extensions/core/memory-extension.js +0 -120
  56. package/dist/src/extensions/core/memory-extension.js.map +0 -1
  57. package/dist/src/extensions/core/memory-synthesis-extension.js +0 -137
  58. package/dist/src/extensions/core/memory-synthesis-extension.js.map +0 -1
  59. package/dist/src/extensions/core/mode-manager-extension.js +0 -592
  60. package/dist/src/extensions/core/mode-manager-extension.js.map +0 -1
  61. package/dist/src/extensions/core/ollama-cloud-extension.js +0 -132
  62. package/dist/src/extensions/core/ollama-cloud-extension.js.map +0 -1
  63. package/dist/src/extensions/core/ollama-provider-extension.js +0 -66
  64. package/dist/src/extensions/core/ollama-provider-extension.js.map +0 -1
  65. package/dist/src/extensions/core/ollama-router-extension.js +0 -41
  66. package/dist/src/extensions/core/ollama-router-extension.js.map +0 -1
  67. package/dist/src/extensions/core/protected-paths.js +0 -24
  68. package/dist/src/extensions/core/protected-paths.js.map +0 -1
  69. package/dist/src/extensions/core/questionnaire-extension.js +0 -242
  70. package/dist/src/extensions/core/questionnaire-extension.js.map +0 -1
  71. package/dist/src/extensions/core/session-bridge-extension.js +0 -14
  72. package/dist/src/extensions/core/session-bridge-extension.js.map +0 -1
  73. package/dist/src/extensions/core/session-manager-extension.js +0 -336
  74. package/dist/src/extensions/core/session-manager-extension.js.map +0 -1
  75. package/dist/src/extensions/core/session-name-extension.js +0 -88
  76. package/dist/src/extensions/core/session-name-extension.js.map +0 -1
  77. package/dist/src/extensions/core/session-pruning-extension.js +0 -480
  78. package/dist/src/extensions/core/session-pruning-extension.js.map +0 -1
  79. package/dist/src/extensions/core/subagent-extension.js +0 -647
  80. package/dist/src/extensions/core/subagent-extension.js.map +0 -1
  81. package/dist/src/extensions/core/tui-integration-extension-fixed.js +0 -3
  82. package/dist/src/extensions/core/tui-integration-extension-fixed.js.map +0 -1
  83. package/dist/src/extensions/core/websearch-extension.js +0 -489
  84. package/dist/src/extensions/core/websearch-extension.js.map +0 -1
  85. package/dist/src/extensions/core/websearch-v2-extension.js +0 -303
  86. package/dist/src/extensions/core/websearch-v2-extension.js.map +0 -1
  87. package/dist/src/tui/commands/final-functions.js +0 -39
  88. package/dist/src/tui/commands/final-functions.js.map +0 -1
  89. package/dist/src/tui/commands/orchestration-final-section.js +0 -84
  90. package/dist/src/tui/commands/orchestration-final-section.js.map +0 -1
  91. package/dist/src/tui/components/footer.js +0 -106
  92. package/dist/src/tui/components/footer.js.map +0 -1
  93. package/dist/src/tui/components/sidebar.js +0 -82
  94. package/dist/src/tui/components/sidebar.js.map +0 -1
  95. package/dist/src/tui/gateway-chat-client.js +0 -218
  96. package/dist/src/tui/gateway-chat-client.js.map +0 -1
  97. package/dist/src/tui/pi-tui-integration.js +0 -260
  98. 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"}