@tavaressan/vetor 0.1.0

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 (78) hide show
  1. package/README.md +42 -0
  2. package/bin/vetor.js +6 -0
  3. package/lib/banner.js +35 -0
  4. package/lib/commands/install.js +71 -0
  5. package/lib/commands/status.js +59 -0
  6. package/lib/commands/uninstall.js +119 -0
  7. package/lib/commands/update.js +63 -0
  8. package/lib/installer/command-exists.js +30 -0
  9. package/lib/installer/cursor-hooks.js +181 -0
  10. package/lib/installer/detector.js +79 -0
  11. package/lib/installer/manifest.js +76 -0
  12. package/lib/installer/prompts.js +97 -0
  13. package/lib/installer/writer.js +382 -0
  14. package/lib/router.js +50 -0
  15. package/package.json +39 -0
  16. package/templates/.gitkeep +0 -0
  17. package/templates/agents/code-review/agent.json +27 -0
  18. package/templates/agents/code-review/codex.toml +37 -0
  19. package/templates/agents/code-review.md +99 -0
  20. package/templates/agents/issue-worker/agent.json +33 -0
  21. package/templates/agents/issue-worker/codex.toml +57 -0
  22. package/templates/agents/issue-worker.md +112 -0
  23. package/templates/hooks/hooks-codex.json +48 -0
  24. package/templates/hooks/hooks.json +62 -0
  25. package/templates/opencode/agent/code-review.md +73 -0
  26. package/templates/opencode/agent/issue-coordinator.md +521 -0
  27. package/templates/opencode/agent/issue-worker.md +64 -0
  28. package/templates/opencode/mcp.jsonc +39 -0
  29. package/templates/opencode/plugin/vetor.ts +207 -0
  30. package/templates/opencode/scripts/agent-registration_test.ts +92 -0
  31. package/templates/opencode/scripts/check-edit.ts +147 -0
  32. package/templates/opencode/scripts/ensure-external-directory-permission.ts +110 -0
  33. package/templates/opencode/scripts/ensure-external-directory-permission_test.ts +142 -0
  34. package/templates/opencode/scripts/lib/guard.ts +45 -0
  35. package/templates/opencode/scripts/lib/model-health.ts +133 -0
  36. package/templates/opencode/scripts/lib/model-health_test.ts +181 -0
  37. package/templates/opencode/scripts/lib/project.ts +240 -0
  38. package/templates/opencode/scripts/lib/project_test.ts +45 -0
  39. package/templates/opencode/scripts/lib/status.ts +69 -0
  40. package/templates/opencode/scripts/lib/worktree.ts +41 -0
  41. package/templates/opencode/scripts/model-health.ts +50 -0
  42. package/templates/opencode/scripts/model-health_test.ts +80 -0
  43. package/templates/opencode/scripts/resolve-model.ts +112 -0
  44. package/templates/opencode/scripts/resolve-model_test.ts +185 -0
  45. package/templates/opencode/scripts/safety-check.ts +203 -0
  46. package/templates/opencode/scripts/vetor-checks.sh +217 -0
  47. package/templates/opencode/scripts/vetor-status.sh +99 -0
  48. package/templates/skills/architecture-review/SKILL.md +187 -0
  49. package/templates/skills/backlog-ideator/SKILL.md +277 -0
  50. package/templates/skills/design/SKILL.md +468 -0
  51. package/templates/skills/design/examples/design-contract-example.md +46 -0
  52. package/templates/skills/design/examples/prototype-handoff-example.md +142 -0
  53. package/templates/skills/fix-loop-agent/SKILL.md +255 -0
  54. package/templates/skills/guardian/SKILL.md +343 -0
  55. package/templates/skills/issue-coordinator/SKILL.md +596 -0
  56. package/templates/skills/retro/SKILL.md +156 -0
  57. package/templates/skills/shared/references/agent-status.template.md +68 -0
  58. package/templates/skills/shared/references/codebase-design-vocabulary.md +54 -0
  59. package/templates/skills/shared/references/conflict-resolution.md +94 -0
  60. package/templates/skills/shared/references/delegate-to-runtime.md +239 -0
  61. package/templates/skills/shared/references/design-vocabulary.md +508 -0
  62. package/templates/skills/shared/references/evidence-state.md +365 -0
  63. package/templates/skills/shared/references/frontend-design-enforcement.md +33 -0
  64. package/templates/skills/shared/references/grilling-conventions.md +64 -0
  65. package/templates/skills/shared/references/knowledge-provider-contract.md +150 -0
  66. package/templates/skills/shared/references/mcp-availability.md +104 -0
  67. package/templates/skills/shared/references/module-test-map.template.md +72 -0
  68. package/templates/skills/shared/references/planning-conventions.md +97 -0
  69. package/templates/skills/shared/references/project-conventions.md +63 -0
  70. package/templates/skills/shared/references/tdd-conventions.md +81 -0
  71. package/templates/skills/shared/references/touched-files-cache.md +30 -0
  72. package/templates/skills/spec/SKILL.md +524 -0
  73. package/templates/skills/spec-validate/SKILL.md +195 -0
  74. package/templates/skills/spec-validate/references/traceability.md +169 -0
  75. package/templates/skills/stack-practices/SKILL.md +151 -0
  76. package/templates/skills/vetor/SKILL.md +174 -0
  77. package/templates/skills/worktree-create/SKILL.md +142 -0
  78. package/templates/skills/worktree-ship/SKILL.md +394 -0
