@dxos/plugin-debug 0.8.4-main.abd8ff62ef → 0.8.4-main.bc2380dfbc

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 (82) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/neutral/DebugGraph-G4FWS57E.mjs +15 -0
  4. package/dist/lib/neutral/DebugGraph-G4FWS57E.mjs.map +7 -0
  5. package/dist/lib/neutral/DebugObjectPanel-UJ63CV25.mjs +59 -0
  6. package/dist/lib/neutral/DebugObjectPanel-UJ63CV25.mjs.map +7 -0
  7. package/dist/lib/neutral/DebugPlugin.mjs +47 -0
  8. package/dist/lib/neutral/DebugPlugin.mjs.map +7 -0
  9. package/dist/lib/neutral/DebugPlugin.node.mjs +18 -0
  10. package/dist/lib/neutral/DebugPlugin.node.mjs.map +7 -0
  11. package/dist/lib/neutral/DebugPlugin.workerd.mjs +12 -0
  12. package/dist/lib/neutral/DebugPlugin.workerd.mjs.map +7 -0
  13. package/dist/lib/neutral/DebugSettings-Z3XADRNK.mjs +224 -0
  14. package/dist/lib/neutral/DebugSettings-Z3XADRNK.mjs.map +7 -0
  15. package/dist/lib/neutral/DebugSpaceObjectsPanel-NISULU6U.mjs +34 -0
  16. package/dist/lib/neutral/DebugSpaceObjectsPanel-NISULU6U.mjs.map +7 -0
  17. package/dist/lib/neutral/DebugStatus-YB3KFP7G.mjs +121 -0
  18. package/dist/lib/neutral/DebugStatus-YB3KFP7G.mjs.map +7 -0
  19. package/dist/lib/neutral/DevtoolsOverviewContainer-YX7Z3D2H.mjs +23 -0
  20. package/dist/lib/neutral/DevtoolsOverviewContainer-YX7Z3D2H.mjs.map +7 -0
  21. package/dist/lib/neutral/SpaceGenerator-UBYB4NPD.mjs +143 -0
  22. package/dist/lib/neutral/SpaceGenerator-UBYB4NPD.mjs.map +7 -0
  23. package/dist/lib/neutral/Wireframe-7SNRUKET.mjs +52 -0
  24. package/dist/lib/neutral/Wireframe-7SNRUKET.mjs.map +7 -0
  25. package/dist/lib/neutral/app-graph-builder-YPYHL2K5.mjs +577 -0
  26. package/dist/lib/neutral/app-graph-builder-YPYHL2K5.mjs.map +7 -0
  27. package/dist/lib/neutral/capabilities/index.mjs +15 -0
  28. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  29. package/dist/lib/{browser/index.mjs → neutral/chunk-3OGPOE7H.mjs} +1 -7
  30. package/dist/lib/neutral/chunk-3OGPOE7H.mjs.map +7 -0
  31. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  32. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +7 -0
  33. package/dist/lib/neutral/chunk-NFIOTQRZ.mjs +89 -0
  34. package/dist/lib/neutral/chunk-NFIOTQRZ.mjs.map +7 -0
  35. package/dist/lib/neutral/components/index.mjs +980 -0
  36. package/dist/lib/neutral/components/index.mjs.map +7 -0
  37. package/dist/lib/neutral/containers/index.mjs +21 -0
  38. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  39. package/dist/lib/neutral/index.mjs +18 -0
  40. package/dist/lib/neutral/index.mjs.map +7 -0
  41. package/dist/lib/neutral/meta.json +1 -0
  42. package/dist/lib/neutral/meta.mjs +8 -0
  43. package/dist/lib/neutral/meta.mjs.map +7 -0
  44. package/dist/lib/neutral/plugin.mjs +12 -0
  45. package/dist/lib/neutral/plugin.mjs.map +7 -0
  46. package/dist/lib/neutral/react-context-MUZ3KVLU.mjs +17 -0
  47. package/dist/lib/neutral/react-context-MUZ3KVLU.mjs.map +7 -0
  48. package/dist/lib/neutral/react-surface-UR2SYHYW.mjs +419 -0
  49. package/dist/lib/neutral/react-surface-UR2SYHYW.mjs.map +7 -0
  50. package/dist/lib/neutral/settings-MPM6YUP4.mjs +28 -0
  51. package/dist/lib/neutral/settings-MPM6YUP4.mjs.map +7 -0
  52. package/dist/lib/{browser → neutral}/translations.mjs +3 -1
  53. package/dist/lib/neutral/translations.mjs.map +7 -0
  54. package/dist/lib/neutral/types/index.mjs +14 -0
  55. package/dist/lib/neutral/types/index.mjs.map +7 -0
  56. package/dist/types/src/DebugPlugin.workerd.d.ts +5 -0
  57. package/dist/types/src/DebugPlugin.workerd.d.ts.map +1 -0
  58. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  59. package/dist/types/src/components/DebugSettings/DebugSettings.stories.d.ts +4 -2
  60. package/dist/types/src/components/DebugSettings/DebugSettings.stories.d.ts.map +1 -1
  61. package/dist/types/src/components/SpaceGenerator/ObjectGenerator.d.ts.map +1 -1
  62. package/dist/types/src/index.d.ts +1 -3
  63. package/dist/types/src/index.d.ts.map +1 -1
  64. package/dist/types/src/plugin.d.ts +4 -0
  65. package/dist/types/src/plugin.d.ts.map +1 -0
  66. package/dist/types/src/translations.d.ts +4 -2
  67. package/dist/types/src/translations.d.ts.map +1 -1
  68. package/dist/types/tsconfig.tsbuildinfo +1 -1
  69. package/package.json +107 -73
  70. package/src/DebugPlugin.workerd.ts +12 -0
  71. package/src/capabilities/app-graph-builder.ts +2 -2
  72. package/src/capabilities/react-surface.tsx +5 -6
  73. package/src/components/SpaceGenerator/ObjectGenerator.tsx +5 -6
  74. package/src/components/SpaceGenerator/presets.ts +13 -13
  75. package/src/containers/DebugObjectPanel/DebugObjectPanel.tsx +1 -1
  76. package/src/containers/SpaceGenerator/SpaceGenerator.tsx +3 -3
  77. package/src/index.ts +1 -7
  78. package/src/plugin.ts +10 -0
  79. package/src/translations.ts +1 -1
  80. package/dist/lib/browser/index.mjs.map +0 -7
  81. package/dist/lib/browser/meta.json +0 -1
  82. package/dist/lib/browser/translations.mjs.map +0 -7
