@assistant-ui/core 0.3.11 → 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 (132) hide show
  1. package/dist/index.d.ts +6 -5
  2. package/dist/index.js +2 -2
  3. package/dist/index.js.map +1 -1
  4. package/dist/internal.d.ts +6 -5
  5. package/dist/internal.js +5 -4
  6. package/dist/react/client/interactable-model-context.d.ts.map +1 -1
  7. package/dist/react/client/interactable-model-context.js +5 -1
  8. package/dist/react/client/interactable-model-context.js.map +1 -1
  9. package/dist/runtime/api/message-runtime.d.ts +2 -3
  10. package/dist/runtime/api/message-runtime.d.ts.map +1 -1
  11. package/dist/runtime/api/message-runtime.js +2 -16
  12. package/dist/runtime/api/message-runtime.js.map +1 -1
  13. package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
  14. package/dist/runtime/api/thread-runtime.js +5 -1
  15. package/dist/runtime/api/thread-runtime.js.map +1 -1
  16. package/dist/runtime/base/base-composer-runtime-core.d.ts +25 -0
  17. package/dist/runtime/base/base-composer-runtime-core.d.ts.map +1 -1
  18. package/dist/runtime/base/base-composer-runtime-core.js +64 -11
  19. package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
  20. package/dist/runtime/base/base-thread-runtime-core.d.ts +14 -0
  21. package/dist/runtime/base/base-thread-runtime-core.d.ts.map +1 -1
  22. package/dist/runtime/base/base-thread-runtime-core.js +31 -0
  23. package/dist/runtime/base/base-thread-runtime-core.js.map +1 -1
  24. package/dist/runtime/base/default-edit-composer-runtime-core.d.ts.map +1 -1
  25. package/dist/runtime/base/default-edit-composer-runtime-core.js +1 -6
  26. package/dist/runtime/base/default-edit-composer-runtime-core.js.map +1 -1
  27. package/dist/runtime/base/default-thread-composer-runtime-core.d.ts.map +1 -1
  28. package/dist/runtime/base/default-thread-composer-runtime-core.js +1 -4
  29. package/dist/runtime/base/default-thread-composer-runtime-core.js.map +1 -1
  30. package/dist/runtime/internal.d.ts +4 -4
  31. package/dist/runtime/internal.js +4 -4
  32. package/dist/runtime/queue/external-thread-queue-adapter.d.ts +15 -0
  33. package/dist/runtime/queue/external-thread-queue-adapter.d.ts.map +1 -1
  34. package/dist/runtime/queue/message-queue.js +23 -10
  35. package/dist/runtime/queue/message-queue.js.map +1 -1
  36. package/dist/runtimes/external-store/external-store-adapter.d.ts +7 -0
  37. package/dist/runtimes/external-store/external-store-adapter.d.ts.map +1 -1
  38. package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts +3 -1
  39. package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts.map +1 -1
  40. package/dist/runtimes/external-store/external-store-thread-runtime-core.js +49 -13
  41. package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
  42. package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
  43. package/dist/runtimes/local/local-thread-runtime-core.js +2 -1
  44. package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
  45. package/dist/store/clients/external-thread.d.ts +61 -0
  46. package/dist/store/clients/external-thread.d.ts.map +1 -0
  47. package/dist/store/clients/external-thread.js +1445 -0
  48. package/dist/store/clients/external-thread.js.map +1 -0
  49. package/dist/store/clients/runtime-adapter.d.ts.map +1 -1
  50. package/dist/store/clients/runtime-adapter.js +5 -2
  51. package/dist/store/clients/runtime-adapter.js.map +1 -1
  52. package/dist/store/clients/single-thread-list.d.ts +9 -0
  53. package/dist/store/clients/single-thread-list.d.ts.map +1 -0
  54. package/dist/store/clients/single-thread-list.js +175 -0
  55. package/dist/store/clients/single-thread-list.js.map +1 -0
  56. package/dist/store/clients/suggestions.d.ts +3 -1
  57. package/dist/store/clients/suggestions.d.ts.map +1 -1
  58. package/dist/store/clients/suggestions.js +65 -37
  59. package/dist/store/clients/suggestions.js.map +1 -1
  60. package/dist/store/index.d.ts +5 -3
  61. package/dist/store/index.js +4 -2
  62. package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts.map +1 -1
  63. package/dist/store/runtime-clients/thread-list-item-runtime-client.js +64 -50
  64. package/dist/store/runtime-clients/thread-list-item-runtime-client.js.map +1 -1
  65. package/dist/store/runtime-clients/thread-runtime-client.d.ts.map +1 -1
  66. package/dist/store/runtime-clients/thread-runtime-client.js +98 -82
  67. package/dist/store/runtime-clients/thread-runtime-client.js.map +1 -1
  68. package/dist/store/scope-registration.d.ts +2 -2
  69. package/dist/store/scopes/suggestions.d.ts +6 -1
  70. package/dist/store/scopes/suggestions.d.ts.map +1 -1
  71. package/dist/store/scopes/thread.d.ts +17 -0
  72. package/dist/store/scopes/thread.d.ts.map +1 -1
  73. package/dist/types/augmentations.d.ts +33 -0
  74. package/dist/types/augmentations.d.ts.map +1 -0
  75. package/dist/types/augmentations.js +0 -0
  76. package/dist/types/error.d.ts +15 -1
  77. package/dist/types/error.d.ts.map +1 -1
  78. package/dist/types/error.js +18 -1
  79. package/dist/types/error.js.map +1 -1
  80. package/dist/types/message.d.ts +2 -0
  81. package/dist/types/message.d.ts.map +1 -1
  82. package/dist/types/message.js.map +1 -1
  83. package/dist/utils/normalizePartStatus.d.ts +3 -2
  84. package/dist/utils/normalizePartStatus.d.ts.map +1 -1
  85. package/dist/utils/normalizePartStatus.js +15 -1
  86. package/dist/utils/normalizePartStatus.js.map +1 -1
  87. package/package.json +5 -5
  88. package/src/index.ts +7 -0
  89. package/src/internal.ts +1 -1
  90. package/src/react/client/interactable-model-context.ts +6 -1
  91. package/src/react/runtimes/useExternalStoreRuntime.suggestions.test.tsx +114 -0
  92. package/src/runtime/api/message-runtime.test.ts +1 -1
  93. package/src/runtime/api/message-runtime.ts +2 -35
  94. package/src/runtime/api/thread-runtime.ts +8 -1
  95. package/src/runtime/base/base-composer-runtime-core.ts +100 -8
  96. package/src/runtime/base/base-thread-runtime-core.ts +36 -0
  97. package/src/runtime/base/default-edit-composer-runtime-core.ts +1 -15
  98. package/src/runtime/base/default-thread-composer-runtime-core.ts +1 -11
  99. package/src/runtime/queue/external-thread-queue-adapter.ts +17 -0
  100. package/src/runtime/queue/message-queue.ts +26 -9
  101. package/src/runtimes/external-store/external-store-adapter.ts +7 -0
  102. package/src/runtimes/external-store/external-store-thread-runtime-core.ts +100 -26
  103. package/src/runtimes/local/local-thread-runtime-core.ts +4 -1
  104. package/src/store/clients/external-thread.ts +1255 -0
  105. package/src/store/clients/runtime-adapter.ts +5 -2
  106. package/src/store/clients/single-thread-list.ts +116 -0
  107. package/src/store/clients/suggestions.ts +39 -13
  108. package/src/store/index.ts +6 -0
  109. package/src/store/runtime-clients/thread-list-item-runtime-client.ts +13 -28
  110. package/src/store/runtime-clients/thread-runtime-client.ts +5 -0
  111. package/src/store/scopes/suggestions.ts +6 -0
  112. package/src/store/scopes/thread.ts +17 -0
  113. package/src/tests/append-interactable-snapshots.test.ts +350 -0
  114. package/src/tests/base-composer-runtime-core-send.test.ts +126 -0
  115. package/src/tests/base-composer-runtime-core.test.ts +108 -1
  116. package/src/tests/default-edit-composer-runtime-core.test.ts +0 -68
  117. package/src/tests/external-store-thread-runtime-core-adapter.test.ts +300 -0
  118. package/src/tests/external-thread-attachments.test.tsx +584 -0
  119. package/src/tests/external-thread-branches.test.tsx +157 -0
  120. package/src/tests/external-thread-feedback.test.tsx +204 -0
  121. package/src/tests/external-thread-parity.test.tsx +548 -0
  122. package/src/tests/external-thread-refetch.test.tsx +117 -0
  123. package/src/tests/external-thread-speech.test.tsx +328 -0
  124. package/src/tests/external-thread-suggestions.test.tsx +59 -0
  125. package/src/tests/message-queue.test.ts +26 -0
  126. package/src/tests/thread-message-like.test.ts +39 -0
  127. package/src/tests/thread-switch-events.test.tsx +136 -0
  128. package/src/types/augmentations.ts +33 -0
  129. package/src/types/error.ts +24 -0
  130. package/src/types/message.ts +2 -0
  131. package/src/utils/normalizePartStatus.ts +27 -0
  132. package/src/tests/default-thread-composer-runtime-core.test.ts +0 -82
