@build-astron-co/nimbus 0.2.0 → 0.4.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/bin/nimbus +26 -10
- package/bin/nimbus.cmd +41 -0
- package/bin/nimbus.mjs +70 -0
- package/completions/nimbus.bash +38 -0
- package/completions/nimbus.fish +48 -0
- package/completions/nimbus.zsh +81 -0
- package/dist/src/agent/compaction-agent.js +215 -0
- package/dist/src/agent/context-manager.js +385 -0
- package/dist/src/agent/context.js +322 -0
- package/dist/src/agent/deploy-preview.js +395 -0
- package/dist/src/agent/expand-files.js +95 -0
- package/dist/src/agent/index.js +18 -0
- package/dist/src/agent/loop.js +1535 -0
- package/dist/src/agent/modes.js +347 -0
- package/dist/src/agent/permissions.js +396 -0
- package/dist/src/agent/subagents/base.js +67 -0
- package/dist/src/agent/subagents/cost.js +45 -0
- package/dist/src/agent/subagents/explore.js +36 -0
- package/dist/src/agent/subagents/general.js +41 -0
- package/dist/src/agent/subagents/index.js +88 -0
- package/dist/src/agent/subagents/infra.js +52 -0
- package/dist/src/agent/subagents/security.js +60 -0
- package/dist/src/agent/system-prompt.js +860 -0
- package/dist/src/app.js +152 -0
- package/dist/src/audit/activity-log.js +209 -0
- package/dist/src/audit/compliance-checker.js +419 -0
- package/dist/src/audit/cost-tracker.js +231 -0
- package/dist/src/audit/index.js +10 -0
- package/dist/src/audit/security-scanner.js +490 -0
- package/dist/src/auth/guard.js +64 -0
- package/dist/src/auth/index.js +19 -0
- package/dist/src/auth/keychain.js +79 -0
- package/dist/src/auth/oauth.js +389 -0
- package/dist/src/auth/providers.js +415 -0
- package/dist/src/auth/sso.js +87 -0
- package/dist/src/auth/store.js +424 -0
- package/dist/src/auth/types.js +5 -0
- package/dist/src/cli/index.js +8 -0
- package/dist/src/cli/init.js +1048 -0
- package/dist/src/cli/openapi-spec.js +346 -0
- package/dist/src/cli/run.js +505 -0
- package/dist/src/cli/serve-auth.js +56 -0
- package/dist/src/cli/serve.js +432 -0
- package/dist/src/cli/web.js +50 -0
- package/dist/src/cli.js +1574 -0
- package/dist/src/clients/core-engine-client.js +156 -0
- package/dist/src/clients/enterprise-client.js +246 -0
- package/dist/src/clients/generator-client.js +219 -0
- package/dist/src/clients/git-client.js +367 -0
- package/dist/src/clients/github-client.js +229 -0
- package/dist/src/clients/helm-client.js +299 -0
- package/dist/src/clients/index.js +18 -0
- package/dist/src/clients/k8s-client.js +270 -0
- package/dist/src/clients/llm-client.js +119 -0
- package/dist/src/clients/rest-client.js +104 -0
- package/dist/src/clients/service-discovery.js +35 -0
- package/dist/src/clients/terraform-client.js +302 -0
- package/dist/src/clients/tools-client.js +1227 -0
- package/dist/src/clients/ws-client.js +93 -0
- package/dist/src/commands/alias.js +91 -0
- package/dist/src/commands/analyze/index.js +313 -0
- package/dist/src/commands/apply/helm.js +375 -0
- package/dist/src/commands/apply/index.js +176 -0
- package/dist/src/commands/apply/k8s.js +350 -0
- package/dist/src/commands/apply/terraform.js +465 -0
- package/dist/src/commands/ask.js +137 -0
- package/dist/src/commands/audit/index.js +322 -0
- package/dist/src/commands/auth-cloud.js +345 -0
- package/dist/src/commands/auth-list.js +112 -0
- package/dist/src/commands/auth-profile.js +104 -0
- package/dist/src/commands/auth-refresh.js +161 -0
- package/dist/src/commands/auth-status.js +122 -0
- package/dist/src/commands/aws/ec2.js +402 -0
- package/dist/src/commands/aws/iam.js +304 -0
- package/dist/src/commands/aws/index.js +108 -0
- package/dist/src/commands/aws/lambda.js +317 -0
- package/dist/src/commands/aws/rds.js +345 -0
- package/dist/src/commands/aws/s3.js +346 -0
- package/dist/src/commands/aws/vpc.js +302 -0
- package/dist/src/commands/aws-discover.js +413 -0
- package/dist/src/commands/aws-terraform.js +618 -0
- package/dist/src/commands/azure/aks.js +305 -0
- package/dist/src/commands/azure/functions.js +200 -0
- package/dist/src/commands/azure/index.js +93 -0
- package/dist/src/commands/azure/storage.js +378 -0
- package/dist/src/commands/azure/vm.js +291 -0
- package/dist/src/commands/billing/index.js +224 -0
- package/dist/src/commands/chat.js +259 -0
- package/dist/src/commands/completions.js +255 -0
- package/dist/src/commands/config.js +291 -0
- package/dist/src/commands/cost/cloud-cost-estimator.js +211 -0
- package/dist/src/commands/cost/estimator.js +73 -0
- package/dist/src/commands/cost/index.js +625 -0
- package/dist/src/commands/cost/parsers/terraform.js +234 -0
- package/dist/src/commands/cost/parsers/types.js +4 -0
- package/dist/src/commands/cost/pricing/aws.js +501 -0
- package/dist/src/commands/cost/pricing/azure.js +462 -0
- package/dist/src/commands/cost/pricing/gcp.js +359 -0
- package/dist/src/commands/cost/pricing/index.js +24 -0
- package/dist/src/commands/demo.js +196 -0
- package/dist/src/commands/deploy.js +215 -0
- package/dist/src/commands/doctor.js +1291 -0
- package/dist/src/commands/drift/index.js +674 -0
- package/dist/src/commands/explain.js +235 -0
- package/dist/src/commands/export.js +120 -0
- package/dist/src/commands/feedback.js +319 -0
- package/dist/src/commands/fix.js +263 -0
- package/dist/src/commands/fs/index.js +338 -0
- package/dist/src/commands/gcp/compute.js +266 -0
- package/dist/src/commands/gcp/functions.js +221 -0
- package/dist/src/commands/gcp/gke.js +357 -0
- package/dist/src/commands/gcp/iam.js +295 -0
- package/dist/src/commands/gcp/index.js +105 -0
- package/dist/src/commands/gcp/storage.js +232 -0
- package/dist/src/commands/generate-helm.js +1026 -0
- package/dist/src/commands/generate-k8s.js +1263 -0
- package/dist/src/commands/generate-terraform.js +1058 -0
- package/dist/src/commands/gh/index.js +663 -0
- package/dist/src/commands/git/index.js +1208 -0
- package/dist/src/commands/helm/index.js +985 -0
- package/dist/src/commands/help.js +639 -0
- package/dist/src/commands/history.js +120 -0
- package/dist/src/commands/import.js +782 -0
- package/dist/src/commands/incident.js +144 -0
- package/dist/src/commands/index.js +109 -0
- package/dist/src/commands/init.js +955 -0
- package/dist/src/commands/k8s/index.js +979 -0
- package/dist/src/commands/login.js +588 -0
- package/dist/src/commands/logout.js +61 -0
- package/dist/src/commands/logs.js +160 -0
- package/dist/src/commands/onboarding.js +382 -0
- package/dist/src/commands/pipeline.js +153 -0
- package/dist/src/commands/plan/display.js +216 -0
- package/dist/src/commands/plan/index.js +525 -0
- package/dist/src/commands/plugin.js +325 -0
- package/dist/src/commands/preview.js +356 -0
- package/dist/src/commands/profile.js +297 -0
- package/dist/src/commands/questionnaire.js +1021 -0
- package/dist/src/commands/resume.js +35 -0
- package/dist/src/commands/rollback.js +259 -0
- package/dist/src/commands/rollout.js +74 -0
- package/dist/src/commands/runbook.js +307 -0
- package/dist/src/commands/schedule.js +202 -0
- package/dist/src/commands/status.js +213 -0
- package/dist/src/commands/team/index.js +309 -0
- package/dist/src/commands/team-context.js +200 -0
- package/dist/src/commands/template.js +204 -0
- package/dist/src/commands/tf/index.js +989 -0
- package/dist/src/commands/upgrade.js +515 -0
- package/dist/src/commands/usage/index.js +118 -0
- package/dist/src/commands/version.js +145 -0
- package/dist/src/commands/watch.js +127 -0
- package/dist/src/compat/index.js +2 -0
- package/dist/src/compat/runtime.js +10 -0
- package/dist/src/compat/sqlite.js +144 -0
- package/dist/src/config/index.js +6 -0
- package/dist/src/config/manager.js +469 -0
- package/dist/src/config/mode-store.js +57 -0
- package/dist/src/config/profiles.js +66 -0
- package/dist/src/config/safety-policy.js +251 -0
- package/dist/src/config/schema.js +107 -0
- package/dist/src/config/types.js +311 -0
- package/dist/src/config/workspace-state.js +38 -0
- package/dist/src/context/context-db.js +138 -0
- package/dist/src/demo/index.js +295 -0
- package/dist/src/demo/scenarios/full-journey.js +226 -0
- package/dist/src/demo/scenarios/getting-started.js +124 -0
- package/dist/src/demo/scenarios/helm-release.js +334 -0
- package/dist/src/demo/scenarios/k8s-deployment.js +190 -0
- package/dist/src/demo/scenarios/terraform-vpc.js +167 -0
- package/dist/src/demo/types.js +6 -0
- package/dist/src/engine/cost-estimator.js +334 -0
- package/dist/src/engine/diagram-generator.js +192 -0
- package/dist/src/engine/drift-detector.js +688 -0
- package/dist/src/engine/executor.js +832 -0
- package/dist/src/engine/index.js +39 -0
- package/dist/src/engine/orchestrator.js +436 -0
- package/dist/src/engine/planner.js +616 -0
- package/dist/src/engine/safety.js +609 -0
- package/dist/src/engine/verifier.js +664 -0
- package/dist/src/enterprise/audit.js +241 -0
- package/dist/src/enterprise/auth.js +189 -0
- package/dist/src/enterprise/billing.js +512 -0
- package/dist/src/enterprise/index.js +16 -0
- package/dist/src/enterprise/teams.js +315 -0
- package/dist/src/generator/best-practices.js +1375 -0
- package/dist/src/generator/helm.js +495 -0
- package/dist/src/generator/index.js +11 -0
- package/dist/src/generator/intent-parser.js +420 -0
- package/dist/src/generator/kubernetes.js +773 -0
- package/dist/src/generator/terraform.js +1472 -0
- package/dist/src/history/index.js +6 -0
- package/dist/src/history/manager.js +199 -0
- package/dist/src/history/types.js +6 -0
- package/dist/src/hooks/config.js +318 -0
- package/dist/src/hooks/engine.js +317 -0
- package/dist/src/hooks/index.js +2 -0
- package/dist/src/llm/auth-bridge.js +157 -0
- package/dist/src/llm/circuit-breaker.js +116 -0
- package/dist/src/llm/config-loader.js +172 -0
- package/dist/src/llm/cost-calculator.js +137 -0
- package/dist/src/llm/index.js +7 -0
- package/dist/src/llm/model-aliases.js +99 -0
- package/dist/src/llm/provider-registry.js +57 -0
- package/dist/src/llm/providers/anthropic.js +430 -0
- package/dist/src/llm/providers/bedrock.js +409 -0
- package/dist/src/llm/providers/google.js +344 -0
- package/dist/src/llm/providers/ollama.js +661 -0
- package/dist/src/llm/providers/openai-compatible.js +289 -0
- package/dist/src/llm/providers/openai.js +284 -0
- package/dist/src/llm/providers/openrouter.js +293 -0
- package/dist/src/llm/router.js +844 -0
- package/dist/src/llm/types.js +69 -0
- package/dist/src/lsp/client.js +239 -0
- package/dist/src/lsp/languages.js +95 -0
- package/dist/src/lsp/manager.js +243 -0
- package/dist/src/mcp/client.js +289 -0
- package/dist/src/mcp/index.js +5 -0
- package/dist/src/mcp/manager.js +113 -0
- package/dist/src/nimbus.js +212 -0
- package/dist/src/plugins/index.js +13 -0
- package/dist/src/plugins/loader.js +280 -0
- package/dist/src/plugins/manager.js +282 -0
- package/dist/src/plugins/types.js +23 -0
- package/dist/src/scanners/cicd-scanner.js +230 -0
- package/dist/src/scanners/cloud-scanner.js +415 -0
- package/dist/src/scanners/framework-scanner.js +430 -0
- package/dist/src/scanners/iac-scanner.js +350 -0
- package/dist/src/scanners/index.js +454 -0
- package/dist/src/scanners/language-scanner.js +258 -0
- package/dist/src/scanners/package-manager-scanner.js +252 -0
- package/dist/src/scanners/types.js +6 -0
- package/dist/src/sessions/manager.js +395 -0
- package/dist/src/sessions/types.js +4 -0
- package/dist/src/sharing/sync.js +238 -0
- package/dist/src/sharing/viewer.js +131 -0
- package/dist/src/snapshots/index.js +1 -0
- package/dist/src/snapshots/manager.js +432 -0
- package/dist/src/state/artifacts.js +94 -0
- package/dist/src/state/audit.js +73 -0
- package/dist/src/state/billing.js +126 -0
- package/dist/src/state/checkpoints.js +81 -0
- package/dist/src/state/config.js +58 -0
- package/dist/src/state/conversations.js +7 -0
- package/dist/src/state/credentials.js +96 -0
- package/dist/src/state/db.js +53 -0
- package/dist/src/state/index.js +23 -0
- package/dist/src/state/messages.js +76 -0
- package/dist/src/state/projects.js +92 -0
- package/dist/src/state/schema.js +233 -0
- package/dist/src/state/sessions.js +79 -0
- package/dist/src/state/teams.js +131 -0
- package/dist/src/telemetry.js +91 -0
- package/dist/src/tools/aws-ops.js +747 -0
- package/dist/src/tools/azure-ops.js +491 -0
- package/dist/src/tools/file-ops.js +451 -0
- package/dist/src/tools/gcp-ops.js +559 -0
- package/dist/src/tools/git-ops.js +557 -0
- package/dist/src/tools/github-ops.js +460 -0
- package/dist/src/tools/helm-ops.js +634 -0
- package/dist/src/tools/index.js +16 -0
- package/dist/src/tools/k8s-ops.js +579 -0
- package/dist/src/tools/schemas/converter.js +129 -0
- package/dist/src/tools/schemas/devops.js +3319 -0
- package/dist/src/tools/schemas/index.js +19 -0
- package/dist/src/tools/schemas/standard.js +966 -0
- package/dist/src/tools/schemas/types.js +409 -0
- package/dist/src/tools/spawn-exec.js +109 -0
- package/dist/src/tools/terraform-ops.js +627 -0
- package/dist/src/types/config.js +1 -0
- package/dist/src/types/drift.js +4 -0
- package/dist/src/types/enterprise.js +5 -0
- package/dist/src/types/index.js +14 -0
- package/dist/src/types/plan.js +1 -0
- package/dist/src/types/request.js +1 -0
- package/dist/src/types/response.js +1 -0
- package/dist/src/types/service.js +1 -0
- package/dist/src/ui/App.js +1672 -0
- package/dist/src/ui/DeployPreview.js +60 -0
- package/dist/src/ui/FileDiffModal.js +108 -0
- package/dist/src/ui/Header.js +46 -0
- package/dist/src/ui/HelpModal.js +9 -0
- package/dist/src/ui/InputBox.js +408 -0
- package/dist/src/ui/MessageList.js +795 -0
- package/dist/src/ui/PermissionPrompt.js +72 -0
- package/dist/src/ui/StatusBar.js +109 -0
- package/dist/src/ui/TerminalPane.js +31 -0
- package/dist/src/ui/ToolCallDisplay.js +303 -0
- package/dist/src/ui/TreePane.js +83 -0
- package/dist/src/ui/chat-ui.js +721 -0
- package/dist/src/ui/index.js +11 -0
- package/dist/src/ui/ink/index.js +1325 -0
- package/dist/src/ui/streaming.js +137 -0
- package/dist/src/ui/theme.js +78 -0
- package/dist/src/ui/types.js +7 -0
- package/dist/src/utils/analytics.js +61 -0
- package/dist/src/utils/cost-warning.js +25 -0
- package/dist/src/utils/env.js +42 -0
- package/dist/src/utils/errors.js +54 -0
- package/dist/src/utils/event-bus.js +22 -0
- package/dist/src/utils/index.js +16 -0
- package/dist/src/utils/logger.js +150 -0
- package/dist/src/utils/rate-limiter.js +90 -0
- package/dist/src/utils/service-auth.js +36 -0
- package/dist/src/utils/validation.js +39 -0
- package/dist/src/version.js +3 -0
- package/dist/src/watcher/index.js +192 -0
- package/dist/src/wizard/approval.js +275 -0
- package/dist/src/wizard/index.js +13 -0
- package/dist/src/wizard/prompts.js +273 -0
- package/dist/src/wizard/types.js +4 -0
- package/dist/src/wizard/ui.js +453 -0
- package/dist/src/wizard/wizard.js +227 -0
- package/package.json +31 -23
- package/src/__tests__/alias.test.ts +133 -0
- package/src/__tests__/app.test.ts +1 -1
- package/src/__tests__/audit.test.ts +1 -1
- package/src/__tests__/circuit-breaker.test.ts +1 -1
- package/src/__tests__/cli-run.test.ts +237 -1
- package/src/__tests__/compat-sqlite.test.ts +68 -0
- package/src/__tests__/context-manager.test.ts +131 -1
- package/src/__tests__/context.test.ts +1 -1
- package/src/__tests__/devops-terminal-gaps.test.ts +718 -0
- package/src/__tests__/doctor.test.ts +48 -0
- package/src/__tests__/enterprise.test.ts +1 -1
- package/src/__tests__/export.test.ts +236 -0
- package/src/__tests__/gap-11-18-20.test.ts +958 -0
- package/src/__tests__/generator.test.ts +1 -1
- package/src/__tests__/helm-streaming.test.ts +127 -0
- package/src/__tests__/hooks.test.ts +1 -1
- package/src/__tests__/incident.test.ts +179 -0
- package/src/__tests__/init.test.ts +55 -4
- package/src/__tests__/intent-parser.test.ts +1 -1
- package/src/__tests__/llm-router.test.ts +1 -1
- package/src/__tests__/logs.test.ts +107 -0
- package/src/__tests__/loop-errors.test.ts +244 -0
- package/src/__tests__/lsp.test.ts +1 -1
- package/src/__tests__/modes.test.ts +1 -1
- package/src/__tests__/perf-optimizations.test.ts +847 -0
- package/src/__tests__/permissions.test.ts +1 -1
- package/src/__tests__/pipeline.test.ts +50 -0
- package/src/__tests__/polish-phase3.test.ts +340 -0
- package/src/__tests__/profile.test.ts +237 -0
- package/src/__tests__/rollback.test.ts +83 -0
- package/src/__tests__/runbook.test.ts +219 -0
- package/src/__tests__/schedule.test.ts +206 -0
- package/src/__tests__/serve.test.ts +1 -1
- package/src/__tests__/sessions.test.ts +96 -1
- package/src/__tests__/sharing.test.ts +53 -1
- package/src/__tests__/snapshots.test.ts +1 -1
- package/src/__tests__/standalone-migration.test.ts +199 -0
- package/src/__tests__/state-db.test.ts +1 -1
- package/src/__tests__/status.test.ts +158 -0
- package/src/__tests__/stream-with-tools.test.ts +71 -25
- package/src/__tests__/subagents.test.ts +1 -1
- package/src/__tests__/system-prompt.test.ts +82 -3
- package/src/__tests__/terminal-gap-v2.test.ts +395 -0
- package/src/__tests__/terminal-parity.test.ts +393 -0
- package/src/__tests__/tf-apply.test.ts +187 -0
- package/src/__tests__/tool-converter.test.ts +1 -1
- package/src/__tests__/tool-schemas.test.ts +209 -4
- package/src/__tests__/tools.test.ts +4 -3
- package/src/__tests__/version-json.test.ts +184 -0
- package/src/__tests__/version.test.ts +1 -1
- package/src/__tests__/watch.test.ts +129 -0
- package/src/agent/compaction-agent.ts +40 -1
- package/src/agent/context-manager.ts +67 -3
- package/src/agent/deploy-preview.ts +62 -1
- package/src/agent/expand-files.ts +108 -0
- package/src/agent/loop.ts +1312 -31
- package/src/agent/permissions.ts +51 -4
- package/src/agent/system-prompt.ts +573 -19
- package/src/app.ts +58 -0
- package/src/audit/security-scanner.ts +45 -0
- package/src/auth/keychain.ts +82 -0
- package/src/auth/oauth.ts +15 -5
- package/src/cli/init.ts +378 -5
- package/src/cli/run.ts +407 -16
- package/src/cli/serve.ts +78 -1
- package/src/cli/web.ts +10 -6
- package/src/cli.ts +312 -1
- package/src/clients/service-discovery.ts +30 -25
- package/src/commands/alias.ts +100 -0
- package/src/commands/audit/index.ts +121 -2
- package/src/commands/auth-cloud.ts +113 -0
- package/src/commands/auth-refresh.ts +187 -0
- package/src/commands/aws-discover.ts +144 -251
- package/src/commands/aws-terraform.ts +68 -118
- package/src/commands/chat.ts +9 -3
- package/src/commands/completions.ts +268 -0
- package/src/commands/config.ts +26 -0
- package/src/commands/cost/index.ts +218 -2
- package/src/commands/deploy.ts +260 -0
- package/src/commands/doctor.ts +744 -152
- package/src/commands/drift/index.ts +371 -23
- package/src/commands/export.ts +146 -0
- package/src/commands/generate-k8s.ts +9 -61
- package/src/commands/generate-terraform.ts +191 -449
- package/src/commands/help.ts +212 -36
- package/src/commands/history.ts +8 -1
- package/src/commands/incident.ts +166 -0
- package/src/commands/init.ts +5 -0
- package/src/commands/login.ts +86 -1
- package/src/commands/logs.ts +167 -0
- package/src/commands/onboarding.ts +211 -34
- package/src/commands/pipeline.ts +186 -0
- package/src/commands/plugin.ts +398 -0
- package/src/commands/profile.ts +342 -0
- package/src/commands/questionnaire.ts +0 -98
- package/src/commands/resume.ts +26 -34
- package/src/commands/rollback.ts +315 -0
- package/src/commands/rollout.ts +88 -0
- package/src/commands/runbook.ts +346 -0
- package/src/commands/schedule.ts +236 -0
- package/src/commands/status.ts +252 -0
- package/src/commands/team-context.ts +220 -0
- package/src/commands/template.ts +58 -57
- package/src/commands/tf/index.ts +70 -11
- package/src/commands/upgrade.ts +57 -0
- package/src/commands/version.ts +54 -50
- package/src/commands/watch.ts +153 -0
- package/src/compat/runtime.ts +1 -1
- package/src/compat/sqlite.ts +75 -5
- package/src/config/mode-store.ts +62 -0
- package/src/config/profiles.ts +84 -0
- package/src/config/types.ts +83 -1
- package/src/config/workspace-state.ts +53 -0
- package/src/engine/cost-estimator.ts +52 -10
- package/src/engine/executor.ts +33 -2
- package/src/engine/planner.ts +68 -1
- package/src/generator/terraform.ts +8 -0
- package/src/history/manager.ts +2 -74
- package/src/hooks/engine.ts +5 -4
- package/src/llm/cost-calculator.ts +2 -2
- package/src/llm/providers/anthropic.ts +50 -21
- package/src/llm/router.ts +76 -7
- package/src/lsp/languages.ts +3 -0
- package/src/lsp/manager.ts +21 -5
- package/src/nimbus.ts +37 -18
- package/src/sessions/manager.ts +108 -1
- package/src/sharing/sync.ts +4 -0
- package/src/sharing/viewer.ts +66 -0
- package/src/tools/file-ops.ts +22 -0
- package/src/tools/schemas/devops.ts +3007 -117
- package/src/tools/schemas/standard.ts +5 -1
- package/src/tools/schemas/types.ts +31 -1
- package/src/tools/spawn-exec.ts +148 -0
- package/src/ui/App.tsx +1183 -66
- package/src/ui/DeployPreview.tsx +62 -57
- package/src/ui/FileDiffModal.tsx +162 -0
- package/src/ui/Header.tsx +87 -24
- package/src/ui/HelpModal.tsx +57 -0
- package/src/ui/InputBox.tsx +163 -10
- package/src/ui/MessageList.tsx +487 -40
- package/src/ui/PermissionPrompt.tsx +17 -5
- package/src/ui/StatusBar.tsx +122 -3
- package/src/ui/TerminalPane.tsx +84 -0
- package/src/ui/ToolCallDisplay.tsx +252 -18
- package/src/ui/TreePane.tsx +132 -0
- package/src/ui/chat-ui.ts +41 -44
- package/src/ui/ink/index.ts +771 -38
- package/src/ui/streaming.ts +1 -1
- package/src/ui/theme.ts +104 -0
- package/src/ui/types.ts +18 -0
- package/src/version.ts +1 -1
- package/src/watcher/index.ts +66 -15
- package/src/wizard/types.ts +1 -0
- package/src/wizard/ui.ts +1 -1
- package/tsconfig.json +2 -2
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helm Tools Client
|
|
3
|
+
*
|
|
4
|
+
* REST client for communicating with the Helm Tools Service
|
|
5
|
+
*/
|
|
6
|
+
import { RestClient, ServiceURLs } from '.';
|
|
7
|
+
/**
|
|
8
|
+
* Client for Helm Tools Service
|
|
9
|
+
*/
|
|
10
|
+
export class HelmClient {
|
|
11
|
+
client;
|
|
12
|
+
constructor(baseUrl) {
|
|
13
|
+
this.client = new RestClient(baseUrl || ServiceURLs.HELM_TOOLS);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* List Helm releases
|
|
17
|
+
*/
|
|
18
|
+
async list(options) {
|
|
19
|
+
const params = new URLSearchParams();
|
|
20
|
+
if (options?.namespace) {
|
|
21
|
+
params.set('namespace', options.namespace);
|
|
22
|
+
}
|
|
23
|
+
if (options?.allNamespaces) {
|
|
24
|
+
params.set('all-namespaces', 'true');
|
|
25
|
+
}
|
|
26
|
+
const response = await this.client.get(`/api/helm/list?${params.toString()}`);
|
|
27
|
+
if (response.success && response.data) {
|
|
28
|
+
return response.data;
|
|
29
|
+
}
|
|
30
|
+
return { success: false, releases: [], error: response.error?.message || 'Unknown error' };
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Install a Helm chart
|
|
34
|
+
*/
|
|
35
|
+
async install(releaseName, chart, options) {
|
|
36
|
+
const response = await this.client.post('/api/helm/install', {
|
|
37
|
+
releaseName,
|
|
38
|
+
chart,
|
|
39
|
+
...options,
|
|
40
|
+
});
|
|
41
|
+
if (response.success && response.data) {
|
|
42
|
+
return response.data;
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
success: false,
|
|
46
|
+
release: {
|
|
47
|
+
name: '',
|
|
48
|
+
namespace: '',
|
|
49
|
+
revision: 0,
|
|
50
|
+
status: '',
|
|
51
|
+
chart: '',
|
|
52
|
+
appVersion: '',
|
|
53
|
+
updated: '',
|
|
54
|
+
},
|
|
55
|
+
output: '',
|
|
56
|
+
error: response.error?.message || 'Unknown error',
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Upgrade a Helm release
|
|
61
|
+
*/
|
|
62
|
+
async upgrade(releaseName, chart, options) {
|
|
63
|
+
const response = await this.client.post('/api/helm/upgrade', {
|
|
64
|
+
releaseName,
|
|
65
|
+
chart,
|
|
66
|
+
...options,
|
|
67
|
+
});
|
|
68
|
+
if (response.success && response.data) {
|
|
69
|
+
return response.data;
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
success: false,
|
|
73
|
+
release: {
|
|
74
|
+
name: '',
|
|
75
|
+
namespace: '',
|
|
76
|
+
revision: 0,
|
|
77
|
+
status: '',
|
|
78
|
+
chart: '',
|
|
79
|
+
appVersion: '',
|
|
80
|
+
updated: '',
|
|
81
|
+
},
|
|
82
|
+
output: '',
|
|
83
|
+
error: response.error?.message || 'Unknown error',
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Uninstall a Helm release
|
|
88
|
+
*/
|
|
89
|
+
async uninstall(releaseName, options) {
|
|
90
|
+
const response = await this.client.post('/api/helm/uninstall', { releaseName, ...options });
|
|
91
|
+
if (response.success && response.data) {
|
|
92
|
+
return response.data;
|
|
93
|
+
}
|
|
94
|
+
return { success: false, output: '', error: response.error?.message || 'Unknown error' };
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Rollback a Helm release
|
|
98
|
+
*/
|
|
99
|
+
async rollback(releaseName, revision, options) {
|
|
100
|
+
const response = await this.client.post('/api/helm/rollback', { releaseName, revision, ...options });
|
|
101
|
+
if (response.success && response.data) {
|
|
102
|
+
return response.data;
|
|
103
|
+
}
|
|
104
|
+
return { success: false, output: '', error: response.error?.message || 'Unknown error' };
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Get release history
|
|
108
|
+
*/
|
|
109
|
+
async history(releaseName, options) {
|
|
110
|
+
const params = new URLSearchParams();
|
|
111
|
+
params.set('release', releaseName);
|
|
112
|
+
if (options?.namespace) {
|
|
113
|
+
params.set('namespace', options.namespace);
|
|
114
|
+
}
|
|
115
|
+
const response = await this.client.get(`/api/helm/history?${params.toString()}`);
|
|
116
|
+
if (response.success && response.data) {
|
|
117
|
+
return response.data;
|
|
118
|
+
}
|
|
119
|
+
return { success: false, history: [], error: response.error?.message || 'Unknown error' };
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Search for Helm charts
|
|
123
|
+
*/
|
|
124
|
+
async search(keyword, options) {
|
|
125
|
+
const params = new URLSearchParams();
|
|
126
|
+
params.set('keyword', keyword);
|
|
127
|
+
if (options?.repo) {
|
|
128
|
+
params.set('repo', options.repo);
|
|
129
|
+
}
|
|
130
|
+
const response = await this.client.get(`/api/helm/search?${params.toString()}`);
|
|
131
|
+
if (response.success && response.data) {
|
|
132
|
+
return response.data;
|
|
133
|
+
}
|
|
134
|
+
return { success: false, charts: [], error: response.error?.message || 'Unknown error' };
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Add a Helm repository
|
|
138
|
+
*/
|
|
139
|
+
async repoAdd(name, url) {
|
|
140
|
+
const response = await this.client.post('/api/helm/repo/add', { name, url });
|
|
141
|
+
if (response.success && response.data) {
|
|
142
|
+
return response.data;
|
|
143
|
+
}
|
|
144
|
+
return { success: false, output: '', error: response.error?.message || 'Unknown error' };
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Update Helm repositories
|
|
148
|
+
*/
|
|
149
|
+
async repoUpdate() {
|
|
150
|
+
const response = await this.client.post('/api/helm/repo/update', {});
|
|
151
|
+
if (response.success && response.data) {
|
|
152
|
+
return response.data;
|
|
153
|
+
}
|
|
154
|
+
return { success: false, output: '', error: response.error?.message || 'Unknown error' };
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Show chart information
|
|
158
|
+
*/
|
|
159
|
+
async show(chart, options) {
|
|
160
|
+
const params = new URLSearchParams();
|
|
161
|
+
params.set('chart', chart);
|
|
162
|
+
if (options?.subcommand) {
|
|
163
|
+
params.set('subcommand', options.subcommand);
|
|
164
|
+
}
|
|
165
|
+
if (options?.version) {
|
|
166
|
+
params.set('version', options.version);
|
|
167
|
+
}
|
|
168
|
+
const response = await this.client.get(`/api/helm/show?${params.toString()}`);
|
|
169
|
+
if (response.success && response.data) {
|
|
170
|
+
return response.data;
|
|
171
|
+
}
|
|
172
|
+
return { success: false, output: '', error: response.error?.message || 'Unknown error' };
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Lint a Helm chart
|
|
176
|
+
*/
|
|
177
|
+
async lint(chartPath, options) {
|
|
178
|
+
const response = await this.client.post('/api/helm/lint', {
|
|
179
|
+
chartPath,
|
|
180
|
+
...options,
|
|
181
|
+
});
|
|
182
|
+
if (response.success && response.data) {
|
|
183
|
+
return response.data;
|
|
184
|
+
}
|
|
185
|
+
return { success: false, error: response.error?.message || 'Unknown error' };
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Get status of a Helm release
|
|
189
|
+
*/
|
|
190
|
+
async status(releaseName, options) {
|
|
191
|
+
const params = new URLSearchParams();
|
|
192
|
+
params.set('release', releaseName);
|
|
193
|
+
if (options?.namespace) {
|
|
194
|
+
params.set('namespace', options.namespace);
|
|
195
|
+
}
|
|
196
|
+
const response = await this.client.get(`/api/helm/status?${params.toString()}`);
|
|
197
|
+
if (response.success && response.data) {
|
|
198
|
+
return response.data;
|
|
199
|
+
}
|
|
200
|
+
return { success: false, error: response.error?.message || 'Unknown error' };
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Show chart values
|
|
204
|
+
*/
|
|
205
|
+
async showValues(chart, options) {
|
|
206
|
+
const params = new URLSearchParams();
|
|
207
|
+
params.set('chart', chart);
|
|
208
|
+
if (options?.version) {
|
|
209
|
+
params.set('version', options.version);
|
|
210
|
+
}
|
|
211
|
+
const response = await this.client.get(`/api/helm/show/values?${params.toString()}`);
|
|
212
|
+
if (response.success && response.data) {
|
|
213
|
+
return response.data;
|
|
214
|
+
}
|
|
215
|
+
return { success: false, values: '', error: response.error?.message || 'Unknown error' };
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Render chart templates locally without installing
|
|
219
|
+
*/
|
|
220
|
+
async template(releaseName, chart, options) {
|
|
221
|
+
const response = await this.client.post('/api/helm/template', {
|
|
222
|
+
name: releaseName,
|
|
223
|
+
chart,
|
|
224
|
+
...options,
|
|
225
|
+
});
|
|
226
|
+
if (response.success && response.data) {
|
|
227
|
+
return response.data;
|
|
228
|
+
}
|
|
229
|
+
return { success: false, error: response.error?.message || 'Unknown error' };
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Package a chart directory into a chart archive
|
|
233
|
+
*/
|
|
234
|
+
async package(chartPath, options) {
|
|
235
|
+
const response = await this.client.post('/api/helm/package', {
|
|
236
|
+
chartPath,
|
|
237
|
+
...options,
|
|
238
|
+
});
|
|
239
|
+
if (response.success && response.data) {
|
|
240
|
+
return response.data;
|
|
241
|
+
}
|
|
242
|
+
return { success: false, error: response.error?.message || 'Unknown error' };
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Update chart dependencies
|
|
246
|
+
*/
|
|
247
|
+
async dependencyUpdate(chartPath) {
|
|
248
|
+
const response = await this.client.post('/api/helm/dependency/update', {
|
|
249
|
+
chartPath,
|
|
250
|
+
});
|
|
251
|
+
if (response.success && response.data) {
|
|
252
|
+
return response.data;
|
|
253
|
+
}
|
|
254
|
+
return { success: false, error: response.error?.message || 'Unknown error' };
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Build chart dependencies
|
|
258
|
+
*/
|
|
259
|
+
async dependencyBuild(chartPath) {
|
|
260
|
+
const response = await this.client.post('/api/helm/dependency/build', {
|
|
261
|
+
chartPath,
|
|
262
|
+
});
|
|
263
|
+
if (response.success && response.data) {
|
|
264
|
+
return response.data;
|
|
265
|
+
}
|
|
266
|
+
return { success: false, error: response.error?.message || 'Unknown error' };
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Get detailed status of a Helm release with optional revision
|
|
270
|
+
*/
|
|
271
|
+
async statusDetailed(releaseName, options) {
|
|
272
|
+
const params = new URLSearchParams();
|
|
273
|
+
params.set('name', releaseName);
|
|
274
|
+
if (options?.namespace) {
|
|
275
|
+
params.set('namespace', options.namespace);
|
|
276
|
+
}
|
|
277
|
+
if (options?.revision !== undefined) {
|
|
278
|
+
params.set('revision', options.revision.toString());
|
|
279
|
+
}
|
|
280
|
+
const response = await this.client.get(`/api/helm/status?${params.toString()}`);
|
|
281
|
+
if (response.success && response.data) {
|
|
282
|
+
return response.data;
|
|
283
|
+
}
|
|
284
|
+
return { success: false, error: response.error?.message || 'Unknown error' };
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Check if service is available
|
|
288
|
+
*/
|
|
289
|
+
async isAvailable() {
|
|
290
|
+
try {
|
|
291
|
+
const response = await this.client.get('/health');
|
|
292
|
+
return response.success && response.data?.status === 'healthy';
|
|
293
|
+
}
|
|
294
|
+
catch {
|
|
295
|
+
return false;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
export const helmClient = new HelmClient();
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Service Clients
|
|
3
|
+
*
|
|
4
|
+
* Exports clients for communicating with backend services
|
|
5
|
+
*/
|
|
6
|
+
// Low-level shared clients
|
|
7
|
+
export { RestClient } from './rest-client';
|
|
8
|
+
export { WebSocketClient } from './ws-client';
|
|
9
|
+
export { ServiceURLs, WebSocketURLs } from './service-discovery';
|
|
10
|
+
export { ToolsClient } from './tools-client';
|
|
11
|
+
// High-level service clients
|
|
12
|
+
export { LLMClient, llmClient, } from './llm-client';
|
|
13
|
+
export { TerraformClient, terraformClient, } from './terraform-client';
|
|
14
|
+
export { K8sClient, k8sClient, } from './k8s-client';
|
|
15
|
+
export { HelmClient, helmClient, } from './helm-client';
|
|
16
|
+
export { GitClient, gitClient, } from './git-client';
|
|
17
|
+
export { GeneratorClient, generatorClient, } from './generator-client';
|
|
18
|
+
export { CoreEngineClient, } from './core-engine-client';
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kubernetes Tools Client
|
|
3
|
+
*
|
|
4
|
+
* REST client for communicating with the K8s Tools Service
|
|
5
|
+
*/
|
|
6
|
+
import { RestClient, ServiceURLs } from '.';
|
|
7
|
+
/**
|
|
8
|
+
* Client for Kubernetes Tools Service
|
|
9
|
+
*/
|
|
10
|
+
export class K8sClient {
|
|
11
|
+
client;
|
|
12
|
+
constructor(baseUrl) {
|
|
13
|
+
this.client = new RestClient(baseUrl || ServiceURLs.K8S_TOOLS);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Get Kubernetes resources
|
|
17
|
+
*/
|
|
18
|
+
async get(resource, options) {
|
|
19
|
+
const params = new URLSearchParams();
|
|
20
|
+
params.set('resource', resource);
|
|
21
|
+
if (options?.namespace) {
|
|
22
|
+
params.set('namespace', options.namespace);
|
|
23
|
+
}
|
|
24
|
+
if (options?.name) {
|
|
25
|
+
params.set('name', options.name);
|
|
26
|
+
}
|
|
27
|
+
if (options?.output) {
|
|
28
|
+
params.set('output', options.output);
|
|
29
|
+
}
|
|
30
|
+
if (options?.labels) {
|
|
31
|
+
params.set('labels', JSON.stringify(options.labels));
|
|
32
|
+
}
|
|
33
|
+
const response = await this.client.get(`/api/k8s/get?${params.toString()}`);
|
|
34
|
+
if (response.success && response.data) {
|
|
35
|
+
return response.data;
|
|
36
|
+
}
|
|
37
|
+
return { success: false, items: [], error: response.error?.message || 'Unknown error' };
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Apply Kubernetes manifests
|
|
41
|
+
*/
|
|
42
|
+
async apply(manifests, options) {
|
|
43
|
+
const response = await this.client.post('/api/k8s/apply', {
|
|
44
|
+
manifests,
|
|
45
|
+
...options,
|
|
46
|
+
});
|
|
47
|
+
if (response.success && response.data) {
|
|
48
|
+
return response.data;
|
|
49
|
+
}
|
|
50
|
+
return { success: false, output: '', error: response.error?.message || 'Unknown error' };
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Delete Kubernetes resources
|
|
54
|
+
*/
|
|
55
|
+
async delete(resource, name, options) {
|
|
56
|
+
const response = await this.client.post('/api/k8s/delete', {
|
|
57
|
+
resource,
|
|
58
|
+
name,
|
|
59
|
+
...options,
|
|
60
|
+
});
|
|
61
|
+
if (response.success && response.data) {
|
|
62
|
+
return response.data;
|
|
63
|
+
}
|
|
64
|
+
return { success: false, output: '', error: response.error?.message || 'Unknown error' };
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Get logs from a pod
|
|
68
|
+
*/
|
|
69
|
+
async logs(podName, options) {
|
|
70
|
+
const params = new URLSearchParams();
|
|
71
|
+
params.set('pod', podName);
|
|
72
|
+
if (options?.namespace) {
|
|
73
|
+
params.set('namespace', options.namespace);
|
|
74
|
+
}
|
|
75
|
+
if (options?.container) {
|
|
76
|
+
params.set('container', options.container);
|
|
77
|
+
}
|
|
78
|
+
if (options?.tail) {
|
|
79
|
+
params.set('tail', String(options.tail));
|
|
80
|
+
}
|
|
81
|
+
if (options?.since) {
|
|
82
|
+
params.set('since', options.since);
|
|
83
|
+
}
|
|
84
|
+
const response = await this.client.get(`/api/k8s/logs?${params.toString()}`);
|
|
85
|
+
if (response.success && response.data) {
|
|
86
|
+
return response.data;
|
|
87
|
+
}
|
|
88
|
+
return { success: false, logs: '', error: response.error?.message || 'Unknown error' };
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Describe a Kubernetes resource
|
|
92
|
+
*/
|
|
93
|
+
async describe(resource, name, options) {
|
|
94
|
+
const params = new URLSearchParams();
|
|
95
|
+
params.set('resource', resource);
|
|
96
|
+
params.set('name', name);
|
|
97
|
+
if (options?.namespace) {
|
|
98
|
+
params.set('namespace', options.namespace);
|
|
99
|
+
}
|
|
100
|
+
const response = await this.client.get(`/api/k8s/describe?${params.toString()}`);
|
|
101
|
+
if (response.success && response.data) {
|
|
102
|
+
return response.data;
|
|
103
|
+
}
|
|
104
|
+
return { success: false, output: '', error: response.error?.message || 'Unknown error' };
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Scale a deployment/replicaset
|
|
108
|
+
*/
|
|
109
|
+
async scale(resource, name, replicas, options) {
|
|
110
|
+
const response = await this.client.post('/api/k8s/scale', { resource, name, replicas, ...options });
|
|
111
|
+
if (response.success && response.data) {
|
|
112
|
+
return response.data;
|
|
113
|
+
}
|
|
114
|
+
return { success: false, output: '', error: response.error?.message || 'Unknown error' };
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Execute a command in a pod
|
|
118
|
+
*/
|
|
119
|
+
async exec(pod, command, options) {
|
|
120
|
+
const response = await this.client.post('/api/k8s/exec', { pod, command, ...options });
|
|
121
|
+
if (response.success && response.data) {
|
|
122
|
+
return response.data;
|
|
123
|
+
}
|
|
124
|
+
return { success: false, output: '', error: response.error?.message || 'Unknown error' };
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Manage rollouts
|
|
128
|
+
*/
|
|
129
|
+
async rollout(resource, name, action, options) {
|
|
130
|
+
const response = await this.client.post('/api/k8s/rollout', { action, resource, name, ...options });
|
|
131
|
+
if (response.success && response.data) {
|
|
132
|
+
return response.data;
|
|
133
|
+
}
|
|
134
|
+
return { success: false, output: '', error: response.error?.message || 'Unknown error' };
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Get events from a namespace
|
|
138
|
+
*/
|
|
139
|
+
async events(options) {
|
|
140
|
+
const params = new URLSearchParams();
|
|
141
|
+
if (options?.namespace) {
|
|
142
|
+
params.set('namespace', options.namespace);
|
|
143
|
+
}
|
|
144
|
+
if (options?.fieldSelector) {
|
|
145
|
+
params.set('fieldSelector', options.fieldSelector);
|
|
146
|
+
}
|
|
147
|
+
const response = await this.client.get(`/api/k8s/events?${params.toString()}`);
|
|
148
|
+
if (response.success && response.data) {
|
|
149
|
+
return response.data;
|
|
150
|
+
}
|
|
151
|
+
return { success: false, events: [], error: response.error?.message || 'Unknown error' };
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Forward local ports to a pod
|
|
155
|
+
*/
|
|
156
|
+
async portForward(pod, ports, options) {
|
|
157
|
+
const response = await this.client.post('/api/k8s/port-forward', { pod, ports, ...options });
|
|
158
|
+
if (response.success && response.data) {
|
|
159
|
+
return response.data;
|
|
160
|
+
}
|
|
161
|
+
return { success: false, output: '', error: response.error?.message || 'Unknown error' };
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* List namespaces
|
|
165
|
+
*/
|
|
166
|
+
async listNamespaces(options) {
|
|
167
|
+
const params = new URLSearchParams();
|
|
168
|
+
if (options?.kubeconfig) {
|
|
169
|
+
params.set('kubeconfig', options.kubeconfig);
|
|
170
|
+
}
|
|
171
|
+
if (options?.context) {
|
|
172
|
+
params.set('context', options.context);
|
|
173
|
+
}
|
|
174
|
+
const query = params.toString() ? `?${params.toString()}` : '';
|
|
175
|
+
const response = await this.client.get(`/api/k8s/namespaces${query}`);
|
|
176
|
+
if (response.success && response.data) {
|
|
177
|
+
return response.data;
|
|
178
|
+
}
|
|
179
|
+
return { success: false, namespaces: [], error: response.error?.message || 'Unknown error' };
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Create a namespace
|
|
183
|
+
*/
|
|
184
|
+
async createNamespace(name, options) {
|
|
185
|
+
const response = await this.client.post('/api/k8s/namespace', { name, ...options });
|
|
186
|
+
if (response.success && response.data) {
|
|
187
|
+
return response.data;
|
|
188
|
+
}
|
|
189
|
+
return { success: false, output: '', error: response.error?.message || 'Unknown error' };
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Delete a namespace
|
|
193
|
+
*/
|
|
194
|
+
async deleteNamespace(name, options) {
|
|
195
|
+
const response = await this.client.post('/api/k8s/namespace/delete', { name, ...options });
|
|
196
|
+
if (response.success && response.data) {
|
|
197
|
+
return response.data;
|
|
198
|
+
}
|
|
199
|
+
return { success: false, output: '', error: response.error?.message || 'Unknown error' };
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Get top resource usage for pods or nodes
|
|
203
|
+
*/
|
|
204
|
+
async top(resourceType, options) {
|
|
205
|
+
const params = new URLSearchParams();
|
|
206
|
+
if (options?.namespace) {
|
|
207
|
+
params.set('namespace', options.namespace);
|
|
208
|
+
}
|
|
209
|
+
if (options?.kubeconfig) {
|
|
210
|
+
params.set('kubeconfig', options.kubeconfig);
|
|
211
|
+
}
|
|
212
|
+
if (options?.context) {
|
|
213
|
+
params.set('context', options.context);
|
|
214
|
+
}
|
|
215
|
+
const query = params.toString() ? `?${params.toString()}` : '';
|
|
216
|
+
const response = await this.client.get(`/api/k8s/top/${resourceType}${query}`);
|
|
217
|
+
if (response.success && response.data) {
|
|
218
|
+
return response.data;
|
|
219
|
+
}
|
|
220
|
+
return {
|
|
221
|
+
success: false,
|
|
222
|
+
output: '',
|
|
223
|
+
items: [],
|
|
224
|
+
error: response.error?.message || 'Unknown error',
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Patch a Kubernetes resource
|
|
229
|
+
*/
|
|
230
|
+
async patch(resource, name, patch, options) {
|
|
231
|
+
const response = await this.client.post('/api/k8s/patch', { resource, name, patch, ...options });
|
|
232
|
+
if (response.success && response.data) {
|
|
233
|
+
return response.data;
|
|
234
|
+
}
|
|
235
|
+
return { success: false, output: '', error: response.error?.message || 'Unknown error' };
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Label a Kubernetes resource
|
|
239
|
+
*/
|
|
240
|
+
async label(resource, name, labels, options) {
|
|
241
|
+
const response = await this.client.post('/api/k8s/label', { resource, name, labels, ...options });
|
|
242
|
+
if (response.success && response.data) {
|
|
243
|
+
return response.data;
|
|
244
|
+
}
|
|
245
|
+
return { success: false, output: '', error: response.error?.message || 'Unknown error' };
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Annotate a Kubernetes resource
|
|
249
|
+
*/
|
|
250
|
+
async annotate(resource, name, annotations, options) {
|
|
251
|
+
const response = await this.client.post('/api/k8s/annotate', { resource, name, annotations, ...options });
|
|
252
|
+
if (response.success && response.data) {
|
|
253
|
+
return response.data;
|
|
254
|
+
}
|
|
255
|
+
return { success: false, output: '', error: response.error?.message || 'Unknown error' };
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Check if service is available
|
|
259
|
+
*/
|
|
260
|
+
async isAvailable() {
|
|
261
|
+
try {
|
|
262
|
+
const response = await this.client.get('/health');
|
|
263
|
+
return response.success && response.data?.status === 'healthy';
|
|
264
|
+
}
|
|
265
|
+
catch {
|
|
266
|
+
return false;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
export const k8sClient = new K8sClient();
|