@nio-cli/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 +332 -139
- package/dist/adapters/docker/docker-gateway.js +100 -0
- package/dist/adapters/docker/docker-gateway.js.map +1 -0
- package/dist/adapters/ide/ide-gateway.js +50 -0
- package/dist/adapters/ide/ide-gateway.js.map +1 -0
- package/dist/adapters/lang/knowledge-store.js +97 -0
- package/dist/adapters/lang/knowledge-store.js.map +1 -0
- package/dist/adapters/lang/language-catalog.js +86 -0
- package/dist/adapters/lang/language-catalog.js.map +1 -0
- package/dist/adapters/lang/package-map.js +98 -0
- package/dist/adapters/lang/package-map.js.map +1 -0
- package/dist/adapters/lang/project-detector.js +40 -0
- package/dist/adapters/lang/project-detector.js.map +1 -0
- package/dist/adapters/lang/repos.js +8 -0
- package/dist/adapters/lang/repos.js.map +1 -0
- package/dist/adapters/lang/scaffold-gateway.js +135 -0
- package/dist/adapters/lang/scaffold-gateway.js.map +1 -0
- package/dist/adapters/lang/vendor.js +52 -0
- package/dist/adapters/lang/vendor.js.map +1 -0
- package/dist/adapters/pg/auth-session-repository.js +41 -0
- package/dist/adapters/pg/auth-session-repository.js.map +1 -0
- package/dist/adapters/pg/client.js +74 -0
- package/dist/adapters/pg/client.js.map +1 -0
- package/dist/adapters/pg/dependency-event-repository.js +40 -0
- package/dist/adapters/pg/dependency-event-repository.js.map +1 -0
- package/dist/adapters/pg/login-challenge-repository.js +54 -0
- package/dist/adapters/pg/login-challenge-repository.js.map +1 -0
- package/dist/adapters/pg/session-repository.js +70 -0
- package/dist/adapters/pg/session-repository.js.map +1 -0
- package/dist/adapters/pg/user-repository.js +71 -0
- package/dist/adapters/pg/user-repository.js.map +1 -0
- package/dist/adapters/pkg/toolchain-gateway.js +35 -0
- package/dist/adapters/pkg/toolchain-gateway.js.map +1 -0
- package/dist/adapters/skills/recipe-catalog.js +84 -0
- package/dist/adapters/skills/recipe-catalog.js.map +1 -0
- package/dist/adapters/sms/http-generic.js +50 -0
- package/dist/adapters/sms/http-generic.js.map +1 -0
- package/dist/app/dependency-watcher.js +87 -0
- package/dist/app/dependency-watcher.js.map +1 -0
- package/dist/app/docker-manager.js +110 -0
- package/dist/app/docker-manager.js.map +1 -0
- package/dist/app/environment-builder.js +73 -0
- package/dist/app/environment-builder.js.map +1 -0
- package/dist/app/language-configurator.js +30 -0
- package/dist/app/language-configurator.js.map +1 -0
- package/dist/app/session-manager.js +124 -0
- package/dist/app/session-manager.js.map +1 -0
- package/dist/brand.js +3 -61
- package/dist/brand.js.map +1 -1
- package/dist/cli/commands/agents.js +30 -0
- package/dist/cli/commands/agents.js.map +1 -0
- package/dist/cli/commands/auth.js +122 -90
- package/dist/cli/commands/auth.js.map +1 -1
- package/dist/cli/commands/clean.js +1 -13
- package/dist/cli/commands/clean.js.map +1 -1
- package/dist/cli/commands/command.js +58 -0
- package/dist/cli/commands/command.js.map +1 -0
- package/dist/cli/commands/completion.js +0 -3
- package/dist/cli/commands/completion.js.map +1 -1
- package/dist/cli/commands/config.js +41 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/debug.js +93 -0
- package/dist/cli/commands/debug.js.map +1 -0
- package/dist/cli/commands/deps.js +94 -0
- package/dist/cli/commands/deps.js.map +1 -0
- package/dist/cli/commands/docker.js +360 -0
- package/dist/cli/commands/docker.js.map +1 -0
- package/dist/cli/commands/docs/content.js +199 -0
- package/dist/cli/commands/docs/content.js.map +1 -0
- package/dist/cli/commands/docs/dynamic.js +42 -0
- package/dist/cli/commands/docs/dynamic.js.map +1 -0
- package/dist/cli/commands/docs/html.js +108 -0
- package/dist/cli/commands/docs/html.js.map +1 -0
- package/dist/cli/commands/docs/terminal.js +42 -0
- package/dist/cli/commands/docs/terminal.js.map +1 -0
- package/dist/cli/commands/docs.js +34 -0
- package/dist/cli/commands/docs.js.map +1 -0
- package/dist/cli/commands/exec.js +2 -7
- package/dist/cli/commands/exec.js.map +1 -1
- package/dist/cli/commands/init/auth-step.js +9 -45
- package/dist/cli/commands/init/auth-step.js.map +1 -1
- package/dist/cli/commands/init/clients-step.js +12 -39
- package/dist/cli/commands/init/clients-step.js.map +1 -1
- package/dist/cli/commands/init/context-step.js +7 -33
- package/dist/cli/commands/init/context-step.js.map +1 -1
- package/dist/cli/commands/init/index.js +177 -33
- package/dist/cli/commands/init/index.js.map +1 -1
- package/dist/cli/commands/init/lang-step.js +40 -0
- package/dist/cli/commands/init/lang-step.js.map +1 -0
- package/dist/cli/commands/init/profile-step.js +43 -0
- package/dist/cli/commands/init/profile-step.js.map +1 -0
- package/dist/cli/commands/init/provision-step.js +8 -23
- package/dist/cli/commands/init/provision-step.js.map +1 -1
- package/dist/cli/commands/init/recipe-step.js +18 -0
- package/dist/cli/commands/init/recipe-step.js.map +1 -0
- package/dist/cli/commands/lang.js +27 -0
- package/dist/cli/commands/lang.js.map +1 -0
- package/dist/cli/commands/open.js +51 -0
- package/dist/cli/commands/open.js.map +1 -0
- package/dist/cli/commands/plan.js +2 -6
- package/dist/cli/commands/plan.js.map +1 -1
- package/dist/cli/commands/security.js +143 -0
- package/dist/cli/commands/security.js.map +1 -0
- package/dist/cli/commands/sessions.js +92 -0
- package/dist/cli/commands/sessions.js.map +1 -0
- package/dist/cli/commands/skills.js +1 -1
- package/dist/cli/commands/skills.js.map +1 -1
- package/dist/cli/commands/sync.js +52 -58
- package/dist/cli/commands/sync.js.map +1 -1
- package/dist/cli/commands/validate-plan.js +2 -6
- package/dist/cli/commands/validate-plan.js.map +1 -1
- package/dist/cli/copy/auth.json +9 -2
- package/dist/cli/copy/init.json +2 -6
- package/dist/cli/copy.js +0 -8
- package/dist/cli/copy.js.map +1 -1
- package/dist/cli/flows/clients.js +3 -94
- package/dist/cli/flows/clients.js.map +1 -1
- package/dist/cli/flows/completion.js +1 -6
- package/dist/cli/flows/completion.js.map +1 -1
- package/dist/cli/flows/dependencies.js +1 -18
- package/dist/cli/flows/dependencies.js.map +1 -1
- package/dist/cli/flows/sections.js +2 -10
- package/dist/cli/flows/sections.js.map +1 -1
- package/dist/cli/flows/user-config.js +5 -10
- package/dist/cli/flows/user-config.js.map +1 -1
- package/dist/cli/ui/render.js +2 -53
- package/dist/cli/ui/render.js.map +1 -1
- package/dist/cli/ui/report.js +0 -13
- package/dist/cli/ui/report.js.map +1 -1
- package/dist/cli.js +23 -0
- package/dist/cli.js.map +1 -1
- package/dist/config.js +27 -56
- package/dist/config.js.map +1 -1
- package/dist/core/docker.js +2 -0
- package/dist/core/docker.js.map +1 -0
- package/dist/core/environment.js +2 -0
- package/dist/core/environment.js.map +1 -0
- package/dist/core/lang.js +11 -0
- package/dist/core/lang.js.map +1 -0
- package/dist/core/messaging.js +2 -0
- package/dist/core/messaging.js.map +1 -0
- package/dist/core/repositories.js +2 -0
- package/dist/core/repositories.js.map +1 -0
- package/dist/core/types.js +0 -5
- package/dist/core/types.js.map +1 -1
- package/dist/gateway/config.js +14 -0
- package/dist/gateway/config.js.map +1 -0
- package/dist/gateway/edge-filter.js +55 -0
- package/dist/gateway/edge-filter.js.map +1 -0
- package/dist/gateway/index.js +176 -0
- package/dist/gateway/index.js.map +1 -0
- package/dist/gateway/middleware/auth.js +34 -0
- package/dist/gateway/middleware/auth.js.map +1 -0
- package/dist/gateway/services/login.js +112 -0
- package/dist/gateway/services/login.js.map +1 -0
- package/dist/gateway/services/security.js +99 -0
- package/dist/gateway/services/security.js.map +1 -0
- package/dist/lib/auth/backup-codes.js +46 -0
- package/dist/lib/auth/backup-codes.js.map +1 -0
- package/dist/lib/auth/gateway-client.js +106 -0
- package/dist/lib/auth/gateway-client.js.map +1 -0
- package/dist/lib/auth/gateway-token.js +26 -0
- package/dist/lib/auth/gateway-token.js.map +1 -0
- package/dist/lib/auth/nio-config.js +138 -0
- package/dist/lib/auth/nio-config.js.map +1 -0
- package/dist/lib/auth/otp.js +23 -0
- package/dist/lib/auth/otp.js.map +1 -0
- package/dist/lib/auth/password.js +23 -0
- package/dist/lib/auth/password.js.map +1 -0
- package/dist/lib/auth/session-store.js +49 -0
- package/dist/lib/auth/session-store.js.map +1 -0
- package/dist/lib/clients/autopull.js +8 -0
- package/dist/lib/clients/autopull.js.map +1 -0
- package/dist/lib/{client-configs.js → clients/client-configs.js} +99 -34
- package/dist/lib/clients/client-configs.js.map +1 -0
- package/dist/lib/clients/client-install.js +20 -0
- package/dist/lib/clients/client-install.js.map +1 -0
- package/dist/lib/{harness.js → clients/harness.js} +1 -16
- package/dist/lib/clients/harness.js.map +1 -0
- package/dist/lib/{hooks.js → clients/hooks.js} +5 -31
- package/dist/lib/clients/hooks.js.map +1 -0
- package/dist/lib/{targets.js → clients/targets.js} +17 -53
- package/dist/lib/clients/targets.js.map +1 -0
- package/dist/lib/colors.js +0 -24
- package/dist/lib/colors.js.map +1 -1
- package/dist/lib/cowork-extension.js +2 -25
- package/dist/lib/cowork-extension.js.map +1 -1
- package/dist/lib/{dependencies.js → deps/dependencies.js} +1 -26
- package/dist/lib/deps/dependencies.js.map +1 -0
- package/dist/lib/deps/dependency-install-project.js +27 -0
- package/dist/lib/deps/dependency-install-project.js.map +1 -0
- package/dist/lib/{dependency-install.js → deps/dependency-install.js} +10 -35
- package/dist/lib/deps/dependency-install.js.map +1 -0
- package/dist/lib/deps/dependency-installed.js +64 -0
- package/dist/lib/deps/dependency-installed.js.map +1 -0
- package/dist/lib/deps/dependency-scan.js +100 -0
- package/dist/lib/deps/dependency-scan.js.map +1 -0
- package/dist/lib/docker.js +50 -0
- package/dist/lib/docker.js.map +1 -0
- package/dist/lib/dotfiles.js +57 -0
- package/dist/lib/dotfiles.js.map +1 -0
- package/dist/lib/{exec-delegate.js → exec/exec-delegate.js} +4 -13
- package/dist/lib/exec/exec-delegate.js.map +1 -0
- package/dist/lib/{exec-engines.js → exec/exec-engines.js} +1 -10
- package/dist/lib/exec/exec-engines.js.map +1 -0
- package/dist/lib/{plan-delegate.js → exec/plan-delegate.js} +1 -7
- package/dist/lib/exec/plan-delegate.js.map +1 -0
- package/dist/lib/{validate-plan-delegate.js → exec/validate-plan-delegate.js} +2 -7
- package/dist/lib/exec/validate-plan-delegate.js.map +1 -0
- package/dist/lib/load-env.js +15 -0
- package/dist/lib/load-env.js.map +1 -0
- package/dist/lib/open-url.js +9 -0
- package/dist/lib/open-url.js.map +1 -0
- package/dist/lib/prompts.js +0 -13
- package/dist/lib/prompts.js.map +1 -1
- package/dist/lib/{provision-apply.js → provision/provision-apply.js} +4 -30
- package/dist/lib/provision/provision-apply.js.map +1 -0
- package/dist/lib/{provision-collect.js → provision/provision-collect.js} +0 -9
- package/dist/lib/provision/provision-collect.js.map +1 -0
- package/dist/lib/{provision.js → provision/provision.js} +4 -17
- package/dist/lib/provision/provision.js.map +1 -0
- package/dist/lib/{patterns.js → skills/patterns.js} +0 -13
- package/dist/lib/skills/patterns.js.map +1 -0
- package/dist/lib/{rules.js → skills/rules.js} +0 -22
- package/dist/lib/skills/rules.js.map +1 -0
- package/dist/lib/skills/sections.js +58 -0
- package/dist/lib/skills/sections.js.map +1 -0
- package/dist/lib/{skill-serve.js → skills/skill-serve.js} +1 -26
- package/dist/lib/skills/skill-serve.js.map +1 -0
- package/dist/lib/{skills-cache.js → skills/skills-cache.js} +15 -21
- package/dist/lib/skills/skills-cache.js.map +1 -0
- package/dist/lib/{skills.js → skills/skills.js} +3 -49
- package/dist/lib/skills/skills.js.map +1 -0
- package/dist/lib/spinner.js.map +1 -0
- package/dist/lib/telemetry.js +3 -20
- package/dist/lib/telemetry.js.map +1 -1
- package/dist/lib/version-check.js +0 -20
- package/dist/lib/version-check.js.map +1 -1
- package/dist/matrix-logo.js +0 -10
- package/dist/matrix-logo.js.map +1 -1
- package/dist/mcp-server-lang.js +39 -0
- package/dist/mcp-server-lang.js.map +1 -0
- package/dist/mcp-server.js +37 -41
- package/dist/mcp-server.js.map +1 -1
- package/dist/profiles/analyst.js +10 -0
- package/dist/profiles/analyst.js.map +1 -0
- package/dist/profiles/bi.js +9 -0
- package/dist/profiles/bi.js.map +1 -0
- package/dist/profiles/dba.js +21 -0
- package/dist/profiles/dba.js.map +1 -0
- package/dist/profiles/fullstack.js +9 -0
- package/dist/profiles/fullstack.js.map +1 -0
- package/dist/profiles/index.js +39 -0
- package/dist/profiles/index.js.map +1 -0
- package/dist/profiles/mcps.js +23 -0
- package/dist/profiles/mcps.js.map +1 -0
- package/dist/profiles/qa.js +10 -0
- package/dist/profiles/qa.js.map +1 -0
- package/dist/profiles/scientist.js +9 -0
- package/dist/profiles/scientist.js.map +1 -0
- package/dist/profiles/toolchains.js +9 -0
- package/dist/profiles/toolchains.js.map +1 -0
- package/dist/tools/delegate-exec.js +2 -2
- package/dist/tools/delegate-exec.js.map +1 -1
- package/dist/tools/env-detect-deps.js +54 -0
- package/dist/tools/env-detect-deps.js.map +1 -0
- package/dist/tools/env-materialize.js +43 -0
- package/dist/tools/env-materialize.js.map +1 -0
- package/dist/tools/exec-status.js +1 -1
- package/dist/tools/exec-status.js.map +1 -1
- package/dist/tools/index.js +12 -32
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/lang-recipe.js +31 -0
- package/dist/tools/lang-recipe.js.map +1 -0
- package/dist/tools/lang-reference.js +34 -0
- package/dist/tools/lang-reference.js.map +1 -0
- package/dist/tools/plan.js +2 -2
- package/dist/tools/plan.js.map +1 -1
- package/dist/tools/profile-get.js +57 -0
- package/dist/tools/profile-get.js.map +1 -0
- package/dist/tools/session-activate.js +35 -0
- package/dist/tools/session-activate.js.map +1 -0
- package/dist/tools/session-create.js +83 -0
- package/dist/tools/session-create.js.map +1 -0
- package/dist/tools/session-list.js +29 -0
- package/dist/tools/session-list.js.map +1 -0
- package/dist/tools/session-shared.js +25 -0
- package/dist/tools/session-shared.js.map +1 -0
- package/dist/tools/validate-plan.js +2 -2
- package/dist/tools/validate-plan.js.map +1 -1
- package/docker/docker-compose.yml +44 -0
- package/package.json +30 -16
- package/dist/adapters/supabase/allocation-gateway.js +0 -236
- 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/client.js +0 -96
- 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 -18
- package/dist/adapters/supabase/gateway.js.map +0 -1
- package/dist/adapters/supabase/task-gateway.js +0 -450
- package/dist/adapters/supabase/task-gateway.js.map +0 -1
- package/dist/auth.js +0 -118
- package/dist/auth.js.map +0 -1
- package/dist/cli/commands/init/project-step.js +0 -105
- package/dist/cli/commands/init/project-step.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/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/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/dependencies.js.map +0 -1
- package/dist/lib/dependency-install.js.map +0 -1
- package/dist/lib/exec-delegate.js.map +0 -1
- package/dist/lib/exec-engines.js.map +0 -1
- package/dist/lib/harness.js.map +0 -1
- package/dist/lib/hooks.js.map +0 -1
- package/dist/lib/patterns.js.map +0 -1
- 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/provision-apply.js.map +0 -1
- package/dist/lib/provision-collect.js.map +0 -1
- package/dist/lib/provision.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.map +0 -1
- package/dist/lib/sections.js +0 -89
- package/dist/lib/sections.js.map +0 -1
- package/dist/lib/skill-serve.js.map +0 -1
- package/dist/lib/skills-cache.js.map +0 -1
- package/dist/lib/skills.js.map +0 -1
- 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/validate-plan-delegate.js.map +0 -1
- package/dist/session-factory.js +0 -19
- package/dist/session-factory.js.map +0 -1
- package/dist/spinner.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-task.js +0 -129
- package/dist/tools/create-task.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-task-allocation.js +0 -37
- package/dist/tools/end-task-allocation.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-context.js +0 -48
- package/dist/tools/get-context.js.map +0 -1
- package/dist/tools/get-task.js +0 -137
- package/dist/tools/get-task.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-tasks.js +0 -93
- 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/record-delivery.js +0 -71
- package/dist/tools/record-delivery.js.map +0 -1
- package/dist/tools/set-project.js +0 -52
- package/dist/tools/set-project.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 -75
- package/dist/tools/start-task-allocation.js.map +0 -1
- package/dist/tools/update-task.js +0 -139
- package/dist/tools/update-task.js.map +0 -1
- /package/dist/{spinner.js → lib/spinner.js} +0 -0
package/README.md
CHANGED
|
@@ -1,66 +1,259 @@
|
|
|
1
|
-
|
|
2
|
-
<img src="https://avatars.githubusercontent.com/u/241520827?s=48&v=4" alt="nio" width="80" height="80" />
|
|
3
|
-
</p>
|
|
1
|
+
# NIO-CLI
|
|
4
2
|
|
|
5
|
-
|
|
3
|
+
**Orquestrador de ambientes de desenvolvimento.** Você escolhe um perfil,
|
|
4
|
+
responde um wizard, e a CLI — com auxílio de IA via MCP — materializa o ambiente:
|
|
5
|
+
toolchains, linguagens, frameworks, dotfiles, aliases e IDE. A entidade central é
|
|
6
|
+
a **Sessão**: um ambiente isolado, com UUID, persistido no Postgres.
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
> Documentação completa no terminal ou como página: `nio docs` · `nio docs --html --open`.
|
|
8
9
|
|
|
9
|
-
|
|
10
|
+
---
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
## Como funciona
|
|
12
13
|
|
|
13
|
-
|
|
14
|
-
-
|
|
15
|
-
|
|
14
|
+
```
|
|
15
|
+
você → nio (CLI) ──► nio-gateway ──► Postgres (login: senha + JWT, 2º fator opcional)
|
|
16
|
+
│
|
|
17
|
+
├──► SessionManager / EnvironmentBuilder (materializa toolchains, MCPs, dotfiles)
|
|
18
|
+
│
|
|
19
|
+
└──► opencode.json ──► OpenCode (operador de IA)
|
|
20
|
+
└── MCP `nio` (tools nio_*) ──► SessionManager ──► Postgres
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
1. **Você se autentica** (`nio register` / `nio login`). O `nio-gateway` — um
|
|
24
|
+
serviço HTTP loopback — verifica a senha (argon2id), dispara o 2º fator se
|
|
25
|
+
estiver ativo, e devolve um **JWT** salvo em `~/.nio/session.json`.
|
|
26
|
+
2. **Você monta uma sessão** (`nio init`). O wizard pergunta perfil + recipe, e o
|
|
27
|
+
`EnvironmentBuilder` garante os toolchains, resolve os MCPs e grava o `config`
|
|
28
|
+
materializado na linha `sessions` do Postgres. A sessão é isolada, tem UUID e
|
|
29
|
+
pode ser reativada depois (`nio sessions`).
|
|
30
|
+
3. **A CLI registra o MCP `nio`** no `opencode.json` e entrega o terminal pro
|
|
31
|
+
**OpenCode** (operador de IA fixo, modelo `opencode/big-pickle`). A partir daí
|
|
32
|
+
o agente tem as tools `nio_*` — criar/ativar sessão, re-materializar ambiente,
|
|
33
|
+
detectar dependências, delegar execução.
|
|
34
|
+
|
|
35
|
+
O **Postgres é a fonte da verdade** do domínio (usuários, sessões, trilha de
|
|
36
|
+
auth). A CLI e o gateway só falam com o banco que **você** configurar — não há
|
|
37
|
+
default, não há banco embutido.
|
|
38
|
+
|
|
39
|
+
---
|
|
16
40
|
|
|
17
|
-
## Instalação
|
|
41
|
+
## Instalação
|
|
18
42
|
|
|
19
|
-
Precisa
|
|
43
|
+
Precisa de **Node.js 20.12+**. Instala como pacote global:
|
|
20
44
|
|
|
21
45
|
```bash
|
|
22
46
|
npm i -g @nio-cli/cli
|
|
23
47
|
```
|
|
24
48
|
|
|
25
|
-
|
|
49
|
+
Ficam no PATH: `nio` (CLI), `nio-gateway` (serviço de auth), `nio-cli` e
|
|
50
|
+
`nio-lang` (servidores MCP).
|
|
51
|
+
|
|
52
|
+
### Pré-requisitos de runtime
|
|
53
|
+
|
|
54
|
+
| Requisito | Pra quê | Como |
|
|
55
|
+
|---|---|---|
|
|
56
|
+
| **PostgreSQL** alcançável | fonte da verdade (sessões, usuários) | schema em `db/schema.sql` aplicado uma vez |
|
|
57
|
+
| **`JWT_SECRET`** (segredo do time) | assinar/validar as sessões | mesmo valor em toda máquina |
|
|
58
|
+
| **OpenCode** | operador de IA | o `nio init` oferece instalar (`npm i -g opencode-ai`) |
|
|
59
|
+
| *(opcional)* provedor de SMS | 2º fator | `SMS_ENDPOINT_URL` + `SMS_AUTH_HEADER` + `SMS_BODY_TEMPLATE` |
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Configuração
|
|
64
|
+
|
|
65
|
+
**Você não precisa exportar nada no shell.** Rode `nio config setup` — o wizard
|
|
66
|
+
pede o `NIO_DATABASE_URL` (que o time te passa) e o `JWT_SECRET`, **testa a
|
|
67
|
+
conexão** e grava em `~/.nio/config.env` (chmod 600, nunca commitado). O `nio init`,
|
|
68
|
+
`nio register` e `nio login` disparam esse wizard sozinhos se a config faltar; se
|
|
69
|
+
estiver presente mas errada, param com uma mensagem dizendo exatamente o quê.
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
nio config setup # wizard interativo (cola os valores, testa, salva)
|
|
73
|
+
nio config check # confere: completa? banco responde? (--json pra CI)
|
|
74
|
+
nio config path # ~/.nio/config.env
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
A CLI carrega as variáveis nesta precedência (shell sempre vence os arquivos):
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
env do shell > $NIO_ENV_FILE > ./.env > ~/.nio/config.env
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Conteúdo de `~/.nio/config.env` (o wizard gera; dá pra editar à mão):
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
NIO_DATABASE_URL=postgres://usuario:senha@HOST:5432/nio_cli
|
|
87
|
+
# NIO_DATABASE_SSL=true # só se o banco exigir TLS (gerenciado/nuvem)
|
|
88
|
+
JWT_SECRET=<mesmo-valor-do-time>
|
|
89
|
+
|
|
90
|
+
# 2º fator (SMS) — opcional, só no lado do gateway
|
|
91
|
+
# SMS_ENDPOINT_URL=https://api.provedor.com/v2/sms
|
|
92
|
+
# SMS_AUTH_HEADER=X-API-TOKEN: seu-token
|
|
93
|
+
# SMS_BODY_TEMPLATE={"to":"{to}","message":"{text}"}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
> Alternativa pra time: gere o `~/.nio/config.env` uma vez e distribua o arquivo
|
|
97
|
+
> (é só `KEY=value`) — a CLI valida no primeiro comando.
|
|
98
|
+
|
|
99
|
+
| Variável | Prefixo | Lida por |
|
|
100
|
+
|---|---|---|
|
|
101
|
+
| `NIO_DATABASE_URL` / `NIO_DATABASE_SSL` | `NIO_` | tudo que toca o banco |
|
|
102
|
+
| `JWT_SECRET` / `JWT_EXPIRES_IN` | **sem** prefixo (segredo do time) | `nio-gateway` + `nio-cli` |
|
|
103
|
+
| `SMS_ENDPOINT_URL` / `SMS_AUTH_HEADER` / `SMS_BODY_TEMPLATE` / `SMS_FROM` | **sem** prefixo | `nio-gateway` |
|
|
104
|
+
| `NIO_GATEWAY_HOST` (default `127.0.0.1`) | `NIO_` | `nio-gateway` — `0.0.0.0` p/ Kong em container |
|
|
105
|
+
| `NIO_GATEWAY_URL` (default `http://127.0.0.1:8000`) | `NIO_` | a CLI, pra achar o gateway/Kong |
|
|
106
|
+
|
|
107
|
+
O schema de conexão é sempre `postgres://…`; um destino inválido falha explícito,
|
|
108
|
+
nunca cai num default silencioso.
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## Primeiros passos
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
nio config setup # cola NIO_DATABASE_URL + JWT_SECRET (o time te passa), testa, salva
|
|
116
|
+
nio-gateway & # gateway de auth no ar (precisa pro login/logout/2FA)
|
|
117
|
+
nio register # cria seu usuário na base compartilhada
|
|
118
|
+
nio login # autentica (salva o JWT em ~/.nio/session.json)
|
|
119
|
+
nio security enable-2fa # (opcional) 2º fator
|
|
120
|
+
nio init # monta o ambiente da sessão neste diretório
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Se você pular o `nio config setup`, o próprio `nio register`/`init` abre o wizard.
|
|
124
|
+
|
|
125
|
+
O `nio-gateway` só é necessário pros comandos de auth (`login`/`logout`/
|
|
126
|
+
`verify-2fa`/`security`). Todo o resto — `init`, `sessions`, as tools MCP —
|
|
127
|
+
fala com o Postgres direto usando o JWT local. Rode `nio debug` a qualquer
|
|
128
|
+
momento pra ver o que está ok e o que falta.
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## Arquitetura
|
|
133
|
+
|
|
134
|
+
Hexagonal. O núcleo não conhece IO; os adapters implementam os contratos.
|
|
135
|
+
|
|
136
|
+
```
|
|
137
|
+
entrypoints: src/cli.ts (nio) src/gateway/index.ts (nio-gateway)
|
|
138
|
+
src/mcp-server.ts (nio-cli) src/mcp-server-lang.ts (nio-lang)
|
|
139
|
+
app: SessionManager · EnvironmentBuilder · DependencyWatcher · DockerManager
|
|
140
|
+
core/: types.ts / session.ts (entidades) + ports.ts / repositories.ts
|
|
141
|
+
/ environment.ts / docker.ts / messaging.ts (interfaces, sem IO)
|
|
142
|
+
adapters/: pg/ (Postgres) ide/ (vscode) pkg/ (npm,pip,…) docker/ sms/ skills/
|
|
143
|
+
profiles/: catálogo dos 6 perfis (fixos no fonte)
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
- **Runtime:** Node 20.12+ é o alvo. Bun roda o projeto em dev, mas **nada**
|
|
147
|
+
depende de API exclusiva do Bun — só as equivalentes de `node:*`.
|
|
148
|
+
- **Build:** `tsc` puro → `dist/`. Sem bundler.
|
|
149
|
+
- **Banco:** `pg` + um `Pool` único (`src/adapters/pg/client.ts`). Sem Supabase,
|
|
150
|
+
sem PostgREST, sem `Bun.sql`.
|
|
151
|
+
- **Gateway:** `http.createServer` nativo, loopback, atrás do Kong OSS (opcional,
|
|
152
|
+
pra rate-limiting). JWT HS256, `jti` = id da `auth_session`. Trilha de auth em
|
|
153
|
+
stderr estruturado — nunca a senha nem o OTP em texto puro.
|
|
154
|
+
- **Contrato "nunca lança"** nos ports de IO (`ToolchainGateway`, `IdeGateway`,
|
|
155
|
+
`DockerGateway`, `SmsSender`): falha vira um resultado `{ status, error? }`.
|
|
156
|
+
|
|
157
|
+
Detalhes: [`docs/arch/`](docs/arch/) (uma `ARQUITETURA-*.md` por camada) e os
|
|
158
|
+
[ADRs](docs/adr/). Histórico cronológico: [`docs/PROGRESSO.md`](docs/PROGRESSO.md).
|
|
26
159
|
|
|
27
|
-
|
|
160
|
+
### Perfis
|
|
28
161
|
|
|
29
|
-
|
|
162
|
+
Fixos no fonte (`src/core/session.ts`) — novos perfis só entram alterando o código:
|
|
163
|
+
|
|
164
|
+
`fullstack` · `analyst` · `scientist` · `dba` · `qa` · `bi`
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## Autenticação
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
nio register # cria o usuário (user_cli), senha com hash argon2id
|
|
172
|
+
nio login # autentica via nio-gateway e salva o JWT em ~/.nio/session.json
|
|
173
|
+
nio whoami # mostra quem está logado (--json pra saída estável)
|
|
174
|
+
nio logout # revoga a auth_session no banco e limpa a sessão local
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### 2º fator (SMS)
|
|
178
|
+
|
|
179
|
+
Opt-in por conta. Com `auth_2` ativo, o `nio login` pede um código de 6 dígitos
|
|
180
|
+
por SMS; se o SMS não chega, vale um dos 10 **códigos de backup** (mostrados uma
|
|
181
|
+
vez no `enable-2fa`).
|
|
30
182
|
|
|
31
183
|
```bash
|
|
32
|
-
nio
|
|
184
|
+
nio security enable-2fa # cadastra o celular, confirma via SMS, mostra os backups
|
|
185
|
+
nio security status # ativo? número (mascarado)? quantos backups restam?
|
|
186
|
+
nio security disable-2fa
|
|
187
|
+
nio security regenerate-backup-codes
|
|
33
188
|
```
|
|
34
189
|
|
|
35
|
-
|
|
190
|
+
O gateway gera/valida o OTP em processo (sem Twilio, sem broker), guarda só o
|
|
191
|
+
**HMAC** do código (TTL 5 min, 3 tentativas, uso único) e manda o SMS por um
|
|
192
|
+
**adapter HTTP genérico**. Sem `SMS_ENDPOINT_URL` no ambiente, o login com
|
|
193
|
+
`auth_2` responde `503 "2FA não configurado"` — o login de 1 fator segue normal.
|
|
194
|
+
Detalhes: [spec 0004](docs/specs/auth/0004-login-2fa-sms-otp.md) ·
|
|
195
|
+
[ADR 0006](docs/adr/0006-2fa-sms-otp.md) ·
|
|
196
|
+
[`docs/arch/ARQUITETURA-GATEWAY.md`](docs/arch/ARQUITETURA-GATEWAY.md).
|
|
197
|
+
|
|
198
|
+
Pra testar sem SMS real, o repo traz um mock: `bun run dev:sms-echo` sobe um
|
|
199
|
+
endpoint local que imprime o código no terminal (aponte `SMS_ENDPOINT_URL` pra ele).
|
|
200
|
+
|
|
201
|
+
---
|
|
36
202
|
|
|
37
|
-
|
|
38
|
-
2. Lista os projetos do NOS e você escolhe um (ou cola o UUID).
|
|
39
|
-
3. (Opcional) Escolhe o repositório vinculado.
|
|
40
|
-
4. Escreve `nio.json` na raiz **e o adiciona ao `.gitignore`** (binding local, não versionado).
|
|
41
|
-
5. Mostra o contexto carregado pra você validar.
|
|
42
|
-
6. Pergunta quais clientes MCP configurar — global ou por-repo.
|
|
203
|
+
## Operador de IA
|
|
43
204
|
|
|
44
|
-
|
|
205
|
+
No fim do `nio init`, a CLI entrega o terminal pro operador de IA fixo:
|
|
206
|
+
**OpenCode** rodando `opencode/big-pickle` (default gravado no
|
|
207
|
+
`~/.config/opencode/opencode.json`, junto do MCP `nio` e dos MCPs do perfil). Ver
|
|
208
|
+
[`docs/arch/ARQUITETURA-CLIENTE-IA.md`](docs/arch/ARQUITETURA-CLIENTE-IA.md).
|
|
209
|
+
|
|
210
|
+
> Multi-cliente (OpenCode | Codex), proxy de compressão de contexto e ladder de
|
|
211
|
+
> failover entre modelos são **feature futura** — desenho parkeado em
|
|
212
|
+
> [`docs/arch/ARQUITETURA-CLIENTES-MULTI-FUTURO.md`](docs/arch/ARQUITETURA-CLIENTES-MULTI-FUTURO.md)
|
|
213
|
+
> ([ADR 0004](docs/adr/0004-operador-ia-unico.md)).
|
|
214
|
+
|
|
215
|
+
---
|
|
45
216
|
|
|
46
217
|
## Comandos do CLI
|
|
47
218
|
|
|
48
|
-
Operações do CLI, **sem o binário na frente** (declarado no cabeçalho da tabela).
|
|
49
|
-
|
|
219
|
+
Operações do CLI, **sem o binário na frente** (declarado no cabeçalho da tabela).
|
|
220
|
+
Gerada da fonte por `npm run gen:docs`. Ajuda de qualquer comando: `nio <cmd> --help`.
|
|
50
221
|
|
|
51
222
|
<!-- COMMANDS:START -->
|
|
52
|
-
<!-- gerado por `bun run gen:docs` — não edite à mão. binário `nio`,
|
|
223
|
+
<!-- gerado por `bun run gen:docs` — não edite à mão. binário `nio`, 35 comandos. -->
|
|
53
224
|
|
|
54
225
|
| Comando | Descrição |
|
|
55
226
|
| --- | --- |
|
|
56
227
|
| `clean-legacy` | Remove commands/skills legados (substituídos) de ~/.claude e ~/.codex |
|
|
57
228
|
| `completion [shell]` | Imprime o script de autocomplete (bash\|zsh\|fish). |
|
|
229
|
+
| `config` | Config compartilhada da equipe (~/.nio/config.env) |
|
|
230
|
+
| `config check` | Confere se a config está completa e o Postgres responde |
|
|
231
|
+
| `config path` | Imprime o caminho do arquivo de config |
|
|
232
|
+
| `config setup` | Wizard: cola os valores do time, testa a conexão e salva |
|
|
233
|
+
| `docker` | Camada Docker: MCP Gateway + Portainer, compose, debug e cluster (Swarm) |
|
|
234
|
+
| `docker cluster <action> [arg]` | Docker Swarm — stack `nio-cluster` (up\|down\|status\|scale) |
|
|
235
|
+
| `docker compose <action> [service]` | Wrapper sobre `docker compose` do projeto (up\|down\|restart\|ps\|logs) |
|
|
236
|
+
| `docker create` | Cria e sobe um container (wizard ou flags) |
|
|
237
|
+
| `docker debug [container]` | Coleta o contexto de um container e entrega o diagnóstico pro operador de IA |
|
|
238
|
+
| `docker orquest [instruction]` | Orquestra os serviços do projeto via compose, dirigido pelo operador (linguagem natural) |
|
|
239
|
+
| `docker portainer` | Abre o Portainer no navegador |
|
|
240
|
+
| `docker toolkit` | Infra NIO: Docker MCP Gateway + Portainer (docker/docker-compose.yml) |
|
|
241
|
+
| `docker toolkit down` | Derruba a infra e desabilita o MCP no opencode.json |
|
|
242
|
+
| `docker toolkit status` | Estado dos containers + health dos endpoints |
|
|
243
|
+
| `docker toolkit up` | Sobe a infra e registra o gateway no opencode.json |
|
|
244
|
+
| `docs` | Documentação completa da CLI (terminal ou página com --html) |
|
|
58
245
|
| `exec` | Delega a implementação a um agente headless num worktree e aguarda. |
|
|
59
246
|
| `exec-status <jobId>` | Estado de um job de execução (`nio exec`), em JSON |
|
|
60
|
-
| `init` | Cria nio.json no diretório atual
|
|
61
|
-
| `login
|
|
62
|
-
| `logout` |
|
|
247
|
+
| `init` | Cria nio.json no diretório atual e materializa o ambiente da sessão |
|
|
248
|
+
| `login` | Autentica via nio-gateway (túnel HTTP) e salva a sessão localmente (JWT) |
|
|
249
|
+
| `logout` | Encerra a sessão local e revoga a auth_session no banco |
|
|
63
250
|
| `plan` | Roda o engine pensante sobre o projeto e escreve/refina o plan.md da raiz. |
|
|
251
|
+
| `register` | Cria um novo usuário no banco (user_cli) |
|
|
252
|
+
| `security` | 2º fator do login (SMS OTP + códigos de backup) |
|
|
253
|
+
| `security disable-2fa` | Desativa o 2º fator |
|
|
254
|
+
| `security enable-2fa` | Ativa o 2º fator via SMS |
|
|
255
|
+
| `security regenerate-backup-codes` | Invalida os códigos de backup e gera 10 novos |
|
|
256
|
+
| `security status` | Mostra o estado do 2º fator |
|
|
64
257
|
| `skills` | Skills, commands e agents do nio (lidos do repo aberto via cache) |
|
|
65
258
|
| `skills status` | Lista os docs do repo de skills (cache local ~/.nio/skills) |
|
|
66
259
|
| `sync` | Instala/atualiza skills, commands e agents nos clientes configurados, a partir do bundle (idempotente); checa atualização do pacote |
|
|
@@ -68,70 +261,87 @@ gerada da fonte por `bun run gen:docs`.
|
|
|
68
261
|
| `whoami` | Mostra o usuário autenticado |
|
|
69
262
|
<!-- COMMANDS:END -->
|
|
70
263
|
|
|
264
|
+
### Diagnóstico da própria CLI
|
|
265
|
+
|
|
266
|
+
```bash
|
|
267
|
+
nio debug # bateria de checagens: nio.json, login, Postgres, sessão ativa,
|
|
268
|
+
# OpenCode no PATH, cache de skills — ✓ / ⚠ / ✗ com dica em cada
|
|
269
|
+
nio docs # documentação completa no terminal
|
|
270
|
+
nio docs --html # a mesma coisa como página (arte); --open abre no navegador
|
|
271
|
+
```
|
|
272
|
+
|
|
71
273
|
### Autocomplete (tab)
|
|
72
274
|
|
|
73
|
-
O `nio init` **oferece** ativar
|
|
74
|
-
ativar à mão, adicione ao rc do seu shell:
|
|
275
|
+
O `nio init` **oferece** ativar; o `nio sync` **valida** e prompta se faltar. À mão:
|
|
75
276
|
|
|
76
277
|
```bash
|
|
77
|
-
#
|
|
78
|
-
eval "$(nio completion
|
|
79
|
-
#
|
|
80
|
-
eval "$(nio completion bash)"
|
|
81
|
-
# fish (~/.config/fish/config.fish)
|
|
82
|
-
nio completion fish | source
|
|
278
|
+
eval "$(nio completion zsh)" # ~/.zshrc
|
|
279
|
+
eval "$(nio completion bash)" # ~/.bashrc
|
|
280
|
+
nio completion fish | source # ~/.config/fish/config.fish
|
|
83
281
|
```
|
|
84
282
|
|
|
85
|
-
|
|
283
|
+
---
|
|
86
284
|
|
|
87
|
-
##
|
|
285
|
+
## Docker (`nio docker`)
|
|
88
286
|
|
|
89
|
-
|
|
90
|
-
|
|
287
|
+
Camada de gerência de container — metade wrapper determinístico sobre `docker`,
|
|
288
|
+
metade dirigida pelo operador de IA em linguagem natural (via o **Docker MCP
|
|
289
|
+
Gateway**). Roda em qualquer Docker Engine (não exige Docker Desktop). Ver
|
|
290
|
+
[`docs/arch/ARQUITETURA-DOCKER.md`](docs/arch/ARQUITETURA-DOCKER.md) ·
|
|
291
|
+
[ADR 0005](docs/adr/0005-camada-docker.md).
|
|
91
292
|
|
|
92
|
-
|
|
93
|
-
|
|
293
|
+
```bash
|
|
294
|
+
nio docker toolkit up # sobe o MCP Gateway (127.0.0.1:8811/mcp) + Portainer (9443)
|
|
295
|
+
# e registra o gateway no opencode.json
|
|
296
|
+
nio docker compose up -f app/docker-compose.yml # wrapper sobre `docker compose` do projeto
|
|
297
|
+
nio docker create --image redis:7 --port 6379:6379
|
|
298
|
+
nio docker debug <container> # coleta ps/logs/inspect → operador analisa e propõe o fix
|
|
299
|
+
nio docker orquest "sobe api + worker + redis" # operador gera o compose e sobe (--dry-run mostra)
|
|
300
|
+
nio docker cluster up "api + worker + redis + postgres" # Docker Swarm (stack `nio-cluster`)
|
|
301
|
+
nio docker cluster status | scale api=3
|
|
302
|
+
nio docker portainer # abre a UI
|
|
303
|
+
```
|
|
94
304
|
|
|
95
|
-
|
|
305
|
+
`debug`/`orquest`/`cluster` exigem `nio login` + sessão ativa + `opencode` no
|
|
306
|
+
PATH. O estado do cluster fica em `sessions.config` (Postgres), validado contra
|
|
307
|
+
`docker stack services`.
|
|
96
308
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
| `list_my_allocations` | Lista alocações passadas do usuário (encerradas), ordenadas por data decrescente. |
|
|
107
|
-
| `list_projects` | Lista os projetos do NOS aos quais você tem acesso. |
|
|
108
|
-
| `list_tasks` | Lista tarefas do projeto atual, filtradas pelos parâmetros opcionais. |
|
|
109
|
-
| `move_task` | Atalho pra mudar o status de uma tarefa (move entre colunas do Kanban). |
|
|
110
|
-
| `record_delivery` | Registra uma ENTREGA do loop de build (um ticket concluído / PR aberto) na analítica de entrega do NOS. |
|
|
111
|
-
| `set_project` | Define o projeto ativo da sessão (em memória, dura enquanto o servidor estiver rodando). |
|
|
112
|
-
| `start_allocation` | Inicia uma alocação (bate o ponto) para o usuário atual. |
|
|
113
|
-
| `start_task_allocation` | Começa a cronometrar tempo numa task específica. |
|
|
114
|
-
| `update_task` | Atualiza campos de uma tarefa existente. |
|
|
309
|
+
---
|
|
310
|
+
|
|
311
|
+
## Tools MCP
|
|
312
|
+
|
|
313
|
+
O servidor `nio-cli` expõe as tools de ambiente v2 (todas passam pelo
|
|
314
|
+
`SessionManager` e exigem `nio login`):
|
|
315
|
+
|
|
316
|
+
<!-- TOOLS:START -->
|
|
317
|
+
<!-- gerado por `bun run gen:docs` — não edite à mão. 10 tools. -->
|
|
115
318
|
|
|
116
319
|
### Tools que espelham o CLI — prefixo `nio_`
|
|
117
320
|
|
|
118
321
|
| Operação | O que faz |
|
|
119
322
|
| --- | --- |
|
|
120
323
|
| `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. |
|
|
324
|
+
| `env_detect_deps` | Roda UM ciclo do watcher de dependências sobre a pasta da sessão: escaneia os manifests (package.json, requirements.txt, Cargo.toml), detecta o que está declarado mas não instalado e registra um evento por dependência nova (idempotente). |
|
|
325
|
+
| `env_materialize` | Re-materializa o ambiente de uma sessão existente a partir do seu perfil: garante os toolchains de novo, re-resolve os MCPs e reescreve o `config` em `sessions.config`. |
|
|
121
326
|
| `exec_status` | Estado de uma execução delegada (`nio_delegate_exec`): running \| done \| failed, com o resumo do agente, os arquivos alterados e os checks determinísticos (tamanho, lint, build, testes). |
|
|
122
327
|
| `plan` | Roda o engine PENSANTE (claude ou codex local, na assinatura — sem API) sobre a raiz do projeto e escreve/refina o `plan.md` de rascunho pré-SDD. |
|
|
328
|
+
| `profile_get` | Consulta o catálogo de perfis de ambiente (hardcoded na CLI). |
|
|
329
|
+
| `session_activate` | Ativa uma sessão de ambiente do usuário por id (o prefixo do UUID basta). |
|
|
330
|
+
| `session_create` | Cria uma sessão de ambiente pro usuário autenticado e materializa o perfil escolhido: garante os toolchains, resolve os MCPs e persiste o `config` em `sessions.config`. |
|
|
331
|
+
| `session_list` | Lista as sessões de ambiente do usuário autenticado (mais recentes primeiro), com id, nome, perfil, status e o `config` materializado. |
|
|
123
332
|
| `validate_plan` | Lê o `plan.md` da raiz 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. |
|
|
124
333
|
<!-- TOOLS:END -->
|
|
125
334
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
335
|
+
### Recipes de ambiente (repo NIO-SKILLS)
|
|
336
|
+
|
|
337
|
+
Além dos 6 perfis fixos, o repo `NIO-SKILLS-` pode carregar **recipes** em
|
|
338
|
+
`recipes/<slug>.md` — presets nomeados (`profile` + linguagens + frameworks +
|
|
339
|
+
MCPs + envVars/aliases) que **estendem** um perfil, editáveis sem release da CLI.
|
|
340
|
+
O `nio init` oferece a recipe depois do perfil; `nio_session_create` aceita
|
|
341
|
+
`{ recipe: "<slug>" }`. Merge determinístico (recipe vence em envVars/aliases;
|
|
342
|
+
união em linguagens/frameworks/MCPs).
|
|
343
|
+
|
|
344
|
+
---
|
|
135
345
|
|
|
136
346
|
## Skills, commands e dependências
|
|
137
347
|
|
|
@@ -149,7 +359,7 @@ Overrides por ambiente:
|
|
|
149
359
|
| --------------------- | ------------------------------------------------------------------ |
|
|
150
360
|
| `NIO_SKILLS_DIR` | Aponta pra um checkout local do repo (dev) — vence tudo |
|
|
151
361
|
| `NIO_SKILLS_REPO` | Outro `owner/repo` (default `hugoreiis12-png/NIO-SKILLS-`) |
|
|
152
|
-
| `
|
|
362
|
+
| `NIO_SKILLS_REF` | Outra branch/tag (default `main`) |
|
|
153
363
|
|
|
154
364
|
Cada cliente recebe no formato que entende:
|
|
155
365
|
|
|
@@ -159,7 +369,7 @@ Cada cliente recebe no formato que entende:
|
|
|
159
369
|
| Codex CLI | `~/.codex/` | **dual-write**: cada command/skill vira uma **skill** (`skills/<id>/SKILL.md`, auto-selecionada) **e** um **custom prompt** (`prompts/<id>.md`, no menu `/prompts:<id>`) |
|
|
160
370
|
| Cowork/Desktop | — | via **MCP prompts** + resources, servidos ao vivo (ignora `~/.claude`) |
|
|
161
371
|
|
|
162
|
-
> Configurar o Codex grava `
|
|
372
|
+
> Configurar o Codex grava `NIO_CLIENT=codex` no `config.toml`, o que faz o servidor
|
|
163
373
|
> provisionar pra `~/.codex` e filtrar os docs pelo surface `codex`. Reinicie o cliente
|
|
164
374
|
> depois do sync pra carregar skills/prompts novos.
|
|
165
375
|
|
|
@@ -167,9 +377,7 @@ Cada cliente recebe no formato que entende:
|
|
|
167
377
|
> que o app expõe como **slash-commands** no menu de conectores/"+" (ex.: digite `/` e
|
|
168
378
|
> procure os itens do nio) — são **invocados manualmente**, não carregados sozinhos
|
|
169
379
|
> como Agent Skills que o modelo detecta e usa por conta própria. Se não aparecerem:
|
|
170
|
-
> feche o app de vez (Cmd+Q) e reabra, e confirme que o conector nio está conectado
|
|
171
|
-
> (deve listar as tools `nos_*`). O processo do Cowork lê o mesmo cache `~/.nio/skills`
|
|
172
|
-
> — se o `nio sync` populou, o conteúdo está lá.
|
|
380
|
+
> feche o app de vez (Cmd+Q) e reabra, e confirme que o conector nio está conectado.
|
|
173
381
|
|
|
174
382
|
### Visibilidade por cliente
|
|
175
383
|
|
|
@@ -192,59 +400,27 @@ Commands/skills podem depender de libs externas, declaradas como arquivos em
|
|
|
192
400
|
- **instalador estruturado** (`npm:`, `skills:` = `npx skills add`, `git:`) → oferece
|
|
193
401
|
rodar com `[y/N]` (comando montado a partir do campo validado, **sem shell**);
|
|
194
402
|
- **`manual:`** (plugin de marketplace, passos no cliente, UI) → imprime os passos por
|
|
195
|
-
cliente, com os comandos destacados.
|
|
196
|
-
Code e `codex plugin …` + `/hooks` no Codex — a CLI não automatiza, só orienta.
|
|
197
|
-
|
|
198
|
-
A string `install:` (se houver) é **só exibição** — nunca é executada.
|
|
199
|
-
|
|
200
|
-
A CLI **detecta o que já está instalado** e mostra um selo verde `✓ instalada` (sem
|
|
201
|
-
repetir descrição/passos): `npm` via `npm ls -g`, `git` pelo dir de destino, `skills`
|
|
202
|
-
por marcador/probe. Pra deps `manual:` (plugins), declare `detect:` no frontmatter com
|
|
203
|
-
um ou mais globs — suporta `~`, `*` e `**`, e segue symlinks (ok com dotfiles). Ex.: o
|
|
204
|
-
Ponytail usa `detect: ~/.claude/plugins/**/ponytail`.
|
|
205
|
-
|
|
206
|
-
### Checagem de cliente
|
|
403
|
+
cliente, com os comandos destacados.
|
|
207
404
|
|
|
208
|
-
|
|
209
|
-
|
|
405
|
+
A string `install:` (se houver) é **só exibição** — nunca é executada. A CLI **detecta
|
|
406
|
+
o que já está instalado** e mostra um selo `✓ instalada` (via `npm ls -g`, dir de
|
|
407
|
+
destino, ou o `detect:` do frontmatter).
|
|
210
408
|
|
|
211
|
-
|
|
212
|
-
`npm i -g @anthropic-ai/claude-code` · `npm i -g @openai/codex`;
|
|
213
|
-
- **apps** (Claude Desktop/Cowork, VS Code) → mostra o link de download
|
|
214
|
-
(ex.: https://claude.ai/download) — reabra o app depois de instalar.
|
|
409
|
+
---
|
|
215
410
|
|
|
216
411
|
## Claude Desktop / Cowork
|
|
217
412
|
|
|
218
|
-
Selecione **Cowork** na lista de clientes do `nio init
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
413
|
+
Selecione **Cowork** na lista de clientes do `nio init`. Com o app instalado e você
|
|
414
|
+
logado (`nio login`), a CLI **ativa o conector direto** — escreve o `nio` no
|
|
415
|
+
`claude_desktop_config.json` com caminhos absolutos (`node` + `dist/mcp-server.js`)
|
|
416
|
+
e `NIO_CLIENT=cowork`. Reinicie o Claude Desktop pra carregar. O `nio sync` reafirma
|
|
417
|
+
esse config.
|
|
223
418
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
419
|
+
**Fallback `.mcpb`:** se a escrita direta falhar, a CLI gera
|
|
420
|
+
`~/Downloads/nio-cli-<versão>.mcpb` e mostra os passos — Configurações → Extensões →
|
|
421
|
+
Configurações avançadas → "Extension Developer" → "Install Extension…".
|
|
227
422
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
Se o app estiver instalado mas a escrita direta falhar, ou você não tiver login salvo, a
|
|
231
|
-
CLI cai pro **fallback manual**: gera uma extensão `~/Downloads/nio-cli-<versão>.mcpb`
|
|
232
|
-
e mostra os passos:
|
|
233
|
-
|
|
234
|
-
**Configurações → Extensões → Configurações avançadas → seção "Extension Developer" →
|
|
235
|
-
"Install Extension…"** → selecione o `.mcpb` → preencha **só o PAT**.
|
|
236
|
-
|
|
237
|
-
Pela extensão a config não vem do `nio login`/`nio.json`, e sim do `user_config`,
|
|
238
|
-
injetado como variável de ambiente:
|
|
239
|
-
|
|
240
|
-
| Variável | Origem (`user_config`) | Sensível |
|
|
241
|
-
| ------------ | ---------------------- | -------- |
|
|
242
|
-
| `NOCLAF_PAT` | PAT (`noc_…`) | ✅ sim |
|
|
243
|
-
|
|
244
|
-
> **Override de default (avançado, opcional).** Fora do Cowork, em CLIs de código, você
|
|
245
|
-
> ainda pode definir `NIO_PROJECT_ID`/`NOCLAF_REPOSITORY_ID` no env do cliente MCP pra
|
|
246
|
-
> fixar um projeto default — equivalente ao `nio.json`. O projeto da sessão
|
|
247
|
-
> (`nos_set_project`) e o `project_id` por chamada sempre têm precedência sobre esse default.
|
|
423
|
+
---
|
|
248
424
|
|
|
249
425
|
## Atualizando
|
|
250
426
|
|
|
@@ -252,29 +428,46 @@ injetado como variável de ambiente:
|
|
|
252
428
|
npm i -g @nio-cli/cli@latest
|
|
253
429
|
```
|
|
254
430
|
|
|
255
|
-
O `nio sync` **checa a versão publicada** no início e
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
431
|
+
O `nio sync` **checa a versão publicada** no início e **oferece atualizar** ali mesmo
|
|
432
|
+
(com sua confirmação). `nio sync --yes` aceita sem prompt. A CLI também avisa em
|
|
433
|
+
background em qualquer comando (`update-notifier`).
|
|
434
|
+
|
|
435
|
+
---
|
|
259
436
|
|
|
260
437
|
## Troubleshooting
|
|
261
438
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
439
|
+
| Sintoma | Causa provável / o que fazer |
|
|
440
|
+
|---|---|
|
|
441
|
+
| `nio: command not found` | `npm i -g @nio-cli/cli` e confira `npm bin -g` no PATH |
|
|
442
|
+
| `Configuração necessária` / `NIO_DATABASE_URL não definida` | rode `nio config setup` (ou deixe o `nio init` abrir o wizard) |
|
|
443
|
+
| `Não consegui falar com o nio-gateway` | o `nio-gateway` não está no ar — rode `nio-gateway &` |
|
|
444
|
+
| `Não autenticado` | `nio register` (1ª vez) e depois `nio login` |
|
|
445
|
+
| Erro de conexão com o banco | `ECONNREFUSED` = Postgres fora do ar / host errado; `password authentication failed` = credencial; erro de SSL = `NIO_DATABASE_SSL=true` |
|
|
446
|
+
| `2FA não configurado no servidor` (503) | faltam as `SMS_*` no ambiente do `nio-gateway` |
|
|
447
|
+
| Tools não aparecem no Claude Code | reinicie o cliente depois do `nio init`; cheque com `/mcp` |
|
|
448
|
+
| Skills não aparecem no Cowork | chegam como **prompts MCP** (slash-commands), não skills autônomas. Cmd+Q e reabra; confirme o conector |
|
|
449
|
+
| `Conteúdo de skills não encontrado` | cache `~/.nio/skills` vazio — rode `nio sync` com rede, ou `NIO_SKILLS_DIR` pra um checkout local |
|
|
450
|
+
| Sobraram comandos antigos | `nio clean-legacy` (`--dry-run` pra revisar antes) |
|
|
451
|
+
|
|
452
|
+
Sempre: `nio debug` mostra o estado de tudo com uma dica por item.
|
|
453
|
+
|
|
454
|
+
---
|
|
270
455
|
|
|
271
456
|
## Convenções
|
|
272
457
|
|
|
273
|
-
- **Idioma
|
|
274
|
-
- **Backups
|
|
458
|
+
- **Idioma:** UI/CLI em pt-BR. Código (variáveis, funções, tipos) em inglês.
|
|
459
|
+
- **Backups:** toda escrita em config existente gera `.bak.<timestamp>` ao lado.
|
|
275
460
|
- **stdout reservado pro JSON-RPC** no MCP server — logs vão pra stderr.
|
|
461
|
+
- **Regra do hexágono:** `core/ports.ts` / `core/repositories.ts` não importam
|
|
462
|
+
driver de banco; os adapters (`adapters/*`) implementam os contratos.
|
|
463
|
+
- **Migrations:** fonte da verdade em `db/schema.sql`; deltas incrementais em
|
|
464
|
+
`db/migrations/NNNN_*.sql`, aplicados à mão (`psql -f`).
|
|
465
|
+
|
|
466
|
+
---
|
|
276
467
|
|
|
277
468
|
## Versão
|
|
278
469
|
|
|
279
|
-
|
|
280
|
-
|
|
470
|
+
**0.2.0** — v1 da CLI fechada: auth (senha + 2º fator SMS), backend de sessões,
|
|
471
|
+
wizard de ambiente, tools MCP de ambiente, camada Docker e o gateway com Kong.
|
|
472
|
+
Nasceu de um cliente NOS/Supabase (v1), já removido. Histórico cronológico:
|
|
473
|
+
[`docs/PROGRESSO.md`](docs/PROGRESSO.md).
|