vibetuner 2.14.1__py3-none-any.whl → 2.18.1__py3-none-any.whl

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.

Potentially problematic release.


This version of vibetuner might be problematic. Click here for more details.

Files changed (41) hide show
  1. vibetuner/config.py +20 -9
  2. vibetuner/context.py +3 -0
  3. vibetuner/frontend/lifespan.py +12 -7
  4. vibetuner/frontend/middleware.py +2 -2
  5. vibetuner/frontend/routes/debug.py +1 -1
  6. vibetuner/frontend/routes/user.py +1 -1
  7. vibetuner/mongo.py +3 -3
  8. vibetuner/tasks/worker.py +1 -1
  9. vibetuner/templates/email/{default/magic_link.html.jinja → magic_link.html.jinja} +2 -1
  10. vibetuner/templates/frontend/base/favicons.html.jinja +1 -1
  11. vibetuner/templates/frontend/base/skeleton.html.jinja +5 -2
  12. vibetuner/templates/frontend/debug/collections.html.jinja +2 -0
  13. vibetuner/templates/frontend/debug/components/debug_nav.html.jinja +6 -6
  14. vibetuner/templates/frontend/debug/index.html.jinja +6 -4
  15. vibetuner/templates/frontend/debug/info.html.jinja +2 -0
  16. vibetuner/templates/frontend/debug/users.html.jinja +4 -2
  17. vibetuner/templates/frontend/debug/version.html.jinja +2 -0
  18. vibetuner/templates/frontend/email_sent.html.jinja +2 -1
  19. vibetuner/templates/frontend/index.html.jinja +1 -0
  20. vibetuner/templates/frontend/login.html.jinja +8 -3
  21. vibetuner/templates/frontend/user/edit.html.jinja +3 -2
  22. vibetuner/templates/frontend/user/profile.html.jinja +2 -1
  23. {vibetuner-2.14.1.dist-info → vibetuner-2.18.1.dist-info}/METADATA +20 -17
  24. {vibetuner-2.14.1.dist-info → vibetuner-2.18.1.dist-info}/RECORD +27 -41
  25. {vibetuner-2.14.1.dist-info → vibetuner-2.18.1.dist-info}/WHEEL +1 -1
  26. vibetuner/frontend/AGENTS.md +0 -113
  27. vibetuner/frontend/CLAUDE.md +0 -113
  28. vibetuner/models/AGENTS.md +0 -165
  29. vibetuner/models/CLAUDE.md +0 -165
  30. vibetuner/services/AGENTS.md +0 -104
  31. vibetuner/services/CLAUDE.md +0 -104
  32. vibetuner/tasks/AGENTS.md +0 -98
  33. vibetuner/tasks/CLAUDE.md +0 -98
  34. vibetuner/templates/email/AGENTS.md +0 -48
  35. vibetuner/templates/email/CLAUDE.md +0 -48
  36. vibetuner/templates/frontend/AGENTS.md +0 -74
  37. vibetuner/templates/frontend/CLAUDE.md +0 -74
  38. vibetuner/templates/markdown/AGENTS.md +0 -29
  39. vibetuner/templates/markdown/CLAUDE.md +0 -29
  40. /vibetuner/templates/email/{default/magic_link.txt.jinja → magic_link.txt.jinja} +0 -0
  41. {vibetuner-2.14.1.dist-info → vibetuner-2.18.1.dist-info}/entry_points.txt +0 -0
