antechamber 1.0.32 → 1.0.33

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,16 @@ and this project uses [Semantic Versioning](https://semver.org/).
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [1.0.33] - 2026-11-02
11
+
12
+ ### Fixed
13
+
14
+ - Stop showing replies twice, and keep new messages and `!` shell commands at the end of the conversation, in a
15
+ session that has a shell command OmO never reported back (for example one stopped by the old one-minute deadline).
16
+ Every read of the conversation re-parsed the session file without the live replies, so each reply read mid-turn
17
+ gained a second, restored copy, and those copies piled up after newer messages. Restart OpenChamber's adapter to
18
+ clear copies already in memory.
19
+
10
20
  ## [1.0.32] - 2026-10-29
11
21
 
12
22
  ### Fixed
@@ -225,6 +225,7 @@ export declare class SessionManager {
225
225
  private reviveLive;
226
226
  /** Record, persist and show a stop that no exit handler will report. */
227
227
  private reportStop;
228
+ /** `reparse` rebuilds from the JSONL while `s.messages` stays visible, so the binder can reuse live ids. */
228
229
  private ensureMessages;
229
230
  /**
230
231
  * The stop notice card. Its id derives from the stop time, so the live card and every replay after a
package/dist/sessions.js CHANGED
@@ -1324,7 +1324,8 @@ export class SessionManager {
1324
1324
  properties: { sessionID: s.info.id, error: { name: "AgentStoppedError", data: { message } } },
1325
1325
  });
1326
1326
  }
1327
- ensureMessages(s) {
1327
+ /** `reparse` rebuilds from the JSONL while `s.messages` stays visible, so the binder can reuse live ids. */
1328
+ ensureMessages(s, reparse = false) {
1328
1329
  if (this.subagents.owns(s.info.id))
1329
1330
  return this.subagents.messages(s.info.id);
1330
1331
  if (this.monitors.owns(s.info.id))
@@ -1334,9 +1335,9 @@ export class SessionManager {
1334
1335
  const dormantPath = s.pi === undefined ? s.restored?.piPath : undefined;
1335
1336
  const fileSize = dormantPath === undefined ? undefined : statSync(dormantPath, { throwIfNoEntry: false })?.size;
1336
1337
  const cachedFileSize = s.historyFileSize ?? s.tree.fileSize;
1337
- if (s.messages !== undefined && fileSize !== undefined && fileSize !== cachedFileSize)
1338
+ if (!reparse && s.messages !== undefined && fileSize !== undefined && fileSize !== cachedFileSize)
1338
1339
  return this.refreshMessageCache(s, true);
1339
- if (s.messages === undefined) {
1340
+ if (s.messages === undefined || reparse) {
1340
1341
  // A dormant session may have been continued by another OmO client since the last save.
1341
1342
  if (s.pi === undefined && s.restored !== undefined)
1342
1343
  followExternalAppends(s, s.restored.piPath);
@@ -1393,8 +1394,9 @@ export class SessionManager {
1393
1394
  }
1394
1395
  refreshMessageCache(s, replaceNative = false) {
1395
1396
  const previous = s.messages ?? [];
1396
- s.messages = undefined;
1397
- const native = this.ensureMessages(s);
1397
+ // Keep the live list during the re-parse: with a pending shell turn the parse binds entries to visible
1398
+ // messages, and an empty list would give every unbound live reply a second, restored `_r` copy.
1399
+ const native = this.ensureMessages(s, true);
1398
1400
  if (replaceNative) {
1399
1401
  // Legacy compaction IDs can collide; retain every parsed native row.
1400
1402
  let index = 0;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "antechamber-omo-compat",
3
- "version": "1.0.32",
3
+ "version": "1.0.33",
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.32",
3
+ "version": "1.0.33",
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.32",
3
+ "version": "1.0.33",
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.32",
3
+ "version": "1.0.33",
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",