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,16 @@
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema.json",
3
+ "style": "default",
4
+ "rsc": true,
5
+ "tsx": true,
6
+ "tailwind": {
7
+ "config": "tailwind.config.ts",
8
+ "css": "app/globals.css",
9
+ "baseColor": "slate",
10
+ "cssVariables": true
11
+ },
12
+ "aliases": {
13
+ "components": "@/components",
14
+ "utils": "@/lib/utils"
15
+ }
16
+ }
@@ -0,0 +1,65 @@
1
+ import routerProvider from "@refinedev/nextjs-router";
2
+
3
+ /**
4
+ * Refine configuration
5
+ * This file centralizes all Refine-related configuration
6
+ */
7
+
8
+ /**
9
+ * Data provider configuration
10
+ * TODO: Add a data provider when you have a backend API
11
+ * Example: import dataProvider from "@refinedev/simple-rest";
12
+ * Then: export const refineDataProvider = dataProvider(API_URL);
13
+ */
14
+ export const refineDataProvider = undefined;
15
+
16
+ /**
17
+ * Router provider configuration
18
+ * Integrates Refine with Next.js App Router
19
+ */
20
+ export const refineRouterProvider = routerProvider;
21
+
22
+ /**
23
+ * Resource definitions
24
+ * Define all resources that will be managed in the dashboard
25
+ */
26
+ export const refineResources = [
27
+ {
28
+ name: "users",
29
+ list: "/dashboard/users",
30
+ create: "/dashboard/users/create",
31
+ edit: "/dashboard/users/edit/:id",
32
+ show: "/dashboard/users/show/:id",
33
+ meta: {
34
+ canDelete: true,
35
+ },
36
+ },
37
+ {
38
+ name: "orders",
39
+ list: "/dashboard/orders",
40
+ create: "/dashboard/orders/create",
41
+ edit: "/dashboard/orders/edit/:id",
42
+ show: "/dashboard/orders/show/:id",
43
+ },
44
+ {
45
+ name: "products",
46
+ list: "/dashboard/products",
47
+ create: "/dashboard/products/create",
48
+ edit: "/dashboard/products/edit/:id",
49
+ show: "/dashboard/products/show/:id",
50
+ meta: {
51
+ canDelete: true,
52
+ },
53
+ },
54
+ ];
55
+
56
+ /**
57
+ * Refine options
58
+ * Global configuration for Refine behavior
59
+ */
60
+ export const refineOptions = {
61
+ syncWithLocation: true,
62
+ warnWhenUnsavedChanges: true,
63
+ useNewQueryKeys: true,
64
+ projectId: "refine-dashboard",
65
+ };
@@ -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,10 @@
1
+ import type { NextConfig } from "next";
2
+
3
+ const nextConfig: NextConfig = {
4
+ reactStrictMode: true,
5
+
6
+ // Enable experimental features if needed
7
+ // Add experimental features here
8
+ };
9
+
10
+ export default nextConfig;
@@ -0,0 +1,40 @@
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
+ "@refinedev/cli": "latest",
19
+ "@refinedev/core": "latest",
20
+ "@refinedev/nextjs-router": "latest",
21
+ "@refinedev/react-table": "latest",
22
+ "@refinedev/react-hook-form": "latest",
23
+ "recharts": "latest",
24
+ "react-hook-form": "7.66.0",
25
+ "zod": "4.1.12",
26
+ "@hookform/resolvers": "latest",
27
+ "lucide-react": "latest",
28
+ "class-variance-authority": "0.7.1",
29
+ "clsx": "2.1.1",
30
+ "tailwind-merge": "3.3.1",
31
+ "tailwindcss": "4.1.17",
32
+ "@tailwindcss/postcss": "4.1.17"
33
+ },
34
+ "devDependencies": {
35
+ "typescript": "5.9.3",
36
+ "@types/node": "20.19.24",
37
+ "@types/react": "19.2.2",
38
+ "@types/react-dom": "19.2.2"
39
+ }
40
+ }
@@ -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,26 @@
1
+ "use client";
2
+
3
+ import { Refine } from "@refinedev/core";
4
+ import {
5
+ refineDataProvider,
6
+ refineRouterProvider,
7
+ refineResources,
8
+ refineOptions,
9
+ } from "@/lib/refine";
10
+
11
+ /**
12
+ * Refine Provider Component
13
+ * Wraps the application with Refine context and configuration
14
+ */
15
+ export function RefineProvider({ children }: { children: React.ReactNode }) {
16
+ return (
17
+ <Refine
18
+ dataProvider={refineDataProvider}
19
+ routerProvider={refineRouterProvider}
20
+ resources={refineResources}
21
+ options={refineOptions}
22
+ >
23
+ {children}
24
+ </Refine>
25
+ );
26
+ }
@@ -0,0 +1,57 @@
1
+ import type { Config } from "tailwindcss";
2
+
3
+ const config: Config = {
4
+ darkMode: "class",
5
+ content: [
6
+ "./pages/**/*.{js,ts,jsx,tsx,mdx}",
7
+ "./components/**/*.{js,ts,jsx,tsx,mdx}",
8
+ "./app/**/*.{js,ts,jsx,tsx,mdx}",
9
+ ],
10
+ theme: {
11
+ extend: {
12
+ colors: {
13
+ border: "hsl(var(--border))",
14
+ input: "hsl(var(--input))",
15
+ ring: "hsl(var(--ring))",
16
+ background: "hsl(var(--background))",
17
+ foreground: "hsl(var(--foreground))",
18
+ primary: {
19
+ DEFAULT: "hsl(var(--primary))",
20
+ foreground: "hsl(var(--primary-foreground))",
21
+ },
22
+ secondary: {
23
+ DEFAULT: "hsl(var(--secondary))",
24
+ foreground: "hsl(var(--secondary-foreground))",
25
+ },
26
+ destructive: {
27
+ DEFAULT: "hsl(var(--destructive))",
28
+ foreground: "hsl(var(--destructive-foreground))",
29
+ },
30
+ muted: {
31
+ DEFAULT: "hsl(var(--muted))",
32
+ foreground: "hsl(var(--muted-foreground))",
33
+ },
34
+ accent: {
35
+ DEFAULT: "hsl(var(--accent))",
36
+ foreground: "hsl(var(--accent-foreground))",
37
+ },
38
+ popover: {
39
+ DEFAULT: "hsl(var(--popover))",
40
+ foreground: "hsl(var(--popover-foreground))",
41
+ },
42
+ card: {
43
+ DEFAULT: "hsl(var(--card))",
44
+ foreground: "hsl(var(--card-foreground))",
45
+ },
46
+ },
47
+ borderRadius: {
48
+ lg: "var(--radius)",
49
+ md: "calc(var(--radius) - 2px)",
50
+ sm: "calc(var(--radius) - 4px)",
51
+ },
52
+ },
53
+ },
54
+ plugins: [],
55
+ };
56
+
57
+ 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,57 @@
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
+ # Next.js collects completely anonymous telemetry data about general usage.
22
+ # Learn more here: https://nextjs.org/telemetry
23
+ # Uncomment the following line in case you want to disable telemetry during the build.
24
+ # ENV NEXT_TELEMETRY_DISABLED 1
25
+
26
+ RUN npm run build
27
+
28
+ # Production image, copy all the files and run next
29
+ FROM base AS runner
30
+ WORKDIR /app
31
+
32
+ ENV NODE_ENV production
33
+ # Uncomment the following line in case you want to disable telemetry during runtime.
34
+ # ENV NEXT_TELEMETRY_DISABLED 1
35
+
36
+ RUN addgroup --system --gid 1001 nodejs
37
+ RUN adduser --system --uid 1001 nextjs
38
+
39
+ # Copy necessary files
40
+ COPY --from=builder /app/public ./public
41
+ COPY --from=builder /app/package.json ./package.json
42
+
43
+ # Automatically leverage output traces to reduce image size
44
+ # https://nextjs.org/docs/advanced-features/output-file-tracing
45
+ COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
46
+ COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
47
+
48
+ USER nextjs
49
+
50
+ EXPOSE 3000
51
+
52
+ ENV PORT 3000
53
+ ENV HOSTNAME "0.0.0.0"
54
+
55
+ # server.js is created by next build from the standalone output
56
+ # https://nextjs.org/docs/pages/api-reference/next-config-js/output
57
+ CMD ["node", "server.js"]
@@ -0,0 +1,31 @@
1
+ version: '3.8'
2
+
3
+ services:
4
+ # Next.js application (production)
5
+ app:
6
+ build:
7
+ context: ..
8
+ dockerfile: docker/Dockerfile
9
+ target: runner
10
+ container_name: dashboard-refine-app-prod
11
+ restart: always
12
+ environment:
13
+ - NODE_ENV=production
14
+ - NEXT_PUBLIC_API_URL=${NEXT_PUBLIC_API_URL}
15
+ - SENTRY_DSN=${SENTRY_DSN}
16
+ - SENTRY_ORG=${SENTRY_ORG}
17
+ - SENTRY_PROJECT=${SENTRY_PROJECT}
18
+ ports:
19
+ - '3000:3000'
20
+ networks:
21
+ - app_network
22
+ healthcheck:
23
+ test: ['CMD', 'wget', '--spider', '-q', 'http://localhost:3000']
24
+ interval: 30s
25
+ timeout: 10s
26
+ retries: 3
27
+ start_period: 40s
28
+
29
+ networks:
30
+ app_network:
31
+ driver: bridge
@@ -0,0 +1,21 @@
1
+ version: '3.8'
2
+
3
+ services:
4
+ # Next.js application (development)
5
+ app:
6
+ build:
7
+ context: ..
8
+ dockerfile: docker/Dockerfile
9
+ target: builder
10
+ container_name: dashboard-refine-app
11
+ restart: unless-stopped
12
+ environment:
13
+ - NODE_ENV=development
14
+ - NEXT_PUBLIC_API_URL=${NEXT_PUBLIC_API_URL:-https://api.fake-rest.refine.dev}
15
+ ports:
16
+ - '3000:3000'
17
+ volumes:
18
+ - ..:/app
19
+ - /app/node_modules
20
+ - /app/.next
21
+ command: npm run dev
@@ -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,57 @@
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
+ "lint:fix": "next lint --fix",
13
+ "format": "prettier --write \"**/*.{ts,tsx,js,jsx,json,css,md}\"",
14
+ "format:check": "prettier --check \"**/*.{ts,tsx,js,jsx,json,css,md}\"",
15
+ "type-check": "tsc --noEmit",
16
+ "test": "jest",
17
+ "test:watch": "jest --watch",
18
+ "test:coverage": "jest --coverage"
19
+ },
20
+ "dependencies": {
21
+ "next": "16.0.1",
22
+ "react": "19.2.0",
23
+ "react-dom": "19.2.0",
24
+ "@refinedev/cli": "2.16.50",
25
+ "@refinedev/core": "5.0.5",
26
+ "@refinedev/nextjs-router": "7.0.4",
27
+ "@refinedev/react-table": "6.0.1",
28
+ "@refinedev/react-hook-form": "5.0.2",
29
+ "recharts": "3.3.0",
30
+ "react-hook-form": "7.66.0",
31
+ "zod": "4.1.12",
32
+ "@hookform/resolvers": "5.2.2",
33
+ "lucide-react": "0.553.0",
34
+ "class-variance-authority": "0.7.1",
35
+ "clsx": "2.1.1",
36
+ "tailwind-merge": "3.3.1",
37
+ "tailwindcss": "4.1.17",
38
+ "@tailwindcss/postcss": "4.1.17"
39
+ },
40
+ "devDependencies": {
41
+ "typescript": "5.9.3",
42
+ "@types/node": "20.19.24",
43
+ "@types/react": "19.2.2",
44
+ "@types/react-dom": "19.2.2",
45
+ "eslint": "9.39.1",
46
+ "eslint-config-next": "16.0.1",
47
+ "@typescript-eslint/parser": "8.46.3",
48
+ "@typescript-eslint/eslint-plugin": "8.46.3",
49
+ "prettier": "3.6.2",
50
+ "jest": "30.2.0",
51
+ "@types/jest": "30.0.0",
52
+ "ts-jest": "29.4.5",
53
+ "jest-environment-jsdom": "30.2.0",
54
+ "@testing-library/react": "16.3.0",
55
+ "@testing-library/jest-dom": "6.9.1"
56
+ }
57
+ }
@@ -0,0 +1,26 @@
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
+ back: jest.fn(),
12
+ pathname: "/",
13
+ query: {},
14
+ asPath: "/",
15
+ };
16
+ },
17
+ usePathname() {
18
+ return "/";
19
+ },
20
+ useSearchParams() {
21
+ return new URLSearchParams();
22
+ },
23
+ }));
24
+
25
+ // Mock environment variables
26
+ process.env.NEXT_PUBLIC_API_URL = "https://api.fake-rest.refine.dev";
@@ -0,0 +1,73 @@
1
+ import { render, screen } from "@testing-library/react";
2
+ import { Button } from "@/components/ui/button";
3
+ import { Card, CardHeader, CardTitle, CardContent } from "@/components/ui/card";
4
+
5
+ /**
6
+ * Example Component Tests using Jest
7
+ * These tests demonstrate the testing setup and best practices
8
+ */
9
+
10
+ describe("Button Component", () => {
11
+ it("renders children correctly", () => {
12
+ render(<Button>Click me</Button>);
13
+ expect(screen.getByText("Click me")).toBeInTheDocument();
14
+ });
15
+
16
+ it("applies variant classes", () => {
17
+ render(<Button variant="destructive">Delete</Button>);
18
+ const button = screen.getByText("Delete");
19
+ expect(button).toBeInTheDocument();
20
+ });
21
+
22
+ it("handles click events", () => {
23
+ let clicked = false;
24
+ render(<Button onClick={() => (clicked = true)}>Click</Button>);
25
+ const button = screen.getByText("Click");
26
+ button.click();
27
+ expect(clicked).toBe(true);
28
+ });
29
+
30
+ it("is accessible with proper aria attributes", () => {
31
+ render(<Button aria-label="Submit form">Submit</Button>);
32
+ expect(screen.getByLabelText("Submit form")).toBeInTheDocument();
33
+ });
34
+ });
35
+
36
+ describe("Card Component", () => {
37
+ it("renders with all parts", () => {
38
+ render(
39
+ <Card>
40
+ <CardHeader>
41
+ <CardTitle>Test Card</CardTitle>
42
+ </CardHeader>
43
+ <CardContent>
44
+ <p>Card content</p>
45
+ </CardContent>
46
+ </Card>
47
+ );
48
+
49
+ expect(screen.getByText("Test Card")).toBeInTheDocument();
50
+ expect(screen.getByText("Card content")).toBeInTheDocument();
51
+ });
52
+
53
+ it("applies custom className", () => {
54
+ const { container } = render(
55
+ <Card className="custom-class">
56
+ <CardContent>Content</CardContent>
57
+ </Card>
58
+ );
59
+
60
+ const card = container.querySelector(".custom-class");
61
+ expect(card).toBeInTheDocument();
62
+ });
63
+ });
64
+
65
+ describe("Utility Functions", () => {
66
+ it("cn() merges classes correctly", () => {
67
+ const { cn } = require("@/lib/utils");
68
+
69
+ expect(cn("px-2 py-1", "bg-blue-500")).toBe("px-2 py-1 bg-blue-500");
70
+ expect(cn("px-2", false && "py-1")).toBe("px-2");
71
+ expect(cn("px-2", true && "py-1")).toBe("px-2 py-1");
72
+ });
73
+ });
@@ -0,0 +1,62 @@
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
+ "lint:fix": "next lint --fix",
13
+ "format": "prettier --write \"**/*.{ts,tsx,js,jsx,json,css,md}\"",
14
+ "format:check": "prettier --check \"**/*.{ts,tsx,js,jsx,json,css,md}\"",
15
+ "type-check": "tsc --noEmit",
16
+ "test": "jest",
17
+
18
+ "test:coverage": "jest --coverage",
19
+ "test:watch": "jest --watch",
20
+ "prepare": "husky install",
21
+ "audit": "npm audit --audit-level=moderate"
22
+ },
23
+ "dependencies": {
24
+ "next": "16.0.1",
25
+ "react": "19.2.0",
26
+ "react-dom": "19.2.0",
27
+ "@refinedev/cli": "2.16.50",
28
+ "@refinedev/core": "5.0.5",
29
+ "@refinedev/nextjs-router": "7.0.4",
30
+ "@refinedev/react-table": "6.0.1",
31
+ "@refinedev/react-hook-form": "5.0.2",
32
+ "recharts": "3.3.0",
33
+ "react-hook-form": "7.66.0",
34
+ "zod": "4.1.12",
35
+ "@hookform/resolvers": "5.2.2",
36
+ "lucide-react": "0.553.0",
37
+ "class-variance-authority": "0.7.1",
38
+ "clsx": "2.1.1",
39
+ "tailwind-merge": "3.3.1",
40
+ "tailwindcss": "4.1.17",
41
+ "@tailwindcss/postcss": "4.1.17"
42
+ },
43
+ "devDependencies": {
44
+ "typescript": "5.9.3",
45
+ "@types/node": "20.19.24",
46
+ "@types/react": "19.2.2",
47
+ "@types/react-dom": "19.2.2",
48
+ "eslint": "9.39.1",
49
+ "eslint-config-next": "16.0.1",
50
+ "@typescript-eslint/parser": "8.46.3",
51
+ "@typescript-eslint/eslint-plugin": "8.46.3",
52
+ "prettier": "3.6.2",
53
+ "jest": "30.2.0",
54
+ "@types/jest": "30.0.0",
55
+ "ts-jest": "29.4.5",
56
+ "jest-environment-jsdom": "30.2.0",
57
+ "@testing-library/react": "16.3.0",
58
+ "@testing-library/jest-dom": "6.9.1",
59
+ "husky": "9.1.7",
60
+ "lint-staged": "16.2.6"
61
+ }
62
+ }
@@ -0,0 +1,22 @@
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
+ rules: {
16
+ "@typescript-eslint/no-unused-vars": ["error", { "argsIgnorePattern": "^_" }],
17
+ "@typescript-eslint/no-explicit-any": "warn",
18
+ },
19
+ },
20
+ ];
21
+
22
+ export default eslintConfig;