@@ -1,104 +0,0 @@
1
- # Core Services Module
2
-
3
- **IMMUTABLE SCAFFOLDING CODE** - These are the framework's core services that provide essential functionality.
4
-
5
- ## What's Here
6
-
7
- This module contains the scaffolding's core services:
8
-
9
- - **email.py** - Email sending via AWS SES
10
- - **blob.py** - File storage and blob management
11
-
12
- ## Important Rules
13
-
14
- ⚠️ **DO NOT MODIFY** these core services directly.
15
-
16
- **For changes to core services:**
17
-
18
- - File an issue at `https://github.com/alltuner/scaffolding`
19
- - Core changes benefit all projects using the scaffolding
20
-
21
- **For your application services:**
22
-
23
- - Create them in `src/app/services/` instead
24
- - Import core services when needed: `from vibetuner.services.email import send_email`
25
-
26
- ## User Service Pattern (for reference)
27
-
28
- Your application services in `src/app/services/` should follow this pattern:
29
-
30
- ```python
31
- from vibetuner.models import UserModel
32
-
33
- class NotificationService:
34
- async def send_notification(
35
- self,
36
- user: UserModel,
37
- message: str,
38
- priority: str = "normal"
39
- ) -> bool:
40
- # Implementation
41
- return True
42
-
43
- # Singleton
44
- notification_service = NotificationService()
45
- ```
46
-
47
- ## Using Core Services
48
-
49
- ### Email Service
50
-
51
- ```python
52
- from vibetuner.services.email import send_email
53
-
54
- await send_email(
55
- to_email="user@example.com",
56
- subject="Welcome",
57
- html_content="<h1>Welcome!</h1>",
58
- text_content="Welcome!"
59
- )
60
- ```
61
-
62
- ### Blob Service
63
-
64
- ```python
65
- from vibetuner.services.blob import blob_service
66
-
67
- # Upload file
68
- blob = await blob_service.upload(file_data, "image.png")
69
-
70
- # Get file URL
71
- url = await blob_service.get_url(blob.id)
72
- ```
73
-
74
- ## Creating Your Own Services
75
-
76
- Place your application services in `src/app/services/`:
77
-
78
- ```python
79
- # src/app/services/external_api.py
80
- import httpx
81
-
82
- async def call_api(api_url: str, api_key: str, data: dict) -> dict:
83
- async with httpx.AsyncClient() as client:
84
- response = await client.post(
85
- api_url,
86
- json=data,
87
- headers={"Authorization": f"Bearer {api_key}"}
88
- )
89
- response.raise_for_status()
90
- return response.json()
91
- ```
92
-
93
- ## Dependency Injection
94
-
95
- ```python
96
- from fastapi import Depends
97
-
98
- @router.post("/notify")
99
- async def notify(
100
- message: str,
101
- service=Depends(lambda: notification_service)
102
- ):
103
- await service.send_notification(user, message)
104
- ```
@@ -1,104 +0,0 @@
1
- # Core Services Module
2
-
3
- **IMMUTABLE SCAFFOLDING CODE** - These are the framework's core services that provide essential functionality.
4
-
5
- ## What's Here
6
-
7
- This module contains the scaffolding's core services:
8
-
9
- - **email.py** - Email sending via AWS SES
10
- - **blob.py** - File storage and blob management
11
-
12
- ## Important Rules
13
-
14
- ⚠️ **DO NOT MODIFY** these core services directly.
15
-
16
- **For changes to core services:**
17
-
18
- - File an issue at `https://github.com/alltuner/scaffolding`
19
- - Core changes benefit all projects using the scaffolding
20
-
21
- **For your application services:**
22
-
23
- - Create them in `src/app/services/` instead
24
- - Import core services when needed: `from vibetuner.services.email import send_email`
25
-
26
- ## User Service Pattern (for reference)
27
-
28
- Your application services in `src/app/services/` should follow this pattern:
29
-
30
- ```python
31
- from vibetuner.models import UserModel
32
-
33
- class NotificationService:
34
- async def send_notification(
35
- self,
36
- user: UserModel,
37
- message: str,
38
- priority: str = "normal"
39
- ) -> bool:
40
- # Implementation
41
- return True
42
-
43
- # Singleton
44
- notification_service = NotificationService()
45
- ```
46
-
47
- ## Using Core Services
48
-
49
- ### Email Service
50
-
51
- ```python
52
- from vibetuner.services.email import send_email
53
-
54
- await send_email(
55
- to_email="user@example.com",
56
- subject="Welcome",
57
- html_content="<h1>Welcome!</h1>",
58
- text_content="Welcome!"
59
- )
60
- ```
61
-
62
- ### Blob Service
63
-
64
- ```python
65
- from vibetuner.services.blob import blob_service
66
-
67
- # Upload file
68
- blob = await blob_service.upload(file_data, "image.png")
69
-
70
- # Get file URL
71
- url = await blob_service.get_url(blob.id)
72
- ```
73
-
74
- ## Creating Your Own Services
75
-
76
- Place your application services in `src/app/services/`:
77
-
78
- ```python
79
- # src/app/services/external_api.py
80
- import httpx
81
-
82
- async def call_api(api_url: str, api_key: str, data: dict) -> dict:
83
- async with httpx.AsyncClient() as client:
84
- response = await client.post(
85
- api_url,
86
- json=data,
87
- headers={"Authorization": f"Bearer {api_key}"}
88
- )
89
- response.raise_for_status()
90
- return response.json()
91
- ```
92
-
93
- ## Dependency Injection
94
-
95
- ```python
96
- from fastapi import Depends
97
-
98
- @router.post("/notify")
99
- async def notify(
100
- message: str,
101
- service=Depends(lambda: notification_service)
102
- ):
103
- await service.send_notification(user, message)
104
- ```
vibetuner/tasks/AGENTS.md DELETED
@@ -1,98 +0,0 @@
1
- # Core Tasks Module
2
-
3
- **IMMUTABLE SCAFFOLDING CODE** - This is the framework's core background task infrastructure.
4
-
5
- ## What's Here
6
-
7
- This module contains the scaffolding's core task components:
8
-
9
- - **worker.py** - Streaq worker setup and configuration
10
- - **context.py** - Task context management (DB, HTTP client, etc.)
11
- - ****init**.py** - Task infrastructure exports
12
-
13
- ## Important Rules
14
-
15
- ⚠️ **DO NOT MODIFY** these core task components directly.
16
-
17
- **For changes to core tasks:**
18
-
19
- - File an issue at `https://github.com/alltuner/scaffolding`
20
- - Core changes benefit all projects using the scaffolding
21
-
22
- **For your application tasks:**
23
-
24
- - Create them in `src/app/tasks/` instead
25
- - Import the worker from vibetuner: `from vibetuner.tasks.worker import worker`
26
-
27
- ## Quick Reference
28
-
29
- Tasks are only available if job queue was enabled during scaffolding.
30
-
31
- The worker is defined in `vibetuner.tasks.worker` and should be imported from there in your app tasks.
32
-
33
- ## User Task Pattern (for reference)
34
-
35
- Your application tasks in `src/app/tasks/` should follow this pattern:
36
-
37
- ```python
38
- # src/app/tasks/emails.py
39
- from vibetuner.models import UserModel
40
- from vibetuner.tasks.worker import worker
41
-
42
- @worker.task()
43
- async def send_welcome_email(user_id: str) -> dict[str, str]:
44
- """Example background job."""
45
-
46
- # Access context
47
- res = await worker.context.http_client.get(url)
48
-
49
- if user := await UserModel.get(user_id):
50
- # Perform side effects
51
- return {"status": "sent", "user": user.email}
52
- return {"status": "skipped"}
53
- ```
54
-
55
- ## Queueing Tasks
56
-
57
- ```python
58
- # In your routes: src/app/frontend/routes/auth.py
59
- from app.tasks.emails import send_welcome_email
60
-
61
- @router.post("/signup")
62
- async def signup(email: str):
63
- user = await create_user(email)
64
-
65
- task = await send_welcome_email.enqueue(user.id)
66
- # Optional: await task.result() or check task.id
67
-
68
- return {"status": "registered", "job_id": task.id}
69
- ```
70
-
71
- Note: Import your task functions from `src/app/tasks/` but the worker itself comes from `vibetuner.tasks.worker`.
72
-
73
- ## Worker Management
74
-
75
- ```bash
76
- just worker-dev # Run worker locally with auto-reload
77
- ```
78
-
79
- ## Task Registration
80
-
81
- Add new task modules at the end of `src/app/tasks/__init__.py`:
82
-
83
- ```python
84
- # src/app/tasks/__init__.py
85
- # Import your task modules so decorators register with worker
86
- from . import emails # noqa: F401
87
- from . import new_tasks # noqa: F401
88
- ```
89
-
90
- ## Monitoring
91
-
92
- ```python
93
- task = await send_digest_email.enqueue(account_id)
94
-
95
- status = await task.status()
96
- result = await task.result(timeout=30)
97
- await task.abort() # Cancel if needed
98
- ```
vibetuner/tasks/CLAUDE.md DELETED
@@ -1,98 +0,0 @@
1
- # Core Tasks Module
2
-
3
- **IMMUTABLE SCAFFOLDING CODE** - This is the framework's core background task infrastructure.
4
-
5
- ## What's Here
6
-
7
- This module contains the scaffolding's core task components:
8
-
9
- - **worker.py** - Streaq worker setup and configuration
10
- - **context.py** - Task context management (DB, HTTP client, etc.)
11
- - ****init**.py** - Task infrastructure exports
12
-
13
- ## Important Rules
14
-
15
- ⚠️ **DO NOT MODIFY** these core task components directly.
16
-
17
- **For changes to core tasks:**
18
-
19
- - File an issue at `https://github.com/alltuner/scaffolding`
20
- - Core changes benefit all projects using the scaffolding
21
-
22
- **For your application tasks:**
23
-
24
- - Create them in `src/app/tasks/` instead
25
- - Import the worker from vibetuner: `from vibetuner.tasks.worker import worker`
26
-
27
- ## Quick Reference
28
-
29
- Tasks are only available if job queue was enabled during scaffolding.
30
-
31
- The worker is defined in `vibetuner.tasks.worker` and should be imported from there in your app tasks.
32
-
33
- ## User Task Pattern (for reference)
34
-
35
- Your application tasks in `src/app/tasks/` should follow this pattern:
36
-
37
- ```python
38
- # src/app/tasks/emails.py
39
- from vibetuner.models import UserModel
40
- from vibetuner.tasks.worker import worker
41
-
42
- @worker.task()
43
- async def send_welcome_email(user_id: str) -> dict[str, str]:
44
- """Example background job."""
45
-
46
- # Access context
47
- res = await worker.context.http_client.get(url)
48
-
49
- if user := await UserModel.get(user_id):
50
- # Perform side effects
51
- return {"status": "sent", "user": user.email}
52
- return {"status": "skipped"}
53
- ```
54
-
55
- ## Queueing Tasks
56
-
57
- ```python
58
- # In your routes: src/app/frontend/routes/auth.py
59
- from app.tasks.emails import send_welcome_email
60
-
61
- @router.post("/signup")
62
- async def signup(email: str):
63
- user = await create_user(email)
64
-
65
- task = await send_welcome_email.enqueue(user.id)
66
- # Optional: await task.result() or check task.id
67
-
68
- return {"status": "registered", "job_id": task.id}
69
- ```
70
-
71
- Note: Import your task functions from `src/app/tasks/` but the worker itself comes from `vibetuner.tasks.worker`.
72
-
73
- ## Worker Management
74
-
75
- ```bash
76
- just worker-dev # Run worker locally with auto-reload
77
- ```
78
-
79
- ## Task Registration
80
-
81
- Add new task modules at the end of `src/app/tasks/__init__.py`:
82
-
83
- ```python
84
- # src/app/tasks/__init__.py
85
- # Import your task modules so decorators register with worker
86
- from . import emails # noqa: F401
87
- from . import new_tasks # noqa: F401
88
- ```
89
-
90
- ## Monitoring
91
-
92
- ```python
93
- task = await send_digest_email.enqueue(account_id)
94
-
95
- status = await task.status()
96
- result = await task.result(timeout=30)
97
- await task.abort() # Cancel if needed
98
- ```
@@ -1,48 +0,0 @@
1
- # Core Email Templates - DO NOT MODIFY
2
-
3
- **⚠️ IMPORTANT**: Package-managed files. Changes will be lost on package updates.
4
-
5
- ## How to Override
6
-
7
- **NEVER modify files in this directory!** Instead:
8
-
9
- 1. Copy template to your project's `templates/email/`
10
- 2. Maintain the same directory structure
11
- 3. Your version overrides automatically
12
-
13
- ### Example
14
-
15
- ```bash
16
- # Core template (DO NOT EDIT, bundled in vibetuner package):
17
- vibetuner/templates/email/default/magic_link.html.jinja
18
-
19
- # Your override (CREATE THIS in your project):
20
- templates/email/default/magic_link.html.jinja
21
- ```
22
-
23
- ## Template Structure
24
-
25
- ```text
26
- vibetuner/email/
27
- └── default/
28
- ├── magic_link.html.jinja # Passwordless login email (HTML)
29
- └── magic_link.txt.jinja # Passwordless login email (text)
30
- ```
31
-
32
- ## Magic Link Email
33
-
34
- The core provides magic link authentication emails used by the auth system.
35
-
36
- ### Variables Available
37
-
38
- - `login_url` - The magic link URL for authentication
39
- - `project_name` - Your project's display name
40
-
41
- Override these templates to customize branding, styling, and content.
42
-
43
- ## Best Practices
44
-
45
- 1. Always provide both HTML and text versions
46
- 2. Test overrides after scaffolding updates
47
- 3. Keep branding consistent across all emails
48
- 4. Use inline styles for HTML emails
@@ -1,48 +0,0 @@
1
- # Core Email Templates - DO NOT MODIFY
2
-
3
- **⚠️ IMPORTANT**: Package-managed files. Changes will be lost on package updates.
4
-
5
- ## How to Override
6
-
7
- **NEVER modify files in this directory!** Instead:
8
-
9
- 1. Copy template to your project's `templates/email/`
10
- 2. Maintain the same directory structure
11
- 3. Your version overrides automatically
12
-
13
- ### Example
14
-
15
- ```bash
16
- # Core template (DO NOT EDIT, bundled in vibetuner package):
17
- vibetuner/templates/email/default/magic_link.html.jinja
18
-
19
- # Your override (CREATE THIS in your project):
20
- templates/email/default/magic_link.html.jinja
21
- ```
22
-
23
- ## Template Structure
24
-
25
- ```text
26
- vibetuner/email/
27
- └── default/
28
- ├── magic_link.html.jinja # Passwordless login email (HTML)
29
- └── magic_link.txt.jinja # Passwordless login email (text)
30
- ```
31
-
32
- ## Magic Link Email
33
-
34
- The core provides magic link authentication emails used by the auth system.
35
-
36
- ### Variables Available
37
-
38
- - `login_url` - The magic link URL for authentication
39
- - `project_name` - Your project's display name
40
-
41
- Override these templates to customize branding, styling, and content.
42
-
43
- ## Best Practices
44
-
45
- 1. Always provide both HTML and text versions
46
- 2. Test overrides after scaffolding updates
47
- 3. Keep branding consistent across all emails
48
- 4. Use inline styles for HTML emails
@@ -1,74 +0,0 @@
1
- # Core Frontend Templates - DO NOT MODIFY
2
-
3
- **⚠️ IMPORTANT**: Package-managed files. Changes will be lost on package updates.
4
-
5
- ## How to Override
6
-
7
- **NEVER modify files in this directory!** Instead:
8
-
9
- 1. Copy template to your project's `templates/frontend/`
10
- 2. Maintain the same directory structure
11
- 3. Your version overrides automatically
12
-
13
- ### Example
14
-
15
- ```bash
16
- # Core template (DO NOT EDIT, bundled in vibetuner package):
17
- vibetuner/templates/frontend/base/footer.html.jinja
18
-
19
- # Your override (CREATE THIS in your project):
20
- templates/frontend/base/footer.html.jinja
21
- ```
22
-
23
- The template system searches in order:
24
-
25
- 1. `templates/frontend/` (your project overrides)
26
- 2. `vibetuner/templates/frontend/` (package defaults)
27
-
28
- ## Template Structure
29
-
30
- ```text
31
- vibetuner/frontend/
32
- ├── base/ # Core layout
33
- │ ├── skeleton.html.jinja
34
- │ ├── header.html.jinja
35
- │ ├── footer.html.jinja
36
- │ ├── opengraph.html.jinja
37
- │ └── favicons.html.jinja
38
- ├── debug/ # Dev tools (DEBUG mode only)
39
- │ ├── index.html.jinja
40
- │ ├── info.html.jinja
41
- │ ├── users.html.jinja
42
- │ ├── collections.html.jinja
43
- │ └── version.html.jinja
44
- ├── email/ # Email-related pages
45
- │ └── magic_link templates
46
- ├── lang/ # Language switcher
47
- │ └── select.html.jinja
48
- ├── meta/ # SEO and meta files
49
- │ ├── robots.txt.jinja
50
- │ ├── sitemap.xml.jinja
51
- │ ├── site.webmanifest.jinja
52
- │ └── browserconfig.xml.jinja
53
- ├── user/ # User account pages
54
- │ ├── profile.html.jinja
55
- │ └── edit.html.jinja
56
- ├── index.html.jinja # Default homepage
57
- ├── login.html.jinja # Login page
58
- └── email_sent.html.jinja # Magic link sent confirmation
59
- ```
60
-
61
- ## Common Overrides
62
-
63
- - `base/skeleton.html.jinja` - Add meta tags, global CSS/JS
64
- - `base/header.html.jinja` - Customize navigation
65
- - `base/footer.html.jinja` - Custom footer
66
- - `index.html.jinja` - Custom homepage
67
-
68
- ## Best Practices
69
-
70
- 1. Override only what you need
71
- 2. Document why each override exists
72
- 3. Test after `just update-scaffolding`
73
- 4. Use template inheritance and blocks
74
- 5. Keep overrides minimal to ease updates
@@ -1,74 +0,0 @@
1
- # Core Frontend Templates - DO NOT MODIFY
2
-
3
- **⚠️ IMPORTANT**: Package-managed files. Changes will be lost on package updates.
4
-
5
- ## How to Override
6
-
7
- **NEVER modify files in this directory!** Instead:
8
-
9
- 1. Copy template to your project's `templates/frontend/`
10
- 2. Maintain the same directory structure
11
- 3. Your version overrides automatically
12
-
13
- ### Example
14
-
15
- ```bash
16
- # Core template (DO NOT EDIT, bundled in vibetuner package):
17
- vibetuner/templates/frontend/base/footer.html.jinja
18
-
19
- # Your override (CREATE THIS in your project):
20
- templates/frontend/base/footer.html.jinja
21
- ```
22
-
23
- The template system searches in order:
24
-
25
- 1. `templates/frontend/` (your project overrides)
26
- 2. `vibetuner/templates/frontend/` (package defaults)
27
-
28
- ## Template Structure
29
-
30
- ```text
31
- vibetuner/frontend/
32
- ├── base/ # Core layout
33
- │ ├── skeleton.html.jinja
34
- │ ├── header.html.jinja
35
- │ ├── footer.html.jinja
36
- │ ├── opengraph.html.jinja
37
- │ └── favicons.html.jinja
38
- ├── debug/ # Dev tools (DEBUG mode only)
39
- │ ├── index.html.jinja
40
- │ ├── info.html.jinja
41
- │ ├── users.html.jinja
42
- │ ├── collections.html.jinja
43
- │ └── version.html.jinja
44
- ├── email/ # Email-related pages
45
- │ └── magic_link templates
46
- ├── lang/ # Language switcher
47
- │ └── select.html.jinja
48
- ├── meta/ # SEO and meta files
49
- │ ├── robots.txt.jinja
50
- │ ├── sitemap.xml.jinja
51
- │ ├── site.webmanifest.jinja
52
- │ └── browserconfig.xml.jinja
53
- ├── user/ # User account pages
54
- │ ├── profile.html.jinja
55
- │ └── edit.html.jinja
56
- ├── index.html.jinja # Default homepage
57
- ├── login.html.jinja # Login page
58
- └── email_sent.html.jinja # Magic link sent confirmation
59
- ```
60
-
61
- ## Common Overrides
62
-
63
- - `base/skeleton.html.jinja` - Add meta tags, global CSS/JS
64
- - `base/header.html.jinja` - Customize navigation
65
- - `base/footer.html.jinja` - Custom footer
66
- - `index.html.jinja` - Custom homepage
67
-
68
- ## Best Practices
69
-
70
- 1. Override only what you need
71
- 2. Document why each override exists
72
- 3. Test after `just update-scaffolding`
73
- 4. Use template inheritance and blocks
74
- 5. Keep overrides minimal to ease updates
@@ -1,29 +0,0 @@
1
- # Core Markdown Templates - DO NOT MODIFY
2
-
3
- **⚠️ IMPORTANT**: Package-managed files. Changes will be lost on package updates.
4
-
5
- ## How to Override
6
-
7
- **NEVER modify files in this directory!** Instead:
8
-
9
- 1. Copy template to your project's `templates/markdown/`
10
- 2. Maintain the same directory structure
11
- 3. Your version overrides automatically
12
-
13
- ### Example
14
-
15
- ```bash
16
- # Core template (if exists, bundled in vibetuner package):
17
- vibetuner/templates/markdown/default/template.md.jinja
18
-
19
- # Your override (CREATE THIS in your project):
20
- templates/markdown/default/template.md.jinja
21
- ```
22
-
23
- ## Template Structure
24
-
25
- Currently, no core markdown templates are provided by the package.
26
-
27
- This directory is a placeholder for potential future package markdown templates.
28
-
29
- All markdown templates should be created in `templates/markdown/`.