framework-m-studio 0.2.2__tar.gz → 0.3.0__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 (113) hide show
  1. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/.gitignore +15 -0
  2. framework_m_studio-0.3.0/CHANGELOG.md +63 -0
  3. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/PKG-INFO +7 -2
  4. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/README.md +3 -0
  5. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/pyproject.toml +33 -4
  6. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/src/framework_m_studio/__init__.py +6 -1
  7. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/src/framework_m_studio/app.py +56 -11
  8. framework_m_studio-0.3.0/src/framework_m_studio/checklist_parser.py +421 -0
  9. framework_m_studio-0.3.0/src/framework_m_studio/cli/__init__.py +752 -0
  10. framework_m_studio-0.3.0/src/framework_m_studio/cli/build.py +421 -0
  11. framework_m_studio-0.3.0/src/framework_m_studio/cli/dev.py +214 -0
  12. framework_m_studio-0.3.0/src/framework_m_studio/cli/new.py +754 -0
  13. framework_m_studio-0.3.0/src/framework_m_studio/cli/quality.py +157 -0
  14. framework_m_studio-0.3.0/src/framework_m_studio/cli/studio.py +159 -0
  15. framework_m_studio-0.3.0/src/framework_m_studio/cli/utility.py +50 -0
  16. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/src/framework_m_studio/codegen/generator.py +6 -2
  17. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/src/framework_m_studio/codegen/parser.py +101 -4
  18. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/src/framework_m_studio/codegen/templates/doctype.py.jinja2 +19 -10
  19. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/src/framework_m_studio/codegen/test_generator.py +6 -2
  20. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/src/framework_m_studio/discovery.py +15 -5
  21. framework_m_studio-0.3.0/src/framework_m_studio/docs_generator.py +614 -0
  22. framework_m_studio-0.3.0/src/framework_m_studio/protocol_scanner.py +435 -0
  23. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/src/framework_m_studio/routes.py +39 -11
  24. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/components/CodePreview.tsx +36 -8
  25. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/components/FieldEditor.tsx +53 -1
  26. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/pages/doctypes/edit.tsx +111 -70
  27. framework_m_studio-0.3.0/tests/test_api_routes.py +209 -0
  28. framework_m_studio-0.3.0/tests/test_build.py +362 -0
  29. framework_m_studio-0.3.0/tests/test_build_extended.py +591 -0
  30. framework_m_studio-0.3.0/tests/test_dev.py +403 -0
  31. framework_m_studio-0.3.0/tests/test_discovery.py +416 -0
  32. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/tests/test_docs_generator.py +180 -0
  33. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/tests/test_generator.py +77 -11
  34. framework_m_studio-0.3.0/tests/test_new_cli.py +608 -0
  35. framework_m_studio-0.3.0/tests/test_parser.py +420 -0
  36. framework_m_studio-0.3.0/tests/test_protocol_scanner.py +184 -0
  37. framework_m_studio-0.3.0/tests/test_quality_cli.py +412 -0
  38. framework_m_studio-0.3.0/tests/test_studio.py +262 -0
  39. framework_m_studio-0.3.0/tests/test_utility_cli.py +71 -0
  40. framework_m_studio-0.2.2/CHANGELOG.md +0 -28
  41. framework_m_studio-0.2.2/src/framework_m_studio/cli.py +0 -247
  42. framework_m_studio-0.2.2/src/framework_m_studio/docs_generator.py +0 -318
  43. framework_m_studio-0.2.2/studio_ui/public/favicon.ico +0 -0
  44. framework_m_studio-0.2.2/tests/test_api_routes.py +0 -53
  45. framework_m_studio-0.2.2/tests/test_discovery.py +0 -212
  46. framework_m_studio-0.2.2/tests/test_parser.py +0 -203
  47. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/docs/api/index.md +0 -0
  48. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/docs/user-guide.md +0 -0
  49. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/src/framework_m_studio/codegen/__init__.py +0 -0
  50. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/src/framework_m_studio/codegen/templates/test_doctype.py.jinja2 +0 -0
  51. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/src/framework_m_studio/codegen/transformer.py +0 -0
  52. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/src/framework_m_studio/git/__init__.py +0 -0
  53. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/src/framework_m_studio/git/adapter.py +0 -0
  54. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/src/framework_m_studio/git/github_provider.py +0 -0
  55. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/src/framework_m_studio/git/protocol.py +0 -0
  56. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/src/framework_m_studio/py.typed +0 -0
  57. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/src/framework_m_studio/sdk_generator.py +0 -0
  58. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/src/framework_m_studio/workspace.py +0 -0
  59. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/.gitignore +0 -0
  60. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/.npmrc +0 -0
  61. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/Dockerfile +0 -0
  62. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/README.MD +0 -0
  63. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/eslint.config.js +0 -0
  64. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/index.html +0 -0
  65. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/package.json +0 -0
  66. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/pnpm-lock.yaml +0 -0
  67. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/App.css +0 -0
  68. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/App.test.tsx +0 -0
  69. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/App.tsx +0 -0
  70. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/components/AutoForm.tsx +0 -0
  71. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/components/AutoTable.tsx +0 -0
  72. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/components/ControllerEditor.tsx +0 -0
  73. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/components/ERDView.tsx +0 -0
  74. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/components/LayoutDesigner.tsx +0 -0
  75. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/components/ModuleExplorer.tsx +0 -0
  76. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/components/NestedEditorDrawer.tsx +0 -0
  77. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/components/SandboxPreview.tsx +0 -0
  78. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/components/TableFieldEditor.tsx +0 -0
  79. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/components/breadcrumb/index.tsx +0 -0
  80. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/components/fields/DefaultFieldComponents.tsx +0 -0
  81. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/components/fields/index.ts +0 -0
  82. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/components/fields/resolveFieldComponent.ts +0 -0
  83. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/components/layout/index.tsx +0 -0
  84. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/components/menu/index.tsx +0 -0
  85. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/index.css +0 -0
  86. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/index.tsx +0 -0
  87. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/pages/doctypes/index.ts +0 -0
  88. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/pages/doctypes/list.tsx +0 -0
  89. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/pages/index.ts +0 -0
  90. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/providers/ThemeContext.ts +0 -0
  91. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/providers/constants.ts +0 -0
  92. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/providers/data.ts +0 -0
  93. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/providers/theme.tsx +0 -0
  94. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/providers/useTheme.ts +0 -0
  95. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/registry/defaultComponents.ts +0 -0
  96. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/registry/fieldComponents.ts +0 -0
  97. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/registry/index.ts +0 -0
  98. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/setupTests.ts +0 -0
  99. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/utils/mockDataGenerator.ts +0 -0
  100. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/vite-env.d.ts +0 -0
  101. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/tsconfig.json +0 -0
  102. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/tsconfig.node.json +0 -0
  103. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/vite.config.ts +0 -0
  104. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/vitest.config.ts +0 -0
  105. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/tests/__init__.py +0 -0
  106. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/tests/conftest.py +0 -0
  107. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/tests/test_cli.py +0 -0
  108. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/tests/test_git_adapter.py +0 -0
  109. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/tests/test_git_protocol.py +0 -0
  110. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/tests/test_github_provider.py +0 -0
  111. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/tests/test_sdk_generator.py +0 -0
  112. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/tests/test_transformer.py +0 -0
  113. {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/tests/test_workspace.py +0 -0
@@ -77,6 +77,9 @@ docker-compose.override.yml
77
77
  # Studio UI built assets
78
78
  apps/studio/src/framework_m_studio/static/
79
79
 
80
+ # Desk UI built assets (bundled with framework-m package)
81
+ libs/framework-m/src/framework_m/static/assets/
82
+
80
83
  #doctypes
81
84
  doctypes/*.py
82
85
  apps/studio/src/doctypes/*.py
@@ -105,3 +108,15 @@ yarn-error.log*
105
108
  .idea/
106
109
  *.sublime-project
107
110
  *.sublime-workspace
111
+
112
+ # Generated Documentation
113
+ docs/developer/generated/
114
+ docs/machine/
115
+
116
+ # Website
117
+ website/.docusaurus/
118
+ website/build/
119
+ website/node_modules/
120
+
121
+ # GitLab Pages
122
+ public/
@@ -0,0 +1,63 @@
1
+ # Changelog
2
+
3
+ ## framework-m-studio v0.3.0
4
+
5
+ ### Features
6
+
7
+ - support namespaced app, test directory and dev.py moved to studio (37beae6)
8
+
9
+
10
+ ## framework-m-studio v0.2.8
11
+
12
+ ### Bug Fixes
13
+
14
+ - add ruff code style badge to README (c2482ea)
15
+
16
+
17
+ ## framework-m-studio v0.2.7
18
+
19
+ ### Bug Fixes
20
+
21
+ - add Python version and license badges to README (90d1adf)
22
+
23
+
24
+ ## framework-m-studio v0.2.6
25
+
26
+ ### Bug Fixes
27
+
28
+ - format and lint (090018f)
29
+
30
+
31
+ ## framework-m-studio v0.2.3
32
+
33
+ ### Bug Fixes
34
+
35
+ - ensure static assets are bundled in the wheel (ce0a0e1)
36
+
37
+
38
+ ## framework-m-studio v0.2.2
39
+
40
+ ### Bug Fixes
41
+
42
+ - add badges to readme (012333b)
43
+
44
+
45
+ ## framework-m-studio v0.2.1
46
+
47
+ ### Bug Fixes
48
+
49
+ - modernize aesthetics (300cdda)
50
+
51
+
52
+ ## framework-m-studio 0.2.0
53
+
54
+ ### Features
55
+
56
+ - implement path prefix architecture for UI/API separation (7a8d2d2)
57
+ - add cloud workspace & git adapter, controller scaffolding and sandbox (a7a4a3e)
58
+ - implement Studio backend and frontend (abf5d03)
59
+
60
+ ### Bug Fixes
61
+
62
+ - include static files in package for PyPI publishing (565bcb8)
63
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: framework-m-studio
3
- Version: 0.2.2
3
+ Version: 0.3.0
4
4
  Summary: Framework M Studio - Visual DocType Builder & Developer Tools
5
5
  Project-URL: Homepage, https://gitlab.com/castlecraft/framework-m
6
6
  Project-URL: Documentation, https://gitlab.com/castlecraft/framework-m#readme
@@ -17,7 +17,9 @@ Classifier: Programming Language :: Python :: 3.12
17
17
  Classifier: Programming Language :: Python :: 3.13
18
18
  Classifier: Typing :: Typed
19
19
  Requires-Python: >=3.12
20
- Requires-Dist: framework-m
20
+ Requires-Dist: framework-m-core>=0.5.0
21
+ Requires-Dist: framework-m>=0.4.2
22
+ Requires-Dist: honcho>=1.1.0
21
23
  Requires-Dist: jinja2>=3.1.0
22
24
  Requires-Dist: libcst>=1.0.0
23
25
  Description-Content-Type: text/markdown
@@ -27,7 +29,10 @@ Description-Content-Type: text/markdown
27
29
  Visual DocType builder and developer tools for Framework M.
28
30
 
29
31
  [![PyPI version](https://badge.fury.io/py/framework-m-studio.svg)](https://badge.fury.io/py/framework-m-studio)
32
+ [![Python 3.12+](https://img.shields.io/badge/python-3.12+-blue.svg)](https://www.python.org/downloads/)
33
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
30
34
  [![GitLab Pipeline Status](https://gitlab.com/castlecraft/framework-m/badges/main/pipeline.svg)](https://gitlab.com/castlecraft/framework-m/-/pipelines)
35
+ [![Code style: ruff](https://img.shields.io/badge/code%20style-ruff-000000.svg)](https://github.com/astral-sh/ruff)
31
36
 
32
37
  ## Overview
33
38
 
@@ -3,7 +3,10 @@
3
3
  Visual DocType builder and developer tools for Framework M.
4
4
 
5
5
  [![PyPI version](https://badge.fury.io/py/framework-m-studio.svg)](https://badge.fury.io/py/framework-m-studio)
6
+ [![Python 3.12+](https://img.shields.io/badge/python-3.12+-blue.svg)](https://www.python.org/downloads/)
7
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
6
8
  [![GitLab Pipeline Status](https://gitlab.com/castlecraft/framework-m/badges/main/pipeline.svg)](https://gitlab.com/castlecraft/framework-m/-/pipelines)
9
+ [![Code style: ruff](https://img.shields.io/badge/code%20style-ruff-000000.svg)](https://github.com/astral-sh/ruff)
7
10
 
8
11
  ## Overview
9
12
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "framework-m-studio"
3
- version = "0.2.2"
3
+ version = "0.3.0"
4
4
  description = "Framework M Studio - Visual DocType Builder & Developer Tools"
5
5
  readme = "README.md"
6
6
  license = { text = "MIT" }
@@ -21,12 +21,19 @@ classifiers = [
21
21
  ]
22
22
 
23
23
  dependencies = [
24
- "framework-m",
24
+ "framework-m-core>=0.5.0",
25
+ "framework-m>=0.4.2",
25
26
  # Code generation
26
27
  "libcst>=1.0.0",
27
28
  "jinja2>=3.1.0",
29
+ # Process management for dev command
30
+ "honcho>=1.1.0",
28
31
  ]
29
32
 
33
+ [tool.uv.sources]
34
+ framework-m-core = { workspace = true }
35
+ framework-m = { workspace = true }
36
+
30
37
  [dependency-groups]
31
38
  dev = [
32
39
  "pytest>=8.0.0",
@@ -41,11 +48,26 @@ dev = [
41
48
  "twine>=5.0.0",
42
49
  ]
43
50
 
44
- [project.entry-points."framework_m.cli_commands"]
51
+ [project.entry-points."framework_m_core.cli_commands"]
45
52
  # These commands override/extend base CLI when framework-m-studio is installed
46
53
  codegen = "framework_m_studio.cli:codegen_app"
47
54
  studio = "framework_m_studio.cli:studio_app"
48
55
  docs = "framework_m_studio.cli:docs_app"
56
+ "docs:generate" = "framework_m_studio.cli:docs_generate"
57
+ "docs:export" = "framework_m_studio.cli:docs_export"
58
+ "docs:adr" = "framework_m_studio.cli:docs_adr"
59
+ "docs:rfc" = "framework_m_studio.cli:docs_rfc"
60
+ new = "framework_m_studio.cli.new:new_app_command"
61
+ "new:doctype" = "framework_m_studio.cli.new:new_doctype_command"
62
+ "new:app" = "framework_m_studio.cli.new:new_app_command"
63
+ test = "framework_m_studio.cli.quality:test_command"
64
+ lint = "framework_m_studio.cli.quality:lint_command"
65
+ format = "framework_m_studio.cli.quality:format_command"
66
+ typecheck = "framework_m_studio.cli.quality:typecheck_command"
67
+ console = "framework_m_studio.cli.utility:console_command"
68
+ routes = "framework_m_studio.cli.utility:routes_command"
69
+ dev = "framework_m_studio.cli.dev:dev_command"
70
+
49
71
 
50
72
  [project.urls]
51
73
  Homepage = "https://gitlab.com/castlecraft/framework-m"
@@ -68,7 +90,9 @@ exclude = [
68
90
 
69
91
  [tool.hatch.build.targets.wheel]
70
92
  packages = ["src/framework_m_studio"]
71
- # static/ is included automatically since it's under src/framework_m_studio/
93
+ include = [
94
+ "src/framework_m_studio/static/**/*",
95
+ ]
72
96
 
