bernard-agent 0.8.1 → 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 +126 -10
  14. package/dist/config.js +222 -45
  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 +1038 -371
  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 +5 -5
  159. package/dist/tools/task.js +9 -42
  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,49 @@
1
+ import { z } from 'zod';
2
+ import type { ToolOptions } from './types.js';
3
+ /**
4
+ * Creates the `ask_user` tool that pauses the agent loop to ask the user one
5
+ * or more clarifying questions. Without this tool the agent would write the
6
+ * question as prose, which (a) provides no input back to the agent and (b) in
7
+ * coordinator mode trips the plan-enforcement loop and aborts the turn.
8
+ */
9
+ export declare function createAskUserTool(askUser: ToolOptions['askUser']): import("ai").Tool<z.ZodObject<{
10
+ questions: z.ZodArray<z.ZodObject<{
11
+ question: z.ZodString;
12
+ choices: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
13
+ allow_other: z.ZodOptional<z.ZodBoolean>;
14
+ other_label: z.ZodOptional<z.ZodString>;
15
+ }, "strip", z.ZodTypeAny, {
16
+ question: string;
17
+ choices?: string[] | undefined;
18
+ allow_other?: boolean | undefined;
19
+ other_label?: string | undefined;
20
+ }, {
21
+ question: string;
22
+ choices?: string[] | undefined;
23
+ allow_other?: boolean | undefined;
24
+ other_label?: string | undefined;
25
+ }>, "many">;
26
+ }, "strip", z.ZodTypeAny, {
27
+ questions: {
28
+ question: string;
29
+ choices?: string[] | undefined;
30
+ allow_other?: boolean | undefined;
31
+ other_label?: string | undefined;
32
+ }[];
33
+ }, {
34
+ questions: {
35
+ question: string;
36
+ choices?: string[] | undefined;
37
+ allow_other?: boolean | undefined;
38
+ other_label?: string | undefined;
39
+ }[];
40
+ }>, string> & {
41
+ execute: (args: {
42
+ questions: {
43
+ question: string;
44
+ choices?: string[] | undefined;
45
+ allow_other?: boolean | undefined;
46
+ other_label?: string | undefined;
47
+ }[];
48
+ }, options: import("ai").ToolExecutionOptions) => PromiseLike<string>;
49
+ };
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createAskUserTool = createAskUserTool;
4
+ const ai_1 = require("ai");
5
+ const zod_1 = require("zod");
6
+ /**
7
+ * Creates the `ask_user` tool that pauses the agent loop to ask the user one
8
+ * or more clarifying questions. Without this tool the agent would write the
9
+ * question as prose, which (a) provides no input back to the agent and (b) in
10
+ * coordinator mode trips the plan-enforcement loop and aborts the turn.
11
+ */
12
+ function createAskUserTool(askUser) {
13
+ return (0, ai_1.tool)({
14
+ description: 'Ask the user one or more clarifying questions and wait for their answers. Use this whenever you need information only the user can provide (intent, preferences, missing arguments) — do NOT write the question as prose in your reply, since that gets no response back. Provide each question as an entry in `questions`; supply `choices` per question when the answer is constrained, otherwise the user gets a free-form prompt. Batch related questions in one call (e.g. title + body + labels) — the user sees a tab strip showing progress. Returns JSON: {"answers": ["...", "..."]} aligned by index, {"cancelled": true, "answered": [...]} with whatever was answered before cancel, or {"unavailable": true} if running headless.',
15
+ parameters: zod_1.z.object({
16
+ questions: zod_1.z
17
+ .array(zod_1.z.object({
18
+ question: zod_1.z.string().min(1).describe('The question to show the user'),
19
+ choices: zod_1.z
20
+ .array(zod_1.z.string())
21
+ .min(2)
22
+ .optional()
23
+ .describe('Optional list of answer labels. Provide 2+ entries; one-choice menus are rejected.'),
24
+ allow_other: zod_1.z
25
+ .boolean()
26
+ .optional()
27
+ .describe('When choices are given, also append an escape-hatch option that lets the user type a custom answer. Set false when your choices already cover every case. Default true.'),
28
+ other_label: zod_1.z
29
+ .string()
30
+ .optional()
31
+ .describe('Label for the appended escape-hatch option. Use this to make the wording specific to your question (e.g. "Other (I will specify title and body)"). Ignored when allow_other is false. Defaults to a generic "Other (type a custom answer)".'),
32
+ }))
33
+ .min(1)
34
+ .max(10)
35
+ .describe('One or more questions to ask in sequence. For batches of 2+, the user sees a tab strip with completed/current/upcoming markers.'),
36
+ }),
37
+ execute: async ({ questions }, execOptions) => {
38
+ if (!askUser) {
39
+ return JSON.stringify({ unavailable: true, reason: 'no interactive user' });
40
+ }
41
+ const normalised = questions.map((q) => ({
42
+ question: q.question,
43
+ choices: q.choices,
44
+ allowOther: q.choices && q.choices.length > 0 ? q.allow_other !== false : true,
45
+ otherLabel: q.other_label,
46
+ }));
47
+ const result = await askUser(normalised, execOptions?.abortSignal);
48
+ return JSON.stringify(result);
49
+ },
50
+ });
51
+ }
52
+ //# sourceMappingURL=ask-user.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ask-user.js","sourceRoot":"","sources":["../../src/tools/ask-user.ts"],"names":[],"mappings":";;AAUA,8CAkDC;AA5DD,2BAA0B;AAC1B,6BAAwB;AAGxB;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,OAA+B;IAC/D,OAAO,IAAA,SAAI,EAAC;QACV,WAAW,EACT,itBAAitB;QACntB,UAAU,EAAE,OAAC,CAAC,MAAM,CAAC;YACnB,SAAS,EAAE,OAAC;iBACT,KAAK,CACJ,OAAC,CAAC,MAAM,CAAC;gBACP,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC;gBACrE,OAAO,EAAE,OAAC;qBACP,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC;qBACjB,GAAG,CAAC,CAAC,CAAC;qBACN,QAAQ,EAAE;qBACV,QAAQ,CACP,oFAAoF,CACrF;gBACH,WAAW,EAAE,OAAC;qBACX,OAAO,EAAE;qBACT,QAAQ,EAAE;qBACV,QAAQ,CACP,yKAAyK,CAC1K;gBACH,WAAW,EAAE,OAAC;qBACX,MAAM,EAAE;qBACR,QAAQ,EAAE;qBACV,QAAQ,CACP,6OAA6O,CAC9O;aACJ,CAAC,CACH;iBACA,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,EAAE,CAAC;iBACP,QAAQ,CACP,iIAAiI,CAClI;SACJ,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,WAAW,EAAmB,EAAE;YAC7D,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC,CAAC;YAC9E,CAAC;YACD,MAAM,UAAU,GAAsB,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC1D,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,UAAU,EAAE,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI;gBAC9E,UAAU,EAAE,CAAC,CAAC,WAAW;aAC1B,CAAC,CAAC,CAAC;YACJ,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;YACnE,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { type ToolProfileStore } from '../tool-profiles.js';
2
+ /**
3
+ * Wraps every tool's `execute` function to observe results and record
4
+ * error examples to the profile store, and patch fixes when the model
5
+ * retries successfully. The recording is fire-and-forget via `setImmediate`
6
+ * so it never adds latency to tool execution.
7
+ *
8
+ * Does NOT modify tool descriptions, parameters, or any other field.
9
+ */
10
+ /**
11
+ * Uses `Record<string, any>` intentionally — this is a generic wrapper across
12
+ * heterogeneous tool types (built-in, MCP, dispatch) whose parameter types are
13
+ * erased at this boundary. The SDK's `ToolSet` type is `Record<string, Tool>`
14
+ * but `Tool`'s generic parameters make it impossible to write a single wrapper
15
+ * without `any`.
16
+ */
17
+ export declare function augmentTools(tools: Record<string, any>, profileStore: ToolProfileStore): Record<string, any>;
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.augmentTools = augmentTools;
4
+ const tool_profiles_js_1 = require("../tool-profiles.js");
5
+ const logger_js_1 = require("../logger.js");
6
+ const output_js_1 = require("../output.js");
7
+ /**
8
+ * Returns the profile key for a given tool invocation. Shell commands are
9
+ * classified into sub-categories; MCP tools are prefixed with `mcp.`.
10
+ */
11
+ function resolveProfileKey(toolName, args) {
12
+ if (toolName === 'shell' && args && typeof args === 'object') {
13
+ const cmd = args.command;
14
+ if (typeof cmd === 'string') {
15
+ return `shell.${(0, tool_profiles_js_1.classifyShellCommand)(cmd)}`;
16
+ }
17
+ }
18
+ // MCP tools follow the @ai-sdk/mcp naming convention: serverName__toolName
19
+ if (toolName.includes('__')) {
20
+ return `mcp.${toolName}`;
21
+ }
22
+ return toolName;
23
+ }
24
+ function safeSerialize(args) {
25
+ try {
26
+ return JSON.stringify(args).slice(0, 300);
27
+ }
28
+ catch {
29
+ return String(args).slice(0, 300);
30
+ }
31
+ }
32
+ /**
33
+ * Wraps every tool's `execute` function to observe results and record
34
+ * error examples to the profile store, and patch fixes when the model
35
+ * retries successfully. The recording is fire-and-forget via `setImmediate`
36
+ * so it never adds latency to tool execution.
37
+ *
38
+ * Does NOT modify tool descriptions, parameters, or any other field.
39
+ */
40
+ /**
41
+ * Uses `Record<string, any>` intentionally — this is a generic wrapper across
42
+ * heterogeneous tool types (built-in, MCP, dispatch) whose parameter types are
43
+ * erased at this boundary. The SDK's `ToolSet` type is `Record<string, Tool>`
44
+ * but `Tool`'s generic parameters make it impossible to write a single wrapper
45
+ * without `any`.
46
+ */
47
+ function augmentTools(tools, profileStore) {
48
+ const augmented = {};
49
+ for (const [toolName, toolDef] of Object.entries(tools)) {
50
+ if (!toolDef || typeof toolDef.execute !== 'function') {
51
+ augmented[toolName] = toolDef;
52
+ continue;
53
+ }
54
+ const originalExecute = toolDef.execute;
55
+ augmented[toolName] = {
56
+ ...toolDef,
57
+ execute: async (args, execOptions) => {
58
+ let result;
59
+ try {
60
+ result = await originalExecute(args, execOptions);
61
+ }
62
+ catch (thrown) {
63
+ // Infrastructure-level throws (MCP reconnect, network, etc.) are not
64
+ // usage errors — don't record them as bad examples.
65
+ (0, logger_js_1.debugLog)(`augment:${toolName}:threw`, thrown instanceof Error ? thrown.message : String(thrown));
66
+ throw thrown;
67
+ }
68
+ // Non-blocking observation: record error/success in the next event loop tick
69
+ const profileKey = resolveProfileKey(toolName, args);
70
+ const capturedResult = result;
71
+ setImmediate(() => {
72
+ try {
73
+ const errorInfo = (0, tool_profiles_js_1.detectToolError)(toolName, capturedResult);
74
+ const argsSnippet = safeSerialize(args);
75
+ if (errorInfo.isError) {
76
+ profileStore.recordBadExample(profileKey, argsSnippet, errorInfo.snippet);
77
+ (0, logger_js_1.debugLog)(`augment:${toolName}:error`, { profileKey, snippet: errorInfo.snippet });
78
+ (0, output_js_1.printInfo)(` ~ profile ${profileKey} — recorded error`);
79
+ }
80
+ else {
81
+ // On success, check if we should patch the last unfixed bad example
82
+ const profile = profileStore.get(profileKey);
83
+ if (profile?.badExamples.length &&
84
+ profile.badExamples[profile.badExamples.length - 1].fix ===
85
+ '(awaiting successful retry)') {
86
+ profileStore.patchLastBadWithFix(profileKey, argsSnippet);
87
+ (0, logger_js_1.debugLog)(`augment:${toolName}:patched`, { profileKey });
88
+ (0, output_js_1.printInfo)(` ~ profile ${profileKey} — learned fix`);
89
+ }
90
+ }
91
+ }
92
+ catch {
93
+ // Recording must never propagate errors
94
+ }
95
+ });
96
+ return result;
97
+ },
98
+ };
99
+ }
100
+ return augmented;
101
+ }
102
+ //# sourceMappingURL=augment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"augment.js","sourceRoot":"","sources":["../../src/tools/augment.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ exports.createCronLogTools = createCronLogTools;
4
4
  const ai_1 = require("ai");
