@build-astron-co/nimbus 0.2.0
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/LICENSE +21 -0
- package/README.md +628 -0
- package/bin/nimbus +38 -0
- package/package.json +80 -0
- package/src/__tests__/app.test.ts +76 -0
- package/src/__tests__/audit.test.ts +877 -0
- package/src/__tests__/circuit-breaker.test.ts +116 -0
- package/src/__tests__/cli-run.test.ts +115 -0
- package/src/__tests__/context-manager.test.ts +502 -0
- package/src/__tests__/context.test.ts +242 -0
- package/src/__tests__/enterprise.test.ts +401 -0
- package/src/__tests__/generator.test.ts +433 -0
- package/src/__tests__/hooks.test.ts +582 -0
- package/src/__tests__/init.test.ts +436 -0
- package/src/__tests__/intent-parser.test.ts +229 -0
- package/src/__tests__/llm-router.test.ts +209 -0
- package/src/__tests__/lsp.test.ts +293 -0
- package/src/__tests__/modes.test.ts +336 -0
- package/src/__tests__/permissions.test.ts +338 -0
- package/src/__tests__/serve.test.ts +275 -0
- package/src/__tests__/sessions.test.ts +227 -0
- package/src/__tests__/sharing.test.ts +288 -0
- package/src/__tests__/snapshots.test.ts +581 -0
- package/src/__tests__/state-db.test.ts +334 -0
- package/src/__tests__/stream-with-tools.test.ts +732 -0
- package/src/__tests__/subagents.test.ts +176 -0
- package/src/__tests__/system-prompt.test.ts +169 -0
- package/src/__tests__/tool-converter.test.ts +256 -0
- package/src/__tests__/tool-schemas.test.ts +397 -0
- package/src/__tests__/tools.test.ts +143 -0
- package/src/__tests__/version.test.ts +49 -0
- package/src/agent/compaction-agent.ts +227 -0
- package/src/agent/context-manager.ts +435 -0
- package/src/agent/context.ts +427 -0
- package/src/agent/deploy-preview.ts +426 -0
- package/src/agent/index.ts +68 -0
- package/src/agent/loop.ts +717 -0
- package/src/agent/modes.ts +429 -0
- package/src/agent/permissions.ts +466 -0
- package/src/agent/subagents/base.ts +116 -0
- package/src/agent/subagents/cost.ts +51 -0
- package/src/agent/subagents/explore.ts +42 -0
- package/src/agent/subagents/general.ts +54 -0
- package/src/agent/subagents/index.ts +102 -0
- package/src/agent/subagents/infra.ts +59 -0
- package/src/agent/subagents/security.ts +69 -0
- package/src/agent/system-prompt.ts +436 -0
- package/src/app.ts +122 -0
- package/src/audit/activity-log.ts +290 -0
- package/src/audit/compliance-checker.ts +540 -0
- package/src/audit/cost-tracker.ts +318 -0
- package/src/audit/index.ts +23 -0
- package/src/audit/security-scanner.ts +596 -0
- package/src/auth/guard.ts +75 -0
- package/src/auth/index.ts +56 -0
- package/src/auth/oauth.ts +455 -0
- package/src/auth/providers.ts +470 -0
- package/src/auth/sso.ts +113 -0
- package/src/auth/store.ts +505 -0
- package/src/auth/types.ts +187 -0
- package/src/build.ts +141 -0
- package/src/cli/index.ts +16 -0
- package/src/cli/init.ts +854 -0
- package/src/cli/openapi-spec.ts +356 -0
- package/src/cli/run.ts +237 -0
- package/src/cli/serve-auth.ts +80 -0
- package/src/cli/serve.ts +462 -0
- package/src/cli/web.ts +67 -0
- package/src/cli.ts +1417 -0
- package/src/clients/core-engine-client.ts +227 -0
- package/src/clients/enterprise-client.ts +334 -0
- package/src/clients/generator-client.ts +351 -0
- package/src/clients/git-client.ts +627 -0
- package/src/clients/github-client.ts +410 -0
- package/src/clients/helm-client.ts +504 -0
- package/src/clients/index.ts +80 -0
- package/src/clients/k8s-client.ts +497 -0
- package/src/clients/llm-client.ts +161 -0
- package/src/clients/rest-client.ts +130 -0
- package/src/clients/service-discovery.ts +33 -0
- package/src/clients/terraform-client.ts +482 -0
- package/src/clients/tools-client.ts +1843 -0
- package/src/clients/ws-client.ts +115 -0
- package/src/commands/analyze/index.ts +352 -0
- package/src/commands/apply/helm.ts +473 -0
- package/src/commands/apply/index.ts +213 -0
- package/src/commands/apply/k8s.ts +454 -0
- package/src/commands/apply/terraform.ts +582 -0
- package/src/commands/ask.ts +167 -0
- package/src/commands/audit/index.ts +238 -0
- package/src/commands/auth-cloud.ts +294 -0
- package/src/commands/auth-list.ts +134 -0
- package/src/commands/auth-profile.ts +121 -0
- package/src/commands/auth-status.ts +141 -0
- package/src/commands/aws/ec2.ts +501 -0
- package/src/commands/aws/iam.ts +397 -0
- package/src/commands/aws/index.ts +133 -0
- package/src/commands/aws/lambda.ts +396 -0
- package/src/commands/aws/rds.ts +439 -0
- package/src/commands/aws/s3.ts +439 -0
- package/src/commands/aws/vpc.ts +393 -0
- package/src/commands/aws-discover.ts +649 -0
- package/src/commands/aws-terraform.ts +805 -0
- package/src/commands/azure/aks.ts +376 -0
- package/src/commands/azure/functions.ts +253 -0
- package/src/commands/azure/index.ts +116 -0
- package/src/commands/azure/storage.ts +478 -0
- package/src/commands/azure/vm.ts +355 -0
- package/src/commands/billing/index.ts +256 -0
- package/src/commands/chat.ts +314 -0
- package/src/commands/config.ts +346 -0
- package/src/commands/cost/cloud-cost-estimator.ts +266 -0
- package/src/commands/cost/estimator.ts +79 -0
- package/src/commands/cost/index.ts +594 -0
- package/src/commands/cost/parsers/terraform.ts +273 -0
- package/src/commands/cost/parsers/types.ts +25 -0
- package/src/commands/cost/pricing/aws.ts +544 -0
- package/src/commands/cost/pricing/azure.ts +499 -0
- package/src/commands/cost/pricing/gcp.ts +396 -0
- package/src/commands/cost/pricing/index.ts +40 -0
- package/src/commands/demo.ts +250 -0
- package/src/commands/doctor.ts +794 -0
- package/src/commands/drift/index.ts +439 -0
- package/src/commands/explain.ts +277 -0
- package/src/commands/feedback.ts +389 -0
- package/src/commands/fix.ts +324 -0
- package/src/commands/fs/index.ts +402 -0
- package/src/commands/gcp/compute.ts +325 -0
- package/src/commands/gcp/functions.ts +271 -0
- package/src/commands/gcp/gke.ts +438 -0
- package/src/commands/gcp/iam.ts +344 -0
- package/src/commands/gcp/index.ts +129 -0
- package/src/commands/gcp/storage.ts +284 -0
- package/src/commands/generate-helm.ts +1249 -0
- package/src/commands/generate-k8s.ts +1560 -0
- package/src/commands/generate-terraform.ts +1460 -0
- package/src/commands/gh/index.ts +863 -0
- package/src/commands/git/index.ts +1343 -0
- package/src/commands/helm/index.ts +1126 -0
- package/src/commands/help.ts +539 -0
- package/src/commands/history.ts +142 -0
- package/src/commands/import.ts +868 -0
- package/src/commands/index.ts +367 -0
- package/src/commands/init.ts +1046 -0
- package/src/commands/k8s/index.ts +1137 -0
- package/src/commands/login.ts +631 -0
- package/src/commands/logout.ts +83 -0
- package/src/commands/onboarding.ts +228 -0
- package/src/commands/plan/display.ts +279 -0
- package/src/commands/plan/index.ts +599 -0
- package/src/commands/preview.ts +452 -0
- package/src/commands/questionnaire.ts +1270 -0
- package/src/commands/resume.ts +55 -0
- package/src/commands/team/index.ts +346 -0
- package/src/commands/template.ts +232 -0
- package/src/commands/tf/index.ts +1034 -0
- package/src/commands/upgrade.ts +550 -0
- package/src/commands/usage/index.ts +134 -0
- package/src/commands/version.ts +170 -0
- package/src/compat/index.ts +2 -0
- package/src/compat/runtime.ts +12 -0
- package/src/compat/sqlite.ts +107 -0
- package/src/config/index.ts +17 -0
- package/src/config/manager.ts +530 -0
- package/src/config/safety-policy.ts +358 -0
- package/src/config/schema.ts +125 -0
- package/src/config/types.ts +527 -0
- package/src/context/context-db.ts +199 -0
- package/src/demo/index.ts +349 -0
- package/src/demo/scenarios/full-journey.ts +229 -0
- package/src/demo/scenarios/getting-started.ts +127 -0
- package/src/demo/scenarios/helm-release.ts +341 -0
- package/src/demo/scenarios/k8s-deployment.ts +194 -0
- package/src/demo/scenarios/terraform-vpc.ts +170 -0
- package/src/demo/types.ts +92 -0
- package/src/engine/cost-estimator.ts +438 -0
- package/src/engine/diagram-generator.ts +256 -0
- package/src/engine/drift-detector.ts +902 -0
- package/src/engine/executor.ts +1035 -0
- package/src/engine/index.ts +76 -0
- package/src/engine/orchestrator.ts +636 -0
- package/src/engine/planner.ts +720 -0
- package/src/engine/safety.ts +743 -0
- package/src/engine/verifier.ts +770 -0
- package/src/enterprise/audit.ts +348 -0
- package/src/enterprise/auth.ts +270 -0
- package/src/enterprise/billing.ts +822 -0
- package/src/enterprise/index.ts +17 -0
- package/src/enterprise/teams.ts +443 -0
- package/src/generator/best-practices.ts +1608 -0
- package/src/generator/helm.ts +630 -0
- package/src/generator/index.ts +37 -0
- package/src/generator/intent-parser.ts +514 -0
- package/src/generator/kubernetes.ts +976 -0
- package/src/generator/terraform.ts +1867 -0
- package/src/history/index.ts +8 -0
- package/src/history/manager.ts +322 -0
- package/src/history/types.ts +34 -0
- package/src/hooks/config.ts +432 -0
- package/src/hooks/engine.ts +391 -0
- package/src/hooks/index.ts +4 -0
- package/src/llm/auth-bridge.ts +198 -0
- package/src/llm/circuit-breaker.ts +140 -0
- package/src/llm/config-loader.ts +201 -0
- package/src/llm/cost-calculator.ts +171 -0
- package/src/llm/index.ts +8 -0
- package/src/llm/model-aliases.ts +115 -0
- package/src/llm/provider-registry.ts +63 -0
- package/src/llm/providers/anthropic.ts +433 -0
- package/src/llm/providers/bedrock.ts +477 -0
- package/src/llm/providers/google.ts +405 -0
- package/src/llm/providers/ollama.ts +767 -0
- package/src/llm/providers/openai-compatible.ts +340 -0
- package/src/llm/providers/openai.ts +328 -0
- package/src/llm/providers/openrouter.ts +338 -0
- package/src/llm/router.ts +1035 -0
- package/src/llm/types.ts +232 -0
- package/src/lsp/client.ts +298 -0
- package/src/lsp/languages.ts +116 -0
- package/src/lsp/manager.ts +278 -0
- package/src/mcp/client.ts +402 -0
- package/src/mcp/index.ts +5 -0
- package/src/mcp/manager.ts +133 -0
- package/src/nimbus.ts +214 -0
- package/src/plugins/index.ts +27 -0
- package/src/plugins/loader.ts +334 -0
- package/src/plugins/manager.ts +376 -0
- package/src/plugins/types.ts +284 -0
- package/src/scanners/cicd-scanner.ts +258 -0
- package/src/scanners/cloud-scanner.ts +466 -0
- package/src/scanners/framework-scanner.ts +469 -0
- package/src/scanners/iac-scanner.ts +388 -0
- package/src/scanners/index.ts +539 -0
- package/src/scanners/language-scanner.ts +276 -0
- package/src/scanners/package-manager-scanner.ts +277 -0
- package/src/scanners/types.ts +172 -0
- package/src/sessions/manager.ts +365 -0
- package/src/sessions/types.ts +44 -0
- package/src/sharing/sync.ts +296 -0
- package/src/sharing/viewer.ts +97 -0
- package/src/snapshots/index.ts +2 -0
- package/src/snapshots/manager.ts +530 -0
- package/src/state/artifacts.ts +147 -0
- package/src/state/audit.ts +137 -0
- package/src/state/billing.ts +240 -0
- package/src/state/checkpoints.ts +117 -0
- package/src/state/config.ts +67 -0
- package/src/state/conversations.ts +14 -0
- package/src/state/credentials.ts +154 -0
- package/src/state/db.ts +58 -0
- package/src/state/index.ts +26 -0
- package/src/state/messages.ts +115 -0
- package/src/state/projects.ts +123 -0
- package/src/state/schema.ts +236 -0
- package/src/state/sessions.ts +147 -0
- package/src/state/teams.ts +200 -0
- package/src/telemetry.ts +108 -0
- package/src/tools/aws-ops.ts +952 -0
- package/src/tools/azure-ops.ts +579 -0
- package/src/tools/file-ops.ts +593 -0
- package/src/tools/gcp-ops.ts +625 -0
- package/src/tools/git-ops.ts +773 -0
- package/src/tools/github-ops.ts +799 -0
- package/src/tools/helm-ops.ts +943 -0
- package/src/tools/index.ts +17 -0
- package/src/tools/k8s-ops.ts +819 -0
- package/src/tools/schemas/converter.ts +184 -0
- package/src/tools/schemas/devops.ts +612 -0
- package/src/tools/schemas/index.ts +73 -0
- package/src/tools/schemas/standard.ts +1144 -0
- package/src/tools/schemas/types.ts +705 -0
- package/src/tools/terraform-ops.ts +862 -0
- package/src/types/ambient.d.ts +193 -0
- package/src/types/config.ts +83 -0
- package/src/types/drift.ts +116 -0
- package/src/types/enterprise.ts +335 -0
- package/src/types/index.ts +20 -0
- package/src/types/plan.ts +44 -0
- package/src/types/request.ts +65 -0
- package/src/types/response.ts +54 -0
- package/src/types/service.ts +51 -0
- package/src/ui/App.tsx +997 -0
- package/src/ui/DeployPreview.tsx +169 -0
- package/src/ui/Header.tsx +68 -0
- package/src/ui/InputBox.tsx +350 -0
- package/src/ui/MessageList.tsx +585 -0
- package/src/ui/PermissionPrompt.tsx +151 -0
- package/src/ui/StatusBar.tsx +158 -0
- package/src/ui/ToolCallDisplay.tsx +409 -0
- package/src/ui/chat-ui.ts +853 -0
- package/src/ui/index.ts +33 -0
- package/src/ui/ink/index.ts +711 -0
- package/src/ui/streaming.ts +176 -0
- package/src/ui/types.ts +57 -0
- package/src/utils/analytics.ts +72 -0
- package/src/utils/cost-warning.ts +27 -0
- package/src/utils/env.ts +46 -0
- package/src/utils/errors.ts +69 -0
- package/src/utils/event-bus.ts +38 -0
- package/src/utils/index.ts +24 -0
- package/src/utils/logger.ts +171 -0
- package/src/utils/rate-limiter.ts +121 -0
- package/src/utils/service-auth.ts +49 -0
- package/src/utils/validation.ts +53 -0
- package/src/version.ts +4 -0
- package/src/watcher/index.ts +163 -0
- package/src/wizard/approval.ts +383 -0
- package/src/wizard/index.ts +25 -0
- package/src/wizard/prompts.ts +338 -0
- package/src/wizard/types.ts +171 -0
- package/src/wizard/ui.ts +556 -0
- package/src/wizard/wizard.ts +304 -0
- package/tsconfig.json +24 -0
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Version Command
|
|
3
|
+
*
|
|
4
|
+
* Display CLI and component version information
|
|
5
|
+
*
|
|
6
|
+
* Usage: nimbus version [options]
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { logger } from '../utils';
|
|
10
|
+
import { ui } from '../wizard';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Command options
|
|
14
|
+
*/
|
|
15
|
+
export interface VersionOptions {
|
|
16
|
+
verbose?: boolean;
|
|
17
|
+
json?: boolean;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Version information structure
|
|
22
|
+
*/
|
|
23
|
+
interface VersionInfo {
|
|
24
|
+
cli: string;
|
|
25
|
+
node: string;
|
|
26
|
+
bun?: string;
|
|
27
|
+
platform: string;
|
|
28
|
+
arch: string;
|
|
29
|
+
components?: Record<string, string>;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Get the CLI version from package.json or environment
|
|
34
|
+
*/
|
|
35
|
+
function getCliVersion(): string {
|
|
36
|
+
// Try environment variable first (set during build)
|
|
37
|
+
if (process.env.NIMBUS_VERSION) {
|
|
38
|
+
return process.env.NIMBUS_VERSION;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Try npm_package_version (available when run via npm/bun)
|
|
42
|
+
if (process.env.npm_package_version) {
|
|
43
|
+
return process.env.npm_package_version;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Fallback to reading package.json
|
|
47
|
+
try {
|
|
48
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
49
|
+
const pkg = require('../../package.json');
|
|
50
|
+
return pkg.version || '0.1.0';
|
|
51
|
+
} catch {
|
|
52
|
+
return '0.1.0';
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Get Bun version if running under Bun
|
|
58
|
+
*/
|
|
59
|
+
function getBunVersion(): string | undefined {
|
|
60
|
+
// Check for Bun global
|
|
61
|
+
const globalAny = globalThis as any;
|
|
62
|
+
if (typeof globalAny.Bun !== 'undefined') {
|
|
63
|
+
return globalAny.Bun.version;
|
|
64
|
+
}
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Fetch component versions from services (for verbose mode)
|
|
70
|
+
*/
|
|
71
|
+
async function fetchComponentVersions(): Promise<Record<string, string>> {
|
|
72
|
+
const components: Record<string, string> = {};
|
|
73
|
+
const services = [
|
|
74
|
+
{ name: 'core-engine', url: process.env.CORE_ENGINE_URL || 'http://localhost:3001' },
|
|
75
|
+
{ name: 'llm-service', url: process.env.LLM_SERVICE_URL || 'http://localhost:3002' },
|
|
76
|
+
{
|
|
77
|
+
name: 'generator-service',
|
|
78
|
+
url: process.env.GENERATOR_SERVICE_URL || 'http://localhost:3003',
|
|
79
|
+
},
|
|
80
|
+
{ name: 'terraform-tools', url: process.env.TERRAFORM_TOOLS_URL || 'http://localhost:3006' },
|
|
81
|
+
{ name: 'k8s-tools', url: process.env.K8S_TOOLS_URL || 'http://localhost:3007' },
|
|
82
|
+
{ name: 'helm-tools', url: process.env.HELM_TOOLS_URL || 'http://localhost:3008' },
|
|
83
|
+
];
|
|
84
|
+
|
|
85
|
+
const fetchWithTimeout = async (url: string, timeout = 2000): Promise<Response> => {
|
|
86
|
+
const controller = new AbortController();
|
|
87
|
+
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
88
|
+
try {
|
|
89
|
+
const response = await fetch(url, { signal: controller.signal });
|
|
90
|
+
clearTimeout(timeoutId);
|
|
91
|
+
return response;
|
|
92
|
+
} catch {
|
|
93
|
+
clearTimeout(timeoutId);
|
|
94
|
+
throw new Error('Timeout');
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
await Promise.all(
|
|
99
|
+
services.map(async service => {
|
|
100
|
+
try {
|
|
101
|
+
const response = await fetchWithTimeout(`${service.url}/health`);
|
|
102
|
+
if (response.ok) {
|
|
103
|
+
const data = (await response.json()) as { version?: string; status?: string };
|
|
104
|
+
components[service.name] = data.version || 'running';
|
|
105
|
+
} else {
|
|
106
|
+
components[service.name] = 'unavailable';
|
|
107
|
+
}
|
|
108
|
+
} catch {
|
|
109
|
+
components[service.name] = 'unavailable';
|
|
110
|
+
}
|
|
111
|
+
})
|
|
112
|
+
);
|
|
113
|
+
|
|
114
|
+
return components;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Run the version command
|
|
119
|
+
*/
|
|
120
|
+
export async function versionCommand(options: VersionOptions = {}): Promise<void> {
|
|
121
|
+
logger.debug('Running version command', { options });
|
|
122
|
+
|
|
123
|
+
const versionInfo: VersionInfo = {
|
|
124
|
+
cli: getCliVersion(),
|
|
125
|
+
node: process.version,
|
|
126
|
+
bun: getBunVersion(),
|
|
127
|
+
platform: process.platform,
|
|
128
|
+
arch: process.arch,
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
// Fetch component versions in verbose mode
|
|
132
|
+
if (options.verbose) {
|
|
133
|
+
ui.startSpinner({ message: 'Fetching component versions...' });
|
|
134
|
+
versionInfo.components = await fetchComponentVersions();
|
|
135
|
+
ui.stopSpinnerSuccess('');
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// JSON output
|
|
139
|
+
if (options.json) {
|
|
140
|
+
console.log(JSON.stringify(versionInfo, null, 2));
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// Human-readable output
|
|
145
|
+
ui.print(`nimbus version ${versionInfo.cli}`);
|
|
146
|
+
|
|
147
|
+
if (options.verbose) {
|
|
148
|
+
ui.newLine();
|
|
149
|
+
ui.print(`Runtime:`);
|
|
150
|
+
if (versionInfo.bun) {
|
|
151
|
+
ui.print(` Bun: ${versionInfo.bun}`);
|
|
152
|
+
}
|
|
153
|
+
ui.print(` Node: ${versionInfo.node}`);
|
|
154
|
+
ui.print(` Platform: ${versionInfo.platform}`);
|
|
155
|
+
ui.print(` Arch: ${versionInfo.arch}`);
|
|
156
|
+
|
|
157
|
+
if (versionInfo.components) {
|
|
158
|
+
ui.newLine();
|
|
159
|
+
ui.print(`Components:`);
|
|
160
|
+
for (const [name, version] of Object.entries(versionInfo.components)) {
|
|
161
|
+
const status =
|
|
162
|
+
version === 'unavailable' ? ui.color(version, 'red') : ui.color(version, 'green');
|
|
163
|
+
ui.print(` ${name.padEnd(18)} ${status}`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// Export as default command
|
|
170
|
+
export default versionCommand;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime Compatibility Layer
|
|
3
|
+
*
|
|
4
|
+
* Detects whether we're running under Bun or Node.js and provides
|
|
5
|
+
* compatibility shims for Bun-specific APIs when running under Node.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/** Whether the current runtime is Bun. */
|
|
9
|
+
export const isBun = typeof globalThis.Bun !== 'undefined';
|
|
10
|
+
|
|
11
|
+
/** Whether the current runtime is Node.js (without Bun). */
|
|
12
|
+
export const isNode = !isBun && typeof process !== 'undefined' && !!process.versions?.node;
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite Compatibility Layer
|
|
3
|
+
*
|
|
4
|
+
* Uses bun:sqlite when running under Bun, falls back to better-sqlite3
|
|
5
|
+
* under Node.js. Both libraries have nearly identical APIs.
|
|
6
|
+
*
|
|
7
|
+
* Exports:
|
|
8
|
+
* - `Database` (value) -- the constructor, usable as `new Database(path)`
|
|
9
|
+
* - `Database` (type) -- the instance interface, usable as `db: Database`
|
|
10
|
+
*
|
|
11
|
+
* This dual export mirrors how a native `class` declaration works in
|
|
12
|
+
* TypeScript: the same identifier serves as both a value and a type.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import { isBun } from './runtime';
|
|
16
|
+
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
// Type definitions
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
|
|
21
|
+
/** Prepared statement returned by Database.prepare(). */
|
|
22
|
+
export interface Statement {
|
|
23
|
+
run(...params: unknown[]): unknown;
|
|
24
|
+
get(...params: unknown[]): unknown;
|
|
25
|
+
all(...params: unknown[]): unknown[];
|
|
26
|
+
finalize?(): void;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Minimal Database instance interface shared by bun:sqlite and better-sqlite3.
|
|
31
|
+
*
|
|
32
|
+
* When consumer code writes `db: Database`, TypeScript resolves
|
|
33
|
+
* the *type* side of the `Database` export -- which is this interface.
|
|
34
|
+
*/
|
|
35
|
+
interface DatabaseI {
|
|
36
|
+
exec(sql: string): void;
|
|
37
|
+
prepare(sql: string): Statement;
|
|
38
|
+
close(): void;
|
|
39
|
+
transaction<T>(fn: (...args: any[]) => T): (...args: any[]) => T;
|
|
40
|
+
|
|
41
|
+
// bun:sqlite specific methods used throughout the codebase
|
|
42
|
+
run(sql: string, params?: unknown[]): unknown;
|
|
43
|
+
query(sql: string): Statement;
|
|
44
|
+
|
|
45
|
+
// Allow accessing additional runtime-specific properties
|
|
46
|
+
[key: string]: unknown;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// ---------------------------------------------------------------------------
|
|
50
|
+
// Runtime selection
|
|
51
|
+
// ---------------------------------------------------------------------------
|
|
52
|
+
|
|
53
|
+
// Re-export the Database class from the appropriate backend.
|
|
54
|
+
// Both bun:sqlite and better-sqlite3 expose a compatible API:
|
|
55
|
+
// new Database(path), db.exec(sql), db.prepare(sql).run/get/all, db.close()
|
|
56
|
+
|
|
57
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
58
|
+
let _Impl: any;
|
|
59
|
+
|
|
60
|
+
if (isBun) {
|
|
61
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
62
|
+
_Impl = require('bun:sqlite').Database;
|
|
63
|
+
} else {
|
|
64
|
+
try {
|
|
65
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
66
|
+
const BetterSqlite3 = require('better-sqlite3');
|
|
67
|
+
// Polyfill bun:sqlite-compatible methods on better-sqlite3 instances
|
|
68
|
+
const OrigProto = BetterSqlite3.prototype;
|
|
69
|
+
if (!OrigProto.run) {
|
|
70
|
+
OrigProto.run = function (sql: string, params?: unknown[]) {
|
|
71
|
+
const stmt = this.prepare(sql);
|
|
72
|
+
return params ? stmt.run(...params) : stmt.run();
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
if (!OrigProto.query) {
|
|
76
|
+
OrigProto.query = function (sql: string) {
|
|
77
|
+
return this.prepare(sql);
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
_Impl = BetterSqlite3;
|
|
81
|
+
} catch {
|
|
82
|
+
throw new Error(
|
|
83
|
+
'Nimbus requires either the Bun runtime (bun:sqlite) or the better-sqlite3 package.\n' +
|
|
84
|
+
'Install better-sqlite3: npm install better-sqlite3\n' +
|
|
85
|
+
'Or install Bun: curl -fsSL https://bun.sh/install | bash'
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// ---------------------------------------------------------------------------
|
|
91
|
+
// Dual export: value + type under the same name
|
|
92
|
+
// ---------------------------------------------------------------------------
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* The Database constructor at runtime.
|
|
96
|
+
*
|
|
97
|
+
* TypeScript resolves `Database` to either the *value* (constructor) or
|
|
98
|
+
* the *type* (instance interface) depending on context:
|
|
99
|
+
* - `new Database(path)` -- uses the value
|
|
100
|
+
* - `db: Database` -- uses the type (the interface below)
|
|
101
|
+
*/
|
|
102
|
+
const Database = _Impl as { new (path: string): DatabaseI };
|
|
103
|
+
|
|
104
|
+
/** The instance type, exported under the same name for type-position use. */
|
|
105
|
+
type Database = DatabaseI;
|
|
106
|
+
|
|
107
|
+
export { Database };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration Module
|
|
3
|
+
*
|
|
4
|
+
* Exports configuration management utilities
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export { ConfigManager, configManager, CONFIG_KEYS } from './manager';
|
|
8
|
+
export type {
|
|
9
|
+
NimbusConfig,
|
|
10
|
+
WorkspaceConfig,
|
|
11
|
+
LLMConfig,
|
|
12
|
+
HistoryConfig,
|
|
13
|
+
SafetyConfig,
|
|
14
|
+
UIConfig,
|
|
15
|
+
ConfigKey,
|
|
16
|
+
ConfigKeyInfo,
|
|
17
|
+
} from './types';
|