@build-astron-co/nimbus 0.4.2 → 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/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 +6 -3
- 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/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/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/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 -609
- 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 -234
- 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/mcp/manager.ts
DELETED
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MCP Manager
|
|
3
|
-
*
|
|
4
|
-
* Manages multiple MCP server connections and provides a unified
|
|
5
|
-
* interface for tool discovery and registration.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import * as fs from 'node:fs';
|
|
9
|
-
import * as path from 'node:path';
|
|
10
|
-
import { homedir } from 'node:os';
|
|
11
|
-
import { MCPClient, type MCPServerConfig } from './client';
|
|
12
|
-
import type { ToolDefinition, ToolRegistry } from '../tools/schemas/types';
|
|
13
|
-
|
|
14
|
-
/** Configuration file format for MCP servers */
|
|
15
|
-
export interface MCPConfig {
|
|
16
|
-
mcpServers?: Record<string, Omit<MCPServerConfig, 'name'>>;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export class MCPManager {
|
|
20
|
-
private clients: Map<string, MCPClient> = new Map();
|
|
21
|
-
private initialized = false;
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Load MCP server configurations from config files.
|
|
25
|
-
* Searches: .nimbus/mcp.json, nimbus.json, ~/.nimbus/mcp.json
|
|
26
|
-
*/
|
|
27
|
-
async loadConfig(cwd?: string): Promise<void> {
|
|
28
|
-
const configPaths = [
|
|
29
|
-
cwd ? path.join(cwd, '.nimbus', 'mcp.json') : null,
|
|
30
|
-
cwd ? path.join(cwd, 'nimbus.json') : null,
|
|
31
|
-
path.join(homedir(), '.nimbus', 'mcp.json'),
|
|
32
|
-
].filter((p): p is string => p !== null);
|
|
33
|
-
|
|
34
|
-
for (const configPath of configPaths) {
|
|
35
|
-
if (fs.existsSync(configPath)) {
|
|
36
|
-
try {
|
|
37
|
-
const content = fs.readFileSync(configPath, 'utf-8');
|
|
38
|
-
const config: MCPConfig = JSON.parse(content) as MCPConfig;
|
|
39
|
-
if (config.mcpServers) {
|
|
40
|
-
for (const [name, serverConfig] of Object.entries(config.mcpServers)) {
|
|
41
|
-
if (!this.clients.has(name)) {
|
|
42
|
-
this.clients.set(name, new MCPClient({ ...serverConfig, name }));
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
} catch {
|
|
47
|
-
// Skip invalid config files
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
this.initialized = true;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Connect to all configured MCP servers and discover tools.
|
|
57
|
-
* Lazy servers are skipped until explicitly needed.
|
|
58
|
-
*/
|
|
59
|
-
async connectAll(): Promise<void> {
|
|
60
|
-
if (!this.initialized) {
|
|
61
|
-
await this.loadConfig();
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
const connectPromises: Promise<void>[] = [];
|
|
65
|
-
for (const [name, client] of this.clients) {
|
|
66
|
-
if (!client.config.lazy) {
|
|
67
|
-
connectPromises.push(
|
|
68
|
-
client
|
|
69
|
-
.connect()
|
|
70
|
-
.then(() => client.listTools())
|
|
71
|
-
.then(() => undefined)
|
|
72
|
-
.catch((err: unknown) => {
|
|
73
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
74
|
-
console.warn(`MCP server '${name}' failed to connect: ${msg}`);
|
|
75
|
-
})
|
|
76
|
-
);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
await Promise.all(connectPromises);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* Get all tool definitions from connected MCP servers.
|
|
85
|
-
*/
|
|
86
|
-
getAllTools(): ToolDefinition[] {
|
|
87
|
-
const tools: ToolDefinition[] = [];
|
|
88
|
-
for (const client of this.clients.values()) {
|
|
89
|
-
if (client.isConnected) {
|
|
90
|
-
tools.push(...client.toToolDefinitions());
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
return tools;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
/**
|
|
97
|
-
* Register all MCP tools into a tool registry.
|
|
98
|
-
*/
|
|
99
|
-
registerTools(registry: ToolRegistry): void {
|
|
100
|
-
for (const tool of this.getAllTools()) {
|
|
101
|
-
try {
|
|
102
|
-
registry.register(tool);
|
|
103
|
-
} catch {
|
|
104
|
-
// Skip duplicate tool names
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* Get a specific client by server name.
|
|
111
|
-
*/
|
|
112
|
-
getClient(name: string): MCPClient | undefined {
|
|
113
|
-
return this.clients.get(name);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Disconnect all MCP servers.
|
|
118
|
-
*/
|
|
119
|
-
async disconnectAll(): Promise<void> {
|
|
120
|
-
const disconnectPromises = Array.from(this.clients.values()).map(client => client.disconnect());
|
|
121
|
-
await Promise.all(disconnectPromises);
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
/** Number of configured servers */
|
|
125
|
-
get serverCount(): number {
|
|
126
|
-
return this.clients.size;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
/** Number of connected servers */
|
|
130
|
-
get connectedCount(): number {
|
|
131
|
-
return Array.from(this.clients.values()).filter(c => c.isConnected).length;
|
|
132
|
-
}
|
|
133
|
-
}
|
package/src/nimbus.ts
DELETED
|
@@ -1,234 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* Nimbus CLI — Main Entry Point
|
|
4
|
-
*
|
|
5
|
-
* Single-process embedded architecture. All modules (LLM, tools, state,
|
|
6
|
-
* enterprise, engine, generator) run in-process — no HTTP services needed.
|
|
7
|
-
*
|
|
8
|
-
* Usage:
|
|
9
|
-
* bun src/nimbus.ts --version
|
|
10
|
-
* bun src/nimbus.ts --help
|
|
11
|
-
* bun src/nimbus.ts chat
|
|
12
|
-
* bun src/nimbus.ts ask "what is terraform"
|
|
13
|
-
* bun src/nimbus.ts generate terraform --provider aws
|
|
14
|
-
* bun src/nimbus.ts tf plan
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
import { VERSION } from './version';
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Non-blocking update check. Fires a single HTTPS HEAD request to npm
|
|
21
|
-
* and prints a one-liner to stderr if a newer version exists. The check
|
|
22
|
-
* uses a 3-second timeout so it never slows startup.
|
|
23
|
-
*/
|
|
24
|
-
function checkForUpdates(): void {
|
|
25
|
-
// Only check for interactive TTY sessions, not in CI
|
|
26
|
-
if (!process.stderr.isTTY || process.env.CI || process.env.NIMBUS_NO_UPDATE_CHECK) {
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
// Fire-and-forget — deferred to let the TUI render first
|
|
31
|
-
(async () => {
|
|
32
|
-
try {
|
|
33
|
-
// Small delay so the check doesn't compete with startup I/O
|
|
34
|
-
await new Promise(r => setTimeout(r, 500));
|
|
35
|
-
const controller = new AbortController();
|
|
36
|
-
const timeout = setTimeout(() => controller.abort(), 1500);
|
|
37
|
-
|
|
38
|
-
const res = await fetch('https://registry.npmjs.org/@build-astron-co/nimbus/latest', {
|
|
39
|
-
signal: controller.signal,
|
|
40
|
-
headers: { Accept: 'application/json' },
|
|
41
|
-
});
|
|
42
|
-
clearTimeout(timeout);
|
|
43
|
-
|
|
44
|
-
if (!res.ok) {
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
const data = (await res.json()) as { version?: string };
|
|
49
|
-
const latest = data.version;
|
|
50
|
-
if (!latest || latest === VERSION) {
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// Simple semver comparison: split on dots, compare numerically
|
|
55
|
-
const current = VERSION.split('.').map(Number);
|
|
56
|
-
const remote = latest.split('.').map(Number);
|
|
57
|
-
let isNewer = false;
|
|
58
|
-
for (let i = 0; i < 3; i++) {
|
|
59
|
-
if ((remote[i] ?? 0) > (current[i] ?? 0)) {
|
|
60
|
-
isNewer = true;
|
|
61
|
-
break;
|
|
62
|
-
}
|
|
63
|
-
if ((remote[i] ?? 0) < (current[i] ?? 0)) {
|
|
64
|
-
break;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
if (isNewer) {
|
|
69
|
-
process.stderr.write(
|
|
70
|
-
`\x1b[33m Update available: ${VERSION} → ${latest}. Run: nimbus upgrade\x1b[0m\n`
|
|
71
|
-
);
|
|
72
|
-
}
|
|
73
|
-
} catch {
|
|
74
|
-
// Network errors are silently ignored
|
|
75
|
-
}
|
|
76
|
-
})();
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
// ---------------------------------------------------------------------------
|
|
80
|
-
// Global error handlers (Gap 6: prevent silent crashes from unhandled promises)
|
|
81
|
-
// ---------------------------------------------------------------------------
|
|
82
|
-
|
|
83
|
-
process.on('unhandledRejection', reason => {
|
|
84
|
-
const msg = reason instanceof Error ? reason.message : String(reason);
|
|
85
|
-
process.stderr.write(`\x1b[31mUnhandled promise rejection: ${msg}\x1b[0m\n`);
|
|
86
|
-
// Don't exit — let the TUI continue running. The user can see the error
|
|
87
|
-
// and decide whether to continue or quit.
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
process.on('uncaughtException', error => {
|
|
91
|
-
process.stderr.write(`\x1b[31mUncaught exception: ${error.message}\x1b[0m\n`);
|
|
92
|
-
if (error.stack) {
|
|
93
|
-
process.stderr.write(`\x1b[2m${error.stack}\x1b[0m\n`);
|
|
94
|
-
}
|
|
95
|
-
// For uncaught exceptions, set exit code but let cleanup run
|
|
96
|
-
process.exitCode = 1;
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
async function main() {
|
|
100
|
-
let args = process.argv.slice(2);
|
|
101
|
-
|
|
102
|
-
// G11: Global --project / --cwd flag: change working directory before command dispatch
|
|
103
|
-
const cwdFlagIdx = args.findIndex(a => a === '--project' || a === '--cwd');
|
|
104
|
-
if (cwdFlagIdx !== -1 && args[cwdFlagIdx + 1]) {
|
|
105
|
-
const { resolve } = await import('node:path');
|
|
106
|
-
const targetDir = resolve(args[cwdFlagIdx + 1]);
|
|
107
|
-
process.chdir(targetDir);
|
|
108
|
-
args.splice(cwdFlagIdx, 2);
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
// Handle --version and -v before anything else (no init needed)
|
|
112
|
-
if (args[0] === '--version' || args[0] === '-v') {
|
|
113
|
-
console.log(`nimbus ${VERSION}`);
|
|
114
|
-
process.exit(0);
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
// Handle --completion-install / completion <shell> — print shell completion script
|
|
118
|
-
if (args[0] === '--completion-install' || args[0] === 'completion') {
|
|
119
|
-
const shell = args[1] ?? 'bash';
|
|
120
|
-
const { join } = await import('node:path');
|
|
121
|
-
const { readFileSync } = await import('node:fs');
|
|
122
|
-
const { fileURLToPath } = await import('node:url');
|
|
123
|
-
const dir = join(fileURLToPath(import.meta.url), '../../completions');
|
|
124
|
-
try {
|
|
125
|
-
process.stdout.write(readFileSync(join(dir, `nimbus.${shell}`), 'utf-8'));
|
|
126
|
-
} catch {
|
|
127
|
-
console.error(`No completion script for shell: ${shell}. Available: bash, zsh, fish`);
|
|
128
|
-
process.exit(1);
|
|
129
|
-
}
|
|
130
|
-
process.exit(0);
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
// Show help when explicitly requested — handles both `nimbus --help`
|
|
134
|
-
// and subcommand-level help like `nimbus chat --help` or `nimbus tf -h`.
|
|
135
|
-
if (args.includes('--help') || args.includes('-h')) {
|
|
136
|
-
const otherArgs = args.filter(a => a !== '--help' && a !== '-h');
|
|
137
|
-
args.length = 0;
|
|
138
|
-
args.push('help', ...otherArgs);
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
// Kick off a non-blocking update check (fire-and-forget)
|
|
142
|
-
checkForUpdates();
|
|
143
|
-
|
|
144
|
-
// Default no-args: launch chat (or onboarding if first run)
|
|
145
|
-
if (args.length === 0) {
|
|
146
|
-
const { needsOnboarding } = await import('./commands/onboarding');
|
|
147
|
-
if (needsOnboarding()) {
|
|
148
|
-
args[0] = 'onboarding';
|
|
149
|
-
} else {
|
|
150
|
-
args[0] = 'chat';
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
// Initialize the application (SQLite, LLM router, etc.)
|
|
155
|
-
const { initApp, shutdownApp } = await import('./app');
|
|
156
|
-
|
|
157
|
-
// Register shutdown hooks for clean exit.
|
|
158
|
-
// Use process.exitCode instead of process.exit() to avoid racing
|
|
159
|
-
// with finally blocks and async cleanup in the TUI.
|
|
160
|
-
let cleaningUp = false;
|
|
161
|
-
const cleanup = async () => {
|
|
162
|
-
if (cleaningUp) {
|
|
163
|
-
return;
|
|
164
|
-
} // Prevent double-cleanup on rapid Ctrl+C
|
|
165
|
-
cleaningUp = true;
|
|
166
|
-
await shutdownApp();
|
|
167
|
-
process.exitCode = 0;
|
|
168
|
-
};
|
|
169
|
-
|
|
170
|
-
process.on('SIGINT', cleanup);
|
|
171
|
-
process.on('SIGTERM', cleanup);
|
|
172
|
-
|
|
173
|
-
try {
|
|
174
|
-
// Commands that don't need full initialization
|
|
175
|
-
const noInitCommands = new Set([
|
|
176
|
-
'help',
|
|
177
|
-
'version',
|
|
178
|
-
'doctor',
|
|
179
|
-
'onboarding',
|
|
180
|
-
'login',
|
|
181
|
-
'upgrade',
|
|
182
|
-
'update',
|
|
183
|
-
]);
|
|
184
|
-
|
|
185
|
-
if (!noInitCommands.has(args[0])) {
|
|
186
|
-
// Show brief startup indicator for interactive commands
|
|
187
|
-
if (args[0] === 'chat' && process.stderr.isTTY) {
|
|
188
|
-
process.stderr.write('\x1b[2mStarting Nimbus...\x1b[0m');
|
|
189
|
-
}
|
|
190
|
-
await initApp();
|
|
191
|
-
if (args[0] === 'chat' && process.stderr.isTTY) {
|
|
192
|
-
process.stderr.write('\r\x1b[K');
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
// Resolve aliases before dispatching (L2)
|
|
197
|
-
try {
|
|
198
|
-
const { resolveAlias } = await import('./commands/alias');
|
|
199
|
-
args = resolveAlias(args);
|
|
200
|
-
} catch {
|
|
201
|
-
/* alias file not found — ignore */
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
// Import and run CLI command router
|
|
205
|
-
const { runCommand } = await import('./cli');
|
|
206
|
-
await runCommand(args);
|
|
207
|
-
|
|
208
|
-
// After onboarding, clear auth cache, initialize app, and launch chat
|
|
209
|
-
if (args[0] === 'onboarding') {
|
|
210
|
-
// Clear the auth-bridge cache so the router picks up freshly-saved credentials
|
|
211
|
-
try {
|
|
212
|
-
const { clearAuthCache } = await import('./llm/auth-bridge');
|
|
213
|
-
clearAuthCache();
|
|
214
|
-
} catch {
|
|
215
|
-
/* non-critical */
|
|
216
|
-
}
|
|
217
|
-
await initApp();
|
|
218
|
-
await runCommand(['chat']);
|
|
219
|
-
}
|
|
220
|
-
} catch (error: any) {
|
|
221
|
-
const msg = error.message || String(error);
|
|
222
|
-
if (error.code === 'MODULE_NOT_FOUND') {
|
|
223
|
-
console.error(`Error: Missing module — ${msg}`);
|
|
224
|
-
console.error('Run "npm install" to install dependencies.');
|
|
225
|
-
} else {
|
|
226
|
-
console.error(`Error: ${msg}`);
|
|
227
|
-
}
|
|
228
|
-
process.exit(1);
|
|
229
|
-
} finally {
|
|
230
|
-
await shutdownApp();
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
main();
|
package/src/plugins/index.ts
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Nimbus Plugin System — Public API
|
|
3
|
-
*
|
|
4
|
-
* Re-exports the primary class and types needed by the rest of the
|
|
5
|
-
* application and by external consumers that want to integrate with the
|
|
6
|
-
* plugin system without importing internal submodules directly.
|
|
7
|
-
*
|
|
8
|
-
* @module plugins
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
// Manager (class + singleton)
|
|
12
|
-
export { PluginManager, pluginManager } from './manager';
|
|
13
|
-
export type { PluginInfo, PluginInitResult } from './manager';
|
|
14
|
-
|
|
15
|
-
// Loader (class — exposed for testing and advanced use)
|
|
16
|
-
export { PluginLoader } from './loader';
|
|
17
|
-
|
|
18
|
-
// Public types
|
|
19
|
-
export type {
|
|
20
|
-
NimbusPlugin,
|
|
21
|
-
PluginToolDefinition,
|
|
22
|
-
PluginProviderDefinition,
|
|
23
|
-
PluginManifest,
|
|
24
|
-
PluginPermissionTier,
|
|
25
|
-
LoadedPlugin,
|
|
26
|
-
PluginLoadError,
|
|
27
|
-
} from './types';
|