@dxos/plugin-debug 0.8.4-main.4a85c3132b → 0.8.4-main.4f23b4e393

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 (198) hide show
  1. package/dist/lib/{browser/DebugGraph-7HXJ2PS2.mjs → neutral/DebugGraph-G4FWS57E.mjs} +4 -5
  2. package/dist/lib/neutral/DebugGraph-G4FWS57E.mjs.map +7 -0
  3. package/dist/lib/neutral/DebugObjectPanel-UJ63CV25.mjs +59 -0
  4. package/dist/lib/neutral/DebugObjectPanel-UJ63CV25.mjs.map +7 -0
  5. package/dist/lib/neutral/DebugPlugin.mjs +47 -0
  6. package/dist/lib/neutral/DebugPlugin.mjs.map +7 -0
  7. package/dist/lib/neutral/DebugPlugin.node.mjs +18 -0
  8. package/dist/lib/neutral/DebugPlugin.node.mjs.map +7 -0
  9. package/dist/lib/neutral/DebugSettings-Z3XADRNK.mjs +224 -0
  10. package/dist/lib/neutral/DebugSettings-Z3XADRNK.mjs.map +7 -0
  11. package/dist/lib/{browser/DebugSpaceObjectsPanel-7NRPLWZ4.mjs → neutral/DebugSpaceObjectsPanel-NISULU6U.mjs} +10 -26
  12. package/dist/lib/neutral/DebugSpaceObjectsPanel-NISULU6U.mjs.map +7 -0
  13. package/dist/lib/{browser/DebugStatus-COQGH37G.mjs → neutral/DebugStatus-YB3KFP7G.mjs} +35 -39
  14. package/dist/lib/neutral/DebugStatus-YB3KFP7G.mjs.map +7 -0
  15. package/dist/lib/{browser/DevtoolsOverviewContainer-C75NFVER.mjs → neutral/DevtoolsOverviewContainer-YX7Z3D2H.mjs} +9 -6
  16. package/dist/lib/neutral/DevtoolsOverviewContainer-YX7Z3D2H.mjs.map +7 -0
  17. package/dist/lib/neutral/SpaceGenerator-UBYB4NPD.mjs +143 -0
  18. package/dist/lib/neutral/SpaceGenerator-UBYB4NPD.mjs.map +7 -0
  19. package/dist/lib/{browser/Wireframe-KAGOKEFW.mjs → neutral/Wireframe-7SNRUKET.mjs} +8 -9
  20. package/dist/lib/neutral/Wireframe-7SNRUKET.mjs.map +7 -0
  21. package/dist/lib/{browser/app-graph-builder-LGUQNXHD.mjs → neutral/app-graph-builder-YPYHL2K5.mjs} +210 -258
  22. package/dist/lib/neutral/app-graph-builder-YPYHL2K5.mjs.map +7 -0
  23. package/dist/lib/neutral/capabilities/index.mjs +15 -0
  24. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  25. package/dist/lib/{browser/chunk-A5H5GRV6.mjs → neutral/chunk-3OGPOE7H.mjs} +2 -2
  26. package/dist/lib/{browser/chunk-A5H5GRV6.mjs.map → neutral/chunk-3OGPOE7H.mjs.map} +3 -3
  27. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  28. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +7 -0
  29. package/dist/lib/{browser/chunk-4UFQXPP7.mjs → neutral/chunk-NFIOTQRZ.mjs} +23 -12
  30. package/dist/lib/neutral/chunk-NFIOTQRZ.mjs.map +7 -0
  31. package/dist/lib/{browser/SpaceGenerator-SWSGJEEL.mjs → neutral/components/index.mjs} +70 -264
  32. package/dist/lib/neutral/components/index.mjs.map +7 -0
  33. package/dist/lib/neutral/containers/index.mjs +21 -0
  34. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  35. package/dist/lib/neutral/index.mjs +18 -0
  36. package/dist/lib/neutral/index.mjs.map +7 -0
  37. package/dist/lib/neutral/meta.json +1 -0
  38. package/dist/lib/neutral/meta.mjs +8 -0
  39. package/dist/lib/neutral/meta.mjs.map +7 -0
  40. package/dist/lib/neutral/plugin.mjs +12 -0
  41. package/dist/lib/neutral/plugin.mjs.map +7 -0
  42. package/dist/lib/{browser/react-context-I3USIAF6.mjs → neutral/react-context-MUZ3KVLU.mjs} +6 -6
  43. package/dist/lib/neutral/react-context-MUZ3KVLU.mjs.map +7 -0
  44. package/dist/lib/{browser/react-surface-BTVNKKVQ.mjs → neutral/react-surface-UR2SYHYW.mjs} +154 -178
  45. package/dist/lib/neutral/react-surface-UR2SYHYW.mjs.map +7 -0
  46. package/dist/lib/{browser/settings-SLTQJJNF.mjs → neutral/settings-MPM6YUP4.mjs} +7 -11
  47. package/dist/lib/neutral/settings-MPM6YUP4.mjs.map +7 -0
  48. package/dist/lib/neutral/translations.mjs +83 -0
  49. package/dist/lib/neutral/translations.mjs.map +7 -0
  50. package/dist/lib/neutral/types/index.mjs +14 -0
  51. package/dist/lib/neutral/types/index.mjs.map +7 -0
  52. package/dist/types/src/DebugPlugin.d.ts +2 -5
  53. package/dist/types/src/DebugPlugin.d.ts.map +1 -1
  54. package/dist/types/src/DebugPlugin.node.d.ts +5 -0
  55. package/dist/types/src/DebugPlugin.node.d.ts.map +1 -0
  56. package/dist/types/src/DebugPlugin.test.d.ts +2 -0
  57. package/dist/types/src/DebugPlugin.test.d.ts.map +1 -0
  58. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
  59. package/dist/types/src/capabilities/index.d.ts +11 -4
  60. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  61. package/dist/types/src/capabilities/react-context.d.ts.map +1 -0
  62. package/dist/types/src/capabilities/{react-surface/react-surface.d.ts → react-surface.d.ts} +2 -2
  63. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
  64. package/dist/types/src/capabilities/{settings/settings.d.ts → settings.d.ts} +2 -1
  65. package/dist/types/src/capabilities/settings.d.ts.map +1 -0
  66. package/dist/types/src/components/DebugSettings/DebugSettings.d.ts +11 -0
  67. package/dist/types/src/components/DebugSettings/DebugSettings.d.ts.map +1 -0
  68. package/dist/types/src/components/DebugSettings/DebugSettings.stories.d.ts +99 -0
  69. package/dist/types/src/components/DebugSettings/DebugSettings.stories.d.ts.map +1 -0
  70. package/dist/types/src/components/DebugSettings/index.d.ts +2 -0
  71. package/dist/types/src/components/DebugSettings/index.d.ts.map +1 -0
  72. package/dist/types/src/components/SchemaTable/SchemaTable.d.ts.map +1 -1
  73. package/dist/types/src/components/SpaceGenerator/ObjectGenerator.d.ts +2 -2
  74. package/dist/types/src/components/SpaceGenerator/ObjectGenerator.d.ts.map +1 -1
  75. package/dist/types/src/components/SpaceGenerator/draw-util.d.ts.map +1 -1
  76. package/dist/types/src/components/SpaceGenerator/presets.d.ts.map +1 -1
  77. package/dist/types/src/components/index.d.ts +2 -0
  78. package/dist/types/src/components/index.d.ts.map +1 -1
  79. package/dist/types/src/containers/DebugGraph/DebugGraph.d.ts +2 -2
  80. package/dist/types/src/containers/DebugGraph/DebugGraph.d.ts.map +1 -1
  81. package/dist/types/src/containers/DebugGraph/index.d.ts +1 -2
  82. package/dist/types/src/containers/DebugGraph/index.d.ts.map +1 -1
  83. package/dist/types/src/containers/DebugObjectPanel/DebugObjectPanel.d.ts +3 -4
  84. package/dist/types/src/containers/DebugObjectPanel/DebugObjectPanel.d.ts.map +1 -1
  85. package/dist/types/src/containers/DebugObjectPanel/index.d.ts +1 -2
  86. package/dist/types/src/containers/DebugObjectPanel/index.d.ts.map +1 -1
  87. package/dist/types/src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.d.ts +3 -1
  88. package/dist/types/src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.d.ts.map +1 -1
  89. package/dist/types/src/containers/DebugSpaceObjectsPanel/index.d.ts +1 -2
  90. package/dist/types/src/containers/DebugSpaceObjectsPanel/index.d.ts.map +1 -1
  91. package/dist/types/src/containers/DebugStatus/DebugStatus.d.ts.map +1 -1
  92. package/dist/types/src/containers/DebugStatus/index.d.ts +1 -2
  93. package/dist/types/src/containers/DebugStatus/index.d.ts.map +1 -1
  94. package/dist/types/src/containers/DevtoolsOverviewContainer/DevtoolsOverviewContainer.d.ts.map +1 -1
  95. package/dist/types/src/containers/DevtoolsOverviewContainer/index.d.ts +1 -2
  96. package/dist/types/src/containers/DevtoolsOverviewContainer/index.d.ts.map +1 -1
  97. package/dist/types/src/containers/SpaceGenerator/SpaceGenerator.d.ts +3 -1
  98. package/dist/types/src/containers/SpaceGenerator/SpaceGenerator.d.ts.map +1 -1
  99. package/dist/types/src/containers/SpaceGenerator/index.d.ts +1 -2
  100. package/dist/types/src/containers/SpaceGenerator/index.d.ts.map +1 -1
  101. package/dist/types/src/containers/Wireframe/Wireframe.d.ts.map +1 -1
  102. package/dist/types/src/containers/Wireframe/index.d.ts +1 -2
  103. package/dist/types/src/containers/Wireframe/index.d.ts.map +1 -1
  104. package/dist/types/src/containers/index.d.ts +0 -1
  105. package/dist/types/src/containers/index.d.ts.map +1 -1
  106. package/dist/types/src/index.d.ts +1 -1
  107. package/dist/types/src/index.d.ts.map +1 -1
  108. package/dist/types/src/plugin.d.ts +4 -0
  109. package/dist/types/src/plugin.d.ts.map +1 -0
  110. package/dist/types/src/translations.d.ts +80 -61
  111. package/dist/types/src/translations.d.ts.map +1 -1
  112. package/dist/types/src/types/Settings.d.ts +8 -0
  113. package/dist/types/src/types/Settings.d.ts.map +1 -0
  114. package/dist/types/src/types/index.d.ts +69 -0
  115. package/dist/types/src/types/index.d.ts.map +1 -0
  116. package/dist/types/tsconfig.tsbuildinfo +1 -1
  117. package/package.json +115 -64
  118. package/src/DebugPlugin.node.ts +18 -0
  119. package/src/DebugPlugin.test.ts +29 -0
  120. package/src/DebugPlugin.tsx +9 -11
  121. package/src/capabilities/app-graph-builder.ts +405 -0
  122. package/src/capabilities/index.ts +6 -4
  123. package/src/capabilities/{react-context/react-context.tsx → react-context.tsx} +7 -2
  124. package/src/capabilities/{react-surface/react-surface.tsx → react-surface.tsx} +169 -159
  125. package/src/capabilities/{settings/settings.ts → settings.ts} +4 -4
  126. package/src/components/DebugSettings/DebugSettings.stories.tsx +36 -0
  127. package/src/components/DebugSettings/DebugSettings.tsx +262 -0
  128. package/src/components/DebugSettings/index.ts +5 -0
  129. package/src/components/SpaceGenerator/ObjectGenerator.tsx +14 -17
  130. package/src/components/SpaceGenerator/draw-util.ts +8 -8
  131. package/src/components/SpaceGenerator/presets.ts +36 -58
  132. package/src/components/index.ts +4 -0
  133. package/src/containers/DebugGraph/DebugGraph.tsx +3 -2
  134. package/src/containers/DebugGraph/index.ts +1 -3
  135. package/src/containers/DebugObjectPanel/DebugObjectPanel.tsx +47 -16
  136. package/src/containers/DebugObjectPanel/index.ts +1 -3
  137. package/src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.tsx +10 -23
  138. package/src/containers/DebugSpaceObjectsPanel/index.ts +1 -3
  139. package/src/containers/DebugStatus/DebugStatus.tsx +41 -19
  140. package/src/containers/DebugStatus/index.ts +1 -3
  141. package/src/containers/DevtoolsOverviewContainer/DevtoolsOverviewContainer.tsx +8 -1
  142. package/src/containers/DevtoolsOverviewContainer/index.ts +1 -3
  143. package/src/containers/SpaceGenerator/SpaceGenerator.tsx +102 -103
  144. package/src/containers/SpaceGenerator/index.ts +1 -3
  145. package/src/containers/Wireframe/Wireframe.tsx +2 -6
  146. package/src/containers/Wireframe/index.ts +1 -3
  147. package/src/containers/index.ts +0 -1
  148. package/src/index.ts +1 -1
  149. package/src/meta.ts +1 -1
  150. package/src/plugin.ts +10 -0
  151. package/src/translations.ts +75 -60
  152. package/src/types/Settings.ts +16 -0
  153. package/src/{types.ts → types/index.ts} +15 -14
  154. package/dist/lib/browser/DebugGraph-7HXJ2PS2.mjs.map +0 -7
  155. package/dist/lib/browser/DebugObjectPanel-3TCDNUNW.mjs +0 -33
  156. package/dist/lib/browser/DebugObjectPanel-3TCDNUNW.mjs.map +0 -7
  157. package/dist/lib/browser/DebugSettings-JZMIUDYB.mjs +0 -174
  158. package/dist/lib/browser/DebugSettings-JZMIUDYB.mjs.map +0 -7
  159. package/dist/lib/browser/DebugSpaceObjectsPanel-7NRPLWZ4.mjs.map +0 -7
  160. package/dist/lib/browser/DebugStatus-COQGH37G.mjs.map +0 -7
  161. package/dist/lib/browser/DevtoolsOverviewContainer-C75NFVER.mjs.map +0 -7
  162. package/dist/lib/browser/SpaceGenerator-SWSGJEEL.mjs.map +0 -7
  163. package/dist/lib/browser/Wireframe-KAGOKEFW.mjs.map +0 -7
  164. package/dist/lib/browser/app-graph-builder-LGUQNXHD.mjs.map +0 -7
  165. package/dist/lib/browser/chunk-4UFQXPP7.mjs.map +0 -7
  166. package/dist/lib/browser/index.mjs +0 -132
  167. package/dist/lib/browser/index.mjs.map +0 -7
  168. package/dist/lib/browser/meta.json +0 -1
  169. package/dist/lib/browser/react-context-I3USIAF6.mjs.map +0 -7
  170. package/dist/lib/browser/react-surface-BTVNKKVQ.mjs.map +0 -7
  171. package/dist/lib/browser/settings-SLTQJJNF.mjs.map +0 -7
  172. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +0 -1
  173. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +0 -3
  174. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +0 -1
  175. package/dist/types/src/capabilities/react-context/index.d.ts +0 -7
  176. package/dist/types/src/capabilities/react-context/index.d.ts.map +0 -1
  177. package/dist/types/src/capabilities/react-context/react-context.d.ts.map +0 -1
  178. package/dist/types/src/capabilities/react-surface/index.d.ts +0 -5
  179. package/dist/types/src/capabilities/react-surface/index.d.ts.map +0 -1
  180. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +0 -1
  181. package/dist/types/src/capabilities/settings/index.d.ts +0 -3
  182. package/dist/types/src/capabilities/settings/index.d.ts.map +0 -1
  183. package/dist/types/src/capabilities/settings/settings.d.ts.map +0 -1
  184. package/dist/types/src/containers/DebugSettings/DebugSettings.d.ts +0 -10
  185. package/dist/types/src/containers/DebugSettings/DebugSettings.d.ts.map +0 -1
  186. package/dist/types/src/containers/DebugSettings/index.d.ts +0 -3
  187. package/dist/types/src/containers/DebugSettings/index.d.ts.map +0 -1
  188. package/dist/types/src/types.d.ts +0 -68
  189. package/dist/types/src/types.d.ts.map +0 -1
  190. package/src/capabilities/app-graph-builder/app-graph-builder.ts +0 -441
  191. package/src/capabilities/app-graph-builder/index.ts +0 -7
  192. package/src/capabilities/react-context/index.ts +0 -7
  193. package/src/capabilities/react-surface/index.ts +0 -7
  194. package/src/capabilities/settings/index.ts +0 -7
  195. package/src/containers/DebugSettings/DebugSettings.tsx +0 -201
  196. package/src/containers/DebugSettings/index.ts +0 -7
  197. /package/dist/types/src/capabilities/{app-graph-builder/app-graph-builder.d.ts → app-graph-builder.d.ts} +0 -0
  198. /package/dist/types/src/capabilities/{react-context/react-context.d.ts → react-context.d.ts} +0 -0
