@volter/supercode-interchange 0.1.15 → 0.1.16
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/package.json
CHANGED
|
@@ -15,6 +15,9 @@ export function fromCodexDisplayStr(text, messageLimit) {
|
|
|
15
15
|
if (!Number.isSafeInteger(messageLimit) || messageLimit < 0) throw new RangeError('invalid Codex display message limit');
|
|
16
16
|
const session = createSession('codex'), { meta, messages } = session, precedingUsers = [], canonicalTexts = new Set();
|
|
17
17
|
const retain = Math.min(Number.MAX_SAFE_INTEGER, Math.max(messageLimit, 1) + 64);
|
|
18
|
+
// The item ids and event texts the kept messages may hold: a record that names neither replaces nothing and looks
|
|
19
|
+
// through no message, so a read with no bound on its messages (a display anchor's) is linear in what it reads.
|
|
20
|
+
const displayItems = new Set(), eventTexts = new Set();
|
|
18
21
|
let paginated = false, recordCount = 0, total = 0;
|
|
19
22
|
for (const line of nonEmptyLines(text)) {
|
|
20
23
|
recordCount++;
|
|
@@ -24,12 +27,13 @@ export function fromCodexDisplayStr(text, messageLimit) {
|
|
|
24
27
|
else if (kind === 'event_msg' && paginated && type === 'item_completed') {
|
|
25
28
|
const item = field(payload, 'item'), id = stringField(item, 'id');
|
|
26
29
|
if (id != null) {
|
|
27
|
-
const position = messages.findIndex((message) => message.metadata.codex_display_item === id), projected = [];
|
|
30
|
+
const held = displayItems.has(id), position = held ? messages.findIndex((message) => message.metadata.codex_display_item === id) : -1, projected = [];
|
|
28
31
|
pushCodexDisplayItem(item, projected);
|
|
29
32
|
for (const message of projected) message.metadata.codex_display_item = id;
|
|
33
|
+
if (projected.length) displayItems.add(id);
|
|
30
34
|
stampCodexMessages(projected, 0, timestamp);
|
|
31
35
|
let removed = 0;
|
|
32
|
-
for (let index = messages.length - 1; index >= 0; index--) if (messages[index].metadata.codex_display_item === id) { messages.splice(index, 1); removed++; }
|
|
36
|
+
if (held) for (let index = messages.length - 1; index >= 0; index--) if (messages[index].metadata.codex_display_item === id) { messages.splice(index, 1); removed++; }
|
|
33
37
|
total = Math.max(0, total - removed) + projected.length;
|
|
34
38
|
const at = Math.min(position === -1 ? messages.length : position, messages.length);
|
|
35
39
|
for (let index = 0; index < projected.length; index++) messages.splice(at + index, 0, projected[index]);
|
|
@@ -47,7 +51,7 @@ export function fromCodexDisplayStr(text, messageLimit) {
|
|
|
47
51
|
const isAssistant = type === 'message' && stringField(payload, 'role') === 'assistant';
|
|
48
52
|
const assistantText = isAssistant ? extractTextContent(payload, 'content') : null;
|
|
49
53
|
if (assistantText != null && nativeTrim(assistantText) !== '') {
|
|
50
|
-
const duplicate = messages.findLastIndex((message) => Object.hasOwn(message.metadata, 'codex_event_message') && message.content === assistantText);
|
|
54
|
+
const duplicate = eventTexts.has(assistantText) ? messages.findLastIndex((message) => Object.hasOwn(message.metadata, 'codex_event_message') && message.content === assistantText) : -1;
|
|
51
55
|
if (duplicate !== -1) { messages.splice(duplicate, 1); total = Math.max(0, total - 1); }
|
|
52
56
|
canonicalTexts.add(nativeTrim(assistantText));
|
|
53
57
|
}
|
|
@@ -62,7 +66,7 @@ export function fromCodexDisplayStr(text, messageLimit) {
|
|
|
62
66
|
const text = extractTextContent(payload, 'message');
|
|
63
67
|
if (nativeTrim(text) !== '' && !canonicalTexts.has(nativeTrim(text))) {
|
|
64
68
|
const before = messages.length; pushCodexAssistant(messages, text); total++;
|
|
65
|
-
messages.at(-1).metadata.codex_event_message = 'true';
|
|
69
|
+
messages.at(-1).metadata.codex_event_message = 'true'; eventTexts.add(messages.at(-1).content);
|
|
66
70
|
const phase = stringField(payload, 'phase'); if (phase != null) messages.at(-1).metadata.phase = phase;
|
|
67
71
|
stampCodexMessages(messages, before, timestamp);
|
|
68
72
|
}
|