antechamber 0.2.26 → 0.2.28

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,19 @@ and this project uses [Semantic Versioning](https://semver.org/).
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.2.28] - 2026-10-18
11
+
12
+ - fix(session): keep replies visible after compaction (#37)
13
+
14
+ ## [0.2.27] - 2026-10-18
15
+
16
+ ### Fixed
17
+
18
+ - Keep new replies and tool activity visible after compaction in long conversations by retaining their original
19
+ prompt in paged history.
20
+ - Keep a subagent and its parent session shown as running when OmO resumes the subagent on its own after its turn
21
+ ended while its background work ran, and keep the subagent's transcript up to its final reply.
22
+
10
23
  ## [0.2.26] - 2026-10-17
11
24
 
12
25
  ### Changed
package/dist/routes-v1.js CHANGED
@@ -148,6 +148,13 @@ export async function handleV1(services, req, res, url, path, method, directory)
148
148
  return;
149
149
  }
150
150
  let start = limit === undefined ? 0 : Math.max(0, end - limit);
151
+ const parents = new Set(messages
152
+ .slice(start, end)
153
+ .flatMap((message) => (message.info.role === "assistant" ? [message.info.parentID] : [])));
154
+ // A compaction opens its own display turn, but ongoing replies still belong to the original prompt.
155
+ const parent = messages.findIndex((message, index) => index < start && message.info.role === "user" && parents.has(message.info.id));
156
+ if (parent >= 0)
157
+ start = parent;
151
158
  // OpenChamber 1.24 widens a page with no user message only up to 120 messages
152
159
  // (150 on desktop), then renders it with no turn to anchor on: blank. A long agent
153
160
  // turn outgrows that, so a page reaches back to the prompt that opened its turn.
package/dist/subagents.js CHANGED
@@ -21,6 +21,14 @@ export function stripTaskSuffix(text) {
21
21
  function active(status) {
22
22
  return ["running", "queued", "pending", "starting", "suspended"].includes(String(status));
23
23
  }
24
+ /**
25
+ * A finished task OmO may still resume on its own: a resident child whose turn settled while its own
26
+ * background work ran is set back to running (omo-task.js `task_self_resumed`, which goes through the
27
+ * same reset as a revive). Leaving residency (`rpc_detached`, `persisted_only`, `disposed`) ends that.
28
+ */
29
+ function revivable(details) {
30
+ return (details.residency_state === "resident" && ["completed", "error", "interrupted"].includes(String(details.status)));
31
+ }
24
32
  function terminal(status) {
25
33
  return ["completed", "failed", "error", "cancelled", "canceled", "killed", "lost", "denied", "plan_error"].includes(String(status));
26
34
  }
@@ -659,8 +667,12 @@ export class SubagentBridge {
659
667
  }
660
668
  reconcileRuntime(child, running) {
661
669
  child.session.status = { type: running ? "busy" : "idle" };
662
- if (!running)
663
- this.closeWatchers(child);
670
+ if (!running) {
671
+ const keep = revivable(child.task.details) ? child.recordPath : undefined;
672
+ this.closeWatchers(child, keep);
673
+ if (keep !== undefined)
674
+ this.watch(child, keep);
675
+ }
664
676
  const parts = [...child.parts.values()];
665
677
  for (const part of parts) {
666
678
  updateTaskParts([part], {
@@ -784,10 +796,14 @@ export class SubagentBridge {
784
796
  emitPart(session, part) {
785
797
  this.emit(session.info.directory, { type: "message.part.updated", properties: { part } });
786
798
  }
787
- closeWatchers(child) {
788
- for (const watcher of child.watchers.values())
799
+ closeWatchers(child, keep) {
800
+ const kept = keep === undefined ? undefined : dirname(keep);
801
+ for (const [dir, watcher] of child.watchers) {
802
+ if (dir === kept)
803
+ continue;
789
804
  watcher.close();
790
- child.watchers.clear();
805
+ child.watchers.delete(dir);
806
+ }
791
807
  }
792
808
  finishCalls(parentID, cancelled = false) {
793
809
  for (const [key, parts] of this.calls) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "antechamber-omo-compat",
3
- "version": "0.2.26",
3
+ "version": "0.2.28",
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": "0.2.26",
3
+ "version": "0.2.28",
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",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "antechamber",
3
- "version": "0.2.26",
3
+ "version": "0.2.28",
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",