@dxos/plugin-automation 0.7.5-main.9d2a38b → 0.7.5-main.e94eead

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 (169) hide show
  1. package/dist/lib/browser/AutomationPanel-ITYXSN5Z.mjs +132 -0
  2. package/dist/lib/browser/AutomationPanel-ITYXSN5Z.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-HKX3D3ZP.mjs → chunk-OFDNNRLE.mjs} +4 -7
  4. package/dist/lib/browser/{chunk-HKX3D3ZP.mjs.map → chunk-OFDNNRLE.mjs.map} +3 -3
  5. package/dist/lib/browser/chunk-U7QLNY2S.mjs +8 -0
  6. package/dist/lib/browser/chunk-U7QLNY2S.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-WY2C7JY4.mjs +119 -0
  8. package/dist/lib/browser/chunk-WY2C7JY4.mjs.map +7 -0
  9. package/dist/lib/browser/complementary-panel-4CPOJL4Y.mjs +56 -0
  10. package/dist/lib/browser/complementary-panel-4CPOJL4Y.mjs.map +7 -0
  11. package/dist/lib/browser/index.mjs +21 -313
  12. package/dist/lib/browser/index.mjs.map +4 -4
  13. package/dist/lib/browser/meta.json +1 -1
  14. package/dist/lib/browser/{react-surface-LL72F3F4.mjs → react-surface-SAPMN4PF.mjs} +4 -11
  15. package/dist/lib/browser/react-surface-SAPMN4PF.mjs.map +7 -0
  16. package/dist/lib/node/{AutomationPanel-PPODB5XA.cjs → AutomationPanel-X33HHDMQ.cjs} +19 -117
  17. package/dist/lib/node/AutomationPanel-X33HHDMQ.cjs.map +7 -0
  18. package/dist/lib/node/chunk-7Q5SNGCL.cjs +148 -0
  19. package/dist/lib/node/chunk-7Q5SNGCL.cjs.map +7 -0
  20. package/dist/lib/node/{chunk-25AQIF3L.cjs → chunk-CB5OB6JH.cjs} +5 -8
  21. package/dist/lib/node/chunk-CB5OB6JH.cjs.map +7 -0
  22. package/dist/lib/node/{chunk-5VF5JKUN.cjs → chunk-ORMEYEBE.cjs} +7 -10
  23. package/dist/lib/node/{chunk-5VF5JKUN.cjs.map → chunk-ORMEYEBE.cjs.map} +3 -3
  24. package/dist/lib/node/complementary-panel-ZYJJ42ZU.cjs +72 -0
  25. package/dist/lib/node/complementary-panel-ZYJJ42ZU.cjs.map +7 -0
  26. package/dist/lib/node/index.cjs +26 -318
  27. package/dist/lib/node/index.cjs.map +4 -4
  28. package/dist/lib/node/meta.json +1 -1
  29. package/dist/lib/node/{react-surface-DVAU4MGD.cjs → react-surface-2WRVAPGR.cjs} +9 -15
  30. package/dist/lib/node/react-surface-2WRVAPGR.cjs.map +7 -0
  31. package/dist/lib/node-esm/AutomationPanel-HY3GB4BT.mjs +133 -0
  32. package/dist/lib/node-esm/AutomationPanel-HY3GB4BT.mjs.map +7 -0
  33. package/dist/lib/node-esm/{chunk-X3LPRWIL.mjs → chunk-6MUUH67V.mjs} +4 -7
  34. package/dist/lib/node-esm/{chunk-X3LPRWIL.mjs.map → chunk-6MUUH67V.mjs.map} +3 -3
  35. package/dist/lib/node-esm/{chunk-XW7TEQA3.mjs → chunk-R3P2WPBQ.mjs} +2 -4
  36. package/dist/lib/node-esm/chunk-R3P2WPBQ.mjs.map +7 -0
  37. package/dist/lib/node-esm/chunk-UDD2VA6G.mjs +120 -0
  38. package/dist/lib/node-esm/chunk-UDD2VA6G.mjs.map +7 -0
  39. package/dist/lib/node-esm/complementary-panel-S42RIIAY.mjs +57 -0
  40. package/dist/lib/node-esm/complementary-panel-S42RIIAY.mjs.map +7 -0
  41. package/dist/lib/node-esm/index.mjs +21 -313
  42. package/dist/lib/node-esm/index.mjs.map +4 -4
  43. package/dist/lib/node-esm/meta.json +1 -1
  44. package/dist/lib/node-esm/{react-surface-4BED2PZ4.mjs → react-surface-QWLPOYXO.mjs} +4 -11
  45. package/dist/lib/node-esm/react-surface-QWLPOYXO.mjs.map +7 -0
  46. package/dist/types/src/AutomationPlugin.d.ts.map +1 -1
  47. package/dist/types/src/capabilities/complementary-panel.d.ts +4 -0
  48. package/dist/types/src/capabilities/complementary-panel.d.ts.map +1 -0
  49. package/dist/types/src/capabilities/index.d.ts +2 -178
  50. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  51. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  52. package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts +1 -2
  53. package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts.map +1 -1
  54. package/dist/types/src/components/AutomationPanel/AutomationPanel.stories.d.ts.map +1 -1
  55. package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts +1 -2
  56. package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts.map +1 -1
  57. package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts.map +1 -1
  58. package/dist/types/src/components/index.d.ts +2 -2
  59. package/dist/types/src/components/index.d.ts.map +1 -1
  60. package/dist/types/src/index.d.ts +1 -3
  61. package/dist/types/src/index.d.ts.map +1 -1
  62. package/dist/types/src/meta.d.ts +0 -1
  63. package/dist/types/src/meta.d.ts.map +1 -1
  64. package/dist/types/src/testing/index.d.ts +1 -1
  65. package/dist/types/src/testing/index.d.ts.map +1 -1
  66. package/dist/types/src/testing/{testing.d.ts → test-functions.d.ts} +1 -1
  67. package/dist/types/src/testing/test-functions.d.ts.map +1 -0
  68. package/dist/types/src/translations.d.ts +2 -20
  69. package/dist/types/src/translations.d.ts.map +1 -1
  70. package/package.json +23 -57
  71. package/src/AutomationPlugin.tsx +10 -42
  72. package/src/capabilities/complementary-panel.ts +56 -0
  73. package/src/capabilities/index.ts +1 -1
  74. package/src/capabilities/react-surface.tsx +1 -6
  75. package/src/components/AutomationPanel/AutomationPanel.stories.tsx +1 -2
  76. package/src/components/AutomationPanel/AutomationPanel.tsx +56 -49
  77. package/src/components/TriggerEditor/TriggerEditor.stories.tsx +1 -2
  78. package/src/components/TriggerEditor/TriggerEditor.tsx +25 -18
  79. package/src/components/index.ts +2 -1
  80. package/src/index.ts +2 -3
  81. package/src/meta.ts +3 -3
  82. package/src/testing/index.ts +1 -1
  83. package/src/testing/{testing.ts → test-functions.ts} +2 -2
  84. package/src/translations.ts +2 -23
  85. package/dist/lib/browser/AssistantPanel-N276BTPV.mjs +0 -339
  86. package/dist/lib/browser/AssistantPanel-N276BTPV.mjs.map +0 -7
  87. package/dist/lib/browser/AutomationPanel-IHZ4JKVS.mjs +0 -232
  88. package/dist/lib/browser/AutomationPanel-IHZ4JKVS.mjs.map +0 -7
  89. package/dist/lib/browser/app-graph-builder-IJTTULDP.mjs +0 -131
  90. package/dist/lib/browser/app-graph-builder-IJTTULDP.mjs.map +0 -7
  91. package/dist/lib/browser/chunk-4AIMDHKY.mjs +0 -10
  92. package/dist/lib/browser/chunk-4AIMDHKY.mjs.map +0 -7
  93. package/dist/lib/browser/chunk-DL6LB2NI.mjs +0 -43
  94. package/dist/lib/browser/chunk-DL6LB2NI.mjs.map +0 -7
  95. package/dist/lib/browser/react-surface-LL72F3F4.mjs.map +0 -7
  96. package/dist/lib/browser/types/index.mjs +0 -13
  97. package/dist/lib/browser/types/index.mjs.map +0 -7
  98. package/dist/lib/node/AssistantPanel-Z4GVHUF3.cjs +0 -359
  99. package/dist/lib/node/AssistantPanel-Z4GVHUF3.cjs.map +0 -7
  100. package/dist/lib/node/AutomationPanel-PPODB5XA.cjs.map +0 -7
  101. package/dist/lib/node/app-graph-builder-MF5M4QRS.cjs +0 -147
  102. package/dist/lib/node/app-graph-builder-MF5M4QRS.cjs.map +0 -7
  103. package/dist/lib/node/chunk-25AQIF3L.cjs.map +0 -7
  104. package/dist/lib/node/chunk-JNDMZQH7.cjs +0 -68
  105. package/dist/lib/node/chunk-JNDMZQH7.cjs.map +0 -7
  106. package/dist/lib/node/react-surface-DVAU4MGD.cjs.map +0 -7
  107. package/dist/lib/node/types/index.cjs +0 -35
  108. package/dist/lib/node/types/index.cjs.map +0 -7
  109. package/dist/lib/node-esm/AssistantPanel-DDCQHBJX.mjs +0 -340
  110. package/dist/lib/node-esm/AssistantPanel-DDCQHBJX.mjs.map +0 -7
  111. package/dist/lib/node-esm/AutomationPanel-R3D6CRF5.mjs +0 -233
  112. package/dist/lib/node-esm/AutomationPanel-R3D6CRF5.mjs.map +0 -7
  113. package/dist/lib/node-esm/app-graph-builder-5N7OK23B.mjs +0 -132
  114. package/dist/lib/node-esm/app-graph-builder-5N7OK23B.mjs.map +0 -7
  115. package/dist/lib/node-esm/chunk-GIAYUM5I.mjs +0 -45
  116. package/dist/lib/node-esm/chunk-GIAYUM5I.mjs.map +0 -7
  117. package/dist/lib/node-esm/chunk-XW7TEQA3.mjs.map +0 -7
  118. package/dist/lib/node-esm/react-surface-4BED2PZ4.mjs.map +0 -7
  119. package/dist/lib/node-esm/types/index.mjs +0 -14
  120. package/dist/lib/node-esm/types/index.mjs.map +0 -7
  121. package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -180
  122. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
  123. package/dist/types/src/components/AssistantPanel/AssistantPanel.d.ts +0 -8
  124. package/dist/types/src/components/AssistantPanel/AssistantPanel.d.ts.map +0 -1
  125. package/dist/types/src/components/AssistantPanel/index.d.ts +0 -3
  126. package/dist/types/src/components/AssistantPanel/index.d.ts.map +0 -1
  127. package/dist/types/src/components/AssistantPanel/system-instructions.d.ts +0 -6
  128. package/dist/types/src/components/AssistantPanel/system-instructions.d.ts.map +0 -1
  129. package/dist/types/src/components/PromptEditor/PromptEditor.d.ts +0 -10
  130. package/dist/types/src/components/PromptEditor/PromptEditor.d.ts.map +0 -1
  131. package/dist/types/src/components/PromptEditor/PromptEditor.stories.d.ts +0 -6
  132. package/dist/types/src/components/PromptEditor/PromptEditor.stories.d.ts.map +0 -1
  133. package/dist/types/src/components/PromptEditor/index.d.ts +0 -2
  134. package/dist/types/src/components/PromptEditor/index.d.ts.map +0 -1
  135. package/dist/types/src/components/PromptEditor/prompt-extension.d.ts +0 -4
  136. package/dist/types/src/components/PromptEditor/prompt-extension.d.ts.map +0 -1
  137. package/dist/types/src/components/PromptEditor/types.d.ts +0 -18
  138. package/dist/types/src/components/PromptEditor/types.d.ts.map +0 -1
  139. package/dist/types/src/hooks/email.d.ts +0 -4
  140. package/dist/types/src/hooks/email.d.ts.map +0 -1
  141. package/dist/types/src/hooks/index.d.ts +0 -2
  142. package/dist/types/src/hooks/index.d.ts.map +0 -1
  143. package/dist/types/src/hooks/invocation-handler.d.ts +0 -5
  144. package/dist/types/src/hooks/invocation-handler.d.ts.map +0 -1
  145. package/dist/types/src/hooks/useLocalTriggerManager.d.ts +0 -3
  146. package/dist/types/src/hooks/useLocalTriggerManager.d.ts.map +0 -1
  147. package/dist/types/src/presets.d.ts +0 -9
  148. package/dist/types/src/presets.d.ts.map +0 -1
  149. package/dist/types/src/testing/testing.d.ts.map +0 -1
  150. package/dist/types/src/types/index.d.ts +0 -2
  151. package/dist/types/src/types/index.d.ts.map +0 -1
  152. package/dist/types/src/types/schema.d.ts +0 -63
  153. package/dist/types/src/types/schema.d.ts.map +0 -1
  154. package/src/capabilities/app-graph-builder.ts +0 -127
  155. package/src/components/AssistantPanel/AssistantPanel.tsx +0 -230
  156. package/src/components/AssistantPanel/index.ts +0 -7
  157. package/src/components/AssistantPanel/system-instructions.ts +0 -166
  158. package/src/components/PromptEditor/PromptEditor.stories.tsx +0 -64
  159. package/src/components/PromptEditor/PromptEditor.tsx +0 -222
  160. package/src/components/PromptEditor/index.ts +0 -5
  161. package/src/components/PromptEditor/prompt-extension.ts +0 -43
  162. package/src/components/PromptEditor/types.tsx +0 -28
  163. package/src/hooks/email.ts +0 -49
  164. package/src/hooks/index.ts +0 -5
  165. package/src/hooks/invocation-handler.ts +0 -109
  166. package/src/hooks/useLocalTriggerManager.ts +0 -82
  167. package/src/presets.ts +0 -248
  168. package/src/types/index.ts +0 -5
  169. package/src/types/schema.ts +0 -38
