@dxos/plugin-debug 0.8.4-main.3eb6e50203 → 0.8.4-main.3fbcb4aa9b

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