@assistant-ui/react 0.11.4 → 0.11.5

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 (42) hide show
  1. package/dist/client/AssistantClient.d.ts +2 -2
  2. package/dist/client/AssistantClient.d.ts.map +1 -1
  3. package/dist/client/AssistantClient.js.map +1 -1
  4. package/dist/client/types/ThreadList.d.ts +1 -1
  5. package/dist/client/types/ThreadList.d.ts.map +1 -1
  6. package/dist/context/providers/MessageProvider.d.ts.map +1 -1
  7. package/dist/context/providers/MessageProvider.js.map +1 -1
  8. package/dist/context/providers/ThreadListItemProvider.d.ts.map +1 -1
  9. package/dist/context/providers/ThreadListItemProvider.js +2 -1
  10. package/dist/context/providers/ThreadListItemProvider.js.map +1 -1
  11. package/dist/context/react/AssistantApiContext.d.ts +2 -2
  12. package/dist/context/react/AssistantApiContext.d.ts.map +1 -1
  13. package/dist/context/react/AssistantApiContext.js.map +1 -1
  14. package/dist/context/react/hooks/useAssistantEvent.d.ts +2 -2
  15. package/dist/context/react/hooks/useAssistantEvent.d.ts.map +1 -1
  16. package/dist/context/react/hooks/useAssistantEvent.js.map +1 -1
  17. package/dist/legacy-runtime/client/EventManagerRuntimeClient.d.ts +6 -7
  18. package/dist/legacy-runtime/client/EventManagerRuntimeClient.d.ts.map +1 -1
  19. package/dist/legacy-runtime/client/EventManagerRuntimeClient.js +11 -3
  20. package/dist/legacy-runtime/client/EventManagerRuntimeClient.js.map +1 -1
  21. package/dist/legacy-runtime/client/ThreadListRuntimeClient.js +1 -1
  22. package/dist/legacy-runtime/client/ThreadListRuntimeClient.js.map +1 -1
  23. package/dist/legacy-runtime/runtime-cores/composer/BaseComposerRuntimeCore.d.ts.map +1 -1
  24. package/dist/legacy-runtime/runtime-cores/composer/BaseComposerRuntimeCore.js +0 -1
  25. package/dist/legacy-runtime/runtime-cores/composer/BaseComposerRuntimeCore.js.map +1 -1
  26. package/dist/types/EventTypes.d.ts +15 -7
  27. package/dist/types/EventTypes.d.ts.map +1 -1
  28. package/dist/types/EventTypes.js.map +1 -1
  29. package/dist/types/index.d.ts +1 -1
  30. package/dist/types/index.d.ts.map +1 -1
  31. package/package.json +1 -1
  32. package/src/client/AssistantClient.ts +6 -9
  33. package/src/client/types/ThreadList.ts +1 -1
  34. package/src/context/providers/MessageProvider.tsx +1 -6
  35. package/src/context/providers/ThreadListItemProvider.tsx +6 -13
  36. package/src/context/react/AssistantApiContext.tsx +4 -3
  37. package/src/context/react/hooks/useAssistantEvent.ts +4 -3
  38. package/src/legacy-runtime/client/EventManagerRuntimeClient.ts +41 -18
  39. package/src/legacy-runtime/client/ThreadListRuntimeClient.ts +1 -1
  40. package/src/legacy-runtime/runtime-cores/composer/BaseComposerRuntimeCore.tsx +0 -1
  41. package/src/types/EventTypes.ts +23 -12
  42. package/src/types/index.ts +3 -1
@@ -2,7 +2,7 @@ import { Unsubscribe, ResourceElement } from "@assistant-ui/tap";
2
2
  import { ThreadListClientApi, ThreadListClientState } from "./types/ThreadList";
3
3
  import { AssistantRuntime } from "../legacy-runtime/runtime/AssistantRuntime";
4
4
  import { ModelContextProvider } from "../model-context";
5
- import { AssistantEventSelector, AssistantEvents } from "../types/EventTypes";
5
+ import { AssistantEvent, AssistantEventCallback } from "../types/EventTypes";
6
6
  import { ToolUIApi } from "./types/ToolUI";
7
7
  type AssistantClientProps = {
8
8
  threads: ResourceElement<{
@@ -58,7 +58,7 @@ export declare const useAssistantClient: (props: AssistantClientProps) => {
58
58
  });
59
59
  registerModelContextProvider(provider: ModelContextProvider): Unsubscribe;
60
60
  __internal_getRuntime(): AssistantRuntime | null;
61
- on<TEvent extends keyof AssistantEvents>(selector: AssistantEventSelector<TEvent>, callback: (e: AssistantEvents[TEvent]) => void): Unsubscribe;
61
+ on<TEvent extends AssistantEvent>(selector: import("..").AssistantEventSelector<TEvent>, callback: AssistantEventCallback<TEvent>): Unsubscribe;
62
62
  subscribe: (listener: () => void) => Unsubscribe;
63
63
  flushSync: () => void;
64
64
  };
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantClient.d.ts","sourceRoot":"","sources":["../../src/client/AssistantClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,WAAW,EAEX,eAAe,EAEhB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAIxD,OAAO,EACL,sBAAsB,EACtB,eAAe,EAGhB,MAAM,qBAAqB,CAAC;AAQ7B,OAAO,EAAE,SAAS,EAAe,MAAM,gBAAgB,CAAC;AA8HxD,KAAK,oBAAoB,GAAG;IAC1B,OAAO,EAAE,eAAe,CAAC;QACvB,KAAK,EAAE,qBAAqB,CAAC;QAC7B,GAAG,EAAE,mBAAmB,CAAC;KAC1B,CAAC,CAAC;IACH,4BAA4B,EAAE,CAAC,QAAQ,EAAE,oBAAoB,KAAK,WAAW,CAAC;CAI/E,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,OAAO,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2CA5CnB,oBAAoB;;OAMxD,MAAM,SAAS,MAAM,eAAe,YAC3B,sBAAsB,CAAC,MAAM,CAAC,YAC9B,CAAC,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,KAAK,IAAI,GAC7C,WAAW;;;CAsCjB,CAAC"}
1
+ {"version":3,"file":"AssistantClient.d.ts","sourceRoot":"","sources":["../../src/client/AssistantClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,WAAW,EAEX,eAAe,EAEhB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAIxD,OAAO,EACL,cAAc,EACd,sBAAsB,EAGvB,MAAM,qBAAqB,CAAC;AAQ7B,OAAO,EAAE,SAAS,EAAe,MAAM,gBAAgB,CAAC;AA2HxD,KAAK,oBAAoB,GAAG;IAC1B,OAAO,EAAE,eAAe,CAAC;QACvB,KAAK,EAAE,qBAAqB,CAAC;QAC7B,GAAG,EAAE,mBAAmB,CAAC;KAC1B,CAAC,CAAC;IACH,4BAA4B,EAAE,CAAC,QAAQ,EAAE,oBAAoB,KAAK,WAAW,CAAC;CAI/E,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,OAAO,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2CAzCnB,oBAAoB;;;;;CA4C9D,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/client/AssistantClient.ts"],"sourcesContent":["import {\n tapMemo,\n resource,\n Unsubscribe,\n tapInlineResource,\n ResourceElement,\n tapResource,\n} from \"@assistant-ui/tap\";\nimport { ThreadListClientApi, ThreadListClientState } from \"./types/ThreadList\";\nimport { AssistantRuntime } from \"../legacy-runtime/runtime/AssistantRuntime\";\nimport { ModelContextProvider } from \"../model-context\";\nimport { asStore, Store, tapApi } from \"../utils/tap-store\";\nimport { useResource } from \"@assistant-ui/tap/react\";\nimport { useMemo } from \"react\";\nimport {\n AssistantEventSelector,\n AssistantEvents,\n checkEventScope,\n normalizeEventSelector,\n} from \"../types/EventTypes\";\nimport { EventManager } from \"../legacy-runtime/client/EventManagerRuntimeClient\";\nimport {\n AssistantApi,\n createAssistantApiField,\n} from \"../context/react/AssistantApiContext\";\nimport { ToolUIClient } from \"./ToolUIClient\";\nimport { withEventsProvider } from \"./EventContext\";\nimport { ToolUIApi, ToolUIState } from \"./types/ToolUI\";\n\ntype AssistantClientState = {\n readonly threads: ThreadListClientState;\n readonly toolUIs: ToolUIState;\n};\n\ntype AssistantClientApi = {\n getState(): AssistantClientState;\n\n readonly threads: ThreadListClientApi;\n readonly toolUIs: ToolUIApi;\n\n on<TEvent extends keyof AssistantEvents>(\n event: keyof AssistantEvents,\n callback: (e: AssistantEvents[TEvent]) => void,\n ): Unsubscribe;\n\n registerModelContextProvider(provider: ModelContextProvider): Unsubscribe;\n\n /** @internal */\n __internal_getRuntime(): AssistantRuntime | null;\n};\n\nconst AssistantStore = resource(\n ({\n threads: threadsEl,\n registerModelContextProvider,\n __internal_runtime,\n }: AssistantClientProps) => {\n const events = tapInlineResource(EventManager());\n\n const { threads, toolUIs } = withEventsProvider(events, () => {\n return {\n toolUIs: tapInlineResource(ToolUIClient()),\n threads: tapResource(threadsEl, [threadsEl]),\n };\n });\n\n const state = tapMemo<AssistantClientState>(\n () => ({\n threads: threads.state,\n toolUIs: toolUIs.state,\n }),\n [threads.state, toolUIs.state],\n );\n\n const api = tapApi<AssistantClientApi>({\n getState: () => state,\n\n threads: threads.api,\n toolUIs: toolUIs.api,\n on: events.on,\n\n registerModelContextProvider: registerModelContextProvider,\n __internal_getRuntime: () => __internal_runtime ?? null,\n });\n\n // notify the store of state changes\n return tapMemo(() => ({ api }), [state]);\n },\n);\n\nconst getClientFromStore = (client: Store<{ api: AssistantClientApi }>) => {\n const getItem = () => {\n return client.getState().api.threads.item(\"main\");\n };\n return {\n threads: createAssistantApiField({\n source: \"root\",\n query: {},\n get: () => client.getState().api.threads,\n }),\n toolUIs: createAssistantApiField({\n source: \"root\",\n query: {},\n get: () => client.getState().api.toolUIs,\n }),\n thread: createAssistantApiField({\n source: \"threads\",\n query: { type: \"main\" },\n get: () => client.getState().api.threads.thread(\"main\"),\n }),\n threadListItem: createAssistantApiField({\n source: \"threads\",\n query: { type: \"main\" },\n get: () => getItem(),\n }),\n composer: createAssistantApiField({\n source: \"thread\",\n query: {},\n get: () => client.getState().api.threads.thread(\"main\").composer,\n }),\n registerModelContextProvider(provider: ModelContextProvider) {\n return client.getState().api.registerModelContextProvider(provider);\n },\n __internal_getRuntime() {\n return client.getState().api.__internal_getRuntime();\n },\n on<TEvent extends keyof AssistantEvents>(\n selector: AssistantEventSelector<TEvent>,\n callback: (e: AssistantEvents[TEvent]) => void,\n ): Unsubscribe {\n const { event, scope } = normalizeEventSelector(selector);\n if (scope === \"*\") return client.getState().api.on(event, callback);\n\n if (\n checkEventScope(\"thread\", scope, event) ||\n checkEventScope(\"thread-list-item\", scope, event) ||\n checkEventScope(\"composer\", scope, event)\n ) {\n return client.getState().api.on(event, (e) => {\n if (e.threadId !== getItem().getState().id) return;\n callback(e);\n });\n }\n\n throw new Error(\n `Event scope is not available in this component: ${scope}`,\n );\n },\n subscribe: client.subscribe,\n flushSync: client.flushSync,\n } satisfies Partial<AssistantApi>;\n};\n\ntype AssistantClientProps = {\n threads: ResourceElement<{\n state: ThreadListClientState;\n api: ThreadListClientApi;\n }>;\n registerModelContextProvider: (provider: ModelContextProvider) => Unsubscribe;\n\n /** @internal */\n __internal_runtime?: AssistantRuntime;\n};\n\nexport const useAssistantClient = (props: AssistantClientProps) => {\n const client = useResource(asStore(AssistantStore(props)));\n return useMemo(() => getClientFromStore(client), [client]);\n};\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/client/AssistantClient.ts"],"sourcesContent":["import {\n tapMemo,\n resource,\n Unsubscribe,\n tapInlineResource,\n ResourceElement,\n tapResource,\n} from \"@assistant-ui/tap\";\nimport { ThreadListClientApi, ThreadListClientState } from \"./types/ThreadList\";\nimport { AssistantRuntime } from \"../legacy-runtime/runtime/AssistantRuntime\";\nimport { ModelContextProvider } from \"../model-context\";\nimport { asStore, Store, tapApi } from \"../utils/tap-store\";\nimport { useResource } from \"@assistant-ui/tap/react\";\nimport { useMemo } from \"react\";\nimport {\n AssistantEvent,\n AssistantEventCallback,\n checkEventScope,\n normalizeEventSelector,\n} from \"../types/EventTypes\";\nimport { EventManager } from \"../legacy-runtime/client/EventManagerRuntimeClient\";\nimport {\n AssistantApi,\n createAssistantApiField,\n} from \"../context/react/AssistantApiContext\";\nimport { ToolUIClient } from \"./ToolUIClient\";\nimport { withEventsProvider } from \"./EventContext\";\nimport { ToolUIApi, ToolUIState } from \"./types/ToolUI\";\n\ntype AssistantClientState = {\n readonly threads: ThreadListClientState;\n readonly toolUIs: ToolUIState;\n};\n\ntype AssistantClientApi = {\n getState(): AssistantClientState;\n\n readonly threads: ThreadListClientApi;\n readonly toolUIs: ToolUIApi;\n\n on<TEvent extends AssistantEvent>(\n event: TEvent,\n callback: AssistantEventCallback<TEvent>,\n ): Unsubscribe;\n\n registerModelContextProvider(provider: ModelContextProvider): Unsubscribe;\n\n /** @internal */\n __internal_getRuntime(): AssistantRuntime | null;\n};\n\nconst AssistantStore = resource(\n ({\n threads: threadsEl,\n registerModelContextProvider,\n __internal_runtime,\n }: AssistantClientProps) => {\n const events = tapInlineResource(EventManager());\n\n const { threads, toolUIs } = withEventsProvider(events, () => {\n return {\n toolUIs: tapInlineResource(ToolUIClient()),\n threads: tapResource(threadsEl, [threadsEl]),\n };\n });\n\n const state = tapMemo<AssistantClientState>(\n () => ({\n threads: threads.state,\n toolUIs: toolUIs.state,\n }),\n [threads.state, toolUIs.state],\n );\n\n const api = tapApi<AssistantClientApi>({\n getState: () => state,\n\n threads: threads.api,\n toolUIs: toolUIs.api,\n on: events.on,\n\n registerModelContextProvider: registerModelContextProvider,\n __internal_getRuntime: () => __internal_runtime ?? null,\n });\n\n // notify the store of state changes\n return tapMemo(() => ({ api }), [state]);\n },\n);\n\nconst getClientFromStore = (client: Store<{ api: AssistantClientApi }>) => {\n const getItem = () => {\n return client.getState().api.threads.item(\"main\");\n };\n return {\n threads: createAssistantApiField({\n source: \"root\",\n query: {},\n get: () => client.getState().api.threads,\n }),\n toolUIs: createAssistantApiField({\n source: \"root\",\n query: {},\n get: () => client.getState().api.toolUIs,\n }),\n thread: createAssistantApiField({\n source: \"threads\",\n query: { type: \"main\" },\n get: () => client.getState().api.threads.thread(\"main\"),\n }),\n threadListItem: createAssistantApiField({\n source: \"threads\",\n query: { type: \"main\" },\n get: () => getItem(),\n }),\n composer: createAssistantApiField({\n source: \"thread\",\n query: {},\n get: () => client.getState().api.threads.thread(\"main\").composer,\n }),\n registerModelContextProvider(provider: ModelContextProvider) {\n return client.getState().api.registerModelContextProvider(provider);\n },\n __internal_getRuntime() {\n return client.getState().api.__internal_getRuntime();\n },\n on(selector, callback) {\n const { event, scope } = normalizeEventSelector(selector);\n if (scope === \"*\") return client.getState().api.on(event, callback);\n\n if (\n checkEventScope(\"thread\", scope, event) ||\n checkEventScope(\"thread-list-item\", scope, event) ||\n checkEventScope(\"composer\", scope, event)\n ) {\n return client.getState().api.on(event, (e) => {\n if (e.threadId !== getItem().getState().id) return;\n callback(e);\n });\n }\n\n throw new Error(\n `Event scope is not available in this component: ${scope}`,\n );\n },\n subscribe: client.subscribe,\n flushSync: client.flushSync,\n } satisfies Partial<AssistantApi>;\n};\n\ntype AssistantClientProps = {\n threads: ResourceElement<{\n state: ThreadListClientState;\n api: ThreadListClientApi;\n }>;\n registerModelContextProvider: (provider: ModelContextProvider) => Unsubscribe;\n\n /** @internal */\n __internal_runtime?: AssistantRuntime;\n};\n\nexport const useAssistantClient = (props: AssistantClientProps) => {\n const client = useResource(asStore(AssistantStore(props)));\n return useMemo(() => getClientFromStore(client), [client]);\n};\n"],"mappings":"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","names":[]}
@@ -2,7 +2,7 @@ import { ThreadListItemClientState, ThreadListItemClientApi } from "./ThreadList
2
2
  import { ThreadClientApi, ThreadClientState } from "./Thread";
