bernard-agent 0.8.0 → 0.9.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 (174) hide show
  1. package/README.md +80 -44
  2. package/dist/agent.d.ts +14 -3
  3. package/dist/agent.js +228 -38
  4. package/dist/agent.js.map +1 -1
  5. package/dist/builtin-specialists/correction-agent.json +32 -0
  6. package/dist/builtin-specialists/file-wrapper.json +43 -0
  7. package/dist/builtin-specialists/shell-wrapper.json +50 -0
  8. package/dist/builtin-specialists/specialist-creator.json +32 -0
  9. package/dist/builtin-specialists/web-wrapper.json +38 -0
  10. package/dist/candidate-bootstrap.d.ts +18 -0
  11. package/dist/candidate-bootstrap.js +61 -0
  12. package/dist/candidate-bootstrap.js.map +1 -0
  13. package/dist/config.d.ts +132 -10
  14. package/dist/config.js +234 -47
  15. package/dist/config.js.map +1 -1
  16. package/dist/context.js +23 -6
  17. package/dist/context.js.map +1 -1
  18. package/dist/correction-candidates.d.ts +54 -0
  19. package/dist/correction-candidates.js +138 -0
  20. package/dist/correction-candidates.js.map +1 -0
  21. package/dist/correction.d.ts +67 -0
  22. package/dist/correction.js +138 -0
  23. package/dist/correction.js.map +1 -0
  24. package/dist/critic.js +2 -1
  25. package/dist/critic.js.map +1 -1
  26. package/dist/cron/notes-store.d.ts +41 -0
  27. package/dist/cron/notes-store.js +134 -0
  28. package/dist/cron/notes-store.js.map +1 -0
  29. package/dist/cron/runner.js +25 -3
  30. package/dist/cron/runner.js.map +1 -1
  31. package/dist/cron/scoped-notes-tools.d.ts +24 -0
  32. package/dist/cron/scoped-notes-tools.js +50 -0
  33. package/dist/cron/scoped-notes-tools.js.map +1 -0
  34. package/dist/custom-providers.d.ts +80 -0
  35. package/dist/custom-providers.js +238 -0
  36. package/dist/custom-providers.js.map +1 -0
  37. package/dist/fs-utils.d.ts +2 -0
  38. package/dist/fs-utils.js +44 -0
  39. package/dist/fs-utils.js.map +1 -0
  40. package/dist/history.js +3 -1
  41. package/dist/history.js.map +1 -1
  42. package/dist/image.d.ts +59 -0
  43. package/dist/image.js +228 -0
  44. package/dist/image.js.map +1 -0
  45. package/dist/index.js +72 -4
  46. package/dist/index.js.map +1 -1
  47. package/dist/mcp.js +1 -1
  48. package/dist/mcp.js.map +1 -1
  49. package/dist/memory.d.ts +13 -0
  50. package/dist/memory.js +45 -4
  51. package/dist/memory.js.map +1 -1
  52. package/dist/menu.d.ts +97 -0
  53. package/dist/menu.js +338 -0
  54. package/dist/menu.js.map +1 -0
  55. package/dist/os-info.d.ts +22 -0
  56. package/dist/os-info.js +111 -0
  57. package/dist/os-info.js.map +1 -0
  58. package/dist/output.d.ts +35 -1
  59. package/dist/output.js +256 -45
  60. package/dist/output.js.map +1 -1
  61. package/dist/pac.d.ts +14 -2
  62. package/dist/pac.js +5 -5
  63. package/dist/pac.js.map +1 -1
  64. package/dist/paths.d.ts +5 -0
  65. package/dist/paths.js +6 -1
  66. package/dist/paths.js.map +1 -1
  67. package/dist/plan-store.d.ts +47 -0
  68. package/dist/plan-store.js +94 -0
  69. package/dist/plan-store.js.map +1 -0
  70. package/dist/prompt-rewriter.d.ts +29 -0
  71. package/dist/prompt-rewriter.js +155 -0
  72. package/dist/prompt-rewriter.js.map +1 -0
  73. package/dist/providers/index.d.ts +56 -4
  74. package/dist/providers/index.js +86 -5
  75. package/dist/providers/index.js.map +1 -1
  76. package/dist/providers/profiles.d.ts +37 -0
  77. package/dist/providers/profiles.js +110 -0
  78. package/dist/providers/profiles.js.map +1 -0
  79. package/dist/providers/types.d.ts +11 -2
  80. package/dist/providers/types.js +3 -0
  81. package/dist/providers/types.js.map +1 -1
  82. package/dist/rag-query.js +15 -1
  83. package/dist/rag-query.js.map +1 -1
  84. package/dist/react.d.ts +38 -0
  85. package/dist/react.js +116 -0
  86. package/dist/react.js.map +1 -0
  87. package/dist/reasoning-log.d.ts +30 -0
  88. package/dist/reasoning-log.js +102 -0
  89. package/dist/reasoning-log.js.map +1 -0
  90. package/dist/reference-resolver.d.ts +47 -0
  91. package/dist/reference-resolver.js +316 -0
  92. package/dist/reference-resolver.js.map +1 -0
  93. package/dist/reference-tool-lookup.d.ts +37 -0
  94. package/dist/reference-tool-lookup.js +318 -0
  95. package/dist/reference-tool-lookup.js.map +1 -0
  96. package/dist/repl.js +1053 -346
  97. package/dist/repl.js.map +1 -1
  98. package/dist/setup.js +2 -1
  99. package/dist/setup.js.map +1 -1
  100. package/dist/specialist-detector.js +2 -1
  101. package/dist/specialist-detector.js.map +1 -1
  102. package/dist/specialists.d.ts +74 -3
  103. package/dist/specialists.js +152 -20
  104. package/dist/specialists.js.map +1 -1
  105. package/dist/structured-output.d.ts +58 -0
  106. package/dist/structured-output.js +138 -0
  107. package/dist/structured-output.js.map +1 -0
  108. package/dist/theme.d.ts +2 -0
  109. package/dist/theme.js +18 -12
  110. package/dist/theme.js.map +1 -1
  111. package/dist/tool-call-repair.d.ts +29 -0
  112. package/dist/tool-call-repair.js +99 -0
  113. package/dist/tool-call-repair.js.map +1 -0
  114. package/dist/tool-profiles.d.ts +70 -0
  115. package/dist/tool-profiles.js +385 -0
  116. package/dist/tool-profiles.js.map +1 -0
  117. package/dist/tools/activity-summary.d.ts +15 -0
  118. package/dist/tools/activity-summary.js +44 -0
  119. package/dist/tools/activity-summary.js.map +1 -0
  120. package/dist/tools/ask-user.d.ts +49 -0
  121. package/dist/tools/ask-user.js +52 -0
  122. package/dist/tools/ask-user.js.map +1 -0
  123. package/dist/tools/augment.d.ts +17 -0
  124. package/dist/tools/augment.js +102 -0
  125. package/dist/tools/augment.js.map +1 -0
  126. package/dist/tools/cron-logs.js +7 -0
  127. package/dist/tools/cron-logs.js.map +1 -1
  128. package/dist/tools/cron-notes.d.ts +52 -0
  129. package/dist/tools/cron-notes.js +105 -0
  130. package/dist/tools/cron-notes.js.map +1 -0
  131. package/dist/tools/datetime.d.ts +7 -0
  132. package/dist/tools/datetime.js +29 -3
  133. package/dist/tools/datetime.js.map +1 -1
  134. package/dist/tools/evaluate.d.ts +20 -0
  135. package/dist/tools/evaluate.js +29 -0
  136. package/dist/tools/evaluate.js.map +1 -0
  137. package/dist/tools/index.js +4 -0
  138. package/dist/tools/index.js.map +1 -1
  139. package/dist/tools/mcp.d.ts +3 -3
  140. package/dist/tools/plan.d.ts +81 -0
  141. package/dist/tools/plan.js +108 -0
  142. package/dist/tools/plan.js.map +1 -0
  143. package/dist/tools/result-cap.d.ts +24 -0
  144. package/dist/tools/result-cap.js +44 -0
  145. package/dist/tools/result-cap.js.map +1 -0
  146. package/dist/tools/routine.d.ts +3 -3
  147. package/dist/tools/shell.d.ts +14 -1
  148. package/dist/tools/shell.js +86 -4
  149. package/dist/tools/shell.js.map +1 -1
  150. package/dist/tools/specialist-run.d.ts +5 -3
  151. package/dist/tools/specialist-run.js +115 -24
  152. package/dist/tools/specialist-run.js.map +1 -1
  153. package/dist/tools/specialist.d.ts +83 -3
  154. package/dist/tools/specialist.js +83 -3
  155. package/dist/tools/specialist.js.map +1 -1
  156. package/dist/tools/subagent.js +32 -14
  157. package/dist/tools/subagent.js.map +1 -1
  158. package/dist/tools/task.d.ts +19 -16
  159. package/dist/tools/task.js +69 -40
  160. package/dist/tools/task.js.map +1 -1
  161. package/dist/tools/think.d.ts +18 -0
  162. package/dist/tools/think.js +25 -0
  163. package/dist/tools/think.js.map +1 -0
  164. package/dist/tools/tool-wrapper-run.d.ts +121 -0
  165. package/dist/tools/tool-wrapper-run.js +382 -0
  166. package/dist/tools/tool-wrapper-run.js.map +1 -0
  167. package/dist/tools/types.d.ts +28 -2
  168. package/dist/tools/web-search.d.ts +31 -0
  169. package/dist/tools/web-search.js +172 -0
  170. package/dist/tools/web-search.js.map +1 -0
  171. package/dist/tools/wrap-with-specialist.d.ts +55 -0
  172. package/dist/tools/wrap-with-specialist.js +137 -0
  173. package/dist/tools/wrap-with-specialist.js.map +1 -0
  174. package/package.json +2 -2
