bajaclaw 0.10.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.
Files changed (248) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +639 -0
  3. package/bin/bajaclaw.js +35 -0
  4. package/bin/create-bajaclaw.js +17 -0
  5. package/dist/agent.d.ts +29 -0
  6. package/dist/agent.js +231 -0
  7. package/dist/agent.js.map +1 -0
  8. package/dist/api/server.d.ts +15 -0
  9. package/dist/api/server.js +215 -0
  10. package/dist/api/server.js.map +1 -0
  11. package/dist/api/translate.d.ts +61 -0
  12. package/dist/api/translate.js +109 -0
  13. package/dist/api/translate.js.map +1 -0
  14. package/dist/banner.d.ts +7 -0
  15. package/dist/banner.js +31 -0
  16. package/dist/banner.js.map +1 -0
  17. package/dist/channels/gateway.d.ts +1 -0
  18. package/dist/channels/gateway.js +76 -0
  19. package/dist/channels/gateway.js.map +1 -0
  20. package/dist/claude.d.ts +9 -0
  21. package/dist/claude.js +170 -0
  22. package/dist/claude.js.map +1 -0
  23. package/dist/cli.d.ts +2 -0
  24. package/dist/cli.js +303 -0
  25. package/dist/cli.js.map +1 -0
  26. package/dist/commands/channel.d.ts +3 -0
  27. package/dist/commands/channel.js +27 -0
  28. package/dist/commands/channel.js.map +1 -0
  29. package/dist/commands/compact.d.ts +8 -0
  30. package/dist/commands/compact.js +60 -0
  31. package/dist/commands/compact.js.map +1 -0
  32. package/dist/commands/daemon.d.ts +7 -0
  33. package/dist/commands/daemon.js +129 -0
  34. package/dist/commands/daemon.js.map +1 -0
  35. package/dist/commands/dashboard.d.ts +1 -0
  36. package/dist/commands/dashboard.js +78 -0
  37. package/dist/commands/dashboard.js.map +1 -0
  38. package/dist/commands/doctor.d.ts +1 -0
  39. package/dist/commands/doctor.js +25 -0
  40. package/dist/commands/doctor.js.map +1 -0
  41. package/dist/commands/dry-run.d.ts +1 -0
  42. package/dist/commands/dry-run.js +5 -0
  43. package/dist/commands/dry-run.js.map +1 -0
  44. package/dist/commands/effort.d.ts +6 -0
  45. package/dist/commands/effort.js +33 -0
  46. package/dist/commands/effort.js.map +1 -0
  47. package/dist/commands/guide.d.ts +4 -0
  48. package/dist/commands/guide.js +52 -0
  49. package/dist/commands/guide.js.map +1 -0
  50. package/dist/commands/health.d.ts +1 -0
  51. package/dist/commands/health.js +20 -0
  52. package/dist/commands/health.js.map +1 -0
  53. package/dist/commands/init.d.ts +12 -0
  54. package/dist/commands/init.js +114 -0
  55. package/dist/commands/init.js.map +1 -0
  56. package/dist/commands/mcp.d.ts +9 -0
  57. package/dist/commands/mcp.js +63 -0
  58. package/dist/commands/mcp.js.map +1 -0
  59. package/dist/commands/migrate.d.ts +1 -0
  60. package/dist/commands/migrate.js +58 -0
  61. package/dist/commands/migrate.js.map +1 -0
  62. package/dist/commands/model.d.ts +5 -0
  63. package/dist/commands/model.js +31 -0
  64. package/dist/commands/model.js.map +1 -0
  65. package/dist/commands/persona.d.ts +6 -0
  66. package/dist/commands/persona.js +67 -0
  67. package/dist/commands/persona.js.map +1 -0
  68. package/dist/commands/port.d.ts +15 -0
  69. package/dist/commands/port.js +88 -0
  70. package/dist/commands/port.js.map +1 -0
  71. package/dist/commands/profile.d.ts +4 -0
  72. package/dist/commands/profile.js +41 -0
  73. package/dist/commands/profile.js.map +1 -0
  74. package/dist/commands/serve.d.ts +14 -0
  75. package/dist/commands/serve.js +62 -0
  76. package/dist/commands/serve.js.map +1 -0
  77. package/dist/commands/setup.d.ts +17 -0
  78. package/dist/commands/setup.js +228 -0
  79. package/dist/commands/setup.js.map +1 -0
  80. package/dist/commands/skill.d.ts +7 -0
  81. package/dist/commands/skill.js +137 -0
  82. package/dist/commands/skill.js.map +1 -0
  83. package/dist/commands/start.d.ts +6 -0
  84. package/dist/commands/start.js +25 -0
  85. package/dist/commands/start.js.map +1 -0
  86. package/dist/commands/status.d.ts +1 -0
  87. package/dist/commands/status.js +35 -0
  88. package/dist/commands/status.js.map +1 -0
  89. package/dist/commands/subagent.d.ts +14 -0
  90. package/dist/commands/subagent.js +173 -0
  91. package/dist/commands/subagent.js.map +1 -0
  92. package/dist/commands/trigger.d.ts +1 -0
  93. package/dist/commands/trigger.js +13 -0
  94. package/dist/commands/trigger.js.map +1 -0
  95. package/dist/commands/uninstall.d.ts +5 -0
  96. package/dist/commands/uninstall.js +165 -0
  97. package/dist/commands/uninstall.js.map +1 -0
  98. package/dist/commands/update.d.ts +7 -0
  99. package/dist/commands/update.js +49 -0
  100. package/dist/commands/update.js.map +1 -0
  101. package/dist/concurrency.d.ts +1 -0
  102. package/dist/concurrency.js +17 -0
  103. package/dist/concurrency.js.map +1 -0
  104. package/dist/config.d.ts +5 -0
  105. package/dist/config.js +42 -0
  106. package/dist/config.js.map +1 -0
  107. package/dist/db.d.ts +3 -0
  108. package/dist/db.js +124 -0
  109. package/dist/db.js.map +1 -0
  110. package/dist/delegation.d.ts +6 -0
  111. package/dist/delegation.js +21 -0
  112. package/dist/delegation.js.map +1 -0
  113. package/dist/health-check.d.ts +6 -0
  114. package/dist/health-check.js +38 -0
  115. package/dist/health-check.js.map +1 -0
  116. package/dist/logger.d.ts +11 -0
  117. package/dist/logger.js +53 -0
  118. package/dist/logger.js.map +1 -0
  119. package/dist/mcp/consumer.d.ts +15 -0
  120. package/dist/mcp/consumer.js +74 -0
  121. package/dist/mcp/consumer.js.map +1 -0
  122. package/dist/mcp/server.d.ts +6 -0
  123. package/dist/mcp/server.js +260 -0
  124. package/dist/mcp/server.js.map +1 -0
  125. package/dist/memory/claude-compat.d.ts +4 -0
  126. package/dist/memory/claude-compat.js +56 -0
  127. package/dist/memory/claude-compat.js.map +1 -0
  128. package/dist/memory/compact.d.ts +25 -0
  129. package/dist/memory/compact.js +195 -0
  130. package/dist/memory/compact.js.map +1 -0
  131. package/dist/memory/extract.d.ts +3 -0
  132. package/dist/memory/extract.js +56 -0
  133. package/dist/memory/extract.js.map +1 -0
  134. package/dist/memory/recall.d.ts +5 -0
  135. package/dist/memory/recall.js +47 -0
  136. package/dist/memory/recall.js.map +1 -0
  137. package/dist/model-picker.d.ts +33 -0
  138. package/dist/model-picker.js +104 -0
  139. package/dist/model-picker.js.map +1 -0
  140. package/dist/paths.d.ts +12 -0
  141. package/dist/paths.js +49 -0
  142. package/dist/paths.js.map +1 -0
  143. package/dist/persona-io.d.ts +5 -0
  144. package/dist/persona-io.js +29 -0
  145. package/dist/persona-io.js.map +1 -0
  146. package/dist/persona.d.ts +12 -0
  147. package/dist/persona.js +54 -0
  148. package/dist/persona.js.map +1 -0
  149. package/dist/prompt.d.ts +5 -0
  150. package/dist/prompt.js +56 -0
  151. package/dist/prompt.js.map +1 -0
  152. package/dist/safety.d.ts +17 -0
  153. package/dist/safety.js +47 -0
  154. package/dist/safety.js.map +1 -0
  155. package/dist/scheduler/cron.d.ts +4 -0
  156. package/dist/scheduler/cron.js +44 -0
  157. package/dist/scheduler/cron.js.map +1 -0
  158. package/dist/scheduler/index.d.ts +7 -0
  159. package/dist/scheduler/index.js +15 -0
  160. package/dist/scheduler/index.js.map +1 -0
  161. package/dist/scheduler/launchd.d.ts +4 -0
  162. package/dist/scheduler/launchd.js +73 -0
  163. package/dist/scheduler/launchd.js.map +1 -0
  164. package/dist/scheduler/schtasks.d.ts +4 -0
  165. package/dist/scheduler/schtasks.js +45 -0
  166. package/dist/scheduler/schtasks.js.map +1 -0
  167. package/dist/scheduler/systemd.d.ts +5 -0
  168. package/dist/scheduler/systemd.js +86 -0
  169. package/dist/scheduler/systemd.js.map +1 -0
  170. package/dist/self-improve.d.ts +4 -0
  171. package/dist/self-improve.js +48 -0
  172. package/dist/self-improve.js.map +1 -0
  173. package/dist/skills/auto-skiller.d.ts +21 -0
  174. package/dist/skills/auto-skiller.js +156 -0
  175. package/dist/skills/auto-skiller.js.map +1 -0
  176. package/dist/skills/loader.d.ts +3 -0
  177. package/dist/skills/loader.js +127 -0
  178. package/dist/skills/loader.js.map +1 -0
  179. package/dist/skills/matcher.d.ts +2 -0
  180. package/dist/skills/matcher.js +27 -0
  181. package/dist/skills/matcher.js.map +1 -0
  182. package/dist/skills/porter.d.ts +27 -0
  183. package/dist/skills/porter.js +109 -0
  184. package/dist/skills/porter.js.map +1 -0
  185. package/dist/types.d.ts +110 -0
  186. package/dist/types.js +2 -0
  187. package/dist/types.js.map +1 -0
  188. package/dist/updater.d.ts +25 -0
  189. package/dist/updater.js +185 -0
  190. package/dist/updater.js.map +1 -0
  191. package/package.json +53 -0
  192. package/scripts/postinstall.js +33 -0
  193. package/skills/configure-effort/SKILL.md +36 -0
  194. package/skills/configure-model/SKILL.md +41 -0
  195. package/skills/configure-tools/SKILL.md +51 -0
  196. package/skills/daily-briefing/SKILL.md +19 -0
  197. package/skills/delegate-to-subagent/SKILL.md +63 -0
  198. package/skills/email-triage/SKILL.md +21 -0
  199. package/skills/setup-api/SKILL.md +115 -0
  200. package/skills/setup-compaction/SKILL.md +102 -0
  201. package/skills/setup-daemon/SKILL.md +49 -0
  202. package/skills/setup-dashboard/SKILL.md +39 -0
  203. package/skills/setup-discord/SKILL.md +54 -0
  204. package/skills/setup-heartbeat/SKILL.md +51 -0
  205. package/skills/setup-mcp-port/SKILL.md +54 -0
  206. package/skills/setup-memory-sync/SKILL.md +45 -0
  207. package/skills/setup-profile/SKILL.md +44 -0
  208. package/skills/setup-self-update/SKILL.md +45 -0
  209. package/skills/setup-subagent/SKILL.md +102 -0
  210. package/skills/setup-telegram/SKILL.md +54 -0
  211. package/skills/setup-uninstall/SKILL.md +55 -0
  212. package/skills/web-research/SKILL.md +20 -0
  213. package/templates/code/AGENT.md +15 -0
  214. package/templates/code/HEARTBEAT.md +11 -0
  215. package/templates/code/SOUL.md +10 -0
  216. package/templates/code/bajaclaw.config.json +5 -0
  217. package/templates/code/scripts/launch.bat +4 -0
  218. package/templates/code/scripts/launch.sh +4 -0
  219. package/templates/custom/AGENT.md +14 -0
  220. package/templates/custom/HEARTBEAT.md +11 -0
  221. package/templates/custom/SOUL.md +10 -0
  222. package/templates/custom/bajaclaw.config.json +5 -0
  223. package/templates/custom/scripts/launch.bat +4 -0
  224. package/templates/custom/scripts/launch.sh +4 -0
  225. package/templates/outreach/AGENT.md +11 -0
  226. package/templates/outreach/HEARTBEAT.md +11 -0
  227. package/templates/outreach/SOUL.md +10 -0
  228. package/templates/outreach/bajaclaw.config.json +5 -0
  229. package/templates/outreach/scripts/launch.bat +4 -0
  230. package/templates/outreach/scripts/launch.sh +4 -0
  231. package/templates/research/AGENT.md +27 -0
  232. package/templates/research/HEARTBEAT.md +11 -0
  233. package/templates/research/SOUL.md +10 -0
  234. package/templates/research/bajaclaw.config.json +5 -0
  235. package/templates/research/scripts/launch.bat +4 -0
  236. package/templates/research/scripts/launch.sh +4 -0
  237. package/templates/social/AGENT.md +10 -0
  238. package/templates/social/HEARTBEAT.md +11 -0
  239. package/templates/social/SOUL.md +10 -0
  240. package/templates/social/bajaclaw.config.json +5 -0
  241. package/templates/social/scripts/launch.bat +4 -0
  242. package/templates/social/scripts/launch.sh +4 -0
  243. package/templates/support/AGENT.md +10 -0
  244. package/templates/support/HEARTBEAT.md +11 -0
  245. package/templates/support/SOUL.md +10 -0
  246. package/templates/support/bajaclaw.config.json +5 -0
  247. package/templates/support/scripts/launch.bat +4 -0
  248. package/templates/support/scripts/launch.sh +4 -0
