@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
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
export const TAGLINE = 'Orquestrador de ambientes de desenvolvimento — perfil + wizard, e a CLI (com IA via MCP) materializa toolchains, linguagens, frameworks, dotfiles e IDE.';
|
|
2
|
+
export const SECTIONS = [
|
|
3
|
+
{
|
|
4
|
+
id: 'o-que-e',
|
|
5
|
+
title: 'O que é',
|
|
6
|
+
blocks: [
|
|
7
|
+
{
|
|
8
|
+
kind: 'p',
|
|
9
|
+
text: 'A NIO-CLI monta ambientes de desenvolvimento reproduzíveis. Você escolhe um perfil (fullstack, analyst, scientist, dba, qa, bi), responde um wizard, e a CLI garante os toolchains, resolve os MCPs, escreve dotfiles/aliases e abre a IDE.',
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
kind: 'p',
|
|
13
|
+
text: 'A entidade central é a Sessão: um ambiente isolado com UUID, persistido no Postgres. Uma sessão ativa por usuário por vez; sessões antigas ficam no banco e podem ser reativadas.',
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
kind: 'p',
|
|
17
|
+
text: 'O Postgres é a fonte da verdade. A CLI e o gateway só falam com o banco que VOCÊ configurar — não há default silencioso nem banco embutido no pacote.',
|
|
18
|
+
},
|
|
19
|
+
],
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
id: 'como-funciona',
|
|
23
|
+
title: 'Como funciona',
|
|
24
|
+
blocks: [
|
|
25
|
+
{
|
|
26
|
+
kind: 'code',
|
|
27
|
+
text: [
|
|
28
|
+
'você → nio (CLI) ──► nio-gateway ──► Postgres login: senha + JWT (2º fator opcional)',
|
|
29
|
+
' │',
|
|
30
|
+
' ├──► SessionManager / EnvironmentBuilder materializa toolchains, MCPs, dotfiles',
|
|
31
|
+
' │',
|
|
32
|
+
' └──► opencode.json ──► OpenCode (operador de IA)',
|
|
33
|
+
' └── MCP nio (tools nio_*) ──► SessionManager ──► Postgres',
|
|
34
|
+
].join('\n'),
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
kind: 'list',
|
|
38
|
+
items: [
|
|
39
|
+
'Autenticação — `nio register` / `nio login`. O nio-gateway (serviço HTTP loopback) verifica a senha (argon2id), dispara o 2º fator se ativo, e devolve um JWT salvo em ~/.nio/session.json.',
|
|
40
|
+
'Sessão — `nio init`. O wizard pergunta perfil + recipe; o EnvironmentBuilder garante os toolchains, resolve os MCPs e grava o config materializado na linha `sessions` do Postgres.',
|
|
41
|
+
'Handoff — a CLI registra o MCP `nio` no opencode.json e entrega o terminal pro OpenCode (modelo opencode/big-pickle). O agente passa a ter as tools nio_*.',
|
|
42
|
+
],
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
kind: 'p',
|
|
46
|
+
text: 'O nio-gateway só é necessário pros comandos de auth. Todo o resto (init, sessions, tools MCP) fala com o Postgres direto usando o JWT local.',
|
|
47
|
+
},
|
|
48
|
+
],
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
id: 'instalacao',
|
|
52
|
+
title: 'Instalação e pré-requisitos',
|
|
53
|
+
blocks: [
|
|
54
|
+
{ kind: 'code', text: 'npm i -g @nio-cli/cli' },
|
|
55
|
+
{
|
|
56
|
+
kind: 'p',
|
|
57
|
+
text: 'Precisa de Node.js 20.12+. Ficam no PATH: nio (CLI), nio-gateway (auth), nio-cli e nio-lang (servidores MCP).',
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
kind: 'table',
|
|
61
|
+
head: ['Requisito', 'Pra quê'],
|
|
62
|
+
rows: [
|
|
63
|
+
['PostgreSQL alcançável', 'fonte da verdade — schema de db/schema.sql aplicado uma vez'],
|
|
64
|
+
['JWT_SECRET (segredo do time)', 'assinar/validar as sessões — mesmo valor em toda máquina'],
|
|
65
|
+
['OpenCode', 'operador de IA — o `nio init` oferece instalar'],
|
|
66
|
+
['provedor de SMS (opcional)', '2º fator — SMS_ENDPOINT_URL + SMS_AUTH_HEADER + SMS_BODY_TEMPLATE'],
|
|
67
|
+
],
|
|
68
|
+
},
|
|
69
|
+
],
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
id: 'config',
|
|
73
|
+
title: 'Configuração',
|
|
74
|
+
blurb: 'Você não precisa exportar nada no shell.',
|
|
75
|
+
blocks: [
|
|
76
|
+
{
|
|
77
|
+
kind: 'p',
|
|
78
|
+
text: '`nio config setup` — wizard que pede o `NIO_DATABASE_URL` (o time te passa) e o `JWT_SECRET`, testa a conexão e grava em ~/.nio/config.env (chmod 600). `nio init`/`register`/`login` disparam esse wizard sozinhos se a config faltar; se estiver errada, param dizendo o quê.',
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
kind: 'code',
|
|
82
|
+
text: [
|
|
83
|
+
'nio config setup wizard (cola os valores, testa, salva)',
|
|
84
|
+
'nio config check completa? banco responde? (--json pra CI)',
|
|
85
|
+
'nio config path ~/.nio/config.env',
|
|
86
|
+
].join('\n'),
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
kind: 'p',
|
|
90
|
+
text: 'Precedência ao carregar: env do shell > $NIO_ENV_FILE > ./.env > ~/.nio/config.env.',
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
kind: 'table',
|
|
94
|
+
head: ['Variável', 'Lida por'],
|
|
95
|
+
rows: [
|
|
96
|
+
['NIO_DATABASE_URL / NIO_DATABASE_SSL', 'tudo que toca o banco'],
|
|
97
|
+
['JWT_SECRET / JWT_EXPIRES_IN (sem prefixo)', 'nio-gateway + nio-cli'],
|
|
98
|
+
['SMS_* (sem prefixo)', 'nio-gateway'],
|
|
99
|
+
['NIO_GATEWAY_HOST (default 127.0.0.1)', 'nio-gateway — 0.0.0.0 p/ Kong em container'],
|
|
100
|
+
['NIO_GATEWAY_URL (default http://127.0.0.1:8000)', 'a CLI, pra achar o gateway/Kong'],
|
|
101
|
+
],
|
|
102
|
+
},
|
|
103
|
+
],
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
id: 'primeiros-passos',
|
|
107
|
+
title: 'Primeiros passos',
|
|
108
|
+
blocks: [
|
|
109
|
+
{
|
|
110
|
+
kind: 'code',
|
|
111
|
+
text: [
|
|
112
|
+
'nio config setup # cola NIO_DATABASE_URL + JWT_SECRET, testa, salva',
|
|
113
|
+
'nio-gateway & # gateway de auth no ar',
|
|
114
|
+
'nio register # cria seu usuário na base compartilhada',
|
|
115
|
+
'nio login # salva o JWT em ~/.nio/session.json',
|
|
116
|
+
'nio security enable-2fa # (opcional) 2º fator',
|
|
117
|
+
'nio init # monta o ambiente da sessão',
|
|
118
|
+
].join('\n'),
|
|
119
|
+
},
|
|
120
|
+
{ kind: 'p', text: 'A qualquer momento, `nio debug` mostra o que está ok e o que falta.' },
|
|
121
|
+
],
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
id: 'arquitetura',
|
|
125
|
+
title: 'Como é construída',
|
|
126
|
+
blurb: 'Hexagonal — o núcleo não conhece IO; os adapters implementam os contratos.',
|
|
127
|
+
blocks: [
|
|
128
|
+
{
|
|
129
|
+
kind: 'code',
|
|
130
|
+
text: [
|
|
131
|
+
'entrypoints: src/cli.ts (nio) src/gateway/index.ts (nio-gateway)',
|
|
132
|
+
' src/mcp-server.ts (nio-cli) src/mcp-server-lang.ts (nio-lang)',
|
|
133
|
+
'app: SessionManager · EnvironmentBuilder · DependencyWatcher · DockerManager',
|
|
134
|
+
'core/: entidades + ports (interfaces, sem IO nenhum)',
|
|
135
|
+
'adapters/: pg/ (Postgres) ide/ pkg/ (npm,pip,…) docker/ sms/ skills/',
|
|
136
|
+
'profiles/: catálogo dos 6 perfis (fixos no fonte)',
|
|
137
|
+
].join('\n'),
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
kind: 'list',
|
|
141
|
+
items: [
|
|
142
|
+
'Runtime: Node 20.12+. Bun roda em dev, mas nada depende de API exclusiva do Bun.',
|
|
143
|
+
'Build: tsc puro → dist/. Sem bundler.',
|
|
144
|
+
'Banco: driver pg + um Pool único. Sem Supabase, sem PostgREST, sem Bun.sql.',
|
|
145
|
+
'Gateway: http.createServer nativo, loopback, atrás do Kong OSS (opcional, rate-limiting). JWT HS256, jti = id da auth_session. Trilha de auth em stderr — nunca a senha nem o OTP em texto puro.',
|
|
146
|
+
'Contrato "nunca lança" nos ports de IO: falha vira { status, error? }.',
|
|
147
|
+
],
|
|
148
|
+
},
|
|
149
|
+
],
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
id: '2fa',
|
|
153
|
+
title: '2º fator (SMS)',
|
|
154
|
+
blocks: [
|
|
155
|
+
{
|
|
156
|
+
kind: 'p',
|
|
157
|
+
text: 'Opt-in por conta. Com auth_2 ativo, o `nio login` pede um código de 6 dígitos por SMS; se o SMS não chega, vale um dos 10 códigos de backup (mostrados uma vez no enable-2fa).',
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
kind: 'code',
|
|
161
|
+
text: [
|
|
162
|
+
'nio security enable-2fa cadastra o celular, confirma via SMS, mostra os backups',
|
|
163
|
+
'nio security status ativo? número (mascarado)? quantos backups restam?',
|
|
164
|
+
'nio security disable-2fa',
|
|
165
|
+
'nio security regenerate-backup-codes',
|
|
166
|
+
].join('\n'),
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
kind: 'p',
|
|
170
|
+
text: 'O gateway gera/valida o OTP em processo (sem Twilio, sem broker), guarda só o HMAC do código (TTL 5 min, 3 tentativas, uso único) e manda o SMS por um adapter HTTP genérico. Sem SMS_ENDPOINT_URL, o login com auth_2 responde 503 — o de 1 fator segue normal.',
|
|
171
|
+
},
|
|
172
|
+
],
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
id: 'debug',
|
|
176
|
+
title: 'Debug da própria CLI',
|
|
177
|
+
blocks: [
|
|
178
|
+
{
|
|
179
|
+
kind: 'p',
|
|
180
|
+
text: '`nio debug` roda uma bateria de checagens read-only e mostra ✓ / ⚠ / ✗ com uma dica acionável em cada: nio.json no diretório, login local, conexão Postgres, sessão ativa, OpenCode no PATH, cache de skills.',
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
kind: 'list',
|
|
184
|
+
items: [
|
|
185
|
+
'"NIO_DATABASE_URL não definida" → ponha em ~/.nio/config.env (o bin publicado não lê o .env de dev via bun).',
|
|
186
|
+
'"Não consegui falar com o nio-gateway" → suba `nio-gateway &`.',
|
|
187
|
+
'"Não autenticado" → `nio register` (1ª vez) e `nio login`.',
|
|
188
|
+
'"2FA não configurado no servidor" (503) → faltam as SMS_* no ambiente do nio-gateway.',
|
|
189
|
+
'Tools não aparecem no cliente → reinicie o cliente depois do `nio init`; cheque com /mcp.',
|
|
190
|
+
],
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
kind: 'p',
|
|
194
|
+
text: 'Logs do gateway saem em stderr como JSON estruturado (event: gateway_request / auth_attempt) — nunca com senha ou OTP.',
|
|
195
|
+
},
|
|
196
|
+
],
|
|
197
|
+
},
|
|
198
|
+
];
|
|
199
|
+
//# sourceMappingURL=content.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content.js","sourceRoot":"","sources":["../../../../src/cli/commands/docs/content.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { toolDefinitions } from '../../../tools/index.js';
|
|
2
|
+
function firstSentence(text) {
|
|
3
|
+
const flat = text.replace(/\s+/g, ' ').trim();
|
|
4
|
+
const stop = flat.search(/\.(\s|$)/);
|
|
5
|
+
return stop > 0 ? flat.slice(0, stop + 1) : flat;
|
|
6
|
+
}
|
|
7
|
+
function walk(cmd, prefix = '') {
|
|
8
|
+
const rows = [];
|
|
9
|
+
for (const sub of cmd.commands) {
|
|
10
|
+
const nm = sub.name();
|
|
11
|
+
if (nm === 'help')
|
|
12
|
+
continue;
|
|
13
|
+
const full = prefix ? `${prefix} ${nm}` : nm;
|
|
14
|
+
const args = sub.commands.length > 0 ? '' : sub.usage().replace(/^\[options\]\s*/, '').trim();
|
|
15
|
+
const desc = sub.description();
|
|
16
|
+
if (desc)
|
|
17
|
+
rows.push([args ? `${full} ${args}` : full, firstSentence(desc)]);
|
|
18
|
+
rows.push(...walk(sub, full));
|
|
19
|
+
}
|
|
20
|
+
return rows;
|
|
21
|
+
}
|
|
22
|
+
export function commandSection(program) {
|
|
23
|
+
const rows = walk(program).sort((a, b) => a[0].localeCompare(b[0]));
|
|
24
|
+
return {
|
|
25
|
+
id: 'comandos',
|
|
26
|
+
title: 'Comandos',
|
|
27
|
+
blurb: `${rows.length} comandos. Ajuda de qualquer um: nio <cmd> --help`,
|
|
28
|
+
blocks: [{ kind: 'table', head: ['Comando', 'O que faz'], rows }],
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export function toolSection() {
|
|
32
|
+
const rows = [...toolDefinitions]
|
|
33
|
+
.sort((a, b) => a.name.localeCompare(b.name))
|
|
34
|
+
.map((t) => [t.name, firstSentence(t.description ?? '')]);
|
|
35
|
+
return {
|
|
36
|
+
id: 'tools-mcp',
|
|
37
|
+
title: 'Tools MCP',
|
|
38
|
+
blurb: 'Expostas pelo servidor nio-cli ao operador de IA. Todas passam pelo SessionManager e exigem nio login.',
|
|
39
|
+
blocks: [{ kind: 'table', head: ['Tool', 'O que faz'], rows }],
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=dynamic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamic.js","sourceRoot":"","sources":["../../../../src/cli/commands/docs/dynamic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
const esc = (s) => s.replace(/[&<>"]/g, (ch) => ({ '&': '&', '<': '<', '>': '>', '"': '"' })[ch]);
|
|
2
|
+
const inline = (s) => esc(s).replace(/`([^`]+)`/g, (_m, code) => `<code>${code}</code>`);
|
|
3
|
+
const STYLE = `
|
|
4
|
+
:root{
|
|
5
|
+
--bg:#f6f8f5; --surface:#fff; --ink:#16211a; --muted:#5a6b60; --line:#dde5dd;
|
|
6
|
+
--accent:#1a7f43; --accent-soft:#e3f2e6; --code-bg:#0d130f; --code-ink:#c8e6cf;
|
|
7
|
+
--font:"Inter",ui-sans-serif,-apple-system,"Segoe UI",Roboto,sans-serif;
|
|
8
|
+
--mono:ui-monospace,"SF Mono","JetBrains Mono",Menlo,Consolas,monospace;
|
|
9
|
+
}
|
|
10
|
+
@media (prefers-color-scheme:dark){:root:not([data-theme=light]){
|
|
11
|
+
--bg:#0a0e0b; --surface:#0f150f; --ink:#d7e5da; --muted:#7f9285; --line:#1e2a20;
|
|
12
|
+
--accent:#4ade80; --accent-soft:#122417; --code-bg:#060907; --code-ink:#bfe9c9;
|
|
13
|
+
}}
|
|
14
|
+
:root[data-theme=dark]{
|
|
15
|
+
--bg:#0a0e0b; --surface:#0f150f; --ink:#d7e5da; --muted:#7f9285; --line:#1e2a20;
|
|
16
|
+
--accent:#4ade80; --accent-soft:#122417; --code-bg:#060907; --code-ink:#bfe9c9;
|
|
17
|
+
}
|
|
18
|
+
*{box-sizing:border-box}
|
|
19
|
+
body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--font);
|
|
20
|
+
line-height:1.65;-webkit-font-smoothing:antialiased}
|
|
21
|
+
a{color:var(--accent);text-decoration:none}
|
|
22
|
+
a:hover{text-decoration:underline}
|
|
23
|
+
code{font-family:var(--mono);font-size:.88em;background:var(--accent-soft);
|
|
24
|
+
color:var(--accent);padding:.1em .38em;border-radius:4px}
|
|
25
|
+
header.top{border-bottom:1px solid var(--line);background:var(--surface);
|
|
26
|
+
position:sticky;top:0;z-index:5}
|
|
27
|
+
.top .inner{max-width:1000px;margin:0 auto;padding:22px 24px;
|
|
28
|
+
display:flex;justify-content:space-between;align-items:baseline;gap:20px;flex-wrap:wrap}
|
|
29
|
+
.brand{font-family:var(--mono);font-weight:700;font-size:1.35rem;letter-spacing:.02em}
|
|
30
|
+
.brand .cursor{color:var(--accent)}
|
|
31
|
+
.ver{font-family:var(--mono);font-size:.78rem;color:var(--muted);
|
|
32
|
+
border:1px solid var(--line);border-radius:999px;padding:.22em .7em;white-space:nowrap}
|
|
33
|
+
button.theme{font:inherit;font-size:.78rem;color:var(--muted);background:none;
|
|
34
|
+
border:1px solid var(--line);border-radius:999px;padding:.28em .8em;cursor:pointer;margin-left:8px}
|
|
35
|
+
.tag{max-width:1000px;margin:0 auto;padding:16px 24px 0;color:var(--muted);font-size:.95rem}
|
|
36
|
+
nav.toc{max-width:1000px;margin:0 auto;padding:14px 24px 26px;display:flex;flex-wrap:wrap;
|
|
37
|
+
gap:6px 16px;font-size:.84rem;border-bottom:1px solid var(--line)}
|
|
38
|
+
nav.toc a{color:var(--muted)}
|
|
39
|
+
nav.toc a:hover,nav.toc a.on{color:var(--accent);text-decoration:none}
|
|
40
|
+
main{max-width:1000px;margin:0 auto;padding:40px 24px 96px}
|
|
41
|
+
section{margin:0 0 48px;scroll-margin-top:80px}
|
|
42
|
+
h2{font-size:1.3rem;margin:0 0 4px;letter-spacing:-.01em}
|
|
43
|
+
.blurb{color:var(--muted);margin:0 0 18px;font-size:.95rem}
|
|
44
|
+
p{margin:0 0 14px;max-width:72ch}
|
|
45
|
+
ul{margin:0 0 16px;padding-left:20px;max-width:74ch}
|
|
46
|
+
li{margin:.4em 0}
|
|
47
|
+
pre{background:var(--code-bg);color:var(--code-ink);font-family:var(--mono);
|
|
48
|
+
font-size:.82rem;line-height:1.6;padding:16px 18px;border-radius:10px;
|
|
49
|
+
overflow-x:auto;border:1px solid var(--line);margin:0 0 18px}
|
|
50
|
+
pre code{background:none;color:inherit;padding:0;font-size:inherit}
|
|
51
|
+
.tbl{overflow-x:auto;margin:0 0 18px;border:1px solid var(--line);border-radius:10px}
|
|
52
|
+
table{border-collapse:collapse;width:100%;font-size:.9rem}
|
|
53
|
+
th,td{text-align:left;padding:9px 14px;border-bottom:1px solid var(--line);vertical-align:top}
|
|
54
|
+
tr:last-child td{border-bottom:0}
|
|
55
|
+
th{font-weight:600;color:var(--muted);font-size:.78rem;text-transform:uppercase;letter-spacing:.04em}
|
|
56
|
+
td:first-child{font-family:var(--mono);font-size:.85rem;white-space:nowrap}
|
|
57
|
+
@media(max-width:640px){td:first-child{white-space:normal}}
|
|
58
|
+
`;
|
|
59
|
+
function renderBlock(b) {
|
|
60
|
+
if (b.kind === 'p')
|
|
61
|
+
return `<p>${inline(b.text)}</p>`;
|
|
62
|
+
if (b.kind === 'code')
|
|
63
|
+
return `<pre><code>${esc(b.text)}</code></pre>`;
|
|
64
|
+
if (b.kind === 'list')
|
|
65
|
+
return `<ul>${b.items.map((i) => `<li>${inline(i)}</li>`).join('')}</ul>`;
|
|
66
|
+
const head = b.head.map((h) => `<th>${esc(h)}</th>`).join('');
|
|
67
|
+
const rows = b.rows
|
|
68
|
+
.map((r) => `<tr>${r.map((cell) => `<td>${inline(cell)}</td>`).join('')}</tr>`)
|
|
69
|
+
.join('');
|
|
70
|
+
return `<div class="tbl"><table><thead><tr>${head}</tr></thead><tbody>${rows}</tbody></table></div>`;
|
|
71
|
+
}
|
|
72
|
+
const SCRIPT = `
|
|
73
|
+
const root=document.documentElement,KEY='nio-docs-theme';
|
|
74
|
+
try{const t=localStorage.getItem(KEY);if(t)root.dataset.theme=t}catch(e){}
|
|
75
|
+
document.querySelector('button.theme').onclick=()=>{
|
|
76
|
+
const sysDark=matchMedia('(prefers-color-scheme:dark)').matches;
|
|
77
|
+
const cur=root.dataset.theme||(sysDark?'dark':'light');
|
|
78
|
+
const next=cur==='dark'?'light':'dark';root.dataset.theme=next;
|
|
79
|
+
try{localStorage.setItem(KEY,next)}catch(e){}};
|
|
80
|
+
const links=[...document.querySelectorAll('nav.toc a')];
|
|
81
|
+
addEventListener('scroll',()=>{let on=links[0];
|
|
82
|
+
for(const l of links){const el=document.getElementById(l.hash.slice(1));
|
|
83
|
+
if(el&&el.getBoundingClientRect().top<140)on=l}
|
|
84
|
+
links.forEach(l=>l.classList.toggle('on',l===on))},{passive:true});
|
|
85
|
+
`;
|
|
86
|
+
export function renderHtml(sections, version, tagline) {
|
|
87
|
+
const nav = sections
|
|
88
|
+
.map((s) => `<a href="#${s.id}">${esc(s.title)}</a>`)
|
|
89
|
+
.join(' ');
|
|
90
|
+
const body = sections
|
|
91
|
+
.map((s) => `<section id="${s.id}"><h2>${esc(s.title)}</h2>` +
|
|
92
|
+
(s.blurb ? `<p class="blurb">${inline(s.blurb)}</p>` : '') +
|
|
93
|
+
s.blocks.map(renderBlock).join('') +
|
|
94
|
+
`</section>`)
|
|
95
|
+
.join('');
|
|
96
|
+
return `<!doctype html><html lang="pt-BR"><head><meta charset="utf-8">
|
|
97
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
98
|
+
<title>NIO-CLI — documentação</title><style>${STYLE}</style></head><body>
|
|
99
|
+
<header class="top"><div class="inner">
|
|
100
|
+
<div class="brand">nio<span class="cursor">_</span></div>
|
|
101
|
+
<div style="white-space:nowrap"><span class="ver">v${esc(version)}</span>
|
|
102
|
+
<button class="theme">tema</button></div></div></header>
|
|
103
|
+
<p class="tag">${esc(tagline)}</p>
|
|
104
|
+
<nav class="toc">${nav}</nav>
|
|
105
|
+
<main>${body}</main>
|
|
106
|
+
<script>${SCRIPT}</script></body></html>`;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=html.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html.js","sourceRoot":"","sources":["../../../../src/cli/commands/docs/html.ts"],"names":[],"mappings":"AAOA,MAAM,GAAG,GAAG,CAAC,CAAS,EAAU,EAAE,CAChC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAE,CAAC,CAAC;AAGjG,MAAM,MAAM,GAAG,CAAC,CAAS,EAAU,EAAE,CACnC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE,IAAY,EAAE,EAAE,CAAC,SAAS,IAAI,SAAS,CAAC,CAAC;AAE7E,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuDb,CAAC;AAEF,SAAS,WAAW,CAAC,CAAQ;IAC3B,IAAI,CAAC,CAAC,IAAI,KAAK,GAAG;QAAE,OAAO,MAAM,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IACtD,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,cAAc,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC;IACvE,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;IACjG,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9D,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI;SAChB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;SAC9E,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,OAAO,sCAAsC,IAAI,uBAAuB,IAAI,wBAAwB,CAAC;AACvG,CAAC;AAED,MAAM,MAAM,GAAG;;;;;;;;;;;;;CAad,CAAC;AAEF,MAAM,UAAU,UAAU,CACxB,QAAsB,EACtB,OAAe,EACf,OAAe;IAEf,MAAM,GAAG,GAAG,QAAQ;SACjB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;SACpD,IAAI,CAAC,GAAG,CAAC,CAAC;IACb,MAAM,IAAI,GAAG,QAAQ;SAClB,GAAG,CACF,CAAC,CAAC,EAAE,EAAE,CACJ,gBAAgB,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO;QAChD,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,oBAAoB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,YAAY,CACf;SACA,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,OAAO;;8CAEqC,KAAK;;;qDAGE,GAAG,CAAC,OAAO,CAAC;;iBAEhD,GAAG,CAAC,OAAO,CAAC;mBACV,GAAG;QACd,IAAI;UACF,MAAM,yBAAyB,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { c, sym, rule, highlightInlineCode, indent } from '../../../lib/colors.js';
|
|
2
|
+
function codeBlock(text) {
|
|
3
|
+
return text
|
|
4
|
+
.split('\n')
|
|
5
|
+
.map((l) => `${c.dim('│')} ${c.cyan(l)}`)
|
|
6
|
+
.join('\n');
|
|
7
|
+
}
|
|
8
|
+
function defList(head, rows) {
|
|
9
|
+
return rows
|
|
10
|
+
.map((r) => {
|
|
11
|
+
const term = c.bold(r[0] ?? '');
|
|
12
|
+
const rest = r.slice(1).map((cell) => highlightInlineCode(cell)).join(' — ');
|
|
13
|
+
return rest ? `${term}\n${indent(c.dim(rest), 2)}` : term;
|
|
14
|
+
})
|
|
15
|
+
.join('\n');
|
|
16
|
+
}
|
|
17
|
+
function renderBlock(b) {
|
|
18
|
+
switch (b.kind) {
|
|
19
|
+
case 'p':
|
|
20
|
+
return highlightInlineCode(b.text);
|
|
21
|
+
case 'code':
|
|
22
|
+
return codeBlock(b.text);
|
|
23
|
+
case 'list':
|
|
24
|
+
return b.items.map((it) => `${c.dim(sym.bullet)} ${highlightInlineCode(it)}`).join('\n');
|
|
25
|
+
case 'table':
|
|
26
|
+
return defList(b.head, b.rows);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export function renderTerminal(sections, version) {
|
|
30
|
+
const parts = [c.bold(`NIO-CLI ${c.dim('v' + version)}`), ''];
|
|
31
|
+
for (const s of sections) {
|
|
32
|
+
parts.push(rule(), c.bold.underline(s.title.toUpperCase()));
|
|
33
|
+
if (s.blurb)
|
|
34
|
+
parts.push(c.dim(s.blurb));
|
|
35
|
+
parts.push('');
|
|
36
|
+
for (const b of s.blocks)
|
|
37
|
+
parts.push(indent(renderBlock(b), 2), '');
|
|
38
|
+
}
|
|
39
|
+
parts.push(rule(), c.dim('Página com arte: nio docs --html --open'));
|
|
40
|
+
return parts.join('\n');
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=terminal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal.js","sourceRoot":"","sources":["../../../../src/cli/commands/docs/terminal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { writeFileSync } from "node:fs";
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
import { VERSION } from "../../version.js";
|
|
4
|
+
import { c, sym } from "../../lib/colors.js";
|
|
5
|
+
import { openUrl } from "../../lib/open-url.js";
|
|
6
|
+
import { homePath } from "../../brand.js";
|
|
7
|
+
import { SECTIONS, TAGLINE } from "./docs/content.js";
|
|
8
|
+
import { commandSection, toolSection } from "./docs/dynamic.js";
|
|
9
|
+
import { renderTerminal } from "./docs/terminal.js";
|
|
10
|
+
import { renderHtml } from "./docs/html.js";
|
|
11
|
+
function allSections(program) {
|
|
12
|
+
return [...SECTIONS, commandSection(program), toolSection()];
|
|
13
|
+
}
|
|
14
|
+
export function registerDocsCommand(program) {
|
|
15
|
+
program
|
|
16
|
+
.command("docs")
|
|
17
|
+
.description("Documentação completa da CLI (terminal ou página com --html)")
|
|
18
|
+
.option("--html", "gera a página HTML em vez de imprimir no terminal")
|
|
19
|
+
.option("--open", "abre a página no navegador (implica --html)")
|
|
20
|
+
.option("-o, --out <path>", "caminho do HTML (default ~/.nio/nio-docs.html)")
|
|
21
|
+
.action((opts) => {
|
|
22
|
+
const sections = allSections(program);
|
|
23
|
+
if (!opts.html && !opts.open) {
|
|
24
|
+
console.log(renderTerminal(sections, VERSION));
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const out = resolve(opts.out ?? homePath("nio-docs.html"));
|
|
28
|
+
writeFileSync(out, renderHtml(sections, VERSION, TAGLINE), "utf8");
|
|
29
|
+
console.log(`${c.green(sym.ok)} página gerada: ${c.cyan(out)}`);
|
|
30
|
+
if (opts.open)
|
|
31
|
+
openUrl(out);
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=docs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs.js","sourceRoot":"","sources":["../../../src/cli/commands/docs.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,SAAS,WAAW,CAAC,OAAgB;IACnC,OAAO,CAAC,GAAG,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,8DAA8D,CAAC;SAC3E,MAAM,CAAC,QAAQ,EAAE,mDAAmD,CAAC;SACrE,MAAM,CAAC,QAAQ,EAAE,6CAA6C,CAAC;SAC/D,MAAM,CAAC,kBAAkB,EAAE,gDAAgD,CAAC;SAC5E,MAAM,CAAC,CAAC,IAAsD,EAAE,EAAE;QACjE,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QAEtC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;YAC/C,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;QAC3D,aAAa,CAAC,GAAG,EAAE,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChE,IAAI,IAAI,CAAC,IAAI;YAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
import { brand } from "../../brand.js";
|
|
2
2
|
import { existsSync } from "node:fs";
|
|
3
|
-
import { runExec, getJob } from "../../lib/exec-delegate.js";
|
|
4
|
-
import { ENGINES, DEFAULT_ENGINE, parseEngine, } from "../../lib/exec-engines.js";
|
|
5
|
-
/**
|
|
6
|
-
* Superfície de CLI da delegação headless — o que o nio Studio (Tauri) chama.
|
|
7
|
-
* Contrato: **stdout = JSON** (parseável), **stderr = log ao vivo** (streamável).
|
|
8
|
-
*/
|
|
3
|
+
import { runExec, getJob } from "../../lib/exec/exec-delegate.js";
|
|
4
|
+
import { ENGINES, DEFAULT_ENGINE, parseEngine, } from "../../lib/exec/exec-engines.js";
|
|
9
5
|
function emit(payload) {
|
|
10
6
|
process.stdout.write(`${JSON.stringify(payload, null, 2)}\n`);
|
|
11
7
|
}
|
|
@@ -42,7 +38,6 @@ export function registerExecCommand(program) {
|
|
|
42
38
|
if (job.state !== "done")
|
|
43
39
|
process.exitCode = 1;
|
|
44
40
|
});
|
|
45
|
-
// Comando separado (não subcomando): opções `required` do pai bloqueariam o parse.
|
|
46
41
|
program
|
|
47
42
|
.command("exec-status <jobId>")
|
|
48
43
|
.description(`Estado de um job de execução (\`${brand.name} exec\`), em JSON`)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../../../src/cli/commands/exec.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../../../src/cli/commands/exec.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EACL,OAAO,EACP,cAAc,EACd,WAAW,GACZ,MAAM,gCAAgC,CAAC;AAOxC,SAAS,IAAI,CAAC,OAAgB;IAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CACV,sEAAsE;QACpE,mDAAmD,CACtD;SACA,cAAc,CACb,mBAAmB,EACnB,oDAAoD,CACrD;SACA,cAAc,CACb,uBAAuB,EACvB,wCAAwC,CACzC;SACA,MAAM,CACL,mBAAmB,EACnB,uBAAuB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAC7C,cAAc,CACf;SACA,MAAM,CAAC,SAAS,EAAE,uCAAuC,CAAC;SAC1D,MAAM,CACL,KAAK,EAAE,IAKN,EAAE,EAAE;QACH,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,KAAK,EAAE,oBAAoB,IAAI,CAAC,MAAM,kBAAkB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aAC7E,CAAC,CAAC;YACH,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,EAAE,KAAK,EAAE,4BAA4B,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAC7D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC;YACxB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,MAAM;YACN,IAAI,EAAE,IAAI,CAAC,KAAK,KAAK,IAAI;SAC1B,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,GAAG,CAAC,KAAK,KAAK,MAAM;YAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACjD,CAAC,CACF,CAAC;IAGJ,OAAO;SACJ,OAAO,CAAC,qBAAqB,CAAC;SAC9B,WAAW,CAAC,mCAAmC,KAAK,CAAC,IAAI,mBAAmB,CAAC;SAC7E,MAAM,CAAC,CAAC,KAAa,EAAE,EAAE;QACxB,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,KAAK,EAAE,EAAE,CAAC,CAAC;YAChD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,49 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { loadSession } from "../../../lib/auth/session-store.js";
|
|
2
2
|
import { brand } from "../../../brand.js";
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Garante que há credenciais locais antes de seguir com o wizard: se já há PAT
|
|
9
|
-
* salvo, não faz nada; senão, pede o token, valida e troca por sessão.
|
|
10
|
-
*/
|
|
11
|
-
export async function ensureAuthenticated() {
|
|
12
|
-
const existingCreds = await loadCredentials();
|
|
13
|
-
if (existingCreds)
|
|
14
|
-
return;
|
|
15
|
-
console.log("Você ainda não está autenticado.");
|
|
16
|
-
if (brand.webUrl)
|
|
17
|
-
console.log(`Gere um token pessoal em: ${brand.webUrl}/profile#mcp`);
|
|
18
|
-
const newPat = (await password({
|
|
19
|
-
message: initCopy.patPrompt,
|
|
20
|
-
mask: "*",
|
|
21
|
-
validate: (value) => validatePatFormat(value.trim()) || initCopy.patInvalid,
|
|
22
|
-
})).trim();
|
|
23
|
-
const loginSpinner = startSpinner("Validando token...");
|
|
24
|
-
try {
|
|
25
|
-
const result = await exchangePatForJwt(newPat);
|
|
26
|
-
await saveCredentials({ pat: newPat });
|
|
27
|
-
loginSpinner.stop();
|
|
28
|
-
const displayName = result.user.full_name || result.user.email;
|
|
29
|
-
console.log(`[ok] Autenticado como ${displayName}`);
|
|
30
|
-
}
|
|
31
|
-
catch (err) {
|
|
32
|
-
loginSpinner.fail(`Falha ao autenticar: ${err.message}`);
|
|
33
|
-
process.exit(1);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
/** Cria a sessão autenticada (client Supabase + user) usada pelo resto do wizard. */
|
|
37
|
-
export async function createSessionStep() {
|
|
38
|
-
const authSpinner = startSpinner("Carregando sessão...");
|
|
39
|
-
try {
|
|
40
|
-
const session = await createAuthenticatedClient();
|
|
41
|
-
authSpinner.stop();
|
|
3
|
+
import { box, c, sym, cmd } from "../../../lib/colors.js";
|
|
4
|
+
export async function requireLocalSessionStep() {
|
|
5
|
+
const session = await loadSession();
|
|
6
|
+
if (session)
|
|
42
7
|
return session;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
}
|
|
8
|
+
console.log(box(`${c.yellow(sym.warn)} ${c.bold("Você ainda não está autenticado.")}\n` +
|
|
9
|
+
`${c.dim("crie um usuário:")} ${cmd(`${brand.name} register`)}\n` +
|
|
10
|
+
`${c.dim("depois entre com:")} ${cmd(`${brand.name} login`)}`, { borderColor: "yellow", title: "Autenticação necessária" }));
|
|
11
|
+
process.exit(1);
|
|
48
12
|
}
|
|
49
13
|
//# sourceMappingURL=auth-step.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-step.js","sourceRoot":"","sources":["../../../../src/cli/commands/init/auth-step.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"auth-step.js","sourceRoot":"","sources":["../../../../src/cli/commands/init/auth-step.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAsB,MAAM,oCAAoC,CAAC;AACrF,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAQ1D,MAAM,CAAC,KAAK,UAAU,uBAAuB;IAC3C,MAAM,OAAO,GAAG,MAAM,WAAW,EAAE,CAAC;IACpC,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAE5B,OAAO,CAAC,GAAG,CACT,GAAG,CACD,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,kCAAkC,CAAC,IAAI;QACrE,GAAG,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,WAAW,CAAC,IAAI;QACjE,GAAG,CAAC,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,QAAQ,CAAC,EAAE,EAC/D,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAC5D,CACF,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
|