@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,199 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Context Database
|
|
3
|
-
*
|
|
4
|
-
* Lightweight SQLite wrapper for .nimbus/context.db that stores:
|
|
5
|
-
* - Recent commands and their results
|
|
6
|
-
* - File change tracking for project context
|
|
7
|
-
* - AI conversation context across sessions
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import { Database } from '../compat/sqlite';
|
|
11
|
-
import * as path from 'path';
|
|
12
|
-
import * as fs from 'fs';
|
|
13
|
-
|
|
14
|
-
const CONTEXT_DB_NAME = 'context.db';
|
|
15
|
-
|
|
16
|
-
const SCHEMA = `
|
|
17
|
-
CREATE TABLE IF NOT EXISTS command_history (
|
|
18
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
19
|
-
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
20
|
-
command TEXT NOT NULL,
|
|
21
|
-
args TEXT,
|
|
22
|
-
status TEXT NOT NULL DEFAULT 'success',
|
|
23
|
-
duration_ms INTEGER,
|
|
24
|
-
output_summary TEXT
|
|
25
|
-
);
|
|
26
|
-
|
|
27
|
-
CREATE TABLE IF NOT EXISTS file_changes (
|
|
28
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
29
|
-
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
30
|
-
file_path TEXT NOT NULL,
|
|
31
|
-
change_type TEXT NOT NULL,
|
|
32
|
-
content_hash TEXT,
|
|
33
|
-
metadata TEXT
|
|
34
|
-
);
|
|
35
|
-
|
|
36
|
-
CREATE TABLE IF NOT EXISTS conversation_context (
|
|
37
|
-
id TEXT PRIMARY KEY,
|
|
38
|
-
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
39
|
-
title TEXT,
|
|
40
|
-
messages TEXT NOT NULL,
|
|
41
|
-
model TEXT,
|
|
42
|
-
token_count INTEGER,
|
|
43
|
-
metadata TEXT
|
|
44
|
-
);
|
|
45
|
-
|
|
46
|
-
CREATE INDEX IF NOT EXISTS idx_cmd_history_ts ON command_history(timestamp);
|
|
47
|
-
CREATE INDEX IF NOT EXISTS idx_file_changes_path ON file_changes(file_path);
|
|
48
|
-
CREATE INDEX IF NOT EXISTS idx_file_changes_ts ON file_changes(timestamp);
|
|
49
|
-
CREATE INDEX IF NOT EXISTS idx_conversation_ts ON conversation_context(timestamp);
|
|
50
|
-
`;
|
|
51
|
-
|
|
52
|
-
export class ContextDatabase {
|
|
53
|
-
private db: Database;
|
|
54
|
-
private dbPath: string;
|
|
55
|
-
|
|
56
|
-
constructor(projectDir: string) {
|
|
57
|
-
const nimbusDir = path.join(projectDir, '.nimbus');
|
|
58
|
-
this.dbPath = path.join(nimbusDir, CONTEXT_DB_NAME);
|
|
59
|
-
|
|
60
|
-
if (!fs.existsSync(nimbusDir)) {
|
|
61
|
-
fs.mkdirSync(nimbusDir, { recursive: true });
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
this.db = new Database(this.dbPath);
|
|
65
|
-
this.db.exec(SCHEMA);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
recordCommand(
|
|
69
|
-
command: string,
|
|
70
|
-
args?: string,
|
|
71
|
-
status: string = 'success',
|
|
72
|
-
durationMs?: number,
|
|
73
|
-
outputSummary?: string
|
|
74
|
-
): void {
|
|
75
|
-
const stmt = this.db.prepare(`
|
|
76
|
-
INSERT INTO command_history (command, args, status, duration_ms, output_summary)
|
|
77
|
-
VALUES (?, ?, ?, ?, ?)
|
|
78
|
-
`);
|
|
79
|
-
stmt.run(command, args || null, status, durationMs || null, outputSummary || null);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
getRecentCommands(limit: number = 20): Array<{
|
|
83
|
-
id: number;
|
|
84
|
-
timestamp: string;
|
|
85
|
-
command: string;
|
|
86
|
-
args: string | null;
|
|
87
|
-
status: string;
|
|
88
|
-
durationMs: number | null;
|
|
89
|
-
}> {
|
|
90
|
-
const stmt = this.db.prepare(`
|
|
91
|
-
SELECT * FROM command_history ORDER BY timestamp DESC LIMIT ?
|
|
92
|
-
`);
|
|
93
|
-
return (stmt.all(limit) as any[]).map(row => ({
|
|
94
|
-
id: row.id,
|
|
95
|
-
timestamp: row.timestamp,
|
|
96
|
-
command: row.command,
|
|
97
|
-
args: row.args,
|
|
98
|
-
status: row.status,
|
|
99
|
-
durationMs: row.duration_ms,
|
|
100
|
-
}));
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
trackFileChange(
|
|
104
|
-
filePath: string,
|
|
105
|
-
changeType: 'created' | 'modified' | 'deleted',
|
|
106
|
-
contentHash?: string,
|
|
107
|
-
metadata?: Record<string, unknown>
|
|
108
|
-
): void {
|
|
109
|
-
const stmt = this.db.prepare(`
|
|
110
|
-
INSERT INTO file_changes (file_path, change_type, content_hash, metadata)
|
|
111
|
-
VALUES (?, ?, ?, ?)
|
|
112
|
-
`);
|
|
113
|
-
stmt.run(filePath, changeType, contentHash || null, metadata ? JSON.stringify(metadata) : null);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
getRecentFileChanges(limit: number = 50): Array<{
|
|
117
|
-
filePath: string;
|
|
118
|
-
changeType: string;
|
|
119
|
-
timestamp: string;
|
|
120
|
-
}> {
|
|
121
|
-
const stmt = this.db.prepare(`
|
|
122
|
-
SELECT * FROM file_changes ORDER BY timestamp DESC LIMIT ?
|
|
123
|
-
`);
|
|
124
|
-
return (stmt.all(limit) as any[]).map(row => ({
|
|
125
|
-
filePath: row.file_path,
|
|
126
|
-
changeType: row.change_type,
|
|
127
|
-
timestamp: row.timestamp,
|
|
128
|
-
}));
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
saveConversation(
|
|
132
|
-
id: string,
|
|
133
|
-
title: string,
|
|
134
|
-
messages: unknown[],
|
|
135
|
-
model?: string,
|
|
136
|
-
tokenCount?: number,
|
|
137
|
-
metadata?: Record<string, unknown>
|
|
138
|
-
): void {
|
|
139
|
-
const stmt = this.db.prepare(`
|
|
140
|
-
INSERT OR REPLACE INTO conversation_context (id, title, messages, model, token_count, metadata)
|
|
141
|
-
VALUES (?, ?, ?, ?, ?, ?)
|
|
142
|
-
`);
|
|
143
|
-
stmt.run(
|
|
144
|
-
id,
|
|
145
|
-
title,
|
|
146
|
-
JSON.stringify(messages),
|
|
147
|
-
model || null,
|
|
148
|
-
tokenCount || null,
|
|
149
|
-
metadata ? JSON.stringify(metadata) : null
|
|
150
|
-
);
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
getConversation(id: string): {
|
|
154
|
-
id: string;
|
|
155
|
-
title: string;
|
|
156
|
-
messages: unknown[];
|
|
157
|
-
model: string | null;
|
|
158
|
-
tokenCount: number | null;
|
|
159
|
-
} | null {
|
|
160
|
-
const stmt = this.db.prepare('SELECT * FROM conversation_context WHERE id = ?');
|
|
161
|
-
const row: any = stmt.get(id);
|
|
162
|
-
if (!row) {
|
|
163
|
-
return null;
|
|
164
|
-
}
|
|
165
|
-
return {
|
|
166
|
-
id: row.id,
|
|
167
|
-
title: row.title,
|
|
168
|
-
messages: JSON.parse(row.messages),
|
|
169
|
-
model: row.model,
|
|
170
|
-
tokenCount: row.token_count,
|
|
171
|
-
};
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
listConversations(
|
|
175
|
-
limit: number = 20
|
|
176
|
-
): Array<{ id: string; title: string; timestamp: string; model: string | null }> {
|
|
177
|
-
const stmt = this.db.prepare(`
|
|
178
|
-
SELECT id, title, timestamp, model FROM conversation_context ORDER BY timestamp DESC LIMIT ?
|
|
179
|
-
`);
|
|
180
|
-
return (stmt.all(limit) as any[]).map(row => ({
|
|
181
|
-
id: row.id,
|
|
182
|
-
title: row.title,
|
|
183
|
-
timestamp: row.timestamp,
|
|
184
|
-
model: row.model,
|
|
185
|
-
}));
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
close(): void {
|
|
189
|
-
this.db.close();
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
getPath(): string {
|
|
193
|
-
return this.dbPath;
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
export function initContextDatabase(projectDir: string): ContextDatabase {
|
|
198
|
-
return new ContextDatabase(projectDir);
|
|
199
|
-
}
|
package/src/demo/index.ts
DELETED
|
@@ -1,349 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Demo Framework
|
|
3
|
-
*
|
|
4
|
-
* Orchestrates demo scenarios for presentations and tutorials
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import { logger } from '../utils';
|
|
8
|
-
import { ui } from '../wizard/ui';
|
|
9
|
-
import { confirm } from '../wizard/prompts';
|
|
10
|
-
import type { DemoScenario, DemoStep, DemoOptions, StepResult, ScenarioResult } from './types';
|
|
11
|
-
import { terraformVpcScenario } from './scenarios/terraform-vpc';
|
|
12
|
-
import { fullJourneyScenario } from './scenarios/full-journey';
|
|
13
|
-
import { gettingStartedScenario } from './scenarios/getting-started';
|
|
14
|
-
import { k8sDeploymentScenario } from './scenarios/k8s-deployment';
|
|
15
|
-
import { helmReleaseScenario } from './scenarios/helm-release';
|
|
16
|
-
|
|
17
|
-
// All available scenarios
|
|
18
|
-
const scenarios: DemoScenario[] = [
|
|
19
|
-
gettingStartedScenario,
|
|
20
|
-
terraformVpcScenario,
|
|
21
|
-
k8sDeploymentScenario,
|
|
22
|
-
helmReleaseScenario,
|
|
23
|
-
fullJourneyScenario,
|
|
24
|
-
];
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Get all available demo scenarios
|
|
28
|
-
*/
|
|
29
|
-
export function getScenarios(): DemoScenario[] {
|
|
30
|
-
return scenarios;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Get a scenario by ID
|
|
35
|
-
*/
|
|
36
|
-
export function getScenario(id: string): DemoScenario | undefined {
|
|
37
|
-
return scenarios.find(s => s.id === id);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Run a demo scenario
|
|
42
|
-
*/
|
|
43
|
-
export async function runScenario(
|
|
44
|
-
scenario: DemoScenario,
|
|
45
|
-
options: DemoOptions = {}
|
|
46
|
-
): Promise<ScenarioResult> {
|
|
47
|
-
logger.info(`Running demo scenario: ${scenario.name}`);
|
|
48
|
-
|
|
49
|
-
const startedAt = new Date();
|
|
50
|
-
const stepResults: StepResult[] = [];
|
|
51
|
-
let totalDuration = 0;
|
|
52
|
-
let success = true;
|
|
53
|
-
|
|
54
|
-
// Show scenario header
|
|
55
|
-
displayScenarioHeader(scenario);
|
|
56
|
-
|
|
57
|
-
// Check prerequisites
|
|
58
|
-
if (scenario.prerequisites && scenario.prerequisites.length > 0) {
|
|
59
|
-
ui.newLine();
|
|
60
|
-
ui.print(ui.bold('Prerequisites:'));
|
|
61
|
-
for (const prereq of scenario.prerequisites) {
|
|
62
|
-
ui.print(` - ${prereq}`);
|
|
63
|
-
}
|
|
64
|
-
ui.newLine();
|
|
65
|
-
|
|
66
|
-
if (options.interactive) {
|
|
67
|
-
const proceed = await confirm({
|
|
68
|
-
message: 'Have you met all prerequisites?',
|
|
69
|
-
defaultValue: true,
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
if (!proceed) {
|
|
73
|
-
ui.warning('Demo cancelled - prerequisites not met');
|
|
74
|
-
return {
|
|
75
|
-
scenario,
|
|
76
|
-
steps: [],
|
|
77
|
-
success: false,
|
|
78
|
-
totalDuration: 0,
|
|
79
|
-
startedAt,
|
|
80
|
-
completedAt: new Date(),
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
// Run each step
|
|
87
|
-
for (let i = 0; i < scenario.steps.length; i++) {
|
|
88
|
-
const step = scenario.steps[i];
|
|
89
|
-
|
|
90
|
-
// Wait before step if interactive
|
|
91
|
-
if (options.interactive && i > 0) {
|
|
92
|
-
const proceed = await confirm({
|
|
93
|
-
message: 'Continue to next step?',
|
|
94
|
-
defaultValue: true,
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
if (!proceed) {
|
|
98
|
-
ui.info('Demo paused');
|
|
99
|
-
break;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
const result = await runStep(step, options, i + 1, scenario.steps.length);
|
|
104
|
-
stepResults.push(result);
|
|
105
|
-
totalDuration += result.duration;
|
|
106
|
-
|
|
107
|
-
if (!result.success) {
|
|
108
|
-
success = false;
|
|
109
|
-
if (!options.interactive) {
|
|
110
|
-
ui.error('Step failed, stopping demo');
|
|
111
|
-
break;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
// Add delay based on speed
|
|
116
|
-
const delay = getDelay(options.speed, step.delay);
|
|
117
|
-
if (delay > 0) {
|
|
118
|
-
await sleep(delay);
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
const completedAt = new Date();
|
|
123
|
-
|
|
124
|
-
// Show summary
|
|
125
|
-
displaySummary(scenario, stepResults, success, totalDuration);
|
|
126
|
-
|
|
127
|
-
return {
|
|
128
|
-
scenario,
|
|
129
|
-
steps: stepResults,
|
|
130
|
-
success,
|
|
131
|
-
totalDuration,
|
|
132
|
-
startedAt,
|
|
133
|
-
completedAt,
|
|
134
|
-
};
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
/**
|
|
138
|
-
* Run a single demo step
|
|
139
|
-
*/
|
|
140
|
-
async function runStep(
|
|
141
|
-
step: DemoStep,
|
|
142
|
-
options: DemoOptions,
|
|
143
|
-
current: number,
|
|
144
|
-
total: number
|
|
145
|
-
): Promise<StepResult> {
|
|
146
|
-
const startTime = Date.now();
|
|
147
|
-
|
|
148
|
-
// Display step header
|
|
149
|
-
ui.newLine();
|
|
150
|
-
ui.print(ui.color(`Step ${current}/${total}`, 'cyan'));
|
|
151
|
-
ui.print(ui.bold(step.title));
|
|
152
|
-
if (step.description) {
|
|
153
|
-
ui.print(ui.dim(step.description));
|
|
154
|
-
}
|
|
155
|
-
ui.newLine();
|
|
156
|
-
|
|
157
|
-
// Show command
|
|
158
|
-
ui.print(` ${ui.color('$', 'green')} ${ui.color(step.command, 'yellow')}`);
|
|
159
|
-
ui.newLine();
|
|
160
|
-
|
|
161
|
-
// Execute or mock
|
|
162
|
-
let output = '';
|
|
163
|
-
let error = '';
|
|
164
|
-
let success = true;
|
|
165
|
-
|
|
166
|
-
if (options.dryRun) {
|
|
167
|
-
// Use mock response in dry run mode
|
|
168
|
-
if (step.mockResponse) {
|
|
169
|
-
output = step.mockResponse;
|
|
170
|
-
if (step.showOutput !== false) {
|
|
171
|
-
displayOutput(output);
|
|
172
|
-
}
|
|
173
|
-
} else {
|
|
174
|
-
ui.dim(' [Dry run - command not executed]');
|
|
175
|
-
}
|
|
176
|
-
} else {
|
|
177
|
-
// Actually execute the command
|
|
178
|
-
try {
|
|
179
|
-
const result = await executeCommand(step.command);
|
|
180
|
-
output = result.stdout;
|
|
181
|
-
error = result.stderr;
|
|
182
|
-
success = result.exitCode === 0;
|
|
183
|
-
|
|
184
|
-
if (step.showOutput !== false && output) {
|
|
185
|
-
displayOutput(output);
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
if (error && options.verbose) {
|
|
189
|
-
ui.print(ui.color(error, 'red'));
|
|
190
|
-
}
|
|
191
|
-
} catch (e: any) {
|
|
192
|
-
success = false;
|
|
193
|
-
error = e.message;
|
|
194
|
-
ui.error(`Failed: ${error}`);
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
// Verify expected output
|
|
199
|
-
if (success && step.expectedOutput) {
|
|
200
|
-
const regex = new RegExp(step.expectedOutput);
|
|
201
|
-
if (!regex.test(output)) {
|
|
202
|
-
success = false;
|
|
203
|
-
error = 'Output did not match expected pattern';
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
const duration = Date.now() - startTime;
|
|
208
|
-
|
|
209
|
-
// Show result
|
|
210
|
-
if (success) {
|
|
211
|
-
ui.success('Step completed');
|
|
212
|
-
} else {
|
|
213
|
-
ui.error('Step failed');
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
return {
|
|
217
|
-
step,
|
|
218
|
-
success,
|
|
219
|
-
output,
|
|
220
|
-
error: error || undefined,
|
|
221
|
-
duration,
|
|
222
|
-
};
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
/**
|
|
226
|
-
* Execute a command and return result
|
|
227
|
-
*/
|
|
228
|
-
async function executeCommand(command: string): Promise<{
|
|
229
|
-
stdout: string;
|
|
230
|
-
stderr: string;
|
|
231
|
-
exitCode: number;
|
|
232
|
-
}> {
|
|
233
|
-
const { exec } = await import('child_process');
|
|
234
|
-
const { promisify } = await import('util');
|
|
235
|
-
const execAsync = promisify(exec);
|
|
236
|
-
|
|
237
|
-
try {
|
|
238
|
-
const { stdout, stderr } = await execAsync(command, {
|
|
239
|
-
maxBuffer: 10 * 1024 * 1024, // 10MB
|
|
240
|
-
});
|
|
241
|
-
return { stdout, stderr, exitCode: 0 };
|
|
242
|
-
} catch (error: any) {
|
|
243
|
-
return {
|
|
244
|
-
stdout: error.stdout || '',
|
|
245
|
-
stderr: error.stderr || error.message,
|
|
246
|
-
exitCode: error.code || 1,
|
|
247
|
-
};
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
/**
|
|
252
|
-
* Display scenario header
|
|
253
|
-
*/
|
|
254
|
-
function displayScenarioHeader(scenario: DemoScenario): void {
|
|
255
|
-
ui.newLine();
|
|
256
|
-
ui.print(`╔${'═'.repeat(58)}╗`);
|
|
257
|
-
ui.print(`║${' '.repeat(58)}║`);
|
|
258
|
-
ui.print(`║${centerText(scenario.name, 58)}║`);
|
|
259
|
-
ui.print(`║${centerText(scenario.description, 58)}║`);
|
|
260
|
-
ui.print(`║${' '.repeat(58)}║`);
|
|
261
|
-
ui.print(`║${centerText(`${scenario.steps.length} steps`, 58)}║`);
|
|
262
|
-
ui.print(`╚${'═'.repeat(58)}╝`);
|
|
263
|
-
ui.newLine();
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
/**
|
|
267
|
-
* Display execution summary
|
|
268
|
-
*/
|
|
269
|
-
function displaySummary(
|
|
270
|
-
scenario: DemoScenario,
|
|
271
|
-
results: StepResult[],
|
|
272
|
-
success: boolean,
|
|
273
|
-
duration: number
|
|
274
|
-
): void {
|
|
275
|
-
ui.newLine();
|
|
276
|
-
ui.print('─'.repeat(60));
|
|
277
|
-
ui.print(ui.bold('Demo Summary'));
|
|
278
|
-
ui.newLine();
|
|
279
|
-
|
|
280
|
-
const passed = results.filter(r => r.success).length;
|
|
281
|
-
const failed = results.filter(r => !r.success).length;
|
|
282
|
-
|
|
283
|
-
ui.print(` Scenario: ${scenario.name}`);
|
|
284
|
-
ui.print(
|
|
285
|
-
` Steps: ${ui.color(`${passed} passed`, 'green')}, ${failed > 0 ? ui.color(`${failed} failed`, 'red') : '0 failed'}`
|
|
286
|
-
);
|
|
287
|
-
ui.print(` Duration: ${(duration / 1000).toFixed(1)}s`);
|
|
288
|
-
|
|
289
|
-
ui.newLine();
|
|
290
|
-
if (success) {
|
|
291
|
-
ui.success('Demo completed successfully!');
|
|
292
|
-
} else {
|
|
293
|
-
ui.error('Demo completed with errors');
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
/**
|
|
298
|
-
* Display command output with formatting
|
|
299
|
-
*/
|
|
300
|
-
function displayOutput(output: string): void {
|
|
301
|
-
const lines = output.split('\n');
|
|
302
|
-
for (const line of lines) {
|
|
303
|
-
// Color terraform output
|
|
304
|
-
if (line.startsWith('+')) {
|
|
305
|
-
ui.print(` ${ui.color(line, 'green')}`);
|
|
306
|
-
} else if (line.startsWith('-')) {
|
|
307
|
-
ui.print(` ${ui.color(line, 'red')}`);
|
|
308
|
-
} else if (line.startsWith('~')) {
|
|
309
|
-
ui.print(` ${ui.color(line, 'yellow')}`);
|
|
310
|
-
} else {
|
|
311
|
-
ui.print(` ${line}`);
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
/**
|
|
317
|
-
* Get delay based on speed setting
|
|
318
|
-
*/
|
|
319
|
-
function getDelay(speed: string | undefined, stepDelay: number | undefined): number {
|
|
320
|
-
const baseDelay = stepDelay || 500;
|
|
321
|
-
|
|
322
|
-
switch (speed) {
|
|
323
|
-
case 'slow':
|
|
324
|
-
return baseDelay * 2;
|
|
325
|
-
case 'fast':
|
|
326
|
-
return baseDelay / 2;
|
|
327
|
-
default:
|
|
328
|
-
return baseDelay;
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
|
|
332
|
-
/**
|
|
333
|
-
* Center text in a given width
|
|
334
|
-
*/
|
|
335
|
-
function centerText(text: string, width: number): string {
|
|
336
|
-
const leftPadding = Math.max(0, Math.floor((width - text.length) / 2));
|
|
337
|
-
const rightPadding = Math.max(0, width - leftPadding - text.length);
|
|
338
|
-
return ' '.repeat(leftPadding) + text + ' '.repeat(rightPadding);
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
/**
|
|
342
|
-
* Sleep for specified milliseconds
|
|
343
|
-
*/
|
|
344
|
-
function sleep(ms: number): Promise<void> {
|
|
345
|
-
return new Promise(resolve => setTimeout(resolve, ms));
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
// Re-export types
|
|
349
|
-
export * from './types';
|