73
97
  [tool.pytest.ini_options]
74
98
  asyncio_mode = "auto"
@@ -90,12 +114,17 @@ explicit_package_bases = true
90
114
  exclude = [
91
115
  "tests/",
92
116
  ".venv/",
117
+ "src/doctypes/",
93
118
  ]
94
119
 
95
120
  [[tool.mypy.overrides]]
96
121
  module = "framework_m.core.fields.registry"
97
122
  ignore_missing_imports = true
98
123
 
124
+ [[tool.mypy.overrides]]
125
+ module = "honcho.*"
126
+ ignore_missing_imports = true
127
+
99
128
  [tool.ruff]
100
129
  line-length = 88
101
130
  target-version = "py312"
@@ -11,6 +11,11 @@ runtime lightweight. Install as a dev dependency.
11
11
 
12
12
  from __future__ import annotations
13
13
 
14
- __version__ = "0.1.0"
14
+ import importlib.metadata
15
+
16
+ try:
17
+ __version__ = importlib.metadata.version("framework-m-studio")
18
+ except importlib.metadata.PackageNotFoundError:
19
+ __version__ = "0.0.0"
15
20
 
16
21
  __all__ = ["__version__"]
@@ -43,19 +43,64 @@ async def api_root() -> dict[str, Any]:
43
43
  }
