@nio-cli/cli 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +374 -139
- package/dist/adapters/docker/docker-gateway.js +100 -0
- package/dist/adapters/docker/docker-gateway.js.map +1 -0
- package/dist/adapters/ide/ide-gateway.js +50 -0
- package/dist/adapters/ide/ide-gateway.js.map +1 -0
- package/dist/adapters/lang/knowledge-store.js +97 -0
- package/dist/adapters/lang/knowledge-store.js.map +1 -0
- package/dist/adapters/lang/language-catalog.js +86 -0
- package/dist/adapters/lang/language-catalog.js.map +1 -0
- package/dist/adapters/lang/package-map.js +98 -0
- package/dist/adapters/lang/package-map.js.map +1 -0
- package/dist/adapters/lang/project-detector.js +40 -0
- package/dist/adapters/lang/project-detector.js.map +1 -0
- package/dist/adapters/lang/repos.js +8 -0
- package/dist/adapters/lang/repos.js.map +1 -0
- package/dist/adapters/lang/scaffold-gateway.js +135 -0
- package/dist/adapters/lang/scaffold-gateway.js.map +1 -0
- package/dist/adapters/lang/vendor.js +52 -0
- package/dist/adapters/lang/vendor.js.map +1 -0
- package/dist/adapters/pg/auth-session-repository.js +41 -0
- package/dist/adapters/pg/auth-session-repository.js.map +1 -0
- package/dist/adapters/pg/client.js +74 -0
- package/dist/adapters/pg/client.js.map +1 -0
- package/dist/adapters/pg/dependency-event-repository.js +40 -0
- package/dist/adapters/pg/dependency-event-repository.js.map +1 -0
- package/dist/adapters/pg/login-challenge-repository.js +54 -0
- package/dist/adapters/pg/login-challenge-repository.js.map +1 -0
- package/dist/adapters/pg/session-repository.js +70 -0
- package/dist/adapters/pg/session-repository.js.map +1 -0
- package/dist/adapters/pg/user-repository.js +71 -0
- package/dist/adapters/pg/user-repository.js.map +1 -0
- package/dist/adapters/pkg/toolchain-gateway.js +35 -0
- package/dist/adapters/pkg/toolchain-gateway.js.map +1 -0
- package/dist/adapters/skills/recipe-catalog.js +84 -0
- package/dist/adapters/skills/recipe-catalog.js.map +1 -0
- package/dist/adapters/sms/http-generic.js +50 -0
- package/dist/adapters/sms/http-generic.js.map +1 -0
- package/dist/app/ai-client.js +44 -0
- package/dist/app/ai-client.js.map +1 -0
- package/dist/app/dependency-watcher.js +87 -0
- package/dist/app/dependency-watcher.js.map +1 -0
- package/dist/app/docker-manager.js +113 -0
- package/dist/app/docker-manager.js.map +1 -0
- package/dist/app/environment-builder.js +73 -0
- package/dist/app/environment-builder.js.map +1 -0
- package/dist/app/language-configurator.js +30 -0
- package/dist/app/language-configurator.js.map +1 -0
- package/dist/app/session-manager.js +124 -0
- package/dist/app/session-manager.js.map +1 -0
- package/dist/brand.js +3 -61
- package/dist/brand.js.map +1 -1
- package/dist/cli/commands/agents.js +30 -0
- package/dist/cli/commands/agents.js.map +1 -0
- package/dist/cli/commands/ai.js +61 -0
- package/dist/cli/commands/ai.js.map +1 -0
- package/dist/cli/commands/auth.js +149 -96
- package/dist/cli/commands/auth.js.map +1 -1
- package/dist/cli/commands/clean.js +1 -13
- package/dist/cli/commands/clean.js.map +1 -1
- package/dist/cli/commands/command.js +58 -0
- package/dist/cli/commands/command.js.map +1 -0
- package/dist/cli/commands/completion.js +0 -3
- package/dist/cli/commands/completion.js.map +1 -1
- package/dist/cli/commands/config.js +43 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/debug.js +102 -0
- package/dist/cli/commands/debug.js.map +1 -0
- package/dist/cli/commands/deps.js +94 -0
- package/dist/cli/commands/deps.js.map +1 -0
- package/dist/cli/commands/docker.js +385 -0
- package/dist/cli/commands/docker.js.map +1 -0
- package/dist/cli/commands/docs/content.js +219 -0
- package/dist/cli/commands/docs/content.js.map +1 -0
- package/dist/cli/commands/docs/dynamic.js +42 -0
- package/dist/cli/commands/docs/dynamic.js.map +1 -0
- package/dist/cli/commands/docs/html.js +108 -0
- package/dist/cli/commands/docs/html.js.map +1 -0
- package/dist/cli/commands/docs/terminal.js +42 -0
- package/dist/cli/commands/docs/terminal.js.map +1 -0
- package/dist/cli/commands/docs.js +34 -0
- package/dist/cli/commands/docs.js.map +1 -0
- package/dist/cli/commands/exec.js +2 -7
- package/dist/cli/commands/exec.js.map +1 -1
- package/dist/cli/commands/init/auth-step.js +10 -45
- package/dist/cli/commands/init/auth-step.js.map +1 -1
- package/dist/cli/commands/init/clients-step.js +12 -39
- package/dist/cli/commands/init/clients-step.js.map +1 -1
- package/dist/cli/commands/init/context-step.js +7 -33
- package/dist/cli/commands/init/context-step.js.map +1 -1
- package/dist/cli/commands/init/handoff.js +20 -0
- package/dist/cli/commands/init/handoff.js.map +1 -0
- package/dist/cli/commands/init/index.js +164 -34
- package/dist/cli/commands/init/index.js.map +1 -1
- package/dist/cli/commands/init/lang-step.js +40 -0
- package/dist/cli/commands/init/lang-step.js.map +1 -0
- package/dist/cli/commands/init/profile-step.js +43 -0
- package/dist/cli/commands/init/profile-step.js.map +1 -0
- package/dist/cli/commands/init/provision-step.js +8 -23
- package/dist/cli/commands/init/provision-step.js.map +1 -1
- package/dist/cli/commands/init/recipe-step.js +18 -0
- package/dist/cli/commands/init/recipe-step.js.map +1 -0
- package/dist/cli/commands/lang.js +27 -0
- package/dist/cli/commands/lang.js.map +1 -0
- package/dist/cli/commands/open.js +59 -0
- package/dist/cli/commands/open.js.map +1 -0
- package/dist/cli/commands/plan.js +2 -6
- package/dist/cli/commands/plan.js.map +1 -1
- package/dist/cli/commands/security.js +143 -0
- package/dist/cli/commands/security.js.map +1 -0
- package/dist/cli/commands/sessions.js +92 -0
- package/dist/cli/commands/sessions.js.map +1 -0
- package/dist/cli/commands/skills.js +1 -1
- package/dist/cli/commands/skills.js.map +1 -1
- package/dist/cli/commands/start.js +8 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/commands/sync.js +52 -58
- package/dist/cli/commands/sync.js.map +1 -1
- package/dist/cli/commands/validate-plan.js +2 -6
- package/dist/cli/commands/validate-plan.js.map +1 -1
- package/dist/cli/copy/auth.json +9 -2
- package/dist/cli/copy/init.json +2 -6
- package/dist/cli/copy.js +0 -8
- package/dist/cli/copy.js.map +1 -1
- package/dist/cli/flows/clients.js +3 -94
- package/dist/cli/flows/clients.js.map +1 -1
- package/dist/cli/flows/completion.js +1 -6
- package/dist/cli/flows/completion.js.map +1 -1
- package/dist/cli/flows/dependencies.js +1 -18
- package/dist/cli/flows/dependencies.js.map +1 -1
- package/dist/cli/flows/onboarding.js +116 -0
- package/dist/cli/flows/onboarding.js.map +1 -0
- package/dist/cli/flows/sections.js +2 -10
- package/dist/cli/flows/sections.js.map +1 -1
- package/dist/cli/flows/user-config.js +5 -10
- package/dist/cli/flows/user-config.js.map +1 -1
- package/dist/cli/program.js +58 -0
- package/dist/cli/program.js.map +1 -0
- package/dist/cli/ui/render.js +2 -53
- package/dist/cli/ui/render.js.map +1 -1
- package/dist/cli/ui/report.js +0 -13
- package/dist/cli/ui/report.js.map +1 -1
- package/dist/cli.js +27 -31
- package/dist/cli.js.map +1 -1
- package/dist/config.js +27 -56
- package/dist/config.js.map +1 -1
- package/dist/core/docker.js +2 -0
- package/dist/core/docker.js.map +1 -0
- package/dist/core/environment.js +2 -0
- package/dist/core/environment.js.map +1 -0
- package/dist/core/lang.js +11 -0
- package/dist/core/lang.js.map +1 -0
- package/dist/core/messaging.js +2 -0
- package/dist/core/messaging.js.map +1 -0
- package/dist/core/repositories.js +2 -0
- package/dist/core/repositories.js.map +1 -0
- package/dist/core/types.js +0 -5
- package/dist/core/types.js.map +1 -1
- package/dist/gateway/config.js +13 -0
- package/dist/gateway/config.js.map +1 -0
- package/dist/gateway/edge-filter.js +55 -0
- package/dist/gateway/edge-filter.js.map +1 -0
- package/dist/gateway/index.js +176 -0
- package/dist/gateway/index.js.map +1 -0
- package/dist/gateway/middleware/auth.js +34 -0
- package/dist/gateway/middleware/auth.js.map +1 -0
- package/dist/gateway/services/login.js +112 -0
- package/dist/gateway/services/login.js.map +1 -0
- package/dist/gateway/services/security.js +99 -0
- package/dist/gateway/services/security.js.map +1 -0
- package/dist/lib/auth/backup-codes.js +46 -0
- package/dist/lib/auth/backup-codes.js.map +1 -0
- package/dist/lib/auth/gateway-client.js +86 -0
- package/dist/lib/auth/gateway-client.js.map +1 -0
- package/dist/lib/auth/gateway-process.js +54 -0
- package/dist/lib/auth/gateway-process.js.map +1 -0
- package/dist/lib/auth/gateway-token.js +26 -0
- package/dist/lib/auth/gateway-token.js.map +1 -0
- package/dist/lib/auth/nio-config.js +147 -0
- package/dist/lib/auth/nio-config.js.map +1 -0
- package/dist/lib/auth/otp.js +23 -0
- package/dist/lib/auth/otp.js.map +1 -0
- package/dist/lib/auth/password.js +23 -0
- package/dist/lib/auth/password.js.map +1 -0
- package/dist/lib/auth/session-store.js +49 -0
- package/dist/lib/auth/session-store.js.map +1 -0
- package/dist/lib/clients/autopull.js +8 -0
- package/dist/lib/clients/autopull.js.map +1 -0
- package/dist/lib/{client-configs.js → clients/client-configs.js} +113 -34
- package/dist/lib/clients/client-configs.js.map +1 -0
- package/dist/lib/clients/client-install.js +20 -0
- package/dist/lib/clients/client-install.js.map +1 -0
- package/dist/lib/{harness.js → clients/harness.js} +1 -16
- package/dist/lib/clients/harness.js.map +1 -0
- package/dist/lib/{hooks.js → clients/hooks.js} +5 -31
- package/dist/lib/clients/hooks.js.map +1 -0
- package/dist/lib/{targets.js → clients/targets.js} +17 -53
- package/dist/lib/clients/targets.js.map +1 -0
- package/dist/lib/colors.js +0 -24
- package/dist/lib/colors.js.map +1 -1
- package/dist/lib/cowork-extension.js +2 -25
- package/dist/lib/cowork-extension.js.map +1 -1
- package/dist/lib/debug.js +6 -0
- package/dist/lib/debug.js.map +1 -0
- package/dist/lib/{dependencies.js → deps/dependencies.js} +1 -26
- package/dist/lib/deps/dependencies.js.map +1 -0
- package/dist/lib/deps/dependency-install-project.js +27 -0
- package/dist/lib/deps/dependency-install-project.js.map +1 -0
- package/dist/lib/{dependency-install.js → deps/dependency-install.js} +10 -35
- package/dist/lib/deps/dependency-install.js.map +1 -0
- package/dist/lib/deps/dependency-installed.js +64 -0
- package/dist/lib/deps/dependency-installed.js.map +1 -0
- package/dist/lib/deps/dependency-scan.js +100 -0
- package/dist/lib/deps/dependency-scan.js.map +1 -0
- package/dist/lib/docker.js +50 -0
- package/dist/lib/docker.js.map +1 -0
- package/dist/lib/dotfiles.js +57 -0
- package/dist/lib/dotfiles.js.map +1 -0
- package/dist/lib/{exec-delegate.js → exec/exec-delegate.js} +4 -13
- package/dist/lib/exec/exec-delegate.js.map +1 -0
- package/dist/lib/{exec-engines.js → exec/exec-engines.js} +1 -10
- package/dist/lib/exec/exec-engines.js.map +1 -0
- package/dist/lib/{plan-delegate.js → exec/plan-delegate.js} +1 -7
- package/dist/lib/exec/plan-delegate.js.map +1 -0
- package/dist/lib/{validate-plan-delegate.js → exec/validate-plan-delegate.js} +2 -7
- package/dist/lib/exec/validate-plan-delegate.js.map +1 -0
- package/dist/lib/headroom.js +44 -0
- package/dist/lib/headroom.js.map +1 -0
- package/dist/lib/ide-tasks.js +54 -0
- package/dist/lib/ide-tasks.js.map +1 -0
- package/dist/lib/load-env.js +44 -0
- package/dist/lib/load-env.js.map +1 -0
- package/dist/lib/open-url.js +9 -0
- package/dist/lib/open-url.js.map +1 -0
- package/dist/lib/prompts.js +0 -13
- package/dist/lib/prompts.js.map +1 -1
- package/dist/lib/{provision-apply.js → provision/provision-apply.js} +4 -30
- package/dist/lib/provision/provision-apply.js.map +1 -0
- package/dist/lib/{provision-collect.js → provision/provision-collect.js} +0 -9
- package/dist/lib/provision/provision-collect.js.map +1 -0
- package/dist/lib/{provision.js → provision/provision.js} +4 -17
- package/dist/lib/provision/provision.js.map +1 -0
- package/dist/lib/{patterns.js → skills/patterns.js} +0 -13
- package/dist/lib/skills/patterns.js.map +1 -0
- package/dist/lib/{rules.js → skills/rules.js} +0 -22
- package/dist/lib/skills/rules.js.map +1 -0
- package/dist/lib/skills/sections.js +58 -0
- package/dist/lib/skills/sections.js.map +1 -0
- package/dist/lib/{skill-serve.js → skills/skill-serve.js} +1 -26
- package/dist/lib/skills/skill-serve.js.map +1 -0
- package/dist/lib/{skills-cache.js → skills/skills-cache.js} +15 -21
- package/dist/lib/skills/skills-cache.js.map +1 -0
- package/dist/lib/{skills.js → skills/skills.js} +3 -49
- package/dist/lib/skills/skills.js.map +1 -0
- package/dist/lib/spinner.js.map +1 -0
- package/dist/lib/telemetry.js +3 -20
- package/dist/lib/telemetry.js.map +1 -1
- package/dist/lib/version-check.js +0 -20
- package/dist/lib/version-check.js.map +1 -1
- package/dist/matrix-logo.js +43 -21
- package/dist/matrix-logo.js.map +1 -1
- package/dist/mcp-server-lang.js +39 -0
- package/dist/mcp-server-lang.js.map +1 -0
- package/dist/mcp-server.js +37 -41
- package/dist/mcp-server.js.map +1 -1
- package/dist/profiles/analyst.js +10 -0
- package/dist/profiles/analyst.js.map +1 -0
- package/dist/profiles/bi.js +9 -0
- package/dist/profiles/bi.js.map +1 -0
- package/dist/profiles/dba.js +21 -0
- package/dist/profiles/dba.js.map +1 -0
- package/dist/profiles/fullstack.js +9 -0
- package/dist/profiles/fullstack.js.map +1 -0
- package/dist/profiles/index.js +39 -0
- package/dist/profiles/index.js.map +1 -0
- package/dist/profiles/mcps.js +23 -0
- package/dist/profiles/mcps.js.map +1 -0
- package/dist/profiles/qa.js +10 -0
- package/dist/profiles/qa.js.map +1 -0
- package/dist/profiles/scientist.js +9 -0
- package/dist/profiles/scientist.js.map +1 -0
- package/dist/profiles/toolchains.js +9 -0
- package/dist/profiles/toolchains.js.map +1 -0
- package/dist/tools/delegate-exec.js +2 -2
- package/dist/tools/delegate-exec.js.map +1 -1
- package/dist/tools/env-detect-deps.js +54 -0
- package/dist/tools/env-detect-deps.js.map +1 -0
- package/dist/tools/env-materialize.js +43 -0
- package/dist/tools/env-materialize.js.map +1 -0
- package/dist/tools/exec-status.js +1 -1
- package/dist/tools/exec-status.js.map +1 -1
- package/dist/tools/index.js +12 -32
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/lang-recipe.js +31 -0
- package/dist/tools/lang-recipe.js.map +1 -0
- package/dist/tools/lang-reference.js +34 -0
- package/dist/tools/lang-reference.js.map +1 -0
- package/dist/tools/plan.js +2 -2
- package/dist/tools/plan.js.map +1 -1
- package/dist/tools/profile-get.js +57 -0
- package/dist/tools/profile-get.js.map +1 -0
- package/dist/tools/session-activate.js +35 -0
- package/dist/tools/session-activate.js.map +1 -0
- package/dist/tools/session-create.js +83 -0
- package/dist/tools/session-create.js.map +1 -0
- package/dist/tools/session-list.js +29 -0
- package/dist/tools/session-list.js.map +1 -0
- package/dist/tools/session-shared.js +25 -0
- package/dist/tools/session-shared.js.map +1 -0
- package/dist/tools/validate-plan.js +2 -2
- package/dist/tools/validate-plan.js.map +1 -1
- package/dist/tui/app.js +116 -0
- package/dist/tui/app.js.map +1 -0
- package/dist/tui/components.js +0 -0
- package/dist/tui/components.js.map +1 -0
- package/dist/tui/debug.js +17 -0
- package/dist/tui/debug.js.map +1 -0
- package/dist/tui/index.js +2 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/launch.js +64 -0
- package/dist/tui/launch.js.map +1 -0
- package/dist/tui/markdown.js +40 -0
- package/dist/tui/markdown.js.map +1 -0
- package/dist/tui/opencode.js +28 -0
- package/dist/tui/opencode.js.map +1 -0
- package/dist/tui/palette-source.js +71 -0
- package/dist/tui/palette-source.js.map +1 -0
- package/dist/tui/palette.js +100 -0
- package/dist/tui/palette.js.map +1 -0
- package/dist/tui/state.js +105 -0
- package/dist/tui/state.js.map +1 -0
- package/dist/tui/theme.js +14 -0
- package/dist/tui/theme.js.map +1 -0
- package/docker/docker-compose.yml +44 -0
- package/headroom/docker-compose.yml +27 -0
- package/package.json +40 -16
- package/dist/adapters/supabase/allocation-gateway.js +0 -236
- package/dist/adapters/supabase/allocation-gateway.js.map +0 -1
- package/dist/adapters/supabase/analytics-gateway.js +0 -18
- package/dist/adapters/supabase/analytics-gateway.js.map +0 -1
- package/dist/adapters/supabase/client.js +0 -96
- package/dist/adapters/supabase/client.js.map +0 -1
- package/dist/adapters/supabase/context-gateway.js +0 -23
- package/dist/adapters/supabase/context-gateway.js.map +0 -1
- package/dist/adapters/supabase/gateway.js +0 -18
- package/dist/adapters/supabase/gateway.js.map +0 -1
- package/dist/adapters/supabase/task-gateway.js +0 -450
- package/dist/adapters/supabase/task-gateway.js.map +0 -1
- package/dist/auth.js +0 -118
- package/dist/auth.js.map +0 -1
- package/dist/cli/commands/init/project-step.js +0 -105
- package/dist/cli/commands/init/project-step.js.map +0 -1
- package/dist/constants.js +0 -9
- package/dist/constants.js.map +0 -1
- package/dist/core/ports.js +0 -2
- package/dist/core/ports.js.map +0 -1
- package/dist/database.types.js +0 -11
- package/dist/database.types.js.map +0 -1
- package/dist/lib/active-project.js +0 -28
- package/dist/lib/active-project.js.map +0 -1
- package/dist/lib/autopull.js +0 -13
- package/dist/lib/autopull.js.map +0 -1
- package/dist/lib/client-configs.js.map +0 -1
- package/dist/lib/client-install.js +0 -40
- package/dist/lib/client-install.js.map +0 -1
- package/dist/lib/dependencies.js.map +0 -1
- package/dist/lib/dependency-install.js.map +0 -1
- package/dist/lib/exec-delegate.js.map +0 -1
- package/dist/lib/exec-engines.js.map +0 -1
- package/dist/lib/harness.js.map +0 -1
- package/dist/lib/hooks.js.map +0 -1
- package/dist/lib/patterns.js.map +0 -1
- package/dist/lib/plan-delegate.js.map +0 -1
- package/dist/lib/project-context.js +0 -151
- package/dist/lib/project-context.js.map +0 -1
- package/dist/lib/provision-apply.js.map +0 -1
- package/dist/lib/provision-collect.js.map +0 -1
- package/dist/lib/provision.js.map +0 -1
- package/dist/lib/require-config.js +0 -32
- package/dist/lib/require-config.js.map +0 -1
- package/dist/lib/rules.js.map +0 -1
- package/dist/lib/sections.js +0 -89
- package/dist/lib/sections.js.map +0 -1
- package/dist/lib/skill-serve.js.map +0 -1
- package/dist/lib/skills-cache.js.map +0 -1
- package/dist/lib/skills.js.map +0 -1
- package/dist/lib/targets.js.map +0 -1
- package/dist/lib/task-history.js +0 -15
- package/dist/lib/task-history.js.map +0 -1
- package/dist/lib/validate-plan-delegate.js.map +0 -1
- package/dist/session-factory.js +0 -19
- package/dist/session-factory.js.map +0 -1
- package/dist/spinner.js.map +0 -1
- package/dist/tools/comment-task.js +0 -72
- package/dist/tools/comment-task.js.map +0 -1
- package/dist/tools/create-task.js +0 -129
- package/dist/tools/create-task.js.map +0 -1
- package/dist/tools/end-allocation.js +0 -38
- package/dist/tools/end-allocation.js.map +0 -1
- package/dist/tools/end-task-allocation.js +0 -37
- package/dist/tools/end-task-allocation.js.map +0 -1
- package/dist/tools/get-active-allocation.js +0 -69
- package/dist/tools/get-active-allocation.js.map +0 -1
- package/dist/tools/get-context.js +0 -48
- package/dist/tools/get-context.js.map +0 -1
- package/dist/tools/get-task.js +0 -137
- package/dist/tools/get-task.js.map +0 -1
- package/dist/tools/list-my-allocations.js +0 -71
- package/dist/tools/list-my-allocations.js.map +0 -1
- package/dist/tools/list-projects.js +0 -38
- package/dist/tools/list-projects.js.map +0 -1
- package/dist/tools/list-tasks.js +0 -93
- package/dist/tools/list-tasks.js.map +0 -1
- package/dist/tools/move-task.js +0 -82
- package/dist/tools/move-task.js.map +0 -1
- package/dist/tools/record-delivery.js +0 -71
- package/dist/tools/record-delivery.js.map +0 -1
- package/dist/tools/set-project.js +0 -52
- package/dist/tools/set-project.js.map +0 -1
- package/dist/tools/start-allocation.js +0 -32
- package/dist/tools/start-allocation.js.map +0 -1
- package/dist/tools/start-task-allocation.js +0 -75
- package/dist/tools/start-task-allocation.js.map +0 -1
- package/dist/tools/update-task.js +0 -139
- package/dist/tools/update-task.js.map +0 -1
- /package/dist/{spinner.js → lib/spinner.js} +0 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { spawn } from 'node:child_process';
|
|
3
|
+
import { render } from 'ink';
|
|
4
|
+
import { ensureHeadroomAndWire } from '../app/ai-client.js';
|
|
5
|
+
import { isBinaryInstalled } from '../lib/clients/client-install.js';
|
|
6
|
+
import { loadSession } from '../lib/auth/session-store.js';
|
|
7
|
+
import { createSessionRepository } from '../adapters/pg/session-repository.js';
|
|
8
|
+
import { buildProgram } from '../cli/program.js';
|
|
9
|
+
import { c, sym } from '../lib/colors.js';
|
|
10
|
+
import { startOpencode } from './opencode.js';
|
|
11
|
+
import { App } from './app.js';
|
|
12
|
+
async function resolveSessionMeta() {
|
|
13
|
+
try {
|
|
14
|
+
const stored = await loadSession();
|
|
15
|
+
if (!stored)
|
|
16
|
+
return null;
|
|
17
|
+
const active = await createSessionRepository().findActiveByUser(stored.userId);
|
|
18
|
+
return active ? { name: active.name, profile: active.profile, id: active.id } : null;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function fallbackToOpencodeTui(cwd) {
|
|
25
|
+
console.log(c.dim(' (interface NIO indisponível — abrindo a TUI do OpenCode)'));
|
|
26
|
+
return new Promise((resolve) => {
|
|
27
|
+
const child = spawn('opencode', [], { stdio: 'inherit', cwd });
|
|
28
|
+
child.on('exit', (code) => resolve(code ?? 0));
|
|
29
|
+
child.on('error', () => resolve(127));
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
export async function launchNioTui({ cwd }) {
|
|
33
|
+
await ensureHeadroomAndWire();
|
|
34
|
+
if (!process.stdout.isTTY || !process.stdin.isTTY) {
|
|
35
|
+
console.error(' `nio ai` precisa de um terminal interativo.');
|
|
36
|
+
return 1;
|
|
37
|
+
}
|
|
38
|
+
if (!isBinaryInstalled('opencode')) {
|
|
39
|
+
console.log(` ${c.yellow(sym.warn)} OpenCode não está no PATH. Instale com \`npm i -g opencode-ai\`.`);
|
|
40
|
+
return 127;
|
|
41
|
+
}
|
|
42
|
+
let handle;
|
|
43
|
+
try {
|
|
44
|
+
handle = await startOpencode(cwd);
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
console.error(` ${c.yellow(sym.warn)} opencode serve não subiu: ${err.message}`);
|
|
48
|
+
return fallbackToOpencodeTui(cwd);
|
|
49
|
+
}
|
|
50
|
+
const program = buildProgram();
|
|
51
|
+
const session = await resolveSessionMeta();
|
|
52
|
+
const app = render(_jsx(App, { handle: handle, program: program, cwd: cwd, session: session }), {
|
|
53
|
+
patchConsole: false,
|
|
54
|
+
exitOnCtrlC: true,
|
|
55
|
+
});
|
|
56
|
+
try {
|
|
57
|
+
await app.waitUntilExit();
|
|
58
|
+
}
|
|
59
|
+
finally {
|
|
60
|
+
handle.close();
|
|
61
|
+
}
|
|
62
|
+
return 0;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=launch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launch.js","sourceRoot":"","sources":["../../src/tui/launch.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import { theme } from './theme.js';
|
|
4
|
+
function inline(text, key) {
|
|
5
|
+
const parts = text.split(/(\*\*[^*]+\*\*|`[^`]+`)/g);
|
|
6
|
+
return (_jsx(Text, { children: parts.map((p, i) => {
|
|
7
|
+
if (p.startsWith('**') && p.endsWith('**'))
|
|
8
|
+
return _jsx(Text, { bold: true, children: p.slice(2, -2) }, i);
|
|
9
|
+
if (p.startsWith('`') && p.endsWith('`'))
|
|
10
|
+
return _jsx(Text, { color: theme.accent, children: p.slice(1, -1) }, i);
|
|
11
|
+
return _jsx(Text, { children: p }, i);
|
|
12
|
+
}) }, key));
|
|
13
|
+
}
|
|
14
|
+
export function Markdown({ text }) {
|
|
15
|
+
const blocks = [];
|
|
16
|
+
const segments = text.split(/```/g);
|
|
17
|
+
segments.forEach((seg, i) => {
|
|
18
|
+
if (i % 2 === 1) {
|
|
19
|
+
const lines = seg.replace(/^\n/, '').split('\n');
|
|
20
|
+
if (lines.length && /^[a-z0-9+-]*$/i.test(lines[0].trim()) && lines[0].trim().length < 12)
|
|
21
|
+
lines.shift();
|
|
22
|
+
blocks.push(_jsx(Box, { borderStyle: "round", borderColor: theme.dim, paddingX: 1, flexDirection: "column", children: lines.map((l, j) => (_jsx(Text, { color: theme.dim, children: l || ' ' }, j))) }, `c${i}`));
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
seg.split('\n').forEach((line, j) => {
|
|
26
|
+
if (!line.trim()) {
|
|
27
|
+
blocks.push(_jsx(Text, { children: " " }, `b${i}-${j}`));
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const h = /^(#{1,3})\s+(.*)/.exec(line);
|
|
31
|
+
if (h) {
|
|
32
|
+
blocks.push(_jsx(Text, { bold: true, color: theme.accentBright, children: h[2] }, `h${i}-${j}`));
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
blocks.push(inline(line, i * 1000 + j));
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
return _jsx(Box, { flexDirection: "column", children: blocks });
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/tui/markdown.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { createOpencodeServer, createOpencodeClient, } from '@opencode-ai/sdk';
|
|
2
|
+
import { dlog } from '../lib/debug.js';
|
|
3
|
+
export async function startOpencode(cwd) {
|
|
4
|
+
const server = await createOpencodeServer({ hostname: '127.0.0.1', port: 0 });
|
|
5
|
+
dlog('tui: opencode serve em', server.url);
|
|
6
|
+
const client = createOpencodeClient({ baseUrl: server.url, directory: cwd });
|
|
7
|
+
return { client, url: server.url, close: () => server.close() };
|
|
8
|
+
}
|
|
9
|
+
export async function* subscribeEvents(client, signal) {
|
|
10
|
+
for (let attempt = 0; attempt < 2; attempt++) {
|
|
11
|
+
try {
|
|
12
|
+
const res = await client.event.subscribe();
|
|
13
|
+
for await (const evt of res.stream) {
|
|
14
|
+
if (signal?.aborted)
|
|
15
|
+
return;
|
|
16
|
+
yield evt;
|
|
17
|
+
}
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
dlog('tui: event stream caiu', err.message);
|
|
22
|
+
if (signal?.aborted)
|
|
23
|
+
return;
|
|
24
|
+
await new Promise((r) => setTimeout(r, 500));
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=opencode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../src/tui/opencode.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GAGrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AASvC,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAW;IAC7C,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9E,IAAI,CAAC,wBAAwB,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,oBAAoB,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7E,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;AAClE,CAAC;AAMD,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,eAAe,CACpC,MAAsB,EACtB,MAAoB;IAEpB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC;QAC7C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YAC3C,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACnC,IAAI,MAAM,EAAE,OAAO;oBAAE,OAAO;gBAC5B,MAAM,GAAY,CAAC;YACrB,CAAC;YACD,OAAO;QACT,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,wBAAwB,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;YACvD,IAAI,MAAM,EAAE,OAAO;gBAAE,OAAO;YAC5B,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { toolDefinitions } from '../tools/index.js';
|
|
2
|
+
import { SECTIONS, TAGLINE } from '../cli/commands/docs/content.js';
|
|
3
|
+
const DESTRUCTIVE = /\b(delete|clean|clean-legacy|logout|disable-2fa|down)\b/;
|
|
4
|
+
const CAPABILITY_PROMPTS = {
|
|
5
|
+
nio_session_create: 'Crie uma nova sessão de ambiente para este projeto.',
|
|
6
|
+
nio_session_activate: 'Ative a sessão de ambiente que eu indicar.',
|
|
7
|
+
nio_session_list: 'Liste as minhas sessões de ambiente.',
|
|
8
|
+
nio_env_materialize: 'Materialize (re-aplique) o ambiente da sessão ativa.',
|
|
9
|
+
nio_env_detect_deps: 'Verifique as dependências deste projeto e o que falta instalar.',
|
|
10
|
+
nio_profile_get: 'Mostre o perfil e a recipe da sessão ativa.',
|
|
11
|
+
nio_delegate_exec: 'Delegue a implementação da tarefa a um agente headless num worktree.',
|
|
12
|
+
nio_plan: 'Rode o motor de planejamento sobre este projeto e escreva o plan.md.',
|
|
13
|
+
nio_validate_plan: 'Valide o plan.md da raiz e diga se precisa de uma spec antes de implementar.',
|
|
14
|
+
nio_exec_status: 'Mostre o estado dos jobs de execução (nio exec).',
|
|
15
|
+
};
|
|
16
|
+
function firstSentence(text) {
|
|
17
|
+
const flat = text.replace(/\s+/g, ' ').trim();
|
|
18
|
+
const stop = flat.search(/\.(\s|$)/);
|
|
19
|
+
return stop > 0 ? flat.slice(0, stop + 1) : flat;
|
|
20
|
+
}
|
|
21
|
+
function walkCommands(cmd, prefix) {
|
|
22
|
+
const out = [];
|
|
23
|
+
for (const sub of cmd.commands) {
|
|
24
|
+
const nm = sub.name();
|
|
25
|
+
if (nm === 'help')
|
|
26
|
+
continue;
|
|
27
|
+
const full = prefix ? `${prefix} ${nm}` : nm;
|
|
28
|
+
const args = sub.commands.length > 0 ? '' : sub.usage().replace(/^\[options\]\s*/, '').trim();
|
|
29
|
+
const desc = sub.description();
|
|
30
|
+
if (desc) {
|
|
31
|
+
out.push({
|
|
32
|
+
kind: 'command',
|
|
33
|
+
name: full,
|
|
34
|
+
desc: firstSentence(desc),
|
|
35
|
+
line: `nio ${full}${args ? ' ' + args : ''}`,
|
|
36
|
+
destructive: DESTRUCTIVE.test(full),
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
out.push(...walkCommands(sub, full));
|
|
40
|
+
}
|
|
41
|
+
return out;
|
|
42
|
+
}
|
|
43
|
+
export function buildPalette(program) {
|
|
44
|
+
const commands = walkCommands(program, '').sort((a, b) => a.name.localeCompare(b.name));
|
|
45
|
+
const capabilities = toolDefinitions.map((t) => ({
|
|
46
|
+
kind: 'capability',
|
|
47
|
+
name: t.name,
|
|
48
|
+
desc: firstSentence(t.description ?? ''),
|
|
49
|
+
prompt: CAPABILITY_PROMPTS[t.name] ?? t.description ?? t.name,
|
|
50
|
+
}));
|
|
51
|
+
const help = [
|
|
52
|
+
{ kind: 'help', name: 'sobre o nio', desc: 'O que é a NIO-CLI', body: TAGLINE },
|
|
53
|
+
...SECTIONS.map((s) => ({
|
|
54
|
+
kind: 'help',
|
|
55
|
+
name: s.title.toLowerCase(),
|
|
56
|
+
desc: s.blurb ?? s.title,
|
|
57
|
+
body: s.blocks
|
|
58
|
+
.filter((b) => b.kind === 'p')
|
|
59
|
+
.map((b) => b.text)
|
|
60
|
+
.join('\n\n'),
|
|
61
|
+
})),
|
|
62
|
+
];
|
|
63
|
+
return [...commands, ...capabilities, ...help];
|
|
64
|
+
}
|
|
65
|
+
export function filterPalette(items, q) {
|
|
66
|
+
const s = q.trim().toLowerCase();
|
|
67
|
+
if (!s)
|
|
68
|
+
return items;
|
|
69
|
+
return items.filter((i) => `${i.name} ${i.desc}`.toLowerCase().includes(s));
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=palette-source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"palette-source.js","sourceRoot":"","sources":["../../src/tui/palette-source.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useMemo, useEffect } from 'react';
|
|
3
|
+
import { Box, Text, useInput } from 'ink';
|
|
4
|
+
import { spawn } from 'node:child_process';
|
|
5
|
+
import { theme, sym } from './theme.js';
|
|
6
|
+
import { buildPalette, filterPalette } from './palette-source.js';
|
|
7
|
+
const KIND_LABEL = {
|
|
8
|
+
command: 'cmd',
|
|
9
|
+
capability: 'agente',
|
|
10
|
+
help: 'ajuda',
|
|
11
|
+
};
|
|
12
|
+
export function Palette({ program, onClose, onInfo, onRun, onPrompt, }) {
|
|
13
|
+
const all = useMemo(() => buildPalette(program), [program]);
|
|
14
|
+
const [q, setQ] = useState('');
|
|
15
|
+
const [i, setI] = useState(0);
|
|
16
|
+
const items = useMemo(() => filterPalette(all, q).slice(0, 40), [all, q]);
|
|
17
|
+
const sel = items[Math.min(i, items.length - 1)];
|
|
18
|
+
useInput((input, key) => {
|
|
19
|
+
if (key.escape)
|
|
20
|
+
return onClose();
|
|
21
|
+
if (key.upArrow)
|
|
22
|
+
return setI((n) => Math.max(0, n - 1));
|
|
23
|
+
if (key.downArrow)
|
|
24
|
+
return setI((n) => Math.min(items.length - 1, n + 1));
|
|
25
|
+
if (key.return) {
|
|
26
|
+
if (!sel)
|
|
27
|
+
return;
|
|
28
|
+
if (sel.kind === 'capability') {
|
|
29
|
+
onPrompt(sel.prompt);
|
|
30
|
+
onClose();
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
onInfo(sel);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
if (key.ctrl && input === 'r' && sel?.kind === 'command') {
|
|
37
|
+
onRun(sel);
|
|
38
|
+
onClose();
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
if (key.backspace || key.delete)
|
|
42
|
+
return setQ((v) => v.slice(0, -1));
|
|
43
|
+
if (input && !key.ctrl && !key.meta)
|
|
44
|
+
setQ((v) => v + input);
|
|
45
|
+
});
|
|
46
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: theme.accent, paddingX: 1, children: [_jsxs(Text, { children: [_jsx(Text, { color: theme.accent, children: "/" }), q, _jsx(Text, { color: theme.dim, children: "\u2588" })] }), items.map((it, n) => (_jsxs(Text, { color: n === i ? theme.accentBright : undefined, inverse: n === i, children: [' ', "[", KIND_LABEL[it.kind], "] ", it.name, " ", _jsx(Text, { color: theme.dim, children: it.desc })] }, `${it.kind}-${it.name}`))), _jsxs(Text, { color: theme.dim, children: ["\u2191\u2193 mover \u00B7 Enter ", sel?.kind === 'capability' ? 'manda pro agente' : 'info', " \u00B7", sel?.kind === 'command' ? ' Ctrl-R roda ·' : '', " Esc fecha"] })] }));
|
|
47
|
+
}
|
|
48
|
+
export function InfoPanel({ item, onClose }) {
|
|
49
|
+
useInput((_i, key) => {
|
|
50
|
+
if (key.escape || key.return)
|
|
51
|
+
onClose();
|
|
52
|
+
});
|
|
53
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: theme.accent, paddingX: 1, children: [_jsx(Text, { bold: true, color: theme.accentBright, children: item.name }), _jsx(Text, { children: item.desc }), item.kind === 'command' && (_jsxs(Box, { marginTop: 1, children: [_jsx(Text, { color: theme.dim, children: "rode: " }), _jsx(Text, { color: theme.accent, children: item.line })] })), item.kind === 'help' && _jsx(Box, { marginTop: 1, children: _jsx(Text, { children: item.body }) }), _jsx(Text, { color: theme.dim, children: "Esc fecha" })] }));
|
|
54
|
+
}
|
|
55
|
+
export function CommandRunner({ item, cwd, onClose, }) {
|
|
56
|
+
const [confirmed, setConfirmed] = useState(!item.destructive);
|
|
57
|
+
const [out, setOut] = useState('');
|
|
58
|
+
const [done, setDone] = useState(null);
|
|
59
|
+
useEffect(() => {
|
|
60
|
+
if (!confirmed)
|
|
61
|
+
return;
|
|
62
|
+
const parts = item.name.split(' ');
|
|
63
|
+
const child = spawn('nio', parts, { cwd });
|
|
64
|
+
child.stdout.on('data', (d) => setOut((o) => (o + d).slice(-4000)));
|
|
65
|
+
child.stderr.on('data', (d) => setOut((o) => (o + d).slice(-4000)));
|
|
66
|
+
child.on('exit', (code) => setDone(code ?? 1));
|
|
67
|
+
child.on('error', (e) => { setOut((o) => o + '\n' + e.message); setDone(127); });
|
|
68
|
+
return () => {
|
|
69
|
+
child.kill();
|
|
70
|
+
};
|
|
71
|
+
}, [confirmed, item.name, cwd]);
|
|
72
|
+
useInput((input, key) => {
|
|
73
|
+
if (!confirmed) {
|
|
74
|
+
if (input.toLowerCase() === 's')
|
|
75
|
+
setConfirmed(true);
|
|
76
|
+
else if (key.escape || input.toLowerCase() === 'n')
|
|
77
|
+
onClose();
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
if (done !== null && (key.escape || key.return))
|
|
81
|
+
onClose();
|
|
82
|
+
});
|
|
83
|
+
if (!confirmed) {
|
|
84
|
+
return (_jsx(Box, { borderStyle: "round", borderColor: theme.warn, paddingX: 1, children: _jsxs(Text, { color: theme.warn, children: [sym.warn, " `", item.line, "` pode alterar/apagar coisas. Rodar? [s/N]"] }) }));
|
|
85
|
+
}
|
|
86
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: theme.accent, paddingX: 1, children: [_jsxs(Text, { color: theme.accent, children: ["$ ", item.line] }), _jsx(Text, { color: theme.dim, children: out.split('\n').slice(-12).join('\n') || '…' }), done !== null && (_jsxs(Text, { color: done === 0 ? theme.accent : theme.err, children: ["exit ", done, " \u00B7 Esc fecha"] }))] }));
|
|
87
|
+
}
|
|
88
|
+
export function PermissionModal({ title, onRespond, }) {
|
|
89
|
+
useInput((input) => {
|
|
90
|
+
const k = input.toLowerCase();
|
|
91
|
+
if (k === 'a')
|
|
92
|
+
onRespond('once');
|
|
93
|
+
else if (k === 's')
|
|
94
|
+
onRespond('always');
|
|
95
|
+
else if (k === 'd')
|
|
96
|
+
onRespond('reject');
|
|
97
|
+
});
|
|
98
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: theme.warn, paddingX: 1, children: [_jsxs(Text, { color: theme.warn, children: [sym.warn, " O operador pede permiss\u00E3o:"] }), _jsx(Text, { children: title }), _jsx(Text, { color: theme.dim, children: "[a] permitir \u00B7 [s] sempre \u00B7 [d] negar" })] }));
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=palette.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"palette.js","sourceRoot":"","sources":["../../src/tui/palette.tsx"],"names":[],"mappings":";AAIA,OAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC5D,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAoB,MAAM,qBAAqB,CAAC;AAGpF,MAAM,UAAU,GAAwC;IACtD,OAAO,EAAE,KAAK;IACd,UAAU,EAAE,QAAQ;IACpB,IAAI,EAAE,OAAO;CACd,CAAC;AAEF,MAAM,UAAU,OAAO,CAAC,EACtB,OAAO,EACP,OAAO,EACP,MAAM,EACN,KAAK,EACL,QAAQ,GAOT;IACC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5D,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC/B,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1E,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAEjD,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,IAAI,GAAG,CAAC,MAAM;YAAE,OAAO,OAAO,EAAE,CAAC;QACjC,IAAI,GAAG,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACxD,IAAI,GAAG,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACzE,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,IAAI,CAAC,GAAG;gBAAE,OAAO;YACjB,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAAC,OAAO,EAAE,CAAC;gBAAC,OAAO;YAAC,CAAC;YAC3E,MAAM,CAAC,GAAG,CAAC,CAAC;YACZ,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,IAAI,KAAK,KAAK,GAAG,IAAI,GAAG,EAAE,IAAI,KAAK,SAAS,EAAE,CAAC;YAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAAC,OAAO,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QAC5F,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI;YAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAC,OAAO,EAAC,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,aACpF,MAAC,IAAI,eAAC,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,MAAM,kBAAU,EAAC,CAAC,EAAC,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,GAAG,uBAAU,IAAO,EAClF,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CACpB,MAAC,IAAI,IAA+B,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,aAClG,GAAG,OAAG,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,QAAI,EAAE,CAAC,IAAI,QAAG,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,GAAG,YAAG,EAAE,CAAC,IAAI,GAAQ,KADvE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,CAE3B,CACR,CAAC,EACF,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,GAAG,iDACF,GAAG,EAAE,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,aACzE,GAAG,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,kBAC3C,IACH,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAA8C;IACrF,QAAQ,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE;QACnB,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;IAC1C,CAAC,CAAC,CAAC;IACH,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAC,OAAO,EAAC,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,aACpF,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAE,KAAK,CAAC,YAAY,YAAG,IAAI,CAAC,IAAI,GAAQ,EACxD,KAAC,IAAI,cAAE,IAAI,CAAC,IAAI,GAAQ,EACvB,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,CAC1B,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,aACf,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,GAAG,uBAAe,EACrC,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,MAAM,YAAG,IAAI,CAAC,IAAI,GAAQ,IACzC,CACP,EACA,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YAAE,KAAC,IAAI,cAAE,IAAI,CAAC,IAAI,GAAQ,GAAM,EAC1E,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,GAAG,0BAAkB,IACpC,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAC5B,IAAI,EACJ,GAAG,EACH,OAAO,GAKR;IACC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC9D,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACnC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAEtD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,SAAS;YAAE,OAAO;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAC3C,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpE,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/C,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjF,OAAO,GAAG,EAAE;YACV,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IAEhC,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,GAAG;gBAAE,YAAY,CAAC,IAAI,CAAC,CAAC;iBAC/C,IAAI,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,GAAG;gBAAE,OAAO,EAAE,CAAC;YAC9D,OAAO;QACT,CAAC;QACD,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC;YAAE,OAAO,EAAE,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CACL,KAAC,GAAG,IAAC,WAAW,EAAC,OAAO,EAAC,WAAW,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,YAC3D,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,IAAI,aAAG,GAAG,CAAC,IAAI,QAAI,IAAI,CAAC,IAAI,kDAAkD,GAC7F,CACP,CAAC;IACJ,CAAC;IACD,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAC,OAAO,EAAC,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,aACpF,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,MAAM,mBAAK,IAAI,CAAC,IAAI,IAAQ,EAC/C,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,GAAG,YAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,GAAQ,EAC5E,IAAI,KAAK,IAAI,IAAI,CAChB,MAAC,IAAI,IAAC,KAAK,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,sBAAQ,IAAI,yBAAoB,CACnF,IACG,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAC9B,KAAK,EACL,SAAS,GAIV;IACC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE;QACjB,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,GAAG;YAAE,SAAS,CAAC,MAAM,CAAC,CAAC;aAC5B,IAAI,CAAC,KAAK,GAAG;YAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;aACnC,IAAI,CAAC,KAAK,GAAG;YAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IACH,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAC,OAAO,EAAC,WAAW,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,aAClF,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,IAAI,aAAG,GAAG,CAAC,IAAI,wCAAmC,EACrE,KAAC,IAAI,cAAE,KAAK,GAAQ,EACpB,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,GAAG,gEAA8C,IAChE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { tlog } from './debug.js';
|
|
2
|
+
export const emptyChat = { messages: [], busy: false, permission: null };
|
|
3
|
+
const PENDING_USER = 'pending-user';
|
|
4
|
+
function clone(prev) {
|
|
5
|
+
return {
|
|
6
|
+
messages: prev.messages.map((m) => ({ ...m, parts: m.parts.map((p) => ({ ...p })) })),
|
|
7
|
+
busy: prev.busy,
|
|
8
|
+
permission: prev.permission,
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
function upsertMessage(state, id, role) {
|
|
12
|
+
let msg = state.messages.find((m) => m.id === id);
|
|
13
|
+
if (!msg) {
|
|
14
|
+
msg = { id, role, parts: [] };
|
|
15
|
+
state.messages.push(msg);
|
|
16
|
+
}
|
|
17
|
+
return msg;
|
|
18
|
+
}
|
|
19
|
+
function upsertPart(msg, id, kind) {
|
|
20
|
+
let part = msg.parts.find((p) => p.id === id);
|
|
21
|
+
if (!part) {
|
|
22
|
+
part = { id, kind, text: '' };
|
|
23
|
+
msg.parts.push(part);
|
|
24
|
+
}
|
|
25
|
+
part.kind = kind;
|
|
26
|
+
return part;
|
|
27
|
+
}
|
|
28
|
+
function reconcilePending(state, realId) {
|
|
29
|
+
if (realId === PENDING_USER)
|
|
30
|
+
return;
|
|
31
|
+
const i = state.messages.findIndex((m) => m.id === PENDING_USER);
|
|
32
|
+
if (i >= 0)
|
|
33
|
+
state.messages.splice(i, 1);
|
|
34
|
+
}
|
|
35
|
+
function applyPart(state, raw) {
|
|
36
|
+
const part = raw;
|
|
37
|
+
if (!part.messageID || !part.id)
|
|
38
|
+
return;
|
|
39
|
+
const type = part.type ?? 'text';
|
|
40
|
+
if (type === 'step-start' || type === 'step-finish')
|
|
41
|
+
return;
|
|
42
|
+
reconcilePending(state, part.messageID);
|
|
43
|
+
const msg = upsertMessage(state, part.messageID, 'assistant');
|
|
44
|
+
if (type === 'tool') {
|
|
45
|
+
const cp = upsertPart(msg, part.id, 'tool');
|
|
46
|
+
cp.text = part.state?.title ?? part.tool ?? 'tool';
|
|
47
|
+
cp.tool = {
|
|
48
|
+
status: part.state?.status ?? 'running',
|
|
49
|
+
output: String(part.state?.output ?? part.state?.error ?? ''),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
else if (typeof part.text === 'string') {
|
|
53
|
+
upsertPart(msg, part.id, type === 'reasoning' ? 'reasoning' : 'text').text = part.text;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
export function applyEvent(prev, evt) {
|
|
57
|
+
const state = clone(prev);
|
|
58
|
+
const p = evt.properties ?? {};
|
|
59
|
+
tlog('event', evt.type, JSON.stringify(p).slice(0, 200));
|
|
60
|
+
switch (evt.type) {
|
|
61
|
+
case 'message.updated': {
|
|
62
|
+
const info = (p.info ?? p);
|
|
63
|
+
if (info.id) {
|
|
64
|
+
reconcilePending(state, info.id);
|
|
65
|
+
upsertMessage(state, info.id, info.role === 'user' ? 'user' : 'assistant');
|
|
66
|
+
}
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
case 'message.part.updated':
|
|
70
|
+
applyPart(state, (p.part ?? p));
|
|
71
|
+
break;
|
|
72
|
+
case 'permission.updated': {
|
|
73
|
+
const perm = p;
|
|
74
|
+
if (perm.id && perm.sessionID) {
|
|
75
|
+
state.permission = { id: perm.id, sessionId: perm.sessionID, title: perm.title ?? 'permissão' };
|
|
76
|
+
}
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
case 'permission.replied':
|
|
80
|
+
state.permission = null;
|
|
81
|
+
break;
|
|
82
|
+
case 'session.idle':
|
|
83
|
+
case 'session.error':
|
|
84
|
+
state.busy = false;
|
|
85
|
+
break;
|
|
86
|
+
case 'session.status':
|
|
87
|
+
if (p.status?.type === 'idle')
|
|
88
|
+
state.busy = false;
|
|
89
|
+
break;
|
|
90
|
+
default:
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
return state;
|
|
94
|
+
}
|
|
95
|
+
export function pushUserMessage(prev, text) {
|
|
96
|
+
return {
|
|
97
|
+
messages: [
|
|
98
|
+
...prev.messages.filter((m) => m.id !== PENDING_USER),
|
|
99
|
+
{ id: PENDING_USER, role: 'user', parts: [{ id: 'p0', kind: 'text', text }] },
|
|
100
|
+
],
|
|
101
|
+
busy: true,
|
|
102
|
+
permission: prev.permission,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/tui/state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { sym } from '../lib/colors.js';
|
|
2
|
+
export const theme = {
|
|
3
|
+
accent: 'green',
|
|
4
|
+
accentBright: 'greenBright',
|
|
5
|
+
dim: 'gray',
|
|
6
|
+
text: 'white',
|
|
7
|
+
warn: 'yellow',
|
|
8
|
+
err: 'red',
|
|
9
|
+
user: 'cyan',
|
|
10
|
+
border: 'gray',
|
|
11
|
+
};
|
|
12
|
+
export { sym };
|
|
13
|
+
export const NIO_WORDMARK = 'N I O';
|
|
14
|
+
//# sourceMappingURL=theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/tui/theme.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAEvC,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,MAAM,EAAE,OAAO;IACf,YAAY,EAAE,aAAa;IAC3B,GAAG,EAAE,MAAM;IACX,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,QAAQ;IACd,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,MAAM;CACN,CAAC;AAEX,OAAO,EAAE,GAAG,EAAE,CAAC;AAGf,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Camada Docker da NIO-CLI — infra local (`nio docker toolkit up`).
|
|
2
|
+
#
|
|
3
|
+
# - mcp-gateway : Docker MCP Gateway (docker/mcp-gateway), transport `streaming`
|
|
4
|
+
# em 127.0.0.1:8811/mcp. Agrega o server `docker` do catálogo
|
|
5
|
+
# (docker/compose/swarm como tools MCP). Registrado no
|
|
6
|
+
# `opencode.json` pelo `nio docker toolkit up` → o operador
|
|
7
|
+
# (OpenCode/big-pickle) ganha as tools e dirige por linguagem natural.
|
|
8
|
+
# - portainer : Portainer CE — visibilidade do gerenciamento de containers e
|
|
9
|
+
# da stack `nio-cluster` (Swarm). 1º acesso pede setup token.
|
|
10
|
+
#
|
|
11
|
+
# Mesmo padrão do `kong/docker-compose.yml`: portas pinadas em 127.0.0.1,
|
|
12
|
+
|
|
13
|
+
# `restart: unless-stopped`, `extra_hosts` p/ Linux. Roda em qualquer Docker
|
|
14
|
+
# Engine — não exige Docker Desktop.
|
|
15
|
+
services:
|
|
16
|
+
mcp-gateway:
|
|
17
|
+
image: docker/mcp-gateway:latest
|
|
18
|
+
container_name: nio-mcp-gateway
|
|
19
|
+
restart: unless-stopped
|
|
20
|
+
command:
|
|
21
|
+
- "--transport=streaming"
|
|
22
|
+
- "--port=8811"
|
|
23
|
+
- "--servers=docker"
|
|
24
|
+
volumes:
|
|
25
|
+
- /var/run/docker.sock:/var/run/docker.sock
|
|
26
|
+
ports:
|
|
27
|
+
- "127.0.0.1:8811:8811"
|
|
28
|
+
extra_hosts:
|
|
29
|
+
- "host.docker.internal:host-gateway"
|
|
30
|
+
|
|
31
|
+
portainer:
|
|
32
|
+
image: portainer/portainer-ce:lts
|
|
33
|
+
container_name: nio-portainer
|
|
34
|
+
restart: unless-stopped
|
|
35
|
+
volumes:
|
|
36
|
+
- /var/run/docker.sock:/var/run/docker.sock
|
|
37
|
+
- nio_portainer_data:/data
|
|
38
|
+
ports:
|
|
39
|
+
- "127.0.0.1:9443:9443"
|
|
40
|
+
- "127.0.0.1:8000:8000"
|
|
41
|
+
|
|
42
|
+
volumes:
|
|
43
|
+
nio_portainer_data:
|
|
44
|
+
name: nio_portainer_data
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Headroom — proxy de compressão de contexto entre o client de IA e o LLM.
|
|
2
|
+
# Obrigatório pro `nio ai` (ADR 0007). Mesmo padrão do `docker/docker-compose.yml`:
|
|
3
|
+
# porta pinada em 127.0.0.1, `restart: unless-stopped`, `extra_hosts` p/ Linux.
|
|
4
|
+
#
|
|
5
|
+
# O entrypoint da imagem já é `headroom proxy` — `command` passa só flags.
|
|
6
|
+
# `OPENAI_TARGET_API_URL` roteia as chamadas OpenAI-compatíveis (o operador usa
|
|
7
|
+
# OpenCode Zen) pro Zen; o header Authorization do OpenCode passa transparente,
|
|
8
|
+
# então o Headroom não precisa de API key própria.
|
|
9
|
+
services:
|
|
10
|
+
headroom:
|
|
11
|
+
image: ghcr.io/headroomlabs-ai/headroom:latest
|
|
12
|
+
container_name: nio-headroom
|
|
13
|
+
restart: unless-stopped
|
|
14
|
+
command: ["--host", "0.0.0.0", "--port", "8787"]
|
|
15
|
+
environment:
|
|
16
|
+
OPENAI_TARGET_API_URL: "${NIO_HEADROOM_OPENAI_TARGET:-https://opencode.ai/zen/v1}"
|
|
17
|
+
HEADROOM_UPDATE_CHECK: "off"
|
|
18
|
+
ports:
|
|
19
|
+
- "127.0.0.1:${NIO_HEADROOM_PORT:-8787}:8787"
|
|
20
|
+
extra_hosts:
|
|
21
|
+
- "host.docker.internal:host-gateway"
|
|
22
|
+
volumes:
|
|
23
|
+
- nio_headroom_cache:/root/.headroom
|
|
24
|
+
|
|
25
|
+
volumes:
|
|
26
|
+
nio_headroom_cache:
|
|
27
|
+
name: nio_headroom_cache
|