@@ -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";
@@ -20,9 +20,11 @@ import { RuntimeExtrasBrand, createRuntimeExtrasBrand } from "../runtime/utils/r
20
20
  import { Toolkit, ToolkitDefinition, ToolkitDefinitionEntry } from "../react/model-context/toolbox.js";
21
21
  import { defineToolkit } from "../react/model-context/define-toolkit.js";
22
22
  import { McpToolkitDefinition, McpToolkitEntry, McpToolkitToolConfig, defineMcpToolkit } from "../react/model-context/define-mcp-toolkit.js";
23
+ import { ExternalThread, ExternalThreadMessage, ExternalThreadProps } from "./clients/external-thread.js";
24
+ import { SingleThreadList } from "./clients/single-thread-list.js";
23
25
  import { NoOpComposerClient } from "./clients/no-op-composer-client.js";
24
26
  import { SuggestionConfig, Suggestions } from "./clients/suggestions.js";
25
27
  import { ChainOfThoughtClient } from "./clients/chain-of-thought-client.js";
26
28
  import { ThreadMessageClient, ThreadMessageClientProps } from "./clients/thread-message-client.js";
27
29
  import { ModelContext } from "./clients/model-context-client.js";
28
- export { type AttachmentClientSchema, type AttachmentMeta, type AttachmentMethods, type AttachmentState, ChainOfThoughtClient, type ChainOfThoughtClientSchema, type ChainOfThoughtMeta, type ChainOfThoughtMethods, type ChainOfThoughtPart, type ChainOfThoughtState, type ComposerClientSchema, type ComposerEvents, type ComposerMeta, type ComposerMethods, type ComposerSendOptions, type ComposerState, type JoinStrategy, type McpToolkitDefinition, type McpToolkitEntry, type McpToolkitToolConfig, type MessageClientSchema, type MessageMeta, type MessageMethods, type MessageState, ModelContext, type ModelContextClientSchema, type ModelContextMethods, type ModelContextState, NoOpComposerClient, type PartClientSchema, type PartMeta, type PartMethods, type PartState, type QueueItemClientSchema, type QueueItemMeta, type QueueItemMethods, type QueueItemState, RuntimeAdapter, type RuntimeExtrasBrand, type StreamingTimingAccessors, type StreamingTimingOptions, type StreamingTimingState, type Suggestion, type SuggestionClientSchema, type SuggestionConfig, type SuggestionMeta, type SuggestionMethods, type SuggestionState, Suggestions, type SuggestionsClientSchema, type SuggestionsMethods, type SuggestionsState, type ThreadClientSchema, type ThreadEvents, type ThreadListItemClientSchema, type ThreadListItemEvents, type ThreadListItemMeta, type ThreadListItemMethods, type ThreadListItemState, ThreadMessageClient, type ThreadMessageClientProps, type ThreadMeta, type ThreadMethods, type ThreadState, type ThreadsClientSchema, type ThreadsMethods, type ThreadsState, type Toolkit, type ToolkitDefinition, type ToolkitDefinitionEntry, convertExternalMessages, createRuntimeExtrasBrand, defineMcpToolkit, defineToolkit, useExternalMessageConverter, useStreamingTiming };
30
+ export { type AttachmentClientSchema, type AttachmentMeta, type AttachmentMethods, type AttachmentState, ChainOfThoughtClient, type ChainOfThoughtClientSchema, type ChainOfThoughtMeta, type ChainOfThoughtMethods, type ChainOfThoughtPart, type ChainOfThoughtState, type ComposerClientSchema, type ComposerEvents, type ComposerMeta, type ComposerMethods, type ComposerSendOptions, type ComposerState, ExternalThread, type ExternalThreadMessage, type ExternalThreadProps, type JoinStrategy, type McpToolkitDefinition, type McpToolkitEntry, type McpToolkitToolConfig, type MessageClientSchema, type MessageMeta, type MessageMethods, type MessageState, ModelContext, type ModelContextClientSchema, type ModelContextMethods, type ModelContextState, NoOpComposerClient, type PartClientSchema, type PartMeta, type PartMethods, type PartState, type QueueItemClientSchema, type QueueItemMeta, type QueueItemMethods, type QueueItemState, RuntimeAdapter, type RuntimeExtrasBrand, SingleThreadList, type StreamingTimingAccessors, type StreamingTimingOptions, type StreamingTimingState, type Suggestion, type SuggestionClientSchema, type SuggestionConfig, type SuggestionMeta, type SuggestionMethods, type SuggestionState, Suggestions, type SuggestionsClientSchema, type SuggestionsMethods, type SuggestionsState, type ThreadClientSchema, type ThreadEvents, type ThreadListItemClientSchema, type ThreadListItemEvents, type ThreadListItemMeta, type ThreadListItemMethods, type ThreadListItemState, ThreadMessageClient, type ThreadMessageClientProps, type ThreadMeta, type ThreadMethods, type ThreadState, type ThreadsClientSchema, type ThreadsMethods, type ThreadsState, type Toolkit, type ToolkitDefinition, type ToolkitDefinitionEntry, convertExternalMessages, createRuntimeExtrasBrand, defineMcpToolkit, defineToolkit, useExternalMessageConverter, useStreamingTiming };
@@ -1,12 +1,14 @@
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";
6
6
  import { convertExternalMessages, useExternalMessageConverter } from "../react/runtimes/external-message-converter.js";
