@dxos/plugin-debug 0.7.5-labs.a279d8c → 0.7.5-labs.c0e040f

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 (50) hide show
  1. package/dist/lib/browser/SpaceGenerator-OIDM3MIN.mjs +1059 -0
  2. package/dist/lib/browser/SpaceGenerator-OIDM3MIN.mjs.map +7 -0
  3. package/dist/lib/browser/{app-graph-builder-FXELWOFS.mjs → app-graph-builder-DCMGZAT3.mjs} +8 -4
  4. package/dist/lib/browser/app-graph-builder-DCMGZAT3.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-EF3UVAVI.mjs +21 -0
  6. package/dist/lib/browser/chunk-EF3UVAVI.mjs.map +7 -0
  7. package/dist/lib/browser/index.mjs +5 -11
  8. package/dist/lib/browser/index.mjs.map +3 -3
  9. package/dist/lib/browser/meta.json +1 -1
  10. package/dist/lib/browser/{react-surface-ACHNR2UU.mjs → react-surface-YAJPSHG4.mjs} +54 -51
  11. package/dist/lib/browser/react-surface-YAJPSHG4.mjs.map +7 -0
  12. package/dist/lib/browser/{settings-JCZUA643.mjs → settings-OIMSBZUC.mjs} +2 -2
  13. package/dist/types/src/DebugPlugin.d.ts.map +1 -1
  14. package/dist/types/src/capabilities/app-graph-builder.d.ts +22 -22
  15. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  16. package/dist/types/src/capabilities/index.d.ts +26 -31
  17. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  18. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  19. package/dist/types/src/components/DebugSettings.d.ts.map +1 -1
  20. package/dist/types/src/components/DebugStatus.d.ts.map +1 -1
  21. package/dist/types/src/components/SpaceGenerator/ObjectGenerator.d.ts.map +1 -1
  22. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.d.ts.map +1 -1
  23. package/dist/types/src/components/SpaceGenerator/presets.d.ts +20 -0
  24. package/dist/types/src/components/SpaceGenerator/presets.d.ts.map +1 -0
  25. package/dist/types/src/meta.d.ts +1 -0
  26. package/dist/types/src/meta.d.ts.map +1 -1
  27. package/dist/types/tsconfig.tsbuildinfo +1 -1
  28. package/package.json +47 -46
  29. package/src/DebugPlugin.tsx +2 -7
  30. package/src/capabilities/app-graph-builder.ts +7 -9
  31. package/src/capabilities/index.ts +0 -1
  32. package/src/capabilities/react-surface.tsx +7 -15
  33. package/src/components/DebugSettings.tsx +7 -9
  34. package/src/components/DebugStatus.tsx +17 -21
  35. package/src/components/SpaceGenerator/ObjectGenerator.tsx +0 -81
  36. package/src/components/SpaceGenerator/SpaceGenerator.tsx +7 -6
  37. package/src/components/SpaceGenerator/presets.ts +453 -0
  38. package/src/meta.ts +3 -1
  39. package/dist/lib/browser/SpaceGenerator-YNT3WDFI.mjs +0 -479
  40. package/dist/lib/browser/SpaceGenerator-YNT3WDFI.mjs.map +0 -7
  41. package/dist/lib/browser/app-graph-builder-FXELWOFS.mjs.map +0 -7
  42. package/dist/lib/browser/chunk-I3ON45JK.mjs +0 -18
  43. package/dist/lib/browser/chunk-I3ON45JK.mjs.map +0 -7
  44. package/dist/lib/browser/react-context-OZU6J7G3.mjs +0 -37
  45. package/dist/lib/browser/react-context-OZU6J7G3.mjs.map +0 -7
  46. package/dist/lib/browser/react-surface-ACHNR2UU.mjs.map +0 -7
  47. package/dist/types/src/capabilities/react-context.d.ts +0 -8
  48. package/dist/types/src/capabilities/react-context.d.ts.map +0 -1
  49. package/src/capabilities/react-context.tsx +0 -38
  50. /package/dist/lib/browser/{settings-JCZUA643.mjs.map → settings-OIMSBZUC.mjs.map} +0 -0
