@assistant-ui/core 0.3.5 → 0.3.7

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 (207) hide show
  1. package/dist/index.d.ts +4 -4
  2. package/dist/index.js.map +1 -1
  3. package/dist/internal.js +1 -1
  4. package/dist/react/AssistantProvider.d.ts +3 -2
  5. package/dist/react/AssistantProvider.d.ts.map +1 -1
  6. package/dist/react/AssistantProvider.js +19 -26
  7. package/dist/react/AssistantProvider.js.map +1 -1
  8. package/dist/react/AssistantRuntimeProvider.d.ts +7 -2
  9. package/dist/react/AssistantRuntimeProvider.d.ts.map +1 -1
  10. package/dist/react/AssistantRuntimeProvider.js +9 -7
  11. package/dist/react/AssistantRuntimeProvider.js.map +1 -1
  12. package/dist/react/RuntimeAdapter.js +1 -1
  13. package/dist/react/RuntimeAdapter.js.map +1 -1
  14. package/dist/react/client/Interactables.js +1 -1
  15. package/dist/react/client/Interactables.js.map +1 -1
  16. package/dist/react/client/Tools.d.ts +1 -1
  17. package/dist/react/client/Tools.js +1 -1
  18. package/dist/react/client/Tools.js.map +1 -1
  19. package/dist/react/index.d.ts +9 -9
  20. package/dist/react/index.js +4 -4
  21. package/dist/react/model-context/interactableTool.d.ts +1 -1
  22. package/dist/react/model-context/useAssistantTool.d.ts +1 -1
  23. package/dist/react/providers/AttachmentByIndexProvider.d.ts.map +1 -1
  24. package/dist/react/providers/AttachmentByIndexProvider.js +33 -39
  25. package/dist/react/providers/AttachmentByIndexProvider.js.map +1 -1
  26. package/dist/react/providers/ChainOfThoughtByIndicesProvider.d.ts.map +1 -1
  27. package/dist/react/providers/ChainOfThoughtByIndicesProvider.js +15 -20
  28. package/dist/react/providers/ChainOfThoughtByIndicesProvider.js.map +1 -1
  29. package/dist/react/providers/ChainOfThoughtPartByIndexProvider.js +17 -20
  30. package/dist/react/providers/ChainOfThoughtPartByIndexProvider.js.map +1 -1
  31. package/dist/react/providers/MessageByIdProvider.js +28 -38
  32. package/dist/react/providers/MessageByIdProvider.js.map +1 -1
  33. package/dist/react/providers/MessageByIndexProvider.js +28 -38
  34. package/dist/react/providers/MessageByIndexProvider.js.map +1 -1
  35. package/dist/react/providers/PartByIndexProvider.js +17 -20
  36. package/dist/react/providers/PartByIndexProvider.js.map +1 -1
  37. package/dist/react/providers/QueueItemByIndexProvider.js +21 -21
  38. package/dist/react/providers/QueueItemByIndexProvider.js.map +1 -1
  39. package/dist/react/providers/ReadonlyThreadProvider.js +24 -32
  40. package/dist/react/providers/ReadonlyThreadProvider.js.map +1 -1
  41. package/dist/react/providers/SuggestionByIndexProvider.js +17 -20
  42. package/dist/react/providers/SuggestionByIndexProvider.js.map +1 -1
  43. package/dist/react/providers/TextMessagePartProvider.d.ts.map +1 -1
  44. package/dist/react/providers/TextMessagePartProvider.js +16 -19
  45. package/dist/react/providers/TextMessagePartProvider.js.map +1 -1
  46. package/dist/react/providers/ThreadListItemByIndexProvider.js +17 -20
  47. package/dist/react/providers/ThreadListItemByIndexProvider.js.map +1 -1
  48. package/dist/react/providers/ThreadListItemRuntimeProvider.js +15 -18
  49. package/dist/react/providers/ThreadListItemRuntimeProvider.js.map +1 -1
  50. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts +7 -3
  51. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
  52. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +5 -2
  53. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
  54. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js +3 -2
  55. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
  56. package/dist/react/runtimes/createMessageConverter.d.ts +1 -1
  57. package/dist/react/runtimes/createRuntimeExtras.d.ts +4 -1
  58. package/dist/react/runtimes/createRuntimeExtras.d.ts.map +1 -1
  59. package/dist/react/runtimes/createRuntimeExtras.js +6 -17
  60. package/dist/react/runtimes/createRuntimeExtras.js.map +1 -1
  61. package/dist/react/runtimes/useLocalRuntime.d.ts +3 -1
  62. package/dist/react/runtimes/useLocalRuntime.d.ts.map +1 -1
  63. package/dist/react/runtimes/useLocalRuntime.js +4 -2
  64. package/dist/react/runtimes/useLocalRuntime.js.map +1 -1
  65. package/dist/react/types/scopes/dataRenderers.d.ts +1 -1
  66. package/dist/react/types/scopes/interactables.d.ts +1 -1
  67. package/dist/react/types/scopes/tools.d.ts +1 -1
  68. package/dist/runtime/api/composer-runtime.d.ts +5 -1
  69. package/dist/runtime/api/composer-runtime.d.ts.map +1 -1
  70. package/dist/runtime/api/composer-runtime.js +8 -1
  71. package/dist/runtime/api/composer-runtime.js.map +1 -1
  72. package/dist/runtime/api/message-runtime.js +1 -1
  73. package/dist/runtime/api/message-runtime.js.map +1 -1
  74. package/dist/runtime/api/thread-runtime.d.ts +4 -2
  75. package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
  76. package/dist/runtime/base/base-composer-runtime-core.d.ts +2 -1
  77. package/dist/runtime/base/base-composer-runtime-core.d.ts.map +1 -1
  78. package/dist/runtime/base/base-composer-runtime-core.js +1 -1
  79. package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
  80. package/dist/runtime/base/default-thread-composer-runtime-core.d.ts +3 -1
  81. package/dist/runtime/base/default-thread-composer-runtime-core.d.ts.map +1 -1
  82. package/dist/runtime/base/default-thread-composer-runtime-core.js +14 -3
  83. package/dist/runtime/base/default-thread-composer-runtime-core.js.map +1 -1
  84. package/dist/runtime/interfaces/composer-runtime-core.d.ts +2 -1
  85. package/dist/runtime/interfaces/composer-runtime-core.d.ts.map +1 -1
  86. package/dist/runtime/interfaces/thread-runtime-core.d.ts +3 -1
  87. package/dist/runtime/interfaces/thread-runtime-core.d.ts.map +1 -1
  88. package/dist/runtime/queue/external-thread-queue-adapter.d.ts +19 -6
  89. package/dist/runtime/queue/external-thread-queue-adapter.d.ts.map +1 -1
  90. package/dist/runtime/queue/message-queue.d.ts +10 -1
  91. package/dist/runtime/queue/message-queue.d.ts.map +1 -1
  92. package/dist/runtime/queue/message-queue.js +138 -36
  93. package/dist/runtime/queue/message-queue.js.map +1 -1
  94. package/dist/runtime/utils/runtime-extras-brand.d.ts +21 -0
  95. package/dist/runtime/utils/runtime-extras-brand.d.ts.map +1 -0
  96. package/dist/runtime/utils/runtime-extras-brand.js +37 -0
  97. package/dist/runtime/utils/runtime-extras-brand.js.map +1 -0
  98. package/dist/runtime/utils/thread-message-like.d.ts.map +1 -1
  99. package/dist/runtime/utils/thread-message-like.js +2 -1
  100. package/dist/runtime/utils/thread-message-like.js.map +1 -1
  101. package/dist/runtimes/external-store/external-store-adapter.d.ts +1 -1
  102. package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts +3 -1
  103. package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts.map +1 -1
  104. package/dist/runtimes/external-store/external-store-thread-runtime-core.js +7 -6
  105. package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
  106. package/dist/runtimes/local/local-runtime-options.d.ts +13 -0
  107. package/dist/runtimes/local/local-runtime-options.d.ts.map +1 -1
  108. package/dist/runtimes/local/local-thread-runtime-core.d.ts +5 -1
  109. package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
  110. package/dist/runtimes/local/local-thread-runtime-core.js +30 -14
  111. package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
  112. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts +1 -1
  113. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js +1 -1
  114. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js.map +1 -1
  115. package/dist/runtimes/remote-thread-list/empty-thread-core.js +1 -1
  116. package/dist/runtimes/remote-thread-list/empty-thread-core.js.map +1 -1
  117. package/dist/runtimes/remote-thread-list/types.d.ts +6 -3
  118. package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -1
  119. package/dist/store/clients/runtime-adapter.d.ts.map +1 -1
  120. package/dist/store/clients/runtime-adapter.js +1 -1
  121. package/dist/store/clients/runtime-adapter.js.map +1 -1
  122. package/dist/store/clients/suggestions.js +1 -1
  123. package/dist/store/clients/suggestions.js.map +1 -1
  124. package/dist/store/clients/thread-message-client.js +1 -1
  125. package/dist/store/clients/thread-message-client.js.map +1 -1
  126. package/dist/store/index.d.ts +10 -1
  127. package/dist/store/index.js +7 -1
  128. package/dist/store/runtime-clients/composer-runtime-client.d.ts.map +1 -1
  129. package/dist/store/runtime-clients/composer-runtime-client.js +12 -5
  130. package/dist/store/runtime-clients/composer-runtime-client.js.map +1 -1
  131. package/dist/store/runtime-clients/message-runtime-client.d.ts.map +1 -1
  132. package/dist/store/runtime-clients/message-runtime-client.js +1 -1
  133. package/dist/store/runtime-clients/message-runtime-client.js.map +1 -1
  134. package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts.map +1 -1
  135. package/dist/store/runtime-clients/thread-list-item-runtime-client.js +1 -1
  136. package/dist/store/runtime-clients/thread-list-item-runtime-client.js.map +1 -1
  137. package/dist/store/runtime-clients/thread-list-runtime-client.d.ts.map +1 -1
  138. package/dist/store/runtime-clients/thread-list-runtime-client.js +1 -1
  139. package/dist/store/runtime-clients/thread-list-runtime-client.js.map +1 -1
  140. package/dist/store/runtime-clients/thread-runtime-client.js +1 -1
  141. package/dist/store/runtime-clients/thread-runtime-client.js.map +1 -1
  142. package/dist/store/scopes/composer.d.ts +7 -3
  143. package/dist/store/scopes/composer.d.ts.map +1 -1
  144. package/dist/store/scopes/queue-item.d.ts +10 -0
  145. package/dist/store/scopes/queue-item.d.ts.map +1 -1
  146. package/dist/store/scopes/queue-item.js.map +1 -1
  147. package/package.json +15 -15
  148. package/src/index.ts +5 -1
  149. package/src/react/AssistantProvider.tsx +20 -18
  150. package/src/react/AssistantRuntimeProvider.test.tsx +55 -1
  151. package/src/react/AssistantRuntimeProvider.tsx +12 -2
  152. package/src/react/RuntimeAdapter.test.ts +85 -0
  153. package/src/react/RuntimeAdapter.ts +1 -1
  154. package/src/react/client/Interactables.test.ts +3 -2
  155. package/src/react/client/Interactables.ts +4 -4
  156. package/src/react/client/Tools.ts +4 -4
  157. package/src/react/index.ts +1 -0
  158. package/src/react/providers/AttachmentByIndexProvider.tsx +15 -7
  159. package/src/react/providers/ChainOfThoughtByIndicesProvider.tsx +12 -4
  160. package/src/react/providers/ChainOfThoughtPartByIndexProvider.tsx +8 -4
  161. package/src/react/providers/MessageByIdProvider.tsx +8 -4
  162. package/src/react/providers/MessageByIndexProvider.tsx +8 -4
  163. package/src/react/providers/PartByIndexProvider.tsx +8 -4
  164. package/src/react/providers/QueueItemByIndexProvider.tsx +9 -5
  165. package/src/react/providers/ReadonlyThreadProvider.tsx +9 -4
  166. package/src/react/providers/SuggestionByIndexProvider.tsx +8 -4
  167. package/src/react/providers/TextMessagePartProvider.tsx +13 -4
  168. package/src/react/providers/ThreadListItemByIndexProvider.tsx +8 -4
  169. package/src/react/providers/ThreadListItemRuntimeProvider.tsx +8 -4
  170. package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +19 -4
  171. package/src/react/runtimes/createRuntimeExtras.test.ts +14 -1
  172. package/src/react/runtimes/createRuntimeExtras.ts +15 -26
  173. package/src/react/runtimes/useLocalRuntime.ts +4 -0
  174. package/src/runtime/api/composer-runtime.ts +11 -2
  175. package/src/runtime/api/message-runtime.test.ts +25 -0
  176. package/src/runtime/api/message-runtime.ts +1 -1
  177. package/src/runtime/base/base-composer-runtime-core.ts +5 -1
  178. package/src/runtime/base/default-thread-composer-runtime-core.ts +27 -3
  179. package/src/runtime/interfaces/composer-runtime-core.ts +2 -1
  180. package/src/runtime/interfaces/thread-runtime-core.ts +3 -1
  181. package/src/runtime/queue/external-thread-queue-adapter.ts +19 -3
  182. package/src/runtime/queue/message-queue.ts +200 -38
  183. package/src/runtime/utils/runtime-extras-brand.ts +47 -0
  184. package/src/runtime/utils/thread-message-like.ts +2 -4
  185. package/src/runtimes/external-store/external-store-thread-runtime-core.ts +10 -8
  186. package/src/runtimes/local/local-runtime-options.ts +15 -0
  187. package/src/runtimes/local/local-thread-runtime-core.test.ts +43 -0
  188. package/src/runtimes/local/local-thread-runtime-core.ts +48 -13
  189. package/src/runtimes/readonly/ReadonlyThreadRuntimeCore.ts +1 -1
  190. package/src/runtimes/remote-thread-list/empty-thread-core.ts +1 -1
  191. package/src/runtimes/remote-thread-list/types.ts +9 -2
  192. package/src/store/clients/runtime-adapter.ts +2 -5
  193. package/src/store/clients/suggestions.ts +1 -1
  194. package/src/store/clients/thread-message-client.ts +1 -1
  195. package/src/store/index.ts +31 -0
  196. package/src/store/runtime-clients/composer-runtime-client.ts +15 -10
  197. package/src/store/runtime-clients/message-runtime-client.ts +2 -5
  198. package/src/store/runtime-clients/thread-list-item-runtime-client.ts +2 -1
  199. package/src/store/runtime-clients/thread-list-runtime-client.ts +2 -5
  200. package/src/store/runtime-clients/thread-runtime-client.ts +2 -2
  201. package/src/store/scopes/composer.ts +6 -4
  202. package/src/store/scopes/queue-item.ts +8 -1
  203. package/src/tests/external-store-thread-runtime-core.test.ts +56 -13
  204. package/src/tests/framework-neutral-boundary.test.ts +257 -0
  205. package/src/tests/message-queue.test.ts +494 -34
  206. package/src/tests/thread-message-like.test.ts +66 -0
  207. package/LICENSE +0 -21
