iron-edge 1.2.0 → 2.0.1

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 (660) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +118 -26
  3. package/agents/iron-3d.md +1 -1
  4. package/agents/iron-animations.md +3 -2
  5. package/agents/iron-auditor.md +175 -0
  6. package/agents/iron-brand.md +3 -2
  7. package/agents/iron-ceo.md +150 -0
  8. package/agents/iron-claude.md +54 -0
  9. package/agents/iron-clone.md +87 -0
  10. package/agents/iron-cloning.md +21 -3
  11. package/agents/iron-commercial.md +3 -2
  12. package/agents/iron-community.md +1 -1
  13. package/agents/iron-content.md +3 -2
  14. package/agents/iron-copy.md +3 -2
  15. package/agents/iron-council.md +3 -2
  16. package/agents/iron-courses.md +3 -2
  17. package/agents/iron-cyber.md +3 -2
  18. package/agents/iron-design.md +3 -2
  19. package/agents/iron-eng.md +138 -0
  20. package/agents/iron-finance.md +3 -2
  21. package/agents/iron-forge.md +147 -0
  22. package/agents/iron-growth.md +3 -2
  23. package/agents/iron-install.md +15 -13
  24. package/agents/iron-paidmedia.md +3 -2
  25. package/agents/iron-premium.md +146 -0
  26. package/agents/iron-product.md +3 -2
  27. package/agents/iron-research.md +3 -2
  28. package/agents/iron-search.md +82 -0
  29. package/agents/iron-shopify.md +80 -4
  30. package/agents/iron-spy.md +1 -1
  31. package/agents/iron-storytelling.md +3 -2
  32. package/agents/iron-video.md +1 -1
  33. package/agents/lp-cinematico.md +2 -2
  34. package/agents/xq-advisory.md +1 -1
  35. package/agents/xq-brand.md +1 -1
  36. package/agents/xq-clevel.md +1 -1
  37. package/agents/xq-codecore.md +19 -19
  38. package/agents/xq-copy.md +1 -1
  39. package/agents/xq-copymaster.md +1 -1
  40. package/agents/xq-cyber.md +1 -1
  41. package/agents/xq-data.md +1 -1
  42. package/agents/xq-design.md +1 -1
  43. package/agents/xq-hormozi.md +2 -2
  44. package/agents/xq-movement.md +1 -1
  45. package/agents/xq-storytelling.md +1 -1
  46. package/agents/xq-traffic.md +1 -1
  47. package/bin/iron-edge.js +74 -0
  48. package/docs/2026-08-21-como-pedir-software-ao-iron.md +62 -0
  49. package/docs/2026-08-21-skill-gate-fonte-unica.md +70 -0
  50. package/installer/install-mac.sh +52 -0
  51. package/installer/install-windows.ps1 +65 -0
  52. package/installer/install.js +597 -0
  53. package/iron-routing-map.md +276 -0
  54. package/package.json +14 -7
  55. package/skills/anotar/SKILL.md +50 -0
  56. package/skills/brandkit/SKILL.md +152 -0
  57. package/skills/clone-distill/SKILL.md +45 -0
  58. package/skills/clone-distill/scripts/distill.mjs +144 -0
  59. package/skills/clone-inventory/SKILL.md +51 -0
  60. package/skills/clone-inventory/package-lock.json +307 -0
  61. package/skills/clone-inventory/package.json +1 -0
  62. package/skills/clone-inventory/scripts/inventory.mjs +336 -0
  63. package/skills/clone-organize/SKILL.md +107 -0
  64. package/skills/clone-organize/package-lock.json +307 -0
  65. package/skills/clone-organize/package.json +1 -0
  66. package/skills/clone-organize/scripts/verify-visual.mjs +79 -0
  67. package/skills/clone-site/SKILL.md +104 -0
  68. package/skills/clone-site/package-lock.json +360 -0
  69. package/skills/clone-site/package.json +12 -0
  70. package/skills/clone-site/reference/lessons.md +131 -0
  71. package/skills/clone-site/reference/workflow.md +211 -0
  72. package/skills/clone-site/scripts/capture.mjs +507 -0
  73. package/skills/clone-site/scripts/clone.sh +166 -0
  74. package/skills/clone-site/scripts/fix_paths.py +118 -0
  75. package/skills/clone-site/scripts/serve.py +129 -0
  76. package/skills/clone-site/scripts/verify.mjs +126 -0
  77. package/skills/clone-site/scripts/wget_fallback.sh +38 -0
  78. package/skills/clone-transplant/SKILL.md +50 -0
  79. package/skills/clone-transplant/scripts/transplant.mjs +299 -0
  80. package/skills/conectar-mcp/SKILL.md +38 -0
  81. package/skills/escada/SKILL.md +62 -0
  82. package/skills/faxina/SKILL.md +34 -0
  83. package/skills/gate/SKILL.md +318 -0
  84. package/skills/gate/hooks/gate-dirty.sh +40 -0
  85. package/skills/gate/hooks/gate-stop.sh +31 -0
  86. package/skills/gate/preflight.py +132 -0
  87. package/skills/lp-cinematico/SKILL.md +5 -0
  88. package/skills/roteiro-video/SKILL.md +5 -0
  89. package/skills/salvar/SKILL.md +87 -0
  90. package/squads/squad-animations/README.md +18 -6
  91. package/squads/squad-animations/agents/animation-interpreter.md +9 -0
  92. package/squads/squad-animations/agents/animation-performance-engineer.md +9 -0
  93. package/squads/squad-animations/agents/animations-orqx.md +11 -2
  94. package/squads/squad-animations/agents/css-motion-artist.md +9 -0
  95. package/squads/squad-animations/agents/generative-particle-engineer.md +9 -0
  96. package/squads/squad-animations/agents/motion-choreographer.md +9 -0
  97. package/squads/squad-animations/agents/scroll-narrative-engineer.md +9 -0
  98. package/squads/squad-animations/agents/shader-artist.md +9 -0
  99. package/squads/squad-animations/agents/threejs-architect.md +9 -0
  100. package/squads/squad-animations/knowledge-base/chrome-brain-integration.md +17 -43
  101. package/squads/squad-animations/squad.yaml +21 -7
  102. package/squads/squad-brand/README.md +9 -3
  103. package/squads/squad-brand/agents/al-ries.md +9 -0
  104. package/squads/squad-brand/agents/alina-wheeler.md +9 -0
  105. package/squads/squad-brand/agents/archetype-consultant.md +9 -0
  106. package/squads/squad-brand/agents/brand-archetype-strategist.md +9 -0
  107. package/squads/squad-brand/agents/brand-auditor.md +9 -0
  108. package/squads/squad-brand/agents/brand-collateral-designer.md +9 -0
  109. package/squads/squad-brand/agents/brand-compiler.md +9 -0
  110. package/squads/squad-brand/agents/brand-creative-engineer.md +9 -0
  111. package/squads/squad-brand/agents/brand-culture-architect.md +9 -0
  112. package/squads/squad-brand/agents/brand-growth-strategist.md +9 -0
  113. package/squads/squad-brand/agents/brand-identity-designer.md +9 -0
  114. package/squads/squad-brand/agents/brand-motion-vfx.md +9 -0
  115. package/squads/squad-brand/agents/brand-naming-specialist.md +9 -0
  116. package/squads/squad-brand/agents/brand-orqx.md +12 -3
  117. package/squads/squad-brand/agents/brand-positioning-strategist.md +9 -0
  118. package/squads/squad-brand/agents/brand-sonic-designer.md +9 -0
  119. package/squads/squad-brand/agents/brand-strategist.md +9 -0
  120. package/squads/squad-brand/agents/brand-system-architect.md +9 -0
  121. package/squads/squad-brand/agents/byron-sharp.md +9 -0
  122. package/squads/squad-brand/agents/david-aaker.md +9 -0
  123. package/squads/squad-brand/agents/denise-yohn.md +9 -0
  124. package/squads/squad-brand/agents/domain-scout.md +9 -0
  125. package/squads/squad-brand/agents/donald-miller.md +9 -0
  126. package/squads/squad-brand/agents/emily-heyward.md +9 -0
  127. package/squads/squad-brand/agents/jean-noel-kapferer.md +9 -0
  128. package/squads/squad-brand/agents/kevin-keller.md +9 -0
  129. package/squads/squad-brand/agents/marty-neumeier.md +9 -0
  130. package/squads/squad-brand/agents/miller-sticky-brand.md +9 -0
  131. package/squads/squad-brand/agents/naming-strategist.md +9 -0
  132. package/squads/squad-brand/knowledge-base/chrome-brain-integration.md +17 -35
  133. package/squads/squad-brand/squad.yaml +43 -10
  134. package/squads/squad-brand/tasks/create-components.md +1 -1
  135. package/squads/squad-brand/tasks/create-dark-mode.md +1 -1
  136. package/squads/squad-brand/tasks/create-token-system.md +1 -1
  137. package/squads/squad-brand/tasks/define-grid-system.md +1 -1
  138. package/squads/squad-brand/tasks/design-dynamic-identity-system.md +1 -1
  139. package/squads/squad-brand/tasks/export-tokens.md +1 -1
  140. package/squads/squad-brand/templates/client-delivery-template.md +1 -1
  141. package/squads/squad-claude/README.md +19 -7
  142. package/squads/squad-claude/agents/claude-orqx.md +13 -4
  143. package/squads/squad-claude/agents/config-engineer.md +9 -0
  144. package/squads/squad-claude/agents/hooks-architect.md +9 -0
  145. package/squads/squad-claude/agents/mcp-integrator.md +9 -0
  146. package/squads/squad-claude/agents/project-integrator.md +9 -0
  147. package/squads/squad-claude/agents/roadmap-sentinel.md +9 -0
  148. package/squads/squad-claude/agents/skill-craftsman.md +9 -0
  149. package/squads/squad-claude/agents/swarm-orqx.md +9 -0
  150. package/squads/squad-claude/checklists/agent-readiness-checklist.md +1 -2
  151. package/squads/squad-claude/checklists/claude-setup-audit-checklist.md +1 -1
  152. package/squads/squad-claude/checklists/prompt-quality-checklist.md +0 -5
  153. package/squads/squad-claude/knowledge-base/chrome-brain-integration.md +17 -42
  154. package/squads/squad-claude/knowledge-base/claude-code-configuration-reference.md +6 -11
  155. package/squads/squad-claude/knowledge-base/claude-code-hooks-reference.md +28 -19
  156. package/squads/squad-claude/knowledge-base/claude-code-internals-deep.md +16 -2
  157. package/squads/squad-claude/knowledge-base/claude-code-tools-reference.md +2 -2
  158. package/squads/squad-claude/knowledge-base/context-window-optimization.md +3 -3
  159. package/squads/squad-claude/knowledge-base/knowledge-architecture-reference.md +3 -3
  160. package/squads/squad-claude/knowledge-base/mcp-integration-patterns.md +1 -1
  161. package/squads/squad-claude/knowledge-base/memory-systems-reference.md +6 -6
  162. package/squads/squad-claude/knowledge-base/obsidian-claude-integration.md +5 -5
  163. package/squads/squad-claude/knowledge-base/retrieval-augmented-generation.md +3 -3
  164. package/squads/squad-claude/knowledge-base/skill-creation-patterns.md +10 -10
  165. package/squads/squad-claude/knowledge-base/swarm-orchestration-patterns.md +10 -10
  166. package/squads/squad-claude/squad.yaml +20 -7
  167. package/squads/squad-claude/templates/agent-definition-template.md +1 -1
  168. package/squads/squad-cloning/README.md +22 -6
  169. package/squads/squad-cloning/agents/agent-forger.md +36 -3
  170. package/squads/squad-cloning/agents/cloning-orqx.md +39 -4
  171. package/squads/squad-cloning/agents/cognitive-extractor.md +33 -0
  172. package/squads/squad-cloning/agents/content-capturer.md +33 -0
  173. package/squads/squad-cloning/agents/kb-architect.md +33 -0
  174. package/squads/squad-cloning/agents/mind-synthesizer.md +33 -0
  175. package/squads/squad-cloning/agents/source-hunter.md +33 -0
  176. package/squads/squad-cloning/agents/squad-assembler.md +35 -2
  177. package/squads/squad-cloning/checklists/clone-completeness-checklist.md +1 -1
  178. package/squads/squad-cloning/checklists/pre-deploy-checklist.md +3 -3
  179. package/squads/squad-cloning/knowledge-base/agent-generation-guide.md +4 -4
  180. package/squads/squad-cloning/knowledge-base/chrome-brain-integration.md +17 -43
  181. package/squads/squad-cloning/knowledge-base/clone-tier-standards.md +1 -1
  182. package/squads/squad-cloning/knowledge-base/cross-squad-deployment.md +2 -2
  183. package/squads/squad-cloning/knowledge-base/ethical-guidelines.md +2 -2
  184. package/squads/squad-cloning/knowledge-base/multi-agent-deployment-patterns.md +1 -1
  185. package/squads/squad-cloning/knowledge-base/skill-standard-for-clones.md +5 -5
  186. package/squads/squad-cloning/squad.yaml +32 -11
  187. package/squads/squad-cloning/tasks/assign-content-class.md +33 -23
  188. package/squads/squad-cloning/tasks/build-cognitive-profile.md +38 -23
  189. package/squads/squad-cloning/tasks/calculate-confidence-score.md +36 -23
  190. package/squads/squad-cloning/tasks/capture-article-text.md +53 -23
  191. package/squads/squad-cloning/tasks/capture-social-posts.md +50 -23
  192. package/squads/squad-cloning/tasks/compile-source-catalog.md +37 -23
  193. package/squads/squad-cloning/tasks/cross-reference-kbs.md +67 -23
  194. package/squads/squad-cloning/tasks/deploy-cross-squad-kbs.md +43 -28
  195. package/squads/squad-cloning/tasks/design-kb-taxonomy.md +70 -23
  196. package/squads/squad-cloning/tasks/determine-clone-tier.md +45 -23
  197. package/squads/squad-cloning/tasks/discover-articles-interviews.md +36 -23
  198. package/squads/squad-cloning/tasks/discover-books-publications.md +36 -23
  199. package/squads/squad-cloning/tasks/discover-podcasts-appearances.md +36 -23
  200. package/squads/squad-cloning/tasks/discover-social-media-content.md +36 -23
  201. package/squads/squad-cloning/tasks/discover-youtube-channels.md +37 -23
  202. package/squads/squad-cloning/tasks/escalate-quality-issues.md +40 -23
  203. package/squads/squad-cloning/tasks/estimate-content-volume.md +37 -23
  204. package/squads/squad-cloning/tasks/extract-book-content.md +53 -23
  205. package/squads/squad-cloning/tasks/extract-decision-patterns.md +33 -23
  206. package/squads/squad-cloning/tasks/extract-heuristics.md +33 -23
  207. package/squads/squad-cloning/tasks/extract-mental-models.md +33 -23
  208. package/squads/squad-cloning/tasks/extract-vocabulary-tone.md +29 -23
  209. package/squads/squad-cloning/tasks/extract-workflows-processes.md +34 -23
  210. package/squads/squad-cloning/tasks/finalize-clone-delivery.md +37 -23
  211. package/squads/squad-cloning/tasks/generate-agent-commands.md +48 -23
  212. package/squads/squad-cloning/tasks/generate-agent-heuristics.md +44 -23
  213. package/squads/squad-cloning/tasks/generate-agent-persona.md +53 -23
  214. package/squads/squad-cloning/tasks/generate-agent-protocols.md +45 -23
  215. package/squads/squad-cloning/tasks/generate-checklist-files.md +43 -28
  216. package/squads/squad-cloning/tasks/generate-cross-squad-handoffs.md +53 -23
  217. package/squads/squad-cloning/tasks/generate-extraction-report.md +30 -23
  218. package/squads/squad-cloning/tasks/generate-framework-kbs.md +68 -23
  219. package/squads/squad-cloning/tasks/generate-methodology-kbs.md +68 -23
  220. package/squads/squad-cloning/tasks/generate-mind-map.md +36 -23
  221. package/squads/squad-cloning/tasks/generate-pattern-kbs.md +66 -23
  222. package/squads/squad-cloning/tasks/generate-reference-kbs.md +67 -23
  223. package/squads/squad-cloning/tasks/generate-squad-yaml.md +39 -27
  224. package/squads/squad-cloning/tasks/generate-task-files.md +45 -28
  225. package/squads/squad-cloning/tasks/generate-template-files.md +39 -28
  226. package/squads/squad-cloning/tasks/generate-workflow-files.md +44 -28
  227. package/squads/squad-cloning/tasks/identify-contradictions.md +32 -23
  228. package/squads/squad-cloning/tasks/identify-meta-patterns.md +42 -23
  229. package/squads/squad-cloning/tasks/initiate-clone-project.md +40 -23
  230. package/squads/squad-cloning/tasks/monitor-pipeline-progress.md +33 -23
  231. package/squads/squad-cloning/tasks/normalize-raw-content.md +43 -23
  232. package/squads/squad-cloning/tasks/package-squad-output.md +39 -28
  233. package/squads/squad-cloning/tasks/resolve-contradictions.md +47 -23
  234. package/squads/squad-cloning/tasks/run-pre-publish-checklist.md +39 -27
  235. package/squads/squad-cloning/tasks/tag-confidence-levels.md +30 -23
  236. package/squads/squad-cloning/tasks/transcribe-podcast-episodes.md +56 -23
  237. package/squads/squad-cloning/tasks/transcribe-youtube-videos.md +54 -23
  238. package/squads/squad-cloning/tasks/validate-agent-completeness.md +47 -23
  239. package/squads/squad-cloning/tasks/validate-kb-citations.md +62 -23
  240. package/squads/squad-cloning/tasks/validate-transcription-quality.md +39 -23
  241. package/squads/squad-cloning/workflows/full-clone-pipeline.yaml +17 -1
  242. package/squads/squad-cloning/workflows/tier2-consultant.yaml +1 -1
  243. package/squads/squad-commercial/README.md +18 -6
  244. package/squads/squad-commercial/agents/commercial-orqx.md +11 -2
  245. package/squads/squad-commercial/agents/cs-business-auditor.md +12 -3
  246. package/squads/squad-commercial/agents/cs-client-success.md +12 -3
  247. package/squads/squad-commercial/agents/cs-crm-specialist.md +12 -3
  248. package/squads/squad-commercial/agents/cs-funnel-architect.md +12 -3
  249. package/squads/squad-commercial/agents/cs-lead-generation-strategist.md +12 -3
  250. package/squads/squad-commercial/agents/cs-offer-designer.md +12 -3
  251. package/squads/squad-commercial/agents/cs-revops-analyst.md +12 -3
  252. package/squads/squad-commercial/agents/cs-sales-closer.md +12 -3
  253. package/squads/squad-commercial/agents/cs-sales-enablement.md +12 -3
  254. package/squads/squad-commercial/agents/legal-chief.md +19 -189
  255. package/squads/squad-commercial/knowledge-base/chrome-brain-integration.md +17 -34
  256. package/squads/squad-commercial/knowledge-base/prospecting-pipeline-generation.md +1 -1
  257. package/squads/squad-commercial/knowledge-base/sales-revenue-master-reference.md +2 -2
  258. package/squads/squad-commercial/squad.yaml +25 -16
  259. package/squads/squad-commercial/tasks/build-nurture-sequences.md +1 -1
  260. package/squads/squad-commercial/tasks/coordinate-revenue-cycle.md +5 -5
  261. package/squads/squad-commercial/tasks/define-icp-profile.md +1 -1
  262. package/squads/squad-commercial/tasks/design-advocacy-program.md +1 -1
  263. package/squads/squad-commercial/tasks/design-lead-magnet.md +1 -1
  264. package/squads/squad-commercial/tasks/design-lead-magnets.md +2 -2
  265. package/squads/squad-commercial/tasks/manage-commercial-handoffs.md +5 -5
  266. package/squads/squad-commercial/tasks/map-content-to-funnel.md +4 -4
  267. package/squads/squad-commercial/tasks/run-productization-sprint.md +2 -2
  268. package/squads/squad-content/README.md +18 -6
  269. package/squads/squad-content/agents/content-analyst.md +9 -0
  270. package/squads/squad-content/agents/content-engineer.md +10 -1
  271. package/squads/squad-content/agents/content-governor.md +10 -1
  272. package/squads/squad-content/agents/content-orqx.md +13 -4
  273. package/squads/squad-content/agents/editorial-strategist.md +11 -2
  274. package/squads/squad-content/agents/platform-specialist.md +14 -5
  275. package/squads/squad-content/agents/signal-intelligence.md +9 -0
  276. package/squads/squad-content/checklists/onboarding-setup-checklist.md +2 -2
  277. package/squads/squad-content/knowledge-base/chrome-brain-integration.md +17 -38
  278. package/squads/squad-content/knowledge-base/content-strategy-master-reference.md +1 -1
  279. package/squads/squad-content/knowledge-base/cross-squad-integration-protocol.md +24 -24
  280. package/squads/squad-content/knowledge-base/social-algorithms-master-reference.md +1 -1
  281. package/squads/squad-content/squad.yaml +22 -11
  282. package/squads/squad-content/tasks/check-brand-consistency.md +2 -2
  283. package/squads/squad-content/tasks/coordinate-cross-squad.md +2 -2
  284. package/squads/squad-content/tasks/define-big-idea.md +2 -2
  285. package/squads/squad-content/tasks/define-content-standards.md +1 -1
  286. package/squads/squad-content/tasks/define-editorial-pillars.md +1 -1
  287. package/squads/squad-content/tasks/integrate-brand-visual-assets.md +3 -3
  288. package/squads/squad-content/tasks/update-content-preferences.md +1 -1
  289. package/squads/squad-content/workflows/onboarding-content-cycle.yaml +1 -1
  290. package/squads/squad-copy/README.md +18 -6
  291. package/squads/squad-copy/agents/ad-copywriter.md +13 -4
  292. package/squads/squad-copy/agents/andre-chaperon.md +9 -0
  293. package/squads/squad-copy/agents/ben-settle.md +9 -0
  294. package/squads/squad-copy/agents/brand-voice-writer.md +14 -5
  295. package/squads/squad-copy/agents/claude-hopkins.md +9 -0
  296. package/squads/squad-copy/agents/clayton-makepeace.md +9 -0
  297. package/squads/squad-copy/agents/conversion-writer.md +13 -4
  298. package/squads/squad-copy/agents/copy-chief.md +24 -152
  299. package/squads/squad-copy/agents/copy-editor.md +11 -2
  300. package/squads/squad-copy/agents/copy-orqx.md +10 -1
  301. package/squads/squad-copy/agents/copy-strategist.md +16 -7
  302. package/squads/squad-copy/agents/dan-kennedy.md +9 -0
  303. package/squads/squad-copy/agents/dan-koe.md +9 -0
  304. package/squads/squad-copy/agents/david-deutsch.md +9 -0
  305. package/squads/squad-copy/agents/david-ogilvy.md +9 -0
  306. package/squads/squad-copy/agents/direct-response-writer.md +13 -4
  307. package/squads/squad-copy/agents/email-sequence-strategist.md +13 -4
  308. package/squads/squad-copy/agents/eugene-schwartz.md +9 -0
  309. package/squads/squad-copy/agents/frank-kern.md +9 -0
  310. package/squads/squad-copy/agents/funnel-copywriter.md +13 -4
  311. package/squads/squad-copy/agents/gary-bencivenga.md +9 -0
  312. package/squads/squad-copy/agents/gary-halbert.md +9 -0
  313. package/squads/squad-copy/agents/headline-specialist.md +10 -1
  314. package/squads/squad-copy/agents/jim-rutz.md +9 -0
  315. package/squads/squad-copy/agents/joe-sugarman.md +9 -0
  316. package/squads/squad-copy/agents/john-carlton.md +9 -0
  317. package/squads/squad-copy/agents/jon-benson.md +9 -0
  318. package/squads/squad-copy/agents/long-form-writer.md +13 -4
  319. package/squads/squad-copy/agents/parris-lampropoulos.md +9 -0
  320. package/squads/squad-copy/agents/persuasion-psychologist.md +12 -3
  321. package/squads/squad-copy/agents/proof-architect.md +13 -4
  322. package/squads/squad-copy/agents/robert-collier.md +9 -0
  323. package/squads/squad-copy/agents/russell-brunson.md +9 -0
  324. package/squads/squad-copy/agents/ry-schwartz.md +9 -0
  325. package/squads/squad-copy/agents/stefan-georgi.md +9 -0
  326. package/squads/squad-copy/agents/todd-brown.md +9 -0
  327. package/squads/squad-copy/knowledge-base/chrome-brain-integration.md +17 -37
  328. package/squads/squad-copy/squad.yaml +49 -16
  329. package/squads/squad-copy/tasks/align-copy-strategy-with-brand.md +6 -6
  330. package/squads/squad-copy/tasks/approve-copy-for-release.md +1 -1
  331. package/squads/squad-copy/tasks/build-headline-swipe-file.md +1 -1
  332. package/squads/squad-copy/tasks/build-message-hierarchy.md +2 -2
  333. package/squads/squad-copy/tasks/conduct-copy-audit.md +1 -1
  334. package/squads/squad-copy/tasks/coordinate-multi-channel-copy.md +1 -1
  335. package/squads/squad-copy/tasks/craft-social-media-hooks.md +1 -1
  336. package/squads/squad-copy/tasks/create-brand-manifesto.md +1 -1
  337. package/squads/squad-copy/tasks/create-case-study-framework.md +3 -3
  338. package/squads/squad-copy/tasks/create-copy-brief.md +3 -3
  339. package/squads/squad-copy/tasks/create-ugc-script.md +3 -3
  340. package/squads/squad-copy/tasks/define-market-awareness-level.md +1 -1
  341. package/squads/squad-copy/tasks/design-headline-ab-tests.md +2 -2
  342. package/squads/squad-copy/tasks/develop-brand-voice.md +1 -1
  343. package/squads/squad-copy/tasks/map-objection-landscape.md +2 -2
  344. package/squads/squad-copy/tasks/optimize-email-engagement.md +2 -2
  345. package/squads/squad-copy/tasks/optimize-funnel-conversion-copy.md +3 -3
  346. package/squads/squad-copy/tasks/plan-multi-channel-copy.md +1 -1
  347. package/squads/squad-copy/tasks/write-ad-copy-variations.md +2 -2
  348. package/squads/squad-copy/tasks/write-funnel-copy-sequence.md +1 -1
  349. package/squads/squad-copy/tasks/write-video-podcast-titles.md +1 -1
  350. package/squads/squad-copy/workflows/brand-voice-development.yaml +1 -1
  351. package/squads/squad-council/README.md +18 -6
  352. package/squads/squad-council/agents/brene-brown.md +9 -0
  353. package/squads/squad-council/agents/charlie-munger.md +9 -0
  354. package/squads/squad-council/agents/council-orqx.md +12 -3
  355. package/squads/squad-council/agents/derek-sivers.md +9 -0
  356. package/squads/squad-council/agents/naval-ravikant.md +9 -0
  357. package/squads/squad-council/agents/patrick-lencioni.md +9 -0
  358. package/squads/squad-council/agents/peter-thiel.md +9 -0
  359. package/squads/squad-council/agents/ray-dalio.md +9 -0
  360. package/squads/squad-council/agents/reid-hoffman.md +9 -0
  361. package/squads/squad-council/agents/simon-sinek.md +9 -0
  362. package/squads/squad-council/agents/yvon-chouinard.md +9 -0
  363. package/squads/squad-council/knowledge-base/brand-strategy-models.md +2 -2
  364. package/squads/squad-council/knowledge-base/innovation-disruption-frameworks.md +1 -1
  365. package/squads/squad-council/knowledge-base/market-analysis-frameworks.md +1 -1
  366. package/squads/squad-council/squad.yaml +25 -20
  367. package/squads/squad-courses/README.md +18 -6
  368. package/squads/squad-courses/agents/assessment-creator.md +9 -0
  369. package/squads/squad-courses/agents/content-writer.md +9 -0
  370. package/squads/squad-courses/agents/courses-orqx.md +11 -2
  371. package/squads/squad-courses/agents/curriculum-designer.md +9 -0
  372. package/squads/squad-courses/agents/launch-strategist.md +9 -0
  373. package/squads/squad-courses/agents/lesson-architect.md +9 -0
  374. package/squads/squad-courses/agents/production-director.md +9 -0
  375. package/squads/squad-courses/agents/slide-designer.md +9 -0
  376. package/squads/squad-courses/knowledge-base/domain-advocacia-curriculum.md +1 -1
  377. package/squads/squad-courses/knowledge-base/domain-contabilidade-curriculum.md +1 -1
  378. package/squads/squad-courses/squad.yaml +21 -10
  379. package/squads/squad-courses/tasks/adapt-content-for-level.md +30 -22
  380. package/squads/squad-courses/tasks/adapt-slides-for-format.md +41 -23
  381. package/squads/squad-courses/tasks/create-bonus-strategy.md +34 -17
  382. package/squads/squad-courses/tasks/create-final-project-brief.md +48 -22
  383. package/squads/squad-courses/tasks/create-lesson-outline.md +34 -22
  384. package/squads/squad-courses/tasks/create-presentation-outline.md +40 -23
  385. package/squads/squad-courses/tasks/create-production-checklist.md +43 -28
  386. package/squads/squad-courses/tasks/create-progress-milestones.md +40 -22
  387. package/squads/squad-courses/tasks/create-quiz-questions.md +47 -22
  388. package/squads/squad-courses/tasks/create-sales-page-brief.md +36 -17
  389. package/squads/squad-courses/tasks/create-self-evaluation.md +41 -22
  390. package/squads/squad-courses/tasks/create-shot-list.md +41 -28
  391. package/squads/squad-courses/tasks/create-speaker-notes.md +43 -23
  392. package/squads/squad-courses/tasks/create-syllabus-document.md +35 -23
  393. package/squads/squad-courses/tasks/create-teleprompter-script.md +42 -28
  394. package/squads/squad-courses/tasks/create-workshop-materials.md +40 -23
  395. package/squads/squad-courses/tasks/define-competency-framework.md +42 -23
  396. package/squads/squad-courses/tasks/define-course-scope.md +36 -23
  397. package/squads/squad-courses/tasks/define-learning-outcomes.md +41 -23
  398. package/squads/squad-courses/tasks/define-lesson-objectives.md +35 -22
  399. package/squads/squad-courses/tasks/design-certification-criteria.md +43 -22
  400. package/squads/squad-courses/tasks/design-email-sequence.md +33 -17
  401. package/squads/squad-courses/tasks/design-interactive-elements.md +45 -23
  402. package/squads/squad-courses/tasks/design-intro-outro.md +38 -27
  403. package/squads/squad-courses/tasks/design-knowledge-checkpoints.md +36 -22
  404. package/squads/squad-courses/tasks/design-learning-path.md +40 -23
  405. package/squads/squad-courses/tasks/design-lesson-flow.md +40 -22
  406. package/squads/squad-courses/tasks/design-module-structure.md +37 -22
  407. package/squads/squad-courses/tasks/design-peer-review-rubric.md +40 -22
  408. package/squads/squad-courses/tasks/design-practical-assessment.md +45 -22
  409. package/squads/squad-courses/tasks/design-pricing-model.md +34 -17
  410. package/squads/squad-courses/tasks/design-screen-recording-flow.md +41 -28
  411. package/squads/squad-courses/tasks/design-slide-structure.md +40 -23
  412. package/squads/squad-courses/tasks/design-student-onboarding.md +34 -17
  413. package/squads/squad-courses/tasks/design-visual-hierarchy.md +42 -23
  414. package/squads/squad-courses/tasks/estimate-lesson-duration.md +35 -22
  415. package/squads/squad-courses/tasks/finalize-course-delivery.md +34 -23
  416. package/squads/squad-courses/tasks/initiate-course-project.md +38 -23
  417. package/squads/squad-courses/tasks/map-prerequisite-chain.md +41 -23
  418. package/squads/squad-courses/tasks/monitor-course-progress.md +34 -23
  419. package/squads/squad-courses/tasks/plan-b-roll-sequences.md +41 -28
  420. package/squads/squad-courses/tasks/plan-enrollment-funnel.md +35 -17
  421. package/squads/squad-courses/tasks/plan-launch-sequence.md +36 -17
  422. package/squads/squad-courses/tasks/plan-practical-exercises.md +36 -22
  423. package/squads/squad-courses/tasks/plan-recording-session.md +48 -28
  424. package/squads/squad-courses/tasks/proofread-course-content.md +30 -22
  425. package/squads/squad-courses/tasks/review-course-quality.md +34 -23
  426. package/squads/squad-courses/tasks/select-platform-strategy.md +35 -17
  427. package/squads/squad-courses/tasks/sequence-difficulty-progression.md +36 -22
  428. package/squads/squad-courses/tasks/structure-module-sequence.md +40 -23
  429. package/squads/squad-courses/tasks/validate-pedagogical-coherence.md +43 -23
  430. package/squads/squad-courses/tasks/write-case-studies.md +30 -22
  431. package/squads/squad-courses/tasks/write-ebook-chapter.md +30 -22
  432. package/squads/squad-courses/tasks/write-handout-material.md +30 -22
  433. package/squads/squad-courses/tasks/write-lesson-content.md +33 -22
  434. package/squads/squad-courses/tasks/write-slide-content.md +43 -23
  435. package/squads/squad-courses/tasks/write-summary-sheets.md +30 -22
  436. package/squads/squad-courses/tasks/write-video-script.md +42 -27
  437. package/squads/squad-courses/tasks/write-workbook-exercises.md +31 -22
  438. package/squads/squad-courses/workflows/course-quality-review.yaml +3 -3
  439. package/squads/squad-courses/workflows/full-course-creation.yaml +2 -2
  440. package/squads/squad-cybersecurity/README.md +18 -6
  441. package/squads/squad-cybersecurity/agents/cloud-security-engineer.md +9 -0
  442. package/squads/squad-cybersecurity/agents/compliance-officer.md +9 -0
  443. package/squads/squad-cybersecurity/agents/cyber-chief.md +24 -159
  444. package/squads/squad-cybersecurity/agents/cyber-orqx.md +11 -2
  445. package/squads/squad-cybersecurity/agents/incident-responder.md +9 -0
  446. package/squads/squad-cybersecurity/agents/network-security-engineer.md +9 -0
  447. package/squads/squad-cybersecurity/agents/penetration-tester.md +9 -0
  448. package/squads/squad-cybersecurity/agents/soc-analyst.md +9 -0
  449. package/squads/squad-cybersecurity/agents/threat-analyst.md +9 -0
  450. package/squads/squad-cybersecurity/knowledge-base/chrome-brain-integration.md +17 -35
  451. package/squads/squad-cybersecurity/knowledge-base/routing-catalog.md +22 -22
  452. package/squads/squad-cybersecurity/squad.yaml +23 -9
  453. package/squads/squad-design/README.md +18 -6
  454. package/squads/squad-design/agents/brad-frost.md +14 -29
  455. package/squads/squad-design/agents/dan-mall.md +13 -26
  456. package/squads/squad-design/agents/dave-malouf.md +13 -26
  457. package/squads/squad-design/agents/design-chief.md +24 -216
  458. package/squads/squad-design/agents/design-orqx.md +11 -2
  459. package/squads/squad-design/agents/dx-accessibility-specialist.md +9 -0
  460. package/squads/squad-design/agents/dx-design-system-architect.md +9 -0
  461. package/squads/squad-design/agents/dx-frontend-engineer.md +9 -0
  462. package/squads/squad-design/agents/dx-interaction-designer.md +9 -0
  463. package/squads/squad-design/agents/dx-performance-engineer.md +9 -0
  464. package/squads/squad-design/agents/dx-ui-designer.md +9 -0
  465. package/squads/squad-design/agents/dx-ux-strategist.md +9 -0
  466. package/squads/squad-design/agents/nano-banana-generator.md +13 -25
  467. package/squads/squad-design/knowledge-base/brazilian-design-context.md +1 -1
  468. package/squads/squad-design/knowledge-base/chrome-brain-integration.md +17 -43
  469. package/squads/squad-design/knowledge-base/design-system-master-reference.md +1 -1
  470. package/squads/squad-design/knowledge-base/design-to-code-pipeline.md +1 -1
  471. package/squads/squad-design/knowledge-base/designops-maturity.md +1 -1
  472. package/squads/squad-design/knowledge-base/famous-design-systems-study.md +1 -1
  473. package/squads/squad-design/squad.yaml +26 -16
  474. package/squads/squad-engineering/README.md +82 -0
  475. package/squads/squad-engineering/agents/eng-architect.md +61 -0
  476. package/squads/squad-engineering/agents/eng-data.md +50 -0
  477. package/squads/squad-engineering/agents/eng-dev.md +64 -0
  478. package/squads/squad-engineering/agents/eng-devops.md +51 -0
  479. package/squads/squad-engineering/agents/eng-orqx.md +114 -0
  480. package/squads/squad-engineering/agents/eng-product.md +57 -0
  481. package/squads/squad-engineering/agents/eng-qa.md +49 -0
  482. package/squads/squad-engineering/agents/eng-sprint.md +57 -0
  483. package/squads/squad-engineering/checklists/dod.md +18 -0
  484. package/squads/squad-engineering/checklists/pre-publicacao.md +14 -0
  485. package/squads/squad-engineering/knowledge-base/doc-first-na-medida.md +46 -0
  486. package/squads/squad-engineering/knowledge-base/escada-e-cargos.md +61 -0
  487. package/squads/squad-engineering/knowledge-base/memoria-por-cargo.md +39 -0
  488. package/squads/squad-engineering/knowledge-base/seguranca-minima.md +30 -0
  489. package/squads/squad-engineering/knowledge-base/stack-por-tipo.md +30 -0
  490. package/squads/squad-engineering/knowledge-base/story-como-contrato.md +30 -0
  491. package/squads/squad-engineering/preferences/README.md +49 -0
  492. package/squads/squad-engineering/squad.yaml +202 -0
  493. package/squads/squad-engineering/tasks/classify-track.md +43 -0
  494. package/squads/squad-engineering/tasks/develop-story.md +43 -0
  495. package/squads/squad-engineering/tasks/draft-stories.md +46 -0
  496. package/squads/squad-engineering/tasks/initial-state-audit.md +55 -0
  497. package/squads/squad-engineering/tasks/operate-gate-code.md +52 -0
  498. package/squads/squad-engineering/tasks/plan-orchestration.md +35 -0
  499. package/squads/squad-engineering/tasks/prepare-environment.md +29 -0
  500. package/squads/squad-engineering/tasks/publish.md +32 -0
  501. package/squads/squad-engineering/tasks/run-retro.md +36 -0
  502. package/squads/squad-engineering/tasks/verify-dod.md +27 -0
  503. package/squads/squad-engineering/tasks/verify-track-after-diff.md +33 -0
  504. package/squads/squad-engineering/tasks/write-adr.md +29 -0
  505. package/squads/squad-engineering/tasks/write-architecture.md +44 -0
  506. package/squads/squad-engineering/tasks/write-brief.md +42 -0
  507. package/squads/squad-engineering/tasks/write-migration.md +31 -0
  508. package/squads/squad-engineering/tasks/write-prd.md +44 -0
  509. package/squads/squad-engineering/templates/adr-template.md +13 -0
  510. package/squads/squad-engineering/templates/arquitetura-template.md +43 -0
  511. package/squads/squad-engineering/templates/brief-template.md +34 -0
  512. package/squads/squad-engineering/templates/checklist-pre-publicacao-template.md +29 -0
  513. package/squads/squad-engineering/templates/estado-inicial-template.md +26 -0
  514. package/squads/squad-engineering/templates/memoria-do-cargo-template.md +32 -0
  515. package/squads/squad-engineering/templates/plano-de-orquestracao-template.md +20 -0
  516. package/squads/squad-engineering/templates/prd-template.md +41 -0
  517. package/squads/squad-engineering/templates/story-template.md +69 -0
  518. package/squads/squad-engineering/workflows/ajuste-cycle.yaml +75 -0
  519. package/squads/squad-engineering/workflows/feature-cycle.yaml +112 -0
  520. package/squads/squad-engineering/workflows/projeto-cycle.yaml +137 -0
  521. package/squads/squad-finance/README.md +18 -6
  522. package/squads/squad-finance/agents/budget-controller.md +9 -0
  523. package/squads/squad-finance/agents/finance-orqx.md +11 -2
  524. package/squads/squad-finance/agents/pricing-strategist.md +9 -0
  525. package/squads/squad-finance/agents/profitability-analyst.md +9 -0
  526. package/squads/squad-finance/agents/revenue-analyst.md +9 -0
  527. package/squads/squad-finance/knowledge-base/contabilidade-master-reference.md +1 -1
  528. package/squads/squad-finance/knowledge-base/finance-master-reference.md +1 -1
  529. package/squads/squad-finance/squad.yaml +18 -9
  530. package/squads/squad-growth/README.md +18 -6
  531. package/squads/squad-growth/agents/ga-analytics-engineer.md +9 -0
  532. package/squads/squad-growth/agents/ga-campaign-analyst.md +9 -0
  533. package/squads/squad-growth/agents/ga-cro-specialist.md +9 -0
  534. package/squads/squad-growth/agents/ga-data-analyst.md +9 -0
  535. package/squads/squad-growth/agents/ga-growth-hacker.md +9 -0
  536. package/squads/squad-growth/agents/ga-seo-strategist.md +9 -0
  537. package/squads/squad-growth/agents/growth-orqx.md +14 -5
  538. package/squads/squad-growth/knowledge-base/chrome-brain-integration.md +17 -38
  539. package/squads/squad-growth/squad.yaml +21 -16
  540. package/squads/squad-paidmedia/README.md +18 -6
  541. package/squads/squad-paidmedia/agents/campaign-analyst.md +9 -0
  542. package/squads/squad-paidmedia/agents/creative-strategist.md +9 -0
  543. package/squads/squad-paidmedia/agents/cro-specialist.md +9 -0
  544. package/squads/squad-paidmedia/agents/depesh-mandalia.md +9 -0
  545. package/squads/squad-paidmedia/agents/google-ads-specialist.md +9 -0
  546. package/squads/squad-paidmedia/agents/kasim-aslam.md +9 -0
  547. package/squads/squad-paidmedia/agents/meta-ads-specialist.md +9 -0
  548. package/squads/squad-paidmedia/agents/molly-pittman.md +9 -0
  549. package/squads/squad-paidmedia/agents/nicholas-kusmich.md +9 -0
  550. package/squads/squad-paidmedia/agents/paidmedia-orqx.md +11 -2
  551. package/squads/squad-paidmedia/agents/pedro-sobral.md +9 -0
  552. package/squads/squad-paidmedia/agents/performance-engineer.md +9 -0
  553. package/squads/squad-paidmedia/agents/pm-creative-performance-analyst.md +13 -4
  554. package/squads/squad-paidmedia/agents/pm-youtube-ads-specialist.md +12 -3
  555. package/squads/squad-paidmedia/agents/ralph-burns.md +9 -0
  556. package/squads/squad-paidmedia/agents/tom-breeze.md +9 -0
  557. package/squads/squad-paidmedia/agents/traffic-masters-chief.md +19 -201
  558. package/squads/squad-paidmedia/knowledge-base/chrome-brain-integration.md +17 -40
  559. package/squads/squad-paidmedia/squad.yaml +29 -7
  560. package/squads/squad-paidmedia/tasks/design-youtube-ad-campaign.md +2 -2
  561. package/squads/squad-product/README.md +18 -6
  562. package/squads/squad-product/agents/product-orqx.md +12 -4
  563. package/squads/squad-product/agents/ps-client-product-manager.md +9 -1
  564. package/squads/squad-product/agents/ps-delivery-manager.md +9 -1
  565. package/squads/squad-product/agents/ps-discovery-lead.md +9 -1
  566. package/squads/squad-product/agents/ps-product-analyst.md +9 -1
  567. package/squads/squad-product/agents/ps-product-ops-specialist.md +9 -1
  568. package/squads/squad-product/agents/ps-product-strategist.md +9 -1
  569. package/squads/squad-product/knowledge-base/chrome-brain-integration.md +17 -42
  570. package/squads/squad-product/squad.yaml +21 -16
  571. package/squads/squad-product/tasks/define-product-okrs.md +1 -1
  572. package/squads/squad-product/tasks/define-product-vision.md +1 -1
  573. package/squads/squad-research/README.md +18 -6
  574. package/squads/squad-research/agents/audience-intelligence.md +11 -2
  575. package/squads/squad-research/agents/competitive-intelligence.md +11 -2
  576. package/squads/squad-research/agents/data-chief.md +24 -188
  577. package/squads/squad-research/agents/data-synthesizer.md +9 -0
  578. package/squads/squad-research/agents/deep-researcher.md +9 -0
  579. package/squads/squad-research/agents/market-analyst.md +10 -1
  580. package/squads/squad-research/agents/research-orqx.md +13 -4
  581. package/squads/squad-research/agents/trend-forecaster.md +10 -1
  582. package/squads/squad-research/knowledge-base/agentic-second-brain-reference.md +2 -2
  583. package/squads/squad-research/knowledge-base/brazilian-market-research-sources.md +1 -1
  584. package/squads/squad-research/knowledge-base/chrome-brain-integration.md +17 -34
  585. package/squads/squad-research/knowledge-base/cross-squad-integration-protocol.md +7 -7
  586. package/squads/squad-research/knowledge-base/multi-agent-research-methodology.md +1 -1
  587. package/squads/squad-research/knowledge-base/research-synthesis-frameworks.md +1 -1
  588. package/squads/squad-research/preferences/README.md +7 -7
  589. package/squads/squad-research/squad.yaml +32 -20
  590. package/squads/squad-research/tasks/analyze-audience-psychographics.md +1 -1
  591. package/squads/squad-research/tasks/analyze-competitor-positioning.md +1 -1
  592. package/squads/squad-research/tasks/analyze-competitor-pricing.md +2 -2
  593. package/squads/squad-research/tasks/analyze-industry-trends.md +1 -1
  594. package/squads/squad-research/tasks/analyze-pricing-landscape.md +1 -1
  595. package/squads/squad-research/tasks/analyze-social-listening.md +1 -1
  596. package/squads/squad-research/tasks/analyze-value-chain.md +1 -1
  597. package/squads/squad-research/tasks/benchmark-competitor-digital.md +3 -3
  598. package/squads/squad-research/tasks/build-audience-persona.md +6 -6
  599. package/squads/squad-research/tasks/build-data-narrative.md +1 -1
  600. package/squads/squad-research/tasks/compile-competitive-dossier.md +4 -4
  601. package/squads/squad-research/tasks/conduct-jobs-to-be-done.md +5 -5
  602. package/squads/squad-research/tasks/coordinate-cross-squad-research.md +6 -6
  603. package/squads/squad-research/tasks/create-battle-card.md +3 -3
  604. package/squads/squad-research/tasks/create-executive-briefing.md +1 -1
  605. package/squads/squad-research/tasks/create-future-landscape.md +4 -4
  606. package/squads/squad-research/tasks/create-insight-deck.md +1 -1
  607. package/squads/squad-research/tasks/create-swot-analysis.md +4 -4
  608. package/squads/squad-research/tasks/detect-weak-signals.md +3 -3
  609. package/squads/squad-research/tasks/evaluate-market-entry.md +1 -1
  610. package/squads/squad-research/tasks/forecast-industry-trends.md +4 -4
  611. package/squads/squad-research/tasks/forecast-market-growth.md +1 -1
  612. package/squads/squad-research/tasks/generate-actionable-recommendations.md +3 -3
  613. package/squads/squad-research/tasks/identify-competitive-gaps.md +1 -1
  614. package/squads/squad-research/tasks/identify-inflection-points.md +3 -3
  615. package/squads/squad-research/tasks/identify-market-segments.md +1 -1
  616. package/squads/squad-research/tasks/manage-research-sprint.md +1 -1
  617. package/squads/squad-research/tasks/map-audience-ecosystem.md +1 -1
  618. package/squads/squad-research/tasks/map-audience-journey.md +4 -4
  619. package/squads/squad-research/tasks/map-competitive-landscape.md +3 -3
  620. package/squads/squad-research/tasks/map-strategic-implications.md +4 -4
  621. package/squads/squad-research/tasks/map-technology-adoption.md +3 -3
  622. package/squads/squad-research/tasks/orchestrate-research-pipeline.md +2 -2
  623. package/squads/squad-research/tasks/predict-market-shifts.md +1 -1
  624. package/squads/squad-research/tasks/profile-ideal-customer.md +4 -4
  625. package/squads/squad-research/tasks/run-porter-five-forces.md +1 -1
  626. package/squads/squad-research/tasks/run-scenario-planning.md +3 -3
  627. package/squads/squad-research/tasks/segment-audience.md +1 -1
  628. package/squads/squad-research/tasks/size-market-tam-sam-som.md +4 -4
  629. package/squads/squad-research/tasks/synthesize-research-report.md +4 -4
  630. package/squads/squad-research/tasks/track-emerging-technologies.md +3 -3
  631. package/squads/squad-research/tasks/visualize-research-data.md +1 -1
  632. package/squads/squad-research/workflows/audience-intelligence-cycle.yaml +4 -4
  633. package/squads/squad-research/workflows/competitive-intelligence-cycle.yaml +3 -3
  634. package/squads/squad-research/workflows/deep-research-cycle.yaml +3 -3
  635. package/squads/squad-research/workflows/full-research-sprint.yaml +7 -7
  636. package/squads/squad-research/workflows/market-analysis-cycle.yaml +3 -3
  637. package/squads/squad-research/workflows/trend-forecasting-cycle.yaml +3 -3
  638. package/squads/squad-storytelling/README.md +18 -6
  639. package/squads/squad-storytelling/agents/blake-snyder.md +9 -0
  640. package/squads/squad-storytelling/agents/dan-harmon.md +9 -0
  641. package/squads/squad-storytelling/agents/joseph-campbell.md +9 -0
  642. package/squads/squad-storytelling/agents/keith-johnstone.md +9 -0
  643. package/squads/squad-storytelling/agents/kindra-hall.md +9 -0
  644. package/squads/squad-storytelling/agents/marshall-ganz.md +9 -0
  645. package/squads/squad-storytelling/agents/matthew-dicks.md +9 -0
  646. package/squads/squad-storytelling/agents/nancy-duarte.md +9 -0
  647. package/squads/squad-storytelling/agents/oren-klaff.md +9 -0
  648. package/squads/squad-storytelling/agents/park-howell.md +9 -0
  649. package/squads/squad-storytelling/agents/shawn-coyne.md +9 -0
  650. package/squads/squad-storytelling/agents/story-chief.md +24 -170
  651. package/squads/squad-storytelling/agents/storytelling-orqx.md +12 -3
  652. package/squads/squad-storytelling/knowledge-base/chrome-brain-integration.md +17 -34
  653. package/squads/squad-storytelling/squad.yaml +28 -10
  654. package/agents/iron-orqx.md +0 -211
  655. package/bin/cli.js +0 -261
  656. package/squads/squad-claude/agents/db-sage.md +0 -152
  657. package/squads/squad-claude/agents/tools-orqx.md +0 -219
  658. package/squads/squad-cloning/agents/sop-extractor.md +0 -61
  659. package/squads/squad-design/agents/design-system.md +0 -210
  660. package/squads/squad-design/agents/ux-designer.md +0 -124
