@dxos/plugin-automation 0.7.5-labs.e27f9b9 → 0.7.5-labs.ea4b4c2
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/AutomationPanel-VW2XIUPU.mjs +8 -0
- package/dist/lib/browser/ChatContainer-5TAVTN3T.mjs +12 -0
- package/dist/lib/browser/{ai-client-AARXEMMJ.mjs → ai-client-5CNY6JBF.mjs} +3 -3
- package/dist/lib/browser/{app-graph-builder-B4U34VSR.mjs → app-graph-builder-FZGK55G7.mjs} +39 -4
- package/dist/lib/browser/app-graph-builder-FZGK55G7.mjs.map +7 -0
- package/dist/lib/browser/{chunk-HZ4TA7HY.mjs → chunk-2H2EUYXL.mjs} +2 -2
- package/dist/lib/browser/{chunk-5SLV6AUA.mjs → chunk-DVE33EZL.mjs} +525 -290
- package/dist/lib/browser/chunk-DVE33EZL.mjs.map +7 -0
- package/dist/lib/browser/{chunk-IYSMXX6Q.mjs → chunk-MJK7GL5P.mjs} +68 -44
- package/dist/lib/browser/chunk-MJK7GL5P.mjs.map +7 -0
- package/dist/lib/browser/{chunk-RAVNWHNE.mjs → chunk-NQFZ6XRX.mjs} +6 -5
- package/dist/lib/browser/chunk-NQFZ6XRX.mjs.map +7 -0
- package/dist/lib/browser/{chunk-7XADMUOW.mjs → chunk-Q4IMHYGH.mjs} +21 -76
- package/dist/lib/browser/chunk-Q4IMHYGH.mjs.map +7 -0
- package/dist/lib/browser/{chunk-HKX3D3ZP.mjs → chunk-R4JH4TLE.mjs} +4 -2
- package/dist/lib/browser/chunk-R4JH4TLE.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +21 -15
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-754MPV7H.mjs → intent-resolver-BWAXKT27.mjs} +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-4QZ6AKBF.mjs → react-surface-ILBDBZCN.mjs} +17 -9
- package/dist/lib/browser/react-surface-ILBDBZCN.mjs.map +7 -0
- package/dist/lib/browser/types/index.mjs +6 -6
- package/dist/lib/node/{AutomationPanel-LRDEDGXI.cjs → AutomationPanel-G6EDDYWW.cjs} +7 -7
- package/dist/lib/node/{AutomationPanel-LRDEDGXI.cjs.map → AutomationPanel-G6EDDYWW.cjs.map} +2 -2
- package/dist/lib/node/{ChatContainer-6LZX4K2Z.cjs → ChatContainer-EN24W3K4.cjs} +10 -10
- package/dist/lib/node/ChatContainer-EN24W3K4.cjs.map +7 -0
- package/dist/lib/node/{ai-client-SA35GN5Q.cjs → ai-client-FKLPDELV.cjs} +7 -7
- package/dist/lib/node/{app-graph-builder-ENVDOPS4.cjs → app-graph-builder-T76NYV42.cjs} +48 -14
- package/dist/lib/node/app-graph-builder-T76NYV42.cjs.map +7 -0
- package/dist/lib/node/{chunk-6VMSH4P6.cjs → chunk-CJGJXNY3.cjs} +549 -327
- package/dist/lib/node/chunk-CJGJXNY3.cjs.map +7 -0
- package/dist/lib/node/{chunk-5VF5JKUN.cjs → chunk-EQYHOTGG.cjs} +8 -5
- package/dist/lib/node/chunk-EQYHOTGG.cjs.map +7 -0
- package/dist/lib/node/chunk-GB7245FH.cjs +173 -0
- package/dist/lib/node/chunk-GB7245FH.cjs.map +7 -0
- package/dist/lib/node/{chunk-HEYQONXC.cjs → chunk-HMBKP6VG.cjs} +82 -60
- package/dist/lib/node/chunk-HMBKP6VG.cjs.map +7 -0
- package/dist/lib/node/{chunk-WWU5FVAO.cjs → chunk-QXIHYOMF.cjs} +10 -9
- package/dist/lib/node/chunk-QXIHYOMF.cjs.map +7 -0
- package/dist/lib/node/{chunk-ZS5RZ7RM.cjs → chunk-U5Z7LFWB.cjs} +6 -6
- package/dist/lib/node/index.cjs +81 -75
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/{intent-resolver-CNVBSG4E.cjs → intent-resolver-C6OKFVEW.cjs} +8 -8
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/{react-surface-5HYLBDC3.cjs → react-surface-LWDY7SQG.cjs} +24 -18
- package/dist/lib/node/react-surface-LWDY7SQG.cjs.map +7 -0
- package/dist/lib/node/types/index.cjs +13 -13
- package/dist/lib/node/types/index.cjs.map +1 -1
- package/dist/lib/node-esm/{AutomationPanel-ZV7VEEPP.mjs → AutomationPanel-V3IWQAMO.mjs} +3 -3
- package/dist/lib/node-esm/{ChatContainer-PPVMC2FC.mjs → ChatContainer-CNTY3C2D.mjs} +5 -5
- package/dist/lib/node-esm/{ai-client-2ZA4TYFZ.mjs → ai-client-XGNA6SJ5.mjs} +3 -3
- package/dist/lib/node-esm/{app-graph-builder-IYOUCQZT.mjs → app-graph-builder-IJQEN7WT.mjs} +39 -4
- package/dist/lib/node-esm/app-graph-builder-IJQEN7WT.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-MS7OIGVR.mjs → chunk-6HLBYDUI.mjs} +6 -5
- package/dist/lib/node-esm/chunk-6HLBYDUI.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-EVTLHDM2.mjs → chunk-DNCXRGAF.mjs} +21 -76
- package/dist/lib/node-esm/chunk-DNCXRGAF.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-X3LPRWIL.mjs → chunk-EMVA6QUT.mjs} +4 -2
- package/dist/lib/node-esm/chunk-EMVA6QUT.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-ISYLEDVU.mjs → chunk-IJRTDSKN.mjs} +2 -2
- package/dist/lib/node-esm/{chunk-WISKXX7U.mjs → chunk-QP47VJT6.mjs} +525 -290
- package/dist/lib/node-esm/chunk-QP47VJT6.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-3KB5HRXA.mjs → chunk-ZLIAMW45.mjs} +68 -44
- package/dist/lib/node-esm/chunk-ZLIAMW45.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +21 -15
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-RQBXW442.mjs → intent-resolver-DCP4ZDBA.mjs} +3 -3
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-surface-SS5WCRJ2.mjs → react-surface-SBDXFVIN.mjs} +17 -9
- package/dist/lib/node-esm/react-surface-SBDXFVIN.mjs.map +7 -0
- package/dist/lib/node-esm/types/index.mjs +6 -6
- package/dist/types/src/capabilities/app-graph-builder.d.ts +23 -22
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/components/AmbientChatDialog/AmbientChatDialog.d.ts +3 -0
- package/dist/types/src/components/AmbientChatDialog/AmbientChatDialog.d.ts.map +1 -0
- package/dist/types/src/components/AmbientChatDialog/index.d.ts +2 -0
- package/dist/types/src/components/AmbientChatDialog/index.d.ts.map +1 -0
- package/dist/types/src/components/Box/StatusLine.d.ts.map +1 -0
- package/dist/types/src/components/Box/StatusLine.stories.d.ts.map +1 -0
- package/dist/types/src/components/Box/Tabbed.d.ts +15 -0
- package/dist/types/src/components/Box/Tabbed.d.ts.map +1 -0
- package/dist/types/src/components/Box/Tabbed.stories.d.ts.map +1 -0
- package/dist/types/src/components/{Thread → Box}/ToggleContainer.d.ts +3 -3
- package/dist/types/src/components/Box/ToggleContainer.d.ts.map +1 -0
- package/dist/types/src/components/Box/ToggleContainer.stories.d.ts.map +1 -0
- package/dist/types/src/components/Box/index.d.ts +4 -0
- package/dist/types/src/components/Box/index.d.ts.map +1 -0
- package/dist/types/src/components/ChatContainer/ChatContainer.d.ts +0 -1
- package/dist/types/src/components/ChatContainer/ChatContainer.d.ts.map +1 -1
- package/dist/types/src/components/Prompt/Prompt.d.ts +7 -0
- package/dist/types/src/components/Prompt/Prompt.d.ts.map +1 -0
- package/dist/types/src/components/Prompt/Prompt.stories.d.ts +8 -0
- package/dist/types/src/components/Prompt/Prompt.stories.d.ts.map +1 -0
- package/dist/types/src/components/Prompt/index.d.ts +2 -0
- package/dist/types/src/components/Prompt/index.d.ts.map +1 -0
- package/dist/types/src/components/Prompt/prompt-autocomplete.d.ts +20 -0
- package/dist/types/src/components/Prompt/prompt-autocomplete.d.ts.map +1 -0
- package/dist/types/src/components/ServiceRegistry/ServiceRegistry.stories.d.ts.map +1 -1
- package/dist/types/src/components/Thread/Thread.stories.d.ts +1 -0
- package/dist/types/src/components/Thread/Thread.stories.d.ts.map +1 -1
- package/dist/types/src/components/Thread/ThreadMessage.d.ts.map +1 -1
- package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +1 -0
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/hooks/index.d.ts +3 -1
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/processor.d.ts +7 -2
- package/dist/types/src/hooks/processor.d.ts.map +1 -1
- package/dist/types/src/hooks/useChatProcessor.d.ts +7 -0
- package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -0
- package/dist/types/src/hooks/useMessageQueue.d.ts +41 -0
- package/dist/types/src/hooks/useMessageQueue.d.ts.map +1 -0
- package/dist/types/src/hooks/useServices.d.ts +7 -0
- package/dist/types/src/hooks/useServices.d.ts.map +1 -0
- package/dist/types/src/meta.d.ts +1 -0
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/testing/index.d.ts +2 -1
- package/dist/types/src/testing/index.d.ts.map +1 -1
- package/dist/types/src/testing/{testing.d.ts → test-functions.d.ts} +1 -1
- package/dist/types/src/testing/test-functions.d.ts.map +1 -0
- package/dist/types/src/testing/test-services.d.ts +5 -0
- package/dist/types/src/testing/test-services.d.ts.map +1 -0
- package/dist/types/src/translations.d.ts +3 -0
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/registry.d.ts +7 -6
- package/dist/types/src/types/registry.d.ts.map +1 -1
- package/dist/types/src/types/schema.d.ts +94 -69
- package/dist/types/src/types/schema.d.ts.map +1 -1
- package/package.json +52 -50
- package/src/AutomationPlugin.tsx +7 -7
- package/src/capabilities/app-graph-builder.ts +34 -3
- package/src/capabilities/react-surface.tsx +12 -4
- package/src/components/AmbientChatDialog/AmbientChatDialog.tsx +26 -0
- package/src/components/AmbientChatDialog/index.ts +5 -0
- package/src/components/{Thread → Box}/StatusLine.tsx +1 -1
- package/src/components/{Thread → Box}/Tabbed.stories.tsx +2 -3
- package/src/components/Box/Tabbed.tsx +89 -0
- package/src/components/{Thread → Box}/ToggleContainer.stories.tsx +1 -2
- package/src/components/{Thread → Box}/ToggleContainer.tsx +28 -23
- package/src/components/Box/index.ts +7 -0
- package/src/components/ChatContainer/ChatContainer.tsx +15 -80
- package/src/components/Prompt/Prompt.stories.tsx +50 -0
- package/src/components/Prompt/Prompt.tsx +36 -0
- package/src/components/Prompt/index.ts +5 -0
- package/src/components/Prompt/prompt-autocomplete.ts +200 -0
- package/src/components/PromptEditor/PromptEditor.stories.tsx +3 -3
- package/src/components/ServiceRegistry/ServiceRegistry.stories.tsx +2 -1
- package/src/components/ServiceRegistry/ServiceRegistry.tsx +7 -7
- package/src/components/Thread/Thread.stories.tsx +8 -1
- package/src/components/Thread/Thread.tsx +2 -2
- package/src/components/Thread/ThreadMessage.tsx +58 -28
- package/src/components/TriggerEditor/TriggerEditor.tsx +8 -5
- package/src/components/index.ts +1 -0
- package/src/hooks/index.ts +3 -1
- package/src/hooks/processor.ts +16 -7
- package/src/hooks/useChatProcessor.tsx +86 -0
- package/src/hooks/useMessageQueue.ts +23 -0
- package/src/hooks/{useServiceRegistry.ts → useServices.ts} +8 -2
- package/src/meta.ts +4 -1
- package/src/testing/index.ts +2 -1
- package/src/testing/test-services.ts +131 -0
- package/src/translations.ts +1 -0
- package/src/types/registry.ts +17 -80
- package/src/types/schema.ts +20 -8
- package/dist/lib/browser/AutomationPanel-WFJZAW4F.mjs +0 -8
- package/dist/lib/browser/ChatContainer-OFCOZ5T2.mjs +0 -12
- package/dist/lib/browser/app-graph-builder-B4U34VSR.mjs.map +0 -7
- package/dist/lib/browser/chunk-5SLV6AUA.mjs.map +0 -7
- package/dist/lib/browser/chunk-7XADMUOW.mjs.map +0 -7
- package/dist/lib/browser/chunk-HKX3D3ZP.mjs.map +0 -7
- package/dist/lib/browser/chunk-IYSMXX6Q.mjs.map +0 -7
- package/dist/lib/browser/chunk-RAVNWHNE.mjs.map +0 -7
- package/dist/lib/browser/react-surface-4QZ6AKBF.mjs.map +0 -7
- package/dist/lib/node/ChatContainer-6LZX4K2Z.cjs.map +0 -7
- package/dist/lib/node/app-graph-builder-ENVDOPS4.cjs.map +0 -7
- package/dist/lib/node/chunk-5VF5JKUN.cjs.map +0 -7
- package/dist/lib/node/chunk-6VMSH4P6.cjs.map +0 -7
- package/dist/lib/node/chunk-HEYQONXC.cjs.map +0 -7
- package/dist/lib/node/chunk-LU4HQWJD.cjs +0 -226
- package/dist/lib/node/chunk-LU4HQWJD.cjs.map +0 -7
- package/dist/lib/node/chunk-WWU5FVAO.cjs.map +0 -7
- package/dist/lib/node/react-surface-5HYLBDC3.cjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-IYOUCQZT.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-3KB5HRXA.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-EVTLHDM2.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-MS7OIGVR.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-WISKXX7U.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-X3LPRWIL.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-SS5WCRJ2.mjs.map +0 -7
- package/dist/types/src/components/Thread/ScrollContainer.d.ts +0 -15
- package/dist/types/src/components/Thread/ScrollContainer.d.ts.map +0 -1
- package/dist/types/src/components/Thread/StatusLine.d.ts.map +0 -1
- package/dist/types/src/components/Thread/StatusLine.stories.d.ts.map +0 -1
- package/dist/types/src/components/Thread/Tabbed.d.ts +0 -9
- package/dist/types/src/components/Thread/Tabbed.d.ts.map +0 -1
- package/dist/types/src/components/Thread/Tabbed.stories.d.ts.map +0 -1
- package/dist/types/src/components/Thread/ToggleContainer.d.ts.map +0 -1
- package/dist/types/src/components/Thread/ToggleContainer.stories.d.ts.map +0 -1
- package/dist/types/src/hooks/useServiceRegistry.d.ts +0 -3
- package/dist/types/src/hooks/useServiceRegistry.d.ts.map +0 -1
- package/dist/types/src/testing/testing.d.ts.map +0 -1
- package/src/components/Thread/ScrollContainer.tsx +0 -92
- package/src/components/Thread/Tabbed.tsx +0 -72
- /package/dist/lib/browser/{AutomationPanel-WFJZAW4F.mjs.map → AutomationPanel-VW2XIUPU.mjs.map} +0 -0
- /package/dist/lib/browser/{ChatContainer-OFCOZ5T2.mjs.map → ChatContainer-5TAVTN3T.mjs.map} +0 -0
- /package/dist/lib/browser/{ai-client-AARXEMMJ.mjs.map → ai-client-5CNY6JBF.mjs.map} +0 -0
- /package/dist/lib/browser/{chunk-HZ4TA7HY.mjs.map → chunk-2H2EUYXL.mjs.map} +0 -0
- /package/dist/lib/browser/{intent-resolver-754MPV7H.mjs.map → intent-resolver-BWAXKT27.mjs.map} +0 -0
- /package/dist/lib/node/{ai-client-SA35GN5Q.cjs.map → ai-client-FKLPDELV.cjs.map} +0 -0
- /package/dist/lib/node/{chunk-ZS5RZ7RM.cjs.map → chunk-U5Z7LFWB.cjs.map} +0 -0
- /package/dist/lib/node/{intent-resolver-CNVBSG4E.cjs.map → intent-resolver-C6OKFVEW.cjs.map} +0 -0
- /package/dist/lib/node-esm/{AutomationPanel-ZV7VEEPP.mjs.map → AutomationPanel-V3IWQAMO.mjs.map} +0 -0
- /package/dist/lib/node-esm/{ChatContainer-PPVMC2FC.mjs.map → ChatContainer-CNTY3C2D.mjs.map} +0 -0
- /package/dist/lib/node-esm/{ai-client-2ZA4TYFZ.mjs.map → ai-client-XGNA6SJ5.mjs.map} +0 -0
- /package/dist/lib/node-esm/{chunk-ISYLEDVU.mjs.map → chunk-IJRTDSKN.mjs.map} +0 -0
- /package/dist/lib/node-esm/{intent-resolver-RQBXW442.mjs.map → intent-resolver-DCP4ZDBA.mjs.map} +0 -0
- /package/dist/types/src/components/{Thread → Box}/StatusLine.d.ts +0 -0
- /package/dist/types/src/components/{Thread → Box}/StatusLine.stories.d.ts +0 -0
- /package/dist/types/src/components/{Thread → Box}/Tabbed.stories.d.ts +0 -0
- /package/dist/types/src/components/{Thread → Box}/ToggleContainer.stories.d.ts +0 -0
- /package/src/components/{Thread → Box}/StatusLine.stories.tsx +0 -0
- /package/src/testing/{testing.ts → test-functions.ts} +0 -0
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/components/ChatContainer/ChatContainer.tsx", "../../../src/capabilities/index.ts", "../../../src/hooks/processor.ts", "../../../src/hooks/useServiceRegistry.ts", "../../../src/hooks/useLocalTriggerManager.ts", "../../../src/hooks/invocation-handler.ts", "../../../src/tools/function.ts", "../../../src/tools/openapi.ts", "../../../src/components/Thread/Thread.tsx", "../../../src/components/Thread/ScrollContainer.tsx", "../../../src/components/Thread/ThreadMessage.tsx", "../../../src/components/Thread/StatusLine.tsx", "../../../src/components/Thread/ToggleContainer.tsx", "../../../src/components/MarkdownViewer/MarkdownViewer.tsx", "../../../src/components/ChatContainer/index.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { Capabilities, useCapabilities, useCapability, useIntentDispatcher } from '@dxos/app-framework';\nimport { createSystemPrompt, type Message, type Tool } from '@dxos/artifact';\nimport { FunctionType } from '@dxos/functions';\nimport { invariant } from '@dxos/invariant';\nimport { DXN, QueueSubspaceTags } from '@dxos/keys';\nimport { useConfig } from '@dxos/react-client';\nimport { Filter, getSpace, useQuery } from '@dxos/react-client/echo';\nimport { useEdgeClient, useQueue } from '@dxos/react-edge-client';\nimport { StackItem } from '@dxos/react-ui-stack';\nimport { isNotNullOrUndefined } from '@dxos/util';\n\nimport { AutomationCapabilities } from '../../capabilities';\nimport { ChatProcessor } from '../../hooks';\nimport { covertFunctionToTool, createToolsFromService } from '../../tools';\nimport { MockServiceRegistry, type AIChatType } from '../../types';\nimport { Thread } from '../Thread';\n\nexport const ChatContainer = ({ chat, role }: { chat: AIChatType; role: string }) => {\n const config = useConfig();\n const space = getSpace(chat);\n const aiClient = useCapability(AutomationCapabilities.AiClient);\n\n const artifactDefinitions = useCapabilities(Capabilities.ArtifactDefinition);\n const globalTools = useCapabilities(Capabilities.Tools);\n const functions = useQuery(space, Filter.schema(FunctionType));\n const serviceRegistry = useMemo(() => new MockServiceRegistry(), []);\n\n const [serviceTools, setServiceTools] = useState<Tool[]>([]);\n useEffect(() => {\n queueMicrotask(async () => {\n const services = await serviceRegistry.queryServices({});\n const tools = await Promise.all(services.map((service) => createToolsFromService(service)));\n setServiceTools(tools.flat());\n });\n }, []);\n\n const tools = useMemo(\n () => [\n ...globalTools.flat(),\n ...artifactDefinitions.flatMap((definition) => definition.tools),\n ...functions\n .map((fn) => covertFunctionToTool(fn, config.values.runtime?.services?.edge?.url ?? '', space?.id))\n .filter(isNotNullOrUndefined),\n ...serviceTools,\n ],\n [globalTools, artifactDefinitions, functions, serviceTools, space?.id],\n );\n const systemPrompt = useMemo(\n () => createSystemPrompt({ artifacts: artifactDefinitions.map((definition) => definition.instructions) }),\n [artifactDefinitions],\n );\n\n // TODO(burdon): Create hook.\n // TODO(wittjosiah): Should these be created in the component?\n // TODO(zan): Combine with ai service client?\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const processor = useMemo(\n () =>\n new ChatProcessor(\n aiClient,\n tools,\n {\n space,\n dispatch,\n },\n {\n model: '@anthropic/claude-3-5-sonnet-20241022',\n systemPrompt,\n },\n ),\n [aiClient, tools, space, dispatch, systemPrompt],\n );\n\n // TODO(wittjosiah): Remove transformation.\n const queueDxn = useMemo(\n () => new DXN(DXN.kind.QUEUE, [QueueSubspaceTags.DATA, space!.id, chat.queue.dxn.parts.at(-1)!]),\n [chat.queue.dxn],\n );\n const edgeClient = useEdgeClient();\n const messageQueue = useQueue<Message>(edgeClient, queueDxn);\n const messages = [...(messageQueue?.items ?? []), ...processor.messages.value];\n\n const handleSubmit = useCallback(\n async (message: string) => {\n if (processor.streaming.value) {\n await processor.cancel();\n }\n\n invariant(messageQueue);\n await processor.request(message, {\n history: messageQueue.items,\n onComplete: (messages) => messageQueue.append(messages),\n });\n },\n [processor, messageQueue],\n );\n\n const handleStop = useCallback(() => {\n if (processor.streaming.value) {\n void processor.cancel();\n }\n }, [processor]);\n\n return (\n <StackItem.Content toolbar={false} role={role}>\n <Thread messages={messages} streaming={processor.streaming.value} onSubmit={handleSubmit} onStop={handleStop} />\n </StackItem.Content>\n );\n};\n\nexport default ChatContainer;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\nexport const AiClient = lazy(() => import('./ai-client'));\nexport const AppGraphBuilder = lazy(() => import('./app-graph-builder'));\nexport const IntentResolver = lazy(() => import('./intent-resolver'));\nexport const ReactSurface = lazy(() => import('./react-surface'));\n\nexport * from './capabilities';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Signal, batch, computed, signal } from '@preact/signals-core';\n\nimport { type PromiseIntentDispatcher } from '@dxos/app-framework';\nimport { type Tool, Message, type MessageContentBlock } from '@dxos/artifact';\nimport {\n isToolUse,\n runTools,\n type AIServiceClientImpl,\n type GenerateRequest,\n type GenerationStream,\n MixedStreamParser,\n} from '@dxos/assistant';\nimport { createStatic } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { type Space } from '@dxos/react-client/echo';\n\nconst defaultOptions: Pick<GenerateRequest, 'model' | 'systemPrompt'> = {\n model: '@anthropic/claude-3-5-sonnet-20241022',\n systemPrompt: '',\n};\n\n// TODO(burdon): Factor out.\ndeclare global {\n interface ToolContextExtensions {\n space?: Space;\n dispatch?: PromiseIntentDispatcher;\n }\n}\n\ntype RequestOptions = {\n history?: Message[];\n onComplete?: (messages: Message[]) => void;\n};\n\n/**\n * Handles interactions with the AI service.\n * Maintains a queue of messages and handles streaming responses from the AI service.\n * Executes tools based on AI responses.\n * Supports cancellation of in-progress requests.\n */\nexport class ChatProcessor {\n /** SSE stream parser. */\n private readonly _parser = new MixedStreamParser();\n\n /** Current streaming response (iterator). */\n private _stream: GenerationStream | undefined;\n\n /** Pending messages (incl. the user request). */\n private readonly _pending: Signal<Message[]> = signal([]);\n\n /** Current streaming block (from the AI service). */\n private readonly _block: Signal<MessageContentBlock | undefined> = signal(undefined);\n\n /** Prior history from queue. */\n private _history: Message[] = [];\n\n /**\n * Streaming state.\n * @reactive\n */\n public readonly streaming: Signal<boolean> = computed(() => this._block.value !== undefined);\n\n /**\n * Array of Messages (incl. the current message being streamed).\n * @reactive\n */\n public readonly messages: Signal<Message[]> = computed(() => {\n const messages = [...this._pending.value];\n if (this._block.value) {\n const current = messages.pop();\n invariant(current);\n const { content, ...rest } = current;\n const message = { ...rest, content: [...content, this._block.value] };\n messages.push(message);\n }\n\n return messages;\n });\n\n constructor(\n private readonly _client: AIServiceClientImpl,\n private readonly _tools?: Tool[],\n private readonly _extensions?: ToolContextExtensions,\n private readonly _options: Pick<GenerateRequest, 'model' | 'systemPrompt'> = defaultOptions,\n ) {\n // Message complete.\n this._parser.message.on((message) => {\n batch(() => {\n this._pending.value = [...this._pending.value, message];\n this._block.value = undefined;\n });\n });\n\n // Streaming update (happens before message complete).\n this._parser.update.on((block) => {\n batch(() => {\n this._block.value = block;\n });\n });\n }\n\n /**\n * Make GPT request.\n */\n async request(message: string, options: RequestOptions = {}): Promise<Message[]> {\n batch(() => {\n this._history = options.history ?? [];\n this._pending.value = [\n createStatic(Message, {\n role: 'user',\n content: [{ type: 'text', text: message }],\n }),\n ];\n this._block.value = undefined;\n });\n\n await this._generate();\n options.onComplete?.(this._pending.value);\n return this._reset();\n }\n\n /**\n * Cancel pending requests.\n * @returns Pending requests (incl. the request message).\n */\n async cancel(): Promise<Message[]> {\n log.info('cancelling...');\n this._stream?.abort();\n return this._reset();\n }\n\n private async _reset(): Promise<Message[]> {\n const messages = this._pending.value;\n batch(() => {\n this._history = [];\n this._pending.value = [];\n this._block.value = undefined;\n });\n\n return messages;\n }\n\n /**\n * Generate a response from the AI service.\n * Iterates over tool requests.\n */\n private async _generate() {\n try {\n let more = false;\n do {\n log.info('requesting...', { history: this._history.length, messages: this._pending.value.length });\n this._stream = await this._client.generate({\n ...this._options,\n // TODO(burdon): Rename messages or separate history/message.\n history: [...this._history, ...this._pending.value],\n tools: this._tools,\n });\n\n // Wait until complete.\n await this._parser.parse(this._stream);\n await this._stream.complete();\n\n // Add messages.\n log.info('response', { messages: this._pending.value });\n\n // Resolve tool use locally.\n more = false;\n const message = this._pending.value.at(-1);\n invariant(message);\n if (isToolUse(message)) {\n log.info('tool request...');\n const response = await runTools({\n message: this._pending.value.at(-1)!,\n tools: this._tools ?? [],\n extensions: this._extensions,\n });\n\n log.info('tool response', { response });\n switch (response.type) {\n case 'continue': {\n this._pending.value = [...this._pending.value, response.message];\n more = true;\n break;\n }\n }\n }\n } while (more);\n } catch (err) {\n // TODO(burdon): Handle error.\n log.catch('request failed', { err });\n } finally {\n log.info('done');\n this._stream = undefined;\n }\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect, useMemo, useState } from 'react';\n\nimport { type ServiceType, MockServiceRegistry, type ServiceQuery } from '../types';\n\nexport const useServiceRegistry = (query: ServiceQuery): ServiceType[] => {\n const registry = useMemo(() => new MockServiceRegistry(), []);\n const [services, setServices] = useState<ServiceType[]>([]);\n useEffect(() => {\n const t = setTimeout(async () => {\n const services = await registry.queryServices(query);\n setServices(services);\n });\n\n return () => clearTimeout(t);\n }, [query, registry]);\n\n return services;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { Mutex } from '@dxos/async';\nimport { Context } from '@dxos/context';\nimport { createSubscriptionTrigger, type TriggerFactory } from '@dxos/functions';\nimport { FunctionTrigger } from '@dxos/functions';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { useClient } from '@dxos/react-client';\nimport { Filter, type Space, useQuery } from '@dxos/react-client/echo';\n\nimport { invokeFunction } from './invocation-handler';\n\nconst registerTriggersMutex = new Mutex();\n\nexport const useLocalTriggerManager = (space: Space) => {\n const client = useClient();\n\n // TODO(burdon): Factor out, creating context for plugin (runs outside of component).\n const [registry] = useState(new Map<string, Context>());\n const triggers = useQuery(space, Filter.schema(FunctionTrigger));\n useEffect(() => {\n setTimeout(async () => {\n // Mark-and-sweep removing disabled triggers.\n await registerTriggersMutex.executeSynchronized(async () => {\n const deprecated = new Set(Array.from(registry.keys()));\n log('triggers', {\n deprecated,\n all: triggers.map((t) => t.id),\n enabled: triggers.filter((t) => t.enabled).map((t) => t.id),\n });\n\n for (const trigger of triggers) {\n if (trigger.enabled) {\n if (registry.has(trigger.id)) {\n deprecated.delete(trigger.id);\n continue;\n }\n log.info('activating trigger', trigger.id);\n\n const ctx = new Context();\n registry.set(trigger.id, ctx);\n const triggerSpec = trigger.spec;\n invariant(triggerSpec);\n\n let triggerFactory: TriggerFactory<any>;\n if (triggerSpec.type === 'subscription') {\n triggerFactory = createSubscriptionTrigger;\n } else {\n log.info('unsupported trigger', { type: triggerSpec.type });\n continue;\n }\n\n await triggerFactory(ctx, space, trigger.spec, (data: any) => {\n return invokeFunction(client, space, trigger, data);\n });\n }\n }\n\n for (const id of deprecated) {\n const ctx = registry.get(id);\n if (ctx) {\n await ctx.dispose();\n registry.delete(id);\n }\n }\n });\n });\n }, [JSON.stringify(triggers)]);\n\n useEffect(() => {\n return () => {\n for (const ctx of registry.values()) {\n void ctx.dispose();\n }\n };\n }, []);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { sleep } from '@dxos/async';\nimport { getObjectCore, ResultFormat } from '@dxos/echo-db';\nimport { type AnyObjectData } from '@dxos/echo-schema';\nimport { FunctionType } from '@dxos/functions';\nimport { type FunctionTrigger } from '@dxos/functions';\nimport { invariant } from '@dxos/invariant';\nimport { DXN, LOCAL_SPACE_TAG } from '@dxos/keys';\nimport { log } from '@dxos/log';\nimport { type Client, type Config } from '@dxos/react-client';\nimport { type Space } from '@dxos/react-client/echo';\n\nconst MAX_RETRIES = 3;\nconst RETRY_DELAY = 1_000;\n\nconst callFunction = async (funcUrl: string, trigger: any, data: any) => {\n const body = { event: 'trigger', trigger, data };\n\n let retryCount = 0;\n while (retryCount < MAX_RETRIES) {\n log.info('exec', { funcUrl, body, retryCount });\n const response = await fetch(funcUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(body),\n });\n\n const data = await response.text();\n log.info('response', { status: response.status, body: data });\n if (response.status === 409) {\n retryCount++;\n await sleep(RETRY_DELAY * Math.min(retryCount, 2));\n continue;\n }\n\n return { status: response.status, data };\n }\n return { status: 500 };\n};\n\nexport const invokeFunction = async (client: Client, space: Space, trigger: FunctionTrigger, data: any) => {\n try {\n invariant(trigger.spec);\n invariant(trigger.function);\n\n const script = await space.db.query({ id: trigger.function }, { format: ResultFormat.Plain }).first();\n const { objects: functions } = await space.db\n .query({ __typename: FunctionType.typename }, { format: ResultFormat.Plain })\n .run();\n const func = functions.find((fn) => referenceEquals(fn.source, trigger.function!)) as AnyObjectData | undefined;\n const funcSlug = func?.__meta.keys.find((key) => key.source === USERFUNCTIONS_META_KEY)?.id;\n if (!funcSlug) {\n log.warn('function not deployed', { scriptId: script.id, name: script.name });\n return 404;\n }\n\n const funcUrl = getFunctionUrl(client.config, funcSlug, space.id);\n const triggerData: AnyObjectData = {\n ...getObjectCore(trigger).toPlainObject(),\n // TODO: Remove when functions can query by DXN.\n promptId: trigger.meta?.prompt?.id,\n };\n // TODO: Remove when functions can add objects and easily modify collections (push, splice).\n return (await callFunction(funcUrl, triggerData, data)).status;\n } catch (err) {\n return 400;\n }\n};\n\nconst USERFUNCTIONS_META_KEY = 'dxos.org/service/function';\n\nconst getFunctionUrl = (config: Config, slug: string, spaceId?: string) => {\n const baseUrl = new URL('functions/', config.values.runtime?.services?.edge?.url);\n\n // Leading slashes cause the URL to be treated as an absolute path.\n const relativeUrl = slug.replace(/^\\//, '');\n const url = new URL(`./${relativeUrl}`, baseUrl.toString());\n spaceId && url.searchParams.set('spaceId', spaceId);\n url.protocol = 'https';\n return url.toString();\n};\n\n// TODO(dmaretskyi): Factor out.\n\ntype ReferenceLike = { '/': string } | string;\n\nconst referenceEquals = (a: ReferenceLike, b: ReferenceLike): boolean => {\n const aDXN = toDXN(a);\n const bDXN = toDXN(b);\n return aDXN.toString() === bDXN.toString();\n};\n\nconst toDXN = (ref: ReferenceLike): DXN => {\n if (typeof ref === 'string') {\n if (ref.startsWith('dxn:')) {\n return DXN.parse(ref);\n } else {\n return new DXN(DXN.kind.ECHO, [LOCAL_SPACE_TAG, ref]);\n }\n }\n\n invariant(typeof ref['/'] === 'string');\n return DXN.parse(ref['/']);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { defineTool, ToolResult } from '@dxos/artifact';\nimport type { Tool } from '@dxos/artifact';\nimport { toEffectSchema } from '@dxos/echo-schema';\nimport { getInvocationUrl, getUserFunctionUrlInMetadata } from '@dxos/functions';\nimport type { FunctionType } from '@dxos/functions';\nimport { log } from '@dxos/log';\nimport type { SpaceId } from '@dxos/react-client/echo';\nimport { getMeta } from '@dxos/react-client/echo';\n\nexport const covertFunctionToTool = (\n fn: FunctionType,\n edgeUrl: string,\n spaceId?: SpaceId | undefined,\n): Tool | undefined => {\n if (!fn.description || !fn.inputSchema) {\n return undefined;\n }\n\n const existingFunctionUrl = getUserFunctionUrlInMetadata(getMeta(fn));\n if (!existingFunctionUrl) {\n return undefined;\n }\n const url = getInvocationUrl(existingFunctionUrl, edgeUrl, {\n spaceId,\n });\n\n return defineTool({\n name: fn.name,\n description: fn.description,\n schema: toEffectSchema(fn.inputSchema),\n execute: async (input) => {\n log.info('execute function tool', { name: fn.name, url, input });\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(input),\n });\n return ToolResult.Success(await response.text());\n },\n });\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport jsonpointer from 'jsonpointer';\nimport { type OpenAPIV2, type OpenAPIV3_1 } from 'openapi-types';\n\nimport { ToolResult, type Tool } from '@dxos/artifact';\nimport { JsonSchemaType, normalizeSchema, S, toEffectSchema } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { deepMapValues } from '@dxos/util';\n\nimport type { ApiAuthorization, ServiceType } from '../types';\n\nexport type CreateToolsFromApiOptions = {\n authorization?: ApiAuthorization;\n instructions?: string;\n};\n\nexport const createToolsFromService = async (service: ServiceType): Promise<Tool[]> => {\n invariant(service.interfaces?.length === 1 && service.interfaces[0].kind === 'api');\n const iface = service.interfaces[0];\n invariant(iface.schemaUrl);\n invariant(iface.schemaUrl);\n return createToolsFromApi(iface.schemaUrl, { authorization: iface.authorization });\n};\n\nexport const createToolsFromApi = async (url: string, options?: CreateToolsFromApiOptions): Promise<Tool[]> => {\n const res = await fetch(url);\n const spec = (await res.json()) as OpenAPIV2.Document;\n log('spec', { spec });\n\n const tools: Tool[] = [];\n for (const [path, pathItem] of Object.entries(spec.paths)) {\n if (typeof pathItem !== 'object') {\n continue;\n }\n\n // TODO(burdon): ???\n const { ...methods } = pathItem;\n for (const [method, m] of Object.entries(methods)) {\n const methodItem: OpenAPIV2.OperationObject = m as OpenAPIV2.OperationObject;\n log('methodItem', { path, method, methodItem });\n\n const parametersResolved: OpenAPIV2.ParameterObject[] =\n methodItem.parameters?.map((parameter: any) => {\n const resolved = resolveJsonSchema(parameter, spec);\n return resolved;\n }) ?? [];\n\n const inputSchema: JsonSchemaType = {\n type: 'object',\n properties: {},\n };\n\n const endpointParameters: OpenAPIV2.ParameterObject[] = [];\n for (const parameter of parametersResolved) {\n log('parameter', { parameter });\n\n if (\n options?.authorization?.type === 'api-key' &&\n options.authorization.placement.type === 'query' &&\n parameter.in === 'query' &&\n parameter.name === options.authorization.placement.name\n ) {\n continue;\n }\n\n endpointParameters.push(parameter);\n\n if (parameter.schema) {\n inputSchema.properties![parameter.name] = normalizeSchema(parameter.schema);\n } else if (typeof parameter.type === 'string') {\n const { name, in: _in, required, ...schema } = parameter;\n inputSchema.properties![name] = normalizeSchema(schema);\n if (required) {\n inputSchema.required ??= [];\n inputSchema.required!.push(name);\n }\n }\n }\n\n log('inputSchema', { inputSchema });\n S.validateSync(JsonSchemaType)(inputSchema);\n\n const description = methodItem.description ?? methodItem.summary;\n if (!description) {\n log.warn('no description', { path, method });\n continue;\n }\n\n const endpoint: EndpointDescriptor = {\n document: spec,\n path,\n method,\n parameters: endpointParameters,\n authorization: options?.authorization,\n };\n\n tools.push({\n name: getToolName(path, method, methodItem),\n description: options?.instructions ? `${options.instructions}\\n\\n${description}` : description,\n parameters: inputSchema,\n execute: async (input) => {\n const response = await callApiEndpoint(endpoint, input);\n return ToolResult.Success(response);\n },\n });\n }\n }\n\n return tools;\n};\n\nconst getToolName = (path: string, method: string, methodItem: OpenAPIV2.OperationObject) => {\n if (methodItem.operationId) {\n return methodItem.operationId;\n }\n\n // Generate a name from the path and method.\n let name = `${method.toLowerCase()}_${path.replaceAll(/[{}/]/g, '_')}`;\n while (name.length > MAX_TOOL_NAME_LENGTH) {\n const lengthBefore = name.length;\n\n for (const word of GENERIC_WORDS) {\n if (name.includes(word)) {\n name = name.replace(word, '');\n break;\n }\n }\n name = name.replaceAll('__', '_').replace(/_$/, '');\n\n const lengthAfter = name.length;\n if (lengthBefore === lengthAfter) {\n break;\n }\n }\n name = name.replaceAll('__', '_').replace(/_$/, '').replace(/^_/, '');\n\n return name.slice(0, MAX_TOOL_NAME_LENGTH);\n};\n\nconst MAX_TOOL_NAME_LENGTH = 64;\nconst GENERIC_WORDS = [\n 'services',\n 'service',\n 'api',\n 'rest',\n 'endpoint',\n 'get',\n 'post',\n 'put',\n 'delete',\n 'patch',\n 'head',\n 'options',\n 'trace',\n 'service',\n 'api',\n 'endpoint',\n];\n\ntype EndpointDescriptor = {\n document: OpenAPIV3_1.Document | OpenAPIV2.Document;\n path: string;\n method: string;\n parameters: OpenAPIV2.ParameterObject[];\n authorization?: ApiAuthorization;\n};\n\nconst callApiEndpoint = async (endpoint: EndpointDescriptor, input: any) => {\n log.info('endpoint', { method: endpoint.method, name: endpoint.path, input });\n\n let url = getEndpointUrl(endpoint);\n const request: RequestInit = {\n method: endpoint.method,\n headers: {},\n };\n const query = new URLSearchParams();\n let body: any;\n for (const parameter of endpoint.parameters) {\n if (input[parameter.name] === undefined) {\n continue;\n }\n\n switch (parameter.in) {\n case 'header': {\n if (parameter.example) {\n (request.headers as any)[parameter.name] = parameter.default;\n }\n break;\n }\n case 'path': {\n url = url.replace(`{${parameter.name}}`, encodeURIComponent(input[parameter.name]));\n break;\n }\n case 'body': {\n const value = input[parameter.name];\n\n // Client-side validation\n const effectSchema = toEffectSchema(parameter.schema);\n S.validateSync(effectSchema)(value);\n\n if (body) {\n throw new Error(`Duplicate body parameter: ${parameter.name}`);\n }\n body = value;\n break;\n }\n case 'query': {\n query.set(parameter.name, input[parameter.name]);\n break;\n }\n }\n }\n\n if (\n (endpoint.authorization?.type === 'api-key' && endpoint.authorization.placement.type === 'authorization-header') ||\n endpoint.authorization?.type === 'oauth'\n ) {\n (request.headers as any).Authorization = await resolveAuthorization(endpoint.authorization);\n } else if (endpoint.authorization?.type === 'api-key' && endpoint.authorization.placement.type === 'query') {\n query.set(endpoint.authorization.placement.name, endpoint.authorization.key);\n }\n\n if (query.size > 0) {\n url += `?${query.toString()}`;\n }\n\n if (body) {\n request.body = JSON.stringify(body);\n (request.headers as any)['Content-Type'] = 'application/json';\n }\n\n log.info('request', { url, request });\n const response = await fetch(url, request);\n\n log.info('response', { ok: response.ok, status: response.status, statusText: response.statusText });\n\n if (response.ok) {\n const contentType = response.headers.get('Content-Type');\n if (contentType?.includes('application/json')) {\n return await response.json();\n } else {\n return await response.text();\n }\n } else {\n if (response.headers.get('Content-Type')?.includes('application/json')) {\n const responseBody = await response.text();\n let error: any;\n try {\n error = JSON.parse(responseBody);\n } catch {\n error = responseBody;\n }\n log.error('error', { error });\n throw new Error(error.message);\n } else {\n const error = await response.text();\n log.error('error', { error });\n throw new Error(error);\n }\n }\n};\n\nconst getEndpointUrl = (endpoint: EndpointDescriptor) => {\n let url = '';\n if (isV3_1(endpoint.document) && endpoint.document.servers && endpoint.document.servers.length > 0) {\n url = endpoint.document.servers[0].url;\n } else {\n invariant(!isV3_1(endpoint.document));\n url = `${endpoint.document.schemes?.[0] ?? 'https'}://${endpoint.document.host}`;\n }\n\n if (!isV3_1(endpoint.document) && endpoint.document.basePath) {\n url += endpoint.document.basePath;\n }\n\n url += endpoint.path;\n\n return url;\n};\n\nexport const resolveAuthorization = async (authorization: ApiAuthorization): Promise<string> => {\n switch (authorization.type) {\n case 'api-key': {\n invariant(authorization.placement.type === 'authorization-header');\n return `Bearer ${authorization.key}`;\n }\n case 'oauth': {\n const response = await fetch(authorization.tokenUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body: `grant_type=${authorization.grantType}&client_id=${authorization.clientId}&client_secret=${authorization.clientSecret}`,\n });\n const data = await response.json();\n return `Bearer ${data.access_token}`;\n }\n default: {\n throw new Error(`Unknown authorization type: ${(authorization as any).type}`);\n }\n }\n};\n\n/**\n * Resolves all $ref properties in a JSON schema.\n * Doesn't assume the structure of the schema.\n * The function looks from $ref properties in the schema and resolves them to their values in the base object.\n */\nconst resolveJsonSchema = (schema: any, base: any) => {\n return deepMapValues(schema, (value, recurse) => {\n if (typeof value === 'object' && value !== null && '$ref' in value && typeof value.$ref === 'string') {\n if (value.$ref.startsWith('#')) {\n const resolved = jsonpointer.get(base, value.$ref.slice(1));\n if (resolved) {\n return recurse(resolved);\n } else {\n log.warn('unresolved', { ref: value.$ref, base });\n }\n }\n }\n return recurse(value);\n });\n};\n\nconst isV3_1 = (document: OpenAPIV3_1.Document | OpenAPIV2.Document): document is OpenAPIV3_1.Document => {\n return (document as any).openapi === '3.0.1';\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type KeyboardEventHandler, useCallback, useMemo, useRef, useState } from 'react';\n\nimport { type Message } from '@dxos/artifact';\nimport { IconButton, Input, useTranslation } from '@dxos/react-ui';\nimport { Spinner } from '@dxos/react-ui-sfx';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { ScrollContainer, type ScrollController } from './ScrollContainer';\nimport { ThreadMessage, type ThreadMessageProps } from './ThreadMessage';\nimport { AUTOMATION_PLUGIN } from '../../meta';\n\nexport type ThreadProps = {\n messages?: Message[];\n streaming?: boolean;\n onSubmit?: (message: string) => void;\n onStop?: () => void;\n} & Pick<ThreadMessageProps, 'collapse' | 'debug' | 'onSuggest' | 'onDelete'>;\n\n// TODO(burdon): Factor out scroll logic.\nexport const Thread = ({\n messages,\n streaming,\n collapse,\n debug,\n onSubmit,\n onStop,\n onSuggest,\n onDelete,\n}: ThreadProps) => {\n const { t } = useTranslation(AUTOMATION_PLUGIN);\n const scroller = useRef<ScrollController>(null);\n\n const [text, setText] = useState('');\n const handleKeyDown = useCallback<KeyboardEventHandler<HTMLInputElement>>(\n (ev) => {\n switch (ev.key) {\n case 'Escape': {\n setText('');\n break;\n }\n\n case 'Enter': {\n const value = text.trim();\n if (value.length > 0) {\n scroller.current?.scrollToBottom();\n onSubmit?.(value);\n setText('');\n }\n break;\n }\n }\n },\n [text],\n );\n\n /**\n * Reduce message blocks into collections of messages that contain related contiguous blocks.\n * For example, collapse all tool request/response pairs into a single message.\n */\n // TODO(dmaretskyi): This needs to be a separate type: `id` is not a valid ObjectId, this needs to accommodate messageId for deletion.\n const { messages: lines = [] } = useMemo(() => {\n if (!collapse) {\n return { messages: messages ?? [] };\n }\n\n return (messages ?? []).reduce<{ messages: Message[]; current?: Message }>(\n ({ current, messages }, message) => {\n let i = 0;\n for (const block of message.content) {\n switch (block.type) {\n case 'tool_use':\n case 'tool_result': {\n if (current) {\n current.content.push(block);\n } else {\n current = {\n id: [message.id, i].join('_'),\n role: message.role,\n content: [block],\n };\n messages.push(current);\n }\n break;\n }\n\n case 'text':\n default: {\n current = undefined;\n messages.push({\n id: [message.id, i].join('_'),\n role: message.role,\n content: [block],\n });\n break;\n }\n }\n\n i++;\n }\n\n return { current, messages };\n },\n { messages: [] as Message[] },\n );\n }, [messages, collapse]);\n\n return (\n <div className='flex flex-col grow overflow-hidden'>\n <ScrollContainer ref={scroller} classNames='py-2 gap-2 overflow-x-hidden'>\n {lines.map((message) => (\n <ThreadMessage\n key={message.id}\n classNames='px-4'\n message={message}\n collapse={collapse}\n debug={debug}\n onSuggest={onSuggest}\n onDelete={onDelete}\n />\n ))}\n </ScrollContainer>\n\n {onSubmit && (\n <div className='flex p-4 gap-3 items-center'>\n <Spinner active={streaming} />\n <Input.Root>\n <Input.TextInput\n autoFocus\n classNames='px-2 bg-base rounded'\n placeholder={t('chat input placeholder')}\n value={text}\n onChange={(ev) => setText(ev.target.value)}\n onKeyDown={handleKeyDown}\n />\n </Input.Root>\n {onStop && (\n <IconButton\n disabled={!streaming}\n classNames={mx('!p-1 !opacity-20 transition', streaming && '!opacity-80')}\n variant='ghost'\n size={5}\n onClick={onStop}\n icon='ph--x--regular'\n label={t('chat stop')}\n iconOnly\n />\n )}\n </div>\n )}\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, {\n forwardRef,\n type PropsWithChildren,\n type UIEventHandler,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from 'react';\n\nimport { invariant } from '@dxos/invariant';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nexport interface ScrollController {\n scrollToBottom: () => void;\n}\n\nexport type ScrollContainerProps = ThemedClassName<PropsWithChildren>;\n\n/**\n * Scroll container that automatically scrolls to the bottom when new content is added.\n */\n// TODO(burdon): Move to react-ui.\n// TODO(burdon): Custom scrollbar.\nexport const ScrollContainer = forwardRef<ScrollController, ScrollContainerProps>(\n ({ children, classNames }, forwardedRef) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const autoScrollRef = useRef(false);\n\n // Controller.\n useImperativeHandle(\n forwardedRef,\n () => ({\n scrollToBottom: () => {\n invariant(containerRef.current);\n containerRef.current.scrollTo({ top: containerRef.current.scrollHeight, behavior: 'smooth' });\n autoScrollRef.current = false;\n },\n }),\n [],\n );\n\n // Auto scroll.\n const [sticky, setSticky] = useState(true);\n useEffect(() => {\n if (!sticky || !containerRef.current) {\n return;\n }\n\n autoScrollRef.current = true;\n containerRef.current.scrollTo({ top: containerRef.current.scrollHeight, behavior: 'smooth' });\n }, [children]);\n\n // Detect scroll end.\n useEffect(() => {\n invariant(containerRef.current);\n const handleScrollEnd = () => {\n autoScrollRef.current = false;\n };\n\n containerRef.current.addEventListener('scrollend', handleScrollEnd);\n return () => containerRef.current?.removeEventListener('scrollend', handleScrollEnd);\n }, []);\n\n // Scrolling.\n const handleScroll = useCallback<UIEventHandler<HTMLDivElement>>((ev) => {\n if (autoScrollRef.current) {\n return;\n }\n\n const { scrollTop, clientHeight, scrollHeight } = ev.currentTarget;\n const sticky = scrollTop + clientHeight >= scrollHeight;\n setSticky(sticky);\n }, []);\n\n return (\n <div\n ref={containerRef}\n onScroll={handleScroll}\n className={mx('flex flex-col grow overflow-y-scroll scrollbar-none', classNames)}\n >\n {children}\n </div>\n );\n },\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type FC } from 'react';\n\nimport { type MessageContentBlock, type Message } from '@dxos/artifact';\nimport { invariant } from '@dxos/invariant';\nimport { Button, ButtonGroup, Icon, type ThemedClassName } from '@dxos/react-ui';\nimport { Json } from '@dxos/react-ui-syntax-highlighter';\nimport { mx } from '@dxos/react-ui-theme';\nimport { safeParseJson } from '@dxos/util';\n\nimport { StatusLine } from './StatusLine';\nimport { ToggleContainer } from './ToggleContainer';\nimport { MarkdownViewer } from '../MarkdownViewer';\n\nexport type ThreadMessageProps = ThemedClassName<{\n message: Message;\n collapse?: boolean;\n debug?: boolean;\n onSuggest?: (text: string) => void;\n onDelete?: (id: string) => void;\n}>;\n\nexport const ThreadMessage: FC<ThreadMessageProps> = ({\n classNames,\n message,\n collapse,\n debug,\n onSuggest,\n onDelete,\n}) => {\n if (typeof message !== 'object') {\n return <div className={mx(classNames)}>{message}</div>;\n }\n\n const { role, content = [] } = message;\n\n // TODO(burdon): Factor out tool blocks.\n const tools = content.filter((block) => block.type === 'tool_use' || block.type === 'tool_result');\n if (collapse && tools.length > 0) {\n let request: MessageContentBlock & { type: 'tool_use' };\n const lines = tools.map((tool) => {\n switch (tool.type) {\n case 'tool_use': {\n request = tool;\n // TODO(burdon): Get plugin name.\n return `Calling ${tool.name}...`;\n }\n case 'tool_result': {\n if (!request) {\n return 'Error';\n }\n\n return `Processed ${request.name}`;\n }\n default:\n return 'Error';\n }\n });\n\n return (\n <div className={mx('flex', classNames)}>\n <div className='w-full p-1 px-2 overflow-hidden rounded-md bg-base'>\n <ToggleContainer title={<StatusLine lines={lines} autoAdvance />} toggle>\n <Json data={content[content.length - 1]} classNames='!p-1 text-xs' />\n </ToggleContainer>\n </div>\n </div>\n );\n }\n\n return (\n <div className={mx('flex flex-col shrink-0 gap-2')}>\n {debug && (\n <div className='text-xs text-subdued'>\n {message.id}{' '}\n {onDelete && (\n <span className='cursor-pointer underline' onClick={() => onDelete(message.id)}>\n delete\n </span>\n )}\n </div>\n )}\n {content.map((block, idx) => (\n <div key={idx} className={mx('flex', classNames, block.type === 'text' && role === 'user' && 'justify-end')}>\n <Block role={role} block={block} onSuggest={onSuggest ?? (() => {})} />\n </div>\n ))}\n </div>\n );\n};\n\nconst Block = ({\n block,\n role,\n onSuggest,\n}: Pick<Message, 'role'> & { block: MessageContentBlock; onSuggest: (text: string) => void }) => {\n const Component = componentMap[block.type] ?? componentMap.default;\n return (\n <div\n className={mx(\n 'p-1 px-2 overflow-hidden rounded-md',\n (block.type !== 'text' || block.disposition) && 'w-full bg-base',\n block.type === 'text' && role === 'user' && 'bg-blue-200 dark:bg-blue-800',\n )}\n >\n <Component block={block} onSuggest={onSuggest} />\n </div>\n );\n};\n\nconst titles: Record<string, string> = {\n ['cot' as const]: 'Chain of thought',\n\n // TODO(burdon): Only show if debugging.\n ['tool_use' as const]: 'Tool request',\n ['tool_result' as const]: 'Tool result',\n\n ['artifact' as const]: 'Artifact',\n};\n\ntype BlockComponent = FC<{ block: MessageContentBlock; onSuggest: (text: string) => void }>;\n\nconst componentMap: Record<string, BlockComponent> = {\n text: ({ block }) => {\n invariant(block.type === 'text');\n const title = block.disposition ? titles[block.disposition] : undefined;\n if (!title) {\n return (\n <MarkdownViewer content={block.text} classNames={[block.disposition === 'cot' && 'text-sm text-subdued']} />\n );\n }\n\n return (\n <ToggleContainer\n title={title}\n icon={\n block.pending ? (\n <Icon icon={'ph--circle-notch--regular'} classNames='text-subdued ml-2 animate-spin' size={4} />\n ) : undefined\n }\n defaultOpen={block.disposition === 'cot'}\n toggle\n >\n <MarkdownViewer content={block.text} classNames={[block.disposition === 'cot' && 'text-sm text-subdued']} />\n </ToggleContainer>\n );\n },\n\n json: ({ block, onSuggest }) => {\n invariant(block.type === 'json');\n\n switch (block.disposition) {\n case 'suggest': {\n const { text = '' }: { text: string } = safeParseJson(block.json ?? '{}') ?? ({} as any);\n return <Button onClick={() => onSuggest(text)}>{text}</Button>;\n }\n case 'select': {\n const { options = [] }: { options: string[] } = safeParseJson(block.json ?? '{}') ?? ({} as any);\n return (\n <ButtonGroup>\n {options.map((option) => (\n <Button key={option} onClick={() => onSuggest(option)}>\n {option}\n </Button>\n ))}\n </ButtonGroup>\n );\n }\n default: {\n const title = block.disposition ? titles[block.disposition] : undefined;\n return (\n <ToggleContainer title={title ?? 'JSON'} toggle>\n <Json data={safeParseJson(block.json ?? block)} classNames='!p-1 text-xs' />\n </ToggleContainer>\n );\n }\n }\n },\n\n default: ({ block }) => {\n let title = titles[block.type];\n if (block.type === 'tool_use') {\n title = `Tool [${block.name}]`; // TODO(burdon): Get label from tool.\n }\n\n return (\n <ToggleContainer title={title ?? 'JSON'} toggle>\n <Json data={block} classNames='!p-1 text-xs' />\n </ToggleContainer>\n );\n },\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useEffect, useRef, useState } from 'react';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nconst emptyLines: string[] = [];\n\nexport type StatusLineProps = ThemedClassName<{\n line?: number;\n lines?: string[];\n transition?: number;\n advance?: number;\n autoAdvance?: boolean;\n}>;\n\nexport const StatusLine = ({\n classNames,\n line = -1,\n lines = emptyLines,\n transition = 300,\n advance = 1_000,\n autoAdvance,\n}: StatusLineProps) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const [currentLine, setCurrentLine] = useState(line);\n useEffect(() => {\n setCurrentLine(line);\n }, [line]);\n\n useEffect(() => {\n if (!autoAdvance) {\n return;\n }\n\n const next = () => {\n setCurrentLine((prev) => {\n if (prev === lines.length - 1) {\n clearInterval(interval);\n return prev;\n }\n\n return prev + 1;\n });\n };\n\n next();\n const interval = setInterval(next, advance);\n\n return () => clearInterval(interval);\n }, [lines.length, autoAdvance, advance]);\n\n useEffect(() => {\n if (containerRef.current) {\n containerRef.current.style.transition = `transform ${transition}ms ease-in-out`;\n containerRef.current.style.transform = `translateY(-${currentLine * 24}px)`;\n }\n }, [currentLine]);\n\n return (\n <div className={mx('relative h-[24px] overflow-hidden', classNames)}>\n <div ref={containerRef} className='h-[24px]'>\n <div className='flex flex-col'>\n {lines.map((line, i) => (\n <div key={i} className={mx('flex h-[24px] items-center')}>\n <span className='truncate'>{line}</span>\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type JSX, type PropsWithChildren, useEffect, useState } from 'react';\n\nimport { Icon, type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nexport type ToggleContainerProps = ThemedClassName<\n PropsWithChildren<{\n title?: string | JSX.Element;\n icon?: JSX.Element;\n toggle?: boolean;\n defaultOpen?: boolean;\n duration?: number;\n /** Should shrink the width when closed. */\n shrinkX?: boolean;\n }>\n>;\n\n// TODO(burdon): Externalize toggle state.\nexport const ToggleContainer = ({\n title,\n icon,\n toggle,\n defaultOpen,\n duration = 400,\n shrinkX = false,\n children,\n classNames,\n}: ToggleContainerProps) => {\n const [expand, setExpand] = useState(defaultOpen || !toggle);\n const [expandX, setExpandX] = useState(shrinkX ? expand : true);\n const [expandY, setExpandY] = useState(expand);\n\n useEffect(() => {\n let t: NodeJS.Timeout;\n if (expand) {\n if (shrinkX) {\n setExpandX(true);\n }\n t = setTimeout(\n () => {\n setExpandY(true);\n },\n shrinkX ? duration : 0,\n );\n } else {\n setExpandY(false);\n if (shrinkX) {\n t = setTimeout(() => {\n setExpandX(false);\n }, duration);\n }\n }\n\n return () => clearTimeout(t);\n }, [expand]);\n\n return (\n <div className={mx('overflow-hidden', classNames)}>\n {title && (\n <div\n className='flex gap-1 py-1 items-center text-sm text-subdued cursor-pointer select-none'\n onClick={toggle ? () => setExpand((open) => !open) : undefined}\n >\n {toggle && (\n <div className='flex w-[24px] h-[24px] items-center justify-center'>\n <Icon\n size={4}\n icon={'ph--caret-right--regular'}\n style={{ transitionDuration: `${shrinkX ? duration * 2 : duration}ms` }}\n classNames={['transition transition-transform ease-in-out', expand ? 'rotate-90' : 'transform-none']}\n />\n </div>\n )}\n <div className='flex-1 pis-1 pie-1 truncate'>{title}</div>\n {icon}\n </div>\n )}\n <div\n style={{ transitionDuration: `${duration}ms` }}\n className={mx(\n 'grid transition-[grid-template-columns] ease-in-out',\n expandX ? 'grid-cols-[1fr]' : 'grid-cols-[0fr]',\n )}\n >\n <div className='overflow-hidden'>\n <div\n style={{ transitionDuration: `${duration}ms` }}\n className={mx(\n 'grid transition-[grid-template-rows] ease-in-out',\n expandY ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]',\n )}\n >\n <div className={mx('flex overflow-hidden transition-opacity')}>{children}</div>\n </div>\n </div>\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type FC } from 'react';\nimport ReactMarkdown from 'react-markdown';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { SyntaxHighlighter } from '@dxos/react-ui-syntax-highlighter';\nimport { mx } from '@dxos/react-ui-theme';\nimport { omit } from '@dxos/util';\n\ntype MarkdownViewerProps = ThemedClassName<{\n content?: string;\n}>;\n\n/**\n * Transform text into react elements.\n *\n * https://github.com/remarkjs/react-markdown\n * markdown -> remark -> [mdast -> remark plugins] -> [hast -> rehype plugins] -> components -> react elements.\n */\n// TODO(burdon): Styles.\n// TODO(burdon): Factor out (react-ui-syntax-highlighter).\nexport const MarkdownViewer: FC<MarkdownViewerProps> = ({ classNames, content = '' }) => {\n return (\n <div className={mx('space-y-2', classNames)}>\n <ReactMarkdown\n components={{\n a: ({ node, children, href, ...props }) => (\n <a\n href={href}\n className='text-primary-500 hover:text-primary-500'\n target='_blank'\n rel='noopener noreferrer'\n {...props}\n >\n {children}\n </a>\n ),\n ol: ({ node, children, ...props }) => (\n <ol className='leading-tight list-decimal pl-6' {...omit(props, ['ordered'])}>\n {children}\n </ol>\n ),\n ul: ({ node, children, ...props }) => (\n <ul className='leading-tight list-disc pl-6' {...omit(props, ['ordered'])}>\n {children}\n </ul>\n ),\n li: ({ node, children, ...props }) => (\n <li className='' {...omit(props, ['ordered'])}>\n {children}\n </li>\n ),\n blockquote: ({ node, children, ...props }) => (\n <blockquote className='border-l-4 border-primary-500 pl-4 my-4 text-primary-500' {...props}>\n {children}\n </blockquote>\n ),\n code: ({ children, className }) => {\n const [_, language] = /language-(\\w+)/.exec(className || '') || [];\n return (\n <SyntaxHighlighter PreTag='div' language={language} className='p-0'>\n {children}\n </SyntaxHighlighter>\n );\n },\n }}\n >\n {content}\n </ReactMarkdown>\n </div>\n );\n};\n\n// const Cursor = () => {\n// return <span className='animate-[pulse_1s_steps(1)_infinite] text-primary-500'>▊</span>;\n// };\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { ChatContainer } from './ChatContainer';\n\nexport * from './ChatContainer';\nexport default ChatContainer;\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["import_app_framework", "import_artifact", "import_invariant", "import_react", "import_functions", "import_log", "import_react_client", "import_echo", "import_async", "import_keys", "import_echo_schema", "import_util", "import_react_ui_theme", "import_react_ui", "import_react_ui_syntax_highlighter", "AiClient", "lazy", "AppGraphBuilder", "IntentResolver", "ReactSurface", "defaultOptions", "model", "systemPrompt", "ChatProcessor", "constructor", "_client", "_tools", "_extensions", "_options", "_parser", "MixedStreamParser", "_pending", "signal", "_block", "undefined", "_history", "streaming", "computed", "value", "messages", "current", "pop", "invariant", "content", "rest", "message", "push", "on", "batch", "update", "block", "request", "options", "history", "createStatic", "Message", "role", "type", "text", "_generate", "onComplete", "_reset", "cancel", "log", "info", "_stream", "abort", "more", "length", "generate", "tools", "parse", "complete", "at", "isToolUse", "response", "runTools", "extensions", "err", "catch", "useServiceRegistry", "query", "registry", "useMemo", "MockServiceRegistry", "services", "setServices", "useState", "useEffect", "t", "setTimeout", "queryServices", "clearTimeout", "registerTriggersMutex", "Mutex", "covertFunctionToTool", "fn", "edgeUrl", "spaceId", "description", "inputSchema", "existingFunctionUrl", "getUserFunctionUrlInMetadata", "getMeta", "url", "getInvocationUrl", "defineTool", "name", "schema", "toEffectSchema", "execute", "input", "fetch", "method", "headers", "body", "JSON", "stringify", "ToolResult", "Success", "createToolsFromService", "service", "interfaces", "kind", "iface", "schemaUrl", "createToolsFromApi", "authorization", "res", "spec", "json", "path", "pathItem", "Object", "entries", "paths", "methods", "m", "methodItem", "parametersResolved", "parameters", "map", "parameter", "resolved", "resolveJsonSchema", "properties", "endpointParameters", "placement", "in", "normalizeSchema", "_in", "required", "S", "validateSync", "JsonSchemaType", "summary", "warn", "endpoint", "document", "getToolName", "instructions", "callApiEndpoint", "operationId", "toLowerCase", "replaceAll", "MAX_TOOL_NAME_LENGTH", "lengthBefore", "word", "GENERIC_WORDS", "includes", "replace", "lengthAfter", "slice", "getEndpointUrl", "URLSearchParams", "example", "default", "encodeURIComponent", "effectSchema", "Error", "set", "Authorization", "resolveAuthorization", "key", "size", "toString", "ok", "status", "statusText", "contentType", "get", "responseBody", "error", "isV3_1", "servers", "schemes", "host", "basePath", "tokenUrl", "grantType", "clientId", "clientSecret", "data", "access_token", "base", "deepMapValues", "recurse", "$ref", "startsWith", "jsonpointer", "ref", "openapi", "ScrollContainer", "forwardRef", "children", "classNames", "forwardedRef", "containerRef", "useRef", "autoScrollRef", "useImperativeHandle", "scrollToBottom", "scrollTo", "top", "scrollHeight", "behavior", "sticky", "setSticky", "handleScrollEnd", "addEventListener", "removeEventListener", "handleScroll", "useCallback", "ev", "scrollTop", "clientHeight", "currentTarget", "React", "div", "onScroll", "className", "mx", "emptyLines", "StatusLine", "line", "lines", "transition", "advance", "autoAdvance", "currentLine", "setCurrentLine", "next", "prev", "clearInterval", "interval", "setInterval", "style", "transform", "i", "span", "ToggleContainer", "title", "icon", "toggle", "defaultOpen", "duration", "shrinkX", "expand", "setExpand", "expandX", "setExpandX", "expandY", "setExpandY", "onClick", "open", "Icon", "transitionDuration", "MarkdownViewer", "ReactMarkdown", "components", "a", "node", "href", "props", "target", "rel", "ol", "omit", "ul", "li", "blockquote", "code", "_", "language", "exec", "SyntaxHighlighter", "PreTag", "ThreadMessage", "collapse", "debug", "onSuggest", "onDelete", "filter", "tool", "Json", "id", "idx", "Block", "Component", "componentMap", "disposition", "titles", "pending", "safeParseJson", "Button", "ButtonGroup", "option", "Thread", "onSubmit", "onStop", "useTranslation", "AUTOMATION_PLUGIN", "scroller", "setText", "handleKeyDown", "trim", "reduce", "join", "Spinner", "active", "Input", "Root", "TextInput", "autoFocus", "placeholder", "onChange", "onKeyDown", "IconButton", "disabled", "variant", "label", "iconOnly", "ChatContainer", "chat", "config", "useConfig", "space", "getSpace", "aiClient", "useCapability", "AutomationCapabilities", "artifactDefinitions", "useCapabilities", "Capabilities", "ArtifactDefinition", "globalTools", "Tools", "functions", "useQuery", "Filter", "FunctionType", "serviceRegistry", "serviceTools", "setServiceTools", "queueMicrotask", "Promise", "all", "flat", "flatMap", "definition", "values", "runtime", "edge", "isNotNullOrUndefined", "createSystemPrompt", "artifacts", "dispatchPromise", "dispatch", "useIntentDispatcher", "processor", "queueDxn", "DXN", "QUEUE", "QueueSubspaceTags", "DATA", "queue", "dxn", "parts", "edgeClient", "useEdgeClient", "messageQueue", "useQueue", "items", "handleSubmit", "append", "handleStop", "StackItem", "Content", "toolbar"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/components/PromptEditor/PromptEditor.tsx", "../../../src/components/PromptEditor/prompt-extension.ts", "../../../src/components/ServiceRegistry/ServiceRegistry.tsx", "../../../src/components/index.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Schema as S } from '@effect/schema';\nimport React, { useEffect } from 'react';\n\nimport { createDocAccessor } from '@dxos/react-client/echo';\nimport { Input, Select, useThemeContext, useTranslation } from '@dxos/react-ui';\nimport {\n createBasicExtensions,\n createDataExtensions,\n createThemeExtensions,\n useTextEditor,\n} from '@dxos/react-ui-editor';\nimport { attentionSurface, groupBorder, mx } from '@dxos/react-ui-theme';\nimport { nonNullable } from '@dxos/util';\n\nimport { nameRegex, promptExtension } from './prompt-extension';\nimport { AUTOMATION_PLUGIN } from '../../meta';\nimport { type ChainInput, ChainInputType, type ChainPromptType } from '../../types';\n\nconst inputTypes = [\n {\n value: ChainInputType.VALUE,\n label: 'Value',\n },\n {\n value: ChainInputType.PASS_THROUGH,\n label: 'Pass through',\n },\n {\n value: ChainInputType.RETRIEVER,\n label: 'Retriever',\n },\n // {\n // value: ChainInputType.FUNCTION,\n // label: 'Function',\n // },\n // {\n // value: ChainInputType.QUERY,\n // label: 'Query',\n // },\n {\n value: ChainInputType.RESOLVER,\n label: 'Resolver',\n },\n {\n value: ChainInputType.CONTEXT,\n label: 'Context',\n },\n {\n value: ChainInputType.SCHEMA,\n label: 'Schema',\n },\n];\n\nconst getInputType = (type: string) => inputTypes.find(({ value }) => String(value) === type)?.value;\n\nconst usePromptInputs = (prompt: ChainPromptType) => {\n useEffect(() => {\n const text = prompt.template ?? '';\n if (!prompt.inputs) {\n prompt.inputs = []; // TODO(burdon): Required?\n }\n\n const regex = new RegExp(nameRegex, 'g');\n const variables = new Set<string>([...text.matchAll(regex)].map((m) => m[1]));\n\n // Create map of unclaimed inputs.\n const unclaimed = new Map<string, ChainInput>(\n prompt.inputs?.filter(nonNullable).map((input) => [input.name, input]),\n );\n const missing: string[] = [];\n Array.from(variables.values()).forEach((name) => {\n if (unclaimed.has(name)) {\n unclaimed.delete(name);\n } else {\n missing.push(name);\n }\n });\n\n // Match or create new inputs.\n const values = unclaimed.values();\n missing.forEach((name) => {\n const next = values.next().value;\n if (next) {\n next.name = name;\n } else {\n prompt.inputs?.push({ name });\n }\n });\n\n // Remove unclaimed (deleted) inputs.\n // TODO(burdon): If user types incorrect name value, it will be deleted. Garbage collect?\n for (const input of values) {\n prompt.inputs.splice(prompt.inputs.indexOf(input), 1);\n }\n }, [prompt.template]);\n};\n\nexport type PromptEditorProps = {\n prompt: ChainPromptType;\n commandEditable?: boolean;\n schema?: S.Schema<any, any, any>;\n};\n\nexport const PromptEditor = ({ prompt, commandEditable = true }: PromptEditorProps) => {\n const { t } = useTranslation(AUTOMATION_PLUGIN);\n const { themeMode } = useThemeContext();\n\n const { parentRef } = useTextEditor(\n () => ({\n initialValue: prompt.template,\n extensions: [\n createDataExtensions({\n id: prompt.id,\n text: prompt.template !== undefined ? createDocAccessor(prompt, ['template']) : undefined,\n }),\n createBasicExtensions({\n bracketMatching: false,\n lineWrapping: true,\n placeholder: t('template placeholder'),\n }),\n createThemeExtensions({\n themeMode,\n slots: {\n content: { className: '!p-3' },\n },\n }),\n promptExtension,\n ],\n }),\n [themeMode, prompt],\n );\n\n usePromptInputs(prompt);\n\n return (\n <div className={mx('flex flex-col w-full overflow-hidden gap-4', groupBorder)}>\n {commandEditable && (\n <div className='flex items-center pl-4'>\n <span className='text-neutral-500'>/</span>\n <Input.Root>\n <Input.TextInput\n placeholder={t('command placeholder')}\n classNames={mx('is-full bg-transparent m-2')}\n value={prompt.command ?? ''}\n onChange={(event) => {\n prompt.command = event.target.value.replace(/\\w/g, '');\n }}\n />\n </Input.Root>\n </div>\n )}\n\n <div ref={parentRef} className={mx(attentionSurface, 'rounded', 'min-h-[120px]')} />\n\n {(prompt.inputs?.length ?? 0) > 0 && (\n <div className='flex flex-col'>\n {/* TODO(zan): Improve layout with grid */}\n <table className='w-full table-fixed border-collapse my-2'>\n <tbody>\n {prompt.inputs?.filter(nonNullable).map((input) => (\n <tr key={input.name}>\n <td className='w-[160px] p-1 font-mono text-sm whitespace-nowrap truncate'>\n <code className='px-2'>{input.name}</code>\n </td>\n <td className='w-[120px] p-1'>\n <Input.Root>\n <Select.Root\n value={String(input.type)}\n onValueChange={(type) => {\n input.type = getInputType(type) ?? ChainInputType.VALUE;\n }}\n >\n <Select.TriggerButton placeholder='Type' classNames='is-full' />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {inputTypes.map(({ value, label }) => (\n <Select.Option key={value} value={String(value)}>\n {label}\n </Select.Option>\n ))}\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </Input.Root>\n </td>\n <td className='p-1 pr-2'>\n {input.type !== undefined &&\n [\n ChainInputType.VALUE,\n ChainInputType.CONTEXT,\n ChainInputType.RESOLVER,\n ChainInputType.SCHEMA,\n ].includes(input.type) && (\n <div>\n <Input.Root>\n <Input.TextInput\n placeholder={t('command placeholder')}\n classNames={mx('is-full bg-transparent')}\n value={input.value ?? ''}\n onChange={(event) => {\n input.value = event.target.value;\n }}\n />\n </Input.Root>\n </div>\n )}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { HighlightStyle, StreamLanguage, syntaxHighlighting } from '@codemirror/language';\nimport { type Extension } from '@codemirror/state';\n\nimport { tags } from '@dxos/react-ui-editor';\nimport { mx } from '@dxos/react-ui-theme';\n\nexport const nameRegex = /\\{([\\w-]+)}/;\n\nconst parser = StreamLanguage.define({\n token: (stream) => {\n if (stream.eatSpace()) {\n return null;\n }\n if (stream.match(/^#.*/)) {\n return 'lineComment';\n }\n if (stream.match(/^-+$/)) {\n return 'lineComment';\n }\n if (stream.match(nameRegex)) {\n return 'variableName';\n }\n stream.next();\n return null;\n },\n});\n\n/**\n * https://codemirror.net/examples/styling\n * https://lezer.codemirror.net/docs/ref/#highlight\n */\nconst highlightStyles = HighlightStyle.define([\n {\n tag: tags.variableName,\n class: mx('rounded border border-yellow-500 bg-yellow-100 text-black font-mono text-sm'),\n },\n]);\n\nexport const promptExtension: Extension = [parser, syntaxHighlighting(highlightStyles)];\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { Filter, type Space } from '@dxos/client/echo';\nimport { useQuery } from '@dxos/react-client/echo';\nimport { Icon, Input, List, ListItem } from '@dxos/react-ui';\n\nimport { useServiceRegistry } from '../../hooks';\nimport { ServiceType } from '../../types';\n\n// TODO(burdon): Option to show all/enabled.\nexport const ServiceRegistry = ({ space }: { space: Space }) => {\n const matchingServices = useServiceRegistry(space);\n const enabledServices = useQuery(space, Filter.schema(ServiceType));\n\n // Join matching services with enabled services.\n const services = useMemo(() => {\n return matchingServices.map((service) => enabledServices.find((s) => s.serviceId === service.serviceId) ?? service);\n }, [matchingServices, enabledServices]);\n\n const handleSetEnabled = (service: ServiceType, enabled: boolean) => {\n if (enabled) {\n space.db.add(service);\n } else {\n // TODO(burdon): Remove or disable?\n space.db.remove(service);\n }\n };\n\n return (\n <List classNames='h-full grid auto-rows-[5rem] gap-2 p-2 pis-2 pie-3 overflow-y-auto scrollbar-thin'>\n {services.map((service) => (\n <ServiceItem\n key={service.serviceId}\n service={service}\n enabled={service.enabled}\n setEnabled={(enabled) => handleSetEnabled(service, enabled)}\n />\n ))}\n </List>\n );\n};\n\nconst ServiceItem = ({\n service,\n enabled,\n setEnabled,\n}: {\n service: ServiceType;\n enabled?: boolean;\n setEnabled?: (enabled: boolean) => void;\n}) => {\n return (\n <ListItem.Root classNames='flex flex-col gap-1 p-1 overflow-hidden rounded-md border border-separator'>\n <div className='grid grid-cols-[40px_1fr_40px]'>\n <div className='flex gow justify-center items-center'>\n <Icon icon='ph--placeholder--regular' size={6} />\n </div>\n <div className='grow items-center truncate mie-2'>{service.name}</div>\n <div className='flex gow justify-center items-center'>\n <Input.Root>\n <Input.Switch checked={enabled} onClick={() => setEnabled?.(!enabled)} />\n </Input.Root>\n </div>\n </div>\n <div className='grid grid-cols-[40px_1fr]'>\n <div />\n <div className='text-sm text-subdued line-clamp-2'>{service.description}</div>\n </div>\n </ListItem.Root>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { lazy } from 'react';\n\nexport * from './AutomationPanel';\nexport * from './ChatContainer';\nexport * from './MarkdownViewer';\nexport * from './PromptEditor';\nexport * from './ServiceRegistry';\nexport * from './Thread';\nexport * from './TriggerEditor';\n\nexport const AutomationPanel = lazy(() => import('./AutomationPanel'));\nexport const ChatContainer = lazy(() => import('./ChatContainer'));\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["import_react_ui_editor", "import_react_ui_theme", "import_react", "import_echo", "import_react_ui", "nameRegex", "parser", "StreamLanguage", "define", "token", "stream", "eatSpace", "match", "next", "highlightStyles", "HighlightStyle", "tag", "tags", "variableName", "class", "mx", "promptExtension", "syntaxHighlighting", "inputTypes", "value", "ChainInputType", "VALUE", "label", "PASS_THROUGH", "RETRIEVER", "RESOLVER", "CONTEXT", "SCHEMA", "getInputType", "type", "find", "String", "usePromptInputs", "prompt", "useEffect", "text", "template", "inputs", "regex", "RegExp", "variables", "Set", "matchAll", "map", "m", "unclaimed", "Map", "filter", "nonNullable", "input", "name", "missing", "Array", "from", "values", "forEach", "has", "delete", "push", "splice", "indexOf", "PromptEditor", "commandEditable", "t", "useTranslation", "AUTOMATION_PLUGIN", "themeMode", "useThemeContext", "parentRef", "useTextEditor", "initialValue", "extensions", "createDataExtensions", "id", "undefined", "createDocAccessor", "createBasicExtensions", "bracketMatching", "lineWrapping", "placeholder", "createThemeExtensions", "slots", "content", "className", "React", "div", "groupBorder", "span", "Input", "Root", "TextInput", "classNames", "command", "onChange", "event", "target", "replace", "ref", "attentionSurface", "length", "table", "tbody", "tr", "key", "td", "code", "Select", "onValueChange", "TriggerButton", "Portal", "Content", "Viewport", "Option", "includes", "ServiceRegistry", "space", "matchingServices", "useServiceRegistry", "enabledServices", "useQuery", "Filter", "schema", "ServiceType", "services", "useMemo", "service", "s", "serviceId", "handleSetEnabled", "enabled", "db", "add", "remove", "List", "ServiceItem", "setEnabled", "ListItem", "Icon", "icon", "size", "Switch", "checked", "onClick", "description", "AutomationPanel", "lazy", "ChatContainer"]
|
|
7
|
-
}
|
|
@@ -1,226 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var chunk_LU4HQWJD_exports = {};
|
|
20
|
-
__export(chunk_LU4HQWJD_exports, {
|
|
21
|
-
AIChatType: () => AIChatType,
|
|
22
|
-
ApiAuthorization: () => ApiAuthorization,
|
|
23
|
-
AutomationAction: () => AutomationAction,
|
|
24
|
-
ChainInputSchema: () => ChainInputSchema,
|
|
25
|
-
ChainInputType: () => ChainInputType,
|
|
26
|
-
ChainPromptType: () => ChainPromptType,
|
|
27
|
-
ChainType: () => ChainType,
|
|
28
|
-
MockServiceRegistry: () => MockServiceRegistry,
|
|
29
|
-
ServiceType: () => ServiceType
|
|
30
|
-
});
|
|
31
|
-
module.exports = __toCommonJS(chunk_LU4HQWJD_exports);
|
|
32
|
-
var import_chunk_5VF5JKUN = require("./chunk-5VF5JKUN.cjs");
|
|
33
|
-
var import_echo_schema = require("@dxos/echo-schema");
|
|
34
|
-
var import_conductor = require("@dxos/conductor");
|
|
35
|
-
var import_echo_schema2 = require("@dxos/echo-schema");
|
|
36
|
-
var import_functions = require("@dxos/functions");
|
|
37
|
-
var import_echo_schema3 = require("@dxos/echo-schema");
|
|
38
|
-
var ChainInputType;
|
|
39
|
-
(function(ChainInputType2) {
|
|
40
|
-
ChainInputType2[ChainInputType2["VALUE"] = 0] = "VALUE";
|
|
41
|
-
ChainInputType2[ChainInputType2["PASS_THROUGH"] = 1] = "PASS_THROUGH";
|
|
42
|
-
ChainInputType2[ChainInputType2["RETRIEVER"] = 2] = "RETRIEVER";
|
|
43
|
-
ChainInputType2[ChainInputType2["FUNCTION"] = 3] = "FUNCTION";
|
|
44
|
-
ChainInputType2[ChainInputType2["QUERY"] = 4] = "QUERY";
|
|
45
|
-
ChainInputType2[ChainInputType2["RESOLVER"] = 5] = "RESOLVER";
|
|
46
|
-
ChainInputType2[ChainInputType2["CONTEXT"] = 6] = "CONTEXT";
|
|
47
|
-
ChainInputType2[ChainInputType2["SCHEMA"] = 7] = "SCHEMA";
|
|
48
|
-
})(ChainInputType || (ChainInputType = {}));
|
|
49
|
-
var ChainInputSchema = import_echo_schema2.S.mutable(import_echo_schema2.S.Struct({
|
|
50
|
-
name: import_echo_schema2.S.String,
|
|
51
|
-
type: import_echo_schema2.S.optional(import_echo_schema2.S.Enums(ChainInputType)),
|
|
52
|
-
value: import_echo_schema2.S.optional(import_echo_schema2.S.String)
|
|
53
|
-
}));
|
|
54
|
-
var ChainPromptType = class extends (0, import_echo_schema2.TypedObject)({
|
|
55
|
-
typename: "dxos.org/type/ChainPrompt",
|
|
56
|
-
version: "0.1.0"
|
|
57
|
-
})({
|
|
58
|
-
command: import_echo_schema2.S.optional(import_echo_schema2.S.String),
|
|
59
|
-
template: import_echo_schema2.S.String,
|
|
60
|
-
inputs: import_echo_schema2.S.optional(import_echo_schema2.S.mutable(import_echo_schema2.S.Array(ChainInputSchema)))
|
|
61
|
-
}) {
|
|
62
|
-
};
|
|
63
|
-
var ChainType = class extends (0, import_echo_schema2.TypedObject)({
|
|
64
|
-
typename: "dxos.org/type/Chain",
|
|
65
|
-
version: "0.1.0"
|
|
66
|
-
})({
|
|
67
|
-
name: import_echo_schema2.S.optional(import_echo_schema2.S.String),
|
|
68
|
-
prompts: import_echo_schema2.S.optional(import_echo_schema2.S.mutable(import_echo_schema2.S.Array((0, import_echo_schema2.Ref)(ChainPromptType))))
|
|
69
|
-
}) {
|
|
70
|
-
};
|
|
71
|
-
var AIChatType = class extends (0, import_echo_schema2.TypedObject)({
|
|
72
|
-
typename: "dxos.org/type/AIChat",
|
|
73
|
-
version: "0.1.0"
|
|
74
|
-
})({
|
|
75
|
-
name: import_echo_schema2.S.optional(import_echo_schema2.S.String),
|
|
76
|
-
// TODO(wittjosiah): Should be a ref to a Queue.
|
|
77
|
-
queue: (0, import_echo_schema2.Ref)(import_echo_schema2.Expando)
|
|
78
|
-
}) {
|
|
79
|
-
};
|
|
80
|
-
var ApiAuthorizationKey = import_echo_schema2.S.Struct({
|
|
81
|
-
type: import_echo_schema2.S.Literal("api-key"),
|
|
82
|
-
key: import_echo_schema2.S.String,
|
|
83
|
-
placement: import_echo_schema2.S.Union(import_echo_schema2.S.Struct({
|
|
84
|
-
type: import_echo_schema2.S.Literal("authorization-header")
|
|
85
|
-
}), import_echo_schema2.S.Struct({
|
|
86
|
-
type: import_echo_schema2.S.Literal("query"),
|
|
87
|
-
name: import_echo_schema2.S.String
|
|
88
|
-
}))
|
|
89
|
-
});
|
|
90
|
-
var ApiAuthorizationOauth = import_echo_schema2.S.Struct({
|
|
91
|
-
type: import_echo_schema2.S.Literal("oauth"),
|
|
92
|
-
clientId: import_echo_schema2.S.String,
|
|
93
|
-
clientSecret: import_echo_schema2.S.String,
|
|
94
|
-
tokenUrl: import_echo_schema2.S.String,
|
|
95
|
-
grantType: import_echo_schema2.S.String
|
|
96
|
-
});
|
|
97
|
-
var ApiAuthorization = import_echo_schema2.S.Union(ApiAuthorizationKey, ApiAuthorizationOauth);
|
|
98
|
-
var ServiceInterfaceFunction = import_echo_schema2.S.Struct({
|
|
99
|
-
kind: import_echo_schema2.S.Literal("function"),
|
|
100
|
-
fn: (0, import_echo_schema2.Ref)(import_functions.FunctionType)
|
|
101
|
-
});
|
|
102
|
-
var ServiceInterfaceWorkflow = import_echo_schema2.S.Struct({
|
|
103
|
-
kind: import_echo_schema2.S.Literal("workflow"),
|
|
104
|
-
workflow: (0, import_echo_schema2.Ref)(import_conductor.ComputeGraph)
|
|
105
|
-
});
|
|
106
|
-
var ServiceInterfaceApi = import_echo_schema2.S.Struct({
|
|
107
|
-
kind: import_echo_schema2.S.Literal("api"),
|
|
108
|
-
/**
|
|
109
|
-
* URL to fetch the openapi schema.
|
|
110
|
-
*/
|
|
111
|
-
schemaUrl: import_echo_schema2.S.optional(import_echo_schema2.S.String),
|
|
112
|
-
/**
|
|
113
|
-
* Inlined openapi schema.
|
|
114
|
-
*/
|
|
115
|
-
schema: import_echo_schema2.S.optional(import_echo_schema2.S.Any),
|
|
116
|
-
/**
|
|
117
|
-
* Authorization configuration if required.
|
|
118
|
-
*/
|
|
119
|
-
authorization: import_echo_schema2.S.optional(ApiAuthorization)
|
|
120
|
-
});
|
|
121
|
-
var ServiceInterface = import_echo_schema2.S.Union(ServiceInterfaceFunction, ServiceInterfaceWorkflow, ServiceInterfaceApi);
|
|
122
|
-
var ServiceType = import_echo_schema2.S.Struct({
|
|
123
|
-
serviceId: import_echo_schema2.S.String,
|
|
124
|
-
name: import_echo_schema2.S.optional(import_echo_schema2.S.String),
|
|
125
|
-
description: import_echo_schema2.S.optional(import_echo_schema2.S.String),
|
|
126
|
-
enabled: import_echo_schema2.S.optional(import_echo_schema2.S.Boolean),
|
|
127
|
-
/**
|
|
128
|
-
* Entries exposed: functions, workflows, and APIs.
|
|
129
|
-
*/
|
|
130
|
-
interfaces: import_echo_schema2.S.optional(import_echo_schema2.S.Array(ServiceInterface))
|
|
131
|
-
}).pipe((0, import_echo_schema2.EchoObject)("dxos.org/type/Service", "0.1.0"));
|
|
132
|
-
var MockServiceRegistry = class {
|
|
133
|
-
async queryServices(query) {
|
|
134
|
-
return TEST_SERVICES;
|
|
135
|
-
}
|
|
136
|
-
};
|
|
137
|
-
var AMADEUS_AUTH = {
|
|
138
|
-
type: "oauth",
|
|
139
|
-
clientId: "BOEnpLd1sMyKjAPGKYeAPFFy60u53QEG",
|
|
140
|
-
clientSecret: "n4qldSN7usvD57gm",
|
|
141
|
-
tokenUrl: "https://test.api.amadeus.com/v1/security/oauth2/token",
|
|
142
|
-
grantType: "client_credentials"
|
|
143
|
-
};
|
|
144
|
-
var VISUAL_CROSSING_CREDENTIALS = {
|
|
145
|
-
type: "api-key",
|
|
146
|
-
key: "FDPRVS953KB4GQQLD25GRT975",
|
|
147
|
-
placement: {
|
|
148
|
-
type: "query",
|
|
149
|
-
name: "key"
|
|
150
|
-
}
|
|
151
|
-
};
|
|
152
|
-
var TEST_SERVICES = [
|
|
153
|
-
/**
|
|
154
|
-
* dxn:service:example.com/service/FlightSearch
|
|
155
|
-
*/
|
|
156
|
-
(0, import_echo_schema.createStatic)(ServiceType, {
|
|
157
|
-
serviceId: "example.com/service/FlightSearch",
|
|
158
|
-
name: "Amadeus Flight Search",
|
|
159
|
-
description: "Search for local and international flights.",
|
|
160
|
-
interfaces: [
|
|
161
|
-
{
|
|
162
|
-
kind: "api",
|
|
163
|
-
schemaUrl: "https://api.apis.guru/v2/specs/amadeus.com/amadeus-flight-availabilities-search/1.0.2/swagger.json",
|
|
164
|
-
authorization: AMADEUS_AUTH
|
|
165
|
-
}
|
|
166
|
-
]
|
|
167
|
-
}),
|
|
168
|
-
/**
|
|
169
|
-
* dxn:service:example.com/service/HotelSearch
|
|
170
|
-
*/
|
|
171
|
-
// TODO(burdon): Not working.
|
|
172
|
-
(0, import_echo_schema.createStatic)(ServiceType, {
|
|
173
|
-
serviceId: "example.com/service/HotelSearch",
|
|
174
|
-
name: "Amadeus Hotel Search",
|
|
175
|
-
description: "Search for local and international hotels.",
|
|
176
|
-
interfaces: [
|
|
177
|
-
{
|
|
178
|
-
kind: "api",
|
|
179
|
-
schemaUrl: "https://api.apis.guru/v2/specs/amadeus.com/amadeus-hotel-search/3.0.8/swagger.json",
|
|
180
|
-
authorization: AMADEUS_AUTH
|
|
181
|
-
}
|
|
182
|
-
]
|
|
183
|
-
}),
|
|
184
|
-
/**
|
|
185
|
-
* dxn:service:example.com/service/Weather
|
|
186
|
-
*/
|
|
187
|
-
(0, import_echo_schema.createStatic)(ServiceType, {
|
|
188
|
-
serviceId: "example.com/service/Weather",
|
|
189
|
-
name: "Visual Crossing Weather",
|
|
190
|
-
description: "Search for global weather forecasts.",
|
|
191
|
-
interfaces: [
|
|
192
|
-
{
|
|
193
|
-
kind: "api",
|
|
194
|
-
schemaUrl: "https://api.apis.guru/v2/specs/visualcrossing.com/weather/4.6/openapi.json",
|
|
195
|
-
authorization: VISUAL_CROSSING_CREDENTIALS
|
|
196
|
-
}
|
|
197
|
-
]
|
|
198
|
-
})
|
|
199
|
-
];
|
|
200
|
-
var AutomationAction;
|
|
201
|
-
(function(AutomationAction2) {
|
|
202
|
-
const AUTOMATION_ACTION = `${import_chunk_5VF5JKUN.AUTOMATION_PLUGIN}/action`;
|
|
203
|
-
class Create extends import_echo_schema3.S.TaggedClass()(`${AUTOMATION_ACTION}/create`, {
|
|
204
|
-
input: import_echo_schema3.S.Struct({
|
|
205
|
-
name: import_echo_schema3.S.optional(import_echo_schema3.S.String)
|
|
206
|
-
}),
|
|
207
|
-
output: import_echo_schema3.S.Struct({
|
|
208
|
-
object: AIChatType
|
|
209
|
-
})
|
|
210
|
-
}) {
|
|
211
|
-
}
|
|
212
|
-
AutomationAction2.Create = Create;
|
|
213
|
-
})(AutomationAction || (AutomationAction = {}));
|
|
214
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
215
|
-
0 && (module.exports = {
|
|
216
|
-
AIChatType,
|
|
217
|
-
ApiAuthorization,
|
|
218
|
-
AutomationAction,
|
|
219
|
-
ChainInputSchema,
|
|
220
|
-
ChainInputType,
|
|
221
|
-
ChainPromptType,
|
|
222
|
-
ChainType,
|
|
223
|
-
MockServiceRegistry,
|
|
224
|
-
ServiceType
|
|
225
|
-
});
|
|
226
|
-
//# sourceMappingURL=chunk-LU4HQWJD.cjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/types/registry.ts", "../../../src/types/schema.ts", "../../../src/types/types.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { createStatic } from '@dxos/echo-schema';\n\nimport { type ApiAuthorization, ServiceType } from './schema';\n\nexport type ServiceQuery = {};\n\nexport interface BaseServiceRegistry {\n queryServices(query: ServiceQuery): Promise<ServiceType[]>;\n}\n\nexport class MockServiceRegistry implements BaseServiceRegistry {\n async queryServices(query: ServiceQuery): Promise<ServiceType[]> {\n return TEST_SERVICES;\n }\n}\n\n// TODO(burdon): Can we generalize credentials?\n\nconst AMADEUS_AUTH: ApiAuthorization = {\n type: 'oauth',\n clientId: 'BOEnpLd1sMyKjAPGKYeAPFFy60u53QEG',\n clientSecret: 'n4qldSN7usvD57gm',\n tokenUrl: 'https://test.api.amadeus.com/v1/security/oauth2/token',\n grantType: 'client_credentials',\n};\n\nconst VISUAL_CROSSING_CREDENTIALS: ApiAuthorization = {\n type: 'api-key',\n key: 'FDPRVS953KB4GQQLD25GRT975',\n placement: {\n type: 'query',\n name: 'key',\n },\n};\n\nconst TEST_SERVICES: ServiceType[] = [\n /**\n * dxn:service:example.com/service/FlightSearch\n */\n createStatic(ServiceType, {\n serviceId: 'example.com/service/FlightSearch',\n name: 'Amadeus Flight Search',\n description: 'Search for local and international flights.',\n interfaces: [\n {\n kind: 'api',\n schemaUrl: 'https://api.apis.guru/v2/specs/amadeus.com/amadeus-flight-availabilities-search/1.0.2/swagger.json',\n authorization: AMADEUS_AUTH,\n },\n ],\n }),\n\n /**\n * dxn:service:example.com/service/HotelSearch\n */\n // TODO(burdon): Not working.\n createStatic(ServiceType, {\n serviceId: 'example.com/service/HotelSearch',\n name: 'Amadeus Hotel Search',\n description: 'Search for local and international hotels.',\n interfaces: [\n {\n kind: 'api',\n schemaUrl: 'https://api.apis.guru/v2/specs/amadeus.com/amadeus-hotel-search/3.0.8/swagger.json',\n authorization: AMADEUS_AUTH,\n },\n ],\n }),\n\n /**\n * dxn:service:example.com/service/Weather\n */\n createStatic(ServiceType, {\n serviceId: 'example.com/service/Weather',\n name: 'Visual Crossing Weather',\n description: 'Search for global weather forecasts.',\n interfaces: [\n {\n kind: 'api',\n schemaUrl: 'https://api.apis.guru/v2/specs/visualcrossing.com/weather/4.6/openapi.json',\n authorization: VISUAL_CROSSING_CREDENTIALS,\n },\n ],\n }),\n] as const;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { ComputeGraph } from '@dxos/conductor';\nimport { Expando, Ref, S, TypedObject, type Ref$, EchoObject } from '@dxos/echo-schema';\nimport { FunctionType } from '@dxos/functions';\n\n// TODO(burdon): Change to S.Literal (and discriminated union).\nexport enum ChainInputType {\n VALUE = 0,\n PASS_THROUGH = 1,\n RETRIEVER = 2,\n FUNCTION = 3,\n QUERY = 4,\n RESOLVER = 5,\n CONTEXT = 6,\n SCHEMA = 7,\n}\n\nexport const ChainInputSchema = S.mutable(\n S.Struct({\n name: S.String,\n type: S.optional(S.Enums(ChainInputType)),\n value: S.optional(S.String),\n }),\n);\n\nexport type ChainInput = S.Schema.Type<typeof ChainInputSchema>;\n\nexport class ChainPromptType extends TypedObject({ typename: 'dxos.org/type/ChainPrompt', version: '0.1.0' })({\n command: S.optional(S.String),\n template: S.String,\n inputs: S.optional(S.mutable(S.Array(ChainInputSchema))),\n}) {}\n\nexport class ChainType extends TypedObject({ typename: 'dxos.org/type/Chain', version: '0.1.0' })({\n name: S.optional(S.String),\n prompts: S.optional(S.mutable(S.Array(Ref(ChainPromptType)))),\n}) {}\n\nexport class AIChatType extends TypedObject({ typename: 'dxos.org/type/AIChat', version: '0.1.0' })({\n name: S.optional(S.String),\n // TODO(wittjosiah): Should be a ref to a Queue.\n queue: Ref(Expando),\n}) {}\n\nconst ApiAuthorizationKey = S.Struct({\n type: S.Literal('api-key'),\n key: S.String,\n placement: S.Union(\n S.Struct({\n type: S.Literal('authorization-header'),\n }),\n S.Struct({\n type: S.Literal('query'),\n name: S.String,\n }),\n ),\n});\n\nconst ApiAuthorizationOauth = S.Struct({\n type: S.Literal('oauth'),\n clientId: S.String,\n clientSecret: S.String,\n tokenUrl: S.String,\n grantType: S.String,\n});\n\nexport const ApiAuthorization = S.Union(ApiAuthorizationKey, ApiAuthorizationOauth);\nexport type ApiAuthorization = S.Schema.Type<typeof ApiAuthorization>;\n\nconst ServiceInterfaceFunction = S.Struct({\n kind: S.Literal('function'),\n fn: Ref(FunctionType) as Ref$<FunctionType>,\n});\n\nconst ServiceInterfaceWorkflow = S.Struct({\n kind: S.Literal('workflow'),\n workflow: Ref(ComputeGraph) as Ref$<ComputeGraph>,\n});\n\nconst ServiceInterfaceApi = S.Struct({\n kind: S.Literal('api'),\n\n /**\n * URL to fetch the openapi schema.\n */\n schemaUrl: S.optional(S.String),\n\n /**\n * Inlined openapi schema.\n */\n schema: S.optional(S.Any),\n\n /**\n * Authorization configuration if required.\n */\n authorization: S.optional(ApiAuthorization),\n});\n\nconst ServiceInterface = S.Union(ServiceInterfaceFunction, ServiceInterfaceWorkflow, ServiceInterfaceApi);\nexport type ServiceInterface = S.Schema.Type<typeof ServiceInterface>;\n\nexport const ServiceType = S.Struct({\n serviceId: S.String,\n\n name: S.optional(S.String),\n description: S.optional(S.String),\n\n enabled: S.optional(S.Boolean),\n\n /**\n * Entries exposed: functions, workflows, and APIs.\n */\n interfaces: S.optional(S.Array(ServiceInterface)),\n}).pipe(EchoObject('dxos.org/type/Service', '0.1.0'));\n// dxn:type:dxos.org/type/Service\n\nexport type ServiceType = S.Schema.Type<typeof ServiceType>;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { S } from '@dxos/echo-schema';\n\nimport { AIChatType } from './schema';\nimport { AUTOMATION_PLUGIN } from '../meta';\n\nexport namespace AutomationAction {\n const AUTOMATION_ACTION = `${AUTOMATION_PLUGIN}/action`;\n\n export class Create extends S.TaggedClass<Create>()(`${AUTOMATION_ACTION}/create`, {\n input: S.Struct({\n name: S.optional(S.String),\n }),\n output: S.Struct({\n object: AIChatType,\n }),\n }) {}\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["import_echo_schema", "ChainInputType", "ChainInputSchema", "S", "mutable", "Struct", "name", "String", "type", "optional", "Enums", "value", "ChainPromptType", "TypedObject", "typename", "version", "command", "template", "inputs", "Array", "ChainType", "prompts", "Ref", "AIChatType", "queue", "Expando", "ApiAuthorizationKey", "Literal", "key", "placement", "Union", "ApiAuthorizationOauth", "clientId", "clientSecret", "tokenUrl", "grantType", "ApiAuthorization", "ServiceInterfaceFunction", "kind", "fn", "FunctionType", "ServiceInterfaceWorkflow", "workflow", "ComputeGraph", "ServiceInterfaceApi", "schemaUrl", "schema", "Any", "authorization", "ServiceInterface", "ServiceType", "serviceId", "description", "enabled", "Boolean", "interfaces", "pipe", "EchoObject", "MockServiceRegistry", "queryServices", "query", "TEST_SERVICES", "AMADEUS_AUTH", "VISUAL_CROSSING_CREDENTIALS", "createStatic", "AutomationAction", "AUTOMATION_ACTION", "AUTOMATION_PLUGIN", "Create", "TaggedClass", "input", "output", "object"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/components/AutomationPanel/AutomationPanel.tsx", "../../../src/components/TriggerEditor/TriggerEditor.tsx", "../../../src/components/AutomationPanel/index.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useState } from 'react';\n\nimport { S } from '@dxos/echo-schema';\nimport {\n FunctionType,\n FunctionTrigger,\n FunctionTriggerSchema,\n TriggerKind,\n type FunctionTriggerType,\n ScriptType,\n} from '@dxos/functions';\nimport { type Client, useClient } from '@dxos/react-client';\nimport { create, Filter, useQuery, type Space, type ReactiveObject, getSpace } from '@dxos/react-client/echo';\nimport { IconButton, Input, useTranslation, Button } from '@dxos/react-ui';\nimport { List } from '@dxos/react-ui-list';\nimport { ghostHover, mx } from '@dxos/react-ui-theme';\n\nimport { AUTOMATION_PLUGIN } from '../../meta';\nimport { TriggerEditor, type TriggerEditorProps } from '../TriggerEditor';\n\nconst grid = 'grid grid-cols-[40px_1fr_32px] min-bs-[2.5rem]';\n\nexport type AutomationPanelProps = {\n space: Space;\n object?: ReactiveObject<any>;\n};\n\n// TODO(burdon): Factor out common layout with ViewEditor.\nexport const AutomationPanel = ({ space, object }: AutomationPanelProps) => {\n const { t } = useTranslation(AUTOMATION_PLUGIN);\n const client = useClient();\n const triggers = useQuery(space, Filter.schema(FunctionTrigger));\n const functions = useQuery(space, Filter.schema(FunctionType));\n const scripts = useQuery(space, Filter.schema(ScriptType));\n\n const [trigger, setTrigger] = useState<FunctionTriggerType>();\n const [selected, setSelected] = useState<FunctionTrigger>();\n\n const handleSelect = (trigger: FunctionTrigger) => {\n const { id: _, ...values } = trigger;\n setTrigger(values);\n setSelected(trigger);\n };\n\n const handleAdd = () => {\n setTrigger(create(FunctionTriggerSchema, { meta: {} }));\n setSelected(undefined);\n };\n\n const handleDelete = (trigger: FunctionTrigger) => {\n space.db.remove(trigger);\n setTrigger(undefined);\n setSelected(undefined);\n };\n\n const handleSave: TriggerEditorProps['onSave'] = (trigger) => {\n if (selected) {\n Object.assign(selected, trigger);\n } else {\n space.db.add(create(FunctionTrigger, trigger));\n }\n\n setTrigger(undefined);\n setSelected(undefined);\n };\n\n const handleCancel: TriggerEditorProps['onCancel'] = () => {\n setTrigger(undefined);\n };\n\n return (\n <div className='flex flex-col w-full divide-y divide-separator overflow-y-auto'>\n <List.Root<FunctionTrigger> items={triggers} isItem={S.is(FunctionTrigger)} getId={(field) => field.id}>\n {({ items: triggers }) => (\n <div role='list' className='flex flex-col w-full'>\n {triggers?.map((trigger) => {\n const copyAction = getCopyAction(client, trigger);\n return (\n <List.Item<FunctionTrigger>\n key={trigger.id}\n item={trigger}\n classNames={mx(grid, ghostHover, 'items-center', 'px-2')}\n >\n <Input.Root>\n <Input.Switch\n checked={trigger.enabled}\n onCheckedChange={(checked) => (trigger.enabled = checked)}\n />\n </Input.Root>\n\n <div className={'flex'}>\n <List.ItemTitle\n classNames='px-1 cursor-pointer w-0 shrink truncate'\n onClick={() => handleSelect(trigger)}\n >\n {getFunctionName(scripts, functions, trigger) ?? '∅'}\n </List.ItemTitle>\n\n {/* TODO: a better way to expose copy action */}\n {copyAction && (\n <Button onClick={() => navigator.clipboard.writeText(copyAction.contentProvider())}>\n {t(copyAction.translationKey)}\n </Button>\n )}\n </div>\n\n <List.ItemDeleteButton onClick={() => handleDelete(trigger)} />\n </List.Item>\n );\n })}\n </div>\n )}\n </List.Root>\n\n {trigger && <TriggerEditor space={space} trigger={trigger} onSave={handleSave} onCancel={handleCancel} />}\n\n {!trigger && (\n <div className='flex p-2 justify-center'>\n <IconButton icon='ph--plus--regular' label={t('new trigger')} onClick={handleAdd} />\n </div>\n )}\n </div>\n );\n};\n\nconst getCopyAction = (client: Client, trigger: FunctionTrigger | undefined) => {\n if (trigger?.spec?.type === TriggerKind.Email) {\n return { translationKey: 'trigger copy email', contentProvider: () => `${getSpace(trigger)!.id}@dxos.network` };\n }\n\n if (trigger?.spec?.type === TriggerKind.Webhook) {\n return { translationKey: 'trigger copy url', contentProvider: () => getWebhookUrl(client, trigger) };\n }\n\n return undefined;\n};\n\nconst getWebhookUrl = (client: Client, trigger: FunctionTrigger) => {\n const spaceId = getSpace(trigger)!.id;\n const edgeUrl = new URL(client.config.values.runtime!.services!.edge!.url!);\n const isSecure = edgeUrl.protocol.startsWith('https') || edgeUrl.protocol.startsWith('wss');\n edgeUrl.protocol = isSecure ? 'https' : 'http';\n return new URL(`/webhook/${spaceId}:${trigger.id}`, edgeUrl).toString();\n};\n\nconst getFunctionName = (scripts: ScriptType[], functions: FunctionType[], trigger: FunctionTriggerType) => {\n const shortId = trigger.function && `${trigger.function?.slice(0, 16)}…`;\n const functionObject = functions.find((fn) => fn.name === trigger.function);\n if (!functionObject) {\n return shortId;\n }\n return scripts.find((s) => functionObject.source?.target?.id === s.id)?.name ?? shortId;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useState } from 'react';\n\nimport { ComputeGraph } from '@dxos/conductor';\nimport {\n FunctionType,\n FunctionTriggerSchema,\n type FunctionTriggerType,\n type FunctionTrigger,\n ScriptType,\n TriggerKind,\n} from '@dxos/functions';\nimport { Filter, useQuery, type Space } from '@dxos/react-client/echo';\nimport { IconButton, Input, useTranslation } from '@dxos/react-ui';\nimport { Form, SelectInput, TextInput } from '@dxos/react-ui-form';\n\nimport { AUTOMATION_PLUGIN } from '../../meta';\n\nexport type TriggerEditorProps = {\n space: Space;\n trigger: FunctionTriggerType;\n onSave?: (trigger: Omit<FunctionTrigger, 'id'>) => void;\n onCancel?: () => void;\n};\n\nexport const TriggerEditor = ({ space, trigger, onSave, onCancel }: TriggerEditorProps) => {\n const { t } = useTranslation(AUTOMATION_PLUGIN);\n\n const functions = useQuery(space, Filter.schema(FunctionType));\n const workflows = useQuery(space, Filter.schema(ComputeGraph));\n const scripts = useQuery(space, Filter.schema(ScriptType));\n\n const handleSave = (values: FunctionTriggerType) => {\n onSave?.(values);\n };\n\n return (\n <Form<FunctionTriggerType>\n schema={FunctionTriggerSchema}\n values={trigger}\n onSave={handleSave}\n onCancel={onCancel}\n Custom={{\n ['function' satisfies keyof FunctionTriggerType]: (props) => (\n <SelectInput\n {...props}\n options={getWorkflowOptions(workflows).concat(getFunctionOptions(scripts, functions))}\n />\n ),\n ['spec.type' as const]: (props) => (\n <SelectInput\n {...props}\n options={Object.values(TriggerKind).map((kind) => ({\n value: kind,\n label: t(`trigger type ${kind}`),\n }))}\n />\n ),\n ['meta' as const]: (props) => {\n const meta = props.getValue()!;\n\n const [newMetaFieldName, setNewMetaFieldName] = useState('');\n\n React.useEffect(() => props.onValueChange('object', { ...meta }), []);\n\n return (\n <>\n <div>{props.label}</div>\n {[...Object.keys(meta)].map((key) => {\n const compositeKey: any = `meta.${key}`;\n return (\n <div key={compositeKey} role='none' className='flex items-center mt-2 gap-1'>\n <div role='none' className='flex-1'>\n <TextInput {...props} type={'string'} label={key} />\n </div>\n <IconButton\n icon='ph--trash--regular'\n iconOnly\n classNames={'mt-6'}\n label={t('trigger meta remove')}\n onClick={() => {\n const newValues: any = { ...props.getValue() };\n delete newValues[key];\n props.onValueChange('object', newValues);\n }}\n />\n </div>\n );\n })}\n <div role='none' className='flex items-center mt-2 gap-1 plb-1'>\n <div role='none' className='flex-1'>\n <Input.Root>\n <Input.TextInput\n placeholder={t('trigger meta prop name placeholder')}\n value={newMetaFieldName}\n onChange={(event) => setNewMetaFieldName(event.target.value)}\n />\n </Input.Root>\n </div>\n <IconButton\n icon='ph--plus--regular'\n iconOnly\n label={t('trigger meta add')}\n onClick={() => {\n if (newMetaFieldName.length) {\n const meta = props.getValue() ?? {};\n const metaWithNewProp = { ...meta, [newMetaFieldName]: '' };\n setNewMetaFieldName('');\n props.onValueChange('object', metaWithNewProp);\n }\n }}\n />\n </div>\n </>\n );\n },\n }}\n />\n );\n};\n\nconst getWorkflowOptions = (graphs: ComputeGraph[]) => {\n return graphs.map((graph) => ({ label: `compute-${graph.id}`, value: `dxn:echo:@:${graph.id}` }));\n};\n\nconst getFunctionOptions = (scripts: ScriptType[], functions: FunctionType[]) => {\n const getLabel = (fn: FunctionType) => scripts.find((s) => fn.source?.target?.id === s.id)?.name ?? fn.name;\n return functions.map((fn) => ({ label: getLabel(fn), value: `dxn:worker:${fn.name}` }));\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { AutomationPanel } from './AutomationPanel';\n\nexport default AutomationPanel;\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["import_react", "import_functions", "import_echo", "import_react_ui", "TriggerEditor", "space", "trigger", "onSave", "onCancel", "t", "useTranslation", "AUTOMATION_PLUGIN", "functions", "useQuery", "Filter", "schema", "FunctionType", "workflows", "ComputeGraph", "scripts", "ScriptType", "handleSave", "values", "React", "Form", "FunctionTriggerSchema", "Custom", "props", "SelectInput", "options", "getWorkflowOptions", "concat", "getFunctionOptions", "Object", "TriggerKind", "map", "kind", "value", "label", "meta", "getValue", "newMetaFieldName", "setNewMetaFieldName", "useState", "useEffect", "onValueChange", "div", "keys", "key", "compositeKey", "role", "className", "TextInput", "type", "IconButton", "icon", "iconOnly", "classNames", "onClick", "newValues", "Input", "Root", "placeholder", "onChange", "event", "target", "length", "metaWithNewProp", "graphs", "graph", "id", "getLabel", "fn", "find", "s", "source", "name", "grid", "AutomationPanel", "object", "client", "useClient", "triggers", "FunctionTrigger", "setTrigger", "selected", "setSelected", "handleSelect", "_", "handleAdd", "create", "undefined", "handleDelete", "db", "remove", "assign", "add", "handleCancel", "List", "items", "isItem", "S", "is", "getId", "field", "copyAction", "getCopyAction", "Item", "item", "mx", "ghostHover", "Switch", "checked", "enabled", "onCheckedChange", "ItemTitle", "getFunctionName", "Button", "navigator", "clipboard", "writeText", "contentProvider", "translationKey", "ItemDeleteButton", "spec", "Email", "getSpace", "Webhook", "getWebhookUrl", "spaceId", "edgeUrl", "URL", "config", "runtime", "services", "edge", "url", "isSecure", "protocol", "startsWith", "toString", "shortId", "function", "slice", "functionObject"]
|
|
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 { getSpace, isEchoObject, type ReactiveEchoObject } from '@dxos/react-client/echo';\n\nimport { AutomationPanel, ChatContainer, ServiceRegistry } from '../components';\nimport { AUTOMATION_PLUGIN } from '../meta';\nimport { AIChatType } from '../types';\n\nexport default () =>\n contributes(Capabilities.ReactSurface, [\n createSurface({\n id: `${AUTOMATION_PLUGIN}/ai-chat`,\n role: 'article',\n filter: (data): data is { subject: AIChatType } => data.subject instanceof AIChatType,\n component: ({ data, role }) => <ChatContainer role={role} chat={data.subject} />,\n }),\n createSurface({\n id: `${AUTOMATION_PLUGIN}/service-registry`,\n role: 'complementary--service-registry',\n component: ({ data }) => <ServiceRegistry space={getSpace(data.subject)!} />,\n }),\n createSurface({\n id: `${AUTOMATION_PLUGIN}/automation`,\n role: 'complementary--automation',\n filter: (data): data is { subject: ReactiveEchoObject<any> } =>\n isEchoObject(data.subject) && !!getSpace(data.subject),\n component: ({ data }) => <AutomationPanel space={getSpace(data.subject)!} object={data.subject} />,\n }),\n ]);\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,mBAAkB;AAElB,2BAAyD;AACzD,kBAAgE;AAMhE,IAAA,wBAAe,UACbA,kCAAYC,kCAAaC,cAAc;MACrCC,oCAAc;IACZC,IAAI,GAAGC,uCAAAA;IACPC,MAAM;IACNC,QAAQ,CAACC,SAA0CA,KAAKC,mBAAmBC;IAC3EC,WAAW,CAAC,EAAEH,MAAMF,KAAI,MAAO,6BAAAM,QAAA,cAACC,qCAAAA;MAAcP;MAAYQ,MAAMN,KAAKC;;EACvE,CAAA;MACAN,oCAAc;IACZC,IAAI,GAAGC,uCAAAA;IACPC,MAAM;IACNK,WAAW,CAAC,EAAEH,KAAI,MAAO,6BAAAI,QAAA,cAACG,uCAAAA;MAAgBC,WAAOC,sBAAST,KAAKC,OAAO;;EACxE,CAAA;MACAN,oCAAc;IACZC,IAAI,GAAGC,uCAAAA;IACPC,MAAM;IACNC,QAAQ,CAACC,aACPU,0BAAaV,KAAKC,OAAO,KAAK,CAAC,KAACQ,sBAAST,KAAKC,OAAO;IACvDE,WAAW,CAAC,EAAEH,KAAI,MAAO,6BAAAI,QAAA,cAACO,uCAAAA;MAAgBH,WAAOC,sBAAST,KAAKC,OAAO;MAAIW,QAAQZ,KAAKC;;EACzF,CAAA;CACD;",
|
|
6
|
-
"names": ["contributes", "Capabilities", "ReactSurface", "createSurface", "id", "AUTOMATION_PLUGIN", "role", "filter", "data", "subject", "AIChatType", "component", "React", "ChatContainer", "chat", "ServiceRegistry", "space", "getSpace", "isEchoObject", "AutomationPanel", "object"]
|
|
7
|
-
}
|