datex-studio-cli 0.5.2__tar.gz → 0.5.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (236) hide show
  1. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/PKG-INFO +1 -1
  2. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/pyproject.toml +1 -1
  3. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/__init__.py +1 -1
  4. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/auth.py +28 -0
  5. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/onboarding.py +126 -2
  6. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/quartermaster/client.py +16 -4
  7. datex_studio_cli-0.5.3/src/dxs/core/quartermaster/tenants.py +57 -0
  8. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/web/static/404/index.html +1 -1
  9. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/web/static/404.html +1 -1
  10. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/web/static/design/capture/index.html +1 -1
  11. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/web/static/design/capture/index.txt +1 -1
  12. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/web/static/design/index.html +1 -1
  13. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/web/static/design/index.txt +1 -1
  14. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/web/static/index.html +1 -1
  15. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/web/static/index.txt +1 -1
  16. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/.dockerignore +0 -0
  17. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/.github/actionlint.yaml +0 -0
  18. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/.github/workflows/build-image.yml +0 -0
  19. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/.github/workflows/ci.yml +0 -0
  20. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/.github/workflows/promote-prod.yml +0 -0
  21. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/.github/workflows/release.yml +0 -0
  22. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/.gitignore +0 -0
  23. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/CONTEXT.md +0 -0
  24. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/README.md +0 -0
  25. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/otel/.env.example +0 -0
  26. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/otel/Dockerfile +0 -0
  27. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/otel/README.md +0 -0
  28. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/otel/apply-local-cache.js +0 -0
  29. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/otel/collector-config.yaml +0 -0
  30. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/otel/docker-compose.yml +0 -0
  31. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/otel/local-test-settings.json +0 -0
  32. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/otel/remote-settings.json +0 -0
  33. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/report-creator.skill +0 -0
  34. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/scripts/analyze_corpus.py +0 -0
  35. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/scripts/check_wheel_completeness.py +0 -0
  36. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/scripts/datadog_errors.py +0 -0
  37. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/scripts/generate_rdlx_schema.py +0 -0
  38. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/scripts/wavelength_query.py +0 -0
  39. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/__main__.py +0 -0
  40. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/cli.py +0 -0
  41. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/__init__.py +0 -0
  42. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/api.py +0 -0
  43. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/branch.py +0 -0
  44. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/branch_commit_guard.py +0 -0
  45. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/cascade.py +0 -0
  46. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/config.py +0 -0
  47. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/configuration.py +0 -0
  48. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/crm.py +0 -0
  49. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/crm_delivery.py +0 -0
  50. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/crm_time.py +0 -0
  51. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/datasource.py +0 -0
  52. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/devops.py +0 -0
  53. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/document.py +0 -0
  54. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/endpoint.py +0 -0
  55. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/env.py +0 -0
  56. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/explore.py +0 -0
  57. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/function.py +0 -0
  58. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/init.py +0 -0
  59. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/marketplace.py +0 -0
  60. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/ng/__init__.py +0 -0
  61. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/ng/_common.py +0 -0
  62. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/ng/api.py +0 -0
  63. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/ng/create.py +0 -0
  64. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/ng/data.py +0 -0
  65. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/ng/pack.py +0 -0
  66. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/ng/preview.py +0 -0
  67. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/odata.py +0 -0
  68. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/organization.py +0 -0
  69. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/proxy.py +0 -0
  70. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/reference.py +0 -0
  71. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/release_notes.py +0 -0
  72. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/repo.py +0 -0
  73. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/report/__init__.py +0 -0
  74. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/report/add_cmds.py +0 -0
  75. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/report/api.py +0 -0
  76. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/report/batch.py +0 -0
  77. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/report/create.py +0 -0
  78. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/report/data.py +0 -0
  79. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/report/dataset.py +0 -0
  80. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/report/edit.py +0 -0
  81. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/report/folder.py +0 -0
  82. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/report/preview.py +0 -0
  83. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/report/schema_cmds.py +0 -0
  84. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/reset.py +0 -0
  85. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/schema.py +0 -0
  86. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/servicepack.py +0 -0
  87. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/skills.py +0 -0
  88. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/source.py +0 -0
  89. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/studio.py +0 -0
  90. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/telemetry.py +0 -0
  91. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/user.py +0 -0
  92. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/commands/validation_report.py +0 -0
  93. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/context.py +0 -0
  94. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/__init__.py +0 -0
  95. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/agent_browser.py +0 -0
  96. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/api/__init__.py +0 -0
  97. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/api/app_config.py +0 -0
  98. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/api/client.py +0 -0
  99. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/api/endpoints.py +0 -0
  100. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/api/metadata_models.py +0 -0
  101. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/api/models.py +0 -0
  102. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/api/reference_graph.py +0 -0
  103. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/api/replacements.py +0 -0
  104. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/auth/__init__.py +0 -0
  105. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/auth/datex_tenant.py +0 -0
  106. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/auth/decorators.py +0 -0
  107. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/auth/msal_client.py +0 -0
  108. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/auth/tenants.py +0 -0
  109. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/auth/token_cache.py +0 -0
  110. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/cache.py +0 -0
  111. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/datasource/__init__.py +0 -0
  112. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/datasource/flow_generator.py +0 -0
  113. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/datasource/flow_models.py +0 -0
  114. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/datasource/flow_shape.py +0 -0
  115. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/datasource/generator.py +0 -0
  116. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/datasource/models.py +0 -0
  117. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/datasource/parsers.py +0 -0
  118. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/datasource/resolver.py +0 -0
  119. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/datasource/type_def_parser.py +0 -0
  120. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/datasource/validator.py +0 -0
  121. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/designer/__init__.py +0 -0
  122. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/designer/flow_models.py +0 -0
  123. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/designer/models.py +0 -0
  124. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/designer/parsers.py +0 -0
  125. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/devops/__init__.py +0 -0
  126. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/devops/client.py +0 -0
  127. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/devops/helpers.py +0 -0
  128. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/devops/models.py +0 -0
  129. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/dynamics/__init__.py +0 -0
  130. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/dynamics/client.py +0 -0
  131. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/dynamics/html.py +0 -0
  132. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/dynamics/metadata_cache.py +0 -0
  133. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/dynamics/pagination.py +0 -0
  134. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/dynamics/resolvers.py +0 -0
  135. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/dynamics/time_entry.py +0 -0
  136. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/footprint/__init__.py +0 -0
  137. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/footprint/client.py +0 -0
  138. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/footprint/edmx_parser.py +0 -0
  139. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/footprint/metadata.py +0 -0
  140. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/function/__init__.py +0 -0
  141. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/function/generator.py +0 -0
  142. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/function/models.py +0 -0
  143. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/function/validator.py +0 -0
  144. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/graph.py +0 -0
  145. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/output/__init__.py +0 -0
  146. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/output/csv_fmt.py +0 -0
  147. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/output/formatter.py +0 -0
  148. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/output/json_fmt.py +0 -0
  149. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/output/redaction.py +0 -0
  150. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/output/yaml_fmt.py +0 -0
  151. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/quartermaster/__init__.py +0 -0
  152. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/release_notes.py +0 -0
  153. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/responses.py +0 -0
  154. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/skills/__init__.py +0 -0
  155. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/skills/frontmatter.py +0 -0
  156. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/skills/installer.py +0 -0
  157. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/skills/layout.py +0 -0
  158. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/skills/lock.py +0 -0
  159. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/skills/resolver.py +0 -0
  160. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/skills/staleness.py +0 -0
  161. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/telemetry/__init__.py +0 -0
  162. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/telemetry/config.py +0 -0
  163. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/telemetry/identity.py +0 -0
  164. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/telemetry/recorder.py +0 -0
  165. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/telemetry/scrubber.py +0 -0
  166. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/core/telemetry/sender.py +0 -0
  167. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/models/__init__.py +0 -0
  168. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/ng/__init__.py +0 -0
  169. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/ng/folder.py +0 -0
  170. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/ng/manifest.py +0 -0
  171. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/ng/mocks.py +0 -0
  172. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/ng/preview.py +0 -0
  173. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/ng/scaffold.py +0 -0
  174. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/ng/serve_lock.py +0 -0
  175. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/py.typed +0 -0
  176. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/report/__init__.py +0 -0
  177. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/report/datasource_binding.py +0 -0
  178. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/report/engine.py +0 -0
  179. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/report/field_parser.py +0 -0
  180. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/report/folder.py +0 -0
  181. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/report/manifest.py +0 -0
  182. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/report/models.py +0 -0
  183. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/report/preview.py +0 -0
  184. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/report/preview_arjs.py +0 -0
  185. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/report/schema.py +0 -0
  186. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/report/svg_renderer.py +0 -0
  187. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/report/templates/__init__.py +0 -0
  188. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/report/templates/bill_of_lading.rdlx-json +0 -0
  189. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/report/templates/shipping_label.rdlx-json +0 -0
  190. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/report/validate_arjs.py +0 -0
  191. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/report/validator.py +0 -0
  192. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/report/wrapper.py +0 -0
  193. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/utils/__init__.py +0 -0
  194. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/utils/click_options.py +0 -0
  195. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/utils/clipboard.py +0 -0
  196. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/utils/config.py +0 -0
  197. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/utils/errors.py +0 -0
  198. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/utils/filtering.py +0 -0
  199. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/utils/image.py +0 -0
  200. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/utils/paths.py +0 -0
  201. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/utils/resolvers.py +0 -0
  202. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/utils/responses.py +0 -0
  203. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/utils/restricted.py +0 -0
  204. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/utils/sorting.py +0 -0
  205. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/utils/update_check.py +0 -0
  206. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/utils/versioning.py +0 -0
  207. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/web/__init__.py +0 -0
  208. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/web/app.py +0 -0
  209. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/web/design.py +0 -0
  210. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/web/proxy_app.py +0 -0
  211. {datex_studio_cli-0.5.2/src/dxs/web/static/_next/static/5ccHgxTeTrw5DjrFowRBg → datex_studio_cli-0.5.3/src/dxs/web/static/_next/static/Xsbcf46McNo4ycd40X4z0}/_buildManifest.js +0 -0
  212. {datex_studio_cli-0.5.2/src/dxs/web/static/_next/static/5ccHgxTeTrw5DjrFowRBg → datex_studio_cli-0.5.3/src/dxs/web/static/_next/static/Xsbcf46McNo4ycd40X4z0}/_ssgManifest.js +0 -0
  213. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/web/static/_next/static/chunks/0b24cca5-c1e1c8810348f107.js +0 -0
  214. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/web/static/_next/static/chunks/255-102f2e5b2e3dc2ef.js +0 -0
  215. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/web/static/_next/static/chunks/4bd1b696-c023c6e3521b1417.js +0 -0
  216. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/web/static/_next/static/chunks/538-b06224e65f71c9a1.js +0 -0
  217. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/web/static/_next/static/chunks/697-0e000ab410d9f470.js +0 -0
  218. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/web/static/_next/static/chunks/871-1acacdb7b4022abf.js +0 -0
  219. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/web/static/_next/static/chunks/8b8f67fc-6295949a4b5485a4.js +0 -0
  220. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/web/static/_next/static/chunks/909-c88abba3cf0caec3.js +0 -0
  221. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/web/static/_next/static/chunks/app/_not-found/page-e3c660196c244183.js +0 -0
  222. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/web/static/_next/static/chunks/app/design/capture/page-c083dc9f01f32a04.js +0 -0
  223. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/web/static/_next/static/chunks/app/design/page-689cd5b9e1d9a74e.js +0 -0
  224. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/web/static/_next/static/chunks/app/layout-cec86f90e385371d.js +0 -0
  225. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/web/static/_next/static/chunks/app/page-f0380b0f29983264.js +0 -0
  226. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/web/static/_next/static/chunks/framework-de98b93a850cfc71.js +0 -0
  227. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/web/static/_next/static/chunks/main-0f18f91200dac003.js +0 -0
  228. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/web/static/_next/static/chunks/main-app-694cf3568b6c9fa9.js +0 -0
  229. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/web/static/_next/static/chunks/pages/_app-7d307437aca18ad4.js +0 -0
  230. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/web/static/_next/static/chunks/pages/_error-cb2a52f75f2162e2.js +0 -0
  231. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/web/static/_next/static/chunks/polyfills-42372ed130431b0a.js +0 -0
  232. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/web/static/_next/static/chunks/webpack-2b297ada5306c17f.js +0 -0
  233. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/web/static/_next/static/css/360c657de5e04df8.css +0 -0
  234. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/web/static/render-cli.js +0 -0
  235. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/web/static/report-preview.html +0 -0
  236. {datex_studio_cli-0.5.2 → datex_studio_cli-0.5.3}/src/dxs/web/static/report-validate.html +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: datex-studio-cli
