bernard-agent 0.1.0

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 (112) hide show
  1. package/.env.example +21 -0
  2. package/LICENSE +21 -0
  3. package/README.md +629 -0
  4. package/dist/agent.d.ts +24 -0
  5. package/dist/agent.js +174 -0
  6. package/dist/agent.js.map +1 -0
  7. package/dist/config.d.ts +44 -0
  8. package/dist/config.js +267 -0
  9. package/dist/config.js.map +1 -0
  10. package/dist/context.d.ts +37 -0
  11. package/dist/context.js +245 -0
  12. package/dist/context.js.map +1 -0
  13. package/dist/cron/client.d.ts +4 -0
  14. package/dist/cron/client.js +113 -0
  15. package/dist/cron/client.js.map +1 -0
  16. package/dist/cron/daemon.d.ts +1 -0
  17. package/dist/cron/daemon.js +132 -0
  18. package/dist/cron/daemon.js.map +1 -0
  19. package/dist/cron/log-store.d.ts +51 -0
  20. package/dist/cron/log-store.js +135 -0
  21. package/dist/cron/log-store.js.map +1 -0
  22. package/dist/cron/notify.d.ts +7 -0
  23. package/dist/cron/notify.js +136 -0
  24. package/dist/cron/notify.js.map +1 -0
  25. package/dist/cron/runner.d.ts +6 -0
  26. package/dist/cron/runner.js +219 -0
  27. package/dist/cron/runner.js.map +1 -0
  28. package/dist/cron/scheduler.d.ts +16 -0
  29. package/dist/cron/scheduler.js +105 -0
  30. package/dist/cron/scheduler.js.map +1 -0
  31. package/dist/cron/store.d.ts +20 -0
  32. package/dist/cron/store.js +170 -0
  33. package/dist/cron/store.js.map +1 -0
  34. package/dist/cron/types.d.ts +21 -0
  35. package/dist/cron/types.js +3 -0
  36. package/dist/cron/types.js.map +1 -0
  37. package/dist/embeddings.d.ts +14 -0
  38. package/dist/embeddings.js +61 -0
  39. package/dist/embeddings.js.map +1 -0
  40. package/dist/history.d.ts +6 -0
  41. package/dist/history.js +71 -0
  42. package/dist/history.js.map +1 -0
  43. package/dist/index.d.ts +2 -0
  44. package/dist/index.js +231 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/logger.d.ts +1 -0
  47. package/dist/logger.js +24 -0
  48. package/dist/logger.js.map +1 -0
  49. package/dist/mcp.d.ts +43 -0
  50. package/dist/mcp.js +303 -0
  51. package/dist/mcp.js.map +1 -0
  52. package/dist/memory.d.ts +17 -0
  53. package/dist/memory.js +106 -0
  54. package/dist/memory.js.map +1 -0
  55. package/dist/output.d.ts +13 -0
  56. package/dist/output.js +151 -0
  57. package/dist/output.js.map +1 -0
  58. package/dist/providers/index.d.ts +2 -0
  59. package/dist/providers/index.js +19 -0
  60. package/dist/providers/index.js.map +1 -0
  61. package/dist/providers/types.d.ts +5 -0
  62. package/dist/providers/types.js +3 -0
  63. package/dist/providers/types.js.map +1 -0
  64. package/dist/rag-worker.d.ts +10 -0
  65. package/dist/rag-worker.js +84 -0
  66. package/dist/rag-worker.js.map +1 -0
  67. package/dist/rag.d.ts +53 -0
  68. package/dist/rag.js +242 -0
  69. package/dist/rag.js.map +1 -0
  70. package/dist/repl.d.ts +2 -0
  71. package/dist/repl.js +531 -0
  72. package/dist/repl.js.map +1 -0
  73. package/dist/setup.d.ts +1 -0
  74. package/dist/setup.js +104 -0
  75. package/dist/setup.js.map +1 -0
  76. package/dist/tools/cron-logs.d.ts +67 -0
  77. package/dist/tools/cron-logs.js +131 -0
  78. package/dist/tools/cron-logs.js.map +1 -0
  79. package/dist/tools/cron.d.ts +98 -0
  80. package/dist/tools/cron.js +248 -0
  81. package/dist/tools/cron.js.map +1 -0
  82. package/dist/tools/datetime.d.ts +4 -0
  83. package/dist/tools/datetime.js +25 -0
  84. package/dist/tools/datetime.js.map +1 -0
  85. package/dist/tools/index.d.ts +317 -0
  86. package/dist/tools/index.js +28 -0
  87. package/dist/tools/index.js.map +1 -0
  88. package/dist/tools/mcp-url.d.ts +16 -0
  89. package/dist/tools/mcp-url.js +27 -0
  90. package/dist/tools/mcp-url.js.map +1 -0
  91. package/dist/tools/mcp.d.ts +28 -0
  92. package/dist/tools/mcp.js +107 -0
  93. package/dist/tools/mcp.js.map +1 -0
  94. package/dist/tools/memory.d.ts +40 -0
  95. package/dist/tools/memory.js +99 -0
  96. package/dist/tools/memory.js.map +1 -0
  97. package/dist/tools/shell.d.ts +15 -0
  98. package/dist/tools/shell.js +60 -0
  99. package/dist/tools/shell.js.map +1 -0
  100. package/dist/tools/subagent.d.ts +21 -0
  101. package/dist/tools/subagent.js +81 -0
  102. package/dist/tools/subagent.js.map +1 -0
  103. package/dist/tools/time.d.ts +50 -0
  104. package/dist/tools/time.js +61 -0
  105. package/dist/tools/time.js.map +1 -0
  106. package/dist/tools/types.d.ts +8 -0
  107. package/dist/tools/types.js +3 -0
  108. package/dist/tools/types.js.map +1 -0
  109. package/dist/tools/web.d.ts +16 -0
  110. package/dist/tools/web.js +136 -0
  111. package/dist/tools/web.js.map +1 -0
  112. package/package.json +73 -0