@@ -1 +1 @@
1
- {"version":3,"file":"local-thread-runtime-core.js","names":["fromThreadMessageLike","generateId","ChatModelAdapter","ChatModelRunResult","shouldContinue","LocalRuntimeOptionsBase","consumeSuggestionResult","AddToolResultOptions","ResumeToolCallOptions","RespondToToolApprovalOptions","ThreadSuggestion","ThreadRuntimeCore","StartRunConfig","ResumeRunConfig","BaseThreadRuntimeCore","AppendMessage","ThreadAssistantMessage","RunConfig","toAssistantError","ModelContextProvider","createMessageQueue","MessageQueueController","EMPTY_QUEUE_ITEMS","QueueItemState","AbortError","Error","name","detach","constructor","message","LocalThreadRuntimeCore","capabilities","switchToBranch","switchBranchDuringRun","edit","delete","reload","refetchThread","cancel","unstable_copy","speech","dictation","voice","attachments","feedback","queue","abortController","AbortController","_queue","_queueRunInFlight","_historyWrites","Map","Promise","_chainHistoryWrite","id","write","next","get","resolve","then","stored","set","_persistPausedMessage","parentId","status","type","history","_options","adapters","update","bind","item","runConfig","_lastRunConfig","catch","isDisabled","isSendDisabled","_isLoading","isLoading","_suggestions","_suggestionsController","suggestions","contextProvider","options","__internal_setOptions","_getThreadId","__internal_setGetThreadId","getThreadId","_getInitializePromise","__internal_setGetInitializePromise","getPromise","extras","undefined","hasUpdates","canSpeak","canDictate","canVoice","canAttach","canFeedback","canDelete","canQueue","unstable_enableMessageQueue","run","_runAppend","finally","notifyIdle","subscribe","_notifySubscribers","adapter","clear","_loadPromise","__internal_load","promise","load","repo","repository","import","messages","length","ensureInitialized","resume","unstable_resume","startRun","headId","sourceId","append","isTail","at","willRun","role","enqueue","steer","getQueueItems","items","steerQueueItem","queueItemId","removeQueueItem","remove","initPromise","newMessage","reason","addOrUpdateMessage","resetHead","deleteMessage","messageId","getMessages","messageIndex","findIndex","m","resumeRun","stream","startConfig","exportExternalState","importExternalState","runCallback","content","metadata","unstable_state","state","unstable_annotations","unstable_data","steps","custom","createdAt","Date","_runLoop","_notifyEventSubscribers","alreadyPersisted","notifyBusy","abort","performRoundtrip","unstable_humanToolNames","queueMicrotask","suggestion","signal","promiseOrGenerator","generate","onUpdate","r","initialContent","initialAnnotations","initialData","initialSteps","initialCustom","updateMessage","Partial","newSteps","newAnnotations","newData","annotations","data","timing","maxSteps","unstable_composerMetadata","_","context","getModelContext","chatModel","abortSignal","threadId","unstable_assistantMessageId","unstable_threadId","unstable_parentId","unstable_getMessage","Symbol","asyncIterator","aborted","e","error","isTerminal","isPausing","cancelRun","addToolResult","toolCallId","result","isError","artifact","messageData","getMessage","added","found","newContent","map","c","resumeToolCall","respondToToolApproval","approvalId","approved","optionId","findLast","some","approval","target","find","resolution","targetApproval"],"sources":["../../../src/runtimes/local/local-thread-runtime-core.ts"],"sourcesContent":["import { fromThreadMessageLike } from \"../../runtime/utils/thread-message-like\";\nimport { generateId } from \"../../utils/id\";\nimport type {\n ChatModelAdapter,\n ChatModelRunResult,\n} from \"../../runtime/utils/chat-model-adapter\";\nimport { shouldContinue } from \"./should-continue\";\nimport type { LocalRuntimeOptionsBase } from \"./local-runtime-options\";\nimport { consumeSuggestionResult } from \"../../adapters/suggestion\";\nimport type {\n AddToolResultOptions,\n ResumeToolCallOptions,\n RespondToToolApprovalOptions,\n ThreadSuggestion,\n ThreadRuntimeCore,\n StartRunConfig,\n ResumeRunConfig,\n} from \"../../runtime/interfaces/thread-runtime-core\";\nimport { BaseThreadRuntimeCore } from \"../../runtime/base/base-thread-runtime-core\";\nimport type {\n AppendMessage,\n ThreadAssistantMessage,\n} from \"../../types/message\";\nimport type { RunConfig } from \"../../types/message\";\nimport { toAssistantError } from \"../../types/error\";\nimport type { ModelContextProvider } from \"../../model-context/types\";\nimport {\n createMessageQueue,\n type MessageQueueController,\n} from \"../../runtime/queue/message-queue\";\nimport {\n EMPTY_QUEUE_ITEMS,\n type QueueItemState,\n} from \"../../store/scopes/queue-item\";\n\nclass AbortError extends Error {\n override name = \"AbortError\";\n detach: boolean;\n\n constructor(detach: boolean, message?: string) {\n super(message);\n this.detach = detach;\n }\n}\n\nexport class LocalThreadRuntimeCore\n extends BaseThreadRuntimeCore\n implements ThreadRuntimeCore\n{\n public readonly capabilities = {\n switchToBranch: true,\n switchBranchDuringRun: true,\n edit: true,\n delete: false,\n reload: true,\n refetchThread: false,\n cancel: true,\n unstable_copy: true,\n speech: false,\n dictation: false,\n voice: false,\n attachments: false,\n feedback: false,\n queue: false,\n };\n\n private abortController: AbortController | null = null;\n\n private _queue: MessageQueueController | null = null;\n private _queueRunInFlight = false;\n\n private _historyWrites = new Map<string, Promise<void>>();\n\n // Writes for one message id must land in issue order; an earlier paused\n // snapshot arriving after the terminal write would resurrect the pause.\n private _chainHistoryWrite(\n id: string,\n write: () => Promise<void>,\n ): Promise<void> {\n const next = (this._historyWrites.get(id) ?? Promise.resolve()).then(\n write,\n write,\n );\n const stored = next.then(\n () => {},\n () => {},\n );\n this._historyWrites.set(id, stored);\n void stored.then(() => {\n if (this._historyWrites.get(id) === stored) {\n this._historyWrites.delete(id);\n }\n });\n return next;\n }\n\n // A decision recorded on a still-paused message must reach history before\n // the run resumes, or a refresh would restore the message without it.\n private _persistPausedMessage(\n parentId: string | null,\n message: ThreadAssistantMessage,\n ) {\n if (message.status?.type !== \"requires-action\") return;\n const history = this._options.adapters.history;\n if (!history?.update) return;\n const update = history.update.bind(history);\n const item = { parentId, message, runConfig: this._lastRunConfig };\n this._chainHistoryWrite(message.id, () => update(item)).catch(() => {});\n }\n\n public readonly isDisabled = false;\n public readonly isSendDisabled = false;\n\n private _isLoading = false;\n public get isLoading() {\n return this._isLoading;\n }\n\n private _suggestions: readonly ThreadSuggestion[] = [];\n private _suggestionsController: AbortController | null = null;\n public get suggestions(): readonly ThreadSuggestion[] {\n return this._suggestions;\n }\n\n public get adapters() {\n return this._options.adapters;\n }\n\n constructor(\n contextProvider: ModelContextProvider,\n options: LocalRuntimeOptionsBase,\n ) {\n super(contextProvider);\n this.__internal_setOptions(options);\n }\n\n private _options!: LocalRuntimeOptionsBase;\n\n private _lastRunConfig: RunConfig = {};\n\n private _getThreadId?: () => string | undefined;\n\n public __internal_setGetThreadId(getThreadId: () => string | undefined) {\n this._getThreadId = getThreadId;\n }\n\n private _getInitializePromise?: () => Promise<unknown> | undefined;\n\n public __internal_setGetInitializePromise(\n getPromise: () => Promise<unknown> | undefined,\n ) {\n this._getInitializePromise = getPromise;\n }\n\n public get extras() {\n return undefined;\n }\n\n public __internal_setOptions(options: LocalRuntimeOptionsBase) {\n if (this._options === options) return;\n\n this._options = options;\n\n let hasUpdates = false;\n\n const canSpeak = options.adapters?.speech !== undefined;\n if (this.capabilities.speech !== canSpeak) {\n this.capabilities.speech = canSpeak;\n hasUpdates = true;\n }\n\n const canDictate = options.adapters?.dictation !== undefined;\n if (this.capabilities.dictation !== canDictate) {\n this.capabilities.dictation = canDictate;\n hasUpdates = true;\n }\n\n const canVoice = options.adapters?.voice !== undefined;\n if (this.capabilities.voice !== canVoice) {\n this.capabilities.voice = canVoice;\n hasUpdates = true;\n }\n\n const canAttach = options.adapters?.attachments !== undefined;\n if (this.capabilities.attachments !== canAttach) {\n this.capabilities.attachments = canAttach;\n hasUpdates = true;\n }\n\n const canFeedback = options.adapters?.feedback !== undefined;\n if (this.capabilities.feedback !== canFeedback) {\n this.capabilities.feedback = canFeedback;\n hasUpdates = true;\n }\n\n const canDelete = options.adapters?.history?.delete !== undefined;\n if (this.capabilities.delete !== canDelete) {\n this.capabilities.delete = canDelete;\n hasUpdates = true;\n }\n\n const canQueue = options.unstable_enableMessageQueue === true;\n if (canQueue && !this._queue) {\n this._queue = createMessageQueue({\n run: (message) => {\n // release the queue when the dispatch settles, even if it rejects\n // before reaching startRun's finally, so a failure can't deadlock it\n this._queueRunInFlight = true;\n void this._runAppend(message)\n .finally(() => {\n this._queueRunInFlight = false;\n this._queue?.notifyIdle();\n })\n .catch(() => {});\n },\n });\n this._queue.subscribe(() => this._notifySubscribers());\n } else if (!canQueue && this._queue) {\n this._queue.adapter.clear(\"cancel-run\");\n this._queue = null;\n }\n if (this.capabilities.queue !== canQueue) {\n this.capabilities.queue = canQueue;\n hasUpdates = true;\n }\n\n if (hasUpdates) this._notifySubscribers();\n }\n\n private _loadPromise: Promise<void> | undefined;\n public __internal_load() {\n if (this._loadPromise) return this._loadPromise;\n\n const promise = this.adapters.history?.load() ?? Promise.resolve(null);\n\n this._isLoading = true;\n this._notifySubscribers();\n\n this._loadPromise = promise\n .then((repo) => {\n if (!repo) return;\n this.repository.import(repo);\n if (repo.messages.length > 0) {\n this.ensureInitialized();\n }\n this._notifySubscribers();\n\n const resume = this.adapters.history?.resume?.bind(\n this.adapters.history,\n );\n if (repo.unstable_resume && resume) {\n this.startRun(\n {\n parentId: this.repository.headId,\n sourceId: this.repository.headId,\n runConfig: this._lastRunConfig,\n },\n resume,\n ).catch(() => {});\n }\n })\n .finally(() => {\n this._isLoading = false;\n this._notifySubscribers();\n });\n\n return this._loadPromise;\n }\n\n public async append(message: AppendMessage): Promise<void> {\n const isTail = message.parentId === (this.messages.at(-1)?.id ?? null);\n const willRun = message.startRun ?? message.role === \"user\";\n if (this._queue && willRun && isTail) {\n this._queue.adapter.enqueue(message, { steer: message.steer ?? false });\n return;\n }\n if (this._queue && !isTail) this._queue.adapter.clear(\"edit\");\n return this._runAppend(message);\n }\n\n public getQueueItems(): readonly QueueItemState[] {\n // Reads can arrive during base-thread construction, before the queue field\n // is assigned, so guard against the unset field.\n return this._queue?.adapter.items ?? EMPTY_QUEUE_ITEMS;\n }\n\n public steerQueueItem(queueItemId: string): void {\n this._queue?.adapter.steer(queueItemId);\n }\n\n public removeQueueItem(queueItemId: string): void {\n this._queue?.adapter.remove(queueItemId);\n }\n\n private async _runAppend(message: AppendMessage): Promise<void> {\n this.ensureInitialized();\n\n const initPromise = this._getInitializePromise?.();\n if (initPromise) {\n await initPromise;\n }\n\n const newMessage = fromThreadMessageLike(message, generateId(), {\n type: \"complete\",\n reason: \"unknown\",\n });\n this.repository.addOrUpdateMessage(message.parentId, newMessage);\n this._options.adapters.history?.append({\n parentId: message.parentId,\n message: newMessage,\n ...(message.runConfig !== undefined && { runConfig: message.runConfig }),\n });\n\n const startRun = message.startRun ?? message.role === \"user\";\n if (startRun) {\n await this.startRun({\n parentId: newMessage.id,\n sourceId: message.sourceId,\n runConfig: message.runConfig ?? {},\n });\n } else {\n this.repository.resetHead(newMessage.id);\n this._notifySubscribers();\n }\n }\n\n public async deleteMessage(messageId: string): Promise<void> {\n const adapter = this._options.adapters.history;\n if (!adapter?.delete)\n throw new Error(\"Runtime does not support deleting messages.\");\n\n const messages = this.repository.getMessages();\n const messageIndex = messages.findIndex((m) => m.id === messageId);\n if (messageIndex === -1) throw new Error(\"Message not found.\");\n\n const message = messages[messageIndex]!;\n const parentId = messages[messageIndex - 1]?.id ?? null;\n const items = [{ parentId, message }];\n\n await adapter.delete(items);\n\n this.repository.deleteMessage(messageId);\n this._notifySubscribers();\n }\n\n public resumeRun({ stream, ...startConfig }: ResumeRunConfig): Promise<void> {\n if (!stream)\n throw new Error(\"You must pass a stream parameter to resume runs.\");\n return this.startRun(startConfig, stream);\n }\n\n public exportExternalState(): any {\n throw new Error(\"Runtime does not support exporting external states.\");\n }\n\n public importExternalState(): void {\n throw new Error(\"Runtime does not support importing external states.\");\n }\n\n public async startRun(\n { parentId, runConfig }: StartRunConfig,\n runCallback?: ChatModelAdapter[\"run\"],\n ): Promise<void> {\n this.ensureInitialized();\n\n // add assistant message\n const id = generateId();\n const message: ThreadAssistantMessage = {\n id,\n role: \"assistant\",\n status: { type: \"running\" },\n content: [],\n metadata: {\n unstable_state: this.state,\n unstable_annotations: [],\n unstable_data: [],\n steps: [],\n custom: {},\n },\n createdAt: new Date(),\n };\n\n return this._runLoop(parentId, message, runConfig, runCallback);\n }\n\n private async _runLoop(\n parentId: string | null,\n message: ThreadAssistantMessage,\n runConfig: RunConfig | undefined,\n runCallback?: ChatModelAdapter[\"run\"],\n ): Promise<void> {\n this._notifyEventSubscribers(\"runStart\", {});\n\n // A run entered on a requires-action message resumes a pause an\n // update-capable adapter already holds (written at pause time or loaded).\n const alreadyPersisted =\n message.status?.type === \"requires-action\" &&\n this._options.adapters.history?.update !== undefined;\n\n try {\n // mark busy for runs not started through the queue (regenerate, resume)\n this._queue?.notifyBusy();\n this._suggestions = [];\n this._suggestionsController?.abort();\n this._suggestionsController = null;\n this._notifySubscribers();\n\n do {\n message = await this.performRoundtrip(\n parentId,\n message,\n runConfig,\n alreadyPersisted,\n runCallback,\n );\n runCallback = undefined;\n } while (shouldContinue(message, this._options.unstable_humanToolNames));\n } finally {\n this._notifyEventSubscribers(\"runEnd\", {});\n // queue-driven runs release from the driver settle handler; a direct\n // run (regenerate, resume) releases here\n if (!this._queueRunInFlight) {\n queueMicrotask(() => this._queue?.notifyIdle());\n }\n }\n\n if (\n this.adapters.suggestion &&\n message.status?.type !== \"requires-action\"\n ) {\n this._suggestionsController = new AbortController();\n const signal = this._suggestionsController.signal;\n const adapter = this.adapters.suggestion;\n void (async () => {\n try {\n const promiseOrGenerator = adapter.generate({\n messages: this.messages,\n signal,\n });\n await consumeSuggestionResult(promiseOrGenerator, {\n signal,\n onUpdate: (r) => {\n this._suggestions = r;\n this._notifySubscribers();\n },\n });\n } catch {}\n })();\n }\n }\n\n private async performRoundtrip(\n parentId: string | null,\n message: ThreadAssistantMessage,\n runConfig: RunConfig | undefined,\n alreadyPersisted: boolean,\n runCallback?: ChatModelAdapter[\"run\"],\n ) {\n const messages = parentId ? this.repository.getMessages(parentId) : [];\n\n // abort existing run\n this.abortController?.abort();\n const abortController = new AbortController();\n this.abortController = abortController;\n\n const initialContent = message.content;\n const initialAnnotations = message.metadata?.unstable_annotations;\n const initialData = message.metadata?.unstable_data;\n const initialSteps = message.metadata?.steps;\n const initialCustom = message.metadata?.custom;\n const updateMessage = (m: Partial<ChatModelRunResult>) => {\n const newSteps = m.metadata?.steps;\n const steps = newSteps\n ? [...(initialSteps ?? []), ...newSteps]\n : undefined;\n\n const newAnnotations = m.metadata?.unstable_annotations;\n const newData = m.metadata?.unstable_data;\n const annotations = newAnnotations\n ? [...(initialAnnotations ?? []), ...newAnnotations]\n : undefined;\n const data = newData ? [...(initialData ?? []), ...newData] : undefined;\n\n message = {\n ...message,\n ...(m.content\n ? { content: [...initialContent, ...(m.content ?? [])] }\n : undefined),\n status: m.status ?? message.status,\n ...(m.metadata\n ? {\n metadata: {\n ...message.metadata,\n ...(m.metadata.unstable_state !== undefined\n ? { unstable_state: m.metadata.unstable_state }\n : undefined),\n ...(annotations\n ? { unstable_annotations: annotations }\n : undefined),\n ...(data ? { unstable_data: data } : undefined),\n ...(steps ? { steps } : undefined),\n ...(m.metadata?.timing\n ? { timing: m.metadata.timing }\n : undefined),\n ...(m.metadata?.custom\n ? {\n custom: {\n ...(initialCustom ?? {}),\n ...m.metadata.custom,\n },\n }\n : undefined),\n },\n }\n : undefined),\n };\n this.repository.addOrUpdateMessage(parentId, message);\n this._notifySubscribers();\n };\n\n const maxSteps = this._options.maxSteps ?? 2;\n\n try {\n const steps = message.metadata?.steps?.length ?? 0;\n if (steps >= maxSteps) {\n updateMessage({\n status: {\n type: \"incomplete\",\n reason: \"tool-calls\",\n },\n });\n return message;\n }\n\n updateMessage({\n status: {\n type: \"running\",\n },\n });\n\n // Switch to the new message branch right after adding it for the first time\n this.repository.resetHead(message.id);\n this._notifySubscribers();\n\n this._lastRunConfig = runConfig ?? {};\n // unstable_composerMetadata is composer-only (stamped onto the outgoing\n // message); never expose it to the chat-model adapter's run context.\n const { unstable_composerMetadata: _, ...context } =\n this.getModelContext();\n\n runCallback =\n runCallback ??\n this.adapters.chatModel.run.bind(this.adapters.chatModel);\n\n const abortSignal = abortController.signal;\n const threadId = this._getThreadId?.();\n const promiseOrGenerator = runCallback({\n messages,\n runConfig: this._lastRunConfig,\n abortSignal,\n context,\n unstable_assistantMessageId: message.id,\n unstable_threadId: threadId,\n unstable_parentId: parentId,\n unstable_getMessage() {\n return message;\n },\n });\n\n // handle async iterator for streaming results\n if (Symbol.asyncIterator in promiseOrGenerator) {\n for await (const r of promiseOrGenerator) {\n if (abortSignal.aborted) {\n updateMessage({\n status: { type: \"incomplete\", reason: \"cancelled\" },\n });\n break;\n }\n\n updateMessage(r);\n }\n } else {\n updateMessage(await promiseOrGenerator);\n }\n\n if (message.status.type === \"running\") {\n updateMessage({\n status: abortSignal.aborted\n ? { type: \"incomplete\", reason: \"cancelled\" }\n : { type: \"complete\", reason: \"unknown\" },\n });\n }\n } catch (e) {\n if (e instanceof AbortError) {\n updateMessage({\n status: { type: \"incomplete\", reason: \"cancelled\" },\n });\n } else if (e instanceof Error && e.name === \"AbortError\") {\n updateMessage({\n status: { type: \"incomplete\", reason: \"cancelled\" },\n });\n } else {\n updateMessage({\n status: {\n type: \"incomplete\",\n reason: \"error\",\n error: toAssistantError(e),\n },\n });\n\n throw e;\n }\n } finally {\n if (this.abortController === abortController) {\n this.abortController = null;\n }\n\n const history = this._options.adapters.history;\n const item = {\n parentId,\n message,\n runConfig: this._lastRunConfig,\n };\n const isTerminal =\n message.status.type === \"complete\" ||\n message.status.type === \"incomplete\";\n const isPausing =\n message.status.type === \"requires-action\" &&\n !shouldContinue(message, this._options.unstable_humanToolNames);\n\n // Pauses are written only for adapters that can rewrite the entry later;\n // an append-only adapter would strand a half-finished run in history.\n if (isTerminal || (isPausing && history?.update)) {\n const write =\n alreadyPersisted && history?.update\n ? history.update.bind(history)\n : history?.append.bind(history);\n if (write) {\n await this._chainHistoryWrite(message.id, () => write(item));\n }\n }\n }\n return message;\n }\n\n public detach() {\n this._queue?.adapter.clear(\"cancel-run\");\n const error = new AbortError(true);\n this.abortController?.abort(error);\n this.abortController = null;\n this._suggestionsController?.abort();\n this._suggestionsController = null;\n }\n\n public cancelRun() {\n this._queue?.adapter.clear(\"cancel-run\");\n const error = new AbortError(false);\n this.abortController?.abort(error);\n this.abortController = null;\n this._suggestionsController?.abort();\n this._suggestionsController = null;\n }\n\n public addToolResult({\n messageId,\n toolCallId,\n result,\n isError,\n artifact,\n }: AddToolResultOptions) {\n const messageData = this.repository.getMessage(messageId);\n const { parentId } = messageData;\n let { message } = messageData;\n\n if (message.role !== \"assistant\")\n throw new Error(\"Tried to add tool result to non-assistant message\");\n\n let added = false;\n let found = false;\n const newContent = message.content.map((c) => {\n if (c.type !== \"tool-call\") return c;\n if (c.toolCallId !== toolCallId) return c;\n found = true;\n if (!c.result) added = true;\n return {\n ...c,\n result,\n artifact,\n isError,\n };\n });\n\n if (!found)\n throw new Error(\"Tried to add tool result to non-existing tool call\");\n\n message = {\n ...message,\n content: newContent,\n };\n this.repository.addOrUpdateMessage(parentId, message);\n this._notifySubscribers();\n\n // a result may arrive mid-run or on a non-head message; the resume\n // intentionally aborts any in-flight run, unlike respondToToolApproval\n if (\n added &&\n shouldContinue(message, this._options.unstable_humanToolNames)\n ) {\n this._runLoop(parentId, message, this._lastRunConfig).catch(() => {});\n } else if (added) {\n this._persistPausedMessage(parentId, message);\n }\n }\n\n public resumeToolCall(_options: ResumeToolCallOptions) {\n throw new Error(\n \"Local runtime does not support resuming tool calls. For human-in-the-loop tools, list the tool in unstable_humanToolNames and complete the call with addToolResult.\",\n );\n }\n\n public respondToToolApproval({\n approvalId,\n approved,\n optionId,\n reason,\n }: RespondToToolApprovalOptions) {\n let message = this.repository\n .getMessages()\n .findLast(\n (m): m is ThreadAssistantMessage =>\n m.role === \"assistant\" &&\n m.content.some(\n (c) => c.type === \"tool-call\" && c.approval?.id === approvalId,\n ),\n );\n\n if (!message)\n throw new Error(\"Tried to respond to a non-existing tool approval\");\n\n if (this.abortController !== null)\n throw new Error(\n \"Tried to respond to a tool approval while a run is in progress\",\n );\n\n if (message.status?.type !== \"requires-action\")\n throw new Error(\n \"Tried to respond to a tool approval on a message whose status is not requires-action\",\n );\n\n const target = message.content.find(\n (c) => c.type === \"tool-call\" && c.approval?.id === approvalId,\n );\n if (target?.type !== \"tool-call\" || !target.approval)\n throw new Error(\"Tried to respond to a non-existing tool approval\");\n if (target.approval.resolution !== undefined)\n throw new Error(\n \"Tried to respond to a tool approval that was cancelled or expired\",\n );\n if (target.approval.approved !== undefined)\n throw new Error(\"Tried to respond to an already decided tool approval\");\n\n const targetApproval = target.approval;\n const newContent = message.content.map((c) => {\n if (c !== target) return c;\n const approval = {\n ...targetApproval,\n approved,\n ...(optionId != null && { optionId }),\n ...(reason != null && { reason }),\n };\n if (approved) return { ...c, approval };\n return {\n ...c,\n approval,\n result: { error: reason || \"Tool approval denied\" },\n isError: true,\n };\n });\n\n message = { ...message, content: newContent };\n const { parentId } = this.repository.getMessage(message.id);\n this.repository.addOrUpdateMessage(parentId, message);\n this._notifySubscribers();\n\n if (\n this.repository.headId === message.id &&\n shouldContinue(message, this._options.unstable_humanToolNames)\n ) {\n this._runLoop(parentId, message, this._lastRunConfig).catch(() => {});\n } else {\n this._persistPausedMessage(parentId, message);\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"local-thread-runtime-core.js","names":["fromThreadMessageLike","generateId","ChatModelAdapter","ChatModelRunResult","shouldContinue","LocalRuntimeOptionsBase","consumeSuggestionResult","AddToolResultOptions","ResumeToolCallOptions","RespondToToolApprovalOptions","ThreadSuggestion","ThreadRuntimeCore","StartRunConfig","ResumeRunConfig","BaseThreadRuntimeCore","AppendMessage","ThreadAssistantMessage","RunConfig","toAssistantError","ModelContextProvider","createMessageQueue","MessageQueueController","QueuePlacement","EMPTY_QUEUE_ITEMS","QueueItemState","AbortError","Error","name","detach","constructor","message","LocalThreadRuntimeCore","capabilities","switchToBranch","switchBranchDuringRun","edit","delete","reload","refetchThread","cancel","unstable_copy","speech","dictation","voice","attachments","feedback","queue","abortController","AbortController","_queue","_queueRunInFlight","_activeRun","cancelled","_runGeneration","_historyWrites","Map","Promise","_chainHistoryWrite","id","write","next","get","resolve","then","stored","set","_persistPausedMessage","parentId","status","type","history","_options","adapters","update","bind","item","runConfig","_lastRunConfig","catch","isDisabled","isSendDisabled","_isLoading","isLoading","_suggestions","_suggestionsController","suggestions","contextProvider","options","__internal_setOptions","_getThreadId","__internal_setGetThreadId","getThreadId","_getInitializePromise","__internal_setGetInitializePromise","getPromise","extras","undefined","hasUpdates","canSpeak","canDictate","canVoice","canAttach","canFeedback","canDelete","canQueue","unstable_enableMessageQueue","run","generation","_runAppend","messages","at","finally","notifyIdle","subscribe","_notifySubscribers","_loadPromise","__internal_load","promise","load","repo","repository","import","length","ensureInitialized","resume","unstable_resume","startRun","headId","sourceId","append","isTail","willRun","role","steer","adapter","enqueue","unstable_queueClearOnRewind","clear","getQueueItems","items","getSteerQueueItems","steerItems","moveQueueItem","queueItemId","placement","move","removeQueueItem","remove","initPromise","newMessage","reason","addOrUpdateMessage","resetHead","deleteMessage","messageId","getMessages","messageIndex","findIndex","m","resumeRun","stream","startConfig","exportExternalState","importExternalState","runCallback","content","metadata","unstable_state","state","unstable_annotations","unstable_data","steps","custom","createdAt","Date","_runLoop","_notifyEventSubscribers","alreadyPersisted","notifyBusy","abort","performRoundtrip","unstable_humanToolNames","active","queueMicrotask","suggestion","signal","promiseOrGenerator","generate","onUpdate","r","initialContent","initialAnnotations","initialData","initialSteps","initialCustom","updateMessage","Partial","newSteps","newAnnotations","newData","annotations","data","timing","maxSteps","unstable_composerMetadata","_","context","getModelContext","chatModel","abortSignal","threadId","unstable_assistantMessageId","unstable_threadId","unstable_parentId","unstable_getMessage","Symbol","asyncIterator","aborted","e","error","isTerminal","isPausing","cancelRun","unstable_queueClearOnCancel","notifyCancelled","addToolResult","toolCallId","result","isError","artifact","messageData","getMessage","added","found","newContent","map","c","resumeToolCall","respondToToolApproval","approvalId","approved","optionId","findLast","some","approval","target","find","resolution","targetApproval"],"sources":["../../../src/runtimes/local/local-thread-runtime-core.ts"],"sourcesContent":["import { fromThreadMessageLike } from \"../../runtime/utils/thread-message-like\";\nimport { generateId } from \"../../utils/id\";\nimport type {\n ChatModelAdapter,\n ChatModelRunResult,\n} from \"../../runtime/utils/chat-model-adapter\";\nimport { shouldContinue } from \"./should-continue\";\nimport type { LocalRuntimeOptionsBase } from \"./local-runtime-options\";\nimport { consumeSuggestionResult } from \"../../adapters/suggestion\";\nimport type {\n AddToolResultOptions,\n ResumeToolCallOptions,\n RespondToToolApprovalOptions,\n ThreadSuggestion,\n ThreadRuntimeCore,\n StartRunConfig,\n ResumeRunConfig,\n} from \"../../runtime/interfaces/thread-runtime-core\";\nimport { BaseThreadRuntimeCore } from \"../../runtime/base/base-thread-runtime-core\";\nimport type {\n AppendMessage,\n ThreadAssistantMessage,\n} from \"../../types/message\";\nimport type { RunConfig } from \"../../types/message\";\nimport { toAssistantError } from \"../../types/error\";\nimport type { ModelContextProvider } from \"../../model-context/types\";\nimport {\n createMessageQueue,\n type MessageQueueController,\n} from \"../../runtime/queue/message-queue\";\nimport type { QueuePlacement } from \"../../runtime/queue/external-thread-queue-adapter\";\nimport {\n EMPTY_QUEUE_ITEMS,\n type QueueItemState,\n} from \"../../store/scopes/queue-item\";\n\nclass AbortError extends Error {\n override name = \"AbortError\";\n detach: boolean;\n\n constructor(detach: boolean, message?: string) {\n super(message);\n this.detach = detach;\n }\n}\n\nexport class LocalThreadRuntimeCore\n extends BaseThreadRuntimeCore\n implements ThreadRuntimeCore\n{\n public readonly capabilities = {\n switchToBranch: true,\n switchBranchDuringRun: true,\n edit: true,\n delete: false,\n reload: true,\n refetchThread: false,\n cancel: true,\n unstable_copy: true,\n speech: false,\n dictation: false,\n voice: false,\n attachments: false,\n feedback: false,\n queue: false,\n };\n\n private abortController: AbortController | null = null;\n\n private _queue: MessageQueueController | null = null;\n private _queueRunInFlight = false;\n private _activeRun: { cancelled: boolean } | null = null;\n private _runGeneration = 0;\n\n private _historyWrites = new Map<string, Promise<void>>();\n\n // Writes for one message id must land in issue order; an earlier paused\n // snapshot arriving after the terminal write would resurrect the pause.\n private _chainHistoryWrite(\n id: string,\n write: () => Promise<void>,\n ): Promise<void> {\n const next = (this._historyWrites.get(id) ?? Promise.resolve()).then(\n write,\n write,\n );\n const stored = next.then(\n () => {},\n () => {},\n );\n this._historyWrites.set(id, stored);\n void stored.then(() => {\n if (this._historyWrites.get(id) === stored) {\n this._historyWrites.delete(id);\n }\n });\n return next;\n }\n\n // A decision recorded on a still-paused message must reach history before\n // the run resumes, or a refresh would restore the message without it.\n private _persistPausedMessage(\n parentId: string | null,\n message: ThreadAssistantMessage,\n ) {\n if (message.status?.type !== \"requires-action\") return;\n const history = this._options.adapters.history;\n if (!history?.update) return;\n const update = history.update.bind(history);\n const item = { parentId, message, runConfig: this._lastRunConfig };\n this._chainHistoryWrite(message.id, () => update(item)).catch(() => {});\n }\n\n public readonly isDisabled = false;\n public readonly isSendDisabled = false;\n\n private _isLoading = false;\n public get isLoading() {\n return this._isLoading;\n }\n\n private _suggestions: readonly ThreadSuggestion[] = [];\n private _suggestionsController: AbortController | null = null;\n public get suggestions(): readonly ThreadSuggestion[] {\n return this._suggestions;\n }\n\n public get adapters() {\n return this._options.adapters;\n }\n\n constructor(\n contextProvider: ModelContextProvider,\n options: LocalRuntimeOptionsBase,\n ) {\n super(contextProvider);\n this.__internal_setOptions(options);\n }\n\n private _options!: LocalRuntimeOptionsBase;\n\n private _lastRunConfig: RunConfig = {};\n\n private _getThreadId?: () => string | undefined;\n\n public __internal_setGetThreadId(getThreadId: () => string | undefined) {\n this._getThreadId = getThreadId;\n }\n\n private _getInitializePromise?: () => Promise<unknown> | undefined;\n\n public __internal_setGetInitializePromise(\n getPromise: () => Promise<unknown> | undefined,\n ) {\n this._getInitializePromise = getPromise;\n }\n\n public get extras() {\n return undefined;\n }\n\n public __internal_setOptions(options: LocalRuntimeOptionsBase) {\n if (this._options === options) return;\n\n this._options = options;\n\n let hasUpdates = false;\n\n const canSpeak = options.adapters?.speech !== undefined;\n if (this.capabilities.speech !== canSpeak) {\n this.capabilities.speech = canSpeak;\n hasUpdates = true;\n }\n\n const canDictate = options.adapters?.dictation !== undefined;\n if (this.capabilities.dictation !== canDictate) {\n this.capabilities.dictation = canDictate;\n hasUpdates = true;\n }\n\n const canVoice = options.adapters?.voice !== undefined;\n if (this.capabilities.voice !== canVoice) {\n this.capabilities.voice = canVoice;\n hasUpdates = true;\n }\n\n const canAttach = options.adapters?.attachments !== undefined;\n if (this.capabilities.attachments !== canAttach) {\n this.capabilities.attachments = canAttach;\n hasUpdates = true;\n }\n\n const canFeedback = options.adapters?.feedback !== undefined;\n if (this.capabilities.feedback !== canFeedback) {\n this.capabilities.feedback = canFeedback;\n hasUpdates = true;\n }\n\n const canDelete = options.adapters?.history?.delete !== undefined;\n if (this.capabilities.delete !== canDelete) {\n this.capabilities.delete = canDelete;\n hasUpdates = true;\n }\n\n const canQueue = options.unstable_enableMessageQueue === true;\n if (canQueue && !this._queue) {\n this._queue = createMessageQueue({\n run: (message) => {\n // release the queue when the dispatch settles, even if it rejects\n // before reaching startRun's finally, so a failure can't deadlock it\n this._queueRunInFlight = true;\n const generation = this._runGeneration;\n // the tail may have moved since the message was enqueued\n void this._runAppend({\n ...message,\n parentId: this.messages.at(-1)?.id ?? null,\n })\n .finally(() => {\n this._queueRunInFlight = false;\n // a dispatch that failed before starting a run settles here;\n // runs that did start release from _runLoop\n if (this._runGeneration === generation) this._queue?.notifyIdle();\n })\n .catch(() => {});\n },\n });\n this._queue.subscribe(() => this._notifySubscribers());\n } else if (!canQueue && this._queue) {\n this._queue = null;\n }\n if (this.capabilities.queue !== canQueue) {\n this.capabilities.queue = canQueue;\n hasUpdates = true;\n }\n\n if (hasUpdates) this._notifySubscribers();\n }\n\n private _loadPromise: Promise<void> | undefined;\n public __internal_load() {\n if (this._loadPromise) return this._loadPromise;\n\n const promise = this.adapters.history?.load() ?? Promise.resolve(null);\n\n this._isLoading = true;\n this._notifySubscribers();\n\n this._loadPromise = promise\n .then((repo) => {\n if (!repo) return;\n this.repository.import(repo);\n if (repo.messages.length > 0) {\n this.ensureInitialized();\n }\n this._notifySubscribers();\n\n const resume = this.adapters.history?.resume?.bind(\n this.adapters.history,\n );\n if (repo.unstable_resume && resume) {\n this.startRun(\n {\n parentId: this.repository.headId,\n sourceId: this.repository.headId,\n runConfig: this._lastRunConfig,\n },\n resume,\n ).catch(() => {});\n }\n })\n .finally(() => {\n this._isLoading = false;\n this._notifySubscribers();\n });\n\n return this._loadPromise;\n }\n\n public async append(message: AppendMessage): Promise<void> {\n const isTail = message.parentId === (this.messages.at(-1)?.id ?? null);\n const willRun = message.startRun ?? message.role === \"user\";\n if (this._queue && willRun && isTail) {\n if (message.steer ?? this._queueRunInFlight)\n this._queue.adapter.steer(message);\n else this._queue.adapter.enqueue(message);\n return;\n }\n if (\n this._queue &&\n !isTail &&\n (this._options.unstable_queueClearOnRewind ?? true)\n )\n this._queue.clear();\n return this._runAppend(message);\n }\n\n public getQueueItems(): readonly QueueItemState[] {\n // Reads can arrive during base-thread construction, before the queue field\n // is assigned, so guard against the unset field.\n return this._queue?.adapter.items ?? EMPTY_QUEUE_ITEMS;\n }\n\n public getSteerQueueItems(): readonly QueueItemState[] {\n return this._queue?.adapter.steerItems ?? EMPTY_QUEUE_ITEMS;\n }\n\n public moveQueueItem(queueItemId: string, placement: QueuePlacement): void {\n this._queue?.adapter.move(queueItemId, placement);\n }\n\n public removeQueueItem(queueItemId: string): void {\n this._queue?.adapter.remove(queueItemId);\n }\n\n private async _runAppend(message: AppendMessage): Promise<void> {\n this.ensureInitialized();\n\n const initPromise = this._getInitializePromise?.();\n if (initPromise) {\n await initPromise;\n }\n\n const newMessage = fromThreadMessageLike(message, generateId(), {\n type: \"complete\",\n reason: \"unknown\",\n });\n this.repository.addOrUpdateMessage(message.parentId, newMessage);\n this._options.adapters.history?.append({\n parentId: message.parentId,\n message: newMessage,\n ...(message.runConfig !== undefined && { runConfig: message.runConfig }),\n });\n\n const startRun = message.startRun ?? message.role === \"user\";\n if (startRun) {\n await this.startRun({\n parentId: newMessage.id,\n sourceId: message.sourceId,\n runConfig: message.runConfig ?? {},\n });\n } else {\n this.repository.resetHead(newMessage.id);\n this._notifySubscribers();\n }\n }\n\n public async deleteMessage(messageId: string): Promise<void> {\n const adapter = this._options.adapters.history;\n if (!adapter?.delete)\n throw new Error(\"Runtime does not support deleting messages.\");\n\n const messages = this.repository.getMessages();\n const messageIndex = messages.findIndex((m) => m.id === messageId);\n if (messageIndex === -1) throw new Error(\"Message not found.\");\n\n const message = messages[messageIndex]!;\n const parentId = messages[messageIndex - 1]?.id ?? null;\n const items = [{ parentId, message }];\n\n await adapter.delete(items);\n\n this.repository.deleteMessage(messageId);\n this._notifySubscribers();\n }\n\n public resumeRun({ stream, ...startConfig }: ResumeRunConfig): Promise<void> {\n if (!stream)\n throw new Error(\"You must pass a stream parameter to resume runs.\");\n return this.startRun(startConfig, stream);\n }\n\n public exportExternalState(): any {\n throw new Error(\"Runtime does not support exporting external states.\");\n }\n\n public importExternalState(): void {\n throw new Error(\"Runtime does not support importing external states.\");\n }\n\n public async startRun(\n { parentId, runConfig }: StartRunConfig,\n runCallback?: ChatModelAdapter[\"run\"],\n ): Promise<void> {\n this.ensureInitialized();\n\n // add assistant message\n const id = generateId();\n const message: ThreadAssistantMessage = {\n id,\n role: \"assistant\",\n status: { type: \"running\" },\n content: [],\n metadata: {\n unstable_state: this.state,\n unstable_annotations: [],\n unstable_data: [],\n steps: [],\n custom: {},\n },\n createdAt: new Date(),\n };\n\n return this._runLoop(parentId, message, runConfig, runCallback);\n }\n\n private async _runLoop(\n parentId: string | null,\n message: ThreadAssistantMessage,\n runConfig: RunConfig | undefined,\n runCallback?: ChatModelAdapter[\"run\"],\n ): Promise<void> {\n this._notifyEventSubscribers(\"runStart\", {});\n\n // A run entered on a requires-action message resumes a pause an\n // update-capable adapter already holds (written at pause time or loaded).\n const alreadyPersisted =\n message.status?.type === \"requires-action\" &&\n this._options.adapters.history?.update !== undefined;\n\n const run = { cancelled: false };\n this._activeRun = run;\n this._runGeneration++;\n\n try {\n // mark busy for runs not started through the queue (regenerate, resume)\n this._queue?.notifyBusy();\n this._suggestions = [];\n this._suggestionsController?.abort();\n this._suggestionsController = null;\n this._notifySubscribers();\n\n do {\n message = await this.performRoundtrip(\n parentId,\n message,\n runConfig,\n alreadyPersisted,\n runCallback,\n );\n runCallback = undefined;\n } while (shouldContinue(message, this._options.unstable_humanToolNames));\n } finally {\n this._notifyEventSubscribers(\"runEnd\", {});\n // the settle belongs to this run only while it is still the active run\n // or was cancelled (the engine expects a cancelled run's settle); a run\n // superseded by a newer one stays silent\n const active = this._activeRun === run;\n if (active) this._activeRun = null;\n if (active || run.cancelled) {\n queueMicrotask(() => this._queue?.notifyIdle());\n }\n }\n\n if (\n this.adapters.suggestion &&\n message.status?.type !== \"requires-action\"\n ) {\n this._suggestionsController = new AbortController();\n const signal = this._suggestionsController.signal;\n const adapter = this.adapters.suggestion;\n void (async () => {\n try {\n const promiseOrGenerator = adapter.generate({\n messages: this.messages,\n signal,\n });\n await consumeSuggestionResult(promiseOrGenerator, {\n signal,\n onUpdate: (r) => {\n this._suggestions = r;\n this._notifySubscribers();\n },\n });\n } catch {}\n })();\n }\n }\n\n private async performRoundtrip(\n parentId: string | null,\n message: ThreadAssistantMessage,\n runConfig: RunConfig | undefined,\n alreadyPersisted: boolean,\n runCallback?: ChatModelAdapter[\"run\"],\n ) {\n const messages = parentId ? this.repository.getMessages(parentId) : [];\n\n // abort existing run\n this.abortController?.abort();\n const abortController = new AbortController();\n this.abortController = abortController;\n\n const initialContent = message.content;\n const initialAnnotations = message.metadata?.unstable_annotations;\n const initialData = message.metadata?.unstable_data;\n const initialSteps = message.metadata?.steps;\n const initialCustom = message.metadata?.custom;\n const updateMessage = (m: Partial<ChatModelRunResult>) => {\n const newSteps = m.metadata?.steps;\n const steps = newSteps\n ? [...(initialSteps ?? []), ...newSteps]\n : undefined;\n\n const newAnnotations = m.metadata?.unstable_annotations;\n const newData = m.metadata?.unstable_data;\n const annotations = newAnnotations\n ? [...(initialAnnotations ?? []), ...newAnnotations]\n : undefined;\n const data = newData ? [...(initialData ?? []), ...newData] : undefined;\n\n message = {\n ...message,\n ...(m.content\n ? { content: [...initialContent, ...(m.content ?? [])] }\n : undefined),\n status: m.status ?? message.status,\n ...(m.metadata\n ? {\n metadata: {\n ...message.metadata,\n ...(m.metadata.unstable_state !== undefined\n ? { unstable_state: m.metadata.unstable_state }\n : undefined),\n ...(annotations\n ? { unstable_annotations: annotations }\n : undefined),\n ...(data ? { unstable_data: data } : undefined),\n ...(steps ? { steps } : undefined),\n ...(m.metadata?.timing\n ? { timing: m.metadata.timing }\n : undefined),\n ...(m.metadata?.custom\n ? {\n custom: {\n ...(initialCustom ?? {}),\n ...m.metadata.custom,\n },\n }\n : undefined),\n },\n }\n : undefined),\n };\n this.repository.addOrUpdateMessage(parentId, message);\n this._notifySubscribers();\n };\n\n const maxSteps = this._options.maxSteps ?? 2;\n\n try {\n const steps = message.metadata?.steps?.length ?? 0;\n if (steps >= maxSteps) {\n updateMessage({\n status: {\n type: \"incomplete\",\n reason: \"tool-calls\",\n },\n });\n return message;\n }\n\n updateMessage({\n status: {\n type: \"running\",\n },\n });\n\n // Switch to the new message branch right after adding it for the first time\n this.repository.resetHead(message.id);\n this._notifySubscribers();\n\n this._lastRunConfig = runConfig ?? {};\n // unstable_composerMetadata is composer-only (stamped onto the outgoing\n // message); never expose it to the chat-model adapter's run context.\n const { unstable_composerMetadata: _, ...context } =\n this.getModelContext();\n\n runCallback =\n runCallback ??\n this.adapters.chatModel.run.bind(this.adapters.chatModel);\n\n const abortSignal = abortController.signal;\n const threadId = this._getThreadId?.();\n const promiseOrGenerator = runCallback({\n messages,\n runConfig: this._lastRunConfig,\n abortSignal,\n context,\n unstable_assistantMessageId: message.id,\n unstable_threadId: threadId,\n unstable_parentId: parentId,\n unstable_getMessage() {\n return message;\n },\n });\n\n // handle async iterator for streaming results\n if (Symbol.asyncIterator in promiseOrGenerator) {\n for await (const r of promiseOrGenerator) {\n if (abortSignal.aborted) {\n updateMessage({\n status: { type: \"incomplete\", reason: \"cancelled\" },\n });\n break;\n }\n\n updateMessage(r);\n }\n } else {\n updateMessage(await promiseOrGenerator);\n }\n\n if (message.status.type === \"running\") {\n updateMessage({\n status: abortSignal.aborted\n ? { type: \"incomplete\", reason: \"cancelled\" }\n : { type: \"complete\", reason: \"unknown\" },\n });\n }\n } catch (e) {\n if (e instanceof AbortError) {\n updateMessage({\n status: { type: \"incomplete\", reason: \"cancelled\" },\n });\n } else if (e instanceof Error && e.name === \"AbortError\") {\n updateMessage({\n status: { type: \"incomplete\", reason: \"cancelled\" },\n });\n } else {\n updateMessage({\n status: {\n type: \"incomplete\",\n reason: \"error\",\n error: toAssistantError(e),\n },\n });\n\n throw e;\n }\n } finally {\n if (this.abortController === abortController) {\n this.abortController = null;\n }\n\n const history = this._options.adapters.history;\n const item = {\n parentId,\n message,\n runConfig: this._lastRunConfig,\n };\n const isTerminal =\n message.status.type === \"complete\" ||\n message.status.type === \"incomplete\";\n const isPausing =\n message.status.type === \"requires-action\" &&\n !shouldContinue(message, this._options.unstable_humanToolNames);\n\n // Pauses are written only for adapters that can rewrite the entry later;\n // an append-only adapter would strand a half-finished run in history.\n if (isTerminal || (isPausing && history?.update)) {\n const write =\n alreadyPersisted && history?.update\n ? history.update.bind(history)\n : history?.append.bind(history);\n if (write) {\n await this._chainHistoryWrite(message.id, () => write(item));\n }\n }\n }\n return message;\n }\n\n public detach() {\n // drop the queue so pending items cannot dispatch on a detached thread\n this._queue = null;\n const error = new AbortError(true);\n this.abortController?.abort(error);\n this.abortController = null;\n this._suggestionsController?.abort();\n this._suggestionsController = null;\n }\n\n public cancelRun() {\n if (this._queue) {\n if (this._options.unstable_queueClearOnCancel ?? true) {\n this._queue.clear();\n } else {\n this._queue.notifyCancelled();\n if (this._activeRun) this._activeRun.cancelled = true;\n }\n }\n const error = new AbortError(false);\n this.abortController?.abort(error);\n this.abortController = null;\n this._suggestionsController?.abort();\n this._suggestionsController = null;\n }\n\n public addToolResult({\n messageId,\n toolCallId,\n result,\n isError,\n artifact,\n }: AddToolResultOptions) {\n const messageData = this.repository.getMessage(messageId);\n const { parentId } = messageData;\n let { message } = messageData;\n\n if (message.role !== \"assistant\")\n throw new Error(\"Tried to add tool result to non-assistant message\");\n\n let added = false;\n let found = false;\n const newContent = message.content.map((c) => {\n if (c.type !== \"tool-call\") return c;\n if (c.toolCallId !== toolCallId) return c;\n found = true;\n if (c.result === undefined) added = true;\n return {\n ...c,\n result,\n artifact,\n isError,\n };\n });\n\n if (!found)\n throw new Error(\"Tried to add tool result to non-existing tool call\");\n\n message = {\n ...message,\n content: newContent,\n };\n this.repository.addOrUpdateMessage(parentId, message);\n this._notifySubscribers();\n\n // a result may arrive mid-run or on a non-head message; the resume\n // intentionally aborts any in-flight run, unlike respondToToolApproval\n if (\n added &&\n shouldContinue(message, this._options.unstable_humanToolNames)\n ) {\n this._runLoop(parentId, message, this._lastRunConfig).catch(() => {});\n } else if (added) {\n this._persistPausedMessage(parentId, message);\n }\n }\n\n public resumeToolCall(_options: ResumeToolCallOptions) {\n throw new Error(\n \"Local runtime does not support resuming tool calls. For human-in-the-loop tools, list the tool in unstable_humanToolNames and complete the call with addToolResult.\",\n );\n }\n\n public respondToToolApproval({\n approvalId,\n approved,\n optionId,\n reason,\n }: RespondToToolApprovalOptions) {\n let message = this.repository\n .getMessages()\n .findLast(\n (m): m is ThreadAssistantMessage =>\n m.role === \"assistant\" &&\n m.content.some(\n (c) => c.type === \"tool-call\" && c.approval?.id === approvalId,\n ),\n );\n\n if (!message)\n throw new Error(\"Tried to respond to a non-existing tool approval\");\n\n if (this.abortController !== null)\n throw new Error(\n \"Tried to respond to a tool approval while a run is in progress\",\n );\n\n if (message.status?.type !== \"requires-action\")\n throw new Error(\n \"Tried to respond to a tool approval on a message whose status is not requires-action\",\n );\n\n const target = message.content.find(\n (c) => c.type === \"tool-call\" && c.approval?.id === approvalId,\n );\n if (target?.type !== \"tool-call\" || !target.approval)\n throw new Error(\"Tried to respond to a non-existing tool approval\");\n if (target.approval.resolution !== undefined)\n throw new Error(\n \"Tried to respond to a tool approval that was cancelled or expired\",\n );\n if (target.approval.approved !== undefined)\n throw new Error(\"Tried to respond to an already decided tool approval\");\n\n const targetApproval = target.approval;\n const newContent = message.content.map((c) => {\n if (c !== target) return c;\n const approval = {\n ...targetApproval,\n approved,\n ...(optionId != null && { optionId }),\n ...(reason != null && { reason }),\n };\n if (approved) return { ...c, approval };\n return {\n ...c,\n approval,\n result: { error: reason || \"Tool approval denied\" },\n isError: true,\n };\n });\n\n message = { ...message, content: newContent };\n const { parentId } = this.repository.getMessage(message.id);\n this.repository.addOrUpdateMessage(parentId, message);\n this._notifySubscribers();\n\n if (\n this.repository.headId === message.id &&\n shouldContinue(message, this._options.unstable_humanToolNames)\n ) {\n this._runLoop(parentId, message, this._lastRunConfig).catch(() => {});\n } else {\n this._persistPausedMessage(parentId, message);\n }\n }\n}\n"],"mappings":"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"}
@@ -54,7 +54,7 @@ declare class ReadonlyThreadRuntimeCore extends BaseSubscribable implements Thre
54
54
  send(): never;
