@dxos/plugin-automation 0.6.14-main.1366248

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 (120) hide show
  1. package/LICENSE +8 -0
  2. package/README.md +15 -0
  3. package/dist/lib/browser/PromptContainer-3GUENQHE.mjs +19 -0
  4. package/dist/lib/browser/PromptContainer-3GUENQHE.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-2FOJUVYG.mjs +217 -0
  6. package/dist/lib/browser/chunk-2FOJUVYG.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-J4SYTP4Y.mjs +55 -0
  8. package/dist/lib/browser/chunk-J4SYTP4Y.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-PQLGYMNY.mjs +18 -0
  10. package/dist/lib/browser/chunk-PQLGYMNY.mjs.map +7 -0
  11. package/dist/lib/browser/index.mjs +1150 -0
  12. package/dist/lib/browser/index.mjs.map +7 -0
  13. package/dist/lib/browser/meta.json +1 -0
  14. package/dist/lib/browser/meta.mjs +9 -0
  15. package/dist/lib/browser/meta.mjs.map +7 -0
  16. package/dist/lib/browser/types/index.mjs +16 -0
  17. package/dist/lib/browser/types/index.mjs.map +7 -0
  18. package/dist/lib/node/PromptContainer-74ZRO4HK.cjs +45 -0
  19. package/dist/lib/node/PromptContainer-74ZRO4HK.cjs.map +7 -0
  20. package/dist/lib/node/chunk-4TMTUB4X.cjs +240 -0
  21. package/dist/lib/node/chunk-4TMTUB4X.cjs.map +7 -0
  22. package/dist/lib/node/chunk-JSZ6PAYL.cjs +41 -0
  23. package/dist/lib/node/chunk-JSZ6PAYL.cjs.map +7 -0
  24. package/dist/lib/node/chunk-XS53UP75.cjs +76 -0
  25. package/dist/lib/node/chunk-XS53UP75.cjs.map +7 -0
  26. package/dist/lib/node/index.cjs +1152 -0
  27. package/dist/lib/node/index.cjs.map +7 -0
  28. package/dist/lib/node/meta.cjs +30 -0
  29. package/dist/lib/node/meta.cjs.map +7 -0
  30. package/dist/lib/node/meta.json +1 -0
  31. package/dist/lib/node/types/index.cjs +38 -0
  32. package/dist/lib/node/types/index.cjs.map +7 -0
  33. package/dist/lib/node-esm/PromptContainer-5OK4GWIR.mjs +20 -0
  34. package/dist/lib/node-esm/PromptContainer-5OK4GWIR.mjs.map +7 -0
  35. package/dist/lib/node-esm/chunk-AAUSG7OA.mjs +56 -0
  36. package/dist/lib/node-esm/chunk-AAUSG7OA.mjs.map +7 -0
  37. package/dist/lib/node-esm/chunk-B35UD3D7.mjs +20 -0
  38. package/dist/lib/node-esm/chunk-B35UD3D7.mjs.map +7 -0
  39. package/dist/lib/node-esm/chunk-FN6DOJZP.mjs +218 -0
  40. package/dist/lib/node-esm/chunk-FN6DOJZP.mjs.map +7 -0
  41. package/dist/lib/node-esm/index.mjs +1151 -0
  42. package/dist/lib/node-esm/index.mjs.map +7 -0
  43. package/dist/lib/node-esm/meta.json +1 -0
  44. package/dist/lib/node-esm/meta.mjs +10 -0
  45. package/dist/lib/node-esm/meta.mjs.map +7 -0
  46. package/dist/lib/node-esm/types/index.mjs +17 -0
  47. package/dist/lib/node-esm/types/index.mjs.map +7 -0
  48. package/dist/types/src/AutomationPlugin.d.ts +4 -0
  49. package/dist/types/src/AutomationPlugin.d.ts.map +1 -0
  50. package/dist/types/src/components/AutomationPanel.d.ts +3 -0
  51. package/dist/types/src/components/AutomationPanel.d.ts.map +1 -0
  52. package/dist/types/src/components/Chain.d.ts +12 -0
  53. package/dist/types/src/components/Chain.d.ts.map +1 -0
  54. package/dist/types/src/components/PromptContainer.d.ts +6 -0
  55. package/dist/types/src/components/PromptContainer.d.ts.map +1 -0
  56. package/dist/types/src/components/PromptEditor/PromptEditor.d.ts +10 -0
  57. package/dist/types/src/components/PromptEditor/PromptEditor.d.ts.map +1 -0
  58. package/dist/types/src/components/PromptEditor/PromptEditor.stories.d.ts +6 -0
  59. package/dist/types/src/components/PromptEditor/PromptEditor.stories.d.ts.map +1 -0
  60. package/dist/types/src/components/PromptEditor/index.d.ts +2 -0
  61. package/dist/types/src/components/PromptEditor/index.d.ts.map +1 -0
  62. package/dist/types/src/components/PromptEditor/prompt-extension.d.ts +4 -0
  63. package/dist/types/src/components/PromptEditor/prompt-extension.d.ts.map +1 -0
  64. package/dist/types/src/components/PromptEditor/types.d.ts +18 -0
  65. package/dist/types/src/components/PromptEditor/types.d.ts.map +1 -0
  66. package/dist/types/src/components/TriggerEditor/Form.d.ts +5 -0
  67. package/dist/types/src/components/TriggerEditor/Form.d.ts.map +1 -0
  68. package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts +8 -0
  69. package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts.map +1 -0
  70. package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts +5 -0
  71. package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts.map +1 -0
  72. package/dist/types/src/components/TriggerEditor/email.d.ts +4 -0
  73. package/dist/types/src/components/TriggerEditor/email.d.ts.map +1 -0
  74. package/dist/types/src/components/TriggerEditor/index.d.ts +2 -0
  75. package/dist/types/src/components/TriggerEditor/index.d.ts.map +1 -0
  76. package/dist/types/src/components/TriggerEditor/invokation-handler.d.ts +5 -0
  77. package/dist/types/src/components/TriggerEditor/invokation-handler.d.ts.map +1 -0
  78. package/dist/types/src/components/TriggerEditor/meta.d.ts +25 -0
  79. package/dist/types/src/components/TriggerEditor/meta.d.ts.map +1 -0
  80. package/dist/types/src/components/index.d.ts +6 -0
  81. package/dist/types/src/components/index.d.ts.map +1 -0
  82. package/dist/types/src/index.d.ts +7 -0
  83. package/dist/types/src/index.d.ts.map +1 -0
  84. package/dist/types/src/meta.d.ts +11 -0
  85. package/dist/types/src/meta.d.ts.map +1 -0
  86. package/dist/types/src/presets.d.ts +9 -0
  87. package/dist/types/src/presets.d.ts.map +1 -0
  88. package/dist/types/src/translations.d.ts +18 -0
  89. package/dist/types/src/translations.d.ts.map +1 -0
  90. package/dist/types/src/types/chain.d.ts +71 -0
  91. package/dist/types/src/types/chain.d.ts.map +1 -0
  92. package/dist/types/src/types/index.d.ts +3 -0
  93. package/dist/types/src/types/index.d.ts.map +1 -0
  94. package/dist/types/src/types/types.d.ts +8 -0
  95. package/dist/types/src/types/types.d.ts.map +1 -0
  96. package/package.json +99 -0
  97. package/src/AutomationPlugin.tsx +158 -0
  98. package/src/components/AutomationPanel.tsx +21 -0
  99. package/src/components/Chain.tsx +66 -0
  100. package/src/components/PromptContainer.tsx +19 -0
  101. package/src/components/PromptEditor/PromptEditor.stories.tsx +64 -0
  102. package/src/components/PromptEditor/PromptEditor.tsx +222 -0
  103. package/src/components/PromptEditor/index.ts +5 -0
  104. package/src/components/PromptEditor/prompt-extension.ts +43 -0
  105. package/src/components/PromptEditor/types.tsx +28 -0
  106. package/src/components/TriggerEditor/Form.tsx +18 -0
  107. package/src/components/TriggerEditor/TriggerEditor.stories.tsx +82 -0
  108. package/src/components/TriggerEditor/TriggerEditor.tsx +346 -0
  109. package/src/components/TriggerEditor/email.ts +49 -0
  110. package/src/components/TriggerEditor/index.ts +5 -0
  111. package/src/components/TriggerEditor/invokation-handler.ts +110 -0
  112. package/src/components/TriggerEditor/meta.tsx +225 -0
  113. package/src/components/index.ts +12 -0
  114. package/src/index.ts +12 -0
  115. package/src/meta.ts +16 -0
  116. package/src/presets.ts +248 -0
  117. package/src/translations.ts +31 -0
  118. package/src/types/chain.ts +38 -0
  119. package/src/types/index.ts +6 -0
  120. package/src/types/types.ts +29 -0
