bps-kit 1.0.1 → 1.0.2

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 (368) hide show
  1. package/package.json +1 -1
  2. package/templates/.agents/agents/backend-specialist.md +263 -0
  3. package/templates/.agents/agents/code-archaeologist.md +106 -0
  4. package/templates/.agents/agents/database-architect.md +226 -0
  5. package/templates/.agents/agents/debugger.md +225 -0
  6. package/templates/.agents/agents/devops-engineer.md +242 -0
  7. package/templates/.agents/agents/documentation-writer.md +104 -0
  8. package/templates/.agents/agents/explorer-agent.md +73 -0
  9. package/templates/.agents/agents/frontend-specialist.md +593 -0
  10. package/templates/.agents/agents/game-developer.md +162 -0
  11. package/templates/.agents/agents/mobile-developer.md +377 -0
  12. package/templates/.agents/agents/orchestrator.md +416 -0
  13. package/templates/.agents/agents/penetration-tester.md +188 -0
  14. package/templates/.agents/agents/performance-optimizer.md +187 -0
  15. package/templates/.agents/agents/product-manager.md +112 -0
  16. package/templates/.agents/agents/product-owner.md +95 -0
  17. package/templates/.agents/agents/project-planner.md +406 -0
  18. package/templates/.agents/agents/qa-automation-engineer.md +103 -0
  19. package/templates/.agents/agents/security-auditor.md +170 -0
  20. package/templates/.agents/agents/seo-specialist.md +111 -0
  21. package/templates/.agents/agents/test-engineer.md +158 -0
  22. package/templates/.agents/rules/GEMINI.md +219 -0
  23. package/templates/.agents/scripts/auto_preview.py +148 -0
  24. package/templates/.agents/scripts/checklist.py +217 -0
  25. package/templates/.agents/scripts/session_manager.py +120 -0
  26. package/templates/.agents/scripts/verify_all.py +327 -0
  27. package/templates/.agents/workflows/brainstorm.md +113 -0
  28. package/templates/.agents/workflows/create.md +59 -0
  29. package/templates/.agents/workflows/debug.md +103 -0
  30. package/templates/.agents/workflows/deploy.md +176 -0
  31. package/templates/.agents/workflows/enhance.md +63 -0
  32. package/templates/.agents/workflows/orchestrate.md +237 -0
  33. package/templates/.agents/workflows/plan.md +89 -0
  34. package/templates/.agents/workflows/preview.md +81 -0
  35. package/templates/.agents/workflows/setup-brain.md +39 -0
  36. package/templates/.agents/workflows/status.md +86 -0
  37. package/templates/.agents/workflows/test.md +144 -0
  38. package/templates/.agents/workflows/ui-ux-pro-max.md +296 -0
  39. package/templates/skills_normal/api-patterns/scripts/api_validator.py +211 -0
  40. package/templates/skills_normal/database-design/scripts/schema_validator.py +172 -0
  41. package/templates/skills_normal/frontend-design/scripts/accessibility_checker.py +183 -0
  42. package/templates/skills_normal/frontend-design/scripts/ux_audit.py +722 -0
  43. package/templates/skills_normal/git-pushing/scripts/smart_commit.sh +19 -0
  44. package/templates/skills_normal/lint-and-validate/scripts/lint_runner.py +184 -0
  45. package/templates/skills_normal/lint-and-validate/scripts/type_coverage.py +173 -0
  46. package/templates/skills_normal/performance-profiling/scripts/lighthouse_audit.py +76 -0
  47. package/templates/skills_normal/senior-fullstack/scripts/code_quality_analyzer.py +114 -0
  48. package/templates/skills_normal/senior-fullstack/scripts/fullstack_scaffolder.py +114 -0
  49. package/templates/skills_normal/senior-fullstack/scripts/project_scaffolder.py +114 -0
  50. package/templates/skills_normal/seo-fundamentals/scripts/seo_checker.py +219 -0
  51. package/templates/skills_normal/testing-patterns/scripts/test_runner.py +219 -0
  52. package/templates/skills_normal/vulnerability-scanner/scripts/security_scan.py +458 -0
  53. package/templates/vault/007/scripts/config.py +472 -0
  54. package/templates/vault/007/scripts/full_audit.py +1306 -0
  55. package/templates/vault/007/scripts/quick_scan.py +481 -0
  56. package/templates/vault/007/scripts/requirements.txt +26 -0
  57. package/templates/vault/007/scripts/scanners/__init__.py +0 -0
  58. package/templates/vault/007/scripts/scanners/dependency_scanner.py +1305 -0
  59. package/templates/vault/007/scripts/scanners/injection_scanner.py +1104 -0
  60. package/templates/vault/007/scripts/scanners/secrets_scanner.py +1008 -0
  61. package/templates/vault/007/scripts/score_calculator.py +693 -0
  62. package/templates/vault/agent-orchestrator/scripts/match_skills.py +329 -0
  63. package/templates/vault/agent-orchestrator/scripts/orchestrate.py +304 -0
  64. package/templates/vault/agent-orchestrator/scripts/requirements.txt +1 -0
  65. package/templates/vault/agent-orchestrator/scripts/scan_registry.py +508 -0
  66. package/templates/vault/ai-studio-image/scripts/config.py +613 -0
  67. package/templates/vault/ai-studio-image/scripts/generate.py +630 -0
  68. package/templates/vault/ai-studio-image/scripts/prompt_engine.py +424 -0
  69. package/templates/vault/ai-studio-image/scripts/requirements.txt +4 -0
  70. package/templates/vault/ai-studio-image/scripts/templates.py +349 -0
  71. package/templates/vault/android_ui_verification/scripts/verify_ui.sh +32 -0
  72. package/templates/vault/apify-audience-analysis/reference/scripts/run_actor.js +363 -0
  73. package/templates/vault/apify-brand-reputation-monitoring/reference/scripts/run_actor.js +363 -0
  74. package/templates/vault/apify-competitor-intelligence/reference/scripts/run_actor.js +363 -0
  75. package/templates/vault/apify-content-analytics/reference/scripts/run_actor.js +363 -0
  76. package/templates/vault/apify-ecommerce/reference/scripts/package.json +3 -0
  77. package/templates/vault/apify-ecommerce/reference/scripts/run_actor.js +369 -0
  78. package/templates/vault/apify-influencer-discovery/reference/scripts/run_actor.js +363 -0
  79. package/templates/vault/apify-lead-generation/reference/scripts/run_actor.js +363 -0
  80. package/templates/vault/apify-market-research/reference/scripts/run_actor.js +363 -0
  81. package/templates/vault/apify-trend-analysis/reference/scripts/run_actor.js +363 -0
  82. package/templates/vault/apify-ultimate-scraper/reference/scripts/run_actor.js +363 -0
  83. package/templates/vault/audio-transcriber/scripts/install-requirements.sh +190 -0
  84. package/templates/vault/audio-transcriber/scripts/transcribe.py +486 -0
  85. package/templates/vault/claude-monitor/scripts/api_bench.py +240 -0
  86. package/templates/vault/claude-monitor/scripts/config.py +69 -0
  87. package/templates/vault/claude-monitor/scripts/health_check.py +362 -0
  88. package/templates/vault/claude-monitor/scripts/monitor.py +296 -0
  89. package/templates/vault/content-creator/scripts/brand_voice_analyzer.py +185 -0
  90. package/templates/vault/content-creator/scripts/seo_optimizer.py +419 -0
  91. package/templates/vault/context-agent/scripts/active_context.py +227 -0
  92. package/templates/vault/context-agent/scripts/compressor.py +149 -0
  93. package/templates/vault/context-agent/scripts/config.py +69 -0
  94. package/templates/vault/context-agent/scripts/context_loader.py +155 -0
  95. package/templates/vault/context-agent/scripts/context_manager.py +302 -0
  96. package/templates/vault/context-agent/scripts/models.py +103 -0
  97. package/templates/vault/context-agent/scripts/project_registry.py +132 -0
  98. package/templates/vault/context-agent/scripts/requirements.txt +6 -0
  99. package/templates/vault/context-agent/scripts/search.py +115 -0
  100. package/templates/vault/context-agent/scripts/session_parser.py +206 -0
  101. package/templates/vault/context-agent/scripts/session_summary.py +319 -0
  102. package/templates/vault/context-guardian/scripts/context_snapshot.py +229 -0
  103. package/templates/vault/docx/ooxml/scripts/pack.py +159 -0
  104. package/templates/vault/docx/ooxml/scripts/unpack.py +29 -0
  105. package/templates/vault/docx/ooxml/scripts/validate.py +69 -0
  106. package/templates/vault/docx/ooxml/scripts/validation/__init__.py +15 -0
  107. package/templates/vault/docx/ooxml/scripts/validation/base.py +951 -0
  108. package/templates/vault/docx/ooxml/scripts/validation/docx.py +274 -0
  109. package/templates/vault/docx/ooxml/scripts/validation/pptx.py +315 -0
  110. package/templates/vault/docx/ooxml/scripts/validation/redlining.py +279 -0
  111. package/templates/vault/docx/scripts/__init__.py +1 -0
  112. package/templates/vault/docx/scripts/document.py +1276 -0
  113. package/templates/vault/docx/scripts/templates/comments.xml +3 -0
  114. package/templates/vault/docx/scripts/templates/commentsExtended.xml +3 -0
  115. package/templates/vault/docx/scripts/templates/commentsExtensible.xml +3 -0
  116. package/templates/vault/docx/scripts/templates/commentsIds.xml +3 -0
  117. package/templates/vault/docx/scripts/templates/people.xml +3 -0
  118. package/templates/vault/docx/scripts/utilities.py +374 -0
  119. package/templates/vault/docx-official/ooxml/scripts/pack.py +159 -0
  120. package/templates/vault/docx-official/ooxml/scripts/unpack.py +29 -0
  121. package/templates/vault/docx-official/ooxml/scripts/validate.py +69 -0
  122. package/templates/vault/docx-official/ooxml/scripts/validation/__init__.py +15 -0
  123. package/templates/vault/docx-official/ooxml/scripts/validation/base.py +951 -0
  124. package/templates/vault/docx-official/ooxml/scripts/validation/docx.py +274 -0
  125. package/templates/vault/docx-official/ooxml/scripts/validation/pptx.py +315 -0
  126. package/templates/vault/docx-official/ooxml/scripts/validation/redlining.py +279 -0
  127. package/templates/vault/docx-official/scripts/__init__.py +1 -0
  128. package/templates/vault/docx-official/scripts/document.py +1276 -0
  129. package/templates/vault/docx-official/scripts/templates/comments.xml +3 -0
  130. package/templates/vault/docx-official/scripts/templates/commentsExtended.xml +3 -0
  131. package/templates/vault/docx-official/scripts/templates/commentsExtensible.xml +3 -0
  132. package/templates/vault/docx-official/scripts/templates/commentsIds.xml +3 -0
  133. package/templates/vault/docx-official/scripts/templates/people.xml +3 -0
  134. package/templates/vault/docx-official/scripts/utilities.py +374 -0
  135. package/templates/vault/geo-fundamentals/scripts/geo_checker.py +289 -0
  136. package/templates/vault/helm-chart-scaffolding/scripts/validate-chart.sh +244 -0
  137. package/templates/vault/i18n-localization/scripts/i18n_checker.py +241 -0
  138. package/templates/vault/instagram/scripts/account_setup.py +233 -0
  139. package/templates/vault/instagram/scripts/analyze.py +221 -0
  140. package/templates/vault/instagram/scripts/api_client.py +444 -0
  141. package/templates/vault/instagram/scripts/auth.py +411 -0
  142. package/templates/vault/instagram/scripts/comments.py +160 -0
  143. package/templates/vault/instagram/scripts/config.py +111 -0
  144. package/templates/vault/instagram/scripts/db.py +467 -0
  145. package/templates/vault/instagram/scripts/export.py +138 -0
  146. package/templates/vault/instagram/scripts/governance.py +233 -0
  147. package/templates/vault/instagram/scripts/hashtags.py +114 -0
  148. package/templates/vault/instagram/scripts/insights.py +170 -0
  149. package/templates/vault/instagram/scripts/media.py +65 -0
  150. package/templates/vault/instagram/scripts/messages.py +103 -0
  151. package/templates/vault/instagram/scripts/profile.py +58 -0
  152. package/templates/vault/instagram/scripts/publish.py +449 -0
  153. package/templates/vault/instagram/scripts/requirements.txt +5 -0
  154. package/templates/vault/instagram/scripts/run_all.py +189 -0
  155. package/templates/vault/instagram/scripts/schedule.py +189 -0
  156. package/templates/vault/instagram/scripts/serve_api.py +234 -0
  157. package/templates/vault/instagram/scripts/templates.py +155 -0
  158. package/templates/vault/junta-leiloeiros/scripts/db.py +216 -0
  159. package/templates/vault/junta-leiloeiros/scripts/export.py +137 -0
  160. package/templates/vault/junta-leiloeiros/scripts/requirements.txt +15 -0
  161. package/templates/vault/junta-leiloeiros/scripts/run_all.py +190 -0
  162. package/templates/vault/junta-leiloeiros/scripts/scraper/__init__.py +4 -0
  163. package/templates/vault/junta-leiloeiros/scripts/scraper/base_scraper.py +209 -0
  164. package/templates/vault/junta-leiloeiros/scripts/scraper/generic_scraper.py +110 -0
  165. package/templates/vault/junta-leiloeiros/scripts/scraper/jucap.py +110 -0
  166. package/templates/vault/junta-leiloeiros/scripts/scraper/juceac.py +72 -0
  167. package/templates/vault/junta-leiloeiros/scripts/scraper/juceal.py +72 -0
  168. package/templates/vault/junta-leiloeiros/scripts/scraper/juceb.py +68 -0
  169. package/templates/vault/junta-leiloeiros/scripts/scraper/jucec.py +63 -0
  170. package/templates/vault/junta-leiloeiros/scripts/scraper/jucema.py +211 -0
  171. package/templates/vault/junta-leiloeiros/scripts/scraper/jucemg.py +218 -0
  172. package/templates/vault/junta-leiloeiros/scripts/scraper/jucep.py +70 -0
  173. package/templates/vault/junta-leiloeiros/scripts/scraper/jucepa.py +74 -0
  174. package/templates/vault/junta-leiloeiros/scripts/scraper/jucepar.py +80 -0
  175. package/templates/vault/junta-leiloeiros/scripts/scraper/jucepe.py +78 -0
  176. package/templates/vault/junta-leiloeiros/scripts/scraper/jucepi.py +69 -0
  177. package/templates/vault/junta-leiloeiros/scripts/scraper/jucer.py +256 -0
  178. package/templates/vault/junta-leiloeiros/scripts/scraper/jucerja.py +170 -0
  179. package/templates/vault/junta-leiloeiros/scripts/scraper/jucern.py +71 -0
  180. package/templates/vault/junta-leiloeiros/scripts/scraper/jucesc.py +89 -0
  181. package/templates/vault/junta-leiloeiros/scripts/scraper/jucesp.py +233 -0
  182. package/templates/vault/junta-leiloeiros/scripts/scraper/jucetins.py +134 -0
  183. package/templates/vault/junta-leiloeiros/scripts/scraper/jucis_df.py +63 -0
  184. package/templates/vault/junta-leiloeiros/scripts/scraper/jucisrs.py +299 -0
  185. package/templates/vault/junta-leiloeiros/scripts/scraper/states.py +99 -0
  186. package/templates/vault/junta-leiloeiros/scripts/serve_api.py +164 -0
  187. package/templates/vault/junta-leiloeiros/scripts/web_scraper_fallback.py +233 -0
  188. package/templates/vault/last30days/scripts/last30days.py +521 -0
  189. package/templates/vault/last30days/scripts/lib/__init__.py +1 -0
  190. package/templates/vault/last30days/scripts/lib/cache.py +152 -0
  191. package/templates/vault/last30days/scripts/lib/dates.py +124 -0
  192. package/templates/vault/last30days/scripts/lib/dedupe.py +120 -0
  193. package/templates/vault/last30days/scripts/lib/env.py +149 -0
  194. package/templates/vault/last30days/scripts/lib/http.py +152 -0
  195. package/templates/vault/last30days/scripts/lib/models.py +175 -0
  196. package/templates/vault/last30days/scripts/lib/normalize.py +160 -0
  197. package/templates/vault/last30days/scripts/lib/openai_reddit.py +230 -0
  198. package/templates/vault/last30days/scripts/lib/reddit_enrich.py +232 -0
  199. package/templates/vault/last30days/scripts/lib/render.py +383 -0
  200. package/templates/vault/last30days/scripts/lib/schema.py +336 -0
  201. package/templates/vault/last30days/scripts/lib/score.py +311 -0
  202. package/templates/vault/last30days/scripts/lib/ui.py +324 -0
  203. package/templates/vault/last30days/scripts/lib/websearch.py +401 -0
  204. package/templates/vault/last30days/scripts/lib/xai_x.py +217 -0
  205. package/templates/vault/leiloeiro-avaliacao/scripts/governance.py +106 -0
  206. package/templates/vault/leiloeiro-avaliacao/scripts/requirements.txt +1 -0
  207. package/templates/vault/leiloeiro-edital/scripts/governance.py +106 -0
  208. package/templates/vault/leiloeiro-edital/scripts/requirements.txt +1 -0
  209. package/templates/vault/leiloeiro-ia/scripts/governance.py +106 -0
  210. package/templates/vault/leiloeiro-ia/scripts/requirements.txt +1 -0
  211. package/templates/vault/leiloeiro-juridico/scripts/governance.py +106 -0
  212. package/templates/vault/leiloeiro-juridico/scripts/requirements.txt +1 -0
  213. package/templates/vault/leiloeiro-mercado/scripts/governance.py +106 -0
  214. package/templates/vault/leiloeiro-mercado/scripts/requirements.txt +1 -0
  215. package/templates/vault/leiloeiro-risco/scripts/governance.py +106 -0
  216. package/templates/vault/leiloeiro-risco/scripts/requirements.txt +1 -0
  217. package/templates/vault/loki-mode/examples/todo-app-generated/backend/src/db/database.ts +24 -0
  218. package/templates/vault/loki-mode/examples/todo-app-generated/backend/src/db/db.ts +35 -0
  219. package/templates/vault/loki-mode/examples/todo-app-generated/backend/src/db/index.ts +2 -0
  220. package/templates/vault/loki-mode/examples/todo-app-generated/backend/src/db/migrations.ts +31 -0
  221. package/templates/vault/loki-mode/examples/todo-app-generated/backend/src/db/schema.sql +8 -0
  222. package/templates/vault/loki-mode/examples/todo-app-generated/backend/src/index.ts +44 -0
  223. package/templates/vault/loki-mode/examples/todo-app-generated/backend/src/routes/todos.ts +155 -0
  224. package/templates/vault/loki-mode/examples/todo-app-generated/backend/src/types/index.ts +35 -0
  225. package/templates/vault/loki-mode/examples/todo-app-generated/frontend/src/App.css +384 -0
  226. package/templates/vault/loki-mode/examples/todo-app-generated/frontend/src/App.tsx +81 -0
  227. package/templates/vault/loki-mode/examples/todo-app-generated/frontend/src/api/todos.ts +57 -0
  228. package/templates/vault/loki-mode/examples/todo-app-generated/frontend/src/components/ConfirmDialog.tsx +26 -0
  229. package/templates/vault/loki-mode/examples/todo-app-generated/frontend/src/components/EmptyState.tsx +8 -0
  230. package/templates/vault/loki-mode/examples/todo-app-generated/frontend/src/components/TodoForm.tsx +43 -0
  231. package/templates/vault/loki-mode/examples/todo-app-generated/frontend/src/components/TodoItem.tsx +36 -0
  232. package/templates/vault/loki-mode/examples/todo-app-generated/frontend/src/components/TodoList.tsx +27 -0
  233. package/templates/vault/loki-mode/examples/todo-app-generated/frontend/src/hooks/useTodos.ts +81 -0
  234. package/templates/vault/loki-mode/examples/todo-app-generated/frontend/src/index.css +48 -0
  235. package/templates/vault/loki-mode/examples/todo-app-generated/frontend/src/main.tsx +10 -0
  236. package/templates/vault/loki-mode/examples/todo-app-generated/frontend/src/vite-env.d.ts +1 -0
  237. package/templates/vault/loki-mode/scripts/export-to-vibe-kanban.sh +178 -0
  238. package/templates/vault/loki-mode/scripts/loki-wrapper.sh +281 -0
  239. package/templates/vault/loki-mode/scripts/take-screenshots.js +55 -0
  240. package/templates/vault/matematico-tao/scripts/complexity_analyzer.py +544 -0
  241. package/templates/vault/matematico-tao/scripts/dependency_graph.py +538 -0
  242. package/templates/vault/mcp-builder/scripts/connections.py +151 -0
  243. package/templates/vault/mcp-builder/scripts/evaluation.py +373 -0
  244. package/templates/vault/mcp-builder/scripts/example_evaluation.xml +22 -0
  245. package/templates/vault/mcp-builder/scripts/requirements.txt +2 -0
  246. package/templates/vault/mobile-design/scripts/mobile_audit.py +670 -0
  247. package/templates/vault/notebooklm/scripts/__init__.py +81 -0
  248. package/templates/vault/notebooklm/scripts/ask_question.py +256 -0
  249. package/templates/vault/notebooklm/scripts/auth_manager.py +358 -0
  250. package/templates/vault/notebooklm/scripts/browser_session.py +255 -0
  251. package/templates/vault/notebooklm/scripts/browser_utils.py +107 -0
  252. package/templates/vault/notebooklm/scripts/cleanup_manager.py +302 -0
  253. package/templates/vault/notebooklm/scripts/config.py +44 -0
  254. package/templates/vault/notebooklm/scripts/notebook_manager.py +410 -0
  255. package/templates/vault/notebooklm/scripts/run.py +102 -0
  256. package/templates/vault/notebooklm/scripts/setup_environment.py +204 -0
  257. package/templates/vault/pdf/scripts/check_bounding_boxes.py +70 -0
  258. package/templates/vault/pdf/scripts/check_bounding_boxes_test.py +226 -0
  259. package/templates/vault/pdf/scripts/check_fillable_fields.py +12 -0
  260. package/templates/vault/pdf/scripts/convert_pdf_to_images.py +35 -0
  261. package/templates/vault/pdf/scripts/create_validation_image.py +41 -0
  262. package/templates/vault/pdf/scripts/extract_form_field_info.py +152 -0
  263. package/templates/vault/pdf/scripts/fill_fillable_fields.py +114 -0
  264. package/templates/vault/pdf/scripts/fill_pdf_form_with_annotations.py +108 -0
  265. package/templates/vault/pdf-official/scripts/check_bounding_boxes.py +70 -0
  266. package/templates/vault/pdf-official/scripts/check_bounding_boxes_test.py +226 -0
  267. package/templates/vault/pdf-official/scripts/check_fillable_fields.py +12 -0
  268. package/templates/vault/pdf-official/scripts/convert_pdf_to_images.py +35 -0
  269. package/templates/vault/pdf-official/scripts/create_validation_image.py +41 -0
  270. package/templates/vault/pdf-official/scripts/extract_form_field_info.py +152 -0
  271. package/templates/vault/pdf-official/scripts/fill_fillable_fields.py +114 -0
  272. package/templates/vault/pdf-official/scripts/fill_pdf_form_with_annotations.py +108 -0
  273. package/templates/vault/planning-with-files/scripts/check-complete.sh +44 -0
  274. package/templates/vault/planning-with-files/scripts/init-session.sh +120 -0
  275. package/templates/vault/pptx/ooxml/scripts/pack.py +159 -0
  276. package/templates/vault/pptx/ooxml/scripts/unpack.py +29 -0
  277. package/templates/vault/pptx/ooxml/scripts/validate.py +69 -0
  278. package/templates/vault/pptx/ooxml/scripts/validation/__init__.py +15 -0
  279. package/templates/vault/pptx/ooxml/scripts/validation/base.py +951 -0
  280. package/templates/vault/pptx/ooxml/scripts/validation/docx.py +274 -0
  281. package/templates/vault/pptx/ooxml/scripts/validation/pptx.py +315 -0
  282. package/templates/vault/pptx/ooxml/scripts/validation/redlining.py +279 -0
  283. package/templates/vault/pptx/scripts/html2pptx.js +979 -0
  284. package/templates/vault/pptx/scripts/inventory.py +1020 -0
  285. package/templates/vault/pptx/scripts/rearrange.py +231 -0
  286. package/templates/vault/pptx/scripts/replace.py +385 -0
  287. package/templates/vault/pptx/scripts/thumbnail.py +450 -0
  288. package/templates/vault/pptx-official/ooxml/scripts/pack.py +159 -0
  289. package/templates/vault/pptx-official/ooxml/scripts/unpack.py +29 -0
  290. package/templates/vault/pptx-official/ooxml/scripts/validate.py +69 -0
  291. package/templates/vault/pptx-official/ooxml/scripts/validation/__init__.py +15 -0
  292. package/templates/vault/pptx-official/ooxml/scripts/validation/base.py +951 -0
  293. package/templates/vault/pptx-official/ooxml/scripts/validation/docx.py +274 -0
  294. package/templates/vault/pptx-official/ooxml/scripts/validation/pptx.py +315 -0
  295. package/templates/vault/pptx-official/ooxml/scripts/validation/redlining.py +279 -0
  296. package/templates/vault/pptx-official/scripts/html2pptx.js +979 -0
  297. package/templates/vault/pptx-official/scripts/inventory.py +1020 -0
  298. package/templates/vault/pptx-official/scripts/rearrange.py +231 -0
  299. package/templates/vault/pptx-official/scripts/replace.py +385 -0
  300. package/templates/vault/pptx-official/scripts/thumbnail.py +450 -0
  301. package/templates/vault/product-manager-toolkit/scripts/customer_interview_analyzer.py +441 -0
  302. package/templates/vault/product-manager-toolkit/scripts/rice_prioritizer.py +296 -0
  303. package/templates/vault/prompt-engineering-patterns/scripts/optimize-prompt.py +279 -0
  304. package/templates/vault/scripts/.skill_cache.json +7538 -0
  305. package/templates/vault/scripts/skill_search.py +228 -0
  306. package/templates/vault/senior-architect/scripts/architecture_diagram_generator.py +114 -0
  307. package/templates/vault/senior-architect/scripts/dependency_analyzer.py +114 -0
  308. package/templates/vault/senior-architect/scripts/project_architect.py +114 -0
  309. package/templates/vault/shopify-development/scripts/requirements.txt +19 -0
  310. package/templates/vault/shopify-development/scripts/shopify_graphql.py +428 -0
  311. package/templates/vault/shopify-development/scripts/shopify_init.py +441 -0
  312. package/templates/vault/shopify-development/scripts/tests/test_shopify_init.py +379 -0
  313. package/templates/vault/skill-creator/scripts/init_skill.py +303 -0
  314. package/templates/vault/skill-creator/scripts/package_skill.py +110 -0
  315. package/templates/vault/skill-creator/scripts/quick_validate.py +95 -0
  316. package/templates/vault/skill-installer/scripts/detect_skills.py +318 -0
  317. package/templates/vault/skill-installer/scripts/install_skill.py +1708 -0
  318. package/templates/vault/skill-installer/scripts/package_skill.py +417 -0
  319. package/templates/vault/skill-installer/scripts/requirements.txt +1 -0
  320. package/templates/vault/skill-installer/scripts/validate_skill.py +430 -0
  321. package/templates/vault/skill-sentinel/scripts/analyzers/__init__.py +13 -0
  322. package/templates/vault/skill-sentinel/scripts/analyzers/code_quality.py +247 -0
  323. package/templates/vault/skill-sentinel/scripts/analyzers/cross_skill.py +134 -0
  324. package/templates/vault/skill-sentinel/scripts/analyzers/dependencies.py +121 -0
  325. package/templates/vault/skill-sentinel/scripts/analyzers/documentation.py +189 -0
  326. package/templates/vault/skill-sentinel/scripts/analyzers/governance_audit.py +153 -0
  327. package/templates/vault/skill-sentinel/scripts/analyzers/performance.py +164 -0
  328. package/templates/vault/skill-sentinel/scripts/analyzers/security.py +189 -0
  329. package/templates/vault/skill-sentinel/scripts/config.py +158 -0
  330. package/templates/vault/skill-sentinel/scripts/cost_optimizer.py +146 -0
  331. package/templates/vault/skill-sentinel/scripts/db.py +354 -0
  332. package/templates/vault/skill-sentinel/scripts/governance.py +58 -0
  333. package/templates/vault/skill-sentinel/scripts/recommender.py +228 -0
  334. package/templates/vault/skill-sentinel/scripts/report_generator.py +224 -0
  335. package/templates/vault/skill-sentinel/scripts/requirements.txt +1 -0
  336. package/templates/vault/skill-sentinel/scripts/run_audit.py +290 -0
  337. package/templates/vault/skill-sentinel/scripts/scanner.py +271 -0
  338. package/templates/vault/stability-ai/scripts/config.py +266 -0
  339. package/templates/vault/stability-ai/scripts/generate.py +687 -0
  340. package/templates/vault/stability-ai/scripts/requirements.txt +4 -0
  341. package/templates/vault/stability-ai/scripts/styles.py +174 -0
  342. package/templates/vault/telegram/assets/boilerplate/nodejs/src/bot-client.ts +86 -0
  343. package/templates/vault/telegram/assets/boilerplate/nodejs/src/handlers.ts +79 -0
  344. package/templates/vault/telegram/assets/boilerplate/nodejs/src/index.ts +32 -0
  345. package/templates/vault/telegram/scripts/send_message.py +143 -0
  346. package/templates/vault/telegram/scripts/setup_project.py +103 -0
  347. package/templates/vault/telegram/scripts/test_bot.py +144 -0
  348. package/templates/vault/typescript-expert/scripts/ts_diagnostic.py +203 -0
  349. package/templates/vault/ui-ux-pro-max/scripts/__pycache__/core.cpython-314.pyc +0 -0
  350. package/templates/vault/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-314.pyc +0 -0
  351. package/templates/vault/ui-ux-pro-max/scripts/core.py +257 -0
  352. package/templates/vault/ui-ux-pro-max/scripts/design_system.py +487 -0
  353. package/templates/vault/ui-ux-pro-max/scripts/search.py +76 -0
  354. package/templates/vault/videodb/scripts/ws_listener.py +204 -0
  355. package/templates/vault/web-artifacts-builder/scripts/bundle-artifact.sh +54 -0
  356. package/templates/vault/web-artifacts-builder/scripts/init-artifact.sh +322 -0
  357. package/templates/vault/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  358. package/templates/vault/webapp-testing/scripts/with_server.py +106 -0
  359. package/templates/vault/whatsapp-cloud-api/assets/boilerplate/nodejs/src/index.ts +125 -0
  360. package/templates/vault/whatsapp-cloud-api/assets/boilerplate/nodejs/src/template-manager.ts +67 -0
  361. package/templates/vault/whatsapp-cloud-api/assets/boilerplate/nodejs/src/types.ts +216 -0
  362. package/templates/vault/whatsapp-cloud-api/assets/boilerplate/nodejs/src/webhook-handler.ts +173 -0
  363. package/templates/vault/whatsapp-cloud-api/assets/boilerplate/nodejs/src/whatsapp-client.ts +193 -0
  364. package/templates/vault/whatsapp-cloud-api/scripts/send_test_message.py +137 -0
  365. package/templates/vault/whatsapp-cloud-api/scripts/setup_project.py +118 -0
  366. package/templates/vault/whatsapp-cloud-api/scripts/validate_config.py +190 -0
  367. package/templates/vault/youtube-summarizer/scripts/extract-transcript.py +65 -0
  368. package/templates/vault/youtube-summarizer/scripts/install-dependencies.sh +28 -0
