@laldigital/novaserve 2.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.
Files changed (123) hide show
  1. package/README.md +384 -0
  2. package/bin/nova.js +2 -0
  3. package/dist/commands/ai.d.ts +9 -0
  4. package/dist/commands/ai.d.ts.map +1 -0
  5. package/dist/commands/ai.js +152 -0
  6. package/dist/commands/ai.js.map +1 -0
  7. package/dist/commands/build.d.ts +6 -0
  8. package/dist/commands/build.d.ts.map +1 -0
  9. package/dist/commands/build.js +62 -0
  10. package/dist/commands/build.js.map +1 -0
  11. package/dist/commands/cost.d.ts +8 -0
  12. package/dist/commands/cost.d.ts.map +1 -0
  13. package/dist/commands/cost.js +50 -0
  14. package/dist/commands/cost.js.map +1 -0
  15. package/dist/commands/dashboard.d.ts +3 -0
  16. package/dist/commands/dashboard.d.ts.map +1 -0
  17. package/dist/commands/dashboard.js +25 -0
  18. package/dist/commands/dashboard.js.map +1 -0
  19. package/dist/commands/deploy.d.ts +8 -0
  20. package/dist/commands/deploy.d.ts.map +1 -0
  21. package/dist/commands/deploy.js +128 -0
  22. package/dist/commands/deploy.js.map +1 -0
  23. package/dist/commands/destroy.d.ts +6 -0
  24. package/dist/commands/destroy.d.ts.map +1 -0
  25. package/dist/commands/destroy.js +75 -0
  26. package/dist/commands/destroy.js.map +1 -0
  27. package/dist/commands/dev.d.ts +8 -0
  28. package/dist/commands/dev.d.ts.map +1 -0
  29. package/dist/commands/dev.js +60 -0
  30. package/dist/commands/dev.js.map +1 -0
  31. package/dist/commands/diff.d.ts +8 -0
  32. package/dist/commands/diff.d.ts.map +1 -0
  33. package/dist/commands/diff.js +60 -0
  34. package/dist/commands/diff.js.map +1 -0
  35. package/dist/commands/doctor.d.ts +9 -0
  36. package/dist/commands/doctor.d.ts.map +1 -0
  37. package/dist/commands/doctor.js +61 -0
  38. package/dist/commands/doctor.js.map +1 -0
  39. package/dist/commands/drift.d.ts +8 -0
  40. package/dist/commands/drift.d.ts.map +1 -0
  41. package/dist/commands/drift.js +81 -0
  42. package/dist/commands/drift.js.map +1 -0
  43. package/dist/commands/events.d.ts +8 -0
  44. package/dist/commands/events.d.ts.map +1 -0
  45. package/dist/commands/events.js +102 -0
  46. package/dist/commands/events.js.map +1 -0
  47. package/dist/commands/graph.d.ts +8 -0
  48. package/dist/commands/graph.d.ts.map +1 -0
  49. package/dist/commands/graph.js +55 -0
  50. package/dist/commands/graph.js.map +1 -0
  51. package/dist/commands/impact.d.ts +9 -0
  52. package/dist/commands/impact.d.ts.map +1 -0
  53. package/dist/commands/impact.js +65 -0
  54. package/dist/commands/impact.js.map +1 -0
  55. package/dist/commands/init.d.ts +8 -0
  56. package/dist/commands/init.d.ts.map +1 -0
  57. package/dist/commands/init.js +339 -0
  58. package/dist/commands/init.js.map +1 -0
  59. package/dist/commands/invoke.d.ts +9 -0
  60. package/dist/commands/invoke.d.ts.map +1 -0
  61. package/dist/commands/invoke.js +64 -0
  62. package/dist/commands/invoke.js.map +1 -0
  63. package/dist/commands/ir.d.ts +8 -0
  64. package/dist/commands/ir.d.ts.map +1 -0
  65. package/dist/commands/ir.js +85 -0
  66. package/dist/commands/ir.js.map +1 -0
  67. package/dist/commands/logs.d.ts +3 -0
  68. package/dist/commands/logs.d.ts.map +1 -0
  69. package/dist/commands/logs.js +50 -0
  70. package/dist/commands/logs.js.map +1 -0
  71. package/dist/commands/plan.d.ts +9 -0
  72. package/dist/commands/plan.d.ts.map +1 -0
  73. package/dist/commands/plan.js +81 -0
  74. package/dist/commands/plan.js.map +1 -0
  75. package/dist/commands/plugins.d.ts +9 -0
  76. package/dist/commands/plugins.d.ts.map +1 -0
  77. package/dist/commands/plugins.js +49 -0
  78. package/dist/commands/plugins.js.map +1 -0
  79. package/dist/commands/promote.d.ts +9 -0
  80. package/dist/commands/promote.d.ts.map +1 -0
  81. package/dist/commands/promote.js +44 -0
  82. package/dist/commands/promote.js.map +1 -0
  83. package/dist/commands/rollback.d.ts +9 -0
  84. package/dist/commands/rollback.d.ts.map +1 -0
  85. package/dist/commands/rollback.js +129 -0
  86. package/dist/commands/rollback.js.map +1 -0
  87. package/dist/commands/security.d.ts +8 -0
  88. package/dist/commands/security.d.ts.map +1 -0
  89. package/dist/commands/security.js +84 -0
  90. package/dist/commands/security.js.map +1 -0
  91. package/dist/commands/state.d.ts +8 -0
  92. package/dist/commands/state.d.ts.map +1 -0
  93. package/dist/commands/state.js +135 -0
  94. package/dist/commands/state.js.map +1 -0
  95. package/dist/commands/trace.d.ts +8 -0
  96. package/dist/commands/trace.d.ts.map +1 -0
  97. package/dist/commands/trace.js +66 -0
  98. package/dist/commands/trace.js.map +1 -0
  99. package/dist/index.d.ts +35 -0
  100. package/dist/index.d.ts.map +1 -0
  101. package/dist/index.js +102 -0
  102. package/dist/index.js.map +1 -0
  103. package/dist/runtime.d.ts +5 -0
  104. package/dist/runtime.d.ts.map +1 -0
  105. package/dist/runtime.js +5 -0
  106. package/dist/runtime.js.map +1 -0
  107. package/dist/ui/banner.d.ts +14 -0
  108. package/dist/ui/banner.d.ts.map +1 -0
  109. package/dist/ui/banner.js +37 -0
  110. package/dist/ui/banner.js.map +1 -0
  111. package/dist/ui/spinner.d.ts +15 -0
  112. package/dist/ui/spinner.d.ts.map +1 -0
  113. package/dist/ui/spinner.js +39 -0
  114. package/dist/ui/spinner.js.map +1 -0
  115. package/dist/utils/config-loader.d.ts +12 -0
  116. package/dist/utils/config-loader.d.ts.map +1 -0
  117. package/dist/utils/config-loader.js +29 -0
  118. package/dist/utils/config-loader.js.map +1 -0
  119. package/dist/utils/logger.d.ts +24 -0
  120. package/dist/utils/logger.d.ts.map +1 -0
  121. package/dist/utils/logger.js +52 -0
  122. package/dist/utils/logger.js.map +1 -0
  123. package/package.json +86 -0
