@build-astron-co/nimbus 0.4.1 → 0.4.3
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/CHANGELOG.md +268 -89
- package/README.md +26 -567
- package/dist/src/agent/compaction-agent.js +24 -12
- package/dist/src/agent/context-manager.js +2 -1
- package/dist/src/agent/expand-files.js +2 -1
- package/dist/src/agent/loop.js +71 -33
- package/dist/src/agent/permissions.js +4 -2
- package/dist/src/agent/system-prompt.js +34 -17
- package/dist/src/app.js +1 -1
- package/dist/src/auth/keychain.js +8 -4
- package/dist/src/auth/store.js +70 -107
- package/dist/src/cli/init.js +35 -19
- package/dist/src/cli/run.js +18 -10
- package/dist/src/cli/serve.js +4 -2
- package/dist/src/cli.js +52 -11
- package/dist/src/commands/alias.js +5 -3
- package/dist/src/commands/audit/index.js +2 -1
- package/dist/src/commands/aws-terraform.js +36 -18
- package/dist/src/commands/completions.js +1 -1
- package/dist/src/commands/config.js +3 -2
- package/dist/src/commands/connect-github.js +92 -0
- package/dist/src/commands/cost/index.js +3 -2
- package/dist/src/commands/deploy.js +15 -10
- package/dist/src/commands/doctor.js +9 -6
- package/dist/src/commands/drift/index.js +2 -1
- package/dist/src/commands/export.js +5 -3
- package/dist/src/commands/generate-terraform.js +110 -2
- package/dist/src/commands/import.js +3 -3
- package/dist/src/commands/incident.js +10 -5
- package/dist/src/commands/login.js +8 -93
- package/dist/src/commands/logs.js +16 -8
- package/dist/src/commands/onboarding.js +6 -4
- package/dist/src/commands/pipeline.js +6 -3
- package/dist/src/commands/plugin.js +3 -2
- package/dist/src/commands/profile.js +27 -14
- package/dist/src/commands/questionnaire.js +1 -1
- package/dist/src/commands/rollback.js +3 -2
- package/dist/src/commands/rollout.js +5 -3
- package/dist/src/commands/runbook.js +17 -10
- package/dist/src/commands/schedule.js +10 -5
- package/dist/src/commands/status.js +2 -1
- package/dist/src/commands/team-context.js +12 -7
- package/dist/src/commands/template.js +1 -1
- package/dist/src/commands/tf/index.js +6 -3
- package/dist/src/commands/upgrade.js +5 -3
- package/dist/src/commands/version.js +6 -3
- package/dist/src/commands/watch.js +6 -3
- package/dist/src/compat/sqlite.js +5 -3
- package/dist/src/config/mode-store.js +2 -1
- package/dist/src/config/profiles.js +4 -2
- package/dist/src/config/types.js +2 -1
- package/dist/src/engine/executor.js +8 -4
- package/dist/src/engine/planner.js +9 -5
- package/dist/src/llm/providers/anthropic.js +6 -3
- package/dist/src/llm/providers/ollama.js +1 -1
- package/dist/src/llm/router.js +22 -7
- package/dist/src/nimbus.js +1 -0
- package/dist/src/sessions/manager.js +6 -3
- package/dist/src/sharing/viewer.js +2 -1
- package/dist/src/tools/file-ops.js +1 -2
- package/dist/src/tools/schemas/devops.js +197 -108
- package/dist/src/tools/schemas/standard.js +1 -1
- package/dist/src/ui/App.js +25 -13
- package/dist/src/ui/FileDiffModal.js +22 -11
- package/dist/src/ui/HelpModal.js +2 -1
- package/dist/src/ui/InputBox.js +6 -3
- package/dist/src/ui/MessageList.js +40 -20
- package/dist/src/ui/TerminalPane.js +2 -1
- package/dist/src/ui/ToolCallDisplay.js +12 -6
- package/dist/src/ui/TreePane.js +2 -1
- package/dist/src/ui/ink/index.js +37 -21
- package/dist/src/version.js +1 -1
- package/dist/src/watcher/index.js +8 -4
- package/package.json +3 -5
- package/src/__tests__/alias.test.ts +0 -133
- package/src/__tests__/app.test.ts +0 -76
- package/src/__tests__/audit.test.ts +0 -877
- package/src/__tests__/circuit-breaker.test.ts +0 -116
- package/src/__tests__/cli-run.test.ts +0 -351
- package/src/__tests__/compat-sqlite.test.ts +0 -68
- package/src/__tests__/context-manager.test.ts +0 -632
- package/src/__tests__/context.test.ts +0 -242
- package/src/__tests__/devops-terminal-gaps.test.ts +0 -718
- package/src/__tests__/doctor.test.ts +0 -48
- package/src/__tests__/enterprise.test.ts +0 -401
- package/src/__tests__/export.test.ts +0 -236
- package/src/__tests__/gap-11-18-20.test.ts +0 -958
- package/src/__tests__/generator.test.ts +0 -433
- package/src/__tests__/helm-streaming.test.ts +0 -127
- package/src/__tests__/hooks.test.ts +0 -582
- package/src/__tests__/incident.test.ts +0 -179
- package/src/__tests__/init.test.ts +0 -487
- package/src/__tests__/intent-parser.test.ts +0 -229
- package/src/__tests__/llm-router.test.ts +0 -209
- package/src/__tests__/logs.test.ts +0 -107
- package/src/__tests__/loop-errors.test.ts +0 -244
- package/src/__tests__/lsp.test.ts +0 -293
- package/src/__tests__/modes.test.ts +0 -336
- package/src/__tests__/perf-optimizations.test.ts +0 -847
- package/src/__tests__/permissions.test.ts +0 -338
- package/src/__tests__/pipeline.test.ts +0 -50
- package/src/__tests__/polish-phase3.test.ts +0 -340
- package/src/__tests__/profile.test.ts +0 -237
- package/src/__tests__/rollback.test.ts +0 -83
- package/src/__tests__/runbook.test.ts +0 -219
- package/src/__tests__/schedule.test.ts +0 -206
- package/src/__tests__/serve.test.ts +0 -275
- package/src/__tests__/sessions.test.ts +0 -322
- package/src/__tests__/sharing.test.ts +0 -340
- package/src/__tests__/snapshots.test.ts +0 -581
- package/src/__tests__/standalone-migration.test.ts +0 -199
- package/src/__tests__/state-db.test.ts +0 -334
- package/src/__tests__/status.test.ts +0 -158
- package/src/__tests__/stream-with-tools.test.ts +0 -778
- package/src/__tests__/subagents.test.ts +0 -176
- package/src/__tests__/system-prompt.test.ts +0 -248
- package/src/__tests__/terminal-gap-v2.test.ts +0 -395
- package/src/__tests__/terminal-parity.test.ts +0 -393
- package/src/__tests__/tf-apply.test.ts +0 -187
- package/src/__tests__/tool-converter.test.ts +0 -256
- package/src/__tests__/tool-schemas.test.ts +0 -602
- package/src/__tests__/tools.test.ts +0 -144
- package/src/__tests__/version-json.test.ts +0 -184
- package/src/__tests__/version.test.ts +0 -49
- package/src/__tests__/watch.test.ts +0 -129
- package/src/agent/compaction-agent.ts +0 -266
- package/src/agent/context-manager.ts +0 -499
- package/src/agent/context.ts +0 -427
- package/src/agent/deploy-preview.ts +0 -487
- package/src/agent/expand-files.ts +0 -108
- package/src/agent/index.ts +0 -68
- package/src/agent/loop.ts +0 -1998
- package/src/agent/modes.ts +0 -429
- package/src/agent/permissions.ts +0 -513
- package/src/agent/subagents/base.ts +0 -116
- package/src/agent/subagents/cost.ts +0 -51
- package/src/agent/subagents/explore.ts +0 -42
- package/src/agent/subagents/general.ts +0 -54
- package/src/agent/subagents/index.ts +0 -102
- package/src/agent/subagents/infra.ts +0 -59
- package/src/agent/subagents/security.ts +0 -69
- package/src/agent/system-prompt.ts +0 -990
- package/src/app.ts +0 -180
- package/src/audit/activity-log.ts +0 -290
- package/src/audit/compliance-checker.ts +0 -540
- package/src/audit/cost-tracker.ts +0 -318
- package/src/audit/index.ts +0 -23
- package/src/audit/security-scanner.ts +0 -641
- package/src/auth/guard.ts +0 -75
- package/src/auth/index.ts +0 -56
- package/src/auth/keychain.ts +0 -82
- package/src/auth/oauth.ts +0 -465
- package/src/auth/providers.ts +0 -470
- package/src/auth/sso.ts +0 -113
- package/src/auth/store.ts +0 -505
- package/src/auth/types.ts +0 -187
- package/src/build.ts +0 -141
- package/src/cli/index.ts +0 -16
- package/src/cli/init.ts +0 -1227
- package/src/cli/openapi-spec.ts +0 -356
- package/src/cli/run.ts +0 -628
- package/src/cli/serve-auth.ts +0 -80
- package/src/cli/serve.ts +0 -539
- package/src/cli/web.ts +0 -71
- package/src/cli.ts +0 -1728
- package/src/clients/core-engine-client.ts +0 -227
- package/src/clients/enterprise-client.ts +0 -334
- package/src/clients/generator-client.ts +0 -351
- package/src/clients/git-client.ts +0 -627
- package/src/clients/github-client.ts +0 -410
- package/src/clients/helm-client.ts +0 -504
- package/src/clients/index.ts +0 -80
- package/src/clients/k8s-client.ts +0 -497
- package/src/clients/llm-client.ts +0 -161
- package/src/clients/rest-client.ts +0 -130
- package/src/clients/service-discovery.ts +0 -38
- package/src/clients/terraform-client.ts +0 -482
- package/src/clients/tools-client.ts +0 -1843
- package/src/clients/ws-client.ts +0 -115
- package/src/commands/alias.ts +0 -100
- package/src/commands/analyze/index.ts +0 -352
- package/src/commands/apply/helm.ts +0 -473
- package/src/commands/apply/index.ts +0 -213
- package/src/commands/apply/k8s.ts +0 -454
- package/src/commands/apply/terraform.ts +0 -582
- package/src/commands/ask.ts +0 -167
- package/src/commands/audit/index.ts +0 -357
- package/src/commands/auth-cloud.ts +0 -407
- package/src/commands/auth-list.ts +0 -134
- package/src/commands/auth-profile.ts +0 -121
- package/src/commands/auth-refresh.ts +0 -187
- package/src/commands/auth-status.ts +0 -141
- package/src/commands/aws/ec2.ts +0 -501
- package/src/commands/aws/iam.ts +0 -397
- package/src/commands/aws/index.ts +0 -133
- package/src/commands/aws/lambda.ts +0 -396
- package/src/commands/aws/rds.ts +0 -439
- package/src/commands/aws/s3.ts +0 -439
- package/src/commands/aws/vpc.ts +0 -393
- package/src/commands/aws-discover.ts +0 -542
- package/src/commands/aws-terraform.ts +0 -755
- package/src/commands/azure/aks.ts +0 -376
- package/src/commands/azure/functions.ts +0 -253
- package/src/commands/azure/index.ts +0 -116
- package/src/commands/azure/storage.ts +0 -478
- package/src/commands/azure/vm.ts +0 -355
- package/src/commands/billing/index.ts +0 -256
- package/src/commands/chat.ts +0 -320
- package/src/commands/completions.ts +0 -268
- package/src/commands/config.ts +0 -372
- package/src/commands/cost/cloud-cost-estimator.ts +0 -266
- package/src/commands/cost/estimator.ts +0 -79
- package/src/commands/cost/index.ts +0 -810
- package/src/commands/cost/parsers/terraform.ts +0 -273
- package/src/commands/cost/parsers/types.ts +0 -25
- package/src/commands/cost/pricing/aws.ts +0 -544
- package/src/commands/cost/pricing/azure.ts +0 -499
- package/src/commands/cost/pricing/gcp.ts +0 -396
- package/src/commands/cost/pricing/index.ts +0 -40
- package/src/commands/demo.ts +0 -250
- package/src/commands/deploy.ts +0 -260
- package/src/commands/doctor.ts +0 -1386
- package/src/commands/drift/index.ts +0 -787
- package/src/commands/explain.ts +0 -277
- package/src/commands/export.ts +0 -146
- package/src/commands/feedback.ts +0 -389
- package/src/commands/fix.ts +0 -324
- package/src/commands/fs/index.ts +0 -402
- package/src/commands/gcp/compute.ts +0 -325
- package/src/commands/gcp/functions.ts +0 -271
- package/src/commands/gcp/gke.ts +0 -438
- package/src/commands/gcp/iam.ts +0 -344
- package/src/commands/gcp/index.ts +0 -129
- package/src/commands/gcp/storage.ts +0 -284
- package/src/commands/generate-helm.ts +0 -1249
- package/src/commands/generate-k8s.ts +0 -1508
- package/src/commands/generate-terraform.ts +0 -1202
- package/src/commands/gh/index.ts +0 -863
- package/src/commands/git/index.ts +0 -1343
- package/src/commands/helm/index.ts +0 -1126
- package/src/commands/help.ts +0 -715
- package/src/commands/history.ts +0 -149
- package/src/commands/import.ts +0 -868
- package/src/commands/incident.ts +0 -166
- package/src/commands/index.ts +0 -367
- package/src/commands/init.ts +0 -1051
- package/src/commands/k8s/index.ts +0 -1137
- package/src/commands/login.ts +0 -716
- package/src/commands/logout.ts +0 -83
- package/src/commands/logs.ts +0 -167
- package/src/commands/onboarding.ts +0 -405
- package/src/commands/pipeline.ts +0 -186
- package/src/commands/plan/display.ts +0 -279
- package/src/commands/plan/index.ts +0 -599
- package/src/commands/plugin.ts +0 -398
- package/src/commands/preview.ts +0 -452
- package/src/commands/profile.ts +0 -342
- package/src/commands/questionnaire.ts +0 -1172
- package/src/commands/resume.ts +0 -47
- package/src/commands/rollback.ts +0 -315
- package/src/commands/rollout.ts +0 -88
- package/src/commands/runbook.ts +0 -346
- package/src/commands/schedule.ts +0 -236
- package/src/commands/status.ts +0 -252
- package/src/commands/team/index.ts +0 -346
- package/src/commands/team-context.ts +0 -220
- package/src/commands/template.ts +0 -233
- package/src/commands/tf/index.ts +0 -1093
- package/src/commands/upgrade.ts +0 -607
- package/src/commands/usage/index.ts +0 -134
- package/src/commands/version.ts +0 -174
- package/src/commands/watch.ts +0 -153
- package/src/compat/index.ts +0 -2
- package/src/compat/runtime.ts +0 -12
- package/src/compat/sqlite.ts +0 -177
- package/src/config/index.ts +0 -17
- package/src/config/manager.ts +0 -530
- package/src/config/mode-store.ts +0 -62
- package/src/config/profiles.ts +0 -84
- package/src/config/safety-policy.ts +0 -358
- package/src/config/schema.ts +0 -125
- package/src/config/types.ts +0 -609
- package/src/config/workspace-state.ts +0 -53
- package/src/context/context-db.ts +0 -199
- package/src/demo/index.ts +0 -349
- package/src/demo/scenarios/full-journey.ts +0 -229
- package/src/demo/scenarios/getting-started.ts +0 -127
- package/src/demo/scenarios/helm-release.ts +0 -341
- package/src/demo/scenarios/k8s-deployment.ts +0 -194
- package/src/demo/scenarios/terraform-vpc.ts +0 -170
- package/src/demo/types.ts +0 -92
- package/src/engine/cost-estimator.ts +0 -480
- package/src/engine/diagram-generator.ts +0 -256
- package/src/engine/drift-detector.ts +0 -902
- package/src/engine/executor.ts +0 -1066
- package/src/engine/index.ts +0 -76
- package/src/engine/orchestrator.ts +0 -636
- package/src/engine/planner.ts +0 -787
- package/src/engine/safety.ts +0 -743
- package/src/engine/verifier.ts +0 -770
- package/src/enterprise/audit.ts +0 -348
- package/src/enterprise/auth.ts +0 -270
- package/src/enterprise/billing.ts +0 -822
- package/src/enterprise/index.ts +0 -17
- package/src/enterprise/teams.ts +0 -443
- package/src/generator/best-practices.ts +0 -1608
- package/src/generator/helm.ts +0 -630
- package/src/generator/index.ts +0 -37
- package/src/generator/intent-parser.ts +0 -514
- package/src/generator/kubernetes.ts +0 -976
- package/src/generator/terraform.ts +0 -1875
- package/src/history/index.ts +0 -8
- package/src/history/manager.ts +0 -250
- package/src/history/types.ts +0 -34
- package/src/hooks/config.ts +0 -432
- package/src/hooks/engine.ts +0 -392
- package/src/hooks/index.ts +0 -4
- package/src/llm/auth-bridge.ts +0 -198
- package/src/llm/circuit-breaker.ts +0 -140
- package/src/llm/config-loader.ts +0 -201
- package/src/llm/cost-calculator.ts +0 -171
- package/src/llm/index.ts +0 -8
- package/src/llm/model-aliases.ts +0 -115
- package/src/llm/provider-registry.ts +0 -63
- package/src/llm/providers/anthropic.ts +0 -462
- package/src/llm/providers/bedrock.ts +0 -477
- package/src/llm/providers/google.ts +0 -405
- package/src/llm/providers/ollama.ts +0 -767
- package/src/llm/providers/openai-compatible.ts +0 -340
- package/src/llm/providers/openai.ts +0 -328
- package/src/llm/providers/openrouter.ts +0 -338
- package/src/llm/router.ts +0 -1104
- package/src/llm/types.ts +0 -232
- package/src/lsp/client.ts +0 -298
- package/src/lsp/languages.ts +0 -119
- package/src/lsp/manager.ts +0 -294
- package/src/mcp/client.ts +0 -402
- package/src/mcp/index.ts +0 -5
- package/src/mcp/manager.ts +0 -133
- package/src/nimbus.ts +0 -233
- package/src/plugins/index.ts +0 -27
- package/src/plugins/loader.ts +0 -334
- package/src/plugins/manager.ts +0 -376
- package/src/plugins/types.ts +0 -284
- package/src/scanners/cicd-scanner.ts +0 -258
- package/src/scanners/cloud-scanner.ts +0 -466
- package/src/scanners/framework-scanner.ts +0 -469
- package/src/scanners/iac-scanner.ts +0 -388
- package/src/scanners/index.ts +0 -539
- package/src/scanners/language-scanner.ts +0 -276
- package/src/scanners/package-manager-scanner.ts +0 -277
- package/src/scanners/types.ts +0 -172
- package/src/sessions/manager.ts +0 -472
- package/src/sessions/types.ts +0 -44
- package/src/sharing/sync.ts +0 -300
- package/src/sharing/viewer.ts +0 -163
- package/src/snapshots/index.ts +0 -2
- package/src/snapshots/manager.ts +0 -530
- package/src/state/artifacts.ts +0 -147
- package/src/state/audit.ts +0 -137
- package/src/state/billing.ts +0 -240
- package/src/state/checkpoints.ts +0 -117
- package/src/state/config.ts +0 -67
- package/src/state/conversations.ts +0 -14
- package/src/state/credentials.ts +0 -154
- package/src/state/db.ts +0 -58
- package/src/state/index.ts +0 -26
- package/src/state/messages.ts +0 -115
- package/src/state/projects.ts +0 -123
- package/src/state/schema.ts +0 -236
- package/src/state/sessions.ts +0 -147
- package/src/state/teams.ts +0 -200
- package/src/telemetry.ts +0 -108
- package/src/tools/aws-ops.ts +0 -952
- package/src/tools/azure-ops.ts +0 -579
- package/src/tools/file-ops.ts +0 -615
- package/src/tools/gcp-ops.ts +0 -625
- package/src/tools/git-ops.ts +0 -773
- package/src/tools/github-ops.ts +0 -799
- package/src/tools/helm-ops.ts +0 -943
- package/src/tools/index.ts +0 -17
- package/src/tools/k8s-ops.ts +0 -819
- package/src/tools/schemas/converter.ts +0 -184
- package/src/tools/schemas/devops.ts +0 -3502
- package/src/tools/schemas/index.ts +0 -73
- package/src/tools/schemas/standard.ts +0 -1148
- package/src/tools/schemas/types.ts +0 -735
- package/src/tools/spawn-exec.ts +0 -148
- package/src/tools/terraform-ops.ts +0 -862
- package/src/types/ambient.d.ts +0 -193
- package/src/types/config.ts +0 -83
- package/src/types/drift.ts +0 -116
- package/src/types/enterprise.ts +0 -335
- package/src/types/index.ts +0 -20
- package/src/types/plan.ts +0 -44
- package/src/types/request.ts +0 -65
- package/src/types/response.ts +0 -54
- package/src/types/service.ts +0 -51
- package/src/ui/App.tsx +0 -2114
- package/src/ui/DeployPreview.tsx +0 -174
- package/src/ui/FileDiffModal.tsx +0 -162
- package/src/ui/Header.tsx +0 -131
- package/src/ui/HelpModal.tsx +0 -57
- package/src/ui/InputBox.tsx +0 -503
- package/src/ui/MessageList.tsx +0 -1032
- package/src/ui/PermissionPrompt.tsx +0 -163
- package/src/ui/StatusBar.tsx +0 -277
- package/src/ui/TerminalPane.tsx +0 -84
- package/src/ui/ToolCallDisplay.tsx +0 -643
- package/src/ui/TreePane.tsx +0 -132
- package/src/ui/chat-ui.ts +0 -850
- package/src/ui/index.ts +0 -33
- package/src/ui/ink/index.ts +0 -1444
- package/src/ui/streaming.ts +0 -176
- package/src/ui/theme.ts +0 -104
- package/src/ui/types.ts +0 -75
- package/src/utils/analytics.ts +0 -72
- package/src/utils/cost-warning.ts +0 -27
- package/src/utils/env.ts +0 -46
- package/src/utils/errors.ts +0 -69
- package/src/utils/event-bus.ts +0 -38
- package/src/utils/index.ts +0 -24
- package/src/utils/logger.ts +0 -171
- package/src/utils/rate-limiter.ts +0 -121
- package/src/utils/service-auth.ts +0 -49
- package/src/utils/validation.ts +0 -53
- package/src/version.ts +0 -4
- package/src/watcher/index.ts +0 -214
- package/src/wizard/approval.ts +0 -383
- package/src/wizard/index.ts +0 -25
- package/src/wizard/prompts.ts +0 -338
- package/src/wizard/types.ts +0 -172
- package/src/wizard/ui.ts +0 -556
- package/src/wizard/wizard.ts +0 -304
- package/tsconfig.json +0 -24
|
@@ -1,187 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Auth Refresh Command
|
|
3
|
-
*
|
|
4
|
-
* Re-validate and refresh cloud provider credentials:
|
|
5
|
-
* - AWS: re-run SSO login or warn about expired temporary credentials
|
|
6
|
-
* - GCP: re-run gcloud auth application-default login
|
|
7
|
-
* - Azure: re-run az login
|
|
8
|
-
*
|
|
9
|
-
* Usage: nimbus auth-refresh [--provider aws|gcp|azure]
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
import { ui } from '../wizard';
|
|
13
|
-
import { exec } from 'node:child_process';
|
|
14
|
-
import { promisify } from 'node:util';
|
|
15
|
-
|
|
16
|
-
const execAsync = promisify(exec);
|
|
17
|
-
|
|
18
|
-
export interface AuthRefreshOptions {
|
|
19
|
-
provider?: 'aws' | 'gcp' | 'azure' | 'all';
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
/** Check if AWS credentials are valid and not expired */
|
|
23
|
-
async function checkAWSCredentials(): Promise<{ valid: boolean; message: string; sso: boolean }> {
|
|
24
|
-
try {
|
|
25
|
-
const { stdout } = await execAsync('aws sts get-caller-identity --output json', {
|
|
26
|
-
timeout: 10_000,
|
|
27
|
-
});
|
|
28
|
-
const identity = JSON.parse(stdout);
|
|
29
|
-
const isSso = identity.UserId?.includes(':') || false;
|
|
30
|
-
return {
|
|
31
|
-
valid: true,
|
|
32
|
-
message: `Account: ${identity.Account} | User: ${identity.UserId}`,
|
|
33
|
-
sso: isSso,
|
|
34
|
-
};
|
|
35
|
-
} catch (e: any) {
|
|
36
|
-
const msg = e.message || String(e);
|
|
37
|
-
const isExpired =
|
|
38
|
-
msg.includes('ExpiredToken') || msg.includes('expired') || msg.includes('token');
|
|
39
|
-
return { valid: false, message: isExpired ? 'Token expired' : msg, sso: false };
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/** Refresh AWS SSO credentials */
|
|
44
|
-
async function refreshAWS(options: AuthRefreshOptions): Promise<void> {
|
|
45
|
-
ui.header('AWS Credentials');
|
|
46
|
-
|
|
47
|
-
const check = await checkAWSCredentials();
|
|
48
|
-
|
|
49
|
-
if (check.valid) {
|
|
50
|
-
ui.success(`Credentials valid: ${check.message}`);
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
ui.warning(`Credentials invalid: ${check.message}`);
|
|
55
|
-
|
|
56
|
-
// G18: Guide user through AWS SSO login if SSO profile detected
|
|
57
|
-
const awsSsoProfile = process.env.AWS_PROFILE;
|
|
58
|
-
if (awsSsoProfile) {
|
|
59
|
-
ui.info(`AWS SSO profile detected: ${awsSsoProfile}`);
|
|
60
|
-
ui.info(`Run in another terminal: aws sso login --profile ${awsSsoProfile}`);
|
|
61
|
-
ui.info('Then press Enter here to retry...');
|
|
62
|
-
// Wait for user to press Enter
|
|
63
|
-
await new Promise<void>(resolve => {
|
|
64
|
-
const readline = require('readline') as typeof import('readline');
|
|
65
|
-
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
66
|
-
rl.question('', () => { rl.close(); resolve(); });
|
|
67
|
-
});
|
|
68
|
-
// Retry the credentials check
|
|
69
|
-
try {
|
|
70
|
-
const { execFileSync } = await import('node:child_process');
|
|
71
|
-
execFileSync('aws', ['sts', 'get-caller-identity'], {
|
|
72
|
-
encoding: 'utf-8', timeout: 8000, stdio: ['pipe', 'pipe', 'pipe'],
|
|
73
|
-
});
|
|
74
|
-
ui.success('AWS credentials refreshed successfully.');
|
|
75
|
-
return;
|
|
76
|
-
} catch {
|
|
77
|
-
ui.warning('AWS credentials still invalid. You may need to re-run aws sso login.');
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
// Determine refresh method
|
|
82
|
-
try {
|
|
83
|
-
// Check if SSO is configured
|
|
84
|
-
const { stdout: ssoCheck } = await execAsync(
|
|
85
|
-
'aws configure list-profiles 2>/dev/null || echo ""',
|
|
86
|
-
{ timeout: 5000 }
|
|
87
|
-
);
|
|
88
|
-
const profiles = ssoCheck.trim().split('\n').filter(Boolean);
|
|
89
|
-
|
|
90
|
-
if (profiles.length > 0) {
|
|
91
|
-
ui.info('Refreshing AWS SSO credentials...');
|
|
92
|
-
ui.info(`Run: aws sso login --profile ${profiles[0]}`);
|
|
93
|
-
ui.info('Or set a new profile: aws configure sso');
|
|
94
|
-
} else {
|
|
95
|
-
ui.info('To refresh AWS credentials:');
|
|
96
|
-
ui.info(' 1. aws configure (for long-term credentials)');
|
|
97
|
-
ui.info(' 2. aws sso configure (for SSO)');
|
|
98
|
-
ui.info(' 3. aws sts assume-role (for role assumption)');
|
|
99
|
-
}
|
|
100
|
-
} catch {
|
|
101
|
-
ui.info('To configure AWS credentials: aws configure');
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
/** Refresh GCP credentials */
|
|
106
|
-
async function refreshGCP(_options: AuthRefreshOptions): Promise<void> {
|
|
107
|
-
ui.header('GCP Credentials');
|
|
108
|
-
|
|
109
|
-
try {
|
|
110
|
-
const { stdout } = await execAsync('gcloud auth print-access-token 2>/dev/null', {
|
|
111
|
-
timeout: 5000,
|
|
112
|
-
});
|
|
113
|
-
if (stdout.trim().length > 10) {
|
|
114
|
-
try {
|
|
115
|
-
const { stdout: proj } = await execAsync('gcloud config get-value project 2>/dev/null', {
|
|
116
|
-
timeout: 3000,
|
|
117
|
-
});
|
|
118
|
-
ui.success(`Credentials valid. Project: ${proj.trim() || '(not set)'}`);
|
|
119
|
-
return;
|
|
120
|
-
} catch {
|
|
121
|
-
ui.success('Credentials valid');
|
|
122
|
-
return;
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
} catch {
|
|
126
|
-
// Not valid
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
ui.warning('GCP credentials expired or not configured');
|
|
130
|
-
ui.info('To refresh: gcloud auth application-default login');
|
|
131
|
-
ui.info('For service accounts: gcloud auth activate-service-account --key-file=SA_KEY.json');
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
/** Refresh Azure credentials */
|
|
135
|
-
async function refreshAzure(_options: AuthRefreshOptions): Promise<void> {
|
|
136
|
-
ui.header('Azure Credentials');
|
|
137
|
-
|
|
138
|
-
try {
|
|
139
|
-
const { stdout } = await execAsync('az account show --output json 2>/dev/null', {
|
|
140
|
-
timeout: 10_000,
|
|
141
|
-
});
|
|
142
|
-
const account = JSON.parse(stdout);
|
|
143
|
-
ui.success(
|
|
144
|
-
`Credentials valid. Subscription: ${account.name || account.id} (${account.state})`
|
|
145
|
-
);
|
|
146
|
-
if (account.state !== 'Enabled') {
|
|
147
|
-
ui.warning('Subscription is not in Enabled state');
|
|
148
|
-
}
|
|
149
|
-
return;
|
|
150
|
-
} catch {
|
|
151
|
-
// Not valid
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
ui.warning('Azure credentials expired or not configured');
|
|
155
|
-
ui.info('To refresh: az login');
|
|
156
|
-
ui.info('For service principals: az login --service-principal -u CLIENT_ID -p CLIENT_SECRET --tenant TENANT_ID');
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
/**
|
|
160
|
-
* Run the auth-refresh command
|
|
161
|
-
*/
|
|
162
|
-
export async function authRefreshCommand(options: AuthRefreshOptions = {}): Promise<void> {
|
|
163
|
-
const provider = options.provider ?? 'all';
|
|
164
|
-
|
|
165
|
-
ui.header('Nimbus Auth Refresh');
|
|
166
|
-
ui.info('Checking and refreshing cloud provider credentials...');
|
|
167
|
-
ui.newLine();
|
|
168
|
-
|
|
169
|
-
if (provider === 'all' || provider === 'aws') {
|
|
170
|
-
await refreshAWS(options);
|
|
171
|
-
ui.newLine();
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
if (provider === 'all' || provider === 'gcp') {
|
|
175
|
-
await refreshGCP(options);
|
|
176
|
-
ui.newLine();
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
if (provider === 'all' || provider === 'azure') {
|
|
180
|
-
await refreshAzure(options);
|
|
181
|
-
ui.newLine();
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
ui.info('Tip: Run "nimbus doctor" for a full system check');
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
export default authRefreshCommand;
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Auth Status Command
|
|
3
|
-
*
|
|
4
|
-
* Display current authentication status
|
|
5
|
-
*
|
|
6
|
-
* Usage: nimbus auth status
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import { logger } from '../utils';
|
|
10
|
-
import { ui } from '../wizard';
|
|
11
|
-
import { authStore, AuthStore, getProviderInfo } from '../auth';
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Command options
|
|
15
|
-
*/
|
|
16
|
-
export interface AuthStatusOptions {
|
|
17
|
-
json?: boolean;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Run the auth status command
|
|
22
|
-
*/
|
|
23
|
-
export async function authStatusCommand(options: AuthStatusOptions = {}): Promise<void> {
|
|
24
|
-
logger.info('Checking auth status');
|
|
25
|
-
|
|
26
|
-
const status = authStore.getStatus();
|
|
27
|
-
|
|
28
|
-
// JSON output mode
|
|
29
|
-
if (options.json) {
|
|
30
|
-
// Build safe JSON output (no raw API keys)
|
|
31
|
-
const safeOutput = {
|
|
32
|
-
isConfigured: status.isConfigured,
|
|
33
|
-
identity: status.identity
|
|
34
|
-
? {
|
|
35
|
-
provider: status.identity.provider,
|
|
36
|
-
username: status.identity.username,
|
|
37
|
-
name: status.identity.name,
|
|
38
|
-
authenticatedAt: status.identity.authenticatedAt,
|
|
39
|
-
}
|
|
40
|
-
: null,
|
|
41
|
-
providers: status.providers.map(p => ({
|
|
42
|
-
name: p.name,
|
|
43
|
-
model: p.model,
|
|
44
|
-
isDefault: p.isDefault,
|
|
45
|
-
validatedAt: p.validatedAt,
|
|
46
|
-
})),
|
|
47
|
-
defaultProvider: status.defaultProvider,
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
// Output sanitized JSON (no sensitive data included)
|
|
51
|
-
ui.print(JSON.stringify(safeOutput, null, 2));
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// Human-readable output
|
|
56
|
-
ui.newLine();
|
|
57
|
-
ui.section('Authentication Status');
|
|
58
|
-
|
|
59
|
-
// Overall status
|
|
60
|
-
if (status.isConfigured) {
|
|
61
|
-
ui.success('Nimbus is configured and ready to use');
|
|
62
|
-
} else {
|
|
63
|
-
ui.warning('Nimbus is not configured. Run `nimbus login` to get started.');
|
|
64
|
-
}
|
|
65
|
-
ui.newLine();
|
|
66
|
-
|
|
67
|
-
// Identity section
|
|
68
|
-
ui.print(ui.bold('Identity'));
|
|
69
|
-
|
|
70
|
-
if (status.identity) {
|
|
71
|
-
const identity = status.identity;
|
|
72
|
-
ui.print(` Provider: GitHub`);
|
|
73
|
-
ui.print(` Username: ${identity.username}`);
|
|
74
|
-
if (identity.name) {
|
|
75
|
-
ui.print(` Name: ${identity.name}`);
|
|
76
|
-
}
|
|
77
|
-
ui.print(` Signed in: ${formatDate(identity.authenticatedAt)}`);
|
|
78
|
-
} else {
|
|
79
|
-
ui.print(ui.dim(' Not signed in'));
|
|
80
|
-
ui.print(ui.dim(' Run `nimbus login` to sign in with GitHub'));
|
|
81
|
-
}
|
|
82
|
-
ui.newLine();
|
|
83
|
-
|
|
84
|
-
// Providers section
|
|
85
|
-
ui.print(ui.bold('LLM Providers'));
|
|
86
|
-
|
|
87
|
-
if (status.providers.length > 0) {
|
|
88
|
-
for (const provider of status.providers) {
|
|
89
|
-
const info = getProviderInfo(provider.name);
|
|
90
|
-
const defaultMarker = provider.isDefault ? ui.color(' (default)', 'green') : '';
|
|
91
|
-
|
|
92
|
-
ui.print(` ${info.displayName}${defaultMarker}`);
|
|
93
|
-
ui.print(` Model: ${provider.model}`);
|
|
94
|
-
|
|
95
|
-
// Get the actual credential to show masked key
|
|
96
|
-
const credential = authStore.getProvider(provider.name);
|
|
97
|
-
if (credential?.apiKey) {
|
|
98
|
-
ui.print(` API Key: ${AuthStore.maskApiKey(credential.apiKey)}`);
|
|
99
|
-
} else if (!info.requiresApiKey) {
|
|
100
|
-
ui.print(` API Key: ${ui.dim('(not required)')}`);
|
|
101
|
-
} else {
|
|
102
|
-
ui.print(` API Key: ${ui.dim('(from environment)')}`);
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
if (credential?.baseUrl) {
|
|
106
|
-
ui.print(` Base URL: ${credential.baseUrl}`);
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
if (provider.validatedAt) {
|
|
110
|
-
ui.print(` Validated: ${formatDate(provider.validatedAt)}`);
|
|
111
|
-
}
|
|
112
|
-
ui.newLine();
|
|
113
|
-
}
|
|
114
|
-
} else {
|
|
115
|
-
ui.print(ui.dim(' No providers configured'));
|
|
116
|
-
ui.print(ui.dim(' Run `nimbus login` to configure LLM providers'));
|
|
117
|
-
ui.newLine();
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
// Auth file location
|
|
121
|
-
ui.print(ui.dim(`Config: ${authStore.getAuthPath()}`));
|
|
122
|
-
ui.newLine();
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
* Format ISO date string for display
|
|
127
|
-
*/
|
|
128
|
-
function formatDate(isoString: string): string {
|
|
129
|
-
try {
|
|
130
|
-
const date = new Date(isoString);
|
|
131
|
-
// Check if date is valid (NaN check)
|
|
132
|
-
if (isNaN(date.getTime())) {
|
|
133
|
-
return isoString;
|
|
134
|
-
}
|
|
135
|
-
return date.toLocaleString();
|
|
136
|
-
} catch {
|
|
137
|
-
return isoString;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
export default authStatusCommand;
|