@dxos/plugin-script 0.12.0-next-73daef452f1464b62efdbca75fb0067c1066f264 → 0.13.0
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/PLUGIN.mdl +93 -17
- package/README.md +1 -1
- package/dist/lib/Notebook.mjs +4 -5
- package/dist/lib/Notebook.mjs.map +1 -1
- package/dist/lib/ScriptCapabilities.mjs.map +1 -1
- package/dist/lib/ScriptOperation.mjs +1 -1
- package/dist/lib/ScriptOperation.mjs.map +1 -1
- package/dist/lib/ScriptOperationHandlerSet.mjs.map +1 -1
- package/dist/lib/ScriptSkill.mjs +1 -1
- package/dist/lib/ScriptSkill.mjs.map +1 -1
- package/dist/lib/capabilities.browser.mjs +51 -0
- package/dist/lib/capabilities.browser.mjs.map +1 -0
- package/dist/lib/capabilities.mjs +17 -7
- package/dist/lib/capabilities.mjs.map +1 -1
- package/dist/lib/capabilities.node.mjs +16 -4
- package/dist/lib/capabilities.node.mjs.map +1 -1
- package/dist/lib/capabilities.tauri.mjs +51 -0
- package/dist/lib/capabilities.tauri.mjs.map +1 -0
- package/dist/lib/capabilities.workerd.mjs +1 -1
- package/dist/lib/capabilities.workerd.mjs.map +1 -1
- package/dist/lib/chunk-DeploymentDialog.mjs +12 -9
- package/dist/lib/chunk-DeploymentDialog.mjs.map +1 -1
- package/dist/lib/chunk-NotebookArticle.mjs +37 -36
- package/dist/lib/chunk-NotebookArticle.mjs.map +1 -1
- package/dist/lib/chunk-PLUGIN.mjs +6 -0
- package/dist/lib/chunk-PLUGIN.mjs.map +1 -0
- package/dist/lib/chunk-ScriptArticle.mjs +14 -15
- package/dist/lib/chunk-ScriptArticle.mjs.map +1 -1
- package/dist/lib/chunk-ScriptProperties.mjs +91 -94
- package/dist/lib/chunk-ScriptProperties.mjs.map +1 -1
- package/dist/lib/chunk-ScriptSettings.mjs +11 -8
- package/dist/lib/chunk-ScriptSettings.mjs.map +1 -1
- package/dist/lib/chunk-TestContainer.mjs +5 -5
- package/dist/lib/chunk-TestContainer.mjs.map +1 -1
- package/dist/lib/chunk-app-graph-builder.mjs +2 -0
- package/dist/lib/chunk-app-graph-builder.mjs.map +1 -1
- package/dist/lib/chunk-compiler.mjs +87 -4
- package/dist/lib/chunk-compiler.mjs.map +1 -1
- package/dist/lib/chunk-create-object.mjs +1 -1
- package/dist/lib/chunk-create-script.mjs.map +1 -1
- package/dist/lib/chunk-create.mjs +4 -4
- package/dist/lib/chunk-create.mjs.map +1 -1
- package/dist/lib/chunk-definitions.mjs +246 -0
- package/dist/lib/chunk-definitions.mjs.map +1 -0
- package/dist/lib/chunk-delete.mjs +2 -2
- package/dist/lib/chunk-delete.mjs.map +1 -1
- package/dist/lib/chunk-deploy.mjs +16 -12
- package/dist/lib/chunk-deploy.mjs.map +1 -1
- package/dist/lib/chunk-errors.mjs +8 -0
- package/dist/lib/chunk-errors.mjs.map +1 -0
- package/dist/lib/chunk-functions.mjs +66 -246
- package/dist/lib/chunk-functions.mjs.map +1 -1
- package/dist/lib/chunk-inspect-invocations.mjs +3 -3
- package/dist/lib/chunk-inspect-invocations.mjs.map +1 -1
- package/dist/lib/chunk-install-function.mjs +11 -11
- package/dist/lib/chunk-install-function.mjs.map +1 -1
- package/dist/lib/chunk-invoke.mjs +6 -6
- package/dist/lib/chunk-invoke.mjs.map +1 -1
- package/dist/lib/chunk-operation-handler.mjs +16 -2
- package/dist/lib/chunk-operation-handler.mjs.map +1 -1
- package/dist/lib/chunk-query-deployed-functions.mjs +5 -6
- package/dist/lib/chunk-query-deployed-functions.mjs.map +1 -1
- package/dist/lib/chunk-react-surface.mjs +14 -10
- package/dist/lib/chunk-react-surface.mjs.map +1 -1
- package/dist/lib/chunk-read.mjs +4 -3
- package/dist/lib/chunk-read.mjs.map +1 -1
- package/dist/lib/chunk-settings.mjs +2 -2
- package/dist/lib/chunk-settings.mjs.map +1 -1
- package/dist/lib/chunk-skill-definition.mjs +1 -1
- package/dist/lib/chunk-templates.mjs +3 -3
- package/dist/lib/chunk-update.mjs +4 -3
- package/dist/lib/chunk-update.mjs.map +1 -1
- package/dist/lib/components.mjs +114 -123
- package/dist/lib/components.mjs.map +1 -1
- package/dist/lib/containers.mjs.map +1 -1
- package/dist/lib/hooks.mjs +96 -16
- package/dist/lib/hooks.mjs.map +1 -1
- package/dist/lib/index.mjs +5 -3
- package/dist/lib/meta.mjs.map +1 -1
- package/dist/lib/ns/ScriptFunction.mjs +12 -0
- package/dist/lib/ns/ScriptFunction.mjs.map +1 -0
- package/dist/lib/ns/Templates.mjs +11 -0
- package/dist/lib/ns/Templates.mjs.map +1 -0
- package/dist/lib/testing.mjs +1 -1
- package/dist/lib/translations.mjs +2 -1
- package/dist/lib/translations.mjs.map +1 -1
- package/dist/types/src/ScriptFunction.d.ts +2 -0
- package/dist/types/src/ScriptFunction.d.ts.map +1 -0
- package/dist/types/src/Templates.d.ts +2 -0
- package/dist/types/src/Templates.d.ts.map +1 -0
- package/dist/types/src/capabilities/ScriptSurfaces.d.ts.map +1 -1
- package/dist/types/src/capabilities/compiler.d.ts +2 -1
- package/dist/types/src/capabilities/compiler.d.ts.map +1 -1
- package/dist/types/src/capabilities/errors.d.ts +33 -0
- package/dist/types/src/capabilities/errors.d.ts.map +1 -0
- package/dist/types/src/capabilities/gen/browser.d.ts +12 -0
- package/dist/types/src/capabilities/gen/browser.d.ts.map +1 -0
- package/dist/types/src/capabilities/gen/node.d.ts.map +1 -1
- package/dist/types/src/capabilities/gen/tauri.d.ts +12 -0
- package/dist/types/src/capabilities/gen/tauri.d.ts.map +1 -0
- package/dist/types/src/capabilities/gen/workerd.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/compiler/index.d.ts +1 -1
- package/dist/types/src/compiler/index.d.ts.map +1 -1
- package/dist/types/src/components/NotebookStack/NotebookCell.d.ts +3 -3
- package/dist/types/src/components/NotebookStack/NotebookCell.d.ts.map +1 -1
- package/dist/types/src/components/NotebookStack/NotebookMenu.d.ts.map +1 -1
- package/dist/types/src/components/NotebookStack/NotebookStack.d.ts +4 -4
- package/dist/types/src/components/NotebookStack/NotebookStack.d.ts.map +1 -1
- package/dist/types/src/components/NotebookStack/NotebookStack.stories.d.ts +10 -0
- package/dist/types/src/components/NotebookStack/NotebookStack.stories.d.ts.map +1 -1
- package/dist/types/src/components/NotebookStack/index.d.ts +2 -2
- package/dist/types/src/components/NotebookStack/index.d.ts.map +1 -1
- package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts +2 -2
- package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts.map +1 -1
- package/dist/types/src/components/ScriptToolbar/ScriptToolbar.stories.d.ts +10 -0
- package/dist/types/src/components/ScriptToolbar/ScriptToolbar.stories.d.ts.map +1 -1
- package/dist/types/src/components/ScriptToolbar/index.d.ts +1 -1
- package/dist/types/src/components/ScriptToolbar/index.d.ts.map +1 -1
- package/dist/types/src/components/TestPanel/TestPanel.d.ts +2 -2
- package/dist/types/src/components/TestPanel/TestPanel.d.ts.map +1 -1
- package/dist/types/src/components/TestPanel/index.d.ts +1 -1
- package/dist/types/src/components/TestPanel/index.d.ts.map +1 -1
- package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts +2 -2
- package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts.map +1 -1
- package/dist/types/src/components/TypescriptEditor/TypescriptEditor.stories.d.ts +1 -1
- package/dist/types/src/components/TypescriptEditor/TypescriptEditor.stories.d.ts.map +1 -1
- package/dist/types/src/components/TypescriptEditor/index.d.ts +1 -1
- package/dist/types/src/components/TypescriptEditor/index.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +4 -5
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/containers/DeploymentDialog/DeploymentDialog.d.ts +1 -1
- package/dist/types/src/containers/DeploymentDialog/DeploymentDialog.d.ts.map +1 -1
- package/dist/types/src/containers/DeploymentDialog/DeploymentDialog.stories.d.ts +10 -0
- package/dist/types/src/containers/DeploymentDialog/DeploymentDialog.stories.d.ts.map +1 -1
- package/dist/types/src/containers/DeploymentDialog/index.d.ts +1 -1
- package/dist/types/src/containers/DeploymentDialog/index.d.ts.map +1 -1
- package/dist/types/src/containers/NotebookArticle/NotebookArticle.d.ts +1 -1
- package/dist/types/src/containers/NotebookArticle/NotebookArticle.d.ts.map +1 -1
- package/dist/types/src/containers/NotebookArticle/NotebookArticle.stories.d.ts +1 -1
- package/dist/types/src/containers/NotebookArticle/NotebookArticle.stories.d.ts.map +1 -1
- package/dist/types/src/containers/NotebookArticle/index.d.ts +1 -1
- package/dist/types/src/containers/NotebookArticle/index.d.ts.map +1 -1
- package/dist/types/src/containers/ScriptArticle/ScriptArticle.d.ts +1 -1
- package/dist/types/src/containers/ScriptArticle/ScriptArticle.d.ts.map +1 -1
- package/dist/types/src/containers/ScriptArticle/ScriptArticle.stories.d.ts +10 -0
- package/dist/types/src/containers/ScriptArticle/ScriptArticle.stories.d.ts.map +1 -1
- package/dist/types/src/containers/ScriptArticle/index.d.ts +1 -1
- package/dist/types/src/containers/ScriptArticle/index.d.ts.map +1 -1
- package/dist/types/src/containers/ScriptProperties/FunctionBinding.d.ts.map +1 -1
- package/dist/types/src/containers/ScriptProperties/FunctionPublishing.d.ts.map +1 -1
- package/dist/types/src/containers/ScriptProperties/ScriptProperties.d.ts +1 -1
- package/dist/types/src/containers/ScriptProperties/ScriptProperties.d.ts.map +1 -1
- package/dist/types/src/containers/ScriptProperties/ScriptProperties.stories.d.ts +10 -0
- package/dist/types/src/containers/ScriptProperties/ScriptProperties.stories.d.ts.map +1 -1
- package/dist/types/src/containers/ScriptProperties/SkillEditor.d.ts.map +1 -1
- package/dist/types/src/containers/ScriptProperties/index.d.ts +1 -1
- package/dist/types/src/containers/ScriptProperties/index.d.ts.map +1 -1
- package/dist/types/src/containers/ScriptSettings/ScriptSettings.d.ts +2 -2
- package/dist/types/src/containers/ScriptSettings/ScriptSettings.d.ts.map +1 -1
- package/dist/types/src/containers/ScriptSettings/ScriptSettings.stories.d.ts +11 -1
- package/dist/types/src/containers/ScriptSettings/ScriptSettings.stories.d.ts.map +1 -1
- package/dist/types/src/containers/ScriptSettings/index.d.ts +1 -1
- package/dist/types/src/containers/ScriptSettings/index.d.ts.map +1 -1
- package/dist/types/src/containers/TestContainer/index.d.ts +1 -1
- package/dist/types/src/containers/TestContainer/index.d.ts.map +1 -1
- package/dist/types/src/containers/index.d.ts.map +1 -1
- package/dist/types/src/hooks/deploy.d.ts +3 -3
- package/dist/types/src/hooks/deploy.d.ts.map +1 -1
- package/dist/types/src/hooks/index.d.ts +6 -6
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useCompiler.d.ts +1 -1
- package/dist/types/src/hooks/useCompiler.d.ts.map +1 -1
- package/dist/types/src/hooks/useCreateAndDeployScriptTemplates.d.ts +1 -1
- package/dist/types/src/hooks/useCreateAndDeployScriptTemplates.d.ts.map +1 -1
- package/dist/types/src/hooks/useToolbarState.d.ts +2 -2
- package/dist/types/src/hooks/useToolbarState.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +5 -3
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/notebook/compute-graph.d.ts +3 -3
- package/dist/types/src/notebook/compute-graph.d.ts.map +1 -1
- package/dist/types/src/notebook/index.d.ts +1 -1
- package/dist/types/src/notebook/index.d.ts.map +1 -1
- package/dist/types/src/operations/ScriptOperationHandlerSet.d.ts.map +1 -1
- package/dist/types/src/operations/index.d.ts +1 -1
- package/dist/types/src/operations/index.d.ts.map +1 -1
- package/dist/types/src/skills/ScriptSkill.d.ts.map +1 -1
- package/dist/types/src/skills/functions/definitions.d.ts +8 -6
- package/dist/types/src/skills/functions/definitions.d.ts.map +1 -1
- package/dist/types/src/skills/functions/deploy.d.ts +4 -2
- package/dist/types/src/skills/functions/deploy.d.ts.map +1 -1
- package/dist/types/src/skills/functions/errors.d.ts +33 -0
- package/dist/types/src/skills/functions/errors.d.ts.map +1 -0
- package/dist/types/src/skills/functions/index.d.ts +1 -1
- package/dist/types/src/skills/functions/index.d.ts.map +1 -1
- package/dist/types/src/skills/functions/install-function.d.ts +3 -2
- package/dist/types/src/skills/functions/install-function.d.ts.map +1 -1
- package/dist/types/src/skills/functions/invoke.d.ts +2 -2
- package/dist/types/src/skills/functions/invoke.d.ts.map +1 -1
- package/dist/types/src/skills/functions/query-deployed-functions.d.ts +2 -2
- package/dist/types/src/skills/functions/query-deployed-functions.d.ts.map +1 -1
- package/dist/types/src/skills/index.d.ts +1 -1
- package/dist/types/src/skills/index.d.ts.map +1 -1
- package/dist/types/src/templates/forex-effect.d.ts.map +1 -1
- package/dist/types/src/testing/index.d.ts +2 -2
- package/dist/types/src/testing/index.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +10 -0
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/Notebook.d.ts.map +1 -1
- package/dist/types/src/types/ScriptCapabilities.d.ts +3 -3
- package/dist/types/src/types/ScriptCapabilities.d.ts.map +1 -1
- package/dist/types/src/types/index.d.ts +5 -5
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/util/deploy.d.ts +6 -3
- package/dist/types/src/util/deploy.d.ts.map +1 -1
- package/dist/types/src/util/functions.d.ts +1 -1
- package/dist/types/src/util/functions.d.ts.map +1 -1
- package/dist/types/src/util/index.d.ts +2 -2
- package/dist/types/src/util/index.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +106 -96
- package/src/ScriptFunction.ts +7 -0
- package/src/Templates.ts +7 -0
- package/src/capabilities/ScriptSurfaces.tsx +19 -10
- package/src/capabilities/app-graph-builder.ts +2 -0
- package/src/capabilities/compiler.ts +6 -5
- package/src/capabilities/errors.ts +8 -0
- package/src/capabilities/gen/browser.ts +62 -0
- package/src/capabilities/gen/node.ts +10 -10
- package/src/capabilities/gen/tauri.ts +62 -0
- package/src/capabilities/gen/workerd.ts +4 -4
- package/src/capabilities/index.ts +11 -11
- package/src/capabilities/operation-handler.ts +1 -1
- package/src/capabilities/react-surface.ts +4 -4
- package/src/capabilities/settings.ts +2 -2
- package/src/compiler/compiler.browser.test.ts +1 -1
- package/src/compiler/index.ts +1 -1
- package/src/components/NotebookStack/NotebookCell.tsx +35 -29
- package/src/components/NotebookStack/NotebookMenu.tsx +27 -26
- package/src/components/NotebookStack/NotebookStack.stories.tsx +3 -3
- package/src/components/NotebookStack/NotebookStack.tsx +20 -17
- package/src/components/NotebookStack/index.ts +2 -2
- package/src/components/ScriptToolbar/ScriptToolbar.stories.tsx +5 -5
- package/src/components/ScriptToolbar/ScriptToolbar.tsx +14 -15
- package/src/components/ScriptToolbar/index.ts +1 -1
- package/src/components/TestPanel/TestPanel.tsx +29 -23
- package/src/components/TestPanel/index.ts +1 -1
- package/src/components/TypescriptEditor/TypescriptEditor.stories.tsx +10 -8
- package/src/components/TypescriptEditor/TypescriptEditor.tsx +11 -7
- package/src/components/TypescriptEditor/index.ts +1 -1
- package/src/components/index.ts +4 -5
- package/src/containers/DeploymentDialog/DeploymentDialog.stories.tsx +5 -7
- package/src/containers/DeploymentDialog/DeploymentDialog.tsx +18 -15
- package/src/containers/DeploymentDialog/index.ts +1 -1
- package/src/containers/NotebookArticle/NotebookArticle.stories.tsx +6 -6
- package/src/containers/NotebookArticle/NotebookArticle.tsx +25 -21
- package/src/containers/NotebookArticle/index.ts +1 -1
- package/src/containers/ScriptArticle/ScriptArticle.stories.tsx +3 -3
- package/src/containers/ScriptArticle/ScriptArticle.tsx +13 -11
- package/src/containers/ScriptArticle/index.ts +1 -1
- package/src/containers/ScriptProperties/FunctionBinding.tsx +18 -18
- package/src/containers/ScriptProperties/FunctionPublishing.tsx +22 -22
- package/src/containers/ScriptProperties/ScriptProperties.stories.tsx +3 -3
- package/src/containers/ScriptProperties/ScriptProperties.tsx +10 -10
- package/src/containers/ScriptProperties/SkillEditor.tsx +16 -14
- package/src/containers/ScriptProperties/index.ts +1 -1
- package/src/containers/ScriptSettings/ScriptSettings.stories.tsx +1 -1
- package/src/containers/ScriptSettings/ScriptSettings.tsx +16 -11
- package/src/containers/ScriptSettings/index.ts +1 -1
- package/src/containers/TestContainer/TestContainer.tsx +4 -4
- package/src/containers/TestContainer/index.ts +1 -1
- package/src/containers/index.ts +6 -6
- package/src/e2e/ai.test.ts +1 -1
- package/src/hooks/deploy.ts +12 -5
- package/src/hooks/index.ts +6 -6
- package/src/hooks/template.ts +1 -1
- package/src/hooks/useCompiler.ts +8 -7
- package/src/hooks/useCreateAndDeployScriptTemplates.ts +10 -5
- package/src/hooks/useToolbarState.ts +4 -4
- package/src/index.ts +5 -3
- package/src/meta.ts +1 -1
- package/src/notebook/compute-graph.test.ts +2 -2
- package/src/notebook/compute-graph.ts +4 -4
- package/src/notebook/index.ts +1 -1
- package/src/notebook/vfs-parser.test.ts +1 -1
- package/src/notebook/vfs-parser.ts +1 -1
- package/src/operations/ScriptOperationHandlerSet.ts +3 -1
- package/src/operations/create-script.ts +1 -1
- package/src/operations/index.ts +1 -1
- package/src/plugin.test.ts +2 -2
- package/src/skills/ScriptSkill.ts +3 -1
- package/src/skills/functions/create.ts +4 -4
- package/src/skills/functions/definitions.ts +8 -6
- package/src/skills/functions/delete.ts +1 -1
- package/src/skills/functions/deploy.ts +13 -9
- package/src/skills/functions/errors.ts +8 -0
- package/src/skills/functions/index.ts +11 -11
- package/src/skills/functions/inspect-invocations.ts +1 -1
- package/src/skills/functions/install-function.ts +11 -14
- package/src/skills/functions/invoke.ts +5 -5
- package/src/skills/functions/query-deployed-functions.ts +3 -4
- package/src/skills/functions/read.ts +3 -2
- package/src/skills/functions/update.ts +3 -2
- package/src/skills/index.ts +1 -1
- package/src/templates/anthropic.ts +2 -2
- package/src/templates/commentary.ts +1 -1
- package/src/templates/forex-effect.ts +7 -4
- package/src/testing/index.ts +2 -2
- package/src/translations.ts +4 -2
- package/src/types/Notebook.ts +6 -4
- package/src/types/ScriptCapabilities.ts +3 -3
- package/src/types/ScriptOperation.ts +1 -1
- package/src/types/index.ts +5 -5
- package/src/util/deploy.ts +10 -7
- package/src/util/functions.ts +24 -15
- package/src/util/index.ts +2 -2
- package/dist/lib/chunk-compiler2.mjs +0 -76
- package/dist/lib/chunk-compiler2.mjs.map +0 -1
- package/dist/lib/chunk-util.mjs +0 -146
- package/dist/lib/chunk-util.mjs.map +0 -1
- package/dist/types/src/components/QueryEditor/QueryEditor.d.ts +0 -5
- package/dist/types/src/components/QueryEditor/QueryEditor.d.ts.map +0 -1
- package/dist/types/src/components/QueryEditor/QueryEditor.stories.d.ts +0 -14
- package/dist/types/src/components/QueryEditor/QueryEditor.stories.d.ts.map +0 -1
- package/dist/types/src/components/QueryEditor/index.d.ts +0 -2
- package/dist/types/src/components/QueryEditor/index.d.ts.map +0 -1
- package/src/components/QueryEditor/QueryEditor.stories.tsx +0 -91
- package/src/components/QueryEditor/QueryEditor.tsx +0 -50
- package/src/components/QueryEditor/index.ts +0 -5
|
@@ -3,19 +3,22 @@ import { Notebook, ScriptCapabilities } from "#types";
|
|
|
3
3
|
import { meta } from "#meta";
|
|
4
4
|
import { Feed } from "@dxos/echo";
|
|
5
5
|
import "react";
|
|
6
|
-
import { Panel } from "@dxos/react-ui";
|
|
7
6
|
import { jsx } from "react/jsx-runtime";
|
|
8
|
-
import
|
|
9
|
-
import
|
|
7
|
+
import * as Surface from "@dxos/app-framework/Surface";
|
|
8
|
+
import * as AppSurface from "@dxos/app-toolkit/AppSurface";
|
|
9
|
+
import { useResolveRef } from "@dxos/echo-react";
|
|
10
10
|
import { useCompiler } from "#hooks";
|
|
11
|
+
import * as Hooks from "@dxos/app-framework/Hooks";
|
|
11
12
|
import * as Script from "@dxos/compute/Script";
|
|
12
13
|
import * as Capabilities from "@dxos/app-framework/Capabilities";
|
|
13
14
|
import { DXN as DXN$1 } from "@dxos/keys";
|
|
14
15
|
import * as Effect from "effect/Effect";
|
|
15
16
|
import { DeploymentDialog, NotebookArticle, ScriptArticle, ScriptProperties, ScriptSettings, TestContainer } from "#containers";
|
|
17
|
+
import * as SettingsScope from "@dxos/app-toolkit/SettingsScope";
|
|
16
18
|
import { InvocationTraceContainer } from "@dxos/devtools";
|
|
17
|
-
import
|
|
19
|
+
import * as ClientOperation from "@dxos/plugin-client/ClientOperation";
|
|
18
20
|
import { getSpace } from "@dxos/react-client/echo";
|
|
21
|
+
import * as Panel from "@dxos/react-ui/Panel";
|
|
19
22
|
//#region src/constants.ts
|
|
20
23
|
var DEPLOYMENT_DIALOG = DXN$1.make(`${meta.profile.key}.deploymentDialog`);
|
|
21
24
|
//#endregion
|
|
@@ -23,8 +26,8 @@ var DEPLOYMENT_DIALOG = DXN$1.make(`${meta.profile.key}.deploymentDialog`);
|
|
|
23
26
|
var HUB_SERVER_NAME = "hub.dxos.network";
|
|
24
27
|
/** Hub authentication is a write, so it is dispatched as an operation rather than mapped as props. */
|
|
25
28
|
var ScriptSettingsSurface = ({ subject }) => {
|
|
26
|
-
const { settings, updateSettings } = useSettingsState(subject.atom);
|
|
27
|
-
const { invokePromise } = useOperationInvoker();
|
|
29
|
+
const { settings, updateSettings } = Hooks.useSettingsState(subject.atom);
|
|
30
|
+
const { invokePromise } = Hooks.useOperationInvoker();
|
|
28
31
|
const handleAuthenticate = async () => {
|
|
29
32
|
await invokePromise(ClientOperation.GrantServiceAccess, {
|
|
30
33
|
serverName: HUB_SERVER_NAME,
|
|
@@ -34,13 +37,14 @@ var ScriptSettingsSurface = ({ subject }) => {
|
|
|
34
37
|
return /* @__PURE__ */ jsx(ScriptSettings, {
|
|
35
38
|
settings,
|
|
36
39
|
onSettingsChange: updateSettings,
|
|
37
|
-
onAuthenticate: handleAuthenticate
|
|
40
|
+
onAuthenticate: handleAuthenticate,
|
|
41
|
+
scope: /* @__PURE__ */ jsx(SettingsScope.Root, { prefix: subject.prefix })
|
|
38
42
|
});
|
|
39
43
|
};
|
|
40
44
|
/** The compiler environment and settings are ambient, so they are resolved here rather than mapped. */
|
|
41
45
|
var ScriptArticleSurface = ({ role, subject, attendableId }) => {
|
|
42
46
|
const compiler = useCompiler();
|
|
43
|
-
const settings = useAtomCapability(ScriptCapabilities.Settings);
|
|
47
|
+
const settings = Hooks.useAtomCapability(ScriptCapabilities.Settings);
|
|
44
48
|
return /* @__PURE__ */ jsx(ScriptArticle, {
|
|
45
49
|
role,
|
|
46
50
|
subject,
|
|
@@ -61,11 +65,11 @@ var NotebookArticleSurface = ({ role, subject, attendableId }) => {
|
|
|
61
65
|
/** Resolves the space's invocation-trace feed for the selected script. */
|
|
62
66
|
var ScriptLogsSurface = ({ role, script }) => {
|
|
63
67
|
const space = getSpace(script);
|
|
64
|
-
const feed = space?.properties.invocationTraceFeed
|
|
68
|
+
const feed = useResolveRef(space?.properties.invocationTraceFeed);
|
|
65
69
|
const feedDXN = feed ? Feed.getFeedUri(feed) : void 0;
|
|
66
70
|
return /* @__PURE__ */ jsx(Panel.Root, {
|
|
67
71
|
role,
|
|
68
|
-
children: /* @__PURE__ */ jsx(Panel.
|
|
72
|
+
children: /* @__PURE__ */ jsx(Panel.Body, {
|
|
69
73
|
asChild: true,
|
|
70
74
|
children: /* @__PURE__ */ jsx(InvocationTraceContainer, {
|
|
71
75
|
db: space?.db,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk-react-surface.mjs","names":[],"sources":["../../src/constants.ts","../../src/capabilities/ScriptSurfaces.tsx","../../src/capabilities/react-surface.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport { DXN } from '@dxos/keys';\n\nimport { meta } from '#meta';\n\nexport const DEPLOYMENT_DIALOG = DXN.make(`${meta.profile.key}.deploymentDialog`);\n","//\n// Copyright 2025 DXOS.org\n//\n\n// Surface components that cannot be expressed as a `props` mapper, because they call hooks.\n\nimport React from 'react';\n\nimport
|
|
1
|
+
{"version":3,"file":"chunk-react-surface.mjs","names":[],"sources":["../../src/constants.ts","../../src/capabilities/ScriptSurfaces.tsx","../../src/capabilities/react-surface.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport { DXN } from '@dxos/keys';\n\nimport { meta } from '#meta';\n\nexport const DEPLOYMENT_DIALOG = DXN.make(`${meta.profile.key}.deploymentDialog`);\n","//\n// Copyright 2025 DXOS.org\n//\n\n// Surface components that cannot be expressed as a `props` mapper, because they call hooks.\n\nimport React from 'react';\n\nimport * as Hooks from '@dxos/app-framework/Hooks';\nimport type * as AppCapabilities from '@dxos/app-toolkit/AppCapabilities';\nimport * as SettingsScope from '@dxos/app-toolkit/SettingsScope';\nimport type * as Script from '@dxos/compute/Script';\nimport { InvocationTraceContainer } from '@dxos/devtools';\nimport { Feed } from '@dxos/echo';\nimport { useResolveRef } from '@dxos/echo-react';\nimport * as ClientOperation from '@dxos/plugin-client/ClientOperation';\nimport { getSpace } from '@dxos/react-client/echo';\nimport * as Panel from '@dxos/react-ui/Panel';\n\nimport { NotebookArticle, ScriptArticle, ScriptSettings } from '#containers';\nimport { useCompiler } from '#hooks';\nimport { Notebook, ScriptCapabilities, Settings } from '#types';\n\nconst HUB_SERVER_NAME = 'hub.dxos.network';\n\nexport type ScriptSettingsSurfaceProps = {\n subject: AppCapabilities.Settings;\n};\n\n/** Hub authentication is a write, so it is dispatched as an operation rather than mapped as props. */\nexport const ScriptSettingsSurface = ({ subject }: ScriptSettingsSurfaceProps) => {\n const { settings, updateSettings } = Hooks.useSettingsState<Settings.Settings>(subject.atom);\n const { invokePromise } = Hooks.useOperationInvoker();\n // TODO(burdon): Check token.\n const handleAuthenticate = async () => {\n await invokePromise(ClientOperation.GrantServiceAccess, {\n serverName: HUB_SERVER_NAME,\n capabilities: ['composer:beta'],\n });\n };\n\n return (\n <ScriptSettings\n settings={settings}\n onSettingsChange={updateSettings}\n onAuthenticate={handleAuthenticate}\n scope={<SettingsScope.Root prefix={subject.prefix} />}\n />\n );\n};\n\nexport type ScriptArticleSurfaceProps = {\n role: string;\n subject: Script.Script;\n attendableId?: string;\n};\n\n/** The compiler environment and settings are ambient, so they are resolved here rather than mapped. */\nexport const ScriptArticleSurface = ({ role, subject, attendableId }: ScriptArticleSurfaceProps) => {\n const compiler = useCompiler();\n const settings = Hooks.useAtomCapability(ScriptCapabilities.Settings);\n\n return (\n <ScriptArticle\n role={role}\n subject={subject}\n attendableId={attendableId}\n settings={settings}\n env={compiler?.environment}\n />\n );\n};\n\nexport type NotebookArticleSurfaceProps = {\n role: string;\n subject: Notebook.Notebook;\n attendableId?: string;\n};\n\nexport const NotebookArticleSurface = ({ role, subject, attendableId }: NotebookArticleSurfaceProps) => {\n const compiler = useCompiler();\n\n return <NotebookArticle role={role} subject={subject} attendableId={attendableId} env={compiler?.environment} />;\n};\n\nexport type ScriptLogsSurfaceProps = {\n role: string;\n script: Script.Script;\n};\n\n/** Resolves the space's invocation-trace feed for the selected script. */\nexport const ScriptLogsSurface = ({ role, script }: ScriptLogsSurfaceProps) => {\n const space = getSpace(script);\n const feed = useResolveRef(space?.properties.invocationTraceFeed);\n const feedDXN = feed ? Feed.getFeedUri(feed) : undefined;\n\n return (\n <Panel.Root role={role}>\n <Panel.Body asChild>\n <InvocationTraceContainer db={space?.db} feedDXN={feedDXN} target={script} detailAxis='block' />\n </Panel.Body>\n </Panel.Root>\n );\n};\n","//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport { type ComponentProps } from 'react';\n\nimport * as Capabilities from '@dxos/app-framework/Capabilities';\nimport * as Capability from '@dxos/app-framework/Capability';\nimport * as Surface from '@dxos/app-framework/Surface';\nimport * as AppSurface from '@dxos/app-toolkit/AppSurface';\nimport * as Script from '@dxos/compute/Script';\n\nimport { DeploymentDialog, ScriptProperties, TestContainer } from '#containers';\nimport { meta } from '#meta';\nimport { Notebook } from '#types';\n\nimport { DEPLOYMENT_DIALOG } from '../constants.ts';\nimport {\n NotebookArticleSurface,\n ScriptArticleSurface,\n ScriptLogsSurface,\n ScriptSettingsSurface,\n} from './ScriptSurfaces.tsx';\n\nexport default Capability.makeModule(() =>\n Effect.succeed(\n Capability.contribute(Capabilities.ReactSurface, [\n Surface.create({\n id: 'pluginSettings',\n filter: AppSurface.settings(AppSurface.Article, meta.profile.key),\n component: ScriptSettingsSurface,\n props: ({ data: { subject } }) => ({ subject }),\n }),\n Surface.create({\n id: 'script.article',\n // TODO(wittjosiah): Split into multiple surfaces if this filter proves too strict for non-article roles.\n filter: AppSurface.oneOf(\n AppSurface.object(AppSurface.Article, Script.Script),\n AppSurface.object(AppSurface.Section, Script.Script),\n ),\n component: ScriptArticleSurface,\n props: ({ role, data: { subject, attendableId } }) => ({ role, subject, attendableId }),\n }),\n Surface.create({\n id: 'notebook.article',\n filter: AppSurface.object(AppSurface.Article, Notebook.Notebook),\n component: NotebookArticleSurface,\n props: ({ role, data: { subject, attendableId } }) => ({ role, subject, attendableId }),\n }),\n Surface.create({\n id: 'objectProperties',\n filter: AppSurface.object(AppSurface.ObjectProperties, Script.Script),\n component: ScriptProperties,\n props: ({ role, data: { subject } }) => ({ role, subject }),\n }),\n Surface.create({\n id: 'companion.execute',\n filter: AppSurface.allOf(\n AppSurface.literal(AppSurface.Article, 'execute'),\n AppSurface.companion(AppSurface.Article, Script.Script),\n ),\n component: TestContainer,\n props: ({ role, data: { companionTo } }) => ({ role, script: companionTo }),\n }),\n Surface.create({\n id: 'companion.logs',\n filter: AppSurface.allOf(\n AppSurface.literal(AppSurface.Article, 'logs'),\n AppSurface.companion(AppSurface.Article, Script.Script),\n ),\n component: ScriptLogsSurface,\n props: ({ role, data: { companionTo } }) => ({ role, script: companionTo }),\n }),\n Surface.create({\n id: DEPLOYMENT_DIALOG,\n filter: AppSurface.component<ComponentProps<typeof DeploymentDialog>>(AppSurface.Dialog, DEPLOYMENT_DIALOG),\n component: DeploymentDialog,\n props: ({ data: { props } }) => ({ ...props }),\n }),\n ]),\n ),\n);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAQA,IAAa,oBAAoB,MAAI,KAAK,GAAG,KAAK,QAAQ,IAAI,kBAAkB;;;ACehF,IAAM,kBAAkB;;AAOxB,IAAa,yBAAyB,EAAE,cAA0C;CAChF,MAAM,EAAE,UAAU,mBAAmB,MAAM,iBAAoC,QAAQ,IAAI;CAC3F,MAAM,EAAE,kBAAkB,MAAM,oBAAoB;CAEpD,MAAM,qBAAqB,YAAY;EACrC,MAAM,cAAc,gBAAgB,oBAAoB;GACtD,YAAY;GACZ,cAAc,CAAC,eAAe;EAChC,CAAC;CACH;CAEA,OACE,oBAAC,gBAAD;EACY;EACV,kBAAkB;EAClB,gBAAgB;EAChB,OAAO,oBAAC,cAAc,MAAf,EAAoB,QAAQ,QAAQ,OAAS,CAAA;CACrD,CAAA;AAEL;;AASA,IAAa,wBAAwB,EAAE,MAAM,SAAS,mBAA8C;CAClG,MAAM,WAAW,YAAY;CAC7B,MAAM,WAAW,MAAM,kBAAkB,mBAAmB,QAAQ;CAEpE,OACE,oBAAC,eAAD;EACQ;EACG;EACK;EACJ;EACV,KAAK,UAAU;CAChB,CAAA;AAEL;AAQA,IAAa,0BAA0B,EAAE,MAAM,SAAS,mBAAgD;CACtG,MAAM,WAAW,YAAY;CAE7B,OAAO,oBAAC,iBAAD;EAAuB;EAAe;EAAuB;EAAc,KAAK,UAAU;CAAc,CAAA;AACjH;;AAQA,IAAa,qBAAqB,EAAE,MAAM,aAAqC;CAC7E,MAAM,QAAQ,SAAS,MAAM;CAC7B,MAAM,OAAO,cAAc,OAAO,WAAW,mBAAmB;CAChE,MAAM,UAAU,OAAO,KAAK,WAAW,IAAI,IAAI,KAAA;CAE/C,OACE,oBAAC,MAAM,MAAP;EAAkB;EAChB,UAAA,oBAAC,MAAM,MAAP;GAAY,SAAA;GACV,UAAA,oBAAC,0BAAD;IAA0B,IAAI,OAAO;IAAa;IAAS,QAAQ;IAAQ,YAAW;GAAS,CAAA;EACrF,CAAA;CACF,CAAA;AAEhB;;;AC9EA,IAAA,wBAAe,WAAW,iBACxB,OAAO,QACL,WAAW,WAAW,aAAa,cAAc;CAC/C,QAAQ,OAAO;EACb,IAAI;EACJ,QAAQ,WAAW,SAAS,WAAW,SAAS,KAAK,QAAQ,GAAG;EAChE,WAAW;EACX,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ;CAC/C,CAAC;CACD,QAAQ,OAAO;EACb,IAAI;EAEJ,QAAQ,WAAW,MACjB,WAAW,OAAO,WAAW,SAAS,OAAO,MAAM,GACnD,WAAW,OAAO,WAAW,SAAS,OAAO,MAAM,CACrD;EACA,WAAW;EACX,QAAQ,EAAE,MAAM,MAAM,EAAE,SAAS,sBAAsB;GAAE;GAAM;GAAS;EAAa;CACvF,CAAC;CACD,QAAQ,OAAO;EACb,IAAI;EACJ,QAAQ,WAAW,OAAO,WAAW,SAAS,SAAS,QAAQ;EAC/D,WAAW;EACX,QAAQ,EAAE,MAAM,MAAM,EAAE,SAAS,sBAAsB;GAAE;GAAM;GAAS;EAAa;CACvF,CAAC;CACD,QAAQ,OAAO;EACb,IAAI;EACJ,QAAQ,WAAW,OAAO,WAAW,kBAAkB,OAAO,MAAM;EACpE,WAAW;EACX,QAAQ,EAAE,MAAM,MAAM,EAAE,iBAAiB;GAAE;GAAM;EAAQ;CAC3D,CAAC;CACD,QAAQ,OAAO;EACb,IAAI;EACJ,QAAQ,WAAW,MACjB,WAAW,QAAQ,WAAW,SAAS,SAAS,GAChD,WAAW,UAAU,WAAW,SAAS,OAAO,MAAM,CACxD;EACA,WAAW;EACX,QAAQ,EAAE,MAAM,MAAM,EAAE,qBAAqB;GAAE;GAAM,QAAQ;EAAY;CAC3E,CAAC;CACD,QAAQ,OAAO;EACb,IAAI;EACJ,QAAQ,WAAW,MACjB,WAAW,QAAQ,WAAW,SAAS,MAAM,GAC7C,WAAW,UAAU,WAAW,SAAS,OAAO,MAAM,CACxD;EACA,WAAW;EACX,QAAQ,EAAE,MAAM,MAAM,EAAE,qBAAqB;GAAE;GAAM,QAAQ;EAAY;CAC3E,CAAC;CACD,QAAQ,OAAO;EACb,IAAI;EACJ,QAAQ,WAAW,UAAmD,WAAW,QAAQ,iBAAiB;EAC1G,WAAW;EACX,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM;CAC9C,CAAC;AACH,CAAC,CACH,CACF"}
|
package/dist/lib/chunk-read.mjs
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import { c as Read } from "./chunk-definitions.mjs";
|
|
2
|
+
import { t as FunctionError } from "./chunk-errors.mjs";
|
|
3
3
|
import { Database } from "@dxos/echo";
|
|
4
|
+
import * as Operation from "@dxos/compute/Operation";
|
|
4
5
|
import * as Effect from "effect/Effect";
|
|
5
6
|
//#region src/skills/functions/read.ts
|
|
6
7
|
var read_default = Read.pipe(Operation.withHandler(Effect.fn(function* ({ function: fn }) {
|
|
7
8
|
const loaded = yield* Database.load(fn);
|
|
8
|
-
if (!loaded.source) return yield* Effect.fail(
|
|
9
|
+
if (!loaded.source) return yield* Effect.fail(new FunctionError({ message: "Function has no source script." }));
|
|
9
10
|
const script = yield* Database.load(loaded.source);
|
|
10
11
|
const text = yield* Database.load(script.source);
|
|
11
12
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk-read.mjs","names":[],"sources":["../../src/skills/functions/read.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport * as Operation from '@dxos/compute/Operation';\nimport type * as Script from '@dxos/compute/Script';\nimport { Database } from '@dxos/echo';\n\nimport { Read } from './definitions';\n\nexport default Read.pipe(\n Operation.withHandler(\n Effect.fn(function* ({ function: fn }) {\n const loaded = yield* Database.load(fn);\n if (!loaded.source) {\n return yield* Effect.fail(new
|
|
1
|
+
{"version":3,"file":"chunk-read.mjs","names":[],"sources":["../../src/skills/functions/read.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport * as Operation from '@dxos/compute/Operation';\nimport type * as Script from '@dxos/compute/Script';\nimport { Database } from '@dxos/echo';\n\nimport { Read } from './definitions.ts';\nimport { FunctionError } from './errors.ts';\n\nexport default Read.pipe(\n Operation.withHandler(\n Effect.fn(function* ({ function: fn }) {\n const loaded = yield* Database.load(fn);\n if (!loaded.source) {\n return yield* Effect.fail(new FunctionError({ message: 'Function has no source script.' }));\n }\n const script = (yield* Database.load(loaded.source)) as Script.Script;\n const text = yield* Database.load(script.source);\n\n return {\n name: script.name,\n source: text.content,\n description: script.description,\n };\n }),\n ),\n);\n"],"mappings":";;;;;;AAaA,IAAA,eAAe,KAAK,KAClB,UAAU,YACR,OAAO,GAAG,WAAW,EAAE,UAAU,MAAM;CACrC,MAAM,SAAS,OAAO,SAAS,KAAK,EAAE;CACtC,IAAI,CAAC,OAAO,QACV,OAAO,OAAO,OAAO,KAAK,IAAI,cAAc,EAAE,SAAS,iCAAiC,CAAC,CAAC;CAE5F,MAAM,SAAU,OAAO,SAAS,KAAK,OAAO,MAAM;CAClD,MAAM,OAAO,OAAO,SAAS,KAAK,OAAO,MAAM;CAE/C,OAAO;EACL,MAAM,OAAO;EACb,QAAQ,KAAK;EACb,aAAa,OAAO;CACtB;AACF,CAAC,CACH,CACF"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import * as Capability from "@dxos/app-framework/Capability";
|
|
2
2
|
import { ScriptCapabilities, Settings } from "#types";
|
|
3
3
|
import { meta } from "#meta";
|
|
4
|
-
import { createKvsStore } from "@dxos/effect";
|
|
5
4
|
import * as Effect from "effect/Effect";
|
|
6
5
|
import * as AppCapabilities from "@dxos/app-toolkit/AppCapabilities";
|
|
6
|
+
import * as KvsStore from "@dxos/effect/KvsStore";
|
|
7
7
|
//#region src/capabilities/settings.ts
|
|
8
8
|
var settings_default = Capability.makeModule(() => Effect.sync(() => {
|
|
9
|
-
const settingsAtom =
|
|
9
|
+
const settingsAtom = KvsStore.make({
|
|
10
10
|
key: meta.profile.key,
|
|
11
11
|
schema: Settings.Settings,
|
|
12
12
|
defaultValue: () => ({ editorInputMode: "vscode" })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk-settings.mjs","names":[],"sources":["../../src/capabilities/settings.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport * as Capability from '@dxos/app-framework/Capability';\nimport * as AppCapabilities from '@dxos/app-toolkit/AppCapabilities';\nimport
|
|
1
|
+
{"version":3,"file":"chunk-settings.mjs","names":[],"sources":["../../src/capabilities/settings.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport * as Capability from '@dxos/app-framework/Capability';\nimport * as AppCapabilities from '@dxos/app-toolkit/AppCapabilities';\nimport * as KvsStore from '@dxos/effect/KvsStore';\n\nimport { meta } from '#meta';\nimport { ScriptCapabilities, Settings } from '#types';\n\nexport default Capability.makeModule(() =>\n Effect.sync(() => {\n const settingsAtom = KvsStore.make({\n key: meta.profile.key,\n schema: Settings.Settings,\n defaultValue: () => ({\n editorInputMode: 'vscode' as const,\n }),\n });\n\n return [\n Capability.contribute(ScriptCapabilities.Settings, settingsAtom),\n Capability.contribute(AppCapabilities.Settings, {\n prefix: meta.profile.key,\n schema: Settings.Settings,\n atom: settingsAtom,\n }),\n ];\n }),\n);\n"],"mappings":";;;;;;;AAaA,IAAA,mBAAe,WAAW,iBACxB,OAAO,WAAW;CAChB,MAAM,eAAe,SAAS,KAAK;EACjC,KAAK,KAAK,QAAQ;EAClB,QAAQ,SAAS;EACjB,qBAAqB,EACnB,iBAAiB,SACnB;CACF,CAAC;CAED,OAAO,CACL,WAAW,WAAW,mBAAmB,UAAU,YAAY,GAC/D,WAAW,WAAW,gBAAgB,UAAU;EAC9C,QAAQ,KAAK,QAAQ;EACrB,QAAQ,SAAS;EACjB,MAAM;CACR,CAAC,CACH;AACF,CAAC,CACH"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as Capability from "@dxos/app-framework/Capability";
|
|
2
|
+
import { ScriptSkill } from "#skills";
|
|
2
3
|
import * as Effect from "effect/Effect";
|
|
3
4
|
import * as AppCapabilities from "@dxos/app-toolkit/AppCapabilities";
|
|
4
|
-
import { ScriptSkill } from "#skills";
|
|
5
5
|
//#region src/capabilities/skill-definition.ts
|
|
6
6
|
var skillDefinition = () => Effect.succeed([Capability.contribute(AppCapabilities.SkillDefinition, ScriptSkill)]);
|
|
7
7
|
//#endregion
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
//#region src/templates/anthropic.ts?raw
|
|
2
|
-
var anthropic_default = "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as
|
|
2
|
+
var anthropic_default = "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as LanguageModel from 'effect/ai/LanguageModel';\nimport * as Effect from 'effect/Effect';\nimport * as Schema from 'effect/Schema';\nimport * as Stream from 'effect/Stream';\n\nimport { AiService } from '@dxos/ai';\nimport * as Operation from '@dxos/compute/Operation';\nimport { DXN } from '@dxos/keys';\n\nconst Anthropic = Operation.make({\n meta: {\n key: DXN.make('com.example.operation.script.anthropic'),\n name: 'Anthropic Chat',\n description: 'Chat with Anthropic',\n },\n input: Schema.Struct({\n message: Schema.String,\n }),\n output: Schema.Any,\n services: [AiService.AiService],\n});\n\nexport default Anthropic.pipe(\n Operation.withHandler(\n Effect.fn(function* ({ message }) {\n const model = AiService.languageModel('com.anthropic.model.claude-sonnet-5.default');\n\n //\n // Basic example.\n //\n const { text } = yield* LanguageModel.generateText({ prompt: message }).pipe(Effect.provide(model));\n\n //\n // Streaming example.\n //\n const parts = yield* LanguageModel.streamText({\n prompt: 'Count from 1 to 5, one number per line.',\n }).pipe(Stream.runCollect, Effect.provide(model));\n const textDeltas = parts.filter((p) => p.type === 'text-delta');\n const fullText = textDeltas.map((p) => (p as { delta: string }).delta).join('');\n\n return { response: text, streamText: fullText };\n }),\n ),\n);\n";
|
|
3
3
|
//#endregion
|
|
4
4
|
//#region src/templates/chess-bot.ts?raw
|
|
5
5
|
var chess_bot_default = "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Chess as ChessJS } from 'chess.js';\nimport * as Effect from 'effect/Effect';\nimport * as Schema from 'effect/Schema';\n\nimport * as Operation from '@dxos/compute/Operation';\nimport { Database, DXN, Obj } from '@dxos/echo';\nimport * as Chess from '@dxos/plugin-chess/Chess';\nimport * as Game from '@dxos/plugin-game/Game';\nimport * as GameUtil from '@dxos/plugin-game/GameUtil';\n\nconst ChessBot = Operation.make({\n meta: {\n key: DXN.make('com.example.operation.script.chessBot'),\n name: 'Chess Bot',\n description: 'Plays a random move in a chess game.',\n },\n input: Schema.Struct({\n game: Game.GameRef(Chess.State).annotate({\n description: 'The chess game to comment on.',\n }),\n player: Schema.optional(Schema.Literals(['white', 'black'])).annotate({\n description: 'The player to play the game as.',\n }),\n }),\n output: Schema.Struct({\n state: Schema.String.annotate({\n description: 'The state of the game as an ASCII art board.',\n }),\n }),\n types: [Game.Game, Chess.State],\n services: [Database.Service],\n});\n\nexport default ChessBot.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* ({ game, player = 'black' }) {\n const { variant } = yield* GameUtil.loadGame(game, Chess.State);\n const chess = new ChessJS();\n chess.loadPgn(variant.pgn ?? '');\n if (chess.turn() !== (player === 'white' ? 'w' : 'b')) {\n return { state: chess.ascii() };\n }\n\n const moves = chess.moves({ verbose: true });\n const move = moves[Math.floor(Math.random() * moves.length)];\n if (!move) {\n return { state: chess.ascii() };\n }\n\n chess.move(move.san);\n const newPgn = chess.pgn();\n Obj.update(variant, (variant) => {\n const mutable = variant as Obj.Mutable<typeof variant>;\n mutable.pgn = newPgn;\n });\n yield* Database.flush();\n return { state: chess.ascii() };\n }),\n ),\n);\n";
|
|
6
6
|
//#endregion
|
|
7
7
|
//#region src/templates/commentary.ts?raw
|
|
8
|
-
var commentary_default = "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as A from '@automerge/automerge';\nimport { Chess as ChessJS } from 'chess.js';\nimport * as Array from 'effect/Array';\nimport * as Effect from 'effect/Effect';\nimport * as Function from 'effect/Function';\nimport * as Layer from 'effect/Layer';\nimport * as Option from 'effect/Option';\nimport * as Schema from 'effect/Schema';\n\nimport { AiService, ConsolePrinter, ToolExecutionService, ToolResolverService } from '@dxos/ai';\nimport * as AppAnnotation from '@dxos/app-toolkit/AppAnnotation';\nimport { AiRequest, GenerationObserver } from '@dxos/assistant';\nimport * as Operation from '@dxos/compute/Operation';\nimport * as Trace from '@dxos/compute/Trace';\nimport { Annotation, Collection, Database, DXN, Filter, Obj, Ref, Relation, URI } from '@dxos/echo';\nimport { Doc } from '@dxos/echo-doc';\nimport { registryLayerNoop } from '@dxos/echo/testing';\nimport { log } from '@dxos/log';\nimport * as Chess from '@dxos/plugin-chess/Chess';\nimport * as Game from '@dxos/plugin-game/Game';\nimport * as GameUtil from '@dxos/plugin-game/GameUtil';\nimport * as Markdown from '@dxos/plugin-markdown/Markdown';\nimport { Text } from '@dxos/schema';\nimport { HasSubject } from '@dxos/types';\nimport { trim } from '@dxos/util';\n\nconst Commentary = Operation.make({\n meta: {\n key: DXN.make('com.example.operation.script.commentary'),\n name: 'Commentary',\n description: 'Adds commentary about the most recent move to a markdown document associated with the chess game.',\n },\n input: Schema.Struct({\n game: Game.GameRef(Chess.State).annotate({\n description: 'The chess game to comment on.',\n }),\n }),\n output: Schema.Union([\n Schema.Struct({\n documentId: URI.Schema.annotate({\n description: 'The ID of the markdown document that was updated or created.',\n }),\n commentary: Schema.String.annotate({\n description: 'The commentary that was added.',\n }),\n }),\n Schema.Void.annotate({\n description: 'Function did not find anything to comment on.',\n }),\n ]),\n types: [Game.Game, Chess.State, Markdown.Document, Text.Text, HasSubject.HasSubject, Collection.Collection],\n services: [AiService.AiService, Database.Service],\n});\n\nexport default Commentary.pipe(\n Operation.withHandler(\n Effect.fnUntraced(\n function* ({ game: gameRef }) {\n // Load the game and its Chess variant state.\n log.info('load game', { gameRef });\n const { game: chessGame, variant: chessState } = yield* GameUtil.loadGame(gameRef, Chess.State);\n\n // Load the chess position from PGN or FEN.\n const chess = new ChessJS();\n if (chessState.pgn) {\n chess.loadPgn(chessState.pgn);\n } else if (chessState.fen) {\n chess.load(chessState.fen);\n } else {\n log.info('Early return: no pgn or fen');\n return;\n }\n\n // Get the most recent move\n const history = chess.history({ verbose: true });\n if (history.length === 0) {\n throw new Error('No moves have been played yet');\n }\n const lastMove = history[history.length - 1];\n const moveNumber = Math.ceil(history.length / 2);\n const isWhiteMove = history.length % 2 === 1;\n const player = isWhiteMove ? 'White' : 'Black';\n const moveNotation = lastMove.san;\n\n // Generate AI commentary about the move\n const result = yield* new AiRequest.Request({\n observer: GenerationObserver.fromPrinter(new ConsolePrinter({ tag: 'chess-commentary' })),\n }).run({\n prompt:\n `Comment on this chess move as if you're commentating a live match for an audience:\\n\\n` +\n `Move ${moveNumber}: ${player} plays ${moveNotation} (${lastMove.from} to ${lastMove.to})${lastMove.captured ? `, capturing ${lastMove.captured}` : ''}\\n` +\n `Current position: ${chess.fen()}\\n` +\n `${chess.isCheck() ? 'The king is in check! ' : ''}` +\n `${chess.isCheckmate() ? 'CHECKMATE! ' : ''}` +\n `${chess.isStalemate() ? 'STALEMATE! ' : ''}` +\n `\\nGame so far:\\n${chess.pgn()}`,\n system: COMMENTARY_SYSTEM_PROMPT,\n history: [],\n });\n\n const commentaryText = Function.pipe(\n result,\n Array.findLast((msg) => msg.sender.role === 'assistant' && msg.blocks.some((block) => block._tag === 'text')),\n Option.flatMap((msg) =>\n Function.pipe(\n msg.blocks,\n Array.findLast((block) => block._tag === 'text'),\n Option.map((block) => block.text),\n ),\n ),\n Option.getOrThrowWith(() => new Error('No commentary generated')),\n );\n\n const commentary = `## Move ${moveNumber}: ${player} plays ${moveNotation}\\n\\n${commentaryText}\\n\\n`;\n log.info('commentary', { commentary });\n\n // TODO(wittjosiah): Functions currently don't support traversals.\n // const docs = yield* Database.query(\n // Query.select(Filter.id(chessGame.id)).targetOf(HasSubject.HasSubject).source(),\n // ).run.pipe(Effect.map((objects) => objects.filter((object) => Obj.instanceOf(Markdown.Document, object))));\n const docs = yield* Database.query(Filter.type(HasSubject.HasSubject)).run.pipe(\n Effect.map((relations) =>\n relations.filter((relation) => {\n // TODO(wittjosiah): This is a workaround for getTarget not handling deleted objects.\n try {\n log.info('relation', {\n source: Obj.getURI(Relation.getTarget(relation)),\n game: Obj.getURI(chessGame),\n });\n return Obj.getURI(Relation.getTarget(relation)) === Obj.getURI(chessGame);\n } catch {\n return false;\n }\n }),\n ),\n Effect.map((relations) =>\n relations\n .map((relation) => {\n // TODO(wittjosiah): This is a workaround for getSource not handling deleted objects.\n try {\n return Relation.getSource(relation);\n } catch {\n return undefined;\n }\n })\n .filter((source) => source !== undefined),\n ),\n Effect.map((sources) => {\n const docs = sources.filter((source) => Obj.instanceOf(Markdown.Document, source));\n log.info('docs', { sources, docs });\n return docs;\n }),\n );\n log.info('docs', { count: docs.length });\n\n let document: Markdown.Document;\n if (docs.length === 0) {\n // TODO(wittjosiah): Deploy fails if `SpaceProperties` schema is imported because its from `client-protocol`.\n const [properties] = yield* Database.query(Filter.type(DXN.make('org.dxos.type.spaceProperties'))).run;\n const rootCollectionRef = Annotation.get(properties, AppAnnotation.RootCollectionAnnotation).pipe(\n Option.getOrUndefined,\n );\n const rootCollection = rootCollectionRef\n ? yield* Database.load<Collection.Collection>(rootCollectionRef)\n : undefined;\n\n log.info('rootCollection', { rootCollection });\n\n // Create a new markdown document\n const gameName = chessGame.name || 'Chess Game';\n document = yield* Database.add(\n Markdown.make({\n name: `${gameName} Commentary`,\n content: `# ${gameName} Commentary\\n\\n${commentary}`,\n }),\n );\n\n const documentRef = Ref.make(document);\n if (rootCollection) {\n Obj.update(rootCollection, (rootCollection) => {\n rootCollection.objects.push(documentRef);\n });\n }\n\n // Create the HasSubject relation\n yield* Database.add(\n Relation.make(HasSubject.HasSubject, {\n [Relation.Source]: document,\n [Relation.Target]: chessGame,\n }),\n );\n } else {\n document = docs[0];\n\n // Load the text content and append the commentary\n const text = yield* Database.load(document.content);\n const accessor = Doc.createAccessor(text, ['content']);\n accessor.handle.change((doc: A.Doc<Text.Text>) => {\n A.splice(doc, accessor.path.slice(), text.content.length, 0, commentary);\n });\n }\n\n log.info('result', { documentId: Obj.getURI(document), commentary });\n\n yield* Database.flush();\n\n return {\n documentId: Obj.getURI(document),\n commentary,\n };\n },\n Effect.provide(\n Layer.mergeAll(\n AiService.model('com.anthropic.model.claude-haiku-4-5.default'),\n ToolResolverService.layerEmpty,\n ToolExecutionService.layerEmpty,\n Trace.writerLayerNoop,\n Database.notAvailable,\n Layer.succeed(Operation.Service, {\n invoke: () => Effect.die('Not available.'),\n schedule: () => Effect.die('Not available.'),\n invokePromise: async () => ({ error: new Error('Not available.') }),\n } as any),\n registryLayerNoop,\n ),\n ),\n ),\n ),\n);\n\nconst COMMENTARY_SYSTEM_PROMPT = trim`\n You are a professional chess commentator providing live commentary for a chess match.\n\n # Style\n - Write in an engaging, enthusiastic style as if commentating for a live audience\n - Be concise but informative (2-4 sentences)\n - Explain the strategic implications of the move\n - Note any tactical elements (captures, threats, checks)\n - Comment on the position and what it means for the game\n\n # Format\n - Write in plain text (no markdown formatting in the commentary itself)\n - Be natural and conversational\n - Use chess terminology appropriately but keep it accessible\n\n # Special Situations\n - If it's checkmate, express excitement about the conclusion\n - If it's check, note the pressure on the king\n - If a piece is captured, mention the material exchange\n - Comment on the development of pieces and control of key squares when relevant\n`;\n";
|
|
8
|
+
var commentary_default = "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as A from '@automerge/automerge';\nimport { Chess as ChessJS } from 'chess.js';\nimport * as Array from 'effect/Array';\nimport * as Effect from 'effect/Effect';\nimport * as Function from 'effect/Function';\nimport * as Layer from 'effect/Layer';\nimport * as Option from 'effect/Option';\nimport * as Schema from 'effect/Schema';\n\nimport { AiService, ConsolePrinter, ToolExecutionService, ToolResolverService } from '@dxos/ai';\nimport * as AppAnnotation from '@dxos/app-toolkit/AppAnnotation';\nimport { AiRequest, GenerationObserver } from '@dxos/assistant';\nimport * as Operation from '@dxos/compute/Operation';\nimport * as Trace from '@dxos/compute/Trace';\nimport { Annotation, Collection, Database, DXN, Filter, Obj, Ref, Relation, URI } from '@dxos/echo';\nimport { Doc } from '@dxos/echo-doc';\nimport { registryLayerNoop } from '@dxos/echo/testing';\nimport { log } from '@dxos/log';\nimport * as Chess from '@dxos/plugin-chess/Chess';\nimport * as Game from '@dxos/plugin-game/Game';\nimport * as GameUtil from '@dxos/plugin-game/GameUtil';\nimport * as Markdown from '@dxos/plugin-markdown/Markdown';\nimport { Text } from '@dxos/schema';\nimport { HasSubject } from '@dxos/types';\nimport { trim } from '@dxos/util';\n\nconst Commentary = Operation.make({\n meta: {\n key: DXN.make('com.example.operation.script.commentary'),\n name: 'Commentary',\n description: 'Adds commentary about the most recent move to a markdown document associated with the chess game.',\n },\n input: Schema.Struct({\n game: Game.GameRef(Chess.State).annotate({\n description: 'The chess game to comment on.',\n }),\n }),\n output: Schema.Union([\n Schema.Struct({\n documentId: URI.Schema.annotate({\n description: 'The ID of the markdown document that was updated or created.',\n }),\n commentary: Schema.String.annotate({\n description: 'The commentary that was added.',\n }),\n }),\n Schema.Void.annotate({\n description: 'Function did not find anything to comment on.',\n }),\n ]),\n types: [Game.Game, Chess.State, Markdown.Document, Text.Text, HasSubject.HasSubject, Collection.Collection],\n services: [AiService.AiService, Database.Service],\n});\n\nexport default Commentary.pipe(\n Operation.withHandler(\n Effect.fnUntraced(\n function* ({ game: gameRef }) {\n // Load the game and its Chess variant state.\n log.info('load game', { gameRef });\n const { game: chessGame, variant: chessState } = yield* GameUtil.loadGame(gameRef, Chess.State);\n\n // Load the chess position from PGN or FEN.\n const chess = new ChessJS();\n if (chessState.pgn) {\n chess.loadPgn(chessState.pgn);\n } else if (chessState.fen) {\n chess.load(chessState.fen);\n } else {\n log.info('Early return: no pgn or fen');\n return;\n }\n\n // Get the most recent move\n const history = chess.history({ verbose: true });\n if (history.length === 0) {\n throw new Error('No moves have been played yet');\n }\n const lastMove = history[history.length - 1];\n const moveNumber = Math.ceil(history.length / 2);\n const isWhiteMove = history.length % 2 === 1;\n const player = isWhiteMove ? 'White' : 'Black';\n const moveNotation = lastMove.san;\n\n // Generate AI commentary about the move\n const result = yield* new AiRequest.Request({\n observer: GenerationObserver.fromPrinter(new ConsolePrinter({ tag: 'chess-commentary' })),\n }).run({\n prompt:\n `Comment on this chess move as if you're commentating a live match for an audience:\\n\\n` +\n `Move ${moveNumber}: ${player} plays ${moveNotation} (${lastMove.from} to ${lastMove.to})${lastMove.captured ? `, capturing ${lastMove.captured}` : ''}\\n` +\n `Current position: ${chess.fen()}\\n` +\n `${chess.isCheck() ? 'The king is in check! ' : ''}` +\n `${chess.isCheckmate() ? 'CHECKMATE! ' : ''}` +\n `${chess.isStalemate() ? 'STALEMATE! ' : ''}` +\n `\\nGame so far:\\n${chess.pgn()}`,\n system: COMMENTARY_SYSTEM_PROMPT,\n history: [],\n });\n\n const commentaryText = Function.pipe(\n result,\n Array.findLast((msg) => msg.sender.role === 'assistant' && msg.blocks.some((block) => block._tag === 'text')),\n Option.flatMap((msg) =>\n Function.pipe(\n msg.blocks,\n Array.findLast((block) => block._tag === 'text'),\n Option.map((block) => block.text),\n ),\n ),\n Option.getOrThrowWith(() => new Error('No commentary generated')),\n );\n\n const commentary = `## Move ${moveNumber}: ${player} plays ${moveNotation}\\n\\n${commentaryText}\\n\\n`;\n log.info('commentary', { commentary });\n\n // TODO(wittjosiah): Functions currently don't support traversals.\n // const docs = yield* Database.query(\n // Query.select(Filter.id(chessGame.id)).targetOf(HasSubject.HasSubject).source(),\n // ).run.pipe(Effect.map((objects) => objects.filter((object) => Obj.instanceOf(Markdown.Document, object))));\n const docs = yield* Database.query(Filter.type(HasSubject.HasSubject)).run.pipe(\n Effect.map((relations) =>\n relations.filter((relation) => {\n // TODO(wittjosiah): This is a workaround for getTarget not handling deleted objects.\n try {\n log.info('relation', {\n source: Obj.getURI(Relation.getTarget(relation)),\n game: Obj.getURI(chessGame),\n });\n return Obj.getURI(Relation.getTarget(relation)) === Obj.getURI(chessGame);\n } catch {\n return false;\n }\n }),\n ),\n Effect.map((relations) =>\n relations\n .map((relation) => {\n // TODO(wittjosiah): This is a workaround for getSource not handling deleted objects.\n try {\n return Relation.getSource(relation);\n } catch {\n return undefined;\n }\n })\n .filter((source) => source !== undefined),\n ),\n Effect.map((sources) => {\n const docs = sources.filter((source) => Obj.instanceOf(Markdown.Document, source));\n log.info('docs', { sources, docs });\n return docs;\n }),\n );\n log.info('docs', { count: docs.length });\n\n let document: Markdown.Document;\n if (docs.length === 0) {\n // TODO(wittjosiah): Deploy fails if `SpaceProperties` schema is imported because its from `client-protocol`.\n const [properties] = yield* Database.query(Filter.type(DXN.make('org.dxos.type.spaceProperties'))).run;\n const rootCollectionRef = Annotation.get(properties, AppAnnotation.RootCollectionAnnotation).pipe(\n Option.getOrUndefined,\n );\n const rootCollection = rootCollectionRef\n ? yield* Database.load<Collection.Collection>(rootCollectionRef)\n : undefined;\n\n log.info('rootCollection', { rootCollection });\n\n // Create a new markdown document\n const gameName = chessGame.name || 'Chess Game';\n document = yield* Database.add(\n Markdown.make({\n name: `${gameName} Commentary`,\n content: `# ${gameName} Commentary\\n\\n${commentary}`,\n }),\n );\n\n const documentRef = Ref.make(document);\n if (rootCollection) {\n Obj.update(rootCollection, (rootCollection) => {\n rootCollection.objects.push(documentRef);\n });\n }\n\n // Create the HasSubject relation\n yield* Database.add(\n Relation.make(HasSubject.HasSubject, {\n [Relation.Source]: document,\n [Relation.Target]: chessGame,\n }),\n );\n } else {\n document = docs[0];\n\n // Load the text content and append the commentary\n const text = yield* Database.load(document.content);\n const accessor = Doc.createAccessor(text, ['content']);\n accessor.handle.change((doc: A.Doc<Text.Text>) => {\n A.splice(doc, accessor.path.slice(), text.content.length, 0, commentary);\n });\n }\n\n log.info('result', { documentId: Obj.getURI(document), commentary });\n\n yield* Database.flush();\n\n return {\n documentId: Obj.getURI(document),\n commentary,\n };\n },\n Effect.provide(\n Layer.mergeAll(\n AiService.languageModel('com.anthropic.model.claude-haiku-4-5.default'),\n ToolResolverService.layerEmpty,\n ToolExecutionService.layerEmpty,\n Trace.writerLayerNoop,\n Database.notAvailable,\n Layer.succeed(Operation.Service, {\n invoke: () => Effect.die('Not available.'),\n schedule: () => Effect.die('Not available.'),\n invokePromise: async () => ({ error: new Error('Not available.') }),\n } as any),\n registryLayerNoop,\n ),\n ),\n ),\n ),\n);\n\nconst COMMENTARY_SYSTEM_PROMPT = trim`\n You are a professional chess commentator providing live commentary for a chess match.\n\n # Style\n - Write in an engaging, enthusiastic style as if commentating for a live audience\n - Be concise but informative (2-4 sentences)\n - Explain the strategic implications of the move\n - Note any tactical elements (captures, threats, checks)\n - Comment on the position and what it means for the game\n\n # Format\n - Write in plain text (no markdown formatting in the commentary itself)\n - Be natural and conversational\n - Use chess terminology appropriately but keep it accessible\n\n # Special Situations\n - If it's checkmate, express excitement about the conclusion\n - If it's check, note the pressure on the king\n - If a piece is captured, mention the material exchange\n - Comment on the development of pieces and control of key squares when relevant\n`;\n";
|
|
9
9
|
//#endregion
|
|
10
10
|
//#region src/templates/data-generator.ts?raw
|
|
11
11
|
var data_generator_default = "//\n// Copyright 2025 DXOS.org\n//\n\n// @ts-ignore\nimport { Expando, S, create, defineFunction } from 'dxos:functions';\n// @ts-ignore\nimport { randText } from 'https://esm.sh/@ngneat/falso@7.1.1?bundle=false';\n\nexport default defineFunction({\n key: 'org.dxos.script.data-generator',\n name: 'Data Generator',\n inputSchema: S.Struct({\n documentAmount: S.optional(S.Number),\n textSize: S.optional(S.Number),\n mutationAmount: S.optional(S.Number),\n waitAfterCreation: S.optional(S.Number),\n }),\n\n outputSchema: S.Struct({}),\n\n handler: async ({\n data: { documentAmount = 1, textSize = 10, mutationAmount = 0, waitAfterCreation = 10_000 },\n context: { space },\n }: any) => {\n space.db.graph.registry.add([Expando]);\n const result: Record<string, any> = {};\n const objects: Expando[] = [];\n\n // Create objects.\n for (let i = 0; i < documentAmount; i++) {\n const obj = space.db.add(\n create(Expando, {\n name: 'scriptGenerated',\n content: randText({ charCount: textSize }),\n }),\n );\n objects.push(obj);\n const objectResult: any = {};\n // Mutate the object.\n for (let i = 0; i < mutationAmount; i++) {\n obj.content = randText({ charCount: textSize });\n }\n objectResult.mutations = mutationAmount;\n objectResult.contentLength = obj.content.length;\n result[obj.id] = objectResult;\n }\n\n // Flush and wait for data to propagate.\n await space.db.flush();\n await new Promise((resolve) => setTimeout(resolve, waitAfterCreation));\n return { createdObjects: objects.length };\n },\n});\n";
|
|
@@ -17,7 +17,7 @@ var discord_default = "//\n// Copyright 2025 DXOS.org\n//\n\n// @ts-ignore\nimpo
|
|
|
17
17
|
var email_default = "//\n// Copyright 2024 DXOS.org\n//\n\n/**\n * Appends a message to the end of a Document configured through a trigger.\n * Trigger must have a targetDocumentId field set in Meta.\n */\nexport default async ({ data: { bodyText }, context: { space } }: any) => {\n const { email, targetDocumentId: documentId } = JSON.parse(bodyText) as RequestPayload;\n\n const document = await space.db.query({ id: documentId }).first();\n\n const contentId = document.content['/'].split(':')[3];\n const documentContent = await space.db.query({ id: contentId }).first();\n const modifiedContent = [\n documentContent.content,\n '',\n '---',\n `**From:** ${email.from}`,\n `**Subject:** ${email.subject}`,\n `**Date:** ${email.created}`,\n '',\n email.body,\n ].join('\\n');\n\n await space.db.update({ id: contentId }, { content: modifiedContent });\n\n return new Response(JSON.stringify({ success: true }));\n};\n\ntype RequestPayload = {\n email: { from: string; subject: string; created: string; body: string };\n targetDocumentId: string;\n};\n";
|
|
18
18
|
//#endregion
|
|
19
19
|
//#region src/templates/forex-effect.ts?raw
|
|
20
|
-
var forex_effect_default = "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as
|
|
20
|
+
var forex_effect_default = "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Data from 'effect/Data';\nimport * as Effect from 'effect/Effect';\nimport * as FetchHttpClient from 'effect/http/FetchHttpClient';\nimport * as HttpClient from 'effect/http/HttpClient';\nimport * as HttpClientRequest from 'effect/http/HttpClientRequest';\nimport * as Schedule from 'effect/Schedule';\nimport * as Schema from 'effect/Schema';\n\nimport * as Operation from '@dxos/compute/Operation';\nimport { DXN } from '@dxos/keys';\n\nclass NoRateError extends Data.TaggedError('NoRateError')<{ from: string; to: string }> {}\n\nconst ForexEffect = Operation.make({\n meta: {\n key: DXN.make('com.example.operation.script.forexEffect'),\n name: 'Forex Effect',\n description: 'Returns the exchange rate between two currencies.',\n },\n input: Schema.Struct({\n from: Schema.String.annotate({ description: 'The source currency' }),\n to: Schema.String.annotate({ description: 'The target currency' }),\n }),\n output: Schema.Any,\n});\n\nexport default ForexEffect.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* ({ from: rawFrom, to: rawTo }) {\n const from = rawFrom.toUpperCase();\n const to = rawTo.toUpperCase();\n const json: any = yield* HttpClientRequest.get(`https://free.ratesdb.com/v1/rates?from=${from}&to=${to}`).pipe(\n HttpClient.execute,\n Effect.flatMap((response) => response.json),\n Effect.timeout('5 seconds'),\n Effect.retry(Schedule.exponential(1_000).pipe(Schedule.upTo({ times: 3 }))),\n Effect.scoped,\n );\n\n const rate = json?.data?.rates?.[to];\n if (rate == null) {\n return yield* Effect.fail(new NoRateError({ from, to }));\n }\n\n return rate.toString();\n }, Effect.provide(FetchHttpClient.layer)),\n ),\n);\n";
|
|
21
21
|
//#endregion
|
|
22
22
|
//#region src/templates/forex.ts?raw
|
|
23
23
|
var forex_default = "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport * as Schema from 'effect/Schema';\n\nimport * as Operation from '@dxos/compute/Operation';\nimport { DXN } from '@dxos/keys';\n\nconst Forex = Operation.make({\n meta: {\n key: DXN.make('com.example.operation.script.forex'),\n name: 'Forex',\n description: 'Returns the exchange rate between two currencies.',\n },\n input: Schema.Struct({\n from: Schema.String.annotate({ description: 'The source currency' }),\n to: Schema.String.annotate({ description: 'The target currency' }),\n }),\n output: Schema.Any,\n});\n\nexport default Forex.pipe(\n Operation.withHandler(\n Effect.fn(function* ({ from: rawFrom, to: rawTo }) {\n const from = rawFrom.toUpperCase();\n const to = rawTo.toUpperCase();\n const res = yield* Effect.promise(() => fetch(`https://free.ratesdb.com/v1/rates?from=${from}&to=${to}`));\n const {\n data: { rates },\n } = yield* Effect.promise(() => res.json());\n\n return rates[to].toString();\n }),\n ),\n);\n";
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import { l as Update } from "./chunk-definitions.mjs";
|
|
2
|
+
import { t as FunctionError } from "./chunk-errors.mjs";
|
|
3
3
|
import { Database, Obj } from "@dxos/echo";
|
|
4
|
+
import * as Operation from "@dxos/compute/Operation";
|
|
4
5
|
import { Doc, applyEdits } from "@dxos/echo-doc";
|
|
5
6
|
import * as Effect from "effect/Effect";
|
|
6
7
|
//#region src/skills/functions/update.ts
|
|
7
8
|
var update_default = Update.pipe(Operation.withHandler(Effect.fn(function* ({ function: fn, name, description, edits }) {
|
|
8
9
|
const loaded = yield* Database.load(fn);
|
|
9
|
-
if (!loaded.source) return yield* Effect.fail(
|
|
10
|
+
if (!loaded.source) return yield* Effect.fail(new FunctionError({ message: "Function has no source script." }));
|
|
10
11
|
const script = yield* Database.load(loaded.source);
|
|
11
12
|
if (name !== void 0 || description !== void 0) Obj.update(script, (script) => {
|
|
12
13
|
if (name !== void 0) script.name = name;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk-update.mjs","names":[],"sources":["../../src/skills/functions/update.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport * as Operation from '@dxos/compute/Operation';\nimport type * as Script from '@dxos/compute/Script';\nimport { Database, Obj } from '@dxos/echo';\nimport { Doc, applyEdits } from '@dxos/echo-doc';\n\nimport { Update } from './definitions';\n\nexport default Update.pipe(\n Operation.withHandler(\n Effect.fn(function* ({ function: fn, name, description, edits }) {\n const loaded = yield* Database.load(fn);\n if (!loaded.source) {\n return yield* Effect.fail(new
|
|
1
|
+
{"version":3,"file":"chunk-update.mjs","names":[],"sources":["../../src/skills/functions/update.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport * as Operation from '@dxos/compute/Operation';\nimport type * as Script from '@dxos/compute/Script';\nimport { Database, Obj } from '@dxos/echo';\nimport { Doc, applyEdits } from '@dxos/echo-doc';\n\nimport { Update } from './definitions.ts';\nimport { FunctionError } from './errors.ts';\n\nexport default Update.pipe(\n Operation.withHandler(\n Effect.fn(function* ({ function: fn, name, description, edits }) {\n const loaded = yield* Database.load(fn);\n if (!loaded.source) {\n return yield* Effect.fail(new FunctionError({ message: 'Function has no source script.' }));\n }\n\n const script = (yield* Database.load(loaded.source)) as Script.Script;\n if (name !== undefined || description !== undefined) {\n Obj.update(script, (script) => {\n if (name !== undefined) {\n script.name = name;\n }\n if (description !== undefined) {\n script.description = description;\n }\n });\n }\n\n if (edits && edits.length > 0) {\n const text = yield* Database.load(script.source);\n const accessor = Doc.createAccessor(text, ['content']);\n applyEdits(accessor, edits);\n\n Obj.update(script, (script) => {\n script.changed = true;\n });\n }\n\n return {\n function: Obj.getURI(loaded),\n };\n }),\n ),\n);\n"],"mappings":";;;;;;;AAcA,IAAA,iBAAe,OAAO,KACpB,UAAU,YACR,OAAO,GAAG,WAAW,EAAE,UAAU,IAAI,MAAM,aAAa,SAAS;CAC/D,MAAM,SAAS,OAAO,SAAS,KAAK,EAAE;CACtC,IAAI,CAAC,OAAO,QACV,OAAO,OAAO,OAAO,KAAK,IAAI,cAAc,EAAE,SAAS,iCAAiC,CAAC,CAAC;CAG5F,MAAM,SAAU,OAAO,SAAS,KAAK,OAAO,MAAM;CAClD,IAAI,SAAS,KAAA,KAAa,gBAAgB,KAAA,GACxC,IAAI,OAAO,SAAS,WAAW;EAC7B,IAAI,SAAS,KAAA,GACX,OAAO,OAAO;EAEhB,IAAI,gBAAgB,KAAA,GAClB,OAAO,cAAc;CAEzB,CAAC;CAGH,IAAI,SAAS,MAAM,SAAS,GAAG;EAC7B,MAAM,OAAO,OAAO,SAAS,KAAK,OAAO,MAAM;EAC/C,MAAM,WAAW,IAAI,eAAe,MAAM,CAAC,SAAS,CAAC;EACrD,WAAW,UAAU,KAAK;EAE1B,IAAI,OAAO,SAAS,WAAW;GAC7B,OAAO,UAAU;EACnB,CAAC;CACH;CAEA,OAAO,EACL,UAAU,IAAI,OAAO,MAAM,EAC7B;AACF,CAAC,CACH,CACF"}
|