@h1veframework/cli 0.1.0 → 0.2.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 (3) hide show
  1. package/README.md +48 -59
  2. package/dist/index.js +9 -8
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -1,87 +1,76 @@
1
- # @h1veframework/cli — `nf`
1
+ # @h1veframework/cli
2
2
 
3
- CLI de terminal do **H1VE Flow**. Opera o fluxo da feature **da própria branch**, sem abrir o painel: ver estado, mover stage, abrir blocker, ler a spec, enviar a AI declaration e consultar a saúde técnica.
3
+ CLI `nf` do **H1VE Flow** opera o fluxo da feature da sua branch direto do terminal
4
+ (status, start, move, spec, done, blocker, health, connect), autenticado por um token pessoal.
4
5
 
5
- É um **cliente fino**: toda regra (transições, ownership, papéis) é decidida no servidor. O `nf` resolve a branch (via `git`), chama a API e formata a saída. O bundle é **auto-contido** (sem dependências de runtime além do Node).
6
+ Parte do tooling do H1VE junto com o **[servidor MCP](https://www.npmjs.com/package/@h1veframework/mcp)**
7
+ (para o Claude Code).
6
8
 
7
- ## Instalação
9
+ ## Pré-requisitos
8
10
 
9
- ```bash
10
- npm install -g @h1veframework/cli # disponibiliza o comando `nf` globalmente
11
- ```
11
+ - **Node.js 18.18+** (`node --version`).
12
+ - Uma conta no H1VE Flow e um **PAT** (`nf_pat_…`), criado em **`app.h1ve.org/api-tokens`**.
13
+ - PAT autentica **como você**: leitura **e escrita**. A chave de serviço é **só leitura**.
14
+ - Guarde o PAT com cuidado — é um segredo, mostrado uma vez.
12
15
 
13
- > Requer Node ≥ 18.18 e `git` no PATH.
14
-
15
- <details><summary>A partir do código-fonte (contribuidores)</summary>
16
+ ## Instalação
16
17
 
17
18
  ```bash
18
- npm install # na raiz do monorepo
19
- npm run build -w @h1veframework/cli
20
- node packages/cli/dist/index.js --help # ou: npm i -g ./packages/cli
19
+ npm i -g @h1veframework/cli
20
+ nf --version
21
21
  ```
22
- </details>
23
22
 
24
23
  ## Configuração
25
24
 
26
- Duas variáveis de ambiente:
27
-
28
- | Variável | Descrição |
29
- |---|---|
30
- | `NEXUS_FLOW_API_URL` | URL do H1VE Flow (ex.: `https://app.h1ve.org`) |
31
- | `NEXUS_FLOW_API_KEY` | Um **PAT** (`nf_pat_…`, criado em `/api-tokens`) **ou** a chave de serviço |
32
-
33
25
  ```bash
34
- export NEXUS_FLOW_API_URL=https://app.h1ve.org
35
- export NEXUS_FLOW_API_KEY=nf_pat_xxxxxxxx
26
+ export H1VE_API_URL="https://app.h1ve.org"
27
+ export H1VE_API_KEY="nf_pat_..." # seu PAT
28
+ nf health # testa a conexão
36
29
  ```
37
30
 
38
- > Nota: os nomes das env vars ainda usam o prefixo `NEXUS_FLOW_` (nome interno original). O rebrand desses nomes p/ `H1VE_` toca código de servidor + config de deploy — fica p/ uma fatia futura.
39
-
40
- - **PAT** (`nf_pat_…`): age com a **sua identidade e papel** — habilita escrita (`move`, `blocker`, `done`).
41
- - **Chave de serviço**: **só leitura** — `move`/`blocker`/`done` respondem `SERVICE_CANNOT_WRITE`. `status`/`spec`/`health` funcionam.
31
+ > Coloque os `export` no seu `~/.zshrc` / `~/.bashrc` para não repetir a cada sessão.
32
+ > "Nenhum snapshot registrado" no `nf health` é **sucesso** (conectou; projeto sem métricas ainda).
42
33
 
43
34
  ## Comandos
44
35
 
45
- ```bash
46
- nf status # estado da feature da branch (stage, dias ativos, blockers, sign-offs)
47
- nf spec # imprime a spec (spec_content) da feature
48
- nf move <stage> [--note "..."] # move a feature de stage
49
- nf blocker "<descrição>" # abre um blocker
50
- nf done [--from <arq>] [--no-move] # envia a AI declaration (JSON) e move dev pr
51
- nf health # últimos snapshots de saúde técnica (founder/architect, ou serviço)
52
- ```
53
-
54
- Flags globais: `--json` (saída crua), `-h/--help`, `-v/--version`.
36
+ | Comando | O que faz |
37
+ |---|---|
38
+ | `nf health` | Últimos snapshots de saúde técnica do projeto |
39
+ | `nf status` | Estado da feature da branch atual (stage, dias ativo, blockers, sign-offs) |
40
+ | `nf start [<nº\|id>] [--slug <s>]` | Inicia uma feature atribuída: cria a branch `feat/{você}/{slug}` e grava o slug |
41
+ | `nf spec` | Imprime a spec (markdown) da feature da branch |
42
+ | `nf move <stage> [--note]` | Move a feature para outro stage |
43
+ | `nf done [--from <arq>] [--no-move]` | Envia a AI declaration (JSON) e move `dev → pr` |
44
+ | `nf blocker "<desc>"` | Abre um blocker na feature (você vira o dono) |
45
+ | `nf connect --kind <k> --label <l> --env KEY=VAL` | Aplica uma credencial no `.env.local` **local** (nunca ao servidor) e registra o inventário (Jeito B) |
46
+ | `nf serve [--port 7391]` | Sobe o agente local (`127.0.0.1`) p/ o menu visual do painel aplicar credenciais pelo navegador |
55
47
 
56
- ### `nf done`
48
+ Flags: `--json` (saída crua p/ scripts) · `--project <nome\|id>` (se você é membro de +1 projeto) · `-h` (ajuda completa).
57
49
 
58
- Recebe a AI declaration como **JSON** — de um arquivo ou do stdin:
50
+ ## Exemplo de uso
59
51
 
60
52
  ```bash
61
- nf done --from ai-declaration.json
62
- nf done < ai-declaration.json
53
+ nf start # inicia a feature atribuída (cria a branch)
54
+ # ... trabalha (git, código, commits) ...
55
+ nf status # estado a qualquer momento
56
+ nf blocker "aguardando credencial do Neon" # trava? abre blocker
57
+ nf done --from ai-declaration.json # envia a AI declaration + move dev → pr
63
58
  ```
64
59
 
65
- Formato do JSON (validado no servidor):
60
+ ## Troubleshooting
66
61
 
67
- ```json
68
- {
69
- "generated_files": [{ "file": "src/x.ts", "pct_generated": 80 }],
70
- "reviewed_files": [{ "file": "src/x.ts", "reviewed_by_human": true }],
71
- "github_pr_number": 42,
72
- "out_of_scope": "nenhum"
73
- }
74
- ```
75
-
76
- `nf done` **envia a declaration e depois move `dev → pr`**. Com `--no-move`, só envia. Se o move falhar (ex.: a feature não está em `dev`), a declaration **já foi enviada** — o CLI reporta o parcial e sai com código ≠ 0.
62
+ | Sintoma | Solução |
63
+ |---|---|
64
+ | `nf: command not found` | Node ausente ou terminal errado. Confira `node --version`. No Windows, o PowerShell pode não ter o bin do npm no PATH — use o terminal do VS Code ou reabra o shell. |
65
+ | `404` ao instalar | Propagação do npm logo após publicação. Espere alguns minutos. |
66
+ | `NO_PROJECT` | Você é membro de +1 projeto — passe `--project <nome\|id>`. |
67
+ | `401` / `403` | Token errado/ausente/sem permissão. Confira que `H1VE_API_KEY` é um PAT (`nf_pat_…`). `403 SERVICE_CANNOT_WRITE` = chave de serviço (só leitura) numa escrita → use um PAT. |
77
68
 
78
- ## Saída e exit codes
69
+ ## Compatibilidade de nomes
79
70
 
80
- - Sucesso **stdout**, exit `0`.
81
- - Erro **stderr** (mensagem amigável, sem stack), exit `≠ 0` (config faltando = `2`).
71
+ Use **`H1VE_API_URL`** e **`H1VE_API_KEY`**. Os nomes legados `NEXUS_FLOW_API_URL` / `NEXUS_FLOW_API_KEY`
72
+ **ainda são aceitos** por compatibilidade se você configurou com eles, não precisa mudar nada.
82
73
 
83
- Compõe bem em scripts/CI:
74
+ ---
84
75
 
85
- ```bash
86
- nf status --json | jq .stage
87
- ```
76
+ MIT · [H1VE Flow](https://app.h1ve.org)
package/dist/index.js CHANGED
@@ -16,7 +16,7 @@ var NexusApiError = class extends Error {
16
16
  function errorForStatus(status2) {
17
17
  switch (status2) {
18
18
  case 401:
19
- return new NexusApiError("UNAUTHENTICATED", "NEXUS_FLOW_API_KEY ausente ou inv\xE1lida.");
19
+ return new NexusApiError("UNAUTHENTICATED", "H1VE_API_KEY ausente ou inv\xE1lida.");
20
20
  case 403:
21
21
  return new NexusApiError("FORBIDDEN", "Sem permiss\xE3o para ver esta feature.");
22
22
  case 404:
@@ -45,7 +45,7 @@ function mapWriteError(status2, code) {
45
45
  }
46
46
  switch (status2) {
47
47
  case 401:
48
- return new NexusApiError("UNAUTHENTICATED", "NEXUS_FLOW_API_KEY ausente ou inv\xE1lida.");
48
+ return new NexusApiError("UNAUTHENTICATED", "H1VE_API_KEY ausente ou inv\xE1lida.");
49
49
  case 403:
50
50
  return new NexusApiError(code ?? "FORBIDDEN", "Sem permiss\xE3o para esta a\xE7\xE3o (papel ou ownership).");
51
51
  case 404:
@@ -258,11 +258,11 @@ var CliError = class extends Error {
258
258
 
259
259
  // src/config.ts
260
260
  function readConfig(env = process.env) {
261
- const baseUrl = env.NEXUS_FLOW_API_URL?.trim();
262
- const apiKey = env.NEXUS_FLOW_API_KEY?.trim();
261
+ const baseUrl = env.H1VE_API_URL?.trim() || env.NEXUS_FLOW_API_URL?.trim();
262
+ const apiKey = env.H1VE_API_KEY?.trim() || env.NEXUS_FLOW_API_KEY?.trim();
263
263
  if (!baseUrl || !apiKey) {
264
264
  throw new CliError(
265
- "Defina NEXUS_FLOW_API_URL e NEXUS_FLOW_API_KEY no ambiente.\n export NEXUS_FLOW_API_URL=https://seu-nexus.example.com\n export NEXUS_FLOW_API_KEY=nf_pat_... (crie um token em /api-tokens)",
265
+ "Defina H1VE_API_URL e H1VE_API_KEY no ambiente.\n export H1VE_API_URL=https://app.h1ve.org\n export H1VE_API_KEY=nf_pat_... (crie um token em /api-tokens)\n (os nomes legados NEXUS_FLOW_API_URL/KEY ainda s\xE3o aceitos)",
266
266
  2
267
267
  );
268
268
  }
@@ -993,7 +993,7 @@ Cole o c\xF3digo no painel /connections. Ctrl+C para parar.
993
993
  }
994
994
 
995
995
  // src/index.ts
996
- var VERSION = "0.1.0";
996
+ var VERSION = "0.2.0";
997
997
  var HELP = `nf \u2014 CLI do Nexus Flow
998
998
 
999
999
  Uso:
@@ -1025,8 +1025,9 @@ Flags:
1025
1025
  -v, --version vers\xE3o do CLI
1026
1026
 
1027
1027
  Ambiente:
1028
- NEXUS_FLOW_API_URL URL do Nexus Flow
1029
- NEXUS_FLOW_API_KEY PAT (nf_pat_\u2026) p/ escrever, ou a chave de servi\xE7o (s\xF3 leitura)
1028
+ H1VE_API_URL URL do H1VE Flow (ex.: https://app.h1ve.org)
1029
+ H1VE_API_KEY PAT (nf_pat_\u2026) p/ escrever, ou a chave de servi\xE7o (s\xF3 leitura)
1030
+ (nomes legados aceitos: NEXUS_FLOW_API_URL / NEXUS_FLOW_API_KEY)
1030
1031
  `;
1031
1032
  var COMMANDS = { start, status, spec, move, blocker, done, health, connect, serve };
1032
1033
  async function readStdin() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@h1veframework/cli",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "CLI `nf` do H1VE Flow: opera o fluxo da feature (status/move/blocker/spec/done/health/start) da própria branch, via PAT.",
5
5
  "license": "MIT",
6
6
  "type": "module",