0xkobold 0.6.4 → 0.6.6
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 +9 -3
- package/dist/package.json +4 -2
- package/dist/src/cli/index.js +0 -0
- package/dist/src/extensions/core/workspace-footer-extension.js +2 -11
- package/dist/src/extensions/core/workspace-footer-extension.js.map +1 -1
- package/dist/src/index.js +31 -5
- package/dist/src/index.js.map +1 -1
- package/package.json +4 -2
- package/dist/src/agents/task-router.js +0 -194
- package/dist/src/agents/task-router.js.map +0 -1
- package/dist/src/agents/tools/index.js +0 -2
- package/dist/src/agents/tools/index.js.map +0 -1
- package/dist/src/agents/tools/spawn-agent.js +0 -200
- package/dist/src/agents/tools/spawn-agent.js.map +0 -1
- package/dist/src/agents/types/definitions.js +0 -317
- package/dist/src/agents/types/definitions.js.map +0 -1
- package/dist/src/agents/types/index.js +0 -2
- package/dist/src/agents/types/index.js.map +0 -1
- package/dist/src/cli/program-fixed.js +0 -1
- package/dist/src/cli/program-fixed.js.map +0 -1
- package/dist/src/extensions/core/agent-lifecycle-extension.js +0 -323
- package/dist/src/extensions/core/agent-lifecycle-extension.js.map +0 -1
- package/dist/src/extensions/core/agent-registry-extension.js +0 -541
- package/dist/src/extensions/core/agent-registry-extension.js.map +0 -1
- package/dist/src/extensions/core/agent-worker.js +0 -148
- package/dist/src/extensions/core/agent-worker.js.map +0 -1
- package/dist/src/extensions/core/agent-workspace-extension.js +0 -174
- package/dist/src/extensions/core/agent-workspace-extension.js.map +0 -1
- package/dist/src/extensions/core/auto-compact-on-error-extension.js +0 -244
- package/dist/src/extensions/core/auto-compact-on-error-extension.js.map +0 -1
- package/dist/src/extensions/core/autonomous-executor-extension.js +0 -145
- package/dist/src/extensions/core/autonomous-executor-extension.js.map +0 -1
- package/dist/src/extensions/core/autonomous-subagent-extension.js +0 -333
- package/dist/src/extensions/core/autonomous-subagent-extension.js.map +0 -1
- package/dist/src/extensions/core/compaction-safeguard-v2.js +0 -95
- package/dist/src/extensions/core/compaction-safeguard-v2.js.map +0 -1
- package/dist/src/extensions/core/confirm-destructive.js +0 -43
- package/dist/src/extensions/core/confirm-destructive.js.map +0 -1
- package/dist/src/extensions/core/context-aware-extension.js +0 -124
- package/dist/src/extensions/core/context-aware-extension.js.map +0 -1
- package/dist/src/extensions/core/deprecated/agent-lifecycle-extension.js +0 -323
- package/dist/src/extensions/core/deprecated/agent-lifecycle-extension.js.map +0 -1
- package/dist/src/extensions/core/deprecated/autonomous-subagent-extension.js +0 -333
- package/dist/src/extensions/core/deprecated/autonomous-subagent-extension.js.map +0 -1
- package/dist/src/extensions/core/deprecated/subagent-extension.js +0 -647
- package/dist/src/extensions/core/deprecated/subagent-extension.js.map +0 -1
- package/dist/src/extensions/core/dirty-repo-guard.js +0 -42
- package/dist/src/extensions/core/dirty-repo-guard.js.map +0 -1
- package/dist/src/extensions/core/env-loader-extension.js +0 -157
- package/dist/src/extensions/core/env-loader-extension.js.map +0 -1
- package/dist/src/extensions/core/git-checkpoint.js +0 -46
- package/dist/src/extensions/core/git-checkpoint.js.map +0 -1
- package/dist/src/extensions/core/handoff-extension.js +0 -206
- package/dist/src/extensions/core/handoff-extension.js.map +0 -1
- package/dist/src/extensions/core/memory-extension.js +0 -120
- package/dist/src/extensions/core/memory-extension.js.map +0 -1
- package/dist/src/extensions/core/memory-synthesis-extension.js +0 -137
- package/dist/src/extensions/core/memory-synthesis-extension.js.map +0 -1
- package/dist/src/extensions/core/mode-manager-extension.js +0 -592
- package/dist/src/extensions/core/mode-manager-extension.js.map +0 -1
- package/dist/src/extensions/core/ollama-cloud-extension.js +0 -132
- package/dist/src/extensions/core/ollama-cloud-extension.js.map +0 -1
- package/dist/src/extensions/core/ollama-provider-extension.js +0 -66
- package/dist/src/extensions/core/ollama-provider-extension.js.map +0 -1
- package/dist/src/extensions/core/ollama-router-extension.js +0 -41
- package/dist/src/extensions/core/ollama-router-extension.js.map +0 -1
- package/dist/src/extensions/core/protected-paths.js +0 -24
- package/dist/src/extensions/core/protected-paths.js.map +0 -1
- package/dist/src/extensions/core/questionnaire-extension.js +0 -242
- package/dist/src/extensions/core/questionnaire-extension.js.map +0 -1
- package/dist/src/extensions/core/session-bridge-extension.js +0 -14
- package/dist/src/extensions/core/session-bridge-extension.js.map +0 -1
- package/dist/src/extensions/core/session-manager-extension.js +0 -336
- package/dist/src/extensions/core/session-manager-extension.js.map +0 -1
- package/dist/src/extensions/core/session-name-extension.js +0 -88
- package/dist/src/extensions/core/session-name-extension.js.map +0 -1
- package/dist/src/extensions/core/session-pruning-extension.js +0 -480
- package/dist/src/extensions/core/session-pruning-extension.js.map +0 -1
- package/dist/src/extensions/core/subagent-extension.js +0 -647
- package/dist/src/extensions/core/subagent-extension.js.map +0 -1
- package/dist/src/extensions/core/tui-integration-extension-fixed.js +0 -3
- package/dist/src/extensions/core/tui-integration-extension-fixed.js.map +0 -1
- package/dist/src/extensions/core/websearch-extension.js +0 -489
- package/dist/src/extensions/core/websearch-extension.js.map +0 -1
- package/dist/src/extensions/core/websearch-v2-extension.js +0 -303
- package/dist/src/extensions/core/websearch-v2-extension.js.map +0 -1
- package/dist/src/tui/commands/final-functions.js +0 -39
- package/dist/src/tui/commands/final-functions.js.map +0 -1
- package/dist/src/tui/commands/orchestration-final-section.js +0 -84
- package/dist/src/tui/commands/orchestration-final-section.js.map +0 -1
- package/dist/src/tui/components/footer.js +0 -106
- package/dist/src/tui/components/footer.js.map +0 -1
- package/dist/src/tui/components/sidebar.js +0 -82
- package/dist/src/tui/components/sidebar.js.map +0 -1
- package/dist/src/tui/gateway-chat-client.js +0 -218
- package/dist/src/tui/gateway-chat-client.js.map +0 -1
- package/dist/src/tui/pi-tui-integration.js +0 -260
- package/dist/src/tui/pi-tui-integration.js.map +0 -1
|
@@ -1,120 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"memory-extension.js","sourceRoot":"","sources":["../../../../src/extensions/core/memory-extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,137 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"memory-synthesis-extension.js","sourceRoot":"","sources":["../../../../src/extensions/core/memory-synthesis-extension.ts"],"names":[],"mappings":"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"}
|