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.
- package/.env.example +21 -0
- package/LICENSE +21 -0
- package/README.md +629 -0
- package/dist/agent.d.ts +24 -0
- package/dist/agent.js +174 -0
- package/dist/agent.js.map +1 -0
- package/dist/config.d.ts +44 -0
- package/dist/config.js +267 -0
- package/dist/config.js.map +1 -0
- package/dist/context.d.ts +37 -0
- package/dist/context.js +245 -0
- package/dist/context.js.map +1 -0
- package/dist/cron/client.d.ts +4 -0
- package/dist/cron/client.js +113 -0
- package/dist/cron/client.js.map +1 -0
- package/dist/cron/daemon.d.ts +1 -0
- package/dist/cron/daemon.js +132 -0
- package/dist/cron/daemon.js.map +1 -0
- package/dist/cron/log-store.d.ts +51 -0
- package/dist/cron/log-store.js +135 -0
- package/dist/cron/log-store.js.map +1 -0
- package/dist/cron/notify.d.ts +7 -0
- package/dist/cron/notify.js +136 -0
- package/dist/cron/notify.js.map +1 -0
- package/dist/cron/runner.d.ts +6 -0
- package/dist/cron/runner.js +219 -0
- package/dist/cron/runner.js.map +1 -0
- package/dist/cron/scheduler.d.ts +16 -0
- package/dist/cron/scheduler.js +105 -0
- package/dist/cron/scheduler.js.map +1 -0
- package/dist/cron/store.d.ts +20 -0
- package/dist/cron/store.js +170 -0
- package/dist/cron/store.js.map +1 -0
- package/dist/cron/types.d.ts +21 -0
- package/dist/cron/types.js +3 -0
- package/dist/cron/types.js.map +1 -0
- package/dist/embeddings.d.ts +14 -0
- package/dist/embeddings.js +61 -0
- package/dist/embeddings.js.map +1 -0
- package/dist/history.d.ts +6 -0
- package/dist/history.js +71 -0
- package/dist/history.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +231 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +1 -0
- package/dist/logger.js +24 -0
- package/dist/logger.js.map +1 -0
- package/dist/mcp.d.ts +43 -0
- package/dist/mcp.js +303 -0
- package/dist/mcp.js.map +1 -0
- package/dist/memory.d.ts +17 -0
- package/dist/memory.js +106 -0
- package/dist/memory.js.map +1 -0
- package/dist/output.d.ts +13 -0
- package/dist/output.js +151 -0
- package/dist/output.js.map +1 -0
- package/dist/providers/index.d.ts +2 -0
- package/dist/providers/index.js +19 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/types.d.ts +5 -0
- package/dist/providers/types.js +3 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/rag-worker.d.ts +10 -0
- package/dist/rag-worker.js +84 -0
- package/dist/rag-worker.js.map +1 -0
- package/dist/rag.d.ts +53 -0
- package/dist/rag.js +242 -0
- package/dist/rag.js.map +1 -0
- package/dist/repl.d.ts +2 -0
- package/dist/repl.js +531 -0
- package/dist/repl.js.map +1 -0
- package/dist/setup.d.ts +1 -0
- package/dist/setup.js +104 -0
- package/dist/setup.js.map +1 -0
- package/dist/tools/cron-logs.d.ts +67 -0
- package/dist/tools/cron-logs.js +131 -0
- package/dist/tools/cron-logs.js.map +1 -0
- package/dist/tools/cron.d.ts +98 -0
- package/dist/tools/cron.js +248 -0
- package/dist/tools/cron.js.map +1 -0
- package/dist/tools/datetime.d.ts +4 -0
- package/dist/tools/datetime.js +25 -0
- package/dist/tools/datetime.js.map +1 -0
- package/dist/tools/index.d.ts +317 -0
- package/dist/tools/index.js +28 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/mcp-url.d.ts +16 -0
- package/dist/tools/mcp-url.js +27 -0
- package/dist/tools/mcp-url.js.map +1 -0
- package/dist/tools/mcp.d.ts +28 -0
- package/dist/tools/mcp.js +107 -0
- package/dist/tools/mcp.js.map +1 -0
- package/dist/tools/memory.d.ts +40 -0
- package/dist/tools/memory.js +99 -0
- package/dist/tools/memory.js.map +1 -0
- package/dist/tools/shell.d.ts +15 -0
- package/dist/tools/shell.js +60 -0
- package/dist/tools/shell.js.map +1 -0
- package/dist/tools/subagent.d.ts +21 -0
- package/dist/tools/subagent.js +81 -0
- package/dist/tools/subagent.js.map +1 -0
- package/dist/tools/time.d.ts +50 -0
- package/dist/tools/time.js +61 -0
- package/dist/tools/time.js.map +1 -0
- package/dist/tools/types.d.ts +8 -0
- package/dist/tools/types.js +3 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/tools/web.d.ts +16 -0
- package/dist/tools/web.js +136 -0
- package/dist/tools/web.js.map +1 -0
- 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,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"}
|