3
- Version: 0.5.2
3
+ Version: 0.5.3
4
4
  Summary: CLI for Datex Studio low-code platform, designed for LLM-based AI agents
5
5
  Project-URL: Homepage, https://github.com/datex/datex-studio-cli
6
6
  Project-URL: Documentation, https://github.com/datex/datex-studio-cli
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "datex-studio-cli"
7
- version = "0.5.2"
7
+ version = "0.5.3"
8
8
  description = "CLI for Datex Studio low-code platform, designed for LLM-based AI agents"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -1,4 +1,4 @@
1
1
  """Datex Studio CLI - Command-line interface for Datex Studio platform."""
2
2
 
3
- __version__ = "0.5.2"
3
+ __version__ = "0.5.3"
4
4
  __app_name__ = "dxs"
@@ -32,14 +32,38 @@ from dxs.core.auth.token_cache import CachedIdentity, get_identity_override
32
32
  from dxs.core.footprint import get_footprint_token
33
33
  from dxs.core.onboarding import (
34
34
  LoginPresenter,
35
+ apply_sign_in_tenant_hint,
35
36
  human_present,
36
37
  map_login_failure,
38
+ missing_service_principal_tenant,
37
39
  )
40
+ from dxs.core.quartermaster.tenants import lookup_sign_in_tenant
38
41
  from dxs.utils.errors import AuthenticationError, DxsError, ValidationError
39
42
  from dxs.utils.responses import list_response, single
40
43
  from dxs.utils.restricted import restrict_in_restricted_mode
41
44
 
42
45
 
46
+ def _sharpen_missing_service_principal(
47
+ mapped: AuthenticationError, tenant_id: str | None, raw_error: str
48
+ ) -> AuthenticationError:
49
+ """Ask Quartermaster which tenant the org actually signs in against.
50
+
51
+ Only for DXS-AUTH-030, only after the login already failed, and only ever
52
+ additive: any problem reaching the service leaves the mapped notice as-is.
53
+ The tenant comes from the caller when it resolved one, and otherwise out of
54
+ Entra's own error text — a blank-prompt or org-name login never had one.
55
+ """
56
+ requested = tenant_id or missing_service_principal_tenant(raw_error)
57
+ if not requested:
58
+ return mapped
59
+ try:
60
+ return apply_sign_in_tenant_hint(
61
+ mapped, requested_tenant=requested, sign_in=lookup_sign_in_tenant(requested)
62
+ )
63
+ except Exception: # noqa: BLE001 - never worsen a diagnosed failure
64
+ return mapped
65
+
66
+
43
67
  def _reject_tenant_override(ctx: DxsContext, command: str) -> None:
