solokit 0.1.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.
Files changed (323) hide show
  1. solokit/__init__.py +10 -0
  2. solokit/__version__.py +3 -0
  3. solokit/cli.py +374 -0
  4. solokit/core/__init__.py +1 -0
  5. solokit/core/cache.py +102 -0
  6. solokit/core/command_runner.py +278 -0
  7. solokit/core/config.py +453 -0
  8. solokit/core/config_validator.py +204 -0
  9. solokit/core/constants.py +291 -0
  10. solokit/core/error_formatter.py +279 -0
  11. solokit/core/error_handlers.py +346 -0
  12. solokit/core/exceptions.py +1567 -0
  13. solokit/core/file_ops.py +309 -0
  14. solokit/core/logging_config.py +166 -0
  15. solokit/core/output.py +99 -0
  16. solokit/core/performance.py +57 -0
  17. solokit/core/protocols.py +141 -0
  18. solokit/core/types.py +312 -0
  19. solokit/deployment/__init__.py +1 -0
  20. solokit/deployment/executor.py +411 -0
  21. solokit/git/__init__.py +1 -0
  22. solokit/git/integration.py +619 -0
  23. solokit/init/__init__.py +41 -0
  24. solokit/init/claude_commands_installer.py +87 -0
  25. solokit/init/dependency_installer.py +313 -0
  26. solokit/init/docs_structure.py +90 -0
  27. solokit/init/env_generator.py +160 -0
  28. solokit/init/environment_validator.py +334 -0
  29. solokit/init/git_hooks_installer.py +71 -0
  30. solokit/init/git_setup.py +188 -0
  31. solokit/init/gitignore_updater.py +195 -0
  32. solokit/init/initial_commit.py +145 -0
  33. solokit/init/initial_scans.py +109 -0
  34. solokit/init/orchestrator.py +246 -0
  35. solokit/init/readme_generator.py +207 -0
  36. solokit/init/session_structure.py +239 -0
  37. solokit/init/template_installer.py +424 -0
  38. solokit/learning/__init__.py +1 -0
  39. solokit/learning/archiver.py +115 -0
  40. solokit/learning/categorizer.py +126 -0
  41. solokit/learning/curator.py +428 -0
  42. solokit/learning/extractor.py +352 -0
  43. solokit/learning/reporter.py +351 -0
  44. solokit/learning/repository.py +254 -0
  45. solokit/learning/similarity.py +342 -0
  46. solokit/learning/validator.py +144 -0
  47. solokit/project/__init__.py +1 -0
  48. solokit/project/init.py +1162 -0
  49. solokit/project/stack.py +436 -0
  50. solokit/project/sync_plugin.py +438 -0
  51. solokit/project/tree.py +375 -0
  52. solokit/quality/__init__.py +1 -0
  53. solokit/quality/api_validator.py +424 -0
  54. solokit/quality/checkers/__init__.py +25 -0
  55. solokit/quality/checkers/base.py +114 -0
  56. solokit/quality/checkers/context7.py +221 -0
  57. solokit/quality/checkers/custom.py +162 -0
  58. solokit/quality/checkers/deployment.py +323 -0
  59. solokit/quality/checkers/documentation.py +179 -0
  60. solokit/quality/checkers/formatting.py +161 -0
  61. solokit/quality/checkers/integration.py +394 -0
  62. solokit/quality/checkers/linting.py +159 -0
  63. solokit/quality/checkers/security.py +261 -0
  64. solokit/quality/checkers/spec_completeness.py +127 -0
  65. solokit/quality/checkers/tests.py +184 -0
  66. solokit/quality/env_validator.py +306 -0
  67. solokit/quality/gates.py +655 -0
  68. solokit/quality/reporters/__init__.py +10 -0
  69. solokit/quality/reporters/base.py +25 -0
  70. solokit/quality/reporters/console.py +98 -0
  71. solokit/quality/reporters/json_reporter.py +34 -0
  72. solokit/quality/results.py +98 -0
  73. solokit/session/__init__.py +1 -0
  74. solokit/session/briefing/__init__.py +245 -0
  75. solokit/session/briefing/documentation_loader.py +53 -0
  76. solokit/session/briefing/formatter.py +476 -0
  77. solokit/session/briefing/git_context.py +282 -0
  78. solokit/session/briefing/learning_loader.py +212 -0
  79. solokit/session/briefing/milestone_builder.py +78 -0
  80. solokit/session/briefing/orchestrator.py +137 -0
  81. solokit/session/briefing/stack_detector.py +51 -0
  82. solokit/session/briefing/tree_generator.py +52 -0
  83. solokit/session/briefing/work_item_loader.py +209 -0
  84. solokit/session/briefing.py +353 -0
  85. solokit/session/complete.py +1188 -0
  86. solokit/session/status.py +246 -0
  87. solokit/session/validate.py +452 -0
  88. solokit/templates/.claude/commands/end.md +109 -0
  89. solokit/templates/.claude/commands/init.md +159 -0
  90. solokit/templates/.claude/commands/learn-curate.md +88 -0
  91. solokit/templates/.claude/commands/learn-search.md +62 -0
  92. solokit/templates/.claude/commands/learn-show.md +69 -0
  93. solokit/templates/.claude/commands/learn.md +136 -0
  94. solokit/templates/.claude/commands/start.md +114 -0
  95. solokit/templates/.claude/commands/status.md +22 -0
  96. solokit/templates/.claude/commands/validate.md +27 -0
  97. solokit/templates/.claude/commands/work-delete.md +119 -0
  98. solokit/templates/.claude/commands/work-graph.md +139 -0
  99. solokit/templates/.claude/commands/work-list.md +26 -0
  100. solokit/templates/.claude/commands/work-new.md +114 -0
  101. solokit/templates/.claude/commands/work-next.md +25 -0
  102. solokit/templates/.claude/commands/work-show.md +24 -0
  103. solokit/templates/.claude/commands/work-update.md +141 -0
  104. solokit/templates/CHANGELOG.md +17 -0
  105. solokit/templates/WORK_ITEM_TYPES.md +141 -0
  106. solokit/templates/__init__.py +1 -0
  107. solokit/templates/bug_spec.md +217 -0
  108. solokit/templates/config.schema.json +150 -0
  109. solokit/templates/dashboard_refine/base/.gitignore +36 -0
  110. solokit/templates/dashboard_refine/base/app/(dashboard)/layout.tsx +22 -0
  111. solokit/templates/dashboard_refine/base/app/(dashboard)/page.tsx +68 -0
  112. solokit/templates/dashboard_refine/base/app/(dashboard)/users/page.tsx +77 -0
  113. solokit/templates/dashboard_refine/base/app/globals.css +60 -0
  114. solokit/templates/dashboard_refine/base/app/layout.tsx +23 -0
  115. solokit/templates/dashboard_refine/base/app/page.tsx +9 -0
  116. solokit/templates/dashboard_refine/base/components/client-refine-wrapper.tsx +21 -0
  117. solokit/templates/dashboard_refine/base/components/layout/header.tsx +44 -0
  118. solokit/templates/dashboard_refine/base/components/layout/sidebar.tsx +82 -0
  119. solokit/templates/dashboard_refine/base/components/ui/button.tsx +53 -0
  120. solokit/templates/dashboard_refine/base/components/ui/card.tsx +78 -0
  121. solokit/templates/dashboard_refine/base/components/ui/table.tsx +116 -0
  122. solokit/templates/dashboard_refine/base/components.json +16 -0
  123. solokit/templates/dashboard_refine/base/lib/refine.tsx +65 -0
  124. solokit/templates/dashboard_refine/base/lib/utils.ts +13 -0
  125. solokit/templates/dashboard_refine/base/next.config.ts +10 -0
  126. solokit/templates/dashboard_refine/base/package.json.template +40 -0
  127. solokit/templates/dashboard_refine/base/postcss.config.mjs +8 -0
  128. solokit/templates/dashboard_refine/base/providers/refine-provider.tsx +26 -0
  129. solokit/templates/dashboard_refine/base/tailwind.config.ts +57 -0
  130. solokit/templates/dashboard_refine/base/tsconfig.json +27 -0
  131. solokit/templates/dashboard_refine/docker/Dockerfile +57 -0
  132. solokit/templates/dashboard_refine/docker/docker-compose.prod.yml +31 -0
  133. solokit/templates/dashboard_refine/docker/docker-compose.yml +21 -0
  134. solokit/templates/dashboard_refine/tier-1-essential/.eslintrc.json +7 -0
  135. solokit/templates/dashboard_refine/tier-1-essential/jest.config.ts +17 -0
  136. solokit/templates/dashboard_refine/tier-1-essential/jest.setup.ts +1 -0
  137. solokit/templates/dashboard_refine/tier-1-essential/package.json.tier1.template +57 -0
  138. solokit/templates/dashboard_refine/tier-1-essential/tests/setup.ts +26 -0
  139. solokit/templates/dashboard_refine/tier-1-essential/tests/unit/example.test.tsx +73 -0
  140. solokit/templates/dashboard_refine/tier-2-standard/package.json.tier2.template +62 -0
  141. solokit/templates/dashboard_refine/tier-3-comprehensive/eslint.config.mjs +22 -0
  142. solokit/templates/dashboard_refine/tier-3-comprehensive/package.json.tier3.template +79 -0
  143. solokit/templates/dashboard_refine/tier-3-comprehensive/playwright.config.ts +66 -0
  144. solokit/templates/dashboard_refine/tier-3-comprehensive/stryker.conf.json +38 -0
  145. solokit/templates/dashboard_refine/tier-3-comprehensive/tests/e2e/dashboard.spec.ts +88 -0
  146. solokit/templates/dashboard_refine/tier-3-comprehensive/tests/e2e/user-management.spec.ts +102 -0
  147. solokit/templates/dashboard_refine/tier-3-comprehensive/tests/integration/dashboard.test.tsx +90 -0
  148. solokit/templates/dashboard_refine/tier-3-comprehensive/type-coverage.json +16 -0
  149. solokit/templates/dashboard_refine/tier-4-production/instrumentation.ts +9 -0
  150. solokit/templates/dashboard_refine/tier-4-production/k6/dashboard-load-test.js +70 -0
  151. solokit/templates/dashboard_refine/tier-4-production/next.config.ts +46 -0
  152. solokit/templates/dashboard_refine/tier-4-production/package.json.tier4.template +89 -0
  153. solokit/templates/dashboard_refine/tier-4-production/sentry.client.config.ts +26 -0
  154. solokit/templates/dashboard_refine/tier-4-production/sentry.edge.config.ts +11 -0
  155. solokit/templates/dashboard_refine/tier-4-production/sentry.server.config.ts +11 -0
  156. solokit/templates/deployment_spec.md +500 -0
  157. solokit/templates/feature_spec.md +248 -0
  158. solokit/templates/fullstack_nextjs/base/.gitignore +36 -0
  159. solokit/templates/fullstack_nextjs/base/app/api/example/route.ts +65 -0
  160. solokit/templates/fullstack_nextjs/base/app/globals.css +27 -0
  161. solokit/templates/fullstack_nextjs/base/app/layout.tsx +20 -0
  162. solokit/templates/fullstack_nextjs/base/app/page.tsx +32 -0
  163. solokit/templates/fullstack_nextjs/base/components/example-component.tsx +20 -0
  164. solokit/templates/fullstack_nextjs/base/lib/prisma.ts +17 -0
  165. solokit/templates/fullstack_nextjs/base/lib/utils.ts +13 -0
  166. solokit/templates/fullstack_nextjs/base/lib/validations.ts +20 -0
  167. solokit/templates/fullstack_nextjs/base/next.config.ts +7 -0
  168. solokit/templates/fullstack_nextjs/base/package.json.template +32 -0
  169. solokit/templates/fullstack_nextjs/base/postcss.config.mjs +8 -0
  170. solokit/templates/fullstack_nextjs/base/prisma/schema.prisma +21 -0
  171. solokit/templates/fullstack_nextjs/base/tailwind.config.ts +19 -0
  172. solokit/templates/fullstack_nextjs/base/tsconfig.json +27 -0
  173. solokit/templates/fullstack_nextjs/docker/Dockerfile +60 -0
  174. solokit/templates/fullstack_nextjs/docker/docker-compose.prod.yml +57 -0
  175. solokit/templates/fullstack_nextjs/docker/docker-compose.yml +47 -0
  176. solokit/templates/fullstack_nextjs/tier-1-essential/.eslintrc.json +7 -0
  177. solokit/templates/fullstack_nextjs/tier-1-essential/jest.config.ts +17 -0
  178. solokit/templates/fullstack_nextjs/tier-1-essential/jest.setup.ts +1 -0
  179. solokit/templates/fullstack_nextjs/tier-1-essential/package.json.tier1.template +48 -0
  180. solokit/templates/fullstack_nextjs/tier-1-essential/tests/api/example.test.ts +88 -0
  181. solokit/templates/fullstack_nextjs/tier-1-essential/tests/setup.ts +22 -0
  182. solokit/templates/fullstack_nextjs/tier-1-essential/tests/unit/example.test.tsx +22 -0
  183. solokit/templates/fullstack_nextjs/tier-2-standard/package.json.tier2.template +52 -0
  184. solokit/templates/fullstack_nextjs/tier-3-comprehensive/eslint.config.mjs +39 -0
  185. solokit/templates/fullstack_nextjs/tier-3-comprehensive/package.json.tier3.template +68 -0
  186. solokit/templates/fullstack_nextjs/tier-3-comprehensive/playwright.config.ts +66 -0
  187. solokit/templates/fullstack_nextjs/tier-3-comprehensive/stryker.conf.json +33 -0
  188. solokit/templates/fullstack_nextjs/tier-3-comprehensive/tests/e2e/flow.spec.ts +59 -0
  189. solokit/templates/fullstack_nextjs/tier-3-comprehensive/tests/integration/api.test.ts +165 -0
  190. solokit/templates/fullstack_nextjs/tier-3-comprehensive/type-coverage.json +12 -0
  191. solokit/templates/fullstack_nextjs/tier-4-production/instrumentation.ts +9 -0
  192. solokit/templates/fullstack_nextjs/tier-4-production/k6/load-test.js +45 -0
  193. solokit/templates/fullstack_nextjs/tier-4-production/next.config.ts +46 -0
  194. solokit/templates/fullstack_nextjs/tier-4-production/package.json.tier4.template +77 -0
  195. solokit/templates/fullstack_nextjs/tier-4-production/sentry.client.config.ts +26 -0
  196. solokit/templates/fullstack_nextjs/tier-4-production/sentry.edge.config.ts +11 -0
  197. solokit/templates/fullstack_nextjs/tier-4-production/sentry.server.config.ts +11 -0
  198. solokit/templates/git-hooks/prepare-commit-msg +24 -0
  199. solokit/templates/integration_test_spec.md +363 -0
  200. solokit/templates/learnings.json +15 -0
  201. solokit/templates/ml_ai_fastapi/base/.gitignore +104 -0
  202. solokit/templates/ml_ai_fastapi/base/alembic/env.py +96 -0
  203. solokit/templates/ml_ai_fastapi/base/alembic.ini +114 -0
  204. solokit/templates/ml_ai_fastapi/base/pyproject.toml.template +91 -0
  205. solokit/templates/ml_ai_fastapi/base/requirements.txt.template +28 -0
  206. solokit/templates/ml_ai_fastapi/base/src/__init__.py +5 -0
  207. solokit/templates/ml_ai_fastapi/base/src/api/__init__.py +3 -0
  208. solokit/templates/ml_ai_fastapi/base/src/api/dependencies.py +20 -0
  209. solokit/templates/ml_ai_fastapi/base/src/api/routes/__init__.py +3 -0
  210. solokit/templates/ml_ai_fastapi/base/src/api/routes/example.py +134 -0
  211. solokit/templates/ml_ai_fastapi/base/src/api/routes/health.py +66 -0
  212. solokit/templates/ml_ai_fastapi/base/src/core/__init__.py +3 -0
  213. solokit/templates/ml_ai_fastapi/base/src/core/config.py +64 -0
  214. solokit/templates/ml_ai_fastapi/base/src/core/database.py +50 -0
  215. solokit/templates/ml_ai_fastapi/base/src/main.py +64 -0
  216. solokit/templates/ml_ai_fastapi/base/src/models/__init__.py +7 -0
  217. solokit/templates/ml_ai_fastapi/base/src/models/example.py +61 -0
  218. solokit/templates/ml_ai_fastapi/base/src/services/__init__.py +3 -0
  219. solokit/templates/ml_ai_fastapi/base/src/services/example.py +115 -0
  220. solokit/templates/ml_ai_fastapi/docker/Dockerfile +59 -0
  221. solokit/templates/ml_ai_fastapi/docker/docker-compose.prod.yml +112 -0
  222. solokit/templates/ml_ai_fastapi/docker/docker-compose.yml +77 -0
  223. solokit/templates/ml_ai_fastapi/tier-1-essential/pyproject.toml.tier1.template +112 -0
  224. solokit/templates/ml_ai_fastapi/tier-1-essential/pyrightconfig.json +41 -0
  225. solokit/templates/ml_ai_fastapi/tier-1-essential/pytest.ini +69 -0
  226. solokit/templates/ml_ai_fastapi/tier-1-essential/requirements-dev.txt +17 -0
  227. solokit/templates/ml_ai_fastapi/tier-1-essential/ruff.toml +81 -0
  228. solokit/templates/ml_ai_fastapi/tier-1-essential/tests/__init__.py +3 -0
  229. solokit/templates/ml_ai_fastapi/tier-1-essential/tests/conftest.py +72 -0
  230. solokit/templates/ml_ai_fastapi/tier-1-essential/tests/test_main.py +49 -0
  231. solokit/templates/ml_ai_fastapi/tier-1-essential/tests/unit/__init__.py +3 -0
  232. solokit/templates/ml_ai_fastapi/tier-1-essential/tests/unit/test_example.py +113 -0
  233. solokit/templates/ml_ai_fastapi/tier-2-standard/pyproject.toml.tier2.template +130 -0
  234. solokit/templates/ml_ai_fastapi/tier-3-comprehensive/locustfile.py +99 -0
  235. solokit/templates/ml_ai_fastapi/tier-3-comprehensive/mutmut_config.py +53 -0
  236. solokit/templates/ml_ai_fastapi/tier-3-comprehensive/pyproject.toml.tier3.template +150 -0
  237. solokit/templates/ml_ai_fastapi/tier-3-comprehensive/tests/integration/__init__.py +3 -0
  238. solokit/templates/ml_ai_fastapi/tier-3-comprehensive/tests/integration/conftest.py +74 -0
  239. solokit/templates/ml_ai_fastapi/tier-3-comprehensive/tests/integration/test_api.py +131 -0
  240. solokit/templates/ml_ai_fastapi/tier-4-production/pyproject.toml.tier4.template +162 -0
  241. solokit/templates/ml_ai_fastapi/tier-4-production/requirements-prod.txt +25 -0
  242. solokit/templates/ml_ai_fastapi/tier-4-production/src/api/routes/metrics.py +19 -0
  243. solokit/templates/ml_ai_fastapi/tier-4-production/src/core/logging.py +74 -0
  244. solokit/templates/ml_ai_fastapi/tier-4-production/src/core/monitoring.py +68 -0
  245. solokit/templates/ml_ai_fastapi/tier-4-production/src/core/sentry.py +66 -0
  246. solokit/templates/ml_ai_fastapi/tier-4-production/src/middleware/__init__.py +3 -0
  247. solokit/templates/ml_ai_fastapi/tier-4-production/src/middleware/logging.py +79 -0
  248. solokit/templates/ml_ai_fastapi/tier-4-production/src/middleware/tracing.py +60 -0
  249. solokit/templates/refactor_spec.md +287 -0
  250. solokit/templates/saas_t3/base/.gitignore +36 -0
  251. solokit/templates/saas_t3/base/app/api/trpc/[trpc]/route.ts +33 -0
  252. solokit/templates/saas_t3/base/app/globals.css +27 -0
  253. solokit/templates/saas_t3/base/app/layout.tsx +23 -0
  254. solokit/templates/saas_t3/base/app/page.tsx +31 -0
  255. solokit/templates/saas_t3/base/lib/api.tsx +77 -0
  256. solokit/templates/saas_t3/base/lib/utils.ts +13 -0
  257. solokit/templates/saas_t3/base/next.config.ts +7 -0
  258. solokit/templates/saas_t3/base/package.json.template +38 -0
  259. solokit/templates/saas_t3/base/postcss.config.mjs +8 -0
  260. solokit/templates/saas_t3/base/prisma/schema.prisma +20 -0
  261. solokit/templates/saas_t3/base/server/api/root.ts +19 -0
  262. solokit/templates/saas_t3/base/server/api/routers/example.ts +28 -0
  263. solokit/templates/saas_t3/base/server/api/trpc.ts +52 -0
  264. solokit/templates/saas_t3/base/server/db.ts +17 -0
  265. solokit/templates/saas_t3/base/tailwind.config.ts +19 -0
  266. solokit/templates/saas_t3/base/tsconfig.json +27 -0
  267. solokit/templates/saas_t3/docker/Dockerfile +60 -0
  268. solokit/templates/saas_t3/docker/docker-compose.prod.yml +59 -0
  269. solokit/templates/saas_t3/docker/docker-compose.yml +49 -0
  270. solokit/templates/saas_t3/tier-1-essential/.eslintrc.json +7 -0
  271. solokit/templates/saas_t3/tier-1-essential/jest.config.ts +17 -0
  272. solokit/templates/saas_t3/tier-1-essential/jest.setup.ts +1 -0
  273. solokit/templates/saas_t3/tier-1-essential/package.json.tier1.template +54 -0
  274. solokit/templates/saas_t3/tier-1-essential/tests/setup.ts +22 -0
  275. solokit/templates/saas_t3/tier-1-essential/tests/unit/example.test.tsx +24 -0
  276. solokit/templates/saas_t3/tier-2-standard/package.json.tier2.template +58 -0
  277. solokit/templates/saas_t3/tier-3-comprehensive/eslint.config.mjs +39 -0
  278. solokit/templates/saas_t3/tier-3-comprehensive/package.json.tier3.template +74 -0
  279. solokit/templates/saas_t3/tier-3-comprehensive/playwright.config.ts +66 -0
  280. solokit/templates/saas_t3/tier-3-comprehensive/stryker.conf.json +34 -0
  281. solokit/templates/saas_t3/tier-3-comprehensive/tests/e2e/home.spec.ts +41 -0
  282. solokit/templates/saas_t3/tier-3-comprehensive/tests/integration/api.test.ts +44 -0
  283. solokit/templates/saas_t3/tier-3-comprehensive/type-coverage.json +12 -0
  284. solokit/templates/saas_t3/tier-4-production/instrumentation.ts +9 -0
  285. solokit/templates/saas_t3/tier-4-production/k6/load-test.js +51 -0
  286. solokit/templates/saas_t3/tier-4-production/next.config.ts +46 -0
  287. solokit/templates/saas_t3/tier-4-production/package.json.tier4.template +83 -0
  288. solokit/templates/saas_t3/tier-4-production/sentry.client.config.ts +26 -0
  289. solokit/templates/saas_t3/tier-4-production/sentry.edge.config.ts +11 -0
  290. solokit/templates/saas_t3/tier-4-production/sentry.server.config.ts +11 -0
  291. solokit/templates/saas_t3/tier-4-production/vercel.json +37 -0
  292. solokit/templates/security_spec.md +287 -0
  293. solokit/templates/stack-versions.yaml +617 -0
  294. solokit/templates/status_update.json +6 -0
  295. solokit/templates/template-registry.json +257 -0
  296. solokit/templates/work_items.json +11 -0
  297. solokit/testing/__init__.py +1 -0
  298. solokit/testing/integration_runner.py +550 -0
  299. solokit/testing/performance.py +637 -0
  300. solokit/visualization/__init__.py +1 -0
  301. solokit/visualization/dependency_graph.py +788 -0
  302. solokit/work_items/__init__.py +1 -0
  303. solokit/work_items/creator.py +217 -0
  304. solokit/work_items/delete.py +264 -0
  305. solokit/work_items/get_dependencies.py +185 -0
  306. solokit/work_items/get_dependents.py +113 -0
  307. solokit/work_items/get_metadata.py +121 -0
  308. solokit/work_items/get_next_recommendations.py +133 -0
  309. solokit/work_items/manager.py +235 -0
  310. solokit/work_items/milestones.py +137 -0
  311. solokit/work_items/query.py +376 -0
  312. solokit/work_items/repository.py +267 -0
  313. solokit/work_items/scheduler.py +184 -0
  314. solokit/work_items/spec_parser.py +838 -0
  315. solokit/work_items/spec_validator.py +493 -0
  316. solokit/work_items/updater.py +157 -0
  317. solokit/work_items/validator.py +205 -0
  318. solokit-0.1.1.dist-info/METADATA +640 -0
  319. solokit-0.1.1.dist-info/RECORD +323 -0
  320. solokit-0.1.1.dist-info/WHEEL +5 -0
  321. solokit-0.1.1.dist-info/entry_points.txt +2 -0
  322. solokit-0.1.1.dist-info/licenses/LICENSE +21 -0
  323. solokit-0.1.1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "{project_name}",
