@assistant-ui/core 0.3.12 → 0.3.13

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 (107) hide show
  1. package/dist/index.d.ts +2 -2
  2. package/dist/index.js +2 -2
  3. package/dist/index.js.map +1 -1
  4. package/dist/react/client/interactable-model-context.d.ts.map +1 -1
  5. package/dist/react/client/interactable-model-context.js +5 -1
  6. package/dist/react/client/interactable-model-context.js.map +1 -1
  7. package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
  8. package/dist/runtime/api/thread-runtime.js +5 -1
  9. package/dist/runtime/api/thread-runtime.js.map +1 -1
  10. package/dist/runtime/base/base-composer-runtime-core.d.ts +25 -0
  11. package/dist/runtime/base/base-composer-runtime-core.d.ts.map +1 -1
  12. package/dist/runtime/base/base-composer-runtime-core.js +64 -11
  13. package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
  14. package/dist/runtime/base/base-thread-runtime-core.d.ts +14 -0
  15. package/dist/runtime/base/base-thread-runtime-core.d.ts.map +1 -1
  16. package/dist/runtime/base/base-thread-runtime-core.js +31 -0
  17. package/dist/runtime/base/base-thread-runtime-core.js.map +1 -1
  18. package/dist/runtime/base/default-edit-composer-runtime-core.d.ts.map +1 -1
  19. package/dist/runtime/base/default-edit-composer-runtime-core.js +1 -6
  20. package/dist/runtime/base/default-edit-composer-runtime-core.js.map +1 -1
  21. package/dist/runtime/base/default-thread-composer-runtime-core.d.ts.map +1 -1
  22. package/dist/runtime/base/default-thread-composer-runtime-core.js +1 -4
  23. package/dist/runtime/base/default-thread-composer-runtime-core.js.map +1 -1
  24. package/dist/runtime/queue/external-thread-queue-adapter.d.ts +15 -0
  25. package/dist/runtime/queue/external-thread-queue-adapter.d.ts.map +1 -1
  26. package/dist/runtime/queue/message-queue.js +23 -10
  27. package/dist/runtime/queue/message-queue.js.map +1 -1
  28. package/dist/runtimes/external-store/external-store-adapter.d.ts +7 -0
  29. package/dist/runtimes/external-store/external-store-adapter.d.ts.map +1 -1
  30. package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts +3 -1
  31. package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts.map +1 -1
  32. package/dist/runtimes/external-store/external-store-thread-runtime-core.js +49 -13
  33. package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
  34. package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
  35. package/dist/runtimes/local/local-thread-runtime-core.js +2 -1
  36. package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
  37. package/dist/store/clients/external-thread.d.ts +7 -0
  38. package/dist/store/clients/external-thread.d.ts.map +1 -1
  39. package/dist/store/clients/external-thread.js +460 -369
  40. package/dist/store/clients/external-thread.js.map +1 -1
  41. package/dist/store/clients/runtime-adapter.d.ts.map +1 -1
  42. package/dist/store/clients/runtime-adapter.js +5 -2
  43. package/dist/store/clients/runtime-adapter.js.map +1 -1
  44. package/dist/store/clients/single-thread-list.d.ts.map +1 -1
  45. package/dist/store/clients/single-thread-list.js +31 -27
  46. package/dist/store/clients/single-thread-list.js.map +1 -1
  47. package/dist/store/clients/suggestions.d.ts +3 -1
  48. package/dist/store/clients/suggestions.d.ts.map +1 -1
  49. package/dist/store/clients/suggestions.js +65 -37
  50. package/dist/store/clients/suggestions.js.map +1 -1
  51. package/dist/store/index.d.ts +2 -2
  52. package/dist/store/index.js +1 -1
  53. package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts.map +1 -1
  54. package/dist/store/runtime-clients/thread-list-item-runtime-client.js +64 -50
  55. package/dist/store/runtime-clients/thread-list-item-runtime-client.js.map +1 -1
  56. package/dist/store/runtime-clients/thread-runtime-client.d.ts.map +1 -1
  57. package/dist/store/runtime-clients/thread-runtime-client.js +98 -82
  58. package/dist/store/runtime-clients/thread-runtime-client.js.map +1 -1
  59. package/dist/store/scope-registration.d.ts +2 -2
  60. package/dist/store/scopes/suggestions.d.ts +6 -1
  61. package/dist/store/scopes/suggestions.d.ts.map +1 -1
  62. package/dist/store/scopes/thread.d.ts +17 -0
  63. package/dist/store/scopes/thread.d.ts.map +1 -1
  64. package/dist/types/error.d.ts +15 -1
  65. package/dist/types/error.d.ts.map +1 -1
  66. package/dist/types/error.js +18 -1
  67. package/dist/types/error.js.map +1 -1
  68. package/dist/types/message.d.ts +2 -0
  69. package/dist/types/message.d.ts.map +1 -1
  70. package/dist/types/message.js.map +1 -1
  71. package/package.json +5 -5
  72. package/src/index.ts +1 -0
  73. package/src/react/client/interactable-model-context.ts +6 -1
  74. package/src/react/runtimes/useExternalStoreRuntime.suggestions.test.tsx +114 -0
  75. package/src/runtime/api/thread-runtime.ts +8 -1
  76. package/src/runtime/base/base-composer-runtime-core.ts +100 -8
  77. package/src/runtime/base/base-thread-runtime-core.ts +36 -0
  78. package/src/runtime/base/default-edit-composer-runtime-core.ts +1 -15
  79. package/src/runtime/base/default-thread-composer-runtime-core.ts +1 -11
  80. package/src/runtime/queue/external-thread-queue-adapter.ts +17 -0
  81. package/src/runtime/queue/message-queue.ts +26 -9
  82. package/src/runtimes/external-store/external-store-adapter.ts +7 -0
  83. package/src/runtimes/external-store/external-store-thread-runtime-core.ts +100 -26
  84. package/src/runtimes/local/local-thread-runtime-core.ts +4 -1
  85. package/src/store/clients/external-thread.ts +119 -16
  86. package/src/store/clients/runtime-adapter.ts +5 -2
  87. package/src/store/clients/single-thread-list.ts +2 -1
  88. package/src/store/clients/suggestions.ts +39 -13
  89. package/src/store/runtime-clients/thread-list-item-runtime-client.ts +13 -28
  90. package/src/store/runtime-clients/thread-runtime-client.ts +5 -0
  91. package/src/store/scopes/suggestions.ts +6 -0
  92. package/src/store/scopes/thread.ts +17 -0
  93. package/src/tests/append-interactable-snapshots.test.ts +350 -0
  94. package/src/tests/base-composer-runtime-core-send.test.ts +126 -0
  95. package/src/tests/base-composer-runtime-core.test.ts +108 -1
  96. package/src/tests/default-edit-composer-runtime-core.test.ts +0 -68
  97. package/src/tests/external-store-thread-runtime-core-adapter.test.ts +300 -0
  98. package/src/tests/external-thread-attachments.test.tsx +214 -0
  99. package/src/tests/external-thread-parity.test.tsx +54 -0
  100. package/src/tests/external-thread-refetch.test.tsx +117 -0
  101. package/src/tests/external-thread-suggestions.test.tsx +59 -0
  102. package/src/tests/message-queue.test.ts +26 -0
  103. package/src/tests/thread-message-like.test.ts +39 -0
  104. package/src/tests/thread-switch-events.test.tsx +136 -0
  105. package/src/types/error.ts +24 -0
  106. package/src/types/message.ts +2 -0
  107. package/src/tests/default-thread-composer-runtime-core.test.ts +0 -82
