@onebrain-ai/cli 2.0.10 → 2.0.13

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.
Files changed (2) hide show
  1. package/dist/onebrain +44 -53
  2. package/package.json +1 -1
package/dist/onebrain CHANGED
@@ -9990,6 +9990,13 @@ function applyHooks(settings) {
9990
9990
  settings.hooks = {};
9991
9991
  const hooks = settings.hooks;
9992
9992
  const result = {};
9993
+ for (const [event, staleCmd] of Object.entries(STALE_HOOK_COMMANDS)) {
9994
+ if (!hooks[event])
9995
+ continue;
9996
+ hooks[event] = hooks[event].filter((group) => !group.hooks?.some((entry) => entry.command === staleCmd));
9997
+ if (hooks[event].length === 0)
9998
+ delete hooks[event];
9999
+ }
9993
10000
  for (const event of HOOK_EVENTS) {
9994
10001
  const cmd = HOOK_COMMANDS[event];
9995
10002
  if (!cmd)
@@ -10199,16 +10206,18 @@ async function registerHooksCommand(vaultDir, flags) {
10199
10206
  process.exit(1);
10200
10207
  }
10201
10208
  }
10202
- var HOOK_COMMANDS, HOOK_EVENTS, PERMISSIONS_TO_ADD, ONEBRAIN_MARKER = "# onebrain", PATH_EXPORT = 'export PATH="$HOME/.bun/bin:$HOME/.npm-global/bin:$PATH"', QMD_CMD = "onebrain qmd-reindex", QMD_MATCHER = "Write|Edit";
10209
+ var HOOK_COMMANDS, HOOK_EVENTS, STALE_HOOK_COMMANDS, PERMISSIONS_TO_ADD, ONEBRAIN_MARKER = "# onebrain", PATH_EXPORT = 'export PATH="$HOME/.bun/bin:$HOME/.npm-global/bin:$PATH"', QMD_CMD = "onebrain qmd-reindex", QMD_MATCHER = "Write|Edit";
10203
10210
  var init_register_hooks = __esm(() => {
10204
10211
  init_dist2();
10205
10212
  init_dist3();
10206
10213
  HOOK_COMMANDS = {
10207
10214
  Stop: "onebrain checkpoint stop",
10208
- PreCompact: "onebrain checkpoint precompact",
10209
10215
  PostCompact: "onebrain checkpoint postcompact"
10210
10216
  };
10211
- HOOK_EVENTS = ["Stop", "PreCompact", "PostCompact"];
10217
+ HOOK_EVENTS = ["Stop", "PostCompact"];
10218
+ STALE_HOOK_COMMANDS = {
10219
+ PreCompact: "onebrain checkpoint precompact"
10220
+ };
10212
10221
  PERMISSIONS_TO_ADD = [
10213
10222
  "Bash(onebrain *)",
10214
10223
  "Bash(bun install -g @onebrain-ai/cli*)",
@@ -10302,9 +10311,6 @@ async function loadVaultConfig(vaultRoot) {
10302
10311
  if (raw["runtime"] !== undefined) {
10303
10312
  config.runtime = raw["runtime"];
10304
10313
  }
10305
- if (raw["sandbox"] !== undefined) {
10306
- config.sandbox = raw["sandbox"];
10307
- }
10308
10314
  if (raw["stats"] !== undefined) {
10309
10315
  config.stats = raw["stats"];
10310
10316
  }
@@ -10605,21 +10611,6 @@ async function readMergedField(filePath) {
10605
10611
  return;
10606
10612
  }
10607
10613
  }
10608
- function checkSandbox(config) {
10609
- if (config.sandbox?.enabled === true) {
10610
- return {
10611
- check: "sandbox",
10612
- status: "ok",
10613
- message: "enabled"
10614
- };
10615
- }
10616
- return {
10617
- check: "sandbox",
10618
- status: "warn",
10619
- message: "disabled",
10620
- hint: "Set sandbox.enabled: true in vault.yml"
10621
- };
10622
- }
10623
10614
  // src/commands/doctor.ts
10624
10615
  async function runDoctor(opts = {}) {
10625
10616
  const vaultDir = opts.vaultDir ?? process.cwd();
@@ -10631,7 +10622,6 @@ async function runDoctor(opts = {}) {
10631
10622
  const checkQmdEmbeddingsFn = opts.checkQmdEmbeddingsFn ?? checkQmdEmbeddings;
10632
10623
  const checkVersionDriftFn = opts.checkVersionDriftFn ?? checkVersionDrift;
10633
10624
  const checkOrphanCheckpointsFn = opts.checkOrphanCheckpointsFn ?? checkOrphanCheckpoints;
10634
- const checkSandboxFn = opts.checkSandboxFn ?? checkSandbox;
10635
10625
  const vaultYmlResult = await checkVaultYmlFn(vaultDir);
10636
10626
  let config = {
10637
10627
  folders: {
@@ -10657,22 +10647,13 @@ async function runDoctor(opts = {}) {
10657
10647
  let qmdResult;
10658
10648
  let versionDriftResult;
10659
10649
  let orphanCheckpointsResult;
10660
- let sandboxResult;
10661
10650
  try {
10662
- [
10663
- foldersResult,
10664
- harnessResult,
10665
- qmdResult,
10666
- versionDriftResult,
10667
- orphanCheckpointsResult,
10668
- sandboxResult
10669
- ] = await Promise.all([
10651
+ [foldersResult, harnessResult, qmdResult, versionDriftResult, orphanCheckpointsResult] = await Promise.all([
10670
10652
  checkFoldersFn(vaultDir, config),
10671
10653
  checkHarnessBinaryFn(config),
10672
10654
  checkQmdEmbeddingsFn(config),
10673
10655
  checkVersionDriftFn(vaultDir, config),
10674
- checkOrphanCheckpointsFn(vaultDir, config),
10675
- checkSandboxFn(config)
10656
+ checkOrphanCheckpointsFn(vaultDir, config)
10676
10657
  ]);
10677
10658
  sp?.stop();
10678
10659
  } catch (err) {
@@ -10685,8 +10666,7 @@ async function runDoctor(opts = {}) {
10685
10666
  harnessResult,
10686
10667
  qmdResult,
10687
10668
  versionDriftResult,
10688
- orphanCheckpointsResult,
10689
- sandboxResult
10669
+ orphanCheckpointsResult
10690
10670
  ];
10691
10671
  const errorCount = results.filter((r2) => r2.status === "error").length;
10692
10672
  const warningCount = results.filter((r2) => r2.status === "warn").length;
@@ -10782,7 +10762,7 @@ init_dist3();
10782
10762
  import { mkdir as mkdir3, readFile as readFile3, rename as rename3, stat as stat3, writeFile as writeFile3 } from "node:fs/promises";
10783
10763
  import { homedir as homedir3 } from "node:os";
10784
10764
  import { dirname as dirname3, join as join5 } from "node:path";
10785
- var binaryVersion = "2.0.10";
10765
+ var binaryVersion = "2.0.13";
10786
10766
  var STANDARD_FOLDERS = [
10787
10767
  "00-inbox",
10788
10768
  "01-projects",
@@ -11206,13 +11186,6 @@ function handleStop(token, vaultRoot, now = Math.floor(Date.now() / 1000), tmpDi
11206
11186
  emitBlock(`${filename}${since}`);
11207
11187
  writeState(token, { count: 0, last_ts: now, last_stop_nn: nextNn }, tmpDir);
11208
11188
  }
11209
- function handlePrecompact(token, _vaultRoot, now = Math.floor(Date.now() / 1000), tmpDir = osTmpdir()) {
11210
- const state = readState(token, tmpDir);
11211
- if (state.last_ts > 0 && now - state.last_ts < PRECOMPACT_RECENCY) {
11212
- return;
11213
- }
11214
- writeState(token, { count: 0, last_ts: state.last_ts, last_stop_nn: state.last_stop_nn }, tmpDir);
11215
- }
11216
11189
  function handlePostcompact(token, _vaultRoot, now = Math.floor(Date.now() / 1000), tmpDir = osTmpdir()) {
11217
11190
  const state = readState(token, tmpDir);
11218
11191
  if (state.last_ts > 0 && now - state.last_ts < PRECOMPACT_RECENCY) {
@@ -11231,9 +11204,6 @@ async function checkpointCommand(mode, token, vaultRoot) {
11231
11204
  case "stop":
11232
11205
  handleStop(token, vaultRoot);
11233
11206
  break;
11234
- case "precompact":
11235
- handlePrecompact(token, vaultRoot);
11236
- break;
11237
11207
  case "postcompact":
11238
11208
  postcompactFallback(token, vaultRoot);
11239
11209
  break;
@@ -11348,9 +11318,9 @@ ${rest}`;
11348
11318
  }
11349
11319
  return { backfilled, skipped };
11350
11320
  }
11351
- async function migrateCommand(migrationName, cutoffDate) {
11321
+ async function migrateCommand(migrationName, cutoffDate, vaultDir) {
11352
11322
  try {
11353
- const vaultRoot = process.cwd();
11323
+ const vaultRoot = vaultDir ?? process.cwd();
11354
11324
  const config = await loadVaultConfig(vaultRoot);
11355
11325
  const logsFolder = join7(vaultRoot, config.folders.logs);
11356
11326
  if (migrationName === "backfill-recapped") {
@@ -11511,10 +11481,12 @@ import { homedir as homedir4 } from "node:os";
11511
11481
  import { dirname as dirname4, join as join9 } from "node:path";
11512
11482
  var HOOK_COMMANDS2 = {
11513
11483
  Stop: "onebrain checkpoint stop",
11514
- PreCompact: "onebrain checkpoint precompact",
11515
11484
  PostCompact: "onebrain checkpoint postcompact"
11516
11485
  };
11517
- var HOOK_EVENTS2 = ["Stop", "PreCompact", "PostCompact"];
11486
+ var HOOK_EVENTS2 = ["Stop", "PostCompact"];
11487
+ var STALE_HOOK_COMMANDS2 = {
11488
+ PreCompact: "onebrain checkpoint precompact"
11489
+ };
11518
11490
  var PERMISSIONS_TO_ADD2 = [
11519
11491
  "Bash(onebrain *)",
11520
11492
  "Bash(bun install -g @onebrain-ai/cli*)",
@@ -11556,6 +11528,13 @@ function applyHooks2(settings) {
11556
11528
  settings.hooks = {};
11557
11529
  const hooks = settings.hooks;
11558
11530
  const result = {};
11531
+ for (const [event, staleCmd] of Object.entries(STALE_HOOK_COMMANDS2)) {
11532
+ if (!hooks[event])
11533
+ continue;
11534
+ hooks[event] = hooks[event].filter((group) => !group.hooks?.some((entry) => entry.command === staleCmd));
11535
+ if (hooks[event].length === 0)
11536
+ delete hooks[event];
11537
+ }
11559
11538
  for (const event of HOOK_EVENTS2) {
11560
11539
  const cmd = HOOK_COMMANDS2[event];
11561
11540
  if (!cmd)
@@ -11803,6 +11782,18 @@ async function resolveSessionToken(tmpDir = osTmpdir2()) {
11803
11782
  if (stripped.length > 0)
11804
11783
  return stripped;
11805
11784
  }
11785
+ const tmuxPane = process.env["TMUX_PANE"];
11786
+ if (tmuxPane) {
11787
+ const stripped = tmuxPane.replace(/[^a-zA-Z0-9]/g, "").slice(0, 8);
11788
+ if (stripped.length > 0)
11789
+ return stripped;
11790
+ }
11791
+ const termSessionId = process.env["TERM_SESSION_ID"];
11792
+ if (termSessionId) {
11793
+ const stripped = termSessionId.replace(/[^a-zA-Z0-9]/g, "").slice(0, 8);
11794
+ if (stripped.length > 0)
11795
+ return stripped;
11796
+ }
11806
11797
  const ppid = process.ppid;
11807
11798
  if (ppid !== undefined && ppid > 1)
11808
11799
  return String(ppid);
@@ -12664,8 +12655,8 @@ async function updateCommand(opts = {}) {
12664
12655
  }
12665
12656
 
12666
12657
  // src/index.ts
12667
- var VERSION = "2.0.10";
12668
- var RELEASE_DATE = "2026-04-26";
12658
+ var VERSION = "2.0.13";
12659
+ var RELEASE_DATE = "2026-04-27";
12669
12660
  process.stdout.setDefaultEncoding("utf8");
12670
12661
  process.stderr.setDefaultEncoding("utf8");
12671
12662
  var VERSION_STRING = `OneBrain v${VERSION} \u2014 released ${RELEASE_DATE}`;
@@ -12717,7 +12708,7 @@ program2.command("session-init", { hidden: true }).description("Emit session tok
12717
12708
  program2.command("orphan-scan", { hidden: true }).description("Scan for orphaned checkpoint files in logs folder").argument("<logs_folder>", "path to logs folder").argument("<session_token>", "current session token to exclude").action(async (logsFolder, sessionToken) => {
12718
12709
  await orphanScanCommand(logsFolder, sessionToken);
12719
12710
  });
12720
- program2.command("checkpoint", { hidden: true }).description("Handle checkpoint lifecycle (stop/precompact/postcompact/reset)").argument("<mode>", "stop | precompact | postcompact | reset").option("--vault-dir <path>", "vault root directory (default: auto-detect from cwd)").action(async (mode, opts) => {
12711
+ program2.command("checkpoint", { hidden: true }).description("Handle checkpoint lifecycle (stop/postcompact/reset)").argument("<mode>", "stop | postcompact | reset").option("--vault-dir <path>", "vault root directory (default: auto-detect from cwd)").action(async (mode, opts) => {
12721
12712
  const token = await resolveSessionToken();
12722
12713
  const vaultRoot = opts.vaultDir ?? findVaultRoot(process.cwd());
12723
12714
  await checkpointCommand(mode, token, vaultRoot);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onebrain-ai/cli",
3
- "version": "2.0.10",
3
+ "version": "2.0.13",
4
4
  "description": "CLI for OneBrain — personal AI OS for Obsidian with persistent memory, 24+ skills, and Claude Code integration",
5
5
  "keywords": [
6
6
  "onebrain",