@@ -0,0 +1,980 @@
1
+ import "../chunk-J5LGTIGS.mjs";
2
+
3
+ // src/components/index.ts
4
+ import { lazy } from "react";
5
+
6
+ // src/components/SchemaTable/SchemaTable.tsx
7
+ import React from "react";
8
+ import { IconButton } from "@dxos/react-ui";
9
+ var SchemaTable = ({ types, objects = {}, label, onClick }) => {
10
+ return /* @__PURE__ */ React.createElement("div", {
11
+ className: "grid grid-cols-[1fr_80px_40px] gap-1 overflow-none"
12
+ }, /* @__PURE__ */ React.createElement("h2", {
13
+ className: "p-2"
14
+ }, label), types.map((type) => /* @__PURE__ */ React.createElement("div", {
15
+ key: type.typename,
16
+ className: "grid grid-cols-subgrid col-span-3 items-center"
17
+ }, /* @__PURE__ */ React.createElement("div", {
18
+ className: "px-2 text-sm font-mono text-subdued"
19
+ }, type.typename), /* @__PURE__ */ React.createElement("div", {
20
+ className: "px-2 text-right font-mono"
21
+ }, objects[type.typename] ?? 0), /* @__PURE__ */ React.createElement(IconButton, {
22
+ variant: "ghost",
23
+ icon: "ph--plus--regular",
24
+ iconOnly: true,
25
+ label: "Create data",
26
+ onClick: () => onClick(type.typename)
27
+ }))));
28
+ };
29
+
30
+ // src/components/SpaceGenerator/presets.ts
31
+ import * as Schema from "effect/Schema";
32
+ import { AgentPrompt, WebSearchBlueprint } from "@dxos/assistant-toolkit";
33
+ import { Routine, Trigger, Operation } from "@dxos/compute";
34
+ import { NODE_INPUT } from "@dxos/conductor";
35
+ import { DXN, Feed, Filter, JsonSchema, Key, Obj, Query, Ref, Tag } from "@dxos/echo";
36
+ import { invariant } from "@dxos/invariant";
37
+ import { InboxOperation } from "@dxos/plugin-inbox";
38
+ import { Mailbox } from "@dxos/plugin-inbox";
39
+ import { Markdown } from "@dxos/plugin-markdown";
40
+ import { createAppend, createChat, createComputeGraph, createConstant, createFeed, createFunction, createGpt, createRandom, createSurface, createTemplate, createText, createTrigger } from "@dxos/react-ui-canvas-compute";
41
+ import { CanvasBoard, CanvasGraphModel, pointMultiply, pointsToRect, rectToPoints } from "@dxos/react-ui-canvas-editor";
42
+ import { ViewModel } from "@dxos/schema";
43
+ import { Message, Organization, Person, Pipeline } from "@dxos/types";
44
+ import { range, trim } from "@dxos/util";
45
+ var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-debug/src/components/SpaceGenerator/presets.ts";
46
+ var PresetName = /* @__PURE__ */ (function(PresetName2) {
47
+ PresetName2["DXOS_TEAM"] = "dxos-team";
48
+ PresetName2["ORG_RESEARCH_PROJECT"] = "org-research-project";
49
+ PresetName2["GPT_QUEUE"] = "webhook-gpt-queue";
50
+ PresetName2["CHAT_GPT"] = "chat-gpt-text";
51
+ PresetName2["OBJECT_CHANGE_QUEUE"] = "objectChange-queue";
52
+ PresetName2["TIMER_TICK_QUEUE"] = "timerTick-queue";
53
+ PresetName2["FOREX_FUNCTION_CALL"] = "forex-function-call";
54
+ PresetName2["DISCORD_MESSAGES"] = "discord-messages";
55
+ return PresetName2;
56
+ })({});
57
+ var generator = () => ({
58
+ schemas: [
59
+ CanvasBoard.CanvasBoard,
60
+ Trigger.Trigger
61
+ ],
62
+ types: Object.values(PresetName).map((name) => ({
63
+ typename: name
64
+ })),
65
+ items: [
66
+ [
67
+ "dxos-team",
68
+ async (space, n, cb) => {
69
+ const objects = range(n, () => {
70
+ const org = space.db.add(Obj.make(Organization.Organization, {
71
+ name: "DXOS",
72
+ website: "https://dxos.org"
73
+ }));
74
+ const doc = space.db.add(Markdown.make({
75
+ name: "DXOS Research",
76
+ content: "DXOS builds Composer, an open-source AI-powered malleable application."
77
+ }));
78
+ const tag = space.db.add(Tag.make({
79
+ label: "Investor"
80
+ }));
81
+ const tagDXN = Obj.getDXN(tag).toString();
82
+ Obj.update(doc, (doc2) => {
83
+ Obj.getMeta(doc2).tags = [
84
+ tagDXN
85
+ ];
86
+ });
87
+ space.db.add(Obj.make(Person.Person, {
88
+ [Obj.Meta]: {
89
+ tags: [
90
+ tagDXN
91
+ ]
92
+ },
93
+ fullName: "Rich",
94
+ organization: Ref.make(org)
95
+ }));
96
+ space.db.add(Obj.make(Person.Person, {
97
+ fullName: "Josiah",
98
+ organization: Ref.make(org)
99
+ }));
100
+ space.db.add(Obj.make(Person.Person, {
101
+ fullName: "Dima",
102
+ organization: Ref.make(org)
103
+ }));
104
+ space.db.add(Obj.make(Person.Person, {
105
+ fullName: "Mykola",
106
+ organization: Ref.make(org)
107
+ }));
108
+ return doc;
109
+ });
110
+ cb?.(objects);
111
+ return objects;
112
+ }
113
+ ],
114
+ [
115
+ "org-research-project",
116
+ async (space, n, cb) => {
117
+ const mailboxes = await space.db.query(Filter.type(Mailbox.Mailbox)).run();
118
+ const mailbox = mailboxes[0];
119
+ invariant(mailbox, "Mailbox not found", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 100, S: void 0, A: ["mailbox", "'Mailbox not found'"] });
120
+ const mailboxFeed = await mailbox.feed?.tryLoad();
121
+ invariant(mailboxFeed, "Mailbox missing feed reference", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 102, S: void 0, A: ["mailboxFeed", "'Mailbox missing feed reference'"] });
122
+ const feedDXN = Feed.getQueueDxn(mailboxFeed)?.toString();
123
+ invariant(feedDXN, "Mailbox feed missing DXN", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 104, S: void 0, A: ["feedDXN", "'Mailbox feed missing DXN'"] });
124
+ const tag = await space.db.query(Filter.type(Tag.Tag, {
125
+ label: "Investor"
126
+ })).first();
127
+ const tagDXN = Obj.getDXN(tag).toString();
128
+ const objects = range(n, () => {
129
+ const contactsQuery = Query.select(Filter.type(Person.Person)).select(Filter.tag(tagDXN));
130
+ const organizationsQuery = Query.select(Filter.type(Organization.Organization)).select(Filter.tag(tagDXN));
131
+ const notesQuery = Query.select(Filter.type(Markdown.Document)).select(Filter.tag(tagDXN));
132
+ space.db.add(Trigger.make({
133
+ enabled: true,
134
+ spec: Trigger.specTimer("* * * * *"),
135
+ function: Ref.make(Operation.serialize(InboxOperation.GoogleMailSync)),
136
+ input: {
137
+ mailbox: Ref.make(mailbox)
138
+ }
139
+ }));
140
+ const researchPrompt = space.db.add(Routine.make({
141
+ name: "Research",
142
+ description: "Research organization",
143
+ input: Schema.Struct({
144
+ org: Schema.Any
145
+ }),
146
+ output: Schema.Any,
147
+ // TODO(dmaretskyi): This mocks research (returns pre-baked result), the actual research might take compute minutes.
148
+ // Remove the mock prompt to do the actual research.
149
+ instructions: trim`
150
+ Research the organization provided as input.
151
+ Create a research note for it at the end.
152
+ NOTE: Do mocked reseach (set mockSearch to true).
153
+ `,
154
+ blueprints: [
155
+ Ref.make(WebSearchBlueprint.make())
156
+ ]
157
+ }));
158
+ space.db.add(Trigger.make({
159
+ enabled: true,
160
+ spec: Trigger.specSubscription(organizationsQuery),
161
+ function: Ref.make(Operation.serialize(AgentPrompt)),
162
+ input: {
163
+ prompt: Ref.make(researchPrompt),
164
+ input: "{{event.subject}}"
165
+ }
166
+ }));
167
+ const mailboxView = ViewModel.make({
168
+ query: Query.select(Filter.type(Message.Message, {
169
+ properties: {
170
+ labels: Filter.contains("investor")
171
+ }
172
+ })).from({
173
+ feeds: [
174
+ feedDXN
175
+ ]
176
+ }),
177
+ jsonSchema: JsonSchema.toJsonSchema(Message.Message)
178
+ });
179
+ const contactsView = ViewModel.make({
180
+ query: contactsQuery,
181
+ jsonSchema: JsonSchema.toJsonSchema(Person.Person)
182
+ });
183
+ const organizationsView = ViewModel.make({
184
+ query: organizationsQuery,
185
+ jsonSchema: JsonSchema.toJsonSchema(Organization.Organization)
186
+ });
187
+ const notesView = ViewModel.make({
188
+ query: notesQuery,
189
+ jsonSchema: JsonSchema.toJsonSchema(Markdown.Document)
190
+ });
191
+ return space.db.add(Pipeline.make({
192
+ name: "Investor Research",
193
+ columns: [
194
+ {
195
+ name: "Mailbox",
196
+ view: Ref.make(mailboxView),
197
+ order: []
198
+ },
199
+ {
200
+ name: "Contacts",
201
+ view: Ref.make(contactsView),
202
+ order: []
203
+ },
204
+ {
205
+ name: "Organizations",
206
+ view: Ref.make(organizationsView),
207
+ order: []
208
+ },
209
+ {
210
+ name: "Notes",
211
+ view: Ref.make(notesView),
212
+ order: []
213
+ }
214
+ ]
215
+ }));
216
+ });
217
+ cb?.(objects.flat());
218
+ return objects.flat();
219
+ }
220
+ ],
221
+ [
222
+ "webhook-gpt-queue",
223
+ async (space, n, cb) => {
224
+ const objects = range(n, () => {
225
+ const canvasModel = CanvasGraphModel.create();
226
+ let functionTrigger;
227
+ canvasModel.builder.call((builder) => {
228
+ const gpt = canvasModel.createNode(createGpt(position({
229
+ x: 0,
230
+ y: -14
231
+ })));
232
+ const triggerShape = createTrigger({
233
+ spaceId: space.id,
234
+ triggerKind: "webhook",
235
+ ...position({
236
+ x: -18,
237
+ y: -2
238
+ })
239
+ });
240
+ const trigger = canvasModel.createNode(triggerShape);
241
+ const text = canvasModel.createNode(createText(position({
242
+ x: 19,
243
+ y: 3,
244
+ width: 10,
245
+ height: 10
246
+ })));
247
+ const { queueId } = setupQueue(space, canvasModel);
248
+ const append = canvasModel.createNode(createAppend(position({
249
+ x: 10,
250
+ y: 6
251
+ })));
252
+ builder.createEdge({
253
+ source: trigger.id,
254
+ target: gpt.id,
255
+ input: "prompt",
256
+ output: "bodyText"
257
+ }).createEdge({
258
+ source: gpt.id,
259
+ target: text.id,
260
+ output: "text"
261
+ }).createEdge({
262
+ source: queueId.id,
263
+ target: append.id,
264
+ input: "id"
265
+ }).createEdge({
266
+ source: gpt.id,
267
+ target: append.id,
268
+ output: "messages",
269
+ input: "items"
270
+ });
271
+ functionTrigger = triggerShape.functionTrigger.target;
272
+ });
273
+ const computeModel = createComputeGraph(canvasModel);
274
+ attachTrigger(functionTrigger, computeModel);
275
+ return addToSpace("webhook-gpt-queue", space, canvasModel, computeModel);
276
+ });
277
+ cb?.(objects);
278
+ return objects;
279
+ }
280
+ ],
281
+ [
282
+ "objectChange-queue",
283
+ async (space, n, cb) => {
284
+ const objects = range(n, () => {
285
+ const { canvasModel, computeModel } = createQueueSinkPreset(space, "subscription", (triggerSpec) => triggerSpec.query = {
286
+ ast: Query.select(Filter.typename("org.dxos.type.chess")).ast
287
+ }, "type");
288
+ return addToSpace("objectChange-queue", space, canvasModel, computeModel);
289
+ });
290
+ cb?.(objects);
291
+ return objects;
292
+ }
293
+ ],
294
+ [
295
+ "timerTick-queue",
296
+ async (space, n, cb) => {
297
+ const objects = range(n, () => {
298
+ const { canvasModel, computeModel } = createQueueSinkPreset(space, "timer", (triggerSpec) => triggerSpec.cron = "*/5 * * * * *", "result");
299
+ return addToSpace("timerTick-queue", space, canvasModel, computeModel);
300
+ });
301
+ cb?.(objects);
302
+ return objects;
303
+ }
304
+ ],
305
+ // TODO(wittjosiah): Remove?
306
+ // [
307
+ // PresetName.EMAIL_TABLE,
308
+ // async (space, n, cb) => {
309
+ // const objects = range(n, () => {
310
+ // const canvasModel = CanvasGraphModel.create<ComputeShape>();
311
+ // const results = space.db.query(Filter.type(TableType)).runSync();
312
+ // const emailTable = results.find((r) => r.object?.view?.target?.query?.typename?.endsWith('Email'));
313
+ // invariant(emailTable, 'Email table not found.');
314
+ // const template = canvasModel.createNode(
315
+ // createTemplate({
316
+ // valueType: 'object',
317
+ // ...rawPosition({ centerX: -80, centerY: -64, width: 320, height: 320 }),
318
+ // }),
319
+ // );
320
+ // const templateContent = ['{'];
321
+ // let functionTrigger: FunctionTrigger | undefined;
322
+ // canvasModel.builder.call((builder) => {
323
+ // const triggerShape = createTrigger({
324
+ // spaceId: space.id,
325
+ // triggerKind: 'email',
326
+ // ...position({ x: -18, y: -2 }),
327
+ // });
328
+ // const trigger = canvasModel.createNode(triggerShape);
329
+ // const tableId = canvasModel.createNode(
330
+ // createConstant({
331
+ // value: DXN.fromLocalObjectId(emailTable.id).toString(),
332
+ // ...position({ x: -18, y: 5, width: 8, height: 6 }),
333
+ // }),
334
+ // );
335
+ // const appendToTable = canvasModel.createNode(createAppend(position({ x: 10, y: 6 })));
336
+ // const properties = SchemaAST.getPropertySignatures(EmailTriggerOutput.ast);
337
+ // for (let i = 0; i < properties.length; i++) {
338
+ // const propName = properties[i].name.toString();
339
+ // builder.createEdge({ source: trigger.id, target: template.id, input: propName, output: propName });
340
+ // templateContent.push(` "${propName}": "{{${propName}}}"` + (i === properties.length - 1 ? '' : ','));
341
+ // }
342
+ // templateContent.push('}');
343
+ // builder
344
+ // .createEdge({ source: tableId.id, target: appendToTable.id, input: 'id' })
345
+ // .createEdge({ source: template.id, target: appendToTable.id, input: 'items' });
346
+ // functionTrigger = triggerShape.functionTrigger!.target!;
347
+ // });
348
+ // const computeModel = createComputeGraph(canvasModel);
349
+ // const templateComputeNode = computeModel.nodes.find((n) => n.id === template.node);
350
+ // invariant(templateComputeNode, 'Template compute node was not created.');
351
+ // templateComputeNode.value = templateContent.join('\n');
352
+ // templateComputeNode.inputSchema = JsonSchema.toJsonSchema(EmailTriggerOutput);
353
+ // attachTrigger(functionTrigger, computeModel);
354
+ // return addToSpace(PresetName.EMAIL_TABLE, space, canvasModel, computeModel);
355
+ // });
356
+ // cb?.(objects);
357
+ // return objects;
358
+ // },
359
+ // ],
360
+ [
361
+ "chat-gpt-text",
362
+ async (space, n, cb) => {
363
+ const objects = range(n, () => {
364
+ const canvasModel = CanvasGraphModel.create();
365
+ canvasModel.builder.call((builder) => {
366
+ const gpt = canvasModel.createNode(createGpt(position({
367
+ x: 0,
368
+ y: -14
369
+ })));
370
+ const chat = canvasModel.createNode(createChat(position({
371
+ x: -18,
372
+ y: -2
373
+ })));
374
+ const text = canvasModel.createNode(createText(position({
375
+ x: 19,
376
+ y: 3,
377
+ width: 10,
378
+ height: 10
379
+ })));
380
+ const { queueId } = setupQueue(space, canvasModel);
381
+ const append = canvasModel.createNode(createAppend(position({
382
+ x: 10,
383
+ y: 6
384
+ })));
385
+ builder.createEdge({
386
+ source: chat.id,
387
+ target: gpt.id,
388
+ input: "prompt"
389
+ }).createEdge({
390
+ source: gpt.id,
391
+ target: text.id,
392
+ output: "text"
393
+ }).createEdge({
394
+ source: queueId.id,
395
+ target: append.id,
396
+ input: "id"
397
+ }).createEdge({
398
+ source: gpt.id,
399
+ target: append.id,
400
+ output: "messages",
401
+ input: "items"
402
+ });
403
+ });
404
+ const computeModel = createComputeGraph(canvasModel);
405
+ return addToSpace("chat-gpt-text", space, canvasModel, computeModel);
406
+ });
407
+ cb?.(objects);
408
+ return objects;
409
+ }
410
+ ],
411
+ // TODO(wittjosiah): Remove?
412
+ // [
413
+ // PresetName.EMAIL_WITH_SUMMARY,
414
+ // async (space, n, cb) => {
415
+ // const objects = range(n, () => {
416
+ // const canvasModel = CanvasGraphModel.create<ComputeShape>();
417
+ // const results = space.db.query(Filter.type(TableType)).runSync();
418
+ // const emailTable = results.find((r) => r.object?.view?.target?.query?.typename?.endsWith('Email'));
419
+ // invariant(emailTable, 'Email table not found.');
420
+ // const template = canvasModel.createNode(
421
+ // createTemplate({
422
+ // valueType: 'object',
423
+ // ...rawPosition({ centerX: 192, centerY: -176, width: 320, height: 320 }),
424
+ // }),
425
+ // );
426
+ // const templateContent = ['{'];
427
+ // let functionTrigger: FunctionTrigger | undefined;
428
+ // canvasModel.builder.call((builder) => {
429
+ // const gpt = canvasModel.createNode(
430
+ // createGpt(rawPosition({ centerX: -400, centerY: -112, width: 256, height: 202 })),
431
+ // );
432
+ // const systemPrompt = canvasModel.createNode(
433
+ // createConstant({
434
+ // value: "use one word to describe content category. don't write anything else",
435
+ // ...rawPosition({ centerX: -800, centerY: -160, width: 192, height: 128 }),
436
+ // }),
437
+ // );
438
+ // const triggerShape = createTrigger({
439
+ // spaceId: space.id,
440
+ // triggerKind: 'email',
441
+ // ...rawPosition({ centerX: -736, centerY: -384, width: 182, height: 192 }),
442
+ // });
443
+ // const trigger = canvasModel.createNode(triggerShape);
444
+ // const { queueId } = setupQueue(space, canvasModel, {
445
+ // idPosition: { centerX: -720, centerY: 224, width: 192, height: 256 },
446
+ // queuePosition: { centerX: -144, centerY: 416, width: 320, height: 448 },
447
+ // });
448
+ // const appendToQueue = canvasModel.createNode(
449
+ // createAppend(rawPosition({ centerX: -80, centerY: 96, width: 122, height: 128 })),
450
+ // );
451
+ // const tableId = canvasModel.createNode(
452
+ // createConstant({
453
+ // value: DXN.fromLocalObjectId(emailTable.id).toString(),
454
+ // ...rawPosition({ centerX: -112, centerY: -544, width: 192, height: 256 }),
455
+ // }),
456
+ // );
457
+ // const appendToTable = canvasModel.createNode(
458
+ // createAppend(rawPosition({ centerX: 560, centerY: -416, width: 128, height: 122 })),
459
+ // );
460
+ // templateContent.push(' "category": "{{text}}",');
461
+ // builder.createEdge({ source: gpt.id, target: template.id, input: 'text', output: 'text' });
462
+ // const properties = SchemaAST.getPropertySignatures(EmailTriggerOutput.ast);
463
+ // for (let i = 0; i < properties.length; i++) {
464
+ // const propName = properties[i].name.toString();
465
+ // builder.createEdge({ source: trigger.id, target: template.id, input: propName, output: propName });
466
+ // templateContent.push(` "${propName}": "{{${propName}}}"` + (i === properties.length - 1 ? '' : ','));
467
+ // }
468
+ // templateContent.push('}');
469
+ // builder
470
+ // .createEdge({ source: tableId.id, target: appendToTable.id, input: 'id' })
471
+ // .createEdge({ source: queueId.id, target: appendToQueue.id, input: 'id' })
472
+ // .createEdge({ source: gpt.id, target: appendToQueue.id, output: 'messages', input: 'items' })
473
+ // .createEdge({ source: systemPrompt.id, target: gpt.id, input: 'systemPrompt' })
474
+ // .createEdge({ source: trigger.id, target: gpt.id, input: 'prompt', output: 'body' })
475
+ // .createEdge({ source: template.id, target: appendToTable.id, input: 'items' });
476
+ // functionTrigger = triggerShape.functionTrigger!.target!;
477
+ // });
478
+ // const computeModel = createComputeGraph(canvasModel);
479
+ // const templateComputeNode = computeModel.nodes.find((n) => n.id === template.node);
480
+ // invariant(templateComputeNode, 'Template compute node was not created.');
481
+ // templateComputeNode.value = templateContent.join('\n');
482
+ // const extendedSchema = Schema.extend(EmailTriggerOutput, Schema.Struct({ text: Schema.String }));
483
+ // templateComputeNode.inputSchema = JsonSchema.toJsonSchema(extendedSchema);
484
+ // attachTrigger(functionTrigger, computeModel);
485
+ // return addToSpace(PresetName.EMAIL_WITH_SUMMARY, space, canvasModel, computeModel);
486
+ // });
487
+ // cb?.(objects);
488
+ // return objects;
489
+ // },
490
+ // ],
491
+ [
492
+ "forex-function-call",
493
+ async (space, n, cb) => {
494
+ const objects = range(n, () => {
495
+ const canvasModel = CanvasGraphModel.create();
496
+ canvasModel.builder.call((builder) => {
497
+ const sourceCurrency = canvasModel.createNode(createConstant({
498
+ value: "USD",
499
+ ...position({
500
+ x: -10,
501
+ y: -5
502
+ })
503
+ }));
504
+ const targetCurrency = canvasModel.createNode(createConstant({
505
+ value: "EUR",
506
+ ...position({
507
+ x: -10,
508
+ y: 5
509
+ })
510
+ }));
511
+ const converter = canvasModel.createNode(createFunction(position({
512
+ x: 0,
513
+ y: 0
514
+ })));
515
+ const view = canvasModel.createNode(createSurface(position({
516
+ x: 12,
517
+ y: 0
518
+ })));
519
+ builder.createEdge({
520
+ source: sourceCurrency.id,
521
+ target: converter.id,
522
+ input: "from"
523
+ }).createEdge({
524
+ source: targetCurrency.id,
525
+ target: converter.id,
526
+ input: "to"
527
+ }).createEdge({
528
+ source: converter.id,
529
+ target: view.id,
530
+ output: "rate"
531
+ });
532
+ });
533
+ const computeModel = createComputeGraph(canvasModel);
534
+ return addToSpace("forex-function-call", space, canvasModel, computeModel);
535
+ });
536
+ cb?.(objects);
537
+ return objects;
538
+ }
539
+ ],
540
+ [
541
+ "discord-messages",
542
+ async (space, n, cb) => {
543
+ const objects = range(n, () => {
544
+ const canvasModel = CanvasGraphModel.create();
545
+ let functionTrigger;
546
+ canvasModel.builder.call((builder) => {
547
+ const triggerShape = createTrigger({
548
+ spaceId: space.id,
549
+ triggerKind: "timer",
550
+ ...position({
551
+ x: -10,
552
+ y: -5
553
+ })
554
+ });
555
+ const trigger = canvasModel.createNode(triggerShape);
556
+ const channelId = canvasModel.createNode(createConstant({
557
+ value: "1088569858767212554",
558
+ ...position({
559
+ x: -10,
560
+ y: 0
561
+ })
562
+ }));
563
+ const queueId = canvasModel.createNode(createConstant({
564
+ value: new DXN(DXN.kind.QUEUE, [
565
+ "data",
566
+ space.id,
567
+ Key.ObjectId.random()
568
+ ]).toString(),
569
+ ...position({
570
+ x: -10,
571
+ y: 5
572
+ })
573
+ }));
574
+ const converter = canvasModel.createNode(createFunction(position({
575
+ x: 0,
576
+ y: 0
577
+ })));
578
+ const view = canvasModel.createNode(createText(position({
579
+ x: 12,
580
+ y: 0
581
+ })));
582
+ const queue = canvasModel.createNode(createFeed(position({
583
+ x: 0,
584
+ y: 12
585
+ })));
586
+ builder.createEdge({
587
+ source: trigger.id,
588
+ target: converter.id,
589
+ input: "tick"
590
+ }).createEdge({
591
+ source: channelId.id,
592
+ target: converter.id,
593
+ input: "channelId"
594
+ }).createEdge({
595
+ source: queueId.id,
596
+ target: converter.id,
597
+ input: "queueId"
598
+ }).createEdge({
599
+ source: converter.id,
600
+ target: view.id,
601
+ output: "newMessages"
602
+ }).createEdge({
603
+ source: queueId.id,
604
+ target: queue.id,
605
+ input: "input"
606
+ });
607
+ functionTrigger = triggerShape.functionTrigger.target;
608
+ });
609
+ const computeModel = createComputeGraph(canvasModel);
610
+ attachTrigger(functionTrigger, computeModel);
611
+ return addToSpace("discord-messages", space, canvasModel, computeModel);
612
+ });
613
+ cb?.(objects);
614
+ return objects;
615
+ }
616
+ ]
617
+ ]
618
+ });
619
+ var createQueueSinkPreset = (space, triggerKind, initSpec, triggerOutputName) => {
620
+ const canvasModel = CanvasGraphModel.create();
621
+ const template = canvasModel.createNode(createTemplate({
622
+ valueType: "object",
623
+ ...rawPosition({
624
+ centerX: -64,
625
+ centerY: -79,
626
+ width: 320,
627
+ height: 320
628
+ })
629
+ }));
630
+ let functionTrigger;
631
+ canvasModel.builder.call((builder) => {
632
+ const triggerShape = createTrigger({
633
+ spaceId: space.id,
634
+ triggerKind,
635
+ ...rawPosition({
636
+ centerX: -578,
637
+ centerY: -187,
638
+ height: 320,
639
+ width: 320
640
+ })
641
+ });
642
+ const trigger = canvasModel.createNode(triggerShape);
643
+ const { queueId } = setupQueue(space, canvasModel, {
644
+ queuePosition: {
645
+ centerX: -80,
646
+ centerY: 378,
647
+ width: 320,
648
+ height: 448
649
+ }
650
+ });
651
+ const append = canvasModel.createNode(createAppend(rawPosition({
652
+ centerX: 320,
653
+ centerY: 192,
654
+ width: 128,
655
+ height: 122
656
+ })));
657
+ const random2 = canvasModel.createNode(createRandom(rawPosition({
658
+ centerX: -509,
659
+ centerY: -30,
660
+ width: 64,
661
+ height: 64
662
+ })));
663
+ builder.createEdge({
664
+ source: queueId.id,
665
+ target: append.id,
666
+ input: "id"
667
+ }).createEdge({
668
+ source: template.id,
669
+ target: append.id,
670
+ input: "items"
671
+ }).createEdge({
672
+ source: trigger.id,
673
+ target: template.id,
674
+ output: triggerOutputName,
675
+ input: "type"
676
+ }).createEdge({
677
+ source: random2.id,
678
+ target: template.id,
679
+ input: "changeId"
680
+ });
681
+ functionTrigger = triggerShape.functionTrigger.target;
682
+ const triggerSpec = functionTrigger.spec;
683
+ invariant(triggerSpec && triggerSpec.kind === triggerKind, "No trigger spec.", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 665, S: void 0, A: ["triggerSpec && triggerSpec.kind === triggerKind", "'No trigger spec.'"] });
684
+ Obj.update(functionTrigger, (functionTrigger2) => {
685
+ initSpec(functionTrigger2.spec);
686
+ });
687
+ });
688
+ const computeModel = createComputeGraph(canvasModel);
689
+ const templateComputeNode = computeModel.nodes.find((n) => n.id === template.node);
690
+ invariant(templateComputeNode, "Template compute node was not created.", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 672, S: void 0, A: ["templateComputeNode", "'Template compute node was not created.'"] });
691
+ templateComputeNode.value = [
692
+ "{",
693
+ ' "@type": "{{type}}",',
694
+ ' "id": "@{{changeId}}"',
695
+ "}"
696
+ ].join("\n");
697
+ templateComputeNode.inputSchema = JsonSchema.toJsonSchema(Schema.Struct({
698
+ type: Schema.String,
699
+ changeId: Schema.String
700
+ }));
701
+ attachTrigger(functionTrigger, computeModel);
702
+ return {
703
+ canvasModel,
704
+ computeModel
705
+ };
706
+ };
707
+ var addToSpace = (name, space, canvas, compute) => {
708
+ return space.db.add(Obj.make(CanvasBoard.CanvasBoard, {
709
+ name,
710
+ computeGraph: Ref.make(compute.root),
711
+ layout: canvas.graph
712
+ }));
713
+ };
714
+ var setupQueue = (space, canvasModel, args) => {
715
+ const queueId = canvasModel.createNode(createConstant({
716
+ value: new DXN(DXN.kind.QUEUE, [
717
+ "data",
718
+ space.id,
719
+ Key.ObjectId.random()
720
+ ]).toString(),
721
+ ...args?.idPosition ? rawPosition(args.idPosition) : position({
722
+ x: -18,
723
+ y: 5,
724
+ width: 8,
725
+ height: 6
726
+ })
727
+ }));
728
+ const queue = canvasModel.createNode(createFeed(args?.queuePosition ? rawPosition(args.queuePosition) : position({
729
+ x: -3,
730
+ y: 3,
731
+ width: 14,
732
+ height: 10
733
+ })));
734
+ canvasModel.createEdge({
735
+ source: queueId.id,
736
+ target: queue.id
737
+ });
738
+ return {
739
+ queue,
740
+ queueId
741
+ };
742
+ };
743
+ var attachTrigger = (functionTrigger, computeModel) => {
744
+ invariant(functionTrigger, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 727, S: void 0, A: ["functionTrigger", ""] });
745
+ const inputNode = computeModel.nodes.find((node) => node.type === NODE_INPUT);
746
+ Obj.update(functionTrigger, (functionTrigger2) => {
747
+ functionTrigger2.function = Ref.make(computeModel.root);
748
+ functionTrigger2.inputNodeId = inputNode.id;
749
+ });
750
+ };
751
+ var rawPosition = (args) => {
752
+ return {
753
+ center: {
754
+ x: args.centerX,
755
+ y: args.centerY
756
+ },
757
+ size: {
758
+ width: args.width,
759
+ height: args.height
760
+ }
761
+ };
762
+ };
763
+ var position = (rect) => {
764
+ const snap = 32;
765
+ const [center, size] = rectToPoints({
766
+ width: 0,
767
+ height: 0,
768
+ ...rect
769
+ });
770
+ const { x, y, width, height } = pointsToRect([
771
+ pointMultiply(center, snap),
772
+ pointMultiply(size, snap)
773
+ ]);
774
+ if (width && height) {
775
+ return {
776
+ center: {
777
+ x,
778
+ y
779
+ },
780
+ size: width && height ? {
781
+ width,
782
+ height
783
+ } : void 0
784
+ };
785
+ } else {
786
+ return {
787
+ center: {
788
+ x,
789
+ y
790
+ }
791
+ };
792
+ }
793
+ };
794
+
795
+ // src/components/SpaceGenerator/ObjectGenerator.tsx
796
+ import { addressToA1Notation } from "@dxos/compute-hyperformula";
797
+ import { ComputeGraph, ComputeGraphModel, DEFAULT_OUTPUT, NODE_INPUT as NODE_INPUT2, NODE_OUTPUT } from "@dxos/conductor";
798
+ import { DXN as DXN2, Filter as Filter2, Key as Key2, View } from "@dxos/echo";
799
+ import { Markdown as Markdown2 } from "@dxos/plugin-markdown";
800
+ import { Sheet } from "@dxos/plugin-sheet";
801
+ import { Sketch } from "@dxos/plugin-sketch";
802
+ import { SpaceOperation } from "@dxos/plugin-space";
803
+ import { random } from "@dxos/random";
804
+ import { getTypenameFromQuery } from "@dxos/schema";
805
+ import { createAsyncGenerator } from "@dxos/schema/testing";
806
+ import { range as range2 } from "@dxos/util";
807
+ var generator2 = random;
808
+ var findViewByTypename = async (views, typename) => {
809
+ return views.find((view) => getTypenameFromQuery(view.query.ast) === typename);
810
+ };
811
+ var createGenerator = (client, invokePromise, schema) => {
812
+ return async (space, n) => {
813
+ const typename = schema.typename;
814
+ const views = await space.db.query(Filter2.type(View.View)).run();
815
+ const view = await findViewByTypename(views, typename);
816
+ const staticSchema = client?.graph.schemaRegistry.query({
817
+ typename
818
+ }).runSync()[0];
819
+ if (!view && !staticSchema) {
820
+ await invokePromise(SpaceOperation.AddSchema, {
821
+ db: space.db,
822
+ schema,
823
+ show: false
824
+ });
825
+ }
826
+ const generate = createAsyncGenerator(generator2, schema, {
827
+ db: space.db
828
+ });
829
+ return generate.createObjects(n);
830
+ };
831
+ };
832
+ var staticGenerators = /* @__PURE__ */ new Map([
833
+ [
834
+ Markdown2.Document.typename,
835
+ async (space, n, cb) => {
836
+ const objects = range2(n).map(() => {
837
+ return space.db.add(Markdown2.make({
838
+ name: random.commerce.productName(),
839
+ content: random.lorem.sentences(5)
840
+ }));
841
+ });
842
+ cb?.(objects);
843
+ return objects;
844
+ }
845
+ ],
846
+ [
847
+ Sketch.Sketch.typename,
848
+ async (space, n, cb) => {
849
+ const objects = range2(n).map(() => {
850
+ const obj = space.db.add(Sketch.make({
851
+ name: random.commerce.productName()
852
+ }));
853
+ return obj;
854
+ });
855
+ cb?.(objects);
856
+ return objects;
857
+ }
858
+ ],
859
+ // TODO(burdon): Create unit tests.
860
+ [
861
+ Sheet.Sheet.typename,
862
+ async (space, n, cb) => {
863
+ const objects = range2(n).map(() => {
864
+ const cells = {};
865
+ const year = (/* @__PURE__ */ new Date()).getFullYear();
866
+ const cols = 4;
867
+ const rows = 16;
868
+ for (let col = 1; col <= cols; col++) {
869
+ for (let row = 1; row <= rows; row++) {
870
+ const cell = addressToA1Notation({
871
+ col,
872
+ row
873
+ });
874
+ if (row === 1) {
875
+ cells[cell] = {
876
+ value: `${year} Q${col}`
877
+ };
878
+ } else if (row === rows) {
879
+ const from = addressToA1Notation({
880
+ col,
881
+ row: 2
882
+ });
883
+ const to = addressToA1Notation({
884
+ col,
885
+ row: rows - 1
886
+ });
887
+ cells[cell] = {
888
+ value: `=SUM(${from}:${to})`
889
+ };
890
+ } else if (row > 2 && row < rows - 1) {
891
+ cells[cell] = {
892
+ value: Math.floor(Math.random() * 1e4)
893
+ };
894
+ }
895
+ }
896
+ }
897
+ return space.db.add(Sheet.make({
898
+ name: random.commerce.productName(),
899
+ cells
900
+ }));
901
+ });
902
+ cb?.(objects);
903
+ return objects;
904
+ }
905
+ ],
906
+ [
907
+ ComputeGraph.typename,
908
+ async (space, n, cb) => {
909
+ const objects = range2(n, () => {
910
+ const model = ComputeGraphModel.create();
911
+ model.builder.createNode({
912
+ id: "gpt-INPUT",
913
+ type: NODE_INPUT2
914
+ }).createNode({
915
+ id: "gpt-GPT",
916
+ type: "gpt"
917
+ }).createNode({
918
+ id: "gpt-QUEUE_ID",
919
+ type: "constant",
920
+ value: new DXN2(DXN2.kind.QUEUE, [
921
+ "data",
922
+ space.id,
923
+ Key2.ObjectId.random()
924
+ ]).toString()
925
+ }).createNode({
926
+ id: "gpt-APPEND",
927
+ type: "append"
928
+ }).createNode({
929
+ id: "gpt-OUTPUT",
930
+ type: NODE_OUTPUT
931
+ }).createEdge({
932
+ node: "gpt-INPUT",
933
+ property: "prompt"
934
+ }, {
935
+ node: "gpt-GPT",
936
+ property: "prompt"
937
+ }).createEdge({
938
+ node: "gpt-GPT",
939
+ property: "text"
940
+ }, {
941
+ node: "gpt-OUTPUT",
942
+ property: "text"
943
+ }).createEdge({
944
+ node: "gpt-QUEUE_ID",
945
+ property: DEFAULT_OUTPUT
946
+ }, {
947
+ node: "gpt-APPEND",
948
+ property: "id"
949
+ }).createEdge({
950
+ node: "gpt-GPT",
951
+ property: "messages"
952
+ }, {
953
+ node: "gpt-APPEND",
954
+ property: "items"
955
+ }).createEdge({
956
+ node: "gpt-QUEUE_ID",
957
+ property: DEFAULT_OUTPUT
958
+ }, {
959
+ node: "gpt-OUTPUT",
960
+ property: "queue"
961
+ });
962
+ return space.db.add(model.root);
963
+ });
964
+ cb?.(objects);
965
+ return objects;
966
+ }
967
+ ]
968
+ ]);
969
+
970
+ // src/components/index.ts
971
+ var DebugSettings = lazy(() => import("../DebugSettings-Z3XADRNK.mjs"));
972
+ export {
973
+ DebugSettings,
974
+ PresetName,
975
+ SchemaTable,
976
+ createGenerator,
977
+ generator,
978
+ staticGenerators
979
+ };
980
+ //# sourceMappingURL=index.mjs.map