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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (233) 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/GithubPanel-DAIR6QSZ.mjs +177 -0
  22. package/dist/lib/neutral/GithubPanel-DAIR6QSZ.mjs.map +7 -0
  23. package/dist/lib/neutral/SpaceGenerator-UBYB4NPD.mjs +143 -0
  24. package/dist/lib/neutral/SpaceGenerator-UBYB4NPD.mjs.map +7 -0
  25. package/dist/lib/neutral/Wireframe-7SNRUKET.mjs +52 -0
  26. package/dist/lib/neutral/Wireframe-7SNRUKET.mjs.map +7 -0
  27. package/dist/lib/neutral/app-graph-builder-OIC65GEP.mjs +577 -0
  28. package/dist/lib/neutral/app-graph-builder-OIC65GEP.mjs.map +7 -0
  29. package/dist/lib/neutral/capabilities/index.mjs +15 -0
  30. package/dist/lib/neutral/capabilities/index.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/{browser/chunk-SRV2AIGJ.mjs → neutral/chunk-NFIOTQRZ.mjs} +30 -9
  34. package/dist/lib/neutral/chunk-NFIOTQRZ.mjs.map +7 -0
  35. package/dist/lib/{browser/chunk-WZFZ4ESO.mjs → neutral/chunk-SWW2QL66.mjs} +6 -2
  36. package/dist/lib/neutral/chunk-SWW2QL66.mjs.map +7 -0
  37. package/dist/lib/{browser/SpaceGenerator-BED4UXGS.mjs → neutral/components/index.mjs} +295 -467
  38. package/dist/lib/neutral/components/index.mjs.map +7 -0
  39. package/dist/lib/neutral/containers/index.mjs +23 -0
  40. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  41. package/dist/lib/neutral/index.mjs +18 -0
  42. package/dist/lib/neutral/index.mjs.map +7 -0
  43. package/dist/lib/neutral/meta.json +1 -0
  44. package/dist/lib/neutral/meta.mjs +8 -0
  45. package/dist/lib/neutral/meta.mjs.map +7 -0
  46. package/dist/lib/neutral/plugin.mjs +12 -0
  47. package/dist/lib/neutral/plugin.mjs.map +7 -0
  48. package/dist/lib/neutral/react-context-MUZ3KVLU.mjs +17 -0
  49. package/dist/lib/neutral/react-context-MUZ3KVLU.mjs.map +7 -0
  50. package/dist/lib/neutral/react-surface-UP747GQ7.mjs +419 -0
  51. package/dist/lib/neutral/react-surface-UP747GQ7.mjs.map +7 -0
  52. package/dist/lib/neutral/settings-MPM6YUP4.mjs +28 -0
  53. package/dist/lib/neutral/settings-MPM6YUP4.mjs.map +7 -0
  54. package/dist/lib/neutral/translations.mjs +89 -0
  55. package/dist/lib/neutral/translations.mjs.map +7 -0
  56. package/dist/lib/neutral/types/index.mjs +14 -0
  57. package/dist/lib/neutral/types/index.mjs.map +7 -0
  58. package/dist/types/src/DebugPlugin.d.ts +4 -1
  59. package/dist/types/src/DebugPlugin.d.ts.map +1 -1
  60. package/dist/types/src/DebugPlugin.node.d.ts +5 -0
  61. package/dist/types/src/DebugPlugin.node.d.ts.map +1 -0
  62. package/dist/types/src/DebugPlugin.test.d.ts +2 -0
  63. package/dist/types/src/DebugPlugin.test.d.ts.map +1 -0
  64. package/dist/types/src/DebugPlugin.workerd.d.ts +5 -0
  65. package/dist/types/src/DebugPlugin.workerd.d.ts.map +1 -0
  66. package/dist/types/src/capabilities/app-graph-builder.d.ts +4 -2
  67. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  68. package/dist/types/src/capabilities/index.d.ts +8 -5
  69. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  70. package/dist/types/src/capabilities/react-context.d.ts +4 -2
  71. package/dist/types/src/capabilities/react-context.d.ts.map +1 -1
  72. package/dist/types/src/capabilities/react-surface.d.ts +7 -2
  73. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  74. package/dist/types/src/capabilities/settings.d.ts +5 -2
  75. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  76. package/dist/types/src/components/DebugSettings/DebugSettings.d.ts +11 -0
  77. package/dist/types/src/components/DebugSettings/DebugSettings.d.ts.map +1 -0
  78. package/dist/types/src/components/DebugSettings/DebugSettings.stories.d.ts +104 -0
  79. package/dist/types/src/components/DebugSettings/DebugSettings.stories.d.ts.map +1 -0
  80. package/dist/types/src/components/DebugSettings/index.d.ts +2 -0
  81. package/dist/types/src/components/DebugSettings/index.d.ts.map +1 -0
  82. package/dist/types/src/components/SchemaTable/SchemaTable.d.ts.map +1 -0
  83. package/dist/types/src/components/SchemaTable/index.d.ts +2 -0
  84. package/dist/types/src/components/SchemaTable/index.d.ts.map +1 -0
  85. package/dist/types/src/components/SpaceGenerator/ObjectGenerator.d.ts +5 -5
  86. package/dist/types/src/components/SpaceGenerator/ObjectGenerator.d.ts.map +1 -1
  87. package/dist/types/src/components/SpaceGenerator/draw-util.d.ts.map +1 -1
  88. package/dist/types/src/components/SpaceGenerator/index.d.ts +2 -2
  89. package/dist/types/src/components/SpaceGenerator/index.d.ts.map +1 -1
  90. package/dist/types/src/components/SpaceGenerator/presets.d.ts +1 -48
  91. package/dist/types/src/components/SpaceGenerator/presets.d.ts.map +1 -1
  92. package/dist/types/src/components/index.d.ts +4 -10
  93. package/dist/types/src/components/index.d.ts.map +1 -1
  94. package/dist/types/src/containers/DebugGraph/DebugGraph.d.ts +8 -0
  95. package/dist/types/src/containers/DebugGraph/DebugGraph.d.ts.map +1 -0
  96. package/dist/types/src/containers/DebugGraph/index.d.ts +2 -0
  97. package/dist/types/src/containers/DebugGraph/index.d.ts.map +1 -0
  98. package/dist/types/src/containers/DebugObjectPanel/DebugObjectPanel.d.ts +6 -0
  99. package/dist/types/src/containers/DebugObjectPanel/DebugObjectPanel.d.ts.map +1 -0
  100. package/dist/types/src/containers/DebugObjectPanel/index.d.ts +2 -0
  101. package/dist/types/src/containers/DebugObjectPanel/index.d.ts.map +1 -0
  102. package/dist/types/src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.d.ts +5 -0
  103. package/dist/types/src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.d.ts.map +1 -0
  104. package/dist/types/src/containers/DebugSpaceObjectsPanel/index.d.ts +2 -0
  105. package/dist/types/src/containers/DebugSpaceObjectsPanel/index.d.ts.map +1 -0
  106. package/dist/types/src/containers/DebugStatus/DebugStatus.d.ts.map +1 -0
  107. package/dist/types/src/containers/DebugStatus/index.d.ts +2 -0
  108. package/dist/types/src/containers/DebugStatus/index.d.ts.map +1 -0
  109. package/dist/types/src/{components → containers/DevtoolsOverviewContainer}/DevtoolsOverviewContainer.d.ts +0 -1
  110. package/dist/types/src/containers/DevtoolsOverviewContainer/DevtoolsOverviewContainer.d.ts.map +1 -0
  111. package/dist/types/src/containers/DevtoolsOverviewContainer/index.d.ts +2 -0
  112. package/dist/types/src/containers/DevtoolsOverviewContainer/index.d.ts.map +1 -0
  113. package/dist/types/src/containers/GithubPanel/GithubComponent.d.ts +15 -0
  114. package/dist/types/src/containers/GithubPanel/GithubComponent.d.ts.map +1 -0
  115. package/dist/types/src/containers/GithubPanel/GithubComponent.stories.d.ts +104 -0
  116. package/dist/types/src/containers/GithubPanel/GithubComponent.stories.d.ts.map +1 -0
  117. package/dist/types/src/containers/GithubPanel/GithubPanel.d.ts +3 -0
  118. package/dist/types/src/containers/GithubPanel/GithubPanel.d.ts.map +1 -0
  119. package/dist/types/src/containers/GithubPanel/index.d.ts +2 -0
  120. package/dist/types/src/containers/GithubPanel/index.d.ts.map +1 -0
  121. package/dist/types/src/containers/SpaceGenerator/SpaceGenerator.d.ts +11 -0
  122. package/dist/types/src/containers/SpaceGenerator/SpaceGenerator.d.ts.map +1 -0
  123. package/dist/types/src/containers/SpaceGenerator/index.d.ts +2 -0
  124. package/dist/types/src/containers/SpaceGenerator/index.d.ts.map +1 -0
  125. package/dist/types/src/{components → containers/Wireframe}/Wireframe.d.ts +1 -1
  126. package/dist/types/src/containers/Wireframe/Wireframe.d.ts.map +1 -0
  127. package/dist/types/src/containers/Wireframe/index.d.ts +2 -0
  128. package/dist/types/src/containers/Wireframe/index.d.ts.map +1 -0
  129. package/dist/types/src/containers/index.d.ts +10 -0
  130. package/dist/types/src/containers/index.d.ts.map +1 -0
  131. package/dist/types/src/index.d.ts +1 -1
  132. package/dist/types/src/index.d.ts.map +1 -1
  133. package/dist/types/src/meta.d.ts +2 -2
  134. package/dist/types/src/meta.d.ts.map +1 -1
  135. package/dist/types/src/plugin.d.ts +4 -0
  136. package/dist/types/src/plugin.d.ts.map +1 -0
  137. package/dist/types/src/translations.d.ts +85 -59
  138. package/dist/types/src/translations.d.ts.map +1 -1
  139. package/dist/types/src/types/Settings.d.ts +8 -0
  140. package/dist/types/src/types/Settings.d.ts.map +1 -0
  141. package/dist/types/src/types/index.d.ts +69 -0
  142. package/dist/types/src/types/index.d.ts.map +1 -0
  143. package/dist/types/tsconfig.tsbuildinfo +1 -1
  144. package/package.json +134 -76
  145. package/src/DebugPlugin.node.ts +18 -0
  146. package/src/DebugPlugin.test.ts +29 -0
  147. package/src/DebugPlugin.tsx +28 -34
  148. package/src/DebugPlugin.workerd.ts +12 -0
  149. package/src/capabilities/app-graph-builder.ts +362 -388
  150. package/src/capabilities/index.ts +5 -5
  151. package/src/capabilities/react-context.tsx +16 -7
  152. package/src/capabilities/react-surface.tsx +376 -356
  153. package/src/capabilities/settings.ts +24 -12
  154. package/src/components/DebugSettings/DebugSettings.stories.tsx +36 -0
  155. package/src/components/DebugSettings/DebugSettings.tsx +262 -0
  156. package/src/components/DebugSettings/index.ts +5 -0
  157. package/src/components/{SpaceGenerator → SchemaTable}/SchemaTable.tsx +2 -2
  158. package/src/components/SchemaTable/index.ts +5 -0
  159. package/src/components/SpaceGenerator/ObjectGenerator.tsx +26 -29
  160. package/src/components/SpaceGenerator/draw-util.ts +8 -8
  161. package/src/components/SpaceGenerator/index.ts +2 -3
  162. package/src/components/SpaceGenerator/presets.ts +184 -101
  163. package/src/components/index.ts +4 -8
  164. package/src/containers/DebugGraph/DebugGraph.tsx +14 -0
  165. package/src/containers/DebugGraph/index.ts +5 -0
  166. package/src/containers/DebugObjectPanel/DebugObjectPanel.tsx +76 -0
  167. package/src/containers/DebugObjectPanel/index.ts +5 -0
  168. package/src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.tsx +47 -0
  169. package/src/containers/DebugSpaceObjectsPanel/index.ts +5 -0
  170. package/src/{components → containers/DebugStatus}/DebugStatus.tsx +41 -19
  171. package/src/containers/DebugStatus/index.ts +5 -0
  172. package/src/containers/DevtoolsOverviewContainer/DevtoolsOverviewContainer.tsx +25 -0
  173. package/src/containers/DevtoolsOverviewContainer/index.ts +5 -0
  174. package/src/containers/GithubPanel/GithubComponent.stories.tsx +38 -0
  175. package/src/containers/GithubPanel/GithubComponent.tsx +192 -0
  176. package/src/containers/GithubPanel/GithubPanel.tsx +17 -0
  177. package/src/containers/GithubPanel/index.ts +5 -0
  178. package/src/containers/SpaceGenerator/SpaceGenerator.tsx +126 -0
  179. package/src/containers/SpaceGenerator/index.ts +5 -0
  180. package/src/{components → containers/Wireframe}/Wireframe.tsx +5 -9
  181. package/src/containers/Wireframe/index.ts +5 -0
  182. package/src/containers/index.ts +14 -0
  183. package/src/index.ts +1 -1
  184. package/src/meta.ts +5 -3
  185. package/src/plugin.ts +10 -0
  186. package/src/translations.ts +81 -58
  187. package/src/types/Settings.ts +16 -0
  188. package/src/{types.ts → types/index.ts} +20 -11
  189. package/dist/lib/browser/DebugGraph-EDOH6R2G.mjs +0 -20
  190. package/dist/lib/browser/DebugGraph-EDOH6R2G.mjs.map +0 -7
  191. package/dist/lib/browser/DevtoolsOverviewContainer-JXVZVPHN.mjs +0 -25
  192. package/dist/lib/browser/DevtoolsOverviewContainer-JXVZVPHN.mjs.map +0 -7
  193. package/dist/lib/browser/SpaceGenerator-BED4UXGS.mjs.map +0 -7
  194. package/dist/lib/browser/app-graph-builder-CRH2HJKT.mjs +0 -588
  195. package/dist/lib/browser/app-graph-builder-CRH2HJKT.mjs.map +0 -7
  196. package/dist/lib/browser/chunk-SRV2AIGJ.mjs.map +0 -7
  197. package/dist/lib/browser/chunk-WZFZ4ESO.mjs.map +0 -7
  198. package/dist/lib/browser/index.mjs +0 -130
  199. package/dist/lib/browser/index.mjs.map +0 -7
  200. package/dist/lib/browser/meta.json +0 -1
  201. package/dist/lib/browser/react-context-P2YDWEWI.mjs +0 -16
  202. package/dist/lib/browser/react-context-P2YDWEWI.mjs.map +0 -7
  203. package/dist/lib/browser/react-surface-JM2H3RZI.mjs +0 -774
  204. package/dist/lib/browser/react-surface-JM2H3RZI.mjs.map +0 -7
  205. package/dist/lib/browser/settings-SQXR3OAH.mjs +0 -22
  206. package/dist/lib/browser/settings-SQXR3OAH.mjs.map +0 -7
  207. package/dist/types/src/components/Container.d.ts +0 -5
  208. package/dist/types/src/components/Container.d.ts.map +0 -1
  209. package/dist/types/src/components/DebugGraph.d.ts +0 -8
  210. package/dist/types/src/components/DebugGraph.d.ts.map +0 -1
  211. package/dist/types/src/components/DebugObjectPanel.d.ts +0 -7
  212. package/dist/types/src/components/DebugObjectPanel.d.ts.map +0 -1
  213. package/dist/types/src/components/DebugSettings.d.ts +0 -6
  214. package/dist/types/src/components/DebugSettings.d.ts.map +0 -1
  215. package/dist/types/src/components/DebugStatus.d.ts.map +0 -1
  216. package/dist/types/src/components/DevtoolsOverviewContainer.d.ts.map +0 -1
  217. package/dist/types/src/components/SpaceGenerator/SchemaTable.d.ts.map +0 -1
  218. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.d.ts +0 -9
  219. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.d.ts.map +0 -1
  220. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.stories.d.ts +0 -15
  221. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.stories.d.ts.map +0 -1
  222. package/dist/types/src/components/Wireframe.d.ts.map +0 -1
  223. package/dist/types/src/types.d.ts +0 -63
  224. package/dist/types/src/types.d.ts.map +0 -1
  225. package/src/components/Container.tsx +0 -15
  226. package/src/components/DebugGraph.tsx +0 -14
  227. package/src/components/DebugObjectPanel.tsx +0 -33
  228. package/src/components/DebugSettings.tsx +0 -180
  229. package/src/components/DevtoolsOverviewContainer.tsx +0 -20
  230. package/src/components/SpaceGenerator/SpaceGenerator.stories.tsx +0 -52
  231. package/src/components/SpaceGenerator/SpaceGenerator.tsx +0 -122
  232. /package/dist/types/src/components/{SpaceGenerator → SchemaTable}/SchemaTable.d.ts +0 -0
  233. /package/dist/types/src/{components → containers/DebugStatus}/DebugStatus.d.ts +0 -0