7
7
  import { useStreamingTiming } from "../react/runtimes/useStreamingTiming.js";
8
8
  import { createRuntimeExtrasBrand } from "../runtime/utils/runtime-extras-brand.js";
9
+ import { SingleThreadList } from "./clients/single-thread-list.js";
10
+ import { ExternalThread } from "./clients/external-thread.js";
9
11
  import { NoOpComposerClient } from "./clients/no-op-composer-client.js";
10
12
  import { ChainOfThoughtClient } from "./clients/chain-of-thought-client.js";
11
13
  import { ThreadMessageClient } from "./clients/thread-message-client.js";
12
- export { ChainOfThoughtClient, ModelContext, NoOpComposerClient, RuntimeAdapter, Suggestions, ThreadMessageClient, convertExternalMessages, createRuntimeExtrasBrand, defineMcpToolkit, defineToolkit, useExternalMessageConverter, useStreamingTiming };
14
+ export { ChainOfThoughtClient, ExternalThread, ModelContext, NoOpComposerClient, RuntimeAdapter, SingleThreadList, Suggestions, ThreadMessageClient, convertExternalMessages, createRuntimeExtrasBrand, defineMcpToolkit, defineToolkit, useExternalMessageConverter, useStreamingTiming };
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"thread-runtime-client.js","names":["Unsubscribe","ThreadRuntimeEventType","ThreadRuntime","useMemo","useEffect","RefObject","useResource","resource","withKey","liveRef","ClientOutput","useAssistantEmit","useClientLookup","useClientResource","ComposerClient","MessageClient","useSubscribable","ThreadState","useMessageClientById","t0","$","_c","runtime","id","threadIdRef","t1","getMessageById","messageRuntime","t2","MessageClientById","useThreadClient","runtimeState","emit","unsubscribers","threadEvents","event","unsubscribe","unstable_on","threadId","getState","push","unsub","t3","t4","composer","t5","messages","t6","m","map","state","length","isLoading","t7","capabilities","extras","isDisabled","isRunning","speech","suggestions","voice","isEmpty","t8","t9","methods","t10","selector","get","key","t11","t12","append","cancelRun","connectVoice","deleteMessage","disconnectVoice","export","getModelContext","getVoiceVolume","import","importExternalState","muteVoice","reset","resumeRun","startRun","stopSpeaking","subscribeVoiceVolume","unmuteVoice","message","__internal_getRuntime","ThreadClient"],"sources":["../../../src/store/runtime-clients/thread-runtime-client.ts"],"sourcesContent":["import type { Unsubscribe } from \"../../types/unsubscribe\";\nimport type { ThreadRuntimeEventType } from \"../../runtime/interfaces/thread-runtime-core\";\nimport type { ThreadRuntime } from \"../../runtime/api/thread-runtime\";\nimport { useMemo, useEffect, type RefObject } from \"react\";\nimport { useResource, resource, withKey } from \"@assistant-ui/tap\";\nimport { liveRef } from \"./liveRef\";\nimport type { ClientOutput } from \"@assistant-ui/store\";\nimport {\n useAssistantEmit,\n useClientLookup,\n useClientResource,\n} from \"@assistant-ui/store/client\";\nimport { ComposerClient } from \"./composer-runtime-client\";\nimport { MessageClient } from \"./message-runtime-client\";\nimport { useSubscribable } from \"./useSubscribable\";\nimport type { ThreadState } from \"../scopes/thread\";\n\nconst useMessageClientById = ({\n runtime,\n id,\n threadIdRef,\n}: {\n runtime: ThreadRuntime;\n id: string;\n threadIdRef: RefObject<string>;\n}) => {\n const messageRuntime = useMemo(\n () => runtime.getMessageById(id),\n [runtime, id],\n );\n\n return useResource(MessageClient({ runtime: messageRuntime, threadIdRef }));\n};\n\nconst MessageClientById = resource(useMessageClientById);\n\nconst useThreadClient = ({\n runtime,\n}: {\n runtime: ThreadRuntime;\n}): ClientOutput<\"thread\"> => {\n const runtimeState = useSubscribable(runtime);\n const emit = useAssistantEmit();\n\n useEffect(() => {\n const unsubscribers: Unsubscribe[] = [];\n\n const threadEvents: ThreadRuntimeEventType[] = [\n \"runStart\",\n \"runEnd\",\n \"initialize\",\n \"modelContextUpdate\",\n ];\n\n for (const event of threadEvents) {\n const unsubscribe = runtime.unstable_on(event, () => {\n const threadId = runtime.getState()?.threadId || \"unknown\";\n emit(`thread.${event}`, {\n threadId,\n });\n });\n unsubscribers.push(unsubscribe);\n }\n\n return () => {\n for (const unsub of unsubscribers) unsub();\n };\n }, [runtime, emit]);\n\n const threadIdRef = useMemo(\n () => liveRef(() => runtime.getState()!.threadId),\n [runtime],\n );\n\n const composer = useClientResource(\n ComposerClient({\n runtime: runtime.composer,\n threadIdRef,\n }),\n );\n const messages = useClientLookup(\n runtimeState.messages.map((m) =>\n withKey(m.id, MessageClientById({ runtime, id: m.id, threadIdRef }), [\n runtime,\n m.id,\n threadIdRef,\n ]),\n ),\n );\n\n const state = useMemo<ThreadState>(() => {\n return {\n isEmpty: messages.state.length === 0 && !runtimeState.isLoading,\n isDisabled: runtimeState.isDisabled,\n isLoading: runtimeState.isLoading,\n isRunning: runtimeState.isRunning,\n capabilities: runtimeState.capabilities,\n state: runtimeState.state,\n suggestions: runtimeState.suggestions,\n extras: runtimeState.extras,\n speech: runtimeState.speech,\n voice: runtimeState.voice,\n\n composer: composer.state,\n messages: messages.state,\n };\n }, [runtimeState, messages, composer.state]);\n\n return {\n getState: () => state,\n composer: () => composer.methods,\n append: runtime.append,\n deleteMessage: runtime.deleteMessage,\n startRun: runtime.startRun,\n resumeRun: runtime.resumeRun,\n importExternalState: runtime.importExternalState,\n cancelRun: runtime.cancelRun,\n getModelContext: runtime.getModelContext,\n export: runtime.export,\n import: runtime.import,\n reset: runtime.reset,\n stopSpeaking: runtime.stopSpeaking,\n connectVoice: runtime.connectVoice,\n disconnectVoice: runtime.disconnectVoice,\n getVoiceVolume: runtime.getVoiceVolume,\n subscribeVoiceVolume: runtime.subscribeVoiceVolume,\n muteVoice: runtime.muteVoice,\n unmuteVoice: runtime.unmuteVoice,\n message: (selector) => {\n if (\"id\" in selector) {\n return messages.get({ key: selector.id });\n } else {\n return messages.get(selector);\n }\n },\n __internal_getRuntime: () => runtime,\n };\n};\n\nexport const ThreadClient = resource(useThreadClient);\n"],"mappings":"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"}
1
+ {"version":3,"file":"thread-runtime-client.js","names":["Unsubscribe","ThreadRuntimeEventType","ThreadRuntime","useMemo","useEffect","RefObject","useResource","resource","withKey","liveRef","ClientOutput","useAssistantEmit","useClientLookup","useClientResource","ComposerClient","MessageClient","ThreadSuggestions","useSubscribable","ThreadState","useMessageClientById","t0","$","_c","runtime","id","threadIdRef","t1","getMessageById","messageRuntime","t2","MessageClientById","useThreadClient","runtimeState","emit","unsubscribers","threadEvents","event","unsubscribe","unstable_on","threadId","getState","push","unsub","t3","t4","composer","t5","suggestions","t6","messages","t7","m","map","state","length","isLoading","t8","capabilities","extras","isDisabled","isRunning","speech","voice","isEmpty","t9","t10","methods","t11","t12","selector","get","key","t13","t14","append","cancelRun","connectVoice","deleteMessage","disconnectVoice","export","getModelContext","getVoiceVolume","import","importExternalState","muteVoice","reset","resumeRun","startRun","stopSpeaking","subscribeVoiceVolume","unmuteVoice","message","__internal_getRuntime","ThreadClient"],"sources":["../../../src/store/runtime-clients/thread-runtime-client.ts"],"sourcesContent":["import type { Unsubscribe } from \"../../types/unsubscribe\";\nimport type { ThreadRuntimeEventType } from \"../../runtime/interfaces/thread-runtime-core\";\nimport type { ThreadRuntime } from \"../../runtime/api/thread-runtime\";\nimport { useMemo, useEffect, type RefObject } from \"react\";\nimport { useResource, resource, withKey } from \"@assistant-ui/tap\";\nimport { liveRef } from \"./liveRef\";\nimport type { ClientOutput } from \"@assistant-ui/store\";\nimport {\n useAssistantEmit,\n useClientLookup,\n useClientResource,\n} from \"@assistant-ui/store/client\";\nimport { ComposerClient } from \"./composer-runtime-client\";\nimport { MessageClient } from \"./message-runtime-client\";\nimport { ThreadSuggestions } from \"../clients/suggestions\";\nimport { useSubscribable } from \"./useSubscribable\";\nimport type { ThreadState } from \"../scopes/thread\";\n\nconst useMessageClientById = ({\n runtime,\n id,\n threadIdRef,\n}: {\n runtime: ThreadRuntime;\n id: string;\n threadIdRef: RefObject<string>;\n}) => {\n const messageRuntime = useMemo(\n () => runtime.getMessageById(id),\n [runtime, id],\n );\n\n return useResource(MessageClient({ runtime: messageRuntime, threadIdRef }));\n};\n\nconst MessageClientById = resource(useMessageClientById);\n\nconst useThreadClient = ({\n runtime,\n}: {\n runtime: ThreadRuntime;\n}): ClientOutput<\"thread\"> => {\n const runtimeState = useSubscribable(runtime);\n const emit = useAssistantEmit();\n\n useEffect(() => {\n const unsubscribers: Unsubscribe[] = [];\n\n const threadEvents: ThreadRuntimeEventType[] = [\n \"runStart\",\n \"runEnd\",\n \"initialize\",\n \"modelContextUpdate\",\n ];\n\n for (const event of threadEvents) {\n const unsubscribe = runtime.unstable_on(event, () => {\n const threadId = runtime.getState()?.threadId || \"unknown\";\n emit(`thread.${event}`, {\n threadId,\n });\n });\n unsubscribers.push(unsubscribe);\n }\n\n return () => {\n for (const unsub of unsubscribers) unsub();\n };\n }, [runtime, emit]);\n\n const threadIdRef = useMemo(\n () => liveRef(() => runtime.getState()!.threadId),\n [runtime],\n );\n\n const composer = useClientResource(\n ComposerClient({\n runtime: runtime.composer,\n threadIdRef,\n }),\n );\n const suggestions = useClientResource(\n ThreadSuggestions(runtimeState.suggestions),\n );\n const messages = useClientLookup(\n runtimeState.messages.map((m) =>\n withKey(m.id, MessageClientById({ runtime, id: m.id, threadIdRef }), [\n runtime,\n m.id,\n threadIdRef,\n ]),\n ),\n );\n\n const state = useMemo<ThreadState>(() => {\n return {\n isEmpty: messages.state.length === 0 && !runtimeState.isLoading,\n isDisabled: runtimeState.isDisabled,\n isLoading: runtimeState.isLoading,\n isRunning: runtimeState.isRunning,\n capabilities: runtimeState.capabilities,\n state: runtimeState.state,\n suggestions: runtimeState.suggestions,\n extras: runtimeState.extras,\n speech: runtimeState.speech,\n voice: runtimeState.voice,\n\n composer: composer.state,\n messages: messages.state,\n };\n }, [runtimeState, messages, composer.state]);\n\n return {\n getState: () => state,\n composer: () => composer.methods,\n suggestions: () => suggestions.methods,\n append: runtime.append,\n deleteMessage: runtime.deleteMessage,\n startRun: runtime.startRun,\n resumeRun: runtime.resumeRun,\n importExternalState: runtime.importExternalState,\n cancelRun: runtime.cancelRun,\n getModelContext: runtime.getModelContext,\n export: runtime.export,\n import: runtime.import,\n reset: runtime.reset,\n stopSpeaking: runtime.stopSpeaking,\n connectVoice: runtime.connectVoice,\n disconnectVoice: runtime.disconnectVoice,\n getVoiceVolume: runtime.getVoiceVolume,\n subscribeVoiceVolume: runtime.subscribeVoiceVolume,\n muteVoice: runtime.muteVoice,\n unmuteVoice: runtime.unmuteVoice,\n message: (selector) => {\n if (\"id\" in selector) {\n return messages.get({ key: selector.id });\n } else {\n return messages.get(selector);\n }\n },\n __internal_getRuntime: () => runtime,\n };\n};\n\nexport const ThreadClient = resource(useThreadClient);\n"],"mappings":"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"}
@@ -4,10 +4,10 @@ import { AttachmentClientSchema } from "./scopes/attachment.js";
4
4
  import { ComposerClientSchema } from "./scopes/composer.js";