55
55
  cancel(): void;
56
56
  queue: never[];
57
- steerQueueItem(): void;
57
+ moveQueueItem(): void;
58
58
  removeQueueItem(): void;
59
59
  dictation: undefined;
60
60
  startDictation(): never;
@@ -109,7 +109,7 @@ var ReadonlyThreadRuntimeCore = class extends BaseSubscribable {
109
109
  },
110
110
  cancel() {},
111
111
  queue: [],
112
- steerQueueItem() {},
112
+ moveQueueItem() {},
113
113
  removeQueueItem() {},
114
114
  dictation: void 0,
115
115
  startDictation() {
@@ -1 +1 @@
1
- {"version":3,"file":"ReadonlyThreadRuntimeCore.js","names":["Unsubscribe","ThreadMessage","ThreadRuntimeCore","BaseSubscribable","READONLY_THREAD_ERROR","Error","ReadonlyThreadRuntimeCore","_messages","messages","setMessages","_notifySubscribers","getMessageById","messageId","idx","findIndex","m","id","undefined","parentId","message","index","getBranches","switchToBranch","append","deleteMessage","startRun","resumeRun","cancelRun","addToolResult","resumeToolCall","respondToToolApproval","speak","stopSpeaking","connectVoice","disconnectVoice","getVoiceVolume","subscribeVoiceVolume","muteVoice","unmuteVoice","submitFeedback","getModelContext","exportExternalState","importExternalState","composer","attachments","attachmentAccept","addAttachment","removeAttachment","isEditing","const","canCancel","canSend","isEmpty","text","setText","role","setRole","runConfig","setRunConfig","reset","clearAttachments","send","cancel","queue","steerQueueItem","removeQueueItem","dictation","startDictation","stopDictation","quote","setQuote","subscribe","unstable_on","getEditComposer","beginEdit","speech","voice","capabilities","switchBranchDuringRun","edit","delete","reload","refetchThread","unstable_copy","feedback","isDisabled","isSendDisabled","isLoading","state","suggestions","extras","import","export","map"],"sources":["../../../src/runtimes/readonly/ReadonlyThreadRuntimeCore.ts"],"sourcesContent":["import type { Unsubscribe } from \"../../types/unsubscribe\";\nimport type { ThreadMessage } from \"../../types/message\";\nimport type { ThreadRuntimeCore } from \"../../runtime/interfaces/thread-runtime-core\";\nimport { BaseSubscribable } from \"../../subscribable/subscribable\";\n\nconst READONLY_THREAD_ERROR = new Error(\n \"This is a readonly thread. You cannot perform mutations on readonly threads.\",\n);\n\nexport class ReadonlyThreadRuntimeCore\n extends BaseSubscribable\n implements ThreadRuntimeCore\n{\n private _messages: readonly ThreadMessage[] = [];\n\n get messages() {\n return this._messages;\n }\n\n setMessages(messages: readonly ThreadMessage[]) {\n if (this._messages === messages) return;\n this._messages = messages;\n this._notifySubscribers();\n }\n\n getMessageById(messageId: string) {\n const idx = this._messages.findIndex((m) => m.id === messageId);\n if (idx === -1) return undefined;\n return {\n parentId: this._messages[idx - 1]?.id ?? null,\n message: this._messages[idx]!,\n index: idx,\n };\n }\n\n getBranches(messageId: string) {\n const idx = this._messages.findIndex((m) => m.id === messageId);\n if (idx === -1) return [];\n return [messageId];\n }\n\n switchToBranch(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n append(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n deleteMessage(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n startRun(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n resumeRun(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n cancelRun(): void {}\n\n addToolResult(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n resumeToolCall(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n respondToToolApproval(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n speak(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n stopSpeaking(): void {}\n\n connectVoice(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n disconnectVoice(): void {}\n\n getVoiceVolume = () => 0;\n subscribeVoiceVolume = (): Unsubscribe => () => {};\n\n muteVoice(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n unmuteVoice(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n submitFeedback(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n getModelContext() {\n return {};\n }\n\n exportExternalState() {\n throw READONLY_THREAD_ERROR;\n }\n\n importExternalState(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n composer = {\n attachments: [] as never[],\n attachmentAccept: \"*\",\n\n async addAttachment() {\n throw READONLY_THREAD_ERROR;\n },\n\n async removeAttachment() {\n throw READONLY_THREAD_ERROR;\n },\n\n isEditing: false as const,\n canCancel: false,\n canSend: false,\n isEmpty: true,\n text: \"\",\n\n setText() {\n throw READONLY_THREAD_ERROR;\n },\n\n role: \"user\" as const,\n\n setRole() {\n throw READONLY_THREAD_ERROR;\n },\n\n runConfig: {},\n\n setRunConfig() {\n throw READONLY_THREAD_ERROR;\n },\n\n async reset() {\n // noop\n },\n\n async clearAttachments() {\n // noop\n },\n\n send() {\n throw READONLY_THREAD_ERROR;\n },\n\n cancel() {\n // noop\n },\n\n queue: [] as never[],\n steerQueueItem() {},\n removeQueueItem() {},\n\n dictation: undefined,\n\n startDictation() {\n throw READONLY_THREAD_ERROR;\n },\n\n stopDictation() {\n // noop\n },\n\n quote: undefined,\n\n setQuote() {\n throw READONLY_THREAD_ERROR;\n },\n\n subscribe() {\n return () => {};\n },\n\n unstable_on() {\n return () => {};\n },\n };\n\n getEditComposer() {\n return undefined;\n }\n\n beginEdit(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n speech = undefined;\n voice = undefined;\n\n capabilities = {\n switchToBranch: false,\n switchBranchDuringRun: false,\n edit: false,\n delete: false,\n reload: false,\n refetchThread: false,\n cancel: false,\n unstable_copy: false,\n speech: false,\n dictation: false,\n voice: false,\n attachments: false,\n feedback: false,\n queue: false,\n } as const;\n\n isDisabled = false;\n isSendDisabled = false;\n isLoading = false;\n\n state = null;\n suggestions = [] as never[];\n extras = undefined;\n\n import(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n export() {\n return {\n messages: this._messages.map((message, idx) => ({\n message,\n parentId: this._messages[idx - 1]?.id ?? null,\n })),\n };\n }\n\n reset(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n unstable_on(): Unsubscribe {\n return () => {};\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ReadonlyThreadRuntimeCore.js","names":["Unsubscribe","ThreadMessage","ThreadRuntimeCore","BaseSubscribable","READONLY_THREAD_ERROR","Error","ReadonlyThreadRuntimeCore","_messages","messages","setMessages","_notifySubscribers","getMessageById","messageId","idx","findIndex","m","id","undefined","parentId","message","index","getBranches","switchToBranch","append","deleteMessage","startRun","resumeRun","cancelRun","addToolResult","resumeToolCall","respondToToolApproval","speak","stopSpeaking","connectVoice","disconnectVoice","getVoiceVolume","subscribeVoiceVolume","muteVoice","unmuteVoice","submitFeedback","getModelContext","exportExternalState","importExternalState","composer","attachments","attachmentAccept","addAttachment","removeAttachment","isEditing","const","canCancel","canSend","isEmpty","text","setText","role","setRole","runConfig","setRunConfig","reset","clearAttachments","send","cancel","queue","moveQueueItem","removeQueueItem","dictation","startDictation","stopDictation","quote","setQuote","subscribe","unstable_on","getEditComposer","beginEdit","speech","voice","capabilities","switchBranchDuringRun","edit","delete","reload","refetchThread","unstable_copy","feedback","isDisabled","isSendDisabled","isLoading","state","suggestions","extras","import","export","map"],"sources":["../../../src/runtimes/readonly/ReadonlyThreadRuntimeCore.ts"],"sourcesContent":["import type { Unsubscribe } from \"../../types/unsubscribe\";\nimport type { ThreadMessage } from \"../../types/message\";\nimport type { ThreadRuntimeCore } from \"../../runtime/interfaces/thread-runtime-core\";\nimport { BaseSubscribable } from \"../../subscribable/subscribable\";\n\nconst READONLY_THREAD_ERROR = new Error(\n \"This is a readonly thread. You cannot perform mutations on readonly threads.\",\n);\n\nexport class ReadonlyThreadRuntimeCore\n extends BaseSubscribable\n implements ThreadRuntimeCore\n{\n private _messages: readonly ThreadMessage[] = [];\n\n get messages() {\n return this._messages;\n }\n\n setMessages(messages: readonly ThreadMessage[]) {\n if (this._messages === messages) return;\n this._messages = messages;\n this._notifySubscribers();\n }\n\n getMessageById(messageId: string) {\n const idx = this._messages.findIndex((m) => m.id === messageId);\n if (idx === -1) return undefined;\n return {\n parentId: this._messages[idx - 1]?.id ?? null,\n message: this._messages[idx]!,\n index: idx,\n };\n }\n\n getBranches(messageId: string) {\n const idx = this._messages.findIndex((m) => m.id === messageId);\n if (idx === -1) return [];\n return [messageId];\n }\n\n switchToBranch(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n append(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n deleteMessage(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n startRun(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n resumeRun(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n cancelRun(): void {}\n\n addToolResult(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n resumeToolCall(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n respondToToolApproval(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n speak(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n stopSpeaking(): void {}\n\n connectVoice(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n disconnectVoice(): void {}\n\n getVoiceVolume = () => 0;\n subscribeVoiceVolume = (): Unsubscribe => () => {};\n\n muteVoice(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n unmuteVoice(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n submitFeedback(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n getModelContext() {\n return {};\n }\n\n exportExternalState() {\n throw READONLY_THREAD_ERROR;\n }\n\n importExternalState(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n composer = {\n attachments: [] as never[],\n attachmentAccept: \"*\",\n\n async addAttachment() {\n throw READONLY_THREAD_ERROR;\n },\n\n async removeAttachment() {\n throw READONLY_THREAD_ERROR;\n },\n\n isEditing: false as const,\n canCancel: false,\n canSend: false,\n isEmpty: true,\n text: \"\",\n\n setText() {\n throw READONLY_THREAD_ERROR;\n },\n\n role: \"user\" as const,\n\n setRole() {\n throw READONLY_THREAD_ERROR;\n },\n\n runConfig: {},\n\n setRunConfig() {\n throw READONLY_THREAD_ERROR;\n },\n\n async reset() {\n // noop\n },\n\n async clearAttachments() {\n // noop\n },\n\n send() {\n throw READONLY_THREAD_ERROR;\n },\n\n cancel() {\n // noop\n },\n\n queue: [] as never[],\n moveQueueItem() {},\n removeQueueItem() {},\n\n dictation: undefined,\n\n startDictation() {\n throw READONLY_THREAD_ERROR;\n },\n\n stopDictation() {\n // noop\n },\n\n quote: undefined,\n\n setQuote() {\n throw READONLY_THREAD_ERROR;\n },\n\n subscribe() {\n return () => {};\n },\n\n unstable_on() {\n return () => {};\n },\n };\n\n getEditComposer() {\n return undefined;\n }\n\n beginEdit(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n speech = undefined;\n voice = undefined;\n\n capabilities = {\n switchToBranch: false,\n switchBranchDuringRun: false,\n edit: false,\n delete: false,\n reload: false,\n refetchThread: false,\n cancel: false,\n unstable_copy: false,\n speech: false,\n dictation: false,\n voice: false,\n attachments: false,\n feedback: false,\n queue: false,\n } as const;\n\n isDisabled = false;\n isSendDisabled = false;\n isLoading = false;\n\n state = null;\n suggestions = [] as never[];\n extras = undefined;\n\n import(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n export() {\n return {\n messages: this._messages.map((message, idx) => ({\n message,\n parentId: this._messages[idx - 1]?.id ?? null,\n })),\n };\n }\n\n reset(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n unstable_on(): Unsubscribe {\n return () => {};\n }\n}\n"],"mappings":"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"}
@@ -96,7 +96,7 @@ const EMPTY_THREAD_CORE = {
96
96
  },
97
97
  cancel() {},
98
98
  queue: [],
99
- steerQueueItem() {},
99
+ moveQueueItem() {},
100
100
  removeQueueItem() {},
101
101
  dictation: void 0,
102
102
  startDictation() {
@@ -1 +1 @@
1
- {"version":3,"file":"empty-thread-core.js","names":["ThreadRuntimeCore","EMPTY_THREAD_ERROR","Error","EMPTY_THREAD_CORE","getMessageById","undefined","getBranches","switchToBranch","append","deleteMessage","startRun","resumeRun","cancelRun","addToolResult","resumeToolCall","respondToToolApproval","speak","stopSpeaking","connectVoice","disconnectVoice","getVoiceVolume","subscribeVoiceVolume","muteVoice","unmuteVoice","submitFeedback","getModelContext","exportExternalState","importExternalState","composer","attachments","attachmentAccept","addAttachment","removeAttachment","isEditing","canCancel","canSend","isEmpty","text","setText","role","setRole","runConfig","setRunConfig","reset","clearAttachments","send","cancel","queue","steerQueueItem","removeQueueItem","dictation","startDictation","stopDictation","quote","setQuote","subscribe","unstable_on","getEditComposer","beginEdit","speech","voice","capabilities","switchBranchDuringRun","edit","delete","reload","refetchThread","unstable_copy","feedback","isDisabled","isSendDisabled","isLoading","messages","state","suggestions","extras","import","export"],"sources":["../../../src/runtimes/remote-thread-list/empty-thread-core.ts"],"sourcesContent":["import type { ThreadRuntimeCore } from \"../../runtime/interfaces/thread-runtime-core\";\n\nconst EMPTY_THREAD_ERROR = new Error(\n \"This is the empty thread, a placeholder for the main thread. You cannot perform any actions on this thread instance. This error is probably because you tried to call a thread method in your render function. Call the method inside a `useEffect` hook instead.\",\n);\nexport const EMPTY_THREAD_CORE: ThreadRuntimeCore = {\n getMessageById() {\n return undefined;\n },\n\n getBranches() {\n return [];\n },\n\n switchToBranch() {\n throw EMPTY_THREAD_ERROR;\n },\n\n append() {\n throw EMPTY_THREAD_ERROR;\n },\n\n deleteMessage() {\n throw EMPTY_THREAD_ERROR;\n },\n\n startRun() {\n throw EMPTY_THREAD_ERROR;\n },\n\n resumeRun() {\n throw EMPTY_THREAD_ERROR;\n },\n\n cancelRun() {\n throw EMPTY_THREAD_ERROR;\n },\n\n addToolResult() {\n throw EMPTY_THREAD_ERROR;\n },\n\n resumeToolCall() {\n throw EMPTY_THREAD_ERROR;\n },\n\n respondToToolApproval() {\n throw EMPTY_THREAD_ERROR;\n },\n\n speak() {\n throw EMPTY_THREAD_ERROR;\n },\n\n stopSpeaking() {\n throw EMPTY_THREAD_ERROR;\n },\n\n connectVoice() {\n throw EMPTY_THREAD_ERROR;\n },\n\n disconnectVoice() {\n throw EMPTY_THREAD_ERROR;\n },\n\n getVoiceVolume: () => 0,\n subscribeVoiceVolume: () => () => {},\n\n muteVoice() {\n throw EMPTY_THREAD_ERROR;\n },\n\n unmuteVoice() {\n throw EMPTY_THREAD_ERROR;\n },\n\n submitFeedback() {\n throw EMPTY_THREAD_ERROR;\n },\n\n getModelContext() {\n return {};\n },\n\n exportExternalState() {\n throw EMPTY_THREAD_ERROR;\n },\n\n importExternalState() {\n throw EMPTY_THREAD_ERROR;\n },\n\n composer: {\n attachments: [],\n attachmentAccept: \"*\",\n\n async addAttachment() {\n throw EMPTY_THREAD_ERROR;\n },\n\n async removeAttachment() {\n throw EMPTY_THREAD_ERROR;\n },\n\n isEditing: true,\n\n canCancel: false,\n canSend: false,\n isEmpty: true,\n\n text: \"\",\n\n setText() {\n throw EMPTY_THREAD_ERROR;\n },\n\n role: \"user\",\n\n setRole() {\n throw EMPTY_THREAD_ERROR;\n },\n\n runConfig: {},\n\n setRunConfig() {\n throw EMPTY_THREAD_ERROR;\n },\n\n async reset() {\n // noop\n },\n\n async clearAttachments() {\n // noop\n },\n\n send() {\n throw EMPTY_THREAD_ERROR;\n },\n\n cancel() {\n // noop\n },\n\n queue: [] as never[],\n steerQueueItem() {},\n removeQueueItem() {},\n\n dictation: undefined,\n\n startDictation() {\n throw EMPTY_THREAD_ERROR;\n },\n\n stopDictation() {\n // noop\n },\n\n quote: undefined,\n\n setQuote() {\n throw EMPTY_THREAD_ERROR;\n },\n\n subscribe() {\n return () => {};\n },\n\n unstable_on() {\n return () => {};\n },\n },\n\n getEditComposer() {\n return undefined;\n },\n\n beginEdit() {\n throw EMPTY_THREAD_ERROR;\n },\n\n speech: undefined,\n voice: undefined,\n\n capabilities: {\n switchToBranch: false,\n switchBranchDuringRun: false,\n edit: false,\n delete: false,\n reload: false,\n refetchThread: false,\n cancel: false,\n unstable_copy: false,\n speech: false,\n dictation: false,\n voice: false,\n attachments: false,\n feedback: false,\n queue: false,\n },\n\n isDisabled: false,\n isSendDisabled: false,\n isLoading: true,\n\n messages: [],\n\n state: null,\n\n suggestions: [],\n\n extras: undefined,\n\n subscribe() {\n return () => {};\n },\n\n import() {\n throw EMPTY_THREAD_ERROR;\n },\n\n export() {\n return { messages: [] };\n },\n\n reset() {\n throw EMPTY_THREAD_ERROR;\n },\n\n unstable_on() {\n return () => {};\n },\n};\n"],"mappings":";AAEA,MAAMC,qCAAqB,IAAIC,MAC7B,mQACF;AACA,MAAaC,oBAAuC;CAClDC,iBAAiB,CAEjB;CAEAE,cAAc;EACZ,OAAO,CAAA;CACT;CAEAC,iBAAiB;EACf,MAAMN;CACR;CAEAO,SAAS;EACP,MAAMP;CACR;CAEAQ,gBAAgB;EACd,MAAMR;CACR;CAEAS,WAAW;EACT,MAAMT;CACR;CAEAU,YAAY;EACV,MAAMV;CACR;CAEAW,YAAY;EACV,MAAMX;CACR;CAEAY,gBAAgB;EACd,MAAMZ;CACR;CAEAa,iBAAiB;EACf,MAAMb;CACR;CAEAc,wBAAwB;EACtB,MAAMd;CACR;CAEAe,QAAQ;EACN,MAAMf;CACR;CAEAgB,eAAe;EACb,MAAMhB;CACR;CAEAiB,eAAe;EACb,MAAMjB;CACR;CAEAkB,kBAAkB;EAChB,MAAMlB;CACR;CAEAmB,sBAAsB;CACtBC,kCAAkC,CAAC;CAEnCC,YAAY;EACV,MAAMrB;CACR;CAEAsB,cAAc;EACZ,MAAMtB;CACR;CAEAuB,iBAAiB;EACf,MAAMvB;CACR;CAEAwB,kBAAkB;EAChB,OAAO,CAAC;CACV;CAEAC,sBAAsB;EACpB,MAAMzB;CACR;CAEA0B,sBAAsB;EACpB,MAAM1B;CACR;CAEA2B,UAAU;EACRC,aAAa,CAAA;EACbC,kBAAkB;EAElB,MAAMC,gBAAgB;GACpB,MAAM9B;EACR;EAEA,MAAM+B,mBAAmB;GACvB,MAAM/B;EACR;EAEAgC,WAAW;EAEXC,WAAW;EACXC,SAAS;EACTC,SAAS;EAETC,MAAM;EAENC,UAAU;GACR,MAAMrC;EACR;EAEAsC,MAAM;EAENC,UAAU;GACR,MAAMvC;EACR;EAEAwC,WAAW,CAAC;EAEZC,eAAe;GACb,MAAMzC;EACR;EAEA,MAAM0C,QAAQ,CACZ;EAGF,MAAMC,mBAAmB,CACvB;EAGFC,OAAO;GACL,MAAM5C;EACR;EAEA6C,SAAS,CACP;EAGFC,OAAO,CAAA;EACPC,iBAAiB,CAAC;EAClBC,kBAAkB,CAAC;EAEnBC,WAAW7C,KAAAA;EAEX8C,iBAAiB;GACf,MAAMlD;EACR;EAEAmD,gBAAgB,CACd;EAGFC,OAAOhD,KAAAA;EAEPiD,WAAW;GACT,MAAMrD;EACR;EAEAsD,YAAY;GACV,aAAa,CAAC;EAChB;EAEAC,cAAc;GACZ,aAAa,CAAC;EAChB;CACF;CAEAC,kBAAkB,CAElB;CAEAC,YAAY;EACV,MAAMzD;CACR;CAEA0D,QAAQtD,KAAAA;CACRuD,OAAOvD,KAAAA;CAEPwD,cAAc;EACZtD,gBAAgB;EAChBuD,uBAAuB;EACvBC,MAAM;EACNC,QAAQ;EACRC,QAAQ;EACRC,eAAe;EACfpB,QAAQ;EACRqB,eAAe;EACfR,QAAQ;EACRT,WAAW;EACXU,OAAO;EACP/B,aAAa;EACbuC,UAAU;EACVrB,OAAO;CACT;CAEAsB,YAAY;CACZC,gBAAgB;CAChBC,WAAW;CAEXC,UAAU,CAAA;CAEVC,OAAO;CAEPC,aAAa,CAAA;CAEbC,QAAQtE,KAAAA;CAERkD,YAAY;EACV,aAAa,CAAC;CAChB;CAEAqB,SAAS;EACP,MAAM3E;CACR;CAEA4E,SAAS;EACP,OAAO,EAAEL,UAAU,CAAA,EAAG;CACxB;CAEA7B,QAAQ;EACN,MAAM1C;CACR;CAEAuD,cAAc;EACZ,aAAa,CAAC;CAChB;AACF"}
1
+ {"version":3,"file":"empty-thread-core.js","names":["ThreadRuntimeCore","EMPTY_THREAD_ERROR","Error","EMPTY_THREAD_CORE","getMessageById","undefined","getBranches","switchToBranch","append","deleteMessage","startRun","resumeRun","cancelRun","addToolResult","resumeToolCall","respondToToolApproval","speak","stopSpeaking","connectVoice","disconnectVoice","getVoiceVolume","subscribeVoiceVolume","muteVoice","unmuteVoice","submitFeedback","getModelContext","exportExternalState","importExternalState","composer","attachments","attachmentAccept","addAttachment","removeAttachment","isEditing","canCancel","canSend","isEmpty","text","setText","role","setRole","runConfig","setRunConfig","reset","clearAttachments","send","cancel","queue","moveQueueItem","removeQueueItem","dictation","startDictation","stopDictation","quote","setQuote","subscribe","unstable_on","getEditComposer","beginEdit","speech","voice","capabilities","switchBranchDuringRun","edit","delete","reload","refetchThread","unstable_copy","feedback","isDisabled","isSendDisabled","isLoading","messages","state","suggestions","extras","import","export"],"sources":["../../../src/runtimes/remote-thread-list/empty-thread-core.ts"],"sourcesContent":["import type { ThreadRuntimeCore } from \"../../runtime/interfaces/thread-runtime-core\";\n\nconst EMPTY_THREAD_ERROR = new Error(\n \"This is the empty thread, a placeholder for the main thread. You cannot perform any actions on this thread instance. This error is probably because you tried to call a thread method in your render function. Call the method inside a `useEffect` hook instead.\",\n);\nexport const EMPTY_THREAD_CORE: ThreadRuntimeCore = {\n getMessageById() {\n return undefined;\n },\n\n getBranches() {\n return [];\n },\n\n switchToBranch() {\n throw EMPTY_THREAD_ERROR;\n },\n\n append() {\n throw EMPTY_THREAD_ERROR;\n },\n\n deleteMessage() {\n throw EMPTY_THREAD_ERROR;\n },\n\n startRun() {\n throw EMPTY_THREAD_ERROR;\n },\n\n resumeRun() {\n throw EMPTY_THREAD_ERROR;\n },\n\n cancelRun() {\n throw EMPTY_THREAD_ERROR;\n },\n\n addToolResult() {\n throw EMPTY_THREAD_ERROR;\n },\n\n resumeToolCall() {\n throw EMPTY_THREAD_ERROR;\n },\n\n respondToToolApproval() {\n throw EMPTY_THREAD_ERROR;\n },\n\n speak() {\n throw EMPTY_THREAD_ERROR;\n },\n\n stopSpeaking() {\n throw EMPTY_THREAD_ERROR;\n },\n\n connectVoice() {\n throw EMPTY_THREAD_ERROR;\n },\n\n disconnectVoice() {\n throw EMPTY_THREAD_ERROR;\n },\n\n getVoiceVolume: () => 0,\n subscribeVoiceVolume: () => () => {},\n\n muteVoice() {\n throw EMPTY_THREAD_ERROR;\n },\n\n unmuteVoice() {\n throw EMPTY_THREAD_ERROR;\n },\n\n submitFeedback() {\n throw EMPTY_THREAD_ERROR;\n },\n\n getModelContext() {\n return {};\n },\n\n exportExternalState() {\n throw EMPTY_THREAD_ERROR;\n },\n\n importExternalState() {\n throw EMPTY_THREAD_ERROR;\n },\n\n composer: {\n attachments: [],\n attachmentAccept: \"*\",\n\n async addAttachment() {\n throw EMPTY_THREAD_ERROR;\n },\n\n async removeAttachment() {\n throw EMPTY_THREAD_ERROR;\n },\n\n isEditing: true,\n\n canCancel: false,\n canSend: false,\n isEmpty: true,\n\n text: \"\",\n\n setText() {\n throw EMPTY_THREAD_ERROR;\n },\n\n role: \"user\",\n\n setRole() {\n throw EMPTY_THREAD_ERROR;\n },\n\n runConfig: {},\n\n setRunConfig() {\n throw EMPTY_THREAD_ERROR;\n },\n\n async reset() {\n // noop\n },\n\n async clearAttachments() {\n // noop\n },\n\n send() {\n throw EMPTY_THREAD_ERROR;\n },\n\n cancel() {\n // noop\n },\n\n queue: [] as never[],\n moveQueueItem() {},\n removeQueueItem() {},\n\n dictation: undefined,\n\n startDictation() {\n throw EMPTY_THREAD_ERROR;\n },\n\n stopDictation() {\n // noop\n },\n\n quote: undefined,\n\n setQuote() {\n throw EMPTY_THREAD_ERROR;\n },\n\n subscribe() {\n return () => {};\n },\n\n unstable_on() {\n return () => {};\n },\n },\n\n getEditComposer() {\n return undefined;\n },\n\n beginEdit() {\n throw EMPTY_THREAD_ERROR;\n },\n\n speech: undefined,\n voice: undefined,\n\n capabilities: {\n switchToBranch: false,\n switchBranchDuringRun: false,\n edit: false,\n delete: false,\n reload: false,\n refetchThread: false,\n cancel: false,\n unstable_copy: false,\n speech: false,\n dictation: false,\n voice: false,\n attachments: false,\n feedback: false,\n queue: false,\n },\n\n isDisabled: false,\n isSendDisabled: false,\n isLoading: true,\n\n messages: [],\n\n state: null,\n\n suggestions: [],\n\n extras: undefined,\n\n subscribe() {\n return () => {};\n },\n\n import() {\n throw EMPTY_THREAD_ERROR;\n },\n\n export() {\n return { messages: [] };\n },\n\n reset() {\n throw EMPTY_THREAD_ERROR;\n },\n\n unstable_on() {\n return () => {};\n },\n};\n"],"mappings":";AAEA,MAAMC,qCAAqB,IAAIC,MAC7B,mQACF;AACA,MAAaC,oBAAuC;CAClDC,iBAAiB,CAEjB;CAEAE,cAAc;EACZ,OAAO,CAAA;CACT;CAEAC,iBAAiB;EACf,MAAMN;CACR;CAEAO,SAAS;EACP,MAAMP;CACR;CAEAQ,gBAAgB;EACd,MAAMR;CACR;CAEAS,WAAW;EACT,MAAMT;CACR;CAEAU,YAAY;EACV,MAAMV;CACR;CAEAW,YAAY;EACV,MAAMX;CACR;CAEAY,gBAAgB;EACd,MAAMZ;CACR;CAEAa,iBAAiB;EACf,MAAMb;CACR;CAEAc,wBAAwB;EACtB,MAAMd;CACR;CAEAe,QAAQ;EACN,MAAMf;CACR;CAEAgB,eAAe;EACb,MAAMhB;CACR;CAEAiB,eAAe;EACb,MAAMjB;CACR;CAEAkB,kBAAkB;EAChB,MAAMlB;CACR;CAEAmB,sBAAsB;CACtBC,kCAAkC,CAAC;CAEnCC,YAAY;EACV,MAAMrB;CACR;CAEAsB,cAAc;EACZ,MAAMtB;CACR;CAEAuB,iBAAiB;EACf,MAAMvB;CACR;CAEAwB,kBAAkB;EAChB,OAAO,CAAC;CACV;CAEAC,sBAAsB;EACpB,MAAMzB;CACR;CAEA0B,sBAAsB;EACpB,MAAM1B;CACR;CAEA2B,UAAU;EACRC,aAAa,CAAA;EACbC,kBAAkB;EAElB,MAAMC,gBAAgB;GACpB,MAAM9B;EACR;EAEA,MAAM+B,mBAAmB;GACvB,MAAM/B;EACR;EAEAgC,WAAW;EAEXC,WAAW;EACXC,SAAS;EACTC,SAAS;EAETC,MAAM;EAENC,UAAU;GACR,MAAMrC;EACR;EAEAsC,MAAM;EAENC,UAAU;GACR,MAAMvC;EACR;EAEAwC,WAAW,CAAC;EAEZC,eAAe;GACb,MAAMzC;EACR;EAEA,MAAM0C,QAAQ,CACZ;EAGF,MAAMC,mBAAmB,CACvB;EAGFC,OAAO;GACL,MAAM5C;EACR;EAEA6C,SAAS,CACP;EAGFC,OAAO,CAAA;EACPC,gBAAgB,CAAC;EACjBC,kBAAkB,CAAC;EAEnBC,WAAW7C,KAAAA;EAEX8C,iBAAiB;GACf,MAAMlD;EACR;EAEAmD,gBAAgB,CACd;EAGFC,OAAOhD,KAAAA;EAEPiD,WAAW;GACT,MAAMrD;EACR;EAEAsD,YAAY;GACV,aAAa,CAAC;EAChB;EAEAC,cAAc;GACZ,aAAa,CAAC;EAChB;CACF;CAEAC,kBAAkB,CAElB;CAEAC,YAAY;EACV,MAAMzD;CACR;CAEA0D,QAAQtD,KAAAA;CACRuD,OAAOvD,KAAAA;CAEPwD,cAAc;EACZtD,gBAAgB;EAChBuD,uBAAuB;EACvBC,MAAM;EACNC,QAAQ;EACRC,QAAQ;EACRC,eAAe;EACfpB,QAAQ;EACRqB,eAAe;EACfR,QAAQ;EACRT,WAAW;EACXU,OAAO;EACP/B,aAAa;EACbuC,UAAU;EACVrB,OAAO;CACT;CAEAsB,YAAY;CACZC,gBAAgB;CAChBC,WAAW;CAEXC,UAAU,CAAA;CAEVC,OAAO;CAEPC,aAAa,CAAA;CAEbC,QAAQtE,KAAAA;CAERkD,YAAY;EACV,aAAa,CAAC;CAChB;CAEAqB,SAAS;EACP,MAAM3E;CACR;CAEA4E,SAAS;EACP,OAAO,EAAEL,UAAU,CAAA,EAAG;CACxB;CAEA7B,QAAQ;EACN,MAAM1C;CACR;CAEAuD,cAAc;EACZ,aAAa,CAAC;CAChB;AACF"}
@@ -1,8 +1,11 @@
1
1
  import { ThreadMessage } from "../../types/message.js";
2
2
  import { AssistantRuntime } from "../../runtime/api/assistant-runtime.js";
3
3
  import { AssistantStream } from "assistant-stream";
4
- import { ComponentType, PropsWithChildren } from "react";
5
4
  //#region src/runtimes/remote-thread-list/types.d.ts
5
+ type RemoteThreadListProviderProps = {
6
+ children?: any;
7
+ };
8
+ type RemoteThreadListProviderComponent = ((props: RemoteThreadListProviderProps) => any) | (new (props: RemoteThreadListProviderProps) => any);
6
9
  type RemoteThreadInitializeResponse = {
7
10
  remoteId: string;
8
11
  externalId?: string | undefined;
@@ -42,7 +45,7 @@ type RemoteThreadListAdapter = {
42
45
  * is unsupported and leaves thread context unavailable to downstream
43
46
  * consumers. Load data inside an always-mounted child instead.
44
47
  */
45
- unstable_Provider?: ComponentType<PropsWithChildren> | undefined;
48
+ unstable_Provider?: RemoteThreadListProviderComponent | undefined;
46
49
  };
47
50
  type RemoteThreadListOptions = {
48
51
  runtimeHook: () => AssistantRuntime;
@@ -82,5 +85,5 @@ type RemoteThreadListOptions = {
82
85
  allowNesting?: boolean | undefined;
83
86
  };
84
87
  //#endregion
85
- export { RemoteThreadInitializeResponse, RemoteThreadListAdapter, RemoteThreadListOptions, RemoteThreadListPageOptions, RemoteThreadListResponse, RemoteThreadMetadata };
88
+ export { RemoteThreadInitializeResponse, RemoteThreadListAdapter, RemoteThreadListOptions, RemoteThreadListPageOptions, RemoteThreadListProviderComponent, RemoteThreadListResponse, RemoteThreadMetadata };
86
89
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","names":[],"sources":["../../../src/runtimes/remote-thread-list/types.ts"],"mappings":";;;;;KAKY;EACV;EACA;;KAGU;WACD;WACA;WACA;WACA;WACA,gBAAgB;WAChB,SAAS;;KAGR;EACV,SAAS;EACT;;KAGU;EACV;;KAGU;EACV,KAAK,SAAS,8BAA8B,QAAQ;EAEpD,OAAO,kBAAkB,mBAAmB;EAC5C,cACE,kBACA,QAAQ,sCACP;EACH,QAAQ,mBAAmB;EAC3B,UAAU,mBAAmB;EAC7B,OAAO,mBAAmB;EAC1B,WAAW,mBAAmB,QAAQ;EACtC,cACE,kBACA,4BAA4B,kBAC3B,QAAQ;EACX,MAAM,mBAAmB,QAAQ;;;;;;;;;;;EAYjC,oBAAoB,cAAc;;KAGxB;EACV,mBAAmB;EACnB,SAAS;;;;;;;;EAST;;;;;;EAOA;;;;;;;;;;;;;EAcA,qBAAqB;;;;;;EAOrB"}
1
+ {"version":3,"file":"types.d.ts","names":[],"sources":["../../../src/runtimes/remote-thread-list/types.ts"],"mappings":";;;;KAKK;EAAkC;;KAE3B,sCACN,OAAO,+CACH,OAAO;KAGL;EACV;EACA;;KAGU;WACD;WACA;WACA;WACA;WACA,gBAAgB;WAChB,SAAS;;KAGR;EACV,SAAS;EACT;;KAGU;EACV;;KAGU;EACV,KAAK,SAAS,8BAA8B,QAAQ;EAEpD,OAAO,kBAAkB,mBAAmB;EAC5C,cACE,kBACA,QAAQ,sCACP;EACH,QAAQ,mBAAmB;EAC3B,UAAU,mBAAmB;EAC7B,OAAO,mBAAmB;EAC1B,WAAW,mBAAmB,QAAQ;EACtC,cACE,kBACA,4BAA4B,kBAC3B,QAAQ;EACX,MAAM,mBAAmB,QAAQ;;;;;;;;;;;EAYjC,oBAAoB;;KAGV;EACV,mBAAmB;EACnB,SAAS;;;;;;;;EAST;;;;;;EAOA;;;;;;;;;;;;;EAcA,qBAAqB;;;;;;EAOrB"}
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-adapter.d.ts","names":[],"sources":["../../../src/store/clients/runtime-adapter.ts"],"mappings":";;cAQa,oCACX,QAAQ,cACR,QAAQ"}
1
+ {"version":3,"file":"runtime-adapter.d.ts","names":[],"sources":["../../../src/store/clients/runtime-adapter.ts"],"mappings":";;cAKa,oCACX,QAAQ,cACR,QAAQ"}
@@ -1,6 +1,6 @@
1
1
  import { ModelContext } from "./model-context-client.js";
2
2
  import { Suggestions } from "./suggestions.js";
3
- import { Derived } from "@assistant-ui/store";
3
+ import { Derived } from "@assistant-ui/store/client";
4
4
  //#region src/store/clients/runtime-adapter.ts
5
5
  const baseRuntimeAdapterTransformScopes = (scopes, parent) => {
6
6
  scopes.thread ??= Derived({
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-adapter.js","names":["Derived","ScopesConfig","AssistantClient","ModelContext","Suggestions","baseRuntimeAdapterTransformScopes","scopes","parent","thread","source","query","type","get","aui","threads","threadListItem","item","composer","modelContext","suggestions"],"sources":["../../../src/store/clients/runtime-adapter.ts"],"sourcesContent":["import {\n Derived,\n type ScopesConfig,\n type AssistantClient,\n} from \"@assistant-ui/store\";\nimport { ModelContext } from \"./model-context-client\";\nimport { Suggestions } from \"./suggestions\";\n\nexport const baseRuntimeAdapterTransformScopes = (\n scopes: ScopesConfig,\n parent: AssistantClient,\n): void => {\n scopes.thread ??= Derived({\n source: \"threads\",\n query: { type: \"main\" },\n get: (aui) => aui.threads.thread(\"main\"),\n });\n scopes.threadListItem ??= Derived({\n source: \"threads\",\n query: { type: \"main\" },\n get: (aui) => aui.threads.item(\"main\"),\n });\n scopes.composer ??= Derived({\n source: \"thread\",\n query: {},\n get: (aui) => aui.threads.thread(\"main\").composer(),\n });\n\n if (!scopes.modelContext && parent.modelContext.source === null) {\n scopes.modelContext = ModelContext();\n }\n if (!scopes.suggestions && parent.suggestions.source === null) {\n scopes.suggestions = Suggestions();\n }\n};\n"],"mappings":";;;;AAQA,MAAaK,qCACXC,QACAC,WACS;CACTD,OAAOE,WAAWR,QAAQ;EACxBS,QAAQ;EACRC,OAAO,EAAEC,MAAM,OAAO;EACtBC,MAAMC,QAAQA,IAAIC,QAAQN,OAAO,MAAM;CACzC,CAAC;CACDF,OAAOS,mBAAmBf,QAAQ;EAChCS,QAAQ;EACRC,OAAO,EAAEC,MAAM,OAAO;EACtBC,MAAMC,QAAQA,IAAIC,QAAQE,KAAK,MAAM;CACvC,CAAC;CACDV,OAAOW,aAAajB,QAAQ;EAC1BS,QAAQ;EACRC,OAAO,CAAC;EACRE,MAAMC,QAAQA,IAAIC,QAAQN,OAAO,MAAM,CAAC,CAACS,SAAS;CACpD,CAAC;CAED,IAAI,CAACX,OAAOY,gBAAgBX,OAAOW,aAAaT,WAAW,MACzDH,OAAOY,eAAef,aAAa;CAErC,IAAI,CAACG,OAAOa,eAAeZ,OAAOY,YAAYV,WAAW,MACvDH,OAAOa,cAAcf,YAAY;AAErC"}
1
+ {"version":3,"file":"runtime-adapter.js","names":["AssistantClient","ScopesConfig","Derived","ModelContext","Suggestions","baseRuntimeAdapterTransformScopes","scopes","parent","thread","source","query","type","get","aui","threads","threadListItem","item","composer","modelContext","suggestions"],"sources":["../../../src/store/clients/runtime-adapter.ts"],"sourcesContent":["import type { AssistantClient, ScopesConfig } from \"@assistant-ui/store\";\nimport { Derived } from \"@assistant-ui/store/client\";\nimport { ModelContext } from \"./model-context-client\";\nimport { Suggestions } from \"./suggestions\";\n\nexport const baseRuntimeAdapterTransformScopes = (\n scopes: ScopesConfig,\n parent: AssistantClient,\n): void => {\n scopes.thread ??= Derived({\n source: \"threads\",\n query: { type: \"main\" },\n get: (aui) => aui.threads.thread(\"main\"),\n });\n scopes.threadListItem ??= Derived({\n source: \"threads\",\n query: { type: \"main\" },\n get: (aui) => aui.threads.item(\"main\"),\n });\n scopes.composer ??= Derived({\n source: \"thread\",\n query: {},\n get: (aui) => aui.threads.thread(\"main\").composer(),\n });\n\n if (!scopes.modelContext && parent.modelContext.source === null) {\n scopes.modelContext = ModelContext();\n }\n if (!scopes.suggestions && parent.suggestions.source === null) {\n scopes.suggestions = Suggestions();\n }\n};\n"],"mappings":";;;;AAKA,MAAaK,qCACXC,QACAC,WACS;CACTD,OAAOE,WAAWN,QAAQ;EACxBO,QAAQ;EACRC,OAAO,EAAEC,MAAM,OAAO;EACtBC,MAAMC,QAAQA,IAAIC,QAAQN,OAAO,MAAM;CACzC,CAAC;CACDF,OAAOS,mBAAmBb,QAAQ;EAChCO,QAAQ;EACRC,OAAO,EAAEC,MAAM,OAAO;EACtBC,MAAMC,QAAQA,IAAIC,QAAQE,KAAK,MAAM;CACvC,CAAC;CACDV,OAAOW,aAAaf,QAAQ;EAC1BO,QAAQ;EACRC,OAAO,CAAC;EACRE,MAAMC,QAAQA,IAAIC,QAAQN,OAAO,MAAM,CAAC,CAACS,SAAS;CACpD,CAAC;CAED,IAAI,CAACX,OAAOY,gBAAgBX,OAAOW,aAAaT,WAAW,MACzDH,OAAOY,eAAef,aAAa;CAErC,IAAI,CAACG,OAAOa,eAAeZ,OAAOY,YAAYV,WAAW,MACvDH,OAAOa,cAAcf,YAAY;AAErC"}
@@ -1,7 +1,7 @@
1
1
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
2
2
  import { useState } from "@assistant-ui/tap/react-shim";
3
- import { useClientLookup } from "@assistant-ui/store";
4
3
  import { resource, withKey } from "@assistant-ui/tap";
4
+ import { useClientLookup } from "@assistant-ui/store/client";
5
5
  //#region src/store/clients/suggestions.ts
6
6
  const useSuggestionClient = (state) => {
7
7
  return { getState: () => state };
@@ -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\";\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":["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"}
@@ -3,8 +3,8 @@ import { COMPLETE_STATUS, normalizePartStatus } from "../../utils/normalizePartS
3
3
  import { NoOpComposerClient } from "./no-op-composer-client.js";
4
4
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
5
5
  import { useState } from "@assistant-ui/tap/react-shim";
6
- import { useClientLookup } from "@assistant-ui/store";
7
6
  import { resource, useResource, withKey } from "@assistant-ui/tap";
7
+ import { useClientLookup } from "@assistant-ui/store/client";
8
8
  //#region src/store/clients/thread-message-client.ts
9
9
  const useThreadMessagePartClient = (t0) => {
10
10
  const $ = c(8);
@@ -1 +1 @@
1
- {"version":3,"file":"thread-message-client.js","names":["ThreadAssistantMessagePart","ThreadUserMessagePart","ThreadMessage","Attachment","useMemo","useState","useResource","resource","withKey","ClientOutput","useClientLookup","MessageState","PartState","NoOpComposerClient","COMPLETE_STATUS","normalizePartStatus","getThreadMessageText","useThreadMessagePartClient","t0","$","_c","part","isMessageRunning","t1","t2","status","state","t3","getState","addToolResult","_temp","resumeToolCall","_temp2","respondToToolApproval","_temp3","ThreadMessagePartClient","useThreadMessageAttachmentClient","attachment","remove","Error","ThreadMessageAttachmentClient","ThreadMessageClientProps","message","index","isLast","branchNumber","branchCount","useThreadMessageClient","undefined","isCopiedState","setIsCopied","isHoveringState","setIsHovering","role","type","t4","content","t5","idx","toolCallId","map","parts","attachments","t6","_temp4","t7","Symbol","for","composer","t8","composerState","t9","parentId","speech","isCopied","isHovering","t10","t11","t12","selector","get","key","t13","selector_0","id","t14","t15","delete","_temp5","reload","_temp6","speak","_temp7","stopSpeaking","_temp8","submitFeedback","_temp9","switchToBranch","_temp0","getCopyText","ThreadMessageClient"],"sources":["../../../src/store/clients/thread-message-client.ts"],"sourcesContent":["import type {\n ThreadAssistantMessagePart,\n ThreadUserMessagePart,\n ThreadMessage,\n} from \"../../types/message\";\nimport type { Attachment } from \"../../types/attachment\";\nimport { useMemo, useState } from \"react\";\nimport { useResource, resource, withKey } from \"@assistant-ui/tap\";\nimport type { ClientOutput } from \"@assistant-ui/store\";\nimport { useClientLookup } from \"@assistant-ui/store\";\nimport type { MessageState } from \"../scopes/message\";\nimport type { PartState } from \"../scopes/part\";\nimport { NoOpComposerClient } from \"./no-op-composer-client\";\nimport {\n COMPLETE_STATUS,\n normalizePartStatus,\n} from \"../../utils/normalizePartStatus\";\nimport { getThreadMessageText } from \"../../utils/text\";\n\nconst useThreadMessagePartClient = ({\n part,\n isMessageRunning,\n}: {\n part: ThreadAssistantMessagePart | ThreadUserMessagePart;\n isMessageRunning: boolean;\n}): ClientOutput<\"part\"> => {\n const state = useMemo<PartState>(() => {\n return {\n ...part,\n status: isMessageRunning\n ? (normalizePartStatus(part) ?? COMPLETE_STATUS)\n : COMPLETE_STATUS,\n };\n }, [part, isMessageRunning]);\n\n return {\n getState: () => state,\n addToolResult: () => {\n throw new Error(\"Not supported\");\n },\n resumeToolCall: () => {\n throw new Error(\"Not supported\");\n },\n respondToToolApproval: () => {\n throw new Error(\"Not supported\");\n },\n };\n};\n\nconst ThreadMessagePartClient = resource(useThreadMessagePartClient);\n\nconst useThreadMessageAttachmentClient = ({\n attachment,\n}: {\n attachment: Attachment;\n}): ClientOutput<\"attachment\"> => {\n return {\n getState: () => attachment,\n remove: () => {\n throw new Error(\"Not supported\");\n },\n };\n};\n\nconst ThreadMessageAttachmentClient = resource(\n useThreadMessageAttachmentClient,\n);\nexport type ThreadMessageClientProps = {\n message: ThreadMessage;\n index: number;\n isLast?: boolean;\n branchNumber?: number;\n branchCount?: number;\n};\n\nconst useThreadMessageClient = ({\n message,\n index,\n isLast = true,\n branchNumber = 1,\n branchCount = 1,\n}: ThreadMessageClientProps): ClientOutput<\"message\"> => {\n const [isCopiedState, setIsCopied] = useState(false);\n const [isHoveringState, setIsHovering] = useState(false);\n const isMessageRunning =\n message.role === \"assistant\" && message.status.type === \"running\";\n\n const parts = useClientLookup(\n message.content.map((part, idx) =>\n withKey(\n \"toolCallId\" in part && part.toolCallId != null\n ? `toolCallId-${part.toolCallId}`\n : `index-${idx}`,\n ThreadMessagePartClient({ part, isMessageRunning }),\n [part, isMessageRunning],\n ),\n ),\n );\n\n const attachments = useClientLookup(\n (message.attachments ?? []).map((attachment) =>\n withKey(attachment.id, ThreadMessageAttachmentClient({ attachment }), [\n attachment,\n ]),\n ),\n );\n\n const composer = useResource(NoOpComposerClient({ type: \"edit\" }));\n const composerState = composer.getState();\n\n const state = useMemo<MessageState>(() => {\n return {\n ...message,\n parts: parts.state,\n composer: composerState,\n parentId: null,\n index,\n isLast,\n branchNumber,\n branchCount,\n speech: undefined,\n isCopied: isCopiedState,\n isHovering: isHoveringState,\n };\n }, [\n message,\n index,\n isCopiedState,\n isHoveringState,\n isLast,\n parts.state,\n composerState,\n branchNumber,\n branchCount,\n ]);\n\n return {\n getState: () => state,\n composer: () => composer,\n part: (selector) => {\n if (\"index\" in selector) {\n return parts.get({ index: selector.index });\n } else {\n return parts.get({ key: `toolCallId-${selector.toolCallId}` });\n }\n },\n attachment: (selector) => {\n if (\"id\" in selector) {\n return attachments.get({ key: selector.id });\n } else {\n return attachments.get(selector);\n }\n },\n delete: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n reload: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n speak: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n stopSpeaking: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n submitFeedback: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n switchToBranch: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n getCopyText: () => {\n return getThreadMessageText(message);\n },\n setIsCopied,\n setIsHovering,\n };\n};\n\nexport const ThreadMessageClient = resource(useThreadMessageClient);\n"],"mappings":"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"}
1
+ {"version":3,"file":"thread-message-client.js","names":["ThreadAssistantMessagePart","ThreadUserMessagePart","ThreadMessage","Attachment","useMemo","useState","useResource","resource","withKey","ClientOutput","useClientLookup","MessageState","PartState","NoOpComposerClient","COMPLETE_STATUS","normalizePartStatus","getThreadMessageText","useThreadMessagePartClient","t0","$","_c","part","isMessageRunning","t1","t2","status","state","t3","getState","addToolResult","_temp","resumeToolCall","_temp2","respondToToolApproval","_temp3","ThreadMessagePartClient","useThreadMessageAttachmentClient","attachment","remove","Error","ThreadMessageAttachmentClient","ThreadMessageClientProps","message","index","isLast","branchNumber","branchCount","useThreadMessageClient","undefined","isCopiedState","setIsCopied","isHoveringState","setIsHovering","role","type","t4","content","t5","idx","toolCallId","map","parts","attachments","t6","_temp4","t7","Symbol","for","composer","t8","composerState","t9","parentId","speech","isCopied","isHovering","t10","t11","t12","selector","get","key","t13","selector_0","id","t14","t15","delete","_temp5","reload","_temp6","speak","_temp7","stopSpeaking","_temp8","submitFeedback","_temp9","switchToBranch","_temp0","getCopyText","ThreadMessageClient"],"sources":["../../../src/store/clients/thread-message-client.ts"],"sourcesContent":["import type {\n ThreadAssistantMessagePart,\n ThreadUserMessagePart,\n ThreadMessage,\n} from \"../../types/message\";\nimport type { Attachment } from \"../../types/attachment\";\nimport { useMemo, useState } from \"react\";\nimport { useResource, resource, withKey } from \"@assistant-ui/tap\";\nimport type { ClientOutput } from \"@assistant-ui/store\";\nimport { useClientLookup } from \"@assistant-ui/store/client\";\nimport type { MessageState } from \"../scopes/message\";\nimport type { PartState } from \"../scopes/part\";\nimport { NoOpComposerClient } from \"./no-op-composer-client\";\nimport {\n COMPLETE_STATUS,\n normalizePartStatus,\n} from \"../../utils/normalizePartStatus\";\nimport { getThreadMessageText } from \"../../utils/text\";\n\nconst useThreadMessagePartClient = ({\n part,\n isMessageRunning,\n}: {\n part: ThreadAssistantMessagePart | ThreadUserMessagePart;\n isMessageRunning: boolean;\n}): ClientOutput<\"part\"> => {\n const state = useMemo<PartState>(() => {\n return {\n ...part,\n status: isMessageRunning\n ? (normalizePartStatus(part) ?? COMPLETE_STATUS)\n : COMPLETE_STATUS,\n };\n }, [part, isMessageRunning]);\n\n return {\n getState: () => state,\n addToolResult: () => {\n throw new Error(\"Not supported\");\n },\n resumeToolCall: () => {\n throw new Error(\"Not supported\");\n },\n respondToToolApproval: () => {\n throw new Error(\"Not supported\");\n },\n };\n};\n\nconst ThreadMessagePartClient = resource(useThreadMessagePartClient);\n\nconst useThreadMessageAttachmentClient = ({\n attachment,\n}: {\n attachment: Attachment;\n}): ClientOutput<\"attachment\"> => {\n return {\n getState: () => attachment,\n remove: () => {\n throw new Error(\"Not supported\");\n },\n };\n};\n\nconst ThreadMessageAttachmentClient = resource(\n useThreadMessageAttachmentClient,\n);\nexport type ThreadMessageClientProps = {\n message: ThreadMessage;\n index: number;\n isLast?: boolean;\n branchNumber?: number;\n branchCount?: number;\n};\n\nconst useThreadMessageClient = ({\n message,\n index,\n isLast = true,\n branchNumber = 1,\n branchCount = 1,\n}: ThreadMessageClientProps): ClientOutput<\"message\"> => {\n const [isCopiedState, setIsCopied] = useState(false);\n const [isHoveringState, setIsHovering] = useState(false);\n const isMessageRunning =\n message.role === \"assistant\" && message.status.type === \"running\";\n\n const parts = useClientLookup(\n message.content.map((part, idx) =>\n withKey(\n \"toolCallId\" in part && part.toolCallId != null\n ? `toolCallId-${part.toolCallId}`\n : `index-${idx}`,\n ThreadMessagePartClient({ part, isMessageRunning }),\n [part, isMessageRunning],\n ),\n ),\n );\n\n const attachments = useClientLookup(\n (message.attachments ?? []).map((attachment) =>\n withKey(attachment.id, ThreadMessageAttachmentClient({ attachment }), [\n attachment,\n ]),\n ),\n );\n\n const composer = useResource(NoOpComposerClient({ type: \"edit\" }));\n const composerState = composer.getState();\n\n const state = useMemo<MessageState>(() => {\n return {\n ...message,\n parts: parts.state,\n composer: composerState,\n parentId: null,\n index,\n isLast,\n branchNumber,\n branchCount,\n speech: undefined,\n isCopied: isCopiedState,\n isHovering: isHoveringState,\n };\n }, [\n message,\n index,\n isCopiedState,\n isHoveringState,\n isLast,\n parts.state,\n composerState,\n branchNumber,\n branchCount,\n ]);\n\n return {\n getState: () => state,\n composer: () => composer,\n part: (selector) => {\n if (\"index\" in selector) {\n return parts.get({ index: selector.index });\n } else {\n return parts.get({ key: `toolCallId-${selector.toolCallId}` });\n }\n },\n attachment: (selector) => {\n if (\"id\" in selector) {\n return attachments.get({ key: selector.id });\n } else {\n return attachments.get(selector);\n }\n },\n delete: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n reload: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n speak: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n stopSpeaking: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n submitFeedback: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n switchToBranch: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n getCopyText: () => {\n return getThreadMessageText(message);\n },\n setIsCopied,\n setIsHovering,\n };\n};\n\nexport const ThreadMessageClient = resource(useThreadMessageClient);\n"],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  /// <reference path="./scope-registration.d.ts" />
2
+ /// <reference path="../react/types/store-augmentation.d.ts" />
2
3
  import { QueueItemClientSchema, QueueItemMeta, QueueItemMethods, QueueItemState } from "./scopes/queue-item.js";
3
4
  import { ThreadListItemClientSchema, ThreadListItemEvents, ThreadListItemMeta, ThreadListItemMethods, ThreadListItemState } from "./scopes/thread-list-item.js";
4
5
  import { AttachmentClientSchema, AttachmentMeta, AttachmentMethods, AttachmentState } from "./scopes/attachment.js";
@@ -11,9 +12,17 @@ import { SuggestionClientSchema, SuggestionMeta, SuggestionMethods, SuggestionSt
11
12
  import { Suggestion, SuggestionsClientSchema, SuggestionsMethods, SuggestionsState } from "./scopes/suggestions.js";
12
13
  import { ModelContextClientSchema, ModelContextMethods, ModelContextState } from "./scopes/model-context.js";
13
14
  import { ChainOfThoughtClientSchema, ChainOfThoughtMeta, ChainOfThoughtMethods, ChainOfThoughtPart, ChainOfThoughtState } from "./scopes/chain-of-thought.js";
15
+ import { RuntimeAdapter } from "../react/RuntimeAdapter.js";
16
+ import { JoinStrategy, convertExternalMessages, useExternalMessageConverter } from "../react/runtimes/external-message-converter.js";
17
+ import { StreamingTimingAccessors, StreamingTimingOptions, StreamingTimingState } from "../runtime/utils/streaming-timing.js";
18
+ import { useStreamingTiming } from "../react/runtimes/useStreamingTiming.js";
19
+ import { RuntimeExtrasBrand, createRuntimeExtrasBrand } from "../runtime/utils/runtime-extras-brand.js";
20
+ import { Toolkit, ToolkitDefinition, ToolkitDefinitionEntry } from "../react/model-context/toolbox.js";
21
+ import { defineToolkit } from "../react/model-context/define-toolkit.js";
22
+ import { McpToolkitDefinition, McpToolkitEntry, McpToolkitToolConfig, defineMcpToolkit } from "../react/model-context/define-mcp-toolkit.js";
14
23
  import { NoOpComposerClient } from "./clients/no-op-composer-client.js";
15
24
  import { SuggestionConfig, Suggestions } from "./clients/suggestions.js";
16
25
  import { ChainOfThoughtClient } from "./clients/chain-of-thought-client.js";
17
26
  import { ThreadMessageClient, ThreadMessageClientProps } from "./clients/thread-message-client.js";
18
27
  import { ModelContext } from "./clients/model-context-client.js";
19
- 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 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, 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 };
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 };
@@ -1,6 +1,12 @@
1
1
  import { ModelContext } from "./clients/model-context-client.js";
2
2
  import { Suggestions } from "./clients/suggestions.js";
3
+ import { RuntimeAdapter } from "../react/RuntimeAdapter.js";
4
+ import { defineToolkit } from "../react/model-context/define-toolkit.js";
5
+ import { defineMcpToolkit } from "../react/model-context/define-mcp-toolkit.js";
6
+ import { convertExternalMessages, useExternalMessageConverter } from "../react/runtimes/external-message-converter.js";
7
+ import { useStreamingTiming } from "../react/runtimes/useStreamingTiming.js";
8
+ import { createRuntimeExtrasBrand } from "../runtime/utils/runtime-extras-brand.js";
3
9
  import { NoOpComposerClient } from "./clients/no-op-composer-client.js";
4
10
  import { ChainOfThoughtClient } from "./clients/chain-of-thought-client.js";
5
11
  import { ThreadMessageClient } from "./clients/thread-message-client.js";
6
- export { ChainOfThoughtClient, ModelContext, NoOpComposerClient, Suggestions, ThreadMessageClient };
12
+ export { ChainOfThoughtClient, ModelContext, NoOpComposerClient, RuntimeAdapter, Suggestions, ThreadMessageClient, convertExternalMessages, createRuntimeExtrasBrand, defineMcpToolkit, defineToolkit, useExternalMessageConverter, useStreamingTiming };
@@ -1 +1 @@
1
- {"version":3,"file":"composer-runtime-client.d.ts","names":[],"sources":["../../../src/store/runtime-clients/composer-runtime-client.ts"],"mappings":";;;cAkLa,4CAAc,SAAA;EAnHZ;IAAE;;EACA;IAAE;;EACR,SAAA"}
1
+ {"version":3,"file":"composer-runtime-client.d.ts","names":[],"sources":["../../../src/store/runtime-clients/composer-runtime-client.ts"],"mappings":";;;cAuLa,4CAAc,SAAA;EAzHZ;IAAE;;EACA;IAAE;;EACR,SAAA"}