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/repl.js ADDED
@@ -0,0 +1,531 @@
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.startRepl = startRepl;
37
+ const readline = __importStar(require("node:readline"));
38
+ const childProcess = __importStar(require("node:child_process"));
39
+ const path = __importStar(require("node:path"));
40
+ const os = __importStar(require("node:os"));
41
+ const fs = __importStar(require("node:fs"));
42
+ const crypto = __importStar(require("node:crypto"));
43
+ const agent_js_1 = require("./agent.js");
44
+ const memory_js_1 = require("./memory.js");
45
+ const rag_js_1 = require("./rag.js");
46
+ const mcp_js_1 = require("./mcp.js");
47
+ const output_js_1 = require("./output.js");
48
+ const config_js_1 = require("./config.js");
49
+ const store_js_1 = require("./cron/store.js");
50
+ const client_js_1 = require("./cron/client.js");
51
+ const history_js_1 = require("./history.js");
52
+ const context_js_1 = require("./context.js");
53
+ async function startRepl(config, alertContext, resume) {
54
+ const SLASH_COMMANDS = [
55
+ { command: '/help', description: 'Show this help' },
56
+ { command: '/clear', description: 'Clear conversation history and scratch notes' },
57
+ { command: '/memory', description: 'List persistent memories' },
58
+ { command: '/scratch', description: 'List session scratch notes' },
59
+ { command: '/mcp', description: 'List MCP servers and tools' },
60
+ { command: '/cron', description: 'Show cron jobs and daemon status' },
61
+ { command: '/rag', description: 'Show RAG memory stats and recent facts' },
62
+ { command: '/provider', description: 'Switch LLM provider' },
63
+ { command: '/model', description: 'Switch model for current provider' },
64
+ { command: '/options', description: 'View and set options (max-tokens, shell-timeout)' },
65
+ { command: '/exit', description: 'Quit Bernard' },
66
+ ];
67
+ function completer(line) {
68
+ if (line.startsWith('/')) {
69
+ const hits = SLASH_COMMANDS.filter(c => c.command.startsWith(line)).map(c => c.command);
70
+ return [hits.length ? hits : SLASH_COMMANDS.map(c => c.command), line];
71
+ }
72
+ return [[], line];
73
+ }
74
+ const rl = readline.createInterface({
75
+ input: process.stdin,
76
+ output: process.stdout,
77
+ completer,
78
+ });
79
+ // Bracket paste mode: track whether we're inside a terminal paste
80
+ let isPasting = false;
81
+ const PROMPT_STR = '\x1b[36mbernard>\x1b[0m ';
82
+ if (process.stdin.isTTY) {
83
+ process.stdout.write('\x1b[?2004h'); // enable bracket paste mode
84
+ }
85
+ // Strip ANSI escapes to calculate visible prompt width
86
+ PROMPT_STR.replace(/\x1b\[[^m]*m/g, '').length;
87
+ let hintLineCount = 0;
88
+ function redrawWithHints(line) {
89
+ const matches = (!isPasting && line.startsWith('/'))
90
+ ? SLASH_COMMANDS.filter(c => c.command.startsWith(line))
91
+ : [];
92
+ // Nothing to show and nothing to clean up — let readline handle display
93
+ if (matches.length === 0 && hintLineCount === 0)
94
+ return;
95
+ // Move up past any old hint lines to the prompt line
96
+ if (hintLineCount > 0) {
97
+ process.stdout.write(`\x1b[${hintLineCount}A`);
98
+ }
99
+ // Clear from prompt line downward
100
+ process.stdout.write(`\r\x1b[J`);
101
+ if (matches.length > 0) {
102
+ const maxLen = Math.max(...matches.map(c => c.command.length));
103
+ for (const c of matches) {
104
+ const pad = ' '.repeat(maxLen - c.command.length + 2);
105
+ process.stdout.write(` \x1b[37m${c.command}\x1b[0m${pad}\x1b[90m— ${c.description}\x1b[0m\n`);
106
+ }
107
+ hintLineCount = matches.length;
108
+ }
109
+ else {
110
+ hintLineCount = 0;
111
+ }
112
+ // Reprint prompt + current input
113
+ process.stdout.write(PROMPT_STR + line);
114
+ }
115
+ let processing = false;
116
+ let interrupted = false;
117
+ process.stdin.on('keypress', (_str, key) => {
118
+ if (!key)
119
+ return;
120
+ if (key.name === 'escape' && processing) {
121
+ agent.abort();
122
+ interrupted = true;
123
+ return;
124
+ }
125
+ if (key.name === 'paste-start') {
126
+ isPasting = true;
127
+ rl.setPrompt(''); // suppress prompt on continuation lines
128
+ }
129
+ if (key.name === 'paste-end') {
130
+ isPasting = false;
131
+ rl.setPrompt(PROMPT_STR); // restore prompt
132
+ }
133
+ // On Enter, clear hints before readline processes the line
134
+ if (key.name === 'return' && hintLineCount > 0) {
135
+ // Move up past hints, clear everything, reprint prompt+line so
136
+ // readline's own newline lands cleanly
137
+ const line = rl.line || '';
138
+ process.stdout.write(`\x1b[${hintLineCount}A\r\x1b[J`);
139
+ process.stdout.write(PROMPT_STR + line);
140
+ hintLineCount = 0;
141
+ return;
142
+ }
143
+ // Show/update slash command hints on next tick (after readline updates rl.line)
144
+ if (!isPasting && key.name !== 'paste-start' && key.name !== 'paste-end' && key.name !== 'return') {
145
+ process.nextTick(() => {
146
+ const line = rl.line;
147
+ if (line !== undefined) {
148
+ redrawWithHints(line);
149
+ }
150
+ });
151
+ }
152
+ });
153
+ /** Read a single input (possibly multi-line via paste) from the REPL. */
154
+ function readInput() {
155
+ return new Promise((resolve) => {
156
+ const pasteLines = [];
157
+ const onLine = (line) => {
158
+ if (isPasting) {
159
+ pasteLines.push(line);
160
+ }
161
+ else if (pasteLines.length > 0) {
162
+ // Paste ended; this Enter press finalises the input
163
+ pasteLines.push(line);
164
+ rl.removeListener('line', onLine);
165
+ resolve({ text: pasteLines.join('\n'), pasted: true });
166
+ }
167
+ else {
168
+ // Normal single-line input
169
+ rl.removeListener('line', onLine);
170
+ resolve({ text: line, pasted: false });
171
+ }
172
+ };
173
+ rl.setPrompt(PROMPT_STR);
174
+ rl.prompt();
175
+ rl.on('line', onLine);
176
+ });
177
+ }
178
+ const memoryStore = new memory_js_1.MemoryStore();
179
+ const ragStore = config.ragEnabled ? new rag_js_1.RAGStore() : undefined;
180
+ const mcpManager = new mcp_js_1.MCPManager();
181
+ try {
182
+ await mcpManager.connect();
183
+ }
184
+ catch (err) {
185
+ const message = err instanceof Error ? err.message : String(err);
186
+ (0, output_js_1.printError)(`MCP initialization failed: ${message}`);
187
+ }
188
+ const statuses = mcpManager.getServerStatuses();
189
+ if (statuses.length > 0) {
190
+ (0, output_js_1.printInfo)(' MCP servers:');
191
+ for (const s of statuses) {
192
+ if (s.connected) {
193
+ (0, output_js_1.printInfo)(` ✓ ${s.name} (${s.toolCount} tools)`);
194
+ }
195
+ else {
196
+ (0, output_js_1.printError)(` ✗ ${s.name}: ${s.error}`);
197
+ }
198
+ }
199
+ }
200
+ const mcpTools = mcpManager.getTools();
201
+ const mcpServerNames = mcpManager.getConnectedServerNames();
202
+ const confirmFn = (command) => {
203
+ return new Promise((resolve) => {
204
+ rl.question(`\x1b[33m ⚠ Dangerous command: ${command}\n Allow? (y/N): \x1b[0m`, (answer) => {
205
+ resolve(answer.trim().toLowerCase() === 'y');
206
+ });
207
+ });
208
+ };
209
+ const toolOptions = {
210
+ shellTimeout: config.shellTimeout,
211
+ confirmDangerous: confirmFn,
212
+ };
213
+ const historyStore = new history_js_1.HistoryStore();
214
+ let initialHistory;
215
+ if (resume) {
216
+ const loaded = historyStore.load();
217
+ if (loaded.length > 0) {
218
+ initialHistory = loaded;
219
+ (0, output_js_1.printConversationReplay)(loaded);
220
+ }
221
+ else {
222
+ (0, output_js_1.printInfo)('No previous conversation found — starting fresh.');
223
+ }
224
+ }
225
+ const agent = new agent_js_1.Agent(config, toolOptions, memoryStore, mcpTools, mcpServerNames, alertContext, initialHistory, ragStore);
226
+ const cleanup = async () => {
227
+ if (process.stdin.isTTY) {
228
+ process.stdout.write('\x1b[?2004l'); // disable bracket paste mode
229
+ }
230
+ // Spawn background RAG extraction worker if applicable
231
+ try {
232
+ const history = agent.getHistory();
233
+ if (ragStore && history.length >= 4) {
234
+ const serialized = (0, context_js_1.serializeMessages)(history);
235
+ if (serialized.trim()) {
236
+ const ragDir = path.join(os.homedir(), '.bernard', 'rag');
237
+ fs.mkdirSync(ragDir, { recursive: true });
238
+ const tempFile = path.join(ragDir, `.pending-${crypto.randomBytes(8).toString('hex')}.json`);
239
+ fs.writeFileSync(tempFile, JSON.stringify({
240
+ serialized,
241
+ provider: config.provider,
242
+ model: config.model,
243
+ }));
244
+ const workerPath = path.join(__dirname, 'rag-worker.js');
245
+ const child = childProcess.spawn(process.execPath, [workerPath, tempFile], {
246
+ detached: true,
247
+ stdio: 'ignore',
248
+ env: process.env,
249
+ });
250
+ child.unref();
251
+ }
252
+ }
253
+ }
254
+ catch {
255
+ // Silent failure — don't block exit
256
+ }
257
+ await mcpManager.close();
258
+ };
259
+ const prompt = async () => {
260
+ const { text, pasted } = await readInput();
261
+ let trimmed = text.trim();
262
+ if (!trimmed) {
263
+ prompt();
264
+ return;
265
+ }
266
+ // Escaped forward slash: unescape and send to agent as regular text
267
+ const isEscapedSlash = trimmed.startsWith('\\/');
268
+ if (isEscapedSlash) {
269
+ trimmed = trimmed.slice(1);
270
+ }
271
+ // Bare "/" was handled by live keypress hints; just re-prompt
272
+ if (!pasted && !isEscapedSlash && trimmed === '/') {
273
+ prompt();
274
+ return;
275
+ }
276
+ if (trimmed === 'exit' || trimmed === 'quit' || trimmed === '/exit') {
277
+ (0, output_js_1.printInfo)('Goodbye!');
278
+ await cleanup();
279
+ rl.close();
280
+ process.exit(0);
281
+ }
282
+ // Slash commands are only handled for typed (non-pasted, non-escaped) input
283
+ if (!pasted && !isEscapedSlash && trimmed.startsWith('/')) {
284
+ if (trimmed === '/help') {
285
+ (0, output_js_1.printHelp)();
286
+ prompt();
287
+ return;
288
+ }
289
+ if (trimmed === '/clear') {
290
+ agent.clearHistory();
291
+ historyStore.clear();
292
+ (0, output_js_1.printInfo)('Conversation history and scratch notes cleared.');
293
+ prompt();
294
+ return;
295
+ }
296
+ if (trimmed === '/memory') {
297
+ const keys = memoryStore.listMemory();
298
+ if (keys.length === 0) {
299
+ (0, output_js_1.printInfo)('No persistent memories stored.');
300
+ }
301
+ else {
302
+ (0, output_js_1.printInfo)('Persistent memories:');
303
+ for (const key of keys) {
304
+ (0, output_js_1.printInfo)(` - ${key}`);
305
+ }
306
+ }
307
+ prompt();
308
+ return;
309
+ }
310
+ if (trimmed === '/scratch') {
311
+ const keys = memoryStore.listScratch();
312
+ if (keys.length === 0) {
313
+ (0, output_js_1.printInfo)('No scratch notes in this session.');
314
+ }
315
+ else {
316
+ (0, output_js_1.printInfo)('Scratch notes:');
317
+ for (const key of keys) {
318
+ (0, output_js_1.printInfo)(` - ${key}`);
319
+ }
320
+ }
321
+ prompt();
322
+ return;
323
+ }
324
+ if (trimmed === '/mcp') {
325
+ const statuses = mcpManager.getServerStatuses();
326
+ if (statuses.length === 0) {
327
+ (0, output_js_1.printInfo)('No MCP servers configured. Add servers to ~/.bernard/mcp.json');
328
+ }
329
+ else {
330
+ (0, output_js_1.printInfo)('MCP servers:');
331
+ for (const s of statuses) {
332
+ if (s.connected) {
333
+ (0, output_js_1.printInfo)(` ✓ ${s.name} (${s.toolCount} tools)`);
334
+ }
335
+ else {
336
+ (0, output_js_1.printInfo)(` ✗ ${s.name} — ${s.error}`);
337
+ }
338
+ }
339
+ const toolNames = Object.keys(mcpManager.getTools());
340
+ if (toolNames.length > 0) {
341
+ (0, output_js_1.printInfo)(`\nMCP tools: ${toolNames.join(', ')}`);
342
+ }
343
+ }
344
+ prompt();
345
+ return;
346
+ }
347
+ if (trimmed === '/cron') {
348
+ const store = new store_js_1.CronStore();
349
+ const jobs = store.loadJobs();
350
+ const running = (0, client_js_1.isDaemonRunning)();
351
+ (0, output_js_1.printInfo)(`\n Daemon: ${running ? 'running' : 'stopped'}`);
352
+ if (jobs.length === 0) {
353
+ (0, output_js_1.printInfo)(' No cron jobs configured.\n');
354
+ }
355
+ else {
356
+ (0, output_js_1.printInfo)(` Jobs (${jobs.length}):`);
357
+ for (const job of jobs) {
358
+ const status = job.enabled ? 'enabled' : 'disabled';
359
+ const lastRun = job.lastRun
360
+ ? `last: ${new Date(job.lastRun).toLocaleString()} (${job.lastRunStatus || 'unknown'})`
361
+ : 'never run';
362
+ (0, output_js_1.printInfo)(` ${job.name} [${status}] — ${job.schedule} — ${lastRun}`);
363
+ (0, output_js_1.printInfo)(` ID: ${job.id}`);
364
+ }
365
+ const alerts = store.listAlerts().filter(a => !a.acknowledged);
366
+ if (alerts.length > 0) {
367
+ (0, output_js_1.printInfo)(`\n Unacknowledged alerts (${alerts.length}):`);
368
+ for (const alert of alerts.slice(0, 5)) {
369
+ (0, output_js_1.printInfo)(` [${new Date(alert.timestamp).toLocaleString()}] ${alert.jobName}: ${alert.message}`);
370
+ }
371
+ }
372
+ console.log();
373
+ }
374
+ prompt();
375
+ return;
376
+ }
377
+ if (trimmed === '/rag') {
378
+ if (!ragStore) {
379
+ (0, output_js_1.printInfo)('RAG is disabled. Set BERNARD_RAG_ENABLED=true (default) to enable.');
380
+ prompt();
381
+ return;
382
+ }
383
+ const count = ragStore.count();
384
+ (0, output_js_1.printInfo)(`\n RAG memories: ${count}`);
385
+ if (count === 0) {
386
+ (0, output_js_1.printInfo)(' No RAG memories yet. Memories are extracted automatically during context compression.');
387
+ }
388
+ else {
389
+ const facts = ragStore.listFacts();
390
+ const recent = facts.slice(-10);
391
+ (0, output_js_1.printInfo)(`\n Most recent (up to 10):`);
392
+ for (const f of recent) {
393
+ (0, output_js_1.printInfo)(` ${f}`);
394
+ }
395
+ }
396
+ console.log();
397
+ prompt();
398
+ return;
399
+ }
400
+ if (trimmed === '/provider') {
401
+ const available = (0, config_js_1.getAvailableProviders)(config);
402
+ if (available.length === 0) {
403
+ (0, output_js_1.printError)('No providers have API keys configured.');
404
+ prompt();
405
+ return;
406
+ }
407
+ (0, output_js_1.printInfo)(`\n Current: ${config.provider} (${config.model})\n`);
408
+ (0, output_js_1.printInfo)(' Available providers:');
409
+ for (let i = 0; i < available.length; i++) {
410
+ (0, output_js_1.printInfo)(` ${i + 1}. ${available[i]}`);
411
+ }
412
+ console.log();
413
+ rl.question(` Select [1-${available.length}]: `, (answer) => {
414
+ const num = parseInt(answer.trim(), 10);
415
+ if (num >= 1 && num <= available.length) {
416
+ config.provider = available[num - 1];
417
+ config.model = (0, config_js_1.getDefaultModel)(config.provider);
418
+ (0, config_js_1.savePreferences)({ provider: config.provider, model: config.model, maxTokens: config.maxTokens, shellTimeout: config.shellTimeout });
419
+ (0, output_js_1.printInfo)(` Switched to ${config.provider} (${config.model})`);
420
+ }
421
+ else {
422
+ (0, output_js_1.printInfo)(' Cancelled.');
423
+ }
424
+ console.log();
425
+ prompt();
426
+ });
427
+ return;
428
+ }
429
+ if (trimmed === '/model') {
430
+ const models = config_js_1.PROVIDER_MODELS[config.provider];
431
+ if (!models || models.length === 0) {
432
+ (0, output_js_1.printError)(`No models listed for provider "${config.provider}".`);
433
+ prompt();
434
+ return;
435
+ }
436
+ (0, output_js_1.printInfo)(`\n Current: ${config.provider} / ${config.model}\n`);
437
+ (0, output_js_1.printInfo)(' Available models:');
438
+ for (let i = 0; i < models.length; i++) {
439
+ (0, output_js_1.printInfo)(` ${i + 1}. ${models[i]}`);
440
+ }
441
+ console.log();
442
+ rl.question(` Select [1-${models.length}]: `, (answer) => {
443
+ const num = parseInt(answer.trim(), 10);
444
+ if (num >= 1 && num <= models.length) {
445
+ config.model = models[num - 1];
446
+ (0, config_js_1.savePreferences)({ provider: config.provider, model: config.model, maxTokens: config.maxTokens, shellTimeout: config.shellTimeout });
447
+ (0, output_js_1.printInfo)(` Switched to ${config.model}`);
448
+ }
449
+ else {
450
+ (0, output_js_1.printInfo)(' Cancelled.');
451
+ }
452
+ console.log();
453
+ prompt();
454
+ });
455
+ return;
456
+ }
457
+ if (trimmed === '/options') {
458
+ const entries = Object.entries(config_js_1.OPTIONS_REGISTRY);
459
+ (0, output_js_1.printInfo)('\n Options:');
460
+ for (let i = 0; i < entries.length; i++) {
461
+ const [name, opt] = entries[i];
462
+ const current = config[opt.configKey];
463
+ const isDefault = current === opt.default;
464
+ const label = isDefault ? '(default)' : '(custom)';
465
+ (0, output_js_1.printInfo)(` ${i + 1}. ${name} = ${current} ${label}`);
466
+ (0, output_js_1.printInfo)(` ${opt.description}`);
467
+ }
468
+ console.log();
469
+ rl.question(` Select option [1-${entries.length}] (Enter to cancel): `, (answer) => {
470
+ const num = parseInt(answer.trim(), 10);
471
+ if (num >= 1 && num <= entries.length) {
472
+ const [name, opt] = entries[num - 1];
473
+ rl.question(` New value for ${name} (Enter to cancel): `, (valAnswer) => {
474
+ const val = parseInt(valAnswer.trim(), 10);
475
+ if (val > 0) {
476
+ (0, config_js_1.saveOption)(name, val);
477
+ config[opt.configKey] = val;
478
+ (0, output_js_1.printInfo)(` ${name} set to ${val}`);
479
+ }
480
+ else if (valAnswer.trim() === '') {
481
+ (0, output_js_1.printInfo)(' Cancelled.');
482
+ }
483
+ else {
484
+ (0, output_js_1.printError)(' Invalid value. Must be a positive integer.');
485
+ }
486
+ console.log();
487
+ prompt();
488
+ });
489
+ }
490
+ else {
491
+ (0, output_js_1.printInfo)(' Cancelled.');
492
+ console.log();
493
+ prompt();
494
+ }
495
+ });
496
+ return;
497
+ }
498
+ } // end slash command handling
499
+ processing = true;
500
+ interrupted = false;
501
+ try {
502
+ (0, output_js_1.startSpinner)();
503
+ await agent.processInput(trimmed);
504
+ historyStore.save(agent.getHistory());
505
+ }
506
+ catch (err) {
507
+ if (!interrupted) {
508
+ const message = err instanceof Error ? err.message : String(err);
509
+ (0, output_js_1.printError)(message);
510
+ }
511
+ }
512
+ finally {
513
+ processing = false;
514
+ (0, output_js_1.stopSpinner)();
515
+ }
516
+ if (interrupted) {
517
+ (0, output_js_1.printInfo)('Interrupted.');
518
+ interrupted = false;
519
+ }
520
+ console.log(); // blank line between turns
521
+ prompt();
522
+ };
523
+ // Handle Ctrl+C gracefully
524
+ rl.on('close', async () => {
525
+ (0, output_js_1.printInfo)('\nGoodbye!');
526
+ await cleanup();
527
+ process.exit(0);
528
+ });
529
+ prompt();
530
+ }
531
+ //# sourceMappingURL=repl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repl.js","sourceRoot":"","sources":["../src/repl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function runFirstTimeSetup(): Promise<boolean>;
package/dist/setup.js ADDED
@@ -0,0 +1,104 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.runFirstTimeSetup = runFirstTimeSetup;
40
+ const readline = __importStar(require("node:readline"));
41
+ const chalk_1 = __importDefault(require("chalk"));
42
+ const config_js_1 = require("./config.js");
43
+ const PROVIDERS = Object.keys(config_js_1.PROVIDER_ENV_VARS);
44
+ function ask(rl, prompt) {
45
+ return new Promise((resolve) => {
46
+ rl.question(prompt, (answer) => resolve(answer.trim()));
47
+ });
48
+ }
49
+ async function runFirstTimeSetup() {
50
+ const statuses = (0, config_js_1.getProviderKeyStatus)();
51
+ if (statuses.some((s) => s.hasKey)) {
52
+ return false;
53
+ }
54
+ const rl = readline.createInterface({
55
+ input: process.stdin,
56
+ output: process.stdout,
57
+ });
58
+ try {
59
+ console.log(chalk_1.default.bold.cyan('\n Welcome to Bernard'));
60
+ console.log(chalk_1.default.gray(' Local CLI AI Agent with multi-provider support\n'));
61
+ console.log(chalk_1.default.white(' It looks like this is your first time running Bernard.'));
62
+ console.log(chalk_1.default.white(' Let\'s get you set up with an AI provider.\n'));
63
+ console.log(chalk_1.default.white(' Available providers:'));
64
+ for (let i = 0; i < PROVIDERS.length; i++) {
65
+ console.log(chalk_1.default.white(` ${i + 1}. ${PROVIDERS[i]}`));
66
+ }
67
+ console.log();
68
+ let provider;
69
+ while (!provider) {
70
+ const answer = await ask(rl, ` Select provider [1-${PROVIDERS.length}]: `);
71
+ const num = parseInt(answer, 10);
72
+ if (num >= 1 && num <= PROVIDERS.length) {
73
+ provider = PROVIDERS[num - 1];
74
+ }
75
+ else {
76
+ console.log(chalk_1.default.red(` Please enter a number between 1 and ${PROVIDERS.length}.`));
77
+ }
78
+ }
79
+ const envVar = config_js_1.PROVIDER_ENV_VARS[provider];
80
+ console.log(chalk_1.default.gray(`\n You'll need an API key for ${provider}.`));
81
+ console.log(chalk_1.default.gray(' (This will be saved securely to ~/.bernard/keys.json)\n'));
82
+ let key;
83
+ while (!key) {
84
+ const answer = await ask(rl, ` ${envVar}: `);
85
+ if (answer.length > 0) {
86
+ key = answer;
87
+ }
88
+ else {
89
+ console.log(chalk_1.default.red(' API key cannot be empty.'));
90
+ }
91
+ }
92
+ (0, config_js_1.saveProviderKey)(provider, key);
93
+ const model = (0, config_js_1.getDefaultModel)(provider);
94
+ (0, config_js_1.savePreferences)({ provider, model });
95
+ console.log(chalk_1.default.green('\n Setup complete!'));
96
+ console.log(chalk_1.default.gray(` Provider: ${provider} | Model: ${model}`));
97
+ console.log(chalk_1.default.gray(' You can change these later with /provider and /model\n'));
98
+ return true;
99
+ }
100
+ finally {
101
+ rl.close();
102
+ }
103
+ }
104
+ //# sourceMappingURL=setup.js.map