@@ -0,0 +1,363 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Apify Actor Runner - Runs Apify actors and exports results.
4
+ *
5
+ * Usage:
6
+ * # Quick answer (display in chat, no file saved)
7
+ * node --env-file=.env scripts/run_actor.js --actor ACTOR_ID --input '{}'
8
+ *
9
+ * # Export to file
10
+ * node --env-file=.env scripts/run_actor.js --actor ACTOR_ID --input '{}' --output leads.csv --format csv
11
+ */
12
+
13
+ import { parseArgs } from 'node:util';
14
+ import { writeFileSync, statSync } from 'node:fs';
15
+
16
+ // User-Agent for tracking skill usage in Apify analytics
17
+ const USER_AGENT = 'apify-agent-skills/apify-ultimate-scraper-1.3.0';
18
+
19
+ // Parse command-line arguments
20
+ function parseCliArgs() {
21
+ const options = {
22
+ actor: { type: 'string', short: 'a' },
23
+ input: { type: 'string', short: 'i' },
24
+ output: { type: 'string', short: 'o' },
25
+ format: { type: 'string', short: 'f', default: 'csv' },
26
+ timeout: { type: 'string', short: 't', default: '600' },
27
+ 'poll-interval': { type: 'string', default: '5' },
28
+ help: { type: 'boolean', short: 'h' },
29
+ };
30
+
31
+ const { values } = parseArgs({ options, allowPositionals: false });
32
+
33
+ if (values.help) {
34
+ printHelp();
35
+ process.exit(0);
36
+ }
37
+
38
+ if (!values.actor) {
39
+ console.error('Error: --actor is required');
40
+ printHelp();
41
+ process.exit(1);
42
+ }
43
+
44
+ if (!values.input) {
45
+ console.error('Error: --input is required');
46
+ printHelp();
47
+ process.exit(1);
48
+ }
49
+
50
+ return {
51
+ actor: values.actor,
52
+ input: values.input,
53
+ output: values.output,
54
+ format: values.format || 'csv',
55
+ timeout: parseInt(values.timeout, 10),
56
+ pollInterval: parseInt(values['poll-interval'], 10),
57
+ };
58
+ }
59
+
60
+ function printHelp() {
61
+ console.log(`
62
+ Apify Actor Runner - Run Apify actors and export results
63
+
64
+ Usage:
65
+ node --env-file=.env scripts/run_actor.js --actor ACTOR_ID --input '{}'
66
+
67
+ Options:
68
+ --actor, -a Actor ID (e.g., compass/crawler-google-places) [required]
69
+ --input, -i Actor input as JSON string [required]
70
+ --output, -o Output file path (optional - if not provided, displays quick answer)
71
+ --format, -f Output format: csv, json (default: csv)
72
+ --timeout, -t Max wait time in seconds (default: 600)
73
+ --poll-interval Seconds between status checks (default: 5)
74
+ --help, -h Show this help message
75
+
76
+ Output Formats:
77
+ JSON (all data) --output file.json --format json
78
+ CSV (all data) --output file.csv --format csv
79
+ Quick answer (no --output) - displays top 5 in chat
80
+
81
+ Examples:
82
+ # Quick answer - display top 5 in chat
83
+ node --env-file=.env scripts/run_actor.js \\
84
+ --actor "compass/crawler-google-places" \\
85
+ --input '{"searchStringsArray": ["coffee shops"], "locationQuery": "Seattle, USA"}'
86
+
87
+ # Export all data to CSV
88
+ node --env-file=.env scripts/run_actor.js \\
89
+ --actor "compass/crawler-google-places" \\
90
+ --input '{"searchStringsArray": ["coffee shops"], "locationQuery": "Seattle, USA"}' \\
91
+ --output leads.csv --format csv
92
+ `);
93
+ }
94
+
95
+ // Start an actor run and return { runId, datasetId }
96
+ async function startActor(token, actorId, inputJson) {
97
+ // Convert "author/actor" format to "author~actor" for API compatibility
98
+ const apiActorId = actorId.replace('/', '~');
99
+ const url = `https://api.apify.com/v2/acts/${apiActorId}/runs?token=${encodeURIComponent(token)}`;
100
+
101
+ let data;
102
+ try {
103
+ data = JSON.parse(inputJson);
104
+ } catch (e) {
105
+ console.error(`Error: Invalid JSON input: ${e.message}`);
106
+ process.exit(1);
107
+ }
108
+
109
+ const response = await fetch(url, {
110
+ method: 'POST',
111
+ headers: {
112
+ 'Content-Type': 'application/json',
113
+ 'User-Agent': `${USER_AGENT}/start_actor`,
114
+ },
115
+ body: JSON.stringify(data),
116
+ });
117
+
118
+ if (response.status === 404) {
119
+ console.error(`Error: Actor '${actorId}' not found`);
120
+ process.exit(1);
121
+ }
122
+
123
+ if (!response.ok) {
124
+ const text = await response.text();
125
+ console.error(`Error: API request failed (${response.status}): ${text}`);
126
+ process.exit(1);
127
+ }
128
+
129
+ const result = await response.json();
130
+ return {
131
+ runId: result.data.id,
132
+ datasetId: result.data.defaultDatasetId,
133
+ };
134
+ }
135
+
136
+ // Poll run status until complete or timeout
137
+ async function pollUntilComplete(token, runId, timeout, interval) {
138
+ const url = `https://api.apify.com/v2/actor-runs/${runId}?token=${encodeURIComponent(token)}`;
139
+ const startTime = Date.now();
140
+ let lastStatus = null;
141
+
142
+ while (true) {
143
+ const response = await fetch(url);
144
+ if (!response.ok) {
145
+ const text = await response.text();
146
+ console.error(`Error: Failed to get run status: ${text}`);
147
+ process.exit(1);
148
+ }
149
+
150
+ const result = await response.json();
151
+ const status = result.data.status;
152
+
153
+ // Only print when status changes
154
+ if (status !== lastStatus) {
155
+ console.log(`Status: ${status}`);
156
+ lastStatus = status;
157
+ }
158
+
159
+ if (['SUCCEEDED', 'FAILED', 'ABORTED', 'TIMED-OUT'].includes(status)) {
160
+ return status;
161
+ }
162
+
163
+ const elapsed = (Date.now() - startTime) / 1000;
164
+ if (elapsed > timeout) {
165
+ console.error(`Warning: Timeout after ${timeout}s, actor still running`);
166
+ return 'TIMED-OUT';
167
+ }
168
+
169
+ await sleep(interval * 1000);
170
+ }
171
+ }
172
+
173
+ // Download dataset items
174
+ async function downloadResults(token, datasetId, outputPath, format) {
175
+ const url = `https://api.apify.com/v2/datasets/${datasetId}/items?token=${encodeURIComponent(token)}&format=json`;
176
+
177
+ const response = await fetch(url, {
178
+ headers: {
179
+ 'User-Agent': `${USER_AGENT}/download_${format}`,
180
+ },
181
+ });
182
+
183
+ if (!response.ok) {
184
+ const text = await response.text();
185
+ console.error(`Error: Failed to download results: ${text}`);
186
+ process.exit(1);
187
+ }
188
+
189
+ const data = await response.json();
190
+
191
+ if (format === 'json') {
192
+ writeFileSync(outputPath, JSON.stringify(data, null, 2));
193
+ } else {
194
+ // CSV output
195
+ if (data.length > 0) {
196
+ const fieldnames = Object.keys(data[0]);
197
+ const csvLines = [fieldnames.join(',')];
198
+
199
+ for (const row of data) {
200
+ const values = fieldnames.map((key) => {
201
+ let value = row[key];
202
+
203
+ // Truncate long text fields
204
+ if (typeof value === 'string' && value.length > 200) {
205
+ value = value.slice(0, 200) + '...';
206
+ } else if (Array.isArray(value) || (typeof value === 'object' && value !== null)) {
207
+ value = JSON.stringify(value) || '';
208
+ }
209
+
210
+ // CSV escape: wrap in quotes if contains comma, quote, or newline
211
+ if (value === null || value === undefined) {
212
+ return '';
213
+ }
214
+ const strValue = String(value);
215
+ if (strValue.includes(',') || strValue.includes('"') || strValue.includes('\n')) {
216
+ return `"${strValue.replace(/"/g, '""')}"`;
217
+ }
218
+ return strValue;
219
+ });
220
+ csvLines.push(values.join(','));
221
+ }
222
+
223
+ writeFileSync(outputPath, csvLines.join('\n'));
224
+ } else {
225
+ writeFileSync(outputPath, '');
226
+ }
227
+ }
228
+
229
+ console.log(`Saved to: ${outputPath}`);
230
+ }
231
+
232
+ // Display top 5 results in chat format
233
+ async function displayQuickAnswer(token, datasetId) {
234
+ const url = `https://api.apify.com/v2/datasets/${datasetId}/items?token=${encodeURIComponent(token)}&format=json`;
235
+
236
+ const response = await fetch(url, {
237
+ headers: {
238
+ 'User-Agent': `${USER_AGENT}/quick_answer`,
239
+ },
240
+ });
241
+
242
+ if (!response.ok) {
243
+ const text = await response.text();
244
+ console.error(`Error: Failed to download results: ${text}`);
245
+ process.exit(1);
246
+ }
247
+
248
+ const data = await response.json();
249
+ const total = data.length;
250
+
251
+ if (total === 0) {
252
+ console.log('\nNo results found.');
253
+ return;
254
+ }
255
+
256
+ // Display top 5
257
+ console.log(`\n${'='.repeat(60)}`);
258
+ console.log(`TOP 5 RESULTS (of ${total} total)`);
259
+ console.log('='.repeat(60));
260
+
261
+ for (let i = 0; i < Math.min(5, data.length); i++) {
262
+ const item = data[i];
263
+ console.log(`\n--- Result ${i + 1} ---`);
264
+
265
+ for (const [key, value] of Object.entries(item)) {
266
+ let displayValue = value;
267
+
268
+ // Truncate long values
269
+ if (typeof value === 'string' && value.length > 100) {
270
+ displayValue = value.slice(0, 100) + '...';
271
+ } else if (Array.isArray(value) || (typeof value === 'object' && value !== null)) {
272
+ const jsonStr = JSON.stringify(value);
273
+ displayValue = jsonStr.length > 100 ? jsonStr.slice(0, 100) + '...' : jsonStr;
274
+ }
275
+
276
+ console.log(` ${key}: ${displayValue}`);
277
+ }
278
+ }
279
+
280
+ console.log(`\n${'='.repeat(60)}`);
281
+ if (total > 5) {
282
+ console.log(`Showing 5 of ${total} results.`);
283
+ }
284
+ console.log(`Full data available at: https://console.apify.com/storage/datasets/${datasetId}`);
285
+ console.log('='.repeat(60));
286
+ }
287
+
288
+ // Report summary of downloaded data
289
+ function reportSummary(outputPath, format) {
290
+ const stats = statSync(outputPath);
291
+ const size = stats.size;
292
+
293
+ let count;
294
+ try {
295
+ const content = require('fs').readFileSync(outputPath, 'utf-8');
296
+ if (format === 'json') {
297
+ const data = JSON.parse(content);
298
+ count = Array.isArray(data) ? data.length : 1;
299
+ } else {
300
+ // CSV - count lines minus header
301
+ const lines = content.split('\n').filter((line) => line.trim());
302
+ count = Math.max(0, lines.length - 1);
303
+ }
304
+ } catch {
305
+ count = 'unknown';
306
+ }
307
+
308
+ console.log(`Records: ${count}`);
309
+ console.log(`Size: ${size.toLocaleString()} bytes`);
310
+ }
311
+
312
+ // Helper: sleep for ms
313
+ function sleep(ms) {
314
+ return new Promise((resolve) => setTimeout(resolve, ms));
315
+ }
316
+
317
+ // Main function
318
+ async function main() {
319
+ // Parse args first so --help works without token
320
+ const args = parseCliArgs();
321
+
322
+ // Check for APIFY_TOKEN
323
+ const token = process.env.APIFY_TOKEN;
324
+ if (!token) {
325
+ console.error('Error: APIFY_TOKEN not found in .env file');
326
+ console.error('');
327
+ console.error('Add your token to .env file:');
328
+ console.error(' APIFY_TOKEN=your_token_here');
329
+ console.error('');
330
+ console.error('Get your token: https://console.apify.com/account/integrations');
331
+ process.exit(1);
332
+ }
333
+
334
+ // Start the actor run
335
+ console.log(`Starting actor: ${args.actor}`);
336
+ const { runId, datasetId } = await startActor(token, args.actor, args.input);
337
+ console.log(`Run ID: ${runId}`);
338
+ console.log(`Dataset ID: ${datasetId}`);
339
+
340
+ // Poll for completion
341
+ const status = await pollUntilComplete(token, runId, args.timeout, args.pollInterval);
342
+
343
+ if (status !== 'SUCCEEDED') {
344
+ console.error(`Error: Actor run ${status}`);
345
+ console.error(`Details: https://console.apify.com/actors/runs/${runId}`);
346
+ process.exit(1);
347
+ }
348
+
349
+ // Determine output mode
350
+ if (args.output) {
351
+ // File output mode
352
+ await downloadResults(token, datasetId, args.output, args.format);
353
+ reportSummary(args.output, args.format);
354
+ } else {
355
+ // Quick answer mode - display in chat
356
+ await displayQuickAnswer(token, datasetId);
357
+ }
358
+ }
359
+
360
+ main().catch((err) => {
361
+ console.error(`Error: ${err.message}`);
362
+ process.exit(1);
363
+ });
@@ -0,0 +1,190 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # Audio Transcriber - Requirements Installation Script
4
+ # Automatically installs and validates dependencies
5
+
6
+ set -euo pipefail
7
+
8
+ # Colors
9
+ GREEN='\033[0;32m'
10
+ YELLOW='\033[1;33m'
11
+ RED='\033[0;31m'
12
+ BLUE='\033[0;34m'
13
+ NC='\033[0m'
14
+
15
+ echo -e "${BLUE}🔧 Audio Transcriber - Dependency Installation${NC}"
16
+ echo ""
17
+
18
+ # Check Python
19
+ if ! command -v python3 &>/dev/null; then
20
+ echo -e "${RED}❌ Python 3 not found. Please install Python 3.8+${NC}"
21
+ exit 1
22
+ fi
23
+
24
+ PYTHON_VERSION=$(python3 --version | cut -d' ' -f2 | cut -d'.' -f1,2)
25
+ echo -e "${GREEN}✅ Python ${PYTHON_VERSION} detected${NC}"
26
+
27
+ # Check pip
28
+ if ! python3 -m pip --version &>/dev/null; then
29
+ echo -e "${RED}❌ pip not found. Please install pip${NC}"
30
+ exit 1
31
+ fi
32
+
33
+ echo -e "${GREEN}✅ pip available${NC}"
34
+ echo ""
35
+
36
+ # Install system dependencies (macOS only)
37
+ if [[ "$OSTYPE" == "darwin"* ]]; then
38
+ echo -e "${BLUE}📦 Checking system dependencies (macOS)...${NC}"
39
+
40
+ # Check for Homebrew
41
+ if command -v brew &>/dev/null; then
42
+ # Install pkg-config and ffmpeg if not present
43
+ NEED_INSTALL=""
44
+
45
+ if ! brew list pkg-config &>/dev/null 2>&1; then
46
+ NEED_INSTALL="$NEED_INSTALL pkg-config"
47
+ fi
48
+
49
+ if ! brew list ffmpeg &>/dev/null 2>&1; then
50
+ NEED_INSTALL="$NEED_INSTALL ffmpeg"
51
+ fi
52
+
53
+ if [[ -n "$NEED_INSTALL" ]]; then
54
+ echo -e "${BLUE}Installing:$NEED_INSTALL${NC}"
55
+ brew install $NEED_INSTALL --quiet
56
+ echo -e "${GREEN}✅ System dependencies installed${NC}"
57
+ else
58
+ echo -e "${GREEN}✅ System dependencies already installed${NC}"
59
+ fi
60
+ else
61
+ echo -e "${YELLOW}⚠️ Homebrew not found. Install manually if needed:${NC}"
62
+ echo " /bin/bash -c \"\$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)\""
63
+ fi
64
+ fi
65
+
66
+ echo ""
67
+
68
+ # Install faster-whisper (recommended)
69
+ echo -e "${BLUE}📦 Installing Faster-Whisper...${NC}"
70
+
71
+ # Try different installation methods based on Python environment
72
+ if python3 -m pip install faster-whisper --quiet 2>/dev/null; then
73
+ echo -e "${GREEN}✅ Faster-Whisper installed successfully${NC}"
74
+ elif python3 -m pip install --user --break-system-packages faster-whisper --quiet 2>/dev/null; then
75
+ echo -e "${GREEN}✅ Faster-Whisper installed successfully (user mode)${NC}"
76
+ else
77
+ echo -e "${YELLOW}⚠️ Faster-Whisper installation failed, trying Whisper...${NC}"
78
+
79
+ if python3 -m pip install openai-whisper --quiet 2>/dev/null; then
80
+ echo -e "${GREEN}✅ Whisper installed successfully${NC}"
81
+ elif python3 -m pip install --user --break-system-packages openai-whisper --quiet 2>/dev/null; then
82
+ echo -e "${GREEN}✅ Whisper installed successfully (user mode)${NC}"
83
+ else
84
+ echo -e "${RED}❌ Failed to install transcription engine${NC}"
85
+ echo ""
86
+ echo -e "${YELLOW}Manual installation options:${NC}"
87
+ echo " 1. Use --break-system-packages (macOS/Homebrew Python):"
88
+ echo " python3 -m pip install --user --break-system-packages openai-whisper"
89
+ echo ""
90
+ echo " 2. Use virtual environment (recommended):"
91
+ echo " python3 -m venv ~/whisper-env"
92
+ echo " source ~/whisper-env/bin/activate"
93
+ echo " pip install faster-whisper"
94
+ echo ""
95
+ echo " 3. Use pipx (isolated):"
96
+ echo " brew install pipx"
97
+ echo " pipx install openai-whisper"
98
+ exit 1
99
+ fi
100
+ fi
101
+
102
+ # Install UI/progress libraries (tqdm, rich)
103
+ echo ""
104
+ echo -e "${BLUE}📦 Installing UI libraries (tqdm, rich)...${NC}"
105
+
106
+ if python3 -m pip install tqdm rich --quiet 2>/dev/null; then
107
+ echo -e "${GREEN}✅ tqdm and rich installed successfully${NC}"
108
+ elif python3 -m pip install --user --break-system-packages tqdm rich --quiet 2>/dev/null; then
109
+ echo -e "${GREEN}✅ tqdm and rich installed successfully (user mode)${NC}"
110
+ else
111
+ echo -e "${YELLOW}⚠️ Optional UI libraries not installed (skill will still work)${NC}"
112
+ fi
113
+
114
+ # Check ffmpeg (optional but recommended)
115
+ echo ""
116
+ if command -v ffmpeg &>/dev/null; then
117
+ echo -e "${GREEN}✅ ffmpeg already installed${NC}"
118
+ else
119
+ echo -e "${YELLOW}⚠️ ffmpeg not found (should have been installed earlier)${NC}"
120
+ if [[ "$OSTYPE" == "darwin"* ]] && command -v brew &>/dev/null; then
121
+ echo -e "${BLUE}Installing ffmpeg via Homebrew...${NC}"
122
+ brew install ffmpeg --quiet && echo -e "${GREEN}✅ ffmpeg installed${NC}"
123
+ else
124
+ echo -e "${BLUE}ℹ️ ffmpeg is optional but recommended for format conversion${NC}"
125
+ echo ""
126
+ echo "Install ffmpeg:"
127
+ if [[ "$OSTYPE" == "darwin"* ]]; then
128
+ echo " brew install ffmpeg"
129
+ elif [[ "$OSTYPE" == "linux-gnu"* ]]; then
130
+ echo " sudo apt install ffmpeg # Debian/Ubuntu"
131
+ echo " sudo yum install ffmpeg # CentOS/RHEL"
132
+ fi
133
+ fi
134
+ fi
135
+
136
+ # Verify installation
137
+ echo ""
138
+ echo -e "${BLUE}🔍 Verifying installation...${NC}"
139
+
140
+ if python3 -c "import faster_whisper" 2>/dev/null; then
141
+ echo -e "${GREEN}✅ Faster-Whisper verified${NC}"
142
+ TRANSCRIBER="Faster-Whisper"
143
+ elif python3 -c "import whisper" 2>/dev/null; then
144
+ echo -e "${GREEN}✅ Whisper verified${NC}"
145
+ TRANSCRIBER="Whisper"
146
+ else
147
+ echo -e "${RED}❌ No transcription engine found after installation${NC}"
148
+ exit 1
149
+ fi
150
+
151
+ # Download initial model (optional)
152
+ read -p "Download Whisper 'base' model now? (recommended, ~74MB) [Y/n]: " DOWNLOAD_MODEL
153
+
154
+ if [[ ! "$DOWNLOAD_MODEL" =~ ^[Nn] ]]; then
155
+ echo ""
156
+ echo -e "${BLUE}📥 Downloading 'base' model...${NC}"
157
+
158
+ python3 << 'EOF'
159
+ try:
160
+ import faster_whisper
161
+ model = faster_whisper.WhisperModel("base", device="cpu", compute_type="int8")
162
+ print("✅ Model downloaded successfully")
163
+ except:
164
+ try:
165
+ import whisper
166
+ model = whisper.load_model("base")
167
+ print("✅ Model downloaded successfully")
168
+ except Exception as e:
169
+ print(f"❌ Model download failed: {e}")
170
+ EOF
171
+ fi
172
+
173
+ # Success summary
174
+ echo ""
175
+ echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
176
+ echo -e "${GREEN}✅ Installation Complete!${NC}"
177
+ echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
178
+ echo ""
179
+ echo "📊 Installed components:"
180
+ echo " • Transcription engine: $TRANSCRIBER"
181
+ if command -v ffmpeg &>/dev/null; then
182
+ echo " • Format conversion: ffmpeg (available)"
183
+ else
184
+ echo " • Format conversion: ffmpeg (not installed)"
185
+ fi
186
+ echo ""
187
+ echo "🚀 Ready to use! Try:"
188
+ echo " copilot> transcribe audio to markdown: myfile.mp3"
189
+ echo " claude> transcreva este áudio: myfile.mp3"
190
+ echo ""