@agentuity/cli 0.0.48 → 0.0.50
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 +26 -5
- package/dist/banner.d.ts +1 -1
- package/dist/banner.d.ts.map +1 -1
- package/dist/cli-logger.d.ts +27 -0
- package/dist/cli-logger.d.ts.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cmd/agents/index.d.ts +2 -0
- package/dist/cmd/agents/index.d.ts.map +1 -0
- package/dist/cmd/auth/index.d.ts.map +1 -1
- package/dist/cmd/auth/login.d.ts.map +1 -1
- package/dist/cmd/auth/logout.d.ts.map +1 -1
- package/dist/cmd/auth/signup.d.ts.map +1 -1
- package/dist/cmd/auth/ssh/add.d.ts.map +1 -1
- package/dist/cmd/auth/ssh/delete.d.ts.map +1 -1
- package/dist/cmd/auth/ssh/index.d.ts +1 -2
- package/dist/cmd/auth/ssh/index.d.ts.map +1 -1
- package/dist/cmd/auth/ssh/list.d.ts.map +1 -1
- package/dist/cmd/auth/whoami.d.ts.map +1 -1
- package/dist/cmd/bundle/ast.d.ts +3 -1
- package/dist/cmd/bundle/ast.d.ts.map +1 -1
- package/dist/cmd/bundle/index.d.ts.map +1 -1
- package/dist/cmd/bundle/plugin.d.ts.map +1 -1
- package/dist/cmd/capabilities/index.d.ts +4 -0
- package/dist/cmd/capabilities/index.d.ts.map +1 -0
- package/dist/cmd/capabilities/show.d.ts +20 -0
- package/dist/cmd/capabilities/show.d.ts.map +1 -0
- package/dist/cmd/cloud/deploy.d.ts.map +1 -1
- package/dist/cmd/cloud/deployment/index.d.ts.map +1 -1
- package/dist/cmd/cloud/deployment/list.d.ts.map +1 -1
- package/dist/cmd/cloud/deployment/remove.d.ts.map +1 -1
- package/dist/cmd/cloud/deployment/rollback.d.ts.map +1 -1
- package/dist/cmd/cloud/deployment/show.d.ts.map +1 -1
- package/dist/cmd/cloud/deployment/undeploy.d.ts.map +1 -1
- package/dist/cmd/cloud/deployment/utils.d.ts +4 -2
- package/dist/cmd/cloud/deployment/utils.d.ts.map +1 -1
- package/dist/cmd/cloud/domain.d.ts.map +1 -1
- package/dist/cmd/cloud/index.d.ts.map +1 -1
- package/dist/cmd/cloud/resource/add.d.ts.map +1 -1
- package/dist/cmd/cloud/resource/delete.d.ts.map +1 -1
- package/dist/cmd/cloud/resource/index.d.ts +1 -2
- package/dist/cmd/cloud/resource/index.d.ts.map +1 -1
- package/dist/cmd/cloud/resource/list.d.ts.map +1 -1
- package/dist/cmd/cloud/scp/download.d.ts.map +1 -1
- package/dist/cmd/cloud/scp/index.d.ts +1 -2
- package/dist/cmd/cloud/scp/index.d.ts.map +1 -1
- package/dist/cmd/cloud/scp/upload.d.ts.map +1 -1
- package/dist/cmd/cloud/session/get.d.ts +2 -0
- package/dist/cmd/cloud/session/get.d.ts.map +1 -0
- package/dist/cmd/cloud/session/index.d.ts +2 -0
- package/dist/cmd/cloud/session/index.d.ts.map +1 -0
- package/dist/cmd/cloud/session/list.d.ts +2 -0
- package/dist/cmd/cloud/session/list.d.ts.map +1 -0
- package/dist/cmd/cloud/session/logs.d.ts +2 -0
- package/dist/cmd/cloud/session/logs.d.ts.map +1 -0
- package/dist/cmd/cloud/ssh.d.ts.map +1 -1
- package/dist/cmd/dev/agents.d.ts +2 -0
- package/dist/cmd/dev/agents.d.ts.map +1 -0
- package/dist/cmd/dev/index.d.ts.map +1 -1
- package/dist/cmd/dev/sync.d.ts +12 -0
- package/dist/cmd/dev/sync.d.ts.map +1 -0
- package/dist/cmd/env/delete.d.ts.map +1 -1
- package/dist/cmd/env/get.d.ts.map +1 -1
- package/dist/cmd/env/import.d.ts.map +1 -1
- package/dist/cmd/env/index.d.ts.map +1 -1
- package/dist/cmd/env/list.d.ts.map +1 -1
- package/dist/cmd/env/pull.d.ts.map +1 -1
- package/dist/cmd/env/push.d.ts.map +1 -1
- package/dist/cmd/env/set.d.ts.map +1 -1
- package/dist/cmd/index.d.ts.map +1 -1
- package/dist/cmd/kv/create-namespace.d.ts +3 -0
- package/dist/cmd/kv/create-namespace.d.ts.map +1 -0
- package/dist/cmd/kv/delete-namespace.d.ts +3 -0
- package/dist/cmd/kv/delete-namespace.d.ts.map +1 -0
- package/dist/cmd/kv/delete.d.ts +3 -0
- package/dist/cmd/kv/delete.d.ts.map +1 -0
- package/dist/cmd/kv/get.d.ts +3 -0
- package/dist/cmd/kv/get.d.ts.map +1 -0
- package/dist/cmd/kv/index.d.ts +2 -0
- package/dist/cmd/kv/index.d.ts.map +1 -0
- package/dist/cmd/kv/keys.d.ts +3 -0
- package/dist/cmd/kv/keys.d.ts.map +1 -0
- package/dist/cmd/kv/list-namespaces.d.ts +3 -0
- package/dist/cmd/kv/list-namespaces.d.ts.map +1 -0
- package/dist/cmd/kv/repl.d.ts +3 -0
- package/dist/cmd/kv/repl.d.ts.map +1 -0
- package/dist/cmd/kv/search.d.ts +3 -0
- package/dist/cmd/kv/search.d.ts.map +1 -0
- package/dist/cmd/kv/set.d.ts +3 -0
- package/dist/cmd/kv/set.d.ts.map +1 -0
- package/dist/cmd/kv/stats.d.ts +3 -0
- package/dist/cmd/kv/stats.d.ts.map +1 -0
- package/dist/cmd/kv/util.d.ts +8 -0
- package/dist/cmd/kv/util.d.ts.map +1 -0
- package/dist/cmd/objectstore/delete-bucket.d.ts +3 -0
- package/dist/cmd/objectstore/delete-bucket.d.ts.map +1 -0
- package/dist/cmd/objectstore/delete.d.ts +3 -0
- package/dist/cmd/objectstore/delete.d.ts.map +1 -0
- package/dist/cmd/objectstore/get.d.ts +3 -0
- package/dist/cmd/objectstore/get.d.ts.map +1 -0
- package/dist/cmd/objectstore/index.d.ts +2 -0
- package/dist/cmd/objectstore/index.d.ts.map +1 -0
- package/dist/cmd/objectstore/list-buckets.d.ts +3 -0
- package/dist/cmd/objectstore/list-buckets.d.ts.map +1 -0
- package/dist/cmd/objectstore/list-keys.d.ts +3 -0
- package/dist/cmd/objectstore/list-keys.d.ts.map +1 -0
- package/dist/cmd/objectstore/put.d.ts +3 -0
- package/dist/cmd/objectstore/put.d.ts.map +1 -0
- package/dist/cmd/objectstore/repl.d.ts +3 -0
- package/dist/cmd/objectstore/repl.d.ts.map +1 -0
- package/dist/cmd/objectstore/url.d.ts +3 -0
- package/dist/cmd/objectstore/url.d.ts.map +1 -0
- package/dist/cmd/objectstore/util.d.ts +8 -0
- package/dist/cmd/objectstore/util.d.ts.map +1 -0
- package/dist/cmd/profile/create.d.ts.map +1 -1
- package/dist/cmd/profile/delete.d.ts.map +1 -1
- package/dist/cmd/profile/index.d.ts.map +1 -1
- package/dist/cmd/profile/list.d.ts +1 -2
- package/dist/cmd/profile/list.d.ts.map +1 -1
- package/dist/cmd/profile/show.d.ts.map +1 -1
- package/dist/cmd/profile/use.d.ts.map +1 -1
- package/dist/cmd/project/create.d.ts.map +1 -1
- package/dist/cmd/project/delete.d.ts.map +1 -1
- package/dist/cmd/project/index.d.ts.map +1 -1
- package/dist/cmd/project/list.d.ts.map +1 -1
- package/dist/cmd/project/show.d.ts.map +1 -1
- package/dist/cmd/project/template-flow.d.ts +1 -1
- package/dist/cmd/project/template-flow.d.ts.map +1 -1
- package/dist/cmd/prompt/index.d.ts +4 -0
- package/dist/cmd/prompt/index.d.ts.map +1 -0
- package/dist/cmd/prompt/llm.d.ts +3 -0
- package/dist/cmd/prompt/llm.d.ts.map +1 -0
- package/dist/cmd/repl/index.d.ts +3 -0
- package/dist/cmd/repl/index.d.ts.map +1 -0
- package/dist/cmd/schema/index.d.ts +4 -0
- package/dist/cmd/schema/index.d.ts.map +1 -0
- package/dist/cmd/schema/show.d.ts +3 -0
- package/dist/cmd/schema/show.d.ts.map +1 -0
- package/dist/cmd/secret/delete.d.ts.map +1 -1
- package/dist/cmd/secret/get.d.ts.map +1 -1
- package/dist/cmd/secret/import.d.ts.map +1 -1
- package/dist/cmd/secret/index.d.ts.map +1 -1
- package/dist/cmd/secret/list.d.ts.map +1 -1
- package/dist/cmd/secret/pull.d.ts.map +1 -1
- package/dist/cmd/secret/push.d.ts.map +1 -1
- package/dist/cmd/secret/set.d.ts.map +1 -1
- package/dist/cmd/version/index.d.ts.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/errors.d.ts +83 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/explain.d.ts +47 -0
- package/dist/explain.d.ts.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/json.d.ts +3 -0
- package/dist/json.d.ts.map +1 -0
- package/dist/output.d.ts +136 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/repl.d.ts +120 -0
- package/dist/repl.d.ts.map +1 -0
- package/dist/schema-generator.d.ts +67 -0
- package/dist/schema-generator.d.ts.map +1 -0
- package/dist/tui.d.ts +35 -1
- package/dist/tui.d.ts.map +1 -1
- package/dist/types.d.ts +77 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/format.d.ts +9 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/package.json +12 -4
- package/src/banner.ts +7 -7
- package/src/cli-logger.ts +80 -0
- package/src/cli.ts +192 -58
- package/src/cmd/agents/index.ts +147 -0
- package/src/cmd/auth/index.ts +1 -0
- package/src/cmd/auth/login.ts +7 -2
- package/src/cmd/auth/logout.ts +4 -0
- package/src/cmd/auth/signup.ts +7 -2
- package/src/cmd/auth/ssh/add.ts +20 -3
- package/src/cmd/auth/ssh/delete.ts +57 -4
- package/src/cmd/auth/ssh/index.ts +4 -3
- package/src/cmd/auth/ssh/list.ts +38 -27
- package/src/cmd/auth/whoami.ts +32 -21
- package/src/cmd/bundle/ast.test.ts +2 -2
- package/src/cmd/bundle/ast.ts +112 -22
- package/src/cmd/bundle/index.ts +20 -0
- package/src/cmd/bundle/plugin.ts +60 -14
- package/src/cmd/capabilities/index.ts +12 -0
- package/src/cmd/capabilities/show.ts +256 -0
- package/src/cmd/cloud/deploy.ts +54 -0
- package/src/cmd/cloud/deployment/index.ts +1 -0
- package/src/cmd/cloud/deployment/list.ts +66 -25
- package/src/cmd/cloud/deployment/remove.ts +26 -2
- package/src/cmd/cloud/deployment/rollback.ts +35 -4
- package/src/cmd/cloud/deployment/show.ts +37 -2
- package/src/cmd/cloud/deployment/undeploy.ts +12 -1
- package/src/cmd/cloud/deployment/utils.ts +5 -2
- package/src/cmd/cloud/domain.ts +3 -2
- package/src/cmd/cloud/index.ts +10 -1
- package/src/cmd/cloud/resource/add.ts +19 -0
- package/src/cmd/cloud/resource/delete.ts +24 -3
- package/src/cmd/cloud/resource/index.ts +4 -3
- package/src/cmd/cloud/resource/list.ts +36 -10
- package/src/cmd/cloud/scp/download.ts +27 -1
- package/src/cmd/cloud/scp/index.ts +4 -3
- package/src/cmd/cloud/scp/upload.ts +27 -1
- package/src/cmd/cloud/session/get.ts +164 -0
- package/src/cmd/cloud/session/index.ts +11 -0
- package/src/cmd/cloud/session/list.ts +145 -0
- package/src/cmd/cloud/session/logs.ts +68 -0
- package/src/cmd/cloud/ssh.ts +12 -0
- package/src/cmd/dev/agents.ts +122 -0
- package/src/cmd/dev/index.ts +106 -8
- package/src/cmd/dev/sync.ts +414 -0
- package/src/cmd/dev/templates.ts +1 -1
- package/src/cmd/env/delete.ts +17 -0
- package/src/cmd/env/get.ts +17 -1
- package/src/cmd/env/import.ts +47 -3
- package/src/cmd/env/index.ts +1 -0
- package/src/cmd/env/list.ts +13 -1
- package/src/cmd/env/pull.ts +20 -0
- package/src/cmd/env/push.ts +33 -1
- package/src/cmd/env/set.ts +25 -1
- package/src/cmd/index.ts +9 -2
- package/src/cmd/kv/create-namespace.ts +45 -0
- package/src/cmd/kv/delete-namespace.ts +73 -0
- package/src/cmd/kv/delete.ts +51 -0
- package/src/cmd/kv/get.ts +65 -0
- package/src/cmd/kv/index.ts +31 -0
- package/src/cmd/kv/keys.ts +57 -0
- package/src/cmd/kv/list-namespaces.ts +43 -0
- package/src/cmd/kv/repl.ts +284 -0
- package/src/cmd/kv/search.ts +80 -0
- package/src/cmd/kv/set.ts +63 -0
- package/src/cmd/kv/stats.ts +96 -0
- package/src/cmd/kv/util.ts +32 -0
- package/src/cmd/objectstore/delete-bucket.ts +72 -0
- package/src/cmd/objectstore/delete.ts +59 -0
- package/src/cmd/objectstore/get.ts +64 -0
- package/src/cmd/objectstore/index.ts +27 -0
- package/src/cmd/objectstore/list-buckets.ts +45 -0
- package/src/cmd/objectstore/list-keys.ts +60 -0
- package/src/cmd/objectstore/put.ts +62 -0
- package/src/cmd/objectstore/repl.ts +235 -0
- package/src/cmd/objectstore/url.ts +59 -0
- package/src/cmd/objectstore/util.ts +28 -0
- package/src/cmd/profile/create.ts +28 -2
- package/src/cmd/profile/delete.ts +17 -2
- package/src/cmd/profile/index.ts +1 -0
- package/src/cmd/profile/list.ts +7 -3
- package/src/cmd/profile/show.ts +20 -5
- package/src/cmd/profile/use.ts +8 -0
- package/src/cmd/project/create.ts +31 -0
- package/src/cmd/project/delete.ts +24 -2
- package/src/cmd/project/index.ts +1 -0
- package/src/cmd/project/list.ts +24 -10
- package/src/cmd/project/show.ts +28 -9
- package/src/cmd/project/template-flow.ts +10 -6
- package/src/cmd/prompt/index.ts +12 -0
- package/src/cmd/prompt/llm.ts +368 -0
- package/src/cmd/repl/index.ts +477 -0
- package/src/cmd/schema/index.ts +12 -0
- package/src/cmd/schema/show.ts +27 -0
- package/src/cmd/secret/delete.ts +17 -0
- package/src/cmd/secret/get.ts +20 -1
- package/src/cmd/secret/import.ts +45 -2
- package/src/cmd/secret/index.ts +1 -0
- package/src/cmd/secret/list.ts +10 -1
- package/src/cmd/secret/pull.ts +20 -0
- package/src/cmd/secret/push.ts +33 -1
- package/src/cmd/secret/set.ts +20 -0
- package/src/cmd/version/index.ts +15 -2
- package/src/config.ts +17 -4
- package/src/errors.ts +222 -0
- package/src/explain.ts +126 -0
- package/src/index.ts +51 -0
- package/src/json.ts +28 -0
- package/src/output.ts +307 -0
- package/src/repl.ts +1507 -0
- package/src/schema-generator.ts +389 -0
- package/src/tui.ts +178 -13
- package/src/types.ts +75 -22
- package/src/utils/format.ts +17 -0
package/src/json.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export function isPossiblyJSON(val: unknown) {
|
|
2
|
+
if (val) {
|
|
3
|
+
if (typeof val === 'object') {
|
|
4
|
+
return true;
|
|
5
|
+
}
|
|
6
|
+
if (typeof val === 'string') {
|
|
7
|
+
const v = (val as string).trim();
|
|
8
|
+
if (v.startsWith('{') && v.endsWith('}')) {
|
|
9
|
+
return true;
|
|
10
|
+
}
|
|
11
|
+
if (v.startsWith('[') && v.endsWith(']')) {
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function tryParseJSON(val: string) {
|
|
20
|
+
if (isPossiblyJSON(val)) {
|
|
21
|
+
try {
|
|
22
|
+
return JSON.parse(val as string);
|
|
23
|
+
} catch {
|
|
24
|
+
/* */
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return val;
|
|
28
|
+
}
|
package/src/output.ts
ADDED
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
import type { GlobalOptions } from './types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Output formatting utilities for agent-friendly CLI
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
// Store global options for access by output utilities
|
|
8
|
+
let globalOutputOptions: GlobalOptions | null = null;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Set global output options (called during CLI initialization)
|
|
12
|
+
*/
|
|
13
|
+
export function setOutputOptions(options: GlobalOptions): void {
|
|
14
|
+
globalOutputOptions = options;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Get current global output options
|
|
19
|
+
*/
|
|
20
|
+
export function getOutputOptions(): GlobalOptions | null {
|
|
21
|
+
return globalOutputOptions;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Check if JSON output mode is enabled
|
|
26
|
+
*/
|
|
27
|
+
export function isJSONMode(options: GlobalOptions): boolean {
|
|
28
|
+
return options.json === true;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Check if quiet mode is enabled
|
|
33
|
+
*/
|
|
34
|
+
export function isQuietMode(options: GlobalOptions): boolean {
|
|
35
|
+
return options.quiet === true;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Check if progress indicators should be disabled
|
|
40
|
+
*/
|
|
41
|
+
export function shouldDisableProgress(options: GlobalOptions): boolean {
|
|
42
|
+
return options.noProgress === true || options.json === true || options.quiet === true;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Check if colors should be disabled
|
|
47
|
+
*/
|
|
48
|
+
export function shouldDisableColors(options: GlobalOptions): boolean {
|
|
49
|
+
if (options.color === 'never') {
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
if (options.color === 'always') {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
// auto mode - disable in JSON/quiet mode or non-TTY
|
|
56
|
+
return options.json === true || options.quiet === true || !process.stdout.isTTY;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Output JSON to stdout (for agent consumption)
|
|
61
|
+
*/
|
|
62
|
+
export function outputJSON(data: unknown): void {
|
|
63
|
+
console.log(JSON.stringify(data, null, 2));
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Output success message (respects quiet/json mode)
|
|
68
|
+
*/
|
|
69
|
+
export function outputSuccess(message: string, options: GlobalOptions, jsonData?: unknown): void {
|
|
70
|
+
if (isJSONMode(options)) {
|
|
71
|
+
if (jsonData) {
|
|
72
|
+
outputJSON({ success: true, ...jsonData });
|
|
73
|
+
} else {
|
|
74
|
+
outputJSON({ success: true, message });
|
|
75
|
+
}
|
|
76
|
+
} else if (!isQuietMode(options)) {
|
|
77
|
+
console.log(message);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Output info message (respects quiet/json mode)
|
|
83
|
+
*/
|
|
84
|
+
export function outputInfo(message: string, options: GlobalOptions): void {
|
|
85
|
+
if (isJSONMode(options)) {
|
|
86
|
+
// In JSON mode, info messages are typically suppressed
|
|
87
|
+
// unless they're critical (use outputJSON directly for those)
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
if (!isQuietMode(options)) {
|
|
91
|
+
console.log(message);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Output warning message (respects json mode but not quiet - warnings should be seen)
|
|
97
|
+
*/
|
|
98
|
+
export function outputWarning(message: string, options: GlobalOptions): void {
|
|
99
|
+
if (isJSONMode(options)) {
|
|
100
|
+
outputJSON({ warning: message });
|
|
101
|
+
} else {
|
|
102
|
+
console.warn(message);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Check if interactive prompts should be allowed
|
|
108
|
+
*/
|
|
109
|
+
export function canPrompt(options: GlobalOptions): boolean {
|
|
110
|
+
// Disable prompts in JSON mode, quiet mode, or non-TTY
|
|
111
|
+
return (
|
|
112
|
+
!isJSONMode(options) && !isQuietMode(options) && process.stdin.isTTY && process.stdout.isTTY
|
|
113
|
+
);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Check if validate mode is enabled
|
|
118
|
+
*/
|
|
119
|
+
export function isValidateMode(options: GlobalOptions): boolean {
|
|
120
|
+
return options.validate === true;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Response metadata
|
|
125
|
+
*/
|
|
126
|
+
export interface ResponseMetadata {
|
|
127
|
+
timestamp?: string;
|
|
128
|
+
executionTime?: string;
|
|
129
|
+
pagination?: {
|
|
130
|
+
total?: number;
|
|
131
|
+
limit?: number;
|
|
132
|
+
offset?: number;
|
|
133
|
+
hasMore?: boolean;
|
|
134
|
+
};
|
|
135
|
+
warnings?: string[];
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Standard JSON response format
|
|
140
|
+
*/
|
|
141
|
+
export interface JSONResponse<T = unknown> {
|
|
142
|
+
success: boolean;
|
|
143
|
+
data?: T;
|
|
144
|
+
message?: string;
|
|
145
|
+
metadata?: ResponseMetadata;
|
|
146
|
+
error?: {
|
|
147
|
+
code: string;
|
|
148
|
+
message: string;
|
|
149
|
+
details?: Record<string, unknown>;
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Create a success JSON response
|
|
155
|
+
*/
|
|
156
|
+
export function createSuccessResponse<T>(
|
|
157
|
+
data?: T,
|
|
158
|
+
message?: string,
|
|
159
|
+
metadata?: ResponseMetadata
|
|
160
|
+
): JSONResponse<T> {
|
|
161
|
+
const response: JSONResponse<T> = { success: true };
|
|
162
|
+
if (data !== undefined) {
|
|
163
|
+
response.data = data;
|
|
164
|
+
}
|
|
165
|
+
if (message) {
|
|
166
|
+
response.message = message;
|
|
167
|
+
}
|
|
168
|
+
if (metadata) {
|
|
169
|
+
response.metadata = metadata;
|
|
170
|
+
}
|
|
171
|
+
return response;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Create an error JSON response
|
|
176
|
+
*/
|
|
177
|
+
export function createErrorResponse(
|
|
178
|
+
code: string,
|
|
179
|
+
message: string,
|
|
180
|
+
details?: Record<string, unknown>,
|
|
181
|
+
metadata?: ResponseMetadata
|
|
182
|
+
): JSONResponse {
|
|
183
|
+
const response: JSONResponse = {
|
|
184
|
+
success: false,
|
|
185
|
+
error: {
|
|
186
|
+
code,
|
|
187
|
+
message,
|
|
188
|
+
details,
|
|
189
|
+
},
|
|
190
|
+
};
|
|
191
|
+
if (metadata) {
|
|
192
|
+
response.metadata = metadata;
|
|
193
|
+
}
|
|
194
|
+
return response;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Create response metadata with timestamp and optional execution time
|
|
199
|
+
*/
|
|
200
|
+
export function createMetadata(
|
|
201
|
+
startTime?: number,
|
|
202
|
+
extra?: Partial<ResponseMetadata>
|
|
203
|
+
): ResponseMetadata {
|
|
204
|
+
const metadata: ResponseMetadata = {
|
|
205
|
+
timestamp: new Date().toISOString(),
|
|
206
|
+
...extra,
|
|
207
|
+
};
|
|
208
|
+
if (startTime !== undefined) {
|
|
209
|
+
const duration = Date.now() - startTime;
|
|
210
|
+
metadata.executionTime = `${duration}ms`;
|
|
211
|
+
}
|
|
212
|
+
return metadata;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Batch operation result for a single item
|
|
217
|
+
*/
|
|
218
|
+
export interface BatchItemResult<T = unknown> {
|
|
219
|
+
item: string;
|
|
220
|
+
success: boolean;
|
|
221
|
+
data?: T;
|
|
222
|
+
error?: {
|
|
223
|
+
code: string;
|
|
224
|
+
message: string;
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* Batch operation result
|
|
230
|
+
*/
|
|
231
|
+
export interface BatchOperationResult<T = unknown> {
|
|
232
|
+
success: boolean;
|
|
233
|
+
totalItems: number;
|
|
234
|
+
succeeded: number;
|
|
235
|
+
failed: number;
|
|
236
|
+
results: BatchItemResult<T>[];
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* Create a batch operation result
|
|
241
|
+
*/
|
|
242
|
+
export function createBatchResult<T = unknown>(
|
|
243
|
+
results: BatchItemResult<T>[]
|
|
244
|
+
): BatchOperationResult<T> {
|
|
245
|
+
const succeeded = results.filter((r) => r.success).length;
|
|
246
|
+
const failed = results.filter((r) => !r.success).length;
|
|
247
|
+
|
|
248
|
+
return {
|
|
249
|
+
success: failed === 0,
|
|
250
|
+
totalItems: results.length,
|
|
251
|
+
succeeded,
|
|
252
|
+
failed,
|
|
253
|
+
results,
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* Output batch operation result
|
|
259
|
+
*/
|
|
260
|
+
export function outputBatchResult<T = unknown>(
|
|
261
|
+
result: BatchOperationResult<T>,
|
|
262
|
+
options: GlobalOptions
|
|
263
|
+
): void {
|
|
264
|
+
if (isJSONMode(options)) {
|
|
265
|
+
outputJSON(result);
|
|
266
|
+
} else {
|
|
267
|
+
console.log(
|
|
268
|
+
`Completed: ${result.succeeded}/${result.totalItems} succeeded, ${result.failed}/${result.totalItems} failed`
|
|
269
|
+
);
|
|
270
|
+
if (result.failed > 0) {
|
|
271
|
+
console.log('\nFailed items:');
|
|
272
|
+
for (const item of result.results.filter((r) => !r.success)) {
|
|
273
|
+
console.log(` ${item.item}: ${item.error?.message || 'Unknown error'}`);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* Validation result
|
|
281
|
+
*/
|
|
282
|
+
export interface ValidationResult {
|
|
283
|
+
valid: boolean;
|
|
284
|
+
command: string;
|
|
285
|
+
errors?: Array<{ field: string; message: string }>;
|
|
286
|
+
warnings?: string[];
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
/**
|
|
290
|
+
* Output validation result
|
|
291
|
+
*/
|
|
292
|
+
export function outputValidation(result: ValidationResult, options: GlobalOptions): void {
|
|
293
|
+
if (isJSONMode(options) || options.validate) {
|
|
294
|
+
outputJSON(result);
|
|
295
|
+
} else {
|
|
296
|
+
if (result.valid) {
|
|
297
|
+
console.log('✓ Validation passed');
|
|
298
|
+
} else {
|
|
299
|
+
console.log('✗ Validation failed');
|
|
300
|
+
if (result.errors) {
|
|
301
|
+
for (const err of result.errors) {
|
|
302
|
+
console.log(` ${err.field}: ${err.message}`);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|