@dxos/plugin-thread 0.8.4-main.c1de068 → 0.8.4-main.dedc0f3
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.
- package/dist/lib/browser/ChannelContainer-4PYFOIDK.mjs +16 -0
- package/dist/lib/browser/{ChatContainer-AIGIWAUG.mjs → ChatContainer-EXNNREYB.mjs} +4 -4
- package/dist/lib/browser/{app-graph-builder-N7BE5TYW.mjs → app-graph-builder-FHAOPO57.mjs} +5 -5
- package/dist/lib/browser/app-graph-builder-FHAOPO57.mjs.map +7 -0
- package/dist/lib/browser/{call-manager-NIPDYUVD.mjs → call-manager-RMPTWSTF.mjs} +4 -4
- package/dist/lib/browser/call-manager-RMPTWSTF.mjs.map +7 -0
- package/dist/lib/browser/{chunk-LGSDKXPF.mjs → chunk-4APCDRSH.mjs} +1 -1
- package/dist/lib/browser/{chunk-LGSDKXPF.mjs.map → chunk-4APCDRSH.mjs.map} +1 -1
- package/dist/lib/browser/{chunk-KWPRNHTK.mjs → chunk-7W7QK5ZP.mjs} +232 -230
- package/dist/lib/browser/chunk-7W7QK5ZP.mjs.map +7 -0
- package/dist/lib/browser/chunk-G4CNILRR.mjs +23 -0
- package/dist/lib/browser/{chunk-4OYAYON2.mjs.map → chunk-G4CNILRR.mjs.map} +3 -3
- package/dist/lib/browser/{chunk-GCLD5ESP.mjs → chunk-KTWYVC5X.mjs} +22 -12
- package/dist/lib/browser/chunk-KTWYVC5X.mjs.map +7 -0
- package/dist/lib/browser/chunk-PBMNFG3B.mjs +376 -0
- package/dist/lib/browser/chunk-PBMNFG3B.mjs.map +7 -0
- package/dist/lib/browser/{chunk-ERWASUQK.mjs → chunk-RI3Z6MK3.mjs} +38 -6
- package/dist/lib/{node-esm/chunk-25ABSYP2.mjs.map → browser/chunk-RI3Z6MK3.mjs.map} +4 -4
- package/dist/lib/browser/{chunk-6NSMBO3B.mjs → chunk-XYUJXHYV.mjs} +55 -5
- package/dist/lib/browser/chunk-XYUJXHYV.mjs.map +7 -0
- package/dist/lib/browser/{chunk-ZE7KWN36.mjs → chunk-ZCEU5K23.mjs} +461 -240
- package/dist/lib/browser/chunk-ZCEU5K23.mjs.map +7 -0
- package/dist/lib/browser/chunk-ZH2WPTNP.mjs +618 -0
- package/dist/lib/browser/chunk-ZH2WPTNP.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +20 -9
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-JFGLZ6VI.mjs → intent-resolver-J7OCP2P6.mjs} +67 -9
- package/dist/lib/browser/intent-resolver-J7OCP2P6.mjs.map +7 -0
- package/dist/lib/browser/{markdown-GEXBVJYN.mjs → markdown-Z677YORA.mjs} +4 -4
- package/dist/lib/browser/markdown-Z677YORA.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-root-X4UIVGTX.mjs → react-root-XKOD4KRB.mjs} +9 -9
- package/dist/lib/browser/{react-surface-YCYEFBPM.mjs → react-surface-GVGZRBDK.mjs} +9 -9
- package/dist/lib/browser/react-surface-GVGZRBDK.mjs.map +7 -0
- package/dist/lib/browser/{settings-E32MTL7A.mjs → settings-GRKEID73.mjs} +2 -2
- package/dist/lib/browser/{state-H6CYONWE.mjs → state-2T4KDWBX.mjs} +2 -2
- package/dist/lib/browser/{state-H6CYONWE.mjs.map → state-2T4KDWBX.mjs.map} +2 -2
- package/dist/lib/browser/toolkit-KUPIIFC6.mjs +80 -0
- package/dist/lib/browser/toolkit-KUPIIFC6.mjs.map +7 -0
- package/dist/lib/browser/types/index.mjs +1 -1
- package/dist/lib/node-esm/{ChannelContainer-DET6T5N2.mjs → ChannelContainer-KQQEZWUN.mjs} +7 -7
- package/dist/lib/node-esm/{ChatContainer-IQUWU426.mjs → ChatContainer-QVQKFBWA.mjs} +4 -4
- package/dist/lib/node-esm/{app-graph-builder-VCW76Z6V.mjs → app-graph-builder-XEYWX5FC.mjs} +5 -5
- package/dist/lib/node-esm/app-graph-builder-XEYWX5FC.mjs.map +7 -0
- package/dist/lib/node-esm/{call-manager-D6O5ZJJ4.mjs → call-manager-QAREJFVX.mjs} +4 -4
- package/dist/lib/node-esm/call-manager-QAREJFVX.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-OU5BYIDO.mjs → chunk-2V3WSLUZ.mjs} +55 -5
- package/dist/lib/node-esm/chunk-2V3WSLUZ.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-4T45PCKP.mjs +25 -0
- package/dist/lib/node-esm/{chunk-GW37AAM4.mjs.map → chunk-4T45PCKP.mjs.map} +3 -3
- package/dist/lib/node-esm/chunk-DKCQCENK.mjs +377 -0
- package/dist/lib/node-esm/chunk-DKCQCENK.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-25ABSYP2.mjs → chunk-JNPKMT7O.mjs} +38 -6
- package/dist/lib/node-esm/chunk-JNPKMT7O.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-LE2LIYGX.mjs +619 -0
- package/dist/lib/node-esm/chunk-LE2LIYGX.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-TDFHTCZZ.mjs → chunk-P6E247RF.mjs} +22 -12
- package/dist/lib/node-esm/chunk-P6E247RF.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-75RJ5DJI.mjs → chunk-PYTVBN5J.mjs} +1 -1
- package/dist/lib/node-esm/{chunk-75RJ5DJI.mjs.map → chunk-PYTVBN5J.mjs.map} +1 -1
- package/dist/lib/node-esm/{chunk-C3XFMUAY.mjs → chunk-SNKFZQST.mjs} +232 -230
- package/dist/lib/node-esm/chunk-SNKFZQST.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-IHDNQLLR.mjs → chunk-TIPIOH2J.mjs} +461 -240
- package/dist/lib/node-esm/chunk-TIPIOH2J.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +20 -9
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-OXGNQ44Y.mjs → intent-resolver-SR2LW4HF.mjs} +67 -9
- package/dist/lib/node-esm/intent-resolver-SR2LW4HF.mjs.map +7 -0
- package/dist/lib/node-esm/{markdown-LIJZDK2J.mjs → markdown-FL4IXLRP.mjs} +4 -4
- package/dist/lib/node-esm/markdown-FL4IXLRP.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-root-M7J6PZVW.mjs → react-root-4JWDRIQB.mjs} +9 -9
- package/dist/lib/node-esm/{react-surface-IRSEKM42.mjs → react-surface-WLQUVRAX.mjs} +9 -9
- package/dist/lib/node-esm/react-surface-WLQUVRAX.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-SJ24YG7M.mjs → settings-F2ODVNNW.mjs} +2 -2
- package/dist/lib/node-esm/{state-D7WNDT3N.mjs → state-62TQKQVB.mjs} +2 -2
- package/dist/lib/node-esm/{state-D7WNDT3N.mjs.map → state-62TQKQVB.mjs.map} +2 -2
- package/dist/lib/node-esm/toolkit-KZIS7G36.mjs +81 -0
- package/dist/lib/node-esm/toolkit-KZIS7G36.mjs.map +7 -0
- package/dist/lib/node-esm/types/index.mjs +1 -1
- package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
- package/dist/types/src/calls/call-manager.d.ts.map +1 -1
- package/dist/types/src/calls/call-swarm-synchronizer.d.ts.map +1 -1
- package/dist/types/src/calls/media-manager.d.ts +1 -1
- package/dist/types/src/calls/media-manager.d.ts.map +1 -1
- package/dist/types/src/calls/types.d.ts +1 -1
- package/dist/types/src/calls/types.d.ts.map +1 -1
- package/dist/types/src/calls/util/calls-service.d.ts +4 -2
- package/dist/types/src/calls/util/calls-service.d.ts.map +1 -1
- package/dist/types/src/calls/util/stub-media-streams.d.ts.map +1 -1
- package/dist/types/src/calls-service.stories.d.ts +10 -8
- package/dist/types/src/calls-service.stories.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/call-manager.d.ts +1 -1
- package/dist/types/src/capabilities/call-manager.d.ts.map +1 -1
- package/dist/types/src/capabilities/capabilities.d.ts +2 -2
- package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +11 -10
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/markdown.d.ts +1 -1
- package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-root.d.ts +2 -2
- package/dist/types/src/capabilities/react-surface.d.ts +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/settings.d.ts +1 -1
- package/dist/types/src/capabilities/state.d.ts +2 -2
- package/dist/types/src/capabilities/state.d.ts.map +1 -1
- package/dist/types/src/capabilities/toolkit.d.ts +5 -0
- package/dist/types/src/capabilities/toolkit.d.ts.map +1 -0
- package/dist/types/src/components/Call/Call.d.ts.map +1 -1
- package/dist/types/src/components/Call/Toolbar.d.ts.map +1 -1
- package/dist/types/src/components/CallDebugPanel.d.ts +7 -0
- package/dist/types/src/components/CallDebugPanel.d.ts.map +1 -1
- package/dist/types/src/components/CallSidebar.d.ts.map +1 -1
- package/dist/types/src/components/ChannelContainer.d.ts.map +1 -1
- package/dist/types/src/components/ChannelContainer.stories.d.ts +88 -3
- package/dist/types/src/components/ChannelContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/Chat.stories.d.ts +90 -4
- package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
- package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
- package/dist/types/src/components/Comments.stories.d.ts +156 -3
- package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
- package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
- package/dist/types/src/components/CommentsThreadContainer.d.ts +2 -2
- package/dist/types/src/components/CommentsThreadContainer.d.ts.map +1 -1
- package/dist/types/src/components/Lobby/Lobby.d.ts.map +1 -1
- package/dist/types/src/components/Media/VideoObject.d.ts +1 -1
- package/dist/types/src/components/Media/VideoObject.stories.d.ts +15 -3
- package/dist/types/src/components/Media/VideoObject.stories.d.ts.map +1 -1
- package/dist/types/src/components/MessageContainer.d.ts +4 -1
- package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
- package/dist/types/src/components/Participant/Participant.d.ts.map +1 -1
- package/dist/types/src/components/Participant/ParticipantGrid.d.ts.map +1 -1
- package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts +154 -2
- package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +156 -3
- package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +1 -1
- package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts.map +1 -1
- package/dist/types/src/components/ThreadComplementary.d.ts.map +1 -1
- package/dist/types/src/components/command-extension.d.ts.map +1 -1
- package/dist/types/src/components/testing.d.ts +1 -0
- package/dist/types/src/components/testing.d.ts.map +1 -1
- package/dist/types/src/extensions/threads.d.ts +2 -2
- package/dist/types/src/extensions/threads.d.ts.map +1 -1
- package/dist/types/src/hooks/index.d.ts +1 -0
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts +2 -0
- package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts.map +1 -0
- package/dist/types/src/hooks/useVideoStreamTrack.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +3 -1
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/schema.d.ts +123 -108
- package/dist/types/src/types/schema.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +255 -170
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +54 -50
- package/src/ThreadPlugin.tsx +9 -2
- package/src/calls/call-manager.ts +2 -2
- package/src/calls/call-swarm-synchronizer.ts +1 -1
- package/src/calls/media-manager.ts +60 -34
- package/src/calls/types.ts +8 -4
- package/src/calls/util/calls-service.ts +65 -14
- package/src/calls/util/stub-media-streams.ts +62 -5
- package/src/calls-service.stories.tsx +76 -60
- package/src/capabilities/app-graph-builder.ts +8 -5
- package/src/capabilities/call-manager.ts +3 -2
- package/src/capabilities/capabilities.ts +2 -2
- package/src/capabilities/index.ts +1 -0
- package/src/capabilities/intent-resolver.ts +38 -4
- package/src/capabilities/markdown.ts +4 -3
- package/src/capabilities/react-surface.tsx +5 -4
- package/src/capabilities/state.ts +2 -1
- package/src/capabilities/toolkit.ts +78 -0
- package/src/components/Call/Call.tsx +3 -2
- package/src/components/Call/Toolbar.tsx +5 -5
- package/src/components/CallDebugPanel.tsx +108 -49
- package/src/components/CallSidebar.tsx +2 -1
- package/src/components/ChannelContainer.stories.tsx +6 -5
- package/src/components/ChannelContainer.tsx +7 -6
- package/src/components/Chat.stories.tsx +28 -26
- package/src/components/ChatContainer.tsx +8 -4
- package/src/components/Comments.stories.tsx +33 -29
- package/src/components/CommentsContainer.tsx +2 -1
- package/src/components/CommentsThreadContainer.tsx +9 -7
- package/src/components/Lobby/Lobby.tsx +1 -1
- package/src/components/Media/VideoObject.stories.tsx +30 -27
- package/src/components/MessageContainer.tsx +43 -9
- package/src/components/Participant/Participant.tsx +13 -7
- package/src/components/Participant/ParticipantGrid.tsx +2 -1
- package/src/components/ResponsiveGrid/ResponsiveContainer.stories.tsx +6 -5
- package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +42 -39
- package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +1 -1
- package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +2 -2
- package/src/components/ThreadComplementary.tsx +38 -8
- package/src/components/ThreadSettings.tsx +2 -2
- package/src/components/command-extension.ts +5 -2
- package/src/components/testing.ts +22 -0
- package/src/extensions/threads.ts +6 -6
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useBlackCanvasStreamTrack.tsx +27 -0
- package/src/hooks/useDebugMode.ts +1 -1
- package/src/hooks/useVideoStreamTrack.tsx +5 -2
- package/src/testing/stories.ts +2 -2
- package/src/translations.ts +3 -1
- package/src/types/types.ts +21 -12
- package/src/typings/peermetrics-webrtc-stats.d.ts +17 -1
- package/src/typings.d.ts +8 -0
- package/dist/lib/browser/ChannelContainer-IY2UIRLF.mjs +0 -16
- package/dist/lib/browser/app-graph-builder-N7BE5TYW.mjs.map +0 -7
- package/dist/lib/browser/call-manager-NIPDYUVD.mjs.map +0 -7
- package/dist/lib/browser/chunk-4OYAYON2.mjs +0 -21
- package/dist/lib/browser/chunk-6NSMBO3B.mjs.map +0 -7
- package/dist/lib/browser/chunk-ERWASUQK.mjs.map +0 -7
- package/dist/lib/browser/chunk-GCLD5ESP.mjs.map +0 -7
- package/dist/lib/browser/chunk-KWPRNHTK.mjs.map +0 -7
- package/dist/lib/browser/chunk-VUWC4IJM.mjs +0 -479
- package/dist/lib/browser/chunk-VUWC4IJM.mjs.map +0 -7
- package/dist/lib/browser/chunk-XLPJXUKO.mjs +0 -367
- package/dist/lib/browser/chunk-XLPJXUKO.mjs.map +0 -7
- package/dist/lib/browser/chunk-ZE7KWN36.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-JFGLZ6VI.mjs.map +0 -7
- package/dist/lib/browser/markdown-GEXBVJYN.mjs.map +0 -7
- package/dist/lib/browser/react-surface-YCYEFBPM.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-VCW76Z6V.mjs.map +0 -7
- package/dist/lib/node-esm/call-manager-D6O5ZJJ4.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-2MFNK53T.mjs +0 -480
- package/dist/lib/node-esm/chunk-2MFNK53T.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-C3XFMUAY.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-GW37AAM4.mjs +0 -23
- package/dist/lib/node-esm/chunk-IHDNQLLR.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-J4NSON5Q.mjs +0 -368
- package/dist/lib/node-esm/chunk-J4NSON5Q.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-OU5BYIDO.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-TDFHTCZZ.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-OXGNQ44Y.mjs.map +0 -7
- package/dist/lib/node-esm/markdown-LIJZDK2J.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-IRSEKM42.mjs.map +0 -7
- /package/dist/lib/browser/{ChannelContainer-IY2UIRLF.mjs.map → ChannelContainer-4PYFOIDK.mjs.map} +0 -0
- /package/dist/lib/browser/{ChatContainer-AIGIWAUG.mjs.map → ChatContainer-EXNNREYB.mjs.map} +0 -0
- /package/dist/lib/browser/{react-root-X4UIVGTX.mjs.map → react-root-XKOD4KRB.mjs.map} +0 -0
- /package/dist/lib/browser/{settings-E32MTL7A.mjs.map → settings-GRKEID73.mjs.map} +0 -0
- /package/dist/lib/node-esm/{ChannelContainer-DET6T5N2.mjs.map → ChannelContainer-KQQEZWUN.mjs.map} +0 -0
- /package/dist/lib/node-esm/{ChatContainer-IQUWU426.mjs.map → ChatContainer-QVQKFBWA.mjs.map} +0 -0
- /package/dist/lib/node-esm/{react-root-M7J6PZVW.mjs.map → react-root-4JWDRIQB.mjs.map} +0 -0
- /package/dist/lib/node-esm/{settings-SJ24YG7M.mjs.map → settings-F2ODVNNW.mjs.map} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/capabilities/react-surface.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Capabilities, contributes, createSurface, useCapability } from '@dxos/app-framework';\nimport { Obj, type Ref } from '@dxos/echo';\nimport { SettingsStore } from '@dxos/local-storage';\nimport { getSpace } from '@dxos/react-client/echo';\n\nimport {\n CallDebugPanel,\n CallSidebar,\n ChannelContainer,\n ChatContainer,\n ThreadComplementary,\n ThreadSettings,\n} from '../components';\nimport { THREAD_PLUGIN } from '../meta';\nimport { ChannelType, type ThreadSettingsProps, ThreadType } from '../types';\n\nimport { ThreadCapabilities } from './capabilities';\n\nexport default () =>\n contributes(Capabilities.ReactSurface, [\n createSurface({\n id: `${THREAD_PLUGIN}/channel`,\n role: 'article',\n filter: (data): data is { subject: ChannelType } => Obj.instanceOf(ChannelType, data.subject),\n component: ({ data: { subject: channel }, role }) => <ChannelContainer channel={channel} role={role} />,\n }),\n createSurface({\n id: `${THREAD_PLUGIN}/chat-companion`,\n role: 'article',\n filter: (data): data is { companionTo: ChannelType; subject: 'chat' } =>\n Obj.instanceOf(ChannelType, data.companionTo) && data.subject === 'chat',\n component: ({ data: { companionTo: channel } }) => {\n const space = getSpace(channel);\n const thread = channel.defaultThread.target;\n if (!space || !thread) {\n return null;\n }\n\n return <ChatContainer thread={thread} space={space} />;\n },\n }),\n createSurface({\n id: `${THREAD_PLUGIN}/thread`,\n role: 'article',\n filter: (data): data is { subject: ThreadType } => Obj.instanceOf(ThreadType, data.subject),\n component: ({ data: { subject: thread } }) => {\n const space = getSpace(thread);\n if (!space || !thread) {\n return null;\n }\n\n return <ChatContainer thread={thread} space={space} />;\n },\n }),\n createSurface({\n id: `${THREAD_PLUGIN}/comments`,\n role: 'article',\n filter: (data): data is { companionTo: { threads: Ref.Ref<ThreadType>[] } } =>\n data.subject === 'comments' && Obj.isObject(data.companionTo),\n // TODO(wittjosiah): This isn't scrolling properly in a plank.\n component: ({ data }) => <ThreadComplementary subject={data.companionTo} />,\n }),\n createSurface({\n id: `${THREAD_PLUGIN}/plugin-settings`,\n role: 'article',\n filter: (data): data is { subject: SettingsStore<ThreadSettingsProps> } =>\n data.subject instanceof SettingsStore && data.subject.prefix === THREAD_PLUGIN,\n component: ({ data: { subject } }) => <ThreadSettings settings={subject.value} />,\n }),\n createSurface({\n id: `${THREAD_PLUGIN}/assistant`,\n role: 'deck-companion--active-call',\n component: () => <CallSidebar />,\n }),\n createSurface({\n id: `${THREAD_PLUGIN}/devtools-overview`,\n role: 'devtools-overview',\n component: () => {\n const call = useCapability(ThreadCapabilities.CallManager);\n return <CallDebugPanel state={call.state} />;\n },\n }),\n ]);\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,OAAOA,WAAW;AAElB,SAASC,cAAcC,aAAaC,eAAeC,qBAAqB;AACxE,SAASC,WAAqB;AAC9B,SAASC,qBAAqB;AAC9B,SAASC,gBAAgB;AAezB,IAAA,wBAAe,MACbC,YAAYC,aAAaC,cAAc;EACrCC,cAAc;IACZC,IAAI,GAAGC,aAAAA;IACPC,MAAM;IACNC,QAAQ,CAACC,SAA2CC,IAAIC,WAAWC,aAAaH,KAAKI,OAAO;IAC5FC,WAAW,CAAC,EAAEL,MAAM,EAAEI,SAASE,QAAO,GAAIR,KAAI,MAAO,sBAAA,cAACS,kBAAAA;MAAiBD;MAAkBR;;EAC3F,CAAA;EACAH,cAAc;IACZC,IAAI,GAAGC,aAAAA;IACPC,MAAM;IACNC,QAAQ,CAACC,SACPC,IAAIC,WAAWC,aAAaH,KAAKQ,WAAW,KAAKR,KAAKI,YAAY;IACpEC,WAAW,CAAC,EAAEL,MAAM,EAAEQ,aAAaF,QAAO,EAAE,MAAE;AAC5C,YAAMG,QAAQC,SAASJ,OAAAA;AACvB,YAAMK,SAASL,QAAQM,cAAcC;AACrC,UAAI,CAACJ,SAAS,CAACE,QAAQ;AACrB,eAAO;MACT;AAEA,aAAO,sBAAA,cAACG,eAAAA;QAAcH;QAAgBF;;IACxC;EACF,CAAA;EACAd,cAAc;IACZC,IAAI,GAAGC,aAAAA;IACPC,MAAM;IACNC,QAAQ,CAACC,SAA0CC,IAAIC,WAAWa,YAAYf,KAAKI,OAAO;IAC1FC,WAAW,CAAC,EAAEL,MAAM,EAAEI,SAASO,OAAM,EAAE,MAAE;AACvC,YAAMF,QAAQC,SAASC,MAAAA;AACvB,UAAI,CAACF,SAAS,CAACE,QAAQ;AACrB,eAAO;MACT;AAEA,aAAO,sBAAA,cAACG,eAAAA;QAAcH;QAAgBF;;IACxC;EACF,CAAA;EACAd,cAAc;IACZC,IAAI,GAAGC,aAAAA;IACPC,MAAM;IACNC,QAAQ,CAACC,SACPA,KAAKI,YAAY,cAAcH,IAAIe,SAAShB,KAAKQ,WAAW;;IAE9DH,WAAW,CAAC,EAAEL,KAAI,MAAO,sBAAA,cAACiB,qBAAAA;MAAoBb,SAASJ,KAAKQ;;EAC9D,CAAA;EACAb,cAAc;IACZC,IAAI,GAAGC,aAAAA;IACPC,MAAM;IACNC,QAAQ,CAACC,SACPA,KAAKI,mBAAmBc,iBAAiBlB,KAAKI,QAAQe,WAAWtB;IACnEQ,WAAW,CAAC,EAAEL,MAAM,EAAEI,QAAO,EAAE,MAAO,sBAAA,cAACgB,gBAAAA;MAAeC,UAAUjB,QAAQkB;;EAC1E,CAAA;EACA3B,cAAc;IACZC,IAAI,GAAGC,aAAAA;IACPC,MAAM;IACNO,WAAW,MAAM,sBAAA,cAACkB,aAAAA,IAAAA;EACpB,CAAA;EACA5B,cAAc;IACZC,IAAI,GAAGC,aAAAA;IACPC,MAAM;IACNO,WAAW,MAAA;AACT,YAAMmB,OAAOC,cAAcC,mBAAmBC,WAAW;AACzD,aAAO,sBAAA,cAACC,gBAAAA;QAAeC,OAAOL,KAAKK;;IACrC;EACF,CAAA;CACD;",
|
|
6
|
+
"names": ["React", "Capabilities", "contributes", "createSurface", "useCapability", "Obj", "SettingsStore", "getSpace", "contributes", "Capabilities", "ReactSurface", "createSurface", "id", "THREAD_PLUGIN", "role", "filter", "data", "Obj", "instanceOf", "ChannelType", "subject", "component", "channel", "ChannelContainer", "companionTo", "space", "getSpace", "thread", "defaultThread", "target", "ChatContainer", "ThreadType", "isObject", "ThreadComplementary", "SettingsStore", "prefix", "ThreadSettings", "settings", "value", "CallSidebar", "call", "useCapability", "ThreadCapabilities", "CallManager", "CallDebugPanel", "state"]
|
|
7
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ThreadSettingsSchema
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-KTWYVC5X.mjs";
|
|
4
4
|
import {
|
|
5
5
|
meta
|
|
6
6
|
} from "./chunk-EV4JWI7L.mjs";
|
|
@@ -19,4 +19,4 @@ var settings_default = () => {
|
|
|
19
19
|
export {
|
|
20
20
|
settings_default as default
|
|
21
21
|
};
|
|
22
|
-
//# sourceMappingURL=settings-
|
|
22
|
+
//# sourceMappingURL=settings-GRKEID73.mjs.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ThreadCapabilities
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-4APCDRSH.mjs";
|
|
4
4
|
import "./chunk-EV4JWI7L.mjs";
|
|
5
5
|
|
|
6
6
|
// src/capabilities/state.ts
|
|
@@ -31,4 +31,4 @@ var state_default = () => {
|
|
|
31
31
|
export {
|
|
32
32
|
state_default as default
|
|
33
33
|
};
|
|
34
|
-
//# sourceMappingURL=state-
|
|
34
|
+
//# sourceMappingURL=state-2T4KDWBX.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/capabilities/state.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { contributes } from '@dxos/app-framework';\nimport { live } from '@dxos/live-object';\n\nimport {
|
|
5
|
-
"mappings": ";;;;;;AAIA,SAASA,mBAAmB;AAC5B,SAASC,YAAY;
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { contributes } from '@dxos/app-framework';\nimport { live } from '@dxos/live-object';\n\nimport { type ThreadState, type ViewStore } from '../types';\n\nimport { ThreadCapabilities } from './capabilities';\n\nconst initialViewState = { showResolvedThreads: false };\n\nexport default () => {\n const state = live<ThreadState>({ toolbar: {}, drafts: {} });\n const viewStore = live<ViewStore>({});\n\n const getViewState = (subjectId: string) => {\n if (!viewStore[subjectId]) {\n viewStore[subjectId] = { ...initialViewState };\n }\n return viewStore[subjectId];\n };\n\n return contributes(ThreadCapabilities.State, { state, getViewState });\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;AAIA,SAASA,mBAAmB;AAC5B,SAASC,YAAY;AAMrB,IAAMC,mBAAmB;EAAEC,qBAAqB;AAAM;AAEtD,IAAA,gBAAe,MAAA;AACb,QAAMC,QAAQC,KAAkB;IAAEC,SAAS,CAAC;IAAGC,QAAQ,CAAC;EAAE,CAAA;AAC1D,QAAMC,YAAYH,KAAgB,CAAC,CAAA;AAEnC,QAAMI,eAAe,CAACC,cAAAA;AACpB,QAAI,CAACF,UAAUE,SAAAA,GAAY;AACzBF,gBAAUE,SAAAA,IAAa;QAAE,GAAGR;MAAiB;IAC/C;AACA,WAAOM,UAAUE,SAAAA;EACnB;AAEA,SAAOC,YAAYC,mBAAmBC,OAAO;IAAET;IAAOK;EAAa,CAAA;AACrE;",
|
|
6
6
|
"names": ["contributes", "live", "initialViewState", "showResolvedThreads", "state", "live", "toolbar", "drafts", "viewStore", "getViewState", "subjectId", "contributes", "ThreadCapabilities", "State"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ThreadAction
|
|
3
|
+
} from "./chunk-KTWYVC5X.mjs";
|
|
4
|
+
import "./chunk-EV4JWI7L.mjs";
|
|
5
|
+
|
|
6
|
+
// src/capabilities/toolkit.ts
|
|
7
|
+
import { AiTool, AiToolkit } from "@effect/ai";
|
|
8
|
+
import { Array, Effect, Schema, pipe } from "effect";
|
|
9
|
+
import { Capabilities, contributes, createIntent } from "@dxos/app-framework";
|
|
10
|
+
import { ArtifactId, computeDiffsWithCursors } from "@dxos/assistant";
|
|
11
|
+
import { ClientCapabilities } from "@dxos/plugin-client";
|
|
12
|
+
import { createDocAccessor } from "@dxos/react-client/echo";
|
|
13
|
+
import { trim } from "@dxos/util";
|
|
14
|
+
function _define_property(obj, key, value) {
|
|
15
|
+
if (key in obj) {
|
|
16
|
+
Object.defineProperty(obj, key, {
|
|
17
|
+
value,
|
|
18
|
+
enumerable: true,
|
|
19
|
+
configurable: true,
|
|
20
|
+
writable: true
|
|
21
|
+
});
|
|
22
|
+
} else {
|
|
23
|
+
obj[key] = value;
|
|
24
|
+
}
|
|
25
|
+
return obj;
|
|
26
|
+
}
|
|
27
|
+
var _AiToolkit_make;
|
|
28
|
+
var Toolkit = class extends (_AiToolkit_make = AiToolkit.make(AiTool.make("add-proposals", {
|
|
29
|
+
description: trim`
|
|
30
|
+
Proposes a set of changes to a document.
|
|
31
|
+
`,
|
|
32
|
+
parameters: {
|
|
33
|
+
id: ArtifactId,
|
|
34
|
+
diffs: Schema.Array(Schema.String).annotations({
|
|
35
|
+
description: "The diffs to propose for the document."
|
|
36
|
+
})
|
|
37
|
+
},
|
|
38
|
+
success: Schema.Any,
|
|
39
|
+
failure: Schema.Never
|
|
40
|
+
}))) {
|
|
41
|
+
};
|
|
42
|
+
_define_property(Toolkit, "layer", (context) => Toolkit.toLayer({
|
|
43
|
+
"add-proposals": ({ id, diffs: _diffs }) => Effect.gen(function* () {
|
|
44
|
+
const { dispatch } = context.getCapability(Capabilities.IntentDispatcher);
|
|
45
|
+
const client = context.getCapability(ClientCapabilities.Client);
|
|
46
|
+
const state = context.getCapability(Capabilities.Layout);
|
|
47
|
+
const dxn = ArtifactId.toDXN(id, state.workspace);
|
|
48
|
+
const echoDxn = dxn.asEchoDXN();
|
|
49
|
+
if (!echoDxn) {
|
|
50
|
+
throw new Error(`Invalid object ID: ${id}`);
|
|
51
|
+
}
|
|
52
|
+
const space = client.spaces.get(echoDxn.spaceId);
|
|
53
|
+
const object = space?.db.getObjectById(echoDxn.echoId);
|
|
54
|
+
if (!object) {
|
|
55
|
+
throw new Error(`Object not found: ${id}`);
|
|
56
|
+
}
|
|
57
|
+
const content = yield* Effect.promise(() => object.content.load());
|
|
58
|
+
const accessor = createDocAccessor(content, [
|
|
59
|
+
"content"
|
|
60
|
+
]);
|
|
61
|
+
yield* pipe(computeDiffsWithCursors(accessor, _diffs), Array.map(({ cursor, text }) => createIntent(ThreadAction.AddProposal, {
|
|
62
|
+
subject: object,
|
|
63
|
+
sender: {
|
|
64
|
+
role: "assistant"
|
|
65
|
+
},
|
|
66
|
+
anchor: cursor,
|
|
67
|
+
text
|
|
68
|
+
})), Array.map(dispatch), Effect.allWith({
|
|
69
|
+
concurrency: "unbounded"
|
|
70
|
+
}));
|
|
71
|
+
}).pipe(Effect.orDie)
|
|
72
|
+
}));
|
|
73
|
+
var toolkit_default = (context) => [
|
|
74
|
+
contributes(Capabilities.Toolkit, Toolkit),
|
|
75
|
+
contributes(Capabilities.ToolkitHandler, Toolkit.layer(context))
|
|
76
|
+
];
|
|
77
|
+
export {
|
|
78
|
+
toolkit_default as default
|
|
79
|
+
};
|
|
80
|
+
//# sourceMappingURL=toolkit-KUPIIFC6.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/capabilities/toolkit.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { AiTool, AiToolkit } from '@effect/ai';\nimport { Array, Effect, Schema, pipe } from 'effect';\n\nimport { Capabilities, type PluginContext, contributes, createIntent } from '@dxos/app-framework';\nimport { ArtifactId, computeDiffsWithCursors } from '@dxos/assistant';\nimport { type SpaceId } from '@dxos/keys';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { type Markdown } from '@dxos/plugin-markdown/types';\nimport { createDocAccessor } from '@dxos/react-client/echo';\nimport { trim } from '@dxos/util';\n\nimport { ThreadAction } from '../types';\n\n// TODO(wittjosiah): How to make this work for more than Documents?\nclass Toolkit extends AiToolkit.make(\n AiTool.make('add-proposals', {\n description: trim`\n Proposes a set of changes to a document.\n `,\n parameters: {\n id: ArtifactId,\n diffs: Schema.Array(Schema.String).annotations({\n description: 'The diffs to propose for the document.',\n }),\n },\n success: Schema.Any,\n failure: Schema.Never,\n }),\n) {\n static layer = (context: PluginContext) =>\n Toolkit.toLayer({\n 'add-proposals': ({ id, diffs: _diffs }) =>\n Effect.gen(function* () {\n // TODO(wittjosiah): Get capabilities via layers.\n const { dispatch } = context.getCapability(Capabilities.IntentDispatcher);\n const client = context.getCapability(ClientCapabilities.Client);\n const state = context.getCapability(Capabilities.Layout);\n\n const dxn = ArtifactId.toDXN(id, state.workspace as SpaceId);\n\n const echoDxn = dxn.asEchoDXN();\n if (!echoDxn) {\n throw new Error(`Invalid object ID: ${id}`);\n }\n\n const space = client.spaces.get(echoDxn.spaceId!);\n const object = space?.db.getObjectById<Markdown.Document>(echoDxn.echoId);\n if (!object) {\n throw new Error(`Object not found: ${id}`);\n }\n\n const content = yield* Effect.promise(() => object.content.load());\n const accessor = createDocAccessor(content, ['content']);\n yield* pipe(\n computeDiffsWithCursors(accessor, _diffs),\n Array.map(({ cursor, text }) =>\n createIntent(ThreadAction.AddProposal, {\n subject: object,\n sender: { role: 'assistant' },\n anchor: cursor,\n text,\n }),\n ),\n Array.map(dispatch),\n Effect.allWith({ concurrency: 'unbounded' }),\n );\n }).pipe(Effect.orDie),\n });\n}\n\nexport default (context: PluginContext) => [\n contributes(Capabilities.Toolkit, Toolkit),\n contributes(Capabilities.ToolkitHandler, Toolkit.layer(context)),\n];\n"],
|
|
5
|
+
"mappings": ";;;;;;AAIA,SAASA,QAAQC,iBAAiB;AAClC,SAASC,OAAOC,QAAQC,QAAQC,YAAY;AAE5C,SAASC,cAAkCC,aAAaC,oBAAoB;AAC5E,SAASC,YAAYC,+BAA+B;AAEpD,SAASC,0BAA0B;AAEnC,SAASC,yBAAyB;AAClC,SAASC,YAAY;A;;;;;;;;;;;;;IAKCC;AAAtB,IAAMC,UAAN,eAAsBD,kBAAAA,UAAUE,KAC9BC,OAAOD,KAAK,iBAAiB;EAC3BE,aAAaC;;;EAGbC,YAAY;IACVC,IAAIC;IACJC,OAAOC,OAAOC,MAAMD,OAAOE,MAAM,EAAEC,YAAY;MAC7CT,aAAa;IACf,CAAA;EACF;EACAU,SAASJ,OAAOK;EAChBC,SAASN,OAAOO;AAClB,CAAA,CAAA,GACF;AAwCA;AAvCE,iBAfIhB,SAeGiB,SAAQ,CAACC,YACdlB,QAAQmB,QAAQ;EACd,iBAAiB,CAAC,EAAEb,IAAIE,OAAOY,OAAM,MACnCC,OAAOC,IAAI,aAAA;AAET,UAAM,EAAEC,SAAQ,IAAKL,QAAQM,cAAcC,aAAaC,gBAAgB;AACxE,UAAMC,SAAST,QAAQM,cAAcI,mBAAmBC,MAAM;AAC9D,UAAMC,QAAQZ,QAAQM,cAAcC,aAAaM,MAAM;AAEvD,UAAMC,MAAMzB,WAAW0B,MAAM3B,IAAIwB,MAAMI,SAAS;AAEhD,UAAMC,UAAUH,IAAII,UAAS;AAC7B,QAAI,CAACD,SAAS;AACZ,YAAM,IAAIE,MAAM,sBAAsB/B,EAAAA,EAAI;IAC5C;AAEA,UAAMgC,QAAQX,OAAOY,OAAOC,IAAIL,QAAQM,OAAO;AAC/C,UAAMC,SAASJ,OAAOK,GAAGC,cAAiCT,QAAQU,MAAM;AACxE,QAAI,CAACH,QAAQ;AACX,YAAM,IAAIL,MAAM,qBAAqB/B,EAAAA,EAAI;IAC3C;AAEA,UAAMwC,UAAU,OAAOzB,OAAO0B,QAAQ,MAAML,OAAOI,QAAQE,KAAI,CAAA;AAC/D,UAAMC,WAAWC,kBAAkBJ,SAAS;MAAC;KAAU;AACvD,WAAOK,KACLC,wBAAwBH,UAAU7B,MAAAA,GAClCV,MAAM2C,IAAI,CAAC,EAAEC,QAAQC,KAAI,MACvBC,aAAaC,aAAaC,aAAa;MACrCC,SAASjB;MACTkB,QAAQ;QAAEC,MAAM;MAAY;MAC5BC,QAAQR;MACRC;IACF,CAAA,CAAA,GAEF7C,MAAM2C,IAAI9B,QAAAA,GACVF,OAAO0C,QAAQ;MAAEC,aAAa;IAAY,CAAA,CAAA;EAE9C,CAAA,EAAGb,KAAK9B,OAAO4C,KAAK;AACxB,CAAA,CAAA;AAGJ,IAAA,kBAAe,CAAC/C,YAA2B;EACzCgD,YAAYzC,aAAazB,SAASA,OAAAA;EAClCkE,YAAYzC,aAAa0C,gBAAgBnE,QAAQiB,MAAMC,OAAAA,CAAAA;;",
|
|
6
|
+
"names": ["AiTool", "AiToolkit", "Array", "Effect", "Schema", "pipe", "Capabilities", "contributes", "createIntent", "ArtifactId", "computeDiffsWithCursors", "ClientCapabilities", "createDocAccessor", "trim", "AiToolkit", "Toolkit", "make", "AiTool", "description", "trim", "parameters", "id", "ArtifactId", "diffs", "Schema", "Array", "String", "annotations", "success", "Any", "failure", "Never", "layer", "context", "toLayer", "_diffs", "Effect", "gen", "dispatch", "getCapability", "Capabilities", "IntentDispatcher", "client", "ClientCapabilities", "Client", "state", "Layout", "dxn", "toDXN", "workspace", "echoDxn", "asEchoDXN", "Error", "space", "spaces", "get", "spaceId", "object", "db", "getObjectById", "echoId", "content", "promise", "load", "accessor", "createDocAccessor", "pipe", "computeDiffsWithCursors", "map", "cursor", "text", "createIntent", "ThreadAction", "AddProposal", "subject", "sender", "role", "anchor", "allWith", "concurrency", "orDie", "contributes", "ToolkitHandler"]
|
|
7
|
+
}
|
|
@@ -2,16 +2,16 @@ import { createRequire } from 'node:module';const require = createRequire(import
|
|
|
2
2
|
import {
|
|
3
3
|
ChannelContainer,
|
|
4
4
|
ChannelContainer_default
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-SNKFZQST.mjs";
|
|
6
|
+
import "./chunk-4T45PCKP.mjs";
|
|
7
|
+
import "./chunk-PYTVBN5J.mjs";
|
|
8
|
+
import "./chunk-DKCQCENK.mjs";
|
|
9
|
+
import "./chunk-JNPKMT7O.mjs";
|
|
10
10
|
import "./chunk-57XR3LEF.mjs";
|
|
11
|
-
import "./chunk-
|
|
11
|
+
import "./chunk-2V3WSLUZ.mjs";
|
|
12
12
|
import "./chunk-GRLRWTRU.mjs";
|
|
13
13
|
export {
|
|
14
14
|
ChannelContainer,
|
|
15
15
|
ChannelContainer_default as default
|
|
16
16
|
};
|
|
17
|
-
//# sourceMappingURL=ChannelContainer-
|
|
17
|
+
//# sourceMappingURL=ChannelContainer-KQQEZWUN.mjs.map
|
|
@@ -3,14 +3,14 @@ import {
|
|
|
3
3
|
ChatContainer,
|
|
4
4
|
ChatContainer_default,
|
|
5
5
|
ChatHeading
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-DKCQCENK.mjs";
|
|
7
|
+
import "./chunk-JNPKMT7O.mjs";
|
|
8
8
|
import "./chunk-57XR3LEF.mjs";
|
|
9
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-2V3WSLUZ.mjs";
|
|
10
10
|
import "./chunk-GRLRWTRU.mjs";
|
|
11
11
|
export {
|
|
12
12
|
ChatContainer,
|
|
13
13
|
ChatHeading,
|
|
14
14
|
ChatContainer_default as default
|
|
15
15
|
};
|
|
16
|
-
//# sourceMappingURL=ChatContainer-
|
|
16
|
+
//# sourceMappingURL=ChatContainer-QVQKFBWA.mjs.map
|
|
@@ -2,10 +2,10 @@ import { createRequire } from 'node:module';const require = createRequire(import
|
|
|
2
2
|
import {
|
|
3
3
|
ChannelType,
|
|
4
4
|
ThreadAction
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-P6E247RF.mjs";
|
|
6
6
|
import {
|
|
7
7
|
ThreadCapabilities
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-PYTVBN5J.mjs";
|
|
9
9
|
import {
|
|
10
10
|
getAnchor
|
|
11
11
|
} from "./chunk-57XR3LEF.mjs";
|
|
@@ -20,8 +20,8 @@ import { Option, pipe } from "effect";
|
|
|
20
20
|
import { Capabilities, contributes, createIntent } from "@dxos/app-framework";
|
|
21
21
|
import { Obj } from "@dxos/echo";
|
|
22
22
|
import { AttentionCapabilities } from "@dxos/plugin-attention";
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
23
|
+
import { ATTENDABLE_PATH_SEPARATOR, DECK_COMPANION_TYPE, PLANK_COMPANION_TYPE } from "@dxos/plugin-deck/types";
|
|
24
|
+
import { ROOT_ID, createExtension, rxFromSignal } from "@dxos/plugin-graph";
|
|
25
25
|
import { fullyQualifiedId } from "@dxos/react-client/echo";
|
|
26
26
|
var app_graph_builder_default = (context) => {
|
|
27
27
|
const resolve = (typename) => context.getCapabilities(Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {};
|
|
@@ -169,4 +169,4 @@ var app_graph_builder_default = (context) => {
|
|
|
169
169
|
export {
|
|
170
170
|
app_graph_builder_default as default
|
|
171
171
|
};
|
|
172
|
-
//# sourceMappingURL=app-graph-builder-
|
|
172
|
+
//# sourceMappingURL=app-graph-builder-XEYWX5FC.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/capabilities/app-graph-builder.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Rx } from '@effect-rx/rx-react';\nimport { Option, pipe } from 'effect';\n\nimport { Capabilities, type PluginContext, contributes, createIntent } from '@dxos/app-framework';\nimport { Obj } from '@dxos/echo';\nimport { AttentionCapabilities } from '@dxos/plugin-attention';\nimport { ATTENDABLE_PATH_SEPARATOR, DECK_COMPANION_TYPE, PLANK_COMPANION_TYPE } from '@dxos/plugin-deck/types';\nimport { ROOT_ID, createExtension, rxFromSignal } from '@dxos/plugin-graph';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\n\nimport { THREAD_PLUGIN, meta } from '../meta';\nimport { ChannelType, ThreadAction } from '../types';\nimport { getAnchor } from '../util';\n\nimport { ThreadCapabilities } from './capabilities';\n\n// TODO(wittjosiah): Highlight active calls in L1.\n// Track active meetings by subscribing to meetings query and polling the swarms of recent meetings in the space.\nexport default (context: PluginContext) => {\n const resolve = (typename: string) =>\n context.getCapabilities(Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {};\n\n return contributes(Capabilities.AppGraphBuilder, [\n createExtension({\n id: `${THREAD_PLUGIN}/active-call`,\n connector: (node) =>\n Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) => (node.id === ROOT_ID ? Option.some(node) : Option.none())),\n Option.map((node) => {\n const [call] = get(context.capabilities(ThreadCapabilities.CallManager));\n return get(\n rxFromSignal(() =>\n call?.joined\n ? [\n {\n id: `${node.id}${ATTENDABLE_PATH_SEPARATOR}active-call`,\n type: DECK_COMPANION_TYPE,\n data: null,\n properties: {\n label: ['call panel label', { ns: THREAD_PLUGIN }],\n icon: 'ph--video-conference--regular',\n position: 'hoist',\n disposition: 'hidden',\n },\n },\n ]\n : [],\n ),\n );\n }),\n Option.getOrElse(() => []),\n ),\n ),\n }),\n // TODO(wittjosiah): The channel shouldn't become the companion during a call.\n // Alternative: the call/meeting/thread should be a child node of the channel and that should be opened.\n createExtension({\n id: `${THREAD_PLUGIN}/channel-chat-companion`,\n connector: (node) => {\n return Rx.make((get) => {\n return pipe(\n get(node),\n Option.flatMap((node) => (Obj.instanceOf(ChannelType, node.data) ? Option.some(node.data) : Option.none())),\n Option.map((channel) => {\n const callManager = context.getCapability(ThreadCapabilities.CallManager);\n const joined = get(\n rxFromSignal(() => callManager.joined && callManager.roomId === fullyQualifiedId(channel)),\n );\n if (!joined) {\n return [];\n }\n\n return [\n {\n id: `${fullyQualifiedId(channel)}${ATTENDABLE_PATH_SEPARATOR}chat`,\n type: PLANK_COMPANION_TYPE,\n data: 'chat',\n properties: {\n label: ['channel companion label', { ns: THREAD_PLUGIN }],\n icon: 'ph--hash--regular',\n position: 'hoist',\n disposition: 'hidden',\n },\n },\n ];\n }),\n Option.getOrElse(() => []),\n );\n });\n },\n }),\n createExtension({\n id: `${meta.id}/comments-companion`,\n connector: (node) =>\n Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) => {\n if (!Obj.isObject(node.data) || Obj.instanceOf(ChannelType, node.data)) {\n return Option.none();\n }\n const metadata = resolve(Obj.getTypename(node.data)!);\n return typeof metadata.comments === 'string' ? Option.some(node) : Option.none();\n }),\n Option.map((node) => [\n {\n id: [node.id, 'comments'].join(ATTENDABLE_PATH_SEPARATOR),\n type: PLANK_COMPANION_TYPE,\n data: 'comments',\n properties: {\n label: ['comments label', { ns: meta.id }],\n icon: 'ph--chat-text--regular',\n disposition: 'hidden',\n position: 'hoist',\n },\n },\n ]),\n Option.getOrElse(() => []),\n ),\n ),\n }),\n createExtension({\n id: `${meta.id}/comment-toolbar`,\n actions: (node) =>\n Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) => {\n if (!Obj.isObject(node.data) || Obj.instanceOf(ChannelType, node.data)) {\n return Option.none();\n }\n const metadata = resolve(Obj.getTypename(node.data)!);\n return typeof metadata.comments === 'string' ? Option.some(node.data) : Option.none();\n }),\n Option.map((object) => {\n const selectionManager = context.getCapability(AttentionCapabilities.Selection);\n const toolbar = get(context.capabilities(ThreadCapabilities.State))[0]?.state.toolbar ?? {};\n const disabled = get(\n rxFromSignal(() => {\n const metadata = resolve(Obj.getTypename(object)!);\n const selection = selectionManager.getSelection(fullyQualifiedId(object), metadata.selectionMode);\n const anchor = getAnchor(selection);\n const invalidSelection = !anchor;\n const overlappingComment = toolbar[fullyQualifiedId(object)];\n return (metadata.comments === 'anchored' && invalidSelection) || overlappingComment;\n }),\n );\n\n return [\n {\n id: `${fullyQualifiedId(object)}/comment`,\n data: () => {\n const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);\n const metadata = resolve(Obj.getTypename(object)!);\n const selection = selectionManager.getSelection(fullyQualifiedId(object));\n // TODO(wittjosiah): Use presence of selection to determine if the comment should be anchored.\n // Requires all components which support selection (e.g. table/kanban) to support anchored comments.\n const anchor = metadata.comments === 'anchored' ? getAnchor(selection) : Date.now().toString();\n const name = metadata.getAnchorLabel?.(object, anchor);\n void dispatch(createIntent(ThreadAction.Create, { anchor, name, subject: object }));\n },\n properties: {\n label: ['add comment label', { ns: meta.id }],\n icon: 'ph--chat-text--regular',\n disposition: 'toolbar',\n disabled,\n testId: 'thread.comment.add',\n },\n },\n ];\n }),\n Option.getOrElse(() => []),\n ),\n ),\n }),\n ]);\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Rx", "Option", "pipe", "Capabilities", "contributes", "createIntent", "Obj", "AttentionCapabilities", "ATTENDABLE_PATH_SEPARATOR", "DECK_COMPANION_TYPE", "PLANK_COMPANION_TYPE", "ROOT_ID", "createExtension", "rxFromSignal", "fullyQualifiedId", "context", "resolve", "typename", "getCapabilities", "Capabilities", "Metadata", "find", "id", "metadata", "contributes", "AppGraphBuilder", "createExtension", "THREAD_PLUGIN", "connector", "node", "Rx", "make", "get", "pipe", "Option", "flatMap", "ROOT_ID", "some", "none", "map", "call", "capabilities", "ThreadCapabilities", "CallManager", "rxFromSignal", "joined", "ATTENDABLE_PATH_SEPARATOR", "type", "DECK_COMPANION_TYPE", "data", "properties", "label", "ns", "icon", "position", "disposition", "getOrElse", "Obj", "instanceOf", "ChannelType", "channel", "callManager", "getCapability", "roomId", "fullyQualifiedId", "PLANK_COMPANION_TYPE", "meta", "isObject", "getTypename", "comments", "join", "actions", "object", "selectionManager", "AttentionCapabilities", "Selection", "toolbar", "State", "state", "disabled", "selection", "getSelection", "selectionMode", "anchor", "getAnchor", "invalidSelection", "overlappingComment", "dispatchPromise", "dispatch", "IntentDispatcher", "Date", "now", "toString", "name", "getAnchorLabel", "createIntent", "ThreadAction", "Create", "subject", "testId"]
|
|
7
|
+
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
CallManager
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-TIPIOH2J.mjs";
|
|
5
5
|
import {
|
|
6
6
|
ThreadCapabilities
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
7
|
+
} from "./chunk-PYTVBN5J.mjs";
|
|
8
|
+
import "./chunk-2V3WSLUZ.mjs";
|
|
9
9
|
import "./chunk-GRLRWTRU.mjs";
|
|
10
10
|
|
|
11
11
|
// src/capabilities/call-manager.ts
|
|
@@ -22,4 +22,4 @@ var call_manager_default = async (context) => {
|
|
|
22
22
|
export {
|
|
23
23
|
call_manager_default as default
|
|
24
24
|
};
|
|
25
|
-
//# sourceMappingURL=call-manager-
|
|
25
|
+
//# sourceMappingURL=call-manager-QAREJFVX.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/capabilities/call-manager.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type PluginContext, contributes } from '@dxos/app-framework';\nimport { ClientCapabilities } from '@dxos/plugin-client';\n\nimport { CallManager } from '../calls';\n\nimport { ThreadCapabilities } from './capabilities';\n\nexport default async (context: PluginContext) => {\n const client = context.getCapability(ClientCapabilities.Client);\n const callManager = new CallManager(client);\n await callManager.open();\n\n return contributes(ThreadCapabilities.CallManager, callManager, () => {\n void callManager.close();\n });\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;AAIA,SAA6BA,mBAAmB;AAChD,SAASC,0BAA0B;AAMnC,IAAA,uBAAe,OAAOC,YAAAA;AACpB,QAAMC,SAASD,QAAQE,cAAcC,mBAAmBC,MAAM;AAC9D,QAAMC,cAAc,IAAIC,YAAYL,MAAAA;AACpC,QAAMI,YAAYE,KAAI;AAEtB,SAAOC,YAAYC,mBAAmBH,aAAaD,aAAa,MAAA;AAC9D,SAAKA,YAAYK,MAAK;EACxB,CAAA;AACF;",
|
|
6
|
+
"names": ["contributes", "ClientCapabilities", "context", "client", "getCapability", "ClientCapabilities", "Client", "callManager", "CallManager", "open", "contributes", "ThreadCapabilities", "close"]
|
|
7
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
2
|
|
|
3
3
|
// src/calls/util/stub-media-streams.ts
|
|
4
|
-
import {
|
|
4
|
+
import { scheduleTaskInterval, waitForCondition } from "@dxos/async";
|
|
5
5
|
import { cancelWithContext } from "@dxos/context";
|
|
6
6
|
import { invariant } from "@dxos/invariant";
|
|
7
7
|
var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/util/stub-media-streams.ts";
|
|
@@ -23,7 +23,7 @@ var createBlackCanvasStreamTrack = async ({ ctx, width, height }) => {
|
|
|
23
23
|
canvasCtx.fillStyle = "black";
|
|
24
24
|
canvasCtx.fillRect(0, 0, canvas.width, canvas.height);
|
|
25
25
|
};
|
|
26
|
-
scheduleTaskInterval(ctx, async () => drawFrame(),
|
|
26
|
+
scheduleTaskInterval(ctx, async () => drawFrame(), 200);
|
|
27
27
|
const track = canvas.captureStream().getVideoTracks()[0];
|
|
28
28
|
drawFrame();
|
|
29
29
|
await cancelWithContext(ctx, waitForCondition({
|
|
@@ -32,18 +32,68 @@ var createBlackCanvasStreamTrack = async ({ ctx, width, height }) => {
|
|
|
32
32
|
}));
|
|
33
33
|
return track;
|
|
34
34
|
};
|
|
35
|
+
var audioContextStartedPreviously = false;
|
|
36
|
+
var userGestureEvents = [
|
|
37
|
+
"click",
|
|
38
|
+
"contextmenu",
|
|
39
|
+
"auxclick",
|
|
40
|
+
"dblclick",
|
|
41
|
+
"mousedown",
|
|
42
|
+
"mouseup",
|
|
43
|
+
"pointerup",
|
|
44
|
+
"touchend",
|
|
45
|
+
"keydown",
|
|
46
|
+
"keyup"
|
|
47
|
+
];
|
|
35
48
|
var createInaudibleAudioStreamTrack = async ({ ctx }) => {
|
|
36
49
|
const audioContext = new window.AudioContext();
|
|
37
50
|
const oscillator = audioContext.createOscillator();
|
|
38
51
|
oscillator.type = "triangle";
|
|
39
52
|
oscillator.frequency.setValueAtTime(20, audioContext.currentTime);
|
|
40
53
|
const gainNode = audioContext.createGain();
|
|
41
|
-
gainNode.gain.setValueAtTime(0
|
|
54
|
+
gainNode.gain.setValueAtTime(0, audioContext.currentTime);
|
|
42
55
|
oscillator.connect(gainNode);
|
|
43
56
|
const destination = audioContext.createMediaStreamDestination();
|
|
44
57
|
gainNode.connect(destination);
|
|
45
|
-
|
|
58
|
+
let oscillatorStarted = false;
|
|
59
|
+
const ensureOscillatorStarted = () => {
|
|
60
|
+
if (oscillatorStarted) return;
|
|
61
|
+
oscillator.start();
|
|
62
|
+
oscillatorStarted = true;
|
|
63
|
+
};
|
|
64
|
+
const stateChangeHandler = () => {
|
|
65
|
+
if (audioContext.state === "running") {
|
|
66
|
+
audioContextStartedPreviously = true;
|
|
67
|
+
ensureOscillatorStarted();
|
|
68
|
+
}
|
|
69
|
+
if (audioContext.state === "suspended" || audioContext.state === "interrupted") {
|
|
70
|
+
resumeAudioContext();
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
audioContext.addEventListener("statechange", stateChangeHandler);
|
|
74
|
+
const resumeAudioContext = () => {
|
|
75
|
+
void audioContext.resume().then(() => {
|
|
76
|
+
cleanUpUserGestureListeners();
|
|
77
|
+
});
|
|
78
|
+
};
|
|
79
|
+
const cleanUpUserGestureListeners = () => {
|
|
80
|
+
userGestureEvents.forEach((gesture) => {
|
|
81
|
+
document.removeEventListener(gesture, resumeAudioContext, {
|
|
82
|
+
capture: true
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
};
|
|
86
|
+
if (audioContextStartedPreviously) {
|
|
87
|
+
resumeAudioContext();
|
|
88
|
+
} else {
|
|
89
|
+
userGestureEvents.forEach((gesture) => {
|
|
90
|
+
document.addEventListener(gesture, resumeAudioContext, {
|
|
91
|
+
capture: true
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
}
|
|
46
95
|
ctx.onDispose(async () => {
|
|
96
|
+
cleanUpUserGestureListeners();
|
|
47
97
|
oscillator.disconnect();
|
|
48
98
|
oscillator.stop();
|
|
49
99
|
await audioContext.close();
|
|
@@ -55,4 +105,4 @@ export {
|
|
|
55
105
|
createBlackCanvasStreamTrack,
|
|
56
106
|
createInaudibleAudioStreamTrack
|
|
57
107
|
};
|
|
58
|
-
//# sourceMappingURL=chunk-
|
|
108
|
+
//# sourceMappingURL=chunk-2V3WSLUZ.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/calls/util/stub-media-streams.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n//\n\nimport { scheduleTaskInterval, waitForCondition } from '@dxos/async';\nimport { type Context, cancelWithContext } from '@dxos/context';\nimport { invariant } from '@dxos/invariant';\n\n/**\n * Creates a black canvas stream track.\n * We need this to to have black rectangle video that is live (have frames) when video feed is disabled.\n */\nexport const createBlackCanvasStreamTrack = async ({\n ctx,\n width,\n height,\n}: {\n ctx: Context;\n width: number;\n height: number;\n}): Promise<MediaStreamTrack> => {\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n\n const canvasCtx = canvas.getContext('2d');\n invariant(canvasCtx);\n const drawFrame = () => {\n canvasCtx.fillStyle = 'black';\n canvasCtx.fillRect(0, 0, canvas.width, canvas.height);\n };\n scheduleTaskInterval(ctx, async () => drawFrame(), 200);\n\n const track = canvas.captureStream().getVideoTracks()[0];\n drawFrame();\n\n await cancelWithContext(ctx, waitForCondition({ condition: () => track.readyState === 'live', timeout: 1_000 }));\n\n return track;\n};\n\nlet audioContextStartedPreviously = false;\nconst userGestureEvents = [\n 'click',\n 'contextmenu',\n 'auxclick',\n 'dblclick',\n 'mousedown',\n 'mouseup',\n 'pointerup',\n 'touchend',\n 'keydown',\n 'keyup',\n];\n\n/**\n * Creates an inaudible audio stream track.\n * We need this to have audio track available when audio is disabled.\n */\nexport const createInaudibleAudioStreamTrack = async ({ ctx }: { ctx: Context }): Promise<MediaStreamTrack> => {\n const audioContext = new window.AudioContext();\n const oscillator = audioContext.createOscillator();\n oscillator.type = 'triangle';\n // roughly sounds like a box fan\n oscillator.frequency.setValueAtTime(20, audioContext.currentTime);\n\n const gainNode = audioContext.createGain();\n // even w/ gain at 0 some packets are sent\n gainNode.gain.setValueAtTime(0, audioContext.currentTime);\n oscillator.connect(gainNode);\n\n const destination = audioContext.createMediaStreamDestination();\n gainNode.connect(destination);\n\n let oscillatorStarted = false;\n const ensureOscillatorStarted = () => {\n if (oscillatorStarted) return;\n oscillator.start();\n oscillatorStarted = true;\n };\n\n const stateChangeHandler = () => {\n if (audioContext.state === 'running') {\n audioContextStartedPreviously = true;\n ensureOscillatorStarted();\n }\n if (audioContext.state === 'suspended' || (audioContext.state as string) === 'interrupted') {\n resumeAudioContext();\n }\n };\n\n audioContext.addEventListener('statechange', stateChangeHandler);\n\n const resumeAudioContext = () => {\n void audioContext.resume().then(() => {\n cleanUpUserGestureListeners();\n });\n };\n\n const cleanUpUserGestureListeners = () => {\n userGestureEvents.forEach((gesture) => {\n document.removeEventListener(gesture, resumeAudioContext, {\n capture: true,\n });\n });\n };\n\n if (audioContextStartedPreviously) {\n resumeAudioContext();\n } else {\n userGestureEvents.forEach((gesture) => {\n document.addEventListener(gesture, resumeAudioContext, {\n capture: true,\n });\n });\n }\n\n ctx.onDispose(async () => {\n cleanUpUserGestureListeners();\n oscillator.disconnect();\n oscillator.stop();\n await audioContext.close();\n });\n\n return destination.stream.getAudioTracks()[0];\n};\n"],
|
|
5
|
+
"mappings": ";;;AAKA,SAASA,sBAAsBC,wBAAwB;AACvD,SAAuBC,yBAAyB;AAChD,SAASC,iBAAiB;;AAMnB,IAAMC,+BAA+B,OAAO,EACjDC,KACAC,OACAC,OAAM,MAKP;AACC,QAAMC,SAASC,SAASC,cAAc,QAAA;AACtCF,SAAOF,QAAQA;AACfE,SAAOD,SAASA;AAEhB,QAAMI,YAAYH,OAAOI,WAAW,IAAA;AACpCT,YAAUQ,WAAAA,QAAAA;;;;;;;;;AACV,QAAME,YAAY,MAAA;AAChBF,cAAUG,YAAY;AACtBH,cAAUI,SAAS,GAAG,GAAGP,OAAOF,OAAOE,OAAOD,MAAM;EACtD;AACAP,uBAAqBK,KAAK,YAAYQ,UAAAA,GAAa,GAAA;AAEnD,QAAMG,QAAQR,OAAOS,cAAa,EAAGC,eAAc,EAAG,CAAA;AACtDL,YAAAA;AAEA,QAAMX,kBAAkBG,KAAKJ,iBAAiB;IAAEkB,WAAW,MAAMH,MAAMI,eAAe;IAAQC,SAAS;EAAM,CAAA,CAAA;AAE7G,SAAOL;AACT;AAEA,IAAIM,gCAAgC;AACpC,IAAMC,oBAAoB;EACxB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAOK,IAAMC,kCAAkC,OAAO,EAAEnB,IAAG,MAAoB;AAC7E,QAAMoB,eAAe,IAAIC,OAAOC,aAAY;AAC5C,QAAMC,aAAaH,aAAaI,iBAAgB;AAChDD,aAAWE,OAAO;AAElBF,aAAWG,UAAUC,eAAe,IAAIP,aAAaQ,WAAW;AAEhE,QAAMC,WAAWT,aAAaU,WAAU;AAExCD,WAASE,KAAKJ,eAAe,GAAGP,aAAaQ,WAAW;AACxDL,aAAWS,QAAQH,QAAAA;AAEnB,QAAMI,cAAcb,aAAac,6BAA4B;AAC7DL,WAASG,QAAQC,WAAAA;AAEjB,MAAIE,oBAAoB;AACxB,QAAMC,0BAA0B,MAAA;AAC9B,QAAID,kBAAmB;AACvBZ,eAAWc,MAAK;AAChBF,wBAAoB;EACtB;AAEA,QAAMG,qBAAqB,MAAA;AACzB,QAAIlB,aAAamB,UAAU,WAAW;AACpCtB,sCAAgC;AAChCmB,8BAAAA;IACF;AACA,QAAIhB,aAAamB,UAAU,eAAgBnB,aAAamB,UAAqB,eAAe;AAC1FC,yBAAAA;IACF;EACF;AAEApB,eAAaqB,iBAAiB,eAAeH,kBAAAA;AAE7C,QAAME,qBAAqB,MAAA;AACzB,SAAKpB,aAAasB,OAAM,EAAGC,KAAK,MAAA;AAC9BC,kCAAAA;IACF,CAAA;EACF;AAEA,QAAMA,8BAA8B,MAAA;AAClC1B,sBAAkB2B,QAAQ,CAACC,YAAAA;AACzB1C,eAAS2C,oBAAoBD,SAASN,oBAAoB;QACxDQ,SAAS;MACX,CAAA;IACF,CAAA;EACF;AAEA,MAAI/B,+BAA+B;AACjCuB,uBAAAA;EACF,OAAO;AACLtB,sBAAkB2B,QAAQ,CAACC,YAAAA;AACzB1C,eAASqC,iBAAiBK,SAASN,oBAAoB;QACrDQ,SAAS;MACX,CAAA;IACF,CAAA;EACF;AAEAhD,MAAIiD,UAAU,YAAA;AACZL,gCAAAA;AACArB,eAAW2B,WAAU;AACrB3B,eAAW4B,KAAI;AACf,UAAM/B,aAAagC,MAAK;EAC1B,CAAA;AAEA,SAAOnB,YAAYoB,OAAOC,eAAc,EAAG,CAAA;AAC7C;",
|
|
6
|
+
"names": ["scheduleTaskInterval", "waitForCondition", "cancelWithContext", "invariant", "createBlackCanvasStreamTrack", "ctx", "width", "height", "canvas", "document", "createElement", "canvasCtx", "getContext", "drawFrame", "fillStyle", "fillRect", "track", "captureStream", "getVideoTracks", "condition", "readyState", "timeout", "audioContextStartedPreviously", "userGestureEvents", "createInaudibleAudioStreamTrack", "audioContext", "window", "AudioContext", "oscillator", "createOscillator", "type", "frequency", "setValueAtTime", "currentTime", "gainNode", "createGain", "gain", "connect", "destination", "createMediaStreamDestination", "oscillatorStarted", "ensureOscillatorStarted", "start", "stateChangeHandler", "state", "resumeAudioContext", "addEventListener", "resume", "then", "cleanUpUserGestureListeners", "forEach", "gesture", "removeEventListener", "capture", "onDispose", "disconnect", "stop", "close", "stream", "getAudioTracks"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
|
+
|
|
3
|
+
// src/capabilities/index.ts
|
|
4
|
+
import { lazy } from "@dxos/app-framework";
|
|
5
|
+
var AppGraphBuilder = lazy(() => import("./app-graph-builder-XEYWX5FC.mjs"));
|
|
6
|
+
var CallManager = lazy(() => import("./call-manager-QAREJFVX.mjs"));
|
|
7
|
+
var IntentResolver = lazy(() => import("./intent-resolver-SR2LW4HF.mjs"));
|
|
8
|
+
var Markdown = lazy(() => import("./markdown-FL4IXLRP.mjs"));
|
|
9
|
+
var ReactRoot = lazy(() => import("./react-root-4JWDRIQB.mjs"));
|
|
10
|
+
var ReactSurface = lazy(() => import("./react-surface-WLQUVRAX.mjs"));
|
|
11
|
+
var ThreadSettings = lazy(() => import("./settings-F2ODVNNW.mjs"));
|
|
12
|
+
var ThreadState = lazy(() => import("./state-62TQKQVB.mjs"));
|
|
13
|
+
var Toolkit = lazy(() => import("./toolkit-KZIS7G36.mjs"));
|
|
14
|
+
|
|
15
|
+
export {
|
|
16
|
+
AppGraphBuilder,
|
|
17
|
+
CallManager,
|
|
18
|
+
IntentResolver,
|
|
19
|
+
Markdown,
|
|
20
|
+
ReactRoot,
|
|
21
|
+
ReactSurface,
|
|
22
|
+
ThreadState,
|
|
23
|
+
Toolkit
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=chunk-4T45PCKP.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/capabilities/index.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\nexport const AppGraphBuilder = lazy(() => import('./app-graph-builder'));\nexport const CallManager = lazy(() => import('./call-manager'));\nexport const IntentResolver = lazy(() => import('./intent-resolver'));\nexport const Markdown = lazy(() => import('./markdown'));\nexport const ReactRoot = lazy(() => import('./react-root'));\nexport const ReactSurface = lazy(() => import('./react-surface'));\nexport const ThreadSettings = lazy(() => import('./settings'));\nexport const ThreadState = lazy(() => import('./state'));\n\nexport * from './capabilities';\n"],
|
|
5
|
-
"mappings": ";;;AAIA,SAASA,YAAY;AAEd,IAAMC,kBAAkBC,KAAK,MAAM,OAAO,kCAAA,CAAA;AAC1C,IAAMC,cAAcD,KAAK,MAAM,OAAO,6BAAA,CAAA;AACtC,IAAME,iBAAiBF,KAAK,MAAM,OAAO,gCAAA,CAAA;AACzC,IAAMG,WAAWH,KAAK,MAAM,OAAO,yBAAA,CAAA;AACnC,IAAMI,YAAYJ,KAAK,MAAM,OAAO,2BAAA,CAAA;AACpC,IAAMK,eAAeL,KAAK,MAAM,OAAO,8BAAA,CAAA;AACvC,IAAMM,iBAAiBN,KAAK,MAAM,OAAO,yBAAA,CAAA;AACzC,IAAMO,cAAcP,KAAK,MAAM,OAAO,sBAAA,CAAA;",
|
|
6
|
-
"names": ["lazy", "AppGraphBuilder", "lazy", "CallManager", "IntentResolver", "Markdown", "ReactRoot", "ReactSurface", "ThreadSettings", "ThreadState"]
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\nexport const AppGraphBuilder = lazy(() => import('./app-graph-builder'));\nexport const CallManager = lazy(() => import('./call-manager'));\nexport const IntentResolver = lazy(() => import('./intent-resolver'));\nexport const Markdown = lazy(() => import('./markdown'));\nexport const ReactRoot = lazy(() => import('./react-root'));\nexport const ReactSurface = lazy(() => import('./react-surface'));\nexport const ThreadSettings = lazy(() => import('./settings'));\nexport const ThreadState = lazy(() => import('./state'));\nexport const Toolkit = lazy(() => import('./toolkit'));\n\nexport * from './capabilities';\n"],
|
|
5
|
+
"mappings": ";;;AAIA,SAASA,YAAY;AAEd,IAAMC,kBAAkBC,KAAK,MAAM,OAAO,kCAAA,CAAA;AAC1C,IAAMC,cAAcD,KAAK,MAAM,OAAO,6BAAA,CAAA;AACtC,IAAME,iBAAiBF,KAAK,MAAM,OAAO,gCAAA,CAAA;AACzC,IAAMG,WAAWH,KAAK,MAAM,OAAO,yBAAA,CAAA;AACnC,IAAMI,YAAYJ,KAAK,MAAM,OAAO,2BAAA,CAAA;AACpC,IAAMK,eAAeL,KAAK,MAAM,OAAO,8BAAA,CAAA;AACvC,IAAMM,iBAAiBN,KAAK,MAAM,OAAO,yBAAA,CAAA;AACzC,IAAMO,cAAcP,KAAK,MAAM,OAAO,sBAAA,CAAA;AACtC,IAAMQ,UAAUR,KAAK,MAAM,OAAO,wBAAA,CAAA;",
|
|
6
|
+
"names": ["lazy", "AppGraphBuilder", "lazy", "CallManager", "IntentResolver", "Markdown", "ReactRoot", "ReactSurface", "ThreadSettings", "ThreadState", "Toolkit"]
|
|
7
7
|
}
|