@inquir/compute-cli 0.1.2 → 0.1.4

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 (121) hide show
  1. package/README.md +117 -19
  2. package/dist/commands/codegen.d.ts.map +1 -1
  3. package/dist/commands/codegen.js +3 -0
  4. package/dist/commands/codegen.js.map +1 -1
  5. package/dist/commands/config.d.ts +2 -0
  6. package/dist/commands/config.d.ts.map +1 -0
  7. package/dist/commands/config.js +99 -0
  8. package/dist/commands/config.js.map +1 -0
  9. package/dist/commands/debug.d.ts.map +1 -1
  10. package/dist/commands/debug.js +2 -10
  11. package/dist/commands/debug.js.map +1 -1
  12. package/dist/commands/delete.d.ts +2 -0
  13. package/dist/commands/delete.d.ts.map +1 -0
  14. package/dist/commands/delete.js +50 -0
  15. package/dist/commands/delete.js.map +1 -0
  16. package/dist/commands/deploy.d.ts.map +1 -1
  17. package/dist/commands/deploy.js +122 -16
  18. package/dist/commands/deploy.js.map +1 -1
  19. package/dist/commands/deploys.d.ts.map +1 -1
  20. package/dist/commands/deploys.js +10 -4
  21. package/dist/commands/deploys.js.map +1 -1
  22. package/dist/commands/doctor.d.ts +2 -0
  23. package/dist/commands/doctor.d.ts.map +1 -0
  24. package/dist/commands/doctor.js +137 -0
  25. package/dist/commands/doctor.js.map +1 -0
  26. package/dist/commands/init.d.ts.map +1 -1
  27. package/dist/commands/init.js +44 -17
  28. package/dist/commands/init.js.map +1 -1
  29. package/dist/commands/invoke.d.ts.map +1 -1
  30. package/dist/commands/invoke.js +13 -6
  31. package/dist/commands/invoke.js.map +1 -1
  32. package/dist/commands/list.d.ts.map +1 -1
  33. package/dist/commands/list.js +32 -1
  34. package/dist/commands/list.js.map +1 -1
  35. package/dist/commands/login.d.ts.map +1 -1
  36. package/dist/commands/login.js +5 -0
  37. package/dist/commands/login.js.map +1 -1
  38. package/dist/commands/logout.d.ts.map +1 -1
  39. package/dist/commands/logout.js +3 -0
  40. package/dist/commands/logout.js.map +1 -1
  41. package/dist/commands/logs.d.ts.map +1 -1
  42. package/dist/commands/logs.js +11 -7
  43. package/dist/commands/logs.js.map +1 -1
  44. package/dist/commands/rollback.d.ts.map +1 -1
  45. package/dist/commands/rollback.js +12 -6
  46. package/dist/commands/rollback.js.map +1 -1
  47. package/dist/commands/run.d.ts.map +1 -1
  48. package/dist/commands/run.js +12 -5
  49. package/dist/commands/run.js.map +1 -1
  50. package/dist/commands/status.d.ts.map +1 -1
  51. package/dist/commands/status.js +11 -4
  52. package/dist/commands/status.js.map +1 -1
  53. package/dist/commands/sync-status.d.ts.map +1 -1
  54. package/dist/commands/sync-status.js +12 -6
  55. package/dist/commands/sync-status.js.map +1 -1
  56. package/dist/commands/use.d.ts.map +1 -1
  57. package/dist/commands/use.js +44 -5
  58. package/dist/commands/use.js.map +1 -1
  59. package/dist/commands/whoami.d.ts.map +1 -1
  60. package/dist/commands/whoami.js +11 -6
  61. package/dist/commands/whoami.js.map +1 -1
  62. package/dist/commands/workspaces.d.ts.map +1 -1
  63. package/dist/commands/workspaces.js +10 -5
  64. package/dist/commands/workspaces.js.map +1 -1
  65. package/dist/index.js +94 -65
  66. package/dist/index.js.map +1 -1
  67. package/dist/utils/api.d.ts +10 -0
  68. package/dist/utils/api.d.ts.map +1 -1
  69. package/dist/utils/api.js +14 -1
  70. package/dist/utils/api.js.map +1 -1
  71. package/dist/utils/args.d.ts +6 -0
  72. package/dist/utils/args.d.ts.map +1 -1
  73. package/dist/utils/args.js +101 -12
  74. package/dist/utils/args.js.map +1 -1
  75. package/dist/utils/assets.d.ts +7 -0
  76. package/dist/utils/assets.d.ts.map +1 -1
  77. package/dist/utils/assets.js +18 -0
  78. package/dist/utils/assets.js.map +1 -1
  79. package/dist/utils/auth.d.ts +3 -0
  80. package/dist/utils/auth.d.ts.map +1 -1
  81. package/dist/utils/auth.js +42 -13
  82. package/dist/utils/auth.js.map +1 -1
  83. package/dist/utils/context.d.ts +29 -0
  84. package/dist/utils/context.d.ts.map +1 -0
  85. package/dist/utils/context.js +76 -0
  86. package/dist/utils/context.js.map +1 -0
  87. package/dist/utils/deploy-follow.d.ts.map +1 -1
  88. package/dist/utils/deploy-follow.js +7 -1
  89. package/dist/utils/deploy-follow.js.map +1 -1
  90. package/dist/utils/ensure-auth.d.ts +8 -0
  91. package/dist/utils/ensure-auth.d.ts.map +1 -0
  92. package/dist/utils/ensure-auth.js +27 -0
  93. package/dist/utils/ensure-auth.js.map +1 -0
  94. package/dist/utils/errors.d.ts +54 -0
  95. package/dist/utils/errors.d.ts.map +1 -0
  96. package/dist/utils/errors.js +221 -0
  97. package/dist/utils/errors.js.map +1 -0
  98. package/dist/utils/output.d.ts +11 -1
  99. package/dist/utils/output.d.ts.map +1 -1
  100. package/dist/utils/output.js +51 -7
  101. package/dist/utils/output.js.map +1 -1
  102. package/dist/utils/package-metadata.d.ts +3 -0
  103. package/dist/utils/package-metadata.d.ts.map +1 -0
  104. package/dist/utils/package-metadata.js +22 -0
  105. package/dist/utils/package-metadata.js.map +1 -0
  106. package/dist/utils/payload.d.ts.map +1 -1
  107. package/dist/utils/payload.js +4 -4
  108. package/dist/utils/payload.js.map +1 -1
  109. package/dist/utils/prompt.d.ts +22 -0
  110. package/dist/utils/prompt.d.ts.map +1 -0
  111. package/dist/utils/prompt.js +67 -0
  112. package/dist/utils/prompt.js.map +1 -0
  113. package/dist/utils/redact.d.ts +14 -0
  114. package/dist/utils/redact.d.ts.map +1 -0
  115. package/dist/utils/redact.js +45 -0
  116. package/dist/utils/redact.js.map +1 -0
  117. package/dist/utils/version.d.ts +8 -0
  118. package/dist/utils/version.d.ts.map +1 -0
  119. package/dist/utils/version.js +21 -0
  120. package/dist/utils/version.js.map +1 -0
  121. package/package.json +5 -3
