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
|
package/dist/sessions.d.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
1397
|
-
|
|
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;
|