package/dist/logger.js ADDED
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.debugLog = debugLog;
7
+ const node_fs_1 = __importDefault(require("node:fs"));
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ const DEBUG = !!process.env.BERNARD_DEBUG;
10
+ const LOG_DIR = node_path_1.default.resolve('.logs');
11
+ let dirCreated = false;
12
+ function debugLog(label, data) {
13
+ if (!DEBUG)
14
+ return;
15
+ if (!dirCreated) {
16
+ node_fs_1.default.mkdirSync(LOG_DIR, { recursive: true });
17
+ dirCreated = true;
18
+ }
19
+ const now = new Date();
20
+ const dateStr = now.toISOString().slice(0, 10);
21
+ const entry = JSON.stringify({ timestamp: now.toISOString(), label, data });
22
+ node_fs_1.default.appendFileSync(node_path_1.default.join(LOG_DIR, `${dateStr}.log`), entry + '\n');
23
+ }
24
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":";;;;;AAOA,4BAYC;AAnBD,sDAAyB;AACzB,0DAA6B;AAE7B,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;AAC1C,MAAM,OAAO,GAAG,mBAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACtC,IAAI,UAAU,GAAG,KAAK,CAAC;AAEvB,SAAgB,QAAQ,CAAC,KAAa,EAAE,IAAa;IACnD,IAAI,CAAC,KAAK;QAAE,OAAO;IAEnB,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,iBAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,UAAU,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5E,iBAAE,CAAC,cAAc,CAAC,mBAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,OAAO,MAAM,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC;AACxE,CAAC"}
package/dist/mcp.d.ts ADDED
@@ -0,0 +1,43 @@
1
+ interface MCPStdioConfig {
2
+ command: string;
3
+ args?: string[];
4
+ env?: Record<string, string>;
5
+ }
6
+ interface MCPUrlConfig {
7
+ url: string;
8
+ type?: 'sse' | 'http';
9
+ headers?: Record<string, string>;
10
+ }
11
+ type MCPServerConfig = MCPStdioConfig | MCPUrlConfig;
12
+ interface MCPConfig {
13
+ mcpServers: Record<string, MCPServerConfig>;
14
+ }
15
+ interface ServerStatus {
16
+ name: string;
17
+ connected: boolean;
18
+ toolCount: number;
19
+ error?: string;
20
+ }
21
+ export declare class MCPManager {
22
+ private clients;
23
+ private serverStatuses;
24
+ private tools;
25
+ loadConfig(): MCPConfig;
26
+ connect(): Promise<void>;
27
+ getTools(): Record<string, any>;
28
+ getServerStatuses(): ServerStatus[];
29
+ getConnectedServerNames(): string[];
30
+ close(): Promise<void>;
31
+ }
32
+ export declare function listMCPServers(): {
33
+ key: string;
34
+ command?: string;
35
+ args?: string[];
36
+ url?: string;
37
+ type?: 'sse' | 'http';
38
+ }[];
39
+ export declare function getMCPServer(key: string): MCPServerConfig | undefined;
40
+ export declare function addMCPServer(key: string, command: string, args?: string[], env?: Record<string, string>): void;
41
+ export declare function addMCPUrlServer(key: string, url: string, type?: 'sse' | 'http', headers?: Record<string, string>): void;
42
+ export declare function removeMCPServer(key: string): void;
43
+ export {};
package/dist/mcp.js ADDED
@@ -0,0 +1,303 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.MCPManager = void 0;
37
+ exports.listMCPServers = listMCPServers;
38
+ exports.getMCPServer = getMCPServer;
39
+ exports.addMCPServer = addMCPServer;
40
+ exports.addMCPUrlServer = addMCPUrlServer;
41
+ exports.removeMCPServer = removeMCPServer;
42
+ const fs = __importStar(require("node:fs"));
43
+ const path = __importStar(require("node:path"));
44
+ const os = __importStar(require("node:os"));
45
+ const mcp_1 = require("@ai-sdk/mcp");
46
+ const mcp_stdio_1 = require("@ai-sdk/mcp/mcp-stdio");
47
+ const ai_1 = require("ai");
48
+ const output_js_1 = require("./output.js");
49
+ const CONFIG_PATH = path.join(os.homedir(), '.bernard', 'mcp.json');
50
+ class MCPManager {
51
+ clients = new Map();
52
+ serverStatuses = [];
53
+ tools = {};
54
+ loadConfig() {
55
+ if (!fs.existsSync(CONFIG_PATH)) {
56
+ return { mcpServers: {} };
57
+ }
58
+ const raw = fs.readFileSync(CONFIG_PATH, 'utf-8');
59
+ try {
60
+ return JSON.parse(raw);
61
+ }
62
+ catch {
63
+ throw new Error(`Invalid JSON in ${CONFIG_PATH}`);
64
+ }
65
+ }
66
+ async connect() {
67
+ let config;
68
+ try {
69
+ config = this.loadConfig();
70
+ }
71
+ catch (err) {
72
+ const message = err instanceof Error ? err.message : String(err);
73
+ (0, output_js_1.printError)(`MCP config error: ${message}`);
74
+ return;
75
+ }
76
+ const serverEntries = Object.entries(config.mcpServers);
77
+ if (serverEntries.length === 0)
78
+ return;
79
+ const results = await Promise.allSettled(serverEntries.map(async ([name, serverConfig]) => {
80
+ let client;
81
+ if ('url' in serverConfig) {
82
+ client = await (0, mcp_1.createMCPClient)({
83
+ transport: {
84
+ type: serverConfig.type ?? 'sse',
85
+ url: serverConfig.url,
86
+ headers: serverConfig.headers,
87
+ },
88
+ });
89
+ }
90
+ else {
91
+ const transport = new mcp_stdio_1.Experimental_StdioMCPTransport({
92
+ command: serverConfig.command,
93
+ args: serverConfig.args,
94
+ env: serverConfig.env
95
+ ? { ...process.env, ...serverConfig.env }
96
+ : undefined,
97
+ });
98
+ client = await (0, mcp_1.createMCPClient)({ transport });
99
+ }
100
+ return { name, client };
101
+ }));
102
+ for (let i = 0; i < results.length; i++) {
103
+ const result = results[i];
104
+ const name = serverEntries[i][0];
105
+ if (result.status === 'fulfilled') {
106
+ const { client } = result.value;
107
+ this.clients.set(name, client);
108
+ try {
109
+ const serverTools = await client.tools();
110
+ const toolNames = Object.keys(serverTools);
111
+ for (const toolName of toolNames) {
112
+ if (this.tools[toolName]) {
113
+ (0, output_js_1.printInfo)(` Warning: MCP tool "${toolName}" from "${name}" overrides existing tool`);
114
+ }
115
+ this.tools[toolName] = serverTools[toolName];
116
+ }
117
+ this.serverStatuses.push({
118
+ name,
119
+ connected: true,
120
+ toolCount: toolNames.length,
121
+ });
122
+ }
123
+ catch (err) {
124
+ const message = err instanceof Error ? err.message : String(err);
125
+ this.serverStatuses.push({
126
+ name,
127
+ connected: false,
128
+ toolCount: 0,
129
+ error: message,
130
+ });
131
+ (0, output_js_1.printError)(`MCP server "${name}" failed to list tools: ${message}`);
132
+ }
133
+ }
134
+ else {
135
+ const message = result.reason instanceof Error
136
+ ? result.reason.message
137
+ : String(result.reason);
138
+ this.serverStatuses.push({
139
+ name,
140
+ connected: false,
141
+ toolCount: 0,
142
+ error: message,
143
+ });
144
+ (0, output_js_1.printError)(`MCP server "${name}" failed to connect: ${message}`);
145
+ }
146
+ }
147
+ }
148
+ getTools() {
149
+ // Convert dynamic MCP tools to function tools compatible with AI SDK v4.
150
+ // @ai-sdk/mcp@1.x returns tools with type:'dynamic' and inputSchema from
151
+ // @ai-sdk/provider-utils@4.x, but ai@4.x expects type:undefined and
152
+ // parameters wrapped with @ai-sdk/ui-utils's jsonSchema (which includes
153
+ // the validatorSymbol needed for argument validation).
154
+ const converted = {};
155
+ for (const [name, tool] of Object.entries(this.tools)) {
156
+ if (tool.type === 'dynamic') {
157
+ const { type, inputSchema, ...rest } = tool;
158
+ converted[name] = {
159
+ ...rest,
160
+ parameters: (0, ai_1.jsonSchema)(inputSchema.jsonSchema),
161
+ };
162
+ }
163
+ else {
164
+ converted[name] = tool;
165
+ }
166
+ }
167
+ return converted;
168
+ }
169
+ getServerStatuses() {
170
+ return this.serverStatuses;
171
+ }
172
+ getConnectedServerNames() {
173
+ return this.serverStatuses
174
+ .filter(s => s.connected)
175
+ .map(s => s.name);
176
+ }
177
+ async close() {
178
+ const closePromises = Array.from(this.clients.values()).map(client => client.close().catch(() => { }));
179
+ await Promise.allSettled(closePromises);
180
+ this.clients.clear();
181
+ }
182
+ }
183
+ exports.MCPManager = MCPManager;
184
+ function listMCPServers() {
185
+ if (!fs.existsSync(CONFIG_PATH)) {
186
+ return [];
187
+ }
188
+ const raw = fs.readFileSync(CONFIG_PATH, 'utf-8');
189
+ let config;
190
+ try {
191
+ config = JSON.parse(raw);
192
+ }
193
+ catch {
194
+ throw new Error(`Invalid JSON in ${CONFIG_PATH}`);
195
+ }
196
+ return Object.entries(config.mcpServers).map(([key, server]) => {
197
+ if ('url' in server) {
198
+ return { key, url: server.url, type: server.type };
199
+ }
200
+ return { key, command: server.command, args: server.args ?? [] };
201
+ });
202
+ }
203
+ function getMCPServer(key) {
204
+ if (!fs.existsSync(CONFIG_PATH)) {
205
+ return undefined;
206
+ }
207
+ const raw = fs.readFileSync(CONFIG_PATH, 'utf-8');
208
+ let config;
209
+ try {
210
+ config = JSON.parse(raw);
211
+ }
212
+ catch {
213
+ throw new Error(`Invalid JSON in ${CONFIG_PATH}`);
214
+ }
215
+ return config.mcpServers[key];
216
+ }
217
+ function addMCPServer(key, command, args, env) {
218
+ if (!key || /\s/.test(key)) {
219
+ throw new Error('Server key must be non-empty and contain no whitespace.');
220
+ }
221
+ if (!command) {
222
+ throw new Error('Command must be non-empty.');
223
+ }
224
+ const configDir = path.dirname(CONFIG_PATH);
225
+ if (!fs.existsSync(configDir)) {
226
+ fs.mkdirSync(configDir, { recursive: true });
227
+ }
228
+ let config = { mcpServers: {} };
229
+ if (fs.existsSync(CONFIG_PATH)) {
230
+ const raw = fs.readFileSync(CONFIG_PATH, 'utf-8');
231
+ try {
232
+ config = JSON.parse(raw);
233
+ }
234
+ catch {
235
+ throw new Error(`Invalid JSON in ${CONFIG_PATH}`);
236
+ }
237
+ }
238
+ if (key in config.mcpServers) {
239
+ throw new Error(`MCP server "${key}" already exists. Remove it first, then add again.`);
240
+ }
241
+ const entry = { command };
242
+ if (args && args.length > 0)
243
+ entry.args = args;
244
+ if (env && Object.keys(env).length > 0)
245
+ entry.env = env;
246
+ config.mcpServers[key] = entry;
247
+ fs.writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2) + '\n', 'utf-8');
248
+ }
249
+ function addMCPUrlServer(key, url, type, headers) {
250
+ if (!key || /\s/.test(key)) {
251
+ throw new Error('Server key must be non-empty and contain no whitespace.');
252
+ }
253
+ if (!url) {
254
+ throw new Error('URL must be non-empty.');
255
+ }
256
+ const configDir = path.dirname(CONFIG_PATH);
257
+ if (!fs.existsSync(configDir)) {
258
+ fs.mkdirSync(configDir, { recursive: true });
259
+ }
260
+ let config = { mcpServers: {} };
261
+ if (fs.existsSync(CONFIG_PATH)) {
262
+ const raw = fs.readFileSync(CONFIG_PATH, 'utf-8');
263
+ try {
264
+ config = JSON.parse(raw);
265
+ }
266
+ catch {
267
+ throw new Error(`Invalid JSON in ${CONFIG_PATH}`);
268
+ }
269
+ }
270
+ if (key in config.mcpServers) {
271
+ throw new Error(`MCP server "${key}" already exists. Remove it first, then add again.`);
272
+ }
273
+ const entry = { url };
274
+ if (type)
275
+ entry.type = type;
276
+ if (headers && Object.keys(headers).length > 0)
277
+ entry.headers = headers;
278
+ config.mcpServers[key] = entry;
279
+ fs.writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2) + '\n', 'utf-8');
280
+ }
281
+ function removeMCPServer(key) {
282
+ if (!fs.existsSync(CONFIG_PATH)) {
283
+ throw new Error(`No MCP config file found. No servers configured.`);
284
+ }
285
+ const raw = fs.readFileSync(CONFIG_PATH, 'utf-8');
286
+ let config;
287
+ try {
288
+ config = JSON.parse(raw);
289
+ }
290
+ catch {
291
+ throw new Error(`Invalid JSON in ${CONFIG_PATH}`);
292
+ }
293
+ if (!(key in config.mcpServers)) {
294
+ const validKeys = Object.keys(config.mcpServers);
295
+ const hint = validKeys.length > 0
296
+ ? ` Valid keys: ${validKeys.join(', ')}`
297
+ : ' No servers configured.';
298
+ throw new Error(`MCP server "${key}" not found.${hint}`);
299
+ }
300
+ delete config.mcpServers[key];
301
+ fs.writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2) + '\n', 'utf-8');
302
+ }
303
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /** @internal */
2
+ export declare function sanitizeKey(key: string): string;
3
+ export declare class MemoryStore {
4
+ private scratch;
5
+ constructor();
6
+ listMemory(): string[];
7
+ readMemory(key: string): string | null;
8
+ writeMemory(key: string, content: string): void;
9
+ deleteMemory(key: string): boolean;
10
+ getAllMemoryContents(): Map<string, string>;
11
+ listScratch(): string[];
12
+ readScratch(key: string): string | null;
13
+ writeScratch(key: string, content: string): void;
14
+ deleteScratch(key: string): boolean;
15
+ getAllScratchContents(): Map<string, string>;
16
+ clearScratch(): void;
17
+ }
package/dist/memory.js ADDED
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.MemoryStore = void 0;
37
+ exports.sanitizeKey = sanitizeKey;
38
+ const fs = __importStar(require("node:fs"));
39
+ const path = __importStar(require("node:path"));
40
+ const os = __importStar(require("node:os"));
41
+ const MEMORY_DIR = path.join(os.homedir(), '.bernard', 'memory');
42
+ /** @internal */
43
+ function sanitizeKey(key) {
44
+ return key.replace(/[^a-zA-Z0-9_-]/g, '');
45
+ }
46
+ class MemoryStore {
47
+ scratch = new Map();
48
+ constructor() {
49
+ fs.mkdirSync(MEMORY_DIR, { recursive: true });
50
+ }
51
+ // --- Persistent Memory (disk-backed) ---
52
+ listMemory() {
53
+ const files = fs.readdirSync(MEMORY_DIR);
54
+ return files
55
+ .filter(f => f.endsWith('.md'))
56
+ .map(f => f.replace(/\.md$/, ''));
57
+ }
58
+ readMemory(key) {
59
+ const filePath = path.join(MEMORY_DIR, `${sanitizeKey(key)}.md`);
60
+ if (!fs.existsSync(filePath))
61
+ return null;
62
+ return fs.readFileSync(filePath, 'utf-8');
63
+ }
64
+ writeMemory(key, content) {
65
+ const filePath = path.join(MEMORY_DIR, `${sanitizeKey(key)}.md`);
66
+ fs.writeFileSync(filePath, content, 'utf-8');
67
+ }
68
+ deleteMemory(key) {
69
+ const filePath = path.join(MEMORY_DIR, `${sanitizeKey(key)}.md`);
70
+ if (!fs.existsSync(filePath))
71
+ return false;
72
+ fs.unlinkSync(filePath);
73
+ return true;
74
+ }
75
+ getAllMemoryContents() {
76
+ const result = new Map();
77
+ for (const key of this.listMemory()) {
78
+ const content = this.readMemory(key);
79
+ if (content !== null) {
80
+ result.set(key, content);
81
+ }
82
+ }
83
+ return result;
84
+ }
85
+ // --- Scratch Notes (in-memory, session only) ---
86
+ listScratch() {
87
+ return Array.from(this.scratch.keys());
88
+ }
89
+ readScratch(key) {
90
+ return this.scratch.get(key) ?? null;
91
+ }
92
+ writeScratch(key, content) {
93
+ this.scratch.set(key, content);
94
+ }
95
+ deleteScratch(key) {
96
+ return this.scratch.delete(key);
97
+ }
98
+ getAllScratchContents() {
99
+ return new Map(this.scratch);
100
+ }
101
+ clearScratch() {
102
+ this.scratch.clear();
103
+ }
104
+ }
105
+ exports.MemoryStore = MemoryStore;
106
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { CoreMessage } from 'ai';
2
+ export declare function startSpinner(message?: string): void;
3
+ export declare function stopSpinner(): void;
4
+ export declare function printWelcome(provider: string, model: string): void;
5
+ export declare function printAssistantText(text: string, prefix?: string): void;
6
+ export declare function printToolCall(toolName: string, args: Record<string, unknown>, prefix?: string): void;
7
+ export declare function printToolResult(toolName: string, result: unknown, prefix?: string): void;
8
+ export declare function printError(message: string): void;
9
+ export declare function printInfo(message: string): void;
10
+ export declare function printConversationReplay(messages: CoreMessage[]): void;
11
+ export declare function printSubAgentStart(id: number, task: string): void;
12
+ export declare function printSubAgentEnd(id: number): void;
13
+ export declare function printHelp(): void;