@onebrain-ai/cli 2.0.11 → 2.0.14
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 +65 -42
- 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*)",
|
|
@@ -10753,7 +10762,7 @@ init_dist3();
|
|
|
10753
10762
|
import { mkdir as mkdir3, readFile as readFile3, rename as rename3, stat as stat3, writeFile as writeFile3 } from "node:fs/promises";
|
|
10754
10763
|
import { homedir as homedir3 } from "node:os";
|
|
10755
10764
|
import { dirname as dirname3, join as join5 } from "node:path";
|
|
10756
|
-
var binaryVersion = "2.0.
|
|
10765
|
+
var binaryVersion = "2.0.14";
|
|
10757
10766
|
var STANDARD_FOLDERS = [
|
|
10758
10767
|
"00-inbox",
|
|
10759
10768
|
"01-projects",
|
|
@@ -11173,24 +11182,16 @@ function handleStop(token, vaultRoot, now = Math.floor(Date.now() / 1000), tmpDi
|
|
|
11173
11182
|
const maxNn = maxCheckpointNnSync(vaultRoot, date, token, logsFolder);
|
|
11174
11183
|
const nextNn = String(maxNn + 1).padStart(2, "0");
|
|
11175
11184
|
const since = maxNn === 0 ? " since start" : ` since checkpoint-${String(maxNn).padStart(2, "0")}`;
|
|
11176
|
-
|
|
11177
|
-
emitBlock(`${filename}${since}`);
|
|
11185
|
+
emitBlock(`${nextNn}${since}`);
|
|
11178
11186
|
writeState(token, { count: 0, last_ts: now, last_stop_nn: nextNn }, tmpDir);
|
|
11179
11187
|
}
|
|
11180
|
-
function handlePrecompact(token, _vaultRoot, now = Math.floor(Date.now() / 1000), tmpDir = osTmpdir()) {
|
|
11181
|
-
const state = readState(token, tmpDir);
|
|
11182
|
-
if (state.last_ts > 0 && now - state.last_ts < PRECOMPACT_RECENCY) {
|
|
11183
|
-
return;
|
|
11184
|
-
}
|
|
11185
|
-
writeState(token, { count: 0, last_ts: state.last_ts, last_stop_nn: state.last_stop_nn }, tmpDir);
|
|
11186
|
-
}
|
|
11187
11188
|
function handlePostcompact(token, _vaultRoot, now = Math.floor(Date.now() / 1000), tmpDir = osTmpdir()) {
|
|
11188
11189
|
const state = readState(token, tmpDir);
|
|
11189
11190
|
if (state.last_ts > 0 && now - state.last_ts < PRECOMPACT_RECENCY) {
|
|
11190
11191
|
writeState(token, { count: 0, last_ts: state.last_ts, last_stop_nn: state.last_stop_nn }, tmpDir);
|
|
11191
11192
|
return;
|
|
11192
11193
|
}
|
|
11193
|
-
emitBlock(
|
|
11194
|
+
emitBlock("auto-wrapup");
|
|
11194
11195
|
writeState(token, { count: 0, last_ts: now, last_stop_nn: state.last_stop_nn }, tmpDir);
|
|
11195
11196
|
}
|
|
11196
11197
|
function postcompactFallback(token, vaultRoot, now = Math.floor(Date.now() / 1000), tmpDir = osTmpdir()) {
|
|
@@ -11202,9 +11203,6 @@ async function checkpointCommand(mode, token, vaultRoot) {
|
|
|
11202
11203
|
case "stop":
|
|
11203
11204
|
handleStop(token, vaultRoot);
|
|
11204
11205
|
break;
|
|
11205
|
-
case "precompact":
|
|
11206
|
-
handlePrecompact(token, vaultRoot);
|
|
11207
|
-
break;
|
|
11208
11206
|
case "postcompact":
|
|
11209
11207
|
postcompactFallback(token, vaultRoot);
|
|
11210
11208
|
break;
|
|
@@ -11319,9 +11317,9 @@ ${rest}`;
|
|
|
11319
11317
|
}
|
|
11320
11318
|
return { backfilled, skipped };
|
|
11321
11319
|
}
|
|
11322
|
-
async function migrateCommand(migrationName, cutoffDate) {
|
|
11320
|
+
async function migrateCommand(migrationName, cutoffDate, vaultDir) {
|
|
11323
11321
|
try {
|
|
11324
|
-
const vaultRoot = process.cwd();
|
|
11322
|
+
const vaultRoot = vaultDir ?? process.cwd();
|
|
11325
11323
|
const config = await loadVaultConfig(vaultRoot);
|
|
11326
11324
|
const logsFolder = join7(vaultRoot, config.folders.logs);
|
|
11327
11325
|
if (migrationName === "backfill-recapped") {
|
|
@@ -11482,10 +11480,12 @@ import { homedir as homedir4 } from "node:os";
|
|
|
11482
11480
|
import { dirname as dirname4, join as join9 } from "node:path";
|
|
11483
11481
|
var HOOK_COMMANDS2 = {
|
|
11484
11482
|
Stop: "onebrain checkpoint stop",
|
|
11485
|
-
PreCompact: "onebrain checkpoint precompact",
|
|
11486
11483
|
PostCompact: "onebrain checkpoint postcompact"
|
|
11487
11484
|
};
|
|
11488
|
-
var HOOK_EVENTS2 = ["Stop", "
|
|
11485
|
+
var HOOK_EVENTS2 = ["Stop", "PostCompact"];
|
|
11486
|
+
var STALE_HOOK_COMMANDS2 = {
|
|
11487
|
+
PreCompact: "onebrain checkpoint precompact"
|
|
11488
|
+
};
|
|
11489
11489
|
var PERMISSIONS_TO_ADD2 = [
|
|
11490
11490
|
"Bash(onebrain *)",
|
|
11491
11491
|
"Bash(bun install -g @onebrain-ai/cli*)",
|
|
@@ -11527,6 +11527,13 @@ function applyHooks2(settings) {
|
|
|
11527
11527
|
settings.hooks = {};
|
|
11528
11528
|
const hooks = settings.hooks;
|
|
11529
11529
|
const result = {};
|
|
11530
|
+
for (const [event, staleCmd] of Object.entries(STALE_HOOK_COMMANDS2)) {
|
|
11531
|
+
if (!hooks[event])
|
|
11532
|
+
continue;
|
|
11533
|
+
hooks[event] = hooks[event].filter((group) => !group.hooks?.some((entry) => entry.command === staleCmd));
|
|
11534
|
+
if (hooks[event].length === 0)
|
|
11535
|
+
delete hooks[event];
|
|
11536
|
+
}
|
|
11530
11537
|
for (const event of HOOK_EVENTS2) {
|
|
11531
11538
|
const cmd = HOOK_COMMANDS2[event];
|
|
11532
11539
|
if (!cmd)
|
|
@@ -11774,9 +11781,38 @@ async function resolveSessionToken(tmpDir = osTmpdir2()) {
|
|
|
11774
11781
|
if (stripped.length > 0)
|
|
11775
11782
|
return stripped;
|
|
11776
11783
|
}
|
|
11784
|
+
const tmuxPane = process.env["TMUX_PANE"];
|
|
11785
|
+
if (tmuxPane) {
|
|
11786
|
+
const stripped = tmuxPane.replace(/[^a-zA-Z0-9]/g, "").slice(0, 8);
|
|
11787
|
+
if (stripped.length > 0)
|
|
11788
|
+
return stripped;
|
|
11789
|
+
}
|
|
11790
|
+
const termSessionId = process.env["TERM_SESSION_ID"];
|
|
11791
|
+
if (termSessionId) {
|
|
11792
|
+
const stripped = termSessionId.replace(/[^a-zA-Z0-9]/g, "").slice(0, 8);
|
|
11793
|
+
if (stripped.length > 0)
|
|
11794
|
+
return stripped;
|
|
11795
|
+
}
|
|
11796
|
+
const today = new Date;
|
|
11797
|
+
const yyyymmdd = [
|
|
11798
|
+
today.getFullYear(),
|
|
11799
|
+
String(today.getMonth() + 1).padStart(2, "0"),
|
|
11800
|
+
String(today.getDate()).padStart(2, "0")
|
|
11801
|
+
].join("");
|
|
11802
|
+
const cacheFile = join10(tmpDir, `onebrain-day-${yyyymmdd}.token`);
|
|
11803
|
+
const cacheExists = await Bun.file(cacheFile).exists();
|
|
11804
|
+
if (cacheExists) {
|
|
11805
|
+
const cached = (await Bun.file(cacheFile).text()).trim();
|
|
11806
|
+
const n = Number(cached);
|
|
11807
|
+
if (!Number.isNaN(n) && n > 1)
|
|
11808
|
+
return cached;
|
|
11809
|
+
}
|
|
11777
11810
|
const ppid = process.ppid;
|
|
11778
|
-
if (ppid !== undefined && ppid > 1)
|
|
11779
|
-
|
|
11811
|
+
if (ppid !== undefined && ppid > 1) {
|
|
11812
|
+
const token2 = String(ppid);
|
|
11813
|
+
await Bun.write(cacheFile, token2);
|
|
11814
|
+
return token2;
|
|
11815
|
+
}
|
|
11780
11816
|
try {
|
|
11781
11817
|
const ps = Bun.spawn([
|
|
11782
11818
|
"powershell.exe",
|
|
@@ -11800,27 +11836,14 @@ async function resolveSessionToken(tmpDir = osTmpdir2()) {
|
|
|
11800
11836
|
clearTimeout(timerId);
|
|
11801
11837
|
if (race !== "timeout") {
|
|
11802
11838
|
const out = (await new Response(ps.stdout).text()).replace(/\D/g, "").trim();
|
|
11803
|
-
if (out && Number(out) > 1)
|
|
11839
|
+
if (out && Number(out) > 1) {
|
|
11840
|
+
await Bun.write(cacheFile, out);
|
|
11804
11841
|
return out;
|
|
11842
|
+
}
|
|
11805
11843
|
} else {
|
|
11806
11844
|
ps.kill();
|
|
11807
11845
|
}
|
|
11808
11846
|
} catch {}
|
|
11809
|
-
const today = new Date;
|
|
11810
|
-
const yyyymmdd = [
|
|
11811
|
-
today.getFullYear(),
|
|
11812
|
-
String(today.getMonth() + 1).padStart(2, "0"),
|
|
11813
|
-
String(today.getDate()).padStart(2, "0")
|
|
11814
|
-
].join("");
|
|
11815
|
-
const cacheFile = join10(tmpDir, `onebrain-day-${yyyymmdd}.token`);
|
|
11816
|
-
const f2 = Bun.file(cacheFile);
|
|
11817
|
-
const exists = await f2.exists();
|
|
11818
|
-
if (exists) {
|
|
11819
|
-
const cached = (await f2.text()).trim();
|
|
11820
|
-
const n = Number(cached);
|
|
11821
|
-
if (!Number.isNaN(n) && n > 1)
|
|
11822
|
-
return cached;
|
|
11823
|
-
}
|
|
11824
11847
|
const token = String(Math.floor(Math.random() * 90000) + 1e4);
|
|
11825
11848
|
await Bun.write(cacheFile, token);
|
|
11826
11849
|
return token;
|
|
@@ -12635,8 +12658,8 @@ async function updateCommand(opts = {}) {
|
|
|
12635
12658
|
}
|
|
12636
12659
|
|
|
12637
12660
|
// src/index.ts
|
|
12638
|
-
var VERSION = "2.0.
|
|
12639
|
-
var RELEASE_DATE = "2026-04-
|
|
12661
|
+
var VERSION = "2.0.14";
|
|
12662
|
+
var RELEASE_DATE = "2026-04-27";
|
|
12640
12663
|
process.stdout.setDefaultEncoding("utf8");
|
|
12641
12664
|
process.stderr.setDefaultEncoding("utf8");
|
|
12642
12665
|
var VERSION_STRING = `OneBrain v${VERSION} \u2014 released ${RELEASE_DATE}`;
|
|
@@ -12688,7 +12711,7 @@ program2.command("session-init", { hidden: true }).description("Emit session tok
|
|
|
12688
12711
|
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) => {
|
|
12689
12712
|
await orphanScanCommand(logsFolder, sessionToken);
|
|
12690
12713
|
});
|
|
12691
|
-
program2.command("checkpoint", { hidden: true }).description("Handle checkpoint lifecycle (stop/
|
|
12714
|
+
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) => {
|
|
12692
12715
|
const token = await resolveSessionToken();
|
|
12693
12716
|
const vaultRoot = opts.vaultDir ?? findVaultRoot(process.cwd());
|
|
12694
12717
|
await checkpointCommand(mode, token, vaultRoot);
|