0xkobold 0.0.3 → 0.0.4
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 +21 -5
- package/dist/package.json +4 -2
- package/dist/src/cli/commands/setup.js +144 -0
- package/dist/src/cli/commands/setup.js.map +1 -0
- package/dist/src/cli/program.js +3 -0
- package/dist/src/cli/program.js.map +1 -1
- package/dist/src/extensions/core/auto-compact-on-error-extension.js +244 -0
- package/dist/src/extensions/core/auto-compact-on-error-extension.js.map +1 -0
- package/dist/src/extensions/core/diagnostics-extension.js +215 -0
- package/dist/src/extensions/core/diagnostics-extension.js.map +1 -0
- package/dist/src/extensions/core/heartbeat-extension.js +43 -0
- package/dist/src/extensions/core/heartbeat-extension.js.map +1 -1
- package/dist/src/extensions/core/memory-extension.js +120 -0
- package/dist/src/extensions/core/memory-extension.js.map +1 -0
- package/dist/src/extensions/core/memory-synthesis-extension.js +137 -0
- package/dist/src/extensions/core/memory-synthesis-extension.js.map +1 -0
- package/dist/src/extensions/core/mode-manager-extension.js +17 -0
- package/dist/src/extensions/core/mode-manager-extension.js.map +1 -1
- package/dist/src/extensions/core/perennial-memory-extension.js +449 -0
- package/dist/src/extensions/core/perennial-memory-extension.js.map +1 -0
- package/dist/src/index.js +5 -0
- package/dist/src/index.js.map +1 -1
- package/package.json +4 -2
- package/scripts/postinstall.js +71 -0
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Diagnostics Extension - Telemetry and Health Monitoring
|
|
3
|
+
*
|
|
4
|
+
* Provides:
|
|
5
|
+
* - Token usage tracking per provider
|
|
6
|
+
* - Cost estimation
|
|
7
|
+
* - Health check aggregation
|
|
8
|
+
* - Prometheus metrics endpoint
|
|
9
|
+
* - /diagnostics dashboard
|
|
10
|
+
*
|
|
11
|
+
* Inspiration: OpenClaw's diagnostics-otel (simplified)
|
|
12
|
+
*/
|
|
13
|
+
import { Database } from "bun:sqlite";
|
|
14
|
+
import { Type } from "@sinclair/typebox";
|
|
15
|
+
import * as fs from "node:fs/promises";
|
|
16
|
+
import * as path from "node:path";
|
|
17
|
+
import { homedir } from "node:os";
|
|
18
|
+
const DIAGNOSTICS_DIR = path.join(homedir(), ".0xkobold", "diagnostics");
|
|
19
|
+
const DB_PATH = path.join(DIAGNOSTICS_DIR, "metrics.db");
|
|
20
|
+
async function initDb() {
|
|
21
|
+
await fs.mkdir(DIAGNOSTICS_DIR, { recursive: true });
|
|
22
|
+
const db = new Database(DB_PATH);
|
|
23
|
+
db.exec("PRAGMA journal_mode = WAL;");
|
|
24
|
+
db.exec(`
|
|
25
|
+
CREATE TABLE IF NOT EXISTS token_metrics (
|
|
26
|
+
id TEXT PRIMARY KEY,
|
|
27
|
+
timestamp TEXT NOT NULL,
|
|
28
|
+
provider TEXT NOT NULL,
|
|
29
|
+
model TEXT,
|
|
30
|
+
tokens_sent INTEGER DEFAULT 0,
|
|
31
|
+
tokens_received INTEGER DEFAULT 0,
|
|
32
|
+
duration_ms INTEGER DEFAULT 0,
|
|
33
|
+
cost REAL DEFAULT 0,
|
|
34
|
+
session_id TEXT
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
CREATE INDEX IF NOT EXISTS idx_metrics_time ON token_metrics(timestamp);
|
|
38
|
+
CREATE INDEX IF NOT EXISTS idx_metrics_provider ON token_metrics(provider);
|
|
39
|
+
CREATE INDEX IF NOT EXISTS idx_metrics_session ON token_metrics(session_id);
|
|
40
|
+
|
|
41
|
+
CREATE TABLE IF NOT EXISTS health_checks (
|
|
42
|
+
id TEXT PRIMARY KEY,
|
|
43
|
+
timestamp TEXT NOT NULL,
|
|
44
|
+
name TEXT NOT NULL,
|
|
45
|
+
status TEXT NOT NULL,
|
|
46
|
+
message TEXT,
|
|
47
|
+
latency_ms INTEGER
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
CREATE INDEX IF NOT EXISTS idx_health_time ON health_checks(timestamp);
|
|
51
|
+
`);
|
|
52
|
+
return db;
|
|
53
|
+
}
|
|
54
|
+
export default function diagnosticsExtension(pi) {
|
|
55
|
+
console.log("[Diagnostics] Loading...");
|
|
56
|
+
let db;
|
|
57
|
+
initDb().then((d) => { db = d; console.log("[Diagnostics] Ready"); });
|
|
58
|
+
// Track metrics on turn_end
|
|
59
|
+
pi.on("turn_end", async (event, ctx) => {
|
|
60
|
+
if (!db)
|
|
61
|
+
return;
|
|
62
|
+
const config = ctx.config || {};
|
|
63
|
+
const provider = config.llm?.provider || "unknown";
|
|
64
|
+
const model = config.llm?.model || "unknown";
|
|
65
|
+
const tokensSent = event.tokenUsage?.sent || 0;
|
|
66
|
+
const tokensReceived = event.tokenUsage?.received || 0;
|
|
67
|
+
// Cost estimation (simplified)
|
|
68
|
+
let cost = 0;
|
|
69
|
+
if (provider === "ollama-cloud") {
|
|
70
|
+
cost = ((tokensSent + tokensReceived) / 1000) * 0.001; // $0.001 per 1K tokens
|
|
71
|
+
}
|
|
72
|
+
db.query(`
|
|
73
|
+
INSERT INTO token_metrics (id, timestamp, provider, model, tokens_sent, tokens_received, duration_ms, cost, session_id)
|
|
74
|
+
VALUES (?, datetime('now'), ?, ?, ?, ?, 0, ?, ?)
|
|
75
|
+
`).run("metric-" + Date.now(), provider, model, tokensSent, tokensReceived, cost, ctx.sessionManager?.getSessionId?.());
|
|
76
|
+
});
|
|
77
|
+
// TOOL: Get metrics
|
|
78
|
+
pi.registerTool({
|
|
79
|
+
name: "diagnostics_metrics",
|
|
80
|
+
label: "Get Metrics",
|
|
81
|
+
description: "Get token usage and cost metrics for a time period",
|
|
82
|
+
parameters: Type.Object({
|
|
83
|
+
since: Type.Optional(Type.String({ description: "Period: 1h, 1d, 7d, 30d" })),
|
|
84
|
+
provider: Type.Optional(Type.String({ description: "Filter by provider" })),
|
|
85
|
+
}),
|
|
86
|
+
async execute(_id, params) {
|
|
87
|
+
if (!db)
|
|
88
|
+
throw new Error("Diagnostics DB not ready");
|
|
89
|
+
const since = (params.since || "1d");
|
|
90
|
+
let sinceSql = "1 day";
|
|
91
|
+
if (since === "1h")
|
|
92
|
+
sinceSql = "1 hour";
|
|
93
|
+
else if (since === "7d")
|
|
94
|
+
sinceSql = "7 days";
|
|
95
|
+
else if (since === "30d")
|
|
96
|
+
sinceSql = "30 days";
|
|
97
|
+
const provider = params.provider;
|
|
98
|
+
const query = db.query(`
|
|
99
|
+
SELECT
|
|
100
|
+
provider,
|
|
101
|
+
COUNT(*) as requests,
|
|
102
|
+
SUM(tokens_sent) as tokens_sent,
|
|
103
|
+
SUM(tokens_received) as tokens_received,
|
|
104
|
+
SUM(cost) as total_cost
|
|
105
|
+
FROM token_metrics
|
|
106
|
+
WHERE timestamp > datetime('now', '-${sinceSql}')
|
|
107
|
+
${provider ? "AND provider = ?" : ""}
|
|
108
|
+
GROUP BY provider
|
|
109
|
+
`);
|
|
110
|
+
const rows = (provider ? query.all(provider) : query.all());
|
|
111
|
+
const totalTokens = rows.reduce((sum, r) => sum + r.tokens_sent + r.tokens_received, 0);
|
|
112
|
+
const totalCost = rows.reduce((sum, r) => sum + r.total_cost, 0);
|
|
113
|
+
const totalRequests = rows.reduce((sum, r) => sum + r.requests, 0);
|
|
114
|
+
const formatted = rows.map(r => `${r.provider}: ${r.requests} req, ${r.tokens_sent + r.tokens_received} tokens, $${r.total_cost.toFixed(4)}`).join("\n");
|
|
115
|
+
return {
|
|
116
|
+
content: [{
|
|
117
|
+
type: "text",
|
|
118
|
+
text: `📊 Metrics (last ${since}):\n${formatted}\n\nTotal: ${totalRequests} req, ${totalTokens} tokens, $${totalCost.toFixed(4)}`,
|
|
119
|
+
}],
|
|
120
|
+
details: { period: since, providers: rows, totalTokens, totalCost },
|
|
121
|
+
};
|
|
122
|
+
},
|
|
123
|
+
});
|
|
124
|
+
// TOOL: Health check
|
|
125
|
+
pi.registerTool({
|
|
126
|
+
name: "diagnostics_health",
|
|
127
|
+
label: "Health Check",
|
|
128
|
+
description: "Check health of all 0xKobold systems",
|
|
129
|
+
parameters: Type.Object({}),
|
|
130
|
+
async execute() {
|
|
131
|
+
const checks = [];
|
|
132
|
+
// Check database
|
|
133
|
+
try {
|
|
134
|
+
db.query("SELECT 1").get();
|
|
135
|
+
checks.push({ ts: new Date().toISOString(), name: "diagnostics_db", status: "healthy", latency: 1 });
|
|
136
|
+
}
|
|
137
|
+
catch (e) {
|
|
138
|
+
checks.push({ ts: new Date().toISOString(), name: "diagnostics_db", status: "error", message: String(e) });
|
|
139
|
+
}
|
|
140
|
+
// Check memory system
|
|
141
|
+
try {
|
|
142
|
+
const memDb = path.join(homedir(), ".0xkobold", "memory", "perennial", "knowledge.db");
|
|
143
|
+
await fs.access(memDb);
|
|
144
|
+
checks.push({ ts: new Date().toISOString(), name: "memory_system", status: "healthy" });
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
checks.push({ ts: new Date().toISOString(), name: "memory_system", status: "warning", message: "No memories yet" });
|
|
148
|
+
}
|
|
149
|
+
const unhealthy = checks.filter(c => c.status === "error").length;
|
|
150
|
+
const status = unhealthy === 0 ? "✅ All systems healthy" : `❌ ${unhealthy} systems unhealthy`;
|
|
151
|
+
const formatted = checks.map(c => `${c.status === "healthy" ? "✅" : c.status === "warning" ? "⚠️" : "❌"} ${c.name}: ${c.status}`).join("\n");
|
|
152
|
+
return {
|
|
153
|
+
content: [{ type: "text", text: `${status}\n\n${formatted}` }],
|
|
154
|
+
details: { checks, healthy: unhealthy === 0 },
|
|
155
|
+
};
|
|
156
|
+
},
|
|
157
|
+
});
|
|
158
|
+
// COMMAND: /diagnostics
|
|
159
|
+
pi.registerCommand("diagnostics", {
|
|
160
|
+
description: "Show health dashboard: /diagnostics",
|
|
161
|
+
handler: async (_args, ctx) => {
|
|
162
|
+
// Quick health check
|
|
163
|
+
const checks = [];
|
|
164
|
+
try {
|
|
165
|
+
if (db) {
|
|
166
|
+
db.query("SELECT 1").get();
|
|
167
|
+
checks.push("✅ Diagnostics DB: OK");
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
checks.push("❌ Diagnostics DB: Error");
|
|
172
|
+
}
|
|
173
|
+
try {
|
|
174
|
+
const memDb = path.join(homedir(), ".0xkobold", "memory", "perennial", "knowledge.db");
|
|
175
|
+
await fs.access(memDb);
|
|
176
|
+
checks.push("✅ Memory System: OK");
|
|
177
|
+
}
|
|
178
|
+
catch {
|
|
179
|
+
checks.push("⚠️ Memory System: Not initialized");
|
|
180
|
+
}
|
|
181
|
+
// Get today's metrics
|
|
182
|
+
let metrics = "No metrics yet";
|
|
183
|
+
if (db) {
|
|
184
|
+
const row = db.query(`
|
|
185
|
+
SELECT SUM(tokens_sent + tokens_received) as tokens, SUM(cost) as cost
|
|
186
|
+
FROM token_metrics
|
|
187
|
+
WHERE timestamp > datetime('now', 'start of day')
|
|
188
|
+
`).get();
|
|
189
|
+
if (row && row.tokens) {
|
|
190
|
+
metrics = `Today: ${row.tokens} tokens, $${(row.cost || 0).toFixed(4)}`;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
ctx.ui.notify([
|
|
194
|
+
"📊 0xKobold Diagnostics",
|
|
195
|
+
"",
|
|
196
|
+
...checks,
|
|
197
|
+
"",
|
|
198
|
+
metrics,
|
|
199
|
+
"",
|
|
200
|
+
"Commands:",
|
|
201
|
+
" /metrics 1h|1d|7d - Show token usage",
|
|
202
|
+
" /export-metrics - Export to CSV",
|
|
203
|
+
].join("\n"), "info");
|
|
204
|
+
},
|
|
205
|
+
});
|
|
206
|
+
// COMMAND: /metrics
|
|
207
|
+
pi.registerCommand("metrics", {
|
|
208
|
+
description: "Show token metrics: /metrics 1d",
|
|
209
|
+
handler: async (args, ctx) => {
|
|
210
|
+
const period = args.trim() || "1d";
|
|
211
|
+
ctx.ui.notify(`📊 Showing metrics for ${period}...\nUse /diagnostics for health check.`, "info");
|
|
212
|
+
},
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=diagnostics-extension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics-extension.js","sourceRoot":"","sources":["../../../../src/extensions/core/diagnostics-extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -336,6 +336,49 @@ If something needs attention → brief alert message (no HEARTBEAT_OK token)
|
|
|
336
336
|
},
|
|
337
337
|
});
|
|
338
338
|
// ═══════════════════════════════════════════════════════════════
|
|
339
|
+
// HEALTH CHECK COMMAND (for VPS deployment)
|
|
340
|
+
// ═══════════════════════════════════════════════════════════════
|
|
341
|
+
pi.registerCommand("healthz", {
|
|
342
|
+
description: "Health check endpoint for VPS/container monitoring",
|
|
343
|
+
handler: async (_args, ctx) => {
|
|
344
|
+
const uptime = process.uptime();
|
|
345
|
+
const memory = process.memoryUsage();
|
|
346
|
+
const now = new Date().toISOString();
|
|
347
|
+
const status = {
|
|
348
|
+
status: "healthy",
|
|
349
|
+
timestamp: now,
|
|
350
|
+
uptime: `${Math.floor(uptime / 86400)}d ${Math.floor((uptime % 86400) / 3600)}h ${Math.floor((uptime % 3600) / 60)}m ${Math.floor(uptime % 60)}s`,
|
|
351
|
+
uptimeSeconds: Math.floor(uptime),
|
|
352
|
+
version: process.env.npm_package_version || "0.0.3",
|
|
353
|
+
extensions: {
|
|
354
|
+
heartbeat: {
|
|
355
|
+
enabled: config.enabled,
|
|
356
|
+
interval: config.every,
|
|
357
|
+
lastCheck: lastHeartbeat ? new Date(lastHeartbeat).toISOString() : null
|
|
358
|
+
}
|
|
359
|
+
},
|
|
360
|
+
memory: {
|
|
361
|
+
heapUsed: Math.round(memory.heapUsed / 1024 / 1024) + " MB",
|
|
362
|
+
heapTotal: Math.round(memory.heapTotal / 1024 / 1024) + " MB",
|
|
363
|
+
rss: Math.round(memory.rss / 1024 / 1024) + " MB"
|
|
364
|
+
}
|
|
365
|
+
};
|
|
366
|
+
// Return JSON for programmatic access
|
|
367
|
+
ctx.ui.notify(JSON.stringify(status, null, 2), "info");
|
|
368
|
+
},
|
|
369
|
+
});
|
|
370
|
+
// Also register /health as alias
|
|
371
|
+
pi.registerCommand("health", {
|
|
372
|
+
description: "Health check (alias for /healthz)",
|
|
373
|
+
handler: async (_args, ctx) => {
|
|
374
|
+
// Forward to healthz
|
|
375
|
+
const healthzCmd = pi.getCommands?.()?.find((c) => c.name === "healthz");
|
|
376
|
+
if (healthzCmd) {
|
|
377
|
+
await healthzCmd.handler("", ctx);
|
|
378
|
+
}
|
|
379
|
+
},
|
|
380
|
+
});
|
|
381
|
+
// ═══════════════════════════════════════════════════════════════
|
|
339
382
|
// AUTO-HEARTBEAT SCHEDULER
|
|
340
383
|
// ═══════════════════════════════════════════════════════════════
|
|
341
384
|
pi.on("session_start", async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heartbeat-extension.js","sourceRoot":"","sources":["../../../../src/extensions/core/heartbeat-extension.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"heartbeat-extension.js","sourceRoot":"","sources":["../../../../src/extensions/core/heartbeat-extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Extension - JSONL-based memory for 0xKobold
|
|
3
|
+
*/
|
|
4
|
+
import * as fs from "node:fs/promises";
|
|
5
|
+
import * as path from "node:path";
|
|
6
|
+
import { homedir } from "node:os";
|
|
7
|
+
import { randomUUID } from "node:crypto";
|
|
8
|
+
import { Type } from "@sinclair/typebox";
|
|
9
|
+
const MEMORY_DIR = path.join(homedir(), ".0xkobold", "memory");
|
|
10
|
+
const ENTRIES_FILE = path.join(MEMORY_DIR, "entries.jsonl");
|
|
11
|
+
async function ensureDirs() {
|
|
12
|
+
await fs.mkdir(MEMORY_DIR, { recursive: true });
|
|
13
|
+
}
|
|
14
|
+
async function loadEntries() {
|
|
15
|
+
try {
|
|
16
|
+
const content = await fs.readFile(ENTRIES_FILE, "utf-8");
|
|
17
|
+
return content.split("\n").filter(l => l.trim()).map(l => JSON.parse(l));
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return [];
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
async function appendEntry(entry) {
|
|
24
|
+
await ensureDirs();
|
|
25
|
+
await fs.appendFile(ENTRIES_FILE, JSON.stringify(entry) + "\n");
|
|
26
|
+
}
|
|
27
|
+
export default function memoryExtension(pi) {
|
|
28
|
+
console.log("[Memory] Extension loaded");
|
|
29
|
+
// Save memory tool
|
|
30
|
+
pi.registerTool({
|
|
31
|
+
name: "memory_save",
|
|
32
|
+
label: "Save Memory",
|
|
33
|
+
description: "Save a memory entry (decision, fact, task, etc.)",
|
|
34
|
+
parameters: Type.Object({
|
|
35
|
+
content: Type.String({ description: "Memory content" }),
|
|
36
|
+
category: Type.String({ description: "Category" }),
|
|
37
|
+
tags: Type.Optional(Type.Array(Type.String(), { description: "Tags" })),
|
|
38
|
+
}),
|
|
39
|
+
async execute(_id, params, _signal, _onUpdate, _ctx) {
|
|
40
|
+
const entry = {
|
|
41
|
+
id: randomUUID(),
|
|
42
|
+
timestamp: new Date().toISOString(),
|
|
43
|
+
category: (params.category || "context"),
|
|
44
|
+
content: params.content,
|
|
45
|
+
tags: params.tags || [],
|
|
46
|
+
};
|
|
47
|
+
await appendEntry(entry);
|
|
48
|
+
return {
|
|
49
|
+
content: [{ type: "text", text: `✅ Saved: ${entry.id.slice(0, 8)}` }],
|
|
50
|
+
details: { entry },
|
|
51
|
+
};
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
// Search tool
|
|
55
|
+
pi.registerTool({
|
|
56
|
+
name: "memory_search",
|
|
57
|
+
label: "Search Memory",
|
|
58
|
+
description: "Search saved memories",
|
|
59
|
+
parameters: Type.Object({
|
|
60
|
+
query: Type.String({ description: "Search query" }),
|
|
61
|
+
limit: Type.Optional(Type.Number({ description: "Max results" })),
|
|
62
|
+
}),
|
|
63
|
+
async execute(_id, params, _signal, _onUpdate, _ctx) {
|
|
64
|
+
const entries = await loadEntries();
|
|
65
|
+
const q = String(params.query).toLowerCase();
|
|
66
|
+
const limit = Number(params.limit) || 10;
|
|
67
|
+
const matches = entries
|
|
68
|
+
.filter(e => e.content.toLowerCase().includes(q) || e.tags.some(t => t.toLowerCase().includes(q)))
|
|
69
|
+
.slice(-limit)
|
|
70
|
+
.reverse();
|
|
71
|
+
const text = matches.length
|
|
72
|
+
? matches.map(e => `[${e.category}] ${e.content.slice(0, 60)}...`).join("\n")
|
|
73
|
+
: "No memories found";
|
|
74
|
+
return {
|
|
75
|
+
content: [{ type: "text", text }],
|
|
76
|
+
details: { count: matches.length, matches },
|
|
77
|
+
};
|
|
78
|
+
},
|
|
79
|
+
});
|
|
80
|
+
// Commands
|
|
81
|
+
pi.registerCommand("memory-save", {
|
|
82
|
+
description: "Save memory: /memory-save \"content\" --tags auth",
|
|
83
|
+
handler: async (args, ctx) => {
|
|
84
|
+
const [content, ...rest] = args.split(" --tags ");
|
|
85
|
+
const entry = {
|
|
86
|
+
id: randomUUID(),
|
|
87
|
+
timestamp: new Date().toISOString(),
|
|
88
|
+
category: "context",
|
|
89
|
+
content: content.trim(),
|
|
90
|
+
tags: rest[0] ? rest[0].split(",").map(t => t.trim()) : [],
|
|
91
|
+
};
|
|
92
|
+
await appendEntry(entry);
|
|
93
|
+
ctx.ui.notify(`✅ Saved: ${entry.id.slice(0, 8)}`, "info");
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
pi.registerCommand("memory-search", {
|
|
97
|
+
description: "Search: /memory-search \"query\"",
|
|
98
|
+
handler: async (args, ctx) => {
|
|
99
|
+
const entries = await loadEntries();
|
|
100
|
+
const q = args.toLowerCase();
|
|
101
|
+
const matches = entries
|
|
102
|
+
.filter(e => e.content.toLowerCase().includes(q))
|
|
103
|
+
.slice(-10);
|
|
104
|
+
ctx.ui.notify(matches.length
|
|
105
|
+
? matches.map(e => `${e.content.slice(0, 50)}...`).join("\n")
|
|
106
|
+
: "No memories found", "info");
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
pi.registerCommand("memory-list", {
|
|
110
|
+
description: "List recent",
|
|
111
|
+
handler: async (_args, ctx) => {
|
|
112
|
+
const entries = await loadEntries();
|
|
113
|
+
const recent = entries.slice(-10);
|
|
114
|
+
ctx.ui.notify(recent.length
|
|
115
|
+
? recent.map((e, i) => `${i + 1}. ${e.content.slice(0, 40)}...`).join("\n")
|
|
116
|
+
: "No memories", "info");
|
|
117
|
+
},
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=memory-extension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-extension.js","sourceRoot":"","sources":["../../../../src/extensions/core/memory-extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Synthesis Extension
|
|
3
|
+
*
|
|
4
|
+
* Auto-generates human-readable MEMORY.md from perennial database
|
|
5
|
+
*/
|
|
6
|
+
import { Database } from "bun:sqlite";
|
|
7
|
+
import * as fs from "node:fs/promises";
|
|
8
|
+
import * as path from "node:path";
|
|
9
|
+
import { Type } from "@sinclair/typebox";
|
|
10
|
+
import { homedir } from "node:os";
|
|
11
|
+
const MEMORY_DB = path.join(homedir(), ".0xkobold", "memory", "perennial", "knowledge.db");
|
|
12
|
+
const MEMORY_MD = path.join(homedir(), ".0xkobold", "MEMORY.md");
|
|
13
|
+
async function loadMemories() {
|
|
14
|
+
try {
|
|
15
|
+
const db = new Database(MEMORY_DB);
|
|
16
|
+
const rows = db.query(`
|
|
17
|
+
SELECT id, content, timestamp, category, importance, tags
|
|
18
|
+
FROM memories
|
|
19
|
+
ORDER BY importance DESC, timestamp DESC
|
|
20
|
+
`).all();
|
|
21
|
+
return rows.map(r => ({
|
|
22
|
+
...r,
|
|
23
|
+
tags: JSON.parse(r.tags),
|
|
24
|
+
}));
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function generateMemoryMd(memories) {
|
|
31
|
+
const highImportance = memories.filter(m => m.importance >= 0.7);
|
|
32
|
+
const decisions = memories.filter(m => m.category === "decision");
|
|
33
|
+
const facts = memories.filter(m => m.category === "fact");
|
|
34
|
+
const tasks = memories.filter(m => m.category === "task" && m.importance >= 0.5);
|
|
35
|
+
const sections = [
|
|
36
|
+
"# Personal Knowledge Vault",
|
|
37
|
+
"",
|
|
38
|
+
`> Auto-generated synthesis of ${memories.length} memories`,
|
|
39
|
+
`> Last updated: ${new Date().toLocaleString()}`,
|
|
40
|
+
"",
|
|
41
|
+
"## High-Impact Decisions",
|
|
42
|
+
"",
|
|
43
|
+
];
|
|
44
|
+
if (decisions.length > 0) {
|
|
45
|
+
for (const d of decisions.slice(0, 10)) {
|
|
46
|
+
const date = new Date(d.timestamp).toLocaleDateString();
|
|
47
|
+
sections.push(`- **[${date}]** ${d.content}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
sections.push("_No major decisions recorded yet._");
|
|
52
|
+
}
|
|
53
|
+
sections.push("", "## Key Facts Learned", "");
|
|
54
|
+
if (facts.length > 0) {
|
|
55
|
+
for (const f of facts.slice(0, 15)) {
|
|
56
|
+
const date = new Date(f.timestamp).toLocaleDateString();
|
|
57
|
+
sections.push(`- **[${date}]** ${f.content}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
sections.push("_No facts recorded yet._");
|
|
62
|
+
}
|
|
63
|
+
sections.push("", "## Active Tasks", "");
|
|
64
|
+
if (tasks.length > 0) {
|
|
65
|
+
for (const t of tasks.slice(0, 10)) {
|
|
66
|
+
const date = new Date(t.timestamp).toLocaleDateString();
|
|
67
|
+
sections.push(`- [ ] **[${date}]** ${t.content}`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
sections.push("_No active tasks._");
|
|
72
|
+
}
|
|
73
|
+
sections.push("", "## Categories", "");
|
|
74
|
+
const categories = [...new Set(memories.map(m => m.category))];
|
|
75
|
+
for (const cat of categories) {
|
|
76
|
+
const count = memories.filter(m => m.category === cat).length;
|
|
77
|
+
sections.push(`- ${cat}: ${count} memories`);
|
|
78
|
+
}
|
|
79
|
+
sections.push("", "---", "", "_This file is auto-generated from perennial memory. Use `/remember` to add new memories._");
|
|
80
|
+
return sections.join("\n");
|
|
81
|
+
}
|
|
82
|
+
export default function memorySynthesisExtension(pi) {
|
|
83
|
+
console.log("[Memory Synthesis] Ready");
|
|
84
|
+
// TOOL: Synthesize MEMORY.md
|
|
85
|
+
pi.registerTool({
|
|
86
|
+
name: "memory_synthesize",
|
|
87
|
+
label: "Synthesize MEMORY.md",
|
|
88
|
+
description: "Generate human-readable MEMORY.md from perennial database",
|
|
89
|
+
parameters: Type.Object({}),
|
|
90
|
+
async execute() {
|
|
91
|
+
const memories = await loadMemories();
|
|
92
|
+
if (memories.length === 0) {
|
|
93
|
+
return {
|
|
94
|
+
content: [{ type: "text", text: "No memories found. Use /remember to add some!" }],
|
|
95
|
+
details: { count: 0 },
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
const markdown = generateMemoryMd(memories);
|
|
99
|
+
await fs.writeFile(MEMORY_MD, markdown);
|
|
100
|
+
return {
|
|
101
|
+
content: [{
|
|
102
|
+
type: "text",
|
|
103
|
+
text: `📝 Generated MEMORY.md with ${memories.length} memories`,
|
|
104
|
+
}],
|
|
105
|
+
details: { count: memories.length, path: MEMORY_MD },
|
|
106
|
+
};
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
// COMMANDS
|
|
110
|
+
pi.registerCommand("memory-synthesize", {
|
|
111
|
+
description: "Generate MEMORY.md from database",
|
|
112
|
+
handler: async (_args, ctx) => {
|
|
113
|
+
const memories = await loadMemories();
|
|
114
|
+
if (memories.length === 0) {
|
|
115
|
+
ctx.ui.notify("No memories found. Use /remember first!", "warning");
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
const markdown = generateMemoryMd(memories);
|
|
119
|
+
await fs.writeFile(MEMORY_MD, markdown);
|
|
120
|
+
ctx.ui.notify(`📝 MEMORY.md updated with ${memories.length} memories`, "info");
|
|
121
|
+
},
|
|
122
|
+
});
|
|
123
|
+
pi.registerCommand("memory-read", {
|
|
124
|
+
description: "Read synthesized MEMORY.md",
|
|
125
|
+
handler: async (_args, ctx) => {
|
|
126
|
+
try {
|
|
127
|
+
const content = await fs.readFile(MEMORY_MD, "utf-8");
|
|
128
|
+
const preview = content.split("\n").slice(0, 20).join("\n");
|
|
129
|
+
ctx.ui.notify(`📝 MEMORY.md:\n${preview}\n...`, "info");
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
ctx.ui.notify("MEMORY.md not found. Run /memory-synthesize first.", "warning");
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=memory-synthesis-extension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-synthesis-extension.js","sourceRoot":"","sources":["../../../../src/extensions/core/memory-synthesis-extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -447,6 +447,18 @@ export default function modeManagerExtension(pi) {
|
|
|
447
447
|
const mode = modes[requestedMode];
|
|
448
448
|
ctx.ui.notify(`✅ Approved! Switched to ${mode.icon} ${mode.name} mode\nReason: ${reason}`, "info");
|
|
449
449
|
pendingModeRequest = null;
|
|
450
|
+
// Update system prompt for the active session
|
|
451
|
+
// @ts-ignore sessionManager may expose setSystemPrompt
|
|
452
|
+
ctx.sessionManager?.setSystemPrompt?.(currentMode.systemPrompt);
|
|
453
|
+
// Trigger agent to continue with the plan
|
|
454
|
+
// This sends a user message that will trigger a new turn
|
|
455
|
+
const continuationMessage = `I've approved your request to switch to ${requestedMode.toUpperCase()} mode. The mode is now active (${mode.icon} ${mode.name}).
|
|
456
|
+
|
|
457
|
+
Please continue with your plan. You can now use the tools available in ${mode.name} mode.`;
|
|
458
|
+
ctx.ui.notify("🚀 Continuing with plan...", "info");
|
|
459
|
+
// Send user message to trigger agent continuation
|
|
460
|
+
// @ts-ignore sendUserMessage is available on pi
|
|
461
|
+
pi.sendUserMessage?.(continuationMessage);
|
|
450
462
|
}
|
|
451
463
|
},
|
|
452
464
|
});
|
|
@@ -462,6 +474,11 @@ export default function modeManagerExtension(pi) {
|
|
|
462
474
|
console.log(`[ModeManager] User denied mode change to ${requestedMode}`);
|
|
463
475
|
ctx.ui.notify(`❌ Denied mode change to ${requestedMode}\nReason given: ${reason}\n\nCurrent mode: ${currentMode.icon} ${currentMode.name}`, "info");
|
|
464
476
|
pendingModeRequest = null;
|
|
477
|
+
// Inform the agent that the request was denied
|
|
478
|
+
// @ts-ignore sendUserMessage is available on pi
|
|
479
|
+
pi.sendUserMessage?.(`I've denied your request to switch to ${requestedMode.toUpperCase()} mode. ` +
|
|
480
|
+
`Please continue working in ${currentMode.name.toUpperCase()} mode with the currently available tools, ` +
|
|
481
|
+
`or explain why you need the mode change if you'd like to request again.`);
|
|
465
482
|
},
|
|
466
483
|
});
|
|
467
484
|
// Command to check if there's a pending request
|