5
5
  import { PartClientSchema } from "./scopes/part.js";
6
6
  import { MessageClientSchema } from "./scopes/message.js";
7
- import { ThreadClientSchema } from "./scopes/thread.js";
8
- import { ThreadsClientSchema } from "./scopes/threads.js";
9
7
  import { SuggestionClientSchema } from "./scopes/suggestion.js";
10
8
  import { SuggestionsClientSchema } from "./scopes/suggestions.js";
9
+ import { ThreadClientSchema } from "./scopes/thread.js";
10
+ import { ThreadsClientSchema } from "./scopes/threads.js";
11
11
  import { ModelContextClientSchema } from "./scopes/model-context.js";
12
12
  import { ChainOfThoughtClientSchema } from "./scopes/chain-of-thought.js";
13
13
  //#region src/store/scope-registration.d.ts
@@ -14,9 +14,14 @@ type SuggestionsMethods = {
14
14
  index: number;
15
15
  }): SuggestionMethods;
16
16
  };
17
+ type SuggestionsMeta = {
18
+ source: "thread";
19
+ query: Record<string, never>;
20
+ };
17
21
  type SuggestionsClientSchema = {
18
22
  methods: SuggestionsMethods;
23
+ meta: SuggestionsMeta;
19
24
  };
20
25
  //#endregion