@@ -4,15 +4,14 @@
4
4
 
5
5
  import * as Schema from 'effect/Schema';
6
6
 
7
- import { Agent, EntityExtraction, ResearchBlueprint } from '@dxos/assistant-toolkit';
8
- import { Prompt } from '@dxos/blueprints';
7
+ import { AgentPrompt, WebSearchBlueprint } from '@dxos/assistant-toolkit';
8
+ import { Routine, Trigger, Operation } from '@dxos/compute';
9
9
  import { type ComputeGraphModel, NODE_INPUT } from '@dxos/conductor';
10
- import { DXN, Filter, Key, Obj, Query, Ref, Tag, Type } from '@dxos/echo';
11
- import { Trigger, serializeFunction } from '@dxos/functions';
10
+ import { DXN, Feed, Filter, JsonSchema, Key, Obj, Query, type QueryAST, Ref, Tag } from '@dxos/echo';
12
11
  import { invariant } from '@dxos/invariant';
13
- import { gmail } from '@dxos/plugin-inbox';
14
- import { Mailbox } from '@dxos/plugin-inbox/types';
15
- import { Markdown } from '@dxos/plugin-markdown/types';
12
+ import { InboxOperation } from '@dxos/plugin-inbox';
13
+ import { Mailbox } from '@dxos/plugin-inbox';
14
+ import { Markdown } from '@dxos/plugin-markdown';
16
15
  import { type Space } from '@dxos/react-client/echo';
