@kernel.chat/kbot 2.8.0 → 2.9.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.
- package/dist/agent-protocol.d.ts +97 -0
- package/dist/agent-protocol.d.ts.map +1 -0
- package/dist/agent-protocol.js +618 -0
- package/dist/agent-protocol.js.map +1 -0
- package/dist/agent.d.ts +2 -0
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +1 -1
- package/dist/agent.js.map +1 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +17 -12
- package/dist/auth.js.map +1 -1
- package/dist/cli.js +166 -2
- package/dist/cli.js.map +1 -1
- package/dist/cloud-sync.d.ts.map +1 -1
- package/dist/cloud-sync.js +15 -4
- package/dist/cloud-sync.js.map +1 -1
- package/dist/confidence.d.ts +102 -0
- package/dist/confidence.d.ts.map +1 -0
- package/dist/confidence.js +696 -0
- package/dist/confidence.js.map +1 -0
- package/dist/ide/acp-server.js +5 -4
- package/dist/ide/acp-server.js.map +1 -1
- package/dist/ide/lsp-bridge.d.ts.map +1 -1
- package/dist/ide/lsp-bridge.js +11 -5
- package/dist/ide/lsp-bridge.js.map +1 -1
- package/dist/intentionality.d.ts +139 -0
- package/dist/intentionality.d.ts.map +1 -0
- package/dist/intentionality.js +1092 -0
- package/dist/intentionality.js.map +1 -0
- package/dist/planner.d.ts.map +1 -1
- package/dist/planner.js +3 -2
- package/dist/planner.js.map +1 -1
- package/dist/reasoning.d.ts +100 -0
- package/dist/reasoning.d.ts.map +1 -0
- package/dist/reasoning.js +1292 -0
- package/dist/reasoning.js.map +1 -0
- package/dist/streaming.d.ts.map +1 -1
- package/dist/streaming.js +18 -2
- package/dist/streaming.js.map +1 -1
- package/dist/temporal.d.ts +133 -0
- package/dist/temporal.d.ts.map +1 -0
- package/dist/temporal.js +778 -0
- package/dist/temporal.js.map +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +30 -10
- package/dist/tools/index.js.map +1 -1
- package/dist/ui.js +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,618 @@
|
|
|
1
|
+
// K:BOT Agent Collaboration Protocol
|
|
2
|
+
//
|
|
3
|
+
// Four interlocking systems for multi-agent collaboration:
|
|
4
|
+
// 1. Handoff Protocol — structured agent-to-agent transitions
|
|
5
|
+
// 2. Shared Working Memory (Blackboard) — cross-agent whiteboard
|
|
6
|
+
// 3. Negotiation — multi-agent disagreement resolution
|
|
7
|
+
// 4. Trust Delegation — per-agent trust scores by domain
|
|
8
|
+
//
|
|
9
|
+
// All systems are in-memory per-session except trust profiles,
|
|
10
|
+
// which persist to ~/.kbot/trust.json for cross-session learning.
|
|
11
|
+
import { randomBytes } from 'crypto';
|
|
12
|
+
import { readFileSync, writeFileSync, mkdirSync } from 'fs';
|
|
13
|
+
import { join } from 'path';
|
|
14
|
+
import { homedir } from 'os';
|
|
15
|
+
import { registerTool } from './tools/index.js';
|
|
16
|
+
// ── Utilities ──
|
|
17
|
+
function shortId() {
|
|
18
|
+
return randomBytes(4).toString('hex');
|
|
19
|
+
}
|
|
20
|
+
function now() {
|
|
21
|
+
return new Date().toISOString();
|
|
22
|
+
}
|
|
23
|
+
const TRUST_FILE = join(homedir(), '.kbot', 'trust.json');
|
|
24
|
+
const handoffs = new Map();
|
|
25
|
+
/** Create a handoff request from one agent to another */
|
|
26
|
+
export function createHandoff(from, to, reason, context, artifacts = [], priority = 'normal') {
|
|
27
|
+
const handoff = {
|
|
28
|
+
id: shortId(),
|
|
29
|
+
from,
|
|
30
|
+
to,
|
|
31
|
+
reason,
|
|
32
|
+
context,
|
|
33
|
+
artifacts,
|
|
34
|
+
priority,
|
|
35
|
+
status: 'pending',
|
|
36
|
+
created: now(),
|
|
37
|
+
updated: now(),
|
|
38
|
+
};
|
|
39
|
+
handoffs.set(handoff.id, handoff);
|
|
40
|
+
return handoff;
|
|
41
|
+
}
|
|
42
|
+
/** Accept a pending handoff */
|
|
43
|
+
export function acceptHandoff(id) {
|
|
44
|
+
const h = handoffs.get(id);
|
|
45
|
+
if (!h)
|
|
46
|
+
throw new Error(`Handoff ${id} not found`);
|
|
47
|
+
if (h.status !== 'pending')
|
|
48
|
+
throw new Error(`Handoff ${id} is ${h.status}, cannot accept`);
|
|
49
|
+
h.status = 'accepted';
|
|
50
|
+
h.updated = now();
|
|
51
|
+
return h;
|
|
52
|
+
}
|
|
53
|
+
/** Reject a pending handoff with a reason */
|
|
54
|
+
export function rejectHandoff(id, reason) {
|
|
55
|
+
const h = handoffs.get(id);
|
|
56
|
+
if (!h)
|
|
57
|
+
throw new Error(`Handoff ${id} not found`);
|
|
58
|
+
if (h.status !== 'pending')
|
|
59
|
+
throw new Error(`Handoff ${id} is ${h.status}, cannot reject`);
|
|
60
|
+
h.status = 'rejected';
|
|
61
|
+
h.rejectionReason = reason;
|
|
62
|
+
h.updated = now();
|
|
63
|
+
return h;
|
|
64
|
+
}
|
|
65
|
+
/** Mark a handoff as completed with a result */
|
|
66
|
+
export function completeHandoff(id, result) {
|
|
67
|
+
const h = handoffs.get(id);
|
|
68
|
+
if (!h)
|
|
69
|
+
throw new Error(`Handoff ${id} not found`);
|
|
70
|
+
if (h.status !== 'accepted')
|
|
71
|
+
throw new Error(`Handoff ${id} is ${h.status}, must be accepted first`);
|
|
72
|
+
h.status = 'completed';
|
|
73
|
+
h.result = result;
|
|
74
|
+
h.updated = now();
|
|
75
|
+
// Record in trust system: completing a handoff is a success signal
|
|
76
|
+
updateTrust(h.to, 'handoff', true);
|
|
77
|
+
return h;
|
|
78
|
+
}
|
|
79
|
+
/** Get all pending handoffs, optionally filtered by target agent */
|
|
80
|
+
export function getActiveHandoffs(agentId) {
|
|
81
|
+
const active = [];
|
|
82
|
+
for (const h of handoffs.values()) {
|
|
83
|
+
if (h.status !== 'pending')
|
|
84
|
+
continue;
|
|
85
|
+
if (agentId && h.to !== agentId)
|
|
86
|
+
continue;
|
|
87
|
+
active.push(h);
|
|
88
|
+
}
|
|
89
|
+
return active.sort((a, b) => {
|
|
90
|
+
const priorityOrder = { critical: 0, high: 1, normal: 2, low: 3 };
|
|
91
|
+
return priorityOrder[a.priority] - priorityOrder[b.priority];
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
/** Get full handoff history for analysis */
|
|
95
|
+
export function getHandoffHistory() {
|
|
96
|
+
return Array.from(handoffs.values()).sort((a, b) => new Date(b.created).getTime() - new Date(a.created).getTime());
|
|
97
|
+
}
|
|
98
|
+
const blackboard = { entries: new Map() };
|
|
99
|
+
const subscriptionCallbacks = new Map();
|
|
100
|
+
/** Write an entry to the shared blackboard */
|
|
101
|
+
export function blackboardWrite(key, value, author, type, confidence = 1.0) {
|
|
102
|
+
const existing = blackboard.entries.get(key);
|
|
103
|
+
const subscribers = existing?.subscribers ?? [];
|
|
104
|
+
const entry = {
|
|
105
|
+
key,
|
|
106
|
+
value,
|
|
107
|
+
author,
|
|
108
|
+
type,
|
|
109
|
+
confidence: Math.max(0, Math.min(1, confidence)),
|
|
110
|
+
timestamp: now(),
|
|
111
|
+
subscribers,
|
|
112
|
+
};
|
|
113
|
+
blackboard.entries.set(key, entry);
|
|
114
|
+
// Notify subscribers
|
|
115
|
+
const callbacks = subscriptionCallbacks.get(key);
|
|
116
|
+
if (callbacks) {
|
|
117
|
+
for (const cb of callbacks) {
|
|
118
|
+
try {
|
|
119
|
+
cb(entry);
|
|
120
|
+
}
|
|
121
|
+
catch { /* subscriber errors don't propagate */ }
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return entry;
|
|
125
|
+
}
|
|
126
|
+
/** Read an entry from the blackboard */
|
|
127
|
+
export function blackboardRead(key) {
|
|
128
|
+
return blackboard.entries.get(key);
|
|
129
|
+
}
|
|
130
|
+
/** Query all entries, optionally filtered by type */
|
|
131
|
+
export function blackboardQuery(type) {
|
|
132
|
+
const entries = Array.from(blackboard.entries.values());
|
|
133
|
+
if (!type)
|
|
134
|
+
return entries;
|
|
135
|
+
return entries.filter(e => e.type === type);
|
|
136
|
+
}
|
|
137
|
+
/** Subscribe an agent to changes on a blackboard key */
|
|
138
|
+
export function blackboardSubscribe(key, agentId, callback) {
|
|
139
|
+
// Track subscriber in the entry
|
|
140
|
+
const entry = blackboard.entries.get(key);
|
|
141
|
+
if (entry && !entry.subscribers.includes(agentId)) {
|
|
142
|
+
entry.subscribers.push(agentId);
|
|
143
|
+
}
|
|
144
|
+
// Register callback if provided
|
|
145
|
+
if (callback) {
|
|
146
|
+
const existing = subscriptionCallbacks.get(key) ?? [];
|
|
147
|
+
existing.push(callback);
|
|
148
|
+
subscriptionCallbacks.set(key, existing);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/** Get all decision-type entries (consensus view) */
|
|
152
|
+
export function blackboardGetDecisions() {
|
|
153
|
+
return blackboardQuery('decision');
|
|
154
|
+
}
|
|
155
|
+
/** Clear the entire blackboard for a new task */
|
|
156
|
+
export function blackboardClear() {
|
|
157
|
+
blackboard.entries.clear();
|
|
158
|
+
subscriptionCallbacks.clear();
|
|
159
|
+
}
|
|
160
|
+
const proposals = new Map();
|
|
161
|
+
/** Propose an approach for multi-agent negotiation */
|
|
162
|
+
export function propose(author, description, rationale) {
|
|
163
|
+
const proposal = {
|
|
164
|
+
id: shortId(),
|
|
165
|
+
author,
|
|
166
|
+
description,
|
|
167
|
+
rationale,
|
|
168
|
+
votes: new Map(),
|
|
169
|
+
status: 'open',
|
|
170
|
+
created: now(),
|
|
171
|
+
};
|
|
172
|
+
// Author implicitly agrees with their own proposal
|
|
173
|
+
proposal.votes.set(author, { vote: 'agree' });
|
|
174
|
+
proposals.set(proposal.id, proposal);
|
|
175
|
+
return proposal;
|
|
176
|
+
}
|
|
177
|
+
/** Cast a vote on a proposal */
|
|
178
|
+
export function vote(proposalId, agentId, v, reason) {
|
|
179
|
+
const p = proposals.get(proposalId);
|
|
180
|
+
if (!p)
|
|
181
|
+
throw new Error(`Proposal ${proposalId} not found`);
|
|
182
|
+
if (p.status !== 'open')
|
|
183
|
+
throw new Error(`Proposal ${proposalId} is ${p.status}, voting closed`);
|
|
184
|
+
p.votes.set(agentId, { vote: v, reason });
|
|
185
|
+
return p;
|
|
186
|
+
}
|
|
187
|
+
/** Resolve a proposal: majority wins, trust-weighted tiebreaking */
|
|
188
|
+
export function resolveProposal(proposalId) {
|
|
189
|
+
const p = proposals.get(proposalId);
|
|
190
|
+
if (!p)
|
|
191
|
+
throw new Error(`Proposal ${proposalId} not found`);
|
|
192
|
+
if (p.status !== 'open')
|
|
193
|
+
throw new Error(`Proposal ${proposalId} is already ${p.status}`);
|
|
194
|
+
let agrees = 0;
|
|
195
|
+
let disagrees = 0;
|
|
196
|
+
for (const [, { vote: v }] of p.votes) {
|
|
197
|
+
if (v === 'agree')
|
|
198
|
+
agrees++;
|
|
199
|
+
else if (v === 'disagree')
|
|
200
|
+
disagrees++;
|
|
201
|
+
// abstain doesn't count
|
|
202
|
+
}
|
|
203
|
+
if (agrees > disagrees) {
|
|
204
|
+
p.status = 'accepted';
|
|
205
|
+
p.resolution = `Accepted: ${agrees} agree, ${disagrees} disagree`;
|
|
206
|
+
}
|
|
207
|
+
else if (disagrees > agrees) {
|
|
208
|
+
p.status = 'rejected';
|
|
209
|
+
p.resolution = `Rejected: ${disagrees} disagree, ${agrees} agree`;
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
// Tie — use trust-weighted tiebreaking
|
|
213
|
+
let agreeWeight = 0;
|
|
214
|
+
let disagreeWeight = 0;
|
|
215
|
+
for (const [agentId, { vote: v }] of p.votes) {
|
|
216
|
+
if (v === 'abstain')
|
|
217
|
+
continue;
|
|
218
|
+
const trust = getTrust(agentId);
|
|
219
|
+
if (v === 'agree')
|
|
220
|
+
agreeWeight += trust;
|
|
221
|
+
else
|
|
222
|
+
disagreeWeight += trust;
|
|
223
|
+
}
|
|
224
|
+
if (agreeWeight >= disagreeWeight) {
|
|
225
|
+
p.status = 'accepted';
|
|
226
|
+
p.resolution = `Accepted by trust-weighted tiebreak: agree=${agreeWeight.toFixed(2)}, disagree=${disagreeWeight.toFixed(2)}`;
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
p.status = 'rejected';
|
|
230
|
+
p.resolution = `Rejected by trust-weighted tiebreak: disagree=${disagreeWeight.toFixed(2)}, agree=${agreeWeight.toFixed(2)}`;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
return p;
|
|
234
|
+
}
|
|
235
|
+
/** Get consensus state of all proposals */
|
|
236
|
+
export function getConsensus() {
|
|
237
|
+
return Array.from(proposals.values()).sort((a, b) => new Date(b.created).getTime() - new Date(a.created).getTime());
|
|
238
|
+
}
|
|
239
|
+
const trustProfiles = new Map();
|
|
240
|
+
let trustLoaded = false;
|
|
241
|
+
const DEFAULT_TRUST = 0.5;
|
|
242
|
+
const TRUST_INCREMENT = 0.05;
|
|
243
|
+
const TRUST_DECREMENT = 0.10;
|
|
244
|
+
const MAX_HISTORY = 100;
|
|
245
|
+
/** Load trust profiles from ~/.kbot/trust.json */
|
|
246
|
+
function loadTrust() {
|
|
247
|
+
if (trustLoaded)
|
|
248
|
+
return;
|
|
249
|
+
trustLoaded = true;
|
|
250
|
+
try {
|
|
251
|
+
const data = readFileSync(TRUST_FILE, 'utf-8');
|
|
252
|
+
const parsed = JSON.parse(data);
|
|
253
|
+
for (const p of parsed) {
|
|
254
|
+
trustProfiles.set(p.agentId, {
|
|
255
|
+
agentId: p.agentId,
|
|
256
|
+
domains: new Map(Object.entries(p.domains)),
|
|
257
|
+
overall: p.overall,
|
|
258
|
+
history: p.history ?? [],
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
catch {
|
|
263
|
+
// File doesn't exist or is invalid — start fresh
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
/** Save trust profiles to ~/.kbot/trust.json */
|
|
267
|
+
function saveTrust() {
|
|
268
|
+
const serializable = Array.from(trustProfiles.values()).map(p => ({
|
|
269
|
+
agentId: p.agentId,
|
|
270
|
+
domains: Object.fromEntries(p.domains),
|
|
271
|
+
overall: p.overall,
|
|
272
|
+
history: p.history.slice(-MAX_HISTORY),
|
|
273
|
+
}));
|
|
274
|
+
try {
|
|
275
|
+
mkdirSync(join(homedir(), '.kbot'), { recursive: true });
|
|
276
|
+
writeFileSync(TRUST_FILE, JSON.stringify(serializable, null, 2));
|
|
277
|
+
}
|
|
278
|
+
catch {
|
|
279
|
+
// Best-effort persistence — don't crash on write failure
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
/** Get or create a trust profile for an agent */
|
|
283
|
+
function getOrCreateProfile(agentId) {
|
|
284
|
+
loadTrust();
|
|
285
|
+
let profile = trustProfiles.get(agentId);
|
|
286
|
+
if (!profile) {
|
|
287
|
+
profile = {
|
|
288
|
+
agentId,
|
|
289
|
+
domains: new Map(),
|
|
290
|
+
overall: DEFAULT_TRUST,
|
|
291
|
+
history: [],
|
|
292
|
+
};
|
|
293
|
+
trustProfiles.set(agentId, profile);
|
|
294
|
+
}
|
|
295
|
+
return profile;
|
|
296
|
+
}
|
|
297
|
+
/** Get trust score for an agent, optionally in a specific domain */
|
|
298
|
+
export function getTrust(agentId, domain) {
|
|
299
|
+
const profile = getOrCreateProfile(agentId);
|
|
300
|
+
if (domain) {
|
|
301
|
+
return profile.domains.get(domain) ?? DEFAULT_TRUST;
|
|
302
|
+
}
|
|
303
|
+
return profile.overall;
|
|
304
|
+
}
|
|
305
|
+
/** Update trust for an agent after task completion */
|
|
306
|
+
export function updateTrust(agentId, domain, success) {
|
|
307
|
+
const profile = getOrCreateProfile(agentId);
|
|
308
|
+
// Update domain-specific trust
|
|
309
|
+
const currentDomain = profile.domains.get(domain) ?? DEFAULT_TRUST;
|
|
310
|
+
const newDomain = success
|
|
311
|
+
? Math.min(1.0, currentDomain + TRUST_INCREMENT)
|
|
312
|
+
: Math.max(0.0, currentDomain - TRUST_DECREMENT);
|
|
313
|
+
profile.domains.set(domain, newDomain);
|
|
314
|
+
// Recalculate overall trust as average of all domain scores
|
|
315
|
+
const domainValues = Array.from(profile.domains.values());
|
|
316
|
+
profile.overall = domainValues.reduce((sum, v) => sum + v, 0) / domainValues.length;
|
|
317
|
+
// Record history
|
|
318
|
+
profile.history.push({
|
|
319
|
+
task: domain,
|
|
320
|
+
success,
|
|
321
|
+
domain,
|
|
322
|
+
timestamp: now(),
|
|
323
|
+
});
|
|
324
|
+
// Trim history to prevent unbounded growth
|
|
325
|
+
if (profile.history.length > MAX_HISTORY) {
|
|
326
|
+
profile.history = profile.history.slice(-MAX_HISTORY);
|
|
327
|
+
}
|
|
328
|
+
saveTrust();
|
|
329
|
+
}
|
|
330
|
+
/** Get the most trusted agent for a specific domain */
|
|
331
|
+
export function getMostTrusted(domain) {
|
|
332
|
+
loadTrust();
|
|
333
|
+
let best = null;
|
|
334
|
+
for (const profile of trustProfiles.values()) {
|
|
335
|
+
const score = profile.domains.get(domain) ?? DEFAULT_TRUST;
|
|
336
|
+
if (!best || score > best.trust) {
|
|
337
|
+
best = { agentId: profile.agentId, trust: score };
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
return best;
|
|
341
|
+
}
|
|
342
|
+
/** Get the full trust matrix for all agents */
|
|
343
|
+
export function getTrustReport() {
|
|
344
|
+
loadTrust();
|
|
345
|
+
if (trustProfiles.size === 0) {
|
|
346
|
+
return 'No trust data recorded yet.';
|
|
347
|
+
}
|
|
348
|
+
const lines = ['Agent Trust Report', '─'.repeat(50)];
|
|
349
|
+
for (const profile of trustProfiles.values()) {
|
|
350
|
+
lines.push(`\n${profile.agentId} (overall: ${profile.overall.toFixed(2)})`);
|
|
351
|
+
if (profile.domains.size > 0) {
|
|
352
|
+
const sorted = Array.from(profile.domains.entries()).sort((a, b) => b[1] - a[1]);
|
|
353
|
+
for (const [domain, score] of sorted) {
|
|
354
|
+
const bar = '█'.repeat(Math.round(score * 10)) + '░'.repeat(10 - Math.round(score * 10));
|
|
355
|
+
lines.push(` ${domain.padEnd(15)} ${bar} ${score.toFixed(2)}`);
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
const recentHistory = profile.history.slice(-5);
|
|
359
|
+
if (recentHistory.length > 0) {
|
|
360
|
+
lines.push(` Recent: ${recentHistory.map(h => h.success ? '+' : '-').join('')}`);
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
return lines.join('\n');
|
|
364
|
+
}
|
|
365
|
+
// ── Tool Registration ──
|
|
366
|
+
export function registerAgentProtocolTools() {
|
|
367
|
+
registerTool({
|
|
368
|
+
name: 'agent_handoff',
|
|
369
|
+
description: 'Create a handoff to transfer work to another agent. Includes context, artifacts, and priority. The receiving agent can accept or reject. Use this when a task is better suited for a different specialist.',
|
|
370
|
+
parameters: {
|
|
371
|
+
from: { type: 'string', description: 'Agent ID initiating the handoff', required: true },
|
|
372
|
+
to: { type: 'string', description: 'Target agent ID to hand off to (e.g., coder, researcher, writer, analyst, guardian)', required: true },
|
|
373
|
+
reason: { type: 'string', description: 'Why this handoff is needed', required: true },
|
|
374
|
+
context: { type: 'string', description: 'What the receiving agent needs to know to continue the work', required: true },
|
|
375
|
+
artifacts: { type: 'string', description: 'Comma-separated file paths or data keys to pass along' },
|
|
376
|
+
priority: { type: 'string', description: 'Priority: low, normal, high, critical (default: normal)' },
|
|
377
|
+
},
|
|
378
|
+
tier: 'free',
|
|
379
|
+
async execute(args) {
|
|
380
|
+
const from = String(args.from);
|
|
381
|
+
const to = String(args.to);
|
|
382
|
+
const reason = String(args.reason);
|
|
383
|
+
const context = String(args.context);
|
|
384
|
+
const artifacts = args.artifacts ? String(args.artifacts).split(',').map(s => s.trim()) : [];
|
|
385
|
+
const priority = (['low', 'normal', 'high', 'critical'].includes(String(args.priority))
|
|
386
|
+
? String(args.priority)
|
|
387
|
+
: 'normal');
|
|
388
|
+
const handoff = createHandoff(from, to, reason, context, artifacts, priority);
|
|
389
|
+
const lines = [
|
|
390
|
+
`Handoff created: ${handoff.id}`,
|
|
391
|
+
` ${from} → ${to} [${priority}]`,
|
|
392
|
+
` Reason: ${reason}`,
|
|
393
|
+
` Context: ${context.slice(0, 200)}${context.length > 200 ? '...' : ''}`,
|
|
394
|
+
];
|
|
395
|
+
if (artifacts.length > 0) {
|
|
396
|
+
lines.push(` Artifacts: ${artifacts.join(', ')}`);
|
|
397
|
+
}
|
|
398
|
+
// Show active handoffs
|
|
399
|
+
const pending = getActiveHandoffs();
|
|
400
|
+
if (pending.length > 1) {
|
|
401
|
+
lines.push(`\n${pending.length} handoffs pending.`);
|
|
402
|
+
}
|
|
403
|
+
return lines.join('\n');
|
|
404
|
+
},
|
|
405
|
+
});
|
|
406
|
+
registerTool({
|
|
407
|
+
name: 'blackboard_write',
|
|
408
|
+
description: 'Write to the shared agent blackboard (working memory). Any agent can write facts, hypotheses, decisions, artifacts, or questions. Other agents can read these to coordinate without direct communication.',
|
|
409
|
+
parameters: {
|
|
410
|
+
key: { type: 'string', description: 'Key to write (e.g., "architecture_decision", "security_finding")', required: true },
|
|
411
|
+
value: { type: 'string', description: 'Value to store (will be JSON-parsed if valid JSON, otherwise stored as string)', required: true },
|
|
412
|
+
type: { type: 'string', description: 'Entry type: fact, hypothesis, decision, artifact, question (default: fact)' },
|
|
413
|
+
confidence: { type: 'string', description: 'Confidence score 0-1 (default: 1.0)' },
|
|
414
|
+
author: { type: 'string', description: 'Agent ID writing this entry (default: kernel)' },
|
|
415
|
+
},
|
|
416
|
+
tier: 'free',
|
|
417
|
+
async execute(args) {
|
|
418
|
+
const key = String(args.key);
|
|
419
|
+
const rawValue = String(args.value);
|
|
420
|
+
const type = (['fact', 'hypothesis', 'decision', 'artifact', 'question'].includes(String(args.type))
|
|
421
|
+
? String(args.type)
|
|
422
|
+
: 'fact');
|
|
423
|
+
const confidence = args.confidence ? parseFloat(String(args.confidence)) : 1.0;
|
|
424
|
+
const author = args.author ? String(args.author) : 'kernel';
|
|
425
|
+
// Try to parse as JSON for structured data
|
|
426
|
+
let value = rawValue;
|
|
427
|
+
try {
|
|
428
|
+
value = JSON.parse(rawValue);
|
|
429
|
+
}
|
|
430
|
+
catch {
|
|
431
|
+
// Keep as string
|
|
432
|
+
}
|
|
433
|
+
const entry = blackboardWrite(key, value, author, type, confidence);
|
|
434
|
+
const subscriberInfo = entry.subscribers.length > 0
|
|
435
|
+
? ` (notifying: ${entry.subscribers.join(', ')})`
|
|
436
|
+
: '';
|
|
437
|
+
return `Blackboard [${type}] ${key} = ${typeof value === 'string' ? value.slice(0, 200) : JSON.stringify(value).slice(0, 200)}${subscriberInfo}\nAuthor: ${author} | Confidence: ${entry.confidence.toFixed(2)} | ${entry.timestamp}`;
|
|
438
|
+
},
|
|
439
|
+
});
|
|
440
|
+
registerTool({
|
|
441
|
+
name: 'blackboard_read',
|
|
442
|
+
description: 'Read from the shared agent blackboard. Query a specific key or list all entries filtered by type. Use this to see what other agents have written and coordinate work.',
|
|
443
|
+
parameters: {
|
|
444
|
+
key: { type: 'string', description: 'Specific key to read. If omitted, returns all entries.' },
|
|
445
|
+
type: { type: 'string', description: 'Filter by type: fact, hypothesis, decision, artifact, question' },
|
|
446
|
+
},
|
|
447
|
+
tier: 'free',
|
|
448
|
+
async execute(args) {
|
|
449
|
+
const key = args.key ? String(args.key) : undefined;
|
|
450
|
+
const type = args.type ? String(args.type) : undefined;
|
|
451
|
+
if (key) {
|
|
452
|
+
const entry = blackboardRead(key);
|
|
453
|
+
if (!entry)
|
|
454
|
+
return `Blackboard: key "${key}" not found.`;
|
|
455
|
+
const valueStr = typeof entry.value === 'string'
|
|
456
|
+
? entry.value
|
|
457
|
+
: JSON.stringify(entry.value, null, 2);
|
|
458
|
+
return [
|
|
459
|
+
`Key: ${entry.key}`,
|
|
460
|
+
`Type: ${entry.type} | Confidence: ${entry.confidence.toFixed(2)}`,
|
|
461
|
+
`Author: ${entry.author} | Updated: ${entry.timestamp}`,
|
|
462
|
+
`Subscribers: ${entry.subscribers.length > 0 ? entry.subscribers.join(', ') : 'none'}`,
|
|
463
|
+
`Value:\n${valueStr}`,
|
|
464
|
+
].join('\n');
|
|
465
|
+
}
|
|
466
|
+
const entries = blackboardQuery(type);
|
|
467
|
+
if (entries.length === 0) {
|
|
468
|
+
return type ? `No ${type} entries on the blackboard.` : 'Blackboard is empty.';
|
|
469
|
+
}
|
|
470
|
+
const lines = [`Blackboard: ${entries.length} entries${type ? ` (type: ${type})` : ''}`];
|
|
471
|
+
for (const e of entries) {
|
|
472
|
+
const valuePreview = typeof e.value === 'string'
|
|
473
|
+
? e.value.slice(0, 80)
|
|
474
|
+
: JSON.stringify(e.value).slice(0, 80);
|
|
475
|
+
lines.push(` [${e.type}] ${e.key} = ${valuePreview} (by ${e.author}, conf: ${e.confidence.toFixed(2)})`);
|
|
476
|
+
}
|
|
477
|
+
return lines.join('\n');
|
|
478
|
+
},
|
|
479
|
+
});
|
|
480
|
+
registerTool({
|
|
481
|
+
name: 'agent_propose',
|
|
482
|
+
description: 'Propose an approach for multi-agent negotiation. Other agents can vote agree/disagree/abstain. Use resolve to determine the outcome. Ties are broken by trust scores.',
|
|
483
|
+
parameters: {
|
|
484
|
+
action: { type: 'string', description: 'Action: propose, vote, resolve, or status', required: true },
|
|
485
|
+
author: { type: 'string', description: 'Agent ID (for propose or vote)', required: true },
|
|
486
|
+
description: { type: 'string', description: 'What is being proposed (for propose action)' },
|
|
487
|
+
rationale: { type: 'string', description: 'Why this approach (for propose action)' },
|
|
488
|
+
proposal_id: { type: 'string', description: 'Proposal ID (for vote or resolve)' },
|
|
489
|
+
vote: { type: 'string', description: 'Vote: agree, disagree, or abstain (for vote action)' },
|
|
490
|
+
reason: { type: 'string', description: 'Reason for the vote (for vote action)' },
|
|
491
|
+
},
|
|
492
|
+
tier: 'free',
|
|
493
|
+
async execute(args) {
|
|
494
|
+
const action = String(args.action);
|
|
495
|
+
const author = String(args.author);
|
|
496
|
+
switch (action) {
|
|
497
|
+
case 'propose': {
|
|
498
|
+
const description = String(args.description || '');
|
|
499
|
+
const rationale = String(args.rationale || '');
|
|
500
|
+
if (!description)
|
|
501
|
+
return 'Error: description is required for propose action';
|
|
502
|
+
if (!rationale)
|
|
503
|
+
return 'Error: rationale is required for propose action';
|
|
504
|
+
const p = propose(author, description, rationale);
|
|
505
|
+
return [
|
|
506
|
+
`Proposal ${p.id} created by ${author}`,
|
|
507
|
+
` "${description}"`,
|
|
508
|
+
` Rationale: ${rationale}`,
|
|
509
|
+
` Status: open (awaiting votes)`,
|
|
510
|
+
].join('\n');
|
|
511
|
+
}
|
|
512
|
+
case 'vote': {
|
|
513
|
+
const proposalId = String(args.proposal_id || '');
|
|
514
|
+
const v = String(args.vote || '');
|
|
515
|
+
if (!proposalId)
|
|
516
|
+
return 'Error: proposal_id is required for vote action';
|
|
517
|
+
if (!['agree', 'disagree', 'abstain'].includes(v)) {
|
|
518
|
+
return 'Error: vote must be agree, disagree, or abstain';
|
|
519
|
+
}
|
|
520
|
+
try {
|
|
521
|
+
const p = vote(proposalId, author, v, args.reason ? String(args.reason) : undefined);
|
|
522
|
+
const tally = { agree: 0, disagree: 0, abstain: 0 };
|
|
523
|
+
for (const [, { vote: pv }] of p.votes)
|
|
524
|
+
tally[pv]++;
|
|
525
|
+
return `Vote recorded: ${author} → ${v} on proposal ${proposalId}\n Tally: ${tally.agree} agree, ${tally.disagree} disagree, ${tally.abstain} abstain`;
|
|
526
|
+
}
|
|
527
|
+
catch (err) {
|
|
528
|
+
return `Error: ${err instanceof Error ? err.message : String(err)}`;
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
case 'resolve': {
|
|
532
|
+
const proposalId = String(args.proposal_id || '');
|
|
533
|
+
if (!proposalId)
|
|
534
|
+
return 'Error: proposal_id is required for resolve action';
|
|
535
|
+
try {
|
|
536
|
+
const p = resolveProposal(proposalId);
|
|
537
|
+
return [
|
|
538
|
+
`Proposal ${p.id}: ${p.status.toUpperCase()}`,
|
|
539
|
+
` "${p.description}"`,
|
|
540
|
+
` ${p.resolution}`,
|
|
541
|
+
].join('\n');
|
|
542
|
+
}
|
|
543
|
+
catch (err) {
|
|
544
|
+
return `Error: ${err instanceof Error ? err.message : String(err)}`;
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
case 'status': {
|
|
548
|
+
const all = getConsensus();
|
|
549
|
+
if (all.length === 0)
|
|
550
|
+
return 'No proposals.';
|
|
551
|
+
const lines = [`${all.length} proposals:`];
|
|
552
|
+
for (const p of all) {
|
|
553
|
+
const tally = { agree: 0, disagree: 0, abstain: 0 };
|
|
554
|
+
for (const [, { vote: pv }] of p.votes)
|
|
555
|
+
tally[pv]++;
|
|
556
|
+
lines.push(` [${p.status}] ${p.id}: "${p.description.slice(0, 60)}" — ${tally.agree}/${tally.disagree}/${tally.abstain} (a/d/ab)`);
|
|
557
|
+
}
|
|
558
|
+
return lines.join('\n');
|
|
559
|
+
}
|
|
560
|
+
default:
|
|
561
|
+
return `Unknown action: ${action}. Use: propose, vote, resolve, or status`;
|
|
562
|
+
}
|
|
563
|
+
},
|
|
564
|
+
});
|
|
565
|
+
registerTool({
|
|
566
|
+
name: 'agent_trust',
|
|
567
|
+
description: 'Check or update trust scores for agents. Trust is asymmetric: success adds 0.05, failure subtracts 0.10. Scores persist across sessions in ~/.kbot/trust.json.',
|
|
568
|
+
parameters: {
|
|
569
|
+
action: { type: 'string', description: 'Action: check, update, best, or report', required: true },
|
|
570
|
+
agent_id: { type: 'string', description: 'Agent ID to check or update' },
|
|
571
|
+
domain: { type: 'string', description: 'Domain for trust lookup (e.g., coding, research, security)' },
|
|
572
|
+
success: { type: 'string', description: 'Whether the task succeeded: true or false (for update action)' },
|
|
573
|
+
},
|
|
574
|
+
tier: 'free',
|
|
575
|
+
async execute(args) {
|
|
576
|
+
const action = String(args.action);
|
|
577
|
+
switch (action) {
|
|
578
|
+
case 'check': {
|
|
579
|
+
const agentId = String(args.agent_id || '');
|
|
580
|
+
if (!agentId)
|
|
581
|
+
return 'Error: agent_id is required for check action';
|
|
582
|
+
const domain = args.domain ? String(args.domain) : undefined;
|
|
583
|
+
const score = getTrust(agentId, domain);
|
|
584
|
+
return domain
|
|
585
|
+
? `Trust for ${agentId} in ${domain}: ${score.toFixed(2)}`
|
|
586
|
+
: `Overall trust for ${agentId}: ${score.toFixed(2)}`;
|
|
587
|
+
}
|
|
588
|
+
case 'update': {
|
|
589
|
+
const agentId = String(args.agent_id || '');
|
|
590
|
+
const domain = String(args.domain || '');
|
|
591
|
+
if (!agentId)
|
|
592
|
+
return 'Error: agent_id is required for update action';
|
|
593
|
+
if (!domain)
|
|
594
|
+
return 'Error: domain is required for update action';
|
|
595
|
+
const success = String(args.success) === 'true';
|
|
596
|
+
const before = getTrust(agentId, domain);
|
|
597
|
+
updateTrust(agentId, domain, success);
|
|
598
|
+
const after = getTrust(agentId, domain);
|
|
599
|
+
return `Trust updated for ${agentId} in ${domain}: ${before.toFixed(2)} → ${after.toFixed(2)} (${success ? '+success' : '-failure'})`;
|
|
600
|
+
}
|
|
601
|
+
case 'best': {
|
|
602
|
+
const domain = String(args.domain || '');
|
|
603
|
+
if (!domain)
|
|
604
|
+
return 'Error: domain is required for best action';
|
|
605
|
+
const best = getMostTrusted(domain);
|
|
606
|
+
if (!best)
|
|
607
|
+
return `No trust data for domain: ${domain}`;
|
|
608
|
+
return `Most trusted for ${domain}: ${best.agentId} (${best.trust.toFixed(2)})`;
|
|
609
|
+
}
|
|
610
|
+
case 'report':
|
|
611
|
+
return getTrustReport();
|
|
612
|
+
default:
|
|
613
|
+
return `Unknown action: ${action}. Use: check, update, best, or report`;
|
|
614
|
+
}
|
|
615
|
+
},
|
|
616
|
+
});
|
|
617
|
+
}
|
|
618
|
+
//# sourceMappingURL=agent-protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-protocol.js","sourceRoot":"","sources":["../src/agent-protocol.ts"],"names":[],"mappings":"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"}
|