@noclaf/cli 0.8.0 → 0.9.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 +26 -88
- package/dist/app.js +13 -0
- package/dist/app.js.map +1 -0
- package/dist/brand.js +9 -49
- package/dist/brand.js.map +1 -1
- package/dist/cli.js +3 -37
- package/dist/cli.js.map +1 -1
- package/dist/mcp-server.js +3 -187
- package/dist/mcp-server.js.map +1 -1
- package/package.json +8 -17
- package/dist/adapters/supabase/allocation-gateway.js +0 -291
- package/dist/adapters/supabase/allocation-gateway.js.map +0 -1
- package/dist/adapters/supabase/analytics-gateway.js +0 -18
- package/dist/adapters/supabase/analytics-gateway.js.map +0 -1
- package/dist/adapters/supabase/calendar-gateway.js +0 -48
- package/dist/adapters/supabase/calendar-gateway.js.map +0 -1
- package/dist/adapters/supabase/calendar-write-gateway.js +0 -35
- package/dist/adapters/supabase/calendar-write-gateway.js.map +0 -1
- package/dist/adapters/supabase/checklist-gateway.js +0 -63
- package/dist/adapters/supabase/checklist-gateway.js.map +0 -1
- package/dist/adapters/supabase/client.js +0 -136
- package/dist/adapters/supabase/client.js.map +0 -1
- package/dist/adapters/supabase/context-gateway.js +0 -23
- package/dist/adapters/supabase/context-gateway.js.map +0 -1
- package/dist/adapters/supabase/gateway.js +0 -28
- package/dist/adapters/supabase/gateway.js.map +0 -1
- package/dist/adapters/supabase/release-gateway.js +0 -61
- package/dist/adapters/supabase/release-gateway.js.map +0 -1
- package/dist/adapters/supabase/sprint-gateway.js +0 -59
- package/dist/adapters/supabase/sprint-gateway.js.map +0 -1
- package/dist/adapters/supabase/task-gateway.js +0 -533
- package/dist/adapters/supabase/task-gateway.js.map +0 -1
- package/dist/auth.js +0 -141
- package/dist/auth.js.map +0 -1
- package/dist/cli/commands/auth.js +0 -127
- package/dist/cli/commands/auth.js.map +0 -1
- package/dist/cli/commands/clean.js +0 -120
- package/dist/cli/commands/clean.js.map +0 -1
- package/dist/cli/commands/completion.js +0 -114
- package/dist/cli/commands/completion.js.map +0 -1
- package/dist/cli/commands/exec.js +0 -69
- package/dist/cli/commands/exec.js.map +0 -1
- package/dist/cli/commands/init/analyze-step.js +0 -21
- package/dist/cli/commands/init/analyze-step.js.map +0 -1
- package/dist/cli/commands/init/apply-answers.js +0 -122
- package/dist/cli/commands/init/apply-answers.js.map +0 -1
- package/dist/cli/commands/init/apply-step.js +0 -165
- package/dist/cli/commands/init/apply-step.js.map +0 -1
- package/dist/cli/commands/init/auth-step.js +0 -48
- package/dist/cli/commands/init/auth-step.js.map +0 -1
- package/dist/cli/commands/init/boilerplate-step.js +0 -20
- package/dist/cli/commands/init/boilerplate-step.js.map +0 -1
- package/dist/cli/commands/init/clients-step.js +0 -78
- package/dist/cli/commands/init/clients-step.js.map +0 -1
- package/dist/cli/commands/init/context-step.js +0 -81
- package/dist/cli/commands/init/context-step.js.map +0 -1
- package/dist/cli/commands/init/describe-step.js +0 -68
- package/dist/cli/commands/init/describe-step.js.map +0 -1
- package/dist/cli/commands/init/index.js +0 -98
- package/dist/cli/commands/init/index.js.map +0 -1
- package/dist/cli/commands/init/mode.js +0 -18
- package/dist/cli/commands/init/mode.js.map +0 -1
- package/dist/cli/commands/init/progress.js +0 -60
- package/dist/cli/commands/init/progress.js.map +0 -1
- package/dist/cli/commands/init/project-step.js +0 -133
- package/dist/cli/commands/init/project-step.js.map +0 -1
- package/dist/cli/commands/init/provision-step.js +0 -103
- package/dist/cli/commands/init/provision-step.js.map +0 -1
- package/dist/cli/commands/map.js +0 -18
- package/dist/cli/commands/map.js.map +0 -1
- package/dist/cli/commands/plan.js +0 -45
- package/dist/cli/commands/plan.js.map +0 -1
- package/dist/cli/commands/skills.js +0 -23
- package/dist/cli/commands/skills.js.map +0 -1
- package/dist/cli/commands/sync.js +0 -319
- package/dist/cli/commands/sync.js.map +0 -1
- package/dist/cli/commands/validate-plan.js +0 -42
- package/dist/cli/commands/validate-plan.js.map +0 -1
- package/dist/cli/commands/wave.js +0 -57
- package/dist/cli/commands/wave.js.map +0 -1
- package/dist/cli/copy/auth.json +0 -6
- package/dist/cli/copy/flows.json +0 -6
- package/dist/cli/copy/init.json +0 -20
- package/dist/cli/copy/sync.json +0 -3
- package/dist/cli/copy.js +0 -23
- package/dist/cli/copy.js.map +0 -1
- package/dist/cli/flows/clients.js +0 -130
- package/dist/cli/flows/clients.js.map +0 -1
- package/dist/cli/flows/completion.js +0 -63
- package/dist/cli/flows/completion.js.map +0 -1
- package/dist/cli/flows/dependencies.js +0 -114
- package/dist/cli/flows/dependencies.js.map +0 -1
- package/dist/cli/flows/sections.js +0 -85
- package/dist/cli/flows/sections.js.map +0 -1
- package/dist/cli/flows/user-config.js +0 -37
- package/dist/cli/flows/user-config.js.map +0 -1
- package/dist/cli/ui/render.js +0 -239
- package/dist/cli/ui/render.js.map +0 -1
- package/dist/cli/ui/report.js +0 -130
- package/dist/cli/ui/report.js.map +0 -1
- package/dist/config.js +0 -289
- package/dist/config.js.map +0 -1
- package/dist/constants.js +0 -9
- package/dist/constants.js.map +0 -1
- package/dist/core/ports.js +0 -2
- package/dist/core/ports.js.map +0 -1
- package/dist/core/types.js +0 -5
- package/dist/core/types.js.map +0 -1
- package/dist/database.types.js +0 -11
- package/dist/database.types.js.map +0 -1
- package/dist/lib/active-project.js +0 -28
- package/dist/lib/active-project.js.map +0 -1
- package/dist/lib/autopull.js +0 -13
- package/dist/lib/autopull.js.map +0 -1
- package/dist/lib/boilerplate-scaffold.js +0 -65
- package/dist/lib/boilerplate-scaffold.js.map +0 -1
- package/dist/lib/boilerplates.js +0 -61
- package/dist/lib/boilerplates.js.map +0 -1
- package/dist/lib/calendar-logic.js +0 -59
- package/dist/lib/calendar-logic.js.map +0 -1
- package/dist/lib/calendar-write-logic.js +0 -6
- package/dist/lib/calendar-write-logic.js.map +0 -1
- package/dist/lib/checklist-logic.js +0 -5
- package/dist/lib/checklist-logic.js.map +0 -1
- package/dist/lib/client-configs.js +0 -191
- package/dist/lib/client-configs.js.map +0 -1
- package/dist/lib/client-install.js +0 -40
- package/dist/lib/client-install.js.map +0 -1
- package/dist/lib/colors.js +0 -92
- package/dist/lib/colors.js.map +0 -1
- package/dist/lib/cowork-extension.js +0 -143
- package/dist/lib/cowork-extension.js.map +0 -1
- package/dist/lib/dates.js +0 -21
- package/dist/lib/dates.js.map +0 -1
- package/dist/lib/dependencies.js +0 -145
- package/dist/lib/dependencies.js.map +0 -1
- package/dist/lib/dependency-install.js +0 -163
- package/dist/lib/dependency-install.js.map +0 -1
- package/dist/lib/duration.js +0 -5
- package/dist/lib/duration.js.map +0 -1
- package/dist/lib/exec-delegate.js +0 -218
- package/dist/lib/exec-delegate.js.map +0 -1
- package/dist/lib/exec-engines.js +0 -90
- package/dist/lib/exec-engines.js.map +0 -1
- package/dist/lib/exec-events.js +0 -87
- package/dist/lib/exec-events.js.map +0 -1
- package/dist/lib/exec-translators.js +0 -198
- package/dist/lib/exec-translators.js.map +0 -1
- package/dist/lib/file-merge.js +0 -33
- package/dist/lib/file-merge.js.map +0 -1
- package/dist/lib/git-exposure.js +0 -35
- package/dist/lib/git-exposure.js.map +0 -1
- package/dist/lib/harness.js +0 -127
- package/dist/lib/harness.js.map +0 -1
- package/dist/lib/hooks.js +0 -216
- package/dist/lib/hooks.js.map +0 -1
- package/dist/lib/patterns.js +0 -25
- package/dist/lib/patterns.js.map +0 -1
- package/dist/lib/pg-error.js +0 -53
- package/dist/lib/pg-error.js.map +0 -1
- package/dist/lib/plan-delegate.js +0 -117
- package/dist/lib/plan-delegate.js.map +0 -1
- package/dist/lib/project-context.js +0 -151
- package/dist/lib/project-context.js.map +0 -1
- package/dist/lib/prompts.js +0 -69
- package/dist/lib/prompts.js.map +0 -1
- package/dist/lib/provision-apply.js +0 -220
- package/dist/lib/provision-apply.js.map +0 -1
- package/dist/lib/provision-collect.js +0 -47
- package/dist/lib/provision-collect.js.map +0 -1
- package/dist/lib/provision.js +0 -45
- package/dist/lib/provision.js.map +0 -1
- package/dist/lib/release-logic.js +0 -10
- package/dist/lib/release-logic.js.map +0 -1
- package/dist/lib/repo-map.js +0 -176
- package/dist/lib/repo-map.js.map +0 -1
- package/dist/lib/require-config.js +0 -32
- package/dist/lib/require-config.js.map +0 -1
- package/dist/lib/rules.js +0 -146
- package/dist/lib/rules.js.map +0 -1
- package/dist/lib/sections.js +0 -89
- package/dist/lib/sections.js.map +0 -1
- package/dist/lib/skill-agent.js +0 -44
- package/dist/lib/skill-agent.js.map +0 -1
- package/dist/lib/skill-serve.js +0 -128
- package/dist/lib/skill-serve.js.map +0 -1
- package/dist/lib/skills-cache.js +0 -99
- package/dist/lib/skills-cache.js.map +0 -1
- package/dist/lib/skills.js +0 -237
- package/dist/lib/skills.js.map +0 -1
- package/dist/lib/sprint-deadline.js +0 -28
- package/dist/lib/sprint-deadline.js.map +0 -1
- package/dist/lib/sprint-logic.js +0 -31
- package/dist/lib/sprint-logic.js.map +0 -1
- package/dist/lib/targets.js +0 -150
- package/dist/lib/targets.js.map +0 -1
- package/dist/lib/task-history.js +0 -15
- package/dist/lib/task-history.js.map +0 -1
- package/dist/lib/telemetry.js +0 -51
- package/dist/lib/telemetry.js.map +0 -1
- package/dist/lib/tool-result.js +0 -15
- package/dist/lib/tool-result.js.map +0 -1
- package/dist/lib/validate-plan-delegate.js +0 -106
- package/dist/lib/validate-plan-delegate.js.map +0 -1
- package/dist/lib/version-check.js +0 -89
- package/dist/lib/version-check.js.map +0 -1
- package/dist/lib/wave-scheduler.js +0 -95
- package/dist/lib/wave-scheduler.js.map +0 -1
- package/dist/session-factory.js +0 -19
- package/dist/session-factory.js.map +0 -1
- package/dist/spinner.js +0 -12
- package/dist/spinner.js.map +0 -1
- package/dist/tools/activate-sprint.js +0 -44
- package/dist/tools/activate-sprint.js.map +0 -1
- package/dist/tools/add-checklist-item.js +0 -44
- package/dist/tools/add-checklist-item.js.map +0 -1
- package/dist/tools/add-checklist.js +0 -63
- package/dist/tools/add-checklist.js.map +0 -1
- package/dist/tools/add-holiday.js +0 -41
- package/dist/tools/add-holiday.js.map +0 -1
- package/dist/tools/add-home-office.js +0 -31
- package/dist/tools/add-home-office.js.map +0 -1
- package/dist/tools/add-vacation.js +0 -39
- package/dist/tools/add-vacation.js.map +0 -1
- package/dist/tools/attach-pr.js +0 -97
- package/dist/tools/attach-pr.js.map +0 -1
- package/dist/tools/comment-task.js +0 -72
- package/dist/tools/comment-task.js.map +0 -1
- package/dist/tools/create-release.js +0 -46
- package/dist/tools/create-release.js.map +0 -1
- package/dist/tools/create-sprint.js +0 -66
- package/dist/tools/create-sprint.js.map +0 -1
- package/dist/tools/create-task.js +0 -174
- package/dist/tools/create-task.js.map +0 -1
- package/dist/tools/delegate-exec.js +0 -63
- package/dist/tools/delegate-exec.js.map +0 -1
- package/dist/tools/end-allocation.js +0 -38
- package/dist/tools/end-allocation.js.map +0 -1
- package/dist/tools/end-sprint.js +0 -37
- package/dist/tools/end-sprint.js.map +0 -1
- package/dist/tools/end-task-allocation.js +0 -60
- package/dist/tools/end-task-allocation.js.map +0 -1
- package/dist/tools/exec-status.js +0 -45
- package/dist/tools/exec-status.js.map +0 -1
- package/dist/tools/finalize-release.js +0 -45
- package/dist/tools/finalize-release.js.map +0 -1
- package/dist/tools/get-active-allocation.js +0 -69
- package/dist/tools/get-active-allocation.js.map +0 -1
- package/dist/tools/get-calendar.js +0 -40
- package/dist/tools/get-calendar.js.map +0 -1
- package/dist/tools/get-context.js +0 -48
- package/dist/tools/get-context.js.map +0 -1
- package/dist/tools/get-sprint.js +0 -38
- package/dist/tools/get-sprint.js.map +0 -1
- package/dist/tools/get-task.js +0 -146
- package/dist/tools/get-task.js.map +0 -1
- package/dist/tools/index.js +0 -92
- package/dist/tools/index.js.map +0 -1
- package/dist/tools/list-my-allocations.js +0 -71
- package/dist/tools/list-my-allocations.js.map +0 -1
- package/dist/tools/list-projects.js +0 -38
- package/dist/tools/list-projects.js.map +0 -1
- package/dist/tools/list-releases.js +0 -32
- package/dist/tools/list-releases.js.map +0 -1
- package/dist/tools/list-sprints.js +0 -30
- package/dist/tools/list-sprints.js.map +0 -1
- package/dist/tools/list-tasks.js +0 -95
- package/dist/tools/list-tasks.js.map +0 -1
- package/dist/tools/move-task.js +0 -82
- package/dist/tools/move-task.js.map +0 -1
- package/dist/tools/plan.js +0 -56
- package/dist/tools/plan.js.map +0 -1
- package/dist/tools/record-delivery.js +0 -100
- package/dist/tools/record-delivery.js.map +0 -1
- package/dist/tools/remove-checklist-item.js +0 -42
- package/dist/tools/remove-checklist-item.js.map +0 -1
- package/dist/tools/remove-checklist.js +0 -42
- package/dist/tools/remove-checklist.js.map +0 -1
- package/dist/tools/remove-holiday.js +0 -31
- package/dist/tools/remove-holiday.js.map +0 -1
- package/dist/tools/remove-home-office.js +0 -32
- package/dist/tools/remove-home-office.js.map +0 -1
- package/dist/tools/remove-vacation.js +0 -31
- package/dist/tools/remove-vacation.js.map +0 -1
- package/dist/tools/set-project.js +0 -52
- package/dist/tools/set-project.js.map +0 -1
- package/dist/tools/set-review.js +0 -132
- package/dist/tools/set-review.js.map +0 -1
- package/dist/tools/sprint-common.js +0 -13
- package/dist/tools/sprint-common.js.map +0 -1
- package/dist/tools/start-allocation.js +0 -32
- package/dist/tools/start-allocation.js.map +0 -1
- package/dist/tools/start-task-allocation.js +0 -83
- package/dist/tools/start-task-allocation.js.map +0 -1
- package/dist/tools/update-checklist-item.js +0 -51
- package/dist/tools/update-checklist-item.js.map +0 -1
- package/dist/tools/update-release.js +0 -58
- package/dist/tools/update-release.js.map +0 -1
- package/dist/tools/update-sprint.js +0 -56
- package/dist/tools/update-sprint.js.map +0 -1
- package/dist/tools/update-task.js +0 -183
- package/dist/tools/update-task.js.map +0 -1
- package/dist/tools/validate-plan.js +0 -58
- package/dist/tools/validate-plan.js.map +0 -1
- package/dist/version.js +0 -16
- package/dist/version.js.map +0 -1
package/README.md
CHANGED
|
@@ -43,32 +43,21 @@ Esse único comando faz tudo:
|
|
|
43
43
|
|
|
44
44
|
Reinicie o cliente de IA depois pra carregar as tools.
|
|
45
45
|
|
|
46
|
+
## Documentação
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
noclaf docs # abre no navegador
|
|
50
|
+
noclaf docs -o noclaf.html --no-open # só salva, para compartilhar
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Gera a documentação completa desta versão num HTML só: os comandos do CLI, as tools MCP com os parâmetros e o
|
|
54
|
+
contrato de backend de cada módulo, com busca e opção de copiar tudo em Markdown para uma IA. `--json` entrega o
|
|
55
|
+
modelo cru.
|
|
56
|
+
|
|
46
57
|
## Comandos do CLI
|
|
47
58
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
<!-- COMMANDS:START -->
|
|
52
|
-
<!-- gerado por `bun run gen:docs` — não edite à mão. binário `noclaf`, 15 comandos. -->
|
|
53
|
-
|
|
54
|
-
| Comando | Descrição |
|
|
55
|
-
| --- | --- |
|
|
56
|
-
| `clean-legacy` | Remove commands/skills legados (substituídos) de ~/.claude e ~/.codex |
|
|
57
|
-
| `completion [shell]` | Imprime o script de autocomplete (bash\|zsh\|fish). |
|
|
58
|
-
| `exec` | Delega a implementação a um agente headless num worktree e aguarda. |
|
|
59
|
-
| `exec-status <jobId>` | Estado de um job de execução (`noclaf exec`), em JSON |
|
|
60
|
-
| `init` | Cria noclaf.json no diretório atual vinculando a um projeto do NOS |
|
|
61
|
-
| `login [pat]` | Salva o token de acesso pessoal (PAT) localmente |
|
|
62
|
-
| `logout` | Remove credenciais locais |
|
|
63
|
-
| `map` | Regera o índice estrutural do repo em docs/_map.md (arquivo → símbolos exportados + propósito). |
|
|
64
|
-
| `plan` | Roda o engine pensante sobre o projeto e escreve/refina o .noclaf/plan.md. |
|
|
65
|
-
| `skills` | Skills, commands e agents do noclaf (lidos do repo aberto via cache) |
|
|
66
|
-
| `skills status` | Lista os docs do repo de skills (cache local ~/.noclaf/skills) |
|
|
67
|
-
| `sync` | Instala/atualiza skills, commands e agents nos clientes configurados, a partir do bundle (idempotente); checa atualização do pacote |
|
|
68
|
-
| `validate-plan` | Lê o .noclaf/plan.md e roda o engine pensante para julgar se o plano precisa de uma spec antes de implementar. |
|
|
69
|
-
| `wave <tickets>` | Calcula a próxima wave do DAG de um doc de tickets (docs/tickets/<x>.md): o frontier (bloqueadores todos done), limitado ao paralelismo e sem dois tickets tocando o mesmo arquivo. |
|
|
70
|
-
| `whoami` | Mostra o usuário autenticado |
|
|
71
|
-
<!-- COMMANDS:END -->
|
|
59
|
+
`noclaf --help` lista os comandos e `noclaf <comando> --help` detalha cada um; a referência completa está no
|
|
60
|
+
`noclaf docs`.
|
|
72
61
|
|
|
73
62
|
### Autocomplete (tab)
|
|
74
63
|
|
|
@@ -88,74 +77,18 @@ Recarregue o shell e `noclaf <tab>` passa a sugerir comandos, subcomandos e flag
|
|
|
88
77
|
|
|
89
78
|
## Tools disponíveis
|
|
90
79
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
<!-- gerado por `bun run gen:docs` — não edite à mão. 44 tools. -->
|
|
96
|
-
|
|
97
|
-
### Tools de produto — prefixo `nos_`
|
|
98
|
-
|
|
99
|
-
| Operação | O que faz |
|
|
100
|
-
| --- | --- |
|
|
101
|
-
| `activate_sprint` | Reativa uma sprint: encerra qualquer outra ativa do projeto (tasks não concluídas voltam pro backlog) e reabre a escolhida com status "ativa", start_date = hoje e end_date = null (como a UI). |
|
|
102
|
-
| `add_checklist` | Cria uma checklist nomeada (com itens) numa tarefa — a checklist nativa que aparece clicável na UI, melhor que enfiar um DoD no texto da descrição. |
|
|
103
|
-
| `add_checklist_item` | Adiciona um item desmarcado ao fim de uma checklist existente. |
|
|
104
|
-
| `add_holiday` | Cria feriado no calendário do time (só admin/gerente). |
|
|
105
|
-
| `add_home_office` | Marca home office do PRÓPRIO usuário num dia (o banco pode recusar por limite mensal). |
|
|
106
|
-
| `add_vacation` | Registra férias de um usuário no calendário do time (só admin/gerente). |
|
|
107
|
-
| `attach_pr` | Anexa a URL de um pull request a uma tarefa e a coloca em review: grava `pr_url`, seta `review_state=pending` e move o status pra `code_review`. |
|
|
108
|
-
| `comment_task` | Adiciona um comentário em uma tarefa. |
|
|
109
|
-
| `create_release` | Cria uma release (status planning) no projeto. |
|
|
110
|
-
| `create_sprint` | Cria uma sprint já ATIVA. |
|
|
111
|
-
| `create_task` | Cria uma nova tarefa no projeto atual. |
|
|
112
|
-
| `end_allocation` | [ENCERRA O DIA] Bate ponto de SAÍDA do usuário e fecha qualquer task_allocation aberta. |
|
|
113
|
-
| `end_sprint` | Encerra a sprint: tasks fora de done/production saem da sprint e voltam pro backlog; done/production ficam. |
|
|
114
|
-
| `end_task_allocation` | [PARA TIMER DE TASK] Para a task_allocation ativa. |
|
|
115
|
-
| `finalize_release` | Finaliza a release: status delivered + delivered_at. |
|
|
116
|
-
| `get_active_allocation` | Retorna o estado atual de cronometragem do usuário: alocação ativa, task atual sendo cronometrada, e segmentos por task na alocação atual. |
|
|
117
|
-
| `get_calendar` | Calendário pessoal: só os dias com eventos (feriados, meus prazos, férias, home office, releases, aniversários e tempo de casa). |
|
|
118
|
-
| `get_context` | Retorna o contexto completo do projeto NOS ativo: dados do projeto, repositórios, sprint ativa, membros e usuário autenticado. |
|
|
119
|
-
| `get_sprint` | Detalha uma sprint: contagem de tasks por status e tasks vencidas (end_date < hoje e fora de done/production), com key/title/end_date. |
|
|
120
|
-
| `get_task` | Retorna detalhes completos de uma tarefa: descrição, assignees, checklist, comentários, histórico recente, repositórios vinculados e labels. |
|
|
121
|
-
| `list_my_allocations` | Lista alocações passadas do usuário (encerradas), ordenadas por data decrescente. |
|
|
122
|
-
| `list_projects` | Lista os projetos do NOS aos quais você tem acesso. |
|
|
123
|
-
| `list_releases` | Lista as releases do projeto (id, name, status, target_date, delivered_at). |
|
|
124
|
-
| `list_sprints` | Lista as sprints do projeto (ativa e encerradas) com status e datas, mais recentes primeiro. |
|
|
125
|
-
| `list_tasks` | Lista tarefas do projeto atual, filtradas pelos parâmetros opcionais. |
|
|
126
|
-
| `move_task` | Atalho pra mudar o status de uma tarefa (move entre colunas do Kanban). |
|
|
127
|
-
| `record_delivery` | Registra uma ENTREGA do loop de build (um ticket concluído / PR aberto) na analítica de entrega do NOS. |
|
|
128
|
-
| `remove_checklist` | Remove uma checklist inteira (os itens vão junto). |
|
|
129
|
-
| `remove_checklist_item` | Remove um item de checklist. |
|
|
130
|
-
| `remove_holiday` | Exclui feriado pelo id (só admin/gerente). |
|
|
131
|
-
| `remove_home_office` | Remove home office do PRÓPRIO usuário num dia. |
|
|
132
|
-
| `remove_vacation` | Exclui férias pelo id (só admin/gerente). |
|
|
133
|
-
| `set_project` | Define o projeto ativo da sessão (em memória, dura enquanto o servidor estiver rodando). |
|
|
134
|
-
| `set_review` | Registra o veredito de um review no ticket: seta `tasks.review_state`. |
|
|
135
|
-
| `start_allocation` | Inicia uma alocação (bate o ponto) para o usuário atual. |
|
|
136
|
-
| `start_task_allocation` | Começa a cronometrar tempo numa task específica. |
|
|
137
|
-
| `update_checklist_item` | Marca/desmarca (checked) e/ou edita o texto (text) de um item de checklist. |
|
|
138
|
-
| `update_release` | Edita uma release: name, target_date, description e/ou status (planning\|in_progress\|cancelled). |
|
|
139
|
-
| `update_sprint` | Edita nome e/ou datas de uma sprint. |
|
|
140
|
-
| `update_task` | Atualiza campos de uma tarefa existente. |
|
|
141
|
-
|
|
142
|
-
### Tools que espelham o CLI — prefixo `noclaf_`
|
|
143
|
-
|
|
144
|
-
| Operação | O que faz |
|
|
145
|
-
| --- | --- |
|
|
146
|
-
| `delegate_exec` | Delega a IMPLEMENTAÇÃO a um agente de execução novo (codex ou claude local, na assinatura — sem API) num worktree já criado pelo /implement. |
|
|
147
|
-
| `exec_status` | Estado de uma execução delegada (`noclaf_delegate_exec`): running \| done \| failed, com o resumo do agente, os arquivos alterados e os checks determinísticos (tamanho, lint, build, testes) e os tokens gastos no run. |
|
|
148
|
-
| `plan` | Roda o engine PENSANTE (claude ou codex local, na assinatura — sem API) sobre a raiz do projeto e escreve/refina o `.noclaf/plan.md` de rascunho pré-SDD. |
|
|
149
|
-
| `validate_plan` | Lê o `.noclaf/plan.md` do projeto e roda o engine PENSANTE (claude ou codex local, na assinatura — sem API) para julgar se o plano é complexo o bastante para virar uma spec SDD antes de implementar. |
|
|
150
|
-
<!-- TOOLS:END -->
|
|
80
|
+
- **`nos_*`**: tools de produto (projetos, tarefas, tempo, sprints, releases, calendário, entregas).
|
|
81
|
+
- **`noclaf_*`**: tools que espelham o CLI (plano, validação de plano, execução delegada).
|
|
82
|
+
|
|
83
|
+
A lista com parâmetros e exemplos está no `noclaf docs`.
|
|
151
84
|
|
|
152
85
|
> **Escopo do projeto.** As tools de tarefa/alocação resolvem o projeto nesta ordem:
|
|
153
|
-
> argumento `project_id` da chamada → projeto ativo da sessão (`
|
|
86
|
+
> argumento `project_id` da chamada → projeto ativo da sessão (`nos_set_project`) → default
|
|
154
87
|
> opcional do binding de repo (`noclaf.json`/`NOCLAF_PROJECT_ID`).
|
|
155
88
|
>
|
|
156
89
|
> O projeto ativo é **por sessão**: vive só em memória, no processo do servidor MCP, e
|
|
157
90
|
> não é gravado em disco — ao reiniciar volta ao default. No Cowork, onde não há binding
|
|
158
|
-
> de repo, é sempre assim que se escolhe o projeto: `
|
|
91
|
+
> de repo, é sempre assim que se escolhe o projeto: `nos_list_projects` → `nos_set_project`.
|
|
159
92
|
> (Como um processo do Claude Desktop pode ser compartilhado entre conversas, passe
|
|
160
93
|
> `project_id` direto na chamada quando quiser garantir o escopo de uma conversa.)
|
|
161
94
|
|
|
@@ -294,6 +227,12 @@ prompt. A CLI também avisa em background em qualquer comando (via `update-notif
|
|
|
294
227
|
- **`ENOENT … mkdir` ao provisionar (dotfiles)** — um symlink em `~/.claude` aponta pra um alvo inexistente. As versões atuais materializam o alvo automaticamente; se persistir, cheque o link.
|
|
295
228
|
- **Sobraram comandos antigos** (`new-spec`, `apply-bug`, `init-sdd` como command…) — rode `noclaf clean-legacy` (use `--dry-run` pra revisar antes) pra removê-los de `~/.claude` e `~/.codex`.
|
|
296
229
|
|
|
230
|
+
## Código
|
|
231
|
+
|
|
232
|
+
Este repo é só o cliente Noclaf: a marca (`src/brand.ts`), o app (`src/app.ts`) e as entradas `noclaf` e
|
|
233
|
+
`noclaf-cli`. Tools, comandos e módulos vêm do [`@noclaf/cli-core`](https://github.com/Falcao-Tech/cli-core);
|
|
234
|
+
mudança de comportamento vai pra lá, e chega aqui subindo a versão do core.
|
|
235
|
+
|
|
297
236
|
## Convenções
|
|
298
237
|
|
|
299
238
|
- **Idioma**: UI/CLI em pt-BR. Código (variáveis, funções, tipos) em inglês.
|
|
@@ -302,5 +241,4 @@ prompt. A CLI também avisa em background em qualquer comando (via `update-notif
|
|
|
302
241
|
|
|
303
242
|
## Versão
|
|
304
243
|
|
|
305
|
-
|
|
306
|
-
suporte a múltiplos perfis de usuário.
|
|
244
|
+
Veja o `CHANGELOG` do [`@noclaf/cli-core`](https://github.com/Falcao-Tech/cli-core) para o que muda em cada versão; como publicar está em [`PUBLISHING.md`](PUBLISHING.md).
|
package/dist/app.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { fileURLToPath } from 'node:url';
|
|
2
|
+
import { coreModules } from '@noclaf/cli-core/modules';
|
|
3
|
+
import { brand } from './brand.js';
|
|
4
|
+
export const options = {
|
|
5
|
+
brand,
|
|
6
|
+
modules: coreModules,
|
|
7
|
+
packageRoot: fileURLToPath(new URL('..', import.meta.url)),
|
|
8
|
+
supabase: {
|
|
9
|
+
url: 'https://wdshvtlsjoegjvmpqobx.supabase.co',
|
|
10
|
+
anonKey: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Indkc2h2dGxzam9lZ2p2bXBxb2J4Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzU3NDA4OTQsImV4cCI6MjA5MTMxNjg5NH0.4wlAsT_D5gDiBQ19WA-q5zu105fT9TsD1NKI_tGQt-4',
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=app.js.map
|
package/dist/app.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,KAAK;IACL,OAAO,EAAE,WAAW;IACpB,WAAW,EAAE,aAAa,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1D,QAAQ,EAAE;QACR,GAAG,EAAE,0CAA0C;QAC/C,OAAO,EACL,kNAAkN;KACrN;CACsB,CAAC"}
|
package/dist/brand.js
CHANGED
|
@@ -1,54 +1,30 @@
|
|
|
1
|
-
import { homedir } from 'node:os';
|
|
2
|
-
import { join } from 'node:path';
|
|
3
|
-
/**
|
|
4
|
-
* Fonte única de verdade de marca/atribuição do CLI. Rebrandear = editar este arquivo — ao
|
|
5
|
-
* trocar, casar em lockstep: `package.json` (`name`/`bin`/`description`/`keywords`/`repository`)
|
|
6
|
-
* e os docs .md que citam tools literalmente (CLAUDE.md, SKILL.md, docs/specs/**\/*.md, e o `brand.skillsRepo` externo).
|
|
7
|
-
* A tabela de tools do README é GERADA — depois de editar aqui, rode `bun run gen:docs`.
|
|
8
|
-
*/
|
|
9
1
|
export const brand = {
|
|
10
|
-
// --- Identidade / display ---
|
|
11
|
-
/** Nome do comando/binário principal (nome no help do CLI + `bin` do package.json). */
|
|
12
2
|
name: 'noclaf',
|
|
13
|
-
|
|
3
|
+
locale: 'pt-BR',
|
|
14
4
|
productName: 'NOS',
|
|
15
|
-
/** Nome completo do produto. */
|
|
16
5
|
productFullName: 'Noclaf Operation System',
|
|
17
|
-
/** Empresa / fornecedor. */
|
|
18
|
-
company: 'Falcao-Tech',
|
|
19
|
-
/** Pacote npm — usado nas mensagens de atualização. */
|
|
20
6
|
packageName: '@noclaf/cli',
|
|
21
|
-
/** Binário do servidor MCP (segundo `bin` do package.json). */
|
|
22
7
|
mcpBinName: 'noclaf-cli',
|
|
23
|
-
/** Chave sob a qual o servidor MCP é registrado nos configs dos clientes. */
|
|
24
8
|
mcpServerKey: 'noclaf',
|
|
25
|
-
// --- URLs / endpoints ---
|
|
26
|
-
/** Base do app web — onde o usuário gera o PAT. */
|
|
27
9
|
webUrl: 'https://nos.noclaf.com.br',
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
10
|
+
patPath: '/profile#mcp',
|
|
11
|
+
icon: 'https://nos.noclaf.com.br/logo-nos-192.png',
|
|
12
|
+
repoUrl: 'https://github.com/Falcao-Tech/noclaf-cli',
|
|
13
|
+
displayName: 'Noclaf (NOS)',
|
|
14
|
+
authorName: 'Noclaf Tech',
|
|
15
|
+
authorUrl: 'https://github.com/Falcao-Tech',
|
|
33
16
|
homeDirName: '.noclaf',
|
|
34
|
-
/** Arquivo de binding do projeto na raiz do repo. */
|
|
35
17
|
projectConfigFile: 'noclaf.json',
|
|
36
|
-
|
|
37
|
-
/** Prefixo das env vars: `NOCLAF` → `NOCLAF_PAT`, `NOCLAF_CLIENT`, … Contrato externo: Cowork/Codex setam `NOCLAF_CLIENT` de fora — trocar aqui exige trocar lá também. */
|
|
18
|
+
/** Contrato externo: clientes MCP setam `<PREFIX>_CLIENT` de fora. */
|
|
38
19
|
envPrefix: 'NOCLAF',
|
|
39
20
|
/** Prefixo do PAT. ATENÇÃO: o backend também valida esse formato. */
|
|
40
21
|
patPrefix: 'noc_',
|
|
41
|
-
// --- Repo de skills ---
|
|
42
22
|
skillsRepo: 'Falcao-Tech/noclaf-skills',
|
|
43
23
|
skillsRef: 'main',
|
|
44
|
-
/** Pacote npm das skills — citado em mensagens de erro de "pacote não encontrado". */
|
|
45
24
|
skillsPackage: '@noclaf/skills',
|
|
46
|
-
//
|
|
47
|
-
/** Tools de domínio do produto: `nos_list_tasks`, `nos_move_task`, … (16 tools). */
|
|
25
|
+
// Clientes MCP validam `^[a-zA-Z0-9_-]{1,64}$`: só minúsculas/dígitos, terminando em `_`.
|
|
48
26
|
toolPrefix: 'nos_',
|
|
49
|
-
/** Tools que espelham verbos do CLI: `noclaf_plan`, `noclaf_exec_status`, … (4 tools). */
|
|
50
27
|
cliToolPrefix: 'noclaf_',
|
|
51
|
-
/** Arte ASCII mostrada no `--help`. */
|
|
52
28
|
logo: `
|
|
53
29
|
_ _ _ __
|
|
54
30
|
| \\ | | ___ ___| | __ _ / _|
|
|
@@ -66,20 +42,4 @@ export const brand = {
|
|
|
66
42
|
|___/
|
|
67
43
|
`,
|
|
68
44
|
};
|
|
69
|
-
// ponytail: prefixo do PAT assumido alfanumérico + `_`; se um dia tiver metachar de
|
|
70
|
-
// regex, escapar antes de interpolar.
|
|
71
|
-
/** Regex do formato do PAT, derivada do prefixo: `noc_` + 64 hex. */
|
|
72
|
-
export const patRegex = new RegExp(`^${brand.patPrefix}[a-f0-9]{64}$`);
|
|
73
|
-
/** Caminho dentro do dir de dados: `homePath('skills')` → `~/.noclaf/skills`. */
|
|
74
|
-
export function homePath(...parts) {
|
|
75
|
-
return join(homedir(), brand.homeDirName, ...parts);
|
|
76
|
-
}
|
|
77
|
-
/** NOME completo da env var: `envName('CLIENT')` → `'NOCLAF_CLIENT'`. */
|
|
78
|
-
export function envName(name) {
|
|
79
|
-
return `${brand.envPrefix}_${name}`;
|
|
80
|
-
}
|
|
81
|
-
/** VALOR da env var prefixada: `env('PAT')` → `process.env.NOCLAF_PAT`. */
|
|
82
|
-
export function env(name) {
|
|
83
|
-
return process.env[envName(name)];
|
|
84
|
-
}
|
|
85
45
|
//# sourceMappingURL=brand.js.map
|
package/dist/brand.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brand.js","sourceRoot":"","sources":["../src/brand.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"brand.js","sourceRoot":"","sources":["../src/brand.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE,OAAO;IACf,WAAW,EAAE,KAAK;IAClB,eAAe,EAAE,yBAAyB;IAC1C,WAAW,EAAE,aAAa;IAC1B,UAAU,EAAE,YAAY;IACxB,YAAY,EAAE,QAAQ;IAEtB,MAAM,EAAE,2BAA2B;IACnC,OAAO,EAAE,cAAc;IACvB,IAAI,EAAE,4CAA4C;IAClD,OAAO,EAAE,2CAA2C;IACpD,WAAW,EAAE,cAAc;IAC3B,UAAU,EAAE,aAAa;IACzB,SAAS,EAAE,gCAAgC;IAE3C,WAAW,EAAE,SAAS;IACtB,iBAAiB,EAAE,aAAa;IAEhC,sEAAsE;IACtE,SAAS,EAAE,QAAQ;IACnB,qEAAqE;IACrE,SAAS,EAAE,MAAM;IAEjB,UAAU,EAAE,2BAA2B;IACvC,SAAS,EAAE,MAAM;IACjB,aAAa,EAAE,gBAAgB;IAE/B,0FAA0F;IAC1F,UAAU,EAAE,MAAM;IAClB,aAAa,EAAE,SAAS;IACxB,IAAI,EAAE;;;;;;;;;;;;;;;CAeP;CACyB,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -1,39 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
import { notifyCliIfUpdate } from "./lib/version-check.js";
|
|
6
|
-
import { registerAuthCommands } from "./cli/commands/auth.js";
|
|
7
|
-
import { registerInitCommand } from "./cli/commands/init/index.js";
|
|
8
|
-
import { registerSyncCommand } from "./cli/commands/sync.js";
|
|
9
|
-
import { registerSkillsCommands } from "./cli/commands/skills.js";
|
|
10
|
-
import { registerCleanCommand } from "./cli/commands/clean.js";
|
|
11
|
-
import { registerExecCommand } from "./cli/commands/exec.js";
|
|
12
|
-
import { registerPlanCommand } from "./cli/commands/plan.js";
|
|
13
|
-
import { registerValidatePlanCommand } from "./cli/commands/validate-plan.js";
|
|
14
|
-
import { registerWaveCommand } from "./cli/commands/wave.js";
|
|
15
|
-
import { registerMapCommand } from "./cli/commands/map.js";
|
|
16
|
-
import { registerCompletionCommand } from "./cli/commands/completion.js";
|
|
17
|
-
notifyCliIfUpdate();
|
|
18
|
-
const program = new Command();
|
|
19
|
-
program
|
|
20
|
-
.name(brand.name)
|
|
21
|
-
.description(`CLI do ${brand.productName} (${brand.productFullName})`)
|
|
22
|
-
.version(VERSION)
|
|
23
|
-
.addHelpText("beforeAll", brand.logo);
|
|
24
|
-
registerAuthCommands(program);
|
|
25
|
-
registerInitCommand(program);
|
|
26
|
-
registerSyncCommand(program);
|
|
27
|
-
registerSkillsCommands(program);
|
|
28
|
-
registerCleanCommand(program);
|
|
29
|
-
registerExecCommand(program);
|
|
30
|
-
registerPlanCommand(program);
|
|
31
|
-
registerValidatePlanCommand(program);
|
|
32
|
-
registerWaveCommand(program);
|
|
33
|
-
registerMapCommand(program);
|
|
34
|
-
registerCompletionCommand(program);
|
|
35
|
-
program.parseAsync(process.argv).catch((err) => {
|
|
36
|
-
console.error(`Erro: ${err.message}`);
|
|
37
|
-
process.exit(1);
|
|
38
|
-
});
|
|
2
|
+
import { runCli } from '@noclaf/cli-core/cli';
|
|
3
|
+
import { options } from './app.js';
|
|
4
|
+
await runCli(options);
|
|
39
5
|
//# 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":";AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnC,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC"}
|
package/dist/mcp-server.js
CHANGED
|
@@ -1,189 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
import { VERSION } from './version.js';
|
|
6
|
-
import { loadProjectConfig } from './config.js';
|
|
7
|
-
import { createSession } from './session-factory.js';
|
|
8
|
-
import { tools, toolDefinitions } from './tools/index.js';
|
|
9
|
-
import { errorResult } from './lib/tool-result.js';
|
|
10
|
-
import { notifyMcpServerIfUpdate } from './lib/version-check.js';
|
|
11
|
-
import { filterSkillsForSurface } from './lib/skills.js';
|
|
12
|
-
import { loadSkills, skillResourceDescriptors, readSkillResource, skillPromptDescriptors, buildSkillPrompt, } from './lib/skill-serve.js';
|
|
13
|
-
import { provision } from './lib/provision.js';
|
|
14
|
-
import { provisionHooks } from './lib/hooks.js';
|
|
15
|
-
import { claudeTarget } from './lib/targets.js';
|
|
16
|
-
import { ensureSkillsCache } from './lib/skills-cache.js';
|
|
17
|
-
import { shouldRunAutoPull, pickProvisionTarget } from './lib/autopull.js';
|
|
18
|
-
import { brand, env } from './brand.js';
|
|
19
|
-
/** Carrega o config do projeto; erro de parse é degradado (log + null), nunca fatal. */
|
|
20
|
-
function loadConfigStep() {
|
|
21
|
-
try {
|
|
22
|
-
return loadProjectConfig();
|
|
23
|
-
}
|
|
24
|
-
catch (err) {
|
|
25
|
-
console.error(`[${brand.mcpBinName}] ${brand.projectConfigFile} inválido: ${err.message}`);
|
|
26
|
-
return null;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
// Skills vêm de um repo aberto → garante o cache local (~/.noclaf/skills) antes
|
|
30
|
-
// de servir/auto-pull. Baixa só se ausente; best-effort (offline → degrada).
|
|
31
|
-
async function initSkillsCache() {
|
|
32
|
-
try {
|
|
33
|
-
const r = await ensureSkillsCache();
|
|
34
|
-
if (r.status === 'fetched') {
|
|
35
|
-
console.error(`[${brand.mcpBinName}] skills baixadas (${r.repo}@${r.ref})`);
|
|
36
|
-
}
|
|
37
|
-
else if (r.status === 'failed') {
|
|
38
|
-
console.error(`[${brand.mcpBinName}] aviso: skills indisponíveis: ${r.error}`);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
catch (err) {
|
|
42
|
-
console.error(`[${brand.mcpBinName}] aviso: cache de skills pulado: ${err.message}`);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
async function authenticateSession() {
|
|
46
|
-
try {
|
|
47
|
-
const session = await createSession();
|
|
48
|
-
console.error(`[${brand.mcpBinName}] autenticado como ${session.user.email}`);
|
|
49
|
-
return session;
|
|
50
|
-
}
|
|
51
|
-
catch (err) {
|
|
52
|
-
console.error(`[${brand.mcpBinName}] aviso: ${err.message}`);
|
|
53
|
-
return null;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
/** Surface deste worker (pra filtro de visibilidade `clients:`). Cowork seta
|
|
57
|
-
* NOCLAF_CLIENT=cowork; Claude Code costuma deixar vazio → sem filtro (mostra tudo). */
|
|
58
|
-
function resolveSurface() {
|
|
59
|
-
return env('CLIENT') || null;
|
|
60
|
-
}
|
|
61
|
-
function registerToolHandlers(server, session, projectConfig) {
|
|
62
|
-
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
63
|
-
tools: toolDefinitions,
|
|
64
|
-
}));
|
|
65
|
-
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
66
|
-
const tool = tools[request.params.name];
|
|
67
|
-
if (!tool) {
|
|
68
|
-
return errorResult(`Tool desconhecida: ${request.params.name}`);
|
|
69
|
-
}
|
|
70
|
-
if (!session) {
|
|
71
|
-
return errorResult(`Não autenticado. Rode \`${brand.name} login\` antes de iniciar o Claude Code.`);
|
|
72
|
-
}
|
|
73
|
-
const ctx = {
|
|
74
|
-
gateway: session.gateway,
|
|
75
|
-
user: session.user,
|
|
76
|
-
config: projectConfig,
|
|
77
|
-
};
|
|
78
|
-
try {
|
|
79
|
-
return await tool.handler(request.params.arguments ?? {}, ctx);
|
|
80
|
-
}
|
|
81
|
-
catch (err) {
|
|
82
|
-
return errorResult(`Erro inesperado em ${request.params.name}: ${err.message}`);
|
|
83
|
-
}
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
// Resources: o conhecimento (skills/commands/agents) do pacote @noclaf/skills.
|
|
87
|
-
// Deixa o worker de IA ler os artefatos sob demanda, mesmo sem rodar `noclaf sync`.
|
|
88
|
-
function registerResourceHandlers(server, surface) {
|
|
89
|
-
server.setRequestHandler(ListResourcesRequestSchema, async () => {
|
|
90
|
-
try {
|
|
91
|
-
const { docs } = loadSkills();
|
|
92
|
-
return { resources: skillResourceDescriptors(filterSkillsForSurface(docs, surface)) };
|
|
93
|
-
}
|
|
94
|
-
catch (err) {
|
|
95
|
-
console.error(`[${brand.mcpBinName}] aviso: skills indisponíveis: ${err.message}`);
|
|
96
|
-
return { resources: [] };
|
|
97
|
-
}
|
|
98
|
-
});
|
|
99
|
-
server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
|
|
100
|
-
const { docs, rawByPath } = loadSkills();
|
|
101
|
-
const r = readSkillResource(request.params.uri, filterSkillsForSurface(docs, surface), rawByPath);
|
|
102
|
-
return { contents: [{ uri: r.uri, mimeType: r.mimeType, text: r.text }] };
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
// Prompts: commands/skills como prompts invocáveis. Funciona no Claude Code E no
|
|
106
|
-
// Cowork (que não lê `~/.claude`) — é o caminho de slash-command lá.
|
|
107
|
-
function registerPromptHandlers(server, surface, session) {
|
|
108
|
-
server.setRequestHandler(ListPromptsRequestSchema, async () => {
|
|
109
|
-
try {
|
|
110
|
-
const { docs } = loadSkills();
|
|
111
|
-
return { prompts: skillPromptDescriptors(filterSkillsForSurface(docs, surface)) };
|
|
112
|
-
}
|
|
113
|
-
catch (err) {
|
|
114
|
-
console.error(`[${brand.mcpBinName}] aviso: prompts indisponíveis: ${err.message}`);
|
|
115
|
-
return { prompts: [] };
|
|
116
|
-
}
|
|
117
|
-
});
|
|
118
|
-
server.setRequestHandler(GetPromptRequestSchema, async (request) => {
|
|
119
|
-
const visible = filterSkillsForSurface(loadSkills().docs, surface);
|
|
120
|
-
const { description, text } = buildSkillPrompt(request.params.name, request.params.arguments, visible);
|
|
121
|
-
// Telemetria de uso (Cowork): qual skill/command foi invocado (id estável + nome).
|
|
122
|
-
session?.gateway.track({
|
|
123
|
-
type: 'prompt',
|
|
124
|
-
client: surface ?? 'unknown',
|
|
125
|
-
id: visible.find((d) => d.id === request.params.name)?.uid ?? null,
|
|
126
|
-
name: request.params.name,
|
|
127
|
-
});
|
|
128
|
-
return {
|
|
129
|
-
description,
|
|
130
|
-
messages: [{ role: 'user', content: { type: 'text', text } }],
|
|
131
|
-
};
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
// Hooks (só Claude Code): re-registra os gatilhos no settings.json.
|
|
135
|
-
function reinstallHooksIfClaude(target, projectConfig) {
|
|
136
|
-
if (target !== claudeTarget)
|
|
137
|
-
return;
|
|
138
|
-
const h = provisionHooks({
|
|
139
|
-
surface: claudeTarget.surface,
|
|
140
|
-
selection: projectConfig?.selection,
|
|
141
|
-
});
|
|
142
|
-
if (h.installed.length > 0 || h.prunedScripts.length > 0) {
|
|
143
|
-
console.error(`[${brand.mcpBinName}] auto-pull: ${h.installed.length} hooks, ` +
|
|
144
|
-
`${h.prunedScripts.length} removidos em ${h.settingsPath}.`);
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
// Auto-pull: a cada start, refresca os arquivos nativos (idempotente via manifesto;
|
|
148
|
-
// desliga com NOCLAF_AUTO_PULL=0). No Cowork as skills chegam por resources/prompts,
|
|
149
|
-
// não por arquivo nativo — então pulamos.
|
|
150
|
-
async function runAutoPull(projectConfig) {
|
|
151
|
-
const client = env('CLIENT');
|
|
152
|
-
const autoPull = env('AUTO_PULL');
|
|
153
|
-
if (!shouldRunAutoPull(client, autoPull))
|
|
154
|
-
return;
|
|
155
|
-
const target = pickProvisionTarget(client);
|
|
156
|
-
try {
|
|
157
|
-
const result = provision({ target, selection: projectConfig?.selection });
|
|
158
|
-
const changed = result.files.filter((f) => f.action === 'create' || f.action === 'update');
|
|
159
|
-
const pruned = result.files.filter((f) => f.action === 'prune');
|
|
160
|
-
if (changed.length > 0 || pruned.length > 0) {
|
|
161
|
-
console.error(`[${brand.mcpBinName}] auto-pull: ${changed.length} atualizados, ` +
|
|
162
|
-
`${pruned.length} removidos em ${result.targetDir}. Reinicie o cliente pra carregar.`);
|
|
163
|
-
}
|
|
164
|
-
reinstallHooksIfClaude(target, projectConfig);
|
|
165
|
-
}
|
|
166
|
-
catch (err) {
|
|
167
|
-
console.error(`[${brand.mcpBinName}] auto-pull pulou: ${err.message}`);
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
async function main() {
|
|
171
|
-
const projectConfig = loadConfigStep();
|
|
172
|
-
await initSkillsCache();
|
|
173
|
-
const session = await authenticateSession();
|
|
174
|
-
const server = new Server({ name: brand.mcpBinName, version: VERSION }, { capabilities: { tools: {}, resources: {}, prompts: {} } });
|
|
175
|
-
const surface = resolveSurface();
|
|
176
|
-
registerToolHandlers(server, session, projectConfig);
|
|
177
|
-
registerResourceHandlers(server, surface);
|
|
178
|
-
registerPromptHandlers(server, surface, session);
|
|
179
|
-
notifyMcpServerIfUpdate();
|
|
180
|
-
const transport = new StdioServerTransport();
|
|
181
|
-
await server.connect(transport);
|
|
182
|
-
console.error(`[${brand.mcpBinName}] servidor iniciado (stdio)`);
|
|
183
|
-
await runAutoPull(projectConfig);
|
|
184
|
-
}
|
|
185
|
-
main().catch((err) => {
|
|
186
|
-
console.error(`[${brand.mcpBinName}] erro fatal: ${err.message}`);
|
|
187
|
-
process.exit(1);
|
|
188
|
-
});
|
|
2
|
+
import { runMcpServer } from '@noclaf/cli-core/mcp';
|
|
3
|
+
import { options } from './app.js';
|
|
4
|
+
await runMcpServer(options);
|
|
189
5
|
//# sourceMappingURL=mcp-server.js.map
|
package/dist/mcp-server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnC,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@noclaf/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "MCP server e CLI pra controlar o NOS (Noclaf Operation System) a partir de assistentes de IA como Claude Code, Codex CLI e GitHub Copilot.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -35,29 +35,20 @@
|
|
|
35
35
|
"nos"
|
|
36
36
|
],
|
|
37
37
|
"scripts": {
|
|
38
|
-
"build": "
|
|
39
|
-
"gen:docs": "bun run scripts/gen-reference.ts",
|
|
38
|
+
"build": "rm -rf dist && tsc && chmod +x dist/cli.js dist/mcp-server.js",
|
|
40
39
|
"dev:cli": "bun run src/cli.ts",
|
|
41
40
|
"dev:mcp": "bun run src/mcp-server.ts",
|
|
42
|
-
"
|
|
43
|
-
"prepublishOnly": "bun run build"
|
|
41
|
+
"test": "bun test",
|
|
42
|
+
"prepublishOnly": "bun run build",
|
|
43
|
+
"lint": "prettier --check . && tsc --noEmit",
|
|
44
|
+
"format": "prettier --write ."
|
|
44
45
|
},
|
|
45
46
|
"dependencies": {
|
|
46
|
-
"@
|
|
47
|
-
"@modelcontextprotocol/sdk": "^1.0.4",
|
|
48
|
-
"@supabase/supabase-js": "^2.49.1",
|
|
49
|
-
"adm-zip": "^0.5.17",
|
|
50
|
-
"boxen": "^7.1.1",
|
|
51
|
-
"chalk": "^5.6.2",
|
|
52
|
-
"commander": "^12.1.0",
|
|
53
|
-
"smol-toml": "^1.6.1",
|
|
54
|
-
"update-notifier": "^7.3.1",
|
|
55
|
-
"zod": "^4.4.3"
|
|
47
|
+
"@noclaf/cli-core": "^1.1.0"
|
|
56
48
|
},
|
|
57
49
|
"devDependencies": {
|
|
58
|
-
"@types/adm-zip": "^0.5.8",
|
|
59
50
|
"@types/node": "^22.10.5",
|
|
60
|
-
"
|
|
51
|
+
"prettier": "^3.9.9",
|
|
61
52
|
"typescript": "^5.4.5"
|
|
62
53
|
}
|
|
63
54
|
}
|