wizz-method 1.3.2 → 1.4.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 (225) hide show
  1. package/.claude-plugin/marketplace.json +4 -4
  2. package/README.md +1 -1
  3. package/evals/routing/dataset.json +290 -0
  4. package/evals/routing/run-routing-eval.mjs +89 -0
  5. package/package.json +11 -3
  6. package/skills-registry.yaml +72 -25
  7. package/src/modules/wizz/agents/wizz-ads/SKILL.md +1 -1
  8. package/src/modules/wizz/agents/wizz-copy/SKILL.md +1 -1
  9. package/src/modules/wizz/agents/wizz-designer/SKILL.md +6 -8
  10. package/src/modules/wizz/agents/wizz-growth/SKILL.md +1 -1
  11. package/src/modules/wizz/agents/wizz-maestro/SKILL.md +6 -5
  12. package/src/modules/wizz/agents/wizz-memoria/SKILL.md +1 -1
  13. package/src/modules/wizz/agents/wizz-qa/SKILL.md +1 -1
  14. package/src/modules/wizz/agents/wizz-seo/SKILL.md +1 -1
  15. package/src/modules/wizz/agents/wizz-social/SKILL.md +1 -1
  16. package/src/skills-lib/ai-product-design/SKILL.md +85 -0
  17. package/src/skills-lib/ai-product-design/references/LICENSE +21 -0
  18. package/src/skills-lib/ai-product-design/references/ai-alignment-reasoning/bias-detection-design/SKILL.md +37 -0
  19. package/src/skills-lib/ai-product-design/references/ai-alignment-reasoning/consent-and-agency/SKILL.md +37 -0
  20. package/src/skills-lib/ai-product-design/references/ai-alignment-reasoning/escalation-design/SKILL.md +40 -0
  21. package/src/skills-lib/ai-product-design/references/ai-alignment-reasoning/guardrail-design/SKILL.md +36 -0
  22. package/src/skills-lib/ai-product-design/references/ai-alignment-reasoning/harm-anticipation/SKILL.md +108 -0
  23. package/src/skills-lib/ai-product-design/references/ai-alignment-reasoning/transparency-patterns/SKILL.md +36 -0
  24. package/src/skills-lib/ai-product-design/references/ai-alignment-reasoning/trust-calibration/SKILL.md +102 -0
  25. package/src/skills-lib/ai-product-design/references/ai-alignment-reasoning/value-specification/SKILL.md +39 -0
  26. package/src/skills-lib/ai-product-design/references/design-agent-orchestration/agent-role-design/SKILL.md +37 -0
  27. package/src/skills-lib/ai-product-design/references/design-agent-orchestration/failure-recovery/SKILL.md +37 -0
  28. package/src/skills-lib/ai-product-design/references/design-agent-orchestration/handoff-protocols/SKILL.md +45 -0
  29. package/src/skills-lib/ai-product-design/references/design-agent-orchestration/human-in-the-loop/SKILL.md +39 -0
  30. package/src/skills-lib/ai-product-design/references/design-agent-orchestration/observability-design/SKILL.md +48 -0
  31. package/src/skills-lib/ai-product-design/references/design-agent-orchestration/state-management/SKILL.md +95 -0
  32. package/src/skills-lib/ai-product-design/references/design-agent-orchestration/task-decomposition/SKILL.md +36 -0
  33. package/src/skills-lib/ai-product-design/references/evaluation/comparative-evaluation/SKILL.md +39 -0
  34. package/src/skills-lib/ai-product-design/references/evaluation/failure-taxonomy/SKILL.md +47 -0
  35. package/src/skills-lib/ai-product-design/references/evaluation/heuristic-evaluation-ai/SKILL.md +46 -0
  36. package/src/skills-lib/ai-product-design/references/evaluation/longitudinal-measurement/SKILL.md +38 -0
  37. package/src/skills-lib/ai-product-design/references/evaluation/output-quality-rubrics/SKILL.md +41 -0
  38. package/src/skills-lib/ai-product-design/references/evaluation/task-success-metrics/SKILL.md +35 -0
  39. package/src/skills-lib/ai-product-design/references/evaluation/user-satisfaction-signals/SKILL.md +50 -0
  40. package/src/skills-lib/ai-product-design/references/model-interaction-design/context-window-design/SKILL.md +28 -0
  41. package/src/skills-lib/ai-product-design/references/model-interaction-design/conversation-patterns/SKILL.md +37 -0
  42. package/src/skills-lib/ai-product-design/references/model-interaction-design/feedback-loops/SKILL.md +35 -0
  43. package/src/skills-lib/ai-product-design/references/model-interaction-design/frustration-detection/SKILL.md +91 -0
  44. package/src/skills-lib/ai-product-design/references/model-interaction-design/generative-ui/SKILL.md +34 -0
  45. package/src/skills-lib/ai-product-design/references/model-interaction-design/mixed-initiative-flow/SKILL.md +39 -0
  46. package/src/skills-lib/ai-product-design/references/model-interaction-design/multimodal-orchestration/SKILL.md +94 -0
  47. package/src/skills-lib/ai-product-design/references/model-interaction-design/progressive-disclosure/SKILL.md +33 -0
  48. package/src/skills-lib/ai-product-design/references/prompt-architecture/chain-of-thought-design/SKILL.md +45 -0
  49. package/src/skills-lib/ai-product-design/references/prompt-architecture/constraint-specification/SKILL.md +50 -0
  50. package/src/skills-lib/ai-product-design/references/prompt-architecture/context-engineering/SKILL.md +45 -0
  51. package/src/skills-lib/ai-product-design/references/prompt-architecture/few-shot-patterns/SKILL.md +47 -0
  52. package/src/skills-lib/ai-product-design/references/prompt-architecture/prompt-versioning/SKILL.md +42 -0
  53. package/src/skills-lib/ai-product-design/references/prompt-architecture/system-prompt-structure/SKILL.md +50 -0
  54. package/src/skills-lib/ai-product-design/references/prompt-architecture/template-design/SKILL.md +42 -0
  55. package/src/skills-lib/ai-product-design/references/system-behavior-shaping/behavioral-consistency/SKILL.md +36 -0
  56. package/src/skills-lib/ai-product-design/references/system-behavior-shaping/cultural-adaptation/SKILL.md +38 -0
  57. package/src/skills-lib/ai-product-design/references/system-behavior-shaping/domain-voice/SKILL.md +51 -0
  58. package/src/skills-lib/ai-product-design/references/system-behavior-shaping/emotional-design/SKILL.md +51 -0
  59. package/src/skills-lib/ai-product-design/references/system-behavior-shaping/error-personality/SKILL.md +45 -0
  60. package/src/skills-lib/ai-product-design/references/system-behavior-shaping/persona-architecture/SKILL.md +38 -0
  61. package/src/skills-lib/ai-product-design/references/system-behavior-shaping/tone-calibration/SKILL.md +39 -0
  62. package/src/skills-lib/algorithmic-art/LICENSE.txt +202 -0
  63. package/src/skills-lib/algorithmic-art/SKILL.md +405 -0
  64. package/src/skills-lib/algorithmic-art/templates/generator_template.js +223 -0
  65. package/src/skills-lib/algorithmic-art/templates/viewer.html +599 -0
  66. package/src/skills-lib/animate/README.md +41 -0
  67. package/src/skills-lib/animate/SKILL.md +179 -0
  68. package/src/skills-lib/animate/examples/animate-height.tsx +75 -0
  69. package/src/skills-lib/animate/examples/app-store-card.tsx +164 -0
  70. package/src/skills-lib/animate/examples/card-hover.tsx +79 -0
  71. package/src/skills-lib/animate/examples/feedback-popover.tsx +119 -0
  72. package/src/skills-lib/animate/examples/multi-step-flow.tsx +128 -0
  73. package/src/skills-lib/animate/examples/shared-layout.tsx +64 -0
  74. package/src/skills-lib/animate/examples/text-reveal.tsx +70 -0
  75. package/src/skills-lib/animate/examples/toast-stacking.tsx +95 -0
  76. package/src/skills-lib/animate/references/css-animations.md +232 -0
  77. package/src/skills-lib/animate/references/easing-and-timing.md +105 -0
  78. package/src/skills-lib/animate/references/framer-motion.md +356 -0
  79. package/src/skills-lib/animate/references/performance-accessibility.md +185 -0
  80. package/src/skills-lib/auth-and-secrets/SKILL.md +38 -10
  81. package/src/skills-lib/canvas-design/LICENSE.txt +202 -0
  82. package/src/skills-lib/canvas-design/SKILL.md +130 -0
  83. package/src/skills-lib/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
  84. package/src/skills-lib/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  85. package/src/skills-lib/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  86. package/src/skills-lib/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
  87. package/src/skills-lib/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  88. package/src/skills-lib/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
  89. package/src/skills-lib/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  90. package/src/skills-lib/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  91. package/src/skills-lib/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
  92. package/src/skills-lib/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  93. package/src/skills-lib/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  94. package/src/skills-lib/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  95. package/src/skills-lib/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
  96. package/src/skills-lib/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  97. package/src/skills-lib/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
  98. package/src/skills-lib/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  99. package/src/skills-lib/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
  100. package/src/skills-lib/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  101. package/src/skills-lib/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  102. package/src/skills-lib/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
  103. package/src/skills-lib/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  104. package/src/skills-lib/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
  105. package/src/skills-lib/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  106. package/src/skills-lib/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  107. package/src/skills-lib/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
  108. package/src/skills-lib/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  109. package/src/skills-lib/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  110. package/src/skills-lib/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  111. package/src/skills-lib/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  112. package/src/skills-lib/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  113. package/src/skills-lib/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  114. package/src/skills-lib/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  115. package/src/skills-lib/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  116. package/src/skills-lib/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
  117. package/src/skills-lib/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  118. package/src/skills-lib/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  119. package/src/skills-lib/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  120. package/src/skills-lib/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
  121. package/src/skills-lib/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  122. package/src/skills-lib/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  123. package/src/skills-lib/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
  124. package/src/skills-lib/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  125. package/src/skills-lib/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  126. package/src/skills-lib/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  127. package/src/skills-lib/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
  128. package/src/skills-lib/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
  129. package/src/skills-lib/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  130. package/src/skills-lib/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  131. package/src/skills-lib/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  132. package/src/skills-lib/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  133. package/src/skills-lib/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
  134. package/src/skills-lib/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  135. package/src/skills-lib/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  136. package/src/skills-lib/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
  137. package/src/skills-lib/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  138. package/src/skills-lib/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
  139. package/src/skills-lib/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  140. package/src/skills-lib/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  141. package/src/skills-lib/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
  142. package/src/skills-lib/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  143. package/src/skills-lib/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  144. package/src/skills-lib/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
  145. package/src/skills-lib/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
  146. package/src/skills-lib/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  147. package/src/skills-lib/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  148. package/src/skills-lib/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
  149. package/src/skills-lib/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  150. package/src/skills-lib/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
  151. package/src/skills-lib/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  152. package/src/skills-lib/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  153. package/src/skills-lib/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
  154. package/src/skills-lib/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  155. package/src/skills-lib/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
  156. package/src/skills-lib/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  157. package/src/skills-lib/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  158. package/src/skills-lib/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  159. package/src/skills-lib/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  160. package/src/skills-lib/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
  161. package/src/skills-lib/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  162. package/src/skills-lib/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
  163. package/src/skills-lib/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  164. package/src/skills-lib/design-motion-principles/SKILL.md +122 -0
  165. package/src/skills-lib/design-motion-principles/references/accessibility.md +52 -0
  166. package/src/skills-lib/design-motion-principles/references/anti-checklist.md +274 -0
  167. package/src/skills-lib/design-motion-principles/references/audit-checklist.md +137 -0
  168. package/src/skills-lib/design-motion-principles/references/creation-gotchas.md +36 -0
  169. package/src/skills-lib/design-motion-principles/references/demo-shell.html +275 -0
  170. package/src/skills-lib/design-motion-principles/references/emil-kowalski.md +121 -0
  171. package/src/skills-lib/design-motion-principles/references/jakub-krehel.md +80 -0
  172. package/src/skills-lib/design-motion-principles/references/jhey-tompkins.md +122 -0
  173. package/src/skills-lib/design-motion-principles/references/motion-cookbook.md +529 -0
  174. package/src/skills-lib/design-motion-principles/references/output-format.md +346 -0
  175. package/src/skills-lib/design-motion-principles/references/performance.md +82 -0
  176. package/src/skills-lib/design-motion-principles/references/report-template.html +1006 -0
  177. package/src/skills-lib/design-motion-principles/workflows/audit.md +203 -0
  178. package/src/skills-lib/design-motion-principles/workflows/create.md +87 -0
  179. package/src/skills-lib/desktop-security/SKILL.md +35 -4
  180. package/src/skills-lib/premium-landing-ui-researcher/SKILL.md +52 -2083
  181. package/src/skills-lib/premium-landing-ui-researcher/references/audit-protocol.md +124 -0
  182. package/src/skills-lib/premium-landing-ui-researcher/references/component-sources.md +336 -0
  183. package/src/skills-lib/premium-landing-ui-researcher/references/core-goal.md +62 -0
  184. package/src/skills-lib/premium-landing-ui-researcher/references/dashboard-and-portfolio-modes.md +92 -0
  185. package/src/skills-lib/premium-landing-ui-researcher/references/handoffs.md +55 -0
  186. package/src/skills-lib/premium-landing-ui-researcher/references/landing-page-strategy.md +227 -0
  187. package/src/skills-lib/premium-landing-ui-researcher/references/mandatory-process.md +36 -0
  188. package/src/skills-lib/premium-landing-ui-researcher/references/output-format-and-quality.md +129 -0
  189. package/src/skills-lib/premium-landing-ui-researcher/references/prompt-templates.md +206 -0
  190. package/src/skills-lib/premium-landing-ui-researcher/references/site-levels.md +515 -0
  191. package/src/skills-lib/premium-landing-ui-researcher/references/source-first-protocol.md +144 -0
  192. package/src/skills-lib/premium-landing-ui-researcher/references/source-links.md +39 -0
  193. package/src/skills-lib/premium-landing-ui-researcher/references/stack-and-visual-direction.md +118 -0
  194. package/src/skills-lib/taste-skill/SKILL.md +33 -1177
  195. package/src/skills-lib/taste-skill/references/anti-slop-tells.md +110 -0
  196. package/src/skills-lib/taste-skill/references/architecture-conventions.md +39 -0
  197. package/src/skills-lib/taste-skill/references/block-library.md +61 -0
  198. package/src/skills-lib/taste-skill/references/brief-and-dials.md +89 -0
  199. package/src/skills-lib/taste-skill/references/dark-mode.md +23 -0
  200. package/src/skills-lib/taste-skill/references/design-directives.md +191 -0
  201. package/src/skills-lib/taste-skill/references/design-systems.md +267 -0
  202. package/src/skills-lib/taste-skill/references/motion-patterns.md +167 -0
  203. package/src/skills-lib/taste-skill/references/pattern-vocabulary.md +78 -0
  204. package/src/skills-lib/taste-skill/references/performance-a11y.md +33 -0
  205. package/src/skills-lib/taste-skill/references/preflight-checklist.md +73 -0
  206. package/src/skills-lib/taste-skill/references/redesign-protocol.md +52 -0
  207. package/src/skills-lib/web-security/SKILL.md +74 -6
  208. package/src/skills-lib/wizz-router/SKILL.md +21 -243
  209. package/src/skills-lib/wizz-router/references/auditoria-360.md +21 -0
  210. package/src/skills-lib/wizz-router/references/routing-table-flat.md +95 -0
  211. package/src/squads/advisory-board/agents/ray-dalio.md +0 -20
  212. package/tools/hooks/README.md +17 -0
  213. package/tools/hooks/security-defensive-context.js +70 -0
  214. package/tools/hooks/session-rules.js +38 -0
  215. package/tools/hooks/wizz-router-enforce.js +188 -0
  216. package/tools/installer/modules/skills-lib.js +70 -1
  217. package/tools/sync-global.mjs +84 -0
  218. package/.claude/settings.local.json +0 -8
  219. package/src/core-skills/wizz-party-mode/scripts/__pycache__/resolve_party.cpython-314.pyc +0 -0
  220. package/src/skills-lib/ui-ux-pro-max/scripts/__pycache__/core.cpython-314.pyc +0 -0
  221. package/src/skills-lib/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-314.pyc +0 -0
  222. package/src/skills-lib/ui-ux-pro-max/scripts/__pycache__/search.cpython-314.pyc +0 -0
  223. package/src/skills-lib/ui-ux-pro-max/scripts/graphify-out/cache/0964cef300f753b5cee0cc49777ca97035c85d45c212099405d9ee4da36e523f.json +0 -1
  224. package/src/skills-lib/ui-ux-pro-max/scripts/graphify-out/cache/21a40f6810c3a6f17acc3580f106171daf78c7b41bbd066bc80448a821ea0adf.json +0 -1
  225. package/src/skills-lib/ui-ux-pro-max/scripts/graphify-out/cache/69ea15a020ac81b8459e37ef63654398a50c1035fc01c43d8069df217389f7f3.json +0 -1
