@metabob/minibob 0.1.2
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/ARCHITECTURE.md +255 -0
- package/CHANGELOG.md +112 -0
- package/README.md +380 -0
- package/bin/minibob.js +36 -0
- package/dist/acp-gossip.d.ts +72 -0
- package/dist/acp-gossip.d.ts.map +1 -0
- package/dist/acp-gossip.js +156 -0
- package/dist/acp-gossip.js.map +1 -0
- package/dist/acp.d.ts +62 -0
- package/dist/acp.d.ts.map +1 -0
- package/dist/acp.js +292 -0
- package/dist/acp.js.map +1 -0
- package/dist/activity.d.ts +157 -0
- package/dist/activity.d.ts.map +1 -0
- package/dist/activity.js +518 -0
- package/dist/activity.js.map +1 -0
- package/dist/agent-runtime.d.ts +104 -0
- package/dist/agent-runtime.d.ts.map +1 -0
- package/dist/boredom.d.ts +125 -0
- package/dist/boredom.d.ts.map +1 -0
- package/dist/boredom.js +244 -0
- package/dist/boredom.js.map +1 -0
- package/dist/cli/acp-server.d.ts +23 -0
- package/dist/cli/acp-server.d.ts.map +1 -0
- package/dist/cli/burrow.d.ts +26 -0
- package/dist/cli/burrow.d.ts.map +1 -0
- package/dist/cli/doctor.d.ts +22 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/goal.d.ts +22 -0
- package/dist/cli/goal.d.ts.map +1 -0
- package/dist/cli/index.d.ts +47 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/instance-registry.d.ts +78 -0
- package/dist/cli/instance-registry.d.ts.map +1 -0
- package/dist/cli/observe.d.ts +35 -0
- package/dist/cli/observe.d.ts.map +1 -0
- package/dist/cli/vessel.d.ts +14 -0
- package/dist/cli/vessel.d.ts.map +1 -0
- package/dist/composition-observer.d.ts +96 -0
- package/dist/composition-observer.d.ts.map +1 -0
- package/dist/config.d.ts +36 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +128 -0
- package/dist/config.js.map +1 -0
- package/dist/docker/Dockerfile +35 -0
- package/dist/environment.d.ts +72 -0
- package/dist/environment.d.ts.map +1 -0
- package/dist/environment.js +142 -0
- package/dist/environment.js.map +1 -0
- package/dist/goal-processor.d.ts +165 -0
- package/dist/goal-processor.d.ts.map +1 -0
- package/dist/helm/minibob-cluster/Chart.yaml +13 -0
- package/dist/helm/minibob-cluster/templates/_helpers.tpl +60 -0
- package/dist/helm/minibob-cluster/templates/configmap.yaml +11 -0
- package/dist/helm/minibob-cluster/templates/deployment.yaml +108 -0
- package/dist/helm/minibob-cluster/templates/secret.yaml +10 -0
- package/dist/helm/minibob-cluster/templates/service.yaml +37 -0
- package/dist/helm/minibob-cluster/values-local.yaml +41 -0
- package/dist/helm/minibob-cluster/values-production.yaml +57 -0
- package/dist/helm/minibob-cluster/values-testing-cluster.yaml +43 -0
- package/dist/helm/minibob-cluster/values.yaml +127 -0
- package/dist/improviser.d.ts +74 -0
- package/dist/improviser.d.ts.map +1 -0
- package/dist/impulse-filter.d.ts +74 -0
- package/dist/impulse-filter.d.ts.map +1 -0
- package/dist/impulse.d.ts +92 -0
- package/dist/impulse.d.ts.map +1 -0
- package/dist/impulse.js +234 -0
- package/dist/impulse.js.map +1 -0
- package/dist/lib.d.ts +29 -0
- package/dist/lib.d.ts.map +1 -0
- package/dist/lib.js +18561 -0
- package/dist/lib.js.map +98 -0
- package/dist/lifecycle-hooks.d.ts +99 -0
- package/dist/lifecycle-hooks.d.ts.map +1 -0
- package/dist/lifecycle-hooks.js +135 -0
- package/dist/lifecycle-hooks.js.map +1 -0
- package/dist/llm.d.ts +31 -0
- package/dist/llm.d.ts.map +1 -0
- package/dist/llm.js +349 -0
- package/dist/llm.js.map +1 -0
- package/dist/mcp-activity-bridge.d.ts +66 -0
- package/dist/mcp-activity-bridge.d.ts.map +1 -0
- package/dist/mcp-activity-bridge.js +126 -0
- package/dist/mcp-activity-bridge.js.map +1 -0
- package/dist/mcp.d.ts +216 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +292 -0
- package/dist/mcp.js.map +1 -0
- package/dist/memory-agent.d.ts +92 -0
- package/dist/memory-agent.d.ts.map +1 -0
- package/dist/memory-agent.js +277 -0
- package/dist/memory-agent.js.map +1 -0
- package/dist/runtime-mapping.d.ts +97 -0
- package/dist/runtime-mapping.d.ts.map +1 -0
- package/dist/search-first-executor.d.ts +113 -0
- package/dist/search-first-executor.d.ts.map +1 -0
- package/dist/session.d.ts +48 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/template-extractor.d.ts +9 -0
- package/dist/template-extractor.d.ts.map +1 -0
- package/dist/template-generator.d.ts +12 -0
- package/dist/template-generator.d.ts.map +1 -0
- package/dist/tools.d.ts +58 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +771 -0
- package/dist/tools.js.map +1 -0
- package/dist/types.d.ts +503 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/understanding/analyzer.d.ts +55 -0
- package/dist/understanding/analyzer.d.ts.map +1 -0
- package/dist/understanding/explorer.d.ts +73 -0
- package/dist/understanding/explorer.d.ts.map +1 -0
- package/dist/understanding/index.d.ts +7 -0
- package/dist/understanding/index.d.ts.map +1 -0
- package/dist/understanding/types.d.ts +136 -0
- package/dist/understanding/types.d.ts.map +1 -0
- package/dist/validation.d.ts +29 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +106 -0
- package/dist/validation.js.map +1 -0
- package/dist/vessel-bootstrap.d.ts +190 -0
- package/dist/vessel-bootstrap.d.ts.map +1 -0
- package/dist/vessel-registry.d.ts +229 -0
- package/dist/vessel-registry.d.ts.map +1 -0
- package/index.ts +1329 -0
- package/package.json +54 -0
- package/src/acp-gossip.ts +193 -0
- package/src/acp.ts +362 -0
- package/src/activity.ts +1464 -0
- package/src/agent-runtime.ts +365 -0
- package/src/boredom.ts +423 -0
- package/src/cli/acp-server.ts +377 -0
- package/src/cli/burrow.ts +896 -0
- package/src/cli/doctor.ts +526 -0
- package/src/cli/goal.ts +224 -0
- package/src/cli/index.ts +147 -0
- package/src/cli/instance-registry.ts +271 -0
- package/src/cli/observe.ts +682 -0
- package/src/cli/vessel.ts +287 -0
- package/src/components/SystemOverview.tsx +331 -0
- package/src/composition-observer.ts +449 -0
- package/src/config.ts +172 -0
- package/src/environment.ts +167 -0
- package/src/goal-processor.ts +654 -0
- package/src/improviser.ts +591 -0
- package/src/impulse-filter.ts +273 -0
- package/src/impulse.ts +311 -0
- package/src/lib.ts +147 -0
- package/src/lifecycle-hooks.ts +181 -0
- package/src/llm.ts +434 -0
- package/src/mcp-activity-bridge.ts +158 -0
- package/src/mcp.ts +747 -0
- package/src/memory-agent.ts +316 -0
- package/src/runtime-mapping.ts +527 -0
- package/src/search-first-executor.ts +666 -0
- package/src/session.ts +141 -0
- package/src/template-extractor.ts +256 -0
- package/src/template-generator.ts +130 -0
- package/src/tools.ts +924 -0
- package/src/types.ts +497 -0
- package/src/understanding/analyzer.ts +354 -0
- package/src/understanding/explorer.ts +488 -0
- package/src/understanding/index.ts +27 -0
- package/src/understanding/types.ts +153 -0
- package/src/validation.ts +125 -0
- package/src/vessel-bootstrap.ts +440 -0
- package/src/vessel-registry.ts +621 -0
- package/templates/core/edit-file.json +85 -0
- package/templates/understanding/diagnose-problem.json +32 -0
- package/templates/understanding/explore-codebase-v2.json +57 -0
- package/templates/understanding/explore-codebase.json +37 -0
package/dist/activity.js
ADDED
|
@@ -0,0 +1,518 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* minibob Activity Executor
|
|
3
|
+
*
|
|
4
|
+
* Executes activity templates with impulse injection and tool calling.
|
|
5
|
+
*/
|
|
6
|
+
import { createLLMClient } from "./llm";
|
|
7
|
+
import { createToolHandlers, getAllToolDefinitions } from "./tools";
|
|
8
|
+
import { createImpulse, loadImpulses, formatImpulsesForContext, storeActivityOutput, getImpulseStore, } from "./impulse";
|
|
9
|
+
import { getMCPClient, isMCPEnabled } from "./mcp";
|
|
10
|
+
/**
|
|
11
|
+
* Activity executor for running activity templates
|
|
12
|
+
*/
|
|
13
|
+
export class ActivityExecutor {
|
|
14
|
+
llm;
|
|
15
|
+
toolHandlers;
|
|
16
|
+
config;
|
|
17
|
+
customToolDefinitions;
|
|
18
|
+
constructor(config) {
|
|
19
|
+
this.config = config;
|
|
20
|
+
this.llm = createLLMClient(config.provider, config.apiKey);
|
|
21
|
+
// Collect custom tool definitions for passing to getAllToolDefinitions later
|
|
22
|
+
this.customToolDefinitions = Object.values(config.customTools ?? {}).map(({ definition }) => definition);
|
|
23
|
+
this.toolHandlers = createToolHandlers({
|
|
24
|
+
workingDirectory: config.workingDirectory,
|
|
25
|
+
onActivityExecute: async (templateId, variables, reason) => {
|
|
26
|
+
// Nested activity execution
|
|
27
|
+
const template = await loadTemplateFromMCPOrLocal(templateId);
|
|
28
|
+
const nestedExecutor = new ActivityExecutor(config);
|
|
29
|
+
return nestedExecutor.execute({ template, variables, reason });
|
|
30
|
+
},
|
|
31
|
+
onSearchActivities: config.onSearchActivities, // Wire activity search callback
|
|
32
|
+
onCreateActivity: config.onCreateActivity, // Wire activity creation callback
|
|
33
|
+
onImpulseCreate: (impulse) => {
|
|
34
|
+
// Create impulse
|
|
35
|
+
createImpulse({
|
|
36
|
+
id: impulse.id,
|
|
37
|
+
pointer: impulse.type === "memo" && impulse.content
|
|
38
|
+
? { type: "memo", content: impulse.content }
|
|
39
|
+
: impulse.type === "file" && impulse.content
|
|
40
|
+
? { type: "file", path: impulse.content }
|
|
41
|
+
: { type: "custom", resolver: impulse.type, data: {} },
|
|
42
|
+
budget: impulse.budget,
|
|
43
|
+
priority: impulse.priority,
|
|
44
|
+
});
|
|
45
|
+
},
|
|
46
|
+
customTools: config.customTools,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Execute an activity template
|
|
51
|
+
*/
|
|
52
|
+
async execute(options) {
|
|
53
|
+
const { template, variables, reason, onTaskStart, onTaskComplete } = options;
|
|
54
|
+
const activityId = `act_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
|
|
55
|
+
const execution = {
|
|
56
|
+
id: activityId,
|
|
57
|
+
templateId: template.id,
|
|
58
|
+
status: "executing",
|
|
59
|
+
variables,
|
|
60
|
+
impulses: [],
|
|
61
|
+
taskResults: [],
|
|
62
|
+
startedAt: Date.now(),
|
|
63
|
+
};
|
|
64
|
+
console.log(`[Activity] Starting: ${template.name} (${activityId})`);
|
|
65
|
+
if (reason) {
|
|
66
|
+
console.log(`[Activity] Reason: ${reason}`);
|
|
67
|
+
}
|
|
68
|
+
// Register template to backend if MCP is enabled (ensure variant tracking)
|
|
69
|
+
if (isMCPEnabled()) {
|
|
70
|
+
const mcp = getMCPClient();
|
|
71
|
+
if (mcp) {
|
|
72
|
+
console.log(`[Activity] Registering template variant: ${template.id}`);
|
|
73
|
+
await mcp.registerTemplate(template);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
try {
|
|
77
|
+
// Step 1: Create impulses from context requirements
|
|
78
|
+
const impulses = await this.createImpulsesFromRequirements(activityId, template, variables);
|
|
79
|
+
execution.impulses = impulses;
|
|
80
|
+
// Step 2: Sort tasks by dependencies
|
|
81
|
+
const sortedTasks = this.topologicalSort(template.tasks);
|
|
82
|
+
// Step 3: Execute tasks in order
|
|
83
|
+
let totalInputTokens = 0;
|
|
84
|
+
let totalOutputTokens = 0;
|
|
85
|
+
for (const task of sortedTasks) {
|
|
86
|
+
onTaskStart?.(task.id);
|
|
87
|
+
console.log(`[Task] Executing: ${task.id} - ${task.description}`);
|
|
88
|
+
const result = await this.executeTask(activityId, task, variables, impulses);
|
|
89
|
+
execution.taskResults.push(result);
|
|
90
|
+
if (result.tokens) {
|
|
91
|
+
totalInputTokens += result.tokens.input;
|
|
92
|
+
totalOutputTokens += result.tokens.output;
|
|
93
|
+
}
|
|
94
|
+
onTaskComplete?.(task.id, result);
|
|
95
|
+
if (result.status === "failed") {
|
|
96
|
+
console.error(`[Task] Failed: ${task.id} - ${result.error}`);
|
|
97
|
+
// Check retry policy
|
|
98
|
+
if (task.retry && task.retry.maxAttempts > 1) {
|
|
99
|
+
let retryCount = 1;
|
|
100
|
+
while (retryCount < task.retry.maxAttempts && result.status === "failed") {
|
|
101
|
+
console.log(`[Task] Retrying ${task.id} (attempt ${retryCount + 1}/${task.retry.maxAttempts})`);
|
|
102
|
+
const retryResult = await this.executeTask(activityId, task, variables, impulses, result.error);
|
|
103
|
+
execution.taskResults[execution.taskResults.length - 1] = retryResult;
|
|
104
|
+
if (retryResult.tokens) {
|
|
105
|
+
totalInputTokens += retryResult.tokens.input;
|
|
106
|
+
totalOutputTokens += retryResult.tokens.output;
|
|
107
|
+
}
|
|
108
|
+
if (retryResult.status === "completed")
|
|
109
|
+
break;
|
|
110
|
+
retryCount++;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// If still failed after retries, abort
|
|
114
|
+
if (execution.taskResults[execution.taskResults.length - 1]?.status === "failed") {
|
|
115
|
+
execution.status = "failed";
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// Step 4: Complete execution
|
|
121
|
+
execution.completedAt = Date.now();
|
|
122
|
+
if (execution.status !== "failed") {
|
|
123
|
+
execution.status = "completed";
|
|
124
|
+
}
|
|
125
|
+
execution.metrics = {
|
|
126
|
+
duration: execution.completedAt - execution.startedAt,
|
|
127
|
+
cost: this.estimateCost(totalInputTokens, totalOutputTokens),
|
|
128
|
+
totalTokens: { input: totalInputTokens, output: totalOutputTokens },
|
|
129
|
+
};
|
|
130
|
+
console.log(`[Activity] Completed: ${execution.status} in ${execution.metrics.duration}ms`);
|
|
131
|
+
// Report execution to MCP backend if enabled
|
|
132
|
+
if (isMCPEnabled()) {
|
|
133
|
+
const mcp = getMCPClient();
|
|
134
|
+
if (mcp) {
|
|
135
|
+
console.log(`[Activity] Reporting execution to MCP backend...`);
|
|
136
|
+
const reported = await mcp.reportExecution(execution);
|
|
137
|
+
if (reported) {
|
|
138
|
+
console.log(`[Activity] ✓ Execution reported to backend`);
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
console.warn(`[Activity] ⚠ Failed to report execution to backend`);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
execution.status = "failed";
|
|
148
|
+
execution.completedAt = Date.now();
|
|
149
|
+
console.error(`[Activity] Error:`, error);
|
|
150
|
+
// Still try to report failure to backend
|
|
151
|
+
if (isMCPEnabled()) {
|
|
152
|
+
const mcp = getMCPClient();
|
|
153
|
+
if (mcp) {
|
|
154
|
+
await mcp.reportExecution(execution).catch(() => {
|
|
155
|
+
// Ignore reporting errors on failure
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return execution;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Create impulses from template context requirements
|
|
164
|
+
*/
|
|
165
|
+
async createImpulsesFromRequirements(activityId, template, variables) {
|
|
166
|
+
const impulses = [];
|
|
167
|
+
if (!template.contextRequirements) {
|
|
168
|
+
return impulses;
|
|
169
|
+
}
|
|
170
|
+
for (const req of template.contextRequirements) {
|
|
171
|
+
// Interpolate source with variables
|
|
172
|
+
const source = this.interpolate(req.source, variables);
|
|
173
|
+
let impulse;
|
|
174
|
+
switch (req.type) {
|
|
175
|
+
case "file":
|
|
176
|
+
impulse = createImpulse({
|
|
177
|
+
id: req.id,
|
|
178
|
+
pointer: { type: "file", path: source },
|
|
179
|
+
budget: req.budget,
|
|
180
|
+
priority: req.priority,
|
|
181
|
+
});
|
|
182
|
+
break;
|
|
183
|
+
case "glob":
|
|
184
|
+
// Resolve glob to files and create impulses for each
|
|
185
|
+
// For simplicity, create a single impulse that will list files
|
|
186
|
+
impulse = createImpulse({
|
|
187
|
+
id: req.id,
|
|
188
|
+
pointer: {
|
|
189
|
+
type: "custom",
|
|
190
|
+
resolver: "glob",
|
|
191
|
+
data: { pattern: source, cwd: this.config.workingDirectory },
|
|
192
|
+
},
|
|
193
|
+
budget: req.budget,
|
|
194
|
+
priority: req.priority,
|
|
195
|
+
});
|
|
196
|
+
break;
|
|
197
|
+
case "memo":
|
|
198
|
+
impulse = createImpulse({
|
|
199
|
+
id: req.id,
|
|
200
|
+
pointer: { type: "memo", content: source },
|
|
201
|
+
budget: req.budget,
|
|
202
|
+
priority: req.priority,
|
|
203
|
+
});
|
|
204
|
+
break;
|
|
205
|
+
default:
|
|
206
|
+
impulse = createImpulse({
|
|
207
|
+
id: req.id,
|
|
208
|
+
pointer: {
|
|
209
|
+
type: "custom",
|
|
210
|
+
resolver: req.type,
|
|
211
|
+
data: { source },
|
|
212
|
+
},
|
|
213
|
+
budget: req.budget,
|
|
214
|
+
priority: req.priority,
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
impulses.push(impulse);
|
|
218
|
+
}
|
|
219
|
+
// Register glob resolver if not already registered
|
|
220
|
+
getImpulseStore().registerResolver("glob", async (data) => {
|
|
221
|
+
const pattern = data.pattern;
|
|
222
|
+
const cwd = data.cwd ?? this.config.workingDirectory;
|
|
223
|
+
const glob = new Bun.Glob(pattern);
|
|
224
|
+
const files = [];
|
|
225
|
+
for await (const file of glob.scan({ cwd })) {
|
|
226
|
+
files.push(file);
|
|
227
|
+
if (files.length >= 50)
|
|
228
|
+
break;
|
|
229
|
+
}
|
|
230
|
+
return files.join("\n");
|
|
231
|
+
});
|
|
232
|
+
return impulses;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Execute a single task
|
|
236
|
+
*/
|
|
237
|
+
async executeTask(activityId, task, variables, impulses, lastError) {
|
|
238
|
+
const startedAt = Date.now();
|
|
239
|
+
try {
|
|
240
|
+
// Load required impulses
|
|
241
|
+
const taskImpulseIds = task.impulseReferences ?? impulses.map((i) => i.id);
|
|
242
|
+
const loadedImpulses = await loadImpulses(taskImpulseIds);
|
|
243
|
+
// Build prompt
|
|
244
|
+
let prompt = this.interpolate(task.prompt.template, variables);
|
|
245
|
+
// Add impulse context
|
|
246
|
+
const impulseContext = formatImpulsesForContext(loadedImpulses);
|
|
247
|
+
if (impulseContext) {
|
|
248
|
+
prompt = `${impulseContext}\n\n${prompt}`;
|
|
249
|
+
}
|
|
250
|
+
// Add error context if retrying
|
|
251
|
+
if (lastError) {
|
|
252
|
+
prompt = `Previous attempt failed with error:\n${lastError}\n\nPlease try again, addressing the error.\n\n${prompt}`;
|
|
253
|
+
}
|
|
254
|
+
// Build messages
|
|
255
|
+
const messages = [
|
|
256
|
+
{
|
|
257
|
+
role: "system",
|
|
258
|
+
content: this.config.systemPrompt ?? this.getDefaultSystemPrompt(),
|
|
259
|
+
},
|
|
260
|
+
{
|
|
261
|
+
role: "user",
|
|
262
|
+
content: prompt,
|
|
263
|
+
},
|
|
264
|
+
];
|
|
265
|
+
// Execute with tool calling
|
|
266
|
+
const result = await this.llm.completeWithTools({
|
|
267
|
+
model: this.config.model,
|
|
268
|
+
messages,
|
|
269
|
+
tools: getAllToolDefinitions(this.customToolDefinitions),
|
|
270
|
+
maxTokens: task.prompt.maxTokens ?? 4096,
|
|
271
|
+
}, this.toolHandlers);
|
|
272
|
+
// Store output for potential downstream tasks
|
|
273
|
+
storeActivityOutput(activityId, task.id, result.content);
|
|
274
|
+
// Run validation if specified
|
|
275
|
+
if (task.validation) {
|
|
276
|
+
const validationResult = await this.runValidation(task.validation);
|
|
277
|
+
if (!validationResult.success) {
|
|
278
|
+
return {
|
|
279
|
+
taskId: task.id,
|
|
280
|
+
status: "failed",
|
|
281
|
+
output: result.content,
|
|
282
|
+
error: `Validation failed: ${validationResult.error}`,
|
|
283
|
+
startedAt,
|
|
284
|
+
completedAt: Date.now(),
|
|
285
|
+
tokens: { input: result.usage.inputTokens, output: result.usage.outputTokens },
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
return {
|
|
290
|
+
taskId: task.id,
|
|
291
|
+
status: "completed",
|
|
292
|
+
output: result.content,
|
|
293
|
+
startedAt,
|
|
294
|
+
completedAt: Date.now(),
|
|
295
|
+
tokens: { input: result.usage.inputTokens, output: result.usage.outputTokens },
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
catch (error) {
|
|
299
|
+
return {
|
|
300
|
+
taskId: task.id,
|
|
301
|
+
status: "failed",
|
|
302
|
+
error: error instanceof Error ? error.message : String(error),
|
|
303
|
+
startedAt,
|
|
304
|
+
completedAt: Date.now(),
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Run validation checks
|
|
310
|
+
*/
|
|
311
|
+
async runValidation(validation) {
|
|
312
|
+
if (!validation)
|
|
313
|
+
return { success: true };
|
|
314
|
+
// Check required files exist
|
|
315
|
+
if (validation.requiredFiles) {
|
|
316
|
+
for (const filePath of validation.requiredFiles) {
|
|
317
|
+
const file = Bun.file(filePath);
|
|
318
|
+
if (!(await file.exists())) {
|
|
319
|
+
return { success: false, error: `Required file missing: ${filePath}` };
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
// Check required patterns
|
|
324
|
+
if (validation.requiredPatterns) {
|
|
325
|
+
for (const { file: filePath, pattern } of validation.requiredPatterns) {
|
|
326
|
+
const file = Bun.file(filePath);
|
|
327
|
+
if (!(await file.exists())) {
|
|
328
|
+
return { success: false, error: `File missing for pattern check: ${filePath}` };
|
|
329
|
+
}
|
|
330
|
+
const content = await file.text();
|
|
331
|
+
const regex = new RegExp(pattern);
|
|
332
|
+
if (!regex.test(content)) {
|
|
333
|
+
return { success: false, error: `Pattern not found in ${filePath}: ${pattern}` };
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
// Check forbidden patterns
|
|
338
|
+
if (validation.forbiddenPatterns) {
|
|
339
|
+
for (const { file: filePath, pattern } of validation.forbiddenPatterns) {
|
|
340
|
+
const file = Bun.file(filePath);
|
|
341
|
+
if (await file.exists()) {
|
|
342
|
+
const content = await file.text();
|
|
343
|
+
const regex = new RegExp(pattern);
|
|
344
|
+
if (regex.test(content)) {
|
|
345
|
+
return { success: false, error: `Forbidden pattern found in ${filePath}: ${pattern}` };
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
// Run validation commands
|
|
351
|
+
if (validation.commands) {
|
|
352
|
+
for (const { command, expectedOutput } of validation.commands) {
|
|
353
|
+
const bashHandler = this.toolHandlers.bash;
|
|
354
|
+
if (!bashHandler) {
|
|
355
|
+
return { success: false, error: "bash tool handler not available" };
|
|
356
|
+
}
|
|
357
|
+
const result = await bashHandler({ command });
|
|
358
|
+
if (!result.success) {
|
|
359
|
+
return { success: false, error: `Validation command failed: ${command}` };
|
|
360
|
+
}
|
|
361
|
+
if (expectedOutput && !result.output?.includes(expectedOutput)) {
|
|
362
|
+
return { success: false, error: `Unexpected output from: ${command}` };
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
return { success: true };
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Topological sort for task dependencies
|
|
370
|
+
*/
|
|
371
|
+
topologicalSort(tasks) {
|
|
372
|
+
const taskMap = new Map(tasks.map((t) => [t.id, t]));
|
|
373
|
+
const visited = new Set();
|
|
374
|
+
const result = [];
|
|
375
|
+
const visit = (taskId) => {
|
|
376
|
+
if (visited.has(taskId))
|
|
377
|
+
return;
|
|
378
|
+
visited.add(taskId);
|
|
379
|
+
const task = taskMap.get(taskId);
|
|
380
|
+
if (!task)
|
|
381
|
+
return;
|
|
382
|
+
for (const depId of task.dependencies ?? []) {
|
|
383
|
+
visit(depId);
|
|
384
|
+
}
|
|
385
|
+
result.push(task);
|
|
386
|
+
};
|
|
387
|
+
for (const task of tasks) {
|
|
388
|
+
visit(task.id);
|
|
389
|
+
}
|
|
390
|
+
return result;
|
|
391
|
+
}
|
|
392
|
+
/**
|
|
393
|
+
* Interpolate variables into template string
|
|
394
|
+
*/
|
|
395
|
+
interpolate(template, variables) {
|
|
396
|
+
return template.replace(/\{\{(\w+)\}\}/g, (_, key) => {
|
|
397
|
+
const value = variables[key];
|
|
398
|
+
if (value === undefined)
|
|
399
|
+
return `{{${key}}}`;
|
|
400
|
+
if (typeof value === "object")
|
|
401
|
+
return JSON.stringify(value, null, 2);
|
|
402
|
+
return String(value);
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Estimate cost based on token usage
|
|
407
|
+
*/
|
|
408
|
+
estimateCost(inputTokens, outputTokens) {
|
|
409
|
+
// Approximate costs for Claude 3.5 Sonnet
|
|
410
|
+
const inputCostPerMillion = 3.0;
|
|
411
|
+
const outputCostPerMillion = 15.0;
|
|
412
|
+
return ((inputTokens / 1_000_000) * inputCostPerMillion +
|
|
413
|
+
(outputTokens / 1_000_000) * outputCostPerMillion);
|
|
414
|
+
}
|
|
415
|
+
/**
|
|
416
|
+
* Get default system prompt
|
|
417
|
+
*
|
|
418
|
+
* ARCHITECTURE: Enforces activity-first constraint per corrected trailblazing architecture.
|
|
419
|
+
* MiniBob must search for existing activities and create new ones for non-trivial tasks.
|
|
420
|
+
*/
|
|
421
|
+
getDefaultSystemPrompt() {
|
|
422
|
+
return `You are minibob, an autonomous vessel that creates and composes activities instead of using direct tool calls.
|
|
423
|
+
|
|
424
|
+
**CORE PRINCIPLE**: You learn by creating reusable activities, not by executing one-off tool calls.
|
|
425
|
+
|
|
426
|
+
**CONSTRAINTS - ACTIVITY-FIRST APPROACH**:
|
|
427
|
+
|
|
428
|
+
For NON-TRIVIAL tasks (anything beyond simple reads/status checks):
|
|
429
|
+
1. search_activities() to find existing templates
|
|
430
|
+
2. If match found: Execute the activity
|
|
431
|
+
3. If no match: create_activity_goal_seeking() to create new template
|
|
432
|
+
4. Record your reasoning for the choice
|
|
433
|
+
|
|
434
|
+
For TRIVIAL tasks (simple operations that don't benefit from templating):
|
|
435
|
+
- Simple file reads (read a single file to check content)
|
|
436
|
+
- Basic git status checks (git status, git diff)
|
|
437
|
+
- Simple list operations (ls, find single file)
|
|
438
|
+
✅ Direct tool use allowed
|
|
439
|
+
|
|
440
|
+
**EXAMPLES**:
|
|
441
|
+
|
|
442
|
+
Non-Trivial (MUST use activities):
|
|
443
|
+
❌ "Fix all TypeScript errors" → search_activities → create if no match
|
|
444
|
+
❌ "Add authentication" → search_activities → create if no match
|
|
445
|
+
❌ "Refactor component" → search_activities → create if no match
|
|
446
|
+
❌ "Deploy to production" → search_activities → create if no match
|
|
447
|
+
|
|
448
|
+
Trivial (Direct tools OK):
|
|
449
|
+
✅ "Read src/index.ts to see imports" → read tool
|
|
450
|
+
✅ "Check git status" → bash git status
|
|
451
|
+
✅ "List files in src/" → bash ls src/
|
|
452
|
+
|
|
453
|
+
**WORKFLOW**:
|
|
454
|
+
1. Analyze task complexity
|
|
455
|
+
2. If non-trivial: search_activities() first
|
|
456
|
+
- Found match? Execute it
|
|
457
|
+
- No match? create_activity_goal_seeking()
|
|
458
|
+
3. If trivial: Use direct tools (read, bash, git)
|
|
459
|
+
4. Always explain your reasoning
|
|
460
|
+
|
|
461
|
+
**GUIDELINES**:
|
|
462
|
+
- Prefer activity composition over direct execution
|
|
463
|
+
- Create reusable templates from complex workflows
|
|
464
|
+
- Search before creating (avoid duplicate activities)
|
|
465
|
+
- Report activity execution results clearly
|
|
466
|
+
- When stuck, ask specific targeted questions
|
|
467
|
+
|
|
468
|
+
Be autonomous, learn from execution, and build reusable knowledge.`;
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
/**
|
|
472
|
+
* Load an activity template from a JSON file
|
|
473
|
+
*/
|
|
474
|
+
export async function loadTemplate(path) {
|
|
475
|
+
const file = Bun.file(path);
|
|
476
|
+
if (!(await file.exists())) {
|
|
477
|
+
throw new Error(`Template not found: ${path}`);
|
|
478
|
+
}
|
|
479
|
+
const content = await file.json();
|
|
480
|
+
return content;
|
|
481
|
+
}
|
|
482
|
+
/**
|
|
483
|
+
* Load activity template from MCP backend or local file
|
|
484
|
+
*
|
|
485
|
+
* If templateIdOrPath looks like a file path (contains / or .json), load from file.
|
|
486
|
+
* Otherwise, try to load from MCP backend first, then fall back to local templates/ directory.
|
|
487
|
+
*/
|
|
488
|
+
export async function loadTemplateFromMCPOrLocal(templateIdOrPath) {
|
|
489
|
+
// Check if it's a file path
|
|
490
|
+
if (templateIdOrPath.includes("/") || templateIdOrPath.endsWith(".json")) {
|
|
491
|
+
return loadTemplate(templateIdOrPath);
|
|
492
|
+
}
|
|
493
|
+
// Try MCP first if enabled
|
|
494
|
+
if (isMCPEnabled()) {
|
|
495
|
+
const mcp = getMCPClient();
|
|
496
|
+
if (mcp) {
|
|
497
|
+
console.log(`[Activity] Fetching template "${templateIdOrPath}" from MCP backend...`);
|
|
498
|
+
const template = await mcp.getActivityTemplate(templateIdOrPath);
|
|
499
|
+
if (template) {
|
|
500
|
+
console.log(`[Activity] ✓ Template loaded from MCP backend`);
|
|
501
|
+
return template;
|
|
502
|
+
}
|
|
503
|
+
console.log(`[Activity] Template not found in MCP, trying local...`);
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
// Fall back to local templates directory
|
|
507
|
+
const localPath = `templates/${templateIdOrPath}.json`;
|
|
508
|
+
return loadTemplate(localPath);
|
|
509
|
+
}
|
|
510
|
+
/**
|
|
511
|
+
* Create executor and run activity
|
|
512
|
+
*/
|
|
513
|
+
export async function runActivity(config, templatePath, variables, reason) {
|
|
514
|
+
const template = await loadTemplate(templatePath);
|
|
515
|
+
const executor = new ActivityExecutor(config);
|
|
516
|
+
return executor.execute({ template, variables, reason });
|
|
517
|
+
}
|
|
518
|
+
//# sourceMappingURL=activity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activity.js","sourceRoot":"","sources":["../src/activity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Runtime - Reusable backend integration for CLI and server modes
|
|
3
|
+
*
|
|
4
|
+
* Provides:
|
|
5
|
+
* - Backend registration/deregistration
|
|
6
|
+
* - Heartbeat reporting
|
|
7
|
+
* - Execution metrics tracking
|
|
8
|
+
* - Graceful shutdown
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* const runtime = await AgentRuntime.initialize(config)
|
|
12
|
+
* // ... do work ...
|
|
13
|
+
* await runtime.reportExecution(execution)
|
|
14
|
+
* await runtime.shutdown()
|
|
15
|
+
*/
|
|
16
|
+
import type { MinibobConfig, ActivityExecution } from "./types";
|
|
17
|
+
import type { MCPClient } from "./mcp";
|
|
18
|
+
export interface AgentRuntimeConfig {
|
|
19
|
+
config: MinibobConfig;
|
|
20
|
+
mode: "cli" | "server";
|
|
21
|
+
instanceId?: string;
|
|
22
|
+
enableHeartbeat?: boolean;
|
|
23
|
+
heartbeatInterval?: number;
|
|
24
|
+
}
|
|
25
|
+
export interface AgentMetrics {
|
|
26
|
+
executionsCompleted: number;
|
|
27
|
+
executionsFailed: number;
|
|
28
|
+
totalCost: number;
|
|
29
|
+
totalTokens: {
|
|
30
|
+
input: number;
|
|
31
|
+
output: number;
|
|
32
|
+
};
|
|
33
|
+
uptime: number;
|
|
34
|
+
}
|
|
35
|
+
export interface CurrentActivity {
|
|
36
|
+
id: string;
|
|
37
|
+
name?: string;
|
|
38
|
+
task?: string;
|
|
39
|
+
startedAt: number;
|
|
40
|
+
}
|
|
41
|
+
export declare class AgentRuntime {
|
|
42
|
+
private config;
|
|
43
|
+
private mode;
|
|
44
|
+
private instanceId;
|
|
45
|
+
private startTime;
|
|
46
|
+
private mcp;
|
|
47
|
+
private manifest;
|
|
48
|
+
private heartbeatInterval;
|
|
49
|
+
private heartbeatIntervalMs;
|
|
50
|
+
private enableHeartbeat;
|
|
51
|
+
private metrics;
|
|
52
|
+
private currentActivity;
|
|
53
|
+
private shuttingDown;
|
|
54
|
+
private constructor();
|
|
55
|
+
/**
|
|
56
|
+
* Initialize agent runtime with backend connection
|
|
57
|
+
*/
|
|
58
|
+
static initialize(options: AgentRuntimeConfig): Promise<AgentRuntime>;
|
|
59
|
+
/**
|
|
60
|
+
* Start heartbeat reporting
|
|
61
|
+
*/
|
|
62
|
+
private startHeartbeat;
|
|
63
|
+
/**
|
|
64
|
+
* Mark start of activity execution
|
|
65
|
+
*/
|
|
66
|
+
setCurrentActivity(activity: CurrentActivity): void;
|
|
67
|
+
/**
|
|
68
|
+
* Clear current activity
|
|
69
|
+
*/
|
|
70
|
+
clearCurrentActivity(): void;
|
|
71
|
+
/**
|
|
72
|
+
* Report execution to backend
|
|
73
|
+
*/
|
|
74
|
+
reportExecution(execution: ActivityExecution): Promise<void>;
|
|
75
|
+
/**
|
|
76
|
+
* Get current metrics
|
|
77
|
+
*/
|
|
78
|
+
getMetrics(): AgentMetrics;
|
|
79
|
+
/**
|
|
80
|
+
* Get instance ID
|
|
81
|
+
*/
|
|
82
|
+
getInstanceId(): string;
|
|
83
|
+
/**
|
|
84
|
+
* Check if backend is available
|
|
85
|
+
*/
|
|
86
|
+
hasBackend(): boolean;
|
|
87
|
+
/**
|
|
88
|
+
* Get MCP client (if available)
|
|
89
|
+
*/
|
|
90
|
+
getMCP(): MCPClient | null;
|
|
91
|
+
/**
|
|
92
|
+
* Setup graceful shutdown handlers
|
|
93
|
+
*/
|
|
94
|
+
private setupShutdownHandlers;
|
|
95
|
+
/**
|
|
96
|
+
* Shutdown runtime and cleanup
|
|
97
|
+
*/
|
|
98
|
+
shutdown(): Promise<void>;
|
|
99
|
+
/**
|
|
100
|
+
* Generate unique instance ID
|
|
101
|
+
*/
|
|
102
|
+
private generateInstanceId;
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=agent-runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-runtime.d.ts","sourceRoot":"","sources":["../src/agent-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAkB,MAAM,SAAS,CAAA;AAC/E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAStC,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,aAAa,CAAA;IACrB,IAAI,EAAE,KAAK,GAAG,QAAQ,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,mBAAmB,EAAE,MAAM,CAAA;IAC3B,gBAAgB,EAAE,MAAM,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE;QACX,KAAK,EAAE,MAAM,CAAA;QACb,MAAM,EAAE,MAAM,CAAA;KACf,CAAA;IACD,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;CAClB;AAMD,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,IAAI,CAAkB;IAC9B,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,GAAG,CAAyB;IACpC,OAAO,CAAC,QAAQ,CAA8B;IAE9C,OAAO,CAAC,iBAAiB,CAA8B;IACvD,OAAO,CAAC,mBAAmB,CAAQ;IACnC,OAAO,CAAC,eAAe,CAAS;IAEhC,OAAO,CAAC,OAAO,CAMd;IAED,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,YAAY,CAAQ;IAE5B,OAAO;IASP;;OAEG;WACU,UAAU,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC;IAmE3E;;OAEG;IACH,OAAO,CAAC,cAAc;IAgDtB;;OAEG;IACH,kBAAkB,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAInD;;OAEG;IACH,oBAAoB,IAAI,IAAI;IAI5B;;OAEG;IACG,eAAe,CAAC,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBlE;;OAEG;IACH,UAAU,IAAI,YAAY;IAO1B;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACH,MAAM,IAAI,SAAS,GAAG,IAAI;IAI1B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAc7B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAqD/B;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAM3B"}
|