@agentuity/cli 1.0.0 → 1.0.2
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/AGENTS.md +40 -24
- package/bin/cli.ts +47 -22
- package/dist/agent-detection.d.ts +23 -38
- package/dist/agent-detection.d.ts.map +1 -1
- package/dist/agent-detection.js +412 -153
- package/dist/agent-detection.js.map +1 -1
- package/dist/ai-help.d.ts +23 -0
- package/dist/ai-help.d.ts.map +1 -0
- package/dist/ai-help.js +328 -0
- package/dist/ai-help.js.map +1 -0
- package/dist/api.js +1 -1
- package/dist/api.js.map +1 -1
- package/dist/auth.d.ts +10 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +176 -16
- package/dist/auth.js.map +1 -1
- package/dist/banner.d.ts.map +1 -1
- package/dist/banner.js +5 -0
- package/dist/banner.js.map +1 -1
- package/dist/cache/agent-intro.d.ts +13 -0
- package/dist/cache/agent-intro.d.ts.map +1 -0
- package/dist/cache/agent-intro.js +54 -0
- package/dist/cache/agent-intro.js.map +1 -0
- package/dist/cache/index.d.ts +1 -0
- package/dist/cache/index.d.ts.map +1 -1
- package/dist/cache/index.js +1 -0
- package/dist/cache/index.js.map +1 -1
- package/dist/cache/resource-region.d.ts +3 -2
- package/dist/cache/resource-region.d.ts.map +1 -1
- package/dist/cache/resource-region.js +13 -4
- package/dist/cache/resource-region.js.map +1 -1
- package/dist/catalyst.d.ts +7 -0
- package/dist/catalyst.d.ts.map +1 -0
- package/dist/catalyst.js +15 -0
- package/dist/catalyst.js.map +1 -0
- package/dist/cli.d.ts +12 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +290 -67
- package/dist/cli.js.map +1 -1
- package/dist/cmd/ai/detect.d.ts +3 -0
- package/dist/cmd/ai/detect.d.ts.map +1 -0
- package/dist/cmd/ai/detect.js +49 -0
- package/dist/cmd/ai/detect.js.map +1 -0
- package/dist/cmd/ai/index.d.ts.map +1 -1
- package/dist/cmd/ai/index.js +11 -1
- package/dist/cmd/ai/index.js.map +1 -1
- package/dist/cmd/ai/intro.d.ts +7 -0
- package/dist/cmd/ai/intro.d.ts.map +1 -0
- package/dist/cmd/ai/intro.js +141 -0
- package/dist/cmd/ai/intro.js.map +1 -0
- package/dist/cmd/ai/opencode/run.d.ts.map +1 -1
- package/dist/cmd/ai/opencode/run.js +5 -0
- package/dist/cmd/ai/opencode/run.js.map +1 -1
- package/dist/cmd/build/ast.d.ts.map +1 -1
- package/dist/cmd/build/ast.js +79 -0
- package/dist/cmd/build/ast.js.map +1 -1
- package/dist/cmd/build/vite/bun-dev-server.d.ts.map +1 -1
- package/dist/cmd/build/vite/bun-dev-server.js +2 -0
- package/dist/cmd/build/vite/bun-dev-server.js.map +1 -1
- package/dist/cmd/build/vite/docs-generator.d.ts.map +1 -1
- package/dist/cmd/build/vite/docs-generator.js +15 -1
- package/dist/cmd/build/vite/docs-generator.js.map +1 -1
- package/dist/cmd/build/vite/env-types-generator.d.ts +26 -0
- package/dist/cmd/build/vite/env-types-generator.d.ts.map +1 -0
- package/dist/cmd/build/vite/env-types-generator.js +110 -0
- package/dist/cmd/build/vite/env-types-generator.js.map +1 -0
- package/dist/cmd/build/vite/index.d.ts +2 -0
- package/dist/cmd/build/vite/index.d.ts.map +1 -1
- package/dist/cmd/build/vite/index.js +12 -1
- package/dist/cmd/build/vite/index.js.map +1 -1
- package/dist/cmd/build/vite/public-asset-path-plugin.d.ts.map +1 -1
- package/dist/cmd/build/vite/public-asset-path-plugin.js.map +1 -1
- package/dist/cmd/build/vite/vite-builder.d.ts +2 -0
- package/dist/cmd/build/vite/vite-builder.d.ts.map +1 -1
- package/dist/cmd/build/vite/vite-builder.js +10 -1
- package/dist/cmd/build/vite/vite-builder.js.map +1 -1
- package/dist/cmd/cloud/db/create.js.map +1 -1
- package/dist/cmd/cloud/db/delete.js.map +1 -1
- package/dist/cmd/cloud/db/get.d.ts.map +1 -1
- package/dist/cmd/cloud/db/get.js +27 -12
- package/dist/cmd/cloud/db/get.js.map +1 -1
- package/dist/cmd/cloud/deploy-fork.d.ts.map +1 -1
- package/dist/cmd/cloud/deploy-fork.js +2 -0
- package/dist/cmd/cloud/deploy-fork.js.map +1 -1
- package/dist/cmd/cloud/deploy.d.ts.map +1 -1
- package/dist/cmd/cloud/deploy.js +17 -0
- package/dist/cmd/cloud/deploy.js.map +1 -1
- package/dist/cmd/cloud/env/import.js.map +1 -1
- package/dist/cmd/cloud/env/list.js.map +1 -1
- package/dist/cmd/cloud/env/push.js.map +1 -1
- package/dist/cmd/cloud/keyvalue/util.d.ts.map +1 -1
- package/dist/cmd/cloud/keyvalue/util.js +3 -3
- package/dist/cmd/cloud/keyvalue/util.js.map +1 -1
- package/dist/cmd/cloud/machine/list.js +3 -3
- package/dist/cmd/cloud/machine/list.js.map +1 -1
- package/dist/cmd/cloud/region/index.js.map +1 -1
- package/dist/cmd/cloud/region-lookup.d.ts +7 -4
- package/dist/cmd/cloud/region-lookup.d.ts.map +1 -1
- package/dist/cmd/cloud/region-lookup.js +59 -14
- package/dist/cmd/cloud/region-lookup.js.map +1 -1
- package/dist/cmd/cloud/sandbox/cp.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/cp.js +7 -5
- package/dist/cmd/cloud/sandbox/cp.js.map +1 -1
- package/dist/cmd/cloud/sandbox/create.js +1 -1
- package/dist/cmd/cloud/sandbox/create.js.map +1 -1
- package/dist/cmd/cloud/sandbox/delete.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/delete.js +8 -7
- package/dist/cmd/cloud/sandbox/delete.js.map +1 -1
- package/dist/cmd/cloud/sandbox/download.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/download.js +7 -5
- package/dist/cmd/cloud/sandbox/download.js.map +1 -1
- package/dist/cmd/cloud/sandbox/env.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/env.js +7 -5
- package/dist/cmd/cloud/sandbox/env.js.map +1 -1
- package/dist/cmd/cloud/sandbox/exec.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/exec.js +7 -5
- package/dist/cmd/cloud/sandbox/exec.js.map +1 -1
- package/dist/cmd/cloud/sandbox/get.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/get.js +12 -7
- package/dist/cmd/cloud/sandbox/get.js.map +1 -1
- package/dist/cmd/cloud/sandbox/list.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/list.js +40 -63
- package/dist/cmd/cloud/sandbox/list.js.map +1 -1
- package/dist/cmd/cloud/sandbox/ls.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/ls.js +7 -5
- package/dist/cmd/cloud/sandbox/ls.js.map +1 -1
- package/dist/cmd/cloud/sandbox/mkdir.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/mkdir.js +7 -5
- package/dist/cmd/cloud/sandbox/mkdir.js.map +1 -1
- package/dist/cmd/cloud/sandbox/rm.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/rm.js +7 -5
- package/dist/cmd/cloud/sandbox/rm.js.map +1 -1
- package/dist/cmd/cloud/sandbox/rmdir.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/rmdir.js +7 -5
- package/dist/cmd/cloud/sandbox/rmdir.js.map +1 -1
- package/dist/cmd/cloud/sandbox/run.js +1 -1
- package/dist/cmd/cloud/sandbox/run.js.map +1 -1
- package/dist/cmd/cloud/sandbox/snapshot/build.js.map +1 -1
- package/dist/cmd/cloud/sandbox/snapshot/get.js.map +1 -1
- package/dist/cmd/cloud/sandbox/upload.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/upload.js +7 -5
- package/dist/cmd/cloud/sandbox/upload.js.map +1 -1
- package/dist/cmd/cloud/sandbox/util.d.ts +2 -2
- package/dist/cmd/cloud/sandbox/util.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/util.js +14 -13
- package/dist/cmd/cloud/sandbox/util.js.map +1 -1
- package/dist/cmd/cloud/ssh.d.ts.map +1 -1
- package/dist/cmd/cloud/ssh.js +3 -3
- package/dist/cmd/cloud/ssh.js.map +1 -1
- package/dist/cmd/cloud/storage/create.js.map +1 -1
- package/dist/cmd/cloud/storage/delete.js.map +1 -1
- package/dist/cmd/cloud/storage/get.d.ts.map +1 -1
- package/dist/cmd/cloud/storage/get.js +5 -11
- package/dist/cmd/cloud/storage/get.js.map +1 -1
- package/dist/cmd/cloud/storage/list.d.ts.map +1 -1
- package/dist/cmd/cloud/storage/list.js +6 -6
- package/dist/cmd/cloud/storage/list.js.map +1 -1
- package/dist/cmd/cloud/stream/create.d.ts.map +1 -1
- package/dist/cmd/cloud/stream/create.js +7 -4
- package/dist/cmd/cloud/stream/create.js.map +1 -1
- package/dist/cmd/cloud/stream/delete.d.ts.map +1 -1
- package/dist/cmd/cloud/stream/delete.js +25 -4
- package/dist/cmd/cloud/stream/delete.js.map +1 -1
- package/dist/cmd/cloud/stream/get.d.ts.map +1 -1
- package/dist/cmd/cloud/stream/get.js +91 -62
- package/dist/cmd/cloud/stream/get.js.map +1 -1
- package/dist/cmd/cloud/stream/list.d.ts.map +1 -1
- package/dist/cmd/cloud/stream/list.js +66 -38
- package/dist/cmd/cloud/stream/list.js.map +1 -1
- package/dist/cmd/cloud/stream/util.d.ts +20 -0
- package/dist/cmd/cloud/stream/util.d.ts.map +1 -1
- package/dist/cmd/cloud/stream/util.js +27 -3
- package/dist/cmd/cloud/stream/util.js.map +1 -1
- package/dist/cmd/cloud/vector/util.d.ts.map +1 -1
- package/dist/cmd/cloud/vector/util.js +3 -3
- package/dist/cmd/cloud/vector/util.js.map +1 -1
- package/dist/cmd/dev/index.js.map +1 -1
- package/dist/cmd/git/account/add.js.map +1 -1
- package/dist/cmd/git/list.js.map +1 -1
- package/dist/cmd/project/add/database.d.ts +2 -0
- package/dist/cmd/project/add/database.d.ts.map +1 -0
- package/dist/cmd/project/add/database.js +123 -0
- package/dist/cmd/project/add/database.js.map +1 -0
- package/dist/cmd/project/add/domain.d.ts +2 -0
- package/dist/cmd/project/add/domain.d.ts.map +1 -0
- package/dist/cmd/project/add/domain.js +152 -0
- package/dist/cmd/project/add/domain.js.map +1 -0
- package/dist/cmd/project/add/index.d.ts +2 -0
- package/dist/cmd/project/add/index.d.ts.map +1 -0
- package/dist/cmd/project/add/index.js +35 -0
- package/dist/cmd/project/add/index.js.map +1 -0
- package/dist/cmd/project/add/storage.d.ts +2 -0
- package/dist/cmd/project/add/storage.d.ts.map +1 -0
- package/dist/cmd/project/add/storage.js +123 -0
- package/dist/cmd/project/add/storage.js.map +1 -0
- package/dist/cmd/project/auth/init.js.map +1 -1
- package/dist/cmd/project/index.d.ts.map +1 -1
- package/dist/cmd/project/index.js +7 -0
- package/dist/cmd/project/index.js.map +1 -1
- package/dist/cmd/project/reconcile.d.ts.map +1 -1
- package/dist/cmd/project/reconcile.js +32 -0
- package/dist/cmd/project/reconcile.js.map +1 -1
- package/dist/cmd/support/report.js.map +1 -1
- package/dist/cmd/support/system.js +2 -2
- package/dist/cmd/support/system.js.map +1 -1
- package/dist/config.d.ts +6 -3
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +31 -7
- package/dist/config.js.map +1 -1
- package/dist/errors.d.ts +2 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +5 -0
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/repl.js +2 -1
- package/dist/repl.js.map +1 -1
- package/dist/tui/box.d.ts +3 -1
- package/dist/tui/box.d.ts.map +1 -1
- package/dist/tui/box.js +22 -7
- package/dist/tui/box.js.map +1 -1
- package/dist/tui/colors.d.ts +0 -3
- package/dist/tui/colors.d.ts.map +1 -1
- package/dist/tui/colors.js +76 -23
- package/dist/tui/colors.js.map +1 -1
- package/dist/tui/prompt.d.ts +2 -0
- package/dist/tui/prompt.d.ts.map +1 -1
- package/dist/tui/prompt.js +44 -3
- package/dist/tui/prompt.js.map +1 -1
- package/dist/tui/symbols.d.ts +0 -4
- package/dist/tui/symbols.d.ts.map +1 -1
- package/dist/tui/symbols.js +5 -0
- package/dist/tui/symbols.js.map +1 -1
- package/dist/tui.d.ts +8 -0
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +54 -9
- package/dist/tui.js.map +1 -1
- package/dist/types.d.ts +37 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -1
- package/dist/version-check.d.ts.map +1 -1
- package/dist/version-check.js +5 -0
- package/dist/version-check.js.map +1 -1
- package/package.json +6 -6
- package/src/agent-detection.ts +457 -160
- package/src/ai-help.ts +391 -0
- package/src/api.ts +1 -1
- package/src/auth.ts +226 -17
- package/src/banner.ts +5 -0
- package/src/cache/agent-intro.ts +61 -0
- package/src/cache/index.ts +2 -0
- package/src/cache/resource-region.ts +28 -7
- package/src/catalyst.ts +16 -0
- package/src/cli.ts +375 -93
- package/src/cmd/ai/detect.ts +52 -0
- package/src/cmd/ai/index.ts +11 -1
- package/src/cmd/ai/intro.ts +154 -0
- package/src/cmd/ai/opencode/run.ts +5 -0
- package/src/cmd/build/ast.ts +97 -0
- package/src/cmd/build/vite/bun-dev-server.ts +2 -0
- package/src/cmd/build/vite/docs-generator.ts +15 -1
- package/src/cmd/build/vite/env-types-generator.ts +145 -0
- package/src/cmd/build/vite/index.ts +15 -0
- package/src/cmd/build/vite/public-asset-path-plugin.ts +8 -2
- package/src/cmd/build/vite/vite-builder.ts +31 -11
- package/src/cmd/cloud/db/create.ts +16 -16
- package/src/cmd/cloud/db/delete.ts +19 -19
- package/src/cmd/cloud/db/get.ts +32 -17
- package/src/cmd/cloud/deploy-fork.ts +2 -0
- package/src/cmd/cloud/deploy.ts +17 -0
- package/src/cmd/cloud/env/import.ts +6 -6
- package/src/cmd/cloud/env/list.ts +11 -11
- package/src/cmd/cloud/env/push.ts +6 -6
- package/src/cmd/cloud/keyvalue/util.ts +3 -3
- package/src/cmd/cloud/machine/list.ts +3 -3
- package/src/cmd/cloud/region/index.ts +3 -3
- package/src/cmd/cloud/region-lookup.ts +82 -22
- package/src/cmd/cloud/sandbox/cp.ts +9 -4
- package/src/cmd/cloud/sandbox/create.ts +1 -1
- package/src/cmd/cloud/sandbox/delete.ts +10 -7
- package/src/cmd/cloud/sandbox/download.ts +8 -5
- package/src/cmd/cloud/sandbox/env.ts +8 -5
- package/src/cmd/cloud/sandbox/exec.ts +10 -5
- package/src/cmd/cloud/sandbox/get.ts +13 -7
- package/src/cmd/cloud/sandbox/list.ts +47 -73
- package/src/cmd/cloud/sandbox/ls.ts +9 -5
- package/src/cmd/cloud/sandbox/mkdir.ts +9 -5
- package/src/cmd/cloud/sandbox/rm.ts +9 -5
- package/src/cmd/cloud/sandbox/rmdir.ts +9 -5
- package/src/cmd/cloud/sandbox/run.ts +1 -1
- package/src/cmd/cloud/sandbox/snapshot/build.ts +31 -31
- package/src/cmd/cloud/sandbox/snapshot/get.ts +17 -17
- package/src/cmd/cloud/sandbox/upload.ts +8 -5
- package/src/cmd/cloud/sandbox/util.ts +15 -14
- package/src/cmd/cloud/ssh.ts +2 -4
- package/src/cmd/cloud/storage/create.ts +16 -16
- package/src/cmd/cloud/storage/delete.ts +19 -19
- package/src/cmd/cloud/storage/get.ts +5 -16
- package/src/cmd/cloud/storage/list.ts +12 -6
- package/src/cmd/cloud/stream/create.ts +8 -4
- package/src/cmd/cloud/stream/delete.ts +28 -4
- package/src/cmd/cloud/stream/get.ts +102 -64
- package/src/cmd/cloud/stream/list.ts +76 -44
- package/src/cmd/cloud/stream/util.ts +39 -3
- package/src/cmd/cloud/vector/util.ts +3 -3
- package/src/cmd/dev/index.ts +4 -4
- package/src/cmd/git/account/add.ts +5 -5
- package/src/cmd/git/list.ts +7 -7
- package/src/cmd/project/add/database.ts +145 -0
- package/src/cmd/project/add/domain.ts +181 -0
- package/src/cmd/project/add/index.ts +35 -0
- package/src/cmd/project/add/storage.ts +147 -0
- package/src/cmd/project/auth/init.ts +6 -6
- package/src/cmd/project/index.ts +7 -0
- package/src/cmd/project/reconcile.ts +40 -0
- package/src/cmd/support/report.ts +5 -5
- package/src/cmd/support/system.ts +2 -2
- package/src/config.ts +40 -12
- package/src/errors.ts +7 -0
- package/src/index.ts +11 -0
- package/src/repl.ts +4 -1
- package/src/tui/box.ts +24 -9
- package/src/tui/colors.ts +83 -26
- package/src/tui/prompt.ts +55 -3
- package/src/tui/symbols.ts +6 -0
- package/src/tui.ts +55 -9
- package/src/types.ts +46 -2
- package/src/version-check.ts +6 -0
package/src/tui/prompt.ts
CHANGED
|
@@ -55,6 +55,16 @@ interface PromptState {
|
|
|
55
55
|
export class PromptFlow {
|
|
56
56
|
private states: PromptState[] = [];
|
|
57
57
|
|
|
58
|
+
private isInteractive(): boolean {
|
|
59
|
+
return Boolean(process.stdin.isTTY && process.stdout.isTTY);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
private nonInteractiveError(message: string): Error {
|
|
63
|
+
return new Error(
|
|
64
|
+
`${message} Use the appropriate --flag or environment variable to provide input.`
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
|
|
58
68
|
/**
|
|
59
69
|
* Display intro banner
|
|
60
70
|
*/
|
|
@@ -84,7 +94,24 @@ export class PromptFlow {
|
|
|
84
94
|
* Text input prompt
|
|
85
95
|
*/
|
|
86
96
|
async text(options: TextOptions): Promise<string> {
|
|
87
|
-
const { message,
|
|
97
|
+
const { message, validate } = options;
|
|
98
|
+
const initial = options.initial ?? '';
|
|
99
|
+
const hasDefault = options.initial !== undefined;
|
|
100
|
+
|
|
101
|
+
if (!this.isInteractive()) {
|
|
102
|
+
if (hasDefault) {
|
|
103
|
+
const validationResult = validate ? await validate(initial) : true;
|
|
104
|
+
if (validationResult === true) {
|
|
105
|
+
return initial;
|
|
106
|
+
}
|
|
107
|
+
// Validation failed - include the error message if it's a string
|
|
108
|
+
const errorDetail = typeof validationResult === 'string' ? `: ${validationResult}` : '';
|
|
109
|
+
throw this.nonInteractiveError(
|
|
110
|
+
`Cannot prompt for "${message}" in non-interactive mode. Validation failed for default value "${initial}"${errorDetail}.`
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
throw this.nonInteractiveError(`Cannot prompt for "${message}" in non-interactive mode.`);
|
|
114
|
+
}
|
|
88
115
|
|
|
89
116
|
return new Promise((resolve, reject) => {
|
|
90
117
|
const rl = readline.createInterface({
|
|
@@ -208,6 +235,10 @@ export class PromptFlow {
|
|
|
208
235
|
async confirm(options: ConfirmOptions): Promise<boolean> {
|
|
209
236
|
const { message, initial = false } = options;
|
|
210
237
|
|
|
238
|
+
if (!this.isInteractive()) {
|
|
239
|
+
return initial;
|
|
240
|
+
}
|
|
241
|
+
|
|
211
242
|
return new Promise((resolve, reject) => {
|
|
212
243
|
const hint = initial ? 'Y/n' : 'y/N';
|
|
213
244
|
|
|
@@ -292,6 +323,18 @@ export class PromptFlow {
|
|
|
292
323
|
async select<T = string>(options: SelectOptions<T>): Promise<T> {
|
|
293
324
|
const { message, options: choices, initial } = options;
|
|
294
325
|
|
|
326
|
+
if (!this.isInteractive()) {
|
|
327
|
+
let selectedIndex = choices.findIndex((c) => c.value === initial);
|
|
328
|
+
if (selectedIndex === -1) selectedIndex = 0;
|
|
329
|
+
const selected = choices[selectedIndex];
|
|
330
|
+
if (!selected) {
|
|
331
|
+
throw this.nonInteractiveError(
|
|
332
|
+
`Cannot prompt for "${message}" in non-interactive mode.`
|
|
333
|
+
);
|
|
334
|
+
}
|
|
335
|
+
return selected.value;
|
|
336
|
+
}
|
|
337
|
+
|
|
295
338
|
return new Promise((resolve, reject) => {
|
|
296
339
|
let selectedIndex = choices.findIndex((c) => c.value === initial);
|
|
297
340
|
if (selectedIndex === -1) selectedIndex = 0;
|
|
@@ -397,6 +440,11 @@ export class PromptFlow {
|
|
|
397
440
|
async multiselect<T = string>(options: MultiSelectOptions<T>): Promise<T[]> {
|
|
398
441
|
const { message, options: choices, initial = [] } = options;
|
|
399
442
|
|
|
443
|
+
if (!this.isInteractive()) {
|
|
444
|
+
const choiceValues = new Set(choices.map((choice) => choice.value));
|
|
445
|
+
return initial.filter((value) => choiceValues.has(value));
|
|
446
|
+
}
|
|
447
|
+
|
|
400
448
|
return new Promise((resolve, reject) => {
|
|
401
449
|
let cursorIndex = 0;
|
|
402
450
|
const selected = new Set<number>(
|
|
@@ -466,8 +514,12 @@ export class PromptFlow {
|
|
|
466
514
|
|
|
467
515
|
// Sort indices to get consistent order for both values and labels
|
|
468
516
|
const sortedIndices = Array.from(selected).sort((a, b) => a - b);
|
|
469
|
-
const values = sortedIndices
|
|
470
|
-
|
|
517
|
+
const values = sortedIndices
|
|
518
|
+
.map((i) => choices[i]?.value)
|
|
519
|
+
.filter((v) => v !== undefined);
|
|
520
|
+
const labels = sortedIndices
|
|
521
|
+
.map((i) => choices[i]?.label)
|
|
522
|
+
.filter((l) => l !== undefined);
|
|
471
523
|
|
|
472
524
|
// Clear all lines (message + all choices)
|
|
473
525
|
const totalLines = choices.length + 1;
|
package/src/tui/symbols.ts
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Box drawing and UI symbols for TUI components
|
|
3
3
|
* Supports Unicode with ASCII fallbacks for non-unicode terminals
|
|
4
4
|
*/
|
|
5
|
+
import { getExecutingAgent } from '../agent-detection';
|
|
5
6
|
|
|
6
7
|
// Detect unicode support
|
|
7
8
|
const isUnicodeSupported = (): boolean => {
|
|
@@ -10,6 +11,11 @@ const isUnicodeSupported = (): boolean => {
|
|
|
10
11
|
return true;
|
|
11
12
|
}
|
|
12
13
|
|
|
14
|
+
// Use ASCII for AI coding agents (cleaner output for parsing)
|
|
15
|
+
if (getExecutingAgent()) {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
|
|
13
19
|
if (process.platform !== 'win32') {
|
|
14
20
|
return process.env.TERM !== 'linux'; // Linux console (kernel) doesn't support Unicode
|
|
15
21
|
}
|
package/src/tui.ts
CHANGED
|
@@ -15,6 +15,7 @@ import type { Profile } from './types';
|
|
|
15
15
|
import { type APIClient as APIClientType } from './api';
|
|
16
16
|
import { getExitCode } from './errors';
|
|
17
17
|
import { maskSecret } from './env-util';
|
|
18
|
+
import { getExecutingAgent } from './agent-detection';
|
|
18
19
|
|
|
19
20
|
// Install global exit handler to always restore terminal cursor
|
|
20
21
|
// This ensures cursor is restored even when process.exit() is called directly
|
|
@@ -28,6 +29,10 @@ function ensureCursorRestoration(): void {
|
|
|
28
29
|
if (process.env.CI) {
|
|
29
30
|
return;
|
|
30
31
|
}
|
|
32
|
+
// Skip cursor restoration when running from an AI coding agent
|
|
33
|
+
if (getExecutingAgent()) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
31
36
|
// Restore cursor visibility
|
|
32
37
|
process.stderr.write('\x1B[?25h');
|
|
33
38
|
};
|
|
@@ -56,26 +61,63 @@ export type {
|
|
|
56
61
|
MultiSelectOptions,
|
|
57
62
|
} from './tui/prompt';
|
|
58
63
|
|
|
59
|
-
// Icons
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
64
|
+
// Icons - use plain text alternatives when running from an AI coding agent
|
|
65
|
+
function getIcons() {
|
|
66
|
+
if (getExecutingAgent()) {
|
|
67
|
+
return {
|
|
68
|
+
success: '[OK]',
|
|
69
|
+
error: '[ERROR]',
|
|
70
|
+
warning: '[WARN]',
|
|
71
|
+
info: '[INFO]',
|
|
72
|
+
arrow: '->',
|
|
73
|
+
bullet: '-',
|
|
74
|
+
} as const;
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
success: '✓',
|
|
78
|
+
error: '✗',
|
|
79
|
+
warning: '⚠',
|
|
80
|
+
info: 'ℹ',
|
|
81
|
+
arrow: '→',
|
|
82
|
+
bullet: '•',
|
|
83
|
+
} as const;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Export ICONS as a getter for backward compatibility
|
|
87
|
+
// Proxy with full traps for enumeration and serialization support
|
|
88
|
+
export const ICONS = new Proxy({} as ReturnType<typeof getIcons>, {
|
|
89
|
+
get(_target, prop: keyof ReturnType<typeof getIcons>) {
|
|
90
|
+
return getIcons()[prop];
|
|
91
|
+
},
|
|
92
|
+
has(_target, prop) {
|
|
93
|
+
return prop in getIcons();
|
|
94
|
+
},
|
|
95
|
+
ownKeys() {
|
|
96
|
+
return Object.keys(getIcons());
|
|
97
|
+
},
|
|
98
|
+
getOwnPropertyDescriptor(_target, prop) {
|
|
99
|
+
const icons = getIcons();
|
|
100
|
+
if (prop in icons) {
|
|
101
|
+
return { configurable: true, enumerable: true, value: icons[prop as keyof typeof icons] };
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
});
|
|
68
105
|
|
|
69
106
|
/**
|
|
70
107
|
* Check if we should treat the terminal as TTY-like for interactive output
|
|
71
108
|
* (real TTY on stdout or stderr, or FORCE_COLOR set by fork wrapper).
|
|
72
109
|
* Returns false in CI environments since CI terminals often don't support
|
|
73
110
|
* cursor control sequences reliably.
|
|
111
|
+
* Returns false when running from an AI coding agent (no interactive prompts/spinners).
|
|
74
112
|
*/
|
|
75
113
|
export function isTTYLike(): boolean {
|
|
76
114
|
if (process.env.CI) {
|
|
77
115
|
return false;
|
|
78
116
|
}
|
|
117
|
+
// Disable interactive features when running from an AI coding agent
|
|
118
|
+
if (getExecutingAgent()) {
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
79
121
|
return !!process.stdout.isTTY || !!process.stderr.isTTY || process.env.FORCE_COLOR === '1';
|
|
80
122
|
}
|
|
81
123
|
|
|
@@ -100,6 +142,10 @@ export function shouldUseColors(): boolean {
|
|
|
100
142
|
if (process.env.FORCE_COLOR === '1') {
|
|
101
143
|
return true;
|
|
102
144
|
}
|
|
145
|
+
// Disable colors when running from an AI coding agent (cleaner output for parsing)
|
|
146
|
+
if (getExecutingAgent()) {
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
103
149
|
return (
|
|
104
150
|
!process.env.NO_COLOR &&
|
|
105
151
|
!process.env.CI &&
|
package/src/types.ts
CHANGED
|
@@ -54,6 +54,7 @@ export const ConfigSchema = zod.object({
|
|
|
54
54
|
last_legacy_warning: zod.number().optional().describe('Last legacy CLI warning timestamp'),
|
|
55
55
|
signup_banner_shown: zod.boolean().optional().describe('If the signup banner was shown'),
|
|
56
56
|
orgId: zod.string().optional().describe('Default organization ID'),
|
|
57
|
+
projectId: zod.string().optional().describe('Default project ID'),
|
|
57
58
|
region: zod.string().optional().describe('Default cloud region'),
|
|
58
59
|
project_dir: zod.string().optional().describe('Last used project directory'),
|
|
59
60
|
})
|
|
@@ -284,6 +285,7 @@ export interface AuthData {
|
|
|
284
285
|
|
|
285
286
|
export interface GlobalOptions {
|
|
286
287
|
config?: string;
|
|
288
|
+
profile?: string;
|
|
287
289
|
logLevel: LogLevel;
|
|
288
290
|
logTimestamp?: boolean;
|
|
289
291
|
logPrefix?: boolean;
|
|
@@ -322,6 +324,38 @@ export interface CommandSchemas {
|
|
|
322
324
|
aliases?: Record<string, string[]>;
|
|
323
325
|
}
|
|
324
326
|
|
|
327
|
+
/**
|
|
328
|
+
* Declarative resource selection rule for schema-driven testing
|
|
329
|
+
*/
|
|
330
|
+
export interface ResourceSelectionRule {
|
|
331
|
+
/** Resource type */
|
|
332
|
+
resource: 'org' | 'project' | 'region';
|
|
333
|
+
|
|
334
|
+
/** Is this resource required for the command? */
|
|
335
|
+
required: boolean;
|
|
336
|
+
|
|
337
|
+
/** CLI flag name (e.g., 'org-id', 'region') */
|
|
338
|
+
flag: string;
|
|
339
|
+
|
|
340
|
+
/** Environment variable name */
|
|
341
|
+
envVar: string;
|
|
342
|
+
|
|
343
|
+
/** Config preference key (if applicable) */
|
|
344
|
+
configPref?: string;
|
|
345
|
+
|
|
346
|
+
/** Can be implied from context (e.g., project from agentuity.json) */
|
|
347
|
+
canBeImplied?: boolean;
|
|
348
|
+
|
|
349
|
+
/** Source file or context for implied values (e.g., 'agentuity.json') */
|
|
350
|
+
impliedFrom?: string;
|
|
351
|
+
|
|
352
|
+
/** Can be inferred from cache (for prefixed IDs) */
|
|
353
|
+
canUseCache?: boolean;
|
|
354
|
+
|
|
355
|
+
/** Operation type affects behavior */
|
|
356
|
+
operationType?: 'read' | 'execute' | 'mutate';
|
|
357
|
+
}
|
|
358
|
+
|
|
325
359
|
export type ProjectConfig = zod.infer<typeof ProjectSchema>;
|
|
326
360
|
|
|
327
361
|
export type Requires = {
|
|
@@ -428,13 +462,13 @@ export type CommandContextFromSpecs<
|
|
|
428
462
|
*
|
|
429
463
|
* @example
|
|
430
464
|
* ```typescript
|
|
431
|
-
* const agent =
|
|
465
|
+
* const agent = ctx.getExecutingAgent();
|
|
432
466
|
* if (agent) {
|
|
433
467
|
* logger.debug(`Running from agent: ${agent}`);
|
|
434
468
|
* }
|
|
435
469
|
* ```
|
|
436
470
|
*/
|
|
437
|
-
|
|
471
|
+
getExecutingAgent: () => string | undefined;
|
|
438
472
|
} & AddArgs<A> &
|
|
439
473
|
AddOpts<Op> &
|
|
440
474
|
AddAuth<AuthMode<R, O>> &
|
|
@@ -480,6 +514,7 @@ export function createSubcommand<
|
|
|
480
514
|
tags?: string[];
|
|
481
515
|
skipSkill?: boolean;
|
|
482
516
|
webUrl?: WebUrl<R, O, A, Op>;
|
|
517
|
+
resourceRules?: ResourceSelectionRule[];
|
|
483
518
|
schema?: A extends z.ZodType
|
|
484
519
|
? Op extends z.ZodType
|
|
485
520
|
? Res extends z.ZodType
|
|
@@ -527,6 +562,7 @@ export function createCommand<
|
|
|
527
562
|
tags?: string[];
|
|
528
563
|
skipSkill?: boolean;
|
|
529
564
|
webUrl?: WebUrl<R, O, A, Op>;
|
|
565
|
+
resourceRules?: ResourceSelectionRule[];
|
|
530
566
|
schema?: A extends z.ZodType
|
|
531
567
|
? Op extends z.ZodType
|
|
532
568
|
? Res extends z.ZodType
|
|
@@ -567,6 +603,7 @@ type CommandDefBase =
|
|
|
567
603
|
pagination?: PaginationInfo;
|
|
568
604
|
tags?: string[];
|
|
569
605
|
schema?: CommandSchemas;
|
|
606
|
+
resourceRules?: ResourceSelectionRule[];
|
|
570
607
|
webUrl?: string | ((ctx: CommandContext) => string | undefined | null);
|
|
571
608
|
handler(ctx: CommandContext): unknown | Promise<unknown>;
|
|
572
609
|
subcommands?: SubcommandDefinition[];
|
|
@@ -587,6 +624,7 @@ type CommandDefBase =
|
|
|
587
624
|
pagination?: PaginationInfo;
|
|
588
625
|
tags?: string[];
|
|
589
626
|
schema?: CommandSchemas;
|
|
627
|
+
resourceRules?: ResourceSelectionRule[];
|
|
590
628
|
webUrl?: string | ((ctx: CommandContext) => string | undefined | null);
|
|
591
629
|
handler?: undefined;
|
|
592
630
|
subcommands: SubcommandDefinition[];
|
|
@@ -607,7 +645,10 @@ type SubcommandDefBase =
|
|
|
607
645
|
pagination?: PaginationInfo;
|
|
608
646
|
tags?: string[];
|
|
609
647
|
schema?: CommandSchemas;
|
|
648
|
+
resourceRules?: ResourceSelectionRule[];
|
|
610
649
|
webUrl?: string | ((ctx: CommandContext) => string | undefined | null);
|
|
650
|
+
requires?: Requires;
|
|
651
|
+
optional?: Optional;
|
|
611
652
|
handler(ctx: CommandContext): unknown | Promise<unknown>;
|
|
612
653
|
subcommands?: SubcommandDefinition[];
|
|
613
654
|
}
|
|
@@ -625,7 +666,10 @@ type SubcommandDefBase =
|
|
|
625
666
|
pagination?: PaginationInfo;
|
|
626
667
|
tags?: string[];
|
|
627
668
|
schema?: CommandSchemas;
|
|
669
|
+
resourceRules?: ResourceSelectionRule[];
|
|
628
670
|
webUrl?: string | ((ctx: CommandContext) => string | undefined | null);
|
|
671
|
+
requires?: Requires;
|
|
672
|
+
optional?: Optional;
|
|
629
673
|
handler?: undefined;
|
|
630
674
|
subcommands: SubcommandDefinition[];
|
|
631
675
|
};
|
package/src/version-check.ts
CHANGED
|
@@ -5,6 +5,7 @@ import { getVersion, getCompareUrl, getReleaseUrl, toTag } from './version';
|
|
|
5
5
|
import * as tui from './tui';
|
|
6
6
|
import { saveConfig } from './config';
|
|
7
7
|
import { $ } from 'bun';
|
|
8
|
+
import { getExecutingAgent } from './agent-detection';
|
|
8
9
|
|
|
9
10
|
const ONE_HOUR_MS = 60 * 60 * 1000;
|
|
10
11
|
|
|
@@ -33,6 +34,11 @@ function shouldSkipCheck(
|
|
|
33
34
|
return true;
|
|
34
35
|
}
|
|
35
36
|
|
|
37
|
+
// Skip if running from an AI coding agent (don't interrupt with upgrade prompts)
|
|
38
|
+
if (getExecutingAgent()) {
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
|
|
36
42
|
// Skip if no TTY (CI, redirected output, etc.)
|
|
37
43
|
if (!process.stdin.isTTY || !process.stdout.isTTY) {
|
|
38
44
|
return true;
|