bernard-agent 0.3.1 → 0.5.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/README.md +109 -38
- package/THIRD-PARTY-NOTICES +212 -0
- package/dist/agent.d.ts +32 -3
- package/dist/agent.js +63 -12
- package/dist/agent.js.map +1 -1
- package/dist/config.d.ts +67 -0
- package/dist/config.js +99 -31
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +7 -0
- package/dist/context.js +32 -20
- package/dist/context.js.map +1 -1
- package/dist/cron/cli.d.ts +7 -0
- package/dist/cron/cli.js +61 -5
- package/dist/cron/cli.js.map +1 -1
- package/dist/cron/client.d.ts +9 -0
- package/dist/cron/client.js +9 -0
- package/dist/cron/client.js.map +1 -1
- package/dist/cron/daemon.js +12 -1
- package/dist/cron/daemon.js.map +1 -1
- package/dist/cron/log-store.d.ts +18 -0
- package/dist/cron/log-store.js +41 -18
- package/dist/cron/log-store.js.map +1 -1
- package/dist/cron/notify.d.ts +7 -0
- package/dist/cron/notify.js +16 -0
- package/dist/cron/notify.js.map +1 -1
- package/dist/cron/runner.d.ts +11 -0
- package/dist/cron/runner.js +77 -20
- package/dist/cron/runner.js.map +1 -1
- package/dist/cron/scheduler.d.ts +16 -0
- package/dist/cron/scheduler.js +24 -7
- package/dist/cron/scheduler.js.map +1 -1
- package/dist/cron/store.d.ts +32 -0
- package/dist/cron/store.js +64 -27
- package/dist/cron/store.js.map +1 -1
- package/dist/cron/types.d.ts +19 -0
- package/dist/domains.d.ts +15 -0
- package/dist/domains.js +20 -1
- package/dist/domains.js.map +1 -1
- package/dist/embeddings.d.ts +7 -1
- package/dist/embeddings.js +43 -1
- package/dist/embeddings.js.map +1 -1
- package/dist/facts-cli.d.ts +14 -0
- package/dist/facts-cli.js +55 -1
- package/dist/facts-cli.js.map +1 -1
- package/dist/history.d.ts +8 -0
- package/dist/history.js +14 -9
- package/dist/history.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.js +36 -2
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +6 -0
- package/dist/logger.js +6 -0
- package/dist/logger.js.map +1 -1
- package/dist/mcp.d.ts +87 -0
- package/dist/mcp.js +116 -39
- package/dist/mcp.js.map +1 -1
- package/dist/memory-context.d.ts +4 -0
- package/dist/memory-context.js +4 -1
- package/dist/memory-context.js.map +1 -1
- package/dist/memory.d.ts +17 -0
- package/dist/memory.js +24 -10
- package/dist/memory.js.map +1 -1
- package/dist/migrate.d.ts +13 -0
- package/dist/migrate.js +209 -0
- package/dist/migrate.js.map +1 -0
- package/dist/output.d.ts +46 -1
- package/dist/output.js +72 -11
- package/dist/output.js.map +1 -1
- package/dist/paths.d.ts +23 -0
- package/dist/paths.js +82 -0
- package/dist/paths.js.map +1 -0
- package/dist/providers/index.d.ts +7 -0
- package/dist/providers/index.js +7 -0
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/types.d.ts +4 -0
- package/dist/rag-query.d.ts +20 -0
- package/dist/rag-query.js +70 -6
- package/dist/rag-query.js.map +1 -1
- package/dist/rag-worker.js.map +1 -1
- package/dist/rag.d.ts +41 -1
- package/dist/rag.js +125 -21
- package/dist/rag.js.map +1 -1
- package/dist/repl.d.ts +6 -0
- package/dist/repl.js +211 -44
- package/dist/repl.js.map +1 -1
- package/dist/routines.d.ts +49 -0
- package/dist/routines.js +172 -0
- package/dist/routines.js.map +1 -0
- package/dist/setup.d.ts +5 -0
- package/dist/setup.js +8 -2
- package/dist/setup.js.map +1 -1
- package/dist/theme.d.ts +41 -0
- package/dist/theme.js +55 -5
- package/dist/theme.js.map +1 -1
- package/dist/tools/cron-logs.d.ts +6 -0
- package/dist/tools/cron-logs.js +17 -4
- package/dist/tools/cron-logs.js.map +1 -1
- package/dist/tools/cron.d.ts +18 -0
- package/dist/tools/cron.js +67 -11
- package/dist/tools/cron.js.map +1 -1
- package/dist/tools/datetime.d.ts +1 -0
- package/dist/tools/datetime.js +1 -0
- package/dist/tools/datetime.js.map +1 -1
- package/dist/tools/index.d.ts +10 -325
- package/dist/tools/index.js +11 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/mcp-url.d.ts +6 -0
- package/dist/tools/mcp-url.js +6 -0
- package/dist/tools/mcp-url.js.map +1 -1
- package/dist/tools/mcp.d.ts +6 -0
- package/dist/tools/mcp.js +25 -12
- package/dist/tools/mcp.js.map +1 -1
- package/dist/tools/memory.d.ts +14 -0
- package/dist/tools/memory.js +18 -3
- package/dist/tools/memory.js.map +1 -1
- package/dist/tools/routine.d.ts +35 -0
- package/dist/tools/routine.js +93 -0
- package/dist/tools/routine.js.map +1 -0
- package/dist/tools/shell.d.ts +15 -1
- package/dist/tools/shell.js +16 -2
- package/dist/tools/shell.js.map +1 -1
- package/dist/tools/subagent.d.ts +18 -1
- package/dist/tools/subagent.js +27 -7
- package/dist/tools/subagent.js.map +1 -1
- package/dist/tools/time.d.ts +19 -0
- package/dist/tools/time.js +27 -4
- package/dist/tools/time.js.map +1 -1
- package/dist/tools/types.d.ts +6 -0
- package/dist/tools/wait.d.ts +3 -0
- package/dist/tools/wait.js +3 -0
- package/dist/tools/wait.js.map +1 -1
- package/dist/tools/web.d.ts +6 -0
- package/dist/tools/web.js +29 -6
- package/dist/tools/web.js.map +1 -1
- package/dist/update.d.ts +5 -0
- package/dist/update.js +8 -7
- package/dist/update.js.map +1 -1
- package/package.json +11 -2
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export interface Routine {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
content: string;
|
|
6
|
+
createdAt: string;
|
|
7
|
+
updatedAt: string;
|
|
8
|
+
}
|
|
9
|
+
export interface RoutineSummary {
|
|
10
|
+
id: string;
|
|
11
|
+
name: string;
|
|
12
|
+
description: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Disk-backed store for named routines (reusable multi-step workflows).
|
|
16
|
+
*
|
|
17
|
+
* Each routine is stored as a separate JSON file under `ROUTINES_DIR`.
|
|
18
|
+
* All writes use atomic rename to prevent partial-read corruption.
|
|
19
|
+
*/
|
|
20
|
+
export declare class RoutineStore {
|
|
21
|
+
constructor();
|
|
22
|
+
/**
|
|
23
|
+
* Validates a routine ID.
|
|
24
|
+
* @returns An error message if invalid, or `null` if valid.
|
|
25
|
+
*/
|
|
26
|
+
validateId(id: string): string | null;
|
|
27
|
+
/** Returns all routines sorted alphabetically by ID, skipping corrupt files. */
|
|
28
|
+
list(): Routine[];
|
|
29
|
+
/** Returns a single routine by ID, or `undefined` if not found. */
|
|
30
|
+
get(id: string): Routine | undefined;
|
|
31
|
+
/** Returns true if a routine with the given ID exists on disk. */
|
|
32
|
+
exists(id: string): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Creates a new routine and persists it.
|
|
35
|
+
* @throws {Error} If the ID is invalid, reserved, already taken, or the max limit is reached.
|
|
36
|
+
*/
|
|
37
|
+
create(id: string, name: string, description: string, content: string): Routine;
|
|
38
|
+
/**
|
|
39
|
+
* Updates an existing routine with partial fields.
|
|
40
|
+
* @returns The updated routine, or `undefined` if not found.
|
|
41
|
+
*/
|
|
42
|
+
update(id: string, updates: Partial<Pick<Routine, 'name' | 'description' | 'content'>>): Routine | undefined;
|
|
43
|
+
/** Removes a routine by ID. Returns `true` if it existed and was deleted. */
|
|
44
|
+
delete(id: string): boolean;
|
|
45
|
+
/** Returns id + name + description for all routines, for system prompt injection. */
|
|
46
|
+
getSummaries(): RoutineSummary[];
|
|
47
|
+
/** Writes data to a `.tmp` file then renames it into place for crash-safe persistence. */
|
|
48
|
+
private atomicWrite;
|
|
49
|
+
}
|
package/dist/routines.js
ADDED
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.RoutineStore = void 0;
|
|
37
|
+
const fs = __importStar(require("node:fs"));
|
|
38
|
+
const path = __importStar(require("node:path"));
|
|
39
|
+
const paths_js_1 = require("./paths.js");
|
|
40
|
+
const MAX_ROUTINES = 100;
|
|
41
|
+
const ID_PATTERN = /^[a-z0-9](?:[a-z0-9-]{0,58}[a-z0-9])?$/;
|
|
42
|
+
const RESERVED_NAMES = new Set([
|
|
43
|
+
'help',
|
|
44
|
+
'clear',
|
|
45
|
+
'memory',
|
|
46
|
+
'scratch',
|
|
47
|
+
'mcp',
|
|
48
|
+
'cron',
|
|
49
|
+
'rag',
|
|
50
|
+
'facts',
|
|
51
|
+
'provider',
|
|
52
|
+
'model',
|
|
53
|
+
'theme',
|
|
54
|
+
'options',
|
|
55
|
+
'update',
|
|
56
|
+
'exit',
|
|
57
|
+
'routines',
|
|
58
|
+
'create-routine',
|
|
59
|
+
]);
|
|
60
|
+
/**
|
|
61
|
+
* Disk-backed store for named routines (reusable multi-step workflows).
|
|
62
|
+
*
|
|
63
|
+
* Each routine is stored as a separate JSON file under `ROUTINES_DIR`.
|
|
64
|
+
* All writes use atomic rename to prevent partial-read corruption.
|
|
65
|
+
*/
|
|
66
|
+
class RoutineStore {
|
|
67
|
+
constructor() {
|
|
68
|
+
fs.mkdirSync(paths_js_1.ROUTINES_DIR, { recursive: true });
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Validates a routine ID.
|
|
72
|
+
* @returns An error message if invalid, or `null` if valid.
|
|
73
|
+
*/
|
|
74
|
+
validateId(id) {
|
|
75
|
+
if (!id)
|
|
76
|
+
return 'Routine ID cannot be empty.';
|
|
77
|
+
if (!ID_PATTERN.test(id))
|
|
78
|
+
return 'Routine ID must be 1–60 characters, lowercase alphanumeric and hyphens, cannot start or end with a hyphen.';
|
|
79
|
+
if (RESERVED_NAMES.has(id))
|
|
80
|
+
return `"${id}" is a reserved command name.`;
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
/** Returns all routines sorted alphabetically by ID, skipping corrupt files. */
|
|
84
|
+
list() {
|
|
85
|
+
if (!fs.existsSync(paths_js_1.ROUTINES_DIR))
|
|
86
|
+
return [];
|
|
87
|
+
const files = fs.readdirSync(paths_js_1.ROUTINES_DIR).filter((f) => f.endsWith('.json'));
|
|
88
|
+
const routines = [];
|
|
89
|
+
for (const file of files) {
|
|
90
|
+
try {
|
|
91
|
+
const raw = fs.readFileSync(path.join(paths_js_1.ROUTINES_DIR, file), 'utf-8');
|
|
92
|
+
routines.push(JSON.parse(raw));
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
// skip corrupt files
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return routines.sort((a, b) => a.id.localeCompare(b.id));
|
|
99
|
+
}
|
|
100
|
+
/** Returns a single routine by ID, or `undefined` if not found. */
|
|
101
|
+
get(id) {
|
|
102
|
+
const filePath = path.join(paths_js_1.ROUTINES_DIR, `${id}.json`);
|
|
103
|
+
if (!fs.existsSync(filePath))
|
|
104
|
+
return undefined;
|
|
105
|
+
try {
|
|
106
|
+
return JSON.parse(fs.readFileSync(filePath, 'utf-8'));
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
return undefined;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/** Returns true if a routine with the given ID exists on disk. */
|
|
113
|
+
exists(id) {
|
|
114
|
+
return fs.existsSync(path.join(paths_js_1.ROUTINES_DIR, `${id}.json`));
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Creates a new routine and persists it.
|
|
118
|
+
* @throws {Error} If the ID is invalid, reserved, already taken, or the max limit is reached.
|
|
119
|
+
*/
|
|
120
|
+
create(id, name, description, content) {
|
|
121
|
+
const idError = this.validateId(id);
|
|
122
|
+
if (idError)
|
|
123
|
+
throw new Error(idError);
|
|
124
|
+
if (this.exists(id))
|
|
125
|
+
throw new Error(`Routine "${id}" already exists.`);
|
|
126
|
+
const count = this.list().length;
|
|
127
|
+
if (count >= MAX_ROUTINES)
|
|
128
|
+
throw new Error(`Maximum of ${MAX_ROUTINES} routines reached.`);
|
|
129
|
+
const now = new Date().toISOString();
|
|
130
|
+
const routine = { id, name, description, content, createdAt: now, updatedAt: now };
|
|
131
|
+
this.atomicWrite(path.join(paths_js_1.ROUTINES_DIR, `${id}.json`), JSON.stringify(routine, null, 2));
|
|
132
|
+
return routine;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Updates an existing routine with partial fields.
|
|
136
|
+
* @returns The updated routine, or `undefined` if not found.
|
|
137
|
+
*/
|
|
138
|
+
update(id, updates) {
|
|
139
|
+
const routine = this.get(id);
|
|
140
|
+
if (!routine)
|
|
141
|
+
return undefined;
|
|
142
|
+
if (updates.name !== undefined)
|
|
143
|
+
routine.name = updates.name;
|
|
144
|
+
if (updates.description !== undefined)
|
|
145
|
+
routine.description = updates.description;
|
|
146
|
+
if (updates.content !== undefined)
|
|
147
|
+
routine.content = updates.content;
|
|
148
|
+
routine.updatedAt = new Date().toISOString();
|
|
149
|
+
this.atomicWrite(path.join(paths_js_1.ROUTINES_DIR, `${id}.json`), JSON.stringify(routine, null, 2));
|
|
150
|
+
return routine;
|
|
151
|
+
}
|
|
152
|
+
/** Removes a routine by ID. Returns `true` if it existed and was deleted. */
|
|
153
|
+
delete(id) {
|
|
154
|
+
const filePath = path.join(paths_js_1.ROUTINES_DIR, `${id}.json`);
|
|
155
|
+
if (!fs.existsSync(filePath))
|
|
156
|
+
return false;
|
|
157
|
+
fs.unlinkSync(filePath);
|
|
158
|
+
return true;
|
|
159
|
+
}
|
|
160
|
+
/** Returns id + name + description for all routines, for system prompt injection. */
|
|
161
|
+
getSummaries() {
|
|
162
|
+
return this.list().map(({ id, name, description }) => ({ id, name, description }));
|
|
163
|
+
}
|
|
164
|
+
/** Writes data to a `.tmp` file then renames it into place for crash-safe persistence. */
|
|
165
|
+
atomicWrite(filePath, data) {
|
|
166
|
+
const tmp = filePath + '.tmp';
|
|
167
|
+
fs.writeFileSync(tmp, data, 'utf-8');
|
|
168
|
+
fs.renameSync(tmp, filePath);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
exports.RoutineStore = RoutineStore;
|
|
172
|
+
//# sourceMappingURL=routines.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routines.js","sourceRoot":"","sources":["../src/routines.ts"],"names":[],"mappings":"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"}
|
package/dist/setup.d.ts
CHANGED
|
@@ -1 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run the interactive first-time setup wizard if no API keys are configured.
|
|
3
|
+
* Prompts the user to select a provider and enter an API key, then persists both.
|
|
4
|
+
* @returns `true` if setup ran (keys were missing), `false` if skipped (keys already present).
|
|
5
|
+
*/
|
|
1
6
|
export declare function runFirstTimeSetup(): Promise<boolean>;
|
package/dist/setup.js
CHANGED
|
@@ -37,12 +37,18 @@ exports.runFirstTimeSetup = runFirstTimeSetup;
|
|
|
37
37
|
const readline = __importStar(require("node:readline"));
|
|
38
38
|
const config_js_1 = require("./config.js");
|
|
39
39
|
const theme_js_1 = require("./theme.js");
|
|
40
|
+
const paths_js_1 = require("./paths.js");
|
|
40
41
|
const PROVIDERS = Object.keys(config_js_1.PROVIDER_ENV_VARS);
|
|
41
42
|
function ask(rl, prompt) {
|
|
42
43
|
return new Promise((resolve) => {
|
|
43
44
|
rl.question(prompt, (answer) => resolve(answer.trim()));
|
|
44
45
|
});
|
|
45
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Run the interactive first-time setup wizard if no API keys are configured.
|
|
49
|
+
* Prompts the user to select a provider and enter an API key, then persists both.
|
|
50
|
+
* @returns `true` if setup ran (keys were missing), `false` if skipped (keys already present).
|
|
51
|
+
*/
|
|
46
52
|
async function runFirstTimeSetup() {
|
|
47
53
|
const statuses = (0, config_js_1.getProviderKeyStatus)();
|
|
48
54
|
if (statuses.some((s) => s.hasKey)) {
|
|
@@ -57,7 +63,7 @@ async function runFirstTimeSetup() {
|
|
|
57
63
|
console.log(t.accentBold('\n Welcome to Bernard'));
|
|
58
64
|
console.log(t.muted(' Local CLI AI Agent with multi-provider support\n'));
|
|
59
65
|
console.log(t.text(' It looks like this is your first time running Bernard.'));
|
|
60
|
-
console.log(t.text(
|
|
66
|
+
console.log(t.text(" Let's get you set up with an AI provider.\n"));
|
|
61
67
|
console.log(t.text(' Available providers:'));
|
|
62
68
|
for (let i = 0; i < PROVIDERS.length; i++) {
|
|
63
69
|
console.log(t.text(` ${i + 1}. ${PROVIDERS[i]}`));
|
|
@@ -76,7 +82,7 @@ async function runFirstTimeSetup() {
|
|
|
76
82
|
}
|
|
77
83
|
const envVar = config_js_1.PROVIDER_ENV_VARS[provider];
|
|
78
84
|
console.log(t.muted(`\n You'll need an API key for ${provider}.`));
|
|
79
|
-
console.log(t.muted(
|
|
85
|
+
console.log(t.muted(` (This will be saved securely to ${paths_js_1.KEYS_PATH})\n`));
|
|
80
86
|
let key;
|
|
81
87
|
while (!key) {
|
|
82
88
|
const answer = await ask(rl, ` ${envVar}: `);
|
package/dist/setup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
|
package/dist/theme.d.ts
CHANGED
|
@@ -1,16 +1,38 @@
|
|
|
1
|
+
/** A function that applies a chalk color/style to a string and returns the styled result. */
|
|
1
2
|
type ColorFn = (text: string) => string;
|
|
3
|
+
/**
|
|
4
|
+
* Defines the color palette and styling functions for a terminal theme.
|
|
5
|
+
*
|
|
6
|
+
* Each theme provides semantic color functions for different UI elements
|
|
7
|
+
* and raw ANSI escape codes for use in readline prompts where chalk cannot be used.
|
|
8
|
+
*/
|
|
2
9
|
export interface Theme {
|
|
10
|
+
/** Human-readable display name for the theme. */
|
|
3
11
|
name: string;
|
|
12
|
+
/** Primary accent color for branding and highlights. */
|
|
4
13
|
accent: ColorFn;
|
|
14
|
+
/** Bold variant of the primary accent color. */
|
|
5
15
|
accentBold: ColorFn;
|
|
16
|
+
/** Subdued color for secondary or less important text. */
|
|
6
17
|
muted: ColorFn;
|
|
18
|
+
/** Default color for regular body text. */
|
|
7
19
|
text: ColorFn;
|
|
20
|
+
/** Color for tool invocation labels. */
|
|
8
21
|
toolCall: ColorFn;
|
|
22
|
+
/** Color for error messages. */
|
|
9
23
|
error: ColorFn;
|
|
24
|
+
/** Color for success indicators. */
|
|
10
25
|
success: ColorFn;
|
|
26
|
+
/** Dimmed color for de-emphasized content like conversation replays. */
|
|
11
27
|
dim: ColorFn;
|
|
28
|
+
/** Color for warning messages. */
|
|
12
29
|
warning: ColorFn;
|
|
30
|
+
/** Rotating palette of colors assigned to sub-agent prefixes. */
|
|
13
31
|
prefixColors: readonly ColorFn[];
|
|
32
|
+
/**
|
|
33
|
+
* Raw ANSI escape sequences for contexts where chalk is unavailable
|
|
34
|
+
* (e.g. readline prompt strings).
|
|
35
|
+
*/
|
|
14
36
|
ansi: {
|
|
15
37
|
prompt: string;
|
|
16
38
|
hintCmd: string;
|
|
@@ -19,10 +41,29 @@ export interface Theme {
|
|
|
19
41
|
reset: string;
|
|
20
42
|
};
|
|
21
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Registry of all available color themes, keyed by slug.
|
|
46
|
+
*
|
|
47
|
+
* Includes: `bernard` (default orange), `ocean`, `forest`, `synthwave`,
|
|
48
|
+
* `high-contrast`, and `colorblind` (IBM-safe palette).
|
|
49
|
+
*/
|
|
22
50
|
export declare const THEMES: Record<string, Theme>;
|
|
51
|
+
/** Key of the theme used when no user preference is set. */
|
|
23
52
|
export declare const DEFAULT_THEME = "bernard";
|
|
53
|
+
/**
|
|
54
|
+
* Returns the currently active {@link Theme} object.
|
|
55
|
+
* @returns The active theme, defaulting to the `bernard` theme at startup.
|
|
56
|
+
*/
|
|
24
57
|
export declare function getTheme(): Theme;
|
|
58
|
+
/**
|
|
59
|
+
* Switches the active theme by its slug key.
|
|
60
|
+
*
|
|
61
|
+
* @param key - Theme slug (e.g. `"ocean"`, `"forest"`).
|
|
62
|
+
* @returns `true` if the theme was found and activated, `false` if the key is unknown.
|
|
63
|
+
*/
|
|
25
64
|
export declare function setTheme(key: string): boolean;
|
|
65
|
+
/** Returns an array of all registered theme slug keys. */
|
|
26
66
|
export declare function getThemeKeys(): string[];
|
|
67
|
+
/** Returns the slug key of the currently active theme (e.g. `"bernard"`). */
|
|
27
68
|
export declare function getActiveThemeKey(): string;
|
|
28
69
|
export {};
|
package/dist/theme.js
CHANGED
|
@@ -9,7 +9,14 @@ exports.setTheme = setTheme;
|
|
|
9
9
|
exports.getThemeKeys = getThemeKeys;
|
|
10
10
|
exports.getActiveThemeKey = getActiveThemeKey;
|
|
11
11
|
const chalk_1 = __importDefault(require("chalk"));
|
|
12
|
+
/**
|
|
13
|
+
* Registry of all available color themes, keyed by slug.
|
|
14
|
+
*
|
|
15
|
+
* Includes: `bernard` (default orange), `ocean`, `forest`, `synthwave`,
|
|
16
|
+
* `high-contrast`, and `colorblind` (IBM-safe palette).
|
|
17
|
+
*/
|
|
12
18
|
exports.THEMES = {
|
|
19
|
+
/** Default theme with warm orange accents. */
|
|
13
20
|
bernard: {
|
|
14
21
|
name: 'Bernard',
|
|
15
22
|
accent: chalk_1.default.hex('#f97316'),
|
|
@@ -30,6 +37,7 @@ exports.THEMES = {
|
|
|
30
37
|
reset: '\x1b[0m',
|
|
31
38
|
},
|
|
32
39
|
},
|
|
40
|
+
/** Cool blue-cyan palette inspired by the sea. */
|
|
33
41
|
ocean: {
|
|
34
42
|
name: 'Ocean',
|
|
35
43
|
accent: chalk_1.default.hex('#06b6d4'),
|
|
@@ -41,7 +49,12 @@ exports.THEMES = {
|
|
|
41
49
|
success: chalk_1.default.hex('#34d399'),
|
|
42
50
|
dim: chalk_1.default.dim,
|
|
43
51
|
warning: chalk_1.default.hex('#fbbf24'),
|
|
44
|
-
prefixColors: [
|
|
52
|
+
prefixColors: [
|
|
53
|
+
chalk_1.default.hex('#38bdf8'),
|
|
54
|
+
chalk_1.default.hex('#818cf8'),
|
|
55
|
+
chalk_1.default.hex('#34d399'),
|
|
56
|
+
chalk_1.default.hex('#06b6d4'),
|
|
57
|
+
],
|
|
45
58
|
ansi: {
|
|
46
59
|
prompt: '\x1b[38;2;6;182;212m',
|
|
47
60
|
hintCmd: '\x1b[38;2;226;232;240m',
|
|
@@ -50,6 +63,7 @@ exports.THEMES = {
|
|
|
50
63
|
reset: '\x1b[0m',
|
|
51
64
|
},
|
|
52
65
|
},
|
|
66
|
+
/** Earthy green palette for a natural look. */
|
|
53
67
|
forest: {
|
|
54
68
|
name: 'Forest',
|
|
55
69
|
accent: chalk_1.default.hex('#22c55e'),
|
|
@@ -61,7 +75,12 @@ exports.THEMES = {
|
|
|
61
75
|
success: chalk_1.default.hex('#4ade80'),
|
|
62
76
|
dim: chalk_1.default.dim,
|
|
63
77
|
warning: chalk_1.default.hex('#facc15'),
|
|
64
|
-
prefixColors: [
|
|
78
|
+
prefixColors: [
|
|
79
|
+
chalk_1.default.hex('#4ade80'),
|
|
80
|
+
chalk_1.default.hex('#a78bfa'),
|
|
81
|
+
chalk_1.default.hex('#fbbf24'),
|
|
82
|
+
chalk_1.default.hex('#22d3ee'),
|
|
83
|
+
],
|
|
65
84
|
ansi: {
|
|
66
85
|
prompt: '\x1b[38;2;34;197;94m',
|
|
67
86
|
hintCmd: '\x1b[38;2;229;229;229m',
|
|
@@ -70,6 +89,7 @@ exports.THEMES = {
|
|
|
70
89
|
reset: '\x1b[0m',
|
|
71
90
|
},
|
|
72
91
|
},
|
|
92
|
+
/** Retro neon purple and pink palette. */
|
|
73
93
|
synthwave: {
|
|
74
94
|
name: 'Synthwave',
|
|
75
95
|
accent: chalk_1.default.hex('#c084fc'),
|
|
@@ -81,7 +101,12 @@ exports.THEMES = {
|
|
|
81
101
|
success: chalk_1.default.hex('#34d399'),
|
|
82
102
|
dim: chalk_1.default.dim,
|
|
83
103
|
warning: chalk_1.default.hex('#fde68a'),
|
|
84
|
-
prefixColors: [
|
|
104
|
+
prefixColors: [
|
|
105
|
+
chalk_1.default.hex('#f472b6'),
|
|
106
|
+
chalk_1.default.hex('#818cf8'),
|
|
107
|
+
chalk_1.default.hex('#22d3ee'),
|
|
108
|
+
chalk_1.default.hex('#c084fc'),
|
|
109
|
+
],
|
|
85
110
|
ansi: {
|
|
86
111
|
prompt: '\x1b[38;2;192;132;252m',
|
|
87
112
|
hintCmd: '\x1b[38;2;240;171;252m',
|
|
@@ -90,6 +115,7 @@ exports.THEMES = {
|
|
|
90
115
|
reset: '\x1b[0m',
|
|
91
116
|
},
|
|
92
117
|
},
|
|
118
|
+
/** Maximum contrast using bold bright whites and system colors. */
|
|
93
119
|
'high-contrast': {
|
|
94
120
|
name: 'High Contrast',
|
|
95
121
|
accent: chalk_1.default.bold.white,
|
|
@@ -101,7 +127,12 @@ exports.THEMES = {
|
|
|
101
127
|
success: chalk_1.default.bold.greenBright,
|
|
102
128
|
dim: chalk_1.default.white,
|
|
103
129
|
warning: chalk_1.default.bold.yellowBright,
|
|
104
|
-
prefixColors: [
|
|
130
|
+
prefixColors: [
|
|
131
|
+
chalk_1.default.bold.magentaBright,
|
|
132
|
+
chalk_1.default.bold.cyanBright,
|
|
133
|
+
chalk_1.default.bold.greenBright,
|
|
134
|
+
chalk_1.default.bold.yellowBright,
|
|
135
|
+
],
|
|
105
136
|
ansi: {
|
|
106
137
|
prompt: '\x1b[1;97m',
|
|
107
138
|
hintCmd: '\x1b[97m',
|
|
@@ -110,6 +141,7 @@ exports.THEMES = {
|
|
|
110
141
|
reset: '\x1b[0m',
|
|
111
142
|
},
|
|
112
143
|
},
|
|
144
|
+
/** Palette using IBM's colorblind-safe color scheme for accessibility. */
|
|
113
145
|
colorblind: {
|
|
114
146
|
name: 'Colorblind',
|
|
115
147
|
accent: chalk_1.default.hex('#648FFF'),
|
|
@@ -121,7 +153,12 @@ exports.THEMES = {
|
|
|
121
153
|
success: chalk_1.default.hex('#648FFF'),
|
|
122
154
|
dim: chalk_1.default.dim,
|
|
123
155
|
warning: chalk_1.default.hex('#FFB000'),
|
|
124
|
-
prefixColors: [
|
|
156
|
+
prefixColors: [
|
|
157
|
+
chalk_1.default.hex('#785EF0'),
|
|
158
|
+
chalk_1.default.hex('#DC267F'),
|
|
159
|
+
chalk_1.default.hex('#FFB000'),
|
|
160
|
+
chalk_1.default.hex('#648FFF'),
|
|
161
|
+
],
|
|
125
162
|
ansi: {
|
|
126
163
|
prompt: '\x1b[38;2;100;143;255m',
|
|
127
164
|
hintCmd: '\x1b[38;2;224;224;224m',
|
|
@@ -131,12 +168,23 @@ exports.THEMES = {
|
|
|
131
168
|
},
|
|
132
169
|
},
|
|
133
170
|
};
|
|
171
|
+
/** Key of the theme used when no user preference is set. */
|
|
134
172
|
exports.DEFAULT_THEME = 'bernard';
|
|
135
173
|
let activeThemeKey = exports.DEFAULT_THEME;
|
|
136
174
|
let activeTheme = exports.THEMES[exports.DEFAULT_THEME];
|
|
175
|
+
/**
|
|
176
|
+
* Returns the currently active {@link Theme} object.
|
|
177
|
+
* @returns The active theme, defaulting to the `bernard` theme at startup.
|
|
178
|
+
*/
|
|
137
179
|
function getTheme() {
|
|
138
180
|
return activeTheme;
|
|
139
181
|
}
|
|
182
|
+
/**
|
|
183
|
+
* Switches the active theme by its slug key.
|
|
184
|
+
*
|
|
185
|
+
* @param key - Theme slug (e.g. `"ocean"`, `"forest"`).
|
|
186
|
+
* @returns `true` if the theme was found and activated, `false` if the key is unknown.
|
|
187
|
+
*/
|
|
140
188
|
function setTheme(key) {
|
|
141
189
|
const theme = exports.THEMES[key];
|
|
142
190
|
if (!theme)
|
|
@@ -145,9 +193,11 @@ function setTheme(key) {
|
|
|
145
193
|
activeTheme = theme;
|
|
146
194
|
return true;
|
|
147
195
|
}
|
|
196
|
+
/** Returns an array of all registered theme slug keys. */
|
|
148
197
|
function getThemeKeys() {
|
|
149
198
|
return Object.keys(exports.THEMES);
|
|
150
199
|
}
|
|
200
|
+
/** Returns the slug key of the currently active theme (e.g. `"bernard"`). */
|
|
151
201
|
function getActiveThemeKey() {
|
|
152
202
|
return activeThemeKey;
|
|
153
203
|
}
|
package/dist/theme.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":";;;;;;AA+
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Creates tools for inspecting and managing cron job execution logs.
|
|
4
|
+
*
|
|
5
|
+
* Includes listing recent runs, viewing full execution traces, aggregate
|
|
6
|
+
* statistics, and log rotation/cleanup.
|
|
7
|
+
*/
|
|
2
8
|
export declare function createCronLogTools(): {
|
|
3
9
|
cron_logs_list: import("ai").Tool<z.ZodObject<{
|
|
4
10
|
job_id: z.ZodString;
|
package/dist/tools/cron-logs.js
CHANGED
|
@@ -5,6 +5,12 @@ 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
7
|
const logger_js_1 = require("../logger.js");
|
|
8
|
+
/**
|
|
9
|
+
* Creates tools for inspecting and managing cron job execution logs.
|
|
10
|
+
*
|
|
11
|
+
* Includes listing recent runs, viewing full execution traces, aggregate
|
|
12
|
+
* statistics, and log rotation/cleanup.
|
|
13
|
+
*/
|
|
8
14
|
function createCronLogTools() {
|
|
9
15
|
const logStore = new log_store_js_1.CronLogStore();
|
|
10
16
|
return {
|
|
@@ -25,7 +31,7 @@ function createCronLogTools() {
|
|
|
25
31
|
return `No more entries (total: ${total}, offset: ${offset}).`;
|
|
26
32
|
}
|
|
27
33
|
const total = logStore.getEntryCount(job_id);
|
|
28
|
-
const lines = entries.map(e => {
|
|
34
|
+
const lines = entries.map((e) => {
|
|
29
35
|
const status = e.success ? 'OK' : 'ERR';
|
|
30
36
|
const dur = `${e.durationMs}ms`;
|
|
31
37
|
const stepCount = e.steps.length;
|
|
@@ -87,7 +93,7 @@ function createCronLogTools() {
|
|
|
87
93
|
return `No execution logs found for job "${job_id}".`;
|
|
88
94
|
// Read all entries for summary (capped at most recent 500)
|
|
89
95
|
const entries = logStore.getEntries(job_id, 500, 0);
|
|
90
|
-
const successes = entries.filter(e => e.success).length;
|
|
96
|
+
const successes = entries.filter((e) => e.success).length;
|
|
91
97
|
const failures = entries.length - successes;
|
|
92
98
|
const successRate = ((successes / entries.length) * 100).toFixed(1);
|
|
93
99
|
const avgDuration = Math.round(entries.reduce((s, e) => s + e.durationMs, 0) / entries.length);
|
|
@@ -107,8 +113,15 @@ function createCronLogTools() {
|
|
|
107
113
|
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
114
|
parameters: zod_1.z.object({
|
|
109
115
|
job_id: zod_1.z.string().describe('Job ID'),
|
|
110
|
-
action: zod_1.z
|
|
111
|
-
|
|
116
|
+
action: zod_1.z
|
|
117
|
+
.enum(['rotate', 'delete'])
|
|
118
|
+
.describe('Action: "rotate" keeps recent entries, "delete" removes all'),
|
|
119
|
+
keep: zod_1.z
|
|
120
|
+
.number()
|
|
121
|
+
.min(1)
|
|
122
|
+
.max(10000)
|
|
123
|
+
.default(500)
|
|
124
|
+
.describe('Number of recent entries to keep (only for rotate)'),
|
|
112
125
|
}),
|
|
113
126
|
execute: async ({ job_id, action, keep }) => {
|
|
114
127
|
(0, logger_js_1.debugLog)('cron_logs_cleanup:execute', { job_id, action, keep });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cron-logs.js","sourceRoot":"","sources":["../../src/tools/cron-logs.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"cron-logs.js","sourceRoot":"","sources":["../../src/tools/cron-logs.ts"],"names":[],"mappings":"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"}
|