@dxos/plugin-assistant 0.8.4-main.5ea62a8 → 0.8.4-main.ae835ea
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/{BlueprintContainer-OWUSKPRK.mjs → BlueprintContainer-GMSYKGSO.mjs} +13 -6
- package/dist/lib/browser/BlueprintContainer-GMSYKGSO.mjs.map +7 -0
- package/dist/lib/browser/{ChatCompanion-FRCVSLPP.mjs → ChatCompanion-M3FDKTQM.mjs} +39 -14
- package/dist/lib/browser/ChatCompanion-M3FDKTQM.mjs.map +7 -0
- package/dist/lib/browser/{ChatContainer-YBJBIVUZ.mjs → ChatContainer-KAH7XITI.mjs} +10 -11
- package/dist/lib/browser/ChatContainer-KAH7XITI.mjs.map +7 -0
- package/dist/lib/browser/{ChatDialog-MTPJLEHM.mjs → ChatDialog-ZWRGABW6.mjs} +8 -10
- package/dist/lib/browser/ChatDialog-ZWRGABW6.mjs.map +7 -0
- package/dist/lib/browser/ai-service-ERTZBTP3.mjs +19 -0
- package/dist/lib/browser/ai-service-ERTZBTP3.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-builder-7AAWTWGA.mjs → app-graph-builder-R5T7BJPC.mjs} +41 -11
- package/dist/lib/browser/app-graph-builder-R5T7BJPC.mjs.map +7 -0
- package/dist/lib/browser/blueprint-definition-AGTDXTXO.mjs +13 -0
- package/dist/lib/browser/chunk-357IHWQL.mjs +1519 -0
- package/dist/lib/browser/chunk-357IHWQL.mjs.map +7 -0
- package/dist/lib/browser/{chunk-6QMISAU6.mjs → chunk-A2NVNXPL.mjs} +15 -12
- package/dist/lib/browser/chunk-A2NVNXPL.mjs.map +7 -0
- package/dist/lib/browser/{chunk-V5H5CCZA.mjs → chunk-CQW6UPJM.mjs} +24 -43
- package/dist/lib/browser/chunk-CQW6UPJM.mjs.map +7 -0
- package/dist/lib/browser/{chunk-SMIVXXAI.mjs → chunk-GNI6HL6G.mjs} +37 -20
- package/dist/lib/browser/chunk-GNI6HL6G.mjs.map +7 -0
- package/dist/lib/browser/chunk-GXHZTOWJ.mjs +378 -0
- package/dist/lib/browser/chunk-GXHZTOWJ.mjs.map +7 -0
- package/dist/lib/browser/chunk-L5OA5OGS.mjs +262 -0
- package/dist/lib/browser/chunk-L5OA5OGS.mjs.map +7 -0
- package/dist/lib/browser/{chunk-OYFQS7JM.mjs → chunk-MEN5WTLA.mjs} +64 -39
- package/dist/lib/browser/chunk-MEN5WTLA.mjs.map +7 -0
- package/dist/lib/browser/{chunk-CFXXQM25.mjs → chunk-PUG24BEC.mjs} +118 -23
- package/dist/lib/browser/chunk-PUG24BEC.mjs.map +7 -0
- package/dist/lib/browser/{chunk-IJAJRAR7.mjs → chunk-SJJV3HEX.mjs} +2 -4
- package/dist/lib/browser/chunk-SJJV3HEX.mjs.map +7 -0
- package/dist/lib/browser/chunk-WBG5PTSX.mjs +23 -0
- package/dist/lib/browser/chunk-WBG5PTSX.mjs.map +7 -0
- package/dist/lib/browser/edge-model-resolver-O6OFYIO2.mjs +18 -0
- package/dist/lib/browser/edge-model-resolver-O6OFYIO2.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +85 -51
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/{intent-resolver-BQO5SVGI.mjs → intent-resolver-3C5TABOX.mjs} +38 -14
- package/dist/lib/browser/intent-resolver-3C5TABOX.mjs.map +7 -0
- package/dist/lib/browser/local-model-resolver-GO6ZEMLL.mjs +17 -0
- package/dist/lib/browser/local-model-resolver-GO6ZEMLL.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-VNCD2H7C.mjs → react-surface-EYKA5IFU.mjs} +11 -30
- package/dist/lib/browser/react-surface-EYKA5IFU.mjs.map +7 -0
- package/dist/lib/browser/{settings-36V3VUMW.mjs → settings-VMVBYZLN.mjs} +5 -5
- package/dist/lib/browser/{settings-36V3VUMW.mjs.map → settings-VMVBYZLN.mjs.map} +1 -1
- package/dist/lib/browser/{state-D5IVKNYG.mjs → state-CFREPBB6.mjs} +5 -5
- package/dist/lib/browser/{state-D5IVKNYG.mjs.map → state-CFREPBB6.mjs.map} +1 -1
- package/dist/lib/browser/toolkit-F3NQ7TSI.mjs +21 -0
- package/dist/lib/browser/toolkit-F3NQ7TSI.mjs.map +7 -0
- package/dist/lib/browser/types/index.mjs +2 -2
- package/dist/lib/node-esm/{BlueprintContainer-UFVWCRN6.mjs → BlueprintContainer-6GBLMK4Z.mjs} +13 -6
- package/dist/lib/node-esm/BlueprintContainer-6GBLMK4Z.mjs.map +7 -0
- package/dist/lib/node-esm/{ChatCompanion-ZNRZEKH5.mjs → ChatCompanion-OV426GCP.mjs} +39 -14
- package/dist/lib/node-esm/ChatCompanion-OV426GCP.mjs.map +7 -0
- package/dist/lib/node-esm/{ChatContainer-TUCITJJW.mjs → ChatContainer-UKY7NHFY.mjs} +10 -11
- package/dist/lib/node-esm/ChatContainer-UKY7NHFY.mjs.map +7 -0
- package/dist/lib/node-esm/{ChatDialog-JLM7RDZQ.mjs → ChatDialog-2BDQIEXH.mjs} +8 -10
- package/dist/lib/node-esm/ChatDialog-2BDQIEXH.mjs.map +7 -0
- package/dist/lib/node-esm/ai-service-MUYLV3NT.mjs +20 -0
- package/dist/lib/node-esm/ai-service-MUYLV3NT.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-builder-PNAFQUYT.mjs → app-graph-builder-I52RYVWH.mjs} +41 -11
- package/dist/lib/node-esm/app-graph-builder-I52RYVWH.mjs.map +7 -0
- package/dist/lib/node-esm/{blueprint-definition-275J3XL2.mjs → blueprint-definition-CFCUD2VC.mjs} +5 -4
- package/dist/lib/node-esm/{chunk-CAQKGW3B.mjs → chunk-2CAETDW2.mjs} +63 -39
- package/dist/lib/node-esm/chunk-2CAETDW2.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-RLBN4RNR.mjs → chunk-4J5FYNNM.mjs} +15 -12
- package/dist/lib/node-esm/chunk-4J5FYNNM.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-7YOGZI66.mjs → chunk-5ARE4R2I.mjs} +37 -20
- package/dist/lib/node-esm/chunk-5ARE4R2I.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-7ZYOYW7F.mjs +264 -0
- package/dist/lib/node-esm/chunk-7ZYOYW7F.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-HJPIYMWD.mjs +1520 -0
- package/dist/lib/node-esm/chunk-HJPIYMWD.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-UWUUZQWJ.mjs → chunk-O36P4LN5.mjs} +24 -43
- package/dist/lib/node-esm/chunk-O36P4LN5.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-WE6KTH72.mjs +25 -0
- package/dist/lib/node-esm/chunk-WE6KTH72.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-FNZJJL7G.mjs → chunk-XM4BVQQR.mjs} +118 -23
- package/dist/lib/node-esm/chunk-XM4BVQQR.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-YPXEA46Q.mjs → chunk-XQBL2SBL.mjs} +2 -4
- package/dist/lib/node-esm/chunk-XQBL2SBL.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-YIO5MEPR.mjs +380 -0
- package/dist/lib/node-esm/chunk-YIO5MEPR.mjs.map +7 -0
- package/dist/lib/node-esm/edge-model-resolver-2ARXDOYS.mjs +19 -0
- package/dist/lib/node-esm/edge-model-resolver-2ARXDOYS.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +85 -51
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/{intent-resolver-FIS3T5KP.mjs → intent-resolver-HQ27YALS.mjs} +38 -14
- package/dist/lib/node-esm/intent-resolver-HQ27YALS.mjs.map +7 -0
- package/dist/lib/node-esm/local-model-resolver-WOQ2D2R2.mjs +18 -0
- package/dist/lib/node-esm/local-model-resolver-WOQ2D2R2.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-surface-4NLRKNBU.mjs → react-surface-UOC3CBPH.mjs} +11 -30
- package/dist/lib/node-esm/react-surface-UOC3CBPH.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-7ZCZ6AS5.mjs → settings-7AUVNDM2.mjs} +5 -5
- package/dist/lib/node-esm/{settings-7ZCZ6AS5.mjs.map → settings-7AUVNDM2.mjs.map} +1 -1
- package/dist/lib/node-esm/{state-4VLKPLW3.mjs → state-XXND44OW.mjs} +5 -5
- package/dist/lib/node-esm/{state-4VLKPLW3.mjs.map → state-XXND44OW.mjs.map} +1 -1
- package/dist/lib/node-esm/toolkit-7CH5UNSQ.mjs +22 -0
- package/dist/lib/node-esm/toolkit-7CH5UNSQ.mjs.map +7 -0
- package/dist/lib/node-esm/types/index.mjs +2 -2
- package/dist/types/src/AssistantPlugin.d.ts +1 -1
- package/dist/types/src/AssistantPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/ai-service.d.ts +2 -3
- package/dist/types/src/capabilities/ai-service.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/blueprint-definition.d.ts +1 -1
- package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -1
- package/dist/types/src/capabilities/capabilities.d.ts +0 -8
- package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
- package/dist/types/src/capabilities/edge-model-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/local-model-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/toolkit.d.ts.map +1 -1
- package/dist/types/src/components/BlueprintContainer.d.ts.map +1 -1
- package/dist/types/src/components/Chat/Chat.d.ts +4 -3
- package/dist/types/src/components/Chat/Chat.d.ts.map +1 -1
- package/dist/types/src/components/ChatCompanion.d.ts.map +1 -1
- package/dist/types/src/components/ChatProgress/ChatProgress.d.ts.map +1 -1
- package/dist/types/src/components/ChatThread/ChatThread.d.ts +10 -5
- package/dist/types/src/components/ChatThread/ChatThread.d.ts.map +1 -1
- package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts +35 -26
- package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts.map +1 -1
- package/dist/types/src/components/ChatThread/Link.d.ts.map +1 -1
- package/dist/types/src/components/ChatThread/registry.d.ts +11 -0
- package/dist/types/src/components/ChatThread/registry.d.ts.map +1 -0
- package/dist/types/src/components/ChatThread/sync.d.ts +36 -0
- package/dist/types/src/components/ChatThread/sync.d.ts.map +1 -0
- package/dist/types/src/components/ChatThread/sync.test.d.ts +2 -0
- package/dist/types/src/components/ChatThread/sync.test.d.ts.map +1 -0
- package/dist/types/src/components/ChatToolbar/ChatToolbar.d.ts +6 -0
- package/dist/types/src/components/ChatToolbar/ChatToolbar.d.ts.map +1 -0
- package/dist/types/src/components/ChatToolbar/index.d.ts +2 -0
- package/dist/types/src/components/ChatToolbar/index.d.ts.map +1 -0
- package/dist/types/src/components/{Toolbar → ChatToolbar}/useChatToolbarActions.d.ts +1 -3
- package/dist/types/src/components/ChatToolbar/useChatToolbarActions.d.ts.map +1 -0
- package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts +2 -1
- package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts.map +1 -1
- package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts +21 -14
- package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts.map +1 -1
- package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts +1 -1
- package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts.map +1 -1
- package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts +21 -14
- package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts.map +1 -1
- package/dist/types/src/components/ToolBlock/ToolBlock.d.ts +19 -0
- package/dist/types/src/components/ToolBlock/ToolBlock.d.ts.map +1 -0
- package/dist/types/src/components/ToolBlock/ToolBlockWidget.d.ts +2 -0
- package/dist/types/src/components/ToolBlock/ToolBlockWidget.d.ts.map +1 -0
- package/dist/types/src/components/ToolBlock/index.d.ts +3 -0
- package/dist/types/src/components/ToolBlock/index.d.ts.map +1 -0
- package/dist/types/src/components/Toolbox/Toolbox.d.ts +2 -2
- package/dist/types/src/components/Toolbox/Toolbox.d.ts.map +1 -1
- package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts +21 -14
- package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +1 -5
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/functions/analysis.d.ts.map +1 -1
- package/dist/types/src/functions/index.d.ts +2 -2
- package/dist/types/src/functions/index.d.ts.map +1 -1
- package/dist/types/src/functions/{list.d.ts → object-list.d.ts} +1 -1
- package/dist/types/src/functions/object-list.d.ts.map +1 -0
- package/dist/types/src/functions/{load.d.ts → object-load.d.ts} +1 -1
- package/dist/types/src/functions/object-load.d.ts.map +1 -0
- package/dist/types/src/hooks/index.d.ts +0 -3
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useBlueprintRegistry.d.ts +2 -1
- package/dist/types/src/hooks/useBlueprintRegistry.d.ts.map +1 -1
- package/dist/types/src/hooks/useChatProcessor.d.ts +2 -2
- package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -1
- package/dist/types/src/hooks/useChatServices.d.ts +2 -2
- package/dist/types/src/hooks/useChatServices.d.ts.map +1 -1
- package/dist/types/src/hooks/useContextBinder.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +2 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +1 -2
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/processor/index.d.ts +1 -0
- package/dist/types/src/processor/index.d.ts.map +1 -1
- package/dist/types/src/processor/presets.d.ts +1 -1
- package/dist/types/src/processor/presets.d.ts.map +1 -1
- package/dist/types/src/processor/processor.d.ts +11 -17
- package/dist/types/src/processor/processor.d.ts.map +1 -1
- package/dist/types/src/processor/update-name.d.ts +10 -0
- package/dist/types/src/processor/update-name.d.ts.map +1 -0
- package/dist/types/src/testing/index.d.ts +1 -2
- package/dist/types/src/testing/index.d.ts.map +1 -1
- package/dist/types/src/testing/test-generator.d.ts +7 -0
- package/dist/types/src/testing/test-generator.d.ts.map +1 -0
- package/dist/types/src/testing/test-services.d.ts +2 -2
- package/dist/types/src/testing/test-services.d.ts.map +1 -1
- package/dist/types/src/toolkits/AssistantToolkit.d.ts +21 -0
- package/dist/types/src/toolkits/AssistantToolkit.d.ts.map +1 -0
- package/dist/types/src/toolkits/SystemToolkit.d.ts +69 -0
- package/dist/types/src/toolkits/SystemToolkit.d.ts.map +1 -0
- package/dist/types/src/toolkits/index.d.ts +3 -0
- package/dist/types/src/toolkits/index.d.ts.map +1 -0
- package/dist/types/src/translations.d.ts +6 -4
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/Assistant.d.ts +15 -9
- package/dist/types/src/types/Assistant.d.ts.map +1 -1
- package/dist/types/src/types/AssistantAction.d.ts +18 -6
- package/dist/types/src/types/AssistantAction.d.ts.map +1 -1
- package/dist/types/src/types/service.d.ts +12 -12
- package/dist/types/src/types/service.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +93 -110
- package/src/AssistantPlugin.tsx +140 -129
- package/src/capabilities/ai-service.ts +6 -7
- package/src/capabilities/app-graph-builder.ts +36 -4
- package/src/capabilities/blueprint-definition.ts +39 -15
- package/src/capabilities/capabilities.ts +0 -13
- package/src/capabilities/edge-model-resolver.ts +5 -7
- package/src/capabilities/intent-resolver.ts +33 -6
- package/src/capabilities/local-model-resolver.ts +6 -8
- package/src/capabilities/react-surface.tsx +1 -21
- package/src/capabilities/toolkit.ts +10 -154
- package/src/components/BlueprintContainer.tsx +8 -2
- package/src/components/Chat/Chat.tsx +72 -70
- package/src/components/ChatCompanion.tsx +33 -8
- package/src/components/ChatContainer.tsx +4 -4
- package/src/components/ChatDialog.tsx +8 -8
- package/src/components/ChatProgress/ChatProgress.tsx +2 -3
- package/src/components/ChatPrompt/ChatOptions.tsx +17 -25
- package/src/components/ChatThread/ChatThread.stories.tsx +75 -229
- package/src/components/ChatThread/ChatThread.tsx +64 -46
- package/src/components/ChatThread/Link.tsx +11 -8
- package/src/components/ChatThread/registry.tsx +184 -0
- package/src/components/ChatThread/sync.test.ts +81 -0
- package/src/components/ChatThread/sync.ts +113 -0
- package/src/components/{Toolbar/Toolbar.tsx → ChatToolbar/ChatToolbar.tsx} +5 -2
- package/src/components/{Toolbar → ChatToolbar}/index.ts +1 -1
- package/src/components/{Toolbar → ChatToolbar}/useChatToolbarActions.ts +2 -1
- package/src/components/TemplateEditor/TemplateEditor.stories.tsx +5 -5
- package/src/components/TemplateEditor/TemplateEditor.tsx +18 -10
- package/src/components/TemplateEditor/TemplateForm.stories.tsx +3 -5
- package/src/components/TemplateEditor/TemplateForm.tsx +1 -1
- package/src/components/TemplateEditor/handlebars-extension.ts +12 -11
- package/src/components/{ChatThread → ToolBlock}/ToolBlock.tsx +31 -26
- package/src/components/ToolBlock/ToolBlockWidget.tsx +5 -0
- package/src/components/ToolBlock/index.ts +6 -0
- package/src/components/Toolbox/Toolbox.stories.tsx +4 -7
- package/src/components/Toolbox/Toolbox.tsx +3 -3
- package/src/components/index.ts +1 -3
- package/src/functions/analysis.ts +4 -2
- package/src/functions/index.ts +2 -2
- package/src/functions/{list.ts → object-list.ts} +6 -4
- package/src/functions/{load.ts → object-load.ts} +9 -7
- package/src/hooks/index.ts +0 -3
- package/src/hooks/useBlueprintRegistry.ts +17 -3
- package/src/hooks/useChatProcessor.ts +13 -5
- package/src/hooks/useChatServices.ts +26 -42
- package/src/hooks/useContextBinder.ts +17 -5
- package/src/hooks/useItemTypes.ts +1 -1
- package/src/index.ts +2 -0
- package/src/meta.ts +9 -6
- package/src/processor/index.ts +1 -0
- package/src/processor/presets.ts +1 -1
- package/src/processor/processor.test.ts +21 -17
- package/src/processor/processor.ts +30 -57
- package/src/processor/update-name.ts +57 -0
- package/src/queue-logger.ts +5 -5
- package/src/testing/index.ts +1 -2
- package/src/testing/test-generator.ts +261 -0
- package/src/testing/test-services.ts +2 -8
- package/src/toolkits/AssistantToolkit.ts +55 -0
- package/src/toolkits/SystemToolkit.ts +292 -0
- package/src/toolkits/index.ts +6 -0
- package/src/translations.ts +6 -5
- package/src/types/Assistant.ts +10 -8
- package/src/types/AssistantAction.ts +10 -2
- package/src/types/service.ts +17 -9
- package/dist/lib/browser/BlueprintContainer-OWUSKPRK.mjs.map +0 -7
- package/dist/lib/browser/ChatCompanion-FRCVSLPP.mjs.map +0 -7
- package/dist/lib/browser/ChatContainer-YBJBIVUZ.mjs.map +0 -7
- package/dist/lib/browser/ChatDialog-MTPJLEHM.mjs.map +0 -7
- package/dist/lib/browser/SequenceContainer-TF5QNXYM.mjs +0 -150
- package/dist/lib/browser/SequenceContainer-TF5QNXYM.mjs.map +0 -7
- package/dist/lib/browser/ai-service-NRZPTUHO.mjs +0 -22
- package/dist/lib/browser/ai-service-NRZPTUHO.mjs.map +0 -7
- package/dist/lib/browser/app-graph-builder-7AAWTWGA.mjs.map +0 -7
- package/dist/lib/browser/blueprint-definition-CRZPIA5A.mjs +0 -12
- package/dist/lib/browser/chunk-6QMISAU6.mjs.map +0 -7
- package/dist/lib/browser/chunk-CFXXQM25.mjs.map +0 -7
- package/dist/lib/browser/chunk-IJAJRAR7.mjs.map +0 -7
- package/dist/lib/browser/chunk-O4LUJEDV.mjs +0 -20
- package/dist/lib/browser/chunk-O4LUJEDV.mjs.map +0 -7
- package/dist/lib/browser/chunk-OYFQS7JM.mjs.map +0 -7
- package/dist/lib/browser/chunk-SMIVXXAI.mjs.map +0 -7
- package/dist/lib/browser/chunk-V5H5CCZA.mjs.map +0 -7
- package/dist/lib/browser/chunk-XL557TXF.mjs +0 -2332
- package/dist/lib/browser/chunk-XL557TXF.mjs.map +0 -7
- package/dist/lib/browser/edge-model-resolver-E5M3CC46.mjs +0 -22
- package/dist/lib/browser/edge-model-resolver-E5M3CC46.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-BQO5SVGI.mjs.map +0 -7
- package/dist/lib/browser/local-model-resolver-VZ5WZQIC.mjs +0 -21
- package/dist/lib/browser/local-model-resolver-VZ5WZQIC.mjs.map +0 -7
- package/dist/lib/browser/react-surface-VNCD2H7C.mjs.map +0 -7
- package/dist/lib/browser/toolkit-Y5OYX5PO.mjs +0 -191
- package/dist/lib/browser/toolkit-Y5OYX5PO.mjs.map +0 -7
- package/dist/lib/node-esm/BlueprintContainer-UFVWCRN6.mjs.map +0 -7
- package/dist/lib/node-esm/ChatCompanion-ZNRZEKH5.mjs.map +0 -7
- package/dist/lib/node-esm/ChatContainer-TUCITJJW.mjs.map +0 -7
- package/dist/lib/node-esm/ChatDialog-JLM7RDZQ.mjs.map +0 -7
- package/dist/lib/node-esm/SequenceContainer-UXOVZPZO.mjs +0 -151
- package/dist/lib/node-esm/SequenceContainer-UXOVZPZO.mjs.map +0 -7
- package/dist/lib/node-esm/ai-service-UDEPIPTO.mjs +0 -23
- package/dist/lib/node-esm/ai-service-UDEPIPTO.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-PNAFQUYT.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-2X6VEO32.mjs +0 -2333
- package/dist/lib/node-esm/chunk-2X6VEO32.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-7YOGZI66.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-CAQKGW3B.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-FNZJJL7G.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-RLBN4RNR.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-UWUUZQWJ.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-VFY2JG62.mjs +0 -22
- package/dist/lib/node-esm/chunk-VFY2JG62.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-YPXEA46Q.mjs.map +0 -7
- package/dist/lib/node-esm/edge-model-resolver-SZHDLXCT.mjs +0 -23
- package/dist/lib/node-esm/edge-model-resolver-SZHDLXCT.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-FIS3T5KP.mjs.map +0 -7
- package/dist/lib/node-esm/local-model-resolver-2KCBKMYA.mjs +0 -22
- package/dist/lib/node-esm/local-model-resolver-2KCBKMYA.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-4NLRKNBU.mjs.map +0 -7
- package/dist/lib/node-esm/toolkit-2F2OL6WB.mjs +0 -192
- package/dist/lib/node-esm/toolkit-2F2OL6WB.mjs.map +0 -7
- package/dist/types/src/components/ChatThread/ChatMessage.d.ts +0 -33
- package/dist/types/src/components/ChatThread/ChatMessage.d.ts.map +0 -1
- package/dist/types/src/components/ChatThread/ToolBlock.d.ts +0 -19
- package/dist/types/src/components/ChatThread/ToolBlock.d.ts.map +0 -1
- package/dist/types/src/components/PromptSettings.d.ts +0 -6
- package/dist/types/src/components/PromptSettings.d.ts.map +0 -1
- package/dist/types/src/components/SequenceContainer.d.ts +0 -8
- package/dist/types/src/components/SequenceContainer.d.ts.map +0 -1
- package/dist/types/src/components/SequenceEditor/SequenceEditor.d.ts +0 -13
- package/dist/types/src/components/SequenceEditor/SequenceEditor.d.ts.map +0 -1
- package/dist/types/src/components/SequenceEditor/SequenceEditor.stories.d.ts +0 -263
- package/dist/types/src/components/SequenceEditor/SequenceEditor.stories.d.ts.map +0 -1
- package/dist/types/src/components/SequenceEditor/index.d.ts +0 -2
- package/dist/types/src/components/SequenceEditor/index.d.ts.map +0 -1
- package/dist/types/src/components/Toolbar/Toolbar.d.ts +0 -4
- package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +0 -1
- package/dist/types/src/components/Toolbar/index.d.ts +0 -2
- package/dist/types/src/components/Toolbar/index.d.ts.map +0 -1
- package/dist/types/src/components/Toolbar/useChatToolbarActions.d.ts.map +0 -1
- package/dist/types/src/execution-graph/execution-graph.d.ts +0 -21
- package/dist/types/src/execution-graph/execution-graph.d.ts.map +0 -1
- package/dist/types/src/execution-graph/index.d.ts +0 -2
- package/dist/types/src/execution-graph/index.d.ts.map +0 -1
- package/dist/types/src/functions/list.d.ts.map +0 -1
- package/dist/types/src/functions/load.d.ts.map +0 -1
- package/dist/types/src/hooks/useExecutionGraph.d.ts +0 -7
- package/dist/types/src/hooks/useExecutionGraph.d.ts.map +0 -1
- package/dist/types/src/hooks/useMatcherExtension.d.ts +0 -3
- package/dist/types/src/hooks/useMatcherExtension.d.ts.map +0 -1
- package/dist/types/src/hooks/useResolveRef.d.ts +0 -4
- package/dist/types/src/hooks/useResolveRef.d.ts.map +0 -1
- package/dist/types/src/parser/filter-generator.d.ts +0 -4
- package/dist/types/src/parser/filter-generator.d.ts.map +0 -1
- package/dist/types/src/parser/filter-generator.test.d.ts +0 -2
- package/dist/types/src/parser/filter-generator.test.d.ts.map +0 -1
- package/dist/types/src/parser/index.d.ts +0 -4
- package/dist/types/src/parser/index.d.ts.map +0 -1
- package/dist/types/src/parser/query-parser.d.ts +0 -15
- package/dist/types/src/parser/query-parser.d.ts.map +0 -1
- package/dist/types/src/parser/query-parser.test.d.ts +0 -2
- package/dist/types/src/parser/query-parser.test.d.ts.map +0 -1
- package/dist/types/src/parser/types.d.ts +0 -24
- package/dist/types/src/parser/types.d.ts.map +0 -1
- package/dist/types/src/stories/Chat.stories.d.ts +0 -26
- package/dist/types/src/stories/Chat.stories.d.ts.map +0 -1
- package/dist/types/src/stories/components/BlueprintContainer.d.ts +0 -4
- package/dist/types/src/stories/components/BlueprintContainer.d.ts.map +0 -1
- package/dist/types/src/stories/components/ChatContainer.d.ts +0 -4
- package/dist/types/src/stories/components/ChatContainer.d.ts.map +0 -1
- package/dist/types/src/stories/components/CommentsContainer.d.ts +0 -4
- package/dist/types/src/stories/components/CommentsContainer.d.ts.map +0 -1
- package/dist/types/src/stories/components/GraphContainer.d.ts +0 -6
- package/dist/types/src/stories/components/GraphContainer.d.ts.map +0 -1
- package/dist/types/src/stories/components/LoggingContainer.d.ts +0 -4
- package/dist/types/src/stories/components/LoggingContainer.d.ts.map +0 -1
- package/dist/types/src/stories/components/MessageContainer.d.ts +0 -4
- package/dist/types/src/stories/components/MessageContainer.d.ts.map +0 -1
- package/dist/types/src/stories/components/SurfaceContainer.d.ts +0 -8
- package/dist/types/src/stories/components/SurfaceContainer.d.ts.map +0 -1
- package/dist/types/src/stories/components/TasksContainer.d.ts +0 -4
- package/dist/types/src/stories/components/TasksContainer.d.ts.map +0 -1
- package/dist/types/src/stories/components/TokenManagerContainer.d.ts +0 -3
- package/dist/types/src/stories/components/TokenManagerContainer.d.ts.map +0 -1
- package/dist/types/src/stories/components/index.d.ts +0 -11
- package/dist/types/src/stories/components/index.d.ts.map +0 -1
- package/dist/types/src/stories/components/types.d.ts +0 -7
- package/dist/types/src/stories/components/types.d.ts.map +0 -1
- package/dist/types/src/stories/testing/data.d.ts +0 -5
- package/dist/types/src/stories/testing/data.d.ts.map +0 -1
- package/dist/types/src/stories/testing/index.d.ts +0 -3
- package/dist/types/src/stories/testing/index.d.ts.map +0 -1
- package/dist/types/src/stories/testing/testing.d.ts +0 -44
- package/dist/types/src/stories/testing/testing.d.ts.map +0 -1
- package/dist/types/src/testing/test-data.d.ts +0 -4
- package/dist/types/src/testing/test-data.d.ts.map +0 -1
- package/dist/types/src/testing/test-functions.d.ts +0 -6
- package/dist/types/src/testing/test-functions.d.ts.map +0 -1
- package/src/components/ChatThread/ChatMessage.tsx +0 -334
- package/src/components/PromptSettings.tsx +0 -90
- package/src/components/SequenceContainer.tsx +0 -131
- package/src/components/SequenceEditor/SequenceEditor.stories.tsx +0 -33
- package/src/components/SequenceEditor/SequenceEditor.tsx +0 -50
- package/src/components/SequenceEditor/index.ts +0 -5
- package/src/execution-graph/execution-graph.ts +0 -211
- package/src/execution-graph/index.ts +0 -5
- package/src/hooks/useExecutionGraph.ts +0 -20
- package/src/hooks/useMatcherExtension.ts +0 -45
- package/src/hooks/useResolveRef.ts +0 -33
- package/src/parser/filter-generator.test.ts +0 -32
- package/src/parser/filter-generator.ts +0 -76
- package/src/parser/index.ts +0 -7
- package/src/parser/query-parser.test.ts +0 -139
- package/src/parser/query-parser.ts +0 -199
- package/src/parser/types.ts +0 -36
- package/src/stories/Chat.stories.tsx +0 -469
- package/src/stories/components/BlueprintContainer.tsx +0 -32
- package/src/stories/components/ChatContainer.tsx +0 -57
- package/src/stories/components/CommentsContainer.tsx +0 -25
- package/src/stories/components/GraphContainer.tsx +0 -118
- package/src/stories/components/LoggingContainer.tsx +0 -21
- package/src/stories/components/MessageContainer.tsx +0 -27
- package/src/stories/components/SurfaceContainer.tsx +0 -52
- package/src/stories/components/TasksContainer.tsx +0 -49
- package/src/stories/components/TokenManagerContainer.tsx +0 -14
- package/src/stories/components/index.ts +0 -15
- package/src/stories/components/types.ts +0 -11
- package/src/stories/testing/data.ts +0 -142
- package/src/stories/testing/index.ts +0 -6
- package/src/stories/testing/testing.tsx +0 -254
- package/src/testing/test-data.ts +0 -109
- package/src/testing/test-functions.ts +0 -16
- /package/dist/lib/browser/{blueprint-definition-CRZPIA5A.mjs.map → blueprint-definition-AGTDXTXO.mjs.map} +0 -0
- /package/dist/lib/node-esm/{blueprint-definition-275J3XL2.mjs.map → blueprint-definition-CFCUD2VC.mjs.map} +0 -0
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/hooks/useBlueprintRegistry.ts", "../../../src/hooks/useChatProcessor.ts", "../../../src/processor/presets.ts", "../../../src/processor/processor.ts", "../../../src/hooks/useChatServices.ts", "../../../src/capabilities/index.ts", "../../../src/hooks/useContextBinder.ts", "../../../src/hooks/useOnline.ts", "../../../src/hooks/usePresets.ts", "../../../src/hooks/useContextObjects.ts", "../../../src/hooks/useExecutionGraph.ts", "../../../src/execution-graph/execution-graph.ts", "../../../src/hooks/useFlush.ts", "../../../src/hooks/useItemTypes.ts", "../../../src/hooks/useMatcherExtension.ts", "../../../src/hooks/useReferencesProvider.ts", "../../../src/hooks/useResolveRef.ts", "../../../src/components/Toolbox/Toolbox.tsx", "../../../src/components/Chat/Chat.tsx", "../../../src/components/ChatPrompt/ChatActions.tsx", "../../../src/components/ChatPrompt/ChatOptions.tsx", "../../../src/components/ChatPrompt/ChatPresets.tsx", "../../../src/components/ChatPrompt/ChatReferences.tsx", "../../../src/components/ChatPrompt/ChatStatusIndicator.tsx", "../../../src/components/ChatThread/ChatThread.tsx", "../../../src/components/ChatThread/ChatMessage.tsx", "../../../src/components/ChatThread/Link.tsx", "../../../src/components/ChatThread/ToolBlock.tsx", "../../../src/components/ChatThread/reducers.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { useSignalEffect } from '@preact/signals-react';\nimport { useCallback, useMemo, useState } from 'react';\n\nimport { Capabilities, useCapabilities } from '@dxos/app-framework';\nimport { type AiContextBinder } from '@dxos/assistant';\nimport { Blueprint } from '@dxos/blueprints';\nimport { type Space } from '@dxos/client/echo';\nimport { Filter, Obj, Ref } from '@dxos/echo';\nimport { isNonNullable } from '@dxos/util';\n\n/**\n * Provide a registry of blueprints from plugins.\n */\n// TODO(burdon): Reconcile with eventual public registry.\nexport const useBlueprintRegistry = () => {\n const blueprints = useCapabilities(Capabilities.BlueprintDefinition);\n return useMemo(() => new Blueprint.Registry(blueprints), [blueprints]);\n};\n\nexport const useBlueprints = ({ blueprintRegistry }: { blueprintRegistry?: Blueprint.Registry }) =>\n useMemo(() => blueprintRegistry?.query() ?? [], [blueprintRegistry]);\n\n/**\n * Create reactive map of active blueprints (by key).\n */\nexport const useActiveBlueprints = ({ context }: { context?: AiContextBinder }) => {\n const [active, setActive] = useState<Map<string, Blueprint.Blueprint>>(new Map());\n\n useSignalEffect(() => {\n const refs = [...(context?.blueprints.value ?? [])];\n const blueprints = refs.map((ref) => ref.target).filter(isNonNullable);\n setActive(new Map(blueprints.map((blueprint) => [blueprint.key, blueprint])));\n });\n\n return active;\n};\n\n// TODO(burdon): Move logic into binder.\nexport const useBlueprintHandlers = ({\n space,\n context,\n blueprintRegistry,\n}: {\n space: Space;\n context?: AiContextBinder;\n blueprintRegistry?: Blueprint.Registry;\n}) => {\n const onUpdateBlueprint = useCallback(\n async (key: string, checked: boolean) => {\n if (!context || !blueprintRegistry) {\n return;\n }\n\n // Find existing cloned blueprint.\n const { objects } = await space.db.query(Filter.type(Blueprint.Blueprint)).run();\n let storedBlueprint = objects.find((blueprint) => blueprint.key === key);\n if (checked) {\n if (!storedBlueprint) {\n const blueprint = blueprintRegistry.getByKey(key);\n if (!blueprint) {\n return;\n }\n\n // NOTE: Possible race condition with other peers.\n storedBlueprint = space.db.add(Obj.clone(blueprint));\n }\n await context.bind({ blueprints: [Ref.make(storedBlueprint)] });\n } else if (storedBlueprint) {\n await context.unbind({ blueprints: [Ref.make(storedBlueprint)] });\n }\n },\n [space, context, blueprintRegistry],\n );\n\n return { onUpdateBlueprint };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { RegistryContext } from '@effect-rx/rx-react';\nimport { type Layer } from 'effect';\nimport { useContext, useMemo } from 'react';\n\nimport { AiConversation } from '@dxos/assistant';\nimport { type Blueprint } from '@dxos/blueprints';\nimport { log } from '@dxos/log';\nimport { type Queue } from '@dxos/react-client/echo';\n\nimport { AiChatProcessor, type AiChatServices, type AiServicePreset } from '../processor';\nimport { type Assistant } from '../types';\n\nexport type UseChatProcessorProps = {\n chat?: Assistant.Chat;\n preset?: AiServicePreset;\n services?: Layer.Layer<AiChatServices>;\n blueprintRegistry?: Blueprint.Registry;\n settings?: Assistant.Settings;\n};\n\n/**\n * Configure and create AiChatProcessor.\n */\nexport const useChatProcessor = ({\n chat,\n preset,\n services,\n blueprintRegistry,\n settings,\n}: UseChatProcessorProps): AiChatProcessor | undefined => {\n const observableRegistry = useContext(RegistryContext);\n\n // Create conversation from chat queue.\n const conversation = useMemo(() => {\n if (!chat?.queue.target) {\n return;\n }\n\n return new AiConversation({ queue: chat.queue.target as Queue<any> });\n }, [chat?.queue.target]);\n\n // Create processor.\n const processor = useMemo(() => {\n if (!services || !conversation) {\n return undefined;\n }\n\n log('creating processor', {\n preset,\n model: preset?.model,\n settings,\n });\n\n return new AiChatProcessor(conversation, services, {\n observableRegistry,\n blueprintRegistry,\n model: preset?.model,\n });\n }, [services, conversation, blueprintRegistry, preset]);\n\n return processor;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Schema } from 'effect';\n\nimport { type ModelName } from '@dxos/ai';\n\nconst ModelProviders = ['dxos-local', 'dxos-remote', 'lm-studio'] as const;\n\nconst ModelProvider = Schema.Literal(...ModelProviders);\ntype ModelProvider = Schema.Schema.Type<typeof ModelProvider>;\n\nexport type AiServicePreset = {\n id: string;\n provider: ModelProvider;\n model: ModelName;\n label?: string;\n};\n\nconst createModelLabel = (model: ModelName) => {\n const parts = model.split('/');\n return parts[parts.length - 1];\n};\n\n// TODO(burdon): Users should be able to create and edit presets.\nexport const AiServicePresets: AiServicePreset[] = [\n {\n provider: 'dxos-remote' as const,\n model: '@anthropic/claude-opus-4-0' as const,\n },\n {\n provider: 'dxos-remote' as const,\n model: '@anthropic/claude-sonnet-4-0' as const,\n },\n {\n provider: 'dxos-remote' as const,\n model: '@anthropic/claude-3-5-haiku-20241022' as const,\n },\n {\n provider: 'lm-studio' as const,\n model: '@google/gemma-3-27b' as const,\n },\n {\n provider: 'lm-studio' as const,\n model: '@mlx-community/llama-3.2-3b-instruct' as const,\n },\n {\n model: 'deepseek-r1:latest' as const,\n provider: 'dxos-local' as const,\n },\n].map(\n ({ model, provider }, i) =>\n ({\n id: `preset-${i}`,\n provider,\n model,\n label: createModelLabel(model),\n }) satisfies AiServicePreset,\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Registry, Rx } from '@effect-rx/rx-react';\nimport { Cause, Effect, Exit, Fiber, Layer, Option } from 'effect';\n\nimport {\n AiService,\n DEFAULT_EDGE_MODEL,\n type ModelName,\n type ModelRegistry,\n type ToolExecutionService,\n type ToolResolverService,\n} from '@dxos/ai';\nimport {\n type AiConversation,\n type AiConversationRunParams,\n AiSession,\n ArtifactDiffResolver,\n GenerationObserver,\n createSystemPrompt,\n} from '@dxos/assistant';\nimport { type Blueprint } from '@dxos/blueprints';\nimport { Obj } from '@dxos/echo';\nimport { throwCause } from '@dxos/effect';\nimport {\n type CredentialsService,\n type DatabaseService,\n type QueueService,\n type RemoteFunctionExecutionService,\n type TracingService,\n} from '@dxos/functions';\nimport { log } from '@dxos/log';\nimport { type ContentBlock, DataType } from '@dxos/schema';\nimport { trim } from '@dxos/util';\n\nimport { type Assistant } from '../types';\n\nexport type AiChatServices =\n | CredentialsService\n | DatabaseService\n | QueueService\n | RemoteFunctionExecutionService\n | AiService.AiService\n | ToolExecutionService\n | ToolResolverService\n | TracingService;\n\nexport type AiChatProcessorOptions = {\n model?: ModelName;\n modelRegistry?: ModelRegistry;\n blueprintRegistry?: Blueprint.Registry;\n observableRegistry?: Registry.Registry;\n extensions?: ToolContextExtensions;\n} & Pick<AiConversationRunParams, 'system'>;\n\nconst defaultOptions: Partial<AiChatProcessorOptions> = {\n model: DEFAULT_EDGE_MODEL,\n};\n\n// TODO(burdon): Retry, timeout?\nexport type AiRequestOptions = {};\n\nexport type AiRequest = {\n message: string;\n options?: AiRequestOptions;\n};\n\n/**\n * Handles interactions with the AI service.\n * Handles streaming responses from the conversation.\n */\nexport class AiChatProcessor {\n private readonly _rx: Registry.Registry;\n\n /** External observer. */\n private readonly _observer: GenerationObserver;\n\n /** Currently active request fiber. */\n private _fiber: Fiber.Fiber<void, any> | undefined;\n\n /** Last request (for retries). */\n private _lastRequest: AiRequest | undefined;\n\n /**\n * Pending messages (incl. the current user request).\n */\n private readonly _pending = Rx.make<DataType.Message[]>([]);\n\n /**\n * Currently streaming message (from the AI service).\n */\n private readonly _streaming = Rx.make<Option.Option<DataType.Message>>(Option.none());\n\n /**\n * Streaming state.\n */\n public readonly streaming = Rx.make<boolean>((get) => Option.isSome(get(this._streaming)));\n\n /**\n * Array of Messages (incl. the current message being streamed).\n */\n public readonly messages = Rx.make<DataType.Message[]>((get) =>\n Option.match(get(this._streaming), {\n onNone: () => get(this._pending),\n onSome: (streaming) => [...get(this._pending), streaming],\n }),\n );\n\n /** Last error. */\n public readonly error = Rx.make<Option.Option<Error>>(Option.none());\n\n constructor(\n private readonly _conversation: AiConversation,\n // TODO(dmaretskyi): Replace this with effect's ManagedRuntime wrapping this layer.\n private readonly _services: Layer.Layer<AiChatServices>,\n private readonly _options: AiChatProcessorOptions = defaultOptions,\n ) {\n // Initialize registries and defaults before using in other logic.\n this._rx = this._options.observableRegistry ?? Registry.make();\n this._observer = GenerationObserver.make({\n onBlock: this._onBlock,\n onMessage: this._onMessage,\n });\n if (this._options.model && !this._options.system) {\n const capabilities = this._options.modelRegistry?.getCapabilities(this._options.model) ?? {};\n this._options.system = createSystemPrompt(capabilities);\n }\n }\n\n get isRunning() {\n return !!this._fiber;\n }\n\n get context() {\n return this._conversation.context;\n }\n\n get conversation() {\n return this._conversation;\n }\n\n get blueprintRegistry() {\n return this._options.blueprintRegistry;\n }\n\n /**\n * Initiates a new request.\n */\n async request(requestParam: AiRequest): Promise<void> {\n if (this._fiber) {\n await this.cancel();\n }\n\n try {\n this._lastRequest = requestParam;\n this._rx.set(this.error, Option.none());\n\n // Create request.\n const request = this._conversation.createRequest({\n system: this._options.system,\n prompt: requestParam.message,\n observer: this._observer,\n });\n\n // Create fiber.\n this._fiber = request.pipe(\n Effect.provide(Layer.provideMerge(AiService.model(this._options.model ?? DEFAULT_EDGE_MODEL), this._services)),\n\n // TODO(dmaretskyi): Move ArtifactDiffResolver upstream.\n Effect.provideService(ArtifactDiffResolver, this._artifactDiffResolver),\n\n Effect.asVoid,\n Effect.tapErrorCause((cause) => {\n log.error('request failed', { cause });\n return Effect.void;\n }),\n Effect.runFork, // Runs in the background.\n );\n\n // Execute request.\n const response = await this._fiber.pipe(Fiber.join, Effect.runPromiseExit);\n if (!Exit.isSuccess(response) && !Cause.isInterruptedOnly(response.cause)) {\n throwCause(response.cause);\n }\n\n this._rx.set(this.error, Option.none());\n this._lastRequest = undefined;\n this._fiber = undefined;\n } catch (err) {\n log.error('request failed', { err });\n this._rx.set(this.error, Option.some(new Error('AI service error', { cause: err })));\n } finally {\n this._fiber = undefined;\n }\n }\n\n /**\n * Cancels the current request.\n */\n async cancel(): Promise<void> {\n await Effect.runPromise(\n Effect.gen(this, function* () {\n if (this._fiber) {\n yield* this._fiber.pipe(Fiber.interrupt);\n }\n }),\n );\n\n this._fiber = undefined;\n }\n\n /**\n * Retry last failed request.\n */\n async retry(): Promise<void> {\n if (this._lastRequest) {\n return this.request(this._lastRequest);\n }\n }\n\n /**\n * Update the current chat's name.\n */\n async updateName(chat: Assistant.Chat): Promise<void> {\n const system = trim`\n It is extremely important that you respond only with the title and nothing else.\n If you cannot do this effectively respond with \"New Chat\".\n `;\n\n const history = await this._conversation.getHistory();\n const fiber = Effect.gen(this, function* () {\n const session = new AiSession();\n return yield* session.run({ system, prompt: 'Suggest a name for this chat', history });\n }).pipe(\n // TODO(burdon): Use simpler model.\n Effect.provide(Layer.provideMerge(AiService.model(this._options.model ?? DEFAULT_EDGE_MODEL), this._services)),\n Effect.tap((messages) => {\n const message = messages.find((message) => message.sender.role === 'assistant');\n const title = message?.blocks.find((b) => b._tag === 'text')?.text;\n if (title) {\n chat.name = title;\n }\n }),\n Effect.runFork, // Run in the background.\n );\n\n const response = await fiber.pipe(Fiber.join, Effect.runPromiseExit);\n if (!Exit.isSuccess(response)) {\n throwCause(response.cause);\n }\n }\n\n // TODO(burdon): Fix/factor out.\n private _artifactDiffResolver: ArtifactDiffResolver.Service = {\n resolve: async (_artifacts) => {\n const versions = new Map();\n // await Promise.all(\n // artifacts.map(async (artifact) => {\n // const {\n // objects: [object],\n // } = await space.db.query(Filter.ids(artifact.id)).run();\n // if (!object) {\n // return;\n // }\n\n // versions.set(artifact.id, {\n // version: getVersion(object),\n // diff: `Current state: ${JSON.stringify(object)}`,\n // });\n // }),\n // );\n\n return versions;\n },\n };\n\n private _onMessage = Effect.fn(\n function* (this: AiChatProcessor, message: DataType.Message) {\n this._rx.set(this._streaming, Option.none());\n this._rx.update(this._pending, (pending) => [...pending, message]);\n }.bind(this),\n );\n\n private _onBlock = Effect.fn(\n function* (this: AiChatProcessor, block: ContentBlock.Any) {\n this._rx.update(this._streaming, (streaming) => {\n const blocks = streaming.pipe(\n Option.map((streaming) => streaming.blocks.filter((b) => !b.pending)),\n Option.getOrElse(() => []),\n );\n\n return Option.some(\n Obj.make(DataType.Message, {\n created: new Date().toISOString(),\n sender: { role: 'assistant' },\n blocks: [...blocks, block],\n }),\n );\n });\n }.bind(this),\n );\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type AiTool, AiToolkit } from '@effect/ai';\nimport { Layer } from 'effect';\nimport { useMemo } from 'react';\n\nimport { Capabilities, useCapabilities } from '@dxos/app-framework';\nimport { makeToolExecutionServiceFromFunctions, makeToolResolverFromFunctions } from '@dxos/assistant';\nimport { type Space } from '@dxos/client/echo';\nimport {\n ComputeEventLogger,\n CredentialsService,\n DatabaseService,\n LocalFunctionExecutionService,\n QueueService,\n RemoteFunctionExecutionService,\n TracingService,\n} from '@dxos/functions';\n\nimport { AssistantCapabilities } from '../capabilities';\nimport { type AiChatServices } from '../processor';\nimport { type Assistant } from '../types';\n\nexport type UseChatServicesProps = {\n space?: Space;\n chat?: Assistant.Chat;\n};\n\n/**\n * Construct service layer.\n */\nexport const useChatServices = ({ space, chat }: UseChatServicesProps): Layer.Layer<AiChatServices> | undefined => {\n const serviceLayer = useCapabilities(AssistantCapabilities.AiServiceLayer).at(0) ?? Layer.die('AiService not found');\n const functions = useCapabilities(Capabilities.Functions);\n const toolkits = useCapabilities(Capabilities.Toolkit);\n const handlers = useCapabilities(Capabilities.ToolkitHandler);\n\n return useMemo(() => {\n const allFunctions = functions.flat();\n // TODO(wittjosiah): Don't cast.\n const toolkit = AiToolkit.merge(...toolkits) as AiToolkit.Any as AiToolkit.AiToolkit<AiTool.Any>;\n const handlersLayer = Layer.mergeAll(Layer.empty, ...handlers);\n\n return Layer.mergeAll(\n serviceLayer,\n makeToolResolverFromFunctions(allFunctions, toolkit),\n makeToolExecutionServiceFromFunctions(allFunctions, toolkit, handlersLayer),\n CredentialsService.layerFromDatabase(),\n ComputeEventLogger.layerFromTracing,\n ).pipe(\n Layer.provideMerge(\n Layer.mergeAll(\n space ? DatabaseService.layer(space.db) : DatabaseService.notAvailable,\n space ? QueueService.layer(space.queues) : QueueService.notAvailable,\n chat?.traceQueue?.target ? TracingService.layerQueue(chat.traceQueue?.target) : TracingService.layerNoop,\n LocalFunctionExecutionService.layer,\n RemoteFunctionExecutionService.mockLayer,\n ),\n ),\n );\n }, [space, functions, toolkits, handlers, chat?.traceQueue?.target]);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\nexport const AiService = lazy(() => import('./ai-service'));\nexport const AppGraphBuilder = lazy(() => import('./app-graph-builder'));\nexport const AssistantState = lazy(() => import('./state'));\nexport const BlueprintDefinition = lazy(() => import('./blueprint-definition'));\nexport const EdgeModelResolver = lazy(() => import('./edge-model-resolver'));\nexport const IntentResolver = lazy(() => import('./intent-resolver'));\nexport const LocalModelResolver = lazy(() => import('./local-model-resolver'));\nexport const ReactSurface = lazy(() => import('./react-surface'));\nexport const Settings = lazy(() => import('./settings'));\nexport const Toolkit = lazy(() => import('./toolkit'));\n\nexport * from './blueprint-definition';\nexport * from './capabilities';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useMemo } from 'react';\n\nimport { AiContextBinder } from '@dxos/assistant';\n\nimport { type Assistant } from '../types';\n\nexport const useContextBinder = (chat: Assistant.Chat | undefined): AiContextBinder | undefined => {\n const binder = useMemo(() => {\n const queue = chat?.queue.target;\n return queue && new AiContextBinder(queue);\n }, [chat]);\n\n return binder;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Dispatch, type SetStateAction, useState } from 'react';\n\nexport const useOnline = (): [boolean, Dispatch<SetStateAction<boolean>>] => {\n const [online, setOnline] = useState(true);\n return [online, setOnline];\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { type ChatPromptProps } from '../components';\nimport { type AiServicePreset, AiServicePresets } from '../processor';\n\nexport type UsePresets = {\n preset: AiServicePreset | undefined;\n} & Pick<ChatPromptProps, 'presets' | 'onPresetChange'>;\n\nexport const usePresets = (online: boolean): UsePresets => {\n // TODO(burdon): Memo preset for provider.\n const [preset, setPreset] = useState<AiServicePreset>();\n const presets = useMemo(\n () => AiServicePresets.filter((preset) => online === (preset.provider === 'dxos-remote')),\n [online],\n );\n const presetOptions = useMemo(\n () => presets.map(({ id, model, label }) => ({ id, label: label ?? model })),\n [presets],\n );\n useEffect(() => {\n setPreset(presets[0]);\n }, [presets]);\n\n const handlePresetChange = useCallback<NonNullable<ChatPromptProps['onPresetChange']>>(\n (id) => {\n const preset = presets.find((preset) => preset.id === id);\n if (preset) {\n setPreset(preset);\n }\n },\n [presets],\n );\n\n return {\n preset: preset,\n presets: presetOptions,\n onPresetChange: handlePresetChange,\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useCallback } from 'react';\n\nimport { type AiContextBinder } from '@dxos/assistant';\nimport { type DXN, type Obj, Ref } from '@dxos/echo';\nimport { log } from '@dxos/log';\nimport { type Space } from '@dxos/react-client/echo';\nimport { isNonNullable } from '@dxos/util';\n\nexport type UseContextObjects = {\n objects: Obj.Any[];\n onUpdateObject: (dxn: DXN, checked: boolean) => Promise<void>;\n};\n\n/**\n * Create reactive map of active object references (by DXN string).\n */\nexport const useContextObjects = ({\n space,\n context,\n}: {\n space?: Space;\n context?: AiContextBinder;\n}): UseContextObjects => {\n const objects = context?.objects.value.map((ref) => ref.target).filter(isNonNullable) ?? [];\n\n const handleUpdateObject = useCallback<UseContextObjects['onUpdateObject']>(\n async (dxn: DXN, checked: boolean) => {\n if (!space || !context) {\n return;\n }\n\n // Load the object by DXN/id from the current space.\n const id = dxn.asEchoDXN();\n const object = id && (await space.db.getObjectById(id.echoId));\n if (!object) {\n log.warn('Object not found', { dxn, id });\n return;\n }\n\n const ref = Ref.fromDXN(dxn);\n if (checked) {\n await context.bind({ objects: [ref] });\n } else {\n await context.unbind({ objects: [ref] });\n }\n },\n [space, context],\n );\n\n return {\n objects,\n onUpdateObject: handleUpdateObject,\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useMemo } from 'react';\n\nimport { type Queue } from '@dxos/client/echo';\nimport { Obj, type Ref } from '@dxos/echo';\nimport { useQueue } from '@dxos/react-client/echo';\n\nimport { ExecutionGraph } from '../execution-graph';\n\nexport const useExecutionGraph = (queueRef?: Ref.Ref<Queue>, lastRequest = false) => {\n const queue = useQueue(queueRef?.dxn);\n return useMemo(() => {\n const graph = new ExecutionGraph();\n graph.addEvents(queue?.objects.filter(Obj.isObject) ?? []);\n return graph.getGraph(lastRequest);\n }, [queue?.objects, lastRequest]);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { AgentStatus } from '@dxos/ai';\nimport { Obj, type Ref } from '@dxos/echo';\nimport { MESSAGE_PROPERTY_TOOL_CALL_ID } from '@dxos/functions';\nimport { type ObjectId } from '@dxos/keys';\nimport { LogLevel } from '@dxos/log';\nimport { type Commit } from '@dxos/react-ui-components';\nimport { ContentBlock, DataType } from '@dxos/schema';\nimport { isNotFalsy } from '@dxos/util';\n\n// TODO(burdon): Move to assistant.\n\n// TODO(burdon): Add colors?\nenum IconType {\n // General status.\n SUCCESS = 'ph--check-circle--regular',\n WARNING = 'ph--warning-circle--regular',\n ERROR = 'ph--x-circle--regular',\n FLAG = 'ph--flag--regular',\n ROCKET = 'ph--rocket--regular',\n TIMER = 'ph--timer--regular',\n\n // Interactions.\n USER = 'ph--user--regular',\n USER_INTERACTION = 'ph--user-sound--regular',\n AGENT = 'ph--robot--regular',\n THINKING = 'ph--brain--regular',\n LINK = 'ph--link--regular',\n TOOL = 'ph--wrench--regular',\n}\n\n/**\n * Models the execution graph based on a stream of events.\n */\nexport class ExecutionGraph {\n // TODO(dmaretskyi): Evolve the internal state to support chats, functions, circuit workflows, etc.\n private _commits: Commit[] = [];\n private _branchNames = new Set<string>();\n\n /**\n * Adds events to the graph.\n */\n addEvents(events: Obj.Any[]) {\n for (const event of events) {\n if (Obj.instanceOf(DataType.Message, event)) {\n const messageCommits = messageToCommit(event);\n this._commits.push(...messageCommits);\n messageCommits.map((c) => c.branch).forEach((branch) => this._branchNames.add(branch));\n } else if (Obj.instanceOf(AgentStatus, event)) {\n const branch = getBranchName({ parentMessage: event.parentMessage, toolCallId: event.toolCallId });\n this._branchNames.add(branch);\n this._commits.push({\n id: event.id,\n branch,\n message: event.message,\n icon: IconType.FLAG,\n parents:\n event.parentMessage && event.toolCallId\n ? [getToolCallId(event.parentMessage, event.toolCallId)]\n : undefined, // TODO(burdon): Fix.\n });\n }\n }\n }\n\n /**\n * Returns the current state of the graph.\n */\n getGraph(lastRequest = false): { branches: string[]; commits: Commit[] } {\n const idx = lastRequest ? this._commits.findLastIndex((c) => c.tags?.includes('user')) : -1;\n const commits = idx === -1 ? this._commits : this._commits.slice(idx);\n\n return {\n branches: Array.from(this._branchNames),\n commits: commits,\n };\n }\n}\n\n// TODO(burdon): Pass in AiToolProvider.\nconst messageToCommit = (message: DataType.Message): Commit[] => {\n return message.blocks\n .map((block, idx) => {\n const branch = getMessageBranch(message);\n const parent = getParentId(message);\n const parents = parent ? [parent] : [];\n switch (block._tag) {\n case 'text':\n if (!block.text.trim().length) {\n return null;\n }\n return {\n id: getGenericBlockId(message.id, idx),\n branch,\n parents,\n ...(message.sender.role === 'user'\n ? {\n icon: IconType.USER,\n tags: ['user'],\n message: 'Processing request...',\n }\n : {\n icon: IconType.AGENT,\n message: `Response (${block.text.split(' ').length} words)`,\n }),\n } satisfies Commit;\n case 'toolCall':\n return {\n id: getToolCallId(message.id, block.toolCallId),\n branch,\n parents,\n icon: IconType.TOOL,\n level: LogLevel.INFO,\n // TODO(burdon): Lookup tool name/description?\n message: `Calling tool (${block.name})`,\n } satisfies Commit;\n case 'toolResult':\n return {\n id: getToolResultId(message.id, block.toolCallId),\n branch,\n parents,\n icon: block.error ? IconType.ERROR : IconType.SUCCESS,\n level: block.error ? LogLevel.ERROR : LogLevel.INFO,\n message: block.error ? 'Tool error: ' + block.error : 'Tool call succeeded',\n } satisfies Commit;\n case 'summary':\n return {\n id: getGenericBlockId(message.id, idx),\n branch,\n parents,\n icon: IconType.ROCKET,\n level: LogLevel.INFO,\n message: ContentBlock.createSummaryMessage(block),\n } satisfies Commit;\n case 'status':\n return {\n id: getGenericBlockId(message.id, idx),\n branch,\n parents,\n message: block.statusText,\n level: LogLevel.INFO,\n icon: IconType.FLAG,\n } satisfies Commit;\n case 'reasoning':\n return {\n id: getGenericBlockId(message.id, idx),\n branch,\n parents,\n message: block.reasoningText ?? 'Thinking...',\n icon: IconType.THINKING,\n } satisfies Commit;\n case 'reference':\n return {\n id: getGenericBlockId(message.id, idx),\n branch,\n parents,\n icon: IconType.LINK,\n message: stringifyRef(block.reference),\n } satisfies Commit;\n default:\n return null;\n }\n })\n .filter(isNotFalsy);\n};\n\nconst getToolCallId = (messageId: ObjectId, toolCallId: string) => `${messageId}_toolCall_${toolCallId}`;\n\nconst getToolResultId = (messageId: ObjectId, toolCallId: string) => `${messageId}_toolResult_${toolCallId}`;\n\nconst getGenericBlockId = (messageId: ObjectId, idx: number) => `${messageId}_block_${idx}`;\n\nconst getBranchName = (options: { parentMessage?: ObjectId; toolCallId?: string }) => {\n if (options.parentMessage && options.toolCallId) {\n return `${options.parentMessage}_${options.toolCallId}`;\n } else if (options.parentMessage) {\n return options.parentMessage;\n } else {\n return 'main';\n }\n};\n\nconst getMessageBranch = (message: DataType.Message) => {\n return getBranchName({\n parentMessage: message.parentMessage,\n toolCallId: message.properties?.[MESSAGE_PROPERTY_TOOL_CALL_ID],\n });\n};\n\nconst getParentId = (message: DataType.Message) => {\n if (message.parentMessage && message.properties?.[MESSAGE_PROPERTY_TOOL_CALL_ID]) {\n return getToolCallId(message.parentMessage, message.properties[MESSAGE_PROPERTY_TOOL_CALL_ID]);\n } else {\n return undefined;\n }\n};\n\nconst stringifyRef = (ref: Ref.Any) => {\n if (ref.target) {\n return stringifyObject(ref.target);\n }\n\n return ref.dxn.asEchoDXN()?.echoId ?? ref.dxn.asQueueDXN()?.objectId ?? '';\n};\n\nconst stringifyObject = (obj: Obj.Any) => {\n return Obj.getLabel(obj) ?? Obj.getTypename(obj) ?? obj.id;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useCallback, useRef, useState } from 'react';\n\nimport { type Space } from '@dxos/client/echo';\n\nexport const useFlush = (space?: Space) => {\n const [state, setState] = useState<'idle' | 'flushing' | 'flushed'>('idle');\n const resetTimer = useRef<NodeJS.Timeout | null>(null);\n\n const handleFlush = useCallback(() => {\n if (!space) {\n return;\n }\n\n queueMicrotask(async () => {\n if (resetTimer.current) {\n clearTimeout(resetTimer.current);\n }\n\n setState('flushing');\n await space.db.flush();\n setState('flushed');\n\n resetTimer.current = setTimeout(() => {\n setState('idle');\n resetTimer.current = null;\n }, 1_000);\n });\n }, [space]);\n\n return { state, handleFlush };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Option } from 'effect';\nimport { useEffect, useState } from 'react';\n\nimport { type Type } from '@dxos/echo';\nimport { type Space } from '@dxos/react-client/echo';\nimport { ItemAnnotation } from '@dxos/schema';\n\n// TODO(burdon): Pass in filter.\nexport const useItemTypes = (space?: Space): Type.Obj.Any[] => {\n const [types, setTypes] = useState<Type.Obj.Any[]>([]);\n useEffect(() => {\n if (!space) {\n return;\n }\n\n return space.db.schemaRegistry.query().subscribe(\n (query) => {\n const types = Array.from(\n new Set(\n [...space.db.graph.schemaRegistry.schemas, ...query.results].filter((type) =>\n Option.isSome(ItemAnnotation.get(type)),\n ),\n ),\n );\n\n setTypes(types);\n },\n { fire: true },\n );\n }, [space]);\n\n return types;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useMemo } from 'react';\n\nimport { type Space } from '@dxos/client/echo';\nimport { Type } from '@dxos/echo';\nimport { type TypeaheadContext, matchCompletion, staticCompletion, typeahead } from '@dxos/react-ui-editor';\n\n// TODO(burdon): Move def to @dxos/echo.\nexport const useMatcherExtension = (space: Space) => {\n return useMemo(() => {\n const handleComplete = ({ line }: TypeaheadContext) => {\n const words = line.split(/\\s+/).filter(Boolean);\n if (words.length > 0) {\n const word = words.at(-1)!;\n\n // Match type.\n const match = word.match(/^type:(.+)/);\n if (match) {\n const part = match[1];\n for (const schema of space?.db.graph.schemaRegistry.schemas ?? []) {\n const typename = Type.getTypename(schema);\n if (typename) {\n const completion = matchCompletion(typename, part);\n if (completion) {\n return completion;\n }\n }\n }\n }\n\n // Match static.\n return staticCompletion(['type:', 'AND', 'OR', 'NOT'])({ line });\n }\n };\n\n return [\n typeahead({\n onComplete: handleComplete,\n }),\n ];\n }, [space]);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useMemo } from 'react';\n\nimport { Capabilities, useCapabilities } from '@dxos/app-framework';\nimport { type Space } from '@dxos/client/echo';\nimport { Filter, Obj } from '@dxos/echo';\nimport { type ReferencesProvider } from '@dxos/react-ui-chat';\n\n/**\n * Resolve references to objects in the space.\n */\nexport const useReferencesProvider = (space?: Space): ReferencesProvider | undefined => {\n const blueprints = useCapabilities(Capabilities.BlueprintDefinition);\n\n return useMemo<ReferencesProvider | undefined>((): ReferencesProvider | undefined => {\n if (!space) {\n return undefined;\n }\n\n return {\n getReferences: async ({ query }) => {\n // TODO(burdon): Previously we filtered by types declared by the artifact definitions.\n // const schemas = blueprints.map((blueprint) => blueprint.schema).flat();\n // const { objects } = await space.db\n // .query(Filter.or(...schemas.map((schema) => Filter.type(schema as Type.Schema))))\n // .run();\n\n const { objects } = await space.db.query(Filter.everything()).run();\n\n return (\n objects\n // TODO(burdon): Remove cast ??? (+ two instances below).\n // .map((object) => {\n // log.info('object', { object, label: Obj.getLabel(object as any) });\n // return object;\n // })\n .filter((object) => stringMatch(query, Obj.getLabel(object as any) ?? ''))\n // TODO(dmaretskyi): `Type.getDXN` (at the point of writing) didn't work here as it was schema-only.\n .filter((object) => !!Obj.getDXN(object as Obj.Any))\n .map((object) => ({\n uri: Obj.getDXN(object as any).toString(),\n label: Obj.getLabel(object as any) ?? '',\n }))\n );\n },\n resolveReference: async ({ uri }) => {\n const object = await space.db.query(Filter.ids(uri)).first();\n return { uri, label: Obj.getLabel(object) ?? '' };\n },\n } satisfies ReferencesProvider;\n }, [space, blueprints]);\n};\n\nconst stringMatch = (query: string, label: string) => label.toLowerCase().startsWith(query.toLowerCase());\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useMemo, useSyncExternalStore } from 'react';\n\nimport { type Space } from '@dxos/client/echo';\nimport { type Ref } from '@dxos/echo';\n\n// TODO(burdon): Factor out.\nexport const useResolvedRef = <T>(space: Space, ref: Ref.Ref<T>): T | undefined => {\n const { subscribe, getSnapshot } = useMemo(() => {\n const resolver = space.db.graph.createRefResolver({});\n let currentCallback: (() => void) | undefined = undefined;\n\n return {\n subscribe: (cb: () => void) => {\n currentCallback = cb;\n return () => {\n if (currentCallback === cb) {\n currentCallback = undefined;\n }\n };\n },\n getSnapshot: () =>\n resolver?.resolveSync(ref.dxn, true, () => {\n currentCallback?.();\n }) as T | undefined,\n };\n }, [space, ref.dxn.toString()]);\n\n return useSyncExternalStore<T | undefined>(subscribe, getSnapshot);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type FC, Fragment, useEffect, useState } from 'react';\n\nimport { type Blueprint } from '@dxos/blueprints';\nimport { type Ref } from '@dxos/echo';\nimport { FunctionType } from '@dxos/functions';\nimport { log } from '@dxos/log';\nimport { Filter, type Space, useQuery } from '@dxos/react-client/echo';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { useTranslation } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { meta } from '../../meta';\nimport { type AiChatProcessor } from '../../processor';\nimport { ServiceType } from '../../types';\n\nexport type ToolboxProps = ThemedClassName<{\n services?: { service: ServiceType }[];\n functions?: FunctionType[];\n // TODO(burdon): Combine into single array.\n blueprints?: readonly Ref.Ref<Blueprint.Blueprint>[];\n activeBlueprints?: readonly Ref.Ref<Blueprint.Blueprint>[];\n}>;\n\nexport const Toolbox = ({ classNames, functions, services, blueprints, activeBlueprints }: ToolboxProps) => {\n const { t } = useTranslation(meta.id);\n\n return (\n <div className={mx('flex flex-col overflow-y-auto box-content', classNames)}>\n {blueprints && blueprints.length > 0 && (\n <Section\n title='Blueprints'\n items={blueprints.map(({ target }) => ({\n name: target?.name ?? '',\n description: target?.description ?? '',\n subitems: target?.tools.map((toolId) => ({ name: `∙ ${safeToolId(toolId)}` })),\n }))}\n />\n )}\n\n {activeBlueprints && activeBlueprints.length > 0 && (\n <Section\n title='Blueprints'\n items={activeBlueprints.map(({ target }) => ({\n name: target?.name ?? '',\n description: target?.description ?? '',\n subitems: target?.tools.map((toolId) => ({ name: `∙ ${safeToolId(toolId)}` })),\n }))}\n />\n )}\n\n {services && services.length > 0 && (\n <Section\n title='Services'\n items={services.map(({ service: { serviceId, name, description } }) => ({\n name: name ?? serviceId,\n description,\n // subitems: tools.map(({ name, description }) => ({ name: `∙ ${name}`, description })),\n }))}\n />\n )}\n\n {functions && functions.length > 0 && (\n <Section title='Functions' items={functions.map(({ name, description }) => ({ name, description }))} />\n )}\n </div>\n );\n};\n\nconst Section: FC<{\n title: string;\n items: { name: string; description?: string; subitems?: { name: string; description?: string }[] }[];\n striped?: boolean;\n}> = ({ title, items, striped }) => {\n const stripeClassNames = 'odd:bg-neutral-50 dark:odd:bg-neutral-800';\n const gridClassNames = 'grid grid-cols-[8rem_1fr]';\n const subGridClassNames = mx('col-span-full grid grid-cols-subgrid text-xs px-2', striped && stripeClassNames);\n\n return (\n <div>\n <h1 className='px-2 text-sm'>{title}</h1>\n <div className={gridClassNames}>\n {items.map(({ name, description, subitems }, i) => (\n <Fragment key={i}>\n {name && (\n <div className={subGridClassNames}>\n <div className='truncate text-primary-500'>{name}</div>\n <div className='line-clamp-2'>{description}</div>\n </div>\n )}\n {subitems?.map(({ name, description }, i) => (\n <div key={i} className={mx(subGridClassNames, striped && stripeClassNames)}>\n <div className='truncate'>{name}</div>\n <div className='line-clamp-3 text-subdued'>{description}</div>\n </div>\n ))}\n </Fragment>\n ))}\n </div>\n </div>\n );\n};\n\nexport type ToolboxContainerProps = ThemedClassName<{\n space?: Space;\n processor?: AiChatProcessor;\n}>;\n\nexport const ToolboxContainer = ({ classNames, space, processor }: ToolboxContainerProps) => {\n // Registered services.\n const services = useQuery(space, Filter.type(ServiceType));\n const [serviceTools, setServiceTools] = useState<{ service: ServiceType }[]>([]);\n useEffect(() => {\n log('creating service tools...', { services: services.length });\n queueMicrotask(async () => {\n // TODO(burdon): Fix.\n // const tools = await Promise.all(\n // services.map(async (service) => ({ service, tools: await createToolsFromService(service) })),\n // );\n // setServiceTools(tools);\n });\n }, [services]);\n\n // Deployed functions.\n const functions = useQuery(space, Filter.type(FunctionType));\n\n return (\n <Toolbox\n classNames={classNames}\n blueprints={processor?.context.blueprints.value}\n services={serviceTools}\n functions={functions}\n />\n );\n};\n\nconst safeToolId = (name: string) => {\n return name.split('_').pop();\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Extension, Prec } from '@codemirror/state';\nimport { keymap } from '@codemirror/view';\nimport { useRxValue } from '@effect-rx/rx-react';\nimport { createContext } from '@radix-ui/react-context';\nimport { Array, Option } from 'effect';\nimport React, { type PropsWithChildren, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { Event } from '@dxos/async';\nimport { Obj } from '@dxos/echo';\nimport { log } from '@dxos/log';\nimport { useVoiceInput } from '@dxos/plugin-transcription';\nimport { type Space, getSpace, useQueue } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { Input, type ThemedClassName, useTranslation } from '@dxos/react-ui';\nimport { ChatEditor, type ChatEditorController, type ChatEditorProps, references } from '@dxos/react-ui-chat';\nimport { type ScrollController } from '@dxos/react-ui-components';\nimport { mx } from '@dxos/react-ui-theme';\nimport { DataType } from '@dxos/schema';\nimport { isNotFalsy } from '@dxos/util';\n\nimport { useReferencesProvider } from '../../hooks';\nimport { meta } from '../../meta';\nimport { type AiChatProcessor } from '../../processor';\nimport { type Assistant } from '../../types';\nimport {\n ChatActions,\n type ChatActionsProps,\n ChatOptions,\n type ChatPresetsProps,\n ChatReferences,\n ChatStatusIndicator,\n} from '../ChatPrompt';\nimport { ChatThread as NativeChatThread, type ChatThreadProps as NativeChatThreadProps } from '../ChatThread';\n\nimport { type ChatEvent } from './events';\n\n//\n// Context\n// NOTE: The context should not be exported. It is only used internally.\n// Components outside of this Radix-style group shuld define their own APIs.\n//\n\ntype ChatContextValue = {\n debug?: boolean;\n event: Event<ChatEvent>;\n space: Space;\n chat: Assistant.Chat;\n messages: DataType.Message[];\n processor: AiChatProcessor;\n};\n\n// NOTE: Do not export.\nexport const [ChatContextProvider, useChatContext] = createContext<ChatContextValue>('Chat');\n\n//\n// Root\n//\n\ntype ChatRootProps = ThemedClassName<\n PropsWithChildren<\n Pick<ChatContextValue, 'chat' | 'processor'> & {\n onEvent?: (event: ChatEvent) => void;\n }\n >\n>;\n\nconst ChatRoot = ({ classNames, children, chat, processor, onEvent, ...props }: ChatRootProps) => {\n const [debug, setDebug] = useState(false);\n const space = getSpace(chat);\n\n // Messages.\n const queue = useQueue<DataType.Message>(chat?.queue.dxn);\n const pending = useRxValue(processor.messages);\n const streaming = useRxValue(processor.streaming);\n\n const lastPrompt = useRef<string | undefined>(undefined);\n\n const messages = useMemo(() => {\n const queueMessages = queue?.objects?.filter(Obj.instanceOf(DataType.Message)) ?? [];\n return Array.dedupeWith([...queueMessages, ...pending], (a, b) => a.id === b.id);\n }, [queue?.objects, pending]);\n\n // Events.\n const event = useMemo(() => new Event<ChatEvent>(), []);\n useEffect(() => {\n return event.on((ev) => {\n switch (ev.type) {\n case 'toggle-debug': {\n setDebug((current) => {\n const debug = !current;\n log.info('toggle-debug', { debug });\n return debug;\n });\n break;\n }\n\n case 'submit': {\n if (!streaming) {\n lastPrompt.current = ev.text;\n void processor.request({ message: ev.text });\n }\n break;\n }\n\n case 'retry': {\n if (!streaming) {\n void processor.retry();\n }\n break;\n }\n\n case 'cancel': {\n if (streaming) {\n void processor.cancel();\n if (lastPrompt.current) {\n event.emit({ type: 'update-prompt', text: lastPrompt.current });\n }\n }\n break;\n }\n\n default: {\n onEvent?.(ev);\n }\n }\n });\n }, [event, processor, streaming, onEvent]);\n\n if (!space) {\n return null;\n }\n\n return (\n <ChatContextProvider\n debug={debug}\n event={event}\n chat={chat}\n space={space}\n processor={processor}\n messages={messages}\n {...props}\n >\n <div role='none' className={mx('flex flex-col h-full overflow-hidden', classNames)}>\n {children}\n </div>\n </ChatContextProvider>\n );\n};\n\nChatRoot.displayName = 'Chat.Root';\n\n//\n// Prompt\n//\n\ntype ChatPromptProps = ThemedClassName<\n {\n outline?: boolean;\n } & Pick<ChatEditorProps, 'placeholder'> &\n Omit<ChatPresetsProps, 'onChange'> & {\n expandable?: boolean;\n online?: boolean;\n onOnlineChange?: (online: boolean) => void;\n onPresetChange?: ChatPresetsProps['onChange'];\n }\n>;\n\nconst ChatPrompt = ({\n classNames,\n outline,\n placeholder,\n expandable,\n online,\n presets,\n preset,\n onPresetChange,\n onOnlineChange,\n}: ChatPromptProps) => {\n const { t } = useTranslation(meta.id);\n const { space, event, processor } = useChatContext(ChatPrompt.displayName);\n\n const error = useRxValue(processor.error).pipe(Option.getOrUndefined);\n const streaming = useRxValue(processor.streaming);\n const streamingRef = useRef(streaming);\n\n const editorRef = useRef<ChatEditorController>(null);\n\n const [active, setActive] = useState(false);\n useEffect(() => {\n return event.on((event) => {\n switch (event.type) {\n case 'update-prompt':\n if (!editorRef.current?.getText()?.length) {\n editorRef.current?.setText(event.text);\n editorRef.current?.focus();\n }\n break;\n case 'record-start':\n setActive(true);\n break;\n case 'record-stop':\n setActive(false);\n break;\n }\n });\n }, [event]);\n\n // TODO(burdon): Configure capability in TranscriptionPlugin.\n const { recording } = useVoiceInput({\n active,\n onUpdate: (text) => {\n editorRef.current?.setText(text);\n editorRef.current?.focus();\n },\n });\n\n // TODO(burdon): Reconcile with object tags.\n const referencesProvider = useReferencesProvider(space);\n const extensions = useMemo<Extension[]>(() => {\n return [\n referencesProvider && references({ provider: referencesProvider }),\n Prec.highest(\n keymap.of(\n [\n {\n key: 'cmd-d',\n preventDefault: true,\n run: () => {\n event.emit({ type: 'toggle-debug' });\n return true;\n },\n },\n expandable && {\n key: 'cmd-ArrowUp',\n preventDefault: true,\n run: () => {\n event.emit({ type: 'thread-open' });\n return true;\n },\n },\n expandable && {\n key: 'cmd-ArrowDown',\n preventDefault: true,\n run: () => {\n event.emit({ type: 'thread-close' });\n return true;\n },\n },\n ].filter(isNotFalsy),\n ),\n ),\n ].filter(isNotFalsy);\n }, [event, expandable, referencesProvider]);\n\n const handleSubmit = useCallback<NonNullable<ChatEditorProps['onSubmit']>>(\n (text) => {\n if (!streamingRef.current) {\n event.emit({ type: 'submit', text });\n return true;\n }\n },\n [event],\n );\n\n const handleEvent = useCallback<NonNullable<ChatActionsProps['onEvent']>>(\n (ev) => {\n event.emit(ev);\n },\n [event],\n );\n\n return (\n <div\n className={mx(\n 'is-full flex flex-col density-fine',\n outline && [\n 'p-2 bg-groupSurface border border-subduedSeparator transition transition-border [&:has(.cm-content:focus)]:border-separator rounded',\n ],\n classNames,\n )}\n >\n <div className='flex gap-2'>\n <ChatStatusIndicator classNames='p-1' preset={preset} error={error} processing={streaming} />\n\n <ChatEditor\n ref={editorRef}\n autoFocus\n lineWrapping\n classNames='col-span-2 pbs-0.5'\n placeholder={placeholder ?? t('prompt placeholder')}\n extensions={extensions}\n onSubmit={handleSubmit}\n />\n </div>\n\n <div className='flex pbs-2 items-center'>\n <ChatOptions\n space={space}\n blueprintRegistry={processor.blueprintRegistry}\n context={processor.context}\n preset={preset}\n presets={presets}\n onPresetChange={onPresetChange}\n />\n\n <div role='none' className='pli-cardSpacingChrome grow'>\n <ChatReferences space={space} context={processor.context} />\n </div>\n\n <ChatActions\n classNames='col-span-2'\n microphone={true}\n recording={recording}\n processing={streaming}\n onEvent={handleEvent}\n >\n {online !== undefined && (\n <Input.Root>\n <Input.Switch classNames='mis-2 mie-2' checked={online} onCheckedChange={onOnlineChange} />\n </Input.Root>\n )}\n </ChatActions>\n </div>\n </div>\n );\n};\n\nChatPrompt.displayName = 'Chat.Prompt';\n\n//\n// Thread\n//\n\ntype ChatThreadProps = Omit<NativeChatThreadProps, 'identity' | 'space' | 'messages' | 'tools' | 'onEvent'>;\n\nconst ChatThread = (props: ChatThreadProps) => {\n const { debug, event, space, messages, processor } = useChatContext(ChatThread.displayName);\n const identity = useIdentity();\n\n const error = useRxValue(processor.error).pipe(Option.getOrUndefined);\n\n const toolProvider = useCallback<NonNullable<ChatThreadProps['toolProvider']>>(\n () => processor.conversation.toolkit?.tools ?? [],\n [processor],\n );\n\n const scrollerRef = useRef<ScrollController>(null);\n useEffect(() => {\n return event.on((event) => {\n switch (event.type) {\n case 'submit':\n case 'scroll-to-bottom':\n scrollerRef.current?.scrollToBottom('smooth');\n break;\n }\n });\n }, [event]);\n\n if (!identity) {\n return null;\n }\n\n return (\n <NativeChatThread\n {...props}\n ref={scrollerRef}\n debug={debug}\n identity={identity}\n space={space}\n messages={messages}\n error={error}\n toolProvider={toolProvider}\n onEvent={(ev) => event.emit(ev)}\n />\n );\n};\n\nChatThread.displayName = 'Chat.Thread';\n\n//\n// Chat\n//\n\nexport const Chat = {\n Root: ChatRoot,\n Prompt: ChatPrompt,\n Thread: ChatThread,\n};\n\nexport type { ChatRootProps, ChatThreadProps, ChatPromptProps, ChatEvent };\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type PropsWithChildren } from 'react';\n\nimport { IconButton, type ThemedClassName, useTranslation } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { meta } from '../../meta';\nimport { type ChatEvent } from '../Chat';\n\nexport type ChatActionsProps = ThemedClassName<\n PropsWithChildren<{\n microphone?: boolean;\n recording?: boolean;\n processing?: boolean;\n onEvent?: (event: ChatEvent) => void;\n }>\n>;\n\nexport const ChatActions = ({ classNames, children, microphone, recording, processing, onEvent }: ChatActionsProps) => {\n const { t } = useTranslation(meta.id);\n\n return (\n <div className={mx('flex items-center mie-1', classNames)}>\n {children}\n\n <IconButton\n disabled={!processing}\n variant='ghost'\n size={5}\n icon='ph--x--regular'\n iconOnly\n label={t('button cancel processing')}\n onClick={() => onEvent?.({ type: 'cancel' })}\n />\n\n {microphone && (\n <IconButton\n disabled={!processing}\n classNames={mx(recording && 'bg-primary-500')}\n variant='ghost'\n size={5}\n icon='ph--microphone--regular'\n iconOnly\n noTooltip\n label={t('button microphone')}\n onMouseDown={() => onEvent?.({ type: 'record-start' })}\n onMouseUp={() => onEvent?.({ type: 'record-stop' })}\n onTouchStart={() => onEvent?.({ type: 'record-start' })}\n onTouchEnd={() => onEvent?.({ type: 'record-stop' })}\n />\n )}\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type JSX, useMemo, useState } from 'react';\n\nimport { type AiContextBinder } from '@dxos/assistant';\nimport { type Blueprint } from '@dxos/blueprints';\nimport { Filter, Obj, Type } from '@dxos/echo';\nimport { type Space, useQuery } from '@dxos/react-client/echo';\nimport { Icon, IconButton, Popover, Select, useTranslation } from '@dxos/react-ui';\nimport { SearchList } from '@dxos/react-ui-searchlist';\nimport { Tabs } from '@dxos/react-ui-tabs';\n\nimport { useActiveBlueprints, useBlueprintHandlers, useBlueprints, useContextObjects, useItemTypes } from '../../hooks';\nimport { meta } from '../../meta';\n\nconst panelClassNames = 'is-[calc(100dvw-.5rem)] sm:is-max md:is-[25rem] max-is-[--text-content]';\n\nexport type ChatOptionsProps = {\n space: Space;\n context: AiContextBinder;\n blueprintRegistry?: Blueprint.Registry;\n presets?: { id: string; label: string }[];\n preset?: string;\n onPresetChange?: (id: string) => void;\n};\n\n/**\n * Manages the runtime context for the chat.\n */\nexport const ChatOptions = ({\n space,\n context,\n blueprintRegistry,\n presets,\n preset,\n onPresetChange,\n}: ChatOptionsProps) => {\n const { t } = useTranslation(meta.id);\n\n return (\n <div role='none' className='flex gap-0.5'>\n <Popover.Root>\n <Popover.Trigger asChild>\n <IconButton variant='ghost' icon='ph--plus--regular' iconOnly size={5} label={t('button context objects')} />\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content side='top' classNames={panelClassNames}>\n <ObjectsPanel space={space} context={context} />\n <Popover.Arrow />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n\n <Popover.Root>\n <Popover.Trigger asChild>\n <IconButton\n variant='ghost'\n icon='ph--sliders-horizontal--regular'\n iconOnly\n size={5}\n label={t('button context settings')}\n />\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content side='top' classNames={panelClassNames}>\n <Tabs.Root orientation='horizontal' defaultValue='blueprints' defaultActivePart='list'>\n <Tabs.Viewport classNames='max-bs-[--radix-popover-content-available-height] grid grid-rows-[1fr_min-content] [&_[cmdk-root]]:contents [&_[role=\"tabpanel\"]]:grid [&_[role=\"tabpanel\"]]:grid-rows-[1fr_min-content] [&_[role=\"listbox\"]]:min-bs-0 [&_[role=\"listbox\"]]:overflow-y-auto [&_[role=\"tabpanel\"]]:min-bs-0 [&_[role=\"tabpanel\"]]:pli-cardSpacingChrome [&_[role=\"tabpanel\"][data-state=\"active\"]]:order-first [&_[role=\"tabpanel\"][data-state=\"inactive\"]]:hidden'>\n <Tabs.Tabpanel value='blueprints'>\n <BlueprintsPanel blueprintRegistry={blueprintRegistry} space={space} context={context} />\n </Tabs.Tabpanel>\n <Tabs.Tabpanel value='model'>\n <ModelsPanel presets={presets} preset={preset} onPresetChange={onPresetChange} />\n </Tabs.Tabpanel>\n <Tabs.Tablist classNames='sm:overflow-x-hidden justify-center p-[--dx-cardSpacingChrome] border-bs border-subduedSeparator order-last'>\n <Tabs.IconTab\n value='blueprints'\n icon='ph--blueprint--regular'\n label={t('blueprints in context title')}\n />\n <Tabs.IconTab value='model' label={t('chat model title')} icon='ph--cpu--regular' />\n </Tabs.Tablist>\n </Tabs.Viewport>\n </Tabs.Root>\n <Popover.Arrow />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n </div>\n );\n};\n\nconst BlueprintsPanel = ({\n blueprintRegistry,\n space,\n context,\n}: Pick<ChatOptionsProps, 'blueprintRegistry' | 'space' | 'context'>) => {\n const { t } = useTranslation(meta.id);\n\n const blueprints = useBlueprints({ blueprintRegistry });\n const activeBlueprints = useActiveBlueprints({ context });\n const { onUpdateBlueprint } = useBlueprintHandlers({ space, context, blueprintRegistry });\n\n return (\n <SearchList.Root>\n <SearchList.Content classNames='plb-cardSpacingChrome'>\n {blueprints.map((blueprint) => {\n const isActive = activeBlueprints.has(blueprint.key);\n return (\n <SearchList.Item\n classNames='flex items-center overflow-hidden'\n key={blueprint.key}\n value={blueprint.name}\n onSelect={() => onUpdateBlueprint?.(blueprint.key, !isActive)}\n >\n <div className='grow truncate'>{blueprint.name}</div>\n <Icon icon='ph--check--regular' classNames={[!isActive && 'invisible']} />\n </SearchList.Item>\n );\n })}\n </SearchList.Content>\n <SearchList.Input placeholder={t('search placeholder')} classNames='mbe-cardSpacingChrome' />\n </SearchList.Root>\n );\n};\n\nconst ModelsPanel = ({\n presets,\n preset,\n onPresetChange,\n}: Pick<ChatOptionsProps, 'presets' | 'preset' | 'onPresetChange'>) => {\n return (\n <ul role='listbox' className='plb-cardSpacingChrome'>\n {presets?.map(({ id, label }) => {\n const isActive = preset === id;\n return (\n <li\n role='option'\n key={id}\n aria-selected={isActive}\n tabIndex={0}\n className='overflow-hidden dx-focus-ring flex gap-2 p-1 pis-2 pie-2 items-center rounded-sm select-none cursor-pointer hover:bg-hoverOverlay'\n onClick={() => onPresetChange?.(id)}\n >\n <div className='grow truncate'>{label}</div>\n <Icon icon='ph--check--regular' classNames={[!isActive && 'invisible']} />\n </li>\n );\n })}\n </ul>\n );\n};\n\nconst ANY = '__any__';\n\nconst ObjectsPanel = ({ space, context }: Pick<ChatOptionsProps, 'space' | 'context'>): JSX.Element => {\n const { t } = useTranslation(meta.id);\n\n // Item types sorted by label.\n const types = useItemTypes(space);\n const typenames = useMemo(() => {\n const typenames = types.map((type) => {\n const typename = Type.getTypename(type);\n return {\n typename,\n label: t('typename label', { ns: typename, defaultValue: typename }),\n };\n });\n\n typenames.sort((a, b) => a.label.localeCompare(b.label));\n return typenames;\n }, [types]);\n\n // Current type and filter.\n const [typename, setTypename] = useState<string>(ANY);\n const anyFilter = useMemo(\n () => Filter.or(...typenames.map(({ typename }) => Filter.typename(typename))),\n [typenames],\n );\n\n // Context objects.\n const objects = useQuery(space, typename === ANY ? anyFilter : Filter.typename(typename));\n const { objects: contextObjects, onUpdateObject } = useContextObjects({ space, context });\n\n return (\n <SearchList.Root classNames='pis-2 pie-2'>\n <SearchList.Content classNames='plb-cardSpacingChrome [&:has([cmdk-list-sizer]:empty)]:plb-0'>\n {objects.length ? (\n objects.map((object) => {\n const label = Obj.getLabel(object) ?? Obj.getTypename(object) ?? object.id;\n const isActive = contextObjects.findIndex((obj) => obj.id === object.id) !== -1;\n return (\n <SearchList.Item\n classNames='flex items-center overflow-hidden'\n key={object.id}\n value={object.id}\n onSelect={() => onUpdateObject?.(Obj.getDXN(object), !isActive)}\n >\n <div className='grow truncate'>{label}</div>\n <Icon icon='ph--check--regular' classNames={[!isActive && 'invisible']} />\n </SearchList.Item>\n );\n })\n ) : (\n <SearchList.Item>{t('no results')}</SearchList.Item>\n )}\n </SearchList.Content>\n\n <div role='none' className='grid grid-cols-[min-content_1fr] gap-2 mbe-cardSpacingChrome'>\n <Select.Root value={typename === ANY ? undefined : typename} onValueChange={setTypename}>\n <Select.TriggerButton density='fine' placeholder={t('type filter placeholder')} />\n <Select.Portal>\n <Select.Content>\n <Select.ScrollUpButton />\n <Select.Viewport>\n <Select.Option value={ANY}>{t('any type filter label')}</Select.Option>\n {typenames.map(({ typename, label }) => (\n <Select.Option key={typename} value={typename}>\n {label}\n </Select.Option>\n ))}\n </Select.Viewport>\n <Select.ScrollDownButton />\n <Select.Arrow />\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n <SearchList.Input placeholder={t('search placeholder')} classNames='mbe-0' />\n </div>\n </SearchList.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Select } from '@dxos/react-ui';\n\nexport type ChatPresetsProps = {\n presets?: { id: string; label: string }[];\n preset?: string;\n onChange?: (id: string) => void;\n};\n\nexport const ChatPresets = ({ presets, preset, onChange }: ChatPresetsProps) => {\n return (\n <Select.Root value={preset} onValueChange={onChange}>\n <Select.TriggerButton classNames='text-sm' />\n <Select.Content>\n {presets?.map(({ id, label }) => (\n <Select.Option key={id} value={id} classNames='text-sm'>\n {label}\n </Select.Option>\n ))}\n <Select.Arrow />\n </Select.Content>\n </Select.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type AiContextBinder } from '@dxos/assistant';\nimport { Obj } from '@dxos/echo';\nimport { type Space } from '@dxos/react-client/echo';\nimport { IconButton, type Label, type ThemedClassName, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { useContextObjects } from '../../hooks';\nimport { meta } from '../../meta';\n\nexport type ChatReferencesProps = ThemedClassName<{\n context: AiContextBinder;\n space: Space;\n}>;\n\nexport const ChatReferences = ({ classNames, context, space }: ChatReferencesProps) => {\n const { t } = useTranslation(meta.id);\n const { objects, onUpdateObject } = useContextObjects({ space, context });\n\n return (\n <ul className={mx('flex flex-wrap', classNames)}>\n {objects.map((obj) => {\n const dxn = Obj.getDXN(obj);\n const typename = Obj.getTypename(obj);\n const label: Label = Obj.getLabel(obj) ?? (typename ? ['object name placeholder', { ns: typename }] : obj.id);\n return (\n <li key={dxn.toString()} className='dx-tag plb-0 pis-2 flex items-center' data-hue='neutral'>\n {toLocalizedString(label, t)}\n <IconButton\n iconOnly\n variant='ghost'\n label={t('remove object in context label')}\n classNames='p-0 hover:bg-transparent'\n size={3}\n icon='ph--x--bold'\n onClick={() => onUpdateObject?.(dxn, false)}\n />\n </li>\n );\n })}\n </ul>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useEffect, useState } from 'react';\n\nimport { type ThemedClassName, Tooltip, useTimeout } from '@dxos/react-ui';\nimport { Spinner, type SpinnerProps } from '@dxos/react-ui-sfx';\nimport { mx } from '@dxos/react-ui-theme';\n\nconst period = 3_000;\n\nexport type ChatStatusIndicatorProps = ThemedClassName<\n {\n preset?: string;\n processing?: boolean;\n error?: Error;\n } & Pick<SpinnerProps, 'size' | 'onClick'>\n>;\n\nexport const ChatStatusIndicator = ({ classNames, preset, processing, error, ...props }: ChatStatusIndicatorProps) => {\n const [init, setInit] = useState(false);\n useEffect(() => setInit(false), [preset]);\n useTimeout(\n async () => {\n setInit(true);\n },\n period / 2,\n [preset],\n );\n\n return (\n <div role='none' className={mx('relative flex', classNames)}>\n <Spinner duration={period} state={!init ? 'flash' : error ? 'error' : processing ? 'spin' : 'pulse'} {...props} />\n {error && (\n <Tooltip.Trigger asChild content={error.message}>\n <div className='absolute inset-0' />\n </Tooltip.Trigger>\n )}\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type CSSProperties, Fragment, forwardRef, useEffect, useMemo } from 'react';\n\nimport { invariant } from '@dxos/invariant';\nimport { PublicKey } from '@dxos/keys';\nimport { type Identity } from '@dxos/react-client/halo';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { ScrollContainer, type ScrollController } from '@dxos/react-ui-components';\nimport { mx } from '@dxos/react-ui-theme';\nimport { type DataType } from '@dxos/schema';\nimport { keyToFallback } from '@dxos/util';\n\nimport { ChatError, ChatMessage, type ChatMessageProps, styles } from './ChatMessage';\nimport { reduceMessages } from './reducers';\n\nexport type ChatThreadProps = ThemedClassName<\n {\n identity?: Identity;\n messages?: DataType.Message[];\n error?: Error;\n } & Pick<ChatMessageProps, 'debug' | 'space' | 'toolProvider' | 'onEvent'>\n>;\n\nexport const ChatThread = forwardRef<ScrollController, ChatThreadProps>(\n ({ classNames, identity, messages = [], error, debug, onEvent, ...props }, forwardedRef) => {\n const userHue = useMemo(() => {\n return identity?.profile?.data?.hue || keyToFallback(identity?.identityKey ?? PublicKey.random()).hue;\n }, [identity]);\n\n // Show error.\n useEffect(() => {\n onEvent?.({ type: 'scroll-to-bottom' });\n }, [error]);\n\n // Reduce messages to collapse related blocks.\n const reducedMessages = useMemo(() => {\n if (!debug) {\n return messages.reduce(reduceMessages, { messages: [] }).messages;\n } else {\n return messages;\n }\n }, [messages, debug]);\n\n const getDelta = (idx: number) => {\n invariant(idx > 0);\n const prev = new Date(reducedMessages[idx - 1].created).getTime();\n const current = new Date(reducedMessages[idx].created).getTime();\n return current - prev;\n };\n\n return (\n <ScrollContainer.Root pin fade ref={forwardedRef} classNames={classNames}>\n <ScrollContainer.Content\n classNames='relative flex flex-col gap-2 pbs-2 pbe-2'\n style={{ '--user-fill': `var(--dx-${userHue}Fill)` } as CSSProperties}\n >\n {reducedMessages.map((message, idx) => (\n <Fragment key={message.id}>\n {debug && (\n <div className={mx('flex justify-end text-subdued', styles.margin)}>\n <pre className='text-xs'>\n {JSON.stringify({ created: message.created, delta: idx > 0 ? getDelta(idx) : undefined })}\n </pre>\n </div>\n )}\n <ChatMessage message={message} debug={debug} onEvent={onEvent} {...props} />\n </Fragment>\n ))}\n\n {error && <ChatError error={error} onEvent={onEvent} />}\n </ScrollContainer.Content>\n <ScrollContainer.ScrollDownButton />\n </ScrollContainer.Root>\n );\n },\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type FC, Fragment, type PropsWithChildren, useMemo } from 'react';\n\nimport { ErrorBoundary, Surface } from '@dxos/app-framework';\nimport { resolveRef } from '@dxos/client';\nimport { Obj } from '@dxos/echo';\nimport { invariant } from '@dxos/invariant';\nimport { DXN, DXN_ECHO_REGEXP } from '@dxos/keys';\nimport { useClient } from '@dxos/react-client';\nimport { type Space } from '@dxos/react-client/echo';\nimport { Button, IconButton, Link, type ThemedClassName, useTranslation } from '@dxos/react-ui';\nimport { MarkdownViewer, ToggleContainer } from '@dxos/react-ui-components';\nimport { Json } from '@dxos/react-ui-syntax-highlighter';\nimport { mx } from '@dxos/react-ui-theme';\nimport { ContentBlock, type DataType } from '@dxos/schema';\nimport { safeParseJson } from '@dxos/util';\n\nimport { meta } from '../../meta';\nimport { type ChatEvent } from '../Chat';\nimport { Toolbox } from '../Toolbox';\n\nimport { ObjectLink } from './Link';\nimport { type AiToolProvider, ToolBlock, isToolMessage } from './ToolBlock';\n\nexport const styles = {\n margin: 'pie-4 pis-4',\n padding: 'pis-2 pie-2 pbs-0.5 pbe-0.5',\n panel: 'is-full rounded-sm',\n panelHeader: 'bg-groupSurface',\n panelContent: 'bg-modalSurface',\n json: '!p-1 text-xs bg-transparent',\n};\n\nexport type ChatMessageProps = ThemedClassName<{\n debug?: boolean;\n space?: Space;\n message: DataType.Message;\n toolProvider?: AiToolProvider;\n onEvent?: (event: ChatEvent) => void;\n onDelete?: () => void;\n}>;\n\nexport const ChatMessage = ({\n classNames,\n debug,\n space,\n message,\n toolProvider,\n onEvent,\n onDelete,\n}: ChatMessageProps) => {\n const { t } = useTranslation(meta.id);\n const {\n sender: { role },\n blocks,\n } = message;\n\n if (!debug && toolProvider && isToolMessage(message)) {\n return (\n <MessageItem classNames={[styles.margin, 'animate-[fadeIn_0.5s]']}>\n <ToolBlock message={message} toolProvider={toolProvider} />\n </MessageItem>\n );\n }\n\n return (\n <>\n {blocks.map((block, idx) => {\n // TODO(burdon): Filter empty messages.\n if (block._tag === 'text' && block.text.replaceAll(/\\s+/g, '').length === 0) {\n return null;\n }\n\n const Component: ContentBlockComponent = components[block._tag] ?? components.default!;\n if (!Component) {\n return null;\n }\n\n return (\n <MessageItem key={idx} classNames={classNames} user={block._tag === 'text' && role === 'user'}>\n <ErrorBoundary data={block}>\n <Component space={space} block={block} onEvent={onEvent} />\n </ErrorBoundary>\n </MessageItem>\n );\n })}\n\n {onDelete && (\n <div className={mx('flex justify-end pbs-2 pbe-2 opacity-50 hover:opacity-100', styles.margin)}>\n <IconButton\n classNames='animate-[fadeIn_0.5s]'\n icon='ph--trash--regular'\n iconOnly\n label={t('button delete message')}\n onClick={() => onDelete()}\n />\n </div>\n )}\n </>\n );\n};\n\ntype ContentBlockProps = {\n space?: Space;\n block: ContentBlock.Any;\n onEvent?: (event: ChatEvent) => void;\n};\n\ntype ContentBlockComponent = FC<ContentBlockProps>;\n\n/**\n * Components for rendering content blocks.\n */\nconst components: Partial<Record<ContentBlock.Any['_tag'] | 'default', ContentBlockComponent>> = {\n //\n // Text\n //\n ['text' as const]: ({ space, block }) => {\n invariant(block._tag === 'text');\n\n return (\n <MarkdownViewer\n content={preprocessTextContent(block.text)}\n components={{\n a: ({ node: { properties }, children, href, ...props }) => {\n if (space && typeof properties?.href === 'string' && properties?.href?.startsWith('dxn')) {\n try {\n // TODO(burdon): Check valid length (since serialized).\n const dxn = DXN.parse(properties.href);\n return <ObjectLink space={space} dxn={dxn} />;\n } catch {}\n }\n\n // TODO(burdon): Can we revert to the default handler?\n return (\n <Link href={href} target='_blank' rel='noopener noreferrer' {...props}>\n {children}\n </Link>\n );\n },\n img: ({ node: { properties } }) => {\n const client = useClient();\n if (space && typeof properties?.src === 'string' && properties?.src?.startsWith('dxn')) {\n try {\n const dxn = DXN.parse(properties?.src);\n const subject = resolveRef(client, dxn, space);\n const data = useMemo(() => ({ subject }), [subject]);\n return <Surface role='card--transclusion' data={data} limit={1} />;\n } catch {}\n }\n return <img {...properties} />;\n },\n }}\n />\n );\n },\n\n //\n // Suggest\n //\n ['suggestion' as const]: ({ block, onEvent }) => {\n invariant(block._tag === 'suggestion');\n\n return (\n <IconButton\n icon='ph--lightning--regular'\n label={block.text}\n classNames='text-description'\n onClick={() => onEvent?.({ type: 'submit', text: block.text })}\n />\n );\n },\n\n //\n // Select\n //\n ['select' as const]: ({ block, onEvent }) => {\n invariant(block._tag === 'select');\n\n return (\n <div className='flex flex-wrap gap-1'>\n {block.options.map((option, idx) => (\n <Button\n classNames={'animate-[fadeIn_0.5s] rounded-sm text-sm'}\n key={idx}\n onClick={() => onEvent?.({ type: 'submit', text: option })}\n >\n {option}\n </Button>\n ))}\n </div>\n );\n },\n\n //\n // Toolkit\n //\n ['toolkit' as const]: ({ block }) => {\n invariant(block._tag === 'toolkit');\n\n const { t } = useTranslation(meta.id);\n return (\n <ToggleContainer.Root classNames={styles.panel} defaultOpen>\n <ToggleContainer.Header classNames={styles.panelHeader} title={t('toolkit label')} />\n <ToggleContainer.Content classNames={styles.panelContent}>\n <Toolbox />\n </ToggleContainer.Content>\n </ToggleContainer.Root>\n );\n },\n\n //\n // Summary\n //\n ['summary' as const]: ({ block }) => {\n invariant(block._tag === 'summary');\n\n const summary = ContentBlock.createSummaryMessage(block, false);\n return <div className='text-sm text-subdued'>{summary}</div>;\n },\n\n //\n // JSON\n //\n ['json' as const]: ({ block, onEvent }) => {\n invariant(block._tag === 'json');\n\n // TODO(burdon): Disposition is deprecated.\n switch (block.disposition) {\n case 'graph': {\n return (\n <div className='flex flex-wrap gap-1'>\n <Surface\n role='card'\n data={{ subject: JSON.parse(block.data ?? '{}') }}\n limit={1}\n fallback={<div className='font-mono text-xs text-pre'>{block.data}</div>}\n />\n {onEvent && (\n <IconButton\n icon='ph--plus--regular'\n label='Add to graph'\n onClick={() => onEvent?.({ type: 'add', object: JSON.parse(block.data ?? '{}') })}\n />\n )}\n </div>\n );\n }\n\n default: {\n return (\n <ToggleContainer.Root classNames={styles.panel}>\n <ToggleContainer.Header classNames={styles.panelHeader} title={block.disposition ?? block._tag} />\n <ToggleContainer.Content classNames={styles.panelContent}>\n <Json data={safeParseJson(block.data ?? block)} classNames={styles.json} />\n </ToggleContainer.Content>\n </ToggleContainer.Root>\n );\n }\n }\n },\n\n //\n // Fallback\n //\n default: ({ block }) => {\n return (\n <ToggleContainer.Root classNames={styles.panel}>\n <ToggleContainer.Header classNames={styles.panelHeader} title={block._tag} />\n <ToggleContainer.Content classNames={styles.panelContent}>\n <Json data={block} classNames={styles.json} />\n </ToggleContainer.Content>\n </ToggleContainer.Root>\n );\n },\n};\n\nexport type ChatErrorProps = Pick<ChatMessageProps, 'onEvent'> & {\n error: Error;\n};\n\n/**\n * Error message with retry.\n */\nexport const ChatError = ({ error, onEvent }: ChatErrorProps) => {\n const { t } = useTranslation(meta.id);\n return (\n <>\n <MessageItem>\n <ToggleContainer.Root classNames={styles.panel}>\n <ToggleContainer.Header classNames={styles.panelHeader} title={error.message || t('error label')} />\n <ToggleContainer.Content classNames={styles.panelContent}>{String(error.cause)}</ToggleContainer.Content>\n </ToggleContainer.Root>\n </MessageItem>\n <MessageItem>\n <IconButton\n classNames='bg-errorSurface text-errorSurfaceText'\n icon='ph--lightning--regular'\n label={t('button retry')}\n onClick={() => onEvent?.({ type: 'retry' })}\n />\n </MessageItem>\n </>\n );\n};\n\n/**\n * Wrapper for each message.\n */\nconst MessageItem = ({ classNames, children, user }: ThemedClassName<PropsWithChildren<{ user?: boolean }>>) => {\n if (!children) {\n return null;\n }\n\n return (\n <div role='list-item' className={mx('flex is-full', user && 'justify-end', styles.margin, classNames)}>\n <div\n className={mx(user ? ['bg-[--user-fill] text-white dark:text-black rounded-sm', styles.padding] : 'is-full')}\n >\n {children}\n </div>\n </div>\n );\n};\n\nexport const renderObjectLink = (obj: Obj.Any, transclusion?: boolean) =>\n `${transclusion ? '!' : ''}[${Obj.getLabel(obj)}](${Obj.getDXN(obj).toString()})`;\n\n// TODO(burdon): Move to parser.\nconst preprocessTextContent = (content: string) =>\n content.replaceAll(new RegExp(DXN_ECHO_REGEXP, 'g'), (_, dxn) => `<${dxn}>`);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type Space } from '@dxos/client/echo';\nimport { Obj, Ref } from '@dxos/echo';\nimport { type DXN } from '@dxos/keys';\nimport { DxRefTag } from '@dxos/lit-ui/react';\n\nimport { useResolvedRef } from '../../hooks';\n\nexport type ObjectLinkProps = {\n space: Space;\n dxn: DXN;\n};\n\nexport const ObjectLink = ({ space, dxn }: ObjectLinkProps) => {\n const object = useResolvedRef(space, Ref.fromDXN(dxn));\n const title = Obj.getLabel(object) ?? object?.id ?? dxn.toString();\n return <DxRefTag refid={dxn.toString()}>{title}</DxRefTag>;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type AiTool } from '@effect/ai';\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\n\nimport { type AgentStatus } from '@dxos/ai';\nimport { useTranslation } from '@dxos/react-ui';\nimport { NumericTabs, TextCrawl, ToggleContainer } from '@dxos/react-ui-components';\nimport { Json } from '@dxos/react-ui-syntax-highlighter';\nimport { type ContentBlock, type DataType } from '@dxos/schema';\nimport { isNonNullable, isNotFalsy } from '@dxos/util';\nimport { safeParseJson } from '@dxos/util';\n\nimport { meta } from '../../meta';\n\nimport { styles } from './ChatMessage';\n\nexport const isToolMessage = (message: DataType.Message) => {\n return message.blocks.some((block) => block._tag === 'toolCall' || block._tag === 'toolResult');\n};\n\nexport type AiToolProvider = () => readonly AiTool.Any[];\n\nexport type ToolBlockProps = {\n message: DataType.Message;\n toolProvider: AiToolProvider;\n};\n\n// TODO(burdon): Pass in blocks.\nexport const ToolBlock = ({ message, toolProvider }: ToolBlockProps) => {\n const { t } = useTranslation(meta.id);\n const { blocks = [] } = message;\n\n const getToolCaption = (tool?: AiTool.Any, status?: AgentStatus) => {\n if (!tool) {\n return t('calling tool label');\n }\n\n return status?.message ?? tool.description ?? [t('calling label'), tool.name].join(' ');\n };\n\n const items = useMemo(() => {\n let lastToolCall: { tool: AiTool.Any | undefined; block: ContentBlock.ToolCall } | undefined;\n const tools = toolProvider();\n return blocks\n .filter((block) => block._tag === 'toolCall' || block._tag === 'toolResult' || block._tag === 'summary')\n .map((block) => {\n switch (block._tag) {\n case 'toolCall': {\n if (block.pending && lastToolCall?.block.toolCallId === block.toolCallId) {\n return null;\n }\n\n const tool = tools.find((tool) => tool.name === block.name);\n lastToolCall = { tool, block };\n return {\n title: getToolCaption(lastToolCall?.tool),\n content: {\n ...block,\n input: safeParseJson(block.input),\n },\n };\n }\n\n case 'toolResult': {\n // TODO(burdon): Parse error type.\n if (block.error) {\n return {\n title: t('error label'),\n content: block,\n };\n }\n\n const title = getToolCaption(lastToolCall?.tool ?? t('tool result label'));\n lastToolCall = undefined;\n return {\n title,\n content: {\n ...block,\n result: safeParseJson(block.result),\n },\n };\n }\n\n case 'summary': {\n if (!lastToolCall) {\n return null;\n }\n\n return {\n title: t('summary label'),\n content: block,\n };\n }\n }\n })\n .filter(isNonNullable);\n }, [blocks]);\n\n return <ToolContainer items={items} />;\n};\n\ntype ToolContainerParams = {\n items: { title: string; content: any }[];\n};\n\nexport const ToolContainer = ({ items }: ToolContainerParams) => {\n const tabsRef = useRef<HTMLDivElement>(null);\n const [selected, setSelected] = useState(0);\n const [open, setOpen] = useState(false);\n useEffect(() => {\n if (open) {\n tabsRef.current?.focus();\n }\n }, [open]);\n\n const handleSelect = (index: number) => {\n setSelected(index);\n };\n\n const title = useMemo(() => {\n const lines = items.map((item) => item.title).filter(isNotFalsy);\n return <TextCrawl key='status-roll' lines={lines} autoAdvance />;\n }, [items]);\n\n const data = items[selected].content;\n\n return (\n <ToggleContainer.Root classNames={styles.panel} open={open} onChangeOpen={setOpen}>\n <ToggleContainer.Header classNames={styles.panelHeader} title={title} />\n <ToggleContainer.Content classNames={['grid grid-cols-[32px_1fr]', styles.panelContent]}>\n <NumericTabs ref={tabsRef} classNames='p-1' length={items.length} selected={selected} onSelect={handleSelect} />\n <Json\n data={data}\n classNames={styles.json}\n replacer={{\n maxDepth: 3,\n maxArrayLen: 10,\n maxStringLen: 128,\n }}\n />\n </ToggleContainer.Content>\n </ToggleContainer.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type ContentBlock, type DataType } from '@dxos/schema';\n\ntype Reducer<R, I> = (acc: R, value: I, idx: number) => R;\n\n/**\n * Reducer that collapses related message blocks into single messages.\n * For example, combines tool request/response pairs into a single message.\n *\n * Typical order:\n * - message 0\n * - text\n * - message 1\n * - text\n * - toolCall\n * - summary\n * - message 2\n * - toolResult\n * - message 3\n * - text\n * - summary\n *\n * Coverts to:\n * - message 0\n * - text\n * - message 1\n * - text\n * - message 2\n * - toolCall\n * - toolResult\n * - summary\n * - message 3\n * - text\n * - summary\n */\nexport const reduceMessages: Reducer<\n {\n messages: DataType.Message[];\n current?: DataType.Message;\n toolBlock?: boolean;\n assistantMessages?: DataType.Message[];\n },\n DataType.Message\n> = ({ messages, current, toolBlock, assistantMessages = [] }, message) => {\n // Treat tool calls as assistant messages.\n let assistant = message?.sender.role === 'assistant';\n let i = 0;\n for (const block of message.blocks) {\n switch (block._tag) {\n // TODO(burdon): Preserve call tool title.\n case 'toolCall': {\n assistant = true;\n if (!toolBlock) {\n current = {\n ...message,\n id: [message.id, i++].join('_'),\n blocks: [block],\n };\n messages.push(current);\n toolBlock = true;\n } else {\n current!.blocks.push(block);\n }\n break;\n }\n\n case 'toolResult': {\n assistant = true;\n if (toolBlock) {\n current!.blocks.push(block);\n }\n break;\n }\n\n case 'summary': {\n assistant = true;\n if (toolBlock) {\n current!.blocks.push(block);\n } else {\n const summary = reduceSummary([...assistantMessages, message]);\n current!.blocks.push(summary);\n }\n break;\n }\n\n default: {\n assistant = message.sender.role === 'assistant';\n current = {\n ...message,\n id: [message.id, i++].join('_'),\n blocks: [block],\n };\n messages.push(current);\n toolBlock = false;\n break;\n }\n }\n }\n\n return {\n messages,\n current,\n toolBlock,\n assistantMessages: assistant ? [...assistantMessages, message] : undefined,\n };\n};\n\n/**\n * Accumulate token counts from all summary blocks in pending messages.\n */\nconst reduceSummary = (messages: DataType.Message[]): ContentBlock.Summary => {\n let start: number | undefined;\n return messages.reduce<ContentBlock.Summary>(\n (acc, msg) => {\n const time = new Date(msg.created).getTime();\n if (!start) {\n start = time;\n }\n msg.blocks.forEach((block) => {\n switch (block._tag) {\n case 'toolCall': {\n acc.toolCalls = (acc.toolCalls ?? 0) + 1;\n break;\n }\n case 'summary': {\n acc.model = block.model;\n if (block.usage) {\n acc.message = block.message;\n acc.usage = {\n inputTokens: (acc.usage?.inputTokens ?? 0) + (block.usage.inputTokens ?? 0),\n outputTokens: (acc.usage?.outputTokens ?? 0) + (block.usage.outputTokens ?? 0),\n totalTokens: (acc.usage?.totalTokens ?? 0) + (block.usage.totalTokens ?? 0),\n };\n acc.duration = time - (start ?? time);\n }\n break;\n }\n }\n });\n\n return acc;\n },\n {\n _tag: 'summary',\n duration: 0,\n } satisfies ContentBlock.Summary,\n );\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["useSignalEffect", "useCallback", "useMemo", "useState", "Capabilities", "useCapabilities", "Blueprint", "Filter", "Obj", "Ref", "isNonNullable", "useBlueprintRegistry", "blueprints", "useCapabilities", "Capabilities", "BlueprintDefinition", "useMemo", "Blueprint", "Registry", "useBlueprints", "blueprintRegistry", "query", "useActiveBlueprints", "context", "active", "setActive", "useState", "Map", "useSignalEffect", "refs", "value", "map", "ref", "target", "filter", "isNonNullable", "blueprint", "key", "useBlueprintHandlers", "space", "onUpdateBlueprint", "useCallback", "checked", "objects", "db", "Filter", "type", "run", "storedBlueprint", "find", "getByKey", "add", "Obj", "clone", "bind", "Ref", "make", "unbind", "RegistryContext", "useContext", "useMemo", "AiConversation", "log", "Schema", "ModelProviders", "ModelProvider", "Schema", "Literal", "createModelLabel", "model", "parts", "split", "length", "AiServicePresets", "provider", "map", "i", "id", "label", "Registry", "Rx", "Cause", "Effect", "Exit", "Fiber", "Layer", "Option", "AiService", "DEFAULT_EDGE_MODEL", "AiSession", "ArtifactDiffResolver", "GenerationObserver", "createSystemPrompt", "Obj", "throwCause", "log", "DataType", "trim", "defaultOptions", "model", "AiChatProcessor", "isRunning", "_fiber", "context", "_conversation", "conversation", "blueprintRegistry", "_options", "request", "requestParam", "cancel", "_lastRequest", "_rx", "set", "error", "none", "createRequest", "system", "prompt", "message", "observer", "_observer", "pipe", "provide", "provideMerge", "_services", "provideService", "_artifactDiffResolver", "asVoid", "tapErrorCause", "cause", "void", "runFork", "response", "join", "runPromiseExit", "isSuccess", "isInterruptedOnly", "undefined", "err", "some", "Error", "runPromise", "gen", "interrupt", "retry", "updateName", "chat", "history", "getHistory", "fiber", "session", "run", "tap", "messages", "find", "sender", "role", "title", "blocks", "b", "_tag", "text", "name", "_pending", "_streaming", "streaming", "_onMessage", "_onBlock", "make", "get", "isSome", "match", "onNone", "onSome", "resolve", "_artifacts", "versions", "Map", "fn", "update", "pending", "bind", "block", "map", "filter", "getOrElse", "Message", "created", "Date", "toISOString", "observableRegistry", "onBlock", "onMessage", "capabilities", "modelRegistry", "getCapabilities", "useChatProcessor", "chat", "preset", "services", "blueprintRegistry", "settings", "observableRegistry", "useContext", "RegistryContext", "conversation", "useMemo", "queue", "target", "AiConversation", "processor", "undefined", "log", "model", "AiChatProcessor", "AiToolkit", "Layer", "useMemo", "Capabilities", "useCapabilities", "makeToolExecutionServiceFromFunctions", "makeToolResolverFromFunctions", "ComputeEventLogger", "CredentialsService", "DatabaseService", "LocalFunctionExecutionService", "QueueService", "RemoteFunctionExecutionService", "TracingService", "lazy", "AiService", "lazy", "AppGraphBuilder", "AssistantState", "BlueprintDefinition", "EdgeModelResolver", "IntentResolver", "LocalModelResolver", "ReactSurface", "Settings", "Toolkit", "useChatServices", "space", "chat", "serviceLayer", "useCapabilities", "AssistantCapabilities", "AiServiceLayer", "at", "Layer", "die", "functions", "Capabilities", "Functions", "toolkits", "Toolkit", "handlers", "ToolkitHandler", "useMemo", "allFunctions", "flat", "toolkit", "AiToolkit", "merge", "handlersLayer", "mergeAll", "empty", "makeToolResolverFromFunctions", "makeToolExecutionServiceFromFunctions", "CredentialsService", "layerFromDatabase", "ComputeEventLogger", "layerFromTracing", "pipe", "provideMerge", "DatabaseService", "layer", "db", "notAvailable", "QueueService", "queues", "traceQueue", "target", "TracingService", "layerQueue", "layerNoop", "LocalFunctionExecutionService", "RemoteFunctionExecutionService", "mockLayer", "useMemo", "AiContextBinder", "useContextBinder", "chat", "binder", "useMemo", "queue", "target", "AiContextBinder", "useState", "useOnline", "online", "setOnline", "useState", "useCallback", "useEffect", "useMemo", "useState", "usePresets", "online", "preset", "setPreset", "useState", "presets", "useMemo", "AiServicePresets", "filter", "provider", "presetOptions", "map", "id", "model", "label", "useEffect", "handlePresetChange", "useCallback", "find", "onPresetChange", "useCallback", "Ref", "log", "isNonNullable", "useContextObjects", "space", "context", "objects", "value", "map", "ref", "target", "filter", "handleUpdateObject", "dxn", "checked", "id", "asEchoDXN", "object", "db", "getObjectById", "echoId", "warn", "fromDXN", "bind", "unbind", "onUpdateObject", "useMemo", "Obj", "useQueue", "AgentStatus", "Obj", "MESSAGE_PROPERTY_TOOL_CALL_ID", "LogLevel", "ContentBlock", "DataType", "isNotFalsy", "ExecutionGraph", "addEvents", "events", "event", "Obj", "instanceOf", "DataType", "Message", "messageCommits", "messageToCommit", "_commits", "push", "map", "c", "branch", "forEach", "_branchNames", "add", "AgentStatus", "getBranchName", "parentMessage", "toolCallId", "id", "message", "icon", "parents", "getToolCallId", "undefined", "getGraph", "lastRequest", "idx", "findLastIndex", "tags", "includes", "commits", "slice", "branches", "Array", "from", "_define_property", "Set", "blocks", "block", "getMessageBranch", "parent", "getParentId", "_tag", "text", "trim", "length", "getGenericBlockId", "sender", "role", "split", "level", "LogLevel", "INFO", "name", "getToolResultId", "error", "ERROR", "ContentBlock", "createSummaryMessage", "statusText", "reasoningText", "stringifyRef", "reference", "filter", "isNotFalsy", "messageId", "options", "properties", "MESSAGE_PROPERTY_TOOL_CALL_ID", "ref", "target", "stringifyObject", "dxn", "asEchoDXN", "echoId", "asQueueDXN", "objectId", "obj", "getLabel", "getTypename", "useExecutionGraph", "queueRef", "lastRequest", "queue", "useQueue", "dxn", "useMemo", "graph", "ExecutionGraph", "addEvents", "objects", "filter", "Obj", "isObject", "getGraph", "useCallback", "useRef", "useState", "Option", "useEffect", "useState", "ItemAnnotation", "useItemTypes", "space", "types", "setTypes", "useState", "useEffect", "db", "schemaRegistry", "query", "subscribe", "Array", "from", "Set", "graph", "schemas", "results", "filter", "type", "Option", "isSome", "ItemAnnotation", "get", "fire", "useMemo", "Type", "matchCompletion", "staticCompletion", "typeahead", "useMemo", "Capabilities", "useCapabilities", "Filter", "Obj", "useReferencesProvider", "space", "blueprints", "useCapabilities", "Capabilities", "BlueprintDefinition", "useMemo", "undefined", "getReferences", "query", "objects", "db", "Filter", "everything", "run", "filter", "object", "stringMatch", "Obj", "getLabel", "getDXN", "map", "uri", "toString", "label", "resolveReference", "ids", "first", "toLowerCase", "startsWith", "useMemo", "useSyncExternalStore", "useResolvedRef", "space", "ref", "subscribe", "getSnapshot", "useMemo", "resolver", "db", "graph", "createRefResolver", "currentCallback", "undefined", "cb", "resolveSync", "dxn", "toString", "useSyncExternalStore", "React", "Fragment", "useEffect", "useState", "FunctionType", "log", "Filter", "useQuery", "useTranslation", "mx", "Toolbox", "classNames", "functions", "services", "blueprints", "activeBlueprints", "t", "useTranslation", "meta", "id", "div", "className", "mx", "length", "Section", "title", "items", "map", "target", "name", "description", "subitems", "tools", "toolId", "safeToolId", "service", "serviceId", "striped", "stripeClassNames", "gridClassNames", "subGridClassNames", "h1", "i", "Fragment", "key", "ToolboxContainer", "space", "processor", "useQuery", "Filter", "type", "ServiceType", "serviceTools", "setServiceTools", "useState", "useEffect", "log", "queueMicrotask", "FunctionType", "context", "value", "split", "pop", "Prec", "keymap", "useRxValue", "createContext", "Array", "Option", "React", "useCallback", "useEffect", "useMemo", "useRef", "useState", "Event", "Obj", "log", "useVoiceInput", "getSpace", "useQueue", "useIdentity", "Input", "useTranslation", "ChatEditor", "references", "mx", "DataType", "isNotFalsy", "React", "IconButton", "useTranslation", "mx", "ChatActions", "classNames", "children", "microphone", "recording", "processing", "onEvent", "t", "useTranslation", "meta", "id", "React", "div", "className", "mx", "IconButton", "disabled", "variant", "size", "icon", "iconOnly", "label", "onClick", "type", "noTooltip", "onMouseDown", "onMouseUp", "onTouchStart", "onTouchEnd", "React", "useMemo", "useState", "Filter", "Obj", "Type", "useQuery", "Icon", "IconButton", "Popover", "Select", "useTranslation", "SearchList", "Tabs", "panelClassNames", "ChatOptions", "space", "context", "blueprintRegistry", "presets", "preset", "onPresetChange", "t", "useTranslation", "meta", "id", "React", "div", "role", "className", "Popover", "Root", "Trigger", "asChild", "IconButton", "variant", "icon", "iconOnly", "size", "label", "Portal", "Content", "side", "classNames", "ObjectsPanel", "Arrow", "Tabs", "orientation", "defaultValue", "defaultActivePart", "Viewport", "Tabpanel", "value", "BlueprintsPanel", "ModelsPanel", "Tablist", "IconTab", "blueprints", "useBlueprints", "activeBlueprints", "useActiveBlueprints", "onUpdateBlueprint", "useBlueprintHandlers", "SearchList", "map", "blueprint", "isActive", "has", "key", "Item", "name", "onSelect", "Icon", "Input", "placeholder", "ul", "li", "aria-selected", "tabIndex", "onClick", "ANY", "types", "useItemTypes", "typenames", "useMemo", "type", "typename", "Type", "getTypename", "ns", "sort", "a", "b", "localeCompare", "setTypename", "useState", "anyFilter", "Filter", "or", "objects", "useQuery", "contextObjects", "onUpdateObject", "useContextObjects", "length", "object", "Obj", "getLabel", "findIndex", "obj", "getDXN", "Select", "undefined", "onValueChange", "TriggerButton", "density", "ScrollUpButton", "Option", "ScrollDownButton", "React", "Select", "React", "Obj", "IconButton", "toLocalizedString", "useTranslation", "mx", "ChatReferences", "classNames", "context", "space", "t", "useTranslation", "meta", "id", "objects", "onUpdateObject", "useContextObjects", "React", "ul", "className", "mx", "map", "obj", "dxn", "Obj", "getDXN", "typename", "getTypename", "label", "getLabel", "ns", "li", "key", "toString", "data-hue", "toLocalizedString", "IconButton", "iconOnly", "variant", "size", "icon", "onClick", "React", "useEffect", "useState", "Tooltip", "useTimeout", "Spinner", "mx", "period", "ChatStatusIndicator", "classNames", "preset", "processing", "error", "props", "init", "setInit", "useState", "useEffect", "useTimeout", "React", "div", "role", "className", "mx", "Spinner", "duration", "state", "Tooltip", "Trigger", "asChild", "content", "message", "React", "Fragment", "forwardRef", "useEffect", "useMemo", "invariant", "PublicKey", "ScrollContainer", "mx", "keyToFallback", "React", "useMemo", "ErrorBoundary", "Surface", "resolveRef", "Obj", "invariant", "DXN", "DXN_ECHO_REGEXP", "useClient", "Button", "IconButton", "Link", "useTranslation", "MarkdownViewer", "ToggleContainer", "Json", "mx", "ContentBlock", "safeParseJson", "React", "Obj", "Ref", "DxRefTag", "ObjectLink", "space", "dxn", "object", "useResolvedRef", "Ref", "fromDXN", "title", "Obj", "getLabel", "id", "toString", "React", "DxRefTag", "refid", "React", "useEffect", "useMemo", "useRef", "useState", "useTranslation", "NumericTabs", "TextCrawl", "ToggleContainer", "Json", "isNonNullable", "isNotFalsy", "safeParseJson", "isToolMessage", "message", "blocks", "some", "block", "_tag", "ToolBlock", "toolProvider", "t", "useTranslation", "meta", "id", "getToolCaption", "tool", "status", "description", "name", "join", "items", "useMemo", "lastToolCall", "tools", "filter", "map", "pending", "toolCallId", "find", "title", "content", "input", "safeParseJson", "error", "undefined", "result", "isNonNullable", "React", "ToolContainer", "tabsRef", "useRef", "selected", "setSelected", "useState", "open", "setOpen", "useEffect", "current", "focus", "handleSelect", "index", "lines", "item", "isNotFalsy", "TextCrawl", "key", "autoAdvance", "data", "ToggleContainer", "Root", "classNames", "styles", "panel", "onChangeOpen", "Header", "panelHeader", "Content", "panelContent", "NumericTabs", "ref", "length", "onSelect", "Json", "json", "replacer", "maxDepth", "maxArrayLen", "maxStringLen", "styles", "margin", "padding", "panel", "panelHeader", "panelContent", "json", "ChatMessage", "classNames", "debug", "space", "message", "toolProvider", "onEvent", "onDelete", "t", "useTranslation", "meta", "id", "sender", "role", "blocks", "isToolMessage", "React", "MessageItem", "ToolBlock", "map", "block", "idx", "_tag", "text", "replaceAll", "length", "Component", "components", "default", "key", "user", "ErrorBoundary", "data", "div", "className", "mx", "IconButton", "icon", "iconOnly", "label", "onClick", "invariant", "MarkdownViewer", "content", "preprocessTextContent", "a", "node", "properties", "children", "href", "props", "startsWith", "dxn", "DXN", "parse", "ObjectLink", "Link", "target", "rel", "img", "client", "useClient", "src", "subject", "resolveRef", "useMemo", "Surface", "limit", "type", "options", "option", "Button", "ToggleContainer", "Root", "defaultOpen", "Header", "title", "Content", "Toolbox", "summary", "ContentBlock", "createSummaryMessage", "disposition", "JSON", "fallback", "object", "Json", "safeParseJson", "ChatError", "error", "String", "cause", "preprocessTextContent", "content", "replaceAll", "RegExp", "DXN_ECHO_REGEXP", "_", "dxn", "reduceMessages", "messages", "current", "toolBlock", "assistantMessages", "message", "assistant", "sender", "role", "i", "block", "blocks", "_tag", "id", "join", "push", "summary", "reduceSummary", "undefined", "start", "reduce", "acc", "msg", "time", "Date", "created", "getTime", "forEach", "toolCalls", "model", "usage", "inputTokens", "outputTokens", "totalTokens", "duration", "ChatThread", "forwardRef", "classNames", "identity", "messages", "error", "debug", "onEvent", "props", "forwardedRef", "userHue", "useMemo", "profile", "data", "hue", "keyToFallback", "identityKey", "PublicKey", "random", "useEffect", "type", "reducedMessages", "reduce", "reduceMessages", "getDelta", "idx", "invariant", "prev", "Date", "created", "getTime", "current", "React", "ScrollContainer", "Root", "pin", "fade", "ref", "Content", "style", "map", "message", "Fragment", "key", "id", "div", "className", "mx", "styles", "margin", "pre", "JSON", "stringify", "delta", "undefined", "ChatMessage", "ChatError", "ScrollDownButton", "ChatContextProvider", "useChatContext", "createContext", "ChatRoot", "classNames", "children", "chat", "processor", "onEvent", "props", "debug", "setDebug", "useState", "space", "getSpace", "queue", "useQueue", "dxn", "pending", "useRxValue", "messages", "streaming", "lastPrompt", "useRef", "undefined", "useMemo", "queueMessages", "objects", "filter", "Obj", "instanceOf", "DataType", "Message", "Array", "dedupeWith", "a", "b", "id", "event", "Event", "useEffect", "on", "ev", "type", "current", "log", "info", "text", "request", "message", "retry", "cancel", "emit", "React", "div", "role", "className", "mx", "displayName", "ChatPrompt", "outline", "placeholder", "expandable", "online", "presets", "preset", "onPresetChange", "onOnlineChange", "t", "useTranslation", "meta", "error", "pipe", "Option", "getOrUndefined", "streamingRef", "editorRef", "active", "setActive", "getText", "length", "setText", "focus", "recording", "useVoiceInput", "onUpdate", "referencesProvider", "useReferencesProvider", "extensions", "references", "provider", "Prec", "highest", "keymap", "of", "key", "preventDefault", "run", "isNotFalsy", "handleSubmit", "useCallback", "handleEvent", "ChatStatusIndicator", "processing", "ChatEditor", "ref", "autoFocus", "lineWrapping", "onSubmit", "ChatOptions", "blueprintRegistry", "context", "ChatReferences", "ChatActions", "microphone", "Input", "Root", "Switch", "checked", "onCheckedChange", "ChatThread", "identity", "useIdentity", "toolProvider", "conversation", "toolkit", "tools", "scrollerRef", "scrollToBottom", "NativeChatThread", "Chat", "Prompt", "Thread"]
|
|
7
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
AssistantCapabilities
|
|
3
|
-
} from "./chunk-IJAJRAR7.mjs";
|
|
4
|
-
import "./chunk-O4LUJEDV.mjs";
|
|
5
|
-
import "./chunk-J5LGTIGS.mjs";
|
|
6
|
-
|
|
7
|
-
// src/capabilities/edge-model-resolver.ts
|
|
8
|
-
import * as AnthropicClient from "@effect/ai-anthropic/AnthropicClient";
|
|
9
|
-
import { FetchHttpClient } from "@effect/platform";
|
|
10
|
-
import { Layer } from "effect";
|
|
11
|
-
import { AiServiceRouter } from "@dxos/ai";
|
|
12
|
-
import { contributes } from "@dxos/app-framework";
|
|
13
|
-
var edge_model_resolver_default = () => [
|
|
14
|
-
contributes(AssistantCapabilities.AiModelResolver, AiServiceRouter.AnthropicResolver.pipe(Layer.provide(AnthropicClient.layer({
|
|
15
|
-
// TODO(dmaretskyi): Read endpoint from config/settings.
|
|
16
|
-
apiUrl: "https://ai-service.dxos.workers.dev/provider/anthropic"
|
|
17
|
-
})), Layer.provide(FetchHttpClient.layer)))
|
|
18
|
-
];
|
|
19
|
-
export {
|
|
20
|
-
edge_model_resolver_default as default
|
|
21
|
-
};
|
|
22
|
-
//# sourceMappingURL=edge-model-resolver-E5M3CC46.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/edge-model-resolver.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as AnthropicClient from '@effect/ai-anthropic/AnthropicClient';\nimport { FetchHttpClient } from '@effect/platform';\nimport { Layer } from 'effect';\n\nimport { AiServiceRouter } from '@dxos/ai';\nimport { type Capability, contributes } from '@dxos/app-framework';\n\nimport { AssistantCapabilities } from './capabilities';\n\nexport default (): Capability<any>[] => [\n contributes(\n AssistantCapabilities.AiModelResolver,\n AiServiceRouter.AnthropicResolver.pipe(\n Layer.provide(\n AnthropicClient.layer({\n // TODO(dmaretskyi): Read endpoint from config/settings.\n apiUrl: 'https://ai-service.dxos.workers.dev/provider/anthropic',\n }),\n ),\n Layer.provide(FetchHttpClient.layer),\n ),\n ),\n];\n"],
|
|
5
|
-
"mappings": ";;;;;;;AAIA,YAAYA,qBAAqB;AACjC,SAASC,uBAAuB;AAChC,SAASC,aAAa;AAEtB,SAASC,uBAAuB;AAChC,SAA0BC,mBAAmB;AAI7C,IAAA,8BAAe,MAAyB;EACtCC,YACEC,sBAAsBC,iBACtBC,gBAAgBC,kBAAkBC,KAChCC,MAAMC,QACYC,sBAAM;;IAEpBC,QAAQ;EACV,CAAA,CAAA,GAEFH,MAAMC,QAAQG,gBAAgBF,KAAK,CAAA,CAAA;;",
|
|
6
|
-
"names": ["AnthropicClient", "FetchHttpClient", "Layer", "AiServiceRouter", "contributes", "contributes", "AssistantCapabilities", "AiModelResolver", "AiServiceRouter", "AnthropicResolver", "pipe", "Layer", "provide", "layer", "apiUrl", "FetchHttpClient"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/intent-resolver.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Effect } from 'effect';\n\nimport { Capabilities, type PluginContext, contributes, createIntent, createResolver } from '@dxos/app-framework';\nimport { AiContextBinder } from '@dxos/assistant';\nimport { Blueprint, Template } from '@dxos/blueprints';\nimport { fullyQualifiedId } from '@dxos/client/echo';\nimport { Sequence } from '@dxos/conductor';\nimport { Filter, Key, Obj, Ref } from '@dxos/echo';\nimport { CollectionAction } from '@dxos/plugin-space/types';\n\nimport { Assistant, AssistantAction } from '../types';\n\nimport { BLUEPRINT_KEY, createBlueprint } from './blueprint-definition';\nimport { AssistantCapabilities } from './capabilities';\n\nexport default (context: PluginContext) => [\n contributes(Capabilities.IntentResolver, [\n createResolver({\n intent: AssistantAction.OnSpaceCreated,\n resolve: ({ space, rootCollection }) =>\n Effect.gen(function* () {\n const { dispatch } = context.getCapability(Capabilities.IntentDispatcher);\n const { object: chatCollection } = yield* dispatch(\n createIntent(CollectionAction.CreateQueryCollection, { typename: Assistant.Chat.typename }),\n );\n const { object: blueprintCollection } = yield* dispatch(\n createIntent(CollectionAction.CreateQueryCollection, { typename: Blueprint.Blueprint.typename }),\n );\n rootCollection.objects.push(Ref.make(chatCollection), Ref.make(blueprintCollection));\n\n // Create default chat.\n const { object: chat } = yield* dispatch(createIntent(AssistantAction.CreateChat, { space }));\n space.db.add(chat);\n }),\n }),\n createResolver({\n intent: AssistantAction.CreateChat,\n resolve: async ({ space, name }) => {\n const queue = space.queues.create();\n const chat = Obj.make(Assistant.Chat, { name, queue: Ref.fromDXN(queue.dxn) });\n const { objects: blueprints } = await space.db.query(Filter.type(Blueprint.Blueprint)).run();\n // TODO(wittjosiah): This should be a space-level setting.\n // TODO(burdon): Clone when activated. Copy-on-write for template.\n let defaultBlueprint = blueprints.find((blueprint) => blueprint.key === BLUEPRINT_KEY);\n if (!defaultBlueprint) {\n defaultBlueprint = space.db.add(createBlueprint());\n }\n\n const binder = new AiContextBinder(queue);\n await binder.bind({ blueprints: [Ref.make(defaultBlueprint)] });\n\n return {\n data: { object: chat },\n };\n },\n }),\n createResolver({\n intent: AssistantAction.CreateBlueprint,\n resolve: ({ key, name, description }) => ({\n data: {\n object: Blueprint.make({ key, name, description, instructions: Template.make({ source: '' }) }),\n },\n }),\n }),\n createResolver({\n intent: AssistantAction.CreateSequence,\n resolve: ({ name }) => ({\n data: {\n object: Obj.make(Sequence, {\n name,\n steps: [\n {\n id: Key.ObjectId.random(),\n instructions: 'You are a helpful assistant.',\n },\n ],\n }),\n },\n }),\n }),\n createResolver({\n intent: AssistantAction.SetCurrentChat,\n resolve: ({ companionTo, chat }) =>\n Effect.gen(function* () {\n const state = context.getCapability(AssistantCapabilities.MutableState);\n state.currentChat[fullyQualifiedId(companionTo)] = chat;\n }),\n }),\n ]),\n];\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["Effect", "Capabilities", "contributes", "createIntent", "createResolver", "AiContextBinder", "Blueprint", "Template", "fullyQualifiedId", "Sequence", "Filter", "Key", "Obj", "Ref", "CollectionAction", "context", "contributes", "Capabilities", "IntentResolver", "createResolver", "intent", "AssistantAction", "OnSpaceCreated", "resolve", "space", "rootCollection", "Effect", "gen", "dispatch", "getCapability", "IntentDispatcher", "object", "chatCollection", "createIntent", "CollectionAction", "CreateQueryCollection", "typename", "Assistant", "Chat", "blueprintCollection", "Blueprint", "objects", "push", "Ref", "make", "chat", "CreateChat", "db", "add", "name", "queue", "queues", "create", "Obj", "fromDXN", "dxn", "blueprints", "query", "Filter", "type", "run", "defaultBlueprint", "find", "blueprint", "key", "BLUEPRINT_KEY", "createBlueprint", "binder", "AiContextBinder", "bind", "data", "CreateBlueprint", "description", "instructions", "Template", "source", "CreateSequence", "Sequence", "steps", "id", "Key", "ObjectId", "random", "SetCurrentChat", "companionTo", "state", "AssistantCapabilities", "MutableState", "currentChat", "fullyQualifiedId"]
|
|
7
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
AssistantCapabilities
|
|
3
|
-
} from "./chunk-IJAJRAR7.mjs";
|
|
4
|
-
import "./chunk-O4LUJEDV.mjs";
|
|
5
|
-
import "./chunk-J5LGTIGS.mjs";
|
|
6
|
-
|
|
7
|
-
// src/capabilities/local-model-resolver.ts
|
|
8
|
-
import { OpenAiClient } from "@effect/ai-openai";
|
|
9
|
-
import { FetchHttpClient } from "@effect/platform";
|
|
10
|
-
import { Layer } from "effect";
|
|
11
|
-
import { AiServiceRouter } from "@dxos/ai";
|
|
12
|
-
import { contributes } from "@dxos/app-framework";
|
|
13
|
-
var local_model_resolver_default = () => [
|
|
14
|
-
contributes(AssistantCapabilities.AiModelResolver, AiServiceRouter.LMStudioResolver.pipe(Layer.provide(OpenAiClient.layer({
|
|
15
|
-
apiUrl: AiServiceRouter.LMSTUDIO_ENDPOINT
|
|
16
|
-
})), Layer.provide(FetchHttpClient.layer)))
|
|
17
|
-
];
|
|
18
|
-
export {
|
|
19
|
-
local_model_resolver_default as default
|
|
20
|
-
};
|
|
21
|
-
//# sourceMappingURL=local-model-resolver-VZ5WZQIC.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/local-model-resolver.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { OpenAiClient } from '@effect/ai-openai';\nimport { FetchHttpClient } from '@effect/platform';\nimport { Layer } from 'effect';\n\nimport { AiServiceRouter } from '@dxos/ai';\nimport { type Capability, contributes } from '@dxos/app-framework';\n\nimport { AssistantCapabilities } from './capabilities';\n\n/**\n * To start LM Studio server:\n * ```bash\n * ~/.lmstudio/bin/lms server start --cors\n * ```\n */\nexport default (): Capability<any>[] => [\n contributes(\n AssistantCapabilities.AiModelResolver,\n AiServiceRouter.LMStudioResolver.pipe(\n Layer.provide(\n OpenAiClient.layer({\n apiUrl: AiServiceRouter.LMSTUDIO_ENDPOINT,\n }),\n ),\n Layer.provide(FetchHttpClient.layer),\n ),\n ),\n];\n"],
|
|
5
|
-
"mappings": ";;;;;;;AAIA,SAASA,oBAAoB;AAC7B,SAASC,uBAAuB;AAChC,SAASC,aAAa;AAEtB,SAASC,uBAAuB;AAChC,SAA0BC,mBAAmB;AAU7C,IAAA,+BAAe,MAAyB;EACtCC,YACEC,sBAAsBC,iBACtBC,gBAAgBC,iBAAiBC,KAC/BC,MAAMC,QACJC,aAAaC,MAAM;IACjBC,QAAQP,gBAAgBQ;EAC1B,CAAA,CAAA,GAEFL,MAAMC,QAAQK,gBAAgBH,KAAK,CAAA,CAAA;;",
|
|
6
|
-
"names": ["OpenAiClient", "FetchHttpClient", "Layer", "AiServiceRouter", "contributes", "contributes", "AssistantCapabilities", "AiModelResolver", "AiServiceRouter", "LMStudioResolver", "pipe", "Layer", "provide", "OpenAiClient", "layer", "apiUrl", "LMSTUDIO_ENDPOINT", "FetchHttpClient"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
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 } from '@dxos/app-framework';\nimport { Blueprint } from '@dxos/blueprints';\nimport { getSpace } from '@dxos/client/echo';\nimport { Sequence } from '@dxos/conductor';\nimport { InvocationTraceContainer } from '@dxos/devtools';\nimport { Obj } from '@dxos/echo';\nimport { SettingsStore } from '@dxos/local-storage';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport {\n AssistantSettings,\n BlueprintContainer,\n ChatCompanion,\n ChatContainer,\n ChatDialog,\n PromptSettings,\n SequenceContainer,\n} from '../components';\nimport { ASSISTANT_DIALOG, meta } from '../meta';\nimport { Assistant } from '../types';\n\nexport default () =>\n contributes(Capabilities.ReactSurface, [\n createSurface({\n id: `${meta.id}/plugin-settings`,\n role: 'article',\n filter: (data): data is { subject: SettingsStore<Assistant.Settings> } =>\n data.subject instanceof SettingsStore && data.subject.prefix === meta.id,\n component: ({ data: { subject } }) => <AssistantSettings settings={subject.value} />,\n }),\n createSurface({\n id: `${meta.id}/chat`,\n role: 'article',\n filter: (data): data is { subject: Assistant.Chat; variant: undefined } =>\n Obj.instanceOf(Assistant.Chat, data.subject) && data.variant !== 'assistant-chat',\n component: ({ data, role }) => <ChatContainer role={role} chat={data.subject} />,\n }),\n createSurface({\n id: `${meta.id}/companion-chat`,\n role: 'article',\n filter: (data): data is { companionTo: Obj.Any; subject: Assistant.Chat | 'assistant-chat' } =>\n Obj.isObject(data.companionTo) &&\n (Obj.instanceOf(Assistant.Chat, data.subject) || data.subject === 'assistant-chat'),\n component: ({ data, role }) => <ChatCompanion role={role} data={data} />,\n }),\n createSurface({\n id: `${meta.id}/sequence`,\n role: 'article',\n filter: (data): data is { subject: Sequence } => Obj.instanceOf(Sequence, data.subject),\n component: ({ data }) => <SequenceContainer sequence={data.subject} />,\n }),\n createSurface({\n id: `${meta.id}/companion-logs`,\n role: 'article',\n filter: (data): data is { companionTo: Sequence } =>\n Obj.instanceOf(Sequence, data.companionTo) && data.subject === 'logs',\n // eslint-disable-next-line unused-imports/no-unused-vars\n component: ({ data, role }) => {\n const space = getSpace(data.companionTo);\n return (\n <StackItem.Content>\n <InvocationTraceContainer space={space} target={data.companionTo} detailAxis='block' />\n </StackItem.Content>\n );\n },\n }),\n createSurface({\n id: `${meta.id}/blueprint`,\n role: 'article',\n filter: (data): data is { subject: Blueprint.Blueprint } => Obj.instanceOf(Blueprint.Blueprint, data.subject),\n component: ({ data }) => <BlueprintContainer blueprint={data.subject} />,\n }),\n createSurface({\n id: `${meta.id}/prompt-settings`,\n role: 'object-settings',\n filter: (data): data is { subject: Blueprint.Blueprint } => Obj.instanceOf(Blueprint.Blueprint, data.subject),\n component: ({ data }) => <PromptSettings template={data.subject.instructions} />,\n }),\n createSurface({\n id: ASSISTANT_DIALOG,\n role: 'dialog',\n filter: (data): data is { props: { chat: Assistant.Chat } } => data.component === ASSISTANT_DIALOG,\n component: ({ data }) => <ChatDialog {...data.props} />,\n }),\n ]);\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAIA,OAAOA,WAAW;AAElB,SAASC,cAAcC,aAAaC,qBAAqB;AACzD,SAASC,iBAAiB;AAC1B,SAASC,gBAAgB;AACzB,SAASC,gBAAgB;AACzB,SAASC,gCAAgC;AACzC,SAASC,WAAW;AACpB,SAASC,qBAAqB;AAC9B,SAASC,iBAAiB;AAc1B,IAAA,wBAAe,MACbC,YAAYC,aAAaC,cAAc;EACrCC,cAAc;IACZC,IAAI,GAAGC,KAAKD,EAAE;IACdE,MAAM;IACNC,QAAQ,CAACC,SACPA,KAAKC,mBAAmBC,iBAAiBF,KAAKC,QAAQE,WAAWN,KAAKD;IACxEQ,WAAW,CAAC,EAAEJ,MAAM,EAAEC,QAAO,EAAE,MAAO,sBAAA,cAACI,mBAAAA;MAAkBC,UAAUL,QAAQM;;EAC7E,CAAA;EACAZ,cAAc;IACZC,IAAI,GAAGC,KAAKD,EAAE;IACdE,MAAM;IACNC,QAAQ,CAACC,SACPQ,IAAIC,WAAWC,kBAAUC,MAAMX,KAAKC,OAAO,KAAKD,KAAKY,YAAY;IACnER,WAAW,CAAC,EAAEJ,MAAMF,KAAI,MAAO,sBAAA,cAACe,eAAAA;MAAcf;MAAYgB,MAAMd,KAAKC;;EACvE,CAAA;EACAN,cAAc;IACZC,IAAI,GAAGC,KAAKD,EAAE;IACdE,MAAM;IACNC,QAAQ,CAACC,SACPQ,IAAIO,SAASf,KAAKgB,WAAW,MAC5BR,IAAIC,WAAWC,kBAAUC,MAAMX,KAAKC,OAAO,KAAKD,KAAKC,YAAY;IACpEG,WAAW,CAAC,EAAEJ,MAAMF,KAAI,MAAO,sBAAA,cAACmB,eAAAA;MAAcnB;MAAYE;;EAC5D,CAAA;EACAL,cAAc;IACZC,IAAI,GAAGC,KAAKD,EAAE;IACdE,MAAM;IACNC,QAAQ,CAACC,SAAwCQ,IAAIC,WAAWS,UAAUlB,KAAKC,OAAO;IACtFG,WAAW,CAAC,EAAEJ,KAAI,MAAO,sBAAA,cAACmB,mBAAAA;MAAkBC,UAAUpB,KAAKC;;EAC7D,CAAA;EACAN,cAAc;IACZC,IAAI,GAAGC,KAAKD,EAAE;IACdE,MAAM;IACNC,QAAQ,CAACC,SACPQ,IAAIC,WAAWS,UAAUlB,KAAKgB,WAAW,KAAKhB,KAAKC,YAAY;;IAEjEG,WAAW,CAAC,EAAEJ,MAAMF,KAAI,MAAE;AACxB,YAAMuB,QAAQC,SAAStB,KAAKgB,WAAW;AACvC,aACE,sBAAA,cAACO,UAAUC,SAAO,MAChB,sBAAA,cAACC,0BAAAA;QAAyBJ;QAAcK,QAAQ1B,KAAKgB;QAAaW,YAAW;;IAGnF;EACF,CAAA;EACAhC,cAAc;IACZC,IAAI,GAAGC,KAAKD,EAAE;IACdE,MAAM;IACNC,QAAQ,CAACC,SAAmDQ,IAAIC,WAAWmB,UAAUA,WAAW5B,KAAKC,OAAO;IAC5GG,WAAW,CAAC,EAAEJ,KAAI,MAAO,sBAAA,cAAC6B,oBAAAA;MAAmBC,WAAW9B,KAAKC;;EAC/D,CAAA;EACAN,cAAc;IACZC,IAAI,GAAGC,KAAKD,EAAE;IACdE,MAAM;IACNC,QAAQ,CAACC,SAAmDQ,IAAIC,WAAWmB,UAAUA,WAAW5B,KAAKC,OAAO;IAC5GG,WAAW,CAAC,EAAEJ,KAAI,MAAO,sBAAA,cAAC+B,gBAAAA;MAAeC,UAAUhC,KAAKC,QAAQgC;;EAClE,CAAA;EACAtC,cAAc;IACZC,IAAIsC;IACJpC,MAAM;IACNC,QAAQ,CAACC,SAAsDA,KAAKI,cAAc8B;IAClF9B,WAAW,CAAC,EAAEJ,KAAI,MAAO,sBAAA,cAACmC,YAAenC,KAAKoC,KAAK;EACrD,CAAA;CACD;",
|
|
6
|
-
"names": ["React", "Capabilities", "contributes", "createSurface", "Blueprint", "getSpace", "Sequence", "InvocationTraceContainer", "Obj", "SettingsStore", "StackItem", "contributes", "Capabilities", "ReactSurface", "createSurface", "id", "meta", "role", "filter", "data", "subject", "SettingsStore", "prefix", "component", "AssistantSettings", "settings", "value", "Obj", "instanceOf", "Assistant", "Chat", "variant", "ChatContainer", "chat", "isObject", "companionTo", "ChatCompanion", "Sequence", "SequenceContainer", "sequence", "space", "getSpace", "StackItem", "Content", "InvocationTraceContainer", "target", "detailAxis", "Blueprint", "BlueprintContainer", "blueprint", "PromptSettings", "template", "instructions", "ASSISTANT_DIALOG", "ChatDialog", "props"]
|
|
7
|
-
}
|