@@ -0,0 +1,17 @@
1
+ # Hooks (fonte de verdade)
2
+
3
+ Os hooks do Claude Code usados pelo Wizz Method vivem AQUI e são instalados em
4
+ `~/.claude/hooks/` via `npm run sync:global`. Nunca edite a cópia global direto:
5
+ ela é substituída no próximo sync.
6
+
7
+ | Hook | Evento | O que faz |
8
+ | ------------------------------- | ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
9
+ | `wizz-router-enforce.js` | UserPromptSubmit | Gate `isTrivial()` + injeção curta: em projeto Wizz (`_wizz/`) manda delegar direto ao maestro/agente da área (sem router); fora, manda pro `wizz-router`. |
10
+ | `session-rules.js` | SessionStart | Injeta as regras de comunicação 1x por sessão (antes era por prompt). |
11
+ | `security-defensive-context.js` | PreToolUse (Skill) | Metodologia defensiva/escopada ao invocar skills de segurança. Genérico por projeto (v2). |
12
+
13
+ Removidos em 2026-07 (arquivados em `~/.claude/hooks-archive/`):
14
+ `no-narration-enforce.js` (absorvido pelo session-rules) e `vault-reminder.js`.
15
+
16
+ Testes: `npm run test:hooks` (isTrivial + contexto por modo).
17
+ Evals de roteamento: `node evals/routing/run-routing-eval.mjs [--llm]`.
@@ -0,0 +1,70 @@
1
+ /**
2
+ * security-defensive-context.js
3
+ *
4
+ * Fonte de verdade: wizz-method/tools/hooks/. Instalar via `npm run sync:global`.
5
+ *
6
+ * Hook PreToolUse: quando o usuário invoca uma skill de segurança, injeta
7
+ * instruções de metodologia que orientam o modelo a trabalhar de forma
8
+ * defensiva, escopada e por dimensão — evitando o padrão de varredura ampla
9
+ * que aciona os safeguards de cibersegurança da Anthropic.
10
+ *
11
+ * v2 (2026-07): contexto genérico por projeto (a v1 hardcodava o stack do MeJu
12
+ * e injetava esse contexto em QUALQUER projeto).
13
+ *
14
+ * IMPORTANTE: guia o COMPORTAMENTO DO MODELO (abordagem + metodologia). Não
15
+ * desativa nem bypassa o safeguard da Anthropic — isso é impossível por hook.
16
+ */
17
+
18
+ const SECURITY_SKILLS = new Set([
19
+ // Skills globais instaladas em ~/.claude/skills/
20
+ 'web-security',
21
+ 'desktop-security',
22
+ // Skills providas por plugins (nomes canônicos verificados)
23
+ 'security-review',
24
+ 'security-reviewer',
25
+ 'security-scan',
26
+ // code-review em variantes de plugin e direto
27
+ 'code-review',
28
+ 'code-review:code-review',
29
+ ]);
30
+
31
+ const DEFENSIVE_CONTEXT =
32
+ 'Metodologia de revisao de seguranca (defensiva, escopada):\n\n' +
33
+ '1. ESCOPO: trabalhe por arquivo ou dimensao concreta de cada vez (ex: validacao ' +
34
+ 'de entrada num handler, politicas de acesso do banco, headers HTTP). Nunca ' +
35
+ 'varredura ampla de todo o codebase num turno unico.\n\n' +
36
+ '2. FOCO DEFENSIVO: o objetivo e hardening do codigo do proprio projeto. Cada ' +
37
+ 'achado deve mapear para uma linha/arquivo real e propor a correcao aplicada localmente.\n\n' +
38
+ '3. DIMENSOES PRIORITARIAS (adapte ao stack do projeto atual): (a) auth/sessao; ' +
39
+ '(b) validacao/allowlist de entrada em handlers de escrita; (c) autorizacao no ' +
40
+ 'banco (RLS/policies) e funcoes privilegiadas; (d) privacidade LGPD/GDPR — PII, ' +
41
+ 'consentimento, retencao; (e) secrets — nada hardcoded em settings/migrations/logs; ' +
42
+ '(f) superficie publica — rate-limit, headers de seguranca, CORS.\n\n' +
43
+ '4. OUTPUT: achados por severidade (CRITICO / ALTO / MEDIO / BAIXO), com arquivo + ' +
44
+ 'linha + codigo corrigido sugerido. Nao gerar relatorio ofensivo nem exploits.';
45
+
46
+ let raw = '';
47
+ process.stdin.setEncoding('utf8');
48
+ process.stdin.on('data', (chunk) => (raw += chunk));
49
+ process.stdin.on('end', () => {
50
+ try {
51
+ const payload = JSON.parse(raw);
52
+ const toolName = payload.tool_name || '';
53
+ const skillName = (payload.tool_input && payload.tool_input.skill) || '';
54
+
55
+ if (toolName === 'Skill' && SECURITY_SKILLS.has(skillName)) {
56
+ process.stdout.write(
57
+ JSON.stringify({
58
+ hookSpecificOutput: {
59
+ hookEventName: 'PreToolUse',
60
+ additionalContext: DEFENSIVE_CONTEXT,
61
+ },
62
+ }),
63
+ );
64
+ }
65
+ // Para qualquer outra skill/tool: sai silenciosamente sem output
66
+ } catch {
67
+ // Parse error: sai silenciosamente, nao bloqueia nada
68
+ }
69
+ process.exit(0);
70
+ });
@@ -0,0 +1,38 @@
1
+ // session-rules.js — SessionStart hook
2
+ //
3
+ // Fonte de verdade: wizz-method/tools/hooks/. Instalar via `npm run sync:global`.
4
+ //
5
+ // Injeta as regras de comunicação UMA vez por sessão (antes: no-narration-enforce
6
+ // repetia ~80 tokens em TODO prompt via UserPromptSubmit). Mesmo conteúdo, custo
7
+ // fixo por sessão em vez de custo por prompt.
8
+
9
+ const RULES =
10
+ 'REGRA DE COMUNICAÇÃO (permanente, não-negociável): não narrar o passo a passo ' +
11
+ 'enquanto trabalha; pausar e perguntar SÓ em decisão do usuário ou risco ' +
12
+ 'irreversível; fechar SEMPRE com resumo curto em tópicos, linguagem simples, ' +
13
+ 'sem jargão; sem em-dashes; comunicação enxuta por default, expandir só sob demanda.';
14
+
15
+ let input = '';
16
+ const stdinTimeout = setTimeout(() => finish(), 3000);
17
+ process.stdin.setEncoding('utf8');
18
+ process.stdin.on('data', (chunk) => (input += chunk));
19
+ process.stdin.on('end', () => {
20
+ clearTimeout(stdinTimeout);
21
+ finish();
22
+ });
23
+
24
+ function finish() {
25
+ try {
26
+ process.stdout.write(
27
+ JSON.stringify({
28
+ hookSpecificOutput: {
29
+ hookEventName: 'SessionStart',
30
+ additionalContext: RULES,
31
+ },
32
+ }),
33
+ );
34
+ } catch {
35
+ // nunca bloquear
36
+ }
37
+ process.exit(0);
38
+ }
@@ -0,0 +1,188 @@
1
+ // wizz-router-enforce.js — UserPromptSubmit hook (v2)
2
+ //
3
+ // Fonte de verdade: wizz-method/tools/hooks/. Instalar em ~/.claude/hooks via
4
+ // `npm run sync:global` (nunca editar a cópia global direto — ela é substituída).
5
+ //
6
+ // v2 (2026-07): detecta projeto Wizz (_wizz/ no cwd ou ancestrais) e injeta uma
7
+ // dica CURTA de delegação direta (maestro/agente da área) em vez do mandato
8
+ // completo do router. Fora de projeto Wizz mantém o router, também em versão
9
+ // curta. Injeção caiu de ~250 para ~50-70 tokens por prompt.
10
+ //
11
+ // Advisory-only: nunca bloqueia o prompt; falha em silêncio.
12
+
13
+ const fs = require('node:fs');
14
+ const path = require('node:path');
15
+
16
+ const TRIVIAL_PATTERNS = [
17
+ // Já é slash command / invocação explícita de skill — já roteado
18
+ /^\s*\//,
19
+ // Conversa pura / saudações
20
+ /^(oi|olá|ola|hey|hi|hello|tudo bem|bom dia|boa tarde|boa noite|obrigad[oa]|valeu|vlw|ok|okay|certo|perfeito|show|massa)\b/i,
21
+ // Typo / rename / ajuste inline pequeno
22
+ /\btypo\b/i,
23
+ /\bcorrige?\s+(esse|este|o|a)?\s*typo\b/i,
24
+ /\brename\s+(a\s+)?(vari[aá]vel|fun[cç][aã]o|arquivo|classe|m[eé]todo)\b/i,
25
+ /\brenomei[ao]\s+(a\s+)?(vari[aá]vel|fun[cç][aã]o|arquivo|classe|m[eé]todo)\b/i,
26
+ // Edição pontual apontando linha específica ("troca X por Y na linha 42")
27
+ /\bna linha \d+\b/i,
28
+ // Resposta a pergunta do próprio router — evita re-injetar no follow-up
29
+ /^(sim|n[aã]o|todas|nenhuma|cancela|dispara?\s+(todas|ambas|essas|todas\s+as\s+skills))/i,
30
+ // Perguntas puras de status / o que foi feito
31
+ /^(o que foi feito|qual o status|me conta|como (t[aá]|est[aá]|ficou|ficaram)|me mostra|explica)/i,
32
+ ];
33
+
34
+ // Verbos técnicos de ação que, mesmo em prompt curto, justificam roteamento
35
+ const ACTION_VERBS = [
36
+ 'cria',
37
+ 'criar',
38
+ 'adiciona',
39
+ 'adicionar',
40
+ 'implementa',
41
+ 'implementar',
42
+ 'constrói',
43
+ 'construir',
44
+ 'faz',
45
+ 'fazer',
46
+ 'desenvolve',
47
+ 'desenvolver',
48
+ 'refatora',
49
+ 'refatorar',
50
+ 'muda',
51
+ 'mudar',
52
+ 'altera',
53
+ 'alterar',
54
+ 'conserta',
55
+ 'consertar',
56
+ 'corrige',
57
+ 'corrigir',
58
+ 'fix',
59
+ 'fixes',
60
+ 'otimiza',
61
+ 'otimizar',
62
+ 'improve',
63
+ 'redesign',
64
+ 'migra',
65
+ 'migrar',
66
+ 'build',
67
+ 'deploy',
68
+ 'configura',
69
+ 'configurar',
70
+ 'setup',
71
+ 'integra',
72
+ 'integrar',
73
+ 'add',
74
+ 'update',
75
+ 'remove',
76
+ 'delete',
77
+ 'instala',
78
+ 'instalar',
79
+ 'testa',
80
+ 'testar',
81
+ 'audita',
82
+ 'auditar',
83
+ 'analisa',
84
+ 'analisar',
85
+ 'melhora',
86
+ 'melhorar',
87
+ 'escreve',
88
+ 'escrever',
89
+ 'gera',
90
+ 'gerar',
91
+ 'revisa',
92
+ 'revisar',
93
+ 'ajusta',
94
+ 'ajustar',
95
+ 'monta',
96
+ 'montar',
97
+ 'plano',
98
+ 'planeja',
99
+ 'reduz',
100
+ 'aumenta',
101
+ 'lança',
102
+ 'publica',
103
+ ];
104
+
105
+ function isTrivial(prompt) {
106
+ const trimmed = String(prompt || '').trim();
107
+ if (!trimmed) return true;
108
+
109
+ // Slash command — já roteado explicitamente
110
+ if (trimmed.startsWith('/')) return true;
111
+
112
+ for (const pattern of TRIVIAL_PATTERNS) {
113
+ if (pattern.test(trimmed)) return true;
114
+ }
115
+
116
+ // Prompt muito curto (< 30 chars) sem verbo de ação conhecido
117
+ if (trimmed.length < 30) {
118
+ const lower = trimmed.toLowerCase();
119
+ const hasActionVerb = ACTION_VERBS.some((v) => lower.includes(v));
120
+ if (!hasActionVerb) return true;
121
+ }
122
+
123
+ return false;
124
+ }
125
+
126
+ // Sobe no máximo 8 níveis procurando _wizz/ (projeto Wizz instalado).
127
+ function findWizzRoot(startDir) {
128
+ let dir = startDir;
129
+ for (let i = 0; i < 8 && dir; i++) {
130
+ try {
131
+ if (fs.existsSync(path.join(dir, '_wizz'))) return dir;
132
+ } catch {
133
+ return null;
134
+ }
135
+ const parent = path.dirname(dir);
136
+ if (parent === dir) return null;
137
+ dir = parent;
138
+ }
139
+ return null;
140
+ }
141
+
142
+ function buildContext(isWizzProject) {
143
+ if (isWizzProject) {
144
+ return (
145
+ '🎛️ Projeto Wizz: NÃO invoque wizz-router. Pedido complexo (2+ áreas ou ' +
146
+ '2+ fatores altos) → Skill `wizz-maestro`; 1 área e leve → Skill do agente ' +
147
+ 'da área (ex: wizz-designer, wizz-quick-dev). Trivial/conversa → direto.'
148
+ );
149
+ }
150
+ return (
151
+ '🎛️ Pedido não-trivial: invoque a Skill `wizz-router` antes de agir para ' +
152
+ 'mapear skills/MCPs (liste candidatas via AskUserQuestion e confirme). ' +
153
+ 'Exceção: edição trivial de 1 linha e conversa pura.'
154
+ );
155
+ }
156
+
157
+ function runHook() {
158
+ let input = '';
159
+ const stdinTimeout = setTimeout(() => process.exit(0), 3000);
160
+ process.stdin.setEncoding('utf8');
161
+ process.stdin.on('data', (chunk) => (input += chunk));
162
+ process.stdin.on('end', () => {
163
+ clearTimeout(stdinTimeout);
164
+ try {
165
+ const data = JSON.parse(input);
166
+ const prompt = data.prompt || '';
167
+ if (!prompt || isTrivial(prompt)) process.exit(0);
168
+
169
+ const cwd = data.cwd || process.cwd();
170
+ const output = {
171
+ hookSpecificOutput: {
172
+ hookEventName: 'UserPromptSubmit',
173
+ additionalContext: buildContext(Boolean(findWizzRoot(cwd))),
174
+ },
175
+ };
176
+ process.stdout.write(JSON.stringify(output));
177
+ } catch {
178
+ // Falha em silêncio — nunca bloquear o prompt
179
+ process.exit(0);
180
+ }
181
+ });
182
+ }
183
+
184
+ if (require.main === module) {
185
+ runHook();
186
+ } else {
187
+ module.exports = { isTrivial, buildContext, findWizzRoot };
188
+ }
@@ -13,6 +13,12 @@
13
13
  // It also installs the registry itself into `_wizz/_config/` so the maestro can
