@kernel.chat/kbot 3.37.0 → 3.39.0
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/README.md +111 -7
- package/dist/agent-teams.d.ts +55 -0
- package/dist/agent-teams.d.ts.map +1 -0
- package/dist/agent-teams.js +135 -0
- package/dist/agent-teams.js.map +1 -0
- package/dist/autonomous-contributor.d.ts +88 -0
- package/dist/autonomous-contributor.d.ts.map +1 -0
- package/dist/autonomous-contributor.js +862 -0
- package/dist/autonomous-contributor.js.map +1 -0
- package/dist/collective-network.d.ts +102 -0
- package/dist/collective-network.d.ts.map +1 -0
- package/dist/collective-network.js +634 -0
- package/dist/collective-network.js.map +1 -0
- package/dist/community-autopilot.d.ts +98 -0
- package/dist/community-autopilot.d.ts.map +1 -0
- package/dist/community-autopilot.js +676 -0
- package/dist/community-autopilot.js.map +1 -0
- package/dist/cross-device-sync.d.ts +36 -0
- package/dist/cross-device-sync.d.ts.map +1 -0
- package/dist/cross-device-sync.js +532 -0
- package/dist/cross-device-sync.js.map +1 -0
- package/dist/forge-marketplace-server.d.ts +23 -0
- package/dist/forge-marketplace-server.d.ts.map +1 -0
- package/dist/forge-marketplace-server.js +457 -0
- package/dist/forge-marketplace-server.js.map +1 -0
- package/dist/hooks-integration.d.ts +89 -0
- package/dist/hooks-integration.d.ts.map +1 -0
- package/dist/hooks-integration.js +457 -0
- package/dist/hooks-integration.js.map +1 -0
- package/dist/plugin/index.d.ts +71 -0
- package/dist/plugin/index.d.ts.map +1 -0
- package/dist/plugin/index.js +133 -0
- package/dist/plugin/index.js.map +1 -0
- package/dist/voice-loop.d.ts +59 -0
- package/dist/voice-loop.d.ts.map +1 -0
- package/dist/voice-loop.js +525 -0
- package/dist/voice-loop.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,634 @@
|
|
|
1
|
+
// kbot Collective Intelligence Network — 10,000 instances learning from each other
|
|
2
|
+
//
|
|
3
|
+
// The crown jewel of distributed intelligence.
|
|
4
|
+
// Every kbot instance is a neuron in the network. Join, contribute, absorb.
|
|
5
|
+
//
|
|
6
|
+
// Privacy: device fingerprint is a one-way SHA-256 hash — not reversible.
|
|
7
|
+
// All patterns anonymized before contribution (PII stripped).
|
|
8
|
+
// Offline mode is always valid — the network is a bonus, not a dependency.
|
|
9
|
+
import { homedir, hostname, platform, arch, cpus, totalmem, uptime as osUptime } from 'node:os';
|
|
10
|
+
import { join, dirname } from 'node:path';
|
|
11
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync, appendFileSync } from 'node:fs';
|
|
12
|
+
import { createHash } from 'node:crypto';
|
|
13
|
+
import { collectAnonymizedPatterns } from './collective-learning.js';
|
|
14
|
+
// ── Paths ──
|
|
15
|
+
const KBOT_DIR = join(homedir(), '.kbot');
|
|
16
|
+
const COLLECTIVE_DIR = join(KBOT_DIR, 'collective');
|
|
17
|
+
const MEMORY_DIR = join(KBOT_DIR, 'memory');
|
|
18
|
+
const CONTRIBUTIONS_FILE = join(COLLECTIVE_DIR, 'contributions.json');
|
|
19
|
+
const NETWORK_LOG_FILE = join(COLLECTIVE_DIR, 'network-log.jsonl');
|
|
20
|
+
const NETWORK_STATE_FILE = join(COLLECTIVE_DIR, 'network-state.json');
|
|
21
|
+
const PATTERNS_FILE = join(MEMORY_DIR, 'patterns.json');
|
|
22
|
+
const COLLECTIVE_PATTERNS_FILE = join(COLLECTIVE_DIR, 'learned-patterns.json');
|
|
23
|
+
const COLLECTIVE_URL = process.env.KBOT_COLLECTIVE_URL || 'https://kernel.chat/api/collective';
|
|
24
|
+
const NETWORK_TIMEOUT = 10_000;
|
|
25
|
+
const DEFAULT_LOOP_INTERVAL = 60 * 60 * 1000; // 1 hour
|
|
26
|
+
// ── Helpers ──
|
|
27
|
+
function ensureDir(dir) {
|
|
28
|
+
if (!existsSync(dir))
|
|
29
|
+
mkdirSync(dir, { recursive: true });
|
|
30
|
+
}
|
|
31
|
+
function loadJSON(path, fallback) {
|
|
32
|
+
try {
|
|
33
|
+
if (existsSync(path)) {
|
|
34
|
+
return JSON.parse(readFileSync(path, 'utf-8'));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
// Corrupt file — return fallback
|
|
39
|
+
}
|
|
40
|
+
return fallback;
|
|
41
|
+
}
|
|
42
|
+
function saveJSON(path, data) {
|
|
43
|
+
ensureDir(dirname(path));
|
|
44
|
+
writeFileSync(path, JSON.stringify(data, null, 2));
|
|
45
|
+
}
|
|
46
|
+
function logNetwork(entry) {
|
|
47
|
+
ensureDir(COLLECTIVE_DIR);
|
|
48
|
+
const line = JSON.stringify({ ...entry, timestamp: new Date().toISOString() });
|
|
49
|
+
appendFileSync(NETWORK_LOG_FILE, line + '\n');
|
|
50
|
+
}
|
|
51
|
+
function getDeviceFingerprint() {
|
|
52
|
+
const raw = `${hostname()}:${homedir()}:${platform()}:${arch()}`;
|
|
53
|
+
return createHash('sha256').update(raw).digest('hex').slice(0, 16);
|
|
54
|
+
}
|
|
55
|
+
function loadNetworkState() {
|
|
56
|
+
return loadJSON(NETWORK_STATE_FILE, {
|
|
57
|
+
node_id: getDeviceFingerprint(),
|
|
58
|
+
joined_at: null,
|
|
59
|
+
last_contribute: null,
|
|
60
|
+
last_absorb: null,
|
|
61
|
+
total_contributed: 0,
|
|
62
|
+
total_absorbed: 0,
|
|
63
|
+
reputation_score: 0,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
function saveNetworkState(state) {
|
|
67
|
+
saveJSON(NETWORK_STATE_FILE, state);
|
|
68
|
+
}
|
|
69
|
+
function loadContributions() {
|
|
70
|
+
return loadJSON(CONTRIBUTIONS_FILE, []);
|
|
71
|
+
}
|
|
72
|
+
function saveContributions(records) {
|
|
73
|
+
// Keep last 100 contributions to limit file size
|
|
74
|
+
const trimmed = records.slice(-100);
|
|
75
|
+
saveJSON(CONTRIBUTIONS_FILE, trimmed);
|
|
76
|
+
}
|
|
77
|
+
/** Read kbot version from package.json (best-effort) */
|
|
78
|
+
function getKbotVersion() {
|
|
79
|
+
try {
|
|
80
|
+
// Walk up from this file to find package.json
|
|
81
|
+
const candidates = [
|
|
82
|
+
join(__dirname, '..', 'package.json'),
|
|
83
|
+
join(__dirname, '..', '..', 'package.json'),
|
|
84
|
+
];
|
|
85
|
+
for (const candidate of candidates) {
|
|
86
|
+
if (existsSync(candidate)) {
|
|
87
|
+
const pkg = JSON.parse(readFileSync(candidate, 'utf-8'));
|
|
88
|
+
if (pkg.name === '@kernel.chat/kbot')
|
|
89
|
+
return pkg.version;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
// Fall through
|
|
95
|
+
}
|
|
96
|
+
return 'unknown';
|
|
97
|
+
}
|
|
98
|
+
/** Count tools from the tools directory (best-effort) */
|
|
99
|
+
function getToolCount() {
|
|
100
|
+
try {
|
|
101
|
+
const toolsDir = join(__dirname, 'tools');
|
|
102
|
+
if (existsSync(toolsDir)) {
|
|
103
|
+
const { readdirSync } = require('node:fs');
|
|
104
|
+
return readdirSync(toolsDir).filter((f) => f.endsWith('.ts') || f.endsWith('.js')).length;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
// Fall through
|
|
109
|
+
}
|
|
110
|
+
return 60; // approximate default
|
|
111
|
+
}
|
|
112
|
+
/** Count agents from learning patterns */
|
|
113
|
+
function getAgentCount() {
|
|
114
|
+
try {
|
|
115
|
+
const patterns = loadJSON(PATTERNS_FILE, []);
|
|
116
|
+
const agents = new Set(patterns.map(p => p.agentUsed).filter(Boolean));
|
|
117
|
+
return Math.max(agents.size, 17); // at least the 17 specialists
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
return 17;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/** Detect project types from local patterns */
|
|
124
|
+
function detectProjectTypes() {
|
|
125
|
+
const patterns = loadJSON(PATTERNS_FILE, []);
|
|
126
|
+
const techCounts = new Map();
|
|
127
|
+
for (const p of patterns) {
|
|
128
|
+
if (Array.isArray(p.keywords)) {
|
|
129
|
+
for (const kw of p.keywords) {
|
|
130
|
+
techCounts.set(kw, (techCounts.get(kw) || 0) + 1);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return Array.from(techCounts.entries())
|
|
135
|
+
.sort((a, b) => b[1] - a[1])
|
|
136
|
+
.slice(0, 10)
|
|
137
|
+
.map(([kw]) => kw);
|
|
138
|
+
}
|
|
139
|
+
/** Generate a pattern dedup key */
|
|
140
|
+
function patternKey(p) {
|
|
141
|
+
const parts = [
|
|
142
|
+
p.type,
|
|
143
|
+
p.language || '',
|
|
144
|
+
p.framework || '',
|
|
145
|
+
...(p.toolsUsed || []).sort(),
|
|
146
|
+
...(p.keywords || []).sort(),
|
|
147
|
+
];
|
|
148
|
+
return parts.join(':').toLowerCase();
|
|
149
|
+
}
|
|
150
|
+
// ── Collective Network Class ──
|
|
151
|
+
export class CollectiveNetwork {
|
|
152
|
+
state;
|
|
153
|
+
loopTimer = null;
|
|
154
|
+
constructor() {
|
|
155
|
+
this.state = loadNetworkState();
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Register this kbot instance with the collective network.
|
|
159
|
+
* Sends device fingerprint, version, tool count, agent count, uptime.
|
|
160
|
+
* Receives network stats.
|
|
161
|
+
*/
|
|
162
|
+
async join() {
|
|
163
|
+
const fingerprint = getDeviceFingerprint();
|
|
164
|
+
const payload = {
|
|
165
|
+
device_fingerprint: fingerprint,
|
|
166
|
+
version: getKbotVersion(),
|
|
167
|
+
tool_count: getToolCount(),
|
|
168
|
+
agent_count: getAgentCount(),
|
|
169
|
+
uptime: Math.round(osUptime()),
|
|
170
|
+
platform: platform(),
|
|
171
|
+
arch: arch(),
|
|
172
|
+
cpus: cpus().length,
|
|
173
|
+
memory_gb: Math.round(totalmem() / (1024 ** 3)),
|
|
174
|
+
};
|
|
175
|
+
try {
|
|
176
|
+
const res = await fetch(`${COLLECTIVE_URL}/join`, {
|
|
177
|
+
method: 'POST',
|
|
178
|
+
headers: { 'Content-Type': 'application/json' },
|
|
179
|
+
body: JSON.stringify(payload),
|
|
180
|
+
signal: AbortSignal.timeout(NETWORK_TIMEOUT),
|
|
181
|
+
});
|
|
182
|
+
if (!res.ok) {
|
|
183
|
+
logNetwork({ event: 'join_failed', status: res.status });
|
|
184
|
+
return this.offlineStats();
|
|
185
|
+
}
|
|
186
|
+
const data = await res.json();
|
|
187
|
+
this.state.node_id = data.node_id || fingerprint;
|
|
188
|
+
this.state.joined_at = new Date().toISOString();
|
|
189
|
+
saveNetworkState(this.state);
|
|
190
|
+
logNetwork({ event: 'joined', node_id: this.state.node_id, total_nodes: data.total_nodes });
|
|
191
|
+
return {
|
|
192
|
+
total_nodes: data.total_nodes,
|
|
193
|
+
total_patterns: data.total_patterns,
|
|
194
|
+
your_contributions: this.state.total_contributed,
|
|
195
|
+
your_rank: 0,
|
|
196
|
+
network_health: data.network_health,
|
|
197
|
+
top_tools: [],
|
|
198
|
+
top_agents: [],
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
catch (err) {
|
|
202
|
+
logNetwork({ event: 'join_error', error: err.message });
|
|
203
|
+
return this.offlineStats();
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Anonymize local patterns (strip PII, file paths, usernames),
|
|
208
|
+
* send to collective endpoint,
|
|
209
|
+
* track contribution history.
|
|
210
|
+
*/
|
|
211
|
+
async contribute() {
|
|
212
|
+
const patterns = collectAnonymizedPatterns();
|
|
213
|
+
if (patterns.length === 0) {
|
|
214
|
+
return { patterns_contributed: 0, reputation_score: this.state.reputation_score };
|
|
215
|
+
}
|
|
216
|
+
const fingerprint = getDeviceFingerprint();
|
|
217
|
+
try {
|
|
218
|
+
const res = await fetch(`${COLLECTIVE_URL}/contribute`, {
|
|
219
|
+
method: 'POST',
|
|
220
|
+
headers: { 'Content-Type': 'application/json' },
|
|
221
|
+
body: JSON.stringify({
|
|
222
|
+
device_fingerprint: fingerprint,
|
|
223
|
+
patterns,
|
|
224
|
+
version: getKbotVersion(),
|
|
225
|
+
timestamp: new Date().toISOString(),
|
|
226
|
+
}),
|
|
227
|
+
signal: AbortSignal.timeout(NETWORK_TIMEOUT),
|
|
228
|
+
});
|
|
229
|
+
if (!res.ok) {
|
|
230
|
+
logNetwork({ event: 'contribute_failed', status: res.status });
|
|
231
|
+
return { patterns_contributed: 0, reputation_score: this.state.reputation_score };
|
|
232
|
+
}
|
|
233
|
+
const data = await res.json();
|
|
234
|
+
const accepted = data.accepted ?? patterns.length;
|
|
235
|
+
// Track contribution history
|
|
236
|
+
const contributions = loadContributions();
|
|
237
|
+
contributions.push({
|
|
238
|
+
timestamp: new Date().toISOString(),
|
|
239
|
+
patterns_sent: patterns.length,
|
|
240
|
+
accepted,
|
|
241
|
+
});
|
|
242
|
+
saveContributions(contributions);
|
|
243
|
+
// Update state
|
|
244
|
+
this.state.last_contribute = new Date().toISOString();
|
|
245
|
+
this.state.total_contributed += accepted;
|
|
246
|
+
this.state.reputation_score = data.reputation_score ?? this.state.reputation_score;
|
|
247
|
+
saveNetworkState(this.state);
|
|
248
|
+
logNetwork({ event: 'contributed', sent: patterns.length, accepted, reputation: this.state.reputation_score });
|
|
249
|
+
return {
|
|
250
|
+
patterns_contributed: accepted,
|
|
251
|
+
reputation_score: this.state.reputation_score,
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
catch (err) {
|
|
255
|
+
logNetwork({ event: 'contribute_error', error: err.message });
|
|
256
|
+
return { patterns_contributed: 0, reputation_score: this.state.reputation_score };
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Fetch top patterns from the collective (sorted by confidence * frequency).
|
|
261
|
+
* Filter for patterns relevant to this user's detected project types.
|
|
262
|
+
* Merge into local patterns with source="collective" tag.
|
|
263
|
+
* Deduplicate against existing patterns.
|
|
264
|
+
*/
|
|
265
|
+
async absorb() {
|
|
266
|
+
const projectTypes = detectProjectTypes();
|
|
267
|
+
const fingerprint = getDeviceFingerprint();
|
|
268
|
+
try {
|
|
269
|
+
const res = await fetch(`${COLLECTIVE_URL}/absorb`, {
|
|
270
|
+
method: 'POST',
|
|
271
|
+
headers: { 'Content-Type': 'application/json' },
|
|
272
|
+
body: JSON.stringify({
|
|
273
|
+
device_fingerprint: fingerprint,
|
|
274
|
+
project_types: projectTypes,
|
|
275
|
+
current_count: loadJSON(COLLECTIVE_PATTERNS_FILE, []).length,
|
|
276
|
+
}),
|
|
277
|
+
signal: AbortSignal.timeout(NETWORK_TIMEOUT),
|
|
278
|
+
});
|
|
279
|
+
if (!res.ok) {
|
|
280
|
+
logNetwork({ event: 'absorb_failed', status: res.status });
|
|
281
|
+
return { patterns_absorbed: 0, new_insights: [] };
|
|
282
|
+
}
|
|
283
|
+
const data = await res.json();
|
|
284
|
+
const remote = data.patterns;
|
|
285
|
+
if (!Array.isArray(remote) || remote.length === 0) {
|
|
286
|
+
return { patterns_absorbed: 0, new_insights: [] };
|
|
287
|
+
}
|
|
288
|
+
// Load existing collective patterns
|
|
289
|
+
const existing = loadJSON(COLLECTIVE_PATTERNS_FILE, []);
|
|
290
|
+
const existingMap = new Map();
|
|
291
|
+
for (const p of existing) {
|
|
292
|
+
existingMap.set(patternKey(p), p);
|
|
293
|
+
}
|
|
294
|
+
// Also load local patterns for dedup
|
|
295
|
+
const localPatterns = loadJSON(PATTERNS_FILE, []);
|
|
296
|
+
const localKeys = new Set(localPatterns.map(p => {
|
|
297
|
+
const kws = Array.isArray(p.keywords) ? p.keywords.sort() : [];
|
|
298
|
+
const tools = Array.isArray(p.toolSequence) ? p.toolSequence.sort() : [];
|
|
299
|
+
return [...kws, ...tools].join(':').toLowerCase();
|
|
300
|
+
}));
|
|
301
|
+
let absorbed = 0;
|
|
302
|
+
const insights = [];
|
|
303
|
+
// Filter for relevance: patterns whose keywords overlap with our project types
|
|
304
|
+
const projectTypeSet = new Set(projectTypes.map(t => t.toLowerCase()));
|
|
305
|
+
for (const p of remote) {
|
|
306
|
+
const key = patternKey(p);
|
|
307
|
+
// Skip if we already have this locally (dedup)
|
|
308
|
+
const simplifiedKey = [...(p.keywords || []).sort(), ...(p.toolsUsed || []).sort()].join(':').toLowerCase();
|
|
309
|
+
if (localKeys.has(simplifiedKey))
|
|
310
|
+
continue;
|
|
311
|
+
// Relevance filter: at least one keyword must match our project types,
|
|
312
|
+
// or pattern has no keywords (generic pattern — always useful)
|
|
313
|
+
const hasRelevance = p.keywords.length === 0 ||
|
|
314
|
+
p.keywords.some(k => projectTypeSet.has(k.toLowerCase()));
|
|
315
|
+
if (!hasRelevance)
|
|
316
|
+
continue;
|
|
317
|
+
// Tag with collective source
|
|
318
|
+
const taggedPattern = {
|
|
319
|
+
...p,
|
|
320
|
+
source: 'collective',
|
|
321
|
+
};
|
|
322
|
+
const existingPattern = existingMap.get(key);
|
|
323
|
+
if (!existingPattern) {
|
|
324
|
+
existingMap.set(key, taggedPattern);
|
|
325
|
+
absorbed++;
|
|
326
|
+
// Generate insight for high-confidence patterns
|
|
327
|
+
if (p.confidence > 0.8 && p.sampleCount > 5) {
|
|
328
|
+
const desc = [
|
|
329
|
+
p.language ? `${p.language}` : null,
|
|
330
|
+
p.framework ? `${p.framework}` : null,
|
|
331
|
+
p.toolsUsed.length > 0 ? `tools: ${p.toolsUsed.join(', ')}` : null,
|
|
332
|
+
].filter(Boolean).join(' ');
|
|
333
|
+
insights.push(`High-confidence pattern: ${p.type} (${desc}) — ${p.sampleCount} contributors`);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
else if (p.confidence > existingPattern.confidence) {
|
|
337
|
+
existingMap.set(key, taggedPattern);
|
|
338
|
+
absorbed++;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
// Save merged collective patterns (cap at 500)
|
|
342
|
+
const merged = Array.from(existingMap.values())
|
|
343
|
+
.sort((a, b) => (b.confidence * b.sampleCount) - (a.confidence * a.sampleCount))
|
|
344
|
+
.slice(0, 500);
|
|
345
|
+
saveJSON(COLLECTIVE_PATTERNS_FILE, merged);
|
|
346
|
+
// Update state
|
|
347
|
+
this.state.last_absorb = new Date().toISOString();
|
|
348
|
+
this.state.total_absorbed += absorbed;
|
|
349
|
+
saveNetworkState(this.state);
|
|
350
|
+
logNetwork({ event: 'absorbed', count: absorbed, insights: insights.length });
|
|
351
|
+
return { patterns_absorbed: absorbed, new_insights: insights };
|
|
352
|
+
}
|
|
353
|
+
catch (err) {
|
|
354
|
+
logNetwork({ event: 'absorb_error', error: err.message });
|
|
355
|
+
return { patterns_absorbed: 0, new_insights: [] };
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Get full network statistics.
|
|
360
|
+
*/
|
|
361
|
+
async getNetworkStats() {
|
|
362
|
+
const fingerprint = getDeviceFingerprint();
|
|
363
|
+
try {
|
|
364
|
+
const res = await fetch(`${COLLECTIVE_URL}/stats?node=${fingerprint}`, {
|
|
365
|
+
method: 'GET',
|
|
366
|
+
headers: { 'Content-Type': 'application/json' },
|
|
367
|
+
signal: AbortSignal.timeout(NETWORK_TIMEOUT),
|
|
368
|
+
});
|
|
369
|
+
if (!res.ok) {
|
|
370
|
+
return this.offlineStats();
|
|
371
|
+
}
|
|
372
|
+
const data = await res.json();
|
|
373
|
+
return {
|
|
374
|
+
total_nodes: data.total_nodes,
|
|
375
|
+
total_patterns: data.total_patterns,
|
|
376
|
+
your_contributions: data.your_contributions ?? this.state.total_contributed,
|
|
377
|
+
your_rank: data.your_rank ?? 0,
|
|
378
|
+
network_health: data.network_health ?? 1.0,
|
|
379
|
+
top_tools: data.top_tools ?? [],
|
|
380
|
+
top_agents: data.top_agents ?? [],
|
|
381
|
+
};
|
|
382
|
+
}
|
|
383
|
+
catch {
|
|
384
|
+
return this.offlineStats();
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* Get reputation score (0-100).
|
|
389
|
+
* Based on: patterns contributed, pattern quality, uptime.
|
|
390
|
+
*/
|
|
391
|
+
async getReputationScore() {
|
|
392
|
+
const fingerprint = getDeviceFingerprint();
|
|
393
|
+
try {
|
|
394
|
+
const res = await fetch(`${COLLECTIVE_URL}/reputation?node=${fingerprint}`, {
|
|
395
|
+
method: 'GET',
|
|
396
|
+
headers: { 'Content-Type': 'application/json' },
|
|
397
|
+
signal: AbortSignal.timeout(NETWORK_TIMEOUT),
|
|
398
|
+
});
|
|
399
|
+
if (!res.ok) {
|
|
400
|
+
return this.calculateLocalReputation();
|
|
401
|
+
}
|
|
402
|
+
const data = await res.json();
|
|
403
|
+
this.state.reputation_score = data.score ?? this.calculateLocalReputation();
|
|
404
|
+
saveNetworkState(this.state);
|
|
405
|
+
return this.state.reputation_score;
|
|
406
|
+
}
|
|
407
|
+
catch {
|
|
408
|
+
return this.calculateLocalReputation();
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Run contribute -> absorb -> stats on interval (default 1 hour).
|
|
413
|
+
* Logs each cycle to ~/.kbot/collective/network-log.jsonl.
|
|
414
|
+
*/
|
|
415
|
+
runCollectiveLoop(interval_ms) {
|
|
416
|
+
const interval = interval_ms ?? DEFAULT_LOOP_INTERVAL;
|
|
417
|
+
// Stop any existing loop
|
|
418
|
+
if (this.loopTimer) {
|
|
419
|
+
clearInterval(this.loopTimer);
|
|
420
|
+
}
|
|
421
|
+
// Run immediately, then on interval
|
|
422
|
+
const cycle = async () => {
|
|
423
|
+
const cycleStart = Date.now();
|
|
424
|
+
try {
|
|
425
|
+
const contributed = await this.contribute();
|
|
426
|
+
const absorbed = await this.absorb();
|
|
427
|
+
const stats = await this.getNetworkStats();
|
|
428
|
+
logNetwork({
|
|
429
|
+
event: 'cycle_complete',
|
|
430
|
+
contributed: contributed.patterns_contributed,
|
|
431
|
+
absorbed: absorbed.patterns_absorbed,
|
|
432
|
+
insights: absorbed.new_insights.length,
|
|
433
|
+
nodes: stats.total_nodes,
|
|
434
|
+
reputation: contributed.reputation_score,
|
|
435
|
+
duration_ms: Date.now() - cycleStart,
|
|
436
|
+
});
|
|
437
|
+
}
|
|
438
|
+
catch (err) {
|
|
439
|
+
logNetwork({
|
|
440
|
+
event: 'cycle_error',
|
|
441
|
+
error: err.message,
|
|
442
|
+
duration_ms: Date.now() - cycleStart,
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
};
|
|
446
|
+
// Fire first cycle
|
|
447
|
+
cycle().catch(() => { });
|
|
448
|
+
this.loopTimer = setInterval(() => {
|
|
449
|
+
cycle().catch(() => { });
|
|
450
|
+
}, interval);
|
|
451
|
+
// Unref so it doesn't prevent process exit
|
|
452
|
+
if (this.loopTimer && typeof this.loopTimer.unref === 'function') {
|
|
453
|
+
this.loopTimer.unref();
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
/** Stop the collective loop */
|
|
457
|
+
stopCollectiveLoop() {
|
|
458
|
+
if (this.loopTimer) {
|
|
459
|
+
clearInterval(this.loopTimer);
|
|
460
|
+
this.loopTimer = null;
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
// ── Private Helpers ──
|
|
464
|
+
offlineStats() {
|
|
465
|
+
const collectivePatterns = loadJSON(COLLECTIVE_PATTERNS_FILE, []);
|
|
466
|
+
return {
|
|
467
|
+
total_nodes: 0,
|
|
468
|
+
total_patterns: collectivePatterns.length,
|
|
469
|
+
your_contributions: this.state.total_contributed,
|
|
470
|
+
your_rank: 0,
|
|
471
|
+
network_health: 0,
|
|
472
|
+
top_tools: [],
|
|
473
|
+
top_agents: [],
|
|
474
|
+
};
|
|
475
|
+
}
|
|
476
|
+
/**
|
|
477
|
+
* Calculate a local reputation estimate when the network is unreachable.
|
|
478
|
+
* Score 0-100 based on contribution volume, pattern diversity, and uptime.
|
|
479
|
+
*/
|
|
480
|
+
calculateLocalReputation() {
|
|
481
|
+
const contributions = loadContributions();
|
|
482
|
+
const totalAccepted = contributions.reduce((sum, c) => sum + c.accepted, 0);
|
|
483
|
+
const localPatterns = loadJSON(PATTERNS_FILE, []);
|
|
484
|
+
const collectivePatterns = loadJSON(COLLECTIVE_PATTERNS_FILE, []);
|
|
485
|
+
// Volume score (0-40): based on total contributions
|
|
486
|
+
const volumeScore = Math.min(totalAccepted / 50, 1) * 40;
|
|
487
|
+
// Diversity score (0-30): based on variety of local patterns
|
|
488
|
+
const diversityScore = Math.min(localPatterns.length / 100, 1) * 30;
|
|
489
|
+
// Engagement score (0-30): based on how many collective patterns absorbed
|
|
490
|
+
const engagementScore = Math.min(collectivePatterns.length / 200, 1) * 30;
|
|
491
|
+
return Math.round(volumeScore + diversityScore + engagementScore);
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
// ── Standalone Functions ──
|
|
495
|
+
/**
|
|
496
|
+
* Search the collective for patterns matching a query.
|
|
497
|
+
* Returns relevant patterns and a summary.
|
|
498
|
+
*/
|
|
499
|
+
export async function getCollectiveInsight(query) {
|
|
500
|
+
try {
|
|
501
|
+
const res = await fetch(`${COLLECTIVE_URL}/insight`, {
|
|
502
|
+
method: 'POST',
|
|
503
|
+
headers: { 'Content-Type': 'application/json' },
|
|
504
|
+
body: JSON.stringify({
|
|
505
|
+
query,
|
|
506
|
+
device_fingerprint: getDeviceFingerprint(),
|
|
507
|
+
}),
|
|
508
|
+
signal: AbortSignal.timeout(NETWORK_TIMEOUT),
|
|
509
|
+
});
|
|
510
|
+
if (!res.ok) {
|
|
511
|
+
// Fallback: search local collective cache
|
|
512
|
+
return searchLocalCollective(query);
|
|
513
|
+
}
|
|
514
|
+
const data = await res.json();
|
|
515
|
+
return {
|
|
516
|
+
patterns: data.patterns ?? [],
|
|
517
|
+
summary: data.summary ?? 'No insights found.',
|
|
518
|
+
};
|
|
519
|
+
}
|
|
520
|
+
catch {
|
|
521
|
+
// Offline fallback: search cached collective patterns
|
|
522
|
+
return searchLocalCollective(query);
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
/**
|
|
526
|
+
* Publish a forged tool to the collective.
|
|
527
|
+
* Other kbot instances can discover and install it.
|
|
528
|
+
*/
|
|
529
|
+
export async function shareToolWithCollective(toolName) {
|
|
530
|
+
const fingerprint = getDeviceFingerprint();
|
|
531
|
+
// Load the forged tool definition from ~/.kbot/tools/
|
|
532
|
+
const toolPath = join(KBOT_DIR, 'tools', `${toolName}.json`);
|
|
533
|
+
if (!existsSync(toolPath)) {
|
|
534
|
+
logNetwork({ event: 'share_tool_not_found', tool: toolName });
|
|
535
|
+
return false;
|
|
536
|
+
}
|
|
537
|
+
let toolDef;
|
|
538
|
+
try {
|
|
539
|
+
toolDef = JSON.parse(readFileSync(toolPath, 'utf-8'));
|
|
540
|
+
}
|
|
541
|
+
catch {
|
|
542
|
+
logNetwork({ event: 'share_tool_parse_error', tool: toolName });
|
|
543
|
+
return false;
|
|
544
|
+
}
|
|
545
|
+
try {
|
|
546
|
+
const res = await fetch(`${COLLECTIVE_URL}/tools/share`, {
|
|
547
|
+
method: 'POST',
|
|
548
|
+
headers: { 'Content-Type': 'application/json' },
|
|
549
|
+
body: JSON.stringify({
|
|
550
|
+
device_fingerprint: fingerprint,
|
|
551
|
+
tool_name: toolName,
|
|
552
|
+
tool_definition: toolDef,
|
|
553
|
+
version: getKbotVersion(),
|
|
554
|
+
timestamp: new Date().toISOString(),
|
|
555
|
+
}),
|
|
556
|
+
signal: AbortSignal.timeout(NETWORK_TIMEOUT),
|
|
557
|
+
});
|
|
558
|
+
if (!res.ok) {
|
|
559
|
+
logNetwork({ event: 'share_tool_failed', tool: toolName, status: res.status });
|
|
560
|
+
return false;
|
|
561
|
+
}
|
|
562
|
+
logNetwork({ event: 'tool_shared', tool: toolName });
|
|
563
|
+
return true;
|
|
564
|
+
}
|
|
565
|
+
catch (err) {
|
|
566
|
+
logNetwork({ event: 'share_tool_error', tool: toolName, error: err.message });
|
|
567
|
+
return false;
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
/**
|
|
571
|
+
* Get the top 10 contributors by reputation.
|
|
572
|
+
*/
|
|
573
|
+
export async function getCollectiveLeaderboard() {
|
|
574
|
+
try {
|
|
575
|
+
const res = await fetch(`${COLLECTIVE_URL}/leaderboard`, {
|
|
576
|
+
method: 'GET',
|
|
577
|
+
headers: { 'Content-Type': 'application/json' },
|
|
578
|
+
signal: AbortSignal.timeout(NETWORK_TIMEOUT),
|
|
579
|
+
});
|
|
580
|
+
if (!res.ok)
|
|
581
|
+
return [];
|
|
582
|
+
const data = await res.json();
|
|
583
|
+
return data.leaderboard ?? [];
|
|
584
|
+
}
|
|
585
|
+
catch {
|
|
586
|
+
return [];
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
// ── Local Search Fallback ──
|
|
590
|
+
function searchLocalCollective(query) {
|
|
591
|
+
const patterns = loadJSON(COLLECTIVE_PATTERNS_FILE, []);
|
|
592
|
+
if (patterns.length === 0) {
|
|
593
|
+
return { patterns: [], summary: 'No collective patterns cached locally.' };
|
|
594
|
+
}
|
|
595
|
+
const queryTerms = query.toLowerCase()
|
|
596
|
+
.replace(/[^a-z0-9\s]/g, ' ')
|
|
597
|
+
.split(/\s+/)
|
|
598
|
+
.filter(w => w.length > 2);
|
|
599
|
+
if (queryTerms.length === 0) {
|
|
600
|
+
// Return top patterns by confidence
|
|
601
|
+
const top = patterns.slice(0, 10);
|
|
602
|
+
return { patterns: top, summary: `Showing top ${top.length} patterns from local cache.` };
|
|
603
|
+
}
|
|
604
|
+
// Score each pattern by keyword overlap with query
|
|
605
|
+
const scored = patterns.map(p => {
|
|
606
|
+
const allTerms = [
|
|
607
|
+
...(p.keywords || []),
|
|
608
|
+
p.language?.toLowerCase() || '',
|
|
609
|
+
p.framework?.toLowerCase() || '',
|
|
610
|
+
p.type?.toLowerCase() || '',
|
|
611
|
+
...(p.toolsUsed || []).map(t => t.toLowerCase()),
|
|
612
|
+
].filter(Boolean);
|
|
613
|
+
let score = 0;
|
|
614
|
+
for (const qt of queryTerms) {
|
|
615
|
+
for (const term of allTerms) {
|
|
616
|
+
if (term.includes(qt) || qt.includes(term)) {
|
|
617
|
+
score++;
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
return { pattern: p, score };
|
|
622
|
+
})
|
|
623
|
+
.filter(s => s.score > 0)
|
|
624
|
+
.sort((a, b) => b.score - a.score)
|
|
625
|
+
.slice(0, 10);
|
|
626
|
+
const matched = scored.map(s => s.pattern);
|
|
627
|
+
return {
|
|
628
|
+
patterns: matched,
|
|
629
|
+
summary: matched.length > 0
|
|
630
|
+
? `Found ${matched.length} relevant patterns in local collective cache.`
|
|
631
|
+
: 'No matching patterns in local cache. Connect to the network for broader search.',
|
|
632
|
+
};
|
|
633
|
+
}
|
|
634
|
+
//# sourceMappingURL=collective-network.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collective-network.js","sourceRoot":"","sources":["../src/collective-network.ts"],"names":[],"mappings":"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"}
|