21
- export { Suggestion, SuggestionsClientSchema, SuggestionsMethods, SuggestionsState };
26
+ export { Suggestion, SuggestionsClientSchema, SuggestionsMeta, SuggestionsMethods, SuggestionsState };
22
27
  //# sourceMappingURL=suggestions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"suggestions.d.ts","names":[],"sources":["../../../src/store/scopes/suggestions.ts"],"mappings":";;KAEY;EACV;EACA;EACA;;KAGU;EACV,aAAa;;KAGH;EACV,YAAY;EACZ,WAAW;IAAS;MAAkB;;KAG5B;EACV,SAAS"}
1
+ {"version":3,"file":"suggestions.d.ts","names":[],"sources":["../../../src/store/scopes/suggestions.ts"],"mappings":";;KAEY;EACV;EACA;EACA;;KAGU;EACV,aAAa;;KAGH;EACV,YAAY;EACZ,WAAW;IAAS;MAAkB;;KAG5B;EACV;EACA,OAAO;;KAGG;EACV,SAAS;EACT,MAAM"}
@@ -5,6 +5,7 @@ import { ExportedMessageRepository } from "../../runtime/utils/message-repositor
5
5
  import { RuntimeCapabilities, SpeechState, ThreadSuggestion, VoiceSessionState } from "../../runtime/interfaces/thread-runtime-core.js";