@@ -0,0 +1,174 @@
1
+ ---
2
+ name: vetor
3
+ description: Porta de entrada do plugin. Inicializa e configura o ambiente do Vetor no projeto-alvo (mapeamento de testes e arquivos de configuração).
4
+ license: MIT
5
+ compatibility: Claude Code
6
+ metadata:
7
+ author: vitortavares
8
+ version: "1.0.0"
9
+ ---
10
+
11
+ Você é a skill de inicialização e configuração do Vetor. Sua missão é preparar o repositório-alvo para o uso do plugin, criando os diretórios e arquivos de configuração necessários caso não existam.
12
+
13
+ ---
14
+
15
+ ## Sintaxe
16
+
17
+ ```
18
+ /vetor [--force]
19
+ ```
20
+
21
+ - `--force`: opcional — força a sobrescrita do mapeamento de testes (`module-test-map.md`), do arquivo de
22
+ configuração (`config.json`) e das rules geradas (`.claude/rules/vetor/`) mesmo que já existam.
23
+
24
+ ---
25
+
26
+ ## Referências
27
+
28
+ > Paths relativos abaixo resolvem a partir do diretório desta própria skill (informado ao carregar,
29
+ > ex. "Base directory for this skill: ..."), não do `cwd` de execução. Em comandos `bash`/`deno run`,
30
+ > prefixe o path absoluto desse diretório ao caminho relativo antes de executar — defina uma vez:
31
+ > ```bash
32
+ > SKILL_DIR="<path absoluto informado como 'Base directory for this skill' no carregamento>"
33
+ > ```
34
+ > e use `"$SKILL_DIR/../../scripts/..."` em todo comando abaixo, nunca o path relativo isolado.
35
+
36
+ - `../shared/references/mcp-availability.md` — se, durante o setup, for
37
+ preciso explicar ou depurar comportamento do próprio Claude Code (hooks, slash commands,
38
+ configuração de MCP, permissões, SDK de agentes), o MCP `claude-code-docs` é **obrigatório quando
39
+ disponível** (ver "Documentação do próprio Claude Code (`claude-code-docs`)").
40
+
41
+ ---
42
+
43
+ ## Comportamento
44
+
45
+ ### 0 — Verificar pré-requisitos
46
+
47
+ O Vetor executa seus scripts com Deno. Confirme que ele está disponível:
48
+
49
+ ```bash
50
+ deno --version
51
+ ```
52
+
53
+ Se o comando falhar, **pare** e instrua a instalação — sem Deno, o hook de segurança e a preparação
54
+ de dependências dos worktrees não funcionam:
55
+ - macOS/Linux: `curl -fsSL https://deno.land/install.sh | sh`
56
+ - Windows: `winget install DenoLand.Deno`
57
+
58
+ ### 1 — Garantir estrutura de diretórios
59
+
60
+ Crie os diretórios do Vetor no projeto-alvo e garanta que os status files dos workers
61
+ (escritos em `.claude/vetor/status/` — ver
62
+ `../shared/references/agent-status.template.md`) nunca sejam commitados:
63
+
64
+ ```bash
65
+ mkdir -p .claude/vetor/status
66
+ grep -qxF '.claude/vetor/status/' .gitignore 2>/dev/null || echo '.claude/vetor/status/' >> .gitignore
67
+ ```
68
+
69
+ A entrada no `.gitignore` é idempotente — este passo substitui qualquer ajuste de gitignore por
70
+ worker.
71
+
72
+ ### 2 — Detectar o projeto (`module-test-map.md` + `config.json` + rules)
73
+
74
+ Um único script detecta o runtime, gera o mapeamento de testes, persiste a configuração e escreve as
75
+ rules de convenção do projeto:
76
+
77
+ ```bash
78
+ deno run -A "$SKILL_DIR/../../scripts/detect-project.ts" [--force]
79
+ ```
80
+
81
+ Repasse o `--force` recebido nos args. A guarda é **por arquivo**: sem `--force`, cada arquivo que já
82
+ existe é preservado (o JSON de saída informa o que foi criado e o que foi pulado).
83
+
84
+ O script grava:
85
+ - `.claude/vetor/module-test-map.md` — comandos de teste por módulo;
86
+ - `.claude/vetor/config.json` — `runtime`, `packageManager` e `testCommand` detectados, preservando
87
+ o `maxConcurrentWorkers` (default 5), o bloco `knowledge` (`enabled`/`provider`) e o bloco opcional
88
+ `delegation` (`preferredRuntime` — ver `delegate-to-runtime.md`), se já existirem. O
89
+ `prepare-worktree.ts` lê isso para saber como preparar cada worktree;
90
+ - `.claude/rules/vetor/<runtime>.md` — convenções do projeto (comando de teste, formatador, lint,
91
+ estilo de import), com frontmatter `paths` para entrarem em contexto **apenas** quando o agente lê
92
+ um arquivo daquele tipo. Só há rules para projetos Deno e Node; nos demais runtimes o script não
93
+ gera nenhuma.
94
+
95
+ Cada linha de uma rule corresponde a um fato lido do repositório (`deno.json`, `package.json`,
96
+ arquivos de config). O que não foi detectado não vira regra.
97
+
98
+ Se o runtime sair como `unknown`, avise o usuário de que o `module-test-map.md` precisa de ajuste
99
+ manual — as skills de teste dependem dele.
100
+
101
+ O JSON de saída inclui um campo `knowledge` (`{"status": ..., "label": ...}`) com o estado do
102
+ **Knowledge Provider** — ver `../shared/references/knowledge-provider-contract.md`.
103
+ Ausência do bloco `knowledge` em `config.json` (ou de `config.json` inteiro) nunca é erro: o default é
104
+ `✓ Filesystem`, sempre funcional sem configuração adicional. Só vira `○ Disabled` com
105
+ `knowledge.enabled: false` explícito, e `✓ Obsidian` com `knowledge.provider: "obsidian"` explícito.
106
+
107
+ Ausência do bloco `delegation` também nunca é erro: sem `delegation.preferredRuntime` configurado,
108
+ a seleção do runtime de delegação (Gemini/OpenCode/Codex) segue puramente por disponibilidade no
109
+ PATH e, se ambígua (2+ candidatos), por anuência explícita — ver algoritmo completo em
110
+ `delegate-to-runtime.md` §2.
111
+
112
+ ### 2.b — Inserir/atualizar resumo de capacidades em CLAUDE.md/AGENTS.md
113
+
114
+ `CLAUDE.md`/`AGENTS.md` são os arquivos que agentes de código carregam automaticamente no início de
115
+ uma sessão — diferente de `.claude/rules/vetor/`, que só entra em contexto sob demanda. Um
116
+ desenvolvedor (ou agente) que abre esses arquivos deve ficar sabendo, sem já conhecer o Vetor de
117
+ antemão, que o plugin está instalado e como invocar suas skills/agentes.
118
+
119
+ Para cada um de `CLAUDE.md` e `AGENTS.md` que já exista na raiz do projeto-alvo, rode:
120
+
121
+ ```bash
122
+ deno run -A "$SKILL_DIR/../../scripts/inject-capabilities-doc.ts" <caminho-do-arquivo>
123
+ ```
124
+
125
+ O script acha o bloco delimitado por `<!-- vetor:capabilities:start -->` / `<!-- vetor:capabilities:end -->`
126
+ e o substitui; se o bloco ainda não existir, insere no fim do arquivo; se o arquivo não existir, não
127
+ faz nada — **nunca crie `CLAUDE.md`/`AGENTS.md` do zero**, isso é convenção de onboarding do
128
+ projeto-alvo, não algo que o Vetor deva opinar. Rodar `/vetor` de novo é idempotente: o bloco é
129
+ atualizado no lugar, sem duplicar e sem exigir `--force`.
130
+
131
+ O conteúdo do bloco é fixo e definido em uma única fonte — a constante `CAPABILITIES_BODY` em
132
+ `scripts/inject-capabilities-doc.ts` — para não divergir entre execuções nem exigir que o agente
133
+ redija prosa a cada `/vetor`. É um resumo sucinto (não duplica o conteúdo completo dos `SKILL.md`):
134
+ título curto, lista das skills/agentes com o comando de invocação e, entre parênteses, o nome do
135
+ agente/skill correspondente. Se novas skills forem adicionadas ao plugin, atualize a constante — não
136
+ gere a lista ad hoc na hora de rodar `/vetor`.
137
+
138
+ ### 3 — Exibir Sumário de Configuração e Próximos Passos
139
+
140
+ Após a criação/validação dos arquivos, exiba uma mensagem informativa clara e amigável para o desenvolvedor:
141
+
142
+ ```
143
+ 🚀 Vetor inicializado com sucesso!
144
+
145
+ Runtime detectado: <runtime> (<testCommand>)
146
+
147
+ Knowledge: <label do campo `knowledge` no JSON de saída — ex.: "✓ Filesystem", "✓ Obsidian" ou "○ Disabled">
148
+
149
+ Arquivos configurados:
150
+ - [x] .claude/vetor/module-test-map.md (Mapeamento de testes por módulo)
151
+ - [x] .claude/vetor/config.json (runtime detectado + maxConcurrentWorkers: 5)
152
+ - [x] .claude/vetor/status/ (status files dos workers — gitignorado)
153
+ - [x] .claude/rules/vetor/<runtime>.md (convenções do projeto, carregadas sob demanda)
154
+ - [<x ou ->] CLAUDE.md — bloco de capacidades <inserido | atualizado | não encontrado (arquivo ausente)>
155
+ - [<x ou ->] AGENTS.md — bloco de capacidades <inserido | atualizado | não encontrado (arquivo ausente)>
156
+
157
+ Próximos passos recomendados:
158
+ 1. Abra e revise o arquivo `.claude/vetor/module-test-map.md` para garantir que os comandos de teste headless e os mapeamentos de pasta de seu projeto estejam 100% corretos.
159
+ 2. Revise e **commite** `.claude/rules/vetor/`. Os issue-workers rodam em worktrees, que só contêm arquivos rastreados pelo git — uma rule não commitada não chega até eles.
160
+ 3. (Opcional) Crie a pasta `.claude/vetor/docs/` e adicione guias de arquitetura, padrões do projeto e gaps em markdown. O comando `/vetor:backlog` lerá automaticamente estes arquivos para propor issues altamente contextualizadas.
161
+ 4. (Opcional) Rode `/vetor:stack-practices` para gerar regras de melhores práticas da stack detectada (via Context7).
162
+ ```
163
+
164
+ Se o script pulou algum arquivo por já existir, diga qual — e que só `--force` o sobrescreve. Reporte
165
+ também o resultado do passo 2.b: se o bloco de capacidades foi inserido, atualizado, ou se nenhum
166
+ `CLAUDE.md`/`AGENTS.md` foi encontrado na raiz (nesse caso, nenhuma ação foi tomada).
167
+
168
+ ---
169
+
170
+ ## Restrições
171
+
172
+ - Nunca execute ações destrutivas em arquivos de configuração existentes sem a flag `--force`
173
+ - Nunca altere códigos de negócio ou arquivos fora de `.claude/vetor/` e `.claude/rules/vetor/`
174
+ - Nunca escreva em `.claude/rules/` fora do subdiretório `vetor/` — esse espaço é do usuário
@@ -0,0 +1,142 @@
1
+ ---
2
+ name: worktree-create
3
+ description: Criação headless de worktree — sem prompts interativos, todos os parâmetros via args. Primitivo usado pelo issue-coordinator e disponível como slash command standalone.
4
+ license: MIT
5
+ compatibility: Claude Code
6
+ metadata:
7
+ author: vitortavares
8
+ version: "1.0.0"
9
+ ---
10
+
11
+ Você é o primitivo de criação de worktree do Vetor. Sua única responsabilidade é criar um worktree Git isolado de forma determinística, sem perguntas ao usuário.
12
+
13
+ ---
14
+
15
+ ## Sintaxe
16
+
17
+ ```
18
+ /vetor:worktree-create <type> <slug> [issue#]
19
+ ```
20
+
21
+ - `<type>`: obrigatório — um de `feat`, `fix`, `chore`, `refactor`
22
+ - `<slug>`: obrigatório — kebab-case, máximo 30 caracteres (ex.: `embedding-retry`, `auth-refresh`)
23
+ - `[issue#]`: opcional — número inteiro da issue GitHub
24
+
25
+ ---
26
+
27
+ ## Comportamento
28
+
29
+ ### 1 — Validação de args
30
+
31
+ Verifique os argumentos recebidos usando o script determinístico:
32
+
33
+ ```bash
34
+ scripts/vetor-checks.sh validate-issue-ref "$issue_ref" || exit 1
35
+ ```
36
+
37
+ Valide também:
38
+
39
+ - Se `<type>` não for um dos valores aceitos (`feat`, `fix`, `chore`, `refactor`):
40
+ ```
41
+ ERRO: tipo inválido "<type>". Valores aceitos: feat, fix, chore, refactor
42
+ ```
43
+ Aborte.
44
+
45
+ - Se `<slug>` não for kebab-case ou tiver mais de 30 caracteres:
46
+ ```
47
+ ERRO: slug inválido "<slug>". Use kebab-case com no máximo 30 caracteres.
48
+ ```
49
+ Aborte.
50
+
51
+ ### 2 — Derivar nomes
52
+
53
+ Detecte a branch default do repositório: leia `../shared/references/project-conventions.md` e resolva `$DEFAULT_BRANCH` conforme descrito lá (não assuma `master`).
54
+
55
+ - **Branch:** `<type>/<issue#>-<slug>` se issue fornecida; `<type>/<slug>` caso contrário
56
+ - **Path:** `.claude/worktrees/<slug>`
57
+
58
+ ### 3 — Verificar conflitos
59
+
60
+ Antes de criar, verifique se a branch ou o worktree já existem:
61
+
62
+ ```bash
63
+ git branch --list "<branch>"
64
+ git worktree list | grep "<slug>"
65
+ ```
66
+
67
+ Se qualquer um já existir:
68
+ ```
69
+ ERRO: branch "<branch>" ou worktree ".claude/worktrees/<slug>" já existe.
70
+ Use outro slug ou remova o worktree existente com:
71
+ git worktree remove .claude/worktrees/<slug>
72
+ git branch -d <branch>
73
+ ```
74
+ **Aborte.** Nunca entre silenciosamente em um worktree existente.
75
+
76
+ ### 4 — Criar worktree
77
+
78
+ Execute em sequência:
79
+
80
+ ```bash
81
+ git pull origin "$DEFAULT_BRANCH"
82
+
83
+ git worktree add -b <branch> .claude/worktrees/<slug> "$DEFAULT_BRANCH"
84
+ ```
85
+
86
+ Se `git pull` falhar (ex.: rede indisponível), continue com a branch default local e avise:
87
+ ```
88
+ AVISO: git pull falhou — criando worktree a partir da <default-branch> local.
89
+ ```
90
+
91
+ Se `git worktree add` falhar, reporte o erro e aborte.
92
+
93
+ ### 4.b — Preparar dependências
94
+
95
+ Delegue ao script determinístico — ele detecta o runtime e faz o que couber (Deno puro é no-op,
96
+ pois o cache `$DENO_DIR` já é global; Node ganha um link para o `node_modules` da raiz):
97
+
98
+ > O path relativo abaixo resolve a partir do diretório desta própria skill (informado ao carregar,
99
+ > ex. "Base directory for this skill: ..."), não do `cwd` de execução — defina uma vez:
100
+ > ```bash
101
+ > SKILL_DIR="<path absoluto informado como 'Base directory for this skill' no carregamento>"
102
+ > ```
103
+ > e use `"$SKILL_DIR/../../scripts/..."` em todo comando abaixo, nunca o path relativo isolado.
104
+
105
+ ```bash
106
+ deno run -A "$SKILL_DIR/../../scripts/prepare-worktree.ts" --path .claude/worktrees/<slug>
107
+ ```
108
+
109
+ O script é tolerante a falhas: avisa em stderr e sai com 0 mesmo se a preparação falhar. Prossiga
110
+ normalmente — o worker instala o que faltar.
111
+
112
+ > No fluxo do `issue-coordinator`, o worktree é criado pelo harness (`isolation: "worktree"`) e a
113
+ > preparação roda sozinha via hook `WorktreeCreate`. Esta chamada só é necessária aqui, no uso
114
+ > standalone do skill.
115
+
116
+ ### 5 — Entrar no worktree
117
+
118
+ Use a ferramenta `EnterWorktree` com o path `.claude/worktrees/<slug>` para mudar o contexto de trabalho.
119
+
120
+ ### 6 — Saída
121
+
122
+ Após criar e entrar no worktree com sucesso, imprima:
123
+
124
+ ```json
125
+ {"branch": "<branch>", "path": ".claude/worktrees/<slug>", "issue": <N|null>}
126
+ ```
127
+
128
+ E informe:
129
+ ```
130
+ Worktree criado e ativado.
131
+ Branch: <branch>
132
+ Path: .claude/worktrees/<slug>
133
+ ```
134
+
135
+ ---
136
+
137
+ ## Restrições
138
+
139
+ - Nunca faça perguntas ao usuário — todos os parâmetros vêm dos args
140
+ - Nunca entre em um worktree existente — sempre aborte com erro se houver conflito
141
+ - Nunca faça push ou crie PR — isso é responsabilidade do `worktree-ship`
142
+ - Se invocado como primitivo por outro skill (ex.: `issue-coordinator`), o `EnterWorktree` afeta apenas a sessão local do invocador