@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.
@@ -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 BYOAO version — updates skills, " +
454
- "commands, templates, and Obsidian config")
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. Detect vault
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
- printWarning("No BYOAO vault found. Run `byoao init` to create one.");
467
- process.exit(1);
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":"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"}
@@ -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":"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"}
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
- byoao_init_vault,
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
- if (event.type === "session.idle") {
39
- const suggestion = getIdleSuggestion();
40
- if (suggestion) {
41
- client.tui.showToast({
42
- body: {
43
- title: "BYOAO",
44
- message: suggestion,
45
- variant: "info",
46
- duration: 5000,
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;AAEhE,MAAM,WAAW,GAAW,KAAK,EAAE,GAAG,EAAE,EAAE;IACxC,kEAAkE;IAClE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IAEvB,OAAO;QACL,IAAI,EAAE;YACJ,gBAAgB;YAChB,gBAAgB;YAChB,iBAAiB;YACjB,uBAAuB;YACvB,kBAAkB;YAClB,kBAAkB;YAClB,qBAAqB;YACrB,kBAAkB;YAClB,eAAe;YACf,kBAAkB;YAClB,mBAAmB;YACnB,cAAc;SACf;QACD,oCAAoC,EAAE,mBAAmB;QACzD,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YACzB,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBAClC,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;gBACvC,IAAI,UAAU,EAAE,CAAC;oBACf,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;wBACnB,IAAI,EAAE;4BACJ,KAAK,EAAE,OAAO;4BACd,OAAO,EAAE,UAAU;4BACnB,OAAO,EAAE,MAAM;4BACf,QAAQ,EAAE,IAAI;yBACf;qBACF,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,WAAW,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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jayjiang/byoao",
3
- "version": "0.8.2",
3
+ "version": "0.8.4",
4
4
  "description": "Build Your Own AI OS — Obsidian + AI Agent",
5
5
  "type": "module",
6
6
  "engines": {