3
3
  export type ThreadListClientState = {
4
4
  readonly mainThreadId: string;
5
- readonly newThreadId: string | undefined;
5
+ readonly newThreadId: string | null;
6
6
  readonly isLoading: boolean;
7
7
  readonly threadIds: readonly string[];
8
8
  readonly archivedThreadIds: readonly string[];
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadList.d.ts","sourceRoot":"","sources":["../../../src/client/types/ThreadList.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE9D,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IAE9C,QAAQ,CAAC,WAAW,EAAE,SAAS,yBAAyB,EAAE,CAAC;IAE3D,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,IAAI,qBAAqB,CAAC;IAElC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,iBAAiB,IAAI,IAAI,CAAC;IAC1B,IAAI,CACF,iBAAiB,EACb,MAAM,GACN;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GACd;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GACxC,uBAAuB,CAAC;IAE3B,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,CAAC;CAC3C,CAAC"}
1
+ {"version":3,"file":"ThreadList.d.ts","sourceRoot":"","sources":["../../../src/client/types/ThreadList.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE9D,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IAE9C,QAAQ,CAAC,WAAW,EAAE,SAAS,yBAAyB,EAAE,CAAC;IAE3D,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,IAAI,qBAAqB,CAAC;IAElC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,iBAAiB,IAAI,IAAI,CAAC;IAC1B,IAAI,CACF,iBAAiB,EACb,MAAM,GACN;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GACd;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GACxC,uBAAuB,CAAC;IAE3B,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,CAAC;CAC3C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"MessageProvider.d.ts","sourceRoot":"","sources":["../../../src/context/providers/MessageProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAW,KAAK,EAAE,EAAE,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAcjE,eAAO,MAAM,sBAAsB,EAAE,EAAE,CACrC,iBAAiB,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC,CAqCH,CAAC"}
1
+ {"version":3,"file":"MessageProvider.d.ts","sourceRoot":"","sources":["../../../src/context/providers/MessageProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAW,KAAK,EAAE,EAAE,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAYjE,eAAO,MAAM,sBAAsB,EAAE,EAAE,CACrC,iBAAiB,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC,CAkCH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/context/providers/MessageProvider.tsx"],"sourcesContent":["\"use client\";\n\nimport { useMemo, type FC, type PropsWithChildren } from \"react\";\nimport {\n AssistantApi,\n AssistantApiProvider,\n useAssistantApi,\n createAssistantApiField,\n} from \"../react/AssistantApiContext\";\nimport { AssistantEvents, AssistantEventSelector } from \"../../types\";\nimport { Unsubscribe } from \"@assistant-ui/tap\";\nimport {\n checkEventScope,\n normalizeEventSelector,\n} from \"../../types/EventTypes\";\n\nexport const MessageByIndexProvider: FC<\n PropsWithChildren<{\n index: number;\n }>\n> = ({ index, children }) => {\n const api = useAssistantApi();\n const api2 = useMemo(() => {\n const getMessage = () => api.thread().message({ index });\n return {\n message: createAssistantApiField({\n source: \"thread\",\n query: { type: \"index\", index },\n get: () => getMessage(),\n }),\n composer: createAssistantApiField({\n source: \"message\",\n query: {},\n get: () => getMessage().composer,\n }),\n on<TEvent extends keyof AssistantEvents>(\n selector: AssistantEventSelector<TEvent>,\n callback: (e: AssistantEvents[TEvent]) => void,\n ): Unsubscribe {\n const { event, scope } = normalizeEventSelector(selector);\n if (\n !checkEventScope(\"composer\", scope, event) &&\n !checkEventScope(\"message\", scope, event)\n )\n return api.on(selector, callback);\n\n return api.on({ scope: \"thread\", event }, (e) => {\n if (e.messageId === getMessage().getState().id) {\n callback(e);\n }\n });\n },\n } satisfies Partial<AssistantApi>;\n }, [api, index]);\n\n return <AssistantApiProvider api={api2}>{children}</AssistantApiProvider>;\n};\n"],"mappings":";;;AAEA,SAAS,eAAgD;AACzD;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAGP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAyCE;AAvCF,IAAM,yBAIT,CAAC,EAAE,OAAO,SAAS,MAAM;AAC3B,QAAM,MAAM,gBAAgB;AAC5B,QAAM,OAAO,QAAQ,MAAM;AACzB,UAAM,aAAa,MAAM,IAAI,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC;AACvD,WAAO;AAAA,MACL,SAAS,wBAAwB;AAAA,QAC/B,QAAQ;AAAA,QACR,OAAO,EAAE,MAAM,SAAS,MAAM;AAAA,QAC9B,KAAK,MAAM,WAAW;AAAA,MACxB,CAAC;AAAA,MACD,UAAU,wBAAwB;AAAA,QAChC,QAAQ;AAAA,QACR,OAAO,CAAC;AAAA,QACR,KAAK,MAAM,WAAW,EAAE;AAAA,MAC1B,CAAC;AAAA,MACD,GACE,UACA,UACa;AACb,cAAM,EAAE,OAAO,MAAM,IAAI,uBAAuB,QAAQ;AACxD,YACE,CAAC,gBAAgB,YAAY,OAAO,KAAK,KACzC,CAAC,gBAAgB,WAAW,OAAO,KAAK;AAExC,iBAAO,IAAI,GAAG,UAAU,QAAQ;AAElC,eAAO,IAAI,GAAG,EAAE,OAAO,UAAU,MAAM,GAAG,CAAC,MAAM;AAC/C,cAAI,EAAE,cAAc,WAAW,EAAE,SAAS,EAAE,IAAI;AAC9C,qBAAS,CAAC;AAAA,UACZ;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,GAAG,CAAC,KAAK,KAAK,CAAC;AAEf,SAAO,oBAAC,wBAAqB,KAAK,MAAO,UAAS;AACpD;","names":[]}
1
+ {"version":3,"sources":["../../../src/context/providers/MessageProvider.tsx"],"sourcesContent":["\"use client\";\n\nimport { useMemo, type FC, type PropsWithChildren } from \"react\";\nimport {\n AssistantApi,\n AssistantApiProvider,\n useAssistantApi,\n createAssistantApiField,\n} from \"../react/AssistantApiContext\";\nimport {\n checkEventScope,\n normalizeEventSelector,\n} from \"../../types/EventTypes\";\n\nexport const MessageByIndexProvider: FC<\n PropsWithChildren<{\n index: number;\n }>\n> = ({ index, children }) => {\n const api = useAssistantApi();\n const api2 = useMemo(() => {\n const getMessage = () => api.thread().message({ index });\n return {\n message: createAssistantApiField({\n source: \"thread\",\n query: { type: \"index\", index },\n get: () => getMessage(),\n }),\n composer: createAssistantApiField({\n source: \"message\",\n query: {},\n get: () => getMessage().composer,\n }),\n on(selector, callback) {\n const { event, scope } = normalizeEventSelector(selector);\n if (\n !checkEventScope(\"composer\", scope, event) &&\n !checkEventScope(\"message\", scope, event)\n )\n return api.on(selector, callback);\n\n return api.on({ scope: \"thread\", event }, (e) => {\n if (e.messageId === getMessage().getState().id) {\n callback(e);\n }\n });\n },\n } satisfies Partial<AssistantApi>;\n }, [api, index]);\n\n return <AssistantApiProvider api={api2}>{children}</AssistantApiProvider>;\n};\n"],"mappings":";;;AAEA,SAAS,eAAgD;AACzD;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAsCE;AApCF,IAAM,yBAIT,CAAC,EAAE,OAAO,SAAS,MAAM;AAC3B,QAAM,MAAM,gBAAgB;AAC5B,QAAM,OAAO,QAAQ,MAAM;AACzB,UAAM,aAAa,MAAM,IAAI,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC;AACvD,WAAO;AAAA,MACL,SAAS,wBAAwB;AAAA,QAC/B,QAAQ;AAAA,QACR,OAAO,EAAE,MAAM,SAAS,MAAM;AAAA,QAC9B,KAAK,MAAM,WAAW;AAAA,MACxB,CAAC;AAAA,MACD,UAAU,wBAAwB;AAAA,QAChC,QAAQ;AAAA,QACR,OAAO,CAAC;AAAA,QACR,KAAK,MAAM,WAAW,EAAE;AAAA,MAC1B,CAAC;AAAA,MACD,GAAG,UAAU,UAAU;AACrB,cAAM,EAAE,OAAO,MAAM,IAAI,uBAAuB,QAAQ;AACxD,YACE,CAAC,gBAAgB,YAAY,OAAO,KAAK,KACzC,CAAC,gBAAgB,WAAW,OAAO,KAAK;AAExC,iBAAO,IAAI,GAAG,UAAU,QAAQ;AAElC,eAAO,IAAI,GAAG,EAAE,OAAO,UAAU,MAAM,GAAG,CAAC,MAAM;AAC/C,cAAI,EAAE,cAAc,WAAW,EAAE,SAAS,EAAE,IAAI;AAC9C,qBAAS,CAAC;AAAA,UACZ;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,GAAG,CAAC,KAAK,KAAK,CAAC;AAEf,SAAO,oBAAC,wBAAqB,KAAK,MAAO,UAAS;AACpD;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadListItemProvider.d.ts","sourceRoot":"","sources":["../../../src/context/providers/ThreadListItemProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAW,KAAK,EAAE,EAAE,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAcjE,eAAO,MAAM,6BAA6B,EAAE,EAAE,CAC5C,iBAAiB,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC,CA6BH,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,EAAE,CACzC,iBAAiB,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC,CA6BH,CAAC"}
1
+ {"version":3,"file":"ThreadListItemProvider.d.ts","sourceRoot":"","sources":["../../../src/context/providers/ThreadListItemProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAW,KAAK,EAAE,EAAE,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAYjE,eAAO,MAAM,6BAA6B,EAAE,EAAE,CAC5C,iBAAiB,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC,CA2BH,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,EAAE,CACzC,iBAAiB,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC,CA0BH,CAAC"}
@@ -24,7 +24,8 @@ var ThreadListItemByIndexProvider = ({ index, archived, children }) => {
24
24
  }),
25
25
  on(selector, callback) {
26
26
  const { event, scope } = normalizeEventSelector(selector);
27
- if (scope !== "thread-list-item") return api.on(selector, callback);
27
+ if (!checkEventScope("thread-list-item", scope, event))
28
+ return api.on(selector, callback);
28
29
  return api.on({ scope: "*", event }, (e) => {
29
30
  if (e.threadId === getItem().getState().id) {
30
31
  callback(e);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/context/providers/ThreadListItemProvider.tsx"],"sourcesContent":["\"use client\";\n\nimport { useMemo, type FC, type PropsWithChildren } from \"react\";\nimport {\n AssistantApi,\n AssistantApiProvider,\n useAssistantApi,\n createAssistantApiField,\n} from \"../react/AssistantApiContext\";\nimport { AssistantEventSelector, AssistantEvents } from \"../../types\";\nimport { Unsubscribe } from \"@assistant-ui/tap\";\nimport {\n checkEventScope,\n normalizeEventSelector,\n} from \"../../types/EventTypes\";\n\nexport const ThreadListItemByIndexProvider: FC<\n PropsWithChildren<{\n index: number;\n archived: boolean;\n }>\n> = ({ index, archived, children }) => {\n const api = useAssistantApi();\n\n const api2 = useMemo(() => {\n const getItem = () => api.threads().item({ index, archived });\n return {\n threadListItem: createAssistantApiField({\n source: \"threads\",\n query: { type: \"index\", index, archived },\n get: () => getItem(),\n }),\n on<TEvent extends keyof AssistantEvents>(\n selector: AssistantEventSelector<TEvent>,\n callback: (e: AssistantEvents[TEvent]) => void,\n ): Unsubscribe {\n const { event, scope } = normalizeEventSelector(selector);\n if (scope !== \"thread-list-item\") return api.on(selector, callback);\n\n return api.on({ scope: \"*\", event }, (e: AssistantEvents[TEvent]) => {\n if (e.threadId === getItem().getState().id) {\n callback(e);\n }\n });\n },\n } satisfies Partial<AssistantApi>;\n }, [api, index, archived]);\n\n return <AssistantApiProvider api={api2}>{children}</AssistantApiProvider>;\n};\n\nexport const ThreadListItemByIdProvider: FC<\n PropsWithChildren<{\n id: string;\n }>\n> = ({ id, children }) => {\n const api = useAssistantApi();\n\n const api2 = useMemo(() => {\n const getItem = () => api.threads().item({ id });\n return {\n threadListItem: createAssistantApiField({\n source: \"threads\",\n query: { type: \"id\", id },\n get: () => getItem(),\n }),\n on<TEvent extends keyof AssistantEvents>(\n selector: AssistantEventSelector<TEvent>,\n callback: (e: AssistantEvents[TEvent]) => void,\n ): Unsubscribe {\n const { event, scope } = normalizeEventSelector(selector);\n if (!checkEventScope(\"thread-list-item\", scope, event))\n return api.on(selector, callback);\n\n return api.on({ scope: \"*\", event }, (e: AssistantEvents[TEvent]) => {\n if (e.threadId !== getItem().getState().id) return;\n callback(e);\n });\n },\n } satisfies Partial<AssistantApi>;\n }, [api, id]);\n\n return <AssistantApiProvider api={api2}>{children}</AssistantApiProvider>;\n};\n"],"mappings":";;;AAEA,SAAS,eAAgD;AACzD;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAGP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAkCE;AAhCF,IAAM,gCAKT,CAAC,EAAE,OAAO,UAAU,SAAS,MAAM;AACrC,QAAM,MAAM,gBAAgB;AAE5B,QAAM,OAAO,QAAQ,MAAM;AACzB,UAAM,UAAU,MAAM,IAAI,QAAQ,EAAE,KAAK,EAAE,OAAO,SAAS,CAAC;AAC5D,WAAO;AAAA,MACL,gBAAgB,wBAAwB;AAAA,QACtC,QAAQ;AAAA,QACR,OAAO,EAAE,MAAM,SAAS,OAAO,SAAS;AAAA,QACxC,KAAK,MAAM,QAAQ;AAAA,MACrB,CAAC;AAAA,MACD,GACE,UACA,UACa;AACb,cAAM,EAAE,OAAO,MAAM,IAAI,uBAAuB,QAAQ;AACxD,YAAI,UAAU,mBAAoB,QAAO,IAAI,GAAG,UAAU,QAAQ;AAElE,eAAO,IAAI,GAAG,EAAE,OAAO,KAAK,MAAM,GAAG,CAAC,MAA+B;AACnE,cAAI,EAAE,aAAa,QAAQ,EAAE,SAAS,EAAE,IAAI;AAC1C,qBAAS,CAAC;AAAA,UACZ;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,GAAG,CAAC,KAAK,OAAO,QAAQ,CAAC;AAEzB,SAAO,oBAAC,wBAAqB,KAAK,MAAO,UAAS;AACpD;AAEO,IAAM,6BAIT,CAAC,EAAE,IAAI,SAAS,MAAM;AACxB,QAAM,MAAM,gBAAgB;AAE5B,QAAM,OAAO,QAAQ,MAAM;AACzB,UAAM,UAAU,MAAM,IAAI,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC;AAC/C,WAAO;AAAA,MACL,gBAAgB,wBAAwB;AAAA,QACtC,QAAQ;AAAA,QACR,OAAO,EAAE,MAAM,MAAM,GAAG;AAAA,QACxB,KAAK,MAAM,QAAQ;AAAA,MACrB,CAAC;AAAA,MACD,GACE,UACA,UACa;AACb,cAAM,EAAE,OAAO,MAAM,IAAI,uBAAuB,QAAQ;AACxD,YAAI,CAAC,gBAAgB,oBAAoB,OAAO,KAAK;AACnD,iBAAO,IAAI,GAAG,UAAU,QAAQ;AAElC,eAAO,IAAI,GAAG,EAAE,OAAO,KAAK,MAAM,GAAG,CAAC,MAA+B;AACnE,cAAI,EAAE,aAAa,QAAQ,EAAE,SAAS,EAAE,GAAI;AAC5C,mBAAS,CAAC;AAAA,QACZ,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,GAAG,CAAC,KAAK,EAAE,CAAC;AAEZ,SAAO,oBAAC,wBAAqB,KAAK,MAAO,UAAS;AACpD;","names":[]}
1
+ {"version":3,"sources":["../../../src/context/providers/ThreadListItemProvider.tsx"],"sourcesContent":["\"use client\";\n\nimport { useMemo, type FC, type PropsWithChildren } from \"react\";\nimport {\n AssistantApi,\n AssistantApiProvider,\n useAssistantApi,\n createAssistantApiField,\n} from \"../react/AssistantApiContext\";\nimport {\n checkEventScope,\n normalizeEventSelector,\n} from \"../../types/EventTypes\";\n\nexport const ThreadListItemByIndexProvider: FC<\n PropsWithChildren<{\n index: number;\n archived: boolean;\n }>\n> = ({ index, archived, children }) => {\n const api = useAssistantApi();\n\n const api2 = useMemo(() => {\n const getItem = () => api.threads().item({ index, archived });\n return {\n threadListItem: createAssistantApiField({\n source: \"threads\",\n query: { type: \"index\", index, archived },\n get: () => getItem(),\n }),\n on(selector, callback) {\n const { event, scope } = normalizeEventSelector(selector);\n if (!checkEventScope(\"thread-list-item\", scope, event))\n return api.on(selector, callback);\n\n return api.on({ scope: \"*\", event }, (e) => {\n if (e.threadId === getItem().getState().id) {\n callback(e);\n }\n });\n },\n } satisfies Partial<AssistantApi>;\n }, [api, index, archived]);\n\n return <AssistantApiProvider api={api2}>{children}</AssistantApiProvider>;\n};\n\nexport const ThreadListItemByIdProvider: FC<\n PropsWithChildren<{\n id: string;\n }>\n> = ({ id, children }) => {\n const api = useAssistantApi();\n\n const api2 = useMemo(() => {\n const getItem = () => api.threads().item({ id });\n return {\n threadListItem: createAssistantApiField({\n source: \"threads\",\n query: { type: \"id\", id },\n get: () => getItem(),\n }),\n on(selector, callback) {\n const { event, scope } = normalizeEventSelector(selector);\n if (!checkEventScope(\"thread-list-item\", scope, event))\n return api.on(selector, callback);\n\n return api.on({ scope: \"*\", event }, (e) => {\n if (e.threadId !== getItem().getState().id) return;\n callback(e);\n });\n },\n } satisfies Partial<AssistantApi>;\n }, [api, id]);\n\n return <AssistantApiProvider api={api2}>{children}</AssistantApiProvider>;\n};\n"],"mappings":";;;AAEA,SAAS,eAAgD;AACzD;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAgCE;AA9BF,IAAM,gCAKT,CAAC,EAAE,OAAO,UAAU,SAAS,MAAM;AACrC,QAAM,MAAM,gBAAgB;AAE5B,QAAM,OAAO,QAAQ,MAAM;AACzB,UAAM,UAAU,MAAM,IAAI,QAAQ,EAAE,KAAK,EAAE,OAAO,SAAS,CAAC;AAC5D,WAAO;AAAA,MACL,gBAAgB,wBAAwB;AAAA,QACtC,QAAQ;AAAA,QACR,OAAO,EAAE,MAAM,SAAS,OAAO,SAAS;AAAA,QACxC,KAAK,MAAM,QAAQ;AAAA,MACrB,CAAC;AAAA,MACD,GAAG,UAAU,UAAU;AACrB,cAAM,EAAE,OAAO,MAAM,IAAI,uBAAuB,QAAQ;AACxD,YAAI,CAAC,gBAAgB,oBAAoB,OAAO,KAAK;AACnD,iBAAO,IAAI,GAAG,UAAU,QAAQ;AAElC,eAAO,IAAI,GAAG,EAAE,OAAO,KAAK,MAAM,GAAG,CAAC,MAAM;AAC1C,cAAI,EAAE,aAAa,QAAQ,EAAE,SAAS,EAAE,IAAI;AAC1C,qBAAS,CAAC;AAAA,UACZ;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,GAAG,CAAC,KAAK,OAAO,QAAQ,CAAC;AAEzB,SAAO,oBAAC,wBAAqB,KAAK,MAAO,UAAS;AACpD;AAEO,IAAM,6BAIT,CAAC,EAAE,IAAI,SAAS,MAAM;AACxB,QAAM,MAAM,gBAAgB;AAE5B,QAAM,OAAO,QAAQ,MAAM;AACzB,UAAM,UAAU,MAAM,IAAI,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC;AAC/C,WAAO;AAAA,MACL,gBAAgB,wBAAwB;AAAA,QACtC,QAAQ;AAAA,QACR,OAAO,EAAE,MAAM,MAAM,GAAG;AAAA,QACxB,KAAK,MAAM,QAAQ;AAAA,MACrB,CAAC;AAAA,MACD,GAAG,UAAU,UAAU;AACrB,cAAM,EAAE,OAAO,MAAM,IAAI,uBAAuB,QAAQ;AACxD,YAAI,CAAC,gBAAgB,oBAAoB,OAAO,KAAK;AACnD,iBAAO,IAAI,GAAG,UAAU,QAAQ;AAElC,eAAO,IAAI,GAAG,EAAE,OAAO,KAAK,MAAM,GAAG,CAAC,MAAM;AAC1C,cAAI,EAAE,aAAa,QAAQ,EAAE,SAAS,EAAE,GAAI;AAC5C,mBAAS,CAAC;AAAA,QACZ,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,GAAG,CAAC,KAAK,EAAE,CAAC;AAEZ,SAAO,oBAAC,wBAAqB,KAAK,MAAO,UAAS;AACpD;","names":[]}
@@ -8,7 +8,7 @@ import { ComposerClientApi, ComposerClientState } from "../../client/types/Compo
8
8
  import { AttachmentClientApi, AttachmentClientState } from "../../client/types/Attachment";
9
9
  import { Unsubscribe } from "@assistant-ui/tap";
10
10
  import { ModelContextProvider } from "../../model-context";
11
- import { AssistantEventSelector, AssistantEvents } from "../../types/EventTypes";
11
+ import { AssistantEvent, AssistantEventCallback, AssistantEventSelector } from "../../types/EventTypes";
12
12
  import { ThreadListClientApi, ThreadListClientState } from "../../client/types/ThreadList";
13
13
  export type AssistantState = {
14
14
  readonly threads: ThreadListClientState;
@@ -86,7 +86,7 @@ export type AssistantApi = {
86
86
  attachment: AssistantApiField<AttachmentClientApi, AttachmentMeta>;
87
87
  subscribe(listener: () => void): Unsubscribe;
88
88
  flushSync(): void;
89
- on<TEvent extends keyof AssistantEvents>(event: AssistantEventSelector<TEvent>, callback: (e: AssistantEvents[TEvent]) => void): Unsubscribe;
89
+ on<TEvent extends AssistantEvent>(event: AssistantEventSelector<TEvent>, callback: AssistantEventCallback<TEvent>): Unsubscribe;
90
90
  registerModelContextProvider(provider: ModelContextProvider): void;
91
91
  };
92
92
  export declare const createAssistantApiField: <TApi, TMeta extends {
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantApiContext.d.ts","sourceRoot":"","sources":["../../../src/context/react/AssistantApiContext.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AssistantApiContext.d.ts","sourceRoot":"","sources":["../../../src/context/react/AssistantApiContext.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/context/react/AssistantApiContext.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n createContext,\n FC,\n PropsWithChildren,\n useContext,\n useMemo,\n} from \"react\";\n\nimport { ToolUIApi, ToolUIState, ToolUIMeta } from \"../../client/types/ToolUI\";\nimport {\n MessageClientApi,\n MessageClientState,\n} from \"../../client/types/Message\";\nimport {\n ThreadListItemClientApi,\n ThreadListItemClientState,\n} from \"../../client/types/ThreadListItem\";\nimport {\n MessagePartClientApi,\n MessagePartClientState,\n} from \"../../client/types/Part\";\nimport { ThreadClientApi, ThreadClientState } from \"../../client/types/Thread\";\nimport {\n ComposerClientApi,\n ComposerClientState,\n} from \"../../client/types/Composer\";\nimport {\n AttachmentClientApi,\n AttachmentClientState,\n} from \"../../client/types/Attachment\";\nimport { Unsubscribe } from \"@assistant-ui/tap\";\nimport { ModelContextProvider } from \"../../model-context\";\nimport { AssistantRuntime } from \"../../legacy-runtime/runtime/AssistantRuntime\";\nimport {\n AssistantEventSelector,\n AssistantEvents,\n normalizeEventSelector,\n} from \"../../types/EventTypes\";\nimport {\n ThreadListClientApi,\n ThreadListClientState,\n} from \"../../client/types/ThreadList\";\n\nexport type AssistantState = {\n readonly threads: ThreadListClientState;\n readonly toolUIs: ToolUIState;\n\n readonly threadListItem: ThreadListItemClientState;\n readonly thread: ThreadClientState;\n readonly composer: ComposerClientState;\n readonly message: MessageClientState;\n readonly part: MessagePartClientState;\n readonly attachment: AttachmentClientState;\n};\n\ntype AssistantApiField<\n TApi,\n TMeta extends { source: string | null; query: any },\n> = (() => TApi) & (TMeta | { source: null; query: Record<string, never> });\n\n// Meta types for each API method\ntype ThreadsMeta = {\n source: \"root\";\n query: Record<string, never>;\n};\n\ntype ThreadListItemMeta = {\n source: \"threads\";\n query:\n | { type: \"index\"; index: number; archived: boolean }\n | { type: \"main\" }\n | { type: \"id\"; id: string };\n};\n\ntype ThreadMeta = {\n source: \"threads\";\n query: { type: \"main\" };\n};\n\ntype ComposerMeta = {\n source: \"message\" | \"thread\";\n query: Record<string, never>;\n};\n\ntype MessageMeta = {\n source: \"thread\";\n query: { type: \"index\"; index: number };\n};\n\ntype PartMeta = {\n source: \"message\" | \"root\";\n query: { type: \"index\"; index: number } | Record<string, never>;\n};\n\ntype AttachmentMeta = {\n source: \"message\" | \"composer\";\n query: { type: \"index\"; index: number };\n};\n\nexport type AssistantApi = {\n threads: AssistantApiField<ThreadListClientApi, ThreadsMeta>;\n toolUIs: AssistantApiField<ToolUIApi, ToolUIMeta>;\n threadListItem: AssistantApiField<\n ThreadListItemClientApi,\n ThreadListItemMeta\n >;\n thread: AssistantApiField<ThreadClientApi, ThreadMeta>;\n composer: AssistantApiField<ComposerClientApi, ComposerMeta>;\n message: AssistantApiField<MessageClientApi, MessageMeta>;\n part: AssistantApiField<MessagePartClientApi, PartMeta>;\n attachment: AssistantApiField<AttachmentClientApi, AttachmentMeta>;\n\n subscribe(listener: () => void): Unsubscribe;\n flushSync(): void;\n\n on<TEvent extends keyof AssistantEvents>(\n event: AssistantEventSelector<TEvent>,\n callback: (e: AssistantEvents[TEvent]) => void,\n ): Unsubscribe;\n\n // temp\n registerModelContextProvider(provider: ModelContextProvider): void;\n /** @internal */\n __internal_getRuntime(): AssistantRuntime | null;\n};\n\nexport const createAssistantApiField = <\n TApi,\n TMeta extends { source: any; query: any },\n>(\n config: {\n get: () => TApi;\n } & (TMeta | { source: null; query: Record<string, never> }),\n): AssistantApiField<TApi, TMeta> => {\n const fn = config.get as AssistantApiField<TApi, TMeta>;\n fn.source = config.source;\n fn.query = config.query;\n return fn;\n};\n\nconst NO_OP_FN = () => () => {};\n\nconst AssistantApiContext = createContext<AssistantApi>({\n threads: createAssistantApiField({\n source: null,\n query: {},\n get: () => {\n throw new Error(\"Threads is only available inside <AssistantProvider />\");\n },\n }),\n toolUIs: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\"ToolUIs is only available inside <AssistantProvider />\");\n },\n }),\n threadListItem: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"ThreadListItem is only available inside <AssistantProvider />\",\n );\n },\n }),\n thread: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\"Thread is only available inside <AssistantProvider />\");\n },\n }),\n composer: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"Composer is only available inside <AssistantProvider />\",\n );\n },\n }),\n message: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"Message is only available inside <ThreadPrimitive.Messages />\",\n );\n },\n }),\n part: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"Part is only available inside <MessagePrimitive.Parts />\",\n );\n },\n }),\n attachment: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"Attachment is only available inside <MessagePrimitive.Attachments /> or <ComposerPrimitive.Attachments />\",\n );\n },\n }),\n\n subscribe: NO_OP_FN,\n flushSync: NO_OP_FN,\n on: (selector) => {\n const { scope } = normalizeEventSelector(selector);\n throw new Error(`Event scope is not available in this component: ${scope}`);\n },\n\n registerModelContextProvider: () => {\n throw new Error(\n \"Registering model context providers is only available inside <AssistantProvider />\",\n );\n },\n __internal_getRuntime: () => {\n return null;\n },\n});\n\nexport const useAssistantApi = (): AssistantApi => {\n return useContext(AssistantApiContext);\n};\n\nconst mergeFns = <TArgs extends Array<unknown>>(\n fn1: (...args: TArgs) => void,\n fn2: (...args: TArgs) => void,\n) => {\n if (fn1 === NO_OP_FN) return fn2;\n if (fn2 === NO_OP_FN) return fn1;\n\n return (...args: TArgs) => {\n fn1(...args);\n fn2(...args);\n };\n};\n\nconst mergeFnsWithUnsubscribe = <TArgs extends Array<unknown>>(\n fn1: (...args: TArgs) => Unsubscribe,\n fn2: (...args: TArgs) => Unsubscribe,\n) => {\n if (fn1 === NO_OP_FN) return fn2;\n if (fn2 === NO_OP_FN) return fn1;\n\n return (...args: TArgs) => {\n const unsubscribe1 = fn1(...args);\n const unsubscribe2 = fn2(...args);\n\n return () => {\n unsubscribe1();\n unsubscribe2();\n };\n };\n};\n\nconst extendApi = (\n api: AssistantApi,\n api2: Partial<AssistantApi>,\n): AssistantApi => {\n const api2Subscribe = api2.subscribe;\n const api2FlushSync = api2.flushSync;\n return {\n ...api,\n ...api2,\n subscribe: mergeFnsWithUnsubscribe(\n api.subscribe,\n api2Subscribe ?? NO_OP_FN,\n ),\n flushSync: mergeFns(api.flushSync, api2FlushSync ?? NO_OP_FN),\n };\n};\n\nexport const AssistantApiProvider: FC<\n PropsWithChildren<{ api: Partial<AssistantApi> }>\n> = ({ api: api2, children }) => {\n const api = useAssistantApi();\n const extendedApi = useMemo(() => extendApi(api, api2), [api, api2]);\n\n return (\n <AssistantApiContext value={extendedApi}>{children}</AssistantApiContext>\n );\n};\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/context/react/AssistantApiContext.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n createContext,\n FC,\n PropsWithChildren,\n useContext,\n useMemo,\n} from \"react\";\n\nimport { ToolUIApi, ToolUIState, ToolUIMeta } from \"../../client/types/ToolUI\";\nimport {\n MessageClientApi,\n MessageClientState,\n} from \"../../client/types/Message\";\nimport {\n ThreadListItemClientApi,\n ThreadListItemClientState,\n} from \"../../client/types/ThreadListItem\";\nimport {\n MessagePartClientApi,\n MessagePartClientState,\n} from \"../../client/types/Part\";\nimport { ThreadClientApi, ThreadClientState } from \"../../client/types/Thread\";\nimport {\n ComposerClientApi,\n ComposerClientState,\n} from \"../../client/types/Composer\";\nimport {\n AttachmentClientApi,\n AttachmentClientState,\n} from \"../../client/types/Attachment\";\nimport { Unsubscribe } from \"@assistant-ui/tap\";\nimport { ModelContextProvider } from \"../../model-context\";\nimport { AssistantRuntime } from \"../../legacy-runtime/runtime/AssistantRuntime\";\nimport {\n AssistantEvent,\n AssistantEventCallback,\n AssistantEventSelector,\n normalizeEventSelector,\n} from \"../../types/EventTypes\";\nimport {\n ThreadListClientApi,\n ThreadListClientState,\n} from \"../../client/types/ThreadList\";\n\nexport type AssistantState = {\n readonly threads: ThreadListClientState;\n readonly toolUIs: ToolUIState;\n\n readonly threadListItem: ThreadListItemClientState;\n readonly thread: ThreadClientState;\n readonly composer: ComposerClientState;\n readonly message: MessageClientState;\n readonly part: MessagePartClientState;\n readonly attachment: AttachmentClientState;\n};\n\ntype AssistantApiField<\n TApi,\n TMeta extends { source: string | null; query: any },\n> = (() => TApi) & (TMeta | { source: null; query: Record<string, never> });\n\n// Meta types for each API method\ntype ThreadsMeta = {\n source: \"root\";\n query: Record<string, never>;\n};\n\ntype ThreadListItemMeta = {\n source: \"threads\";\n query:\n | { type: \"index\"; index: number; archived: boolean }\n | { type: \"main\" }\n | { type: \"id\"; id: string };\n};\n\ntype ThreadMeta = {\n source: \"threads\";\n query: { type: \"main\" };\n};\n\ntype ComposerMeta = {\n source: \"message\" | \"thread\";\n query: Record<string, never>;\n};\n\ntype MessageMeta = {\n source: \"thread\";\n query: { type: \"index\"; index: number };\n};\n\ntype PartMeta = {\n source: \"message\" | \"root\";\n query: { type: \"index\"; index: number } | Record<string, never>;\n};\n\ntype AttachmentMeta = {\n source: \"message\" | \"composer\";\n query: { type: \"index\"; index: number };\n};\n\nexport type AssistantApi = {\n threads: AssistantApiField<ThreadListClientApi, ThreadsMeta>;\n toolUIs: AssistantApiField<ToolUIApi, ToolUIMeta>;\n threadListItem: AssistantApiField<\n ThreadListItemClientApi,\n ThreadListItemMeta\n >;\n thread: AssistantApiField<ThreadClientApi, ThreadMeta>;\n composer: AssistantApiField<ComposerClientApi, ComposerMeta>;\n message: AssistantApiField<MessageClientApi, MessageMeta>;\n part: AssistantApiField<MessagePartClientApi, PartMeta>;\n attachment: AssistantApiField<AttachmentClientApi, AttachmentMeta>;\n\n subscribe(listener: () => void): Unsubscribe;\n flushSync(): void;\n\n on<TEvent extends AssistantEvent>(\n event: AssistantEventSelector<TEvent>,\n callback: AssistantEventCallback<TEvent>,\n ): Unsubscribe;\n\n // temp\n registerModelContextProvider(provider: ModelContextProvider): void;\n /** @internal */\n __internal_getRuntime(): AssistantRuntime | null;\n};\n\nexport const createAssistantApiField = <\n TApi,\n TMeta extends { source: any; query: any },\n>(\n config: {\n get: () => TApi;\n } & (TMeta | { source: null; query: Record<string, never> }),\n): AssistantApiField<TApi, TMeta> => {\n const fn = config.get as AssistantApiField<TApi, TMeta>;\n fn.source = config.source;\n fn.query = config.query;\n return fn;\n};\n\nconst NO_OP_FN = () => () => {};\n\nconst AssistantApiContext = createContext<AssistantApi>({\n threads: createAssistantApiField({\n source: null,\n query: {},\n get: () => {\n throw new Error(\"Threads is only available inside <AssistantProvider />\");\n },\n }),\n toolUIs: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\"ToolUIs is only available inside <AssistantProvider />\");\n },\n }),\n threadListItem: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"ThreadListItem is only available inside <AssistantProvider />\",\n );\n },\n }),\n thread: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\"Thread is only available inside <AssistantProvider />\");\n },\n }),\n composer: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"Composer is only available inside <AssistantProvider />\",\n );\n },\n }),\n message: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"Message is only available inside <ThreadPrimitive.Messages />\",\n );\n },\n }),\n part: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"Part is only available inside <MessagePrimitive.Parts />\",\n );\n },\n }),\n attachment: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"Attachment is only available inside <MessagePrimitive.Attachments /> or <ComposerPrimitive.Attachments />\",\n );\n },\n }),\n\n subscribe: NO_OP_FN,\n flushSync: NO_OP_FN,\n on: (selector) => {\n const { scope } = normalizeEventSelector(selector);\n throw new Error(`Event scope is not available in this component: ${scope}`);\n },\n\n registerModelContextProvider: () => {\n throw new Error(\n \"Registering model context providers is only available inside <AssistantProvider />\",\n );\n },\n __internal_getRuntime: () => {\n return null;\n },\n});\n\nexport const useAssistantApi = (): AssistantApi => {\n return useContext(AssistantApiContext);\n};\n\nconst mergeFns = <TArgs extends Array<unknown>>(\n fn1: (...args: TArgs) => void,\n fn2: (...args: TArgs) => void,\n) => {\n if (fn1 === NO_OP_FN) return fn2;\n if (fn2 === NO_OP_FN) return fn1;\n\n return (...args: TArgs) => {\n fn1(...args);\n fn2(...args);\n };\n};\n\nconst mergeFnsWithUnsubscribe = <TArgs extends Array<unknown>>(\n fn1: (...args: TArgs) => Unsubscribe,\n fn2: (...args: TArgs) => Unsubscribe,\n) => {\n if (fn1 === NO_OP_FN) return fn2;\n if (fn2 === NO_OP_FN) return fn1;\n\n return (...args: TArgs) => {\n const unsubscribe1 = fn1(...args);\n const unsubscribe2 = fn2(...args);\n\n return () => {\n unsubscribe1();\n unsubscribe2();\n };\n };\n};\n\nconst extendApi = (\n api: AssistantApi,\n api2: Partial<AssistantApi>,\n): AssistantApi => {\n const api2Subscribe = api2.subscribe;\n const api2FlushSync = api2.flushSync;\n return {\n ...api,\n ...api2,\n subscribe: mergeFnsWithUnsubscribe(\n api.subscribe,\n api2Subscribe ?? NO_OP_FN,\n ),\n flushSync: mergeFns(api.flushSync, api2FlushSync ?? NO_OP_FN),\n };\n};\n\nexport const AssistantApiProvider: FC<\n PropsWithChildren<{ api: Partial<AssistantApi> }>\n> = ({ api: api2, children }) => {\n const api = useAssistantApi();\n const extendedApi = useMemo(() => extendApi(api, api2), [api, api2]);\n\n return (\n <AssistantApiContext value={extendedApi}>{children}</AssistantApiContext>\n );\n};\n"],"mappings":"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","names":[]}
@@ -1,3 +1,3 @@
1
- import { AssistantEventSelector, AssistantEvents } from "../../../types/EventTypes";
2
- export declare const useAssistantEvent: <TEvent extends keyof AssistantEvents>(selector: AssistantEventSelector<TEvent>, callback: (e: AssistantEvents[TEvent]) => void) => void;
1
+ import { AssistantEvent, AssistantEventCallback, AssistantEventSelector } from "../../../types/EventTypes";
2
+ export declare const useAssistantEvent: <TEvent extends AssistantEvent>(selector: AssistantEventSelector<TEvent>, callback: AssistantEventCallback<TEvent>) => void;
3
3
  //# sourceMappingURL=useAssistantEvent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useAssistantEvent.d.ts","sourceRoot":"","sources":["../../../../src/context/react/hooks/useAssistantEvent.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,sBAAsB,EACtB,eAAe,EAEhB,MAAM,2BAA2B,CAAC;AAEnC,eAAO,MAAM,iBAAiB,GAAI,MAAM,SAAS,MAAM,eAAe,EACpE,UAAU,sBAAsB,CAAC,MAAM,CAAC,EACxC,UAAU,CAAC,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,KAAK,IAAI,SAa/C,CAAC"}
1
+ {"version":3,"file":"useAssistantEvent.d.ts","sourceRoot":"","sources":["../../../../src/context/react/hooks/useAssistantEvent.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,sBAAsB,EAEvB,MAAM,2BAA2B,CAAC;AAEnC,eAAO,MAAM,iBAAiB,GAAI,MAAM,SAAS,cAAc,EAC7D,UAAU,sBAAsB,CAAC,MAAM,CAAC,EACxC,UAAU,sBAAsB,CAAC,MAAM,CAAC,SAazC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/context/react/hooks/useAssistantEvent.ts"],"sourcesContent":["import { useEffect, useRef } from \"react\";\nimport { useAssistantApi } from \"../../react/AssistantApiContext\";\nimport {\n AssistantEventSelector,\n AssistantEvents,\n normalizeEventSelector,\n} from \"../../../types/EventTypes\";\n\nexport const useAssistantEvent = <TEvent extends keyof AssistantEvents>(\n selector: AssistantEventSelector<TEvent>,\n callback: (e: AssistantEvents[TEvent]) => void,\n) => {\n const api = useAssistantApi();\n const callbackRef = useRef(callback);\n useEffect(() => {\n callbackRef.current = callback;\n });\n\n const { scope, event } = normalizeEventSelector(selector);\n useEffect(\n () => api.on({ scope, event }, (e) => callbackRef.current(e)),\n [api, scope, event],\n );\n};\n"],"mappings":";AAAA,SAAS,WAAW,cAAc;AAClC,SAAS,uBAAuB;AAChC;AAAA,EAGE;AAAA,OACK;AAEA,IAAM,oBAAoB,CAC/B,UACA,aACG;AACH,QAAM,MAAM,gBAAgB;AAC5B,QAAM,cAAc,OAAO,QAAQ;AACnC,YAAU,MAAM;AACd,gBAAY,UAAU;AAAA,EACxB,CAAC;AAED,QAAM,EAAE,OAAO,MAAM,IAAI,uBAAuB,QAAQ;AACxD;AAAA,IACE,MAAM,IAAI,GAAG,EAAE,OAAO,MAAM,GAAG,CAAC,MAAM,YAAY,QAAQ,CAAC,CAAC;AAAA,IAC5D,CAAC,KAAK,OAAO,KAAK;AAAA,EACpB;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../../src/context/react/hooks/useAssistantEvent.ts"],"sourcesContent":["import { useEffect, useRef } from \"react\";\nimport { useAssistantApi } from \"../../react/AssistantApiContext\";\nimport {\n AssistantEvent,\n AssistantEventCallback,\n AssistantEventSelector,\n normalizeEventSelector,\n} from \"../../../types/EventTypes\";\n\nexport const useAssistantEvent = <TEvent extends AssistantEvent>(\n selector: AssistantEventSelector<TEvent>,\n callback: AssistantEventCallback<TEvent>,\n) => {\n const api = useAssistantApi();\n const callbackRef = useRef(callback);\n useEffect(() => {\n callbackRef.current = callback;\n });\n\n const { scope, event } = normalizeEventSelector(selector);\n useEffect(\n () => api.on({ scope, event }, (e) => callbackRef.current(e)),\n [api, scope, event],\n );\n};\n"],"mappings":";AAAA,SAAS,WAAW,cAAc;AAClC,SAAS,uBAAuB;AAChC;AAAA,EAIE;AAAA,OACK;AAEA,IAAM,oBAAoB,CAC/B,UACA,aACG;AACH,QAAM,MAAM,gBAAgB;AAC5B,QAAM,cAAc,OAAO,QAAQ;AACnC,YAAU,MAAM;AACd,gBAAY,UAAU;AAAA,EACxB,CAAC;AAED,QAAM,EAAE,OAAO,MAAM,IAAI,uBAAuB,QAAQ;AACxD;AAAA,IACE,MAAM,IAAI,GAAG,EAAE,OAAO,MAAM,GAAG,CAAC,MAAM,YAAY,QAAQ,CAAC,CAAC;AAAA,IAC5D,CAAC,KAAK,OAAO,KAAK;AAAA,EACpB;AACF;","names":[]}
@@ -1,12 +1,11 @@
1
- import { AssistantEvents, Unsubscribe } from "../../types";
2
- type EventCallback<TEvent extends keyof AssistantEvents> = (payload: AssistantEvents[TEvent]) => void;
1
+ import { Unsubscribe } from "../../types/Unsubscribe";
2
+ import { AssistantEventMap, AssistantEvent, AssistantEventCallback } from "../../types/EventTypes";
3
3
  export type EventManager = {
4
- on<TEvent extends keyof AssistantEvents>(event: TEvent, callback: EventCallback<TEvent>): Unsubscribe;
5
- emit<TEvent extends keyof AssistantEvents>(event: TEvent, payload: AssistantEvents[TEvent]): void;
4
+ on<TEvent extends AssistantEvent>(event: TEvent, callback: AssistantEventCallback<TEvent>): Unsubscribe;
5
+ emit<TEvent extends Exclude<AssistantEvent, "*">>(event: TEvent, payload: AssistantEventMap[TEvent]): void;
6
6
  };
7
7
  export declare const EventManager: import("@assistant-ui/tap").ResourceElementConstructor<{
8
- on: <TEvent extends keyof AssistantEvents>(event: TEvent, callback: EventCallback<TEvent>) => Unsubscribe;
9
- emit: (event: keyof AssistantEvents, payload: any) => void;
8
+ on: <TEvent extends AssistantEvent>(event: TEvent, callback: AssistantEventCallback<TEvent>) => () => void;
9
+ emit: <TEvent extends Exclude<AssistantEvent, "*">>(event: TEvent, payload: AssistantEventMap[TEvent]) => void;
10
10
  }, undefined>;
11
- export {};
12
11
  //# sourceMappingURL=EventManagerRuntimeClient.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EventManagerRuntimeClient.d.ts","sourceRoot":"","sources":["../../../src/legacy-runtime/client/EventManagerRuntimeClient.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE3D,KAAK,aAAa,CAAC,MAAM,SAAS,MAAM,eAAe,IAAI,CACzD,OAAO,EAAE,eAAe,CAAC,MAAM,CAAC,KAC7B,IAAI,CAAC;AAEV,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,CAAC,MAAM,SAAS,MAAM,eAAe,EACrC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,GAC9B,WAAW,CAAC;IACf,IAAI,CAAC,MAAM,SAAS,MAAM,eAAe,EACvC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,eAAe,CAAC,MAAM,CAAC,GAC/B,IAAI,CAAC;CACT,CAAC;AAEF,eAAO,MAAM,YAAY;SAKd,MAAM,SAAS,MAAM,eAAe,SAChC,MAAM,YACH,aAAa,CAAC,MAAM,CAAC,KAC9B,WAAW;kBAgBA,MAAM,eAAe,WAAW,GAAG;aAerD,CAAC"}
1
+ {"version":3,"file":"EventManagerRuntimeClient.d.ts","sourceRoot":"","sources":["../../../src/legacy-runtime/client/EventManagerRuntimeClient.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACvB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,CAAC,MAAM,SAAS,cAAc,EAC9B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,sBAAsB,CAAC,MAAM,CAAC,GACvC,WAAW,CAAC;IACf,IAAI,CAAC,MAAM,SAAS,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC,EAC9C,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,iBAAiB,CAAC,MAAM,CAAC,GACjC,IAAI,CAAC;CACT,CAAC;AAeF,eAAO,MAAM,YAAY;SAvBpB,MAAM,SAAS,cAAc;WAI3B,MAAM,SAAS,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC;aAmEhD,CAAC"}
@@ -19,10 +19,18 @@ var EventManager = resource(() => {
19
19
  },
20
20
  emit: (event, payload) => {
21
21
  const eventListeners = listeners.get(event);
22
- if (!eventListeners) return;
22
+ const wildcardListeners = listeners.get("*");
23
+ if (!eventListeners && !wildcardListeners) return;
23
24
  queueMicrotask(() => {
24
- for (const callback of eventListeners) {
25
- callback(payload);
25
+ if (eventListeners) {
26
+ for (const callback of eventListeners) {
27
+ callback(payload);
28
+ }
29
+ }
30
+ if (wildcardListeners) {
31
+ for (const callback of wildcardListeners) {
32
+ callback({ event, payload });
33
+ }
26
34
  }
27
35
  });
28
36
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/legacy-runtime/client/EventManagerRuntimeClient.ts"],"sourcesContent":["import { resource, tapMemo } from \"@assistant-ui/tap\";\nimport { AssistantEvents, Unsubscribe } from \"../../types\";\n\ntype EventCallback<TEvent extends keyof AssistantEvents> = (\n payload: AssistantEvents[TEvent],\n) => void;\n\nexport type EventManager = {\n on<TEvent extends keyof AssistantEvents>(\n event: TEvent,\n callback: EventCallback<TEvent>,\n ): Unsubscribe;\n emit<TEvent extends keyof AssistantEvents>(\n event: TEvent,\n payload: AssistantEvents[TEvent],\n ): void;\n};\n\nexport const EventManager = resource(() => {\n const events = tapMemo(() => {\n const listeners = new Map<string, Set<EventCallback<any>>>();\n\n return {\n on: <TEvent extends keyof AssistantEvents>(\n event: TEvent,\n callback: EventCallback<TEvent>,\n ): Unsubscribe => {\n if (!listeners.has(event)) {\n listeners.set(event, new Set());\n }\n\n const eventListeners = listeners.get(event)!;\n eventListeners.add(callback);\n\n return () => {\n eventListeners.delete(callback);\n if (eventListeners.size === 0) {\n listeners.delete(event);\n }\n };\n },\n\n emit: (event: keyof AssistantEvents, payload: any) => {\n const eventListeners = listeners.get(event);\n if (!eventListeners) return;\n\n // make sure state updates flush\n queueMicrotask(() => {\n for (const callback of eventListeners) {\n callback(payload);\n }\n });\n },\n } satisfies EventManager;\n }, []);\n\n return events;\n});\n"],"mappings":";AAAA,SAAS,UAAU,eAAe;AAkB3B,IAAM,eAAe,SAAS,MAAM;AACzC,QAAM,SAAS,QAAQ,MAAM;AAC3B,UAAM,YAAY,oBAAI,IAAqC;AAE3D,WAAO;AAAA,MACL,IAAI,CACF,OACA,aACgB;AAChB,YAAI,CAAC,UAAU,IAAI,KAAK,GAAG;AACzB,oBAAU,IAAI,OAAO,oBAAI,IAAI,CAAC;AAAA,QAChC;AAEA,cAAM,iBAAiB,UAAU,IAAI,KAAK;AAC1C,uBAAe,IAAI,QAAQ;AAE3B,eAAO,MAAM;AACX,yBAAe,OAAO,QAAQ;AAC9B,cAAI,eAAe,SAAS,GAAG;AAC7B,sBAAU,OAAO,KAAK;AAAA,UACxB;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAM,CAAC,OAA8B,YAAiB;AACpD,cAAM,iBAAiB,UAAU,IAAI,KAAK;AAC1C,YAAI,CAAC,eAAgB;AAGrB,uBAAe,MAAM;AACnB,qBAAW,YAAY,gBAAgB;AACrC,qBAAS,OAAO;AAAA,UAClB;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO;AACT,CAAC;","names":[]}
1
+ {"version":3,"sources":["../../../src/legacy-runtime/client/EventManagerRuntimeClient.ts"],"sourcesContent":["import { resource, tapMemo } from \"@assistant-ui/tap\";\nimport { Unsubscribe } from \"../../types/Unsubscribe\";\nimport {\n AssistantEventMap,\n AssistantEvent,\n AssistantEventCallback,\n} from \"../../types/EventTypes\";\n\nexport type EventManager = {\n on<TEvent extends AssistantEvent>(\n event: TEvent,\n callback: AssistantEventCallback<TEvent>,\n ): Unsubscribe;\n emit<TEvent extends Exclude<AssistantEvent, \"*\">>(\n event: TEvent,\n payload: AssistantEventMap[TEvent],\n ): void;\n};\n\ntype ListenerMap = Omit<\n Map<AssistantEvent, Set<AssistantEventCallback<AssistantEvent>>>,\n \"get\" | \"set\"\n> & {\n get<TEvent extends AssistantEvent>(\n event: TEvent,\n ): Set<AssistantEventCallback<TEvent>> | undefined;\n set<TEvent extends AssistantEvent>(\n event: TEvent,\n value: Set<AssistantEventCallback<TEvent>>,\n ): void;\n};\n\nexport const EventManager = resource(() => {\n const events = tapMemo(() => {\n const listeners: ListenerMap = new Map();\n\n return {\n on: (event, callback) => {\n if (!listeners.has(event)) {\n listeners.set(event, new Set());\n }\n\n const eventListeners = listeners.get(event)!;\n eventListeners.add(callback);\n\n return () => {\n eventListeners.delete(callback);\n if (eventListeners.size === 0) {\n listeners.delete(event);\n }\n };\n },\n\n emit: (event, payload) => {\n const eventListeners = listeners.get(event);\n const wildcardListeners = listeners.get(\"*\");\n\n if (!eventListeners && !wildcardListeners) return;\n\n // make sure state updates flush\n queueMicrotask(() => {\n // Emit to specific event listeners\n if (eventListeners) {\n for (const callback of eventListeners) {\n callback(payload);\n }\n }\n\n // Emit to wildcard listeners\n if (wildcardListeners) {\n for (const callback of wildcardListeners) {\n callback({ event, payload });\n }\n }\n });\n },\n } satisfies EventManager;\n }, []);\n\n return events;\n});\n"],"mappings":";AAAA,SAAS,UAAU,eAAe;AAgC3B,IAAM,eAAe,SAAS,MAAM;AACzC,QAAM,SAAS,QAAQ,MAAM;AAC3B,UAAM,YAAyB,oBAAI,IAAI;AAEvC,WAAO;AAAA,MACL,IAAI,CAAC,OAAO,aAAa;AACvB,YAAI,CAAC,UAAU,IAAI,KAAK,GAAG;AACzB,oBAAU,IAAI,OAAO,oBAAI,IAAI,CAAC;AAAA,QAChC;AAEA,cAAM,iBAAiB,UAAU,IAAI,KAAK;AAC1C,uBAAe,IAAI,QAAQ;AAE3B,eAAO,MAAM;AACX,yBAAe,OAAO,QAAQ;AAC9B,cAAI,eAAe,SAAS,GAAG;AAC7B,sBAAU,OAAO,KAAK;AAAA,UACxB;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAM,CAAC,OAAO,YAAY;AACxB,cAAM,iBAAiB,UAAU,IAAI,KAAK;AAC1C,cAAM,oBAAoB,UAAU,IAAI,GAAG;AAE3C,YAAI,CAAC,kBAAkB,CAAC,kBAAmB;AAG3C,uBAAe,MAAM;AAEnB,cAAI,gBAAgB;AAClB,uBAAW,YAAY,gBAAgB;AACrC,uBAAS,OAAO;AAAA,YAClB;AAAA,UACF;AAGA,cAAI,mBAAmB;AACrB,uBAAW,YAAY,mBAAmB;AACxC,uBAAS,EAAE,OAAO,QAAQ,CAAC;AAAA,YAC7B;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO;AACT,CAAC;","names":[]}
@@ -34,7 +34,7 @@ var ThreadListClient = resource(
34
34
  const state = tapMemo(() => {
35
35
  return {
36
36
  mainThreadId: runtimeState.mainThreadId,
37
- newThreadId: runtimeState.newThread,
37
+ newThreadId: runtimeState.newThread ?? null,
38
38
  isLoading: runtimeState.isLoading,
39
39
  threadIds: runtimeState.threads,
40
40
  archivedThreadIds: runtimeState.archivedThreads,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/legacy-runtime/client/ThreadListRuntimeClient.ts"],"sourcesContent":["import { tapApi } from \"../../utils/tap-store\";\nimport { resource, tapInlineResource, tapMemo } from \"@assistant-ui/tap\";\nimport { ThreadListRuntime } from \"../runtime/ThreadListRuntime\";\nimport { tapSubscribable } from \"../util-hooks/tapSubscribable\";\nimport { ThreadListItemClient } from \"./ThreadListItemRuntimeClient\";\nimport { ThreadClient } from \"./ThreadRuntimeClient\";\nimport { tapLookupResources } from \"../../client/util-hooks/tapLookupResources\";\nimport {\n ThreadListClientState,\n ThreadListClientApi,\n} from \"../../client/types/ThreadList\";\n\nconst ThreadListItemClientById = resource(\n ({ runtime, id }: { runtime: ThreadListRuntime; id: string }) => {\n const threadListItemRuntime = tapMemo(\n () => runtime.getItemById(id),\n [runtime, id],\n );\n return tapInlineResource(\n ThreadListItemClient({\n runtime: threadListItemRuntime,\n }),\n );\n },\n);\n\nexport const ThreadListClient = resource(\n ({ runtime }: { runtime: ThreadListRuntime }) => {\n const runtimeState = tapSubscribable(runtime);\n\n const main = tapInlineResource(\n ThreadClient({\n runtime: runtime.main,\n }),\n );\n\n const threadItems = tapLookupResources(\n Object.keys(runtimeState.threadItems).map((id) =>\n ThreadListItemClientById({ runtime, id }, { key: id }),\n ),\n );\n\n const state = tapMemo<ThreadListClientState>(() => {\n return {\n mainThreadId: runtimeState.mainThreadId,\n newThreadId: runtimeState.newThread,\n isLoading: runtimeState.isLoading,\n threadIds: runtimeState.threads,\n archivedThreadIds: runtimeState.archivedThreads,\n threadItems: threadItems.state,\n\n main: main.state,\n };\n }, [runtimeState, threadItems.state, main.state]);\n\n const api = tapApi<ThreadListClientApi>({\n getState: () => state,\n\n thread: () => main.api,\n\n item: (threadIdOrOptions) => {\n if (threadIdOrOptions === \"main\") {\n return threadItems.api({ key: state.mainThreadId });\n }\n\n if (\"id\" in threadIdOrOptions) {\n return threadItems.api({ key: threadIdOrOptions.id });\n }\n\n const { index, archived = false } = threadIdOrOptions;\n const id = archived\n ? state.archivedThreadIds[index]!\n : state.threadIds[index]!;\n return threadItems.api({ key: id });\n },\n\n switchToThread: (threadId) => {\n runtime.switchToThread(threadId);\n },\n switchToNewThread: () => {\n runtime.switchToNewThread();\n },\n });\n\n return {\n state,\n api,\n };\n },\n);\n"],"mappings":";AAAA,SAAS,cAAc;AACvB,SAAS,UAAU,mBAAmB,eAAe;AAErD,SAAS,uBAAuB;AAChC,SAAS,4BAA4B;AACrC,SAAS,oBAAoB;AAC7B,SAAS,0BAA0B;AAMnC,IAAM,2BAA2B;AAAA,EAC/B,CAAC,EAAE,SAAS,GAAG,MAAkD;AAC/D,UAAM,wBAAwB;AAAA,MAC5B,MAAM,QAAQ,YAAY,EAAE;AAAA,MAC5B,CAAC,SAAS,EAAE;AAAA,IACd;AACA,WAAO;AAAA,MACL,qBAAqB;AAAA,QACnB,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEO,IAAM,mBAAmB;AAAA,EAC9B,CAAC,EAAE,QAAQ,MAAsC;AAC/C,UAAM,eAAe,gBAAgB,OAAO;AAE5C,UAAM,OAAO;AAAA,MACX,aAAa;AAAA,QACX,SAAS,QAAQ;AAAA,MACnB,CAAC;AAAA,IACH;AAEA,UAAM,cAAc;AAAA,MAClB,OAAO,KAAK,aAAa,WAAW,EAAE;AAAA,QAAI,CAAC,OACzC,yBAAyB,EAAE,SAAS,GAAG,GAAG,EAAE,KAAK,GAAG,CAAC;AAAA,MACvD;AAAA,IACF;AAEA,UAAM,QAAQ,QAA+B,MAAM;AACjD,aAAO;AAAA,QACL,cAAc,aAAa;AAAA,QAC3B,aAAa,aAAa;AAAA,QAC1B,WAAW,aAAa;AAAA,QACxB,WAAW,aAAa;AAAA,QACxB,mBAAmB,aAAa;AAAA,QAChC,aAAa,YAAY;AAAA,QAEzB,MAAM,KAAK;AAAA,MACb;AAAA,IACF,GAAG,CAAC,cAAc,YAAY,OAAO,KAAK,KAAK,CAAC;AAEhD,UAAM,MAAM,OAA4B;AAAA,MACtC,UAAU,MAAM;AAAA,MAEhB,QAAQ,MAAM,KAAK;AAAA,MAEnB,MAAM,CAAC,sBAAsB;AAC3B,YAAI,sBAAsB,QAAQ;AAChC,iBAAO,YAAY,IAAI,EAAE,KAAK,MAAM,aAAa,CAAC;AAAA,QACpD;AAEA,YAAI,QAAQ,mBAAmB;AAC7B,iBAAO,YAAY,IAAI,EAAE,KAAK,kBAAkB,GAAG,CAAC;AAAA,QACtD;AAEA,cAAM,EAAE,OAAO,WAAW,MAAM,IAAI;AACpC,cAAM,KAAK,WACP,MAAM,kBAAkB,KAAK,IAC7B,MAAM,UAAU,KAAK;AACzB,eAAO,YAAY,IAAI,EAAE,KAAK,GAAG,CAAC;AAAA,MACpC;AAAA,MAEA,gBAAgB,CAAC,aAAa;AAC5B,gBAAQ,eAAe,QAAQ;AAAA,MACjC;AAAA,MACA,mBAAmB,MAAM;AACvB,gBAAQ,kBAAkB;AAAA,MAC5B;AAAA,IACF,CAAC;AAED,WAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../src/legacy-runtime/client/ThreadListRuntimeClient.ts"],"sourcesContent":["import { tapApi } from \"../../utils/tap-store\";\nimport { resource, tapInlineResource, tapMemo } from \"@assistant-ui/tap\";\nimport { ThreadListRuntime } from \"../runtime/ThreadListRuntime\";\nimport { tapSubscribable } from \"../util-hooks/tapSubscribable\";\nimport { ThreadListItemClient } from \"./ThreadListItemRuntimeClient\";\nimport { ThreadClient } from \"./ThreadRuntimeClient\";\nimport { tapLookupResources } from \"../../client/util-hooks/tapLookupResources\";\nimport {\n ThreadListClientState,\n ThreadListClientApi,\n} from \"../../client/types/ThreadList\";\n\nconst ThreadListItemClientById = resource(\n ({ runtime, id }: { runtime: ThreadListRuntime; id: string }) => {\n const threadListItemRuntime = tapMemo(\n () => runtime.getItemById(id),\n [runtime, id],\n );\n return tapInlineResource(\n ThreadListItemClient({\n runtime: threadListItemRuntime,\n }),\n );\n },\n);\n\nexport const ThreadListClient = resource(\n ({ runtime }: { runtime: ThreadListRuntime }) => {\n const runtimeState = tapSubscribable(runtime);\n\n const main = tapInlineResource(\n ThreadClient({\n runtime: runtime.main,\n }),\n );\n\n const threadItems = tapLookupResources(\n Object.keys(runtimeState.threadItems).map((id) =>\n ThreadListItemClientById({ runtime, id }, { key: id }),\n ),\n );\n\n const state = tapMemo<ThreadListClientState>(() => {\n return {\n mainThreadId: runtimeState.mainThreadId,\n newThreadId: runtimeState.newThread ?? null,\n isLoading: runtimeState.isLoading,\n threadIds: runtimeState.threads,\n archivedThreadIds: runtimeState.archivedThreads,\n threadItems: threadItems.state,\n\n main: main.state,\n };\n }, [runtimeState, threadItems.state, main.state]);\n\n const api = tapApi<ThreadListClientApi>({\n getState: () => state,\n\n thread: () => main.api,\n\n item: (threadIdOrOptions) => {\n if (threadIdOrOptions === \"main\") {\n return threadItems.api({ key: state.mainThreadId });\n }\n\n if (\"id\" in threadIdOrOptions) {\n return threadItems.api({ key: threadIdOrOptions.id });\n }\n\n const { index, archived = false } = threadIdOrOptions;\n const id = archived\n ? state.archivedThreadIds[index]!\n : state.threadIds[index]!;\n return threadItems.api({ key: id });\n },\n\n switchToThread: (threadId) => {\n runtime.switchToThread(threadId);\n },\n switchToNewThread: () => {\n runtime.switchToNewThread();\n },\n });\n\n return {\n state,\n api,\n };\n },\n);\n"],"mappings":";AAAA,SAAS,cAAc;AACvB,SAAS,UAAU,mBAAmB,eAAe;AAErD,SAAS,uBAAuB;AAChC,SAAS,4BAA4B;AACrC,SAAS,oBAAoB;AAC7B,SAAS,0BAA0B;AAMnC,IAAM,2BAA2B;AAAA,EAC/B,CAAC,EAAE,SAAS,GAAG,MAAkD;AAC/D,UAAM,wBAAwB;AAAA,MAC5B,MAAM,QAAQ,YAAY,EAAE;AAAA,MAC5B,CAAC,SAAS,EAAE;AAAA,IACd;AACA,WAAO;AAAA,MACL,qBAAqB;AAAA,QACnB,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEO,IAAM,mBAAmB;AAAA,EAC9B,CAAC,EAAE,QAAQ,MAAsC;AAC/C,UAAM,eAAe,gBAAgB,OAAO;AAE5C,UAAM,OAAO;AAAA,MACX,aAAa;AAAA,QACX,SAAS,QAAQ;AAAA,MACnB,CAAC;AAAA,IACH;AAEA,UAAM,cAAc;AAAA,MAClB,OAAO,KAAK,aAAa,WAAW,EAAE;AAAA,QAAI,CAAC,OACzC,yBAAyB,EAAE,SAAS,GAAG,GAAG,EAAE,KAAK,GAAG,CAAC;AAAA,MACvD;AAAA,IACF;AAEA,UAAM,QAAQ,QAA+B,MAAM;AACjD,aAAO;AAAA,QACL,cAAc,aAAa;AAAA,QAC3B,aAAa,aAAa,aAAa;AAAA,QACvC,WAAW,aAAa;AAAA,QACxB,WAAW,aAAa;AAAA,QACxB,mBAAmB,aAAa;AAAA,QAChC,aAAa,YAAY;AAAA,QAEzB,MAAM,KAAK;AAAA,MACb;AAAA,IACF,GAAG,CAAC,cAAc,YAAY,OAAO,KAAK,KAAK,CAAC;AAEhD,UAAM,MAAM,OAA4B;AAAA,MACtC,UAAU,MAAM;AAAA,MAEhB,QAAQ,MAAM,KAAK;AAAA,MAEnB,MAAM,CAAC,sBAAsB;AAC3B,YAAI,sBAAsB,QAAQ;AAChC,iBAAO,YAAY,IAAI,EAAE,KAAK,MAAM,aAAa,CAAC;AAAA,QACpD;AAEA,YAAI,QAAQ,mBAAmB;AAC7B,iBAAO,YAAY,IAAI,EAAE,KAAK,kBAAkB,GAAG,CAAC;AAAA,QACtD;AAEA,cAAM,EAAE,OAAO,WAAW,MAAM,IAAI;AACpC,cAAM,KAAK,WACP,MAAM,kBAAkB,KAAK,IAC7B,MAAM,UAAU,KAAK;AACzB,eAAO,YAAY,IAAI,EAAE,KAAK,GAAG,CAAC;AAAA,MACpC;AAAA,MAEA,gBAAgB,CAAC,aAAa;AAC5B,gBAAQ,eAAe,QAAQ;AAAA,MACjC;AAAA,MACA,mBAAmB,MAAM;AACvB,gBAAQ,kBAAkB;AAAA,MAC5B;AAAA,IACF,CAAC;AAED,WAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"BaseComposerRuntimeCore.d.ts","sourceRoot":"","sources":["../../../../src/legacy-runtime/runtime-cores/composer/BaseComposerRuntimeCore.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EAGX,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACzB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAK1E,8BAAsB,uBACpB,SAAQ,gBACR,YAAW,mBAAmB;IAE9B,SAAgB,SAAS,QAAQ;IAEjC,SAAS,CAAC,QAAQ,CAAC,oBAAoB,IAAI,iBAAiB,GAAG,SAAS;IAExE,IAAW,gBAAgB,IAAI,MAAM,CAEpC;IAED,OAAO,CAAC,YAAY,CAA6B;IACjD,IAAW,WAAW,0BAErB;IAED,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE;IAKrD,aAAoB,SAAS,IAAI,OAAO,CAAC;IAEzC,IAAW,OAAO,YAEjB;IAED,OAAO,CAAC,KAAK,CAAM;IAEnB,IAAI,IAAI,WAEP;IAED,OAAO,CAAC,KAAK,CAAuB;IAEpC,IAAI,IAAI,oCAEP;IAED,OAAO,CAAC,UAAU,CAAiB;IAEnC,IAAI,SAAS,cAEZ;IAEM,OAAO,CAAC,KAAK,EAAE,MAAM;IAOrB,OAAO,CAAC,IAAI,EAAE,WAAW;IAOzB,YAAY,CAAC,SAAS,EAAE,SAAS;IAOxC,OAAO,CAAC,wBAAwB;YAMlB,mBAAmB;IAOpB,KAAK;IAkBL,gBAAgB;IAOhB,IAAI;IA4BV,MAAM;IAIb,SAAS,CAAC,QAAQ,CAAC,UAAU,CAC3B,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,UAAU,GAAG,UAAU,CAAC,GACpD,IAAI;IACP,SAAS,CAAC,QAAQ,CAAC,YAAY,IAAI,IAAI;IAEjC,aAAa,CAAC,IAAI,EAAE,IAAI;IAmCxB,gBAAgB,CAAC,YAAY,EAAE,MAAM;IAkB3C,OAAO,CAAC,iBAAiB,CAGrB;IAEJ,SAAS,CAAC,uBAAuB,CAAC,KAAK,EAAE,wBAAwB;IAO1D,WAAW,CAAC,KAAK,EAAE,wBAAwB,EAAE,QAAQ,EAAE,MAAM,IAAI;CAczE"}
1
+ {"version":3,"file":"BaseComposerRuntimeCore.d.ts","sourceRoot":"","sources":["../../../../src/legacy-runtime/runtime-cores/composer/BaseComposerRuntimeCore.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EAGX,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACzB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAK1E,8BAAsB,uBACpB,SAAQ,gBACR,YAAW,mBAAmB;IAE9B,SAAgB,SAAS,QAAQ;IAEjC,SAAS,CAAC,QAAQ,CAAC,oBAAoB,IAAI,iBAAiB,GAAG,SAAS;IAExE,IAAW,gBAAgB,IAAI,MAAM,CAEpC;IAED,OAAO,CAAC,YAAY,CAA6B;IACjD,IAAW,WAAW,0BAErB;IAED,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE;IAKrD,aAAoB,SAAS,IAAI,OAAO,CAAC;IAEzC,IAAW,OAAO,YAEjB;IAED,OAAO,CAAC,KAAK,CAAM;IAEnB,IAAI,IAAI,WAEP;IAED,OAAO,CAAC,KAAK,CAAuB;IAEpC,IAAI,IAAI,oCAEP;IAED,OAAO,CAAC,UAAU,CAAiB;IAEnC,IAAI,SAAS,cAEZ;IAEM,OAAO,CAAC,KAAK,EAAE,MAAM;IAOrB,OAAO,CAAC,IAAI,EAAE,WAAW;IAOzB,YAAY,CAAC,SAAS,EAAE,SAAS;IAOxC,OAAO,CAAC,wBAAwB;YAMlB,mBAAmB;IAOpB,KAAK;IAkBL,gBAAgB;IAOhB,IAAI;IA4BV,MAAM;IAIb,SAAS,CAAC,QAAQ,CAAC,UAAU,CAC3B,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,UAAU,GAAG,UAAU,CAAC,GACpD,IAAI;IACP,SAAS,CAAC,QAAQ,CAAC,YAAY,IAAI,IAAI;IAEjC,aAAa,CAAC,IAAI,EAAE,IAAI;IAkCxB,gBAAgB,CAAC,YAAY,EAAE,MAAM;IAkB3C,OAAO,CAAC,iBAAiB,CAGrB;IAEJ,SAAS,CAAC,uBAAuB,CAAC,KAAK,EAAE,wBAAwB;IAO1D,WAAW,CAAC,KAAK,EAAE,wBAAwB,EAAE,QAAQ,EAAE,MAAM,IAAI;CAczE"}
@@ -110,7 +110,6 @@ var BaseComposerRuntimeCore = class extends BaseSubscribable {
110
110
  ];
111
111
  else {
112
112
  this._attachments = [...this._attachments, a];
113
- this._notifyEventSubscribers("attachment-add");
114
113
  }
115
114
  this._notifySubscribers();
116
115
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/legacy-runtime/runtime-cores/composer/BaseComposerRuntimeCore.tsx"],"sourcesContent":["import {\n Attachment,\n CompleteAttachment,\n PendingAttachment,\n} from \"../../../types/AttachmentTypes\";\nimport { AppendMessage } from \"../../../types\";\nimport { AttachmentAdapter } from \"../adapters/attachment\";\nimport {\n ComposerRuntimeCore,\n ComposerRuntimeEventType,\n} from \"../core/ComposerRuntimeCore\";\nimport { MessageRole, RunConfig } from \"../../../types/AssistantTypes\";\nimport { BaseSubscribable } from \"../remote-thread-list/BaseSubscribable\";\n\nconst isAttachmentComplete = (a: Attachment): a is CompleteAttachment =>\n a.status.type === \"complete\";\n\nexport abstract class BaseComposerRuntimeCore\n extends BaseSubscribable\n implements ComposerRuntimeCore\n{\n public readonly isEditing = true;\n\n protected abstract getAttachmentAdapter(): AttachmentAdapter | undefined;\n\n public get attachmentAccept(): string {\n return this.getAttachmentAdapter()?.accept ?? \"*\";\n }\n\n private _attachments: readonly Attachment[] = [];\n public get attachments() {\n return this._attachments;\n }\n\n protected setAttachments(value: readonly Attachment[]) {\n this._attachments = value;\n this._notifySubscribers();\n }\n\n public abstract get canCancel(): boolean;\n\n public get isEmpty() {\n return !this.text.trim() && !this.attachments.length;\n }\n\n private _text = \"\";\n\n get text() {\n return this._text;\n }\n\n private _role: MessageRole = \"user\";\n\n get role() {\n return this._role;\n }\n\n private _runConfig: RunConfig = {};\n\n get runConfig() {\n return this._runConfig;\n }\n\n public setText(value: string) {\n if (this._text === value) return;\n\n this._text = value;\n this._notifySubscribers();\n }\n\n public setRole(role: MessageRole) {\n if (this._role === role) return;\n\n this._role = role;\n this._notifySubscribers();\n }\n\n public setRunConfig(runConfig: RunConfig) {\n if (this._runConfig === runConfig) return;\n\n this._runConfig = runConfig;\n this._notifySubscribers();\n }\n\n private _emptyTextAndAttachments() {\n this._attachments = [];\n this._text = \"\";\n this._notifySubscribers();\n }\n\n private async _onClearAttachments() {\n const adapter = this.getAttachmentAdapter();\n if (adapter) {\n await Promise.all(this._attachments.map((a) => adapter.remove(a)));\n }\n }\n\n public async reset() {\n if (\n this._attachments.length === 0 &&\n this._text === \"\" &&\n this._role === \"user\" &&\n Object.keys(this._runConfig).length === 0\n ) {\n return;\n }\n\n this._role = \"user\";\n this._runConfig = {};\n\n const task = this._onClearAttachments();\n this._emptyTextAndAttachments();\n await task;\n }\n\n public async clearAttachments() {\n const task = this._onClearAttachments();\n this.setAttachments([]);\n\n await task;\n }\n\n public async send() {\n const adapter = this.getAttachmentAdapter();\n const attachments =\n adapter && this.attachments.length > 0\n ? Promise.all(\n this.attachments.map(async (a) => {\n if (isAttachmentComplete(a)) return a;\n const result = await adapter.send(a);\n return result as CompleteAttachment;\n }),\n )\n : [];\n\n const text = this.text;\n this._emptyTextAndAttachments();\n const message: Omit<AppendMessage, \"parentId\" | \"sourceId\"> = {\n createdAt: new Date(),\n role: this.role,\n content: text ? [{ type: \"text\", text }] : [],\n attachments: await attachments,\n runConfig: this.runConfig,\n metadata: { custom: {} },\n };\n\n this.handleSend(message);\n this._notifyEventSubscribers(\"send\");\n }\n\n public cancel() {\n this.handleCancel();\n }\n\n protected abstract handleSend(\n message: Omit<AppendMessage, \"parentId\" | \"sourceId\">,\n ): void;\n protected abstract handleCancel(): void;\n\n async addAttachment(file: File) {\n const adapter = this.getAttachmentAdapter();\n if (!adapter) throw new Error(\"Attachments are not supported\");\n\n const upsertAttachment = (a: PendingAttachment) => {\n const idx = this._attachments.findIndex(\n (attachment) => attachment.id === a.id,\n );\n if (idx !== -1)\n this._attachments = [\n ...this._attachments.slice(0, idx),\n a,\n ...this._attachments.slice(idx + 1),\n ];\n else {\n this._attachments = [...this._attachments, a];\n this._notifyEventSubscribers(\"attachment-add\");\n }\n\n this._notifySubscribers();\n };\n\n const promiseOrGenerator = adapter.add({ file });\n if (Symbol.asyncIterator in promiseOrGenerator) {\n for await (const r of promiseOrGenerator) {\n upsertAttachment(r);\n }\n } else {\n upsertAttachment(await promiseOrGenerator);\n }\n\n this._notifyEventSubscribers(\"attachment-add\");\n this._notifySubscribers();\n }\n\n async removeAttachment(attachmentId: string) {\n const adapter = this.getAttachmentAdapter();\n if (!adapter) throw new Error(\"Attachments are not supported\");\n\n const index = this._attachments.findIndex((a) => a.id === attachmentId);\n if (index === -1) throw new Error(\"Attachment not found\");\n const attachment = this._attachments[index]!;\n\n await adapter.remove(attachment);\n\n // this._attachments.toSpliced(index, 1); - not yet widely supported\n this._attachments = [\n ...this._attachments.slice(0, index),\n ...this._attachments.slice(index + 1),\n ];\n this._notifySubscribers();\n }\n\n private _eventSubscribers = new Map<\n ComposerRuntimeEventType,\n Set<() => void>\n >();\n\n protected _notifyEventSubscribers(event: ComposerRuntimeEventType) {\n const subscribers = this._eventSubscribers.get(event);\n if (!subscribers) return;\n\n for (const callback of subscribers) callback();\n }\n\n public unstable_on(event: ComposerRuntimeEventType, callback: () => void) {\n const subscribers = this._eventSubscribers.get(event);\n if (!subscribers) {\n this._eventSubscribers.set(event, new Set([callback]));\n } else {\n subscribers.add(callback);\n }\n\n return () => {\n const subscribers = this._eventSubscribers.get(event);\n if (!subscribers) return;\n subscribers.delete(callback);\n };\n }\n}\n"],"mappings":"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","names":["subscribers"]}
1
+ {"version":3,"sources":["../../../../src/legacy-runtime/runtime-cores/composer/BaseComposerRuntimeCore.tsx"],"sourcesContent":["import {\n Attachment,\n CompleteAttachment,\n PendingAttachment,\n} from \"../../../types/AttachmentTypes\";\nimport { AppendMessage } from \"../../../types\";\nimport { AttachmentAdapter } from \"../adapters/attachment\";\nimport {\n ComposerRuntimeCore,\n ComposerRuntimeEventType,\n} from \"../core/ComposerRuntimeCore\";\nimport { MessageRole, RunConfig } from \"../../../types/AssistantTypes\";\nimport { BaseSubscribable } from \"../remote-thread-list/BaseSubscribable\";\n\nconst isAttachmentComplete = (a: Attachment): a is CompleteAttachment =>\n a.status.type === \"complete\";\n\nexport abstract class BaseComposerRuntimeCore\n extends BaseSubscribable\n implements ComposerRuntimeCore\n{\n public readonly isEditing = true;\n\n protected abstract getAttachmentAdapter(): AttachmentAdapter | undefined;\n\n public get attachmentAccept(): string {\n return this.getAttachmentAdapter()?.accept ?? \"*\";\n }\n\n private _attachments: readonly Attachment[] = [];\n public get attachments() {\n return this._attachments;\n }\n\n protected setAttachments(value: readonly Attachment[]) {\n this._attachments = value;\n this._notifySubscribers();\n }\n\n public abstract get canCancel(): boolean;\n\n public get isEmpty() {\n return !this.text.trim() && !this.attachments.length;\n }\n\n private _text = \"\";\n\n get text() {\n return this._text;\n }\n\n private _role: MessageRole = \"user\";\n\n get role() {\n return this._role;\n }\n\n private _runConfig: RunConfig = {};\n\n get runConfig() {\n return this._runConfig;\n }\n\n public setText(value: string) {\n if (this._text === value) return;\n\n this._text = value;\n this._notifySubscribers();\n }\n\n public setRole(role: MessageRole) {\n if (this._role === role) return;\n\n this._role = role;\n this._notifySubscribers();\n }\n\n public setRunConfig(runConfig: RunConfig) {\n if (this._runConfig === runConfig) return;\n\n this._runConfig = runConfig;\n this._notifySubscribers();\n }\n\n private _emptyTextAndAttachments() {\n this._attachments = [];\n this._text = \"\";\n this._notifySubscribers();\n }\n\n private async _onClearAttachments() {\n const adapter = this.getAttachmentAdapter();\n if (adapter) {\n await Promise.all(this._attachments.map((a) => adapter.remove(a)));\n }\n }\n\n public async reset() {\n if (\n this._attachments.length === 0 &&\n this._text === \"\" &&\n this._role === \"user\" &&\n Object.keys(this._runConfig).length === 0\n ) {\n return;\n }\n\n this._role = \"user\";\n this._runConfig = {};\n\n const task = this._onClearAttachments();\n this._emptyTextAndAttachments();\n await task;\n }\n\n public async clearAttachments() {\n const task = this._onClearAttachments();\n this.setAttachments([]);\n\n await task;\n }\n\n public async send() {\n const adapter = this.getAttachmentAdapter();\n const attachments =\n adapter && this.attachments.length > 0\n ? Promise.all(\n this.attachments.map(async (a) => {\n if (isAttachmentComplete(a)) return a;\n const result = await adapter.send(a);\n return result as CompleteAttachment;\n }),\n )\n : [];\n\n const text = this.text;\n this._emptyTextAndAttachments();\n const message: Omit<AppendMessage, \"parentId\" | \"sourceId\"> = {\n createdAt: new Date(),\n role: this.role,\n content: text ? [{ type: \"text\", text }] : [],\n attachments: await attachments,\n runConfig: this.runConfig,\n metadata: { custom: {} },\n };\n\n this.handleSend(message);\n this._notifyEventSubscribers(\"send\");\n }\n\n public cancel() {\n this.handleCancel();\n }\n\n protected abstract handleSend(\n message: Omit<AppendMessage, \"parentId\" | \"sourceId\">,\n ): void;\n protected abstract handleCancel(): void;\n\n async addAttachment(file: File) {\n const adapter = this.getAttachmentAdapter();\n if (!adapter) throw new Error(\"Attachments are not supported\");\n\n const upsertAttachment = (a: PendingAttachment) => {\n const idx = this._attachments.findIndex(\n (attachment) => attachment.id === a.id,\n );\n if (idx !== -1)\n this._attachments = [\n ...this._attachments.slice(0, idx),\n a,\n ...this._attachments.slice(idx + 1),\n ];\n else {\n this._attachments = [...this._attachments, a];\n }\n\n this._notifySubscribers();\n };\n\n const promiseOrGenerator = adapter.add({ file });\n if (Symbol.asyncIterator in promiseOrGenerator) {\n for await (const r of promiseOrGenerator) {\n upsertAttachment(r);\n }\n } else {\n upsertAttachment(await promiseOrGenerator);\n }\n\n this._notifyEventSubscribers(\"attachment-add\");\n this._notifySubscribers();\n }\n\n async removeAttachment(attachmentId: string) {\n const adapter = this.getAttachmentAdapter();\n if (!adapter) throw new Error(\"Attachments are not supported\");\n\n const index = this._attachments.findIndex((a) => a.id === attachmentId);\n if (index === -1) throw new Error(\"Attachment not found\");\n const attachment = this._attachments[index]!;\n\n await adapter.remove(attachment);\n\n // this._attachments.toSpliced(index, 1); - not yet widely supported\n this._attachments = [\n ...this._attachments.slice(0, index),\n ...this._attachments.slice(index + 1),\n ];\n this._notifySubscribers();\n }\n\n private _eventSubscribers = new Map<\n ComposerRuntimeEventType,\n Set<() => void>\n >();\n\n protected _notifyEventSubscribers(event: ComposerRuntimeEventType) {\n const subscribers = this._eventSubscribers.get(event);\n if (!subscribers) return;\n\n for (const callback of subscribers) callback();\n }\n\n public unstable_on(event: ComposerRuntimeEventType, callback: () => void) {\n const subscribers = this._eventSubscribers.get(event);\n if (!subscribers) {\n this._eventSubscribers.set(event, new Set([callback]));\n } else {\n subscribers.add(callback);\n }\n\n return () => {\n const subscribers = this._eventSubscribers.get(event);\n if (!subscribers) return;\n subscribers.delete(callback);\n };\n }\n}\n"],"mappings":"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","names":["subscribers"]}
@@ -1,18 +1,19 @@
1
- export type EventSource<T extends keyof AssistantEvents = keyof AssistantEvents> = T extends `${infer Source}.${string}` ? Source : never;
1
+ export type EventSource<T extends AssistantEvent = AssistantEvent> = T extends `${infer Source}.${string}` ? Source : never;
2
2
  type ScopeConfig = {
3
3
  composer: "thread" | "message";
4
4
  thread: never;
5
5
  "thread-list-item": never;
6
6
  };
7
- export type SourceByScope<TScope extends AssistantEventScope<keyof AssistantEvents>> = (TScope extends "*" ? EventSource : never) | (TScope extends keyof ScopeConfig ? TScope : never) | {
7
+ export type SourceByScope<TScope extends AssistantEventScope<AssistantEvent>> = (TScope extends "*" ? EventSource : never) | (TScope extends keyof ScopeConfig ? TScope : never) | {
8
8
  [K in keyof ScopeConfig]: TScope extends ScopeConfig[K] ? K : never;
9
9
  }[keyof ScopeConfig];
10
- export type AssistantEventScope<TEvent extends keyof AssistantEvents> = "*" | EventSource<TEvent> | ScopeConfig[EventSource<TEvent>];
11
- export type AssistantEventSelector<TEvent extends keyof AssistantEvents> = TEvent | {
10
+ export type AssistantEventScope<TEvent extends AssistantEvent> = "*" | EventSource<TEvent> | ScopeConfig[EventSource<TEvent>];
11
+ export type AssistantEventSelector<TEvent extends AssistantEvent> = TEvent | {
12
12
  scope: AssistantEventScope<TEvent>;
13
13
  event: TEvent;
14
14
  };
15
- export type AssistantEvents = {
15
+ export type AssistantEvent = keyof AssistantEventMap;
16
+ export type AssistantEventMap = {
16
17
  "thread.run-start": {
17
18
  threadId: string;
18
19
  };
@@ -39,11 +40,18 @@ export type AssistantEvents = {
39
40
  "thread-list-item.switched-away": {
40
41
  threadId: string;
41
42
  };
43
+ "*": {
44
+ [K in Exclude<keyof AssistantEventMap, "*">]: {
45
+ event: K;
46
+ payload: AssistantEventMap[K];
47
+ };
48
+ }[Exclude<keyof AssistantEventMap, "*">];
42
49
  };
43
- export declare const normalizeEventSelector: <TEvent extends keyof AssistantEvents>(selector: AssistantEventSelector<TEvent>) => {
50
+ export declare const normalizeEventSelector: <TEvent extends AssistantEvent>(selector: AssistantEventSelector<TEvent>) => {
44
51
  scope: AssistantEventScope<TEvent>;
45
52
  event: TEvent;
46
53
  };
47
- export declare const checkEventScope: <TEvent extends keyof AssistantEvents, TExpectedScope extends AssistantEventScope<keyof AssistantEvents>>(expectedScope: TExpectedScope, scope: AssistantEventScope<TEvent>, _event: TEvent) => _event is Extract<TEvent, `${SourceByScope<TExpectedScope>}.${string}`>;
54
+ export declare const checkEventScope: <TEvent extends AssistantEvent, TExpectedScope extends AssistantEventScope<AssistantEvent>>(expectedScope: TExpectedScope, scope: AssistantEventScope<TEvent>, _event: TEvent) => _event is Extract<TEvent, `${SourceByScope<TExpectedScope>}.${string}`>;
55
+ export type AssistantEventCallback<TEvent extends AssistantEvent> = (payload: AssistantEventMap[TEvent]) => void;
48
56
  export {};
49
57
  //# sourceMappingURL=EventTypes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EventTypes.d.ts","sourceRoot":"","sources":["../../src/types/EventTypes.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,CACrB,CAAC,SAAS,MAAM,eAAe,GAAG,MAAM,eAAe,IACrD,CAAC,SAAS,GAAG,MAAM,MAAM,IAAI,MAAM,EAAE,GAAG,MAAM,GAAG,KAAK,CAAC;AAE3D,KAAK,WAAW,GAAG;IACjB,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC/B,MAAM,EAAE,KAAK,CAAC;IACd,kBAAkB,EAAE,KAAK,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,aAAa,CACvB,MAAM,SAAS,mBAAmB,CAAC,MAAM,eAAe,CAAC,IAEvD,CAAC,MAAM,SAAS,GAAG,GAAG,WAAW,GAAG,KAAK,CAAC,GAC1C,CAAC,MAAM,SAAS,MAAM,WAAW,GAAG,MAAM,GAAG,KAAK,CAAC,GACnD;KACG,CAAC,IAAI,MAAM,WAAW,GAAG,MAAM,SAAS,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;CACpE,CAAC,MAAM,WAAW,CAAC,CAAC;AAEzB,MAAM,MAAM,mBAAmB,CAAC,MAAM,SAAS,MAAM,eAAe,IAChE,GAAG,GACH,WAAW,CAAC,MAAM,CAAC,GACnB,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;AAErC,MAAM,MAAM,sBAAsB,CAAC,MAAM,SAAS,MAAM,eAAe,IACnE,MAAM,GACN;IACE,KAAK,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEN,MAAM,MAAM,eAAe,GAAG;IAE5B,kBAAkB,EAAE;QAClB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,gBAAgB,EAAE;QAChB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,mBAAmB,EAAE;QACnB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,6BAA6B,EAAE;QAC7B,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IAGF,eAAe,EAAE;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,yBAAyB,EAAE;QACzB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IAGF,8BAA8B,EAAE;QAC9B,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,gCAAgC,EAAE;QAChC,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,MAAM,SAAS,MAAM,eAAe,EACzE,UAAU,sBAAsB,CAAC,MAAM,CAAC;;;CAczC,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,MAAM,SAAS,MAAM,eAAe,EACpC,cAAc,SAAS,mBAAmB,CAAC,MAAM,eAAe,CAAC,EAEjE,eAAe,cAAc,EAC7B,OAAO,mBAAmB,CAAC,MAAM,CAAC,EAClC,QAAQ,MAAM,KACb,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,GAAG,aAAa,CAAC,cAAc,CAAC,IAAI,MAAM,EAAE,CAExE,CAAC"}
1
+ {"version":3,"file":"EventTypes.d.ts","sourceRoot":"","sources":["../../src/types/EventTypes.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,IAC/D,CAAC,SAAS,GAAG,MAAM,MAAM,IAAI,MAAM,EAAE,GAAG,MAAM,GAAG,KAAK,CAAC;AAEzD,KAAK,WAAW,GAAG;IACjB,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC/B,MAAM,EAAE,KAAK,CAAC;IACd,kBAAkB,EAAE,KAAK,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,aAAa,CAAC,MAAM,SAAS,mBAAmB,CAAC,cAAc,CAAC,IACxE,CAAC,MAAM,SAAS,GAAG,GAAG,WAAW,GAAG,KAAK,CAAC,GAC1C,CAAC,MAAM,SAAS,MAAM,WAAW,GAAG,MAAM,GAAG,KAAK,CAAC,GACnD;KACG,CAAC,IAAI,MAAM,WAAW,GAAG,MAAM,SAAS,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;CACpE,CAAC,MAAM,WAAW,CAAC,CAAC;AAEzB,MAAM,MAAM,mBAAmB,CAAC,MAAM,SAAS,cAAc,IACzD,GAAG,GACH,WAAW,CAAC,MAAM,CAAC,GACnB,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;AAErC,MAAM,MAAM,sBAAsB,CAAC,MAAM,SAAS,cAAc,IAC5D,MAAM,GACN;IACE,KAAK,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEN,MAAM,MAAM,cAAc,GAAG,MAAM,iBAAiB,CAAC;AAErD,MAAM,MAAM,iBAAiB,GAAG;IAE9B,kBAAkB,EAAE;QAClB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,gBAAgB,EAAE;QAChB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,mBAAmB,EAAE;QACnB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,6BAA6B,EAAE;QAC7B,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IAGF,eAAe,EAAE;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,yBAAyB,EAAE;QACzB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IAGF,8BAA8B,EAAE;QAC9B,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,gCAAgC,EAAE;QAChC,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IAGF,GAAG,EAAE;SACF,CAAC,IAAI,OAAO,CAAC,MAAM,iBAAiB,EAAE,GAAG,CAAC,GAAG;YAC5C,KAAK,EAAE,CAAC,CAAC;YACT,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;SAC/B;KACF,CAAC,OAAO,CAAC,MAAM,iBAAiB,EAAE,GAAG,CAAC,CAAC,CAAC;CAC1C,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,MAAM,SAAS,cAAc,EAClE,UAAU,sBAAsB,CAAC,MAAM,CAAC;;;CAczC,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,MAAM,SAAS,cAAc,EAC7B,cAAc,SAAS,mBAAmB,CAAC,cAAc,CAAC,EAE1D,eAAe,cAAc,EAC7B,OAAO,mBAAmB,CAAC,MAAM,CAAC,EAClC,QAAQ,MAAM,KACb,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,GAAG,aAAa,CAAC,cAAc,CAAC,IAAI,MAAM,EAAE,CAExE,CAAC;AAEF,MAAM,MAAM,sBAAsB,CAAC,MAAM,SAAS,cAAc,IAAI,CAClE,OAAO,EAAE,iBAAiB,CAAC,MAAM,CAAC,KAC/B,IAAI,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/types/EventTypes.ts"],"sourcesContent":["export type EventSource<\n T extends keyof AssistantEvents = keyof AssistantEvents,\n> = T extends `${infer Source}.${string}` ? Source : never;\n\ntype ScopeConfig = {\n composer: \"thread\" | \"message\";\n thread: never;\n \"thread-list-item\": never;\n};\n\nexport type SourceByScope<\n TScope extends AssistantEventScope<keyof AssistantEvents>,\n> =\n | (TScope extends \"*\" ? EventSource : never)\n | (TScope extends keyof ScopeConfig ? TScope : never)\n | {\n [K in keyof ScopeConfig]: TScope extends ScopeConfig[K] ? K : never;\n }[keyof ScopeConfig];\n\nexport type AssistantEventScope<TEvent extends keyof AssistantEvents> =\n | \"*\"\n | EventSource<TEvent>\n | ScopeConfig[EventSource<TEvent>];\n\nexport type AssistantEventSelector<TEvent extends keyof AssistantEvents> =\n | TEvent\n | {\n scope: AssistantEventScope<TEvent>;\n event: TEvent;\n };\n\nexport type AssistantEvents = {\n // Thread events (from ThreadRuntimeEventType)\n \"thread.run-start\": {\n threadId: string;\n };\n \"thread.run-end\": {\n threadId: string;\n };\n \"thread.initialize\": {\n threadId: string;\n };\n \"thread.model-context-update\": {\n threadId: string;\n };\n\n // Composer events (from ComposerRuntimeEventType)\n \"composer.send\": {\n threadId: string;\n messageId?: string;\n };\n \"composer.attachment-add\": {\n threadId: string;\n messageId?: string;\n };\n\n // Thread list item events (from ThreadListItemEventType)\n \"thread-list-item.switched-to\": {\n threadId: string;\n };\n \"thread-list-item.switched-away\": {\n threadId: string;\n };\n};\n\nexport const normalizeEventSelector = <TEvent extends keyof AssistantEvents>(\n selector: AssistantEventSelector<TEvent>,\n) => {\n if (typeof selector === \"string\") {\n const source = selector.split(\".\")[0] as AssistantEventScope<TEvent>;\n return {\n scope: source,\n event: selector,\n };\n }\n\n return {\n scope: selector.scope,\n event: selector.event,\n };\n};\n\nexport const checkEventScope = <\n TEvent extends keyof AssistantEvents,\n TExpectedScope extends AssistantEventScope<keyof AssistantEvents>,\n>(\n expectedScope: TExpectedScope,\n scope: AssistantEventScope<TEvent>,\n _event: TEvent,\n): _event is Extract<TEvent, `${SourceByScope<TExpectedScope>}.${string}`> => {\n return scope === expectedScope;\n};\n"],"mappings":";AAiEO,IAAM,yBAAyB,CACpC,aACG;AACH,MAAI,OAAO,aAAa,UAAU;AAChC,UAAM,SAAS,SAAS,MAAM,GAAG,EAAE,CAAC;AACpC,WAAO;AAAA,MACL,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AAAA,IACL,OAAO,SAAS;AAAA,IAChB,OAAO,SAAS;AAAA,EAClB;AACF;AAEO,IAAM,kBAAkB,CAI7B,eACA,OACA,WAC4E;AAC5E,SAAO,UAAU;AACnB;","names":[]}
1
+ {"version":3,"sources":["../../src/types/EventTypes.ts"],"sourcesContent":["export type EventSource<T extends AssistantEvent = AssistantEvent> =\n T extends `${infer Source}.${string}` ? Source : never;\n\ntype ScopeConfig = {\n composer: \"thread\" | \"message\";\n thread: never;\n \"thread-list-item\": never;\n};\n\nexport type SourceByScope<TScope extends AssistantEventScope<AssistantEvent>> =\n | (TScope extends \"*\" ? EventSource : never)\n | (TScope extends keyof ScopeConfig ? TScope : never)\n | {\n [K in keyof ScopeConfig]: TScope extends ScopeConfig[K] ? K : never;\n }[keyof ScopeConfig];\n\nexport type AssistantEventScope<TEvent extends AssistantEvent> =\n | \"*\"\n | EventSource<TEvent>\n | ScopeConfig[EventSource<TEvent>];\n\nexport type AssistantEventSelector<TEvent extends AssistantEvent> =\n | TEvent\n | {\n scope: AssistantEventScope<TEvent>;\n event: TEvent;\n };\n\nexport type AssistantEvent = keyof AssistantEventMap;\n\nexport type AssistantEventMap = {\n // Thread events (from ThreadRuntimeEventType)\n \"thread.run-start\": {\n threadId: string;\n };\n \"thread.run-end\": {\n threadId: string;\n };\n \"thread.initialize\": {\n threadId: string;\n };\n \"thread.model-context-update\": {\n threadId: string;\n };\n\n // Composer events (from ComposerRuntimeEventType)\n \"composer.send\": {\n threadId: string;\n messageId?: string;\n };\n \"composer.attachment-add\": {\n threadId: string;\n messageId?: string;\n };\n\n // Thread list item events (from ThreadListItemEventType)\n \"thread-list-item.switched-to\": {\n threadId: string;\n };\n \"thread-list-item.switched-away\": {\n threadId: string;\n };\n\n // Catch-all\n \"*\": {\n [K in Exclude<keyof AssistantEventMap, \"*\">]: {\n event: K;\n payload: AssistantEventMap[K];\n };\n }[Exclude<keyof AssistantEventMap, \"*\">];\n};\n\nexport const normalizeEventSelector = <TEvent extends AssistantEvent>(\n selector: AssistantEventSelector<TEvent>,\n) => {\n if (typeof selector === \"string\") {\n const source = selector.split(\".\")[0] as AssistantEventScope<TEvent>;\n return {\n scope: source,\n event: selector,\n };\n }\n\n return {\n scope: selector.scope,\n event: selector.event,\n };\n};\n\nexport const checkEventScope = <\n TEvent extends AssistantEvent,\n TExpectedScope extends AssistantEventScope<AssistantEvent>,\n>(\n expectedScope: TExpectedScope,\n scope: AssistantEventScope<TEvent>,\n _event: TEvent,\n): _event is Extract<TEvent, `${SourceByScope<TExpectedScope>}.${string}`> => {\n return scope === expectedScope;\n};\n\nexport type AssistantEventCallback<TEvent extends AssistantEvent> = (\n payload: AssistantEventMap[TEvent],\n) => void;\n"],"mappings":";AAwEO,IAAM,yBAAyB,CACpC,aACG;AACH,MAAI,OAAO,aAAa,UAAU;AAChC,UAAM,SAAS,SAAS,MAAM,GAAG,EAAE,CAAC;AACpC,WAAO;AAAA,MACL,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AAAA,IACL,OAAO,SAAS;AAAA,IAChB,OAAO,SAAS;AAAA,EAClB;AACF;AAEO,IAAM,kBAAkB,CAI7B,eACA,OACA,WAC4E;AAC5E,SAAO,UAAU;AACnB;","names":[]}
@@ -3,5 +3,5 @@ export type { AppendMessage, TextMessagePart, ReasoningMessagePart, SourceMessag
3
3
  export type { EmptyMessagePartComponent, EmptyMessagePartProps, TextMessagePartComponent, TextMessagePartProps, ReasoningMessagePartComponent, ReasoningMessagePartProps, SourceMessagePartComponent, SourceMessagePartProps, ImageMessagePartComponent, ImageMessagePartProps, FileMessagePartComponent, FileMessagePartProps, Unstable_AudioMessagePartComponent, Unstable_AudioMessagePartProps, ToolCallMessagePartComponent, ToolCallMessagePartProps, } from "./MessagePartComponentTypes";
4
4
  export type { ThreadListItemStatus } from "../legacy-runtime/runtime/ThreadListItemRuntime";
5
5
  export type { Unsubscribe } from "./Unsubscribe";
6
- export type { AssistantEventScope, AssistantEventSelector, AssistantEvents, } from "./EventTypes";
6
+ export type { AssistantEventScope, AssistantEventSelector, AssistantEvent, AssistantEventMap, AssistantEventCallback, } from "./EventTypes";
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,aAAa,EACb,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,yBAAyB,EACzB,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,yBAAyB,EAGzB,qBAAqB,EACrB,0BAA0B,EAC1B,mBAAmB,EACnB,sBAAsB,EACtB,iBAAiB,EACjB,aAAa,GACd,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EACV,yBAAyB,EACzB,qBAAqB,EACrB,wBAAwB,EACxB,oBAAoB,EACpB,6BAA6B,EAC7B,yBAAyB,EACzB,0BAA0B,EAC1B,sBAAsB,EACtB,yBAAyB,EACzB,qBAAqB,EACrB,wBAAwB,EACxB,oBAAoB,EACpB,kCAAkC,EAClC,8BAA8B,EAC9B,4BAA4B,EAC5B,wBAAwB,GACzB,MAAM,6BAA6B,CAAC;AAGrC,YAAY,EAAE,oBAAoB,EAAE,MAAM,iDAAiD,CAAC;AAE5F,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,YAAY,EACV,mBAAmB,EACnB,sBAAsB,EACtB,eAAe,GAChB,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,aAAa,EACb,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,yBAAyB,EACzB,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,yBAAyB,EAGzB,qBAAqB,EACrB,0BAA0B,EAC1B,mBAAmB,EACnB,sBAAsB,EACtB,iBAAiB,EACjB,aAAa,GACd,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EACV,yBAAyB,EACzB,qBAAqB,EACrB,wBAAwB,EACxB,oBAAoB,EACpB,6BAA6B,EAC7B,yBAAyB,EACzB,0BAA0B,EAC1B,sBAAsB,EACtB,yBAAyB,EACzB,qBAAqB,EACrB,wBAAwB,EACxB,oBAAoB,EACpB,kCAAkC,EAClC,8BAA8B,EAC9B,4BAA4B,EAC5B,wBAAwB,GACzB,MAAM,6BAA6B,CAAC;AAGrC,YAAY,EAAE,oBAAoB,EAAE,MAAM,iDAAiD,CAAC;AAE5F,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,YAAY,EACV,mBAAmB,EACnB,sBAAsB,EACtB,cAAc,EACd,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,cAAc,CAAC"}
package/package.json CHANGED
@@ -28,7 +28,7 @@
28
28
  "conversational-ui",
29
29
  "conversational-ai"
30
30
  ],
31
- "version": "0.11.4",
31
+ "version": "0.11.5",
32
32
  "license": "MIT",
33
33
  "type": "module",
34
34
  "exports": {
@@ -13,8 +13,8 @@ import { asStore, Store, tapApi } from "../utils/tap-store";
13
13
  import { useResource } from "@assistant-ui/tap/react";
14
14
  import { useMemo } from "react";
15
15
  import {
16
- AssistantEventSelector,
17
- AssistantEvents,
16
+ AssistantEvent,
17
+ AssistantEventCallback,
18
18
  checkEventScope,
19
19
  normalizeEventSelector,
20
20
  } from "../types/EventTypes";
@@ -38,9 +38,9 @@ type AssistantClientApi = {
38
38
  readonly threads: ThreadListClientApi;
39
39
  readonly toolUIs: ToolUIApi;
40
40
 
41
- on<TEvent extends keyof AssistantEvents>(
42
- event: keyof AssistantEvents,
43
- callback: (e: AssistantEvents[TEvent]) => void,
41
+ on<TEvent extends AssistantEvent>(
42
+ event: TEvent,
43
+ callback: AssistantEventCallback<TEvent>,
44
44
  ): Unsubscribe;
45
45
 
46
46
  registerModelContextProvider(provider: ModelContextProvider): Unsubscribe;
@@ -124,10 +124,7 @@ const getClientFromStore = (client: Store<{ api: AssistantClientApi }>) => {
124
124
  __internal_getRuntime() {
125
125
  return client.getState().api.__internal_getRuntime();
126
126
  },
127
- on<TEvent extends keyof AssistantEvents>(
128
- selector: AssistantEventSelector<TEvent>,
129
- callback: (e: AssistantEvents[TEvent]) => void,
130
- ): Unsubscribe {
127
+ on(selector, callback) {
131
128
  const { event, scope } = normalizeEventSelector(selector);
132
129
  if (scope === "*") return client.getState().api.on(event, callback);
133
130
 
@@ -6,7 +6,7 @@ import { ThreadClientApi, ThreadClientState } from "./Thread";
6
6
 
7
7
  export type ThreadListClientState = {
8
8
  readonly mainThreadId: string;
9
- readonly newThreadId: string | undefined;
9
+ readonly newThreadId: string | null;
10
10
  readonly isLoading: boolean;
11
11
  readonly threadIds: readonly string[];
12
12
  readonly archivedThreadIds: readonly string[];
@@ -7,8 +7,6 @@ import {
7
7
  useAssistantApi,
8
8
  createAssistantApiField,
9
9
  } from "../react/AssistantApiContext";
10
- import { AssistantEvents, AssistantEventSelector } from "../../types";
11
- import { Unsubscribe } from "@assistant-ui/tap";
12
10
  import {
13
11
  checkEventScope,
14
12
  normalizeEventSelector,
@@ -33,10 +31,7 @@ export const MessageByIndexProvider: FC<
33
31
  query: {},
34
32
  get: () => getMessage().composer,
35
33
  }),
36
- on<TEvent extends keyof AssistantEvents>(
37
- selector: AssistantEventSelector<TEvent>,
38
- callback: (e: AssistantEvents[TEvent]) => void,
39
- ): Unsubscribe {
34
+ on(selector, callback) {
40
35
  const { event, scope } = normalizeEventSelector(selector);
41
36
  if (
42
37
  !checkEventScope("composer", scope, event) &&
@@ -7,8 +7,6 @@ import {
7
7
  useAssistantApi,
8
8
  createAssistantApiField,
9
9
  } from "../react/AssistantApiContext";
10
- import { AssistantEventSelector, AssistantEvents } from "../../types";
11
- import { Unsubscribe } from "@assistant-ui/tap";
12
10
  import {
13
11
  checkEventScope,
14
12
  normalizeEventSelector,
@@ -30,14 +28,12 @@ export const ThreadListItemByIndexProvider: FC<
30
28
  query: { type: "index", index, archived },
31
29
  get: () => getItem(),
32
30
  }),
33
- on<TEvent extends keyof AssistantEvents>(
34
- selector: AssistantEventSelector<TEvent>,
35
- callback: (e: AssistantEvents[TEvent]) => void,
36
- ): Unsubscribe {
31
+ on(selector, callback) {
37
32
  const { event, scope } = normalizeEventSelector(selector);
38
- if (scope !== "thread-list-item") return api.on(selector, callback);
33
+ if (!checkEventScope("thread-list-item", scope, event))
34
+ return api.on(selector, callback);
39
35
 
40
- return api.on({ scope: "*", event }, (e: AssistantEvents[TEvent]) => {
36
+ return api.on({ scope: "*", event }, (e) => {
41
37
  if (e.threadId === getItem().getState().id) {
42
38
  callback(e);
43
39
  }
@@ -64,15 +60,12 @@ export const ThreadListItemByIdProvider: FC<
64
60
  query: { type: "id", id },
65
61
  get: () => getItem(),
66
62
  }),
67
- on<TEvent extends keyof AssistantEvents>(
68
- selector: AssistantEventSelector<TEvent>,
69
- callback: (e: AssistantEvents[TEvent]) => void,
70
- ): Unsubscribe {
63
+ on(selector, callback) {
71
64
  const { event, scope } = normalizeEventSelector(selector);
72
65
  if (!checkEventScope("thread-list-item", scope, event))
73
66
  return api.on(selector, callback);
74
67
 
75
- return api.on({ scope: "*", event }, (e: AssistantEvents[TEvent]) => {
68
+ return api.on({ scope: "*", event }, (e) => {
76
69
  if (e.threadId !== getItem().getState().id) return;
77
70
  callback(e);
78
71
  });
@@ -34,8 +34,9 @@ import { Unsubscribe } from "@assistant-ui/tap";
34
34
  import { ModelContextProvider } from "../../model-context";
35
35
  import { AssistantRuntime } from "../../legacy-runtime/runtime/AssistantRuntime";
36
36
  import {
37
+ AssistantEvent,
38
+ AssistantEventCallback,
37
39
  AssistantEventSelector,
38
- AssistantEvents,
39
40
  normalizeEventSelector,
40
41
  } from "../../types/EventTypes";
41
42
  import {
@@ -115,9 +116,9 @@ export type AssistantApi = {
115
116
  subscribe(listener: () => void): Unsubscribe;
116
117
  flushSync(): void;
117
118
 
118
- on<TEvent extends keyof AssistantEvents>(
119
+ on<TEvent extends AssistantEvent>(
119
120
  event: AssistantEventSelector<TEvent>,
120
- callback: (e: AssistantEvents[TEvent]) => void,
121
+ callback: AssistantEventCallback<TEvent>,
121
122
  ): Unsubscribe;
122
123
 
123
124
  // temp
@@ -1,14 +1,15 @@
1
1
  import { useEffect, useRef } from "react";
2
2
  import { useAssistantApi } from "../../react/AssistantApiContext";
3
3
  import {
4
+ AssistantEvent,
5
+ AssistantEventCallback,
4
6
  AssistantEventSelector,
5
- AssistantEvents,
6
7
  normalizeEventSelector,
7
8
  } from "../../../types/EventTypes";
8
9
 
9
- export const useAssistantEvent = <TEvent extends keyof AssistantEvents>(
10
+ export const useAssistantEvent = <TEvent extends AssistantEvent>(
10
11
  selector: AssistantEventSelector<TEvent>,
11
- callback: (e: AssistantEvents[TEvent]) => void,
12
+ callback: AssistantEventCallback<TEvent>,
12
13
  ) => {
13
14
  const api = useAssistantApi();
14
15
  const callbackRef = useRef(callback);
@@ -1,30 +1,41 @@
1
1
  import { resource, tapMemo } from "@assistant-ui/tap";
2
- import { AssistantEvents, Unsubscribe } from "../../types";
3
-
4
- type EventCallback<TEvent extends keyof AssistantEvents> = (
5
- payload: AssistantEvents[TEvent],
6
- ) => void;
2
+ import { Unsubscribe } from "../../types/Unsubscribe";
3
+ import {
4
+ AssistantEventMap,
5
+ AssistantEvent,
6
+ AssistantEventCallback,
7
+ } from "../../types/EventTypes";
7
8
 
8
9
  export type EventManager = {
9
- on<TEvent extends keyof AssistantEvents>(
10
+ on<TEvent extends AssistantEvent>(
10
11
  event: TEvent,
11
- callback: EventCallback<TEvent>,
12
+ callback: AssistantEventCallback<TEvent>,
12
13
  ): Unsubscribe;
13
- emit<TEvent extends keyof AssistantEvents>(
14
+ emit<TEvent extends Exclude<AssistantEvent, "*">>(
14
15
  event: TEvent,
15
- payload: AssistantEvents[TEvent],
16
+ payload: AssistantEventMap[TEvent],
17
+ ): void;
18
+ };
19
+
20
+ type ListenerMap = Omit<
21
+ Map<AssistantEvent, Set<AssistantEventCallback<AssistantEvent>>>,
22
+ "get" | "set"
23
+ > & {
24
+ get<TEvent extends AssistantEvent>(
25
+ event: TEvent,
26
+ ): Set<AssistantEventCallback<TEvent>> | undefined;
27
+ set<TEvent extends AssistantEvent>(
28
+ event: TEvent,
29
+ value: Set<AssistantEventCallback<TEvent>>,
16
30
  ): void;
17
31
  };
18
32
 
19
33
  export const EventManager = resource(() => {
20
34
  const events = tapMemo(() => {
21
- const listeners = new Map<string, Set<EventCallback<any>>>();
35
+ const listeners: ListenerMap = new Map();
22
36
 
23
37
  return {
24
- on: <TEvent extends keyof AssistantEvents>(
25
- event: TEvent,
26
- callback: EventCallback<TEvent>,
27
- ): Unsubscribe => {
38
+ on: (event, callback) => {
28
39
  if (!listeners.has(event)) {
29
40
  listeners.set(event, new Set());
30
41
  }
@@ -40,14 +51,26 @@ export const EventManager = resource(() => {
40
51
  };
41
52
  },
42
53
 
43
- emit: (event: keyof AssistantEvents, payload: any) => {
54
+ emit: (event, payload) => {
44
55
  const eventListeners = listeners.get(event);
45
- if (!eventListeners) return;
56
+ const wildcardListeners = listeners.get("*");
57
+
58
+ if (!eventListeners && !wildcardListeners) return;
46
59
 
47
60
  // make sure state updates flush
48
61
  queueMicrotask(() => {
49
- for (const callback of eventListeners) {
50
- callback(payload);
62
+ // Emit to specific event listeners
63
+ if (eventListeners) {
64
+ for (const callback of eventListeners) {
65
+ callback(payload);
66
+ }
67
+ }
68
+
69
+ // Emit to wildcard listeners
70
+ if (wildcardListeners) {
71
+ for (const callback of wildcardListeners) {
72
+ callback({ event, payload });
73
+ }
51
74
  }
52
75
  });
53
76
  },
@@ -43,7 +43,7 @@ export const ThreadListClient = resource(
43
43
  const state = tapMemo<ThreadListClientState>(() => {
44
44
  return {
45
45
  mainThreadId: runtimeState.mainThreadId,
46
- newThreadId: runtimeState.newThread,
46
+ newThreadId: runtimeState.newThread ?? null,
47
47
  isLoading: runtimeState.isLoading,
48
48
  threadIds: runtimeState.threads,
49
49
  archivedThreadIds: runtimeState.archivedThreads,
@@ -173,7 +173,6 @@ export abstract class BaseComposerRuntimeCore
173
173
  ];
174
174
  else {
175
175
  this._attachments = [...this._attachments, a];
176
- this._notifyEventSubscribers("attachment-add");
177
176
  }
178
177
 
179
178
  this._notifySubscribers();
@@ -1,6 +1,5 @@
1
- export type EventSource<
2
- T extends keyof AssistantEvents = keyof AssistantEvents,
3
- > = T extends `${infer Source}.${string}` ? Source : never;
1
+ export type EventSource<T extends AssistantEvent = AssistantEvent> =
2
+ T extends `${infer Source}.${string}` ? Source : never;
4
3
 
5
4
  type ScopeConfig = {
6
5
  composer: "thread" | "message";
@@ -8,28 +7,28 @@ type ScopeConfig = {
8
7
  "thread-list-item": never;
9
8
  };
10
9
 
11
- export type SourceByScope<
12
- TScope extends AssistantEventScope<keyof AssistantEvents>,
13
- > =
10
+ export type SourceByScope<TScope extends AssistantEventScope<AssistantEvent>> =
14
11
  | (TScope extends "*" ? EventSource : never)
15
12
  | (TScope extends keyof ScopeConfig ? TScope : never)
16
13
  | {
17
14
  [K in keyof ScopeConfig]: TScope extends ScopeConfig[K] ? K : never;
18
15
  }[keyof ScopeConfig];
19
16
 
20
- export type AssistantEventScope<TEvent extends keyof AssistantEvents> =
17
+ export type AssistantEventScope<TEvent extends AssistantEvent> =
21
18
  | "*"
22
19
  | EventSource<TEvent>
23
20
  | ScopeConfig[EventSource<TEvent>];
24
21
 
25
- export type AssistantEventSelector<TEvent extends keyof AssistantEvents> =
22
+ export type AssistantEventSelector<TEvent extends AssistantEvent> =
26
23
  | TEvent
27
24
  | {
28
25
  scope: AssistantEventScope<TEvent>;
29
26
  event: TEvent;
30
27
  };
31
28
 
32
- export type AssistantEvents = {
29
+ export type AssistantEvent = keyof AssistantEventMap;
30
+
31
+ export type AssistantEventMap = {
33
32
  // Thread events (from ThreadRuntimeEventType)
34
33
  "thread.run-start": {
35
34
  threadId: string;
@@ -61,9 +60,17 @@ export type AssistantEvents = {
61
60
  "thread-list-item.switched-away": {
62
61
  threadId: string;
63
62
  };
63
+
64
+ // Catch-all
65
+ "*": {
66
+ [K in Exclude<keyof AssistantEventMap, "*">]: {
67
+ event: K;
68
+ payload: AssistantEventMap[K];
69
+ };
70
+ }[Exclude<keyof AssistantEventMap, "*">];
64
71
  };
65
72
 
66
- export const normalizeEventSelector = <TEvent extends keyof AssistantEvents>(
73
+ export const normalizeEventSelector = <TEvent extends AssistantEvent>(
67
74
  selector: AssistantEventSelector<TEvent>,
68
75
  ) => {
69
76
  if (typeof selector === "string") {
@@ -81,8 +88,8 @@ export const normalizeEventSelector = <TEvent extends keyof AssistantEvents>(
81
88
  };
82
89
 
83
90
  export const checkEventScope = <
84
- TEvent extends keyof AssistantEvents,
85
- TExpectedScope extends AssistantEventScope<keyof AssistantEvents>,
91
+ TEvent extends AssistantEvent,
92
+ TExpectedScope extends AssistantEventScope<AssistantEvent>,
86
93
  >(
87
94
  expectedScope: TExpectedScope,
88
95
  scope: AssistantEventScope<TEvent>,
@@ -90,3 +97,7 @@ export const checkEventScope = <
90
97
  ): _event is Extract<TEvent, `${SourceByScope<TExpectedScope>}.${string}`> => {
91
98
  return scope === expectedScope;
92
99
  };
100
+
101
+ export type AssistantEventCallback<TEvent extends AssistantEvent> = (
102
+ payload: AssistantEventMap[TEvent],
103
+ ) => void;
@@ -54,5 +54,7 @@ export type { Unsubscribe } from "./Unsubscribe";
54
54
  export type {
55
55
  AssistantEventScope,
56
56
  AssistantEventSelector,
57
- AssistantEvents,
57
+ AssistantEvent,
58
+ AssistantEventMap,
59
+ AssistantEventCallback,
58
60
  } from "./EventTypes";