@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/state/sessions.ts
DELETED
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Session / operation CRUD helpers.
|
|
3
|
-
*
|
|
4
|
-
* Refactored from SQLiteAdapter.saveOperation, getOperation, listOperations,
|
|
5
|
-
* and listOperationsByType.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import type { Database } from '../compat/sqlite';
|
|
9
|
-
import { getDb } from './db';
|
|
10
|
-
|
|
11
|
-
/** Shape returned by the operation query helpers. */
|
|
12
|
-
export interface OperationRecord {
|
|
13
|
-
id: string;
|
|
14
|
-
timestamp: Date;
|
|
15
|
-
type: string;
|
|
16
|
-
command: string;
|
|
17
|
-
input?: string;
|
|
18
|
-
output?: string;
|
|
19
|
-
status: string;
|
|
20
|
-
durationMs?: number;
|
|
21
|
-
model?: string;
|
|
22
|
-
tokensUsed?: number;
|
|
23
|
-
costUsd?: number;
|
|
24
|
-
metadata?: Record<string, unknown>;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/** Shape accepted when persisting a new operation. */
|
|
28
|
-
export interface SaveOperationInput {
|
|
29
|
-
id: string;
|
|
30
|
-
timestamp: Date;
|
|
31
|
-
type: string;
|
|
32
|
-
command: string;
|
|
33
|
-
input?: string;
|
|
34
|
-
output?: string;
|
|
35
|
-
status: string;
|
|
36
|
-
durationMs?: number;
|
|
37
|
-
model?: string;
|
|
38
|
-
tokensUsed?: number;
|
|
39
|
-
costUsd?: number;
|
|
40
|
-
metadata?: Record<string, unknown>;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
// ---------------------------------------------------------------------------
|
|
44
|
-
// Internal helpers
|
|
45
|
-
// ---------------------------------------------------------------------------
|
|
46
|
-
|
|
47
|
-
function rowToOperation(row: any): OperationRecord {
|
|
48
|
-
return {
|
|
49
|
-
id: row.id,
|
|
50
|
-
timestamp: new Date(row.timestamp),
|
|
51
|
-
type: row.type,
|
|
52
|
-
command: row.command,
|
|
53
|
-
input: row.input,
|
|
54
|
-
output: row.output,
|
|
55
|
-
status: row.status,
|
|
56
|
-
durationMs: row.duration_ms,
|
|
57
|
-
model: row.model,
|
|
58
|
-
tokensUsed: row.tokens_used,
|
|
59
|
-
costUsd: row.cost_usd,
|
|
60
|
-
metadata: row.metadata ? JSON.parse(row.metadata) : undefined,
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
// ---------------------------------------------------------------------------
|
|
65
|
-
// Public API
|
|
66
|
-
// ---------------------------------------------------------------------------
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Persist a single operation record.
|
|
70
|
-
*/
|
|
71
|
-
export function saveOperation(operation: SaveOperationInput, db?: Database): void {
|
|
72
|
-
const d = db || getDb();
|
|
73
|
-
const stmt = d.prepare(`
|
|
74
|
-
INSERT INTO operations (id, timestamp, type, command, input, output, status, duration_ms, model, tokens_used, cost_usd, metadata)
|
|
75
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
76
|
-
`);
|
|
77
|
-
|
|
78
|
-
stmt.run(
|
|
79
|
-
operation.id,
|
|
80
|
-
operation.timestamp.toISOString(),
|
|
81
|
-
operation.type,
|
|
82
|
-
operation.command,
|
|
83
|
-
operation.input || null,
|
|
84
|
-
operation.output || null,
|
|
85
|
-
operation.status,
|
|
86
|
-
operation.durationMs || null,
|
|
87
|
-
operation.model || null,
|
|
88
|
-
operation.tokensUsed || null,
|
|
89
|
-
operation.costUsd || null,
|
|
90
|
-
operation.metadata ? JSON.stringify(operation.metadata) : null
|
|
91
|
-
);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* Retrieve a single operation by id.
|
|
96
|
-
*/
|
|
97
|
-
export function getOperation(id: string, db?: Database): OperationRecord | null {
|
|
98
|
-
const d = db || getDb();
|
|
99
|
-
const stmt = d.prepare('SELECT * FROM operations WHERE id = ?');
|
|
100
|
-
const row: any = stmt.get(id);
|
|
101
|
-
|
|
102
|
-
if (!row) {
|
|
103
|
-
return null;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
return rowToOperation(row);
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* List operations ordered by timestamp descending.
|
|
111
|
-
*/
|
|
112
|
-
export function listOperations(
|
|
113
|
-
limit: number = 50,
|
|
114
|
-
offset: number = 0,
|
|
115
|
-
db?: Database
|
|
116
|
-
): OperationRecord[] {
|
|
117
|
-
const d = db || getDb();
|
|
118
|
-
const stmt = d.prepare(`
|
|
119
|
-
SELECT * FROM operations
|
|
120
|
-
ORDER BY timestamp DESC
|
|
121
|
-
LIMIT ? OFFSET ?
|
|
122
|
-
`);
|
|
123
|
-
|
|
124
|
-
const rows: any[] = stmt.all(limit, offset) as any[];
|
|
125
|
-
return rows.map(row => rowToOperation(row));
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
* List operations filtered by type, ordered by timestamp descending.
|
|
130
|
-
*/
|
|
131
|
-
export function listOperationsByType(
|
|
132
|
-
type: string,
|
|
133
|
-
limit: number = 50,
|
|
134
|
-
offset: number = 0,
|
|
135
|
-
db?: Database
|
|
136
|
-
): OperationRecord[] {
|
|
137
|
-
const d = db || getDb();
|
|
138
|
-
const stmt = d.prepare(`
|
|
139
|
-
SELECT * FROM operations
|
|
140
|
-
WHERE type = ?
|
|
141
|
-
ORDER BY timestamp DESC
|
|
142
|
-
LIMIT ? OFFSET ?
|
|
143
|
-
`);
|
|
144
|
-
|
|
145
|
-
const rows: any[] = stmt.all(type, limit, offset) as any[];
|
|
146
|
-
return rows.map(row => rowToOperation(row));
|
|
147
|
-
}
|
package/src/state/teams.ts
DELETED
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Team and user CRUD helpers.
|
|
3
|
-
*
|
|
4
|
-
* Refactored from the team-service database adapter
|
|
5
|
-
* (services/team-service/src/db/adapter.ts) into standalone functions
|
|
6
|
-
* that operate against the unified Nimbus database.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import type { Database } from '../compat/sqlite';
|
|
10
|
-
import { getDb } from './db';
|
|
11
|
-
|
|
12
|
-
/** Shape returned by team queries. */
|
|
13
|
-
export interface TeamRecord {
|
|
14
|
-
id: string;
|
|
15
|
-
name: string;
|
|
16
|
-
ownerId: string;
|
|
17
|
-
plan: string;
|
|
18
|
-
createdAt: string;
|
|
19
|
-
updatedAt: string;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
/** Shape returned by team-member queries. */
|
|
23
|
-
export interface TeamMemberRecord {
|
|
24
|
-
id: string;
|
|
25
|
-
teamId: string;
|
|
26
|
-
userId: string;
|
|
27
|
-
role: string;
|
|
28
|
-
joinedAt: string;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/** Shape returned by user queries. */
|
|
32
|
-
export interface UserRecord {
|
|
33
|
-
id: string;
|
|
34
|
-
email: string | null;
|
|
35
|
-
name: string | null;
|
|
36
|
-
avatarUrl: string | null;
|
|
37
|
-
createdAt: string;
|
|
38
|
-
updatedAt: string;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
// ---------------------------------------------------------------------------
|
|
42
|
-
// Team helpers
|
|
43
|
-
// ---------------------------------------------------------------------------
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Create a new team.
|
|
47
|
-
*/
|
|
48
|
-
export function createTeam(
|
|
49
|
-
id: string,
|
|
50
|
-
name: string,
|
|
51
|
-
ownerId: string,
|
|
52
|
-
plan: string = 'free',
|
|
53
|
-
db?: Database
|
|
54
|
-
): void {
|
|
55
|
-
const d = db || getDb();
|
|
56
|
-
const stmt = d.prepare(`
|
|
57
|
-
INSERT INTO teams (id, name, owner_id, plan, created_at, updated_at)
|
|
58
|
-
VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)
|
|
59
|
-
`);
|
|
60
|
-
|
|
61
|
-
stmt.run(id, name, ownerId, plan);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Retrieve a team by id.
|
|
66
|
-
*/
|
|
67
|
-
export function getTeam(id: string, db?: Database): TeamRecord | null {
|
|
68
|
-
const d = db || getDb();
|
|
69
|
-
const stmt = d.prepare('SELECT * FROM teams WHERE id = ?');
|
|
70
|
-
const row: any = stmt.get(id);
|
|
71
|
-
|
|
72
|
-
if (!row) {
|
|
73
|
-
return null;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
return {
|
|
77
|
-
id: row.id,
|
|
78
|
-
name: row.name,
|
|
79
|
-
ownerId: row.owner_id,
|
|
80
|
-
plan: row.plan,
|
|
81
|
-
createdAt: row.created_at,
|
|
82
|
-
updatedAt: row.updated_at,
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* List all teams, ordered by most-recently updated first.
|
|
88
|
-
*/
|
|
89
|
-
export function listTeams(db?: Database): TeamRecord[] {
|
|
90
|
-
const d = db || getDb();
|
|
91
|
-
const stmt = d.prepare('SELECT * FROM teams ORDER BY updated_at DESC');
|
|
92
|
-
const rows: any[] = stmt.all() as any[];
|
|
93
|
-
|
|
94
|
-
return rows.map(row => ({
|
|
95
|
-
id: row.id,
|
|
96
|
-
name: row.name,
|
|
97
|
-
ownerId: row.owner_id,
|
|
98
|
-
plan: row.plan,
|
|
99
|
-
createdAt: row.created_at,
|
|
100
|
-
updatedAt: row.updated_at,
|
|
101
|
-
}));
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
// ---------------------------------------------------------------------------
|
|
105
|
-
// Team member helpers
|
|
106
|
-
// ---------------------------------------------------------------------------
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* Add a member to a team.
|
|
110
|
-
*/
|
|
111
|
-
export function addTeamMember(
|
|
112
|
-
id: string,
|
|
113
|
-
teamId: string,
|
|
114
|
-
userId: string,
|
|
115
|
-
role: string = 'member',
|
|
116
|
-
db?: Database
|
|
117
|
-
): void {
|
|
118
|
-
const d = db || getDb();
|
|
119
|
-
const stmt = d.prepare(`
|
|
120
|
-
INSERT INTO team_members (id, team_id, user_id, role, joined_at)
|
|
121
|
-
VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP)
|
|
122
|
-
`);
|
|
123
|
-
|
|
124
|
-
stmt.run(id, teamId, userId, role);
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
/**
|
|
128
|
-
* Remove a member from a team by user id.
|
|
129
|
-
*/
|
|
130
|
-
export function removeTeamMember(teamId: string, userId: string, db?: Database): void {
|
|
131
|
-
const d = db || getDb();
|
|
132
|
-
const stmt = d.prepare('DELETE FROM team_members WHERE team_id = ? AND user_id = ?');
|
|
133
|
-
stmt.run(teamId, userId);
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
* List all members of a team.
|
|
138
|
-
*/
|
|
139
|
-
export function listTeamMembers(teamId: string, db?: Database): TeamMemberRecord[] {
|
|
140
|
-
const d = db || getDb();
|
|
141
|
-
const stmt = d.prepare(`
|
|
142
|
-
SELECT * FROM team_members
|
|
143
|
-
WHERE team_id = ?
|
|
144
|
-
ORDER BY joined_at ASC
|
|
145
|
-
`);
|
|
146
|
-
|
|
147
|
-
const rows: any[] = stmt.all(teamId) as any[];
|
|
148
|
-
return rows.map(row => ({
|
|
149
|
-
id: row.id,
|
|
150
|
-
teamId: row.team_id,
|
|
151
|
-
userId: row.user_id,
|
|
152
|
-
role: row.role,
|
|
153
|
-
joinedAt: row.joined_at,
|
|
154
|
-
}));
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
// ---------------------------------------------------------------------------
|
|
158
|
-
// User helpers
|
|
159
|
-
// ---------------------------------------------------------------------------
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* Create a new user.
|
|
163
|
-
*/
|
|
164
|
-
export function createUser(
|
|
165
|
-
id: string,
|
|
166
|
-
email?: string,
|
|
167
|
-
name?: string,
|
|
168
|
-
avatarUrl?: string,
|
|
169
|
-
db?: Database
|
|
170
|
-
): void {
|
|
171
|
-
const d = db || getDb();
|
|
172
|
-
const stmt = d.prepare(`
|
|
173
|
-
INSERT INTO users (id, email, name, avatar_url, created_at, updated_at)
|
|
174
|
-
VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)
|
|
175
|
-
`);
|
|
176
|
-
|
|
177
|
-
stmt.run(id, email || null, name || null, avatarUrl || null);
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
/**
|
|
181
|
-
* Retrieve a user by id.
|
|
182
|
-
*/
|
|
183
|
-
export function getUser(id: string, db?: Database): UserRecord | null {
|
|
184
|
-
const d = db || getDb();
|
|
185
|
-
const stmt = d.prepare('SELECT * FROM users WHERE id = ?');
|
|
186
|
-
const row: any = stmt.get(id);
|
|
187
|
-
|
|
188
|
-
if (!row) {
|
|
189
|
-
return null;
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
return {
|
|
193
|
-
id: row.id,
|
|
194
|
-
email: row.email,
|
|
195
|
-
name: row.name,
|
|
196
|
-
avatarUrl: row.avatar_url,
|
|
197
|
-
createdAt: row.created_at,
|
|
198
|
-
updatedAt: row.updated_at,
|
|
199
|
-
};
|
|
200
|
-
}
|
package/src/telemetry.ts
DELETED
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Telemetry Module
|
|
3
|
-
*
|
|
4
|
-
* Thin wrapper around the PostHog analytics client (src/utils/analytics.ts).
|
|
5
|
-
* Reads the user's opt-in preference from ~/.nimbus/config.json and only
|
|
6
|
-
* forwards events when telemetry is explicitly enabled.
|
|
7
|
-
*
|
|
8
|
-
* Every exported function is guaranteed to never throw -- callers do not
|
|
9
|
-
* need try-catch around telemetry calls (though several already have it).
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
import { analytics } from './utils/analytics';
|
|
13
|
-
|
|
14
|
-
// ---------------------------------------------------------------------------
|
|
15
|
-
// Config helpers
|
|
16
|
-
// ---------------------------------------------------------------------------
|
|
17
|
-
|
|
18
|
-
interface TelemetryConfig {
|
|
19
|
-
enabled?: boolean;
|
|
20
|
-
anonymousId?: string;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Read the telemetry section from ~/.nimbus/config.json.
|
|
25
|
-
* Returns `{ enabled: false }` on any error so the default is always off.
|
|
26
|
-
*/
|
|
27
|
-
function readTelemetryConfig(): TelemetryConfig {
|
|
28
|
-
try {
|
|
29
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
30
|
-
const fs = require('node:fs');
|
|
31
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
32
|
-
const path = require('node:path');
|
|
33
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
34
|
-
const { homedir } = require('os');
|
|
35
|
-
const configPath = path.join(homedir(), '.nimbus', 'config.json');
|
|
36
|
-
|
|
37
|
-
if (!fs.existsSync(configPath)) {
|
|
38
|
-
return { enabled: false };
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
const raw = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
42
|
-
return raw?.telemetry ?? { enabled: false };
|
|
43
|
-
} catch {
|
|
44
|
-
return { enabled: false };
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
// Cache the config for the lifetime of the process so we only read the
|
|
49
|
-
// filesystem once. The user would need to restart nimbus after toggling
|
|
50
|
-
// telemetry anyway, so a stale value is acceptable.
|
|
51
|
-
let _cachedConfig: TelemetryConfig | null = null;
|
|
52
|
-
|
|
53
|
-
function getConfig(): TelemetryConfig {
|
|
54
|
-
if (_cachedConfig === null) {
|
|
55
|
-
_cachedConfig = readTelemetryConfig();
|
|
56
|
-
}
|
|
57
|
-
return _cachedConfig;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// ---------------------------------------------------------------------------
|
|
61
|
-
// Public API
|
|
62
|
-
// ---------------------------------------------------------------------------
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Track an IaC generation event (terraform apply, k8s apply, helm install, etc.).
|
|
66
|
-
*
|
|
67
|
-
* @param type - A short identifier for the generation kind, e.g. "terraform-apply"
|
|
68
|
-
* @param tags - Freeform tags for categorisation, e.g. ["terraform"]
|
|
69
|
-
*/
|
|
70
|
-
export function trackGeneration(type: string, tags: string[]): void {
|
|
71
|
-
try {
|
|
72
|
-
const config = getConfig();
|
|
73
|
-
if (!config.enabled) {
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
// Fire-and-forget -- analytics.trackEvent already swallows errors.
|
|
78
|
-
analytics.trackEvent('generation', {
|
|
79
|
-
type,
|
|
80
|
-
tags,
|
|
81
|
-
userId: config.anonymousId,
|
|
82
|
-
});
|
|
83
|
-
} catch {
|
|
84
|
-
// Absolutely never throw from telemetry.
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Track a generic named event with optional properties.
|
|
90
|
-
*
|
|
91
|
-
* @param name - The event name, e.g. "analysis_completed"
|
|
92
|
-
* @param properties - Arbitrary key/value metadata
|
|
93
|
-
*/
|
|
94
|
-
export function trackEvent(name: string, properties?: Record<string, unknown>): void {
|
|
95
|
-
try {
|
|
96
|
-
const config = getConfig();
|
|
97
|
-
if (!config.enabled) {
|
|
98
|
-
return;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
analytics.trackEvent(name, {
|
|
102
|
-
...properties,
|
|
103
|
-
userId: config.anonymousId,
|
|
104
|
-
});
|
|
105
|
-
} catch {
|
|
106
|
-
// Absolutely never throw from telemetry.
|
|
107
|
-
}
|
|
108
|
-
}
|