flyee 0.1.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 (302) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +134 -0
  3. package/bin/install.js +357 -0
  4. package/bridge/bridge.py +1780 -0
  5. package/bridge/local_tracker.py +722 -0
  6. package/core/agents/backend-specialist.md +266 -0
  7. package/core/agents/code-archaeologist.md +106 -0
  8. package/core/agents/database-architect.md +226 -0
  9. package/core/agents/debugger.md +225 -0
  10. package/core/agents/devops-engineer.md +323 -0
  11. package/core/agents/documentation-writer.md +104 -0
  12. package/core/agents/explorer-agent.md +73 -0
  13. package/core/agents/frontend-specialist.md +743 -0
  14. package/core/agents/game-developer.md +162 -0
  15. package/core/agents/mobile-developer.md +377 -0
  16. package/core/agents/orchestrator.md +416 -0
  17. package/core/agents/penetration-tester.md +188 -0
  18. package/core/agents/performance-optimizer.md +187 -0
  19. package/core/agents/product-manager.md +112 -0
  20. package/core/agents/product-owner.md +95 -0
  21. package/core/agents/project-planner.md +470 -0
  22. package/core/agents/qa-automation-engineer.md +103 -0
  23. package/core/agents/security-auditor.md +170 -0
  24. package/core/agents/seo-specialist.md +111 -0
  25. package/core/agents/stitch-designer.md +190 -0
  26. package/core/agents/tdd-reviewer.md +282 -0
  27. package/core/agents/test-engineer.md +158 -0
  28. package/core/scripts/auto_preview.py +148 -0
  29. package/core/scripts/checklist.py +243 -0
  30. package/core/scripts/cost_report.py +149 -0
  31. package/core/scripts/doc-sync-check.py +461 -0
  32. package/core/scripts/parse_user_stories.py +79 -0
  33. package/core/scripts/prepare_notion_updates.py +172 -0
  34. package/core/scripts/print_create_payload.py +18 -0
  35. package/core/scripts/session_manager.py +120 -0
  36. package/core/scripts/task_complete.py +127 -0
  37. package/core/scripts/verify_all.py +327 -0
  38. package/core/skills/analytics-strategy/SKILL.md +128 -0
  39. package/core/skills/api-patterns/SKILL.md +81 -0
  40. package/core/skills/api-patterns/api-style.md +42 -0
  41. package/core/skills/api-patterns/auth.md +24 -0
  42. package/core/skills/api-patterns/documentation.md +26 -0
  43. package/core/skills/api-patterns/graphql.md +41 -0
  44. package/core/skills/api-patterns/rate-limiting.md +31 -0
  45. package/core/skills/api-patterns/response.md +37 -0
  46. package/core/skills/api-patterns/rest.md +40 -0
  47. package/core/skills/api-patterns/scripts/api_validator.py +211 -0
  48. package/core/skills/api-patterns/security-testing.md +122 -0
  49. package/core/skills/api-patterns/trpc.md +41 -0
  50. package/core/skills/api-patterns/versioning.md +22 -0
  51. package/core/skills/app-builder/SKILL.md +75 -0
  52. package/core/skills/app-builder/agent-coordination.md +71 -0
  53. package/core/skills/app-builder/feature-building.md +53 -0
  54. package/core/skills/app-builder/project-detection.md +34 -0
  55. package/core/skills/app-builder/scaffolding.md +118 -0
  56. package/core/skills/app-builder/tech-stack.md +40 -0
  57. package/core/skills/app-builder/templates/SKILL.md +39 -0
  58. package/core/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
  59. package/core/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
  60. package/core/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
  61. package/core/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
  62. package/core/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
  63. package/core/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
  64. package/core/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
  65. package/core/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +82 -0
  66. package/core/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +100 -0
  67. package/core/skills/app-builder/templates/nextjs-static/TEMPLATE.md +106 -0
  68. package/core/skills/app-builder/templates/nuxt-app/TEMPLATE.md +101 -0
  69. package/core/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
  70. package/core/skills/app-builder/templates/react-native-app/TEMPLATE.md +93 -0
  71. package/core/skills/architecture/SKILL.md +55 -0
  72. package/core/skills/architecture/context-discovery.md +43 -0
  73. package/core/skills/architecture/examples.md +94 -0
  74. package/core/skills/architecture/pattern-selection.md +68 -0
  75. package/core/skills/architecture/patterns-reference.md +50 -0
  76. package/core/skills/architecture/trade-off-analysis.md +77 -0
  77. package/core/skills/atomic-design/SKILL.md +282 -0
  78. package/core/skills/atomic-design/references/classification-guide.md +132 -0
  79. package/core/skills/atomic-design/references/quality-checklist.md +60 -0
  80. package/core/skills/atomic-design/references/stacks/stack-blade.md +254 -0
  81. package/core/skills/atomic-design/references/stacks/stack-nextjs.md +272 -0
  82. package/core/skills/atomic-design/references/stacks/stack-react.md +239 -0
  83. package/core/skills/atomic-design/references/stacks/stack-vue.md +224 -0
  84. package/core/skills/bash-linux/SKILL.md +199 -0
  85. package/core/skills/behavioral-modes/SKILL.md +242 -0
  86. package/core/skills/brainstorming/SKILL.md +163 -0
  87. package/core/skills/brainstorming/dynamic-questioning.md +373 -0
  88. package/core/skills/checkpointing-patterns/SKILL.md +163 -0
  89. package/core/skills/clean-code/SKILL.md +201 -0
  90. package/core/skills/code-review-checklist/SKILL.md +109 -0
  91. package/core/skills/code-truth-validation/SKILL.md +149 -0
  92. package/core/skills/component-library-discovery/SKILL.md +154 -0
  93. package/core/skills/content-strategy/SKILL.md +222 -0
  94. package/core/skills/context-budget/SKILL.md +155 -0
  95. package/core/skills/context-gathering-patterns/SKILL.md +278 -0
  96. package/core/skills/cost-tracking/SKILL.md +206 -0
  97. package/core/skills/database-design/SKILL.md +52 -0
  98. package/core/skills/database-design/database-selection.md +43 -0
  99. package/core/skills/database-design/indexing.md +39 -0
  100. package/core/skills/database-design/migrations.md +48 -0
  101. package/core/skills/database-design/optimization.md +36 -0
  102. package/core/skills/database-design/orm-selection.md +30 -0
  103. package/core/skills/database-design/schema-design.md +56 -0
  104. package/core/skills/database-design/scripts/schema_validator.py +172 -0
  105. package/core/skills/deployment-procedures/SKILL.md +295 -0
  106. package/core/skills/design-md/README.md +34 -0
  107. package/core/skills/design-md/SKILL.md +172 -0
  108. package/core/skills/design-md/examples/DESIGN.md +154 -0
  109. package/core/skills/design-system-enforcement/SKILL.md +339 -0
  110. package/core/skills/doc.md +177 -0
  111. package/core/skills/document-registry/SKILL.md +130 -0
  112. package/core/skills/documentation-publishing/SKILL.md +174 -0
  113. package/core/skills/documentation-templates/SKILL.md +194 -0
  114. package/core/skills/enhance-prompt/README.md +34 -0
  115. package/core/skills/enhance-prompt/SKILL.md +204 -0
  116. package/core/skills/enhance-prompt/references/KEYWORDS.md +114 -0
  117. package/core/skills/frontend-design/SKILL.md +430 -0
  118. package/core/skills/frontend-design/animation-guide.md +331 -0
  119. package/core/skills/frontend-design/color-system.md +311 -0
  120. package/core/skills/frontend-design/decision-trees.md +418 -0
  121. package/core/skills/frontend-design/motion-graphics.md +306 -0
  122. package/core/skills/frontend-design/scripts/accessibility_checker.py +183 -0
  123. package/core/skills/frontend-design/scripts/ux_audit.py +722 -0
  124. package/core/skills/frontend-design/typography-system.md +345 -0
  125. package/core/skills/frontend-design/ux-psychology.md +541 -0
  126. package/core/skills/frontend-design/visual-effects.md +383 -0
  127. package/core/skills/game-development/2d-games/SKILL.md +119 -0
  128. package/core/skills/game-development/3d-games/SKILL.md +135 -0
  129. package/core/skills/game-development/SKILL.md +167 -0
  130. package/core/skills/game-development/game-art/SKILL.md +185 -0
  131. package/core/skills/game-development/game-audio/SKILL.md +190 -0
  132. package/core/skills/game-development/game-design/SKILL.md +129 -0
  133. package/core/skills/game-development/mobile-games/SKILL.md +108 -0
  134. package/core/skills/game-development/multiplayer/SKILL.md +132 -0
  135. package/core/skills/game-development/pc-games/SKILL.md +144 -0
  136. package/core/skills/game-development/vr-ar/SKILL.md +123 -0
  137. package/core/skills/game-development/web-games/SKILL.md +150 -0
  138. package/core/skills/geo-fundamentals/SKILL.md +156 -0
  139. package/core/skills/geo-fundamentals/scripts/geo_checker.py +289 -0
  140. package/core/skills/git-workflow/SKILL.md +263 -0
  141. package/core/skills/history-check-patterns/SKILL.md +125 -0
  142. package/core/skills/i18n-localization/SKILL.md +154 -0
  143. package/core/skills/i18n-localization/scripts/i18n_checker.py +241 -0
  144. package/core/skills/integration-completeness/SKILL.md +219 -0
  145. package/core/skills/intelligent-routing/SKILL.md +370 -0
  146. package/core/skills/lint-and-validate/SKILL.md +45 -0
  147. package/core/skills/lint-and-validate/scripts/lint_runner.py +173 -0
  148. package/core/skills/lint-and-validate/scripts/type_coverage.py +173 -0
  149. package/core/skills/local-verification/SKILL.md +195 -0
  150. package/core/skills/mcp-builder/SKILL.md +176 -0
  151. package/core/skills/mobile-design/SKILL.md +394 -0
  152. package/core/skills/mobile-design/decision-trees.md +516 -0
  153. package/core/skills/mobile-design/mobile-backend.md +491 -0
  154. package/core/skills/mobile-design/mobile-color-system.md +420 -0
  155. package/core/skills/mobile-design/mobile-debugging.md +122 -0
  156. package/core/skills/mobile-design/mobile-design-thinking.md +357 -0
  157. package/core/skills/mobile-design/mobile-navigation.md +458 -0
  158. package/core/skills/mobile-design/mobile-performance.md +767 -0
  159. package/core/skills/mobile-design/mobile-testing.md +356 -0
  160. package/core/skills/mobile-design/mobile-typography.md +433 -0
  161. package/core/skills/mobile-design/platform-android.md +666 -0
  162. package/core/skills/mobile-design/platform-ios.md +561 -0
  163. package/core/skills/mobile-design/scripts/mobile_audit.py +670 -0
  164. package/core/skills/mobile-design/touch-psychology.md +537 -0
  165. package/core/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +312 -0
  166. package/core/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +240 -0
  167. package/core/skills/nextjs-react-expert/3-server-server-side-performance.md +490 -0
  168. package/core/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +264 -0
  169. package/core/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +581 -0
  170. package/core/skills/nextjs-react-expert/6-rendering-rendering-performance.md +432 -0
  171. package/core/skills/nextjs-react-expert/7-js-javascript-performance.md +684 -0
  172. package/core/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +150 -0
  173. package/core/skills/nextjs-react-expert/SKILL.md +267 -0
  174. package/core/skills/nextjs-react-expert/scripts/convert_rules.py +222 -0
  175. package/core/skills/nextjs-react-expert/scripts/react_performance_checker.py +252 -0
  176. package/core/skills/nodejs-best-practices/SKILL.md +333 -0
  177. package/core/skills/notion-task-patterns/SKILL.md +2529 -0
  178. package/core/skills/page-specifications/SKILL.md +367 -0
  179. package/core/skills/parallel-agents/SKILL.md +175 -0
  180. package/core/skills/performance-profiling/SKILL.md +143 -0
  181. package/core/skills/performance-profiling/scripts/lighthouse_audit.py +76 -0
  182. package/core/skills/plan-writing/SKILL.md +190 -0
  183. package/core/skills/powershell-windows/SKILL.md +167 -0
  184. package/core/skills/project-foundation/SKILL.md +117 -0
  185. package/core/skills/project-setup/SKILL.md +141 -0
  186. package/core/skills/project-tracking-patterns/SKILL.md +357 -0
  187. package/core/skills/project-type-discovery/SKILL.md +239 -0
  188. package/core/skills/python-patterns/SKILL.md +441 -0
  189. package/core/skills/qa-test-generation/SKILL.md +156 -0
  190. package/core/skills/react-components/README.md +36 -0
  191. package/core/skills/react-components/SKILL.md +47 -0
  192. package/core/skills/react-components/examples/gold-standard-card.tsx +80 -0
  193. package/core/skills/react-components/package-lock.json +231 -0
  194. package/core/skills/react-components/package.json +16 -0
  195. package/core/skills/react-components/resources/architecture-checklist.md +15 -0
  196. package/core/skills/react-components/resources/component-template.tsx +37 -0
  197. package/core/skills/react-components/resources/stitch-api-reference.md +14 -0
  198. package/core/skills/react-components/resources/style-guide.json +27 -0
  199. package/core/skills/react-components/scripts/fetch-stitch.sh +30 -0
  200. package/core/skills/react-components/scripts/validate.js +68 -0
  201. package/core/skills/red-team-tactics/SKILL.md +199 -0
  202. package/core/skills/remotion/README.md +105 -0
  203. package/core/skills/remotion/SKILL.md +393 -0
  204. package/core/skills/remotion/examples/WalkthroughComposition.tsx +78 -0
  205. package/core/skills/remotion/examples/screens.json +56 -0
  206. package/core/skills/remotion/resources/composition-checklist.md +124 -0
  207. package/core/skills/remotion/resources/screen-slide-template.tsx +123 -0
  208. package/core/skills/remotion/scripts/download-stitch-asset.sh +38 -0
  209. package/core/skills/seo-fundamentals/SKILL.md +129 -0
  210. package/core/skills/seo-fundamentals/scripts/seo_checker.py +219 -0
  211. package/core/skills/server-management/SKILL.md +161 -0
  212. package/core/skills/session-resilience/SKILL.md +199 -0
  213. package/core/skills/shadcn-ui/README.md +248 -0
  214. package/core/skills/shadcn-ui/SKILL.md +326 -0
  215. package/core/skills/shadcn-ui/examples/auth-layout.tsx +177 -0
  216. package/core/skills/shadcn-ui/examples/data-table.tsx +313 -0
  217. package/core/skills/shadcn-ui/examples/form-pattern.tsx +177 -0
  218. package/core/skills/shadcn-ui/resources/component-catalog.md +481 -0
  219. package/core/skills/shadcn-ui/resources/customization-guide.md +516 -0
  220. package/core/skills/shadcn-ui/resources/migration-guide.md +463 -0
  221. package/core/skills/shadcn-ui/resources/setup-guide.md +412 -0
  222. package/core/skills/shadcn-ui/scripts/verify-setup.sh +134 -0
  223. package/core/skills/state-machine/SKILL.md +264 -0
  224. package/core/skills/stitch-loop/README.md +54 -0
  225. package/core/skills/stitch-loop/SKILL.md +203 -0
  226. package/core/skills/stitch-loop/examples/SITE.md +73 -0
  227. package/core/skills/stitch-loop/examples/next-prompt.md +25 -0
  228. package/core/skills/stitch-loop/resources/baton-schema.md +61 -0
  229. package/core/skills/stitch-loop/resources/site-template.md +104 -0
  230. package/core/skills/systematic-debugging/SKILL.md +109 -0
  231. package/core/skills/tailwind-patterns/SKILL.md +284 -0
  232. package/core/skills/tdd-validation/SKILL.md +243 -0
  233. package/core/skills/tdd-workflow/SKILL.md +284 -0
  234. package/core/skills/testing-patterns/SKILL.md +196 -0
  235. package/core/skills/testing-patterns/scripts/test_runner.py +219 -0
  236. package/core/skills/ui-ux-discovery/SKILL.md +329 -0
  237. package/core/skills/ui-validation/SKILL.md +190 -0
  238. package/core/skills/ui-validation/scripts/ui_antipattern_check.py +317 -0
  239. package/core/skills/verification-gate/SKILL.md +205 -0
  240. package/core/skills/vulnerability-scanner/SKILL.md +276 -0
  241. package/core/skills/vulnerability-scanner/checklists.md +121 -0
  242. package/core/skills/vulnerability-scanner/scripts/security_scan.py +458 -0
  243. package/core/skills/web-design-guidelines/SKILL.md +57 -0
  244. package/core/skills/webapp-testing/SKILL.md +187 -0
  245. package/core/skills/webapp-testing/scripts/playwright_runner.py +173 -0
  246. package/core/templates/ARCHITECTURE.template.md +407 -0
  247. package/core/templates/project-resources.example.json +71 -0
  248. package/core/workflows/atomic.md +182 -0
  249. package/core/workflows/brainstorm.md +134 -0
  250. package/core/workflows/check-task.md +242 -0
  251. package/core/workflows/copy-collect.md +306 -0
  252. package/core/workflows/create-agent.md +33 -0
  253. package/core/workflows/create-skill.md +39 -0
  254. package/core/workflows/create-workflow.md +33 -0
  255. package/core/workflows/create.md +92 -0
  256. package/core/workflows/debug.md +186 -0
  257. package/core/workflows/demand.md +443 -0
  258. package/core/workflows/deploy.md +260 -0
  259. package/core/workflows/discovery.md +267 -0
  260. package/core/workflows/document.md +272 -0
  261. package/core/workflows/ds-components.md +296 -0
  262. package/core/workflows/ds-init.md +58 -0
  263. package/core/workflows/ds-refactor.md +245 -0
  264. package/core/workflows/ds-references.md +197 -0
  265. package/core/workflows/ds-styleguide.md +237 -0
  266. package/core/workflows/ds-token-diff.md +103 -0
  267. package/core/workflows/ds-tokens.md +317 -0
  268. package/core/workflows/ds-validate.md +309 -0
  269. package/core/workflows/execute.md +483 -0
  270. package/core/workflows/extract-template.md +278 -0
  271. package/core/workflows/fix-failed-tests.md +160 -0
  272. package/core/workflows/init-project.md +386 -0
  273. package/core/workflows/legacy-project.md +849 -0
  274. package/core/workflows/log.md +97 -0
  275. package/core/workflows/new-project.md +610 -0
  276. package/core/workflows/new-project.md.bak +3292 -0
  277. package/core/workflows/new-task.md +404 -0
  278. package/core/workflows/orchestrate.md +237 -0
  279. package/core/workflows/page-build.md +296 -0
  280. package/core/workflows/plan.md +89 -0
  281. package/core/workflows/prd.md +255 -0
  282. package/core/workflows/preview.md +81 -0
  283. package/core/workflows/review-page.md +304 -0
  284. package/core/workflows/status.md +86 -0
  285. package/core/workflows/stitch.md +226 -0
  286. package/core/workflows/task-complete.md +473 -0
  287. package/core/workflows/task-update.md +163 -0
  288. package/core/workflows/tdd.md +344 -0
  289. package/core/workflows/test.md +251 -0
  290. package/core/workflows/ui-ux-pro-max.md +437 -0
  291. package/core/workflows/ux-mobile-optimize.md +262 -0
  292. package/core/workflows/ux-mobile-validate.md +297 -0
  293. package/engine-files/GEMINI.md +69 -0
  294. package/package.json +47 -0
  295. package/runtime-adapters/antigravity.js +26 -0
  296. package/runtime-adapters/claude.js +57 -0
  297. package/runtime-adapters/codex.js +51 -0
  298. package/runtime-adapters/copilot.js +51 -0
  299. package/runtime-adapters/cursor.js +51 -0
  300. package/runtime-adapters/gemini-cli.js +30 -0
  301. package/runtime-adapters/opencode.js +51 -0
  302. package/runtime-adapters/windsurf.js +51 -0