@@ -7,53 +7,77 @@ const useSuggestionClient = (state) => {
7
7
  return { getState: () => state };
8
8
  };
9
9
  const SuggestionClient = resource(useSuggestionClient);
10
- const useSuggestionsResource = (suggestions) => {
11
- const $ = c(11);
10
+ const useSuggestionsClient = (state) => {
11
+ const $ = c(9);
12
12
  let t0;
13
- if ($[0] !== suggestions) {
14
- t0 = () => {
15
- return { suggestions: (suggestions ?? []).map(_temp) };
16
- };
17
- $[0] = suggestions;
13
+ if ($[0] !== state.suggestions) {
14
+ t0 = state.suggestions.map(_temp);
15
+ $[0] = state.suggestions;
18
16
  $[1] = t0;
19
17
  } else t0 = $[1];
20
- const [state] = useState(t0);
18
+ const suggestionClients = useClientLookup(t0);
21
19
  let t1;
22
- if ($[2] !== state.suggestions) {
23
- t1 = state.suggestions.map(_temp2);
24
- $[2] = state.suggestions;
20
+ if ($[2] !== state) {
21
+ t1 = () => state;
22
+ $[2] = state;
25
23
  $[3] = t1;
26
24
  } else t1 = $[3];
27
- const suggestionClients = useClientLookup(t1);
28
25
  let t2;
29
- if ($[4] !== state) {
30
- t2 = () => state;
31
- $[4] = state;
26
+ if ($[4] !== suggestionClients) {
27
+ t2 = (t3) => {
28
+ const { index: index_0 } = t3;
29
+ return suggestionClients.get({ index: index_0 });
30
+ };
31
+ $[4] = suggestionClients;
32
32
  $[5] = t2;
33
33
  } else t2 = $[5];
34
34
  let t3;
35
- if ($[6] !== suggestionClients) {
36
- t3 = (t4) => {
37
- const { index: index_0 } = t4;
38
- return suggestionClients.get({ index: index_0 });
35
+ if ($[6] !== t1 || $[7] !== t2) {
36
+ t3 = {
37
+ getState: t1,
38
+ suggestion: t2
39
39
  };
40
- $[6] = suggestionClients;
41
- $[7] = t3;
42
- } else t3 = $[7];
43
- let t4;
44
- if ($[8] !== t2 || $[9] !== t3) {
45
- t4 = {
46
- getState: t2,
47
- suggestion: t3
40
+ $[6] = t1;
41
+ $[7] = t2;
42
+ $[8] = t3;
43
+ } else t3 = $[8];
44
+ return t3;
45
+ };
46
+ const useStaticSuggestions = (suggestions) => {
47
+ const $ = c(2);
48
+ let t0;
49
+ if ($[0] !== suggestions) {
50
+ t0 = () => {
51
+ return { suggestions: (suggestions ?? []).map(_temp2) };
48
52
  };
49
- $[8] = t2;
50
- $[9] = t3;
51
- $[10] = t4;
52
- } else t4 = $[10];
53
- return t4;
53
+ $[0] = suggestions;
54
+ $[1] = t0;
55
+ } else t0 = $[1];
56
+ const [state] = useState(t0);
57
+ return useSuggestionsClient(state);
54
58
  };
55
- const Suggestions = resource(useSuggestionsResource);
56
- function _temp(s) {
59
+ const Suggestions = resource(useStaticSuggestions);
60
+ const useThreadSuggestions = (suggestions) => {
61
+ const $ = c(4);
62
+ let t0;
63
+ if ($[0] !== suggestions) {
64
+ t0 = suggestions.map(_temp3);
65
+ $[0] = suggestions;
66
+ $[1] = t0;
67
+ } else t0 = $[1];
68
+ let t1;
69
+ if ($[2] !== t0) {
70
+ t1 = { suggestions: t0 };
71
+ $[2] = t0;
72
+ $[3] = t1;
73
+ } else t1 = $[3];
74
+ return useSuggestionsClient(t1);
75
+ };
76
+ const ThreadSuggestions = resource(useThreadSuggestions);
77
+ function _temp(suggestion, index) {
78
+ return withKey(index, SuggestionClient(suggestion), [suggestion]);
79
+ }
80
+ function _temp2(s) {
57
81
  if (typeof s === "string") return {
58
82
  title: s,
59
83
  label: "",
@@ -65,10 +89,14 @@ function _temp(s) {
65
89
  prompt: s.prompt
66
90
  };
67
91
  }
68
- function _temp2(suggestion, index) {
69
- return withKey(index, SuggestionClient(suggestion), [suggestion]);
92
+ function _temp3(s) {
93
+ return {
94
+ title: s.prompt,
95
+ label: "",
96
+ prompt: s.prompt
97
+ };
70
98
  }
71
99
  //#endregion
72
- export { Suggestions };
100
+ export { Suggestions, ThreadSuggestions };
73
101
 
74
102
  //# sourceMappingURL=suggestions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"suggestions.js","names":["useState","resource","withKey","ClientOutput","useClientLookup","SuggestionsState","SuggestionState","SuggestionConfig","title","label","prompt","useSuggestionClient","state","getState","SuggestionClient","useSuggestionsResource","suggestions","$","_c","t0","normalizedSuggestions","map","_temp","t1","_temp2","suggestionClients","t2","t3","t4","index","index_0","get","suggestion","Suggestions","s"],"sources":["../../../src/store/clients/suggestions.ts"],"sourcesContent":["import { useState } from \"react\";\nimport { resource, withKey } from \"@assistant-ui/tap\";\nimport type { ClientOutput } from \"@assistant-ui/store\";\nimport { useClientLookup } from \"@assistant-ui/store/client\";\nimport type { SuggestionsState } from \"../scopes/suggestions\";\nimport type { SuggestionState } from \"../scopes/suggestion\";\n\nexport type SuggestionConfig =\n | string\n | { title: string; label: string; prompt: string };\n\nconst useSuggestionClient = (\n state: SuggestionState,\n): ClientOutput<\"suggestion\"> => {\n return {\n getState: () => state,\n };\n};\n\nconst SuggestionClient = resource(useSuggestionClient);\n\nconst useSuggestionsResource = (\n suggestions?: SuggestionConfig[],\n): ClientOutput<\"suggestions\"> => {\n const [state] = useState<SuggestionsState>(() => {\n const normalizedSuggestions = (suggestions ?? []).map((s) => {\n if (typeof s === \"string\") {\n return {\n title: s,\n label: \"\",\n prompt: s,\n };\n }\n return {\n title: s.title,\n label: s.label,\n prompt: s.prompt,\n };\n });\n\n return {\n suggestions: normalizedSuggestions,\n };\n });\n\n const suggestionClients = useClientLookup(\n state.suggestions.map((suggestion, index) =>\n withKey(index, SuggestionClient(suggestion), [suggestion]),\n ),\n );\n\n return {\n getState: () => state,\n suggestion: ({ index }: { index: number }) => {\n return suggestionClients.get({ index });\n },\n };\n};\n\nexport const Suggestions = resource(useSuggestionsResource);\n"],"mappings":";;;;;AAWA,MAAMW,uBACJC,UAC+B;CAC/B,OAAO,EACLC,gBAAgBD,MAClB;AACF;AAEA,MAAME,mBAAmBb,SAASU,mBAAmB;AAErD,MAAMI,0BAAyBC,gBAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAA,IAAAC;CAAA,IAAAF,EAAA,OAAAD,aAAA;EAGcG,WAAA;GActC,OAEI,EAAAH,cAfwBA,eAAA,CAAA,EAAA,CAAiBK,IAAMC,KAgBvCF,EACf;EAAC;EACFH,EAAA,KAAAD;EAAAC,EAAA,KAAAE;CAAA,OAAAA,KAAAF,EAAA;CAnBD,MAAA,CAAAL,SAAgBZ,SAA2BmB,EAmB1C;CAAE,IAAAI;CAAA,IAAAN,EAAA,OAAAL,MAAAI,aAAA;EAGDO,KAAAX,MAAKI,YAAYK,IAAKG,MAEtB;EAACP,EAAA,KAAAL,MAAAI;EAAAC,EAAA,KAAAM;CAAA,OAAAA,KAAAN,EAAA;CAHH,MAAAQ,oBAA0BrB,gBACxBmB,EAGF;CAAE,IAAAG;CAAA,IAAAT,EAAA,OAAAL,OAAA;EAGUc,WAAMd;EAAKK,EAAA,KAAAL;EAAAK,EAAA,KAAAS;CAAA,OAAAA,KAAAT,EAAA;CAAA,IAAAU;CAAA,IAAAV,EAAA,OAAAQ,mBAAA;EACTE,MAAAC,OAAA;GAAC,MAAA,EAAAC,OAAAC,YAAAF;GAA4B,OAChCH,kBAAiBM,IAAK,EAAAF,OAAEA,QAAM,CAAC;EAAC;EACxCZ,EAAA,KAAAQ;EAAAR,EAAA,KAAAU;CAAA,OAAAA,KAAAV,EAAA;CAAA,IAAAW;CAAA,IAAAX,EAAA,OAAAS,MAAAT,EAAA,OAAAU,IAAA;EAJIC,KAAA;GAAAf,UACKa;GAAWM,YACTL;EAGd;EAACV,EAAA,KAAAS;EAAAT,EAAA,KAAAU;EAAAV,EAAA,MAAAW;CAAA,OAAAA,KAAAX,EAAA;CAAA,OALMW;AAKN;AAGH,MAAaK,cAAchC,SAASc,sBAAsB;AAtC3B,SAAAO,MAAAY,GAAA;CAKzB,IAAI,OAAOA,MAAM,UAAQ,OAChB;EAAA1B,OACE0B;EAACzB,OACD;EAAEC,QACDwB;CACV;CACD,OACM;EAAA1B,OACE0B,EAAC1B;EAAMC,OACPyB,EAACzB;EAAMC,QACNwB,EAACxB;CACX;AAAC;AAhBwB,SAAAc,OAAAQ,YAAAH,OAAA;CAAA,OA0BzB3B,QAAQ2B,OAAOf,iBAAiBkB,UAAU,GAAG,CAACA,UAAU,CAAC;AAAC"}
1
+ {"version":3,"file":"suggestions.js","names":["useMemo","useState","resource","withKey","ClientOutput","useClientLookup","SuggestionsState","SuggestionState","ThreadSuggestion","SuggestionConfig","title","label","prompt","useSuggestionClient","state","getState","SuggestionClient","useSuggestionsClient","$","_c","t0","suggestions","map","_temp","suggestionClients","t1","t2","t3","index","index_0","get","suggestion","useStaticSuggestions","normalizedSuggestions","_temp2","Suggestions","useThreadSuggestions","_temp3","ThreadSuggestions","s"],"sources":["../../../src/store/clients/suggestions.ts"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport { resource, withKey } from \"@assistant-ui/tap\";\nimport type { ClientOutput } from \"@assistant-ui/store\";\nimport { useClientLookup } from \"@assistant-ui/store/client\";\nimport type { SuggestionsState } from \"../scopes/suggestions\";\nimport type { SuggestionState } from \"../scopes/suggestion\";\nimport type { ThreadSuggestion } from \"../../runtime/interfaces/thread-runtime-core\";\n\nexport type SuggestionConfig =\n | string\n | { title: string; label: string; prompt: string };\n\nconst useSuggestionClient = (\n state: SuggestionState,\n): ClientOutput<\"suggestion\"> => {\n return {\n getState: () => state,\n };\n};\n\nconst SuggestionClient = resource(useSuggestionClient);\n\nconst useSuggestionsClient = (\n state: SuggestionsState,\n): ClientOutput<\"suggestions\"> => {\n const suggestionClients = useClientLookup(\n state.suggestions.map((suggestion, index) =>\n withKey(index, SuggestionClient(suggestion), [suggestion]),\n ),\n );\n\n return {\n getState: () => state,\n suggestion: ({ index }: { index: number }) => {\n return suggestionClients.get({ index });\n },\n };\n};\n\nconst useStaticSuggestions = (\n suggestions?: SuggestionConfig[],\n): ClientOutput<\"suggestions\"> => {\n const [state] = useState<SuggestionsState>(() => {\n const normalizedSuggestions = (suggestions ?? []).map((s) => {\n if (typeof s === \"string\") {\n return {\n title: s,\n label: \"\",\n prompt: s,\n };\n }\n return {\n title: s.title,\n label: s.label,\n prompt: s.prompt,\n };\n });\n\n return {\n suggestions: normalizedSuggestions,\n };\n });\n\n return useSuggestionsClient(state);\n};\n\nexport const Suggestions = resource(useStaticSuggestions);\n\nconst useThreadSuggestions = (\n suggestions: readonly ThreadSuggestion[],\n): ClientOutput<\"suggestions\"> => {\n const state = useMemo<SuggestionsState>(\n () => ({\n suggestions: suggestions.map((s) => ({\n title: s.prompt,\n label: \"\",\n prompt: s.prompt,\n })),\n }),\n [suggestions],\n );\n\n return useSuggestionsClient(state);\n};\n\nexport const ThreadSuggestions = resource(useThreadSuggestions);\n"],"mappings":";;;;;AAYA,MAAMa,uBACJC,UAC+B;CAC/B,OAAO,EACLC,gBAAgBD,MAClB;AACF;AAEA,MAAME,mBAAmBd,SAASW,mBAAmB;AAErD,MAAMI,wBAAuBH,UAAA;CAAA,MAAAI,IAAAC,EAAA,CAAA;CAAA,IAAAC;CAAA,IAAAF,EAAA,OAAAJ,MAAAO,aAAA;EAIzBD,KAAAN,MAAKO,YAAYC,IAAKC,KAEtB;EAACL,EAAA,KAAAJ,MAAAO;EAAAH,EAAA,KAAAE;CAAA,OAAAA,KAAAF,EAAA;CAHH,MAAAM,oBAA0BnB,gBACxBe,EAGF;CAAE,IAAAK;CAAA,IAAAP,EAAA,OAAAJ,OAAA;EAGUW,WAAMX;EAAKI,EAAA,KAAAJ;EAAAI,EAAA,KAAAO;CAAA,OAAAA,KAAAP,EAAA;CAAA,IAAAQ;CAAA,IAAAR,EAAA,OAAAM,mBAAA;EACTE,MAAAC,OAAA;GAAC,MAAA,EAAAC,OAAAC,YAAAF;GAA4B,OAChCH,kBAAiBM,IAAK,EAAAF,OAAEA,QAAM,CAAC;EAAC;EACxCV,EAAA,KAAAM;EAAAN,EAAA,KAAAQ;CAAA,OAAAA,KAAAR,EAAA;CAAA,IAAAS;CAAA,IAAAT,EAAA,OAAAO,MAAAP,EAAA,OAAAQ,IAAA;EAJIC,KAAA;GAAAZ,UACKU;GAAWM,YACTL;EAGd;EAACR,EAAA,KAAAO;EAAAP,EAAA,KAAAQ;EAAAR,EAAA,KAAAS;CAAA,OAAAA,KAAAT,EAAA;CAAA,OALMS;AAKN;AAGH,MAAMK,wBAAuBX,gBAAA;CAAA,MAAAH,IAAAC,EAAA,CAAA;CAAA,IAAAC;CAAA,IAAAF,EAAA,OAAAG,aAAA;EAGgBD,WAAA;GActC,OAEI,EAAAC,cAfwBA,eAAA,CAAA,EAAA,CAAiBC,IAAMY,MAgBvCD,EACf;EAAC;EACFf,EAAA,KAAAG;EAAAH,EAAA,KAAAE;CAAA,OAAAA,KAAAF,EAAA;CAnBD,MAAA,CAAAJ,SAAgBb,SAA2BmB,EAmB1C;CAAE,OAEIH,qBAAqBH,KAAK;AAAC;AAGpC,MAAaqB,cAAcjC,SAAS8B,oBAAoB;AAExD,MAAMI,wBAAuBf,gBAAA;CAAA,MAAAH,IAAAC,EAAA,CAAA;CAAA,IAAAC;CAAA,IAAAF,EAAA,OAAAG,aAAA;EAKVD,KAAAC,YAAWC,IAAKe,MAI3B;EAACnB,EAAA,KAAAG;EAAAH,EAAA,KAAAE;CAAA,OAAAA,KAAAF,EAAA;CAAA,IAAAO;CAAA,IAAAP,EAAA,OAAAE,IAAA;EALEK,KAAA,EAAAJ,aACQD,GAKf;EAACF,EAAA,KAAAE;EAAAF,EAAA,KAAAO;CAAA,OAAAA,KAAAP,EAAA;CAED,OAEKD,qBAAqBH,EAAK;AAAC;AAGpC,MAAawB,oBAAoBpC,SAASkC,oBAAoB;AA/DjC,SAAAb,MAAAQ,YAAAH,OAAA;CAAA,OAKvBzB,QAAQyB,OAAOZ,iBAAiBe,UAAU,GAAG,CAACA,UAAU,CAAC;AAAC;AAYnC,SAAAG,OAAAK,GAAA;CAKvB,IAAI,OAAOA,MAAM,UAAQ,OAChB;EAAA7B,OACE6B;EAAC5B,OACD;EAAEC,QACD2B;CACV;CACD,OACM;EAAA7B,OACE6B,EAAC7B;EAAMC,OACP4B,EAAC5B;EAAMC,QACN2B,EAAC3B;CACX;AAAC;AAasB,SAAAyB,OAAAE,GAAA;CAAA,OAKc;EAAA7B,OAC5B6B,EAAC3B;EAAOD,OACR;EAAEC,QACD2B,EAAC3B;CACX;AAAC"}
@@ -6,10 +6,10 @@ import { AttachmentClientSchema, AttachmentMeta, AttachmentMethods, AttachmentSt
6
6
  import { ComposerClientSchema, ComposerEvents, ComposerMeta, ComposerMethods, ComposerSendOptions, ComposerState } from "./scopes/composer.js";
7
7
  import { PartClientSchema, PartMeta, PartMethods, PartState } from "./scopes/part.js";
8
8
  import { MessageClientSchema, MessageMeta, MessageMethods, MessageState } from "./scopes/message.js";
9
- import { ThreadClientSchema, ThreadEvents, ThreadMeta, ThreadMethods, ThreadState } from "./scopes/thread.js";
10
- import { ThreadsClientSchema, ThreadsMethods, ThreadsState } from "./scopes/threads.js";
11
9
  import { SuggestionClientSchema, SuggestionMeta, SuggestionMethods, SuggestionState } from "./scopes/suggestion.js";
12
10
  import { Suggestion, SuggestionsClientSchema, SuggestionsMethods, SuggestionsState } from "./scopes/suggestions.js";
11
+ import { ThreadClientSchema, ThreadEvents, ThreadMeta, ThreadMethods, ThreadState } from "./scopes/thread.js";
12
+ import { ThreadsClientSchema, ThreadsMethods, ThreadsState } from "./scopes/threads.js";
13
13
  import { ModelContextClientSchema, ModelContextMethods, ModelContextState } from "./scopes/model-context.js";
14
14
  import { ChainOfThoughtClientSchema, ChainOfThoughtMeta, ChainOfThoughtMethods, ChainOfThoughtPart, ChainOfThoughtState } from "./scopes/chain-of-thought.js";
15
15
  import { RuntimeAdapter } from "../react/RuntimeAdapter.js";
@@ -1,5 +1,5 @@
1
- import { ModelContext } from "./clients/model-context-client.js";
2
1
  import { Suggestions } from "./clients/suggestions.js";
2
+ import { ModelContext } from "./clients/model-context-client.js";
3
3
  import { RuntimeAdapter } from "../react/RuntimeAdapter.js";
4
4
  import { defineToolkit } from "../react/model-context/define-toolkit.js";
5
5
  import { defineMcpToolkit } from "../react/model-context/define-mcp-toolkit.js";
@@ -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":";;;cAqEa,kDAAoB,SAAA;EAtDtB,SAAA;EAIa"}
1
+ {"version":3,"file":"thread-list-item-runtime-client.d.ts","names":[],"sources":["../../../src/store/runtime-clients/thread-list-item-runtime-client.ts"],"mappings":";;;cAsDa,kDAAoB,SAAA;EA3CtB,SAAA;EAIa"}
@@ -1,11 +1,11 @@
1
1
  import { useSubscribable } from "./useSubscribable.js";
2
2
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
3
- import { useEffect } from "@assistant-ui/tap/react-shim";
3
+ import { useEffect, useRef } from "@assistant-ui/tap/react-shim";
4
4
  import { resource } from "@assistant-ui/tap";
5
5
  import { useAssistantEmit } from "@assistant-ui/store/client";
6
6
  //#region src/store/runtime-clients/thread-list-item-runtime-client.ts
7
7
  const useThreadListItemClient = (t0) => {
8
- const $ = c(23);
8
+ const $ = c(27);
9
9
  const { runtime, mainThreadIsRunning: t1 } = t0;
10
10
  const mainThreadIsRunning = t1 === void 0 ? false : t1;
11
11
  const runtimeState = useSubscribable(runtime);
@@ -30,47 +30,61 @@ const useThreadListItemClient = (t0) => {
30
30
  }
31
31
  const state = t2;
32
32
  const emit = useAssistantEmit();
33
+ const { isMain, id: threadId } = runtimeState;
33
34
  let t3;
35
+ if ($[3] !== isMain || $[4] !== threadId) {
36
+ t3 = {
37
+ isMain,
38
+ threadId
39
+ };
40
+ $[3] = isMain;
41
+ $[4] = threadId;
42
+ $[5] = t3;
43
+ } else t3 = $[5];
44
+ const selectionRef = useRef(t3);
34
45
  let t4;
35
- if ($[3] !== emit || $[4] !== runtime) {
36
- t3 = () => {
37
- const unsubscribers = [];
38
- for (const event of ["switchedTo", "switchedAway"]) {
39
- const unsubscribe = runtime.unstable_on(event, () => {
40
- emit(`threadListItem.${event}`, { threadId: runtime.getState().id });
41
- });
42
- unsubscribers.push(unsubscribe);
43
- }
44
- return () => {
45
- for (const unsub of unsubscribers) unsub();
46
+ let t5;
47
+ if ($[6] !== emit || $[7] !== isMain || $[8] !== threadId) {
48
+ t4 = () => {
49
+ const previous = selectionRef.current;
50
+ if (previous.isMain === isMain && previous.threadId === threadId) return;
51
+ selectionRef.current = {
52
+ isMain,
53
+ threadId
46
54
  };
55
+ emit(isMain ? "threadListItem.switchedTo" : "threadListItem.switchedAway", { threadId });
47
56
  };
48
- t4 = [runtime, emit];
49
- $[3] = emit;
50
- $[4] = runtime;
51
- $[5] = t3;
52
- $[6] = t4;
57
+ t5 = [
58
+ isMain,
59
+ threadId,
60
+ emit
61
+ ];
62
+ $[6] = emit;
63
+ $[7] = isMain;
64
+ $[8] = threadId;
65
+ $[9] = t4;
66
+ $[10] = t5;
53
67
  } else {
54
- t3 = $[5];
55
- t4 = $[6];
68
+ t4 = $[9];
69
+ t5 = $[10];
56
70
  }
57
- useEffect(t3, t4);
58
- let t5;
59
- if ($[7] !== state) {
60
- t5 = () => state;
61
- $[7] = state;
62
- $[8] = t5;
63
- } else t5 = $[8];
71
+ useEffect(t4, t5);
64
72
  let t6;
65
- if ($[9] !== runtime) {
66
- t6 = () => runtime;
67
- $[9] = runtime;
68
- $[10] = t6;
69
- } else t6 = $[10];
73
+ if ($[11] !== state) {
74
+ t6 = () => state;
75
+ $[11] = state;
76
+ $[12] = t6;
77
+ } else t6 = $[12];
70
78
  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,
79
+ if ($[13] !== runtime) {
80
+ t7 = () => runtime;
81
+ $[13] = runtime;
82
+ $[14] = t7;
83
+ } else t7 = $[14];
84
+ let t8;
85
+ if ($[15] !== runtime.archive || $[16] !== runtime.delete || $[17] !== runtime.detach || $[18] !== runtime.generateTitle || $[19] !== runtime.initialize || $[20] !== runtime.rename || $[21] !== runtime.switchTo || $[22] !== runtime.unarchive || $[23] !== runtime.updateCustom || $[24] !== t6 || $[25] !== t7) {
86
+ t8 = {
87
+ getState: t6,
74
88
  switchTo: runtime.switchTo,
75
89
  rename: runtime.rename,
76
90
  updateCustom: runtime.updateCustom,
@@ -80,22 +94,22 @@ const useThreadListItemClient = (t0) => {
80
94
  generateTitle: runtime.generateTitle,
81
95
  initialize: runtime.initialize,
82
96
  detach: runtime.detach,
83
- __internal_getRuntime: t6
97
+ __internal_getRuntime: t7
84
98
  };
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;
99
+ $[15] = runtime.archive;
100
+ $[16] = runtime.delete;
101
+ $[17] = runtime.detach;
102
+ $[18] = runtime.generateTitle;
103
+ $[19] = runtime.initialize;
104
+ $[20] = runtime.rename;
105
+ $[21] = runtime.switchTo;
106
+ $[22] = runtime.unarchive;
107
+ $[23] = runtime.updateCustom;
108
+ $[24] = t6;
109
+ $[25] = t7;
110
+ $[26] = t8;
111
+ } else t8 = $[26];
112
+ return t8;
99
113
  };
100
114
  const ThreadListItemClient = resource(useThreadListItemClient);
101
115
  //#endregion
@@ -1 +1 @@
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 } from \"@assistant-ui/store\";\nimport { useAssistantEmit } from \"@assistant-ui/store/client\";\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
+ {"version":3,"file":"thread-list-item-runtime-client.js","names":["useEffect","useMemo","useRef","resource","ClientOutput","useAssistantEmit","ThreadListItemRuntime","useSubscribable","useThreadListItemClient","t0","$","_c","runtime","mainThreadIsRunning","t1","undefined","runtimeState","t2","bb0","isRunning","isMain","t3","state","emit","id","threadId","selectionRef","t4","t5","previous","current","t6","t7","t8","archive","delete","detach","generateTitle","initialize","rename","switchTo","unarchive","updateCustom","getState","__internal_getRuntime","ThreadListItemClient"],"sources":["../../../src/store/runtime-clients/thread-list-item-runtime-client.ts"],"sourcesContent":["import { useEffect, useMemo, useRef } from \"react\";\nimport { resource } from \"@assistant-ui/tap\";\nimport type { ClientOutput } from \"@assistant-ui/store\";\nimport { useAssistantEmit } from \"@assistant-ui/store/client\";\nimport type { ThreadListItemRuntime } 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 // Emitted after the flush that rebinds the derived scopes; the runtime's own\n // synchronous notification would be delivered against the pre-switch binding.\n const { isMain, id: threadId } = runtimeState;\n const selectionRef = useRef({ isMain, threadId });\n useEffect(() => {\n const previous = selectionRef.current;\n if (previous.isMain === isMain && previous.threadId === threadId) return;\n selectionRef.current = { isMain, threadId };\n emit(isMain ? \"threadListItem.switchedTo\" : \"threadListItem.switchedAway\", {\n threadId,\n });\n }, [isMain, threadId, 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-runtime-client.d.ts","names":[],"sources":["../../../src/store/runtime-clients/thread-runtime-client.ts"],"mappings":";;;cA2Ia,0CAAY,SAAA;EApGd,SAAA"}
1
+ {"version":3,"file":"thread-runtime-client.d.ts","names":[],"sources":["../../../src/store/runtime-clients/thread-runtime-client.ts"],"mappings":";;;cAgJa,0CAAY,SAAA;EAxGd,SAAA"}
@@ -2,6 +2,7 @@ import { useSubscribable } from "./useSubscribable.js";
2
2
  import { ComposerClient } from "./composer-runtime-client.js";
3
3
  import { liveRef } from "./liveRef.js";
4
4
  import { MessageClient } from "./message-runtime-client.js";
5
+ import { ThreadSuggestions } from "../clients/suggestions.js";
5
6
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
6
7
  import { useEffect } from "@assistant-ui/tap/react-shim";
7
8
  import { resource, useResource, withKey } from "@assistant-ui/tap";
@@ -32,7 +33,7 @@ const useMessageClientById = (t0) => {
32
33
  };
33
34
  const MessageClientById = resource(useMessageClientById);
34
35
  const useThreadClient = (t0) => {
35
- const $ = c(59);
36
+ const $ = c(64);
36
37
  const { runtime } = t0;
37
38
  const runtimeState = useSubscribable(runtime);
38
39
  const emit = useAssistantEmit();
@@ -86,10 +87,17 @@ const useThreadClient = (t0) => {
86
87
  } else t4 = $[8];
87
88
  const composer = useClientResource(t4);
88
89
  let t5;
89
- if ($[9] !== runtime || $[10] !== runtimeState.messages || $[11] !== threadIdRef) {
90
- let t6;
91
- if ($[13] !== runtime || $[14] !== threadIdRef) {
92
- t6 = (m) => withKey(m.id, MessageClientById({
90
+ if ($[9] !== runtimeState.suggestions) {
91
+ t5 = ThreadSuggestions(runtimeState.suggestions);
92
+ $[9] = runtimeState.suggestions;
93
+ $[10] = t5;
94
+ } else t5 = $[10];
95
+ const suggestions = useClientResource(t5);
96
+ let t6;
97
+ if ($[11] !== runtime || $[12] !== runtimeState.messages || $[13] !== threadIdRef) {
98
+ let t7;
99
+ if ($[15] !== runtime || $[16] !== threadIdRef) {
100
+ t7 = (m) => withKey(m.id, MessageClientById({
93
101
  runtime,
94
102
  id: m.id,
95
103
  threadIdRef
@@ -98,22 +106,22 @@ const useThreadClient = (t0) => {
98
106
  m.id,
99
107
  threadIdRef
100
108
  ]);
101
- $[13] = runtime;
102
- $[14] = threadIdRef;
103
- $[15] = t6;
104
- } else t6 = $[15];
105
- t5 = runtimeState.messages.map(t6);
106
- $[9] = runtime;
107
- $[10] = runtimeState.messages;
108
- $[11] = threadIdRef;
109
- $[12] = t5;
110
- } else t5 = $[12];
111
- const messages = useClientLookup(t5);
112
- const t6 = messages.state.length === 0 && !runtimeState.isLoading;
113
- let t7;
114
- if ($[16] !== composer.state || $[17] !== messages.state || $[18] !== runtimeState.capabilities || $[19] !== runtimeState.extras || $[20] !== runtimeState.isDisabled || $[21] !== runtimeState.isLoading || $[22] !== runtimeState.isRunning || $[23] !== runtimeState.speech || $[24] !== runtimeState.state || $[25] !== runtimeState.suggestions || $[26] !== runtimeState.voice || $[27] !== t6) {
115
- t7 = {
116
- isEmpty: t6,
109
+ $[15] = runtime;
110
+ $[16] = threadIdRef;
111
+ $[17] = t7;
112
+ } else t7 = $[17];
113
+ t6 = runtimeState.messages.map(t7);
114
+ $[11] = runtime;
115
+ $[12] = runtimeState.messages;
116
+ $[13] = threadIdRef;
117
+ $[14] = t6;
118
+ } else t6 = $[14];
119
+ const messages = useClientLookup(t6);
120
+ const t7 = messages.state.length === 0 && !runtimeState.isLoading;
121
+ let t8;
122
+ if ($[18] !== composer.state || $[19] !== messages.state || $[20] !== runtimeState.capabilities || $[21] !== runtimeState.extras || $[22] !== runtimeState.isDisabled || $[23] !== runtimeState.isLoading || $[24] !== runtimeState.isRunning || $[25] !== runtimeState.speech || $[26] !== runtimeState.state || $[27] !== runtimeState.suggestions || $[28] !== runtimeState.voice || $[29] !== t7) {
123
+ t8 = {
124
+ isEmpty: t7,
117
125
  isDisabled: runtimeState.isDisabled,
118
126
  isLoading: runtimeState.isLoading,
119
127
  isRunning: runtimeState.isRunning,
@@ -126,53 +134,60 @@ const useThreadClient = (t0) => {
126
134
  composer: composer.state,
127
135
  messages: messages.state
128
136
  };
129
- $[16] = composer.state;
130
- $[17] = messages.state;
131
- $[18] = runtimeState.capabilities;
132
- $[19] = runtimeState.extras;
133
- $[20] = runtimeState.isDisabled;
134
- $[21] = runtimeState.isLoading;
135
- $[22] = runtimeState.isRunning;
136
- $[23] = runtimeState.speech;
137
- $[24] = runtimeState.state;
138
- $[25] = runtimeState.suggestions;
139
- $[26] = runtimeState.voice;
140
- $[27] = t6;
141
- $[28] = t7;
142
- } else t7 = $[28];
143
- const state = t7;
144
- let t8;
145
- if ($[29] !== state) {
146
- t8 = () => state;
147
- $[29] = state;
137
+ $[18] = composer.state;
138
+ $[19] = messages.state;
139
+ $[20] = runtimeState.capabilities;
140
+ $[21] = runtimeState.extras;
141
+ $[22] = runtimeState.isDisabled;
142
+ $[23] = runtimeState.isLoading;
143
+ $[24] = runtimeState.isRunning;
144
+ $[25] = runtimeState.speech;
145
+ $[26] = runtimeState.state;
146
+ $[27] = runtimeState.suggestions;
147
+ $[28] = runtimeState.voice;
148
+ $[29] = t7;
148
149
  $[30] = t8;
149
150
  } else t8 = $[30];
151
+ const state = t8;
150
152
  let t9;
151
- if ($[31] !== composer.methods) {
152
- t9 = () => composer.methods;
153
- $[31] = composer.methods;
153
+ if ($[31] !== state) {
154
+ t9 = () => state;
155
+ $[31] = state;
154
156
  $[32] = t9;
155
157
  } else t9 = $[32];
156
158
  let t10;
157
- if ($[33] !== messages) {
158
- t10 = (selector) => {
159
- if ("id" in selector) return messages.get({ key: selector.id });
160
- else return messages.get(selector);
161
- };
162
- $[33] = messages;
159
+ if ($[33] !== composer.methods) {
160
+ t10 = () => composer.methods;
161
+ $[33] = composer.methods;
163
162
  $[34] = t10;
164
163
  } else t10 = $[34];
165
164
  let t11;
166
- if ($[35] !== runtime) {
167
- t11 = () => runtime;
168
- $[35] = runtime;
165
+ if ($[35] !== suggestions) {
166
+ t11 = () => suggestions.methods;
167
+ $[35] = suggestions;
169
168
  $[36] = t11;
170
169
  } else t11 = $[36];
171
170
  let t12;
172
- if ($[37] !== runtime.append || $[38] !== runtime.cancelRun || $[39] !== runtime.connectVoice || $[40] !== runtime.deleteMessage || $[41] !== runtime.disconnectVoice || $[42] !== runtime.export || $[43] !== runtime.getModelContext || $[44] !== runtime.getVoiceVolume || $[45] !== runtime.import || $[46] !== runtime.importExternalState || $[47] !== runtime.muteVoice || $[48] !== runtime.reset || $[49] !== runtime.resumeRun || $[50] !== runtime.startRun || $[51] !== runtime.stopSpeaking || $[52] !== runtime.subscribeVoiceVolume || $[53] !== runtime.unmuteVoice || $[54] !== t10 || $[55] !== t11 || $[56] !== t8 || $[57] !== t9) {
173
- t12 = {
174
- getState: t8,
175
- composer: t9,
171
+ if ($[37] !== messages) {
172
+ t12 = (selector) => {
173
+ if ("id" in selector) return messages.get({ key: selector.id });
174
+ else return messages.get(selector);
175
+ };
176
+ $[37] = messages;
177
+ $[38] = t12;
178
+ } else t12 = $[38];
179
+ let t13;
180
+ if ($[39] !== runtime) {
181
+ t13 = () => runtime;
182
+ $[39] = runtime;
183
+ $[40] = t13;
184
+ } else t13 = $[40];
185
+ let t14;
186
+ if ($[41] !== runtime.append || $[42] !== runtime.cancelRun || $[43] !== runtime.connectVoice || $[44] !== runtime.deleteMessage || $[45] !== runtime.disconnectVoice || $[46] !== runtime.export || $[47] !== runtime.getModelContext || $[48] !== runtime.getVoiceVolume || $[49] !== runtime.import || $[50] !== runtime.importExternalState || $[51] !== runtime.muteVoice || $[52] !== runtime.reset || $[53] !== runtime.resumeRun || $[54] !== runtime.startRun || $[55] !== runtime.stopSpeaking || $[56] !== runtime.subscribeVoiceVolume || $[57] !== runtime.unmuteVoice || $[58] !== t10 || $[59] !== t11 || $[60] !== t12 || $[61] !== t13 || $[62] !== t9) {
187
+ t14 = {
188
+ getState: t9,
189
+ composer: t10,
190
+ suggestions: t11,
176
191
  append: runtime.append,
177
192
  deleteMessage: runtime.deleteMessage,
178
193
  startRun: runtime.startRun,
@@ -190,33 +205,34 @@ const useThreadClient = (t0) => {
190
205
  subscribeVoiceVolume: runtime.subscribeVoiceVolume,
191
206
  muteVoice: runtime.muteVoice,
192
207
  unmuteVoice: runtime.unmuteVoice,
193
- message: t10,
194
- __internal_getRuntime: t11
208
+ message: t12,
209
+ __internal_getRuntime: t13
195
210
  };
196
- $[37] = runtime.append;
197
- $[38] = runtime.cancelRun;
198
- $[39] = runtime.connectVoice;
199
- $[40] = runtime.deleteMessage;
200
- $[41] = runtime.disconnectVoice;
201
- $[42] = runtime.export;
202
- $[43] = runtime.getModelContext;
203
- $[44] = runtime.getVoiceVolume;
204
- $[45] = runtime.import;
205
- $[46] = runtime.importExternalState;
206
- $[47] = runtime.muteVoice;
207
- $[48] = runtime.reset;
208
- $[49] = runtime.resumeRun;
209
- $[50] = runtime.startRun;
210
- $[51] = runtime.stopSpeaking;
211
- $[52] = runtime.subscribeVoiceVolume;
212
- $[53] = runtime.unmuteVoice;
213
- $[54] = t10;
214
- $[55] = t11;
215
- $[56] = t8;
216
- $[57] = t9;
217
- $[58] = t12;
218
- } else t12 = $[58];
219
- return t12;
211
+ $[41] = runtime.append;
212
+ $[42] = runtime.cancelRun;
213
+ $[43] = runtime.connectVoice;
214
+ $[44] = runtime.deleteMessage;
215
+ $[45] = runtime.disconnectVoice;
216
+ $[46] = runtime.export;
217
+ $[47] = runtime.getModelContext;
218
+ $[48] = runtime.getVoiceVolume;
219
+ $[49] = runtime.import;
220
+ $[50] = runtime.importExternalState;
221
+ $[51] = runtime.muteVoice;
222
+ $[52] = runtime.reset;
223
+ $[53] = runtime.resumeRun;
224
+ $[54] = runtime.startRun;
225
+ $[55] = runtime.stopSpeaking;
226
+ $[56] = runtime.subscribeVoiceVolume;
227
+ $[57] = runtime.unmuteVoice;
228
+ $[58] = t10;
229
+ $[59] = t11;
230
+ $[60] = t12;
231
+ $[61] = t13;
232
+ $[62] = t9;
233
+ $[63] = t14;
234
+ } else t14 = $[63];
235
+ return t14;
220
236
  };
221
237
  const ThreadClient = resource(useThreadClient);
222
238
  //#endregion