@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.
- package/dist/onebrain +44 -53
- 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", "
|
|
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.
|
|
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", "
|
|
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.
|
|
12668
|
-
var RELEASE_DATE = "2026-04-
|
|
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/
|
|
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);
|