antechamber 1.0.9 → 1.0.10

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/CHANGELOG.md CHANGED
@@ -7,6 +7,13 @@ and this project uses [Semantic Versioning](https://semver.org/).
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [1.0.10] - 2026-10-21
11
+
12
+ ### Fixed
13
+
14
+ - Keep sessions with many child tasks responsive by ignoring unchanged task snapshots and saving
15
+ each snapshot's changes in one registry write.
16
+
10
17
  ## [1.0.9] - 2026-10-21
11
18
 
12
19
  ### Fixed
package/dist/subagents.js CHANGED
@@ -1,6 +1,7 @@
1
1
  /** OmO task cards and read-only views of their independently persisted sessions. */
2
2
  import { closeSync, existsSync, mkdirSync, openSync, readFileSync, readSync, readdirSync, renameSync, statSync, watch, writeFileSync, } from "node:fs";
3
3
  import { basename, dirname, join } from "node:path";
4
+ import { isDeepStrictEqual } from "node:util";
4
5
  import { piAgentDir } from "./agent-dir.js";
5
6
  import { syncSessionCost } from "./pi-event-translation.js";
6
7
  import { ocIdFor, SessionPersistenceError, SessionStore } from "./session-store.js";
@@ -541,28 +542,31 @@ export class SubagentBridge {
541
542
  observe(parent, ev) {
542
543
  if (ev.name !== "omo.task.updated" || !record(ev.data) || !Array.isArray(ev.data.tasks))
543
544
  return;
544
- for (const row of ev.data.tasks) {
545
- if (!record(row) || !taskId(row.task_id))
546
- continue;
547
- if (typeof row.parent_session_id === "string" &&
548
- row.parent_session_id !== (parent.piSessionId ?? parent.restored?.piSessionId))
549
- continue;
550
- const id = this.sessionId(parent, row.task_id);
551
- if (!this.children.has(id))
552
- this.restore(id);
553
- const child = this.children.get(id);
554
- if (!child || child.session.info.parentID !== parent.info.id)
555
- continue;
556
- const data = snapshotState(row);
557
- // OmO re-sends every row ~150 ms after each progress event of any task; only changes matter.
558
- if (Object.entries(data).every(([key, value]) => child.task.details[key] === value))
559
- continue;
560
- this.wire(parent);
561
- if (!this.applyNative(child, data))
562
- continue;
563
- child.live = true;
564
- this.refresh(child, true, false);
565
- }
545
+ const rows = ev.data.tasks;
546
+ this.store.batch(() => withTaskLookups(this.store, () => {
547
+ for (const row of rows) {
548
+ if (!record(row) || !taskId(row.task_id))
549
+ continue;
550
+ if (typeof row.parent_session_id === "string" &&
551
+ row.parent_session_id !== (parent.piSessionId ?? parent.restored?.piSessionId))
552
+ continue;
553
+ const id = this.sessionId(parent, row.task_id);
554
+ if (!this.children.has(id))
555
+ this.restore(id);
556
+ const child = this.children.get(id);
557
+ if (!child || child.session.info.parentID !== parent.info.id)
558
+ continue;
559
+ const data = snapshotState(row);
560
+ // OmO re-sends every row ~150 ms after each progress event of any task; only changes matter.
561
+ if (Object.entries(data).every(([key, value]) => isDeepStrictEqual(child.task.details[key], value)))
562
+ continue;
563
+ this.wire(parent);
564
+ if (!this.applyNative(child, data))
565
+ continue;
566
+ child.live = true;
567
+ this.refresh(child, true, false);
568
+ }
569
+ }));
566
570
  }
567
571
  /**
568
572
  * Merge task state reported by OmO (record, snapshot) unless it is older than what is known: an
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "antechamber-omo-compat",
3
- "version": "1.0.9",
3
+ "version": "1.0.10",
4
4
  "description": "OpenChamber extension: displays OmO tool calls the way OmO means them when OpenChamber runs on antechamber",
5
5
  "private": true,
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "antechamber-omo-graph",
3
- "version": "1.0.9",
3
+ "version": "1.0.10",
4
4
  "description": "OpenChamber extension: live, interactive graph of the OmO sub-agents behind the current session",
5
5
  "private": true,
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "antechamber-omo-work",
3
- "version": "1.0.9",
3
+ "version": "1.0.10",
4
4
  "description": "OpenChamber 2.x Work Status section: OmO todo phases, monitors, eval cells and background work of the current session",
5
5
  "private": true,
6
6
  "type": "module",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "antechamber",
3
- "version": "1.0.9",
3
+ "version": "1.0.10",
4
4
  "description": "OpenCode-compatible HTTP/SSE server that lets OpenChamber drive the pi coding agent (and OmO) over RPC",
5
5
  "type": "module",
6
6
  "license": "MIT",