@hexidecibel/companion 0.0.1 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/task-parser.test.js +29 -29
- package/dist/__tests__/task-parser.test.js.map +1 -1
- package/dist/anthropic-usage.d.ts.map +1 -1
- package/dist/anthropic-usage.js +1 -1
- package/dist/anthropic-usage.js.map +1 -1
- package/dist/cert-generator.d.ts.map +1 -1
- package/dist/cert-generator.js +4 -21
- package/dist/cert-generator.js.map +1 -1
- package/dist/cli.d.ts +9 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +413 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -7
- package/dist/config.js.map +1 -1
- package/dist/escalation.d.ts +51 -0
- package/dist/escalation.d.ts.map +1 -0
- package/dist/escalation.js +198 -0
- package/dist/escalation.js.map +1 -0
- package/dist/index.js +67 -30
- package/dist/index.js.map +1 -1
- package/dist/input-injector.d.ts.map +1 -1
- package/dist/input-injector.js +9 -5
- package/dist/input-injector.js.map +1 -1
- package/dist/notification-store.d.ts +35 -0
- package/dist/notification-store.d.ts.map +1 -0
- package/dist/notification-store.js +272 -0
- package/dist/notification-store.js.map +1 -0
- package/dist/parser.d.ts +15 -1
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +106 -61
- package/dist/parser.js.map +1 -1
- package/dist/push.d.ts +18 -26
- package/dist/push.d.ts.map +1 -1
- package/dist/push.js +90 -184
- package/dist/push.js.map +1 -1
- package/dist/qr-server.d.ts.map +1 -1
- package/dist/qr-server.js +159 -139
- package/dist/qr-server.js.map +1 -1
- package/dist/rules-engine.d.ts +20 -0
- package/dist/rules-engine.d.ts.map +1 -0
- package/dist/rules-engine.js +71 -0
- package/dist/rules-engine.js.map +1 -0
- package/dist/scaffold/claude-commands.d.ts +18 -0
- package/dist/scaffold/claude-commands.d.ts.map +1 -0
- package/dist/scaffold/claude-commands.js +352 -0
- package/dist/scaffold/claude-commands.js.map +1 -0
- package/dist/scaffold/generator.d.ts.map +1 -1
- package/dist/scaffold/generator.js +26 -1
- package/dist/scaffold/generator.js.map +1 -1
- package/dist/scaffold/scorer.d.ts +19 -0
- package/dist/scaffold/scorer.d.ts.map +1 -0
- package/dist/scaffold/scorer.js +92 -0
- package/dist/scaffold/scorer.js.map +1 -0
- package/dist/scaffold/templates/go-cli.d.ts +3 -0
- package/dist/scaffold/templates/go-cli.d.ts.map +1 -0
- package/dist/scaffold/templates/go-cli.js +249 -0
- package/dist/scaffold/templates/go-cli.js.map +1 -0
- package/dist/scaffold/templates/index.d.ts.map +1 -1
- package/dist/scaffold/templates/index.js +8 -2
- package/dist/scaffold/templates/index.js.map +1 -1
- package/dist/scaffold/templates/nextjs.d.ts +3 -0
- package/dist/scaffold/templates/nextjs.d.ts.map +1 -0
- package/dist/scaffold/templates/nextjs.js +336 -0
- package/dist/scaffold/templates/nextjs.js.map +1 -0
- package/dist/scaffold/templates/node-express.d.ts.map +1 -1
- package/dist/scaffold/templates/node-express.js +170 -157
- package/dist/scaffold/templates/node-express.js.map +1 -1
- package/dist/scaffold/templates/python-fastapi.d.ts.map +1 -1
- package/dist/scaffold/templates/python-fastapi.js +234 -221
- package/dist/scaffold/templates/python-fastapi.js.map +1 -1
- package/dist/scaffold/templates/react-mui-website.d.ts.map +1 -1
- package/dist/scaffold/templates/react-mui-website.js +337 -324
- package/dist/scaffold/templates/react-mui-website.js.map +1 -1
- package/dist/scaffold/templates/react-typescript.d.ts.map +1 -1
- package/dist/scaffold/templates/react-typescript.js +219 -206
- package/dist/scaffold/templates/react-typescript.js.map +1 -1
- package/dist/scaffold/templates/typescript-library.d.ts +3 -0
- package/dist/scaffold/templates/typescript-library.d.ts.map +1 -0
- package/dist/scaffold/templates/typescript-library.js +241 -0
- package/dist/scaffold/templates/typescript-library.js.map +1 -0
- package/dist/scaffold/types.d.ts +7 -0
- package/dist/scaffold/types.d.ts.map +1 -1
- package/dist/subagent-watcher.d.ts.map +1 -1
- package/dist/subagent-watcher.js +3 -3
- package/dist/subagent-watcher.js.map +1 -1
- package/dist/tmux-manager.d.ts +37 -0
- package/dist/tmux-manager.d.ts.map +1 -1
- package/dist/tmux-manager.js +165 -5
- package/dist/tmux-manager.js.map +1 -1
- package/dist/tool-config.d.ts.map +1 -1
- package/dist/tool-config.js +2 -2
- package/dist/tool-config.js.map +1 -1
- package/dist/types.d.ts +85 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +18 -0
- package/dist/types.js.map +1 -1
- package/dist/watcher.d.ts +7 -0
- package/dist/watcher.d.ts.map +1 -1
- package/dist/watcher.js +118 -9
- package/dist/watcher.js.map +1 -1
- package/dist/websocket.d.ts +16 -2
- package/dist/websocket.d.ts.map +1 -1
- package/dist/websocket.js +758 -117
- package/dist/websocket.js.map +1 -1
- package/dist/work-group-manager.d.ts +69 -0
- package/dist/work-group-manager.d.ts.map +1 -0
- package/dist/work-group-manager.js +610 -0
- package/dist/work-group-manager.js.map +1 -0
- package/package.json +1 -1
|
@@ -8,78 +8,91 @@ exports.pythonFastapiTemplate = {
|
|
|
8
8
|
type: 'backend',
|
|
9
9
|
icon: '🐍',
|
|
10
10
|
tags: ['python', 'fastapi', 'backend', 'api', 'async'],
|
|
11
|
+
scoring: {
|
|
12
|
+
primaryKeywords: ['python', 'fastapi', 'uvicorn', 'pydantic'],
|
|
13
|
+
secondaryKeywords: ['async', 'api', 'ml', 'machine learning', 'data', 'science', 'model'],
|
|
14
|
+
useCases: [
|
|
15
|
+
'python api',
|
|
16
|
+
'fastapi service',
|
|
17
|
+
'python ml service',
|
|
18
|
+
'python backend',
|
|
19
|
+
'data api',
|
|
20
|
+
'machine learning api',
|
|
21
|
+
],
|
|
22
|
+
typeSignals: { python: 3, ml: 2, 'machine learning': 2, data: 1, science: 1 },
|
|
23
|
+
},
|
|
11
24
|
files: [
|
|
12
25
|
{
|
|
13
26
|
path: 'pyproject.toml',
|
|
14
|
-
template: `[project]
|
|
15
|
-
name = "{{projectName}}"
|
|
16
|
-
version = "0.1.0"
|
|
17
|
-
description = "{{projectDescription}}"
|
|
18
|
-
requires-python = ">=3.11"
|
|
19
|
-
dependencies = [
|
|
20
|
-
"fastapi>=0.115.0",
|
|
21
|
-
"uvicorn[standard]>=0.32.0",
|
|
22
|
-
"pydantic>=2.9.0",
|
|
23
|
-
"python-dotenv>=1.0.0",
|
|
24
|
-
]
|
|
25
|
-
|
|
26
|
-
[project.optional-dependencies]
|
|
27
|
-
dev = [
|
|
28
|
-
"pytest>=8.3.0",
|
|
29
|
-
"pytest-asyncio>=0.24.0",
|
|
30
|
-
"httpx>=0.27.0",
|
|
31
|
-
"ruff>=0.7.0",
|
|
32
|
-
]
|
|
33
|
-
|
|
34
|
-
[tool.ruff]
|
|
35
|
-
line-length = 88
|
|
36
|
-
target-version = "py311"
|
|
37
|
-
|
|
38
|
-
[tool.ruff.lint]
|
|
39
|
-
select = ["E", "F", "I", "N", "W"]
|
|
40
|
-
|
|
41
|
-
[tool.pytest.ini_options]
|
|
27
|
+
template: `[project]
|
|
28
|
+
name = "{{projectName}}"
|
|
29
|
+
version = "0.1.0"
|
|
30
|
+
description = "{{projectDescription}}"
|
|
31
|
+
requires-python = ">=3.11"
|
|
32
|
+
dependencies = [
|
|
33
|
+
"fastapi>=0.115.0",
|
|
34
|
+
"uvicorn[standard]>=0.32.0",
|
|
35
|
+
"pydantic>=2.9.0",
|
|
36
|
+
"python-dotenv>=1.0.0",
|
|
37
|
+
]
|
|
38
|
+
|
|
39
|
+
[project.optional-dependencies]
|
|
40
|
+
dev = [
|
|
41
|
+
"pytest>=8.3.0",
|
|
42
|
+
"pytest-asyncio>=0.24.0",
|
|
43
|
+
"httpx>=0.27.0",
|
|
44
|
+
"ruff>=0.7.0",
|
|
45
|
+
]
|
|
46
|
+
|
|
47
|
+
[tool.ruff]
|
|
48
|
+
line-length = 88
|
|
49
|
+
target-version = "py311"
|
|
50
|
+
|
|
51
|
+
[tool.ruff.lint]
|
|
52
|
+
select = ["E", "F", "I", "N", "W"]
|
|
53
|
+
|
|
54
|
+
[tool.pytest.ini_options]
|
|
42
55
|
asyncio_mode = "auto"`,
|
|
43
56
|
},
|
|
44
57
|
{
|
|
45
58
|
path: 'app/__init__.py',
|
|
46
|
-
template: `"""{{projectName}} - {{projectDescription}}"""
|
|
47
|
-
|
|
59
|
+
template: `"""{{projectName}} - {{projectDescription}}"""
|
|
60
|
+
|
|
48
61
|
__version__ = "0.1.0"`,
|
|
49
62
|
},
|
|
50
63
|
{
|
|
51
64
|
path: 'app/main.py',
|
|
52
|
-
template: `from fastapi import FastAPI
|
|
53
|
-
from fastapi.middleware.cors import CORSMiddleware
|
|
54
|
-
|
|
55
|
-
from app.routers import api
|
|
56
|
-
|
|
57
|
-
app = FastAPI(
|
|
58
|
-
title="{{projectName}}",
|
|
59
|
-
description="{{projectDescription}}",
|
|
60
|
-
version="0.1.0",
|
|
61
|
-
)
|
|
62
|
-
|
|
63
|
-
app.add_middleware(
|
|
64
|
-
CORSMiddleware,
|
|
65
|
-
allow_origins=["*"],
|
|
66
|
-
allow_credentials=True,
|
|
67
|
-
allow_methods=["*"],
|
|
68
|
-
allow_headers=["*"],
|
|
69
|
-
)
|
|
70
|
-
|
|
71
|
-
app.include_router(api.router, prefix="/api")
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
@app.get("/health")
|
|
75
|
-
async def health_check():
|
|
76
|
-
"""Health check endpoint."""
|
|
77
|
-
return {"status": "ok"}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
@app.get("/")
|
|
81
|
-
async def root():
|
|
82
|
-
"""Root endpoint."""
|
|
65
|
+
template: `from fastapi import FastAPI
|
|
66
|
+
from fastapi.middleware.cors import CORSMiddleware
|
|
67
|
+
|
|
68
|
+
from app.routers import api
|
|
69
|
+
|
|
70
|
+
app = FastAPI(
|
|
71
|
+
title="{{projectName}}",
|
|
72
|
+
description="{{projectDescription}}",
|
|
73
|
+
version="0.1.0",
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
app.add_middleware(
|
|
77
|
+
CORSMiddleware,
|
|
78
|
+
allow_origins=["*"],
|
|
79
|
+
allow_credentials=True,
|
|
80
|
+
allow_methods=["*"],
|
|
81
|
+
allow_headers=["*"],
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
app.include_router(api.router, prefix="/api")
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
@app.get("/health")
|
|
88
|
+
async def health_check():
|
|
89
|
+
"""Health check endpoint."""
|
|
90
|
+
return {"status": "ok"}
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
@app.get("/")
|
|
94
|
+
async def root():
|
|
95
|
+
"""Root endpoint."""
|
|
83
96
|
return {"message": "Welcome to {{projectName}}"}`,
|
|
84
97
|
},
|
|
85
98
|
{
|
|
@@ -88,20 +101,20 @@ async def root():
|
|
|
88
101
|
},
|
|
89
102
|
{
|
|
90
103
|
path: 'app/routers/api.py',
|
|
91
|
-
template: `from fastapi import APIRouter
|
|
92
|
-
|
|
93
|
-
router = APIRouter()
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
@router.get("/")
|
|
97
|
-
async def api_root():
|
|
98
|
-
"""API root endpoint."""
|
|
99
|
-
return {"message": "API v1"}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
# Add your routes here
|
|
103
|
-
# @router.get("/items")
|
|
104
|
-
# async def get_items():
|
|
104
|
+
template: `from fastapi import APIRouter
|
|
105
|
+
|
|
106
|
+
router = APIRouter()
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
@router.get("/")
|
|
110
|
+
async def api_root():
|
|
111
|
+
"""API root endpoint."""
|
|
112
|
+
return {"message": "API v1"}
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
# Add your routes here
|
|
116
|
+
# @router.get("/items")
|
|
117
|
+
# async def get_items():
|
|
105
118
|
# return {"items": []}`,
|
|
106
119
|
},
|
|
107
120
|
{
|
|
@@ -110,23 +123,23 @@ async def api_root():
|
|
|
110
123
|
},
|
|
111
124
|
{
|
|
112
125
|
path: 'app/models/schemas.py',
|
|
113
|
-
template: `from pydantic import BaseModel
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
class HealthResponse(BaseModel):
|
|
117
|
-
"""Health check response."""
|
|
118
|
-
status: str
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
class MessageResponse(BaseModel):
|
|
122
|
-
"""Generic message response."""
|
|
123
|
-
message: str
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
# Add your models here
|
|
127
|
-
# class Item(BaseModel):
|
|
128
|
-
# id: int
|
|
129
|
-
# name: str
|
|
126
|
+
template: `from pydantic import BaseModel
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
class HealthResponse(BaseModel):
|
|
130
|
+
"""Health check response."""
|
|
131
|
+
status: str
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
class MessageResponse(BaseModel):
|
|
135
|
+
"""Generic message response."""
|
|
136
|
+
message: str
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
# Add your models here
|
|
140
|
+
# class Item(BaseModel):
|
|
141
|
+
# id: int
|
|
142
|
+
# name: str
|
|
130
143
|
# description: str | None = None`,
|
|
131
144
|
},
|
|
132
145
|
{
|
|
@@ -139,155 +152,155 @@ class MessageResponse(BaseModel):
|
|
|
139
152
|
},
|
|
140
153
|
{
|
|
141
154
|
path: 'tests/test_main.py',
|
|
142
|
-
template: `import pytest
|
|
143
|
-
from httpx import ASGITransport, AsyncClient
|
|
144
|
-
|
|
145
|
-
from app.main import app
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
@pytest.fixture
|
|
149
|
-
async def client():
|
|
150
|
-
async with AsyncClient(
|
|
151
|
-
transport=ASGITransport(app=app),
|
|
152
|
-
base_url="http://test"
|
|
153
|
-
) as ac:
|
|
154
|
-
yield ac
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
@pytest.mark.asyncio
|
|
158
|
-
async def test_health(client: AsyncClient):
|
|
159
|
-
response = await client.get("/health")
|
|
160
|
-
assert response.status_code == 200
|
|
161
|
-
assert response.json() == {"status": "ok"}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
@pytest.mark.asyncio
|
|
165
|
-
async def test_root(client: AsyncClient):
|
|
166
|
-
response = await client.get("/")
|
|
167
|
-
assert response.status_code == 200
|
|
155
|
+
template: `import pytest
|
|
156
|
+
from httpx import ASGITransport, AsyncClient
|
|
157
|
+
|
|
158
|
+
from app.main import app
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
@pytest.fixture
|
|
162
|
+
async def client():
|
|
163
|
+
async with AsyncClient(
|
|
164
|
+
transport=ASGITransport(app=app),
|
|
165
|
+
base_url="http://test"
|
|
166
|
+
) as ac:
|
|
167
|
+
yield ac
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
@pytest.mark.asyncio
|
|
171
|
+
async def test_health(client: AsyncClient):
|
|
172
|
+
response = await client.get("/health")
|
|
173
|
+
assert response.status_code == 200
|
|
174
|
+
assert response.json() == {"status": "ok"}
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
@pytest.mark.asyncio
|
|
178
|
+
async def test_root(client: AsyncClient):
|
|
179
|
+
response = await client.get("/")
|
|
180
|
+
assert response.status_code == 200
|
|
168
181
|
assert "message" in response.json()`,
|
|
169
182
|
},
|
|
170
183
|
{
|
|
171
184
|
path: '.env',
|
|
172
|
-
template: `# Environment variables
|
|
173
|
-
DEBUG=true
|
|
174
|
-
HOST=0.0.0.0
|
|
185
|
+
template: `# Environment variables
|
|
186
|
+
DEBUG=true
|
|
187
|
+
HOST=0.0.0.0
|
|
175
188
|
PORT=8000`,
|
|
176
189
|
},
|
|
177
190
|
{
|
|
178
191
|
path: '.env.example',
|
|
179
|
-
template: `# Environment variables
|
|
180
|
-
DEBUG=true
|
|
181
|
-
HOST=0.0.0.0
|
|
192
|
+
template: `# Environment variables
|
|
193
|
+
DEBUG=true
|
|
194
|
+
HOST=0.0.0.0
|
|
182
195
|
PORT=8000`,
|
|
183
196
|
},
|
|
184
197
|
{
|
|
185
198
|
path: '.gitignore',
|
|
186
|
-
template: `# Python
|
|
187
|
-
__pycache__/
|
|
188
|
-
*.py[cod]
|
|
189
|
-
*$py.class
|
|
190
|
-
*.so
|
|
191
|
-
.Python
|
|
192
|
-
build/
|
|
193
|
-
dist/
|
|
194
|
-
*.egg-info/
|
|
195
|
-
.eggs/
|
|
196
|
-
|
|
197
|
-
# Virtual environments
|
|
198
|
-
venv/
|
|
199
|
-
.venv/
|
|
200
|
-
ENV/
|
|
201
|
-
|
|
202
|
-
# Environment
|
|
203
|
-
.env
|
|
204
|
-
.env.local
|
|
205
|
-
|
|
206
|
-
# IDE
|
|
207
|
-
.idea/
|
|
208
|
-
.vscode/
|
|
209
|
-
*.swp
|
|
210
|
-
*.swo
|
|
211
|
-
|
|
212
|
-
# Testing
|
|
213
|
-
.pytest_cache/
|
|
214
|
-
.coverage
|
|
215
|
-
htmlcov/
|
|
216
|
-
|
|
217
|
-
# OS
|
|
199
|
+
template: `# Python
|
|
200
|
+
__pycache__/
|
|
201
|
+
*.py[cod]
|
|
202
|
+
*$py.class
|
|
203
|
+
*.so
|
|
204
|
+
.Python
|
|
205
|
+
build/
|
|
206
|
+
dist/
|
|
207
|
+
*.egg-info/
|
|
208
|
+
.eggs/
|
|
209
|
+
|
|
210
|
+
# Virtual environments
|
|
211
|
+
venv/
|
|
212
|
+
.venv/
|
|
213
|
+
ENV/
|
|
214
|
+
|
|
215
|
+
# Environment
|
|
216
|
+
.env
|
|
217
|
+
.env.local
|
|
218
|
+
|
|
219
|
+
# IDE
|
|
220
|
+
.idea/
|
|
221
|
+
.vscode/
|
|
222
|
+
*.swp
|
|
223
|
+
*.swo
|
|
224
|
+
|
|
225
|
+
# Testing
|
|
226
|
+
.pytest_cache/
|
|
227
|
+
.coverage
|
|
228
|
+
htmlcov/
|
|
229
|
+
|
|
230
|
+
# OS
|
|
218
231
|
.DS_Store`,
|
|
219
232
|
},
|
|
220
233
|
{
|
|
221
234
|
path: 'CLAUDE.md',
|
|
222
|
-
template: `# {{projectName}}
|
|
223
|
-
|
|
224
|
-
{{projectDescription}}
|
|
225
|
-
|
|
226
|
-
## Tech Stack
|
|
227
|
-
- Python 3.11+
|
|
228
|
-
- FastAPI for async web framework
|
|
229
|
-
- Pydantic for data validation
|
|
230
|
-
- Uvicorn for ASGI server
|
|
231
|
-
|
|
232
|
-
## Project Structure
|
|
233
|
-
\`\`\`
|
|
234
|
-
app/
|
|
235
|
-
├── __init__.py
|
|
236
|
-
├── main.py # FastAPI app setup
|
|
237
|
-
├── routers/ # API route handlers
|
|
238
|
-
│ └── api.py
|
|
239
|
-
├── models/ # Pydantic schemas
|
|
240
|
-
│ └── schemas.py
|
|
241
|
-
└── services/ # Business logic
|
|
242
|
-
tests/
|
|
243
|
-
└── test_main.py # API tests
|
|
244
|
-
\`\`\`
|
|
245
|
-
|
|
246
|
-
## Commands
|
|
247
|
-
- \`uv run uvicorn app.main:app --reload\` - Start dev server
|
|
248
|
-
- \`uv run pytest\` - Run tests
|
|
249
|
-
- \`uv run ruff check .\` - Lint code
|
|
250
|
-
- \`uv run ruff format .\` - Format code
|
|
251
|
-
|
|
252
|
-
## API Docs
|
|
253
|
-
- Swagger UI: http://localhost:8000/docs
|
|
254
|
-
- ReDoc: http://localhost:8000/redoc
|
|
255
|
-
|
|
256
|
-
## Development Notes
|
|
257
|
-
- Add routes in \`app/routers/\`
|
|
258
|
-
- Add Pydantic models in \`app/models/\`
|
|
259
|
-
- Add business logic in \`app/services/\`
|
|
235
|
+
template: `# {{projectName}}
|
|
236
|
+
|
|
237
|
+
{{projectDescription}}
|
|
238
|
+
|
|
239
|
+
## Tech Stack
|
|
240
|
+
- Python 3.11+
|
|
241
|
+
- FastAPI for async web framework
|
|
242
|
+
- Pydantic for data validation
|
|
243
|
+
- Uvicorn for ASGI server
|
|
244
|
+
|
|
245
|
+
## Project Structure
|
|
246
|
+
\`\`\`
|
|
247
|
+
app/
|
|
248
|
+
├── __init__.py
|
|
249
|
+
├── main.py # FastAPI app setup
|
|
250
|
+
├── routers/ # API route handlers
|
|
251
|
+
│ └── api.py
|
|
252
|
+
├── models/ # Pydantic schemas
|
|
253
|
+
│ └── schemas.py
|
|
254
|
+
└── services/ # Business logic
|
|
255
|
+
tests/
|
|
256
|
+
└── test_main.py # API tests
|
|
257
|
+
\`\`\`
|
|
258
|
+
|
|
259
|
+
## Commands
|
|
260
|
+
- \`uv run uvicorn app.main:app --reload\` - Start dev server
|
|
261
|
+
- \`uv run pytest\` - Run tests
|
|
262
|
+
- \`uv run ruff check .\` - Lint code
|
|
263
|
+
- \`uv run ruff format .\` - Format code
|
|
264
|
+
|
|
265
|
+
## API Docs
|
|
266
|
+
- Swagger UI: http://localhost:8000/docs
|
|
267
|
+
- ReDoc: http://localhost:8000/redoc
|
|
268
|
+
|
|
269
|
+
## Development Notes
|
|
270
|
+
- Add routes in \`app/routers/\`
|
|
271
|
+
- Add Pydantic models in \`app/models/\`
|
|
272
|
+
- Add business logic in \`app/services/\`
|
|
260
273
|
- Environment variables in \`.env\``,
|
|
261
274
|
},
|
|
262
275
|
{
|
|
263
276
|
path: 'README.md',
|
|
264
|
-
template: `# {{projectName}}
|
|
265
|
-
|
|
266
|
-
{{projectDescription}}
|
|
267
|
-
|
|
268
|
-
## Getting Started
|
|
269
|
-
|
|
270
|
-
\`\`\`bash
|
|
271
|
-
# Create virtual environment
|
|
272
|
-
python -m venv venv
|
|
273
|
-
source venv/bin/activate # or venv\\Scripts\\activate on Windows
|
|
274
|
-
|
|
275
|
-
# Install dependencies
|
|
276
|
-
pip install -e ".[dev]"
|
|
277
|
-
|
|
278
|
-
# Run server
|
|
279
|
-
uvicorn app.main:app --reload
|
|
280
|
-
\`\`\`
|
|
281
|
-
|
|
282
|
-
Server will start at http://localhost:8000
|
|
283
|
-
|
|
284
|
-
API docs available at http://localhost:8000/docs
|
|
285
|
-
|
|
286
|
-
## Scripts
|
|
287
|
-
|
|
288
|
-
- \`uvicorn app.main:app --reload\` - Development server
|
|
289
|
-
- \`pytest\` - Run tests
|
|
290
|
-
- \`ruff check .\` - Lint code
|
|
277
|
+
template: `# {{projectName}}
|
|
278
|
+
|
|
279
|
+
{{projectDescription}}
|
|
280
|
+
|
|
281
|
+
## Getting Started
|
|
282
|
+
|
|
283
|
+
\`\`\`bash
|
|
284
|
+
# Create virtual environment
|
|
285
|
+
python -m venv venv
|
|
286
|
+
source venv/bin/activate # or venv\\Scripts\\activate on Windows
|
|
287
|
+
|
|
288
|
+
# Install dependencies
|
|
289
|
+
pip install -e ".[dev]"
|
|
290
|
+
|
|
291
|
+
# Run server
|
|
292
|
+
uvicorn app.main:app --reload
|
|
293
|
+
\`\`\`
|
|
294
|
+
|
|
295
|
+
Server will start at http://localhost:8000
|
|
296
|
+
|
|
297
|
+
API docs available at http://localhost:8000/docs
|
|
298
|
+
|
|
299
|
+
## Scripts
|
|
300
|
+
|
|
301
|
+
- \`uvicorn app.main:app --reload\` - Development server
|
|
302
|
+
- \`pytest\` - Run tests
|
|
303
|
+
- \`ruff check .\` - Lint code
|
|
291
304
|
- \`ruff format .\` - Format code`,
|
|
292
305
|
},
|
|
293
306
|
],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"python-fastapi.js","sourceRoot":"","sources":["../../../src/scaffold/templates/python-fastapi.ts"],"names":[],"mappings":";;;AAEa,QAAA,qBAAqB,GAAkB;IAClD,EAAE,EAAE,gBAAgB;IACpB,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,wEAAwE;IACrF,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC;IACtD,KAAK,EAAE;QACL;YACE,IAAI,EAAE,gBAAgB;YACtB,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBA4BM;SACjB;QACD;YACE,IAAI,EAAE,iBAAiB;YACvB,QAAQ,EAAE;;sBAEM;SACjB;QACD;YACE,IAAI,EAAE,aAAa;YACnB,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qDA+BqC;SAChD;QACD;YACE,IAAI,EAAE,yBAAyB;YAC/B,QAAQ,EAAE,oBAAoB;SAC/B;QACD;YACE,IAAI,EAAE,oBAAoB;YAC1B,QAAQ,EAAE;;;;;;;;;;;;;;2BAcW;SACtB;QACD;YACE,IAAI,EAAE,wBAAwB;YAC9B,QAAQ,EAAE,wBAAwB;SACnC;QACD;YACE,IAAI,EAAE,uBAAuB;YAC7B,QAAQ,EAAE;;;;;;;;;;;;;;;;;qCAiBqB;SAChC;QACD;YACE,IAAI,EAAE,0BAA0B;YAChC,QAAQ,EAAE,gCAAgC;SAC3C;QACD;YACE,IAAI,EAAE,mBAAmB;YACzB,QAAQ,EAAE,kCAAkC;SAC7C;QACD;YACE,IAAI,EAAE,oBAAoB;YAC1B,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;wCA0BwB;SACnC;QACD;YACE,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE;;;UAGN;SACL;QACD;YACE,IAAI,EAAE,cAAc;YACpB,QAAQ,EAAE;;;UAGN;SACL;QACD;YACE,IAAI,EAAE,YAAY;YAClB,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAgCN;SACL;QACD;YACE,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCAsCoB;SAC/B;QACD;YACE,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;kCA2BkB;SAC7B;KACF;IACD,UAAU,EAAE;QACV;YACE,OAAO,EAAE,uEAAuE;YAChF,WAAW,EAAE,0DAA0D;SACxE;KACF;IACD,iBAAiB,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC;CACnC,CAAC"}
|
|
1
|
+
{"version":3,"file":"python-fastapi.js","sourceRoot":"","sources":["../../../src/scaffold/templates/python-fastapi.ts"],"names":[],"mappings":";;;AAEa,QAAA,qBAAqB,GAAkB;IAClD,EAAE,EAAE,gBAAgB;IACpB,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,wEAAwE;IACrF,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC;IACtD,OAAO,EAAE;QACP,eAAe,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC;QAC7D,iBAAiB,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC;QACzF,QAAQ,EAAE;YACR,YAAY;YACZ,iBAAiB;YACjB,mBAAmB;YACnB,gBAAgB;YAChB,UAAU;YACV,sBAAsB;SACvB;QACD,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,kBAAkB,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;KAC9E;IACD,KAAK,EAAE;QACL;YACE,IAAI,EAAE,gBAAgB;YACtB,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBA4BM;SACjB;QACD;YACE,IAAI,EAAE,iBAAiB;YACvB,QAAQ,EAAE;;sBAEM;SACjB;QACD;YACE,IAAI,EAAE,aAAa;YACnB,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qDA+BqC;SAChD;QACD;YACE,IAAI,EAAE,yBAAyB;YAC/B,QAAQ,EAAE,oBAAoB;SAC/B;QACD;YACE,IAAI,EAAE,oBAAoB;YAC1B,QAAQ,EAAE;;;;;;;;;;;;;;2BAcW;SACtB;QACD;YACE,IAAI,EAAE,wBAAwB;YAC9B,QAAQ,EAAE,wBAAwB;SACnC;QACD;YACE,IAAI,EAAE,uBAAuB;YAC7B,QAAQ,EAAE;;;;;;;;;;;;;;;;;qCAiBqB;SAChC;QACD;YACE,IAAI,EAAE,0BAA0B;YAChC,QAAQ,EAAE,gCAAgC;SAC3C;QACD;YACE,IAAI,EAAE,mBAAmB;YACzB,QAAQ,EAAE,kCAAkC;SAC7C;QACD;YACE,IAAI,EAAE,oBAAoB;YAC1B,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;wCA0BwB;SACnC;QACD;YACE,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE;;;UAGN;SACL;QACD;YACE,IAAI,EAAE,cAAc;YACpB,QAAQ,EAAE;;;UAGN;SACL;QACD;YACE,IAAI,EAAE,YAAY;YAClB,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAgCN;SACL;QACD;YACE,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCAsCoB;SAC/B;QACD;YACE,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;kCA2BkB;SAC7B;KACF;IACD,UAAU,EAAE;QACV;YACE,OAAO,EAAE,uEAAuE;YAChF,WAAW,EAAE,0DAA0D;SACxE;KACF;IACD,iBAAiB,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC;CACnC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react-mui-website.d.ts","sourceRoot":"","sources":["../../../src/scaffold/templates/react-mui-website.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,eAAO,MAAM,uBAAuB,EAAE,
|
|
1
|
+
{"version":3,"file":"react-mui-website.d.ts","sourceRoot":"","sources":["../../../src/scaffold/templates/react-mui-website.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,eAAO,MAAM,uBAAuB,EAAE,aA6ZrC,CAAC"}
|