17
16
  import {
18
17
  type ComputeShape,
@@ -20,24 +19,18 @@ import {
20
19
  createChat,
21
20
  createComputeGraph,
22
21
  createConstant,
22
+ createFeed,
23
23
  createFunction,
24
24
  createGpt,
25
- createQueue,
26
25
  createRandom,
27
26
  createSurface,
28
27
  createTemplate,
29
28
  createText,
30
29
  createTrigger,
31
30
  } from '@dxos/react-ui-canvas-compute';
32
- import {
33
- CanvasBoardType,
34
- CanvasGraphModel,
35
- pointMultiply,
36
- pointsToRect,
37
- rectToPoints,
38
- } from '@dxos/react-ui-canvas-editor';
39
- import { View } from '@dxos/schema';
40
- import { Message, Organization, Person, Project } from '@dxos/types';
31
+ import { CanvasBoard, CanvasGraphModel, pointMultiply, pointsToRect, rectToPoints } from '@dxos/react-ui-canvas-editor';
32
+ import { ViewModel } from '@dxos/schema';
33
+ import { Message, Organization, Person, Pipeline } from '@dxos/types';
41
34
  import { range, trim } from '@dxos/util';
42
35
 
43
36
  import { type ObjectGenerator } from './ObjectGenerator';
@@ -57,14 +50,19 @@ export enum PresetName {
57
50
  }
58
51
 
59
52
  export const generator = () => ({
60
- schemas: [CanvasBoardType, Trigger.Trigger],
53
+ schemas: [CanvasBoard.CanvasBoard, Trigger.Trigger] as any[],
61
54
  types: Object.values(PresetName).map((name) => ({ typename: name })),
62
55
  items: [
63
56
  [
64
57
  PresetName.DXOS_TEAM,
65
58
  async (space, n, cb) => {
66
59
  const objects = range(n, () => {
67
- const org = space.db.add(Obj.make(Organization.Organization, { name: 'DXOS', website: 'https://dxos.org' }));
60
+ const org = space.db.add(
61
+ Obj.make(Organization.Organization, {
62
+ name: 'DXOS',
63
+ website: 'https://dxos.org',
64
+ }),
65
+ );
68
66
  const doc = space.db.add(
69
67
  Markdown.make({
70
68
  name: 'DXOS Research',
@@ -73,8 +71,10 @@ export const generator = () => ({
73
71
  );
74
72
 
75
73
  const tag = space.db.add(Tag.make({ label: 'Investor' }));
76
- const tagDxn = Obj.getDXN(tag).toString();
77
- Obj.getMeta(doc).tags = [tagDxn];
74
+ const tagDXN = Obj.getDXN(tag).toString();
75
+ Obj.update(doc, (doc) => {
76
+ Obj.getMeta(doc).tags = [tagDXN];
77
+ });
78
78
 
79
79
  // space.db.add(
80
80
  // Relation.make(HasSubject, {
@@ -84,10 +84,27 @@ export const generator = () => ({
84
84
  // }),
85
85
  // );
86
86
 
87
- space.db.add(Obj.make(Person.Person, { fullName: 'Rich', organization: Ref.make(org) }, { tags: [tagDxn] }));
88
- space.db.add(Obj.make(Person.Person, { fullName: 'Josiah', organization: Ref.make(org) }));
89
- space.db.add(Obj.make(Person.Person, { fullName: 'Dima', organization: Ref.make(org) }));
90
- space.db.add(Obj.make(Person.Person, { fullName: 'Mykola', organization: Ref.make(org) }));
87
+ space.db.add(
88
+ Obj.make(Person.Person, { [Obj.Meta]: { tags: [tagDXN] }, fullName: 'Rich', organization: Ref.make(org) }),
89
+ );
90
+ space.db.add(
91
+ Obj.make(Person.Person, {
92
+ fullName: 'Josiah',
93
+ organization: Ref.make(org),
94
+ }),
95
+ );
96
+ space.db.add(
97
+ Obj.make(Person.Person, {
98
+ fullName: 'Dima',
99
+ organization: Ref.make(org),
100
+ }),
101
+ );
102
+ space.db.add(
103
+ Obj.make(Person.Person, {
104
+ fullName: 'Mykola',
105
+ organization: Ref.make(org),
106
+ }),
107
+ );
91
108
 
92
109
  return doc;
93
110
  });
@@ -98,46 +115,34 @@ export const generator = () => ({
98
115
  [
99
116
  PresetName.ORG_RESEARCH_PROJECT,
100
117
  async (space, n, cb) => {
101
- const mailbox = await space.db.query(Filter.type(Mailbox.Mailbox)).first();
118
+ const mailboxes = await space.db.query(Filter.type(Mailbox.Mailbox)).run();
119
+ const mailbox = mailboxes[0];
120
+ invariant(mailbox, 'Mailbox not found');
121
+ const mailboxFeed = await mailbox.feed?.tryLoad();
122
+ invariant(mailboxFeed, 'Mailbox missing feed reference');
123
+ const feedDXN = Feed.getQueueDxn(mailboxFeed)?.toString();
124
+ invariant(feedDXN, 'Mailbox feed missing DXN');
102
125
  const tag = await space.db.query(Filter.type(Tag.Tag, { label: 'Investor' })).first();
103
- const tagDxn = Obj.getDXN(tag).toString();
126
+ const tagDXN = Obj.getDXN(tag).toString();
104
127
 
105
128
  const objects = range(n, () => {
106
- const contactsQuery = Query.select(Filter.type(Person.Person)).select(Filter.tag(tagDxn));
107
- const organizationsQuery = Query.select(Filter.type(Organization.Organization)).select(Filter.tag(tagDxn));
108
- const notesQuery = Query.select(Filter.type(Markdown.Document)).select(Filter.tag(tagDxn));
109
-
110
- space.db.add(
111
- Trigger.make({
112
- enabled: true,
113
- spec: {
114
- kind: 'timer',
115
- cron: '* * * * *', // Every minute.
116
- },
117
- function: Ref.make(serializeFunction(gmail.sync)),
118
- input: {
119
- mailboxId: Obj.getDXN(mailbox).toString(),
120
- },
121
- }),
122
- );
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));
123
132
 
124
133
  space.db.add(
125
134
  Trigger.make({
126
135
  enabled: true,
127
- // TODO(wittjosiah): Queue trigger doesn't support matching query of the column.
128
- spec: {
129
- kind: 'queue',
130
- queue: mailbox.queue.dxn.toString(),
131
- },
132
- function: Ref.make(serializeFunction(EntityExtraction.extract)),
136
+ spec: Trigger.specTimer('* * * * *'), // Every minute.
137
+ function: Ref.make(Operation.serialize(InboxOperation.GoogleMailSync)),
133
138
  input: {
134
- source: '{{event.item}}',
139
+ mailbox: Ref.make(mailbox),
135
140
  },
136
141
  }),
137
142
  );
138
143
 
139
144
  const researchPrompt = space.db.add(
140
- Prompt.make({
145
+ Routine.make({
141
146
  name: 'Research',
142
147
  description: 'Research organization',
143
148
  input: Schema.Struct({
@@ -152,20 +157,15 @@ export const generator = () => ({
152
157
  Create a research note for it at the end.
153
158
  NOTE: Do mocked reseach (set mockSearch to true).
154
159
  `,
155
- blueprints: [Ref.make(ResearchBlueprint)],
160
+ blueprints: [Ref.make(WebSearchBlueprint.make())],
156
161
  }),
157
162
  );
158
163
 
159
164
  space.db.add(
160
165
  Trigger.make({
161
166
  enabled: true,
162
- spec: {
163
- kind: 'subscription',
164
- query: {
165
- ast: organizationsQuery.ast,
166
- },
167
- },
168
- function: Ref.make(serializeFunction(Agent.prompt)),
167
+ spec: Trigger.specSubscription(organizationsQuery),
168
+ function: Ref.make(Operation.serialize(AgentPrompt)),
169
169
  input: {
170
170
  prompt: Ref.make(researchPrompt),
171
171
  input: '{{event.subject}}',
@@ -173,29 +173,31 @@ export const generator = () => ({
173
173
  }),
174
174
  );
175
175
 
176
- const mailboxView = View.make({
176
+ const mailboxView = ViewModel.make({
177
177
  query: Query.select(
178
- Filter.type(Message.Message, { properties: { labels: Filter.contains('investor') } }),
179
- ).options({
180
- queues: [mailbox.queue.dxn.toString()],
178
+ Filter.type(Message.Message, {
179
+ properties: { labels: Filter.contains('investor') },
180
+ }),
181
+ ).from({
182
+ feeds: [feedDXN],
181
183
  }),
182
- jsonSchema: Type.toJsonSchema(Message.Message),
184
+ jsonSchema: JsonSchema.toJsonSchema(Message.Message),
183
185
  });
184
- const contactsView = View.make({
186
+ const contactsView = ViewModel.make({
185
187
  query: contactsQuery,
186
- jsonSchema: Type.toJsonSchema(Person.Person),
188
+ jsonSchema: JsonSchema.toJsonSchema(Person.Person),
187
189
  });
188
- const organizationsView = View.make({
190
+ const organizationsView = ViewModel.make({
189
191
  query: organizationsQuery,
190
- jsonSchema: Type.toJsonSchema(Organization.Organization),
192
+ jsonSchema: JsonSchema.toJsonSchema(Organization.Organization),
191
193
  });
192
- const notesView = View.make({
194
+ const notesView = ViewModel.make({
193
195
  query: notesQuery,
194
- jsonSchema: Type.toJsonSchema(Markdown.Document),
196
+ jsonSchema: JsonSchema.toJsonSchema(Markdown.Document),
195
197
  });
196
198
 
197
199
  return space.db.add(
198
- Project.make({
200
+ Pipeline.make({
199
201
  name: 'Investor Research',
200
202
  columns: [
201
203
  {
@@ -247,10 +249,24 @@ export const generator = () => ({
247
249
  const append = canvasModel.createNode(createAppend(position({ x: 10, y: 6 })));
248
250
 
249
251
  builder
250
- .createEdge({ source: trigger.id, target: gpt.id, input: 'prompt', output: 'bodyText' })
252
+ .createEdge({
253
+ source: trigger.id,
254
+ target: gpt.id,
255
+ input: 'prompt',
256
+ output: 'bodyText',
257
+ })
251
258
  .createEdge({ source: gpt.id, target: text.id, output: 'text' })
252
- .createEdge({ source: queueId.id, target: append.id, input: 'id' })
253
- .createEdge({ source: gpt.id, target: append.id, output: 'messages', input: 'items' });
259
+ .createEdge({
260
+ source: queueId.id,
261
+ target: append.id,
262
+ input: 'id',
263
+ })
264
+ .createEdge({
265
+ source: gpt.id,
266
+ target: append.id,
267
+ output: 'messages',
268
+ input: 'items',
269
+ });
254
270
 
255
271
  functionTrigger = triggerShape.functionTrigger!.target!;
256
272
  });
@@ -275,7 +291,7 @@ export const generator = () => ({
275
291
  'subscription',
276
292
  (triggerSpec) =>
277
293
  (triggerSpec.query = {
278
- ast: Query.select(Filter.typename('dxos.org/type/Chess')).ast,
294
+ ast: Query.select(Filter.typename('org.dxos.type.chess')).ast as Obj.Mutable<QueryAST.Query>,
279
295
  }),
280
296
  'type',
281
297
  );
@@ -360,7 +376,7 @@ export const generator = () => ({
360
376
  // const templateComputeNode = computeModel.nodes.find((n) => n.id === template.node);
361
377
  // invariant(templateComputeNode, 'Template compute node was not created.');
362
378
  // templateComputeNode.value = templateContent.join('\n');
363
- // templateComputeNode.inputSchema = Type.toJsonSchema(EmailTriggerOutput);
379
+ // templateComputeNode.inputSchema = JsonSchema.toJsonSchema(EmailTriggerOutput);
364
380
 
365
381
  // attachTrigger(functionTrigger, computeModel);
366
382
 
@@ -388,8 +404,17 @@ export const generator = () => ({
388
404
  builder
389
405
  .createEdge({ source: chat.id, target: gpt.id, input: 'prompt' })
390
406
  .createEdge({ source: gpt.id, target: text.id, output: 'text' })
391
- .createEdge({ source: queueId.id, target: append.id, input: 'id' })
392
- .createEdge({ source: gpt.id, target: append.id, output: 'messages', input: 'items' });
407
+ .createEdge({
408
+ source: queueId.id,
409
+ target: append.id,
410
+ input: 'id',
411
+ })
412
+ .createEdge({
413
+ source: gpt.id,
414
+ target: append.id,
415
+ output: 'messages',
416
+ input: 'items',
417
+ });
393
418
  });
394
419
 
395
420
  const computeModel = createComputeGraph(canvasModel);
@@ -485,7 +510,7 @@ export const generator = () => ({
485
510
  // invariant(templateComputeNode, 'Template compute node was not created.');
486
511
  // templateComputeNode.value = templateContent.join('\n');
487
512
  // const extendedSchema = Schema.extend(EmailTriggerOutput, Schema.Struct({ text: Schema.String }));
488
- // templateComputeNode.inputSchema = Type.toJsonSchema(extendedSchema);
513
+ // templateComputeNode.inputSchema = JsonSchema.toJsonSchema(extendedSchema);
489
514
 
490
515
  // attachTrigger(functionTrigger, computeModel);
491
516
 
@@ -513,9 +538,21 @@ export const generator = () => ({
513
538
  const view = canvasModel.createNode(createSurface(position({ x: 12, y: 0 })));
514
539
 
515
540
  builder
516
- .createEdge({ source: sourceCurrency.id, target: converter.id, input: 'from' })
517
- .createEdge({ source: targetCurrency.id, target: converter.id, input: 'to' })
518
- .createEdge({ source: converter.id, target: view.id, output: 'rate' });
541
+ .createEdge({
542
+ source: sourceCurrency.id,
543
+ target: converter.id,
544
+ input: 'from',
545
+ })
546
+ .createEdge({
547
+ source: targetCurrency.id,
548
+ target: converter.id,
549
+ input: 'to',
550
+ })
551
+ .createEdge({
552
+ source: converter.id,
553
+ target: view.id,
554
+ output: 'rate',
555
+ });
519
556
  });
520
557
 
521
558
  const computeModel = createComputeGraph(canvasModel);
@@ -543,7 +580,10 @@ export const generator = () => ({
543
580
  const trigger = canvasModel.createNode(triggerShape);
544
581
  // DXOS dev-null channel.
545
582
  const channelId = canvasModel.createNode(
546
- createConstant({ value: '1088569858767212554', ...position({ x: -10, y: 0 }) }),
583
+ createConstant({
584
+ value: '1088569858767212554',
585
+ ...position({ x: -10, y: 0 }),
586
+ }),
547
587
  );
548
588
  const queueId = canvasModel.createNode(
549
589
  createConstant({
@@ -553,14 +593,34 @@ export const generator = () => ({
553
593
  );
554
594
  const converter = canvasModel.createNode(createFunction(position({ x: 0, y: 0 })));
555
595
  const view = canvasModel.createNode(createText(position({ x: 12, y: 0 })));
556
- const queue = canvasModel.createNode(createQueue(position({ x: 0, y: 12 })));
596
+ const queue = canvasModel.createNode(createFeed(position({ x: 0, y: 12 })));
557
597
 
558
598
  builder
559
- .createEdge({ source: trigger.id, target: converter.id, input: 'tick' })
560
- .createEdge({ source: channelId.id, target: converter.id, input: 'channelId' })
561
- .createEdge({ source: queueId.id, target: converter.id, input: 'queueId' })
562
- .createEdge({ source: converter.id, target: view.id, output: 'newMessages' })
563
- .createEdge({ source: queueId.id, target: queue.id, input: 'input' });
599
+ .createEdge({
600
+ source: trigger.id,
601
+ target: converter.id,
602
+ input: 'tick',
603
+ })
604
+ .createEdge({
605
+ source: channelId.id,
606
+ target: converter.id,
607
+ input: 'channelId',
608
+ })
609
+ .createEdge({
610
+ source: queueId.id,
611
+ target: converter.id,
612
+ input: 'queueId',
613
+ })
614
+ .createEdge({
615
+ source: converter.id,
616
+ target: view.id,
617
+ output: 'newMessages',
618
+ })
619
+ .createEdge({
620
+ source: queueId.id,
621
+ target: queue.id,
622
+ input: 'input',
623
+ });
564
624
 
565
625
  functionTrigger = triggerShape.functionTrigger!.target!;
566
626
  });
@@ -630,7 +690,7 @@ export const generator = () => ({
630
690
  const createQueueSinkPreset = <SpecType extends Trigger.Kind>(
631
691
  space: Space,
632
692
  triggerKind: SpecType,
633
- initSpec: (spec: Extract<Trigger.Spec, { kind: SpecType }>) => void,
693
+ initSpec: (spec: Obj.Mutable<Extract<Trigger.Spec, { kind: SpecType }>>) => void,
634
694
  triggerOutputName: string,
635
695
  ) => {
636
696
  const canvasModel = CanvasGraphModel.create<ComputeShape>();
@@ -663,7 +723,12 @@ const createQueueSinkPreset = <SpecType extends Trigger.Kind>(
663
723
  builder
664
724
  .createEdge({ source: queueId.id, target: append.id, input: 'id' })
665
725
  .createEdge({ source: template.id, target: append.id, input: 'items' })
666
- .createEdge({ source: trigger.id, target: template.id, output: triggerOutputName, input: 'type' })
726
+ .createEdge({
727
+ source: trigger.id,
728
+ target: template.id,
729
+ output: triggerOutputName,
730
+ input: 'type',
731
+ })
667
732
  .createEdge({
668
733
  source: random.id,
669
734
  target: template.id,
@@ -673,15 +738,20 @@ const createQueueSinkPreset = <SpecType extends Trigger.Kind>(
673
738
  functionTrigger = triggerShape.functionTrigger!.target!;
674
739
  const triggerSpec = functionTrigger.spec;
675
740
  invariant(triggerSpec && triggerSpec.kind === triggerKind, 'No trigger spec.');
676
- initSpec(triggerSpec as any);
741
+ Obj.update(functionTrigger, (functionTrigger) => {
742
+ initSpec(functionTrigger.spec as any);
743
+ });
677
744
  });
678
745
 
679
746
  const computeModel = createComputeGraph(canvasModel);
680
747
 
681
748
  const templateComputeNode = computeModel.nodes.find((n) => n.id === template.node);
682
749
  invariant(templateComputeNode, 'Template compute node was not created.');
750
+ // NOTE: These are plain object mutations during model construction, not ECHO object mutations.
683
751
  templateComputeNode.value = ['{', ' "@type": "{{type}}",', ' "id": "@{{changeId}}"', '}'].join('\n');
684
- templateComputeNode.inputSchema = Type.toJsonSchema(Schema.Struct({ type: Schema.String, changeId: Schema.String }));
752
+ templateComputeNode.inputSchema = JsonSchema.toJsonSchema(
753
+ Schema.Struct({ type: Schema.String, changeId: Schema.String }),
754
+ );
685
755
  attachTrigger(functionTrigger, computeModel);
686
756
 
687
757
  return { canvasModel, computeModel };
@@ -689,7 +759,7 @@ const createQueueSinkPreset = <SpecType extends Trigger.Kind>(
689
759
 
690
760
  const addToSpace = (name: string, space: Space, canvas: CanvasGraphModel, compute: ComputeGraphModel) => {
691
761
  return space.db.add(
692
- Obj.make(CanvasBoardType, {
762
+ Obj.make(CanvasBoard.CanvasBoard, {
693
763
  name,
694
764
  computeGraph: Ref.make(compute.root),
695
765
  layout: canvas.graph,
@@ -709,7 +779,7 @@ const setupQueue = (
709
779
  }),
710
780
  );
711
781
  const queue = canvasModel.createNode(
712
- createQueue(
782
+ createFeed(
713
783
  args?.queuePosition ? rawPosition(args.queuePosition) : position({ x: -3, y: 3, width: 14, height: 10 }),
714
784
  ),
715
785
  );
@@ -719,15 +789,25 @@ const setupQueue = (
719
789
 
720
790
  const attachTrigger = (functionTrigger: Trigger.Trigger | undefined, computeModel: ComputeGraphModel) => {
721
791
  invariant(functionTrigger);
722
- functionTrigger.function = Ref.make(computeModel.root);
723
792
  const inputNode = computeModel.nodes.find((node) => node.type === NODE_INPUT)!;
724
- functionTrigger.inputNodeId = inputNode.id;
793
+ Obj.update(functionTrigger, (functionTrigger) => {
794
+ functionTrigger.function = Ref.make(computeModel.root);
795
+ functionTrigger.inputNodeId = inputNode.id;
796
+ });
725
797
  };
726
798
 
727
- type RawPositionInput = { centerX: number; centerY: number; width: number; height: number };
799
+ type RawPositionInput = {
800
+ centerX: number;
801
+ centerY: number;
802
+ width: number;
803
+ height: number;
804
+ };
728
805
 
729
806
  const rawPosition = (args: RawPositionInput) => {
730
- return { center: { x: args.centerX, y: args.centerY }, size: { width: args.width, height: args.height } };
807
+ return {
808
+ center: { x: args.centerX, y: args.centerY },
809
+ size: { width: args.width, height: args.height },
810
+ };
731
811
  };
732
812
 
733
813
  const position = (rect: { x: number; y: number; width?: number; height?: number }) => {
@@ -735,7 +815,10 @@ const position = (rect: { x: number; y: number; width?: number; height?: number
735
815
  const [center, size] = rectToPoints({ width: 0, height: 0, ...rect });
736
816
  const { x, y, width, height } = pointsToRect([pointMultiply(center, snap), pointMultiply(size, snap)]);
737
817
  if (width && height) {
738
- return { center: { x, y }, size: width && height ? { width, height } : undefined };
818
+ return {
819
+ center: { x, y },
820
+ size: width && height ? { width, height } : undefined,
821
+ };
739
822
  } else {
740
823
  return { center: { x, y } };
741
824
  }
@@ -2,13 +2,9 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { lazy } from 'react';
5
+ import { type ComponentType, lazy } from 'react';
6
6
 
7
- export const DebugGraph = lazy(() => import('./DebugGraph'));
8
- export const DevtoolsOverviewContainer = lazy(() => import('./DevtoolsOverviewContainer'));
9
- export const SpaceGenerator = lazy(() => import('./SpaceGenerator'));
7
+ export const DebugSettings: ComponentType<any> = lazy(() => import('./DebugSettings'));
10
8
 
11
- export * from './DebugObjectPanel';
12
- export * from './DebugSettings';
13
- export * from './DebugStatus';
14
- export * from './Wireframe';
9
+ export * from './SchemaTable';
10
+ export * from './SpaceGenerator';
@@ -0,0 +1,14 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import React from 'react';
6
+
7
+ import { Tree } from '@dxos/devtools';
8
+ import { Graph } from '@dxos/plugin-graph';
9
+
10
+ export type DebugGraphProps = { graph: Graph.Graph; root: string };
11
+
12
+ export const DebugGraph = ({ graph, root }: DebugGraphProps) => {
13
+ return <Tree data={Graph.toJSON(graph, root)} />;
14
+ };
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ export { DebugGraph as default } from './DebugGraph';
@@ -0,0 +1,76 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import React, { useMemo, useState } from 'react';
6
+
7
+ import { AppSurface } from '@dxos/app-toolkit/ui';
8
+ import { ObjectsTree } from '@dxos/devtools';
9
+ import { Filter, Json, Obj, Query } from '@dxos/echo';
10
+ import type { ObjectId } from '@dxos/keys';
11
+ import { useQuery } from '@dxos/react-client/echo';
12
+ import { Clipboard, Input, Panel, ScrollArea, Toolbar } from '@dxos/react-ui';
13
+ import { Syntax } from '@dxos/react-ui-syntax-highlighter';
14
+ import { mx } from '@dxos/ui-theme';
15
+
16
+ export type DebugObjectPanelProps = Pick<
17
+ AppSurface.ObjectArticleProps<Obj.Unknown, {}, Obj.Unknown>,
18
+ 'role' | 'companionTo'
19
+ >;
20
+
21
+ export const DebugObjectPanel = ({ role, companionTo }: DebugObjectPanelProps) => {
22
+ const db = Obj.getDatabase(companionTo);
23
+ const [selectedId, setSelectedId] = useState<ObjectId | null>(null);
24
+ const [depth, setDepth] = useState(0);
25
+ const [selectedObject] = useQuery(
26
+ db,
27
+ Query.select(Filter.id(selectedId ?? companionTo.id)).options({ deleted: 'include' }),
28
+ );
29
+ const refReplacer = useMemo(() => (db ? Json.createRefReplacer({ db, depth }) : undefined), [db, depth]);
30
+
31
+ return (
32
+ <Clipboard.Provider>
33
+ <Panel.Root role={role}>
34
+ <Panel.Toolbar asChild>
35
+ <Toolbar.Root />
36
+ </Panel.Toolbar>
37
+ <Panel.Content asChild>
38
+ <div className={mx('grid divide-y divide-separator', db && 'grid-rows-[1fr_2fr]')}>
39
+ {db && (
40
+ <ScrollArea.Root>
41
+ <ScrollArea.Viewport>
42
+ <ObjectsTree db={db} root={companionTo} onSelect={(entity) => setSelectedId(entity.id)} />
43
+ </ScrollArea.Viewport>
44
+ </ScrollArea.Root>
45
+ )}
46
+ <Syntax.Root data={selectedObject} replacer={refReplacer}>
47
+ <Panel.Root>
48
+ <Panel.Toolbar asChild>
49
+ <Toolbar.Root classNames='grid grid-cols-[1fr_3rem]'>
50
+ <Syntax.Filter />
51
+ <Input.Root>
52
+ <Input.TextInput
53
+ variant='subdued'
54
+ type='number'
55
+ min={0}
56
+ step={1}
57
+ aria-label='Ref depth'
58
+ value={depth}
59
+ onChange={(event) => setDepth(Math.max(0, Number(event.target.value) || 0))}
60
+ />
61
+ </Input.Root>
62
+ </Toolbar.Root>
63
+ </Panel.Toolbar>
64
+ <Panel.Content asChild>
65
+ <Syntax.Viewport>
66
+ <Syntax.Code />
67
+ </Syntax.Viewport>
68
+ </Panel.Content>
69
+ </Panel.Root>
70
+ </Syntax.Root>
71
+ </div>
72
+ </Panel.Content>
73
+ </Panel.Root>
74
+ </Clipboard.Provider>
75
+ );
76
+ };
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ export { DebugObjectPanel as default } from './DebugObjectPanel';
@@ -0,0 +1,47 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import React, { useState } from 'react';
6
+
7
+ import { type AppSurface } from '@dxos/app-toolkit/ui';
8
+ import { ObjectsTree } from '@dxos/devtools';
9
+ import { Filter, Query } from '@dxos/echo';
10
+ import { type ObjectId } from '@dxos/keys';
11
+ import { useQuery } from '@dxos/react-client/echo';
12
+ import { Clipboard, Grid, Input, Panel, ScrollArea, Toolbar } from '@dxos/react-ui';
13
+ import { JsonHighlighter } from '@dxos/react-ui-syntax-highlighter';
14
+
15
+ export type DebugSpaceObjectsPanelProps = AppSurface.SpaceArticleProps;
16
+
17
+ export const DebugSpaceObjectsPanel = ({ space }: DebugSpaceObjectsPanelProps) => {
18
+ const [selectedId, setSelectedId] = useState<ObjectId | null>(null);
19
+ const [selectedObject] = useQuery(
20
+ space.db,
21
+ selectedId ? Query.select(Filter.id(selectedId)) : Query.select(Filter.nothing()),
22
+ );
23
+
24
+ return (
25
+ <Clipboard.Provider>
26
+ <Panel.Root>
27
+ <Panel.Toolbar asChild>
28
+ <Toolbar.Root>
29
+ <Input.Root>
30
+ <Input.TextInput disabled placeholder='Search...' />
31
+ </Input.Root>
32
+ </Toolbar.Root>
33
+ </Panel.Toolbar>
34
+ <Panel.Content asChild>
35
+ <Grid rows={2} classNames='divide-y divide-separator'>
36
+ <ScrollArea.Root>
37
+ <ScrollArea.Viewport>
38
+ <ObjectsTree db={space.db} onSelect={(entity) => setSelectedId(entity.id)} />
39
+ </ScrollArea.Viewport>
40
+ </ScrollArea.Root>
41
+ {selectedObject && <JsonHighlighter classNames='p-1' data={selectedObject} />}
42
+ </Grid>
43
+ </Panel.Content>
44
+ </Panel.Root>
45
+ </Clipboard.Provider>
46
+ );
47
+ };