thachvd-kit 1.0.0

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 (226) hide show
  1. package/.shared/ui-ux-pro-max/data/charts.csv +26 -0
  2. package/.shared/ui-ux-pro-max/data/colors.csv +97 -0
  3. package/.shared/ui-ux-pro-max/data/icons.csv +101 -0
  4. package/.shared/ui-ux-pro-max/data/landing.csv +31 -0
  5. package/.shared/ui-ux-pro-max/data/products.csv +97 -0
  6. package/.shared/ui-ux-pro-max/data/prompts.csv +24 -0
  7. package/.shared/ui-ux-pro-max/data/react-performance.csv +45 -0
  8. package/.shared/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  9. package/.shared/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  10. package/.shared/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
  11. package/.shared/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  12. package/.shared/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  13. package/.shared/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  14. package/.shared/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  15. package/.shared/ui-ux-pro-max/data/stacks/react.csv +54 -0
  16. package/.shared/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  17. package/.shared/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  18. package/.shared/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  19. package/.shared/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  20. package/.shared/ui-ux-pro-max/data/styles.csv +59 -0
  21. package/.shared/ui-ux-pro-max/data/typography.csv +58 -0
  22. package/.shared/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  23. package/.shared/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  24. package/.shared/ui-ux-pro-max/data/web-interface.csv +31 -0
  25. package/.shared/ui-ux-pro-max/scripts/__pycache__/core.cpython-313.pyc +0 -0
  26. package/.shared/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-313.pyc +0 -0
  27. package/.shared/ui-ux-pro-max/scripts/core.py +258 -0
  28. package/.shared/ui-ux-pro-max/scripts/design_system.py +1067 -0
  29. package/.shared/ui-ux-pro-max/scripts/search.py +106 -0
  30. package/ARCHITECTURE.md +288 -0
  31. package/CLAUDE.md +90 -0
  32. package/PROJECT_CONTEXT.template.md +68 -0
  33. package/README.md +69 -0
  34. package/agents/backend-specialist.md +263 -0
  35. package/agents/code-archaeologist.md +106 -0
  36. package/agents/database-architect.md +226 -0
  37. package/agents/debugger.md +225 -0
  38. package/agents/devops-engineer.md +242 -0
  39. package/agents/documentation-writer.md +104 -0
  40. package/agents/explorer-agent.md +73 -0
  41. package/agents/frontend-specialist.md +593 -0
  42. package/agents/game-developer.md +162 -0
  43. package/agents/mobile-developer.md +377 -0
  44. package/agents/orchestrator.md +416 -0
  45. package/agents/penetration-tester.md +188 -0
  46. package/agents/performance-optimizer.md +187 -0
  47. package/agents/product-manager.md +112 -0
  48. package/agents/product-owner.md +95 -0
  49. package/agents/project-planner.md +406 -0
  50. package/agents/qa-automation-engineer.md +103 -0
  51. package/agents/security-auditor.md +170 -0
  52. package/agents/seo-specialist.md +111 -0
  53. package/agents/test-engineer.md +158 -0
  54. package/bin/cli.js +373 -0
  55. package/kit/PROJECT_CONTEXT.template.md +35 -0
  56. package/kit/PROMPT_RECIPE.md +52 -0
  57. package/kit/README.md +32 -0
  58. package/mcp_config.json +24 -0
  59. package/package.json +25 -0
  60. package/rules/GEMINI.md +204 -0
  61. package/scripts/auto_preview.py +148 -0
  62. package/scripts/checklist.py +217 -0
  63. package/scripts/init.py +403 -0
  64. package/scripts/session_manager.py +120 -0
  65. package/scripts/verify_all.py +327 -0
  66. package/skills/api-design/SKILL.md +156 -0
  67. package/skills/api-patterns/SKILL.md +81 -0
  68. package/skills/api-patterns/api-style.md +42 -0
  69. package/skills/api-patterns/auth.md +24 -0
  70. package/skills/api-patterns/documentation.md +26 -0
  71. package/skills/api-patterns/graphql.md +41 -0
  72. package/skills/api-patterns/rate-limiting.md +31 -0
  73. package/skills/api-patterns/response.md +37 -0
  74. package/skills/api-patterns/rest.md +40 -0
  75. package/skills/api-patterns/scripts/api_validator.py +211 -0
  76. package/skills/api-patterns/security-testing.md +122 -0
  77. package/skills/api-patterns/trpc.md +41 -0
  78. package/skills/api-patterns/versioning.md +22 -0
  79. package/skills/app-builder/SKILL.md +75 -0
  80. package/skills/app-builder/agent-coordination.md +71 -0
  81. package/skills/app-builder/feature-building.md +53 -0
  82. package/skills/app-builder/project-detection.md +34 -0
  83. package/skills/app-builder/scaffolding.md +118 -0
  84. package/skills/app-builder/tech-stack.md +40 -0
  85. package/skills/app-builder/templates/SKILL.md +39 -0
  86. package/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
  87. package/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
  88. package/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
  89. package/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
  90. package/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
  91. package/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
  92. package/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
  93. package/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +122 -0
  94. package/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +122 -0
  95. package/skills/app-builder/templates/nextjs-static/TEMPLATE.md +169 -0
  96. package/skills/app-builder/templates/nuxt-app/TEMPLATE.md +134 -0
  97. package/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
  98. package/skills/app-builder/templates/react-native-app/TEMPLATE.md +119 -0
  99. package/skills/architecture/SKILL.md +55 -0
  100. package/skills/architecture/context-discovery.md +43 -0
  101. package/skills/architecture/examples.md +94 -0
  102. package/skills/architecture/pattern-selection.md +68 -0
  103. package/skills/architecture/patterns-reference.md +50 -0
  104. package/skills/architecture/trade-off-analysis.md +77 -0
  105. package/skills/bash-linux/SKILL.md +199 -0
  106. package/skills/behavioral-modes/SKILL.md +242 -0
  107. package/skills/brainstorming/SKILL.md +163 -0
  108. package/skills/brainstorming/dynamic-questioning.md +350 -0
  109. package/skills/clean-code/SKILL.md +201 -0
  110. package/skills/code-review-checklist/SKILL.md +109 -0
  111. package/skills/database-design/SKILL.md +52 -0
  112. package/skills/database-design/database-selection.md +43 -0
  113. package/skills/database-design/indexing.md +39 -0
  114. package/skills/database-design/migrations.md +48 -0
  115. package/skills/database-design/optimization.md +36 -0
  116. package/skills/database-design/orm-selection.md +30 -0
  117. package/skills/database-design/schema-design.md +56 -0
  118. package/skills/database-design/scripts/schema_validator.py +172 -0
  119. package/skills/deployment-procedures/SKILL.md +241 -0
  120. package/skills/dispatching-parallel-agents/SKILL.md +112 -0
  121. package/skills/doc.md +177 -0
  122. package/skills/docker-patterns/SKILL.md +232 -0
  123. package/skills/documentation-templates/SKILL.md +194 -0
  124. package/skills/executing-plans/SKILL.md +61 -0
  125. package/skills/finishing-a-development-branch/SKILL.md +135 -0
  126. package/skills/frontend-design/SKILL.md +418 -0
  127. package/skills/frontend-design/animation-guide.md +331 -0
  128. package/skills/frontend-design/color-system.md +311 -0
  129. package/skills/frontend-design/decision-trees.md +418 -0
  130. package/skills/frontend-design/motion-graphics.md +306 -0
  131. package/skills/frontend-design/scripts/accessibility_checker.py +183 -0
  132. package/skills/frontend-design/scripts/ux_audit.py +722 -0
  133. package/skills/frontend-design/typography-system.md +345 -0
  134. package/skills/frontend-design/ux-psychology.md +1116 -0
  135. package/skills/frontend-design/visual-effects.md +383 -0
  136. package/skills/game-development/2d-games/SKILL.md +119 -0
  137. package/skills/game-development/3d-games/SKILL.md +135 -0
  138. package/skills/game-development/SKILL.md +167 -0
  139. package/skills/game-development/game-art/SKILL.md +185 -0
  140. package/skills/game-development/game-audio/SKILL.md +190 -0
  141. package/skills/game-development/game-design/SKILL.md +129 -0
  142. package/skills/game-development/mobile-games/SKILL.md +108 -0
  143. package/skills/game-development/multiplayer/SKILL.md +132 -0
  144. package/skills/game-development/pc-games/SKILL.md +144 -0
  145. package/skills/game-development/vr-ar/SKILL.md +123 -0
  146. package/skills/game-development/web-games/SKILL.md +150 -0
  147. package/skills/geo-fundamentals/SKILL.md +156 -0
  148. package/skills/geo-fundamentals/scripts/geo_checker.py +289 -0
  149. package/skills/golang-patterns/SKILL.md +226 -0
  150. package/skills/golang-testing/SKILL.md +182 -0
  151. package/skills/i18n-localization/SKILL.md +154 -0
  152. package/skills/i18n-localization/scripts/i18n_checker.py +241 -0
  153. package/skills/intelligent-routing/SKILL.md +335 -0
  154. package/skills/laravel-patterns/SKILL.md +224 -0
  155. package/skills/laravel-security/SKILL.md +171 -0
  156. package/skills/laravel-tdd/SKILL.md +149 -0
  157. package/skills/lint-and-validate/SKILL.md +45 -0
  158. package/skills/lint-and-validate/scripts/lint_runner.py +184 -0
  159. package/skills/lint-and-validate/scripts/type_coverage.py +173 -0
  160. package/skills/mcp-builder/SKILL.md +176 -0
  161. package/skills/mobile-design/SKILL.md +394 -0
  162. package/skills/mobile-design/decision-trees.md +516 -0
  163. package/skills/mobile-design/mobile-backend.md +491 -0
  164. package/skills/mobile-design/mobile-color-system.md +420 -0
  165. package/skills/mobile-design/mobile-debugging.md +122 -0
  166. package/skills/mobile-design/mobile-design-thinking.md +357 -0
  167. package/skills/mobile-design/mobile-navigation.md +458 -0
  168. package/skills/mobile-design/mobile-performance.md +767 -0
  169. package/skills/mobile-design/mobile-testing.md +356 -0
  170. package/skills/mobile-design/mobile-typography.md +433 -0
  171. package/skills/mobile-design/platform-android.md +666 -0
  172. package/skills/mobile-design/platform-ios.md +561 -0
  173. package/skills/mobile-design/scripts/mobile_audit.py +670 -0
  174. package/skills/mobile-design/touch-psychology.md +537 -0
  175. package/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +312 -0
  176. package/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +240 -0
  177. package/skills/nextjs-react-expert/3-server-server-side-performance.md +490 -0
  178. package/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +264 -0
  179. package/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +581 -0
  180. package/skills/nextjs-react-expert/6-rendering-rendering-performance.md +432 -0
  181. package/skills/nextjs-react-expert/7-js-javascript-performance.md +684 -0
  182. package/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +150 -0
  183. package/skills/nextjs-react-expert/SKILL.md +286 -0
  184. package/skills/nextjs-react-expert/scripts/convert_rules.py +222 -0
  185. package/skills/nextjs-react-expert/scripts/react_performance_checker.py +252 -0
  186. package/skills/nodejs-best-practices/SKILL.md +333 -0
  187. package/skills/parallel-agents/SKILL.md +175 -0
  188. package/skills/performance-profiling/SKILL.md +143 -0
  189. package/skills/performance-profiling/scripts/lighthouse_audit.py +76 -0
  190. package/skills/plan-writing/SKILL.md +152 -0
  191. package/skills/powershell-windows/SKILL.md +167 -0
  192. package/skills/project-onboarding/SKILL.md +62 -0
  193. package/skills/python-patterns/SKILL.md +441 -0
  194. package/skills/receiving-code-review/SKILL.md +120 -0
  195. package/skills/red-team-tactics/SKILL.md +199 -0
  196. package/skills/requesting-code-review/SKILL.md +67 -0
  197. package/skills/rust-pro/SKILL.md +176 -0
  198. package/skills/seo-fundamentals/SKILL.md +129 -0
  199. package/skills/seo-fundamentals/scripts/seo_checker.py +219 -0
  200. package/skills/server-management/SKILL.md +161 -0
  201. package/skills/subagent-driven-development/SKILL.md +76 -0
  202. package/skills/systematic-debugging/SKILL.md +109 -0
  203. package/skills/tailwind-patterns/SKILL.md +269 -0
  204. package/skills/tdd-workflow/SKILL.md +149 -0
  205. package/skills/testing-patterns/SKILL.md +178 -0
  206. package/skills/testing-patterns/scripts/test_runner.py +219 -0
  207. package/skills/using-git-worktrees/SKILL.md +122 -0
  208. package/skills/verification-before-completion/SKILL.md +99 -0
  209. package/skills/vulnerability-scanner/SKILL.md +276 -0
  210. package/skills/vulnerability-scanner/checklists.md +121 -0
  211. package/skills/vulnerability-scanner/scripts/security_scan.py +458 -0
  212. package/skills/web-design-guidelines/SKILL.md +57 -0
  213. package/skills/webapp-testing/SKILL.md +187 -0
  214. package/skills/webapp-testing/scripts/playwright_runner.py +173 -0
  215. package/skills/writing-skills/SKILL.md +110 -0
  216. package/workflows/brainstorm.md +113 -0
  217. package/workflows/create.md +59 -0
  218. package/workflows/debug.md +103 -0
  219. package/workflows/deploy.md +176 -0
  220. package/workflows/enhance.md +63 -0
  221. package/workflows/orchestrate.md +237 -0
  222. package/workflows/plan.md +89 -0
  223. package/workflows/preview.md +81 -0
  224. package/workflows/status.md +86 -0
  225. package/workflows/test.md +144 -0
  226. package/workflows/ui-ux-pro-max.md +296 -0