@@ -0,0 +1,54 @@
1
+ /** Exit-code taxonomy (see docs/cli-product-spec.md §6.4). */
2
+ export declare const ExitCode: {
3
+ readonly OK: 0;
4
+ readonly ERROR: 1;
5
+ readonly USAGE: 2;
6
+ readonly NETWORK: 3;
7
+ readonly AUTH: 4;
8
+ };
9
+ export interface CliErrorOptions {
10
+ /** Stable, machine-readable code (mirrors backend error.code when available). */
11
+ code?: string;
12
+ exitCode?: number;
13
+ /** One-line human explanation. */
14
+ explanation?: string;
15
+ /** Likely cause. */
16
+ cause?: string;
17
+ /** Suggested fix. */
18
+ fix?: string;
19
+ /** A command the user can copy/paste. */
20
+ command?: string;
21
+ /** Backend request id, if any. */
22
+ requestId?: string;
23
+ /** Extra detail shown only with --debug. */
24
+ details?: unknown;
25
+ }
26
+ /**
27
+ * A user-facing error with everything needed to render an actionable message:
28
+ * title, explanation, cause, fix, a suggested command, and a request id.
29
+ */
30
+ export declare class CliError extends Error {
31
+ readonly code: string;
32
+ readonly exitCode: number;
33
+ readonly explanation?: string;
34
+ readonly cause?: string;
35
+ readonly fix?: string;
36
+ readonly command?: string;
37
+ readonly requestId?: string;
38
+ readonly details?: unknown;
39
+ constructor(title: string, options?: CliErrorOptions);
40
+ /** The short title (the Error message). */
41
+ get title(): string;
42
+ }
43
+ /** Normalize any thrown value into a {@link CliError}. */
44
+ export declare function toCliError(error: unknown): CliError;
45
+ /** Render a CliError to the user. Honours --json and --debug. */
46
+ export declare function renderError(error: CliError, options: {
47
+ json?: boolean;
48
+ debug?: boolean;
49
+ }): void;
50
+ /** Convenience: a "not logged in" error with guidance. */
51
+ export declare function authRequiredError(): CliError;
52
+ /** Convenience: a usage error (bad/missing arguments). */
53
+ export declare function usageError(message: string, command?: string): CliError;
54
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAIA,8DAA8D;AAC9D,eAAO,MAAM,QAAQ;;;;;;CAMX,CAAC;AAEX,MAAM,WAAW,eAAe;IAC9B,iFAAiF;IACjF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;gBAEf,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;IAaxD,2CAA2C;IAC3C,IAAI,KAAK,IAAI,MAAM,CAElB;CACF;AA0GD,0DAA0D;AAC1D,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAsBnD;AAED,iEAAiE;AACjE,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAsC/F;AAED,0DAA0D;AAC1D,wBAAgB,iBAAiB,IAAI,QAAQ,CAS5C;AAED,0DAA0D;AAC1D,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,CAMtE"}
@@ -0,0 +1,221 @@
1
+ import { ApiError } from '../sdk.js';
2
+ import { bold, dim, red } from './output.js';
3
+ import { redact } from './redact.js';
4
+ /** Exit-code taxonomy (see docs/cli-product-spec.md §6.4). */
5
+ export const ExitCode = {
6
+ OK: 0,
7
+ ERROR: 1,
8
+ USAGE: 2,
9
+ NETWORK: 3,
10
+ AUTH: 4,
11
+ };
12
+ /**
13
+ * A user-facing error with everything needed to render an actionable message:
14
+ * title, explanation, cause, fix, a suggested command, and a request id.
15
+ */
16
+ export class CliError extends Error {
17
+ code;
18
+ exitCode;
19
+ explanation;
20
+ cause;
21
+ fix;
22
+ command;
23
+ requestId;
24
+ details;
25
+ constructor(title, options = {}) {
26
+ super(title);
27
+ this.name = 'CliError';
28
+ this.code = options.code ?? 'ERROR';
29
+ this.exitCode = options.exitCode ?? ExitCode.ERROR;
30
+ this.explanation = options.explanation;
31
+ this.cause = options.cause;
32
+ this.fix = options.fix;
33
+ this.command = options.command;
34
+ this.requestId = options.requestId;
35
+ this.details = options.details;
36
+ }
37
+ /** The short title (the Error message). */
38
+ get title() {
39
+ return this.message;
40
+ }
41
+ }
42
+ const NETWORK_CODES = new Set([
43
+ 'ECONNREFUSED',
44
+ 'ENOTFOUND',
45
+ 'ETIMEDOUT',
46
+ 'ECONNRESET',
47
+ 'EAI_AGAIN',
48
+ 'EPIPE',
49
+ 'ERR_SOCKET_CONNECTION_TIMEOUT',
50
+ ]);
51
+ function isNetworkError(error) {
52
+ const candidates = [error];
53
+ if (error && typeof error === 'object' && 'cause' in error) {
54
+ candidates.push(error.cause);
55
+ }
56
+ for (const candidate of candidates) {
57
+ const code = candidate && typeof candidate === 'object' && 'code' in candidate
58
+ ? String(candidate.code)
59
+ : '';
60
+ if (NETWORK_CODES.has(code))
61
+ return true;
62
+ }
63
+ const message = (error instanceof Error ? error.message : String(error)).toLowerCase();
64
+ return (message.includes('fetch failed') ||
65
+ message.includes('network') ||
66
+ message.includes('timed out') ||
67
+ message.includes('timeout'));
68
+ }
69
+ /** Map an {@link ApiError} (HTTP failure) to a friendly {@link CliError}. */
70
+ function fromApiError(error) {
71
+ const base = {
72
+ code: error.code ?? `HTTP_${error.status}`,
73
+ requestId: error.requestId,
74
+ details: error.payload,
75
+ };
76
+ if (error.status === 401) {
77
+ return new CliError('Authentication required', {
78
+ ...base,
79
+ code: 'AUTH_REQUIRED',
80
+ exitCode: ExitCode.AUTH,
81
+ explanation: error.message,
82
+ cause: 'Your credentials are missing, expired, or invalid.',
83
+ fix: 'Log in again, or set INQUIR_TOKEN for non-interactive use.',
84
+ command: 'inquir login',
85
+ });
86
+ }
87
+ if (error.status === 403) {
88
+ return new CliError('Permission denied', {
89
+ ...base,
90
+ code: error.code ?? 'FORBIDDEN',
91
+ exitCode: ExitCode.AUTH,
92
+ explanation: error.message,
93
+ cause: 'Your account lacks access to this workspace or resource.',
94
+ fix: 'Confirm the active workspace and your role.',
95
+ command: 'inquir whoami',
96
+ });
97
+ }
98
+ if (error.status === 404) {
99
+ return new CliError('Not found', {
100
+ ...base,
101
+ code: error.code ?? 'NOT_FOUND',
102
+ exitCode: ExitCode.ERROR,
103
+ explanation: error.message,
104
+ cause: 'The requested resource does not exist in this workspace.',
105
+ fix: 'Check the name/id and the active workspace.',
106
+ command: 'inquir list --remote',
107
+ });
108
+ }
109
+ if (error.status === 400 || error.status === 422) {
110
+ return new CliError('Request rejected', {
111
+ ...base,
112
+ code: error.code ?? 'VALIDATION_ERROR',
113
+ exitCode: ExitCode.USAGE,
114
+ explanation: error.message,
115
+ cause: 'The server could not validate the request.',
116
+ });
117
+ }
118
+ if (error.status === 429) {
119
+ return new CliError('Rate limited', {
120
+ ...base,
121
+ code: error.code ?? 'RATE_LIMITED',
122
+ exitCode: ExitCode.ERROR,
123
+ explanation: error.message,
124
+ fix: 'Wait a moment and try again.',
125
+ });
126
+ }
127
+ return new CliError('Server error', {
128
+ ...base,
129
+ code: error.code ?? `HTTP_${error.status}`,
130
+ exitCode: ExitCode.ERROR,
131
+ explanation: error.message,
132
+ cause: 'The Inquir Compute API returned an error.',
133
+ fix: error.requestId ? 'Retry; if it persists, contact support with the request id.' : 'Retry shortly.',
134
+ });
135
+ }
136
+ /** Normalize any thrown value into a {@link CliError}. */
137
+ export function toCliError(error) {
138
+ if (error instanceof CliError) {
139
+ return error;
140
+ }
141
+ if (error instanceof ApiError) {
142
+ return fromApiError(error);
143
+ }
144
+ if (isNetworkError(error)) {
145
+ return new CliError('Network error', {
146
+ code: 'NETWORK',
147
+ exitCode: ExitCode.NETWORK,
148
+ explanation: error instanceof Error ? error.message : String(error),
149
+ cause: 'Could not reach the Inquir Compute API.',
150
+ fix: 'Check your connection and --api-url, then retry.',
151
+ command: 'inquir doctor',
152
+ });
153
+ }
154
+ return new CliError(error instanceof Error ? error.message : String(error), {
155
+ code: 'ERROR',
156
+ exitCode: ExitCode.ERROR,
157
+ details: error instanceof Error ? error.stack : undefined,
158
+ });
159
+ }
160
+ /** Render a CliError to the user. Honours --json and --debug. */
161
+ export function renderError(error, options) {
162
+ if (options.json) {
163
+ const envelope = {
164
+ ok: false,
165
+ error: {
166
+ code: error.code,
167
+ title: error.title,
168
+ message: error.explanation ?? error.title,
169
+ ...(error.requestId ? { requestId: error.requestId } : {}),
170
+ ...(options.debug && error.details !== undefined ? { details: error.details } : {}),
171
+ },
172
+ };
173
+ process.stdout.write(`${redact(JSON.stringify(envelope, null, 2))}\n`);
174
+ return;
175
+ }
176
+ // Human-readable errors go to stderr so stdout stays clean for piping.
177
+ const errLine = (value = '') => {
178
+ process.stderr.write(`${redact(value)}\n`);
179
+ };
180
+ errLine(red(`✗ ${error.title}`));
181
+ if (error.explanation && error.explanation !== error.title) {
182
+ errLine(` ${error.explanation}`);
183
+ }
184
+ if (error.cause)
185
+ errLine(dim(` Cause: ${error.cause}`));
186
+ if (error.fix)
187
+ errLine(` ${bold('Fix:')} ${error.fix}`);
188
+ if (error.command)
189
+ errLine(` ${bold('Try:')} ${error.command}`);
190
+ if (error.requestId)
191
+ errLine(dim(` Request ID: ${error.requestId}`));
192
+ if (options.debug && error.details !== undefined) {
193
+ errLine('');
194
+ errLine(dim('Debug details:'));
195
+ const detail = typeof error.details === 'string' ? error.details : JSON.stringify(error.details, null, 2);
196
+ errLine(dim(redact(detail)));
197
+ }
198
+ else if (!options.debug) {
199
+ errLine(dim(' (run with --debug for details)'));
200
+ }
201
+ }
202
+ /** Convenience: a "not logged in" error with guidance. */
203
+ export function authRequiredError() {
204
+ return new CliError('You are not logged in', {
205
+ code: 'AUTH_REQUIRED',
206
+ exitCode: ExitCode.AUTH,
207
+ explanation: 'This command needs Inquir Compute credentials.',
208
+ cause: 'No Personal Access Token or API key was found.',
209
+ fix: 'Log in on your machine, or set INQUIR_TOKEN for CI.',
210
+ command: 'inquir login',
211
+ });
212
+ }
213
+ /** Convenience: a usage error (bad/missing arguments). */
214
+ export function usageError(message, command) {
215
+ return new CliError(message, {
216
+ code: 'USAGE',
217
+ exitCode: ExitCode.USAGE,
218
+ command,
219
+ });
220
+ }
221
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,11 @@
1
+ /** Apply resolved global flags (called once at startup from the runtime layer). */
2
+ export declare function configureOutput(options: {
3
+ color?: boolean;
4
+ quiet?: boolean;
5
+ }): void;
6
+ /** For tests. */
7
+ export declare function resetOutput(): void;
8
+ export declare function colorEnabled(): boolean;
1
9
  export declare function bold(value: string): string;
