@dxos/plugin-devtools 0.12.0-next-2800d0376abcc62d5544afdd744b16b2b960434e → 0.13.0

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 (144) hide show
  1. package/PLUGIN.mdl +144 -57
  2. package/dist/lib/Devtools.mjs +9 -1
  3. package/dist/lib/Devtools.mjs.map +1 -1
  4. package/dist/lib/capabilities.browser.mjs +45 -0
  5. package/dist/lib/capabilities.browser.mjs.map +1 -0
  6. package/dist/lib/capabilities.mjs +9 -7
  7. package/dist/lib/capabilities.mjs.map +1 -1
  8. package/dist/lib/capabilities.node.mjs +7 -3
  9. package/dist/lib/capabilities.node.mjs.map +1 -1
  10. package/dist/lib/capabilities.tauri.mjs +45 -0
  11. package/dist/lib/capabilities.tauri.mjs.map +1 -0
  12. package/dist/lib/capabilities.workerd.mjs +2 -2
  13. package/dist/lib/capabilities.workerd.mjs.map +1 -1
  14. package/dist/lib/{chunk-CliPanel.mjs → chunk-CliArticle.mjs} +28 -24
  15. package/dist/lib/chunk-CliArticle.mjs.map +1 -0
  16. package/dist/lib/chunk-DebugGraph.mjs +12 -8
  17. package/dist/lib/chunk-DebugGraph.mjs.map +1 -1
  18. package/dist/lib/chunk-DevtoolsCards.mjs +108 -0
  19. package/dist/lib/chunk-DevtoolsCards.mjs.map +1 -0
  20. package/dist/lib/chunk-DevtoolsOverviewContainer.mjs +59 -22
  21. package/dist/lib/chunk-DevtoolsOverviewContainer.mjs.map +1 -1
  22. package/dist/lib/chunk-GithubPanel.mjs +13 -10
  23. package/dist/lib/chunk-GithubPanel.mjs.map +1 -1
  24. package/dist/lib/chunk-PLUGIN.mjs +6 -0
  25. package/dist/lib/chunk-PLUGIN.mjs.map +1 -0
  26. package/dist/lib/{chunk-RegistryPanel.mjs → chunk-RegistryArticle.mjs} +26 -25
  27. package/dist/lib/chunk-RegistryArticle.mjs.map +1 -0
  28. package/dist/lib/chunk-ToolsExplorerContainer.mjs +22 -0
  29. package/dist/lib/chunk-ToolsExplorerContainer.mjs.map +1 -0
  30. package/dist/lib/chunk-app-graph-builder.mjs +323 -312
  31. package/dist/lib/chunk-app-graph-builder.mjs.map +1 -1
  32. package/dist/lib/chunk-react-context.mjs +1 -1
  33. package/dist/lib/chunk-react-context.mjs.map +1 -1
  34. package/dist/lib/chunk-react-surface.mjs +244 -92
  35. package/dist/lib/chunk-react-surface.mjs.map +1 -1
  36. package/dist/lib/containers.mjs +4 -3
  37. package/dist/lib/containers.mjs.map +1 -1
  38. package/dist/lib/index.mjs +0 -1
  39. package/dist/lib/meta.mjs +2 -2
  40. package/dist/lib/meta.mjs.map +1 -1
  41. package/dist/lib/translations.mjs +55 -49
  42. package/dist/lib/translations.mjs.map +1 -1
  43. package/dist/types/src/capabilities/DevtoolsCards.d.ts +28 -0
  44. package/dist/types/src/capabilities/DevtoolsCards.d.ts.map +1 -0
  45. package/dist/types/src/capabilities/DevtoolsSurfaces.d.ts +19 -6
  46. package/dist/types/src/capabilities/DevtoolsSurfaces.d.ts.map +1 -1
  47. package/dist/types/src/capabilities/app-graph-builder.d.ts +19 -0
  48. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  49. package/dist/types/src/capabilities/app-graph-builder.test.d.ts +2 -0
  50. package/dist/types/src/capabilities/app-graph-builder.test.d.ts.map +1 -0
  51. package/dist/types/src/capabilities/gen/browser.d.ts +8 -0
  52. package/dist/types/src/capabilities/gen/browser.d.ts.map +1 -0
  53. package/dist/types/src/capabilities/gen/tauri.d.ts +8 -0
  54. package/dist/types/src/capabilities/gen/tauri.d.ts.map +1 -0
  55. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  56. package/dist/types/src/containers/CliArticle/CliArticle.d.ts +8 -0
  57. package/dist/types/src/containers/CliArticle/CliArticle.d.ts.map +1 -0
  58. package/dist/types/src/containers/{CliPanel/CliPanel.stories.d.ts → CliArticle/CliArticle.stories.d.ts} +34 -4
  59. package/dist/types/src/containers/CliArticle/CliArticle.stories.d.ts.map +1 -0
  60. package/dist/types/src/containers/CliArticle/index.d.ts +2 -0
  61. package/dist/types/src/containers/CliArticle/index.d.ts.map +1 -0
  62. package/dist/types/src/containers/{CliPanel → CliArticle}/useCliApp.d.ts +1 -1
  63. package/dist/types/src/containers/CliArticle/useCliApp.d.ts.map +1 -0
  64. package/dist/types/src/containers/DebugGraph/DebugGraph.d.ts +2 -1
  65. package/dist/types/src/containers/DebugGraph/DebugGraph.d.ts.map +1 -1
  66. package/dist/types/src/containers/DebugGraph/index.d.ts +1 -1
  67. package/dist/types/src/containers/DebugGraph/index.d.ts.map +1 -1
  68. package/dist/types/src/containers/DevtoolsOverviewContainer/DevtoolsOverviewContainer.d.ts.map +1 -1
  69. package/dist/types/src/containers/DevtoolsOverviewContainer/index.d.ts +1 -1
  70. package/dist/types/src/containers/DevtoolsOverviewContainer/index.d.ts.map +1 -1
  71. package/dist/types/src/containers/GithubPanel/GithubComponent.d.ts.map +1 -1
  72. package/dist/types/src/containers/GithubPanel/GithubComponent.stories.d.ts +31 -1
  73. package/dist/types/src/containers/GithubPanel/GithubComponent.stories.d.ts.map +1 -1
  74. package/dist/types/src/containers/GithubPanel/index.d.ts +1 -1
  75. package/dist/types/src/containers/GithubPanel/index.d.ts.map +1 -1
  76. package/dist/types/src/containers/RegistryArticle/RegistryArticle.d.ts +8 -0
  77. package/dist/types/src/containers/RegistryArticle/RegistryArticle.d.ts.map +1 -0
  78. package/dist/types/src/containers/RegistryArticle/index.d.ts +2 -0
  79. package/dist/types/src/containers/RegistryArticle/index.d.ts.map +1 -0
  80. package/dist/types/src/containers/ToolsExplorerContainer/ToolsExplorerContainer.d.ts +8 -0
  81. package/dist/types/src/containers/ToolsExplorerContainer/ToolsExplorerContainer.d.ts.map +1 -0
  82. package/dist/types/src/containers/ToolsExplorerContainer/index.d.ts +2 -0
  83. package/dist/types/src/containers/ToolsExplorerContainer/index.d.ts.map +1 -0
  84. package/dist/types/src/containers/index.d.ts +3 -2
  85. package/dist/types/src/containers/index.d.ts.map +1 -1
  86. package/dist/types/src/index.d.ts +1 -2
  87. package/dist/types/src/index.d.ts.map +1 -1
  88. package/dist/types/src/translations.d.ts +31 -1
  89. package/dist/types/src/translations.d.ts.map +1 -1
  90. package/dist/types/src/types/Devtools.d.ts +6 -0
  91. package/dist/types/src/types/Devtools.d.ts.map +1 -1
  92. package/dist/types/src/types/index.d.ts +2 -2
  93. package/dist/types/src/types/index.d.ts.map +1 -1
  94. package/dist/types/tsconfig.tsbuildinfo +1 -1
  95. package/dx.config.ts +2 -2
  96. package/package.json +43 -39
  97. package/src/capabilities/DevtoolsCards.tsx +140 -0
  98. package/src/capabilities/DevtoolsSurfaces.tsx +32 -38
  99. package/src/capabilities/app-graph-builder.test.ts +75 -0
  100. package/src/capabilities/app-graph-builder.ts +324 -313
  101. package/src/capabilities/gen/browser.ts +61 -0
  102. package/src/capabilities/gen/node.ts +4 -4
  103. package/src/capabilities/gen/tauri.ts +61 -0
  104. package/src/capabilities/gen/workerd.ts +2 -2
  105. package/src/capabilities/index.ts +7 -7
  106. package/src/capabilities/react-context.tsx +1 -1
  107. package/src/capabilities/react-surface.ts +223 -85
  108. package/src/containers/{CliPanel/CliPanel.stories.tsx → CliArticle/CliArticle.stories.tsx} +9 -10
  109. package/src/containers/{CliPanel/CliPanel.tsx → CliArticle/CliArticle.tsx} +7 -7
  110. package/src/containers/CliArticle/index.ts +5 -0
  111. package/src/containers/{CliPanel → CliArticle}/useCliApp.ts +17 -12
  112. package/src/containers/DebugGraph/DebugGraph.tsx +7 -6
  113. package/src/containers/DebugGraph/index.ts +1 -1
  114. package/src/containers/DevtoolsOverviewContainer/DevtoolsOverviewContainer.tsx +72 -32
  115. package/src/containers/DevtoolsOverviewContainer/index.ts +1 -1
  116. package/src/containers/GithubPanel/GithubComponent.stories.tsx +2 -2
  117. package/src/containers/GithubPanel/GithubComponent.tsx +14 -11
  118. package/src/containers/GithubPanel/GithubPanel.tsx +2 -2
  119. package/src/containers/GithubPanel/index.ts +1 -1
  120. package/src/containers/{RegistryPanel/RegistryPanel.tsx → RegistryArticle/RegistryArticle.tsx} +11 -10
  121. package/src/containers/RegistryArticle/index.ts +5 -0
  122. package/src/containers/ToolsExplorerContainer/ToolsExplorerContainer.tsx +26 -0
  123. package/src/containers/ToolsExplorerContainer/index.ts +5 -0
  124. package/src/containers/index.ts +6 -5
  125. package/src/index.ts +1 -2
  126. package/src/meta.ts +1 -1
  127. package/src/plugin.test.ts +2 -2
  128. package/src/translations.ts +7 -3
  129. package/src/types/Devtools.ts +10 -0
  130. package/src/types/index.ts +2 -2
  131. package/dist/lib/chunk-CliPanel.mjs.map +0 -1
  132. package/dist/lib/chunk-RegistryPanel.mjs.map +0 -1
  133. package/dist/types/src/containers/CliPanel/CliPanel.d.ts +0 -6
  134. package/dist/types/src/containers/CliPanel/CliPanel.d.ts.map +0 -1
  135. package/dist/types/src/containers/CliPanel/CliPanel.stories.d.ts.map +0 -1
  136. package/dist/types/src/containers/CliPanel/index.d.ts +0 -2
  137. package/dist/types/src/containers/CliPanel/index.d.ts.map +0 -1
  138. package/dist/types/src/containers/CliPanel/useCliApp.d.ts.map +0 -1
  139. package/dist/types/src/containers/RegistryPanel/RegistryPanel.d.ts +0 -6
  140. package/dist/types/src/containers/RegistryPanel/RegistryPanel.d.ts.map +0 -1
  141. package/dist/types/src/containers/RegistryPanel/index.d.ts +0 -2
  142. package/dist/types/src/containers/RegistryPanel/index.d.ts.map +0 -1
  143. package/src/containers/CliPanel/index.ts +0 -5
  144. package/src/containers/RegistryPanel/index.ts +0 -5
