@hexidecibel/companion 0.0.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.
Files changed (109) hide show
  1. package/dist/__tests__/task-parser.test.d.ts +2 -0
  2. package/dist/__tests__/task-parser.test.d.ts.map +1 -0
  3. package/dist/__tests__/task-parser.test.js +79 -0
  4. package/dist/__tests__/task-parser.test.js.map +1 -0
  5. package/dist/anthropic-usage.d.ts +5 -0
  6. package/dist/anthropic-usage.d.ts.map +1 -0
  7. package/dist/anthropic-usage.js +112 -0
  8. package/dist/anthropic-usage.js.map +1 -0
  9. package/dist/cert-generator.d.ts +15 -0
  10. package/dist/cert-generator.d.ts.map +1 -0
  11. package/dist/cert-generator.js +298 -0
  12. package/dist/cert-generator.js.map +1 -0
  13. package/dist/config.d.ts +4 -0
  14. package/dist/config.d.ts.map +1 -0
  15. package/dist/config.js +122 -0
  16. package/dist/config.js.map +1 -0
  17. package/dist/encryption.d.ts +28 -0
  18. package/dist/encryption.d.ts.map +1 -0
  19. package/dist/encryption.js +95 -0
  20. package/dist/encryption.js.map +1 -0
  21. package/dist/index.d.ts +3 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +211 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/input-injector.d.ts +21 -0
  26. package/dist/input-injector.d.ts.map +1 -0
  27. package/dist/input-injector.js +126 -0
  28. package/dist/input-injector.js.map +1 -0
  29. package/dist/mdns.d.ts +11 -0
  30. package/dist/mdns.d.ts.map +1 -0
  31. package/dist/mdns.js +93 -0
  32. package/dist/mdns.js.map +1 -0
  33. package/dist/parser.d.ts +43 -0
  34. package/dist/parser.d.ts.map +1 -0
  35. package/dist/parser.js +800 -0
  36. package/dist/parser.js.map +1 -0
  37. package/dist/push.d.ts +38 -0
  38. package/dist/push.d.ts.map +1 -0
  39. package/dist/push.js +359 -0
  40. package/dist/push.js.map +1 -0
  41. package/dist/qr-server.d.ts +13 -0
  42. package/dist/qr-server.d.ts.map +1 -0
  43. package/dist/qr-server.js +421 -0
  44. package/dist/qr-server.js.map +1 -0
  45. package/dist/scaffold/generator.d.ts +11 -0
  46. package/dist/scaffold/generator.d.ts.map +1 -0
  47. package/dist/scaffold/generator.js +206 -0
  48. package/dist/scaffold/generator.js.map +1 -0
  49. package/dist/scaffold/templates/index.d.ts +5 -0
  50. package/dist/scaffold/templates/index.d.ts.map +1 -0
  51. package/dist/scaffold/templates/index.js +22 -0
  52. package/dist/scaffold/templates/index.js.map +1 -0
  53. package/dist/scaffold/templates/node-express.d.ts +3 -0
  54. package/dist/scaffold/templates/node-express.d.ts.map +1 -0
  55. package/dist/scaffold/templates/node-express.js +218 -0
  56. package/dist/scaffold/templates/node-express.js.map +1 -0
  57. package/dist/scaffold/templates/python-fastapi.d.ts +3 -0
  58. package/dist/scaffold/templates/python-fastapi.d.ts.map +1 -0
  59. package/dist/scaffold/templates/python-fastapi.js +302 -0
  60. package/dist/scaffold/templates/python-fastapi.js.map +1 -0
  61. package/dist/scaffold/templates/react-mui-website.d.ts +3 -0
  62. package/dist/scaffold/templates/react-mui-website.d.ts.map +1 -0
  63. package/dist/scaffold/templates/react-mui-website.js +405 -0
  64. package/dist/scaffold/templates/react-mui-website.js.map +1 -0
  65. package/dist/scaffold/templates/react-typescript.d.ts +3 -0
  66. package/dist/scaffold/templates/react-typescript.d.ts.map +1 -0
  67. package/dist/scaffold/templates/react-typescript.js +275 -0
  68. package/dist/scaffold/templates/react-typescript.js.map +1 -0
  69. package/dist/scaffold/types.d.ts +55 -0
  70. package/dist/scaffold/types.d.ts.map +1 -0
  71. package/dist/scaffold/types.js +3 -0
  72. package/dist/scaffold/types.js.map +1 -0
  73. package/dist/subagent-watcher.d.ts +24 -0
  74. package/dist/subagent-watcher.d.ts.map +1 -0
  75. package/dist/subagent-watcher.js +307 -0
  76. package/dist/subagent-watcher.js.map +1 -0
  77. package/dist/tls.d.ts +10 -0
  78. package/dist/tls.d.ts.map +1 -0
  79. package/dist/tls.js +77 -0
  80. package/dist/tls.js.map +1 -0
  81. package/dist/tmux-manager.d.ts +71 -0
  82. package/dist/tmux-manager.d.ts.map +1 -0
  83. package/dist/tmux-manager.js +243 -0
  84. package/dist/tmux-manager.js.map +1 -0
  85. package/dist/tool-config.d.ts +33 -0
  86. package/dist/tool-config.d.ts.map +1 -0
  87. package/dist/tool-config.js +211 -0
  88. package/dist/tool-config.js.map +1 -0
  89. package/dist/types.d.ts +218 -0
  90. package/dist/types.d.ts.map +1 -0
  91. package/dist/types.js +3 -0
  92. package/dist/types.js.map +1 -0
  93. package/dist/watcher.d.ts +63 -0
  94. package/dist/watcher.d.ts.map +1 -0
  95. package/dist/watcher.js +596 -0
  96. package/dist/watcher.js.map +1 -0
  97. package/dist/watcher.test.d.ts +2 -0
  98. package/dist/watcher.test.d.ts.map +1 -0
  99. package/dist/watcher.test.js +110 -0
  100. package/dist/watcher.test.js.map +1 -0
  101. package/dist/websocket.d.ts +62 -0
  102. package/dist/websocket.d.ts.map +1 -0
  103. package/dist/websocket.js +1695 -0
  104. package/dist/websocket.js.map +1 -0
  105. package/package.json +71 -0
  106. package/scripts/build.sh +23 -0
  107. package/scripts/install-remote.sh +18 -0
  108. package/scripts/install.sh +558 -0
  109. package/scripts/uninstall.sh +113 -0
