@dxos/plugin-debug 0.8.1 → 0.8.2-main.f081794

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 (41) hide show
  1. package/dist/lib/browser/DevtoolsOverviewContainer-HYNZTH2Z.mjs +19 -0
  2. package/dist/lib/browser/DevtoolsOverviewContainer-HYNZTH2Z.mjs.map +7 -0
  3. package/dist/lib/browser/{SpaceGenerator-NBOQZ4JF.mjs → SpaceGenerator-RESAAW32.mjs} +12 -12
  4. package/dist/lib/browser/SpaceGenerator-RESAAW32.mjs.map +7 -0
  5. package/dist/lib/browser/{app-graph-builder-ALFPRSAR.mjs → app-graph-builder-RTKWOHHT.mjs} +74 -52
  6. package/dist/lib/browser/app-graph-builder-RTKWOHHT.mjs.map +7 -0
  7. package/dist/lib/browser/index.mjs +4 -3
  8. package/dist/lib/browser/index.mjs.map +2 -2
  9. package/dist/lib/browser/meta.json +1 -1
  10. package/dist/lib/browser/{react-surface-MXXLOQYV.mjs → react-surface-E63KL63Y.mjs} +11 -28
  11. package/dist/lib/browser/react-surface-E63KL63Y.mjs.map +7 -0
  12. package/dist/lib/browser/{settings-AP74NCXH.mjs → settings-BIRIGKTH.mjs} +3 -3
  13. package/dist/lib/browser/settings-BIRIGKTH.mjs.map +7 -0
  14. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  15. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  16. package/dist/types/src/components/DebugStatus.d.ts.map +1 -1
  17. package/dist/types/src/components/DevtoolsOverviewContainer.d.ts +4 -0
  18. package/dist/types/src/components/DevtoolsOverviewContainer.d.ts.map +1 -0
  19. package/dist/types/src/components/SpaceGenerator/ObjectGenerator.d.ts +2 -2
  20. package/dist/types/src/components/SpaceGenerator/ObjectGenerator.d.ts.map +1 -1
  21. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.d.ts +2 -2
  22. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.d.ts.map +1 -1
  23. package/dist/types/src/components/index.d.ts +1 -0
  24. package/dist/types/src/components/index.d.ts.map +1 -1
  25. package/dist/types/src/translations.d.ts +1 -0
  26. package/dist/types/src/translations.d.ts.map +1 -1
  27. package/package.json +51 -49
  28. package/src/capabilities/app-graph-builder.ts +66 -58
  29. package/src/capabilities/react-surface.tsx +21 -8
  30. package/src/capabilities/settings.ts +2 -2
  31. package/src/components/DebugStatus.tsx +2 -24
  32. package/src/components/DevtoolsOverviewContainer.tsx +20 -0
  33. package/src/components/SpaceGenerator/ObjectGenerator.tsx +9 -13
  34. package/src/components/SpaceGenerator/SpaceGenerator.tsx +4 -4
  35. package/src/components/SpaceGenerator/presets.ts +2 -2
  36. package/src/components/index.ts +1 -0
  37. package/src/translations.ts +1 -0
  38. package/dist/lib/browser/SpaceGenerator-NBOQZ4JF.mjs.map +0 -7
  39. package/dist/lib/browser/app-graph-builder-ALFPRSAR.mjs.map +0 -7
  40. package/dist/lib/browser/react-surface-MXXLOQYV.mjs.map +0 -7
  41. package/dist/lib/browser/settings-AP74NCXH.mjs.map +0 -7