@@ -0,0 +1,134 @@
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.CronNotesStore = exports.MAX_NOTE_LENGTH = void 0;
37
+ const fs = __importStar(require("node:fs"));
38
+ const path = __importStar(require("node:path"));
39
+ const paths_js_1 = require("../paths.js");
40
+ const fs_utils_js_1 = require("../fs-utils.js");
41
+ const memory_js_1 = require("../memory.js");
42
+ const MAX_ENTRIES = 100;
43
+ /** Maximum characters per note entry (enforced by writers). */
44
+ exports.MAX_NOTE_LENGTH = 1000;
45
+ /**
46
+ * Per-job persistent note store. Each job's notes live in their own JSON file
47
+ * under {@link CRON_NOTES_DIR} and survive daemon restarts. Entries are
48
+ * append-only with a bounded cap of {@link MAX_ENTRIES} (oldest dropped first).
49
+ */
50
+ class CronNotesStore {
51
+ constructor() {
52
+ fs.mkdirSync(paths_js_1.CRON_NOTES_DIR, { recursive: true });
53
+ }
54
+ static get notesDir() {
55
+ return paths_js_1.CRON_NOTES_DIR;
56
+ }
57
+ sanitizeJobId(jobId) {
58
+ const cleaned = (0, memory_js_1.sanitizeKey)(jobId);
59
+ if (!cleaned)
60
+ throw new Error(`Invalid jobId: ${JSON.stringify(jobId)}`);
61
+ return cleaned;
62
+ }
63
+ notesPath(jobId) {
64
+ return path.join(paths_js_1.CRON_NOTES_DIR, `${this.sanitizeJobId(jobId)}.json`);
65
+ }
66
+ /** Reads all note entries for a job. Returns an empty record if no file exists. */
67
+ read(jobId) {
68
+ const safeId = this.sanitizeJobId(jobId);
69
+ const filePath = this.notesPath(safeId);
70
+ if (!fs.existsSync(filePath))
71
+ return { jobId: safeId, entries: [] };
72
+ try {
73
+ const raw = fs.readFileSync(filePath, 'utf-8');
74
+ const parsed = JSON.parse(raw);
75
+ return {
76
+ jobId: parsed.jobId ?? safeId,
77
+ entries: Array.isArray(parsed.entries) ? parsed.entries : [],
78
+ };
79
+ }
80
+ catch (error) {
81
+ if (error instanceof SyntaxError) {
82
+ return { jobId: safeId, entries: [] };
83
+ }
84
+ if (typeof error === 'object' &&
85
+ error !== null &&
86
+ 'code' in error &&
87
+ error.code === 'ENOENT') {
88
+ return { jobId: safeId, entries: [] };
89
+ }
90
+ throw error;
91
+ }
92
+ }
93
+ /**
94
+ * Appends a note entry, capping at {@link MAX_ENTRIES} (oldest dropped).
95
+ * Returns the new entry and the post-append total so callers don't need a
96
+ * follow-up read to report counts.
97
+ */
98
+ append(jobId, text, runId) {
99
+ const safeId = this.sanitizeJobId(jobId);
100
+ const current = this.read(safeId);
101
+ const entry = {
102
+ timestamp: new Date().toISOString(),
103
+ text,
104
+ ...(runId ? { runId } : {}),
105
+ };
106
+ const nextEntries = [...current.entries, entry].slice(-MAX_ENTRIES);
107
+ const payload = { jobId: safeId, entries: nextEntries };
108
+ (0, fs_utils_js_1.atomicWriteFileSync)(this.notesPath(safeId), JSON.stringify(payload, null, 2));
109
+ return { entry, total: nextEntries.length };
110
+ }
111
+ /** Lists job IDs that have notes files on disk. */
112
+ listJobIds() {
113
+ if (!fs.existsSync(paths_js_1.CRON_NOTES_DIR))
114
+ return [];
115
+ return fs
116
+ .readdirSync(paths_js_1.CRON_NOTES_DIR)
117
+ .filter((f) => f.endsWith('.json'))
118
+ .map((f) => f.replace(/\.json$/, ''));
119
+ }
120
+ /** Deletes the notes file for a job. Returns `false` if nothing existed. */
121
+ clear(jobId) {
122
+ const filePath = this.notesPath(jobId);
123
+ if (!fs.existsSync(filePath))
124
+ return false;
125
+ fs.unlinkSync(filePath);
126
+ return true;
127
+ }
128
+ /** Returns only entries tagged with the given runId. */
129
+ entriesForRun(jobId, runId) {
130
+ return this.read(jobId).entries.filter((e) => e.runId === runId);
131
+ }
132
+ }
133
+ exports.CronNotesStore = CronNotesStore;
134
+ //# sourceMappingURL=notes-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notes-store.js","sourceRoot":"","sources":["../../src/cron/notes-store.ts"],"names":[],"mappings":"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"}
@@ -53,8 +53,11 @@ const time_js_1 = require("../tools/time.js");
53
53
  const mcp_js_1 = require("../mcp.js");
