@kernel.chat/kbot 3.3.2 → 3.4.1

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.
@@ -1,4 +1,4 @@
1
- // kbot Autopoiesis — Self-Maintaining System
1
+ // kbot Autopoiesis — Self-Maintaining, Self-Creating System
2
2
  //
3
3
  // Based on Maturana & Varela's Autopoiesis theory (1972):
4
4
  // Living systems are "self-making" — they continuously produce and
@@ -9,6 +9,14 @@
9
9
  // self-heals broken components, and maintains its operational boundary.
10
10
  // kbot doesn't just run — it actively maintains its ability to run.
11
11
  //
12
+ // LIMITLESS EXECUTION INTEGRATION (v3.4.0):
13
+ // Self-healing now uses the full Limitless Execution stack:
14
+ // - Self-Extension: forge replacement tools when components fail
15
+ // - Tool Discovery: search MCP servers for missing capabilities
16
+ // - Fallback Chains: integrated with tool-pipeline DEFAULT_FALLBACK_RULES
17
+ // - Cost Regulation: adjust model routing based on system health
18
+ // - Specialist Routing: escalate to the right agent for complex repairs
19
+ //
12
20
  // References:
13
21
  // - Maturana, H.R. & Varela, F.J. (1980). Autopoiesis and Cognition.
14
22
  // - Varela, F.J. (1979). Principles of Biological Autonomy.
@@ -82,13 +90,16 @@ export class AutopoieticSystem {
82
90
  }
83
91
  /**
84
92
  * Attempt self-healing for a degraded or failed component.
85
- * Returns the adaptive response taken.
93
+ * Uses the full Limitless Execution stack:
94
+ * 1. Static fallback (existing component)
95
+ * 2. Tool discovery (search for MCP replacement)
96
+ * 3. Self-extension (forge a replacement tool)
86
97
  */
