@jayjiang/byoao 0.8.2 → 0.8.4
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/dist/cli/cli-program.js +133 -8
- package/dist/cli/cli-program.js.map +1 -1
- package/dist/hooks/system-transform.js +5 -0
- package/dist/hooks/system-transform.js.map +1 -1
- package/dist/index.js +66 -27
- package/dist/index.js.map +1 -1
- package/dist/lib/__tests__/logger.test.js +156 -0
- package/dist/lib/__tests__/logger.test.js.map +1 -0
- package/dist/lib/logger.js +124 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/vault/__tests__/self-update.test.js +92 -0
- package/dist/vault/__tests__/self-update.test.js.map +1 -0
- package/dist/vault/self-update.js +64 -0
- package/dist/vault/self-update.js.map +1 -0
- package/package.json +1 -1
package/dist/cli/cli-program.js
CHANGED
|
@@ -12,8 +12,10 @@ import { createRequire } from "node:module";
|
|
|
12
12
|
import path from "node:path";
|
|
13
13
|
import os from "node:os";
|
|
14
14
|
import { upgradeVault } from "../vault/upgrade.js";
|
|
15
|
+
import { checkForCliUpdate, selfUpdateCli } from "../vault/self-update.js";
|
|
15
16
|
import { detectVaultContext, detectInitMode } from "../vault/vault-detect.js";
|
|
16
17
|
import { loadPreset } from "../vault/preset.js";
|
|
18
|
+
import { log, readLogs, exportLogs, clearLogs } from "../lib/logger.js";
|
|
17
19
|
const require = createRequire(import.meta.url);
|
|
18
20
|
const PKG_VERSION = require("../../package.json").version;
|
|
19
21
|
/**
|
|
@@ -450,21 +452,76 @@ program
|
|
|
450
452
|
program
|
|
451
453
|
.command("upgrade")
|
|
452
454
|
.argument("[path]", "Path to vault root (default: detect from current directory)")
|
|
453
|
-
.description("Upgrade vault infrastructure to the latest
|
|
454
|
-
"
|
|
455
|
-
.option("-y, --yes", "Skip confirmation prompt", false)
|
|
455
|
+
.description("Upgrade BYOAO CLI and vault infrastructure to the latest version")
|
|
456
|
+
.option("-y, --yes", "Skip confirmation prompts", false)
|
|
456
457
|
.option("--dry-run", "Show upgrade plan without executing", false)
|
|
457
458
|
.option("--force", "Run even if versions match or on downgrade", false)
|
|
459
|
+
.option("--skip-cli", "Skip CLI self-update, only upgrade vault", false)
|
|
458
460
|
.option("--preset <name>", "Override preset during bootstrap (ignored if manifest exists)")
|
|
459
461
|
.action(async (vaultArg, opts) => {
|
|
460
462
|
printLogo();
|
|
461
463
|
printVersion(PKG_VERSION);
|
|
462
|
-
// 1
|
|
464
|
+
// ── Phase 1: CLI self-update ──────────────────────────────────
|
|
465
|
+
let cliUpdated = false;
|
|
466
|
+
if (!opts.skipCli) {
|
|
467
|
+
printEvent("Checking CLI version");
|
|
468
|
+
const check = await checkForCliUpdate();
|
|
469
|
+
if (check.updateAvailable) {
|
|
470
|
+
printEventDetail(`Update available: v${check.current} → v${check.latest}`);
|
|
471
|
+
if (opts.dryRun) {
|
|
472
|
+
printEventDetail("(dry-run: skipping CLI update)");
|
|
473
|
+
}
|
|
474
|
+
else {
|
|
475
|
+
// Confirm CLI update
|
|
476
|
+
let confirmed = opts.yes;
|
|
477
|
+
if (!confirmed && process.stdout.isTTY) {
|
|
478
|
+
try {
|
|
479
|
+
const { default: inquirer } = await import("inquirer");
|
|
480
|
+
const { proceed } = await inquirer.prompt([{
|
|
481
|
+
type: "confirm",
|
|
482
|
+
name: "proceed",
|
|
483
|
+
message: "Update CLI?",
|
|
484
|
+
default: true,
|
|
485
|
+
}]);
|
|
486
|
+
confirmed = proceed;
|
|
487
|
+
}
|
|
488
|
+
catch {
|
|
489
|
+
confirmed = true;
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
else if (!confirmed) {
|
|
493
|
+
confirmed = true;
|
|
494
|
+
}
|
|
495
|
+
if (confirmed) {
|
|
496
|
+
const spinner = startSpinner(`Updating CLI to v${check.latest}...`);
|
|
497
|
+
const updateResult = await selfUpdateCli(check.latest);
|
|
498
|
+
if (updateResult.success) {
|
|
499
|
+
spinner.stop(`CLI updated to v${check.latest}`);
|
|
500
|
+
printEventCheck(`CLI updated to v${check.latest}`);
|
|
501
|
+
console.log();
|
|
502
|
+
printEventDone("Run `byoao upgrade` again to upgrade vault content.");
|
|
503
|
+
process.exit(0);
|
|
504
|
+
}
|
|
505
|
+
else {
|
|
506
|
+
spinner.stop("CLI update failed");
|
|
507
|
+
printWarning(updateResult.error);
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
else {
|
|
513
|
+
printEventCheck(`CLI is up to date (v${check.current})`);
|
|
514
|
+
}
|
|
515
|
+
console.log();
|
|
516
|
+
}
|
|
517
|
+
// ── Phase 2: Vault upgrade ────────────────────────────────────
|
|
463
518
|
const targetPath = vaultArg ?? process.cwd();
|
|
464
519
|
const vaultRoot = detectVaultContext(targetPath);
|
|
465
520
|
if (!vaultRoot) {
|
|
466
|
-
|
|
467
|
-
|
|
521
|
+
if (!cliUpdated) {
|
|
522
|
+
printWarning("No BYOAO vault found. Run `byoao init` to create one.");
|
|
523
|
+
}
|
|
524
|
+
return;
|
|
468
525
|
}
|
|
469
526
|
printEvent("Upgrading vault");
|
|
470
527
|
printEventDetail(`Vault: ${vaultRoot}`);
|
|
@@ -501,14 +558,14 @@ program
|
|
|
501
558
|
printEventDetail(`${total} changes (${preview.added.length} add, ${preview.updated.length} update, ${preview.deprecated.length} deprecated)`);
|
|
502
559
|
if (opts.dryRun)
|
|
503
560
|
return;
|
|
504
|
-
// Confirm
|
|
561
|
+
// Confirm vault upgrade
|
|
505
562
|
if (!opts.yes && process.stdout.isTTY) {
|
|
506
563
|
try {
|
|
507
564
|
const { default: inquirer } = await import("inquirer");
|
|
508
565
|
const { proceed } = await inquirer.prompt([{
|
|
509
566
|
type: "confirm",
|
|
510
567
|
name: "proceed",
|
|
511
|
-
message: "Proceed with upgrade?",
|
|
568
|
+
message: "Proceed with vault upgrade?",
|
|
512
569
|
default: true,
|
|
513
570
|
}]);
|
|
514
571
|
if (!proceed) {
|
|
@@ -547,6 +604,9 @@ program
|
|
|
547
604
|
}
|
|
548
605
|
catch (err) {
|
|
549
606
|
const msg = err instanceof Error ? err.message : String(err);
|
|
607
|
+
void log("error", "cli:upgrade", msg, {
|
|
608
|
+
error: err instanceof Error ? err : undefined,
|
|
609
|
+
}).catch(() => { });
|
|
550
610
|
printWarning(msg);
|
|
551
611
|
process.exit(1);
|
|
552
612
|
}
|
|
@@ -562,5 +622,70 @@ function getCategoryLabel(filePath) {
|
|
|
562
622
|
return "templates";
|
|
563
623
|
return "other";
|
|
564
624
|
}
|
|
625
|
+
// ── byoao logs ──────────────────────────────────────────────────
|
|
626
|
+
program
|
|
627
|
+
.command("logs")
|
|
628
|
+
.description("View and manage BYOAO error logs")
|
|
629
|
+
.option("--tail <n>", "Show the most recent N entries", "20")
|
|
630
|
+
.option("--export <path>", "Export logs to a file")
|
|
631
|
+
.option("--clear", "Clear all logs")
|
|
632
|
+
.option("--json", "Output raw JSON format")
|
|
633
|
+
.action(async (opts) => {
|
|
634
|
+
if (opts.clear) {
|
|
635
|
+
await clearLogs();
|
|
636
|
+
console.log("Logs cleared.");
|
|
637
|
+
return;
|
|
638
|
+
}
|
|
639
|
+
if (opts.export) {
|
|
640
|
+
const raw = await exportLogs();
|
|
641
|
+
if (!raw) {
|
|
642
|
+
console.log("No logs to export.");
|
|
643
|
+
return;
|
|
644
|
+
}
|
|
645
|
+
const header = [
|
|
646
|
+
"BYOAO Error Log Export",
|
|
647
|
+
`Generated: ${new Date().toISOString()}`,
|
|
648
|
+
`BYOAO Version: ${PKG_VERSION}`,
|
|
649
|
+
`Node Version: ${process.version}`,
|
|
650
|
+
`OS: ${process.platform} ${process.arch}`,
|
|
651
|
+
"━".repeat(40),
|
|
652
|
+
"",
|
|
653
|
+
].join("\n");
|
|
654
|
+
const { writeFile } = await import("node:fs/promises");
|
|
655
|
+
const outPath = (await import("node:path")).default.resolve(opts.export);
|
|
656
|
+
await writeFile(outPath, header + raw);
|
|
657
|
+
const lineCount = raw.trim().split("\n").length;
|
|
658
|
+
console.log(`Exported to ${outPath} (${lineCount} entries)`);
|
|
659
|
+
console.log("Warning: Please review the file before sharing to ensure it contains no sensitive information.");
|
|
660
|
+
return;
|
|
661
|
+
}
|
|
662
|
+
const limit = parseInt(opts.tail, 10) || 20;
|
|
663
|
+
const entries = await readLogs(limit);
|
|
664
|
+
if (entries.length === 0) {
|
|
665
|
+
console.log("No log entries found.");
|
|
666
|
+
return;
|
|
667
|
+
}
|
|
668
|
+
if (opts.json) {
|
|
669
|
+
for (const entry of entries) {
|
|
670
|
+
console.log(JSON.stringify(entry));
|
|
671
|
+
}
|
|
672
|
+
return;
|
|
673
|
+
}
|
|
674
|
+
console.log(`\nBYOAO Error Log (recent ${entries.length} entries)`);
|
|
675
|
+
console.log("━".repeat(40));
|
|
676
|
+
for (const entry of entries) {
|
|
677
|
+
const time = entry.ts.replace("T", " ").replace(/\.\d+Z$/, "");
|
|
678
|
+
const level = entry.level.toUpperCase().padEnd(5);
|
|
679
|
+
console.log(`\n[${time}] ${level} ${entry.source}`);
|
|
680
|
+
console.log(` ${entry.message}`);
|
|
681
|
+
if (entry.context) {
|
|
682
|
+
for (const [k, v] of Object.entries(entry.context)) {
|
|
683
|
+
console.log(` ${k}: ${v}`);
|
|
684
|
+
}
|
|
685
|
+
}
|
|
686
|
+
}
|
|
687
|
+
console.log("\n" + "━".repeat(40));
|
|
688
|
+
console.log(`${entries.length} entries | Log file: ~/.byoao/logs/error.log`);
|
|
689
|
+
});
|
|
565
690
|
program.parse();
|
|
566
691
|
//# sourceMappingURL=cli-program.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-program.js","sourceRoot":"","sources":["../../src/cli/cli-program.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli-program.js","sourceRoot":"","sources":["../../src/cli/cli-program.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC7I,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAExE,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,WAAW,GAAY,OAAO,CAAC,oBAAoB,CAA6B,CAAC,OAAiB,CAAC;AAEzG;;;;GAIG;AACH,SAAS,eAAe;IACtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;YACjD,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE;SACxB,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACrB,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CACV,8EAA8E;IAC9E,gBAAgB;IAChB,6DAA6D;IAC7D,+DAA+D;IAC/D,kDAAkD;IAClD,yDAAyD,CAC1D;KACA,OAAO,CAAC,WAAW,CAAC,CAAC;AAExB,oEAAoE;AACpE,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CACV,iFAAiF;IACjF,oEAAoE,CACrE;KACA,MAAM,CAAC,cAAc,EAAE,kDAAkD,EAAE,KAAK,CAAC;KACjF,MAAM,CAAC,WAAW,EAAE,wCAAwC,EAAE,KAAK,CAAC;KACpE,MAAM,CAAC,aAAa,EAAE,iCAAiC,CAAC;KACxD,MAAM,CAAC,sBAAsB,EAAE,gDAAgD,CAAC;KAChF,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,SAAS,EAAE,CAAC;IACZ,YAAY,CAAC,WAAW,CAAC,CAAC;IAE1B,IAAI,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;IAChC,IAAI,aAAa,GAAG,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC;IAE1C,+CAA+C;IAC/C,IAAI,CAAC,IAAI,CAAC,GAAG;QAAE,IAAI,CAAC;YAClB,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;YACvD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBACpC;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,mBAAmB;oBAC5B,OAAO,EAAE;wBACP,EAAE,IAAI,EAAE,uBAAuB,EAAE,KAAK,EAAE,QAAQ,EAAE;wBAClD,EAAE,IAAI,EAAE,kCAAkC,EAAE,KAAK,EAAE,SAAS,EAAE;qBAC/D;oBACD,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;iBAC9C;gBACD;oBACE,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,kEAAkE;oBAC3E,OAAO,EAAE,IAAI;iBACd;aACF,CAAC,CAAC;YAEH,aAAa,GAAG,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC;YAC9C,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,yCAAyC;QAC3C,CAAC;IAED,MAAM,OAAO,CACX;QACE,MAAM,EAAE,aAAa;QACrB,aAAa;QACb,UAAU,EAAE,IAAI,CAAC,UAAU;KAC5B,EACD,CAAC,IAAI,CAAC,GAAG,CACV,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,oEAAoE;AACpE,OAAO;KACJ,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CACV,gFAAgF;IAChF,8DAA8D,CAC/D;KACA,MAAM,CAAC,cAAc,EAAE,8BAA8B,EAAE,KAAK,CAAC;KAC7D,MAAM,CAAC,WAAW,EAAE,0BAA0B,EAAE,KAAK,CAAC;KACtD,MAAM,CAAC,sBAAsB,EAAE,gDAAgD,CAAC;KAChF,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACtC,IAAI,CAAC;YACH,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;YACvD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;oBACzC,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,+DAA+D;oBACxE,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC,CAAC;YACJ,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBAC1B,OAAO;YACT,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,mCAAmC;QACrC,CAAC;IACH,CAAC;IAED,MAAM,SAAS,CAAC;QACd,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,UAAU,EAAE,IAAI,CAAC,UAAU;KAC5B,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEL,oEAAoE;AACpE,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CACV,iEAAiE;IACjE,iEAAiE;IACjE,yCAAyC,CAC1C;KACA,MAAM,CAAC,aAAa,EAAE,gDAAgD,CAAC;KACvE,MAAM,CAAC,eAAe,EAAE,0DAA0D,CAAC;KACnF,MAAM,CAAC,eAAe,EAAE,4DAA4D,CAAC;KACrF,MAAM,CAAC,eAAe,EAAE,8CAA8C,CAAC;KACvE,MAAM,CAAC,iBAAiB,EAAE,4EAA4E,CAAC;KACvG,MAAM,CAAC,mBAAmB,EAAE,0EAA0E,CAAC;KACvG,MAAM,CAAC,oBAAoB,EAAE,6BAA6B,CAAC;KAC3D,MAAM,CAAC,uBAAuB,EAAE,uCAAuC,CAAC;KACxE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,uBAAuB;IACvB,MAAM,cAAc,GAAG,aAAa,EAAE,CAAC;IACvC,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IACrB,IAAI,SAAS,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;IAChC,IAAI,SAAS,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;IACvC,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC;IAC1C,IAAI,OAAO,GAAqC,EAAE,CAAC;IACnD,IAAI,OAAO,GAAa,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;IAC3C,IAAI,YAAY,GAAG,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;IAEzC,8DAA8D;IAC9D,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;YAEvD,sCAAsC;YACtC,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC;YAClD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAEjG,IAAI,QAAQ,KAAK,UAAU,IAAI,QAAQ,KAAK,gBAAgB,EAAE,CAAC;gBAC7D,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;gBACtD,MAAM,SAAS,GAAG,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;qBAChG,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;gBAEnD,UAAU,CAAC,4CAA4C,CAAC,CAAC;gBACzD,OAAO,CAAC,GAAG,EAAE,CAAC;gBAEd,IAAI,QAAQ,KAAK,gBAAgB,EAAE,CAAC;oBAClC,gBAAgB,CAAC,wEAAwE,CAAC,CAAC;gBAC7F,CAAC;gBAED,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;wBAC9C,IAAI,EAAE,SAAS;wBACf,IAAI,EAAE,cAAc;wBACpB,OAAO,EAAE,YAAY,SAAS,0DAA0D;wBACxF,OAAO,EAAE,IAAI;qBACd,CAAC,CAAC,CAAC;gBACJ,IAAI,CAAC,YAAY,EAAE,CAAC;oBAClB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;oBAC1B,OAAO;gBACT,CAAC;gBACD,SAAS,GAAG,YAAY,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,+BAA+B,CAAC,CAAC;gBAC5C,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,CAAC;YAED,eAAe;YACf,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;oBAC1C,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,YAAY;oBACrB,QAAQ,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,uBAAuB;iBACnE,CAAC,CAAC,CAAC;YACJ,SAAS,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;YAE5B,yBAAyB;YACzB,MAAM,aAAa,GAAG,SAAS;gBAC7B,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAC1B,CAAC,CAAC,GAAG,SAAS,OAAO,CAAC;YACxB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;oBAC/C,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,eAAe;oBACrB,OAAO,EAAE,sBAAsB;oBAC/B,OAAO,EAAE,aAAa;oBACtB,QAAQ,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB;iBAC9D,CAAC,CAAC,CAAC;YACJ,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC;YAE9B,mDAAmD;YACnD,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;gBACjE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;wBAC5C,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,YAAY;wBAClB,OAAO,EAAE,gBAAgB;wBACzB,OAAO,EAAE;4BACP,EAAE,IAAI,EAAE,gBAAgB,WAAW,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE;4BAC1D,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,QAAQ,EAAE;yBAChD;qBACF,CAAC,CAAC,CAAC;gBACJ,SAAS,GAAG,WAAW,CAAC;gBACxB,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;oBAC5B,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;4BAC5C,IAAI,EAAE,OAAO;4BACb,IAAI,EAAE,YAAY;4BAClB,OAAO,EAAE,cAAc;yBACxB,CAAC,CAAC,CAAC;oBACJ,SAAS,GAAG,UAAU,CAAC;gBACzB,CAAC;YACH,CAAC;YAED,0BAA0B;YAC1B,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;YAChE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;wBAChD,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,gBAAgB;wBACtB,OAAO,EAAE,+BAA+B;wBACxC,OAAO,EAAE;4BACP,EAAE,IAAI,EAAE,uCAAuC,EAAE,KAAK,EAAE,SAAS,EAAE;4BACnE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gCACnB,IAAI,EAAE,GAAG,CAAC,CAAC,WAAW,MAAM,CAAC,CAAC,WAAW,EAAE;gCAC3C,KAAK,EAAE,CAAC,CAAC,IAAI;6BACd,CAAC,CAAC;yBACJ;qBACF,CAAC,CAAC,CAAC;gBACJ,UAAU,GAAG,cAAc,CAAC;YAC9B,CAAC;YAED,4DAA4D;YAC5D,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC7B,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;gBACrD,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;gBACxD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC1B,MAAM,eAAe,GAA2B;wBAC9C,SAAS,EAAE,+BAA+B;wBAC1C,QAAQ,EAAE,mCAAmC;qBAC9C,CAAC;oBAEF,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;4BAC7C,IAAI,EAAE,UAAU;4BAChB,IAAI,EAAE,aAAa;4BACnB,OAAO,EAAE,wCAAwC;4BACjD,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;gCACnC,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,IAAI,IAAI;gCACnC,KAAK,EAAE,IAAI;gCACX,OAAO,EAAE,IAAI;6BACd,CAAC,CAAC;yBACJ,CAAC,CAAC,CAAC;oBAEJ,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,WAAuB,CAAC,CAAC;oBACrD,OAAO,GAAG,UAAU;yBACjB,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC;yBACrB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;oBAE5C,6EAA6E;oBAC7E,IAAI,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;wBAChC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;gCAC3C,IAAI,EAAE,OAAO;gCACb,IAAI,EAAE,WAAW;gCACjB,OAAO,EAAE,iBAAiB;gCAC1B,OAAO,EAAE,iBAAiB;6BAC3B,CAAC,CAAC,CAAC;wBACJ,YAAY,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;wBAChC,eAAe,CAAC,oCAAoC,YAAY,EAAE,CAAC,CAAC;wBACpE,gBAAgB,CAAC,qEAAqE,CAAC,CAAC;oBAC1F,CAAC;gBACH,CAAC;YACH,CAAC;YAED,gEAAgE;YAChE,IAAI,SAAS,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC1C,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC;YAC9F,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,wDAAwD;YACxD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;gBACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,uEAAuE;IACvE,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,SAAS,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC;IAC3C,CAAC;IAED,SAAS,GAAG,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IAEtE,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC;IAE5C,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC;QACrC,MAAM;QACN,SAAS;QACT,SAAS;QACT,OAAO;QACP,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,UAAU;QAClB,QAAQ,EAAE,WAAW;QACrB,YAAY;QACZ,OAAO;KACR,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,YAAY,CAAC,4BAA4B,MAAM,GAAG,CAAC,CAAC;IACpE,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;IACzC,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACrC,eAAe,CAAC,SAAS,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IAC7C,eAAe,CAAC,UAAU,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;IACjD,eAAe,CAAC,cAAc,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACzD,eAAe,CAAC,gBAAgB,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IAE7D,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,cAAc,CAAC,wBAAwB,CAAC,CAAC;QACzC,IAAI,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;gBACjD,eAAe,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC;gBACnD,gBAAgB,CAAC,6BAA6B,IAAI,EAAE,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QACD,eAAe,CAAC,WAAW,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,cAAc,CAAC,4BAA4B,CAAC,CAAC;QAC7C,IAAI,MAAM,CAAC,aAAa,CAAC,kBAAkB,EAAE,CAAC;YAC5C,eAAe,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;aAAM,CAAC;YACN,gBAAgB,CAAC,yBAAyB,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;gBACrD,eAAe,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;gBACvD,gBAAgB,CAAC,gCAAgC,IAAI,EAAE,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;gBAC9C,YAAY,CAAC,GAAG,GAAG,CAAC,QAAQ,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QACD,IAAI,cAAc,CAAC,OAAO,IAAI,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3E,YAAY,CAAC,6FAA6F,CAAC,CAAC;QAC9G,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,cAAc,CAAC,2BAA2B,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC5E,IAAI,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;YACtC,eAAe,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,MAAM,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC;YACxC,gBAAgB,CAAC,0DAA0D,CAAC,CAAC;QAC/E,CAAC;QACD,IAAI,MAAM,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;YACvC,eAAe,CAAC,gBAAgB,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,MAAM,CAAC,cAAc,CAAC,gBAAgB,EAAE,CAAC;YAC3C,gBAAgB,CAAC,0CAA0C,CAAC,CAAC;QAC/D,CAAC;QACD,eAAe,CAAC,WAAW,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,8DAA8D;IAC9D,IAAI,SAAS,GAAG,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC;IAC3C,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACzD,IAAI,CAAC;YACH,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;YACvD,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;oBACxC,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,0EAA0E;oBACnF,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC,CAAC;YACJ,SAAS,GAAG,MAAM,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,gCAAgC;QAClC,CAAC;IACH,CAAC;IAED,IAAI,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACtC,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,UAAU,CAAC,yCAAyC,CAAC,CAAC;QACtD,MAAM,WAAW,GAAG,MAAM,eAAe,EAAE,CAAC;QAC5C,IAAI,WAAW,EAAE,CAAC;YAChB,cAAc,CAAC,yBAAyB,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,YAAY,CACV,2EAA2E;gBAC3E,qBAAqB,CACtB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,4DAA4D;IAC5D,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,cAAc,CAAC,2BAA2B,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAChC,gBAAgB,CAAC,2DAA2D,CAAC,CAAC;IAC9E,gBAAgB,CAAC,QAAQ,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IAC7C,gBAAgB,CAAC,kFAAkF,CAAC,CAAC;IACrG,gBAAgB,CAAC,mDAAmD,CAAC,CAAC;IACtE,gBAAgB,CAAC,uEAAuE,CAAC,CAAC;AAC5F,CAAC,CAAC,CAAC;AAEL,oEAAoE;AACpE,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CACV,2EAA2E;IAC3E,sDAAsD,CACvD;KACA,QAAQ,CAAC,WAAW,EAAE,uDAAuD,CAAC;KAC9E,MAAM,CAAC,KAAK,EAAE,SAAmB,EAAE,EAAE;IACpC,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;IAC9F,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,YAAY,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;IAEvC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAClC,MAAM,cAAc,GAAG,aAAa,EAAE,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC,CAAC;AACpD,CAAC,CAAC,CAAC;AAEL,mEAAmE;AACnE,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,+DAA+D,CAAC;KAC5E,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5C,CAAC,CAAC,CAAC;AAEL,oEAAoE;AACpE,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,QAAQ,CAAC,QAAQ,EAAE,6DAA6D,CAAC;KACjF,WAAW,CACV,kEAAkE,CACnE;KACA,MAAM,CAAC,WAAW,EAAE,2BAA2B,EAAE,KAAK,CAAC;KACvD,MAAM,CAAC,WAAW,EAAE,qCAAqC,EAAE,KAAK,CAAC;KACjE,MAAM,CAAC,SAAS,EAAE,4CAA4C,EAAE,KAAK,CAAC;KACtE,MAAM,CAAC,YAAY,EAAE,0CAA0C,EAAE,KAAK,CAAC;KACvE,MAAM,CAAC,iBAAiB,EAAE,+DAA+D,CAAC;KAC1F,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;IAC/B,SAAS,EAAE,CAAC;IACZ,YAAY,CAAC,WAAW,CAAC,CAAC;IAE1B,iEAAiE;IACjE,IAAI,UAAU,GAAG,KAAK,CAAC;IAEvB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAClB,UAAU,CAAC,sBAAsB,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,iBAAiB,EAAE,CAAC;QAExC,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;YAC1B,gBAAgB,CAAC,sBAAsB,KAAK,CAAC,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YAE3E,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,gBAAgB,CAAC,gCAAgC,CAAC,CAAC;YACrD,CAAC;iBAAM,CAAC;gBACN,qBAAqB;gBACrB,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC;gBACzB,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;oBACvC,IAAI,CAAC;wBACH,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;wBACvD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;gCACzC,IAAI,EAAE,SAAS;gCACf,IAAI,EAAE,SAAS;gCACf,OAAO,EAAE,aAAa;gCACtB,OAAO,EAAE,IAAI;6BACd,CAAC,CAAC,CAAC;wBACJ,SAAS,GAAG,OAAO,CAAC;oBACtB,CAAC;oBAAC,MAAM,CAAC;wBACP,SAAS,GAAG,IAAI,CAAC;oBACnB,CAAC;gBACH,CAAC;qBAAM,IAAI,CAAC,SAAS,EAAE,CAAC;oBACtB,SAAS,GAAG,IAAI,CAAC;gBACnB,CAAC;gBAED,IAAI,SAAS,EAAE,CAAC;oBACd,MAAM,OAAO,GAAG,YAAY,CAAC,oBAAoB,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;oBACpE,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBAEvD,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;wBACzB,OAAO,CAAC,IAAI,CAAC,mBAAmB,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;wBAChD,eAAe,CAAC,mBAAmB,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;wBACnD,OAAO,CAAC,GAAG,EAAE,CAAC;wBACd,cAAc,CAAC,qDAAqD,CAAC,CAAC;wBACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAClB,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;wBAClC,YAAY,CAAC,YAAY,CAAC,KAAM,CAAC,CAAC;oBACpC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,eAAe,CAAC,uBAAuB,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;QAC3D,CAAC;QAED,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,iEAAiE;IACjE,MAAM,UAAU,GAAG,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC7C,MAAM,SAAS,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAEjD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,YAAY,CAAC,uDAAuD,CAAC,CAAC;QACxE,CAAC;QACD,OAAO;IACT,CAAC;IAED,UAAU,CAAC,iBAAiB,CAAC,CAAC;IAC9B,gBAAgB,CAAC,UAAU,SAAS,EAAE,CAAC,CAAC;IAExC,IAAI,CAAC;QACH,qCAAqC;QACrC,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE;YAC5C,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CAAC;QAEH,mBAAmB;QACnB,IACE,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YAC1B,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YAC5B,OAAO,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAC/B,CAAC;YACD,cAAc,CAAC,mCAAmC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;YACvE,IAAI,CAAC,IAAI,CAAC,KAAK;gBAAE,OAAO;QAC1B,CAAC;QAED,gBAAgB,CAAC,SAAS,OAAO,CAAC,WAAW,OAAO,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,YAAY;QACZ,UAAU,CAAC,cAAc,CAAC,CAAC;QAC3B,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAC9B,gBAAgB,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC5E,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YAChC,gBAAgB,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC/E,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACnC,gBAAgB,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,mBAAmB,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACnF,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;QACxF,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,gBAAgB,CACd,GAAG,KAAK,aAAa,OAAO,CAAC,KAAK,CAAC,MAAM,SAAS,OAAO,CAAC,OAAO,CAAC,MAAM,YAAY,OAAO,CAAC,UAAU,CAAC,MAAM,cAAc,CAC5H,CAAC;QAEF,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QAExB,wBAAwB;QACxB,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACtC,IAAI,CAAC;gBACH,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;gBACvD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;wBACzC,IAAI,EAAE,SAAS;wBACf,IAAI,EAAE,SAAS;wBACf,OAAO,EAAE,6BAA6B;wBACtC,OAAO,EAAE,IAAI;qBACd,CAAC,CAAC,CAAC;gBACJ,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;oBAC1B,OAAO;gBACT,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,mCAAmC;YACrC,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,MAAM,OAAO,GAAG,YAAY,CAAC,oBAAoB,CAAC,CAAC;QAEnD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE;YAC3C,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CAAC;QAEH,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAEjC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,eAAe,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,cAAc,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,eAAe,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,gBAAgB,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAC9B,YAAY,CAAC,WAAW,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;YACjD,CAAC;YACD,YAAY,CAAC,sCAAsC,CAAC,CAAC;QACvD,CAAC;QACD,eAAe,CAAC,wBAAwB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,cAAc,CAAC,MAAM,CAAC,CAAC;QAEvB,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,KAAK,GAAG,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE;YACpC,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;SAC9C,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACnB,YAAY,CAAC,GAAG,CAAC,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,SAAS,gBAAgB,CAAC,QAAgB;IACxC,IAAI,QAAQ,CAAC,UAAU,CAAC,mBAAmB,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC9D,IAAI,QAAQ,CAAC,UAAU,CAAC,qBAAqB,CAAC;QAAE,OAAO,UAAU,CAAC;IAClE,IAAI,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,iBAAiB,CAAC;IAChE,IAAI,QAAQ,CAAC,UAAU,CAAC,sBAAsB,CAAC;QAAE,OAAO,WAAW,CAAC;IACpE,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,mEAAmE;AACnE,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,YAAY,EAAE,gCAAgC,EAAE,IAAI,CAAC;KAC5D,MAAM,CAAC,iBAAiB,EAAE,uBAAuB,CAAC;KAClD,MAAM,CAAC,SAAS,EAAE,gBAAgB,CAAC;KACnC,MAAM,CAAC,QAAQ,EAAE,wBAAwB,CAAC;KAC1C,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,SAAS,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC7B,OAAO;IACT,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;QAC/B,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YAClC,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG;YACb,wBAAwB;YACxB,cAAc,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE;YACxC,kBAAkB,WAAW,EAAE;YAC/B,iBAAiB,OAAO,CAAC,OAAO,EAAE;YAClC,OAAO,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE;YACzC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACd,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,CAAC,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzE,MAAM,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC;QAEvC,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,eAAe,OAAO,KAAK,SAAS,WAAW,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CACT,gGAAgG,CACjG,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;IAC5C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEtC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACrC,OAAO;IACT,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QACrC,CAAC;QACD,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,6BAA6B,OAAO,CAAC,MAAM,WAAW,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAC/D,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,KAAK,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAClC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBACnD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CACT,GAAG,OAAO,CAAC,MAAM,8CAA8C,CAChE,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -2,6 +2,7 @@ import fs from "fs-extra";
|
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { detectVaultContext } from "../vault/vault-detect.js";
|
|
4
4
|
import { readOpencodeConfig } from "../vault/opencode-config.js";
|
|
5
|
+
import { log } from "../lib/logger.js";
|
|
5
6
|
/**
|
|
6
7
|
* Read AGENT.md from the current working directory.
|
|
7
8
|
* Returns the content if found, null otherwise.
|
|
@@ -17,6 +18,9 @@ export function readAgentMdFromCwd() {
|
|
|
17
18
|
return fs.readFileSync(candidate, "utf-8");
|
|
18
19
|
}
|
|
19
20
|
catch {
|
|
21
|
+
void log("warn", "hook:system-transform", "Failed to read AGENT.md", {
|
|
22
|
+
context: { path: candidate },
|
|
23
|
+
}).catch(() => { });
|
|
20
24
|
return null;
|
|
21
25
|
}
|
|
22
26
|
}
|
|
@@ -97,6 +101,7 @@ async function buildMcpAuthGuidance() {
|
|
|
97
101
|
].filter(Boolean).join("\n");
|
|
98
102
|
}
|
|
99
103
|
catch {
|
|
104
|
+
void log("warn", "hook:system-transform", "Failed to build MCP auth guidance").catch(() => { });
|
|
100
105
|
return null;
|
|
101
106
|
}
|
|
102
107
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-transform.js","sourceRoot":"","sources":["../../src/hooks/system-transform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"system-transform.js","sourceRoot":"","sources":["../../src/hooks/system-transform.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -15,39 +15,78 @@ import { byoao_vault_upgrade } from "./tools/vault-upgrade.js";
|
|
|
15
15
|
import { byoao_mcp_auth } from "./tools/mcp-auth.js";
|
|
16
16
|
import { systemTransformHook } from "./hooks/system-transform.js";
|
|
17
17
|
import { getIdleSuggestion } from "./hooks/idle-suggestions.js";
|
|
18
|
+
import { log, sanitizeArgs } from "./lib/logger.js";
|
|
18
19
|
const BYOAOPlugin = async (ctx) => {
|
|
19
|
-
// Capture client from plugin context for use in hooks via closure
|
|
20
20
|
const { client } = ctx;
|
|
21
|
+
const tools = {
|
|
22
|
+
byoao_init_vault,
|
|
23
|
+
byoao_add_person,
|
|
24
|
+
byoao_add_project,
|
|
25
|
+
byoao_add_glossary_term,
|
|
26
|
+
byoao_vault_status,
|
|
27
|
+
byoao_vault_doctor,
|
|
28
|
+
byoao_switch_provider,
|
|
29
|
+
byoao_search_vault,
|
|
30
|
+
byoao_note_read,
|
|
31
|
+
byoao_graph_health,
|
|
32
|
+
byoao_vault_upgrade,
|
|
33
|
+
byoao_mcp_auth,
|
|
34
|
+
};
|
|
35
|
+
// Wrap each tool's execute with error logging
|
|
36
|
+
for (const [name, def] of Object.entries(tools)) {
|
|
37
|
+
const orig = def.execute;
|
|
38
|
+
def.execute = async (args, toolCtx) => {
|
|
39
|
+
try {
|
|
40
|
+
return await orig(args, toolCtx);
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
44
|
+
void log("error", `tool:${name}`, error.message, {
|
|
45
|
+
error,
|
|
46
|
+
context: sanitizeArgs(args),
|
|
47
|
+
}).catch(() => { });
|
|
48
|
+
throw err;
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
// Wrap system-transform hook with error logging
|
|
53
|
+
const wrappedHook = async (input, output) => {
|
|
54
|
+
try {
|
|
55
|
+
return await systemTransformHook(input, output);
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
59
|
+
void log("error", "hook:system-transform", error.message, {
|
|
60
|
+
error,
|
|
61
|
+
}).catch(() => { });
|
|
62
|
+
throw err;
|
|
63
|
+
}
|
|
64
|
+
};
|
|
21
65
|
return {
|
|
22
|
-
tool:
|
|
23
|
-
|
|
24
|
-
byoao_add_person,
|
|
25
|
-
byoao_add_project,
|
|
26
|
-
byoao_add_glossary_term,
|
|
27
|
-
byoao_vault_status,
|
|
28
|
-
byoao_vault_doctor,
|
|
29
|
-
byoao_switch_provider,
|
|
30
|
-
byoao_search_vault,
|
|
31
|
-
byoao_note_read,
|
|
32
|
-
byoao_graph_health,
|
|
33
|
-
byoao_vault_upgrade,
|
|
34
|
-
byoao_mcp_auth,
|
|
35
|
-
},
|
|
36
|
-
"experimental.chat.system.transform": systemTransformHook,
|
|
66
|
+
tool: tools,
|
|
67
|
+
"experimental.chat.system.transform": wrappedHook,
|
|
37
68
|
event: async ({ event }) => {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
69
|
+
try {
|
|
70
|
+
if (event.type === "session.idle") {
|
|
71
|
+
const suggestion = getIdleSuggestion();
|
|
72
|
+
if (suggestion) {
|
|
73
|
+
client.tui.showToast({
|
|
74
|
+
body: {
|
|
75
|
+
title: "BYOAO",
|
|
76
|
+
message: suggestion,
|
|
77
|
+
variant: "info",
|
|
78
|
+
duration: 5000,
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
}
|
|
49
82
|
}
|
|
50
83
|
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
86
|
+
void log("error", `event:${event.type}`, error.message, {
|
|
87
|
+
error,
|
|
88
|
+
}).catch(() => { });
|
|
89
|
+
}
|
|
51
90
|
},
|
|
52
91
|
};
|
|
53
92
|
};
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,sDAAsD;AACtD,kEAAkE;AAGlE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
|
|
2
|
+
import fs from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import os from "node:os";
|
|
5
|
+
let tmpDir;
|
|
6
|
+
let logModule;
|
|
7
|
+
beforeEach(async () => {
|
|
8
|
+
tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "byoao-logger-"));
|
|
9
|
+
vi.stubEnv("BYOAO_LOG_DIR", tmpDir);
|
|
10
|
+
vi.resetModules();
|
|
11
|
+
logModule = await import("../logger.js");
|
|
12
|
+
});
|
|
13
|
+
afterEach(async () => {
|
|
14
|
+
vi.unstubAllEnvs();
|
|
15
|
+
await fs.rm(tmpDir, { recursive: true, force: true });
|
|
16
|
+
});
|
|
17
|
+
describe("log", () => {
|
|
18
|
+
it("writes an entry and reads it back", async () => {
|
|
19
|
+
await logModule.log("error", "tool:vault-status", "something broke", {
|
|
20
|
+
error: new Error("boom"),
|
|
21
|
+
context: { vault: "/tmp/test" },
|
|
22
|
+
});
|
|
23
|
+
const entries = await logModule.readLogs();
|
|
24
|
+
expect(entries).toHaveLength(1);
|
|
25
|
+
expect(entries[0].level).toBe("error");
|
|
26
|
+
expect(entries[0].source).toBe("tool:vault-status");
|
|
27
|
+
expect(entries[0].message).toBe("something broke");
|
|
28
|
+
expect(entries[0].stack).toContain("boom");
|
|
29
|
+
expect(entries[0].context).toEqual({ vault: "/tmp/test" });
|
|
30
|
+
expect(entries[0].ts).toMatch(/^\d{4}-\d{2}-\d{2}T/);
|
|
31
|
+
});
|
|
32
|
+
it("produces valid JSONL", async () => {
|
|
33
|
+
await logModule.log("error", "tool:a", "first");
|
|
34
|
+
await logModule.log("warn", "hook:b", "second");
|
|
35
|
+
const raw = await fs.readFile(path.join(tmpDir, "error.log"), "utf-8");
|
|
36
|
+
const lines = raw.trim().split("\n");
|
|
37
|
+
expect(lines).toHaveLength(2);
|
|
38
|
+
for (const line of lines) {
|
|
39
|
+
expect(() => JSON.parse(line)).not.toThrow();
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
it("does not throw when logger itself fails", async () => {
|
|
43
|
+
// Make log dir read-only so appendFile fails
|
|
44
|
+
await fs.chmod(tmpDir, 0o444);
|
|
45
|
+
await expect(logModule.log("error", "test", "should not throw")).resolves.toBeUndefined();
|
|
46
|
+
// Restore permissions for cleanup
|
|
47
|
+
await fs.chmod(tmpDir, 0o755);
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
describe("readLogs", () => {
|
|
51
|
+
it("returns the most recent N entries", async () => {
|
|
52
|
+
for (let i = 0; i < 10; i++) {
|
|
53
|
+
await logModule.log("error", "test", `msg-${i}`);
|
|
54
|
+
}
|
|
55
|
+
const entries = await logModule.readLogs(3);
|
|
56
|
+
expect(entries).toHaveLength(3);
|
|
57
|
+
expect(entries[0].message).toBe("msg-7");
|
|
58
|
+
expect(entries[2].message).toBe("msg-9");
|
|
59
|
+
});
|
|
60
|
+
it("returns empty array when no log file exists", async () => {
|
|
61
|
+
const entries = await logModule.readLogs();
|
|
62
|
+
expect(entries).toEqual([]);
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
describe("clearLogs", () => {
|
|
66
|
+
it("removes all log entries", async () => {
|
|
67
|
+
await logModule.log("error", "test", "hello");
|
|
68
|
+
await logModule.clearLogs();
|
|
69
|
+
const entries = await logModule.readLogs();
|
|
70
|
+
expect(entries).toEqual([]);
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
describe("exportLogs", () => {
|
|
74
|
+
it("returns raw log content as string", async () => {
|
|
75
|
+
await logModule.log("error", "test", "export-me");
|
|
76
|
+
const exported = await logModule.exportLogs();
|
|
77
|
+
expect(exported).toContain("export-me");
|
|
78
|
+
expect(exported).toContain('"level":"error"');
|
|
79
|
+
});
|
|
80
|
+
it("returns empty string when no logs exist", async () => {
|
|
81
|
+
const exported = await logModule.exportLogs();
|
|
82
|
+
expect(exported).toBe("");
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
describe("rotation", () => {
|
|
86
|
+
it("rotates when file exceeds max size", async () => {
|
|
87
|
+
// Write enough data to exceed 512 KB
|
|
88
|
+
const bigMessage = "x".repeat(1024);
|
|
89
|
+
for (let i = 0; i < 520; i++) {
|
|
90
|
+
await logModule.log("error", "test", bigMessage);
|
|
91
|
+
}
|
|
92
|
+
const rotatedPath = path.join(tmpDir, "error.log.1");
|
|
93
|
+
const rotatedExists = await fs
|
|
94
|
+
.access(rotatedPath)
|
|
95
|
+
.then(() => true)
|
|
96
|
+
.catch(() => false);
|
|
97
|
+
expect(rotatedExists).toBe(true);
|
|
98
|
+
// Current log file should be smaller than max
|
|
99
|
+
const currentStat = await fs.stat(path.join(tmpDir, "error.log"));
|
|
100
|
+
expect(currentStat.size).toBeLessThan(512 * 1024);
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
describe("concurrent writes", () => {
|
|
104
|
+
it("produces valid JSONL under concurrent writes", async () => {
|
|
105
|
+
const promises = Array.from({ length: 20 }, (_, i) => logModule.log("error", "test", `concurrent-${i}`));
|
|
106
|
+
await Promise.all(promises);
|
|
107
|
+
const raw = await fs.readFile(path.join(tmpDir, "error.log"), "utf-8");
|
|
108
|
+
const lines = raw.trim().split("\n");
|
|
109
|
+
expect(lines).toHaveLength(20);
|
|
110
|
+
for (const line of lines) {
|
|
111
|
+
expect(() => JSON.parse(line)).not.toThrow();
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
describe("sanitizeArgs", () => {
|
|
116
|
+
it("keeps safe fields and strips sensitive ones", () => {
|
|
117
|
+
const result = logModule.sanitizeArgs({
|
|
118
|
+
vaultPath: "/tmp/vault",
|
|
119
|
+
name: "Alice",
|
|
120
|
+
query: "secret search",
|
|
121
|
+
content: "note body text",
|
|
122
|
+
definition: "glossary def",
|
|
123
|
+
provider: "gemini",
|
|
124
|
+
});
|
|
125
|
+
expect(result).toEqual({
|
|
126
|
+
vaultPath: "/tmp/vault",
|
|
127
|
+
name: "Alice",
|
|
128
|
+
provider: "gemini",
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
it("returns empty object for non-object input", () => {
|
|
132
|
+
expect(logModule.sanitizeArgs(null)).toEqual({});
|
|
133
|
+
expect(logModule.sanitizeArgs("string")).toEqual({});
|
|
134
|
+
expect(logModule.sanitizeArgs(42)).toEqual({});
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
describe("sanitizeStack", () => {
|
|
138
|
+
it("keeps stack frames and strips content lines", () => {
|
|
139
|
+
const stack = [
|
|
140
|
+
"YAMLException: bad indentation",
|
|
141
|
+
" secret-project: classified",
|
|
142
|
+
" ^",
|
|
143
|
+
" at Parser.parse (gray-matter/index.js:10:5)",
|
|
144
|
+
" at Object.execute (src/tools/foo.ts:20:3)",
|
|
145
|
+
].join("\n");
|
|
146
|
+
const result = logModule.sanitizeStack(stack);
|
|
147
|
+
expect(result).toContain("YAMLException: bad indentation");
|
|
148
|
+
expect(result).toContain("at Parser.parse");
|
|
149
|
+
expect(result).not.toContain("secret-project");
|
|
150
|
+
expect(result).not.toContain(" ^");
|
|
151
|
+
});
|
|
152
|
+
it("returns undefined for undefined input", () => {
|
|
153
|
+
expect(logModule.sanitizeStack(undefined)).toBeUndefined();
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
//# sourceMappingURL=logger.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/logger.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { appendFile, stat, rename, mkdir, readFile, unlink, } from "node:fs/promises";
|
|
4
|
+
// Allow override via env for testing
|
|
5
|
+
const LOG_DIR = process.env.BYOAO_LOG_DIR || join(homedir(), ".byoao", "logs");
|
|
6
|
+
const LOG_FILE = join(LOG_DIR, "error.log");
|
|
7
|
+
const MAX_LOG_SIZE = 512 * 1024; // 512 KB
|
|
8
|
+
const ROTATED_FILE = join(LOG_DIR, "error.log.1");
|
|
9
|
+
/** Fields safe to include in logs (paths and identifiers, not content). */
|
|
10
|
+
const SAFE_FIELDS = new Set([
|
|
11
|
+
"vaultPath",
|
|
12
|
+
"vault",
|
|
13
|
+
"path",
|
|
14
|
+
"filePath",
|
|
15
|
+
"configPath",
|
|
16
|
+
"name",
|
|
17
|
+
"role",
|
|
18
|
+
"category",
|
|
19
|
+
"preset",
|
|
20
|
+
"provider",
|
|
21
|
+
]);
|
|
22
|
+
/** Filter tool args to only include safe fields. */
|
|
23
|
+
export function sanitizeArgs(args) {
|
|
24
|
+
if (!args || typeof args !== "object")
|
|
25
|
+
return {};
|
|
26
|
+
const result = {};
|
|
27
|
+
for (const [key, value] of Object.entries(args)) {
|
|
28
|
+
if (SAFE_FIELDS.has(key) && typeof value === "string") {
|
|
29
|
+
result[key] = value;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
/** Strip content preview lines from stack traces, keep only frames. */
|
|
35
|
+
export function sanitizeStack(stack) {
|
|
36
|
+
if (!stack)
|
|
37
|
+
return undefined;
|
|
38
|
+
const lines = stack.split("\n");
|
|
39
|
+
return lines
|
|
40
|
+
.filter((line, i) => i === 0 || /^\s+at\s/.test(line))
|
|
41
|
+
.join("\n");
|
|
42
|
+
}
|
|
43
|
+
let dirEnsured = false;
|
|
44
|
+
async function ensureLogDir() {
|
|
45
|
+
if (dirEnsured)
|
|
46
|
+
return;
|
|
47
|
+
await mkdir(LOG_DIR, { recursive: true });
|
|
48
|
+
dirEnsured = true;
|
|
49
|
+
}
|
|
50
|
+
async function rotateIfNeeded() {
|
|
51
|
+
try {
|
|
52
|
+
const s = await stat(LOG_FILE);
|
|
53
|
+
if (s.size >= MAX_LOG_SIZE) {
|
|
54
|
+
await rename(LOG_FILE, ROTATED_FILE);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// File does not exist yet — no rotation needed
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// Promise chain serializes all writes to prevent JSONL corruption
|
|
62
|
+
let writeChain = Promise.resolve();
|
|
63
|
+
/** Write a single log entry. */
|
|
64
|
+
export async function log(level, source, message, options) {
|
|
65
|
+
writeChain = writeChain.then(async () => {
|
|
66
|
+
try {
|
|
67
|
+
await ensureLogDir();
|
|
68
|
+
await rotateIfNeeded();
|
|
69
|
+
const entry = {
|
|
70
|
+
ts: new Date().toISOString(),
|
|
71
|
+
level,
|
|
72
|
+
source,
|
|
73
|
+
message,
|
|
74
|
+
...(options?.error?.stack && {
|
|
75
|
+
stack: sanitizeStack(options.error.stack),
|
|
76
|
+
}),
|
|
77
|
+
...(options?.context && { context: options.context }),
|
|
78
|
+
};
|
|
79
|
+
await appendFile(LOG_FILE, JSON.stringify(entry) + "\n");
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
// Logger failure must never affect the main flow
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
return writeChain;
|
|
86
|
+
}
|
|
87
|
+
/** Read the most recent N log entries (default 50). */
|
|
88
|
+
export async function readLogs(limit = 50) {
|
|
89
|
+
try {
|
|
90
|
+
const content = await readFile(LOG_FILE, "utf-8");
|
|
91
|
+
const lines = content.trim().split("\n").filter(Boolean);
|
|
92
|
+
const entries = lines.map((line) => JSON.parse(line));
|
|
93
|
+
return entries.slice(-limit);
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return [];
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/** Return raw log file content as a string. */
|
|
100
|
+
export async function exportLogs() {
|
|
101
|
+
try {
|
|
102
|
+
return await readFile(LOG_FILE, "utf-8");
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
return "";
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/** Clear all log files. */
|
|
109
|
+
export async function clearLogs() {
|
|
110
|
+
try {
|
|
111
|
+
await unlink(LOG_FILE);
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
// File may not exist
|
|
115
|
+
}
|
|
116
|
+
try {
|
|
117
|
+
await unlink(ROTATED_FILE);
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
// File may not exist
|
|
121
|
+
}
|
|
122
|
+
dirEnsured = false;
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from "vitest";
|
|
2
|
+
import { execSync } from "node:child_process";
|
|
3
|
+
vi.mock("node:child_process", async (importOriginal) => {
|
|
4
|
+
const actual = await importOriginal();
|
|
5
|
+
return { ...actual, execSync: vi.fn() };
|
|
6
|
+
});
|
|
7
|
+
const mockedExecSync = vi.mocked(execSync);
|
|
8
|
+
describe("checkForCliUpdate", () => {
|
|
9
|
+
beforeEach(() => {
|
|
10
|
+
vi.resetModules();
|
|
11
|
+
mockedExecSync.mockReset();
|
|
12
|
+
});
|
|
13
|
+
it("detects update when registry has newer version", async () => {
|
|
14
|
+
mockedExecSync.mockReturnValue("9.9.9\n");
|
|
15
|
+
const { checkForCliUpdate } = await import("../self-update.js");
|
|
16
|
+
const result = await checkForCliUpdate();
|
|
17
|
+
expect(result.updateAvailable).toBe(true);
|
|
18
|
+
expect(result.latest).toBe("9.9.9");
|
|
19
|
+
expect(mockedExecSync).toHaveBeenCalledWith("npm view @jayjiang/byoao version", expect.objectContaining({ timeout: 5_000 }));
|
|
20
|
+
});
|
|
21
|
+
it("returns no update when versions match", async () => {
|
|
22
|
+
const { checkForCliUpdate } = await import("../self-update.js");
|
|
23
|
+
// First call to discover the current version
|
|
24
|
+
mockedExecSync.mockReturnValue("0.0.1\n");
|
|
25
|
+
const probe = await checkForCliUpdate();
|
|
26
|
+
// Now mock registry to return the same version as current
|
|
27
|
+
mockedExecSync.mockReturnValue(probe.current + "\n");
|
|
28
|
+
const result = await checkForCliUpdate();
|
|
29
|
+
expect(result.updateAvailable).toBe(false);
|
|
30
|
+
});
|
|
31
|
+
it("returns no update when current is higher (e.g. local dev)", async () => {
|
|
32
|
+
mockedExecSync.mockReturnValue("0.0.1\n");
|
|
33
|
+
const { checkForCliUpdate } = await import("../self-update.js");
|
|
34
|
+
const result = await checkForCliUpdate();
|
|
35
|
+
expect(result.updateAvailable).toBe(false);
|
|
36
|
+
});
|
|
37
|
+
it("returns no update on timeout", async () => {
|
|
38
|
+
mockedExecSync.mockImplementation(() => {
|
|
39
|
+
throw new Error("ETIMEDOUT");
|
|
40
|
+
});
|
|
41
|
+
const { checkForCliUpdate } = await import("../self-update.js");
|
|
42
|
+
const result = await checkForCliUpdate();
|
|
43
|
+
expect(result.updateAvailable).toBe(false);
|
|
44
|
+
});
|
|
45
|
+
it("returns no update on network error", async () => {
|
|
46
|
+
mockedExecSync.mockImplementation(() => {
|
|
47
|
+
throw new Error("ENOTFOUND");
|
|
48
|
+
});
|
|
49
|
+
const { checkForCliUpdate } = await import("../self-update.js");
|
|
50
|
+
const result = await checkForCliUpdate();
|
|
51
|
+
expect(result.updateAvailable).toBe(false);
|
|
52
|
+
});
|
|
53
|
+
it("returns no update on invalid version output", async () => {
|
|
54
|
+
mockedExecSync.mockReturnValue("not-a-version\n");
|
|
55
|
+
const { checkForCliUpdate } = await import("../self-update.js");
|
|
56
|
+
const result = await checkForCliUpdate();
|
|
57
|
+
expect(result.updateAvailable).toBe(false);
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
describe("selfUpdateCli", () => {
|
|
61
|
+
beforeEach(() => {
|
|
62
|
+
mockedExecSync.mockReset();
|
|
63
|
+
});
|
|
64
|
+
it("returns success when npm install succeeds", async () => {
|
|
65
|
+
mockedExecSync.mockReturnValue("");
|
|
66
|
+
const { selfUpdateCli } = await import("../self-update.js");
|
|
67
|
+
const result = await selfUpdateCli("1.0.0");
|
|
68
|
+
expect(result.success).toBe(true);
|
|
69
|
+
expect(mockedExecSync).toHaveBeenCalledWith("npm install -g @jayjiang/byoao@1.0.0", expect.anything());
|
|
70
|
+
});
|
|
71
|
+
it("returns permission error with sudo hint on EACCES", async () => {
|
|
72
|
+
mockedExecSync.mockImplementation(() => {
|
|
73
|
+
throw new Error("EACCES: permission denied");
|
|
74
|
+
});
|
|
75
|
+
const { selfUpdateCli } = await import("../self-update.js");
|
|
76
|
+
const result = await selfUpdateCli("1.0.0");
|
|
77
|
+
expect(result.success).toBe(false);
|
|
78
|
+
expect(result.error).toContain("sudo");
|
|
79
|
+
expect(result.error).toContain("npm install -g @jayjiang/byoao@1.0.0");
|
|
80
|
+
});
|
|
81
|
+
it("returns generic error with manual command on other failures", async () => {
|
|
82
|
+
mockedExecSync.mockImplementation(() => {
|
|
83
|
+
throw new Error("npm ERR! command not found");
|
|
84
|
+
});
|
|
85
|
+
const { selfUpdateCli } = await import("../self-update.js");
|
|
86
|
+
const result = await selfUpdateCli("1.0.0");
|
|
87
|
+
expect(result.success).toBe(false);
|
|
88
|
+
expect(result.error).toContain("npm install -g @jayjiang/byoao@1.0.0");
|
|
89
|
+
expect(result.error).toContain("command not found");
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
//# sourceMappingURL=self-update.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"self-update.test.js","sourceRoot":"","sources":["../../../src/vault/__tests__/self-update.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { execSync } from "node:child_process";
|
|
2
|
+
import { createRequire } from "node:module";
|
|
3
|
+
import semver from "semver";
|
|
4
|
+
const require = createRequire(import.meta.url);
|
|
5
|
+
const PKG_VERSION = require("../../package.json").version;
|
|
6
|
+
// ── Constants ───────────────────────────────────────────────────
|
|
7
|
+
const PACKAGE_NAME = "@jayjiang/byoao";
|
|
8
|
+
const REGISTRY_TIMEOUT_MS = 5_000;
|
|
9
|
+
/**
|
|
10
|
+
* Check npm registry for a newer version of the CLI.
|
|
11
|
+
* Uses `npm view` so it inherits the user's registry/proxy config.
|
|
12
|
+
* Returns updateAvailable=false on any failure (timeout, network, etc.).
|
|
13
|
+
*/
|
|
14
|
+
export async function checkForCliUpdate() {
|
|
15
|
+
const current = PKG_VERSION;
|
|
16
|
+
let latest;
|
|
17
|
+
try {
|
|
18
|
+
const raw = execSync(`npm view ${PACKAGE_NAME} version`, {
|
|
19
|
+
timeout: REGISTRY_TIMEOUT_MS,
|
|
20
|
+
encoding: "utf-8",
|
|
21
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
22
|
+
});
|
|
23
|
+
latest = raw.trim();
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return { current, latest: current, updateAvailable: false };
|
|
27
|
+
}
|
|
28
|
+
if (!semver.valid(latest)) {
|
|
29
|
+
return { current, latest: current, updateAvailable: false };
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
current,
|
|
33
|
+
latest,
|
|
34
|
+
updateAvailable: semver.lt(current, latest),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Install a specific version of the CLI globally via npm.
|
|
39
|
+
* Never runs sudo — on permission errors, returns the manual command.
|
|
40
|
+
*/
|
|
41
|
+
export async function selfUpdateCli(targetVersion) {
|
|
42
|
+
const installCmd = `npm install -g ${PACKAGE_NAME}@${targetVersion}`;
|
|
43
|
+
try {
|
|
44
|
+
execSync(installCmd, {
|
|
45
|
+
encoding: "utf-8",
|
|
46
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
47
|
+
});
|
|
48
|
+
return { success: true };
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
52
|
+
if (message.includes("EACCES") || message.includes("permission denied")) {
|
|
53
|
+
return {
|
|
54
|
+
success: false,
|
|
55
|
+
error: `Permission denied. Run manually:\n sudo ${installCmd}`,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
success: false,
|
|
60
|
+
error: `Update failed. Run manually:\n ${installCmd}\n\n${message}`,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=self-update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"self-update.js","sourceRoot":"","sources":["../../src/vault/self-update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,WAAW,GACf,OAAO,CAAC,oBAAoB,CAC7B,CAAC,OAAiB,CAAC;AAEpB,mEAAmE;AAEnE,MAAM,YAAY,GAAG,iBAAiB,CAAC;AACvC,MAAM,mBAAmB,GAAG,KAAK,CAAC;AAUlC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,OAAO,GAAG,WAAW,CAAC;IAC5B,IAAI,MAAc,CAAC;IAEnB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,QAAQ,CAAC,YAAY,YAAY,UAAU,EAAE;YACvD,OAAO,EAAE,mBAAmB;YAC5B,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC;IAC9D,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC;IAC9D,CAAC;IAED,OAAO;QACL,OAAO;QACP,MAAM;QACN,eAAe,EAAE,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;KAC5C,CAAC;AACJ,CAAC;AASD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,aAAqB;IAErB,MAAM,UAAU,GAAG,kBAAkB,YAAY,IAAI,aAAa,EAAE,CAAC;IAErE,IAAI,CAAC;QACH,QAAQ,CAAC,UAAU,EAAE;YACnB,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GACX,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAEnD,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACxE,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EACH,4CAA4C,UAAU,EAAE;aAC3D,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EACH,mCAAmC,UAAU,OAAO,OAAO,EAAE;SAChE,CAAC;IACJ,CAAC;AACH,CAAC"}
|