@@ -0,0 +1,5 @@
1
+ import { StackTemplate } from '../types';
2
+ export declare const templates: StackTemplate[];
3
+ export declare function getTemplate(id: string): StackTemplate | undefined;
4
+ export declare function getTemplatesByType(type: StackTemplate['type']): StackTemplate[];
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/scaffold/templates/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAMzC,eAAO,MAAM,SAAS,EAAE,aAAa,EAKpC,CAAC;AAEF,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAEjE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,aAAa,EAAE,CAE/E"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.templates = void 0;
4
+ exports.getTemplate = getTemplate;
5
+ exports.getTemplatesByType = getTemplatesByType;
6
+ const react_typescript_1 = require("./react-typescript");
7
+ const react_mui_website_1 = require("./react-mui-website");
8
+ const node_express_1 = require("./node-express");
9
+ const python_fastapi_1 = require("./python-fastapi");
10
+ exports.templates = [
11
+ react_typescript_1.reactTypescriptTemplate,
12
+ react_mui_website_1.reactMuiWebsiteTemplate,
13
+ node_express_1.nodeExpressTemplate,
14
+ python_fastapi_1.pythonFastapiTemplate,
15
+ ];
16
+ function getTemplate(id) {
17
+ return exports.templates.find(t => t.id === id);
18
+ }
19
+ function getTemplatesByType(type) {
20
+ return exports.templates.filter(t => t.type === type);
21
+ }
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/scaffold/templates/index.ts"],"names":[],"mappings":";;;AAaA,kCAEC;AAED,gDAEC;AAlBD,yDAA6D;AAC7D,2DAA8D;AAC9D,iDAAqD;AACrD,qDAAyD;AAE5C,QAAA,SAAS,GAAoB;IACxC,0CAAuB;IACvB,2CAAuB;IACvB,kCAAmB;IACnB,sCAAqB;CACtB,CAAC;AAEF,SAAgB,WAAW,CAAC,EAAU;IACpC,OAAO,iBAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,SAAgB,kBAAkB,CAAC,IAA2B;IAC5D,OAAO,iBAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAChD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { StackTemplate } from '../types';
2
+ export declare const nodeExpressTemplate: StackTemplate;
3
+ //# sourceMappingURL=node-express.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-express.d.ts","sourceRoot":"","sources":["../../../src/scaffold/templates/node-express.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,eAAO,MAAM,mBAAmB,EAAE,aAqNjC,CAAC"}
@@ -0,0 +1,218 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.nodeExpressTemplate = void 0;
4
+ exports.nodeExpressTemplate = {
5
+ id: 'node-express',
6
+ name: 'Node.js + Express + TypeScript',
7
+ description: 'REST API with Express, TypeScript, and best practices',
8
+ type: 'backend',
9
+ icon: '🟢',
10
+ tags: ['node', 'express', 'typescript', 'backend', 'api'],
11
+ files: [
12
+ {
13
+ path: 'package.json',
14
+ template: `{
15
+ "name": "{{projectName}}",
16
+ "version": "1.0.0",
17
+ "description": "{{projectDescription}}",
18
+ "main": "dist/index.js",
19
+ "scripts": {
20
+ "dev": "tsx watch src/index.ts",
21
+ "build": "tsc",
22
+ "start": "node dist/index.js",
23
+ "test": "vitest",
24
+ "lint": "eslint src/"
25
+ },
26
+ "dependencies": {
27
+ "express": "^4.21.0",
28
+ "cors": "^2.8.5",
29
+ "dotenv": "^16.4.5"
30
+ },
31
+ "devDependencies": {
32
+ "@types/cors": "^2.8.17",
33
+ "@types/express": "^4.17.21",
34
+ "@types/node": "^22.7.5",
35
+ "tsx": "^4.19.1",
36
+ "typescript": "^5.6.3",
37
+ "vitest": "^2.1.4",
38
+ "eslint": "^9.13.0",
39
+ "@typescript-eslint/eslint-plugin": "^8.11.0",
40
+ "@typescript-eslint/parser": "^8.11.0"
41
+ }
42
+ }`,
43
+ },
44
+ {
45
+ path: 'tsconfig.json',
46
+ template: `{
47
+ "compilerOptions": {
48
+ "target": "ES2022",
49
+ "module": "NodeNext",
50
+ "moduleResolution": "NodeNext",
51
+ "outDir": "./dist",
52
+ "rootDir": "./src",
53
+ "strict": true,
54
+ "esModuleInterop": true,
55
+ "skipLibCheck": true,
56
+ "forceConsistentCasingInFileNames": true,
57
+ "resolveJsonModule": true,
58
+ "declaration": true,
59
+ "declarationMap": true,
60
+ "sourceMap": true
61
+ },
62
+ "include": ["src/**/*"],
63
+ "exclude": ["node_modules", "dist"]
64
+ }`,
65
+ },
66
+ {
67
+ path: 'src/index.ts',
68
+ template: `import express from 'express';
69
+ import cors from 'cors';
70
+ import { config } from 'dotenv';
71
+ import { router } from './routes/index.js';
72
+
73
+ config();
74
+
75
+ const app = express();
76
+ const port = process.env.PORT || 3000;
77
+
78
+ app.use(cors());
79
+ app.use(express.json());
80
+
81
+ app.use('/api', router);
82
+
83
+ app.get('/health', (req, res) => {
84
+ res.json({ status: 'ok', timestamp: new Date().toISOString() });
85
+ });
86
+
87
+ app.listen(port, () => {
88
+ console.log(\`Server running on http://localhost:\${port}\`);
89
+ });`,
90
+ },
91
+ {
92
+ path: 'src/routes/index.ts',
93
+ template: `import { Router } from 'express';
94
+
95
+ export const router = Router();
96
+
97
+ router.get('/', (req, res) => {
98
+ res.json({ message: 'Welcome to {{projectName}} API' });
99
+ });
100
+
101
+ // Add your routes here
102
+ // router.use('/users', usersRouter);`,
103
+ },
104
+ {
105
+ path: 'src/types/index.ts',
106
+ template: `// Add your types here
107
+
108
+ export interface ApiResponse<T> {
109
+ success: boolean;
110
+ data?: T;
111
+ error?: string;
112
+ }`,
113
+ },
114
+ {
115
+ path: '.env',
116
+ template: `PORT=3000
117
+ NODE_ENV=development`,
118
+ },
119
+ {
120
+ path: '.env.example',
121
+ template: `PORT=3000
122
+ NODE_ENV=development`,
123
+ },
124
+ {
125
+ path: '.gitignore',
126
+ template: `# Dependencies
127
+ node_modules
128
+
129
+ # Build
130
+ dist
131
+
132
+ # Environment
133
+ .env
134
+ .env.local
135
+ .env.*.local
136
+
137
+ # Logs
138
+ *.log
139
+ npm-debug.log*
140
+
141
+ # Editor
142
+ .vscode/*
143
+ !.vscode/extensions.json
144
+ .idea
145
+
146
+ # OS
147
+ .DS_Store`,
148
+ },
149
+ {
150
+ path: 'CLAUDE.md',
151
+ template: `# {{projectName}}
152
+
153
+ {{projectDescription}}
154
+
155
+ ## Tech Stack
156
+ - Node.js with TypeScript
157
+ - Express.js for HTTP server
158
+ - tsx for development (hot reload)
159
+
160
+ ## Project Structure
161
+ \`\`\`
162
+ src/
163
+ ├── index.ts # Entry point, server setup
164
+ ├── routes/ # API route handlers
165
+ │ └── index.ts # Route definitions
166
+ └── types/ # TypeScript types
167
+ └── index.ts
168
+ \`\`\`
169
+
170
+ ## Commands
171
+ - \`npm run dev\` - Start dev server with hot reload
172
+ - \`npm run build\` - Build TypeScript to dist/
173
+ - \`npm start\` - Run production build
174
+ - \`npm test\` - Run tests
175
+ - \`npm run lint\` - Run linter
176
+
177
+ ## API Endpoints
178
+ - \`GET /health\` - Health check
179
+ - \`GET /api\` - API root
180
+
181
+ ## Development Notes
182
+ - Add routes in \`src/routes/\`
183
+ - Add middleware in \`src/middleware/\`
184
+ - Add services/business logic in \`src/services/\`
185
+ - Environment variables in \`.env\``,
186
+ },
187
+ {
188
+ path: 'README.md',
189
+ template: `# {{projectName}}
190
+
191
+ {{projectDescription}}
192
+
193
+ ## Getting Started
194
+
195
+ \`\`\`bash
196
+ npm install
197
+ npm run dev
198
+ \`\`\`
199
+
200
+ Server will start at http://localhost:3000
201
+
202
+ ## Scripts
203
+
204
+ - \`npm run dev\` - Start development server
205
+ - \`npm run build\` - Build for production
206
+ - \`npm start\` - Run production server
207
+ - \`npm test\` - Run tests`,
208
+ },
209
+ ],
210
+ postCreate: [
211
+ {
212
+ command: 'npm install',
213
+ description: 'Installing dependencies',
214
+ },
215
+ ],
216
+ recommendedSkills: ['test', 'build', 'dev'],
217
+ };
218
+ //# sourceMappingURL=node-express.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-express.js","sourceRoot":"","sources":["../../../src/scaffold/templates/node-express.ts"],"names":[],"mappings":";;;AAEa,QAAA,mBAAmB,GAAkB;IAChD,EAAE,EAAE,cAAc;IAClB,IAAI,EAAE,gCAAgC;IACtC,WAAW,EAAE,uDAAuD;IACpE,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,CAAC;IACzD,KAAK,EAAE;QACL;YACE,IAAI,EAAE,cAAc;YACpB,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4Bd;SACG;QACD;YACE,IAAI,EAAE,eAAe;YACrB,QAAQ,EAAE;;;;;;;;;;;;;;;;;;EAkBd;SACG;QACD;YACE,IAAI,EAAE,cAAc;YACpB,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;IAqBZ;SACC;QACD;YACE,IAAI,EAAE,qBAAqB;YAC3B,QAAQ,EAAE;;;;;;;;;sCASsB;SACjC;QACD;YACE,IAAI,EAAE,oBAAoB;YAC1B,QAAQ,EAAE;;;;;;EAMd;SACG;QACD;YACE,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE;qBACK;SAChB;QACD;YACE,IAAI,EAAE,cAAc;YACpB,QAAQ,EAAE;qBACK;SAChB;QACD;YACE,IAAI,EAAE,YAAY;YAClB,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;UAqBN;SACL;QACD;YACE,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCAkCoB;SAC/B;QACD;YACE,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE;;;;;;;;;;;;;;;;;;2BAkBW;SACtB;KACF;IACD,UAAU,EAAE;QACV;YACE,OAAO,EAAE,aAAa;YACtB,WAAW,EAAE,yBAAyB;SACvC;KACF;IACD,iBAAiB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC;CAC5C,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { StackTemplate } from '../types';
2
+ export declare const pythonFastapiTemplate: StackTemplate;
3
+ //# sourceMappingURL=python-fastapi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python-fastapi.d.ts","sourceRoot":"","sources":["../../../src/scaffold/templates/python-fastapi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,eAAO,MAAM,qBAAqB,EAAE,aAySnC,CAAC"}
@@ -0,0 +1,302 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pythonFastapiTemplate = void 0;
4
+ exports.pythonFastapiTemplate = {
5
+ id: 'python-fastapi',
6
+ name: 'Python + FastAPI',
7
+ description: 'Modern Python API with FastAPI, async support, and auto-generated docs',
8
+ type: 'backend',
9
+ icon: '🐍',
10
+ tags: ['python', 'fastapi', 'backend', 'api', 'async'],
11
+ files: [
12
+ {
13
+ 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]
42
+ asyncio_mode = "auto"`,
43
+ },
44
+ {
45
+ path: 'app/__init__.py',
46
+ template: `"""{{projectName}} - {{projectDescription}}"""
47
+
48
+ __version__ = "0.1.0"`,
49
+ },
50
+ {
51
+ 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."""
83
+ return {"message": "Welcome to {{projectName}}"}`,
84
+ },
85
+ {
86
+ path: 'app/routers/__init__.py',
87
+ template: `"""API routers."""`,
88
+ },
89
+ {
90
+ 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():
105
+ # return {"items": []}`,
106
+ },
107
+ {
108
+ path: 'app/models/__init__.py',
109
+ template: `"""Pydantic models."""`,
110
+ },
111
+ {
112
+ 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
130
+ # description: str | None = None`,
131
+ },
132
+ {
133
+ path: 'app/services/__init__.py',
134
+ template: `"""Business logic services."""`,
135
+ },
136
+ {
137
+ path: 'tests/__init__.py',
138
+ template: `"""Tests for {{projectName}}."""`,
139
+ },
140
+ {
141
+ 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
168
+ assert "message" in response.json()`,
169
+ },
170
+ {
171
+ path: '.env',
172
+ template: `# Environment variables
173
+ DEBUG=true
174
+ HOST=0.0.0.0
175
+ PORT=8000`,
176
+ },
177
+ {
178
+ path: '.env.example',
179
+ template: `# Environment variables
180
+ DEBUG=true
181
+ HOST=0.0.0.0
182
+ PORT=8000`,
183
+ },
184
+ {
185
+ 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
218
+ .DS_Store`,
219
+ },
220
+ {
221
+ 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/\`
260
+ - Environment variables in \`.env\``,
261
+ },
262
+ {
263
+ 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
291
+ - \`ruff format .\` - Format code`,
292
+ },
293
+ ],
294
+ postCreate: [
295
+ {
296
+ command: 'python -m venv venv && . venv/bin/activate && pip install -e ".[dev]"',
297
+ description: 'Creating virtual environment and installing dependencies',
298
+ },
299
+ ],
300
+ recommendedSkills: ['test', 'dev'],
301
+ };
302
+ //# sourceMappingURL=python-fastapi.js.map
@@ -0,0 +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"}
@@ -0,0 +1,3 @@
1
+ import { StackTemplate } from '../types';
2
+ export declare const reactMuiWebsiteTemplate: StackTemplate;
3
+ //# sourceMappingURL=react-mui-website.d.ts.map
@@ -0,0 +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,aAgZrC,CAAC"}