@assistant-ui/core 0.3.2 → 0.3.4

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.
Files changed (169) hide show
  1. package/dist/index.d.ts +4 -4
  2. package/dist/index.js.map +1 -1
  3. package/dist/internal.d.ts +9 -7
  4. package/dist/internal.js +8 -6
  5. package/dist/react/primitive-hooks/useActionBarCopy.js +51 -24
  6. package/dist/react/primitive-hooks/useActionBarCopy.js.map +1 -1
  7. package/dist/react/primitive-hooks/useSuggestionTrigger.js +29 -25
  8. package/dist/react/primitive-hooks/useSuggestionTrigger.js.map +1 -1
  9. package/dist/react/primitives/message/MessageGroupedParts.d.ts +2 -1
  10. package/dist/react/primitives/message/MessageGroupedParts.d.ts.map +1 -1
  11. package/dist/react/primitives/message/MessageGroupedParts.js +2 -2
  12. package/dist/react/primitives/message/MessageGroupedParts.js.map +1 -1
  13. package/dist/react/primitives/message/MessageParts.d.ts +6 -1
  14. package/dist/react/primitives/message/MessageParts.d.ts.map +1 -1
  15. package/dist/react/primitives/message/MessageParts.js.map +1 -1
  16. package/dist/react/providers/ReadonlyThreadProvider.d.ts.map +1 -1
  17. package/dist/react/providers/ReadonlyThreadProvider.js +1 -0
  18. package/dist/react/providers/ReadonlyThreadProvider.js.map +1 -1
  19. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts +67 -0
  20. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
  21. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +76 -15
  22. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -1
  23. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +4 -0
  24. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
  25. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js +21 -0
  26. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
  27. package/dist/react/runtimes/cloud/auiV0.d.ts +26 -2
  28. package/dist/react/runtimes/cloud/auiV0.d.ts.map +1 -1
  29. package/dist/react/runtimes/cloud/auiV0.js +29 -8
  30. package/dist/react/runtimes/cloud/auiV0.js.map +1 -1
  31. package/dist/react/types/MessagePartComponentTypes.d.ts +8 -0
  32. package/dist/react/types/MessagePartComponentTypes.d.ts.map +1 -1
  33. package/dist/runtime/api/bindings.d.ts +5 -0
  34. package/dist/runtime/api/bindings.d.ts.map +1 -1
  35. package/dist/runtime/api/message-runtime.d.ts.map +1 -1
  36. package/dist/runtime/api/message-runtime.js +5 -1
  37. package/dist/runtime/api/message-runtime.js.map +1 -1
  38. package/dist/runtime/api/thread-list-runtime.d.ts +14 -1
  39. package/dist/runtime/api/thread-list-runtime.d.ts.map +1 -1
  40. package/dist/runtime/api/thread-list-runtime.js +6 -1
  41. package/dist/runtime/api/thread-list-runtime.js.map +1 -1
  42. package/dist/runtime/api/thread-runtime.d.ts +7 -1
  43. package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
  44. package/dist/runtime/api/thread-runtime.js +11 -3
  45. package/dist/runtime/api/thread-runtime.js.map +1 -1
  46. package/dist/runtime/base/base-composer-runtime-core.d.ts +3 -0
  47. package/dist/runtime/base/base-composer-runtime-core.d.ts.map +1 -1
  48. package/dist/runtime/base/base-composer-runtime-core.js +54 -12
  49. package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
  50. package/dist/runtime/interfaces/thread-list-runtime-core.d.ts +10 -0
  51. package/dist/runtime/interfaces/thread-list-runtime-core.d.ts.map +1 -1
  52. package/dist/runtime/interfaces/thread-runtime-core.d.ts +14 -0
  53. package/dist/runtime/interfaces/thread-runtime-core.d.ts.map +1 -1
  54. package/dist/runtime/internal.d.ts +4 -4
  55. package/dist/runtime/internal.js +4 -4
  56. package/dist/runtimes/external-store/external-store-adapter.d.ts +9 -0
  57. package/dist/runtimes/external-store/external-store-adapter.d.ts.map +1 -1
  58. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts +1 -0
  59. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts.map +1 -1
  60. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js +4 -0
  61. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js.map +1 -1
  62. package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts +1 -0
  63. package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts.map +1 -1
  64. package/dist/runtimes/external-store/external-store-thread-runtime-core.js +6 -0
  65. package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
  66. package/dist/runtimes/local/local-thread-runtime-core.d.ts +1 -0
  67. package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
  68. package/dist/runtimes/local/local-thread-runtime-core.js +1 -0
  69. package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
  70. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts +1 -0
  71. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts.map +1 -1
  72. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js +1 -0
  73. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js.map +1 -1
  74. package/dist/runtimes/remote-thread-list/empty-thread-core.js +1 -0
  75. package/dist/runtimes/remote-thread-list/empty-thread-core.js.map +1 -1
  76. package/dist/store/clients/chain-of-thought-client.d.ts.map +1 -1
  77. package/dist/store/clients/chain-of-thought-client.js +29 -23
  78. package/dist/store/clients/chain-of-thought-client.js.map +1 -1
  79. package/dist/store/clients/thread-message-client.d.ts.map +1 -1
  80. package/dist/store/clients/thread-message-client.js +101 -89
  81. package/dist/store/clients/thread-message-client.js.map +1 -1
  82. package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts +1 -0
  83. package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts.map +1 -1
  84. package/dist/store/runtime-clients/thread-list-item-runtime-client.js +66 -45
  85. package/dist/store/runtime-clients/thread-list-item-runtime-client.js.map +1 -1
  86. package/dist/store/runtime-clients/thread-list-runtime-client.d.ts.map +1 -1
  87. package/dist/store/runtime-clients/thread-list-runtime-client.js +91 -75
  88. package/dist/store/runtime-clients/thread-list-runtime-client.js.map +1 -1
  89. package/dist/store/scopes/thread-list-item.d.ts +7 -0
  90. package/dist/store/scopes/thread-list-item.d.ts.map +1 -1
  91. package/dist/store/scopes/threads.d.ts +1 -0
  92. package/dist/store/scopes/threads.d.ts.map +1 -1
  93. package/dist/types/index.d.ts +2 -2
  94. package/dist/types/message.d.ts +22 -1
  95. package/dist/types/message.d.ts.map +1 -1
  96. package/dist/types/message.js.map +1 -1
  97. package/dist/utils/data-url.d.ts +14 -1
  98. package/dist/utils/data-url.d.ts.map +1 -1
  99. package/dist/utils/data-url.js +23 -1
  100. package/dist/utils/data-url.js.map +1 -1
  101. package/dist/utils/getGroupStatus.d.ts +9 -0
  102. package/dist/utils/getGroupStatus.d.ts.map +1 -0
  103. package/dist/utils/getGroupStatus.js +15 -0
  104. package/dist/utils/getGroupStatus.js.map +1 -0
  105. package/dist/utils/image-media-type.d.ts +13 -0
  106. package/dist/utils/image-media-type.d.ts.map +1 -0
  107. package/dist/utils/image-media-type.js +141 -0
  108. package/dist/utils/image-media-type.js.map +1 -0
  109. package/dist/utils/normalizePartStatus.d.ts +8 -0
  110. package/dist/utils/normalizePartStatus.d.ts.map +1 -0
  111. package/dist/utils/normalizePartStatus.js +39 -0
  112. package/dist/utils/normalizePartStatus.js.map +1 -0
  113. package/dist/utils/wire-media.d.ts +35 -0
  114. package/dist/utils/wire-media.d.ts.map +1 -0
  115. package/dist/utils/wire-media.js +55 -0
  116. package/dist/utils/wire-media.js.map +1 -0
  117. package/package.json +4 -4
  118. package/src/index.ts +1 -0
  119. package/src/internal.ts +13 -1
  120. package/src/react/primitive-hooks/useActionBarCopy.test.ts +109 -14
  121. package/src/react/primitive-hooks/useActionBarCopy.ts +27 -2
  122. package/src/react/primitive-hooks/useSuggestionTrigger.test.ts +148 -0
  123. package/src/react/primitive-hooks/useSuggestionTrigger.ts +10 -4
  124. package/src/react/primitives/message/MessageGroupedParts.tsx +4 -4
  125. package/src/react/primitives/message/MessageParts.tsx +6 -1
  126. package/src/react/providers/ReadonlyThreadProvider.tsx +1 -0
  127. package/src/react/runtimes/RemoteThreadListHookInstanceManager.running.test.tsx +157 -0
  128. package/src/react/runtimes/RemoteThreadListHookInstanceManager.test.tsx +160 -0
  129. package/src/react/runtimes/RemoteThreadListHookInstanceManager.tsx +135 -32
  130. package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +37 -0
  131. package/src/react/runtimes/cloud/auiV0.ts +59 -14
  132. package/src/react/types/MessagePartComponentTypes.ts +8 -0
  133. package/src/runtime/api/bindings.ts +5 -0
  134. package/src/runtime/api/message-runtime.test.ts +140 -0
  135. package/src/runtime/api/message-runtime.ts +10 -5
  136. package/src/runtime/api/thread-list-runtime.ts +22 -1
  137. package/src/runtime/api/thread-runtime.ts +15 -6
  138. package/src/runtime/base/base-composer-runtime-core.ts +72 -19
  139. package/src/runtime/interfaces/thread-list-runtime-core.ts +11 -0
  140. package/src/runtime/interfaces/thread-runtime-core.ts +15 -0
  141. package/src/runtimes/external-store/external-store-adapter.ts +9 -0
  142. package/src/runtimes/external-store/external-store-thread-list-runtime-core.ts +9 -0
  143. package/src/runtimes/external-store/external-store-thread-runtime-core.ts +8 -0
  144. package/src/runtimes/local/local-thread-runtime-core.ts +1 -0
  145. package/src/runtimes/readonly/ReadonlyThreadRuntimeCore.ts +1 -0
  146. package/src/runtimes/remote-thread-list/empty-thread-core.ts +1 -0
  147. package/src/store/clients/chain-of-thought-client.ts +2 -7
  148. package/src/store/clients/thread-message-client.test.ts +84 -0
  149. package/src/store/clients/thread-message-client.ts +14 -4
  150. package/src/store/runtime-clients/thread-list-item-runtime-client.ts +13 -2
  151. package/src/store/runtime-clients/thread-list-runtime-client.ts +13 -1
  152. package/src/store/scopes/thread-list-item.ts +7 -0
  153. package/src/store/scopes/threads.ts +1 -0
  154. package/src/tests/RemoteThreadListThreadListRuntimeCore-reloadMainThread.test.ts +257 -0
  155. package/src/tests/auiV0Encode.test.ts +218 -1
  156. package/src/tests/base-composer-runtime-core-addAttachment.test.ts +296 -0
  157. package/src/tests/event-subscription-listener-errors.test.ts +1 -0
  158. package/src/tests/external-store-thread-list-runtime-core.test.ts +39 -1
  159. package/src/types/index.ts +1 -0
  160. package/src/types/message.ts +30 -0
  161. package/src/utils/data-url.ts +24 -0
  162. package/src/utils/getGroupStatus.test.ts +36 -0
  163. package/src/utils/getGroupStatus.ts +31 -0
  164. package/src/utils/image-media-type.test.ts +96 -0
  165. package/src/utils/image-media-type.ts +118 -0
  166. package/src/utils/normalizePartStatus.test.ts +59 -0
  167. package/src/utils/normalizePartStatus.ts +55 -0
  168. package/src/utils/wire-media.test.ts +96 -0
  169. package/src/utils/wire-media.ts +70 -0