@@ -0,0 +1,243 @@
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 (Core mandatory 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
+ ]
62
+
63
+ PERFORMANCE_CHECKS = [
64
+ ("Lighthouse Audit", ".agent/skills/performance-profiling/scripts/lighthouse_audit.py", True),
65
+ ("Playwright E2E", ".agent/skills/webapp-testing/scripts/playwright_runner.py", False),
66
+ ]
67
+
68
+ def discover_skill_scripts(project_path: Path) -> List[Tuple[str, str, bool]]:
69
+ """Dynamically discover 'verify.py' scripts in skills"""
70
+ skill_scripts = []
71
+ skills_dir = project_path / ".agent/skills"
72
+
73
+ if not skills_dir.exists():
74
+ return []
75
+
76
+ for skill_path in skills_dir.iterdir():
77
+ if skill_path.is_dir():
78
+ verify_script = skill_path / "scripts/verify.py"
79
+ if verify_script.exists():
80
+ name = f"{skill_path.name.replace('-', ' ').title()} Verify"
81
+ # Relative path from project root
82
+ rel_path = f".agent/skills/{skill_path.name}/scripts/verify.py"
83
+ skill_scripts.append((name, rel_path, False))
84
+
85
+ return sorted(skill_scripts)
86
+
87
+
88
+ def check_script_exists(script_path: Path) -> bool:
89
+ """Check if script file exists"""
90
+ return script_path.exists() and script_path.is_file()
91
+
92
+ def run_script(name: str, script_path: Path, project_path: str, url: Optional[str] = None) -> dict:
93
+ """
94
+ Run a validation script and capture results
95
+
96
+ Returns:
97
+ dict with keys: name, passed, output, skipped
98
+ """
99
+ if not check_script_exists(script_path):
100
+ print_warning(f"{name}: Script not found, skipping")
101
+ return {"name": name, "passed": True, "output": "", "skipped": True}
102
+
103
+ print_step(f"Running: {name}")
104
+
105
+ # Build command
106
+ cmd = ["python", str(script_path), project_path]
107
+ if url and ("lighthouse" in script_path.name.lower() or "playwright" in script_path.name.lower()):
108
+ cmd.append(url)
109
+
110
+ # Run script
111
+ try:
112
+ result = subprocess.run(
113
+ cmd,
114
+ capture_output=True,
115
+ text=True,
116
+ timeout=300 # 5 minute timeout
117
+ )
118
+
119
+ passed = result.returncode == 0
120
+
121
+ if passed:
122
+ print_success(f"{name}: PASSED")
123
+ else:
124
+ print_error(f"{name}: FAILED")
125
+ if result.stderr:
126
+ print(f" Error: {result.stderr[:200]}")
127
+
128
+ return {
129
+ "name": name,
130
+ "passed": passed,
131
+ "output": result.stdout,
132
+ "error": result.stderr,
133
+ "skipped": False
134
+ }
135
+
136
+ except subprocess.TimeoutExpired:
137
+ print_error(f"{name}: TIMEOUT (>5 minutes)")
138
+ return {"name": name, "passed": False, "output": "", "error": "Timeout", "skipped": False}
139
+
140
+ except Exception as e:
141
+ print_error(f"{name}: ERROR - {str(e)}")
142
+ return {"name": name, "passed": False, "output": "", "error": str(e), "skipped": False}
143
+
144
+ def print_summary(results: List[dict]):
145
+ """Print final summary report"""
146
+ print_header("📊 CHECKLIST SUMMARY")
147
+
148
+ passed_count = sum(1 for r in results if r["passed"] and not r.get("skipped"))
149
+ failed_count = sum(1 for r in results if not r["passed"] and not r.get("skipped"))
150
+ skipped_count = sum(1 for r in results if r.get("skipped"))
151
+
152
+ print(f"Total Checks: {len(results)}")
153
+ print(f"{Colors.GREEN}✅ Passed: {passed_count}{Colors.ENDC}")
154
+ print(f"{Colors.RED}❌ Failed: {failed_count}{Colors.ENDC}")
155
+ print(f"{Colors.YELLOW}⏭️ Skipped: {skipped_count}{Colors.ENDC}")
156
+ print()
157
+
158
+ # Detailed results
159
+ for r in results:
160
+ if r.get("skipped"):
161
+ status = f"{Colors.YELLOW}⏭️ {Colors.ENDC}"
162
+ elif r["passed"]:
163
+ status = f"{Colors.GREEN}✅{Colors.ENDC}"
164
+ else:
165
+ status = f"{Colors.RED}❌{Colors.ENDC}"
166
+
167
+ print(f"{status} {r['name']}")
168
+
169
+ print()
170
+
171
+ if failed_count > 0:
172
+ print_error(f"{failed_count} check(s) FAILED - Please fix before proceeding")
173
+ return False
174
+ else:
175
+ print_success("All checks PASSED ✨")
176
+ return True
177
+
178
+ def main():
179
+ parser = argparse.ArgumentParser(
180
+ description="Run Antigravity Kit validation checklist",
181
+ formatter_class=argparse.RawDescriptionHelpFormatter,
182
+ epilog="""
183
+ Examples:
184
+ python scripts/checklist.py . # Core checks only
185
+ python scripts/checklist.py . --url http://localhost:3000 # Include performance
186
+ """
187
+ )
188
+ parser.add_argument("project", help="Project path to validate")
189
+ parser.add_argument("--url", help="URL for performance checks (lighthouse, playwright)")
190
+ parser.add_argument("--skip-performance", action="store_true", help="Skip performance checks even if URL provided")
191
+
192
+ args = parser.parse_args()
193
+
194
+ project_path = Path(args.project).resolve()
195
+
196
+ if not project_path.exists():
197
+ print_error(f"Project path does not exist: {project_path}")
198
+ sys.exit(1)
199
+
200
+ print_header("🚀 ANTIGRAVITY KIT - MASTER CHECKLIST")
201
+ print(f"Project: {project_path}")
202
+ print(f"URL: {args.url if args.url else 'Not provided (performance checks skipped)'}")
203
+
204
+ results = []
205
+
206
+ # Run core checks (Priority 0 & 1)
207
+ print_header("📋 CORE CHECKS")
208
+
209
+ # 1. Run Fixed Core Checks
210
+ all_checks = list(CORE_CHECKS)
211
+
212
+ # 2. Discover Dynamic Skill Checks
213
+ dynamic_checks = discover_skill_scripts(project_path)
214
+ if dynamic_checks:
215
+ print(f"🔎 Discovered {len(dynamic_checks)} skill verification scripts...")
216
+ all_checks.extend(dynamic_checks)
217
+
218
+ for name, script_path, required in all_checks:
219
+ script = project_path / script_path
220
+ result = run_script(name, script, str(project_path))
221
+ results.append(result)
222
+
223
+ # If required check fails, stop
224
+ if required and not result["passed"] and not result.get("skipped"):
225
+ print_error(f"CRITICAL: {name} failed. Stopping checklist.")
226
+ print_summary(results)
227
+ sys.exit(1)
228
+
229
+ # Run performance checks if URL provided
230
+ if args.url and not args.skip_performance:
231
+ print_header("⚡ PERFORMANCE CHECKS")
232
+ for name, script_path, required in PERFORMANCE_CHECKS:
233
+ script = project_path / script_path
234
+ result = run_script(name, script, str(project_path), args.url)
235
+ results.append(result)
236
+
237
+ # Print summary
238
+ all_passed = print_summary(results)
239
+
240
+ sys.exit(0 if all_passed else 1)
241
+
242
+ if __name__ == "__main__":
243
+ main()
@@ -0,0 +1,149 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ @flyee Cost Report Generator
4
+
5
+ Reads .flyee/cost-log.jsonl and generates a summary report.
6
+
7
+ Usage:
8
+ python3 cost_report.py # Full report
9
+ python3 cost_report.py --sprint S09 # Sprint-specific
10
+ python3 cost_report.py --json # JSON output
11
+ """
12
+
13
+ import json
14
+ import sys
15
+ import os
16
+ from collections import defaultdict
17
+ from datetime import datetime
18
+
19
+
20
+ def load_cost_log(path=".flyee/cost-log.jsonl"):
21
+ """Load cost log entries from JSONL file."""
22
+ if not os.path.exists(path):
23
+ return []
24
+
25
+ entries = []
26
+ with open(path, "r") as f:
27
+ for line in f:
28
+ line = line.strip()
29
+ if line:
30
+ try:
31
+ entries.append(json.loads(line))
32
+ except json.JSONDecodeError:
33
+ continue
34
+ return entries
35
+
36
+
37
+ def filter_entries(entries, sprint=None):
38
+ """Filter entries by sprint if specified."""
39
+ if sprint:
40
+ return [e for e in entries if e.get("sprint") == sprint]
41
+ return entries
42
+
43
+
44
+ def generate_report(entries):
45
+ """Generate cost report from entries."""
46
+ if not entries:
47
+ return {"total_cost": 0, "total_ops": 0, "phases": {}, "tasks": {}}
48
+
49
+ total_cost = sum(e.get("cost_usd", 0) for e in entries)
50
+ total_tokens_in = sum(e.get("tokens_in", 0) for e in entries)
51
+ total_tokens_out = sum(e.get("tokens_out", 0) for e in entries)
52
+ total_duration = sum(e.get("duration_ms", 0) for e in entries)
53
+
54
+ # Group by phase
55
+ by_phase = defaultdict(lambda: {"cost": 0, "ops": 0, "tasks": set()})
56
+ for e in entries:
57
+ phase = e.get("phase", "unknown")
58
+ by_phase[phase]["cost"] += e.get("cost_usd", 0)
59
+ by_phase[phase]["ops"] += 1
60
+ by_phase[phase]["tasks"].add(e.get("task", ""))
61
+
62
+ # Group by task
63
+ by_task = defaultdict(lambda: {"cost": 0, "ops": 0})
64
+ for e in entries:
65
+ task = f"{e.get('phase', '?')}/{e.get('task', '?')}"
66
+ by_task[task]["cost"] += e.get("cost_usd", 0)
67
+ by_task[task]["ops"] += 1
68
+
69
+ # Most expensive tasks
70
+ expensive = sorted(by_task.items(), key=lambda x: x[1]["cost"], reverse=True)[:5]
71
+
72
+ return {
73
+ "total_cost": total_cost,
74
+ "total_ops": len(entries),
75
+ "total_tokens_in": total_tokens_in,
76
+ "total_tokens_out": total_tokens_out,
77
+ "total_duration_ms": total_duration,
78
+ "phases": {k: {"cost": v["cost"], "ops": v["ops"], "tasks": len(v["tasks"])}
79
+ for k, v in by_phase.items()},
80
+ "most_expensive": [{"task": t, "cost": v["cost"], "ops": v["ops"]}
81
+ for t, v in expensive],
82
+ }
83
+
84
+
85
+ def print_report(report, sprint=None):
86
+ """Print formatted cost report."""
87
+ title = f"@flyee Cost Report"
88
+ if sprint:
89
+ title += f" — {sprint}"
90
+
91
+ print(f"\n{'═' * 50}")
92
+ print(f" {title}")
93
+ print(f"{'═' * 50}\n")
94
+
95
+ total = report["total_cost"]
96
+ ops = report["total_ops"]
97
+ ti = report.get("total_tokens_in", 0)
98
+ to = report.get("total_tokens_out", 0)
99
+
100
+ print(f" Total: ${total:.2f}")
101
+ print(f" Operations: {ops}")
102
+ print(f" Tokens: {ti//1000}K in / {to//1000}K out")
103
+ print()
104
+
105
+ if report["phases"]:
106
+ print(" Phase breakdown:")
107
+ print(f" {'─' * 46}")
108
+ print(f" {'Phase':<15} {'Cost':>8} {'Tasks':>6} {'Avg/Task':>10}")
109
+ print(f" {'─' * 46}")
110
+ for phase, data in sorted(report["phases"].items()):
111
+ avg = data["cost"] / data["tasks"] if data["tasks"] > 0 else 0
112
+ pct = (data["cost"] / total * 100) if total > 0 else 0
113
+ print(f" {phase:<15} ${data['cost']:>6.2f} {data['tasks']:>6} ${avg:>8.2f}")
114
+ print(f" {'─' * 46}")
115
+ print()
116
+
117
+ if report["most_expensive"]:
118
+ print(" Most expensive tasks:")
119
+ for i, item in enumerate(report["most_expensive"], 1):
120
+ pct = (item["cost"] / total * 100) if total > 0 else 0
121
+ print(f" {i}. {item['task']:<20} ${item['cost']:.2f} ({pct:.0f}%)")
122
+
123
+ print(f"\n{'═' * 50}\n")
124
+
125
+
126
+ def main():
127
+ sprint = None
128
+ json_output = False
129
+
130
+ for arg in sys.argv[1:]:
131
+ if arg == "--json":
132
+ json_output = True
133
+ elif arg.startswith("--sprint"):
134
+ idx = sys.argv.index(arg)
135
+ if idx + 1 < len(sys.argv):
136
+ sprint = sys.argv[idx + 1]
137
+
138
+ entries = load_cost_log()
139
+ filtered = filter_entries(entries, sprint)
140
+ report = generate_report(filtered)
141
+
142
+ if json_output:
143
+ print(json.dumps(report, indent=2))
144
+ else:
145
+ print_report(report, sprint)
146
+
147
+
148
+ if __name__ == "__main__":
149
+ main()