@dxos/plugin-thread 0.8.4-main.422d1c7879 → 0.8.4-main.43cb759274
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/LICENSE +102 -5
- package/PLUGIN.mdl +271 -0
- package/README.md +1 -1
- package/dist/lib/neutral/ChannelArticle-UJHPOUWA.mjs +28 -0
- package/dist/lib/neutral/ChannelArticle-UJHPOUWA.mjs.map +7 -0
- package/dist/lib/neutral/ChannelChat-LZEDFJVD.mjs +10 -0
- package/dist/lib/neutral/CommentsCompanion-FOUIGCEK.mjs +208 -0
- package/dist/lib/neutral/CommentsCompanion-FOUIGCEK.mjs.map +7 -0
- package/dist/lib/neutral/ThreadContainer-QWB6WRMI.mjs +61 -0
- package/dist/lib/neutral/ThreadContainer-QWB6WRMI.mjs.map +7 -0
- package/dist/lib/neutral/ThreadPlugin.mjs +109 -0
- package/dist/lib/neutral/ThreadPlugin.mjs.map +7 -0
- package/dist/lib/neutral/ThreadPlugin.node.mjs +40 -0
- package/dist/lib/neutral/ThreadPlugin.node.mjs.map +7 -0
- package/dist/lib/neutral/ThreadPlugin.workerd.mjs +24 -0
- package/dist/lib/neutral/ThreadPlugin.workerd.mjs.map +7 -0
- package/dist/lib/neutral/ThreadSettings-5MKTDK3A.mjs +15 -0
- package/dist/lib/neutral/ThreadSettings-5MKTDK3A.mjs.map +7 -0
- package/dist/lib/{browser/add-message-VPPFFLFL.mjs → neutral/add-message-RDIABSIX.mjs} +48 -23
- package/dist/lib/neutral/add-message-RDIABSIX.mjs.map +7 -0
- package/dist/lib/neutral/agent-runner-RB7N5HLD.mjs +244 -0
- package/dist/lib/neutral/agent-runner-RB7N5HLD.mjs.map +7 -0
- package/dist/lib/neutral/app-graph-builder-PDLRFYSI.mjs +120 -0
- package/dist/lib/neutral/app-graph-builder-PDLRFYSI.mjs.map +7 -0
- package/dist/lib/neutral/append-channel-message-TBBQUVMH.mjs +40 -0
- package/dist/lib/neutral/append-channel-message-TBBQUVMH.mjs.map +7 -0
- package/dist/lib/neutral/blueprint-definition-S3EBOH4R.mjs +15 -0
- package/dist/lib/neutral/blueprint-definition-S3EBOH4R.mjs.map +7 -0
- package/dist/lib/neutral/blueprints/index.mjs +8 -0
- package/dist/lib/neutral/capabilities/index.mjs +27 -0
- package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
- package/dist/lib/neutral/chunk-35GUWXBB.mjs +48 -0
- package/dist/lib/neutral/chunk-35GUWXBB.mjs.map +7 -0
- package/dist/lib/{browser/blueprints/index.mjs → neutral/chunk-5T5LPLBN.mjs} +5 -6
- package/dist/lib/neutral/chunk-5T5LPLBN.mjs.map +7 -0
- package/dist/lib/neutral/chunk-BHEZLLXG.mjs +55 -0
- package/dist/lib/neutral/chunk-BHEZLLXG.mjs.map +7 -0
- package/dist/lib/neutral/chunk-HQZWTDJC.mjs +164 -0
- package/dist/lib/neutral/chunk-HQZWTDJC.mjs.map +7 -0
- package/dist/lib/neutral/chunk-IQBZZAMX.mjs +335 -0
- package/dist/lib/neutral/chunk-IQBZZAMX.mjs.map +7 -0
- package/dist/lib/neutral/chunk-JJETHBAZ.mjs +8 -0
- package/dist/lib/neutral/chunk-JJETHBAZ.mjs.map +7 -0
- package/dist/lib/neutral/chunk-JLY4NVTA.mjs +38 -0
- package/dist/lib/neutral/chunk-JLY4NVTA.mjs.map +7 -0
- package/dist/lib/neutral/chunk-QFDT33VT.mjs +69 -0
- package/dist/lib/neutral/chunk-QFDT33VT.mjs.map +7 -0
- package/dist/lib/neutral/components/index.mjs +541 -0
- package/dist/lib/neutral/components/index.mjs.map +7 -0
- package/dist/lib/neutral/containers/index.mjs +15 -0
- package/dist/lib/neutral/containers/index.mjs.map +7 -0
- package/dist/lib/{browser/create-UGT7V733.mjs → neutral/create-VXM6HJMN.mjs} +20 -14
- package/dist/lib/neutral/create-VXM6HJMN.mjs.map +7 -0
- package/dist/lib/neutral/create-channel-FSJOMRHF.mjs +19 -0
- package/dist/lib/neutral/create-channel-FSJOMRHF.mjs.map +7 -0
- package/dist/lib/neutral/create-object-D5XEG7MQ.mjs +28 -0
- package/dist/lib/neutral/create-object-D5XEG7MQ.mjs.map +7 -0
- package/dist/lib/{browser/create-proposals-CMK7S7VS.mjs → neutral/create-proposals-ILYIYJEN.mjs} +5 -6
- package/dist/lib/neutral/create-proposals-ILYIYJEN.mjs.map +7 -0
- package/dist/lib/{browser/delete-FSFVU6ZA.mjs → neutral/delete-6KZERY6K.mjs} +9 -11
- package/dist/lib/neutral/delete-6KZERY6K.mjs.map +7 -0
- package/dist/lib/{browser/delete-message-XL5M5J33.mjs → neutral/delete-message-PATSHW36.mjs} +9 -19
- package/dist/lib/neutral/delete-message-PATSHW36.mjs.map +7 -0
- package/dist/lib/neutral/hooks/index.mjs +10 -0
- package/dist/lib/neutral/index.mjs +32 -0
- package/dist/lib/neutral/index.mjs.map +7 -0
- package/dist/lib/neutral/markdown-5UHAAC5Z.mjs +83 -0
- package/dist/lib/neutral/markdown-5UHAAC5Z.mjs.map +7 -0
- package/dist/lib/neutral/meta.json +1 -0
- package/dist/lib/neutral/meta.mjs +10 -0
- package/dist/lib/neutral/meta.mjs.map +7 -0
- package/dist/lib/neutral/on-create-space-6NLTBGGD.mjs +23 -0
- package/dist/lib/neutral/on-create-space-6NLTBGGD.mjs.map +7 -0
- package/dist/lib/neutral/operation-handler-RU6K2S4L.mjs +13 -0
- package/dist/lib/neutral/operation-handler-RU6K2S4L.mjs.map +7 -0
- package/dist/lib/neutral/operations/index.mjs +8 -0
- package/dist/lib/neutral/operations/index.mjs.map +7 -0
- package/dist/lib/neutral/plugin.mjs +16 -0
- package/dist/lib/neutral/plugin.mjs.map +7 -0
- package/dist/lib/neutral/react-surface-TUMXARMI.mjs +76 -0
- package/dist/lib/neutral/react-surface-TUMXARMI.mjs.map +7 -0
- package/dist/lib/neutral/respond-to-thread-ROQA3B6U.mjs +32 -0
- package/dist/lib/neutral/respond-to-thread-ROQA3B6U.mjs.map +7 -0
- package/dist/lib/{browser/restore-2ZGMKUSD.mjs → neutral/restore-SP4HADCE.mjs} +6 -7
- package/dist/lib/neutral/restore-SP4HADCE.mjs.map +7 -0
- package/dist/lib/{browser/restore-message-OYEGWPII.mjs → neutral/restore-message-TVIC66VL.mjs} +8 -17
- package/dist/lib/neutral/restore-message-TVIC66VL.mjs.map +7 -0
- package/dist/lib/{browser/select-VG2XLULE.mjs → neutral/select-DLHPEKEA.mjs} +7 -9
- package/dist/lib/neutral/select-DLHPEKEA.mjs.map +7 -0
- package/dist/lib/neutral/set-agent-config-7GEYCG7Y.mjs +20 -0
- package/dist/lib/neutral/set-agent-config-7GEYCG7Y.mjs.map +7 -0
- package/dist/lib/neutral/settings-HK4EB6TF.mjs +30 -0
- package/dist/lib/neutral/settings-HK4EB6TF.mjs.map +7 -0
- package/dist/lib/neutral/state-UU7VEAKV.mjs +22 -0
- package/dist/lib/neutral/state-UU7VEAKV.mjs.map +7 -0
- package/dist/lib/neutral/testing/index.mjs +58 -0
- package/dist/lib/neutral/testing/index.mjs.map +7 -0
- package/dist/lib/{browser/toggle-resolved-MM6YC5BU.mjs → neutral/toggle-resolved-GMAD3SZ2.mjs} +8 -17
- package/dist/lib/neutral/toggle-resolved-GMAD3SZ2.mjs.map +7 -0
- package/dist/lib/neutral/translations.mjs +91 -0
- package/dist/lib/neutral/translations.mjs.map +7 -0
- package/dist/lib/neutral/types/index.mjs +16 -0
- package/dist/lib/neutral/types/index.mjs.map +7 -0
- package/dist/lib/neutral/undo-mappings-HOKL2L3M.mjs +54 -0
- package/dist/lib/neutral/undo-mappings-HOKL2L3M.mjs.map +7 -0
- package/dist/types/src/ThreadPlugin.d.ts +1 -0
- package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
- package/dist/types/src/ThreadPlugin.node.d.ts +4 -0
- package/dist/types/src/ThreadPlugin.node.d.ts.map +1 -0
- package/dist/types/src/ThreadPlugin.test.d.ts +2 -0
- package/dist/types/src/ThreadPlugin.test.d.ts.map +1 -0
- package/dist/types/src/ThreadPlugin.workerd.d.ts +4 -0
- package/dist/types/src/ThreadPlugin.workerd.d.ts.map +1 -0
- package/dist/types/src/blueprints/thread-blueprint.d.ts +2 -2
- package/dist/types/src/blueprints/thread-blueprint.d.ts.map +1 -1
- package/dist/types/src/capabilities/agent-runner.d.ts +22 -0
- package/dist/types/src/capabilities/agent-runner.d.ts.map +1 -0
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/blueprint-definition.d.ts +2 -2
- package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -1
- package/dist/types/src/capabilities/create-object.d.ts +11 -0
- package/dist/types/src/capabilities/create-object.d.ts.map +1 -0
- package/dist/types/src/capabilities/index.d.ts +10 -8
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
- package/dist/types/src/capabilities/operation-handler.d.ts +1 -1
- package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/settings.d.ts.map +1 -1
- package/dist/types/src/capabilities/state.d.ts.map +1 -1
- package/dist/types/src/capabilities/undo-mappings.d.ts.map +1 -1
- package/dist/types/src/components/Chat/Chat.d.ts +51 -0
- package/dist/types/src/components/Chat/Chat.d.ts.map +1 -0
- package/dist/types/src/components/Chat/index.d.ts +2 -0
- package/dist/types/src/components/Chat/index.d.ts.map +1 -0
- package/dist/types/src/components/CommentsPanel/CommentsPanel.d.ts.map +1 -1
- package/dist/types/src/components/CommentsPanel/CommentsPanel.stories.d.ts +70 -70
- package/dist/types/src/components/CommentsPanel/CommentsPanel.stories.d.ts.map +1 -1
- package/dist/types/src/components/CommentsPanel/CommentsThread.d.ts.map +1 -1
- package/dist/types/src/components/MessagePanel/MessagePanel.d.ts.map +1 -1
- package/dist/types/src/components/ThreadSettings/ThreadSettings.d.ts.map +1 -1
- package/dist/types/src/components/ThreadSettings/ThreadSettings.stories.d.ts +70 -70
- package/dist/types/src/components/ThreadSettings/ThreadSettings.stories.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +1 -1
- package/dist/types/src/containers/ChannelArticle/ChannelArticle.d.ts +13 -0
- package/dist/types/src/containers/ChannelArticle/ChannelArticle.d.ts.map +1 -0
- package/dist/types/src/containers/ChannelArticle/ChannelArticle.stories.d.ts +162 -0
- package/dist/types/src/containers/ChannelArticle/ChannelArticle.stories.d.ts.map +1 -0
- package/dist/types/src/containers/ChannelArticle/index.d.ts +2 -0
- package/dist/types/src/containers/{CallDebugPanel → ChannelArticle}/index.d.ts.map +1 -1
- package/dist/types/src/containers/ChannelChat/ChannelChat.d.ts +20 -0
- package/dist/types/src/containers/ChannelChat/ChannelChat.d.ts.map +1 -0
- package/dist/types/src/containers/ChannelChat/index.d.ts +4 -0
- package/dist/types/src/containers/ChannelChat/index.d.ts.map +1 -0
- package/dist/types/src/containers/CommentsCompanion/CommentsCompanion.d.ts +11 -0
- package/dist/types/src/containers/CommentsCompanion/CommentsCompanion.d.ts.map +1 -0
- package/dist/types/src/containers/CommentsCompanion/CommentsCompanion.stories.d.ts +198 -0
- package/dist/types/src/containers/CommentsCompanion/CommentsCompanion.stories.d.ts.map +1 -0
- package/dist/types/src/containers/CommentsCompanion/index.d.ts +2 -0
- package/dist/types/src/containers/CommentsCompanion/index.d.ts.map +1 -0
- package/dist/types/src/containers/ThreadContainer/ThreadContainer.d.ts +20 -0
- package/dist/types/src/containers/ThreadContainer/ThreadContainer.d.ts.map +1 -0
- package/dist/types/src/containers/{ChatContainer/ChatContainer.stories.d.ts → ThreadContainer/ThreadContainer.stories.d.ts} +71 -71
- package/dist/types/src/containers/ThreadContainer/ThreadContainer.stories.d.ts.map +1 -0
- package/dist/types/src/containers/ThreadContainer/index.d.ts +4 -0
- package/dist/types/src/containers/ThreadContainer/index.d.ts.map +1 -0
- package/dist/types/src/containers/index.d.ts +4 -5
- package/dist/types/src/containers/index.d.ts.map +1 -1
- package/dist/types/src/extensions/threads.d.ts +3 -3
- package/dist/types/src/extensions/threads.d.ts.map +1 -1
- package/dist/types/src/hooks/analytics.d.ts.map +1 -1
- package/dist/types/src/hooks/index.d.ts +0 -4
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useStatus.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +2 -3
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +1 -1
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/operations/add-message.d.ts +3 -3
- package/dist/types/src/operations/add-message.d.ts.map +1 -1
- package/dist/types/src/operations/append-channel-message.d.ts +5 -0
- package/dist/types/src/operations/append-channel-message.d.ts.map +1 -0
- package/dist/types/src/operations/create-channel.d.ts +3 -3
- package/dist/types/src/operations/create-channel.d.ts.map +1 -1
- package/dist/types/src/operations/create-proposals.d.ts +3 -3
- package/dist/types/src/operations/create-proposals.d.ts.map +1 -1
- package/dist/types/src/operations/create.d.ts +3 -3
- package/dist/types/src/operations/create.d.ts.map +1 -1
- package/dist/types/src/operations/delete-message.d.ts +3 -3
- package/dist/types/src/operations/delete-message.d.ts.map +1 -1
- package/dist/types/src/operations/delete.d.ts +3 -3
- package/dist/types/src/operations/delete.d.ts.map +1 -1
- package/dist/types/src/operations/index.d.ts +1 -2
- package/dist/types/src/operations/index.d.ts.map +1 -1
- package/dist/types/src/operations/on-create-space.d.ts +3 -3
- package/dist/types/src/operations/on-create-space.d.ts.map +1 -1
- package/dist/types/src/operations/respond-to-thread.d.ts +5 -0
- package/dist/types/src/operations/respond-to-thread.d.ts.map +1 -0
- package/dist/types/src/operations/restore-message.d.ts +3 -3
- package/dist/types/src/operations/restore-message.d.ts.map +1 -1
- package/dist/types/src/operations/restore.d.ts +3 -3
- package/dist/types/src/operations/restore.d.ts.map +1 -1
- package/dist/types/src/operations/select.d.ts +3 -3
- package/dist/types/src/operations/select.d.ts.map +1 -1
- package/dist/types/src/operations/set-agent-config.d.ts +5 -0
- package/dist/types/src/operations/set-agent-config.d.ts.map +1 -0
- package/dist/types/src/operations/toggle-resolved.d.ts +3 -3
- package/dist/types/src/operations/toggle-resolved.d.ts.map +1 -1
- package/dist/types/src/plugin.d.ts +4 -0
- package/dist/types/src/plugin.d.ts.map +1 -0
- package/dist/types/src/should-trigger-agent.d.ts +22 -0
- package/dist/types/src/should-trigger-agent.d.ts.map +1 -0
- package/dist/types/src/should-trigger-agent.test.d.ts +2 -0
- package/dist/types/src/should-trigger-agent.test.d.ts.map +1 -0
- package/dist/types/src/testing/data.d.ts.map +1 -1
- package/dist/types/src/testing/index.d.ts +1 -1
- package/dist/types/src/testing/index.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +70 -70
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/AgentIdentity.d.ts +27 -0
- package/dist/types/src/types/AgentIdentity.d.ts.map +1 -0
- package/dist/types/src/types/ThreadCapabilities.d.ts +34 -0
- package/dist/types/src/types/ThreadCapabilities.d.ts.map +1 -0
- package/dist/types/src/{operations/definitions.d.ts → types/ThreadOperation.d.ts} +1882 -1941
- package/dist/types/src/types/ThreadOperation.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +4 -2
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +1 -1
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/src/util.d.ts +6 -3
- package/dist/types/src/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +133 -96
- package/src/ThreadPlugin.node.ts +39 -0
- package/src/ThreadPlugin.test.ts +37 -0
- package/src/ThreadPlugin.tsx +35 -65
- package/src/ThreadPlugin.workerd.ts +20 -0
- package/src/blueprints/thread-blueprint.ts +3 -4
- package/src/capabilities/agent-runner.ts +291 -0
- package/src/capabilities/app-graph-builder.ts +24 -74
- package/src/capabilities/blueprint-definition.ts +2 -0
- package/src/capabilities/create-object.ts +30 -0
- package/src/capabilities/index.ts +4 -3
- package/src/capabilities/markdown.ts +6 -2
- package/src/capabilities/operation-handler.ts +1 -1
- package/src/capabilities/react-surface.tsx +11 -27
- package/src/capabilities/settings.ts +1 -3
- package/src/capabilities/undo-mappings.ts +1 -1
- package/src/components/Chat/Chat.tsx +259 -0
- package/src/components/Chat/index.ts +5 -0
- package/src/components/CommentsPanel/CommentsPanel.stories.tsx +8 -7
- package/src/components/CommentsPanel/CommentsPanel.tsx +5 -5
- package/src/components/CommentsPanel/CommentsThread.tsx +16 -12
- package/src/components/MessagePanel/MessagePanel.tsx +8 -9
- package/src/components/ThreadSettings/ThreadSettings.stories.tsx +2 -1
- package/src/components/ThreadSettings/ThreadSettings.tsx +0 -1
- package/src/components/index.ts +1 -1
- package/src/containers/ChannelArticle/ChannelArticle.stories.tsx +105 -0
- package/src/containers/ChannelArticle/ChannelArticle.tsx +42 -0
- package/src/containers/ChannelArticle/index.ts +5 -0
- package/src/containers/ChannelChat/ChannelChat.tsx +75 -0
- package/src/containers/ChannelChat/index.ts +8 -0
- package/src/containers/CommentsCompanion/CommentsCompanion.stories.tsx +355 -0
- package/src/containers/{ThreadCompanion/ThreadCompanion.tsx → CommentsCompanion/CommentsCompanion.tsx} +33 -34
- package/src/containers/CommentsCompanion/index.ts +5 -0
- package/src/containers/{ChatContainer/ChatContainer.stories.tsx → ThreadContainer/ThreadContainer.stories.tsx} +10 -11
- package/src/containers/ThreadContainer/ThreadContainer.tsx +75 -0
- package/src/containers/ThreadContainer/index.ts +8 -0
- package/src/containers/index.ts +4 -5
- package/src/extensions/command.ts +1 -1
- package/src/extensions/threads.ts +13 -13
- package/src/hooks/analytics.ts +1 -1
- package/src/hooks/index.ts +0 -5
- package/src/index.ts +4 -4
- package/src/meta.ts +34 -8
- package/src/operations/add-message.ts +22 -9
- package/src/operations/append-channel-message.ts +37 -0
- package/src/operations/create-channel.ts +4 -4
- package/src/operations/create-proposals.ts +3 -3
- package/src/operations/create.ts +21 -6
- package/src/operations/delete-message.ts +6 -6
- package/src/operations/delete.ts +5 -5
- package/src/operations/index.ts +4 -4
- package/src/operations/on-create-space.ts +4 -4
- package/src/operations/respond-to-thread.ts +32 -0
- package/src/operations/restore-message.ts +5 -5
- package/src/operations/restore.ts +4 -4
- package/src/operations/select.ts +3 -3
- package/src/operations/set-agent-config.ts +24 -0
- package/src/operations/toggle-resolved.ts +5 -5
- package/src/plugin.ts +11 -0
- package/src/should-trigger-agent.test.ts +72 -0
- package/src/should-trigger-agent.ts +50 -0
- package/src/testing/index.ts +1 -1
- package/src/translations.ts +2 -1
- package/src/types/AgentIdentity.ts +35 -0
- package/src/types/ThreadCapabilities.ts +46 -0
- package/src/types/ThreadOperation.ts +225 -0
- package/src/types/index.ts +5 -2
- package/src/types/types.ts +0 -2
- package/src/util.ts +36 -4
- package/src/vite-env.d.ts +10 -0
- package/dist/lib/browser/add-message-VPPFFLFL.mjs.map +0 -7
- package/dist/lib/browser/blueprints/index.mjs.map +0 -7
- package/dist/lib/browser/chunk-MESW3R4Q.mjs +0 -61
- package/dist/lib/browser/chunk-MESW3R4Q.mjs.map +0 -7
- package/dist/lib/browser/chunk-VPM44Z35.mjs +0 -259
- package/dist/lib/browser/chunk-VPM44Z35.mjs.map +0 -7
- package/dist/lib/browser/create-UGT7V733.mjs.map +0 -7
- package/dist/lib/browser/create-channel-EF67LCS6.mjs +0 -21
- package/dist/lib/browser/create-channel-EF67LCS6.mjs.map +0 -7
- package/dist/lib/browser/create-channel-thread-CCZTSWQ6.mjs +0 -28
- package/dist/lib/browser/create-channel-thread-CCZTSWQ6.mjs.map +0 -7
- package/dist/lib/browser/create-proposals-CMK7S7VS.mjs.map +0 -7
- package/dist/lib/browser/delete-FSFVU6ZA.mjs.map +0 -7
- package/dist/lib/browser/delete-message-XL5M5J33.mjs.map +0 -7
- package/dist/lib/browser/index.mjs +0 -2334
- package/dist/lib/browser/index.mjs.map +0 -7
- package/dist/lib/browser/meta.json +0 -1
- package/dist/lib/browser/on-create-space-VYS2JGVT.mjs +0 -25
- package/dist/lib/browser/on-create-space-VYS2JGVT.mjs.map +0 -7
- package/dist/lib/browser/operations/index.mjs +0 -14
- package/dist/lib/browser/operations/index.mjs.map +0 -7
- package/dist/lib/browser/restore-2ZGMKUSD.mjs.map +0 -7
- package/dist/lib/browser/restore-message-OYEGWPII.mjs.map +0 -7
- package/dist/lib/browser/select-VG2XLULE.mjs.map +0 -7
- package/dist/lib/browser/toggle-resolved-MM6YC5BU.mjs.map +0 -7
- package/dist/lib/browser/types/index.mjs +0 -12
- package/dist/lib/node-esm/add-message-XWKHLNS6.mjs +0 -98
- package/dist/lib/node-esm/add-message-XWKHLNS6.mjs.map +0 -7
- package/dist/lib/node-esm/blueprints/index.mjs +0 -38
- package/dist/lib/node-esm/blueprints/index.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +0 -11
- package/dist/lib/node-esm/chunk-JTHXNWKJ.mjs +0 -260
- package/dist/lib/node-esm/chunk-JTHXNWKJ.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-SDRAQNSQ.mjs +0 -62
- package/dist/lib/node-esm/chunk-SDRAQNSQ.mjs.map +0 -7
- package/dist/lib/node-esm/create-XAYNDVU2.mjs +0 -56
- package/dist/lib/node-esm/create-XAYNDVU2.mjs.map +0 -7
- package/dist/lib/node-esm/create-channel-UYWUNB3L.mjs +0 -22
- package/dist/lib/node-esm/create-channel-UYWUNB3L.mjs.map +0 -7
- package/dist/lib/node-esm/create-channel-thread-UQF2SBHS.mjs +0 -29
- package/dist/lib/node-esm/create-channel-thread-UQF2SBHS.mjs.map +0 -7
- package/dist/lib/node-esm/create-proposals-5FJNURKH.mjs +0 -58
- package/dist/lib/node-esm/create-proposals-5FJNURKH.mjs.map +0 -7
- package/dist/lib/node-esm/delete-WRODXR3E.mjs +0 -60
- package/dist/lib/node-esm/delete-WRODXR3E.mjs.map +0 -7
- package/dist/lib/node-esm/delete-message-TAHCYTW2.mjs +0 -65
- package/dist/lib/node-esm/delete-message-TAHCYTW2.mjs.map +0 -7
- package/dist/lib/node-esm/index.mjs +0 -2335
- package/dist/lib/node-esm/index.mjs.map +0 -7
- package/dist/lib/node-esm/meta.json +0 -1
- package/dist/lib/node-esm/on-create-space-XDY2YXPV.mjs +0 -26
- package/dist/lib/node-esm/on-create-space-XDY2YXPV.mjs.map +0 -7
- package/dist/lib/node-esm/operations/index.mjs +0 -15
- package/dist/lib/node-esm/operations/index.mjs.map +0 -7
- package/dist/lib/node-esm/restore-T3QA7TSL.mjs +0 -34
- package/dist/lib/node-esm/restore-T3QA7TSL.mjs.map +0 -7
- package/dist/lib/node-esm/restore-message-WFTEVBEV.mjs +0 -43
- package/dist/lib/node-esm/restore-message-WFTEVBEV.mjs.map +0 -7
- package/dist/lib/node-esm/select-Q4UDWJJF.mjs +0 -27
- package/dist/lib/node-esm/select-Q4UDWJJF.mjs.map +0 -7
- package/dist/lib/node-esm/toggle-resolved-33XTAK2H.mjs +0 -46
- package/dist/lib/node-esm/toggle-resolved-33XTAK2H.mjs.map +0 -7
- package/dist/lib/node-esm/types/index.mjs +0 -13
- package/dist/types/src/calls/call-manager.d.ts +0 -87
- package/dist/types/src/calls/call-manager.d.ts.map +0 -1
- package/dist/types/src/calls/call-swarm-synchronizer.d.ts +0 -66
- package/dist/types/src/calls/call-swarm-synchronizer.d.ts.map +0 -1
- package/dist/types/src/calls/index.d.ts +0 -7
- package/dist/types/src/calls/index.d.ts.map +0 -1
- package/dist/types/src/calls/media-manager.d.ts +0 -60
- package/dist/types/src/calls/media-manager.d.ts.map +0 -1
- package/dist/types/src/calls/speaking-monitor.d.ts +0 -24
- package/dist/types/src/calls/speaking-monitor.d.ts.map +0 -1
- package/dist/types/src/calls/types.d.ts +0 -45
- package/dist/types/src/calls/types.d.ts.map +0 -1
- package/dist/types/src/calls/util/audio.d.ts +0 -6
- package/dist/types/src/calls/util/audio.d.ts.map +0 -1
- package/dist/types/src/calls/util/calls-service.d.ts +0 -77
- package/dist/types/src/calls/util/calls-service.d.ts.map +0 -1
- package/dist/types/src/calls/util/history-cache.d.ts +0 -11
- package/dist/types/src/calls/util/history-cache.d.ts.map +0 -1
- package/dist/types/src/calls/util/index.d.ts +0 -5
- package/dist/types/src/calls/util/index.d.ts.map +0 -1
- package/dist/types/src/calls/util/media.d.ts +0 -6
- package/dist/types/src/calls/util/media.d.ts.map +0 -1
- package/dist/types/src/calls/util/stub-media-streams.d.ts +0 -18
- package/dist/types/src/calls/util/stub-media-streams.d.ts.map +0 -1
- package/dist/types/src/calls/util/task-scheduling.d.ts +0 -17
- package/dist/types/src/calls/util/task-scheduling.d.ts.map +0 -1
- package/dist/types/src/calls-service.stories.d.ts +0 -23
- package/dist/types/src/calls-service.stories.d.ts.map +0 -1
- package/dist/types/src/capabilities/call-manager.d.ts +0 -6
- package/dist/types/src/capabilities/call-manager.d.ts.map +0 -1
- package/dist/types/src/capabilities/react-root.d.ts +0 -9
- package/dist/types/src/capabilities/react-root.d.ts.map +0 -1
- package/dist/types/src/components/Call/Call.d.ts +0 -17
- package/dist/types/src/components/Call/Call.d.ts.map +0 -1
- package/dist/types/src/components/Call/Toolbar.d.ts +0 -16
- package/dist/types/src/components/Call/Toolbar.d.ts.map +0 -1
- package/dist/types/src/components/Call/index.d.ts +0 -3
- package/dist/types/src/components/Call/index.d.ts.map +0 -1
- package/dist/types/src/components/Lobby/Lobby.d.ts +0 -15
- package/dist/types/src/components/Lobby/Lobby.d.ts.map +0 -1
- package/dist/types/src/components/Lobby/index.d.ts +0 -2
- package/dist/types/src/components/Lobby/index.d.ts.map +0 -1
- package/dist/types/src/components/Media/AudioStream.d.ts +0 -6
- package/dist/types/src/components/Media/AudioStream.d.ts.map +0 -1
- package/dist/types/src/components/Media/VideoObject.d.ts +0 -15
- package/dist/types/src/components/Media/VideoObject.d.ts.map +0 -1
- package/dist/types/src/components/Media/VideoObject.stories.d.ts +0 -22
- package/dist/types/src/components/Media/VideoObject.stories.d.ts.map +0 -1
- package/dist/types/src/components/Media/index.d.ts +0 -3
- package/dist/types/src/components/Media/index.d.ts.map +0 -1
- package/dist/types/src/components/Participant/Participant.d.ts +0 -6
- package/dist/types/src/components/Participant/Participant.d.ts.map +0 -1
- package/dist/types/src/components/Participant/ParticipantGrid.d.ts +0 -11
- package/dist/types/src/components/Participant/ParticipantGrid.d.ts.map +0 -1
- package/dist/types/src/components/Participant/index.d.ts +0 -3
- package/dist/types/src/components/Participant/index.d.ts.map +0 -1
- package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.d.ts +0 -32
- package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.d.ts.map +0 -1
- package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +0 -178
- package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +0 -1
- package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts +0 -21
- package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts.map +0 -1
- package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.d.ts +0 -12
- package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.d.ts.map +0 -1
- package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.stories.d.ts +0 -164
- package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.stories.d.ts.map +0 -1
- package/dist/types/src/components/ResponsiveGrid/index.d.ts +0 -4
- package/dist/types/src/components/ResponsiveGrid/index.d.ts.map +0 -1
- package/dist/types/src/containers/CallDebugPanel/CallDebugPanel.d.ts +0 -15
- package/dist/types/src/containers/CallDebugPanel/CallDebugPanel.d.ts.map +0 -1
- package/dist/types/src/containers/CallDebugPanel/index.d.ts +0 -2
- package/dist/types/src/containers/CallSidebar/CallSidebar.d.ts +0 -3
- package/dist/types/src/containers/CallSidebar/CallSidebar.d.ts.map +0 -1
- package/dist/types/src/containers/CallSidebar/index.d.ts +0 -2
- package/dist/types/src/containers/CallSidebar/index.d.ts.map +0 -1
- package/dist/types/src/containers/ChannelContainer/ChannelContainer.d.ts +0 -12
- package/dist/types/src/containers/ChannelContainer/ChannelContainer.d.ts.map +0 -1
- package/dist/types/src/containers/ChannelContainer/ChannelContainer.stories.d.ts +0 -162
- package/dist/types/src/containers/ChannelContainer/ChannelContainer.stories.d.ts.map +0 -1
- package/dist/types/src/containers/ChannelContainer/index.d.ts +0 -2
- package/dist/types/src/containers/ChannelContainer/index.d.ts.map +0 -1
- package/dist/types/src/containers/ChatContainer/ChatContainer.d.ts +0 -16
- package/dist/types/src/containers/ChatContainer/ChatContainer.d.ts.map +0 -1
- package/dist/types/src/containers/ChatContainer/ChatContainer.stories.d.ts.map +0 -1
- package/dist/types/src/containers/ChatContainer/index.d.ts +0 -4
- package/dist/types/src/containers/ChatContainer/index.d.ts.map +0 -1
- package/dist/types/src/containers/ThreadCompanion/ThreadCompanion.d.ts +0 -8
- package/dist/types/src/containers/ThreadCompanion/ThreadCompanion.d.ts.map +0 -1
- package/dist/types/src/containers/ThreadCompanion/index.d.ts +0 -2
- package/dist/types/src/containers/ThreadCompanion/index.d.ts.map +0 -1
- package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts +0 -2
- package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts.map +0 -1
- package/dist/types/src/hooks/useDebugMode.d.ts +0 -2
- package/dist/types/src/hooks/useDebugMode.d.ts.map +0 -1
- package/dist/types/src/hooks/useInaudibleAudioStreamTrack.d.ts +0 -2
- package/dist/types/src/hooks/useInaudibleAudioStreamTrack.d.ts.map +0 -1
- package/dist/types/src/hooks/useVideoStreamTrack.d.ts +0 -3
- package/dist/types/src/hooks/useVideoStreamTrack.d.ts.map +0 -1
- package/dist/types/src/operations/create-channel-thread.d.ts +0 -5
- package/dist/types/src/operations/create-channel-thread.d.ts.map +0 -1
- package/dist/types/src/operations/definitions.d.ts.map +0 -1
- package/dist/types/src/testing/stories.d.ts +0 -3
- package/dist/types/src/testing/stories.d.ts.map +0 -1
- package/dist/types/src/types/Channel.d.ts +0 -715
- package/dist/types/src/types/Channel.d.ts.map +0 -1
- package/dist/types/src/types/capabilities.d.ts +0 -24
- package/dist/types/src/types/capabilities.d.ts.map +0 -1
- package/src/calls/call-manager.ts +0 -270
- package/src/calls/call-swarm-synchronizer.ts +0 -350
- package/src/calls/index.ts +0 -10
- package/src/calls/media-manager.ts +0 -378
- package/src/calls/speaking-monitor.ts +0 -85
- package/src/calls/types.ts +0 -74
- package/src/calls/util/audio.ts +0 -58
- package/src/calls/util/calls-service.ts +0 -580
- package/src/calls/util/history-cache.ts +0 -27
- package/src/calls/util/index.ts +0 -8
- package/src/calls/util/media.ts +0 -52
- package/src/calls/util/stub-media-streams.ts +0 -127
- package/src/calls/util/task-scheduling.ts +0 -92
- package/src/calls-service.stories.tsx +0 -230
- package/src/capabilities/call-manager.ts +0 -27
- package/src/capabilities/react-root.tsx +0 -20
- package/src/components/Call/Call.tsx +0 -93
- package/src/components/Call/Toolbar.tsx +0 -199
- package/src/components/Call/index.ts +0 -6
- package/src/components/Lobby/Lobby.tsx +0 -122
- package/src/components/Lobby/index.ts +0 -5
- package/src/components/Media/AudioStream.tsx +0 -67
- package/src/components/Media/VideoObject.stories.tsx +0 -59
- package/src/components/Media/VideoObject.tsx +0 -58
- package/src/components/Media/index.ts +0 -6
- package/src/components/Participant/Participant.tsx +0 -77
- package/src/components/Participant/ParticipantGrid.tsx +0 -88
- package/src/components/Participant/index.ts +0 -6
- package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +0 -157
- package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +0 -341
- package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +0 -134
- package/src/components/ResponsiveGrid/ResponsivePanel.stories.tsx +0 -53
- package/src/components/ResponsiveGrid/ResponsivePanel.tsx +0 -31
- package/src/components/ResponsiveGrid/index.ts +0 -7
- package/src/containers/CallDebugPanel/CallDebugPanel.tsx +0 -173
- package/src/containers/CallDebugPanel/index.ts +0 -5
- package/src/containers/CallSidebar/CallSidebar.tsx +0 -18
- package/src/containers/CallSidebar/index.ts +0 -5
- package/src/containers/ChannelContainer/ChannelContainer.stories.tsx +0 -61
- package/src/containers/ChannelContainer/ChannelContainer.tsx +0 -223
- package/src/containers/ChannelContainer/index.ts +0 -5
- package/src/containers/ChatContainer/ChatContainer.tsx +0 -131
- package/src/containers/ChatContainer/index.ts +0 -8
- package/src/containers/ThreadCompanion/index.ts +0 -5
- package/src/hooks/useBlackCanvasStreamTrack.tsx +0 -27
- package/src/hooks/useDebugMode.ts +0 -25
- package/src/hooks/useInaudibleAudioStreamTrack.tsx +0 -27
- package/src/hooks/useVideoStreamTrack.tsx +0 -36
- package/src/operations/create-channel-thread.ts +0 -26
- package/src/operations/definitions.ts +0 -177
- package/src/testing/stories.ts +0 -51
- package/src/types/Channel.ts +0 -37
- package/src/types/capabilities.ts +0 -36
- package/src/typings/peermetrics-webrtc-stats.d.ts +0 -46
- package/src/typings.d.ts +0 -8
- /package/dist/lib/{browser/chunk-J5LGTIGS.mjs.map → neutral/ChannelChat-LZEDFJVD.mjs.map} +0 -0
- /package/dist/lib/{browser/types → neutral/blueprints}/index.mjs.map +0 -0
- /package/dist/lib/{browser → neutral}/chunk-J5LGTIGS.mjs +0 -0
- /package/dist/lib/{node-esm/chunk-HSLMI22Q.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
- /package/dist/lib/{node-esm/types → neutral/hooks}/index.mjs.map +0 -0
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import * as LanguageModel from '@effect/ai/LanguageModel';
|
|
6
|
+
import * as Tool from '@effect/ai/Tool';
|
|
7
|
+
import * as Toolkit from '@effect/ai/Toolkit';
|
|
8
|
+
import * as Effect from 'effect/Effect';
|
|
9
|
+
import * as Layer from 'effect/Layer';
|
|
10
|
+
import * as Schema from 'effect/Schema';
|
|
11
|
+
|
|
12
|
+
import { AiPreprocessor, AiService } from '@dxos/ai';
|
|
13
|
+
import { Capability } from '@dxos/app-framework';
|
|
14
|
+
import { AppCapabilities } from '@dxos/app-toolkit';
|
|
15
|
+
import { Filter, Obj, Ref, Relation } from '@dxos/echo';
|
|
16
|
+
import { createDocAccessor, getRangeFromCursor, toCursorRange, updateText } from '@dxos/echo-db';
|
|
17
|
+
import { log } from '@dxos/log';
|
|
18
|
+
import { Markdown } from '@dxos/plugin-markdown';
|
|
19
|
+
import { AnchoredTo, Message } from '@dxos/types';
|
|
20
|
+
import { trim } from '@dxos/util';
|
|
21
|
+
|
|
22
|
+
import { AgentIdentity, ThreadCapabilities } from '../types';
|
|
23
|
+
|
|
24
|
+
const DEFAULT_MODEL = '@anthropic/claude-sonnet-4-5';
|
|
25
|
+
|
|
26
|
+
const baseInstructions = trim`
|
|
27
|
+
You are a helpful assistant participating in a comment thread on a document.
|
|
28
|
+
Read the document and the conversation history; the user's requests usually
|
|
29
|
+
refer to the document content.
|
|
30
|
+
|
|
31
|
+
When the user asks you to MODIFY the document (translate, rewrite, edit, fix,
|
|
32
|
+
refactor, etc.) call ONE of the edit tools. Do NOT paste the new content into
|
|
33
|
+
chat — always use the tool.
|
|
34
|
+
|
|
35
|
+
- If the thread has an anchored selection (shown in <selection>...</selection>
|
|
36
|
+
below), use \`editAnchoredRange\` with ONLY the replacement text for that
|
|
37
|
+
span. Leave the rest of the document untouched.
|
|
38
|
+
- If there is no anchored selection, use \`updateDocument\` with the FULL new
|
|
39
|
+
markdown content.
|
|
40
|
+
|
|
41
|
+
AFTER calling an edit tool you MUST also produce a chat reply that:
|
|
42
|
+
1. States in one line what you changed (e.g. "Translated the selection to
|
|
43
|
+
Japanese.");
|
|
44
|
+
2. Optionally adds one or two sentences explaining notable choices,
|
|
45
|
+
caveats, or suggesting a follow-up. Keep the whole reply under 60 words.
|
|
46
|
+
3. Does NOT repeat the new document content — it's already shown in the
|
|
47
|
+
editor on the left.
|
|
48
|
+
|
|
49
|
+
When the user asks a QUESTION (or just chats), reply in plain text under
|
|
50
|
+
80 words and do not call any edit tool.
|
|
51
|
+
|
|
52
|
+
Do not address the user as 'user'; use their name if known. Never call yourself.
|
|
53
|
+
`;
|
|
54
|
+
|
|
55
|
+
const EditAnchoredRangeTool = Tool.make('editAnchoredRange', {
|
|
56
|
+
description:
|
|
57
|
+
'Replace the text of the anchored selection in the markdown document. Call this for in-place edits when a <selection> is provided.',
|
|
58
|
+
parameters: {
|
|
59
|
+
replacement: Schema.String.annotations({
|
|
60
|
+
description: 'The new text for the anchored range. Only this span will be replaced.',
|
|
61
|
+
}),
|
|
62
|
+
},
|
|
63
|
+
success: Schema.String,
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
const UpdateDocumentTool = Tool.make('updateDocument', {
|
|
67
|
+
description:
|
|
68
|
+
'Replace the entire markdown content of the document. Call this for in-place edits when there is no anchored selection.',
|
|
69
|
+
parameters: {
|
|
70
|
+
content: Schema.String.annotations({
|
|
71
|
+
description: 'The full new markdown content of the document.',
|
|
72
|
+
}),
|
|
73
|
+
},
|
|
74
|
+
success: Schema.String,
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
type EditTarget =
|
|
78
|
+
| {
|
|
79
|
+
kind: 'anchored';
|
|
80
|
+
text: Obj.Any;
|
|
81
|
+
snippet: string;
|
|
82
|
+
from: number;
|
|
83
|
+
to: number;
|
|
84
|
+
relation: AnchoredTo.AnchoredTo;
|
|
85
|
+
}
|
|
86
|
+
| { kind: 'document'; text: Obj.Any }
|
|
87
|
+
| { kind: 'none' };
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Resolve the agent's edit target for this turn:
|
|
91
|
+
* - 'anchored' when the thread is anchored to a span of the doc — agent edits
|
|
92
|
+
* only that span via `editAnchoredRange`.
|
|
93
|
+
* - 'document' when the subject is a Markdown.Document but the thread has no
|
|
94
|
+
* anchor — agent may replace the whole doc via `updateDocument`.
|
|
95
|
+
* - 'none' when the subject isn't editable text — no edit tools wired.
|
|
96
|
+
*/
|
|
97
|
+
const resolveEditTarget = (thread: Obj.Any, subject: Obj.Any): EditTarget => {
|
|
98
|
+
if (!Obj.instanceOf(Markdown.Document, subject)) {
|
|
99
|
+
return { kind: 'none' };
|
|
100
|
+
}
|
|
101
|
+
const text = subject.content?.target;
|
|
102
|
+
if (!text) {
|
|
103
|
+
return { kind: 'none' };
|
|
104
|
+
}
|
|
105
|
+
const db = Obj.getDatabase(thread);
|
|
106
|
+
if (!db) {
|
|
107
|
+
return { kind: 'document', text };
|
|
108
|
+
}
|
|
109
|
+
const relations = db.query(Filter.type(AnchoredTo.AnchoredTo)).runSync();
|
|
110
|
+
const ours = relations.find(
|
|
111
|
+
(relation: AnchoredTo.AnchoredTo) =>
|
|
112
|
+
Relation.getSource(relation) === thread && Relation.getTarget(relation) === subject,
|
|
113
|
+
);
|
|
114
|
+
if (!ours?.anchor) {
|
|
115
|
+
return { kind: 'document', text };
|
|
116
|
+
}
|
|
117
|
+
try {
|
|
118
|
+
const accessor = createDocAccessor(text, ['content']);
|
|
119
|
+
const range = getRangeFromCursor(accessor, ours.anchor);
|
|
120
|
+
if (!range || range.start === range.end) {
|
|
121
|
+
return { kind: 'document', text };
|
|
122
|
+
}
|
|
123
|
+
const content = (text as unknown as { content: string }).content ?? '';
|
|
124
|
+
return {
|
|
125
|
+
kind: 'anchored',
|
|
126
|
+
text,
|
|
127
|
+
from: range.start,
|
|
128
|
+
to: range.end,
|
|
129
|
+
snippet: content.slice(range.start, range.end),
|
|
130
|
+
relation: ours,
|
|
131
|
+
};
|
|
132
|
+
} catch (err) {
|
|
133
|
+
log.warn('failed to resolve anchored range; falling back to whole-document edit', { error: err });
|
|
134
|
+
return { kind: 'document', text };
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Build the system prompt for a turn. Inlines the doc content and, when the
|
|
140
|
+
* thread is anchored, the highlighted snippet so the agent can target just
|
|
141
|
+
* that span.
|
|
142
|
+
*/
|
|
143
|
+
const buildInstructions = (subject: Obj.Any, target: EditTarget): string => {
|
|
144
|
+
if (!Obj.instanceOf(Markdown.Document, subject)) {
|
|
145
|
+
return baseInstructions;
|
|
146
|
+
}
|
|
147
|
+
const content = subject.content?.target?.content ?? '';
|
|
148
|
+
if (!content) {
|
|
149
|
+
return baseInstructions;
|
|
150
|
+
}
|
|
151
|
+
const selectionBlock = target.kind === 'anchored' ? `\n\n<selection>\n${target.snippet}\n</selection>` : '';
|
|
152
|
+
return trim`
|
|
153
|
+
${baseInstructions}
|
|
154
|
+
|
|
155
|
+
<document name="${subject.name ?? 'untitled'}">
|
|
156
|
+
${content}
|
|
157
|
+
</document>${selectionBlock}
|
|
158
|
+
`;
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Normalises messages for the LLM prompt: user-authored messages in comment
|
|
163
|
+
* threads carry no explicit role (only assistant messages do), but the prompt
|
|
164
|
+
* preprocessor switches on `role` and drops anything that isn't 'user' or
|
|
165
|
+
* 'assistant'. Stamp `role: 'user'` on every non-assistant turn before
|
|
166
|
+
* preprocessing.
|
|
167
|
+
*/
|
|
168
|
+
const normalizeRoles = (messages: readonly Message.Message[]): Message.Message[] =>
|
|
169
|
+
messages.map((message) =>
|
|
170
|
+
message.sender.role === 'assistant'
|
|
171
|
+
? message
|
|
172
|
+
: { ...message, sender: { ...message.sender, role: 'user' as const } },
|
|
173
|
+
);
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Default AgentRunner implementation. One-shot LLM call per scheduled turn —
|
|
177
|
+
* loads the thread, builds a prompt from the message history, generates a
|
|
178
|
+
* reply via `LanguageModel.generateText`, and appends the response as an
|
|
179
|
+
* assistant message on the same thread.
|
|
180
|
+
*
|
|
181
|
+
* Edit tools (`editAnchoredRange`, `updateDocument`) are wired per turn based
|
|
182
|
+
* on whether the thread has an anchored range. Splicing uses `updateText`
|
|
183
|
+
* (Automerge-diff based) so cursors on other comment threads stay valid.
|
|
184
|
+
*
|
|
185
|
+
* The `AiServiceLayer` capability is resolved per turn (not at module
|
|
186
|
+
* activation) so plugin order doesn't matter for live wiring. When no host
|
|
187
|
+
* has contributed an `AppCapabilities.AiServiceLayer`, the runner logs a
|
|
188
|
+
* warning and returns; storybook stub paths contribute their own
|
|
189
|
+
* `AgentRunner` earlier in plugin order to short-circuit this module entirely.
|
|
190
|
+
*/
|
|
191
|
+
export default Capability.makeModule(
|
|
192
|
+
Effect.fnUntraced(function* () {
|
|
193
|
+
const runner: ThreadCapabilities.AgentRunner = {
|
|
194
|
+
run: ({ thread, subject }) =>
|
|
195
|
+
Effect.gen(function* () {
|
|
196
|
+
const aiServiceLayers = yield* Capability.getAll(AppCapabilities.AiServiceLayer);
|
|
197
|
+
const aiServiceLayer = aiServiceLayers[0];
|
|
198
|
+
if (!aiServiceLayer) {
|
|
199
|
+
log.warn('comment-thread agent runner: no AiServiceLayer contributed; skipping turn');
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
const identity = yield* Capability.get(AgentIdentity);
|
|
203
|
+
|
|
204
|
+
// Load every referenced message into a plain Message.Message[].
|
|
205
|
+
const loaded = yield* Effect.forEach(
|
|
206
|
+
thread.messages,
|
|
207
|
+
(messageRef) => Effect.promise(() => messageRef.load()),
|
|
208
|
+
{ concurrency: 'unbounded' },
|
|
209
|
+
);
|
|
210
|
+
const history = normalizeRoles(loaded);
|
|
211
|
+
|
|
212
|
+
const target = resolveEditTarget(thread, subject);
|
|
213
|
+
const prompt = yield* AiPreprocessor.preprocessPrompt(history, {
|
|
214
|
+
system: buildInstructions(subject, target),
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
// Capture which edit tool fired so we can synthesize a fallback chat
|
|
218
|
+
// ack when the model elides the post-tool message.
|
|
219
|
+
let editOutcome: 'anchored' | 'document' | undefined;
|
|
220
|
+
|
|
221
|
+
const toolkit = Toolkit.make(EditAnchoredRangeTool, UpdateDocumentTool);
|
|
222
|
+
const toolkitLayer = toolkit.toLayer({
|
|
223
|
+
editAnchoredRange: ({ replacement }) =>
|
|
224
|
+
Effect.sync(() => {
|
|
225
|
+
if (target.kind !== 'anchored') {
|
|
226
|
+
return 'No anchored selection on this thread; use updateDocument instead.';
|
|
227
|
+
}
|
|
228
|
+
const original = (target.text as unknown as { content: string }).content ?? '';
|
|
229
|
+
const next = original.slice(0, target.from) + replacement + original.slice(target.to);
|
|
230
|
+
updateText(target.text, ['content'], next);
|
|
231
|
+
|
|
232
|
+
// Cursor at `to` (left-associated) can collapse to `from` after a
|
|
233
|
+
// delete-and-insert at that range, leaving the comment's anchor
|
|
234
|
+
// pointing at a zero-width span. Rewrite AnchoredTo.anchor to
|
|
235
|
+
// span the newly-inserted text so the editor marker continues
|
|
236
|
+
// to highlight the replaced range.
|
|
237
|
+
const newTo = target.from + replacement.length;
|
|
238
|
+
const accessor = createDocAccessor(target.text, ['content']);
|
|
239
|
+
const newAnchor = toCursorRange(accessor, target.from, newTo);
|
|
240
|
+
Relation.update(target.relation, (relation) => {
|
|
241
|
+
(relation as Relation.Mutable<AnchoredTo.AnchoredTo>).anchor = newAnchor;
|
|
242
|
+
});
|
|
243
|
+
editOutcome = 'anchored';
|
|
244
|
+
return 'Anchored range replaced.';
|
|
245
|
+
}),
|
|
246
|
+
updateDocument: ({ content }) =>
|
|
247
|
+
Effect.sync(() => {
|
|
248
|
+
if (target.kind === 'none') {
|
|
249
|
+
return 'No editable document in scope.';
|
|
250
|
+
}
|
|
251
|
+
updateText(target.text, ['content'], content);
|
|
252
|
+
editOutcome = 'document';
|
|
253
|
+
return 'Document updated.';
|
|
254
|
+
}),
|
|
255
|
+
});
|
|
256
|
+
|
|
257
|
+
const response = yield* LanguageModel.generateText({ prompt, toolkit }).pipe(
|
|
258
|
+
Effect.scoped,
|
|
259
|
+
Effect.provide(AiService.model(DEFAULT_MODEL).pipe(Layer.provide(aiServiceLayer))),
|
|
260
|
+
Effect.provide(toolkitLayer),
|
|
261
|
+
);
|
|
262
|
+
|
|
263
|
+
// The chat message defaults to whatever the model returned, but when
|
|
264
|
+
// the model elided its post-tool reply (some providers do) fall back
|
|
265
|
+
// to a synthesized ack so the thread always reflects that something
|
|
266
|
+
// happened.
|
|
267
|
+
const fallbackByOutcome: Record<'anchored' | 'document', string> = {
|
|
268
|
+
anchored: 'Updated the highlighted selection.',
|
|
269
|
+
document: 'Updated the document.',
|
|
270
|
+
};
|
|
271
|
+
const text =
|
|
272
|
+
response.text.trim().length > 0 ? response.text : editOutcome ? fallbackByOutcome[editOutcome] : '';
|
|
273
|
+
if (text.length === 0) {
|
|
274
|
+
// Nothing to say and nothing was edited — don't post a hollow bubble.
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
const reply = Obj.make(Message.Message, {
|
|
279
|
+
created: new Date().toISOString(),
|
|
280
|
+
sender: { role: 'assistant', name: identity.name, identityDid: identity.identityDid },
|
|
281
|
+
blocks: [{ _tag: 'text', text }],
|
|
282
|
+
});
|
|
283
|
+
Obj.update(thread, (thread) => {
|
|
284
|
+
(thread.messages as Ref.Ref<Message.Message>[]).push(Ref.make(reply));
|
|
285
|
+
});
|
|
286
|
+
}),
|
|
287
|
+
};
|
|
288
|
+
|
|
289
|
+
return Capability.contributes(ThreadCapabilities.AgentRunner, runner);
|
|
290
|
+
}),
|
|
291
|
+
);
|
|
@@ -8,16 +8,17 @@ import * as Option from 'effect/Option';
|
|
|
8
8
|
|
|
9
9
|
import { Capability } from '@dxos/app-framework';
|
|
10
10
|
import { AppCapabilities, AppNode } from '@dxos/app-toolkit';
|
|
11
|
+
import { Operation } from '@dxos/compute';
|
|
11
12
|
import { Obj } from '@dxos/echo';
|
|
12
|
-
import {
|
|
13
|
-
import { AttentionCapabilities } from '@dxos/plugin-attention/types';
|
|
13
|
+
import { AttentionCapabilities } from '@dxos/plugin-attention';
|
|
14
14
|
import { GraphBuilder, NodeMatcher } from '@dxos/plugin-graph';
|
|
15
15
|
import { linkedSegment } from '@dxos/react-ui-attention';
|
|
16
16
|
import { type SelectionManager, type SelectionMode, defaultSelection } from '@dxos/react-ui-attention';
|
|
17
|
+
import { Channel } from '@dxos/types';
|
|
17
18
|
|
|
18
19
|
import { meta } from '#meta';
|
|
19
|
-
import { ThreadOperation } from '#
|
|
20
|
-
import {
|
|
20
|
+
import { ThreadOperation } from '#types';
|
|
21
|
+
import { ThreadCapabilities, type ThreadState } from '#types';
|
|
21
22
|
|
|
22
23
|
import { getAnchor } from '../util';
|
|
23
24
|
|
|
@@ -55,74 +56,22 @@ const whenCommentableObject = NodeMatcher.whenAll(
|
|
|
55
56
|
NodeMatcher.whenNot(NodeMatcher.whenEchoTypeMatches(Channel.Channel)),
|
|
56
57
|
);
|
|
57
58
|
|
|
58
|
-
// TODO(wittjosiah): Highlight active calls in L1.
|
|
59
|
-
// Track active meetings by subscribing to meetings query and polling the swarms of recent meetings in the space.
|
|
60
59
|
export default Capability.makeModule(
|
|
61
60
|
Effect.fnUntraced(function* () {
|
|
62
61
|
const capabilities = yield* Capability.Service;
|
|
63
62
|
|
|
64
|
-
const
|
|
65
|
-
capabilities.getAll(AppCapabilities.
|
|
63
|
+
const getCommentConfig = (typename: string) =>
|
|
64
|
+
capabilities.getAll(AppCapabilities.CommentConfig).find(({ id }) => id === typename);
|
|
66
65
|
|
|
67
66
|
const extensions = yield* Effect.all([
|
|
68
67
|
GraphBuilder.createExtension({
|
|
69
|
-
id: '
|
|
70
|
-
match: NodeMatcher.whenRoot,
|
|
71
|
-
connector: (node, get) => {
|
|
72
|
-
const callManagerAtom = capabilities.atom(ThreadCapabilities.CallManager);
|
|
73
|
-
const [call] = get(callManagerAtom);
|
|
74
|
-
if (!call) {
|
|
75
|
-
return Effect.succeed([]);
|
|
76
|
-
}
|
|
77
|
-
// Use derived joinedAtom for efficient subscription.
|
|
78
|
-
const joined = get(call.joinedAtom);
|
|
79
|
-
return Effect.succeed(
|
|
80
|
-
joined
|
|
81
|
-
? [
|
|
82
|
-
AppNode.makeDeckCompanion({
|
|
83
|
-
id: 'active-call',
|
|
84
|
-
label: ['call-panel.label', { ns: meta.id }],
|
|
85
|
-
icon: 'ph--video-conference--regular',
|
|
86
|
-
data: null,
|
|
87
|
-
position: 'hoist',
|
|
88
|
-
}),
|
|
89
|
-
]
|
|
90
|
-
: [],
|
|
91
|
-
);
|
|
92
|
-
},
|
|
93
|
-
}),
|
|
94
|
-
GraphBuilder.createTypeExtension({
|
|
95
|
-
id: 'channel-chat-companion',
|
|
96
|
-
type: Channel.Channel,
|
|
97
|
-
connector: (channel, get) => {
|
|
98
|
-
const callManager = capabilities.get(ThreadCapabilities.CallManager);
|
|
99
|
-
// Use derived atoms for efficient subscription.
|
|
100
|
-
const joined = get(callManager.joinedAtom);
|
|
101
|
-
const roomId = get(callManager.roomIdAtom);
|
|
102
|
-
const isActive = joined && roomId === Obj.getDXN(channel).toString();
|
|
103
|
-
if (!isActive) {
|
|
104
|
-
return Effect.succeed([]);
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
return Effect.succeed([
|
|
108
|
-
AppNode.makeCompanion({
|
|
109
|
-
id: 'chat',
|
|
110
|
-
label: ['channel-companion.label', { ns: meta.id }],
|
|
111
|
-
icon: 'ph--hash--regular',
|
|
112
|
-
data: 'chat',
|
|
113
|
-
position: 'hoist',
|
|
114
|
-
}),
|
|
115
|
-
]);
|
|
116
|
-
},
|
|
117
|
-
}),
|
|
118
|
-
GraphBuilder.createExtension({
|
|
119
|
-
id: 'comments-companion',
|
|
68
|
+
id: 'commentsCompanion',
|
|
120
69
|
match: (node) => {
|
|
121
70
|
if (!Obj.isObject(node.data) || Option.isNone(whenCommentableObject(node))) {
|
|
122
71
|
return Option.none();
|
|
123
72
|
}
|
|
124
|
-
const
|
|
125
|
-
return
|
|
73
|
+
const commentConfig = getCommentConfig(Obj.getTypename(node.data)!);
|
|
74
|
+
return commentConfig ? Option.some(node) : Option.none();
|
|
126
75
|
},
|
|
127
76
|
connector: () =>
|
|
128
77
|
Effect.succeed([
|
|
@@ -131,33 +80,33 @@ export default Capability.makeModule(
|
|
|
131
80
|
label: ['comments.label', { ns: meta.id }],
|
|
132
81
|
icon: 'ph--chat-text--regular',
|
|
133
82
|
data: 'comments',
|
|
134
|
-
position: '
|
|
83
|
+
position: 'first',
|
|
135
84
|
}),
|
|
136
85
|
]),
|
|
137
86
|
}),
|
|
138
87
|
GraphBuilder.createExtension({
|
|
139
|
-
id: '
|
|
88
|
+
id: 'commentToolbar',
|
|
140
89
|
match: (node) => {
|
|
141
90
|
if (!Obj.isObject(node.data) || Option.isNone(whenCommentableObject(node))) {
|
|
142
91
|
return Option.none();
|
|
143
92
|
}
|
|
144
|
-
const
|
|
145
|
-
return
|
|
93
|
+
const commentConfig = getCommentConfig(Obj.getTypename(node.data)!);
|
|
94
|
+
return commentConfig ? Option.some(node) : Option.none();
|
|
146
95
|
},
|
|
147
96
|
actions: (matched, get) => {
|
|
148
97
|
const object = matched.data;
|
|
149
|
-
const
|
|
98
|
+
const objectUri = Obj.getURI(object);
|
|
150
99
|
const stateAtom = capabilities.atom(ThreadCapabilities.State);
|
|
151
100
|
const selectionManager = capabilities.get(AttentionCapabilities.Selection);
|
|
152
|
-
const
|
|
101
|
+
const commentConfig = getCommentConfig(Obj.getTypename(object)!)!;
|
|
153
102
|
|
|
154
103
|
const disabled = get(
|
|
155
104
|
commentDisabledFamily({
|
|
156
105
|
stateAtom,
|
|
157
106
|
selectionManager,
|
|
158
|
-
objectId:
|
|
159
|
-
commentsType:
|
|
160
|
-
selectionMode:
|
|
107
|
+
objectId: objectUri,
|
|
108
|
+
commentsType: commentConfig.comments,
|
|
109
|
+
selectionMode: commentConfig.selectionMode as SelectionMode | undefined,
|
|
161
110
|
}),
|
|
162
111
|
);
|
|
163
112
|
|
|
@@ -165,10 +114,11 @@ export default Capability.makeModule(
|
|
|
165
114
|
{
|
|
166
115
|
id: 'comment',
|
|
167
116
|
data: Effect.fnUntraced(function* () {
|
|
168
|
-
const
|
|
169
|
-
const selection = selectionManager.getSelection(
|
|
170
|
-
const anchor =
|
|
171
|
-
|
|
117
|
+
const config = getCommentConfig(Obj.getTypename(object)!)!;
|
|
118
|
+
const selection = selectionManager.getSelection(objectUri);
|
|
119
|
+
const anchor =
|
|
120
|
+
(config.comments === 'anchored' ? getAnchor(selection) : undefined) ?? Date.now().toString();
|
|
121
|
+
const name = config.getAnchorLabel?.(object, anchor);
|
|
172
122
|
yield* Operation.invoke(ThreadOperation.Create, {
|
|
173
123
|
anchor,
|
|
174
124
|
name,
|
|
@@ -6,6 +6,8 @@ import * as Effect from 'effect/Effect';
|
|
|
6
6
|
|
|
7
7
|
import { Capability } from '@dxos/app-framework';
|
|
8
8
|
import { AppCapabilities } from '@dxos/app-toolkit';
|
|
9
|
+
// eslint-disable-next-line unused-imports/no-unused-imports
|
|
10
|
+
import type { Blueprint } from '@dxos/compute';
|
|
9
11
|
|
|
10
12
|
import { ThreadBlueprint } from '#blueprints';
|
|
11
13
|
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2023 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import * as Effect from 'effect/Effect';
|
|
6
|
+
|
|
7
|
+
import { Capability } from '@dxos/app-framework';
|
|
8
|
+
import { Operation } from '@dxos/compute';
|
|
9
|
+
import { Type } from '@dxos/echo';
|
|
10
|
+
import { SpaceOperation } from '@dxos/plugin-space';
|
|
11
|
+
import { SpaceCapabilities } from '@dxos/plugin-space';
|
|
12
|
+
import { Channel } from '@dxos/types';
|
|
13
|
+
|
|
14
|
+
export default Capability.makeModule(
|
|
15
|
+
Effect.fnUntraced(function* () {
|
|
16
|
+
return Capability.contributes(SpaceCapabilities.CreateObjectEntry, {
|
|
17
|
+
id: Type.getTypename(Channel.Channel),
|
|
18
|
+
createObject: (props, options) =>
|
|
19
|
+
Effect.gen(function* () {
|
|
20
|
+
const object = Channel.make(props);
|
|
21
|
+
return yield* Operation.invoke(SpaceOperation.AddObject, {
|
|
22
|
+
object,
|
|
23
|
+
target: options.target,
|
|
24
|
+
hidden: true,
|
|
25
|
+
targetNodeId: options.targetNodeId,
|
|
26
|
+
});
|
|
27
|
+
}),
|
|
28
|
+
});
|
|
29
|
+
}),
|
|
30
|
+
);
|
|
@@ -3,17 +3,18 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { Capability } from '@dxos/app-framework';
|
|
6
|
-
|
|
6
|
+
// eslint-disable-next-line unused-imports/no-unused-imports
|
|
7
|
+
import type { Blueprint, OperationHandlerSet } from '@dxos/compute';
|
|
7
8
|
|
|
9
|
+
export const AgentRunner = Capability.lazy('AgentRunner', () => import('./agent-runner'));
|
|
8
10
|
export const AppGraphBuilder = Capability.lazy('AppGraphBuilder', () => import('./app-graph-builder'));
|
|
9
11
|
export const BlueprintDefinition = Capability.lazy('BlueprintDefinition', () => import('./blueprint-definition'));
|
|
10
|
-
export const
|
|
12
|
+
export const CreateObject = Capability.lazy('CreateObject', () => import('./create-object'));
|
|
11
13
|
export const Markdown = Capability.lazy('Markdown', () => import('./markdown'));
|
|
12
14
|
export const OperationHandler = Capability.lazy<OperationHandlerSet.OperationHandlerSet>(
|
|
13
15
|
'OperationHandler',
|
|
14
16
|
() => import('./operation-handler'),
|
|
15
17
|
);
|
|
16
|
-
export const ReactRoot = Capability.lazy('ReactRoot', () => import('./react-root'));
|
|
17
18
|
export const ReactSurface = Capability.lazy('ReactSurface', () => import('./react-surface'));
|
|
18
19
|
export const ThreadSettings = Capability.lazy('ThreadSettings', () => import('./settings'));
|
|
19
20
|
export const ThreadState = Capability.lazy('ThreadState', () => import('./state'));
|
|
@@ -28,7 +28,9 @@ export default Capability.makeModule(
|
|
|
28
28
|
return threads({ registry, stateAtom }, doc, invokePromise);
|
|
29
29
|
},
|
|
30
30
|
({ document: doc }) => {
|
|
31
|
-
if (!doc)
|
|
31
|
+
if (!doc) {
|
|
32
|
+
return [];
|
|
33
|
+
}
|
|
32
34
|
const registry = capabilities.get(Capabilities.AtomRegistry);
|
|
33
35
|
const stateAtom = capabilities.get(ThreadCapabilities.State);
|
|
34
36
|
|
|
@@ -45,7 +47,9 @@ export default Capability.makeModule(
|
|
|
45
47
|
});
|
|
46
48
|
},
|
|
47
49
|
({ document: doc }) => {
|
|
48
|
-
if (!doc)
|
|
50
|
+
if (!doc) {
|
|
51
|
+
return [];
|
|
52
|
+
}
|
|
49
53
|
const { invokePromise } = capabilities.get(Capabilities.OperationInvoker);
|
|
50
54
|
|
|
51
55
|
return EditorView.updateListener.of((update) => {
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import * as Effect from 'effect/Effect';
|
|
6
6
|
|
|
7
7
|
import { Capabilities, Capability } from '@dxos/app-framework';
|
|
8
|
-
import type { OperationHandlerSet } from '@dxos/
|
|
8
|
+
import type { OperationHandlerSet } from '@dxos/compute';
|
|
9
9
|
|
|
10
10
|
import { ThreadOperationHandlerSet } from '#operations';
|
|
11
11
|
|
|
@@ -2,20 +2,19 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { useAtomValue } from '@effect-atom/atom-react';
|
|
6
5
|
import * as Effect from 'effect/Effect';
|
|
7
6
|
import React from 'react';
|
|
8
7
|
|
|
9
8
|
import { Capabilities, Capability } from '@dxos/app-framework';
|
|
10
|
-
import { Surface,
|
|
9
|
+
import { Surface, useSettingsState } from '@dxos/app-framework/ui';
|
|
11
10
|
import { AppSurface } from '@dxos/app-toolkit/ui';
|
|
12
11
|
import { getSpace } from '@dxos/react-client/echo';
|
|
13
|
-
import { Thread } from '@dxos/types';
|
|
12
|
+
import { Channel, Thread } from '@dxos/types';
|
|
14
13
|
|
|
15
14
|
import { ThreadSettings } from '#components';
|
|
16
|
-
import {
|
|
15
|
+
import { ChannelChat, ChannelArticle, CommentsCompanion, ThreadContainer } from '#containers';
|
|
17
16
|
import { meta } from '#meta';
|
|
18
|
-
import {
|
|
17
|
+
import { type Settings } from '#types';
|
|
19
18
|
|
|
20
19
|
export default Capability.makeModule(() =>
|
|
21
20
|
Effect.succeed(
|
|
@@ -24,23 +23,22 @@ export default Capability.makeModule(() =>
|
|
|
24
23
|
id: 'channel',
|
|
25
24
|
filter: AppSurface.object(AppSurface.Article, Channel.Channel),
|
|
26
25
|
component: ({ data: { subject, attendableId }, role }) => (
|
|
27
|
-
<
|
|
26
|
+
<ChannelArticle role={role} subject={subject} attendableId={attendableId} />
|
|
28
27
|
),
|
|
29
28
|
}),
|
|
30
29
|
Surface.create({
|
|
31
|
-
id: '
|
|
30
|
+
id: 'chatCompanion',
|
|
32
31
|
filter: AppSurface.allOf(
|
|
33
32
|
AppSurface.literal(AppSurface.Article, 'chat'),
|
|
34
33
|
AppSurface.companion(AppSurface.Article, Channel.Channel),
|
|
35
34
|
),
|
|
36
35
|
component: ({ data: { companionTo: channel } }) => {
|
|
37
36
|
const space = getSpace(channel);
|
|
38
|
-
|
|
39
|
-
if (!space || !thread) {
|
|
37
|
+
if (!space) {
|
|
40
38
|
return null;
|
|
41
39
|
}
|
|
42
40
|
|
|
43
|
-
return <
|
|
41
|
+
return <ChannelChat channel={channel} space={space} />;
|
|
44
42
|
},
|
|
45
43
|
}),
|
|
46
44
|
Surface.create({
|
|
@@ -52,7 +50,7 @@ export default Capability.makeModule(() =>
|
|
|
52
50
|
return null;
|
|
53
51
|
}
|
|
54
52
|
|
|
55
|
-
return <
|
|
53
|
+
return <ThreadContainer thread={subject} space={space} />;
|
|
56
54
|
},
|
|
57
55
|
}),
|
|
58
56
|
Surface.create({
|
|
@@ -62,30 +60,16 @@ export default Capability.makeModule(() =>
|
|
|
62
60
|
AppSurface.companion(AppSurface.Article),
|
|
63
61
|
),
|
|
64
62
|
// TODO(wittjosiah): This isn't scrolling properly in a plank.
|
|
65
|
-
component: ({ data }) => <
|
|
63
|
+
component: ({ data }) => <CommentsCompanion attendableId={data.attendableId} subject={data.companionTo} />,
|
|
66
64
|
}),
|
|
67
65
|
Surface.create({
|
|
68
|
-
id: '
|
|
66
|
+
id: 'pluginSettings',
|
|
69
67
|
filter: AppSurface.settings(AppSurface.Article, meta.id),
|
|
70
68
|
component: ({ data: { subject } }) => {
|
|
71
69
|
const { settings, updateSettings } = useSettingsState<Settings.Settings>(subject.atom);
|
|
72
70
|
return <ThreadSettings settings={settings} onSettingsChange={updateSettings} />;
|
|
73
71
|
},
|
|
74
72
|
}),
|
|
75
|
-
Surface.create({
|
|
76
|
-
id: 'assistant',
|
|
77
|
-
role: 'deck-companion--active-call',
|
|
78
|
-
component: () => <CallSidebar />,
|
|
79
|
-
}),
|
|
80
|
-
Surface.create({
|
|
81
|
-
id: 'devtools-overview',
|
|
82
|
-
role: 'devtools-overview',
|
|
83
|
-
component: () => {
|
|
84
|
-
const call = useCapability(ThreadCapabilities.CallManager);
|
|
85
|
-
const state = useAtomValue(call.stateAtom);
|
|
86
|
-
return <CallDebugPanel state={state} />;
|
|
87
|
-
},
|
|
88
|
-
}),
|
|
89
73
|
]),
|
|
90
74
|
),
|
|
91
75
|
);
|
|
@@ -9,9 +9,7 @@ import { AppCapabilities } from '@dxos/app-toolkit';
|
|
|
9
9
|
import { createKvsStore } from '@dxos/effect';
|
|
10
10
|
|
|
11
11
|
import { meta } from '#meta';
|
|
12
|
-
import { Settings } from '#types';
|
|
13
|
-
|
|
14
|
-
import { ThreadCapabilities } from '../types/capabilities';
|
|
12
|
+
import { Settings, ThreadCapabilities } from '#types';
|
|
15
13
|
|
|
16
14
|
export default Capability.makeModule(() =>
|
|
17
15
|
Effect.sync(() => {
|
|
@@ -7,7 +7,7 @@ import * as Effect from 'effect/Effect';
|
|
|
7
7
|
import { Capabilities, Capability, UndoMapping } from '@dxos/app-framework';
|
|
8
8
|
|
|
9
9
|
import { meta } from '#meta';
|
|
10
|
-
import { ThreadOperation } from '#
|
|
10
|
+
import { ThreadOperation } from '#types';
|
|
11
11
|
|
|
12
12
|
export default Capability.makeModule(
|
|
13
13
|
Effect.fnUntraced(function* () {
|