@elench/testkit 0.1.103 → 0.1.104

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.
@@ -182,7 +182,9 @@ function codexItemStartedEvent(item) {
182
182
  function codexItemUpdatedEvent(item) {
183
183
  if (!item || typeof item !== "object") return null;
184
184
  if (item.type === "agent_message" && typeof item.text === "string") {
185
- return providerAssistantDelta(item.text);
185
+ return providerAssistantDelta(item.text, {
186
+ id: item.id || null,
187
+ });
186
188
  }
187
189
  if (item.type === "command_execution") {
188
190
  return providerToolUpdate("command", {
@@ -204,7 +206,9 @@ function codexItemUpdatedEvent(item) {
204
206
  function codexItemCompletedEvent(item) {
205
207
  if (!item || typeof item !== "object") return null;
206
208
  if (item.type === "agent_message" && typeof item.text === "string") {
207
- return providerAssistantFinal(item.text);
209
+ return providerAssistantFinal(item.text, {
210
+ id: item.id || null,
211
+ });
208
212
  }
209
213
  if (item.type === "command_execution") {
210
214
  return providerToolEnd("command", {
@@ -635,6 +635,7 @@ function handleAssistantToolEvent(state, event, appendMessage) {
635
635
  function createProviderTurnState() {
636
636
  return {
637
637
  assistantMessageId: null,
638
+ assistantMessageIdsByProviderItem: new Map(),
638
639
  lastActivityText: null,
639
640
  };
640
641
  }
@@ -693,15 +694,19 @@ function handleProviderEvent(turn, event, { appendMessage, updateMessage, setSta
693
694
  }
694
695
 
695
696
  function appendAssistantDelta(turn, event, { appendMessage, updateMessage }) {
696
- if (!turn.assistantMessageId) {
697
- turn.assistantMessageId = appendMessage({
697
+ const messageKey = providerAssistantMessageKey(event);
698
+ let messageId = messageKey ? turn.assistantMessageIdsByProviderItem.get(messageKey) : turn.assistantMessageId;
699
+ if (!messageId) {
700
+ messageId = appendMessage({
698
701
  role: "assistant",
699
702
  status: "streaming",
700
703
  provider: event.provider || null,
701
704
  text: "",
702
705
  });
706
+ if (messageKey) turn.assistantMessageIdsByProviderItem.set(messageKey, messageId);
707
+ else turn.assistantMessageId = messageId;
703
708
  }
704
- updateMessage(turn.assistantMessageId, (message) => ({
709
+ updateMessage(messageId, (message) => ({
705
710
  text: `${message.text || ""}${event.text || ""}`,
706
711
  status: "streaming",
707
712
  }));
@@ -709,20 +714,29 @@ function appendAssistantDelta(turn, event, { appendMessage, updateMessage }) {
709
714
 
710
715
  function finalizeAssistantMessage(turn, event, { appendMessage, updateMessage }) {
711
716
  const finalText = event.text || "";
712
- if (!turn.assistantMessageId) {
713
- turn.assistantMessageId = appendMessage({
717
+ const messageKey = providerAssistantMessageKey(event);
718
+ let messageId = messageKey ? turn.assistantMessageIdsByProviderItem.get(messageKey) : turn.assistantMessageId;
719
+ if (!messageId) {
720
+ messageId = appendMessage({
714
721
  role: "assistant",
715
722
  provider: event.provider || null,
716
723
  text: finalText,
717
724
  });
725
+ if (messageKey) turn.assistantMessageIdsByProviderItem.set(messageKey, messageId);
726
+ else turn.assistantMessageId = messageId;
718
727
  return;
719
728
  }
720
- updateMessage(turn.assistantMessageId, (message) => ({
729
+ updateMessage(messageId, (message) => ({
721
730
  text: finalText || message.text || "",
722
731
  status: null,
723
732
  }));
724
733
  }
725
734
 
735
+ function providerAssistantMessageKey(event) {
736
+ if (!event?.id) return null;
737
+ return `${event.provider || "provider"}:${event.id}`;
738
+ }
739
+
726
740
  function appendProviderActivity(turn, message, { appendMessage, setStatus }) {
727
741
  const text = String(message.text || "").trim();
728
742
  if (!text) return;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elench/next-analysis",
3
- "version": "0.1.103",
3
+ "version": "0.1.104",
4
4
  "description": "SWC-backed Next.js source analysis primitives for Erench tools",
5
5
  "type": "module",
6
6
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elench/testkit-bridge",
3
- "version": "0.1.103",
3
+ "version": "0.1.104",
4
4
  "description": "Browser bridge helpers for testkit",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -22,7 +22,7 @@
22
22
  "typecheck": "tsc -p tsconfig.json --noEmit"
23
23
  },
24
24
  "dependencies": {
25
- "@elench/testkit-protocol": "0.1.103"
25
+ "@elench/testkit-protocol": "0.1.104"
26
26
  },
27
27
  "private": false
28
28
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elench/testkit-protocol",
3
- "version": "0.1.103",
3
+ "version": "0.1.104",
4
4
  "description": "Shared browser protocol for testkit bridge and extension consumers",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elench/ts-analysis",
3
- "version": "0.1.103",
3
+ "version": "0.1.104",
4
4
  "description": "TypeScript compiler-backed source analysis primitives for Erench tools",
5
5
  "type": "module",
6
6
  "exports": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elench/testkit",
3
- "version": "0.1.103",
3
+ "version": "0.1.104",
4
4
  "description": "Assistant-first CLI for running, inspecting, and debugging local testkit suites",
5
5
  "type": "module",
6
6
  "workspaces": [
@@ -90,10 +90,10 @@
90
90
  },
91
91
  "dependencies": {
92
92
  "@babel/code-frame": "^7.29.0",
93
- "@elench/next-analysis": "0.1.103",
94
- "@elench/testkit-bridge": "0.1.103",
95
- "@elench/testkit-protocol": "0.1.103",
96
- "@elench/ts-analysis": "0.1.103",
93
+ "@elench/next-analysis": "0.1.104",
94
+ "@elench/testkit-bridge": "0.1.104",
95
+ "@elench/testkit-protocol": "0.1.104",
96
+ "@elench/ts-analysis": "0.1.104",
97
97
  "@oclif/core": "^4.10.6",
98
98
  "esbuild": "^0.25.11",
99
99
  "execa": "^9.5.0",