@dxos/plugin-debug 0.12.0-next-73daef452f1464b62efdbca75fb0067c1066f264 → 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.
- package/PLUGIN.mdl +241 -3
- package/README.md +27 -3
- package/dist/lib/Debug.mjs.map +1 -1
- package/dist/lib/DebugNodes.mjs +21 -2
- package/dist/lib/DebugNodes.mjs.map +1 -1
- package/dist/lib/DebugOperation.mjs +166 -2
- package/dist/lib/DebugOperation.mjs.map +1 -1
- package/dist/lib/DebugPlugin.mjs.map +1 -1
- package/dist/lib/DebugSurface.mjs +7 -2
- package/dist/lib/DebugSurface.mjs.map +1 -1
- package/dist/lib/IncidentSpace.mjs +2 -0
- package/dist/lib/PipelineSpace.mjs +2 -0
- package/dist/lib/ReviewSpace.mjs +2 -0
- package/dist/lib/StockfishSpace.mjs +2 -0
- package/dist/lib/TidepoolSpace.mjs +2 -0
- package/dist/lib/WeatherSpace.mjs +2 -0
- package/dist/lib/WorkerSpace.mjs +2 -0
- package/dist/lib/capabilities.browser.mjs +71 -0
- package/dist/lib/capabilities.browser.mjs.map +1 -0
- package/dist/lib/capabilities.mjs +17 -7
- package/dist/lib/capabilities.mjs.map +1 -1
- package/dist/lib/capabilities.node.mjs +13 -3
- package/dist/lib/capabilities.node.mjs.map +1 -1
- package/dist/lib/capabilities.tauri.mjs +71 -0
- package/dist/lib/capabilities.tauri.mjs.map +1 -0
- package/dist/lib/capabilities.workerd.mjs +3 -1
- package/dist/lib/capabilities.workerd.mjs.map +1 -1
- package/dist/lib/chunk-DebugConsole.mjs +241 -0
- package/dist/lib/chunk-DebugConsole.mjs.map +1 -0
- package/dist/lib/chunk-DebugObjectPanel.mjs +12 -16
- package/dist/lib/chunk-DebugObjectPanel.mjs.map +1 -1
- package/dist/lib/chunk-DebugPanelDrawer.mjs +48 -0
- package/dist/lib/chunk-DebugPanelDrawer.mjs.map +1 -0
- package/dist/lib/chunk-DebugPanelHeader.mjs +280 -0
- package/dist/lib/chunk-DebugPanelHeader.mjs.map +1 -0
- package/dist/lib/chunk-DebugPanelStatus.mjs +127 -0
- package/dist/lib/chunk-DebugPanelStatus.mjs.map +1 -0
- package/dist/lib/chunk-DebugSettings.mjs +81 -70
- package/dist/lib/chunk-DebugSettings.mjs.map +1 -1
- package/dist/lib/chunk-DebugSpaceObjectsPanel.mjs +21 -12
- package/dist/lib/chunk-DebugSpaceObjectsPanel.mjs.map +1 -1
- package/dist/lib/chunk-DebugStatus.mjs +12 -12
- package/dist/lib/chunk-DebugStatus.mjs.map +1 -1
- package/dist/lib/chunk-IncidentSpace.mjs +269 -0
- package/dist/lib/chunk-IncidentSpace.mjs.map +1 -0
- package/dist/lib/chunk-LoggerPanel.mjs +18 -0
- package/dist/lib/chunk-LoggerPanel.mjs.map +1 -0
- package/dist/lib/chunk-PLUGIN.mjs +6 -0
- package/dist/lib/chunk-PLUGIN.mjs.map +1 -0
- package/dist/lib/chunk-PipelineSpace.mjs +378 -0
- package/dist/lib/chunk-PipelineSpace.mjs.map +1 -0
- package/dist/lib/chunk-ReviewSpace.mjs +356 -0
- package/dist/lib/chunk-ReviewSpace.mjs.map +1 -0
- package/dist/lib/chunk-SpaceGenerator.mjs +107 -73
- package/dist/lib/chunk-SpaceGenerator.mjs.map +1 -1
- package/dist/lib/chunk-StatsPanel.mjs +28 -35
- package/dist/lib/chunk-StatsPanel.mjs.map +1 -1
- package/dist/lib/chunk-StockfishSpace.mjs +563 -0
- package/dist/lib/chunk-StockfishSpace.mjs.map +1 -0
- package/dist/lib/chunk-TidepoolSpace.mjs +544 -0
- package/dist/lib/chunk-TidepoolSpace.mjs.map +1 -0
- package/dist/lib/chunk-WeatherSpace.mjs +206 -0
- package/dist/lib/chunk-WeatherSpace.mjs.map +1 -0
- package/dist/lib/chunk-Wireframe.mjs +6 -6
- package/dist/lib/chunk-Wireframe.mjs.map +1 -1
- package/dist/lib/chunk-WorkerSpace.mjs +177 -0
- package/dist/lib/chunk-WorkerSpace.mjs.map +1 -0
- package/dist/lib/chunk-app-graph-builder.mjs +72 -40
- package/dist/lib/chunk-app-graph-builder.mjs.map +1 -1
- package/dist/lib/chunk-create-space-from-template.mjs +55 -0
- package/dist/lib/chunk-create-space-from-template.mjs.map +1 -0
- package/dist/lib/chunk-errors.mjs +13 -0
- package/dist/lib/chunk-errors.mjs.map +1 -0
- package/dist/lib/chunk-graph-retention.mjs +14 -0
- package/dist/lib/chunk-graph-retention.mjs.map +1 -0
- package/dist/lib/chunk-insert-lorem-ipsum.mjs +2 -2
- package/dist/lib/chunk-log-recording.mjs +29 -1
- package/dist/lib/chunk-log-recording.mjs.map +1 -1
- package/dist/lib/chunk-open-page.mjs +29 -0
- package/dist/lib/chunk-open-page.mjs.map +1 -0
- package/dist/lib/chunk-operation-handler.mjs +5 -0
- package/dist/lib/chunk-operation-handler.mjs.map +1 -1
- package/dist/lib/chunk-react-surface.mjs +73 -71
- package/dist/lib/chunk-react-surface.mjs.map +1 -1
- package/dist/lib/chunk-settings.mjs +2 -2
- package/dist/lib/chunk-settings.mjs.map +1 -1
- package/dist/lib/chunk-snapshot.mjs +170 -0
- package/dist/lib/chunk-snapshot.mjs.map +1 -0
- package/dist/lib/chunk-space-templates.mjs +21 -0
- package/dist/lib/chunk-space-templates.mjs.map +1 -0
- package/dist/lib/chunk-stats-panel.mjs +1 -1
- package/dist/lib/chunk-stats-panel.mjs.map +1 -1
- package/dist/lib/chunk-undo.mjs +17 -0
- package/dist/lib/chunk-undo.mjs.map +1 -0
- package/dist/lib/chunk-view-state.mjs +37 -0
- package/dist/lib/chunk-view-state.mjs.map +1 -0
- package/dist/lib/components.mjs +68 -28
- package/dist/lib/components.mjs.map +1 -1
- package/dist/lib/containers.mjs +5 -2
- package/dist/lib/containers.mjs.map +1 -1
- package/dist/lib/index.mjs +8 -2
- package/dist/lib/meta.mjs +3 -2
- package/dist/lib/meta.mjs.map +1 -1
- package/dist/lib/operations.mjs +7 -1
- package/dist/lib/operations.mjs.map +1 -1
- package/dist/lib/plugin.mjs +2 -2
- package/dist/lib/plugin.mjs.map +1 -1
- package/dist/lib/translations.mjs +13 -4
- package/dist/lib/translations.mjs.map +1 -1
- package/dist/types/scripts/build-template-archive.d.ts +2 -0
- package/dist/types/scripts/build-template-archive.d.ts.map +1 -0
- package/dist/types/src/DebugPlugin.d.ts +2 -2
- package/dist/types/src/DebugPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/DebugSurfaces.d.ts +4 -5
- package/dist/types/src/capabilities/DebugSurfaces.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts +31 -0
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder.test.d.ts +2 -0
- package/dist/types/src/capabilities/app-graph-builder.test.d.ts.map +1 -0
- package/dist/types/src/capabilities/gen/browser.d.ts +14 -0
- package/dist/types/src/capabilities/gen/browser.d.ts.map +1 -0
- package/dist/types/src/capabilities/gen/node.d.ts +2 -0
- package/dist/types/src/capabilities/gen/node.d.ts.map +1 -1
- package/dist/types/src/capabilities/gen/tauri.d.ts +14 -0
- package/dist/types/src/capabilities/gen/tauri.d.ts.map +1 -0
- package/dist/types/src/capabilities/gen/workerd.d.ts +2 -0
- package/dist/types/src/capabilities/gen/workerd.d.ts.map +1 -1
- package/dist/types/src/capabilities/graph-retention.d.ts +5 -0
- package/dist/types/src/capabilities/graph-retention.d.ts.map +1 -0
- package/dist/types/src/capabilities/index.d.ts +2 -0
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/log-recording.d.ts +4 -0
- package/dist/types/src/capabilities/log-recording.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/space-templates.d.ts +14 -0
- package/dist/types/src/capabilities/space-templates.d.ts.map +1 -0
- package/dist/types/src/components/SchemaTable/SchemaTable.d.ts +4 -3
- package/dist/types/src/components/SchemaTable/SchemaTable.d.ts.map +1 -1
- package/dist/types/src/components/SchemaTable/index.d.ts +1 -1
- package/dist/types/src/components/SchemaTable/index.d.ts.map +1 -1
- package/dist/types/src/components/SpaceGenerator/ObjectGenerator.d.ts +2 -1
- package/dist/types/src/components/SpaceGenerator/ObjectGenerator.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 +1 -1
- package/dist/types/src/components/SpaceGenerator/presets.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +2 -2
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/containers/DebugConsole/DebugConsole.d.ts +12 -0
- package/dist/types/src/containers/DebugConsole/DebugConsole.d.ts.map +1 -0
- package/dist/types/src/containers/DebugConsole/DebugConsole.stories.d.ts +103 -0
- package/dist/types/src/containers/DebugConsole/DebugConsole.stories.d.ts.map +1 -0
- package/dist/types/src/containers/DebugConsole/cli.d.ts +24 -0
- package/dist/types/src/containers/DebugConsole/cli.d.ts.map +1 -0
- package/dist/types/src/containers/DebugConsole/index.d.ts +2 -0
- package/dist/types/src/containers/DebugConsole/index.d.ts.map +1 -0
- package/dist/types/src/containers/DebugObjectPanel/DebugObjectPanel.d.ts +1 -1
- package/dist/types/src/containers/DebugObjectPanel/DebugObjectPanel.d.ts.map +1 -1
- package/dist/types/src/containers/DebugObjectPanel/index.d.ts +1 -1
- package/dist/types/src/containers/DebugObjectPanel/index.d.ts.map +1 -1
- package/dist/types/src/containers/DebugPanel/DebugPanel.d.ts +30 -0
- package/dist/types/src/containers/DebugPanel/DebugPanel.d.ts.map +1 -0
- package/dist/types/src/containers/DebugPanel/DebugPanel.stories.d.ts +126 -0
- package/dist/types/src/containers/DebugPanel/DebugPanel.stories.d.ts.map +1 -0
- package/dist/types/src/containers/DebugPanel/DebugPanelContext.d.ts +16 -0
- package/dist/types/src/containers/DebugPanel/DebugPanelContext.d.ts.map +1 -0
- package/dist/types/src/containers/DebugPanel/DebugPanelHeader.d.ts +14 -0
- package/dist/types/src/containers/DebugPanel/DebugPanelHeader.d.ts.map +1 -0
- package/dist/types/src/containers/DebugPanel/DebugPanelMain.d.ts +6 -0
- package/dist/types/src/containers/DebugPanel/DebugPanelMain.d.ts.map +1 -0
- package/dist/types/src/containers/DebugPanel/DebugPanelSidebar.d.ts +6 -0
- package/dist/types/src/containers/DebugPanel/DebugPanelSidebar.d.ts.map +1 -0
- package/dist/types/src/containers/DebugPanel/index.d.ts +7 -0
- package/dist/types/src/containers/DebugPanel/index.d.ts.map +1 -0
- package/dist/types/src/containers/DebugPanel/view-state.d.ts +46 -0
- package/dist/types/src/containers/DebugPanel/view-state.d.ts.map +1 -0
- package/dist/types/src/containers/DebugPanelDrawer/DebugPanelDrawer.d.ts +10 -0
- package/dist/types/src/containers/DebugPanelDrawer/DebugPanelDrawer.d.ts.map +1 -0
- package/dist/types/src/containers/DebugPanelDrawer/DebugPanelDrawer.stories.d.ts +114 -0
- package/dist/types/src/containers/DebugPanelDrawer/DebugPanelDrawer.stories.d.ts.map +1 -0
- package/dist/types/src/containers/DebugPanelDrawer/index.d.ts +2 -0
- package/dist/types/src/containers/DebugPanelDrawer/index.d.ts.map +1 -0
- package/dist/types/src/containers/DebugPanelStatus/DebugPanelStatus.d.ts +11 -0
- package/dist/types/src/containers/DebugPanelStatus/DebugPanelStatus.d.ts.map +1 -0
- package/dist/types/src/containers/DebugPanelStatus/DebugPanelStatus.stories.d.ts +107 -0
- package/dist/types/src/containers/DebugPanelStatus/DebugPanelStatus.stories.d.ts.map +1 -0
- package/dist/types/src/containers/DebugPanelStatus/index.d.ts +2 -0
- package/dist/types/src/containers/DebugPanelStatus/index.d.ts.map +1 -0
- package/dist/types/src/containers/DebugPortSettings/DebugPortSettings.d.ts.map +1 -1
- package/dist/types/src/containers/DebugPortSettings/DebugPortSettings.stories.d.ts +13 -4
- package/dist/types/src/containers/DebugPortSettings/DebugPortSettings.stories.d.ts.map +1 -1
- package/dist/types/src/containers/DebugPortSettings/index.d.ts +1 -1
- package/dist/types/src/containers/DebugPortSettings/index.d.ts.map +1 -1
- package/dist/types/src/containers/DebugSettings/DebugSettings.d.ts +2 -2
- package/dist/types/src/containers/DebugSettings/DebugSettings.d.ts.map +1 -1
- package/dist/types/src/containers/DebugSettings/DebugSettings.stories.d.ts +14 -5
- package/dist/types/src/containers/DebugSettings/DebugSettings.stories.d.ts.map +1 -1
- package/dist/types/src/containers/DebugSettings/index.d.ts +1 -1
- package/dist/types/src/containers/DebugSettings/index.d.ts.map +1 -1
- package/dist/types/src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.d.ts +1 -1
- package/dist/types/src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.d.ts.map +1 -1
- package/dist/types/src/containers/DebugSpaceObjectsPanel/index.d.ts +1 -1
- package/dist/types/src/containers/DebugSpaceObjectsPanel/index.d.ts.map +1 -1
- package/dist/types/src/containers/DebugStatus/index.d.ts +1 -1
- package/dist/types/src/containers/DebugStatus/index.d.ts.map +1 -1
- package/dist/types/src/containers/LoggerPanel/LoggerPanel.d.ts +6 -0
- package/dist/types/src/containers/LoggerPanel/LoggerPanel.d.ts.map +1 -0
- package/dist/types/src/containers/LoggerPanel/LoggerPanel.stories.d.ts +107 -0
- package/dist/types/src/containers/LoggerPanel/LoggerPanel.stories.d.ts.map +1 -0
- package/dist/types/src/containers/LoggerPanel/index.d.ts +2 -0
- package/dist/types/src/containers/LoggerPanel/index.d.ts.map +1 -0
- package/dist/types/src/containers/SpaceGenerator/SpaceGenerator.d.ts.map +1 -1
- package/dist/types/src/containers/SpaceGenerator/SpaceGenerator.stories.d.ts +13 -4
- package/dist/types/src/containers/SpaceGenerator/SpaceGenerator.stories.d.ts.map +1 -1
- package/dist/types/src/containers/SpaceGenerator/index.d.ts +1 -1
- package/dist/types/src/containers/SpaceGenerator/index.d.ts.map +1 -1
- package/dist/types/src/containers/StatsPanel/StatsPanel.d.ts +5 -1
- package/dist/types/src/containers/StatsPanel/StatsPanel.d.ts.map +1 -1
- package/dist/types/src/containers/StatsPanel/index.d.ts +1 -1
- package/dist/types/src/containers/StatsPanel/index.d.ts.map +1 -1
- package/dist/types/src/containers/Wireframe/Wireframe.d.ts +2 -2
- package/dist/types/src/containers/Wireframe/Wireframe.d.ts.map +1 -1
- package/dist/types/src/containers/Wireframe/index.d.ts +1 -1
- package/dist/types/src/containers/Wireframe/index.d.ts.map +1 -1
- package/dist/types/src/containers/index.d.ts +7 -1
- package/dist/types/src/containers/index.d.ts.map +1 -1
- package/dist/types/src/errors.d.ts +123 -0
- package/dist/types/src/errors.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +2 -2
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/operations/DebugOperationHandlerSet.d.ts.map +1 -1
- package/dist/types/src/operations/create-space-from-template.d.ts +5 -0
- package/dist/types/src/operations/create-space-from-template.d.ts.map +1 -0
- package/dist/types/src/operations/errors.d.ts +33 -0
- package/dist/types/src/operations/errors.d.ts.map +1 -0
- package/dist/types/src/operations/index.d.ts +1 -1
- package/dist/types/src/operations/index.d.ts.map +1 -1
- package/dist/types/src/operations/open-page.d.ts +5 -0
- package/dist/types/src/operations/open-page.d.ts.map +1 -0
- package/dist/types/src/operations/snapshot.d.ts +5 -0
- package/dist/types/src/operations/snapshot.d.ts.map +1 -0
- package/dist/types/src/operations/snapshot.test.d.ts +2 -0
- package/dist/types/src/operations/snapshot.test.d.ts.map +1 -0
- package/dist/types/src/operations/undo.d.ts +5 -0
- package/dist/types/src/operations/undo.d.ts.map +1 -0
- package/dist/types/src/operations/undo.test.d.ts +2 -0
- package/dist/types/src/operations/undo.test.d.ts.map +1 -0
- package/dist/types/src/plugin.d.ts.map +1 -1
- package/dist/types/src/samples/crm/PipelineSpace.d.ts +21 -0
- package/dist/types/src/samples/crm/PipelineSpace.d.ts.map +1 -0
- package/dist/types/src/samples/crm/PipelineSpace.test.d.ts +2 -0
- package/dist/types/src/samples/crm/PipelineSpace.test.d.ts.map +1 -0
- package/dist/types/src/samples/crm/accounts.d.ts +55 -0
- package/dist/types/src/samples/crm/accounts.d.ts.map +1 -0
- package/dist/types/src/samples/crm/inbox.d.ts +14 -0
- package/dist/types/src/samples/crm/inbox.d.ts.map +1 -0
- package/dist/types/src/samples/crm/pipeline.d.ts +9 -0
- package/dist/types/src/samples/crm/pipeline.d.ts.map +1 -0
- package/dist/types/src/samples/crm/util.d.ts +14 -0
- package/dist/types/src/samples/crm/util.d.ts.map +1 -0
- package/dist/types/src/samples/incident/IncidentSpace.d.ts +21 -0
- package/dist/types/src/samples/incident/IncidentSpace.d.ts.map +1 -0
- package/dist/types/src/samples/incident/IncidentSpace.test.d.ts +2 -0
- package/dist/types/src/samples/incident/IncidentSpace.test.d.ts.map +1 -0
- package/dist/types/src/samples/incident/docs.d.ts +14 -0
- package/dist/types/src/samples/incident/docs.d.ts.map +1 -0
- package/dist/types/src/samples/incident/project.d.ts +16 -0
- package/dist/types/src/samples/incident/project.d.ts.map +1 -0
- package/dist/types/src/samples/incident/tasks.d.ts +9 -0
- package/dist/types/src/samples/incident/tasks.d.ts.map +1 -0
- package/dist/types/src/samples/incident/util.d.ts +32 -0
- package/dist/types/src/samples/incident/util.d.ts.map +1 -0
- package/dist/types/src/samples/index.d.ts +8 -0
- package/dist/types/src/samples/index.d.ts.map +1 -0
- package/dist/types/src/samples/review/ReviewSpace.d.ts +19 -0
- package/dist/types/src/samples/review/ReviewSpace.d.ts.map +1 -0
- package/dist/types/src/samples/review/ReviewSpace.test.d.ts +2 -0
- package/dist/types/src/samples/review/ReviewSpace.test.d.ts.map +1 -0
- package/dist/types/src/samples/review/assets.d.ts +19 -0
- package/dist/types/src/samples/review/assets.d.ts.map +1 -0
- package/dist/types/src/samples/review/util.d.ts +4 -0
- package/dist/types/src/samples/review/util.d.ts.map +1 -0
- package/dist/types/src/samples/review/work.d.ts +15 -0
- package/dist/types/src/samples/review/work.d.ts.map +1 -0
- package/dist/types/src/samples/stockfish/StockfishSpace.d.ts +27 -0
- package/dist/types/src/samples/stockfish/StockfishSpace.d.ts.map +1 -0
- package/dist/types/src/samples/stockfish/StockfishSpace.test.d.ts +2 -0
- package/dist/types/src/samples/stockfish/StockfishSpace.test.d.ts.map +1 -0
- package/dist/types/src/samples/stockfish/docs.d.ts +8 -0
- package/dist/types/src/samples/stockfish/docs.d.ts.map +1 -0
- package/dist/types/src/samples/stockfish/game.d.ts +10 -0
- package/dist/types/src/samples/stockfish/game.d.ts.map +1 -0
- package/dist/types/src/samples/stockfish/project.d.ts +31 -0
- package/dist/types/src/samples/stockfish/project.d.ts.map +1 -0
- package/dist/types/src/samples/stockfish/run.test.d.ts +2 -0
- package/dist/types/src/samples/stockfish/run.test.d.ts.map +1 -0
- package/dist/types/src/samples/stockfish/skill.d.ts +8 -0
- package/dist/types/src/samples/stockfish/skill.d.ts.map +1 -0
- package/dist/types/src/samples/stockfish/tasks.d.ts +12 -0
- package/dist/types/src/samples/stockfish/tasks.d.ts.map +1 -0
- package/dist/types/src/samples/stockfish/util.d.ts +14 -0
- package/dist/types/src/samples/stockfish/util.d.ts.map +1 -0
- package/dist/types/src/samples/tidepool/TidepoolSpace.d.ts +22 -0
- package/dist/types/src/samples/tidepool/TidepoolSpace.d.ts.map +1 -0
- package/dist/types/src/samples/tidepool/TidepoolSpace.test.d.ts +2 -0
- package/dist/types/src/samples/tidepool/TidepoolSpace.test.d.ts.map +1 -0
- package/dist/types/src/samples/tidepool/docs.d.ts +12 -0
- package/dist/types/src/samples/tidepool/docs.d.ts.map +1 -0
- package/dist/types/src/samples/tidepool/project.d.ts +20 -0
- package/dist/types/src/samples/tidepool/project.d.ts.map +1 -0
- package/dist/types/src/samples/tidepool/tasks.d.ts +14 -0
- package/dist/types/src/samples/tidepool/tasks.d.ts.map +1 -0
- package/dist/types/src/samples/tidepool/team.d.ts +9 -0
- package/dist/types/src/samples/tidepool/team.d.ts.map +1 -0
- package/dist/types/src/samples/tidepool/util.d.ts +14 -0
- package/dist/types/src/samples/tidepool/util.d.ts.map +1 -0
- package/dist/types/src/samples/weather/WeatherSpace.d.ts +21 -0
- package/dist/types/src/samples/weather/WeatherSpace.d.ts.map +1 -0
- package/dist/types/src/samples/weather/WeatherSpace.test.d.ts +2 -0
- package/dist/types/src/samples/weather/WeatherSpace.test.d.ts.map +1 -0
- package/dist/types/src/samples/weather/project.d.ts +20 -0
- package/dist/types/src/samples/weather/project.d.ts.map +1 -0
- package/dist/types/src/samples/weather/skill.d.ts +12 -0
- package/dist/types/src/samples/weather/skill.d.ts.map +1 -0
- package/dist/types/src/samples/weather/tasks.d.ts +9 -0
- package/dist/types/src/samples/weather/tasks.d.ts.map +1 -0
- package/dist/types/src/samples/weather/util.d.ts +16 -0
- package/dist/types/src/samples/weather/util.d.ts.map +1 -0
- package/dist/types/src/samples/worker/WorkerSpace.d.ts +22 -0
- package/dist/types/src/samples/worker/WorkerSpace.d.ts.map +1 -0
- package/dist/types/src/samples/worker/WorkerSpace.test.d.ts +2 -0
- package/dist/types/src/samples/worker/WorkerSpace.test.d.ts.map +1 -0
- package/dist/types/src/samples/worker/project.d.ts +18 -0
- package/dist/types/src/samples/worker/project.d.ts.map +1 -0
- package/dist/types/src/samples/worker/tasks.d.ts +9 -0
- package/dist/types/src/samples/worker/tasks.d.ts.map +1 -0
- package/dist/types/src/samples/worker/util.d.ts +14 -0
- package/dist/types/src/samples/worker/util.d.ts.map +1 -0
- package/dist/types/src/stories/SpaceTemplates.stories.d.ts +114 -0
- package/dist/types/src/stories/SpaceTemplates.stories.d.ts.map +1 -0
- package/dist/types/src/testing/index.d.ts +3 -0
- package/dist/types/src/testing/index.d.ts.map +1 -0
- package/dist/types/src/testing/stub-drawer-plugin.d.ts +8 -0
- package/dist/types/src/testing/stub-drawer-plugin.d.ts.map +1 -0
- package/dist/types/src/testing/stub-tools-plugin.d.ts +19 -0
- package/dist/types/src/testing/stub-tools-plugin.d.ts.map +1 -0
- package/dist/types/src/translations.d.ts +13 -4
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/Debug.d.ts +2 -2
- package/dist/types/src/types/Debug.d.ts.map +1 -1
- package/dist/types/src/types/DebugNodes.d.ts +13 -1
- package/dist/types/src/types/DebugNodes.d.ts.map +1 -1
- package/dist/types/src/types/DebugOperation.d.ts +119 -0
- package/dist/types/src/types/DebugOperation.d.ts.map +1 -1
- package/dist/types/src/types/DebugSurface.d.ts +7 -0
- package/dist/types/src/types/DebugSurface.d.ts.map +1 -1
- package/dist/types/src/types/index.d.ts +6 -6
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dx.config.ts +3 -2
- package/package.json +129 -73
- package/scripts/build-template-archive.ts +65 -0
- package/src/DebugPlugin.ts +1 -1
- package/src/capabilities/DebugSurfaces.tsx +85 -71
- package/src/capabilities/app-graph-builder.test.ts +45 -0
- package/src/capabilities/app-graph-builder.ts +83 -46
- package/src/capabilities/gen/browser.ts +85 -0
- package/src/capabilities/gen/node.ts +15 -8
- package/src/capabilities/gen/tauri.ts +85 -0
- package/src/capabilities/gen/workerd.ts +11 -4
- package/src/capabilities/graph-retention.ts +23 -0
- package/src/capabilities/index.ts +18 -10
- package/src/capabilities/log-recording.ts +20 -1
- package/src/capabilities/operation-handler.ts +9 -0
- package/src/capabilities/react-surface.ts +33 -29
- package/src/capabilities/settings.ts +2 -2
- package/src/capabilities/space-templates.ts +25 -0
- package/src/capabilities/stats-panel.ts +1 -1
- package/src/components/SchemaTable/SchemaTable.tsx +44 -10
- package/src/components/SchemaTable/index.ts +1 -1
- package/src/components/SpaceGenerator/ObjectGenerator.tsx +22 -2
- package/src/components/SpaceGenerator/index.ts +2 -2
- package/src/components/SpaceGenerator/presets.ts +4 -4
- package/src/components/index.ts +2 -2
- package/src/containers/DebugConsole/DebugConsole.stories.tsx +29 -0
- package/src/containers/DebugConsole/DebugConsole.tsx +94 -0
- package/src/containers/DebugConsole/cli.ts +296 -0
- package/src/containers/DebugConsole/index.ts +5 -0
- package/src/containers/DebugObjectPanel/DebugObjectPanel.tsx +44 -44
- package/src/containers/DebugObjectPanel/index.ts +1 -1
- package/src/containers/DebugPanel/DebugPanel.stories.tsx +118 -0
- package/src/containers/DebugPanel/DebugPanel.tsx +72 -0
- package/src/containers/DebugPanel/DebugPanelContext.ts +33 -0
- package/src/containers/DebugPanel/DebugPanelHeader.tsx +54 -0
- package/src/containers/DebugPanel/DebugPanelMain.tsx +116 -0
- package/src/containers/DebugPanel/DebugPanelSidebar.tsx +123 -0
- package/src/containers/DebugPanel/index.ts +10 -0
- package/src/containers/DebugPanel/view-state.ts +60 -0
- package/src/containers/DebugPanelDrawer/DebugPanelDrawer.stories.tsx +92 -0
- package/src/containers/DebugPanelDrawer/DebugPanelDrawer.tsx +72 -0
- package/src/containers/DebugPanelDrawer/index.ts +5 -0
- package/src/containers/DebugPanelStatus/DebugPanelStatus.stories.tsx +119 -0
- package/src/containers/DebugPanelStatus/DebugPanelStatus.tsx +167 -0
- package/src/containers/DebugPanelStatus/index.ts +5 -0
- package/src/containers/DebugPortSettings/DebugPortSettings.stories.tsx +2 -2
- package/src/containers/DebugPortSettings/DebugPortSettings.tsx +33 -40
- package/src/containers/DebugPortSettings/index.ts +1 -1
- package/src/containers/DebugSettings/DebugSettings.stories.tsx +1 -1
- package/src/containers/DebugSettings/DebugSettings.tsx +71 -64
- package/src/containers/DebugSettings/index.ts +1 -1
- package/src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.tsx +39 -28
- package/src/containers/DebugSpaceObjectsPanel/index.ts +1 -1
- package/src/containers/DebugStatus/DebugStatus.tsx +10 -10
- package/src/containers/DebugStatus/index.ts +1 -1
- package/src/containers/LoggerPanel/LoggerPanel.stories.tsx +62 -0
- package/src/containers/LoggerPanel/LoggerPanel.tsx +28 -0
- package/src/containers/LoggerPanel/index.ts +5 -0
- package/src/containers/SpaceGenerator/SpaceGenerator.stories.tsx +8 -8
- package/src/containers/SpaceGenerator/SpaceGenerator.tsx +102 -73
- package/src/containers/SpaceGenerator/index.ts +1 -1
- package/src/containers/StatsPanel/StatsPanel.tsx +32 -31
- package/src/containers/StatsPanel/index.ts +1 -1
- package/src/containers/Wireframe/Wireframe.tsx +8 -7
- package/src/containers/Wireframe/index.ts +1 -1
- package/src/containers/index.ts +22 -9
- package/src/errors.ts +23 -0
- package/src/index.ts +2 -2
- package/src/meta.ts +1 -1
- package/src/operations/DebugOperationHandlerSet.ts +5 -1
- package/src/operations/create-space-from-template.ts +57 -0
- package/src/operations/errors.ts +8 -0
- package/src/operations/index.ts +1 -1
- package/src/operations/open-page.ts +51 -0
- package/src/operations/snapshot.test.ts +57 -0
- package/src/operations/snapshot.ts +243 -0
- package/src/operations/undo.test.ts +19 -0
- package/src/operations/undo.ts +28 -0
- package/src/plugin.tsx +4 -0
- package/src/samples/crm/PipelineSpace.test.ts +55 -0
- package/src/samples/crm/PipelineSpace.ts +52 -0
- package/src/samples/crm/accounts.ts +153 -0
- package/src/samples/crm/inbox.ts +158 -0
- package/src/samples/crm/pipeline.ts +70 -0
- package/src/samples/crm/util.ts +18 -0
- package/src/samples/incident/IncidentSpace.test.ts +68 -0
- package/src/samples/incident/IncidentSpace.ts +61 -0
- package/src/samples/incident/docs.ts +111 -0
- package/src/samples/incident/project.ts +61 -0
- package/src/samples/incident/tasks.ts +101 -0
- package/src/samples/incident/util.ts +24 -0
- package/src/samples/index.ts +11 -0
- package/src/samples/review/ReviewSpace.test.ts +89 -0
- package/src/samples/review/ReviewSpace.ts +47 -0
- package/src/samples/review/assets.ts +123 -0
- package/src/samples/review/util.ts +10 -0
- package/src/samples/review/work.ts +249 -0
- package/src/samples/stockfish/StockfishSpace.test.ts +129 -0
- package/src/samples/stockfish/StockfishSpace.ts +70 -0
- package/src/samples/stockfish/docs.ts +65 -0
- package/src/samples/stockfish/game.ts +47 -0
- package/src/samples/stockfish/project.ts +87 -0
- package/src/samples/stockfish/run.test.ts +193 -0
- package/src/samples/stockfish/skill.ts +154 -0
- package/src/samples/stockfish/tasks.ts +306 -0
- package/src/samples/stockfish/util.ts +17 -0
- package/src/samples/tidepool/TidepoolSpace.test.ts +61 -0
- package/src/samples/tidepool/TidepoolSpace.ts +65 -0
- package/src/samples/tidepool/docs.ts +140 -0
- package/src/samples/tidepool/project.ts +57 -0
- package/src/samples/tidepool/tasks.ts +252 -0
- package/src/samples/tidepool/team.ts +87 -0
- package/src/samples/tidepool/util.ts +18 -0
- package/src/samples/weather/WeatherSpace.test.ts +93 -0
- package/src/samples/weather/WeatherSpace.ts +59 -0
- package/src/samples/weather/project.ts +76 -0
- package/src/samples/weather/skill.ts +45 -0
- package/src/samples/weather/tasks.ts +98 -0
- package/src/samples/weather/util.ts +21 -0
- package/src/samples/worker/WorkerSpace.test.ts +102 -0
- package/src/samples/worker/WorkerSpace.ts +56 -0
- package/src/samples/worker/project.ts +72 -0
- package/src/samples/worker/tasks.ts +119 -0
- package/src/samples/worker/util.ts +17 -0
- package/src/stories/SpaceTemplates.stories.tsx +105 -0
- package/src/testing/index.ts +6 -0
- package/src/testing/stub-drawer-plugin.ts +65 -0
- package/src/testing/stub-tools-plugin.tsx +95 -0
- package/src/translations.ts +15 -6
- package/src/types/Debug.ts +2 -2
- package/src/types/DebugNodes.ts +21 -1
- package/src/types/DebugOperation.ts +206 -0
- package/src/types/DebugSurface.ts +7 -0
- package/src/types/index.ts +6 -6
- package/dist/lib/chunk-LogStatus.mjs +0 -44
- package/dist/lib/chunk-LogStatus.mjs.map +0 -1
- package/dist/types/src/containers/LogStatus/LogStatus.d.ts +0 -6
- package/dist/types/src/containers/LogStatus/LogStatus.d.ts.map +0 -1
- package/dist/types/src/containers/LogStatus/index.d.ts +0 -2
- package/dist/types/src/containers/LogStatus/index.d.ts.map +0 -1
- package/src/containers/LogStatus/LogStatus.tsx +0 -51
- package/src/containers/LogStatus/index.ts +0 -5
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { n as DebugPanel, t as DebugPanelHeader } from "./chunk-DebugPanelHeader.mjs";
|
|
2
|
+
import { n as debugPanelAspect, t as DEBUG_PANEL_CONTEXT } from "./chunk-view-state.mjs";
|
|
3
|
+
import { meta } from "#meta";
|
|
4
|
+
import { useCallback, useEffect, useRef, useState, useSyncExternalStore } from "react";
|
|
5
|
+
import * as Button from "@dxos/react-ui/Button";
|
|
6
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
import * as Hooks from "@dxos/app-framework/Hooks";
|
|
8
|
+
import * as LayoutOperation from "@dxos/app-toolkit/LayoutOperation";
|
|
9
|
+
import * as UiHooks from "@dxos/react-ui/Hooks";
|
|
10
|
+
import { getDebugPortController } from "@dxos/react-client/devtools";
|
|
11
|
+
import { useViewState, useViewStateActions } from "@dxos/react-ui-attention";
|
|
12
|
+
import * as StatusBar from "@dxos/plugin-status-bar/StatusBar";
|
|
13
|
+
import * as FloatingPanel from "@dxos/react-ui/FloatingPanel";
|
|
14
|
+
//#region src/containers/DebugPanelStatus/DebugPanelStatus.tsx
|
|
15
|
+
/** Room for the log table to breathe; the console fits itself to whatever it is given. */
|
|
16
|
+
var DEFAULT_SIZE = {
|
|
17
|
+
width: 1024,
|
|
18
|
+
height: 384
|
|
19
|
+
};
|
|
20
|
+
var MIN_SIZE = {
|
|
21
|
+
width: 480,
|
|
22
|
+
height: 240
|
|
23
|
+
};
|
|
24
|
+
/** Clear of the status bar the panel opens from. */
|
|
25
|
+
var MARGIN = 8;
|
|
26
|
+
/**
|
|
27
|
+
* Status-bar button showing the debug panel: docked, it toggles the deck's bottom drawer; floating,
|
|
28
|
+
* it opens the panel as a window over the whole app — dragged, resized, folded to its title bar as
|
|
29
|
+
* the session needs, and left where it was put across reloads. The red dot marks a live agent debug
|
|
30
|
+
* port — an agent can evaluate code in this page — so it must be visible without opening settings.
|
|
31
|
+
*/
|
|
32
|
+
var DebugPanelStatus = ({ controller = getDebugPortController() }) => {
|
|
33
|
+
const { t } = UiHooks.useTranslation(meta.profile.key);
|
|
34
|
+
const subscribe = useCallback((listener) => controller.subscribe(listener), [controller]);
|
|
35
|
+
const getStatus = useCallback(() => controller.getStatus(), [controller]);
|
|
36
|
+
const status = useSyncExternalStore(subscribe, getStatus);
|
|
37
|
+
const { invokePromise } = Hooks.useOperationInvoker();
|
|
38
|
+
const { position, size = DEFAULT_SIZE, mode = "docked" } = useViewState(debugPanelAspect, DEBUG_PANEL_CONTEXT);
|
|
39
|
+
const { update } = useViewStateActions(debugPanelAspect, DEBUG_PANEL_CONTEXT);
|
|
40
|
+
const label = status.running ? t("debug-port-status.running.label") : t("open-debug-panel.label");
|
|
41
|
+
const [floatingOpen, setFloatingOpen] = useState(false);
|
|
42
|
+
const previousModeRef = useRef(mode);
|
|
43
|
+
useEffect(() => {
|
|
44
|
+
if (previousModeRef.current === "docked" && mode === "floating") setFloatingOpen(true);
|
|
45
|
+
previousModeRef.current = mode;
|
|
46
|
+
}, [mode]);
|
|
47
|
+
const handleToggleDrawer = useCallback(() => void invokePromise(LayoutOperation.UpdateDrawer, { state: "toggle" }), [invokePromise]);
|
|
48
|
+
const handleModeChange = useCallback((next) => {
|
|
49
|
+
setFloatingOpen(false);
|
|
50
|
+
update((prev) => ({
|
|
51
|
+
...prev,
|
|
52
|
+
mode: next
|
|
53
|
+
}));
|
|
54
|
+
if (next === "docked") invokePromise(LayoutOperation.UpdateDrawer, { state: "open" });
|
|
55
|
+
}, [update, invokePromise]);
|
|
56
|
+
const handlePositionChangeEnd = useCallback(({ position }) => update((prev) => ({
|
|
57
|
+
...prev,
|
|
58
|
+
position
|
|
59
|
+
})), [update]);
|
|
60
|
+
const handleSizeChangeEnd = useCallback(({ size }) => update((prev) => ({
|
|
61
|
+
...prev,
|
|
62
|
+
size
|
|
63
|
+
})), [update]);
|
|
64
|
+
const getAnchorPosition = useCallback(({ triggerRect, boundaryRect }) => {
|
|
65
|
+
if (position) return position;
|
|
66
|
+
const bounds = boundaryRect ?? new DOMRect(0, 0, window.innerWidth, window.innerHeight);
|
|
67
|
+
const bottom = triggerRect?.top ?? bounds.bottom;
|
|
68
|
+
return {
|
|
69
|
+
x: Math.max(0, bounds.left + (bounds.width - size.width) / 2),
|
|
70
|
+
y: Math.max(0, bottom - size.height - MARGIN)
|
|
71
|
+
};
|
|
72
|
+
}, [position, size]);
|
|
73
|
+
return /* @__PURE__ */ jsxs(FloatingPanel.Root, {
|
|
74
|
+
open: mode === "floating" && floatingOpen,
|
|
75
|
+
onOpenChange: ({ open }) => setFloatingOpen(open),
|
|
76
|
+
defaultSize: size,
|
|
77
|
+
minSize: MIN_SIZE,
|
|
78
|
+
getAnchorPosition,
|
|
79
|
+
persistRect: true,
|
|
80
|
+
closeOnEscape: true,
|
|
81
|
+
onPositionChangeEnd: handlePositionChangeEnd,
|
|
82
|
+
onSizeChangeEnd: handleSizeChangeEnd,
|
|
83
|
+
children: [/* @__PURE__ */ jsxs(StatusBar.Item, {
|
|
84
|
+
classNames: "relative",
|
|
85
|
+
children: [mode === "floating" ? /* @__PURE__ */ jsx(FloatingPanel.Trigger, {
|
|
86
|
+
asChild: true,
|
|
87
|
+
children: /* @__PURE__ */ jsx(Button.Root, {
|
|
88
|
+
variant: "ghost",
|
|
89
|
+
icon: "ph--terminal-window--regular",
|
|
90
|
+
iconOnly: true,
|
|
91
|
+
label
|
|
92
|
+
})
|
|
93
|
+
}) : /* @__PURE__ */ jsx(Button.Root, {
|
|
94
|
+
variant: "ghost",
|
|
95
|
+
icon: "ph--terminal-window--regular",
|
|
96
|
+
iconOnly: true,
|
|
97
|
+
label,
|
|
98
|
+
onClick: handleToggleDrawer
|
|
99
|
+
}), status.running && /* @__PURE__ */ jsx("span", {
|
|
100
|
+
role: "status",
|
|
101
|
+
"aria-label": t("debug-port-status.running.label"),
|
|
102
|
+
"data-testid": "debugPlugin.portIndicator",
|
|
103
|
+
className: "absolute top-0.5 right-0.5 w-2 h-2 rounded-full bg-red-500 pointer-events-none"
|
|
104
|
+
})]
|
|
105
|
+
}), /* @__PURE__ */ jsx(FloatingPanel.Content, { children: /* @__PURE__ */ jsxs(DebugPanel.Root, { children: [/* @__PURE__ */ jsxs(FloatingPanel.Header, {
|
|
106
|
+
classNames: "pl-1",
|
|
107
|
+
children: [/* @__PURE__ */ jsx(FloatingPanel.DragTrigger, { children: /* @__PURE__ */ jsx(FloatingPanel.Title, { children: t("debug-panel.title") }) }), /* @__PURE__ */ jsxs(FloatingPanel.Control, { children: [
|
|
108
|
+
/* @__PURE__ */ jsx(DebugPanelHeader, {
|
|
109
|
+
mode,
|
|
110
|
+
onModeChange: handleModeChange,
|
|
111
|
+
size: "sm"
|
|
112
|
+
}),
|
|
113
|
+
/* @__PURE__ */ jsx(FloatingPanel.StageTrigger, { stage: "minimized" }),
|
|
114
|
+
/* @__PURE__ */ jsx(FloatingPanel.StageTrigger, { stage: "default" }),
|
|
115
|
+
/* @__PURE__ */ jsx(FloatingPanel.CloseTrigger, {})
|
|
116
|
+
] })]
|
|
117
|
+
}), /* @__PURE__ */ jsx(FloatingPanel.Body, {
|
|
118
|
+
classNames: "grid",
|
|
119
|
+
children: /* @__PURE__ */ jsx(DebugPanel.Body, {})
|
|
120
|
+
})] }) })]
|
|
121
|
+
});
|
|
122
|
+
};
|
|
123
|
+
DebugPanelStatus.displayName = "DebugPanelStatus";
|
|
124
|
+
//#endregion
|
|
125
|
+
export { DebugPanelStatus };
|
|
126
|
+
|
|
127
|
+
//# sourceMappingURL=chunk-DebugPanelStatus.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-DebugPanelStatus.mjs","names":[],"sources":["../../src/containers/DebugPanelStatus/DebugPanelStatus.tsx"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useRef, useState, useSyncExternalStore } from 'react';\n\nimport * as Hooks from '@dxos/app-framework/Hooks';\nimport * as LayoutOperation from '@dxos/app-toolkit/LayoutOperation';\nimport * as StatusBar from '@dxos/plugin-status-bar/StatusBar';\nimport { type DebugPortController, getDebugPortController } from '@dxos/react-client/devtools';\nimport { useViewState, useViewStateActions } from '@dxos/react-ui-attention';\nimport * as Button from '@dxos/react-ui/Button';\nimport * as FloatingPanel from '@dxos/react-ui/FloatingPanel';\nimport * as UiHooks from '@dxos/react-ui/Hooks';\n\nimport { meta } from '#meta';\n\nimport {\n DEBUG_PANEL_CONTEXT,\n DebugPanel,\n DebugPanelHeader,\n type DebugPanelMode,\n debugPanelAspect,\n} from '../DebugPanel/index.ts';\n\n/** Room for the log table to breathe; the console fits itself to whatever it is given. */\nconst DEFAULT_SIZE: FloatingPanel.Size = { width: 1024, height: 384 };\n\nconst MIN_SIZE: FloatingPanel.Size = { width: 480, height: 240 };\n\n/** Clear of the status bar the panel opens from. */\nconst MARGIN = 8;\n\nexport type DebugPanelStatusProps = {\n /** Injectable for stories/tests; defaults to the page-wide controller. */\n controller?: DebugPortController;\n};\n\n/**\n * Status-bar button showing the debug panel: docked, it toggles the deck's bottom drawer; floating,\n * it opens the panel as a window over the whole app — dragged, resized, folded to its title bar as\n * the session needs, and left where it was put across reloads. The red dot marks a live agent debug\n * port — an agent can evaluate code in this page — so it must be visible without opening settings.\n */\nexport const DebugPanelStatus = ({ controller = getDebugPortController() }: DebugPanelStatusProps) => {\n const { t } = UiHooks.useTranslation(meta.profile.key);\n const subscribe = useCallback((listener: () => void) => controller.subscribe(listener), [controller]);\n const getStatus = useCallback(() => controller.getStatus(), [controller]);\n const status = useSyncExternalStore(subscribe, getStatus);\n const { invokePromise } = Hooks.useOperationInvoker();\n\n const { position, size = DEFAULT_SIZE, mode = 'docked' } = useViewState(debugPanelAspect, DEBUG_PANEL_CONTEXT);\n const { update } = useViewStateActions(debugPanelAspect, DEBUG_PANEL_CONTEXT);\n const label = status.running ? t('debug-port-status.running.label') : t('open-debug-panel.label');\n\n // Owned here rather than by the window so the drawer's float control can open it: the drawer\n // only flips the persisted mode, and a docked-to-floating flip while mounted is that request.\n const [floatingOpen, setFloatingOpen] = useState(false);\n const previousModeRef = useRef(mode);\n useEffect(() => {\n if (previousModeRef.current === 'docked' && mode === 'floating') {\n setFloatingOpen(true);\n }\n previousModeRef.current = mode;\n }, [mode]);\n\n const handleToggleDrawer = useCallback(\n () => void invokePromise(LayoutOperation.UpdateDrawer, { state: 'toggle' }),\n [invokePromise],\n );\n // Docking moves the panel: the window closes before the drawer opens so the two never show at once.\n const handleModeChange = useCallback(\n (next: DebugPanelMode) => {\n setFloatingOpen(false);\n update((prev) => ({ ...prev, mode: next }));\n if (next === 'docked') {\n void invokePromise(LayoutOperation.UpdateDrawer, { state: 'open' });\n }\n },\n [update, invokePromise],\n );\n const handlePositionChangeEnd = useCallback(\n ({ position }: { position: FloatingPanel.Point }) => update((prev) => ({ ...prev, position })),\n [update],\n );\n\n const handleSizeChangeEnd = useCallback(\n ({ size }: { size: FloatingPanel.Size }) => update((prev) => ({ ...prev, size })),\n [update],\n );\n // First opening: centred above the status bar, where the popover it replaces used to sit. A\n // persisted position wins from then on.\n const getAnchorPosition = useCallback(\n ({ triggerRect, boundaryRect }: { triggerRect: DOMRect | null; boundaryRect: DOMRect | null }) => {\n if (position) {\n return position;\n }\n const bounds = boundaryRect ?? new DOMRect(0, 0, window.innerWidth, window.innerHeight);\n const bottom = triggerRect?.top ?? bounds.bottom;\n return {\n x: Math.max(0, bounds.left + (bounds.width - size.width) / 2),\n y: Math.max(0, bottom - size.height - MARGIN),\n };\n },\n [position, size],\n );\n\n return (\n <FloatingPanel.Root\n open={mode === 'floating' && floatingOpen}\n onOpenChange={({ open }) => setFloatingOpen(open)}\n defaultSize={size}\n minSize={MIN_SIZE}\n getAnchorPosition={getAnchorPosition}\n persistRect\n closeOnEscape\n onPositionChangeEnd={handlePositionChangeEnd}\n onSizeChangeEnd={handleSizeChangeEnd}\n >\n {/* IconButton is the direct trigger child so the trigger ref/handlers/ARIA attach to the button, not the container. */}\n <StatusBar.Item classNames='relative'>\n {mode === 'floating' ? (\n <FloatingPanel.Trigger asChild>\n <Button.Root variant='ghost' icon='ph--terminal-window--regular' iconOnly label={label} />\n </FloatingPanel.Trigger>\n ) : (\n <Button.Root\n variant='ghost'\n icon='ph--terminal-window--regular'\n iconOnly\n label={label}\n onClick={handleToggleDrawer}\n />\n )}\n {status.running && (\n <span\n role='status'\n aria-label={t('debug-port-status.running.label')}\n data-testid='debugPlugin.portIndicator'\n className='absolute top-0.5 right-0.5 w-2 h-2 rounded-full bg-red-500 pointer-events-none'\n />\n )}\n </StatusBar.Item>\n <FloatingPanel.Content>\n <DebugPanel.Root>\n <FloatingPanel.Header classNames='pl-1'>\n <FloatingPanel.DragTrigger>\n <FloatingPanel.Title>{t('debug-panel.title')}</FloatingPanel.Title>\n </FloatingPanel.DragTrigger>\n {/* Fold and restore only: a debug panel over the whole app is a window the reader would resize. */}\n <FloatingPanel.Control>\n <DebugPanelHeader mode={mode} onModeChange={handleModeChange} size='sm' />\n <FloatingPanel.StageTrigger stage='minimized' />\n <FloatingPanel.StageTrigger stage='default' />\n <FloatingPanel.CloseTrigger />\n </FloatingPanel.Control>\n </FloatingPanel.Header>\n <FloatingPanel.Body classNames='grid'>\n <DebugPanel.Body />\n </FloatingPanel.Body>\n </DebugPanel.Root>\n </FloatingPanel.Content>\n </FloatingPanel.Root>\n );\n};\n\nDebugPanelStatus.displayName = 'DebugPanelStatus';\n"],"mappings":"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"}
|
|
@@ -1,18 +1,24 @@
|
|
|
1
1
|
import { Settings } from "#types";
|
|
2
2
|
import { meta } from "#meta";
|
|
3
|
+
import { log } from "@dxos/log";
|
|
4
|
+
import { gzip, setDeep } from "@dxos/util";
|
|
3
5
|
import { useCallback, useEffect, useMemo, useState, useSyncExternalStore } from "react";
|
|
4
|
-
import
|
|
5
|
-
import { Fragment
|
|
6
|
-
import { setDeep } from "@dxos/util";
|
|
6
|
+
import * as Button from "@dxos/react-ui/Button";
|
|
7
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
7
8
|
import { useClient } from "@dxos/react-client";
|
|
8
|
-
import
|
|
9
|
+
import * as Hooks from "@dxos/react-ui/Hooks";
|
|
10
|
+
import { getDebugPortController } from "@dxos/react-client/devtools";
|
|
9
11
|
import * as AppSpace from "@dxos/app-toolkit/AppSpace";
|
|
10
12
|
import { SaveConfig, Storage, defs } from "@dxos/config";
|
|
11
|
-
import { log } from "@dxos/log";
|
|
12
13
|
import { MANUAL_LOG_EXPORT_MAX_BYTES } from "@dxos/log-store-idb";
|
|
13
14
|
import { Form } from "@dxos/react-ui-form";
|
|
15
|
+
import * as Input from "@dxos/react-ui/Input";
|
|
16
|
+
import * as Select from "@dxos/react-ui/Select";
|
|
17
|
+
import * as UiToast from "@dxos/react-ui/Toast";
|
|
14
18
|
import { TRACE_ALL_KEY } from "@dxos/tracing";
|
|
15
|
-
import {
|
|
19
|
+
import { Logger } from "@dxos/react-ui-debug";
|
|
20
|
+
import * as Field from "@dxos/react-ui/Field";
|
|
21
|
+
import * as Layout from "@dxos/react-ui/Layout";
|
|
16
22
|
//#region src/containers/DebugPortSettings/DebugPortSettings.tsx
|
|
17
23
|
/**
|
|
18
24
|
* Scopes the panel to the controller's own entries.
|
|
@@ -29,25 +35,23 @@ var CONTROLLER_FILE = "devtools/debug-port-controller";
|
|
|
29
35
|
* flipped, the session id is regenerated on every activation, and nothing survives a reload.
|
|
30
36
|
*/
|
|
31
37
|
var DebugPortSettings = ({ controller = getDebugPortController(), disabled }) => {
|
|
32
|
-
const { t } = useTranslation(meta.profile.key);
|
|
38
|
+
const { t } = Hooks.useTranslation(meta.profile.key);
|
|
33
39
|
const subscribe = useCallback((listener) => controller.subscribe(listener), [controller]);
|
|
34
40
|
const getStatus = useCallback(() => controller.getStatus(), [controller]);
|
|
35
41
|
const status = useSyncExternalStore(subscribe, getStatus);
|
|
36
42
|
const handleToggle = useCallback((checked) => checked ? controller.start({ persist: true }) : controller.stop(), [controller]);
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
}, [status.session]);
|
|
40
|
-
return /* @__PURE__ */ jsxs(Form.Section, {
|
|
41
|
-
title: t("settings.debug-port.section.label"),
|
|
43
|
+
return /* @__PURE__ */ jsxs(Form.FieldSet, {
|
|
44
|
+
label: t("settings.debug-port.section.label"),
|
|
42
45
|
description: t("settings.debug-port.section.description"),
|
|
43
|
-
children: [/* @__PURE__ */ jsx(Form.
|
|
46
|
+
children: [/* @__PURE__ */ jsx(Form.Field, {
|
|
47
|
+
standalone: true,
|
|
44
48
|
label: t("settings.debug-port.label"),
|
|
45
49
|
description: t("settings.debug-port.description"),
|
|
46
|
-
children: /* @__PURE__ */ jsxs(Flex, {
|
|
50
|
+
children: /* @__PURE__ */ jsxs(Layout.Flex, {
|
|
47
51
|
gap: "md",
|
|
48
52
|
align: "center",
|
|
49
53
|
children: [status.running && /* @__PURE__ */ jsxs("span", {
|
|
50
|
-
className: "text-sm text-
|
|
54
|
+
className: "text-sm text-fg-muted",
|
|
51
55
|
children: [
|
|
52
56
|
t("settings.debug-port.running.label"),
|
|
53
57
|
" ",
|
|
@@ -56,38 +60,31 @@ var DebugPortSettings = ({ controller = getDebugPortController(), disabled }) =>
|
|
|
56
60
|
children: status.origin
|
|
57
61
|
})
|
|
58
62
|
]
|
|
59
|
-
}), /* @__PURE__ */ jsx(
|
|
63
|
+
}), /* @__PURE__ */ jsx(Field.Root, { children: /* @__PURE__ */ jsx(Input.Switch, {
|
|
60
64
|
checked: status.running,
|
|
61
65
|
disabled,
|
|
62
|
-
onCheckedChange: handleToggle
|
|
66
|
+
onCheckedChange: ({ checked }) => handleToggle(checked)
|
|
63
67
|
}) })]
|
|
64
68
|
})
|
|
65
|
-
}), status.running && /* @__PURE__ */ jsxs(Fragment
|
|
69
|
+
}), status.running && /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(Form.Field, {
|
|
66
70
|
standalone: true,
|
|
67
71
|
label: t("settings.debug-port.session.label"),
|
|
68
72
|
description: t("settings.debug-port.session.description"),
|
|
69
|
-
children: /* @__PURE__ */
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
}), /* @__PURE__ */ jsx(IconButton, {
|
|
76
|
-
icon: "ph--copy--regular",
|
|
77
|
-
iconOnly: true,
|
|
78
|
-
label: t("settings.debug-port.copy-session.label"),
|
|
79
|
-
onClick: handleCopy
|
|
80
|
-
})]
|
|
73
|
+
children: /* @__PURE__ */ jsx(Input.Root, {
|
|
74
|
+
value: status.session ?? "",
|
|
75
|
+
disabled: true,
|
|
76
|
+
variant: "mono",
|
|
77
|
+
copyable: true,
|
|
78
|
+
"aria-label": t("settings.debug-port.session.label")
|
|
81
79
|
})
|
|
82
|
-
}), /* @__PURE__ */ jsx(Form.
|
|
80
|
+
}), /* @__PURE__ */ jsx(Form.Field, {
|
|
83
81
|
standalone: true,
|
|
84
82
|
label: t("settings.debug-port.log.label"),
|
|
85
|
-
classNames: "md:grid-cols-1 md:[grid-template-areas:\"header\"\"description\"\"control\"\"validation\"]",
|
|
86
83
|
children: /* @__PURE__ */ jsx(Logger.Root, {
|
|
87
84
|
rowFilter: isDebugPortRow,
|
|
88
85
|
children: /* @__PURE__ */ jsx(Logger.Content, {
|
|
89
86
|
classNames: "max-h-[16lh]",
|
|
90
|
-
children: /* @__PURE__ */ jsx(Logger.List, {})
|
|
87
|
+
children: /* @__PURE__ */ jsx(Logger.List, { checkable: false })
|
|
91
88
|
})
|
|
92
89
|
})
|
|
93
90
|
})] })]
|
|
@@ -101,10 +98,10 @@ var StorageAdapters = {
|
|
|
101
98
|
opfs: defs.Runtime_Client_Storage_StorageDriver.WEBFS,
|
|
102
99
|
idb: defs.Runtime_Client_Storage_StorageDriver.IDB
|
|
103
100
|
};
|
|
104
|
-
var DebugSettings = ({ settings, onSettingsChange, logStore, onUpload }) => {
|
|
105
|
-
const { t } = useTranslation(meta.profile.key);
|
|
101
|
+
var DebugSettings = ({ settings, onSettingsChange, scope, logStore, onUpload }) => {
|
|
102
|
+
const { t } = Hooks.useTranslation(meta.profile.key);
|
|
106
103
|
const [toast, setToast] = useState();
|
|
107
|
-
const download = useFileDownload();
|
|
104
|
+
const download = Hooks.useFileDownload();
|
|
108
105
|
const [storageConfig, setStorageConfig] = useState({});
|
|
109
106
|
const client = useClient();
|
|
110
107
|
useEffect(() => {
|
|
@@ -126,7 +123,7 @@ var DebugSettings = ({ settings, onSettingsChange, logStore, onUpload }) => {
|
|
|
126
123
|
log.error("no default space available for upload", void 0, {
|
|
127
124
|
"~LogMeta": "~LogMeta",
|
|
128
125
|
F: __dxlog_file,
|
|
129
|
-
L:
|
|
126
|
+
L: 77,
|
|
130
127
|
S: void 0
|
|
131
128
|
});
|
|
132
129
|
return;
|
|
@@ -136,7 +133,7 @@ var DebugSettings = ({ settings, onSettingsChange, logStore, onUpload }) => {
|
|
|
136
133
|
log.error("diagnostics failed to upload to IPFS", void 0, {
|
|
137
134
|
"~LogMeta": "~LogMeta",
|
|
138
135
|
F: __dxlog_file,
|
|
139
|
-
L:
|
|
136
|
+
L: 82,
|
|
140
137
|
S: void 0
|
|
141
138
|
});
|
|
142
139
|
return;
|
|
@@ -154,7 +151,7 @@ var DebugSettings = ({ settings, onSettingsChange, logStore, onUpload }) => {
|
|
|
154
151
|
log.info("diagnostics", { url }, {
|
|
155
152
|
"~LogMeta": "~LogMeta",
|
|
156
153
|
F: __dxlog_file,
|
|
157
|
-
L:
|
|
154
|
+
L: 97,
|
|
158
155
|
S: void 0
|
|
159
156
|
});
|
|
160
157
|
}
|
|
@@ -166,8 +163,8 @@ var DebugSettings = ({ settings, onSettingsChange, logStore, onUpload }) => {
|
|
|
166
163
|
t
|
|
167
164
|
]);
|
|
168
165
|
const handleDownloadLogs = useCallback(async () => {
|
|
169
|
-
const file = await logStore.exportBlob({ maxSize: MANUAL_LOG_EXPORT_MAX_BYTES });
|
|
170
|
-
const fileName = `composer-logs-${(/* @__PURE__ */ new Date()).toISOString().slice(0, 19).replace(/:/g, "-")}.ndjson`;
|
|
166
|
+
const file = await gzip(await logStore.exportBlob({ maxSize: MANUAL_LOG_EXPORT_MAX_BYTES }));
|
|
167
|
+
const fileName = `composer-logs-${(/* @__PURE__ */ new Date()).toISOString().slice(0, 19).replace(/:/g, "-")}.ndjson.gz`;
|
|
171
168
|
download(file, fileName);
|
|
172
169
|
}, [download, logStore]);
|
|
173
170
|
const handleRepair = useCallback(async () => {
|
|
@@ -220,85 +217,99 @@ var DebugSettings = ({ settings, onSettingsChange, logStore, onUpload }) => {
|
|
|
220
217
|
readonly: !onSettingsChange,
|
|
221
218
|
children: /* @__PURE__ */ jsx(Form.Viewport, {
|
|
222
219
|
scroll: true,
|
|
223
|
-
children: /* @__PURE__ */ jsxs(Form.Content, { children: [/* @__PURE__ */ jsxs(Form.
|
|
224
|
-
|
|
220
|
+
children: /* @__PURE__ */ jsxs(Form.Content, { children: [/* @__PURE__ */ jsxs(Form.FieldSet, {
|
|
221
|
+
label: meta.profile.name ?? meta.profile.key,
|
|
222
|
+
actions: scope,
|
|
225
223
|
children: [
|
|
226
|
-
/* @__PURE__ */ jsx(Form.
|
|
224
|
+
/* @__PURE__ */ jsx(Form.Field, {
|
|
227
225
|
label: t("settings.wireframe.label"),
|
|
228
226
|
description: t("settings.wireframe.description"),
|
|
229
|
-
children: /* @__PURE__ */ jsx(Input.
|
|
227
|
+
children: /* @__PURE__ */ jsx(Input.Switch, {
|
|
230
228
|
disabled: !onSettingsChange,
|
|
231
229
|
checked: settings.wireframe,
|
|
232
|
-
onCheckedChange: handleWireframeChange
|
|
233
|
-
})
|
|
230
|
+
onCheckedChange: ({ checked }) => handleWireframeChange(checked)
|
|
231
|
+
})
|
|
234
232
|
}),
|
|
235
|
-
/* @__PURE__ */ jsx(Form.
|
|
233
|
+
/* @__PURE__ */ jsx(Form.Field, {
|
|
236
234
|
label: t("settings.trace-all.label"),
|
|
237
235
|
description: t("settings.trace-all.description"),
|
|
238
|
-
children: /* @__PURE__ */ jsx(Input.
|
|
236
|
+
children: /* @__PURE__ */ jsx(Input.Switch, {
|
|
239
237
|
disabled: !onSettingsChange,
|
|
240
238
|
checked: traceAll,
|
|
241
|
-
onCheckedChange: handleTraceAllChange
|
|
242
|
-
})
|
|
239
|
+
onCheckedChange: ({ checked }) => handleTraceAllChange(checked)
|
|
240
|
+
})
|
|
243
241
|
}),
|
|
244
|
-
/* @__PURE__ */ jsx(Form.
|
|
242
|
+
/* @__PURE__ */ jsx(Form.Field, {
|
|
243
|
+
standalone: true,
|
|
245
244
|
label: t("settings.tracing-panel.label"),
|
|
246
245
|
description: t("settings.tracing-panel.description"),
|
|
247
|
-
children: /* @__PURE__ */ jsx(
|
|
246
|
+
children: /* @__PURE__ */ jsx(Button.Root, {
|
|
248
247
|
icon: "ph--arrow-square-out--regular",
|
|
249
248
|
iconOnly: true,
|
|
250
249
|
label: t("settings.tracing-panel.label"),
|
|
251
250
|
onClick: handleOpenTracingPanel
|
|
252
251
|
})
|
|
253
252
|
}),
|
|
254
|
-
/* @__PURE__ */ jsx(Form.
|
|
253
|
+
/* @__PURE__ */ jsx(Form.Field, {
|
|
254
|
+
standalone: true,
|
|
255
255
|
label: t("settings.download-diagnostics.label"),
|
|
256
256
|
description: t("settings.download-diagnostics.description"),
|
|
257
|
-
children: /* @__PURE__ */ jsx(
|
|
257
|
+
children: /* @__PURE__ */ jsx(Button.Root, {
|
|
258
258
|
icon: "ph--download-simple--regular",
|
|
259
259
|
iconOnly: true,
|
|
260
260
|
label: t("settings.download-diagnostics.label"),
|
|
261
261
|
onClick: handleDownload
|
|
262
262
|
})
|
|
263
263
|
}),
|
|
264
|
-
/* @__PURE__ */ jsx(Form.
|
|
264
|
+
/* @__PURE__ */ jsx(Form.Field, {
|
|
265
|
+
standalone: true,
|
|
265
266
|
label: t("settings.download-logs.label"),
|
|
266
267
|
description: t("settings.download-logs.description"),
|
|
267
|
-
children: /* @__PURE__ */ jsx(
|
|
268
|
+
children: /* @__PURE__ */ jsx(Button.Root, {
|
|
268
269
|
icon: "ph--download-simple--regular",
|
|
269
270
|
iconOnly: true,
|
|
270
271
|
label: t("settings.download-logs.label"),
|
|
271
272
|
onClick: handleDownloadLogs
|
|
272
273
|
})
|
|
273
274
|
}),
|
|
274
|
-
/* @__PURE__ */ jsx(Form.
|
|
275
|
+
/* @__PURE__ */ jsx(Form.Field, {
|
|
276
|
+
standalone: true,
|
|
275
277
|
label: t("settings.repair.label"),
|
|
276
278
|
description: t("settings.repair.description"),
|
|
277
|
-
children: /* @__PURE__ */ jsx(
|
|
279
|
+
children: /* @__PURE__ */ jsx(Button.Root, {
|
|
278
280
|
icon: "ph--first-aid-kit--regular",
|
|
279
281
|
iconOnly: true,
|
|
280
282
|
label: t("settings.repair.label"),
|
|
281
283
|
onClick: handleRepair
|
|
282
284
|
})
|
|
283
285
|
}),
|
|
284
|
-
toast && /* @__PURE__ */ jsxs(
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
286
|
+
toast && /* @__PURE__ */ jsxs(UiToast.Root, {
|
|
287
|
+
defaultOpen: true,
|
|
288
|
+
duration: 5e3,
|
|
289
|
+
onOpenChange: (open) => !open && setToast(void 0),
|
|
290
|
+
children: [/* @__PURE__ */ jsx(UiToast.Header, {
|
|
291
|
+
icon: "ph--gift--duotone",
|
|
292
|
+
children: toast.title
|
|
293
|
+
}), toast.description && /* @__PURE__ */ jsx(UiToast.Description, { children: toast.description })]
|
|
294
|
+
}),
|
|
295
|
+
/* @__PURE__ */ jsx(Form.Field, {
|
|
289
296
|
label: t("settings.choose-storage-adaptor.label"),
|
|
290
297
|
description: t("settings.choose-storage-adaptor.description"),
|
|
291
298
|
children: /* @__PURE__ */ jsxs(Select.Root, {
|
|
292
299
|
disabled: !onSettingsChange,
|
|
293
|
-
value: Object.entries(StorageAdapters).
|
|
294
|
-
onValueChange: handleStorageAdapterChange,
|
|
295
|
-
|
|
300
|
+
value: Object.entries(StorageAdapters).filter(([_name, value]) => value === storageConfig?.runtime?.client?.storage?.dataStore).map(([name]) => name).slice(0, 1),
|
|
301
|
+
onValueChange: ({ value: [value] }) => value && handleStorageAdapterChange(value),
|
|
302
|
+
items: Object.keys(StorageAdapters).map((key) => ({
|
|
303
|
+
value: key,
|
|
304
|
+
label: t(`settings.storage-adaptor.${key}.label`)
|
|
305
|
+
})),
|
|
306
|
+
children: [/* @__PURE__ */ jsx(Select.Trigger, {
|
|
296
307
|
disabled: !onSettingsChange,
|
|
297
308
|
placeholder: t("settings.data-store.label")
|
|
298
|
-
}), /* @__PURE__ */ jsx(Select.
|
|
309
|
+
}), /* @__PURE__ */ jsx(Select.Content, { children: Object.keys(StorageAdapters).map((key) => /* @__PURE__ */ jsx(Select.Item, { item: {
|
|
299
310
|
value: key,
|
|
300
|
-
|
|
301
|
-
}
|
|
311
|
+
label: t(`settings.storage-adaptor.${key}.label`)
|
|
312
|
+
} }, key)) })]
|
|
302
313
|
})
|
|
303
314
|
})
|
|
304
315
|
]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk-DebugSettings.mjs","names":[],"sources":["../../src/containers/DebugPortSettings/DebugPortSettings.tsx","../../src/containers/DebugSettings/DebugSettings.tsx"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\nimport React, { useCallback, useSyncExternalStore } from 'react';\n\nimport { type DebugPortController, getDebugPortController } from '@dxos/react-client/devtools';\nimport { Flex, IconButton, Input, useTranslation } from '@dxos/react-ui';\nimport { Logger, type LogRow } from '@dxos/react-ui-debug';\nimport { Form } from '@dxos/react-ui-form';\n\nimport { meta } from '#meta';\n\n/**\n * Scopes the panel to the controller's own entries.\n *\n * A display filter, not `initialFilter`: that one narrows what the process-wide buffer captures,\n * which would starve the main log companion reading the same buffer.\n */\nconst isDebugPortRow = (row: LogRow): boolean => (row.entry.meta?.F ?? '').includes(CONTROLLER_FILE);\n\nconst CONTROLLER_FILE = 'devtools/debug-port-controller';\n\nexport type DebugPortSettingsProps = {\n /** Injectable for stories/tests; defaults to the page-wide controller. */\n controller?: DebugPortController;\n /** The switch starts arbitrary eval, so it follows the form's readonly state like every other control. */\n disabled?: boolean;\n};\n\n/**\n * Start/stop the agent debug port and surface the session id an agent needs.\n *\n * The port evaluates agent-supplied code against the live client, so it is off until this switch is\n * flipped, the session id is regenerated on every activation, and nothing survives a reload.\n */\nexport const DebugPortSettings = ({ controller = getDebugPortController(), disabled }: DebugPortSettingsProps) => {\n const { t } = useTranslation(meta.profile.key);\n const subscribe = useCallback((listener: () => void) => controller.subscribe(listener), [controller]);\n const getStatus = useCallback(() => controller.getStatus(), [controller]);\n const status = useSyncExternalStore(subscribe, getStatus);\n\n // `persist` keeps the session across reloads of this tab: an OAuth redirect or a HMR reload would\n // otherwise strand the agent mid-investigation with a dead session id.\n const handleToggle = useCallback(\n (checked: boolean) => (checked ? controller.start({ persist: true }) : controller.stop()),\n [controller],\n );\n\n const handleCopy = useCallback(() => {\n if (status.session) {\n void navigator.clipboard.writeText(status.session);\n }\n }, [status.session]);\n\n return (\n <Form.Section\n title={t('settings.debug-port.section.label')}\n description={t('settings.debug-port.section.description')}\n >\n <Form.Row label={t('settings.debug-port.label')} description={t('settings.debug-port.description')}>\n <Flex gap='md' align='center'>\n {status.running && (\n <span className='text-sm text-description'>\n {t('settings.debug-port.running.label')} <span className='font-mono'>{status.origin}</span>\n </span>\n )}\n <Input.Root>\n <Input.Switch checked={status.running} disabled={disabled} onCheckedChange={handleToggle} />\n </Input.Root>\n </Flex>\n </Form.Row>\n\n {status.running && (\n <>\n <Form.Row\n standalone\n label={t('settings.debug-port.session.label')}\n description={t('settings.debug-port.session.description')}\n >\n <Flex gap='sm' align='center'>\n <span className='grow truncate font-mono text-sm'>{status.session}</span>\n <IconButton\n icon='ph--copy--regular'\n iconOnly\n label={t('settings.debug-port.copy-session.label')}\n onClick={handleCopy}\n />\n </Flex>\n </Form.Row>\n\n {/* The settings variant puts the control in a right-hand column; log rows need the full\n width, so this row collapses to a single column. */}\n <Form.Row\n standalone\n label={t('settings.debug-port.log.label')}\n classNames='md:grid-cols-1 md:[grid-template-areas:\"header\"\"description\"\"control\"\"validation\"]'\n >\n {/* Only the rows: a settings card has no room for the panel's toolbar, levels or filter. */}\n <Logger.Root rowFilter={isDebugPortRow}>\n <Logger.Content classNames='max-h-[16lh]'>\n <Logger.List />\n </Logger.Content>\n </Logger.Root>\n </Form.Row>\n </>\n )}\n </Form.Section>\n );\n};\n\nDebugPortSettings.displayName = 'DebugPortSettings';\n","//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport * as AppCapabilities from '@dxos/app-toolkit/AppCapabilities';\nimport * as AppSpace from '@dxos/app-toolkit/AppSpace';\nimport { type AppSurface } from '@dxos/app-toolkit/ui';\nimport { type ConfigInit, SaveConfig, Storage, defs } from '@dxos/config';\nimport { log } from '@dxos/log';\nimport { type IdbLogStore, MANUAL_LOG_EXPORT_MAX_BYTES } from '@dxos/log-store-idb';\nimport { useClient } from '@dxos/react-client';\nimport { IconButton, Input, Select, Toast, useFileDownload, useTranslation } from '@dxos/react-ui';\nimport { Form } from '@dxos/react-ui-form';\nimport { TRACE_ALL_KEY } from '@dxos/tracing';\nimport { setDeep } from '@dxos/util';\n\nimport { meta } from '#meta';\nimport { Settings } from '#types';\n\nimport { DebugPortSettings } from '../DebugPortSettings';\n\ntype Toast = {\n title: string;\n description?: string;\n};\n\nconst StorageAdapters = {\n opfs: defs.Runtime_Client_Storage_StorageDriver.WEBFS,\n idb: defs.Runtime_Client_Storage_StorageDriver.IDB,\n} as const;\n\nexport type DebugSettingsProps = AppSurface.SettingsProps<\n Settings.Settings,\n {\n logStore: IdbLogStore;\n onUpload?: AppCapabilities.FileUploader;\n }\n>;\n\nexport const DebugSettings = ({ settings, onSettingsChange, logStore, onUpload }: DebugSettingsProps) => {\n const { t } = useTranslation(meta.profile.key);\n const [toast, setToast] = useState<Toast>();\n const download = useFileDownload();\n const [storageConfig, setStorageConfig] = useState<ConfigInit>({});\n const client = useClient();\n\n useEffect(() => {\n void Storage().then((config) => setStorageConfig(config));\n }, []);\n\n const handleToast = useCallback(\n (toast: Toast) => {\n setToast(toast);\n const timer = setTimeout(() => setToast(undefined), 5_000);\n return () => clearTimeout(timer);\n },\n [setToast],\n );\n\n const handleDownload = useCallback(async () => {\n const data = await client.diagnostics();\n const file = new Blob([JSON.stringify(data, undefined, 2)], {\n type: 'text/plain',\n });\n const fileName = `composer-${new Date().toISOString().replace(/\\W/g, '-')}.json`;\n download(file, fileName);\n\n if (onUpload) {\n const defaultSpace = AppSpace.getDefaultSpace(client);\n if (!defaultSpace) {\n log.error('no default space available for upload');\n return;\n }\n const info = await onUpload(defaultSpace.db, new File([file], fileName));\n if (!info) {\n log.error('diagnostics failed to upload to IPFS');\n return;\n }\n handleToast({\n title: t('settings.uploaded.message'),\n description: t('settings.uploaded.description'),\n });\n\n // TODO(nf): move to IpfsPlugin?\n const url = client.config.values.runtime!.services!.ipfs!.gateway + '/' + info.cid;\n void navigator.clipboard.writeText(url);\n handleToast({\n title: t('settings.uploaded.message'),\n description: t('settings.uploaded.description'),\n });\n log.info('diagnostics', { url });\n }\n }, [client, download, handleToast, onUpload, t]);\n\n const handleDownloadLogs = useCallback(async () => {\n const file = await logStore.exportBlob({ maxSize: MANUAL_LOG_EXPORT_MAX_BYTES });\n const fileName = `composer-logs-${new Date().toISOString().slice(0, 19).replace(/:/g, '-')}.ndjson`;\n download(file, fileName);\n }, [download, logStore]);\n\n const handleRepair = useCallback(async () => {\n try {\n const info = await client.repair();\n setStorageConfig(await Storage());\n handleToast({\n title: t('settings.repair-success.message'),\n description: JSON.stringify(info, undefined, 2),\n });\n } catch (err: any) {\n handleToast({\n title: t('settings.repair-failed.message'),\n description: err.message,\n });\n }\n }, [client, handleToast, t]);\n\n const handleWireframeChange = useCallback(\n (checked: boolean) => onSettingsChange?.((s) => ({ ...s, wireframe: !!checked })),\n [onSettingsChange],\n );\n\n const traceAll = useMemo(\n () => settings.traceAll ?? (typeof localStorage !== 'undefined' && localStorage.getItem(TRACE_ALL_KEY) === 'true'),\n [settings.traceAll],\n );\n\n const handleTraceAllChange = useCallback(\n (checked: boolean) => {\n const value = !!checked;\n localStorage.setItem(TRACE_ALL_KEY, String(value));\n onSettingsChange?.((s) => ({ ...s, traceAll: value }));\n },\n [onSettingsChange],\n );\n\n const handleOpenTracingPanel = useCallback(() => {\n window.open('about:blank', '_blank');\n }, []);\n\n const handleStorageAdapterChange = useCallback(\n (value: string) => {\n if (confirm(t('settings.storage-adapter.changed-alert.message'))) {\n updateConfig(\n storageConfig,\n setStorageConfig,\n ['runtime', 'client', 'storage', 'dataStore'],\n StorageAdapters[value as keyof typeof StorageAdapters],\n );\n }\n },\n [storageConfig, t],\n );\n\n return (\n <Form.Root schema={Settings.Settings} values={settings} variant='settings' readonly={!onSettingsChange}>\n <Form.Viewport scroll>\n <Form.Content>\n <Form.Section title={meta.profile.name ?? meta.profile.key}>\n <Form.Row label={t('settings.wireframe.label')} description={t('settings.wireframe.description')}>\n <Input.Root>\n <Input.Switch\n disabled={!onSettingsChange}\n checked={settings.wireframe}\n onCheckedChange={handleWireframeChange}\n />\n </Input.Root>\n </Form.Row>\n <Form.Row label={t('settings.trace-all.label')} description={t('settings.trace-all.description')}>\n <Input.Root>\n <Input.Switch disabled={!onSettingsChange} checked={traceAll} onCheckedChange={handleTraceAllChange} />\n </Input.Root>\n </Form.Row>\n <Form.Row label={t('settings.tracing-panel.label')} description={t('settings.tracing-panel.description')}>\n <IconButton\n icon='ph--arrow-square-out--regular'\n iconOnly\n label={t('settings.tracing-panel.label')}\n onClick={handleOpenTracingPanel}\n />\n </Form.Row>\n <Form.Row\n label={t('settings.download-diagnostics.label')}\n description={t('settings.download-diagnostics.description')}\n >\n <IconButton\n icon='ph--download-simple--regular'\n iconOnly\n label={t('settings.download-diagnostics.label')}\n onClick={handleDownload}\n />\n </Form.Row>\n <Form.Row label={t('settings.download-logs.label')} description={t('settings.download-logs.description')}>\n <IconButton\n icon='ph--download-simple--regular'\n iconOnly\n label={t('settings.download-logs.label')}\n onClick={handleDownloadLogs}\n />\n </Form.Row>\n <Form.Row label={t('settings.repair.label')} description={t('settings.repair.description')}>\n <IconButton\n icon='ph--first-aid-kit--regular'\n iconOnly\n label={t('settings.repair.label')}\n onClick={handleRepair}\n />\n </Form.Row>\n\n {/* TODO(burdon): Move to layout? */}\n {toast && (\n <Toast.Root>\n <Toast.Title icon='ph--gift--duotone'>\n <span>{toast.title}</span>\n </Toast.Title>\n {toast.description && <Toast.Description>{toast.description}</Toast.Description>}\n </Toast.Root>\n )}\n\n <Form.Row\n label={t('settings.choose-storage-adaptor.label')}\n description={t('settings.choose-storage-adaptor.description')}\n >\n <Select.Root\n disabled={!onSettingsChange}\n value={\n Object.entries(StorageAdapters).find(\n ([_name, value]) => value === storageConfig?.runtime?.client?.storage?.dataStore,\n )?.[0]\n }\n onValueChange={handleStorageAdapterChange}\n >\n <Select.TriggerButton disabled={!onSettingsChange} placeholder={t('settings.data-store.label')} />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {Object.keys(StorageAdapters).map((key) => (\n <Select.Option key={key} value={key}>\n {t(`settings.storage-adaptor.${key}.label`)}\n </Select.Option>\n ))}\n </Select.Viewport>\n <Select.Arrow />\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </Form.Row>\n </Form.Section>\n\n <DebugPortSettings disabled={!onSettingsChange} />\n </Form.Content>\n </Form.Viewport>\n </Form.Root>\n );\n};\n\nconst updateConfig = (config: ConfigInit, setConfig: (newConfig: ConfigInit) => void, path: string[], value: any) => {\n const storageConfigCopy = JSON.parse(JSON.stringify(config ?? {}));\n setDeep(storageConfigCopy, path, value);\n setConfig(storageConfigCopy);\n queueMicrotask(async () => {\n await SaveConfig(storageConfigCopy);\n });\n};\n\nDebugSettings.displayName = 'DebugSettings';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAmBA,IAAM,kBAAkB,SAA0B,IAAI,MAAM,MAAM,KAAK,GAAA,CAAI,SAAS,eAAe;AAEnG,IAAM,kBAAkB;;;;;;;AAexB,IAAa,qBAAqB,EAAE,aAAa,uBAAuB,GAAG,eAAuC;CAChH,MAAM,EAAE,MAAM,eAAe,KAAK,QAAQ,GAAG;CAC7C,MAAM,YAAY,aAAa,aAAyB,WAAW,UAAU,QAAQ,GAAG,CAAC,UAAU,CAAC;CACpG,MAAM,YAAY,kBAAkB,WAAW,UAAU,GAAG,CAAC,UAAU,CAAC;CACxE,MAAM,SAAS,qBAAqB,WAAW,SAAS;CAIxD,MAAM,eAAe,aAClB,YAAsB,UAAU,WAAW,MAAM,EAAE,SAAS,KAAK,CAAC,IAAI,WAAW,KAAK,GACvF,CAAC,UAAU,CACb;CAEA,MAAM,aAAa,kBAAkB;EACnC,IAAI,OAAO,SACT,UAAe,UAAU,UAAU,OAAO,OAAO;CAErD,GAAG,CAAC,OAAO,OAAO,CAAC;CAEnB,OACE,qBAAC,KAAK,SAAN;EACE,OAAO,EAAE,mCAAmC;EAC5C,aAAa,EAAE,yCAAyC;EAF1D,UAAA,CAIE,oBAAC,KAAK,KAAN;GAAU,OAAO,EAAE,2BAA2B;GAAG,aAAa,EAAE,iCAAiC;GAC/F,UAAA,qBAAC,MAAD;IAAM,KAAI;IAAK,OAAM;IAArB,UAAA,CACG,OAAO,WACN,qBAAC,QAAD;KAAM,WAAU;KAAhB,UAAA;MACG,EAAE,mCAAmC;MAAE;MAAC,oBAAC,QAAD;OAAM,WAAU;OAAa,UAAA,OAAO;MAAa,CAAA;KACtF;IAER,CAAA,GAAA,oBAAC,MAAM,MAAP,EAAA,UACE,oBAAC,MAAM,QAAP;KAAc,SAAS,OAAO;KAAmB;KAAU,iBAAiB;IAAe,CAAA,EACjF,CAAA,CACR;;EACE,CAAA,GAET,OAAO,WACN,qBAAA,YAAA,EAAA,UAAA,CACE,oBAAC,KAAK,KAAN;GACE,YAAA;GACA,OAAO,EAAE,mCAAmC;GAC5C,aAAa,EAAE,yCAAyC;GAExD,UAAA,qBAAC,MAAD;IAAM,KAAI;IAAK,OAAM;IAArB,UAAA,CACE,oBAAC,QAAD;KAAM,WAAU;KAAmC,UAAA,OAAO;IAAc,CAAA,GACxE,oBAAC,YAAD;KACE,MAAK;KACL,UAAA;KACA,OAAO,EAAE,wCAAwC;KACjD,SAAS;IACV,CAAA,CACG;;EACE,CAAA,GAIV,oBAAC,KAAK,KAAN;GACE,YAAA;GACA,OAAO,EAAE,+BAA+B;GACxC,YAAW;GAGX,UAAA,oBAAC,OAAO,MAAR;IAAa,WAAW;IACtB,UAAA,oBAAC,OAAO,SAAR;KAAgB,YAAW;KACzB,UAAA,oBAAC,OAAO,MAAR,CAAc,CAAA;IACA,CAAA;GACL,CAAA;EACL,CAAA,CACV,EAAA,CAAA,CAEQ;;AAElB;AAEA,kBAAkB,cAAc;;;;ACnFhC,IAAM,kBAAkB;CACtB,MAAM,KAAK,qCAAqC;CAChD,KAAK,KAAK,qCAAqC;AACjD;AAUA,IAAa,iBAAiB,EAAE,UAAU,kBAAkB,UAAU,eAAmC;CACvG,MAAM,EAAE,MAAM,eAAe,KAAK,QAAQ,GAAG;CAC7C,MAAM,CAAC,OAAO,YAAY,SAAgB;CAC1C,MAAM,WAAW,gBAAgB;CACjC,MAAM,CAAC,eAAe,oBAAoB,SAAqB,CAAC,CAAC;CACjE,MAAM,SAAS,UAAU;CAEzB,gBAAgB;EACd,QAAa,CAAC,CAAC,MAAM,WAAW,iBAAiB,MAAM,CAAC;CAC1D,GAAG,CAAC,CAAC;CAEL,MAAM,cAAc,aACjB,UAAiB;EAChB,SAAS,KAAK;EACd,MAAM,QAAQ,iBAAiB,SAAS,KAAA,CAAS,GAAG,GAAK;EACzD,aAAa,aAAa,KAAK;CACjC,GACA,CAAC,QAAQ,CACX;CAEA,MAAM,iBAAiB,YAAY,YAAY;EAC7C,MAAM,OAAO,MAAM,OAAO,YAAY;EACtC,MAAM,OAAO,IAAI,KAAK,CAAC,KAAK,UAAU,MAAM,KAAA,GAAW,CAAC,CAAC,GAAG,EAC1D,MAAM,aACR,CAAC;EACD,MAAM,WAAW,6BAAY,IAAI,KAAK,EAAA,CAAE,YAAY,CAAC,CAAC,QAAQ,OAAO,GAAG,EAAE;EAC1E,SAAS,MAAM,QAAQ;EAEvB,IAAI,UAAU;GACZ,MAAM,eAAe,SAAS,gBAAgB,MAAM;GACpD,IAAI,CAAC,cAAc;IACjB,IAAI,MAAM,yCAAsC,KAAA,GAAA;KAAA,YAAA;KAAA,GAAA;KAAA,GAAA;KAAA,GAAA,KAAA;IAAA,CAAC;IACjD;GACF;GACA,MAAM,OAAO,MAAM,SAAS,aAAa,IAAI,IAAI,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC;GACvE,IAAI,CAAC,MAAM;IACT,IAAI,MAAM,wCAAqC,KAAA,GAAA;KAAA,YAAA;KAAA,GAAA;KAAA,GAAA;KAAA,GAAA,KAAA;IAAA,CAAC;IAChD;GACF;GACA,YAAY;IACV,OAAO,EAAE,2BAA2B;IACpC,aAAa,EAAE,+BAA+B;GAChD,CAAC;GAGD,MAAM,MAAM,OAAO,OAAO,OAAO,QAAS,SAAU,KAAM,UAAU,MAAM,KAAK;GAC/E,UAAe,UAAU,UAAU,GAAG;GACtC,YAAY;IACV,OAAO,EAAE,2BAA2B;IACpC,aAAa,EAAE,+BAA+B;GAChD,CAAC;GACD,IAAI,KAAK,eAAe,EAAE,IAAI,GAAA;IAAA,YAAA;IAAA,GAAA;IAAA,GAAA;IAAA,GAAA,KAAA;GAAA,CAAC;EACjC;CACF,GAAG;EAAC;EAAQ;EAAU;EAAa;EAAU;CAAC,CAAC;CAE/C,MAAM,qBAAqB,YAAY,YAAY;EACjD,MAAM,OAAO,MAAM,SAAS,WAAW,EAAE,SAAS,4BAA4B,CAAC;EAC/E,MAAM,WAAW,kCAAiB,IAAI,KAAK,EAAA,CAAE,YAAY,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,QAAQ,MAAM,GAAG,EAAE;EAC3F,SAAS,MAAM,QAAQ;CACzB,GAAG,CAAC,UAAU,QAAQ,CAAC;CAEvB,MAAM,eAAe,YAAY,YAAY;EAC3C,IAAI;GACF,MAAM,OAAO,MAAM,OAAO,OAAO;GACjC,iBAAiB,MAAM,QAAQ,CAAC;GAChC,YAAY;IACV,OAAO,EAAE,iCAAiC;IAC1C,aAAa,KAAK,UAAU,MAAM,KAAA,GAAW,CAAC;GAChD,CAAC;EACH,SAAS,KAAU;GACjB,YAAY;IACV,OAAO,EAAE,gCAAgC;IACzC,aAAa,IAAI;GACnB,CAAC;EACH;CACF,GAAG;EAAC;EAAQ;EAAa;CAAC,CAAC;CAE3B,MAAM,wBAAwB,aAC3B,YAAqB,oBAAoB,OAAO;EAAE,GAAG;EAAG,WAAW,CAAC,CAAC;CAAQ,EAAE,GAChF,CAAC,gBAAgB,CACnB;CAEA,MAAM,WAAW,cACT,SAAS,aAAa,OAAO,iBAAiB,eAAe,aAAa,QAAQ,aAAa,MAAM,SAC3G,CAAC,SAAS,QAAQ,CACpB;CAEA,MAAM,uBAAuB,aAC1B,YAAqB;EACpB,MAAM,QAAQ,CAAC,CAAC;EAChB,aAAa,QAAQ,eAAe,OAAO,KAAK,CAAC;EACjD,oBAAoB,OAAO;GAAE,GAAG;GAAG,UAAU;EAAM,EAAE;CACvD,GACA,CAAC,gBAAgB,CACnB;CAEA,MAAM,yBAAyB,kBAAkB;EAC/C,OAAO,KAAK,eAAe,QAAQ;CACrC,GAAG,CAAC,CAAC;CAEL,MAAM,6BAA6B,aAChC,UAAkB;EACjB,IAAI,QAAQ,EAAE,gDAAgD,CAAC,GAC7D,aACE,eACA,kBACA;GAAC;GAAW;GAAU;GAAW;EAAW,GAC5C,gBAAgB,MAClB;CAEJ,GACA,CAAC,eAAe,CAAC,CACnB;CAEA,OACE,oBAAC,KAAK,MAAN;EAAW,QAAQ,SAAS;EAAU,QAAQ;EAAU,SAAQ;EAAW,UAAU,CAAC;EACpF,UAAA,oBAAC,KAAK,UAAN;GAAe,QAAA;GACb,UAAA,qBAAC,KAAK,SAAN,EAAA,UAAA,CACE,qBAAC,KAAK,SAAN;IAAc,OAAO,KAAK,QAAQ,QAAQ,KAAK,QAAQ;IAAvD,UAAA;KACE,oBAAC,KAAK,KAAN;MAAU,OAAO,EAAE,0BAA0B;MAAG,aAAa,EAAE,gCAAgC;MAC7F,UAAA,oBAAC,MAAM,MAAP,EAAA,UACE,oBAAC,MAAM,QAAP;OACE,UAAU,CAAC;OACX,SAAS,SAAS;OAClB,iBAAiB;MAClB,CAAA,EACS,CAAA;KACJ,CAAA;KACV,oBAAC,KAAK,KAAN;MAAU,OAAO,EAAE,0BAA0B;MAAG,aAAa,EAAE,gCAAgC;MAC7F,UAAA,oBAAC,MAAM,MAAP,EAAA,UACE,oBAAC,MAAM,QAAP;OAAc,UAAU,CAAC;OAAkB,SAAS;OAAU,iBAAiB;MAAuB,CAAA,EAC5F,CAAA;KACJ,CAAA;KACV,oBAAC,KAAK,KAAN;MAAU,OAAO,EAAE,8BAA8B;MAAG,aAAa,EAAE,oCAAoC;MACrG,UAAA,oBAAC,YAAD;OACE,MAAK;OACL,UAAA;OACA,OAAO,EAAE,8BAA8B;OACvC,SAAS;MACV,CAAA;KACO,CAAA;KACV,oBAAC,KAAK,KAAN;MACE,OAAO,EAAE,qCAAqC;MAC9C,aAAa,EAAE,2CAA2C;MAE1D,UAAA,oBAAC,YAAD;OACE,MAAK;OACL,UAAA;OACA,OAAO,EAAE,qCAAqC;OAC9C,SAAS;MACV,CAAA;KACO,CAAA;KACV,oBAAC,KAAK,KAAN;MAAU,OAAO,EAAE,8BAA8B;MAAG,aAAa,EAAE,oCAAoC;MACrG,UAAA,oBAAC,YAAD;OACE,MAAK;OACL,UAAA;OACA,OAAO,EAAE,8BAA8B;OACvC,SAAS;MACV,CAAA;KACO,CAAA;KACV,oBAAC,KAAK,KAAN;MAAU,OAAO,EAAE,uBAAuB;MAAG,aAAa,EAAE,6BAA6B;MACvF,UAAA,oBAAC,YAAD;OACE,MAAK;OACL,UAAA;OACA,OAAO,EAAE,uBAAuB;OAChC,SAAS;MACV,CAAA;KACO,CAAA;KAGT,SACC,qBAAC,MAAM,MAAP,EAAA,UAAA,CACE,oBAAC,MAAM,OAAP;MAAa,MAAK;MAChB,UAAA,oBAAC,QAAD,EAAA,UAAO,MAAM,MAAY,CAAA;KACd,CAAA,GACZ,MAAM,eAAe,oBAAC,MAAM,aAAP,EAAA,UAAoB,MAAM,YAA+B,CAAA,CACrE,EAAA,CAAA;KAGd,oBAAC,KAAK,KAAN;MACE,OAAO,EAAE,uCAAuC;MAChD,aAAa,EAAE,6CAA6C;MAE5D,UAAA,qBAAC,OAAO,MAAR;OACE,UAAU,CAAC;OACX,OACE,OAAO,QAAQ,eAAe,CAAC,CAAC,MAC7B,CAAC,OAAO,WAAW,UAAU,eAAe,SAAS,QAAQ,SAAS,SACzE,CAAC,GAAG;OAEN,eAAe;OAPjB,UAAA,CASE,oBAAC,OAAO,eAAR;QAAsB,UAAU,CAAC;QAAkB,aAAa,EAAE,2BAA2B;OAAI,CAAA,GACjG,oBAAC,OAAO,QAAR,EAAA,UACE,qBAAC,OAAO,SAAR,EAAA,UAAA,CACE,oBAAC,OAAO,UAAR,EAAA,UACG,OAAO,KAAK,eAAe,CAAC,CAAC,KAAK,QACjC,oBAAC,OAAO,QAAR;QAAyB,OAAO;QAC7B,UAAA,EAAE,4BAA4B,IAAI,OAAO;OAC7B,GAFK,GAEL,CAChB,EACc,CAAA,GACjB,oBAAC,OAAO,OAAR,CAAe,CAAA,CACD,EAAA,CAAA,EACH,CAAA,CACJ;;KACL,CAAA;IACE;GAEd,CAAA,GAAA,oBAAC,mBAAD,EAAmB,UAAU,CAAC,iBAAmB,CAAA,CACrC,EAAA,CAAA;EACD,CAAA;CACN,CAAA;AAEf;AAEA,IAAM,gBAAgB,QAAoB,WAA4C,MAAgB,UAAe;CACnH,MAAM,oBAAoB,KAAK,MAAM,KAAK,UAAU,UAAU,CAAC,CAAC,CAAC;CACjE,QAAQ,mBAAmB,MAAM,KAAK;CACtC,UAAU,iBAAiB;CAC3B,eAAe,YAAY;EACzB,MAAM,WAAW,iBAAiB;CACpC,CAAC;AACH;AAEA,cAAc,cAAc"}
|
|
1
|
+
{"version":3,"file":"chunk-DebugSettings.mjs","names":[],"sources":["../../src/containers/DebugPortSettings/DebugPortSettings.tsx","../../src/containers/DebugSettings/DebugSettings.tsx"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\nimport React, { useCallback, useSyncExternalStore } from 'react';\n\nimport { type DebugPortController, getDebugPortController } from '@dxos/react-client/devtools';\nimport { Logger, type LogRow } from '@dxos/react-ui-debug';\nimport { Form } from '@dxos/react-ui-form';\nimport * as Field from '@dxos/react-ui/Field';\nimport * as Hooks from '@dxos/react-ui/Hooks';\nimport * as Input from '@dxos/react-ui/Input';\nimport * as Layout from '@dxos/react-ui/Layout';\n\nimport { meta } from '#meta';\n\n/**\n * Scopes the panel to the controller's own entries.\n *\n * A display filter, not `initialFilter`: that one narrows what the process-wide buffer captures,\n * which would starve the main log companion reading the same buffer.\n */\nconst isDebugPortRow = (row: LogRow): boolean => (row.entry.meta?.F ?? '').includes(CONTROLLER_FILE);\n\nconst CONTROLLER_FILE = 'devtools/debug-port-controller';\n\nexport type DebugPortSettingsProps = {\n /** Injectable for stories/tests; defaults to the page-wide controller. */\n controller?: DebugPortController;\n /** The switch starts arbitrary eval, so it follows the form's readonly state like every other control. */\n disabled?: boolean;\n};\n\n/**\n * Start/stop the agent debug port and surface the session id an agent needs.\n *\n * The port evaluates agent-supplied code against the live client, so it is off until this switch is\n * flipped, the session id is regenerated on every activation, and nothing survives a reload.\n */\nexport const DebugPortSettings = ({ controller = getDebugPortController(), disabled }: DebugPortSettingsProps) => {\n const { t } = Hooks.useTranslation(meta.profile.key);\n const subscribe = useCallback((listener: () => void) => controller.subscribe(listener), [controller]);\n const getStatus = useCallback(() => controller.getStatus(), [controller]);\n const status = useSyncExternalStore(subscribe, getStatus);\n\n // `persist` keeps the session across reloads of this tab: an OAuth redirect or a HMR reload would\n // otherwise strand the agent mid-investigation with a dead session id.\n const handleToggle = useCallback(\n (checked: boolean) => (checked ? controller.start({ persist: true }) : controller.stop()),\n [controller],\n );\n\n return (\n <Form.FieldSet\n label={t('settings.debug-port.section.label')}\n description={t('settings.debug-port.section.description')}\n >\n <Form.Field standalone label={t('settings.debug-port.label')} description={t('settings.debug-port.description')}>\n <Layout.Flex gap='md' align='center'>\n {status.running && (\n <span className='text-sm text-fg-muted'>\n {t('settings.debug-port.running.label')} <span className='font-mono'>{status.origin}</span>\n </span>\n )}\n <Field.Root>\n <Input.Switch\n checked={status.running}\n disabled={disabled}\n onCheckedChange={({ checked }) => handleToggle(checked)}\n />\n </Field.Root>\n </Layout.Flex>\n </Form.Field>\n\n {status.running && (\n <>\n <Form.Field\n standalone\n label={t('settings.debug-port.session.label')}\n description={t('settings.debug-port.session.description')}\n >\n <Input.Root\n value={status.session ?? ''}\n disabled\n variant='mono'\n copyable\n aria-label={t('settings.debug-port.session.label')}\n />\n </Form.Field>\n\n <Form.Field standalone label={t('settings.debug-port.log.label')}>\n {/* Only the rows: a settings card has no room for the panel's toolbar, levels or filter, so nothing to check rows for. */}\n <Logger.Root rowFilter={isDebugPortRow}>\n <Logger.Content classNames='max-h-[16lh]'>\n <Logger.List checkable={false} />\n </Logger.Content>\n </Logger.Root>\n </Form.Field>\n </>\n )}\n </Form.FieldSet>\n );\n};\n\nDebugPortSettings.displayName = 'DebugPortSettings';\n","//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport * as AppCapabilities from '@dxos/app-toolkit/AppCapabilities';\nimport * as AppSpace from '@dxos/app-toolkit/AppSpace';\nimport type * as AppSurface from '@dxos/app-toolkit/AppSurface';\nimport { type ConfigInit, SaveConfig, Storage, defs } from '@dxos/config';\nimport { log } from '@dxos/log';\nimport { type IdbLogStore, MANUAL_LOG_EXPORT_MAX_BYTES } from '@dxos/log-store-idb';\nimport { useClient } from '@dxos/react-client';\nimport { Form } from '@dxos/react-ui-form';\nimport * as Button from '@dxos/react-ui/Button';\nimport * as Hooks from '@dxos/react-ui/Hooks';\nimport * as Input from '@dxos/react-ui/Input';\nimport * as Select from '@dxos/react-ui/Select';\nimport * as UiToast from '@dxos/react-ui/Toast';\nimport { TRACE_ALL_KEY } from '@dxos/tracing';\nimport { gzip, setDeep } from '@dxos/util';\n\nimport { meta } from '#meta';\nimport { Settings } from '#types';\n\nimport { DebugPortSettings } from '../DebugPortSettings/index.ts';\n\ntype Toast = {\n title: string;\n description?: string;\n};\n\nconst StorageAdapters = {\n opfs: defs.Runtime_Client_Storage_StorageDriver.WEBFS,\n idb: defs.Runtime_Client_Storage_StorageDriver.IDB,\n} as const;\n\nexport type DebugSettingsProps = AppSurface.SettingsProps<\n Settings.Settings,\n {\n logStore: IdbLogStore;\n onUpload?: AppCapabilities.FileUploader;\n }\n>;\n\nexport const DebugSettings = ({ settings, onSettingsChange, scope, logStore, onUpload }: DebugSettingsProps) => {\n const { t } = Hooks.useTranslation(meta.profile.key);\n const [toast, setToast] = useState<Toast>();\n const download = Hooks.useFileDownload();\n const [storageConfig, setStorageConfig] = useState<ConfigInit>({});\n const client = useClient();\n\n useEffect(() => {\n void Storage().then((config) => setStorageConfig(config));\n }, []);\n\n const handleToast = useCallback(\n (toast: Toast) => {\n setToast(toast);\n const timer = setTimeout(() => setToast(undefined), 5_000);\n return () => clearTimeout(timer);\n },\n [setToast],\n );\n\n const handleDownload = useCallback(async () => {\n const data = await client.diagnostics();\n const file = new Blob([JSON.stringify(data, undefined, 2)], {\n type: 'text/plain',\n });\n const fileName = `composer-${new Date().toISOString().replace(/\\W/g, '-')}.json`;\n download(file, fileName);\n\n if (onUpload) {\n const defaultSpace = AppSpace.getDefaultSpace(client);\n if (!defaultSpace) {\n log.error('no default space available for upload');\n return;\n }\n const info = await onUpload(defaultSpace.db, new File([file], fileName));\n if (!info) {\n log.error('diagnostics failed to upload to IPFS');\n return;\n }\n handleToast({\n title: t('settings.uploaded.message'),\n description: t('settings.uploaded.description'),\n });\n\n // TODO(nf): move to IpfsPlugin?\n const url = client.config.values.runtime!.services!.ipfs!.gateway + '/' + info.cid;\n void navigator.clipboard.writeText(url);\n handleToast({\n title: t('settings.uploaded.message'),\n description: t('settings.uploaded.description'),\n });\n log.info('diagnostics', { url });\n }\n }, [client, download, handleToast, onUpload, t]);\n\n const handleDownloadLogs = useCallback(async () => {\n const file = await gzip(await logStore.exportBlob({ maxSize: MANUAL_LOG_EXPORT_MAX_BYTES }));\n const fileName = `composer-logs-${new Date().toISOString().slice(0, 19).replace(/:/g, '-')}.ndjson.gz`;\n download(file, fileName);\n }, [download, logStore]);\n\n const handleRepair = useCallback(async () => {\n try {\n const info = await client.repair();\n setStorageConfig(await Storage());\n handleToast({\n title: t('settings.repair-success.message'),\n description: JSON.stringify(info, undefined, 2),\n });\n } catch (err: any) {\n handleToast({\n title: t('settings.repair-failed.message'),\n description: err.message,\n });\n }\n }, [client, handleToast, t]);\n\n const handleWireframeChange = useCallback(\n (checked: boolean) => onSettingsChange?.((s) => ({ ...s, wireframe: !!checked })),\n [onSettingsChange],\n );\n\n const traceAll = useMemo(\n () => settings.traceAll ?? (typeof localStorage !== 'undefined' && localStorage.getItem(TRACE_ALL_KEY) === 'true'),\n [settings.traceAll],\n );\n\n const handleTraceAllChange = useCallback(\n (checked: boolean) => {\n const value = !!checked;\n localStorage.setItem(TRACE_ALL_KEY, String(value));\n onSettingsChange?.((s) => ({ ...s, traceAll: value }));\n },\n [onSettingsChange],\n );\n\n const handleOpenTracingPanel = useCallback(() => {\n window.open('about:blank', '_blank');\n }, []);\n\n const handleStorageAdapterChange = useCallback(\n (value: string) => {\n if (confirm(t('settings.storage-adapter.changed-alert.message'))) {\n updateConfig(\n storageConfig,\n setStorageConfig,\n ['runtime', 'client', 'storage', 'dataStore'],\n StorageAdapters[value as keyof typeof StorageAdapters],\n );\n }\n },\n [storageConfig, t],\n );\n\n return (\n <Form.Root schema={Settings.Settings} values={settings} variant='settings' readonly={!onSettingsChange}>\n <Form.Viewport scroll>\n <Form.Content>\n <Form.FieldSet label={meta.profile.name ?? meta.profile.key} actions={scope}>\n <Form.Field label={t('settings.wireframe.label')} description={t('settings.wireframe.description')}>\n <Input.Switch\n disabled={!onSettingsChange}\n checked={settings.wireframe}\n onCheckedChange={({ checked }) => handleWireframeChange(checked)}\n />\n </Form.Field>\n <Form.Field label={t('settings.trace-all.label')} description={t('settings.trace-all.description')}>\n <Input.Switch\n disabled={!onSettingsChange}\n checked={traceAll}\n onCheckedChange={({ checked }) => handleTraceAllChange(checked)}\n />\n </Form.Field>\n <Form.Field\n standalone\n label={t('settings.tracing-panel.label')}\n description={t('settings.tracing-panel.description')}\n >\n <Button.Root\n icon='ph--arrow-square-out--regular'\n iconOnly\n label={t('settings.tracing-panel.label')}\n onClick={handleOpenTracingPanel}\n />\n </Form.Field>\n <Form.Field\n standalone\n label={t('settings.download-diagnostics.label')}\n description={t('settings.download-diagnostics.description')}\n >\n <Button.Root\n icon='ph--download-simple--regular'\n iconOnly\n label={t('settings.download-diagnostics.label')}\n onClick={handleDownload}\n />\n </Form.Field>\n <Form.Field\n standalone\n label={t('settings.download-logs.label')}\n description={t('settings.download-logs.description')}\n >\n <Button.Root\n icon='ph--download-simple--regular'\n iconOnly\n label={t('settings.download-logs.label')}\n onClick={handleDownloadLogs}\n />\n </Form.Field>\n <Form.Field standalone label={t('settings.repair.label')} description={t('settings.repair.description')}>\n <Button.Root\n icon='ph--first-aid-kit--regular'\n iconOnly\n label={t('settings.repair.label')}\n onClick={handleRepair}\n />\n </Form.Field>\n\n {/* TODO(burdon): Move to layout? */}\n {toast && (\n <UiToast.Root defaultOpen duration={5_000} onOpenChange={(open) => !open && setToast(undefined)}>\n <UiToast.Header icon='ph--gift--duotone'>{toast.title}</UiToast.Header>\n {toast.description && <UiToast.Description>{toast.description}</UiToast.Description>}\n </UiToast.Root>\n )}\n\n <Form.Field\n label={t('settings.choose-storage-adaptor.label')}\n description={t('settings.choose-storage-adaptor.description')}\n >\n <Select.Root\n disabled={!onSettingsChange}\n value={Object.entries(StorageAdapters)\n .filter(([_name, value]) => value === storageConfig?.runtime?.client?.storage?.dataStore)\n .map(([name]) => name)\n .slice(0, 1)}\n onValueChange={({ value: [value] }) => value && handleStorageAdapterChange(value)}\n items={Object.keys(StorageAdapters).map((key) => ({\n value: key,\n label: t(`settings.storage-adaptor.${key}.label`),\n }))}\n >\n <Select.Trigger disabled={!onSettingsChange} placeholder={t('settings.data-store.label')} />\n <Select.Content>\n {Object.keys(StorageAdapters).map((key) => (\n <Select.Item key={key} item={{ value: key, label: t(`settings.storage-adaptor.${key}.label`) }} />\n ))}\n </Select.Content>\n </Select.Root>\n </Form.Field>\n </Form.FieldSet>\n\n <DebugPortSettings disabled={!onSettingsChange} />\n </Form.Content>\n </Form.Viewport>\n </Form.Root>\n );\n};\n\nconst updateConfig = (config: ConfigInit, setConfig: (newConfig: ConfigInit) => void, path: string[], value: any) => {\n const storageConfigCopy = JSON.parse(JSON.stringify(config ?? {}));\n setDeep(storageConfigCopy, path, value);\n setConfig(storageConfigCopy);\n queueMicrotask(async () => {\n await SaveConfig(storageConfigCopy);\n });\n};\n\nDebugSettings.displayName = 'DebugSettings';\n"],"mappings":"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"}
|
|
@@ -1,27 +1,36 @@
|
|
|
1
|
-
import { useState } from "react";
|
|
2
1
|
import { Filter, Query } from "@dxos/echo";
|
|
3
|
-
import {
|
|
2
|
+
import { useState } from "react";
|
|
4
3
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
import * as Panel from "@dxos/react-ui/Panel";
|
|
5
|
+
import * as Toolbar from "@dxos/react-ui/Toolbar";
|
|
5
6
|
import { ObjectsTree } from "@dxos/devtools";
|
|
6
7
|
import { useQuery } from "@dxos/echo-react";
|
|
7
8
|
import { JsonHighlighter } from "@dxos/react-ui-syntax-highlighter";
|
|
9
|
+
import * as ScrollArea from "@dxos/react-ui/ScrollArea";
|
|
10
|
+
import * as Input from "@dxos/react-ui/Input";
|
|
11
|
+
import * as Layout from "@dxos/react-ui/Layout";
|
|
12
|
+
import * as Icon from "@dxos/react-ui/Icon";
|
|
8
13
|
//#region src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.tsx
|
|
9
14
|
var DebugSpaceObjectsPanel = ({ space, onOpen, canOpen }) => {
|
|
10
15
|
const [selectedId, setSelectedId] = useState(null);
|
|
16
|
+
const [filter, setFilter] = useState("");
|
|
11
17
|
const [selectedObject] = useQuery(space.db, selectedId ? Query.select(Filter.id(selectedId)) : Query.select(Filter.nothing()));
|
|
12
|
-
return /* @__PURE__ */
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
return /* @__PURE__ */ jsxs(Panel.Root, { children: [/* @__PURE__ */ jsx(Panel.Header, { children: /* @__PURE__ */ jsx(Toolbar.Root, { children: /* @__PURE__ */ jsx(Input.Root, {
|
|
19
|
+
placeholder: "Search...",
|
|
20
|
+
"aria-label": "Search",
|
|
21
|
+
noAutoFill: true,
|
|
22
|
+
value: filter,
|
|
23
|
+
onChange: (event) => setFilter(event.target.value),
|
|
24
|
+
end: /* @__PURE__ */ jsx(Icon.Icon, { icon: "ph--magnifying-glass--regular" })
|
|
25
|
+
}) }) }), /* @__PURE__ */ jsx(Panel.Body, {
|
|
19
26
|
asChild: true,
|
|
20
|
-
children: /* @__PURE__ */ jsxs(Grid, {
|
|
27
|
+
children: /* @__PURE__ */ jsxs(Layout.Grid, {
|
|
28
|
+
grow: true,
|
|
21
29
|
rows: 2,
|
|
22
|
-
classNames: "divide-y divide-
|
|
30
|
+
classNames: "divide-y divide-separator-subtle",
|
|
23
31
|
children: [/* @__PURE__ */ jsx(ScrollArea.Root, { children: /* @__PURE__ */ jsx(ScrollArea.Viewport, { children: /* @__PURE__ */ jsx(ObjectsTree, {
|
|
24
32
|
db: space.db,
|
|
33
|
+
filter,
|
|
25
34
|
onSelect: (entity) => setSelectedId(entity.id),
|
|
26
35
|
onOpen,
|
|
27
36
|
canOpen
|
|
@@ -30,7 +39,7 @@ var DebugSpaceObjectsPanel = ({ space, onOpen, canOpen }) => {
|
|
|
30
39
|
data: selectedObject
|
|
31
40
|
})]
|
|
32
41
|
})
|
|
33
|
-
})] })
|
|
42
|
+
})] });
|
|
34
43
|
};
|
|
35
44
|
DebugSpaceObjectsPanel.displayName = "DebugSpaceObjectsPanel";
|
|
36
45
|
//#endregion
|