imhcode 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 (986) hide show
  1. package/.github/ISSUE_TEMPLATE/bug_report.md +41 -0
  2. package/.github/ISSUE_TEMPLATE/feature_request.md +39 -0
  3. package/.github/PULL_REQUEST_TEMPLATE.md +29 -0
  4. package/.github/copilot-instructions.md +43 -0
  5. package/.github/workflows/framework-validator.yml +53 -0
  6. package/.gitignore.template +15 -0
  7. package/AGENTS.md +69 -0
  8. package/CLAUDE.md +27 -0
  9. package/README.md +63 -0
  10. package/SETUP.md +81 -0
  11. package/USER_MANUAL.md +70 -0
  12. package/agents/android-executor/SYSTEM.md +32 -0
  13. package/agents/android-executor/agent.yml +53 -0
  14. package/agents/debugger/SYSTEM.md +32 -0
  15. package/agents/debugger/agent.yml +56 -0
  16. package/agents/designer/SYSTEM.md +32 -0
  17. package/agents/designer/agent.yml +59 -0
  18. package/agents/devops-executor/SYSTEM.md +32 -0
  19. package/agents/devops-executor/agent.yml +56 -0
  20. package/agents/flutter-executor/SYSTEM.md +32 -0
  21. package/agents/flutter-executor/agent.yml +54 -0
  22. package/agents/ios-executor/SYSTEM.md +32 -0
  23. package/agents/ios-executor/agent.yml +53 -0
  24. package/agents/java-executor/SYSTEM.md +32 -0
  25. package/agents/java-executor/agent.yml +57 -0
  26. package/agents/laravel-executor/SYSTEM.md +32 -0
  27. package/agents/laravel-executor/agent.yml +59 -0
  28. package/agents/nextjs-executor/SYSTEM.md +32 -0
  29. package/agents/nextjs-executor/agent.yml +60 -0
  30. package/agents/planner/SYSTEM.md +32 -0
  31. package/agents/planner/agent.yml +56 -0
  32. package/agents/python-executor/SYSTEM.md +32 -0
  33. package/agents/python-executor/agent.yml +58 -0
  34. package/agents/react-executor/SYSTEM.md +32 -0
  35. package/agents/react-executor/agent.yml +58 -0
  36. package/agents/react-native-executor/SYSTEM.md +32 -0
  37. package/agents/react-native-executor/agent.yml +53 -0
  38. package/agents/security-auditor/SYSTEM.md +32 -0
  39. package/agents/security-auditor/agent.yml +56 -0
  40. package/agents/seo-optimizer/SYSTEM.md +32 -0
  41. package/agents/seo-optimizer/agent.yml +54 -0
  42. package/agents/systems-executor/SYSTEM.md +32 -0
  43. package/agents/systems-executor/agent.yml +54 -0
  44. package/agents/tester/SYSTEM.md +32 -0
  45. package/agents/tester/agent.yml +58 -0
  46. package/agents/vue-executor/SYSTEM.md +32 -0
  47. package/agents/vue-executor/agent.yml +58 -0
  48. package/agents/web3-executor/SYSTEM.md +32 -0
  49. package/agents/web3-executor/agent.yml +55 -0
  50. package/bin/imhcode.js +1634 -0
  51. package/dist/orchestrator/builder.d.ts +23 -0
  52. package/dist/orchestrator/builder.d.ts.map +1 -0
  53. package/dist/orchestrator/builder.js +231 -0
  54. package/dist/orchestrator/builder.js.map +1 -0
  55. package/dist/orchestrator/executor.d.ts +43 -0
  56. package/dist/orchestrator/executor.d.ts.map +1 -0
  57. package/dist/orchestrator/executor.js +356 -0
  58. package/dist/orchestrator/executor.js.map +1 -0
  59. package/dist/orchestrator/index.d.ts +35 -0
  60. package/dist/orchestrator/index.d.ts.map +1 -0
  61. package/dist/orchestrator/index.js +490 -0
  62. package/dist/orchestrator/index.js.map +1 -0
  63. package/dist/orchestrator/loader.d.ts +33 -0
  64. package/dist/orchestrator/loader.d.ts.map +1 -0
  65. package/dist/orchestrator/loader.js +203 -0
  66. package/dist/orchestrator/loader.js.map +1 -0
  67. package/dist/orchestrator/registry.d.ts +63 -0
  68. package/dist/orchestrator/registry.d.ts.map +1 -0
  69. package/dist/orchestrator/registry.js +181 -0
  70. package/dist/orchestrator/registry.js.map +1 -0
  71. package/dist/orchestrator/schema.d.ts +132 -0
  72. package/dist/orchestrator/schema.d.ts.map +1 -0
  73. package/dist/orchestrator/schema.js +101 -0
  74. package/dist/orchestrator/schema.js.map +1 -0
  75. package/dist/orchestrator/session.d.ts +25 -0
  76. package/dist/orchestrator/session.d.ts.map +1 -0
  77. package/dist/orchestrator/session.js +80 -0
  78. package/dist/orchestrator/session.js.map +1 -0
  79. package/dist/orchestrator/types.d.ts +91 -0
  80. package/dist/orchestrator/types.d.ts.map +1 -0
  81. package/dist/orchestrator/types.js +7 -0
  82. package/dist/orchestrator/types.js.map +1 -0
  83. package/package.json +95 -0
  84. package/skills/AnimatePresence/SKILL.md +3 -0
  85. package/skills/accessibility/SKILL.md +146 -0
  86. package/skills/agent-architecture-audit/SKILL.md +256 -0
  87. package/skills/agent-eval/SKILL.md +145 -0
  88. package/skills/agent-introspection-debugging/SKILL.md +153 -0
  89. package/skills/agentic-engineering/SKILL.md +63 -0
  90. package/skills/ai-regression-testing/SKILL.md +385 -0
  91. package/skills/android-clean-architecture/SKILL.md +339 -0
  92. package/skills/animated-component-libraries/SKILL.md +8 -0
  93. package/skills/animejs/SKILL.md +8 -0
  94. package/skills/api-connector-builder/SKILL.md +120 -0
  95. package/skills/api-design/SKILL.md +523 -0
  96. package/skills/apple/SKILL.md +158 -0
  97. package/skills/apple/metadata.json +16 -0
  98. package/skills/architecture-decision-records/SKILL.md +179 -0
  99. package/skills/article-writing/SKILL.md +79 -0
  100. package/skills/automation-audit-ops/SKILL.md +142 -0
  101. package/skills/awwwards/SKILL.md +162 -0
  102. package/skills/awwwards/metadata.json +16 -0
  103. package/skills/babylonjs-engine/SKILL.md +8 -0
  104. package/skills/backend-patterns/SKILL.md +561 -0
  105. package/skills/baqir-docs/SKILL.md +3 -0
  106. package/skills/barba-js/SKILL.md +8 -0
  107. package/skills/benchmark/SKILL.md +93 -0
  108. package/skills/best-practice/SKILL.md +7 -0
  109. package/skills/best-practice/assets/claude-memory/claude-memory-monorepo.jpg +0 -0
  110. package/skills/best-practice/assets/claude-power-ups/dial-the-model-1.png +0 -0
  111. package/skills/best-practice/assets/claude-power-ups/dial-the-model-2.png +0 -0
  112. package/skills/best-practice/assets/claude-power-ups/dial-the-model-3.png +0 -0
  113. package/skills/best-practice/assets/claude-power-ups/powerup-menu.png +0 -0
  114. package/skills/best-practice/claude-cli-startup-flags.md +231 -0
  115. package/skills/best-practice/claude-commands.md +132 -0
  116. package/skills/best-practice/claude-mcp.md +132 -0
  117. package/skills/best-practice/claude-memory.md +121 -0
  118. package/skills/best-practice/claude-power-ups.md +66 -0
  119. package/skills/best-practice/claude-settings.md +1170 -0
  120. package/skills/best-practice/claude-skills.md +58 -0
  121. package/skills/best-practice/claude-subagents.md +56 -0
  122. package/skills/blender-motion-state-inspection/SKILL.md +164 -0
  123. package/skills/bootstrap-patterns/SKILL.md +316 -0
  124. package/skills/brand-guidelines/LICENSE.txt +202 -0
  125. package/skills/brand-guidelines/SKILL.md +73 -0
  126. package/skills/brand-voice/SKILL.md +97 -0
  127. package/skills/brand-voice/references/voice-profile-schema.md +55 -0
  128. package/skills/browser-qa/SKILL.md +87 -0
  129. package/skills/canary-watch/SKILL.md +107 -0
  130. package/skills/canvas-design/LICENSE.txt +202 -0
  131. package/skills/canvas-design/SKILL.md +8 -0
  132. package/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
  133. package/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  134. package/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  135. package/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
  136. package/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  137. package/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
  138. package/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  139. package/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  140. package/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
  141. package/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  142. package/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  143. package/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  144. package/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
  145. package/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  146. package/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
  147. package/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  148. package/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
  149. package/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  150. package/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  151. package/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
  152. package/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  153. package/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
  154. package/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  155. package/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  156. package/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
  157. package/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  158. package/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  159. package/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  160. package/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  161. package/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  162. package/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  163. package/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  164. package/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  165. package/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
  166. package/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  167. package/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  168. package/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  169. package/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
  170. package/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  171. package/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  172. package/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
  173. package/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  174. package/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  175. package/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  176. package/skills/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
  177. package/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
  178. package/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  179. package/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  180. package/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  181. package/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  182. package/skills/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
  183. package/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  184. package/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  185. package/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
  186. package/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  187. package/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
  188. package/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  189. package/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  190. package/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
  191. package/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  192. package/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  193. package/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
  194. package/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
  195. package/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  196. package/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  197. package/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
  198. package/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  199. package/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
  200. package/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  201. package/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  202. package/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
  203. package/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  204. package/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
  205. package/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  206. package/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  207. package/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  208. package/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  209. package/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
  210. package/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  211. package/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
  212. package/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  213. package/skills/caveman/SKILL.md +74 -0
  214. package/skills/changelog-generator/SKILL.md +104 -0
  215. package/skills/cisco-ios-patterns/SKILL.md +163 -0
  216. package/skills/ckm:design-system/SKILL.md +3 -0
  217. package/skills/ckm:slides/SKILL.md +3 -0
  218. package/skills/claude-red/SKILL.md +35 -0
  219. package/skills/click-path-audit/SKILL.md +244 -0
  220. package/skills/clickhouse-io/SKILL.md +439 -0
  221. package/skills/codebase-onboarding/SKILL.md +233 -0
  222. package/skills/coding-standards/SKILL.md +549 -0
  223. package/skills/compose-multiplatform-patterns/SKILL.md +299 -0
  224. package/skills/computational-architecture/SKILL.md +31 -0
  225. package/skills/content-engine/SKILL.md +131 -0
  226. package/skills/content-research-writer/SKILL.md +538 -0
  227. package/skills/continuous-agent-loop/SKILL.md +45 -0
  228. package/skills/cost-aware-llm-pipeline/SKILL.md +183 -0
  229. package/skills/cpp-coding-standards/SKILL.md +723 -0
  230. package/skills/crosspost/SKILL.md +111 -0
  231. package/skills/css-container-queries/SKILL.md +132 -0
  232. package/skills/customer-billing-ops/SKILL.md +140 -0
  233. package/skills/customs-trade-compliance/SKILL.md +263 -0
  234. package/skills/dart-flutter-patterns/SKILL.md +563 -0
  235. package/skills/dashboard-builder/SKILL.md +108 -0
  236. package/skills/data-scraper-agent/SKILL.md +764 -0
  237. package/skills/database-migrations/SKILL.md +429 -0
  238. package/skills/deep-research/SKILL.md +159 -0
  239. package/skills/defi-amm-security/SKILL.md +166 -0
  240. package/skills/deployment-patterns/SKILL.md +427 -0
  241. package/skills/design-auditor/README.md +504 -0
  242. package/skills/design-auditor/README_KR.md +327 -0
  243. package/skills/design-auditor/SKILL.md +8 -0
  244. package/skills/design-auditor/references/animation.md +300 -0
  245. package/skills/design-auditor/references/color.md +241 -0
  246. package/skills/design-auditor/references/corner-radius.md +331 -0
  247. package/skills/design-auditor/references/elevation.md +249 -0
  248. package/skills/design-auditor/references/ethics.md +877 -0
  249. package/skills/design-auditor/references/figma-mcp.md +377 -0
  250. package/skills/design-auditor/references/heuristics.md +730 -0
  251. package/skills/design-auditor/references/i18n.md +254 -0
  252. package/skills/design-auditor/references/iconography.md +201 -0
  253. package/skills/design-auditor/references/microcopy.md +227 -0
  254. package/skills/design-auditor/references/navigation.md +311 -0
  255. package/skills/design-auditor/references/spacing.md +313 -0
  256. package/skills/design-auditor/references/states.md +254 -0
  257. package/skills/design-auditor/references/tokens.md +286 -0
  258. package/skills/design-auditor/references/typography.md +273 -0
  259. package/skills/design-system/SKILL.md +82 -0
  260. package/skills/design-tokens-system/SKILL.md +156 -0
  261. package/skills/development-workflows/SKILL.md +7 -0
  262. package/skills/development-workflows/cross-model-workflow/assets/cross-model-workflow.png +0 -0
  263. package/skills/development-workflows/cross-model-workflow/cross-model-workflow.md +55 -0
  264. package/skills/development-workflows/rpi/.claude/agents/code-reviewer.md +21 -0
  265. package/skills/development-workflows/rpi/.claude/agents/constitutional-validator.md +288 -0
  266. package/skills/development-workflows/rpi/.claude/agents/documentation-analyst-writer.md +64 -0
  267. package/skills/development-workflows/rpi/.claude/agents/product-manager.md +15 -0
  268. package/skills/development-workflows/rpi/.claude/agents/requirement-parser.md +238 -0
  269. package/skills/development-workflows/rpi/.claude/agents/senior-software-engineer.md +15 -0
  270. package/skills/development-workflows/rpi/.claude/agents/technical-cto-advisor.md +201 -0
  271. package/skills/development-workflows/rpi/.claude/agents/ux-designer.md +14 -0
  272. package/skills/development-workflows/rpi/.claude/commands/rpi/implement.md +634 -0
  273. package/skills/development-workflows/rpi/.claude/commands/rpi/plan.md +416 -0
  274. package/skills/development-workflows/rpi/.claude/commands/rpi/research.md +381 -0
  275. package/skills/development-workflows/rpi/rpi-workflow.md +101 -0
  276. package/skills/development-workflows/rpi/rpi-workflow.svg +178 -0
  277. package/skills/django-celery/SKILL.md +457 -0
  278. package/skills/django-patterns/SKILL.md +734 -0
  279. package/skills/django-security/SKILL.md +593 -0
  280. package/skills/django-tdd/SKILL.md +729 -0
  281. package/skills/dmux-workflows/SKILL.md +7 -0
  282. package/skills/docker-patterns/SKILL.md +364 -0
  283. package/skills/documentation-lookup/SKILL.md +90 -0
  284. package/skills/domain-name-brainstormer/SKILL.md +212 -0
  285. package/skills/dribbble/SKILL.md +160 -0
  286. package/skills/dribbble/metadata.json +16 -0
  287. package/skills/e2e-testing/SKILL.md +326 -0
  288. package/skills/empirical-research/SKILL.md +22 -0
  289. package/skills/error-handling/SKILL.md +376 -0
  290. package/skills/eval-harness/SKILL.md +270 -0
  291. package/skills/evm-token-decimals/SKILL.md +130 -0
  292. package/skills/fastapi-patterns/SKILL.md +327 -0
  293. package/skills/finance-billing-ops/SKILL.md +127 -0
  294. package/skills/flox-environments/SKILL.md +496 -0
  295. package/skills/flutter-dart-code-review/SKILL.md +435 -0
  296. package/skills/foundation-models-on-device/SKILL.md +243 -0
  297. package/skills/framer/SKILL.md +159 -0
  298. package/skills/framer/metadata.json +16 -0
  299. package/skills/frontend-design/LICENSE.txt +21 -0
  300. package/skills/frontend-design/README.md +71 -0
  301. package/skills/frontend-design/SKILL.md +115 -0
  302. package/skills/frontend-design-direction/SKILL.md +92 -0
  303. package/skills/frontend-patterns/SKILL.md +7 -0
  304. package/skills/frontend-slides/SKILL.md +184 -0
  305. package/skills/frontend-slides/STYLE_PRESETS.md +330 -0
  306. package/skills/frontend-slides/animation-patterns.md +122 -0
  307. package/skills/frontend-slides/html-template.md +419 -0
  308. package/skills/frontend-slides/scripts/export-pdf.sh +418 -0
  309. package/skills/frontend-slides/scripts/extract-pptx.py +96 -0
  310. package/skills/frontend-slides/viewport-base.css +153 -0
  311. package/skills/gateguard/SKILL.md +125 -0
  312. package/skills/git-workflow/SKILL.md +715 -0
  313. package/skills/github-ops/SKILL.md +144 -0
  314. package/skills/golang-patterns/SKILL.md +674 -0
  315. package/skills/golang-testing/SKILL.md +720 -0
  316. package/skills/graphify/__init__.py +28 -0
  317. package/skills/graphify/__main__.py +2899 -0
  318. package/skills/graphify/analyze.py +608 -0
  319. package/skills/graphify/benchmark.py +152 -0
  320. package/skills/graphify/build.py +366 -0
  321. package/skills/graphify/cache.py +244 -0
  322. package/skills/graphify/callflow_html.py +2014 -0
  323. package/skills/graphify/cluster.py +267 -0
  324. package/skills/graphify/dedup.py +414 -0
  325. package/skills/graphify/detect.py +1018 -0
  326. package/skills/graphify/export.py +1264 -0
  327. package/skills/graphify/extract.py +6646 -0
  328. package/skills/graphify/global_graph.py +155 -0
  329. package/skills/graphify/google_workspace.py +223 -0
  330. package/skills/graphify/hooks.py +304 -0
  331. package/skills/graphify/ingest.py +331 -0
  332. package/skills/graphify/llm.py +1111 -0
  333. package/skills/graphify/manifest.py +4 -0
  334. package/skills/graphify/prs.py +746 -0
  335. package/skills/graphify/report.py +203 -0
  336. package/skills/graphify/security.py +242 -0
  337. package/skills/graphify/serve.py +899 -0
  338. package/skills/graphify/skill-aider.md +1229 -0
  339. package/skills/graphify/skill-claw.md +1229 -0
  340. package/skills/graphify/skill-codex.md +1290 -0
  341. package/skills/graphify/skill-copilot.md +1317 -0
  342. package/skills/graphify/skill-droid.md +1285 -0
  343. package/skills/graphify/skill-kiro.md +1228 -0
  344. package/skills/graphify/skill-opencode.md +1340 -0
  345. package/skills/graphify/skill-pi.md +1228 -0
  346. package/skills/graphify/skill-trae.md +1254 -0
  347. package/skills/graphify/skill-vscode.md +258 -0
  348. package/skills/graphify/skill-windows.md +1434 -0
  349. package/skills/graphify/skill.md +1086 -0
  350. package/skills/graphify/transcribe.py +184 -0
  351. package/skills/graphify/tree_html.py +580 -0
  352. package/skills/graphify/validate.py +72 -0
  353. package/skills/graphify/watch.py +728 -0
  354. package/skills/graphify/wiki.py +259 -0
  355. package/skills/growth-marketing/SKILL.md +26 -0
  356. package/skills/gsap-scrolltrigger/SKILL.md +8 -0
  357. package/skills/healthcare-cdss-patterns/SKILL.md +245 -0
  358. package/skills/healthcare-emr-patterns/SKILL.md +159 -0
  359. package/skills/healthcare-phi-compliance/SKILL.md +145 -0
  360. package/skills/hexagonal-architecture/SKILL.md +276 -0
  361. package/skills/hipaa-compliance/SKILL.md +78 -0
  362. package/skills/homelab-network-setup/SKILL.md +129 -0
  363. package/skills/imhcode/SKILL.md +183 -0
  364. package/skills/imhcode-brainstorm/SKILL.md +37 -0
  365. package/skills/imhcode-codebase-knowledge/SKILL.md +37 -0
  366. package/skills/imhcode-codebase-knowledge/assets/templates/ARCHITECTURE.md +49 -0
  367. package/skills/imhcode-codebase-knowledge/assets/templates/CONCERNS.md +56 -0
  368. package/skills/imhcode-codebase-knowledge/assets/templates/CONVENTIONS.md +52 -0
  369. package/skills/imhcode-codebase-knowledge/assets/templates/INTEGRATIONS.md +48 -0
  370. package/skills/imhcode-codebase-knowledge/assets/templates/STACK.md +56 -0
  371. package/skills/imhcode-codebase-knowledge/assets/templates/STRUCTURE.md +44 -0
  372. package/skills/imhcode-codebase-knowledge/assets/templates/TESTING.md +57 -0
  373. package/skills/imhcode-codebase-knowledge/references/inquiry-checkpoints.md +70 -0
  374. package/skills/imhcode-codebase-knowledge/references/stack-detection.md +131 -0
  375. package/skills/imhcode-codebase-knowledge/scripts/scan.py +712 -0
  376. package/skills/imhcode-dispatch/SKILL.md +31 -0
  377. package/skills/imhcode-saas-architect/SKILL.md +55 -0
  378. package/skills/imhcode-security/SKILL.md +42 -0
  379. package/skills/imhcode-sprint-planner/SKILL.md +42 -0
  380. package/skills/inventory-demand-planning/SKILL.md +247 -0
  381. package/skills/investor-materials/SKILL.md +96 -0
  382. package/skills/investor-outreach/SKILL.md +91 -0
  383. package/skills/ios-icon-gen/SKILL.md +157 -0
  384. package/skills/ios-icon-gen/scripts/generate_icons.swift +258 -0
  385. package/skills/ios-icon-gen/scripts/iconify_gen.sh +235 -0
  386. package/skills/java-coding-standards/SKILL.md +383 -0
  387. package/skills/jpa-patterns/SKILL.md +151 -0
  388. package/skills/kotlin-ktor-patterns/SKILL.md +689 -0
  389. package/skills/kotlin-patterns/SKILL.md +711 -0
  390. package/skills/laravel-patterns/SKILL.md +415 -0
  391. package/skills/laravel-plugin-discovery/SKILL.md +229 -0
  392. package/skills/laravel-security/SKILL.md +285 -0
  393. package/skills/laravel-tdd/SKILL.md +283 -0
  394. package/skills/laravel-verification/SKILL.md +179 -0
  395. package/skills/lightweight-3d-effects/SKILL.md +8 -0
  396. package/skills/linear/SKILL.md +156 -0
  397. package/skills/linear/metadata.json +16 -0
  398. package/skills/liquid-glass-design/SKILL.md +279 -0
  399. package/skills/llm-trading-agent-security/SKILL.md +146 -0
  400. package/skills/locomotive-scroll/SKILL.md +8 -0
  401. package/skills/logistics-exception-management/SKILL.md +222 -0
  402. package/skills/lottie-animations/SKILL.md +8 -0
  403. package/skills/make-interfaces-feel-better/SKILL.md +151 -0
  404. package/skills/mcp-server-patterns/SKILL.md +69 -0
  405. package/skills/meeting-insights-analyzer/SKILL.md +327 -0
  406. package/skills/micro-interactions/SKILL.md +178 -0
  407. package/skills/mle-workflow/SKILL.md +346 -0
  408. package/skills/mobbin/SKILL.md +157 -0
  409. package/skills/mobbin/metadata.json +16 -0
  410. package/skills/mobile-app-design/README.md +302 -0
  411. package/skills/mobile-app-design/SKILL.md +330 -0
  412. package/skills/mobile-app-design/examples/design-system-config.ts +685 -0
  413. package/skills/mobile-app-design/examples/form-validation-example.tsx +501 -0
  414. package/skills/mobile-app-design/examples/optimized-list-example.tsx +384 -0
  415. package/skills/mobile-app-design/examples/profile-screen-example.tsx +450 -0
  416. package/skills/mobile-app-design/references/accessibility-checklist.md +525 -0
  417. package/skills/mobile-app-design/references/android-guidelines.md +582 -0
  418. package/skills/mobile-app-design/references/common-mistakes.md +834 -0
  419. package/skills/mobile-app-design/references/ios-guidelines.md +421 -0
  420. package/skills/mobile-app-design/references/performance-patterns.md +705 -0
  421. package/skills/mobile-app-design/references/platform-differences.md +353 -0
  422. package/skills/mobile-app-design/references/ui-libraries.md +729 -0
  423. package/skills/mobile-app-design/scripts/accessibility-audit.sh +281 -0
  424. package/skills/mobile-app-design/scripts/check-contrast.py +188 -0
  425. package/skills/mobile-app-design/scripts/validate-touch-targets.sh +228 -0
  426. package/skills/mobile-app-ui-design/INDEX.md +131 -0
  427. package/skills/mobile-app-ui-design/README.md +135 -0
  428. package/skills/mobile-app-ui-design/SKILL.md +7 -0
  429. package/skills/mobile-app-ui-design/references/industry-conventions.md +151 -0
  430. package/skills/modern-web-design/SKILL.md +8 -0
  431. package/skills/motion-advanced/SKILL.md +596 -0
  432. package/skills/motion-design/SKILL.md +21 -0
  433. package/skills/motion-foundations/SKILL.md +299 -0
  434. package/skills/motion-framer/SKILL.md +8 -0
  435. package/skills/motion-patterns/SKILL.md +435 -0
  436. package/skills/motion-ui/SKILL.md +575 -0
  437. package/skills/mysql-patterns/SKILL.md +412 -0
  438. package/skills/nestjs-patterns/SKILL.md +230 -0
  439. package/skills/network-config-validation/SKILL.md +210 -0
  440. package/skills/nextjs-turbopack/SKILL.md +44 -0
  441. package/skills/nodejs-keccak256/SKILL.md +102 -0
  442. package/skills/nothing-design/SKILL.md +177 -0
  443. package/skills/nothing-design/references/components.md +153 -0
  444. package/skills/nothing-design/references/platform-mapping.md +64 -0
  445. package/skills/nothing-design/references/tokens.md +142 -0
  446. package/skills/nuxt4-patterns/SKILL.md +100 -0
  447. package/skills/openclaw-persona-forge/SKILL.md +288 -0
  448. package/skills/openclaw-persona-forge/gacha.py +224 -0
  449. package/skills/openclaw-persona-forge/gacha.sh +5 -0
  450. package/skills/openclaw-persona-forge/references/avatar-style.md +124 -0
  451. package/skills/openclaw-persona-forge/references/boundary-rules.md +53 -0
  452. package/skills/openclaw-persona-forge/references/error-handling.md +53 -0
  453. package/skills/openclaw-persona-forge/references/identity-tension.md +48 -0
  454. package/skills/openclaw-persona-forge/references/naming-system.md +39 -0
  455. package/skills/openclaw-persona-forge/references/output-template.md +166 -0
  456. package/skills/orchestration-workflow/SKILL.md +199 -0
  457. package/skills/orchestration-workflow/orchestration-workflow.gif +0 -0
  458. package/skills/orchestration-workflow/orchestration-workflow.md +199 -0
  459. package/skills/orchestration-workflow/orchestration-workflow.svg +78 -0
  460. package/skills/orchestration-workflow/output.md +13 -0
  461. package/skills/orchestration-workflow/weather.svg +6 -0
  462. package/skills/pixijs-2d/SKILL.md +8 -0
  463. package/skills/plan-orchestrate/SKILL.md +262 -0
  464. package/skills/plankton-code-quality/SKILL.md +236 -0
  465. package/skills/postgres-patterns/SKILL.md +147 -0
  466. package/skills/ppt-mckinsey/SKILL.md +27 -0
  467. package/skills/prisma-patterns/SKILL.md +371 -0
  468. package/skills/product-capability/SKILL.md +141 -0
  469. package/skills/product-lens/SKILL.md +92 -0
  470. package/skills/production-audit/SKILL.md +206 -0
  471. package/skills/project-flow-ops/SKILL.md +111 -0
  472. package/skills/prompt-optimizer/SKILL.md +398 -0
  473. package/skills/python-patterns/SKILL.md +750 -0
  474. package/skills/python-testing/SKILL.md +816 -0
  475. package/skills/pytorch-patterns/SKILL.md +396 -0
  476. package/skills/quarkus-patterns/SKILL.md +722 -0
  477. package/skills/radix-ui-primitives/SKILL.md +86 -0
  478. package/skills/react-native-best-practices/SKILL.md +83 -0
  479. package/skills/react-native-brownfield-migration/SKILL.md +115 -0
  480. package/skills/react-spring-physics/SKILL.md +8 -0
  481. package/skills/react-three-fiber/SKILL.md +8 -0
  482. package/skills/recsys-pipeline-architect/SKILL.md +114 -0
  483. package/skills/redis-patterns/SKILL.md +403 -0
  484. package/skills/remotion-video-creation/SKILL.md +43 -0
  485. package/skills/remotion-video-creation/rules/3d.md +86 -0
  486. package/skills/remotion-video-creation/rules/animations.md +29 -0
  487. package/skills/remotion-video-creation/rules/assets/charts-bar-chart.tsx +173 -0
  488. package/skills/remotion-video-creation/rules/assets/text-animations-typewriter.tsx +100 -0
  489. package/skills/remotion-video-creation/rules/assets/text-animations-word-highlight.tsx +108 -0
  490. package/skills/remotion-video-creation/rules/assets.md +78 -0
  491. package/skills/remotion-video-creation/rules/audio.md +172 -0
  492. package/skills/remotion-video-creation/rules/calculate-metadata.md +104 -0
  493. package/skills/remotion-video-creation/rules/can-decode.md +75 -0
  494. package/skills/remotion-video-creation/rules/charts.md +58 -0
  495. package/skills/remotion-video-creation/rules/compositions.md +146 -0
  496. package/skills/remotion-video-creation/rules/display-captions.md +126 -0
  497. package/skills/remotion-video-creation/rules/extract-frames.md +229 -0
  498. package/skills/remotion-video-creation/rules/fonts.md +152 -0
  499. package/skills/remotion-video-creation/rules/get-audio-duration.md +58 -0
  500. package/skills/remotion-video-creation/rules/get-video-dimensions.md +68 -0
  501. package/skills/remotion-video-creation/rules/get-video-duration.md +58 -0
  502. package/skills/remotion-video-creation/rules/gifs.md +138 -0
  503. package/skills/remotion-video-creation/rules/images.md +130 -0
  504. package/skills/remotion-video-creation/rules/import-srt-captions.md +67 -0
  505. package/skills/remotion-video-creation/rules/lottie.md +67 -0
  506. package/skills/remotion-video-creation/rules/measuring-dom-nodes.md +34 -0
  507. package/skills/remotion-video-creation/rules/measuring-text.md +143 -0
  508. package/skills/remotion-video-creation/rules/sequencing.md +106 -0
  509. package/skills/remotion-video-creation/rules/tailwind.md +11 -0
  510. package/skills/remotion-video-creation/rules/text-animations.md +20 -0
  511. package/skills/remotion-video-creation/rules/timing.md +179 -0
  512. package/skills/remotion-video-creation/rules/transcribe-captions.md +19 -0
  513. package/skills/remotion-video-creation/rules/transitions.md +122 -0
  514. package/skills/remotion-video-creation/rules/trimming.md +52 -0
  515. package/skills/remotion-video-creation/rules/videos.md +171 -0
  516. package/skills/repo-scan/SKILL.md +78 -0
  517. package/skills/responsive-email-templates/SKILL.md +110 -0
  518. package/skills/rive-interactive/SKILL.md +8 -0
  519. package/skills/rust-patterns/SKILL.md +499 -0
  520. package/skills/rust-testing/SKILL.md +500 -0
  521. package/skills/scroll-reveal-libraries/SKILL.md +8 -0
  522. package/skills/security-bounty-hunter/SKILL.md +99 -0
  523. package/skills/security-review/SKILL.md +503 -0
  524. package/skills/security-review/cloud-infrastructure-security.md +361 -0
  525. package/skills/security-scan/SKILL.md +165 -0
  526. package/skills/seo/SKILL.md +154 -0
  527. package/skills/seo-growth/SKILL.md +34 -0
  528. package/skills/shadcn-ui-patterns/SKILL.md +123 -0
  529. package/skills/spline-interactive/SKILL.md +8 -0
  530. package/skills/springboot-patterns/SKILL.md +314 -0
  531. package/skills/springboot-security/SKILL.md +272 -0
  532. package/skills/springboot-tdd/SKILL.md +158 -0
  533. package/skills/strategic-compact/SKILL.md +131 -0
  534. package/skills/stripe/SKILL.md +168 -0
  535. package/skills/stripe/metadata.json +16 -0
  536. package/skills/swift-actor-persistence/SKILL.md +143 -0
  537. package/skills/swift-concurrency-6-2/SKILL.md +216 -0
  538. package/skills/swiftui-patterns/SKILL.md +259 -0
  539. package/skills/systematic-debugging/CREATION-LOG.md +119 -0
  540. package/skills/systematic-debugging/SKILL.md +296 -0
  541. package/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
  542. package/skills/systematic-debugging/condition-based-waiting.md +115 -0
  543. package/skills/systematic-debugging/defense-in-depth.md +122 -0
  544. package/skills/systematic-debugging/find-polluter.sh +63 -0
  545. package/skills/systematic-debugging/root-cause-tracing.md +169 -0
  546. package/skills/systematic-debugging/test-academic.md +14 -0
  547. package/skills/systematic-debugging/test-pressure-1.md +58 -0
  548. package/skills/systematic-debugging/test-pressure-2.md +68 -0
  549. package/skills/systematic-debugging/test-pressure-3.md +69 -0
  550. package/skills/tailwindcss-v4/SKILL.md +107 -0
  551. package/skills/tdd-workflow/SKILL.md +463 -0
  552. package/skills/team-builder/SKILL.md +168 -0
  553. package/skills/test-driven-development/SKILL.md +371 -0
  554. package/skills/test-driven-development/testing-anti-patterns.md +299 -0
  555. package/skills/theme-factory/LICENSE.txt +202 -0
  556. package/skills/theme-factory/SKILL.md +59 -0
  557. package/skills/theme-factory/theme-showcase.pdf +0 -0
  558. package/skills/theme-factory/themes/arctic-frost.md +19 -0
  559. package/skills/theme-factory/themes/botanical-garden.md +19 -0
  560. package/skills/theme-factory/themes/desert-rose.md +19 -0
  561. package/skills/theme-factory/themes/forest-canopy.md +19 -0
  562. package/skills/theme-factory/themes/golden-hour.md +19 -0
  563. package/skills/theme-factory/themes/midnight-galaxy.md +19 -0
  564. package/skills/theme-factory/themes/modern-minimalist.md +19 -0
  565. package/skills/theme-factory/themes/ocean-depths.md +19 -0
  566. package/skills/theme-factory/themes/sunset-boulevard.md +19 -0
  567. package/skills/theme-factory/themes/tech-innovation.md +19 -0
  568. package/skills/threejs-webgl/SKILL.md +8 -0
  569. package/skills/trailofbits-auditing/SKILL.md +30 -0
  570. package/skills/twitter-algorithm-optimizer/SKILL.md +327 -0
  571. package/skills/typeui-cli/SKILL.md +90 -0
  572. package/skills/typeui-main/DESIGN.md +114 -0
  573. package/skills/typeui-main/LICENSE.md +9 -0
  574. package/skills/typeui-main/README.md +84 -0
  575. package/skills/typeui-main/REGISTRY.md +60 -0
  576. package/skills/typeui-main/SKILL.md +114 -0
  577. package/skills/typeui-main/package-lock.json +2123 -0
  578. package/skills/typeui-main/package.json +56 -0
  579. package/skills/typeui-main/skills/typeui-cli/SKILL.md +90 -0
  580. package/skills/typeui-main/src/cli.ts +282 -0
  581. package/skills/typeui-main/src/config.ts +28 -0
  582. package/skills/typeui-main/src/domain/designSystemSchema.ts +77 -0
  583. package/skills/typeui-main/src/generation/existingDesignSystem.ts +228 -0
  584. package/skills/typeui-main/src/generation/randomDesignSystem.ts +348 -0
  585. package/skills/typeui-main/src/generation/runDesignGeneration.ts +31 -0
  586. package/skills/typeui-main/src/generation/runGeneration.ts +36 -0
  587. package/skills/typeui-main/src/generation/runPull.ts +62 -0
  588. package/skills/typeui-main/src/io/updateSkillFile.ts +118 -0
  589. package/skills/typeui-main/src/prompts/designSystem.ts +755 -0
  590. package/skills/typeui-main/src/prompts/registry.ts +72 -0
  591. package/skills/typeui-main/src/registry/registryClient.ts +246 -0
  592. package/skills/typeui-main/src/renderers/claudeRenderer.ts +10 -0
  593. package/skills/typeui-main/src/renderers/codexRenderer.ts +10 -0
  594. package/skills/typeui-main/src/renderers/cursorRenderer.ts +10 -0
  595. package/skills/typeui-main/src/renderers/index.ts +14 -0
  596. package/skills/typeui-main/src/renderers/openCodeRenderer.ts +10 -0
  597. package/skills/typeui-main/src/renderers/shared.ts +252 -0
  598. package/skills/typeui-main/src/skillMetadata.ts +19 -0
  599. package/skills/typeui-main/src/types.ts +204 -0
  600. package/skills/typeui-main/src/ui/banner.ts +20 -0
  601. package/skills/typeui-main/test/existingDesignSystem.test.ts +67 -0
  602. package/skills/typeui-main/test/orchestrator.test.ts +113 -0
  603. package/skills/typeui-main/test/randomDesignSystem.test.ts +20 -0
  604. package/skills/typeui-main/test/registryClient.test.ts +408 -0
  605. package/skills/typeui-main/test/renderers.test.ts +41 -0
  606. package/skills/typeui-main/test/runDesignGeneration.test.ts +52 -0
  607. package/skills/typeui-main/test/runPull.test.ts +92 -0
  608. package/skills/typeui-main/test/skillMetadata.test.ts +11 -0
  609. package/skills/typeui-main/test/updateSkillFile.test.ts +160 -0
  610. package/skills/typeui-main/tsconfig.json +16 -0
  611. package/skills/ui-demo/SKILL.md +465 -0
  612. package/skills/ui-to-vue/SKILL.md +134 -0
  613. package/skills/ui-ux-pro-max/.claude/skills/banner-design/SKILL.md +192 -0
  614. package/skills/ui-ux-pro-max/.claude/skills/banner-design/references/banner-sizes-and-styles.md +118 -0
  615. package/skills/ui-ux-pro-max/.claude/skills/brand/SKILL.md +97 -0
  616. package/skills/ui-ux-pro-max/.claude/skills/brand/references/approval-checklist.md +169 -0
  617. package/skills/ui-ux-pro-max/.claude/skills/brand/references/asset-organization.md +157 -0
  618. package/skills/ui-ux-pro-max/.claude/skills/brand/references/brand-guideline-template.md +140 -0
  619. package/skills/ui-ux-pro-max/.claude/skills/brand/references/color-palette-management.md +186 -0
  620. package/skills/ui-ux-pro-max/.claude/skills/brand/references/consistency-checklist.md +94 -0
  621. package/skills/ui-ux-pro-max/.claude/skills/brand/references/logo-usage-rules.md +185 -0
  622. package/skills/ui-ux-pro-max/.claude/skills/brand/references/messaging-framework.md +85 -0
  623. package/skills/ui-ux-pro-max/.claude/skills/brand/references/typography-specifications.md +214 -0
  624. package/skills/ui-ux-pro-max/.claude/skills/brand/references/update.md +118 -0
  625. package/skills/ui-ux-pro-max/.claude/skills/brand/references/visual-identity.md +96 -0
  626. package/skills/ui-ux-pro-max/.claude/skills/brand/references/voice-framework.md +88 -0
  627. package/skills/ui-ux-pro-max/.claude/skills/brand/scripts/extract-colors.cjs +341 -0
  628. package/skills/ui-ux-pro-max/.claude/skills/brand/scripts/inject-brand-context.cjs +349 -0
  629. package/skills/ui-ux-pro-max/.claude/skills/brand/scripts/sync-brand-to-tokens.cjs +266 -0
  630. package/skills/ui-ux-pro-max/.claude/skills/brand/scripts/validate-asset.cjs +387 -0
  631. package/skills/ui-ux-pro-max/.claude/skills/brand/templates/brand-guidelines-starter.md +275 -0
  632. package/skills/ui-ux-pro-max/.claude/skills/design/SKILL.md +302 -0
  633. package/skills/ui-ux-pro-max/.claude/skills/design/data/cip/deliverables.csv +51 -0
  634. package/skills/ui-ux-pro-max/.claude/skills/design/data/cip/industries.csv +21 -0
  635. package/skills/ui-ux-pro-max/.claude/skills/design/data/cip/mockup-contexts.csv +21 -0
  636. package/skills/ui-ux-pro-max/.claude/skills/design/data/cip/styles.csv +21 -0
  637. package/skills/ui-ux-pro-max/.claude/skills/design/data/icon/styles.csv +16 -0
  638. package/skills/ui-ux-pro-max/.claude/skills/design/data/logo/colors.csv +56 -0
  639. package/skills/ui-ux-pro-max/.claude/skills/design/data/logo/industries.csv +56 -0
  640. package/skills/ui-ux-pro-max/.claude/skills/design/data/logo/styles.csv +56 -0
  641. package/skills/ui-ux-pro-max/.claude/skills/design/references/banner-sizes-and-styles.md +118 -0
  642. package/skills/ui-ux-pro-max/.claude/skills/design/references/cip-deliverable-guide.md +95 -0
  643. package/skills/ui-ux-pro-max/.claude/skills/design/references/cip-design.md +121 -0
  644. package/skills/ui-ux-pro-max/.claude/skills/design/references/cip-prompt-engineering.md +84 -0
  645. package/skills/ui-ux-pro-max/.claude/skills/design/references/cip-style-guide.md +68 -0
  646. package/skills/ui-ux-pro-max/.claude/skills/design/references/design-routing.md +207 -0
  647. package/skills/ui-ux-pro-max/.claude/skills/design/references/icon-design.md +122 -0
  648. package/skills/ui-ux-pro-max/.claude/skills/design/references/logo-color-psychology.md +101 -0
  649. package/skills/ui-ux-pro-max/.claude/skills/design/references/logo-design.md +92 -0
  650. package/skills/ui-ux-pro-max/.claude/skills/design/references/logo-prompt-engineering.md +158 -0
  651. package/skills/ui-ux-pro-max/.claude/skills/design/references/logo-style-guide.md +109 -0
  652. package/skills/ui-ux-pro-max/.claude/skills/design/references/slides-copywriting-formulas.md +84 -0
  653. package/skills/ui-ux-pro-max/.claude/skills/design/references/slides-create.md +4 -0
  654. package/skills/ui-ux-pro-max/.claude/skills/design/references/slides-html-template.md +295 -0
  655. package/skills/ui-ux-pro-max/.claude/skills/design/references/slides-layout-patterns.md +137 -0
  656. package/skills/ui-ux-pro-max/.claude/skills/design/references/slides-strategies.md +94 -0
  657. package/skills/ui-ux-pro-max/.claude/skills/design/references/slides.md +42 -0
  658. package/skills/ui-ux-pro-max/.claude/skills/design/references/social-photos-design.md +329 -0
  659. package/skills/ui-ux-pro-max/.claude/skills/design/scripts/cip/core.py +215 -0
  660. package/skills/ui-ux-pro-max/.claude/skills/design/scripts/cip/generate.py +484 -0
  661. package/skills/ui-ux-pro-max/.claude/skills/design/scripts/cip/render-html.py +424 -0
  662. package/skills/ui-ux-pro-max/.claude/skills/design/scripts/cip/search.py +127 -0
  663. package/skills/ui-ux-pro-max/.claude/skills/design/scripts/icon/generate.py +487 -0
  664. package/skills/ui-ux-pro-max/.claude/skills/design/scripts/logo/core.py +175 -0
  665. package/skills/ui-ux-pro-max/.claude/skills/design/scripts/logo/generate.py +362 -0
  666. package/skills/ui-ux-pro-max/.claude/skills/design/scripts/logo/search.py +114 -0
  667. package/skills/ui-ux-pro-max/.claude/skills/design-system/SKILL.md +244 -0
  668. package/skills/ui-ux-pro-max/.claude/skills/design-system/data/slide-backgrounds.csv +11 -0
  669. package/skills/ui-ux-pro-max/.claude/skills/design-system/data/slide-charts.csv +26 -0
  670. package/skills/ui-ux-pro-max/.claude/skills/design-system/data/slide-color-logic.csv +14 -0
  671. package/skills/ui-ux-pro-max/.claude/skills/design-system/data/slide-copy.csv +26 -0
  672. package/skills/ui-ux-pro-max/.claude/skills/design-system/data/slide-layout-logic.csv +16 -0
  673. package/skills/ui-ux-pro-max/.claude/skills/design-system/data/slide-layouts.csv +26 -0
  674. package/skills/ui-ux-pro-max/.claude/skills/design-system/data/slide-strategies.csv +16 -0
  675. package/skills/ui-ux-pro-max/.claude/skills/design-system/data/slide-typography.csv +15 -0
  676. package/skills/ui-ux-pro-max/.claude/skills/design-system/references/component-specs.md +236 -0
  677. package/skills/ui-ux-pro-max/.claude/skills/design-system/references/component-tokens.md +214 -0
  678. package/skills/ui-ux-pro-max/.claude/skills/design-system/references/primitive-tokens.md +203 -0
  679. package/skills/ui-ux-pro-max/.claude/skills/design-system/references/semantic-tokens.md +215 -0
  680. package/skills/ui-ux-pro-max/.claude/skills/design-system/references/states-and-variants.md +241 -0
  681. package/skills/ui-ux-pro-max/.claude/skills/design-system/references/tailwind-integration.md +251 -0
  682. package/skills/ui-ux-pro-max/.claude/skills/design-system/references/token-architecture.md +224 -0
  683. package/skills/ui-ux-pro-max/.claude/skills/design-system/scripts/embed-tokens.cjs +99 -0
  684. package/skills/ui-ux-pro-max/.claude/skills/design-system/scripts/fetch-background.py +317 -0
  685. package/skills/ui-ux-pro-max/.claude/skills/design-system/scripts/generate-slide.py +753 -0
  686. package/skills/ui-ux-pro-max/.claude/skills/design-system/scripts/generate-tokens.cjs +205 -0
  687. package/skills/ui-ux-pro-max/.claude/skills/design-system/scripts/html-token-validator.py +327 -0
  688. package/skills/ui-ux-pro-max/.claude/skills/design-system/scripts/search-slides.py +218 -0
  689. package/skills/ui-ux-pro-max/.claude/skills/design-system/scripts/slide-token-validator.py +35 -0
  690. package/skills/ui-ux-pro-max/.claude/skills/design-system/scripts/slide_search_core.py +453 -0
  691. package/skills/ui-ux-pro-max/.claude/skills/design-system/scripts/validate-tokens.cjs +251 -0
  692. package/skills/ui-ux-pro-max/.claude/skills/design-system/templates/design-tokens-starter.json +143 -0
  693. package/skills/ui-ux-pro-max/.claude/skills/slides/SKILL.md +42 -0
  694. package/skills/ui-ux-pro-max/.claude/skills/slides/references/copywriting-formulas.md +84 -0
  695. package/skills/ui-ux-pro-max/.claude/skills/slides/references/create.md +4 -0
  696. package/skills/ui-ux-pro-max/.claude/skills/slides/references/html-template.md +295 -0
  697. package/skills/ui-ux-pro-max/.claude/skills/slides/references/layout-patterns.md +137 -0
  698. package/skills/ui-ux-pro-max/.claude/skills/slides/references/slide-strategies.md +94 -0
  699. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/LICENSE.txt +202 -0
  700. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/SKILL.md +324 -0
  701. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/ArsenalSC-OFL.txt +93 -0
  702. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  703. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  704. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/BigShoulders-OFL.txt +93 -0
  705. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  706. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/Boldonse-OFL.txt +93 -0
  707. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/Boldonse-Regular.ttf +0 -0
  708. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  709. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
  710. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  711. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  712. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  713. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/CrimsonPro-OFL.txt +93 -0
  714. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  715. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/DMMono-OFL.txt +93 -0
  716. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/DMMono-Regular.ttf +0 -0
  717. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/EricaOne-OFL.txt +94 -0
  718. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/EricaOne-Regular.ttf +0 -0
  719. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/GeistMono-Bold.ttf +0 -0
  720. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/GeistMono-OFL.txt +93 -0
  721. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/GeistMono-Regular.ttf +0 -0
  722. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/Gloock-OFL.txt +93 -0
  723. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/Gloock-Regular.ttf +0 -0
  724. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  725. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
  726. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  727. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  728. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  729. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  730. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  731. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  732. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  733. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  734. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/InstrumentSans-OFL.txt +93 -0
  735. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  736. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  737. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  738. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/Italiana-OFL.txt +93 -0
  739. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/Italiana-Regular.ttf +0 -0
  740. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  741. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
  742. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  743. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/Jura-Light.ttf +0 -0
  744. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/Jura-Medium.ttf +0 -0
  745. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/Jura-OFL.txt +93 -0
  746. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
  747. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  748. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/Lora-Bold.ttf +0 -0
  749. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  750. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/Lora-Italic.ttf +0 -0
  751. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/Lora-OFL.txt +93 -0
  752. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/Lora-Regular.ttf +0 -0
  753. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/NationalPark-Bold.ttf +0 -0
  754. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/NationalPark-OFL.txt +93 -0
  755. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/NationalPark-Regular.ttf +0 -0
  756. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
  757. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  758. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/Outfit-Bold.ttf +0 -0
  759. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/Outfit-OFL.txt +93 -0
  760. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/Outfit-Regular.ttf +0 -0
  761. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  762. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/PixelifySans-OFL.txt +93 -0
  763. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/PoiretOne-OFL.txt +93 -0
  764. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  765. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  766. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/RedHatMono-OFL.txt +93 -0
  767. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  768. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/Silkscreen-OFL.txt +93 -0
  769. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  770. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  771. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/SmoochSans-OFL.txt +93 -0
  772. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/Tektur-Medium.ttf +0 -0
  773. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/Tektur-OFL.txt +93 -0
  774. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/Tektur-Regular.ttf +0 -0
  775. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/WorkSans-Bold.ttf +0 -0
  776. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  777. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/WorkSans-Italic.ttf +0 -0
  778. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/WorkSans-OFL.txt +93 -0
  779. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/WorkSans-Regular.ttf +0 -0
  780. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/YoungSerif-OFL.txt +93 -0
  781. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  782. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/references/canvas-design-system.md +320 -0
  783. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/references/shadcn-accessibility.md +471 -0
  784. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/references/shadcn-components.md +424 -0
  785. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/references/shadcn-theming.md +373 -0
  786. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/references/tailwind-customization.md +483 -0
  787. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/references/tailwind-responsive.md +382 -0
  788. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/references/tailwind-utilities.md +455 -0
  789. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/scripts/.coverage +0 -0
  790. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/scripts/requirements.txt +17 -0
  791. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/scripts/shadcn_add.py +292 -0
  792. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/scripts/tailwind_config_gen.py +456 -0
  793. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/scripts/tests/coverage-ui.json +1 -0
  794. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/scripts/tests/requirements.txt +3 -0
  795. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/scripts/tests/test_shadcn_add.py +266 -0
  796. package/skills/ui-ux-pro-max/.claude/skills/ui-styling/scripts/tests/test_tailwind_config_gen.py +336 -0
  797. package/skills/ui-ux-pro-max/.claude/skills/ui-ux-pro-max/SKILL.md +659 -0
  798. package/skills/ui-ux-pro-max/.claude-plugin/marketplace.json +35 -0
  799. package/skills/ui-ux-pro-max/.claude-plugin/plugin.json +11 -0
  800. package/skills/ui-ux-pro-max/.github/workflows/claude-code-review.yml +44 -0
  801. package/skills/ui-ux-pro-max/.github/workflows/claude.yml +50 -0
  802. package/skills/ui-ux-pro-max/.github/workflows/python-package-conda.yml +34 -0
  803. package/skills/ui-ux-pro-max/CLAUDE.md +98 -0
  804. package/skills/ui-ux-pro-max/LICENSE +21 -0
  805. package/skills/ui-ux-pro-max/README.md +513 -0
  806. package/skills/ui-ux-pro-max/SKILL.md +292 -0
  807. package/skills/ui-ux-pro-max/cli/README.md +63 -0
  808. package/skills/ui-ux-pro-max/cli/assets/data/_sync_all.py +414 -0
  809. package/skills/ui-ux-pro-max/cli/assets/data/app-interface.csv +31 -0
  810. package/skills/ui-ux-pro-max/cli/assets/data/charts.csv +26 -0
  811. package/skills/ui-ux-pro-max/cli/assets/data/colors.csv +162 -0
  812. package/skills/ui-ux-pro-max/cli/assets/data/design.csv +1776 -0
  813. package/skills/ui-ux-pro-max/cli/assets/data/draft.csv +1779 -0
  814. package/skills/ui-ux-pro-max/cli/assets/data/google-fonts.csv +1924 -0
  815. package/skills/ui-ux-pro-max/cli/assets/data/icons.csv +105 -0
  816. package/skills/ui-ux-pro-max/cli/assets/data/landing.csv +31 -0
  817. package/skills/ui-ux-pro-max/cli/assets/data/products.csv +162 -0
  818. package/skills/ui-ux-pro-max/cli/assets/data/react-performance.csv +45 -0
  819. package/skills/ui-ux-pro-max/cli/assets/data/stacks/angular.csv +51 -0
  820. package/skills/ui-ux-pro-max/cli/assets/data/stacks/astro.csv +54 -0
  821. package/skills/ui-ux-pro-max/cli/assets/data/stacks/flutter.csv +53 -0
  822. package/skills/ui-ux-pro-max/cli/assets/data/stacks/html-tailwind.csv +56 -0
  823. package/skills/ui-ux-pro-max/cli/assets/data/stacks/jetpack-compose.csv +53 -0
  824. package/skills/ui-ux-pro-max/cli/assets/data/stacks/laravel.csv +51 -0
  825. package/skills/ui-ux-pro-max/cli/assets/data/stacks/nextjs.csv +53 -0
  826. package/skills/ui-ux-pro-max/cli/assets/data/stacks/nuxt-ui.csv +51 -0
  827. package/skills/ui-ux-pro-max/cli/assets/data/stacks/nuxtjs.csv +59 -0
  828. package/skills/ui-ux-pro-max/cli/assets/data/stacks/react-native.csv +52 -0
  829. package/skills/ui-ux-pro-max/cli/assets/data/stacks/react.csv +54 -0
  830. package/skills/ui-ux-pro-max/cli/assets/data/stacks/shadcn.csv +61 -0
  831. package/skills/ui-ux-pro-max/cli/assets/data/stacks/svelte.csv +54 -0
  832. package/skills/ui-ux-pro-max/cli/assets/data/stacks/swiftui.csv +51 -0
  833. package/skills/ui-ux-pro-max/cli/assets/data/stacks/threejs.csv +54 -0
  834. package/skills/ui-ux-pro-max/cli/assets/data/stacks/vue.csv +50 -0
  835. package/skills/ui-ux-pro-max/cli/assets/data/styles.csv +85 -0
  836. package/skills/ui-ux-pro-max/cli/assets/data/typography.csv +74 -0
  837. package/skills/ui-ux-pro-max/cli/assets/data/ui-reasoning.csv +162 -0
  838. package/skills/ui-ux-pro-max/cli/assets/data/ux-guidelines.csv +100 -0
  839. package/skills/ui-ux-pro-max/cli/assets/scripts/core.py +247 -0
  840. package/skills/ui-ux-pro-max/cli/assets/scripts/design_system.py +1148 -0
  841. package/skills/ui-ux-pro-max/cli/assets/scripts/search.py +114 -0
  842. package/skills/ui-ux-pro-max/cli/assets/templates/base/quick-reference.md +297 -0
  843. package/skills/ui-ux-pro-max/cli/assets/templates/base/skill-content.md +353 -0
  844. package/skills/ui-ux-pro-max/cli/assets/templates/platforms/agent.json +21 -0
  845. package/skills/ui-ux-pro-max/cli/assets/templates/platforms/augment.json +18 -0
  846. package/skills/ui-ux-pro-max/cli/assets/templates/platforms/claude.json +21 -0
  847. package/skills/ui-ux-pro-max/cli/assets/templates/platforms/codebuddy.json +21 -0
  848. package/skills/ui-ux-pro-max/cli/assets/templates/platforms/codex.json +21 -0
  849. package/skills/ui-ux-pro-max/cli/assets/templates/platforms/continue.json +21 -0
  850. package/skills/ui-ux-pro-max/cli/assets/templates/platforms/copilot.json +21 -0
  851. package/skills/ui-ux-pro-max/cli/assets/templates/platforms/cursor.json +21 -0
  852. package/skills/ui-ux-pro-max/cli/assets/templates/platforms/droid.json +21 -0
  853. package/skills/ui-ux-pro-max/cli/assets/templates/platforms/gemini.json +21 -0
  854. package/skills/ui-ux-pro-max/cli/assets/templates/platforms/kilocode.json +21 -0
  855. package/skills/ui-ux-pro-max/cli/assets/templates/platforms/kiro.json +21 -0
  856. package/skills/ui-ux-pro-max/cli/assets/templates/platforms/opencode.json +21 -0
  857. package/skills/ui-ux-pro-max/cli/assets/templates/platforms/qoder.json +21 -0
  858. package/skills/ui-ux-pro-max/cli/assets/templates/platforms/roocode.json +21 -0
  859. package/skills/ui-ux-pro-max/cli/assets/templates/platforms/trae.json +21 -0
  860. package/skills/ui-ux-pro-max/cli/assets/templates/platforms/warp.json +18 -0
  861. package/skills/ui-ux-pro-max/cli/assets/templates/platforms/windsurf.json +21 -0
  862. package/skills/ui-ux-pro-max/cli/bun.lock +77 -0
  863. package/skills/ui-ux-pro-max/cli/package-lock.json +370 -0
  864. package/skills/ui-ux-pro-max/cli/package.json +48 -0
  865. package/skills/ui-ux-pro-max/cli/src/commands/init.ts +216 -0
  866. package/skills/ui-ux-pro-max/cli/src/commands/uninstall.ts +135 -0
  867. package/skills/ui-ux-pro-max/cli/src/commands/update.ts +36 -0
  868. package/skills/ui-ux-pro-max/cli/src/commands/versions.ts +42 -0
  869. package/skills/ui-ux-pro-max/cli/src/index.ts +83 -0
  870. package/skills/ui-ux-pro-max/cli/src/types/index.ts +68 -0
  871. package/skills/ui-ux-pro-max/cli/src/utils/detect.ts +120 -0
  872. package/skills/ui-ux-pro-max/cli/src/utils/extract.ts +149 -0
  873. package/skills/ui-ux-pro-max/cli/src/utils/github.ts +104 -0
  874. package/skills/ui-ux-pro-max/cli/src/utils/logger.ts +11 -0
  875. package/skills/ui-ux-pro-max/cli/src/utils/template.ts +243 -0
  876. package/skills/ui-ux-pro-max/cli/tsconfig.json +17 -0
  877. package/skills/ui-ux-pro-max/data/charts.csv +26 -0
  878. package/skills/ui-ux-pro-max/data/colors.csv +97 -0
  879. package/skills/ui-ux-pro-max/data/icons.csv +101 -0
  880. package/skills/ui-ux-pro-max/data/landing.csv +31 -0
  881. package/skills/ui-ux-pro-max/data/products.csv +97 -0
  882. package/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
  883. package/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -0
  884. package/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  885. package/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  886. package/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
  887. package/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  888. package/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  889. package/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  890. package/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  891. package/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
  892. package/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  893. package/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  894. package/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  895. package/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  896. package/skills/ui-ux-pro-max/data/styles.csv +68 -0
  897. package/skills/ui-ux-pro-max/data/typography.csv +58 -0
  898. package/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  899. package/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  900. package/skills/ui-ux-pro-max/data/web-interface.csv +31 -0
  901. package/skills/ui-ux-pro-max/docs//344/270/211/344/270/252 data-scripts-templates /347/232/204/345/214/272/345/210/253.md" +30 -0
  902. package/skills/ui-ux-pro-max/preview/xiaomaomi-app.html +411 -0
  903. package/skills/ui-ux-pro-max/screenshots/website.png +0 -0
  904. package/skills/ui-ux-pro-max/scripts/core.py +253 -0
  905. package/skills/ui-ux-pro-max/scripts/design_system.py +1067 -0
  906. package/skills/ui-ux-pro-max/scripts/search.py +114 -0
  907. package/skills/ui-ux-pro-max/skill.json +41 -0
  908. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/data/_sync_all.py +414 -0
  909. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/data/app-interface.csv +31 -0
  910. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/data/charts.csv +26 -0
  911. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/data/colors.csv +162 -0
  912. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/data/design.csv +1776 -0
  913. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/data/draft.csv +1779 -0
  914. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/data/google-fonts.csv +1924 -0
  915. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/data/icons.csv +106 -0
  916. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/data/landing.csv +35 -0
  917. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/data/products.csv +162 -0
  918. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/data/react-performance.csv +45 -0
  919. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/data/stacks/angular.csv +51 -0
  920. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/data/stacks/astro.csv +54 -0
  921. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  922. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  923. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
  924. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/data/stacks/laravel.csv +51 -0
  925. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  926. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  927. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  928. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  929. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/data/stacks/react.csv +54 -0
  930. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  931. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  932. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  933. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/data/stacks/threejs.csv +54 -0
  934. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  935. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/data/styles.csv +85 -0
  936. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/data/typography.csv +74 -0
  937. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/data/ui-reasoning.csv +162 -0
  938. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  939. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/scripts/core.py +262 -0
  940. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/scripts/design_system.py +1148 -0
  941. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/scripts/search.py +114 -0
  942. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/templates/base/quick-reference.md +297 -0
  943. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/templates/base/skill-content.md +358 -0
  944. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/templates/platforms/agent.json +21 -0
  945. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/templates/platforms/augment.json +18 -0
  946. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/templates/platforms/claude.json +21 -0
  947. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/templates/platforms/codebuddy.json +21 -0
  948. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/templates/platforms/codex.json +21 -0
  949. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/templates/platforms/continue.json +21 -0
  950. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/templates/platforms/copilot.json +21 -0
  951. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/templates/platforms/cursor.json +21 -0
  952. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/templates/platforms/droid.json +21 -0
  953. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/templates/platforms/gemini.json +21 -0
  954. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/templates/platforms/kilocode.json +21 -0
  955. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/templates/platforms/kiro.json +21 -0
  956. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/templates/platforms/opencode.json +21 -0
  957. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/templates/platforms/qoder.json +21 -0
  958. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/templates/platforms/roocode.json +21 -0
  959. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/templates/platforms/trae.json +21 -0
  960. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/templates/platforms/warp.json +18 -0
  961. package/skills/ui-ux-pro-max/src/ui-ux-pro-max/templates/platforms/windsurf.json +21 -0
  962. package/skills/uncloud/SKILL.md +343 -0
  963. package/skills/upgrading-react-native/SKILL.md +58 -0
  964. package/skills/using-git-worktrees/SKILL.md +215 -0
  965. package/skills/vercel/SKILL.md +161 -0
  966. package/skills/vercel/metadata.json +16 -0
  967. package/skills/verification-loop/SKILL.md +126 -0
  968. package/skills/view-transitions-api/SKILL.md +108 -0
  969. package/skills/vite-patterns/SKILL.md +449 -0
  970. package/skills/vue3-composition-patterns/SKILL.md +375 -0
  971. package/skills/waza-habits/SKILL.md +22 -0
  972. package/skills/webapp-testing/LICENSE.txt +202 -0
  973. package/skills/webapp-testing/SKILL.md +96 -0
  974. package/skills/webapp-testing/examples/console_logging.py +35 -0
  975. package/skills/webapp-testing/examples/element_discovery.py +40 -0
  976. package/skills/webapp-testing/examples/static_html_automation.py +33 -0
  977. package/skills/webapp-testing/scripts/with_server.py +106 -0
  978. package/src/orchestrator/builder.ts +234 -0
  979. package/src/orchestrator/executor.ts +386 -0
  980. package/src/orchestrator/index.ts +535 -0
  981. package/src/orchestrator/loader.ts +237 -0
  982. package/src/orchestrator/registry.ts +211 -0
  983. package/src/orchestrator/schema.ts +141 -0
  984. package/src/orchestrator/session.ts +128 -0
  985. package/src/orchestrator/types.ts +109 -0
  986. package/tsconfig.json +21 -0
