@trieungoctam/vibekit 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 (352) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +85 -0
  3. package/agents/debugger.md +158 -0
  4. package/agents/docs-manager.md +220 -0
  5. package/agents/planner.md +129 -0
  6. package/agents/researcher.md +58 -0
  7. package/agents/reviewer.md +152 -0
  8. package/agents/tester.md +126 -0
  9. package/bin/vibekit.js +18 -0
  10. package/hooks/lib/ck-config-utils.cjs +831 -0
  11. package/hooks/lib/colors.cjs +95 -0
  12. package/hooks/lib/config-counter.cjs +103 -0
  13. package/hooks/lib/context-builder.cjs +616 -0
  14. package/hooks/lib/git-info-cache.cjs +143 -0
  15. package/hooks/lib/hook-logger.cjs +92 -0
  16. package/hooks/lib/privacy-checker.cjs +297 -0
  17. package/hooks/lib/project-detector.cjs +474 -0
  18. package/hooks/lib/scout-checker.cjs +263 -0
  19. package/hooks/lib/transcript-parser.cjs +181 -0
  20. package/hooks/post-edit-simplify-reminder.cjs +156 -0
  21. package/hooks/privacy-block.cjs +166 -0
  22. package/hooks/scout-block.cjs +147 -0
  23. package/hooks/session-init.cjs +360 -0
  24. package/package.json +41 -0
  25. package/rules/development-rules.md +52 -0
  26. package/rules/documentation-management.md +121 -0
  27. package/rules/orchestration-protocol.md +43 -0
  28. package/rules/primary-workflow.md +57 -0
  29. package/rules/team-coordination-rules.md +90 -0
  30. package/skills/ai/agent-browser/SKILL.md +294 -0
  31. package/skills/ai/agent-browser/references/.gitkeep +0 -0
  32. package/skills/ai/agent-browser/references/agent-browser-vs-chrome-devtools.md +112 -0
  33. package/skills/ai/agent-browser/references/browserbase-cloud-setup.md +161 -0
  34. package/skills/ai/ai-artist/SKILL.md +122 -0
  35. package/skills/ai/ai-artist/data/awesome-prompts.csv +3592 -0
  36. package/skills/ai/ai-artist/data/lighting.csv +19 -0
  37. package/skills/ai/ai-artist/data/nano-banana-templates.csv +17 -0
  38. package/skills/ai/ai-artist/data/platforms.csv +11 -0
  39. package/skills/ai/ai-artist/data/styles.csv +26 -0
  40. package/skills/ai/ai-artist/data/techniques.csv +19 -0
  41. package/skills/ai/ai-artist/data/use-cases.csv +16 -0
  42. package/skills/ai/ai-artist/references/advanced-techniques.md +184 -0
  43. package/skills/ai/ai-artist/references/awesome-nano-banana-pro-prompts.md +8575 -0
  44. package/skills/ai/ai-artist/references/domain-code.md +66 -0
  45. package/skills/ai/ai-artist/references/domain-data.md +72 -0
  46. package/skills/ai/ai-artist/references/domain-marketing.md +66 -0
  47. package/skills/ai/ai-artist/references/domain-patterns.md +33 -0
  48. package/skills/ai/ai-artist/references/domain-writing.md +68 -0
  49. package/skills/ai/ai-artist/references/image-prompting.md +141 -0
  50. package/skills/ai/ai-artist/references/llm-prompting.md +165 -0
  51. package/skills/ai/ai-artist/references/nano-banana.md +136 -0
  52. package/skills/ai/ai-artist/references/reasoning-techniques.md +201 -0
  53. package/skills/ai/ai-artist/references/validation-workflow.md +117 -0
  54. package/skills/ai/ai-artist/scripts/core.py +197 -0
  55. package/skills/ai/ai-artist/scripts/extract_prompts.py +102 -0
  56. package/skills/ai/ai-artist/scripts/generate.py +370 -0
  57. package/skills/ai/ai-artist/scripts/search.py +147 -0
  58. package/skills/ai/ai-multimodal/.env.example +204 -0
  59. package/skills/ai/ai-multimodal/SKILL.md +110 -0
  60. package/skills/ai/ai-multimodal/references/audio-processing.md +387 -0
  61. package/skills/ai/ai-multimodal/references/image-generation.md +939 -0
  62. package/skills/ai/ai-multimodal/references/music-generation.md +311 -0
  63. package/skills/ai/ai-multimodal/references/video-analysis.md +515 -0
  64. package/skills/ai/ai-multimodal/references/video-generation.md +457 -0
  65. package/skills/ai/ai-multimodal/references/vision-understanding.md +492 -0
  66. package/skills/ai/ai-multimodal/scripts/.coverage +0 -0
  67. package/skills/ai/ai-multimodal/scripts/check_setup.py +315 -0
  68. package/skills/ai/ai-multimodal/scripts/document_converter.py +395 -0
  69. package/skills/ai/ai-multimodal/scripts/gemini_batch_process.py +1185 -0
  70. package/skills/ai/ai-multimodal/scripts/media_optimizer.py +506 -0
  71. package/skills/ai/ai-multimodal/scripts/requirements.txt +26 -0
  72. package/skills/ai/ai-multimodal/scripts/tests/.coverage +0 -0
  73. package/skills/ai/ai-multimodal/scripts/tests/requirements.txt +20 -0
  74. package/skills/ai/ai-multimodal/scripts/tests/test_document_converter.py +74 -0
  75. package/skills/ai/ai-multimodal/scripts/tests/test_gemini_batch_process.py +362 -0
  76. package/skills/ai/ai-multimodal/scripts/tests/test_media_optimizer.py +373 -0
  77. package/skills/ai/mcp-management/README.md +219 -0
  78. package/skills/ai/mcp-management/SKILL.md +210 -0
  79. package/skills/ai/mcp-management/assets/tools.json +3146 -0
  80. package/skills/ai/mcp-management/references/configuration.md +114 -0
  81. package/skills/ai/mcp-management/references/gemini-cli-integration.md +221 -0
  82. package/skills/ai/mcp-management/references/mcp-protocol.md +116 -0
  83. package/skills/ai/mcp-management/scripts/.env.example +10 -0
  84. package/skills/ai/mcp-management/scripts/cli.ts +195 -0
  85. package/skills/ai/mcp-management/scripts/dist/analyze-tools.js +70 -0
  86. package/skills/ai/mcp-management/scripts/dist/cli.js +160 -0
  87. package/skills/ai/mcp-management/scripts/dist/mcp-client.js +183 -0
  88. package/skills/ai/mcp-management/scripts/mcp-client.ts +230 -0
  89. package/skills/ai/mcp-management/scripts/package.json +20 -0
  90. package/skills/ai/mcp-management/scripts/tsconfig.json +15 -0
  91. package/skills/core/brainstorm/SKILL.md +164 -0
  92. package/skills/core/brainstorm/scripts/frame-template.html +214 -0
  93. package/skills/core/brainstorm/scripts/helper.js +88 -0
  94. package/skills/core/brainstorm/scripts/server.cjs +338 -0
  95. package/skills/core/brainstorm/scripts/start-server.sh +153 -0
  96. package/skills/core/brainstorm/scripts/stop-server.sh +55 -0
  97. package/skills/core/brainstorm/spec-document-reviewer-prompt.md +49 -0
  98. package/skills/core/brainstorm/visual-companion.md +286 -0
  99. package/skills/core/code-review/SKILL.md +147 -0
  100. package/skills/core/code-review/references/code-review-reception.md +113 -0
  101. package/skills/core/code-review/references/codebase-scan-workflow.md +29 -0
  102. package/skills/core/code-review/references/edge-case-scouting.md +119 -0
  103. package/skills/core/code-review/references/parallel-review-workflow.md +69 -0
  104. package/skills/core/code-review/references/requesting-code-review.md +116 -0
  105. package/skills/core/code-review/references/task-management-reviews.md +140 -0
  106. package/skills/core/code-review/references/verification-before-completion.md +139 -0
  107. package/skills/core/cook/README.md +86 -0
  108. package/skills/core/cook/SKILL.md +113 -0
  109. package/skills/core/cook/references/intent-detection.md +101 -0
  110. package/skills/core/cook/references/review-cycle.md +75 -0
  111. package/skills/core/cook/references/subagent-patterns.md +75 -0
  112. package/skills/core/cook/references/workflow-steps.md +172 -0
  113. package/skills/core/debug/SKILL.md +121 -0
  114. package/skills/core/debug/references/defense-in-depth.md +124 -0
  115. package/skills/core/debug/references/frontend-verification.md +103 -0
  116. package/skills/core/debug/references/investigation-methodology.md +101 -0
  117. package/skills/core/debug/references/log-and-ci-analysis.md +97 -0
  118. package/skills/core/debug/references/performance-diagnostics.md +113 -0
  119. package/skills/core/debug/references/reporting-standards.md +122 -0
  120. package/skills/core/debug/references/root-cause-tracing.md +122 -0
  121. package/skills/core/debug/references/systematic-debugging.md +102 -0
  122. package/skills/core/debug/references/task-management-debugging.md +155 -0
  123. package/skills/core/debug/references/verification.md +123 -0
  124. package/skills/core/debug/scripts/find-polluter.sh +63 -0
  125. package/skills/core/debug/scripts/find-polluter.test.md +102 -0
  126. package/skills/core/execute/SKILL.md +70 -0
  127. package/skills/core/fix/SKILL.md +111 -0
  128. package/skills/core/fix/references/complexity-assessment.md +72 -0
  129. package/skills/core/fix/references/mode-selection.md +46 -0
  130. package/skills/core/fix/references/parallel-exploration.md +100 -0
  131. package/skills/core/fix/references/review-cycle.md +77 -0
  132. package/skills/core/fix/references/skill-activation-matrix.md +78 -0
  133. package/skills/core/fix/references/task-orchestration.md +103 -0
  134. package/skills/core/fix/references/workflow-ci.md +28 -0
  135. package/skills/core/fix/references/workflow-deep.md +122 -0
  136. package/skills/core/fix/references/workflow-logs.md +72 -0
  137. package/skills/core/fix/references/workflow-quick.md +59 -0
  138. package/skills/core/fix/references/workflow-standard.md +111 -0
  139. package/skills/core/fix/references/workflow-test.md +75 -0
  140. package/skills/core/fix/references/workflow-types.md +33 -0
  141. package/skills/core/fix/references/workflow-ui.md +75 -0
  142. package/skills/core/plan/SKILL.md +145 -0
  143. package/skills/core/plan/plan-document-reviewer-prompt.md +49 -0
  144. package/skills/core/subagent-dev/SKILL.md +277 -0
  145. package/skills/core/subagent-dev/code-quality-reviewer-prompt.md +26 -0
  146. package/skills/core/subagent-dev/implementer-prompt.md +113 -0
  147. package/skills/core/subagent-dev/spec-reviewer-prompt.md +61 -0
  148. package/skills/core/tdd/SKILL.md +371 -0
  149. package/skills/core/tdd/testing-anti-patterns.md +299 -0
  150. package/skills/core/test/SKILL.md +109 -0
  151. package/skills/core/test/references/report-format.md +58 -0
  152. package/skills/core/test/references/test-execution-workflow.md +103 -0
  153. package/skills/core/test/references/ui-testing-workflow.md +65 -0
  154. package/skills/core/verify/SKILL.md +139 -0
  155. package/skills/dev/backend-dev/SKILL.md +96 -0
  156. package/skills/dev/backend-dev/references/backend-api-design.md +495 -0
  157. package/skills/dev/backend-dev/references/backend-architecture.md +454 -0
  158. package/skills/dev/backend-dev/references/backend-authentication.md +338 -0
  159. package/skills/dev/backend-dev/references/backend-code-quality.md +659 -0
  160. package/skills/dev/backend-dev/references/backend-debugging.md +904 -0
  161. package/skills/dev/backend-dev/references/backend-devops.md +494 -0
  162. package/skills/dev/backend-dev/references/backend-mindset.md +387 -0
  163. package/skills/dev/backend-dev/references/backend-performance.md +397 -0
  164. package/skills/dev/backend-dev/references/backend-security.md +290 -0
  165. package/skills/dev/backend-dev/references/backend-technologies.md +256 -0
  166. package/skills/dev/backend-dev/references/backend-testing.md +429 -0
  167. package/skills/dev/context-engineering/SKILL.md +108 -0
  168. package/skills/dev/context-engineering/references/context-compression.md +84 -0
  169. package/skills/dev/context-engineering/references/context-degradation.md +93 -0
  170. package/skills/dev/context-engineering/references/context-fundamentals.md +75 -0
  171. package/skills/dev/context-engineering/references/context-optimization.md +82 -0
  172. package/skills/dev/context-engineering/references/evaluation.md +89 -0
  173. package/skills/dev/context-engineering/references/memory-systems.md +88 -0
  174. package/skills/dev/context-engineering/references/multi-agent-patterns.md +90 -0
  175. package/skills/dev/context-engineering/references/project-development.md +97 -0
  176. package/skills/dev/context-engineering/references/runtime-awareness.md +202 -0
  177. package/skills/dev/context-engineering/references/tool-design.md +86 -0
  178. package/skills/dev/context-engineering/scripts/compression_evaluator.py +349 -0
  179. package/skills/dev/context-engineering/scripts/context_analyzer.py +317 -0
  180. package/skills/dev/context-engineering/scripts/tests/test_edge_cases.py +246 -0
  181. package/skills/dev/databases/SKILL.md +84 -0
  182. package/skills/dev/databases/analytics.md +198 -0
  183. package/skills/dev/databases/db-design.md +188 -0
  184. package/skills/dev/databases/incremental-etl.md +213 -0
  185. package/skills/dev/databases/references/mongodb-aggregation.md +447 -0
  186. package/skills/dev/databases/references/mongodb-atlas.md +465 -0
  187. package/skills/dev/databases/references/mongodb-crud.md +408 -0
  188. package/skills/dev/databases/references/mongodb-indexing.md +442 -0
  189. package/skills/dev/databases/references/postgresql-administration.md +594 -0
  190. package/skills/dev/databases/references/postgresql-performance.md +527 -0
  191. package/skills/dev/databases/references/postgresql-psql-cli.md +467 -0
  192. package/skills/dev/databases/references/postgresql-queries.md +475 -0
  193. package/skills/dev/databases/scripts/.coverage +0 -0
  194. package/skills/dev/databases/scripts/db_backup.py +502 -0
  195. package/skills/dev/databases/scripts/db_migrate.py +426 -0
  196. package/skills/dev/databases/scripts/db_performance_check.py +457 -0
  197. package/skills/dev/databases/scripts/requirements.txt +20 -0
  198. package/skills/dev/databases/scripts/tests/coverage-db.json +1 -0
  199. package/skills/dev/databases/scripts/tests/requirements.txt +4 -0
  200. package/skills/dev/databases/scripts/tests/test_db_backup.py +340 -0
  201. package/skills/dev/databases/scripts/tests/test_db_migrate.py +277 -0
  202. package/skills/dev/databases/scripts/tests/test_db_performance_check.py +370 -0
  203. package/skills/dev/databases/stacks/bigquery.md +231 -0
  204. package/skills/dev/databases/stacks/d1_cloudflare.md +137 -0
  205. package/skills/dev/databases/stacks/mysql.md +216 -0
  206. package/skills/dev/databases/stacks/postgres.md +235 -0
  207. package/skills/dev/databases/stacks/sqlite.md +244 -0
  208. package/skills/dev/databases/transactional.md +176 -0
  209. package/skills/dev/devops/.env.example +76 -0
  210. package/skills/dev/devops/SKILL.md +97 -0
  211. package/skills/dev/devops/references/browser-rendering.md +305 -0
  212. package/skills/dev/devops/references/cloudflare-d1-kv.md +123 -0
  213. package/skills/dev/devops/references/cloudflare-platform.md +271 -0
  214. package/skills/dev/devops/references/cloudflare-r2-storage.md +280 -0
  215. package/skills/dev/devops/references/cloudflare-workers-advanced.md +312 -0
  216. package/skills/dev/devops/references/cloudflare-workers-apis.md +309 -0
  217. package/skills/dev/devops/references/cloudflare-workers-basics.md +418 -0
  218. package/skills/dev/devops/references/docker-basics.md +297 -0
  219. package/skills/dev/devops/references/docker-compose.md +292 -0
  220. package/skills/dev/devops/references/gcloud-platform.md +297 -0
  221. package/skills/dev/devops/references/gcloud-services.md +304 -0
  222. package/skills/dev/devops/references/kubernetes-basics.md +99 -0
  223. package/skills/dev/devops/references/kubernetes-helm-advanced.md +75 -0
  224. package/skills/dev/devops/references/kubernetes-helm.md +81 -0
  225. package/skills/dev/devops/references/kubernetes-kubectl.md +74 -0
  226. package/skills/dev/devops/references/kubernetes-security-advanced.md +98 -0
  227. package/skills/dev/devops/references/kubernetes-security.md +95 -0
  228. package/skills/dev/devops/references/kubernetes-troubleshooting-advanced.md +74 -0
  229. package/skills/dev/devops/references/kubernetes-troubleshooting.md +49 -0
  230. package/skills/dev/devops/references/kubernetes-workflows-advanced.md +75 -0
  231. package/skills/dev/devops/references/kubernetes-workflows.md +78 -0
  232. package/skills/dev/devops/scripts/cloudflare_deploy.py +269 -0
  233. package/skills/dev/devops/scripts/docker_optimize.py +332 -0
  234. package/skills/dev/devops/scripts/requirements.txt +20 -0
  235. package/skills/dev/devops/scripts/tests/requirements.txt +3 -0
  236. package/skills/dev/devops/scripts/tests/test_cloudflare_deploy.py +285 -0
  237. package/skills/dev/devops/scripts/tests/test_docker_optimize.py +436 -0
  238. package/skills/dev/frontend-design/SKILL.md +78 -0
  239. package/skills/dev/frontend-design/references/ai-multimodal-overview.md +165 -0
  240. package/skills/dev/frontend-design/references/analysis-best-practices.md +80 -0
  241. package/skills/dev/frontend-design/references/analysis-prompts.md +141 -0
  242. package/skills/dev/frontend-design/references/analysis-techniques.md +118 -0
  243. package/skills/dev/frontend-design/references/animejs.md +396 -0
  244. package/skills/dev/frontend-design/references/asset-generation.md +337 -0
  245. package/skills/dev/frontend-design/references/design-extraction-overview.md +71 -0
  246. package/skills/dev/frontend-design/references/extraction-best-practices.md +141 -0
  247. package/skills/dev/frontend-design/references/extraction-output-templates.md +162 -0
  248. package/skills/dev/frontend-design/references/extraction-prompts.md +127 -0
  249. package/skills/dev/frontend-design/references/technical-accessibility.md +119 -0
  250. package/skills/dev/frontend-design/references/technical-best-practices.md +97 -0
  251. package/skills/dev/frontend-design/references/technical-optimization.md +44 -0
  252. package/skills/dev/frontend-design/references/technical-overview.md +90 -0
  253. package/skills/dev/frontend-design/references/technical-workflows.md +150 -0
  254. package/skills/dev/frontend-design/references/visual-analysis-overview.md +95 -0
  255. package/skills/dev/frontend-design/references/workflow-3d.md +102 -0
  256. package/skills/dev/frontend-design/references/workflow-describe.md +87 -0
  257. package/skills/dev/frontend-design/references/workflow-immersive.md +87 -0
  258. package/skills/dev/frontend-design/references/workflow-quick.md +57 -0
  259. package/skills/dev/frontend-design/references/workflow-screenshot.md +63 -0
  260. package/skills/dev/frontend-design/references/workflow-video.md +74 -0
  261. package/skills/dev/frontend-dev/SKILL.md +400 -0
  262. package/skills/dev/frontend-dev/resources/common-patterns.md +331 -0
  263. package/skills/dev/frontend-dev/resources/complete-examples.md +872 -0
  264. package/skills/dev/frontend-dev/resources/component-patterns.md +502 -0
  265. package/skills/dev/frontend-dev/resources/data-fetching.md +767 -0
  266. package/skills/dev/frontend-dev/resources/file-organization.md +502 -0
  267. package/skills/dev/frontend-dev/resources/loading-and-error-states.md +501 -0
  268. package/skills/dev/frontend-dev/resources/performance.md +406 -0
  269. package/skills/dev/frontend-dev/resources/routing-guide.md +364 -0
  270. package/skills/dev/frontend-dev/resources/styling-guide.md +428 -0
  271. package/skills/dev/frontend-dev/resources/typescript-standards.md +418 -0
  272. package/skills/dev/git/SKILL.md +114 -0
  273. package/skills/dev/git/references/branch-management.md +88 -0
  274. package/skills/dev/git/references/commit-standards.md +46 -0
  275. package/skills/dev/git/references/gh-cli-guide.md +109 -0
  276. package/skills/dev/git/references/safety-protocols.md +69 -0
  277. package/skills/dev/git/references/workflow-commit.md +58 -0
  278. package/skills/dev/git/references/workflow-merge.md +48 -0
  279. package/skills/dev/git/references/workflow-pr.md +58 -0
  280. package/skills/dev/git/references/workflow-push.md +52 -0
  281. package/skills/dev/git-worktree/SKILL.md +218 -0
  282. package/skills/utils/ask/SKILL.md +58 -0
  283. package/skills/utils/bootstrap/SKILL.md +101 -0
  284. package/skills/utils/bootstrap/references/shared-phases.md +59 -0
  285. package/skills/utils/bootstrap/references/workflow-auto.md +52 -0
  286. package/skills/utils/bootstrap/references/workflow-fast.md +50 -0
  287. package/skills/utils/bootstrap/references/workflow-full.md +60 -0
  288. package/skills/utils/bootstrap/references/workflow-parallel.md +59 -0
  289. package/skills/utils/ck-help/SKILL.md +102 -0
  290. package/skills/utils/ck-help/scripts/ck-help.py +1321 -0
  291. package/skills/utils/ck-help/scripts/commands_data.yaml +3 -0
  292. package/skills/utils/ck-help/scripts/skills_data.yaml +593 -0
  293. package/skills/utils/copywriting/SKILL.md +94 -0
  294. package/skills/utils/copywriting/references/copy-formulas.md +150 -0
  295. package/skills/utils/copywriting/references/cta-patterns.md +168 -0
  296. package/skills/utils/copywriting/references/email-copy.md +193 -0
  297. package/skills/utils/copywriting/references/headline-templates.md +140 -0
  298. package/skills/utils/copywriting/references/landing-page-copy.md +175 -0
  299. package/skills/utils/copywriting/references/power-words.md +189 -0
  300. package/skills/utils/copywriting/references/social-media-copy.md +222 -0
  301. package/skills/utils/copywriting/references/workflow-cro.md +83 -0
  302. package/skills/utils/copywriting/references/workflow-enhance.md +32 -0
  303. package/skills/utils/copywriting/references/workflow-fast.md +29 -0
  304. package/skills/utils/copywriting/references/workflow-good.md +39 -0
  305. package/skills/utils/copywriting/references/writing-styles.md +247 -0
  306. package/skills/utils/copywriting/scripts/extract-writing-styles.py +308 -0
  307. package/skills/utils/copywriting/templates/copy-brief.md +49 -0
  308. package/skills/utils/docs/SKILL.md +55 -0
  309. package/skills/utils/docs/references/init-workflow.md +32 -0
  310. package/skills/utils/docs/references/summarize-workflow.md +18 -0
  311. package/skills/utils/docs/references/update-workflow.md +59 -0
  312. package/skills/utils/journal/SKILL.md +11 -0
  313. package/skills/utils/kanban/SKILL.md +99 -0
  314. package/skills/utils/preview/SKILL.md +75 -0
  315. package/skills/utils/preview/references/generation-modes.md +95 -0
  316. package/skills/utils/preview/references/view-mode.md +42 -0
  317. package/skills/utils/repomix/SKILL.md +248 -0
  318. package/skills/utils/repomix/references/configuration.md +211 -0
  319. package/skills/utils/repomix/references/usage-patterns.md +232 -0
  320. package/skills/utils/repomix/scripts/.coverage +0 -0
  321. package/skills/utils/repomix/scripts/README.md +179 -0
  322. package/skills/utils/repomix/scripts/repomix_batch.py +455 -0
  323. package/skills/utils/repomix/scripts/repos.example.json +15 -0
  324. package/skills/utils/repomix/scripts/requirements.txt +15 -0
  325. package/skills/utils/repomix/scripts/tests/test_repomix_batch.py +531 -0
  326. package/skills/utils/research/SKILL.md +171 -0
  327. package/skills/utils/scout/SKILL.md +89 -0
  328. package/skills/utils/scout/references/external-scouting.md +140 -0
  329. package/skills/utils/scout/references/internal-scouting.md +119 -0
  330. package/skills/utils/scout/references/task-management-scouting.md +125 -0
  331. package/skills/utils/sequential-thinking/.env.example +8 -0
  332. package/skills/utils/sequential-thinking/README.md +183 -0
  333. package/skills/utils/sequential-thinking/SKILL.md +95 -0
  334. package/skills/utils/sequential-thinking/package.json +31 -0
  335. package/skills/utils/sequential-thinking/references/advanced-strategies.md +79 -0
  336. package/skills/utils/sequential-thinking/references/advanced-techniques.md +76 -0
  337. package/skills/utils/sequential-thinking/references/core-patterns.md +95 -0
  338. package/skills/utils/sequential-thinking/references/examples-api.md +88 -0
  339. package/skills/utils/sequential-thinking/references/examples-architecture.md +94 -0
  340. package/skills/utils/sequential-thinking/references/examples-debug.md +90 -0
  341. package/skills/utils/sequential-thinking/scripts/format-thought.js +159 -0
  342. package/skills/utils/sequential-thinking/scripts/process-thought.js +236 -0
  343. package/skills/utils/sequential-thinking/tests/format-thought.test.js +133 -0
  344. package/skills/utils/sequential-thinking/tests/process-thought.test.js +215 -0
  345. package/skills/utils/write-skill/SKILL.md +655 -0
  346. package/skills/utils/write-skill/anthropic-best-practices.md +1150 -0
  347. package/skills/utils/write-skill/examples/CLAUDE_MD_TESTING.md +189 -0
  348. package/skills/utils/write-skill/graphviz-conventions.dot +172 -0
  349. package/skills/utils/write-skill/persuasion-principles.md +187 -0
  350. package/skills/utils/write-skill/render-graphs.js +168 -0
  351. package/skills/utils/write-skill/testing-skills-with-subagents.md +384 -0
  352. package/src/commands/init.js +238 -0