@@ -0,0 +1,217 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Master Checklist Runner - Antigravity Kit
4
+ ==========================================
5
+
6
+ Orchestrates all validation scripts in priority order.
7
+ Use this for incremental validation during development.
8
+
9
+ Usage:
10
+ python scripts/checklist.py . # Run core checks
11
+ python scripts/checklist.py . --url <URL> # Include performance checks
12
+
13
+ Priority Order:
14
+ P0: Security Scan (vulnerabilities, secrets)
15
+ P1: Lint & Type Check (code quality)
16
+ P2: Schema Validation (if database exists)
17
+ P3: Test Runner (unit/integration tests)
18
+ P4: UX Audit (psychology laws, accessibility)
19
+ P5: SEO Check (meta tags, structure)
20
+ P6: Performance (lighthouse - requires URL)
21
+ """
22
+
23
+ import sys
24
+ import subprocess
25
+ import argparse
26
+ from pathlib import Path
27
+ from typing import List, Tuple, Optional
28
+
29
+ # ANSI colors for terminal output
30
+ class Colors:
31
+ HEADER = '\033[95m'
32
+ BLUE = '\033[94m'
33
+ CYAN = '\033[96m'
34
+ GREEN = '\033[92m'
35
+ YELLOW = '\033[93m'
36
+ RED = '\033[91m'
37
+ ENDC = '\033[0m'
38
+ BOLD = '\033[1m'
39
+
40
+ def print_header(text: str):
41
+ print(f"\n{Colors.BOLD}{Colors.CYAN}{'='*60}{Colors.ENDC}")
42
+ print(f"{Colors.BOLD}{Colors.CYAN}{text.center(60)}{Colors.ENDC}")
43
+ print(f"{Colors.BOLD}{Colors.CYAN}{'='*60}{Colors.ENDC}\n")
44
+
45
+ def print_step(text: str):
46
+ print(f"{Colors.BOLD}{Colors.BLUE}🔄 {text}{Colors.ENDC}")
47
+
48
+ def print_success(text: str):
49
+ print(f"{Colors.GREEN}✅ {text}{Colors.ENDC}")
50
+
51
+ def print_warning(text: str):
52
+ print(f"{Colors.YELLOW}⚠️ {text}{Colors.ENDC}")
53
+
54
+ def print_error(text: str):
55
+ print(f"{Colors.RED}❌ {text}{Colors.ENDC}")
56
+
57
+ # Define priority-ordered checks
58
+ CORE_CHECKS = [
59
+ ("Security Scan", ".agent/skills/vulnerability-scanner/scripts/security_scan.py", True),
60
+ ("Lint Check", ".agent/skills/lint-and-validate/scripts/lint_runner.py", True),
61
+ ("Schema Validation", ".agent/skills/database-design/scripts/schema_validator.py", False),
62
+ ("Test Runner", ".agent/skills/testing-patterns/scripts/test_runner.py", False),
63
+ ("UX Audit", ".agent/skills/frontend-design/scripts/ux_audit.py", False),
64
+ ("SEO Check", ".agent/skills/seo-fundamentals/scripts/seo_checker.py", False),
65
+ ]
66
+
67
+ PERFORMANCE_CHECKS = [
68
+ ("Lighthouse Audit", ".agent/skills/performance-profiling/scripts/lighthouse_audit.py", True),
69
+ ("Playwright E2E", ".agent/skills/webapp-testing/scripts/playwright_runner.py", False),
70
+ ]
71
+
72
+ def check_script_exists(script_path: Path) -> bool:
73
+ """Check if script file exists"""
74
+ return script_path.exists() and script_path.is_file()
75
+
76
+ def run_script(name: str, script_path: Path, project_path: str, url: Optional[str] = None) -> dict:
77
+ """
78
+ Run a validation script and capture results
79
+
80
+ Returns:
81
+ dict with keys: name, passed, output, skipped
82
+ """
83
+ if not check_script_exists(script_path):
84
+ print_warning(f"{name}: Script not found, skipping")
85
+ return {"name": name, "passed": True, "output": "", "skipped": True}
86
+
87
+ print_step(f"Running: {name}")
88
+
89
+ # Build command
90
+ cmd = ["python", str(script_path), project_path]
91
+ if url and ("lighthouse" in script_path.name.lower() or "playwright" in script_path.name.lower()):
92
+ cmd.append(url)
93
+
94
+ # Run script
95
+ try:
96
+ result = subprocess.run(
97
+ cmd,
98
+ capture_output=True,
99
+ text=True,
100
+ timeout=300 # 5 minute timeout
101
+ )
102
+
103
+ passed = result.returncode == 0
104
+
105
+ if passed:
106
+ print_success(f"{name}: PASSED")
107
+ else:
108
+ print_error(f"{name}: FAILED")
109
+ if result.stderr:
110
+ print(f" Error: {result.stderr[:200]}")
111
+
112
+ return {
113
+ "name": name,
114
+ "passed": passed,
115
+ "output": result.stdout,
116
+ "error": result.stderr,
117
+ "skipped": False
118
+ }
119
+
120
+ except subprocess.TimeoutExpired:
121
+ print_error(f"{name}: TIMEOUT (>5 minutes)")
122
+ return {"name": name, "passed": False, "output": "", "error": "Timeout", "skipped": False}
123
+
124
+ except Exception as e:
125
+ print_error(f"{name}: ERROR - {str(e)}")
126
+ return {"name": name, "passed": False, "output": "", "error": str(e), "skipped": False}
127
+
128
+ def print_summary(results: List[dict]):
129
+ """Print final summary report"""
130
+ print_header("📊 CHECKLIST SUMMARY")
131
+
132
+ passed_count = sum(1 for r in results if r["passed"] and not r.get("skipped"))
133
+ failed_count = sum(1 for r in results if not r["passed"] and not r.get("skipped"))
134
+ skipped_count = sum(1 for r in results if r.get("skipped"))
135
+
136
+ print(f"Total Checks: {len(results)}")
137
+ print(f"{Colors.GREEN}✅ Passed: {passed_count}{Colors.ENDC}")
138
+ print(f"{Colors.RED}❌ Failed: {failed_count}{Colors.ENDC}")
139
+ print(f"{Colors.YELLOW}⏭️ Skipped: {skipped_count}{Colors.ENDC}")
140
+ print()
141
+
142
+ # Detailed results
143
+ for r in results:
144
+ if r.get("skipped"):
145
+ status = f"{Colors.YELLOW}⏭️ {Colors.ENDC}"
146
+ elif r["passed"]:
147
+ status = f"{Colors.GREEN}✅{Colors.ENDC}"
148
+ else:
149
+ status = f"{Colors.RED}❌{Colors.ENDC}"
150
+
151
+ print(f"{status} {r['name']}")
152
+
153
+ print()
154
+
155
+ if failed_count > 0:
156
+ print_error(f"{failed_count} check(s) FAILED - Please fix before proceeding")
157
+ return False
158
+ else:
159
+ print_success("All checks PASSED ✨")
160
+ return True
161
+
162
+ def main():
163
+ parser = argparse.ArgumentParser(
164
+ description="Run Antigravity Kit validation checklist",
165
+ formatter_class=argparse.RawDescriptionHelpFormatter,
166
+ epilog="""
167
+ Examples:
168
+ python scripts/checklist.py . # Core checks only
169
+ python scripts/checklist.py . --url http://localhost:3000 # Include performance
170
+ """
171
+ )
172
+ parser.add_argument("project", help="Project path to validate")
173
+ parser.add_argument("--url", help="URL for performance checks (lighthouse, playwright)")
174
+ parser.add_argument("--skip-performance", action="store_true", help="Skip performance checks even if URL provided")
175
+
176
+ args = parser.parse_args()
177
+
178
+ project_path = Path(args.project).resolve()
179
+
180
+ if not project_path.exists():
181
+ print_error(f"Project path does not exist: {project_path}")
182
+ sys.exit(1)
183
+
184
+ print_header("🚀 ANTIGRAVITY KIT - MASTER CHECKLIST")
185
+ print(f"Project: {project_path}")
186
+ print(f"URL: {args.url if args.url else 'Not provided (performance checks skipped)'}")
187
+
188
+ results = []
189
+
190
+ # Run core checks
191
+ print_header("📋 CORE CHECKS")
192
+ for name, script_path, required in CORE_CHECKS:
193
+ script = project_path / script_path
194
+ result = run_script(name, script, str(project_path))
195
+ results.append(result)
196
+
197
+ # If required check fails, stop
198
+ if required and not result["passed"] and not result.get("skipped"):
199
+ print_error(f"CRITICAL: {name} failed. Stopping checklist.")
200
+ print_summary(results)
201
+ sys.exit(1)
202
+
203
+ # Run performance checks if URL provided
204
+ if args.url and not args.skip_performance:
205
+ print_header("⚡ PERFORMANCE CHECKS")
206
+ for name, script_path, required in PERFORMANCE_CHECKS:
207
+ script = project_path / script_path
208
+ result = run_script(name, script, str(project_path), args.url)
209
+ results.append(result)
210
+
211
+ # Print summary
212
+ all_passed = print_summary(results)
213
+
214
+ sys.exit(0 if all_passed else 1)
215
+
216
+ if __name__ == "__main__":
217
+ main()
@@ -0,0 +1,403 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ thachvd-kit — Project Init Wizard
4
+ Generates PROJECT_CONTEXT.md and optional platform config files.
5
+
6
+ Usage:
7
+ python scripts/init.py # Interactive wizard
8
+ python scripts/init.py --platform all # Also generate CLAUDE.md
9
+ python scripts/init.py --platform claude # Only CLAUDE.md
10
+ """
11
+
12
+ import sys
13
+ import os
14
+ import argparse
15
+ from pathlib import Path
16
+ from datetime import datetime
17
+
18
+ # ─── Color helpers ──────────────────────────────────────────────────────────
19
+
20
+ def c(text, code): return f"\033[{code}m{text}\033[0m" if sys.stdout.isatty() else text
21
+ def bold(t): return c(t, "1")
22
+ def green(t): return c(t, "32")
23
+ def cyan(t): return c(t, "36")
24
+ def yellow(t): return c(t, "33")
25
+ def dim(t): return c(t, "2")
26
+
27
+ # ─── Input helpers ───────────────────────────────────────────────────────────
28
+
29
+ def ask(prompt, default="", choices=None):
30
+ """Prompt user for input with optional default and choices."""
31
+ display_default = f" [{dim(default)}]" if default else ""
32
+ if choices:
33
+ print(f"\n {cyan('Options:')} {', '.join(choices)}")
34
+ value = input(f" {bold('→')} {prompt}{display_default}: ").strip()
35
+ return value if value else default
36
+
37
+ def ask_multi(prompt, choices, default=None):
38
+ """Prompt for comma-separated selection from choices."""
39
+ print(f"\n {cyan('Available:')} {', '.join(f'{i+1}) {c}' for i, c in enumerate(choices))}")
40
+ raw = input(f" {bold('→')} {prompt} (numbers or names, comma-separated) [{dim(default or 'none')}]: ").strip()
41
+ if not raw:
42
+ return default or []
43
+ selected = []
44
+ for part in raw.replace(",", " ").split():
45
+ part = part.strip()
46
+ if part.isdigit():
47
+ idx = int(part) - 1
48
+ if 0 <= idx < len(choices):
49
+ selected.append(choices[idx])
50
+ elif part in choices:
51
+ selected.append(part)
52
+ else:
53
+ selected.append(part) # allow free-text
54
+ return selected
55
+
56
+ def ask_bool(prompt, default=True):
57
+ """Yes/no prompt."""
58
+ default_str = "Y/n" if default else "y/N"
59
+ val = input(f" {bold('→')} {prompt} [{dim(default_str)}]: ").strip().lower()
60
+ if not val:
61
+ return default
62
+ return val.startswith("y")
63
+
64
+ def section(title):
65
+ print(f"\n{bold(cyan('━━ ' + title + ' '))}")
66
+
67
+ # ─── Skill resolver ──────────────────────────────────────────────────────────
68
+
69
+ LANG_SKILLS = {
70
+ "typescript": ["nodejs-best-practices", "api-design"],
71
+ "javascript": ["nodejs-best-practices", "api-design"],
72
+ "python": ["python-patterns"],
73
+ "go": ["golang-patterns", "golang-testing"],
74
+ "php": ["laravel-patterns", "laravel-security", "laravel-tdd"],
75
+ "rust": ["rust-pro"],
76
+ "java": ["api-design"],
77
+ "swift": ["mobile-design"],
78
+ "kotlin": ["mobile-design"],
79
+ "csharp": ["api-design"],
80
+ }
81
+
82
+ FRAMEWORK_SKILLS = {
83
+ "vue": ["frontend-design", "tailwind-patterns"],
84
+ "react": ["nextjs-react-expert", "frontend-design"],
85
+ "next": ["nextjs-react-expert", "frontend-design"],
86
+ "nuxt": ["frontend-design"],
87
+ "svelte": ["frontend-design"],
88
+ "laravel": ["laravel-patterns", "laravel-security", "laravel-tdd"],
89
+ "express": ["nodejs-best-practices", "api-design"],
90
+ "fastapi": ["python-patterns", "api-design"],
91
+ "django": ["python-patterns", "api-design"],
92
+ "gin": ["golang-patterns", "golang-testing"],
93
+ "fiber": ["golang-patterns", "golang-testing"],
94
+ "tauri": ["rust-pro", "mobile-design"],
95
+ "flutter": ["mobile-design"],
96
+ "react-native": ["mobile-design"],
97
+ }
98
+
99
+ INFRA_SKILLS = {
100
+ "docker": ["docker-patterns"],
101
+ "aws": ["deployment-procedures", "docker-patterns"],
102
+ "gcp": ["deployment-procedures", "docker-patterns"],
103
+ "azure": ["deployment-procedures", "docker-patterns"],
104
+ "vercel": ["deployment-procedures"],
105
+ }
106
+
107
+ def resolve_skills(data):
108
+ skills = set()
109
+ lang = data.get("primary_language", "").lower()
110
+ if lang in LANG_SKILLS:
111
+ skills.update(LANG_SKILLS[lang])
112
+ for fw in data.get("frameworks", []):
113
+ fw_lower = fw.lower()
114
+ for key, vals in FRAMEWORK_SKILLS.items():
115
+ if key in fw_lower:
116
+ skills.update(vals)
117
+ for infra in data.get("infrastructure", []):
118
+ infra_lower = infra.lower()
119
+ for key, vals in INFRA_SKILLS.items():
120
+ if key in infra_lower:
121
+ skills.update(vals)
122
+ skills.update(["clean-code", "systematic-debugging"])
123
+ return sorted(skills)
124
+
125
+ def resolve_agent_table(data):
126
+ rows = []
127
+ frameworks = [f.lower() for f in data.get("frameworks", [])]
128
+ lang = data.get("primary_language", "").lower()
129
+
130
+ # Determine frontend agent
131
+ frontend_fws = [f for f in frameworks if f in ["vue", "react", "next", "nuxt", "svelte", "angular"]]
132
+ if frontend_fws:
133
+ fe_skills = []
134
+ for fw in frontend_fws:
135
+ fe_skills.extend(FRAMEWORK_SKILLS.get(fw, []))
136
+ rows.append(("Frontend UI", "frontend-specialist", ", ".join(set(fe_skills[:3]))))
137
+
138
+ # Backend
139
+ be_skills = list(LANG_SKILLS.get(lang, ["api-design"]))
140
+ backend_fws = [f for f in frameworks if f in ["laravel", "express", "fastapi", "django", "gin", "fiber"]]
141
+ for fw in backend_fws:
142
+ be_skills.extend(FRAMEWORK_SKILLS.get(fw, []))
143
+ rows.append(("Backend API", "backend-specialist", ", ".join(set(be_skills[:3]))))
144
+
145
+ # Mobile/Desktop
146
+ mobile_fws = [f for f in frameworks if f in ["tauri", "flutter", "react-native"]]
147
+ if mobile_fws:
148
+ mobile_skills = []
149
+ for fw in mobile_fws:
150
+ mobile_skills.extend(FRAMEWORK_SKILLS.get(fw, []))
151
+ rows.append(("Mobile / Desktop", "mobile-developer", ", ".join(set(mobile_skills[:3]))))
152
+
153
+ # DevOps
154
+ if data.get("uses_docker") or data.get("cloud"):
155
+ rows.append(("DevOps / Infra", "devops-engineer", "docker-patterns, deployment-procedures"))
156
+
157
+ rows.append(("Debug", "debugger", "systematic-debugging"))
158
+ rows.append(("Security", "security-auditor", "vulnerability-scanner"))
159
+ rows.append(("Planning", "project-planner", "brainstorming, plan-writing"))
160
+ return rows
161
+
162
+ # ─── Generators ──────────────────────────────────────────────────────────────
163
+
164
+ def generate_project_context(data):
165
+ frameworks = data.get("frameworks", [])
166
+ infrastructure = data.get("infrastructure", [])
167
+ agent_table = resolve_agent_table(data)
168
+ auto_skills = resolve_skills(data)
169
+
170
+ agent_rows = "\n".join(
171
+ f"| {task} | `{agent}` | {skills} |"
172
+ for task, agent, skills in agent_table
173
+ )
174
+
175
+ return f"""# PROJECT_CONTEXT.md
176
+ # Generated by thachvd-kit init wizard on {datetime.now().strftime('%Y-%m-%d')}
177
+ # Edit freely — this is your project's brain.
178
+
179
+ ## Project
180
+
181
+ - **Name:** {data['project_name']}
182
+ - **Description:** {data['description']}
183
+ - **Type:** {data['project_type']}
184
+
185
+ ---
186
+
187
+ ## Stack
188
+
189
+ ```yaml
190
+ stack:
191
+ primary_language: {data['primary_language']}
192
+ frameworks: [{', '.join(frameworks)}]
193
+ database: {data.get('database', 'none')}
194
+ infrastructure: [{', '.join(infrastructure)}]
195
+ package_manager: {data.get('package_manager', 'auto-detect')}
196
+ test_framework: {data.get('test_framework', 'auto-detect')}
197
+ ```
198
+
199
+ ---
200
+
201
+ ## Agent Routing
202
+
203
+ | Task Type | Agent | Primary Skills |
204
+ |-----------|-------|----------------|
205
+ {agent_rows}
206
+
207
+ ---
208
+
209
+ ## Auto-Resolved Skills
210
+
211
+ Based on your stack, these skills will be loaded automatically:
212
+
213
+ ```
214
+ {chr(10).join('- ' + s for s in auto_skills)}
215
+ ```
216
+
217
+ ---
218
+
219
+ ## Project Conventions
220
+
221
+ - **Max file size:** {data.get('max_file_lines', '300')} lines (then modularize)
222
+ - **Code style:** {data.get('code_style', 'project-standard')}
223
+
224
+ ---
225
+
226
+ ## Architecture Notes
227
+
228
+ {data.get('architecture_notes', '<!-- Add architecture notes, key decisions, patterns used -->')}
229
+
230
+ ---
231
+
232
+ ## Current Phase
233
+
234
+ - **Done:** {data.get('done_phases', '—')}
235
+ - **In Progress:** {data.get('current_phase', 'Initial setup')}
236
+ - **Next:** {data.get('next_phase', '—')}
237
+
238
+ ---
239
+
240
+ ## Known Issues / Tasks
241
+
242
+ {data.get('known_issues', '<!-- Add known issues or pending tasks -->')}
243
+ """
244
+
245
+ def generate_claude_md(data):
246
+ """Generate CLAUDE.md for Claude Code / Codex compatibility."""
247
+ return f"""# CLAUDE.md — {data['project_name']}
248
+ # Generated by thachvd-kit. See PROJECT_CONTEXT.md for full stack info.
249
+ # Cross-platform: Claude Code · Codex · OpenCode
250
+
251
+ ## Project
252
+ {data['description']}
253
+ Stack: {data['primary_language']} | {', '.join(data.get('frameworks', []))}
254
+
255
+ ## Rules
256
+ - Read PROJECT_CONTEXT.md first for stack details and agent routing.
257
+ - Follow skills in .claude/skills/ (or skills/ if using Antigravity).
258
+ - Tests are mandatory. Verify before claiming done.
259
+ - Max {data.get('max_file_lines', '300')} lines per file.
260
+
261
+ ## Key Skills
262
+ - Plan: `plan-writing` → `executing-plans`
263
+ - Review: `requesting-code-review` / `receiving-code-review`
264
+ - Quality: `clean-code`, `verification-before-completion`
265
+ - Workflow: `subagent-driven-development`, `finishing-a-development-branch`
266
+
267
+ ## Commands
268
+ - `/plan` — Create implementation plan
269
+ - `/debug` — Systematic debugging
270
+ - `/test` — Run test suite
271
+ - `/deploy` — Deploy checklist
272
+
273
+ See PROJECT_CONTEXT.md for full agent routing table.
274
+ """
275
+
276
+ # ─── Main wizard ─────────────────────────────────────────────────────────────
277
+
278
+ def main():
279
+ parser = argparse.ArgumentParser(description="thachvd-kit project init wizard")
280
+ parser.add_argument("--platform", choices=["antigravity", "claude", "all"], default="antigravity",
281
+ help="Which platform config to generate (default: antigravity)")
282
+ parser.add_argument("--yes", "-y", action="store_true", help="Use defaults without prompting")
283
+ args = parser.parse_args()
284
+
285
+ print(f"""
286
+ {bold(cyan('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'))}
287
+ {bold('thachvd-kit')} — Project Init Wizard
288
+ Generates PROJECT_CONTEXT.md for smart agent routing
289
+ {bold(cyan('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'))}
290
+ """)
291
+
292
+ # Check if PROJECT_CONTEXT.md already exists
293
+ output_path = Path("PROJECT_CONTEXT.md")
294
+ if output_path.exists() and not args.yes:
295
+ overwrite = ask_bool(f"{yellow('PROJECT_CONTEXT.md already exists. Overwrite?')}", default=False)
296
+ if not overwrite:
297
+ print(f"\n {yellow('Aborted.')} Existing PROJECT_CONTEXT.md unchanged.\n")
298
+ sys.exit(0)
299
+
300
+ data = {}
301
+
302
+ # ── Project Info ──────────────────────────────────────────────────────
303
+ section("Project Info")
304
+ data["project_name"] = ask("Project name", default=Path.cwd().name)
305
+ data["description"] = ask("Short description", default="A software project")
306
+ data["project_type"] = ask("Project type",
307
+ default="web-app",
308
+ choices=["web-app", "api", "mobile", "desktop", "cli", "library", "fullstack"])
309
+
310
+ # ── Tech Stack ────────────────────────────────────────────────────────
311
+ section("Tech Stack")
312
+
313
+ LANGUAGES = ["typescript", "javascript", "python", "go", "php", "rust", "java", "swift", "kotlin", "csharp", "c", "cpp"]
314
+ data["primary_language"] = ask("Primary language",
315
+ default="typescript",
316
+ choices=LANGUAGES)
317
+
318
+ FRAMEWORKS = ["vue", "react", "next", "nuxt", "svelte", "angular",
319
+ "laravel", "express", "fastapi", "django", "gin", "fiber", "nestjs",
320
+ "tauri", "flutter", "react-native",
321
+ "none"]
322
+ frameworks = ask_multi("Frameworks (select all that apply)", FRAMEWORKS, default=None)
323
+ data["frameworks"] = frameworks or []
324
+
325
+ DATABASES = ["postgres", "mysql", "sqlite", "mongodb", "redis", "dynamodb", "supabase", "prisma", "none"]
326
+ data["database"] = ask("Database / ORM", default="postgres", choices=DATABASES)
327
+
328
+ PACKAGE_MANAGERS = ["npm", "pnpm", "yarn", "bun", "pip", "uv", "poetry", "go mod", "cargo", "composer", "auto-detect"]
329
+ data["package_manager"] = ask("Package manager", default="auto-detect", choices=PACKAGE_MANAGERS)
330
+
331
+ # ── Infrastructure ────────────────────────────────────────────────────
332
+ section("Infrastructure")
333
+
334
+ data["uses_docker"] = ask_bool("Uses Docker / Docker Compose?", default=True)
335
+ CLOUDS = ["aws", "gcp", "azure", "vercel", "fly", "railway", "digitalocean", "none"]
336
+ cloud = ask("Cloud provider", default="none", choices=CLOUDS)
337
+ data["cloud"] = cloud
338
+
339
+ infrastructure = []
340
+ if data["uses_docker"]: infrastructure.append("docker")
341
+ if cloud != "none": infrastructure.append(cloud)
342
+ data["infrastructure"] = infrastructure
343
+
344
+ CI_CD = ["github-actions", "gitlab-ci", "circleci", "jenkins", "none"]
345
+ data["ci_cd"] = ask("CI/CD", default="github-actions", choices=CI_CD)
346
+
347
+ # ── Testing ───────────────────────────────────────────────────────────
348
+ section("Testing")
349
+
350
+ TEST_FRAMEWORKS = ["jest", "vitest", "pytest", "go test", "phpunit", "pest", "rspec", "junit", "auto-detect"]
351
+ data["test_framework"] = ask("Test framework", default="auto-detect", choices=TEST_FRAMEWORKS)
352
+
353
+ # ── Conventions ───────────────────────────────────────────────────────
354
+ section("Coding Conventions")
355
+
356
+ data["max_file_lines"] = ask("Max lines per file before splitting", default="300")
357
+ data["code_style"] = ask("Code style / linter", default="project-standard",
358
+ choices=["eslint", "prettier", "ruff", "gofmt", "pint", "standard", "project-standard"])
359
+
360
+ # ── Optional fields ───────────────────────────────────────────────────
361
+ section("Architecture (Optional — press Enter to skip)")
362
+
363
+ data["architecture_notes"] = ask("Key architecture notes", default="<!-- Add notes -->")
364
+ data["current_phase"] = ask("Current phase", default="Initial setup")
365
+ data["next_phase"] = ask("Next planned phase", default="—")
366
+ data["known_issues"] = ask("Known issues / tasks", default="<!-- None yet -->")
367
+
368
+ # ── Generate files ────────────────────────────────────────────────────
369
+ section("Generating Files")
370
+
371
+ # PROJECT_CONTEXT.md (always)
372
+ context_content = generate_project_context(data)
373
+ output_path.write_text(context_content, encoding="utf-8")
374
+ print(f" {green('✓')} {bold('PROJECT_CONTEXT.md')} generated")
375
+
376
+ # CLAUDE.md (for Claude Code / Codex)
377
+ if args.platform in ("claude", "all"):
378
+ claude_path = Path("CLAUDE.md")
379
+ claude_path.write_text(generate_claude_md(data), encoding="utf-8")
380
+ print(f" {green('✓')} {bold('CLAUDE.md')} generated (Claude Code / Codex)")
381
+
382
+ # Summary
383
+ auto_skills = resolve_skills(data)
384
+ print(f"""
385
+ {bold(green('━━ Done! ━━'))}
386
+
387
+ {bold('Project:')} {data['project_name']}
388
+ {bold('Stack:')} {data['primary_language']} | {', '.join(data['frameworks']) or 'no framework'}
389
+ {bold('Infra:')} {', '.join(data['infrastructure']) or 'none'}
390
+
391
+ {bold('Auto-resolved skills:')}
392
+ {chr(10).join(f' · {s}' for s in auto_skills)}
393
+
394
+ {bold('Next steps:')}
395
+ 1. Review {bold('PROJECT_CONTEXT.md')} and add architecture notes
396
+ 2. Open project in your AI editor (Antigravity / Claude Code / Codex)
397
+ 3. The agent will read PROJECT_CONTEXT.md on session start
398
+
399
+ {dim(' Tip: Run with --platform all to also generate CLAUDE.md')}
400
+ """)
401
+
402
+ if __name__ == "__main__":
403
+ main()