@@ -0,0 +1,1059 @@
1
+ // packages/plugins/plugin-debug/src/components/SpaceGenerator/SpaceGenerator.tsx
2
+ import React2, { useCallback, useMemo, useState } from "react";
3
+ import { ComputeGraph as ComputeGraph2 } from "@dxos/conductor";
4
+ import { DocumentType as DocumentType2 } from "@dxos/plugin-markdown/types";
5
+ import { SheetType as SheetType2 } from "@dxos/plugin-sheet/types";
6
+ import { DiagramType as DiagramType2 } from "@dxos/plugin-sketch/types";
7
+ import { useClient } from "@dxos/react-client";
8
+ import { getTypename } from "@dxos/react-client/echo";
9
+ import { IconButton as IconButton2, Input, Toolbar, useAsyncEffect } from "@dxos/react-ui";
10
+ import { SyntaxHighlighter } from "@dxos/react-ui-syntax-highlighter";
11
+ import { Testing } from "@dxos/schema/testing";
12
+ import { jsonKeyReplacer, sortKeys } from "@dxos/util";
13
+
14
+ // packages/plugins/plugin-debug/src/components/SpaceGenerator/ObjectGenerator.tsx
15
+ import { addressToA1Notation } from "@dxos/compute";
16
+ import { ComputeGraph, ComputeGraphModel, DEFAULT_OUTPUT, NODE_INPUT, NODE_OUTPUT } from "@dxos/conductor";
17
+ import { ObjectId } from "@dxos/echo-schema";
18
+ import { DXN, SpaceId } from "@dxos/keys";
19
+ import { create, makeRef } from "@dxos/live-object";
20
+ import { DocumentType } from "@dxos/plugin-markdown/types";
21
+ import { createSheet } from "@dxos/plugin-sheet/types";
22
+ import { SheetType } from "@dxos/plugin-sheet/types";
23
+ import { CanvasType, DiagramType } from "@dxos/plugin-sketch/types";
24
+ import { faker } from "@dxos/random";
25
+ import { Filter } from "@dxos/react-client/echo";
26
+ import { TableType } from "@dxos/react-ui-table";
27
+ import { createView, TextType } from "@dxos/schema";
28
+ import { createAsyncGenerator } from "@dxos/schema/testing";
29
+ import { range } from "@dxos/util";
30
+ var generator = faker;
31
+ var staticGenerators = /* @__PURE__ */ new Map([
32
+ [
33
+ DocumentType.typename,
34
+ async (space, n, cb) => {
35
+ const objects = range(n).map(() => {
36
+ return space.db.add(create(DocumentType, {
37
+ name: faker.commerce.productName(),
38
+ content: makeRef(create(TextType, {
39
+ content: faker.lorem.sentences(5)
40
+ })),
41
+ threads: []
42
+ }));
43
+ });
44
+ cb?.(objects);
45
+ return objects;
46
+ }
47
+ ],
48
+ [
49
+ DiagramType.typename,
50
+ async (space, n, cb) => {
51
+ const objects = range(n).map(() => {
52
+ const obj = space.db.add(create(DiagramType, {
53
+ name: faker.commerce.productName(),
54
+ canvas: makeRef(create(CanvasType, {
55
+ content: {}
56
+ }))
57
+ }));
58
+ return obj;
59
+ });
60
+ cb?.(objects);
61
+ return objects;
62
+ }
63
+ ],
64
+ // TODO(burdon): Create unit tests.
65
+ [
66
+ SheetType.typename,
67
+ async (space, n, cb) => {
68
+ const objects = range(n).map(() => {
69
+ const cells = {};
70
+ const year = (/* @__PURE__ */ new Date()).getFullYear();
71
+ const cols = 4;
72
+ const rows = 16;
73
+ for (let col = 1; col <= cols; col++) {
74
+ for (let row = 1; row <= rows; row++) {
75
+ const cell = addressToA1Notation({
76
+ col,
77
+ row
78
+ });
79
+ if (row === 1) {
80
+ cells[cell] = {
81
+ value: `${year} Q${col}`
82
+ };
83
+ } else if (row === rows) {
84
+ const from = addressToA1Notation({
85
+ col,
86
+ row: 2
87
+ });
88
+ const to = addressToA1Notation({
89
+ col,
90
+ row: rows - 1
91
+ });
92
+ cells[cell] = {
93
+ value: `=SUM(${from}:${to})`
94
+ };
95
+ } else if (row > 2 && row < rows - 1) {
96
+ cells[cell] = {
97
+ value: Math.floor(Math.random() * 1e4)
98
+ };
99
+ }
100
+ }
101
+ }
102
+ return space.db.add(createSheet({
103
+ name: faker.commerce.productName(),
104
+ cells
105
+ }));
106
+ });
107
+ cb?.(objects);
108
+ return objects;
109
+ }
110
+ ],
111
+ [
112
+ ComputeGraph.typename,
113
+ async (space, n, cb) => {
114
+ const objects = range(n, () => {
115
+ const model = ComputeGraphModel.create();
116
+ model.builder.createNode({
117
+ id: "gpt-INPUT",
118
+ type: NODE_INPUT
119
+ }).createNode({
120
+ id: "gpt-GPT",
121
+ type: "gpt"
122
+ }).createNode({
123
+ id: "gpt-QUEUE_ID",
124
+ type: "constant",
125
+ value: new DXN(DXN.kind.QUEUE, [
126
+ "data",
127
+ SpaceId.random(),
128
+ ObjectId.random()
129
+ ]).toString()
130
+ }).createNode({
131
+ id: "gpt-APPEND",
132
+ type: "append"
133
+ }).createNode({
134
+ id: "gpt-OUTPUT",
135
+ type: NODE_OUTPUT
136
+ }).createEdge({
137
+ node: "gpt-INPUT",
138
+ property: "prompt"
139
+ }, {
140
+ node: "gpt-GPT",
141
+ property: "prompt"
142
+ }).createEdge({
143
+ node: "gpt-GPT",
144
+ property: "text"
145
+ }, {
146
+ node: "gpt-OUTPUT",
147
+ property: "text"
148
+ }).createEdge({
149
+ node: "gpt-QUEUE_ID",
150
+ property: DEFAULT_OUTPUT
151
+ }, {
152
+ node: "gpt-APPEND",
153
+ property: "id"
154
+ }).createEdge({
155
+ node: "gpt-GPT",
156
+ property: "messages"
157
+ }, {
158
+ node: "gpt-APPEND",
159
+ property: "items"
160
+ }).createEdge({
161
+ node: "gpt-QUEUE_ID",
162
+ property: DEFAULT_OUTPUT
163
+ }, {
164
+ node: "gpt-OUTPUT",
165
+ property: "queue"
166
+ });
167
+ return space.db.add(model.root);
168
+ });
169
+ cb?.(objects);
170
+ return objects;
171
+ }
172
+ ]
173
+ ]);
174
+ var createGenerator = (type) => {
175
+ return async (space, n, cb) => {
176
+ const schema = await space.db.schemaRegistry.query({
177
+ typename: type.typename
178
+ }).firstOrUndefined() ?? (await space.db.schemaRegistry.register([
179
+ type
180
+ ]))[0];
181
+ const generate = createAsyncGenerator(generator, schema.getSchemaSnapshot(), {
182
+ db: space.db
183
+ });
184
+ const objects = await generate.createObjects(n);
185
+ const { objects: tables } = await space.db.query(Filter.schema(TableType)).run();
186
+ const table = tables.find((table2) => table2.view?.target?.query?.type === type.typename);
187
+ if (!table) {
188
+ const name = type.typename.split("/").pop() ?? type.typename;
189
+ const view = createView({
190
+ name,
191
+ typename: type.typename,
192
+ jsonSchema: schema.jsonSchema
193
+ });
194
+ const table2 = space.db.add(create(TableType, {
195
+ name,
196
+ view: makeRef(view)
197
+ }));
198
+ cb?.([
199
+ table2
200
+ ]);
201
+ }
202
+ return objects;
203
+ };
204
+ };
205
+
206
+ // packages/plugins/plugin-debug/src/components/SpaceGenerator/SchemaTable.tsx
207
+ import React from "react";
208
+ import { IconButton } from "@dxos/react-ui";
209
+ var SchemaTable = ({ types, objects = {}, label, onClick }) => {
210
+ return /* @__PURE__ */ React.createElement("div", {
211
+ className: "grid grid-cols-[1fr_80px_40px] gap-1 overflow-hidden"
212
+ }, /* @__PURE__ */ React.createElement("div", {
213
+ className: "grid grid-cols-subgrid col-span-3"
214
+ }, /* @__PURE__ */ React.createElement("div", {
215
+ className: "px-2 text-sm text-primary-500"
216
+ }, label), /* @__PURE__ */ React.createElement("div", {
217
+ className: "px-2 text-xs text-subdued text-right"
218
+ }, "count")), types.map((type) => /* @__PURE__ */ React.createElement("div", {
219
+ key: type.typename,
220
+ className: "grid grid-cols-subgrid col-span-3 items-center"
221
+ }, /* @__PURE__ */ React.createElement("div", {
222
+ className: "px-2 text-sm font-mono text-green-500"
223
+ }, type.typename), /* @__PURE__ */ React.createElement("div", {
224
+ className: "px-2 text-right font-mono"
225
+ }, objects[type.typename] ?? 0), /* @__PURE__ */ React.createElement(IconButton, {
226
+ variant: "ghost",
227
+ icon: "ph--plus--regular",
228
+ iconOnly: true,
229
+ label: "Create data",
230
+ onClick: () => onClick(type.typename)
231
+ }))));
232
+ };
233
+
234
+ // packages/plugins/plugin-debug/src/components/SpaceGenerator/presets.ts
235
+ import { EmailTriggerOutput, NODE_INPUT as NODE_INPUT2 } from "@dxos/conductor";
236
+ import { AST, ObjectId as ObjectId2, S, toJsonSchema } from "@dxos/echo-schema";
237
+ import { FunctionTrigger, TriggerKind } from "@dxos/functions/types";
238
+ import { invariant } from "@dxos/invariant";
239
+ import { DXN as DXN2, SpaceId as SpaceId2 } from "@dxos/keys";
240
+ import { create as create2, makeRef as makeRef2 } from "@dxos/live-object";
241
+ import { Filter as Filter2 } from "@dxos/react-client/echo";
242
+ import { createAppend, createChat, createComputeGraph, createConstant, createFunction, createGpt, createQueue, createSurface, createTemplate, createText, createTrigger } from "@dxos/react-ui-canvas-compute";
243
+ import { CanvasBoardType, CanvasGraphModel, pointMultiply, pointsToRect, rectToPoints } from "@dxos/react-ui-canvas-editor";
244
+ import { TableType as TableType2 } from "@dxos/react-ui-table";
245
+ import { range as range2 } from "@dxos/util";
246
+ var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-debug/src/components/SpaceGenerator/presets.ts";
247
+ var PresetName;
248
+ (function(PresetName2) {
249
+ PresetName2["EMAIL_TABLE"] = "email-table";
250
+ PresetName2["GPT_QUEUE"] = "webhook-gpt-queue";
251
+ PresetName2["CHAT_GPT"] = "chat-gpt-text";
252
+ PresetName2["EMAIL_WITH_SUMMARY"] = "email-gptSummary-table";
253
+ PresetName2["OBJECT_CHANGE_QUEUE"] = "objectChange-queue";
254
+ PresetName2["FOREX_FUNCTION_CALL"] = "forex-function-call";
255
+ PresetName2["DISCORD_MESSAGES"] = "discord-messages";
256
+ })(PresetName || (PresetName = {}));
257
+ var presets = {
258
+ schemas: [
259
+ CanvasBoardType,
260
+ FunctionTrigger
261
+ ],
262
+ types: Object.values(PresetName).map((name) => ({
263
+ typename: name
264
+ })),
265
+ items: [
266
+ [
267
+ "webhook-gpt-queue",
268
+ async (space, n, cb) => {
269
+ const objects = range2(n, () => {
270
+ const canvasModel = CanvasGraphModel.create();
271
+ let functionTrigger;
272
+ canvasModel.builder.call((builder) => {
273
+ const gpt = canvasModel.createNode(createGpt(position({
274
+ x: 0,
275
+ y: -14
276
+ })));
277
+ const triggerShape = createTrigger({
278
+ triggerKind: TriggerKind.Webhook,
279
+ ...position({
280
+ x: -18,
281
+ y: -2
282
+ })
283
+ });
284
+ const trigger = canvasModel.createNode(triggerShape);
285
+ const text = canvasModel.createNode(createText(position({
286
+ x: 19,
287
+ y: 3,
288
+ width: 10,
289
+ height: 10
290
+ })));
291
+ const { queueId } = setupQueue(canvasModel);
292
+ const append = canvasModel.createNode(createAppend(position({
293
+ x: 10,
294
+ y: 6
295
+ })));
296
+ builder.createEdge({
297
+ source: trigger.id,
298
+ target: gpt.id,
299
+ input: "prompt",
300
+ output: "bodyText"
301
+ }).createEdge({
302
+ source: gpt.id,
303
+ target: text.id,
304
+ output: "text"
305
+ }).createEdge({
306
+ source: queueId.id,
307
+ target: append.id,
308
+ input: "id"
309
+ }).createEdge({
310
+ source: gpt.id,
311
+ target: append.id,
312
+ output: "messages",
313
+ input: "items"
314
+ });
315
+ functionTrigger = triggerShape.functionTrigger.target;
316
+ });
317
+ const computeModel = createComputeGraph(canvasModel);
318
+ attachTrigger(functionTrigger, computeModel);
319
+ return addToSpace("webhook-gpt-queue", space, canvasModel, computeModel);
320
+ });
321
+ cb?.(objects);
322
+ return objects;
323
+ }
324
+ ],
325
+ [
326
+ "objectChange-queue",
327
+ async (space, n, cb) => {
328
+ const objects = range2(n, () => {
329
+ const canvasModel = CanvasGraphModel.create();
330
+ const template = canvasModel.createNode(createTemplate({
331
+ valueType: "object",
332
+ ...rawPosition({
333
+ centerX: -64,
334
+ centerY: -79,
335
+ width: 320,
336
+ height: 320
337
+ })
338
+ }));
339
+ let functionTrigger;
340
+ canvasModel.builder.call((builder) => {
341
+ const triggerShape = createTrigger({
342
+ triggerKind: TriggerKind.Subscription,
343
+ ...position({
344
+ x: -18,
345
+ y: -2
346
+ })
347
+ });
348
+ const trigger = canvasModel.createNode(triggerShape);
349
+ const { queueId } = setupQueue(canvasModel, {
350
+ queuePosition: {
351
+ centerX: -80,
352
+ centerY: 378,
353
+ width: 320,
354
+ height: 448
355
+ }
356
+ });
357
+ const append = canvasModel.createNode(createAppend(rawPosition({
358
+ centerX: 320,
359
+ centerY: 192,
360
+ width: 128,
361
+ height: 122
362
+ })));
363
+ builder.createEdge({
364
+ source: queueId.id,
365
+ target: append.id,
366
+ input: "id"
367
+ }).createEdge({
368
+ source: template.id,
369
+ target: append.id,
370
+ input: "items"
371
+ }).createEdge({
372
+ source: trigger.id,
373
+ target: template.id,
374
+ output: "type",
375
+ input: "type"
376
+ }).createEdge({
377
+ source: trigger.id,
378
+ target: template.id,
379
+ output: "changedObjectId",
380
+ input: "changedObjectId"
381
+ });
382
+ functionTrigger = triggerShape.functionTrigger.target;
383
+ const triggerSpec = functionTrigger.spec;
384
+ invariant(triggerSpec && triggerSpec.type === TriggerKind.Subscription, "No trigger spec.", {
385
+ F: __dxlog_file,
386
+ L: 127,
387
+ S: void 0,
388
+ A: [
389
+ "triggerSpec && triggerSpec.type === TriggerKind.Subscription",
390
+ "'No trigger spec.'"
391
+ ]
392
+ });
393
+ triggerSpec.filter = {
394
+ type: "dxn:type:dxos.org/type/Chess"
395
+ };
396
+ });
397
+ const computeModel = createComputeGraph(canvasModel);
398
+ const templateComputeNode = computeModel.nodes.find((n2) => n2.id === template.node);
399
+ invariant(templateComputeNode, "Template compute node was not created.", {
400
+ F: __dxlog_file,
401
+ L: 134,
402
+ S: void 0,
403
+ A: [
404
+ "templateComputeNode",
405
+ "'Template compute node was not created.'"
406
+ ]
407
+ });
408
+ templateComputeNode.value = [
409
+ "{",
410
+ ' "@type": "{{type}}",',
411
+ ' "id": "{{changedObjectId}}"',
412
+ "}"
413
+ ].join("\n");
414
+ templateComputeNode.inputSchema = toJsonSchema(S.Struct({
415
+ type: S.String,
416
+ changedObjectId: S.String
417
+ }));
418
+ attachTrigger(functionTrigger, computeModel);
419
+ return addToSpace("objectChange-queue", space, canvasModel, computeModel);
420
+ });
421
+ cb?.(objects);
422
+ return objects;
423
+ }
424
+ ],
425
+ [
426
+ "email-table",
427
+ async (space, n, cb) => {
428
+ const objects = range2(n, () => {
429
+ const canvasModel = CanvasGraphModel.create();
430
+ const results = space.db.query(Filter2.schema(TableType2)).runSync();
431
+ const emailTable = results.find((r) => r.object?.view?.target?.query?.type?.endsWith("Email"));
432
+ invariant(emailTable, "Email table not found.", {
433
+ F: __dxlog_file,
434
+ L: 155,
435
+ S: void 0,
436
+ A: [
437
+ "emailTable",
438
+ "'Email table not found.'"
439
+ ]
440
+ });
441
+ const template = canvasModel.createNode(createTemplate({
442
+ valueType: "object",
443
+ ...rawPosition({
444
+ centerX: -80,
445
+ centerY: -64,
446
+ width: 320,
447
+ height: 320
448
+ })
449
+ }));
450
+ const templateContent = [
451
+ "{"
452
+ ];
453
+ let functionTrigger;
454
+ canvasModel.builder.call((builder) => {
455
+ const triggerShape = createTrigger({
456
+ triggerKind: TriggerKind.Email,
457
+ ...position({
458
+ x: -18,
459
+ y: -2
460
+ })
461
+ });
462
+ const trigger = canvasModel.createNode(triggerShape);
463
+ const tableId = canvasModel.createNode(createConstant({
464
+ value: DXN2.fromLocalObjectId(emailTable.id).toString(),
465
+ ...position({
466
+ x: -18,
467
+ y: 5,
468
+ width: 8,
469
+ height: 6
470
+ })
471
+ }));
472
+ const appendToTable = canvasModel.createNode(createAppend(position({
473
+ x: 10,
474
+ y: 6
475
+ })));
476
+ const properties = AST.getPropertySignatures(EmailTriggerOutput.ast);
477
+ for (let i = 0; i < properties.length; i++) {
478
+ const propName = properties[i].name.toString();
479
+ builder.createEdge({
480
+ source: trigger.id,
481
+ target: template.id,
482
+ input: propName,
483
+ output: propName
484
+ });
485
+ templateContent.push(` "${propName}": "{{${propName}}}"` + (i === properties.length - 1 ? "" : ","));
486
+ }
487
+ templateContent.push("}");
488
+ builder.createEdge({
489
+ source: tableId.id,
490
+ target: appendToTable.id,
491
+ input: "id"
492
+ }).createEdge({
493
+ source: template.id,
494
+ target: appendToTable.id,
495
+ input: "items"
496
+ });
497
+ functionTrigger = triggerShape.functionTrigger.target;
498
+ });
499
+ const computeModel = createComputeGraph(canvasModel);
500
+ const templateComputeNode = computeModel.nodes.find((n2) => n2.id === template.node);
501
+ invariant(templateComputeNode, "Template compute node was not created.", {
502
+ F: __dxlog_file,
503
+ L: 197,
504
+ S: void 0,
505
+ A: [
506
+ "templateComputeNode",
507
+ "'Template compute node was not created.'"
508
+ ]
509
+ });
510
+ templateComputeNode.value = templateContent.join("\n");
511
+ templateComputeNode.inputSchema = toJsonSchema(EmailTriggerOutput);
512
+ attachTrigger(functionTrigger, computeModel);
513
+ return addToSpace("email-table", space, canvasModel, computeModel);
514
+ });
515
+ cb?.(objects);
516
+ return objects;
517
+ }
518
+ ],
519
+ [
520
+ "chat-gpt-text",
521
+ async (space, n, cb) => {
522
+ const objects = range2(n, () => {
523
+ const canvasModel = CanvasGraphModel.create();
524
+ canvasModel.builder.call((builder) => {
525
+ const gpt = canvasModel.createNode(createGpt(position({
526
+ x: 0,
527
+ y: -14
528
+ })));
529
+ const chat = canvasModel.createNode(createChat(position({
530
+ x: -18,
531
+ y: -2
532
+ })));
533
+ const text = canvasModel.createNode(createText(position({
534
+ x: 19,
535
+ y: 3,
536
+ width: 10,
537
+ height: 10
538
+ })));
539
+ const { queueId } = setupQueue(canvasModel);
540
+ const append = canvasModel.createNode(createAppend(position({
541
+ x: 10,
542
+ y: 6
543
+ })));
544
+ builder.createEdge({
545
+ source: chat.id,
546
+ target: gpt.id,
547
+ input: "prompt"
548
+ }).createEdge({
549
+ source: gpt.id,
550
+ target: text.id,
551
+ output: "text"
552
+ }).createEdge({
553
+ source: queueId.id,
554
+ target: append.id,
555
+ input: "id"
556
+ }).createEdge({
557
+ source: gpt.id,
558
+ target: append.id,
559
+ output: "messages",
560
+ input: "items"
561
+ });
562
+ });
563
+ const computeModel = createComputeGraph(canvasModel);
564
+ return addToSpace("chat-gpt-text", space, canvasModel, computeModel);
565
+ });
566
+ cb?.(objects);
567
+ return objects;
568
+ }
569
+ ],
570
+ [
571
+ "email-gptSummary-table",
572
+ async (space, n, cb) => {
573
+ const objects = range2(n, () => {
574
+ const canvasModel = CanvasGraphModel.create();
575
+ const results = space.db.query(Filter2.schema(TableType2)).runSync();
576
+ const emailTable = results.find((r) => r.object?.view?.target?.query?.type?.endsWith("Email"));
577
+ invariant(emailTable, "Email table not found.", {
578
+ F: __dxlog_file,
579
+ L: 248,
580
+ S: void 0,
581
+ A: [
582
+ "emailTable",
583
+ "'Email table not found.'"
584
+ ]
585
+ });
586
+ const template = canvasModel.createNode(createTemplate({
587
+ valueType: "object",
588
+ ...rawPosition({
589
+ centerX: 192,
590
+ centerY: -176,
591
+ width: 320,
592
+ height: 320
593
+ })
594
+ }));
595
+ const templateContent = [
596
+ "{"
597
+ ];
598
+ let functionTrigger;
599
+ canvasModel.builder.call((builder) => {
600
+ const gpt = canvasModel.createNode(createGpt(rawPosition({
601
+ centerX: -400,
602
+ centerY: -112,
603
+ width: 256,
604
+ height: 202
605
+ })));
606
+ const systemPrompt = canvasModel.createNode(createConstant({
607
+ value: "use one word to describe content category. don't write anything else",
608
+ ...rawPosition({
609
+ centerX: -800,
610
+ centerY: -160,
611
+ width: 192,
612
+ height: 128
613
+ })
614
+ }));
615
+ const triggerShape = createTrigger({
616
+ triggerKind: TriggerKind.Email,
617
+ ...rawPosition({
618
+ centerX: -736,
619
+ centerY: -384,
620
+ width: 182,
621
+ height: 192
622
+ })
623
+ });
624
+ const trigger = canvasModel.createNode(triggerShape);
625
+ const { queueId } = setupQueue(canvasModel, {
626
+ idPosition: {
627
+ centerX: -720,
628
+ centerY: 224,
629
+ width: 192,
630
+ height: 256
631
+ },
632
+ queuePosition: {
633
+ centerX: -144,
634
+ centerY: 416,
635
+ width: 320,
636
+ height: 448
637
+ }
638
+ });
639
+ const appendToQueue = canvasModel.createNode(createAppend(rawPosition({
640
+ centerX: -80,
641
+ centerY: 96,
642
+ width: 122,
643
+ height: 128
644
+ })));
645
+ const tableId = canvasModel.createNode(createConstant({
646
+ value: DXN2.fromLocalObjectId(emailTable.id).toString(),
647
+ ...rawPosition({
648
+ centerX: -112,
649
+ centerY: -544,
650
+ width: 192,
651
+ height: 256
652
+ })
653
+ }));
654
+ const appendToTable = canvasModel.createNode(createAppend(rawPosition({
655
+ centerX: 560,
656
+ centerY: -416,
657
+ width: 128,
658
+ height: 122
659
+ })));
660
+ templateContent.push(' "category": "{{text}}",');
661
+ builder.createEdge({
662
+ source: gpt.id,
663
+ target: template.id,
664
+ input: "text",
665
+ output: "text"
666
+ });
667
+ const properties = AST.getPropertySignatures(EmailTriggerOutput.ast);
668
+ for (let i = 0; i < properties.length; i++) {
669
+ const propName = properties[i].name.toString();
670
+ builder.createEdge({
671
+ source: trigger.id,
672
+ target: template.id,
673
+ input: propName,
674
+ output: propName
675
+ });
676
+ templateContent.push(` "${propName}": "{{${propName}}}"` + (i === properties.length - 1 ? "" : ","));
677
+ }
678
+ templateContent.push("}");
679
+ builder.createEdge({
680
+ source: tableId.id,
681
+ target: appendToTable.id,
682
+ input: "id"
683
+ }).createEdge({
684
+ source: queueId.id,
685
+ target: appendToQueue.id,
686
+ input: "id"
687
+ }).createEdge({
688
+ source: gpt.id,
689
+ target: appendToQueue.id,
690
+ output: "messages",
691
+ input: "items"
692
+ }).createEdge({
693
+ source: systemPrompt.id,
694
+ target: gpt.id,
695
+ input: "systemPrompt"
696
+ }).createEdge({
697
+ source: trigger.id,
698
+ target: gpt.id,
699
+ input: "prompt",
700
+ output: "body"
701
+ }).createEdge({
702
+ source: template.id,
703
+ target: appendToTable.id,
704
+ input: "items"
705
+ });
706
+ functionTrigger = triggerShape.functionTrigger.target;
707
+ });
708
+ const computeModel = createComputeGraph(canvasModel);
709
+ const templateComputeNode = computeModel.nodes.find((n2) => n2.id === template.node);
710
+ invariant(templateComputeNode, "Template compute node was not created.", {
711
+ F: __dxlog_file,
712
+ L: 319,
713
+ S: void 0,
714
+ A: [
715
+ "templateComputeNode",
716
+ "'Template compute node was not created.'"
717
+ ]
718
+ });
719
+ templateComputeNode.value = templateContent.join("\n");
720
+ const extendedSchema = S.extend(EmailTriggerOutput, S.Struct({
721
+ text: S.String
722
+ }));
723
+ templateComputeNode.inputSchema = toJsonSchema(extendedSchema);
724
+ attachTrigger(functionTrigger, computeModel);
725
+ return addToSpace("email-gptSummary-table", space, canvasModel, computeModel);
726
+ });
727
+ cb?.(objects);
728
+ return objects;
729
+ }
730
+ ],
731
+ [
732
+ "forex-function-call",
733
+ async (space, n, cb) => {
734
+ const objects = range2(n, () => {
735
+ const canvasModel = CanvasGraphModel.create();
736
+ canvasModel.builder.call((builder) => {
737
+ const sourceCurrency = canvasModel.createNode(createConstant({
738
+ value: "USD",
739
+ ...position({
740
+ x: -10,
741
+ y: -5
742
+ })
743
+ }));
744
+ const targetCurrency = canvasModel.createNode(createConstant({
745
+ value: "EUR",
746
+ ...position({
747
+ x: -10,
748
+ y: 5
749
+ })
750
+ }));
751
+ const converter = canvasModel.createNode(createFunction(position({
752
+ x: 0,
753
+ y: 0
754
+ })));
755
+ const view = canvasModel.createNode(createSurface(position({
756
+ x: 12,
757
+ y: 0
758
+ })));
759
+ builder.createEdge({
760
+ source: sourceCurrency.id,
761
+ target: converter.id,
762
+ input: "from"
763
+ }).createEdge({
764
+ source: targetCurrency.id,
765
+ target: converter.id,
766
+ input: "to"
767
+ }).createEdge({
768
+ source: converter.id,
769
+ target: view.id,
770
+ output: "rate"
771
+ });
772
+ });
773
+ const computeModel = createComputeGraph(canvasModel);
774
+ return addToSpace("forex-function-call", space, canvasModel, computeModel);
775
+ });
776
+ cb?.(objects);
777
+ return objects;
778
+ }
779
+ ],
780
+ [
781
+ "discord-messages",
782
+ async (space, n, cb) => {
783
+ const objects = range2(n, () => {
784
+ const canvasModel = CanvasGraphModel.create();
785
+ canvasModel.builder.call((builder) => {
786
+ const channelId = canvasModel.createNode(createConstant({
787
+ value: "837138313172353098",
788
+ ...position({
789
+ x: -10,
790
+ y: -5
791
+ })
792
+ }));
793
+ const queueId = canvasModel.createNode(createConstant({
794
+ value: new DXN2(DXN2.kind.QUEUE, [
795
+ "data",
796
+ SpaceId2.random(),
797
+ ObjectId2.random()
798
+ ]).toString(),
799
+ ...position({
800
+ x: -10,
801
+ y: 5
802
+ })
803
+ }));
804
+ const converter = canvasModel.createNode(createFunction(position({
805
+ x: 0,
806
+ y: 0
807
+ })));
808
+ const view = canvasModel.createNode(createText(position({
809
+ x: 12,
810
+ y: 0
811
+ })));
812
+ const queue = canvasModel.createNode(createQueue(position({
813
+ x: 0,
814
+ y: 12
815
+ })));
816
+ builder.createEdge({
817
+ source: queueId.id,
818
+ target: converter.id,
819
+ input: "queueId"
820
+ }).createEdge({
821
+ source: channelId.id,
822
+ target: converter.id,
823
+ input: "channelId"
824
+ }).createEdge({
825
+ source: converter.id,
826
+ target: view.id,
827
+ output: "newMessages"
828
+ }).createEdge({
829
+ source: queueId.id,
830
+ target: queue.id,
831
+ input: "input"
832
+ });
833
+ });
834
+ const computeModel = createComputeGraph(canvasModel);
835
+ return addToSpace("discord-messages", space, canvasModel, computeModel);
836
+ });
837
+ cb?.(objects);
838
+ return objects;
839
+ }
840
+ ]
841
+ ]
842
+ };
843
+ var addToSpace = (name, space, canvas, compute) => {
844
+ return space.db.add(create2(CanvasBoardType, {
845
+ name,
846
+ computeGraph: makeRef2(compute.root),
847
+ layout: canvas.graph
848
+ }));
849
+ };
850
+ var setupQueue = (canvasModel, args) => {
851
+ const queueId = canvasModel.createNode(createConstant({
852
+ value: new DXN2(DXN2.kind.QUEUE, [
853
+ "data",
854
+ SpaceId2.random(),
855
+ ObjectId2.random()
856
+ ]).toString(),
857
+ ...args?.idPosition ? rawPosition(args.idPosition) : position({
858
+ x: -18,
859
+ y: 5,
860
+ width: 8,
861
+ height: 6
862
+ })
863
+ }));
864
+ const queue = canvasModel.createNode(createQueue(args?.queuePosition ? rawPosition(args.queuePosition) : position({
865
+ x: -3,
866
+ y: 3,
867
+ width: 14,
868
+ height: 10
869
+ })));
870
+ canvasModel.createEdge({
871
+ source: queueId.id,
872
+ target: queue.id
873
+ });
874
+ return {
875
+ queue,
876
+ queueId
877
+ };
878
+ };
879
+ var attachTrigger = (functionTrigger, computeModel) => {
880
+ invariant(functionTrigger, void 0, {
881
+ F: __dxlog_file,
882
+ L: 431,
883
+ S: void 0,
884
+ A: [
885
+ "functionTrigger",
886
+ ""
887
+ ]
888
+ });
889
+ functionTrigger.function = DXN2.fromLocalObjectId(computeModel.root.id).toString();
890
+ functionTrigger.meta ??= {};
891
+ const inputNode = computeModel.nodes.find((node) => node.type === NODE_INPUT2);
892
+ functionTrigger.meta.computeNodeId = inputNode.id;
893
+ };
894
+ var rawPosition = (args) => {
895
+ return {
896
+ center: {
897
+ x: args.centerX,
898
+ y: args.centerY
899
+ },
900
+ size: {
901
+ width: args.width,
902
+ height: args.height
903
+ }
904
+ };
905
+ };
906
+ var position = (rect) => {
907
+ const snap = 32;
908
+ const [center, size] = rectToPoints({
909
+ width: 0,
910
+ height: 0,
911
+ ...rect
912
+ });
913
+ const { x, y, width, height } = pointsToRect([
914
+ pointMultiply(center, snap),
915
+ pointMultiply(size, snap)
916
+ ]);
917
+ if (width && height) {
918
+ return {
919
+ center: {
920
+ x,
921
+ y
922
+ },
923
+ size: width && height ? {
924
+ width,
925
+ height
926
+ } : void 0
927
+ };
928
+ } else {
929
+ return {
930
+ center: {
931
+ x,
932
+ y
933
+ }
934
+ };
935
+ }
936
+ };
937
+
938
+ // packages/plugins/plugin-debug/src/components/SpaceGenerator/SpaceGenerator.tsx
939
+ var SpaceGenerator = ({ space, onCreateObjects }) => {
940
+ const client = useClient();
941
+ const staticTypes = [
942
+ DocumentType2,
943
+ DiagramType2,
944
+ SheetType2,
945
+ ComputeGraph2
946
+ ];
947
+ const mutableTypes = [
948
+ Testing.OrgType,
949
+ Testing.ProjectType,
950
+ Testing.ContactType,
951
+ Testing.EmailType
952
+ ];
953
+ const [count, setCount] = useState(1);
954
+ const [info, setInfo] = useState({});
955
+ const typeMap = useMemo(() => {
956
+ client.addTypes([
957
+ ...staticTypes,
958
+ ...presets.schemas
959
+ ]);
960
+ const mutableGenerators = new Map(mutableTypes.map((type) => [
961
+ type.typename,
962
+ createGenerator(type)
963
+ ]));
964
+ return new Map([
965
+ ...staticGenerators,
966
+ ...presets.items,
967
+ ...mutableGenerators
968
+ ]);
969
+ }, [
970
+ client,
971
+ mutableTypes
972
+ ]);
973
+ const updateInfo = async () => {
974
+ const echoSchema = await space.db.schemaRegistry.query().run();
975
+ const staticSchema = space.db.graph.schemaRegistry.schemas;
976
+ const { objects } = await space.db.query().run();
977
+ const objectMap = sortKeys(objects.reduce((map, obj) => {
978
+ const type = getTypename(obj);
979
+ if (type) {
980
+ const count2 = map[type] ?? 0;
981
+ map[type] = count2 + 1;
982
+ }
983
+ return map;
984
+ }, {}));
985
+ setInfo({
986
+ schema: {
987
+ static: staticSchema.length,
988
+ mutable: echoSchema.length
989
+ },
990
+ objects: objectMap
991
+ });
992
+ };
993
+ useAsyncEffect(updateInfo, [
994
+ space
995
+ ]);
996
+ const handleCreateData = useCallback(async (typename) => {
997
+ const constructor = typeMap.get(typename);
998
+ if (constructor) {
999
+ await constructor(space, count, onCreateObjects);
1000
+ await updateInfo();
1001
+ }
1002
+ }, [
1003
+ typeMap,
1004
+ count
1005
+ ]);
1006
+ return /* @__PURE__ */ React2.createElement("div", {
1007
+ role: "none",
1008
+ className: "flex flex-col divide-y divide-separator"
1009
+ }, /* @__PURE__ */ React2.createElement(Toolbar.Root, {
1010
+ classNames: "p-1"
1011
+ }, /* @__PURE__ */ React2.createElement(IconButton2, {
1012
+ icon: "ph--arrow-clockwise--regular",
1013
+ iconOnly: true,
1014
+ label: "Refresh",
1015
+ onClick: updateInfo
1016
+ }), /* @__PURE__ */ React2.createElement(Toolbar.Separator, {
1017
+ variant: "gap"
1018
+ }), /* @__PURE__ */ React2.createElement("div", {
1019
+ className: "flex"
1020
+ }, /* @__PURE__ */ React2.createElement(Input.Root, null, /* @__PURE__ */ React2.createElement(Input.TextInput, {
1021
+ type: "number",
1022
+ min: 1,
1023
+ max: 100,
1024
+ placeholder: "Count",
1025
+ classNames: "w-[80px]",
1026
+ value: count,
1027
+ onChange: (ev) => setCount(parseInt(ev.target.value))
1028
+ })))), /* @__PURE__ */ React2.createElement(SchemaTable, {
1029
+ types: staticTypes,
1030
+ objects: info.objects,
1031
+ label: "Static Types",
1032
+ onClick: handleCreateData
1033
+ }), /* @__PURE__ */ React2.createElement(SchemaTable, {
1034
+ types: mutableTypes,
1035
+ objects: info.objects,
1036
+ label: "Mutable Types",
1037
+ onClick: handleCreateData
1038
+ }), /* @__PURE__ */ React2.createElement(SchemaTable, {
1039
+ types: presets.types,
1040
+ objects: info.objects,
1041
+ label: "Presets",
1042
+ onClick: handleCreateData
1043
+ }), /* @__PURE__ */ React2.createElement(SyntaxHighlighter, {
1044
+ classNames: "flex text-xs",
1045
+ language: "json"
1046
+ }, JSON.stringify({
1047
+ space,
1048
+ ...info
1049
+ }, jsonKeyReplacer({
1050
+ truncate: true
1051
+ }), 2)));
1052
+ };
1053
+
1054
+ // packages/plugins/plugin-debug/src/components/SpaceGenerator/index.ts
1055
+ var SpaceGenerator_default = SpaceGenerator;
1056
+ export {
1057
+ SpaceGenerator_default as default
1058
+ };
1059
+ //# sourceMappingURL=SpaceGenerator-OIDM3MIN.mjs.map