0xkobold 0.0.2 → 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.
Files changed (34) hide show
  1. package/README.md +59 -5
  2. package/dist/package.json +7 -5
  3. package/dist/src/cli/commands/setup.js +144 -0
  4. package/dist/src/cli/commands/setup.js.map +1 -0
  5. package/dist/src/cli/program.js +3 -0
  6. package/dist/src/cli/program.js.map +1 -1
  7. package/dist/src/extensions/core/auto-compact-on-error-extension.js +244 -0
  8. package/dist/src/extensions/core/auto-compact-on-error-extension.js.map +1 -0
  9. package/dist/src/extensions/core/diagnostics-extension.js +215 -0
  10. package/dist/src/extensions/core/diagnostics-extension.js.map +1 -0
  11. package/dist/src/extensions/core/extension-scaffold-extension.js +449 -0
  12. package/dist/src/extensions/core/extension-scaffold-extension.js.map +1 -0
  13. package/dist/src/extensions/core/git-commit-extension.js +527 -0
  14. package/dist/src/extensions/core/git-commit-extension.js.map +1 -0
  15. package/dist/src/extensions/core/heartbeat-extension.js +43 -0
  16. package/dist/src/extensions/core/heartbeat-extension.js.map +1 -1
  17. package/dist/src/extensions/core/memory-extension.js +120 -0
  18. package/dist/src/extensions/core/memory-extension.js.map +1 -0
  19. package/dist/src/extensions/core/memory-synthesis-extension.js +137 -0
  20. package/dist/src/extensions/core/memory-synthesis-extension.js.map +1 -0
  21. package/dist/src/extensions/core/mode-manager-extension.js +19 -0
  22. package/dist/src/extensions/core/mode-manager-extension.js.map +1 -1
  23. package/dist/src/extensions/core/ollama-cloud-extension.js +132 -0
  24. package/dist/src/extensions/core/ollama-cloud-extension.js.map +1 -0
  25. package/dist/src/extensions/core/ollama-router-extension.js +100 -0
  26. package/dist/src/extensions/core/ollama-router-extension.js.map +1 -0
  27. package/dist/src/extensions/core/perennial-memory-extension.js +449 -0
  28. package/dist/src/extensions/core/perennial-memory-extension.js.map +1 -0
  29. package/dist/src/index.js +7 -0
  30. package/dist/src/index.js.map +1 -1
  31. package/dist/src/llm/ollama.js +80 -9
  32. package/dist/src/llm/ollama.js.map +1 -1
  33. package/package.json +7 -5
  34. package/scripts/postinstall.js +71 -0
