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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
805
|
+
child.watchers.delete(dir);
|
|
806
|
+
}
|
|
791
807
|
}
|
|
792
808
|
finishCalls(parentID, cancelled = false) {
|
|
793
809
|
for (const [key, parts] of this.calls) {
|