@@ -0,0 +1,61 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ // GENERATED by dx-plugin — do not edit. Sliced from ../index.ts for the 'browser' condition.
6
+
7
+ import { create } from '@bufbuild/protobuf';
8
+ import * as Effect from 'effect/Effect';
9
+
10
+ import * as Capability from '@dxos/app-framework/Capability';
11
+ import * as AppCapabilities from '@dxos/app-toolkit/AppCapabilities';
12
+ import * as AppCapability from '@dxos/app-toolkit/AppCapability';
13
+ import { Runtime_Client_StorageSchema } from '@dxos/protocols/buf/dxos/config_pb';
14
+ import { type Client } from '@dxos/react-client';
15
+
16
+ import { meta } from '#meta';
17
+ import { translations } from '#translations';
18
+
19
+ import pluginSpec from '../../../PLUGIN.mdl?raw';
20
+
21
+ const setupDevtools = () => {
22
+ (globalThis as any).composer ??= {};
23
+
24
+ // Used to test how composer handles breaking protocol changes.
25
+ (globalThis as any).composer.changeStorageVersionInMetadata = async (version: number) => {
26
+ const { changeStorageVersionInMetadata } = await import('@dxos/client-services/testing');
27
+ const { Storage } = await import('@dxos/client-services');
28
+ const client: Client = (window as any).dxos.client;
29
+ const config = client.config;
30
+ await client.destroy();
31
+ const { storage } = Storage.createStorageObjects(
32
+ config.values?.runtime?.client?.storage ?? create(Runtime_Client_StorageSchema, {}),
33
+ );
34
+ await changeStorageVersionInMetadata(storage, version);
35
+ location.pathname = '/';
36
+ };
37
+ };
38
+
39
+ export const AppGraphBuilder = AppCapability.appGraphBuilder(() => import('../app-graph-builder.ts'), {
40
+ requires: [AppCapabilities.AppGraph],
41
+ environments: ['browser', 'node', 'tauri'],
42
+ });
43
+
44
+ export const ReactContext = AppCapability.reactContext(() => import('../react-context.tsx'));
45
+
46
+ export const ReactSurface = AppCapability.surface(() => import('../react-surface.ts'), {
47
+ roles: ['org.dxos.plugin.debug.surface.page', 'org.dxos.role.deckCompanion.devtoolsOverview'],
48
+ });
49
+
50
+ export const SetupDevtools = Capability.inlineModule('setup-devtools', { provides: [] }, () =>
51
+ Effect.sync(() => setupDevtools()),
52
+ );
53
+
54
+ export const Translations = AppCapability.translations(translations);
55
+
56
+ export const PluginAsset = AppCapability.pluginAsset({
57
+ pluginId: meta.profile.key,
58
+ path: 'PLUGIN.mdl',
59
+ content: pluginSpec,
60
+ mimeType: 'application/x-mdl',
61
+ });
@@ -21,11 +21,11 @@ const setupDevtools = () => {
21
21
  // Used to test how composer handles breaking protocol changes.
22
22
  (globalThis as any).composer.changeStorageVersionInMetadata = async (version: number) => {
23
23
  const { changeStorageVersionInMetadata } = await import('@dxos/client-services/testing');
24
- const { createStorageObjects } = await import('@dxos/client-services');
24
+ const { Storage } = await import('@dxos/client-services');
25
25
  const client: Client = (window as any).dxos.client;
26
26
  const config = client.config;
27
27
  await client.destroy();
28
- const { storage } = createStorageObjects(
28
+ const { storage } = Storage.createStorageObjects(
29
29
  config.values?.runtime?.client?.storage ?? create(Runtime_Client_StorageSchema, {}),
30
30
  );
31
31
  await changeStorageVersionInMetadata(storage, version);
@@ -33,9 +33,9 @@ const setupDevtools = () => {
33
33
  };
34
34
  };
35
35
 
36
- export const AppGraphBuilder = AppCapability.appGraphBuilder(() => import('../app-graph-builder'), {
36
+ export const AppGraphBuilder = AppCapability.appGraphBuilder(() => import('../app-graph-builder.ts'), {
37
37
  requires: [AppCapabilities.AppGraph],
38
- environments: ['node'],
38
+ environments: ['browser', 'node', 'tauri'],
39
39
  });
40
40
 
41
41
  export const SetupDevtools = Capability.inlineModule('setup-devtools', { provides: [] }, () =>
@@ -0,0 +1,61 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ // GENERATED by dx-plugin — do not edit. Sliced from ../index.ts for the 'tauri' condition.
6
+
7
+ import { create } from '@bufbuild/protobuf';
8
+ import * as Effect from 'effect/Effect';
9
+
10
+ import * as Capability from '@dxos/app-framework/Capability';
11
+ import * as AppCapabilities from '@dxos/app-toolkit/AppCapabilities';
12
+ import * as AppCapability from '@dxos/app-toolkit/AppCapability';
13
+ import { Runtime_Client_StorageSchema } from '@dxos/protocols/buf/dxos/config_pb';
14
+ import { type Client } from '@dxos/react-client';
15
+
16
+ import { meta } from '#meta';
17
+ import { translations } from '#translations';
18
+
19
+ import pluginSpec from '../../../PLUGIN.mdl?raw';
20
+
21
+ const setupDevtools = () => {
22
+ (globalThis as any).composer ??= {};
23
+
24
+ // Used to test how composer handles breaking protocol changes.
25
+ (globalThis as any).composer.changeStorageVersionInMetadata = async (version: number) => {
26
+ const { changeStorageVersionInMetadata } = await import('@dxos/client-services/testing');
27
+ const { Storage } = await import('@dxos/client-services');
28
+ const client: Client = (window as any).dxos.client;
29
+ const config = client.config;
30
+ await client.destroy();
31
+ const { storage } = Storage.createStorageObjects(
32
+ config.values?.runtime?.client?.storage ?? create(Runtime_Client_StorageSchema, {}),
33
+ );
34
+ await changeStorageVersionInMetadata(storage, version);
35
+ location.pathname = '/';
36
+ };
37
+ };
38
+
39
+ export const AppGraphBuilder = AppCapability.appGraphBuilder(() => import('../app-graph-builder.ts'), {
40
+ requires: [AppCapabilities.AppGraph],
41
+ environments: ['browser', 'node', 'tauri'],
42
+ });
43
+
44
+ export const ReactContext = AppCapability.reactContext(() => import('../react-context.tsx'));
45
+
46
+ export const ReactSurface = AppCapability.surface(() => import('../react-surface.ts'), {
47
+ roles: ['org.dxos.plugin.debug.surface.page', 'org.dxos.role.deckCompanion.devtoolsOverview'],
48
+ });
49
+
50
+ export const SetupDevtools = Capability.inlineModule('setup-devtools', { provides: [] }, () =>
51
+ Effect.sync(() => setupDevtools()),
52
+ );
53
+
54
+ export const Translations = AppCapability.translations(translations);
55
+
56
+ export const PluginAsset = AppCapability.pluginAsset({
57
+ pluginId: meta.profile.key,
58
+ path: 'PLUGIN.mdl',
59
+ content: pluginSpec,
60
+ mimeType: 'application/x-mdl',
61
+ });
@@ -20,11 +20,11 @@ const setupDevtools = () => {
20
20
  // Used to test how composer handles breaking protocol changes.
21
21
  (globalThis as any).composer.changeStorageVersionInMetadata = async (version: number) => {
22
22
  const { changeStorageVersionInMetadata } = await import('@dxos/client-services/testing');
23
- const { createStorageObjects } = await import('@dxos/client-services');
23
+ const { Storage } = await import('@dxos/client-services');
24
24
  const client: Client = (window as any).dxos.client;
25
25
  const config = client.config;
26
26
  await client.destroy();
27
- const { storage } = createStorageObjects(
27
+ const { storage } = Storage.createStorageObjects(
28
28
  config.values?.runtime?.client?.storage ?? create(Runtime_Client_StorageSchema, {}),
29
29
  );
30
30
  await changeStorageVersionInMetadata(storage, version);
@@ -17,13 +17,13 @@ import { translations } from '#translations';
17
17
  // eslint-disable-next-line import/no-relative-packages
18
18
  import pluginSpec from '../../PLUGIN.mdl?raw';
19
19
 
20
- export const AppGraphBuilder = AppCapability.appGraphBuilder(() => import('./app-graph-builder'), {
20
+ export const AppGraphBuilder = AppCapability.appGraphBuilder(() => import('./app-graph-builder.ts'), {
21
21
  requires: [AppCapabilities.AppGraph],
22
- environments: ['node'],
22
+ environments: ['browser', 'node', 'tauri'],
23
23
  });
24
- export const ReactContext = AppCapability.reactContext(() => import('./react-context'));
25
- export const ReactSurface = AppCapability.surface(() => import('./react-surface'), {
26
- roles: ['org.dxos.role.article', 'org.dxos.role.deckCompanion.devtoolsOverview'],
24
+ export const ReactContext = AppCapability.reactContext(() => import('./react-context.tsx'));
25
+ export const ReactSurface = AppCapability.surface(() => import('./react-surface.ts'), {
26
+ roles: ['org.dxos.plugin.debug.surface.page', 'org.dxos.role.deckCompanion.devtoolsOverview'],
27
27
  });
28
28
  export const SetupDevtools = Capability.inlineModule('setup-devtools', { provides: [] }, () =>
29
29
  Effect.sync(() => setupDevtools()),
@@ -42,11 +42,11 @@ const setupDevtools = () => {
42
42
  // Used to test how composer handles breaking protocol changes.
43
43
  (globalThis as any).composer.changeStorageVersionInMetadata = async (version: number) => {
44
44
  const { changeStorageVersionInMetadata } = await import('@dxos/client-services/testing');
45
- const { createStorageObjects } = await import('@dxos/client-services');
45
+ const { Storage } = await import('@dxos/client-services');
46
46
  const client: Client = (window as any).dxos.client;
47
47
  const config = client.config;
48
48
  await client.destroy();
49
- const { storage } = createStorageObjects(
49
+ const { storage } = Storage.createStorageObjects(
50
50
  config.values?.runtime?.client?.storage ?? create(Runtime_Client_StorageSchema, {}),
51
51
  );
52
52
  await changeStorageVersionInMetadata(storage, version);
@@ -7,7 +7,7 @@ import React from 'react';
7
7
 
8
8
  import * as Capabilities from '@dxos/app-framework/Capabilities';
9
9
  import * as Capability from '@dxos/app-framework/Capability';
10
- import { Surface } from '@dxos/app-framework/ui';
10
+ import * as Surface from '@dxos/app-framework/Surface';
11
11
  import { DevtoolsContextProvider } from '@dxos/devtools';
12
12
 
13
13
  import { meta } from '#meta';
@@ -6,47 +6,67 @@ import * as Effect from 'effect/Effect';
6
6
 
7
7
  import * as Capabilities from '@dxos/app-framework/Capabilities';
8
8
  import * as Capability from '@dxos/app-framework/Capability';
9
- import { Surface } from '@dxos/app-framework/ui';
9
+ import * as Surface from '@dxos/app-framework/Surface';
10
10
  import type * as AppGraph from '@dxos/app-graph/AppGraph';
11
- import { AppSurface } from '@dxos/app-toolkit/ui';
12
- import { EDGE_SERVICE_DEFAULTS, EdgeServiceName } from '@dxos/config';
11
+ import * as AppSurface from '@dxos/app-toolkit/AppSurface';
13
12
  import {
14
- AutomergePanel,
15
- ConfigPanel,
16
- CredentialsPanel,
17
- DeviceListPanel,
18
- DiagnosticsPanel,
19
- EdgeDashboardPanel,
20
- FeedsPanel,
21
- IdentityPanel,
22
- KeyringPanel,
23
- LoggingPanel,
24
- MembersPanel,
25
- MetadataPanel,
26
- NetworkPanel,
27
- ObjectsPanel,
28
- QueuesPanel,
29
- SchemaPanel,
30
- SignalPanel,
31
- SqlitePanel,
32
- StoragePanel,
33
- SwarmPanel,
34
- WorkflowPanel,
13
+ AutomergeArticle,
14
+ ConfigArticle,
15
+ CredentialsArticle,
16
+ DatabaseCard,
17
+ DeviceListArticle,
18
+ DiagnosticsArticle,
19
+ EdgeDashboardArticle,
20
+ FeedsArticle,
21
+ IdentityArticle,
22
+ KeyringArticle,
23
+ LoggingArticle,
24
+ MembersArticle,
25
+ MemoryCard,
26
+ MetadataArticle,
27
+ NetworkArticle,
28
+ NetworkCard,
29
+ ObjectsArticle,
30
+ PerformanceCard,
31
+ QueriesArticle,
32
+ QueuesArticle,
33
+ ReplicatorCard,
34
+ ReplicatorMessagesCard,
35
+ SchemaArticle,
36
+ SignalArticle,
37
+ SqliteArticle,
38
+ StorageArticle,
39
+ SwarmArticle,
40
+ TimeSeriesCard,
41
+ WorkflowArticle,
35
42
  } from '@dxos/devtools';
36
- import { ToolsExplorer } from '@dxos/react-ui-introspect';
43
+ import * as DebugSurface from '@dxos/plugin-debug/DebugSurface';
37
44
 
38
- import { CliPanel, DebugGraph, DevtoolsOverviewContainer, RegistryPanel } from '#containers';
45
+ import {
46
+ CliArticle,
47
+ DebugGraph,
48
+ DevtoolsOverviewContainer,
49
+ RegistryArticle,
50
+ ToolsExplorerContainer,
51
+ } from '#containers';
39
52
  import { Devtools } from '#types';
40
53
 
54
+ import {
55
+ EdgeCardSurface,
56
+ IndexerCardSurface,
57
+ QueriesCardSurface,
58
+ SurfaceProfilerCardSurface,
59
+ SwarmTraceCardSurface,
60
+ SyncCardSurface,
61
+ devtoolsCard,
62
+ } from './DevtoolsCards.tsx';
41
63
  import {
42
64
  ActiveSpacePanel,
43
65
  EdgeTestingSurface,
44
66
  EdgeTracesSurface,
45
67
  SpaceInfoSurface,
46
68
  SpaceListSurface,
47
- } from './DevtoolsSurfaces';
48
-
49
- const MCP_SERVER_URL = EDGE_SERVICE_DEFAULTS[EdgeServiceName.Introspect];
69
+ } from './DevtoolsSurfaces.tsx';
50
70
 
51
71
  type GraphDebug = {
52
72
  graph: AppGraph.Graph;
@@ -73,25 +93,27 @@ export default Capability.makeModule(
73
93
  return Capability.contribute(Capabilities.ReactSurface, [
74
94
  Surface.create({
75
95
  id: 'appGraph',
76
- filter: AppSurface.subject(AppSurface.Article, isGraphDebug),
96
+ filter: AppSurface.subject(DebugSurface.Page, isGraphDebug),
77
97
  component: DebugGraph,
78
- props: ({ data: { subject } }) => ({ graph: subject.graph, root: subject.root }),
98
+ props: ({ role, data: { subject } }) => ({ role, graph: subject.graph, root: subject.root }),
79
99
  }),
80
100
  Surface.create({
81
101
  id: 'toolsExplorer',
82
- filter: AppSurface.literal(AppSurface.Article, Devtools.ToolsExplorer),
83
- component: ToolsExplorer,
84
- props: () => ({ serverUrl: MCP_SERVER_URL }),
102
+ filter: AppSurface.literal(DebugSurface.Page, Devtools.ToolsExplorer),
103
+ component: ToolsExplorerContainer,
104
+ props: ({ role }) => ({ role }),
85
105
  }),
86
106
  Surface.create({
87
107
  id: 'cli',
88
- filter: AppSurface.literal(AppSurface.Article, Devtools.Cli),
89
- component: CliPanel,
108
+ filter: AppSurface.literal(DebugSurface.Page, Devtools.Cli),
109
+ component: CliArticle,
110
+ props: ({ role }) => ({ role }),
90
111
  }),
91
112
  Surface.create({
92
113
  id: 'registry',
93
- filter: AppSurface.literal(AppSurface.Article, Devtools.Echo.Registry),
94
- component: RegistryPanel,
114
+ filter: AppSurface.literal(DebugSurface.Page, Devtools.Echo.Registry),
115
+ component: RegistryArticle,
116
+ props: ({ role }) => ({ role }),
95
117
  }),
96
118
  Surface.create({
97
119
  id: 'devtoolsOverview',
@@ -99,143 +121,259 @@ export default Capability.makeModule(
99
121
  component: DevtoolsOverviewContainer,
100
122
  }),
101
123
 
124
+ //
125
+ // Stats cards, in stack order.
126
+ //
127
+
128
+ Surface.create({
129
+ id: 'card.memory',
130
+ filter: devtoolsCard,
131
+ position: 0,
132
+ component: MemoryCard,
133
+ props: ({ data: { stats } }) => ({ memory: stats.memory }),
134
+ }),
135
+ Surface.create({
136
+ id: 'card.network',
137
+ filter: devtoolsCard,
138
+ position: 1,
139
+ component: NetworkCard,
140
+ props: ({ data: { stats } }) => ({ network: stats.network }),
141
+ }),
142
+ Surface.create({
143
+ id: 'card.edge',
144
+ filter: devtoolsCard,
145
+ position: 2,
146
+ component: EdgeCardSurface,
147
+ props: ({ data: { stats } }) => ({ stats }),
148
+ }),
149
+ Surface.create({
150
+ id: 'card.performance',
151
+ filter: devtoolsCard,
152
+ position: 3,
153
+ component: PerformanceCard,
154
+ props: ({ data: { stats } }) => ({ entries: stats.performanceEntries }),
155
+ }),
156
+ Surface.create({
157
+ id: 'card.swarmTrace',
158
+ filter: devtoolsCard,
159
+ position: 4,
160
+ component: SwarmTraceCardSurface,
161
+ }),
162
+ Surface.create({
163
+ id: 'card.surfaceProfiler',
164
+ filter: devtoolsCard,
165
+ position: 5,
166
+ component: SurfaceProfilerCardSurface,
167
+ props: ({ data: { surfaceProfilerStats, onClearSurfaceProfiler } }) => ({
168
+ surfaceProfilerStats,
169
+ onClearSurfaceProfiler,
170
+ }),
171
+ }),
172
+ Surface.create({
173
+ id: 'card.database',
174
+ filter: devtoolsCard,
175
+ position: 6,
176
+ component: DatabaseCard,
177
+ props: ({ data: { stats } }) => ({ database: stats.database }),
178
+ }),
179
+ Surface.create({
180
+ id: 'card.replicator',
181
+ filter: devtoolsCard,
182
+ position: 7,
183
+ component: ReplicatorCard,
184
+ props: ({ data: { stats } }) => ({ database: stats.database }),
185
+ }),
186
+ Surface.create({
187
+ id: 'card.replicatorMessages',
188
+ filter: devtoolsCard,
189
+ position: 8,
190
+ component: ReplicatorMessagesCard,
191
+ props: ({ data: { stats } }) => ({ database: stats.database }),
192
+ }),
193
+ Surface.create({
194
+ id: 'card.queries',
195
+ filter: devtoolsCard,
196
+ position: 9,
197
+ component: QueriesCardSurface,
198
+ }),
199
+ Surface.create({
200
+ id: 'card.sync',
201
+ filter: devtoolsCard,
202
+ position: 11,
203
+ component: SyncCardSurface,
204
+ }),
205
+ Surface.create({
206
+ id: 'card.indexer',
207
+ filter: devtoolsCard,
208
+ position: 12,
209
+ component: IndexerCardSurface,
210
+ }),
211
+ Surface.create({
212
+ id: 'card.timeSeries',
213
+ filter: devtoolsCard,
214
+ position: 13,
215
+ component: TimeSeriesCard,
216
+ }),
217
+
102
218
  //
103
219
  // Devtools
104
220
  //
105
221
 
106
222
  Surface.create({
107
223
  id: 'client.config',
108
- filter: AppSurface.literal(AppSurface.Article, Devtools.Client.Config),
109
- component: ConfigPanel,
110
- props: () => ({ vaultSelector: false }),
224
+ filter: AppSurface.literal(DebugSurface.Page, Devtools.Client.Config),
225
+ component: ConfigArticle,
226
+ props: ({ role }) => ({ role, vaultSelector: false }),
111
227
  }),
112
228
  Surface.create({
113
229
  id: 'client.storage',
114
- filter: AppSurface.literal(AppSurface.Article, Devtools.Client.Storage),
115
- component: StoragePanel,
230
+ filter: AppSurface.literal(DebugSurface.Page, Devtools.Client.Storage),
231
+ component: StorageArticle,
232
+ props: ({ role }) => ({ role }),
116
233
  }),
117
234
  Surface.create({
118
235
  id: 'client.sqlite',
119
- filter: AppSurface.literal(AppSurface.Article, Devtools.Client.Sqlite),
120
- component: SqlitePanel,
236
+ filter: AppSurface.literal(DebugSurface.Page, Devtools.Client.Sqlite),
237
+ component: SqliteArticle,
238
+ props: ({ role }) => ({ role }),
121
239
  }),
122
240
  Surface.create({
123
241
  id: 'client.logs',
124
- filter: AppSurface.literal(AppSurface.Article, Devtools.Client.Logs),
125
- component: LoggingPanel,
242
+ filter: AppSurface.literal(DebugSurface.Page, Devtools.Client.Logs),
243
+ component: LoggingArticle,
244
+ props: ({ role }) => ({ role }),
126
245
  }),
127
246
  Surface.create({
128
247
  id: 'client.diagnostics',
129
- filter: AppSurface.literal(AppSurface.Article, Devtools.Client.Diagnostics),
130
- component: DiagnosticsPanel,
248
+ filter: AppSurface.literal(DebugSurface.Page, Devtools.Client.Diagnostics),
249
+ component: DiagnosticsArticle,
250
+ props: ({ role }) => ({ role }),
131
251
  }),
132
252
  Surface.create({
133
253
  id: 'halo.identity',
134
- filter: AppSurface.literal(AppSurface.Article, Devtools.Halo.Identity),
135
- component: IdentityPanel,
254
+ filter: AppSurface.literal(DebugSurface.Page, Devtools.Halo.Identity),
255
+ component: IdentityArticle,
256
+ props: ({ role }) => ({ role }),
136
257
  }),
137
258
  Surface.create({
138
259
  id: 'halo.devices',
139
- filter: AppSurface.literal(AppSurface.Article, Devtools.Halo.Devices),
140
- component: DeviceListPanel,
260
+ filter: AppSurface.literal(DebugSurface.Page, Devtools.Halo.Devices),
261
+ component: DeviceListArticle,
262
+ props: ({ role }) => ({ role }),
141
263
  }),
142
264
  Surface.create({
143
265
  id: 'halo.keyring',
144
- filter: AppSurface.literal(AppSurface.Article, Devtools.Halo.Keyring),
145
- component: KeyringPanel,
266
+ filter: AppSurface.literal(DebugSurface.Page, Devtools.Halo.Keyring),
267
+ component: KeyringArticle,
268
+ props: ({ role }) => ({ role }),
146
269
  }),
147
270
  Surface.create({
148
271
  id: 'halo.credentials',
149
- filter: AppSurface.literal(AppSurface.Article, Devtools.Halo.Credentials),
272
+ filter: AppSurface.literal(DebugSurface.Page, Devtools.Halo.Credentials),
150
273
  component: ActiveSpacePanel,
151
- props: () => ({ Panel: CredentialsPanel }),
274
+ props: ({ role }) => ({ role, Panel: CredentialsArticle }),
152
275
  }),
153
276
  Surface.create({
154
277
  id: 'echo.spaces',
155
- filter: AppSurface.literal(AppSurface.Article, Devtools.Echo.Spaces),
278
+ filter: AppSurface.literal(DebugSurface.Page, Devtools.Echo.Spaces),
156
279
  component: SpaceListSurface,
280
+ props: ({ role, data: { onNavigate } }) => ({ role, onNavigate }),
157
281
  }),
158
282
  Surface.create({
159
283
  id: 'echo.space',
160
- filter: AppSurface.literal(AppSurface.Article, Devtools.Echo.Space),
284
+ filter: AppSurface.literal(DebugSurface.Page, Devtools.Echo.Space),
161
285
  component: SpaceInfoSurface,
286
+ props: ({ role, data: { onNavigate } }) => ({ role, onNavigate }),
162
287
  }),
163
288
  Surface.create({
164
289
  id: 'echo.feeds',
165
- filter: AppSurface.literal(AppSurface.Article, Devtools.Echo.Feeds),
290
+ filter: AppSurface.literal(DebugSurface.Page, Devtools.Echo.Feeds),
166
291
  component: ActiveSpacePanel,
167
- props: () => ({ Panel: FeedsPanel }),
292
+ props: ({ role }) => ({ role, Panel: FeedsArticle }),
168
293
  }),
169
294
  Surface.create({
170
295
  id: 'echo.objects',
171
- filter: AppSurface.literal(AppSurface.Article, Devtools.Echo.Objects),
296
+ filter: AppSurface.literal(DebugSurface.Page, Devtools.Echo.Objects),
172
297
  component: ActiveSpacePanel,
173
- props: () => ({ Panel: ObjectsPanel }),
298
+ props: ({ role }) => ({ role, Panel: ObjectsArticle }),
299
+ }),
300
+ Surface.create({
301
+ id: 'echo.queries',
302
+ filter: AppSurface.literal(DebugSurface.Page, Devtools.Echo.Queries),
303
+ component: QueriesArticle,
304
+ props: ({ role }) => ({ role }),
174
305
  }),
175
306
  Surface.create({
176
307
  id: 'echo.schema',
177
- filter: AppSurface.literal(AppSurface.Article, Devtools.Echo.Schema),
308
+ filter: AppSurface.literal(DebugSurface.Page, Devtools.Echo.Schema),
178
309
  component: ActiveSpacePanel,
179
- props: () => ({ Panel: SchemaPanel }),
310
+ props: ({ role }) => ({ role, Panel: SchemaArticle }),
180
311
  }),
181
312
  Surface.create({
182
313
  id: 'echo.automerge',
183
- filter: AppSurface.literal(AppSurface.Article, Devtools.Echo.Automerge),
314
+ filter: AppSurface.literal(DebugSurface.Page, Devtools.Echo.Automerge),
184
315
  component: ActiveSpacePanel,
185
- props: () => ({ Panel: AutomergePanel }),
316
+ props: ({ role }) => ({ role, Panel: AutomergeArticle }),
186
317
  }),
187
318
  Surface.create({
188
319
  id: 'echo.queues',
189
- filter: AppSurface.literal(AppSurface.Article, Devtools.Echo.Queues),
190
- component: QueuesPanel,
320
+ filter: AppSurface.literal(DebugSurface.Page, Devtools.Echo.Queues),
321
+ component: QueuesArticle,
322
+ props: ({ role }) => ({ role }),
191
323
  }),
192
324
  Surface.create({
193
325
  id: 'echo.members',
194
- filter: AppSurface.literal(AppSurface.Article, Devtools.Echo.Members),
326
+ filter: AppSurface.literal(DebugSurface.Page, Devtools.Echo.Members),
195
327
  component: ActiveSpacePanel,
196
- props: () => ({ Panel: MembersPanel }),
328
+ props: ({ role }) => ({ role, Panel: MembersArticle }),
197
329
  }),
198
330
  Surface.create({
199
331
  id: 'echo.metadata',
200
- filter: AppSurface.literal(AppSurface.Article, Devtools.Echo.Metadata),
201
- component: MetadataPanel,
332
+ filter: AppSurface.literal(DebugSurface.Page, Devtools.Echo.Metadata),
333
+ component: MetadataArticle,
334
+ props: ({ role }) => ({ role }),
202
335
  }),
203
336
  Surface.create({
204
337
  id: 'mesh.signal',
205
- filter: AppSurface.literal(AppSurface.Article, Devtools.Mesh.Signal),
206
- component: SignalPanel,
338
+ filter: AppSurface.literal(DebugSurface.Page, Devtools.Mesh.Signal),
339
+ component: SignalArticle,
340
+ props: ({ role }) => ({ role }),
207
341
  }),
208
342
  Surface.create({
209
343
  id: 'mesh.swarm',
210
- filter: AppSurface.literal(AppSurface.Article, Devtools.Mesh.Swarm),
211
- component: SwarmPanel,
344
+ filter: AppSurface.literal(DebugSurface.Page, Devtools.Mesh.Swarm),
345
+ component: SwarmArticle,
346
+ props: ({ role }) => ({ role }),
212
347
  }),
213
348
  Surface.create({
214
349
  id: 'mesh.network',
215
- filter: AppSurface.literal(AppSurface.Article, Devtools.Mesh.Network),
350
+ filter: AppSurface.literal(DebugSurface.Page, Devtools.Mesh.Network),
216
351
  component: ActiveSpacePanel,
217
- props: () => ({ Panel: NetworkPanel }),
352
+ props: ({ role }) => ({ role, Panel: NetworkArticle }),
218
353
  }),
219
354
  Surface.create({
220
355
  id: 'edge.dashboard',
221
- filter: AppSurface.literal(AppSurface.Article, Devtools.Edge.Dashboard),
222
- component: EdgeDashboardPanel,
356
+ filter: AppSurface.literal(DebugSurface.Page, Devtools.Edge.Dashboard),
357
+ component: EdgeDashboardArticle,
358
+ props: ({ role }) => ({ role }),
223
359
  }),
224
360
  Surface.create({
225
361
  id: 'edge.workflows',
226
- filter: AppSurface.literal(AppSurface.Article, Devtools.Edge.Workflows),
362
+ filter: AppSurface.literal(DebugSurface.Page, Devtools.Edge.Workflows),
227
363
  component: ActiveSpacePanel,
228
- props: () => ({ Panel: WorkflowPanel }),
364
+ props: ({ role }) => ({ role, Panel: WorkflowArticle }),
229
365
  }),
230
366
  Surface.create({
231
367
  id: 'edge.traces',
232
- filter: AppSurface.literal(AppSurface.Article, Devtools.Edge.Traces),
368
+ filter: AppSurface.literal(DebugSurface.Page, Devtools.Edge.Traces),
233
369
  component: EdgeTracesSurface,
370
+ props: ({ role }) => ({ role }),
234
371
  }),
235
372
  Surface.create({
236
373
  id: 'edge.testing',
237
- filter: AppSurface.literal(AppSurface.Article, Devtools.Edge.Testing),
374
+ filter: AppSurface.literal(DebugSurface.Page, Devtools.Edge.Testing),
238
375
  component: EdgeTestingSurface,
376
+ props: ({ role }) => ({ role }),
239
377
  }),
240
378
  ]);
241
379
  }),