@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,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* minibob Environment Detection
|
|
3
|
+
*
|
|
4
|
+
* Auto-detects runtime environment (K8s vs Docker vs local) and cluster configuration.
|
|
5
|
+
* Enables dynamic capability configuration based on deployment context.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { existsSync } from "fs"
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Runtime environment types
|
|
12
|
+
*/
|
|
13
|
+
export enum RuntimeEnvironment {
|
|
14
|
+
LOCAL = "local",
|
|
15
|
+
DOCKER = "docker",
|
|
16
|
+
K8S_SINGLE = "k8s-single",
|
|
17
|
+
K8S_CLUSTER = "k8s-cluster"
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Environment detection result
|
|
22
|
+
*/
|
|
23
|
+
export interface EnvironmentInfo {
|
|
24
|
+
environment: RuntimeEnvironment
|
|
25
|
+
peerCount: number
|
|
26
|
+
backendAvailable: boolean
|
|
27
|
+
clusterMode: boolean
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Detect runtime environment based on indicators
|
|
32
|
+
*
|
|
33
|
+
* Detection logic:
|
|
34
|
+
* - K8s: KUBERNETES_SERVICE_HOST env var present
|
|
35
|
+
* - Docker: /.dockerenv file exists
|
|
36
|
+
* - Local: Neither of above
|
|
37
|
+
*
|
|
38
|
+
* If K8s, further detect cluster mode via DNS peer count.
|
|
39
|
+
*/
|
|
40
|
+
export async function detectEnvironment(): Promise<RuntimeEnvironment> {
|
|
41
|
+
// Check for Kubernetes
|
|
42
|
+
if (process.env.KUBERNETES_SERVICE_HOST) {
|
|
43
|
+
console.log("[Environment] Detected Kubernetes environment")
|
|
44
|
+
|
|
45
|
+
// Check cluster mode via DNS lookup
|
|
46
|
+
const peerCount = await detectClusterMode()
|
|
47
|
+
|
|
48
|
+
if (peerCount >= 3) {
|
|
49
|
+
console.log(`[Environment] Cluster mode: ${peerCount} peers detected`)
|
|
50
|
+
return RuntimeEnvironment.K8S_CLUSTER
|
|
51
|
+
} else {
|
|
52
|
+
console.log(`[Environment] Single-pod mode: ${peerCount} peer(s)`)
|
|
53
|
+
return RuntimeEnvironment.K8S_SINGLE
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Check for Docker
|
|
58
|
+
if (existsSync("/.dockerenv")) {
|
|
59
|
+
console.log("[Environment] Detected Docker environment")
|
|
60
|
+
return RuntimeEnvironment.DOCKER
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Default to local
|
|
64
|
+
console.log("[Environment] Detected local environment")
|
|
65
|
+
return RuntimeEnvironment.LOCAL
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Detect cluster mode by checking environment variables
|
|
70
|
+
*
|
|
71
|
+
* Simplified detection: If MINIBOB_SERVICE_NAME is set, we're in cluster mode.
|
|
72
|
+
* This env var is only set in Helm deployments with multiple replicas.
|
|
73
|
+
*
|
|
74
|
+
* More reliable than DNS lookup which can fail due to:
|
|
75
|
+
* - Missing subdomain in pod spec
|
|
76
|
+
* - DNS propagation delays
|
|
77
|
+
* - Network policies
|
|
78
|
+
*
|
|
79
|
+
* @returns Number of peer pods (3 if cluster, 1 otherwise)
|
|
80
|
+
*/
|
|
81
|
+
export async function detectClusterMode(): Promise<number> {
|
|
82
|
+
const serviceName = process.env.MINIBOB_SERVICE_NAME
|
|
83
|
+
|
|
84
|
+
if (serviceName) {
|
|
85
|
+
console.log(`[Environment] Cluster mode enabled via MINIBOB_SERVICE_NAME: ${serviceName}`)
|
|
86
|
+
// Assume 3 pods in cluster mode (standard HA setup)
|
|
87
|
+
// Could enhance to query K8s API for actual count, but not worth complexity
|
|
88
|
+
return 3
|
|
89
|
+
} else {
|
|
90
|
+
console.log(`[Environment] Single-pod mode: MINIBOB_SERVICE_NAME not set`)
|
|
91
|
+
return 1
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Check backend (MCP) health before initialization
|
|
97
|
+
*
|
|
98
|
+
* Attempts to fetch /health endpoint from MCP backend.
|
|
99
|
+
* Returns true if backend responds within timeout.
|
|
100
|
+
*
|
|
101
|
+
* @param endpoint MCP backend URL
|
|
102
|
+
* @param timeoutMs Timeout in milliseconds (default: 5000)
|
|
103
|
+
* @returns true if backend is healthy, false otherwise
|
|
104
|
+
*/
|
|
105
|
+
export async function checkBackendHealth(endpoint: string, timeoutMs = 5000): Promise<boolean> {
|
|
106
|
+
const healthUrl = `${endpoint}/health`
|
|
107
|
+
|
|
108
|
+
try {
|
|
109
|
+
console.log(`[Environment] Checking backend health: ${healthUrl}`)
|
|
110
|
+
|
|
111
|
+
const controller = new AbortController()
|
|
112
|
+
const timeoutId = setTimeout(() => controller.abort(), timeoutMs)
|
|
113
|
+
|
|
114
|
+
const response = await fetch(healthUrl, {
|
|
115
|
+
signal: controller.signal,
|
|
116
|
+
headers: { "Accept": "application/json" }
|
|
117
|
+
})
|
|
118
|
+
|
|
119
|
+
clearTimeout(timeoutId)
|
|
120
|
+
|
|
121
|
+
if (response.ok) {
|
|
122
|
+
console.log(`[Environment] ✓ Backend healthy (${response.status})`)
|
|
123
|
+
return true
|
|
124
|
+
} else {
|
|
125
|
+
console.log(`[Environment] ✗ Backend unhealthy (${response.status})`)
|
|
126
|
+
return false
|
|
127
|
+
}
|
|
128
|
+
} catch (error) {
|
|
129
|
+
if (error instanceof Error && error.name === "AbortError") {
|
|
130
|
+
console.log(`[Environment] ✗ Backend health check timed out after ${timeoutMs}ms`)
|
|
131
|
+
} else {
|
|
132
|
+
console.log(`[Environment] ✗ Backend health check failed: ${error}`)
|
|
133
|
+
}
|
|
134
|
+
return false
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Perform complete environment detection
|
|
140
|
+
*
|
|
141
|
+
* Detects:
|
|
142
|
+
* 1. Runtime environment (K8s/Docker/local)
|
|
143
|
+
* 2. Cluster mode (peer count)
|
|
144
|
+
* 3. Backend availability (health check)
|
|
145
|
+
*
|
|
146
|
+
* Returns comprehensive environment info for capability configuration.
|
|
147
|
+
*/
|
|
148
|
+
export async function detectCompleteEnvironment(mcpEndpoint?: string): Promise<EnvironmentInfo> {
|
|
149
|
+
const environment = await detectEnvironment()
|
|
150
|
+
|
|
151
|
+
const peerCount = environment.startsWith("k8s")
|
|
152
|
+
? await detectClusterMode()
|
|
153
|
+
: 1
|
|
154
|
+
|
|
155
|
+
const backendAvailable = mcpEndpoint
|
|
156
|
+
? await checkBackendHealth(mcpEndpoint)
|
|
157
|
+
: false
|
|
158
|
+
|
|
159
|
+
const clusterMode = environment === RuntimeEnvironment.K8S_CLUSTER && peerCount >= 3
|
|
160
|
+
|
|
161
|
+
return {
|
|
162
|
+
environment,
|
|
163
|
+
peerCount,
|
|
164
|
+
backendAvailable,
|
|
165
|
+
clusterMode
|
|
166
|
+
}
|
|
167
|
+
}
|