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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import { z } from 'zod';
2
+ export declare function createCronLogTools(): {
3
+ cron_logs_list: import("ai").Tool<z.ZodObject<{
4
+ job_id: z.ZodString;
5
+ limit: z.ZodDefault<z.ZodNumber>;
6
+ offset: z.ZodDefault<z.ZodNumber>;
7
+ }, "strip", z.ZodTypeAny, {
8
+ job_id: string;
9
+ limit: number;
10
+ offset: number;
11
+ }, {
12
+ job_id: string;
13
+ limit?: number | undefined;
14
+ offset?: number | undefined;
15
+ }>, string> & {
16
+ execute: (args: {
17
+ job_id: string;
18
+ limit: number;
19
+ offset: number;
20
+ }, options: import("ai").ToolExecutionOptions) => PromiseLike<string>;
21
+ };
22
+ cron_logs_get: import("ai").Tool<z.ZodObject<{
23
+ job_id: z.ZodString;
24
+ run_id: z.ZodString;
25
+ }, "strip", z.ZodTypeAny, {
26
+ job_id: string;
27
+ run_id: string;
28
+ }, {
29
+ job_id: string;
30
+ run_id: string;
31
+ }>, string> & {
32
+ execute: (args: {
33
+ job_id: string;
34
+ run_id: string;
35
+ }, options: import("ai").ToolExecutionOptions) => PromiseLike<string>;
36
+ };
37
+ cron_logs_summary: import("ai").Tool<z.ZodObject<{
38
+ job_id: z.ZodString;
39
+ }, "strip", z.ZodTypeAny, {
40
+ job_id: string;
41
+ }, {
42
+ job_id: string;
43
+ }>, string> & {
44
+ execute: (args: {
45
+ job_id: string;
46
+ }, options: import("ai").ToolExecutionOptions) => PromiseLike<string>;
47
+ };
48
+ cron_logs_cleanup: import("ai").Tool<z.ZodObject<{
49
+ job_id: z.ZodString;
50
+ action: z.ZodEnum<["rotate", "delete"]>;
51
+ keep: z.ZodDefault<z.ZodNumber>;
52
+ }, "strip", z.ZodTypeAny, {
53
+ action: "delete" | "rotate";
54
+ job_id: string;
55
+ keep: number;
56
+ }, {
57
+ action: "delete" | "rotate";
58
+ job_id: string;
59
+ keep?: number | undefined;
60
+ }>, string> & {
61
+ execute: (args: {
62
+ action: "delete" | "rotate";
63
+ job_id: string;
64
+ keep: number;
65
+ }, options: import("ai").ToolExecutionOptions) => PromiseLike<string>;
66
+ };
67
+ };
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createCronLogTools = createCronLogTools;
4
+ const ai_1 = require("ai");
5
+ const zod_1 = require("zod");
6
+ const log_store_js_1 = require("../cron/log-store.js");
7
+ const logger_js_1 = require("../logger.js");
8
+ function createCronLogTools() {
9
+ const logStore = new log_store_js_1.CronLogStore();
10
+ return {
11
+ cron_logs_list: (0, ai_1.tool)({
12
+ description: 'List recent cron job execution runs. Returns one-line summaries (no step details). Use cron_logs_get for full traces.',
13
+ parameters: zod_1.z.object({
14
+ job_id: zod_1.z.string().describe('Job ID to list runs for'),
15
+ limit: zod_1.z.number().min(1).max(50).default(10).describe('Number of runs to return (max 50)'),
16
+ offset: zod_1.z.number().min(0).default(0).describe('Offset for pagination'),
17
+ }),
18
+ execute: async ({ job_id, limit, offset }) => {
19
+ (0, logger_js_1.debugLog)('cron_logs_list:execute', { job_id, limit, offset });
20
+ const entries = logStore.getEntries(job_id, limit, offset);
21
+ if (entries.length === 0) {
22
+ const total = logStore.getEntryCount(job_id);
23
+ if (total === 0)
24
+ return `No execution logs found for job "${job_id}".`;
25
+ return `No more entries (total: ${total}, offset: ${offset}).`;
26
+ }
27
+ const total = logStore.getEntryCount(job_id);
28
+ const lines = entries.map(e => {
29
+ const status = e.success ? 'OK' : 'ERR';
30
+ const dur = `${e.durationMs}ms`;
31
+ const stepCount = e.steps.length;
32
+ const toolCallCount = e.steps.reduce((n, s) => n + s.toolCalls.length, 0);
33
+ return ` [${status}] ${e.completedAt} | ${dur} | ${stepCount} steps, ${toolCallCount} tool calls | run:${e.runId}`;
34
+ });
35
+ return `Execution logs for job "${job_id}" (showing ${entries.length} of ${total}, offset ${offset}):\n${lines.join('\n')}`;
36
+ },
37
+ }),
38
+ cron_logs_get: (0, ai_1.tool)({
39
+ description: 'Get the full execution trace for a specific cron job run, including all steps, tool calls, and results.',
40
+ parameters: zod_1.z.object({
41
+ job_id: zod_1.z.string().describe('Job ID'),
42
+ run_id: zod_1.z.string().describe('Run ID (from cron_logs_list output)'),
43
+ }),
44
+ execute: async ({ job_id, run_id }) => {
45
+ (0, logger_js_1.debugLog)('cron_logs_get:execute', { job_id, run_id });
46
+ const entry = logStore.getEntry(job_id, run_id);
47
+ if (!entry)
48
+ return `No log entry found for job "${job_id}", run "${run_id}".`;
49
+ let result = `Run: ${entry.runId}\n`;
50
+ result += `Job: ${entry.jobName} (${entry.jobId})\n`;
51
+ result += `Status: ${entry.success ? 'success' : 'error'}\n`;
52
+ if (entry.error)
53
+ result += `Error: ${entry.error}\n`;
54
+ result += `Started: ${entry.startedAt}\n`;
55
+ result += `Completed: ${entry.completedAt}\n`;
56
+ result += `Duration: ${entry.durationMs}ms\n`;
57
+ result += `Tokens: ${entry.totalUsage.promptTokens} prompt + ${entry.totalUsage.completionTokens} completion = ${entry.totalUsage.totalTokens} total\n`;
58
+ result += `Prompt: ${entry.prompt}\n`;
59
+ result += `\n--- Steps (${entry.steps.length}) ---\n`;
60
+ for (const step of entry.steps) {
61
+ result += `\nStep ${step.stepIndex} [${step.timestamp}] (${step.finishReason}):\n`;
62
+ if (step.text) {
63
+ result += ` Text: ${step.text}\n`;
64
+ }
65
+ for (const tc of step.toolCalls) {
66
+ result += ` Tool call: ${tc.toolName}(${JSON.stringify(tc.args)})\n`;
67
+ }
68
+ for (const tr of step.toolResults) {
69
+ const resultStr = typeof tr.result === 'string' ? tr.result : JSON.stringify(tr.result);
70
+ const truncated = resultStr.length > 500 ? resultStr.slice(0, 500) + '... (truncated)' : resultStr;
71
+ result += ` Tool result [${tr.toolName}]: ${truncated}\n`;
72
+ }
73
+ }
74
+ result += `\n--- Final Output ---\n${entry.finalOutput}`;
75
+ return result;
76
+ },
77
+ }),
78
+ cron_logs_summary: (0, ai_1.tool)({
79
+ description: 'Get aggregate statistics for a cron job: success rate, average duration, total token usage, recent run count.',
80
+ parameters: zod_1.z.object({
81
+ job_id: zod_1.z.string().describe('Job ID to summarize'),
82
+ }),
83
+ execute: async ({ job_id }) => {
84
+ (0, logger_js_1.debugLog)('cron_logs_summary:execute', { job_id });
85
+ const total = logStore.getEntryCount(job_id);
86
+ if (total === 0)
87
+ return `No execution logs found for job "${job_id}".`;
88
+ // Read all entries for summary (capped at most recent 500)
89
+ const entries = logStore.getEntries(job_id, 500, 0);
90
+ const successes = entries.filter(e => e.success).length;
91
+ const failures = entries.length - successes;
92
+ const successRate = ((successes / entries.length) * 100).toFixed(1);
93
+ const avgDuration = Math.round(entries.reduce((s, e) => s + e.durationMs, 0) / entries.length);
94
+ const totalTokens = entries.reduce((s, e) => s + e.totalUsage.totalTokens, 0);
95
+ const avgTokens = Math.round(totalTokens / entries.length);
96
+ let result = `Summary for job "${job_id}" (${entries.length} runs analyzed of ${total} total):\n`;
97
+ result += ` Success rate: ${successRate}% (${successes} ok, ${failures} errors)\n`;
98
+ result += ` Avg duration: ${avgDuration}ms\n`;
99
+ result += ` Total tokens: ${totalTokens} (avg ${avgTokens}/run)\n`;
100
+ if (entries.length > 0) {
101
+ result += ` Latest run: ${entries[0].completedAt} (${entries[0].success ? 'ok' : 'error'})`;
102
+ }
103
+ return result;
104
+ },
105
+ }),
106
+ cron_logs_cleanup: (0, ai_1.tool)({
107
+ description: 'Rotate or delete cron job execution logs. Use "rotate" to keep only the most recent entries, or "delete" to remove all logs for a job.',
108
+ parameters: zod_1.z.object({
109
+ job_id: zod_1.z.string().describe('Job ID'),
110
+ action: zod_1.z.enum(['rotate', 'delete']).describe('Action: "rotate" keeps recent entries, "delete" removes all'),
111
+ keep: zod_1.z.number().min(1).max(10000).default(500).describe('Number of recent entries to keep (only for rotate)'),
112
+ }),
113
+ execute: async ({ job_id, action, keep }) => {
114
+ (0, logger_js_1.debugLog)('cron_logs_cleanup:execute', { job_id, action, keep });
115
+ if (action === 'delete') {
116
+ const deleted = logStore.deleteJobLogs(job_id);
117
+ if (!deleted)
118
+ return `No log file found for job "${job_id}".`;
119
+ return `All execution logs deleted for job "${job_id}".`;
120
+ }
121
+ const countBefore = logStore.getEntryCount(job_id);
122
+ if (countBefore === 0)
123
+ return `No execution logs found for job "${job_id}".`;
124
+ logStore.rotate(job_id, keep);
125
+ const countAfter = logStore.getEntryCount(job_id);
126
+ return `Rotated logs for job "${job_id}": ${countBefore} → ${countAfter} entries (kept last ${keep}).`;
127
+ },
128
+ }),
129
+ };
130
+ }
131
+ //# sourceMappingURL=cron-logs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cron-logs.js","sourceRoot":"","sources":["../../src/tools/cron-logs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ import { z } from 'zod';
2
+ export declare function createCronTools(): {
3
+ cron_create: import("ai").Tool<z.ZodObject<{
4
+ name: z.ZodString;
5
+ schedule: z.ZodString;
6
+ prompt: z.ZodString;
7
+ }, "strip", z.ZodTypeAny, {
8
+ name: string;
9
+ schedule: string;
10
+ prompt: string;
11
+ }, {
12
+ name: string;
13
+ schedule: string;
14
+ prompt: string;
15
+ }>, string> & {
16
+ execute: (args: {
17
+ name: string;
18
+ schedule: string;
19
+ prompt: string;
20
+ }, options: import("ai").ToolExecutionOptions) => PromiseLike<string>;
21
+ };
22
+ cron_list: import("ai").Tool<z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>, string> & {
23
+ execute: (args: {}, options: import("ai").ToolExecutionOptions) => PromiseLike<string>;
24
+ };
25
+ cron_get: import("ai").Tool<z.ZodObject<{
26
+ id: z.ZodString;
27
+ }, "strip", z.ZodTypeAny, {
28
+ id: string;
29
+ }, {
30
+ id: string;
31
+ }>, string> & {
32
+ execute: (args: {
33
+ id: string;
34
+ }, options: import("ai").ToolExecutionOptions) => PromiseLike<string>;
35
+ };
36
+ cron_update: import("ai").Tool<z.ZodObject<{
37
+ id: z.ZodString;
38
+ name: z.ZodOptional<z.ZodString>;
39
+ schedule: z.ZodOptional<z.ZodString>;
40
+ prompt: z.ZodOptional<z.ZodString>;
41
+ }, "strip", z.ZodTypeAny, {
42
+ id: string;
43
+ name?: string | undefined;
44
+ schedule?: string | undefined;
45
+ prompt?: string | undefined;
46
+ }, {
47
+ id: string;
48
+ name?: string | undefined;
49
+ schedule?: string | undefined;
50
+ prompt?: string | undefined;
51
+ }>, string> & {
52
+ execute: (args: {
53
+ id: string;
54
+ name?: string | undefined;
55
+ schedule?: string | undefined;
56
+ prompt?: string | undefined;
57
+ }, options: import("ai").ToolExecutionOptions) => PromiseLike<string>;
58
+ };
59
+ cron_delete: import("ai").Tool<z.ZodObject<{
60
+ id: z.ZodString;
61
+ }, "strip", z.ZodTypeAny, {
62
+ id: string;
63
+ }, {
64
+ id: string;
65
+ }>, string> & {
66
+ execute: (args: {
67
+ id: string;
68
+ }, options: import("ai").ToolExecutionOptions) => PromiseLike<string>;
69
+ };
70
+ cron_enable: import("ai").Tool<z.ZodObject<{
71
+ id: z.ZodString;
72
+ }, "strip", z.ZodTypeAny, {
73
+ id: string;
74
+ }, {
75
+ id: string;
76
+ }>, string> & {
77
+ execute: (args: {
78
+ id: string;
79
+ }, options: import("ai").ToolExecutionOptions) => PromiseLike<string>;
80
+ };
81
+ cron_disable: import("ai").Tool<z.ZodObject<{
82
+ id: z.ZodString;
83
+ }, "strip", z.ZodTypeAny, {
84
+ id: string;
85
+ }, {
86
+ id: string;
87
+ }>, string> & {
88
+ execute: (args: {
89
+ id: string;
90
+ }, options: import("ai").ToolExecutionOptions) => PromiseLike<string>;
91
+ };
92
+ cron_status: import("ai").Tool<z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>, string> & {
93
+ execute: (args: {}, options: import("ai").ToolExecutionOptions) => PromiseLike<string>;
94
+ };
95
+ cron_bounce: import("ai").Tool<z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>, string> & {
96
+ execute: (args: {}, options: import("ai").ToolExecutionOptions) => PromiseLike<string>;
97
+ };
98
+ };
@@ -0,0 +1,248 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createCronTools = createCronTools;
7
+ const ai_1 = require("ai");
8
+ const zod_1 = require("zod");
9
+ const node_cron_1 = __importDefault(require("node-cron"));
10
+ const store_js_1 = require("../cron/store.js");
11
+ const log_store_js_1 = require("../cron/log-store.js");
12
+ const client_js_1 = require("../cron/client.js");
13
+ const logger_js_1 = require("../logger.js");
14
+ function ensureDaemon() {
15
+ if (!(0, client_js_1.isDaemonRunning)()) {
16
+ try {
17
+ (0, client_js_1.startDaemon)();
18
+ }
19
+ catch (err) {
20
+ const msg = err instanceof Error ? err.message : String(err);
21
+ return msg;
22
+ }
23
+ }
24
+ return null;
25
+ }
26
+ function stopIfNoEnabledJobs(store) {
27
+ const remaining = store.loadJobs().filter(j => j.enabled);
28
+ if (remaining.length === 0 && (0, client_js_1.isDaemonRunning)()) {
29
+ (0, client_js_1.stopDaemon)();
30
+ return ' No enabled jobs remain — daemon stopped.';
31
+ }
32
+ return '';
33
+ }
34
+ function createCronTools() {
35
+ const store = new store_js_1.CronStore();
36
+ const logStore = new log_store_js_1.CronLogStore();
37
+ return {
38
+ cron_create: (0, ai_1.tool)({
39
+ description: 'Create a new scheduled cron job that runs an AI prompt on a schedule.',
40
+ parameters: zod_1.z.object({
41
+ name: zod_1.z.string().describe('Job name'),
42
+ schedule: zod_1.z.string().describe('Cron expression (e.g. "0 * * * *" for hourly, "*/5 * * * *" for every 5 min)'),
43
+ prompt: zod_1.z.string().describe('The AI prompt to execute on each run'),
44
+ }),
45
+ execute: async ({ name, schedule, prompt }) => {
46
+ (0, logger_js_1.debugLog)('cron_create:execute', { name, schedule, prompt });
47
+ if (!node_cron_1.default.validate(schedule)) {
48
+ return `Error: Invalid cron expression "${schedule}". Use standard cron format (e.g. "0 * * * *" for hourly, "*/5 * * * *" for every 5 minutes).`;
49
+ }
50
+ try {
51
+ const job = store.createJob(name, schedule, prompt);
52
+ const daemonErr = ensureDaemon();
53
+ if (daemonErr) {
54
+ return `Job "${job.name}" created (${job.id}) but daemon failed to start: ${daemonErr}`;
55
+ }
56
+ return `Cron job created:\n ID: ${job.id}\n Name: ${job.name}\n Schedule: ${job.schedule}\n Daemon: running`;
57
+ }
58
+ catch (err) {
59
+ const msg = err instanceof Error ? err.message : String(err);
60
+ return `Error creating job: ${msg}`;
61
+ }
62
+ },
63
+ }),
64
+ cron_list: (0, ai_1.tool)({
65
+ description: 'List all cron jobs with their status and last run info.',
66
+ parameters: zod_1.z.object({}),
67
+ execute: async () => {
68
+ (0, logger_js_1.debugLog)('cron_list:execute', {});
69
+ const jobs = store.loadJobs();
70
+ if (jobs.length === 0)
71
+ return 'No cron jobs configured.';
72
+ const lines = jobs.map(j => {
73
+ const status = j.enabled ? 'enabled' : 'disabled';
74
+ const lastRun = j.lastRun
75
+ ? `last run: ${j.lastRun} (${j.lastRunStatus || 'unknown'})`
76
+ : 'never run';
77
+ return ` - ${j.name} [${status}]\n ID: ${j.id}\n Schedule: ${j.schedule}\n ${lastRun}`;
78
+ });
79
+ return `Cron jobs (${jobs.length}):\n${lines.join('\n')}`;
80
+ },
81
+ }),
82
+ cron_get: (0, ai_1.tool)({
83
+ description: 'Get full details of a cron job including prompt text and last result.',
84
+ parameters: zod_1.z.object({
85
+ id: zod_1.z.string().describe('Job ID'),
86
+ }),
87
+ execute: async ({ id }) => {
88
+ (0, logger_js_1.debugLog)('cron_get:execute', { id });
89
+ const job = store.getJob(id);
90
+ if (!job)
91
+ return `Error: No job found with ID "${id}".`;
92
+ let result = `Job details:\n`;
93
+ result += ` ID: ${job.id}\n`;
94
+ result += ` Name: ${job.name}\n`;
95
+ result += ` Schedule: ${job.schedule}\n`;
96
+ result += ` Enabled: ${job.enabled}\n`;
97
+ result += ` Created: ${job.createdAt}\n`;
98
+ result += ` Prompt: ${job.prompt}`;
99
+ if (job.lastRun) {
100
+ result += `\n Last run: ${job.lastRun}`;
101
+ result += `\n Last status: ${job.lastRunStatus || 'unknown'}`;
102
+ if (job.lastResult) {
103
+ result += `\n Last result: ${job.lastResult}`;
104
+ }
105
+ }
106
+ return result;
107
+ },
108
+ }),
109
+ cron_update: (0, ai_1.tool)({
110
+ description: `Update a cron job's name, schedule, or prompt. You MUST include the new values as parameters.
111
+ Examples:
112
+ Change prompt: { "id": "<id>", "prompt": "new prompt text" }
113
+ Change schedule: { "id": "<id>", "schedule": "*/30 * * * *" }
114
+ Change multiple: { "id": "<id>", "name": "New name", "prompt": "new prompt" }`,
115
+ parameters: zod_1.z.object({
116
+ id: zod_1.z.string().describe('Job ID'),
117
+ name: zod_1.z.string().optional().describe('New job name'),
118
+ schedule: zod_1.z.string().optional().describe('New cron expression'),
119
+ prompt: zod_1.z.string().optional().describe('New AI prompt text — replaces the existing prompt entirely'),
120
+ }),
121
+ execute: async ({ id, name, schedule, prompt }) => {
122
+ (0, logger_js_1.debugLog)('cron_update:execute', { id, name, schedule, prompt });
123
+ if (!name && !schedule && !prompt) {
124
+ const received = Object.entries({ id, name, schedule, prompt })
125
+ .filter(([, v]) => v !== undefined)
126
+ .map(([k]) => k)
127
+ .join(', ');
128
+ return 'Error: update requires at least one field to change (name, schedule, prompt) as a parameter in this tool call. '
129
+ + 'Example: {"id":"...","prompt":"new prompt text"}. '
130
+ + `Received parameters: ${received}.`;
131
+ }
132
+ if (schedule && !node_cron_1.default.validate(schedule)) {
133
+ return `Error: Invalid cron expression "${schedule}". Use standard cron format (e.g. "0 * * * *" for hourly, "*/5 * * * *" for every 5 minutes).`;
134
+ }
135
+ const updates = {};
136
+ if (name)
137
+ updates.name = name;
138
+ if (schedule)
139
+ updates.schedule = schedule;
140
+ if (prompt)
141
+ updates.prompt = prompt;
142
+ const job = store.updateJob(id, updates);
143
+ if (!job)
144
+ return `Error: No job found with ID "${id}".`;
145
+ return `Job updated:\n ID: ${job.id}\n Name: ${job.name}\n Schedule: ${job.schedule}\n Enabled: ${job.enabled}`;
146
+ },
147
+ }),
148
+ cron_delete: (0, ai_1.tool)({
149
+ description: 'Delete a cron job.',
150
+ parameters: zod_1.z.object({
151
+ id: zod_1.z.string().describe('Job ID'),
152
+ }),
153
+ execute: async ({ id }) => {
154
+ (0, logger_js_1.debugLog)('cron_delete:execute', { id });
155
+ const deleted = store.deleteJob(id);
156
+ if (!deleted)
157
+ return `Error: No job found with ID "${id}".`;
158
+ logStore.deleteJobLogs(id);
159
+ const suffix = stopIfNoEnabledJobs(store);
160
+ if (suffix)
161
+ return `Job deleted.${suffix}`;
162
+ return `Job "${id}" deleted.`;
163
+ },
164
+ }),
165
+ cron_enable: (0, ai_1.tool)({
166
+ description: 'Enable a disabled cron job.',
167
+ parameters: zod_1.z.object({
168
+ id: zod_1.z.string().describe('Job ID'),
169
+ }),
170
+ execute: async ({ id }) => {
171
+ (0, logger_js_1.debugLog)('cron_enable:execute', { id });
172
+ const job = store.updateJob(id, { enabled: true });
173
+ if (!job)
174
+ return `Error: No job found with ID "${id}".`;
175
+ const daemonErr = ensureDaemon();
176
+ if (daemonErr) {
177
+ return `Job "${job.name}" enabled but daemon failed to start: ${daemonErr}`;
178
+ }
179
+ return `Job "${job.name}" enabled. Daemon running.`;
180
+ },
181
+ }),
182
+ cron_disable: (0, ai_1.tool)({
183
+ description: 'Disable an active cron job.',
184
+ parameters: zod_1.z.object({
185
+ id: zod_1.z.string().describe('Job ID'),
186
+ }),
187
+ execute: async ({ id }) => {
188
+ (0, logger_js_1.debugLog)('cron_disable:execute', { id });
189
+ const job = store.updateJob(id, { enabled: false });
190
+ if (!job)
191
+ return `Error: No job found with ID "${id}".`;
192
+ const suffix = stopIfNoEnabledJobs(store);
193
+ if (suffix)
194
+ return `Job "${job.name}" disabled.${suffix}`;
195
+ return `Job "${job.name}" disabled.`;
196
+ },
197
+ }),
198
+ cron_status: (0, ai_1.tool)({
199
+ description: 'Check cron daemon status and job counts.',
200
+ parameters: zod_1.z.object({}),
201
+ execute: async () => {
202
+ (0, logger_js_1.debugLog)('cron_status:execute', {});
203
+ const running = (0, client_js_1.isDaemonRunning)();
204
+ const jobs = store.loadJobs();
205
+ const enabled = jobs.filter(j => j.enabled).length;
206
+ const alerts = store.listAlerts().filter(a => !a.acknowledged);
207
+ let result = `Daemon: ${running ? 'running' : 'stopped'}\n`;
208
+ result += `Jobs: ${jobs.length} total, ${enabled} enabled\n`;
209
+ result += `Unacknowledged alerts: ${alerts.length}`;
210
+ if (alerts.length > 0) {
211
+ result += '\n\nRecent alerts:';
212
+ for (const alert of alerts.slice(0, 5)) {
213
+ result += `\n - [${alert.timestamp}] ${alert.jobName}: ${alert.message}`;
214
+ }
215
+ }
216
+ return result;
217
+ },
218
+ }),
219
+ cron_bounce: (0, ai_1.tool)({
220
+ description: 'Restart the cron daemon. Useful after code updates or if the daemon is misbehaving.',
221
+ parameters: zod_1.z.object({}),
222
+ execute: async () => {
223
+ (0, logger_js_1.debugLog)('cron_bounce:execute', {});
224
+ const wasRunning = (0, client_js_1.isDaemonRunning)();
225
+ if (wasRunning) {
226
+ (0, client_js_1.stopDaemon)();
227
+ // Brief delay for process cleanup
228
+ await new Promise(resolve => setTimeout(resolve, 500));
229
+ }
230
+ const enabled = store.loadJobs().filter(j => j.enabled);
231
+ if (enabled.length === 0) {
232
+ return wasRunning
233
+ ? 'Daemon stopped. No enabled jobs — not restarting.'
234
+ : 'Daemon was not running. No enabled jobs — nothing to do.';
235
+ }
236
+ try {
237
+ (0, client_js_1.startDaemon)();
238
+ }
239
+ catch (err) {
240
+ const msg = err instanceof Error ? err.message : String(err);
241
+ return `Daemon ${wasRunning ? 'stopped but' : 'was not running and'} failed to restart: ${msg}`;
242
+ }
243
+ return `Daemon restarted. ${enabled.length} enabled job${enabled.length === 1 ? '' : 's'}.`;
244
+ },
245
+ }),
246
+ };
247
+ }
248
+ //# sourceMappingURL=cron.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cron.js","sourceRoot":"","sources":["../../src/tools/cron.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { z } from 'zod';
2
+ export declare function createDateTimeTool(): import("ai").Tool<z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>, string> & {
3
+ execute: (args: {}, options: import("ai").ToolExecutionOptions) => PromiseLike<string>;
4
+ };
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createDateTimeTool = createDateTimeTool;
4
+ const ai_1 = require("ai");
5
+ const zod_1 = require("zod");
6
+ function createDateTimeTool() {
7
+ return (0, ai_1.tool)({
8
+ description: 'Get the current date and time including hours and minutes. Use this when the user asks for the current time or when you need a precise timestamp.',
9
+ parameters: zod_1.z.object({}),
10
+ execute: async () => {
11
+ const now = new Date();
12
+ return now.toLocaleString('en-US', {
13
+ weekday: 'long',
14
+ year: 'numeric',
15
+ month: 'long',
16
+ day: 'numeric',
17
+ hour: 'numeric',
18
+ minute: '2-digit',
19
+ second: '2-digit',
20
+ timeZoneName: 'short',
21
+ });
22
+ },
23
+ });
24
+ }
25
+ //# sourceMappingURL=datetime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datetime.js","sourceRoot":"","sources":["../../src/tools/datetime.ts"],"names":[],"mappings":";;AAGA,gDAkBC;AArBD,2BAA0B;AAC1B,6BAAwB;AAExB,SAAgB,kBAAkB;IAChC,OAAO,IAAA,SAAI,EAAC;QACV,WAAW,EAAE,mJAAmJ;QAChK,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"}