@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.
- package/README.md +48 -59
- package/dist/index.js +9 -8
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,87 +1,76 @@
|
|
|
1
|
-
# @h1veframework/cli
|
|
1
|
+
# @h1veframework/cli
|
|
2
2
|
|
|
3
|
-
CLI
|
|
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
|
-
|
|
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
|
-
##
|
|
9
|
+
## Pré-requisitos
|
|
8
10
|
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
|
|
14
|
-
|
|
15
|
-
<details><summary>A partir do código-fonte (contribuidores)</summary>
|
|
16
|
+
## Instalação
|
|
16
17
|
|
|
17
18
|
```bash
|
|
18
|
-
npm
|
|
19
|
-
|
|
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
|
|
35
|
-
export
|
|
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
|
-
>
|
|
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
|
-
|
|
46
|
-
|
|
47
|
-
nf
|
|
48
|
-
nf
|
|
49
|
-
nf
|
|
50
|
-
nf
|
|
51
|
-
nf
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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
|
-
|
|
48
|
+
Flags: `--json` (saída crua p/ scripts) · `--project <nome\|id>` (se você é membro de +1 projeto) · `-h` (ajuda completa).
|
|
57
49
|
|
|
58
|
-
|
|
50
|
+
## Exemplo de uso
|
|
59
51
|
|
|
60
52
|
```bash
|
|
61
|
-
nf
|
|
62
|
-
|
|
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
|
-
|
|
60
|
+
## Troubleshooting
|
|
66
61
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
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
|
-
##
|
|
69
|
+
## Compatibilidade de nomes
|
|
79
70
|
|
|
80
|
-
|
|
81
|
-
|
|
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ê já configurou com eles, não precisa mudar nada.
|
|
82
73
|
|
|
83
|
-
|
|
74
|
+
---
|
|
84
75
|
|
|
85
|
-
|
|
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", "
|
|
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", "
|
|
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
|
|
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.
|
|
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
|
-
|
|
1029
|
-
|
|
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