@@ -0,0 +1,135 @@
1
+ /**
2
+ * `nova state`
3
+ *
4
+ * Manages Nova deployment state graph, resource mappings, locks, and history.
5
+ */
6
+ import { Command } from "commander";
7
+ import chalk from "chalk";
8
+ import { StateManager } from "novaserve-core";
9
+ import { loadConfig } from "../utils/config-loader.js";
10
+ export function stateCommand() {
11
+ const cmd = new Command("state").description("Inspect and manage Nova deployment state");
12
+ cmd
13
+ .command("list")
14
+ .description("List all active deployed resources in state")
15
+ .option("-e, --env <environment>", "Target environment", "production")
16
+ .action(async (options) => {
17
+ console.log(chalk.bold.yellow("\n◆ NovaServe Active Deployment State\n"));
18
+ try {
19
+ const app = await loadConfig();
20
+ const stateMgr = new StateManager(process.cwd());
21
+ const resources = stateMgr.getResources(app.name || "nova-app", options.env);
22
+ if (resources.length === 0) {
23
+ console.log(chalk.gray(`State is empty for app "${app.name}" (${options.env}). No resources deployed yet.`));
24
+ return;
25
+ }
26
+ console.log(`Application: ${chalk.cyan(app.name)}`);
27
+ console.log(`Environment: ${chalk.bold.magenta(options.env)}\n`);
28
+ for (const res of resources) {
29
+ console.log(`• ${chalk.cyan(res.id)} (${chalk.bold(res.type)}) - Status: ${chalk.green(res.status)}`);
30
+ }
31
+ console.log("");
32
+ }
33
+ catch (err) {
34
+ const msg = err instanceof Error ? err.message : String(err);
35
+ console.log(chalk.red(`State list failed: ${msg}`));
36
+ }
37
+ });
38
+ cmd
39
+ .command("inspect <id>")
40
+ .description("Inspect state details for a specific resource")
41
+ .option("-e, --env <environment>", "Target environment", "production")
42
+ .action(async (id, options) => {
43
+ console.log(chalk.bold.yellow(`\n◆ NovaServe State Inspect: ${id}\n`));
44
+ try {
45
+ const app = await loadConfig();
46
+ const stateMgr = new StateManager(process.cwd());
47
+ const resources = stateMgr.getResources(app.name || "nova-app", options.env);
48
+ const res = resources.find((r) => r.id === id || r.name === id);
49
+ if (!res) {
50
+ console.log(chalk.red(`Resource "${id}" not found in active state.`));
51
+ return;
52
+ }
53
+ console.log(JSON.stringify(res, null, 2));
54
+ }
55
+ catch (err) {
56
+ const msg = err instanceof Error ? err.message : String(err);
57
+ console.log(chalk.red(`State inspect failed: ${msg}`));
58
+ }
59
+ });
60
+ cmd
61
+ .command("verify")
62
+ .description("Verify state file integrity and lock status")
63
+ .option("-e, --env <environment>", "Target environment", "production")
64
+ .action(async (options) => {
65
+ console.log(chalk.bold.yellow("\n◆ NovaServe State Integrity Check\n"));
66
+ try {
67
+ const app = await loadConfig();
68
+ const stateMgr = new StateManager(process.cwd());
69
+ const verification = stateMgr.verifyState(app.name || "nova-app", options.env);
70
+ if (verification.valid) {
71
+ console.log(chalk.bold.green("✓ State file integrity verified. Zero corruption or schema errors detected.\n"));
72
+ }
73
+ else {
74
+ console.log(chalk.bold.red("✗ State Integrity Issues:"));
75
+ for (const issue of verification.issues) {
76
+ console.log(chalk.red(` • ${issue}`));
77
+ }
78
+ console.log("");
79
+ }
80
+ }
81
+ catch (err) {
82
+ const msg = err instanceof Error ? err.message : String(err);
83
+ console.log(chalk.red(`State verification failed: ${msg}`));
84
+ }
85
+ });
86
+ cmd
87
+ .command("export")
88
+ .description("Export raw deployment state graph as JSON")
89
+ .option("-e, --env <environment>", "Target environment", "production")
90
+ .action(async (options) => {
91
+ try {
92
+ const app = await loadConfig();
93
+ const stateMgr = new StateManager(process.cwd());
94
+ const history = stateMgr.getHistory(app.name || "nova-app", options.env);
95
+ console.log(JSON.stringify(history, null, 2));
96
+ }
97
+ catch (err) {
98
+ const msg = err instanceof Error ? err.message : String(err);
99
+ console.log(chalk.red(`State export failed: ${msg}`));
100
+ }
101
+ });
102
+ cmd
103
+ .command("reconcile")
104
+ .description("Query live cloud infrastructure to reconcile UNKNOWN or uncertain resource states")
105
+ .option("-e, --env <environment>", "Target environment", "production")
106
+ .action(async (options) => {
107
+ console.log(chalk.bold.yellow("\n◆ NovaServe State Reconciliation\n"));
108
+ try {
109
+ const app = await loadConfig();
110
+ const stateMgr = new StateManager(process.cwd());
111
+ const resources = stateMgr.getResources(app.name || "nova-app", options.env);
112
+ if (resources.length === 0) {
113
+ console.log(chalk.gray(`State is empty. Nothing to reconcile.`));
114
+ return;
115
+ }
116
+ console.log(`Inspecting live cloud state for ${resources.length} resource(s)...`);
117
+ const { AWSLiveStateInspector } = await import("novaserve-provider-aws");
118
+ const inspector = new AWSLiveStateInspector(app.config.region || "us-east-1", app.name || "nova-app");
119
+ const observed = await inspector.inspectResources(resources.map((r) => ({ id: r.id, type: r.type, name: r.name, config: r.config })));
120
+ const result = stateMgr.reconcileState(app.name || "nova-app", options.env, observed);
121
+ if (result.reconciledCount === 0) {
122
+ console.log(chalk.bold.green(`✓ All ${resources.length} resource states match live infrastructure.\n`));
123
+ }
124
+ else {
125
+ console.log(chalk.bold.green(`✓ Reconciled ${result.reconciledCount} resource(s): ${result.updatedResources.join(", ")}\n`));
126
+ }
127
+ }
128
+ catch (err) {
129
+ const msg = err instanceof Error ? err.message : String(err);
130
+ console.log(chalk.red(`State reconciliation failed: ${msg}`));
131
+ }
132
+ });
133
+ return cmd;
134
+ }
135
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/commands/state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * `nova trace`
3
+ *
4
+ * OpenTelemetry distributed trace waterfall viewer.
5
+ */
6
+ import { Command } from "commander";
7
+ export declare function traceCommand(): Command;
8
+ //# sourceMappingURL=trace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../../src/commands/trace.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,YAAY,IAAI,OAAO,CA4DtC"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * `nova trace`
3
+ *
4
+ * OpenTelemetry distributed trace waterfall viewer.
5
+ */
6
+ import { Command } from "commander";
7
+ import chalk from "chalk";
8
+ import { NovaTelemetry } from "novaserve-core";
9
+ export function traceCommand() {
10
+ return new Command("trace")
11
+ .description("Inspect OpenTelemetry distributed traces and span waterfalls")
12
+ .argument("[traceId]", "Specific trace ID to inspect")
13
+ .action((traceId) => {
14
+ console.log(chalk.bold.yellow("\n◆ NovaServe OpenTelemetry Trace Viewer\n"));
15
+ if (!traceId) {
16
+ // List recent traces
17
+ const traces = NovaTelemetry.listTraces(5);
18
+ if (traces.length === 0) {
19
+ // Seed demonstration trace
20
+ const t = NovaTelemetry.startTrace("my-nova-app", "production");
21
+ NovaTelemetry.recordSpan(t.traceId, {
22
+ name: "GET /users",
23
+ resourceId: "api-api",
24
+ kind: "SERVER",
25
+ status: "OK",
26
+ durationMs: 142,
27
+ attributes: { httpMethod: "GET", httpStatus: 200 },
28
+ });
29
+ NovaTelemetry.recordSpan(t.traceId, {
30
+ name: "users.list",
31
+ resourceId: "function-usersList",
32
+ kind: "INTERNAL",
33
+ status: "OK",
34
+ durationMs: 85,
35
+ attributes: { memoryUsedMb: 128 },
36
+ });
37
+ NovaTelemetry.recordSpan(t.traceId, {
38
+ name: "postgres.query",
39
+ resourceId: "database-main",
40
+ kind: "CLIENT",
41
+ status: "OK",
42
+ durationMs: 42,
43
+ attributes: { query: "SELECT * FROM users" },
44
+ });
45
+ traceId = t.traceId;
46
+ }
47
+ }
48
+ const trace = traceId ? NovaTelemetry.getTrace(traceId) : NovaTelemetry.listTraces(1)[0];
49
+ if (!trace) {
50
+ console.log(chalk.red(`Trace ID "${traceId}" not found.`));
51
+ return;
52
+ }
53
+ console.log(`Trace ID: ${chalk.bold.cyan(trace.traceId)}`);
54
+ console.log(`Application: ${chalk.yellow(trace.appName)} (${trace.environment})`);
55
+ console.log(`Duration: ${chalk.bold.green(`${trace.totalDurationMs}ms`)}`);
56
+ console.log(`Status: ${trace.hasError ? chalk.red("ERROR") : chalk.green("OK")}\n`);
57
+ console.log(chalk.bold("Span Waterfall:"));
58
+ for (const span of trace.spans) {
59
+ console.log(`├── [${chalk.bold.cyan(span.kind)}] ${chalk.bold(span.name)} (${chalk.yellow(span.resourceId)})`);
60
+ console.log(`│ ├── Duration: ${span.durationMs}ms | Status: ${span.status === "OK" ? chalk.green("OK") : chalk.red("ERROR")}`);
61
+ console.log(`│ └── Attributes: ${chalk.gray(JSON.stringify(span.attributes))}`);
62
+ }
63
+ console.log("");
64
+ });
65
+ }
66
+ //# sourceMappingURL=trace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace.js","sourceRoot":"","sources":["../../src/commands/trace.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * NovaServe CLI
4
+ *
5
+ * The next-generation, cloud-agnostic application infrastructure framework CLI.
6
+ *
7
+ * Core Commands:
8
+ * nova init — Create a new project
9
+ * nova dev — Start local development server (emulating IR graph)
10
+ * nova build — Compile application into Nova IR and bundle code
11
+ * nova plan — Generate diff-driven deployment execution plan & cost estimate
12
+ * nova ir — Inspect, validate, and hash Nova IR Graph (1.0.0)
13
+ * nova diff — Display granular resource attribute changes
14
+ * nova graph — Visualize dependency DAG & least-privilege IAM graph
15
+ * nova impact — Perform blast-radius impact analysis for a resource ID
16
+ * nova state — Inspect deployment state graph and lock status
17
+ * nova drift — Detect live infrastructure configuration drift & auto-fix
18
+ * nova deploy — Execute parallel incremental cloud deployment (supports --preview)
19
+ * nova rollback — Rollback application to a previous deployment state
20
+ * nova deployment — Inspect deployment history and resume paused journals
21
+ * nova promote — Promote application IR graph across environments (staging → production)
22
+ * nova destroy — Safely tear down infrastructure
23
+ * nova logs — View live correlated resource streams
24
+ * nova trace — Inspect OpenTelemetry distributed trace waterfalls
25
+ * nova events — Inspect event payloads and trigger local event replays
26
+ * nova doctor — Run signature diagnostics & deterministic auto-fixes
27
+ * nova security — Audit infrastructure for wildcard IAM, public storage, & flaws
28
+ * nova cost — Infrastructure cost intelligence & optimization advice
29
+ * nova ai — Intelligent AI infrastructure assistant
30
+ * nova add — Add a plugin package from the NovaServe capability marketplace
31
+ * nova plugins — List installed capability-gated plugins
32
+ * nova dashboard — Launch local visual management console
33
+ */
34
+ export { defineApp, api, fn, function_, storage, database, queue, cron, cache, secret, env, link, } from "novaserve-sdk";
35
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AA0EH,OAAO,EACL,SAAS,EACT,GAAG,EACH,EAAE,EACF,SAAS,EACT,OAAO,EACP,QAAQ,EACR,KAAK,EACL,IAAI,EACJ,KAAK,EACL,MAAM,EACN,GAAG,EACH,IAAI,GACL,MAAM,eAAe,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,102 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * NovaServe CLI
4
+ *
5
+ * The next-generation, cloud-agnostic application infrastructure framework CLI.
6
+ *
7
+ * Core Commands:
8
+ * nova init — Create a new project
9
+ * nova dev — Start local development server (emulating IR graph)
10
+ * nova build — Compile application into Nova IR and bundle code
11
+ * nova plan — Generate diff-driven deployment execution plan & cost estimate
12
+ * nova ir — Inspect, validate, and hash Nova IR Graph (1.0.0)
13
+ * nova diff — Display granular resource attribute changes
14
+ * nova graph — Visualize dependency DAG & least-privilege IAM graph
15
+ * nova impact — Perform blast-radius impact analysis for a resource ID
16
+ * nova state — Inspect deployment state graph and lock status
17
+ * nova drift — Detect live infrastructure configuration drift & auto-fix
18
+ * nova deploy — Execute parallel incremental cloud deployment (supports --preview)
19
+ * nova rollback — Rollback application to a previous deployment state
20
+ * nova deployment — Inspect deployment history and resume paused journals
21
+ * nova promote — Promote application IR graph across environments (staging → production)
22
+ * nova destroy — Safely tear down infrastructure
23
+ * nova logs — View live correlated resource streams
24
+ * nova trace — Inspect OpenTelemetry distributed trace waterfalls
25
+ * nova events — Inspect event payloads and trigger local event replays
26
+ * nova doctor — Run signature diagnostics & deterministic auto-fixes
27
+ * nova security — Audit infrastructure for wildcard IAM, public storage, & flaws
28
+ * nova cost — Infrastructure cost intelligence & optimization advice
29
+ * nova ai — Intelligent AI infrastructure assistant
30
+ * nova add — Add a plugin package from the NovaServe capability marketplace
31
+ * nova plugins — List installed capability-gated plugins
32
+ * nova dashboard — Launch local visual management console
33
+ */
34
+ import { Command } from "commander";
35
+ import { printBanner } from "./ui/banner.js";
36
+ import { initCommand } from "./commands/init.js";
37
+ import { devCommand } from "./commands/dev.js";
38
+ import { buildCommand } from "./commands/build.js";
39
+ import { planCommand } from "./commands/plan.js";
40
+ import { irCommand } from "./commands/ir.js";
41
+ import { diffCommand } from "./commands/diff.js";
42
+ import { graphCommand } from "./commands/graph.js";
43
+ import { impactCommand } from "./commands/impact.js";
44
+ import { stateCommand } from "./commands/state.js";
45
+ import { driftCommand } from "./commands/drift.js";
46
+ import { deployCommand } from "./commands/deploy.js";
47
+ import { rollbackCommand, deploymentCommand } from "./commands/rollback.js";
48
+ import { promoteCommand } from "./commands/promote.js";
49
+ import { destroyCommand } from "./commands/destroy.js";
50
+ import { logsCommand } from "./commands/logs.js";
51
+ import { invokeCommand } from "./commands/invoke.js";
52
+ import { traceCommand } from "./commands/trace.js";
53
+ import { eventsCommand } from "./commands/events.js";
54
+ import { doctorCommand } from "./commands/doctor.js";
55
+ import { securityCommand } from "./commands/security.js";
56
+ import { costCommand } from "./commands/cost.js";
57
+ import { aiCommand } from "./commands/ai.js";
58
+ import { addCommand, pluginsCommand } from "./commands/plugins.js";
59
+ import { dashboardCommand } from "./commands/dashboard.js";
60
+ import { createRequire } from "node:module";
61
+ const require = createRequire(import.meta.url);
62
+ const { version } = require("../package.json");
63
+ const program = new Command();
64
+ program
65
+ .name("nova")
66
+ .description("NovaServe — The next-generation, cloud-agnostic serverless development framework.")
67
+ .version(version)
68
+ .hook("preAction", () => {
69
+ printBanner();
70
+ });
71
+ // Register all core commands
72
+ program.addCommand(initCommand());
73
+ program.addCommand(devCommand());
74
+ program.addCommand(buildCommand());
75
+ program.addCommand(planCommand());
76
+ program.addCommand(irCommand());
77
+ program.addCommand(diffCommand());
78
+ program.addCommand(graphCommand());
79
+ program.addCommand(impactCommand());
80
+ program.addCommand(stateCommand());
81
+ program.addCommand(driftCommand());
82
+ program.addCommand(deployCommand());
83
+ program.addCommand(rollbackCommand());
84
+ program.addCommand(deploymentCommand());
85
+ program.addCommand(promoteCommand());
86
+ program.addCommand(destroyCommand());
87
+ program.addCommand(logsCommand());
88
+ program.addCommand(invokeCommand());
89
+ program.addCommand(traceCommand());
90
+ program.addCommand(eventsCommand());
91
+ program.addCommand(doctorCommand());
92
+ program.addCommand(securityCommand());
93
+ program.addCommand(costCommand());
94
+ program.addCommand(aiCommand());
95
+ program.addCommand(addCommand());
96
+ program.addCommand(pluginsCommand());
97
+ program.addCommand(dashboardCommand());
98
+ // Re-export SDK builders for seamless import from "novaserve"
99
+ export { defineApp, api, fn, function_, storage, database, queue, cron, cache, secret, env, link, } from "novaserve-sdk";
100
+ // Parse and execute
101
+ program.parse();
102
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Re-export novaserve-runtime for subpath import "novaserve/runtime"
3
+ */
4
+ export * from "novaserve-runtime";
5
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Re-export novaserve-runtime for subpath import "novaserve/runtime"
3
+ */
4
+ export * from "novaserve-runtime";
5
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * ASCII Art Banner
3
+ *
4
+ * Beautiful terminal branding for NovaServe.
5
+ */
6
+ /**
7
+ * Print the NovaServe banner (only once per CLI invocation).
8
+ */
9
+ export declare function printBanner(compact?: boolean): void;
10
+ /**
11
+ * Print a section header.
12
+ */
13
+ export declare function printSection(title: string): void;
14
+ //# sourceMappingURL=banner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../../src/ui/banner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAeH;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,UAAO,GAAG,IAAI,CAShD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAGhD"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * ASCII Art Banner
3
+ *
4
+ * Beautiful terminal branding for NovaServe.
5
+ */
6
+ const BANNER = `
7
+ ╔══════════════════════════════════════════════════╗
8
+ ║ ║
9
+ ║ ◆ N O V A S E R V E ║
10
+ ║ The future of serverless development ║
11
+ ║ ║
12
+ ╚══════════════════════════════════════════════════╝
13
+ `;
14
+ const BANNER_COMPACT = ` ◆ NovaServe v2.0.0`;
15
+ let bannerPrinted = false;
16
+ /**
17
+ * Print the NovaServe banner (only once per CLI invocation).
18
+ */
19
+ export function printBanner(compact = true) {
20
+ if (bannerPrinted)
21
+ return;
22
+ bannerPrinted = true;
23
+ if (compact) {
24
+ console.log(`\n${BANNER_COMPACT}\n`);
25
+ }
26
+ else {
27
+ console.log(BANNER);
28
+ }
29
+ }
30
+ /**
31
+ * Print a section header.
32
+ */
33
+ export function printSection(title) {
34
+ console.log(`\n ${title}`);
35
+ console.log(` ${"─".repeat(title.length + 2)}\n`);
36
+ }
37
+ //# sourceMappingURL=banner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"banner.js","sourceRoot":"","sources":["../../src/ui/banner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,GAAG;;;;;;;CAOd,CAAC;AAEF,MAAM,cAAc,GAAG,sBAAsB,CAAC;AAE9C,IAAI,aAAa,GAAG,KAAK,CAAC;AAE1B;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAO,GAAG,IAAI;IACxC,IAAI,aAAa;QAAE,OAAO;IAC1B,aAAa,GAAG,IAAI,CAAC;IAErB,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,KAAK,cAAc,IAAI,CAAC,CAAC;IACvC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AACrD,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Spinner Wrapper
3
+ *
4
+ * Beautiful loading spinners for async operations.
5
+ */
6
+ /**
7
+ * Create and manage a terminal spinner.
8
+ * Wraps ora for consistent styling.
9
+ */
10
+ export declare function withSpinner<T>(message: string, fn: () => Promise<T>): Promise<T>;
11
+ /**
12
+ * Create a spinner that can be manually controlled.
13
+ */
14
+ export declare function createSpinner(message: string): Promise<import("ora").Ora>;
15
+ //# sourceMappingURL=spinner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../src/ui/spinner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,wBAAsB,WAAW,CAAC,CAAC,EACjC,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,CAAC,CAkBZ;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,8BAQlD"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Spinner Wrapper
3
+ *
4
+ * Beautiful loading spinners for async operations.
5
+ */
6
+ /**
7
+ * Create and manage a terminal spinner.
8
+ * Wraps ora for consistent styling.
9
+ */
10
+ export async function withSpinner(message, fn) {
11
+ // Dynamic import for ESM compatibility
12
+ const { default: ora } = await import("ora");
13
+ const spinner = ora({
14
+ text: message,
15
+ prefixText: " ",
16
+ color: "cyan",
17
+ }).start();
18
+ try {
19
+ const result = await fn();
20
+ spinner.succeed(message);
21
+ return result;
22
+ }
23
+ catch (error) {
24
+ spinner.fail(message);
25
+ throw error;
26
+ }
27
+ }
28
+ /**
29
+ * Create a spinner that can be manually controlled.
30
+ */
31
+ export async function createSpinner(message) {
32
+ const { default: ora } = await import("ora");
33
+ return ora({
34
+ text: message,
35
+ prefixText: " ",
36
+ color: "cyan",
37
+ });
38
+ }
39
+ //# sourceMappingURL=spinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/ui/spinner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAe,EACf,EAAoB;IAEpB,uCAAuC;IACvC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;IAE7C,MAAM,OAAO,GAAG,GAAG,CAAC;QAClB,IAAI,EAAE,OAAO;QACb,UAAU,EAAE,IAAI;QAChB,KAAK,EAAE,MAAM;KACd,CAAC,CAAC,KAAK,EAAE,CAAC;IAEX,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC;QAC1B,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACzB,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtB,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAe;IACjD,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;IAE7C,OAAO,GAAG,CAAC;QACT,IAAI,EAAE,OAAO;QACb,UAAU,EAAE,IAAI;QAChB,KAAK,EAAE,MAAM;KACd,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Config Loader
3
+ *
4
+ * Loads nova.config.ts from the current project.
5
+ */
6
+ import type { NovaApp } from "novaserve-sdk";
7
+ /**
8
+ * Load the nova config from the current directory.
9
+ * Exits the process with an error message if not found.
10
+ */
11
+ export declare function loadConfig(cwd?: string): Promise<NovaApp>;
12
+ //# sourceMappingURL=config-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/utils/config-loader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C;;;GAGG;AACH,wBAAsB,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAiB/D"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Config Loader
3
+ *
4
+ * Loads nova.config.ts from the current project.
5
+ */
6
+ import { ConfigParser } from "novaserve-core";
7
+ import { logger } from "./logger.js";
8
+ /**
9
+ * Load the nova config from the current directory.
10
+ * Exits the process with an error message if not found.
11
+ */
12
+ export async function loadConfig(cwd) {
13
+ const parser = new ConfigParser(cwd || process.cwd());
14
+ const configFile = parser.findConfigFile();
15
+ if (!configFile) {
16
+ logger.error("No nova.config.ts found in this directory.");
17
+ logger.blank();
18
+ logger.info("Run 'nova init' to create a new project.");
19
+ process.exit(1);
20
+ }
21
+ try {
22
+ return await parser.load();
23
+ }
24
+ catch (error) {
25
+ logger.error(`Failed to load config: ${error instanceof Error ? error.message : String(error)}`);
26
+ process.exit(1);
27
+ }
28
+ }
29
+ //# sourceMappingURL=config-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../src/utils/config-loader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAY;IAC3C,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAEtD,MAAM,UAAU,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC;IAC3C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAC3D,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,OAAO,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Logger
3
+ *
4
+ * Consistent, color-coded logging for the CLI.
5
+ */
6
+ export declare const logger: {
7
+ info(message: string): void;
8
+ success(message: string): void;
9
+ warn(message: string): void;
10
+ error(message: string): void;
11
+ debug(message: string): void;
12
+ /** Print a blank line */
13
+ blank(): void;
14
+ /** Print a key-value pair */
15
+ kv(key: string, value: string): void;
16
+ /** Print a box with content */
17
+ box(lines: Array<{
18
+ key: string;
19
+ value: string;
20
+ }>): void;
21
+ /** Print a diff-style change line */
22
+ diff(action: "+" | "~" | "-" | " ", resource: string, type: string, detail: string): void;
23
+ };
24
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,eAAO,MAAM,MAAM;kBACH,MAAM,GAAG,IAAI;qBAIV,MAAM,GAAG,IAAI;kBAIhB,MAAM,GAAG,IAAI;mBAIZ,MAAM,GAAG,IAAI;mBAIb,MAAM,GAAG,IAAI;IAM5B,yBAAyB;aAChB,IAAI;IAIb,6BAA6B;YACrB,MAAM,SAAS,MAAM,GAAG,IAAI;IAIpC,+BAA+B;eACpB,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAcvD,qCAAqC;iBACxB,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,YAAY,MAAM,QAAQ,MAAM,UAAU,MAAM,GAAG,IAAI;CAI1F,CAAC"}