@deeplake/hivemind 0.7.62 → 0.7.63

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.
@@ -6,18 +6,18 @@
6
6
  },
7
7
  "metadata": {
8
8
  "description": "Cloud-backed persistent shared memory for AI agents powered by Deeplake",
9
- "version": "0.7.62"
9
+ "version": "0.7.63"
10
10
  },
11
11
  "plugins": [
12
12
  {
13
13
  "name": "hivemind",
14
14
  "description": "Persistent shared memory powered by Deeplake — captures all session activity and provides cross-session, cross-agent memory search",
15
- "version": "0.7.62",
15
+ "version": "0.7.63",
16
16
  "source": {
17
17
  "source": "git-subdir",
18
18
  "url": "https://github.com/activeloopai/hivemind.git",
19
19
  "path": "claude-code",
20
- "sha": "eaaf8f667132304bbdbbc796a531d243d06a67f2"
20
+ "sha": "92157e9b689a955c5b05da7a641223e4ef06fa13"
21
21
  },
22
22
  "homepage": "https://github.com/activeloopai/hivemind"
23
23
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "hivemind",
3
3
  "description": "Cloud-backed persistent memory powered by Deeplake — read, write, and share memory across Claude Code sessions and agents",
4
- "version": "0.7.62",
4
+ "version": "0.7.63",
5
5
  "author": {
6
6
  "name": "Activeloop",
7
7
  "url": "https://deeplake.ai"
package/bundle/cli.js CHANGED
@@ -355,9 +355,9 @@ function hookCmd(bundleFile, timeout, matcher) {
355
355
  function buildHooksJson() {
356
356
  return {
357
357
  hooks: {
358
- SessionStart: [hookCmd("session-start.js", 120)],
358
+ SessionStart: [hookCmd("session-start.js", 10, "startup|resume")],
359
359
  UserPromptSubmit: [hookCmd("capture.js", 10)],
360
- PreToolUse: [hookCmd("pre-tool-use.js", 15, "Bash")],
360
+ PreToolUse: [hookCmd("pre-tool-use.js", 10, "Bash")],
361
361
  PostToolUse: [hookCmd("capture.js", 15)],
362
362
  Stop: [hookCmd("stop.js", 30)]
363
363
  }
@@ -717,6 +717,28 @@ function cleanup() {
717
717
  dlog2(`cleanup failed to remove ${tmpDir}: ${cleanupErr.message}`);
718
718
  }
719
719
  }
720
+ function tailText(text, maxChars = 240) {
721
+ const compact = text.replace(/\s+/g, " ").trim();
722
+ return compact.length <= maxChars ? compact : `\u2026${compact.slice(-maxChars)}`;
723
+ }
724
+ function formatExecFailure(error) {
725
+ const parts = [];
726
+ if (error?.code)
727
+ parts.push(`code=${error.code}`);
728
+ if (error?.status !== void 0 && error?.status !== null)
729
+ parts.push(`status=${error.status}`);
730
+ if (error?.signal)
731
+ parts.push(`signal=${error.signal}`);
732
+ if (error?.message)
733
+ parts.push(`message=${tailText(String(error.message))}`);
734
+ const stderr = Buffer.isBuffer(error?.stderr) ? error.stderr.toString("utf-8") : typeof error?.stderr === "string" ? error.stderr : "";
735
+ if (stderr.trim())
736
+ parts.push(`stderr=${tailText(stderr)}`);
737
+ const stdout = Buffer.isBuffer(error?.stdout) ? error.stdout.toString("utf-8") : typeof error?.stdout === "string" ? error.stdout : "";
738
+ if (stdout.trim())
739
+ parts.push(`stdout=${tailText(stdout)}`);
740
+ return parts.length > 0 ? parts.join(", ") : "unknown failure";
741
+ }
720
742
  async function main() {
721
743
  try {
722
744
  wlog("fetching session events");
@@ -746,6 +768,8 @@ async function main() {
746
768
  }
747
769
  const prompt = cfg.promptTemplate.replace(/__JSONL__/g, tmpJsonl).replace(/__SUMMARY__/g, tmpSummary).replace(/__SESSION_ID__/g, cfg.sessionId).replace(/__PROJECT__/g, cfg.project).replace(/__PREV_OFFSET__/g, String(prevOffset)).replace(/__JSONL_LINES__/g, String(jsonlLines)).replace(/__JSONL_SERVER_PATH__/g, jsonlServerPath);
748
770
  wlog("running codex exec");
771
+ let execSucceeded = false;
772
+ const summaryBeforeExec = existsSync4(tmpSummary) ? readFileSync4(tmpSummary, "utf-8") : null;
749
773
  try {
750
774
  execFileSync(cfg.codexBin, [
751
775
  "exec",
@@ -756,12 +780,19 @@ async function main() {
756
780
  timeout: 12e4,
757
781
  env: { ...process.env, HIVEMIND_WIKI_WORKER: "1", HIVEMIND_CAPTURE: "false" }
758
782
  });
783
+ execSucceeded = true;
759
784
  wlog("codex exec exited (code 0)");
760
785
  } catch (e) {
761
- wlog(`codex exec failed: ${e.status ?? e.message}`);
786
+ const detail = formatExecFailure(e);
787
+ wlog(`codex exec failed: ${detail}`);
762
788
  }
763
789
  if (existsSync4(tmpSummary)) {
764
790
  const text = readFileSync4(tmpSummary, "utf-8");
791
+ const summaryChanged = summaryBeforeExec === null ? text.trim().length > 0 : text !== summaryBeforeExec;
792
+ if (!execSucceeded && !summaryChanged) {
793
+ wlog("codex exec failed without producing a new summary; skipping upload");
794
+ return;
795
+ }
765
796
  if (text.trim()) {
766
797
  const fname = `${cfg.sessionId}.md`;
767
798
  const vpath = `/summaries/${cfg.userName}/${fname}`;
@@ -1823,7 +1823,7 @@ function extractLatestVersion(body) {
1823
1823
  return typeof v === "string" && v.length > 0 ? v : null;
1824
1824
  }
1825
1825
  function getInstalledVersion() {
1826
- return "0.7.62".length > 0 ? "0.7.62" : null;
1826
+ return "0.7.63".length > 0 ? "0.7.63" : null;
1827
1827
  }
1828
1828
  function isNewer(latest, current) {
1829
1829
  const parse = (v) => v.replace(/-.*$/, "").split(".").map(Number);
@@ -54,5 +54,5 @@
54
54
  }
55
55
  }
56
56
  },
57
- "version": "0.7.62"
57
+ "version": "0.7.63"
58
58
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hivemind",
3
- "version": "0.7.62",
3
+ "version": "0.7.63",
4
4
  "type": "module",
5
5
  "description": "Hivemind — cloud-backed persistent shared memory for AI agents, powered by DeepLake",
6
6
  "license": "Apache-2.0",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deeplake/hivemind",
3
- "version": "0.7.62",
3
+ "version": "0.7.63",
4
4
  "description": "Cloud-backed persistent shared memory for AI agents powered by Deeplake",
5
5
  "type": "module",
6
6
  "repository": {