@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
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* minibob Boredom Task System
|
|
3
|
+
*
|
|
4
|
+
* Enables autonomous operation by polling backend for tasks when idle.
|
|
5
|
+
* Transforms minibob from request-response to continuous autonomous agent.
|
|
6
|
+
*
|
|
7
|
+
* Two execution modes:
|
|
8
|
+
* 1. Template-based: Load and execute a specific template
|
|
9
|
+
* 2. Goal-based: Use SearchFirstExecutor for dynamic decomposition and reuse
|
|
10
|
+
*/
|
|
11
|
+
import type { ActivityTemplate } from "./types";
|
|
12
|
+
export interface BoredomTask {
|
|
13
|
+
id: string;
|
|
14
|
+
templateId?: string;
|
|
15
|
+
goal?: string;
|
|
16
|
+
priority: "critical" | "high" | "medium" | "low";
|
|
17
|
+
variables: Record<string, unknown>;
|
|
18
|
+
reason?: string;
|
|
19
|
+
createdAt: number;
|
|
20
|
+
assignedTo?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface BoredomTaskResult {
|
|
23
|
+
taskId: string;
|
|
24
|
+
success: boolean;
|
|
25
|
+
executionId?: string;
|
|
26
|
+
duration?: number;
|
|
27
|
+
error?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface BoredomExecutorConfig {
|
|
30
|
+
pollInterval?: number;
|
|
31
|
+
idleThreshold?: number;
|
|
32
|
+
onExecuteTask: (template: ActivityTemplate, variables: Record<string, unknown>, reason?: string) => Promise<unknown>;
|
|
33
|
+
llmConfig: {
|
|
34
|
+
provider: "anthropic" | "openai";
|
|
35
|
+
apiKey: string;
|
|
36
|
+
model: string;
|
|
37
|
+
workingDirectory: string;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export declare class BoredomTaskExecutor {
|
|
41
|
+
private isRunning;
|
|
42
|
+
private pollInterval;
|
|
43
|
+
private idleThreshold;
|
|
44
|
+
private lastActivityTime;
|
|
45
|
+
private onExecuteTask;
|
|
46
|
+
private searchFirstExecutor;
|
|
47
|
+
constructor(config: BoredomExecutorConfig);
|
|
48
|
+
/**
|
|
49
|
+
* Start the boredom task executor loop
|
|
50
|
+
*
|
|
51
|
+
* Only starts if:
|
|
52
|
+
* 1. MCP is enabled (backend connection available)
|
|
53
|
+
* 2. Cluster mode is enabled (3+ pods)
|
|
54
|
+
*
|
|
55
|
+
* Boredom system is disabled in local/Docker/single-pod environments to avoid resource waste.
|
|
56
|
+
*/
|
|
57
|
+
start(clusterMode?: boolean): void;
|
|
58
|
+
/**
|
|
59
|
+
* Stop the boredom task executor
|
|
60
|
+
*/
|
|
61
|
+
stop(): void;
|
|
62
|
+
/**
|
|
63
|
+
* Mark activity (resets idle timer)
|
|
64
|
+
*/
|
|
65
|
+
markActivity(): void;
|
|
66
|
+
/**
|
|
67
|
+
* Check if vessel is idle
|
|
68
|
+
*/
|
|
69
|
+
isIdle(): boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Main executor loop
|
|
72
|
+
*/
|
|
73
|
+
private loop;
|
|
74
|
+
/**
|
|
75
|
+
* Fetch available boredom tasks from backend
|
|
76
|
+
*/
|
|
77
|
+
private fetchTasks;
|
|
78
|
+
/**
|
|
79
|
+
* Convert template-based tasks to goal-based tasks when appropriate
|
|
80
|
+
*
|
|
81
|
+
* This enables backwards compatibility: the backend can still emit
|
|
82
|
+
* template-based tasks, but we convert debug/optimization tasks to
|
|
83
|
+
* use the SearchFirstExecutor for better reuse and decomposition.
|
|
84
|
+
*/
|
|
85
|
+
private convertToGoalTaskIfApplicable;
|
|
86
|
+
/**
|
|
87
|
+
* Execute a boredom task
|
|
88
|
+
*
|
|
89
|
+
* Two execution modes:
|
|
90
|
+
* 1. Goal-based: Use SearchFirstExecutor for dynamic step decomposition
|
|
91
|
+
* 2. Template-based: Load and execute a specific template (legacy)
|
|
92
|
+
*/
|
|
93
|
+
private executeTask;
|
|
94
|
+
/**
|
|
95
|
+
* Report task execution result to backend
|
|
96
|
+
*/
|
|
97
|
+
private reportResult;
|
|
98
|
+
/**
|
|
99
|
+
* Sleep helper
|
|
100
|
+
*/
|
|
101
|
+
private sleep;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Initialize boredom task executor
|
|
105
|
+
*/
|
|
106
|
+
export declare function initializeBoredom(config: BoredomExecutorConfig): BoredomTaskExecutor;
|
|
107
|
+
/**
|
|
108
|
+
* Get boredom executor instance
|
|
109
|
+
*/
|
|
110
|
+
export declare function getBoredomExecutor(): BoredomTaskExecutor | null;
|
|
111
|
+
/**
|
|
112
|
+
* Start boredom task execution
|
|
113
|
+
*
|
|
114
|
+
* @param clusterMode Whether cluster mode is enabled (required for boredom to start)
|
|
115
|
+
*/
|
|
116
|
+
export declare function startBoredom(clusterMode?: boolean): void;
|
|
117
|
+
/**
|
|
118
|
+
* Stop boredom task execution
|
|
119
|
+
*/
|
|
120
|
+
export declare function stopBoredom(): void;
|
|
121
|
+
/**
|
|
122
|
+
* Mark activity (called when handling user requests)
|
|
123
|
+
*/
|
|
124
|
+
export declare function markBoredomActivity(): void;
|
|
125
|
+
//# sourceMappingURL=boredom.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"boredom.d.ts","sourceRoot":"","sources":["../src/boredom.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAM/C,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAA;IAChD,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAMD,MAAM,WAAW,qBAAqB;IACpC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,MAAM,CAAA;IAEtB,aAAa,EAAE,CAAC,QAAQ,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAEpH,SAAS,EAAE;QACT,QAAQ,EAAE,WAAW,GAAG,QAAQ,CAAA;QAChC,MAAM,EAAE,MAAM,CAAA;QACd,KAAK,EAAE,MAAM,CAAA;QACb,gBAAgB,EAAE,MAAM,CAAA;KACzB,CAAA;CACF;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,gBAAgB,CAAQ;IAChC,OAAO,CAAC,aAAa,CAAuG;IAC5H,OAAO,CAAC,mBAAmB,CAAqB;gBAEpC,MAAM,EAAE,qBAAqB;IAiBzC;;;;;;;;OAQG;IACH,KAAK,CAAC,WAAW,UAAQ,GAAG,IAAI;IAyBhC;;OAEG;IACH,IAAI,IAAI,IAAI;IAKZ;;OAEG;IACH,YAAY,IAAI,IAAI;IAIpB;;OAEG;IACH,MAAM,IAAI,OAAO;IAKjB;;OAEG;YACW,IAAI;IA+BlB;;OAEG;YACW,UAAU;IAqCxB;;;;;;OAMG;IACH,OAAO,CAAC,6BAA6B;IAuCrC;;;;;;OAMG;YACW,WAAW;IAuEzB;;OAEG;YACW,YAAY;IAqB1B;;OAEG;IACH,OAAO,CAAC,KAAK;CAGd;AAQD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,qBAAqB,GAAG,mBAAmB,CAQpF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,mBAAmB,GAAG,IAAI,CAE/D;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,WAAW,UAAQ,GAAG,IAAI,CAItD;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAIlC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAI1C"}
|
package/dist/boredom.js
ADDED
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* minibob Boredom Task System
|
|
3
|
+
*
|
|
4
|
+
* Enables autonomous operation by polling backend for tasks when idle.
|
|
5
|
+
* Transforms minibob from request-response to continuous autonomous agent.
|
|
6
|
+
*/
|
|
7
|
+
import { getMCPClient, isMCPEnabled } from "./mcp";
|
|
8
|
+
import { loadTemplateFromMCPOrLocal } from "./activity";
|
|
9
|
+
// =============================================================================
|
|
10
|
+
// BOREDOM TASK EXECUTOR
|
|
11
|
+
// =============================================================================
|
|
12
|
+
export class BoredomTaskExecutor {
|
|
13
|
+
isRunning = false;
|
|
14
|
+
pollInterval;
|
|
15
|
+
idleThreshold;
|
|
16
|
+
lastActivityTime;
|
|
17
|
+
onExecuteTask;
|
|
18
|
+
constructor(config) {
|
|
19
|
+
this.pollInterval = config.pollInterval ?? 30000; // 30 seconds
|
|
20
|
+
this.idleThreshold = config.idleThreshold ?? 60000; // 60 seconds idle before fetching tasks
|
|
21
|
+
this.lastActivityTime = Date.now();
|
|
22
|
+
this.onExecuteTask = config.onExecuteTask;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Start the boredom task executor loop
|
|
26
|
+
*
|
|
27
|
+
* Only starts if:
|
|
28
|
+
* 1. MCP is enabled (backend connection available)
|
|
29
|
+
* 2. Cluster mode is enabled (3+ pods)
|
|
30
|
+
*
|
|
31
|
+
* Boredom system is disabled in local/Docker/single-pod environments to avoid resource waste.
|
|
32
|
+
*/
|
|
33
|
+
start(clusterMode = false) {
|
|
34
|
+
if (this.isRunning) {
|
|
35
|
+
console.log("[Boredom] Already running");
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
if (!isMCPEnabled()) {
|
|
39
|
+
console.log("[Boredom] MCP not enabled, boredom tasks disabled");
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (!clusterMode) {
|
|
43
|
+
console.log("[Boredom] Not in cluster mode, boredom tasks disabled");
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
this.isRunning = true;
|
|
47
|
+
console.log(`[Boredom] Starting task executor (poll interval: ${this.pollInterval}ms, idle threshold: ${this.idleThreshold}ms)`);
|
|
48
|
+
this.loop().catch((error) => {
|
|
49
|
+
console.error("[Boredom] Fatal error in loop:", error);
|
|
50
|
+
this.isRunning = false;
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Stop the boredom task executor
|
|
55
|
+
*/
|
|
56
|
+
stop() {
|
|
57
|
+
this.isRunning = false;
|
|
58
|
+
console.log("[Boredom] Stopping task executor");
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Mark activity (resets idle timer)
|
|
62
|
+
*/
|
|
63
|
+
markActivity() {
|
|
64
|
+
this.lastActivityTime = Date.now();
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Check if vessel is idle
|
|
68
|
+
*/
|
|
69
|
+
isIdle() {
|
|
70
|
+
const idleTime = Date.now() - this.lastActivityTime;
|
|
71
|
+
return idleTime >= this.idleThreshold;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Main executor loop
|
|
75
|
+
*/
|
|
76
|
+
async loop() {
|
|
77
|
+
while (this.isRunning) {
|
|
78
|
+
try {
|
|
79
|
+
// Wait for poll interval
|
|
80
|
+
await this.sleep(this.pollInterval);
|
|
81
|
+
// Skip if not idle
|
|
82
|
+
if (!this.isIdle()) {
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
// Fetch tasks from backend
|
|
86
|
+
const tasks = await this.fetchTasks();
|
|
87
|
+
if (tasks.length === 0) {
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
console.log(`[Boredom] Found ${tasks.length} available task(s)`);
|
|
91
|
+
// Execute highest priority task
|
|
92
|
+
const task = tasks[0];
|
|
93
|
+
if (!task)
|
|
94
|
+
continue;
|
|
95
|
+
await this.executeTask(task);
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
console.error("[Boredom] Error in loop:", error);
|
|
99
|
+
// Continue running despite errors
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Fetch available boredom tasks from backend
|
|
105
|
+
*/
|
|
106
|
+
async fetchTasks() {
|
|
107
|
+
const mcp = getMCPClient();
|
|
108
|
+
if (!mcp)
|
|
109
|
+
return [];
|
|
110
|
+
try {
|
|
111
|
+
const response = await fetch(`${mcp.endpoint}/boredom-tasks`, {
|
|
112
|
+
method: "GET",
|
|
113
|
+
headers: {
|
|
114
|
+
"Content-Type": "application/json",
|
|
115
|
+
},
|
|
116
|
+
});
|
|
117
|
+
if (!response.ok) {
|
|
118
|
+
if (response.status === 404) {
|
|
119
|
+
// Endpoint not implemented yet
|
|
120
|
+
return [];
|
|
121
|
+
}
|
|
122
|
+
throw new Error(`Failed to fetch tasks: ${response.status}`);
|
|
123
|
+
}
|
|
124
|
+
const data = await response.json();
|
|
125
|
+
const tasks = data.tasks ?? [];
|
|
126
|
+
// Sort by priority
|
|
127
|
+
return tasks.sort((a, b) => {
|
|
128
|
+
const priorityOrder = { critical: 0, high: 1, medium: 2, low: 3 };
|
|
129
|
+
return priorityOrder[a.priority] - priorityOrder[b.priority];
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
console.error("[Boredom] Error fetching tasks:", error);
|
|
134
|
+
return [];
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Execute a boredom task
|
|
139
|
+
*/
|
|
140
|
+
async executeTask(task) {
|
|
141
|
+
console.log(`[Boredom] Executing task: ${task.id} (template: ${task.templateId})`);
|
|
142
|
+
const result = {
|
|
143
|
+
taskId: task.id,
|
|
144
|
+
success: false,
|
|
145
|
+
};
|
|
146
|
+
try {
|
|
147
|
+
// Load template
|
|
148
|
+
const template = await loadTemplateFromMCPOrLocal(task.templateId);
|
|
149
|
+
// Execute activity
|
|
150
|
+
const startTime = Date.now();
|
|
151
|
+
const execution = await this.onExecuteTask(template, task.variables, task.reason ?? `Boredom task: ${task.id}`);
|
|
152
|
+
result.success = true;
|
|
153
|
+
result.executionId = execution.id;
|
|
154
|
+
result.duration = Date.now() - startTime;
|
|
155
|
+
console.log(`[Boredom] ✓ Task completed: ${task.id} in ${result.duration}ms`);
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
result.success = false;
|
|
159
|
+
result.error = error instanceof Error ? error.message : String(error);
|
|
160
|
+
console.error(`[Boredom] ✗ Task failed: ${task.id}`, error);
|
|
161
|
+
}
|
|
162
|
+
// Report result to backend
|
|
163
|
+
await this.reportResult(result);
|
|
164
|
+
// Mark activity to reset idle timer
|
|
165
|
+
this.markActivity();
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Report task execution result to backend
|
|
169
|
+
*/
|
|
170
|
+
async reportResult(result) {
|
|
171
|
+
const mcp = getMCPClient();
|
|
172
|
+
if (!mcp)
|
|
173
|
+
return;
|
|
174
|
+
try {
|
|
175
|
+
const response = await fetch(`${mcp.endpoint}/boredom-tasks/${result.taskId}/result`, {
|
|
176
|
+
method: "POST",
|
|
177
|
+
headers: {
|
|
178
|
+
"Content-Type": "application/json",
|
|
179
|
+
},
|
|
180
|
+
body: JSON.stringify(result),
|
|
181
|
+
});
|
|
182
|
+
if (!response.ok) {
|
|
183
|
+
console.warn(`[Boredom] Failed to report result: ${response.status}`);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
console.error("[Boredom] Error reporting result:", error);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Sleep helper
|
|
192
|
+
*/
|
|
193
|
+
sleep(ms) {
|
|
194
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
// =============================================================================
|
|
198
|
+
// SINGLETON BOREDOM EXECUTOR
|
|
199
|
+
// =============================================================================
|
|
200
|
+
let boredomExecutor = null;
|
|
201
|
+
/**
|
|
202
|
+
* Initialize boredom task executor
|
|
203
|
+
*/
|
|
204
|
+
export function initializeBoredom(config) {
|
|
205
|
+
if (boredomExecutor) {
|
|
206
|
+
console.warn("[Boredom] Already initialized");
|
|
207
|
+
return boredomExecutor;
|
|
208
|
+
}
|
|
209
|
+
boredomExecutor = new BoredomTaskExecutor(config);
|
|
210
|
+
return boredomExecutor;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Get boredom executor instance
|
|
214
|
+
*/
|
|
215
|
+
export function getBoredomExecutor() {
|
|
216
|
+
return boredomExecutor;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Start boredom task execution
|
|
220
|
+
*
|
|
221
|
+
* @param clusterMode Whether cluster mode is enabled (required for boredom to start)
|
|
222
|
+
*/
|
|
223
|
+
export function startBoredom(clusterMode = false) {
|
|
224
|
+
if (boredomExecutor) {
|
|
225
|
+
boredomExecutor.start(clusterMode);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Stop boredom task execution
|
|
230
|
+
*/
|
|
231
|
+
export function stopBoredom() {
|
|
232
|
+
if (boredomExecutor) {
|
|
233
|
+
boredomExecutor.stop();
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Mark activity (called when handling user requests)
|
|
238
|
+
*/
|
|
239
|
+
export function markBoredomActivity() {
|
|
240
|
+
if (boredomExecutor) {
|
|
241
|
+
boredomExecutor.markActivity();
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
//# sourceMappingURL=boredom.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"boredom.js","sourceRoot":"","sources":["../src/boredom.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ACP Server Command
|
|
3
|
+
*
|
|
4
|
+
* Launch standalone ACP server for external agent integration.
|
|
5
|
+
*
|
|
6
|
+
* Modes:
|
|
7
|
+
* - stdio: JSON-RPC over stdin/stdout (for editor extensions, CLI piping)
|
|
8
|
+
* - http: HTTP server on specified port (default)
|
|
9
|
+
* - websocket: WebSocket server for streaming
|
|
10
|
+
*/
|
|
11
|
+
export interface ACPServerOptions {
|
|
12
|
+
mode?: 'stdio' | 'http' | 'websocket';
|
|
13
|
+
port?: number;
|
|
14
|
+
noTools?: boolean;
|
|
15
|
+
tools?: string[];
|
|
16
|
+
denyTools?: string[];
|
|
17
|
+
system?: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Run ACP server command
|
|
21
|
+
*/
|
|
22
|
+
export declare function launchACPServer(args: string[]): Promise<void>;
|
|
23
|
+
//# sourceMappingURL=acp-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acp-server.d.ts","sourceRoot":"","sources":["../../src/cli/acp-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,WAAW,CAAA;IACrC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA8DnE"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Burrow Command
|
|
3
|
+
*
|
|
4
|
+
* Inject minibob into an existing codebase, making it a vessel.
|
|
5
|
+
*
|
|
6
|
+
* Steps:
|
|
7
|
+
* 1. Analyze codebase structure (frameworks, entry points)
|
|
8
|
+
* 2. Add @metabob/minibob as dependency
|
|
9
|
+
* 3. Create minibob.json config file
|
|
10
|
+
* 4. Create .minibob/ directory for local state
|
|
11
|
+
* 5. Optionally inject vessel bootstrap into entry point
|
|
12
|
+
* 6. Generate initial activities based on detected patterns
|
|
13
|
+
*/
|
|
14
|
+
export interface BurrowOptions {
|
|
15
|
+
dryRun?: boolean;
|
|
16
|
+
configOnly?: boolean;
|
|
17
|
+
analyze?: boolean;
|
|
18
|
+
force?: boolean;
|
|
19
|
+
entry?: string;
|
|
20
|
+
noInject?: boolean;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Run burrow command
|
|
24
|
+
*/
|
|
25
|
+
export declare function burrow(args: string[]): Promise<void>;
|
|
26
|
+
//# sourceMappingURL=burrow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"burrow.d.ts","sourceRoot":"","sources":["../../src/cli/burrow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAuBH,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAwBD;;GAEG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA0G1D"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Doctor Command
|
|
3
|
+
*
|
|
4
|
+
* Health check and configuration management for minibob.
|
|
5
|
+
*
|
|
6
|
+
* Checks:
|
|
7
|
+
* 1. Configuration - API key, config file, working directory
|
|
8
|
+
* 2. Backend - MCP endpoint reachability and health
|
|
9
|
+
* 3. Templates - Local templates directory and validity
|
|
10
|
+
* 4. Vessels - Configured vessels and their status
|
|
11
|
+
*/
|
|
12
|
+
export interface DoctorOptions {
|
|
13
|
+
fix?: boolean;
|
|
14
|
+
verbose?: boolean;
|
|
15
|
+
json?: boolean;
|
|
16
|
+
check?: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Run doctor command
|
|
20
|
+
*/
|
|
21
|
+
export declare function doctor(args: string[]): Promise<void>;
|
|
22
|
+
//# sourceMappingURL=doctor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAWD;;GAEG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA4D1D"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Goal Command
|
|
3
|
+
*
|
|
4
|
+
* Set a goal and achieve it using available vessels.
|
|
5
|
+
*
|
|
6
|
+
* Uses existing infrastructure:
|
|
7
|
+
* - GoalProcessor for goal-driven execution
|
|
8
|
+
* - SearchFirstExecutor for dynamic decomposition
|
|
9
|
+
* - MCP backend for Thompson Sampling recommendations
|
|
10
|
+
*/
|
|
11
|
+
export interface GoalOptions {
|
|
12
|
+
searchFirst?: boolean;
|
|
13
|
+
maxActivities?: number;
|
|
14
|
+
maxCost?: number;
|
|
15
|
+
context?: Record<string, unknown>;
|
|
16
|
+
dryRun?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Run goal command
|
|
20
|
+
*/
|
|
21
|
+
export declare function goal(args: string[]): Promise<void>;
|
|
22
|
+
//# sourceMappingURL=goal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"goal.d.ts","sourceRoot":"","sources":["../../src/cli/goal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAUH,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACjC,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED;;GAEG;AACH,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiDxD"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Utilities and Router
|
|
3
|
+
*
|
|
4
|
+
* Common utilities for all CLI commands
|
|
5
|
+
*/
|
|
6
|
+
export interface ParsedOptions {
|
|
7
|
+
flags: Record<string, boolean>;
|
|
8
|
+
values: Record<string, string>;
|
|
9
|
+
positional: string[];
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Parse command line arguments into structured options
|
|
13
|
+
*/
|
|
14
|
+
export declare function parseArgs(args: string[]): ParsedOptions;
|
|
15
|
+
/**
|
|
16
|
+
* Format help text with consistent styling
|
|
17
|
+
*/
|
|
18
|
+
export declare function formatHelp(command: string, description: string, options: Array<{
|
|
19
|
+
flag: string;
|
|
20
|
+
description: string;
|
|
21
|
+
default?: string;
|
|
22
|
+
}>): string;
|
|
23
|
+
/**
|
|
24
|
+
* Print error and exit
|
|
25
|
+
*/
|
|
26
|
+
export declare function exitWithError(message: string, exitCode?: number): never;
|
|
27
|
+
/**
|
|
28
|
+
* Print success message
|
|
29
|
+
*/
|
|
30
|
+
export declare function printSuccess(message: string): void;
|
|
31
|
+
/**
|
|
32
|
+
* Print warning message
|
|
33
|
+
*/
|
|
34
|
+
export declare function printWarning(message: string): void;
|
|
35
|
+
/**
|
|
36
|
+
* Print info message
|
|
37
|
+
*/
|
|
38
|
+
export declare function printInfo(message: string): void;
|
|
39
|
+
/**
|
|
40
|
+
* Get home directory path for minibob data
|
|
41
|
+
*/
|
|
42
|
+
export declare function getMinibobHome(): string;
|
|
43
|
+
/**
|
|
44
|
+
* Ensure minibob home directory exists
|
|
45
|
+
*/
|
|
46
|
+
export declare function ensureMinibobHome(): Promise<string>;
|
|
47
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,UAAU,EAAE,MAAM,EAAE,CAAA;CACrB;AAmBD;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,aAAa,CAkCvD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC;IAC9E,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAC,GAAG,MAAM,CAgBV;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,KAAK,CAGlE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE/C;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAGvC;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,CAazD"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Instance Registry
|
|
3
|
+
*
|
|
4
|
+
* Tracks running minibob instances for the observe command.
|
|
5
|
+
* Instances register on startup and deregister on shutdown.
|
|
6
|
+
*
|
|
7
|
+
* Storage: ~/.minibob/instances.json
|
|
8
|
+
*/
|
|
9
|
+
export interface MinibobInstance {
|
|
10
|
+
id: string;
|
|
11
|
+
pid?: number;
|
|
12
|
+
port: number;
|
|
13
|
+
host: string;
|
|
14
|
+
startTime: number;
|
|
15
|
+
workingDirectory: string;
|
|
16
|
+
status: 'running' | 'idle' | 'busy' | 'unknown';
|
|
17
|
+
lastActivity?: string;
|
|
18
|
+
lastActivityTime?: number;
|
|
19
|
+
vesselType?: string;
|
|
20
|
+
capabilities?: string[];
|
|
21
|
+
}
|
|
22
|
+
export interface InstanceStatus {
|
|
23
|
+
id: string;
|
|
24
|
+
status: 'idle' | 'executing' | 'boredom';
|
|
25
|
+
currentActivity?: {
|
|
26
|
+
id: string;
|
|
27
|
+
name?: string;
|
|
28
|
+
task?: string;
|
|
29
|
+
progress?: number;
|
|
30
|
+
};
|
|
31
|
+
metrics: {
|
|
32
|
+
activitiesExecuted: number;
|
|
33
|
+
uptime: number;
|
|
34
|
+
totalCost?: number;
|
|
35
|
+
};
|
|
36
|
+
config: {
|
|
37
|
+
workingDirectory: string;
|
|
38
|
+
model: string;
|
|
39
|
+
port: number;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Register a minibob instance
|
|
44
|
+
*/
|
|
45
|
+
export declare function registerInstance(instance: MinibobInstance): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Deregister a minibob instance
|
|
48
|
+
*/
|
|
49
|
+
export declare function deregisterInstance(instanceId: string): Promise<void>;
|
|
50
|
+
/**
|
|
51
|
+
* Update instance status
|
|
52
|
+
*/
|
|
53
|
+
export declare function updateInstanceStatus(instanceId: string, update: Partial<MinibobInstance>): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* Get all registered instances
|
|
56
|
+
*/
|
|
57
|
+
export declare function listInstances(): Promise<MinibobInstance[]>;
|
|
58
|
+
/**
|
|
59
|
+
* Get instance by ID
|
|
60
|
+
*/
|
|
61
|
+
export declare function getInstance(instanceId: string): Promise<MinibobInstance | null>;
|
|
62
|
+
/**
|
|
63
|
+
* Clean up stale instances (processes that no longer exist)
|
|
64
|
+
*/
|
|
65
|
+
export declare function cleanupStaleInstances(): Promise<number>;
|
|
66
|
+
/**
|
|
67
|
+
* Fetch status from a running instance
|
|
68
|
+
*/
|
|
69
|
+
export declare function fetchInstanceStatus(instance: MinibobInstance): Promise<InstanceStatus | null>;
|
|
70
|
+
/**
|
|
71
|
+
* Scan localhost ports for minibob instances
|
|
72
|
+
*/
|
|
73
|
+
export declare function scanForInstances(startPort?: number, endPort?: number): Promise<MinibobInstance[]>;
|
|
74
|
+
/**
|
|
75
|
+
* Generate unique instance ID
|
|
76
|
+
*/
|
|
77
|
+
export declare function generateInstanceId(): string;
|
|
78
|
+
//# sourceMappingURL=instance-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-registry.d.ts","sourceRoot":"","sources":["../../src/cli/instance-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,gBAAgB,EAAE,MAAM,CAAA;IACxB,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAAA;IACxC,eAAe,CAAC,EAAE;QAChB,EAAE,EAAE,MAAM,CAAA;QACV,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,CAAA;IACD,OAAO,EAAE;QACP,kBAAkB,EAAE,MAAM,CAAA;QAC1B,MAAM,EAAE,MAAM,CAAA;QACd,SAAS,CAAC,EAAE,MAAM,CAAA;KACnB,CAAA;IACD,MAAM,EAAE;QACN,gBAAgB,EAAE,MAAM,CAAA;QACxB,KAAK,EAAE,MAAM,CAAA;QACb,IAAI,EAAE,MAAM,CAAA;KACb,CAAA;CACF;AAiCD;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAI/E;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI1E;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,GAC/B,OAAO,CAAC,IAAI,CAAC,CAQf;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAGhE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAGrF;AAED;;GAEG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC,CAoC7D;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAmCnG;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,SAAS,GAAE,MAAa,EACxB,OAAO,GAAE,MAAa,GACrB,OAAO,CAAC,eAAe,EAAE,CAAC,CAiD5B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Observe Command
|
|
3
|
+
*
|
|
4
|
+
* Observe running instances OR codebases to extract/validate activities.
|
|
5
|
+
*
|
|
6
|
+
* Two modes:
|
|
7
|
+
* 1. Instance mode (default): View execution state of running minibob instances
|
|
8
|
+
* 2. Codebase mode (--codebase): Observe a codebase to extract activities
|
|
9
|
+
*
|
|
10
|
+
* The codebase mode extracts the instructional→functional mappings:
|
|
11
|
+
* - Developer Intent → Written Code (activities inferred from functions)
|
|
12
|
+
* - Written Code → Runtime (traced via execution)
|
|
13
|
+
*
|
|
14
|
+
* Discovery mechanisms for instance mode:
|
|
15
|
+
* 1. Explicit targets (--target flag)
|
|
16
|
+
* 2. Local registry (~/.minibob/instances.json)
|
|
17
|
+
* 3. Port scanning (--scan flag)
|
|
18
|
+
* 4. Backend query (--backend flag) - centralized view from metabob-activity-api
|
|
19
|
+
*/
|
|
20
|
+
export interface ObserveOptions {
|
|
21
|
+
target?: string;
|
|
22
|
+
codebase?: string;
|
|
23
|
+
list?: boolean;
|
|
24
|
+
follow?: boolean;
|
|
25
|
+
scan?: boolean;
|
|
26
|
+
backend?: boolean;
|
|
27
|
+
json?: boolean;
|
|
28
|
+
interval?: number;
|
|
29
|
+
validate?: boolean;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Run observe command
|
|
33
|
+
*/
|
|
34
|
+
export declare function observe(args: string[]): Promise<void>;
|
|
35
|
+
//# sourceMappingURL=observe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observe.d.ts","sourceRoot":"","sources":["../../src/cli/observe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAkBH,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyD3D"}
|