@bryti/agent 0.1.2 → 0.2.1
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 +9 -22
- package/dist/cli.js +84 -334
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +8 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +29 -3
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +58 -15
- package/dist/index.js.map +1 -1
- package/dist/memory/embeddings.d.ts +15 -9
- package/dist/memory/embeddings.d.ts.map +1 -1
- package/dist/memory/embeddings.js +37 -13
- package/dist/memory/embeddings.js.map +1 -1
- package/dist/memory/search.d.ts +1 -1
- package/dist/memory/search.d.ts.map +1 -1
- package/dist/memory/search.js +6 -5
- package/dist/memory/search.js.map +1 -1
- package/dist/memory/store.d.ts +3 -2
- package/dist/memory/store.d.ts.map +1 -1
- package/dist/memory/store.js +5 -3
- package/dist/memory/store.js.map +1 -1
- package/dist/model-infra.d.ts.map +1 -1
- package/dist/model-infra.js +1 -0
- package/dist/model-infra.js.map +1 -1
- package/dist/projection/store.d.ts +1 -1
- package/dist/projection/store.d.ts.map +1 -1
- package/dist/projection/store.js +6 -0
- package/dist/projection/store.js.map +1 -1
- package/dist/setup.d.ts +9 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +240 -0
- package/dist/setup.js.map +1 -0
- package/dist/tools/archival-memory-tool.d.ts +1 -1
- package/dist/tools/archival-memory-tool.d.ts.map +1 -1
- package/dist/tools/archival-memory-tool.js.map +1 -1
- package/dist/update-check.d.ts +16 -0
- package/dist/update-check.d.ts.map +1 -0
- package/dist/update-check.js +94 -0
- package/dist/update-check.js.map +1 -0
- package/package.json +10 -6
- package/run.sh +15 -5
package/dist/setup.js
ADDED
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interactive first-run setup: `bryti hail`
|
|
3
|
+
*
|
|
4
|
+
* Walks the user through creating a working config.yml with the minimum
|
|
5
|
+
* needed to start: a model provider and a Telegram bot. Everything else
|
|
6
|
+
* has sensible defaults.
|
|
7
|
+
*/
|
|
8
|
+
import fs from "node:fs";
|
|
9
|
+
import path from "node:path";
|
|
10
|
+
import readline from "node:readline";
|
|
11
|
+
import { resolveDataDir } from "./config.js";
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
// Prompt helpers
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
function createPrompt() {
|
|
16
|
+
const rl = readline.createInterface({
|
|
17
|
+
input: process.stdin,
|
|
18
|
+
output: process.stdout,
|
|
19
|
+
});
|
|
20
|
+
const ask = (question, fallback) => new Promise((resolve) => {
|
|
21
|
+
const suffix = fallback ? ` [${fallback}]` : "";
|
|
22
|
+
rl.question(` ${question}${suffix}: `, (answer) => {
|
|
23
|
+
resolve(answer.trim() || fallback || "");
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
const askSecret = (question) => new Promise((resolve) => {
|
|
27
|
+
// Mute output while typing
|
|
28
|
+
const stdout = process.stdout;
|
|
29
|
+
rl.question(` ${question}: `, (answer) => {
|
|
30
|
+
resolve(answer.trim());
|
|
31
|
+
});
|
|
32
|
+
// Hide input by overwriting with nothing
|
|
33
|
+
const origWrite = stdout.write.bind(stdout);
|
|
34
|
+
stdout.write = (chunk, ...args) => {
|
|
35
|
+
if (typeof chunk === "string" && chunk.includes(question)) {
|
|
36
|
+
return origWrite(chunk, ...args);
|
|
37
|
+
}
|
|
38
|
+
// Don't echo typed characters
|
|
39
|
+
return true;
|
|
40
|
+
};
|
|
41
|
+
rl.once("close", () => { stdout.write = origWrite; });
|
|
42
|
+
// Restore after answer
|
|
43
|
+
const restore = () => {
|
|
44
|
+
stdout.write = origWrite;
|
|
45
|
+
origWrite("\n");
|
|
46
|
+
};
|
|
47
|
+
rl.once("line", restore);
|
|
48
|
+
});
|
|
49
|
+
const choose = (question, options, fallback = 0) => new Promise((resolve) => {
|
|
50
|
+
console.log(` ${question}`);
|
|
51
|
+
for (let i = 0; i < options.length; i++) {
|
|
52
|
+
const marker = i === fallback ? ">" : " ";
|
|
53
|
+
console.log(` ${marker} ${i + 1}. ${options[i]}`);
|
|
54
|
+
}
|
|
55
|
+
rl.question(` Choice [${fallback + 1}]: `, (answer) => {
|
|
56
|
+
const n = parseInt(answer.trim(), 10);
|
|
57
|
+
if (n >= 1 && n <= options.length) {
|
|
58
|
+
resolve(n - 1);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
resolve(fallback);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
return { ask, askSecret, choose, close: () => rl.close() };
|
|
66
|
+
}
|
|
67
|
+
// ---------------------------------------------------------------------------
|
|
68
|
+
// Config generation
|
|
69
|
+
// ---------------------------------------------------------------------------
|
|
70
|
+
function generateConfig(opts) {
|
|
71
|
+
const lines = [
|
|
72
|
+
"# Bryti configuration",
|
|
73
|
+
"# Generated by 'bryti hail'. Edit freely.",
|
|
74
|
+
"",
|
|
75
|
+
"agent:",
|
|
76
|
+
` name: ${opts.name}`,
|
|
77
|
+
` model: ${opts.provider}/${opts.model}`,
|
|
78
|
+
` timezone: ${opts.timezone}`,
|
|
79
|
+
"",
|
|
80
|
+
"telegram:",
|
|
81
|
+
` token: \${TELEGRAM_BOT_TOKEN}`,
|
|
82
|
+
` allowed_users:`,
|
|
83
|
+
` - ${opts.telegramUserId}`,
|
|
84
|
+
"",
|
|
85
|
+
"models:",
|
|
86
|
+
" providers:",
|
|
87
|
+
];
|
|
88
|
+
if (opts.provider === "anthropic") {
|
|
89
|
+
const apiLine = opts.apiKey
|
|
90
|
+
? " api_key: ${ANTHROPIC_API_KEY}"
|
|
91
|
+
: ' api_key: ""';
|
|
92
|
+
lines.push(" - name: anthropic", " api: anthropic-messages", apiLine, " models:", ` - id: ${opts.model}`);
|
|
93
|
+
}
|
|
94
|
+
else if (opts.provider === "openai") {
|
|
95
|
+
const apiLine = opts.apiKey
|
|
96
|
+
? " api_key: ${OPENAI_API_KEY}"
|
|
97
|
+
: ' api_key: ""';
|
|
98
|
+
lines.push(" - name: openai", " api: openai-completions", apiLine, " models:", ` - id: ${opts.model}`);
|
|
99
|
+
}
|
|
100
|
+
else if (opts.provider === "opencode") {
|
|
101
|
+
lines.push(" - name: opencode", " api: openai-completions", " base_url: https://opencode-ai.com/v1/openai", " api_key: none", " models:", ` - id: ${opts.model}`);
|
|
102
|
+
}
|
|
103
|
+
lines.push("");
|
|
104
|
+
return lines.join("\n") + "\n";
|
|
105
|
+
}
|
|
106
|
+
function generateEnv(opts) {
|
|
107
|
+
const lines = [];
|
|
108
|
+
lines.push(`TELEGRAM_BOT_TOKEN=${opts.telegramToken}`);
|
|
109
|
+
if (opts.provider === "anthropic" && opts.apiKey) {
|
|
110
|
+
lines.push(`ANTHROPIC_API_KEY=${opts.apiKey}`);
|
|
111
|
+
}
|
|
112
|
+
else if (opts.provider === "openai" && opts.apiKey) {
|
|
113
|
+
lines.push(`OPENAI_API_KEY=${opts.apiKey}`);
|
|
114
|
+
}
|
|
115
|
+
lines.push("");
|
|
116
|
+
return lines.join("\n");
|
|
117
|
+
}
|
|
118
|
+
// ---------------------------------------------------------------------------
|
|
119
|
+
// Main
|
|
120
|
+
// ---------------------------------------------------------------------------
|
|
121
|
+
export async function runSetup(targetDir) {
|
|
122
|
+
const dataDir = targetDir ? path.resolve(targetDir) : resolveDataDir();
|
|
123
|
+
console.log("");
|
|
124
|
+
console.log(" ᛒ Bryti hails you.");
|
|
125
|
+
console.log("");
|
|
126
|
+
console.log(" Let's set up your AI colleague.");
|
|
127
|
+
console.log(` Config will be written to: ${dataDir}`);
|
|
128
|
+
console.log("");
|
|
129
|
+
if (fs.existsSync(path.join(dataDir, "config.yml"))) {
|
|
130
|
+
console.log(" A config.yml already exists here. Run 'bryti serve' to start.");
|
|
131
|
+
console.log("");
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
const prompt = createPrompt();
|
|
135
|
+
try {
|
|
136
|
+
// --- Name ---
|
|
137
|
+
const name = await prompt.ask("What should your bryti be called?", "Bryti");
|
|
138
|
+
// --- Provider ---
|
|
139
|
+
console.log("");
|
|
140
|
+
const providerIdx = await prompt.choose("Which model provider?", [
|
|
141
|
+
"Anthropic (Claude)",
|
|
142
|
+
"OpenAI (GPT)",
|
|
143
|
+
"OpenCode (free, no API key)",
|
|
144
|
+
], 0);
|
|
145
|
+
const providerMap = ["anthropic", "openai", "opencode"];
|
|
146
|
+
const provider = providerMap[providerIdx];
|
|
147
|
+
// --- Auth method ---
|
|
148
|
+
let apiKey = "";
|
|
149
|
+
let useOAuth = false;
|
|
150
|
+
if (provider === "anthropic" || provider === "openai") {
|
|
151
|
+
console.log("");
|
|
152
|
+
const providerName = provider === "anthropic" ? "Anthropic" : "OpenAI";
|
|
153
|
+
const authIdx = await prompt.choose(`How do you authenticate with ${providerName}?`, [
|
|
154
|
+
`${providerName} subscription (Max/Pro/Plus plan)`,
|
|
155
|
+
"API key",
|
|
156
|
+
], 0);
|
|
157
|
+
if (authIdx === 1) {
|
|
158
|
+
const keyUrl = provider === "anthropic"
|
|
159
|
+
? "https://console.anthropic.com/settings/keys"
|
|
160
|
+
: "https://platform.openai.com/api-keys";
|
|
161
|
+
console.log(` Get an API key at: ${keyUrl}`);
|
|
162
|
+
apiKey = await prompt.ask(`${providerName} API key`);
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
useOAuth = true;
|
|
166
|
+
console.log(` Bryti will use your ${providerName} subscription via OAuth.`);
|
|
167
|
+
console.log(" You'll be prompted to sign in on first start.");
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
// --- Model ---
|
|
171
|
+
let model;
|
|
172
|
+
if (provider === "anthropic") {
|
|
173
|
+
model = "claude-sonnet-4-6";
|
|
174
|
+
}
|
|
175
|
+
else if (provider === "openai") {
|
|
176
|
+
model = "gpt-4.1";
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
model = "MiniMax-M2-5";
|
|
180
|
+
}
|
|
181
|
+
console.log(` Using model: ${model}`);
|
|
182
|
+
// --- Telegram ---
|
|
183
|
+
console.log("");
|
|
184
|
+
console.log(" Now let's connect to Telegram.");
|
|
185
|
+
console.log(" 1. Open Telegram and message @BotFather");
|
|
186
|
+
console.log(" 2. Send /newbot and follow the steps");
|
|
187
|
+
console.log(" 3. Copy the bot token it gives you");
|
|
188
|
+
console.log("");
|
|
189
|
+
const telegramToken = await prompt.ask("Telegram bot token");
|
|
190
|
+
console.log("");
|
|
191
|
+
console.log(" To find your Telegram user ID:");
|
|
192
|
+
console.log(" Message @userinfobot on Telegram. It replies with your ID.");
|
|
193
|
+
console.log("");
|
|
194
|
+
const telegramUserId = await prompt.ask("Your Telegram user ID");
|
|
195
|
+
// --- Timezone ---
|
|
196
|
+
const defaultTz = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
197
|
+
const timezone = await prompt.ask("Timezone", defaultTz);
|
|
198
|
+
// --- Write files ---
|
|
199
|
+
console.log("");
|
|
200
|
+
fs.mkdirSync(dataDir, { recursive: true });
|
|
201
|
+
const configContent = generateConfig({
|
|
202
|
+
name,
|
|
203
|
+
provider,
|
|
204
|
+
apiKey,
|
|
205
|
+
model,
|
|
206
|
+
telegramToken,
|
|
207
|
+
telegramUserId,
|
|
208
|
+
timezone,
|
|
209
|
+
});
|
|
210
|
+
fs.writeFileSync(path.join(dataDir, "config.yml"), configContent, "utf-8");
|
|
211
|
+
const envContent = generateEnv({ provider, apiKey, telegramToken });
|
|
212
|
+
fs.writeFileSync(path.join(dataDir, ".env"), envContent, "utf-8");
|
|
213
|
+
// Copy default extensions
|
|
214
|
+
const pkgRoot = path.resolve(new URL(".", import.meta.url).pathname, "..");
|
|
215
|
+
const defaultExtDir = path.join(pkgRoot, "defaults", "extensions");
|
|
216
|
+
const extDir = path.join(dataDir, "files", "extensions");
|
|
217
|
+
if (fs.existsSync(defaultExtDir)) {
|
|
218
|
+
fs.mkdirSync(extDir, { recursive: true });
|
|
219
|
+
for (const file of fs.readdirSync(defaultExtDir)) {
|
|
220
|
+
fs.copyFileSync(path.join(defaultExtDir, file), path.join(extDir, file));
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
console.log(" ✓ Config written to " + path.join(dataDir, "config.yml"));
|
|
224
|
+
console.log(" ✓ Secrets written to " + path.join(dataDir, ".env"));
|
|
225
|
+
console.log("");
|
|
226
|
+
console.log(" Your steward is ready. Start with:");
|
|
227
|
+
console.log("");
|
|
228
|
+
if (dataDir === resolveDataDir()) {
|
|
229
|
+
console.log(" bryti");
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
console.log(` BRYTI_DATA_DIR=${dataDir} bryti`);
|
|
233
|
+
}
|
|
234
|
+
console.log("");
|
|
235
|
+
}
|
|
236
|
+
finally {
|
|
237
|
+
prompt.close();
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,5 +4,5 @@
|
|
|
4
4
|
import type { AgentTool } from "@mariozechner/pi-agent-core";
|
|
5
5
|
import type { MemoryStore } from "../memory/store.js";
|
|
6
6
|
import type { ProjectionStore } from "../projection/store.js";
|
|
7
|
-
export declare function createArchivalMemoryTools(store: MemoryStore, embed: (text: string) => Promise<number[]>, projectionStore?: ProjectionStore): AgentTool<any>[];
|
|
7
|
+
export declare function createArchivalMemoryTools(store: MemoryStore, embed: (text: string) => Promise<number[] | null>, projectionStore?: ProjectionStore): AgentTool<any>[];
|
|
8
8
|
//# sourceMappingURL=archival-memory-tool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archival-memory-tool.d.ts","sourceRoot":"","sources":["../../src/tools/archival-memory-tool.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,6BAA6B,CAAC;AAI9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAe9D,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"archival-memory-tool.d.ts","sourceRoot":"","sources":["../../src/tools/archival-memory-tool.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,6BAA6B,CAAC;AAI9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAe9D,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,EACjD,eAAe,CAAC,EAAE,eAAe,GAChC,SAAS,CAAC,GAAG,CAAC,EAAE,CAkElB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archival-memory-tool.js","sourceRoot":"","sources":["../../src/tools/archival-memory-tool.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAGzD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAErD,MAAM,0BAA0B,GAAG,IAAI,CAAC,MAAM,CAAC;IAC7C,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,qCAAqC,EAAE,CAAC;CAC7E,CAAC,CAAC;AAIH,MAAM,0BAA0B,GAAG,IAAI,CAAC,MAAM,CAAC;IAC7C,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,kCAAkC,EAAE,CAAC;CACxE,CAAC,CAAC;AAIH,MAAM,UAAU,yBAAyB,CACvC,KAAkB,EAClB,
|
|
1
|
+
{"version":3,"file":"archival-memory-tool.js","sourceRoot":"","sources":["../../src/tools/archival-memory-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Startup update check: notifies the operator when a newer version of
|
|
3
|
+
* @bryti/agent is available on npm.
|
|
4
|
+
*
|
|
5
|
+
* Fire-and-forget. Never blocks startup. Failures are silently swallowed.
|
|
6
|
+
* Results are cached for 24h in data/.update-check so we don't hit the
|
|
7
|
+
* registry on every restart.
|
|
8
|
+
*
|
|
9
|
+
* Set BRYTI_NO_UPDATE_CHECK=1 to disable (CI, Docker, etc.).
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Check for a newer version and log a notice if one is available.
|
|
13
|
+
* Fire-and-forget: call without awaiting.
|
|
14
|
+
*/
|
|
15
|
+
export declare function checkForUpdate(currentVersion: string, dataDir: string): Promise<void>;
|
|
16
|
+
//# sourceMappingURL=update-check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-check.d.ts","sourceRoot":"","sources":["../src/update-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA2EH;;;GAGG;AACH,wBAAsB,cAAc,CAClC,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAgBf"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Startup update check: notifies the operator when a newer version of
|
|
3
|
+
* @bryti/agent is available on npm.
|
|
4
|
+
*
|
|
5
|
+
* Fire-and-forget. Never blocks startup. Failures are silently swallowed.
|
|
6
|
+
* Results are cached for 24h in data/.update-check so we don't hit the
|
|
7
|
+
* registry on every restart.
|
|
8
|
+
*
|
|
9
|
+
* Set BRYTI_NO_UPDATE_CHECK=1 to disable (CI, Docker, etc.).
|
|
10
|
+
*/
|
|
11
|
+
import fs from "node:fs";
|
|
12
|
+
import path from "node:path";
|
|
13
|
+
const REGISTRY_URL = "https://registry.npmjs.org/@bryti/agent/latest";
|
|
14
|
+
const CACHE_TTL_MS = 24 * 60 * 60 * 1000; // 24 hours
|
|
15
|
+
function readCache(dataDir) {
|
|
16
|
+
try {
|
|
17
|
+
const raw = fs.readFileSync(path.join(dataDir, ".update-check"), "utf-8");
|
|
18
|
+
return JSON.parse(raw);
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function writeCache(dataDir, entry) {
|
|
25
|
+
try {
|
|
26
|
+
fs.writeFileSync(path.join(dataDir, ".update-check"), JSON.stringify(entry), "utf-8");
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
// Non-fatal.
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Compare two semver strings. Returns true if `latest` is strictly newer
|
|
34
|
+
* than `current`. Only handles simple X.Y.Z — no pre-release tags.
|
|
35
|
+
*/
|
|
36
|
+
function isNewer(current, latest) {
|
|
37
|
+
const parse = (v) => v.replace(/^v/, "").split(".").map(Number);
|
|
38
|
+
const [ca, cb, cc] = parse(current);
|
|
39
|
+
const [la, lb, lc] = parse(latest);
|
|
40
|
+
if (la !== ca)
|
|
41
|
+
return la > ca;
|
|
42
|
+
if (lb !== cb)
|
|
43
|
+
return lb > cb;
|
|
44
|
+
return lc > cc;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Fetch the latest version from npm, respecting the 24h cache.
|
|
48
|
+
* Returns null if the check cannot be completed.
|
|
49
|
+
*/
|
|
50
|
+
async function fetchLatestVersion(dataDir) {
|
|
51
|
+
const cached = readCache(dataDir);
|
|
52
|
+
if (cached && Date.now() - cached.checkedAt < CACHE_TTL_MS) {
|
|
53
|
+
return cached.latestVersion;
|
|
54
|
+
}
|
|
55
|
+
const controller = new AbortController();
|
|
56
|
+
const timeout = setTimeout(() => controller.abort(), 3000);
|
|
57
|
+
try {
|
|
58
|
+
const res = await fetch(REGISTRY_URL, { signal: controller.signal });
|
|
59
|
+
if (!res.ok)
|
|
60
|
+
return null;
|
|
61
|
+
const data = (await res.json());
|
|
62
|
+
const latestVersion = data.version;
|
|
63
|
+
if (!latestVersion)
|
|
64
|
+
return null;
|
|
65
|
+
writeCache(dataDir, { checkedAt: Date.now(), latestVersion });
|
|
66
|
+
return latestVersion;
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
finally {
|
|
72
|
+
clearTimeout(timeout);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Check for a newer version and log a notice if one is available.
|
|
77
|
+
* Fire-and-forget: call without awaiting.
|
|
78
|
+
*/
|
|
79
|
+
export async function checkForUpdate(currentVersion, dataDir) {
|
|
80
|
+
if (process.env.BRYTI_NO_UPDATE_CHECK === "1") {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
try {
|
|
84
|
+
const latest = await fetchLatestVersion(dataDir);
|
|
85
|
+
if (latest && isNewer(currentVersion, latest)) {
|
|
86
|
+
console.log(`bryti v${latest} available (current: v${currentVersion}). ` +
|
|
87
|
+
`Run \`npm update -g @bryti/agent\` to upgrade.`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
// Never surface update check errors to the operator.
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=update-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-check.js","sourceRoot":"","sources":["../src/update-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,YAAY,GAAG,gDAAgD,CAAC;AACtE,MAAM,YAAY,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW;AAOrD,SAAS,SAAS,CAAC,OAAe;IAChC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,EAAE,OAAO,CAAC,CAAC;QAC1E,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAe,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,OAAe,EAAE,KAAiB;IACpD,IAAI,CAAC;QACH,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,EACnC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EACrB,OAAO,CACR,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,aAAa;IACf,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,OAAO,CAAC,OAAe,EAAE,MAAc;IAC9C,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACxE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IACnC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IAC9B,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IAC9B,OAAO,EAAE,GAAG,EAAE,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,kBAAkB,CAAC,OAAe;IAC/C,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,SAAS,GAAG,YAAY,EAAE,CAAC;QAC3D,OAAO,MAAM,CAAC,aAAa,CAAC;IAC9B,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;IAE3D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QACrE,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QACzB,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAyB,CAAC;QACxD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC;QACnC,IAAI,CAAC,aAAa;YAAE,OAAO,IAAI,CAAC;QAChC,UAAU,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;QAC9D,OAAO,aAAa,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,cAAsB,EACtB,OAAe;IAEf,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,GAAG,EAAE,CAAC;QAC9C,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,MAAM,IAAI,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,EAAE,CAAC;YAC9C,OAAO,CAAC,GAAG,CACT,UAAU,MAAM,yBAAyB,cAAc,KAAK;gBAC5D,gDAAgD,CACjD,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,qDAAqD;IACvD,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bryti/agent",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "Your AI colleague, in the apps you already use.",
|
|
5
5
|
"license": "AGPL-3.0-only",
|
|
6
6
|
"type": "module",
|
|
@@ -11,11 +11,11 @@
|
|
|
11
11
|
},
|
|
12
12
|
"main": "dist/index.js",
|
|
13
13
|
"bin": {
|
|
14
|
-
"bryti": "dist/cli.js"
|
|
15
|
-
"bryti-start": "dist/index.js"
|
|
14
|
+
"bryti": "dist/cli.js"
|
|
16
15
|
},
|
|
17
16
|
"files": [
|
|
18
17
|
"dist/",
|
|
18
|
+
"!dist/dev-cli.*",
|
|
19
19
|
"config.example.yml",
|
|
20
20
|
"run.sh",
|
|
21
21
|
"Dockerfile",
|
|
@@ -23,9 +23,10 @@
|
|
|
23
23
|
],
|
|
24
24
|
"scripts": {
|
|
25
25
|
"build": "tsc && cp -r defaults dist/",
|
|
26
|
-
"dev": "
|
|
27
|
-
"start": "node dist/
|
|
26
|
+
"dev": "tsx src/cli.ts serve",
|
|
27
|
+
"start": "node dist/cli.js serve",
|
|
28
28
|
"cli": "node dist/cli.js",
|
|
29
|
+
"dev-cli": "node dist/dev-cli.js",
|
|
29
30
|
"clean": "rm -rf dist",
|
|
30
31
|
"test": "vitest run",
|
|
31
32
|
"test:watch": "vitest",
|
|
@@ -46,15 +47,18 @@
|
|
|
46
47
|
"grammy": "^1.35.0",
|
|
47
48
|
"linkedom": "^0.18.12",
|
|
48
49
|
"markdown-it": "^14.1.1",
|
|
49
|
-
"node-llama-cpp": "^3.15.1",
|
|
50
50
|
"qrcode-terminal": "^0.12.0",
|
|
51
51
|
"sqlite-vec": "^0.1.7-alpha.2",
|
|
52
52
|
"yaml": "^2.7.0"
|
|
53
53
|
},
|
|
54
|
+
"optionalDependencies": {
|
|
55
|
+
"node-llama-cpp": "^3.15.1"
|
|
56
|
+
},
|
|
54
57
|
"devDependencies": {
|
|
55
58
|
"@types/better-sqlite3": "^7.6.13",
|
|
56
59
|
"@types/node": "^22",
|
|
57
60
|
"@types/qrcode-terminal": "^0.12.2",
|
|
61
|
+
"tsx": "^4.21.0",
|
|
58
62
|
"typescript": "^5.7",
|
|
59
63
|
"vitest": "^4.0.18"
|
|
60
64
|
}
|
package/run.sh
CHANGED
|
@@ -3,14 +3,24 @@ set -euo pipefail
|
|
|
3
3
|
|
|
4
4
|
cd "$(dirname "$0")"
|
|
5
5
|
|
|
6
|
-
RESTART_DELAY_SECONDS="${
|
|
6
|
+
RESTART_DELAY_SECONDS="${BRYTI_RESTART_DELAY_MS:-2000}"
|
|
7
|
+
RESTART_DELAY_SECONDS=$((RESTART_DELAY_SECONDS / 1000))
|
|
8
|
+
|
|
9
|
+
# Use tsx for dev (no build step), fall back to tsc + node for production.
|
|
10
|
+
if [ "${BRYTI_MODE:-dev}" != "prod" ] && npx tsx --version &>/dev/null; then
|
|
11
|
+
RUN_CMD="npx tsx src/cli.ts serve"
|
|
12
|
+
else
|
|
13
|
+
RUN_CMD="node dist/cli.js serve"
|
|
14
|
+
fi
|
|
7
15
|
|
|
8
16
|
while true; do
|
|
9
|
-
|
|
10
|
-
|
|
17
|
+
if [[ "$RUN_CMD" == node* ]]; then
|
|
18
|
+
echo "Building TypeScript..."
|
|
19
|
+
npm run build
|
|
20
|
+
fi
|
|
11
21
|
|
|
12
22
|
exit_code=0
|
|
13
|
-
|
|
23
|
+
$RUN_CMD || exit_code=$?
|
|
14
24
|
|
|
15
25
|
if [ "$exit_code" -eq 0 ]; then
|
|
16
26
|
echo "Bryti stopped cleanly."
|
|
@@ -18,7 +28,7 @@ while true; do
|
|
|
18
28
|
fi
|
|
19
29
|
|
|
20
30
|
if [ "$exit_code" -eq 42 ]; then
|
|
21
|
-
echo "Bryti restart requested.
|
|
31
|
+
echo "Bryti restart requested. Restarting..."
|
|
22
32
|
continue
|
|
23
33
|
fi
|
|
24
34
|
|