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
package/dist/migrate.js
ADDED
|
@@ -0,0 +1,209 @@
|
|
|
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.migrateFromLegacy = migrateFromLegacy;
|
|
37
|
+
const fs = __importStar(require("node:fs"));
|
|
38
|
+
const path = __importStar(require("node:path"));
|
|
39
|
+
const paths_js_1 = require("./paths.js");
|
|
40
|
+
const MIGRATED_MARKER = path.join(paths_js_1.LEGACY_DIR, 'MIGRATED');
|
|
41
|
+
/** File-to-XDG-category mapping for migration. */
|
|
42
|
+
const MIGRATION_MAP = [
|
|
43
|
+
// Config files
|
|
44
|
+
{ src: 'preferences.json', destDir: paths_js_1.CONFIG_DIR },
|
|
45
|
+
{ src: 'keys.json', destDir: paths_js_1.CONFIG_DIR, mode: 0o600 },
|
|
46
|
+
{ src: '.env', destDir: paths_js_1.CONFIG_DIR },
|
|
47
|
+
{ src: 'mcp.json', destDir: paths_js_1.CONFIG_DIR },
|
|
48
|
+
// Cache files
|
|
49
|
+
{ src: 'update-check.json', destDir: paths_js_1.CACHE_DIR },
|
|
50
|
+
// State files
|
|
51
|
+
{ src: 'conversation-history.json', destDir: paths_js_1.STATE_DIR },
|
|
52
|
+
];
|
|
53
|
+
/** Directory-to-XDG-category mapping for migration. */
|
|
54
|
+
const DIR_MIGRATION_MAP = [
|
|
55
|
+
// Data directories
|
|
56
|
+
{ src: 'memory', destDir: path.join(paths_js_1.DATA_DIR, 'memory') },
|
|
57
|
+
{ src: 'rag', destDir: path.join(paths_js_1.DATA_DIR, 'rag') },
|
|
58
|
+
{ src: 'cron', destDir: path.join(paths_js_1.DATA_DIR, 'cron') },
|
|
59
|
+
// Cache directories
|
|
60
|
+
{ src: 'models', destDir: path.join(paths_js_1.CACHE_DIR, 'models') },
|
|
61
|
+
// State directories
|
|
62
|
+
{ src: 'logs', destDir: path.join(paths_js_1.STATE_DIR, 'logs') },
|
|
63
|
+
];
|
|
64
|
+
/**
|
|
65
|
+
* Move a single file, falling back to copy+delete on cross-filesystem (EXDEV) errors.
|
|
66
|
+
* Creates destination directory if needed.
|
|
67
|
+
*/
|
|
68
|
+
function moveFile(src, dest, mode) {
|
|
69
|
+
const destDir = path.dirname(dest);
|
|
70
|
+
fs.mkdirSync(destDir, { recursive: true, mode: 0o700 });
|
|
71
|
+
try {
|
|
72
|
+
fs.renameSync(src, dest);
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
if (err.code === 'EXDEV') {
|
|
76
|
+
fs.copyFileSync(src, dest);
|
|
77
|
+
fs.unlinkSync(src);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
throw err;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (mode !== undefined) {
|
|
84
|
+
fs.chmodSync(dest, mode);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Recursively move a directory's contents to a new location.
|
|
89
|
+
* Creates the destination directory structure as needed.
|
|
90
|
+
*/
|
|
91
|
+
function moveDir(srcDir, destDir) {
|
|
92
|
+
if (!fs.existsSync(srcDir))
|
|
93
|
+
return;
|
|
94
|
+
fs.mkdirSync(destDir, { recursive: true, mode: 0o700 });
|
|
95
|
+
const entries = fs.readdirSync(srcDir, { withFileTypes: true });
|
|
96
|
+
for (const entry of entries) {
|
|
97
|
+
const srcPath = path.join(srcDir, entry.name);
|
|
98
|
+
const destPath = path.join(destDir, entry.name);
|
|
99
|
+
if (entry.isDirectory()) {
|
|
100
|
+
moveDir(srcPath, destPath);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
moveFile(srcPath, destPath);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Remove the now-empty source directory
|
|
107
|
+
try {
|
|
108
|
+
fs.rmdirSync(srcDir);
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
// May not be empty if some files failed; ignore
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Migrate files from the legacy `~/.bernard/` layout to XDG directories.
|
|
116
|
+
*
|
|
117
|
+
* - No-op if `BERNARD_HOME` is set (user explicitly controls layout)
|
|
118
|
+
* - No-op if `~/.bernard/` does not exist (fresh install)
|
|
119
|
+
* - No-op if already migrated (MIGRATED marker exists or prefs in XDG location)
|
|
120
|
+
*
|
|
121
|
+
* @returns Object with `migrated` flag and any non-fatal `errors` encountered.
|
|
122
|
+
*/
|
|
123
|
+
function migrateFromLegacy() {
|
|
124
|
+
const errors = [];
|
|
125
|
+
// Skip if user explicitly controls layout
|
|
126
|
+
if (process.env.BERNARD_HOME) {
|
|
127
|
+
return { migrated: false, errors };
|
|
128
|
+
}
|
|
129
|
+
// Skip if legacy dir doesn't exist (fresh install)
|
|
130
|
+
if (!fs.existsSync(paths_js_1.LEGACY_DIR)) {
|
|
131
|
+
return { migrated: false, errors };
|
|
132
|
+
}
|
|
133
|
+
// Skip if already migrated
|
|
134
|
+
if (fs.existsSync(MIGRATED_MARKER)) {
|
|
135
|
+
return { migrated: false, errors };
|
|
136
|
+
}
|
|
137
|
+
if (fs.existsSync(paths_js_1.CONFIG_DIR)) {
|
|
138
|
+
try {
|
|
139
|
+
const entries = fs.readdirSync(paths_js_1.CONFIG_DIR);
|
|
140
|
+
if (entries.length > 0) {
|
|
141
|
+
return { migrated: false, errors };
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
/* proceed with migration */
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
// Ensure XDG base directories exist with 0700
|
|
149
|
+
for (const dir of [paths_js_1.CONFIG_DIR, paths_js_1.DATA_DIR, paths_js_1.CACHE_DIR, paths_js_1.STATE_DIR]) {
|
|
150
|
+
fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
151
|
+
}
|
|
152
|
+
// Migrate individual files
|
|
153
|
+
for (const entry of MIGRATION_MAP) {
|
|
154
|
+
const srcPath = path.join(paths_js_1.LEGACY_DIR, entry.src);
|
|
155
|
+
if (!fs.existsSync(srcPath))
|
|
156
|
+
continue;
|
|
157
|
+
try {
|
|
158
|
+
const destPath = path.join(entry.destDir, entry.src);
|
|
159
|
+
moveFile(srcPath, destPath, entry.mode);
|
|
160
|
+
}
|
|
161
|
+
catch (err) {
|
|
162
|
+
const msg = `Failed to migrate ${entry.src}: ${err instanceof Error ? err.message : String(err)}`;
|
|
163
|
+
errors.push(msg);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// Migrate directories
|
|
167
|
+
for (const entry of DIR_MIGRATION_MAP) {
|
|
168
|
+
const srcPath = path.join(paths_js_1.LEGACY_DIR, entry.src);
|
|
169
|
+
if (!fs.existsSync(srcPath))
|
|
170
|
+
continue;
|
|
171
|
+
try {
|
|
172
|
+
moveDir(srcPath, entry.destDir);
|
|
173
|
+
}
|
|
174
|
+
catch (err) {
|
|
175
|
+
const msg = `Failed to migrate ${entry.src}/: ${err instanceof Error ? err.message : String(err)}`;
|
|
176
|
+
errors.push(msg);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
// Also move the daemon PID and log from cron/ to state (they lived under cron/ in legacy)
|
|
180
|
+
for (const file of ['daemon.pid', 'daemon.log']) {
|
|
181
|
+
const srcPath = path.join(paths_js_1.DATA_DIR, 'cron', file);
|
|
182
|
+
if (!fs.existsSync(srcPath))
|
|
183
|
+
continue;
|
|
184
|
+
try {
|
|
185
|
+
const destName = file === 'daemon.pid' ? 'cron-daemon.pid' : 'cron-daemon.log';
|
|
186
|
+
moveFile(srcPath, path.join(paths_js_1.STATE_DIR, destName));
|
|
187
|
+
}
|
|
188
|
+
catch (err) {
|
|
189
|
+
const msg = `Failed to relocate cron/${file}: ${err instanceof Error ? err.message : String(err)}`;
|
|
190
|
+
errors.push(msg);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
// Leave marker explaining the migration
|
|
194
|
+
try {
|
|
195
|
+
fs.writeFileSync(MIGRATED_MARKER, 'Bernard files have been migrated to XDG Base Directory locations.\n' +
|
|
196
|
+
'See: https://specifications.freedesktop.org/basedir/latest/\n' +
|
|
197
|
+
`Config: ${paths_js_1.CONFIG_DIR}\n` +
|
|
198
|
+
`Data: ${paths_js_1.DATA_DIR}\n` +
|
|
199
|
+
`Cache: ${paths_js_1.CACHE_DIR}\n` +
|
|
200
|
+
`State: ${paths_js_1.STATE_DIR}\n`);
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
// Non-critical
|
|
204
|
+
}
|
|
205
|
+
// Print one-line notice to stderr
|
|
206
|
+
process.stderr.write(`bernard: migrated data from ~/.bernard/ to XDG directories (see ~/.bernard/MIGRATED)\n`);
|
|
207
|
+
return { migrated: true, errors };
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=migrate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../src/migrate.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiGA,8CA8FC;AA/LD,4CAA8B;AAC9B,gDAAkC;AAClC,yCAAoF;AAEpF,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,qBAAU,EAAE,UAAU,CAAC,CAAC;AAE1D,kDAAkD;AAClD,MAAM,aAAa,GAA2D;IAC5E,eAAe;IACf,EAAE,GAAG,EAAE,kBAAkB,EAAE,OAAO,EAAE,qBAAU,EAAE;IAChD,EAAE,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,qBAAU,EAAE,IAAI,EAAE,KAAK,EAAE;IACtD,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAU,EAAE;IACpC,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,qBAAU,EAAE;IAExC,cAAc;IACd,EAAE,GAAG,EAAE,mBAAmB,EAAE,OAAO,EAAE,oBAAS,EAAE;IAEhD,cAAc;IACd,EAAE,GAAG,EAAE,2BAA2B,EAAE,OAAO,EAAE,oBAAS,EAAE;CACzD,CAAC;AAEF,uDAAuD;AACvD,MAAM,iBAAiB,GAA4C;IACjE,mBAAmB;IACnB,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,mBAAQ,EAAE,QAAQ,CAAC,EAAE;IACzD,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,mBAAQ,EAAE,KAAK,CAAC,EAAE;IACnD,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,mBAAQ,EAAE,MAAM,CAAC,EAAE;IAErD,oBAAoB;IACpB,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,oBAAS,EAAE,QAAQ,CAAC,EAAE;IAE1D,oBAAoB;IACpB,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,oBAAS,EAAE,MAAM,CAAC,EAAE;CACvD,CAAC;AAEF;;;GAGG;AACH,SAAS,QAAQ,CAAC,GAAW,EAAE,IAAY,EAAE,IAAa;IACxD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAExD,IAAI,CAAC;QACH,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,IAAK,GAA6B,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACpD,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC3B,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,OAAO,CAAC,MAAc,EAAE,OAAe;IAC9C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO;IAEnC,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAExD,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAEhD,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,wCAAwC;IACxC,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,gDAAgD;IAClD,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,iBAAiB;IAC/B,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,0CAA0C;IAC1C,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC7B,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IACrC,CAAC;IAED,mDAAmD;IACnD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,qBAAU,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IACrC,CAAC;IAED,2BAA2B;IAC3B,IAAI,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACnC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IACrC,CAAC;IACD,IAAI,EAAE,CAAC,UAAU,CAAC,qBAAU,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,qBAAU,CAAC,CAAC;YAC3C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;YACrC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,4BAA4B;QAC9B,CAAC;IACH,CAAC;IAED,8CAA8C;IAC9C,KAAK,MAAM,GAAG,IAAI,CAAC,qBAAU,EAAE,mBAAQ,EAAE,oBAAS,EAAE,oBAAS,CAAC,EAAE,CAAC;QAC/D,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,2BAA2B;IAC3B,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,qBAAU,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QACjD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,SAAS;QAEtC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;YACrD,QAAQ,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,qBAAqB,KAAK,CAAC,GAAG,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAClG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IAED,sBAAsB;IACtB,KAAK,MAAM,KAAK,IAAI,iBAAiB,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,qBAAU,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QACjD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,SAAS;QAEtC,IAAI,CAAC;YACH,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,qBAAqB,KAAK,CAAC,GAAG,MAAM,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YACnG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IAED,0FAA0F;IAC1F,KAAK,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,EAAE,CAAC;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,SAAS;QACtC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC;YAC/E,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,oBAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,2BAA2B,IAAI,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YACnG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IAED,wCAAwC;IACxC,IAAI,CAAC;QACH,EAAE,CAAC,aAAa,CACd,eAAe,EACf,qEAAqE;YACnE,+DAA+D;YAC/D,WAAW,qBAAU,IAAI;YACzB,WAAW,mBAAQ,IAAI;YACvB,WAAW,oBAAS,IAAI;YACxB,WAAW,oBAAS,IAAI,CAC3B,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,eAAe;IACjB,CAAC;IAED,kCAAkC;IAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,wFAAwF,CACzF,CAAC;IAEF,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AACpC,CAAC"}
|
package/dist/output.d.ts
CHANGED
|
@@ -1,21 +1,66 @@
|
|
|
1
1
|
import type { CoreMessage } from 'ai';
|
|
2
|
+
/** Cumulative token-usage statistics displayed alongside the thinking spinner. */
|
|
2
3
|
export interface SpinnerStats {
|
|
4
|
+
/** Epoch timestamp (ms) when the current agent step began. */
|
|
3
5
|
startTime: number;
|
|
6
|
+
/** Running total of prompt tokens consumed across all steps. */
|
|
4
7
|
totalPromptTokens: number;
|
|
8
|
+
/** Running total of completion tokens generated across all steps. */
|
|
5
9
|
totalCompletionTokens: number;
|
|
10
|
+
/** Prompt tokens for the most recent LLM call (used for compression headroom). */
|
|
6
11
|
latestPromptTokens: number;
|
|
12
|
+
/** Model identifier, used to look up the context-window size. */
|
|
7
13
|
model: string;
|
|
8
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* Builds the dynamic status text shown next to the spinner animation.
|
|
17
|
+
*
|
|
18
|
+
* Displays elapsed time, cumulative token counts (up/down arrows),
|
|
19
|
+
* and percentage of context window remaining before compression triggers.
|
|
20
|
+
*/
|
|
9
21
|
export declare function buildSpinnerMessage(stats: SpinnerStats): string;
|
|
22
|
+
/**
|
|
23
|
+
* Starts a braille-dot spinner animation on stdout.
|
|
24
|
+
*
|
|
25
|
+
* Hides the cursor and redraws at 80 ms intervals. If a spinner is already
|
|
26
|
+
* running the call is a no-op. Call {@link stopSpinner} to clear it.
|
|
27
|
+
*
|
|
28
|
+
* @param message - Static string or callback returning a dynamic status line.
|
|
29
|
+
*/
|
|
10
30
|
export declare function startSpinner(message?: string | (() => string)): void;
|
|
31
|
+
/** Stops the spinner, clears its line, and restores the cursor. */
|
|
11
32
|
export declare function stopSpinner(): void;
|
|
12
|
-
|
|
33
|
+
/** Prints the branded welcome banner with provider, model, and optional version info. */
|
|
34
|
+
export declare function printWelcome(provider: string, model: string, version?: string): void;
|
|
35
|
+
/** Prints an assistant response, stopping any active spinner first. */
|
|
13
36
|
export declare function printAssistantText(text: string, prefix?: string): void;
|
|
37
|
+
/**
|
|
38
|
+
* Prints a one-line summary of a tool invocation.
|
|
39
|
+
*
|
|
40
|
+
* For the `shell` tool the raw command string is shown; for all others
|
|
41
|
+
* the args object is JSON-serialized.
|
|
42
|
+
*/
|
|
14
43
|
export declare function printToolCall(toolName: string, args: Record<string, unknown>, prefix?: string): void;
|
|
44
|
+
/**
|
|
45
|
+
* Prints a tool's return value, truncated to {@link MAX_TOOL_OUTPUT_LENGTH} characters.
|
|
46
|
+
*
|
|
47
|
+
* Handles string results, `{ output: string }` shapes, and arbitrary objects.
|
|
48
|
+
*/
|
|
15
49
|
export declare function printToolResult(toolName: string, result: unknown, prefix?: string): void;
|
|
50
|
+
/** Prints an error message to stderr in the theme's error color. */
|
|
16
51
|
export declare function printError(message: string): void;
|
|
52
|
+
/** Prints an informational message in the theme's muted color. */
|
|
17
53
|
export declare function printInfo(message: string): void;
|
|
54
|
+
/**
|
|
55
|
+
* Prints a dimmed summary of a prior conversation for session-resume context.
|
|
56
|
+
*
|
|
57
|
+
* Each message is truncated to {@link MAX_REPLAY_LENGTH} characters.
|
|
58
|
+
* Tool-role messages are skipped.
|
|
59
|
+
*/
|
|
18
60
|
export declare function printConversationReplay(messages: CoreMessage[]): void;
|
|
61
|
+
/** Prints a colored top-border line when a sub-agent begins executing a task. */
|
|
19
62
|
export declare function printSubAgentStart(id: number, task: string): void;
|
|
63
|
+
/** Prints a colored bottom-border line when a sub-agent finishes. */
|
|
20
64
|
export declare function printSubAgentEnd(id: number): void;
|
|
65
|
+
/** Prints the REPL help menu listing all available slash commands. */
|
|
21
66
|
export declare function printHelp(): void;
|
package/dist/output.js
CHANGED
|
@@ -17,12 +17,20 @@ const context_js_1 = require("./context.js");
|
|
|
17
17
|
const theme_js_1 = require("./theme.js");
|
|
18
18
|
const MAX_TOOL_OUTPUT_LENGTH = 2000;
|
|
19
19
|
const MAX_REPLAY_LENGTH = 200;
|
|
20
|
+
/**
|
|
21
|
+
* Formats a token count into a compact human-readable string (e.g. `"3.2k"`).
|
|
22
|
+
* @internal
|
|
23
|
+
*/
|
|
20
24
|
function formatTokenCount(n) {
|
|
21
25
|
if (n < 1000)
|
|
22
26
|
return String(n);
|
|
23
27
|
const k = n / 1000;
|
|
24
28
|
return k >= 10 ? `${Math.round(k)}k` : `${k.toFixed(1)}k`;
|
|
25
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* Formats a millisecond duration as `"Xs"` or `"XmYs"`.
|
|
32
|
+
* @internal
|
|
33
|
+
*/
|
|
26
34
|
function formatElapsed(ms) {
|
|
27
35
|
const totalSeconds = Math.floor(ms / 1000);
|
|
28
36
|
if (totalSeconds < 60)
|
|
@@ -31,6 +39,12 @@ function formatElapsed(ms) {
|
|
|
31
39
|
const seconds = totalSeconds % 60;
|
|
32
40
|
return `${minutes}m${seconds}s`;
|
|
33
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Builds the dynamic status text shown next to the spinner animation.
|
|
44
|
+
*
|
|
45
|
+
* Displays elapsed time, cumulative token counts (up/down arrows),
|
|
46
|
+
* and percentage of context window remaining before compression triggers.
|
|
47
|
+
*/
|
|
34
48
|
function buildSpinnerMessage(stats) {
|
|
35
49
|
const elapsed = formatElapsed(Date.now() - stats.startTime);
|
|
36
50
|
if (stats.totalPromptTokens === 0 && stats.totalCompletionTokens === 0) {
|
|
@@ -40,9 +54,14 @@ function buildSpinnerMessage(stats) {
|
|
|
40
54
|
const down = formatTokenCount(stats.totalCompletionTokens);
|
|
41
55
|
const contextWindow = (0, context_js_1.getContextWindow)(stats.model);
|
|
42
56
|
const thresholdTokens = contextWindow * context_js_1.COMPRESSION_THRESHOLD;
|
|
43
|
-
const remainingPct = Math.max(0, Math.round((thresholdTokens - stats.latestPromptTokens) / thresholdTokens * 100));
|
|
57
|
+
const remainingPct = Math.max(0, Math.round(((thresholdTokens - stats.latestPromptTokens) / thresholdTokens) * 100));
|
|
44
58
|
return `Thinking (${elapsed} | ${up}\u2191 ${down}\u2193 | ${remainingPct}% until compression)`;
|
|
45
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* Wraps an optional sub-agent prefix (e.g. `"sub:2"`) in a colored bracket label.
|
|
62
|
+
* Returns an empty string when no prefix is provided.
|
|
63
|
+
* @internal
|
|
64
|
+
*/
|
|
46
65
|
function formatPrefix(prefix) {
|
|
47
66
|
if (!prefix)
|
|
48
67
|
return '';
|
|
@@ -56,6 +75,14 @@ function formatPrefix(prefix) {
|
|
|
56
75
|
const SPINNER_FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
|
|
57
76
|
let spinnerTimer = null;
|
|
58
77
|
let spinnerFrameIndex = 0;
|
|
78
|
+
/**
|
|
79
|
+
* Starts a braille-dot spinner animation on stdout.
|
|
80
|
+
*
|
|
81
|
+
* Hides the cursor and redraws at 80 ms intervals. If a spinner is already
|
|
82
|
+
* running the call is a no-op. Call {@link stopSpinner} to clear it.
|
|
83
|
+
*
|
|
84
|
+
* @param message - Static string or callback returning a dynamic status line.
|
|
85
|
+
*/
|
|
59
86
|
function startSpinner(message = 'Thinking') {
|
|
60
87
|
if (spinnerTimer)
|
|
61
88
|
return; // already running
|
|
@@ -68,6 +95,7 @@ function startSpinner(message = 'Thinking') {
|
|
|
68
95
|
spinnerFrameIndex++;
|
|
69
96
|
}, 80);
|
|
70
97
|
}
|
|
98
|
+
/** Stops the spinner, clears its line, and restores the cursor. */
|
|
71
99
|
function stopSpinner() {
|
|
72
100
|
if (!spinnerTimer)
|
|
73
101
|
return;
|
|
@@ -76,14 +104,17 @@ function stopSpinner() {
|
|
|
76
104
|
process.stdout.write('\r\x1B[2K'); // clear line
|
|
77
105
|
process.stdout.write('\x1B[?25h'); // show cursor
|
|
78
106
|
}
|
|
79
|
-
|
|
80
|
-
|
|
107
|
+
/** Prints the branded welcome banner with provider, model, and optional version info. */
|
|
108
|
+
function printWelcome(provider, model, version) {
|
|
109
|
+
const ver = version ? (0, theme_js_1.getTheme)().muted(` v${version}`) : '';
|
|
110
|
+
console.log((0, theme_js_1.getTheme)().accentBold('\n Bernard') + ver + (0, theme_js_1.getTheme)().muted(' — AI CLI Assistant'));
|
|
81
111
|
console.log((0, theme_js_1.getTheme)().muted(` Provider: ${provider} | Model: ${model}`));
|
|
82
112
|
if (process.env.BERNARD_DEBUG === 'true' || process.env.BERNARD_DEBUG === '1') {
|
|
83
113
|
console.log((0, theme_js_1.getTheme)().warning(' DEBUG mode enabled — logging to .logs/'));
|
|
84
114
|
}
|
|
85
115
|
console.log((0, theme_js_1.getTheme)().muted(' Type /help for commands, exit to quit\n'));
|
|
86
116
|
}
|
|
117
|
+
/** Prints an assistant response, stopping any active spinner first. */
|
|
87
118
|
function printAssistantText(text, prefix) {
|
|
88
119
|
stopSpinner();
|
|
89
120
|
if (text.trim()) {
|
|
@@ -91,14 +122,23 @@ function printAssistantText(text, prefix) {
|
|
|
91
122
|
console.log(label + (0, theme_js_1.getTheme)().text(text));
|
|
92
123
|
}
|
|
93
124
|
}
|
|
125
|
+
/**
|
|
126
|
+
* Prints a one-line summary of a tool invocation.
|
|
127
|
+
*
|
|
128
|
+
* For the `shell` tool the raw command string is shown; for all others
|
|
129
|
+
* the args object is JSON-serialized.
|
|
130
|
+
*/
|
|
94
131
|
function printToolCall(toolName, args, prefix) {
|
|
95
132
|
stopSpinner();
|
|
96
133
|
const label = formatPrefix(prefix);
|
|
97
|
-
const argsStr = toolName === 'shell'
|
|
98
|
-
? String(args.command || '')
|
|
99
|
-
: JSON.stringify(args);
|
|
134
|
+
const argsStr = toolName === 'shell' ? String(args.command || '') : JSON.stringify(args);
|
|
100
135
|
console.log(label + (0, theme_js_1.getTheme)().toolCall(` ▶ ${toolName}`) + (0, theme_js_1.getTheme)().muted(`: ${argsStr}`));
|
|
101
136
|
}
|
|
137
|
+
/**
|
|
138
|
+
* Prints a tool's return value, truncated to {@link MAX_TOOL_OUTPUT_LENGTH} characters.
|
|
139
|
+
*
|
|
140
|
+
* Handles string results, `{ output: string }` shapes, and arbitrary objects.
|
|
141
|
+
*/
|
|
102
142
|
function printToolResult(toolName, result, prefix) {
|
|
103
143
|
stopSpinner();
|
|
104
144
|
const label = formatPrefix(prefix);
|
|
@@ -115,16 +155,27 @@ function printToolResult(toolName, result, prefix) {
|
|
|
115
155
|
if (output.length > MAX_TOOL_OUTPUT_LENGTH) {
|
|
116
156
|
output = output.slice(0, MAX_TOOL_OUTPUT_LENGTH) + (0, theme_js_1.getTheme)().muted('\n ... (truncated)');
|
|
117
157
|
}
|
|
118
|
-
const lines = output
|
|
158
|
+
const lines = output
|
|
159
|
+
.split('\n')
|
|
160
|
+
.map((line) => label + (0, theme_js_1.getTheme)().muted(` ${line}`))
|
|
161
|
+
.join('\n');
|
|
119
162
|
console.log(lines);
|
|
120
163
|
}
|
|
164
|
+
/** Prints an error message to stderr in the theme's error color. */
|
|
121
165
|
function printError(message) {
|
|
122
166
|
stopSpinner();
|
|
123
167
|
console.error((0, theme_js_1.getTheme)().error(`Error: ${message}`));
|
|
124
168
|
}
|
|
169
|
+
/** Prints an informational message in the theme's muted color. */
|
|
125
170
|
function printInfo(message) {
|
|
126
171
|
console.log((0, theme_js_1.getTheme)().muted(message));
|
|
127
172
|
}
|
|
173
|
+
/**
|
|
174
|
+
* Prints a dimmed summary of a prior conversation for session-resume context.
|
|
175
|
+
*
|
|
176
|
+
* Each message is truncated to {@link MAX_REPLAY_LENGTH} characters.
|
|
177
|
+
* Tool-role messages are skipped.
|
|
178
|
+
*/
|
|
128
179
|
function printConversationReplay(messages) {
|
|
129
180
|
console.log((0, theme_js_1.getTheme)().dim(' Previous conversation:'));
|
|
130
181
|
for (const msg of messages) {
|
|
@@ -133,15 +184,22 @@ function printConversationReplay(messages) {
|
|
|
133
184
|
const text = extractText(msg);
|
|
134
185
|
if (!text)
|
|
135
186
|
continue;
|
|
136
|
-
const truncated = text.length > MAX_REPLAY_LENGTH
|
|
137
|
-
? text.slice(0, MAX_REPLAY_LENGTH) + '…'
|
|
138
|
-
: text;
|
|
187
|
+
const truncated = text.length > MAX_REPLAY_LENGTH ? text.slice(0, MAX_REPLAY_LENGTH) + '…' : text;
|
|
139
188
|
const prefix = msg.role === 'user' ? ' you> ' : ' assistant> ';
|
|
140
189
|
console.log((0, theme_js_1.getTheme)().dim(prefix + truncated));
|
|
141
190
|
}
|
|
142
191
|
console.log((0, theme_js_1.getTheme)().dim(' ———'));
|
|
143
192
|
console.log();
|
|
144
193
|
}
|
|
194
|
+
/**
|
|
195
|
+
* Extracts the plain-text content from a {@link CoreMessage} for display formatting.
|
|
196
|
+
*
|
|
197
|
+
* Unlike {@link extractText} in `context.ts` (which is used for serialization and compression),
|
|
198
|
+
* this variant is scoped to output rendering only.
|
|
199
|
+
*
|
|
200
|
+
* @returns The joined text content, or `null` if the message has no text parts.
|
|
201
|
+
* @internal
|
|
202
|
+
*/
|
|
145
203
|
function extractText(msg) {
|
|
146
204
|
if (typeof msg.content === 'string')
|
|
147
205
|
return msg.content;
|
|
@@ -149,20 +207,23 @@ function extractText(msg) {
|
|
|
149
207
|
return null;
|
|
150
208
|
const textParts = msg.content
|
|
151
209
|
.filter((p) => typeof p === 'object' && p !== null && 'type' in p && p.type === 'text')
|
|
152
|
-
.map(p => p.text);
|
|
210
|
+
.map((p) => p.text);
|
|
153
211
|
return textParts.length > 0 ? textParts.join(' ') : null;
|
|
154
212
|
}
|
|
213
|
+
/** Prints a colored top-border line when a sub-agent begins executing a task. */
|
|
155
214
|
function printSubAgentStart(id, task) {
|
|
156
215
|
const prefixColors = (0, theme_js_1.getTheme)().prefixColors;
|
|
157
216
|
const colorFn = prefixColors[(id - 1) % prefixColors.length];
|
|
158
217
|
const displayTask = task.length > 80 ? task.slice(0, 80) + '…' : task;
|
|
159
218
|
console.log(colorFn(`┌─ sub:${id} — ${displayTask}`));
|
|
160
219
|
}
|
|
220
|
+
/** Prints a colored bottom-border line when a sub-agent finishes. */
|
|
161
221
|
function printSubAgentEnd(id) {
|
|
162
222
|
const prefixColors = (0, theme_js_1.getTheme)().prefixColors;
|
|
163
223
|
const colorFn = prefixColors[(id - 1) % prefixColors.length];
|
|
164
224
|
console.log(colorFn(`└─ sub:${id} done`));
|
|
165
225
|
}
|
|
226
|
+
/** Prints the REPL help menu listing all available slash commands. */
|
|
166
227
|
function printHelp() {
|
|
167
228
|
const t = (0, theme_js_1.getTheme)();
|
|
168
229
|
console.log(t.accent('\nCommands:'));
|
package/dist/output.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"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"}
|
package/dist/paths.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export declare const CONFIG_DIR: string;
|
|
2
|
+
export declare const DATA_DIR: string;
|
|
3
|
+
export declare const CACHE_DIR: string;
|
|
4
|
+
export declare const STATE_DIR: string;
|
|
5
|
+
export declare const LEGACY_DIR: string;
|
|
6
|
+
export declare const PREFS_PATH: string;
|
|
7
|
+
export declare const KEYS_PATH: string;
|
|
8
|
+
export declare const ENV_PATH: string;
|
|
9
|
+
export declare const MCP_CONFIG_PATH: string;
|
|
10
|
+
export declare const MEMORY_DIR: string;
|
|
11
|
+
export declare const RAG_DIR: string;
|
|
12
|
+
export declare const MEMORIES_FILE: string;
|
|
13
|
+
export declare const LAST_SESSION_FILE: string;
|
|
14
|
+
export declare const CRON_DIR: string;
|
|
15
|
+
export declare const CRON_JOBS_FILE: string;
|
|
16
|
+
export declare const CRON_ALERTS_DIR: string;
|
|
17
|
+
export declare const ROUTINES_DIR: string;
|
|
18
|
+
export declare const MODELS_DIR: string;
|
|
19
|
+
export declare const UPDATE_CACHE_PATH: string;
|
|
20
|
+
export declare const HISTORY_FILE: string;
|
|
21
|
+
export declare const LOGS_DIR: string;
|
|
22
|
+
export declare const CRON_PID_FILE: string;
|
|
23
|
+
export declare const CRON_LOG_FILE: string;
|
package/dist/paths.js
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
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.CRON_LOG_FILE = exports.CRON_PID_FILE = exports.LOGS_DIR = exports.HISTORY_FILE = exports.UPDATE_CACHE_PATH = exports.MODELS_DIR = exports.ROUTINES_DIR = exports.CRON_ALERTS_DIR = exports.CRON_JOBS_FILE = exports.CRON_DIR = exports.LAST_SESSION_FILE = exports.MEMORIES_FILE = exports.RAG_DIR = exports.MEMORY_DIR = exports.MCP_CONFIG_PATH = exports.ENV_PATH = exports.KEYS_PATH = exports.PREFS_PATH = exports.LEGACY_DIR = exports.STATE_DIR = exports.CACHE_DIR = exports.DATA_DIR = exports.CONFIG_DIR = void 0;
|
|
37
|
+
const path = __importStar(require("node:path"));
|
|
38
|
+
const os = __importStar(require("node:os"));
|
|
39
|
+
const home = os.homedir();
|
|
40
|
+
const bernardHome = process.env.BERNARD_HOME;
|
|
41
|
+
function xdgBase(envVar, fallbackSuffix) {
|
|
42
|
+
if (bernardHome && path.isAbsolute(bernardHome))
|
|
43
|
+
return bernardHome;
|
|
44
|
+
const envVal = process.env[envVar];
|
|
45
|
+
// XDG spec: ignore relative paths
|
|
46
|
+
if (envVal && path.isAbsolute(envVal))
|
|
47
|
+
return envVal;
|
|
48
|
+
return path.join(home, fallbackSuffix);
|
|
49
|
+
}
|
|
50
|
+
const configBase = xdgBase('XDG_CONFIG_HOME', '.config');
|
|
51
|
+
const dataBase = xdgBase('XDG_DATA_HOME', path.join('.local', 'share'));
|
|
52
|
+
const cacheBase = xdgBase('XDG_CACHE_HOME', '.cache');
|
|
53
|
+
const stateBase = xdgBase('XDG_STATE_HOME', path.join('.local', 'state'));
|
|
54
|
+
// App-scoped roots
|
|
55
|
+
exports.CONFIG_DIR = path.join(configBase, 'bernard');
|
|
56
|
+
exports.DATA_DIR = path.join(dataBase, 'bernard');
|
|
57
|
+
exports.CACHE_DIR = path.join(cacheBase, 'bernard');
|
|
58
|
+
exports.STATE_DIR = path.join(stateBase, 'bernard');
|
|
59
|
+
exports.LEGACY_DIR = path.join(home, '.bernard');
|
|
60
|
+
// Config
|
|
61
|
+
exports.PREFS_PATH = path.join(exports.CONFIG_DIR, 'preferences.json');
|
|
62
|
+
exports.KEYS_PATH = path.join(exports.CONFIG_DIR, 'keys.json');
|
|
63
|
+
exports.ENV_PATH = path.join(exports.CONFIG_DIR, '.env');
|
|
64
|
+
exports.MCP_CONFIG_PATH = path.join(exports.CONFIG_DIR, 'mcp.json');
|
|
65
|
+
// Data
|
|
66
|
+
exports.MEMORY_DIR = path.join(exports.DATA_DIR, 'memory');
|
|
67
|
+
exports.RAG_DIR = path.join(exports.DATA_DIR, 'rag');
|
|
68
|
+
exports.MEMORIES_FILE = path.join(exports.RAG_DIR, 'memories.json');
|
|
69
|
+
exports.LAST_SESSION_FILE = path.join(exports.RAG_DIR, 'last-session.txt');
|
|
70
|
+
exports.CRON_DIR = path.join(exports.DATA_DIR, 'cron');
|
|
71
|
+
exports.CRON_JOBS_FILE = path.join(exports.CRON_DIR, 'jobs.json');
|
|
72
|
+
exports.CRON_ALERTS_DIR = path.join(exports.CRON_DIR, 'alerts');
|
|
73
|
+
exports.ROUTINES_DIR = path.join(exports.DATA_DIR, 'routines');
|
|
74
|
+
// Cache
|
|
75
|
+
exports.MODELS_DIR = path.join(exports.CACHE_DIR, 'models');
|
|
76
|
+
exports.UPDATE_CACHE_PATH = path.join(exports.CACHE_DIR, 'update-check.json');
|
|
77
|
+
// State
|
|
78
|
+
exports.HISTORY_FILE = path.join(exports.STATE_DIR, 'conversation-history.json');
|
|
79
|
+
exports.LOGS_DIR = path.join(exports.STATE_DIR, 'logs');
|
|
80
|
+
exports.CRON_PID_FILE = path.join(exports.STATE_DIR, 'cron-daemon.pid');
|
|
81
|
+
exports.CRON_LOG_FILE = path.join(exports.STATE_DIR, 'cron-daemon.log');
|
|
82
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,9 @@
|
|
|
1
1
|
import type { LanguageModel } from 'ai';
|
|
2
|
+
/**
|
|
3
|
+
* Return an AI SDK `LanguageModel` instance for the given provider and model name.
|
|
4
|
+
* @param provider - One of `"anthropic"`, `"openai"`, or `"xai"`.
|
|
5
|
+
* @param model - Provider-specific model identifier (e.g. `"claude-sonnet-4-20250514"`).
|
|
6
|
+
* @returns A ready-to-use `LanguageModel` backed by the requested provider.
|
|
7
|
+
* @throws {Error} If the provider string is not recognized.
|
|
8
|
+
*/
|
|
2
9
|
export declare function getModel(provider: string, model: string): LanguageModel;
|