@nio-cli/cli 0.1.0 → 0.3.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 +374 -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/ai-client.js +44 -0
- package/dist/app/ai-client.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 +113 -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/ai.js +61 -0
- package/dist/cli/commands/ai.js.map +1 -0
- package/dist/cli/commands/auth.js +149 -96
- 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 +43 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/debug.js +102 -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 +385 -0
- package/dist/cli/commands/docker.js.map +1 -0
- package/dist/cli/commands/docs/content.js +219 -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 +10 -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/handoff.js +20 -0
- package/dist/cli/commands/init/handoff.js.map +1 -0
- package/dist/cli/commands/init/index.js +164 -34
- 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 +59 -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/start.js +8 -0
- package/dist/cli/commands/start.js.map +1 -0
- 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/onboarding.js +116 -0
- package/dist/cli/flows/onboarding.js.map +1 -0
- 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/program.js +58 -0
- package/dist/cli/program.js.map +1 -0
- 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 +27 -31
- 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 +13 -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 +86 -0
- package/dist/lib/auth/gateway-client.js.map +1 -0
- package/dist/lib/auth/gateway-process.js +54 -0
- package/dist/lib/auth/gateway-process.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 +147 -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} +113 -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/debug.js +6 -0
- package/dist/lib/debug.js.map +1 -0
- 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/headroom.js +44 -0
- package/dist/lib/headroom.js.map +1 -0
- package/dist/lib/ide-tasks.js +54 -0
- package/dist/lib/ide-tasks.js.map +1 -0
- package/dist/lib/load-env.js +44 -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 +43 -21
- 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/dist/tui/app.js +116 -0
- package/dist/tui/app.js.map +1 -0
- package/dist/tui/components.js +0 -0
- package/dist/tui/components.js.map +1 -0
- package/dist/tui/debug.js +17 -0
- package/dist/tui/debug.js.map +1 -0
- package/dist/tui/index.js +2 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/launch.js +64 -0
- package/dist/tui/launch.js.map +1 -0
- package/dist/tui/markdown.js +40 -0
- package/dist/tui/markdown.js.map +1 -0
- package/dist/tui/opencode.js +28 -0
- package/dist/tui/opencode.js.map +1 -0
- package/dist/tui/palette-source.js +71 -0
- package/dist/tui/palette-source.js.map +1 -0
- package/dist/tui/palette.js +100 -0
- package/dist/tui/palette.js.map +1 -0
- package/dist/tui/state.js +105 -0
- package/dist/tui/state.js.map +1 -0
- package/dist/tui/theme.js +14 -0
- package/dist/tui/theme.js.map +1 -0
- package/docker/docker-compose.yml +44 -0
- package/headroom/docker-compose.yml +27 -0
- package/package.json +40 -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,137 +1,384 @@
|
|
|
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. **`nio ai` abre a interface NIO** — o Headroom (proxy de compressão, container
|
|
31
|
+
Docker, obrigatório), o `opencode serve` headless (`opencode/big-pickle`, MCP
|
|
32
|
+
`nio` + MCPs do perfil), e a UI do NIO em Ink (chat, sidebar, paleta `/`). Com
|
|
33
|
+
IDE, roda num terminal integrado dela. A partir daí o agente tem as tools
|
|
34
|
+
`nio_*` — criar/ativar sessão, re-materializar ambiente, delegar execução.
|
|
35
|
+
|
|
36
|
+
O **Postgres é a fonte da verdade** do domínio (usuários, sessões, trilha de
|
|
37
|
+
auth). A CLI e o gateway só falam com o banco que **você** configurar — não há
|
|
38
|
+
default, não há banco embutido.
|
|
39
|
+
|
|
40
|
+
---
|
|
16
41
|
|
|
17
|
-
## Instalação
|
|
42
|
+
## Instalação
|
|
18
43
|
|
|
19
|
-
Precisa
|
|
44
|
+
Precisa de **Node.js 20.12+**. Instala como pacote global:
|
|
20
45
|
|
|
21
46
|
```bash
|
|
22
47
|
npm i -g @nio-cli/cli
|
|
23
48
|
```
|
|
24
49
|
|
|
25
|
-
|
|
50
|
+
Ficam no PATH: `nio` (CLI), `nio-gateway` (serviço de auth), `nio-cli` e
|
|
51
|
+
`nio-lang` (servidores MCP).
|
|
52
|
+
|
|
53
|
+
### Pré-requisitos de runtime
|
|
54
|
+
|
|
55
|
+
| Requisito | Pra quê | Como |
|
|
56
|
+
|---|---|---|
|
|
57
|
+
| **PostgreSQL** alcançável | fonte da verdade (sessões, usuários) | schema em `db/schema.sql` aplicado uma vez |
|
|
58
|
+
| **`JWT_SECRET`** (segredo do time) | assinar/validar as sessões | mesmo valor em toda máquina |
|
|
59
|
+
| **OpenCode** | operador de IA | o `nio init` oferece instalar (`npm i -g opencode-ai`) |
|
|
60
|
+
| **Docker** | obrigatório pro `nio ai` — roda o Headroom (proxy de compressão) | `docker compose version` |
|
|
61
|
+
| *(opcional)* provedor de SMS | 2º fator | `SMS_ENDPOINT_URL` + `SMS_AUTH_HEADER` + `SMS_BODY_TEMPLATE` |
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Configuração
|
|
66
|
+
|
|
67
|
+
**Você não precisa exportar nada no shell.** Rode `nio config setup` — o wizard
|
|
68
|
+
pede o `NIO_DATABASE_URL` (que o time te passa) e o `JWT_SECRET`, **testa a
|
|
69
|
+
conexão** e grava em `~/.nio/config.env` (chmod 600, nunca commitado). O `nio init`,
|
|
70
|
+
`nio register` e `nio login` disparam esse wizard sozinhos se a config faltar; se
|
|
71
|
+
estiver presente mas errada, param com uma mensagem dizendo exatamente o quê.
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
nio config setup # wizard interativo (cola os valores, testa, salva)
|
|
75
|
+
nio config check # confere: completa? banco responde? (--json pra CI)
|
|
76
|
+
nio config path # ~/.nio/config.env
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
A CLI carrega as variáveis nesta precedência (shell sempre vence os arquivos):
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
env do shell > $NIO_ENV_FILE > ./.env > ~/.nio/config.env
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Conteúdo de `~/.nio/config.env` (o wizard gera; dá pra editar à mão):
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
NIO_DATABASE_URL=postgres://usuario:senha@HOST:5432/nio_cli
|
|
89
|
+
# NIO_DATABASE_SSL=true # só se o banco exigir TLS (gerenciado/nuvem)
|
|
90
|
+
JWT_SECRET=<mesmo-valor-do-time>
|
|
91
|
+
|
|
92
|
+
# 2º fator (SMS) — opcional, só no lado do gateway
|
|
93
|
+
# SMS_ENDPOINT_URL=https://api.provedor.com/v2/sms
|
|
94
|
+
# SMS_AUTH_HEADER=X-API-TOKEN: seu-token
|
|
95
|
+
# SMS_BODY_TEMPLATE={"to":"{to}","message":"{text}"}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
> Alternativa pra time: gere o `~/.nio/config.env` uma vez e distribua o arquivo
|
|
99
|
+
> (é só `KEY=value`) — a CLI valida no primeiro comando.
|
|
100
|
+
|
|
101
|
+
| Variável | Prefixo | Lida por |
|
|
102
|
+
|---|---|---|
|
|
103
|
+
| `NIO_DATABASE_URL` / `NIO_DATABASE_SSL` | `NIO_` | tudo que toca o banco |
|
|
104
|
+
| `JWT_SECRET` / `JWT_EXPIRES_IN` | **sem** prefixo (segredo do time) | `nio-gateway` + `nio-cli` |
|
|
105
|
+
| `SMS_ENDPOINT_URL` / `SMS_AUTH_HEADER` / `SMS_BODY_TEMPLATE` / `SMS_FROM` | **sem** prefixo | `nio-gateway` |
|
|
106
|
+
| `NIO_GATEWAY_HOST` (default `127.0.0.1`) | `NIO_` | `nio-gateway` — `0.0.0.0` p/ Kong em container |
|
|
107
|
+
| `NIO_GATEWAY_URL` (default `http://127.0.0.1:3000`) | `NIO_` | a CLI acha o nio-gateway (Kong na frente = aponta :8000) |
|
|
108
|
+
|
|
109
|
+
O schema de conexão é sempre `postgres://…`; um destino inválido falha explícito,
|
|
110
|
+
nunca cai num default silencioso.
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Primeiros passos
|
|
115
|
+
|
|
116
|
+
Um comando só:
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
nio # (ou `nio start`) — a esteira guiada
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
A esteira detecta em que ponto você está e conduz — **config → gateway → login →
|
|
123
|
+
sessão → handoff pro OpenCode** —, perguntando antes de cada passo. Ela sobe o
|
|
124
|
+
`nio-gateway` sozinha se faltar. Se você sair no meio, ela imprime a linha exata
|
|
125
|
+
pra retomar (`nio start`); nada morre no silêncio.
|
|
126
|
+
|
|
127
|
+
Por dentro, é isto (cada um roda na mão também):
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
nio config setup # cola NIO_DATABASE_URL + JWT_SECRET (o time te passa), testa, salva
|
|
131
|
+
nio-gateway # gateway de auth (a esteira sobe sozinha se faltar)
|
|
132
|
+
nio register # cria seu usuário na base compartilhada → cai no login
|
|
133
|
+
nio login # autentica (salva o JWT em ~/.nio/session.json)
|
|
134
|
+
nio security enable-2fa # (opcional) 2º fator
|
|
135
|
+
nio init # monta o ambiente da sessão → `nio ai` (Headroom + OpenCode, num terminal da IDE)
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
O `nio-gateway` só é necessário pros comandos de auth (`login`/`logout`/
|
|
139
|
+
`verify-2fa`/`security`). Todo o resto — `init`, `sessions`, as tools MCP —
|
|
140
|
+
fala com o Postgres direto usando o JWT local. Rode `nio debug` a qualquer
|
|
141
|
+
momento pra ver o que está ok e o que falta.
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## Arquitetura
|
|
146
|
+
|
|
147
|
+
Hexagonal. O núcleo não conhece IO; os adapters implementam os contratos.
|
|
148
|
+
|
|
149
|
+
```
|
|
150
|
+
entrypoints: src/cli.ts (nio) src/gateway/index.ts (nio-gateway)
|
|
151
|
+
src/mcp-server.ts (nio-cli) src/mcp-server-lang.ts (nio-lang)
|
|
152
|
+
app: SessionManager · EnvironmentBuilder · DependencyWatcher · DockerManager
|
|
153
|
+
core/: types.ts (entidades + enums) + ports por domínio, sem IO:
|
|
154
|
+
repositories.ts · environment.ts · docker.ts · messaging.ts · lang.ts
|
|
155
|
+
adapters/: pg/ (Postgres) ide/ (vscode) pkg/ (npm,pip,…) docker/ sms/ skills/ lang/
|
|
156
|
+
profiles/: catálogo dos 6 perfis (fixos no fonte)
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
- **Runtime:** Node 20.12+ é o alvo. Bun roda o projeto em dev, mas **nada**
|
|
160
|
+
depende de API exclusiva do Bun — só as equivalentes de `node:*`.
|
|
161
|
+
- **Build:** `tsc` puro → `dist/`. Sem bundler.
|
|
162
|
+
- **Banco:** `pg` + um `Pool` único (`src/adapters/pg/client.ts`). Sem Supabase,
|
|
163
|
+
sem PostgREST, sem `Bun.sql`.
|
|
164
|
+
- **Gateway:** `http.createServer` nativo, loopback, atrás do Kong OSS (opcional,
|
|
165
|
+
pra rate-limiting). JWT HS256, `jti` = id da `auth_session`. Trilha de auth em
|
|
166
|
+
stderr estruturado — nunca a senha nem o OTP em texto puro.
|
|
167
|
+
- **Contrato "nunca lança"** nos ports de IO (`ToolchainGateway`, `IdeGateway`,
|
|
168
|
+
`DockerGateway`, `SmsSender`): falha vira um resultado `{ status, error? }`.
|
|
169
|
+
|
|
170
|
+
Detalhes: [`docs/arch/`](docs/arch/) (uma `ARQUITETURA-*.md` por camada) e os
|
|
171
|
+
[ADRs](docs/adr/). Histórico cronológico: [`docs/PROGRESSO.md`](docs/PROGRESSO.md).
|
|
26
172
|
|
|
27
|
-
|
|
173
|
+
### Perfis
|
|
28
174
|
|
|
29
|
-
|
|
175
|
+
Fixos no fonte (`src/core/types.ts`) — novos perfis só entram alterando o código:
|
|
176
|
+
|
|
177
|
+
`fullstack` · `analyst` · `scientist` · `dba` · `qa` · `bi`
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## Autenticação
|
|
30
182
|
|
|
31
183
|
```bash
|
|
32
|
-
nio
|
|
184
|
+
nio register # cria o usuário (user_cli), senha com hash argon2id
|
|
185
|
+
nio login # autentica via nio-gateway e salva o JWT em ~/.nio/session.json
|
|
186
|
+
nio whoami # mostra quem está logado (--json pra saída estável)
|
|
187
|
+
nio logout # revoga a auth_session no banco e limpa a sessão local
|
|
33
188
|
```
|
|
34
189
|
|
|
35
|
-
|
|
190
|
+
### 2º fator (SMS)
|
|
36
191
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
192
|
+
Opt-in por conta. Com `auth_2` ativo, o `nio login` pede um código de 6 dígitos
|
|
193
|
+
por SMS; se o SMS não chega, vale um dos 10 **códigos de backup** (mostrados uma
|
|
194
|
+
vez no `enable-2fa`).
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
nio security enable-2fa # cadastra o celular, confirma via SMS, mostra os backups
|
|
198
|
+
nio security status # ativo? número (mascarado)? quantos backups restam?
|
|
199
|
+
nio security disable-2fa
|
|
200
|
+
nio security regenerate-backup-codes
|
|
201
|
+
```
|
|
43
202
|
|
|
44
|
-
|
|
203
|
+
O gateway gera/valida o OTP em processo (sem Twilio, sem broker), guarda só o
|
|
204
|
+
**HMAC** do código (TTL 5 min, 3 tentativas, uso único) e manda o SMS por um
|
|
205
|
+
**adapter HTTP genérico**. Sem `SMS_ENDPOINT_URL` no ambiente, o login com
|
|
206
|
+
`auth_2` responde `503 "2FA não configurado"` — o login de 1 fator segue normal.
|
|
207
|
+
Detalhes: [spec 0004](docs/specs/auth/0004-login-2fa-sms-otp.md) ·
|
|
208
|
+
[ADR 0006](docs/adr/0006-2fa-sms-otp.md) ·
|
|
209
|
+
[`docs/arch/ARQUITETURA-GATEWAY.md`](docs/arch/ARQUITETURA-GATEWAY.md).
|
|
210
|
+
|
|
211
|
+
Pra testar sem SMS real, o repo traz um mock: `bun run dev:sms-echo` sobe um
|
|
212
|
+
endpoint local que imprime o código no terminal (aponte `SMS_ENDPOINT_URL` pra ele).
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
216
|
+
## Operador de IA (`nio ai`)
|
|
217
|
+
|
|
218
|
+
No fim do `nio init` a CLI sobe o **client de IA** da sessão — e o mesmo `nio ai`
|
|
219
|
+
retoma a qualquer momento. Ele:
|
|
220
|
+
|
|
221
|
+
1. **Sobe o Headroom** — proxy de compressão de contexto em container Docker
|
|
222
|
+
(`headroom/docker-compose.yml`), **obrigatório** ([ADR 0007](docs/adr/0007-headroom-proxy-obrigatorio.md)).
|
|
223
|
+
Sem Docker, `nio ai` para com erro acionável (o `nio init` não morre — materializa
|
|
224
|
+
o ambiente e deixa a linha `nio ai` pra retomar). Manual: `nio docker headroom {up,down,status}`.
|
|
225
|
+
2. **Aponta o provider pro Headroom** — grava `provider.opencode.options.baseURL`
|
|
226
|
+
no `~/.config/opencode/opencode.json` (junto do `model: opencode/big-pickle`,
|
|
227
|
+
do MCP `nio` e dos MCPs do perfil).
|
|
228
|
+
3. **Sobe o `opencode serve` headless e abre a interface NIO** (Ink — chat
|
|
229
|
+
streamado, sidebar verde, paleta `/` com os comandos e capacidades do NIO). O
|
|
230
|
+
motor é o `opencode/big-pickle`; a casca é nossa. Se a sessão tem IDE (VS Code /
|
|
231
|
+
Cursor), o `nio init` grava um `.vscode/tasks.json` (task `NIO`, `runOn: folderOpen`)
|
|
232
|
+
e o `nio ai` sobe num **terminal integrado da IDE** — uma superfície, não duas.
|
|
233
|
+
Sem IDE, roda no terminal atual. Sem TTY / sem `opencode` → cai na TUI do OpenCode.
|
|
234
|
+
|
|
235
|
+
Ver [`docs/arch/ARQUITETURA-CLIENTE-IA.md`](docs/arch/ARQUITETURA-CLIENTE-IA.md) e
|
|
236
|
+
[`docs/arch/ARQUITETURA-CLIENTE-TUI.md`](docs/arch/ARQUITETURA-CLIENTE-TUI.md).
|
|
237
|
+
|
|
238
|
+
> A interface NIO (Ink) está na **fatia 2a** ([ADR 0008](docs/adr/0008-interface-nio-ink.md)).
|
|
239
|
+
> A paridade completa com o OpenCode (diff viewer, file tree, seletor de modelo…) é a 2b.
|
|
240
|
+
> Multi-cliente (OpenCode | Codex) e o ladder de failover entre modelos seguem
|
|
241
|
+
> parkeados em
|
|
242
|
+
> [`docs/arch/ARQUITETURA-CLIENTES-MULTI-FUTURO.md`](docs/arch/ARQUITETURA-CLIENTES-MULTI-FUTURO.md)
|
|
243
|
+
> ([ADR 0004](docs/adr/0004-operador-ia-unico.md)).
|
|
244
|
+
|
|
245
|
+
---
|
|
45
246
|
|
|
46
247
|
## Comandos do CLI
|
|
47
248
|
|
|
48
|
-
Operações do CLI, **sem o binário na frente** (declarado no cabeçalho da tabela).
|
|
49
|
-
|
|
249
|
+
Operações do CLI, **sem o binário na frente** (declarado no cabeçalho da tabela).
|
|
250
|
+
Gerada da fonte por `npm run gen:docs`. Ajuda de qualquer comando: `nio <cmd> --help`.
|
|
50
251
|
|
|
51
252
|
<!-- COMMANDS:START -->
|
|
52
|
-
<!-- gerado por `bun run gen:docs` — não edite à mão. binário `nio`,
|
|
253
|
+
<!-- gerado por `bun run gen:docs` — não edite à mão. binário `nio`, 42 comandos. -->
|
|
53
254
|
|
|
54
255
|
| Comando | Descrição |
|
|
55
256
|
| --- | --- |
|
|
257
|
+
| `ai` | Abre a interface NIO da sessão ativa (Headroom + opencode serve + Ink) |
|
|
258
|
+
| `ai status` | Estado do Headroom (proxy obrigatório do client de IA) |
|
|
56
259
|
| `clean-legacy` | Remove commands/skills legados (substituídos) de ~/.claude e ~/.codex |
|
|
57
260
|
| `completion [shell]` | Imprime o script de autocomplete (bash\|zsh\|fish). |
|
|
261
|
+
| `config` | Config compartilhada da equipe (~/.nio/config.env) |
|
|
262
|
+
| `config check` | Confere se a config está completa e o Postgres responde |
|
|
263
|
+
| `config path` | Imprime o caminho do arquivo de config |
|
|
264
|
+
| `config setup` | Wizard: cola os valores do time, testa a conexão e salva |
|
|
265
|
+
| `docker` | Camada Docker: MCP Gateway + Portainer, compose, debug e cluster (Swarm) |
|
|
266
|
+
| `docker cluster <action> [arg]` | Docker Swarm — stack `nio-cluster` (up\|down\|status\|scale) |
|
|
267
|
+
| `docker compose <action> [service]` | Wrapper sobre `docker compose` do projeto (up\|down\|restart\|ps\|logs) |
|
|
268
|
+
| `docker create` | Cria e sobe um container (wizard ou flags) |
|
|
269
|
+
| `docker debug [container]` | Coleta o contexto de um container e entrega o diagnóstico pro operador de IA |
|
|
270
|
+
| `docker headroom` | Proxy de compressão de contexto — obrigatório pro `nio ai` (ADR 0007) |
|
|
271
|
+
| `docker headroom down` | Derruba o container do Headroom |
|
|
272
|
+
| `docker headroom status` | O Headroom está no ar? |
|
|
273
|
+
| `docker headroom up` | Sobe o container do Headroom |
|
|
274
|
+
| `docker orquest [instruction]` | Orquestra os serviços do projeto via compose, dirigido pelo operador (linguagem natural) |
|
|
275
|
+
| `docker portainer` | Abre o Portainer no navegador |
|
|
276
|
+
| `docker toolkit` | Infra NIO: Docker MCP Gateway + Portainer (docker/docker-compose.yml) |
|
|
277
|
+
| `docker toolkit down` | Derruba a infra e desabilita o MCP no opencode.json |
|
|
278
|
+
| `docker toolkit status` | Estado dos containers + health dos endpoints |
|
|
279
|
+
| `docker toolkit up` | Sobe a infra e registra o gateway no opencode.json |
|
|
280
|
+
| `docs` | Documentação completa da CLI (terminal ou página com --html) |
|
|
58
281
|
| `exec` | Delega a implementação a um agente headless num worktree e aguarda. |
|
|
59
282
|
| `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` |
|
|
283
|
+
| `init` | Cria nio.json no diretório atual e materializa o ambiente da sessão |
|
|
284
|
+
| `login` | Autentica via nio-gateway (túnel HTTP) e salva a sessão localmente (JWT) |
|
|
285
|
+
| `logout` | Encerra a sessão local e revoga a auth_session no banco |
|
|
63
286
|
| `plan` | Roda o engine pensante sobre o projeto e escreve/refina o plan.md da raiz. |
|
|
287
|
+
| `register` | Cria um novo usuário no banco (user_cli) e já entra (login) |
|
|
288
|
+
| `security` | 2º fator do login (SMS OTP + códigos de backup) |
|
|
289
|
+
| `security disable-2fa` | Desativa o 2º fator |
|
|
290
|
+
| `security enable-2fa` | Ativa o 2º fator via SMS |
|
|
291
|
+
| `security regenerate-backup-codes` | Invalida os códigos de backup e gera 10 novos |
|
|
292
|
+
| `security status` | Mostra o estado do 2º fator |
|
|
64
293
|
| `skills` | Skills, commands e agents do nio (lidos do repo aberto via cache) |
|
|
65
294
|
| `skills status` | Lista os docs do repo de skills (cache local ~/.nio/skills) |
|
|
295
|
+
| `start` | Conduz a esteira: config → gateway → login → sessão → OpenCode |
|
|
66
296
|
| `sync` | Instala/atualiza skills, commands e agents nos clientes configurados, a partir do bundle (idempotente); checa atualização do pacote |
|
|
67
297
|
| `validate-plan` | Lê o plan.md da raiz e roda o engine pensante para julgar se o plano precisa de uma spec antes de implementar. |
|
|
68
298
|
| `whoami` | Mostra o usuário autenticado |
|
|
69
299
|
<!-- COMMANDS:END -->
|
|
70
300
|
|
|
301
|
+
### Diagnóstico da própria CLI
|
|
302
|
+
|
|
303
|
+
```bash
|
|
304
|
+
nio debug # bateria de checagens: nio.json, login, Postgres, sessão ativa,
|
|
305
|
+
# OpenCode no PATH, cache de skills — ✓ / ⚠ / ✗ com dica em cada
|
|
306
|
+
nio docs # documentação completa no terminal
|
|
307
|
+
nio docs --html # a mesma coisa como página (arte); --open abre no navegador
|
|
308
|
+
```
|
|
309
|
+
|
|
71
310
|
### Autocomplete (tab)
|
|
72
311
|
|
|
73
|
-
O `nio init` **oferece** ativar
|
|
74
|
-
ativar à mão, adicione ao rc do seu shell:
|
|
312
|
+
O `nio init` **oferece** ativar; o `nio sync` **valida** e prompta se faltar. À mão:
|
|
75
313
|
|
|
76
314
|
```bash
|
|
77
|
-
#
|
|
78
|
-
eval "$(nio completion
|
|
79
|
-
#
|
|
80
|
-
eval "$(nio completion bash)"
|
|
81
|
-
# fish (~/.config/fish/config.fish)
|
|
82
|
-
nio completion fish | source
|
|
315
|
+
eval "$(nio completion zsh)" # ~/.zshrc
|
|
316
|
+
eval "$(nio completion bash)" # ~/.bashrc
|
|
317
|
+
nio completion fish | source # ~/.config/fish/config.fish
|
|
83
318
|
```
|
|
84
319
|
|
|
85
|
-
|
|
320
|
+
---
|
|
86
321
|
|
|
87
|
-
##
|
|
322
|
+
## Docker (`nio docker`)
|
|
88
323
|
|
|
89
|
-
|
|
90
|
-
|
|
324
|
+
Camada de gerência de container — metade wrapper determinístico sobre `docker`,
|
|
325
|
+
metade dirigida pelo operador de IA em linguagem natural (via o **Docker MCP
|
|
326
|
+
Gateway**). Roda em qualquer Docker Engine (não exige Docker Desktop). Ver
|
|
327
|
+
[`docs/arch/ARQUITETURA-DOCKER.md`](docs/arch/ARQUITETURA-DOCKER.md) ·
|
|
328
|
+
[ADR 0005](docs/adr/0005-camada-docker.md).
|
|
91
329
|
|
|
92
|
-
|
|
93
|
-
|
|
330
|
+
```bash
|
|
331
|
+
nio docker toolkit up # sobe o MCP Gateway (127.0.0.1:8811/mcp) + Portainer (9443)
|
|
332
|
+
# e registra o gateway no opencode.json
|
|
333
|
+
nio docker compose up -f app/docker-compose.yml # wrapper sobre `docker compose` do projeto
|
|
334
|
+
nio docker create --image redis:7 --port 6379:6379
|
|
335
|
+
nio docker debug <container> # coleta ps/logs/inspect → operador analisa e propõe o fix
|
|
336
|
+
nio docker orquest "sobe api + worker + redis" # operador gera o compose e sobe (--dry-run mostra)
|
|
337
|
+
nio docker cluster up "api + worker + redis + postgres" # Docker Swarm (stack `nio-cluster`)
|
|
338
|
+
nio docker cluster status | scale api=3
|
|
339
|
+
nio docker portainer # abre a UI
|
|
340
|
+
```
|
|
94
341
|
|
|
95
|
-
|
|
342
|
+
`debug`/`orquest`/`cluster` exigem `nio login` + sessão ativa + `opencode` no
|
|
343
|
+
PATH. O estado do cluster fica em `sessions.config` (Postgres), validado contra
|
|
344
|
+
`docker stack services`.
|
|
96
345
|
|
|
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. |
|
|
346
|
+
---
|
|
347
|
+
|
|
348
|
+
## Tools MCP
|
|
349
|
+
|
|
350
|
+
O servidor `nio-cli` expõe as tools de ambiente v2 (todas passam pelo
|
|
351
|
+
`SessionManager` e exigem `nio login`):
|
|
352
|
+
|
|
353
|
+
<!-- TOOLS:START -->
|
|
354
|
+
<!-- gerado por `bun run gen:docs` — não edite à mão. 10 tools. -->
|
|
115
355
|
|
|
116
356
|
### Tools que espelham o CLI — prefixo `nio_`
|
|
117
357
|
|
|
118
358
|
| Operação | O que faz |
|
|
119
359
|
| --- | --- |
|
|
120
360
|
| `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. |
|
|
361
|
+
| `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). |
|
|
362
|
+
| `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
363
|
| `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
364
|
| `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. |
|
|
365
|
+
| `profile_get` | Consulta o catálogo de perfis de ambiente (hardcoded na CLI). |
|
|
366
|
+
| `session_activate` | Ativa uma sessão de ambiente do usuário por id (o prefixo do UUID basta). |
|
|
367
|
+
| `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`. |
|
|
368
|
+
| `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
369
|
| `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
370
|
<!-- TOOLS:END -->
|
|
125
371
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
372
|
+
### Recipes de ambiente (repo NIO-SKILLS)
|
|
373
|
+
|
|
374
|
+
Além dos 6 perfis fixos, o repo `NIO-SKILLS-` pode carregar **recipes** em
|
|
375
|
+
`recipes/<slug>.md` — presets nomeados (`profile` + linguagens + frameworks +
|
|
376
|
+
MCPs + envVars/aliases) que **estendem** um perfil, editáveis sem release da CLI.
|
|
377
|
+
O `nio init` oferece a recipe depois do perfil; `nio_session_create` aceita
|
|
378
|
+
`{ recipe: "<slug>" }`. Merge determinístico (recipe vence em envVars/aliases;
|
|
379
|
+
união em linguagens/frameworks/MCPs).
|
|
380
|
+
|
|
381
|
+
---
|
|
135
382
|
|
|
136
383
|
## Skills, commands e dependências
|
|
137
384
|
|
|
@@ -149,7 +396,7 @@ Overrides por ambiente:
|
|
|
149
396
|
| --------------------- | ------------------------------------------------------------------ |
|
|
150
397
|
| `NIO_SKILLS_DIR` | Aponta pra um checkout local do repo (dev) — vence tudo |
|
|
151
398
|
| `NIO_SKILLS_REPO` | Outro `owner/repo` (default `hugoreiis12-png/NIO-SKILLS-`) |
|
|
152
|
-
| `
|
|
399
|
+
| `NIO_SKILLS_REF` | Outra branch/tag (default `main`) |
|
|
153
400
|
|
|
154
401
|
Cada cliente recebe no formato que entende:
|
|
155
402
|
|
|
@@ -159,7 +406,7 @@ Cada cliente recebe no formato que entende:
|
|
|
159
406
|
| 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
407
|
| Cowork/Desktop | — | via **MCP prompts** + resources, servidos ao vivo (ignora `~/.claude`) |
|
|
161
408
|
|
|
162
|
-
> Configurar o Codex grava `
|
|
409
|
+
> Configurar o Codex grava `NIO_CLIENT=codex` no `config.toml`, o que faz o servidor
|
|
163
410
|
> provisionar pra `~/.codex` e filtrar os docs pelo surface `codex`. Reinicie o cliente
|
|
164
411
|
> depois do sync pra carregar skills/prompts novos.
|
|
165
412
|
|
|
@@ -167,9 +414,7 @@ Cada cliente recebe no formato que entende:
|
|
|
167
414
|
> que o app expõe como **slash-commands** no menu de conectores/"+" (ex.: digite `/` e
|
|
168
415
|
> procure os itens do nio) — são **invocados manualmente**, não carregados sozinhos
|
|
169
416
|
> 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á.
|
|
417
|
+
> feche o app de vez (Cmd+Q) e reabra, e confirme que o conector nio está conectado.
|
|
173
418
|
|
|
174
419
|
### Visibilidade por cliente
|
|
175
420
|
|
|
@@ -192,59 +437,27 @@ Commands/skills podem depender de libs externas, declaradas como arquivos em
|
|
|
192
437
|
- **instalador estruturado** (`npm:`, `skills:` = `npx skills add`, `git:`) → oferece
|
|
193
438
|
rodar com `[y/N]` (comando montado a partir do campo validado, **sem shell**);
|
|
194
439
|
- **`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`.
|
|
440
|
+
cliente, com os comandos destacados.
|
|
205
441
|
|
|
206
|
-
|
|
442
|
+
A string `install:` (se houver) é **só exibição** — nunca é executada. A CLI **detecta
|
|
443
|
+
o que já está instalado** e mostra um selo `✓ instalada` (via `npm ls -g`, dir de
|
|
444
|
+
destino, ou o `detect:` do frontmatter).
|
|
207
445
|
|
|
208
|
-
|
|
209
|
-
máquina. Se não estiver:
|
|
210
|
-
|
|
211
|
-
- **CLIs** (Claude Code, Codex) → mostra e oferece rodar o instalador:
|
|
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.
|
|
446
|
+
---
|
|
215
447
|
|
|
216
448
|
## Claude Desktop / Cowork
|
|
217
449
|
|
|
218
|
-
Selecione **Cowork** na lista de clientes do `nio init
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
Não há projeto pra configurar: o Cowork não tem `nio.json` (sem working dir/repo),
|
|
225
|
-
então o projeto é **escolhido por sessão** — peça pro assistente rodar `nos_list_projects`
|
|
226
|
-
e depois `nos_set_project` com o id desejado.
|
|
450
|
+
Selecione **Cowork** na lista de clientes do `nio init`. Com o app instalado e você
|
|
451
|
+
logado (`nio login`), a CLI **ativa o conector direto** — escreve o `nio` no
|
|
452
|
+
`claude_desktop_config.json` com caminhos absolutos (`node` + `dist/mcp-server.js`)
|
|
453
|
+
e `NIO_CLIENT=cowork`. Reinicie o Claude Desktop pra carregar. O `nio sync` reafirma
|
|
454
|
+
esse config.
|
|
227
455
|
|
|
228
|
-
|
|
456
|
+
**Fallback `.mcpb`:** se a escrita direta falhar, a CLI gera
|
|
457
|
+
`~/Downloads/nio-cli-<versão>.mcpb` e mostra os passos — Configurações → Extensões →
|
|
458
|
+
Configurações avançadas → "Extension Developer" → "Install Extension…".
|
|
229
459
|
|
|
230
|
-
|
|
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.
|
|
460
|
+
---
|
|
248
461
|
|
|
249
462
|
## Atualizando
|
|
250
463
|
|
|
@@ -252,29 +465,51 @@ injetado como variável de ambiente:
|
|
|
252
465
|
npm i -g @nio-cli/cli@latest
|
|
253
466
|
```
|
|
254
467
|
|
|
255
|
-
O `nio sync` **checa a versão publicada** no início e
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
468
|
+
O `nio sync` **checa a versão publicada** no início e **oferece atualizar** ali mesmo
|
|
469
|
+
(com sua confirmação). `nio sync --yes` aceita sem prompt. A CLI também avisa em
|
|
470
|
+
background em qualquer comando (`update-notifier`).
|
|
471
|
+
|
|
472
|
+
---
|
|
259
473
|
|
|
260
474
|
## Troubleshooting
|
|
261
475
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
476
|
+
| Sintoma | Causa provável / o que fazer |
|
|
477
|
+
|---|---|
|
|
478
|
+
| `nio: command not found` | `npm i -g @nio-cli/cli` e confira `npm bin -g` no PATH |
|
|
479
|
+
| `Configuração necessária` / `NIO_DATABASE_URL não definida` | rode `nio config setup` (ou deixe o `nio init` abrir o wizard) |
|
|
480
|
+
| `Não consegui falar com o nio-gateway` | o `nio-gateway` não está no ar — rode `nio-gateway &` |
|
|
481
|
+
| `Não autenticado` | `nio register` (1ª vez) e depois `nio login` |
|
|
482
|
+
| 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` |
|
|
483
|
+
| `2FA não configurado no servidor` (503) | faltam as `SMS_*` no ambiente do `nio-gateway` |
|
|
484
|
+
| Tools não aparecem no Claude Code | reinicie o cliente depois do `nio init`; cheque com `/mcp` |
|
|
485
|
+
| Skills não aparecem no Cowork | chegam como **prompts MCP** (slash-commands), não skills autônomas. Cmd+Q e reabra; confirme o conector |
|
|
486
|
+
| `Conteúdo de skills não encontrado` | cache `~/.nio/skills` vazio — rode `nio sync` com rede, ou `NIO_SKILLS_DIR` pra um checkout local |
|
|
487
|
+
| Sobraram comandos antigos | `nio clean-legacy` (`--dry-run` pra revisar antes) |
|
|
488
|
+
|
|
489
|
+
Sempre: `nio debug` mostra o estado de tudo com uma dica por item. E
|
|
490
|
+
`NIO_DEBUG=1 nio <cmd>` liga log verboso (`[nio:debug]` em stderr): `.env`
|
|
491
|
+
carregados, config resolvida, requests pro gateway, e stack trace completo nos erros.
|
|
492
|
+
|
|
493
|
+
O logo Matrix anima (chuva caindo) toda vez que aparece em terminal interativo.
|
|
494
|
+
`NIO_NO_ANIM=1` deixa ele sempre estático; fora de TTY (pipe/CI) já é estático.
|
|
495
|
+
|
|
496
|
+
---
|
|
270
497
|
|
|
271
498
|
## Convenções
|
|
272
499
|
|
|
273
|
-
- **Idioma
|
|
274
|
-
- **Backups
|
|
500
|
+
- **Idioma:** UI/CLI em pt-BR. Código (variáveis, funções, tipos) em inglês.
|
|
501
|
+
- **Backups:** toda escrita em config existente gera `.bak.<timestamp>` ao lado.
|
|
275
502
|
- **stdout reservado pro JSON-RPC** no MCP server — logs vão pra stderr.
|
|
503
|
+
- **Regra do hexágono:** `core/ports.ts` / `core/repositories.ts` não importam
|
|
504
|
+
driver de banco; os adapters (`adapters/*`) implementam os contratos.
|
|
505
|
+
- **Migrations:** fonte da verdade em `db/schema.sql`; deltas incrementais em
|
|
506
|
+
`db/migrations/NNNN_*.sql`, aplicados à mão (`psql -f`).
|
|
507
|
+
|
|
508
|
+
---
|
|
276
509
|
|
|
277
510
|
## Versão
|
|
278
511
|
|
|
279
|
-
|
|
280
|
-
|
|
512
|
+
**0.2.0** — v1 da CLI fechada: auth (senha + 2º fator SMS), backend de sessões,
|
|
513
|
+
wizard de ambiente, tools MCP de ambiente, camada Docker e o gateway com Kong.
|
|
514
|
+
Nasceu de um cliente NOS/Supabase (v1), já removido. Histórico cronológico:
|
|
515
|
+
[`docs/PROGRESSO.md`](docs/PROGRESSO.md).
|