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,248 @@
1
+ # Feature: [Feature Name]
2
+
3
+ <!--
4
+ TEMPLATE INSTRUCTIONS:
5
+ - Replace [Feature Name] with the actual feature name
6
+ - Fill out all sections below with specific details
7
+ - Use concrete examples where possible
8
+ - Check off items in checklists as you complete them
9
+ - Remove these instructions before finalizing the spec
10
+ -->
11
+
12
+ ## Overview
13
+
14
+ <!-- Provide a 2-3 sentence description of what this feature does and why it's needed -->
15
+
16
+ Brief description of what this feature does and why it's needed.
17
+
18
+ **Example:**
19
+ > This feature adds real-time notifications to the dashboard, alerting users when important events occur. It uses WebSocket connections to push updates without requiring page refreshes, improving user experience and reducing server load from polling.
20
+
21
+ ## User Story
22
+
23
+ <!-- Describe who benefits and what they achieve with this feature -->
24
+
25
+ As a [type of user], I want [goal] so that [benefit].
26
+
27
+ **Example:**
28
+ > As a dashboard user, I want to receive real-time notifications when my tasks are updated so that I can respond quickly without constantly refreshing the page.
29
+
30
+ ## Rationale
31
+
32
+ <!-- Explain the business value, problem being solved, or opportunity being addressed -->
33
+
34
+ Why is this feature important? What problem does it solve?
35
+
36
+ **Consider:**
37
+ - What pain point does this address?
38
+ - What business value does it provide?
39
+ - What happens if we don't build this?
40
+ - Are there user requests or metrics supporting this?
41
+
42
+ ## Acceptance Criteria
43
+
44
+ <!-- Specific, measurable criteria that must be met for this feature to be considered complete -->
45
+
46
+ - [ ] Users can see notifications in real-time without page refresh
47
+ - [ ] Notifications are displayed in a non-intrusive manner
48
+ - [ ] Users can dismiss individual notifications
49
+ - [ ] Users can view notification history for the past 30 days
50
+ - [ ] System sends notifications for all supported event types
51
+ - [ ] Notifications work across multiple browser tabs
52
+ - [ ] All tests pass including new notification tests
53
+ - [ ] Documentation is updated
54
+
55
+ ## Implementation Details
56
+
57
+ ### Approach
58
+
59
+ <!-- High-level technical approach and key design decisions -->
60
+
61
+ **Example:**
62
+ > We'll implement WebSocket connections using Socket.IO for bidirectional communication. The server will emit events when tasks are updated, and the client will listen for these events and update the UI. We'll use a notification queue on the backend to handle high-volume scenarios and ensure delivery.
63
+
64
+ ### LLM/Processing Configuration
65
+
66
+ <!-- For LLM-based features: Document DSPy signatures, LLM provider, and usage patterns
67
+ For deterministic features: Describe processing type and algorithms
68
+ For external API features: Document API integration details
69
+ If not applicable: State "Not Applicable" -->
70
+
71
+ **For LLM-based features:**
72
+
73
+ ```markdown
74
+ **Type:** LLM-based (DSPy)
75
+
76
+ **DSPy Signature:**
77
+ ```python
78
+ class ExampleSignature(dspy.Signature):
79
+ """Description of what this signature does."""
80
+
81
+ input_field = dspy.InputField(desc="Description of input")
82
+ output_field = dspy.OutputField(desc="Description of output")
83
+ ```
84
+
85
+ **LLM Provider:** Google AI Studio (Gemini 2.5 Flash)
86
+
87
+ **LLM Usage:**
88
+ - Analyzes input data to extract key information
89
+ - Generates structured output based on learned patterns
90
+ - Fallback to rule-based processing if LLM unavailable
91
+ ```
92
+
93
+ **For deterministic/non-LLM features:**
94
+
95
+ ```markdown
96
+ **Type:** Deterministic (No LLM)
97
+
98
+ **Processing Type:**
99
+ - Parse input data using regex patterns
100
+ - Transform data through validation pipeline
101
+ - Apply business logic rules to generate output
102
+ - Use algorithm X for data aggregation
103
+ ```
104
+
105
+ **For external API integration:**
106
+
107
+ ```markdown
108
+ **Type:** External API Integration (No LLM)
109
+
110
+ **API Provider:** [Provider name]
111
+
112
+ **Processing Type:**
113
+ - Make API calls to external service
114
+ - Transform API responses to internal format
115
+ - Handle rate limiting and retries
116
+ - Cache results for performance
117
+
118
+ **Rate Limits:** [Details if applicable]
119
+ ```
120
+
121
+ **If not applicable:**
122
+
123
+ ```markdown
124
+ Not Applicable - Standard application logic without LLM or special processing requirements.
125
+ ```
126
+
127
+ ### Components Affected
128
+
129
+ <!-- List all files, modules, or systems that will be modified -->
130
+
131
+ - Frontend: `src/components/NotificationCenter.tsx` (new)
132
+ - Frontend: `src/hooks/useWebSocket.ts` (new)
133
+ - Frontend: `src/services/notificationService.ts` (new)
134
+ - Backend: `src/websocket/notificationHandler.ts` (new)
135
+ - Backend: `src/models/Notification.ts` (new)
136
+ - Database: `notifications` table (new)
137
+
138
+ ### API Changes
139
+
140
+ <!-- Document all new or modified API endpoints, parameters, and responses -->
141
+
142
+ **New Endpoints:**
143
+
144
+ ```typescript
145
+ // WebSocket connection endpoint
146
+ ws://api.example.com/notifications
147
+
148
+ // Events emitted:
149
+ {
150
+ event: "task.updated",
151
+ data: {
152
+ taskId: string,
153
+ title: string,
154
+ changes: object,
155
+ timestamp: Date
156
+ }
157
+ }
158
+
159
+ // REST endpoint for notification history
160
+ GET /api/notifications?limit=50&offset=0
161
+ Response: {
162
+ notifications: Notification[],
163
+ total: number
164
+ }
165
+
166
+ // Mark notification as read
167
+ PATCH /api/notifications/:id/read
168
+ Response: {
169
+ success: boolean
170
+ }
171
+ ```
172
+
173
+ ### Database Changes
174
+
175
+ <!-- Document all schema changes, migrations, and data transformations -->
176
+
177
+ **New Table:**
178
+
179
+ ```sql
180
+ CREATE TABLE notifications (
181
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
182
+ user_id UUID NOT NULL REFERENCES users(id),
183
+ type VARCHAR(50) NOT NULL,
184
+ title VARCHAR(255) NOT NULL,
185
+ message TEXT,
186
+ data JSONB,
187
+ read BOOLEAN DEFAULT FALSE,
188
+ created_at TIMESTAMP DEFAULT NOW(),
189
+ INDEX idx_user_created (user_id, created_at DESC)
190
+ );
191
+ ```
192
+
193
+ **Migration:**
194
+ - File: `migrations/2025_10_add_notifications_table.sql`
195
+ - Rollback: Drop table and indexes
196
+
197
+ ## Testing Strategy
198
+
199
+ <!-- Comprehensive testing approach for this feature -->
200
+
201
+ ### Unit Tests
202
+ - NotificationCenter component rendering and interaction
203
+ - WebSocket connection lifecycle management
204
+ - Notification service message handling
205
+ - Database query functions
206
+
207
+ ### Integration Tests
208
+ - End-to-end WebSocket communication
209
+ - Notification creation and retrieval flow
210
+ - Multi-tab notification synchronization
211
+ - Notification history pagination
212
+
213
+ ### Manual Testing
214
+ - [ ] Test on Chrome, Firefox, Safari
215
+ - [ ] Test with slow network connection
216
+ - [ ] Test with WebSocket connection drops and reconnects
217
+ - [ ] Test notification display with various content lengths
218
+ - [ ] Test concurrent notifications (stress test)
219
+ - [ ] Test notification persistence across page reloads
220
+
221
+ ## Documentation Updates
222
+
223
+ - [ ] User documentation: How to manage notifications
224
+ - [ ] API documentation: WebSocket events and REST endpoints
225
+ - [ ] README updates: New WebSocket dependencies
226
+ - [ ] Architecture docs: Notification system design
227
+ - [ ] Deployment notes: WebSocket infrastructure requirements
228
+
229
+ ## Dependencies
230
+
231
+ <!-- List any other work items, external libraries, or infrastructure this depends on -->
232
+
233
+ - `feature_user_authentication` (must be completed first)
234
+ - `refactor_websocket_infrastructure` (must be completed first)
235
+ - New dependency: `socket.io-client` ^4.5.0
236
+ - Infrastructure: WebSocket support in production load balancer
237
+
238
+ ## Estimated Effort
239
+
240
+ [Number] sessions
241
+
242
+ <!--
243
+ Estimation guidelines:
244
+ - Simple feature (CRUD, UI update): 1-2 sessions
245
+ - Medium feature (new API, moderate complexity): 2-4 sessions
246
+ - Complex feature (multiple systems, data migration): 4-8 sessions
247
+ - Very complex feature (major architecture change): 8+ sessions
248
+ -->
@@ -0,0 +1,36 @@
1
+ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2
+
3
+ # dependencies
4
+ /node_modules
5
+ /.pnp
6
+ .pnp.js
7
+ .yarn/install-state.gz
8
+
9
+ # testing
10
+ /coverage
11
+
12
+ # next.js
13
+ /.next/
14
+ /out/
15
+
16
+ # production
17
+ /build
18
+
19
+ # misc
20
+ .DS_Store
21
+ *.pem
22
+
23
+ # debug
24
+ npm-debug.log*
25
+ yarn-debug.log*
26
+ yarn-error.log*
27
+
28
+ # local env files
29
+ .env*.local
30
+
31
+ # vercel
32
+ .vercel
33
+
34
+ # typescript
35
+ *.tsbuildinfo
36
+ next-env.d.ts
@@ -0,0 +1,65 @@
1
+ import { NextRequest, NextResponse } from "next/server";
2
+ import { prisma } from "@/lib/prisma";
3
+ import { createUserSchema } from "@/lib/validations";
4
+ import { z } from "zod";
5
+
6
+ /**
7
+ * GET /api/example
8
+ * Returns a simple greeting message
9
+ */
10
+ export async function GET() {
11
+ try {
12
+ // Example: Fetch users from database
13
+ const users = await prisma.user.findMany({
14
+ take: 10,
15
+ orderBy: { createdAt: "desc" },
16
+ });
17
+
18
+ return NextResponse.json({
19
+ message: "Hello from Next.js API!",
20
+ users,
21
+ });
22
+ } catch (error) {
23
+ console.error("Error fetching users:", error);
24
+ return NextResponse.json(
25
+ { error: "Failed to fetch users" },
26
+ { status: 500 }
27
+ );
28
+ }
29
+ }
30
+
31
+ /**
32
+ * POST /api/example
33
+ * Creates a new user
34
+ */
35
+ export async function POST(request: NextRequest) {
36
+ try {
37
+ const body = await request.json();
38
+
39
+ // Validate request body
40
+ const validatedData = createUserSchema.parse(body);
41
+
42
+ // Create user in database
43
+ const user = await prisma.user.create({
44
+ data: {
45
+ name: validatedData.name,
46
+ email: validatedData.email,
47
+ },
48
+ });
49
+
50
+ return NextResponse.json(user, { status: 201 });
51
+ } catch (error) {
52
+ if (error instanceof z.ZodError) {
53
+ return NextResponse.json(
54
+ { error: "Validation failed", details: error.issues },
55
+ { status: 400 }
56
+ );
57
+ }
58
+
59
+ console.error("Error creating user:", error);
60
+ return NextResponse.json(
61
+ { error: "Failed to create user" },
62
+ { status: 500 }
63
+ );
64
+ }
65
+ }
@@ -0,0 +1,27 @@
1
+ @tailwind base;
2
+ @tailwind components;
3
+ @tailwind utilities;
4
+
5
+ :root {
6
+ --background: #ffffff;
7
+ --foreground: #171717;
8
+ }
9
+
10
+ @media (prefers-color-scheme: dark) {
11
+ :root {
12
+ --background: #0a0a0a;
13
+ --foreground: #ededed;
14
+ }
15
+ }
16
+
17
+ body {
18
+ color: var(--foreground);
19
+ background: var(--background);
20
+ font-family: Arial, Helvetica, sans-serif;
21
+ }
22
+
23
+ @layer utilities {
24
+ .text-balance {
25
+ text-wrap: balance;
26
+ }
27
+ }
@@ -0,0 +1,20 @@
1
+ import type { Metadata } from "next";
2
+ import "./globals.css";
3
+
4
+ export const metadata: Metadata = {
5
+ title: "Full-Stack Next.js App",
6
+ description: "A simple full-stack Next.js application with Prisma and Zod",
7
+ icons: [{ rel: "icon", url: "/favicon.ico" }],
8
+ };
9
+
10
+ export default function RootLayout({
11
+ children,
12
+ }: Readonly<{
13
+ children: React.ReactNode;
14
+ }>) {
15
+ return (
16
+ <html lang="en">
17
+ <body>{children}</body>
18
+ </html>
19
+ );
20
+ }
@@ -0,0 +1,32 @@
1
+ import Link from "next/link";
2
+ import ExampleComponent from "@/components/example-component";
3
+
4
+ export default function Home() {
5
+ return (
6
+ <main className="flex min-h-screen flex-col items-center justify-center bg-gradient-to-b from-[#2e026d] to-[#15162c] text-white">
7
+ <div className="container flex flex-col items-center justify-center gap-12 px-4 py-16">
8
+ <h1 className="text-5xl font-extrabold tracking-tight sm:text-[5rem]">
9
+ Full-Stack <span className="text-[hsl(280,100%,70%)]">Next.js</span>
10
+ </h1>
11
+ <div className="grid grid-cols-1 gap-4 sm:grid-cols-2 md:gap-8">
12
+ <Link
13
+ href="/api/example"
14
+ className="flex max-w-xs flex-col gap-4 rounded-xl bg-white/10 p-4 hover:bg-white/20"
15
+ >
16
+ <h3 className="text-2xl font-bold">API Routes →</h3>
17
+ <div className="text-lg">
18
+ Check out the example API route at /api/example
19
+ </div>
20
+ </Link>
21
+ <div className="flex max-w-xs flex-col gap-4 rounded-xl bg-white/10 p-4">
22
+ <h3 className="text-2xl font-bold">Database →</h3>
23
+ <div className="text-lg">
24
+ Prisma ORM with PostgreSQL for type-safe database queries
25
+ </div>
26
+ </div>
27
+ </div>
28
+ <ExampleComponent />
29
+ </div>
30
+ </main>
31
+ );
32
+ }
@@ -0,0 +1,20 @@
1
+ "use client";
2
+
3
+ import { useState } from "react";
4
+
5
+ export default function ExampleComponent() {
6
+ const [count, setCount] = useState(0);
7
+
8
+ return (
9
+ <div className="flex flex-col items-center gap-4 rounded-xl bg-white/10 p-6">
10
+ <h3 className="text-2xl font-bold">Client Component Example</h3>
11
+ <p className="text-lg">Count: {count}</p>
12
+ <button
13
+ onClick={() => setCount(count + 1)}
14
+ className="rounded-lg bg-white/20 px-6 py-2 font-semibold transition hover:bg-white/30"
15
+ >
16
+ Increment
17
+ </button>
18
+ </div>
19
+ );
20
+ }
@@ -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 prisma = globalForPrisma.prisma ?? createPrismaClient();
16
+
17
+ if (process.env.NODE_ENV !== "production") globalForPrisma.prisma = prisma;
@@ -0,0 +1,13 @@
1
+ import { clsx, type ClassValue } from "clsx";
2
+ import { twMerge } from "tailwind-merge";
3
+
4
+ /**
5
+ * Utility function to merge Tailwind CSS classes
6
+ *
7
+ * @example
8
+ * cn("px-2 py-1", "bg-blue-500") // "px-2 py-1 bg-blue-500"
9
+ * cn("px-2", condition && "py-1") // "px-2 py-1" or "px-2"
10
+ */
11
+ export function cn(...inputs: ClassValue[]) {
12
+ return twMerge(clsx(inputs));
13
+ }
@@ -0,0 +1,20 @@
1
+ import { z } from "zod";
2
+
3
+ /**
4
+ * Validation schema for creating a new user
5
+ */
6
+ export const createUserSchema = z.object({
7
+ name: z.string().min(1, "Name is required").max(100),
8
+ email: z.string().email("Invalid email address"),
9
+ });
10
+
11
+ /**
12
+ * Validation schema for updating a user
13
+ */
14
+ export const updateUserSchema = z.object({
15
+ name: z.string().min(1).max(100).optional(),
16
+ email: z.string().email().optional(),
17
+ });
18
+
19
+ export type CreateUserInput = z.infer<typeof createUserSchema>;
20
+ export type UpdateUserInput = z.infer<typeof updateUserSchema>;
@@ -0,0 +1,7 @@
1
+ import type { NextConfig } from "next";
2
+
3
+ const nextConfig: NextConfig = {
4
+ /* config options here */
5
+ };
6
+
7
+ export default nextConfig;
@@ -0,0 +1,32 @@
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
+ "prisma": "6.19.0",
19
+ "@prisma/client": "6.19.0",
20
+ "zod": "4.1.12",
21
+ "tailwindcss": "4.1.17",
22
+ "@tailwindcss/postcss": "4.1.17",
23
+ "clsx": "2.1.1",
24
+ "tailwind-merge": "3.3.1"
25
+ },
26
+ "devDependencies": {
27
+ "typescript": "5.9.3",
28
+ "@types/node": "20.19.24",
29
+ "@types/react": "19.2.2",
30
+ "@types/react-dom": "19.2.2"
31
+ }
32
+ }
@@ -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,21 @@
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 User {
14
+ id Int @id @default(autoincrement())
15
+ name String
16
+ email String @unique
17
+ createdAt DateTime @default(now())
18
+ updatedAt DateTime @updatedAt
19
+
20
+ @@index([email])
21
+ }
@@ -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"]