@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 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="../brand/logo/icon.svg" type="image/svg+xml">
7
- <img src="../brand/logo/icon.png" alt="Logo do Specsfy" width="128">
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.12 ou superior, com o npm disponível.
18
- - `skills`, do projeto
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
- npm update --global @promovaweb/specsfy
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.6.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 skills update --project .
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
- ![Dashboard Home](../docs/user/assets/cli/cli-dash.png)
123
+ ![Dashboard Home](https://promovaweb.com/docs/specsfy/cli/cli-dash.png)
103
124
 
104
- ![Backlogs](../docs/user/assets/cli/cli-backlogs.png)
125
+ ![Backlogs](https://promovaweb.com/docs/specsfy/cli/cli-backlogs.png)
105
126
 
106
- ![Specs](../docs/user/assets/cli/cli-specs.png)
127
+ ![Specs](https://promovaweb.com/docs/specsfy/cli/cli-specs.png)
107
128
 
108
- ![Skills](../docs/user/assets/cli/cli-skills.png)
129
+ ![Skills](https://promovaweb.com/docs/specsfy/cli/cli-skills.png)
109
130
 
110
131
  Alterações em `specs/inbox/*.md`, `specs/backlog/*.md`,
111
- `specs/specs/*/spec.md` e no `skills-lock.json` são detectadas
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 nove skills base, incluindo `specsfy-01-inbox` e
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 skills update --project .`. Customizações locais continuam protegidas e
169
- podem ser substituídas explicitamente com `--force` no comando.
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/specs/<NNNN>-<slug>/spec.md`. Capturas imediatas ficam
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; enquanto ele permanecer privado, publica com o
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á em [`docs/`](../docs/).
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;AAoB5D,sDAAsD;AACtD,wBAAgB,YAAY,IAAI,OAAO,CAkKtC;AAED,0EAA0E;AAC1E,wBAAsB,MAAM,CAAC,IAAI,WAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAoBjE"}
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 { offerStartupUpdate } from "./updater.js";
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 installer = await SkillInstaller.create(options.project, options.force);
98
- printInstallation(await installer.updateAll(), false);
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"}
@@ -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 {
@@ -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,CACV,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,0TAKnB,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;AAmMD,4EAA4E;AAC5E,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAqB/D"}
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 { access, lstat, mkdir, mkdtemp, readFile, readlink, readdir, rm, } from "node:fs/promises";
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 skillsCommand();
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 skillsCommand();
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");