@axon-assistant/core 2026.8.28 → 2026.8.29
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 +1 -0
- package/dist/cli.js +72 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -33,6 +33,7 @@ axon start --host 0.0.0.0 # ещё и для устройств из се
|
|
|
33
33
|
|
|
34
34
|
```bash
|
|
35
35
|
axon code # новый код подключения устройства
|
|
36
|
+
axon doctor # осмотр: что настроено и что сломано
|
|
36
37
|
axon status # запущено ли и где
|
|
37
38
|
axon secret set provider.anthropic.apiKey sk-… # ключ провайдера
|
|
38
39
|
axon devices # подключённые устройства
|
package/dist/cli.js
CHANGED
|
@@ -11726,7 +11726,7 @@ var WsSession = class {
|
|
|
11726
11726
|
};
|
|
11727
11727
|
|
|
11728
11728
|
// src/Daemon.ts
|
|
11729
|
-
var DAEMON_VERSION = true ? "2026.8.
|
|
11729
|
+
var DAEMON_VERSION = true ? "2026.8.29" : "0.0.0-dev";
|
|
11730
11730
|
var CORS_PATHS = /* @__PURE__ */ new Set(["/health", "/v1/pair"]);
|
|
11731
11731
|
var MAX_UPLOAD_BYTES = 64 * 1024 * 1024;
|
|
11732
11732
|
function isWildcard(host) {
|
|
@@ -12198,6 +12198,8 @@ async function main() {
|
|
|
12198
12198
|
return await status();
|
|
12199
12199
|
case "code":
|
|
12200
12200
|
return await code2(args);
|
|
12201
|
+
case "doctor":
|
|
12202
|
+
return await doctor();
|
|
12201
12203
|
case "stop":
|
|
12202
12204
|
return stop();
|
|
12203
12205
|
case "help":
|
|
@@ -12300,6 +12302,74 @@ async function code2(args) {
|
|
|
12300
12302
|
console.log(` \u043F\u0440\u0430\u0432\u0430: ${chatOnly ? "\u0442\u043E\u043B\u044C\u043A\u043E \u043F\u0435\u0440\u0435\u043F\u0438\u0441\u043A\u0430" : "\u043F\u043E\u043B\u043D\u044B\u0435"}`);
|
|
12301
12303
|
console.log(` \u0430\u0434\u0440\u0435\u0441 \u0434\u043B\u044F \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F: ${(record.reachable ?? [])[0] ?? record.url}`);
|
|
12302
12304
|
}
|
|
12305
|
+
async function doctor() {
|
|
12306
|
+
const config = resolveConfig();
|
|
12307
|
+
const record = readRecord();
|
|
12308
|
+
const running2 = record !== null && await alive(record.url);
|
|
12309
|
+
console.log(`Axon ${DAEMON_VERSION}`);
|
|
12310
|
+
console.log(` \u0434\u0430\u043D\u043D\u044B\u0435: ${config.dataDir}`);
|
|
12311
|
+
console.log("");
|
|
12312
|
+
const notes = [];
|
|
12313
|
+
const say = (ok2, text, hint) => {
|
|
12314
|
+
console.log(` ${ok2 === null ? "\xB7" : ok2 ? "\u2713" : "\u2717"} ${text}`);
|
|
12315
|
+
if (!ok2 && hint) notes.push(hint);
|
|
12316
|
+
};
|
|
12317
|
+
say(running2, running2 ? `\u044F\u0434\u0440\u043E \u043D\u0430 \u0441\u0432\u044F\u0437\u0438: ${record.url}` : "\u044F\u0434\u0440\u043E \u043D\u0435 \u0437\u0430\u043F\u0443\u0449\u0435\u043D\u043E", "axon start");
|
|
12318
|
+
if (record && !running2) {
|
|
12319
|
+
say(false, `\u0437\u0430\u043F\u0438\u0441\u044C \u0443\u043A\u0430\u0437\u044B\u0432\u0430\u0435\u0442 \u043D\u0430 ${record.url}, \u043D\u043E \u0442\u0430\u043C \u043D\u0435 \u043E\u0442\u0432\u0435\u0447\u0430\u044E\u0442`, "axon stop && axon start");
|
|
12320
|
+
}
|
|
12321
|
+
if (running2) {
|
|
12322
|
+
console.log("");
|
|
12323
|
+
console.log(" \u041E\u0441\u0442\u0430\u043B\u044C\u043D\u043E\u0435 \u043F\u0440\u043E\u0432\u0435\u0440\u044F\u0435\u0442\u0441\u044F \u043F\u043E \u0431\u0430\u0437\u0435 \u2014 \u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0435 \u044F\u0434\u0440\u043E: axon stop");
|
|
12324
|
+
return;
|
|
12325
|
+
}
|
|
12326
|
+
const runtime = createRuntime();
|
|
12327
|
+
try {
|
|
12328
|
+
const secrets = runtime.store.secrets.status();
|
|
12329
|
+
const broken = secrets.filter((secret2) => secret2.unreadable);
|
|
12330
|
+
say(
|
|
12331
|
+
secrets.length === 0 ? null : broken.length === 0,
|
|
12332
|
+
secrets.length === 0 ? "\u0441\u0435\u043A\u0440\u0435\u0442\u043E\u0432 \u043D\u0435\u0442" : broken.length === 0 ? `\u0441\u0435\u043A\u0440\u0435\u0442\u043E\u0432 ${secrets.length}, \u0432\u0441\u0435 \u0447\u0438\u0442\u0430\u044E\u0442\u0441\u044F` : `\u043D\u0435 \u0447\u0438\u0442\u0430\u044E\u0442\u0441\u044F: ${broken.map((secret2) => secret2.key).join(", ")}`,
|
|
12333
|
+
"\u0431\u0430\u0437\u0430 \u043F\u0440\u0438\u0435\u0445\u0430\u043B\u0430 \u0431\u0435\u0437 \u0444\u0430\u0439\u043B\u0430 secret.key \u2014 \u0432\u043F\u0438\u0448\u0438\u0442\u0435 \u043A\u043B\u044E\u0447\u0438 \u0437\u0430\u043D\u043E\u0432\u043E"
|
|
12334
|
+
);
|
|
12335
|
+
const active = String(runtime.store.settings.get("provider.active") ?? "anthropic");
|
|
12336
|
+
const providers = await runtime.providers.describe();
|
|
12337
|
+
const provider = providers.find((item) => item.id === active);
|
|
12338
|
+
say(
|
|
12339
|
+
Boolean(provider?.configured),
|
|
12340
|
+
provider ? `\u043F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440 ${provider.title}: ${provider.configured ? "\u0433\u043E\u0442\u043E\u0432" : "\u043D\u0435\u0442 \u043A\u043B\u044E\u0447\u0430"}` : `\u043F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440 ${active} \u043D\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043D \u044F\u0434\u0440\u0443`,
|
|
12341
|
+
`axon secret set provider.${active}.apiKey \u2026`
|
|
12342
|
+
);
|
|
12343
|
+
const devices2 = runtime.store.devices.list();
|
|
12344
|
+
say(devices2.length > 0, `\u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432 ${devices2.length}`, "axon code \u2014 \u0432\u044B\u0434\u0430\u0442\u044C \u043A\u043E\u0434 \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u044F");
|
|
12345
|
+
await runtime.startPlugins();
|
|
12346
|
+
const plugins = runtime.plugins.list();
|
|
12347
|
+
const failed = plugins.filter((plugin2) => plugin2.status === "failed");
|
|
12348
|
+
say(
|
|
12349
|
+
failed.length === 0,
|
|
12350
|
+
failed.length === 0 ? `\u043F\u043B\u0430\u0433\u0438\u043D\u043E\u0432 ${plugins.length}, \u0440\u0430\u0431\u043E\u0442\u0430\u044E\u0442 \u0432\u0441\u0435` : `\u043D\u0435 \u0440\u0430\u0431\u043E\u0442\u0430\u044E\u0442: ${failed.map((plugin2) => plugin2.id).join(", ")}`,
|
|
12351
|
+
failed.length > 0 ? `axon plugin logs ${failed[0].id}` : void 0
|
|
12352
|
+
);
|
|
12353
|
+
const catalog = await runtime.plugins.catalog();
|
|
12354
|
+
say(
|
|
12355
|
+
catalog.origin === "network",
|
|
12356
|
+
`\u043A\u0430\u0442\u0430\u043B\u043E\u0433: ${catalog.entries.length} \u0437\u0430\u043F\u0438\u0441\u0435\u0439, ${CATALOG_ORIGIN[catalog.origin]}`,
|
|
12357
|
+
"\u0441\u0435\u0442\u044C \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430 \u2014 \u0440\u0430\u0437\u0434\u0435\u043B \xAB\u041A\u0430\u0442\u0430\u043B\u043E\u0433\xBB \u043F\u043E\u043A\u0430\u0436\u0435\u0442 \u0441\u0442\u0430\u0440\u043E\u0435"
|
|
12358
|
+
);
|
|
12359
|
+
} finally {
|
|
12360
|
+
await runtime.close();
|
|
12361
|
+
}
|
|
12362
|
+
if (notes.length > 0) {
|
|
12363
|
+
console.log("");
|
|
12364
|
+
console.log(" \u0427\u0442\u043E \u0434\u0435\u043B\u0430\u0442\u044C:");
|
|
12365
|
+
for (const note of notes) console.log(` ${note}`);
|
|
12366
|
+
}
|
|
12367
|
+
}
|
|
12368
|
+
var CATALOG_ORIGIN = {
|
|
12369
|
+
network: "\u0441\u0432\u0435\u0436\u0438\u0439",
|
|
12370
|
+
cache: "\u0438\u0437 \u043A\u044D\u0448\u0430",
|
|
12371
|
+
bundled: "\u0438\u0437 \u0441\u0431\u043E\u0440\u043A\u0438"
|
|
12372
|
+
};
|
|
12303
12373
|
function logPath() {
|
|
12304
12374
|
return path19.join(resolveConfig().dataDir, "axon.log");
|
|
12305
12375
|
}
|
|
@@ -12597,6 +12667,7 @@ function usage() {
|
|
|
12597
12667
|
--foreground, -f \u043D\u0435 \u0443\u0445\u043E\u0434\u0438\u0442\u044C \u0432 \u0444\u043E\u043D (systemd, docker)
|
|
12598
12668
|
axon status \u0437\u0430\u043F\u0443\u0449\u0435\u043D\u043E \u043B\u0438 \u044F\u0434\u0440\u043E \u0438 \u0433\u0434\u0435
|
|
12599
12669
|
axon code [--chat] [--ttl 300] \u043D\u043E\u0432\u044B\u0439 \u043A\u043E\u0434 \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u044F \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432\u0430
|
|
12670
|
+
axon doctor \u043E\u0441\u043C\u043E\u0442\u0440: \u0447\u0442\u043E \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043D\u043E \u0438 \u0447\u0442\u043E \u0441\u043B\u043E\u043C\u0430\u043D\u043E
|
|
12600
12671
|
axon stop \u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u044F\u0434\u0440\u043E
|
|
12601
12672
|
axon secret list \u043A\u0430\u043A\u0438\u0435 \u0441\u0435\u043A\u0440\u0435\u0442\u044B \u0437\u0430\u0434\u0430\u043D\u044B
|
|
12602
12673
|
axon secret get <\u043A\u043B\u044E\u0447> \u043F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0441\u0435\u043A\u0440\u0435\u0442 \u0446\u0435\u043B\u0438\u043A\u043E\u043C
|
package/dist/index.js
CHANGED
|
@@ -11389,7 +11389,7 @@ var WsSession = class {
|
|
|
11389
11389
|
};
|
|
11390
11390
|
|
|
11391
11391
|
// src/Daemon.ts
|
|
11392
|
-
var DAEMON_VERSION = true ? "2026.8.
|
|
11392
|
+
var DAEMON_VERSION = true ? "2026.8.29" : "0.0.0-dev";
|
|
11393
11393
|
var CORS_PATHS = /* @__PURE__ */ new Set(["/health", "/v1/pair"]);
|
|
11394
11394
|
var MAX_UPLOAD_BYTES = 64 * 1024 * 1024;
|
|
11395
11395
|
function isWildcard(host) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@axon-assistant/core",
|
|
3
|
-
"version": "2026.8.
|
|
3
|
+
"version": "2026.8.29",
|
|
4
4
|
"comment:version": "Заглушка. Настоящий номер проставляется из git-тега при публикации: см. scripts/release-npm.mjs. Версия, которую правят руками, рано или поздно расходится с тем, что опубликовано.",
|
|
5
5
|
"description": "Ядро Axon: персональный AI-агент, который живёт на вашей машине",
|
|
6
6
|
"keywords": [
|