87
98
  selfHeal(componentId) {
88
99
  const comp = this.components.get(componentId);
89
100
  if (!comp || comp.status === 'healthy')
90
101
  return null;
91
- // If compensable, activate fallback
102
+ // Level 1: Static fallback — activate a known alternative
92
103
  if (comp.compensable && comp.fallback) {
93
104
  const fallback = this.components.get(comp.fallback);
94
105
  if (fallback && fallback.status !== 'failed') {
@@ -103,9 +114,27 @@ export class AutopoieticSystem {
103
114
  return response;
104
115
  }
105
116
  }
106
- // If not compensable, report inability to self-heal
117
+ // Level 2: Tool discovery flag for MCP search
118
+ // (Actual MCP search is async; we record the intent for the agent loop to act on)
119
+ if (comp.type === 'tool' || comp.type === 'connection') {
120
+ this.pendingDiscoveries.push({
121
+ componentId,
122
+ capability: comp.name,
123
+ reason: `${comp.name} failed ${comp.failureCount} times, no static fallback available`,
124
+ });
125
+ const response = {
126
+ action: `Queued MCP discovery for: ${comp.name} (no static fallback)`,
127
+ component: componentId,
128
+ success: true,
129
+ newStatus: 'degraded',
130
+ };
131
+ comp.status = 'degraded';
132
+ this.healingLog.push(response);
133
+ return response;
134
+ }
135
+ // Level 3: Record inability — will be surfaced to agent for forge_tool consideration
107
136
  const response = {
108
- action: `Cannot self-heal: ${comp.name} has no viable fallback`,
137
+ action: `Cannot self-heal: ${comp.name} escalate to agent for forge_tool`,
109
138
  component: componentId,
110
139
  success: false,
111
140
  newStatus: comp.status,
@@ -113,6 +142,87 @@ export class AutopoieticSystem {
113
142
  this.healingLog.push(response);
114
143
  return response;
115
144
  }
145
+ // ── Limitless Execution: Self-Extension ──
146
+ /** Pending tool discoveries (consumed by the agent loop) */
147
+ pendingDiscoveries = [];
148
+ /** Consume pending discovery requests (called by agent loop) */
149
+ consumeDiscoveries() {
150
+ const discoveries = [...this.pendingDiscoveries];
151
+ this.pendingDiscoveries = [];
152
+ return discoveries;
153
+ }
154
+ /**
155
+ * Register a forged tool as a new component.
156
+ * Called after forge_tool successfully creates a runtime tool.
157
+ * This is autopoiesis: the system creates a new part of itself.
158
+ */
159
+ registerForgedComponent(toolName, description) {
160
+ this.registerComponent({
161
+ id: `forged:${toolName}`,
162
+ name: `Forged: ${description}`,
163
+ type: 'tool',
164
+ criticality: 0.3, // forged tools start at low criticality
165
+ compensable: true, // can be re-forged if lost
166
+ });
167
+ this.reportHealth(`forged:${toolName}`, true);
168
+ this.healingLog.push({
169
+ action: `Self-extended: forged new tool "${toolName}" — ${description}`,
170
+ component: `forged:${toolName}`,
171
+ success: true,
172
+ newStatus: 'healthy',
173
+ });
174
+ }
175
+ // ── Limitless Execution: Cost Regulation ──
176
+ /**
177
+ * Recommend model speed based on system health.
178
+ * When the system is degraded, conserve resources by using fast/cheap models.
179
+ * When healthy, use the default (more capable) model.
180
+ */
181
+ recommendModelSpeed() {
182
+ const viability = this.computeViability();
183
+ // Below 60% viability: conserve resources, use fast model
184
+ if (viability < 0.6)
185
+ return 'fast';
186
+ // Count failed providers — if most are down, conserve what's left
187
+ const providers = [...this.components.values()].filter(c => c.type === 'provider');
188
+ const failedProviders = providers.filter(c => c.status === 'failed').length;
189
+ if (failedProviders >= providers.length - 1)
190
+ return 'fast';
191
+ return 'default';
192
+ }
193
+ // ── Limitless Execution: Structural Coupling ──
194
+ /**
195
+ * Process tool result and update component health.
196
+ * This is the structural coupling point — the system observes its own
197
+ * operations and updates its self-model accordingly.
198
+ */
199
+ observeToolResult(toolName, success, errorMessage) {
200
+ // Map tool names to component IDs
201
+ const toolToComponent = {
202
+ read_file: 'filesystem', write_file: 'filesystem', edit_file: 'filesystem',
203
+ glob: 'filesystem', grep: 'filesystem', list_directory: 'filesystem',
204
+ bash: 'bash',
205
+ git_status: 'git', git_diff: 'git', git_commit: 'git', git_log: 'git',
206
+ web_search: 'internet', url_fetch: 'internet',
207
+ mcp_search: 'mcp-servers', mcp_connect: 'mcp-servers', mcp_call: 'mcp-servers',
208
+ };
209
+ const componentId = toolToComponent[toolName];
210
+ if (componentId) {
211
+ this.reportHealth(componentId, success);
212
+ }
213
+ // Check if a forged tool is reporting
214
+ const forgedId = `forged:${toolName}`;
215
+ if (this.components.has(forgedId)) {
216
+ this.reportHealth(forgedId, success);
217
+ }
218
+ // If a tool failed, check if the system needs intervention
219
+ if (!success && componentId) {
220
+ const comp = this.components.get(componentId);
221
+ if (comp && comp.status === 'failed') {
222
+ this.selfHeal(componentId);
223
+ }
224
+ }
225
+ }
116
226
  /**
117
227
  * Compute overall system viability.
118
228
  * Weighted average of component health, weighted by criticality.
@@ -1 +1 @@
1
- {"version":3,"file":"autopoiesis.js","sourceRoot":"","sources":["../src/autopoiesis.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,EAAE;AACF,0DAA0D;AAC1D,mEAAmE;AACnE,sEAAsE;AACtE,0EAA0E;AAC1E,EAAE;AACF,oEAAoE;AACpE,wEAAwE;AACxE,oEAAoE;AACpE,EAAE;AACF,cAAc;AACd,uEAAuE;AACvE,8DAA8D;AAC9D,2FAA2F;AAC3F,yEAAyE;AA2CzE;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,iBAAiB;IACpB,UAAU,GAAG,IAAI,GAAG,EAA2B,CAAA;IAC/C,UAAU,GAAuB,EAAE,CAAA;IAC1B,kBAAkB,GAAG,GAAG,CAAA;IAEzC;QACE,IAAI,CAAC,oBAAoB,EAAE,CAAA;IAC7B,CAAC;IAED,wDAAwD;IAChD,oBAAoB;QAC1B,MAAM,QAAQ,GAA4E;YACxF,YAAY;YACZ,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;YACrH,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;YAC/G,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE;YACrH,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE;YAEnG,aAAa;YACb,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE;YACpG,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE;YAC3F,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE;YAEzF,SAAS;YACT,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,gCAAgC,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,iBAAiB,EAAE;YAChJ,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE;YAExG,uBAAuB;YACvB,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,uBAAuB,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;YAC9H,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE;SAC/G,CAAA;QAED,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACxB,GAAG,CAAC;gBACJ,MAAM,EAAE,SAAS;gBACjB,WAAW,EAAE,CAAC;gBACd,YAAY,EAAE,CAAC;aAChB,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,WAAmB,EAAE,OAAgB;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QAC7C,IAAI,CAAC,IAAI;YAAE,OAAM;QAEjB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAE7B,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,MAAM,GAAG,SAAS,CAAA;YACvB,4CAA4C;YAC5C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAA;QACxD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,YAAY,EAAE,CAAA;YACnB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAA;QAC9D,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,WAAmB;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QAC7C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,IAAI,CAAA;QAEnD,oCAAoC;QACpC,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACnD,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC7C,MAAM,QAAQ,GAAqB;oBACjC,MAAM,EAAE,uBAAuB,IAAI,CAAC,IAAI,MAAM,QAAQ,CAAC,IAAI,EAAE;oBAC7D,SAAS,EAAE,WAAW;oBACtB,OAAO,EAAE,IAAI;oBACb,SAAS,EAAE,UAAU;iBACtB,CAAA;gBACD,IAAI,CAAC,MAAM,GAAG,UAAU,CAAA;gBACxB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;gBAC9B,OAAO,QAAQ,CAAA;YACjB,CAAC;QACH,CAAC;QAED,oDAAoD;QACpD,MAAM,QAAQ,GAAqB;YACjC,MAAM,EAAE,qBAAqB,IAAI,CAAC,IAAI,yBAAyB;YAC/D,SAAS,EAAE,WAAW;YACtB,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,IAAI,CAAC,MAAM;SACvB,CAAA;QACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC9B,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED;;;OAGG;IACH,gBAAgB;QACd,IAAI,cAAc,GAAG,CAAC,CAAA;QACtB,IAAI,WAAW,GAAG,CAAC,CAAA;QAEnB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;YAC5C,MAAM,WAAW,GACf,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACjC,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;oBAClC,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA,CAAC,UAAU;YAEjD,cAAc,IAAI,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;YAChD,WAAW,IAAI,IAAI,CAAC,WAAW,CAAA;QACjC,CAAC;QAED,OAAO,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;IAC3D,CAAC;IAED;;OAEG;IACH,WAAW;QACT,MAAM,OAAO,GAAa,EAAE,CAAA;QAC5B,MAAM,QAAQ,GAAa,EAAE,CAAA;QAC7B,MAAM,MAAM,GAAa,EAAE,CAAA;QAC3B,MAAM,cAAc,GAAa,EAAE,CAAA;QAEnC,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACzC,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;gBACpB,KAAK,SAAS;oBACZ,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;oBACvB,MAAK;gBACP,KAAK,UAAU;oBACb,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;oBACxB,+CAA+C;oBAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;oBACpC,IAAI,UAAU;wBAAE,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;oBACtD,MAAK;gBACP,KAAK,QAAQ;oBACX,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;oBACtB,6CAA6C;oBAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;oBAClC,IAAI,QAAQ;wBAAE,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;oBAClD,MAAK;YACT,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAA;QAEzC,0EAA0E;QAC1E,MAAM,UAAU,GAAG,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;YAC9D,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACjC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAA;QACnC,CAAC,CAAC,CAAA;QAEF,OAAO;YACL,SAAS;YACT,OAAO;YACP,QAAQ;YACR,MAAM;YACN,cAAc;YACd,QAAQ,EAAE,SAAS,IAAI,IAAI,CAAC,kBAAkB;YAC9C,cAAc,EAAE,UAAU;SAC3B,CAAA;IACH,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAA;QAEzC,IAAI,SAAS,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxC,OAAO;gBACL,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE,oCAAoC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,+BAA+B;aACxG,CAAA;QACH,CAAC;QAED,0DAA0D;QAC1D,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;QAC5C,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACjC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,2CAA2C,EAAE,CAAA;QACjF,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;IAC3B,CAAC;IAED,0BAA0B;IAC1B,aAAa;QACX,OAAO,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAA;IAC7B,CAAC;IAED,wCAAwC;IACxC,YAAY,CAAC,EAAU;QACrB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAChC,CAAC;IAED,mEAAmE;IACnE,iBAAiB,CAAC,SAA2E;QAC3F,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE;YAChC,GAAG,SAAS;YACZ,MAAM,EAAE,SAAS;YACjB,WAAW,EAAE,CAAC;YACd,YAAY,EAAE,CAAC;SAChB,CAAC,CAAA;IACJ,CAAC;IAED,4BAA4B;IAC5B,KAAK;QACH,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;YAC5C,IAAI,CAAC,MAAM,GAAG,SAAS,CAAA;YACvB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAA;YACrB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAA;QACtB,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,EAAE,CAAA;IACtB,CAAC;CACF"}
1
+ {"version":3,"file":"autopoiesis.js","sourceRoot":"","sources":["../src/autopoiesis.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -366,6 +366,96 @@ async function main() {
366
366
  const report = await runDoctor();
367
367
  process.stderr.write(formatDoctorReport(report));
368
368
  });
369
+ program
370
+ .command('vitals')
371
+ .description('Autopoietic health check — system viability, component status, self-healing log')
372
+ .action(async () => {
373
+ const { AutopoieticSystem } = await import('./autopoiesis.js');
374
+ const chalk = (await import('chalk')).default;
375
+ const AMETHYST = chalk.hex('#6B5B95');
376
+ process.stderr.write('\n');
377
+ printInfo('kbot Vitals — Autopoietic System Health');
378
+ const system = new AutopoieticSystem();
379
+ // Probe live components
380
+ const { isOllamaRunning, isByokEnabled, getByokProvider } = await import('./auth.js');
381
+ const { existsSync } = await import('node:fs');
382
+ const { join } = await import('node:path');
383
+ const { homedir } = await import('node:os');
384
+ // Filesystem
385
+ system.reportHealth('filesystem', true);
386
+ // Bash
387
+ try {
388
+ const { execSync } = await import('node:child_process');
389
+ execSync('echo ok', { timeout: 2000 });
390
+ system.reportHealth('bash', true);
391
+ }
392
+ catch {
393
+ system.reportHealth('bash', false);
394
+ }
395
+ // Git
396
+ try {
397
+ const { execSync } = await import('node:child_process');
398
+ execSync('git --version', { timeout: 2000 });
399
+ system.reportHealth('git', true);
400
+ }
401
+ catch {
402
+ system.reportHealth('git', false);
403
+ }
404
+ // Memory
405
+ const memDir = join(homedir(), '.kbot', 'memory');
406
+ system.reportHealth('local-memory', existsSync(memDir));
407
+ system.reportHealth('session-context', true);
408
+ // Providers
409
+ if (isByokEnabled()) {
410
+ const provider = getByokProvider();
411
+ system.reportHealth(provider, true);
412
+ }
413
+ // Ollama
414
+ const ollamaOk = await isOllamaRunning();
415
+ system.reportHealth('ollama', ollamaOk);
416
+ // Internet
417
+ try {
418
+ const res = await fetch('https://httpbin.org/status/200', { signal: AbortSignal.timeout(3000) });
419
+ system.reportHealth('internet', res.ok);
420
+ }
421
+ catch {
422
+ system.reportHealth('internet', false);
423
+ }
424
+ // Forged tools
425
+ const forgedDir = join(homedir(), '.kbot', 'plugins', 'forged');
426
+ if (existsSync(forgedDir)) {
427
+ const { readdirSync } = await import('node:fs');
428
+ const forged = readdirSync(forgedDir).filter(f => f.endsWith('.js'));
429
+ for (const f of forged) {
430
+ const name = f.replace('.js', '');
431
+ system.registerForgedComponent(name, `User-forged tool`);
432
+ }
433
+ }
434
+ // Run health check
435
+ const report = system.healthCheck();
436
+ // Display
437
+ const viabilityColor = report.viability > 0.7 ? chalk.green : report.viability > 0.4 ? chalk.yellow : chalk.red;
438
+ process.stderr.write(`\n ${AMETHYST('Viability')}: ${viabilityColor(`${(report.viability * 100).toFixed(0)}%`)}`);
439
+ process.stderr.write(` ${report.isViable ? chalk.green('VIABLE') : chalk.red('DEGRADED')}`);
440
+ process.stderr.write(` ${report.boundaryIntact ? chalk.green('boundary intact') : chalk.red('boundary breached')}\n\n`);
441
+ if (report.healthy.length > 0) {
442
+ process.stderr.write(` ${chalk.green('Healthy')}: ${report.healthy.join(', ')}\n`);
443
+ }
444
+ if (report.degraded.length > 0) {
445
+ process.stderr.write(` ${chalk.yellow('Degraded')}: ${report.degraded.join(', ')}\n`);
446
+ }
447
+ if (report.failed.length > 0) {
448
+ process.stderr.write(` ${chalk.red('Failed')}: ${report.failed.join(', ')}\n`);
449
+ }
450
+ if (report.healingActions.length > 0) {
451
+ process.stderr.write(`\n ${AMETHYST('Self-Healing')}:\n`);
452
+ for (const action of report.healingActions) {
453
+ process.stderr.write(` ${chalk.dim('→')} ${action}\n`);
454
+ }
455
+ }
456
+ const speed = system.recommendModelSpeed();
457
+ process.stderr.write(`\n ${AMETHYST('Cost regulation')}: ${speed === 'fast' ? chalk.yellow('conserving (fast model)') : chalk.green('normal (default model)')}\n\n`);
458
+ });
369
459
  program
370
460
  .command('bootstrap')
371
461
  .description('Measure the gap between what your project IS and what the world SEES')