2
10
  export declare function dim(value: string): string;
3
11
  export declare function green(value: string): string;
@@ -5,11 +13,13 @@ export declare function yellow(value: string): string;
5
13
  export declare function red(value: string): string;
6
14
  export declare function cyan(value: string): string;
7
15
  export declare function printLine(value?: string): void;
16
+ /** Like printLine, but suppressed in --quiet mode (status chatter, not results). */
17
+ export declare function printInfo(value?: string): void;
8
18
  export declare function printError(value: string): void;
9
19
  export declare function printSuccess(value: string): void;
10
20
  export declare function printWarning(value: string): void;
11
21
  export declare function printUsage(value: string): void;
12
- export declare function printCommandHelp(name: string, usage: string, flags: string[]): void;
22
+ export declare function printCommandHelp(name: string, usage: string, flags: string[], examples?: string[]): void;
13
23
  export declare function formatDiagnostic(diag: {
14
24
  code: string;
15
25
  filePath?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"AAWA,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1C;AAED,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEzC;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEzC;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1C;AAED,wBAAgB,SAAS,CAAC,KAAK,SAAK,GAAG,IAAI,CAE1C;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAE9C;AAMD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CASnF;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAKrH;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAgB/G"}
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"AAoBA,mFAAmF;AACnF,wBAAgB,eAAe,CAAC,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAGnF;AAED,iBAAiB;AACjB,wBAAgB,WAAW,IAAI,IAAI,CAGlC;AAED,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AASD,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1C;AAED,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEzC;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEzC;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1C;AAED,wBAAgB,SAAS,CAAC,KAAK,SAAK,GAAG,IAAI,CAE1C;AAED,oFAAoF;AACpF,wBAAgB,SAAS,CAAC,KAAK,SAAK,GAAG,IAAI,CAG1C;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAGhD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAGhD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAE9C;AAMD,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EAAE,EACf,QAAQ,GAAE,MAAM,EAAO,GACtB,IAAI,CAgBN;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAKrH;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAgB/G"}
@@ -1,10 +1,37 @@
1
1
  import path from 'node:path';