44
44
 
45
45
 
46
- def _get_spa_response(path: str) -> Response[Any]:
47
- """Helper to serve SPA files."""
46
+ def _get_spa_response(path: str) -> Response[bytes | dict[str, str]]:
47
+ """Helper to serve SPA files.
48
+
49
+ Returns HTML content for missing builds, or serves actual static files
50
+ when the SPA is built. This is the standard approach for SPAs - serving
51
+ HTML directly without requiring a template engine configuration.
52
+ """
48
53
  if not STATIC_DIR.exists():
49
54
  # Development mode: no built assets yet
55
+ # Return HTML placeholder directly (no template engine needed)
56
+ html_content = """<!DOCTYPE html>
57
+ <html lang="en">
58
+ <head>
59
+ <meta charset="UTF-8">
60
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
61
+ <title>Framework M Studio - Build Required</title>
62
+ <style>
63
+ body {
64
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
65
+ max-width: 600px;
66
+ margin: 100px auto;
67
+ padding: 20px;
68
+ line-height: 1.6;
69
+ }
70
+ h1 { color: #333; }
71
+ code {
72
+ background: #f4f4f4;
73
+ padding: 2px 6px;
74
+ border-radius: 3px;
75
+ font-family: monospace;
76
+ }
77
+ .api-links { margin-top: 30px; }
78
+ .api-links a {
79
+ display: block;
80
+ margin: 10px 0;
81
+ color: #0066cc;
82
+ text-decoration: none;
83
+ }
84
+ .api-links a:hover { text-decoration: underline; }
85
+ </style>
86
+ </head>
87
+ <body>
88
+ <h1>Studio UI Not Built</h1>
89
+ <p>The Studio UI assets have not been built yet.</p>
90
+ <p>To build the UI, run:</p>
91
+ <pre><code>cd apps/studio/studio_ui && pnpm install && pnpm build</code></pre>
92
+
93
+ <div class="api-links">
94
+ <h3>Available API Endpoints:</h3>
95
+ <a href="/studio/api/health">Health Check</a>
96
+ <a href="/studio/api/doctypes">DocTypes API</a>
97
+ <a href="/studio/api/field-types">Field Types API</a>
98
+ </div>
99
+ </body>
100
+ </html>"""
50
101
  return Response(
51
- content={
52
- "message": "Studio UI not built yet",
53
- "hint": "Run: cd apps/studio/studio_ui && pnpm build",
54
- "api_health": "/studio/api/health",
55
- "api_doctypes": "/studio/api/doctypes",
56
- "api_field_types": "/studio/api/field-types",
57
- },
58
- media_type="application/json",
102
+ content=html_content.encode("utf-8"),
103
+ media_type="text/html; charset=utf-8",
59
104
  )
60
105
 
61
106
  # Check for actual file
@@ -125,7 +170,7 @@ async def list_field_types() -> dict[str, Any]:
125
170
  Uses FieldRegistry for dynamic discovery.
126
171
  """
127
172
  try:
128
- from framework_m.adapters.db.field_registry import FieldRegistry
173
+ from framework_m_standard.adapters.db.field_registry import FieldRegistry
129
174
 
130
175
  types_list = []
131
176
  for type_info in FieldRegistry.get_instance().get_all_types():