@@ -6,9 +6,9 @@ import * as Effect from 'effect/Effect';
6
6
  import React, { useCallback } from 'react';
7
7
 
8
8
  import { Capabilities, Capability } from '@dxos/app-framework';
9
- import { Surface, useCapability, useOperationInvoker, useSettingsState } from '@dxos/app-framework/ui';
10
- import { AppCapabilities, LayoutOperation } from '@dxos/app-toolkit';
11
- import { useLayout } from '@dxos/app-toolkit/ui';
9
+ import { Surface, useOperationInvoker, useSettingsState } from '@dxos/app-framework/ui';
10
+ import { AppCapabilities, LayoutOperation, getObjectPathFromObject } from '@dxos/app-toolkit';
11
+ import { AppSurface, useActiveSpace } from '@dxos/app-toolkit/ui';
12
12
  import {
13
13
  AutomergePanel,
14
14
  ConfigPanel,
@@ -33,32 +33,32 @@ import {
33
33
  StoragePanel,
34
34
  SwarmPanel,
35
35
  TestingPanel,
36
- TracingPanel,
37
36
  WorkflowPanel,
38
37
  } from '@dxos/devtools';
39
- import { Obj } from '@dxos/echo';
40
- import { Collection } from '@dxos/echo';
41
- import { type LogBuffer } from '@dxos/log';
38
+ import { Collection, Feed, Obj } from '@dxos/echo';
42
39
  import { log } from '@dxos/log';
43
- import { ClientCapabilities } from '@dxos/plugin-client';
40
+ import { type IdbLogStore } from '@dxos/log-store-idb';
44
41
  import { type Graph } from '@dxos/plugin-graph';
45
- import { ScriptOperation } from '@dxos/plugin-script/types';
46
- import { SpaceOperation } from '@dxos/plugin-space/types';
47
- import { type Space, SpaceState, isSpace, parseId } from '@dxos/react-client/echo';
48
- import { Panel } from '@dxos/react-ui';
42
+ import { ScriptOperation } from '@dxos/plugin-script';
43
+ import { SpaceOperation } from '@dxos/plugin-space';
44
+ import { type Space, SpaceState, isSpace } from '@dxos/react-client/echo';
45
+ import { ToolsExplorer } from '@dxos/react-ui-introspect';
49
46
 
47
+ import { DebugSettings } from '#components';
50
48
  import {
51
49
  DebugGraph,
52
50
  DebugObjectPanel,
53
- DebugSettings,
54
51
  DebugSpaceObjectsPanel,
55
52
  DebugStatus,
56
53
  DevtoolsOverviewContainer,
57
54
  SpaceGenerator,
58
55
  Wireframe,
59
- } from '../../containers';
60
- import { meta } from '../../meta';
61
- import { DebugCapabilities, type DebugSettingsProps, Devtools } from '../../types';
56
+ } from '#containers';
57
+ import { meta } from '#meta';
58
+ import { DebugCapabilities, type Settings, Devtools } from '#types';
59
+
60
+ // TODO(burdon): Move to config.
61
+ const MCP_SERVER_URL = 'https://introspect-service-labs.dxos.workers.dev/mcp';
62
62
 