@@ -0,0 +1,260 @@
1
+ // MCP server that exposes BajaClaw state. Phase 1 ships a stub that starts,
2
+ // responds to health, and returns a minimal resource listing. Phase 4 fills
3
+ // in the remaining resources and tools without changing this signature.
4
+ import { createServer } from "node:http";
5
+ import { readdirSync, existsSync } from "node:fs";
6
+ import { join } from "node:path";
7
+ import { bajaclawHome } from "../paths.js";
8
+ import { openDb } from "../db.js";
9
+ import { recall, listRecent } from "../memory/recall.js";
10
+ import { loadAllSkills } from "../skills/loader.js";
11
+ export async function serve(opts = {}) {
12
+ if (opts.stdio || (!opts.port && !opts.stdio)) {
13
+ return serveStdio(opts.profile);
14
+ }
15
+ return serveSse(opts.profile, opts.port);
16
+ }
17
+ async function serveStdio(profile) {
18
+ process.stdin.setEncoding("utf8");
19
+ let buf = "";
20
+ process.stdin.on("data", (chunk) => {
21
+ buf += chunk;
22
+ let nl;
23
+ while ((nl = buf.indexOf("\n")) >= 0) {
24
+ const line = buf.slice(0, nl).trim();
25
+ buf = buf.slice(nl + 1);
26
+ if (!line)
27
+ continue;
28
+ try {
29
+ const msg = JSON.parse(line);
30
+ const resp = handleJsonRpc(msg, profile);
31
+ if (resp)
32
+ process.stdout.write(JSON.stringify(resp) + "\n");
33
+ }
34
+ catch (e) {
35
+ process.stdout.write(JSON.stringify({
36
+ jsonrpc: "2.0", id: null,
37
+ error: { code: -32700, message: "Parse error: " + e.message },
38
+ }) + "\n");
39
+ }
40
+ }
41
+ });
42
+ process.stdin.on("end", () => process.exit(0));
43
+ // Announce server capabilities on init handshake handled in handleJsonRpc.
44
+ await new Promise(() => { });
45
+ }
46
+ function serveSse(profile, port) {
47
+ return new Promise((resolve) => {
48
+ const srv = createServer(async (req, res) => {
49
+ if (req.url === "/health") {
50
+ res.writeHead(200, { "content-type": "application/json" });
51
+ res.end(JSON.stringify({ status: "ok", profile: profile ?? null }));
52
+ return;
53
+ }
54
+ if (req.method === "POST" && req.url === "/rpc") {
55
+ let body = "";
56
+ req.on("data", (c) => { body += c; });
57
+ req.on("end", () => {
58
+ try {
59
+ const msg = JSON.parse(body);
60
+ const resp = handleJsonRpc(msg, profile);
61
+ res.writeHead(200, { "content-type": "application/json" });
62
+ res.end(JSON.stringify(resp ?? { jsonrpc: "2.0", id: msg.id ?? null, result: null }));
63
+ }
64
+ catch (e) {
65
+ res.writeHead(400);
66
+ res.end(e.message);
67
+ }
68
+ });
69
+ return;
70
+ }
71
+ res.writeHead(404);
72
+ res.end();
73
+ });
74
+ srv.listen(port, () => {
75
+ console.log(`bajaclaw mcp sse listening on http://localhost:${port}/`);
76
+ resolve();
77
+ });
78
+ });
79
+ }
80
+ function handleJsonRpc(msg, profile) {
81
+ const id = msg.id ?? null;
82
+ const reply = (result) => ({ jsonrpc: "2.0", id, result });
83
+ const err = (code, message) => ({ jsonrpc: "2.0", id, error: { code, message } });
84
+ switch (msg.method) {
85
+ case "initialize":
86
+ return reply({
87
+ protocolVersion: "2024-11-05",
88
+ serverInfo: { name: "bajaclaw", version: "0.1.0" },
89
+ capabilities: { resources: {}, tools: {} },
90
+ });
91
+ case "resources/list":
92
+ return reply({ resources: listResources() });
93
+ case "resources/read":
94
+ return reply({ contents: readResource(msg.params?.uri ?? "", profile) });
95
+ case "tools/list":
96
+ return reply({ tools: listTools() });
97
+ case "tools/call":
98
+ return reply(callTool(msg.params));
99
+ case "ping":
100
+ return reply({});
101
+ default:
102
+ return err(-32601, `Method not found: ${msg.method}`);
103
+ }
104
+ }
105
+ function listResources() {
106
+ const profiles = listProfiles();
107
+ const out = [
108
+ { uri: "bajaclaw://profiles", name: "Profiles", description: "List of configured profiles" },
109
+ ];
110
+ for (const p of profiles) {
111
+ out.push({ uri: `bajaclaw://profile/${p}/agents`, name: `Agents of ${p}` });
112
+ out.push({ uri: `bajaclaw://profile/${p}/memories`, name: `Memories of ${p}` });
113
+ out.push({ uri: `bajaclaw://profile/${p}/cycles`, name: `Cycles of ${p}` });
114
+ out.push({ uri: `bajaclaw://profile/${p}/schedules`, name: `Schedules of ${p}` });
115
+ }
116
+ return out;
117
+ }
118
+ function readResource(uri, defaultProfile) {
119
+ if (uri === "bajaclaw://profiles") {
120
+ return [{ uri, text: JSON.stringify(listProfiles(), null, 2), mimeType: "application/json" }];
121
+ }
122
+ const m = uri.match(/^bajaclaw:\/\/profile\/([^/]+)\/(\w+)$/);
123
+ if (!m)
124
+ return [{ uri, text: "not found", mimeType: "text/plain" }];
125
+ const profile = m[1];
126
+ const kind = m[2];
127
+ try {
128
+ const db = openDb(profile);
129
+ try {
130
+ if (kind === "memories") {
131
+ return [{ uri, text: JSON.stringify(listRecent(db, 100), null, 2), mimeType: "application/json" }];
132
+ }
133
+ if (kind === "cycles") {
134
+ const rows = db.prepare("SELECT * FROM cycles ORDER BY id DESC LIMIT 50").all();
135
+ return [{ uri, text: JSON.stringify(rows, null, 2), mimeType: "application/json" }];
136
+ }
137
+ if (kind === "schedules") {
138
+ const rows = db.prepare("SELECT * FROM schedules").all();
139
+ return [{ uri, text: JSON.stringify(rows, null, 2), mimeType: "application/json" }];
140
+ }
141
+ if (kind === "agents") {
142
+ return [{ uri, text: JSON.stringify([profile], null, 2), mimeType: "application/json" }];
143
+ }
144
+ }
145
+ finally {
146
+ db.close();
147
+ }
148
+ }
149
+ catch (e) {
150
+ return [{ uri, text: `error: ${e.message}`, mimeType: "text/plain" }];
151
+ }
152
+ return [{ uri, text: "unknown resource", mimeType: "text/plain" }];
153
+ }
154
+ function listTools() {
155
+ return [
156
+ {
157
+ name: "bajaclaw_memory_search",
158
+ description: "Full-text search BajaClaw memories for a profile",
159
+ inputSchema: {
160
+ type: "object",
161
+ properties: {
162
+ query: { type: "string" },
163
+ limit: { type: "number" },
164
+ profile: { type: "string" },
165
+ },
166
+ required: ["query"],
167
+ },
168
+ },
169
+ {
170
+ name: "bajaclaw_task_create",
171
+ description: "Enqueue a task for a BajaClaw agent",
172
+ inputSchema: {
173
+ type: "object",
174
+ properties: {
175
+ agent: { type: "string" },
176
+ task: { type: "string" },
177
+ priority: { type: "string", enum: ["high", "normal", "low"] },
178
+ },
179
+ required: ["agent", "task"],
180
+ },
181
+ },
182
+ {
183
+ name: "bajaclaw_agent_status",
184
+ description: "Report cycle counts + last run for an agent",
185
+ inputSchema: { type: "object", properties: { agent: { type: "string" } }, required: ["agent"] },
186
+ },
187
+ {
188
+ name: "bajaclaw_skill_list",
189
+ description: "List skills visible to BajaClaw (all scopes)",
190
+ inputSchema: { type: "object", properties: { profile: { type: "string" } } },
191
+ },
192
+ ];
193
+ }
194
+ function callTool(params) {
195
+ const name = params?.name ?? "";
196
+ const args = params?.arguments ?? {};
197
+ try {
198
+ if (name === "bajaclaw_memory_search") {
199
+ const profile = String(args.profile ?? firstProfile() ?? "");
200
+ if (!profile)
201
+ return toolErr("no profile available");
202
+ const db = openDb(profile);
203
+ try {
204
+ const res = recall(db, String(args.query ?? ""), Number(args.limit ?? 10));
205
+ return toolOk(JSON.stringify(res, null, 2));
206
+ }
207
+ finally {
208
+ db.close();
209
+ }
210
+ }
211
+ if (name === "bajaclaw_task_create") {
212
+ const profile = String(args.agent ?? "");
213
+ const body = String(args.task ?? "");
214
+ const priority = String(args.priority ?? "normal");
215
+ if (!profile || !body)
216
+ return toolErr("agent and task are required");
217
+ const db = openDb(profile);
218
+ try {
219
+ db.prepare("INSERT INTO tasks(created_at, priority, status, body, source) VALUES(?,?,?,?,?)").run(new Date().toISOString(), priority, "pending", body, "mcp");
220
+ return toolOk("enqueued");
221
+ }
222
+ finally {
223
+ db.close();
224
+ }
225
+ }
226
+ if (name === "bajaclaw_agent_status") {
227
+ const profile = String(args.agent ?? "");
228
+ const db = openDb(profile);
229
+ try {
230
+ const row = db.prepare("SELECT COUNT(*) as c, MAX(started_at) as last FROM cycles").get();
231
+ return toolOk(JSON.stringify(row));
232
+ }
233
+ finally {
234
+ db.close();
235
+ }
236
+ }
237
+ if (name === "bajaclaw_skill_list") {
238
+ const profile = String(args.profile ?? firstProfile() ?? "");
239
+ const skills = loadAllSkills(profile).map((s) => ({ name: s.name, scope: s.scope, description: s.description }));
240
+ return toolOk(JSON.stringify(skills, null, 2));
241
+ }
242
+ }
243
+ catch (e) {
244
+ return toolErr(e.message);
245
+ }
246
+ return toolErr(`unknown tool: ${name}`);
247
+ }
248
+ function toolOk(text) { return { content: [{ type: "text", text }], isError: false }; }
249
+ function toolErr(message) { return { content: [{ type: "text", text: message }], isError: true }; }
250
+ function listProfiles() {
251
+ const dir = join(bajaclawHome(), "profiles");
252
+ if (!existsSync(dir))
253
+ return [];
254
+ return readdirSync(dir).filter((n) => existsSync(join(dir, n, "config.json")));
255
+ }
256
+ function firstProfile() {
257
+ const all = listProfiles();
258
+ return all[0] ?? null;
259
+ }
260
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { DB } from "../db.js";
2
+ import type { Logger } from "../logger.js";
3
+ export declare function syncFromClaude(db: DB, log?: Logger): number;
4
+ export declare function writeClaudeMemoryFile(profile: string, db: DB): string;
@@ -0,0 +1,56 @@
1
+ // Two-way bridge between BajaClaw FTS memories and ~/.claude/memory/.
2
+ // Opt-in per profile via memorySync: true.
3
+ import { readdirSync, readFileSync, statSync, writeFileSync, existsSync } from "node:fs";
4
+ import { join } from "node:path";
5
+ import { claudeMemoryDir, ensureDir } from "../paths.js";
6
+ import { insertMemory, listRecent } from "./recall.js";
7
+ export function syncFromClaude(db, log) {
8
+ const dir = claudeMemoryDir();
9
+ if (!existsSync(dir))
10
+ return 0;
11
+ const seenKey = "claude-compat:last_sync";
12
+ const row = db.prepare("SELECT value FROM circuit_state WHERE key=?").get(seenKey);
13
+ const last = row ? Date.parse(row.value) : 0;
14
+ let imported = 0;
15
+ for (const name of readdirSync(dir)) {
16
+ if (!name.endsWith(".md"))
17
+ continue;
18
+ const full = join(dir, name);
19
+ let s;
20
+ try {
21
+ s = statSync(full);
22
+ }
23
+ catch {
24
+ continue;
25
+ }
26
+ if (s.mtimeMs <= last)
27
+ continue;
28
+ const body = readFileSync(full, "utf8").trim();
29
+ if (!body)
30
+ continue;
31
+ insertMemory(db, {
32
+ kind: "claude-code",
33
+ content: `${name}: ${body.slice(0, 2000)}`,
34
+ source: "claude-code",
35
+ });
36
+ imported++;
37
+ }
38
+ db.prepare("INSERT INTO circuit_state(key,value,updated_at) VALUES(?,?,?) ON CONFLICT(key) DO UPDATE SET value=excluded.value, updated_at=excluded.updated_at").run(seenKey, new Date().toISOString(), new Date().toISOString());
39
+ if (log)
40
+ log.info("memory.sync.from-claude", { imported });
41
+ return imported;
42
+ }
43
+ export function writeClaudeMemoryFile(profile, db) {
44
+ const dir = ensureDir(claudeMemoryDir());
45
+ const path = join(dir, `bajaclaw-${profile}.md`);
46
+ const mems = listRecent(db, 50);
47
+ const lines = [
48
+ `# BajaClaw memories for profile: ${profile}`,
49
+ `Generated ${new Date().toISOString()}`,
50
+ "",
51
+ ...mems.map((m) => `- [${m.kind}] ${m.content}`),
52
+ ];
53
+ writeFileSync(path, lines.join("\n"));
54
+ return path;
55
+ }
56
+ //# sourceMappingURL=claude-compat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-compat.js","sourceRoot":"","sources":["../../src/memory/claude-compat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { DB } from "../db.js";
2
+ import type { CompactionConfig } from "../types.js";
3
+ import type { Logger } from "../logger.js";
4
+ export declare const DEFAULT_COMPACTION: Required<CompactionConfig>;
5
+ export interface CompactionDecision {
6
+ yes: boolean;
7
+ reason: string;
8
+ }
9
+ export interface CompactionResult {
10
+ ran: boolean;
11
+ reason: string;
12
+ memoriesBefore: number;
13
+ memoriesAfter: number;
14
+ cyclesPruned: number;
15
+ durationMs: number;
16
+ }
17
+ export declare function mergeCompactionDefaults(partial?: CompactionConfig): Required<CompactionConfig>;
18
+ export declare function shouldCompact(db: DB, partial?: CompactionConfig): CompactionDecision;
19
+ export declare function compact(db: DB, partial?: CompactionConfig, log?: Logger): Promise<CompactionResult>;
20
+ export declare function evaluateThreshold(totalChars: number, threshold: number): {
21
+ over: boolean;
22
+ cap: number;
23
+ pct: number;
24
+ };
25
+ export declare const REFERENCE_CHARS: number;
@@ -0,0 +1,195 @@
1
+ // Memory compaction. Keeps the memory pool lean so recall stays sharp
2
+ // and DB size stays bounded as the agent learns over time.
3
+ //
4
+ // How it works
5
+ // - Trigger: threshold (memory pool > fraction of reference context
6
+ // window) OR schedule (daily at UTC time). Cheap check runs before
7
+ // each cycle; the expensive summarization only runs when a trigger
8
+ // fires.
9
+ // - Action per kind: keep newest N verbatim; chunk the rest; ask Haiku
10
+ // to collapse each chunk into one dense summary; replace originals
11
+ // with the summary row.
12
+ // - Also prunes cycle log rows older than `pruneCycleDays` and VACUUMs
13
+ // the SQLite file to reclaim space.
14
+ //
15
+ // Why cycle-time triggers work: BajaClaw's cycles are already
16
+ // stateless — each cycle rebuilds the prompt from memory + skills +
17
+ // task. The model's own context window never "fills up" across cycles.
18
+ // The thing that grows unbounded is the memory DB itself. Compaction
19
+ // is memory hygiene, not conversation truncation.
20
+ // Reference context window for threshold math. Uses Sonnet's window as
21
+ // the baseline because "auto" mode often lands on Sonnet. Conservative:
22
+ // Opus with 1M would never hit this, Haiku at 200k sizes the same.
23
+ const REFERENCE_CTX_TOKENS = 200_000;
24
+ const CHARS_PER_TOKEN = 4;
25
+ const REFERENCE_CTX_CHARS = REFERENCE_CTX_TOKENS * CHARS_PER_TOKEN;
26
+ export const DEFAULT_COMPACTION = {
27
+ enabled: true,
28
+ threshold: 0.75,
29
+ schedule: "both",
30
+ dailyAtUtc: "00:00",
31
+ keepRecentPerKind: 25,
32
+ pruneCycleDays: 30,
33
+ };
34
+ export function mergeCompactionDefaults(partial) {
35
+ return { ...DEFAULT_COMPACTION, ...(partial ?? {}) };
36
+ }
37
+ export function shouldCompact(db, partial) {
38
+ const cfg = mergeCompactionDefaults(partial);
39
+ if (!cfg.enabled || cfg.schedule === "off") {
40
+ return { yes: false, reason: "disabled" };
41
+ }
42
+ if (cfg.schedule === "threshold" || cfg.schedule === "both") {
43
+ const row = db
44
+ .prepare("SELECT COUNT(*) AS n, COALESCE(SUM(LENGTH(content)), 0) AS s FROM memories")
45
+ .get();
46
+ const cap = cfg.threshold * REFERENCE_CTX_CHARS;
47
+ if (row.s > cap) {
48
+ const pct = Math.round((row.s / REFERENCE_CTX_CHARS) * 100);
49
+ return {
50
+ yes: true,
51
+ reason: `memory ${row.s.toLocaleString()} chars (~${pct}% of ${REFERENCE_CTX_CHARS.toLocaleString()})`,
52
+ };
53
+ }
54
+ }
55
+ if (cfg.schedule === "daily" || cfg.schedule === "both") {
56
+ const last = getLastCompaction(db);
57
+ const now = new Date();
58
+ const target = todayAtUtc(cfg.dailyAtUtc, now);
59
+ if (now.getTime() >= target.getTime()) {
60
+ const lastBeforeToday = !last || last.getTime() < target.getTime();
61
+ if (lastBeforeToday) {
62
+ return { yes: true, reason: `daily schedule past ${cfg.dailyAtUtc} UTC` };
63
+ }
64
+ }
65
+ }
66
+ return { yes: false, reason: "no trigger" };
67
+ }
68
+ function todayAtUtc(hhmm, now) {
69
+ const [hStr, mStr] = (hhmm ?? "00:00").split(":");
70
+ const h = Math.max(0, Math.min(23, Number(hStr) || 0));
71
+ const m = Math.max(0, Math.min(59, Number(mStr) || 0));
72
+ return new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(), h, m, 0, 0));
73
+ }
74
+ function getLastCompaction(db) {
75
+ const row = db
76
+ .prepare("SELECT value FROM circuit_state WHERE key = 'last_compaction_at'")
77
+ .get();
78
+ if (!row)
79
+ return null;
80
+ const d = new Date(row.value);
81
+ return Number.isNaN(d.getTime()) ? null : d;
82
+ }
83
+ function setLastCompaction(db, at) {
84
+ const iso = at.toISOString();
85
+ db.prepare(`
86
+ INSERT INTO circuit_state(key, value, updated_at)
87
+ VALUES ('last_compaction_at', ?, ?)
88
+ ON CONFLICT(key) DO UPDATE SET value = excluded.value, updated_at = excluded.updated_at
89
+ `).run(iso, iso);
90
+ }
91
+ export async function compact(db, partial, log) {
92
+ const cfg = mergeCompactionDefaults(partial);
93
+ const started = Date.now();
94
+ const before = countMemories(db);
95
+ const kinds = db.prepare("SELECT DISTINCT kind FROM memories").all()
96
+ .map((r) => r.kind);
97
+ for (const kind of kinds) {
98
+ await compactKind(db, kind, cfg, log);
99
+ }
100
+ let cyclesPruned = 0;
101
+ if (cfg.pruneCycleDays > 0) {
102
+ const cutoff = new Date(Date.now() - cfg.pruneCycleDays * 86_400_000).toISOString();
103
+ const info = db
104
+ .prepare("DELETE FROM cycles WHERE started_at < ? AND status != 'running'")
105
+ .run(cutoff);
106
+ cyclesPruned = Number(info.changes);
107
+ }
108
+ try {
109
+ db.exec("VACUUM");
110
+ }
111
+ catch { /* locked; skip */ }
112
+ setLastCompaction(db, new Date());
113
+ const after = countMemories(db);
114
+ return {
115
+ ran: true,
116
+ reason: "",
117
+ memoriesBefore: before,
118
+ memoriesAfter: after,
119
+ cyclesPruned,
120
+ durationMs: Date.now() - started,
121
+ };
122
+ }
123
+ function countMemories(db) {
124
+ return db.prepare("SELECT COUNT(*) AS n FROM memories").get().n;
125
+ }
126
+ async function compactKind(db, kind, cfg, log) {
127
+ const all = db
128
+ .prepare("SELECT id, content, created_at FROM memories WHERE kind = ? ORDER BY id DESC")
129
+ .all(kind);
130
+ if (all.length <= cfg.keepRecentPerKind)
131
+ return;
132
+ const toCompact = all.slice(cfg.keepRecentPerKind);
133
+ const BATCH = 40;
134
+ for (let i = 0; i < toCompact.length; i += BATCH) {
135
+ const batch = toCompact.slice(i, i + BATCH);
136
+ if (batch.length < 3)
137
+ continue;
138
+ let summary;
139
+ try {
140
+ summary = await summarize(kind, batch.map((b) => b.content));
141
+ }
142
+ catch (e) {
143
+ log?.warn("compact.summarize.fail", { kind, error: e.message });
144
+ continue;
145
+ }
146
+ if (!summary)
147
+ continue;
148
+ const ids = batch.map((b) => b.id);
149
+ const placeholders = ids.map(() => "?").join(",");
150
+ const { insertMemory } = await import("./recall.js");
151
+ db.exec("BEGIN");
152
+ try {
153
+ db.prepare(`DELETE FROM memories WHERE id IN (${placeholders})`).run(...ids);
154
+ insertMemory(db, { kind, content: summary, source: "compacted" });
155
+ db.exec("COMMIT");
156
+ log?.info("compact.batch", { kind, collapsed: ids.length });
157
+ }
158
+ catch (e) {
159
+ db.exec("ROLLBACK");
160
+ log?.warn("compact.batch.fail", { kind, error: e.message });
161
+ }
162
+ }
163
+ }
164
+ async function summarize(kind, contents) {
165
+ const joined = contents.map((c, i) => `${i + 1}. ${c.slice(0, 400)}`).join("\n");
166
+ const prompt = `Collapse these ${kind} memories into one or two dense sentences that preserve every load-bearing fact. Drop duplicates. No preamble, no list, plain text only.
167
+
168
+ ${joined}`;
169
+ // Dynamic import keeps the top-level module free of runtime-only deps
170
+ // so unit tests (which type-strip .ts imports) don't choke on the
171
+ // claude.js import chain.
172
+ const { runOnce } = await import("../claude.js");
173
+ const r = await runOnce(prompt, {
174
+ model: "claude-haiku-4-5",
175
+ effort: "low",
176
+ maxTurns: 1,
177
+ printMode: true,
178
+ disallowedTools: ["Bash", "Write", "Edit", "Read", "Grep", "Glob", "WebSearch", "WebFetch"],
179
+ });
180
+ if (!r.ok || !r.text)
181
+ return null;
182
+ const t = r.text.trim();
183
+ return t.length > 0 ? t.slice(0, 600) : null;
184
+ }
185
+ // Pure helper so tests can exercise trigger math without a DB.
186
+ export function evaluateThreshold(totalChars, threshold) {
187
+ const cap = threshold * REFERENCE_CTX_CHARS;
188
+ return {
189
+ over: totalChars > cap,
190
+ cap,
191
+ pct: Math.round((totalChars / REFERENCE_CTX_CHARS) * 100),
192
+ };
193
+ }
194
+ export const REFERENCE_CHARS = REFERENCE_CTX_CHARS;
195
+ //# sourceMappingURL=compact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compact.js","sourceRoot":"","sources":["../../src/memory/compact.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { DB } from "../db.js";
2
+ import type { AgentConfig } from "../types.js";
3
+ export declare function extract(db: DB, cycleId: number, task: string, response: string, _cfg: AgentConfig): Promise<number>;
@@ -0,0 +1,56 @@
1
+ import { runOnce } from "../claude.js";
2
+ import { insertMemory } from "./recall.js";
3
+ // Tight extractor prompt. Caps task/response inputs aggressively so this
4
+ // post-cycle call stays cheap. Returns at most 3 durable facts.
5
+ const EXTRACT_PROMPT = `Post-cycle extractor. Return strict JSON only: {"memories":[{"kind":"fact|decision|preference|todo|reference","content":"one sentence"}]}. Emit 0-3 items. Skip transient status and anything trivially derivable from code.
6
+
7
+ <task>
8
+ {{TASK}}
9
+ </task>
10
+
11
+ <response>
12
+ {{RESPONSE}}
13
+ </response>`;
14
+ export async function extract(db, cycleId, task, response, _cfg) {
15
+ const prompt = EXTRACT_PROMPT
16
+ .replace("{{TASK}}", task.slice(0, 800))
17
+ .replace("{{RESPONSE}}", response.slice(0, 2000));
18
+ const r = await runOnce(prompt, {
19
+ model: "claude-haiku-4-5",
20
+ effort: "low",
21
+ maxTurns: 1,
22
+ printMode: true,
23
+ disallowedTools: ["Bash", "Write", "Edit", "Read", "Grep", "Glob", "WebSearch", "WebFetch"],
24
+ });
25
+ if (!r.ok || !r.text)
26
+ return 0;
27
+ const json = firstJson(r.text);
28
+ if (!json)
29
+ return 0;
30
+ const arr = Array.isArray(json.memories) ? json.memories : [];
31
+ let count = 0;
32
+ for (const m of arr) {
33
+ if (!m || typeof m !== "object")
34
+ continue;
35
+ const content = String(m.content ?? "").trim();
36
+ const kind = String(m.kind ?? "fact").trim();
37
+ if (!content)
38
+ continue;
39
+ insertMemory(db, { kind, content, source: "cycle", source_cycle_id: cycleId });
40
+ count++;
41
+ }
42
+ return count;
43
+ }
44
+ function firstJson(text) {
45
+ const start = text.indexOf("{");
46
+ const end = text.lastIndexOf("}");
47
+ if (start < 0 || end <= start)
48
+ return null;
49
+ try {
50
+ return JSON.parse(text.slice(start, end + 1));
51
+ }
52
+ catch {
53
+ return null;
54
+ }
55
+ }
56
+ //# sourceMappingURL=extract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/memory/extract.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,yEAAyE;AACzE,gEAAgE;AAChE,MAAM,cAAc,GAAG;;;;;;;;YAQX,CAAC;AAEb,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,EAAM,EACN,OAAe,EACf,IAAY,EACZ,QAAgB,EAChB,IAAiB;IAEjB,MAAM,MAAM,GAAG,cAAc;SAC1B,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SACvC,OAAO,CAAC,cAAc,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IAEpD,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE;QAC9B,KAAK,EAAE,kBAAkB;QACzB,MAAM,EAAE,KAAK;QACb,QAAQ,EAAE,CAAC;QACX,SAAS,EAAE,IAAI;QACf,eAAe,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC;KAC5F,CAAC,CAAC;IAEH,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI;QAAE,OAAO,CAAC,CAAC;IAE/B,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,CAAC;IAEpB,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9D,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,SAAS;QAC1C,MAAM,OAAO,GAAG,MAAM,CAAE,CAA6B,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5E,MAAM,IAAI,GAAG,MAAM,CAAE,CAA6B,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1E,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,YAAY,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/E,KAAK,EAAE,CAAC;IACV,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,KAAK;QAAE,OAAO,IAAI,CAAC;IAC3C,IAAI,CAAC;QAAC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;AAC/E,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { DB } from "../db.js";
2
+ import type { Memory } from "../types.js";
3
+ export declare function recall(db: DB, query: string, limit?: number): Memory[];
4
+ export declare function listRecent(db: DB, limit?: number): Memory[];
5
+ export declare function insertMemory(db: DB, m: Omit<Memory, "id" | "created_at">): number;