@@ -1 +1 @@
1
- {"version":3,"file":"translations.d.ts","sourceRoot":"","sources":["../../../src/translations.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,wBA6DE"}
1
+ {"version":3,"file":"translations.d.ts","sourceRoot":"","sources":["../../../src/translations.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,wBA8DE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/plugin-debug",
3
- "version": "0.8.1",
3
+ "version": "0.8.2-main.f081794",
4
4
  "description": "DXOS Surface plugin for testing.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -33,48 +33,50 @@
33
33
  "react-json-tree": "^0.18.0",
34
34
  "react-resize-detector": "^11.0.1",
35
35
  "workerize-loader": "^2.0.2",
36
- "@dxos/async": "0.8.1",
37
- "@dxos/app-framework": "0.8.1",
38
- "@dxos/automerge": "0.8.1",
39
- "@dxos/client-services": "0.8.1",
40
- "@dxos/conductor": "0.8.1",
41
- "@dxos/compute": "0.8.1",
42
- "@dxos/config": "0.8.1",
43
- "@dxos/devtools": "0.8.1",
44
- "@dxos/echo-generator": "0.8.1",
45
- "@dxos/echo-pipeline": "0.8.1",
46
- "@dxos/echo-schema": "0.8.1",
47
- "@dxos/functions": "0.8.1",
48
- "@dxos/invariant": "0.8.1",
49
- "@dxos/local-storage": "0.8.1",
50
- "@dxos/keys": "0.8.1",
51
- "@dxos/live-object": "0.8.1",
52
- "@dxos/plugin-client": "0.8.1",
53
- "@dxos/plugin-graph": "0.8.1",
54
- "@dxos/plugin-deck": "0.8.1",
55
- "@dxos/plugin-markdown": "0.8.1",
56
- "@dxos/log": "0.8.1",
57
- "@dxos/plugin-sheet": "0.8.1",
58
- "@dxos/plugin-script": "0.8.1",
59
- "@dxos/plugin-sketch": "0.8.1",
60
- "@dxos/plugin-status-bar": "0.8.1",
61
- "@dxos/plugin-space": "0.8.1",
62
- "@dxos/plugin-table": "0.8.1",
63
- "@dxos/plugin-theme": "0.8.1",
64
- "@dxos/protocols": "0.8.1",
65
- "@dxos/random": "0.8.1",
66
- "@dxos/react-hooks": "0.8.1",
67
- "@dxos/react-ui-attention": "0.8.1",
68
- "@dxos/react-ui-canvas-compute": "0.8.1",
69
- "@dxos/react-client": "0.8.1",
70
- "@dxos/react-ui-canvas-editor": "0.8.1",
71
- "@dxos/react-ui-form": "0.8.1",
72
- "@dxos/react-ui-stack": "0.8.1",
73
- "@dxos/react-ui-kanban": "0.8.1",
74
- "@dxos/react-ui-syntax-highlighter": "0.8.1",
75
- "@dxos/react-ui-table": "0.8.1",
76
- "@dxos/schema": "0.8.1",
77
- "@dxos/util": "0.8.1"
36
+ "@dxos/app-framework": "0.8.2-main.f081794",
37
+ "@dxos/async": "0.8.2-main.f081794",
38
+ "@dxos/client-services": "0.8.2-main.f081794",
39
+ "@dxos/automerge": "0.8.2-main.f081794",
40
+ "@dxos/compute": "0.8.2-main.f081794",
41
+ "@dxos/config": "0.8.2-main.f081794",
42
+ "@dxos/context": "0.8.2-main.f081794",
43
+ "@dxos/conductor": "0.8.2-main.f081794",
44
+ "@dxos/devtools": "0.8.2-main.f081794",
45
+ "@dxos/echo-pipeline": "0.8.2-main.f081794",
46
+ "@dxos/echo-generator": "0.8.2-main.f081794",
47
+ "@dxos/functions": "0.8.2-main.f081794",
48
+ "@dxos/invariant": "0.8.2-main.f081794",
49
+ "@dxos/echo-schema": "0.8.2-main.f081794",
50
+ "@dxos/live-object": "0.8.2-main.f081794",
51
+ "@dxos/local-storage": "0.8.2-main.f081794",
52
+ "@dxos/log": "0.8.2-main.f081794",
53
+ "@dxos/keys": "0.8.2-main.f081794",
54
+ "@dxos/plugin-client": "0.8.2-main.f081794",
55
+ "@dxos/plugin-graph": "0.8.2-main.f081794",
56
+ "@dxos/plugin-meeting": "0.8.2-main.f081794",
57
+ "@dxos/plugin-deck": "0.8.2-main.f081794",
58
+ "@dxos/plugin-markdown": "0.8.2-main.f081794",
59
+ "@dxos/plugin-script": "0.8.2-main.f081794",
60
+ "@dxos/plugin-sheet": "0.8.2-main.f081794",
61
+ "@dxos/plugin-sketch": "0.8.2-main.f081794",
62
+ "@dxos/plugin-space": "0.8.2-main.f081794",
63
+ "@dxos/plugin-status-bar": "0.8.2-main.f081794",
64
+ "@dxos/plugin-theme": "0.8.2-main.f081794",
65
+ "@dxos/random": "0.8.2-main.f081794",
66
+ "@dxos/plugin-table": "0.8.2-main.f081794",
67
+ "@dxos/react-hooks": "0.8.2-main.f081794",
68
+ "@dxos/protocols": "0.8.2-main.f081794",
69
+ "@dxos/react-client": "0.8.2-main.f081794",
70
+ "@dxos/react-ui-canvas-compute": "0.8.2-main.f081794",
71
+ "@dxos/react-ui-attention": "0.8.2-main.f081794",
72
+ "@dxos/react-ui-canvas-editor": "0.8.2-main.f081794",
73
+ "@dxos/react-ui-form": "0.8.2-main.f081794",
74
+ "@dxos/react-ui-stack": "0.8.2-main.f081794",
75
+ "@dxos/react-ui-kanban": "0.8.2-main.f081794",
76
+ "@dxos/react-ui-syntax-highlighter": "0.8.2-main.f081794",
77
+ "@dxos/react-ui-table": "0.8.2-main.f081794",
78
+ "@dxos/schema": "0.8.2-main.f081794",
79
+ "@dxos/util": "0.8.2-main.f081794"
78
80
  },
79
81
  "devDependencies": {
80
82
  "@phosphor-icons/react": "^2.1.5",
@@ -84,17 +86,17 @@
84
86
  "react": "~18.2.0",
85
87
  "react-dom": "~18.2.0",
86
88
  "vite": "5.4.7",
87
- "@dxos/react-ui-theme": "0.8.1",
88
- "@dxos/storybook-utils": "0.8.1",
89
- "@dxos/react-ui": "0.8.1"
89
+ "@dxos/react-ui": "0.8.2-main.f081794",
90
+ "@dxos/react-ui-theme": "0.8.2-main.f081794",
91
+ "@dxos/storybook-utils": "0.8.2-main.f081794"
90
92
  },
91
93
  "peerDependencies": {
92
94
  "@phosphor-icons/react": "^2.1.5",
93
95
  "react": "~18.2.0",
94
96
  "react-dom": "~18.2.0",
95
- "@dxos/random": "0.8.1",
96
- "@dxos/react-ui": "0.8.1",
97
- "@dxos/react-ui-theme": "0.8.1"
97
+ "@dxos/react-ui": "0.8.2-main.f081794",
98
+ "@dxos/random": "0.8.2-main.f081794",
99
+ "@dxos/react-ui-theme": "0.8.2-main.f081794"
98
100
  },
99
101
  "publishConfig": {
100
102
  "access": "public"
@@ -3,10 +3,11 @@
3
3
  //
4
4
 
5
5
  import { contributes, Capabilities, type PluginsContext } from '@dxos/app-framework';
6
- import { ATTENDABLE_PATH_SEPARATOR, PLANK_COMPANION_TYPE } from '@dxos/plugin-deck/types';
7
- import { createExtension, toSignal, type Node } from '@dxos/plugin-graph';
8
- import { CollectionType } from '@dxos/plugin-space/types';
9
- import { isEchoObject, isSpace, type ReactiveEchoObject, SpaceState, type Space } from '@dxos/react-client/echo';
6
+ import { ClientCapabilities } from '@dxos/plugin-client';
7
+ import { ATTENDABLE_PATH_SEPARATOR, DECK_COMPANION_TYPE, PLANK_COMPANION_TYPE } from '@dxos/plugin-deck/types';
8
+ import { createExtension, type Node } from '@dxos/plugin-graph';
9
+ import { SPACE_PLUGIN } from '@dxos/plugin-space';
10
+ import { isEchoObject, type ReactiveEchoObject, parseId } from '@dxos/react-client/echo';
10
11
 
11
12
  import { DEBUG_PLUGIN } from '../meta';
12
13
  import { Devtools } from '../types';
@@ -18,43 +19,31 @@ export default (context: PluginsContext) =>
18
19
  // Devtools node.
19
20
  createExtension({
20
21
  id: 'dxos.org/plugin/debug/devtools',
21
- filter: (node): node is Node<null | Space> => node.id === 'root' || isSpace(node.data),
22
+ filter: (node): node is Node<null> => node.id === 'root' || node.type === `${SPACE_PLUGIN}/settings`,
22
23
  connector: ({ node }) => {
23
- const space = node.data;
24
- const state = toSignal(
25
- (onChange) => space?.state.subscribe(() => onChange()).unsubscribe ?? (() => {}),
26
- () => space?.state.get(),
27
- space?.id,
28
- );
29
- if (node.id !== 'root' && state !== SpaceState.SPACE_READY) {
30
- return;
31
- }
32
-
33
- // Not adding the debug node until the root collection is available aligns the behaviour of this
34
- // extension with that of the space plugin adding objects. This ensures that the debug node is added at
35
- // the same time as objects and prevents order from changing as the nodes are added.
36
- const collection = space?.properties[CollectionType.typename]?.target as CollectionType | undefined;
37
- if (node.id !== 'root' && !collection) {
38
- return;
39
- }
24
+ const layout = context.requestCapability(Capabilities.Layout);
25
+ const client = context.requestCapability(ClientCapabilities.Client);
26
+ const { spaceId } = parseId(layout.workspace);
27
+ const space = spaceId && client.spaces.get(spaceId);
40
28
 
41
29
  return [
42
30
  {
43
- id: `${node.id}-${Devtools.id}`,
31
+ id: `${Devtools.id}-${node.id}`,
44
32
  data: null,
45
33
  type: DEVTOOLS_TYPE,
46
34
  properties: {
47
35
  label: ['devtools label', { ns: DEBUG_PLUGIN }],
48
- disposition: 'workspace',
49
36
  icon: 'ph--hammer--regular',
37
+ disposition: 'workspace',
38
+ position: 'fallback',
50
39
  },
51
40
  nodes: [
52
- ...(isSpace(node.data)
41
+ ...(space
53
42
  ? [
54
43
  {
55
- id: `${node.data.id}-debug`,
44
+ id: `debug-${node.id}`,
56
45
  type: 'dxos.org/plugin/debug/space',
57
- data: { space: node.data, type: 'dxos.org/plugin/debug/space' },
46
+ data: { space, type: 'dxos.org/plugin/debug/space' },
58
47
  properties: {
59
48
  label: ['debug label', { ns: DEBUG_PLUGIN }],
60
49
  icon: 'ph--bug--regular',
@@ -63,7 +52,7 @@ export default (context: PluginsContext) =>
63
52
  ]
64
53
  : []),
65
54
  {
66
- id: `${node.id}-${Devtools.Client.id}`,
55
+ id: `${Devtools.Client.id}-${node.id}`,
67
56
  data: null,
68
57
  type: DEVTOOLS_TYPE,
69
58
  properties: {
@@ -72,7 +61,7 @@ export default (context: PluginsContext) =>
72
61
  },
73
62
  nodes: [
74
63
  {
75
- id: `${node.id}-${Devtools.Client.Config}`,
64
+ id: `${Devtools.Client.Config}-${node.id}`,
76
65
  data: Devtools.Client.Config,
77
66
  type: DEVTOOLS_TYPE,
78
67
  properties: {
@@ -81,7 +70,7 @@ export default (context: PluginsContext) =>
81
70
  },
82
71
  },
83
72
  {
84
- id: `${node.id}-${Devtools.Client.Storage}`,
73
+ id: `${Devtools.Client.Storage}-${node.id}`,
85
74
  data: Devtools.Client.Storage,
86
75
  type: DEVTOOLS_TYPE,
87
76
  properties: {
@@ -90,7 +79,7 @@ export default (context: PluginsContext) =>
90
79
  },
91
80
  },
92
81
  {
93
- id: `${node.id}-${Devtools.Client.Logs}`,
82
+ id: `${Devtools.Client.Logs}-${node.id}`,
94
83
  data: Devtools.Client.Logs,
95
84
  type: DEVTOOLS_TYPE,
96
85
  properties: {
@@ -99,7 +88,7 @@ export default (context: PluginsContext) =>
99
88
  },
100
89
  },
101
90
  {
102
- id: `${node.id}-${Devtools.Client.Diagnostics}`,
91
+ id: `${Devtools.Client.Diagnostics}-${node.id}`,
103
92
  data: Devtools.Client.Diagnostics,
104
93
  type: DEVTOOLS_TYPE,
105
94
  properties: {
@@ -108,7 +97,7 @@ export default (context: PluginsContext) =>
108
97
  },
109
98
  },
110
99
  {
111
- id: `${node.id}-${Devtools.Client.Tracing}`,
100
+ id: `${Devtools.Client.Tracing}-${node.id}`,
112
101
  data: Devtools.Client.Tracing,
113
102
  type: DEVTOOLS_TYPE,
114
103
  properties: {
@@ -119,7 +108,7 @@ export default (context: PluginsContext) =>
119
108
  ],
120
109
  },
121
110
  {
122
- id: `${node.id}-${Devtools.Halo.id}`,
111
+ id: `${Devtools.Halo.id}-${node.id}`,
123
112
  data: null,
124
113
  type: DEVTOOLS_TYPE,
125
114
  properties: {
@@ -128,7 +117,7 @@ export default (context: PluginsContext) =>
128
117
  },
129
118
  nodes: [
130
119
  {
131
- id: `${node.id}-${Devtools.Halo.Identity}`,
120
+ id: `${Devtools.Halo.Identity}-${node.id}`,
132
121
  data: Devtools.Halo.Identity,
133
122
  type: DEVTOOLS_TYPE,
134
123
  properties: {
@@ -137,7 +126,7 @@ export default (context: PluginsContext) =>
137
126
  },
138
127
  },
139
128
  {
140
- id: `${node.id}-${Devtools.Halo.Devices}`,
129
+ id: `${Devtools.Halo.Devices}-${node.id}`,
141
130
  data: Devtools.Halo.Devices,
142
131
  type: DEVTOOLS_TYPE,
143
132
  properties: {
@@ -146,7 +135,7 @@ export default (context: PluginsContext) =>
146
135
  },
147
136
  },
148
137
  {
149
- id: `${node.id}-${Devtools.Halo.Keyring}`,
138
+ id: `${Devtools.Halo.Keyring}-${node.id}`,
150
139
  data: Devtools.Halo.Keyring,
151
140
  type: DEVTOOLS_TYPE,
152
141
  properties: {
@@ -155,7 +144,7 @@ export default (context: PluginsContext) =>
155
144
  },
156
145
  },
157
146
  {
158
- id: `${node.id}-${Devtools.Halo.Credentials}`,
147
+ id: `${Devtools.Halo.Credentials}-${node.id}`,
159
148
  data: Devtools.Halo.Credentials,
160
149
  type: DEVTOOLS_TYPE,
161
150
  properties: {
@@ -166,7 +155,7 @@ export default (context: PluginsContext) =>
166
155
  ],
167
156
  },
168
157
  {
169
- id: `${node.id}-${Devtools.Echo.id}`,
158
+ id: `${Devtools.Echo.id}-${node.id}`,
170
159
  data: null,
171
160
  type: DEVTOOLS_TYPE,
172
161
  properties: {
@@ -175,7 +164,7 @@ export default (context: PluginsContext) =>
175
164
  },
176
165
  nodes: [
177
166
  {
178
- id: `${node.id}-${Devtools.Echo.Spaces}`,
167
+ id: `${Devtools.Echo.Spaces}-${node.id}`,
179
168
  data: Devtools.Echo.Spaces,
180
169
  type: DEVTOOLS_TYPE,
181
170
  properties: {
@@ -184,7 +173,7 @@ export default (context: PluginsContext) =>
184
173
  },
185
174
  },
186
175
  {
187
- id: `${node.id}-${Devtools.Echo.Space}`,
176
+ id: `${Devtools.Echo.Space}-${node.id}`,
188
177
  data: Devtools.Echo.Space,
189
178
  type: DEVTOOLS_TYPE,
190
179
  properties: {
@@ -193,7 +182,7 @@ export default (context: PluginsContext) =>
193
182
  },
194
183
  },
195
184
  {
196
- id: `${node.id}-${Devtools.Echo.Feeds}`,
185
+ id: `${Devtools.Echo.Feeds}-${node.id}`,
197
186
  data: Devtools.Echo.Feeds,
198
187
  type: DEVTOOLS_TYPE,
199
188
  properties: {
@@ -202,7 +191,7 @@ export default (context: PluginsContext) =>
202
191
  },
203
192
  },
204
193
  {
205
- id: `${node.id}-${Devtools.Echo.Objects}`,
194
+ id: `${Devtools.Echo.Objects}-${node.id}`,
206
195
  data: Devtools.Echo.Objects,
207
196
  type: DEVTOOLS_TYPE,
208
197
  properties: {
@@ -211,7 +200,7 @@ export default (context: PluginsContext) =>
211
200
  },
212
201
  },
213
202
  {
214
- id: `${node.id}-${Devtools.Echo.Automerge}`,
203
+ id: `${Devtools.Echo.Automerge}-${node.id}`,
215
204
  data: Devtools.Echo.Automerge,
216
205
  type: DEVTOOLS_TYPE,
217
206
  properties: {
@@ -220,7 +209,7 @@ export default (context: PluginsContext) =>
220
209
  },
221
210
  },
222
211
  {
223
- id: `${node.id}-${Devtools.Echo.Queues}`,
212
+ id: `${Devtools.Echo.Queues}-${node.id}`,
224
213
  data: Devtools.Echo.Queues,
225
214
  type: DEVTOOLS_TYPE,
226
215
  properties: {
@@ -229,7 +218,7 @@ export default (context: PluginsContext) =>
229
218
  },
230
219
  },
231
220
  {
232
- id: `${node.id}-${Devtools.Echo.Members}`,
221
+ id: `${Devtools.Echo.Members}-${node.id}`,
233
222
  data: Devtools.Echo.Members,
234
223
  type: DEVTOOLS_TYPE,
235
224
  properties: {
@@ -238,7 +227,7 @@ export default (context: PluginsContext) =>
238
227
  },
239
228
  },
240
229
  {
241
- id: `${node.id}-${Devtools.Echo.Metadata}`,
230
+ id: `${Devtools.Echo.Metadata}-${node.id}`,
242
231
  data: Devtools.Echo.Metadata,
243
232
  type: DEVTOOLS_TYPE,
244
233
  properties: {
@@ -249,7 +238,7 @@ export default (context: PluginsContext) =>
249
238
  ],
250
239
  },
251
240
  {
252
- id: `${node.id}-${Devtools.Mesh.id}`,
241
+ id: `${Devtools.Mesh.id}-${node.id}`,
253
242
  data: null,
254
243
  type: DEVTOOLS_TYPE,
255
244
  properties: {
@@ -258,7 +247,7 @@ export default (context: PluginsContext) =>
258
247
  },
259
248
  nodes: [
260
249
  {
261
- id: `${node.id}-${Devtools.Mesh.Signal}`,
250
+ id: `${Devtools.Mesh.Signal}-${node.id}`,
262
251
  data: Devtools.Mesh.Signal,
263
252
  type: DEVTOOLS_TYPE,
264
253
  properties: {
@@ -267,7 +256,7 @@ export default (context: PluginsContext) =>
267
256
  },
268
257
  },
269
258
  {
270
- id: `${node.id}-${Devtools.Mesh.Swarm}`,
259
+ id: `${Devtools.Mesh.Swarm}-${node.id}`,
271
260
  data: Devtools.Mesh.Swarm,
272
261
  type: DEVTOOLS_TYPE,
273
262
  properties: {
@@ -276,7 +265,7 @@ export default (context: PluginsContext) =>
276
265
  },
277
266
  },
278
267
  {
279
- id: `${node.id}-${Devtools.Mesh.Network}`,
268
+ id: `${Devtools.Mesh.Network}-${node.id}`,
280
269
  data: Devtools.Mesh.Network,
281
270
  type: DEVTOOLS_TYPE,
282
271
  properties: {
@@ -288,7 +277,7 @@ export default (context: PluginsContext) =>
288
277
  },
289
278
  // TODO(wittjosiah): Remove?
290
279
  // {
291
- // id: `${node.id}-${Devtools.Agent.id}`,
280
+ // id: `${prefix}-${Devtools.Agent.id}`,
292
281
  // data: null,
293
282
  // type: DEVTOOLS_TYPE,
294
283
  // properties: {
@@ -297,7 +286,7 @@ export default (context: PluginsContext) =>
297
286
  // },
298
287
  // nodes: [
299
288
  // {
300
- // id: `${node.id}-${Devtools.Agent.Dashboard}`,
289
+ // id: `${prefix}-${Devtools.Agent.Dashboard}`,
301
290
  // data: Devtools.Agent.Dashboard,
302
291
  // type: DEVTOOLS_TYPE,
303
292
  // properties: {
@@ -308,7 +297,7 @@ export default (context: PluginsContext) =>
308
297
  // ],
309
298
  // },
310
299
  {
311
- id: `${node.id}-${Devtools.Edge.id}`,
300
+ id: `${Devtools.Edge.id}-${node.id}`,
312
301
  data: null,
313
302
  type: DEVTOOLS_TYPE,
314
303
  properties: {
@@ -317,7 +306,7 @@ export default (context: PluginsContext) =>
317
306
  },
318
307
  nodes: [
319
308
  {
320
- id: `${node.id}-${Devtools.Edge.Dashboard}`,
309
+ id: `${Devtools.Edge.Dashboard}-${node.id}`,
321
310
  data: Devtools.Edge.Dashboard,
322
311
  type: DEVTOOLS_TYPE,
323
312
  properties: {
@@ -326,7 +315,7 @@ export default (context: PluginsContext) =>
326
315
  },
327
316
  },
328
317
  {
329
- id: `${node.id}-${Devtools.Edge.Workflows}`,
318
+ id: `${Devtools.Edge.Workflows}-${node.id}`,
330
319
  data: Devtools.Edge.Workflows,
331
320
  type: DEVTOOLS_TYPE,
332
321
  properties: {
@@ -335,7 +324,7 @@ export default (context: PluginsContext) =>
335
324
  },
336
325
  },
337
326
  {
338
- id: `${node.id}-${Devtools.Edge.Traces}`,
327
+ id: `${Devtools.Edge.Traces}-${node.id}`,
339
328
  data: Devtools.Edge.Traces,
340
329
  type: DEVTOOLS_TYPE,
341
330
  properties: {
@@ -344,7 +333,7 @@ export default (context: PluginsContext) =>
344
333
  },
345
334
  },
346
335
  {
347
- id: `${node.id}-${Devtools.Edge.Testing}`,
336
+ id: `${Devtools.Edge.Testing}-${node.id}`,
348
337
  data: Devtools.Edge.Testing,
349
338
  type: DEVTOOLS_TYPE,
350
339
  properties: {
@@ -410,4 +399,23 @@ export default (context: PluginsContext) =>
410
399
  },
411
400
  ],
412
401
  }),
402
+
403
+ // Devtools deck companion.
404
+ createExtension({
405
+ id: `${DEBUG_PLUGIN}/devtools-overview`,
406
+ filter: (node): node is Node<null> => node.id === 'root',
407
+ connector: ({ node }) => [
408
+ {
409
+ id: [node.id, 'devtools'].join(ATTENDABLE_PATH_SEPARATOR),
410
+ type: DECK_COMPANION_TYPE,
411
+ data: null,
412
+ properties: {
413
+ label: ['devtools overview label', { ns: DEBUG_PLUGIN }],
414
+ icon: 'ph--hammer--regular',
415
+ disposition: 'hidden',
416
+ position: 'fallback',
417
+ },
418
+ },
419
+ ],
420
+ }),
413
421
  ]);
@@ -16,30 +16,30 @@ import {
16
16
  type PluginsContext,
17
17
  } from '@dxos/app-framework';
18
18
  import {
19
+ AutomergePanel,
19
20
  ConfigPanel,
20
21
  CredentialsPanel,
21
22
  DeviceListPanel,
22
23
  DiagnosticsPanel,
24
+ EdgeDashboardPanel,
23
25
  FeedsPanel,
24
26
  IdentityPanel,
27
+ InvocationTracePanel,
25
28
  KeyringPanel,
26
29
  LoggingPanel,
27
30
  MembersPanel,
28
31
  MetadataPanel,
29
32
  NetworkPanel,
30
33
  ObjectsPanel,
34
+ QueuesPanel,
31
35
  SignalPanel,
32
36
  SpaceInfoPanel,
33
37
  SpaceListPanel,
34
38
  StoragePanel,
35
39
  SwarmPanel,
40
+ TestingPanel,
36
41
  TracingPanel,
37
- EdgeDashboardPanel,
38
- AutomergePanel,
39
42
  WorkflowPanel,
40
- QueuesPanel,
41
- InvocationTracePanel,
42
- TestingPanel,
43
43
  } from '@dxos/devtools';
44
44
  import { SettingsStore } from '@dxos/local-storage';
45
45
  import { log } from '@dxos/log';
@@ -52,12 +52,20 @@ import {
52
52
  isSpace,
53
53
  isEchoObject,
54
54
  type ReactiveEchoObject,
55
- type ReactiveObject,
55
+ type Live,
56
56
  type Space,
57
57
  parseId,
58
58
  } from '@dxos/react-client/echo';
59
59
 
60
- import { DebugApp, DebugObjectPanel, DebugSettings, DebugStatus, SpaceGenerator, Wireframe } from '../components';
60
+ import {
61
+ DebugApp,
62
+ DebugObjectPanel,
63
+ DebugSettings,
64
+ DebugStatus,
65
+ DevtoolsOverviewContainer,
66
+ SpaceGenerator,
67
+ Wireframe,
68
+ } from '../components';
61
69
  import { DEBUG_PLUGIN } from '../meta';
62
70
  import { type DebugSettingsProps, Devtools } from '../types';
63
71
 
@@ -97,7 +105,7 @@ export default (context: PluginsContext) =>
97
105
  filter: (data): data is { subject: SpaceDebug } => isSpaceDebug(data.subject),
98
106
  component: ({ data }) => {
99
107
  const handleCreateObject = useCallback(
100
- (objects: ReactiveObject<any>[]) => {
108
+ (objects: Live<any>[]) => {
101
109
  if (!isSpace(data.subject.space)) {
102
110
  return;
103
111
  }
@@ -147,6 +155,11 @@ export default (context: PluginsContext) =>
147
155
  data.subject === 'debug' && isEchoObject(data.companionTo),
148
156
  component: ({ data }) => <DebugObjectPanel object={data.companionTo} />,
149
157
  }),
158
+ createSurface({
159
+ id: `${DEBUG_PLUGIN}/devtools-overview`,
160
+ role: 'deck-companion--devtools',
161
+ component: () => <DevtoolsOverviewContainer />,
162
+ }),
150
163
  createSurface({
151
164
  id: `${DEBUG_PLUGIN}/status`,
152
165
  role: 'status',
@@ -3,13 +3,13 @@
3
3
  //
4
4
 
5
5
  import { Capabilities, contributes } from '@dxos/app-framework';
6
- import { create } from '@dxos/react-client/echo';
6
+ import { live } from '@dxos/react-client/echo';
7
7
 
8
8
  import { DEBUG_PLUGIN } from '../meta';
9
9
  import { type DebugSettingsProps, DebugSettingsSchema } from '../types';
10
10
 
11
11
  export default () => {
12
- const settings = create<DebugSettingsProps>({});
12
+ const settings = live<DebugSettingsProps>({});
13
13
 
14
14
  return contributes(Capabilities.Settings, { schema: DebugSettingsSchema, prefix: DEBUG_PLUGIN, value: settings });
15
15
  };
@@ -6,12 +6,11 @@ import React, { useEffect, useRef, useState } from 'react';
6
6
 
7
7
  import { useAppGraph, useLayout } from '@dxos/app-framework';
8
8
  import { TimeoutError } from '@dxos/async';
9
- import { StatsPanel, useStats } from '@dxos/devtools';
10
9
  import { getActiveSpace } from '@dxos/plugin-space';
11
10
  import { StatusBar } from '@dxos/plugin-status-bar';
12
11
  import { ConnectionState } from '@dxos/protocols/proto/dxos/client/services';
13
12
  import { useNetworkStatus } from '@dxos/react-client/mesh';
14
- import { Icon, Popover } from '@dxos/react-ui';
13
+ import { Icon } from '@dxos/react-ui';
15
14
 
16
15
  const styles = {
17
16
  success: 'text-sky-300 dark:text-green-700',
@@ -180,28 +179,7 @@ const SavingIndicator = () => {
180
179
  }
181
180
  };
182
181
 
183
- const PerformanceIndicator = () => {
184
- const [visible, setVisible] = useState(false);
185
- const [stats, refreshStats] = useStats();
186
-
187
- return (
188
- <Popover.Root open={visible} onOpenChange={setVisible}>
189
- <Popover.Trigger asChild>
190
- <StatusBar.Button onClick={() => setVisible((visible) => !visible)} title='Performance panels'>
191
- <Icon icon='ph--chart-bar--regular' size={4} />
192
- </StatusBar.Button>
193
- </Popover.Trigger>
194
- <Popover.Portal>
195
- <Popover.Content classNames='max-is-[min(var(--radix-popover-content-available-width),300px)] max-bs-[--radix-popover-content-available-height]'>
196
- <StatsPanel stats={stats} onRefresh={refreshStats} />
197
- <Popover.Arrow />
198
- </Popover.Content>
199
- </Popover.Portal>
200
- </Popover.Root>
201
- );
202
- };
203
-
204
- const indicators = [SavingIndicator, SwarmIndicator, PerformanceIndicator, ErrorIndicator];
182
+ const indicators = [SavingIndicator, SwarmIndicator, ErrorIndicator];
205
183
 
206
184
  export const DebugStatus = () => {
207
185
  return (
@@ -0,0 +1,20 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import React from 'react';
6
+
7
+ import { Surface } from '@dxos/app-framework';
8
+ import { StatsPanel, useStats } from '@dxos/devtools';
9
+
10
+ export const DevtoolsOverviewContainer = () => {
11
+ const [stats, refreshStats] = useStats();
12
+
13
+ return (
14
+ <StatsPanel stats={stats} onRefresh={refreshStats}>
15
+ <Surface role='devtools-overview' />
16
+ </StatsPanel>
17
+ );
18
+ };
19
+
20
+ export default DevtoolsOverviewContainer;