54
54
  const store_js_1 = require("./store.js");
55
55
  const log_store_js_1 = require("./log-store.js");
56
+ const notes_store_js_1 = require("./notes-store.js");
57
+ const scoped_notes_tools_js_1 = require("./scoped-notes-tools.js");
56
58
  const notify_js_1 = require("./notify.js");
57
59
  const pac_js_1 = require("../pac.js");
60
+ const tool_call_repair_js_1 = require("../tool-call-repair.js");
58
61
  const DAEMON_SYSTEM_PROMPT = `You are Bernard, running as a background cron job in daemon mode. There is no interactive user present — you execute autonomously and have a limited step budget (20 steps), so work efficiently.
59
62
 
60
63
  ## Structured Approach
@@ -76,6 +79,14 @@ This keeps you focused and prevents wasted steps on long-running jobs.
76
79
  - **cron_self_disable** — Disable this cron job so it won't run again. Use when a one-time task is complete.
77
80
  - You may also have access to **MCP tools** (email, calendar, etc.) depending on configuration.
78
81
 
82
+ ## Persistent Notes
83
+ You have \`cron_notes_read\` and \`cron_notes_write\`, both scoped to this job.
84
+
85
+ 1. Before taking action, call \`cron_notes_read\` to see what prior runs did. Use the notes to avoid duplicate work (e.g. don't re-send an email that a prior run already sent).
86
+ 2. After any significant action, call \`cron_notes_write\` with a short factual summary (e.g. "Sent weekly summary to user@example.com", "Created issue #123").
87
+
88
+ Notes persist across daemon restarts. Keep entries short — one line each — and concrete. Don't log routine checks that found nothing.
89
+
79
90
  ## Decision Rules
80
91
  - Be concise. Focus on actionable findings.
81
92
  - If everything looks normal and no action is needed, simply report results **without** notifying.
@@ -181,7 +192,9 @@ async function runJob(job, log) {
181
192
  const shellTool = (0, shell_js_1.createShellTool)({
182
193
  shellTimeout: config.shellTimeout,
183
194
  confirmDangerous: async () => false, // Auto-deny in daemon mode
195
+ // askUser intentionally omitted — no interactive user; the ask_user tool returns {unavailable}.
184
196
  });
197
+ const notesStore = new notes_store_js_1.CronNotesStore();
185
198
  const tools = {
186
199
  shell: shellTool,
187
200
  memory: (0, memory_js_2.createMemoryTool)(memoryStore),
@@ -192,6 +205,7 @@ async function runJob(job, log) {
192
205
  ...(0, time_js_1.createTimeTools)(),
193
206
  notify: notifyTool,
194
207
  cron_self_disable: selfDisableTool,
208
+ ...(0, scoped_notes_tools_js_1.createScopedCronNotesTools)(notesStore, job.id, runId),
195
209
  ...mcpTools,
196
210
  };
197
211
  // RAG search using job prompt as query
@@ -247,13 +261,19 @@ async function runJob(job, log) {
247
261
  finishReason: finishReason || 'unknown',
248
262
  });
249
263
  };
264
+ const repairHook = (0, tool_call_repair_js_1.makeRepairHook)({
265
+ config,
266
+ label: 'cron',
267
+ });
250
268
  const result = await (0, ai_1.generateText)({
251
- model: (0, index_js_1.getModel)(config.provider, config.model),
269
+ model: (0, index_js_1.getModelForConfig)(config, config.provider, config.model),
270
+ providerOptions: (0, index_js_1.getProviderOptionsForConfig)(config, config.provider),
252
271
  tools,
253
272
  maxSteps: config.maxSteps,
254
273
  maxTokens: config.maxTokens,
255
274
  system: enrichedPrompt,
256
275
  messages: [{ role: 'user', content: job.prompt }],
276
+ experimental_repairToolCall: repairHook,
257
277
  onStepFinish,
258
278
  });
259
279
  // Run PAC loop when critic mode is enabled
@@ -265,17 +285,19 @@ async function runJob(job, log) {
265
285
  initialResult: result,
266
286
  regenerate: async (extraMessages) => {
267
287
  return (0, ai_1.generateText)({
268
- model: (0, index_js_1.getModel)(config.provider, config.model),
288
+ model: (0, index_js_1.getModelForConfig)(config, config.provider, config.model),
289
+ providerOptions: (0, index_js_1.getProviderOptionsForConfig)(config, config.provider),
269
290
  tools,
270
291
  maxSteps: 20,
271
292
  maxTokens: config.maxTokens,
272
293
  system: enrichedPrompt,
273
294
  messages: [{ role: 'user', content: job.prompt }, ...extraMessages],
295
+ experimental_repairToolCall: repairHook,
274
296
  onStepFinish,
275
297
  });
276
298
  },
277
299
  });
278
- finalOutput = pacResult.finalText || '(no text output)';
300
+ finalOutput = pacResult.finalResult.text || '(no text output)';
279
301
  }
280
302
  else {
281
303
  finalOutput = result.text || '(no text output)';
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/cron/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/cron/runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { z } from 'zod';
2
+ import { CronNotesStore } from './notes-store.js';
3
+ /**
4
+ * Builds `cron_notes_read` and `cron_notes_write` tools pre-scoped to a single
5
+ * cron job and run. The daemon runner spreads these into its tools dict so the
6
+ * agent sees zero/one-arg versions that cannot read or write other jobs'
7
+ * notes and auto-tag writes with the current `runId`.
8
+ */
9
+ export declare function createScopedCronNotesTools(notesStore: CronNotesStore, jobId: string, runId: string): {
10
+ cron_notes_read: import("ai").Tool<z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>, string> & {
11
+ execute: (args: {}, options: import("ai").ToolExecutionOptions) => PromiseLike<string>;
12
+ };
13
+ cron_notes_write: import("ai").Tool<z.ZodObject<{
14
+ text: z.ZodString;
15
+ }, "strip", z.ZodTypeAny, {
16
+ text: string;
17
+ }, {
18
+ text: string;
19
+ }>, string> & {
20
+ execute: (args: {
21
+ text: string;
22
+ }, options: import("ai").ToolExecutionOptions) => PromiseLike<string>;
23
+ };
24
+ };
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createScopedCronNotesTools = createScopedCronNotesTools;
4
+ const ai_1 = require("ai");
5
+ const zod_1 = require("zod");
6
+ const notes_store_js_1 = require("./notes-store.js");
7
+ const cron_notes_js_1 = require("../tools/cron-notes.js");
8
+ const logger_js_1 = require("../logger.js");
9
+ /**
10
+ * Builds `cron_notes_read` and `cron_notes_write` tools pre-scoped to a single
11
+ * cron job and run. The daemon runner spreads these into its tools dict so the
12
+ * agent sees zero/one-arg versions that cannot read or write other jobs'
13
+ * notes and auto-tag writes with the current `runId`.
14
+ */
15
+ function createScopedCronNotesTools(notesStore, jobId, runId) {
16
+ const scopedNotesRead = (0, ai_1.tool)({
17
+ description: 'Read notes previously written for this cron job by prior runs. Call this before acting to avoid duplicate work.',
18
+ parameters: zod_1.z.object({}),
19
+ execute: async () => {
20
+ (0, logger_js_1.debugLog)('cron_notes_read:scoped:execute', { jobId });
21
+ const notes = notesStore.read(jobId);
22
+ if (notes.entries.length === 0) {
23
+ return `No prior notes for this job.`;
24
+ }
25
+ const label = notes.entries.length === 1 ? 'entry' : 'entries';
26
+ const lines = notes.entries.map(cron_notes_js_1.formatEntryCompact);
27
+ return `Prior notes (${notes.entries.length} ${label}):\n${lines.join('\n')}`;
28
+ },
29
+ });
30
+ const scopedNotesWrite = (0, ai_1.tool)({
31
+ description: "Append a short factual note recording a significant action this run took (e.g. 'Sent email to user@example.com', 'Created issue #123'). Keep it to one line.",
32
+ parameters: zod_1.z.object({
33
+ text: zod_1.z
34
+ .string()
35
+ .min(1)
36
+ .max(notes_store_js_1.MAX_NOTE_LENGTH)
37
+ .describe('Short factual description of the action'),
38
+ }),
39
+ execute: async ({ text }) => {
40
+ (0, logger_js_1.debugLog)('cron_notes_write:scoped:execute', { jobId, runId, text });
41
+ notesStore.append(jobId, text, runId);
42
+ return `Note appended (run ${runId.slice(0, 8)}).`;
43
+ },
44
+ });
45
+ return {
46
+ cron_notes_read: scopedNotesRead,
47
+ cron_notes_write: scopedNotesWrite,
48
+ };
49
+ }
50
+ //# sourceMappingURL=scoped-notes-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoped-notes-tools.js","sourceRoot":"","sources":["../../src/cron/scoped-notes-tools.ts"],"names":[],"mappings":";;AAYA,gEA0CC;AAtDD,2BAA0B;AAC1B,6BAAwB;AACxB,qDAAmE;AACnE,0DAA4D;AAC5D,4CAAwC;AAExC;;;;;GAKG;AACH,SAAgB,0BAA0B,CACxC,UAA0B,EAC1B,KAAa,EACb,KAAa;IAEb,MAAM,eAAe,GAAG,IAAA,SAAI,EAAC;QAC3B,WAAW,EACT,iHAAiH;QACnH,UAAU,EAAE,OAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,KAAK,IAAqB,EAAE;YACnC,IAAA,oBAAQ,EAAC,gCAAgC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACtD,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC/B,OAAO,8BAA8B,CAAC;YACxC,CAAC;YACD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;YAC/D,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,kCAAkB,CAAC,CAAC;YACpD,OAAO,gBAAgB,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAChF,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,gBAAgB,GAAG,IAAA,SAAI,EAAC;QAC5B,WAAW,EACT,8JAA8J;QAChK,UAAU,EAAE,OAAC,CAAC,MAAM,CAAC;YACnB,IAAI,EAAE,OAAC;iBACJ,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,gCAAe,CAAC;iBACpB,QAAQ,CAAC,yCAAyC,CAAC;SACvD,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAmB,EAAE;YAC3C,IAAA,oBAAQ,EAAC,iCAAiC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACpE,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YACtC,OAAO,sBAAsB,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC;QACrD,CAAC;KACF,CAAC,CAAC;IAEH,OAAO;QACL,eAAe,EAAE,eAAe;QAChC,gBAAgB,EAAE,gBAAgB;KACnC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * @module custom-providers
3
+ *
4
+ * Disk-backed registry of user-defined custom providers — named endpoints
5
+ * that wrap one of the installed AI SDKs (`@ai-sdk/openai`,
6
+ * `@ai-sdk/anthropic`, `@ai-sdk/xai`) with a custom `baseURL` and API key.
7
+ *
8
+ * Lets the user route Bernard at OpenAI/Anthropic/xAI-compatible servers
9
+ * (Ollama, LM Studio, vLLM, OpenRouter, Together, internal proxies, ...)
10
+ * and have several such endpoints configured at once alongside the
11
+ * built-in providers.
12
+ *
13
+ * Storage: `~/.config/bernard/custom-providers.json`
14
+ * Shape: `{ providers: Record<name, CustomProvider> }` with file mode 0600.
15
+ *
16
+ * API keys are NOT stored here; they live in `keys.json` keyed by the
17
+ * provider name (the same file the built-in providers use).
18
+ */
19
+ import type { SupportedSdk } from './providers/types.js';
20
+ /** Names reserved by built-in providers — cannot be used for custom entries. */
21
+ export declare const RESERVED_PROVIDER_NAMES: ReadonlySet<string>;
22
+ /** Allowed SDK choices for a custom provider. */
23
+ export declare const SUPPORTED_SDKS: ReadonlyArray<SupportedSdk>;
24
+ /** A single registered custom provider. */
25
+ export interface CustomProvider {
26
+ /** Provider name — used as the `--provider` value. Lowercase, [a-z0-9_-]+. */
27
+ name: string;
28
+ /** Which installed AI-SDK package to wrap. */
29
+ sdk: SupportedSdk;
30
+ /** Base URL for the provider endpoint, e.g. `http://localhost:11434/v1`. */
31
+ baseURL: string;
32
+ /** Default model — first one offered in the /model menu, used when switching. */
33
+ defaultModel: string;
34
+ /** Known models for this provider. `defaultModel` is always first. Grows as user types new model names. */
35
+ models: string[];
36
+ /** ISO-8601 creation timestamp. */
37
+ createdAt: string;
38
+ /** ISO-8601 last-update timestamp. */
39
+ updatedAt: string;
40
+ }
41
+ /**
42
+ * Validates a custom provider name.
43
+ * @returns An error message if invalid, or `null` if valid.
44
+ */
45
+ export declare function validateProviderName(name: string): string | null;
46
+ /**
47
+ * Validates a base URL — must parse, and use http/https.
48
+ * @returns An error message if invalid, or `null` if valid.
49
+ */
50
+ export declare function validateBaseURL(url: string): string | null;
51
+ /** Reads the custom-providers file. Fails open to an empty map on any error. */
52
+ export declare function loadCustomProviders(): Record<string, CustomProvider>;
53
+ /**
54
+ * Inserts or updates a custom provider. Validates name / sdk / baseURL /
55
+ * defaultModel and ensures `defaultModel` is the first entry in `models`.
56
+ *
57
+ * @throws {Error} If any field fails validation.
58
+ */
59
+ export declare function saveCustomProvider(input: {
60
+ name: string;
61
+ sdk: SupportedSdk;
62
+ baseURL: string;
63
+ defaultModel: string;
64
+ models?: string[];
65
+ }): CustomProvider;
66
+ /**
67
+ * Deletes a custom provider entry. Does NOT delete the matching key in
68
+ * `keys.json` — callers (CLI / REPL) handle key cleanup explicitly.
69
+ *
70
+ * @throws {Error} If no custom provider with that name exists.
71
+ */
72
+ export declare function removeCustomProvider(name: string): void;
73
+ /**
74
+ * Adds `model` to the remembered list for a custom provider if not already
75
+ * present. The default model always stays at position 0. No-op when the
76
+ * provider is unknown.
77
+ */
78
+ export declare function rememberCustomModel(name: string, model: string): void;
79
+ /** Returns true if `name` matches an existing custom provider entry. */
80
+ export declare function isCustomProvider(name: string, customProviders?: Record<string, CustomProvider>): boolean;