Every built-in extension should use this shape:
vyasa/extensions_builtin/<extension_id>/
__init__.py
extension.py
config.py
render.py
routes.py
store.py
views.py
static/
<extension_id>.css
<extension_id>.js
tests.md
Not every file is required. Empty responsibilities should be absent.
__init__.py exports only EXTENSION.
extension.py owns the VyasaExtension subclass and metadata.
render.py owns markdown renderers.
routes.py owns HTTP handlers.
store.py owns durable state for that extension only.
views.py owns extension-owned FastHTML view fragments.
static/ owns browser behavior and CSS for that extension.