44
68
  """Block --tenant on identity-management commands.
45
69
 
@@ -333,6 +357,10 @@ def run_standard_login(
333
357
  mapped = map_login_failure(
334
358
  e, external=tenant_scoped, tenant_id=tenant_id, domain=domain, upn=upn
335
359
  )
360
+ if mapped.code == "DXS-AUTH-030":
361
+ mapped = _sharpen_missing_service_principal(
362
+ mapped, tenant_id, f"{e.message} {e.details}"
363
+ )
336
364
  if mapped is e:
337
365
  raise
338
366
  raise mapped from e
@@ -8,6 +8,7 @@ keeps a hard rule: machine envelopes go to stdout, human chrome to stderr.
8
8
  """
9
9
 
10
10
  import os
11
+ import re
11
12
  import shutil
12
13
  import sys
13
14
  from dataclasses import dataclass, field
@@ -19,6 +20,7 @@ import click
19
20
  if TYPE_CHECKING:
20
21
  from dxs.context import DxsContext
21
22
  from dxs.core.api.client import ApiClient
23
+ from dxs.core.quartermaster.tenants import SignInTenant
22
24
  from dxs.utils.errors import AuthenticationError
23
25
 
24
26
 
@@ -151,6 +153,51 @@ def detect_profile(client: "ApiClient") -> OnboardingProfile:
151
153
  )
152
154
 
153
155
 
156
+ # AADSTS650052: the tenant holds no service principal for a Datex app, so the
157
+ # sign-in cannot even reach a consent screen. Its prose ("Contact your IT Admin
158
+ # ... or consent to the application") reads as consent-required and is not: no
159
+ # consent granted in the tenant named by the error helps a user whose account
160
+ # lives in a different one, which is the common cause — a work-email domain
161
+ # resolves to the org's own corporate tenant (`homeTenantId`), while Datex
162
+ # provisioned `wavelength<org>.onmicrosoft.com` for them and invited their staff
163
+ # into that. Detected and answered ahead of the consent family for that reason.
164
+ _MISSING_SP_MARKERS = (
165
+ "aadsts650052",
166
+ "lacks a service principal",
167
+ )
168
+
169
+ # The tenant is named in the error text, which is the only source on paths where
170
+ # the caller never resolved one (a blank prompt, an org-name login).
171
+ _MISSING_SP_TENANT = re.compile(
172
+ r"organization\s+'?([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})'?",
173
+ re.IGNORECASE,
174
+ )
175
+
176
+
177
+ def is_missing_service_principal_error(error_text: str) -> bool:
178
+ """True when the tenant signed in against has no Datex service principal."""
179
+ text = (error_text or "").lower()
180
+ return any(marker in text for marker in _MISSING_SP_MARKERS)
181
+
182
+
183
+ def missing_service_principal_tenant(error_text: str) -> str | None:
184
+ """The tenant ID Entra named in an AADSTS650052 failure, if it is there."""
185
+ match = _MISSING_SP_TENANT.search(error_text or "")
186
+ return match.group(1) if match else None
187
+
188
+
189
+ def render_missing_service_principal_notice(tenant_id: str, domain: str | None) -> str:
190
+ """Actionable notice for a sign-in scoped to a tenant Datex does not live in."""
191
+ where = f" ({domain})" if domain else ""
192
+ tenant = tenant_id or "the tenant you signed in against"
193
+ return (
194
+ f"AADSTS650052: tenant {tenant}{where} has no service principal for the Datex apps, "
195
+ "so no Datex sign-in against it can succeed. A work-email domain resolves to your "
196
+ "organization's own corporate tenant, which is not where your Datex account lives "
197
+ "when Datex provisioned a wavelength<org>.onmicrosoft.com tenant for your organization."
198
+ )
199
+
200
+
154
201
  # Admin-consent-required failure markers. AADSTS65001 = user/admin has not consented;
155
202
  # AADSTS90094 = admin consent required. VERIFY these against a real un-consented tenant
156
203
  # during rollout — device-code flow may surface the code in either the primary result