5
5
  const zod_1 = require("zod");
6
6
  const log_store_js_1 = require("../cron/log-store.js");
7
+ const notes_store_js_1 = require("../cron/notes-store.js");
7
8
  const logger_js_1 = require("../logger.js");
8
9
  /**
9
10
  * Creates tools for inspecting and managing cron job execution logs.
@@ -13,6 +14,7 @@ const logger_js_1 = require("../logger.js");
13
14
  */
14
15
  function createCronLogTools() {
15
16
  const logStore = new log_store_js_1.CronLogStore();
17
+ const notesStore = new notes_store_js_1.CronNotesStore();
16
18
  return {
17
19
  cron_logs_list: (0, ai_1.tool)({
18
20
  description: 'List recent cron job execution runs. Returns one-line summaries (no step details). Use cron_logs_get for full traces.',
@@ -78,6 +80,11 @@ function createCronLogTools() {
78
80
  }
79
81
  }
80
82
  result += `\n--- Final Output ---\n${entry.finalOutput}`;
83
+ const notes = notesStore.entriesForRun(job_id, run_id);
84
+ if (notes.length > 0) {
85
+ result += `\n\n## Notes written during this run\n`;
86
+ result += notes.map((n) => `- ${n.timestamp} — ${n.text}`).join('\n');
87
+ }
81
88
  return result;
82
89
  },
83
90
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"cron-logs.js","sourceRoot":"","sources":["../../src/tools/cron-logs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cron-logs.js","sourceRoot":"","sources":["../../src/tools/cron-logs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import { z } from 'zod';
2
+ import { type CronNoteEntry } from '../cron/notes-store.js';
3
+ export declare function formatEntryCompact(e: CronNoteEntry): string;
4
+ /**
5
+ * Creates tools for reading and maintaining persistent per-job cron notes.
6
+ *
7
+ * All tools take a `job_id` parameter. In daemon runs, these globals are
8
+ * overridden by job-scoped closures in {@link ../cron/runner} that auto-tag
9
+ * writes with the current runId; see runner.ts for the self-scoped variants.
10
+ */
11
+ export declare function createCronNotesTools(): {
12
+ cron_notes_read: import("ai").Tool<z.ZodObject<{
13
+ job_id: z.ZodString;
14
+ }, "strip", z.ZodTypeAny, {
15
+ job_id: string;
16
+ }, {
17
+ job_id: string;
18
+ }>, string> & {
19
+ execute: (args: {
20
+ job_id: string;
21
+ }, options: import("ai").ToolExecutionOptions) => PromiseLike<string>;
22
+ };
23
+ cron_notes_write: import("ai").Tool<z.ZodObject<{
24
+ job_id: z.ZodString;
25
+ text: z.ZodString;
26
+ }, "strip", z.ZodTypeAny, {
27
+ text: string;
28
+ job_id: string;
29
+ }, {
30
+ text: string;
31
+ job_id: string;
32
+ }>, string> & {
33
+ execute: (args: {
34
+ text: string;
35
+ job_id: string;
36
+ }, options: import("ai").ToolExecutionOptions) => PromiseLike<string>;
37
+ };
38
+ cron_notes_list: import("ai").Tool<z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>, string> & {
39
+ execute: (args: {}, options: import("ai").ToolExecutionOptions) => PromiseLike<string>;
40
+ };
41
+ cron_notes_view: import("ai").Tool<z.ZodObject<{
42
+ job_id: z.ZodString;
43
+ }, "strip", z.ZodTypeAny, {
44
+ job_id: string;
45
+ }, {
46
+ job_id: string;
47
+ }>, string> & {
48
+ execute: (args: {
49
+ job_id: string;
50
+ }, options: import("ai").ToolExecutionOptions) => PromiseLike<string>;
51
+ };
52
+ };
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatEntryCompact = formatEntryCompact;
4
+ exports.createCronNotesTools = createCronNotesTools;
5
+ const ai_1 = require("ai");
6
+ const zod_1 = require("zod");
7
+ const notes_store_js_1 = require("../cron/notes-store.js");
8
+ const store_js_1 = require("../cron/store.js");
9
+ const logger_js_1 = require("../logger.js");
10
+ function pluralizeEntries(n) {
11
+ return `${n} ${n === 1 ? 'entry' : 'entries'}`;
12
+ }
13
+ function formatEntryCompact(e) {
14
+ const run = e.runId ? ` run:${e.runId.slice(0, 8)}` : '';
15
+ return ` [${e.timestamp}${run}] ${e.text}`;
16
+ }
17
+ function formatEntryView(e) {
18
+ const run = e.runId ? ` (run ${e.runId.slice(0, 8)})` : '';
19
+ return `• ${e.timestamp}${run}\n ${e.text}`;
20
+ }
21
+ /**
22
+ * Creates tools for reading and maintaining persistent per-job cron notes.
23
+ *
24
+ * All tools take a `job_id` parameter. In daemon runs, these globals are
25
+ * overridden by job-scoped closures in {@link ../cron/runner} that auto-tag
26
+ * writes with the current runId; see runner.ts for the self-scoped variants.
27
+ */
28
+ function createCronNotesTools() {
29
+ const notesStore = new notes_store_js_1.CronNotesStore();
30
+ const cronStore = new store_js_1.CronStore();
31
+ return {
32
+ cron_notes_read: (0, ai_1.tool)({
33
+ description: 'Read all persistent notes for a cron job. Returns a human-readable formatted list of note entries including timestamp, optional runId, and text. Notes persist across daemon restarts and record actions prior runs took.',
34
+ parameters: zod_1.z.object({
35
+ job_id: zod_1.z.string().describe('Job ID to read notes for'),
36
+ }),
37
+ execute: async ({ job_id }) => {
38
+ (0, logger_js_1.debugLog)('cron_notes_read:execute', { job_id });
39
+ const notes = notesStore.read(job_id);
40
+ if (notes.entries.length === 0) {
41
+ return `No notes recorded for job "${job_id}".`;
42
+ }
43
+ const lines = notes.entries.map(formatEntryCompact);
44
+ return `Notes for job "${job_id}" (${pluralizeEntries(notes.entries.length)}):\n${lines.join('\n')}`;
45
+ },
46
+ }),
47
+ cron_notes_write: (0, ai_1.tool)({
48
+ description: 'Append a persistent note to a cron job. Use short factual entries recording significant actions (e.g. "Sent email to user@example.com", "Created issue #123"). Notes persist across daemon restarts.',
49
+ parameters: zod_1.z.object({
50
+ job_id: zod_1.z.string().describe('Job ID to attach the note to'),
51
+ text: zod_1.z
52
+ .string()
53
+ .min(1)
54
+ .max(notes_store_js_1.MAX_NOTE_LENGTH)
55
+ .describe('Short factual description of the action'),
56
+ }),
57
+ execute: async ({ job_id, text }) => {
58
+ (0, logger_js_1.debugLog)('cron_notes_write:execute', { job_id, text });
59
+ if (text.length > notes_store_js_1.MAX_NOTE_LENGTH) {
60
+ return `Error: note text exceeds ${notes_store_js_1.MAX_NOTE_LENGTH} characters (got ${text.length}). Summarize first.`;
61
+ }
62
+ const { total } = notesStore.append(job_id, text);
63
+ return `Appended note to job "${job_id}" (${pluralizeEntries(total)} total).`;
64
+ },
65
+ }),
66
+ cron_notes_list: (0, ai_1.tool)({
67
+ description: 'List all cron jobs that have persistent notes, with an entry count per job. Use to discover which jobs are tracking state.',
68
+ parameters: zod_1.z.object({}),
69
+ execute: async () => {
70
+ (0, logger_js_1.debugLog)('cron_notes_list:execute', {});
71
+ const jobIds = notesStore.listJobIds();
72
+ if (jobIds.length === 0) {
73
+ return 'No cron jobs have notes yet.';
74
+ }
75
+ const lines = jobIds.map((id) => {
76
+ const job = cronStore.getJob(id);
77
+ const label = job ? `${id} (${job.name})` : id;
78
+ const count = notesStore.read(id).entries.length;
79
+ return ` ${label}: ${pluralizeEntries(count)}`;
80
+ });
81
+ return `Jobs with notes:\n${lines.join('\n')}`;
82
+ },
83
+ }),
84
+ cron_notes_view: (0, ai_1.tool)({
85
+ description: "View a cron job's persistent notes formatted for human reading (one entry per block). Prefer cron_notes_read for programmatic consumption.",
86
+ parameters: zod_1.z.object({
87
+ job_id: zod_1.z.string().describe('Job ID to view notes for'),
88
+ }),
89
+ execute: async ({ job_id }) => {
90
+ (0, logger_js_1.debugLog)('cron_notes_view:execute', { job_id });
91
+ const notes = notesStore.read(job_id);
92
+ if (notes.entries.length === 0) {
93
+ return `No notes recorded for job "${job_id}".`;
94
+ }
95
+ const job = cronStore.getJob(job_id);
96
+ const header = job
97
+ ? `Notes for "${job.name}" (${job_id}) — ${pluralizeEntries(notes.entries.length)}`
98
+ : `Notes for job ${job_id} — ${pluralizeEntries(notes.entries.length)}`;
99
+ const body = notes.entries.map(formatEntryView).join('\n\n');
100
+ return `${header}\n\n${body}`;
101
+ },
102
+ }),
103
+ };
104
+ }
105
+ //# sourceMappingURL=cron-notes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cron-notes.js","sourceRoot":"","sources":["../../src/tools/cron-notes.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { type UserContent } from 'ai';
1
2
  import { z } from 'zod';
2
3
  /** Creates a tool that returns the current local date and time as a human-readable string. */
3
4
  export declare function createDateTimeTool(): import("ai").Tool<z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>, string> & {
@@ -7,5 +8,11 @@ export declare function createDateTimeTool(): import("ai").Tool<z.ZodObject<{},
7
8
  export declare function formatCurrentDateTime(): string;
8
9
  /** Wraps user input with a local ISO 8601 timestamp prefix. */
9
10
  export declare function timestampUserMessage(userInput: string): string;
11
+ /**
12
+ * Timestamps a `UserContent` value (string or content-part array).
13
+ * For strings, delegates to `timestampUserMessage`.
14
+ * For arrays, prepends the timestamp to the first text part, or inserts a new one.
15
+ */
16
+ export declare function timestampUserContent(content: UserContent): UserContent;
10
17
  /** Strips a leading [ISO-timestamp] prefix from a message string. */
11
18
  export declare function stripTimestamp(text: string): string;
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createDateTimeTool = createDateTimeTool;
4
4
  exports.formatCurrentDateTime = formatCurrentDateTime;
5
5
  exports.timestampUserMessage = timestampUserMessage;
6
+ exports.timestampUserContent = timestampUserContent;
6
7
  exports.stripTimestamp = stripTimestamp;
7
8
  const ai_1 = require("ai");
8
9
  const zod_1 = require("zod");
@@ -44,8 +45,8 @@ function formatCurrentDateTime() {
44
45
  });
45
46
  return `${date} at ${time}`;
46
47
  }
47
- /** Wraps user input with a local ISO 8601 timestamp prefix. */
48
- function timestampUserMessage(userInput) {
48
+ /** Generates a `[ISO-8601]` prefix string for the current moment. */
49
+ function makeTimestampPrefix() {
49
50
  const now = new Date();
50
51
  const tzOffset = -now.getTimezoneOffset();
51
52
  const sign = tzOffset >= 0 ? '+' : '-';
@@ -54,7 +55,32 @@ function timestampUserMessage(userInput) {
54
55
  const localISO = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}-${String(now.getDate()).padStart(2, '0')}` +
55
56
  `T${String(now.getHours()).padStart(2, '0')}:${String(now.getMinutes()).padStart(2, '0')}:${String(now.getSeconds()).padStart(2, '0')}` +
56
57
  `${sign}${hh}:${mm}`;
57
- return `[${localISO}] ${userInput}`;
58
+ return `[${localISO}] `;
59
+ }
60
+ /** Wraps user input with a local ISO 8601 timestamp prefix. */
61
+ function timestampUserMessage(userInput) {
62
+ return makeTimestampPrefix() + userInput;
63
+ }
64
+ /**
65
+ * Timestamps a `UserContent` value (string or content-part array).
66
+ * For strings, delegates to `timestampUserMessage`.
67
+ * For arrays, prepends the timestamp to the first text part, or inserts a new one.
68
+ */
69
+ function timestampUserContent(content) {
70
+ if (typeof content === 'string') {
71
+ return timestampUserMessage(content);
72
+ }
73
+ const prefix = makeTimestampPrefix();
74
+ const parts = [...content];
75
+ const firstTextIdx = parts.findIndex((p) => typeof p === 'object' && p !== null && 'type' in p && p.type === 'text');
76
+ if (firstTextIdx >= 0) {
77
+ const tp = parts[firstTextIdx];
78
+ parts[firstTextIdx] = { type: 'text', text: prefix + tp.text };
79
+ }
80
+ else {
81
+ parts.unshift({ type: 'text', text: prefix.trim() });
82
+ }
83
+ return parts;
58
84
  }
59
85
  /** Strips a leading [ISO-timestamp] prefix from a message string. */
60
86
  function stripTimestamp(text) {
@@ -1 +1 @@
1
- {"version":3,"file":"datetime.js","sourceRoot":"","sources":["../../src/tools/datetime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"datetime.js","sourceRoot":"","sources":["../../src/tools/datetime.ts"],"names":[],"mappings":";;AAOA,gDAmBC;AAGD,sDAcC;AAiBD,oDAEC;AAOD,oDAiBC;AAGD,wCAEC;AA3FD,2BAA4C;AAC5C,6BAAwB;AAExB,6EAA6E;AAC7E,MAAM,mBAAmB,GAAG,0DAA0D,CAAC;AAEvF,8FAA8F;AAC9F,SAAgB,kBAAkB;IAChC,OAAO,IAAA,SAAI,EAAC;QACV,WAAW,EACT,wNAAwN;QAC1N,UAAU,EAAE,OAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,KAAK,IAAqB,EAAE;YACnC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,OAAO,GAAG,CAAC,cAAc,CAAC,OAAO,EAAE;gBACjC,OAAO,EAAE,MAAM;gBACf,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,MAAM;gBACb,GAAG,EAAE,SAAS;gBACd,IAAI,EAAE,SAAS;gBACf,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,SAAS;gBACjB,YAAY,EAAE,OAAO;aACtB,CAAC,CAAC;QACL,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,2EAA2E;AAC3E,SAAgB,qBAAqB;IACnC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,GAAG,CAAC,kBAAkB,CAAC,OAAO,EAAE;QAC3C,OAAO,EAAE,MAAM;QACf,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,MAAM;QACb,GAAG,EAAE,SAAS;KACf,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,GAAG,CAAC,kBAAkB,CAAC,OAAO,EAAE;QAC3C,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;QACjB,YAAY,EAAE,OAAO;KACtB,CAAC,CAAC;IACH,OAAO,GAAG,IAAI,OAAO,IAAI,EAAE,CAAC;AAC9B,CAAC;AAED,qEAAqE;AACrE,SAAS,mBAAmB;IAC1B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;IAC1C,MAAM,IAAI,GAAG,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACvC,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACxE,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC5D,MAAM,QAAQ,GACZ,GAAG,GAAG,CAAC,WAAW,EAAE,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;QAC/G,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;QACvI,GAAG,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC;IACvB,OAAO,IAAI,QAAQ,IAAI,CAAC;AAC1B,CAAC;AAED,+DAA+D;AAC/D,SAAgB,oBAAoB,CAAC,SAAiB;IACpD,OAAO,mBAAmB,EAAE,GAAG,SAAS,CAAC;AAC3C,CAAC;AAED;;;;GAIG;AACH,SAAgB,oBAAoB,CAAC,OAAoB;IACvD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,MAAM,GAAG,mBAAmB,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;IAC3B,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CAClC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAC/E,CAAC;IACF,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;QACtB,MAAM,EAAE,GAAG,KAAK,CAAC,YAAY,CAAmC,CAAC;QACjE,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;IACjE,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,qEAAqE;AACrE,SAAgB,cAAc,CAAC,IAAY;IACzC,OAAO,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Creates the `evaluate` tool for coordinator (ReAct) mode.
4
+ *
5
+ * Publishes a post-action self-evaluation. Unlike `think` (pre-action
6
+ * reasoning), `evaluate` runs AFTER a tool call or batch of tool calls to
7
+ * check whether the result matches expectations, surface surprises, and
8
+ * decide whether to continue or course-correct.
9
+ */
10
+ export declare function createEvaluateTool(): import("ai").Tool<z.ZodObject<{
11
+ evaluation: z.ZodString;
12
+ }, "strip", z.ZodTypeAny, {
13
+ evaluation: string;
14
+ }, {
15
+ evaluation: string;
16
+ }>, string> & {
17
+ execute: (args: {
18
+ evaluation: string;
19
+ }, options: import("ai").ToolExecutionOptions) => PromiseLike<string>;
20
+ };
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createEvaluateTool = createEvaluateTool;
4
+ const ai_1 = require("ai");
5
+ const zod_1 = require("zod");
6
+ const output_js_1 = require("../output.js");
7
+ /**
8
+ * Creates the `evaluate` tool for coordinator (ReAct) mode.
9
+ *
10
+ * Publishes a post-action self-evaluation. Unlike `think` (pre-action
11
+ * reasoning), `evaluate` runs AFTER a tool call or batch of tool calls to
12
+ * check whether the result matches expectations, surface surprises, and
13
+ * decide whether to continue or course-correct.
14
+ */
15
+ function createEvaluateTool() {
16
+ return (0, ai_1.tool)({
17
+ description: "Self-evaluate after a tool call or batch of parallel calls. Required in coordinator mode between each act and the next think/act. State in 1-3 sentences: (1) did the result match what you expected, (2) did it reveal any surprises, errors, or risks, (3) should you continue on the current path or course-correct? Be willing to catch yourself — phrases like 'Actually, that's not right because...' or 'Wait — this might make things worse, let me take a different approach' are exactly what this is for.",
18
+ parameters: zod_1.z.object({
19
+ evaluation: zod_1.z
20
+ .string()
21
+ .describe('A concise self-check after the most recent action (1-3 sentences). Cover: expectation vs. actual, any red flags, and whether to continue or correct course.'),
22
+ }),
23
+ execute: async ({ evaluation }) => {
24
+ (0, output_js_1.printEvaluation)(evaluation);
25
+ return 'Evaluation recorded.';
26
+ },
27
+ });
28
+ }
29
+ //# sourceMappingURL=evaluate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../../src/tools/evaluate.ts"],"names":[],"mappings":";;AAYA,gDAgBC;AA5BD,2BAA0B;AAC1B,6BAAwB;AACxB,4CAA+C;AAE/C;;;;;;;GAOG;AACH,SAAgB,kBAAkB;IAChC,OAAO,IAAA,SAAI,EAAC;QACV,WAAW,EACT,sfAAsf;QACxf,UAAU,EAAE,OAAC,CAAC,MAAM,CAAC;YACnB,UAAU,EAAE,OAAC;iBACV,MAAM,EAAE;iBACR,QAAQ,CACP,6JAA6J,CAC9J;SACJ,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,EAAmB,EAAE;YACjD,IAAA,2BAAe,EAAC,UAAU,CAAC,CAAC;YAC5B,OAAO,sBAAsB,CAAC;QAChC,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -6,10 +6,12 @@ const memory_js_1 = require("./memory.js");
6
6
  const datetime_js_1 = require("./datetime.js");
7
7
  const cron_js_1 = require("./cron.js");
8
8
  const cron_logs_js_1 = require("./cron-logs.js");
9
+ const cron_notes_js_1 = require("./cron-notes.js");
9
10
  const time_js_1 = require("./time.js");
10
11
  const mcp_js_1 = require("./mcp.js");
11
12
  const mcp_url_js_1 = require("./mcp-url.js");
12
13
  const web_js_1 = require("./web.js");
14
+ const web_search_js_1 = require("./web-search.js");
13
15
  const wait_js_1 = require("./wait.js");
14
16
  const file_js_1 = require("./file.js");
15
17
  const routine_js_1 = require("./routine.js");
@@ -33,10 +35,12 @@ function createTools(options, memoryStore, mcpTools, routineStore, specialistSto
33
35
  datetime: (0, datetime_js_1.createDateTimeTool)(),
34
36
  ...(0, cron_js_1.createCronTools)(),
35
37
  ...(0, cron_logs_js_1.createCronLogTools)(),
38
+ ...(0, cron_notes_js_1.createCronNotesTools)(),
36
39
  ...(0, time_js_1.createTimeTools)(),
37
40
  mcp_config: (0, mcp_js_1.createMCPConfigTool)(),
38
41
  mcp_add_url: (0, mcp_url_js_1.createMCPAddUrlTool)(),
39
42
  web_read: (0, web_js_1.createWebReadTool)(),
43
+ web_search: (0, web_search_js_1.createWebSearchTool)(),
40
44
  wait: (0, wait_js_1.createWaitTool)(),
41
45
  ...(0, file_js_1.createFileTools)(),
42
46
  ...mcpTools,