@agentuity/cli 0.0.104 → 0.0.106
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/bin/cli.ts +6 -3
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +93 -21
- package/dist/cli.js.map +1 -1
- package/dist/cmd/ai/prompt/version.d.ts +1 -0
- package/dist/cmd/ai/prompt/version.d.ts.map +1 -1
- package/dist/cmd/ai/prompt/version.js +3 -2
- package/dist/cmd/ai/prompt/version.js.map +1 -1
- package/dist/cmd/build/ast.d.ts.map +1 -1
- package/dist/cmd/build/ast.js +179 -37
- package/dist/cmd/build/ast.js.map +1 -1
- package/dist/cmd/build/entry-generator.d.ts.map +1 -1
- package/dist/cmd/build/entry-generator.js +24 -14
- package/dist/cmd/build/entry-generator.js.map +1 -1
- package/dist/cmd/build/vite/registry-generator.d.ts.map +1 -1
- package/dist/cmd/build/vite/registry-generator.js +8 -9
- package/dist/cmd/build/vite/registry-generator.js.map +1 -1
- package/dist/cmd/build/vite/vite-asset-server.d.ts.map +1 -1
- package/dist/cmd/build/vite/vite-asset-server.js.map +1 -1
- package/dist/cmd/cloud/db/create.d.ts.map +1 -1
- package/dist/cmd/cloud/db/create.js +11 -2
- package/dist/cmd/cloud/db/create.js.map +1 -1
- package/dist/cmd/cloud/db/delete.d.ts.map +1 -1
- package/dist/cmd/cloud/db/delete.js +13 -2
- package/dist/cmd/cloud/db/delete.js.map +1 -1
- package/dist/cmd/cloud/deploy.js +3 -3
- package/dist/cmd/cloud/deploy.js.map +1 -1
- package/dist/cmd/cloud/env/delete.js +1 -1
- package/dist/cmd/cloud/env/delete.js.map +1 -1
- package/dist/cmd/cloud/env/import.js +4 -4
- package/dist/cmd/cloud/env/import.js.map +1 -1
- package/dist/cmd/cloud/env/pull.d.ts.map +1 -1
- package/dist/cmd/cloud/env/pull.js +7 -9
- package/dist/cmd/cloud/env/pull.js.map +1 -1
- package/dist/cmd/cloud/env/push.js +2 -2
- package/dist/cmd/cloud/env/push.js.map +1 -1
- package/dist/cmd/cloud/env/set.js +3 -3
- package/dist/cmd/cloud/env/set.js.map +1 -1
- package/dist/cmd/cloud/index.d.ts.map +1 -1
- package/dist/cmd/cloud/index.js +2 -0
- package/dist/cmd/cloud/index.js.map +1 -1
- package/dist/cmd/cloud/sandbox/cp.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/cp.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/cp.js +334 -0
- package/dist/cmd/cloud/sandbox/cp.js.map +1 -0
- package/dist/cmd/cloud/sandbox/create.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/create.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/create.js +105 -0
- package/dist/cmd/cloud/sandbox/create.js.map +1 -0
- package/dist/cmd/cloud/sandbox/delete.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/delete.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/delete.js +72 -0
- package/dist/cmd/cloud/sandbox/delete.js.map +1 -0
- package/dist/cmd/cloud/sandbox/exec.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/exec.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/exec.js +211 -0
- package/dist/cmd/cloud/sandbox/exec.js.map +1 -0
- package/dist/cmd/cloud/sandbox/execution/get.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/execution/get.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/execution/get.js +96 -0
- package/dist/cmd/cloud/sandbox/execution/get.js.map +1 -0
- package/dist/cmd/cloud/sandbox/execution/index.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/execution/index.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/execution/index.js +24 -0
- package/dist/cmd/cloud/sandbox/execution/index.js.map +1 -0
- package/dist/cmd/cloud/sandbox/execution/list.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/execution/list.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/execution/list.js +100 -0
- package/dist/cmd/cloud/sandbox/execution/list.js.map +1 -0
- package/dist/cmd/cloud/sandbox/get.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/get.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/get.js +95 -0
- package/dist/cmd/cloud/sandbox/get.js.map +1 -0
- package/dist/cmd/cloud/sandbox/index.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/index.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/index.js +45 -0
- package/dist/cmd/cloud/sandbox/index.js.map +1 -0
- package/dist/cmd/cloud/sandbox/list.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/list.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/list.js +120 -0
- package/dist/cmd/cloud/sandbox/list.js.map +1 -0
- package/dist/cmd/cloud/sandbox/run.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/run.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/run.js +152 -0
- package/dist/cmd/cloud/sandbox/run.js.map +1 -0
- package/dist/cmd/cloud/sandbox/snapshot/create.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/snapshot/create.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/snapshot/create.js +65 -0
- package/dist/cmd/cloud/sandbox/snapshot/create.js.map +1 -0
- package/dist/cmd/cloud/sandbox/snapshot/delete.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/snapshot/delete.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/snapshot/delete.js +66 -0
- package/dist/cmd/cloud/sandbox/snapshot/delete.js.map +1 -0
- package/dist/cmd/cloud/sandbox/snapshot/get.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/snapshot/get.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/snapshot/get.js +154 -0
- package/dist/cmd/cloud/sandbox/snapshot/get.js.map +1 -0
- package/dist/cmd/cloud/sandbox/snapshot/index.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/snapshot/index.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/snapshot/index.js +27 -0
- package/dist/cmd/cloud/sandbox/snapshot/index.js.map +1 -0
- package/dist/cmd/cloud/sandbox/snapshot/list.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/snapshot/list.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/snapshot/list.js +83 -0
- package/dist/cmd/cloud/sandbox/snapshot/list.js.map +1 -0
- package/dist/cmd/cloud/sandbox/snapshot/tag.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/snapshot/tag.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/snapshot/tag.js +63 -0
- package/dist/cmd/cloud/sandbox/snapshot/tag.js.map +1 -0
- package/dist/cmd/cloud/sandbox/util.d.ts +15 -0
- package/dist/cmd/cloud/sandbox/util.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/util.js +50 -0
- package/dist/cmd/cloud/sandbox/util.js.map +1 -0
- package/dist/cmd/cloud/secret/delete.d.ts.map +1 -1
- package/dist/cmd/cloud/secret/delete.js +3 -3
- package/dist/cmd/cloud/secret/delete.js.map +1 -1
- package/dist/cmd/cloud/secret/import.js +6 -6
- package/dist/cmd/cloud/secret/import.js.map +1 -1
- package/dist/cmd/cloud/secret/index.d.ts.map +1 -1
- package/dist/cmd/cloud/secret/index.js +1 -0
- package/dist/cmd/cloud/secret/index.js.map +1 -1
- package/dist/cmd/cloud/secret/pull.d.ts.map +1 -1
- package/dist/cmd/cloud/secret/pull.js +7 -9
- package/dist/cmd/cloud/secret/pull.js.map +1 -1
- package/dist/cmd/cloud/secret/push.js +3 -3
- package/dist/cmd/cloud/secret/push.js.map +1 -1
- package/dist/cmd/cloud/secret/set.d.ts.map +1 -1
- package/dist/cmd/cloud/secret/set.js +3 -3
- package/dist/cmd/cloud/secret/set.js.map +1 -1
- package/dist/cmd/cloud/storage/create.d.ts.map +1 -1
- package/dist/cmd/cloud/storage/create.js +13 -2
- package/dist/cmd/cloud/storage/create.js.map +1 -1
- package/dist/cmd/cloud/storage/delete.d.ts.map +1 -1
- package/dist/cmd/cloud/storage/delete.js +13 -2
- package/dist/cmd/cloud/storage/delete.js.map +1 -1
- package/dist/cmd/cloud/stream/list.d.ts.map +1 -1
- package/dist/cmd/cloud/stream/list.js +2 -13
- package/dist/cmd/cloud/stream/list.js.map +1 -1
- package/dist/cmd/dev/index.d.ts.map +1 -1
- package/dist/cmd/dev/index.js +14 -1
- package/dist/cmd/dev/index.js.map +1 -1
- package/dist/cmd/profile/create.d.ts.map +1 -1
- package/dist/cmd/profile/create.js +1 -0
- package/dist/cmd/profile/create.js.map +1 -1
- package/dist/cmd/project/template-flow.d.ts.map +1 -1
- package/dist/cmd/project/template-flow.js +27 -10
- package/dist/cmd/project/template-flow.js.map +1 -1
- package/dist/config.d.ts +0 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +3 -0
- package/dist/config.js.map +1 -1
- package/dist/env-util.d.ts +16 -8
- package/dist/env-util.d.ts.map +1 -1
- package/dist/env-util.js +46 -18
- package/dist/env-util.js.map +1 -1
- package/dist/tui.d.ts +20 -3
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +82 -23
- package/dist/tui.js.map +1 -1
- package/dist/types.d.ts +18 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -1
- package/package.json +4 -4
- package/src/cli.ts +99 -21
- package/src/cmd/ai/prompt/api.md +26 -21
- package/src/cmd/ai/prompt/version.ts +3 -2
- package/src/cmd/build/ast.ts +214 -37
- package/src/cmd/build/entry-generator.ts +24 -14
- package/src/cmd/build/vite/registry-generator.ts +8 -11
- package/src/cmd/build/vite/vite-asset-server.ts +3 -1
- package/src/cmd/cloud/db/create.ts +13 -2
- package/src/cmd/cloud/db/delete.ts +15 -2
- package/src/cmd/cloud/deploy.ts +3 -3
- package/src/cmd/cloud/env/delete.ts +1 -1
- package/src/cmd/cloud/env/import.ts +4 -4
- package/src/cmd/cloud/env/pull.ts +7 -16
- package/src/cmd/cloud/env/push.ts +2 -2
- package/src/cmd/cloud/env/set.ts +3 -3
- package/src/cmd/cloud/index.ts +2 -0
- package/src/cmd/cloud/sandbox/cp.ts +531 -0
- package/src/cmd/cloud/sandbox/create.ts +114 -0
- package/src/cmd/cloud/sandbox/delete.ts +80 -0
- package/src/cmd/cloud/sandbox/exec.ts +254 -0
- package/src/cmd/cloud/sandbox/execution/get.ts +106 -0
- package/src/cmd/cloud/sandbox/execution/index.ts +25 -0
- package/src/cmd/cloud/sandbox/execution/list.ts +111 -0
- package/src/cmd/cloud/sandbox/get.ts +104 -0
- package/src/cmd/cloud/sandbox/index.ts +46 -0
- package/src/cmd/cloud/sandbox/list.ts +129 -0
- package/src/cmd/cloud/sandbox/run.ts +170 -0
- package/src/cmd/cloud/sandbox/snapshot/create.ts +71 -0
- package/src/cmd/cloud/sandbox/snapshot/delete.ts +74 -0
- package/src/cmd/cloud/sandbox/snapshot/get.ts +188 -0
- package/src/cmd/cloud/sandbox/snapshot/index.ts +28 -0
- package/src/cmd/cloud/sandbox/snapshot/list.ts +90 -0
- package/src/cmd/cloud/sandbox/snapshot/tag.ts +70 -0
- package/src/cmd/cloud/sandbox/util.ts +59 -0
- package/src/cmd/cloud/secret/delete.ts +8 -3
- package/src/cmd/cloud/secret/import.ts +6 -6
- package/src/cmd/cloud/secret/index.ts +1 -0
- package/src/cmd/cloud/secret/pull.ts +7 -16
- package/src/cmd/cloud/secret/push.ts +3 -3
- package/src/cmd/cloud/secret/set.ts +8 -3
- package/src/cmd/cloud/storage/create.ts +15 -2
- package/src/cmd/cloud/storage/delete.ts +15 -2
- package/src/cmd/cloud/stream/list.ts +2 -9
- package/src/cmd/dev/index.ts +18 -1
- package/src/cmd/profile/create.ts +1 -0
- package/src/cmd/project/template-flow.ts +29 -13
- package/src/config.ts +3 -0
- package/src/env-util.ts +52 -21
- package/src/tui.ts +131 -39
- package/src/types.ts +18 -16
package/src/env-util.ts
CHANGED
|
@@ -9,27 +9,10 @@ export interface EnvVars {
|
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
|
-
* Find
|
|
13
|
-
* Always returns .env.production path (will be created if needed).
|
|
14
|
-
* .env should only contain AGENTUITY_SDK_KEY.
|
|
15
|
-
*/
|
|
16
|
-
export async function findEnvFile(dir: string): Promise<string> {
|
|
17
|
-
return join(dir, '.env.production');
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Find an existing env file for reading.
|
|
22
|
-
* Preference: .env.production > .env
|
|
12
|
+
* Find an existing .env file for reading.
|
|
23
13
|
*/
|
|
24
14
|
export async function findExistingEnvFile(dir: string): Promise<string> {
|
|
25
|
-
|
|
26
|
-
const defaultEnv = join(dir, '.env');
|
|
27
|
-
|
|
28
|
-
if (await Bun.file(productionEnv).exists()) {
|
|
29
|
-
return productionEnv;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
return defaultEnv;
|
|
15
|
+
return join(dir, '.env');
|
|
33
16
|
}
|
|
34
17
|
|
|
35
18
|
/**
|
|
@@ -194,9 +177,15 @@ export function filterAgentuitySdkKeys(vars: EnvVars): EnvVars {
|
|
|
194
177
|
return filtered;
|
|
195
178
|
}
|
|
196
179
|
|
|
180
|
+
/**
|
|
181
|
+
* Keys that should always be treated as secrets (exact match)
|
|
182
|
+
*/
|
|
183
|
+
const secretExactKeys = ['DATABASE_URL'];
|
|
184
|
+
|
|
197
185
|
/**
|
|
198
186
|
* Split env vars into env and secrets based on key names
|
|
199
187
|
* Convention: Keys ending with _SECRET, _KEY, _TOKEN, _PASSWORD are secrets
|
|
188
|
+
* Also treats DATABASE_URL as a secret since it contains credentials
|
|
200
189
|
*/
|
|
201
190
|
export function splitEnvAndSecrets(vars: EnvVars): {
|
|
202
191
|
env: EnvVars;
|
|
@@ -213,9 +202,10 @@ export function splitEnvAndSecrets(vars: EnvVars): {
|
|
|
213
202
|
continue;
|
|
214
203
|
}
|
|
215
204
|
|
|
216
|
-
const
|
|
205
|
+
const isSecretByExactMatch = secretExactKeys.includes(key);
|
|
206
|
+
const isSecretBySuffix = secretSuffixes.some((suffix) => key.endsWith(suffix));
|
|
217
207
|
|
|
218
|
-
if (
|
|
208
|
+
if (isSecretByExactMatch || isSecretBySuffix) {
|
|
219
209
|
secrets[key] = value;
|
|
220
210
|
} else {
|
|
221
211
|
env[key] = value;
|
|
@@ -353,3 +343,44 @@ export function looksLikeSecret(key: string, value: string): boolean {
|
|
|
353
343
|
|
|
354
344
|
return false;
|
|
355
345
|
}
|
|
346
|
+
|
|
347
|
+
/**
|
|
348
|
+
* Add resource environment variables to the .env file.
|
|
349
|
+
* Merges with existing variables, overwriting any that already exist.
|
|
350
|
+
*/
|
|
351
|
+
export async function addResourceEnvVars(dir: string, envVars: EnvVars): Promise<void> {
|
|
352
|
+
const envPath = join(dir, '.env');
|
|
353
|
+
const existing = await readEnvFile(envPath);
|
|
354
|
+
const merged = { ...existing, ...envVars };
|
|
355
|
+
await writeEnvFile(envPath, merged);
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
/**
|
|
359
|
+
* Remove resource environment variables from the .env file.
|
|
360
|
+
* Only removes the specified keys if they exist.
|
|
361
|
+
*/
|
|
362
|
+
export async function removeResourceEnvVars(dir: string, keys: string[]): Promise<void> {
|
|
363
|
+
const envPath = join(dir, '.env');
|
|
364
|
+
const existing = await readEnvFile(envPath);
|
|
365
|
+
|
|
366
|
+
let changed = false;
|
|
367
|
+
for (const key of keys) {
|
|
368
|
+
if (key in existing) {
|
|
369
|
+
delete existing[key];
|
|
370
|
+
changed = true;
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
if (changed) {
|
|
375
|
+
await writeEnvFile(envPath, existing);
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
/**
|
|
380
|
+
* Get the value of a specific key from the .env file
|
|
381
|
+
*/
|
|
382
|
+
export async function getEnvVar(dir: string, key: string): Promise<string | undefined> {
|
|
383
|
+
const envPath = join(dir, '.env');
|
|
384
|
+
const existing = await readEnvFile(envPath);
|
|
385
|
+
return existing[key];
|
|
386
|
+
}
|
package/src/tui.ts
CHANGED
|
@@ -1722,6 +1722,85 @@ export interface TableColumn {
|
|
|
1722
1722
|
alignment?: 'left' | 'right' | 'center';
|
|
1723
1723
|
}
|
|
1724
1724
|
|
|
1725
|
+
/**
|
|
1726
|
+
* Table options
|
|
1727
|
+
*/
|
|
1728
|
+
export interface TableOptions {
|
|
1729
|
+
/**
|
|
1730
|
+
* If true, returns the table as a string instead of printing to stdout
|
|
1731
|
+
*/
|
|
1732
|
+
render?: boolean;
|
|
1733
|
+
/**
|
|
1734
|
+
* Force a specific layout mode
|
|
1735
|
+
* - 'horizontal': Traditional table with columns side by side
|
|
1736
|
+
* - 'vertical': Stacked format with "Column: value" on separate lines
|
|
1737
|
+
* - 'auto': Automatically choose based on terminal width (default)
|
|
1738
|
+
*/
|
|
1739
|
+
layout?: 'horizontal' | 'vertical' | 'auto';
|
|
1740
|
+
}
|
|
1741
|
+
|
|
1742
|
+
/**
|
|
1743
|
+
* Calculate the minimum width needed to display a horizontal table
|
|
1744
|
+
* Accounts for column padding, borders, and content width
|
|
1745
|
+
*/
|
|
1746
|
+
function calculateTableWidth<T extends Record<string, unknown>>(
|
|
1747
|
+
data: T[],
|
|
1748
|
+
columnNames: string[]
|
|
1749
|
+
): number {
|
|
1750
|
+
const columnWidths = columnNames.map((colName) => {
|
|
1751
|
+
let maxWidth = getDisplayWidth(colName);
|
|
1752
|
+
for (const row of data) {
|
|
1753
|
+
const value = row[colName];
|
|
1754
|
+
const valueStr = value !== undefined && value !== null ? String(value) : '';
|
|
1755
|
+
const valueWidth = getDisplayWidth(valueStr);
|
|
1756
|
+
if (valueWidth > maxWidth) {
|
|
1757
|
+
maxWidth = valueWidth;
|
|
1758
|
+
}
|
|
1759
|
+
}
|
|
1760
|
+
return maxWidth;
|
|
1761
|
+
});
|
|
1762
|
+
|
|
1763
|
+
// Add padding (1 space each side) and border characters per column
|
|
1764
|
+
// cli-table3 uses: │ col1 │ col2 │ = 3 chars per column + 1 for final border
|
|
1765
|
+
const paddingPerColumn = 3;
|
|
1766
|
+
const totalWidth = columnWidths.reduce((sum, w) => sum + w + paddingPerColumn, 0) + 1;
|
|
1767
|
+
|
|
1768
|
+
return totalWidth;
|
|
1769
|
+
}
|
|
1770
|
+
|
|
1771
|
+
/**
|
|
1772
|
+
* Render table in vertical (stacked) format for narrow terminals
|
|
1773
|
+
*/
|
|
1774
|
+
function renderVerticalTable<T extends Record<string, unknown>>(
|
|
1775
|
+
data: T[],
|
|
1776
|
+
columnNames: string[]
|
|
1777
|
+
): string {
|
|
1778
|
+
const lines: string[] = [];
|
|
1779
|
+
const mutedColor = getColor('muted');
|
|
1780
|
+
const reset = getColor('reset');
|
|
1781
|
+
|
|
1782
|
+
// Calculate max column name width for alignment
|
|
1783
|
+
const maxLabelWidth = Math.max(...columnNames.map((name) => 1 + getDisplayWidth(name)));
|
|
1784
|
+
|
|
1785
|
+
for (let i = 0; i < data.length; i++) {
|
|
1786
|
+
const row = data[i];
|
|
1787
|
+
|
|
1788
|
+
for (const colName of columnNames) {
|
|
1789
|
+
const value = row[colName];
|
|
1790
|
+
const valueStr = value !== undefined && value !== null ? String(value) : '';
|
|
1791
|
+
const paddedLabel = `${colName}:`.padEnd(maxLabelWidth);
|
|
1792
|
+
lines.push(`${mutedColor}${paddedLabel}${reset} ${valueStr}`);
|
|
1793
|
+
}
|
|
1794
|
+
|
|
1795
|
+
// Add empty line between rows (but not after last row)
|
|
1796
|
+
if (i < data.length - 1) {
|
|
1797
|
+
lines.push('');
|
|
1798
|
+
}
|
|
1799
|
+
}
|
|
1800
|
+
|
|
1801
|
+
return lines.join('\n') + '\n';
|
|
1802
|
+
}
|
|
1803
|
+
|
|
1725
1804
|
/**
|
|
1726
1805
|
* Display data in a formatted table using cli-table3
|
|
1727
1806
|
*
|
|
@@ -1729,6 +1808,9 @@ export interface TableColumn {
|
|
|
1729
1808
|
* 1. Simple mode: Pass data array and optional column names
|
|
1730
1809
|
* 2. Advanced mode: Pass column configurations with custom names and alignment
|
|
1731
1810
|
*
|
|
1811
|
+
* Automatically switches between horizontal (wide) and vertical (narrow) layouts
|
|
1812
|
+
* based on terminal width. Use the `layout` option to force a specific mode.
|
|
1813
|
+
*
|
|
1732
1814
|
* @param data - Array of data objects to display
|
|
1733
1815
|
* @param columns - Column names or column configurations
|
|
1734
1816
|
* @param options - Additional options
|
|
@@ -1737,23 +1819,8 @@ export interface TableColumn {
|
|
|
1737
1819
|
export function table<T extends Record<string, unknown>>(
|
|
1738
1820
|
data: T[],
|
|
1739
1821
|
columns?: (keyof T)[] | TableColumn[],
|
|
1740
|
-
options?:
|
|
1822
|
+
options?: TableOptions
|
|
1741
1823
|
): string | void {
|
|
1742
|
-
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
1743
|
-
const Table = require('cli-table3') as new (options?: {
|
|
1744
|
-
head?: string[];
|
|
1745
|
-
colAligns?: Array<'left' | 'right' | 'center'>;
|
|
1746
|
-
wordWrap?: boolean;
|
|
1747
|
-
style?: {
|
|
1748
|
-
head?: string[];
|
|
1749
|
-
border?: string[];
|
|
1750
|
-
};
|
|
1751
|
-
colors?: boolean;
|
|
1752
|
-
}) => {
|
|
1753
|
-
push(row: unknown[]): void;
|
|
1754
|
-
toString(): string;
|
|
1755
|
-
};
|
|
1756
|
-
|
|
1757
1824
|
if (!data || data.length === 0) {
|
|
1758
1825
|
return options?.render ? '' : undefined;
|
|
1759
1826
|
}
|
|
@@ -1764,14 +1831,11 @@ export function table<T extends Record<string, unknown>>(
|
|
|
1764
1831
|
let columnNames: string[];
|
|
1765
1832
|
let colAligns: Array<'left' | 'right' | 'center'>;
|
|
1766
1833
|
|
|
1767
|
-
let headings: string[];
|
|
1768
|
-
|
|
1769
1834
|
if (isAdvancedMode) {
|
|
1770
1835
|
// Advanced mode: use provided column configurations
|
|
1771
1836
|
const columnConfigs = columns as TableColumn[];
|
|
1772
1837
|
columnNames = columnConfigs.map((col) => col.name);
|
|
1773
1838
|
colAligns = columnConfigs.map((col) => col.alignment || 'left');
|
|
1774
|
-
headings = columnNames.map((name) => heading(name));
|
|
1775
1839
|
} else {
|
|
1776
1840
|
// Simple mode: determine column names from data or columns parameter
|
|
1777
1841
|
columnNames = columns
|
|
@@ -1780,31 +1844,59 @@ export function table<T extends Record<string, unknown>>(
|
|
|
1780
1844
|
? Object.keys(data[0])
|
|
1781
1845
|
: [];
|
|
1782
1846
|
colAligns = columnNames.map(() => 'left' as const);
|
|
1783
|
-
headings = columnNames.map((name) => heading(name));
|
|
1784
1847
|
}
|
|
1785
1848
|
|
|
1786
|
-
|
|
1787
|
-
|
|
1788
|
-
|
|
1789
|
-
|
|
1790
|
-
|
|
1791
|
-
head: [], // Disable cli-table3's default red styling - we apply our own via heading()
|
|
1792
|
-
border: [], // Disable default border styling too
|
|
1793
|
-
},
|
|
1794
|
-
colors: false, // Completely disable cli-table3's color system to preserve our ANSI codes
|
|
1795
|
-
});
|
|
1849
|
+
// Determine layout mode
|
|
1850
|
+
const layout = options?.layout ?? 'auto';
|
|
1851
|
+
const termWidth = process.stdout.columns || 80;
|
|
1852
|
+
const tableWidth = calculateTableWidth(data, columnNames);
|
|
1853
|
+
const useVertical = layout === 'vertical' || (layout === 'auto' && tableWidth > termWidth);
|
|
1796
1854
|
|
|
1797
|
-
|
|
1798
|
-
|
|
1799
|
-
|
|
1800
|
-
|
|
1801
|
-
|
|
1802
|
-
|
|
1855
|
+
let output: string;
|
|
1856
|
+
|
|
1857
|
+
if (useVertical) {
|
|
1858
|
+
output = renderVerticalTable(data, columnNames);
|
|
1859
|
+
} else {
|
|
1860
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
1861
|
+
const Table = require('cli-table3') as new (options?: {
|
|
1862
|
+
head?: string[];
|
|
1863
|
+
colAligns?: Array<'left' | 'right' | 'center'>;
|
|
1864
|
+
wordWrap?: boolean;
|
|
1865
|
+
style?: {
|
|
1866
|
+
head?: string[];
|
|
1867
|
+
border?: string[];
|
|
1868
|
+
};
|
|
1869
|
+
colors?: boolean;
|
|
1870
|
+
}) => {
|
|
1871
|
+
push(row: unknown[]): void;
|
|
1872
|
+
toString(): string;
|
|
1873
|
+
};
|
|
1874
|
+
|
|
1875
|
+
const headings = columnNames.map((name) => heading(name));
|
|
1876
|
+
|
|
1877
|
+
const t = new Table({
|
|
1878
|
+
head: headings,
|
|
1879
|
+
colAligns,
|
|
1880
|
+
wordWrap: true,
|
|
1881
|
+
style: {
|
|
1882
|
+
head: [], // Disable cli-table3's default red styling - we apply our own via heading()
|
|
1883
|
+
border: [], // Disable default border styling too
|
|
1884
|
+
},
|
|
1885
|
+
colors: false, // Completely disable cli-table3's color system to preserve our ANSI codes
|
|
1886
|
+
});
|
|
1887
|
+
|
|
1888
|
+
// Add rows to table
|
|
1889
|
+
for (const row of data) {
|
|
1890
|
+
const rowData: unknown[] = [];
|
|
1891
|
+
for (const colName of columnNames) {
|
|
1892
|
+
const value = row[colName];
|
|
1893
|
+
rowData.push(value !== undefined && value !== null ? String(value) : '');
|
|
1894
|
+
}
|
|
1895
|
+
t.push(rowData);
|
|
1803
1896
|
}
|
|
1804
|
-
t.push(rowData);
|
|
1805
|
-
}
|
|
1806
1897
|
|
|
1807
|
-
|
|
1898
|
+
output = t.toString();
|
|
1899
|
+
}
|
|
1808
1900
|
|
|
1809
1901
|
if (options?.render) {
|
|
1810
1902
|
return output;
|
package/src/types.ts
CHANGED
|
@@ -34,6 +34,7 @@ export const ConfigSchema = zod.object({
|
|
|
34
34
|
transport_url: zod.url().optional().describe('Override transport URL'),
|
|
35
35
|
stream_url: zod.url().optional().describe('Override stream URL'),
|
|
36
36
|
kv_url: zod.url().optional().describe('Override keyvalue URL'),
|
|
37
|
+
sandbox_url: zod.url().optional().describe('Override sandbox URL'),
|
|
37
38
|
vector_url: zod.url().optional().describe('Override vector store URL'),
|
|
38
39
|
catalyst_url: zod.url().optional().describe('Override catalyst URL'),
|
|
39
40
|
ion_url: zod.url().optional().describe('Override ion URL'),
|
|
@@ -228,6 +229,7 @@ export interface CommandSchemas {
|
|
|
228
229
|
args?: z.ZodType;
|
|
229
230
|
options?: z.ZodType;
|
|
230
231
|
response?: z.ZodType;
|
|
232
|
+
aliases?: Record<string, string[]>;
|
|
231
233
|
}
|
|
232
234
|
|
|
233
235
|
export type ProjectConfig = zod.infer<typeof ProjectSchema>;
|
|
@@ -377,18 +379,18 @@ export function createSubcommand<
|
|
|
377
379
|
schema?: A extends z.ZodType
|
|
378
380
|
? Op extends z.ZodType
|
|
379
381
|
? Res extends z.ZodType
|
|
380
|
-
? { args: A; options: Op; response: Res }
|
|
381
|
-
: { args: A; options: Op; response?: z.ZodType }
|
|
382
|
+
? { args: A; options: Op; response: Res; aliases?: Record<string, string[]> }
|
|
383
|
+
: { args: A; options: Op; response?: z.ZodType; aliases?: Record<string, string[]> }
|
|
382
384
|
: Res extends z.ZodType
|
|
383
|
-
? { args: A; response: Res }
|
|
384
|
-
: { args: A; response?: z.ZodType }
|
|
385
|
+
? { args: A; response: Res; aliases?: Record<string, string[]> }
|
|
386
|
+
: { args: A; response?: z.ZodType; aliases?: Record<string, string[]> }
|
|
385
387
|
: Op extends z.ZodType
|
|
386
388
|
? Res extends z.ZodType
|
|
387
|
-
? { options: Op; response: Res }
|
|
388
|
-
: { options: Op; response?: z.ZodType }
|
|
389
|
+
? { options: Op; response: Res; aliases?: Record<string, string[]> }
|
|
390
|
+
: { options: Op; response?: z.ZodType; aliases?: Record<string, string[]> }
|
|
389
391
|
: Res extends z.ZodType
|
|
390
|
-
? { response: Res }
|
|
391
|
-
: { response?: z.ZodType };
|
|
392
|
+
? { response: Res; aliases?: Record<string, string[]> }
|
|
393
|
+
: { response?: z.ZodType; aliases?: Record<string, string[]> };
|
|
392
394
|
handler(
|
|
393
395
|
ctx: CommandContext<R, O, A, Op>
|
|
394
396
|
): Res extends z.ZodType ? z.infer<Res> | Promise<z.infer<Res>> : unknown | Promise<unknown>;
|
|
@@ -422,18 +424,18 @@ export function createCommand<
|
|
|
422
424
|
schema?: A extends z.ZodType
|
|
423
425
|
? Op extends z.ZodType
|
|
424
426
|
? Res extends z.ZodType
|
|
425
|
-
? { args: A; options: Op; response: Res }
|
|
426
|
-
: { args: A; options: Op; response?: z.ZodType }
|
|
427
|
+
? { args: A; options: Op; response: Res; aliases?: Record<string, string[]> }
|
|
428
|
+
: { args: A; options: Op; response?: z.ZodType; aliases?: Record<string, string[]> }
|
|
427
429
|
: Res extends z.ZodType
|
|
428
|
-
? { args: A; response: Res }
|
|
429
|
-
: { args: A; response?: z.ZodType }
|
|
430
|
+
? { args: A; response: Res; aliases?: Record<string, string[]> }
|
|
431
|
+
: { args: A; response?: z.ZodType; aliases?: Record<string, string[]> }
|
|
430
432
|
: Op extends z.ZodType
|
|
431
433
|
? Res extends z.ZodType
|
|
432
|
-
? { options: Op; response: Res }
|
|
433
|
-
: { options: Op; response?: z.ZodType }
|
|
434
|
+
? { options: Op; response: Res; aliases?: Record<string, string[]> }
|
|
435
|
+
: { options: Op; response?: z.ZodType; aliases?: Record<string, string[]> }
|
|
434
436
|
: Res extends z.ZodType
|
|
435
|
-
? { response: Res }
|
|
436
|
-
: { response?: z.ZodType };
|
|
437
|
+
? { response: Res; aliases?: Record<string, string[]> }
|
|
438
|
+
: { response?: z.ZodType; aliases?: Record<string, string[]> };
|
|
437
439
|
handler?(
|
|
438
440
|
ctx: CommandContext<R, O, A, Op>
|
|
439
441
|
): Res extends z.ZodType ? z.infer<Res> | Promise<z.infer<Res>> : unknown | Promise<unknown>;
|