@@ -1,44 +1,50 @@
1
+ import { getGroupStatus } from "../../utils/getGroupStatus.js";
1
2
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
2
3
  import { useState } from "@assistant-ui/tap/react-shim";
3
4
  import { resource } from "@assistant-ui/tap";
4
5
  //#region src/store/clients/chain-of-thought-client.ts
5
- const COMPLETE_STATUS = Object.freeze({ type: "complete" });
6
6
  const useChainOfThoughtClient = (t0) => {
7
- const $ = c(9);
7
+ const $ = c(11);
8
8
  const { parts, getMessagePart } = t0;
9
9
  const [collapsed, setCollapsed] = useState(true);
10
- const status = parts[parts.length - 1]?.status ?? COMPLETE_STATUS;
11
10
  let t1;
12
- if ($[0] !== collapsed || $[1] !== parts || $[2] !== status) {
13
- t1 = {
11
+ if ($[0] !== parts) {
12
+ t1 = getGroupStatus(parts);
13
+ $[0] = parts;
14
+ $[1] = t1;
15
+ } else t1 = $[1];
16
+ const status = t1;
17
+ let t2;
18
+ if ($[2] !== collapsed || $[3] !== parts || $[4] !== status) {
19
+ t2 = {
14
20
  parts,
15
21
  collapsed,
16
22
  status
17
23
  };
18
- $[0] = collapsed;
19
- $[1] = parts;
20
- $[2] = status;
21
- $[3] = t1;
22
- } else t1 = $[3];
23
- const state = t1;
24
- let t2;
25
- if ($[4] !== state) {
26
- t2 = () => state;
27
- $[4] = state;
24
+ $[2] = collapsed;
25
+ $[3] = parts;
26
+ $[4] = status;
28
27
  $[5] = t2;
29
28
  } else t2 = $[5];
29
+ const state = t2;
30
30
  let t3;
31
- if ($[6] !== getMessagePart || $[7] !== t2) {
32
- t3 = {
33
- getState: t2,
31
+ if ($[6] !== state) {
32
+ t3 = () => state;
33
+ $[6] = state;
34
+ $[7] = t3;
35
+ } else t3 = $[7];
36
+ let t4;
37
+ if ($[8] !== getMessagePart || $[9] !== t3) {
38
+ t4 = {
39
+ getState: t3,
34
40
  setCollapsed,
35
41
  part: getMessagePart
36
42
  };
37
- $[6] = getMessagePart;
38
- $[7] = t2;
39
- $[8] = t3;
40
- } else t3 = $[8];
41
- return t3;
43
+ $[8] = getMessagePart;
44
+ $[9] = t3;
45
+ $[10] = t4;
46
+ } else t4 = $[10];
47
+ return t4;
42
48
  };
43
49
  const ChainOfThoughtClient = resource(useChainOfThoughtClient);
44
50
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"chain-of-thought-client.js","names":["useMemo","useState","resource","ClientOutput","ChainOfThoughtState","ChainOfThoughtPart","MessagePartStatus","PartMethods","COMPLETE_STATUS","Object","freeze","type","useChainOfThoughtClient","t0","$","_c","parts","getMessagePart","collapsed","setCollapsed","lastPart","length","status","t1","state","t2","t3","getState","part","ChainOfThoughtClient"],"sources":["../../../src/store/clients/chain-of-thought-client.ts"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport { resource } from \"@assistant-ui/tap\";\nimport type { ClientOutput } from \"@assistant-ui/store\";\nimport type {\n ChainOfThoughtState,\n ChainOfThoughtPart,\n} from \"../scopes/chain-of-thought\";\nimport type { MessagePartStatus } from \"../../types/message\";\nimport type { PartMethods } from \"../scopes/part\";\n\nconst COMPLETE_STATUS: MessagePartStatus = Object.freeze({\n type: \"complete\",\n});\n\nconst useChainOfThoughtClient = ({\n parts,\n getMessagePart,\n}: {\n parts: readonly ChainOfThoughtPart[];\n getMessagePart: (selector: { index: number }) => PartMethods;\n}): ClientOutput<\"chainOfThought\"> => {\n const [collapsed, setCollapsed] = useState(true);\n\n const status = useMemo(() => {\n const lastPart = parts[parts.length - 1];\n return lastPart?.status ?? COMPLETE_STATUS;\n }, [parts]);\n\n const state = useMemo<ChainOfThoughtState>(\n () => ({ parts, collapsed, status }),\n [parts, collapsed, status],\n );\n\n return {\n getState: () => state,\n setCollapsed,\n part: getMessagePart,\n };\n};\n\nexport const ChainOfThoughtClient = resource(useChainOfThoughtClient);\n"],"mappings":";;;;AAUA,MAAMQ,kBAAqCC,OAAOC,OAAO,EACvDC,MAAM,WACR,CAAC;AAED,MAAMC,2BAA0BC,OAAA;CAAA,MAAAC,IAAAC,EAAA,CAAA;CAAC,MAAA,EAAAC,OAAAC,mBAAAJ;CAO/B,MAAA,CAAAK,WAAAC,gBAAkClB,SAAS,IAAI;CAE/C,MAAAqB,SACmBN,MAAMA,MAAKK,SAAU,EACvB,EAAAC,UAARd;CACG,IAAAe;CAAA,IAAAT,EAAA,OAAAI,aAAAJ,EAAA,OAAAE,SAAAF,EAAA,OAAAQ,QAAA;EAGHC,KAAA;GAAAP;GAAAE;GAAAI;EAA2B;EAACR,EAAA,KAAAI;EAAAJ,EAAA,KAAAE;EAAAF,EAAA,KAAAQ;EAAAR,EAAA,KAAAS;CAAA,OAAAA,KAAAT,EAAA;CADrC,MAAAU,QACSD;CAEP,IAAAE;CAAA,IAAAX,EAAA,OAAAU,OAAA;EAGUC,WAAMD;EAAKV,EAAA,KAAAU;EAAAV,EAAA,KAAAW;CAAA,OAAAA,KAAAX,EAAA;CAAA,IAAAY;CAAA,IAAAZ,EAAA,OAAAG,kBAAAH,EAAA,OAAAW,IAAA;EADhBC,KAAA;GAAAC,UACKF;GAAWN;GAAAS,MAEfX;EACR;EAACH,EAAA,KAAAG;EAAAH,EAAA,KAAAW;EAAAX,EAAA,KAAAY;CAAA,OAAAA,KAAAZ,EAAA;CAAA,OAJMY;AAIN;AAGH,MAAaG,uBAAuB3B,SAASU,uBAAuB"}
1
+ {"version":3,"file":"chain-of-thought-client.js","names":["useMemo","useState","resource","ClientOutput","ChainOfThoughtState","ChainOfThoughtPart","PartMethods","getGroupStatus","useChainOfThoughtClient","t0","$","_c","parts","getMessagePart","collapsed","setCollapsed","t1","status","t2","state","t3","t4","getState","part","ChainOfThoughtClient"],"sources":["../../../src/store/clients/chain-of-thought-client.ts"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport { resource } from \"@assistant-ui/tap\";\nimport type { ClientOutput } from \"@assistant-ui/store\";\nimport type {\n ChainOfThoughtState,\n ChainOfThoughtPart,\n} from \"../scopes/chain-of-thought\";\nimport type { PartMethods } from \"../scopes/part\";\nimport { getGroupStatus } from \"../../utils/getGroupStatus\";\n\nconst useChainOfThoughtClient = ({\n parts,\n getMessagePart,\n}: {\n parts: readonly ChainOfThoughtPart[];\n getMessagePart: (selector: { index: number }) => PartMethods;\n}): ClientOutput<\"chainOfThought\"> => {\n const [collapsed, setCollapsed] = useState(true);\n\n const status = useMemo(() => {\n return getGroupStatus(parts);\n }, [parts]);\n\n const state = useMemo<ChainOfThoughtState>(\n () => ({ parts, collapsed, status }),\n [parts, collapsed, status],\n );\n\n return {\n getState: () => state,\n setCollapsed,\n part: getMessagePart,\n };\n};\n\nexport const ChainOfThoughtClient = resource(useChainOfThoughtClient);\n"],"mappings":";;;;;AAUA,MAAMQ,2BAA0BC,OAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAC,MAAA,EAAAC,OAAAC,mBAAAJ;CAO/B,MAAA,CAAAK,WAAAC,gBAAkCd,SAAS,IAAI;CAAE,IAAAe;CAAA,IAAAN,EAAA,OAAAE,OAAA;EAGxCI,KAAAT,eAAeK,KAAK;EAACF,EAAA,KAAAE;EAAAF,EAAA,KAAAM;CAAA,OAAAA,KAAAN,EAAA;CAD9B,MAAAO,SACED;CACU,IAAAE;CAAA,IAAAR,EAAA,OAAAI,aAAAJ,EAAA,OAAAE,SAAAF,EAAA,OAAAO,QAAA;EAGHC,KAAA;GAAAN;GAAAE;GAAAG;EAA2B;EAACP,EAAA,KAAAI;EAAAJ,EAAA,KAAAE;EAAAF,EAAA,KAAAO;EAAAP,EAAA,KAAAQ;CAAA,OAAAA,KAAAR,EAAA;CADrC,MAAAS,QACSD;CAEP,IAAAE;CAAA,IAAAV,EAAA,OAAAS,OAAA;EAGUC,WAAMD;EAAKT,EAAA,KAAAS;EAAAT,EAAA,KAAAU;CAAA,OAAAA,KAAAV,EAAA;CAAA,IAAAW;CAAA,IAAAX,EAAA,OAAAG,kBAAAH,EAAA,OAAAU,IAAA;EADhBC,KAAA;GAAAC,UACKF;GAAWL;GAAAQ,MAEfV;EACR;EAACH,EAAA,KAAAG;EAAAH,EAAA,KAAAU;EAAAV,EAAA,MAAAW;CAAA,OAAAA,KAAAX,EAAA;CAAA,OAJMW;AAIN;AAGH,MAAaG,uBAAuBtB,SAASM,uBAAuB"}
@@ -1 +1 @@
1
- {"version":3,"file":"thread-message-client.d.ts","names":[],"sources":["../../../src/store/clients/thread-message-client.ts"],"mappings":";;;KA2DY;EACV,SAAS;EACT;EACA;EACA;EACA;;cAyGW,iDAAmB,SAAA,0BAAA"}
1
+ {"version":3,"file":"thread-message-client.d.ts","names":[],"sources":["../../../src/store/clients/thread-message-client.ts"],"mappings":";;;KAmEY;EACV,SAAS;EACT;EACA;EACA;EACA;;cA2GW,iDAAmB,SAAA,0BAAA"}
@@ -1,4 +1,5 @@
1
1
  import { getThreadMessageText } from "../../utils/text.js";
2
+ import { COMPLETE_STATUS, normalizePartStatus } from "../../utils/normalizePartStatus.js";
2
3
  import { NoOpComposerClient } from "./no-op-composer-client.js";
3
4
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
4
5
  import { useState } from "@assistant-ui/tap/react-shim";
@@ -6,34 +7,37 @@ import { useClientLookup } from "@assistant-ui/store";
6
7
  import { resource, useResource, withKey } from "@assistant-ui/tap";
7
8
  //#region src/store/clients/thread-message-client.ts
8
9
  const useThreadMessagePartClient = (t0) => {
9
- const $ = c(5);
10
- const { part } = t0;
10
+ const $ = c(8);
11
+ const { part, isMessageRunning } = t0;
11
12
  let t1;
12
- if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
13
- t1 = { type: "complete" };
14
- $[0] = t1;
15
- } else t1 = $[0];
13
+ if ($[0] !== isMessageRunning || $[1] !== part) {
14
+ t1 = isMessageRunning ? normalizePartStatus(part) ?? COMPLETE_STATUS : COMPLETE_STATUS;
15
+ $[0] = isMessageRunning;
16
+ $[1] = part;
17
+ $[2] = t1;
18
+ } else t1 = $[2];
16
19
  let t2;
17
- if ($[1] !== part) {
20
+ if ($[3] !== part || $[4] !== t1) {
18
21
  t2 = {
19
22
  ...part,
20
23
  status: t1
21
24
  };
22
- $[1] = part;
23
- $[2] = t2;
24
- } else t2 = $[2];
25
+ $[3] = part;
26
+ $[4] = t1;
27
+ $[5] = t2;
28
+ } else t2 = $[5];
25
29
  const state = t2;
26
30
  let t3;
27
- if ($[3] !== state) {
31
+ if ($[6] !== state) {
28
32
  t3 = {
29
33
  getState: () => state,
30
34
  addToolResult: _temp,
31
35
  resumeToolCall: _temp2,
32
36
  respondToToolApproval: _temp3
33
37
  };
34
- $[3] = state;
35
- $[4] = t3;
36
- } else t3 = $[4];
38
+ $[6] = state;
39
+ $[7] = t3;
40
+ } else t3 = $[7];
37
41
  return t3;
38
42
  };
39
43
  const ThreadMessagePartClient = resource(useThreadMessagePartClient);
@@ -47,48 +51,59 @@ const useThreadMessageAttachmentClient = ({ attachment }) => {
47
51
  };
48
52
  const ThreadMessageAttachmentClient = resource(useThreadMessageAttachmentClient);
49
53
  const useThreadMessageClient = (t0) => {
50
- const $ = c(35);
54
+ const $ = c(38);
51
55
  const { message, index, isLast: t1, branchNumber: t2, branchCount: t3 } = t0;
52
56
  const isLast = t1 === void 0 ? true : t1;
53
57
  const branchNumber = t2 === void 0 ? 1 : t2;
54
58
  const branchCount = t3 === void 0 ? 1 : t3;
55
59
  const [isCopiedState, setIsCopied] = useState(false);
56
60
  const [isHoveringState, setIsHovering] = useState(false);
61
+ const isMessageRunning = message.role === "assistant" && message.status.type === "running";
57
62
  let t4;
58
- if ($[0] !== message.content) {
59
- t4 = message.content.map(_temp4);
60
- $[0] = message.content;
61
- $[1] = t4;
62
- } else t4 = $[1];
63
+ if ($[0] !== isMessageRunning || $[1] !== message.content) {
64
+ let t5;
65
+ if ($[3] !== isMessageRunning) {
66
+ t5 = (part, idx) => withKey("toolCallId" in part && part.toolCallId != null ? `toolCallId-${part.toolCallId}` : `index-${idx}`, ThreadMessagePartClient({
67
+ part,
68
+ isMessageRunning
69
+ }), [part, isMessageRunning]);
70
+ $[3] = isMessageRunning;
71
+ $[4] = t5;
72
+ } else t5 = $[4];
73
+ t4 = message.content.map(t5);
74
+ $[0] = isMessageRunning;
75
+ $[1] = message.content;
76
+ $[2] = t4;
77
+ } else t4 = $[2];
63
78
  const parts = useClientLookup(t4);
64
79
  let t5;
65
- if ($[2] !== message.attachments) {
80
+ if ($[5] !== message.attachments) {
66
81
  t5 = message.attachments ?? [];
67
- $[2] = message.attachments;
68
- $[3] = t5;
69
- } else t5 = $[3];
82
+ $[5] = message.attachments;
83
+ $[6] = t5;
84
+ } else t5 = $[6];
70
85
  let t6;
71
- if ($[4] !== t5) {
72
- t6 = t5.map(_temp5);
73
- $[4] = t5;
74
- $[5] = t6;
75
- } else t6 = $[5];
86
+ if ($[7] !== t5) {
87
+ t6 = t5.map(_temp4);
88
+ $[7] = t5;
89
+ $[8] = t6;
90
+ } else t6 = $[8];
76
91
  const attachments = useClientLookup(t6);
77
92
  let t7;
78
- if ($[6] === Symbol.for("react.memo_cache_sentinel")) {
93
+ if ($[9] === Symbol.for("react.memo_cache_sentinel")) {
79
94
  t7 = NoOpComposerClient({ type: "edit" });
80
- $[6] = t7;
81
- } else t7 = $[6];
95
+ $[9] = t7;
96
+ } else t7 = $[9];
82
97
  const composer = useResource(t7);
83
98
  let t8;
84
- if ($[7] !== composer) {
99
+ if ($[10] !== composer) {
85
100
  t8 = composer.getState();
86
- $[7] = composer;
87
- $[8] = t8;
88
- } else t8 = $[8];
101
+ $[10] = composer;
102
+ $[11] = t8;
103
+ } else t8 = $[11];
89
104
  const composerState = t8;
90
105
  let t9;
91
- if ($[9] !== branchCount || $[10] !== branchNumber || $[11] !== composerState || $[12] !== index || $[13] !== isCopiedState || $[14] !== isHoveringState || $[15] !== isLast || $[16] !== message || $[17] !== parts.state) {
106
+ if ($[12] !== branchCount || $[13] !== branchNumber || $[14] !== composerState || $[15] !== index || $[16] !== isCopiedState || $[17] !== isHoveringState || $[18] !== isLast || $[19] !== message || $[20] !== parts.state) {
92
107
  t9 = {
93
108
  ...message,
94
109
  parts: parts.state,
@@ -102,78 +117,78 @@ const useThreadMessageClient = (t0) => {
102
117
  isCopied: isCopiedState,
103
118
  isHovering: isHoveringState
104
119
  };
105
- $[9] = branchCount;
106
- $[10] = branchNumber;
107
- $[11] = composerState;
108
- $[12] = index;
109
- $[13] = isCopiedState;
110
- $[14] = isHoveringState;
111
- $[15] = isLast;
112
- $[16] = message;
113
- $[17] = parts.state;
114
- $[18] = t9;
115
- } else t9 = $[18];
120
+ $[12] = branchCount;
121
+ $[13] = branchNumber;
122
+ $[14] = composerState;
123
+ $[15] = index;
124
+ $[16] = isCopiedState;
125
+ $[17] = isHoveringState;
126
+ $[18] = isLast;
127
+ $[19] = message;
128
+ $[20] = parts.state;
129
+ $[21] = t9;
130
+ } else t9 = $[21];
116
131
  const state = t9;
117
132
  let t10;
118
- if ($[19] !== state) {
133
+ if ($[22] !== state) {
119
134
  t10 = () => state;
120
- $[19] = state;
121
- $[20] = t10;
122
- } else t10 = $[20];
135
+ $[22] = state;
136
+ $[23] = t10;
137
+ } else t10 = $[23];
123
138
  let t11;
124
- if ($[21] !== composer) {
139
+ if ($[24] !== composer) {
125
140
  t11 = () => composer;
126
- $[21] = composer;
127
- $[22] = t11;
128
- } else t11 = $[22];
141
+ $[24] = composer;
142
+ $[25] = t11;
143
+ } else t11 = $[25];
129
144
  let t12;
130
- if ($[23] !== parts) {
145
+ if ($[26] !== parts) {
131
146
  t12 = (selector) => {
132
147
  if ("index" in selector) return parts.get({ index: selector.index });
133
148
  else return parts.get({ key: `toolCallId-${selector.toolCallId}` });
134
149
  };
135
- $[23] = parts;
136
- $[24] = t12;
137
- } else t12 = $[24];
150
+ $[26] = parts;
151
+ $[27] = t12;
152
+ } else t12 = $[27];
138
153
  let t13;
139
- if ($[25] !== attachments) {
154
+ if ($[28] !== attachments) {
140
155
  t13 = (selector_0) => {
141
156
  if ("id" in selector_0) return attachments.get({ key: selector_0.id });
142
157
  else return attachments.get(selector_0);
143
158
  };
144
- $[25] = attachments;
145
- $[26] = t13;
146
- } else t13 = $[26];
159
+ $[28] = attachments;
160
+ $[29] = t13;
161
+ } else t13 = $[29];
147
162
  let t14;
148
- if ($[27] !== message) {
163
+ if ($[30] !== message) {
149
164
  t14 = () => getThreadMessageText(message);
150
- $[27] = message;
151
- $[28] = t14;
152
- } else t14 = $[28];
165
+ $[30] = message;
166
+ $[31] = t14;
167
+ } else t14 = $[31];
153
168
  let t15;
154
- if ($[29] !== t10 || $[30] !== t11 || $[31] !== t12 || $[32] !== t13 || $[33] !== t14) {
169
+ if ($[32] !== t10 || $[33] !== t11 || $[34] !== t12 || $[35] !== t13 || $[36] !== t14) {
155
170
  t15 = {
156
171
  getState: t10,
157
172
  composer: t11,
158
173
  part: t12,
159
174
  attachment: t13,
160
- delete: _temp6,
161
- reload: _temp7,
162
- speak: _temp8,
163
- stopSpeaking: _temp9,
164
- submitFeedback: _temp0,
165
- switchToBranch: _temp1,
175
+ delete: _temp5,
176
+ reload: _temp6,
177
+ speak: _temp7,
178
+ stopSpeaking: _temp8,
179
+ submitFeedback: _temp9,
180
+ switchToBranch: _temp0,
166
181
  getCopyText: t14,
167
182
  setIsCopied,
168
183
  setIsHovering
169
184
  };
170
- $[29] = t10;
171
- $[30] = t11;
172
- $[31] = t12;
173
- $[32] = t13;
174
- $[33] = t14;
175
- $[34] = t15;
176
- } else t15 = $[34];
185
+ $[32] = t10;
186
+ $[33] = t11;
187
+ $[34] = t12;
188
+ $[35] = t13;
189
+ $[36] = t14;
190
+ $[37] = t15;
191
+ } else t15 = $[37];
177
192
  return t15;
178
193
  };
179
194
  const ThreadMessageClient = resource(useThreadMessageClient);
@@ -186,12 +201,12 @@ function _temp2() {
186
201
  function _temp3() {
187
202
  throw new Error("Not supported");
188
203
  }
189
- function _temp4(part, idx) {
190
- return withKey("toolCallId" in part && part.toolCallId != null ? `toolCallId-${part.toolCallId}` : `index-${idx}`, ThreadMessagePartClient({ part }), [part]);
191
- }
192
- function _temp5(attachment) {
204
+ function _temp4(attachment) {
193
205
  return withKey(attachment.id, ThreadMessageAttachmentClient({ attachment }), [attachment]);
194
206
  }
207
+ function _temp5() {
208
+ throw new Error("Not supported in ThreadMessageProvider");
209
+ }
195
210
  function _temp6() {
196
211
  throw new Error("Not supported in ThreadMessageProvider");
197
212
  }
@@ -207,9 +222,6 @@ function _temp9() {
207
222
  function _temp0() {
208
223
  throw new Error("Not supported in ThreadMessageProvider");
209
224
  }
210
- function _temp1() {
211
- throw new Error("Not supported in ThreadMessageProvider");
212
- }
213
225
  //#endregion
214
226
  export { ThreadMessageClient };
215
227
 
@@ -1 +1 @@
1
- {"version":3,"file":"thread-message-client.js","names":["ThreadAssistantMessagePart","ThreadUserMessagePart","ThreadMessage","Attachment","useMemo","useState","useResource","resource","withKey","ClientOutput","useClientLookup","MessageState","PartState","NoOpComposerClient","getThreadMessageText","useThreadMessagePartClient","t0","$","_c","part","t1","Symbol","for","type","t2","status","state","t3","getState","addToolResult","_temp","resumeToolCall","_temp2","respondToToolApproval","_temp3","ThreadMessagePartClient","useThreadMessageAttachmentClient","attachment","remove","Error","ThreadMessageAttachmentClient","ThreadMessageClientProps","message","index","isLast","branchNumber","branchCount","useThreadMessageClient","undefined","isCopiedState","setIsCopied","isHoveringState","setIsHovering","t4","content","map","_temp4","parts","t5","attachments","t6","_temp5","t7","composer","t8","composerState","t9","parentId","speech","isCopied","isHovering","t10","t11","t12","selector","get","key","toolCallId","t13","selector_0","id","t14","t15","delete","_temp6","reload","_temp7","speak","_temp8","stopSpeaking","_temp9","submitFeedback","_temp0","switchToBranch","_temp1","getCopyText","ThreadMessageClient","idx"],"sources":["../../../src/store/clients/thread-message-client.ts"],"sourcesContent":["import type {\n ThreadAssistantMessagePart,\n ThreadUserMessagePart,\n ThreadMessage,\n} from \"../../types/message\";\nimport type { Attachment } from \"../../types/attachment\";\nimport { useMemo, useState } from \"react\";\nimport { useResource, resource, withKey } from \"@assistant-ui/tap\";\nimport type { ClientOutput } from \"@assistant-ui/store\";\nimport { useClientLookup } from \"@assistant-ui/store\";\nimport type { MessageState } from \"../scopes/message\";\nimport type { PartState } from \"../scopes/part\";\nimport { NoOpComposerClient } from \"./no-op-composer-client\";\nimport { getThreadMessageText } from \"../../utils/text\";\n\nconst useThreadMessagePartClient = ({\n part,\n}: {\n part: ThreadAssistantMessagePart | ThreadUserMessagePart;\n}): ClientOutput<\"part\"> => {\n const state = useMemo<PartState>(() => {\n return {\n ...part,\n status: { type: \"complete\" },\n };\n }, [part]);\n\n return {\n getState: () => state,\n addToolResult: () => {\n throw new Error(\"Not supported\");\n },\n resumeToolCall: () => {\n throw new Error(\"Not supported\");\n },\n respondToToolApproval: () => {\n throw new Error(\"Not supported\");\n },\n };\n};\n\nconst ThreadMessagePartClient = resource(useThreadMessagePartClient);\n\nconst useThreadMessageAttachmentClient = ({\n attachment,\n}: {\n attachment: Attachment;\n}): ClientOutput<\"attachment\"> => {\n return {\n getState: () => attachment,\n remove: () => {\n throw new Error(\"Not supported\");\n },\n };\n};\n\nconst ThreadMessageAttachmentClient = resource(\n useThreadMessageAttachmentClient,\n);\nexport type ThreadMessageClientProps = {\n message: ThreadMessage;\n index: number;\n isLast?: boolean;\n branchNumber?: number;\n branchCount?: number;\n};\n\nconst useThreadMessageClient = ({\n message,\n index,\n isLast = true,\n branchNumber = 1,\n branchCount = 1,\n}: ThreadMessageClientProps): ClientOutput<\"message\"> => {\n const [isCopiedState, setIsCopied] = useState(false);\n const [isHoveringState, setIsHovering] = useState(false);\n\n const parts = useClientLookup(\n message.content.map((part, idx) =>\n withKey(\n \"toolCallId\" in part && part.toolCallId != null\n ? `toolCallId-${part.toolCallId}`\n : `index-${idx}`,\n ThreadMessagePartClient({ part }),\n [part],\n ),\n ),\n );\n\n const attachments = useClientLookup(\n (message.attachments ?? []).map((attachment) =>\n withKey(attachment.id, ThreadMessageAttachmentClient({ attachment }), [\n attachment,\n ]),\n ),\n );\n\n const composer = useResource(NoOpComposerClient({ type: \"edit\" }));\n const composerState = composer.getState();\n\n const state = useMemo<MessageState>(() => {\n return {\n ...message,\n parts: parts.state,\n composer: composerState,\n parentId: null,\n index,\n isLast,\n branchNumber,\n branchCount,\n speech: undefined,\n isCopied: isCopiedState,\n isHovering: isHoveringState,\n };\n }, [\n message,\n index,\n isCopiedState,\n isHoveringState,\n isLast,\n parts.state,\n composerState,\n branchNumber,\n branchCount,\n ]);\n\n return {\n getState: () => state,\n composer: () => composer,\n part: (selector) => {\n if (\"index\" in selector) {\n return parts.get({ index: selector.index });\n } else {\n return parts.get({ key: `toolCallId-${selector.toolCallId}` });\n }\n },\n attachment: (selector) => {\n if (\"id\" in selector) {\n return attachments.get({ key: selector.id });\n } else {\n return attachments.get(selector);\n }\n },\n delete: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n reload: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n speak: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n stopSpeaking: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n submitFeedback: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n switchToBranch: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n getCopyText: () => {\n return getThreadMessageText(message);\n },\n setIsCopied,\n setIsHovering,\n };\n};\n\nexport const ThreadMessageClient = resource(useThreadMessageClient);\n"],"mappings":"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"}
1
+ {"version":3,"file":"thread-message-client.js","names":["ThreadAssistantMessagePart","ThreadUserMessagePart","ThreadMessage","Attachment","useMemo","useState","useResource","resource","withKey","ClientOutput","useClientLookup","MessageState","PartState","NoOpComposerClient","COMPLETE_STATUS","normalizePartStatus","getThreadMessageText","useThreadMessagePartClient","t0","$","_c","part","isMessageRunning","t1","t2","status","state","t3","getState","addToolResult","_temp","resumeToolCall","_temp2","respondToToolApproval","_temp3","ThreadMessagePartClient","useThreadMessageAttachmentClient","attachment","remove","Error","ThreadMessageAttachmentClient","ThreadMessageClientProps","message","index","isLast","branchNumber","branchCount","useThreadMessageClient","undefined","isCopiedState","setIsCopied","isHoveringState","setIsHovering","role","type","t4","content","t5","idx","toolCallId","map","parts","attachments","t6","_temp4","t7","Symbol","for","composer","t8","composerState","t9","parentId","speech","isCopied","isHovering","t10","t11","t12","selector","get","key","t13","selector_0","id","t14","t15","delete","_temp5","reload","_temp6","speak","_temp7","stopSpeaking","_temp8","submitFeedback","_temp9","switchToBranch","_temp0","getCopyText","ThreadMessageClient"],"sources":["../../../src/store/clients/thread-message-client.ts"],"sourcesContent":["import type {\n ThreadAssistantMessagePart,\n ThreadUserMessagePart,\n ThreadMessage,\n} from \"../../types/message\";\nimport type { Attachment } from \"../../types/attachment\";\nimport { useMemo, useState } from \"react\";\nimport { useResource, resource, withKey } from \"@assistant-ui/tap\";\nimport type { ClientOutput } from \"@assistant-ui/store\";\nimport { useClientLookup } from \"@assistant-ui/store\";\nimport type { MessageState } from \"../scopes/message\";\nimport type { PartState } from \"../scopes/part\";\nimport { NoOpComposerClient } from \"./no-op-composer-client\";\nimport {\n COMPLETE_STATUS,\n normalizePartStatus,\n} from \"../../utils/normalizePartStatus\";\nimport { getThreadMessageText } from \"../../utils/text\";\n\nconst useThreadMessagePartClient = ({\n part,\n isMessageRunning,\n}: {\n part: ThreadAssistantMessagePart | ThreadUserMessagePart;\n isMessageRunning: boolean;\n}): ClientOutput<\"part\"> => {\n const state = useMemo<PartState>(() => {\n return {\n ...part,\n status: isMessageRunning\n ? (normalizePartStatus(part) ?? COMPLETE_STATUS)\n : COMPLETE_STATUS,\n };\n }, [part, isMessageRunning]);\n\n return {\n getState: () => state,\n addToolResult: () => {\n throw new Error(\"Not supported\");\n },\n resumeToolCall: () => {\n throw new Error(\"Not supported\");\n },\n respondToToolApproval: () => {\n throw new Error(\"Not supported\");\n },\n };\n};\n\nconst ThreadMessagePartClient = resource(useThreadMessagePartClient);\n\nconst useThreadMessageAttachmentClient = ({\n attachment,\n}: {\n attachment: Attachment;\n}): ClientOutput<\"attachment\"> => {\n return {\n getState: () => attachment,\n remove: () => {\n throw new Error(\"Not supported\");\n },\n };\n};\n\nconst ThreadMessageAttachmentClient = resource(\n useThreadMessageAttachmentClient,\n);\nexport type ThreadMessageClientProps = {\n message: ThreadMessage;\n index: number;\n isLast?: boolean;\n branchNumber?: number;\n branchCount?: number;\n};\n\nconst useThreadMessageClient = ({\n message,\n index,\n isLast = true,\n branchNumber = 1,\n branchCount = 1,\n}: ThreadMessageClientProps): ClientOutput<\"message\"> => {\n const [isCopiedState, setIsCopied] = useState(false);\n const [isHoveringState, setIsHovering] = useState(false);\n const isMessageRunning =\n message.role === \"assistant\" && message.status.type === \"running\";\n\n const parts = useClientLookup(\n message.content.map((part, idx) =>\n withKey(\n \"toolCallId\" in part && part.toolCallId != null\n ? `toolCallId-${part.toolCallId}`\n : `index-${idx}`,\n ThreadMessagePartClient({ part, isMessageRunning }),\n [part, isMessageRunning],\n ),\n ),\n );\n\n const attachments = useClientLookup(\n (message.attachments ?? []).map((attachment) =>\n withKey(attachment.id, ThreadMessageAttachmentClient({ attachment }), [\n attachment,\n ]),\n ),\n );\n\n const composer = useResource(NoOpComposerClient({ type: \"edit\" }));\n const composerState = composer.getState();\n\n const state = useMemo<MessageState>(() => {\n return {\n ...message,\n parts: parts.state,\n composer: composerState,\n parentId: null,\n index,\n isLast,\n branchNumber,\n branchCount,\n speech: undefined,\n isCopied: isCopiedState,\n isHovering: isHoveringState,\n };\n }, [\n message,\n index,\n isCopiedState,\n isHoveringState,\n isLast,\n parts.state,\n composerState,\n branchNumber,\n branchCount,\n ]);\n\n return {\n getState: () => state,\n composer: () => composer,\n part: (selector) => {\n if (\"index\" in selector) {\n return parts.get({ index: selector.index });\n } else {\n return parts.get({ key: `toolCallId-${selector.toolCallId}` });\n }\n },\n attachment: (selector) => {\n if (\"id\" in selector) {\n return attachments.get({ key: selector.id });\n } else {\n return attachments.get(selector);\n }\n },\n delete: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n reload: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n speak: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n stopSpeaking: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n submitFeedback: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n switchToBranch: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n getCopyText: () => {\n return getThreadMessageText(message);\n },\n setIsCopied,\n setIsHovering,\n };\n};\n\nexport const ThreadMessageClient = resource(useThreadMessageClient);\n"],"mappings":"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"}
@@ -3,6 +3,7 @@ import { ClientOutput } from "@assistant-ui/store";
3
3
  //#region src/store/runtime-clients/thread-list-item-runtime-client.d.ts
4
4
  declare const ThreadListItemClient: import("@assistant-ui/tap").Resource<ClientOutput<"threadListItem">, [{
5
5
  runtime: ThreadListItemRuntime;
6
+ mainThreadIsRunning?: boolean | undefined;
6
7
  }]>;
7
8
  //#endregion
8
9
  export { ThreadListItemClient };
@@ -1 +1 @@
1
- {"version":3,"file":"thread-list-item-runtime-client.d.ts","names":[],"sources":["../../../src/store/runtime-clients/thread-list-item-runtime-client.ts"],"mappings":";;;cAyDa,kDAAoB,SAAA;EA5CtB,SAAA"}
1
+ {"version":3,"file":"thread-list-item-runtime-client.d.ts","names":[],"sources":["../../../src/store/runtime-clients/thread-list-item-runtime-client.ts"],"mappings":";;;cAoEa,kDAAoB,SAAA;EAtDtB,SAAA;EAIa"}
@@ -5,14 +5,35 @@ import { useAssistantEmit } from "@assistant-ui/store";
5
5
  import { resource } from "@assistant-ui/tap";
6
6
  //#region src/store/runtime-clients/thread-list-item-runtime-client.ts
7
7
  const useThreadListItemClient = (t0) => {
8
- const $ = c(20);
9
- const { runtime } = t0;
10
- const state = useSubscribable(runtime);
11
- const emit = useAssistantEmit();
12
- let t1;
8
+ const $ = c(23);
9
+ const { runtime, mainThreadIsRunning: t1 } = t0;
10
+ const mainThreadIsRunning = t1 === void 0 ? false : t1;
11
+ const runtimeState = useSubscribable(runtime);
13
12
  let t2;
14
- if ($[0] !== emit || $[1] !== runtime) {
15
- t1 = () => {
13
+ bb0: {
14
+ const isRunning = runtimeState.isRunning || runtimeState.isMain && mainThreadIsRunning;
15
+ if (isRunning === runtimeState.isRunning) {
16
+ t2 = runtimeState;
17
+ break bb0;
18
+ }
19
+ let t3;
20
+ if ($[0] !== isRunning || $[1] !== runtimeState) {
21
+ t3 = {
22
+ ...runtimeState,
23
+ isRunning
24
+ };
25
+ $[0] = isRunning;
26
+ $[1] = runtimeState;
27
+ $[2] = t3;
28
+ } else t3 = $[2];
29
+ t2 = t3;
30
+ }
31
+ const state = t2;
32
+ const emit = useAssistantEmit();
33
+ let t3;
34
+ let t4;
35
+ if ($[3] !== emit || $[4] !== runtime) {
36
+ t3 = () => {
16
37
  const unsubscribers = [];
17
38
  for (const event of ["switchedTo", "switchedAway"]) {
18
39
  const unsubscribe = runtime.unstable_on(event, () => {
@@ -24,32 +45,32 @@ const useThreadListItemClient = (t0) => {
24
45
  for (const unsub of unsubscribers) unsub();
25
46
  };
26
47
  };
27
- t2 = [runtime, emit];
28
- $[0] = emit;
29
- $[1] = runtime;
30
- $[2] = t1;
31
- $[3] = t2;
48
+ t4 = [runtime, emit];
49
+ $[3] = emit;
50
+ $[4] = runtime;
51
+ $[5] = t3;
52
+ $[6] = t4;
32
53
  } else {
33
- t1 = $[2];
34
- t2 = $[3];
54
+ t3 = $[5];
55
+ t4 = $[6];
35
56
  }
36
- useEffect(t1, t2);
37
- let t3;
38
- if ($[4] !== state) {
39
- t3 = () => state;
40
- $[4] = state;
41
- $[5] = t3;
42
- } else t3 = $[5];
43
- let t4;
44
- if ($[6] !== runtime) {
45
- t4 = () => runtime;
46
- $[6] = runtime;
47
- $[7] = t4;
48
- } else t4 = $[7];
57
+ useEffect(t3, t4);
49
58
  let t5;
50
- if ($[8] !== runtime.archive || $[9] !== runtime.delete || $[10] !== runtime.detach || $[11] !== runtime.generateTitle || $[12] !== runtime.initialize || $[13] !== runtime.rename || $[14] !== runtime.switchTo || $[15] !== runtime.unarchive || $[16] !== runtime.updateCustom || $[17] !== t3 || $[18] !== t4) {
51
- t5 = {
52
- getState: t3,
59
+ if ($[7] !== state) {
60
+ t5 = () => state;
61
+ $[7] = state;
62
+ $[8] = t5;
63
+ } else t5 = $[8];
64
+ let t6;
65
+ if ($[9] !== runtime) {
66
+ t6 = () => runtime;
67
+ $[9] = runtime;
68
+ $[10] = t6;
69
+ } else t6 = $[10];
70
+ let t7;
71
+ if ($[11] !== runtime.archive || $[12] !== runtime.delete || $[13] !== runtime.detach || $[14] !== runtime.generateTitle || $[15] !== runtime.initialize || $[16] !== runtime.rename || $[17] !== runtime.switchTo || $[18] !== runtime.unarchive || $[19] !== runtime.updateCustom || $[20] !== t5 || $[21] !== t6) {
72
+ t7 = {
73
+ getState: t5,
53
74
  switchTo: runtime.switchTo,
54
75
  rename: runtime.rename,
55
76
  updateCustom: runtime.updateCustom,
@@ -59,22 +80,22 @@ const useThreadListItemClient = (t0) => {
59
80
  generateTitle: runtime.generateTitle,
60
81
  initialize: runtime.initialize,
61
82
  detach: runtime.detach,
62
- __internal_getRuntime: t4
83
+ __internal_getRuntime: t6
63
84
  };
64
- $[8] = runtime.archive;
65
- $[9] = runtime.delete;
66
- $[10] = runtime.detach;
67
- $[11] = runtime.generateTitle;
68
- $[12] = runtime.initialize;
69
- $[13] = runtime.rename;
70
- $[14] = runtime.switchTo;
71
- $[15] = runtime.unarchive;
72
- $[16] = runtime.updateCustom;
73
- $[17] = t3;
74
- $[18] = t4;
75
- $[19] = t5;
76
- } else t5 = $[19];
77
- return t5;
85
+ $[11] = runtime.archive;
86
+ $[12] = runtime.delete;
87
+ $[13] = runtime.detach;
88
+ $[14] = runtime.generateTitle;
89
+ $[15] = runtime.initialize;
90
+ $[16] = runtime.rename;
91
+ $[17] = runtime.switchTo;
92
+ $[18] = runtime.unarchive;
93
+ $[19] = runtime.updateCustom;
94
+ $[20] = t5;
95
+ $[21] = t6;
96
+ $[22] = t7;
97
+ } else t7 = $[22];
98
+ return t7;
78
99
  };
79
100
  const ThreadListItemClient = resource(useThreadListItemClient);
80
101
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"thread-list-item-runtime-client.js","names":["Unsubscribe","useEffect","resource","ClientOutput","useAssistantEmit","ThreadListItemEventType","ThreadListItemRuntime","useSubscribable","useThreadListItemClient","t0","$","_c","runtime","state","emit","t1","t2","unsubscribers","threadListItemEvents","event","unsubscribe","unstable_on","threadId","getState","id","push","unsub","t3","t4","t5","archive","delete","detach","generateTitle","initialize","rename","switchTo","unarchive","updateCustom","__internal_getRuntime","ThreadListItemClient"],"sources":["../../../src/store/runtime-clients/thread-list-item-runtime-client.ts"],"sourcesContent":["import type { Unsubscribe } from \"../../types/unsubscribe\";\nimport { useEffect } from \"react\";\nimport { resource } from \"@assistant-ui/tap\";\nimport { type ClientOutput, useAssistantEmit } from \"@assistant-ui/store\";\nimport type {\n ThreadListItemEventType,\n ThreadListItemRuntime,\n} from \"../../runtime/api/thread-list-item-runtime\";\nimport { useSubscribable } from \"./useSubscribable\";\n\nconst useThreadListItemClient = ({\n runtime,\n}: {\n runtime: ThreadListItemRuntime;\n}): ClientOutput<\"threadListItem\"> => {\n const state = useSubscribable(runtime);\n const emit = useAssistantEmit();\n\n // Bind thread list item events to event manager\n useEffect(() => {\n const unsubscribers: Unsubscribe[] = [];\n\n // Subscribe to thread list item events\n const threadListItemEvents: ThreadListItemEventType[] = [\n \"switchedTo\",\n \"switchedAway\",\n ];\n\n for (const event of threadListItemEvents) {\n const unsubscribe = runtime.unstable_on(event, () => {\n emit(`threadListItem.${event}`, {\n threadId: runtime.getState()!.id,\n });\n });\n unsubscribers.push(unsubscribe);\n }\n\n return () => {\n for (const unsub of unsubscribers) unsub();\n };\n }, [runtime, emit]);\n\n return {\n getState: () => state,\n switchTo: runtime.switchTo,\n rename: runtime.rename,\n updateCustom: runtime.updateCustom,\n archive: runtime.archive,\n unarchive: runtime.unarchive,\n delete: runtime.delete,\n generateTitle: runtime.generateTitle,\n initialize: runtime.initialize,\n detach: runtime.detach,\n __internal_getRuntime: () => runtime,\n };\n};\n\nexport const ThreadListItemClient = resource(useThreadListItemClient);\n"],"mappings":";;;;;;AAUA,MAAMQ,2BAA0BC,OAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAC,MAAA,EAAAC,YAAAH;CAK/B,MAAAI,QAAcN,gBAAgBK,OAAO;CACrC,MAAAE,OAAaV,iBAAiB;CAAE,IAAAW;CAAA,IAAAC;CAAA,IAAAN,EAAA,OAAAI,QAAAJ,EAAA,OAAAE,SAAA;EAGtBG,WAAA;GACR,MAAAE,gBAAqC,CAAA;GAQrC,KAAK,MAAAE,SAAeD,CAJlB,cACA,cAGkBA,GAAoB;IACtC,MAAAE,cAAoBR,QAAOS,YAAaF,aAAO;KAC7CL,KAAK,kBAAkBK,SAAS,EAAAG,UACpBV,QAAOW,SAAU,CAAC,CAAAC,GAC9B,CAAC;IAAC,CACH;IACDP,cAAaQ,KAAML,WAAW;GAAC;GAChC,aAEM;IACL,KAAK,MAAAM,SAAeT,eAAeS,MAAM;GAAE;EAC5C;EACAV,KAAA,CAACJ,SAASE,IAAI;EAACJ,EAAA,KAAAI;EAAAJ,EAAA,KAAAE;EAAAF,EAAA,KAAAK;EAAAL,EAAA,KAAAM;CAAA,OAAA;EAAAD,KAAAL,EAAA;EAAAM,KAAAN,EAAA;CAAA;CArBlBT,UAAUc,IAqBPC,EAAe;CAAC,IAAAW;CAAA,IAAAjB,EAAA,OAAAG,OAAA;EAGPc,WAAMd;EAAKH,EAAA,KAAAG;EAAAH,EAAA,KAAAiB;CAAA,OAAAA,KAAAjB,EAAA;CAAA,IAAAkB;CAAA,IAAAlB,EAAA,OAAAE,SAAA;EAUEgB,WAAMhB;EAAOF,EAAA,KAAAE;EAAAF,EAAA,KAAAkB;CAAA,OAAAA,KAAAlB,EAAA;CAAA,IAAAmB;CAAA,IAAAnB,EAAA,OAAAE,QAAAkB,WAAApB,EAAA,OAAAE,QAAAmB,UAAArB,EAAA,QAAAE,QAAAoB,UAAAtB,EAAA,QAAAE,QAAAqB,iBAAAvB,EAAA,QAAAE,QAAAsB,cAAAxB,EAAA,QAAAE,QAAAuB,UAAAzB,EAAA,QAAAE,QAAAwB,YAAA1B,EAAA,QAAAE,QAAAyB,aAAA3B,EAAA,QAAAE,QAAA0B,gBAAA5B,EAAA,QAAAiB,MAAAjB,EAAA,QAAAkB,IAAA;EAX/BC,KAAA;GAAAN,UACKI;GAAWS,UACXxB,QAAOwB;GAASD,QAClBvB,QAAOuB;GAAOG,cACR1B,QAAO0B;GAAaR,SACzBlB,QAAOkB;GAAQO,WACbzB,QAAOyB;GAAUN,QACpBnB,QAAOmB;GAAOE,eACPrB,QAAOqB;GAAcC,YACxBtB,QAAOsB;GAAWF,QACtBpB,QAAOoB;GAAOO,uBACCX;EACzB;EAAClB,EAAA,KAAAE,QAAAkB;EAAApB,EAAA,KAAAE,QAAAmB;EAAArB,EAAA,MAAAE,QAAAoB;EAAAtB,EAAA,MAAAE,QAAAqB;EAAAvB,EAAA,MAAAE,QAAAsB;EAAAxB,EAAA,MAAAE,QAAAuB;EAAAzB,EAAA,MAAAE,QAAAwB;EAAA1B,EAAA,MAAAE,QAAAyB;EAAA3B,EAAA,MAAAE,QAAA0B;EAAA5B,EAAA,MAAAiB;EAAAjB,EAAA,MAAAkB;EAAAlB,EAAA,MAAAmB;CAAA,OAAAA,KAAAnB,EAAA;CAAA,OAZMmB;AAYN;AAGH,MAAaW,uBAAuBtC,SAASM,uBAAuB"}
1
+ {"version":3,"file":"thread-list-item-runtime-client.js","names":["Unsubscribe","useEffect","useMemo","resource","ClientOutput","useAssistantEmit","ThreadListItemEventType","ThreadListItemRuntime","useSubscribable","useThreadListItemClient","t0","$","_c","runtime","mainThreadIsRunning","t1","undefined","runtimeState","t2","bb0","isRunning","isMain","t3","state","emit","t4","unsubscribers","threadListItemEvents","event","unsubscribe","unstable_on","threadId","getState","id","push","unsub","t5","t6","t7","archive","delete","detach","generateTitle","initialize","rename","switchTo","unarchive","updateCustom","__internal_getRuntime","ThreadListItemClient"],"sources":["../../../src/store/runtime-clients/thread-list-item-runtime-client.ts"],"sourcesContent":["import type { Unsubscribe } from \"../../types/unsubscribe\";\nimport { useEffect, useMemo } from \"react\";\nimport { resource } from \"@assistant-ui/tap\";\nimport { type ClientOutput, useAssistantEmit } from \"@assistant-ui/store\";\nimport type {\n ThreadListItemEventType,\n ThreadListItemRuntime,\n} from \"../../runtime/api/thread-list-item-runtime\";\nimport { useSubscribable } from \"./useSubscribable\";\n\nconst useThreadListItemClient = ({\n runtime,\n mainThreadIsRunning = false,\n}: {\n runtime: ThreadListItemRuntime;\n // A thread list that cannot report per-thread run state still leaves the open\n // thread observable, and the thread client tracks that reactively. Omitted\n // where the runtime state is already authoritative for every thread.\n mainThreadIsRunning?: boolean | undefined;\n}): ClientOutput<\"threadListItem\"> => {\n const runtimeState = useSubscribable(runtime);\n const state = useMemo(() => {\n const isRunning =\n runtimeState.isRunning || (runtimeState.isMain && mainThreadIsRunning);\n if (isRunning === runtimeState.isRunning) return runtimeState;\n return { ...runtimeState, isRunning };\n }, [runtimeState, mainThreadIsRunning]);\n const emit = useAssistantEmit();\n\n // Bind thread list item events to event manager\n useEffect(() => {\n const unsubscribers: Unsubscribe[] = [];\n\n // Subscribe to thread list item events\n const threadListItemEvents: ThreadListItemEventType[] = [\n \"switchedTo\",\n \"switchedAway\",\n ];\n\n for (const event of threadListItemEvents) {\n const unsubscribe = runtime.unstable_on(event, () => {\n emit(`threadListItem.${event}`, {\n threadId: runtime.getState()!.id,\n });\n });\n unsubscribers.push(unsubscribe);\n }\n\n return () => {\n for (const unsub of unsubscribers) unsub();\n };\n }, [runtime, emit]);\n\n return {\n getState: () => state,\n switchTo: runtime.switchTo,\n rename: runtime.rename,\n updateCustom: runtime.updateCustom,\n archive: runtime.archive,\n unarchive: runtime.unarchive,\n delete: runtime.delete,\n generateTitle: runtime.generateTitle,\n initialize: runtime.initialize,\n detach: runtime.detach,\n __internal_getRuntime: () => runtime,\n };\n};\n\nexport const ThreadListItemClient = resource(useThreadListItemClient);\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"thread-list-runtime-client.d.ts","names":[],"sources":["../../../src/store/runtime-clients/thread-list-runtime-client.ts"],"mappings":";;;;cAoGa,8CAAgB,SAAA;EA9DlB,SAAA;EACoB,6BAAA"}
1
+ {"version":3,"file":"thread-list-runtime-client.d.ts","names":[],"sources":["../../../src/store/runtime-clients/thread-list-runtime-client.ts"],"mappings":";;;;cAgHa,8CAAgB,SAAA;EAvElB,SAAA;EACoB,6BAAA"}