@@ -0,0 +1,102 @@
1
+ #!/usr/bin/env python3
2
+ """Extract all prompts from awesome-nano-banana-pro-prompts.md into CSV."""
3
+
4
+ import re
5
+ import csv
6
+ from pathlib import Path
7
+
8
+ def extract_prompts(md_content: str) -> list[dict]:
9
+ """Extract all prompts with their metadata."""
10
+ prompts = []
11
+
12
+ # Split by prompt entries (### No. X:)
13
+ entries = re.split(r'### No\. \d+:', md_content)
14
+
15
+ for i, entry in enumerate(entries[1:], 1): # Skip content before first entry
16
+ prompt_data = {
17
+ "id": i,
18
+ "title": "",
19
+ "category": "",
20
+ "description": "",
21
+ "prompt": "",
22
+ "author": "",
23
+ "source": "",
24
+ }
25
+
26
+ # Extract title (first line after split)
27
+ title_match = re.search(r'^([^\n]+)', entry.strip())
28
+ if title_match:
29
+ prompt_data["title"] = title_match.group(1).strip()
30
+
31
+ # Extract category from badges
32
+ categories = re.findall(r'!\[([^\]]+)\]\([^)]+badge[^)]*\)', entry)
33
+ if categories:
34
+ # Filter out non-category badges
35
+ cats = [c for c in categories if c not in ["Featured", "Raycast", "Language-ZH", "Language-EN", "Language-JA"]]
36
+ prompt_data["category"] = ", ".join(cats[:3]) if cats else ""
37
+
38
+ # Extract description
39
+ desc_match = re.search(r'#### 📖 Description\s*\n\n([^\n#]+)', entry)
40
+ if desc_match:
41
+ prompt_data["description"] = desc_match.group(1).strip()
42
+
43
+ # Extract prompt (between ``` markers after "#### 📝 Prompt")
44
+ prompt_section = re.search(r'#### 📝 Prompt\s*\n\n```[^\n]*\n(.*?)```', entry, re.DOTALL)
45
+ if prompt_section:
46
+ prompt_data["prompt"] = prompt_section.group(1).strip()
47
+
48
+ # Extract author
49
+ author_match = re.search(r'\*\*Author:\*\*\s*\[([^\]]+)\]', entry)
50
+ if author_match:
51
+ prompt_data["author"] = author_match.group(1).strip()
52
+
53
+ # Extract source URL
54
+ source_match = re.search(r'\*\*Source:\*\*\s*\[([^\]]+)\]\(([^)]+)\)', entry)
55
+ if source_match:
56
+ prompt_data["source"] = source_match.group(2).strip()
57
+
58
+ if prompt_data["prompt"]: # Only add if we found a prompt
59
+ prompts.append(prompt_data)
60
+
61
+ return prompts
62
+
63
+
64
+ def save_to_csv(prompts: list[dict], output_path: Path):
65
+ """Save prompts to CSV file."""
66
+ fieldnames = ["id", "title", "category", "description", "prompt", "author", "source"]
67
+
68
+ with open(output_path, 'w', newline='', encoding='utf-8') as f:
69
+ writer = csv.DictWriter(f, fieldnames=fieldnames, quoting=csv.QUOTE_ALL)
70
+ writer.writeheader()
71
+ for p in prompts:
72
+ writer.writerow(p)
73
+
74
+ print(f"Saved {len(prompts)} prompts to {output_path}")
75
+
76
+
77
+ def main():
78
+ script_dir = Path(__file__).parent
79
+ md_path = script_dir.parent / "references" / "awesome-nano-banana-pro-prompts.md"
80
+ csv_path = script_dir.parent / "data" / "awesome-prompts.csv"
81
+
82
+ print(f"Reading from: {md_path}")
83
+
84
+ with open(md_path, 'r', encoding='utf-8') as f:
85
+ content = f.read()
86
+
87
+ prompts = extract_prompts(content)
88
+ print(f"Extracted {len(prompts)} prompts")
89
+
90
+ # Print sample
91
+ if prompts:
92
+ print("\nSample prompts:")
93
+ for p in prompts[:3]:
94
+ print(f"\n[{p['id']}] {p['title'][:50]}...")
95
+ print(f" Category: {p['category']}")
96
+ print(f" Prompt: {p['prompt'][:100]}...")
97
+
98
+ save_to_csv(prompts, csv_path)
99
+
100
+
101
+ if __name__ == "__main__":
102
+ main()
@@ -0,0 +1,370 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ """
4
+ AI Artist Generate - Nano Banana image generation with 3 creative modes
5
+
6
+ Uses 129 actual prompts from awesome-nano-banana-pro-prompts collection.
7
+
8
+ Usage:
9
+ python generate.py "<concept>" --output <path.png> [options]
10
+
11
+ Modes:
12
+ --mode search : Find best matching prompt (default)
13
+ --mode creative : Remix elements from multiple prompts
14
+ --mode wild : AI-enhanced out-of-the-box interpretation
15
+ --mode all : Generate all 3 variations
16
+ """
17
+
18
+ import argparse
19
+ import sys
20
+ import os
21
+ import re
22
+ import random
23
+ from pathlib import Path
24
+
25
+ # Add parent for core imports
26
+ sys.path.insert(0, str(Path(__file__).parent))
27
+ from core import search
28
+
29
+ # Gemini API setup
30
+ CLAUDE_ROOT = Path.home() / '.claude'
31
+ sys.path.insert(0, str(CLAUDE_ROOT / 'scripts'))
32
+ PROJECT_CLAUDE = Path(__file__).parent.parent.parent.parent
33
+ sys.path.insert(0, str(PROJECT_CLAUDE / 'scripts'))
34
+ try:
35
+ from resolve_env import resolve_env
36
+ CENTRALIZED_RESOLVER = True
37
+ except ImportError:
38
+ CENTRALIZED_RESOLVER = False
39
+ try:
40
+ from dotenv import load_dotenv
41
+ load_dotenv(Path.home() / '.claude' / '.env')
42
+ load_dotenv(Path.home() / '.claude' / 'skills' / '.env')
43
+ except ImportError:
44
+ pass
45
+
46
+ try:
47
+ from google import genai
48
+ from google.genai import types
49
+ GENAI_AVAILABLE = True
50
+ except ImportError:
51
+ GENAI_AVAILABLE = False
52
+
53
+
54
+ # ============ CONFIGURATION ============
55
+ NANO_BANANA_MODELS = {
56
+ "flash": "gemini-2.5-flash-image",
57
+ "pro": "gemini-3-pro-image-preview",
58
+ }
59
+ DEFAULT_MODEL = "flash"
60
+ ASPECT_RATIOS = ["1:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9", "21:9"]
61
+
62
+
63
+ def get_api_key() -> str:
64
+ """Get Gemini API key from environment."""
65
+ if CENTRALIZED_RESOLVER:
66
+ return resolve_env('GEMINI_API_KEY', skill='ai-multimodal')
67
+ return os.getenv('GEMINI_API_KEY')
68
+
69
+
70
+ def adapt_prompt(template_prompt: str, concept: str, **kwargs) -> str:
71
+ """Adapt a template prompt to the user's concept.
72
+
73
+ Intelligently replaces variables and adapts the prompt while keeping
74
+ the original structure and Nano Banana narrative style.
75
+ """
76
+ prompt = template_prompt
77
+
78
+ # Replace common variable patterns
79
+ replacements = {
80
+ # Raycast-style arguments
81
+ r'\{argument name="[^"]*" default="[^"]*"\}': concept,
82
+ r'\{argument name=[^}]+\}': concept,
83
+ # Bracket variables
84
+ r'\[insert [^\]]+\]': concept,
85
+ r'\[subject\]': concept,
86
+ r'\[concept\]': concept,
87
+ r'\[topic\]': concept,
88
+ r'\[product\]': concept,
89
+ r'\[scene\]': concept,
90
+ r'\[description\]': concept,
91
+ # Generic placeholders
92
+ r'\{[^}]+\}': lambda m: kwargs.get(m.group(0)[1:-1], concept),
93
+ }
94
+
95
+ for pattern, replacement in replacements.items():
96
+ if callable(replacement):
97
+ prompt = re.sub(pattern, replacement, prompt, flags=re.IGNORECASE)
98
+ else:
99
+ prompt = re.sub(pattern, replacement, prompt, flags=re.IGNORECASE)
100
+
101
+ # Ensure negative constraints exist (Nano Banana style)
102
+ if "NEVER" not in prompt and "DO NOT" not in prompt:
103
+ prompt += " NEVER add watermarks or unwanted text. DO NOT include labels."
104
+
105
+ return prompt
106
+
107
+
108
+ def mode_search(concept: str, verbose: bool = False) -> tuple[str, dict]:
109
+ """Mode 1: Find best matching prompt from awesome collection."""
110
+ result = search(concept, "awesome", 1)
111
+
112
+ if result.get("count", 0) > 0:
113
+ match = result["results"][0]
114
+ prompt = adapt_prompt(match["prompt"], concept)
115
+
116
+ if verbose:
117
+ print(f" [SEARCH] Matched: {match['title'][:60]}...")
118
+ print(f" Author: {match.get('author', 'Unknown')}")
119
+
120
+ return prompt, {"mode": "search", "match": match}
121
+
122
+ # Fallback to basic prompt
123
+ prompt = f"A professional image of {concept}. High quality, detailed. Professional photography. NEVER add watermarks."
124
+ return prompt, {"mode": "search", "match": None}
125
+
126
+
127
+ def mode_creative(concept: str, verbose: bool = False) -> tuple[str, dict]:
128
+ """Mode 2: Creative remix - combine elements from multiple prompts."""
129
+ # Get top 3 matches
130
+ result = search(concept, "awesome", 3)
131
+ matches = result.get("results", [])
132
+
133
+ if len(matches) < 2:
134
+ return mode_search(concept, verbose)
135
+
136
+ # Extract key elements from each prompt
137
+ elements = []
138
+ for m in matches:
139
+ prompt = m.get("prompt", "")
140
+ # Extract style descriptions, lighting, composition hints
141
+ if "style" in prompt.lower() or "lighting" in prompt.lower():
142
+ elements.append(prompt[:200])
143
+
144
+ if verbose:
145
+ print(f" [CREATIVE] Remixing {len(matches)} prompts:")
146
+ for m in matches:
147
+ print(f" - {m['title'][:50]}...")
148
+
149
+ # Build creative remix
150
+ base = matches[0]["prompt"]
151
+ style_hints = []
152
+
153
+ # Extract style from second match
154
+ if len(matches) > 1:
155
+ m2 = matches[1]["prompt"]
156
+ style_match = re.search(r'(style[^.]+\.)', m2, re.IGNORECASE)
157
+ if style_match:
158
+ style_hints.append(style_match.group(1))
159
+
160
+ # Extract lighting/mood from third match
161
+ if len(matches) > 2:
162
+ m3 = matches[2]["prompt"]
163
+ light_match = re.search(r'(lighting[^.]+\.)', m3, re.IGNORECASE)
164
+ if light_match:
165
+ style_hints.append(light_match.group(1))
166
+
167
+ # Adapt and enhance
168
+ prompt = adapt_prompt(base, concept)
169
+ if style_hints:
170
+ prompt += " " + " ".join(style_hints)
171
+
172
+ return prompt, {"mode": "creative", "matches": [m["title"] for m in matches]}
173
+
174
+
175
+ def mode_wild(concept: str, verbose: bool = False) -> tuple[str, dict]:
176
+ """Mode 3: Wild/Out-of-the-box - AI-enhanced creative interpretation."""
177
+ result = search(concept, "awesome", 5)
178
+ matches = result.get("results", [])
179
+
180
+ # Creative transformations
181
+ transformations = [
182
+ "reimagined as a Japanese Ukiyo-e woodblock print with Prussian blue and vermilion",
183
+ "transformed into a premium liquid glass Bento grid infographic",
184
+ "captured as a vintage 1800s patent document with technical drawings",
185
+ "rendered as a surreal dreamscape with volumetric god rays",
186
+ "depicted in cyberpunk neon aesthetic with holographic elements",
187
+ "illustrated as a hand-drawn chalkboard explanation",
188
+ "visualized as an isometric 3D diorama with miniature figures",
189
+ "presented as a cinematic movie poster with dramatic lighting",
190
+ "created as a vaporwave aesthetic with glitch effects and Roman statues",
191
+ "designed as a premium Apple-style product showcase",
192
+ ]
193
+
194
+ # Pick random transformation
195
+ transform = random.choice(transformations)
196
+
197
+ if matches:
198
+ # Use structure from a random match but apply wild transformation
199
+ base = random.choice(matches)
200
+ prompt = f"{concept}, {transform}. "
201
+
202
+ # Extract any technical camera/quality settings from matched prompt
203
+ tech_match = re.search(r'(\d+mm lens|f/[\d.]+|Canon|Nikon|professional photography)', base["prompt"])
204
+ if tech_match:
205
+ prompt += f"Shot with {tech_match.group(1)}. "
206
+
207
+ if verbose:
208
+ print(f" [WILD] Transform: {transform}")
209
+ print(f" Based on: {base['title'][:50]}...")
210
+ else:
211
+ prompt = f"{concept}, {transform}. Professional quality."
212
+
213
+ prompt += " NEVER add watermarks. DO NOT include unwanted text."
214
+
215
+ return prompt, {"mode": "wild", "transformation": transform}
216
+
217
+
218
+ def generate_image(
219
+ prompt: str,
220
+ output_path: str,
221
+ model: str = DEFAULT_MODEL,
222
+ aspect_ratio: str = "1:1",
223
+ size: str = "2K",
224
+ verbose: bool = False
225
+ ) -> dict:
226
+ """Generate image using Nano Banana (Gemini image models)."""
227
+
228
+ if not GENAI_AVAILABLE:
229
+ return {"status": "error", "error": "google-genai not installed. Run: pip install google-genai"}
230
+
231
+ api_key = get_api_key()
232
+ if not api_key:
233
+ return {"status": "error", "error": "GEMINI_API_KEY not found"}
234
+
235
+ model_id = NANO_BANANA_MODELS.get(model, model)
236
+
237
+ if verbose:
238
+ print(f"\n[Nano Banana Generation]")
239
+ print(f" Model: {model_id}")
240
+ print(f" Aspect: {aspect_ratio}")
241
+ print(f" Prompt: {prompt[:100]}...")
242
+
243
+ try:
244
+ client = genai.Client(api_key=api_key)
245
+
246
+ # Build config
247
+ image_config_args = {'aspect_ratio': aspect_ratio}
248
+ if 'pro' in model_id.lower() and size:
249
+ image_config_args['image_size'] = size
250
+
251
+ config = types.GenerateContentConfig(
252
+ response_modalities=['IMAGE'],
253
+ image_config=types.ImageConfig(**image_config_args)
254
+ )
255
+
256
+ response = client.models.generate_content(
257
+ model=model_id,
258
+ contents=[prompt],
259
+ config=config
260
+ )
261
+
262
+ output_file = Path(output_path)
263
+ output_file.parent.mkdir(parents=True, exist_ok=True)
264
+
265
+ if hasattr(response, 'candidates') and response.candidates:
266
+ for part in response.candidates[0].content.parts:
267
+ if part.inline_data:
268
+ with open(output_file, 'wb') as f:
269
+ f.write(part.inline_data.data)
270
+
271
+ if verbose:
272
+ print(f" Generated: {output_file}")
273
+
274
+ return {"status": "success", "output": str(output_file), "model": model_id}
275
+
276
+ return {"status": "error", "error": "No image in response"}
277
+
278
+ except Exception as e:
279
+ return {"status": "error", "error": str(e)}
280
+
281
+
282
+ def main():
283
+ parser = argparse.ArgumentParser(
284
+ description="AI Artist Generate - Nano Banana with 3 creative modes",
285
+ formatter_class=argparse.RawDescriptionHelpFormatter,
286
+ epilog="""
287
+ Modes:
288
+ search : Find best matching prompt from 129 curated prompts (default)
289
+ creative : Remix elements from multiple matching prompts
290
+ wild : AI-enhanced out-of-the-box creative interpretation
291
+ all : Generate all 3 variations
292
+
293
+ Examples:
294
+ # Search mode (default)
295
+ python generate.py "tech conference banner" -o banner.png
296
+
297
+ # Creative remix
298
+ python generate.py "AI workshop" -o workshop.png --mode creative
299
+
300
+ # Wild/experimental
301
+ python generate.py "product showcase" -o product.png --mode wild
302
+
303
+ # Generate all 3 variations
304
+ python generate.py "futuristic city" -o city.png --mode all
305
+ """
306
+ )
307
+
308
+ parser.add_argument("concept", help="Core concept/subject to generate")
309
+ parser.add_argument("--output", "-o", required=True, help="Output image path")
310
+ parser.add_argument("--mode", "-m", choices=["search", "creative", "wild", "all"],
311
+ default="search", help="Generation mode")
312
+ parser.add_argument("--model", choices=list(NANO_BANANA_MODELS.keys()),
313
+ default=DEFAULT_MODEL, help="Model: flash or pro")
314
+ parser.add_argument("--aspect-ratio", "-ar", choices=ASPECT_RATIOS, default="1:1")
315
+ parser.add_argument("--size", choices=["1K", "2K", "4K"], default="2K")
316
+ parser.add_argument("--verbose", "-v", action="store_true")
317
+ parser.add_argument("--show-prompt", action="store_true", help="Print generated prompt")
318
+ parser.add_argument("--dry-run", action="store_true", help="Build prompt without generating")
319
+
320
+ args = parser.parse_args()
321
+
322
+ if args.verbose:
323
+ print(f"[Concept: {args.concept}]")
324
+
325
+ # Determine modes to run
326
+ modes = ["search", "creative", "wild"] if args.mode == "all" else [args.mode]
327
+
328
+ for mode in modes:
329
+ if args.verbose or len(modes) > 1:
330
+ print(f"\n{'='*50}")
331
+ print(f"[Mode: {mode.upper()}]")
332
+
333
+ # Build prompt based on mode
334
+ if mode == "search":
335
+ prompt, meta = mode_search(args.concept, args.verbose)
336
+ elif mode == "creative":
337
+ prompt, meta = mode_creative(args.concept, args.verbose)
338
+ elif mode == "wild":
339
+ prompt, meta = mode_wild(args.concept, args.verbose)
340
+
341
+ if args.show_prompt or args.verbose:
342
+ print(f"\n[Prompt]\n{prompt}\n")
343
+
344
+ if args.dry_run:
345
+ print("[Dry run - no generation]")
346
+ continue
347
+
348
+ # Generate output path for mode
349
+ output_path = args.output
350
+ if len(modes) > 1:
351
+ base = Path(args.output)
352
+ output_path = str(base.parent / f"{base.stem}-{mode}{base.suffix}")
353
+
354
+ result = generate_image(
355
+ prompt=prompt,
356
+ output_path=output_path,
357
+ model=args.model,
358
+ aspect_ratio=args.aspect_ratio,
359
+ size=args.size,
360
+ verbose=args.verbose
361
+ )
362
+
363
+ if result["status"] == "success":
364
+ print(f"✓ Generated: {result['output']}")
365
+ else:
366
+ print(f"✗ Error: {result['error']}")
367
+
368
+
369
+ if __name__ == "__main__":
370
+ main()
@@ -0,0 +1,147 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ """
4
+ AI Artist Search - BM25 search engine for prompt engineering resources
5
+ Usage: python search.py "<query>" [--domain <domain>] [--max-results 3]
6
+ python search.py "<query>" --prompt-system [--platform <platform>]
7
+
8
+ Domains: use-case, style, platform, technique, lighting
9
+ Platforms: midjourney, dalle, sd, flux, nano-banana
10
+ """
11
+
12
+ import argparse
13
+ import sys
14
+ from core import CSV_CONFIG, MAX_RESULTS, search, search_all_domains
15
+
16
+ # Fix Windows cp1252 encoding: hardcoded emojis can't encode on Windows.
17
+ # Reconfigure stdout to UTF-8 with replacement (Python 3.7+).
18
+ if sys.stdout.encoding and sys.stdout.encoding.lower() != "utf-8":
19
+ if hasattr(sys.stdout, 'reconfigure'):
20
+ sys.stdout.reconfigure(encoding="utf-8", errors="replace")
21
+
22
+
23
+ def format_output(result):
24
+ """Format results for Claude consumption (token-optimized)"""
25
+ if "error" in result:
26
+ return f"Error: {result['error']}"
27
+
28
+ output = []
29
+ output.append(f"## AI Artist Search Results")
30
+ output.append(f"**Domain:** {result['domain']} | **Query:** {result['query']}")
31
+ output.append(f"**Source:** {result['file']} | **Found:** {result['count']} results\n")
32
+
33
+ for i, row in enumerate(result['results'], 1):
34
+ output.append(f"### Result {i}")
35
+ for key, value in row.items():
36
+ value_str = str(value)
37
+ if len(value_str) > 400:
38
+ value_str = value_str[:400] + "..."
39
+ output.append(f"- **{key}:** {value_str}")
40
+ output.append("")
41
+
42
+ return "\n".join(output)
43
+
44
+
45
+ def generate_prompt_system(query, platform=None):
46
+ """Generate a comprehensive prompt system for a given concept"""
47
+ output = []
48
+ output.append(f"## 🎨 AI Artist Prompt System")
49
+ output.append(f"**Concept:** {query}")
50
+ if platform:
51
+ output.append(f"**Target Platform:** {platform}")
52
+ output.append("")
53
+
54
+ # Search relevant domains
55
+ use_case = search(query, "use-case", 1)
56
+ style = search(query, "style", 2)
57
+ lighting = search(query, "lighting", 1)
58
+ technique = search(query, "technique", 2)
59
+
60
+ # Use case / Template
61
+ if use_case.get("count", 0) > 0:
62
+ uc = use_case["results"][0]
63
+ output.append("### 📋 Use Case Match")
64
+ output.append(f"**{uc.get('Use Case', 'N/A')}** ({uc.get('Category', '')})")
65
+ if uc.get("Prompt Template"):
66
+ output.append(f"**Template:** `{uc.get('Prompt Template')}`")
67
+ if uc.get("Key Elements"):
68
+ output.append(f"**Key Elements:** {uc.get('Key Elements')}")
69
+ if uc.get("Tips"):
70
+ output.append(f"**Tips:** {uc.get('Tips')}")
71
+ output.append("")
72
+
73
+ # Styles
74
+ if style.get("count", 0) > 0:
75
+ output.append("### 🎭 Recommended Styles")
76
+ for s in style["results"]:
77
+ output.append(f"**{s.get('Style Name', 'N/A')}** - {s.get('Description', '')}")
78
+ if s.get("Prompt Keywords"):
79
+ output.append(f" Keywords: `{s.get('Prompt Keywords')}`")
80
+ output.append("")
81
+
82
+ # Lighting
83
+ if lighting.get("count", 0) > 0:
84
+ lt = lighting["results"][0]
85
+ output.append("### 💡 Lighting Suggestion")
86
+ output.append(f"**{lt.get('Lighting Type', 'N/A')}** - {lt.get('Description', '')}")
87
+ output.append(f" Mood: {lt.get('Mood', '')} | Keywords: `{lt.get('Prompt Keywords', '')}`")
88
+ output.append("")
89
+
90
+ # Techniques
91
+ if technique.get("count", 0) > 0:
92
+ output.append("### 🔧 Relevant Techniques")
93
+ for t in technique["results"]:
94
+ output.append(f"**{t.get('Technique', 'N/A')}**: {t.get('Description', '')}")
95
+ if t.get("Syntax Example"):
96
+ output.append(f" Example: `{t.get('Syntax Example')}`")
97
+ output.append("")
98
+
99
+ # Platform-specific tips
100
+ if platform:
101
+ plat = search(platform, "platform", 1)
102
+ if plat.get("count", 0) > 0:
103
+ p = plat["results"][0]
104
+ output.append(f"### 🖥️ {p.get('Platform', '')} Tips")
105
+ output.append(f"**Prompt Style:** {p.get('Prompt Style', '')}")
106
+ output.append(f"**Key Parameters:** {p.get('Key Parameters', '')}")
107
+ output.append(f"**Best Practices:** {p.get('Best Practices', '')}")
108
+ output.append("")
109
+
110
+ return "\n".join(output)
111
+
112
+
113
+ if __name__ == "__main__":
114
+ parser = argparse.ArgumentParser(description="AI Artist Search")
115
+ parser.add_argument("query", help="Search query")
116
+ parser.add_argument("--domain", "-d", choices=list(CSV_CONFIG.keys()), help="Search domain")
117
+ parser.add_argument("--max-results", "-n", type=int, default=MAX_RESULTS, help="Max results (default: 3)")
118
+ parser.add_argument("--json", action="store_true", help="Output as JSON")
119
+ # Prompt system generation
120
+ parser.add_argument("--prompt-system", "-ps", action="store_true", help="Generate comprehensive prompt system")
121
+ parser.add_argument("--platform", "-p", type=str, default=None, help="Target platform for prompt system")
122
+ parser.add_argument("--all", "-a", action="store_true", help="Search all domains")
123
+
124
+ args = parser.parse_args()
125
+
126
+ # Prompt system generation
127
+ if args.prompt_system:
128
+ result = generate_prompt_system(args.query, args.platform)
129
+ print(result)
130
+ # Search all domains
131
+ elif args.all:
132
+ results = search_all_domains(args.query, args.max_results)
133
+ if args.json:
134
+ import json
135
+ print(json.dumps(results, indent=2, ensure_ascii=False))
136
+ else:
137
+ for domain, result in results.items():
138
+ print(format_output(result))
139
+ print("---\n")
140
+ # Domain search
141
+ else:
142
+ result = search(args.query, args.domain, args.max_results)
143
+ if args.json:
144
+ import json
145
+ print(json.dumps(result, indent=2, ensure_ascii=False))
146
+ else:
147
+ print(format_output(result))