@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
package/src/wizard/approval.ts
DELETED
|
@@ -1,383 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Approval Workflow Component
|
|
3
|
-
*
|
|
4
|
-
* Displays approval prompts for risky operations
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import { ui } from './ui';
|
|
8
|
-
import { confirm, input } from './prompts';
|
|
9
|
-
import type { Risk, RiskSeverity } from '../config/safety-policy';
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Approval prompt configuration
|
|
13
|
-
*/
|
|
14
|
-
export interface ApprovalPromptConfig {
|
|
15
|
-
/** Title of the approval prompt */
|
|
16
|
-
title: string;
|
|
17
|
-
/** Operation being performed */
|
|
18
|
-
operation: string;
|
|
19
|
-
/** List of risks identified */
|
|
20
|
-
risks: Risk[];
|
|
21
|
-
/** Estimated cost if available */
|
|
22
|
-
estimatedCost?: number;
|
|
23
|
-
/** List of affected resources */
|
|
24
|
-
affectedResources?: string[];
|
|
25
|
-
/** Environment being modified */
|
|
26
|
-
environment?: string;
|
|
27
|
-
/** Require typing confirmation word */
|
|
28
|
-
requireConfirmation?: boolean;
|
|
29
|
-
/** Custom confirmation word */
|
|
30
|
-
confirmationWord?: string;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Approval result
|
|
35
|
-
*/
|
|
36
|
-
export interface ApprovalResult {
|
|
37
|
-
approved: boolean;
|
|
38
|
-
reason?: string;
|
|
39
|
-
approvedBy?: string;
|
|
40
|
-
timestamp: Date;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Display an approval prompt and return the result
|
|
45
|
-
*/
|
|
46
|
-
export async function promptForApproval(config: ApprovalPromptConfig): Promise<ApprovalResult> {
|
|
47
|
-
ui.newLine();
|
|
48
|
-
|
|
49
|
-
// Draw approval box
|
|
50
|
-
drawApprovalBox(config);
|
|
51
|
-
|
|
52
|
-
// Display risks
|
|
53
|
-
displayRisks(config.risks);
|
|
54
|
-
|
|
55
|
-
// Display affected resources if any
|
|
56
|
-
if (config.affectedResources && config.affectedResources.length > 0) {
|
|
57
|
-
displayAffectedResources(config.affectedResources);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// Display estimated cost if available
|
|
61
|
-
if (config.estimatedCost !== undefined) {
|
|
62
|
-
displayEstimatedCost(config.estimatedCost);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
ui.newLine();
|
|
66
|
-
|
|
67
|
-
// Require confirmation for critical operations
|
|
68
|
-
const hasCritical = config.risks.some(r => r.severity === 'critical');
|
|
69
|
-
const hasDestructive =
|
|
70
|
-
config.operation.toLowerCase().includes('destroy') ||
|
|
71
|
-
config.operation.toLowerCase().includes('delete');
|
|
72
|
-
|
|
73
|
-
if (hasCritical || hasDestructive || config.requireConfirmation) {
|
|
74
|
-
const confirmWord = config.confirmationWord || 'yes';
|
|
75
|
-
const userInput = await input({
|
|
76
|
-
message: `Type "${confirmWord}" to confirm:`,
|
|
77
|
-
defaultValue: '',
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
if (userInput.toLowerCase() !== confirmWord.toLowerCase()) {
|
|
81
|
-
ui.newLine();
|
|
82
|
-
ui.warning('Operation cancelled - confirmation word did not match');
|
|
83
|
-
return {
|
|
84
|
-
approved: false,
|
|
85
|
-
reason: 'Confirmation word mismatch',
|
|
86
|
-
timestamp: new Date(),
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
} else {
|
|
90
|
-
// Simple confirmation
|
|
91
|
-
const proceed = await confirm({
|
|
92
|
-
message: 'Do you want to proceed with this operation?',
|
|
93
|
-
defaultValue: false,
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
if (!proceed) {
|
|
97
|
-
ui.newLine();
|
|
98
|
-
ui.info('Operation cancelled by user');
|
|
99
|
-
return {
|
|
100
|
-
approved: false,
|
|
101
|
-
reason: 'User declined',
|
|
102
|
-
timestamp: new Date(),
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
ui.newLine();
|
|
108
|
-
ui.success('Operation approved');
|
|
109
|
-
|
|
110
|
-
return {
|
|
111
|
-
approved: true,
|
|
112
|
-
approvedBy: process.env.USER || 'unknown',
|
|
113
|
-
timestamp: new Date(),
|
|
114
|
-
};
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
/**
|
|
118
|
-
* Draw the approval box header
|
|
119
|
-
*/
|
|
120
|
-
function drawApprovalBox(config: ApprovalPromptConfig): void {
|
|
121
|
-
const width = 60;
|
|
122
|
-
const borderColor = getSeverityColor(getHighestSeverity(config.risks));
|
|
123
|
-
|
|
124
|
-
ui.print(ui.color(`╔${'═'.repeat(width - 2)}╗`, borderColor));
|
|
125
|
-
|
|
126
|
-
// Title
|
|
127
|
-
const titleLine = ` APPROVAL REQUIRED `;
|
|
128
|
-
const padding = Math.floor((width - 2 - titleLine.length) / 2);
|
|
129
|
-
ui.print(
|
|
130
|
-
ui.color('║', borderColor) +
|
|
131
|
-
' '.repeat(padding) +
|
|
132
|
-
ui.bold(ui.color(titleLine, 'yellow')) +
|
|
133
|
-
' '.repeat(width - 2 - padding - titleLine.length) +
|
|
134
|
-
ui.color('║', borderColor)
|
|
135
|
-
);
|
|
136
|
-
|
|
137
|
-
ui.print(ui.color(`╠${'═'.repeat(width - 2)}╣`, borderColor));
|
|
138
|
-
|
|
139
|
-
// Operation
|
|
140
|
-
const opLine = ` Operation: ${config.operation}`;
|
|
141
|
-
ui.print(ui.color('║', borderColor) + opLine.padEnd(width - 2) + ui.color('║', borderColor));
|
|
142
|
-
|
|
143
|
-
// Environment if available
|
|
144
|
-
if (config.environment) {
|
|
145
|
-
const envLine = ` Environment: ${config.environment}`;
|
|
146
|
-
ui.print(
|
|
147
|
-
ui.color('║', borderColor) +
|
|
148
|
-
ui.color(envLine.padEnd(width - 2), 'yellow') +
|
|
149
|
-
ui.color('║', borderColor)
|
|
150
|
-
);
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
ui.print(ui.color(`╚${'═'.repeat(width - 2)}╝`, borderColor));
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
/**
|
|
157
|
-
* Display the list of risks
|
|
158
|
-
*/
|
|
159
|
-
function displayRisks(risks: Risk[]): void {
|
|
160
|
-
if (risks.length === 0) {
|
|
161
|
-
return;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
ui.newLine();
|
|
165
|
-
ui.print(ui.bold(' Identified Risks:'));
|
|
166
|
-
ui.newLine();
|
|
167
|
-
|
|
168
|
-
// Sort by severity
|
|
169
|
-
const sortedRisks = [...risks].sort((a, b) => {
|
|
170
|
-
const order: Record<RiskSeverity, number> = { critical: 0, high: 1, medium: 2, low: 3 };
|
|
171
|
-
return order[a.severity] - order[b.severity];
|
|
172
|
-
});
|
|
173
|
-
|
|
174
|
-
for (const risk of sortedRisks) {
|
|
175
|
-
const icon = getSeverityIcon(risk.severity);
|
|
176
|
-
const color = getSeverityColor(risk.severity);
|
|
177
|
-
const label = `[${risk.severity.toUpperCase()}]`.padEnd(10);
|
|
178
|
-
|
|
179
|
-
ui.print(` ${icon} ${ui.color(label, color)} ${risk.message}`);
|
|
180
|
-
|
|
181
|
-
// Show details if available
|
|
182
|
-
if (risk.details) {
|
|
183
|
-
for (const [key, value] of Object.entries(risk.details)) {
|
|
184
|
-
ui.print(ui.dim(` ${key}: ${value}`));
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
/**
|
|
191
|
-
* Display affected resources
|
|
192
|
-
*/
|
|
193
|
-
function displayAffectedResources(resources: string[]): void {
|
|
194
|
-
ui.newLine();
|
|
195
|
-
ui.print(ui.bold(' Affected Resources:'));
|
|
196
|
-
ui.newLine();
|
|
197
|
-
|
|
198
|
-
const maxDisplay = 10;
|
|
199
|
-
const displayResources = resources.slice(0, maxDisplay);
|
|
200
|
-
|
|
201
|
-
for (const resource of displayResources) {
|
|
202
|
-
ui.print(` ${ui.color('•', 'cyan')} ${resource}`);
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
if (resources.length > maxDisplay) {
|
|
206
|
-
ui.print(ui.dim(` ... and ${resources.length - maxDisplay} more`));
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
/**
|
|
211
|
-
* Display estimated cost
|
|
212
|
-
*/
|
|
213
|
-
function displayEstimatedCost(cost: number): void {
|
|
214
|
-
ui.newLine();
|
|
215
|
-
ui.print(ui.bold(' Estimated Cost:'));
|
|
216
|
-
ui.newLine();
|
|
217
|
-
|
|
218
|
-
const costStr = `$${cost.toFixed(2)}/month`;
|
|
219
|
-
const color = cost > 1000 ? 'red' : cost > 500 ? 'yellow' : 'green';
|
|
220
|
-
ui.print(` ${ui.color(costStr, color)}`);
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
/**
|
|
224
|
-
* Get the highest severity from a list of risks
|
|
225
|
-
*/
|
|
226
|
-
function getHighestSeverity(risks: Risk[]): RiskSeverity {
|
|
227
|
-
const order: RiskSeverity[] = ['critical', 'high', 'medium', 'low'];
|
|
228
|
-
for (const severity of order) {
|
|
229
|
-
if (risks.some(r => r.severity === severity)) {
|
|
230
|
-
return severity;
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
return 'low';
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
/**
|
|
237
|
-
* Get icon for severity level
|
|
238
|
-
*/
|
|
239
|
-
function getSeverityIcon(severity: RiskSeverity): string {
|
|
240
|
-
switch (severity) {
|
|
241
|
-
case 'critical':
|
|
242
|
-
return '🔴';
|
|
243
|
-
case 'high':
|
|
244
|
-
return '🟠';
|
|
245
|
-
case 'medium':
|
|
246
|
-
return '🟡';
|
|
247
|
-
case 'low':
|
|
248
|
-
return '🔵';
|
|
249
|
-
default:
|
|
250
|
-
return '⚪';
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
/**
|
|
255
|
-
* Color type for UI
|
|
256
|
-
*/
|
|
257
|
-
type UIColor = 'red' | 'yellow' | 'cyan' | 'blue' | 'white' | 'green';
|
|
258
|
-
|
|
259
|
-
/**
|
|
260
|
-
* Get color for severity level
|
|
261
|
-
*/
|
|
262
|
-
function getSeverityColor(severity: RiskSeverity): UIColor {
|
|
263
|
-
switch (severity) {
|
|
264
|
-
case 'critical':
|
|
265
|
-
return 'red';
|
|
266
|
-
case 'high':
|
|
267
|
-
return 'yellow';
|
|
268
|
-
case 'medium':
|
|
269
|
-
return 'cyan';
|
|
270
|
-
case 'low':
|
|
271
|
-
return 'blue';
|
|
272
|
-
default:
|
|
273
|
-
return 'white';
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
/**
|
|
278
|
-
* Quick approval check without full prompt
|
|
279
|
-
* Returns true if the operation should proceed based on policy
|
|
280
|
-
*/
|
|
281
|
-
export function shouldAutoApprove(operation: string, risks: Risk[]): boolean {
|
|
282
|
-
// Never auto-approve if there are critical risks
|
|
283
|
-
if (risks.some(r => r.severity === 'critical')) {
|
|
284
|
-
return false;
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
// Never auto-approve destructive operations
|
|
288
|
-
if (['destroy', 'delete', 'terminate'].some(op => operation.toLowerCase().includes(op))) {
|
|
289
|
-
return false;
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
// Auto-approve if all risks are low severity
|
|
293
|
-
if (risks.every(r => r.severity === 'low')) {
|
|
294
|
-
return true;
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
return false;
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
/**
|
|
301
|
-
* Confirm a destructive operation by requiring the user to type the resource name.
|
|
302
|
-
* Returns true only if the typed name matches exactly.
|
|
303
|
-
*/
|
|
304
|
-
export async function confirmWithResourceName(
|
|
305
|
-
resourceName: string,
|
|
306
|
-
resourceType: string
|
|
307
|
-
): Promise<boolean> {
|
|
308
|
-
ui.newLine();
|
|
309
|
-
|
|
310
|
-
// Display warning box
|
|
311
|
-
const width = 60;
|
|
312
|
-
ui.print(ui.color(`╔${'═'.repeat(width - 2)}╗`, 'red'));
|
|
313
|
-
|
|
314
|
-
const titleLine = ' DESTRUCTIVE OPERATION ';
|
|
315
|
-
const padding = Math.floor((width - 2 - titleLine.length) / 2);
|
|
316
|
-
ui.print(
|
|
317
|
-
ui.color('║', 'red') +
|
|
318
|
-
' '.repeat(padding) +
|
|
319
|
-
ui.bold(ui.color(titleLine, 'yellow')) +
|
|
320
|
-
' '.repeat(width - 2 - padding - titleLine.length) +
|
|
321
|
-
ui.color('║', 'red')
|
|
322
|
-
);
|
|
323
|
-
|
|
324
|
-
ui.print(ui.color(`╠${'═'.repeat(width - 2)}╣`, 'red'));
|
|
325
|
-
|
|
326
|
-
const typeLine = ` Resource type: ${resourceType}`;
|
|
327
|
-
ui.print(ui.color('║', 'red') + typeLine.padEnd(width - 2) + ui.color('║', 'red'));
|
|
328
|
-
|
|
329
|
-
const nameLine = ` Resource name: ${resourceName}`;
|
|
330
|
-
ui.print(
|
|
331
|
-
ui.color('║', 'red') + ui.color(nameLine.padEnd(width - 2), 'yellow') + ui.color('║', 'red')
|
|
332
|
-
);
|
|
333
|
-
|
|
334
|
-
const warnLine = ' This action CANNOT be undone.';
|
|
335
|
-
ui.print(
|
|
336
|
-
ui.color('║', 'red') + ui.color(warnLine.padEnd(width - 2), 'red') + ui.color('║', 'red')
|
|
337
|
-
);
|
|
338
|
-
|
|
339
|
-
ui.print(ui.color(`╚${'═'.repeat(width - 2)}╝`, 'red'));
|
|
340
|
-
ui.newLine();
|
|
341
|
-
|
|
342
|
-
const userInput = await input({
|
|
343
|
-
message: `Type '${resourceName}' to confirm deletion:`,
|
|
344
|
-
defaultValue: '',
|
|
345
|
-
});
|
|
346
|
-
|
|
347
|
-
if (userInput !== resourceName) {
|
|
348
|
-
ui.newLine();
|
|
349
|
-
ui.warning('Operation cancelled - resource name did not match');
|
|
350
|
-
return false;
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
ui.newLine();
|
|
354
|
-
ui.success('Deletion confirmed');
|
|
355
|
-
return true;
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
/**
|
|
359
|
-
* Display a safety summary without approval prompt
|
|
360
|
-
*/
|
|
361
|
-
export function displaySafetySummary(config: {
|
|
362
|
-
operation: string;
|
|
363
|
-
risks: Risk[];
|
|
364
|
-
passed: boolean;
|
|
365
|
-
}): void {
|
|
366
|
-
if (config.risks.length === 0) {
|
|
367
|
-
ui.success(`Safety check passed for: ${config.operation}`);
|
|
368
|
-
return;
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
ui.newLine();
|
|
372
|
-
ui.print(ui.bold(' Safety Check Summary:'));
|
|
373
|
-
ui.newLine();
|
|
374
|
-
|
|
375
|
-
displayRisks(config.risks);
|
|
376
|
-
|
|
377
|
-
ui.newLine();
|
|
378
|
-
if (config.passed) {
|
|
379
|
-
ui.success('All safety checks passed');
|
|
380
|
-
} else {
|
|
381
|
-
ui.error('Safety checks failed - operation blocked');
|
|
382
|
-
}
|
|
383
|
-
}
|
package/src/wizard/index.ts
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Interactive Wizard Framework
|
|
3
|
-
*
|
|
4
|
-
* Exports all wizard-related functionality
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
// Types
|
|
8
|
-
export * from './types';
|
|
9
|
-
|
|
10
|
-
// UI utilities
|
|
11
|
-
export { WizardUI, ui } from './ui';
|
|
12
|
-
|
|
13
|
-
// Prompt utilities
|
|
14
|
-
export {
|
|
15
|
-
select,
|
|
16
|
-
multiSelect,
|
|
17
|
-
confirm,
|
|
18
|
-
input,
|
|
19
|
-
pathInput,
|
|
20
|
-
pressEnter,
|
|
21
|
-
actionSelect,
|
|
22
|
-
} from './prompts';
|
|
23
|
-
|
|
24
|
-
// Wizard framework
|
|
25
|
-
export { Wizard, createWizard, stepBuilders, type WizardConfig, type WizardResult } from './wizard';
|