6
6
  import { ComposerMethods, ComposerState } from "./composer.js";
7
7
  import { MessageMethods, MessageState } from "./message.js";
8
+ import { SuggestionsMethods } from "./suggestions.js";
8
9
  import { CreateAppendMessage, CreateResumeRunConfig, CreateStartRunConfig, ThreadRuntime } from "../../runtime/api/thread-runtime.js";
9
10
  import { ReadonlyJSONValue } from "assistant-stream/utils";
10
11
  //#region src/store/scopes/thread.d.ts
@@ -60,6 +61,10 @@ type ThreadMethods = {
60
61
  * The thread composer runtime.
61
62
  */
62
63
  composer(): ComposerMethods;
64
+ /**
65
+ * The suggestions shown for this thread.
66
+ */
67
+ suggestions(): SuggestionsMethods;
63
68
  /**
64
69
  * Append a new message to the thread.
65
70
  *
@@ -89,6 +94,18 @@ type ThreadMethods = {
89
94
  */
90
95
  resumeRun(config: CreateResumeRunConfig): void;
91
96
  cancelRun(): void;
97
+ /**
98
+ * Re-fetch this thread's state from its backing store, in place: the tap
99
+ * thread's refetch hook, which `threads.reloadMainThread()` prefers and
100
+ * whose rejection it propagates. `capabilities.refetchThread` is the
101
+ * portable feature-detection signal; a legacy-bridged thread reports it
102
+ * there while routing the refetch through its runtime, not this method.
103
+ * The method-shorthand optionality is load-bearing: an explicit
104
+ * `| undefined` stops `ThreadMethods` satisfying `ClientMethods` and
105
+ * collapses the client schema, which only a workspace-level app typecheck
106
+ * surfaces.
107
+ */
108
+ unstable_refetchThread?(): Promise<void>;
92
109
  getModelContext(): ModelContext;
93
110
  export(): ExportedMessageRepository;
94
111
  import(repository: ExportedMessageRepository): void;
@@ -1 +1 @@
1
- {"version":3,"file":"thread.d.ts","names":[],"sources":["../../../src/store/scopes/thread.ts"],"mappings":";;;;;;;;;;KAoBY;;;;WAID;;;;WAIA;;;;WAIA;;;;WAIA;;;;WAIA,cAAc;;;;WAId,mBAAmB;;;;;WAKnB,OAAO;;;;WAIP,sBAAsB;;;;WAItB;;WAEA,QAAQ;WACR,OAAO;WACP,UAAU;;KAGT;;;;EAIV,YAAY;;;;EAIZ,YAAY;;;;;;;;;;;;;;;;;EAiBZ,OAAO,SAAS;EAChB,cAAc,2BAA2B;;;;;EAKzC,SAAS,QAAQ;;;;;EAKjB,UAAU,QAAQ;EAClB;EACA,mBAAmB;EACnB,UAAU;EACV,OAAO,YAAY;;;;;EAKnB,MAAM,2BAA2B;EACjC,oBAAoB;EACpB,QAAQ;IAAY;;IAAiB;MAAkB;;EAEvD;EACA;EACA;EACA;EACA,qBAAqB,uBAAuB;EAC5C;EACA;EACA,0BAA0B;;KAGhB;EACV;EACA;IAAS;;;KAGC;;;;;EAKV;IAAqB;;;;;;EAKrB;IAAmB;;;;;;;EAMnB;IAAuB;;;;;;EAKvB;IAA+B;;;KAGrB;EACV,SAAS;EACT,MAAM;EACN,QAAQ"}
1
+ {"version":3,"file":"thread.d.ts","names":[],"sources":["../../../src/store/scopes/thread.ts"],"mappings":";;;;;;;;;;;KAqBY;;;;WAID;;;;WAIA;;;;WAIA;;;;WAIA;;;;WAIA,cAAc;;;;WAId,mBAAmB;;;;;WAKnB,OAAO;;;;WAIP,sBAAsB;;;;WAItB;;WAEA,QAAQ;WACR,OAAO;WACP,UAAU;;KAGT;;;;EAIV,YAAY;;;;EAIZ,YAAY;;;;EAIZ,eAAe;;;;;;;;;;;;;;;;;EAiBf,OAAO,SAAS;EAChB,cAAc,2BAA2B;;;;;EAKzC,SAAS,QAAQ;;;;;EAKjB,UAAU,QAAQ;EAClB;;;;;;;;;;;;EAYA,2BAA2B;EAC3B,mBAAmB;EACnB,UAAU;EACV,OAAO,YAAY;;;;;EAKnB,MAAM,2BAA2B;EACjC,oBAAoB;EACpB,QAAQ;IAAY;;IAAiB;MAAkB;;EAEvD;EACA;EACA;EACA;EACA,qBAAqB,uBAAuB;EAC5C;EACA;EACA,0BAA0B;;KAGhB;EACV;EACA;IAAS;;;KAGC;;;;;EAKV;IAAqB;;;;;;EAKrB;IAAmB;;;;;;;EAMnB;IAAuB;;;;;;EAKvB;IAA+B;;;KAGrB;EACV,SAAS;EACT,MAAM;EACN,QAAQ"}