wizz-method 1.2.0 → 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/modules/wizz/agents/wizz-ads/SKILL.md +2 -0
- package/src/modules/wizz/agents/wizz-copy/SKILL.md +2 -0
- package/src/modules/wizz/agents/wizz-designer/SKILL.md +2 -0
- package/src/modules/wizz/agents/wizz-growth/SKILL.md +2 -0
- package/src/modules/wizz/agents/wizz-maestro/SKILL.md +8 -8
- package/src/modules/wizz/agents/wizz-memoria/SKILL.md +2 -0
- package/src/modules/wizz/agents/wizz-qa/SKILL.md +2 -0
- package/src/modules/wizz/agents/wizz-seo/SKILL.md +2 -0
- package/src/skills-lib/wizz-router/SKILL.md +23 -10
- package/tools/installer/core/installer.js +4 -3
- package/tools/installer/ui.js +4 -4
- package/tools/validate-skills.js +6 -1
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package.json",
|
|
3
3
|
"name": "wizz-method",
|
|
4
|
-
"version": "1.2.
|
|
4
|
+
"version": "1.2.2",
|
|
5
5
|
"description": "Wizz Method — método de agência orientado por IA em PT-BR (fork independente do BMad Method)",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"agile",
|
|
@@ -19,6 +19,8 @@ Você é o Ads do Wizz. Planeja campanhas, gera variações de criativo e acompa
|
|
|
19
19
|
8. Menu/dispatch.
|
|
20
20
|
|
|
21
21
|
## Como trabalho (ponte global)
|
|
22
|
+
|
|
23
|
+
> **Fonte única (registry) — leia SEMPRE antes dos exemplos abaixo:** a lista real da sua área (`ads`) vive no `skills-registry.yaml` (resolva em `{project-root}/_wizz/_config/skills-registry.yaml` → `{project-root}/_wizz/skills-registry.yaml` → `{project-root}/skills-registry.yaml`). Ache o bloco `areas.ads` e ofereça **tudo que casar** com o pedido pelo `when:` — `skills:` (via `Skill`), `clis:` (`check:` → se faltar mostre o `install:`, opt-in, respeite `platform:`) e `mcps:` (`claude mcp add <id>` com o bloco `server`, ex. `meta-ads`). Os exemplos abaixo são atalho legível; o registry é a verdade e pega novidades automático (ex. `arcads` p/ gerar vídeo-ad).
|
|
22
24
|
- Estratégia de campanha, segmentação, lances, ROAS → `paid-ads`
|
|
23
25
|
- Variações de criativo, headlines, copy de anúncio → `ad-creative`
|
|
24
26
|
- Tracking, conversões, UTMs, pixel → `analytics-tracking`
|
|
@@ -19,6 +19,8 @@ Você é o Copy do Wizz. Escreve textos que vendem, humaniza o que soa robótico
|
|
|
19
19
|
8. Menu/dispatch.
|
|
20
20
|
|
|
21
21
|
## Como trabalho (ponte global)
|
|
22
|
+
|
|
23
|
+
> **Fonte única (registry) — leia SEMPRE antes dos exemplos abaixo:** a lista real da sua área (`copy`) vive no `skills-registry.yaml` (resolva em `{project-root}/_wizz/_config/skills-registry.yaml` → `{project-root}/_wizz/skills-registry.yaml` → `{project-root}/skills-registry.yaml`). Ache o bloco `areas.copy` e ofereça **tudo que casar** com o pedido pelo `when:` — `skills:` (via `Skill`), `clis:` (`check:` → se faltar mostre o `install:`, opt-in, respeite `platform:`) e `mcps:` (`claude mcp add <id>` com o bloco `server`). Os exemplos abaixo são atalho legível; o registry é a verdade e pega o que for adicionado depois.
|
|
22
24
|
- Copy de página, headline, proposta de valor → `copywriting`
|
|
23
25
|
- E-mail, sequência, nurture → `email-sequence`
|
|
24
26
|
- Deixar texto natural, remover cara de IA → `humanizer`
|
|
@@ -25,6 +25,8 @@ Você é o Designer do Wizz. Cria interfaces e landing pages de alto nível, mos
|
|
|
25
25
|
|
|
26
26
|
## Como trabalho (ponte para skills globais)
|
|
27
27
|
|
|
28
|
+
> **Fonte única (registry) — leia SEMPRE antes dos exemplos abaixo:** a lista real da sua área (`designer`) vive no `skills-registry.yaml` (resolva em `{project-root}/_wizz/_config/skills-registry.yaml` → `{project-root}/_wizz/skills-registry.yaml` → `{project-root}/skills-registry.yaml`). Ache o bloco `areas.designer` e ofereça **tudo que casar** com o pedido pelo campo `when:` — `skills:` (invoque via `Skill`), `clis:` (rode o `check:`; se faltar, mostre o `install:`, opt-in; respeite `platform:` — ex. `buttercut` é só `darwin-arm64`) e `mcps:` (proponha `claude mcp add <id>` com o bloco `server`). Os exemplos abaixo são só um atalho legível; o registry é a verdade e pega o que for adicionado depois (ex. tools de vídeo: hyperframes, claude-video, buttercut, voicebox).
|
|
29
|
+
|
|
28
30
|
Para cada tarefa, **invoque a skill global certa via a ferramenta `Skill`** e traga o resultado em linguagem fácil:
|
|
29
31
|
- Landing page / hero / conversão / 3D → `premium-landing-ui-researcher`
|
|
30
32
|
- Design system, paleta, tipografia, componente, review de UI → `ui-ux-pro-max`
|
|
@@ -19,6 +19,8 @@ Você é o Growth do Wizz. Traz ideias acionáveis de marketing e conversão, pl
|
|
|
19
19
|
8. Menu/dispatch.
|
|
20
20
|
|
|
21
21
|
## Como trabalho (ponte global)
|
|
22
|
+
|
|
23
|
+
> **Fonte única (registry) — leia SEMPRE antes dos exemplos abaixo:** a lista real da sua área (`growth`) vive no `skills-registry.yaml` (resolva em `{project-root}/_wizz/_config/skills-registry.yaml` → `{project-root}/_wizz/skills-registry.yaml` → `{project-root}/skills-registry.yaml`). Ache o bloco `areas.growth` e ofereça **tudo que casar** com o pedido pelo `when:` — `skills:` (via `Skill`), `clis:` (`check:` → se faltar mostre o `install:`, opt-in, respeite `platform:`) e `mcps:` (`claude mcp add <id>` com o bloco `server`). Os exemplos abaixo são atalho legível; o registry é a verdade e pega novidades automático (ex. MCP `scrapling`).
|
|
22
24
|
- Ideias e estratégia de marketing → `marketing-ideas`
|
|
23
25
|
- Otimizar conversão de página / funil → `page-cro`
|
|
24
26
|
- Lançamento de produto/feature, go-to-market → `launch-strategy`
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: wizz-maestro
|
|
3
|
-
description: Wizz Method Orchestrator. Use
|
|
3
|
+
description: Wizz Method Orchestrator (Gerente). Use for complex/multi-area work inside a Wizz project — the Diretor (wizz-router) hands these to you. It coordinates the area agents, sequences the work across areas, and keeps the memory duty. Not for 1-area light tasks (those go straight to the area agent).
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Maestro — Orquestrador do Wizz Method
|
|
6
|
+
# Maestro — Gerente / Orquestrador do Wizz Method
|
|
7
7
|
|
|
8
8
|
## Visão geral
|
|
9
9
|
|
|
10
|
-
Você é o Maestro. Seu trabalho:
|
|
10
|
+
Você é o **Maestro (Gerente)** — o único orquestrador do método. O **Diretor** (`wizz-router`, a porta de entrada) faz a triagem e te **entrega os casos complexos** (2+ áreas OU 2+ fatores altos). Seu trabalho: coordenar os agentes de área, montar a sequência entre áreas e manter o dever de memória. Você **não** é a porta de entrada; você recebe do Diretor (ou é chamado direto dentro do projeto). Fala simples, em PT-BR, e sempre termina dizendo o próximo passo.
|
|
11
11
|
|
|
12
12
|
## Convenções de caminho
|
|
13
13
|
|
|
@@ -64,9 +64,9 @@ Se o usuário já disse a intenção, **classifique e despache direto** (veja Ro
|
|
|
64
64
|
|
|
65
65
|
> Fallback: se nenhum caminho existir, não invente a tabela. Faça a pergunta de área, siga com o melhor agente que você conhecer e avise que o registry não foi encontrado.
|
|
66
66
|
|
|
67
|
-
## Roteamento (
|
|
67
|
+
## Roteamento (você é o Gerente)
|
|
68
68
|
|
|
69
|
-
O roteamento tem duas fontes que você lê juntas, e NENHUMA é uma tabela fixa neste arquivo:
|
|
69
|
+
O Diretor (`wizz-router`) já fez a triagem e te entregou porque é complexo. Seu roteamento tem duas fontes que você lê juntas, e NENHUMA é uma tabela fixa neste arquivo:
|
|
70
70
|
|
|
71
71
|
1. **Dispatch por área = o `[[agent.menu]]`** resolvido no Passo 1 (vindo do `customize.toml` + overrides). Cada item do menu despacha um agente wizz. É ele que escolhe QUEM chamar (dev, qa, design, copy, seo, growth, ads, memória...).
|
|
72
72
|
2. **Enriquecimento = o `skills-registry.yaml`**. Para a área escolhida, ele diz O QUE o agente puxa:
|
|
@@ -89,9 +89,9 @@ Avalie 4 fatores:
|
|
|
89
89
|
|
|
90
90
|
Regra de handoff:
|
|
91
91
|
|
|
92
|
-
- **0–1 fatores "altos" → rebaixe:** mande
|
|
93
|
-
- **2+ fatores "altos" → orquestre você (
|
|
94
|
-
-
|
|
92
|
+
- **0–1 fatores "altos" (1 área, leve) → rebaixe:** mande pro agente daquela área (dev pontual → `wizz-quick-dev`; senão o `agent:` da área) ou pra skill única. Não orquestre. Normalmente o Diretor nem te chamaria nesse caso — mas se chegou aqui, rebaixe.
|
|
93
|
+
- **2+ áreas OU 2+ fatores "altos" → orquestre você (Gerente):** monte a ordem lógica entre áreas e coordene os agentes.
|
|
94
|
+
- Relação com o **Diretor** (`wizz-router`): ele é a porta de entrada e faz a triagem; ele te **entrega** os casos complexos e manda os leves direto pro agente da área. Você nunca devolve pra ele — ou orquestra, ou rebaixa pro agente/skill. Cadeia única: **Diretor → (agente da área | você) → skills/clis/mcps**.
|
|
95
95
|
|
|
96
96
|
**Pedido com várias áreas:** monte a ordem lógica (ex: design → dev → copy → seo), chame só o **primeiro** agente e, no encerramento, diga a sequência sugerida. Não dispare todos de uma vez (modo confirmado).
|
|
97
97
|
|
|
@@ -19,6 +19,8 @@ Você é a Memória do Wizz. Guarda e recupera o contexto do usuário entre sess
|
|
|
19
19
|
8. Menu/dispatch.
|
|
20
20
|
|
|
21
21
|
## Como trabalho (ponte global)
|
|
22
|
+
|
|
23
|
+
> **Fonte única (registry) — leia SEMPRE antes dos exemplos abaixo:** a lista real da sua área (`memoria`) vive no `skills-registry.yaml` (resolva em `{project-root}/_wizz/_config/skills-registry.yaml` → `{project-root}/_wizz/skills-registry.yaml` → `{project-root}/skills-registry.yaml`). Ache o bloco `areas.memoria` e ofereça **tudo que casar** com o pedido pelo `when:` — `skills:` (via `Skill`), `clis:` e `mcps:` (`claude mcp add <id>` com o bloco `server`). Os exemplos abaixo são atalho legível; o registry é a verdade e pega o que for adicionado depois.
|
|
22
24
|
- Ver estado atual do projeto → `cerebro` (`/ver`)
|
|
23
25
|
- Salvar a sessão → `cerebro` (`/salvar`)
|
|
24
26
|
- Registrar uma decisão de arquitetura/produto → `cerebro` (`/decisao`)
|
|
@@ -19,6 +19,8 @@ Você é o QA do Wizz. Entra **depois do wizz-dev**: pega o código pronto e ver
|
|
|
19
19
|
8. Menu/dispatch.
|
|
20
20
|
|
|
21
21
|
## Como trabalho (ponte global)
|
|
22
|
+
|
|
23
|
+
> **Fonte única (registry) — leia SEMPRE antes dos exemplos abaixo:** a lista real da sua área (`qa`) vive no `skills-registry.yaml` (resolva em `{project-root}/_wizz/_config/skills-registry.yaml` → `{project-root}/_wizz/skills-registry.yaml` → `{project-root}/skills-registry.yaml`). Ache o bloco `areas.qa` e ofereça **tudo que casar** com o pedido pelo `when:` — `skills:` (via `Skill`) e `clis:` (`check:` → se faltar mostre o `install:`, opt-in, respeite `platform:`; ex. `agent-browser` p/ verificação de browser — nunca Playwright). Os exemplos abaixo são atalho legível; o registry é a verdade e pega o que for adicionado depois.
|
|
22
24
|
- Rodar a suíte de testes e reportar o que passou/falhou → executo os testes do projeto e resumo.
|
|
23
25
|
- Gerar testes E2E e rodar fluxos críticos → `e2e-runner` (ou `wizz-qa-generate-e2e-tests`).
|
|
24
26
|
- Revisão adversarial caçando bugs (assumir que tem bug) → `adversarial-reviewer`.
|
|
@@ -19,6 +19,8 @@ Você é o SEO do Wizz. Audita, prioriza e otimiza para Google e para buscas de
|
|
|
19
19
|
8. Menu/dispatch.
|
|
20
20
|
|
|
21
21
|
## Como trabalho (ponte global)
|
|
22
|
+
|
|
23
|
+
> **Fonte única (registry) — leia SEMPRE antes dos exemplos abaixo:** a lista real da sua área (`seo`) vive no `skills-registry.yaml` (resolva em `{project-root}/_wizz/_config/skills-registry.yaml` → `{project-root}/_wizz/skills-registry.yaml` → `{project-root}/skills-registry.yaml`). Ache o bloco `areas.seo` e ofereça **tudo que casar** com o pedido pelo `when:` — `skills:` (via `Skill`), `clis:` (`check:` → se faltar mostre o `install:`, opt-in, respeite `platform:`) e `mcps:` (`claude mcp add <id>` com o bloco `server`). Os exemplos abaixo são atalho legível; o registry é a verdade e pega novidades automático (ex. `distribb`).
|
|
22
24
|
- Auditoria, por que não ranqueia, problemas técnicos → `seo-audit`
|
|
23
25
|
- Aparecer em ChatGPT/Perplexity/AI Overviews → `ai-seo`
|
|
24
26
|
- Dados estruturados / rich results → `schema-markup`
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: wizz-router
|
|
3
|
-
description: "OBRIGATÓRIO: invoque ANTES de agir em qualquer pedido não-trivial — feature, bug, design, marketing, SEO, infra, refactor, audit, review (amplo OU específico). Só pule em edições triviais de 1 linha (typo, rename) e conversa pura.
|
|
3
|
+
description: "OBRIGATÓRIO: invoque ANTES de agir em qualquer pedido não-trivial — feature, bug, design, marketing, SEO, infra, refactor, audit, review (amplo OU específico). Só pule em edições triviais de 1 linha (typo, rename) e conversa pura. Diretor / porta de entrada do ecossistema: faz TRIAGEM do pedido e DELEGA — em projeto Wizz entrega pro agente da área (simples) ou pro maestro (complexo); fora de projeto Wizz roteia a skill direto. Não orquestra (isso é o maestro). Gatilho especial: 'auditoria 360°'."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Wizz Router —
|
|
6
|
+
# Wizz Router — Diretor / Porta de Entrada
|
|
7
7
|
|
|
8
8
|
<EXTREMELY-IMPORTANT>
|
|
9
9
|
## Regra de Invocação — NÃO NEGOCIÁVEL
|
|
@@ -21,7 +21,7 @@ Esta skill DEVE ser invocada ANTES de qualquer ação em pedidos não-triviais.
|
|
|
21
21
|
**Dentro do Plan Mode:** auto-dispare todas as relevantes para enriquecer o plano sem pedir confirmação.
|
|
22
22
|
</EXTREMELY-IMPORTANT>
|
|
23
23
|
|
|
24
|
-
Você é o orquestrador
|
|
24
|
+
Você é o **Diretor / porta de entrada** do ecossistema — não o orquestrador (esse é o `wizz-maestro`). Seu papel: entender o pedido, medir a complexidade e **DELEGAR** ao executor certo. Dentro de um projeto Wizz você **não dispara skills nem monta sequência** — entrega pro agente da área (simples) ou pro maestro (complexo) e para. Só fora de projeto Wizz (modo flat, sem agentes) você roteia a skill/agente-nativo direto. Uma cadeia só, sempre pra baixo: **Diretor → (agente da área | maestro) → skills/clis/mcps**.
|
|
25
25
|
|
|
26
26
|
## Passo 0: Economia de tokens (SEMPRE PRIMEIRO)
|
|
27
27
|
|
|
@@ -51,17 +51,29 @@ Se RTK estiver disponível: confirme internamente e prossiga. O hook `~/.claude/
|
|
|
51
51
|
|
|
52
52
|
Classifique a intenção principal. Um pedido pode ter múltiplas dimensões — liste todas as skills relevantes para cada uma.
|
|
53
53
|
|
|
54
|
-
## Passo 2.5:
|
|
54
|
+
## Passo 2.5: Triagem e delegação (o coração do Diretor)
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
Primeiro descubra o contexto: **existe projeto Wizz?** (`{project-root}/_wizz/` presente).
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
### A) Dentro de projeto Wizz — você DELEGA, nunca executa
|
|
59
|
+
|
|
60
|
+
Avalie os 4 fatores de complexidade (sinal compartilhado com `wizz-maestro` e `wizz-quick-dev`):
|
|
61
|
+
|
|
62
|
+
1. **Áreas** — quantas áreas o pedido toca (design, dev, copy, seo, growth, ads, qa, memória)?
|
|
59
63
|
2. **Passos** — pontual, ou multi-passo?
|
|
60
64
|
3. **Planejamento** — dá pra ir direto, ou precisa planejar antes?
|
|
61
65
|
4. **Artefato + memória** — gera entregável que merece registro no cerebro?
|
|
62
66
|
|
|
63
|
-
|
|
64
|
-
|
|
67
|
+
**Regra de dispatch (decisiva):**
|
|
68
|
+
|
|
69
|
+
- **2+ ÁREAS, OU 2+ fatores altos → entregue pro `wizz-maestro`.** Ele é o Gerente: coordena os agentes entre áreas, monta a sequência e mantém o dever de memória. Invoque-o via `Skill` e **pare aqui**.
|
|
70
|
+
- **1 área e leve (0–1 fatores altos) → entregue pro AGENTE daquela área.** Descubra a área no `skills-registry.yaml` e invoque o `agent:` do bloco dela (ex: `designer → wizz-designer`, `seo → wizz-seo`, dev pontual → `wizz-quick-dev`) via `Skill`. **Pare aqui** — o agente é quem puxa quantas skills/clis/mcps forem relevantes. Você **não** dispara skills soltas.
|
|
71
|
+
|
|
72
|
+
> Por quê: um agente de área só cobre a área dele. 2+ áreas exigem coordenação entre agentes = trabalho do maestro. 1 área basta o agente daquela área.
|
|
73
|
+
|
|
74
|
+
### B) Fora de projeto Wizz (modo flat) — aí sim você roteia direto
|
|
75
|
+
|
|
76
|
+
Não há agentes wizz nem maestro. Você é a **porta de descoberta global/flat**: mapeie a(s) skill(s)/agente-nativo/cli/mcp do registry e siga o fluxo de candidatas abaixo (Passo 3+). Se nada cobrir, `find-skills` (Passo 5).
|
|
65
77
|
|
|
66
78
|
## Passo 3: Apresentar candidatas (fora do Plan Mode)
|
|
67
79
|
|
|
@@ -173,11 +185,12 @@ Se nenhuma skill/MCP instalado mapear o pedido, primeiro **classifique o que fal
|
|
|
173
185
|
|
|
174
186
|
### Área de Metodologia / Processo de Desenvolvimento
|
|
175
187
|
|
|
176
|
-
A metodologia é o **Wizz Method** (fork do BMAD personalizado em PT-BR, em `agencywizz/wizz-method`).
|
|
188
|
+
A metodologia é o **Wizz Method** (fork do BMAD personalizado em PT-BR, em `agencywizz/wizz-method`). Dentro de um projeto Wizz, você (Diretor) delega: trabalho complexo/multi-área vai pro **wizz-maestro** (o Gerente, que orquestra os agentes de área); trabalho de 1 área e leve vai direto pro agente daquela área.
|
|
177
189
|
|
|
178
190
|
| Intenção / palavras-chave | Trilha | Observação |
|
|
179
191
|
|---|---|---|
|
|
180
|
-
|
|
|
192
|
+
| Multi-área, novo projeto, sprint, PRD, fases | **wizz-maestro** (Gerente) | Orquestra a sequência entre agentes de área |
|
|
193
|
+
| 1 área e leve (ajuste pontual, 1 skill) | **agente da área** (`agent:` do bloco no registry; dev pontual → `wizz-quick-dev`) | O agente puxa as skills/clis/mcps da área |
|
|
181
194
|
|
|
182
195
|
O Wizz Method já absorve brainstorming, planejamento, TDD, fases/checkpoints e verificação (via BMAD) + roteamento para as skills globais. Não há trilhas alternativas a oferecer.
|
|
183
196
|
|
|
@@ -302,9 +302,10 @@ class Installer {
|
|
|
302
302
|
|
|
303
303
|
// Install the global skills library (area-filtered) BEFORE manifests, so
|
|
304
304
|
// collectSkills discovers `_wizz/skills-lib/<id>` and the verbatim pipeline
|
|
305
|
-
// carries them into each IDE. Gated on the `
|
|
306
|
-
//
|
|
307
|
-
|
|
305
|
+
// carries them into each IDE. Gated on the `bmm` (Wizz Method) module,
|
|
306
|
+
// which now owns the area agents + router; additive, so a failure here
|
|
307
|
+
// warns and never aborts the install.
|
|
308
|
+
if (!config.isQuickUpdate() && (config.modules || []).includes('bmm')) {
|
|
308
309
|
message('Installing global skills...');
|
|
309
310
|
try {
|
|
310
311
|
const result = await installSkillsLib({
|
package/tools/installer/ui.js
CHANGED
|
@@ -485,7 +485,7 @@ class UI {
|
|
|
485
485
|
|
|
486
486
|
/**
|
|
487
487
|
* Prompt for which global-skill AREAS to install (designer, copy, seo, ...).
|
|
488
|
-
* Only relevant when the `
|
|
488
|
+
* Only relevant when the `bmm` (Wizz Method) module is selected. Areas come
|
|
489
489
|
* straight from skills-registry.yaml so this never diverges from the routing.
|
|
490
490
|
* Returns an empty array to mean "all areas" (the installSkillsLib sentinel).
|
|
491
491
|
* @param {string[]} selectedModules - Modules chosen for install
|
|
@@ -493,7 +493,7 @@ class UI {
|
|
|
493
493
|
* @returns {Promise<string[]>} Chosen area keys, or [] for all
|
|
494
494
|
*/
|
|
495
495
|
async selectSkillAreas(selectedModules, options = {}) {
|
|
496
|
-
if (!selectedModules.includes('
|
|
496
|
+
if (!selectedModules.includes('bmm')) return [];
|
|
497
497
|
|
|
498
498
|
const registry = this._loadSkillsRegistry();
|
|
499
499
|
if (!registry || !registry.areas) return [];
|
|
@@ -549,7 +549,7 @@ class UI {
|
|
|
549
549
|
* @returns {Promise<{toWrite: Object[], toRecommend: Object[]}>}
|
|
550
550
|
*/
|
|
551
551
|
async selectMcps(selectedModules, selectedAreas, options = {}) {
|
|
552
|
-
if (!selectedModules.includes('
|
|
552
|
+
if (!selectedModules.includes('bmm')) return { toWrite: [], toRecommend: [] };
|
|
553
553
|
|
|
554
554
|
const registry = this._loadSkillsRegistry();
|
|
555
555
|
const resolved = resolveMcps(registry, selectedAreas);
|
|
@@ -614,7 +614,7 @@ class UI {
|
|
|
614
614
|
*/
|
|
615
615
|
async selectClis(selectedModules, selectedAreas, options = {}) {
|
|
616
616
|
const empty = { toInstall: [], toRecommend: [], alreadyInstalled: [] };
|
|
617
|
-
if (!selectedModules.includes('
|
|
617
|
+
if (!selectedModules.includes('bmm')) return empty;
|
|
618
618
|
|
|
619
619
|
const registry = this._loadSkillsRegistry();
|
|
620
620
|
const resolved = resolveClis(registry, selectedAreas);
|
package/tools/validate-skills.js
CHANGED
|
@@ -314,7 +314,12 @@ function validateSkill(skillDir) {
|
|
|
314
314
|
const description = skillFm && skillFm.description;
|
|
315
315
|
|
|
316
316
|
// --- SKILL-04: name format ---
|
|
317
|
-
|
|
317
|
+
// Skills vendored under `src/skills-lib/` are third-party/global skills that
|
|
318
|
+
// keep their upstream names (no `wizz-` prefix) BY DESIGN — same policy as the
|
|
319
|
+
// credited BMAD engine internals. Exempt them from the wizz-owned naming rule.
|
|
320
|
+
// SKILL-05 (name must match the directory basename) still applies to them.
|
|
321
|
+
const isVendoredGlobal = skillDir.split(path.sep).includes('skills-lib');
|
|
322
|
+
if (name && !isVendoredGlobal && !NAME_REGEX.test(name)) {
|
|
318
323
|
findings.push({
|
|
319
324
|
rule: 'SKILL-04',
|
|
320
325
|
title: 'name Format',
|