@@ -0,0 +1,18 @@
1
+ declare const _default: {
2
+ 'en-US': {
3
+ "dxos.org/plugin/automation": {
4
+ 'plugin name': string;
5
+ 'object placeholder': string;
6
+ 'create object label': string;
7
+ 'create trigger label': string;
8
+ 'create stack section label': string;
9
+ 'command placeholder': string;
10
+ 'template placeholder': string;
11
+ 'value placeholder': string;
12
+ 'select preset template placeholder': string;
13
+ 'open automation panel label': string;
14
+ };
15
+ };
16
+ }[];
17
+ export default _default;
18
+ //# sourceMappingURL=translations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"translations.d.ts","sourceRoot":"","sources":["../../../src/translations.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAMA,wBAwBE"}
@@ -0,0 +1,71 @@
1
+ import { ref, S } from '@dxos/echo-schema';
2
+ export declare enum ChainInputType {
3
+ VALUE = 0,
4
+ PASS_THROUGH = 1,
5
+ RETRIEVER = 2,
6
+ FUNCTION = 3,
7
+ QUERY = 4,
8
+ RESOLVER = 5,
9
+ CONTEXT = 6,
10
+ SCHEMA = 7
11
+ }
12
+ export declare const ChainInputSchema: S.mutable<S.Struct<{
13
+ name: typeof S.String;
14
+ type: S.optional<S.Enums<typeof ChainInputType>>;
15
+ value: S.optional<typeof S.String>;
16
+ }>>;
17
+ export type ChainInput = S.Schema.Type<typeof ChainInputSchema>;
18
+ declare const ChainPromptType_base: import("@dxos/echo-schema").AbstractTypedObject<{
19
+ template: string;
20
+ command?: string | undefined;
21
+ inputs?: {
22
+ name: string;
23
+ type?: ChainInputType | undefined;
24
+ value?: string | undefined;
25
+ }[] | undefined;
26
+ } & {
27
+ id: string;
28
+ }, S.Struct.Encoded<{
29
+ command: S.optional<typeof S.String>;
30
+ template: typeof S.String;
31
+ inputs: S.optional<S.mutable<S.Array$<S.mutable<S.Struct<{
32
+ name: typeof S.String;
33
+ type: S.optional<S.Enums<typeof ChainInputType>>;
34
+ value: S.optional<typeof S.String>;
35
+ }>>>>>;
36
+ }>>;
37
+ export declare class ChainPromptType extends ChainPromptType_base {
38
+ }
39
+ declare const ChainType_base: import("@dxos/echo-schema").AbstractTypedObject<{
40
+ name?: string | undefined;
41
+ prompts?: import("@dxos/echo-schema").Ref<{
42
+ template: string;
43
+ command?: string | undefined;
44
+ inputs?: {
45
+ name: string;
46
+ type?: ChainInputType | undefined;
47
+ value?: string | undefined;
48
+ }[] | undefined;
49
+ } & {
50
+ id: string;
51
+ }>[] | undefined;
52
+ } & {
53
+ id: string;
54
+ }, S.Struct.Encoded<{
55
+ name: S.optional<typeof S.String>;
56
+ prompts: S.optional<S.mutable<S.Array$<ref<{
57
+ template: string;
58
+ command?: string | undefined;
59
+ inputs?: {
60
+ name: string;
61
+ type?: ChainInputType | undefined;
62
+ value?: string | undefined;
63
+ }[] | undefined;
64
+ } & {
65
+ id: string;
66
+ }>>>>;
67
+ }>>;
68
+ export declare class ChainType extends ChainType_base {
69
+ }
70
+ export {};
71
+ //# sourceMappingURL=chain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chain.d.ts","sourceRoot":"","sources":["../../../../src/types/chain.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,GAAG,EAAE,CAAC,EAAe,MAAM,mBAAmB,CAAC;AAGxD,oBAAY,cAAc;IACxB,KAAK,IAAI;IACT,YAAY,IAAI;IAChB,SAAS,IAAI;IACb,QAAQ,IAAI;IACZ,KAAK,IAAI;IACT,QAAQ,IAAI;IACZ,OAAO,IAAI;IACX,MAAM,IAAI;CACX;AAED,eAAO,MAAM,gBAAgB;;;;GAM5B,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,gBAAgB,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;AAEhE,qBAAa,eAAgB,SAAQ,oBAInC;CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEL,qBAAa,SAAU,SAAQ,cAG7B;CAAG"}
@@ -0,0 +1,3 @@
1
+ export * from './chain';
2
+ export * from './types';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/types/index.ts"],"names":[],"mappings":"AAIA,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { GraphBuilderProvides, IntentResolverProvides, MetadataRecordsProvides, SurfaceProvides, TranslationsProvides } from '@dxos/app-framework';
2
+ import { type SchemaProvides } from '@dxos/plugin-client';
3
+ import { type PanelProvides } from '@dxos/plugin-deck/types';
4
+ export declare enum AutomationAction {
5
+ CREATE = "dxos.org/plugin/automation/action/create"
6
+ }
7
+ export type AutomationPluginProvides = SurfaceProvides & IntentResolverProvides & MetadataRecordsProvides & TranslationsProvides & GraphBuilderProvides & SchemaProvides & PanelProvides;
8
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/types/types.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,eAAe,EACf,oBAAoB,EACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAM7D,oBAAY,gBAAgB;IAC1B,MAAM,6CAAgC;CACvC;AAED,MAAM,MAAM,wBAAwB,GAAG,eAAe,GACpD,sBAAsB,GACtB,uBAAuB,GACvB,oBAAoB,GACpB,oBAAoB,GACpB,cAAc,GACd,aAAa,CAAC"}
package/package.json ADDED
@@ -0,0 +1,99 @@
1
+ {
2
+ "name": "@dxos/plugin-automation",
3
+ "version": "0.6.14-main.1366248",
4
+ "description": "Prompt chain plugin",
5
+ "homepage": "https://dxos.org",
6
+ "bugs": "https://github.com/dxos/dxos/issues",
7
+ "license": "MIT",
8
+ "author": "DXOS.org",
9
+ "sideEffects": true,
10
+ "exports": {
11
+ ".": {
12
+ "types": "./dist/types/src/index.d.ts",
13
+ "browser": "./dist/lib/browser/index.mjs",
14
+ "node": "./dist/lib/node-esm/index.mjs"
15
+ },
16
+ "./meta": {
17
+ "types": "./dist/types/src/meta.d.ts",
18
+ "browser": "./dist/lib/browser/meta.mjs",
19
+ "node": "./dist/lib/node-esm/meta.mjs"
20
+ },
21
+ "./types": {
22
+ "types": "./dist/types/src/types/index.d.ts",
23
+ "browser": "./dist/lib/browser/types/index.mjs",
24
+ "node": "./dist/lib/node-esm/types/index.mjs"
25
+ }
26
+ },
27
+ "types": "dist/types/src/index.d.ts",
28
+ "typesVersions": {
29
+ "*": {
30
+ "meta": [
31
+ "dist/types/src/meta.d.ts"
32
+ ],
33
+ "types": [
34
+ "dist/types/src/types/index.d.ts"
35
+ ]
36
+ }
37
+ },
38
+ "files": [
39
+ "dist",
40
+ "src"
41
+ ],
42
+ "dependencies": {
43
+ "@codemirror/language": "^6.10.3",
44
+ "@codemirror/search": "^6.5.6",
45
+ "@codemirror/state": "^6.4.1",
46
+ "@codemirror/view": "^6.34.1",
47
+ "@effect/schema": "^0.75.1",
48
+ "@preact/signals-core": "^1.6.0",
49
+ "lodash.get": "^4.4.2",
50
+ "@dxos/app-framework": "0.6.14-main.1366248",
51
+ "@dxos/async": "0.6.14-main.1366248",
52
+ "@dxos/context": "0.6.14-main.1366248",
53
+ "@dxos/chain": "0.6.14-main.1366248",
54
+ "@dxos/echo-db": "0.6.14-main.1366248",
55
+ "@dxos/echo-schema": "0.6.14-main.1366248",
56
+ "@dxos/functions": "0.6.14-main.1366248",
57
+ "@dxos/invariant": "0.6.14-main.1366248",
58
+ "@dxos/keys": "0.6.14-main.1366248",
59
+ "@dxos/plugin-chess": "0.6.14-main.1366248",
60
+ "@dxos/plugin-client": "0.6.14-main.1366248",
61
+ "@dxos/plugin-graph": "0.6.14-main.1366248",
62
+ "@dxos/plugin-deck": "0.6.14-main.1366248",
63
+ "@dxos/log": "0.6.14-main.1366248",
64
+ "@dxos/plugin-inbox": "0.6.14-main.1366248",
65
+ "@dxos/plugin-ipfs": "0.6.14-main.1366248",
66
+ "@dxos/plugin-markdown": "0.6.14-main.1366248",
67
+ "@dxos/plugin-script": "0.6.14-main.1366248",
68
+ "@dxos/plugin-sketch": "0.6.14-main.1366248",
69
+ "@dxos/plugin-stack": "0.6.14-main.1366248",
70
+ "@dxos/plugin-space": "0.6.14-main.1366248",
71
+ "@dxos/react-ui-editor": "0.6.14-main.1366248",
72
+ "@dxos/react-client": "0.6.14-main.1366248",
73
+ "@dxos/util": "0.6.14-main.1366248"
74
+ },
75
+ "devDependencies": {
76
+ "@phosphor-icons/react": "^2.1.5",
77
+ "@types/lodash.get": "^4.4.7",
78
+ "@types/react": "~18.2.0",
79
+ "@types/react-dom": "~18.2.0",
80
+ "react": "~18.2.0",
81
+ "react-dom": "~18.2.0",
82
+ "vite": "5.4.7",
83
+ "@dxos/echo-db": "0.6.14-main.1366248",
84
+ "@dxos/random": "0.6.14-main.1366248",
85
+ "@dxos/react-ui": "0.6.14-main.1366248",
86
+ "@dxos/storybook-utils": "0.6.14-main.1366248",
87
+ "@dxos/react-ui-theme": "0.6.14-main.1366248"
88
+ },
89
+ "peerDependencies": {
90
+ "@phosphor-icons/react": "^2.1.5",
91
+ "react": "~18.2.0",
92
+ "react-dom": "~18.2.0",
93
+ "@dxos/react-ui": "0.6.14-main.1366248",
94
+ "@dxos/react-ui-theme": "0.6.14-main.1366248"
95
+ },
96
+ "publishConfig": {
97
+ "access": "public"
98
+ }
99
+ }
@@ -0,0 +1,158 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import React from 'react';
6
+
7
+ import { type PluginDefinition, parseMetadataResolverPlugin, resolvePlugin } from '@dxos/app-framework';
8
+ import { FunctionDef, FunctionTrigger } from '@dxos/functions/types';
9
+ import { invariant } from '@dxos/invariant';
10
+ import { parseClientPlugin } from '@dxos/plugin-client';
11
+ import { createExtension, toSignal } from '@dxos/plugin-graph';
12
+ import { getTypename, loadObjectReferences, parseId } from '@dxos/react-client/echo';
13
+
14
+ import { AutomationPanel } from './components';
15
+ import meta, { AUTOMATION_PLUGIN } from './meta';
16
+ import translations from './translations';
17
+ import { AutomationAction, type AutomationPluginProvides, ChainPromptType, ChainType } from './types';
18
+
19
+ // TODO(burdon): Prompt article.
20
+ // TODO(burdon): Trigger panel.
21
+
22
+ export const AutomationPlugin = (): PluginDefinition<AutomationPluginProvides> => {
23
+ return {
24
+ meta,
25
+ provides: {
26
+ metadata: {
27
+ records: {
28
+ [ChainType.typename]: {
29
+ placeholder: ['object placeholder', { ns: AUTOMATION_PLUGIN }],
30
+ icon: 'ph--magic-wand--regular',
31
+ // TODO(wittjosiah): Move out of metadata.
32
+ loadReferences: (chain: ChainType) => loadObjectReferences(chain, (chain) => chain.prompts),
33
+ },
34
+ },
35
+ },
36
+ translations,
37
+ echo: {
38
+ schema: [ChainType, ChainPromptType, FunctionDef, FunctionTrigger],
39
+ },
40
+ complementary: {
41
+ panels: [
42
+ {
43
+ id: 'automation',
44
+ label: ['open automation panel label', { ns: AUTOMATION_PLUGIN }],
45
+ icon: 'ph--flow-arrow--regular',
46
+ },
47
+ ],
48
+ },
49
+ graph: {
50
+ builder: (plugins) => {
51
+ const clientPlugin = resolvePlugin(plugins, parseClientPlugin);
52
+ const metadataPlugin = resolvePlugin(plugins, parseMetadataResolverPlugin);
53
+ const resolve = metadataPlugin?.provides.metadata.resolver;
54
+ const client = clientPlugin?.provides.client;
55
+ invariant(resolve);
56
+ invariant(client);
57
+
58
+ return [
59
+ // Create nodes for object settings.
60
+ createExtension({
61
+ id: `${AUTOMATION_PLUGIN}/automation-for-subject`,
62
+ resolver: ({ id }) => {
63
+ if (!id.endsWith('~automation')) {
64
+ return;
65
+ }
66
+
67
+ const type = 'orphan-settings-for-subject';
68
+ const icon = 'ph--flow-arrow--regular';
69
+
70
+ const [subjectId] = id.split('~');
71
+ const { spaceId, objectId } = parseId(subjectId);
72
+ const space = client.spaces.get().find((space) => space.id === spaceId);
73
+ if (!objectId) {
74
+ // TODO(burdon): Ref SPACE_PLUGIN ns.
75
+ const label = space
76
+ ? space.properties.name || ['unnamed space label', { ns: AUTOMATION_PLUGIN }]
77
+ : ['unnamed object settings label', { ns: AUTOMATION_PLUGIN }];
78
+
79
+ // TODO(wittjosiah): Support comments for arbitrary subjects.
80
+ // This is to ensure that the comments panel is not stuck on an old object.
81
+ return {
82
+ id,
83
+ type,
84
+ data: null,
85
+ properties: {
86
+ icon,
87
+ label,
88
+ showResolvedThreads: false,
89
+ object: null,
90
+ space,
91
+ },
92
+ };
93
+ }
94
+
95
+ const object = toSignal(
96
+ (onChange) => {
97
+ const timeout = setTimeout(async () => {
98
+ await space?.db.loadObjectById(objectId);
99
+ onChange();
100
+ });
101
+
102
+ return () => clearTimeout(timeout);
103
+ },
104
+ () => space?.db.getObjectById(objectId),
105
+ subjectId,
106
+ );
107
+ if (!object || !subjectId) {
108
+ return;
109
+ }
110
+
111
+ const meta = resolve(getTypename(object) ?? '');
112
+ const label = meta.label?.(object) ||
113
+ object.name ||
114
+ meta.placeholder || ['unnamed object settings label', { ns: AUTOMATION_PLUGIN }];
115
+
116
+ return {
117
+ id,
118
+ type,
119
+ data: null,
120
+ properties: {
121
+ icon,
122
+ label,
123
+ object,
124
+ },
125
+ };
126
+ },
127
+ }),
128
+ ];
129
+ },
130
+ },
131
+ surface: {
132
+ component: ({ data, role }) => {
133
+ switch (role) {
134
+ // case 'article':
135
+ // return data.object instanceof ChainType ? <ChainArticle chain={data.object} /> : null;
136
+
137
+ case 'complementary--automation':
138
+ return <AutomationPanel />;
139
+ }
140
+
141
+ return null;
142
+ },
143
+ },
144
+ intent: {
145
+ resolver: (intent) => {
146
+ switch (intent.action) {
147
+ case AutomationAction.CREATE: {
148
+ return {
149
+ // data: create(ChainType, { prompts: [] }),
150
+ // data: create(FunctionTrigger, { function: '', spec: { type: 'timer', cron: '' } }),
151
+ };
152
+ }
153
+ }
154
+ },
155
+ },
156
+ },
157
+ };
158
+ };
@@ -0,0 +1,21 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import React from 'react';
6
+
7
+ import { Button, Icon, Toolbar } from '@dxos/react-ui';
8
+
9
+ export const AutomationPanel = () => {
10
+ const handleCreate = () => {};
11
+
12
+ return (
13
+ <div className='flex flex-col'>
14
+ <Toolbar.Root classNames='p-2'>
15
+ <Button onClick={handleCreate}>
16
+ <Icon icon='ph--plus--regular' />
17
+ </Button>
18
+ </Toolbar.Root>
19
+ </div>
20
+ );
21
+ };
@@ -0,0 +1,66 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import React, { type FC } from 'react';
6
+
7
+ import { getSpace } from '@dxos/react-client/echo';
8
+ import { Select, useTranslation } from '@dxos/react-ui';
9
+ import { nonNullable } from '@dxos/util';
10
+
11
+ import { PromptEditor } from './PromptEditor';
12
+ import { AUTOMATION_PLUGIN } from '../meta';
13
+ import { chainPresets, type Preset } from '../presets';
14
+ import { type ChainType } from '../types';
15
+
16
+ export type ChainProps = {
17
+ chain: ChainType;
18
+ };
19
+
20
+ export const Chain = ({ chain }: ChainProps) => {
21
+ const space = getSpace(chain);
22
+ if (!space) {
23
+ return null;
24
+ }
25
+
26
+ const handleSelectPreset = (preset: Preset) => {
27
+ chain.name = preset.title;
28
+ // TODO(burdon): API issue.
29
+ chain.prompts?.filter(nonNullable).forEach((prompt) => space.db.remove(prompt));
30
+ chain.prompts = [preset.createPrompt()];
31
+ };
32
+
33
+ return (
34
+ <div className='flex flex-col my-2 gap-4'>
35
+ {chain.prompts?.filter(nonNullable).map((prompt, i) => <PromptEditor key={i} prompt={prompt} />)}
36
+ <div className='p-2'>
37
+ <ChainPresets presets={chainPresets} onSelect={handleSelectPreset} />
38
+ </div>
39
+ </div>
40
+ );
41
+ };
42
+
43
+ export const ChainPresets: FC<{ presets: Preset[]; onSelect: (preset: Preset) => void }> = ({ presets, onSelect }) => {
44
+ const { t } = useTranslation(AUTOMATION_PLUGIN);
45
+
46
+ return (
47
+ <Select.Root
48
+ onValueChange={(value) => {
49
+ onSelect(presets.find(({ id }) => id === value)!);
50
+ }}
51
+ >
52
+ <Select.TriggerButton classNames='w-full' placeholder={t('select preset template placeholder')} />
53
+ <Select.Portal>
54
+ <Select.Content>
55
+ <Select.Viewport>
56
+ {presets.map(({ id, title }) => (
57
+ <Select.Option key={id} value={id}>
58
+ {title}
59
+ </Select.Option>
60
+ ))}
61
+ </Select.Viewport>
62
+ </Select.Content>
63
+ </Select.Portal>
64
+ </Select.Root>
65
+ );
66
+ };
@@ -0,0 +1,19 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import React from 'react';
6
+
7
+ import { PromptEditor, type PromptEditorProps } from './PromptEditor';
8
+
9
+ type PromptContainerProps = PromptEditorProps;
10
+
11
+ const PromptContainer = (props: PromptContainerProps) => {
12
+ return (
13
+ <div role='none' className='row-span-2 pli-2'>
14
+ <PromptEditor {...props} />
15
+ </div>
16
+ );
17
+ };
18
+
19
+ export default PromptContainer;
@@ -0,0 +1,64 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import '@dxos-theme';
6
+
7
+ import { type Meta } from '@storybook/react';
8
+ import React, { useState } from 'react';
9
+
10
+ import { create } from '@dxos/echo-schema';
11
+ import { useClient } from '@dxos/react-client';
12
+ import { withClientProvider } from '@dxos/react-client/testing';
13
+ import { withLayout, withTheme } from '@dxos/storybook-utils';
14
+
15
+ import { PromptEditor } from './PromptEditor';
16
+ import translations from '../../translations';
17
+ import { ChainPromptType, ChainType } from '../../types';
18
+
19
+ const template = [
20
+ '# Comment',
21
+ '',
22
+ 'You are a machine that is an expert chess player.',
23
+ 'The move history of the current game is: {history}',
24
+ 'If asked to suggest a move explain why it is a good move.',
25
+ '',
26
+ '---',
27
+ '',
28
+ '{input}',
29
+ ].join('\n');
30
+
31
+ const DefaultStory = () => {
32
+ const client = useClient();
33
+ const [chain] = useState(() => {
34
+ const space = client.spaces.default;
35
+ return space.db.add(
36
+ create(ChainType, {
37
+ prompts: [create(ChainPromptType, { command: 'test', template, inputs: [] })],
38
+ }),
39
+ );
40
+ });
41
+
42
+ return (
43
+ <div role='none' className='flex w-[350px] border border-separator overflow-hidden'>
44
+ <PromptEditor prompt={chain.prompts![0]!} />
45
+ </div>
46
+ );
47
+ };
48
+
49
+ export const Default = {};
50
+
51
+ const meta: Meta = {
52
+ title: 'plugins/plugin-automation/PromptTemplate',
53
+ render: DefaultStory,
54
+ decorators: [
55
+ withClientProvider({ createIdentity: true, createSpace: true, types: [ChainType, ChainPromptType] }),
56
+ withLayout({ fullscreen: true, classNames: 'flex justify-center m-2' }),
57
+ withTheme,
58
+ ],
59
+ parameters: {
60
+ translations,
61
+ },
62
+ };
63
+
64
+ export default meta;