@@ -1,43 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import { HighlightStyle, StreamLanguage, syntaxHighlighting } from '@codemirror/language';
6
- import { type Extension } from '@codemirror/state';
7
-
8
- import { tags } from '@dxos/react-ui-editor';
9
- import { mx } from '@dxos/react-ui-theme';
10
-
11
- export const nameRegex = /\{([\w-]+)}/;
12
-
13
- const parser = StreamLanguage.define({
14
- token: (stream) => {
15
- if (stream.eatSpace()) {
16
- return null;
17
- }
18
- if (stream.match(/^#.*/)) {
19
- return 'lineComment';
20
- }
21
- if (stream.match(/^-+$/)) {
22
- return 'lineComment';
23
- }
24
- if (stream.match(nameRegex)) {
25
- return 'variableName';
26
- }
27
- stream.next();
28
- return null;
29
- },
30
- });
31
-
32
- /**
33
- * https://codemirror.net/examples/styling
34
- * https://lezer.codemirror.net/docs/ref/#highlight
35
- */
36
- const highlightStyles = HighlightStyle.define([
37
- {
38
- tag: tags.variableName,
39
- class: mx('rounded border border-yellow-500 bg-yellow-100 text-black font-mono text-sm'),
40
- },
41
- ]);
42
-
43
- export const promptExtension: Extension = [parser, syntaxHighlighting(highlightStyles)];
@@ -1,28 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- // TODO(burdon): Factor out (shared with backend). core/chain (@dxos/chain).
6
- // TODO(burdon): Agent/plan-and-execute (with tools). Create design doc/ontology of sequence/agent.
7
-
8
- export type Step = {
9
- id: string;
10
- };
11
-
12
- export type Variable = {
13
- name: string;
14
- type: 'value' | 'function' | 'query' | 'retriever' | 'pass-through';
15
- };
16
-
17
- export type Prompt = Step & {
18
- title?: string;
19
- description?: string;
20
- template: string;
21
- variables: Variable[];
22
- };
23
-
24
- export type Sequence = Step & {
25
- runnable: Step[];
26
- };
27
-
28
- export type Chain = {};
@@ -1,49 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import { findObjectWithForeignKey } from '@dxos/echo-db';
6
- import { foreignKey } from '@dxos/echo-schema';
7
- import { log } from '@dxos/log';
8
- import { MailboxType } from '@dxos/plugin-inbox/types';
9
- import { MessageType } from '@dxos/plugin-space/types';
10
- import { type Space, Filter, create, makeRef } from '@dxos/react-client/echo';
11
-
12
- export const SOURCE_ID = 'hub.dxos.network/api/mailbox';
13
-
14
- export const handleEmail = async (space: Space, data: any) => {
15
- const { messages } = data;
16
-
17
- // Create mailbox if doesn't exist.
18
- const { objects: mailboxes } = await space.db.query(Filter.schema(MailboxType)).run();
19
- const mailbox = mailboxes[0] ?? space.db.add(create(MailboxType, { messages: [] }));
20
-
21
- log.info('messages', { count: messages.length, existingMailbox: mailboxes.length > 0 });
22
-
23
- const { objects } = await space.db.query(Filter.schema(MessageType)).run();
24
- for (const message of messages) {
25
- let object = findObjectWithForeignKey(objects, { source: SOURCE_ID, id: String(message.id) });
26
- if (!object) {
27
- object = space.db.add(
28
- create(
29
- MessageType,
30
- {
31
- sender: { email: message.from },
32
- timestamp: new Date(message.created).toISOString(),
33
- text: message.body,
34
- properties: {
35
- subject: message.subject,
36
- to: [{ email: message.to }],
37
- },
38
- },
39
- {
40
- keys: [foreignKey(SOURCE_ID, String(message.id))],
41
- },
42
- ),
43
- );
44
- mailbox.messages?.push(makeRef(object));
45
- }
46
- }
47
-
48
- return 200;
49
- };
@@ -1,5 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- export * from './useLocalTriggerManager';
@@ -1,109 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- import { sleep } from '@dxos/async';
6
- import { getObjectCore, ResultFormat } from '@dxos/echo-db';
7
- import { type AnyObjectData } from '@dxos/echo-schema';
8
- import { FunctionType } from '@dxos/functions';
9
- import { type FunctionTrigger } from '@dxos/functions';
10
- import { invariant } from '@dxos/invariant';
11
- import { DXN, LOCAL_SPACE_TAG } from '@dxos/keys';
12
- import { log } from '@dxos/log';
13
- import { type Client, type Config } from '@dxos/react-client';
14
- import { type Space } from '@dxos/react-client/echo';
15
-
16
- const MAX_RETRIES = 3;
17
- const RETRY_DELAY = 1_000;
18
-
19
- const callFunction = async (funcUrl: string, trigger: any, data: any) => {
20
- const body = { event: 'trigger', trigger, data };
21
-
22
- let retryCount = 0;
23
- while (retryCount < MAX_RETRIES) {
24
- log.info('exec', { funcUrl, body, retryCount });
25
- const response = await fetch(funcUrl, {
26
- method: 'POST',
27
- headers: {
28
- 'Content-Type': 'application/json',
29
- },
30
- body: JSON.stringify(body),
31
- });
32
-
33
- const data = await response.text();
34
- log.info('response', { status: response.status, body: data });
35
- if (response.status === 409) {
36
- retryCount++;
37
- await sleep(RETRY_DELAY * Math.min(retryCount, 2));
38
- continue;
39
- }
40
-
41
- return { status: response.status, data };
42
- }
43
- return { status: 500 };
44
- };
45
-
46
- export const invokeFunction = async (client: Client, space: Space, trigger: FunctionTrigger, data: any) => {
47
- try {
48
- invariant(trigger.spec);
49
- invariant(trigger.function);
50
-
51
- const script = await space.db.query({ id: trigger.function }, { format: ResultFormat.Plain }).first();
52
- const { objects: functions } = await space.db
53
- .query({ __typename: FunctionType.typename }, { format: ResultFormat.Plain })
54
- .run();
55
- const func = functions.find((fn) => referenceEquals(fn.source, trigger.function!)) as AnyObjectData | undefined;
56
- const funcSlug = func?.__meta.keys.find((key) => key.source === USERFUNCTIONS_META_KEY)?.id;
57
- if (!funcSlug) {
58
- log.warn('function not deployed', { scriptId: script.id, name: script.name });
59
- return 404;
60
- }
61
-
62
- const funcUrl = getFunctionUrl(client.config, funcSlug, space.id);
63
- const triggerData: AnyObjectData = {
64
- ...getObjectCore(trigger).toPlainObject(),
65
- // TODO: Remove when functions can query by DXN.
66
- promptId: trigger.meta?.prompt?.id,
67
- };
68
- // TODO: Remove when functions can add objects and easily modify collections (push, splice).
69
- return (await callFunction(funcUrl, triggerData, data)).status;
70
- } catch (err) {
71
- return 400;
72
- }
73
- };
74
-
75
- const USERFUNCTIONS_META_KEY = 'dxos.org/service/function';
76
-
77
- const getFunctionUrl = (config: Config, slug: string, spaceId?: string) => {
78
- const baseUrl = new URL('functions/', config.values.runtime?.services?.edge?.url);
79
-
80
- // Leading slashes cause the URL to be treated as an absolute path.
81
- const relativeUrl = slug.replace(/^\//, '');
82
- const url = new URL(`./${relativeUrl}`, baseUrl.toString());
83
- spaceId && url.searchParams.set('spaceId', spaceId);
84
- url.protocol = 'https';
85
- return url.toString();
86
- };
87
-
88
- // TODO(dmaretskyi): Factor out.
89
-
90
- type ReferenceLike = { '/': string } | string;
91
-
92
- const referenceEquals = (a: ReferenceLike, b: ReferenceLike): boolean => {
93
- const aDXN = toDXN(a);
94
- const bDXN = toDXN(b);
95
- return aDXN.toString() === bDXN.toString();
96
- };
97
-
98
- const toDXN = (ref: ReferenceLike): DXN => {
99
- if (typeof ref === 'string') {
100
- if (ref.startsWith('dxn:')) {
101
- return DXN.parse(ref);
102
- } else {
103
- return new DXN(DXN.kind.ECHO, [LOCAL_SPACE_TAG, ref]);
104
- }
105
- }
106
-
107
- invariant(typeof ref['/'] === 'string');
108
- return DXN.parse(ref['/']);
109
- };
@@ -1,82 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- import { useEffect, useState } from 'react';
6
-
7
- import { Mutex } from '@dxos/async';
8
- import { Context } from '@dxos/context';
9
- import { createSubscriptionTrigger, type TriggerFactory } from '@dxos/functions';
10
- import { FunctionTrigger } from '@dxos/functions';
11
- import { invariant } from '@dxos/invariant';
12
- import { log } from '@dxos/log';
13
- import { useClient } from '@dxos/react-client';
14
- import { Filter, type Space, useQuery } from '@dxos/react-client/echo';
15
-
16
- import { invokeFunction } from './invocation-handler';
17
-
18
- const registerTriggersMutex = new Mutex();
19
-
20
- export const useLocalTriggerManager = (space: Space) => {
21
- const client = useClient();
22
-
23
- // TODO(burdon): Factor out, creating context for plugin (runs outside of component).
24
- const [registry] = useState(new Map<string, Context>());
25
- const triggers = useQuery(space, Filter.schema(FunctionTrigger));
26
- useEffect(() => {
27
- setTimeout(async () => {
28
- // Mark-and-sweep removing disabled triggers.
29
- await registerTriggersMutex.executeSynchronized(async () => {
30
- const deprecated = new Set(Array.from(registry.keys()));
31
- log('triggers', {
32
- deprecated,
33
- all: triggers.map((t) => t.id),
34
- enabled: triggers.filter((t) => t.enabled).map((t) => t.id),
35
- });
36
-
37
- for (const trigger of triggers) {
38
- if (trigger.enabled) {
39
- if (registry.has(trigger.id)) {
40
- deprecated.delete(trigger.id);
41
- continue;
42
- }
43
- log.info('activating trigger', trigger.id);
44
-
45
- const ctx = new Context();
46
- registry.set(trigger.id, ctx);
47
- const triggerSpec = trigger.spec;
48
- invariant(triggerSpec);
49
-
50
- let triggerFactory: TriggerFactory<any>;
51
- if (triggerSpec.type === 'subscription') {
52
- triggerFactory = createSubscriptionTrigger;
53
- } else {
54
- log.info('unsupported trigger', { type: triggerSpec.type });
55
- continue;
56
- }
57
-
58
- await triggerFactory(ctx, space, trigger.spec, (data: any) => {
59
- return invokeFunction(client, space, trigger, data);
60
- });
61
- }
62
- }
63
-
64
- for (const id of deprecated) {
65
- const ctx = registry.get(id);
66
- if (ctx) {
67
- await ctx.dispose();
68
- registry.delete(id);
69
- }
70
- }
71
- });
72
- });
73
- }, [JSON.stringify(triggers)]);
74
-
75
- useEffect(() => {
76
- return () => {
77
- for (const ctx of registry.values()) {
78
- void ctx.dispose();
79
- }
80
- };
81
- }, []);
82
- };
package/src/presets.ts DELETED
@@ -1,248 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- import { create } from '@dxos/live-object';
6
-
7
- import { ChainInputType, ChainPromptType } from './types';
8
-
9
- export const str = (...text: (string | undefined | boolean)[]): string =>
10
- text
11
- .filter((value) => value !== undefined && value !== false)
12
- .flat()
13
- .join('\n');
14
-
15
- export type Preset = {
16
- id: string;
17
- title: string;
18
- createPrompt: () => ChainPromptType;
19
- };
20
-
21
- export const chainPresets: Preset[] = [
22
- {
23
- id: 'dxos.org/prompt/translate',
24
- title: 'Translate',
25
- createPrompt: () =>
26
- create(ChainPromptType, {
27
- command: 'say',
28
- template: str(
29
- // prettier-ignore
30
- 'Translate the following into {language}:',
31
- '',
32
- '---',
33
- '',
34
- '{input}',
35
- ),
36
- inputs: [
37
- {
38
- type: ChainInputType.VALUE,
39
- name: 'language',
40
- value: 'japanese',
41
- },
42
- {
43
- type: ChainInputType.PASS_THROUGH,
44
- name: 'input',
45
- },
46
- // TODO(burdon): Message.
47
- // {
48
- // type: ChainInputType.CONTEXT,
49
- // name: 'input',
50
- // value: 'object.text',
51
- // },
52
- ],
53
- }),
54
- },
55
- {
56
- id: 'dxos.org/prompt/chess',
57
- title: 'Chess',
58
- createPrompt: () =>
59
- create(ChainPromptType, {
60
- command: 'hint',
61
- template: str(
62
- // prettier-ignore
63
- 'You are a machine that is an expert chess player.',
64
- '',
65
- 'The move history of the current game is: {history}',
66
- '',
67
- 'Suggest the next move and very briefly explain your strategy in a couple of sentences.',
68
- ),
69
- inputs: [
70
- {
71
- type: ChainInputType.CONTEXT,
72
- name: 'history',
73
- value: 'object.pgn',
74
- },
75
- ],
76
- }),
77
- },
78
- {
79
- id: 'dxos.org/prompt/mermaid',
80
- title: 'Mermaid',
81
- createPrompt: () =>
82
- create(ChainPromptType, {
83
- command: 'draw',
84
- template: str(
85
- // prettier-ignore
86
- 'Create a simplified mermaid graph representing the text below.',
87
- 'Do not explain anything.',
88
- '',
89
- '---',
90
- '',
91
- '{input}',
92
- ),
93
- inputs: [
94
- {
95
- type: ChainInputType.PASS_THROUGH,
96
- name: 'input',
97
- },
98
- ],
99
- }),
100
- },
101
- {
102
- id: 'dxos.org/prompt/list',
103
- title: 'List',
104
- createPrompt: () =>
105
- create(ChainPromptType, {
106
- command: 'list',
107
- template: str(
108
- // prettier-ignore
109
- 'You are a machine that only replies with valid, iterable RFC8259 compliant JSON in your responses.',
110
- 'Your entire response should be a single array of JSON objects.',
111
- '',
112
- 'Your entire response should be a map where the key is the type and the value is a single array of JSON objects conforming to the following types:',
113
- '',
114
- '{schema}',
115
- '',
116
- '---',
117
- '',
118
- '{question}',
119
- ),
120
- inputs: [
121
- {
122
- type: ChainInputType.SCHEMA,
123
- name: 'schema',
124
- value: 'example.com/type/project',
125
- },
126
- {
127
- type: ChainInputType.PASS_THROUGH,
128
- name: 'question',
129
- },
130
- ],
131
- }),
132
- },
133
- {
134
- id: 'dxos.org/prompt/base',
135
- title: 'RAG',
136
- createPrompt: () =>
137
- create(ChainPromptType, {
138
- command: 'rag',
139
- template: str(
140
- // prettier-ignore
141
- "Very briefly answer the question based only on the following context and say if you don't know the answer.",
142
- // 'answer the question using the following context as well as your training data:',
143
- '',
144
- '{context}',
145
- '',
146
- '---',
147
- '',
148
- 'question: {question}',
149
- ),
150
- inputs: [
151
- {
152
- type: ChainInputType.RETRIEVER,
153
- name: 'context',
154
- },
155
- {
156
- type: ChainInputType.CONTEXT,
157
- name: 'question',
158
- value: 'object.text',
159
- },
160
- ],
161
- }),
162
- },
163
- {
164
- id: 'dxos.org/prompt/lookup',
165
- title: 'Lookup',
166
- createPrompt: () =>
167
- create(ChainPromptType, {
168
- command: 'lookup',
169
- template: str(
170
- // prettier-ignore
171
- 'Lookup and very briefly summarize the following topic in one or two sentences:',
172
- '',
173
- '---',
174
- '',
175
- '{input}',
176
- ),
177
- inputs: [
178
- {
179
- type: ChainInputType.CONTEXT,
180
- name: 'input',
181
- value: 'text',
182
- },
183
- ],
184
- }),
185
- },
186
- {
187
- id: 'dxos.org/prompt/extract',
188
- title: 'Extract',
189
- createPrompt: () =>
190
- create(ChainPromptType, {
191
- command: 'extract',
192
- template: str(
193
- // prettier-ignore
194
- 'List all people and companies mentioned in the text below.',
195
- '',
196
- 'You are a machine that only replies with valid, iterable RFC8259 compliant JSON in your responses.',
197
- 'Your entire response should be a map where the key is the type and the value is a single array of JSON objects conforming to the following types:',
198
- '',
199
- '{contact}',
200
- '{company}',
201
- '',
202
- '---',
203
- '',
204
- '{input}',
205
- ),
206
- inputs: [
207
- {
208
- type: ChainInputType.SCHEMA,
209
- name: 'contact',
210
- value: 'example.com/type/contact',
211
- },
212
- {
213
- type: ChainInputType.SCHEMA,
214
- name: 'company',
215
- value: 'example.com/type/organization',
216
- },
217
- {
218
- type: ChainInputType.CONTEXT,
219
- name: 'input',
220
- value: 'text',
221
- },
222
- ],
223
- }),
224
- },
225
- {
226
- id: 'dxos.org/prompt/discord',
227
- title: 'Summarize',
228
- createPrompt: () =>
229
- create(ChainPromptType, {
230
- command: 'summarize',
231
- template: str(
232
- // prettier-ignore
233
- 'Summarize what the team is working on and format it as a markdown table without any explanation.',
234
- '',
235
- '---',
236
- '',
237
- '{context}',
238
- ),
239
- inputs: [
240
- {
241
- type: ChainInputType.RESOLVER,
242
- name: 'context',
243
- value: 'discord.messages.recent',
244
- },
245
- ],
246
- }),
247
- },
248
- ];
@@ -1,5 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- export * from './schema';
@@ -1,38 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- import { Ref, S, TypedObject } from '@dxos/echo-schema';
6
-
7
- // TODO(burdon): Change to S.Literal (and discriminated union).
8
- export enum ChainInputType {
9
- VALUE = 0,
10
- PASS_THROUGH = 1,
11
- RETRIEVER = 2,
12
- FUNCTION = 3,
13
- QUERY = 4,
14
- RESOLVER = 5,
15
- CONTEXT = 6,
16
- SCHEMA = 7,
17
- }
18
-
19
- export const ChainInputSchema = S.mutable(
20
- S.Struct({
21
- name: S.String,
22
- type: S.optional(S.Enums(ChainInputType)),
23
- value: S.optional(S.String),
24
- }),
25
- );
26
-
27
- export type ChainInput = S.Schema.Type<typeof ChainInputSchema>;
28
-
29
- export class ChainPromptType extends TypedObject({ typename: 'dxos.org/type/ChainPrompt', version: '0.1.0' })({
30
- command: S.optional(S.String),
31
- template: S.String,
32
- inputs: S.optional(S.mutable(S.Array(ChainInputSchema))),
33
- }) {}
34
-
35
- export class ChainType extends TypedObject({ typename: 'dxos.org/type/Chain', version: '0.1.0' })({
36
- name: S.optional(S.String),
37
- prompts: S.optional(S.mutable(S.Array(Ref(ChainPromptType)))),
38
- }) {}