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,486 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Audio Transcriber v1.1.0
4
+ Transcreve áudio para texto e gera atas/resumos usando LLM.
5
+ """
6
+
7
+ import os
8
+ import sys
9
+ import json
10
+ import subprocess
11
+ import shutil
12
+ from datetime import datetime
13
+ from pathlib import Path
14
+
15
+ # Rich for beautiful terminal output
16
+ try:
17
+ from rich.console import Console
18
+ from rich.prompt import Prompt
19
+ from rich.panel import Panel
20
+ from rich.progress import Progress, SpinnerColumn, TextColumn, BarColumn
21
+ from rich import print as rprint
22
+ RICH_AVAILABLE = True
23
+ except ImportError:
24
+ RICH_AVAILABLE = False
25
+ print("⚠️ Installing rich for better UI...")
26
+ subprocess.run([sys.executable, "-m", "pip", "install", "--user", "rich"], check=False)
27
+ from rich.console import Console
28
+ from rich.prompt import Prompt
29
+ from rich.panel import Panel
30
+ from rich.progress import Progress, SpinnerColumn, TextColumn, BarColumn
31
+ from rich import print as rprint
32
+
33
+ # tqdm for progress bars
34
+ try:
35
+ from tqdm import tqdm
36
+ except ImportError:
37
+ print("⚠️ Installing tqdm for progress bars...")
38
+ subprocess.run([sys.executable, "-m", "pip", "install", "--user", "tqdm"], check=False)
39
+ from tqdm import tqdm
40
+
41
+ # Whisper engines
42
+ try:
43
+ from faster_whisper import WhisperModel
44
+ TRANSCRIBER = "faster-whisper"
45
+ except ImportError:
46
+ try:
47
+ import whisper
48
+ TRANSCRIBER = "whisper"
49
+ except ImportError:
50
+ print("❌ Nenhum engine de transcrição encontrado!")
51
+ print(" Instale: pip install faster-whisper")
52
+ sys.exit(1)
53
+
54
+ console = Console()
55
+
56
+ # Template padrão RISEN para fallback
57
+ DEFAULT_MEETING_PROMPT = """
58
+ Role: Você é um transcritor profissional especializado em documentação.
59
+
60
+ Instructions: Transforme a transcrição fornecida em um documento estruturado e profissional.
61
+
62
+ Steps:
63
+ 1. Identifique o tipo de conteúdo (reunião, palestra, entrevista, etc.)
64
+ 2. Extraia os principais tópicos e pontos-chave
65
+ 3. Identifique participantes/speakers (se aplicável)
66
+ 4. Extraia decisões tomadas e ações definidas (se reunião)
67
+ 5. Organize em formato apropriado com seções claras
68
+ 6. Use Markdown para formatação profissional
69
+
70
+ End Goal: Documento final bem estruturado, legível e pronto para distribuição.
71
+
72
+ Narrowing:
73
+ - Mantenha objetividade e clareza
74
+ - Preserve contexto importante
75
+ - Use formatação Markdown adequada
76
+ - Inclua timestamps relevantes quando aplicável
77
+ """
78
+
79
+
80
+ def detect_cli_tool():
81
+ """Detecta qual CLI de LLM está disponível (claude > gh copilot)."""
82
+ if shutil.which('claude'):
83
+ return 'claude'
84
+ elif shutil.which('gh'):
85
+ result = subprocess.run(['gh', 'copilot', '--version'],
86
+ capture_output=True, text=True)
87
+ if result.returncode == 0:
88
+ return 'gh-copilot'
89
+ return None
90
+
91
+
92
+ def invoke_prompt_engineer(raw_prompt, timeout=90):
93
+ """
94
+ Invoca prompt-engineer skill via CLI para melhorar/gerar prompts.
95
+
96
+ Args:
97
+ raw_prompt: Prompt a ser melhorado ou meta-prompt
98
+ timeout: Timeout em segundos
99
+
100
+ Returns:
101
+ str: Prompt melhorado ou DEFAULT_MEETING_PROMPT se falhar
102
+ """
103
+ try:
104
+ # Tentar via gh copilot
105
+ console.print("[dim] Invocando prompt-engineer...[/dim]")
106
+
107
+ result = subprocess.run(
108
+ ['gh', 'copilot', 'suggest', '-t', 'shell', raw_prompt],
109
+ capture_output=True,
110
+ text=True,
111
+ timeout=timeout
112
+ )
113
+
114
+ if result.returncode == 0 and result.stdout.strip():
115
+ return result.stdout.strip()
116
+ else:
117
+ console.print("[yellow]⚠️ prompt-engineer não respondeu, usando template padrão[/yellow]")
118
+ return DEFAULT_MEETING_PROMPT
119
+
120
+ except subprocess.TimeoutExpired:
121
+ console.print(f"[red]⚠️ Timeout após {timeout}s, usando template padrão[/red]")
122
+ return DEFAULT_MEETING_PROMPT
123
+ except Exception as e:
124
+ console.print(f"[red]⚠️ Erro ao invocar prompt-engineer: {e}[/red]")
125
+ return DEFAULT_MEETING_PROMPT
126
+
127
+
128
+ def handle_prompt_workflow(user_prompt, transcript):
129
+ """
130
+ Gerencia fluxo completo de prompts com prompt-engineer.
131
+
132
+ Cenário A: Usuário forneceu prompt → Melhorar AUTOMATICAMENTE → Confirmar
133
+ Cenário B: Sem prompt → Sugerir tipo → Confirmar → Gerar → Confirmar
134
+
135
+ Returns:
136
+ str: Prompt final a usar, ou None se usuário recusou processamento
137
+ """
138
+ prompt_engineer_available = os.path.exists(
139
+ os.path.expanduser('~/.copilot/skills/prompt-engineer/SKILL.md')
140
+ )
141
+
142
+ # ========== CENÁRIO A: USUÁRIO FORNECEU PROMPT ==========
143
+ if user_prompt:
144
+ console.print("\n[cyan]📝 Prompt fornecido pelo usuário[/cyan]")
145
+ console.print(Panel(user_prompt[:300] + ("..." if len(user_prompt) > 300 else ""),
146
+ title="Prompt original", border_style="dim"))
147
+
148
+ if prompt_engineer_available:
149
+ # Melhora AUTOMATICAMENTE (sem perguntar)
150
+ console.print("\n[cyan]🔧 Melhorando prompt com prompt-engineer...[/cyan]")
151
+
152
+ improved_prompt = invoke_prompt_engineer(
153
+ f"melhore este prompt:\n\n{user_prompt}"
154
+ )
155
+
156
+ # Mostrar AMBAS versões
157
+ console.print("\n[green]✨ Versão melhorada:[/green]")
158
+ console.print(Panel(improved_prompt[:500] + ("..." if len(improved_prompt) > 500 else ""),
159
+ title="Prompt otimizado", border_style="green"))
160
+
161
+ console.print("\n[dim]📝 Versão original:[/dim]")
162
+ console.print(Panel(user_prompt[:300] + ("..." if len(user_prompt) > 300 else ""),
163
+ title="Seu prompt", border_style="dim"))
164
+
165
+ # Pergunta qual usar
166
+ confirm = Prompt.ask(
167
+ "\n💡 Usar versão melhorada?",
168
+ choices=["s", "n"],
169
+ default="s"
170
+ )
171
+
172
+ return improved_prompt if confirm == "s" else user_prompt
173
+ else:
174
+ # prompt-engineer não disponível
175
+ console.print("[yellow]⚠️ prompt-engineer skill não disponível[/yellow]")
176
+ console.print("[dim]✅ Usando seu prompt original[/dim]")
177
+ return user_prompt
178
+
179
+ # ========== CENÁRIO B: SEM PROMPT - AUTO-GERAÇÃO ==========
180
+ else:
181
+ console.print("\n[yellow]⚠️ Nenhum prompt fornecido.[/yellow]")
182
+
183
+ if not prompt_engineer_available:
184
+ console.print("[yellow]⚠️ prompt-engineer skill não encontrado[/yellow]")
185
+ console.print("[dim]Usando template padrão...[/dim]")
186
+ return DEFAULT_MEETING_PROMPT
187
+
188
+ # PASSO 1: Perguntar se quer auto-gerar
189
+ console.print("Posso analisar o transcript e sugerir um formato de resumo/ata?")
190
+
191
+ generate = Prompt.ask(
192
+ "\n💡 Gerar prompt automaticamente?",
193
+ choices=["s", "n"],
194
+ default="s"
195
+ )
196
+
197
+ if generate == "n":
198
+ console.print("[dim]✅ Ok, gerando apenas transcript.md (sem ata)[/dim]")
199
+ return None # Sinaliza: não processar com LLM
200
+
201
+ # PASSO 2: Analisar transcript e SUGERIR tipo
202
+ console.print("\n[cyan]🔍 Analisando transcript...[/cyan]")
203
+
204
+ suggestion_meta_prompt = f"""
205
+ Analise este transcript ({len(transcript)} caracteres) e sugira:
206
+
207
+ 1. Tipo de conteúdo (reunião, palestra, entrevista, etc.)
208
+ 2. Formato de saída recomendado (ata formal, resumo executivo, notas estruturadas)
209
+ 3. Framework ideal (RISEN, RODES, STAR, etc.)
210
+
211
+ Primeiras 1000 palavras do transcript:
212
+ {transcript[:4000]}
213
+
214
+ Responda em 2-3 linhas concisas.
215
+ """
216
+
217
+ suggested_type = invoke_prompt_engineer(suggestion_meta_prompt)
218
+
219
+ # PASSO 3: Mostrar sugestão e CONFIRMAR
220
+ console.print("\n[green]💡 Sugestão de formato:[/green]")
221
+ console.print(Panel(suggested_type, title="Análise do transcript", border_style="green"))
222
+
223
+ confirm_type = Prompt.ask(
224
+ "\n💡 Usar este formato?",
225
+ choices=["s", "n"],
226
+ default="s"
227
+ )
228
+
229
+ if confirm_type == "n":
230
+ console.print("[dim]Usando template padrão...[/dim]")
231
+ return DEFAULT_MEETING_PROMPT
232
+
233
+ # PASSO 4: Gerar prompt completo baseado na sugestão
234
+ console.print("\n[cyan]✨ Gerando prompt estruturado...[/cyan]")
235
+
236
+ final_meta_prompt = f"""
237
+ Crie um prompt completo e estruturado (usando framework apropriado) para:
238
+
239
+ {suggested_type}
240
+
241
+ O prompt deve instruir uma IA a transformar o transcript em um documento
242
+ profissional e bem formatado em Markdown.
243
+ """
244
+
245
+ generated_prompt = invoke_prompt_engineer(final_meta_prompt)
246
+
247
+ # PASSO 5: Mostrar prompt gerado e CONFIRMAR
248
+ console.print("\n[green]✅ Prompt gerado:[/green]")
249
+ console.print(Panel(generated_prompt[:600] + ("..." if len(generated_prompt) > 600 else ""),
250
+ title="Preview", border_style="green"))
251
+
252
+ confirm_final = Prompt.ask(
253
+ "\n💡 Usar este prompt?",
254
+ choices=["s", "n"],
255
+ default="s"
256
+ )
257
+
258
+ if confirm_final == "s":
259
+ return generated_prompt
260
+ else:
261
+ console.print("[dim]Usando template padrão...[/dim]")
262
+ return DEFAULT_MEETING_PROMPT
263
+
264
+
265
+ def process_with_llm(transcript, prompt, cli_tool='claude', timeout=300):
266
+ """
267
+ Processa transcript com LLM usando prompt fornecido.
268
+
269
+ Args:
270
+ transcript: Texto transcrito
271
+ prompt: Prompt instruindo como processar
272
+ cli_tool: 'claude' ou 'gh-copilot'
273
+ timeout: Timeout em segundos
274
+
275
+ Returns:
276
+ str: Ata/resumo processado
277
+ """
278
+ full_prompt = f"{prompt}\n\n---\n\nTranscrição:\n\n{transcript}"
279
+
280
+ try:
281
+ with Progress(
282
+ SpinnerColumn(),
283
+ TextColumn("[progress.description]{task.description}"),
284
+ transient=True
285
+ ) as progress:
286
+ progress.add_task(description=f"🤖 Processando com {cli_tool}...", total=None)
287
+
288
+ if cli_tool == 'claude':
289
+ result = subprocess.run(
290
+ ['claude', '-'],
291
+ input=full_prompt,
292
+ capture_output=True,
293
+ text=True,
294
+ timeout=timeout
295
+ )
296
+ elif cli_tool == 'gh-copilot':
297
+ result = subprocess.run(
298
+ ['gh', 'copilot', 'suggest', '-t', 'shell', full_prompt],
299
+ capture_output=True,
300
+ text=True,
301
+ timeout=timeout
302
+ )
303
+ else:
304
+ raise ValueError(f"CLI tool desconhecido: {cli_tool}")
305
+
306
+ if result.returncode == 0:
307
+ return result.stdout.strip()
308
+ else:
309
+ console.print(f"[red]❌ Erro ao processar com {cli_tool}[/red]")
310
+ console.print(f"[dim]{result.stderr[:200]}[/dim]")
311
+ return None
312
+
313
+ except subprocess.TimeoutExpired:
314
+ console.print(f"[red]❌ Timeout após {timeout}s[/red]")
315
+ return None
316
+ except Exception as e:
317
+ console.print(f"[red]❌ Erro: {e}[/red]")
318
+ return None
319
+
320
+
321
+ def transcribe_audio(audio_file, model="base"):
322
+ """
323
+ Transcreve áudio usando Whisper com barra de progresso.
324
+
325
+ Returns:
326
+ dict: {language, duration, segments: [{start, end, text}]}
327
+ """
328
+ console.print(f"\n[cyan]🎙️ Transcrevendo áudio com {TRANSCRIBER}...[/cyan]")
329
+
330
+ try:
331
+ if TRANSCRIBER == "faster-whisper":
332
+ model_obj = WhisperModel(model, device="cpu", compute_type="int8")
333
+ segments, info = model_obj.transcribe(
334
+ audio_file,
335
+ language=None,
336
+ vad_filter=True,
337
+ word_timestamps=True
338
+ )
339
+
340
+ data = {
341
+ "language": info.language,
342
+ "language_probability": round(info.language_probability, 2),
343
+ "duration": info.duration,
344
+ "segments": []
345
+ }
346
+
347
+ # Converter generator em lista com progresso
348
+ console.print("[dim]Processando segmentos...[/dim]")
349
+ for segment in tqdm(segments, desc="Segmentos", unit="seg"):
350
+ data["segments"].append({
351
+ "start": round(segment.start, 2),
352
+ "end": round(segment.end, 2),
353
+ "text": segment.text.strip()
354
+ })
355
+
356
+ else: # whisper original
357
+ import whisper
358
+ model_obj = whisper.load_model(model)
359
+ result = model_obj.transcribe(audio_file, word_timestamps=True)
360
+
361
+ data = {
362
+ "language": result["language"],
363
+ "duration": result["segments"][-1]["end"] if result["segments"] else 0,
364
+ "segments": result["segments"]
365
+ }
366
+
367
+ console.print(f"[green]✅ Transcrição completa! Idioma: {data['language'].upper()}[/green]")
368
+ console.print(f"[dim] {len(data['segments'])} segmentos processados[/dim]")
369
+
370
+ return data
371
+
372
+ except Exception as e:
373
+ console.print(f"[red]❌ Erro na transcrição: {e}[/red]")
374
+ sys.exit(1)
375
+
376
+
377
+ def save_outputs(transcript_text, ata_text, audio_file, output_dir="."):
378
+ """
379
+ Salva transcript e ata em arquivos .md com timestamp.
380
+
381
+ Returns:
382
+ tuple: (transcript_path, ata_path or None)
383
+ """
384
+ timestamp = datetime.now().strftime("%Y%m%d-%H%M%S")
385
+ base_name = Path(audio_file).stem
386
+
387
+ # Sempre salva transcript
388
+ transcript_filename = f"transcript-{timestamp}.md"
389
+ transcript_path = Path(output_dir) / transcript_filename
390
+
391
+ with open(transcript_path, 'w', encoding='utf-8') as f:
392
+ f.write(transcript_text)
393
+
394
+ console.print(f"[green]✅ Transcript salvo:[/green] {transcript_filename}")
395
+
396
+ # Salva ata se existir
397
+ ata_path = None
398
+ if ata_text:
399
+ ata_filename = f"ata-{timestamp}.md"
400
+ ata_path = Path(output_dir) / ata_filename
401
+
402
+ with open(ata_path, 'w', encoding='utf-8') as f:
403
+ f.write(ata_text)
404
+
405
+ console.print(f"[green]✅ Ata salva:[/green] {ata_filename}")
406
+
407
+ return str(transcript_path), str(ata_path) if ata_path else None
408
+
409
+
410
+ def main():
411
+ """Função principal."""
412
+ import argparse
413
+
414
+ parser = argparse.ArgumentParser(description="Audio Transcriber v1.1.0")
415
+ parser.add_argument("audio_file", help="Arquivo de áudio para transcrever")
416
+ parser.add_argument("--prompt", help="Prompt customizado para processar transcript")
417
+ parser.add_argument("--model", default="base", help="Modelo Whisper (tiny/base/small/medium/large)")
418
+ parser.add_argument("--output-dir", default=".", help="Diretório de saída")
419
+
420
+ args = parser.parse_args()
421
+
422
+ # Verificar arquivo existe
423
+ if not os.path.exists(args.audio_file):
424
+ console.print(f"[red]❌ Arquivo não encontrado: {args.audio_file}[/red]")
425
+ sys.exit(1)
426
+
427
+ console.print("[bold cyan]🎵 Audio Transcriber v1.1.0[/bold cyan]\n")
428
+
429
+ # Step 1: Transcrever
430
+ transcription_data = transcribe_audio(args.audio_file, model=args.model)
431
+
432
+ # Gerar texto do transcript
433
+ transcript_text = f"# Transcrição de Áudio\n\n"
434
+ transcript_text += f"**Arquivo:** {Path(args.audio_file).name}\n"
435
+ transcript_text += f"**Idioma:** {transcription_data['language'].upper()}\n"
436
+ transcript_text += f"**Data:** {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n\n"
437
+ transcript_text += "---\n\n## Transcrição Completa\n\n"
438
+
439
+ for seg in transcription_data["segments"]:
440
+ start_min = int(seg["start"] // 60)
441
+ start_sec = int(seg["start"] % 60)
442
+ end_min = int(seg["end"] // 60)
443
+ end_sec = int(seg["end"] % 60)
444
+ transcript_text += f"**[{start_min:02d}:{start_sec:02d} → {end_min:02d}:{end_sec:02d}]** \n{seg['text']}\n\n"
445
+
446
+ # Step 2: Detectar CLI
447
+ cli_tool = detect_cli_tool()
448
+
449
+ if not cli_tool:
450
+ console.print("\n[yellow]⚠️ Nenhuma CLI de IA detectada (Claude ou GitHub Copilot)[/yellow]")
451
+ console.print("[dim]ℹ️ Salvando apenas transcript.md...[/dim]")
452
+
453
+ save_outputs(transcript_text, None, args.audio_file, args.output_dir)
454
+
455
+ console.print("\n[cyan]💡 Para gerar ata/resumo:[/cyan]")
456
+ console.print(" - Instale Claude CLI: pip install claude-cli")
457
+ console.print(" - Ou GitHub Copilot CLI já está instalado (gh copilot)")
458
+ return
459
+
460
+ console.print(f"\n[green]✅ CLI detectada: {cli_tool}[/green]")
461
+
462
+ # Step 3: Workflow de prompt
463
+ final_prompt = handle_prompt_workflow(args.prompt, transcript_text)
464
+
465
+ if final_prompt is None:
466
+ # Usuário recusou processamento
467
+ save_outputs(transcript_text, None, args.audio_file, args.output_dir)
468
+ return
469
+
470
+ # Step 4: Processar com LLM
471
+ ata_text = process_with_llm(transcript_text, final_prompt, cli_tool)
472
+
473
+ if ata_text:
474
+ console.print("[green]✅ Ata gerada com sucesso![/green]")
475
+ else:
476
+ console.print("[yellow]⚠️ Falha ao gerar ata, salvando apenas transcript[/yellow]")
477
+
478
+ # Step 5: Salvar arquivos
479
+ console.print("\n[cyan]💾 Salvando arquivos...[/cyan]")
480
+ save_outputs(transcript_text, ata_text, args.audio_file, args.output_dir)
481
+
482
+ console.print("\n[bold green]✅ Concluído![/bold green]")
483
+
484
+
485
+ if __name__ == "__main__":
486
+ main()