antechamber 0.2.26 → 0.2.27

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
+ ## [0.2.27] - 2026-10-18
11
+
12
+ ### Fixed
13
+
14
+ - Keep a subagent and its parent session shown as running when OmO resumes the subagent on its own after its turn
15
+ ended while its background work ran, and keep the subagent's transcript up to its final reply.
16
+
10
17
  ## [0.2.26] - 2026-10-17
11
18
 
12
19
  ### Changed
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.27",
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.27",
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.27",
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",