@nio-cli/cli 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +332 -139
- package/dist/adapters/docker/docker-gateway.js +100 -0
- package/dist/adapters/docker/docker-gateway.js.map +1 -0
- package/dist/adapters/ide/ide-gateway.js +50 -0
- package/dist/adapters/ide/ide-gateway.js.map +1 -0
- package/dist/adapters/lang/knowledge-store.js +97 -0
- package/dist/adapters/lang/knowledge-store.js.map +1 -0
- package/dist/adapters/lang/language-catalog.js +86 -0
- package/dist/adapters/lang/language-catalog.js.map +1 -0
- package/dist/adapters/lang/package-map.js +98 -0
- package/dist/adapters/lang/package-map.js.map +1 -0
- package/dist/adapters/lang/project-detector.js +40 -0
- package/dist/adapters/lang/project-detector.js.map +1 -0
- package/dist/adapters/lang/repos.js +8 -0
- package/dist/adapters/lang/repos.js.map +1 -0
- package/dist/adapters/lang/scaffold-gateway.js +135 -0
- package/dist/adapters/lang/scaffold-gateway.js.map +1 -0
- package/dist/adapters/lang/vendor.js +52 -0
- package/dist/adapters/lang/vendor.js.map +1 -0
- package/dist/adapters/pg/auth-session-repository.js +41 -0
- package/dist/adapters/pg/auth-session-repository.js.map +1 -0
- package/dist/adapters/pg/client.js +74 -0
- package/dist/adapters/pg/client.js.map +1 -0
- package/dist/adapters/pg/dependency-event-repository.js +40 -0
- package/dist/adapters/pg/dependency-event-repository.js.map +1 -0
- package/dist/adapters/pg/login-challenge-repository.js +54 -0
- package/dist/adapters/pg/login-challenge-repository.js.map +1 -0
- package/dist/adapters/pg/session-repository.js +70 -0
- package/dist/adapters/pg/session-repository.js.map +1 -0
- package/dist/adapters/pg/user-repository.js +71 -0
- package/dist/adapters/pg/user-repository.js.map +1 -0
- package/dist/adapters/pkg/toolchain-gateway.js +35 -0
- package/dist/adapters/pkg/toolchain-gateway.js.map +1 -0
- package/dist/adapters/skills/recipe-catalog.js +84 -0
- package/dist/adapters/skills/recipe-catalog.js.map +1 -0
- package/dist/adapters/sms/http-generic.js +50 -0
- package/dist/adapters/sms/http-generic.js.map +1 -0
- package/dist/app/dependency-watcher.js +87 -0
- package/dist/app/dependency-watcher.js.map +1 -0
- package/dist/app/docker-manager.js +110 -0
- package/dist/app/docker-manager.js.map +1 -0
- package/dist/app/environment-builder.js +73 -0
- package/dist/app/environment-builder.js.map +1 -0
- package/dist/app/language-configurator.js +30 -0
- package/dist/app/language-configurator.js.map +1 -0
- package/dist/app/session-manager.js +124 -0
- package/dist/app/session-manager.js.map +1 -0
- package/dist/brand.js +3 -61
- package/dist/brand.js.map +1 -1
- package/dist/cli/commands/agents.js +30 -0
- package/dist/cli/commands/agents.js.map +1 -0
- package/dist/cli/commands/auth.js +122 -90
- package/dist/cli/commands/auth.js.map +1 -1
- package/dist/cli/commands/clean.js +1 -13
- package/dist/cli/commands/clean.js.map +1 -1
- package/dist/cli/commands/command.js +58 -0
- package/dist/cli/commands/command.js.map +1 -0
- package/dist/cli/commands/completion.js +0 -3
- package/dist/cli/commands/completion.js.map +1 -1
- package/dist/cli/commands/config.js +41 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/debug.js +93 -0
- package/dist/cli/commands/debug.js.map +1 -0
- package/dist/cli/commands/deps.js +94 -0
- package/dist/cli/commands/deps.js.map +1 -0
- package/dist/cli/commands/docker.js +360 -0
- package/dist/cli/commands/docker.js.map +1 -0
- package/dist/cli/commands/docs/content.js +199 -0
- package/dist/cli/commands/docs/content.js.map +1 -0
- package/dist/cli/commands/docs/dynamic.js +42 -0
- package/dist/cli/commands/docs/dynamic.js.map +1 -0
- package/dist/cli/commands/docs/html.js +108 -0
- package/dist/cli/commands/docs/html.js.map +1 -0
- package/dist/cli/commands/docs/terminal.js +42 -0
- package/dist/cli/commands/docs/terminal.js.map +1 -0
- package/dist/cli/commands/docs.js +34 -0
- package/dist/cli/commands/docs.js.map +1 -0
- package/dist/cli/commands/exec.js +2 -7
- package/dist/cli/commands/exec.js.map +1 -1
- package/dist/cli/commands/init/auth-step.js +9 -45
- package/dist/cli/commands/init/auth-step.js.map +1 -1
- package/dist/cli/commands/init/clients-step.js +12 -39
- package/dist/cli/commands/init/clients-step.js.map +1 -1
- package/dist/cli/commands/init/context-step.js +7 -33
- package/dist/cli/commands/init/context-step.js.map +1 -1
- package/dist/cli/commands/init/index.js +177 -33
- package/dist/cli/commands/init/index.js.map +1 -1
- package/dist/cli/commands/init/lang-step.js +40 -0
- package/dist/cli/commands/init/lang-step.js.map +1 -0
- package/dist/cli/commands/init/profile-step.js +43 -0
- package/dist/cli/commands/init/profile-step.js.map +1 -0
- package/dist/cli/commands/init/provision-step.js +8 -23
- package/dist/cli/commands/init/provision-step.js.map +1 -1
- package/dist/cli/commands/init/recipe-step.js +18 -0
- package/dist/cli/commands/init/recipe-step.js.map +1 -0
- package/dist/cli/commands/lang.js +27 -0
- package/dist/cli/commands/lang.js.map +1 -0
- package/dist/cli/commands/open.js +51 -0
- package/dist/cli/commands/open.js.map +1 -0
- package/dist/cli/commands/plan.js +2 -6
- package/dist/cli/commands/plan.js.map +1 -1
- package/dist/cli/commands/security.js +143 -0
- package/dist/cli/commands/security.js.map +1 -0
- package/dist/cli/commands/sessions.js +92 -0
- package/dist/cli/commands/sessions.js.map +1 -0
- package/dist/cli/commands/skills.js +1 -1
- package/dist/cli/commands/skills.js.map +1 -1
- package/dist/cli/commands/sync.js +52 -58
- package/dist/cli/commands/sync.js.map +1 -1
- package/dist/cli/commands/validate-plan.js +2 -6
- package/dist/cli/commands/validate-plan.js.map +1 -1
- package/dist/cli/copy/auth.json +9 -2
- package/dist/cli/copy/init.json +2 -6
- package/dist/cli/copy.js +0 -8
- package/dist/cli/copy.js.map +1 -1
- package/dist/cli/flows/clients.js +3 -94
- package/dist/cli/flows/clients.js.map +1 -1
- package/dist/cli/flows/completion.js +1 -6
- package/dist/cli/flows/completion.js.map +1 -1
- package/dist/cli/flows/dependencies.js +1 -18
- package/dist/cli/flows/dependencies.js.map +1 -1
- package/dist/cli/flows/sections.js +2 -10
- package/dist/cli/flows/sections.js.map +1 -1
- package/dist/cli/flows/user-config.js +5 -10
- package/dist/cli/flows/user-config.js.map +1 -1
- package/dist/cli/ui/render.js +2 -53
- package/dist/cli/ui/render.js.map +1 -1
- package/dist/cli/ui/report.js +0 -13
- package/dist/cli/ui/report.js.map +1 -1
- package/dist/cli.js +23 -0
- package/dist/cli.js.map +1 -1
- package/dist/config.js +27 -56
- package/dist/config.js.map +1 -1
- package/dist/core/docker.js +2 -0
- package/dist/core/docker.js.map +1 -0
- package/dist/core/environment.js +2 -0
- package/dist/core/environment.js.map +1 -0
- package/dist/core/lang.js +11 -0
- package/dist/core/lang.js.map +1 -0
- package/dist/core/messaging.js +2 -0
- package/dist/core/messaging.js.map +1 -0
- package/dist/core/repositories.js +2 -0
- package/dist/core/repositories.js.map +1 -0
- package/dist/core/types.js +0 -5
- package/dist/core/types.js.map +1 -1
- package/dist/gateway/config.js +14 -0
- package/dist/gateway/config.js.map +1 -0
- package/dist/gateway/edge-filter.js +55 -0
- package/dist/gateway/edge-filter.js.map +1 -0
- package/dist/gateway/index.js +176 -0
- package/dist/gateway/index.js.map +1 -0
- package/dist/gateway/middleware/auth.js +34 -0
- package/dist/gateway/middleware/auth.js.map +1 -0
- package/dist/gateway/services/login.js +112 -0
- package/dist/gateway/services/login.js.map +1 -0
- package/dist/gateway/services/security.js +99 -0
- package/dist/gateway/services/security.js.map +1 -0
- package/dist/lib/auth/backup-codes.js +46 -0
- package/dist/lib/auth/backup-codes.js.map +1 -0
- package/dist/lib/auth/gateway-client.js +106 -0
- package/dist/lib/auth/gateway-client.js.map +1 -0
- package/dist/lib/auth/gateway-token.js +26 -0
- package/dist/lib/auth/gateway-token.js.map +1 -0
- package/dist/lib/auth/nio-config.js +138 -0
- package/dist/lib/auth/nio-config.js.map +1 -0
- package/dist/lib/auth/otp.js +23 -0
- package/dist/lib/auth/otp.js.map +1 -0
- package/dist/lib/auth/password.js +23 -0
- package/dist/lib/auth/password.js.map +1 -0
- package/dist/lib/auth/session-store.js +49 -0
- package/dist/lib/auth/session-store.js.map +1 -0
- package/dist/lib/clients/autopull.js +8 -0
- package/dist/lib/clients/autopull.js.map +1 -0
- package/dist/lib/{client-configs.js → clients/client-configs.js} +99 -34
- package/dist/lib/clients/client-configs.js.map +1 -0
- package/dist/lib/clients/client-install.js +20 -0
- package/dist/lib/clients/client-install.js.map +1 -0
- package/dist/lib/{harness.js → clients/harness.js} +1 -16
- package/dist/lib/clients/harness.js.map +1 -0
- package/dist/lib/{hooks.js → clients/hooks.js} +5 -31
- package/dist/lib/clients/hooks.js.map +1 -0
- package/dist/lib/{targets.js → clients/targets.js} +17 -53
- package/dist/lib/clients/targets.js.map +1 -0
- package/dist/lib/colors.js +0 -24
- package/dist/lib/colors.js.map +1 -1
- package/dist/lib/cowork-extension.js +2 -25
- package/dist/lib/cowork-extension.js.map +1 -1
- package/dist/lib/{dependencies.js → deps/dependencies.js} +1 -26
- package/dist/lib/deps/dependencies.js.map +1 -0
- package/dist/lib/deps/dependency-install-project.js +27 -0
- package/dist/lib/deps/dependency-install-project.js.map +1 -0
- package/dist/lib/{dependency-install.js → deps/dependency-install.js} +10 -35
- package/dist/lib/deps/dependency-install.js.map +1 -0
- package/dist/lib/deps/dependency-installed.js +64 -0
- package/dist/lib/deps/dependency-installed.js.map +1 -0
- package/dist/lib/deps/dependency-scan.js +100 -0
- package/dist/lib/deps/dependency-scan.js.map +1 -0
- package/dist/lib/docker.js +50 -0
- package/dist/lib/docker.js.map +1 -0
- package/dist/lib/dotfiles.js +57 -0
- package/dist/lib/dotfiles.js.map +1 -0
- package/dist/lib/{exec-delegate.js → exec/exec-delegate.js} +4 -13
- package/dist/lib/exec/exec-delegate.js.map +1 -0
- package/dist/lib/{exec-engines.js → exec/exec-engines.js} +1 -10
- package/dist/lib/exec/exec-engines.js.map +1 -0
- package/dist/lib/{plan-delegate.js → exec/plan-delegate.js} +1 -7
- package/dist/lib/exec/plan-delegate.js.map +1 -0
- package/dist/lib/{validate-plan-delegate.js → exec/validate-plan-delegate.js} +2 -7
- package/dist/lib/exec/validate-plan-delegate.js.map +1 -0
- package/dist/lib/load-env.js +15 -0
- package/dist/lib/load-env.js.map +1 -0
- package/dist/lib/open-url.js +9 -0
- package/dist/lib/open-url.js.map +1 -0
- package/dist/lib/prompts.js +0 -13
- package/dist/lib/prompts.js.map +1 -1
- package/dist/lib/{provision-apply.js → provision/provision-apply.js} +4 -30
- package/dist/lib/provision/provision-apply.js.map +1 -0
- package/dist/lib/{provision-collect.js → provision/provision-collect.js} +0 -9
- package/dist/lib/provision/provision-collect.js.map +1 -0
- package/dist/lib/{provision.js → provision/provision.js} +4 -17
- package/dist/lib/provision/provision.js.map +1 -0
- package/dist/lib/{patterns.js → skills/patterns.js} +0 -13
- package/dist/lib/skills/patterns.js.map +1 -0
- package/dist/lib/{rules.js → skills/rules.js} +0 -22
- package/dist/lib/skills/rules.js.map +1 -0
- package/dist/lib/skills/sections.js +58 -0
- package/dist/lib/skills/sections.js.map +1 -0
- package/dist/lib/{skill-serve.js → skills/skill-serve.js} +1 -26
- package/dist/lib/skills/skill-serve.js.map +1 -0
- package/dist/lib/{skills-cache.js → skills/skills-cache.js} +15 -21
- package/dist/lib/skills/skills-cache.js.map +1 -0
- package/dist/lib/{skills.js → skills/skills.js} +3 -49
- package/dist/lib/skills/skills.js.map +1 -0
- package/dist/lib/spinner.js.map +1 -0
- package/dist/lib/telemetry.js +3 -20
- package/dist/lib/telemetry.js.map +1 -1
- package/dist/lib/version-check.js +0 -20
- package/dist/lib/version-check.js.map +1 -1
- package/dist/matrix-logo.js +0 -10
- package/dist/matrix-logo.js.map +1 -1
- package/dist/mcp-server-lang.js +39 -0
- package/dist/mcp-server-lang.js.map +1 -0
- package/dist/mcp-server.js +37 -41
- package/dist/mcp-server.js.map +1 -1
- package/dist/profiles/analyst.js +10 -0
- package/dist/profiles/analyst.js.map +1 -0
- package/dist/profiles/bi.js +9 -0
- package/dist/profiles/bi.js.map +1 -0
- package/dist/profiles/dba.js +21 -0
- package/dist/profiles/dba.js.map +1 -0
- package/dist/profiles/fullstack.js +9 -0
- package/dist/profiles/fullstack.js.map +1 -0
- package/dist/profiles/index.js +39 -0
- package/dist/profiles/index.js.map +1 -0
- package/dist/profiles/mcps.js +23 -0
- package/dist/profiles/mcps.js.map +1 -0
- package/dist/profiles/qa.js +10 -0
- package/dist/profiles/qa.js.map +1 -0
- package/dist/profiles/scientist.js +9 -0
- package/dist/profiles/scientist.js.map +1 -0
- package/dist/profiles/toolchains.js +9 -0
- package/dist/profiles/toolchains.js.map +1 -0
- package/dist/tools/delegate-exec.js +2 -2
- package/dist/tools/delegate-exec.js.map +1 -1
- package/dist/tools/env-detect-deps.js +54 -0
- package/dist/tools/env-detect-deps.js.map +1 -0
- package/dist/tools/env-materialize.js +43 -0
- package/dist/tools/env-materialize.js.map +1 -0
- package/dist/tools/exec-status.js +1 -1
- package/dist/tools/exec-status.js.map +1 -1
- package/dist/tools/index.js +12 -32
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/lang-recipe.js +31 -0
- package/dist/tools/lang-recipe.js.map +1 -0
- package/dist/tools/lang-reference.js +34 -0
- package/dist/tools/lang-reference.js.map +1 -0
- package/dist/tools/plan.js +2 -2
- package/dist/tools/plan.js.map +1 -1
- package/dist/tools/profile-get.js +57 -0
- package/dist/tools/profile-get.js.map +1 -0
- package/dist/tools/session-activate.js +35 -0
- package/dist/tools/session-activate.js.map +1 -0
- package/dist/tools/session-create.js +83 -0
- package/dist/tools/session-create.js.map +1 -0
- package/dist/tools/session-list.js +29 -0
- package/dist/tools/session-list.js.map +1 -0
- package/dist/tools/session-shared.js +25 -0
- package/dist/tools/session-shared.js.map +1 -0
- package/dist/tools/validate-plan.js +2 -2
- package/dist/tools/validate-plan.js.map +1 -1
- package/docker/docker-compose.yml +44 -0
- package/package.json +30 -16
- package/dist/adapters/supabase/allocation-gateway.js +0 -236
- package/dist/adapters/supabase/allocation-gateway.js.map +0 -1
- package/dist/adapters/supabase/analytics-gateway.js +0 -18
- package/dist/adapters/supabase/analytics-gateway.js.map +0 -1
- package/dist/adapters/supabase/client.js +0 -96
- package/dist/adapters/supabase/client.js.map +0 -1
- package/dist/adapters/supabase/context-gateway.js +0 -23
- package/dist/adapters/supabase/context-gateway.js.map +0 -1
- package/dist/adapters/supabase/gateway.js +0 -18
- package/dist/adapters/supabase/gateway.js.map +0 -1
- package/dist/adapters/supabase/task-gateway.js +0 -450
- package/dist/adapters/supabase/task-gateway.js.map +0 -1
- package/dist/auth.js +0 -118
- package/dist/auth.js.map +0 -1
- package/dist/cli/commands/init/project-step.js +0 -105
- package/dist/cli/commands/init/project-step.js.map +0 -1
- package/dist/constants.js +0 -9
- package/dist/constants.js.map +0 -1
- package/dist/core/ports.js +0 -2
- package/dist/core/ports.js.map +0 -1
- package/dist/database.types.js +0 -11
- package/dist/database.types.js.map +0 -1
- package/dist/lib/active-project.js +0 -28
- package/dist/lib/active-project.js.map +0 -1
- package/dist/lib/autopull.js +0 -13
- package/dist/lib/autopull.js.map +0 -1
- package/dist/lib/client-configs.js.map +0 -1
- package/dist/lib/client-install.js +0 -40
- package/dist/lib/client-install.js.map +0 -1
- package/dist/lib/dependencies.js.map +0 -1
- package/dist/lib/dependency-install.js.map +0 -1
- package/dist/lib/exec-delegate.js.map +0 -1
- package/dist/lib/exec-engines.js.map +0 -1
- package/dist/lib/harness.js.map +0 -1
- package/dist/lib/hooks.js.map +0 -1
- package/dist/lib/patterns.js.map +0 -1
- package/dist/lib/plan-delegate.js.map +0 -1
- package/dist/lib/project-context.js +0 -151
- package/dist/lib/project-context.js.map +0 -1
- package/dist/lib/provision-apply.js.map +0 -1
- package/dist/lib/provision-collect.js.map +0 -1
- package/dist/lib/provision.js.map +0 -1
- package/dist/lib/require-config.js +0 -32
- package/dist/lib/require-config.js.map +0 -1
- package/dist/lib/rules.js.map +0 -1
- package/dist/lib/sections.js +0 -89
- package/dist/lib/sections.js.map +0 -1
- package/dist/lib/skill-serve.js.map +0 -1
- package/dist/lib/skills-cache.js.map +0 -1
- package/dist/lib/skills.js.map +0 -1
- package/dist/lib/targets.js.map +0 -1
- package/dist/lib/task-history.js +0 -15
- package/dist/lib/task-history.js.map +0 -1
- package/dist/lib/validate-plan-delegate.js.map +0 -1
- package/dist/session-factory.js +0 -19
- package/dist/session-factory.js.map +0 -1
- package/dist/spinner.js.map +0 -1
- package/dist/tools/comment-task.js +0 -72
- package/dist/tools/comment-task.js.map +0 -1
- package/dist/tools/create-task.js +0 -129
- package/dist/tools/create-task.js.map +0 -1
- package/dist/tools/end-allocation.js +0 -38
- package/dist/tools/end-allocation.js.map +0 -1
- package/dist/tools/end-task-allocation.js +0 -37
- package/dist/tools/end-task-allocation.js.map +0 -1
- package/dist/tools/get-active-allocation.js +0 -69
- package/dist/tools/get-active-allocation.js.map +0 -1
- package/dist/tools/get-context.js +0 -48
- package/dist/tools/get-context.js.map +0 -1
- package/dist/tools/get-task.js +0 -137
- package/dist/tools/get-task.js.map +0 -1
- package/dist/tools/list-my-allocations.js +0 -71
- package/dist/tools/list-my-allocations.js.map +0 -1
- package/dist/tools/list-projects.js +0 -38
- package/dist/tools/list-projects.js.map +0 -1
- package/dist/tools/list-tasks.js +0 -93
- package/dist/tools/list-tasks.js.map +0 -1
- package/dist/tools/move-task.js +0 -82
- package/dist/tools/move-task.js.map +0 -1
- package/dist/tools/record-delivery.js +0 -71
- package/dist/tools/record-delivery.js.map +0 -1
- package/dist/tools/set-project.js +0 -52
- package/dist/tools/set-project.js.map +0 -1
- package/dist/tools/start-allocation.js +0 -32
- package/dist/tools/start-allocation.js.map +0 -1
- package/dist/tools/start-task-allocation.js +0 -75
- package/dist/tools/start-task-allocation.js.map +0 -1
- package/dist/tools/update-task.js +0 -139
- package/dist/tools/update-task.js.map +0 -1
- /package/dist/{spinner.js → lib/spinner.js} +0 -0
package/dist/brand.js
CHANGED
|
@@ -1,90 +1,32 @@
|
|
|
1
1
|
import { homedir } from 'node:os';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
|
-
/**
|
|
4
|
-
* Fonte única de verdade de marca/atribuição do CLI. Rebrandear = editar este arquivo — ao
|
|
5
|
-
* trocar, casar em lockstep: `package.json` (`name`/`bin`/`description`/`keywords`/`repository`)
|
|
6
|
-
* e os docs .md que citam tools literalmente (CLAUDE.md, SKILL.md, docs/specs/**\/*.md, e o `brand.skillsRepo` externo).
|
|
7
|
-
* A tabela de tools do README é GERADA — depois de editar aqui, rode `bun run gen:docs`.
|
|
8
|
-
*
|
|
9
|
-
* Rebrand NIO (docs/specs/rebrand/0005-noclaf-to-nio.md): sem compat com o nome antigo — nenhum
|
|
10
|
-
* fallback de `NOCLAF_*`/`~/.noclaf` no código. Duas pendências cross-sistema documentadas na
|
|
11
|
-
* spec, não resolvidas só por este arquivo: `patPrefix` (backend precisa aceitar o prefixo novo
|
|
12
|
-
* antes do deploy) e `webUrl` (auth desacoplada do domínio antigo — mecanismo definitivo em
|
|
13
|
-
* docs/specs/auth/0002-cli-native-login.md, ainda em aberto).
|
|
14
|
-
*/
|
|
15
3
|
export const brand = {
|
|
16
|
-
// --- Identidade / display ---
|
|
17
|
-
/** Nome do comando/binário principal (nome no help do CLI + `bin` do package.json). */
|
|
18
4
|
name: 'nio',
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
/** Nome completo do produto. PENDENTE: expansão real a confirmar (não pode reintroduzir "Noclaf"). */
|
|
22
|
-
productFullName: 'NOS',
|
|
23
|
-
/** Empresa / fornecedor. */
|
|
24
|
-
company: 'Falcao-Tech',
|
|
25
|
-
/** Org/usuário do GitHub que hospeda o repo atual da CLI. */
|
|
5
|
+
productName: 'NIO',
|
|
6
|
+
productFullName: 'NIO',
|
|
26
7
|
githubOrg: 'hugoreiis12-png',
|
|
27
|
-
|
|
28
|
-
githubRepo: 'NIO-CLI',
|
|
29
|
-
/** Pacote npm — usado nas mensagens de atualização. Org real confirmada: `nio-cli` (não `nio`). */
|
|
8
|
+
githubRepo: 'NIO-CLI-',
|
|
30
9
|
packageName: '@nio-cli/cli',
|
|
31
|
-
/** Binário do servidor MCP (segundo `bin` do package.json). */
|
|
32
10
|
mcpBinName: 'nio-cli',
|
|
33
|
-
/** Chave sob a qual o servidor MCP é registrado nos configs dos clientes. */
|
|
34
11
|
mcpServerKey: 'nio',
|
|
35
|
-
// --- URLs / endpoints ---
|
|
36
|
-
/**
|
|
37
|
-
* Base do app web — DESACOPLADA por decisão do rebrand: a CLI não depende mais de um
|
|
38
|
-
* domínio externo pra autenticação. Vazio até `docs/specs/auth/0002-cli-native-login.md`
|
|
39
|
-
* definir o mecanismo; os pontos de uso (`cli/commands/auth.ts`, `init/auth-step.ts`) já
|
|
40
|
-
* tratam string vazia sem imprimir link quebrado.
|
|
41
|
-
*/
|
|
42
12
|
webUrl: '',
|
|
43
|
-
supabaseUrl: 'https://wdshvtlsjoegjvmpqobx.supabase.co',
|
|
44
|
-
/** COPIE o literal de `src/constants.ts:6` — não redigite. */
|
|
45
|
-
supabaseAnonKey: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Indkc2h2dGxzam9lZ2p2bXBxb2J4Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzU3NDA4OTQsImV4cCI6MjA5MTMxNjg5NH0.4wlAsT_D5gDiBQ19WA-q5zu105fT9TsD1NKI_tGQt-4',
|
|
46
|
-
// --- Filesystem / namespacing ---
|
|
47
|
-
/** Dir de dados no home → `~/.nio`. */
|
|
48
13
|
homeDirName: '.nio',
|
|
49
|
-
/** Arquivo de binding do projeto na raiz do repo. */
|
|
50
14
|
projectConfigFile: 'nio.json',
|
|
51
|
-
// --- Contratos ---
|
|
52
|
-
/** Prefixo das env vars: `NIO` → `NIO_PAT`, `NIO_CLIENT`, … Contrato externo: Cowork/Codex setam `NIO_CLIENT` de fora — trocar aqui exige trocar lá também. */
|
|
53
15
|
envPrefix: 'NIO',
|
|
54
|
-
/**
|
|
55
|
-
* Prefixo do PAT. ⚠️ MUDANÇA COORDENADA: o backend hoje só valida `noc_`. Publicar com
|
|
56
|
-
* `nio_` antes do backend aceitar o prefixo novo quebra login de todo mundo — ver nota
|
|
57
|
-
* na spec de rebrand (F11-T0.4).
|
|
58
|
-
*/
|
|
59
16
|
patPrefix: 'nio_',
|
|
60
|
-
// --- Repo de skills ---
|
|
61
|
-
/** Refatorado por outro time (`noclaf-skills` → `nio-skills`). */
|
|
62
17
|
skillsRepo: 'hugoreiis12-png/NIO-SKILLS-',
|
|
63
18
|
skillsRef: 'main',
|
|
64
|
-
/** Pacote npm das skills — citado em mensagens de erro de "pacote não encontrado". ASSUME mesma org (`nio-cli`) do pacote da CLI — confirmar se as skills publicam em outro escopo. */
|
|
65
19
|
skillsPackage: '@nio-cli/skills',
|
|
66
|
-
// --- Prefixos dos nomes das tools MCP --- (dois por decisão de domínio: produto vs. CLI — mantidos separados no rebrand; formato validado pelos clientes MCP como `^[a-zA-Z0-9_-]{1,64}$`, só minúsculas/dígitos, termine com `_`)
|
|
67
|
-
/** Tools de domínio do produto: `nos_list_tasks`, `nos_move_task`, … (16 tools). Mantido — nomeia o produto NOS, não a marca da CLI. */
|
|
68
20
|
toolPrefix: 'nos_',
|
|
69
|
-
/** Tools que espelham verbos do CLI: `nio_plan`, `nio_exec_status`, … (4 tools). */
|
|
70
21
|
cliToolPrefix: 'nio_',
|
|
71
22
|
};
|
|
72
|
-
// Arte ASCII do `--help`/login — efeito Matrix, gerada por `renderMatrixLogo()`
|
|
73
|
-
// em `./matrix-logo.js` (fora deste objeto: é lógica de renderização, não
|
|
74
|
-
// valor de marca).
|
|
75
|
-
// ponytail: prefixo do PAT assumido alfanumérico + `_`; se um dia tiver metachar de
|
|
76
|
-
// regex, escapar antes de interpolar.
|
|
77
|
-
/** Regex do formato do PAT, derivada do prefixo: `nio_` + 64 hex. */
|
|
78
23
|
export const patRegex = new RegExp(`^${brand.patPrefix}[a-f0-9]{64}$`);
|
|
79
|
-
/** Caminho dentro do dir de dados: `homePath('skills')` → `~/.nio/skills`. */
|
|
80
24
|
export function homePath(...parts) {
|
|
81
25
|
return join(homedir(), brand.homeDirName, ...parts);
|
|
82
26
|
}
|
|
83
|
-
/** NOME completo da env var: `envName('CLIENT')` → `'NIO_CLIENT'`. */
|
|
84
27
|
export function envName(name) {
|
|
85
28
|
return `${brand.envPrefix}_${name}`;
|
|
86
29
|
}
|
|
87
|
-
/** VALOR da env var prefixada: `env('PAT')` → `process.env.NIO_PAT`. */
|
|
88
30
|
export function env(name) {
|
|
89
31
|
return process.env[envName(name)];
|
|
90
32
|
}
|
package/dist/brand.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brand.js","sourceRoot":"","sources":["../src/brand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"brand.js","sourceRoot":"","sources":["../src/brand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAYjC,MAAM,CAAC,MAAM,KAAK,GAAG;IAGnB,IAAI,EAAE,KAAK;IAEX,WAAW,EAAE,KAAK;IAElB,eAAe,EAAE,KAAK;IAGtB,SAAS,EAAE,iBAAiB;IAE5B,UAAU,EAAE,UAAU;IAEtB,WAAW,EAAE,cAAc;IAE3B,UAAU,EAAE,SAAS;IAErB,YAAY,EAAE,KAAK;IAOnB,MAAM,EAAE,EAAE;IAIV,WAAW,EAAE,MAAM;IAEnB,iBAAiB,EAAE,UAAU;IAI7B,SAAS,EAAE,KAAK;IAMhB,SAAS,EAAE,MAAM;IAIjB,UAAU,EAAE,6BAA6B;IACzC,SAAS,EAAE,MAAM;IAEjB,aAAa,EAAE,iBAAiB;IAIhC,UAAU,EAAE,MAAM;IAElB,aAAa,EAAE,MAAM;CACb,CAAC;AASX,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS,eAAe,CAAC,CAAC;AAGvE,MAAM,UAAU,QAAQ,CAAC,GAAG,KAAe;IACzC,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,CAAC;AACtD,CAAC;AAGD,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,OAAO,GAAG,KAAK,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;AACtC,CAAC;AAGD,MAAM,UAAU,GAAG,CAAC,IAAY;IAC9B,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { readSkillDocs } from "../../lib/skills/skills.js";
|
|
2
|
+
import { section, c, sym } from "../../lib/colors.js";
|
|
3
|
+
import { brand } from "../../brand.js";
|
|
4
|
+
export function registerAgentsCommand(program) {
|
|
5
|
+
program
|
|
6
|
+
.command("agents")
|
|
7
|
+
.description("Lista os agentes disponíveis")
|
|
8
|
+
.action(() => {
|
|
9
|
+
let agents;
|
|
10
|
+
try {
|
|
11
|
+
agents = readSkillDocs().filter((d) => d.type === "agent");
|
|
12
|
+
}
|
|
13
|
+
catch (err) {
|
|
14
|
+
console.error(`${c.yellow(sym.warn)} Não consegui ler os agentes: ${err.message}`);
|
|
15
|
+
console.error(` ${c.dim(`Rode \`${brand.name} sync\` pra baixar o cache de skills.`)}`);
|
|
16
|
+
process.exitCode = 1;
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
if (agents.length === 0) {
|
|
20
|
+
console.log(`Nenhum agente disponível. Rode ${c.cyan(`${brand.name} sync`)} pra atualizar o cache.`);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
section("Agentes", `${agents.length} disponíveis`);
|
|
24
|
+
const width = Math.max(...agents.map((a) => a.id.length));
|
|
25
|
+
for (const a of agents.sort((x, y) => x.id.localeCompare(y.id))) {
|
|
26
|
+
console.log(` ${c.bold(a.id.padEnd(width))} ${c.dim(a.description || "(sem descrição)")}`);
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../../src/cli/commands/agents.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAMvC,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,8BAA8B,CAAC;SAC3C,MAAM,CAAC,GAAG,EAAE;QACX,IAAI,MAAM,CAAC;QACX,IAAI,CAAC;YACH,MAAM,GAAG,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;QAC7D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,iCAAkC,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9F,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,IAAI,uCAAuC,CAAC,EAAE,CAAC,CAAC;YAC7F,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,OAAO,CAAC,yBAAyB,CAAC,CAAC;YACrG,OAAO;QACT,CAAC;QAED,OAAO,CAAC,SAAS,EAAE,GAAG,MAAM,CAAC,MAAM,cAAc,CAAC,CAAC;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1D,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,IAAI,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAC/F,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,126 +1,158 @@
|
|
|
1
|
-
import { password } from "../../lib/prompts.js";
|
|
1
|
+
import { input, password } from "../../lib/prompts.js";
|
|
2
2
|
import { brand } from "../../brand.js";
|
|
3
3
|
import { renderMatrixLogo } from "../../matrix-logo.js";
|
|
4
|
-
import { startSpinner } from "../../spinner.js";
|
|
5
|
-
import {
|
|
4
|
+
import { startSpinner } from "../../lib/spinner.js";
|
|
5
|
+
import { c, sym } from "../../lib/colors.js";
|
|
6
|
+
import { createUserRepository } from "../../adapters/pg/user-repository.js";
|
|
7
|
+
import { gatewayLogin, gatewayLogout, gatewayVerify2fa, } from "../../lib/auth/gateway-client.js";
|
|
8
|
+
import { loadSession, saveSession, clearSession } from "../../lib/auth/session-store.js";
|
|
9
|
+
import { ensureConfig } from "../../lib/auth/nio-config.js";
|
|
6
10
|
import { authCopy } from "../copy.js";
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
11
|
+
async function resolveSecondFactor(challengeId, phoneHint) {
|
|
12
|
+
console.log(` ${c.dim(`código enviado por SMS para ${phoneHint}`)}`);
|
|
13
|
+
let type = "otp";
|
|
14
|
+
for (let attempt = 0; attempt < 4; attempt++) {
|
|
15
|
+
const code = (await input({
|
|
16
|
+
message: type === "otp" ? "Código de confirmação (SMS)" : "Código de backup",
|
|
17
|
+
validate: (v) => v.trim().length > 0 || "obrigatório",
|
|
18
|
+
})).trim();
|
|
19
|
+
const res = await gatewayVerify2fa(challengeId, code, type);
|
|
20
|
+
if (res.ok)
|
|
21
|
+
return res;
|
|
22
|
+
if (res.requiresBackupCode) {
|
|
23
|
+
console.log(` ${c.yellow(sym.warn)} tentativas de SMS esgotadas — use um código de backup.`);
|
|
24
|
+
type = "backup";
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
const left = res.remaining !== undefined ? ` (${res.remaining} tentativa(s))` : "";
|
|
28
|
+
console.log(` ${c.red(sym.err)} código incorreto${left}.`);
|
|
29
|
+
}
|
|
30
|
+
return null;
|
|
20
31
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
32
|
+
const MIN_PASSWORD_LENGTH = 8;
|
|
33
|
+
function registerRegisterCommand(program) {
|
|
34
|
+
program
|
|
35
|
+
.command("register")
|
|
36
|
+
.description("Cria um novo usuário no banco (user_cli)")
|
|
37
|
+
.action(async () => {
|
|
38
|
+
await ensureConfig({ interactive: true });
|
|
39
|
+
const name = await input({
|
|
40
|
+
message: authCopy.register.namePrompt,
|
|
41
|
+
validate: (v) => v.trim().length > 0 || authCopy.register.nameInvalid,
|
|
42
|
+
});
|
|
43
|
+
const pass = await password({
|
|
44
|
+
message: authCopy.register.passwordPrompt,
|
|
45
|
+
mask: "*",
|
|
46
|
+
validate: (v) => v.length >= MIN_PASSWORD_LENGTH || authCopy.register.passwordInvalid,
|
|
47
|
+
});
|
|
48
|
+
const repo = createUserRepository();
|
|
49
|
+
const spinner = startSpinner("Criando usuário...");
|
|
50
|
+
try {
|
|
51
|
+
const existing = await repo.findByName(name.trim());
|
|
52
|
+
if (existing) {
|
|
53
|
+
spinner.fail(`Usuário "${name.trim()}" já existe.`);
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
const user = await repo.create({ name: name.trim(), password: pass });
|
|
57
|
+
spinner.stop();
|
|
58
|
+
console.log(renderMatrixLogo());
|
|
59
|
+
console.log(`[ok] Usuário criado: ${user.name} (id ${user.id})`);
|
|
60
|
+
console.log(`Rode \`${brand.name} login\` pra autenticar.`);
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
spinner.fail(`Falha ao criar usuário: ${err.message}`);
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
28
66
|
});
|
|
29
|
-
return result;
|
|
30
|
-
}
|
|
31
|
-
function printLoginSuccess(u) {
|
|
32
|
-
console.log(renderMatrixLogo());
|
|
33
|
-
console.log("[ok] Autenticado!");
|
|
34
|
-
console.log(`Nome: ${u.full_name || "(sem nome)"}`);
|
|
35
|
-
console.log(`Usuário: ${u.username ? `@${u.username}` : "(sem username)"}`);
|
|
36
|
-
console.log(`Email: ${u.email}`);
|
|
37
|
-
}
|
|
38
|
-
/** Decide se dá pra pular o spinner de validação: só quando a sessão já está em
|
|
39
|
-
* cache (usuário + data de fetch salvos) e o caller não pediu revalidação forçada. */
|
|
40
|
-
export function shouldSkipWhoamiSpinner(creds, refresh) {
|
|
41
|
-
return !refresh && Boolean(creds.user && creds.fetched_at);
|
|
42
|
-
}
|
|
43
|
-
/** Traduz o erro de `resolveIdentity` pra mensagem exibida ao usuário. */
|
|
44
|
-
export function whoamiErrorMessage(err) {
|
|
45
|
-
const status = err.status;
|
|
46
|
-
return status === 401 || status === 403
|
|
47
|
-
? `Sessão inválida. Rode \`${brand.name} login <PAT>\` novamente.`
|
|
48
|
-
: `Falha ao validar token: ${err.message}`;
|
|
49
|
-
}
|
|
50
|
-
function printWhoamiIdentity(u) {
|
|
51
|
-
console.log(renderMatrixLogo());
|
|
52
|
-
console.log(`Nome: ${u.full_name || "(sem nome)"}`);
|
|
53
|
-
console.log(`Email: ${u.email}`);
|
|
54
|
-
console.log(`Usuário: ${u.username ? `@${u.username}` : "(sem username)"}`);
|
|
55
|
-
console.log(`ID: ${u.id}`);
|
|
56
67
|
}
|
|
57
68
|
function registerLoginCommand(program) {
|
|
58
69
|
program
|
|
59
70
|
.command("login")
|
|
60
|
-
.description("
|
|
61
|
-
.
|
|
62
|
-
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
console.error(`Token inválido. Formato esperado: \`${brand.patPrefix}\` + 64 caracteres hexadecimais.`);
|
|
66
|
-
process.exit(1);
|
|
67
|
-
}
|
|
71
|
+
.description("Autentica via nio-gateway (túnel HTTP) e salva a sessão localmente (JWT)")
|
|
72
|
+
.action(async () => {
|
|
73
|
+
await ensureConfig({ interactive: true });
|
|
74
|
+
const name = await input({ message: authCopy.login.namePrompt });
|
|
75
|
+
const pass = await password({ message: authCopy.login.passwordPrompt, mask: "*" });
|
|
68
76
|
const spinner = startSpinner("Autenticando...");
|
|
77
|
+
let session;
|
|
69
78
|
try {
|
|
70
|
-
const result = await
|
|
79
|
+
const result = await gatewayLogin(name.trim(), pass);
|
|
80
|
+
if (!result) {
|
|
81
|
+
spinner.fail(authCopy.login.invalidCredentials);
|
|
82
|
+
process.exit(1);
|
|
83
|
+
}
|
|
71
84
|
spinner.stop();
|
|
72
|
-
|
|
85
|
+
if (result.step === "done") {
|
|
86
|
+
session = result;
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
const s = await resolveSecondFactor(result.challengeId, result.phoneHint);
|
|
90
|
+
if (!s) {
|
|
91
|
+
console.error(`${c.red(sym.err)} 2º fator não concluído.`);
|
|
92
|
+
process.exit(1);
|
|
93
|
+
}
|
|
94
|
+
session = s;
|
|
95
|
+
}
|
|
73
96
|
}
|
|
74
97
|
catch (err) {
|
|
75
98
|
spinner.fail(`Falha ao autenticar: ${err.message}`);
|
|
76
99
|
process.exit(1);
|
|
77
100
|
}
|
|
101
|
+
await saveSession({
|
|
102
|
+
userId: session.userId,
|
|
103
|
+
name: session.name,
|
|
104
|
+
token: session.token,
|
|
105
|
+
sessionId: session.sessionId,
|
|
106
|
+
loggedInAt: new Date().toISOString(),
|
|
107
|
+
expiresAt: session.expiresAt,
|
|
108
|
+
});
|
|
109
|
+
console.log(renderMatrixLogo());
|
|
110
|
+
console.log("[ok] Autenticado!");
|
|
111
|
+
console.log(`Usuário: ${session.name}`);
|
|
112
|
+
console.log(`ID: ${session.userId}`);
|
|
78
113
|
});
|
|
79
114
|
}
|
|
80
115
|
function registerLogoutCommand(program) {
|
|
81
116
|
program
|
|
82
117
|
.command("logout")
|
|
83
|
-
.description("
|
|
118
|
+
.description("Encerra a sessão local e revoga a auth_session no banco")
|
|
84
119
|
.action(async () => {
|
|
85
|
-
await
|
|
120
|
+
const session = await loadSession();
|
|
121
|
+
if (session) {
|
|
122
|
+
try {
|
|
123
|
+
await gatewayLogout(session.sessionId);
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
await clearSession();
|
|
86
129
|
console.log("Sessão removida.");
|
|
87
130
|
});
|
|
88
131
|
}
|
|
89
|
-
async function runWhoamiAction(opts) {
|
|
90
|
-
const creds = await loadCredentials();
|
|
91
|
-
if (!creds) {
|
|
92
|
-
console.error(`Não autenticado. Rode \`${brand.name} login <PAT>\`.`);
|
|
93
|
-
process.exit(1);
|
|
94
|
-
}
|
|
95
|
-
const cached = shouldSkipWhoamiSpinner(creds, opts.refresh);
|
|
96
|
-
const spinner = cached || opts.json ? null : startSpinner("Validando sessão...");
|
|
97
|
-
try {
|
|
98
|
-
const u = await resolveIdentity(creds, { refresh: opts.refresh });
|
|
99
|
-
spinner?.stop();
|
|
100
|
-
if (opts.json) {
|
|
101
|
-
console.log(JSON.stringify(u, null, 2));
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
printWhoamiIdentity(u);
|
|
105
|
-
}
|
|
106
|
-
catch (err) {
|
|
107
|
-
const message = whoamiErrorMessage(err);
|
|
108
|
-
if (spinner)
|
|
109
|
-
spinner.fail(message);
|
|
110
|
-
else
|
|
111
|
-
console.error(message);
|
|
112
|
-
process.exit(1);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
132
|
function registerWhoamiCommand(program) {
|
|
116
133
|
program
|
|
117
134
|
.command("whoami")
|
|
118
135
|
.description("Mostra o usuário autenticado")
|
|
119
136
|
.option("--json", "Emite a identidade como JSON")
|
|
120
|
-
.
|
|
121
|
-
|
|
137
|
+
.action(async (opts) => {
|
|
138
|
+
const session = await loadSession();
|
|
139
|
+
if (!session) {
|
|
140
|
+
console.error(`Não autenticado. Rode \`${brand.name} login\`.`);
|
|
141
|
+
process.exit(1);
|
|
142
|
+
}
|
|
143
|
+
if (opts.json) {
|
|
144
|
+
console.log(JSON.stringify(session, null, 2));
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
console.log(renderMatrixLogo());
|
|
148
|
+
console.log(`Usuário: ${session.name}`);
|
|
149
|
+
console.log(`ID: ${session.userId}`);
|
|
150
|
+
console.log(`Login em: ${session.loggedInAt}`);
|
|
151
|
+
console.log(`Expira em: ${session.expiresAt}`);
|
|
152
|
+
});
|
|
122
153
|
}
|
|
123
154
|
export function registerAuthCommands(program) {
|
|
155
|
+
registerRegisterCommand(program);
|
|
124
156
|
registerLoginCommand(program);
|
|
125
157
|
registerLogoutCommand(program);
|
|
126
158
|
registerWhoamiCommand(program);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,14 +2,8 @@ import { rmSync, lstatSync } from "node:fs";
|
|
|
2
2
|
import { homedir } from "node:os";
|
|
3
3
|
import { join } from "node:path";
|
|
4
4
|
import { confirm } from "../../lib/prompts.js";
|
|
5
|
-
import { readSkillDocs } from "../../lib/skills.js";
|
|
5
|
+
import { readSkillDocs } from "../../lib/skills/skills.js";
|
|
6
6
|
import { c, sym } from "../../lib/colors.js";
|
|
7
|
-
/**
|
|
8
|
-
* Comando de limpeza: remove artefatos **legados** que versões antigas do nio
|
|
9
|
-
* instalaram e que hoje foram substituídos — commands que viraram skills, ou
|
|
10
|
-
* commands removidos de vez. Roda em `~/.claude` (Claude Code) e `~/.codex` (Codex).
|
|
11
|
-
*/
|
|
12
|
-
// Removidos de vez (não existem mais em nenhum formato).
|
|
13
7
|
const FULLY_REMOVED = [
|
|
14
8
|
"new-spec",
|
|
15
9
|
"new-bug",
|
|
@@ -18,9 +12,7 @@ const FULLY_REMOVED = [
|
|
|
18
12
|
"apply-bug",
|
|
19
13
|
"to-skill",
|
|
20
14
|
];
|
|
21
|
-
// Eram commands e viraram skills — só o **command** legado deve sair (a skill atual fica).
|
|
22
15
|
const COMMAND_TO_SKILL = ["init-sdd", "to-tickets"];
|
|
23
|
-
/** Existe no disco (inclui symlink pendurado, que `existsSync` não pega)? */
|
|
24
16
|
function present(path) {
|
|
25
17
|
try {
|
|
26
18
|
lstatSync(path);
|
|
@@ -30,7 +22,6 @@ function present(path) {
|
|
|
30
22
|
return false;
|
|
31
23
|
}
|
|
32
24
|
}
|
|
33
|
-
/** Ids atualmente válidos no bundle — guarda pra nunca remover algo em uso. */
|
|
34
25
|
function currentIds() {
|
|
35
26
|
try {
|
|
36
27
|
const docs = readSkillDocs();
|
|
@@ -52,17 +43,14 @@ function collectLegacy() {
|
|
|
52
43
|
};
|
|
53
44
|
const claude = join(homedir(), ".claude");
|
|
54
45
|
const codex = join(homedir(), ".codex");
|
|
55
|
-
// Claude Code — commands legados (nenhum desses é command atual).
|
|
56
46
|
for (const id of [...FULLY_REMOVED, ...COMMAND_TO_SKILL]) {
|
|
57
47
|
if (!cur.commands.has(id))
|
|
58
48
|
add(join(claude, "commands", `${id}.md`), "claude command");
|
|
59
49
|
}
|
|
60
|
-
// Claude Code — skills só dos removidos de vez (init-sdd/to-tickets são skills atuais).
|
|
61
50
|
for (const id of FULLY_REMOVED) {
|
|
62
51
|
if (!cur.skills.has(id))
|
|
63
52
|
add(join(claude, "skills", id), "claude skill");
|
|
64
53
|
}
|
|
65
|
-
// Codex — dual-write dos removidos de vez (prompt + skill traduzida).
|
|
66
54
|
for (const id of FULLY_REMOVED) {
|
|
67
55
|
if (!cur.commands.has(id) && !cur.skills.has(id)) {
|
|
68
56
|
add(join(codex, "prompts", `${id}.md`), "codex prompt");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clean.js","sourceRoot":"","sources":["../../../src/cli/commands/clean.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"clean.js","sourceRoot":"","sources":["../../../src/cli/commands/clean.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
4
|
+
import { input, confirm } from "../../lib/prompts.js";
|
|
5
|
+
import { section, c, sym } from "../../lib/colors.js";
|
|
6
|
+
const NAME_RE = /^[a-z][a-z0-9-]*$/;
|
|
7
|
+
function commandPath(name) {
|
|
8
|
+
return join(homedir(), ".config", "opencode", "commands", `${name}.md`);
|
|
9
|
+
}
|
|
10
|
+
function render(description, body) {
|
|
11
|
+
return `---\ndescription: ${description}\n---\n\n${body}\n`;
|
|
12
|
+
}
|
|
13
|
+
export function registerCommandCommand(program) {
|
|
14
|
+
program
|
|
15
|
+
.command("command [name]")
|
|
16
|
+
.description("Cria um comando personalizado pro operador de IA")
|
|
17
|
+
.action(async (nameArg) => {
|
|
18
|
+
section("Novo comando", "cria um slash-command personalizado");
|
|
19
|
+
const name = (nameArg ??
|
|
20
|
+
(await input({
|
|
21
|
+
message: "Nome do comando (kebab-case, ex.: revisar-pr):",
|
|
22
|
+
validate: (v) => NAME_RE.test(v.trim()) || "Use só minúsculas, dígitos e hífen, começando por letra.",
|
|
23
|
+
}))).trim();
|
|
24
|
+
if (!NAME_RE.test(name)) {
|
|
25
|
+
console.error(`${c.red(sym.err)} Nome inválido "${name}". Use kebab-case (ex.: revisar-pr).`);
|
|
26
|
+
process.exitCode = 1;
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const path = commandPath(name);
|
|
30
|
+
if (existsSync(path)) {
|
|
31
|
+
const overwrite = await confirm({ message: `Já existe /${name}. Sobrescrever?`, default: false });
|
|
32
|
+
if (!overwrite) {
|
|
33
|
+
console.log("Cancelado.");
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const description = (await input({
|
|
38
|
+
message: "Descrição curta (o que o comando faz):",
|
|
39
|
+
validate: (v) => v.trim().length > 0 || "A descrição não pode ficar vazia.",
|
|
40
|
+
})).trim();
|
|
41
|
+
const body = (await input({
|
|
42
|
+
message: "Instrução do comando (o prompt que o operador vai seguir):",
|
|
43
|
+
validate: (v) => v.trim().length > 0 || "A instrução não pode ficar vazia.",
|
|
44
|
+
})).trim();
|
|
45
|
+
try {
|
|
46
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
47
|
+
writeFileSync(path, render(description, body));
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
console.error(`${c.red(sym.err)} Não consegui escrever: ${err.message}`);
|
|
51
|
+
process.exitCode = 1;
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
console.log(`${c.green(sym.ok)} Comando ${c.bold(`/${name}`)} criado em ${c.dim(path)}.`);
|
|
55
|
+
console.log(` ${c.dim("Reinicie o operador (OpenCode) pra ele carregar o comando novo.")}`);
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/cli/commands/command.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { c, cmd } from "../../lib/colors.js";
|
|
2
2
|
import { brand } from "../../brand.js";
|
|
3
|
-
/** Nome do binário — vai literal nos scripts de completion gerados. */
|
|
4
3
|
const bin = brand.name;
|
|
5
4
|
function optFlags(command) {
|
|
6
5
|
const flags = [];
|
|
@@ -21,7 +20,6 @@ function walk(command) {
|
|
|
21
20
|
opts: optFlags(command),
|
|
22
21
|
};
|
|
23
22
|
}
|
|
24
|
-
/** Candidatos no nível 2 de um comando: seus subcomandos + suas flags. */
|
|
25
23
|
function level2(node) {
|
|
26
24
|
return [...node.subs.map((s) => s.name), ...node.opts].join(" ");
|
|
27
25
|
}
|
|
@@ -106,7 +104,6 @@ export function registerCompletionCommand(program) {
|
|
|
106
104
|
: shell === "zsh"
|
|
107
105
|
? zshScript(root)
|
|
108
106
|
: fishScript(root);
|
|
109
|
-
// Dica no stderr (o `eval "$(...)"` captura só o stdout, então não polui).
|
|
110
107
|
console.error(`${c.dim("# adicione ao seu rc:")} ${cmd(`eval "$(${bin} completion ${shell})"`)}`);
|
|
111
108
|
console.log(script);
|
|
112
109
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../../src/cli/commands/completion.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../../src/cli/commands/completion.ts"],"names":[],"mappings":"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"}
|