package/bin/imhcode.js ADDED
@@ -0,0 +1,1634 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * IMH-Code CLI — Imam Hussain Coding Harness Platform
5
+ *
6
+ * Usage:
7
+ * imhcode → Initialize framework in current directory
8
+ * imhcode plan → Smart: brainstorm OR sprint-plan based on state
9
+ * imhcode execute [N] → Execute sprint N with intelligent model routing
10
+ * imhcode test → Run the testing/security/SEO sprint
11
+ * imhcode agent list → List all discovered agents
12
+ * imhcode agent inspect <id> → Show full manifest + loaded skills
13
+ * imhcode agent run <id> "<task>" → Run agent (dry-run by default)
14
+ * --engine <cli> → Override engine (claude|opencode|codex|agy|qwen|mimo)
15
+ * -m, --model <model> → Override model
16
+ * --live → Call real LLM
17
+ * --output <path> → Custom session output directory
18
+ */
19
+
20
+ 'use strict';
21
+
22
+ const fs = require('fs');
23
+ const path = require('path');
24
+ const { execSync } = require('child_process');
25
+ const os = require('os');
26
+ const readline = require('readline');
27
+
28
+ // ─── Constants ─────────────────────────────────────────────────────────────────
29
+
30
+ const PLATFORM_NAME = 'IMH-Code';
31
+ const PLATFORM_FULL = 'Imam Hussain Coding Harness Platform';
32
+ const CLI_CMD = 'imhcode';
33
+ const CONFIG_FILE = 'imhcode.config.json';
34
+ const GLOBAL_DIR = path.join(os.homedir(), '.imhcode');
35
+ const LOCAL_DIR_NAME = '.imhcode';
36
+ const DOCS_DIR = 'docs';
37
+ const START_MD = path.join(DOCS_DIR, 'start.md');
38
+ const BRAINSTORM_MD = path.join(DOCS_DIR, 'brainstorming.md');
39
+ const BRIEF_MD = 'PROJECT_BRIEF.md';
40
+ const CONTEXT_MD = path.join(LOCAL_DIR_NAME, 'context.md');
41
+
42
+ // ─── Entry Point ───────────────────────────────────────────────────────────────
43
+
44
+ const args = process.argv.slice(2);
45
+ const command = args[0];
46
+ const subcommand = args[1];
47
+
48
+ if (command === '--version' || command === '-v') {
49
+ const pkg = require(path.join(__dirname, '..', 'package.json'));
50
+ console.log(`${CLI_CMD} version: ${pkg.version}`);
51
+ process.exit(0);
52
+ }
53
+
54
+ if (command === '--help' || command === '-h' || command === 'help') {
55
+ printGeneralHelp();
56
+ process.exit(0);
57
+ }
58
+
59
+ if (command === 'plan') {
60
+ runPlanCommand(args.slice(1)).catch(err => {
61
+ console.error(err.message ?? err);
62
+ process.exit(1);
63
+ });
64
+ } else if (command === 'execute' || command === 'exec') {
65
+ runExecuteCommand(args.slice(1)).catch(err => {
66
+ console.error(err.message ?? err);
67
+ process.exit(1);
68
+ });
69
+ } else if (command === 'test') {
70
+ runTestCommand(args.slice(1)).catch(err => {
71
+ console.error(err.message ?? err);
72
+ process.exit(1);
73
+ });
74
+ } else if (command === 'agent') {
75
+ runAgentCommand(subcommand, args.slice(2)).catch(err => {
76
+ console.error(err.message ?? err);
77
+ process.exit(1);
78
+ });
79
+ } else if (command === 'sprint') {
80
+ // Legacy compat: zeoel sprint design/execute → imhcode execute
81
+ runSprintLegacyCommand(subcommand, args.slice(2)).catch(err => {
82
+ console.error(err.message ?? err);
83
+ process.exit(1);
84
+ });
85
+ } else {
86
+ // Default: framework initialization
87
+ runInit().catch(err => {
88
+ console.error(err.message ?? err);
89
+ process.exit(1);
90
+ });
91
+ }
92
+
93
+ // ─── Help ─────────────────────────────────────────────────────────────────────
94
+
95
+ function printGeneralHelp() {
96
+ console.log(`
97
+ ╔══════════════════════════════════════════════════════════════════╗
98
+ ║ ${PLATFORM_NAME} — ${PLATFORM_FULL} ║
99
+ ╚══════════════════════════════════════════════════════════════════╝
100
+
101
+ Usage:
102
+ ${CLI_CMD} → Initialize project (engine scan + model routing setup)
103
+ ${CLI_CMD} plan → Smart: brainstorm OR generate sprint plan
104
+ ${CLI_CMD} execute [N] → Execute sprint N with intelligent model routing
105
+ ${CLI_CMD} test → Run final testing/security/SEO sprint
106
+ ${CLI_CMD} agent list → List all 19 generic agents
107
+ ${CLI_CMD} agent inspect <id> → Show agent manifest + loaded skills
108
+ ${CLI_CMD} agent run <id> "<task>" → Run agent (dry-run by default)
109
+ --live → Call real LLM
110
+ --engine <cli> → Override engine (claude|opencode|codex|agy|qwen|mimo)
111
+ -m, --model <model> → Override model
112
+ --output <path> → Save session to custom path
113
+
114
+ Pipeline:
115
+ 1. ${CLI_CMD} → Init project
116
+ 2. Edit docs/start.md → Write your problem/prompt
117
+ 3. ${CLI_CMD} plan → Generates docs/brainstorming.md with Q&A
118
+ 4. Edit docs/brainstorming.md → Review/edit recommended answers
119
+ 5. ${CLI_CMD} plan → Reads answers → generates sprint plans
120
+ 6. ${CLI_CMD} execute 1 → Execute sprint 1 (pure code, no tests)
121
+ 7. ${CLI_CMD} execute 2 → Execute sprint 2
122
+ 8. ${CLI_CMD} test → Final testing, security + SEO audit
123
+
124
+ Agents (19 generic — no persona names):
125
+ planner → Project planning, brainstorming, sprint coordination
126
+ designer → UX/UI design (Mimo v2.5 Pro preferred)
127
+ nextjs-executor → Next.js full-stack (Mimo v2.5 Pro preferred)
128
+ react-executor → React/Vite SPA
129
+ vue-executor → Vue 3 / Nuxt 4
130
+ laravel-executor → Laravel full-stack (DeepSeek V4 Pro preferred)
131
+ python-executor → Python / Django / FastAPI
132
+ java-executor → Java / Spring Boot
133
+ flutter-executor → Flutter / Dart
134
+ react-native-executor → React Native / Expo
135
+ ios-executor → iOS / SwiftUI
136
+ android-executor → Android / Kotlin
137
+ systems-executor → Go / Rust / C++
138
+ web3-executor → Solidity / Web3
139
+ devops-executor → Docker / CI/CD
140
+ tester → QA + E2E testing (GPT-5.5 preferred)
141
+ security-auditor → Security audit (GPT-5.5 preferred)
142
+ seo-optimizer → SEO / Content (GPT-5.5 preferred)
143
+ debugger → Debugging / Root cause
144
+
145
+ ${CLI_CMD} --version, -v → Print version
146
+ ${CLI_CMD} --help, -h → Print this help
147
+ `);
148
+ }
149
+
150
+ // ─── imhcode plan (Smart State Machine) ───────────────────────────────────────
151
+
152
+ async function runPlanCommand(restArgs) {
153
+ const cwd = process.cwd();
154
+ const startMdPath = path.join(cwd, START_MD);
155
+ const brainstormPath = path.join(cwd, BRAINSTORM_MD);
156
+ const briefPath = path.join(cwd, BRIEF_MD);
157
+
158
+ console.log(`\n🕌 ${PLATFORM_NAME} — Plan Command\n`);
159
+
160
+ // State detection
161
+ const hasStartMd = fs.existsSync(startMdPath);
162
+ const hasBrainstorm = fs.existsSync(brainstormPath);
163
+ const hasBrief = fs.existsSync(briefPath);
164
+ const hasSprintDocs = detectSprintDocs(cwd);
165
+
166
+ if (!hasStartMd) {
167
+ console.log(`❌ docs/start.md not found.\n`);
168
+ console.log(` Create docs/start.md and write your project description inside it.`);
169
+ console.log(` Then run "imhcode plan" again.\n`);
170
+ console.log(` Tip: Run "imhcode" first to initialize the project and create the template.\n`);
171
+ process.exit(1);
172
+ }
173
+
174
+ // Read the start.md prompt
175
+ const startContent = fs.readFileSync(startMdPath, 'utf8');
176
+ const userPrompt = extractPromptFromStartMd(startContent);
177
+
178
+ if (!userPrompt || userPrompt.trim().length < 10) {
179
+ console.log(`❌ docs/start.md has no project description.\n`);
180
+ console.log(` Write your project idea in docs/start.md between the markers:\n`);
181
+ console.log(` <!-- WRITE_PROMPT_HERE -->`);
182
+ console.log(` Your project description here...`);
183
+ console.log(` <!-- END_PROMPT -->\n`);
184
+ process.exit(1);
185
+ }
186
+
187
+ // ── State 1: No brainstorming yet → generate brainstorming.md ────────────
188
+ if (!hasBrainstorm) {
189
+ console.log(`📋 Phase 2: Generating brainstorming document...\n`);
190
+ console.log(` Reading your project description from docs/start.md...`);
191
+ console.log(` Prompt: "${userPrompt.slice(0, 100)}${userPrompt.length > 100 ? '...' : ''}"\n`);
192
+
193
+ await generateBrainstormingDoc(cwd, userPrompt);
194
+
195
+ console.log(`\n✅ Brainstorming document created: docs/brainstorming.md\n`);
196
+ console.log(`─`.repeat(60));
197
+ console.log(`\n📝 NEXT STEPS:\n`);
198
+ console.log(` 1. Open docs/brainstorming.md`);
199
+ console.log(` 2. Review the auto-recommended answers`);
200
+ console.log(` 3. Edit any answers you want to customize`);
201
+ console.log(` 4. Run "imhcode plan" again to generate sprint plans\n`);
202
+ console.log(`─`.repeat(60));
203
+ return;
204
+ }
205
+
206
+ // ── State 2: Brainstorming exists, no sprint plans → generate sprints ─────
207
+ if (hasBrainstorm && !hasSprintDocs) {
208
+ console.log(`📋 Phase 3-4: Reading brainstorming answers → generating sprint plans...\n`);
209
+
210
+ const brainstormContent = fs.readFileSync(brainstormPath, 'utf8');
211
+ const config = loadLocalConfig(cwd);
212
+
213
+ await generateSprintPlans(cwd, userPrompt, brainstormContent, config);
214
+
215
+ console.log(`\n✅ Sprint plans generated!\n`);
216
+ console.log(`─`.repeat(60));
217
+ console.log(`\n📝 NEXT STEPS:\n`);
218
+ console.log(` 1. Review docs/sprint-1/plan.md`);
219
+ console.log(` 2. Run "imhcode execute 1" to start Sprint 1`);
220
+ console.log(` 3. Then "imhcode execute 2", "imhcode execute 3", etc.`);
221
+ console.log(` 4. Run "imhcode test" for the final testing sprint\n`);
222
+ console.log(`─`.repeat(60));
223
+ return;
224
+ }
225
+
226
+ // ── State 3: Sprints already exist ───────────────────────────────────────
227
+ if (hasSprintDocs) {
228
+ const currentSprint = detectCurrentSprint(cwd);
229
+ console.log(`ℹ️ Sprint plans already exist (current sprint: Sprint ${currentSprint}).\n`);
230
+ console.log(` Use "imhcode execute ${currentSprint}" to run the current sprint.`);
231
+ console.log(` Use "imhcode test" to run the final testing sprint.\n`);
232
+ console.log(` To re-plan from scratch, delete docs/brainstorming.md and run "imhcode plan".\n`);
233
+ }
234
+ }
235
+
236
+ // ─── imhcode execute [N] ──────────────────────────────────────────────────────
237
+
238
+ async function runExecuteCommand(restArgs) {
239
+ const cwd = process.cwd();
240
+ const sprintNum = resolveSprintNum(restArgs, cwd);
241
+ const sprintDir = path.join(cwd, DOCS_DIR, `sprint-${sprintNum}`);
242
+ const masterScript = path.join(sprintDir, 'run_all_tasks.sh');
243
+ const progressPath = path.join(sprintDir, 'progress.md');
244
+
245
+ console.log(`\n🕌 ${PLATFORM_NAME} — Execute Sprint ${sprintNum}\n`);
246
+
247
+ if (!fs.existsSync(progressPath)) {
248
+ console.error(`❌ Sprint ${sprintNum} not planned yet.`);
249
+ console.error(` Run "imhcode plan" first to generate sprint plans.`);
250
+ process.exit(1);
251
+ }
252
+
253
+ if (!fs.existsSync(masterScript)) {
254
+ console.error(`❌ run_all_tasks.sh not found for Sprint ${sprintNum}.`);
255
+ console.error(` Run "imhcode plan" to regenerate the sprint plan.`);
256
+ process.exit(1);
257
+ }
258
+
259
+ // Read plan to show what will be executed
260
+ const planPath = path.join(sprintDir, 'plan.md');
261
+ if (fs.existsSync(planPath)) {
262
+ const plan = fs.readFileSync(planPath, 'utf8');
263
+ const taskCount = (plan.match(/^##\s+Task/gm) || []).length;
264
+ console.log(` Sprint: ${sprintNum}`);
265
+ console.log(` Tasks: ${taskCount}`);
266
+ console.log(` Script: ${masterScript}\n`);
267
+ }
268
+
269
+ // Check model routing config
270
+ const config = loadLocalConfig(cwd);
271
+ if (config?.model_routing) {
272
+ console.log(` Model Routing:`);
273
+ for (const [cat, routing] of Object.entries(config.model_routing)) {
274
+ if (routing && typeof routing === 'object') {
275
+ console.log(` ${cat.padEnd(12)}: ${routing.model} (${routing.engine})`);
276
+ }
277
+ }
278
+ console.log('');
279
+ }
280
+
281
+ try {
282
+ fs.chmodSync(masterScript, 0o755);
283
+ } catch { /* ignore on Windows */ }
284
+
285
+ console.log(`─`.repeat(60));
286
+ try {
287
+ execSync(`sh "${masterScript}"`, { stdio: 'inherit', cwd });
288
+ console.log(`─`.repeat(60));
289
+ console.log(`\n🏁 Sprint ${sprintNum} execution complete!\n`);
290
+
291
+ // Update compact context after sprint
292
+ await updateCompactContext(cwd, sprintNum);
293
+ } catch (err) {
294
+ console.log(`─`.repeat(60));
295
+ console.error(`\n❌ Sprint ${sprintNum} execution failed.`);
296
+ console.error(` Check the output above for details.`);
297
+ process.exit(1);
298
+ }
299
+ }
300
+
301
+ // ─── imhcode test ─────────────────────────────────────────────────────────────
302
+
303
+ async function runTestCommand(restArgs) {
304
+ const cwd = process.cwd();
305
+ const lastSprint = detectLastSprint(cwd);
306
+ const testingSprintNum = lastSprint + 1;
307
+ const testSprintDir = path.join(cwd, DOCS_DIR, `sprint-${testingSprintNum}`);
308
+ const testScript = path.join(testSprintDir, 'run_all_tasks.sh');
309
+
310
+ console.log(`\n🕌 ${PLATFORM_NAME} — Testing Sprint\n`);
311
+
312
+ if (fs.existsSync(testScript)) {
313
+ // Run existing test sprint
314
+ console.log(` Running auto-generated testing sprint (Sprint ${testingSprintNum})...\n`);
315
+ try {
316
+ fs.chmodSync(testScript, 0o755);
317
+ } catch { /* ignore */ }
318
+ console.log(`─`.repeat(60));
319
+ try {
320
+ execSync(`sh "${testScript}"`, { stdio: 'inherit', cwd });
321
+ console.log(`─`.repeat(60));
322
+ console.log(`\n✅ Testing sprint complete! Check docs/sprint-${testingSprintNum}/ for reports.\n`);
323
+ } catch {
324
+ console.error(`\n❌ Testing sprint failed. Check output above.\n`);
325
+ process.exit(1);
326
+ }
327
+ } else {
328
+ // Guide user to generate the test sprint
329
+ console.log(` ℹ️ No testing sprint found yet.\n`);
330
+ console.log(` The testing sprint is auto-generated when you run "imhcode plan" and`);
331
+ console.log(` select "Fast Mode" or "Balanced Mode" for testing strategy.\n`);
332
+ console.log(` To generate it now, run:\n`);
333
+ console.log(` imhcode agent run planner "Generate testing sprint for Sprint ${testingSprintNum}" --live\n`);
334
+ }
335
+ }
336
+
337
+ // ─── imhcode agent ────────────────────────────────────────────────────────────
338
+
339
+ async function runAgentCommand(subcommand, restArgs) {
340
+ const orchestrator = loadOrchestrator();
341
+
342
+ switch (subcommand) {
343
+ case 'list': return cmdList(orchestrator, restArgs);
344
+ case 'inspect': return cmdInspect(orchestrator, restArgs);
345
+ case 'run': return cmdRun(orchestrator, restArgs);
346
+ default:
347
+ printAgentHelp();
348
+ process.exit(0);
349
+ }
350
+ }
351
+
352
+ function loadOrchestrator() {
353
+ const distPath = path.join(__dirname, '..', 'dist', 'orchestrator', 'index.js');
354
+ if (!fs.existsSync(distPath)) {
355
+ console.error(
356
+ `❌ Orchestrator not built. Run:\n` +
357
+ ` npm run build\n` +
358
+ ` Then retry.\n`
359
+ );
360
+ process.exit(1);
361
+ }
362
+ return require(distPath);
363
+ }
364
+
365
+ function resolveAgentsDir() {
366
+ const globalAgents = path.join(GLOBAL_DIR, 'agents');
367
+ if (fs.existsSync(globalAgents)) return globalAgents;
368
+
369
+ const cwdAgents = path.join(process.cwd(), 'agents');
370
+ if (fs.existsSync(cwdAgents)) return cwdAgents;
371
+
372
+ const pkgAgents = path.join(__dirname, '..', 'agents');
373
+ if (fs.existsSync(pkgAgents)) return pkgAgents;
374
+
375
+ throw new Error(
376
+ `❌ No "agents/" directory found.\n` +
377
+ ` Run "imhcode" in a directory with an "agents/" folder,\n` +
378
+ ` or run "imhcode" first to initialize the framework.`
379
+ );
380
+ }
381
+
382
+ async function cmdList(orc, _args) {
383
+ const agentsDir = resolveAgentsDir();
384
+ const cwd = process.cwd();
385
+ console.log('\n🤖 Loading agent registry...\n');
386
+
387
+ const { agents, errors } = await orc.loadRegistry(agentsDir, cwd);
388
+
389
+ if (agents.size === 0 && errors.length === 0) {
390
+ console.log(' No agents found in:', agentsDir);
391
+ return;
392
+ }
393
+
394
+ const rows = [...agents.values()].map(a => ({
395
+ id: a.manifest.id,
396
+ role: a.manifest.role,
397
+ model: a.manifest.default_model,
398
+ category: getAgentCategory(a.manifest.id),
399
+ }));
400
+
401
+ console.log('┌─────────────────────────────────────────────────────────────────────────────┐');
402
+ console.log(`│ ${PLATFORM_NAME} — AGENT REGISTRY │`);
403
+ console.log('├──────────────────────────┬────────────────┬──────────────┬──────────────────┤');
404
+ console.log('│ ID │ Category │ Model │ Role │');
405
+ console.log('├──────────────────────────┼────────────────┼──────────────┼──────────────────┤');
406
+
407
+ for (const row of rows) {
408
+ const id = row.id.padEnd(24).slice(0, 24);
409
+ const cat = row.category.padEnd(14).slice(0, 14);
410
+ const mdl = row.model.padEnd(12).slice(0, 12);
411
+ const rol = row.role.padEnd(16).slice(0, 16);
412
+ console.log(`│ ${id} │ ${cat} │ ${mdl} │ ${rol} │`);
413
+ }
414
+
415
+ console.log('└──────────────────────────┴────────────────┴──────────────┴──────────────────┘');
416
+ console.log(`\n Total: ${agents.size} agent(s) │ Use "imhcode agent inspect <id>" for details.\n`);
417
+
418
+ if (errors.length > 0) {
419
+ console.log(`⚠️ ${errors.length} agent(s) failed to load:\n`);
420
+ for (const { agentId, error } of errors) {
421
+ console.log(` ❌ ${agentId}: ${error.split('\n')[0]}\n`);
422
+ }
423
+ }
424
+ }
425
+
426
+ function getAgentCategory(agentId) {
427
+ const map = {
428
+ 'planner': 'planning', 'designer': 'frontend',
429
+ 'nextjs-executor': 'frontend', 'react-executor': 'frontend', 'vue-executor': 'frontend',
430
+ 'laravel-executor': 'backend', 'python-executor': 'backend', 'java-executor': 'backend',
431
+ 'flutter-executor': 'backend', 'react-native-executor': 'backend', 'ios-executor': 'backend',
432
+ 'android-executor': 'backend', 'systems-executor': 'backend', 'web3-executor': 'backend',
433
+ 'devops-executor': 'backend', 'tester': 'testing', 'security-auditor': 'testing',
434
+ 'seo-optimizer': 'review', 'debugger': 'review',
435
+ };
436
+ return map[agentId] || 'backend';
437
+ }
438
+
439
+ async function cmdInspect(orc, args) {
440
+ const agentId = args[0];
441
+ if (!agentId) {
442
+ console.error(`❌ Usage: imhcode agent inspect <agent-id>`);
443
+ process.exit(1);
444
+ }
445
+
446
+ const agentsDir = resolveAgentsDir();
447
+ const cwd = process.cwd();
448
+ console.log(`\n🔍 Loading agent: ${agentId}\n`);
449
+
450
+ const { agents, errors } = await orc.loadRegistry(agentsDir, cwd);
451
+
452
+ if (errors.some(e => e.agentId === agentId)) {
453
+ const err = errors.find(e => e.agentId === agentId);
454
+ console.error(err.error);
455
+ process.exit(1);
456
+ }
457
+
458
+ const agent = orc.getAgent(agents, agentId);
459
+ const { manifest, systemPrompt, skills, dir } = agent;
460
+ const divider = '─'.repeat(72);
461
+
462
+ // Load config to show routing
463
+ const config = loadLocalConfig(cwd);
464
+ const category = getAgentCategory(manifest.id);
465
+ const routing = config?.model_routing?.[category];
466
+
467
+ console.log(divider);
468
+ console.log(` ${manifest.name} (v${manifest.version})`);
469
+ console.log(divider);
470
+ console.log(` ID: ${manifest.id}`);
471
+ console.log(` Role: ${manifest.role}`);
472
+ console.log(` Category: ${category}`);
473
+ console.log(` Description: ${manifest.description.replace(/\n\s*/g, ' ')}`);
474
+ console.log(` Directory: ${dir}`);
475
+ console.log(` Default Model: ${manifest.default_model}`);
476
+ if (routing) {
477
+ console.log(` Routed Model: ${routing.model} via ${routing.engine} (from imhcode.config.json)`);
478
+ }
479
+ console.log(` Fallbacks: ${manifest.fallback_engines.join(', ') || '(none)'}`);
480
+ console.log(`\n Core Skills: ${skills.length} loaded`);
481
+ for (const skill of skills) {
482
+ console.log(` ► ${skill.id}`);
483
+ }
484
+ console.log(`\n${divider}\n`);
485
+ console.log(` Run this agent with:`);
486
+ console.log(` imhcode agent run ${manifest.id} "Your task" --live\n`);
487
+ }
488
+
489
+ async function cmdRun(orc, args) {
490
+ const agentId = args[0];
491
+ const task = args[1];
492
+
493
+ if (!agentId || !task) {
494
+ console.error(`❌ Usage: imhcode agent run <agent-id> "<task description>" [options]`);
495
+ console.error(` --live Run live (calls real LLM)`);
496
+ console.error(` --engine <cli> Override engine`);
497
+ console.error(` -m, --model <model> Override model`);
498
+ console.error(` --output <path> Custom output dir`);
499
+ process.exit(1);
500
+ }
501
+
502
+ const restArgs = args.slice(2);
503
+ const live = restArgs.includes('--live');
504
+ const engineIdx = restArgs.indexOf('--engine');
505
+ const engine = engineIdx >= 0 ? restArgs[engineIdx + 1] : undefined;
506
+ const mIndex = restArgs.indexOf('--model');
507
+ const shortMIndex = restArgs.indexOf('-m');
508
+ const modelIdx = mIndex >= 0 ? mIndex : shortMIndex;
509
+ const model = modelIdx >= 0 ? restArgs[modelIdx + 1] : undefined;
510
+ const criteriaIdx = restArgs.indexOf('--criteria');
511
+ const criteria = criteriaIdx >= 0 ? restArgs[criteriaIdx + 1] : undefined;
512
+ const outputIdx = restArgs.indexOf('--output');
513
+ const outputDir = outputIdx >= 0 ? restArgs[outputIdx + 1] : undefined;
514
+
515
+ const agentsDir = resolveAgentsDir();
516
+ const cwd = process.cwd();
517
+ const config = loadLocalConfig(cwd);
518
+ const category = getAgentCategory(agentId);
519
+
520
+ console.log(`\n🕌 ${PLATFORM_NAME} — Agent Execution`);
521
+ console.log(` Agent: ${agentId}`);
522
+ console.log(` Category: ${category}`);
523
+ console.log(` Task: ${task}`);
524
+ console.log(` Mode: ${live ? '🔴 LIVE (CLI execution)' : '🟡 DRY-RUN (no CLI execution)'}`);
525
+
526
+ // Show which model will be used
527
+ if (!engine && !model && config?.model_routing?.[category]) {
528
+ const r = config.model_routing[category];
529
+ console.log(` Model: ${r.model} via ${r.engine} (from routing config)`);
530
+ } else if (model) {
531
+ console.log(` Model: ${model} (explicit override)`);
532
+ }
533
+ console.log('');
534
+
535
+ const { agents, errors } = await orc.loadRegistry(agentsDir, cwd);
536
+
537
+ if (errors.some(e => e.agentId === agentId)) {
538
+ const err = errors.find(e => e.agentId === agentId);
539
+ console.error(err.error);
540
+ process.exit(1);
541
+ }
542
+
543
+ const agent = orc.getAgent(agents, agentId);
544
+ const result = await orc.runAgent(agent, task, { dryRun: !live, engine, model, outputDir, cwd }, criteria);
545
+
546
+ console.log('\n' + '─'.repeat(72));
547
+ if (result.errors.length > 0 && !result.dryRun) {
548
+ console.error(`\n❌ [IMH-Code] Execution failed with errors:`);
549
+ result.errors.forEach(e => console.error(` • ${e}`));
550
+
551
+ // Check if the error is a limit/failover exhaustion
552
+ const isLimitExhausted = result.errors.some(e => e.includes('limits') && e.includes('exhausted'));
553
+ if (isLimitExhausted) {
554
+ const currentSprint = detectCurrentSprint(cwd);
555
+ console.error(`\n💡 [IMH-Code] All available assistant engines hit rate/token/quota limits.`);
556
+ console.error(` The context has been saved in the session logs: ${result.sessionDir || 'sessions/'}`);
557
+ console.error(` Please wait for your limits/quotas to reset, then resume development by running:`);
558
+ console.error(` imhcode execute ${currentSprint}\n`);
559
+ }
560
+ process.exit(1);
561
+ }
562
+
563
+ console.log(`\n✅ Execution complete`);
564
+ console.log(` Duration: ${result.durationMs}ms`);
565
+ console.log(` Model: ${result.model}`);
566
+ console.log(` Dry-run: ${result.dryRun}`);
567
+ if (result.sessionDir) console.log(` Session log: ${result.sessionDir}`);
568
+ console.log('');
569
+ }
570
+
571
+ function printAgentHelp() {
572
+ console.log(`
573
+ imhcode agent <subcommand>
574
+
575
+ Subcommands:
576
+ list List all 19 generic agents
577
+ inspect <id> Show agent manifest, skills, and routing
578
+ run <id> "<task>" [flags] Build prompt and run
579
+
580
+ Flags for "run":
581
+ --live Run live LLM execution
582
+ --engine <cli> Override engine (claude|opencode|codex|agy|qwen|mimo)
583
+ -m, --model <model> Override model
584
+ --criteria "<string>" Acceptance criteria
585
+ --output <path> Custom session directory
586
+
587
+ Agent IDs (short aliases work too):
588
+ planner (alias: plan, pm, orchestrator)
589
+ nextjs-executor (alias: nextjs, next)
590
+ laravel-executor (alias: laravel, php)
591
+ react-executor (alias: react, vite)
592
+ vue-executor (alias: vue, nuxt)
593
+ python-executor (alias: python, django, fastapi)
594
+ tester (alias: qa, test)
595
+ security-auditor (alias: security, audit)
596
+ debugger (alias: debug, fix)
597
+ ... and more (run imhcode agent list)
598
+ `);
599
+ }
600
+
601
+ // ─── Legacy Sprint Commands ────────────────────────────────────────────────────
602
+
603
+ async function runSprintLegacyCommand(subcommand, restArgs) {
604
+ if (subcommand === 'execute') {
605
+ return runExecuteCommand(restArgs);
606
+ } else if (subcommand === 'design') {
607
+ return cmdSprintDesign(restArgs);
608
+ } else {
609
+ console.log(` Use "imhcode execute [N]" instead of "imhcode sprint execute [N]"`);
610
+ console.log(` Use "imhcode plan" instead of "imhcode sprint design [N]"\n`);
611
+ }
612
+ }
613
+
614
+ async function cmdSprintDesign(restArgs) {
615
+ const cwd = process.cwd();
616
+ const sprintNum = resolveSprintNum(restArgs, cwd);
617
+ const sprintDir = path.join(cwd, DOCS_DIR, `sprint-${sprintNum}`);
618
+
619
+ console.log(`\n📐 ${PLATFORM_NAME} Sprint Design Check — Sprint ${sprintNum}\n`);
620
+
621
+ const checks = [
622
+ { file: path.join(cwd, BRIEF_MD), label: 'PROJECT_BRIEF.md' },
623
+ { file: path.join(sprintDir, 'plan.md'), label: `docs/sprint-${sprintNum}/plan.md` },
624
+ { file: path.join(sprintDir, 'progress.md'), label: `docs/sprint-${sprintNum}/progress.md` },
625
+ { file: path.join(sprintDir, 'tasks'), label: `docs/sprint-${sprintNum}/tasks/` },
626
+ { file: path.join(sprintDir, 'run_all_tasks.sh'), label: `docs/sprint-${sprintNum}/run_all_tasks.sh` },
627
+ ];
628
+
629
+ let allOk = true;
630
+ for (const check of checks) {
631
+ const exists = fs.existsSync(check.file);
632
+ console.log(` ${exists ? '✅' : '❌'} ${check.label}`);
633
+ if (!exists) allOk = false;
634
+ }
635
+
636
+ if (allOk) {
637
+ console.log(`\n✅ Sprint ${sprintNum} planning complete!`);
638
+ console.log(` Run: imhcode execute ${sprintNum}\n`);
639
+ } else {
640
+ console.log(`\n❌ Sprint ${sprintNum} planning incomplete.`);
641
+ console.log(` Run "imhcode plan" to generate missing files.\n`);
642
+ process.exit(1);
643
+ }
644
+ }
645
+
646
+ // ─── Initialization ───────────────────────────────────────────────────────────
647
+
648
+ async function runInit() {
649
+ console.log(`\n🕌 Initializing ${PLATFORM_NAME}...\n`);
650
+ console.log(` ${PLATFORM_FULL}\n`);
651
+
652
+ const packageRoot = path.join(__dirname, '..');
653
+ const imhcodeScriptPath = path.join(packageRoot, 'bin', 'imhcode.js');
654
+ const cwd = process.cwd();
655
+
656
+ // Ensure global ~/.imhcode exists
657
+ if (!fs.existsSync(GLOBAL_DIR)) {
658
+ fs.mkdirSync(GLOBAL_DIR, { recursive: true });
659
+ }
660
+
661
+ const itemsToCopy = [
662
+ { src: '.github', dest: '.github', desc: 'GitHub integration files' },
663
+ { src: 'AGENTS.md', dest: 'AGENTS.md', desc: 'Agent manifest' },
664
+ { src: 'CLAUDE.md', dest: 'CLAUDE.md', desc: 'Claude/Cursor/Copilot integration' },
665
+ { src: '.gitignore.template', dest: '.gitignore', desc: 'Auto-generated gitignore' },
666
+ { src: 'SETUP.md', dest: 'SETUP.md', desc: 'Setup guide' },
667
+ { src: 'USER_MANUAL.md', dest: 'USER_MANUAL.md', desc: 'User manual' },
668
+ { src: 'agents', dest: 'agents', desc: 'YAML-driven agent manifests' },
669
+ { src: 'skills', dest: 'skills', desc: 'Skill library (SKILL.md files)' },
670
+ ];
671
+
672
+ // Copy to global ~/.imhcode (unconditionally overwrite to apply updates)
673
+ for (const item of itemsToCopy) {
674
+ const sourcePath = path.join(packageRoot, item.src);
675
+ const targetPath = path.join(GLOBAL_DIR, item.dest);
676
+ if (!fs.existsSync(sourcePath)) {
677
+ console.warn(`⚠️ Warning: Could not find ${item.src} in package.`);
678
+ continue;
679
+ }
680
+ if (fs.existsSync(targetPath)) {
681
+ const stats = fs.statSync(targetPath);
682
+ if (stats.isDirectory()) rmRecursiveSync(targetPath);
683
+ else fs.unlinkSync(targetPath);
684
+ }
685
+ console.log(` Updating ${item.src} → ~/.imhcode/${item.dest} (${item.desc})...`);
686
+ copyRecursiveSync(sourcePath, targetPath);
687
+ }
688
+
689
+ // Copy CLAUDE.md, AGENTS.md, and skills/ to assistant config directories globally
690
+ const assistants = [
691
+ { dir: path.join(os.homedir(), '.claude'), name: 'Claude Code' },
692
+ { dir: path.join(os.homedir(), '.gemini'), name: 'Antigravity IDE' },
693
+ { dir: path.join(os.homedir(), '.copilot'), name: 'Copilot' },
694
+ ];
695
+
696
+ for (const ast of assistants) {
697
+ if (!fs.existsSync(ast.dir)) {
698
+ try { fs.mkdirSync(ast.dir, { recursive: true }); } catch { continue; }
699
+ }
700
+ try {
701
+ fs.copyFileSync(path.join(packageRoot, 'CLAUDE.md'), path.join(ast.dir, 'CLAUDE.md'));
702
+ fs.copyFileSync(path.join(packageRoot, 'AGENTS.md'), path.join(ast.dir, 'AGENTS.md'));
703
+ const skillsDest = path.join(ast.dir, 'skills');
704
+ rmRecursiveSync(skillsDest);
705
+ copyRecursiveSync(path.join(packageRoot, 'skills'), skillsDest);
706
+ console.log(` Updated rules & skills globally in ${ast.name} (${ast.dir})`);
707
+ } catch (e) {
708
+ console.warn(` ⚠️ Could not update ${ast.name}: ${e.message}`);
709
+ }
710
+ }
711
+
712
+ // Create local workspace directories
713
+ const dirsToCreate = [
714
+ 'frontend', 'backend', '.worktrees', DOCS_DIR,
715
+ LOCAL_DIR_NAME,
716
+ path.join(LOCAL_DIR_NAME, 'commands'),
717
+ path.join(LOCAL_DIR_NAME, 'sessions'),
718
+ ];
719
+ for (const dir of dirsToCreate) {
720
+ const dirPath = path.join(cwd, dir);
721
+ if (!fs.existsSync(dirPath)) {
722
+ fs.mkdirSync(dirPath, { recursive: true });
723
+ console.log(` Created local directory: ${dir}`);
724
+ }
725
+ }
726
+
727
+ // Create docs/start.md template
728
+ const startMdPath = path.join(cwd, START_MD);
729
+ if (!fs.existsSync(startMdPath)) {
730
+ const startMdContent = `# 🕌 IMH-Code — Project Start
731
+
732
+ > **Imam Hussain Coding Harness Platform**
733
+ > Write your project description below, then run \`imhcode plan\`.
734
+
735
+ ---
736
+
737
+ ## 📝 Your Project Description
738
+
739
+ Write your complete project idea below the markers. Be as detailed as possible.
740
+ Include: what you're building, who it's for, key features, preferred stack (if any).
741
+
742
+ <!-- WRITE_PROMPT_HERE -->
743
+ I want to build a SaaS dashboard for managing hotel room bookings with real-time availability,
744
+ a Next.js frontend, Laravel API backend, and PostgreSQL database.
745
+ <!-- END_PROMPT -->
746
+
747
+ ---
748
+
749
+ ## 🚀 Next Step
750
+
751
+ After writing your description, run in your terminal:
752
+
753
+ \`\`\`bash
754
+ imhcode plan
755
+ \`\`\`
756
+
757
+ This will analyze your description and generate **docs/brainstorming.md** with
758
+ smart questions about your project, with recommended answers you can review and edit.
759
+ `;
760
+ fs.writeFileSync(startMdPath, startMdContent, 'utf8');
761
+ console.log(` Created docs/start.md (write your project here)`);
762
+ }
763
+
764
+ // Create .gitignore
765
+ const localGitignore = path.join(cwd, '.gitignore');
766
+ if (!fs.existsSync(localGitignore)) {
767
+ const gitignoreTemplate = path.join(packageRoot, '.gitignore.template');
768
+ if (fs.existsSync(gitignoreTemplate)) {
769
+ fs.copyFileSync(gitignoreTemplate, localGitignore);
770
+ console.log(` Created local .gitignore`);
771
+ }
772
+ }
773
+
774
+ registerCliGlobally(imhcodeScriptPath);
775
+ ensureCavemanAndGraphify();
776
+
777
+ // ── Interactive Engine & Model Setup ────────────────────────────────────────
778
+ console.log('\n🔍 Scanning for local coding assistant CLIs...');
779
+ const engines = scanAssistantCLIs();
780
+ const foundEngines = Object.keys(engines).filter(k => engines[k].path);
781
+
782
+ if (foundEngines.length === 0) {
783
+ console.warn('\n⚠️ No local coding assistant CLIs detected.');
784
+ console.warn(' Supported: claude, opencode, codex, agy (Antigravity), qwen (QwenCode), mimo (MimoCode)');
785
+ console.warn(' Install one and re-run "imhcode" to configure model routing.\n');
786
+ }
787
+
788
+ let primaryEngine = 'claude';
789
+ const isInteractive = process.stdout.isTTY;
790
+
791
+ if (isInteractive && foundEngines.length > 0) {
792
+ console.log('\nFound the following local coding assistant CLIs:');
793
+ foundEngines.forEach((key, index) => {
794
+ const eng = engines[key];
795
+ console.log(` [${index + 1}] ${eng.name} (${key})`);
796
+ console.log(` Path: ${eng.path}`);
797
+ if (eng.models.length > 0) {
798
+ console.log(` Models: ${eng.models.slice(0, 3).join(', ')}${eng.models.length > 3 ? '...' : ''} (${eng.models.length} total)`);
799
+ }
800
+ });
801
+
802
+ let selectionIdx = 0;
803
+ while (true) {
804
+ const answer = await askQuestion(`\nSelect primary engine [1-${foundEngines.length}] (default: 1): `);
805
+ if (answer === '') { selectionIdx = 0; break; }
806
+ const parsed = parseInt(answer, 10);
807
+ if (parsed >= 1 && parsed <= foundEngines.length) { selectionIdx = parsed - 1; break; }
808
+ console.log(`❌ Invalid. Enter 1–${foundEngines.length}.`);
809
+ }
810
+ primaryEngine = foundEngines[selectionIdx];
811
+ console.log(`\n✅ Primary engine: ${engines[primaryEngine].name} (${primaryEngine})`);
812
+ } else if (foundEngines.length > 0) {
813
+ primaryEngine = foundEngines[0];
814
+ console.log(`\n✅ Auto-selected primary engine: ${engines[primaryEngine].name} (${primaryEngine})`);
815
+ }
816
+
817
+ let defaultModel = '';
818
+ const selectedEng = engines[primaryEngine];
819
+ if (selectedEng?.models?.length > 0) {
820
+ if (isInteractive) {
821
+ console.log(`\nAvailable models for ${selectedEng.name}:`);
822
+ selectedEng.models.forEach((m, i) => console.log(` [${i + 1}] ${m}`));
823
+ let modelIdx = 0;
824
+ while (true) {
825
+ const answer = await askQuestion(`Select default model [1-${selectedEng.models.length}] (default: 1): `);
826
+ if (answer === '') { modelIdx = 0; break; }
827
+ const parsed = parseInt(answer, 10);
828
+ if (parsed >= 1 && parsed <= selectedEng.models.length) { modelIdx = parsed - 1; break; }
829
+ console.log(`❌ Invalid. Enter 1–${selectedEng.models.length}.`);
830
+ }
831
+ defaultModel = selectedEng.models[modelIdx];
832
+ } else {
833
+ defaultModel = selectedEng.models[0];
834
+ }
835
+ console.log(`✅ Default model: ${defaultModel}`);
836
+ }
837
+
838
+ // ── Smart Model Routing Setup ────────────────────────────────────────────────
839
+ const modelRouting = await setupModelRouting(engines, foundEngines, isInteractive);
840
+
841
+ // Write config
842
+ const configPath = path.join(cwd, CONFIG_FILE);
843
+ const configData = {
844
+ primary_engine: primaryEngine,
845
+ default_model: defaultModel || undefined,
846
+ testing_mode: 'fast',
847
+ model_routing: modelRouting,
848
+ available_engines: {},
849
+ };
850
+
851
+ for (const key of foundEngines) {
852
+ configData.available_engines[key] = {
853
+ path: engines[key].path,
854
+ models: engines[key].models,
855
+ };
856
+ }
857
+
858
+ fs.writeFileSync(configPath, JSON.stringify(configData, null, 2), 'utf8');
859
+ console.log(`\n💾 Configuration saved: ${configPath}`);
860
+
861
+ // Print final guide
862
+ console.log(`\n✅ ${PLATFORM_NAME} initialized successfully!`);
863
+ console.log(`─`.repeat(60));
864
+ console.log(`\n🕌 HOW TO BUILD WITH IMH-CODE:\n`);
865
+ console.log(` 1. Open docs/start.md → Write your project description`);
866
+ console.log(` 2. Run: imhcode plan`);
867
+ console.log(` → Generates docs/brainstorming.md with smart questions`);
868
+ console.log(` 3. Open docs/brainstorming.md → Review/edit answers`);
869
+ console.log(` 4. Run: imhcode plan`);
870
+ console.log(` → Reads your answers → generates sprint plans`);
871
+ console.log(` 5. Run: imhcode execute 1 → Execute Sprint 1`);
872
+ console.log(` 6. Run: imhcode execute 2 → Execute Sprint 2`);
873
+ console.log(` 7. Run: imhcode test → Final testing + security + SEO`);
874
+ console.log(`\n Run "imhcode --help" for all commands.`);
875
+ console.log(`─`.repeat(60));
876
+ console.log('');
877
+ }
878
+
879
+ // ─── Model Routing Setup Wizard ───────────────────────────────────────────────
880
+
881
+ async function setupModelRouting(engines, foundEngines, isInteractive) {
882
+ const categories = {
883
+ frontend: {
884
+ label: 'Frontend (UI/UX, components, animations)',
885
+ note: 'Mimo v2.5 Pro preferred → GPT-5.5 → Claude Opus',
886
+ preferredEngines: ['mimo', 'codex', 'claude', 'opencode'],
887
+ preferredModels: ['mimo-vl-v2.5-pro', 'gpt-5.5', 'claude-opus-4-6', 'deepseek-v4-pro'],
888
+ },
889
+ backend: {
890
+ label: 'Backend (APIs, database, business logic)',
891
+ note: 'DeepSeek V4 Pro preferred → GPT-5.5 → Qwen Coder',
892
+ preferredEngines: ['opencode', 'codex', 'qwen', 'claude'],
893
+ preferredModels: ['deepseek-v4-pro', 'gpt-5.5', 'qwen3-coder-max', 'claude-sonnet-4-5'],
894
+ },
895
+ planning: {
896
+ label: 'Planning (brainstorming, sprint planning, architecture)',
897
+ note: 'Claude Opus preferred → GPT-5.5',
898
+ preferredEngines: ['claude', 'codex', 'opencode'],
899
+ preferredModels: ['claude-opus-4-6', 'gpt-5.5', 'deepseek-v4-pro'],
900
+ },
901
+ testing: {
902
+ label: 'Testing (QA, security audit, E2E)',
903
+ note: 'GPT-5.5 preferred → Claude Opus → DeepSeek',
904
+ preferredEngines: ['codex', 'claude', 'opencode'],
905
+ preferredModels: ['gpt-5.5', 'claude-opus-4-6', 'deepseek-v4-pro'],
906
+ },
907
+ review: {
908
+ label: 'Review (SEO, debugging, code review)',
909
+ note: 'GPT-5.5 preferred → Claude Sonnet',
910
+ preferredEngines: ['codex', 'claude', 'opencode'],
911
+ preferredModels: ['gpt-5.5', 'claude-sonnet-4-5', 'deepseek-v4'],
912
+ },
913
+ fast: {
914
+ label: 'Fast (boilerplate, config, simple tasks)',
915
+ note: 'DeepSeek V4 Flash preferred → Gemini Flash → GPT Mini',
916
+ preferredEngines: ['opencode', 'codex', 'qwen', 'claude'],
917
+ preferredModels: ['deepseek-v4-flash', 'gpt-5.4-mini', 'qwen3-coder-flash', 'claude-haiku-3-5'],
918
+ },
919
+ };
920
+
921
+ const routing = {};
922
+
923
+ // Build recommended routing from available engines
924
+ const recommended = {};
925
+ for (const [cat, cfg] of Object.entries(categories)) {
926
+ let found = false;
927
+ for (let i = 0; i < cfg.preferredEngines.length; i++) {
928
+ const eng = cfg.preferredEngines[i];
929
+ const mdl = cfg.preferredModels[i];
930
+ const engData = engines[eng];
931
+ if (engData?.path && engData.models.length > 0) {
932
+ const match = engData.models.find(m => m.toLowerCase().includes(mdl.replace(/-/g, '').replace(/\./g, '')));
933
+ recommended[cat] = { engine: eng, model: match || engData.models[0] };
934
+ found = true;
935
+ break;
936
+ }
937
+ }
938
+ if (!found && foundEngines.length > 0) {
939
+ // Fallback to primary engine
940
+ const fe = foundEngines[0];
941
+ recommended[cat] = { engine: fe, model: engines[fe].models[0] || 'default' };
942
+ }
943
+ }
944
+
945
+ // Show recommended routing table
946
+ console.log('\n' + '─'.repeat(60));
947
+ console.log('🧠 Recommended Model Routing (based on your installed engines):\n');
948
+ console.log(' Category │ Engine │ Model');
949
+ console.log(' ─────────────────────────────────────────────────────────');
950
+ for (const [cat, rec] of Object.entries(recommended)) {
951
+ const catLabel = cat.padEnd(12);
952
+ const eng = (rec.engine || '?').padEnd(12);
953
+ const mdl = rec.model || '?';
954
+ const cfg = categories[cat];
955
+ console.log(` ${catLabel} │ ${eng} │ ${mdl}`);
956
+ }
957
+ console.log(' ' + '─'.repeat(57));
958
+ console.log(`\n Preferences: ${categories.frontend.note}`);
959
+
960
+ if (isInteractive) {
961
+ const answer = await askQuestion('\nAccept recommended routing? [Y/n] ');
962
+ if (answer.toLowerCase() === 'n' || answer.toLowerCase() === 'no') {
963
+ // Let user customize each category
964
+ for (const [cat, cfg] of Object.entries(categories)) {
965
+ console.log(`\n Configure model for [${cat}] — ${cfg.label}`);
966
+ console.log(` (${cfg.note})`);
967
+
968
+ // Collect all available models across all engines
969
+ const allModels = [];
970
+ for (const eng of foundEngines) {
971
+ for (const m of engines[eng].models) {
972
+ allModels.push({ engine: eng, model: m });
973
+ }
974
+ }
975
+
976
+ if (allModels.length === 0) {
977
+ routing[cat] = recommended[cat];
978
+ continue;
979
+ }
980
+
981
+ allModels.forEach((item, i) => {
982
+ const rec = recommended[cat];
983
+ const isRec = rec && rec.engine === item.engine && rec.model === item.model;
984
+ console.log(` [${i + 1}] ${item.model} (${item.engine})${isRec ? ' ← Recommended' : ''}`);
985
+ });
986
+
987
+ let selectedIdx = allModels.findIndex(m => {
988
+ const rec = recommended[cat];
989
+ return rec && m.engine === rec.engine && m.model === rec.model;
990
+ });
991
+ if (selectedIdx < 0) selectedIdx = 0;
992
+
993
+ while (true) {
994
+ const ans = await askQuestion(` Select model for ${cat} [1-${allModels.length}] (default: ${selectedIdx + 1}): `);
995
+ if (ans === '') { routing[cat] = allModels[selectedIdx]; break; }
996
+ const p = parseInt(ans, 10);
997
+ if (p >= 1 && p <= allModels.length) { routing[cat] = allModels[p - 1]; break; }
998
+ console.log(` ❌ Invalid. Enter 1–${allModels.length}.`);
999
+ }
1000
+ console.log(` ✅ ${cat}: ${routing[cat].model} (${routing[cat].engine})`);
1001
+ }
1002
+ } else {
1003
+ Object.assign(routing, recommended);
1004
+ console.log('\n✅ Recommended routing accepted.');
1005
+ }
1006
+ } else {
1007
+ Object.assign(routing, recommended);
1008
+ console.log('\n✅ Recommended routing applied automatically.');
1009
+ }
1010
+
1011
+ return routing;
1012
+ }
1013
+
1014
+ // ─── Brainstorming Generator ───────────────────────────────────────────────────
1015
+
1016
+ async function generateBrainstormingDoc(cwd, userPrompt) {
1017
+ // Analyze keywords in the prompt to determine which sections to include
1018
+ const p = userPrompt.toLowerCase();
1019
+
1020
+ const hasFrontend = p.includes('frontend') || p.includes('ui') || p.includes('dashboard') ||
1021
+ p.includes('design') || p.includes('page') || p.includes('web') ||
1022
+ p.includes('next') || p.includes('react') || p.includes('vue');
1023
+ const hasBackend = p.includes('backend') || p.includes('api') || p.includes('database') ||
1024
+ p.includes('server') || p.includes('laravel') || p.includes('django') ||
1025
+ p.includes('fastapi') || p.includes('auth') || p.includes('data');
1026
+ const hasMobile = p.includes('mobile') || p.includes('flutter') || p.includes('ios') ||
1027
+ p.includes('android') || p.includes('react native') || p.includes('expo');
1028
+
1029
+ // Infer default stack
1030
+ const defaultFrontend = hasFrontend ? (p.includes('vue') ? 'Vue 3 + Nuxt 4' : 'Next.js 15') : 'Next.js 15';
1031
+ const defaultBackend = hasBackend ? (p.includes('python') || p.includes('django') ? 'Python/FastAPI' :
1032
+ p.includes('java') ? 'Java/Spring Boot' : 'Laravel 11') : 'Laravel 11';
1033
+
1034
+ const content = `# 🧠 IMH-Code — Project Brainstorming
1035
+
1036
+ > Auto-generated by \`imhcode plan\` on ${new Date().toLocaleDateString()}
1037
+ > Review and edit the "**Your Answer**" fields below, then run \`imhcode plan\` again.
1038
+
1039
+ ---
1040
+
1041
+ ## 📋 General Requirements
1042
+
1043
+ **Q1: What is the primary goal of this project?**
1044
+ > **Recommended:** ${userPrompt.split('.')[0].trim()}
1045
+ > **Your Answer:** *(edit if needed)*
1046
+
1047
+ **Q2: Who are the target users?**
1048
+ > **Recommended:** Business users / customers (based on your description)
1049
+ > **Your Answer:** *(edit if needed)*
1050
+
1051
+ **Q3: What is the expected scale at launch?**
1052
+ > **Recommended:** Small-medium (< 1,000 users initially)
1053
+ > **Your Answer:** *(edit if needed)*
1054
+
1055
+ **Q4: What is the timeline?**
1056
+ > **Recommended:** MVP in 2-4 sprints (4-8 weeks)
1057
+ > **Your Answer:** *(edit if needed)*
1058
+
1059
+ ---
1060
+ ${hasFrontend ? `
1061
+ ## 🎨 Frontend
1062
+
1063
+ **Q5: Which frontend framework?**
1064
+ > **Recommended:** ${defaultFrontend}
1065
+ > **Your Answer:** *(edit if needed)*
1066
+
1067
+ **Q6: UI Component library?**
1068
+ > **Recommended:** shadcn/ui + Tailwind CSS v4
1069
+ > **Your Answer:** *(edit if needed)*
1070
+
1071
+ **Q7: Do you need animations/3D effects?**
1072
+ > **Recommended:** Light micro-animations (GSAP ScrollTrigger)
1073
+ > **Your Answer:** *(yes — specify / no)*
1074
+
1075
+ **Q8: Mobile responsive?**
1076
+ > **Recommended:** Yes (mobile-first responsive design)
1077
+ > **Your Answer:** *(edit if needed)*
1078
+
1079
+ **Q9: Dark mode support?**
1080
+ > **Recommended:** Yes (dark/light toggle)
1081
+ > **Your Answer:** *(yes / no)*
1082
+
1083
+ **Q10: Preferred design style?**
1084
+ > **Recommended:** Modern SaaS (glassmorphism, clean, premium)
1085
+ > **Your Answer:** *(edit if needed)*
1086
+ ` : ''}
1087
+ ${hasBackend ? `
1088
+ ## 🔧 Backend
1089
+
1090
+ **Q11: Which backend framework?**
1091
+ > **Recommended:** ${defaultBackend}
1092
+ > **Your Answer:** *(edit if needed)*
1093
+
1094
+ **Q12: Database?**
1095
+ > **Recommended:** PostgreSQL + Redis (caching)
1096
+ > **Your Answer:** *(edit if needed)*
1097
+
1098
+ **Q13: Authentication system?**
1099
+ > **Recommended:** JWT tokens + email verification
1100
+ > **Your Answer:** *(JWT / session / OAuth / other)*
1101
+
1102
+ **Q14: API architecture?**
1103
+ > **Recommended:** RESTful API
1104
+ > **Your Answer:** *(REST / GraphQL / both)*
1105
+
1106
+ **Q15: Do you need file uploads?**
1107
+ > **Recommended:** Yes (S3-compatible storage)
1108
+ > **Your Answer:** *(yes / no)*
1109
+
1110
+ **Q16: Real-time features?**
1111
+ > **Recommended:** No (for MVP)
1112
+ > **Your Answer:** *(yes — specify / no)*
1113
+
1114
+ **Q17: Payment integration?**
1115
+ > **Recommended:** No (for MVP)
1116
+ > **Your Answer:** *(yes — specify provider / no)*
1117
+ ` : ''}
1118
+ ${hasMobile ? `
1119
+ ## 📱 Mobile
1120
+
1121
+ **Q18: Target platforms?**
1122
+ > **Recommended:** iOS + Android (cross-platform)
1123
+ > **Your Answer:** *(iOS only / Android only / both)*
1124
+
1125
+ **Q19: Mobile framework?**
1126
+ > **Recommended:** Flutter
1127
+ > **Your Answer:** *(Flutter / React Native / both)*
1128
+
1129
+ **Q20: Offline support?**
1130
+ > **Recommended:** No (for MVP)
1131
+ > **Your Answer:** *(yes / no)*
1132
+ ` : ''}
1133
+
1134
+ ## 🚀 Deployment
1135
+
1136
+ **Q21: Deployment platform?**
1137
+ > **Recommended:** Vercel (frontend) + DigitalOcean/Railway (backend)
1138
+ > **Your Answer:** *(edit if needed)*
1139
+
1140
+ **Q22: Do you need Docker containerization?**
1141
+ > **Recommended:** Yes
1142
+ > **Your Answer:** *(yes / no)*
1143
+
1144
+ **Q23: CI/CD pipeline?**
1145
+ > **Recommended:** GitHub Actions
1146
+ > **Your Answer:** *(yes / no)*
1147
+
1148
+ ---
1149
+
1150
+ ## 🧪 Testing Strategy
1151
+
1152
+ **Q24: How should testing be handled?**
1153
+
1154
+ Options:
1155
+ - **[A] Fast Mode (Recommended for MVPs)** — No testing during development sprints.
1156
+ A dedicated final sprint handles all testing, security audit, SEO, and browser testing.
1157
+ 3-5x faster for initial development.
1158
+
1159
+ - **[B] Balanced Mode** — Basic smoke tests per sprint. Full test suite at end.
1160
+ ~80% development speed of Fast Mode.
1161
+
1162
+ - **[C] Strict TDD Mode** — Full Red-Green-Refactor on every task.
1163
+ Slowest but highest quality. Only for healthcare, finance, compliance projects.
1164
+
1165
+ > **Recommended:** A (Fast Mode)
1166
+ > **Your Answer:** A *(change to B or C if needed)*
1167
+
1168
+ ---
1169
+
1170
+ ## 🔒 Security
1171
+
1172
+ **Q25: Security audit timing?**
1173
+ > **Recommended:** Final sprint only (OWASP Top 10 + dependency scan)
1174
+ > **Your Answer:** *(final sprint only / every sprint)*
1175
+
1176
+ ---
1177
+
1178
+ ## 🌐 SEO (if web app)
1179
+
1180
+ **Q26: SEO requirements?**
1181
+ > **Recommended:** Technical SEO in final sprint (meta tags, Core Web Vitals, structured data)
1182
+ > **Your Answer:** *(final sprint only / every sprint / not needed)*
1183
+
1184
+ ---
1185
+
1186
+ ## 📝 Additional Notes
1187
+
1188
+ Write any additional requirements, constraints, or preferences here:
1189
+
1190
+ > *(Your notes here)*
1191
+
1192
+ ---
1193
+
1194
+ *When ready, run \`imhcode plan\` to generate sprint plans from your answers.*
1195
+ `;
1196
+
1197
+ const brainstormPath = path.join(cwd, BRAINSTORM_MD);
1198
+ fs.mkdirSync(path.join(cwd, DOCS_DIR), { recursive: true });
1199
+ fs.writeFileSync(brainstormPath, content, 'utf8');
1200
+ }
1201
+
1202
+ // ─── Sprint Plan Generator ────────────────────────────────────────────────────
1203
+
1204
+ async function generateSprintPlans(cwd, userPrompt, brainstormContent, config) {
1205
+ // Parse answers from brainstorming
1206
+ const testingMode = extractAnswer(brainstormContent, 'Q24', 'A').trim().toUpperCase();
1207
+ const hasFrontend = brainstormContent.includes('frontend') || brainstormContent.includes('Next.js') || brainstormContent.includes('Vue');
1208
+ const hasBackend = brainstormContent.includes('Laravel') || brainstormContent.includes('Python') || brainstormContent.includes('Django') || brainstormContent.includes('Java');
1209
+
1210
+ const detectedTesting = testingMode === 'B' ? 'balanced' : testingMode === 'C' ? 'strict' : 'fast';
1211
+
1212
+ // Save testing mode to config
1213
+ if (config) {
1214
+ config.testing_mode = detectedTesting;
1215
+ const configPath = path.join(cwd, CONFIG_FILE);
1216
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2), 'utf8');
1217
+ }
1218
+
1219
+ // Generate PROJECT_BRIEF.md
1220
+ const briefContent = generateProjectBrief(userPrompt, brainstormContent);
1221
+ fs.writeFileSync(path.join(cwd, BRIEF_MD), briefContent, 'utf8');
1222
+ console.log(` ✅ Created PROJECT_BRIEF.md`);
1223
+
1224
+ // Generate Sprint 1 (Foundation)
1225
+ await generateSprint(cwd, 1, 'Foundation & Setup', [
1226
+ { task: 'Initialize project structure and configure environments', agent: 'devops-executor', tier: 'light', deps: [] },
1227
+ { task: 'Set up database schema and migrations', agent: hasBackend ? 'laravel-executor' : 'python-executor', tier: 'standard', deps: [1] },
1228
+ { task: 'Implement authentication system (register, login, logout)', agent: hasBackend ? 'laravel-executor' : 'python-executor', tier: 'complex', deps: [2] },
1229
+ ...(hasFrontend ? [
1230
+ { task: 'Set up frontend project with design system and component library', agent: 'nextjs-executor', tier: 'standard', deps: [1] },
1231
+ { task: 'Build authentication UI pages (login, register, forgot password)', agent: 'nextjs-executor', tier: 'standard', deps: [3, 4] },
1232
+ ] : []),
1233
+ ], detectedTesting);
1234
+
1235
+ // Generate Sprint 2 (Core Features)
1236
+ await generateSprint(cwd, 2, 'Core Features', [
1237
+ { task: 'Build main API endpoints for core business logic', agent: hasBackend ? 'laravel-executor' : 'python-executor', tier: 'complex', deps: [] },
1238
+ ...(hasFrontend ? [
1239
+ { task: 'Build dashboard layout with navigation and sidebar', agent: 'nextjs-executor', tier: 'standard', deps: [] },
1240
+ { task: 'Implement main feature pages and components', agent: 'nextjs-executor', tier: 'complex', deps: [2] },
1241
+ { task: 'Connect frontend to backend API with error handling', agent: 'nextjs-executor', tier: 'standard', deps: [1, 3] },
1242
+ ] : []),
1243
+ { task: 'Implement user settings and profile management', agent: hasBackend ? 'laravel-executor' : 'python-executor', tier: 'standard', deps: [1] },
1244
+ ], detectedTesting);
1245
+
1246
+ // Determine last sprint number
1247
+ let lastSprintNum = 2;
1248
+
1249
+ // If testing mode is fast/balanced, auto-generate testing sprint
1250
+ if (detectedTesting !== 'strict') {
1251
+ const testingSprintNum = lastSprintNum + 1;
1252
+ await generateTestingSprint(cwd, testingSprintNum, hasFrontend, hasBackend);
1253
+ console.log(` ✅ Created auto-generated Testing Sprint ${testingSprintNum}`);
1254
+ }
1255
+
1256
+ // Update compact context
1257
+ const contextContent = `# IMH-Code Project Context
1258
+
1259
+ Generated: ${new Date().toLocaleDateString()}
1260
+ Project: ${userPrompt.slice(0, 100)}...
1261
+ Testing Mode: ${detectedTesting}
1262
+ Sprints: ${lastSprintNum + (detectedTesting !== 'strict' ? 1 : 0)} total
1263
+
1264
+ ## Stack
1265
+ ${hasFrontend ? '- Frontend: Next.js 15 + shadcn/ui + Tailwind CSS v4' : ''}
1266
+ ${hasBackend ? '- Backend: Laravel 11 + PostgreSQL + Redis' : ''}
1267
+ - Auth: JWT tokens
1268
+ - Deployment: Docker + GitHub Actions
1269
+
1270
+ ## Directory Structure
1271
+ - frontend/ — All frontend code
1272
+ - backend/ — All backend code
1273
+ - docs/ — Sprint plans and documentation
1274
+
1275
+ ## Current Sprint
1276
+ Sprint 1 (not started)
1277
+
1278
+ ## Key Files
1279
+ ${hasFrontend ? '- frontend/app/ — Next.js pages' : ''}
1280
+ ${hasBackend ? '- backend/routes/api.php — API routes' : ''}
1281
+ ${hasBackend ? '- backend/app/Models/ — Eloquent models' : ''}
1282
+ `;
1283
+
1284
+ fs.mkdirSync(path.join(cwd, LOCAL_DIR_NAME), { recursive: true });
1285
+ fs.writeFileSync(path.join(cwd, CONTEXT_MD), contextContent, 'utf8');
1286
+ console.log(` ✅ Created .imhcode/context.md (compact context)`);
1287
+ }
1288
+
1289
+ async function generateSprint(cwd, sprintNum, title, tasks, testingMode) {
1290
+ const sprintDir = path.join(cwd, DOCS_DIR, `sprint-${sprintNum}`);
1291
+ const tasksDir = path.join(sprintDir, 'tasks');
1292
+ fs.mkdirSync(tasksDir, { recursive: true });
1293
+
1294
+ // plan.md
1295
+ const tddNote = testingMode === 'strict' ? '**Testing Mode: Strict TDD** — Write failing tests first.' :
1296
+ testingMode === 'balanced' ? '**Testing Mode: Balanced** — Basic smoke tests per task.' :
1297
+ '**Testing Mode: Fast** — No tests during this sprint. Tests handled in final sprint.';
1298
+
1299
+ let planMd = `# Sprint ${sprintNum}: ${title}
1300
+
1301
+ > ${tddNote}
1302
+
1303
+ ## Task Table
1304
+
1305
+ | # | Task | Agent | Tier | Depends On |
1306
+ |---|------|-------|------|-----------|
1307
+ ${tasks.map((t, i) => `| ${i+1} | ${t.task} | \`${t.agent}\` | ${t.tier} | ${t.deps.length ? t.deps.join(', ') : '—'} |`).join('\n')}
1308
+
1309
+ ## Sprint Goals
1310
+ - Complete all ${tasks.length} tasks in dependency order
1311
+ - Update PROJECT_BRIEF.md after completion
1312
+ - Update .imhcode/context.md with what was built
1313
+ `;
1314
+
1315
+ fs.writeFileSync(path.join(sprintDir, 'plan.md'), planMd, 'utf8');
1316
+
1317
+ // progress.md
1318
+ const progressMd = `# Sprint ${sprintNum} Progress
1319
+
1320
+ Status: 🟡 Not Started
1321
+ Start: —
1322
+ End: —
1323
+
1324
+ ## Task Status
1325
+ ${tasks.map((t, i) => `- [ ] Task ${i+1}: ${t.task}`).join('\n')}
1326
+ `;
1327
+ fs.writeFileSync(path.join(sprintDir, 'progress.md'), progressMd, 'utf8');
1328
+
1329
+ // deferred.md
1330
+ fs.writeFileSync(path.join(sprintDir, 'deferred.md'), `# Sprint ${sprintNum} Deferred Items\n\nNone yet.\n`, 'utf8');
1331
+
1332
+ // Individual task scripts
1333
+ for (let i = 0; i < tasks.length; i++) {
1334
+ const t = tasks[i];
1335
+ const taskNum = i + 1;
1336
+ const testingFlag = testingMode === 'strict' ? '# Testing mode: strict — include TDD instructions\nTASK="[STRICT TDD] ${t.task}: Write failing tests first, then implement."' :
1337
+ testingMode === 'balanced' ? `TASK="[BALANCED] ${t.task}: Add basic smoke tests."` :
1338
+ `TASK="${t.task}"`;
1339
+
1340
+ const taskScript = `#!/bin/bash
1341
+ # IMH-Code — Sprint ${sprintNum} Task ${taskNum}
1342
+ # Task: ${t.task}
1343
+ # Agent: ${t.agent}
1344
+ # Tier: ${t.tier}
1345
+ CWD="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
1346
+ cd "$CWD/../../../.."
1347
+
1348
+ ${testingFlag}
1349
+
1350
+ echo "📋 Running Task ${taskNum}: ${t.task}"
1351
+ echo " Agent: ${t.agent} | Tier: ${t.tier}"
1352
+
1353
+ if command -v imhcode >/dev/null 2>&1; then
1354
+ imhcode agent run ${t.agent} "$TASK" --live
1355
+ else
1356
+ node "$(npm root -g)/imhcode/bin/imhcode.js" agent run ${t.agent} "$TASK" --live
1357
+ fi
1358
+ `;
1359
+ fs.writeFileSync(path.join(tasksDir, `task_${taskNum}.sh`), taskScript, { mode: 0o755 });
1360
+ }
1361
+
1362
+ // run_all_tasks.sh (respects dependency ordering)
1363
+ const masterScript = `#!/bin/bash
1364
+ # IMH-Code — Sprint ${sprintNum}: ${title}
1365
+ # Run all tasks in dependency order
1366
+ set -e
1367
+ CWD="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
1368
+ TASKS_DIR="$CWD/tasks"
1369
+
1370
+ echo ""
1371
+ echo "🕌 IMH-Code — Executing Sprint ${sprintNum}: ${title}"
1372
+ echo " Tasks: ${tasks.length}"
1373
+ echo ""
1374
+
1375
+ ${tasks.map((t, i) => {
1376
+ const taskNum = i + 1;
1377
+ return `echo "\\n─────────────────────────────────────────────────────────────"
1378
+ echo "📋 Task ${taskNum}/${tasks.length}: ${t.task}"
1379
+ echo "─────────────────────────────────────────────────────────────"
1380
+ bash "$TASKS_DIR/task_${taskNum}.sh"`;
1381
+ }).join('\n\n')}
1382
+
1383
+ echo ""
1384
+ echo "✅ Sprint ${sprintNum} complete! All ${tasks.length} tasks executed."
1385
+ echo " Run: imhcode execute ${sprintNum + 1}"
1386
+ echo ""
1387
+ `;
1388
+ fs.writeFileSync(path.join(sprintDir, 'run_all_tasks.sh'), masterScript, { mode: 0o755 });
1389
+
1390
+ console.log(` ✅ Created Sprint ${sprintNum}: ${title} (${tasks.length} tasks)`);
1391
+ }
1392
+
1393
+ async function generateTestingSprint(cwd, sprintNum, hasFrontend, hasBackend) {
1394
+ const tasks = [
1395
+ { task: 'Write unit tests for all backend API endpoints', agent: 'tester', tier: 'standard', deps: [] },
1396
+ { task: 'Write integration tests for core API flows', agent: 'tester', tier: 'complex', deps: [1] },
1397
+ ...(hasFrontend ? [
1398
+ { task: 'Write component tests for all frontend pages and components', agent: 'tester', tier: 'standard', deps: [] },
1399
+ { task: 'Run E2E browser tests with Playwright (all critical user flows)', agent: 'tester', tier: 'complex', deps: [3] },
1400
+ ] : []),
1401
+ { task: 'Run security audit: OWASP Top 10, dependency vulnerabilities, auth testing', agent: 'security-auditor', tier: 'complex', deps: [] },
1402
+ ...(hasFrontend ? [
1403
+ { task: 'Run SEO audit: Core Web Vitals, meta tags, structured data, sitemap', agent: 'seo-optimizer', tier: 'standard', deps: [] },
1404
+ { task: 'Run accessibility audit (WCAG 2.1 AA) and fix critical issues', agent: 'tester', tier: 'standard', deps: [3, 4] },
1405
+ ] : []),
1406
+ { task: 'Generate final test coverage report and fix failing tests', agent: 'tester', tier: 'standard', deps: [] },
1407
+ ];
1408
+
1409
+ await generateSprint(cwd, sprintNum, 'Testing, Security & SEO Audit', tasks, 'fast');
1410
+ }
1411
+
1412
+ // ─── Helper Functions ─────────────────────────────────────────────────────────
1413
+
1414
+ function generateProjectBrief(userPrompt, brainstormContent) {
1415
+ return `# PROJECT_BRIEF.md
1416
+
1417
+ > **IMH-Code — Imam Hussain Coding Harness Platform**
1418
+ > This file is the centralized context memory for the project.
1419
+ > Updated after each sprint by the planner agent.
1420
+
1421
+ ## Project Summary
1422
+
1423
+ ${userPrompt}
1424
+
1425
+ ## Status
1426
+
1427
+ - **Current Sprint**: Sprint 1
1428
+ - **Testing Mode**: Fast (final sprint only)
1429
+ - **Generated**: ${new Date().toLocaleDateString()}
1430
+
1431
+ ## Key Architecture Decisions
1432
+
1433
+ *(Will be updated as sprints complete)*
1434
+
1435
+ ## Sprint Log
1436
+
1437
+ | Sprint | Title | Status |
1438
+ |--------|-------|--------|
1439
+ | 1 | Foundation & Setup | 🟡 Not Started |
1440
+ | 2 | Core Features | ⬜ Pending |
1441
+ | N | Testing & Audit | ⬜ Pending |
1442
+ `;
1443
+ }
1444
+
1445
+ function extractPromptFromStartMd(content) {
1446
+ const match = content.match(/<!-- WRITE_PROMPT_HERE -->([\s\S]*?)<!-- END_PROMPT -->/);
1447
+ if (match) return match[1].trim();
1448
+ // Fallback: return everything after the first heading
1449
+ const lines = content.split('\n').filter(l => !l.startsWith('#') && l.trim().length > 0);
1450
+ return lines.join(' ').slice(0, 500);
1451
+ }
1452
+
1453
+ function extractAnswer(brainstormContent, questionKey, defaultAnswer) {
1454
+ const regex = new RegExp(`\\*\\*${questionKey}.*?\\*\\*Your Answer:\\*\\*([^\\n*]+)`, 's');
1455
+ const match = brainstormContent.match(regex);
1456
+ if (match) return match[1].trim();
1457
+ return defaultAnswer;
1458
+ }
1459
+
1460
+ function detectSprintDocs(cwd) {
1461
+ const docsDir = path.join(cwd, DOCS_DIR);
1462
+ if (!fs.existsSync(docsDir)) return false;
1463
+ return fs.readdirSync(docsDir).some(f => /^sprint-\d+$/i.test(f));
1464
+ }
1465
+
1466
+ function detectCurrentSprint(cwd) {
1467
+ const docsDir = path.join(cwd, DOCS_DIR);
1468
+ if (!fs.existsSync(docsDir)) return 1;
1469
+ let max = 0;
1470
+ for (const f of fs.readdirSync(docsDir)) {
1471
+ const m = f.match(/^sprint-(\d+)$/i);
1472
+ if (m) max = Math.max(max, parseInt(m[1], 10));
1473
+ }
1474
+ return max || 1;
1475
+ }
1476
+
1477
+ function detectLastSprint(cwd) {
1478
+ return detectCurrentSprint(cwd);
1479
+ }
1480
+
1481
+ function resolveSprintNum(restArgs, cwd) {
1482
+ const numStr = restArgs.find(a => !a.startsWith('-'));
1483
+ if (numStr) {
1484
+ const n = parseInt(numStr, 10);
1485
+ if (!isNaN(n)) return n;
1486
+ }
1487
+
1488
+ // Try PROJECT_BRIEF.md
1489
+ const briefPath = path.join(cwd, BRIEF_MD);
1490
+ if (fs.existsSync(briefPath)) {
1491
+ const m = fs.readFileSync(briefPath, 'utf8').match(/Current Sprint:\s*Sprint\s*(\d+)/i);
1492
+ if (m) return parseInt(m[1], 10);
1493
+ }
1494
+
1495
+ return detectCurrentSprint(cwd);
1496
+ }
1497
+
1498
+ function loadLocalConfig(cwd) {
1499
+ const configPath = path.join(cwd, CONFIG_FILE);
1500
+ if (fs.existsSync(configPath)) {
1501
+ try { return JSON.parse(fs.readFileSync(configPath, 'utf8')); } catch { return null; }
1502
+ }
1503
+ return null;
1504
+ }
1505
+
1506
+ async function updateCompactContext(cwd, completedSprint) {
1507
+ const contextPath = path.join(cwd, CONTEXT_MD);
1508
+ if (!fs.existsSync(contextPath)) return;
1509
+
1510
+ try {
1511
+ let content = fs.readFileSync(contextPath, 'utf8');
1512
+ content = content.replace(/Current Sprint\nSprint \d+ \(not started\)/, `Current Sprint\nSprint ${completedSprint + 1}`);
1513
+ fs.writeFileSync(contextPath, content, 'utf8');
1514
+ } catch { /* non-critical */ }
1515
+ }
1516
+
1517
+ // ─── Utilities ────────────────────────────────────────────────────────────────
1518
+
1519
+ function askQuestion(query) {
1520
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
1521
+ return new Promise(resolve => rl.question(query, ans => { rl.close(); resolve(ans.trim()); }));
1522
+ }
1523
+
1524
+ function scanAssistantCLIs() {
1525
+ const engines = {
1526
+ claude: { name: 'Claude Code', path: resolveBinary('claude', ['~/.local/bin/claude', '/usr/local/bin/claude', '/opt/homebrew/bin/claude']), models: [], modelsCmd: b => `"${b}" --list-models 2>/dev/null || echo ''` },
1527
+ opencode: { name: 'OpenCode', path: resolveBinary('opencode', ['~/.opencode/bin/opencode', '/usr/local/bin/opencode']), models: [], modelsCmd: b => `"${b}" models 2>/dev/null` },
1528
+ codex: { name: 'Codex (OpenAI)', path: resolveBinary('codex', ['~/Library/PhpWebStudy/env/node/bin/codex', '/usr/local/bin/codex']), models: [], modelsCmd: b => `"${b}" debug models 2>/dev/null` },
1529
+ agy: { name: 'Antigravity CLI (agy)', path: resolveBinary('agy', ['~/.local/bin/agy', '/usr/local/bin/agy', '/opt/homebrew/bin/agy']), models: [], modelsCmd: b => `"${b}" models 2>/dev/null || echo ''` },
1530
+ qwen: { name: 'QwenCode (qwen)', path: resolveBinary('qwen', ['~/.local/bin/qwen', '/usr/local/bin/qwen', '/opt/homebrew/bin/qwen']), models: [], modelsCmd: b => `"${b}" models 2>/dev/null || echo ''` },
1531
+ mimo: { name: 'MimoCode (mimo)', path: resolveBinary('mimo', ['~/.local/bin/mimo', '/usr/local/bin/mimo', '/opt/homebrew/bin/mimo', '~/.mimo/bin/mimo']), models: [], modelsCmd: b => `"${b}" models 2>/dev/null || echo ''` },
1532
+ };
1533
+
1534
+ for (const [key, eng] of Object.entries(engines)) {
1535
+ if (!eng.path) continue;
1536
+ try {
1537
+ let raw = execSync(eng.modelsCmd(eng.path), { encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'], timeout: 30000 });
1538
+ let models = [];
1539
+ try {
1540
+ const parsed = JSON.parse(raw);
1541
+ if (parsed?.models) models = parsed.models.map(m => m.slug || m.id || m.name).filter(Boolean);
1542
+ else if (Array.isArray(parsed)) models = parsed.map(m => typeof m === 'string' ? m : m.id || m.slug).filter(Boolean);
1543
+ } catch {
1544
+ models = raw.split('\n').map(l => l.trim()).filter(l => l && !l.startsWith('#'));
1545
+ }
1546
+ if (models.length > 0) eng.models = models;
1547
+ } catch { eng.models = []; }
1548
+ }
1549
+
1550
+ return engines;
1551
+ }
1552
+
1553
+ function resolveBinary(name, fallbackPaths) {
1554
+ try {
1555
+ const p = execSync(`which ${name}`, { encoding: 'utf8', stdio: [] }).trim();
1556
+ if (p && fs.existsSync(p)) return p;
1557
+ } catch { /* ignore */ }
1558
+ const home = os.homedir();
1559
+ for (const raw of fallbackPaths) {
1560
+ const p = raw.replace(/^~/, home);
1561
+ if (fs.existsSync(p)) return p;
1562
+ }
1563
+ return null;
1564
+ }
1565
+
1566
+ function copyRecursiveSync(src, dest) {
1567
+ const stats = fs.existsSync(src) && fs.statSync(src);
1568
+ if (stats && stats.isDirectory()) {
1569
+ if (!fs.existsSync(dest)) fs.mkdirSync(dest, { recursive: true });
1570
+ fs.readdirSync(src).forEach(child => copyRecursiveSync(path.join(src, child), path.join(dest, child)));
1571
+ } else {
1572
+ fs.copyFileSync(src, dest);
1573
+ }
1574
+ }
1575
+
1576
+ function rmRecursiveSync(dest) {
1577
+ if (fs.existsSync(dest)) fs.rmSync(dest, { recursive: true, force: true });
1578
+ }
1579
+
1580
+ function registerCliGlobally(imhcodeScriptPath) {
1581
+ const isWindows = process.platform === 'win32';
1582
+ console.log('\n🔗 Registering imhcode command globally...');
1583
+
1584
+ if (isWindows) {
1585
+ const binDir = path.join(GLOBAL_DIR, 'bin');
1586
+ if (!fs.existsSync(binDir)) fs.mkdirSync(binDir, { recursive: true });
1587
+ fs.writeFileSync(path.join(binDir, 'imhcode.cmd'), `@echo off\r\nnode "${imhcodeScriptPath}" %*\r\n`);
1588
+ fs.writeFileSync(path.join(binDir, 'imhcode.ps1'), `node "${imhcodeScriptPath}" $args\r\n`);
1589
+ try {
1590
+ execSync(`powershell -Command "$p=[Environment]::GetEnvironmentVariable('Path','User'); if ($p -notlike '*${binDir}*') { [Environment]::SetEnvironmentVariable('Path',$p+';${binDir}','User') }"`, { stdio: 'ignore' });
1591
+ console.log(` ✅ Registered on Windows at ${binDir}`);
1592
+ } catch { /* ignore */ }
1593
+ } else {
1594
+ const localBinDir = path.join(os.homedir(), '.local', 'bin');
1595
+ const imhBinDir = path.join(GLOBAL_DIR, 'bin');
1596
+ [localBinDir, imhBinDir].forEach(dir => { if (!fs.existsSync(dir)) { try { fs.mkdirSync(dir, { recursive: true }); } catch { } } });
1597
+
1598
+ const shimContent = `#!/bin/sh\nexec node "${imhcodeScriptPath}" "$@"\n`;
1599
+ [path.join(localBinDir, 'imhcode'), path.join(imhBinDir, 'imhcode')].forEach(t => {
1600
+ try { fs.writeFileSync(t, shimContent, { mode: 0o755 }); } catch { /* ignore */ }
1601
+ });
1602
+
1603
+ const exportLine = `\n# IMH-Code PATH\nexport PATH="$HOME/.imhcode/bin:$HOME/.local/bin:$PATH"\n`;
1604
+ ['.zshrc', '.bashrc', '.bash_profile', '.profile'].forEach(f => {
1605
+ const fp = path.join(os.homedir(), f);
1606
+ if (fs.existsSync(fp)) {
1607
+ try {
1608
+ const c = fs.readFileSync(fp, 'utf8');
1609
+ if (!c.includes('.imhcode/bin') && !c.includes('.local/bin')) {
1610
+ fs.appendFileSync(fp, exportLine);
1611
+ }
1612
+ } catch { /* ignore */ }
1613
+ }
1614
+ });
1615
+
1616
+ console.log(` ✅ Shims installed in ~/.imhcode/bin and ~/.local/bin.`);
1617
+ console.log(` ✅ PATH updated in shell config. Run: source ~/.zshrc`);
1618
+ }
1619
+ }
1620
+
1621
+ function ensureCavemanAndGraphify() {
1622
+ console.log('\n🔍 Checking token-saving skills...');
1623
+ let skillsInstalled = false;
1624
+ try { execSync('npx --no-install skills --version', { stdio: 'ignore' }); skillsInstalled = true; } catch { /* not installed */ }
1625
+
1626
+ if (!skillsInstalled) {
1627
+ console.log(' 📦 Installing skills CLI globally...');
1628
+ try { execSync('npm install -g skills', { stdio: 'inherit' }); skillsInstalled = true; } catch { console.warn(' ⚠️ Failed to install skills CLI.'); }
1629
+ }
1630
+
1631
+ if (skillsInstalled) {
1632
+ try { execSync('npx skills add juliusbrussee/caveman', { cwd: GLOBAL_DIR, stdio: 'inherit' }); console.log(' ✅ Caveman compression rules integrated globally'); } catch { /* ignore */ }
1633
+ }
1634
+ }