@@ -0,0 +1,100 @@
1
+ const routerState = {
2
+ mode: "auto",
3
+ localAvailable: true,
4
+ cloudAvailable: false,
5
+ };
6
+ async function checkLocalOllama() {
7
+ try {
8
+ const controller = new AbortController();
9
+ const timeout = setTimeout(() => controller.abort(), 2000);
10
+ const response = await fetch("http://localhost:11434/api/version", {
11
+ signal: controller.signal,
12
+ });
13
+ clearTimeout(timeout);
14
+ return response.ok;
15
+ }
16
+ catch {
17
+ return false;
18
+ }
19
+ }
20
+ function getStatusIcon() {
21
+ if (routerState.mode === "cloud")
22
+ return "đŸŒŠī¸";
23
+ if (routerState.mode === "local")
24
+ return "🏠";
25
+ return routerState.localAvailable ? "🏠" : "đŸŒŠī¸";
26
+ }
27
+ function getStatusText() {
28
+ const icon = getStatusIcon();
29
+ if (routerState.mode === "cloud")
30
+ return `${icon} Cloud`;
31
+ if (routerState.mode === "local")
32
+ return `${icon} Local`;
33
+ return `${icon} Auto`;
34
+ }
35
+ export default function ollamaRouterExtension(pi) {
36
+ console.log("[OllamaRouter] Extension loaded");
37
+ pi.on("session_start", async (_event, ctx) => {
38
+ routerState.localAvailable = await checkLocalOllama();
39
+ console.log(`[OllamaRouter] Local: ${routerState.localAvailable ? "up" : "down"}`);
40
+ // Set footer status
41
+ ctx.ui.setStatus("ollama-mode", getStatusText());
42
+ });
43
+ pi.registerCommand("ollama-mode", {
44
+ description: "Switch Ollama mode: local | cloud | auto",
45
+ handler: async (args, ctx) => {
46
+ const mode = args.trim().toLowerCase();
47
+ if (!mode) {
48
+ // Show detailed status
49
+ const lines = [
50
+ `🔄 Ollama Router Status`,
51
+ `─────────────────────`,
52
+ `Mode: ${routerState.mode}`,
53
+ `Local: ${routerState.localAvailable ? "✅" : "❌"}`,
54
+ ``,
55
+ `Usage: /ollama-mode [local|cloud|auto]`,
56
+ ];
57
+ ctx.ui.notify(lines.join("\n"), "info");
58
+ return;
59
+ }
60
+ if (mode === "local" || mode === "cloud" || mode === "auto") {
61
+ routerState.mode = mode;
62
+ ctx.ui.setStatus("ollama-mode", getStatusText());
63
+ ctx.ui.notify(`✅ Switched to ${mode} mode`, "info");
64
+ }
65
+ else {
66
+ ctx.ui.notify("❌ Invalid mode. Use: local, cloud, or auto", "error");
67
+ }
68
+ },
69
+ });
70
+ pi.registerCommand("ollama-local", {
71
+ description: "Quick switch to local Ollama mode",
72
+ handler: async (_args, ctx) => {
73
+ routerState.mode = "local";
74
+ ctx.ui.setStatus("ollama-mode", getStatusText());
75
+ ctx.ui.notify(`✅ Switched to local mode`, "info");
76
+ },
77
+ });
78
+ pi.registerCommand("ollama-cloud", {
79
+ description: "Quick switch to cloud Ollama mode",
80
+ handler: async (_args, ctx) => {
81
+ routerState.mode = "cloud";
82
+ ctx.ui.setStatus("ollama-mode", getStatusText());
83
+ ctx.ui.notify(`✅ Switched to cloud mode`, "info");
84
+ },
85
+ });
86
+ globalThis.__ollamaRouterState = routerState;
87
+ console.log("[OllamaRouter] Commands registered: /ollama-mode, /ollama-local, /ollama-cloud");
88
+ }
89
+ export function getOllamaRouterState() {
90
+ return globalThis.__ollamaRouterState || routerState;
91
+ }
92
+ export function shouldUseCloud() {
93
+ const state = getOllamaRouterState();
94
+ if (state.mode === "cloud")
95
+ return true;
96
+ if (state.mode === "local")
97
+ return false;
98
+ return !state.localAvailable;
99
+ }
100
+ //# sourceMappingURL=ollama-router-extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama-router-extension.js","sourceRoot":"","sources":["../../../../src/extensions/core/ollama-router-extension.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,449 @@
1
+ // 0xKobold Perennial Memory System
2
+ // A digital familiar that remembers forever
3
+ import { Database } from "bun:sqlite";
4
+ import { Type } from "@sinclair/typebox";
5
+ import * as fs from "node:fs/promises";
6
+ import * as path from "node:path";
7
+ import { homedir } from "node:os";
8
+ import { randomUUID } from "node:crypto";
9
+ // Constants
10
+ const MEMORY_DIR = path.join(homedir(), ".0xkobold", "memory", "perennial");
11
+ const DB_PATH = path.join(MEMORY_DIR, "knowledge.db");
12
+ const CURRENT_SCHEMA_VERSION = 1;
13
+ const EMBEDDING_DIM = 768;
14
+ // Database initialization with migrations
15
+ async function initDatabase() {
16
+ await fs.mkdir(MEMORY_DIR, { recursive: true });
17
+ const db = new Database(DB_PATH);
18
+ db.exec("PRAGMA journal_mode = WAL;");
19
+ db.exec("PRAGMA synchronous = NORMAL;");
20
+ // Get current version
21
+ const version = db.query("SELECT value FROM _metadata WHERE key = 'schema_version'").get()?.value || "0";
22
+ // Run migrations
23
+ const migrations = {
24
+ 0: `
25
+ -- Metadata table
26
+ CREATE TABLE IF NOT EXISTS _metadata (
27
+ key TEXT PRIMARY KEY,
28
+ value TEXT
29
+ );
30
+ INSERT OR REPLACE INTO _metadata VALUES ('schema_version', '1');
31
+ INSERT OR REPLACE INTO _metadata VALUES ('created_at', datetime('now'));
32
+
33
+ -- Core memories table
34
+ CREATE TABLE IF NOT EXISTS memories (
35
+ id TEXT PRIMARY KEY,
36
+ content TEXT NOT NULL,
37
+ timestamp TEXT NOT NULL,
38
+ category TEXT NOT NULL,
39
+ tags TEXT NOT NULL, -- JSON array
40
+ project TEXT,
41
+ importance REAL DEFAULT 0.5,
42
+ access_count INTEGER DEFAULT 0,
43
+ last_accessed TEXT,
44
+ session_id TEXT,
45
+ embedding BLOB -- 768 floats, stored as bytes
46
+ );
47
+
48
+ -- Full-text search index
49
+ CREATE VIRTUAL TABLE IF NOT EXISTS memories_fts
50
+ USING fts5(id, content, content_rowid=rowid);
51
+
52
+ -- Triggers to keep FTS in sync
53
+ CREATE TRIGGER IF NOT EXISTS memories_insert_fts
54
+ AFTER INSERT ON memories BEGIN
55
+ INSERT INTO memories_fts(rowid, content) VALUES (new.rowid, new.content);
56
+ END;
57
+
58
+ CREATE TRIGGER IF NOT EXISTS memories_delete_fts
59
+ AFTER DELETE ON memories BEGIN
60
+ DELETE FROM memories_fts WHERE rowid = old.rowid;
61
+ END;
62
+
63
+ CREATE TRIGGER IF NOT EXISTS memories_update_fts
64
+ AFTER UPDATE ON memories BEGIN
65
+ UPDATE memories_fts SET content = new.content WHERE rowid = new.rowid;
66
+ END;
67
+
68
+ -- Indexes
69
+ CREATE INDEX IF NOT EXISTS idx_memories_timestamp ON memories(timestamp);
70
+ CREATE INDEX IF NOT EXISTS idx_memories_category ON memories(category);
71
+ CREATE INDEX IF NOT EXISTS idx_memories_project ON memories(project);
72
+ CREATE INDEX IF NOT EXISTS idx_memories_importance ON memories(importance);
73
+
74
+ -- Schema version
75
+ UPDATE _metadata SET value = '1' WHERE key = 'schema_version';
76
+ `,
77
+ };
78
+ const currentVersion = parseInt(version, 10);
79
+ for (let v = currentVersion; v < CURRENT_SCHEMA_VERSION; v++) {
80
+ if (migrations[v]) {
81
+ console.log(`[Memory] Migrating schema: v${v} → v${v + 1}`);
82
+ db.exec(migrations[v]);
83
+ }
84
+ }
85
+ return db;
86
+ }
87
+ // Ollama embedding
88
+ async function getEmbedding(text, ollamaUrl) {
89
+ const response = await fetch(`${ollamaUrl}/api/embeddings`, {
90
+ method: "POST",
91
+ headers: { "Content-Type": "application/json" },
92
+ body: JSON.stringify({
93
+ model: "nomic-embed-text",
94
+ prompt: text,
95
+ }),
96
+ });
97
+ if (!response.ok) {
98
+ throw new Error(`Ollama error: ${response.status}`);
99
+ }
100
+ const data = await response.json();
101
+ return data.embedding;
102
+ }
103
+ // Serialize embedding to blob
104
+ function embeddingToBlob(embedding) {
105
+ const buffer = Buffer.alloc(EMBEDDING_DIM * 4); // Float32 = 4 bytes
106
+ for (let i = 0; i < EMBEDDING_DIM; i++) {
107
+ buffer.writeFloatLE(embedding[i], i * 4);
108
+ }
109
+ return buffer;
110
+ }
111
+ // Deserialize
112
+ function blobToEmbedding(blob) {
113
+ const embedding = [];
114
+ for (let i = 0; i < EMBEDDING_DIM; i++) {
115
+ embedding.push(blob.readFloatLE(i * 4));
116
+ }
117
+ return embedding;
118
+ }
119
+ // Cosine similarity
120
+ function cosineSimilarity(a, b) {
121
+ let dotProduct = 0;
122
+ let normA = 0;
123
+ let normB = 0;
124
+ for (let i = 0; i < a.length; i++) {
125
+ dotProduct += a[i] * b[i];
126
+ normA += a[i] * a[i];
127
+ normB += b[i] * b[i];
128
+ }
129
+ return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB));
130
+ }
131
+ export default async function perennialMemoryExtension(pi) {
132
+ console.log("[Perennial Memory] Loading...");
133
+ // Get Ollama URL from config or use default
134
+ const config = pi.config || {};
135
+ const ollamaUrl = config.ollama?.url || "http://localhost:11434";
136
+ const db = await initDatabase();
137
+ // Check Ollama availability
138
+ let ollamaAvailable = false;
139
+ try {
140
+ const res = await fetch(`${ollamaUrl}/api/tags`, { method: "GET" });
141
+ ollamaAvailable = res.ok;
142
+ if (ollamaAvailable) {
143
+ console.log("[Perennial Memory] Ollama connected for embeddings");
144
+ }
145
+ }
146
+ catch {
147
+ console.warn("[Perennial Memory] Ollama not available - semantic search disabled");
148
+ }
149
+ // TOOL: Save memory with embedding
150
+ pi.registerTool({
151
+ name: "perennial_save",
152
+ label: "Save Perennial Memory",
153
+ description: "Save a memory with semantic indexing. Will be remembered forever and findable by meaning, not just exact words.",
154
+ parameters: Type.Object({
155
+ content: Type.String({ description: "What to remember" }),
156
+ category: Type.String({ description: "Type: decision, fact, task, context, error, learning, preference" }),
157
+ tags: Type.Optional(Type.Array(Type.String(), { description: "Tags for organization" })),
158
+ importance: Type.Optional(Type.Number({ description: "0.0-1.0, higher = more important" })),
159
+ project: Type.Optional(Type.String({ description: "Optional project name" })),
160
+ }),
161
+ async execute(_toolCallId, params, _signal, _onUpdate, ctx) {
162
+ const entry = {
163
+ id: randomUUID(),
164
+ content: params.content,
165
+ timestamp: new Date().toISOString(),
166
+ category: (params.category || "context"),
167
+ tags: params.tags || [],
168
+ project: params.project,
169
+ importance: params.importance ?? 0.5,
170
+ accessCount: 0,
171
+ lastAccessed: new Date().toISOString(),
172
+ sessionId: ctx.sessionManager?.getSessionId?.(),
173
+ };
174
+ // Get embedding if Ollama available
175
+ let embedding;
176
+ if (ollamaAvailable) {
177
+ try {
178
+ embedding = await getEmbedding(entry.content, ollamaUrl);
179
+ entry.embedding = embedding;
180
+ }
181
+ catch (err) {
182
+ console.warn("[Perennial Memory] Failed to get embedding:", err);
183
+ }
184
+ }
185
+ // Save to database
186
+ db.query(`
187
+ INSERT INTO memories (id, content, timestamp, category, tags, project, importance,
188
+ access_count, last_accessed, session_id, embedding)
189
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
190
+ `).run(entry.id, entry.content, entry.timestamp, entry.category, JSON.stringify(entry.tags), entry.project || null, entry.importance, entry.accessCount, entry.lastAccessed, entry.sessionId || null, embedding ? embeddingToBlob(embedding) : null);
191
+ return {
192
+ content: [{
193
+ type: "text",
194
+ text: `đŸ›ī¸ Memory archived: ${entry.id.slice(0, 8)}\n[${entry.category}] "${entry.content.slice(0, 50)}..."`,
195
+ }],
196
+ details: { entry, hasEmbedding: !!embedding },
197
+ };
198
+ },
199
+ });
200
+ // TOOL: Hybrid search
201
+ pi.registerTool({
202
+ name: "perennial_search",
203
+ label: "Search Perennial Memory",
204
+ description: "Semantic search across all memories. Finds related concepts even with different wording.",
205
+ parameters: Type.Object({
206
+ query: Type.String({ description: "Search query (concepts, not just keywords)" }),
207
+ category: Type.Optional(Type.String({ description: "Filter by category" })),
208
+ project: Type.Optional(Type.String({ description: "Filter by project" })),
209
+ limit: Type.Optional(Type.Number({ description: "Max results (default 10)" })),
210
+ }),
211
+ async execute(_toolCallId, params) {
212
+ const query = params.query;
213
+ const limit = params.limit || 10;
214
+ const category = params.category;
215
+ const project = params.project;
216
+ const results = [];
217
+ // 1. Semantic search (if Ollama available)
218
+ if (ollamaAvailable) {
219
+ try {
220
+ const queryEmbedding = await getEmbedding(query, ollamaUrl);
221
+ // Get all entries with embeddings (limit to recent 1000 for performance)
222
+ const rows = db.query(`
223
+ SELECT id, content, timestamp, category, tags, project, importance,
224
+ access_count, last_accessed, embedding
225
+ FROM memories
226
+ WHERE embedding IS NOT NULL
227
+ ORDER BY timestamp DESC
228
+ LIMIT 1000
229
+ `).all();
230
+ for (const row of rows) {
231
+ const entryEmbedding = blobToEmbedding(row.embedding);
232
+ const similarity = cosineSimilarity(queryEmbedding, entryEmbedding);
233
+ // Apply temporal decay
234
+ const ageDays = (Date.now() - new Date(row.timestamp).getTime()) / (1000 * 60 * 60 * 24);
235
+ const decay = Math.exp(-Math.log(2) * ageDays / 30); // 30-day half-life
236
+ results.push({
237
+ id: row.id,
238
+ content: row.content,
239
+ timestamp: row.timestamp,
240
+ category: row.category,
241
+ tags: JSON.parse(row.tags),
242
+ project: row.project,
243
+ importance: row.importance,
244
+ accessCount: row.access_count,
245
+ lastAccessed: row.last_accessed,
246
+ score: similarity * decay * row.importance,
247
+ matchType: "semantic",
248
+ });
249
+ }
250
+ }
251
+ catch (err) {
252
+ console.warn("[Perennial Memory] Semantic search failed:", err);
253
+ }
254
+ }
255
+ // 2. Text search (always works)
256
+ const textMatches = db.query(`
257
+ SELECT m.id, m.content, m.timestamp, m.category, m.tags, m.project,
258
+ m.importance, m.access_count, m.last_accessed
259
+ FROM memories m
260
+ JOIN memories_fts fts ON m.rowid = fts.rowid
261
+ WHERE memories_fts MATCH ?
262
+ ${category ? "AND m.category = ?" : ""}
263
+ ${project ? "AND m.project = ?" : ""}
264
+ ORDER BY rank
265
+ LIMIT ?
266
+ `).all(query, ...(category ? [category] : []), ...(project ? [project] : []), limit);
267
+ for (const row of textMatches) {
268
+ // Check if already in results
269
+ const existing = results.find(r => r.id === row.id);
270
+ if (existing) {
271
+ existing.score = Math.max(existing.score, 0.8); // Boost for text matches
272
+ existing.matchType = "hybrid";
273
+ }
274
+ else {
275
+ results.push({
276
+ id: row.id,
277
+ content: row.content,
278
+ timestamp: row.timestamp,
279
+ category: row.category,
280
+ tags: JSON.parse(row.tags),
281
+ project: row.project,
282
+ importance: row.importance,
283
+ accessCount: row.access_count,
284
+ lastAccessed: row.last_accessed,
285
+ score: 0.7, // Base score for text match
286
+ matchType: "text",
287
+ });
288
+ }
289
+ }
290
+ // Sort by score and take top results
291
+ const sorted = results
292
+ .sort((a, b) => b.score - a.score)
293
+ .slice(0, limit);
294
+ // Update access counts
295
+ for (const r of sorted) {
296
+ db.query(`UPDATE memories SET access_count = access_count + 1, last_accessed = ? WHERE id = ?`)
297
+ .run(new Date().toISOString(), r.id);
298
+ }
299
+ // Format output
300
+ const formatted = sorted.length
301
+ ? sorted.map((r, i) => `${i + 1}. [${r.matchType}] ${r.content.slice(0, 70)}... (score: ${(r.score * 100).toFixed(1)}%)`).join("\n")
302
+ : "No memories found";
303
+ return {
304
+ content: [{ type: "text", text: `đŸ›ī¸ ${sorted.length} memories found:\n\n${formatted}` }],
305
+ details: { count: sorted.length, results: sorted },
306
+ };
307
+ },
308
+ });
309
+ // TOOL: Export memories
310
+ pi.registerTool({
311
+ name: "perennial_export",
312
+ label: "Export Memories",
313
+ description: "Export all memories to a portable format (JSONL or SQLite)",
314
+ parameters: Type.Object({
315
+ format: Type.String({ description: "jsonl or sqlite" }),
316
+ output: Type.Optional(Type.String({ description: "Output path (optional)" })),
317
+ }),
318
+ async execute(_toolCallId, params) {
319
+ const format = (params.format || "jsonl");
320
+ const timestamp = new Date().toISOString().split("T")[0];
321
+ const outputPath = params.output || path.join(MEMORY_DIR, "exports", `memories-${timestamp}.${format}`);
322
+ await fs.mkdir(path.dirname(outputPath), { recursive: true });
323
+ const rows = db.query(`SELECT * FROM memories ORDER BY timestamp`).all();
324
+ if (format === "jsonl") {
325
+ const lines = rows.map(row => JSON.stringify({
326
+ id: row.id,
327
+ content: row.content,
328
+ timestamp: row.timestamp,
329
+ category: row.category,
330
+ tags: JSON.parse(row.tags),
331
+ project: row.project,
332
+ importance: row.importance,
333
+ accessCount: row.access_count,
334
+ }));
335
+ await fs.writeFile(outputPath, lines.join("\n"));
336
+ }
337
+ else {
338
+ // Copy SQLite database
339
+ await fs.copyFile(DB_PATH, outputPath);
340
+ }
341
+ return {
342
+ content: [{ type: "text", text: `đŸ“Ļ Exported ${rows.length} memories to ${outputPath}` }],
343
+ details: { count: rows.length, path: outputPath },
344
+ };
345
+ },
346
+ });
347
+ // COMMANDS
348
+ pi.registerCommand("remember", {
349
+ description: "Save a memory forever: /remember \"Content\" --category fact --importance 0.9",
350
+ handler: async (args, ctx) => {
351
+ const [content, ...opts] = args.split(" --");
352
+ if (!content.trim()) {
353
+ ctx.ui.notify("❌ Usage: /remember \"content\" --category fact", "error");
354
+ return;
355
+ }
356
+ const options = {};
357
+ for (const opt of opts) {
358
+ const [k, ...v] = opt.split(" ");
359
+ options[k] = v.join(" ");
360
+ }
361
+ let embedding;
362
+ if (ollamaAvailable) {
363
+ try {
364
+ embedding = await getEmbedding(content, ollamaUrl);
365
+ }
366
+ catch { }
367
+ }
368
+ const entry = {
369
+ id: randomUUID(),
370
+ content: content.trim(),
371
+ timestamp: new Date().toISOString(),
372
+ category: (options.category || "context"),
373
+ tags: options.tags?.split(",").map((t) => t.trim()) || [],
374
+ importance: parseFloat(options.importance || "0.5"),
375
+ };
376
+ db.query(`
377
+ INSERT INTO memories (id, content, timestamp, category, tags, importance, access_count, session_id${embedding ? ', embedding' : ''})
378
+ VALUES (?, ?, ?, ?, ?, ?, 0, ?${embedding ? ', ?' : ''})
379
+ `).run(entry.id, entry.content, entry.timestamp, entry.category, JSON.stringify(entry.tags), entry.importance, ctx.sessionManager?.getSessionId?.() || null, ...(embedding ? [embeddingToBlob(embedding)] : []));
380
+ ctx.ui.notify(`đŸ›ī¸ Remembered forever: ${entry.id.slice(0, 8)}${embedding ? " (semantic)" : ""}`, "info");
381
+ },
382
+ });
383
+ pi.registerCommand("recall", {
384
+ description: "Recall by meaning: /recall \"that auth thing we did\"",
385
+ handler: async (args, ctx) => {
386
+ if (!args.trim()) {
387
+ ctx.ui.notify("❌ Usage: /recall \"vague description of what you remember\"", "error");
388
+ return;
389
+ }
390
+ // Use the search tool
391
+ const limit = 5;
392
+ let results = [];
393
+ if (ollamaAvailable) {
394
+ try {
395
+ const queryEmbedding = await getEmbedding(args, ollamaUrl);
396
+ const rows = db.query(`SELECT id, content, category, importance, embedding FROM memories WHERE embedding IS NOT NULL LIMIT 1000`).all();
397
+ results = rows
398
+ .map(row => ({
399
+ ...row,
400
+ score: cosineSimilarity(queryEmbedding, blobToEmbedding(row.embedding)),
401
+ }))
402
+ .sort((a, b) => b.score - a.score)
403
+ .slice(0, limit);
404
+ }
405
+ catch { }
406
+ }
407
+ // Fallback to text search
408
+ if (results.length === 0) {
409
+ const rows = db.query(`
410
+ SELECT id, content, category, importance, rank
411
+ FROM memories JOIN memories_fts ON memories.rowid = memories_fts.rowid
412
+ WHERE memories_fts MATCH ?
413
+ LIMIT ?
414
+ `).all(args, limit);
415
+ results = rows.map(r => ({ ...r, score: 0.7 }));
416
+ }
417
+ ctx.ui.notify(results.length
418
+ ? `đŸ›ī¸ Found:\n${results.map((r, i) => `${i + 1}. [${r.category}] ${r.content.slice(0, 60)}...`).join("\n")}`
419
+ : "No memories match that description", "info");
420
+ },
421
+ });
422
+ pi.registerCommand("memories", {
423
+ description: "List recent memories",
424
+ handler: async (_args, ctx) => {
425
+ const rows = db.query(`SELECT id, content, category, timestamp FROM memories ORDER BY timestamp DESC LIMIT 10`).all();
426
+ ctx.ui.notify(rows.length
427
+ ? rows.map((r, i) => `${i + 1}. ${r.id.slice(0, 8)} [${r.category}] ${r.content.slice(0, 40)}...`).join("\n")
428
+ : "No memories yet", "info");
429
+ },
430
+ });
431
+ pi.registerCommand("memory-export", {
432
+ description: "Export memories to file",
433
+ handler: async (_args, ctx) => {
434
+ const timestamp = new Date().toISOString().split("T")[0];
435
+ const exportDir = path.join(MEMORY_DIR, "exports");
436
+ await fs.mkdir(exportDir, { recursive: true });
437
+ const outputPath = path.join(exportDir, `memories-${timestamp}.jsonl`);
438
+ const rows = db.query(`SELECT * FROM memories`).all();
439
+ const lines = rows.map(r => JSON.stringify(r));
440
+ await fs.writeFile(outputPath, lines.join("\n"));
441
+ ctx.ui.notify(`đŸ“Ļ Exported ${rows.length} memories to ${outputPath}`, "info");
442
+ },
443
+ });
444
+ console.log("[Perennial Memory] Ready");
445
+ console.log(` Database: ${DB_PATH}`);
446
+ console.log(` Schema: v${CURRENT_SCHEMA_VERSION}`);
447
+ console.log(` Ollama: ${ollamaAvailable ? "✅ connected" : "âš ī¸ not available"}`);
448
+ }
449
+ //# sourceMappingURL=perennial-memory-extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perennial-memory-extension.js","sourceRoot":"","sources":["../../../../src/extensions/core/perennial-memory-extension.ts"],"names":[],"mappings":"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"}
package/dist/src/index.js CHANGED
@@ -46,6 +46,8 @@ function verifyExtensions() {
46
46
  const extensions = [
47
47
  // Infrastructure
48
48
  '--extension', ext('ollama-provider-extension'),
49
+ '--extension', ext('ollama-cloud-extension'),
50
+ '--extension', ext('ollama-router-extension'),
49
51
  '--extension', ext('session-bridge-extension'),
50
52
  // Core Features
51
53
  '--extension', ext('persona-loader-extension'),
@@ -63,6 +65,7 @@ function verifyExtensions() {
63
65
  // Context management (OpenClaw-style)
64
66
  '--extension', ext('context-pruning/extension'),
65
67
  '--extension', ext('compaction-safeguard'),
68
+ '--extension', ext('auto-compact-on-error-extension'),
66
69
  // Multi-Channel
67
70
  '--extension', ext('multi-channel-extension'),
68
71
  '--extension', ext('discord-extension'),
@@ -76,6 +79,10 @@ function verifyExtensions() {
76
79
  '--extension', ext('gateway-extension'),
77
80
  '--extension', ext('agent-registry-extension'),
78
81
  '--extension', ext('websearch-extension'),
82
+ '--extension', ext('memory-extension'),
83
+ '--extension', ext('perennial-memory-extension'),
84
+ '--extension', ext('diagnostics-extension'),
85
+ '--extension', ext('memory-synthesis-extension'),
79
86
  // Note: pi-coding-agent updates disabled - user manages dependencies manually
80
87
  // '--extension', ext('update-extension'),
81
88
  // Self-update for 0xKobold only (shows in dev mode)
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}