@dxos/plugin-conductor 0.8.4-main.7ace549 → 0.8.4-main.8baae0fced

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.
Files changed (107) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +7 -3
  3. package/dist/lib/neutral/CanvasArticle-6DIN6CDA.mjs +99 -0
  4. package/dist/lib/neutral/CanvasArticle-6DIN6CDA.mjs.map +7 -0
  5. package/dist/lib/neutral/ConductorPlugin.mjs +26 -0
  6. package/dist/lib/neutral/ConductorPlugin.mjs.map +7 -0
  7. package/dist/lib/neutral/capabilities/index.mjs +9 -0
  8. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  9. package/dist/lib/{browser/chunk-PYKBZYTF.mjs → neutral/chunk-KYW7WBWW.mjs} +3 -2
  10. package/dist/lib/neutral/chunk-KYW7WBWW.mjs.map +7 -0
  11. package/dist/lib/neutral/components/index.mjs +1 -0
  12. package/dist/lib/neutral/containers/index.mjs +7 -0
  13. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  14. package/dist/lib/neutral/create-object-IXEBIQ4H.mjs +25 -0
  15. package/dist/lib/neutral/create-object-IXEBIQ4H.mjs.map +7 -0
  16. package/dist/lib/neutral/index.mjs +7 -0
  17. package/dist/lib/neutral/meta.json +1 -0
  18. package/dist/lib/neutral/meta.mjs +7 -0
  19. package/dist/lib/neutral/meta.mjs.map +7 -0
  20. package/dist/lib/neutral/plugin.mjs +11 -0
  21. package/dist/lib/neutral/plugin.mjs.map +7 -0
  22. package/dist/lib/neutral/react-surface-JCMKXAUY.mjs +22 -0
  23. package/dist/lib/neutral/react-surface-JCMKXAUY.mjs.map +7 -0
  24. package/dist/lib/neutral/translations.mjs +28 -0
  25. package/dist/lib/neutral/translations.mjs.map +7 -0
  26. package/dist/types/src/ConductorPlugin.d.ts +3 -1
  27. package/dist/types/src/ConductorPlugin.d.ts.map +1 -1
  28. package/dist/types/src/ConductorPlugin.test.d.ts +2 -0
  29. package/dist/types/src/ConductorPlugin.test.d.ts.map +1 -0
  30. package/dist/types/src/capabilities/create-object.d.ts +11 -0
  31. package/dist/types/src/capabilities/create-object.d.ts.map +1 -0
  32. package/dist/types/src/capabilities/index.d.ts +8 -2
  33. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  34. package/dist/types/src/capabilities/react-surface.d.ts +3 -2
  35. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  36. package/dist/types/src/components/index.d.ts +0 -4
  37. package/dist/types/src/components/index.d.ts.map +1 -1
  38. package/dist/types/src/containers/CanvasArticle/CanvasArticle.d.ts +6 -0
  39. package/dist/types/src/containers/CanvasArticle/CanvasArticle.d.ts.map +1 -0
  40. package/dist/types/src/containers/CanvasArticle/index.d.ts +2 -0
  41. package/dist/types/src/containers/CanvasArticle/index.d.ts.map +1 -0
  42. package/dist/types/src/containers/index.d.ts +3 -0
  43. package/dist/types/src/containers/index.d.ts.map +1 -0
  44. package/dist/types/src/index.d.ts +0 -1
  45. package/dist/types/src/index.d.ts.map +1 -1
  46. package/dist/types/src/meta.d.ts +2 -2
  47. package/dist/types/src/meta.d.ts.map +1 -1
  48. package/dist/types/src/plugin.d.ts +3 -0
  49. package/dist/types/src/plugin.d.ts.map +1 -0
  50. package/dist/types/src/translations.d.ts +24 -15
  51. package/dist/types/src/translations.d.ts.map +1 -1
  52. package/dist/types/src/types/index.d.ts +0 -1
  53. package/dist/types/src/types/index.d.ts.map +1 -1
  54. package/dist/types/tsconfig.tsbuildinfo +1 -1
  55. package/package.json +83 -49
  56. package/src/ConductorPlugin.test.ts +27 -0
  57. package/src/ConductorPlugin.tsx +15 -44
  58. package/src/capabilities/create-object.ts +29 -0
  59. package/src/capabilities/index.ts +3 -3
  60. package/src/capabilities/react-surface.tsx +24 -15
  61. package/src/components/index.ts +1 -5
  62. package/src/containers/CanvasArticle/CanvasArticle.tsx +129 -0
  63. package/src/containers/CanvasArticle/index.ts +5 -0
  64. package/src/containers/index.ts +7 -0
  65. package/src/index.ts +0 -1
  66. package/src/meta.ts +4 -3
  67. package/src/plugin.ts +9 -0
  68. package/src/translations.ts +14 -13
  69. package/src/types/index.ts +0 -2
  70. package/dist/lib/browser/CanvasContainer-RJPQZ63D.mjs +0 -96
  71. package/dist/lib/browser/CanvasContainer-RJPQZ63D.mjs.map +0 -7
  72. package/dist/lib/browser/chunk-POMULF74.mjs +0 -25
  73. package/dist/lib/browser/chunk-POMULF74.mjs.map +0 -7
  74. package/dist/lib/browser/chunk-PYKBZYTF.mjs.map +0 -7
  75. package/dist/lib/browser/index.mjs +0 -85
  76. package/dist/lib/browser/index.mjs.map +0 -7
  77. package/dist/lib/browser/intent-resolver-GJHGNHRE.mjs +0 -34
  78. package/dist/lib/browser/intent-resolver-GJHGNHRE.mjs.map +0 -7
  79. package/dist/lib/browser/meta.json +0 -1
  80. package/dist/lib/browser/react-surface-3XDCWHZE.mjs +0 -31
  81. package/dist/lib/browser/react-surface-3XDCWHZE.mjs.map +0 -7
  82. package/dist/lib/browser/types/index.mjs +0 -8
  83. package/dist/lib/node-esm/CanvasContainer-T73T6ENQ.mjs +0 -98
  84. package/dist/lib/node-esm/CanvasContainer-T73T6ENQ.mjs.map +0 -7
  85. package/dist/lib/node-esm/chunk-LNIMDWHI.mjs +0 -26
  86. package/dist/lib/node-esm/chunk-LNIMDWHI.mjs.map +0 -7
  87. package/dist/lib/node-esm/chunk-OKCDSUHC.mjs +0 -26
  88. package/dist/lib/node-esm/chunk-OKCDSUHC.mjs.map +0 -7
  89. package/dist/lib/node-esm/index.mjs +0 -86
  90. package/dist/lib/node-esm/index.mjs.map +0 -7
  91. package/dist/lib/node-esm/intent-resolver-KRUQLZD7.mjs +0 -35
  92. package/dist/lib/node-esm/intent-resolver-KRUQLZD7.mjs.map +0 -7
  93. package/dist/lib/node-esm/meta.json +0 -1
  94. package/dist/lib/node-esm/react-surface-ZORMVPKH.mjs +0 -32
  95. package/dist/lib/node-esm/react-surface-ZORMVPKH.mjs.map +0 -7
  96. package/dist/lib/node-esm/types/index.mjs +0 -9
  97. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  98. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  99. package/dist/types/src/components/CanvasContainer.d.ts +0 -8
  100. package/dist/types/src/components/CanvasContainer.d.ts.map +0 -1
  101. package/dist/types/src/types/schema.d.ts +0 -61
  102. package/dist/types/src/types/schema.d.ts.map +0 -1
  103. package/src/capabilities/intent-resolver.ts +0 -27
  104. package/src/components/CanvasContainer.tsx +0 -106
  105. package/src/types/schema.ts +0 -20
  106. /package/dist/lib/{browser/types → neutral/components}/index.mjs.map +0 -0
  107. /package/dist/lib/{node-esm/types → neutral}/index.mjs.map +0 -0
