@dxos/plugin-debug 0.8.4-main.c4373fc → 0.8.4-main.d9fc60f731
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.
- package/LICENSE +102 -5
- package/PLUGIN.mdl +373 -0
- package/README.md +1 -1
- package/dist/lib/neutral/DebugGraph-G4FWS57E.mjs +15 -0
- package/dist/lib/neutral/DebugGraph-G4FWS57E.mjs.map +7 -0
- package/dist/lib/neutral/DebugObjectPanel-OS65NC4M.mjs +59 -0
- package/dist/lib/neutral/DebugObjectPanel-OS65NC4M.mjs.map +7 -0
- package/dist/lib/neutral/DebugPlugin.mjs +59 -0
- package/dist/lib/neutral/DebugPlugin.mjs.map +7 -0
- package/dist/lib/neutral/DebugPlugin.node.mjs +18 -0
- package/dist/lib/neutral/DebugPlugin.node.mjs.map +7 -0
- package/dist/lib/neutral/DebugPlugin.workerd.mjs +12 -0
- package/dist/lib/neutral/DebugPlugin.workerd.mjs.map +7 -0
- package/dist/lib/neutral/DebugSettings-RKYNQIKH.mjs +223 -0
- package/dist/lib/neutral/DebugSettings-RKYNQIKH.mjs.map +7 -0
- package/dist/lib/neutral/DebugSpaceObjectsPanel-BHOCFWDJ.mjs +34 -0
- package/dist/lib/neutral/DebugSpaceObjectsPanel-BHOCFWDJ.mjs.map +7 -0
- package/dist/lib/neutral/DebugStatus-H2BAHN26.mjs +122 -0
- package/dist/lib/neutral/DebugStatus-H2BAHN26.mjs.map +7 -0
- package/dist/lib/neutral/DevtoolsOverviewContainer-YX7Z3D2H.mjs +23 -0
- package/dist/lib/neutral/DevtoolsOverviewContainer-YX7Z3D2H.mjs.map +7 -0
- package/dist/lib/neutral/GithubPanel-QJKDJRVQ.mjs +177 -0
- package/dist/lib/neutral/GithubPanel-QJKDJRVQ.mjs.map +7 -0
- package/dist/lib/neutral/RegistryPanel-64GIYJHN.mjs +161 -0
- package/dist/lib/neutral/RegistryPanel-64GIYJHN.mjs.map +7 -0
- package/dist/lib/neutral/SpaceGenerator-Y35G6DRV.mjs +146 -0
- package/dist/lib/neutral/SpaceGenerator-Y35G6DRV.mjs.map +7 -0
- package/dist/lib/neutral/Wireframe-WD7S2AUU.mjs +52 -0
- package/dist/lib/neutral/Wireframe-WD7S2AUU.mjs.map +7 -0
- package/dist/lib/neutral/app-graph-builder-XYLTBYKN.mjs +612 -0
- package/dist/lib/neutral/app-graph-builder-XYLTBYKN.mjs.map +7 -0
- package/dist/lib/neutral/capabilities/index.mjs +15 -0
- package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
- package/dist/lib/neutral/chunk-HOV6MV5B.mjs +43 -0
- package/dist/lib/neutral/chunk-HOV6MV5B.mjs.map +7 -0
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +7 -0
- package/dist/lib/{browser/chunk-SRV2AIGJ.mjs → neutral/chunk-UAAGABXZ.mjs} +31 -9
- package/dist/lib/neutral/chunk-UAAGABXZ.mjs.map +7 -0
- package/dist/lib/{browser/SpaceGenerator-54FUIZIH.mjs → neutral/components/index.mjs} +343 -530
- package/dist/lib/neutral/components/index.mjs.map +7 -0
- package/dist/lib/neutral/containers/index.mjs +25 -0
- package/dist/lib/neutral/containers/index.mjs.map +7 -0
- package/dist/lib/neutral/index.mjs +18 -0
- package/dist/lib/neutral/index.mjs.map +7 -0
- package/dist/lib/neutral/meta.json +1 -0
- package/dist/lib/neutral/meta.mjs +8 -0
- package/dist/lib/neutral/meta.mjs.map +7 -0
- package/dist/lib/neutral/plugin.mjs +12 -0
- package/dist/lib/neutral/plugin.mjs.map +7 -0
- package/dist/lib/neutral/react-context-MUZ3KVLU.mjs +17 -0
- package/dist/lib/neutral/react-context-MUZ3KVLU.mjs.map +7 -0
- package/dist/lib/neutral/react-surface-3MDMZGCA.mjs +425 -0
- package/dist/lib/neutral/react-surface-3MDMZGCA.mjs.map +7 -0
- package/dist/lib/neutral/settings-MPM6YUP4.mjs +28 -0
- package/dist/lib/neutral/settings-MPM6YUP4.mjs.map +7 -0
- package/dist/lib/neutral/translations.mjs +91 -0
- package/dist/lib/neutral/translations.mjs.map +7 -0
- package/dist/lib/neutral/types/index.mjs +14 -0
- package/dist/lib/neutral/types/index.mjs.map +7 -0
- package/dist/types/src/DebugPlugin.d.ts +4 -1
- package/dist/types/src/DebugPlugin.d.ts.map +1 -1
- package/dist/types/src/DebugPlugin.node.d.ts +5 -0
- package/dist/types/src/DebugPlugin.node.d.ts.map +1 -0
- package/dist/types/src/DebugPlugin.test.d.ts +2 -0
- package/dist/types/src/DebugPlugin.test.d.ts.map +1 -0
- package/dist/types/src/DebugPlugin.workerd.d.ts +5 -0
- package/dist/types/src/DebugPlugin.workerd.d.ts.map +1 -0
- package/dist/types/src/capabilities/app-graph-builder.d.ts +4 -2
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +8 -5
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-context.d.ts +4 -2
- package/dist/types/src/capabilities/react-context.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts +7 -2
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/settings.d.ts +5 -2
- package/dist/types/src/capabilities/settings.d.ts.map +1 -1
- package/dist/types/src/components/DebugSettings/DebugSettings.d.ts +11 -0
- package/dist/types/src/components/DebugSettings/DebugSettings.d.ts.map +1 -0
- package/dist/types/src/components/DebugSettings/DebugSettings.stories.d.ts +106 -0
- package/dist/types/src/components/DebugSettings/DebugSettings.stories.d.ts.map +1 -0
- package/dist/types/src/components/DebugSettings/index.d.ts +2 -0
- package/dist/types/src/components/DebugSettings/index.d.ts.map +1 -0
- package/dist/types/src/components/SchemaTable/SchemaTable.d.ts.map +1 -0
- package/dist/types/src/components/SchemaTable/index.d.ts +2 -0
- package/dist/types/src/components/SchemaTable/index.d.ts.map +1 -0
- package/dist/types/src/components/SpaceGenerator/ObjectGenerator.d.ts +4 -5
- package/dist/types/src/components/SpaceGenerator/ObjectGenerator.d.ts.map +1 -1
- package/dist/types/src/components/SpaceGenerator/draw-util.d.ts.map +1 -1
- package/dist/types/src/components/SpaceGenerator/index.d.ts +2 -2
- package/dist/types/src/components/SpaceGenerator/index.d.ts.map +1 -1
- package/dist/types/src/components/SpaceGenerator/presets.d.ts +2 -5
- package/dist/types/src/components/SpaceGenerator/presets.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +4 -10
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/containers/DebugGraph/DebugGraph.d.ts +8 -0
- package/dist/types/src/containers/DebugGraph/DebugGraph.d.ts.map +1 -0
- package/dist/types/src/containers/DebugGraph/index.d.ts +2 -0
- package/dist/types/src/containers/DebugGraph/index.d.ts.map +1 -0
- package/dist/types/src/containers/DebugObjectPanel/DebugObjectPanel.d.ts +6 -0
- package/dist/types/src/containers/DebugObjectPanel/DebugObjectPanel.d.ts.map +1 -0
- package/dist/types/src/containers/DebugObjectPanel/index.d.ts +2 -0
- package/dist/types/src/containers/DebugObjectPanel/index.d.ts.map +1 -0
- package/dist/types/src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.d.ts +5 -0
- package/dist/types/src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.d.ts.map +1 -0
- package/dist/types/src/containers/DebugSpaceObjectsPanel/index.d.ts +2 -0
- package/dist/types/src/containers/DebugSpaceObjectsPanel/index.d.ts.map +1 -0
- package/dist/types/src/containers/DebugStatus/DebugStatus.d.ts.map +1 -0
- package/dist/types/src/containers/DebugStatus/index.d.ts +2 -0
- package/dist/types/src/containers/DebugStatus/index.d.ts.map +1 -0
- package/dist/types/src/{components → containers/DevtoolsOverviewContainer}/DevtoolsOverviewContainer.d.ts +0 -1
- package/dist/types/src/containers/DevtoolsOverviewContainer/DevtoolsOverviewContainer.d.ts.map +1 -0
- package/dist/types/src/containers/DevtoolsOverviewContainer/index.d.ts +2 -0
- package/dist/types/src/containers/DevtoolsOverviewContainer/index.d.ts.map +1 -0
- package/dist/types/src/containers/GithubPanel/GithubComponent.d.ts +15 -0
- package/dist/types/src/containers/GithubPanel/GithubComponent.d.ts.map +1 -0
- package/dist/types/src/containers/GithubPanel/GithubComponent.stories.d.ts +106 -0
- package/dist/types/src/containers/GithubPanel/GithubComponent.stories.d.ts.map +1 -0
- package/dist/types/src/containers/GithubPanel/GithubPanel.d.ts +3 -0
- package/dist/types/src/containers/GithubPanel/GithubPanel.d.ts.map +1 -0
- package/dist/types/src/containers/GithubPanel/index.d.ts +2 -0
- package/dist/types/src/containers/GithubPanel/index.d.ts.map +1 -0
- package/dist/types/src/containers/RegistryPanel/RegistryPanel.d.ts +3 -0
- package/dist/types/src/containers/RegistryPanel/RegistryPanel.d.ts.map +1 -0
- package/dist/types/src/containers/RegistryPanel/index.d.ts +2 -0
- package/dist/types/src/containers/RegistryPanel/index.d.ts.map +1 -0
- package/dist/types/src/containers/SpaceGenerator/SpaceGenerator.d.ts +11 -0
- package/dist/types/src/containers/SpaceGenerator/SpaceGenerator.d.ts.map +1 -0
- package/dist/types/src/containers/SpaceGenerator/index.d.ts +2 -0
- package/dist/types/src/containers/SpaceGenerator/index.d.ts.map +1 -0
- package/dist/types/src/{components → containers/Wireframe}/Wireframe.d.ts +2 -2
- package/dist/types/src/containers/Wireframe/Wireframe.d.ts.map +1 -0
- package/dist/types/src/containers/Wireframe/index.d.ts +2 -0
- package/dist/types/src/containers/Wireframe/index.d.ts.map +1 -0
- package/dist/types/src/containers/index.d.ts +11 -0
- package/dist/types/src/containers/index.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +1 -1
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +2 -2
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/plugin.d.ts +4 -0
- package/dist/types/src/plugin.d.ts.map +1 -0
- package/dist/types/src/translations.d.ts +87 -59
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/Settings.d.ts +8 -0
- package/dist/types/src/types/Settings.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +70 -0
- package/dist/types/src/types/index.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +125 -78
- package/src/DebugPlugin.node.ts +18 -0
- package/src/DebugPlugin.test.ts +29 -0
- package/src/DebugPlugin.tsx +34 -34
- package/src/DebugPlugin.workerd.ts +12 -0
- package/src/capabilities/app-graph-builder.ts +390 -388
- package/src/capabilities/index.ts +5 -5
- package/src/capabilities/react-context.tsx +16 -7
- package/src/capabilities/react-surface.tsx +386 -339
- package/src/capabilities/settings.ts +24 -12
- package/src/components/DebugSettings/DebugSettings.stories.tsx +36 -0
- package/src/components/DebugSettings/DebugSettings.tsx +259 -0
- package/src/components/DebugSettings/index.ts +5 -0
- package/src/components/SchemaTable/index.ts +5 -0
- package/src/components/SpaceGenerator/ObjectGenerator.tsx +38 -44
- package/src/components/SpaceGenerator/draw-util.ts +8 -8
- package/src/components/SpaceGenerator/index.ts +2 -3
- package/src/components/SpaceGenerator/presets.ts +245 -151
- package/src/components/index.ts +4 -8
- package/src/containers/DebugGraph/DebugGraph.tsx +14 -0
- package/src/containers/DebugGraph/index.ts +5 -0
- package/src/containers/DebugObjectPanel/DebugObjectPanel.tsx +76 -0
- package/src/containers/DebugObjectPanel/index.ts +5 -0
- package/src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.tsx +47 -0
- package/src/containers/DebugSpaceObjectsPanel/index.ts +5 -0
- package/src/{components → containers/DebugStatus}/DebugStatus.tsx +42 -19
- package/src/containers/DebugStatus/index.ts +5 -0
- package/src/containers/DevtoolsOverviewContainer/DevtoolsOverviewContainer.tsx +25 -0
- package/src/containers/DevtoolsOverviewContainer/index.ts +5 -0
- package/src/containers/GithubPanel/GithubComponent.stories.tsx +38 -0
- package/src/containers/GithubPanel/GithubComponent.tsx +192 -0
- package/src/containers/GithubPanel/GithubPanel.tsx +17 -0
- package/src/containers/GithubPanel/index.ts +5 -0
- package/src/containers/RegistryPanel/RegistryPanel.tsx +150 -0
- package/src/containers/RegistryPanel/index.ts +5 -0
- package/src/containers/SpaceGenerator/SpaceGenerator.tsx +127 -0
- package/src/containers/SpaceGenerator/index.ts +5 -0
- package/src/{components → containers/Wireframe}/Wireframe.tsx +7 -12
- package/src/containers/Wireframe/index.ts +5 -0
- package/src/containers/index.ts +15 -0
- package/src/index.ts +1 -1
- package/src/meta.ts +29 -6
- package/src/plugin.ts +10 -0
- package/src/translations.ts +83 -58
- package/src/types/Settings.ts +16 -0
- package/src/{types.ts → types/index.ts} +21 -11
- package/src/vite-env.d.ts +10 -0
- package/dist/lib/browser/DebugGraph-EDOH6R2G.mjs +0 -20
- package/dist/lib/browser/DebugGraph-EDOH6R2G.mjs.map +0 -7
- package/dist/lib/browser/DevtoolsOverviewContainer-EPD6EWT5.mjs +0 -25
- package/dist/lib/browser/DevtoolsOverviewContainer-EPD6EWT5.mjs.map +0 -7
- package/dist/lib/browser/SpaceGenerator-54FUIZIH.mjs.map +0 -7
- package/dist/lib/browser/app-graph-builder-I4IHBKKN.mjs +0 -588
- package/dist/lib/browser/app-graph-builder-I4IHBKKN.mjs.map +0 -7
- package/dist/lib/browser/chunk-SRV2AIGJ.mjs.map +0 -7
- package/dist/lib/browser/chunk-SVCKCXCL.mjs +0 -16
- package/dist/lib/browser/chunk-SVCKCXCL.mjs.map +0 -7
- package/dist/lib/browser/index.mjs +0 -131
- package/dist/lib/browser/index.mjs.map +0 -7
- package/dist/lib/browser/meta.json +0 -1
- package/dist/lib/browser/react-context-QLZE7VSQ.mjs +0 -16
- package/dist/lib/browser/react-context-QLZE7VSQ.mjs.map +0 -7
- package/dist/lib/browser/react-surface-BTWJ2I3F.mjs +0 -772
- package/dist/lib/browser/react-surface-BTWJ2I3F.mjs.map +0 -7
- package/dist/lib/browser/settings-EBVICEEW.mjs +0 -22
- package/dist/lib/browser/settings-EBVICEEW.mjs.map +0 -7
- package/dist/types/src/components/Container.d.ts +0 -5
- package/dist/types/src/components/Container.d.ts.map +0 -1
- package/dist/types/src/components/DebugGraph.d.ts +0 -8
- package/dist/types/src/components/DebugGraph.d.ts.map +0 -1
- package/dist/types/src/components/DebugObjectPanel.d.ts +0 -7
- package/dist/types/src/components/DebugObjectPanel.d.ts.map +0 -1
- package/dist/types/src/components/DebugSettings.d.ts +0 -6
- package/dist/types/src/components/DebugSettings.d.ts.map +0 -1
- package/dist/types/src/components/DebugStatus.d.ts.map +0 -1
- package/dist/types/src/components/DevtoolsOverviewContainer.d.ts.map +0 -1
- package/dist/types/src/components/SpaceGenerator/SchemaTable.d.ts.map +0 -1
- package/dist/types/src/components/SpaceGenerator/SpaceGenerator.d.ts +0 -9
- package/dist/types/src/components/SpaceGenerator/SpaceGenerator.d.ts.map +0 -1
- package/dist/types/src/components/SpaceGenerator/SpaceGenerator.stories.d.ts +0 -15
- package/dist/types/src/components/SpaceGenerator/SpaceGenerator.stories.d.ts.map +0 -1
- package/dist/types/src/components/Wireframe.d.ts.map +0 -1
- package/dist/types/src/types.d.ts +0 -63
- package/dist/types/src/types.d.ts.map +0 -1
- package/src/components/Container.tsx +0 -15
- package/src/components/DebugGraph.tsx +0 -14
- package/src/components/DebugObjectPanel.tsx +0 -33
- package/src/components/DebugSettings.tsx +0 -159
- package/src/components/DevtoolsOverviewContainer.tsx +0 -20
- package/src/components/SpaceGenerator/SpaceGenerator.stories.tsx +0 -52
- package/src/components/SpaceGenerator/SpaceGenerator.tsx +0 -122
- /package/dist/types/src/components/{SpaceGenerator → SchemaTable}/SchemaTable.d.ts +0 -0
- /package/dist/types/src/{components → containers/DebugStatus}/DebugStatus.d.ts +0 -0
- /package/src/components/{SpaceGenerator → SchemaTable}/SchemaTable.tsx +0 -0
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2026 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
|
6
|
+
|
|
7
|
+
import { Operation } from '@dxos/compute';
|
|
8
|
+
import { JsonView, PanelContainer, Placeholder, Searchbar } from '@dxos/devtools';
|
|
9
|
+
import { Entity, Format, Obj, Type } from '@dxos/echo';
|
|
10
|
+
import { useClient } from '@dxos/react-client';
|
|
11
|
+
import { Toolbar } from '@dxos/react-ui';
|
|
12
|
+
import { DynamicTable, type TableFeatures } from '@dxos/react-ui-table';
|
|
13
|
+
import { mx } from '@dxos/ui-theme';
|
|
14
|
+
|
|
15
|
+
type RegistryRow = {
|
|
16
|
+
id: string;
|
|
17
|
+
kind: string;
|
|
18
|
+
label: string;
|
|
19
|
+
_entity: Entity.Unknown;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
const textFilter = (text?: string) => {
|
|
23
|
+
if (!text) {
|
|
24
|
+
return () => true;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const matcher = new RegExp(text, 'i');
|
|
28
|
+
return (entity: Entity.Unknown) => {
|
|
29
|
+
const typename = Entity.getTypename(entity) ?? '';
|
|
30
|
+
const metaKey = Obj.isObject(entity) ? (Obj.getMeta(entity).key ?? '') : '';
|
|
31
|
+
const uri = Type.isType(entity) ? (Type.getURI(entity)?.toString() ?? '') : '';
|
|
32
|
+
const operationKey =
|
|
33
|
+
Obj.isObject(entity) && Obj.instanceOf(Operation.PersistentOperation, entity)
|
|
34
|
+
? (Operation.getKey(entity) ?? '')
|
|
35
|
+
: '';
|
|
36
|
+
const name = Obj.isObject(entity) && Obj.instanceOf(Operation.PersistentOperation, entity) ? entity.name : '';
|
|
37
|
+
return [typename, metaKey, uri, operationKey, name, getEntityId(entity)].some((value) => value.match(matcher));
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const getEntityId = (entity: Entity.Unknown): string => {
|
|
42
|
+
if (entity.id) {
|
|
43
|
+
return entity.id;
|
|
44
|
+
}
|
|
45
|
+
if (Type.isType(entity)) {
|
|
46
|
+
return Type.getURI(entity)?.toString() ?? Type.getTypename(entity) ?? 'unknown-type';
|
|
47
|
+
}
|
|
48
|
+
return Entity.getTypename(entity) ?? 'unknown';
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
const getKind = (entity: Entity.Unknown): string => {
|
|
52
|
+
if (Type.isType(entity)) {
|
|
53
|
+
return 'type';
|
|
54
|
+
}
|
|
55
|
+
if (Obj.isObject(entity) && Obj.instanceOf(Operation.PersistentOperation, entity)) {
|
|
56
|
+
return 'operation';
|
|
57
|
+
}
|
|
58
|
+
return 'other';
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
const getLabel = (entity: Entity.Unknown): string => {
|
|
62
|
+
if (Obj.isObject(entity) && Obj.instanceOf(Operation.PersistentOperation, entity)) {
|
|
63
|
+
return entity.name || Operation.getKey(entity) || getEntityId(entity);
|
|
64
|
+
}
|
|
65
|
+
if (Type.isType(entity)) {
|
|
66
|
+
return Type.getTypename(entity) ?? getEntityId(entity);
|
|
67
|
+
}
|
|
68
|
+
return getEntityId(entity);
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
const toDetailJson = (entity: Entity.Unknown): object => {
|
|
72
|
+
if (Type.isType(entity)) {
|
|
73
|
+
return {
|
|
74
|
+
id: getEntityId(entity),
|
|
75
|
+
typename: Type.getTypename(entity),
|
|
76
|
+
uri: Type.getURI(entity)?.toString(),
|
|
77
|
+
version: Type.getVersion(entity),
|
|
78
|
+
jsonSchema: entity.jsonSchema,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
if (Obj.isObject(entity)) {
|
|
82
|
+
return Obj.toJSON(entity);
|
|
83
|
+
}
|
|
84
|
+
return { id: getEntityId(entity), typename: Entity.getTypename(entity) };
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
export const RegistryPanel = () => {
|
|
88
|
+
const client = useClient();
|
|
89
|
+
const [entities, setEntities] = useState<Entity.Unknown[]>([]);
|
|
90
|
+
const [filter, setFilter] = useState('');
|
|
91
|
+
const [selected, setSelected] = useState<Entity.Unknown>();
|
|
92
|
+
|
|
93
|
+
useEffect(() => {
|
|
94
|
+
const registry = client.graph.registry;
|
|
95
|
+
const refresh = () => setEntities([...registry.list()]);
|
|
96
|
+
refresh();
|
|
97
|
+
return registry.changed.on(refresh);
|
|
98
|
+
}, [client]);
|
|
99
|
+
|
|
100
|
+
const properties = useMemo(
|
|
101
|
+
() => [
|
|
102
|
+
{ name: 'kind', format: Format.TypeFormat.String, size: 100 },
|
|
103
|
+
{ name: 'label', format: Format.TypeFormat.String },
|
|
104
|
+
{ name: 'id', format: Format.TypeFormat.String, size: 280 },
|
|
105
|
+
],
|
|
106
|
+
[],
|
|
107
|
+
);
|
|
108
|
+
|
|
109
|
+
const rows = useMemo((): RegistryRow[] => {
|
|
110
|
+
return entities
|
|
111
|
+
.filter(textFilter(filter))
|
|
112
|
+
.map((entity) => ({
|
|
113
|
+
id: getEntityId(entity),
|
|
114
|
+
kind: getKind(entity),
|
|
115
|
+
label: getLabel(entity),
|
|
116
|
+
_entity: entity,
|
|
117
|
+
}))
|
|
118
|
+
.toSorted((left, right) => left.label.localeCompare(right.label));
|
|
119
|
+
}, [entities, filter]);
|
|
120
|
+
|
|
121
|
+
const handleRowClicked = useCallback((row: RegistryRow | undefined) => {
|
|
122
|
+
if (!row?._entity) {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
setSelected(row._entity);
|
|
126
|
+
}, []);
|
|
127
|
+
|
|
128
|
+
const detailJson = useMemo(() => (selected ? toDetailJson(selected) : undefined), [selected]);
|
|
129
|
+
|
|
130
|
+
const features: Partial<TableFeatures> = useMemo(() => ({ selection: { enabled: true, mode: 'single' } }), []);
|
|
131
|
+
|
|
132
|
+
return (
|
|
133
|
+
<PanelContainer
|
|
134
|
+
toolbar={
|
|
135
|
+
<Toolbar.Root>
|
|
136
|
+
<Searchbar placeholder='Filter...' onChange={setFilter} />
|
|
137
|
+
</Toolbar.Root>
|
|
138
|
+
}
|
|
139
|
+
>
|
|
140
|
+
<div className={mx('h-full grid grid-cols-[2fr_1fr] overflow-hidden')}>
|
|
141
|
+
<div className={mx('flex flex-col min-h-0 overflow-hidden')}>
|
|
142
|
+
<DynamicTable properties={properties} rows={rows} features={features} onRowClick={handleRowClicked} />
|
|
143
|
+
</div>
|
|
144
|
+
<div className={mx('min-h-0 h-full overflow-auto border-s border-separator text-sm')}>
|
|
145
|
+
{detailJson ? <JsonView data={detailJson} /> : <Placeholder label='Details' />}
|
|
146
|
+
</div>
|
|
147
|
+
</div>
|
|
148
|
+
</PanelContainer>
|
|
149
|
+
);
|
|
150
|
+
};
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2024 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import React, { useCallback, useMemo, useState } from 'react';
|
|
6
|
+
|
|
7
|
+
import { useOperationInvoker } from '@dxos/app-framework/ui';
|
|
8
|
+
import { ComputeGraph } from '@dxos/conductor';
|
|
9
|
+
import { Filter, Obj, Type } from '@dxos/echo';
|
|
10
|
+
import { Markdown } from '@dxos/plugin-markdown';
|
|
11
|
+
import { Sheet } from '@dxos/plugin-sheet';
|
|
12
|
+
import { Sketch } from '@dxos/plugin-sketch';
|
|
13
|
+
import { useClient } from '@dxos/react-client';
|
|
14
|
+
import { type Space } from '@dxos/react-client/echo';
|
|
15
|
+
import { IconButton, Input, Panel, ScrollArea, Toolbar, useAsyncEffect } from '@dxos/react-ui';
|
|
16
|
+
import { composable, composableProps } from '@dxos/react-ui';
|
|
17
|
+
import { Organization, Person, Task } from '@dxos/types';
|
|
18
|
+
import { sortKeys } from '@dxos/util';
|
|
19
|
+
|
|
20
|
+
import { type ObjectGenerator, SchemaTable, createGenerator, generator, staticGenerators } from '#components';
|
|
21
|
+
|
|
22
|
+
// TODO(burdon): Make extensible.
|
|
23
|
+
const staticTypes = [Markdown.Document, Sketch.Sketch, Sheet.Sheet, ComputeGraph];
|
|
24
|
+
const recordTypes: Type.AnyObj[] = [Organization.Organization, Person.Person, Task.Task];
|
|
25
|
+
|
|
26
|
+
export type SpaceGeneratorProps = {
|
|
27
|
+
space: Space;
|
|
28
|
+
onCreateObjects?: (objects: Obj.Unknown[]) => void;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export const SpaceGenerator = composable<HTMLDivElement, SpaceGeneratorProps>(
|
|
32
|
+
({ space, onCreateObjects, children, ...props }, forwardedRef) => {
|
|
33
|
+
const { invokePromise } = useOperationInvoker();
|
|
34
|
+
const client = useClient();
|
|
35
|
+
const [count, setCount] = useState(1);
|
|
36
|
+
const [info, setInfo] = useState<any>({});
|
|
37
|
+
const presets = useMemo(() => generator(), []);
|
|
38
|
+
|
|
39
|
+
// Register types.
|
|
40
|
+
useAsyncEffect(async () => {
|
|
41
|
+
await client.addTypes([...staticTypes, ...recordTypes, ...presets.schemas]);
|
|
42
|
+
}, [client, presets]);
|
|
43
|
+
|
|
44
|
+
// Create type generators.
|
|
45
|
+
const typeMap = useMemo(() => {
|
|
46
|
+
const recordGenerators = new Map<string, ObjectGenerator<any>>(
|
|
47
|
+
recordTypes.map((type) => [Type.getTypename(type), createGenerator(client, invokePromise, type)]),
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
return new Map([...staticGenerators, ...presets.items, ...recordGenerators]);
|
|
51
|
+
}, [client, invokePromise, presets]);
|
|
52
|
+
|
|
53
|
+
// Query space to get info.
|
|
54
|
+
const updateInfo = useCallback(async () => {
|
|
55
|
+
const allSchema = [...space.db.graph.registry.list().filter(Type.isType)];
|
|
56
|
+
const echoSchema = allSchema.filter((t) => Type.isTypeKind(t));
|
|
57
|
+
const staticSchema = allSchema.filter((t) => !Type.isTypeKind(t));
|
|
58
|
+
|
|
59
|
+
const objects = await space.db.query(Filter.everything()).run();
|
|
60
|
+
const objectMap = sortKeys(
|
|
61
|
+
objects.reduce<Record<string, number>>((map, obj) => {
|
|
62
|
+
const type = Obj.getTypename(obj);
|
|
63
|
+
if (type) {
|
|
64
|
+
const count = map[type] ?? 0;
|
|
65
|
+
map[type] = count + 1;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return map;
|
|
69
|
+
}, {}),
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
setInfo({
|
|
73
|
+
schema: {
|
|
74
|
+
static: staticSchema.length,
|
|
75
|
+
mutable: echoSchema.length,
|
|
76
|
+
},
|
|
77
|
+
objects: objectMap,
|
|
78
|
+
});
|
|
79
|
+
}, [space]);
|
|
80
|
+
|
|
81
|
+
useAsyncEffect(updateInfo, [updateInfo]);
|
|
82
|
+
|
|
83
|
+
const handleCreateData = useCallback(
|
|
84
|
+
async (typename: string) => {
|
|
85
|
+
const constructor = typeMap.get(typename);
|
|
86
|
+
if (constructor) {
|
|
87
|
+
// TODO(burdon): Input to specify number of objects.
|
|
88
|
+
await constructor(space, count, onCreateObjects);
|
|
89
|
+
await updateInfo();
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
[typeMap, count, space, onCreateObjects, updateInfo],
|
|
93
|
+
);
|
|
94
|
+
|
|
95
|
+
return (
|
|
96
|
+
<Panel.Root {...composableProps(props)} ref={forwardedRef}>
|
|
97
|
+
<Panel.Toolbar asChild>
|
|
98
|
+
<Toolbar.Root>
|
|
99
|
+
<IconButton icon='ph--arrow-clockwise--regular' iconOnly label='Refresh' onClick={updateInfo} />
|
|
100
|
+
<Toolbar.Separator />
|
|
101
|
+
<Input.Root>
|
|
102
|
+
<Input.TextInput
|
|
103
|
+
type='number'
|
|
104
|
+
placeholder='Count'
|
|
105
|
+
classNames='w-[4rem] text-right'
|
|
106
|
+
min={1}
|
|
107
|
+
max={100}
|
|
108
|
+
size={8}
|
|
109
|
+
value={count}
|
|
110
|
+
onChange={(event) => setCount(parseInt(event.target.value))}
|
|
111
|
+
/>
|
|
112
|
+
</Input.Root>
|
|
113
|
+
</Toolbar.Root>
|
|
114
|
+
</Panel.Toolbar>
|
|
115
|
+
<Panel.Content asChild>
|
|
116
|
+
<ScrollArea.Root thin orientation='vertical'>
|
|
117
|
+
<ScrollArea.Viewport classNames='dx-document gap-4 divide-y divide-subdued-separator'>
|
|
118
|
+
<SchemaTable types={staticTypes} objects={info.objects} label='Static Types' onClick={handleCreateData} />
|
|
119
|
+
<SchemaTable types={recordTypes} objects={info.objects} label='Record Types' onClick={handleCreateData} />
|
|
120
|
+
<SchemaTable types={presets.types} objects={info.objects} label='Presets' onClick={handleCreateData} />
|
|
121
|
+
</ScrollArea.Viewport>
|
|
122
|
+
</ScrollArea.Root>
|
|
123
|
+
</Panel.Content>
|
|
124
|
+
</Panel.Root>
|
|
125
|
+
);
|
|
126
|
+
},
|
|
127
|
+
);
|
|
@@ -5,36 +5,31 @@
|
|
|
5
5
|
import React from 'react';
|
|
6
6
|
import { useResizeDetector } from 'react-resize-detector';
|
|
7
7
|
|
|
8
|
-
import {
|
|
9
|
-
import { fullyQualifiedId } from '@dxos/react-client/echo';
|
|
8
|
+
import { Obj } from '@dxos/echo';
|
|
10
9
|
import { type ThemedClassName } from '@dxos/react-ui';
|
|
11
10
|
import { useAttentionAttributes } from '@dxos/react-ui-attention';
|
|
12
|
-
import {
|
|
13
|
-
import { mx } from '@dxos/
|
|
11
|
+
import { JsonHighlighter } from '@dxos/react-ui-syntax-highlighter';
|
|
12
|
+
import { mx } from '@dxos/ui-theme';
|
|
14
13
|
|
|
15
14
|
// TODO(burdon): Create generic container with wireframe mode.
|
|
16
15
|
export type WireframeProps = ThemedClassName<{
|
|
16
|
+
object: Obj.Unknown;
|
|
17
17
|
label?: string;
|
|
18
|
-
object: Obj.Any;
|
|
19
18
|
}>;
|
|
20
19
|
|
|
21
20
|
// TODO(burdon): Make focusable and attendable with input.
|
|
22
21
|
export const Wireframe = ({ classNames, label, object }: WireframeProps) => {
|
|
23
|
-
const attentionAttrs = useAttentionAttributes(
|
|
22
|
+
const attentionAttrs = useAttentionAttributes(Obj.getURI(object));
|
|
24
23
|
const { width, height, ref } = useResizeDetector();
|
|
25
24
|
|
|
26
25
|
return (
|
|
27
|
-
<div ref={ref} className={mx('relative grow min-
|
|
26
|
+
<div ref={ref} className={mx('relative grow min-h-96', classNames)} {...attentionAttrs}>
|
|
28
27
|
<div className='absolute inset-2 flex flex-col gap-2 overflow-hidden font-mono'>
|
|
29
28
|
<div className='flex justify-between'>
|
|
30
29
|
<div>{label}</div>
|
|
31
30
|
<div>{`[${width}x${height}]`}</div>
|
|
32
31
|
</div>
|
|
33
|
-
{object &&
|
|
34
|
-
<SyntaxHighlighter language='json' classNames='text-xs opacity-75 rounded'>
|
|
35
|
-
{JSON.stringify(object, undefined, 2)}
|
|
36
|
-
</SyntaxHighlighter>
|
|
37
|
-
)}
|
|
32
|
+
{object && <JsonHighlighter data={object} classNames='text-xs opacity-75 rounded-sm' />}
|
|
38
33
|
</div>
|
|
39
34
|
<svg width={width} height={height} className='bg-transparent *:text-subdued'>
|
|
40
35
|
<rect x={0} y={0} width={width} height={height} strokeWidth={1} fill='none' />
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2023 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { type ComponentType, lazy } from 'react';
|
|
6
|
+
|
|
7
|
+
export const DebugGraph: ComponentType<any> = lazy(() => import('./DebugGraph'));
|
|
8
|
+
export const DebugObjectPanel: ComponentType<any> = lazy(() => import('./DebugObjectPanel'));
|
|
9
|
+
export const DebugStatus: ComponentType<any> = lazy(() => import('./DebugStatus'));
|
|
10
|
+
export const DevtoolsOverviewContainer: ComponentType<any> = lazy(() => import('./DevtoolsOverviewContainer'));
|
|
11
|
+
export const SpaceGenerator: ComponentType<any> = lazy(() => import('./SpaceGenerator'));
|
|
12
|
+
export const Wireframe: ComponentType<any> = lazy(() => import('./Wireframe'));
|
|
13
|
+
export const DebugSpaceObjectsPanel: ComponentType<any> = lazy(() => import('./DebugSpaceObjectsPanel'));
|
|
14
|
+
export const GithubPanel: ComponentType<any> = lazy(() => import('./GithubPanel'));
|
|
15
|
+
export const RegistryPanel: ComponentType<any> = lazy(() => import('./RegistryPanel'));
|
package/src/index.ts
CHANGED
package/src/meta.ts
CHANGED
|
@@ -2,14 +2,37 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { Plugin } from '@dxos/app-framework';
|
|
6
|
+
import { DXN } from '@dxos/keys';
|
|
7
|
+
import { trim } from '@dxos/util';
|
|
6
8
|
|
|
7
|
-
export const meta
|
|
8
|
-
|
|
9
|
+
export const meta = Plugin.makeMeta({
|
|
10
|
+
key: DXN.make('org.dxos.plugin.debug'),
|
|
9
11
|
name: 'Debug',
|
|
10
|
-
|
|
11
|
-
|
|
12
|
+
author: 'DXOS',
|
|
13
|
+
spec: 'PLUGIN.mdl',
|
|
14
|
+
description: trim`
|
|
15
|
+
DebugPlugin is the developer toolkit for DXOS Composer. It adds a structured Devtools node
|
|
16
|
+
to the navigation graph — grouped into Client, HALO, ECHO, Mesh, and EDGE sub-sections —
|
|
17
|
+
exposing panel views for config, storage, logs, diagnostics, identity, devices, feeds,
|
|
18
|
+
objects, schemas, automerge internals, network topology, EDGE workflows, and invocation
|
|
19
|
+
traces, all driven by the @dxos/devtools component library.
|
|
20
|
+
|
|
21
|
+
The plugin contributes a Debug companion tab to every ECHO object in the deck so developers
|
|
22
|
+
can inspect raw field values and DXNs inline, and a Space Objects companion panel that lists
|
|
23
|
+
all objects in the active space with live reactive updates.
|
|
24
|
+
|
|
25
|
+
Test-data generation is available via a SpaceGenerator article surface: developers can
|
|
26
|
+
create configurable batches of synthetic ECHO objects into any space collection, with a
|
|
27
|
+
status indicator showing when generation is running.
|
|
28
|
+
|
|
29
|
+
Additional utilities include a wireframe overlay mode that draws labelled borders around
|
|
30
|
+
every article and section surface, a log-capture and download facility backed by an
|
|
31
|
+
IdbLogStore, a ToolsExplorer connected to the DXOS MCP introspect service, and a
|
|
32
|
+
globalThis helper for manual storage-version testing.
|
|
33
|
+
`,
|
|
12
34
|
icon: 'ph--bug--regular',
|
|
13
35
|
source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-debug',
|
|
14
36
|
screenshots: ['https://dxos.network/plugin-details-debug-dark.png'],
|
|
15
|
-
|
|
37
|
+
tags: ['labs'],
|
|
38
|
+
});
|
package/src/plugin.ts
ADDED
package/src/translations.ts
CHANGED
|
@@ -3,71 +3,96 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { type Resource } from '@dxos/react-ui';
|
|
6
|
+
import { translations as introspectTranslations } from '@dxos/react-ui-introspect/translations';
|
|
6
7
|
|
|
7
|
-
import { meta } from '
|
|
8
|
+
import { meta } from '#meta';
|
|
8
9
|
|
|
9
10
|
export const translations = [
|
|
11
|
+
...introspectTranslations,
|
|
10
12
|
{
|
|
11
13
|
'en-US': {
|
|
12
14
|
[meta.id]: {
|
|
13
|
-
'plugin
|
|
14
|
-
'settings
|
|
15
|
-
'
|
|
16
|
-
'
|
|
17
|
-
'
|
|
18
|
-
'
|
|
19
|
-
'
|
|
20
|
-
'
|
|
21
|
-
'debug
|
|
22
|
-
'
|
|
23
|
-
|
|
24
|
-
'settings
|
|
25
|
-
'settings
|
|
26
|
-
'settings
|
|
27
|
-
'settings
|
|
28
|
-
|
|
29
|
-
'settings
|
|
30
|
-
'settings
|
|
31
|
-
'settings
|
|
32
|
-
'settings
|
|
33
|
-
'settings
|
|
34
|
-
'settings
|
|
35
|
-
|
|
15
|
+
'plugin.name': 'Debug',
|
|
16
|
+
'settings.title': 'Debug settings',
|
|
17
|
+
'open-devtools.label': 'Open DevTools',
|
|
18
|
+
'devtools.label': 'DevTools',
|
|
19
|
+
'devtools-overview.label': 'Stats',
|
|
20
|
+
'space-objects.label': 'Database',
|
|
21
|
+
'debug.label': 'Debug',
|
|
22
|
+
'generate-objects.label': 'Generate Objects',
|
|
23
|
+
'debug-app-graph.label': 'App Graph',
|
|
24
|
+
'debug-tools-explorer.label': 'SDK Explorer',
|
|
25
|
+
|
|
26
|
+
'settings.wireframe.label': 'Show wireframes.',
|
|
27
|
+
'settings.wireframe.description': 'Overlay wireframe outlines on UI components for debugging layout.',
|
|
28
|
+
'settings.trace-all.label': 'Trace all requests (100% sampling).',
|
|
29
|
+
'settings.trace-all.description':
|
|
30
|
+
'Override the default 30% sampling rate to capture all traces. Requires page reload to take effect.',
|
|
31
|
+
'settings.tracing-panel.label': 'Open tracing panel.',
|
|
32
|
+
'settings.tracing-panel.description': 'Open the tracing dashboard to inspect captured spans.',
|
|
33
|
+
'settings.repair.label': 'Run repair tool.',
|
|
34
|
+
'settings.repair.description': 'Attempt to detect and fix inconsistencies in local data storage.',
|
|
35
|
+
'settings.download-diagnostics.label': 'Download diagnostics.',
|
|
36
|
+
'settings.download-diagnostics.description':
|
|
37
|
+
'Export a JSON file containing client diagnostics for troubleshooting.',
|
|
38
|
+
'settings.download-logs.label': 'Download log buffer.',
|
|
39
|
+
'settings.download-logs.description': 'Export the in-memory log buffer as an NDJSON file.',
|
|
40
|
+
'settings.uploaded.message': 'Settings uploaded.',
|
|
41
|
+
'settings.uploaded.description': 'URL copied to clipboard.',
|
|
42
|
+
'settings.choose-storage-adaptor.label': 'Storage adaptor (worker reload required).',
|
|
43
|
+
'settings.choose-storage-adaptor.description':
|
|
44
|
+
'Select the browser storage backend. Changing this requires a worker reload and may make existing data unavailable.',
|
|
45
|
+
'settings.repair-success.message': 'Repair succeeded',
|
|
46
|
+
'settings.repair-failed.message': 'Repair failed',
|
|
47
|
+
|
|
48
|
+
'settings.storage-adaptor.idb.label': 'IndexedDB',
|
|
49
|
+
'settings.storage-adaptor.opfs.label': 'OPFS',
|
|
50
|
+
'settings.storage-adapter.changed-alert.message':
|
|
36
51
|
'Warning: Swapping the storage adapter will make your data unavailable.',
|
|
37
|
-
|
|
38
|
-
'
|
|
39
|
-
|
|
40
|
-
'
|
|
41
|
-
'
|
|
42
|
-
'
|
|
43
|
-
'
|
|
44
|
-
'
|
|
45
|
-
'
|
|
46
|
-
'
|
|
47
|
-
'
|
|
48
|
-
'
|
|
49
|
-
'
|
|
50
|
-
'
|
|
51
|
-
'
|
|
52
|
-
'
|
|
53
|
-
'
|
|
54
|
-
'
|
|
55
|
-
'
|
|
56
|
-
'
|
|
57
|
-
'
|
|
58
|
-
'
|
|
59
|
-
'
|
|
60
|
-
'
|
|
61
|
-
'
|
|
62
|
-
'
|
|
63
|
-
'
|
|
64
|
-
'
|
|
65
|
-
'
|
|
66
|
-
'
|
|
67
|
-
'
|
|
68
|
-
'
|
|
69
|
-
'
|
|
70
|
-
'
|
|
52
|
+
|
|
53
|
+
'settings.data-store.label': 'Data Store',
|
|
54
|
+
|
|
55
|
+
'reset-data.label': 'Reset data (ERASES ALL DATA)',
|
|
56
|
+
'open-debug-panel.label': 'Show Debug',
|
|
57
|
+
'client.label': 'Client',
|
|
58
|
+
'config.label': 'Config',
|
|
59
|
+
'storage.label': 'Storage',
|
|
60
|
+
'logs.label': 'Logs',
|
|
61
|
+
'diagnostics.label': 'Diagnostics',
|
|
62
|
+
'tracing.label': 'Tracing',
|
|
63
|
+
'halo.label': 'HALO',
|
|
64
|
+
'identity.label': 'Identity',
|
|
65
|
+
'devices.label': 'Devices',
|
|
66
|
+
'keyring.label': 'Keyring',
|
|
67
|
+
'credentials.label': 'Credentials',
|
|
68
|
+
'echo.label': 'ECHO',
|
|
69
|
+
'spaces.label': 'Spaces',
|
|
70
|
+
'space.label': 'Space',
|
|
71
|
+
'feeds.label': 'Feeds',
|
|
72
|
+
'objects.label': 'Objects',
|
|
73
|
+
'schema.label': 'Schema',
|
|
74
|
+
'registry.label': 'Registry',
|
|
75
|
+
'automerge.label': 'Automerge',
|
|
76
|
+
'queues.label': 'Queues',
|
|
77
|
+
'members.label': 'Members',
|
|
78
|
+
'metadata.label': 'Metadata',
|
|
79
|
+
'mesh.label': 'MESH',
|
|
80
|
+
'signal.label': 'Signal',
|
|
81
|
+
'swarm.label': 'Swarm',
|
|
82
|
+
'network.label': 'Network',
|
|
83
|
+
'agent.label': 'Agent',
|
|
84
|
+
'dashboard.label': 'Dashboard',
|
|
85
|
+
'search.label': 'Search',
|
|
86
|
+
'edge.label': 'EDGE',
|
|
87
|
+
'workflows.label': 'Workflows',
|
|
88
|
+
'traces.label': 'Traces',
|
|
89
|
+
'testing.label': 'Testing',
|
|
90
|
+
// GitHub (deck-companion--github surface).
|
|
91
|
+
'github-loading.message': 'Loading…',
|
|
92
|
+
'github-unavailable.message': 'GitHub feed unavailable.',
|
|
93
|
+
'recent-prs.label_one': '{{count}} recent PR',
|
|
94
|
+
'recent-prs.label_other': '{{count}} recent PRs',
|
|
95
|
+
'view-on-github.button': 'View on GitHub',
|
|
71
96
|
},
|
|
72
97
|
},
|
|
73
98
|
},
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2023 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
// @import-as-namespace
|
|
6
|
+
|
|
7
|
+
import * as Schema from 'effect/Schema';
|
|
8
|
+
|
|
9
|
+
export const Settings = Schema.mutable(
|
|
10
|
+
Schema.Struct({
|
|
11
|
+
wireframe: Schema.optional(Schema.Boolean),
|
|
12
|
+
traceAll: Schema.optional(Schema.Boolean),
|
|
13
|
+
}),
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
export interface Settings extends Schema.Schema.Type<typeof Settings> {}
|