@vertz/cli 0.2.0 → 0.2.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.
Files changed (5) hide show
  1. package/README.md +101 -107
  2. package/dist/index.d.ts +76 -90
  3. package/dist/index.js +1818 -3500
  4. package/dist/vertz.js +1727 -3352
  5. package/package.json +16 -10
package/README.md CHANGED
@@ -1,132 +1,154 @@
1
1
  # @vertz/cli
2
2
 
3
- The `vertz` command. Create, develop, build, and publish Vertz applications.
3
+ The `vertz` CLI — create, develop, build, and deploy Vertz applications.
4
4
 
5
- > **5-minute rule:** You should understand what this CLI does and how to use it in 5 minutes or less. If not, [open an issue](https://github.com/nicholasgriffintn/vertz/issues) — that's a bug in our docs.
5
+ > **5-minute rule:** You should understand what this CLI does and how to use it in 5 minutes or less. If not, [open an issue](https://github.com/vertz-dev/vertz/issues) — that's a bug in our docs.
6
6
 
7
- ## What is this?
8
-
9
- `@vertz/cli` is the developer tool for Vertz projects. It's the `vertz` binary you run in your terminal. If you're looking for terminal UI building blocks (spinners, task lists, select menus), that's `@vertz/tui`.
10
-
11
- ---
12
-
13
- ## You want to start a new project
7
+ ## Quick Start
14
8
 
15
9
  ```bash
10
+ # Create a new project
16
11
  npx @vertz/cli create my-app
17
12
  cd my-app
18
- ```
19
-
20
- This scaffolds a new Vertz app with a working `src/app.ts`, config file, and dev scripts. You'll have a running server in under a minute.
21
-
22
- Your entry point will look something like this:
23
13
 
24
- ```ts
25
- import { createServer } from '@vertz/server';
14
+ # Start development
15
+ npx vertz dev
26
16
 
27
- const app = createServer();
28
- // ... define your routes, modules, services
17
+ # Build for production
18
+ npx vertz build
29
19
  ```
30
20
 
31
21
  ---
32
22
 
33
- ## You want to develop locally
23
+ ## Installation
34
24
 
35
25
  ```bash
36
- vertz dev
26
+ npm install @vertz/cli
27
+ # or
28
+ bun add @vertz/cli
37
29
  ```
38
30
 
39
- That's it. This starts your dev server with hot reload, background type-checking, and compiler diagnostics right in your terminal.
31
+ **Requirements:** Node.js 22+ or Bun 1.0+
40
32
 
41
- **Common options:**
42
-
43
- ```bash
44
- vertz dev --port 4000 # custom port
45
- vertz dev --host 0.0.0.0 # expose to network
46
- vertz dev --no-typecheck # skip background type-checking
47
- ```
33
+ ---
48
34
 
49
- **What happens under the hood:**
50
- 1. Compiles your `src/` directory
51
- 2. Starts your server (default: `localhost:3000`)
52
- 3. Watches for file changes and recompiles automatically
53
- 4. Runs type-checking in the background so errors show inline
35
+ ## Commands
54
36
 
55
- ---
37
+ ### `vertz create <name>`
56
38
 
57
- ## You want to build for production
39
+ Scaffold a new Vertz project.
58
40
 
59
41
  ```bash
60
- vertz build
42
+ vertz create my-app # Create with Bun (default)
43
+ vertz create my-app --runtime node # Create with Node.js
44
+ vertz create my-app --runtime deno # Create with Deno
45
+ vertz create my-app --example # Include example health module
46
+ vertz create my-app --no-example # Exclude example (default)
61
47
  ```
62
48
 
63
- Compiles your project, runs validation, and outputs production-ready code.
49
+ ### `vertz dev`
50
+
51
+ Start the development server with hot reload. Runs the full pipeline (analyze → generate → build → serve) and watches for file changes.
64
52
 
65
53
  ```bash
66
- vertz build --strict # treat warnings as errors
67
- vertz build --output dist # custom output directory
54
+ vertz dev # Start on localhost:3000
55
+ vertz dev --port 4000 # Custom port
56
+ vertz dev --host 0.0.0.0 # Expose to network
57
+ vertz dev --open # Open browser on start
58
+ vertz dev --no-typecheck # Disable background type-checking
59
+ vertz dev -v # Verbose output
68
60
  ```
69
61
 
70
- ---
62
+ ### `vertz build`
71
63
 
72
- ## You want to check your code without building
64
+ Compile your project for production.
73
65
 
74
66
  ```bash
75
- vertz check
67
+ vertz build # Build for Node.js
68
+ vertz build --target edge # Build for edge runtime
69
+ vertz build --target worker # Build for worker runtime
70
+ vertz build --output dist # Custom output directory
71
+ vertz build --no-typecheck # Skip type checking
72
+ vertz build --no-minify # Skip minification
73
+ vertz build --sourcemap # Generate sourcemaps
74
+ vertz build -v # Verbose output
76
75
  ```
77
76
 
78
- Type-checks and validates your project without producing output. Useful in CI or as a pre-commit hook.
77
+ ### `vertz check`
78
+
79
+ Type-check and validate your project without producing output. Useful in CI or as a pre-commit hook.
79
80
 
80
81
  ```bash
81
- vertz check --strict # fail on warnings
82
- vertz check --format json # machine-readable output (text | json | github)
82
+ vertz check # Text output
83
+ vertz check --format json # JSON output
84
+ vertz check --format github # GitHub Actions format
83
85
  ```
84
86
 
85
- ---
87
+ ### `vertz generate [type] [name]`
86
88
 
87
- ## You want to generate code
89
+ Generate code scaffolds. Supports multiple types:
88
90
 
89
91
  ```bash
92
+ # Generate a new module
90
93
  vertz generate module users
94
+
95
+ # Generate service/router/schema within a module
91
96
  vertz generate service user --module users
92
97
  vertz generate router api --module users
93
98
  vertz generate schema user --module users
94
- ```
95
99
 
96
- Scaffolds modules, services, routers, and schemas. Use `--dry-run` to preview what will be generated.
100
+ # Auto-discover domains and generate all (experimental)
101
+ vertz generate
97
102
 
98
- You can also define [custom generators](#custom-generators) in your config.
103
+ # Preview without writing files
104
+ vertz generate module users --dry-run
105
+ ```
99
106
 
100
- ---
107
+ ### `vertz codegen`
101
108
 
102
- ## You want to deploy *(coming soon)*
109
+ Generate SDK and CLI clients from your compiled API.
103
110
 
104
111
  ```bash
105
- vertz publish
112
+ vertz codegen # Generate clients
113
+ vertz codegen --dry-run # Preview without writing
114
+ vertz codegen --output ./sdk # Custom output directory
106
115
  ```
107
116
 
108
- One-command deployment to your configured target. **This command is not yet available** — it's on the roadmap.
117
+ Requires `codegen` configuration in `vertz.config.ts`:
109
118
 
110
- ---
119
+ ```ts
120
+ const config = {
121
+ codegen: {
122
+ output: './src/clients',
123
+ generators: ['typescript', 'swift', 'kotlin'],
124
+ },
125
+ };
126
+ ```
111
127
 
112
- ## You want to see your routes
128
+ ### `vertz routes`
129
+
130
+ Display all routes in your application.
113
131
 
114
132
  ```bash
115
- vertz routes # table format
116
- vertz routes --format json # JSON output
133
+ vertz routes # Table format
134
+ vertz routes --format json # JSON output
117
135
  ```
118
136
 
119
- Displays every route your application exposes.
120
-
121
- ---
137
+ ### `vertz db migrate`
122
138
 
123
- ## Installation
139
+ Smart database migration. Automatically chooses the right Prisma command based on environment.
124
140
 
125
141
  ```bash
126
- npm install @vertz/cli # or bun add @vertz/cli
142
+ vertz db migrate # Auto-detect: dev=dev, prod=deploy
143
+ vertz db migrate --status # Show migration status
144
+ vertz db migrate --create-only # Create migration file without applying
145
+ vertz db migrate --name my-change # Specify migration name
146
+ vertz db migrate --reset # Reset database (drop all tables)
147
+ vertz db migrate -v # Verbose output
127
148
  ```
128
149
 
129
- **Requirements:** Node.js 18+ or Bun 1.0+, TypeScript 5.0+
150
+ In development: runs `prisma migrate dev` (applies pending + creates new if schema changed).
151
+ In production: runs `prisma migrate deploy` (applies pending only).
130
152
 
131
153
  ---
132
154
 
@@ -147,60 +169,24 @@ const config: CLIConfig = {
147
169
  port: 3000,
148
170
  host: 'localhost',
149
171
  typecheck: true,
172
+ open: false,
150
173
  },
151
- };
152
-
153
- export default config;
154
- ```
155
-
156
- Also supports `.js` and `.mjs`. See [Configuration Reference](#configuration-reference) for all options.
157
-
158
- ---
159
-
160
- ## Custom Generators
161
-
162
- Extend `vertz generate` with your own templates:
163
-
164
- ```ts
165
- import type { CLIConfig, GeneratorDefinition } from '@vertz/cli';
166
-
167
- const entity: GeneratorDefinition = {
168
- name: 'entity',
169
- description: 'Generate a domain entity with schema and service',
170
- arguments: [{ name: 'name', description: 'Entity name', required: true }],
171
- options: [
172
- { name: 'timestamps', flag: '--timestamps', description: 'Include timestamp fields', default: 'true' },
173
- ],
174
- async run({ name, sourceDir }) {
175
- return [
176
- { path: `${sourceDir}/entities/${name}.schema.ts`, content: `export const ${name}Schema = s.object({});` },
177
- { path: `${sourceDir}/entities/${name}.service.ts`, content: `export class ${name}Service {}` },
178
- ];
174
+ codegen: {
175
+ output: './src/clients',
176
+ generators: ['typescript'],
179
177
  },
180
178
  };
181
179
 
182
- const config: CLIConfig = {
183
- generators: { entity },
184
- };
185
-
186
180
  export default config;
187
181
  ```
188
182
 
189
- ```bash
190
- vertz generate entity product
191
- vertz generate entity product --timestamps false
192
- ```
193
-
194
- ---
195
-
196
- ## Configuration Reference
183
+ ### Configuration Reference
197
184
 
198
185
  | Option | Type | Default | Description |
199
186
  |--------|------|---------|-------------|
200
187
  | `strict` | `boolean` | `false` | Treat warnings as errors |
201
- | `forceGenerate` | `boolean` | `false` | Force code generation even if up-to-date |
202
188
  | `compiler.sourceDir` | `string` | `'src'` | Source directory |
203
- | `compiler.entryFile` | `string` | `'src/app.ts'` | Entry file path |
189
+ | `compiler.entryFile` | `string` | `'src/app.ts'` | Entry file |
204
190
  | `compiler.outputDir` | `string` | `'.vertz/generated'` | Generated code output |
205
191
  | `dev.port` | `number` | `3000` | Dev server port |
206
192
  | `dev.host` | `string` | `'localhost'` | Dev server host |
@@ -211,7 +197,14 @@ vertz generate entity product --timestamps false
211
197
 
212
198
  ## Programmatic API
213
199
 
214
- The CLI exports its internals for custom tooling. See the [Programmatic API docs](./docs/programmatic-api.md) for details on `buildAction`, `generateAction`, `createDevLoop`, `createTaskRunner`, and more.
200
+ Import CLI functions for custom tooling:
201
+
202
+ ```ts
203
+ import { buildAction, devAction, createDevLoop } from '@vertz/cli';
204
+
205
+ await buildAction({ output: './dist' });
206
+ await devAction({ port: 3000 });
207
+ ```
215
208
 
216
209
  ---
217
210
 
@@ -220,6 +213,7 @@ The CLI exports its internals for custom tooling. See the [Programmatic API docs
220
213
  - [`@vertz/server`](../server) — Server framework (`createServer`)
221
214
  - [`@vertz/compiler`](../compiler) — Vertz compiler
222
215
  - [`@vertz/codegen`](../codegen) — Code generation utilities
216
+ - [`@vertz/tui`](../tui) — Terminal UI components
223
217
 
224
218
  ## License
225
219
 
package/dist/index.d.ts CHANGED
@@ -1,14 +1,8 @@
1
+ import { TaskGroup, TaskHandle, TaskRunner } from "@vertz/tui";
2
+ import { colors, createTaskRunner, Message, SelectList, symbols, Task, TaskList } from "@vertz/tui";
1
3
  import { Command } from "commander";
2
4
  declare function createCLI(): Command;
3
- /**
4
- * Vertz Build Command - Production Build
5
- *
6
- * Production build command that orchestrates:
7
- * 1. Codegen - runs the full pipeline to generate types, routes, OpenAPI
8
- * 2. Typecheck - runs TypeScript compiler for type checking
9
- * 3. Bundle - bundles the server for production (esbuild)
10
- * 4. Manifest - generates build manifest for vertz publish
11
- */
5
+ import { Result } from "@vertz/errors";
12
6
  interface BuildCommandOptions {
13
7
  strict?: boolean;
14
8
  output?: string;
@@ -20,26 +14,26 @@ interface BuildCommandOptions {
20
14
  }
21
15
  /**
22
16
  * Run the build command
23
- * @returns Exit code (0 for success, 1 for failure)
24
17
  */
25
- declare function buildAction(options?: BuildCommandOptions): Promise<number>;
18
+ declare function buildAction(options?: BuildCommandOptions): Promise<Result<void, Error>>;
26
19
  import { Compiler, Diagnostic } from "@vertz/compiler";
20
+ import { Result as Result2 } from "@vertz/errors";
27
21
  interface CheckOptions {
28
22
  compiler: Compiler;
29
23
  format: "text" | "json" | "github";
30
24
  }
31
- interface CheckResult {
32
- success: boolean;
25
+ interface CheckData {
33
26
  diagnostics: Diagnostic[];
34
27
  output: string;
28
+ hasErrors: boolean;
35
29
  }
36
- declare function checkAction(options: CheckOptions): Promise<CheckResult>;
30
+ declare function checkAction(options: CheckOptions): Promise<Result2<CheckData, Error>>;
31
+ import { Result as Result3 } from "@vertz/errors";
37
32
  interface CreateOptions {
38
33
  projectName?: string;
39
- runtime?: string;
40
- example?: boolean;
41
34
  }
42
- declare function createAction(options: CreateOptions): Promise<void>;
35
+ declare function createAction(options: CreateOptions): Promise<Result3<void, Error>>;
36
+ import { Result as Result4 } from "@vertz/errors";
43
37
  import { VertzConfig } from "@vertz/compiler";
44
38
  interface DevConfig {
45
39
  port: number;
@@ -90,15 +84,10 @@ interface DeployOptions {
90
84
  projectRoot: string;
91
85
  dryRun?: boolean;
92
86
  }
93
- type DeployResult = {
94
- success: true;
87
+ declare function deployAction(options: DeployOptions): Result4<{
95
88
  files: GeneratedFile[];
96
- } | {
97
- success: false;
98
- files: GeneratedFile[];
99
- error: string;
100
- };
101
- declare function deployAction(options: DeployOptions): DeployResult;
89
+ }, Error>;
90
+ import { Result as Result5 } from "@vertz/errors";
102
91
  import { Command as Command2 } from "commander";
103
92
  interface DevCommandOptions {
104
93
  port?: number;
@@ -111,11 +100,12 @@ interface DevCommandOptions {
111
100
  /**
112
101
  * Run the dev command
113
102
  */
114
- declare function devAction(options?: DevCommandOptions): Promise<void>;
103
+ declare function devAction(options?: DevCommandOptions): Promise<Result5<void, Error>>;
115
104
  /**
116
105
  * Register the dev command with a Commander program
117
106
  */
118
107
  declare function registerDevCommand(program: Command2): void;
108
+ import { Result as Result6 } from "@vertz/errors";
119
109
  interface GenerateOptions {
120
110
  type: string;
121
111
  name: string;
@@ -123,16 +113,11 @@ interface GenerateOptions {
123
113
  sourceDir: string;
124
114
  dryRun?: boolean;
125
115
  }
126
- type GenerateResult = {
127
- success: true;
128
- files: GeneratedFile[];
129
- } | {
130
- success: false;
116
+ declare function generateAction(options: GenerateOptions): Result6<{
131
117
  files: GeneratedFile[];
132
- error: string;
133
- };
134
- declare function generateAction(options: GenerateOptions): GenerateResult;
118
+ }, Error>;
135
119
  import { Compiler as Compiler2, HttpMethod } from "@vertz/compiler";
120
+ import { Result as Result7 } from "@vertz/errors";
136
121
  interface FlatRoute {
137
122
  method: HttpMethod;
138
123
  path: string;
@@ -146,28 +131,66 @@ interface RoutesOptions {
146
131
  format: "table" | "json";
147
132
  module?: string;
148
133
  }
149
- interface RoutesResult {
134
+ declare function routesAction(options: RoutesOptions): Promise<Result7<{
150
135
  routes: FlatRoute[];
151
136
  output: string;
137
+ }, Error>>;
138
+ import { VertzConfig as VertzConfig2 } from "@vertz/compiler";
139
+ declare function findConfigFile(startDir?: string): string | undefined;
140
+ declare function loadConfig(configPath?: string): Promise<VertzConfig2>;
141
+ import { CompileResult } from "@vertz/compiler";
142
+ interface FileChange {
143
+ type: "add" | "change" | "remove";
144
+ path: string;
145
+ }
146
+ interface Watcher {
147
+ on(event: "change", handler: (changes: FileChange[]) => void): void;
148
+ close(): void;
149
+ /** @internal — for testing only */
150
+ _emit(change: FileChange): void;
152
151
  }
153
- declare function routesAction(options: RoutesOptions): Promise<RoutesResult>;
152
+ declare function createWatcher(_dir: string): Watcher;
153
+ interface DevLoopDeps {
154
+ compile(): Promise<CompileResult>;
155
+ startProcess(): void;
156
+ stopProcess(): Promise<void>;
157
+ onFileChange(handler: (changes: FileChange[]) => void): void;
158
+ onCompileSuccess(result: CompileResult): void;
159
+ onCompileError(result: CompileResult): void;
160
+ }
161
+ interface DevLoop {
162
+ start(): Promise<void>;
163
+ stop(): Promise<void>;
164
+ }
165
+ declare function createDevLoop(deps: DevLoopDeps): DevLoop;
166
+ import { ChildProcess } from "node:child_process";
167
+ interface ProcessManager {
168
+ start(entryPoint: string, env?: Record<string, string>): void;
169
+ stop(): Promise<void>;
170
+ restart(entryPoint: string, env?: Record<string, string>): Promise<void>;
171
+ isRunning(): boolean;
172
+ onOutput(handler: (data: string) => void): void;
173
+ onError(handler: (data: string) => void): void;
174
+ }
175
+ type SpawnFn = (entryPoint: string, env?: Record<string, string>) => ChildProcess;
176
+ declare function createProcessManager(spawnFn?: SpawnFn): ProcessManager;
154
177
  import { AppIR } from "@vertz/compiler";
155
- import { GenerateResult as GenerateResult2 } from "@vertz/codegen";
178
+ import { GenerateResult } from "@vertz/codegen";
156
179
  /**
157
180
  * Pipeline types - Core type definitions
158
181
  */
159
182
  /**
160
183
  * Pipeline stages that can be executed
161
184
  */
162
- type PipelineStage = "analyze" | "codegen" | "build-ui" | "db-sync";
185
+ type PipelineStage = "analyze" | "openapi" | "codegen" | "build-ui" | "db-sync";
163
186
  /**
164
187
  * File categories for smart dispatch
165
188
  */
166
- type FileCategory = "domain" | "module" | "schema" | "service" | "route" | "component" | "config" | "other";
189
+ type FileCategory = "module" | "schema" | "service" | "route" | "entity" | "component" | "config" | "other";
167
190
  /**
168
191
  * A file change event from the watcher
169
192
  */
170
- interface FileChange {
193
+ interface FileChange2 {
171
194
  type: "add" | "change" | "remove";
172
195
  path: string;
173
196
  category?: FileCategory;
@@ -175,11 +198,11 @@ interface FileChange {
175
198
  /**
176
199
  * Watcher interface
177
200
  */
178
- interface Watcher {
179
- on(event: "change", handler: (changes: FileChange[]) => void): void;
201
+ interface Watcher2 {
202
+ on(event: "change", handler: (changes: FileChange2[]) => void): void;
180
203
  close(): void;
181
204
  /** @internal — for testing only */
182
- _emit(change: FileChange): void;
205
+ _emit(change: FileChange2): void;
183
206
  }
184
207
  /**
185
208
  * Configuration for the watcher
@@ -192,15 +215,15 @@ interface WatcherConfig {
192
215
  /** Debounce delay in ms */
193
216
  debounceMs?: number;
194
217
  /** Callback when files change */
195
- onChange?: (changes: FileChange[]) => void;
218
+ onChange?: (changes: FileChange2[]) => void;
196
219
  }
197
220
  /**
198
221
  * Pipeline watcher event handlers
199
222
  */
200
223
  interface PipelineWatcherHandlers {
201
- analyze: (changes: FileChange[]) => void;
202
- codegen: (changes: FileChange[]) => void;
203
- "build-ui": (changes: FileChange[]) => void;
224
+ analyze: (changes: FileChange2[]) => void;
225
+ codegen: (changes: FileChange2[]) => void;
226
+ "build-ui": (changes: FileChange2[]) => void;
204
227
  error: (error: Error) => void;
205
228
  }
206
229
  /**
@@ -247,7 +270,7 @@ interface PipelineResult {
247
270
  stages: StageResult[];
248
271
  totalDurationMs: number;
249
272
  appIR?: AppIR;
250
- generatedFiles?: GenerateResult2;
273
+ generatedFiles?: GenerateResult;
251
274
  }
252
275
  /**
253
276
  * Pipeline Orchestrator
@@ -282,6 +305,10 @@ declare class PipelineOrchestrator {
282
305
  */
283
306
  private runAnalyze;
284
307
  /**
308
+ * Run the OpenAPI generation stage
309
+ */
310
+ private runOpenAPIGenerate;
311
+ /**
285
312
  * Run the codegen stage
286
313
  */
287
314
  private runCodegen;
@@ -327,45 +354,6 @@ declare function getAffectedStages(category: FileCategory): PipelineStage[];
327
354
  * Create a pipeline watcher
328
355
  */
329
356
  declare function createPipelineWatcher(config: WatcherConfig): PipelineWatcher;
330
- import { VertzConfig as VertzConfig2 } from "@vertz/compiler";
331
- declare function findConfigFile(startDir?: string): string | undefined;
332
- declare function loadConfig(configPath?: string): Promise<VertzConfig2>;
333
- import { CompileResult } from "@vertz/compiler";
334
- interface FileChange2 {
335
- type: "add" | "change" | "remove";
336
- path: string;
337
- }
338
- interface Watcher2 {
339
- on(event: "change", handler: (changes: FileChange2[]) => void): void;
340
- close(): void;
341
- /** @internal — for testing only */
342
- _emit(change: FileChange2): void;
343
- }
344
- declare function createWatcher2(_dir: string): Watcher2;
345
- interface DevLoopDeps {
346
- compile(): Promise<CompileResult>;
347
- startProcess(): void;
348
- stopProcess(): Promise<void>;
349
- onFileChange(handler: (changes: FileChange2[]) => void): void;
350
- onCompileSuccess(result: CompileResult): void;
351
- onCompileError(result: CompileResult): void;
352
- }
353
- interface DevLoop {
354
- start(): Promise<void>;
355
- stop(): Promise<void>;
356
- }
357
- declare function createDevLoop(deps: DevLoopDeps): DevLoop;
358
- import { ChildProcess } from "node:child_process";
359
- interface ProcessManager {
360
- start(entryPoint: string, env?: Record<string, string>): void;
361
- stop(): Promise<void>;
362
- restart(entryPoint: string, env?: Record<string, string>): Promise<void>;
363
- isRunning(): boolean;
364
- onOutput(handler: (data: string) => void): void;
365
- onError(handler: (data: string) => void): void;
366
- }
367
- type SpawnFn = (entryPoint: string, env?: Record<string, string>) => ChildProcess;
368
- declare function createProcessManager(spawnFn?: SpawnFn): ProcessManager;
369
357
  import React from "react";
370
358
  interface BannerProps {
371
359
  version: string;
@@ -386,8 +374,6 @@ declare function DiagnosticSummary({ diagnostics }: DiagnosticSummaryProps): Rea
386
374
  import { Diagnostic as Diagnostic4 } from "@vertz/compiler";
387
375
  declare function formatDiagnostic(diagnostic: Diagnostic4): string;
388
376
  declare function formatDiagnosticSummary(diagnostics: readonly Diagnostic4[]): string;
389
- import { colors, createTaskRunner, Message, SelectList, symbols, Task, TaskList } from "@vertz/tui";
390
- import { TaskGroup, TaskHandle, TaskRunner } from "@vertz/tui";
391
377
  declare function formatDuration(ms: number): string;
392
378
  declare function formatFileSize(bytes: number): string;
393
379
  declare function formatPath(absolutePath: string, cwd?: string): string;
@@ -396,4 +382,4 @@ declare function isCI(): boolean;
396
382
  declare function requireParam(value: string | undefined, name: string): string;
397
383
  type Runtime = "bun" | "node";
398
384
  declare function detectRuntime(): Runtime;
399
- export { symbols, routesAction, requireParam, registerDevCommand, loadConfig, isCI, getAffectedStages, generateAction, formatPath, formatFileSize, formatDuration, formatDiagnosticSummary, formatDiagnostic, findProjectRoot, findConfigFile, devAction, detectTarget, detectRuntime, deployAction, defaultCLIConfig, createWatcher2 as createWatcher, createTaskRunner, createProcessManager, createPipelineWatcher, createPipelineOrchestrator, createDevLoop, createCLI, createAction, colors, checkAction, categorizeFileChange, buildAction, Watcher, TaskRunner, TaskList, TaskHandle, TaskGroup, Task, StageResult, SelectList, PipelineWatcher, PipelineStage, PipelineResult, PipelineOrchestrator, PipelineConfig, Message, GeneratorDefinition, GeneratedFile, FileChange, FileCategory, DiagnosticSummary, DiagnosticDisplay, DevConfig, CLIConfig, Banner };
385
+ export { symbols, routesAction, requireParam, registerDevCommand, loadConfig, isCI, getAffectedStages, generateAction, formatPath, formatFileSize, formatDuration, formatDiagnosticSummary, formatDiagnostic, findProjectRoot, findConfigFile, devAction, detectTarget, detectRuntime, deployAction, defaultCLIConfig, createWatcher, createTaskRunner, createProcessManager, createPipelineWatcher, createPipelineOrchestrator, createDevLoop, createCLI, createAction, colors, checkAction, categorizeFileChange, buildAction, Watcher2 as Watcher, TaskRunner, TaskList, TaskHandle, TaskGroup, Task, StageResult, SelectList, PipelineWatcher, PipelineStage, PipelineResult, PipelineOrchestrator, PipelineConfig, Message, GeneratorDefinition, GeneratedFile, FileChange2 as FileChange, FileCategory, DiagnosticSummary, DiagnosticDisplay, DevConfig, CLIConfig, Banner };