@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/acp.d.ts
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* minibob ACP Protocol Handler
|
|
3
|
+
*
|
|
4
|
+
* Agent Client Protocol support for vessel-to-vessel communication.
|
|
5
|
+
* Supports both receiving delegated tasks and delegating to other vessels.
|
|
6
|
+
*/
|
|
7
|
+
import type { ACPMessage, ACPDelegateRequest, ACPDelegateResponse } from "./types";
|
|
8
|
+
export interface ACPServerConfig {
|
|
9
|
+
provider: "anthropic" | "openai";
|
|
10
|
+
apiKey: string;
|
|
11
|
+
model: string;
|
|
12
|
+
workingDirectory: string;
|
|
13
|
+
systemPrompt?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* ACP session handler for streaming connections
|
|
17
|
+
*/
|
|
18
|
+
export declare class ACPSession {
|
|
19
|
+
private llm;
|
|
20
|
+
private toolHandlers;
|
|
21
|
+
private config;
|
|
22
|
+
private sessionId;
|
|
23
|
+
private messages;
|
|
24
|
+
private toolsUsed;
|
|
25
|
+
constructor(config: ACPServerConfig, sessionId: string);
|
|
26
|
+
/**
|
|
27
|
+
* Handle an incoming ACP message
|
|
28
|
+
*/
|
|
29
|
+
handleMessage(message: ACPMessage): Promise<ACPMessage[]>;
|
|
30
|
+
/**
|
|
31
|
+
* Get tools used in this session
|
|
32
|
+
*/
|
|
33
|
+
getToolsUsed(): string[];
|
|
34
|
+
private getDefaultSystemPrompt;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Handle WebSocket upgrade for ACP streaming
|
|
38
|
+
*/
|
|
39
|
+
export declare function createACPWebSocketHandler(config: ACPServerConfig): {
|
|
40
|
+
upgrade(request: Request): Response | undefined;
|
|
41
|
+
websocket: {
|
|
42
|
+
message(ws: WebSocket & {
|
|
43
|
+
data: {
|
|
44
|
+
sessionId?: string;
|
|
45
|
+
};
|
|
46
|
+
}, message: string | Buffer): Promise<void>;
|
|
47
|
+
close(ws: WebSocket & {
|
|
48
|
+
data: {
|
|
49
|
+
sessionId?: string;
|
|
50
|
+
};
|
|
51
|
+
}): void;
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Delegate a task to another vessel via ACP
|
|
56
|
+
*/
|
|
57
|
+
export declare function delegateTask(request: ACPDelegateRequest): Promise<ACPDelegateResponse>;
|
|
58
|
+
/**
|
|
59
|
+
* Handle ACP HTTP POST requests (non-streaming)
|
|
60
|
+
*/
|
|
61
|
+
export declare function handleACPRequest(config: ACPServerConfig, request: Request): Promise<Response>;
|
|
62
|
+
//# sourceMappingURL=acp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acp.d.ts","sourceRoot":"","sources":["../src/acp.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,kBAAkB,EAClB,mBAAmB,EAGpB,MAAM,SAAS,CAAA;AAQhB,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,WAAW,GAAG,QAAQ,CAAA;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,gBAAgB,EAAE,MAAM,CAAA;IACxB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,GAAG,CAAW;IACtB,OAAO,CAAC,YAAY,CAAuC;IAC3D,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,SAAS,CAAe;gBAEpB,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM;IAOtD;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAqG/D;;OAEG;IACH,YAAY,IAAI,MAAM,EAAE;IAIxB,OAAO,CAAC,sBAAsB;CAK/B;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,eAAe;qBAI5C,OAAO,GAAG,QAAQ,GAAG,SAAS;;oBAc3B,SAAS,GAAG;YAAE,IAAI,EAAE;gBAAE,SAAS,CAAC,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,WAAW,MAAM,GAAG,MAAM;kBA8B9E,SAAS,GAAG;YAAE,IAAI,EAAE;gBAAE,SAAS,CAAC,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE;;EAO3D;AAMD;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA8D5F;AA6BD;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,QAAQ,CAAC,CAgCnB"}
|
package/dist/acp.js
ADDED
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* minibob ACP Protocol Handler
|
|
3
|
+
*
|
|
4
|
+
* Agent Client Protocol support for vessel-to-vessel communication.
|
|
5
|
+
* Supports both receiving delegated tasks and delegating to other vessels.
|
|
6
|
+
*/
|
|
7
|
+
import { createLLMClient } from "./llm";
|
|
8
|
+
import { createToolHandlers, getAllToolDefinitions } from "./tools";
|
|
9
|
+
/**
|
|
10
|
+
* ACP session handler for streaming connections
|
|
11
|
+
*/
|
|
12
|
+
export class ACPSession {
|
|
13
|
+
llm;
|
|
14
|
+
toolHandlers;
|
|
15
|
+
config;
|
|
16
|
+
sessionId;
|
|
17
|
+
messages = [];
|
|
18
|
+
toolsUsed = [];
|
|
19
|
+
constructor(config, sessionId) {
|
|
20
|
+
this.config = config;
|
|
21
|
+
this.sessionId = sessionId;
|
|
22
|
+
this.llm = createLLMClient(config.provider, config.apiKey);
|
|
23
|
+
this.toolHandlers = createToolHandlers(config.workingDirectory);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Handle an incoming ACP message
|
|
27
|
+
*/
|
|
28
|
+
async handleMessage(message) {
|
|
29
|
+
const responses = [];
|
|
30
|
+
switch (message.type) {
|
|
31
|
+
case "hello":
|
|
32
|
+
// Respond with our capabilities
|
|
33
|
+
responses.push({
|
|
34
|
+
type: "hello",
|
|
35
|
+
version: "1.0",
|
|
36
|
+
capabilities: ["prompt", "tool_call"],
|
|
37
|
+
});
|
|
38
|
+
break;
|
|
39
|
+
case "prompt":
|
|
40
|
+
// Execute the prompt with tools
|
|
41
|
+
try {
|
|
42
|
+
this.messages = message.messages;
|
|
43
|
+
// Add system prompt if not present
|
|
44
|
+
if (!this.messages.find((m) => m.role === "system")) {
|
|
45
|
+
this.messages.unshift({
|
|
46
|
+
role: "system",
|
|
47
|
+
content: this.config.systemPrompt ?? this.getDefaultSystemPrompt(),
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
const result = await this.llm.completeWithTools({
|
|
51
|
+
model: this.config.model,
|
|
52
|
+
messages: this.messages,
|
|
53
|
+
tools: message.tools ?? getAllToolDefinitions(),
|
|
54
|
+
maxTokens: 4096,
|
|
55
|
+
}, this.toolHandlers);
|
|
56
|
+
this.toolsUsed = result.toolsUsed;
|
|
57
|
+
responses.push({
|
|
58
|
+
type: "response",
|
|
59
|
+
sessionId: this.sessionId,
|
|
60
|
+
content: result.content,
|
|
61
|
+
finishReason: "stop",
|
|
62
|
+
});
|
|
63
|
+
responses.push({
|
|
64
|
+
type: "complete",
|
|
65
|
+
sessionId: this.sessionId,
|
|
66
|
+
metrics: {
|
|
67
|
+
duration: 0, // Would need timing
|
|
68
|
+
tokens: { input: result.usage.inputTokens, output: result.usage.outputTokens },
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
responses.push({
|
|
74
|
+
type: "error",
|
|
75
|
+
sessionId: this.sessionId,
|
|
76
|
+
error: error instanceof Error ? error.message : String(error),
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
break;
|
|
80
|
+
case "tool_call":
|
|
81
|
+
// Execute a tool call
|
|
82
|
+
try {
|
|
83
|
+
const handler = this.toolHandlers[message.name];
|
|
84
|
+
let result;
|
|
85
|
+
if (!handler) {
|
|
86
|
+
result = {
|
|
87
|
+
success: false,
|
|
88
|
+
error: `Unknown tool: ${message.name}`,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
result = await handler(message.arguments);
|
|
93
|
+
this.toolsUsed.push(message.name);
|
|
94
|
+
}
|
|
95
|
+
responses.push({
|
|
96
|
+
type: "tool_result",
|
|
97
|
+
sessionId: this.sessionId,
|
|
98
|
+
toolCallId: message.toolCallId,
|
|
99
|
+
result,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
responses.push({
|
|
104
|
+
type: "tool_result",
|
|
105
|
+
sessionId: this.sessionId,
|
|
106
|
+
toolCallId: message.toolCallId,
|
|
107
|
+
result: {
|
|
108
|
+
success: false,
|
|
109
|
+
error: error instanceof Error ? error.message : String(error),
|
|
110
|
+
},
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
break;
|
|
114
|
+
}
|
|
115
|
+
return responses;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Get tools used in this session
|
|
119
|
+
*/
|
|
120
|
+
getToolsUsed() {
|
|
121
|
+
return [...new Set(this.toolsUsed)];
|
|
122
|
+
}
|
|
123
|
+
getDefaultSystemPrompt() {
|
|
124
|
+
return `You are minibob, a minimal vessel for executing delegated tasks.
|
|
125
|
+
You have access to tools for file operations, shell commands, and git.
|
|
126
|
+
Execute the requested task efficiently and report the results.`;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Handle WebSocket upgrade for ACP streaming
|
|
131
|
+
*/
|
|
132
|
+
export function createACPWebSocketHandler(config) {
|
|
133
|
+
const sessions = new Map();
|
|
134
|
+
return {
|
|
135
|
+
upgrade(request) {
|
|
136
|
+
const url = new URL(request.url);
|
|
137
|
+
if (url.pathname !== "/acp/stream") {
|
|
138
|
+
return undefined;
|
|
139
|
+
}
|
|
140
|
+
const sessionId = `acp_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
|
|
141
|
+
const session = new ACPSession(config, sessionId);
|
|
142
|
+
sessions.set(sessionId, session);
|
|
143
|
+
return undefined; // Let Bun handle the upgrade
|
|
144
|
+
},
|
|
145
|
+
websocket: {
|
|
146
|
+
async message(ws, message) {
|
|
147
|
+
try {
|
|
148
|
+
const data = JSON.parse(typeof message === "string" ? message : message.toString());
|
|
149
|
+
// Get or create session
|
|
150
|
+
let sessionId = ws.data?.sessionId;
|
|
151
|
+
if (!sessionId) {
|
|
152
|
+
sessionId = `acp_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
|
|
153
|
+
ws.data = { sessionId };
|
|
154
|
+
sessions.set(sessionId, new ACPSession(config, sessionId));
|
|
155
|
+
}
|
|
156
|
+
const session = sessions.get(sessionId);
|
|
157
|
+
if (!session) {
|
|
158
|
+
ws.send(JSON.stringify({ type: "error", error: "Session not found" }));
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
const responses = await session.handleMessage(data);
|
|
162
|
+
for (const response of responses) {
|
|
163
|
+
ws.send(JSON.stringify(response));
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
ws.send(JSON.stringify({
|
|
168
|
+
type: "error",
|
|
169
|
+
error: error instanceof Error ? error.message : String(error),
|
|
170
|
+
}));
|
|
171
|
+
}
|
|
172
|
+
},
|
|
173
|
+
close(ws) {
|
|
174
|
+
if (ws.data?.sessionId) {
|
|
175
|
+
sessions.delete(ws.data.sessionId);
|
|
176
|
+
}
|
|
177
|
+
},
|
|
178
|
+
},
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
// =============================================================================
|
|
182
|
+
// ACP CLIENT (Delegate to other vessels)
|
|
183
|
+
// =============================================================================
|
|
184
|
+
/**
|
|
185
|
+
* Delegate a task to another vessel via ACP
|
|
186
|
+
*/
|
|
187
|
+
export async function delegateTask(request) {
|
|
188
|
+
const startTime = Date.now();
|
|
189
|
+
const sessionId = `delegate_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
|
|
190
|
+
try {
|
|
191
|
+
// Parse target URL
|
|
192
|
+
const targetUrl = parseTargetUrl(request.target);
|
|
193
|
+
// Connect via HTTP streaming or WebSocket
|
|
194
|
+
const response = await fetch(targetUrl, {
|
|
195
|
+
method: "POST",
|
|
196
|
+
headers: {
|
|
197
|
+
"Content-Type": "application/json",
|
|
198
|
+
},
|
|
199
|
+
body: JSON.stringify({
|
|
200
|
+
type: "prompt",
|
|
201
|
+
sessionId,
|
|
202
|
+
messages: [
|
|
203
|
+
{
|
|
204
|
+
role: "user",
|
|
205
|
+
content: request.prompt,
|
|
206
|
+
},
|
|
207
|
+
],
|
|
208
|
+
}),
|
|
209
|
+
});
|
|
210
|
+
if (!response.ok) {
|
|
211
|
+
throw new Error(`ACP request failed: ${response.status}`);
|
|
212
|
+
}
|
|
213
|
+
const result = (await response.json());
|
|
214
|
+
return {
|
|
215
|
+
success: !result.error,
|
|
216
|
+
sessionId,
|
|
217
|
+
response: result.content,
|
|
218
|
+
toolsUsed: result.toolsUsed,
|
|
219
|
+
error: result.error,
|
|
220
|
+
metrics: {
|
|
221
|
+
duration: Date.now() - startTime,
|
|
222
|
+
tokens: result.metrics?.tokens ?? { input: 0, output: 0 },
|
|
223
|
+
},
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
catch (error) {
|
|
227
|
+
return {
|
|
228
|
+
success: false,
|
|
229
|
+
sessionId,
|
|
230
|
+
error: error instanceof Error ? error.message : String(error),
|
|
231
|
+
metrics: {
|
|
232
|
+
duration: Date.now() - startTime,
|
|
233
|
+
tokens: { input: 0, output: 0 },
|
|
234
|
+
},
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Parse ACP target URL
|
|
240
|
+
*/
|
|
241
|
+
function parseTargetUrl(target) {
|
|
242
|
+
if (target.startsWith("http://") || target.startsWith("https://")) {
|
|
243
|
+
return target;
|
|
244
|
+
}
|
|
245
|
+
if (target.startsWith("docker://")) {
|
|
246
|
+
const container = target.replace("docker://", "");
|
|
247
|
+
// For Docker, we'd need to resolve the container IP
|
|
248
|
+
// For now, assume localhost with a port mapping
|
|
249
|
+
return `http://${container}:8080/acp`;
|
|
250
|
+
}
|
|
251
|
+
if (target.startsWith("tcp://")) {
|
|
252
|
+
const hostPort = target.replace("tcp://", "");
|
|
253
|
+
return `http://${hostPort}/acp`;
|
|
254
|
+
}
|
|
255
|
+
throw new Error(`Unsupported ACP target: ${target}`);
|
|
256
|
+
}
|
|
257
|
+
// =============================================================================
|
|
258
|
+
// HTTP ENDPOINT HANDLER
|
|
259
|
+
// =============================================================================
|
|
260
|
+
/**
|
|
261
|
+
* Handle ACP HTTP POST requests (non-streaming)
|
|
262
|
+
*/
|
|
263
|
+
export async function handleACPRequest(config, request) {
|
|
264
|
+
const sessionId = `http_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
|
|
265
|
+
const session = new ACPSession(config, sessionId);
|
|
266
|
+
try {
|
|
267
|
+
const message = (await request.json());
|
|
268
|
+
const responses = await session.handleMessage(message);
|
|
269
|
+
// For HTTP, we return the last meaningful response
|
|
270
|
+
const lastResponse = responses.find((r) => r.type === "response" || r.type === "error");
|
|
271
|
+
return new Response(JSON.stringify({
|
|
272
|
+
success: lastResponse?.type === "response",
|
|
273
|
+
content: lastResponse?.type === "response" ? lastResponse.content : undefined,
|
|
274
|
+
error: lastResponse?.type === "error" ? lastResponse.error : undefined,
|
|
275
|
+
toolsUsed: session.getToolsUsed(),
|
|
276
|
+
sessionId,
|
|
277
|
+
}), {
|
|
278
|
+
headers: { "Content-Type": "application/json" },
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
catch (error) {
|
|
282
|
+
return new Response(JSON.stringify({
|
|
283
|
+
success: false,
|
|
284
|
+
error: error instanceof Error ? error.message : String(error),
|
|
285
|
+
sessionId,
|
|
286
|
+
}), {
|
|
287
|
+
status: 500,
|
|
288
|
+
headers: { "Content-Type": "application/json" },
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
//# sourceMappingURL=acp.js.map
|
package/dist/acp.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acp.js","sourceRoot":"","sources":["../src/acp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* minibob Activity Executor
|
|
3
|
+
*
|
|
4
|
+
* Executes activity templates with impulse injection and tool calling.
|
|
5
|
+
*/
|
|
6
|
+
import type { ActivityTemplate, ActivityExecution, TaskResult, Impulse, ToolResult } from "./types";
|
|
7
|
+
import { type LLMClient } from "./llm";
|
|
8
|
+
import { type ToolHandlerOptions } from "./tools";
|
|
9
|
+
export interface ExecutorConfig {
|
|
10
|
+
provider: "anthropic" | "openai";
|
|
11
|
+
apiKey: string;
|
|
12
|
+
model: string;
|
|
13
|
+
workingDirectory: string;
|
|
14
|
+
systemPrompt?: string;
|
|
15
|
+
onSearchActivities?: (category?: string, verbose?: boolean) => Promise<{
|
|
16
|
+
count: number;
|
|
17
|
+
activities: unknown[];
|
|
18
|
+
}>;
|
|
19
|
+
onCreateActivity?: (params: {
|
|
20
|
+
goalDescription: string;
|
|
21
|
+
templateName: string;
|
|
22
|
+
category: string;
|
|
23
|
+
variables: Record<string, unknown>;
|
|
24
|
+
}) => Promise<{
|
|
25
|
+
templateId: string;
|
|
26
|
+
}>;
|
|
27
|
+
/**
|
|
28
|
+
* Callback when an activity is executed (for composition tracking)
|
|
29
|
+
*/
|
|
30
|
+
onActivityExecute?: (templateId: string, variables: Record<string, unknown>, reason?: string) => Promise<ActivityExecution>;
|
|
31
|
+
/**
|
|
32
|
+
* Custom domain-specific tools to expose to the LLM in addition to built-in tools.
|
|
33
|
+
* The host application (e.g. PerspectiveMinibobAdapter) injects these so that
|
|
34
|
+
* activity templates can call Perspective-specific database / API operations.
|
|
35
|
+
*/
|
|
36
|
+
customTools?: ToolHandlerOptions["customTools"];
|
|
37
|
+
/**
|
|
38
|
+
* Maximum nesting depth for nested activity execution.
|
|
39
|
+
* Prevents runaway recursion when activities call other activities.
|
|
40
|
+
* Default: 3
|
|
41
|
+
*/
|
|
42
|
+
maxNestingDepth?: number;
|
|
43
|
+
/**
|
|
44
|
+
* Activity call stack for cycle detection.
|
|
45
|
+
* Tracks the chain of activity IDs from root to current execution.
|
|
46
|
+
* Used to detect and prevent circular activity calls (A → B → A).
|
|
47
|
+
*
|
|
48
|
+
* Example: ["process-goal", "explore-codebase", "read-file"]
|
|
49
|
+
*
|
|
50
|
+
* Internal use only - populated automatically during composition.
|
|
51
|
+
*/
|
|
52
|
+
activityCallStack?: string[];
|
|
53
|
+
}
|
|
54
|
+
export interface ExecuteOptions {
|
|
55
|
+
template: ActivityTemplate;
|
|
56
|
+
variables: Record<string, unknown>;
|
|
57
|
+
reason?: string;
|
|
58
|
+
impulses?: Impulse[];
|
|
59
|
+
onTaskStart?: (taskId: string) => void;
|
|
60
|
+
onTaskComplete?: (taskId: string, result: TaskResult) => void;
|
|
61
|
+
parentActivityId?: string;
|
|
62
|
+
parentExecutionId?: string;
|
|
63
|
+
goalContext?: string;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Activity executor for running activity templates
|
|
67
|
+
*/
|
|
68
|
+
export declare class ActivityExecutor {
|
|
69
|
+
private llm;
|
|
70
|
+
private toolHandlers;
|
|
71
|
+
private config;
|
|
72
|
+
private customToolDefinitions;
|
|
73
|
+
private currentActivityId?;
|
|
74
|
+
private currentExecutionId?;
|
|
75
|
+
private currentGoalContext?;
|
|
76
|
+
private toolCallRecords;
|
|
77
|
+
/** Public accessor for LLM client (needed by GoalProcessor for improvisation fallback) */
|
|
78
|
+
get llmClient(): LLMClient;
|
|
79
|
+
constructor(config: ExecutorConfig);
|
|
80
|
+
/**
|
|
81
|
+
* Execute an activity template
|
|
82
|
+
*/
|
|
83
|
+
execute(options: ExecuteOptions): Promise<ActivityExecution>;
|
|
84
|
+
/**
|
|
85
|
+
* Get current executor state for TUI display
|
|
86
|
+
* Returns real-time information about what MiniBob is doing
|
|
87
|
+
*/
|
|
88
|
+
getState(): {
|
|
89
|
+
currentActivityId: string | undefined;
|
|
90
|
+
currentExecutionId: string | undefined;
|
|
91
|
+
currentGoalContext: string | undefined;
|
|
92
|
+
toolCallRecords: Array<{
|
|
93
|
+
toolName: string;
|
|
94
|
+
params: any;
|
|
95
|
+
result: ToolResult;
|
|
96
|
+
timestamp: number;
|
|
97
|
+
}>;
|
|
98
|
+
workingDirectory: string;
|
|
99
|
+
};
|
|
100
|
+
/**
|
|
101
|
+
* Create impulses from template context requirements
|
|
102
|
+
*/
|
|
103
|
+
private createImpulsesFromRequirements;
|
|
104
|
+
/**
|
|
105
|
+
* Execute a single task
|
|
106
|
+
*/
|
|
107
|
+
private executeTask;
|
|
108
|
+
/**
|
|
109
|
+
* Phase 1.8: Record impulse relevance metrics to backend
|
|
110
|
+
*/
|
|
111
|
+
private recordImpulseRelevance;
|
|
112
|
+
/**
|
|
113
|
+
* Run validation checks
|
|
114
|
+
*/
|
|
115
|
+
private runValidation;
|
|
116
|
+
/**
|
|
117
|
+
* Topological sort for task dependencies
|
|
118
|
+
*/
|
|
119
|
+
private topologicalSort;
|
|
120
|
+
/**
|
|
121
|
+
* Interpolate variables into template string
|
|
122
|
+
*/
|
|
123
|
+
private interpolate;
|
|
124
|
+
/**
|
|
125
|
+
* Estimate cost based on token usage
|
|
126
|
+
*/
|
|
127
|
+
private estimateCost;
|
|
128
|
+
/**
|
|
129
|
+
* Get default system prompt
|
|
130
|
+
*
|
|
131
|
+
* ARCHITECTURE: Enforces activity-first constraint per corrected trailblazing architecture.
|
|
132
|
+
* MiniBob must search for existing activities and create new ones for non-trivial tasks.
|
|
133
|
+
*/
|
|
134
|
+
private getDefaultSystemPrompt;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Load an activity template from a JSON file
|
|
138
|
+
*/
|
|
139
|
+
export declare function loadTemplate(path: string): Promise<ActivityTemplate>;
|
|
140
|
+
/**
|
|
141
|
+
* Load activity template from MCP backend or local file
|
|
142
|
+
*
|
|
143
|
+
* If templateIdOrPath looks like a file path (contains / or .json), load from file.
|
|
144
|
+
* Otherwise, try to load from MCP backend first, then fall back to local templates/ directory.
|
|
145
|
+
*/
|
|
146
|
+
export declare function loadTemplateFromMCPOrLocal(templateIdOrPath: string): Promise<ActivityTemplate>;
|
|
147
|
+
/**
|
|
148
|
+
* Create executor and run activity
|
|
149
|
+
*/
|
|
150
|
+
export declare function runActivity(config: ExecutorConfig, templatePath: string, variables: Record<string, unknown>, reason?: string): Promise<ActivityExecution>;
|
|
151
|
+
/**
|
|
152
|
+
* Format execution duration in human-readable format
|
|
153
|
+
* @param ms - Duration in milliseconds
|
|
154
|
+
* @returns Formatted string (e.g., "1.2s" or "345ms")
|
|
155
|
+
*/
|
|
156
|
+
export declare function formatDuration(ms: number): string;
|
|
157
|
+
//# sourceMappingURL=activity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../src/activity.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EAEjB,UAAU,EACV,OAAO,EAEP,UAAU,EAGX,MAAM,SAAS,CAAA;AAChB,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AACvD,OAAO,EAA6C,KAAK,kBAAkB,EAAuB,MAAM,SAAS,CAAA;AA8EjH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,WAAW,GAAG,QAAQ,CAAA;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,gBAAgB,EAAE,MAAM,CAAA;IACxB,YAAY,CAAC,EAAE,MAAM,CAAA;IAErB,kBAAkB,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC,CAAA;IAChH,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE;QAC1B,eAAe,EAAE,MAAM,CAAA;QACvB,YAAY,EAAE,MAAM,CAAA;QACpB,QAAQ,EAAE,MAAM,CAAA;QAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KACnC,KAAK,OAAO,CAAC;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACrC;;OAEG;IACH,iBAAiB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAA;IAC3H;;;;OAIG;IACH,WAAW,CAAC,EAAE,kBAAkB,CAAC,aAAa,CAAC,CAAA;IAC/C;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;;;;;;;OAQG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,gBAAgB,CAAA;IAC1B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAA;IACpB,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACtC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,KAAK,IAAI,CAAA;IAE7D,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAiJD;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,GAAG,CAAW;IACtB,OAAO,CAAC,YAAY,CAAuC;IAC3D,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,qBAAqB,CAAkB;IAC/C,OAAO,CAAC,iBAAiB,CAAC,CAAQ;IAClC,OAAO,CAAC,kBAAkB,CAAC,CAAQ;IACnC,OAAO,CAAC,kBAAkB,CAAC,CAAQ;IACnC,OAAO,CAAC,eAAe,CAAsF;IAE7G,0FAA0F;IAC1F,IAAI,SAAS,IAAI,SAAS,CAEzB;gBAEW,MAAM,EAAE,cAAc;IAkHlC;;OAEG;IACG,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAoUlE;;;OAGG;IACH,QAAQ,IAAI;QACV,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAA;QACrC,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAA;QACtC,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAA;QACtC,eAAe,EAAE,KAAK,CAAC;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,GAAG,CAAC;YAAC,MAAM,EAAE,UAAU,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;QAChG,gBAAgB,EAAE,MAAM,CAAA;KACzB;IAUD;;OAEG;YACW,8BAA8B;IAmF5C;;OAEG;YACW,WAAW;IAsTzB;;OAEG;YACW,sBAAsB;IA8BpC;;OAEG;YACW,aAAa;IA4E3B;;OAEG;IACH,OAAO,CAAC,eAAe;IA0BvB;;OAEG;IACH,OAAO,CAAC,WAAW;IASnB;;OAEG;IACH,OAAO,CAAC,YAAY;IAWpB;;;;;OAKG;IACH,OAAO,CAAC,sBAAsB;CAiD/B;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAO1E;AAED;;;;;GAKG;AACH,wBAAsB,0BAA0B,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAuBpG;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,cAAc,EACtB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,iBAAiB,CAAC,CAI5B;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAKjD"}
|