@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.
Files changed (174) hide show
  1. package/ARCHITECTURE.md +255 -0
  2. package/CHANGELOG.md +112 -0
  3. package/README.md +380 -0
  4. package/bin/minibob.js +36 -0
  5. package/dist/acp-gossip.d.ts +72 -0
  6. package/dist/acp-gossip.d.ts.map +1 -0
  7. package/dist/acp-gossip.js +156 -0
  8. package/dist/acp-gossip.js.map +1 -0
  9. package/dist/acp.d.ts +62 -0
  10. package/dist/acp.d.ts.map +1 -0
  11. package/dist/acp.js +292 -0
  12. package/dist/acp.js.map +1 -0
  13. package/dist/activity.d.ts +157 -0
  14. package/dist/activity.d.ts.map +1 -0
  15. package/dist/activity.js +518 -0
  16. package/dist/activity.js.map +1 -0
  17. package/dist/agent-runtime.d.ts +104 -0
  18. package/dist/agent-runtime.d.ts.map +1 -0
  19. package/dist/boredom.d.ts +125 -0
  20. package/dist/boredom.d.ts.map +1 -0
  21. package/dist/boredom.js +244 -0
  22. package/dist/boredom.js.map +1 -0
  23. package/dist/cli/acp-server.d.ts +23 -0
  24. package/dist/cli/acp-server.d.ts.map +1 -0
  25. package/dist/cli/burrow.d.ts +26 -0
  26. package/dist/cli/burrow.d.ts.map +1 -0
  27. package/dist/cli/doctor.d.ts +22 -0
  28. package/dist/cli/doctor.d.ts.map +1 -0
  29. package/dist/cli/goal.d.ts +22 -0
  30. package/dist/cli/goal.d.ts.map +1 -0
  31. package/dist/cli/index.d.ts +47 -0
  32. package/dist/cli/index.d.ts.map +1 -0
  33. package/dist/cli/instance-registry.d.ts +78 -0
  34. package/dist/cli/instance-registry.d.ts.map +1 -0
  35. package/dist/cli/observe.d.ts +35 -0
  36. package/dist/cli/observe.d.ts.map +1 -0
  37. package/dist/cli/vessel.d.ts +14 -0
  38. package/dist/cli/vessel.d.ts.map +1 -0
  39. package/dist/composition-observer.d.ts +96 -0
  40. package/dist/composition-observer.d.ts.map +1 -0
  41. package/dist/config.d.ts +36 -0
  42. package/dist/config.d.ts.map +1 -0
  43. package/dist/config.js +128 -0
  44. package/dist/config.js.map +1 -0
  45. package/dist/docker/Dockerfile +35 -0
  46. package/dist/environment.d.ts +72 -0
  47. package/dist/environment.d.ts.map +1 -0
  48. package/dist/environment.js +142 -0
  49. package/dist/environment.js.map +1 -0
  50. package/dist/goal-processor.d.ts +165 -0
  51. package/dist/goal-processor.d.ts.map +1 -0
  52. package/dist/helm/minibob-cluster/Chart.yaml +13 -0
  53. package/dist/helm/minibob-cluster/templates/_helpers.tpl +60 -0
  54. package/dist/helm/minibob-cluster/templates/configmap.yaml +11 -0
  55. package/dist/helm/minibob-cluster/templates/deployment.yaml +108 -0
  56. package/dist/helm/minibob-cluster/templates/secret.yaml +10 -0
  57. package/dist/helm/minibob-cluster/templates/service.yaml +37 -0
  58. package/dist/helm/minibob-cluster/values-local.yaml +41 -0
  59. package/dist/helm/minibob-cluster/values-production.yaml +57 -0
  60. package/dist/helm/minibob-cluster/values-testing-cluster.yaml +43 -0
  61. package/dist/helm/minibob-cluster/values.yaml +127 -0
  62. package/dist/improviser.d.ts +74 -0
  63. package/dist/improviser.d.ts.map +1 -0
  64. package/dist/impulse-filter.d.ts +74 -0
  65. package/dist/impulse-filter.d.ts.map +1 -0
  66. package/dist/impulse.d.ts +92 -0
  67. package/dist/impulse.d.ts.map +1 -0
  68. package/dist/impulse.js +234 -0
  69. package/dist/impulse.js.map +1 -0
  70. package/dist/lib.d.ts +29 -0
  71. package/dist/lib.d.ts.map +1 -0
  72. package/dist/lib.js +18561 -0
  73. package/dist/lib.js.map +98 -0
  74. package/dist/lifecycle-hooks.d.ts +99 -0
  75. package/dist/lifecycle-hooks.d.ts.map +1 -0
  76. package/dist/lifecycle-hooks.js +135 -0
  77. package/dist/lifecycle-hooks.js.map +1 -0
  78. package/dist/llm.d.ts +31 -0
  79. package/dist/llm.d.ts.map +1 -0
  80. package/dist/llm.js +349 -0
  81. package/dist/llm.js.map +1 -0
  82. package/dist/mcp-activity-bridge.d.ts +66 -0
  83. package/dist/mcp-activity-bridge.d.ts.map +1 -0
  84. package/dist/mcp-activity-bridge.js +126 -0
  85. package/dist/mcp-activity-bridge.js.map +1 -0
  86. package/dist/mcp.d.ts +216 -0
  87. package/dist/mcp.d.ts.map +1 -0
  88. package/dist/mcp.js +292 -0
  89. package/dist/mcp.js.map +1 -0
  90. package/dist/memory-agent.d.ts +92 -0
  91. package/dist/memory-agent.d.ts.map +1 -0
  92. package/dist/memory-agent.js +277 -0
  93. package/dist/memory-agent.js.map +1 -0
  94. package/dist/runtime-mapping.d.ts +97 -0
  95. package/dist/runtime-mapping.d.ts.map +1 -0
  96. package/dist/search-first-executor.d.ts +113 -0
  97. package/dist/search-first-executor.d.ts.map +1 -0
  98. package/dist/session.d.ts +48 -0
  99. package/dist/session.d.ts.map +1 -0
  100. package/dist/template-extractor.d.ts +9 -0
  101. package/dist/template-extractor.d.ts.map +1 -0
  102. package/dist/template-generator.d.ts +12 -0
  103. package/dist/template-generator.d.ts.map +1 -0
  104. package/dist/tools.d.ts +58 -0
  105. package/dist/tools.d.ts.map +1 -0
  106. package/dist/tools.js +771 -0
  107. package/dist/tools.js.map +1 -0
  108. package/dist/types.d.ts +503 -0
  109. package/dist/types.d.ts.map +1 -0
  110. package/dist/types.js +8 -0
  111. package/dist/types.js.map +1 -0
  112. package/dist/understanding/analyzer.d.ts +55 -0
  113. package/dist/understanding/analyzer.d.ts.map +1 -0
  114. package/dist/understanding/explorer.d.ts +73 -0
  115. package/dist/understanding/explorer.d.ts.map +1 -0
  116. package/dist/understanding/index.d.ts +7 -0
  117. package/dist/understanding/index.d.ts.map +1 -0
  118. package/dist/understanding/types.d.ts +136 -0
  119. package/dist/understanding/types.d.ts.map +1 -0
  120. package/dist/validation.d.ts +29 -0
  121. package/dist/validation.d.ts.map +1 -0
  122. package/dist/validation.js +106 -0
  123. package/dist/validation.js.map +1 -0
  124. package/dist/vessel-bootstrap.d.ts +190 -0
  125. package/dist/vessel-bootstrap.d.ts.map +1 -0
  126. package/dist/vessel-registry.d.ts +229 -0
  127. package/dist/vessel-registry.d.ts.map +1 -0
  128. package/index.ts +1329 -0
  129. package/package.json +54 -0
  130. package/src/acp-gossip.ts +193 -0
  131. package/src/acp.ts +362 -0
  132. package/src/activity.ts +1464 -0
  133. package/src/agent-runtime.ts +365 -0
  134. package/src/boredom.ts +423 -0
  135. package/src/cli/acp-server.ts +377 -0
  136. package/src/cli/burrow.ts +896 -0
  137. package/src/cli/doctor.ts +526 -0
  138. package/src/cli/goal.ts +224 -0
  139. package/src/cli/index.ts +147 -0
  140. package/src/cli/instance-registry.ts +271 -0
  141. package/src/cli/observe.ts +682 -0
  142. package/src/cli/vessel.ts +287 -0
  143. package/src/components/SystemOverview.tsx +331 -0
  144. package/src/composition-observer.ts +449 -0
  145. package/src/config.ts +172 -0
  146. package/src/environment.ts +167 -0
  147. package/src/goal-processor.ts +654 -0
  148. package/src/improviser.ts +591 -0
  149. package/src/impulse-filter.ts +273 -0
  150. package/src/impulse.ts +311 -0
  151. package/src/lib.ts +147 -0
  152. package/src/lifecycle-hooks.ts +181 -0
  153. package/src/llm.ts +434 -0
  154. package/src/mcp-activity-bridge.ts +158 -0
  155. package/src/mcp.ts +747 -0
  156. package/src/memory-agent.ts +316 -0
  157. package/src/runtime-mapping.ts +527 -0
  158. package/src/search-first-executor.ts +666 -0
  159. package/src/session.ts +141 -0
  160. package/src/template-extractor.ts +256 -0
  161. package/src/template-generator.ts +130 -0
  162. package/src/tools.ts +924 -0
  163. package/src/types.ts +497 -0
  164. package/src/understanding/analyzer.ts +354 -0
  165. package/src/understanding/explorer.ts +488 -0
  166. package/src/understanding/index.ts +27 -0
  167. package/src/understanding/types.ts +153 -0
  168. package/src/validation.ts +125 -0
  169. package/src/vessel-bootstrap.ts +440 -0
  170. package/src/vessel-registry.ts +621 -0
  171. package/templates/core/edit-file.json +85 -0
  172. package/templates/understanding/diagnose-problem.json +32 -0
  173. package/templates/understanding/explore-codebase-v2.json +57 -0
  174. 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"}
@@ -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"}