2
- const ENABLE_COLOR = process.stdout.isTTY;
2
+ import { redact } from './redact.js';
3
+ /** Default color decision: honour NO_COLOR / FORCE_COLOR, else TTY. */
4
+ function defaultColor() {
5
+ if (process.env.FORCE_COLOR && process.env.FORCE_COLOR !== '0')
6
+ return true;
7
+ if (process.env.NO_COLOR !== undefined)
8
+ return false;
9
+ return Boolean(process.stdout.isTTY);
10
+ }
11
+ const state = {
12
+ color: defaultColor(),
13
+ quiet: false,
14
+ };
15
+ /** Apply resolved global flags (called once at startup from the runtime layer). */
16
+ export function configureOutput(options) {
17
+ if (options.color !== undefined)
18
+ state.color = options.color;
19
+ if (options.quiet !== undefined)
20
+ state.quiet = options.quiet;
21
+ }
22
+ /** For tests. */
23
+ export function resetOutput() {
24
+ state.color = defaultColor();
25
+ state.quiet = false;
26
+ }
27
+ export function colorEnabled() {
28
+ return state.color;
29
+ }
3
30
  function wrap(code, value) {
4
- if (!ENABLE_COLOR) {
31
+ if (!state.color) {
5
32
  return value;
6
33
  }
7
- return `\u001b[${code}m${value}\u001b[0m`;
34
+ return `[${code}m${value}`;
8
35
  }
9
36
  export function bold(value) {
10
37
  return wrap('1', value);
@@ -25,15 +52,25 @@ export function cyan(value) {
25
52
  return wrap('36', value);
26
53
  }
27
54
  export function printLine(value = '') {
28
- process.stdout.write(`${value}\n`);
55
+ process.stdout.write(`${redact(value)}\n`);
56
+ }
57
+ /** Like printLine, but suppressed in --quiet mode (status chatter, not results). */
58
+ export function printInfo(value = '') {
59
+ if (state.quiet)
60
+ return;
61
+ printLine(value);
29
62
  }
30
63
  export function printError(value) {
31
- process.stderr.write(`${red(value)}\n`);
64
+ process.stderr.write(`${redact(red(value))}\n`);
32
65
  }
33
66
  export function printSuccess(value) {
67
+ if (state.quiet)
68
+ return;
34
69
  printLine(green(value));
35
70
  }
36
71
  export function printWarning(value) {
72
+ if (state.quiet)
73
+ return;
37
74
  printLine(yellow(value));
38
75
  }
39
76
  export function printUsage(value) {
@@ -42,15 +79,22 @@ export function printUsage(value) {
42
79
  function padEnd(value, width) {
43
80
  return value.padEnd(width, ' ');
44
81
  }
45
- export function printCommandHelp(name, usage, flags) {
82
+ export function printCommandHelp(name, usage, flags, examples = []) {
46
83
  printLine(`Usage: inquir ${usage}`);
47
- printLine('');
48
84
  if (flags.length > 0) {
85
+ printLine('');
49
86
  printLine('Options:');
50
87
  for (const flag of flags) {
51
88
  printLine(` ${flag}`);
52
89
  }
53
90
  }
91
+ if (examples.length > 0) {
92
+ printLine('');
93
+ printLine('Examples:');
94
+ for (const example of examples) {
95
+ printLine(` ${dim('$')} ${example}`);
96
+ }
97
+ }
54
98
  }
55
99
  export function formatDiagnostic(diag, rootDir) {
56
100
  const location = diag.filePath
@@ -1 +1 @@
1
- {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function getCliVersion(): string;
2
+ export declare function getSdkDependencyRange(): string;
3
+ //# sourceMappingURL=package-metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-metadata.d.ts","sourceRoot":"","sources":["../../src/utils/package-metadata.ts"],"names":[],"mappings":"AAyBA,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C"}
@@ -0,0 +1,22 @@
1
+ import { createRequire } from 'node:module';
2
+ const require = createRequire(import.meta.url);
3
+ let cachedPackageJson;
4
+ function readCliPackageJson() {
5
+ if (cachedPackageJson) {
6
+ return cachedPackageJson;
7
+ }
8
+ try {
9
+ cachedPackageJson = require('../../package.json');
10
+ }
11
+ catch {
12
+ cachedPackageJson = {};
13
+ }
14
+ return cachedPackageJson;
15
+ }
16
+ export function getCliVersion() {
17
+ return readCliPackageJson().version ?? '0.1.0';
18
+ }
19
+ export function getSdkDependencyRange() {
20
+ return readCliPackageJson().dependencies?.['@inquir/compute'] ?? '^0.1.0';
21
+ }
22
+ //# sourceMappingURL=package-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-metadata.js","sourceRoot":"","sources":["../../src/utils/package-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAO5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,IAAI,iBAA6C,CAAC;AAElD,SAAS,kBAAkB;IACzB,IAAI,iBAAiB,EAAE,CAAC;QACtB,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,IAAI,CAAC;QACH,iBAAiB,GAAG,OAAO,CAAC,oBAAoB,CAAmB,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,iBAAiB,GAAG,EAAE,CAAC;IACzB,CAAC;IAED,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,kBAAkB,EAAE,CAAC,OAAO,IAAI,OAAO,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO,kBAAkB,EAAE,CAAC,YAAY,EAAE,CAAC,iBAAiB,CAAC,IAAI,QAAQ,CAAC;AAC5E,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"payload.d.ts","sourceRoot":"","sources":["../../src/utils/payload.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAuBD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAO3F;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAgBrE"}
1
+ {"version":3,"file":"payload.d.ts","sourceRoot":"","sources":["../../src/utils/payload.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAuBD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAM3F;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAgBrE"}
@@ -1,4 +1,5 @@
1
1
  import fs from 'node:fs/promises';
2
+ import { readFlagValue } from './args.js';
2
3
  function parseJsonPayload(raw) {
3
4
  const trimmed = raw.trim();
4
5
  if (!trimmed) {
@@ -18,11 +19,10 @@ async function readStdin() {
18
19
  });
19
20
  }
20
21
  export function parsePayloadArgs(args) {
21
- const payloadIndex = args.indexOf('--payload');
22
- const payloadFileIndex = args.indexOf('--payload-file');
22
+ // Use the shared reader so both `--payload value` and `--payload=value` work.
23
23
  return {
24
- payload: payloadIndex >= 0 ? args[payloadIndex + 1] : undefined,
25
- payloadFile: payloadFileIndex >= 0 ? args[payloadFileIndex + 1] : undefined,
24
+ payload: readFlagValue(args, '--payload'),
25
+ payloadFile: readFlagValue(args, '--payload-file'),
26
26
  };
27
27
  }
28
28
  export async function readPayload(args) {
@@ -1 +1 @@
1
- {"version":3,"file":"payload.js","sourceRoot":"","sources":["../../src/utils/payload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAOlC,SAAS,gBAAgB,CAAC,GAAW;IACnC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAY,CAAC;AACxC,CAAC;AAED,KAAK,UAAU,SAAS;IACtB,OAAO,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;QAC3C,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACzC,MAAM,IAAI,KAAK,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAc;IAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/C,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACxD,OAAO;QACL,OAAO,EAAE,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;QAC/D,WAAW,EAAE,gBAAgB,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;KAC5E,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAiB;IACjD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACxD,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,MAAM,SAAS,EAAE,CAAC;QAC9B,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC"}
1
+ {"version":3,"file":"payload.js","sourceRoot":"","sources":["../../src/utils/payload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAO1C,SAAS,gBAAgB,CAAC,GAAW;IACnC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAY,CAAC;AACxC,CAAC;AAED,KAAK,UAAU,SAAS;IACtB,OAAO,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;QAC3C,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACzC,MAAM,IAAI,KAAK,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAc;IAC7C,8EAA8E;IAC9E,OAAO;QACL,OAAO,EAAE,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC;QACzC,WAAW,EAAE,aAAa,CAAC,IAAI,EAAE,gBAAgB,CAAC;KACnD,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAiB;IACjD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACxD,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,MAAM,SAAS,EAAE,CAAC;QAC9B,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Interactive prompts are TTY-gated: never prompt in CI, non-TTY, JSON, or
3
+ * --yes mode. Callers must always supply a sensible non-interactive fallback.
4
+ */
5
+ export declare function canPrompt(): boolean;
6
+ /** Yes/no confirmation. Returns `defaultValue` when prompting is unavailable; true under --yes. */
7
+ export declare function confirm(question: string, defaultValue?: boolean): Promise<boolean>;
8
+ /** Free-text input. Returns the default when prompting is unavailable. */
9
+ export declare function input(question: string, options?: {
10
+ default?: string;
11
+ }): Promise<string>;
12
+ export interface SelectChoice<T> {
13
+ label: string;
14
+ value: T;
15
+ hint?: string;
16
+ }
17
+ /**
18
+ * Single-select from a numbered list. Returns `defaultValue` when prompting is
19
+ * unavailable (callers should pass a safe default or handle `undefined`).
20
+ */
21
+ export declare function select<T>(question: string, choices: Array<SelectChoice<T>>, defaultValue?: T): Promise<T | undefined>;
22
+ //# sourceMappingURL=prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/utils/prompt.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAOnC;AAWD,mGAAmG;AACnG,wBAAsB,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAOtF;AAED,0EAA0E;AAC1E,wBAAsB,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAKjG;AAED,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,CAAC,CAAC;IACT,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,wBAAsB,MAAM,CAAC,CAAC,EAC5B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAC/B,YAAY,CAAC,EAAE,CAAC,GACf,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAkBxB"}
@@ -0,0 +1,67 @@
1
+ import * as readline from 'node:readline/promises';
2
+ import { stdin, stdout } from 'node:process';
3
+ import { runtime } from './context.js';
4
+ import { bold, cyan, printLine } from './output.js';
5
+ /**
6
+ * Interactive prompts are TTY-gated: never prompt in CI, non-TTY, JSON, or
7
+ * --yes mode. Callers must always supply a sensible non-interactive fallback.
8
+ */
9
+ export function canPrompt() {
10
+ return (Boolean(stdin.isTTY && stdout.isTTY) &&
11
+ !runtime().json &&
12
+ !runtime().yes &&
13
+ !process.env.CI);
14
+ }
15
+ async function ask(question) {
16
+ const rl = readline.createInterface({ input: stdin, output: stdout });
17
+ try {
18
+ return (await rl.question(question)).trim();
19
+ }
20
+ finally {
21
+ rl.close();
22
+ }
23
+ }
24
+ /** Yes/no confirmation. Returns `defaultValue` when prompting is unavailable; true under --yes. */
25
+ export async function confirm(question, defaultValue = false) {
26
+ if (runtime().yes)
27
+ return true;
28
+ if (!canPrompt())
29
+ return defaultValue;
30
+ const hint = defaultValue ? 'Y/n' : 'y/N';
31
+ const answer = (await ask(`${question} (${hint}) `)).toLowerCase();
32
+ if (answer === '')
33
+ return defaultValue;
34
+ return answer === 'y' || answer === 'yes';
35
+ }
36
+ /** Free-text input. Returns the default when prompting is unavailable. */
37
+ export async function input(question, options = {}) {
38
+ if (!canPrompt())
39
+ return options.default ?? '';
40
+ const suffix = options.default ? ` (${options.default})` : '';
41
+ const answer = await ask(`${question}${suffix}: `);
42
+ return answer || options.default || '';
43
+ }
44
+ /**
45
+ * Single-select from a numbered list. Returns `defaultValue` when prompting is
46
+ * unavailable (callers should pass a safe default or handle `undefined`).
47
+ */
48
+ export async function select(question, choices, defaultValue) {
49
+ if (choices.length === 0)
50
+ return defaultValue;
51
+ if (!canPrompt())
52
+ return defaultValue ?? choices[0].value;
53
+ printLine(bold(question));
54
+ choices.forEach((choice, index) => {
55
+ const marker = ` ${cyan(String(index + 1))})`;
56
+ printLine(`${marker} ${choice.label}${choice.hint ? ` ${choice.hint}` : ''}`);
57
+ });
58
+ for (;;) {
59
+ const answer = await ask('Select a number: ');
60
+ const index = Number.parseInt(answer, 10) - 1;
61
+ if (Number.isInteger(index) && index >= 0 && index < choices.length) {
62
+ return choices[index].value;
63
+ }
64
+ printLine('Please enter a valid number.');
65
+ }
66
+ }
67
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/utils/prompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Secret redaction. Tokens and API keys must never appear in output, logs, or
3
+ * `--debug` traces. We redact by (a) known patterns and (b) any value explicitly
4
+ * registered at runtime (the resolved credential, env values, etc.).
5
+ */
6
+ /** Register a concrete secret value so it is masked wherever it appears. */
7
+ export declare function registerSecret(value: string | undefined | null): void;
8
+ /** For tests / isolation. */
9
+ export declare function clearRegisteredSecrets(): void;
10
+ /** Mask a single token for display: keep a hint of the prefix + last 4 chars. */
11
+ export declare function maskToken(value: string | undefined): string;
12
+ /** Redact all known secrets from an arbitrary string. */
13
+ export declare function redact(input: string): string;
14
+ //# sourceMappingURL=redact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../../src/utils/redact.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,4EAA4E;AAC5E,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,CAIrE;AAED,6BAA6B;AAC7B,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C;AAED,iFAAiF;AACjF,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAM3D;AAED,yDAAyD;AACzD,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAW5C"}