63
63
  type SpaceDebug = {
64
64
  type: string;
@@ -70,7 +70,7 @@ type GraphDebug = {
70
70
  root: string;
71
71
  };
72
72
 
73
- const isSpaceDebug = (data: any): data is SpaceDebug => data?.type === `${meta.id}/space` && isSpace(data.space);
73
+ const isSpaceDebug = (data: any): data is SpaceDebug => data?.type === `${meta.id}.space` && isSpace(data.space);
74
74
  const isGraphDebug = (data: any): data is GraphDebug => {
75
75
  const graph = data?.graph;
76
76
  return (
@@ -78,38 +78,35 @@ const isGraphDebug = (data: any): data is GraphDebug => {
78
78
  );
79
79
  };
80
80
 
81
- // TODO(wittjosiah): Factor out?
82
- const useCurrentSpace = () => {
83
- const layout = useLayout();
84
- const client = useCapability(ClientCapabilities.Client);
85
- const { spaceId } = parseId(layout.workspace);
86
- const space = spaceId ? client.spaces.get(spaceId) : undefined;
87
- return space;
88
- };
89
-
90
81
  type ReactSurfaceOptions = {
91
- logBuffer: LogBuffer;
82
+ logStore?: IdbLogStore;
92
83
  };
93
84
 
94
85
  export default Capability.makeModule(
95
- Effect.fnUntraced(function* ({ logBuffer }: ReactSurfaceOptions) {
86
+ Effect.fnUntraced(function* ({ logStore }: ReactSurfaceOptions) {
96
87
  const capabilities = yield* Capability.Service;
97
88
  const registry = capabilities.get(Capabilities.AtomRegistry);
98
89
  const settingsAtom = capabilities.get(DebugCapabilities.Settings);
90
+ const fileUploader = capabilities.getAll(AppCapabilities.FileUploader)[0];
99
91
 
100
92
  return Capability.contributes(Capabilities.ReactSurface, [
101
93
  Surface.create({
102
- id: `${meta.id}/plugin-settings`,
103
- role: 'article',
104
- filter: (data): data is { subject: AppCapabilities.Settings } =>
105
- AppCapabilities.isSettings(data.subject) && data.subject.prefix === meta.id,
94
+ id: 'plugin-settings',
95
+ filter: AppSurface.settings(AppSurface.Article, meta.id),
106
96
  component: ({ data: { subject } }) => {
107
- const { settings, updateSettings } = useSettingsState<DebugSettingsProps>(subject.atom);
108
- return <DebugSettings settings={settings} onSettingsChange={updateSettings} logBuffer={logBuffer} />;
97
+ const { settings, updateSettings } = useSettingsState<Settings.Settings>(subject.atom);
98
+ return (
99
+ <DebugSettings
100
+ settings={settings}
101
+ onSettingsChange={updateSettings}
102
+ logStore={logStore}
103
+ onUpload={fileUploader}
104
+ />
105
+ );
109
106
  },
110
107
  }),
111
108
  Surface.create({
112
- id: `${meta.id}/space`,
109
+ id: 'space',
113
110
  role: 'article',
114
111
  filter: (data): data is { subject: SpaceDebug } => isSpaceDebug(data.subject),
115
112
  component: ({ role, data }) => {
@@ -138,25 +135,23 @@ export default Capability.makeModule(
138
135
  [data.subject.space, invokePromise],
139
136
  );
140
137
 
141
- return (
142
- <Panel.Root role={role} className='dx-article'>
143
- <Panel.Content asChild>
144
- <Panel.Content asChild>
145
- <SpaceGenerator space={data.subject.space} onCreateObjects={handleCreateObject} />
146
- </Panel.Content>
147
- </Panel.Content>
148
- </Panel.Root>
149
- );
138
+ return <SpaceGenerator role={role} space={data.subject.space} onCreateObjects={handleCreateObject} />;
150
139
  },
151
140
  }),
152
141
  Surface.create({
153
- id: `${meta.id}/app-graph`,
142
+ id: 'app-graph',
154
143
  role: 'article',
155
144
  filter: (data): data is { subject: GraphDebug } => isGraphDebug(data.subject),
156
145
  component: ({ data }) => <DebugGraph graph={data.subject.graph} root={data.subject.root} />,
157
146
  }),
158
147
  Surface.create({
159
- id: `${meta.id}/wireframe`,
148
+ id: 'tools-explorer',
149
+ filter: AppSurface.literal(AppSurface.Article, Devtools.ToolsExplorer),
150
+ component: () => <ToolsExplorer serverUrl={MCP_SERVER_URL} />,
151
+ }),
152
+ Surface.create({
153
+ id: 'wireframe',
154
+ // TODO(wittjosiah): Split into multiple surfaces if this filter proves too strict for non-article roles.
160
155
  role: ['article', 'section'],
161
156
  position: 'hoist',
162
157
  filter: (data): data is { subject: Obj.Unknown } => {
@@ -168,95 +163,95 @@ export default Capability.makeModule(
168
163
  ),
169
164
  }),
170
165
  Surface.create({
171
- id: `${meta.id}/object-debug`,
172
- role: 'article',
173
- filter: (data): data is { companionTo: Obj.Unknown } =>
174
- data.subject === 'debug' && Obj.isObject(data.companionTo),
175
- component: ({ data }) => <DebugObjectPanel object={data.companionTo} />,
166
+ id: 'object-debug',
167
+ filter: AppSurface.allOf(
168
+ AppSurface.literal(AppSurface.Article, 'debug'),
169
+ AppSurface.companion(AppSurface.Article),
170
+ ),
171
+ component: ({ role, data }) => <DebugObjectPanel role={role} companionTo={data.companionTo} />,
176
172
  }),
177
173
  Surface.create({
178
- id: `${meta.id}/devtools-overview`,
179
- role: 'deck-companion--devtools',
180
- filter: (data): data is { subject: 'devtools' } => data.subject === 'devtools',
174
+ id: 'devtools-overview',
175
+ filter: AppSurface.literal(Surface.makeType<{ subject: string }>('deck-companion--devtools'), 'devtools'),
181
176
  component: () => <DevtoolsOverviewContainer />,
182
177
  }),
183
178
  Surface.create({
184
- id: `${meta.id}/space-objects`,
185
- role: 'deck-companion--space-objects',
186
- filter: (data): data is { subject: 'space-objects' } => data.subject === 'space-objects',
187
- component: () => <DebugSpaceObjectsPanel />,
179
+ id: 'space-objects',
180
+ filter: AppSurface.literal(
181
+ Surface.makeType<{ subject: string }>('deck-companion--space-objects'),
182
+ 'space-objects',
183
+ ),
184
+ component: () => {
185
+ const space = useActiveSpace();
186
+ if (!space) {
187
+ return null;
188
+ }
189
+
190
+ return <DebugSpaceObjectsPanel space={space} />;
191
+ },
188
192
  }),
189
193
 
190
194
  Surface.create({
191
- id: `${meta.id}/status`,
192
- role: 'status',
195
+ id: 'status',
196
+ role: 'status-indicator',
197
+ position: 'hoist',
193
198
  component: () => <DebugStatus />,
194
199
  }),
200
+
195
201
  //
196
202
  // Devtools
197
203
  //
198
204
 
199
205
  Surface.create({
200
- id: `${meta.id}/client/config`,
201
- role: 'article',
202
- filter: (data): data is any => data.subject === Devtools.Client.Config,
206
+ id: 'client.config',
207
+ filter: AppSurface.literal(AppSurface.Article, Devtools.Client.Config),
203
208
  component: () => <ConfigPanel vaultSelector={false} />,
204
209
  }),
205
210
  Surface.create({
206
- id: `${meta.id}/client/storage`,
207
- role: 'article',
208
- filter: (data): data is any => data.subject === Devtools.Client.Storage,
211
+ id: 'client.storage',
212
+ filter: AppSurface.literal(AppSurface.Article, Devtools.Client.Storage),
209
213
  component: () => <StoragePanel />,
210
214
  }),
211
215
  Surface.create({
212
- id: `${meta.id}/client/logs`,
213
- role: 'article',
214
- filter: (data): data is any => data.subject === Devtools.Client.Logs,
216
+ id: 'client.logs',
217
+ filter: AppSurface.literal(AppSurface.Article, Devtools.Client.Logs),
215
218
  component: () => <LoggingPanel />,
216
219
  }),
217
220
  Surface.create({
218
- id: `${meta.id}/client/diagnostics`,
219
- role: 'article',
220
- filter: (data): data is any => data.subject === Devtools.Client.Diagnostics,
221
+ id: 'client.diagnostics',
222
+ filter: AppSurface.literal(AppSurface.Article, Devtools.Client.Diagnostics),
221
223
  component: () => <DiagnosticsPanel />,
222
224
  }),
223
225
  Surface.create({
224
- id: `${meta.id}/client/tracing`,
225
- role: 'article',
226
- filter: (data): data is any => data.subject === Devtools.Client.Tracing,
227
- component: () => <TracingPanel />,
228
- }),
229
- Surface.create({
230
- id: `${meta.id}/halo/identity`,
231
- role: 'article',
232
- filter: (data): data is any => data.subject === Devtools.Halo.Identity,
226
+ id: 'halo.identity',
227
+ filter: AppSurface.literal(AppSurface.Article, Devtools.Halo.Identity),
233
228
  component: () => <IdentityPanel />,
234
229
  }),
235
230
  Surface.create({
236
- id: `${meta.id}/halo/devices`,
237
- role: 'article',
238
- filter: (data): data is any => data.subject === Devtools.Halo.Devices,
231
+ id: 'halo.devices',
232
+ filter: AppSurface.literal(AppSurface.Article, Devtools.Halo.Devices),
239
233
  component: () => <DeviceListPanel />,
240
234
  }),
241
235
  Surface.create({
242
- id: `${meta.id}/halo/keyring`,
243
- role: 'article',
244
- filter: (data): data is any => data.subject === Devtools.Halo.Keyring,
236
+ id: 'halo.keyring',
237
+ filter: AppSurface.literal(AppSurface.Article, Devtools.Halo.Keyring),
245
238
  component: () => <KeyringPanel />,
246
239
  }),
247
240
  Surface.create({
248
- id: `${meta.id}/halo/credentials`,
249
- role: 'article',
250
- filter: (data): data is any => data.subject === Devtools.Halo.Credentials,
241
+ id: 'halo.credentials',
242
+ filter: AppSurface.literal(AppSurface.Article, Devtools.Halo.Credentials),
251
243
  component: () => {
252
- const space = useCurrentSpace();
244
+ const space = useActiveSpace();
245
+ if (!space) {
246
+ return null;
247
+ }
248
+
253
249
  return <CredentialsPanel space={space} />;
254
250
  },
255
251
  }),
256
252
  Surface.create({
257
- id: `${meta.id}/echo/spaces`,
258
- role: 'article',
259
- filter: (data): data is any => data.subject === Devtools.Echo.Spaces,
253
+ id: 'echo.spaces',
254
+ filter: AppSurface.literal(AppSurface.Article, Devtools.Echo.Spaces),
260
255
  component: () => {
261
256
  const { invokePromise } = useOperationInvoker();
262
257
  const handleSelect = useCallback(
@@ -267,133 +262,148 @@ export default Capability.makeModule(
267
262
  },
268
263
  }),
269
264
  Surface.create({
270
- id: `${meta.id}/echo/space`,
271
- role: 'article',
272
- filter: (data): data is any => data.subject === Devtools.Echo.Space,
265
+ id: 'echo.space',
266
+ filter: AppSurface.literal(AppSurface.Article, Devtools.Echo.Space),
273
267
  component: () => {
274
- const space = useCurrentSpace();
268
+ const space = useActiveSpace();
275
269
  const { invokePromise } = useOperationInvoker();
276
270
  const handleSelect = useCallback(
277
271
  () => invokePromise(LayoutOperation.Open, { subject: [Devtools.Echo.Feeds] }),
278
272
  [invokePromise],
279
273
  );
274
+ if (!space) {
275
+ return null;
276
+ }
277
+
280
278
  return <SpaceInfoPanel space={space} onSelectFeed={handleSelect} onSelectPipeline={handleSelect} />;
281
279
  },
282
280
  }),
283
281
  Surface.create({
284
- id: `${meta.id}/echo/feeds`,
285
- role: 'article',
286
- filter: (data): data is any => data.subject === Devtools.Echo.Feeds,
282
+ id: 'echo.feeds',
283
+ filter: AppSurface.literal(AppSurface.Article, Devtools.Echo.Feeds),
287
284
  component: () => {
288
- const space = useCurrentSpace();
285
+ const space = useActiveSpace();
286
+ if (!space) {
287
+ return null;
288
+ }
289
+
289
290
  return <FeedsPanel space={space} />;
290
291
  },
291
292
  }),
292
293
  Surface.create({
293
- id: `${meta.id}/echo/objects`,
294
- role: 'article',
295
- filter: (data): data is any => data.subject === Devtools.Echo.Objects,
294
+ id: 'echo.objects',
295
+ filter: AppSurface.literal(AppSurface.Article, Devtools.Echo.Objects),
296
296
  component: () => {
297
- const space = useCurrentSpace();
297
+ const space = useActiveSpace();
298
+ if (!space) {
299
+ return null;
300
+ }
301
+
298
302
  return <ObjectsPanel space={space} />;
299
303
  },
300
304
  }),
301
305
  Surface.create({
302
- id: `${meta.id}/echo/schema`,
303
- role: 'article',
304
- filter: (data): data is any => data.subject === Devtools.Echo.Schema,
306
+ id: 'echo.schema',
307
+ filter: AppSurface.literal(AppSurface.Article, Devtools.Echo.Schema),
305
308
  component: () => {
306
- const space = useCurrentSpace();
309
+ const space = useActiveSpace();
310
+ if (!space) {
311
+ return null;
312
+ }
313
+
307
314
  return <SchemaPanel space={space} />;
308
315
  },
309
316
  }),
310
317
  Surface.create({
311
- id: `${meta.id}/echo/automerge`,
312
- role: 'article',
313
- filter: (data): data is any => data.subject === Devtools.Echo.Automerge,
318
+ id: 'echo.automerge',
319
+ filter: AppSurface.literal(AppSurface.Article, Devtools.Echo.Automerge),
314
320
  component: () => {
315
- const space = useCurrentSpace();
321
+ const space = useActiveSpace();
322
+ if (!space) {
323
+ return null;
324
+ }
325
+
316
326
  return <AutomergePanel space={space} />;
317
327
  },
318
328
  }),
319
329
  Surface.create({
320
- id: `${meta.id}/echo/queues`,
321
- role: 'article',
322
- filter: (data): data is any => data.subject === Devtools.Echo.Queues,
330
+ id: 'echo.queues',
331
+ filter: AppSurface.literal(AppSurface.Article, Devtools.Echo.Queues),
323
332
  component: () => <QueuesPanel />,
324
333
  }),
325
334
  Surface.create({
326
- id: `${meta.id}/echo/members`,
327
- role: 'article',
328
- filter: (data): data is any => data.subject === Devtools.Echo.Members,
335
+ id: 'echo.members',
336
+ filter: AppSurface.literal(AppSurface.Article, Devtools.Echo.Members),
329
337
  component: () => {
330
- const space = useCurrentSpace();
338
+ const space = useActiveSpace();
339
+ if (!space) {
340
+ return null;
341
+ }
342
+
331
343
  return <MembersPanel space={space} />;
332
344
  },
333
345
  }),
334
346
  Surface.create({
335
- id: `${meta.id}/echo/metadata`,
336
- role: 'article',
337
- filter: (data): data is any => data.subject === Devtools.Echo.Metadata,
347
+ id: 'echo.metadata',
348
+ filter: AppSurface.literal(AppSurface.Article, Devtools.Echo.Metadata),
338
349
  component: () => <MetadataPanel />,
339
350
  }),
340
351
  Surface.create({
341
- id: `${meta.id}/mesh/signal`,
342
- role: 'article',
343
- filter: (data): data is any => data.subject === Devtools.Mesh.Signal,
352
+ id: 'mesh.signal',
353
+ filter: AppSurface.literal(AppSurface.Article, Devtools.Mesh.Signal),
344
354
  component: () => <SignalPanel />,
345
355
  }),
346
356
  Surface.create({
347
- id: `${meta.id}/mesh/swarm`,
348
- role: 'article',
349
- filter: (data): data is any => data.subject === Devtools.Mesh.Swarm,
357
+ id: 'mesh.swarm',
358
+ filter: AppSurface.literal(AppSurface.Article, Devtools.Mesh.Swarm),
350
359
  component: () => <SwarmPanel />,
351
360
  }),
352
361
  Surface.create({
353
- id: `${meta.id}/mesh/network`,
354
- role: 'article',
355
- filter: (data): data is any => data.subject === Devtools.Mesh.Network,
362
+ id: 'mesh.network',
363
+ filter: AppSurface.literal(AppSurface.Article, Devtools.Mesh.Network),
356
364
  component: () => {
357
- const space = useCurrentSpace();
365
+ const space = useActiveSpace();
366
+ if (!space) {
367
+ return null;
368
+ }
369
+
358
370
  return <NetworkPanel space={space} />;
359
371
  },
360
372
  }),
361
- // TODO(wittjosiah): Remove?
362
- // createSurface({
363
- // id: `${meta.id}/agent/dashboard`,
364
- // role: 'article',
365
- // filter: (data): data is any => data.subject === Devtools.Agent.Dashboard,
366
- // component: () => <DashboardPanel />,
367
- // }),
368
373
  Surface.create({
369
- id: `${meta.id}/edge/dashboard`,
370
- role: 'article',
371
- filter: (data): data is any => data.subject === Devtools.Edge.Dashboard,
374
+ id: 'edge.dashboard',
375
+ filter: AppSurface.literal(AppSurface.Article, Devtools.Edge.Dashboard),
372
376
  component: () => <EdgeDashboardPanel />,
373
377
  }),
374
378
  Surface.create({
375
- id: `${meta.id}/edge/workflows`,
376
- role: 'article',
377
- filter: (data): data is any => data.subject === Devtools.Edge.Workflows,
379
+ id: 'edge.workflows',
380
+ filter: AppSurface.literal(AppSurface.Article, Devtools.Edge.Workflows),
378
381
  component: () => {
379
- const space = useCurrentSpace();
382
+ const space = useActiveSpace();
383
+ if (!space) {
384
+ return null;
385
+ }
386
+
380
387
  return <WorkflowPanel space={space} />;
381
388
  },
382
389
  }),
383
390
  Surface.create({
384
- id: `${meta.id}/edge/traces`,
385
- role: 'article',
386
- filter: (data): data is any => data.subject === Devtools.Edge.Traces,
391
+ id: 'edge.traces',
392
+ filter: AppSurface.literal(AppSurface.Article, Devtools.Edge.Traces),
387
393
  component: () => {
388
- const space = useCurrentSpace();
389
- const queueDxn = space?.properties.invocationTraceQueue?.dxn;
390
- return <InvocationTraceContainer db={space?.db} queueDxn={queueDxn} detailAxis='block' />;
394
+ const space = useActiveSpace();
395
+ if (!space) {
396
+ return null;
397
+ }
398
+
399
+ const feed = space.properties.invocationTraceFeed?.target;
400
+ const feedDXN = feed ? Feed.getQueueDxn(feed) : undefined;
401
+ return <InvocationTraceContainer db={space.db} feedDXN={feedDXN} detailAxis='block' />;
391
402
  },
392
403
  }),
393
404
  Surface.create({
394
- id: `${meta.id}/edge/testing`,
395
- role: 'article',
396
- filter: (data): data is any => data.subject === Devtools.Edge.Testing,
405
+ id: 'edge.testing',
406
+ filter: AppSurface.literal(AppSurface.Article, Devtools.Edge.Testing),
397
407
  component: () => {
398
408
  const { invokePromise } = useOperationInvoker();
399
409
  const onSpaceCreate = useCallback(
@@ -412,9 +422,9 @@ export default Capability.makeModule(
412
422
  await invokePromise(SpaceOperation.AddObject, { target: space.db, object: createResult.data.object });
413
423
  }
414
424
  log.info('script created', { result: createResult });
415
- if (createResult.data?.object?.id) {
425
+ if (createResult.data?.object) {
416
426
  await invokePromise(LayoutOperation.Open, {
417
- subject: [`${space.id}:${createResult.data.object.id}`],
427
+ subject: [getObjectPathFromObject(createResult.data.object)],
418
428
  });
419
429
  }
420
430
  },
@@ -8,14 +8,14 @@ import { Capability } from '@dxos/app-framework';
8
8
  import { AppCapabilities } from '@dxos/app-toolkit';
9
9
  import { createKvsStore } from '@dxos/effect';
10
10
 
11
- import { meta } from '../../meta';
12
- import { DebugCapabilities, DebugSettingsSchema } from '../../types';
11
+ import { meta } from '#meta';
12
+ import { DebugCapabilities, Settings } from '#types';
13
13
 
14
14
  export default Capability.makeModule(() =>
15
15
  Effect.sync(() => {
16
16
  const settingsAtom = createKvsStore({
17
17
  key: meta.id,
18
- schema: DebugSettingsSchema,
18
+ schema: Settings.Settings,
19
19
  defaultValue: () => ({}),
20
20
  });
21
21
 
@@ -23,7 +23,7 @@ export default Capability.makeModule(() =>
23
23
  Capability.contributes(DebugCapabilities.Settings, settingsAtom),
24
24
  Capability.contributes(AppCapabilities.Settings, {
25
25
  prefix: meta.id,
26
- schema: DebugSettingsSchema,
26
+ schema: Settings.Settings,
27
27
  atom: settingsAtom,
28
28
  }),
29
29
  ];
@@ -0,0 +1,36 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+
7
+ import { withClientProvider } from '@dxos/react-client/testing';
8
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
9
+
10
+ import { translations } from '#translations';
11
+
12
+ import { DebugSettings } from './DebugSettings';
13
+
14
+ const meta = {
15
+ title: 'plugins/plugin-debug/components/DebugSettings',
16
+ component: DebugSettings,
17
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' }), withClientProvider({ createIdentity: true })],
18
+ tags: ['settings'],
19
+ parameters: {
20
+ layout: 'fullscreen',
21
+ translations,
22
+ },
23
+ } satisfies Meta<typeof DebugSettings>;
24
+
25
+ export default meta;
26
+
27
+ type Story = StoryObj<typeof meta>;
28
+
29
+ export const Default: Story = {
30
+ args: {
31
+ settings: {
32
+ wireframe: false,
33
+ },
34
+ logStore: { export: async () => '' } as any,
35
+ },
36
+ };