@@ -0,0 +1,507 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * capture.mjs — Motor de clonagem 1:1 via navegador (Playwright/Chromium).
4
+ *
5
+ * Navega o site AO VIVO, intercepta TODA a rede (inclusive cross-origin),
6
+ * salva cada asset e reescreve as referências para caminhos locais
7
+ * root-absolutos, gerando um espelho estático fiel e deployável.
8
+ *
9
+ * Por que navegador e não wget: fontes de CDN travadas por domínio
10
+ * (Adobe Typekit, etc.) só são servidas quando a requisição parte do
11
+ * domínio original. Capturando dentro do Chromium NO domínio real, nós
12
+ * recebemos os binários das fontes e os tornamos locais — o CSS deixa
13
+ * de "quebrar" em localhost.
14
+ *
15
+ * Uso:
16
+ * node capture.mjs <url> <outDir> [opções]
17
+ * --max-pages N máximo de páginas no crawl (default 60)
18
+ * --same-host-only só segue links do mesmo host (default: mesma origin)
19
+ * --keep-trackers NÃO remove GTM/Analytics/Pixel (default: remove)
20
+ * --mobile captura em viewport mobile (390x844) além de desktop
21
+ * --no-crawl captura só a URL informada (sem seguir links)
22
+ * --include "a,b" só segue caminhos que contenham um destes fragmentos
23
+ * --exclude "a,b" ignora caminhos que contenham um destes fragmentos
24
+ * --wait MS espera extra por página (default 1200)
25
+ */
26
+
27
+ import { chromium } from 'playwright';
28
+ import * as cheerio from 'cheerio';
29
+ import { mkdir, writeFile } from 'node:fs/promises';
30
+ import { createHash } from 'node:crypto';
31
+ import path from 'node:path';
32
+
33
+ // ----------------------------- args -----------------------------
34
+ const argv = process.argv.slice(2);
35
+ const startUrl = argv[0];
36
+ const outDir = argv[1];
37
+ if (!startUrl || !outDir) {
38
+ console.error('uso: node capture.mjs <url> <outDir> [--max-pages N] [...]');
39
+ process.exit(2);
40
+ }
41
+ const opt = (name, def) => {
42
+ const i = argv.indexOf(name);
43
+ if (i === -1) return def;
44
+ const v = argv[i + 1];
45
+ return v && !v.startsWith('--') ? v : true;
46
+ };
47
+ const MAX_PAGES = parseInt(opt('--max-pages', '60'), 10);
48
+ const SAME_HOST_ONLY = argv.includes('--same-host-only');
49
+ const KEEP_TRACKERS = argv.includes('--keep-trackers');
50
+ const MOBILE = argv.includes('--mobile');
51
+ const NO_CRAWL = argv.includes('--no-crawl');
52
+ const EXTRA_WAIT = parseInt(opt('--wait', '1200'), 10);
53
+ const INCLUDE = String(opt('--include', '') || '').split(',').map(s => s.trim()).filter(Boolean);
54
+ const EXCLUDE = String(opt('--exclude', '') || '').split(',').map(s => s.trim()).filter(Boolean);
55
+ const FORM_TOAST = argv.includes('--form-toast'); // injeta aviso em forms sem backend
56
+ const STORAGE_STATE = (() => { const v = opt('--storage-state', ''); return typeof v === 'string' ? v : ''; })();
57
+
58
+ const TRACKERS = [
59
+ 'googletagmanager.com', 'google-analytics.com', '/gtag/js', '/gtm.js',
60
+ 'analytics.google.com', 'connect.facebook.net', 'facebook.com/tr',
61
+ 'doubleclick.net', 'googleadservices.com', 'google.com/ccm', 'google.com/pagead',
62
+ 'hotjar.com', 'clarity.ms', 'cdn.segment.com', 'p.typekit.net',
63
+ 'bat.bing.com', 'snap.licdn.com', 'static.ads-twitter.com',
64
+ ];
65
+
66
+ const UA = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 '
67
+ + '(KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36';
68
+
69
+ // --------------------------- helpers -----------------------------
70
+ const log = (...a) => console.log('[capture]', ...a);
71
+
72
+ function normalize(u) { const x = new URL(u); x.hash = ''; return x.href; }
73
+
74
+ function routeFor(u, origin) {
75
+ let p = new URL(u).pathname;
76
+ if (p.endsWith('/')) p += 'index.html';
77
+ else if (!/\.[a-z0-9]+$/i.test(p.split('/').pop() || '')) p += '/index.html';
78
+ return p.replace(/^\//, '');
79
+ }
80
+
81
+ // trunca qualquer segmento de path acima do limite do filesystem (255 bytes no
82
+ // APFS/ext4). URLs com tokens longos (ex.: active_storage do Rails, base64 em
83
+ // query/path) estouravam mkdir com ENAMETOOLONG e abortavam toda a captura.
84
+ // Preserva a extensão do último segmento (importa p/ MIME) e usa hash p/ unicidade.
85
+ const MAX_SEG = 180;
86
+ function safeSeg(seg, isLast) {
87
+ if (Buffer.byteLength(seg, 'utf8') <= MAX_SEG) return seg;
88
+ const ext = isLast ? path.extname(seg) : '';
89
+ // hash REAL do segmento (mesma falha do localPathFor): tokens longos com
90
+ // prefixo comum (active_storage do Rails) colidiam nos primeiros 8 bytes.
91
+ const hash = createHash('sha1').update(seg).digest('hex').slice(0, 16);
92
+ const head = seg.slice(0, 24).replace(/[^A-Za-z0-9._-]/g, '_');
93
+ return `${head}-${hash}${ext}`;
94
+ }
95
+ function sanitizePath(rel) {
96
+ const segs = rel.split('/').filter(Boolean);
97
+ return segs.map((s, i) => safeSeg(s, i === segs.length - 1)).join('/');
98
+ }
99
+
100
+ function localPathFor(rawUrl, primaryOrigin) {
101
+ const u = new URL(rawUrl);
102
+ // remove segmentos '..'/'.' (defesa contra escape de diretório) — URLs já vêm normalizadas
103
+ const clean = u.pathname.split('/').filter(s => s && s !== '.' && s !== '..').join('/');
104
+ let rel = (u.origin === primaryOrigin) ? clean : path.posix.join('_ext', u.host, clean);
105
+ // Assets de build com content-hash no nome (Next.js/Vercel `_next/static/`,
106
+ // Nuxt `_nuxt/`) são imutáveis; a query (`?dpl=`deployment, `?v=`) é só
107
+ // cache-bust. NÃO anexar hash: assim o nome no disco bate com o que o runtime
108
+ // do webpack pede dinamicamente (o host estático ignora a query) — sem isso,
109
+ // chunks/CSS carregados em runtime dão 404 mesmo com o HTML estático correto.
110
+ const immutableBuildAsset = /\/(?:_next\/static|_nuxt)\//.test(u.pathname);
111
+ if (u.search && !immutableBuildAsset) {
112
+ const base = rel.split('/').pop() || '';
113
+ const ext = path.extname(base);
114
+ // hash REAL da query (sha1), não os primeiros 8 bytes em hex: URLs de
115
+ // next/image (`?url=%2F...&w=...`) começam todas igual e colidiam no mesmo
116
+ // nome de arquivo, trocando imagens em silêncio.
117
+ const hash = createHash('sha1').update(u.search).digest('hex').slice(0, 16);
118
+ rel = ext ? rel.slice(0, -ext.length) + '.' + hash + ext : rel + '.' + hash;
119
+ }
120
+ if (rel.endsWith('/') || rel === '') rel += 'index.html';
121
+ return sanitizePath(rel);
122
+ }
123
+ const toRootAbs = (rel) => '/' + String(rel).replace(/\\/g, '/');
124
+
125
+ function isTracker(url) { return TRACKERS.some(t => url.includes(t)); }
126
+
127
+ // Script injetado no fim do <body> de cada página:
128
+ // - tk(): ativa classes `tk-*` no <html> (kits Typekit dependem dela; o JS do kit
129
+ // que a adicionaria está bloqueado/ausente no clone offline). Fidelidade — padrão.
130
+ // - toast (opt-in, --form-toast): avisa que forms não enviam offline (sem backend),
131
+ // sem usar alert() (que travaria a página).
132
+ function runtimeInject() {
133
+ const tk = "function tk(){try{var c=new Set();for(var i=0;i<document.styleSheets.length;i++){var s=document.styleSheets[i],R;try{R=s.cssRules}catch(e){continue}if(!R)continue;for(var j=0;j<R.length;j++){var t=R[j].selectorText;if(!t)continue;var m=t.match(/\\.tk-[\\w-]+/g);if(m)for(var k=0;k<m.length;k++)c.add(m[k].slice(1))}}c.forEach(function(x){document.documentElement.classList.add(x)})}catch(e){}}if(document.readyState==='complete')tk();else window.addEventListener('load',tk);";
134
+ const toast = FORM_TOAST
135
+ ? "document.addEventListener('submit',function(e){var f=e.target,a=((f.getAttribute&&f.getAttribute('action'))||'').trim();if(!/^(https?:|mailto:)/i.test(a)){e.preventDefault();var t=document.createElement('div');t.textContent='Clone estatico — formularios nao enviam (sem backend).';t.style.cssText='position:fixed;left:50%;bottom:24px;transform:translateX(-50%);background:#111;color:#fff;padding:12px 18px;border-radius:8px;font:14px/1.4 system-ui,sans-serif;z-index:2147483647;max-width:90vw;box-shadow:0 4px 20px rgba(0,0,0,.3);opacity:0;transition:opacity .2s';document.body.appendChild(t);requestAnimationFrame(function(){t.style.opacity='1'});setTimeout(function(){t.style.opacity='0';setTimeout(function(){t.remove()},300)},3500)}},true);"
136
+ : '';
137
+ return `<script data-clone-site="runtime">(function(){${tk}${toast}})();</script>`;
138
+ }
139
+
140
+ // CSS: reescreve url() e @import resolvendo SEMPRE relativo à URL do CSS.
141
+ function rewriteCss(css, cssUrl, urlToLocal) {
142
+ const resolve = (raw) => {
143
+ const v = String(raw).trim().replace(/^['"]|['"]$/g, '');
144
+ if (!v || v.startsWith('data:') || v.startsWith('#') || v.startsWith('about:')) return raw;
145
+ try {
146
+ const abs = new URL(v, cssUrl).href;
147
+ const local = urlToLocal.get(abs) || urlToLocal.get(normalize(abs));
148
+ // não capturado: aponta para a origem real (absoluta) — carrega online e
149
+ // nunca resolve um caminho relativo errado quando o CSS é servido na raiz
150
+ return local ? toRootAbs(local) : abs;
151
+ } catch { return raw; }
152
+ };
153
+ css = css.replace(/url\(\s*(['"]?)([^'")]*)\1\s*\)/gi, (_m, _q, u) => `url("${resolve(u)}")`);
154
+ css = css.replace(/@import\s+(?:url\()?\s*(['"])([^'"]+)\1\s*\)?/gi,
155
+ (_m, _q, u) => `@import url("${resolve(u)}")`);
156
+ // Neutraliza beacon do Typekit que 403 offline e suja o console.
157
+ css = css.replace(/url\(["']?https?:\/\/p\.typekit\.net[^)]*\)/gi, 'url("data:,")');
158
+ return css;
159
+ }
160
+
161
+ function rewriteHtml(html, pageUrl, urlToLocal, primaryOrigin) {
162
+ const $ = cheerio.load(html, { decodeEntities: false });
163
+ const abs = (v) => { try { return new URL(v, pageUrl).href; } catch { return null; } };
164
+ const mapAsset = (v) => {
165
+ const a = abs(v); if (!a) return v;
166
+ const l = urlToLocal.get(a) || urlToLocal.get(normalize(a));
167
+ return l ? toRootAbs(l) : v;
168
+ };
169
+ // Links de navegação internos viram root-absolutos (servidor resolve /rota/ -> index.html)
170
+ const mapNav = (v) => {
171
+ const a = abs(v); if (!a) return v;
172
+ try { const u = new URL(a); if (u.origin === primaryOrigin) return u.pathname + u.search + u.hash; }
173
+ catch {}
174
+ return v;
175
+ };
176
+
177
+ $('base').remove(); // todas as refs já são root-absolutas
178
+
179
+ $('[src]').each((_, el) => { const v = $(el).attr('src'); if (v) $(el).attr('src', mapAsset(v)); });
180
+ $('link[href]').each((_, el) => { const v = $(el).attr('href'); if (v) $(el).attr('href', mapAsset(v)); });
181
+ $('[poster]').each((_, el) => { const v = $(el).attr('poster'); if (v) $(el).attr('poster', mapAsset(v)); });
182
+
183
+ const fixSrcset = (val) => val.split(',').map(part => {
184
+ const seg = part.trim().split(/\s+/);
185
+ if (!seg[0]) return part.trim();
186
+ seg[0] = mapAsset(seg[0]);
187
+ return seg.join(' ');
188
+ }).join(', ');
189
+ $('[srcset]').each((_, el) => { const v = $(el).attr('srcset'); if (v) $(el).attr('srcset', fixSrcset(v)); });
190
+ $('[imagesrcset]').each((_, el) => { const v = $(el).attr('imagesrcset'); if (v) $(el).attr('imagesrcset', fixSrcset(v)); });
191
+
192
+ // <a> navegação interna
193
+ $('a[href]').each((_, el) => { const v = $(el).attr('href'); if (v) $(el).attr('href', mapNav(v)); });
194
+
195
+ // url() em atributos style inline
196
+ $('[style]').each((_, el) => {
197
+ const v = $(el).attr('style');
198
+ if (v && v.includes('url(')) $(el).attr('style', rewriteCss(v, pageUrl, urlToLocal));
199
+ });
200
+
201
+ // blocos <style> inline (Next.js/styled-components inlinam o CSS do Typekit aqui!)
202
+ $('style').each((_, el) => {
203
+ const t = $(el).html();
204
+ if (t) $(el).html(rewriteCss(t, pageUrl, urlToLocal));
205
+ });
206
+
207
+ if (!KEEP_TRACKERS) {
208
+ $('script').each((_, el) => {
209
+ const s = $(el).html() || '';
210
+ const src = $(el).attr('src') || '';
211
+ // NUNCA remover scripts que carregam dados de hidratação de framework.
212
+ // O flight data (RSC) do Next.js App Router é JSON gigante inline em
213
+ // `__next_f.push([...])` e pode CONTER a palavra "dataLayer"/"clarity"
214
+ // no conteúdo serializado da página — removê-lo destrói o payload RSC e
215
+ // a hidratação falha (React #423 → tela branca). Idem __NEXT_DATA__ etc.
216
+ if (/__next_f|__NEXT_DATA__|__NUXT__|__remixContext|__sveltekit|window\.__INITIAL/.test(s)) return;
217
+ if (isTracker(src) || /gtag\(|dataLayer|fbq\(|gtm\.start|GoogleAnalytics|clarity\(/.test(s)) {
218
+ $(el).remove();
219
+ }
220
+ });
221
+ $('noscript').each((_, el) => {
222
+ if (/googletagmanager|facebook\.com\/tr/.test($(el).html() || '')) $(el).remove();
223
+ });
224
+ }
225
+ const _inj = runtimeInject();
226
+ if ($('body').length) $('body').append(_inj); else $.root().append(_inj);
227
+ return $.html();
228
+ }
229
+
230
+ // --------------------------- captura -----------------------------
231
+ async function makeContext(browser, mobile, sharedAssets) {
232
+ const ctxOpts = {
233
+ serviceWorkers: 'block',
234
+ ignoreHTTPSErrors: true,
235
+ bypassCSP: true,
236
+ userAgent: UA,
237
+ viewport: mobile ? { width: 390, height: 844 } : { width: 1440, height: 900 },
238
+ deviceScaleFactor: 2,
239
+ isMobile: !!mobile,
240
+ };
241
+ if (STORAGE_STATE) ctxOpts.storageState = STORAGE_STATE; // sessão logada (Playwright)
242
+ const context = await browser.newContext(ctxOpts);
243
+
244
+ // UM route handler: força no-cache (corpos sempre legíveis) + bloqueia trackers.
245
+ await context.route('**/*', async (route) => {
246
+ const url = route.request().url();
247
+ if (!KEEP_TRACKERS && isTracker(url)) { try { return await route.abort(); } catch { return; } }
248
+ const headers = { ...route.request().headers() };
249
+ delete headers['if-none-match'];
250
+ delete headers['if-modified-since'];
251
+ try { await route.continue({ headers }); } catch { try { await route.continue(); } catch {} }
252
+ });
253
+
254
+ const assets = sharedAssets || new Map(); // url -> { contentType, body, status }
255
+ const pending = new Set();
256
+ context.on('request', r => pending.add(r));
257
+ context.on('requestfinished', r => pending.delete(r));
258
+ context.on('requestfailed', r => pending.delete(r));
259
+
260
+ context.on('response', async (response) => {
261
+ const req = response.request();
262
+ const url = response.url();
263
+ const status = response.status();
264
+ if (url.startsWith('data:') || url.startsWith('blob:')) return;
265
+ if (status >= 300 && status < 400) return;
266
+ if (status === 204 || status === 304) return;
267
+ if (req.method() === 'OPTIONS') return;
268
+ if (assets.has(url)) return;
269
+ try {
270
+ const body = await response.body();
271
+ if (!body || body.length === 0) return;
272
+ const ct = (response.headers()['content-type'] || '').split(';')[0].trim().toLowerCase();
273
+ assets.set(url, { contentType: ct, body, status });
274
+ } catch { /* redirect/opaco/evicted — ignora */ }
275
+ });
276
+
277
+ const waitQuiet = async (page, idleMs = 700, timeout = 12000) => {
278
+ const t0 = Date.now();
279
+ while (Date.now() - t0 < timeout) {
280
+ if (pending.size === 0) { await page.waitForTimeout(idleMs); if (pending.size === 0) return; }
281
+ else await page.waitForTimeout(150);
282
+ }
283
+ };
284
+
285
+ return { context, assets, waitQuiet };
286
+ }
287
+
288
+ async function autoScroll(page) {
289
+ try {
290
+ await page.evaluate(async () => {
291
+ await new Promise((resolve) => {
292
+ let total = 0; const step = Math.max(400, Math.floor(window.innerHeight * 0.8));
293
+ const timer = setInterval(() => {
294
+ const h = document.body ? document.body.scrollHeight : 0;
295
+ window.scrollBy(0, step); total += step;
296
+ if (total >= h + window.innerHeight) { clearInterval(timer); window.scrollTo(0, 0); resolve(); }
297
+ }, 110);
298
+ setTimeout(() => { clearInterval(timer); resolve(); }, 9000);
299
+ });
300
+ });
301
+ await page.evaluate(() => {
302
+ document.querySelectorAll('img[loading="lazy"]').forEach((i) => {
303
+ i.loading = 'eager'; if (i.dataset && i.dataset.src) i.src = i.dataset.src;
304
+ });
305
+ });
306
+ await page.waitForLoadState('networkidle').catch(() => {});
307
+ } catch {}
308
+ }
309
+
310
+ function allowedLink(u, origin, host) {
311
+ try {
312
+ const x = new URL(u);
313
+ if (SAME_HOST_ONLY ? x.host !== host : x.origin !== origin) return false;
314
+ if (/\.(pdf|zip|rar|mp4|mov|webm|mp3|jpg|jpeg|png|gif|svg|webp|ico|css|js|json|xml|txt|woff2?|ttf|eot)$/i.test(x.pathname)) return false;
315
+ if (/^(mailto:|tel:|javascript:|#)/i.test(u)) return false;
316
+ if (INCLUDE.length && !INCLUDE.some(s => x.pathname.includes(s))) return false;
317
+ if (EXCLUDE.length && EXCLUDE.some(s => x.pathname.includes(s))) return false;
318
+ return true;
319
+ } catch { return false; }
320
+ }
321
+
322
+ async function crawl(context, assets, waitQuiet, start) {
323
+ const origin = new URL(start).origin;
324
+ const host = new URL(start).host;
325
+ const queue = [start];
326
+ const seen = new Set([normalize(start)]);
327
+ const pages = new Map(); // route -> html
328
+ const fontReport = [];
329
+
330
+ while (queue.length && pages.size < MAX_PAGES) {
331
+ const url = queue.shift();
332
+ const page = await context.newPage();
333
+ try {
334
+ log(`(${pages.size + 1}/${MAX_PAGES}) ${url}`);
335
+ const resp = await page.goto(url, { waitUntil: 'load', timeout: 45000 });
336
+ await page.waitForLoadState('networkidle').catch(() => {});
337
+ await autoScroll(page);
338
+ await page.waitForTimeout(EXTRA_WAIT);
339
+ await page.evaluate(() => document.fonts && document.fonts.ready).catch(() => {});
340
+ await waitQuiet(page);
341
+
342
+ const route = routeFor(url, origin);
343
+ // SSG/SSR: usa o HTML do servidor (pré-hidratação) — hidrata limpo, sem
344
+ // erros React #418/#423. CSR puro: usa o DOM renderizado (shell+JS).
345
+ let rawHtml = '';
346
+ try { if (resp) rawHtml = await resp.text(); } catch {}
347
+ const rendered = await page.content();
348
+ // marcadores de HTML renderizado no servidor. `__next_f` = Next.js App
349
+ // Router (RSC/Flight) — sem ele, salvávamos o DOM já-hidratado e o
350
+ // re-hydrate dava mismatch React #423 → tela em branco. `__NEXT_DATA__` =
351
+ // Pages Router. Demais: Nuxt, Remix, SvelteKit, Astro, Gatsby, WordPress.
352
+ const ssr = /__NEXT_DATA__|__next_f|__NUXT__|data-reactroot|__remixContext|__sveltekit|id="__svelte|astro-island|___gatsby|wp-content/i.test(rawHtml);
353
+ const html = (rawHtml && (ssr || rawHtml.length > rendered.length * 0.55)) ? rawHtml : rendered;
354
+ pages.set(route, html);
355
+
356
+ if (pages.size === 1) {
357
+ const fonts = await page.evaluate(() => {
358
+ try { return [...document.fonts].map(f => `${f.family} ${f.weight} ${f.style} [${f.status}]`); }
359
+ catch { return []; }
360
+ }).catch(() => []);
361
+ fontReport.push(...new Set(fonts));
362
+ }
363
+
364
+ if (!NO_CRAWL) {
365
+ const links = await page.$$eval('a[href]', as => as.map(a => a.href)).catch(() => []);
366
+ for (const href of links) {
367
+ if (!allowedLink(href, origin, host)) continue;
368
+ const n = normalize(href);
369
+ if (!seen.has(n)) { seen.add(n); queue.push(href); }
370
+ }
371
+ }
372
+ } catch (e) {
373
+ log(' ! erro nesta página:', e.message);
374
+ } finally {
375
+ await page.close().catch(() => {});
376
+ }
377
+ }
378
+ return { pages, origin, fontReport };
379
+ }
380
+
381
+ // Recupera assets referenciados (mesma origin) que o timing da captura perdeu
382
+ // — ex: imagens lazy / disparadas por animação. Busca direto via HTTP.
383
+ async function gapFill(context, assets, pages, primaryOrigin) {
384
+ const want = new Set();
385
+ const addAbs = (v, base) => {
386
+ if (!v) return;
387
+ try {
388
+ const u = new URL(v, base);
389
+ if (u.origin !== primaryOrigin) return; // só mesma origin
390
+ if (/^(data:|blob:|javascript:|mailto:|tel:)/i.test(u.protocol)) return;
391
+ want.add(u.href.split('#')[0]);
392
+ } catch {}
393
+ };
394
+ for (const [route, html] of pages) {
395
+ const base = primaryOrigin + '/' + route.replace(/index\.html$/, '');
396
+ let $; try { $ = cheerio.load(html); } catch { continue; }
397
+ $('[src],[poster]').each((_, el) => {
398
+ for (const a of ['src', 'poster']) { const v = $(el).attr(a); if (v) addAbs(v, base); }
399
+ });
400
+ $('link[href]').each((_, el) => { const v = $(el).attr('href'); if (v) addAbs(v, base); });
401
+ $('[srcset],[imagesrcset]').each((_, el) => {
402
+ const v = $(el).attr('srcset') || $(el).attr('imagesrcset') || '';
403
+ v.split(',').forEach(p => { const f = p.trim().split(/\s+/)[0]; if (f) addAbs(f, base); });
404
+ });
405
+ $('style').each((_, el) => {
406
+ const t = $(el).html() || '';
407
+ for (const m of t.matchAll(/url\(\s*['"]?([^'")]+)/gi)) addAbs(m[1], base);
408
+ });
409
+ }
410
+ for (const [url, a] of assets) {
411
+ if (a.contentType === 'text/css' || /\.css$/i.test(url)) {
412
+ const css = a.body.toString('utf8');
413
+ for (const m of css.matchAll(/url\(\s*['"]?([^'")]+)/gi)) addAbs(m[1], url);
414
+ }
415
+ }
416
+ const pageUrls = new Set();
417
+ for (const r of pages.keys()) {
418
+ const b = primaryOrigin + '/' + r.replace(/index\.html$/, '');
419
+ pageUrls.add(b); pageUrls.add(b.replace(/\/$/, ''));
420
+ }
421
+ const missing = [...want].filter(u => !assets.has(u) && !pageUrls.has(u));
422
+ let filled = 0, tried = 0;
423
+ for (const url of missing) {
424
+ if (tried++ >= 400) break;
425
+ try {
426
+ const r = await context.request.get(url, { timeout: 15000 });
427
+ if (!r.ok()) continue;
428
+ const ct = (r.headers()['content-type'] || '').split(';')[0].trim().toLowerCase();
429
+ if (ct === 'text/html') continue; // não é asset
430
+ const body = await r.body();
431
+ if (body && body.length) { assets.set(url, { contentType: ct, body, status: r.status() }); filled++; }
432
+ } catch {}
433
+ }
434
+ if (missing.length) log(`gap-fill: ${filled}/${missing.length} assets recuperados`);
435
+ }
436
+
437
+ async function writeAll(assets, pages, primaryOrigin) {
438
+ const urlToLocal = new Map();
439
+ for (const url of assets.keys()) urlToLocal.set(url, localPathFor(url, primaryOrigin));
440
+
441
+ let nAssets = 0, nFonts = 0, nSkipped = 0;
442
+ for (const [url, a] of assets) {
443
+ if (a.contentType === 'text/html') continue; // páginas vêm do DOM hidratado
444
+ const rel = urlToLocal.get(url);
445
+ const dest = path.join(outDir, rel);
446
+ try {
447
+ await mkdir(path.dirname(dest), { recursive: true });
448
+ if (a.contentType === 'text/css' || rel.endsWith('.css')) {
449
+ await writeFile(dest, rewriteCss(a.body.toString('utf8'), url, urlToLocal));
450
+ } else {
451
+ await writeFile(dest, a.body);
452
+ if (/font|woff|ttf|otf/.test(a.contentType) || /\.(woff2?|ttf|otf|eot)$/i.test(rel)) nFonts++;
453
+ }
454
+ nAssets++;
455
+ } catch (e) {
456
+ // um asset problemático (path inválido, permissão, etc.) NUNCA aborta o clone
457
+ nSkipped++;
458
+ if (nSkipped <= 10) log(`asset ignorado (${e.code || e.name}): ${url.slice(0, 120)}`);
459
+ }
460
+ }
461
+ if (nSkipped) log(`${nSkipped} asset(s) ignorado(s) por erro de escrita`);
462
+
463
+ let nPages = 0;
464
+ for (const [route, html] of pages) {
465
+ const dest = path.join(outDir, route);
466
+ await mkdir(path.dirname(dest), { recursive: true });
467
+ // base = a URL real DESTA página, p/ resolver refs relativas corretamente
468
+ const pageUrl = primaryOrigin + '/' + route.replace(/index\.html$/, '');
469
+ await writeFile(dest, rewriteHtml(html, pageUrl, urlToLocal, primaryOrigin));
470
+ nPages++;
471
+ }
472
+ return { nAssets, nFonts, nPages };
473
+ }
474
+
475
+ // ----------------------------- main ------------------------------
476
+ (async () => {
477
+ const browser = await chromium.launch({ headless: true }); // sandbox ON: captura roda JS de site de terceiro
478
+ try {
479
+ const { context, assets, waitQuiet } = await makeContext(browser, false);
480
+ const { pages, origin, fontReport } = await crawl(context, assets, waitQuiet, startUrl);
481
+
482
+ if (MOBILE) {
483
+ log('passada mobile (captura assets responsivos)…');
484
+ const m = await makeContext(browser, true, assets); // compartilha o MESMO mapa de assets
485
+ const mp = await crawl(m.context, assets, m.waitQuiet, startUrl);
486
+ for (const [r, h] of mp.pages) if (!pages.has(r)) pages.set(r, h);
487
+ await m.context.close().catch(() => {});
488
+ }
489
+
490
+ await gapFill(context, assets, pages, origin);
491
+ const stats = await writeAll(assets, pages, origin);
492
+ await context.close().catch(() => {});
493
+
494
+ const manifest = {
495
+ source: startUrl, origin, capturedAt: new Date().toISOString(),
496
+ pages: [...pages.keys()].sort(),
497
+ assetsCaptured: assets.size, fonts: fontReport,
498
+ ...stats,
499
+ };
500
+ await writeFile(path.join(outDir, '_clone-manifest.json'), JSON.stringify(manifest, null, 2));
501
+
502
+ log(`OK — ${stats.nPages} páginas, ${stats.nAssets} assets (${stats.nFonts} fontes) salvos em ${outDir}`);
503
+ if (fontReport.length) log('fontes detectadas:', fontReport.join(' | '));
504
+ } finally {
505
+ await browser.close().catch(() => {});
506
+ }
507
+ })().catch((e) => { console.error('[capture] FALHA:', e); process.exit(1); });
@@ -0,0 +1,166 @@
1
+ #!/usr/bin/env bash
2
+ # clone.sh - Orquestrador da clonagem 1:1.
3
+ #
4
+ # clone.sh <URL> [--out DIR] [--engine auto|browser|wget]
5
+ # [--max-pages N] [--no-crawl] [--mobile] [--keep-trackers]
6
+ # [--include "a,b"] [--exclude "a,b"] [--form-toast]
7
+ # [--storage-state FILE] [--no-serve] [--no-verify] [--port N] [--spa]
8
+ #
9
+ # Padroes: engine=auto (browser p/ tudo; wget so se Playwright indisponivel),
10
+ # serve liga apos clonar, verify compara original x clone.
11
+ set -uo pipefail
12
+
13
+ SKILL_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
14
+ URL=""; OUT=""; ENGINE="auto"; MAXP="60"; PORT="8765"
15
+ NOCRAWL=""; MOBILE=""; KEEP=""; INCLUDE=""; EXCLUDE=""; SPA=""; FORMTOAST=""; STORAGE=""
16
+ DO_SERVE=1; DO_VERIFY=1
17
+
18
+ while [ $# -gt 0 ]; do
19
+ case "$1" in
20
+ --out) OUT="$2"; shift 2;;
21
+ --engine) ENGINE="$2"; shift 2;;
22
+ --max-pages) MAXP="$2"; shift 2;;
23
+ --port) PORT="$2"; shift 2;;
24
+ --no-crawl) NOCRAWL="--no-crawl"; shift;;
25
+ --mobile) MOBILE="--mobile"; shift;;
26
+ --keep-trackers) KEEP="--keep-trackers"; shift;;
27
+ --include) INCLUDE="$2"; shift 2;;
28
+ --exclude) EXCLUDE="$2"; shift 2;;
29
+ --spa) SPA="--spa"; shift;;
30
+ --form-toast) FORMTOAST="--form-toast"; shift;;
31
+ --storage-state) STORAGE="$2"; shift 2;;
32
+ --no-serve) DO_SERVE=0; shift;;
33
+ --no-verify) DO_VERIFY=0; shift;;
34
+ -*) echo "opcao desconhecida: $1" >&2; shift;;
35
+ *) URL="$1"; shift;;
36
+ esac
37
+ done
38
+
39
+ [ -z "$URL" ] && { echo "uso: clone.sh <URL> [opcoes]"; exit 2; }
40
+ case "$URL" in http*://*) ;; *) URL="https://$URL";; esac
41
+ case "$PORT" in ''|*[!0-9]*) echo "erro: --port deve ser numerico"; exit 2;; esac
42
+ # valida engine: valor invalido cairia fora dos dois blocos e produziria clone
43
+ # VAZIO anunciado como sucesso. Falha cedo e claro.
44
+ case "$ENGINE" in auto|browser|wget) ;; *) echo "erro: --engine deve ser auto|browser|wget (recebido: '$ENGINE')"; exit 2;; esac
45
+
46
+ HOST="$(printf '%s' "$URL" | sed -E 's#^https?://([^/]+).*#\1#')"
47
+ SAFEHOST="$(printf '%s' "$HOST" | sed -E 's/[^a-zA-Z0-9.-]/-/g')"
48
+ STAMP="$(date +%Y%m%d-%H%M)"
49
+ [ -z "$OUT" ] && OUT="$HOME/site-clones/${SAFEHOST}-${STAMP}"
50
+ mkdir -p "$OUT"
51
+
52
+ echo "════════════════════════════════════════════════════"
53
+ echo " Clonando: $URL"
54
+ echo " Destino: $OUT"
55
+ echo "════════════════════════════════════════════════════"
56
+
57
+ # ---------- deteccao do tipo de site ----------
58
+ UA='Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36'
59
+ HTML="$(curl -sL --max-time 25 -A "$UA" "$URL" || true)"
60
+ KIND="static"
61
+ if printf '%s' "$HTML" | grep -qE '__NEXT_DATA__|/_next/static|__NUXT__|data-reactroot|id="__next"|id="root"|window\.__remixContext'; then
62
+ KIND="spa-ssg"
63
+ fi
64
+ if printf '%s' "$HTML" | grep -qiE 'use\.typekit\.net|fonts\.googleapis\.com|fonts\.gstatic\.com'; then
65
+ FONTS_CDN=1; else FONTS_CDN=0; fi
66
+ echo "[detect] tipo=$KIND fontes-cdn=$FONTS_CDN"
67
+
68
+ # ---------- escolha do motor ----------
69
+ have_node() { command -v node >/dev/null 2>&1; }
70
+ PLAYWRIGHT_OK=0
71
+ bootstrap_browser() {
72
+ have_node || { echo "[bootstrap] Node nao encontrado"; return 1; }
73
+ if [ ! -d "$SKILL_DIR/node_modules/playwright" ]; then
74
+ echo "[bootstrap] instalando playwright + cheerio (uma vez)…"
75
+ ( cd "$SKILL_DIR" && npm install --no-audit --no-fund >/tmp/clone-npm.log 2>&1 ) || { echo "[bootstrap] npm install falhou (ver /tmp/clone-npm.log)"; return 1; }
76
+ fi
77
+ if ! ( cd "$SKILL_DIR" && node -e "require('playwright').chromium" ) 2>/dev/null; then return 1; fi
78
+ echo "[bootstrap] baixando Chromium do Playwright (uma vez, ~120MB)…"
79
+ ( cd "$SKILL_DIR" && npx --yes playwright install chromium >/tmp/clone-pw.log 2>&1 ) || echo "[bootstrap] aviso: 'playwright install' retornou erro (talvez ja exista)"
80
+ PLAYWRIGHT_OK=1; return 0
81
+ }
82
+
83
+ USE="$ENGINE"
84
+ if [ "$USE" = "auto" ]; then USE="browser"; fi
85
+ if [ "$USE" = "browser" ]; then
86
+ if ! bootstrap_browser; then
87
+ echo "[engine] Playwright indisponivel -> caindo para wget (fidelidade menor)"
88
+ USE="wget"
89
+ fi
90
+ fi
91
+
92
+ # ---------- execucao ----------
93
+ if [ "$USE" = "browser" ]; then
94
+ echo "[engine] navegador (Playwright)"
95
+ ( cd "$SKILL_DIR" && node scripts/capture.mjs "$URL" "$OUT" \
96
+ --max-pages "$MAXP" $NOCRAWL $MOBILE $KEEP $FORMTOAST \
97
+ ${STORAGE:+--storage-state "$STORAGE"} \
98
+ ${INCLUDE:+--include "$INCLUDE"} ${EXCLUDE:+--exclude "$EXCLUDE"} )
99
+ CAP=$?
100
+ if [ $CAP -ne 0 ]; then
101
+ echo "[engine] captura por navegador falhou -> tentando wget"
102
+ USE="wget"
103
+ fi
104
+ fi
105
+
106
+ if [ "$USE" = "wget" ]; then
107
+ echo "[engine] wget"
108
+ CLONE_FORM_TOAST=$([ -n "$FORMTOAST" ] && echo 1 || echo 0) bash "$SKILL_DIR/scripts/wget_fallback.sh" "$URL" "$OUT"
109
+ [ "$FONTS_CDN" = "1" ] && echo "⚠️ Fontes via CDN detectadas: no modo wget elas NAO carregam em localhost. Rode com --engine browser para fontes fieis."
110
+ fi
111
+
112
+ echo "[clone] arquivos:"; find "$OUT" -type f | wc -l | sed 's/^/ /'
113
+ echo "[clone] tamanho:"; du -sh "$OUT" | sed 's/^/ /'
114
+
115
+ # ---------- servidor ----------
116
+ SERVE_PID=""
117
+ if [ "$DO_SERVE" = "1" ]; then
118
+ # mata qualquer serve.py na mesma porta
119
+ pkill -f "serve.py --root .* --port $PORT" 2>/dev/null || true
120
+ python3 "$SKILL_DIR/scripts/serve.py" --root "$OUT" --port "$PORT" $SPA >/tmp/clone-serve.log 2>&1 &
121
+ SERVE_PID=$!
122
+ sleep 1.5
123
+ CODE="$(curl -s -o /dev/null -w '%{http_code}' "http://localhost:$PORT/" || echo 000)"
124
+ echo "[serve] http://localhost:$PORT/ (HTTP $CODE, pid $SERVE_PID)"
125
+ fi
126
+
127
+ # ---------- verificacao ----------
128
+ if [ "$DO_VERIFY" = "1" ] && [ "$USE" = "browser" ] && [ "$PLAYWRIGHT_OK" = "1" ] && [ -n "$SERVE_PID" ]; then
129
+ ROUTES="$(node -e 'try{const fs=require("fs");const m=JSON.parse(fs.readFileSync(process.argv[1],"utf8"));process.stdout.write(m.pages.map(p=>"/"+p.replace(/index\.html$/,"")).slice(0,6).join(",")||"/")}catch(e){process.stdout.write("/")}' "$OUT/_clone-manifest.json" 2>/dev/null || echo '/')"
130
+ echo "[verify] comparando rotas: $ROUTES"
131
+ ( cd "$SKILL_DIR" && node scripts/verify.mjs "$URL" "http://localhost:$PORT" "$OUT" --routes "$ROUTES" ) || echo "[verify] aviso: verificacao retornou erro"
132
+ fi
133
+
134
+ # ---------- HANDOFF.md ----------
135
+ NFILES="$(find "$OUT" -type f 2>/dev/null | wc -l | tr -d ' ')"
136
+ SIZE="$(du -sh "$OUT" 2>/dev/null | awk '{print $1}')"
137
+ cat > "$OUT/HANDOFF.md" <<EOF
138
+ # Clone — $HOST
139
+
140
+ - **Origem:** $URL
141
+ - **Gerado:** $(date '+%Y-%m-%d %H:%M')
142
+ - **Motor:** $USE · **Tipo detectado:** $KIND · **Fontes-CDN:** $FONTS_CDN
143
+ - **Arquivos:** $NFILES · **Tamanho:** $SIZE
144
+
145
+ ## Rodar / deploy
146
+ - Local: \`python3 $SKILL_DIR/scripts/serve.py --root "$OUT" --port $PORT\` → http://localhost:$PORT/
147
+ - Deploy: \`cd "$OUT" && vercel deploy --prod\` (estático, refs root-absolutas, clean URLs)
148
+
149
+ ## Artefatos
150
+ - \`_clone-manifest.json\` — páginas + fontes capturadas
151
+ - \`_verify/report.json\` — 404s, erros de console, fontes faltando, CSS truncado, cobertura de chunks
152
+ - \`_verify/*.png\` — screenshots original × clone
153
+
154
+ ## Notas
155
+ - Trackers (GTM/Analytics/Pixel) removidos por padrão — use \`--keep-trackers\` p/ manter.
156
+ - Formulários: clone estático não tem backend — \`--form-toast\` injeta aviso amigável.
157
+ - Workflow completo e diagnóstico: ~/.claude/skills/clone-site/reference/workflow.md
158
+ EOF
159
+
160
+ echo "════════════════════════════════════════════════════"
161
+ echo " PRONTO. Espelho em: $OUT"
162
+ [ -n "$SERVE_PID" ] && echo " Rodando: http://localhost:$PORT/ (parar: kill $SERVE_PID)"
163
+ echo " Manifest: $OUT/_clone-manifest.json"
164
+ echo " Handoff: $OUT/HANDOFF.md"
165
+ [ -d "$OUT/_verify" ] && echo " Verificacao: $OUT/_verify/report.json (+ screenshots)"
166
+ echo "════════════════════════════════════════════════════"