package/package.json CHANGED
@@ -1,77 +1,111 @@
1
1
  {
2
2
  "name": "@dxos/plugin-conductor",
3
- "version": "0.8.4-main.7ace549",
3
+ "version": "0.8.4-main.8baae0fced",
4
4
  "description": "Composer plugin for conductor.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
7
- "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/dxos/dxos"
10
+ },
11
+ "license": "FSL-1.1-Apache-2.0",
8
12
  "author": "DXOS.org",
9
13
  "sideEffects": true,
10
14
  "type": "module",
15
+ "imports": {
16
+ "#capabilities": {
17
+ "source": "./src/capabilities/index.ts",
18
+ "types": "./dist/types/src/capabilities/index.d.ts",
19
+ "default": "./dist/lib/neutral/capabilities/index.mjs"
20
+ },
21
+ "#components": {
22
+ "source": "./src/components/index.ts",
23
+ "types": "./dist/types/src/components/index.d.ts",
24
+ "default": "./dist/lib/neutral/components/index.mjs"
25
+ },
26
+ "#containers": {
27
+ "source": "./src/containers/index.ts",
28
+ "types": "./dist/types/src/containers/index.d.ts",
29
+ "default": "./dist/lib/neutral/containers/index.mjs"
30
+ },
31
+ "#meta": {
32
+ "source": "./src/meta.ts",
33
+ "types": "./dist/types/src/meta.d.ts",
34
+ "default": "./dist/lib/neutral/meta.mjs"
35
+ },
36
+ "#plugin": {
37
+ "source": "./src/ConductorPlugin.tsx",
38
+ "types": "./dist/types/src/ConductorPlugin.d.ts",
39
+ "default": "./dist/lib/neutral/ConductorPlugin.mjs"
40
+ },
41
+ "#translations": {
42
+ "source": "./src/translations.ts",
43
+ "types": "./dist/types/src/translations.d.ts",
44
+ "default": "./dist/lib/neutral/translations.mjs"
45
+ }
46
+ },
11
47
  "exports": {
12
48
  ".": {
13
49
  "source": "./src/index.ts",
14
50
  "types": "./dist/types/src/index.d.ts",
15
- "browser": "./dist/lib/browser/index.mjs",
16
- "node": "./dist/lib/node-esm/index.mjs"
51
+ "default": "./dist/lib/neutral/index.mjs"
52
+ },
53
+ "./plugin": {
54
+ "source": "./src/plugin.ts",
55
+ "types": "./dist/types/src/plugin.d.ts",
56
+ "default": "./dist/lib/neutral/plugin.mjs"
17
57
  },
18
- "./types": {
19
- "source": "./src/types/index.ts",
20
- "types": "./dist/types/src/types/index.d.ts",
21
- "browser": "./dist/lib/browser/types/index.mjs",
22
- "node": "./dist/lib/node-esm/types/index.mjs"
58
+ "./translations": {
59
+ "source": "./src/translations.ts",
60
+ "types": "./dist/types/src/translations.d.ts",
61
+ "default": "./dist/lib/neutral/translations.mjs"
23
62
  }
24
63
  },
25
64
  "types": "dist/types/src/index.d.ts",
26
- "typesVersions": {
27
- "*": {
28
- "types": [
29
- "dist/types/src/types/index.d.ts"
30
- ]
31
- }
32
- },
33
65
  "files": [
34
66
  "dist",
35
67
  "src"
36
68
  ],
37
69
  "dependencies": {
38
- "@preact-signals/safe-react": "^0.9.0",
39
- "effect": "3.18.3",
40
- "@dxos/ai": "0.8.4-main.7ace549",
41
- "@dxos/app-framework": "0.8.4-main.7ace549",
42
- "@dxos/assistant": "0.8.4-main.7ace549",
43
- "@dxos/echo": "0.8.4-main.7ace549",
44
- "@dxos/edge-client": "0.8.4-main.7ace549",
45
- "@dxos/functions": "0.8.4-main.7ace549",
46
- "@dxos/functions-runtime": "0.8.4-main.7ace549",
47
- "@dxos/conductor": "0.8.4-main.7ace549",
48
- "@dxos/log": "0.8.4-main.7ace549",
49
- "@dxos/live-object": "0.8.4-main.7ace549",
50
- "@dxos/plugin-client": "0.8.4-main.7ace549",
51
- "@dxos/plugin-space": "0.8.4-main.7ace549",
52
- "@dxos/react-client": "0.8.4-main.7ace549",
53
- "@dxos/debug": "0.8.4-main.7ace549",
54
- "@dxos/react-ui-canvas-compute": "0.8.4-main.7ace549",
55
- "@dxos/react-ui-canvas-editor": "0.8.4-main.7ace549",
56
- "@dxos/react-ui-stack": "0.8.4-main.7ace549",
57
- "@dxos/util": "0.8.4-main.7ace549"
70
+ "effect": "3.20.0",
71
+ "@dxos/ai": "0.8.4-main.8baae0fced",
72
+ "@dxos/app-toolkit": "0.8.4-main.8baae0fced",
73
+ "@dxos/assistant": "0.8.4-main.8baae0fced",
74
+ "@dxos/app-framework": "0.8.4-main.8baae0fced",
75
+ "@dxos/debug": "0.8.4-main.8baae0fced",
76
+ "@dxos/echo": "0.8.4-main.8baae0fced",
77
+ "@dxos/conductor": "0.8.4-main.8baae0fced",
78
+ "@dxos/edge-client": "0.8.4-main.8baae0fced",
79
+ "@dxos/functions": "0.8.4-main.8baae0fced",
80
+ "@dxos/log": "0.8.4-main.8baae0fced",
81
+ "@dxos/plugin-automation": "0.8.4-main.8baae0fced",
82
+ "@dxos/plugin-client": "0.8.4-main.8baae0fced",
83
+ "@dxos/plugin-space": "0.8.4-main.8baae0fced",
84
+ "@dxos/compute": "0.8.4-main.8baae0fced",
85
+ "@dxos/react-ui-canvas-compute": "0.8.4-main.8baae0fced",
86
+ "@dxos/react-ui-canvas-editor": "0.8.4-main.8baae0fced",
87
+ "@dxos/react-client": "0.8.4-main.8baae0fced",
88
+ "@dxos/react-ui-stack": "0.8.4-main.8baae0fced",
89
+ "@dxos/util": "0.8.4-main.8baae0fced",
90
+ "@dxos/react-ui-mosaic": "0.8.4-main.8baae0fced"
58
91
  },
59
92
  "devDependencies": {
60
- "@types/react": "~19.2.2",
61
- "@types/react-dom": "~19.2.2",
62
- "react": "~19.2.0",
63
- "react-dom": "~19.2.0",
64
- "vite": "7.1.9",
65
- "@dxos/react-ui-theme": "0.8.4-main.7ace549",
66
- "@dxos/storybook-utils": "0.8.4-main.7ace549",
67
- "@dxos/react-ui": "0.8.4-main.7ace549"
93
+ "@types/react": "~19.2.7",
94
+ "@types/react-dom": "~19.2.3",
95
+ "react": "~19.2.3",
96
+ "react-dom": "~19.2.3",
97
+ "vite": "^8.0.13",
98
+ "@dxos/plugin-testing": "0.8.4-main.8baae0fced",
99
+ "@dxos/storybook-utils": "0.8.4-main.8baae0fced",
100
+ "@dxos/react-ui": "0.8.4-main.8baae0fced",
101
+ "@dxos/ui-theme": "0.8.4-main.8baae0fced"
68
102
  },
69
103
  "peerDependencies": {
70
- "effect": "^3.13.3",
71
- "react": "^19.0.0",
72
- "react-dom": "^19.0.0",
73
- "@dxos/react-ui": "0.8.4-main.7ace549",
74
- "@dxos/react-ui-theme": "0.8.4-main.7ace549"
104
+ "effect": "3.20.0",
105
+ "react": "~19.2.3",
106
+ "react-dom": "~19.2.3",
107
+ "@dxos/react-ui": "0.8.4-main.8baae0fced",
108
+ "@dxos/ui-theme": "0.8.4-main.8baae0fced"
75
109
  },
76
110
  "publishConfig": {
77
111
  "access": "public"
@@ -0,0 +1,27 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { describe, test } from 'vitest';
6
+
7
+ import { ClientPlugin } from '@dxos/plugin-client/plugin';
8
+ import { createComposerTestApp } from '@dxos/plugin-testing/harness';
9
+
10
+ import { ConductorPlugin } from '#plugin';
11
+
12
+ import { meta } from './meta';
13
+
14
+ const moduleId = (name: string) => `${meta.id}.module.${name}`;
15
+
16
+ describe('ConductorPlugin', () => {
17
+ test('modules activate on the expected events', async ({ expect }) => {
18
+ await using harness = await createComposerTestApp({
19
+ plugins: [ClientPlugin({}), ConductorPlugin()],
20
+ });
21
+
22
+ // Modules expected to be active after a normal startup.
23
+ expect(harness.manager.getActive()).toEqual(
24
+ expect.arrayContaining([moduleId('CreateObject'), moduleId('schema'), moduleId('ReactSurface')]),
25
+ );
26
+ });
27
+ });
@@ -2,50 +2,21 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { Capabilities, Events, contributes, createIntent, defineModule, definePlugin } from '@dxos/app-framework';
5
+ import { Plugin } from '@dxos/app-framework';
6
+ import { AppPlugin } from '@dxos/app-toolkit';
6
7
  import { ComputeGraph } from '@dxos/conductor';
7
- import { ClientCapabilities, ClientEvents } from '@dxos/plugin-client';
8
- import { type CreateObjectIntent } from '@dxos/plugin-space/types';
9
- import { CanvasBoardType } from '@dxos/react-ui-canvas-editor';
8
+ import { CanvasBoard } from '@dxos/react-ui-canvas-editor';
10
9
 
11
- import { IntentResolver, ReactSurface } from './capabilities';
12
- import { meta } from './meta';
13
- import { translations } from './translations';
14
- import { ConductorAction } from './types';
10
+ import { CreateObject, ReactSurface } from '#capabilities';
11
+ import { meta } from '#meta';
12
+ import { translations } from '#translations';
15
13
 
16
- export const ConductorPlugin = definePlugin(meta, () => [
17
- defineModule({
18
- id: `${meta.id}/module/translations`,
19
- activatesOn: Events.SetupTranslations,
20
- activate: () => contributes(Capabilities.Translations, translations),
21
- }),
22
- defineModule({
23
- id: `${meta.id}/module/metadata`,
24
- activatesOn: Events.SetupMetadata,
25
- activate: () =>
26
- contributes(Capabilities.Metadata, {
27
- id: CanvasBoardType.typename,
28
- metadata: {
29
- icon: 'ph--infinity--regular',
30
- iconHue: 'sky',
31
- createObjectIntent: (() => createIntent(ConductorAction.Create)) satisfies CreateObjectIntent,
32
- addToCollectionOnCreate: true,
33
- },
34
- }),
35
- }),
36
- defineModule({
37
- id: `${meta.id}/module/schema`,
38
- activatesOn: ClientEvents.SetupSchema,
39
- activate: () => contributes(ClientCapabilities.Schema, [CanvasBoardType, ComputeGraph]),
40
- }),
41
- defineModule({
42
- id: `${meta.id}/module/react-surface`,
43
- activatesOn: Events.SetupReactSurface,
44
- activate: ReactSurface,
45
- }),
46
- defineModule({
47
- id: `${meta.id}/module/intent-resolver`,
48
- activatesOn: Events.SetupIntentResolver,
49
- activate: IntentResolver,
50
- }),
51
- ]);
14
+ export const ConductorPlugin = Plugin.define(meta).pipe(
15
+ AppPlugin.addCreateObjectModule({ activate: CreateObject }),
16
+ AppPlugin.addSchemaModule({ schema: [CanvasBoard.CanvasBoard, ComputeGraph] }),
17
+ AppPlugin.addSurfaceModule({ activate: ReactSurface }),
18
+ AppPlugin.addTranslationsModule({ translations }),
19
+ Plugin.make,
20
+ );
21
+
22
+ export default ConductorPlugin;
@@ -0,0 +1,29 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Capability } from '@dxos/app-framework';
8
+ import { Operation } from '@dxos/compute';
9
+ import { SpaceOperation } from '@dxos/plugin-space';
10
+ import { SpaceCapabilities } from '@dxos/plugin-space';
11
+ import { CanvasBoard } from '@dxos/react-ui-canvas-editor';
12
+
13
+ export default Capability.makeModule(
14
+ Effect.fnUntraced(function* () {
15
+ return Capability.contributes(SpaceCapabilities.CreateObjectEntry, {
16
+ id: CanvasBoard.CanvasBoard.typename,
17
+ createObject: (props, options) =>
18
+ Effect.gen(function* () {
19
+ const object = CanvasBoard.make(props);
20
+ return yield* Operation.invoke(SpaceOperation.AddObject, {
21
+ object,
22
+ target: options.target,
23
+ hidden: true,
24
+ targetNodeId: options.targetNodeId,
25
+ });
26
+ }),
27
+ });
28
+ }),
29
+ );
@@ -2,7 +2,7 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { lazy } from '@dxos/app-framework';
5
+ import { Capability } from '@dxos/app-framework';
6
6
 
7
- export const IntentResolver = lazy(() => import('./intent-resolver'));
8
- export const ReactSurface = lazy(() => import('./react-surface'));
7
+ export const CreateObject = Capability.lazy('CreateObject', () => import('./create-object'));
8
+ export const ReactSurface = Capability.lazy('ReactSurface', () => import('./react-surface'));
@@ -2,22 +2,31 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
+ import * as Effect from 'effect/Effect';
5
6
  import React from 'react';
6
7
 
7
- import { Capabilities, contributes, createSurface } from '@dxos/app-framework';
8
- import { Obj } from '@dxos/echo';
9
- import { CanvasBoardType } from '@dxos/react-ui-canvas-editor';
8
+ import { Capabilities, Capability } from '@dxos/app-framework';
9
+ import { Surface } from '@dxos/app-framework/ui';
10
+ import { AppSurface } from '@dxos/app-toolkit/ui';
11
+ import { CanvasBoard } from '@dxos/react-ui-canvas-editor';
10
12
 
11
- import { CanvasContainer } from '../components';
12
- import { meta } from '../meta';
13
+ import { CanvasArticle } from '#containers';
13
14
 
14
- export default () =>
15
- contributes(
16
- Capabilities.ReactSurface,
17
- createSurface({
18
- id: meta.id,
19
- role: ['article', 'section'],
20
- filter: (data): data is { subject: CanvasBoardType } => Obj.instanceOf(CanvasBoardType, data.subject),
21
- component: ({ data, role }) => <CanvasContainer canvas={data.subject} role={role} />,
22
- }),
23
- );
15
+ export default Capability.makeModule(() =>
16
+ Effect.succeed(
17
+ Capability.contributes(
18
+ Capabilities.ReactSurface,
19
+ Surface.create({
20
+ id: 'root',
21
+ // TODO(wittjosiah): Split into multiple surfaces if this filter proves too strict for non-article roles.
22
+ filter: AppSurface.oneOf(
23
+ AppSurface.object(AppSurface.Article, CanvasBoard.CanvasBoard),
24
+ AppSurface.object(AppSurface.Section, CanvasBoard.CanvasBoard),
25
+ ),
26
+ component: ({ data, role }) => (
27
+ <CanvasArticle role={role} subject={data.subject} attendableId={data.attendableId} />
28
+ ),
29
+ }),
30
+ ),
31
+ ),
32
+ );
@@ -1,7 +1,3 @@
1
1
  //
2
- // Copyright 2023 DXOS.org
2
+ // Copyright 2025 DXOS.org
3
3
  //
4
-
5
- import { lazy } from 'react';
6
-
7
- export const CanvasContainer = lazy(() => import('./CanvasContainer'));
@@ -0,0 +1,129 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+ import type * as Exit from 'effect/Exit';
7
+ import React, { Fragment, useEffect, useMemo, useRef } from 'react';
8
+
9
+ import { AiService } from '@dxos/ai';
10
+ import { Capabilities } from '@dxos/app-framework';
11
+ import { useCapability } from '@dxos/app-framework/ui';
12
+ import { type AppSurface } from '@dxos/app-toolkit/ui';
13
+ import { Credential, Operation, OperationRegistry, ServiceResolver } from '@dxos/compute';
14
+ import { ComputeGraphModel } from '@dxos/conductor';
15
+ import { Database, Feed, Obj } from '@dxos/echo';
16
+ import { QueueService } from '@dxos/functions';
17
+ import { useObject } from '@dxos/react-client/echo';
18
+ import { Flex, type FlexProps } from '@dxos/react-ui';
19
+ import {
20
+ ComputeContext,
21
+ ComputeGraphController,
22
+ type ComputeShape,
23
+ ComputeShapeLayout,
24
+ computeShapes,
25
+ useComputeGraphController,
26
+ useGraphMonitor,
27
+ } from '@dxos/react-ui-canvas-compute';
28
+ import {
29
+ type CanvasBoard,
30
+ CanvasGraphModel,
31
+ Editor,
32
+ type EditorController,
33
+ KeyboardContainer,
34
+ ShapeRegistry,
35
+ } from '@dxos/react-ui-canvas-editor';
36
+
37
+ export type CanvasArticleProps = AppSurface.ObjectArticleProps<CanvasBoard.CanvasBoard>;
38
+
39
+ export const CanvasArticle = ({ role, subject, attendableId: _attendableId }: CanvasArticleProps) => {
40
+ const [canvas] = useObject(subject);
41
+ const id = Obj.getDXN(canvas).toString();
42
+ const graph = useMemo(
43
+ () => CanvasGraphModel.create<ComputeShape>(canvas.layout, (fn) => Obj.update(subject, fn)),
44
+ [subject, canvas.layout],
45
+ );
46
+ const controller = useGraphController(subject);
47
+ const graphMonitor = useGraphMonitor(controller?.graph);
48
+ const registry = useMemo(() => new ShapeRegistry(computeShapes), []);
49
+ const editorRef = useRef<EditorController>(null);
50
+ useComputeGraphController({ controller, graph, editorRef });
51
+
52
+ // Layout.
53
+ const layout = useMemo(
54
+ () => (controller && registry ? new ComputeShapeLayout(controller, registry) : undefined),
55
+ [controller, registry],
56
+ );
57
+
58
+ if (!controller) {
59
+ return;
60
+ }
61
+
62
+ const Root = role === 'section' ? Container : Fragment;
63
+
64
+ return (
65
+ <ComputeContext.Provider value={{ controller }}>
66
+ <Root>
67
+ <KeyboardContainer id={id}>
68
+ <Editor.Root
69
+ id={id}
70
+ ref={editorRef}
71
+ graph={graph}
72
+ graphMonitor={graphMonitor as any}
73
+ registry={registry}
74
+ layout={layout}
75
+ >
76
+ <Editor.Canvas />
77
+ <Editor.UI showTools />
78
+ </Editor.Root>
79
+ </KeyboardContainer>
80
+ </Root>
81
+ </ComputeContext.Provider>
82
+ );
83
+ };
84
+
85
+ const Container = (props: FlexProps) => <Flex {...props} classNames='aspect-square' />;
86
+
87
+ const useGraphController = (canvas: CanvasBoard.CanvasBoard) => {
88
+ const db = Obj.getDatabase(canvas);
89
+ const processManagerRuntime = useCapability(Capabilities.ProcessManagerRuntime);
90
+ const [computeGraph] = useObject(canvas.computeGraph);
91
+ const controller = useMemo(() => {
92
+ if (!canvas.computeGraph?.target || !db) {
93
+ return null;
94
+ }
95
+ const spaceId = db.spaceId;
96
+ const model = new ComputeGraphModel(canvas.computeGraph?.target);
97
+ const spaceLayer = ServiceResolver.provide(
98
+ { space: spaceId },
99
+ AiService.AiService,
100
+ Database.Service,
101
+ Feed.FeedService,
102
+ QueueService,
103
+ Credential.CredentialsService,
104
+ Operation.Service,
105
+ OperationRegistry.Service,
106
+ );
107
+ const computeGraphRuntime = {
108
+ runPromiseExit: <A, E>(effect: Effect.Effect<A, E, any>): Promise<Exit.Exit<A, E>> =>
109
+ processManagerRuntime.runPromiseExit(effect.pipe(Effect.provide(spaceLayer)) as any) as Promise<
110
+ Exit.Exit<A, E>
111
+ >,
112
+ };
113
+ const controller = new ComputeGraphController(computeGraphRuntime, model);
114
+ return controller;
115
+ }, [computeGraph, db, processManagerRuntime]);
116
+
117
+ useEffect(() => {
118
+ if (!controller) {
119
+ return;
120
+ }
121
+
122
+ void controller.open();
123
+ return () => {
124
+ void controller.close();
125
+ };
126
+ }, [controller]);
127
+
128
+ return controller;
129
+ };
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ export { CanvasArticle as default } from './CanvasArticle';
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import { type ComponentType, lazy } from 'react';
6
+
7
+ export const CanvasArticle: ComponentType<any> = lazy(() => import('./CanvasArticle'));
package/src/index.ts CHANGED
@@ -2,5 +2,4 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- export * from './ConductorPlugin';
6
5
  export * from './meta';
package/src/meta.ts CHANGED
@@ -2,12 +2,13 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { type PluginMeta } from '@dxos/app-framework';
5
+ import { type Plugin } from '@dxos/app-framework';
6
6
  import { trim } from '@dxos/util';
7
7
 
8
- export const meta: PluginMeta = {
9
- id: 'dxos.org/plugin/conductor',
8
+ export const meta: Plugin.Meta = {
9
+ id: 'org.dxos.plugin.conductor',
10
10
  name: 'Conductor',
11
+ author: 'DXOS',
11
12
  description: trim`
12
13
  Visual workflow builder using node-based compute graphs to orchestrate complex AI agent pipelines.
13
14
  Connect data sources, transformations, and AI models in a drag-and-drop interface for advanced automation.
package/src/plugin.ts ADDED
@@ -0,0 +1,9 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { Plugin } from '@dxos/app-framework';
6
+
7
+ import { meta } from './meta';
8
+
9
+ export const ConductorPlugin = Plugin.lazy(meta, () => import('#plugin'));
@@ -3,26 +3,27 @@
3
3
  //
4
4
 
5
5
  import { type Resource } from '@dxos/react-ui';
6
- import { CanvasBoardType } from '@dxos/react-ui-canvas-editor';
6
+ import { CanvasBoard } from '@dxos/react-ui-canvas-editor';
7
7
 
8
- import { meta } from './meta';
8
+ import { meta } from '#meta';
9
9
 
10
10
  export const translations = [
11
11
  {
12
12
  'en-US': {
13
- [CanvasBoardType.typename]: {
14
- 'typename label': 'Circuit',
15
- 'typename label_zero': 'Circuits',
16
- 'typename label_one': 'Circuit',
17
- 'typename label_other': 'Circuits',
18
- 'object name placeholder': 'New circuit',
19
- 'rename object label': 'Rename circuit',
20
- 'delete object label': 'Delete circuit',
21
- 'object deleted label': 'Circuit deleted',
13
+ [CanvasBoard.CanvasBoard.typename]: {
14
+ 'typename.label': 'Circuit',
15
+ 'typename.label_zero': 'Circuits',
16
+ 'typename.label_one': 'Circuit',
17
+ 'typename.label_other': 'Circuits',
18
+ 'object-name.placeholder': 'New circuit',
19
+ 'add-object.label': 'Add circuit',
20
+ 'rename-object.label': 'Rename circuit',
21
+ 'delete-object.label': 'Delete circuit',
22
+ 'object-deleted.label': 'Circuit deleted',
22
23
  },
23
24
  [meta.id]: {
24
- 'plugin name': 'Conductor',
25
- 'content placeholder': 'Enter text...',
25
+ 'plugin.name': 'Conductor',
26
+ 'content.placeholder': 'Enter text...',
26
27
  },
27
28
  },
28
29
  },
@@ -1,5 +1,3 @@
1
1
  //
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
-
5
- export * from './schema';