@promovaweb/specsfy 0.7.0 → 0.8.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.
- package/CHANGELOG.md +33 -0
- package/README.md +51 -21
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +155 -3
- package/dist/cli.js.map +1 -1
- package/dist/clickupfy.d.ts +8 -0
- package/dist/clickupfy.d.ts.map +1 -0
- package/dist/clickupfy.js +20 -0
- package/dist/clickupfy.js.map +1 -0
- package/dist/installer.d.ts +2 -2
- package/dist/installer.d.ts.map +1 -1
- package/dist/installer.js +16 -42
- package/dist/installer.js.map +1 -1
- package/dist/lifecycle.d.ts +40 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/lifecycle.js +254 -0
- package/dist/lifecycle.js.map +1 -0
- package/dist/milestones.d.ts +31 -0
- package/dist/milestones.d.ts.map +1 -0
- package/dist/milestones.js +148 -0
- package/dist/milestones.js.map +1 -0
- package/dist/prerequisites.d.ts +28 -0
- package/dist/prerequisites.d.ts.map +1 -0
- package/dist/prerequisites.js +134 -0
- package/dist/prerequisites.js.map +1 -0
- package/dist/progress.d.ts +2 -0
- package/dist/progress.d.ts.map +1 -1
- package/dist/progress.js +25 -28
- package/dist/progress.js.map +1 -1
- package/dist/tui.d.ts +24 -0
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +155 -72
- package/dist/tui.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +6 -5
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,39 @@ Todas as mudanças relevantes do Specsfy CLI são registradas neste arquivo.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.8.1] - 2026-08-13
|
|
8
|
+
|
|
9
|
+
- Inclui o pacote oficial `skills` como dependência do CLI e o localiza mesmo
|
|
10
|
+
quando um launcher inicia o Specsfy com um `PATH` reduzido.
|
|
11
|
+
- Alinha o requisito mínimo ao Node.js 22.20 exigido pelo materializador.
|
|
12
|
+
- Adiciona `specsfy setup` como alias de `specsfy install`, com o mesmo
|
|
13
|
+
diagnóstico de Node.js, Git, projeto e materializador de skills.
|
|
14
|
+
- Adiciona `specsfy doctor` e executa o mesmo diagnóstico antes do setup para
|
|
15
|
+
conferir Node.js, Git, npm, projeto e disponibilidade do `skills` ou `npx`.
|
|
16
|
+
- Adiciona `specsfy update` para atualizar todas as skills Specsfy instaladas e
|
|
17
|
+
preserva `specsfy skills update` como comando compatível.
|
|
18
|
+
- Adiciona `specsfy upgrade` para consultar uma versão estável mais recente e
|
|
19
|
+
atualizar o próprio CLI pelo pacote oficial do npm sem fazer downgrade.
|
|
20
|
+
- Documenta separadamente instalação, atualização das skills e atualização do
|
|
21
|
+
CLI nos guias, na referência de comandos, no ebook e no site.
|
|
22
|
+
|
|
23
|
+
## [0.8.0] - 2026-08-12
|
|
24
|
+
|
|
25
|
+
- Adiciona os comandos `transition`, `migrate` e `effort` para manter pasta,
|
|
26
|
+
status e estimativa das specs pela mesma interface, com saída JSON e
|
|
27
|
+
integração opcional com o ClickUpfy.
|
|
28
|
+
- Adiciona `milestones sync` para projetar o progresso dos milestones em
|
|
29
|
+
`specs.md` e `specs/milestones/`, preservando o conteúdo escrito pelo
|
|
30
|
+
usuário.
|
|
31
|
+
- Passa a ler o ciclo de vida em `specs/<estado>/`, mantém compatibilidade com
|
|
32
|
+
o layout anterior e inclui Effort e perfil de execução no progresso.
|
|
33
|
+
- Amplia o bootstrap com as skills de entrevista e governança de milestones e
|
|
34
|
+
mantém a instalação protegida por fingerprints.
|
|
35
|
+
- Reorganiza a paleta escura da TUI com cores semânticas e contraste verificado
|
|
36
|
+
para texto, foco, seleção, bordas, campos, botões e barras de rolagem.
|
|
37
|
+
- Atualiza capturas, documentação de usuário e desenvolvimento, referência de
|
|
38
|
+
comandos, ebook e publicação dos guias no site da Promovaweb.
|
|
39
|
+
|
|
7
40
|
## [0.7.0] - 2026-07-30
|
|
8
41
|
|
|
9
42
|
- Migra o CLI e a TUI de Python para Node.js 22, com instalação global por
|
package/README.md
CHANGED
|
@@ -3,8 +3,12 @@
|
|
|
3
3
|
<!-- markdownlint-disable MD033 -->
|
|
4
4
|
<p align="center">
|
|
5
5
|
<picture>
|
|
6
|
-
<source srcset="
|
|
7
|
-
<img
|
|
6
|
+
<source srcset="https://promovaweb.com/opensource/specsfy/icon.svg" type="image/svg+xml">
|
|
7
|
+
<img
|
|
8
|
+
src="https://promovaweb.com/opensource/specsfy/icon.png"
|
|
9
|
+
alt="Logo do Specsfy"
|
|
10
|
+
width="128"
|
|
11
|
+
>
|
|
8
12
|
</picture>
|
|
9
13
|
</p>
|
|
10
14
|
<!-- markdownlint-enable MD033 -->
|
|
@@ -14,10 +18,8 @@ tecnologias e acompanhar em tempo real o progresso das specs de um projeto.
|
|
|
14
18
|
|
|
15
19
|
## Pré-requisitos
|
|
16
20
|
|
|
17
|
-
- Node.js 22.
|
|
18
|
-
-
|
|
19
|
-
[`vercel-labs/skills`](https://github.com/vercel-labs/skills), ou `npx`
|
|
20
|
-
disponível para executá-lo sob demanda.
|
|
21
|
+
- Node.js 22.20 ou superior, com o npm disponível.
|
|
22
|
+
- Git para obter o framework e acesso de escrita ao projeto consumidor.
|
|
21
23
|
- acesso autenticado ao repositório privado: execute `gh auth login` no uso
|
|
22
24
|
interativo ou defina `GH_TOKEN`/`GITHUB_TOKEN` na automação.
|
|
23
25
|
|
|
@@ -39,9 +41,15 @@ O npm instala o pacote publicado e disponibiliza o comando `specsfy`. Para
|
|
|
39
41
|
atualizar a instalação global:
|
|
40
42
|
|
|
41
43
|
```bash
|
|
42
|
-
|
|
44
|
+
specsfy upgrade
|
|
43
45
|
```
|
|
44
46
|
|
|
47
|
+
A instalação pelo npm inclui o `skills`, do projeto
|
|
48
|
+
[`vercel-labs/skills`](https://github.com/vercel-labs/skills). O Specsfy também
|
|
49
|
+
aceita uma instalação global, `SPECSFY_SKILLS_CLI` ou `npx` como alternativas.
|
|
50
|
+
O executável avulso de `get.specsfy.dev` não carrega pacotes externos; nesse
|
|
51
|
+
caso, mantenha `skills` ou `npx` disponível no `PATH`.
|
|
52
|
+
|
|
45
53
|
O catálogo e a verificação de versões usam a API do GitHub. O CLI procura,
|
|
46
54
|
nesta ordem, `GH_TOKEN`, `GITHUB_TOKEN` e a sessão retornada por
|
|
47
55
|
`gh auth token`. As credenciais não são gravadas pelo Specsfy.
|
|
@@ -49,13 +57,15 @@ nesta ordem, `GH_TOKEN`, `GITHUB_TOKEN` e a sessão retornada por
|
|
|
49
57
|
Para instalar uma versão específica, informe a versão no próprio pacote:
|
|
50
58
|
|
|
51
59
|
```bash
|
|
52
|
-
npm install --global @promovaweb/specsfy@0.
|
|
60
|
+
npm install --global @promovaweb/specsfy@0.8.1
|
|
53
61
|
```
|
|
54
62
|
|
|
55
63
|
## Comandos
|
|
56
64
|
|
|
57
65
|
```bash
|
|
58
66
|
specsfy
|
|
67
|
+
specsfy doctor --project .
|
|
68
|
+
specsfy setup --project .
|
|
59
69
|
specsfy install --project .
|
|
60
70
|
specsfy install --project . --detected
|
|
61
71
|
specsfy install --project . \
|
|
@@ -65,10 +75,16 @@ specsfy skills list
|
|
|
65
75
|
specsfy skills detect --project .
|
|
66
76
|
specsfy skills add specsfy-specialist-laravel --project .
|
|
67
77
|
specsfy skills remove specsfy-specialist-laravel --project .
|
|
68
|
-
specsfy
|
|
78
|
+
specsfy update --project .
|
|
79
|
+
specsfy upgrade
|
|
80
|
+
specsfy transition 0001-recuperar-senha defined --project .
|
|
81
|
+
specsfy migrate --project .
|
|
82
|
+
specsfy effort 0001-recuperar-senha 7 \
|
|
83
|
+
--reason "Inclui migração e integração externa." --project .
|
|
69
84
|
specsfy progress --project .
|
|
70
85
|
specsfy progress --project . --json
|
|
71
86
|
specsfy progress --project . --watch
|
|
87
|
+
specsfy milestones sync --project .
|
|
72
88
|
specsfy test --project .
|
|
73
89
|
specsfy config show --project .
|
|
74
90
|
specsfy config set --project . --watch-interval 0.5
|
|
@@ -97,18 +113,23 @@ possui seis abas:
|
|
|
97
113
|
por um painel de detalhes e resumo das alterações pendentes.
|
|
98
114
|
- **Sobre**: versão e finalidade do CLI.
|
|
99
115
|
|
|
116
|
+
A interface usa a paleta escura oficial do Specsfy. O turquesa identifica foco
|
|
117
|
+
e abas ativas, o violeta marca seleções e o petróleo diferencia superfícies e
|
|
118
|
+
ações primárias. Os estados continuam nomeados no próprio controle para que a
|
|
119
|
+
cor não seja o único sinal disponível.
|
|
120
|
+
|
|
100
121
|
## Capturas de tela
|
|
101
122
|
|
|
102
|
-

|
|
103
124
|
|
|
104
|
-

|
|
105
126
|
|
|
106
|
-

|
|
107
128
|
|
|
108
|
-

|
|
109
130
|
|
|
110
131
|
Alterações em `specs/inbox/*.md`, `specs/backlog/*.md`,
|
|
111
|
-
`specs
|
|
132
|
+
`specs/<estado>/*/spec.md` e no `skills-lock.json` são detectadas
|
|
112
133
|
automaticamente.
|
|
113
134
|
|
|
114
135
|
Em projetos Laravel com Pest, `specsfy test --project .` detecta `artisan` e
|
|
@@ -118,8 +139,9 @@ mostra status, runner, comando, duração e resumo em uma subaba. A outra exibe
|
|
|
118
139
|
cada teste e falha. Relatórios Pest estruturados são convertidos em linhas
|
|
119
140
|
legíveis com arquivo, linha e mensagem.
|
|
120
141
|
|
|
121
|
-
O bootstrap instala as
|
|
122
|
-
`specsfy-update-spec` para pedidos surgidos depois da definição,
|
|
142
|
+
O bootstrap instala as treze skills base, incluindo `specsfy-01-inbox` e
|
|
143
|
+
`specsfy-update-spec` para pedidos surgidos depois da definição, as skills de
|
|
144
|
+
conversa e as de milestones,
|
|
123
145
|
`specsfy-setup`,
|
|
124
146
|
`specsfy-documentator` e as três skills `specsfy-aux-*`, publica as regras em
|
|
125
147
|
`.specsfy/Spec.md`, os templates `Inbox.md`, `Backlog.md`, `Spec.md`, `Tasks.md`,
|
|
@@ -165,11 +187,16 @@ descarte alterações locais.
|
|
|
165
187
|
|
|
166
188
|
Na aba Skills, o botão `Atualizar ^R` baixa as origens atuais e atualiza de uma
|
|
167
189
|
vez todas as skills Specsfy instaladas. O comando equivalente é
|
|
168
|
-
`specsfy
|
|
169
|
-
|
|
190
|
+
`specsfy update --project .`. O nome anterior
|
|
191
|
+
`specsfy skills update --project .` permanece compatível. Customizações locais
|
|
192
|
+
continuam protegidas e só podem ser substituídas explicitamente com `--force`.
|
|
170
193
|
|
|
171
194
|
## Atualização do CLI gerenciada pelo npm
|
|
172
195
|
|
|
196
|
+
`specsfy update` atualiza as skills do projeto. `specsfy upgrade` consulta a
|
|
197
|
+
versão estável mais recente e atualiza o próprio pacote global. O segundo
|
|
198
|
+
comando só chama o npm quando encontra uma versão superior à atual.
|
|
199
|
+
|
|
173
200
|
Ao abrir `specsfy` ou `specsfy tui` em um terminal interativo, o CLI consulta
|
|
174
201
|
as tags semânticas estáveis do monorepo. A consulta é limitada pelo cache
|
|
175
202
|
global `~/.specsfy/cli.json`, cujo intervalo padrão é de 24 horas. Falha de rede
|
|
@@ -194,7 +221,7 @@ reconstrói os artefatos versionados, cria a tag anotada `v<versão>` no mesmo
|
|
|
194
221
|
commit e usa exatamente a seção promovida como corpo do GitHub Release. O CI
|
|
195
222
|
valida o build e a correspondência da tag.
|
|
196
223
|
|
|
197
|
-
Novas specs usam `specs/
|
|
224
|
+
Novas specs usam `specs/draft/<NNNN>-<slug>/spec.md`. Capturas imediatas ficam
|
|
198
225
|
em `specs/inbox/<data-hora>-<slug>.md` e itens refináveis em
|
|
199
226
|
`specs/backlog/<NNNN>-<slug>.md`. O dashboard mantém leitura do layout
|
|
200
227
|
legado. A skill de especificação renderiza cada arquivo novo a partir do
|
|
@@ -216,7 +243,7 @@ falha quando o artefato não corresponde ao estado atual.
|
|
|
216
243
|
O pacote publicado no npm usa `@promovaweb/specsfy`. A tag estável dispara o
|
|
217
244
|
job de publicação depois que tipos, testes, build, instalação local e
|
|
218
245
|
executável versionado passam no CI. O job inclui proveniência quando o
|
|
219
|
-
repositório estiver público
|
|
246
|
+
repositório estiver público. Enquanto ele permanecer privado, publica com o
|
|
220
247
|
token do registro e sem essa atestação.
|
|
221
248
|
|
|
222
249
|
## Atalhos da TUI
|
|
@@ -245,4 +272,7 @@ com um clique e atualiza o dashboard depois da confirmação. `Esc` retorna, e o
|
|
|
245
272
|
mouse opera abas, linhas e botões. Nada é instalado ou removido antes de
|
|
246
273
|
`Aplicar`.
|
|
247
274
|
|
|
248
|
-
A documentação completa está
|
|
275
|
+
A documentação completa está no
|
|
276
|
+
[portal público do Specsfy](https://promovaweb.com/docs/specsfy/). A
|
|
277
|
+
[referência dos comandos](https://promovaweb.com/docs/specsfy/referencia-cli/)
|
|
278
|
+
detalha parâmetros, saídas, efeitos persistentes e exemplos de automação.
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAA0B,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAA0B,MAAM,WAAW,CAAC;AAqC5D,sDAAsD;AACtD,wBAAgB,YAAY,IAAI,OAAO,CA2StC;AAED,0EAA0E;AAC1E,wBAAsB,MAAM,CAAC,IAAI,WAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAoBjE"}
|
package/dist/cli.js
CHANGED
|
@@ -8,11 +8,15 @@ import { Command, CommanderError, Option } from "commander";
|
|
|
8
8
|
import { createInterface } from "node:readline/promises";
|
|
9
9
|
import { stdin, stdout } from "node:process";
|
|
10
10
|
import { Catalog } from "./catalog.js";
|
|
11
|
+
import { clickUpfyHandoff } from "./clickupfy.js";
|
|
11
12
|
import { loadConfig, updateConfig } from "./config.js";
|
|
12
13
|
import { SkillInstaller } from "./installer.js";
|
|
14
|
+
import { migrateSpecs, SPEC_FOLDERS, transitionSpec, updateSpecEffort, } from "./lifecycle.js";
|
|
15
|
+
import { syncMilestones } from "./milestones.js";
|
|
13
16
|
import { scanSpecs, serializeSpec, specsFingerprint, summarizeSpecs, } from "./progress.js";
|
|
14
17
|
import { runProjectTests } from "./project-testing.js";
|
|
15
|
-
import {
|
|
18
|
+
import { assertPrerequisites, checkPrerequisites, } from "./prerequisites.js";
|
|
19
|
+
import { checkForUpdate, offerStartupUpdate, upgradeWithNpm, } from "./updater.js";
|
|
16
20
|
import { VERSION } from "./version.js";
|
|
17
21
|
/** Constrói o parser público sem executar efeitos. */
|
|
18
22
|
export function buildProgram() {
|
|
@@ -27,6 +31,7 @@ export function buildProgram() {
|
|
|
27
31
|
});
|
|
28
32
|
program
|
|
29
33
|
.command("install")
|
|
34
|
+
.alias("setup")
|
|
30
35
|
.description("instala as skills do framework")
|
|
31
36
|
.addOption(projectOption())
|
|
32
37
|
.option("--force", "substitui arquivos gerenciados alterados")
|
|
@@ -34,6 +39,8 @@ export function buildProgram() {
|
|
|
34
39
|
.option("--specialist <nome>", "especialista explícito; pode ser repetido", collect, [])
|
|
35
40
|
.option("--json", "emite resultado JSON")
|
|
36
41
|
.action(async (options) => {
|
|
42
|
+
const checks = await checkPrerequisites(options.project);
|
|
43
|
+
assertPrerequisites(checks, ["node", "git", "skills", "project"]);
|
|
37
44
|
const installer = await SkillInstaller.create(options.project, options.force);
|
|
38
45
|
const changed = await installer.installBase();
|
|
39
46
|
let specialistNames = [...options.specialist];
|
|
@@ -49,6 +56,43 @@ export function buildProgram() {
|
|
|
49
56
|
}
|
|
50
57
|
printInstallation(changed, Boolean(options.json));
|
|
51
58
|
});
|
|
59
|
+
program
|
|
60
|
+
.command("doctor")
|
|
61
|
+
.description("verifica os pré-requisitos do Specsfy")
|
|
62
|
+
.addOption(projectOption())
|
|
63
|
+
.option("--json", "emite resultado JSON")
|
|
64
|
+
.action(async (options) => {
|
|
65
|
+
const checks = await checkPrerequisites(options.project);
|
|
66
|
+
printPrerequisites(checks, Boolean(options.json));
|
|
67
|
+
if (checks.some(({ ok }) => !ok))
|
|
68
|
+
process.exitCode = 1;
|
|
69
|
+
});
|
|
70
|
+
program
|
|
71
|
+
.command("update")
|
|
72
|
+
.description("atualiza todas as skills Specsfy instaladas")
|
|
73
|
+
.addOption(projectOption())
|
|
74
|
+
.option("--force", "substitui arquivos gerenciados alterados")
|
|
75
|
+
.option("--json", "emite resultado JSON")
|
|
76
|
+
.action((options) => updateSkills(options));
|
|
77
|
+
program
|
|
78
|
+
.command("upgrade")
|
|
79
|
+
.description("atualiza o próprio Specsfy CLI")
|
|
80
|
+
.option("--json", "emite resultado JSON")
|
|
81
|
+
.action(async (options) => {
|
|
82
|
+
const checks = await checkPrerequisites(process.cwd());
|
|
83
|
+
assertPrerequisites(checks, ["node", "npm"]);
|
|
84
|
+
const update = await checkForUpdate(VERSION, { force: true });
|
|
85
|
+
if (!update) {
|
|
86
|
+
printUpgrade({ upgraded: false, current_version: VERSION }, Boolean(options.json));
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
await upgradeWithNpm();
|
|
90
|
+
printUpgrade({
|
|
91
|
+
upgraded: true,
|
|
92
|
+
current_version: VERSION,
|
|
93
|
+
latest_version: update.latest_version,
|
|
94
|
+
}, Boolean(options.json));
|
|
95
|
+
});
|
|
52
96
|
const skills = program.command("skills").description("gerencia especialistas");
|
|
53
97
|
skills
|
|
54
98
|
.command("list")
|
|
@@ -93,9 +137,59 @@ export function buildProgram() {
|
|
|
93
137
|
.description("atualiza todas as skills Specsfy instaladas")
|
|
94
138
|
.addOption(projectOption())
|
|
95
139
|
.option("--force", "substitui arquivos gerenciados alterados")
|
|
140
|
+
.option("--json", "emite resultado JSON")
|
|
141
|
+
.action((options) => updateSkills(options));
|
|
142
|
+
program
|
|
143
|
+
.command("transition")
|
|
144
|
+
.description("move uma spec para o próximo estado")
|
|
145
|
+
.argument("<identificador>", "ID e slug da spec")
|
|
146
|
+
.argument("<status>", "pasta de destino")
|
|
147
|
+
.addOption(projectOption())
|
|
148
|
+
.option("--json", "emite resultado JSON")
|
|
149
|
+
.action(async (identifier, status, options) => {
|
|
150
|
+
if (!SPEC_FOLDERS.includes(status)) {
|
|
151
|
+
throw new Error(`status de pasta inválido: ${status}`);
|
|
152
|
+
}
|
|
153
|
+
const result = await transitionSpec(options.project, identifier, status);
|
|
154
|
+
await syncMilestones(options.project);
|
|
155
|
+
printTransition(result, await clickUpfyHandoff(options.project, result.path, "transition"), Boolean(options.json));
|
|
156
|
+
});
|
|
157
|
+
program
|
|
158
|
+
.command("migrate")
|
|
159
|
+
.description("migra specs do layout anterior para pastas de estado")
|
|
160
|
+
.addOption(projectOption())
|
|
161
|
+
.option("--json", "emite resultado JSON")
|
|
96
162
|
.action(async (options) => {
|
|
97
|
-
const
|
|
98
|
-
|
|
163
|
+
const migrated = await migrateSpecs(options.project);
|
|
164
|
+
if (migrated.length)
|
|
165
|
+
await syncMilestones(options.project);
|
|
166
|
+
if (options.json)
|
|
167
|
+
console.log(JSON.stringify({ migrated }));
|
|
168
|
+
else if (migrated.length) {
|
|
169
|
+
for (const item of migrated) {
|
|
170
|
+
printTransition(item, await clickUpfyHandoff(options.project, item.path, "transition"), false);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
else
|
|
174
|
+
console.log("nenhuma spec legada para migrar");
|
|
175
|
+
});
|
|
176
|
+
program
|
|
177
|
+
.command("effort")
|
|
178
|
+
.description("atualiza o esforço estimado de uma spec")
|
|
179
|
+
.argument("<identificador>", "ID e slug da spec")
|
|
180
|
+
.argument("<pontuacao>", "inteiro de 1 a 10", Number)
|
|
181
|
+
.requiredOption("--reason <texto>", "justificativa da estimativa")
|
|
182
|
+
.addOption(projectOption())
|
|
183
|
+
.option("--json", "emite resultado JSON")
|
|
184
|
+
.action(async (identifier, score, options) => {
|
|
185
|
+
const result = await updateSpecEffort(options.project, identifier, score, options.reason);
|
|
186
|
+
const handoff = await clickUpfyHandoff(options.project, result.path, "effort");
|
|
187
|
+
if (options.json)
|
|
188
|
+
console.log(JSON.stringify({ ...result, clickupfy: handoff }));
|
|
189
|
+
else {
|
|
190
|
+
console.log(`${result.identifier}\tEffort ${result.effort}/10`);
|
|
191
|
+
printClickUpfyHandoff(handoff);
|
|
192
|
+
}
|
|
99
193
|
});
|
|
100
194
|
program
|
|
101
195
|
.command("progress")
|
|
@@ -105,6 +199,26 @@ export function buildProgram() {
|
|
|
105
199
|
.option("--watch", "emite novo resumo quando uma spec muda")
|
|
106
200
|
.option("--interval <segundos>", "intervalo do watch em segundos", Number)
|
|
107
201
|
.action(async (options) => runProgress(options));
|
|
202
|
+
const milestones = program
|
|
203
|
+
.command("milestones")
|
|
204
|
+
.description("mantém os marcos derivados de specs e backlog");
|
|
205
|
+
milestones
|
|
206
|
+
.command("sync")
|
|
207
|
+
.description("atualiza specs.md e o progresso dos milestones")
|
|
208
|
+
.addOption(projectOption())
|
|
209
|
+
.option("--json", "emite resultado JSON")
|
|
210
|
+
.action(async (options) => {
|
|
211
|
+
const result = await syncMilestones(options.project);
|
|
212
|
+
if (options.json)
|
|
213
|
+
console.log(JSON.stringify(result));
|
|
214
|
+
else {
|
|
215
|
+
console.log(`Índice\t${result.index_path}`);
|
|
216
|
+
for (const milestone of result.milestones) {
|
|
217
|
+
console.log(`${milestone.id}\t${milestone.completed_specs}/${milestone.total_specs} specs\t` +
|
|
218
|
+
`${milestone.backlog_items} backlog\t${milestone.percent}%`);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
});
|
|
108
222
|
program
|
|
109
223
|
.command("test")
|
|
110
224
|
.description("executa os testes do projeto")
|
|
@@ -255,4 +369,42 @@ function printInstallation(paths, json) {
|
|
|
255
369
|
console.log("skills já estão atualizadas");
|
|
256
370
|
}
|
|
257
371
|
}
|
|
372
|
+
async function updateSkills(options) {
|
|
373
|
+
const checks = await checkPrerequisites(options.project);
|
|
374
|
+
assertPrerequisites(checks, ["node", "git", "skills", "project"]);
|
|
375
|
+
const installer = await SkillInstaller.create(options.project, options.force);
|
|
376
|
+
printInstallation(await installer.updateAll(), Boolean(options.json));
|
|
377
|
+
}
|
|
378
|
+
function printPrerequisites(checks, json) {
|
|
379
|
+
if (json) {
|
|
380
|
+
console.log(JSON.stringify({ ok: checks.every(({ ok }) => ok), checks }));
|
|
381
|
+
return;
|
|
382
|
+
}
|
|
383
|
+
for (const check of checks) {
|
|
384
|
+
console.log(`${check.ok ? "OK" : "FALHA"}\t${check.name}\t${check.detail}`);
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
function printUpgrade(result, json) {
|
|
388
|
+
if (json)
|
|
389
|
+
console.log(JSON.stringify(result));
|
|
390
|
+
else if (result.upgraded) {
|
|
391
|
+
console.log(`Specsfy CLI atualizado: ${result.current_version} → ${result.latest_version}.`);
|
|
392
|
+
}
|
|
393
|
+
else {
|
|
394
|
+
console.log(`Specsfy CLI já está atualizado em ${result.current_version}.`);
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
function printTransition(transition, handoff, json) {
|
|
398
|
+
if (json)
|
|
399
|
+
console.log(JSON.stringify({ ...transition, clickupfy: handoff }));
|
|
400
|
+
else {
|
|
401
|
+
console.log(`${transition.identifier}\t${transition.from} → ${transition.to}\t${transition.status}`);
|
|
402
|
+
printClickUpfyHandoff(handoff);
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
function printClickUpfyHandoff(handoff) {
|
|
406
|
+
if (handoff.available && handoff.task_id) {
|
|
407
|
+
console.log(`ClickUpfy\tencaminhar ${handoff.action} para a tarefa ${handoff.task_id}`);
|
|
408
|
+
}
|
|
409
|
+
}
|
|
258
410
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface ClickUpfyHandoff {
|
|
2
|
+
available: boolean;
|
|
3
|
+
task_id?: string;
|
|
4
|
+
action?: "transition" | "effort";
|
|
5
|
+
}
|
|
6
|
+
/** Detecta a skill instalada e lê o vínculo de tarefa do metadado da spec. */
|
|
7
|
+
export declare function clickUpfyHandoff(project: string, specPath: string, action: "transition" | "effort"): Promise<ClickUpfyHandoff>;
|
|
8
|
+
//# sourceMappingURL=clickupfy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clickupfy.d.ts","sourceRoot":"","sources":["../src/clickupfy.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,YAAY,GAAG,QAAQ,CAAC;CAClC;AAED,8EAA8E;AAC9E,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,YAAY,GAAG,QAAQ,GAC9B,OAAO,CAAC,gBAAgB,CAAC,CAK3B"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** Integração opcional com ClickUpfy, sem substituir a spec local. */
|
|
2
|
+
import { access, readFile } from "node:fs/promises";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
/** Detecta a skill instalada e lê o vínculo de tarefa do metadado da spec. */
|
|
5
|
+
export async function clickUpfyHandoff(project, specPath, action) {
|
|
6
|
+
const available = await hasClickUpfySkill(project);
|
|
7
|
+
const content = await readFile(specPath, "utf8");
|
|
8
|
+
const task = content.match(/^\|\s*ClickUp Task\s*\|\s*([^|]+?)\s*\|\s*$/imu)?.[1]?.trim();
|
|
9
|
+
return task ? { available, task_id: task, action } : { available };
|
|
10
|
+
}
|
|
11
|
+
async function hasClickUpfySkill(project) {
|
|
12
|
+
try {
|
|
13
|
+
await access(join(project, ".agents", "skills", "clickupfy-executar-tarefa", "SKILL.md"));
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=clickupfy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clickupfy.js","sourceRoot":"","sources":["../src/clickupfy.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAQjC,8EAA8E;AAC9E,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAe,EACf,QAAgB,EAChB,MAA+B;IAE/B,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IAC1F,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;AACrE,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,OAAe;IAC9C,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,2BAA2B,EAAE,UAAU,CAAC,CAAC,CAAC;QAC1F,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
package/dist/installer.d.ts
CHANGED
|
@@ -7,10 +7,10 @@
|
|
|
7
7
|
export declare const MONOREPO_REPOSITORY = "https://github.com/promovaweb/specsfy.git";
|
|
8
8
|
export declare const BASE_DIRECTORY = "skills";
|
|
9
9
|
export declare const SPECIALISTS_DIRECTORY = "specialists";
|
|
10
|
-
export declare const BASE_SKILLS: readonly ["specsfy-01-inbox", "specsfy-02-backlog", "specsfy-03-specify", "specsfy-04-validate", "specsfy-05-tasks", "specsfy-06-tdd-bdd", "specsfy-07-implement", "specsfy-update-spec", "specsfy-progress"];
|
|
10
|
+
export declare const BASE_SKILLS: readonly ["specsfy-01-inbox", "specsfy-02-backlog", "specsfy-03-specify", "specsfy-04-validate", "specsfy-05-tasks", "specsfy-06-tdd-bdd", "specsfy-07-implement", "specsfy-update-spec", "specsfy-progress", "specsfy-interviewer", "specsfy-mvp-milestone-interviewer", "specsfy-roadmap-milestone-interviewer", "specsfy-milestone-governor"];
|
|
11
11
|
export declare const AUXILIARY_SKILLS: readonly ["specsfy-aux-stack", "specsfy-aux-rules", "specsfy-aux-database"];
|
|
12
12
|
export declare const DOCUMENTATION_SKILLS: readonly ["specsfy-documentator"];
|
|
13
|
-
export declare const FRAMEWORK_SKILLS: readonly ["specsfy-setup", "specsfy-aux-stack", "specsfy-aux-rules", "specsfy-aux-database", "specsfy-documentator", "specsfy-01-inbox", "specsfy-02-backlog", "specsfy-03-specify", "specsfy-04-validate", "specsfy-05-tasks", "specsfy-06-tdd-bdd", "specsfy-07-implement", "specsfy-update-spec", "specsfy-progress"];
|
|
13
|
+
export declare const FRAMEWORK_SKILLS: readonly ["specsfy-setup", "specsfy-aux-stack", "specsfy-aux-rules", "specsfy-aux-database", "specsfy-documentator", "specsfy-01-inbox", "specsfy-02-backlog", "specsfy-03-specify", "specsfy-04-validate", "specsfy-05-tasks", "specsfy-06-tdd-bdd", "specsfy-07-implement", "specsfy-update-spec", "specsfy-progress", "specsfy-interviewer", "specsfy-mvp-milestone-interviewer", "specsfy-roadmap-milestone-interviewer", "specsfy-milestone-governor"];
|
|
14
14
|
export declare const RENAMED_BASE_SKILLS: Readonly<Record<string, string>>;
|
|
15
15
|
/** Instalador de um projeto consumidor explicitamente selecionado. */
|
|
16
16
|
export declare class SkillInstaller {
|
package/dist/installer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../src/installer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgCH,eAAO,MAAM,mBAAmB,8CACa,CAAC;AAC9C,eAAO,MAAM,cAAc,WAAW,CAAC;AACvC,eAAO,MAAM,qBAAqB,gBAAgB,CAAC;AACnD,eAAO,MAAM,WAAW,YACtB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,kBAAkB,
|
|
1
|
+
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../src/installer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgCH,eAAO,MAAM,mBAAmB,8CACa,CAAC;AAC9C,eAAO,MAAM,cAAc,WAAW,CAAC;AACvC,eAAO,MAAM,qBAAqB,gBAAgB,CAAC;AACnD,eAAO,MAAM,WAAW,YACtB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,mCAAmC,EACnC,uCAAuC,EACvC,4BAA4B,CACpB,CAAC;AACX,eAAO,MAAM,gBAAgB,YAC3B,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,CACd,CAAC;AACX,eAAO,MAAM,oBAAoB,YAAI,sBAAsB,CAAU,CAAC;AACtE,eAAO,MAAM,gBAAgB,6bAKnB,CAAC;AACX,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAYhE,CAAC;AAmCF,sEAAsE;AACtE,qBAAa,cAAc;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IAExB,OAAO,eAGN;IAED,4EAA4E;IAC5E,OAAa,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,cAAc,CAAC,CAK3E;IAED,qCAAqC;IAC/B,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAErC;IAED,uDAAuD;IACjD,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAW7D;IAED,0EAA0E;IACpE,uBAAuB,CAC3B,QAAQ,EAAE,MAAM,EAChB,KAAK,GAAE,SAAS,MAAM,EAAgB,GACrC,OAAO,CAAC,MAAM,EAAE,CAAC,CASnB;IAED,+DAA+D;IACzD,4BAA4B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAwHtE;IAED,iDAAiD;IAC3C,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAO3D;IAED,uDAAuD;IACjD,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAYnC;IAED,mEAAmE;IAC7D,qBAAqB,CACzB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,UAAU,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC,CAInB;IAED,oEAAoE;IAC9D,mBAAmB,CACvB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC,CA6EnB;IAED,4EAA4E;IACtE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAsD/C;YAEa,yBAAyB;YAuBzB,iBAAiB;YAoBjB,gBAAgB;YAsBhB,QAAQ;YAeR,SAAS;CAMxB;AAwKD,4EAA4E;AAC5E,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAqB/D"}
|
package/dist/installer.js
CHANGED
|
@@ -6,12 +6,13 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { createHash } from "node:crypto";
|
|
8
8
|
import { execFile } from "node:child_process";
|
|
9
|
-
import {
|
|
9
|
+
import { lstat, mkdir, mkdtemp, readFile, readlink, readdir, rm, } from "node:fs/promises";
|
|
10
10
|
import { tmpdir } from "node:os";
|
|
11
11
|
import { basename, join, relative, resolve, sep } from "node:path";
|
|
12
12
|
import { promisify } from "node:util";
|
|
13
13
|
import { isFile, pathExists, readJson, resolvePath, writeTextAtomic, } from "./filesystem.js";
|
|
14
14
|
import { assertConsumerProject, ensureSkillsLock, installedSkillNames, } from "./skill-lock.js";
|
|
15
|
+
import { resolveSkillsCommand } from "./prerequisites.js";
|
|
15
16
|
const execFileAsync = promisify(execFile);
|
|
16
17
|
export const MONOREPO_REPOSITORY = "https://github.com/promovaweb/specsfy.git";
|
|
17
18
|
export const BASE_DIRECTORY = "skills";
|
|
@@ -26,6 +27,10 @@ export const BASE_SKILLS = [
|
|
|
26
27
|
"specsfy-07-implement",
|
|
27
28
|
"specsfy-update-spec",
|
|
28
29
|
"specsfy-progress",
|
|
30
|
+
"specsfy-interviewer",
|
|
31
|
+
"specsfy-mvp-milestone-interviewer",
|
|
32
|
+
"specsfy-roadmap-milestone-interviewer",
|
|
33
|
+
"specsfy-milestone-governor",
|
|
29
34
|
];
|
|
30
35
|
export const AUXILIARY_SKILLS = [
|
|
31
36
|
"specsfy-aux-stack",
|
|
@@ -498,27 +503,12 @@ function appendBlock(content, block) {
|
|
|
498
503
|
function contentDigest(content) {
|
|
499
504
|
return createHash("sha256").update(content).digest("hex");
|
|
500
505
|
}
|
|
501
|
-
async function skillsCommand() {
|
|
502
|
-
const override = process.env.SPECSFY_SKILLS_CLI;
|
|
503
|
-
if (override) {
|
|
504
|
-
const executable = resolvePath(override);
|
|
505
|
-
try {
|
|
506
|
-
await access(executable, 1);
|
|
507
|
-
}
|
|
508
|
-
catch {
|
|
509
|
-
throw new Error(`SPECSFY_SKILLS_CLI não é executável: ${executable}`);
|
|
510
|
-
}
|
|
511
|
-
return [executable];
|
|
512
|
-
}
|
|
513
|
-
if (await executableExists("skills"))
|
|
514
|
-
return ["skills"];
|
|
515
|
-
if (await executableExists("npx"))
|
|
516
|
-
return ["npx", "--yes", "skills"];
|
|
517
|
-
throw new Error("skills CLI não encontrado; instale https://github.com/vercel-labs/skills " +
|
|
518
|
-
"ou disponibilize npx no PATH");
|
|
519
|
-
}
|
|
520
506
|
async function installWithSkillsCli(source, names, project) {
|
|
521
|
-
const command = await
|
|
507
|
+
const command = await resolveSkillsCommand();
|
|
508
|
+
if (!command) {
|
|
509
|
+
throw new Error("skills CLI não encontrado. Reinstale @promovaweb/specsfy pelo npm para " +
|
|
510
|
+
"receber a dependência incluída ou disponibilize skills ou npx no PATH");
|
|
511
|
+
}
|
|
522
512
|
const arguments_ = [...command.slice(1), "add", resolve(source)];
|
|
523
513
|
for (const name of names)
|
|
524
514
|
arguments_.push("--skill", name);
|
|
@@ -526,7 +516,11 @@ async function installWithSkillsCli(source, names, project) {
|
|
|
526
516
|
await runSkillsCommand(command[0], arguments_, project, "instalar", names);
|
|
527
517
|
}
|
|
528
518
|
async function removeWithSkillsCli(names, project) {
|
|
529
|
-
const command = await
|
|
519
|
+
const command = await resolveSkillsCommand();
|
|
520
|
+
if (!command) {
|
|
521
|
+
throw new Error("skills CLI não encontrado. Reinstale @promovaweb/specsfy pelo npm para " +
|
|
522
|
+
"receber a dependência incluída ou disponibilize skills ou npx no PATH");
|
|
523
|
+
}
|
|
530
524
|
await runSkillsCommand(command[0], [...command.slice(1), "remove", ...names, "--agent", "universal", "-y"], project, "remover", names);
|
|
531
525
|
}
|
|
532
526
|
async function runSkillsCommand(executable, arguments_, project, action, names) {
|
|
@@ -543,26 +537,6 @@ async function runSkillsCommand(executable, arguments_, project, action, names)
|
|
|
543
537
|
(detail || `exit ${String(value.code ?? 1)}`));
|
|
544
538
|
}
|
|
545
539
|
}
|
|
546
|
-
async function executableExists(command) {
|
|
547
|
-
const directories = (process.env.PATH ?? "").split(sep);
|
|
548
|
-
const extensions = process.platform === "win32"
|
|
549
|
-
? ["", ...(process.env.PATHEXT ?? ".EXE;.CMD;.BAT").split(";")]
|
|
550
|
-
: [""];
|
|
551
|
-
for (const directory of directories) {
|
|
552
|
-
if (!directory)
|
|
553
|
-
continue;
|
|
554
|
-
for (const extension of extensions) {
|
|
555
|
-
try {
|
|
556
|
-
await access(join(directory, `${command}${extension}`), 1);
|
|
557
|
-
return true;
|
|
558
|
-
}
|
|
559
|
-
catch {
|
|
560
|
-
continue;
|
|
561
|
-
}
|
|
562
|
-
}
|
|
563
|
-
}
|
|
564
|
-
return false;
|
|
565
|
-
}
|
|
566
540
|
/** Calcula o fingerprint estável de uma skill, ignorando caches gerados. */
|
|
567
541
|
export async function skillDigest(path) {
|
|
568
542
|
const digest = createHash("sha256");
|