linguclaw 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +161 -0
- package/dist/agent-system.d.ts +196 -0
- package/dist/agent-system.d.ts.map +1 -0
- package/dist/agent-system.js +738 -0
- package/dist/agent-system.js.map +1 -0
- package/dist/alphabeta.d.ts +54 -0
- package/dist/alphabeta.d.ts.map +1 -0
- package/dist/alphabeta.js +193 -0
- package/dist/alphabeta.js.map +1 -0
- package/dist/browser.d.ts +62 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +224 -0
- package/dist/browser.js.map +1 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +565 -0
- package/dist/cli.js.map +1 -0
- package/dist/code-parser.d.ts +39 -0
- package/dist/code-parser.d.ts.map +1 -0
- package/dist/code-parser.js +385 -0
- package/dist/code-parser.js.map +1 -0
- package/dist/config.d.ts +66 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +232 -0
- package/dist/config.js.map +1 -0
- package/dist/core/engine.d.ts +359 -0
- package/dist/core/engine.d.ts.map +1 -0
- package/dist/core/engine.js +127 -0
- package/dist/core/engine.js.map +1 -0
- package/dist/daemon.d.ts +29 -0
- package/dist/daemon.d.ts.map +1 -0
- package/dist/daemon.js +212 -0
- package/dist/daemon.js.map +1 -0
- package/dist/email-receiver.d.ts +63 -0
- package/dist/email-receiver.d.ts.map +1 -0
- package/dist/email-receiver.js +553 -0
- package/dist/email-receiver.js.map +1 -0
- package/dist/git-integration.d.ts +180 -0
- package/dist/git-integration.d.ts.map +1 -0
- package/dist/git-integration.js +850 -0
- package/dist/git-integration.js.map +1 -0
- package/dist/inbox.d.ts +84 -0
- package/dist/inbox.d.ts.map +1 -0
- package/dist/inbox.js +198 -0
- package/dist/inbox.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +41 -0
- package/dist/index.js.map +1 -0
- package/dist/languages/cpp.d.ts +51 -0
- package/dist/languages/cpp.d.ts.map +1 -0
- package/dist/languages/cpp.js +930 -0
- package/dist/languages/cpp.js.map +1 -0
- package/dist/languages/csharp.d.ts +79 -0
- package/dist/languages/csharp.d.ts.map +1 -0
- package/dist/languages/csharp.js +1776 -0
- package/dist/languages/csharp.js.map +1 -0
- package/dist/languages/go.d.ts +50 -0
- package/dist/languages/go.d.ts.map +1 -0
- package/dist/languages/go.js +882 -0
- package/dist/languages/go.js.map +1 -0
- package/dist/languages/java.d.ts +47 -0
- package/dist/languages/java.d.ts.map +1 -0
- package/dist/languages/java.js +649 -0
- package/dist/languages/java.js.map +1 -0
- package/dist/languages/python.d.ts +47 -0
- package/dist/languages/python.d.ts.map +1 -0
- package/dist/languages/python.js +655 -0
- package/dist/languages/python.js.map +1 -0
- package/dist/languages/rust.d.ts +61 -0
- package/dist/languages/rust.d.ts.map +1 -0
- package/dist/languages/rust.js +1064 -0
- package/dist/languages/rust.js.map +1 -0
- package/dist/logger.d.ts +20 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +133 -0
- package/dist/logger.js.map +1 -0
- package/dist/longterm-memory.d.ts +47 -0
- package/dist/longterm-memory.d.ts.map +1 -0
- package/dist/longterm-memory.js +300 -0
- package/dist/longterm-memory.js.map +1 -0
- package/dist/memory.d.ts +42 -0
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +274 -0
- package/dist/memory.js.map +1 -0
- package/dist/messaging.d.ts +103 -0
- package/dist/messaging.d.ts.map +1 -0
- package/dist/messaging.js +645 -0
- package/dist/messaging.js.map +1 -0
- package/dist/multi-provider.d.ts +69 -0
- package/dist/multi-provider.d.ts.map +1 -0
- package/dist/multi-provider.js +484 -0
- package/dist/multi-provider.js.map +1 -0
- package/dist/orchestrator.d.ts +65 -0
- package/dist/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator.js +441 -0
- package/dist/orchestrator.js.map +1 -0
- package/dist/plugins.d.ts +52 -0
- package/dist/plugins.d.ts.map +1 -0
- package/dist/plugins.js +215 -0
- package/dist/plugins.js.map +1 -0
- package/dist/prism-orchestrator.d.ts +26 -0
- package/dist/prism-orchestrator.d.ts.map +1 -0
- package/dist/prism-orchestrator.js +191 -0
- package/dist/prism-orchestrator.js.map +1 -0
- package/dist/prism.d.ts +46 -0
- package/dist/prism.d.ts.map +1 -0
- package/dist/prism.js +188 -0
- package/dist/prism.js.map +1 -0
- package/dist/privacy.d.ts +23 -0
- package/dist/privacy.d.ts.map +1 -0
- package/dist/privacy.js +220 -0
- package/dist/privacy.js.map +1 -0
- package/dist/proactive.d.ts +30 -0
- package/dist/proactive.d.ts.map +1 -0
- package/dist/proactive.js +260 -0
- package/dist/proactive.js.map +1 -0
- package/dist/refactoring-engine.d.ts +100 -0
- package/dist/refactoring-engine.d.ts.map +1 -0
- package/dist/refactoring-engine.js +717 -0
- package/dist/refactoring-engine.js.map +1 -0
- package/dist/resilience.d.ts +43 -0
- package/dist/resilience.d.ts.map +1 -0
- package/dist/resilience.js +200 -0
- package/dist/resilience.js.map +1 -0
- package/dist/safety.d.ts +40 -0
- package/dist/safety.d.ts.map +1 -0
- package/dist/safety.js +133 -0
- package/dist/safety.js.map +1 -0
- package/dist/sandbox.d.ts +33 -0
- package/dist/sandbox.d.ts.map +1 -0
- package/dist/sandbox.js +173 -0
- package/dist/sandbox.js.map +1 -0
- package/dist/scheduler.d.ts +72 -0
- package/dist/scheduler.d.ts.map +1 -0
- package/dist/scheduler.js +374 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/semantic-memory.d.ts +70 -0
- package/dist/semantic-memory.d.ts.map +1 -0
- package/dist/semantic-memory.js +430 -0
- package/dist/semantic-memory.js.map +1 -0
- package/dist/skills.d.ts +97 -0
- package/dist/skills.d.ts.map +1 -0
- package/dist/skills.js +575 -0
- package/dist/skills.js.map +1 -0
- package/dist/static/dashboard.html +853 -0
- package/dist/static/hub.html +772 -0
- package/dist/static/index.html +818 -0
- package/dist/static/logo.svg +24 -0
- package/dist/static/workflow-editor.html +913 -0
- package/dist/tools.d.ts +67 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +303 -0
- package/dist/tools.js.map +1 -0
- package/dist/types.d.ts +295 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +90 -0
- package/dist/types.js.map +1 -0
- package/dist/web.d.ts +76 -0
- package/dist/web.d.ts.map +1 -0
- package/dist/web.js +2139 -0
- package/dist/web.js.map +1 -0
- package/dist/workflow-engine.d.ts +114 -0
- package/dist/workflow-engine.d.ts.map +1 -0
- package/dist/workflow-engine.js +855 -0
- package/dist/workflow-engine.js.map +1 -0
- package/package.json +77 -0
|
@@ -0,0 +1,441 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Multi-agent orchestration layer
|
|
4
|
+
* TypeScript equivalent of Python orchestrator.py
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.Orchestrator = void 0;
|
|
8
|
+
const types_1 = require("./types");
|
|
9
|
+
const safety_1 = require("./safety");
|
|
10
|
+
const memory_1 = require("./memory");
|
|
11
|
+
const semantic_memory_1 = require("./semantic-memory");
|
|
12
|
+
const logger_1 = require("./logger");
|
|
13
|
+
const logger = (0, logger_1.getLogger)();
|
|
14
|
+
// System prompts for each agent role
|
|
15
|
+
const SYSTEM_PROMPTS = {
|
|
16
|
+
[types_1.AgentRole.PLANNER]: `You are a Planner agent. Create structured plans as a JSON array.
|
|
17
|
+
Break down tasks into clear steps. Each step uses one of: executor, planner, reviewer.
|
|
18
|
+
IMPORTANT: Return ONLY a valid JSON array. No extra text before or after.
|
|
19
|
+
Commands run in the project root directory already - never use "cd" commands.
|
|
20
|
+
|
|
21
|
+
Example response:
|
|
22
|
+
[
|
|
23
|
+
{"id": "step-1", "description": "Run: find . -name '*.ts'", "agent": "executor", "dependencies": []},
|
|
24
|
+
{"id": "step-2", "description": "Review the output", "agent": "reviewer", "dependencies": ["step-1"]}
|
|
25
|
+
]`,
|
|
26
|
+
[types_1.AgentRole.EXECUTOR]: `You are an Executor agent. Execute the given step using ONE action.
|
|
27
|
+
Available actions:
|
|
28
|
+
- shell: Execute a shell command (already runs in project root, do NOT use cd)
|
|
29
|
+
- filesystem: Read/write files (use relative paths from project root)
|
|
30
|
+
|
|
31
|
+
IMPORTANT: Return ONLY valid JSON. No extra text.
|
|
32
|
+
IMPORTANT: Never use "cd" in commands. Commands already run in the project directory.
|
|
33
|
+
|
|
34
|
+
Example:
|
|
35
|
+
{"thought": "List TypeScript files", "action": "shell", "input": "find . -name '*.ts'"}
|
|
36
|
+
{"thought": "Read a file", "action": "filesystem", "input": "read src/index.ts"}`,
|
|
37
|
+
[types_1.AgentRole.REVIEWER]: `You are a Reviewer agent. Your job is to validate the execution result.
|
|
38
|
+
Check for:
|
|
39
|
+
- Errors or incomplete work
|
|
40
|
+
- Safety issues
|
|
41
|
+
- Quality standards
|
|
42
|
+
- Alignment with the original task
|
|
43
|
+
|
|
44
|
+
Output format: Return JSON with:
|
|
45
|
+
{
|
|
46
|
+
"review": "Your assessment",
|
|
47
|
+
"approved": true/false,
|
|
48
|
+
"feedback": "If rejected, explain why and what to fix"
|
|
49
|
+
}`,
|
|
50
|
+
};
|
|
51
|
+
class Orchestrator {
|
|
52
|
+
provider;
|
|
53
|
+
shell;
|
|
54
|
+
fs;
|
|
55
|
+
safety;
|
|
56
|
+
maxIterations;
|
|
57
|
+
state;
|
|
58
|
+
memory;
|
|
59
|
+
semanticMemory;
|
|
60
|
+
constructor(provider, shell, fs, maxIterations = 15, projectRoot = '.') {
|
|
61
|
+
this.provider = provider;
|
|
62
|
+
this.shell = shell;
|
|
63
|
+
this.fs = fs;
|
|
64
|
+
this.safety = new safety_1.SafetyMiddleware();
|
|
65
|
+
this.maxIterations = maxIterations;
|
|
66
|
+
this.memory = new memory_1.RAGMemory(projectRoot);
|
|
67
|
+
this.semanticMemory = (0, semantic_memory_1.getSemanticMemory)();
|
|
68
|
+
this.state = {
|
|
69
|
+
task: '',
|
|
70
|
+
plan: [],
|
|
71
|
+
current_step_idx: -1,
|
|
72
|
+
execution_log: [],
|
|
73
|
+
files_modified: [],
|
|
74
|
+
context: new Map(),
|
|
75
|
+
iteration: 0,
|
|
76
|
+
max_iterations: maxIterations,
|
|
77
|
+
aborted: false,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Main execution loop
|
|
82
|
+
*/
|
|
83
|
+
async run(task) {
|
|
84
|
+
this.state.task = task;
|
|
85
|
+
// Initialize memory if not already done
|
|
86
|
+
await this.memory.init();
|
|
87
|
+
logger.info(`Starting orchestration for: ${task}`);
|
|
88
|
+
// Get codebase context for planning
|
|
89
|
+
const codeContext = await this.getCodebaseContext(task);
|
|
90
|
+
// For simple/conversational tasks, respond directly
|
|
91
|
+
if (this.isSimpleTask(task)) {
|
|
92
|
+
return this.handleSimpleTask(task);
|
|
93
|
+
}
|
|
94
|
+
// Phase 1: Planning with codebase context
|
|
95
|
+
const planResult = await this.planPhase(task, codeContext);
|
|
96
|
+
if (!planResult.success) {
|
|
97
|
+
return `Planning failed: ${planResult.error}`;
|
|
98
|
+
}
|
|
99
|
+
// Phase 2: Execute plan steps
|
|
100
|
+
for (let i = 0; i < this.state.plan.length; i++) {
|
|
101
|
+
if (this.state.aborted || this.state.iteration >= this.maxIterations) {
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
this.state.current_step_idx = i;
|
|
105
|
+
const step = this.state.plan[i];
|
|
106
|
+
// Check dependencies
|
|
107
|
+
if (step.dependencies.length > 0) {
|
|
108
|
+
const depsCompleted = step.dependencies.every(depId => {
|
|
109
|
+
const dep = this.state.plan.find(p => p.id === depId);
|
|
110
|
+
return dep && dep.status === types_1.StepStatus.COMPLETED;
|
|
111
|
+
});
|
|
112
|
+
if (!depsCompleted) {
|
|
113
|
+
step.status = types_1.StepStatus.PENDING;
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// Execute step based on agent role
|
|
118
|
+
step.status = types_1.StepStatus.IN_PROGRESS;
|
|
119
|
+
// Execute with timeout (60s per step)
|
|
120
|
+
const result = await Promise.race([
|
|
121
|
+
this.executeStep(step),
|
|
122
|
+
new Promise((resolve) => setTimeout(() => resolve({ success: false, error: 'Step execution timed out after 60s' }), 60000)),
|
|
123
|
+
]);
|
|
124
|
+
if (result.success) {
|
|
125
|
+
step.status = types_1.StepStatus.COMPLETED;
|
|
126
|
+
step.result = result.output;
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
step.status = types_1.StepStatus.FAILED;
|
|
130
|
+
step.error = result.error;
|
|
131
|
+
// Retry logic
|
|
132
|
+
if (step.retry_count < step.max_retries) {
|
|
133
|
+
step.retry_count++;
|
|
134
|
+
step.status = types_1.StepStatus.RETRYING;
|
|
135
|
+
i--; // Retry this step
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
this.state.iteration++;
|
|
139
|
+
}
|
|
140
|
+
// Phase 3: Final review and summary
|
|
141
|
+
return this.generateSummary();
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Get codebase context relevant to the task
|
|
145
|
+
*/
|
|
146
|
+
async getCodebaseContext(task) {
|
|
147
|
+
try {
|
|
148
|
+
// Search for relevant code
|
|
149
|
+
const codeResults = await this.memory.search(task, 5);
|
|
150
|
+
// Search semantic memory for related conversations/knowledge
|
|
151
|
+
const semanticResults = this.semanticMemory.search(task, 3, undefined, 0.1);
|
|
152
|
+
let context = '';
|
|
153
|
+
if (codeResults && codeResults !== '[Memory unavailable]' && codeResults !== '[No relevant code found]') {
|
|
154
|
+
context += `\n\nRelevant codebase:\n${codeResults}`;
|
|
155
|
+
}
|
|
156
|
+
if (semanticResults.length > 0) {
|
|
157
|
+
context += `\n\nRelated knowledge:\n${semanticResults.map(r => `- ${r.content.substring(0, 150)}`).join('\n')}`;
|
|
158
|
+
}
|
|
159
|
+
return context;
|
|
160
|
+
}
|
|
161
|
+
catch (err) {
|
|
162
|
+
logger.debug(`Failed to get codebase context: ${err.message}`);
|
|
163
|
+
return '';
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Planning phase with codebase context
|
|
168
|
+
*/
|
|
169
|
+
async planPhase(task, codeContext = '') {
|
|
170
|
+
try {
|
|
171
|
+
const messages = [
|
|
172
|
+
{ role: 'system', content: SYSTEM_PROMPTS[types_1.AgentRole.PLANNER] },
|
|
173
|
+
{ role: 'user', content: `Create a plan for: ${task}${codeContext}` },
|
|
174
|
+
];
|
|
175
|
+
const response = await this.provider.complete(messages, 0.3, 1000);
|
|
176
|
+
if (response.error) {
|
|
177
|
+
return { success: false, error: response.error };
|
|
178
|
+
}
|
|
179
|
+
if (!response.content || response.content.trim().length === 0) {
|
|
180
|
+
return { success: false, error: 'LLM returned empty response. Check your API key and credits.' };
|
|
181
|
+
}
|
|
182
|
+
logger.info(`Plan response: ${response.content.substring(0, 200)}`);
|
|
183
|
+
// Parse plan from response
|
|
184
|
+
const plan = this.parsePlan(response.content);
|
|
185
|
+
this.state.plan = plan;
|
|
186
|
+
logger.info(`Created plan with ${plan.length} steps`);
|
|
187
|
+
return { success: true };
|
|
188
|
+
}
|
|
189
|
+
catch (error) {
|
|
190
|
+
return { success: false, error: error.message };
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Parse plan from LLM response
|
|
195
|
+
*/
|
|
196
|
+
parsePlan(content) {
|
|
197
|
+
const mapStep = (step, idx) => ({
|
|
198
|
+
id: step.id || `step-${idx + 1}`,
|
|
199
|
+
description: step.description || '',
|
|
200
|
+
agent: step.agent || types_1.AgentRole.EXECUTOR,
|
|
201
|
+
status: types_1.StepStatus.PENDING,
|
|
202
|
+
dependencies: step.dependencies || [],
|
|
203
|
+
retry_count: 0,
|
|
204
|
+
max_retries: 3,
|
|
205
|
+
});
|
|
206
|
+
// Try 1: Extract JSON array
|
|
207
|
+
try {
|
|
208
|
+
const arrayMatch = content.match(/\[[\s\S]*\]/);
|
|
209
|
+
if (arrayMatch) {
|
|
210
|
+
const parsed = JSON.parse(arrayMatch[0]);
|
|
211
|
+
if (Array.isArray(parsed) && parsed.length > 0) {
|
|
212
|
+
logger.info(`Parsed ${parsed.length} steps from JSON array`);
|
|
213
|
+
return parsed.map(mapStep);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
catch (e) {
|
|
218
|
+
logger.warn('JSON array parse failed, trying individual objects');
|
|
219
|
+
}
|
|
220
|
+
// Try 2: Extract individual JSON objects
|
|
221
|
+
try {
|
|
222
|
+
const objMatches = content.match(/\{[^{}]*"id"[^{}]*"description"[^{}]*\}/g);
|
|
223
|
+
if (objMatches && objMatches.length > 0) {
|
|
224
|
+
const steps = [];
|
|
225
|
+
for (let i = 0; i < objMatches.length; i++) {
|
|
226
|
+
try {
|
|
227
|
+
const parsed = JSON.parse(objMatches[i]);
|
|
228
|
+
steps.push(mapStep(parsed, i));
|
|
229
|
+
}
|
|
230
|
+
catch (e) { /* skip malformed */ }
|
|
231
|
+
}
|
|
232
|
+
if (steps.length > 0) {
|
|
233
|
+
logger.info(`Parsed ${steps.length} steps from individual objects`);
|
|
234
|
+
return steps;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
catch (e) {
|
|
239
|
+
logger.warn('Individual object parse failed');
|
|
240
|
+
}
|
|
241
|
+
// Fallback: Create single executor step from content
|
|
242
|
+
logger.warn('Using fallback single step plan');
|
|
243
|
+
return [{
|
|
244
|
+
id: 'step-1',
|
|
245
|
+
description: content.trim(),
|
|
246
|
+
agent: types_1.AgentRole.EXECUTOR,
|
|
247
|
+
status: types_1.StepStatus.PENDING,
|
|
248
|
+
dependencies: [],
|
|
249
|
+
retry_count: 0,
|
|
250
|
+
max_retries: 3,
|
|
251
|
+
}];
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Execute a single plan step
|
|
255
|
+
*/
|
|
256
|
+
async executeStep(step) {
|
|
257
|
+
switch (step.agent) {
|
|
258
|
+
case types_1.AgentRole.EXECUTOR:
|
|
259
|
+
return this.executeToolStep(step);
|
|
260
|
+
case types_1.AgentRole.PLANNER:
|
|
261
|
+
return this.executeDecisionStep(step);
|
|
262
|
+
case types_1.AgentRole.REVIEWER:
|
|
263
|
+
return this.executeReviewStep(step);
|
|
264
|
+
default:
|
|
265
|
+
return { success: false, error: `Unknown agent role: ${step.agent}` };
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Execute tool-based step (shell, filesystem)
|
|
270
|
+
*/
|
|
271
|
+
async executeToolStep(step) {
|
|
272
|
+
try {
|
|
273
|
+
const messages = [
|
|
274
|
+
{ role: 'system', content: SYSTEM_PROMPTS[types_1.AgentRole.EXECUTOR] },
|
|
275
|
+
{ role: 'user', content: step.description },
|
|
276
|
+
];
|
|
277
|
+
const response = await this.provider.complete(messages, 0.7, 1024);
|
|
278
|
+
if (response.error) {
|
|
279
|
+
return { success: false, error: response.error };
|
|
280
|
+
}
|
|
281
|
+
// Parse action from response
|
|
282
|
+
const action = this.parseAction(response.content);
|
|
283
|
+
logger.info(`Executor action: ${action.action} - ${action.input.substring(0, 100)}`);
|
|
284
|
+
if (action.action === 'shell') {
|
|
285
|
+
// Strip cd commands - shell tool already runs in project root
|
|
286
|
+
let cmd = action.input.replace(/^\s*cd\s+[^\s;&&|]+\s*[;&|]*\s*/g, '').trim();
|
|
287
|
+
if (!cmd)
|
|
288
|
+
cmd = 'echo "No command to run"';
|
|
289
|
+
logger.info(`Shell exec: ${cmd}`);
|
|
290
|
+
const result = await this.shell.run(cmd);
|
|
291
|
+
return {
|
|
292
|
+
success: result.returncode === 0,
|
|
293
|
+
output: result.stdout,
|
|
294
|
+
error: result.stderr || undefined,
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
else if (action.action === 'filesystem') {
|
|
298
|
+
// Parse filesystem command
|
|
299
|
+
const parts = action.input.split(' ');
|
|
300
|
+
const cmd = parts[0];
|
|
301
|
+
const filePath = parts[1];
|
|
302
|
+
if (cmd === 'read') {
|
|
303
|
+
const result = this.fs.read(filePath);
|
|
304
|
+
return { success: result.success, output: result.content !== null ? result.content : undefined, error: result.error || undefined };
|
|
305
|
+
}
|
|
306
|
+
else if (cmd === 'write') {
|
|
307
|
+
const content = parts.slice(2).join(' ');
|
|
308
|
+
const result = this.fs.write(filePath, content);
|
|
309
|
+
return { success: result.success, error: result.error || undefined };
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
return { success: true, output: response.content };
|
|
313
|
+
}
|
|
314
|
+
catch (error) {
|
|
315
|
+
return { success: false, error: error.message };
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Execute decision/planning step - re-plans based on current state
|
|
320
|
+
*/
|
|
321
|
+
async executeDecisionStep(step) {
|
|
322
|
+
try {
|
|
323
|
+
const completedSteps = this.state.plan
|
|
324
|
+
.filter(s => s.status === types_1.StepStatus.COMPLETED)
|
|
325
|
+
.map(s => `${s.id}: ${s.description} -> ${(s.result || '').substring(0, 200)}`);
|
|
326
|
+
const failedSteps = this.state.plan
|
|
327
|
+
.filter(s => s.status === types_1.StepStatus.FAILED)
|
|
328
|
+
.map(s => `${s.id}: ${s.description} -> ERROR: ${s.error}`);
|
|
329
|
+
const messages = [
|
|
330
|
+
{ role: 'system', content: SYSTEM_PROMPTS[types_1.AgentRole.PLANNER] },
|
|
331
|
+
{ role: 'user', content: `Original task: ${this.state.task}\nCompleted: ${completedSteps.join('\n')}\nFailed: ${failedSteps.join('\n')}\nDecision needed: ${step.description}` },
|
|
332
|
+
];
|
|
333
|
+
const response = await this.provider.complete(messages, 0.3, 1000);
|
|
334
|
+
if (response.error) {
|
|
335
|
+
return { success: false, error: response.error };
|
|
336
|
+
}
|
|
337
|
+
return { success: true, output: response.content };
|
|
338
|
+
}
|
|
339
|
+
catch (error) {
|
|
340
|
+
return { success: false, error: error.message };
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Execute review step
|
|
345
|
+
*/
|
|
346
|
+
async executeReviewStep(step) {
|
|
347
|
+
try {
|
|
348
|
+
// Build execution context for reviewer
|
|
349
|
+
const executionResults = this.state.plan
|
|
350
|
+
.filter(s => s.status === types_1.StepStatus.COMPLETED || s.status === types_1.StepStatus.FAILED)
|
|
351
|
+
.map(s => ({
|
|
352
|
+
step: s.id,
|
|
353
|
+
description: s.description,
|
|
354
|
+
status: s.status,
|
|
355
|
+
result: (s.result || '').substring(0, 500),
|
|
356
|
+
error: s.error,
|
|
357
|
+
}));
|
|
358
|
+
const messages = [
|
|
359
|
+
{ role: 'system', content: SYSTEM_PROMPTS[types_1.AgentRole.REVIEWER] },
|
|
360
|
+
{ role: 'user', content: `Task: ${this.state.task}\n\nExecution Results:\n${JSON.stringify(executionResults, null, 2)}` },
|
|
361
|
+
];
|
|
362
|
+
const response = await this.provider.complete(messages, 0.3, 1024);
|
|
363
|
+
// Parse review result
|
|
364
|
+
const approved = response.content.toLowerCase().includes('approved: true') ||
|
|
365
|
+
response.content.toLowerCase().includes('"approved": true');
|
|
366
|
+
return { success: approved, output: response.content };
|
|
367
|
+
}
|
|
368
|
+
catch (error) {
|
|
369
|
+
return { success: false, error: error.message };
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Parse action from executor response
|
|
374
|
+
*/
|
|
375
|
+
parseAction(content) {
|
|
376
|
+
try {
|
|
377
|
+
const jsonMatch = content.match(/\{[\s\S]*\}/);
|
|
378
|
+
if (jsonMatch) {
|
|
379
|
+
const parsed = JSON.parse(jsonMatch[0]);
|
|
380
|
+
return {
|
|
381
|
+
action: parsed.action || 'unknown',
|
|
382
|
+
input: parsed.input || parsed.command || '',
|
|
383
|
+
};
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
catch (err) {
|
|
387
|
+
logger.debug(`parseAction: JSON parse failed for content, treating as thought: ${err.message}`);
|
|
388
|
+
}
|
|
389
|
+
return { action: 'unknown', input: content };
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* Generate final summary
|
|
393
|
+
*/
|
|
394
|
+
isSimpleTask(task) {
|
|
395
|
+
const simple = task.trim().toLowerCase();
|
|
396
|
+
const simplePatterns = ['hello', 'hi', 'hey', 'merhaba', 'selam', 'test', 'ping', 'help', 'yardım'];
|
|
397
|
+
return simple.split(/\s+/).length <= 3 && simplePatterns.some(p => simple.includes(p));
|
|
398
|
+
}
|
|
399
|
+
async handleSimpleTask(task) {
|
|
400
|
+
try {
|
|
401
|
+
const messages = [
|
|
402
|
+
{ role: 'system', content: 'You are LinguClaw, a helpful AI coding assistant. Respond concisely and helpfully.' },
|
|
403
|
+
{ role: 'user', content: task },
|
|
404
|
+
];
|
|
405
|
+
const response = await this.provider.complete(messages, 0.7, 500);
|
|
406
|
+
if (response.error) {
|
|
407
|
+
return 'Error: ' + response.error;
|
|
408
|
+
}
|
|
409
|
+
if (!response.content || response.content.trim().length === 0) {
|
|
410
|
+
return 'Error: LLM returned empty response. Check your API key and credits.';
|
|
411
|
+
}
|
|
412
|
+
return response.content;
|
|
413
|
+
}
|
|
414
|
+
catch (error) {
|
|
415
|
+
return 'Error: ' + error.message;
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
generateSummary() {
|
|
419
|
+
const completed = this.state.plan.filter(s => s.status === types_1.StepStatus.COMPLETED).length;
|
|
420
|
+
const failed = this.state.plan.filter(s => s.status === types_1.StepStatus.FAILED).length;
|
|
421
|
+
const total = this.state.plan.length;
|
|
422
|
+
let summary = `# Execution Summary\n\n`;
|
|
423
|
+
summary += `Task: ${this.state.task}\n`;
|
|
424
|
+
summary += `Steps: ${completed}/${total} completed, ${failed} failed\n\n`;
|
|
425
|
+
summary += `## Results\n\n`;
|
|
426
|
+
for (const step of this.state.plan) {
|
|
427
|
+
const icon = step.status === types_1.StepStatus.COMPLETED ? '✅' :
|
|
428
|
+
step.status === types_1.StepStatus.FAILED ? '❌' : '⏳';
|
|
429
|
+
summary += `${icon} **${step.id}**: ${step.description}\n`;
|
|
430
|
+
if (step.result) {
|
|
431
|
+
summary += ` Result: ${step.result}\n`;
|
|
432
|
+
}
|
|
433
|
+
if (step.error) {
|
|
434
|
+
summary += ` Error: ${step.error}\n`;
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
return summary;
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
exports.Orchestrator = Orchestrator;
|
|
441
|
+
//# sourceMappingURL=orchestrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../src/orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin System - OpenClaw Architecture
|
|
3
|
+
* TypeScript equivalent of Python plugins.py
|
|
4
|
+
*/
|
|
5
|
+
import { PluginInfo, PluginContext } from './types';
|
|
6
|
+
export declare abstract class BasePlugin {
|
|
7
|
+
NAME: string;
|
|
8
|
+
VERSION: string;
|
|
9
|
+
DESCRIPTION: string;
|
|
10
|
+
AUTHOR: string;
|
|
11
|
+
DEPENDENCIES: string[];
|
|
12
|
+
protected context: PluginContext;
|
|
13
|
+
protected initialized: boolean;
|
|
14
|
+
constructor();
|
|
15
|
+
initialize(context: PluginContext): Promise<boolean>;
|
|
16
|
+
shutdown(): Promise<void>;
|
|
17
|
+
getInfo(): PluginInfo;
|
|
18
|
+
}
|
|
19
|
+
export declare abstract class ToolPlugin extends BasePlugin {
|
|
20
|
+
abstract _defineTools(): Record<string, (...args: any[]) => any>;
|
|
21
|
+
getTools(): Record<string, (...args: any[]) => any>;
|
|
22
|
+
}
|
|
23
|
+
export declare abstract class AgentPlugin extends BasePlugin {
|
|
24
|
+
_onInit(): void;
|
|
25
|
+
_onStep(step: any): void;
|
|
26
|
+
_onComplete(result: any): void;
|
|
27
|
+
_modifySystemPromptSafe(basePrompt: string, context: any): string;
|
|
28
|
+
}
|
|
29
|
+
export declare abstract class WorkflowPlugin extends BasePlugin {
|
|
30
|
+
_beforeWorkflow(workflowId: string, params: any): any;
|
|
31
|
+
_afterWorkflow(workflowId: string, result: any): any;
|
|
32
|
+
_onError(workflowId: string, error: Error): void;
|
|
33
|
+
}
|
|
34
|
+
export declare class PluginManager {
|
|
35
|
+
plugins: Map<string, BasePlugin>;
|
|
36
|
+
toolPlugins: Map<string, ToolPlugin>;
|
|
37
|
+
agentPlugins: Map<string, AgentPlugin>;
|
|
38
|
+
workflowPlugins: Map<string, WorkflowPlugin>;
|
|
39
|
+
private pluginDir;
|
|
40
|
+
constructor(pluginDir?: string);
|
|
41
|
+
discoverPlugins(): Promise<string[]>;
|
|
42
|
+
loadPlugin(pluginPath: string, context: PluginContext): Promise<boolean>;
|
|
43
|
+
loadAllPlugins(context: PluginContext): Promise<number>;
|
|
44
|
+
getPlugin(name: string): BasePlugin | undefined;
|
|
45
|
+
getToolPlugins(): Map<string, ToolPlugin>;
|
|
46
|
+
getAgentPlugins(): Map<string, AgentPlugin>;
|
|
47
|
+
getWorkflowPlugins(): Map<string, WorkflowPlugin>;
|
|
48
|
+
getAllTools(): Record<string, (...args: any[]) => any>;
|
|
49
|
+
shutdown(): Promise<void>;
|
|
50
|
+
}
|
|
51
|
+
export declare function getPluginManager(pluginDir?: string): PluginManager;
|
|
52
|
+
//# sourceMappingURL=plugins.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../src/plugins.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,UAAU,EAAgB,aAAa,EAAU,MAAM,SAAS,CAAC;AAM1E,8BAAsB,UAAU;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,EAAE,CAAC;IAEvB,SAAS,CAAC,OAAO,EAAG,aAAa,CAAC;IAClC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC;;IAWzB,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAepD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAK/B,OAAO,IAAI,UAAU;CAStB;AAGD,8BAAsB,UAAW,SAAQ,UAAU;IACjD,QAAQ,CAAC,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;IAEhE,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;CAOpD;AAGD,8BAAsB,WAAY,SAAQ,UAAU;IAClD,OAAO,IAAI,IAAI;IACf,OAAO,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IACxB,WAAW,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI;IAE9B,uBAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,MAAM;CAGlE;AAGD,8BAAsB,cAAe,SAAQ,UAAU;IACrD,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,GAAG;IAIrD,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,GAAG;IAIpD,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;CAGjD;AAGD,qBAAa,aAAa;IACxB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACjC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACrC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACvC,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC7C,OAAO,CAAC,SAAS,CAAS;gBAEd,SAAS,GAAE,MAA+B;IAQhD,eAAe,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAwBpC,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAuCxE,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAc7D,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAI/C,cAAc,IAAI,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC;IAIzC,eAAe,IAAI,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC;IAI3C,kBAAkB,IAAI,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;IAIjD,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;IAWhD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAShC;AAKD,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,aAAa,CAKlE"}
|