@onebrain-ai/cli 2.1.12 → 2.1.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 +94 -8
- package/package.json +1 -1
package/dist/onebrain
CHANGED
|
@@ -9521,7 +9521,7 @@ var init_lib = __esm(() => {
|
|
|
9521
9521
|
var require_package = __commonJS((exports, module) => {
|
|
9522
9522
|
module.exports = {
|
|
9523
9523
|
name: "@onebrain-ai/cli",
|
|
9524
|
-
version: "2.1.
|
|
9524
|
+
version: "2.1.13",
|
|
9525
9525
|
description: "CLI for OneBrain \u2014 personal AI OS for Obsidian with persistent memory, 24+ skills, and Claude Code integration",
|
|
9526
9526
|
keywords: [
|
|
9527
9527
|
"onebrain",
|
|
@@ -10858,7 +10858,7 @@ var import_picocolors5 = __toESM(require_picocolors(), 1);
|
|
|
10858
10858
|
var import_picocolors = __toESM(require_picocolors(), 1);
|
|
10859
10859
|
function resolveBinaryVersion() {
|
|
10860
10860
|
if (true)
|
|
10861
|
-
return "2.1.
|
|
10861
|
+
return "2.1.13";
|
|
10862
10862
|
try {
|
|
10863
10863
|
const pkg = require_package();
|
|
10864
10864
|
return pkg.version ?? "dev";
|
|
@@ -12632,7 +12632,74 @@ function formatDatetime(date) {
|
|
|
12632
12632
|
const mm = String(date.getMinutes()).padStart(2, "0");
|
|
12633
12633
|
return `${dow} \xB7 ${day} ${mon} ${year} \xB7 ${hh}:${mm}`;
|
|
12634
12634
|
}
|
|
12635
|
-
|
|
12635
|
+
function commBasenameOf(raw) {
|
|
12636
|
+
return raw.trim().replace(/^.*[/\\]/, "").replace(/\.exe$/i, "");
|
|
12637
|
+
}
|
|
12638
|
+
var defaultProcLookup = (pid) => {
|
|
12639
|
+
if (process.platform === "win32")
|
|
12640
|
+
return null;
|
|
12641
|
+
let result;
|
|
12642
|
+
try {
|
|
12643
|
+
result = Bun.spawnSync(["ps", "-o", "ppid=,comm=", "-p", String(pid)], {
|
|
12644
|
+
stdout: "pipe",
|
|
12645
|
+
stderr: "pipe"
|
|
12646
|
+
});
|
|
12647
|
+
} catch (err) {
|
|
12648
|
+
const code = err?.code;
|
|
12649
|
+
process.stderr.write(`onebrain: ps spawn failed for pid ${pid} (${code ?? "unknown"})
|
|
12650
|
+
`);
|
|
12651
|
+
return null;
|
|
12652
|
+
}
|
|
12653
|
+
if (!result.success) {
|
|
12654
|
+
process.stderr.write(`onebrain: ps -p ${pid} exited ${result.exitCode}
|
|
12655
|
+
`);
|
|
12656
|
+
return null;
|
|
12657
|
+
}
|
|
12658
|
+
const out2 = new TextDecoder().decode(result.stdout).trim();
|
|
12659
|
+
if (!out2) {
|
|
12660
|
+
process.stderr.write(`onebrain: ps -p ${pid} returned empty output
|
|
12661
|
+
`);
|
|
12662
|
+
return null;
|
|
12663
|
+
}
|
|
12664
|
+
if (out2.includes(`
|
|
12665
|
+
`)) {
|
|
12666
|
+
process.stderr.write(`onebrain: ps -p ${pid} returned multi-line output: ${out2.replace(/\n/g, " | ").slice(0, 120)}
|
|
12667
|
+
`);
|
|
12668
|
+
return null;
|
|
12669
|
+
}
|
|
12670
|
+
const match = out2.match(/^\s*(\d+)\s+(.+)$/);
|
|
12671
|
+
if (!match) {
|
|
12672
|
+
process.stderr.write(`onebrain: ps -p ${pid} unparseable: ${out2.slice(0, 120)}
|
|
12673
|
+
`);
|
|
12674
|
+
return null;
|
|
12675
|
+
}
|
|
12676
|
+
const ppid = Number(match[1]);
|
|
12677
|
+
if (Number.isNaN(ppid))
|
|
12678
|
+
return null;
|
|
12679
|
+
return { ppid, commBasename: commBasenameOf(match[2] ?? "") };
|
|
12680
|
+
};
|
|
12681
|
+
function findClaudeAncestorPid(startPid, lookup = defaultProcLookup, maxDepth = 12) {
|
|
12682
|
+
let current = startPid;
|
|
12683
|
+
for (let i = 0;i < maxDepth; i++) {
|
|
12684
|
+
if (current <= 1)
|
|
12685
|
+
return null;
|
|
12686
|
+
const info = lookup(current);
|
|
12687
|
+
if (!info)
|
|
12688
|
+
return null;
|
|
12689
|
+
if (info.commBasename === "claude")
|
|
12690
|
+
return current;
|
|
12691
|
+
if (info.ppid <= 1) {
|
|
12692
|
+
process.stderr.write(`onebrain: walk-up reached init from pid ${startPid} without finding claude (last comm=${info.commBasename})
|
|
12693
|
+
`);
|
|
12694
|
+
return null;
|
|
12695
|
+
}
|
|
12696
|
+
current = info.ppid;
|
|
12697
|
+
}
|
|
12698
|
+
process.stderr.write(`onebrain: walk-up exhausted ${maxDepth} hops from pid ${startPid} without finding claude
|
|
12699
|
+
`);
|
|
12700
|
+
return null;
|
|
12701
|
+
}
|
|
12702
|
+
async function resolveSessionToken(tmpDir = osTmpdir2(), procLookup = defaultProcLookup) {
|
|
12636
12703
|
const wtSession = process.env["WT_SESSION"];
|
|
12637
12704
|
if (wtSession) {
|
|
12638
12705
|
const stripped = wtSession.replace(/[^a-zA-Z0-9]/g, "").slice(0, 8);
|
|
@@ -12651,6 +12718,13 @@ async function resolveSessionToken(tmpDir = osTmpdir2()) {
|
|
|
12651
12718
|
if (stripped.length > 0)
|
|
12652
12719
|
return stripped;
|
|
12653
12720
|
}
|
|
12721
|
+
const startPpid = process.ppid;
|
|
12722
|
+
if (startPpid !== undefined && startPpid > 1) {
|
|
12723
|
+
const claudePid = findClaudeAncestorPid(startPpid, procLookup);
|
|
12724
|
+
if (claudePid !== null && claudePid > 1) {
|
|
12725
|
+
return String(claudePid);
|
|
12726
|
+
}
|
|
12727
|
+
}
|
|
12654
12728
|
const today = new Date;
|
|
12655
12729
|
const yyyymmdd = [
|
|
12656
12730
|
today.getFullYear(),
|
|
@@ -12719,9 +12793,21 @@ async function cleanStaleStateFile(token, tmpDir) {
|
|
|
12719
12793
|
if (mtimeMs < processStartMs) {
|
|
12720
12794
|
try {
|
|
12721
12795
|
await unlink3(stateFile);
|
|
12722
|
-
} catch {
|
|
12796
|
+
} catch (err) {
|
|
12797
|
+
const code = err?.code;
|
|
12798
|
+
if (code !== "ENOENT") {
|
|
12799
|
+
process.stderr.write(`onebrain: cannot remove stale state file ${stateFile} (${code ?? "unknown"})
|
|
12800
|
+
`);
|
|
12801
|
+
}
|
|
12802
|
+
}
|
|
12723
12803
|
}
|
|
12724
|
-
} catch {
|
|
12804
|
+
} catch (err) {
|
|
12805
|
+
const code = err?.code;
|
|
12806
|
+
if (code && code !== "ENOENT") {
|
|
12807
|
+
process.stderr.write(`onebrain: cleanStaleStateFile failed (${code})
|
|
12808
|
+
`);
|
|
12809
|
+
}
|
|
12810
|
+
}
|
|
12725
12811
|
}
|
|
12726
12812
|
async function queryQmdUnembedded() {
|
|
12727
12813
|
try {
|
|
@@ -12752,13 +12838,13 @@ async function queryQmdUnembedded() {
|
|
|
12752
12838
|
return 0;
|
|
12753
12839
|
}
|
|
12754
12840
|
}
|
|
12755
|
-
async function runSessionInit(vaultRoot, tmpDir = osTmpdir2()) {
|
|
12841
|
+
async function runSessionInit(vaultRoot, tmpDir = osTmpdir2(), procLookup = defaultProcLookup) {
|
|
12756
12842
|
try {
|
|
12757
12843
|
await loadVaultConfig(vaultRoot);
|
|
12758
12844
|
} catch {
|
|
12759
12845
|
return { decision: "block", reason: "onebrain-init-required" };
|
|
12760
12846
|
}
|
|
12761
|
-
const sessionToken = await resolveSessionToken(tmpDir);
|
|
12847
|
+
const sessionToken = await resolveSessionToken(tmpDir, procLookup);
|
|
12762
12848
|
await cleanStaleStateFile(sessionToken, tmpDir);
|
|
12763
12849
|
const datetime = formatDatetime(new Date);
|
|
12764
12850
|
const qmdUnembedded = await queryQmdUnembedded();
|
|
@@ -13002,7 +13088,7 @@ function patchUtf8(stream) {
|
|
|
13002
13088
|
}
|
|
13003
13089
|
|
|
13004
13090
|
// src/index.ts
|
|
13005
|
-
var VERSION = "2.1.
|
|
13091
|
+
var VERSION = "2.1.13";
|
|
13006
13092
|
var RELEASE_DATE = "2026-05-06";
|
|
13007
13093
|
patchUtf8(process.stdout);
|
|
13008
13094
|
patchUtf8(process.stderr);
|