@@ -165,8 +212,15 @@ _CONSENT_ERROR_MARKERS = (
165
212
 
166
213
 
167
214
  def is_consent_required_error(error_text: str) -> bool:
168
- """True when an auth failure indicates the app is not consented in the tenant."""
215
+ """True when an auth failure indicates the app is not consented in the tenant.
216
+
217
+ A missing service principal (AADSTS650052) is deliberately excluded: its text
218
+ carries both "consent" and "IT Admin", so the heuristic below claims it, and
219
+ every remedy that follows from that answer points at the wrong tenant.
220
+ """
169
221
  text = (error_text or "").lower()
222
+ if is_missing_service_principal_error(text):
223
+ return False
170
224
  if any(marker in text for marker in _CONSENT_ERROR_MARKERS):
171
225
  return True
172
226
  # Catch phrasings like "admin approval required" / "has not consented".
@@ -248,7 +302,9 @@ def map_login_failure(
248
302
  are external-tenant only: both are meaningless for the home tenant, where
249
303
  the app is consented and every user is a member. The Conditional Access
250
304
  notice is not, because that policy is configured per tenant and the home
251
- tenant can adopt it like any other.
305
+ tenant can adopt it like any other. Neither is the missing-service-principal
306
+ notice: it names the tenant Entra refused, which it carries in its own text,
307
+ so it stays diagnostic on the paths where the caller resolved no tenant at all.
252
308
  """
253
309
  from dxs.utils.errors import AuthenticationError
254
310
 
@@ -266,6 +322,22 @@ def map_login_failure(
266
322
  "If you are on a remote host, sign in locally and copy ~/.datex/credentials.yaml",
267
323
  ],
268
324
  )
325
+ if is_missing_service_principal_error(combined):
326
+ tenant = tenant_id or missing_service_principal_tenant(combined) or ""
327
+ consent_hint = "dxs auth consent" + (f" --tenant-id {tenant}" if tenant else "")
328
+ return AuthenticationError(
329
+ message=render_missing_service_principal_notice(tenant, domain),
330
+ code="DXS-AUTH-030",
331
+ suggestions=[
332
+ "dxs init --domain wavelength<org>.onmicrosoft.com "
333
+ "# sign in against the tenant Datex provisioned for you",
334
+ "Sign in there with the same work email — the tenant only decides which "
335
+ "directory issues the token, not which credentials you type",
336
+ "Ask Datex support which Entra tenant your organization signs in against",
337
+ "If your organization does sign in with its own tenant, a tenant admin "
338
+ f"must grant consent first: {consent_hint}",
339
+ ],
340
+ )
269
341
  if not external:
270
342
  return error
271
343
  if upn and is_guest_account_error(combined):
@@ -286,6 +358,58 @@ def map_login_failure(
286
358
  return error
287
359
 
288
360
 
361
+ def apply_sign_in_tenant_hint(
362
+ error: "AuthenticationError",
363
+ *,
364
+ requested_tenant: str,
365
+ sign_in: "SignInTenant | None",
366
+ ) -> "AuthenticationError":
367
+ """Replace the generic AADSTS650052 advice with this org's actual tenant.
368
+
369
+ :func:`map_login_failure` can only describe the *shape* of the fix, since
370
+ nothing local knows which directory a given organization signs in against.
371
+ Given Quartermaster's answer, the advice collapses to one command — or, when
372
+ the tenant that refused the login is the right one after all, to the consent
373
+ route instead. ``sign_in`` of None (unknown org, service unreachable, older
374
+ service) leaves the generic notice exactly as it was.
375
+ """
376
+ from dxs.utils.errors import AuthenticationError
377
+
378
+ if sign_in is None:
379
+ return error
380
+
381
+ if sign_in.tenant_id.strip().lower() == requested_tenant.strip().lower():
382
+ return AuthenticationError(
383
+ message=(
384
+ f"AADSTS650052: {requested_tenant} is the tenant your organization signs in "
385
+ "against, so the Datex apps have simply never been consented there — no "
386
+ "service principal for them exists in it yet."
387
+ ),
388
+ code="DXS-AUTH-030",
389
+ suggestions=[
390
+ f"A tenant admin runs once: dxs auth consent --tenant-id {requested_tenant}",
391
+ "A blank Microsoft page carrying admin_consent=True is success, not a failure",
392
+ "Then retry the login",
393
+ ],
394
+ )
395
+
396
+ target = sign_in.domain or sign_in.tenant_id
397
+ flag = f"--domain {sign_in.domain}" if sign_in.domain else f"--tenant-id {sign_in.tenant_id}"
398
+ return AuthenticationError(
399
+ message=(
400
+ f"AADSTS650052: your organization signs in against {target}, not tenant "
401
+ f"{requested_tenant} — that one is only where your work-email domain resolves, "
402
+ "and the Datex apps do not exist in it."
403
+ ),
404
+ code="DXS-AUTH-030",
405
+ suggestions=[
406
+ f"dxs init {flag}",
407
+ "Sign in there with the same work email — you are a guest in that directory, so "
408
+ "your own organization's credentials still apply",
409
+ ],
410
+ )
411
+
412
+
289
413
  def browser_allowed(no_browser: bool = False) -> bool:
290
414
  """Whether login chrome may open (or be) a browser.
291
415
 
@@ -109,8 +109,18 @@ class QuartermasterClient:
109
109
 
110
110
  # -- requests --------------------------------------------------------
111
111
 
112
- def _request(self, path: str, params: dict[str, Any] | None, accept: str) -> httpx.Response:
113
- headers = {"Authorization": f"Bearer {get_access_token()}", "Accept": accept}
112
+ def _request(
113
+ self, path: str, params: dict[str, Any] | None, accept: str, *, anonymous: bool = False
114
+ ) -> httpx.Response:
115
+ """``anonymous`` omits the bearer entirely — not merely optional.
116
+
117
+ The bootstrap route (`/tenants/v1/signin-tenant`) is reached while a
118
+ login is failing, so there is no token to attach and asking for one
119
+ would raise where the caller needs an answer or a shrug.
120
+ """
121
+ headers = {"Accept": accept}
122
+ if not anonymous:
123
+ headers["Authorization"] = f"Bearer {get_access_token()}"
114
124
  try:
115
125
  response = self._http().get(path, params=params, headers=headers)
116
126
  except httpx.HTTPError as exc:
@@ -162,8 +172,10 @@ class QuartermasterClient:
162
172
  status_code=status,
163
173
  )
164
174
 
165
- def get_json(self, path: str, params: dict[str, Any] | None = None) -> Any:
166
- response = self._request(path, params, "application/json")
175
+ def get_json(
176
+ self, path: str, params: dict[str, Any] | None = None, *, anonymous: bool = False
177
+ ) -> Any:
178
+ response = self._request(path, params, "application/json", anonymous=anonymous)
167
179
  try:
168
180
  return response.json()
169
181
  except ValueError as exc:
@@ -0,0 +1,57 @@
1
+ """Which Entra tenant an organization signs in against (`/tenants/v1/`).
2
+
3
+ The bootstrap half of the AADSTS650052 recovery: a work-email domain resolves,
4
+ through Entra's public discovery document, to the caller's own corporate
5
+ tenant — which for every org Datex provisioned a `wavelength<org>.onmicrosoft.com`
6
+ tenant for is the wrong directory. Quartermaster holds the org records that map
7
+ one to the other and answers anonymously, which is what makes it reachable from
8
+ a login that has just failed.
9
+
10
+ Every failure is a shrug. This runs on an error path, after a login already
11
+ failed with a diagnosis in hand: a Quartermaster that is down, slow, blocked by
12
+ a corporate proxy, older than this CLI, or simply not configured must leave that
13
+ diagnosis alone rather than replace it with a worse one.
14
+ """
15
+
16
+ from __future__ import annotations
17
+
18
+ from dataclasses import dataclass
19
+
20
+ from dxs.core.quartermaster.client import QuartermasterClient
21
+
22
+ # Short on purpose: a failed login is already waiting on this.
23
+ _TIMEOUT_SECONDS = 5.0
24
+
25
+
26
+ @dataclass(frozen=True)
27
+ class SignInTenant:
28
+ """The directory an org authenticates against; ``domain`` when one is recorded."""
29
+
30
+ tenant_id: str
31
+ domain: str | None
32
+
33
+
34
+ def lookup_sign_in_tenant(tenant_id: str) -> SignInTenant | None:
35
+ """Resolve ``tenant_id`` to the tenant its organization signs in against.
36
+
37
+ Returns None for every failure and for an unrecognized tenant — callers use
38
+ it to sharpen an error, never to decide whether one occurred.
39
+ """
40
+ try:
41
+ with QuartermasterClient(timeout=_TIMEOUT_SECONDS) as client:
42
+ body = client.get_json(
43
+ "/tenants/v1/signin-tenant", {"tenant": tenant_id}, anonymous=True
44
+ )
45
+ except Exception: # noqa: BLE001 - best-effort by contract; see module docstring
46
+ return None
47
+
48
+ if not isinstance(body, dict):
49
+ return None
50
+ resolved = body.get("sign_in_tenant_id")
51
+ if not isinstance(resolved, str) or not resolved.strip():
52
+ return None
53
+ domain = body.get("sign_in_domain")
54
+ return SignInTenant(
55
+ tenant_id=resolved.strip(),
56
+ domain=domain.strip() if isinstance(domain, str) and domain.strip() else None,
57
+ )
@@ -1 +1 @@
1
- <!DOCTYPE html><!--5ccHgxTeTrw5DjrFowRBg--><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/360c657de5e04df8.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-2b297ada5306c17f.js"/><script src="/_next/static/chunks/4bd1b696-c023c6e3521b1417.js" async=""></script><script src="/_next/static/chunks/255-102f2e5b2e3dc2ef.js" async=""></script><script src="/_next/static/chunks/main-app-694cf3568b6c9fa9.js" async=""></script><script src="/_next/static/chunks/909-c88abba3cf0caec3.js" async=""></script><script src="/_next/static/chunks/697-0e000ab410d9f470.js" async=""></script><script src="/_next/static/chunks/app/layout-cec86f90e385371d.js" async=""></script><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><title>Datex FDE Agent Console</title><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-background text-foreground h-screen overflow-hidden flex flex-col"><div hidden=""><!--$--><!--/$--></div><script>((a,b,c,d,e,f,g,h)=>{let i=document.documentElement,j=["light","dark"];function k(b){var c;(Array.isArray(a)?a:[a]).forEach(a=>{let c="class"===a,d=c&&f?e.map(a=>f[a]||a):e;c?(i.classList.remove(...d),i.classList.add(f&&f[b]?f[b]:b)):i.setAttribute(a,b)}),c=b,h&&j.includes(c)&&(i.style.colorScheme=c)}if(d)k(d);else try{let a=localStorage.getItem(b)||c,d=g&&"system"===a?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":a;k(d)}catch(a){}})("class","theme","dark",null,["light","dark"],null,true,true)</script><div class="flex flex-col h-full overflow-hidden"><header class="flex-shrink-0 border-b px-4 py-4 flex items-center gap-3"><button class="p-1 rounded-md hover:bg-accent" aria-label="Toggle navigation"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-menu h-5 w-5" aria-hidden="true"><path d="M4 5h16"></path><path d="M4 12h16"></path><path d="M4 19h16"></path></svg></button><h1 class="text-xl font-semibold tracking-tight">Datex FDE Agent Console</h1><div class="ml-auto"><button class="inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 hover:bg-accent hover:text-accent-foreground h-9 w-9" disabled=""></button></div></header><div class="flex flex-1 min-h-0"><aside class="hidden md:flex flex-col border-r bg-background flex-shrink-0 transition-[width] duration-200 w-0 overflow-hidden"><nav class="flex flex-col gap-1 p-2"><button class="flex items-center gap-3 rounded-md px-3 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground bg-accent text-accent-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-table h-4 w-4" aria-hidden="true"><path d="M12 3v18"></path><rect width="18" height="18" x="3" y="3" rx="2"></rect><path d="M3 9h18"></path><path d="M3 15h18"></path></svg>Data Studio</button><button class="flex items-center gap-3 rounded-md px-3 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-palette h-4 w-4" aria-hidden="true"><path d="M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z"></path><circle cx="13.5" cy="6.5" r=".5" fill="currentColor"></circle><circle cx="17.5" cy="10.5" r=".5" fill="currentColor"></circle><circle cx="6.5" cy="12.5" r=".5" fill="currentColor"></circle><circle cx="8.5" cy="7.5" r=".5" fill="currentColor"></circle></svg>Report Designer</button></nav></aside><main class="flex-1 min-h-0 min-w-0 overflow-hidden"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--></main></div></div><script src="/_next/static/chunks/webpack-2b297ada5306c17f.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[3479,[\"909\",\"static/chunks/909-c88abba3cf0caec3.js\",\"697\",\"static/chunks/697-0e000ab410d9f470.js\",\"177\",\"static/chunks/app/layout-cec86f90e385371d.js\"],\"ThemeProvider\"]\n3:I[2308,[\"909\",\"static/chunks/909-c88abba3cf0caec3.js\",\"697\",\"static/chunks/697-0e000ab410d9f470.js\",\"177\",\"static/chunks/app/layout-cec86f90e385371d.js\"],\"default\"]\n4:I[9766,[],\"\"]\n5:I[8924,[],\"\"]\n6:I[4431,[],\"OutletBoundary\"]\n8:I[5278,[],\"AsyncMetadataOutlet\"]\na:I[4431,[],\"ViewportBoundary\"]\nc:I[4431,[],\"MetadataBoundary\"]\nd:\"$Sreact.suspense\"\nf:I[7150,[],\"\"]\n:HL[\"/_next/static/css/360c657de5e04df8.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"5ccHgxTeTrw5DjrFowRBg\",\"p\":\"\",\"c\":[\"\",\"_not-found\",\"\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/360c657de5e04df8.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"className\":\"bg-background text-foreground h-screen overflow-hidden flex flex-col\",\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"children\":[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]}]}]]}],{\"children\":[\"/_not-found\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L6\",null,{\"children\":[\"$L7\",[\"$\",\"$L8\",null,{\"promise\":\"$@9\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],null],[\"$\",\"$Lc\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$d\",null,{\"fallback\":null,\"children\":\"$Le\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$f\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"b:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n7:null\n"])</script><script>self.__next_f.push([1,"9:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Datex FDE Agent Console\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"e:\"$9:metadata\"\n"])</script></body></html>
1
+ <!DOCTYPE html><!--Xsbcf46McNo4ycd40X4z0--><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/360c657de5e04df8.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-2b297ada5306c17f.js"/><script src="/_next/static/chunks/4bd1b696-c023c6e3521b1417.js" async=""></script><script src="/_next/static/chunks/255-102f2e5b2e3dc2ef.js" async=""></script><script src="/_next/static/chunks/main-app-694cf3568b6c9fa9.js" async=""></script><script src="/_next/static/chunks/909-c88abba3cf0caec3.js" async=""></script><script src="/_next/static/chunks/697-0e000ab410d9f470.js" async=""></script><script src="/_next/static/chunks/app/layout-cec86f90e385371d.js" async=""></script><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><title>Datex FDE Agent Console</title><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-background text-foreground h-screen overflow-hidden flex flex-col"><div hidden=""><!--$--><!--/$--></div><script>((a,b,c,d,e,f,g,h)=>{let i=document.documentElement,j=["light","dark"];function k(b){var c;(Array.isArray(a)?a:[a]).forEach(a=>{let c="class"===a,d=c&&f?e.map(a=>f[a]||a):e;c?(i.classList.remove(...d),i.classList.add(f&&f[b]?f[b]:b)):i.setAttribute(a,b)}),c=b,h&&j.includes(c)&&(i.style.colorScheme=c)}if(d)k(d);else try{let a=localStorage.getItem(b)||c,d=g&&"system"===a?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":a;k(d)}catch(a){}})("class","theme","dark",null,["light","dark"],null,true,true)</script><div class="flex flex-col h-full overflow-hidden"><header class="flex-shrink-0 border-b px-4 py-4 flex items-center gap-3"><button class="p-1 rounded-md hover:bg-accent" aria-label="Toggle navigation"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-menu h-5 w-5" aria-hidden="true"><path d="M4 5h16"></path><path d="M4 12h16"></path><path d="M4 19h16"></path></svg></button><h1 class="text-xl font-semibold tracking-tight">Datex FDE Agent Console</h1><div class="ml-auto"><button class="inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 hover:bg-accent hover:text-accent-foreground h-9 w-9" disabled=""></button></div></header><div class="flex flex-1 min-h-0"><aside class="hidden md:flex flex-col border-r bg-background flex-shrink-0 transition-[width] duration-200 w-0 overflow-hidden"><nav class="flex flex-col gap-1 p-2"><button class="flex items-center gap-3 rounded-md px-3 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground bg-accent text-accent-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-table h-4 w-4" aria-hidden="true"><path d="M12 3v18"></path><rect width="18" height="18" x="3" y="3" rx="2"></rect><path d="M3 9h18"></path><path d="M3 15h18"></path></svg>Data Studio</button><button class="flex items-center gap-3 rounded-md px-3 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-palette h-4 w-4" aria-hidden="true"><path d="M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z"></path><circle cx="13.5" cy="6.5" r=".5" fill="currentColor"></circle><circle cx="17.5" cy="10.5" r=".5" fill="currentColor"></circle><circle cx="6.5" cy="12.5" r=".5" fill="currentColor"></circle><circle cx="8.5" cy="7.5" r=".5" fill="currentColor"></circle></svg>Report Designer</button></nav></aside><main class="flex-1 min-h-0 min-w-0 overflow-hidden"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--></main></div></div><script src="/_next/static/chunks/webpack-2b297ada5306c17f.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[3479,[\"909\",\"static/chunks/909-c88abba3cf0caec3.js\",\"697\",\"static/chunks/697-0e000ab410d9f470.js\",\"177\",\"static/chunks/app/layout-cec86f90e385371d.js\"],\"ThemeProvider\"]\n3:I[2308,[\"909\",\"static/chunks/909-c88abba3cf0caec3.js\",\"697\",\"static/chunks/697-0e000ab410d9f470.js\",\"177\",\"static/chunks/app/layout-cec86f90e385371d.js\"],\"default\"]\n4:I[9766,[],\"\"]\n5:I[8924,[],\"\"]\n6:I[4431,[],\"OutletBoundary\"]\n8:I[5278,[],\"AsyncMetadataOutlet\"]\na:I[4431,[],\"ViewportBoundary\"]\nc:I[4431,[],\"MetadataBoundary\"]\nd:\"$Sreact.suspense\"\nf:I[7150,[],\"\"]\n:HL[\"/_next/static/css/360c657de5e04df8.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"Xsbcf46McNo4ycd40X4z0\",\"p\":\"\",\"c\":[\"\",\"_not-found\",\"\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/360c657de5e04df8.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"className\":\"bg-background text-foreground h-screen overflow-hidden flex flex-col\",\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"children\":[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]}]}]]}],{\"children\":[\"/_not-found\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L6\",null,{\"children\":[\"$L7\",[\"$\",\"$L8\",null,{\"promise\":\"$@9\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],null],[\"$\",\"$Lc\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$d\",null,{\"fallback\":null,\"children\":\"$Le\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$f\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"b:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n7:null\n"])</script><script>self.__next_f.push([1,"9:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Datex FDE Agent Console\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"e:\"$9:metadata\"\n"])</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><!--5ccHgxTeTrw5DjrFowRBg--><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/360c657de5e04df8.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-2b297ada5306c17f.js"/><script src="/_next/static/chunks/4bd1b696-c023c6e3521b1417.js" async=""></script><script src="/_next/static/chunks/255-102f2e5b2e3dc2ef.js" async=""></script><script src="/_next/static/chunks/main-app-694cf3568b6c9fa9.js" async=""></script><script src="/_next/static/chunks/909-c88abba3cf0caec3.js" async=""></script><script src="/_next/static/chunks/697-0e000ab410d9f470.js" async=""></script><script src="/_next/static/chunks/app/layout-cec86f90e385371d.js" async=""></script><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><title>Datex FDE Agent Console</title><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-background text-foreground h-screen overflow-hidden flex flex-col"><div hidden=""><!--$--><!--/$--></div><script>((a,b,c,d,e,f,g,h)=>{let i=document.documentElement,j=["light","dark"];function k(b){var c;(Array.isArray(a)?a:[a]).forEach(a=>{let c="class"===a,d=c&&f?e.map(a=>f[a]||a):e;c?(i.classList.remove(...d),i.classList.add(f&&f[b]?f[b]:b)):i.setAttribute(a,b)}),c=b,h&&j.includes(c)&&(i.style.colorScheme=c)}if(d)k(d);else try{let a=localStorage.getItem(b)||c,d=g&&"system"===a?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":a;k(d)}catch(a){}})("class","theme","dark",null,["light","dark"],null,true,true)</script><div class="flex flex-col h-full overflow-hidden"><header class="flex-shrink-0 border-b px-4 py-4 flex items-center gap-3"><button class="p-1 rounded-md hover:bg-accent" aria-label="Toggle navigation"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-menu h-5 w-5" aria-hidden="true"><path d="M4 5h16"></path><path d="M4 12h16"></path><path d="M4 19h16"></path></svg></button><h1 class="text-xl font-semibold tracking-tight">Datex FDE Agent Console</h1><div class="ml-auto"><button class="inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 hover:bg-accent hover:text-accent-foreground h-9 w-9" disabled=""></button></div></header><div class="flex flex-1 min-h-0"><aside class="hidden md:flex flex-col border-r bg-background flex-shrink-0 transition-[width] duration-200 w-0 overflow-hidden"><nav class="flex flex-col gap-1 p-2"><button class="flex items-center gap-3 rounded-md px-3 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground bg-accent text-accent-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-table h-4 w-4" aria-hidden="true"><path d="M12 3v18"></path><rect width="18" height="18" x="3" y="3" rx="2"></rect><path d="M3 9h18"></path><path d="M3 15h18"></path></svg>Data Studio</button><button class="flex items-center gap-3 rounded-md px-3 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-palette h-4 w-4" aria-hidden="true"><path d="M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z"></path><circle cx="13.5" cy="6.5" r=".5" fill="currentColor"></circle><circle cx="17.5" cy="10.5" r=".5" fill="currentColor"></circle><circle cx="6.5" cy="12.5" r=".5" fill="currentColor"></circle><circle cx="8.5" cy="7.5" r=".5" fill="currentColor"></circle></svg>Report Designer</button></nav></aside><main class="flex-1 min-h-0 min-w-0 overflow-hidden"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--></main></div></div><script src="/_next/static/chunks/webpack-2b297ada5306c17f.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[3479,[\"909\",\"static/chunks/909-c88abba3cf0caec3.js\",\"697\",\"static/chunks/697-0e000ab410d9f470.js\",\"177\",\"static/chunks/app/layout-cec86f90e385371d.js\"],\"ThemeProvider\"]\n3:I[2308,[\"909\",\"static/chunks/909-c88abba3cf0caec3.js\",\"697\",\"static/chunks/697-0e000ab410d9f470.js\",\"177\",\"static/chunks/app/layout-cec86f90e385371d.js\"],\"default\"]\n4:I[9766,[],\"\"]\n5:I[8924,[],\"\"]\n6:I[4431,[],\"OutletBoundary\"]\n8:I[5278,[],\"AsyncMetadataOutlet\"]\na:I[4431,[],\"ViewportBoundary\"]\nc:I[4431,[],\"MetadataBoundary\"]\nd:\"$Sreact.suspense\"\nf:I[7150,[],\"\"]\n:HL[\"/_next/static/css/360c657de5e04df8.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"5ccHgxTeTrw5DjrFowRBg\",\"p\":\"\",\"c\":[\"\",\"_not-found\",\"\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/360c657de5e04df8.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"className\":\"bg-background text-foreground h-screen overflow-hidden flex flex-col\",\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"children\":[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]}]}]]}],{\"children\":[\"/_not-found\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L6\",null,{\"children\":[\"$L7\",[\"$\",\"$L8\",null,{\"promise\":\"$@9\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],null],[\"$\",\"$Lc\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$d\",null,{\"fallback\":null,\"children\":\"$Le\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$f\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"b:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n7:null\n"])</script><script>self.__next_f.push([1,"9:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Datex FDE Agent Console\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"e:\"$9:metadata\"\n"])</script></body></html>
1
+ <!DOCTYPE html><!--Xsbcf46McNo4ycd40X4z0--><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/360c657de5e04df8.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-2b297ada5306c17f.js"/><script src="/_next/static/chunks/4bd1b696-c023c6e3521b1417.js" async=""></script><script src="/_next/static/chunks/255-102f2e5b2e3dc2ef.js" async=""></script><script src="/_next/static/chunks/main-app-694cf3568b6c9fa9.js" async=""></script><script src="/_next/static/chunks/909-c88abba3cf0caec3.js" async=""></script><script src="/_next/static/chunks/697-0e000ab410d9f470.js" async=""></script><script src="/_next/static/chunks/app/layout-cec86f90e385371d.js" async=""></script><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><title>Datex FDE Agent Console</title><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-background text-foreground h-screen overflow-hidden flex flex-col"><div hidden=""><!--$--><!--/$--></div><script>((a,b,c,d,e,f,g,h)=>{let i=document.documentElement,j=["light","dark"];function k(b){var c;(Array.isArray(a)?a:[a]).forEach(a=>{let c="class"===a,d=c&&f?e.map(a=>f[a]||a):e;c?(i.classList.remove(...d),i.classList.add(f&&f[b]?f[b]:b)):i.setAttribute(a,b)}),c=b,h&&j.includes(c)&&(i.style.colorScheme=c)}if(d)k(d);else try{let a=localStorage.getItem(b)||c,d=g&&"system"===a?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":a;k(d)}catch(a){}})("class","theme","dark",null,["light","dark"],null,true,true)</script><div class="flex flex-col h-full overflow-hidden"><header class="flex-shrink-0 border-b px-4 py-4 flex items-center gap-3"><button class="p-1 rounded-md hover:bg-accent" aria-label="Toggle navigation"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-menu h-5 w-5" aria-hidden="true"><path d="M4 5h16"></path><path d="M4 12h16"></path><path d="M4 19h16"></path></svg></button><h1 class="text-xl font-semibold tracking-tight">Datex FDE Agent Console</h1><div class="ml-auto"><button class="inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 hover:bg-accent hover:text-accent-foreground h-9 w-9" disabled=""></button></div></header><div class="flex flex-1 min-h-0"><aside class="hidden md:flex flex-col border-r bg-background flex-shrink-0 transition-[width] duration-200 w-0 overflow-hidden"><nav class="flex flex-col gap-1 p-2"><button class="flex items-center gap-3 rounded-md px-3 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground bg-accent text-accent-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-table h-4 w-4" aria-hidden="true"><path d="M12 3v18"></path><rect width="18" height="18" x="3" y="3" rx="2"></rect><path d="M3 9h18"></path><path d="M3 15h18"></path></svg>Data Studio</button><button class="flex items-center gap-3 rounded-md px-3 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-palette h-4 w-4" aria-hidden="true"><path d="M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z"></path><circle cx="13.5" cy="6.5" r=".5" fill="currentColor"></circle><circle cx="17.5" cy="10.5" r=".5" fill="currentColor"></circle><circle cx="6.5" cy="12.5" r=".5" fill="currentColor"></circle><circle cx="8.5" cy="7.5" r=".5" fill="currentColor"></circle></svg>Report Designer</button></nav></aside><main class="flex-1 min-h-0 min-w-0 overflow-hidden"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--></main></div></div><script src="/_next/static/chunks/webpack-2b297ada5306c17f.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[3479,[\"909\",\"static/chunks/909-c88abba3cf0caec3.js\",\"697\",\"static/chunks/697-0e000ab410d9f470.js\",\"177\",\"static/chunks/app/layout-cec86f90e385371d.js\"],\"ThemeProvider\"]\n3:I[2308,[\"909\",\"static/chunks/909-c88abba3cf0caec3.js\",\"697\",\"static/chunks/697-0e000ab410d9f470.js\",\"177\",\"static/chunks/app/layout-cec86f90e385371d.js\"],\"default\"]\n4:I[9766,[],\"\"]\n5:I[8924,[],\"\"]\n6:I[4431,[],\"OutletBoundary\"]\n8:I[5278,[],\"AsyncMetadataOutlet\"]\na:I[4431,[],\"ViewportBoundary\"]\nc:I[4431,[],\"MetadataBoundary\"]\nd:\"$Sreact.suspense\"\nf:I[7150,[],\"\"]\n:HL[\"/_next/static/css/360c657de5e04df8.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"Xsbcf46McNo4ycd40X4z0\",\"p\":\"\",\"c\":[\"\",\"_not-found\",\"\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/360c657de5e04df8.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"className\":\"bg-background text-foreground h-screen overflow-hidden flex flex-col\",\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"children\":[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]}]}]]}],{\"children\":[\"/_not-found\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L6\",null,{\"children\":[\"$L7\",[\"$\",\"$L8\",null,{\"promise\":\"$@9\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],null],[\"$\",\"$Lc\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$d\",null,{\"fallback\":null,\"children\":\"$Le\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$f\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"b:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n7:null\n"])</script><script>self.__next_f.push([1,"9:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Datex FDE Agent Console\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"e:\"$9:metadata\"\n"])</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><!--5ccHgxTeTrw5DjrFowRBg--><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/360c657de5e04df8.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-2b297ada5306c17f.js"/><script src="/_next/static/chunks/4bd1b696-c023c6e3521b1417.js" async=""></script><script src="/_next/static/chunks/255-102f2e5b2e3dc2ef.js" async=""></script><script src="/_next/static/chunks/main-app-694cf3568b6c9fa9.js" async=""></script><script src="/_next/static/chunks/909-c88abba3cf0caec3.js" async=""></script><script src="/_next/static/chunks/697-0e000ab410d9f470.js" async=""></script><script src="/_next/static/chunks/app/layout-cec86f90e385371d.js" async=""></script><script src="/_next/static/chunks/0b24cca5-c1e1c8810348f107.js" async=""></script><script src="/_next/static/chunks/8b8f67fc-6295949a4b5485a4.js" async=""></script><script src="/_next/static/chunks/538-b06224e65f71c9a1.js" async=""></script><script src="/_next/static/chunks/app/design/capture/page-c083dc9f01f32a04.js" async=""></script><title>Datex FDE Agent Console</title><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-background text-foreground h-screen overflow-hidden flex flex-col"><div hidden=""><!--$--><!--/$--></div><script>((a,b,c,d,e,f,g,h)=>{let i=document.documentElement,j=["light","dark"];function k(b){var c;(Array.isArray(a)?a:[a]).forEach(a=>{let c="class"===a,d=c&&f?e.map(a=>f[a]||a):e;c?(i.classList.remove(...d),i.classList.add(f&&f[b]?f[b]:b)):i.setAttribute(a,b)}),c=b,h&&j.includes(c)&&(i.style.colorScheme=c)}if(d)k(d);else try{let a=localStorage.getItem(b)||c,d=g&&"system"===a?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":a;k(d)}catch(a){}})("class","theme","dark",null,["light","dark"],null,true,true)</script><div>No report open</div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-2b297ada5306c17f.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[3479,[\"909\",\"static/chunks/909-c88abba3cf0caec3.js\",\"697\",\"static/chunks/697-0e000ab410d9f470.js\",\"177\",\"static/chunks/app/layout-cec86f90e385371d.js\"],\"ThemeProvider\"]\n3:I[2308,[\"909\",\"static/chunks/909-c88abba3cf0caec3.js\",\"697\",\"static/chunks/697-0e000ab410d9f470.js\",\"177\",\"static/chunks/app/layout-cec86f90e385371d.js\"],\"default\"]\n4:I[9766,[],\"\"]\n5:I[8924,[],\"\"]\n6:I[1959,[],\"ClientPageRoot\"]\n7:I[6743,[\"903\",\"static/chunks/0b24cca5-c1e1c8810348f107.js\",\"507\",\"static/chunks/8b8f67fc-6295949a4b5485a4.js\",\"538\",\"static/chunks/538-b06224e65f71c9a1.js\",\"672\",\"static/chunks/app/design/capture/page-c083dc9f01f32a04.js\"],\"default\"]\na:I[4431,[],\"OutletBoundary\"]\nc:I[5278,[],\"AsyncMetadataOutlet\"]\ne:I[4431,[],\"ViewportBoundary\"]\n10:I[4431,[],\"MetadataBoundary\"]\n11:\"$Sreact.suspense\"\n13:I[7150,[],\"\"]\n:HL[\"/_next/static/css/360c657de5e04df8.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"5ccHgxTeTrw5DjrFowRBg\",\"p\":\"\",\"c\":[\"\",\"design\",\"capture\",\"\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"design\",{\"children\":[\"capture\",{\"children\":[\"__PAGE__\",{}]}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/360c657de5e04df8.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"className\":\"bg-background text-foreground h-screen overflow-hidden flex flex-col\",\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"children\":[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]}]}]]}],{\"children\":[\"design\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"capture\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L6\",null,{\"Component\":\"$7\",\"searchParams\":{},\"params\":{},\"promises\":[\"$@8\",\"$@9\"]}],null,[\"$\",\"$La\",null,{\"children\":[\"$Lb\",[\"$\",\"$Lc\",null,{\"promise\":\"$@d\"}]]}]]}],{},null,false]},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$Le\",null,{\"children\":\"$Lf\"}],null],[\"$\",\"$L10\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$11\",null,{\"fallback\":null,\"children\":\"$L12\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$13\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"8:{}\n9:\"$0:f:0:1:2:children:2:children:2:children:1:props:children:0:props:params\"\n"])</script><script>self.__next_f.push([1,"f:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\nb:null\n"])</script><script>self.__next_f.push([1,"d:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Datex FDE Agent Console\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"12:\"$d:metadata\"\n"])</script></body></html>
1
+ <!DOCTYPE html><!--Xsbcf46McNo4ycd40X4z0--><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/360c657de5e04df8.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-2b297ada5306c17f.js"/><script src="/_next/static/chunks/4bd1b696-c023c6e3521b1417.js" async=""></script><script src="/_next/static/chunks/255-102f2e5b2e3dc2ef.js" async=""></script><script src="/_next/static/chunks/main-app-694cf3568b6c9fa9.js" async=""></script><script src="/_next/static/chunks/909-c88abba3cf0caec3.js" async=""></script><script src="/_next/static/chunks/697-0e000ab410d9f470.js" async=""></script><script src="/_next/static/chunks/app/layout-cec86f90e385371d.js" async=""></script><script src="/_next/static/chunks/0b24cca5-c1e1c8810348f107.js" async=""></script><script src="/_next/static/chunks/8b8f67fc-6295949a4b5485a4.js" async=""></script><script src="/_next/static/chunks/538-b06224e65f71c9a1.js" async=""></script><script src="/_next/static/chunks/app/design/capture/page-c083dc9f01f32a04.js" async=""></script><title>Datex FDE Agent Console</title><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-background text-foreground h-screen overflow-hidden flex flex-col"><div hidden=""><!--$--><!--/$--></div><script>((a,b,c,d,e,f,g,h)=>{let i=document.documentElement,j=["light","dark"];function k(b){var c;(Array.isArray(a)?a:[a]).forEach(a=>{let c="class"===a,d=c&&f?e.map(a=>f[a]||a):e;c?(i.classList.remove(...d),i.classList.add(f&&f[b]?f[b]:b)):i.setAttribute(a,b)}),c=b,h&&j.includes(c)&&(i.style.colorScheme=c)}if(d)k(d);else try{let a=localStorage.getItem(b)||c,d=g&&"system"===a?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":a;k(d)}catch(a){}})("class","theme","dark",null,["light","dark"],null,true,true)</script><div>No report open</div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-2b297ada5306c17f.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[3479,[\"909\",\"static/chunks/909-c88abba3cf0caec3.js\",\"697\",\"static/chunks/697-0e000ab410d9f470.js\",\"177\",\"static/chunks/app/layout-cec86f90e385371d.js\"],\"ThemeProvider\"]\n3:I[2308,[\"909\",\"static/chunks/909-c88abba3cf0caec3.js\",\"697\",\"static/chunks/697-0e000ab410d9f470.js\",\"177\",\"static/chunks/app/layout-cec86f90e385371d.js\"],\"default\"]\n4:I[9766,[],\"\"]\n5:I[8924,[],\"\"]\n6:I[1959,[],\"ClientPageRoot\"]\n7:I[6743,[\"903\",\"static/chunks/0b24cca5-c1e1c8810348f107.js\",\"507\",\"static/chunks/8b8f67fc-6295949a4b5485a4.js\",\"538\",\"static/chunks/538-b06224e65f71c9a1.js\",\"672\",\"static/chunks/app/design/capture/page-c083dc9f01f32a04.js\"],\"default\"]\na:I[4431,[],\"OutletBoundary\"]\nc:I[5278,[],\"AsyncMetadataOutlet\"]\ne:I[4431,[],\"ViewportBoundary\"]\n10:I[4431,[],\"MetadataBoundary\"]\n11:\"$Sreact.suspense\"\n13:I[7150,[],\"\"]\n:HL[\"/_next/static/css/360c657de5e04df8.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"Xsbcf46McNo4ycd40X4z0\",\"p\":\"\",\"c\":[\"\",\"design\",\"capture\",\"\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"design\",{\"children\":[\"capture\",{\"children\":[\"__PAGE__\",{}]}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/360c657de5e04df8.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"className\":\"bg-background text-foreground h-screen overflow-hidden flex flex-col\",\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"children\":[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]}]}]]}],{\"children\":[\"design\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"capture\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L6\",null,{\"Component\":\"$7\",\"searchParams\":{},\"params\":{},\"promises\":[\"$@8\",\"$@9\"]}],null,[\"$\",\"$La\",null,{\"children\":[\"$Lb\",[\"$\",\"$Lc\",null,{\"promise\":\"$@d\"}]]}]]}],{},null,false]},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$Le\",null,{\"children\":\"$Lf\"}],null],[\"$\",\"$L10\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$11\",null,{\"fallback\":null,\"children\":\"$L12\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$13\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"8:{}\n9:\"$0:f:0:1:2:children:2:children:2:children:1:props:children:0:props:params\"\n"])</script><script>self.__next_f.push([1,"f:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\nb:null\n"])</script><script>self.__next_f.push([1,"d:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Datex FDE Agent Console\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"12:\"$d:metadata\"\n"])</script></body></html>
@@ -12,7 +12,7 @@ e:I[4431,[],"ViewportBoundary"]
12
12
  11:"$Sreact.suspense"
13
13
  13:I[7150,[],""]
14
14
  :HL["/_next/static/css/360c657de5e04df8.css","style"]
15
- 0:{"P":null,"b":"5ccHgxTeTrw5DjrFowRBg","p":"","c":["","design","capture",""],"i":false,"f":[[["",{"children":["design",{"children":["capture",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/360c657de5e04df8.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"bg-background text-foreground h-screen overflow-hidden flex flex-col","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]]}],{"children":["design",["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["capture",["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L6",null,{"Component":"$7","searchParams":{},"params":{},"promises":["$@8","$@9"]}],null,["$","$La",null,{"children":["$Lb",["$","$Lc",null,{"promise":"$@d"}]]}]]}],{},null,false]},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$Le",null,{"children":"$Lf"}],null],["$","$L10",null,{"children":["$","div",null,{"hidden":true,"children":["$","$11",null,{"fallback":null,"children":"$L12"}]}]}]]}],false]],"m":"$undefined","G":["$13",[]],"s":false,"S":true}
15
+ 0:{"P":null,"b":"Xsbcf46McNo4ycd40X4z0","p":"","c":["","design","capture",""],"i":false,"f":[[["",{"children":["design",{"children":["capture",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/360c657de5e04df8.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"bg-background text-foreground h-screen overflow-hidden flex flex-col","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]]}],{"children":["design",["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["capture",["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L6",null,{"Component":"$7","searchParams":{},"params":{},"promises":["$@8","$@9"]}],null,["$","$La",null,{"children":["$Lb",["$","$Lc",null,{"promise":"$@d"}]]}]]}],{},null,false]},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$Le",null,{"children":"$Lf"}],null],["$","$L10",null,{"children":["$","div",null,{"hidden":true,"children":["$","$11",null,{"fallback":null,"children":"$L12"}]}]}]]}],false]],"m":"$undefined","G":["$13",[]],"s":false,"S":true}
16
16
  8:{}
17
17
  9:"$0:f:0:1:2:children:2:children:2:children:1:props:children:0:props:params"
18
18
  f:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]