14
14
  // read the same file at runtime (the routing source and the install source stay
15
15
  // identical by construction). Every step is a no-op when its source is missing.
16
+ //
17
+ // On top of the monolith copy, it also SLICES the registry per area into
18
+ // `_wizz/_config/registry/` (index.yaml + <area>.yaml + _shared.yaml). Area
19
+ // agents read their own slice at runtime instead of the whole ~26KB file; the
20
+ // monolith copy stays in place as the fallback/compat path (see
21
+ // generateRegistrySlices doc below for the exact shape of each slice).
16
22
 
17
23
  const path = require('node:path');
18
24
  const fs = require('../fs-native');
@@ -73,6 +79,64 @@ const isCopyableEntry = (src) => {
73
79
  return !(name.startsWith('.') && name !== '.gitkeep');
74
80
  };
75
81
 
82
+ // Header stamped on every generated slice — warns readers (humans and agents)
83
+ // not to hand-edit a file that gets clobbered on the next install.
84
+ const SLICE_HEADER =
85
+ '# GERADO PELO INSTALLER — NÃO EDITAR (sobrescrito a cada install).\n' +
86
+ '# Fonte única: skills-registry.yaml na raiz do repo. Esta fatia existe só\n' +
87
+ '# para leitura leve em runtime; qualquer mudança de conteúdo vai no monólito.\n\n';
88
+
89
+ /**
90
+ * Slice the parsed registry into `_wizz/_config/registry/`:
91
+ * - index.yaml: version + areas (only `agent`/`summary`) — a lightweight
92
+ * area→agent map for the maestro to route without loading full skill lists.
93
+ * - <area>.yaml: the full block for that area (skills/mcps/clis/references),
94
+ * wrapped as `area: <name>` + the area's own fields, for the area agent
95
+ * that owns it to read directly instead of the monolith.
96
+ * - _shared.yaml: the cross-cutting sections (utility, mcp_utility,
97
+ * cli_utility, squads) any agent may still need alongside its own slice.
98
+ *
99
+ * ALL areas are sliced regardless of `selectedAreas` — generation is cheap
100
+ * (in-memory yaml.stringify) and this avoids a missing-slice bug if the user
101
+ * later switches to an agent whose area wasn't installed this run.
102
+ *
103
+ * @param {Object} registry - Parsed skills-registry.yaml
104
+ * @param {string} registryDir - Destination dir (`_wizz/_config/registry`)
105
+ * @param {(absPath: string) => void} trackFile - Record an installed file
106
+ */
107
+ async function generateRegistrySlices(registry, registryDir, trackFile) {
108
+ await fs.ensureDir(registryDir);
109
+
110
+ const areas = (registry && registry.areas) || {};
111
+
112
+ const indexAreas = {};
113
+ for (const [name, area] of Object.entries(areas)) {
114
+ indexAreas[name] = { agent: area && area.agent, summary: area && area.summary };
115
+ }
116
+ const indexPath = path.join(registryDir, 'index.yaml');
117
+ await fs.writeFile(indexPath, SLICE_HEADER + yaml.stringify({ version: registry && registry.version, areas: indexAreas }));
118
+ trackFile(indexPath);
119
+
120
+ for (const [name, area] of Object.entries(areas)) {
121
+ const areaPath = path.join(registryDir, `${name}.yaml`);
122
+ await fs.writeFile(areaPath, SLICE_HEADER + yaml.stringify({ area: name, ...area }));
123
+ trackFile(areaPath);
124
+ }
125
+
126
+ const sharedPath = path.join(registryDir, '_shared.yaml');
127
+ await fs.writeFile(
128
+ sharedPath,
129
+ SLICE_HEADER +
130
+ yaml.stringify({
131
+ utility: (registry && registry.utility) || [],
132
+ mcp_utility: (registry && registry.mcp_utility) || [],
133
+ cli_utility: (registry && registry.cli_utility) || [],
134
+ squads: (registry && registry.squads) || {},
135
+ }),
136
+ );
137
+ trackFile(sharedPath);
138
+ }
139
+
76
140
  /**
77
141
  * Copy the area-selected skills from src/skills-lib into `_wizz/skills-lib`, and
78
142
  * the registry into `_wizz/_config/skills-registry.yaml`. No-op when sources are
@@ -129,7 +193,12 @@ async function installSkillsLib({ wizzDir, selectedAreas, trackFile = () => {} }
129
193
  await fs.copy(srcRegistry, destRegistry);
130
194
  trackFile(destRegistry);
131
195
 
196
+ // Also slice it per area (see generateRegistrySlices) so agents can read a
197
+ // few KB instead of the whole monolith; the copy above stays as fallback.
198
+ const registryDir = path.join(wizzDir, '_config', 'registry');
199
+ await generateRegistrySlices(registry, registryDir, trackFile);
200
+
132
201
  return { copied, skipped, registry: true };
133
202
  }
134
203
 
135
- module.exports = { installSkillsLib, resolveSkillIds };
204
+ module.exports = { installSkillsLib, resolveSkillIds, generateRegistrySlices };
@@ -0,0 +1,84 @@
1
+ // sync-global.mjs — sincroniza o repo (fonte de verdade) com o ambiente global
2
+ // do Claude Code (~/.claude), matando o drift repo ↔ instalado.
3
+ //
4
+ // O que sincroniza:
5
+ // 1. Hooks: tools/hooks/*.js → ~/.claude/hooks/
6
+ // 2. Skills: src/skills-lib/<id>/ → ~/.claude/skills/<id>/
7
+ // (apenas skills que JÁ existem no global — não instala skills novas;
8
+ // instalação é papel do installer/npx skills add)
9
+ //
10
+ // Uso: npm run sync:global [-- --dry-run]
11
+
12
+ import fs from 'node:fs';
13
+ import path from 'node:path';
14
+ import os from 'node:os';
15
+ import { fileURLToPath } from 'node:url';
16
+
17
+ const repoRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
18
+ const claudeDir = path.join(os.homedir(), '.claude');
19
+ const dryRun = process.argv.includes('--dry-run');
20
+
21
+ function log(msg) {
22
+ console.log(msg);
23
+ }
24
+
25
+ function copyDirRecursive(src, dest) {
26
+ fs.mkdirSync(dest, { recursive: true });
27
+ for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
28
+ const from = path.join(src, entry.name);
29
+ const to = path.join(dest, entry.name);
30
+ if (entry.isDirectory()) {
31
+ copyDirRecursive(from, to);
32
+ } else if (entry.isFile()) {
33
+ fs.copyFileSync(from, to);
34
+ }
35
+ }
36
+ }
37
+
38
+ function copyDirReplacing(src, dest) {
39
+ if (!dryRun) {
40
+ fs.rmSync(dest, { recursive: true, force: true });
41
+ copyDirRecursive(src, dest);
42
+ }
43
+ }
44
+
45
+ // 1) Hooks
46
+ const hooksSrc = path.join(repoRoot, 'tools', 'hooks');
47
+ const hooksDest = path.join(claudeDir, 'hooks');
48
+ let hookCount = 0;
49
+ if (fs.existsSync(hooksSrc) && fs.existsSync(hooksDest)) {
50
+ for (const file of fs.readdirSync(hooksSrc).filter((f) => f.endsWith('.js'))) {
51
+ const from = path.join(hooksSrc, file);
52
+ const to = path.join(hooksDest, file);
53
+ if (!dryRun) fs.copyFileSync(from, to);
54
+ hookCount++;
55
+ log(`hook ${file} → ~/.claude/hooks/`);
56
+ }
57
+ }
58
+
59
+ // 2) Skills já instaladas no global
60
+ const skillsSrc = path.join(repoRoot, 'src', 'skills-lib');
61
+ const skillsDest = path.join(claudeDir, 'skills');
62
+ let synced = 0;
63
+ const skipped = [];
64
+ if (fs.existsSync(skillsSrc) && fs.existsSync(skillsDest)) {
65
+ for (const id of fs.readdirSync(skillsSrc)) {
66
+ const src = path.join(skillsSrc, id);
67
+ const dest = path.join(skillsDest, id);
68
+ if (!fs.statSync(src).isDirectory()) continue;
69
+ if (!fs.existsSync(path.join(src, 'SKILL.md'))) continue; // references/ etc.
70
+ if (!fs.existsSync(dest)) {
71
+ skipped.push(id);
72
+ continue;
73
+ }
74
+ copyDirReplacing(src, dest);
75
+ synced++;
76
+ log(`skill ${id} → ~/.claude/skills/${id}/`);
77
+ }
78
+ }
79
+
80
+ log('');
81
+ log(`${dryRun ? '[dry-run] ' : ''}${hookCount} hook(s), ${synced} skill(s) sincronizada(s).`);
82
+ if (skipped.length > 0) {
83
+ log(`Não instaladas no global (puladas): ${skipped.join(', ')}`);
84
+ }
@@ -1,8 +0,0 @@
1
- {
2
- "permissions": {
3
- "allow": [
4
- "Bash(node -e \"try{const f=require\\('figlet'\\);f.text\\('WIZZ METHOD',{font:'ANSI Shadow'},\\(e,d\\)=>{if\\(e\\){console.log\\('ERR',e.message\\)}else{console.log\\(d\\)}}\\);}catch\\(e\\){console.log\\('NO_MODULE'\\)}\")",
5
- "Bash(rtk --version)"
6
- ]
7
- }
8
- }
@@ -1 +0,0 @@
1
- {"nodes": [{"id": "search", "label": "search.py", "file_type": "code", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/search.py", "source_location": "L1"}, {"id": "search_format_output", "label": "format_output()", "file_type": "code", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/search.py", "source_location": "L30"}, {"id": "search_rationale_31", "label": "Format results for Claude consumption (token-optimized)", "file_type": "rationale", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/search.py", "source_location": "L31"}], "edges": [{"source": "search", "target": "argparse", "relation": "imports", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/search.py", "source_location": "L17", "weight": 1.0}, {"source": "search", "target": "sys", "relation": "imports", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/search.py", "source_location": "L18", "weight": 1.0}, {"source": "search", "target": "io", "relation": "imports", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/search.py", "source_location": "L19", "weight": 1.0}, {"source": "search", "target": "core", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/search.py", "source_location": "L20", "weight": 1.0}, {"source": "search", "target": "design_system", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/search.py", "source_location": "L21", "weight": 1.0}, {"source": "search", "target": "search_format_output", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/search.py", "source_location": "L30", "weight": 1.0}, {"source": "search", "target": "json", "relation": "imports", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/search.py", "source_location": "L103", "weight": 1.0}, {"source": "search", "target": "json", "relation": "imports", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/search.py", "source_location": "L111", "weight": 1.0}, {"source": "search_rationale_31", "target": "search_format_output", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/search.py", "source_location": "L31", "weight": 1.0}]}
@@ -1 +0,0 @@
1
- {"nodes": [{"id": "core", "label": "core.py", "file_type": "code", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L1"}, {"id": "core_bm25", "label": "BM25", "file_type": "code", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L96"}, {"id": "core_bm25_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L99"}, {"id": "core_bm25_tokenize", "label": ".tokenize()", "file_type": "code", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L109"}, {"id": "core_bm25_fit", "label": ".fit()", "file_type": "code", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L114"}, {"id": "core_bm25_score", "label": ".score()", "file_type": "code", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L133"}, {"id": "core_load_csv", "label": "_load_csv()", "file_type": "code", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L159"}, {"id": "core_search_csv", "label": "_search_csv()", "file_type": "code", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L165"}, {"id": "core_detect_domain", "label": "detect_domain()", "file_type": "code", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L190"}, {"id": "core_search", "label": "search()", "file_type": "code", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L212"}, {"id": "core_search_stack", "label": "search_stack()", "file_type": "code", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L234"}, {"id": "core_rationale_97", "label": "BM25 ranking algorithm for text search", "file_type": "rationale", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L97"}, {"id": "core_rationale_110", "label": "Lowercase, split, remove punctuation, filter short words", "file_type": "rationale", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L110"}, {"id": "core_rationale_115", "label": "Build BM25 index from documents", "file_type": "rationale", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L115"}, {"id": "core_rationale_134", "label": "Score all documents against query", "file_type": "rationale", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L134"}, {"id": "core_rationale_160", "label": "Load CSV and return list of dicts", "file_type": "rationale", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L160"}, {"id": "core_rationale_166", "label": "Core search function using BM25", "file_type": "rationale", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L166"}, {"id": "core_rationale_191", "label": "Auto-detect the most relevant domain from query", "file_type": "rationale", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L191"}, {"id": "core_rationale_213", "label": "Main search function with auto-domain detection", "file_type": "rationale", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L213"}, {"id": "core_rationale_235", "label": "Search stack-specific guidelines", "file_type": "rationale", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L235"}], "edges": [{"source": "core", "target": "csv", "relation": "imports", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L7", "weight": 1.0}, {"source": "core", "target": "re", "relation": "imports", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L8", "weight": 1.0}, {"source": "core", "target": "pathlib", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L9", "weight": 1.0}, {"source": "core", "target": "math", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L10", "weight": 1.0}, {"source": "core", "target": "collections", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L11", "weight": 1.0}, {"source": "core", "target": "core_bm25", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L96", "weight": 1.0}, {"source": "core_bm25", "target": "core_bm25_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L99", "weight": 1.0}, {"source": "core_bm25", "target": "core_bm25_tokenize", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L109", "weight": 1.0}, {"source": "core_bm25", "target": "core_bm25_fit", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L114", "weight": 1.0}, {"source": "core_bm25", "target": "core_bm25_score", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L133", "weight": 1.0}, {"source": "core", "target": "core_load_csv", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L159", "weight": 1.0}, {"source": "core", "target": "core_search_csv", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L165", "weight": 1.0}, {"source": "core", "target": "core_detect_domain", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L190", "weight": 1.0}, {"source": "core", "target": "core_search", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L212", "weight": 1.0}, {"source": "core", "target": "core_search_stack", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L234", "weight": 1.0}, {"source": "core_bm25_fit", "target": "core_bm25_tokenize", "relation": "calls", "confidence": "INFERRED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L116", "weight": 0.8}, {"source": "core_bm25_score", "target": "core_bm25_tokenize", "relation": "calls", "confidence": "INFERRED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L135", "weight": 0.8}, {"source": "core_search_csv", "target": "core_load_csv", "relation": "calls", "confidence": "INFERRED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L170", "weight": 0.8}, {"source": "core_search_csv", "target": "core_bm25", "relation": "calls", "confidence": "INFERRED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L176", "weight": 0.8}, {"source": "core_search_csv", "target": "core_bm25_fit", "relation": "calls", "confidence": "INFERRED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L177", "weight": 0.8}, {"source": "core_search_csv", "target": "core_bm25_score", "relation": "calls", "confidence": "INFERRED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L178", "weight": 0.8}, {"source": "core_search", "target": "core_detect_domain", "relation": "calls", "confidence": "INFERRED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L215", "weight": 0.8}, {"source": "core_search", "target": "core_search_csv", "relation": "calls", "confidence": "INFERRED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L223", "weight": 0.8}, {"source": "core_search_stack", "target": "core_search_csv", "relation": "calls", "confidence": "INFERRED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L244", "weight": 0.8}, {"source": "core_rationale_97", "target": "core_bm25", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L97", "weight": 1.0}, {"source": "core_rationale_110", "target": "core_bm25_tokenize", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L110", "weight": 1.0}, {"source": "core_rationale_115", "target": "core_bm25_fit", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L115", "weight": 1.0}, {"source": "core_rationale_134", "target": "core_bm25_score", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L134", "weight": 1.0}, {"source": "core_rationale_160", "target": "core_load_csv", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L160", "weight": 1.0}, {"source": "core_rationale_166", "target": "core_search_csv", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L166", "weight": 1.0}, {"source": "core_rationale_191", "target": "core_detect_domain", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L191", "weight": 1.0}, {"source": "core_rationale_213", "target": "core_search", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L213", "weight": 1.0}, {"source": "core_rationale_235", "target": "core_search_stack", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/core.py", "source_location": "L235", "weight": 1.0}]}
@@ -1 +0,0 @@
1
- {"nodes": [{"id": "design_system", "label": "design_system.py", "file_type": "code", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L1"}, {"id": "design_system_designsystemgenerator", "label": "DesignSystemGenerator", "file_type": "code", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L37"}, {"id": "design_system_designsystemgenerator_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L40"}, {"id": "design_system_designsystemgenerator_load_reasoning", "label": "._load_reasoning()", "file_type": "code", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L43"}, {"id": "design_system_designsystemgenerator_multi_domain_search", "label": "._multi_domain_search()", "file_type": "code", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L51"}, {"id": "design_system_designsystemgenerator_find_reasoning_rule", "label": "._find_reasoning_rule()", "file_type": "code", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L64"}, {"id": "design_system_designsystemgenerator_apply_reasoning", "label": "._apply_reasoning()", "file_type": "code", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L88"}, {"id": "design_system_designsystemgenerator_select_best_match", "label": "._select_best_match()", "file_type": "code", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L122"}, {"id": "design_system_designsystemgenerator_extract_results", "label": "._extract_results()", "file_type": "code", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L159"}, {"id": "design_system_designsystemgenerator_generate", "label": ".generate()", "file_type": "code", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L163"}, {"id": "design_system_format_ascii_box", "label": "format_ascii_box()", "file_type": "code", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L242"}, {"id": "design_system_format_markdown", "label": "format_markdown()", "file_type": "code", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L367"}, {"id": "design_system_generate_design_system", "label": "generate_design_system()", "file_type": "code", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L462"}, {"id": "design_system_persist_design_system", "label": "persist_design_system()", "file_type": "code", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L491"}, {"id": "design_system_format_master_md", "label": "format_master_md()", "file_type": "code", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L542"}, {"id": "design_system_format_page_override_md", "label": "format_page_override_md()", "file_type": "code", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L805"}, {"id": "design_system_generate_intelligent_overrides", "label": "_generate_intelligent_overrides()", "file_type": "code", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L914"}, {"id": "design_system_detect_page_type", "label": "_detect_page_type()", "file_type": "code", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L1020"}, {"id": "design_system_rationale_38", "label": "Generates design system recommendations from aggregated searches.", "file_type": "rationale", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L38"}, {"id": "design_system_rationale_44", "label": "Load reasoning rules from CSV.", "file_type": "rationale", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L44"}, {"id": "design_system_rationale_52", "label": "Execute searches across multiple domains.", "file_type": "rationale", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L52"}, {"id": "design_system_rationale_65", "label": "Find matching reasoning rule for a category.", "file_type": "rationale", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L65"}, {"id": "design_system_rationale_89", "label": "Apply reasoning rules to search results.", "file_type": "rationale", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L89"}, {"id": "design_system_rationale_123", "label": "Select best matching result based on priority keywords.", "file_type": "rationale", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L123"}, {"id": "design_system_rationale_160", "label": "Extract results list from search result dict.", "file_type": "rationale", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L160"}, {"id": "design_system_rationale_164", "label": "Generate complete design system recommendation.", "file_type": "rationale", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L164"}, {"id": "design_system_rationale_243", "label": "Format design system as ASCII box with emojis (MCP-style).", "file_type": "rationale", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L243"}, {"id": "design_system_rationale_368", "label": "Format design system as markdown.", "file_type": "rationale", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L368"}, {"id": "design_system_rationale_464", "label": "Main entry point for design system generation. Args: query: Search", "file_type": "rationale", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L464"}, {"id": "design_system_rationale_492", "label": "Persist design system to design-system/<project>/ folder using Master + Override", "file_type": "rationale", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L492"}, {"id": "design_system_rationale_543", "label": "Format design system as MASTER.md with hierarchical override logic.", "file_type": "rationale", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L543"}, {"id": "design_system_rationale_806", "label": "Format a page-specific override file with intelligent AI-generated content.", "file_type": "rationale", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L806"}, {"id": "design_system_rationale_915", "label": "Generate intelligent overrides based on page type using layered search.", "file_type": "rationale", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L915"}, {"id": "design_system_rationale_1021", "label": "Detect page type from context and search results.", "file_type": "rationale", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L1021"}], "edges": [{"source": "design_system", "target": "csv", "relation": "imports", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L16", "weight": 1.0}, {"source": "design_system", "target": "json", "relation": "imports", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L17", "weight": 1.0}, {"source": "design_system", "target": "os", "relation": "imports", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L18", "weight": 1.0}, {"source": "design_system", "target": "datetime", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L19", "weight": 1.0}, {"source": "design_system", "target": "pathlib", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L20", "weight": 1.0}, {"source": "design_system", "target": "core", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L21", "weight": 1.0}, {"source": "design_system", "target": "design_system_designsystemgenerator", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L37", "weight": 1.0}, {"source": "design_system_designsystemgenerator", "target": "design_system_designsystemgenerator_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L40", "weight": 1.0}, {"source": "design_system_designsystemgenerator", "target": "design_system_designsystemgenerator_load_reasoning", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L43", "weight": 1.0}, {"source": "design_system_designsystemgenerator", "target": "design_system_designsystemgenerator_multi_domain_search", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L51", "weight": 1.0}, {"source": "design_system_designsystemgenerator", "target": "design_system_designsystemgenerator_find_reasoning_rule", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L64", "weight": 1.0}, {"source": "design_system_designsystemgenerator", "target": "design_system_designsystemgenerator_apply_reasoning", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L88", "weight": 1.0}, {"source": "design_system_designsystemgenerator", "target": "design_system_designsystemgenerator_select_best_match", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L122", "weight": 1.0}, {"source": "design_system_designsystemgenerator", "target": "design_system_designsystemgenerator_extract_results", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L159", "weight": 1.0}, {"source": "design_system_designsystemgenerator", "target": "design_system_designsystemgenerator_generate", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L163", "weight": 1.0}, {"source": "design_system", "target": "design_system_format_ascii_box", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L242", "weight": 1.0}, {"source": "design_system", "target": "design_system_format_markdown", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L367", "weight": 1.0}, {"source": "design_system", "target": "design_system_generate_design_system", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L462", "weight": 1.0}, {"source": "design_system", "target": "design_system_persist_design_system", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L491", "weight": 1.0}, {"source": "design_system", "target": "design_system_format_master_md", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L542", "weight": 1.0}, {"source": "design_system", "target": "design_system_format_page_override_md", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L805", "weight": 1.0}, {"source": "design_system", "target": "design_system_generate_intelligent_overrides", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L914", "weight": 1.0}, {"source": "design_system", "target": "design_system_detect_page_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L1020", "weight": 1.0}, {"source": "design_system", "target": "argparse", "relation": "imports", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L1057", "weight": 1.0}, {"source": "design_system_designsystemgenerator_init", "target": "design_system_designsystemgenerator_load_reasoning", "relation": "calls", "confidence": "INFERRED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L41", "weight": 0.8}, {"source": "design_system_designsystemgenerator_apply_reasoning", "target": "design_system_designsystemgenerator_find_reasoning_rule", "relation": "calls", "confidence": "INFERRED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L90", "weight": 0.8}, {"source": "design_system_designsystemgenerator_generate", "target": "design_system_designsystemgenerator_apply_reasoning", "relation": "calls", "confidence": "INFERRED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L173", "weight": 0.8}, {"source": "design_system_designsystemgenerator_generate", "target": "design_system_designsystemgenerator_multi_domain_search", "relation": "calls", "confidence": "INFERRED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L177", "weight": 0.8}, {"source": "design_system_designsystemgenerator_generate", "target": "design_system_designsystemgenerator_extract_results", "relation": "calls", "confidence": "INFERRED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L181", "weight": 0.8}, {"source": "design_system_designsystemgenerator_generate", "target": "design_system_designsystemgenerator_select_best_match", "relation": "calls", "confidence": "INFERRED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L186", "weight": 0.8}, {"source": "design_system_generate_design_system", "target": "design_system_designsystemgenerator", "relation": "calls", "confidence": "INFERRED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L478", "weight": 0.8}, {"source": "design_system_generate_design_system", "target": "design_system_designsystemgenerator_generate", "relation": "calls", "confidence": "INFERRED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L479", "weight": 0.8}, {"source": "design_system_generate_design_system", "target": "design_system_persist_design_system", "relation": "calls", "confidence": "INFERRED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L483", "weight": 0.8}, {"source": "design_system_generate_design_system", "target": "design_system_format_markdown", "relation": "calls", "confidence": "INFERRED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L486", "weight": 0.8}, {"source": "design_system_generate_design_system", "target": "design_system_format_ascii_box", "relation": "calls", "confidence": "INFERRED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L487", "weight": 0.8}, {"source": "design_system_persist_design_system", "target": "design_system_format_master_md", "relation": "calls", "confidence": "INFERRED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L522", "weight": 0.8}, {"source": "design_system_persist_design_system", "target": "design_system_format_page_override_md", "relation": "calls", "confidence": "INFERRED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L530", "weight": 0.8}, {"source": "design_system_format_page_override_md", "target": "design_system_generate_intelligent_overrides", "relation": "calls", "confidence": "INFERRED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L812", "weight": 0.8}, {"source": "design_system_generate_intelligent_overrides", "target": "design_system_detect_page_type", "relation": "calls", "confidence": "INFERRED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L938", "weight": 0.8}, {"source": "design_system_rationale_38", "target": "design_system_designsystemgenerator", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L38", "weight": 1.0}, {"source": "design_system_rationale_44", "target": "design_system_designsystemgenerator_load_reasoning", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L44", "weight": 1.0}, {"source": "design_system_rationale_52", "target": "design_system_designsystemgenerator_multi_domain_search", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L52", "weight": 1.0}, {"source": "design_system_rationale_65", "target": "design_system_designsystemgenerator_find_reasoning_rule", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L65", "weight": 1.0}, {"source": "design_system_rationale_89", "target": "design_system_designsystemgenerator_apply_reasoning", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L89", "weight": 1.0}, {"source": "design_system_rationale_123", "target": "design_system_designsystemgenerator_select_best_match", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L123", "weight": 1.0}, {"source": "design_system_rationale_160", "target": "design_system_designsystemgenerator_extract_results", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L160", "weight": 1.0}, {"source": "design_system_rationale_164", "target": "design_system_designsystemgenerator_generate", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L164", "weight": 1.0}, {"source": "design_system_rationale_243", "target": "design_system_format_ascii_box", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L243", "weight": 1.0}, {"source": "design_system_rationale_368", "target": "design_system_format_markdown", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L368", "weight": 1.0}, {"source": "design_system_rationale_464", "target": "design_system_generate_design_system", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L464", "weight": 1.0}, {"source": "design_system_rationale_492", "target": "design_system_persist_design_system", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L492", "weight": 1.0}, {"source": "design_system_rationale_543", "target": "design_system_format_master_md", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L543", "weight": 1.0}, {"source": "design_system_rationale_806", "target": "design_system_format_page_override_md", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L806", "weight": 1.0}, {"source": "design_system_rationale_915", "target": "design_system_generate_intelligent_overrides", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L915", "weight": 1.0}, {"source": "design_system_rationale_1021", "target": "design_system_detect_page_type", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/juniordameto/.claude/skills/ui-ux-pro-max/scripts/design_system.py", "source_location": "L1021", "weight": 1.0}]}