3
+ "version": "0.1.0",
4
+ "description": "{project_description}",
5
+ "private": true,
6
+ "type": "module",
7
+ "scripts": {
8
+ "dev": "next dev",
9
+ "build": "next build",
10
+ "start": "next start",
11
+ "lint": "next lint",
12
+ "type-check": "tsc --noEmit"
13
+ },
14
+ "dependencies": {
15
+ "next": "16.0.1",
16
+ "react": "19.2.0",
17
+ "react-dom": "19.2.0",
18
+ "@trpc/server": "11.7.1",
19
+ "@trpc/client": "11.7.1",
20
+ "@trpc/react-query": "11.7.1",
21
+ "@trpc/next": "11.7.1",
22
+ "@tanstack/react-query": "5.90.7",
23
+ "prisma": "6.19.0",
24
+ "@prisma/client": "6.19.0",
25
+ "zod": "4.1.12",
26
+ "tailwindcss": "4.1.17",
27
+ "@tailwindcss/postcss": "4.1.17",
28
+ "superjson": "2.2.2",
29
+ "clsx": "2.1.1",
30
+ "tailwind-merge": "3.3.1"
31
+ },
32
+ "devDependencies": {
33
+ "typescript": "5.9.3",
34
+ "@types/node": "20.19.24",
35
+ "@types/react": "19.2.2",
36
+ "@types/react-dom": "19.2.2"
37
+ }
38
+ }
@@ -0,0 +1,8 @@
1
+ /** @type {import('postcss-load-config').Config} */
2
+ const config = {
3
+ plugins: {
4
+ '@tailwindcss/postcss': {},
5
+ },
6
+ };
7
+
8
+ export default config;
@@ -0,0 +1,20 @@
1
+ // This is your Prisma schema file,
2
+ // learn more about it in the docs: https://pris.ly/d/prisma-schema
3
+
4
+ generator client {
5
+ provider = "prisma-client-js"
6
+ }
7
+
8
+ datasource db {
9
+ provider = "postgresql"
10
+ url = env("DATABASE_URL")
11
+ }
12
+
13
+ model Post {
14
+ id Int @id @default(autoincrement())
15
+ name String
16
+ createdAt DateTime @default(now())
17
+ updatedAt DateTime @updatedAt
18
+
19
+ @@index([name])
20
+ }
@@ -0,0 +1,19 @@
1
+ import { createCallerFactory, createTRPCRouter } from "@/server/api/trpc";
2
+ import { exampleRouter } from "@/server/api/routers/example";
3
+
4
+ /**
5
+ * This is the primary router for your server.
6
+ *
7
+ * All routers added in /api/routers should be manually added here.
8
+ */
9
+ export const appRouter = createTRPCRouter({
10
+ example: exampleRouter,
11
+ });
12
+
13
+ // export type definition of API
14
+ export type AppRouter = typeof appRouter;
15
+
16
+ /**
17
+ * Create a server-side caller for the tRPC API.
18
+ */
19
+ export const createCaller = createCallerFactory(appRouter);
@@ -0,0 +1,28 @@
1
+ import { z } from "zod";
2
+ import { createTRPCRouter, publicProcedure } from "@/server/api/trpc";
3
+
4
+ export const exampleRouter = createTRPCRouter({
5
+ hello: publicProcedure
6
+ .input(z.object({ text: z.string() }))
7
+ .query(({ input }) => {
8
+ return {
9
+ greeting: `Hello ${input.text}`,
10
+ };
11
+ }),
12
+
13
+ create: publicProcedure
14
+ .input(z.object({ name: z.string().min(1) }))
15
+ .mutation(async ({ ctx, input }) => {
16
+ // This is a placeholder - you'll need to implement your database logic
17
+ return {
18
+ id: "1",
19
+ name: input.name,
20
+ createdAt: new Date(),
21
+ };
22
+ }),
23
+
24
+ getAll: publicProcedure.query(async ({ ctx }) => {
25
+ // This is a placeholder - you'll need to implement your database logic
26
+ return [];
27
+ }),
28
+ });
@@ -0,0 +1,52 @@
1
+ /**
2
+ * This is the server-side tRPC API setup
3
+ *
4
+ * 1. CONTEXT
5
+ * This section defines the "contexts" that are available in the backend API.
6
+ * These allow you to access things when processing a request, like the database or session.
7
+ */
8
+ import { initTRPC } from "@trpc/server";
9
+ import superjson from "superjson";
10
+ import { ZodError } from "zod";
11
+ import { db } from "@/server/db";
12
+
13
+ export const createTRPCContext = async (opts: { headers: Headers }) => {
14
+ return {
15
+ db,
16
+ ...opts,
17
+ };
18
+ };
19
+
20
+ /**
21
+ * 2. INITIALIZATION
22
+ * This is where the tRPC API is initialized, connecting the context and transformer.
23
+ */
24
+ const t = initTRPC.context<typeof createTRPCContext>().create({
25
+ transformer: superjson,
26
+ errorFormatter({ shape, error }) {
27
+ return {
28
+ ...shape,
29
+ data: {
30
+ ...shape.data,
31
+ zodError:
32
+ error.cause instanceof ZodError ? error.cause.flatten() : null,
33
+ },
34
+ };
35
+ },
36
+ });
37
+
38
+ /**
39
+ * Create a server-side caller
40
+ */
41
+ export const createCallerFactory = t.createCallerFactory;
42
+
43
+ /**
44
+ * 3. ROUTER & PROCEDURE
45
+ * These are the pieces you use to build your tRPC API. You should import these a lot.
46
+ */
47
+ export const createTRPCRouter = t.router;
48
+
49
+ /**
50
+ * Public (unauthenticated) procedure
51
+ */
52
+ export const publicProcedure = t.procedure;
@@ -0,0 +1,17 @@
1
+ import { PrismaClient } from "@prisma/client";
2
+
3
+ const createPrismaClient = () =>
4
+ new PrismaClient({
5
+ log:
6
+ process.env.NODE_ENV === "development"
7
+ ? ["query", "error", "warn"]
8
+ : ["error"],
9
+ });
10
+
11
+ const globalForPrisma = globalThis as unknown as {
12
+ prisma: ReturnType<typeof createPrismaClient> | undefined;
13
+ };
14
+
15
+ export const db = globalForPrisma.prisma ?? createPrismaClient();
16
+
17
+ if (process.env.NODE_ENV !== "production") globalForPrisma.prisma = db;
@@ -0,0 +1,19 @@
1
+ import type { Config } from "tailwindcss";
2
+
3
+ const config: Config = {
4
+ content: [
5
+ "./app/**/*.{js,ts,jsx,tsx,mdx}",
6
+ "./components/**/*.{js,ts,jsx,tsx,mdx}",
7
+ ],
8
+ theme: {
9
+ extend: {
10
+ colors: {
11
+ background: "var(--background)",
12
+ foreground: "var(--foreground)",
13
+ },
14
+ },
15
+ },
16
+ plugins: [],
17
+ };
18
+
19
+ export default config;
@@ -0,0 +1,27 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2017",
4
+ "lib": ["dom", "dom.iterable", "esnext"],
5
+ "allowJs": true,
6
+ "skipLibCheck": true,
7
+ "strict": true,
8
+ "noEmit": true,
9
+ "esModuleInterop": true,
10
+ "module": "esnext",
11
+ "moduleResolution": "bundler",
12
+ "resolveJsonModule": true,
13
+ "isolatedModules": true,
14
+ "jsx": "preserve",
15
+ "incremental": true,
16
+ "plugins": [
17
+ {
18
+ "name": "next"
19
+ }
20
+ ],
21
+ "paths": {
22
+ "@/*": ["./*"]
23
+ }
24
+ },
25
+ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
26
+ "exclude": ["node_modules"]
27
+ }
@@ -0,0 +1,60 @@
1
+ # syntax=docker/dockerfile:1
2
+
3
+ # Base image
4
+ FROM node:20-alpine AS base
5
+
6
+ # Install dependencies only when needed
7
+ FROM base AS deps
8
+ RUN apk add --no-cache libc6-compat
9
+ WORKDIR /app
10
+
11
+ # Install dependencies based on the preferred package manager
12
+ COPY package.json package-lock.json* ./
13
+ RUN npm ci
14
+
15
+ # Rebuild the source code only when needed
16
+ FROM base AS builder
17
+ WORKDIR /app
18
+ COPY --from=deps /app/node_modules ./node_modules
19
+ COPY . .
20
+
21
+ # Generate Prisma Client
22
+ RUN npx prisma generate
23
+
24
+ # Next.js collects completely anonymous telemetry data about general usage.
25
+ # Learn more here: https://nextjs.org/telemetry
26
+ # Uncomment the following line in case you want to disable telemetry during the build.
27
+ # ENV NEXT_TELEMETRY_DISABLED 1
28
+
29
+ RUN npm run build
30
+
31
+ # Production image, copy all the files and run next
32
+ FROM base AS runner
33
+ WORKDIR /app
34
+
35
+ ENV NODE_ENV production
36
+ # Uncomment the following line in case you want to disable telemetry during runtime.
37
+ # ENV NEXT_TELEMETRY_DISABLED 1
38
+
39
+ RUN addgroup --system --gid 1001 nodejs
40
+ RUN adduser --system --uid 1001 nextjs
41
+
42
+ # Copy necessary files
43
+ COPY --from=builder /app/public ./public
44
+ COPY --from=builder /app/package.json ./package.json
45
+
46
+ # Automatically leverage output traces to reduce image size
47
+ # https://nextjs.org/docs/advanced-features/output-file-tracing
48
+ COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
49
+ COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
50
+
51
+ USER nextjs
52
+
53
+ EXPOSE 3000
54
+
55
+ ENV PORT 3000
56
+ ENV HOSTNAME "0.0.0.0"
57
+
58
+ # server.js is created by next build from the standalone output
59
+ # https://nextjs.org/docs/pages/api-reference/next-config-js/output
60
+ CMD ["node", "server.js"]
@@ -0,0 +1,59 @@
1
+ version: '3.8'
2
+
3
+ services:
4
+ # PostgreSQL database for production
5
+ db:
6
+ image: postgres:16-alpine
7
+ container_name: saas-t3-db-prod
8
+ restart: always
9
+ environment:
10
+ POSTGRES_USER: ${POSTGRES_USER:-postgres}
11
+ POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
12
+ POSTGRES_DB: ${POSTGRES_DB:-mydb}
13
+ ports:
14
+ - '5432:5432'
15
+ volumes:
16
+ - postgres_data_prod:/var/lib/postgresql/data
17
+ healthcheck:
18
+ test: ['CMD-SHELL', 'pg_isready -U postgres']
19
+ interval: 10s
20
+ timeout: 5s
21
+ retries: 5
22
+ networks:
23
+ - app_network
24
+
25
+ # Next.js application (production)
26
+ app:
27
+ build:
28
+ context: ..
29
+ dockerfile: docker/Dockerfile
30
+ target: runner
31
+ container_name: saas-t3-app-prod
32
+ restart: always
33
+ depends_on:
34
+ db:
35
+ condition: service_healthy
36
+ environment:
37
+ - NODE_ENV=production
38
+ - DATABASE_URL=postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB:-mydb}?schema=public
39
+ - NEXTAUTH_SECRET=${NEXTAUTH_SECRET}
40
+ - NEXTAUTH_URL=${NEXTAUTH_URL}
41
+ - SENTRY_DSN=${SENTRY_DSN}
42
+ ports:
43
+ - '3000:3000'
44
+ networks:
45
+ - app_network
46
+ healthcheck:
47
+ test: ['CMD', 'wget', '--spider', '-q', 'http://localhost:3000/api/health']
48
+ interval: 30s
49
+ timeout: 10s
50
+ retries: 3
51
+ start_period: 40s
52
+
53
+ volumes:
54
+ postgres_data_prod:
55
+ driver: local
56
+
57
+ networks:
58
+ app_network:
59
+ driver: bridge
@@ -0,0 +1,49 @@
1
+ version: '3.8'
2
+
3
+ services:
4
+ # PostgreSQL database for development
5
+ db:
6
+ image: postgres:16-alpine
7
+ container_name: saas-t3-db
8
+ restart: unless-stopped
9
+ environment:
10
+ POSTGRES_USER: postgres
11
+ POSTGRES_PASSWORD: postgres
12
+ POSTGRES_DB: mydb
13
+ ports:
14
+ - '5432:5432'
15
+ volumes:
16
+ - postgres_data:/var/lib/postgresql/data
17
+ healthcheck:
18
+ test: ['CMD-SHELL', 'pg_isready -U postgres']
19
+ interval: 10s
20
+ timeout: 5s
21
+ retries: 5
22
+
23
+ # Next.js application (development)
24
+ app:
25
+ build:
26
+ context: ..
27
+ dockerfile: docker/Dockerfile
28
+ target: builder
29
+ container_name: saas-t3-app
30
+ restart: unless-stopped
31
+ depends_on:
32
+ db:
33
+ condition: service_healthy
34
+ environment:
35
+ - NODE_ENV=development
36
+ - DATABASE_URL=postgresql://postgres:postgres@db:5432/mydb?schema=public
37
+ - NEXTAUTH_SECRET=your-secret-here
38
+ - NEXTAUTH_URL=http://localhost:3000
39
+ ports:
40
+ - '3000:3000'
41
+ volumes:
42
+ - ..:/app
43
+ - /app/node_modules
44
+ - /app/.next
45
+ command: npm run dev
46
+
47
+ volumes:
48
+ postgres_data:
49
+ driver: local
@@ -0,0 +1,7 @@
1
+ {
2
+ "extends": ["next/core-web-vitals", "next/typescript"],
3
+ "rules": {
4
+ "@typescript-eslint/no-unused-vars": ["error", { "argsIgnorePattern": "^_" }],
5
+ "@typescript-eslint/no-explicit-any": "warn"
6
+ }
7
+ }
@@ -0,0 +1,17 @@
1
+ import type { Config } from 'jest'
2
+ import nextJest from 'next/jest.js'
3
+
4
+ const createJestConfig = nextJest({
5
+ // Provide the path to your Next.js app to load next.config.js and .env files in your test environment
6
+ dir: './',
7
+ })
8
+
9
+ // Add any custom config to be passed to Jest
10
+ const config: Config = {
11
+ coverageProvider: 'v8',
12
+ testEnvironment: 'jsdom',
13
+ setupFilesAfterEnv: ['<rootDir>/jest.setup.ts'],
14
+ }
15
+
16
+ // createJestConfig is exported this way to ensure that next/jest can load the Next.js config which is async
17
+ export default createJestConfig(config)
@@ -0,0 +1 @@
1
+ import '@testing-library/jest-dom'
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "{project_name}",
3
+ "version": "0.1.0",
4
+ "description": "{project_description}",
5
+ "private": true,
6
+ "type": "module",
7
+ "scripts": {
8
+ "dev": "next dev",
9
+ "build": "next build",
10
+ "start": "next start",
11
+ "lint": "next lint",
12
+ "type-check": "tsc --noEmit",
13
+ "test": "jest",
14
+ "test:watch": "jest --watch",
15
+ "test:coverage": "jest --coverage",
16
+ "format": "prettier --write \"**/*.{js,jsx,ts,tsx,json,md}\"",
17
+ "format:check": "prettier --check \"**/*.{js,jsx,ts,tsx,json,md}\""
18
+ },
19
+ "dependencies": {
20
+ "next": "16.0.1",
21
+ "react": "19.2.0",
22
+ "react-dom": "19.2.0",
23
+ "@trpc/server": "11.7.1",
24
+ "@trpc/client": "11.7.1",
25
+ "@trpc/react-query": "11.7.1",
26
+ "@trpc/next": "11.7.1",
27
+ "@tanstack/react-query": "5.90.7",
28
+ "prisma": "6.19.0",
29
+ "@prisma/client": "6.19.0",
30
+ "zod": "4.1.12",
31
+ "tailwindcss": "4.1.17",
32
+ "@tailwindcss/postcss": "4.1.17",
33
+ "superjson": "2.2.2",
34
+ "clsx": "2.1.1",
35
+ "tailwind-merge": "3.3.1"
36
+ },
37
+ "devDependencies": {
38
+ "typescript": "5.9.3",
39
+ "@types/node": "20.19.24",
40
+ "@types/react": "19.2.2",
41
+ "@types/react-dom": "19.2.2",
42
+ "eslint": "9.39.1",
43
+ "eslint-config-next": "16.0.1",
44
+ "@typescript-eslint/parser": "8.46.3",
45
+ "@typescript-eslint/eslint-plugin": "8.46.3",
46
+ "prettier": "3.6.2",
47
+ "jest": "30.2.0",
48
+ "@types/jest": "30.0.0",
49
+ "ts-jest": "29.4.5",
50
+ "jest-environment-jsdom": "30.2.0",
51
+ "@testing-library/react": "16.3.0",
52
+ "@testing-library/jest-dom": "6.9.1"
53
+ }
54
+ }
@@ -0,0 +1,22 @@
1
+ // Add custom jest matchers from jest-dom
2
+ import "@testing-library/jest-dom";
3
+
4
+ // Mock Next.js router
5
+ jest.mock("next/navigation", () => ({
6
+ useRouter() {
7
+ return {
8
+ push: jest.fn(),
9
+ replace: jest.fn(),
10
+ prefetch: jest.fn(),
11
+ };
12
+ },
13
+ useSearchParams() {
14
+ return new URLSearchParams();
15
+ },
16
+ usePathname() {
17
+ return "";
18
+ },
19
+ }));
20
+
21
+ // Mock environment variables
22
+ process.env.NEXT_PUBLIC_APP_URL = "http://localhost:3000";
@@ -0,0 +1,24 @@
1
+ import { render, screen } from "@testing-library/react";
2
+ import { describe, it, expect } from "@jest/globals";
3
+
4
+ // Example component for testing
5
+ function ExampleComponent({ text }: { text: string }) {
6
+ return <div data-testid="example">{text}</div>;
7
+ }
8
+
9
+ describe("ExampleComponent", () => {
10
+ it("should render the text prop", () => {
11
+ render(<ExampleComponent text="Hello World" />);
12
+ const element = screen.getByTestId("example");
13
+ expect(element).toBeInTheDocument();
14
+ expect(element).toHaveTextContent("Hello World");
15
+ });
16
+
17
+ it("should render different text when prop changes", () => {
18
+ const { rerender } = render(<ExampleComponent text="First" />);
19
+ expect(screen.getByTestId("example")).toHaveTextContent("First");
20
+
21
+ rerender(<ExampleComponent text="Second" />);
22
+ expect(screen.getByTestId("example")).toHaveTextContent("Second");
23
+ });
24
+ });
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "{project_name}",
3
+ "version": "0.1.0",
4
+ "description": "{project_description}",
5
+ "private": true,
6
+ "type": "module",
7
+ "scripts": {
8
+ "dev": "next dev",
9
+ "build": "next build",
10
+ "start": "next start",
11
+ "lint": "next lint",
12
+ "type-check": "tsc --noEmit",
13
+ "test": "jest",
14
+ "test:watch": "jest --watch",
15
+ "test:coverage": "jest --coverage",
16
+ "format": "prettier --write \"**/*.{js,jsx,ts,tsx,json,md}\"",
17
+ "format:check": "prettier --check \"**/*.{js,jsx,ts,tsx,json,md}\"",
18
+ "prepare": "husky install",
19
+ "audit": "npm audit --audit-level=moderate"
20
+ },
21
+ "dependencies": {
22
+ "next": "16.0.1",
23
+ "react": "19.2.0",
24
+ "react-dom": "19.2.0",
25
+ "@trpc/server": "11.7.1",
26
+ "@trpc/client": "11.7.1",
27
+ "@trpc/react-query": "11.7.1",
28
+ "@trpc/next": "11.7.1",
29
+ "@tanstack/react-query": "5.90.7",
30
+ "prisma": "6.19.0",
31
+ "@prisma/client": "6.19.0",
32
+ "zod": "4.1.12",
33
+ "tailwindcss": "4.1.17",
34
+ "@tailwindcss/postcss": "4.1.17",
35
+ "superjson": "2.2.2",
36
+ "clsx": "2.1.1",
37
+ "tailwind-merge": "3.3.1"
38
+ },
39
+ "devDependencies": {
40
+ "typescript": "5.9.3",
41
+ "@types/node": "20.19.24",
42
+ "@types/react": "19.2.2",
43
+ "@types/react-dom": "19.2.2",
44
+ "eslint": "9.39.1",
45
+ "eslint-config-next": "16.0.1",
46
+ "@typescript-eslint/parser": "8.46.3",
47
+ "@typescript-eslint/eslint-plugin": "8.46.3",
48
+ "prettier": "3.6.2",
49
+ "jest": "30.2.0",
50
+ "@types/jest": "30.0.0",
51
+ "ts-jest": "29.4.5",
52
+ "jest-environment-jsdom": "30.2.0",
53
+ "@testing-library/react": "16.3.0",
54
+ "@testing-library/jest-dom": "6.9.1",
55
+ "husky": "9.1.7",
56
+ "lint-staged": "16.2.6"
57
+ }
58
+ }
@@ -0,0 +1,39 @@
1
+ import { dirname } from "path";
2
+ import { fileURLToPath } from "url";
3
+ import { FlatCompat } from "@eslint/eslintrc";
4
+
5
+ const __filename = fileURLToPath(import.meta.url);
6
+ const __dirname = dirname(__filename);
7
+
8
+ const compat = new FlatCompat({
9
+ baseDirectory: __dirname,
10
+ });
11
+
12
+ const eslintConfig = [
13
+ ...compat.extends("next/core-web-vitals", "next/typescript"),
14
+ {
15
+ plugins: {
16
+ "jest-dom": (await import("eslint-plugin-jest-dom")).default,
17
+ "testing-library": (await import("eslint-plugin-testing-library")).default,
18
+ },
19
+ rules: {
20
+ "@typescript-eslint/no-unused-vars": [
21
+ "error",
22
+ { argsIgnorePattern: "^_" },
23
+ ],
24
+ "@typescript-eslint/no-explicit-any": "warn",
25
+ // jest-dom rules
26
+ "jest-dom/prefer-checked": "error",
27
+ "jest-dom/prefer-enabled-disabled": "error",
28
+ "jest-dom/prefer-required": "error",
29
+ "jest-dom/prefer-to-have-attribute": "error",
30
+ // testing-library rules
31
+ "testing-library/await-async-queries": "error",
32
+ "testing-library/no-await-sync-queries": "error",
33
+ "testing-library/no-debugging-utils": "warn",
34
+ "testing-library/prefer-screen-queries": "error",
35
+ },
36
+ },
37
+ ];
38
+
39
+ export default eslintConfig;