@vertz/cli 0.2.0 → 0.2.1

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 -88
  3. package/dist/index.js +1866 -3505
  4. package/dist/vertz.js +1822 -3404
  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,28 @@ 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
34
  runtime?: string;
40
35
  example?: boolean;
41
36
  }
42
- declare function createAction(options: CreateOptions): Promise<void>;
37
+ declare function createAction(options: CreateOptions): Promise<Result3<void, Error>>;
38
+ import { Result as Result4 } from "@vertz/errors";
43
39
  import { VertzConfig } from "@vertz/compiler";
44
40
  interface DevConfig {
45
41
  port: number;
@@ -90,15 +86,10 @@ interface DeployOptions {
90
86
  projectRoot: string;
91
87
  dryRun?: boolean;
92
88
  }
93
- type DeployResult = {
94
- success: true;
89
+ declare function deployAction(options: DeployOptions): Result4<{
95
90
  files: GeneratedFile[];
96
- } | {
97
- success: false;
98
- files: GeneratedFile[];
99
- error: string;
100
- };
101
- declare function deployAction(options: DeployOptions): DeployResult;
91
+ }, Error>;
92
+ import { Result as Result5 } from "@vertz/errors";
102
93
  import { Command as Command2 } from "commander";
103
94
  interface DevCommandOptions {
104
95
  port?: number;
@@ -111,11 +102,12 @@ interface DevCommandOptions {
111
102
  /**
112
103
  * Run the dev command
113
104
  */
114
- declare function devAction(options?: DevCommandOptions): Promise<void>;
105
+ declare function devAction(options?: DevCommandOptions): Promise<Result5<void, Error>>;
115
106
  /**
116
107
  * Register the dev command with a Commander program
117
108
  */
118
109
  declare function registerDevCommand(program: Command2): void;
110
+ import { Result as Result6 } from "@vertz/errors";
119
111
  interface GenerateOptions {
120
112
  type: string;
121
113
  name: string;
@@ -123,16 +115,11 @@ interface GenerateOptions {
123
115
  sourceDir: string;
124
116
  dryRun?: boolean;
125
117
  }
126
- type GenerateResult = {
127
- success: true;
128
- files: GeneratedFile[];
129
- } | {
130
- success: false;
118
+ declare function generateAction(options: GenerateOptions): Result6<{
131
119
  files: GeneratedFile[];
132
- error: string;
133
- };
134
- declare function generateAction(options: GenerateOptions): GenerateResult;
120
+ }, Error>;
135
121
  import { Compiler as Compiler2, HttpMethod } from "@vertz/compiler";
122
+ import { Result as Result7 } from "@vertz/errors";
136
123
  interface FlatRoute {
137
124
  method: HttpMethod;
138
125
  path: string;
@@ -146,28 +133,66 @@ interface RoutesOptions {
146
133
  format: "table" | "json";
147
134
  module?: string;
148
135
  }
149
- interface RoutesResult {
136
+ declare function routesAction(options: RoutesOptions): Promise<Result7<{
150
137
  routes: FlatRoute[];
151
138
  output: string;
139
+ }, Error>>;
140
+ import { VertzConfig as VertzConfig2 } from "@vertz/compiler";
141
+ declare function findConfigFile(startDir?: string): string | undefined;
142
+ declare function loadConfig(configPath?: string): Promise<VertzConfig2>;
143
+ import { CompileResult } from "@vertz/compiler";
144
+ interface FileChange {
145
+ type: "add" | "change" | "remove";
146
+ path: string;
147
+ }
148
+ interface Watcher {
149
+ on(event: "change", handler: (changes: FileChange[]) => void): void;
150
+ close(): void;
151
+ /** @internal — for testing only */
152
+ _emit(change: FileChange): void;
152
153
  }
153
- declare function routesAction(options: RoutesOptions): Promise<RoutesResult>;
154
+ declare function createWatcher(_dir: string): Watcher;
155
+ interface DevLoopDeps {
156
+ compile(): Promise<CompileResult>;
157
+ startProcess(): void;
158
+ stopProcess(): Promise<void>;
159
+ onFileChange(handler: (changes: FileChange[]) => void): void;
160
+ onCompileSuccess(result: CompileResult): void;
161
+ onCompileError(result: CompileResult): void;
162
+ }
163
+ interface DevLoop {
164
+ start(): Promise<void>;
165
+ stop(): Promise<void>;
166
+ }
167
+ declare function createDevLoop(deps: DevLoopDeps): DevLoop;
168
+ import { ChildProcess } from "node:child_process";
169
+ interface ProcessManager {
170
+ start(entryPoint: string, env?: Record<string, string>): void;
171
+ stop(): Promise<void>;
172
+ restart(entryPoint: string, env?: Record<string, string>): Promise<void>;
173
+ isRunning(): boolean;
174
+ onOutput(handler: (data: string) => void): void;
175
+ onError(handler: (data: string) => void): void;
176
+ }
177
+ type SpawnFn = (entryPoint: string, env?: Record<string, string>) => ChildProcess;
178
+ declare function createProcessManager(spawnFn?: SpawnFn): ProcessManager;
154
179
  import { AppIR } from "@vertz/compiler";
155
- import { GenerateResult as GenerateResult2 } from "@vertz/codegen";
180
+ import { GenerateResult } from "@vertz/codegen";
156
181
  /**
157
182
  * Pipeline types - Core type definitions
158
183
  */
159
184
  /**
160
185
  * Pipeline stages that can be executed
161
186
  */
162
- type PipelineStage = "analyze" | "codegen" | "build-ui" | "db-sync";
187
+ type PipelineStage = "analyze" | "openapi" | "codegen" | "build-ui" | "db-sync";
163
188
  /**
164
189
  * File categories for smart dispatch
165
190
  */
166
- type FileCategory = "domain" | "module" | "schema" | "service" | "route" | "component" | "config" | "other";
191
+ type FileCategory = "module" | "schema" | "service" | "route" | "entity" | "component" | "config" | "other";
167
192
  /**
168
193
  * A file change event from the watcher
169
194
  */
170
- interface FileChange {
195
+ interface FileChange2 {
171
196
  type: "add" | "change" | "remove";
172
197
  path: string;
173
198
  category?: FileCategory;
@@ -175,11 +200,11 @@ interface FileChange {
175
200
  /**
176
201
  * Watcher interface
177
202
  */
178
- interface Watcher {
179
- on(event: "change", handler: (changes: FileChange[]) => void): void;
203
+ interface Watcher2 {
204
+ on(event: "change", handler: (changes: FileChange2[]) => void): void;
180
205
  close(): void;
181
206
  /** @internal — for testing only */
182
- _emit(change: FileChange): void;
207
+ _emit(change: FileChange2): void;
183
208
  }
184
209
  /**
185
210
  * Configuration for the watcher
@@ -192,15 +217,15 @@ interface WatcherConfig {
192
217
  /** Debounce delay in ms */
193
218
  debounceMs?: number;
194
219
  /** Callback when files change */
195
- onChange?: (changes: FileChange[]) => void;
220
+ onChange?: (changes: FileChange2[]) => void;
196
221
  }
197
222
  /**
198
223
  * Pipeline watcher event handlers
199
224
  */
200
225
  interface PipelineWatcherHandlers {
201
- analyze: (changes: FileChange[]) => void;
202
- codegen: (changes: FileChange[]) => void;
203
- "build-ui": (changes: FileChange[]) => void;
226
+ analyze: (changes: FileChange2[]) => void;
227
+ codegen: (changes: FileChange2[]) => void;
228
+ "build-ui": (changes: FileChange2[]) => void;
204
229
  error: (error: Error) => void;
205
230
  }
206
231
  /**
@@ -247,7 +272,7 @@ interface PipelineResult {
247
272
  stages: StageResult[];
248
273
  totalDurationMs: number;
249
274
  appIR?: AppIR;
250
- generatedFiles?: GenerateResult2;
275
+ generatedFiles?: GenerateResult;
251
276
  }
252
277
  /**
253
278
  * Pipeline Orchestrator
@@ -282,6 +307,10 @@ declare class PipelineOrchestrator {
282
307
  */
283
308
  private runAnalyze;
284
309
  /**
310
+ * Run the OpenAPI generation stage
311
+ */
312
+ private runOpenAPIGenerate;
313
+ /**
285
314
  * Run the codegen stage
286
315
  */
287
316
  private runCodegen;
@@ -327,45 +356,6 @@ declare function getAffectedStages(category: FileCategory): PipelineStage[];
327
356
  * Create a pipeline watcher
328
357
  */
329
358
  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
359
  import React from "react";
370
360
  interface BannerProps {
371
361
  version: string;
@@ -386,8 +376,6 @@ declare function DiagnosticSummary({ diagnostics }: DiagnosticSummaryProps): Rea
386
376
  import { Diagnostic as Diagnostic4 } from "@vertz/compiler";
387
377
  declare function formatDiagnostic(diagnostic: Diagnostic4): string;
388
378
  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
379
  declare function formatDuration(ms: number): string;
392
380
  declare function formatFileSize(bytes: number): string;
393
381
  declare function formatPath(absolutePath: string, cwd?: string): string;
@@ -396,4 +384,4 @@ declare function isCI(): boolean;
396
384
  declare function requireParam(value: string | undefined, name: string): string;
397
385
  type Runtime = "bun" | "node";
398
386
  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 };
387
+ 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 };