@claudexor/cli 3.0.4 → 3.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/about-command.d.ts +32 -0
- package/dist/about-command.d.ts.map +1 -0
- package/dist/about-command.js +40 -0
- package/dist/about-command.js.map +1 -0
- package/dist/acp-auth-command.d.ts +3 -0
- package/dist/acp-auth-command.d.ts.map +1 -0
- package/dist/acp-auth-command.js +18 -0
- package/dist/acp-auth-command.js.map +1 -0
- package/dist/acp-auth.d.ts +13 -0
- package/dist/acp-auth.d.ts.map +1 -0
- package/dist/acp-auth.js +47 -0
- package/dist/acp-auth.js.map +1 -0
- package/dist/acp-surface-runner.d.ts +12 -0
- package/dist/acp-surface-runner.d.ts.map +1 -1
- package/dist/acp-surface-runner.js +113 -11
- package/dist/acp-surface-runner.js.map +1 -1
- package/dist/bridge-serve.d.ts.map +1 -1
- package/dist/bridge-serve.js +2 -0
- package/dist/bridge-serve.js.map +1 -1
- package/dist/capabilities.d.ts.map +1 -1
- package/dist/capabilities.js +2 -1
- package/dist/capabilities.js.map +1 -1
- package/dist/claudexord.d.ts +21 -0
- package/dist/claudexord.d.ts.map +1 -1
- package/dist/claudexord.js +105 -21
- package/dist/claudexord.js.map +1 -1
- package/dist/cli-error.d.ts +97 -0
- package/dist/cli-error.d.ts.map +1 -0
- package/dist/cli-error.js +308 -0
- package/dist/cli-error.js.map +1 -0
- package/dist/cli-io.d.ts +9 -0
- package/dist/cli-io.d.ts.map +1 -1
- package/dist/cli-io.js +10 -1
- package/dist/cli-io.js.map +1 -1
- package/dist/cli.js +110 -116
- package/dist/cli.js.map +1 -1
- package/dist/codex-device-login.d.ts +117 -0
- package/dist/codex-device-login.d.ts.map +1 -0
- package/dist/codex-device-login.js +227 -0
- package/dist/codex-device-login.js.map +1 -0
- package/dist/command-flags.d.ts +0 -6
- package/dist/command-flags.d.ts.map +1 -1
- package/dist/command-flags.js +12 -4
- package/dist/command-flags.js.map +1 -1
- package/dist/command-help.d.ts +46 -0
- package/dist/command-help.d.ts.map +1 -0
- package/dist/command-help.js +92 -0
- package/dist/command-help.js.map +1 -0
- package/dist/command-registry.d.ts +2 -0
- package/dist/command-registry.d.ts.map +1 -1
- package/dist/command-registry.js +14 -7
- package/dist/command-registry.js.map +1 -1
- package/dist/control-services.d.ts +54 -27
- package/dist/control-services.d.ts.map +1 -1
- package/dist/control-services.js +56 -30
- package/dist/control-services.js.map +1 -1
- package/dist/credential-commands.d.ts.map +1 -1
- package/dist/credential-commands.js +44 -1
- package/dist/credential-commands.js.map +1 -1
- package/dist/daemon-outcome.d.ts +24 -0
- package/dist/daemon-outcome.d.ts.map +1 -0
- package/dist/daemon-outcome.js +59 -0
- package/dist/daemon-outcome.js.map +1 -0
- package/dist/daemon-run.d.ts +23 -4
- package/dist/daemon-run.d.ts.map +1 -1
- package/dist/daemon-run.js +66 -27
- package/dist/daemon-run.js.map +1 -1
- package/dist/delegation-belt-descriptor.d.ts +31 -13
- package/dist/delegation-belt-descriptor.d.ts.map +1 -1
- package/dist/delegation-belt-descriptor.js +43 -15
- package/dist/delegation-belt-descriptor.js.map +1 -1
- package/dist/live.d.ts +13 -1
- package/dist/live.d.ts.map +1 -1
- package/dist/live.js +56 -7
- package/dist/live.js.map +1 -1
- package/dist/mcp-runner.d.ts.map +1 -1
- package/dist/mcp-runner.js +60 -6
- package/dist/mcp-runner.js.map +1 -1
- package/dist/native-login.d.ts +10 -1
- package/dist/native-login.d.ts.map +1 -1
- package/dist/native-login.js +32 -10
- package/dist/native-login.js.map +1 -1
- package/dist/ops-commands.d.ts +5 -1
- package/dist/ops-commands.d.ts.map +1 -1
- package/dist/ops-commands.js +45 -52
- package/dist/ops-commands.js.map +1 -1
- package/dist/plan-implement-readiness.d.ts +32 -0
- package/dist/plan-implement-readiness.d.ts.map +1 -0
- package/dist/plan-implement-readiness.js +51 -0
- package/dist/plan-implement-readiness.js.map +1 -0
- package/dist/plugins.d.ts.map +1 -1
- package/dist/plugins.js +73 -20
- package/dist/plugins.js.map +1 -1
- package/dist/project-command.d.ts +15 -0
- package/dist/project-command.d.ts.map +1 -1
- package/dist/project-command.js +75 -20
- package/dist/project-command.js.map +1 -1
- package/dist/quota-command.d.ts.map +1 -1
- package/dist/quota-command.js +2 -6
- package/dist/quota-command.js.map +1 -1
- package/dist/release-command.d.ts.map +1 -1
- package/dist/release-command.js +31 -6
- package/dist/release-command.js.map +1 -1
- package/dist/release.d.ts +41 -10
- package/dist/release.d.ts.map +1 -1
- package/dist/release.js +70 -48
- package/dist/release.js.map +1 -1
- package/dist/repo-asset-authority.d.ts +89 -0
- package/dist/repo-asset-authority.d.ts.map +1 -0
- package/dist/repo-asset-authority.js +175 -0
- package/dist/repo-asset-authority.js.map +1 -0
- package/dist/retry-command.d.ts +15 -0
- package/dist/retry-command.d.ts.map +1 -1
- package/dist/retry-command.js +7 -4
- package/dist/retry-command.js.map +1 -1
- package/dist/review-command.d.ts.map +1 -1
- package/dist/review-command.js +2 -6
- package/dist/review-command.js.map +1 -1
- package/dist/reviewer-options.d.ts +11 -1
- package/dist/reviewer-options.d.ts.map +1 -1
- package/dist/reviewer-options.js +24 -9
- package/dist/reviewer-options.js.map +1 -1
- package/dist/run-options.d.ts.map +1 -1
- package/dist/run-options.js +13 -1
- package/dist/run-options.js.map +1 -1
- package/dist/settings-command.d.ts.map +1 -1
- package/dist/settings-command.js +2 -6
- package/dist/settings-command.js.map +1 -1
- package/dist/settings-service.d.ts +101 -10
- package/dist/settings-service.d.ts.map +1 -1
- package/dist/settings-service.js +201 -12
- package/dist/settings-service.js.map +1 -1
- package/dist/setup-job-store.d.ts +16 -5
- package/dist/setup-job-store.d.ts.map +1 -1
- package/dist/setup-job-store.js +24 -4
- package/dist/setup-job-store.js.map +1 -1
- package/dist/setup-jobs.d.ts +14 -4
- package/dist/setup-jobs.d.ts.map +1 -1
- package/dist/setup-jobs.js +204 -23
- package/dist/setup-jobs.js.map +1 -1
- package/dist/setup-login-inline.d.ts +71 -0
- package/dist/setup-login-inline.d.ts.map +1 -0
- package/dist/setup-login-inline.js +207 -0
- package/dist/setup-login-inline.js.map +1 -0
- package/dist/setup-login-protocol.d.ts +3 -2
- package/dist/setup-login-protocol.d.ts.map +1 -1
- package/dist/setup-login-protocol.js +16 -1
- package/dist/setup-login-protocol.js.map +1 -1
- package/dist/setup-login-runner.d.ts +9 -0
- package/dist/setup-login-runner.d.ts.map +1 -1
- package/dist/setup-login-runner.js +212 -5
- package/dist/setup-login-runner.js.map +1 -1
- package/dist/thread-delivery.d.ts.map +1 -1
- package/dist/thread-delivery.js +3 -1
- package/dist/thread-delivery.js.map +1 -1
- package/dist/thread-execution-workspace.d.ts +22 -0
- package/dist/thread-execution-workspace.d.ts.map +1 -0
- package/dist/thread-execution-workspace.js +21 -0
- package/dist/thread-execution-workspace.js.map +1 -0
- package/package.json +23 -23
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The ONE CLI result/error projector (D-7, GH #28). Every failure class —
|
|
3
|
+
* argument/usage validation, pre-daemon bootstrap, typed preflight/daemon
|
|
4
|
+
* problems, transport errors, and unexpected exceptions — is normalized into a
|
|
5
|
+
* single typed problem and rendered as EXACTLY ONE JSON envelope on stdout
|
|
6
|
+
* (`--json` mode) or one human line on stderr (text mode), both derived from
|
|
7
|
+
* the SAME typed object. A central category -> exit-code table owns the codes:
|
|
8
|
+
* usage/validation = 2, operational failure = 1.
|
|
9
|
+
*
|
|
10
|
+
* This projector is intentionally dependency-light: it imports only the CLI IO
|
|
11
|
+
* owner and the typed `ControlProblem`/Zod shapes. It never needs the daemon,
|
|
12
|
+
* writable state, or a schema-generation step that could itself fail — so it is
|
|
13
|
+
* a valid last-resort serializer even when bootstrap failed.
|
|
14
|
+
*
|
|
15
|
+
* The run-verb SUCCESS envelope (`{runId, runDir, status, ...}`) does NOT flow
|
|
16
|
+
* through here: the projector owns FAILURE paths and the non-run commands whose
|
|
17
|
+
* error handling was previously ad-hoc. The failure envelope keeps a legacy
|
|
18
|
+
* `error` alias of `message` so existing consumers/tests that read `error`
|
|
19
|
+
* keep working.
|
|
20
|
+
*/
|
|
21
|
+
import { ControlProblem } from "@claudexor/schema";
|
|
22
|
+
import { redactSecrets } from "@claudexor/util";
|
|
23
|
+
import { printJson, printJsonLine } from "./cli-io.js";
|
|
24
|
+
/** The central category -> process exit-code table (the one owner). */
|
|
25
|
+
const CATEGORY_EXIT = {
|
|
26
|
+
usage: 2,
|
|
27
|
+
operational: 1,
|
|
28
|
+
};
|
|
29
|
+
/** A typed CLI failure: category picks the exit code, the rest survive projection. */
|
|
30
|
+
export class CliError extends Error {
|
|
31
|
+
category;
|
|
32
|
+
code;
|
|
33
|
+
retryable;
|
|
34
|
+
fieldErrors;
|
|
35
|
+
requiredActions;
|
|
36
|
+
details;
|
|
37
|
+
context;
|
|
38
|
+
constructor(category, message, fields = {}) {
|
|
39
|
+
super(message);
|
|
40
|
+
this.name = "CliError";
|
|
41
|
+
this.category = category;
|
|
42
|
+
this.code = fields.code;
|
|
43
|
+
this.retryable = fields.retryable;
|
|
44
|
+
this.fieldErrors = fields.fieldErrors;
|
|
45
|
+
this.requiredActions = fields.requiredActions;
|
|
46
|
+
this.details = fields.details;
|
|
47
|
+
this.context = fields.context;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/** A usage/validation failure (exit 2). An operational failure (exit 1) is
|
|
51
|
+
* `new CliError("operational", ...)` — most operational failures reach the
|
|
52
|
+
* projector as native throwables (Node errors, ControlProblem-derived errors)
|
|
53
|
+
* rather than a hand-built one. */
|
|
54
|
+
export function usageError(message, fields = {}) {
|
|
55
|
+
return new CliError("usage", message, fields);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* A structured minimum-value validation error matching the #28 contract shape:
|
|
59
|
+
* `{code:invalid_argument, message, details:{field, minimum}, fieldErrors}`.
|
|
60
|
+
*/
|
|
61
|
+
export function minIntError(field, minimum) {
|
|
62
|
+
const message = `--${field} must be at least ${minimum}`;
|
|
63
|
+
return new CliError("usage", message, {
|
|
64
|
+
code: "invalid_argument",
|
|
65
|
+
fieldErrors: { [field]: [message] },
|
|
66
|
+
details: { field, minimum },
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
/** Structural ZodError detection (no `zod` import — the projector stays
|
|
70
|
+
* dependency-light so it is a valid last-resort serializer). */
|
|
71
|
+
function asZodIssues(err) {
|
|
72
|
+
if (err &&
|
|
73
|
+
typeof err === "object" &&
|
|
74
|
+
err.name === "ZodError" &&
|
|
75
|
+
Array.isArray(err.issues)) {
|
|
76
|
+
return err.issues;
|
|
77
|
+
}
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
/** Convert Zod issues into path->messages field errors (no serialized Zod dump). */
|
|
81
|
+
export function zodFieldErrors(issues) {
|
|
82
|
+
const out = {};
|
|
83
|
+
for (const issue of issues) {
|
|
84
|
+
const key = issue.path.length > 0 ? issue.path.map((p) => String(p)).join(".") : "_";
|
|
85
|
+
(out[key] ??= []).push(issue.message);
|
|
86
|
+
}
|
|
87
|
+
return out;
|
|
88
|
+
}
|
|
89
|
+
/** A human one-liner from Zod issues — the first issue, never the whole object. */
|
|
90
|
+
function zodMessage(issues) {
|
|
91
|
+
const first = issues[0];
|
|
92
|
+
if (!first)
|
|
93
|
+
return "invalid input";
|
|
94
|
+
const at = first.path.length > 0 ? ` at ${first.path.map((p) => String(p)).join(".")}` : "";
|
|
95
|
+
return `${first.message}${at}`;
|
|
96
|
+
}
|
|
97
|
+
const ERRNO_RE = /^E[A-Z0-9]+$/;
|
|
98
|
+
const MAX_CONTEXT_STRING = 2000;
|
|
99
|
+
/** Bound long string values in a typed context so a localized git/tool stderr
|
|
100
|
+
* is demoted to bounded evidence instead of flooding the envelope (QA-051). */
|
|
101
|
+
export function boundContext(context) {
|
|
102
|
+
if (!context)
|
|
103
|
+
return undefined;
|
|
104
|
+
const keys = Object.keys(context);
|
|
105
|
+
if (keys.length === 0)
|
|
106
|
+
return undefined;
|
|
107
|
+
const out = {};
|
|
108
|
+
for (const [key, value] of Object.entries(context)) {
|
|
109
|
+
if (typeof value === "string" && value.length > MAX_CONTEXT_STRING) {
|
|
110
|
+
out[key] =
|
|
111
|
+
`${value.slice(0, MAX_CONTEXT_STRING)}… (truncated ${value.length - MAX_CONTEXT_STRING} chars)`;
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
out[key] = value;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return out;
|
|
118
|
+
}
|
|
119
|
+
function nonEmptyRecord(value) {
|
|
120
|
+
return value && Object.keys(value).length > 0 ? value : undefined;
|
|
121
|
+
}
|
|
122
|
+
function nonEmptyArray(value) {
|
|
123
|
+
return value && value.length > 0 ? value : undefined;
|
|
124
|
+
}
|
|
125
|
+
/** A typed context record or undefined when empty. Unlike `boundContext` this
|
|
126
|
+
* does NOT truncate — bounding is deferred to `redactProblem` so redaction of a
|
|
127
|
+
* boundary-straddling token always runs on the FULL string first (finding 6). */
|
|
128
|
+
function nonEmptyContext(context) {
|
|
129
|
+
return context && Object.keys(context).length > 0 ? context : undefined;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Normalize ANY thrown value into a typed problem. `defaultCategory` decides the
|
|
133
|
+
* exit code only when the throwable carries no category signal of its own — a
|
|
134
|
+
* flag-parsing context passes "usage", the top-level catch passes "operational".
|
|
135
|
+
*/
|
|
136
|
+
export function normalizeThrowable(err, defaultCategory) {
|
|
137
|
+
if (err instanceof CliError) {
|
|
138
|
+
return {
|
|
139
|
+
category: err.category,
|
|
140
|
+
message: err.message,
|
|
141
|
+
code: err.code,
|
|
142
|
+
retryable: err.retryable,
|
|
143
|
+
fieldErrors: nonEmptyRecord(err.fieldErrors),
|
|
144
|
+
requiredActions: nonEmptyArray(err.requiredActions),
|
|
145
|
+
details: err.details,
|
|
146
|
+
// RAW context here; redaction runs BEFORE truncation in redactProblem so a
|
|
147
|
+
// secret token straddling the truncation boundary cannot survive (finding 6).
|
|
148
|
+
context: nonEmptyContext(err.context),
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
const zodIssues = asZodIssues(err);
|
|
152
|
+
if (zodIssues) {
|
|
153
|
+
return {
|
|
154
|
+
category: "usage",
|
|
155
|
+
code: "invalid_argument",
|
|
156
|
+
message: zodMessage(zodIssues),
|
|
157
|
+
fieldErrors: zodFieldErrors(zodIssues),
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
if (err instanceof Error) {
|
|
161
|
+
const anyErr = err;
|
|
162
|
+
const code = typeof anyErr["code"] === "string" ? anyErr["code"] : undefined;
|
|
163
|
+
const status = typeof anyErr["status"] === "number" ? anyErr["status"] : undefined;
|
|
164
|
+
const category = status === 400 ||
|
|
165
|
+
status === 422 ||
|
|
166
|
+
code === "inline_secret_rejected" ||
|
|
167
|
+
code === "invalid_argument"
|
|
168
|
+
? "usage"
|
|
169
|
+
: code && ERRNO_RE.test(code)
|
|
170
|
+
? "operational"
|
|
171
|
+
: defaultCategory;
|
|
172
|
+
const retryable = typeof anyErr["retryable"] === "boolean" ? anyErr["retryable"] : undefined;
|
|
173
|
+
const fieldErrors = nonEmptyRecord(anyErr["fieldErrors"]);
|
|
174
|
+
const requiredActions = nonEmptyArray(anyErr["requiredActions"]);
|
|
175
|
+
// A Node system error's syscall/errno are stable machine detail.
|
|
176
|
+
const details = typeof anyErr["syscall"] === "string" || typeof anyErr["errno"] === "number"
|
|
177
|
+
? {
|
|
178
|
+
...(typeof anyErr["syscall"] === "string" ? { syscall: anyErr["syscall"] } : {}),
|
|
179
|
+
...(typeof anyErr["errno"] === "number" ? { errno: anyErr["errno"] } : {}),
|
|
180
|
+
}
|
|
181
|
+
: undefined;
|
|
182
|
+
return {
|
|
183
|
+
category,
|
|
184
|
+
message: err.message,
|
|
185
|
+
code,
|
|
186
|
+
retryable,
|
|
187
|
+
fieldErrors,
|
|
188
|
+
requiredActions,
|
|
189
|
+
details,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
return { category: defaultCategory, message: String(err) };
|
|
193
|
+
}
|
|
194
|
+
/** Recursively redact secret-like tokens from any projected value: strings are
|
|
195
|
+
* redacted directly; arrays and plain objects are mapped so a token nested in
|
|
196
|
+
* `details`/`context` (a runtime-assembled git/tool stderr, an errored URL)
|
|
197
|
+
* never leaks. Non-string leaves pass through untouched. */
|
|
198
|
+
function redactUnknown(value) {
|
|
199
|
+
if (typeof value === "string")
|
|
200
|
+
return redactSecrets(value);
|
|
201
|
+
if (Array.isArray(value))
|
|
202
|
+
return value.map(redactUnknown);
|
|
203
|
+
if (value && typeof value === "object") {
|
|
204
|
+
const out = {};
|
|
205
|
+
for (const [k, v] of Object.entries(value))
|
|
206
|
+
out[k] = redactUnknown(v);
|
|
207
|
+
return out;
|
|
208
|
+
}
|
|
209
|
+
return value;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* The SINGLE redaction owner for the projector (QA — runtime-assembled tokens):
|
|
213
|
+
* every human/machine string a failure envelope renders — message, field-error
|
|
214
|
+
* lines, required actions, and details/context leaves — is passed through
|
|
215
|
+
* `redactSecrets` here, so a token that reached a thrown message or a bounded
|
|
216
|
+
* git/tool context is masked once, at the one place that serializes failures.
|
|
217
|
+
*/
|
|
218
|
+
function redactProblem(p) {
|
|
219
|
+
return {
|
|
220
|
+
...p,
|
|
221
|
+
message: redactSecrets(p.message),
|
|
222
|
+
fieldErrors: p.fieldErrors
|
|
223
|
+
? Object.fromEntries(Object.entries(p.fieldErrors).map(([k, v]) => [k, v.map((s) => redactSecrets(s))]))
|
|
224
|
+
: undefined,
|
|
225
|
+
requiredActions: p.requiredActions?.map((s) => redactSecrets(s)),
|
|
226
|
+
details: p.details ? redactUnknown(p.details) : undefined,
|
|
227
|
+
// Redact THEN bound: a secret token that straddles the MAX_CONTEXT_STRING
|
|
228
|
+
// boundary is masked on the full string before truncation, so a split token
|
|
229
|
+
// can never evade the detector (finding 6).
|
|
230
|
+
context: p.context
|
|
231
|
+
? boundContext(redactUnknown(p.context))
|
|
232
|
+
: undefined,
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* THE projector: render any thrown value as one failure envelope (json) or one
|
|
237
|
+
* stderr line (text), and return the process exit code. Human stderr and the
|
|
238
|
+
* JSON envelope are generated from the SAME normalized problem, and every string
|
|
239
|
+
* they carry is secret-redacted once here (the single owner).
|
|
240
|
+
*/
|
|
241
|
+
export function renderCliFailure(json, err, opts = {}) {
|
|
242
|
+
const p = redactProblem(normalizeThrowable(err, opts.defaultCategory ?? "operational"));
|
|
243
|
+
const exitCode = CATEGORY_EXIT[p.category];
|
|
244
|
+
const prefix = opts.messagePrefix;
|
|
245
|
+
const message = prefix && !p.message.startsWith(prefix) ? `${prefix} ${p.message}` : p.message;
|
|
246
|
+
if (json) {
|
|
247
|
+
const envelope = {
|
|
248
|
+
// Per-command extras first; every canonical field below overrides a
|
|
249
|
+
// same-named extra so the failure shape can't be forged. Redacted once
|
|
250
|
+
// here (the single owner) like everything else in the envelope.
|
|
251
|
+
...(opts.extras ? redactUnknown(opts.extras) : {}),
|
|
252
|
+
ok: false,
|
|
253
|
+
exitCode,
|
|
254
|
+
...(p.code ? { code: p.code } : {}),
|
|
255
|
+
message,
|
|
256
|
+
// Legacy alias: earlier CLI envelopes and their consumers read `error`.
|
|
257
|
+
error: message,
|
|
258
|
+
...(p.retryable !== undefined ? { retryable: p.retryable } : {}),
|
|
259
|
+
...(p.fieldErrors ? { fieldErrors: p.fieldErrors } : {}),
|
|
260
|
+
...(p.requiredActions ? { requiredActions: p.requiredActions } : {}),
|
|
261
|
+
...(p.details ? { details: p.details } : {}),
|
|
262
|
+
...(p.context ? { context: p.context } : {}),
|
|
263
|
+
};
|
|
264
|
+
if (opts.stream)
|
|
265
|
+
printJsonLine(envelope);
|
|
266
|
+
else
|
|
267
|
+
printJson(envelope);
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
process.stderr.write(`${message}\n`);
|
|
271
|
+
}
|
|
272
|
+
return exitCode;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Build a typed CliError from a failed control-API response body. A typed
|
|
276
|
+
* `ControlProblem` (code/message/retryable/fieldErrors/requiredActions/context)
|
|
277
|
+
* is preserved intact — never flattened to a bare string. The exit category is
|
|
278
|
+
* derived from the HTTP status: 400/422 are validation (exit 2), everything
|
|
279
|
+
* else is an operational failure (exit 1). Context strings are bounded so a
|
|
280
|
+
* localized git/tool stderr rides as bounded evidence.
|
|
281
|
+
*/
|
|
282
|
+
export function controlProblemError(status, body, fallbackMessage) {
|
|
283
|
+
const category = status === 400 || status === 422 ? "usage" : "operational";
|
|
284
|
+
const parsed = ControlProblem.safeParse(body);
|
|
285
|
+
if (parsed.success) {
|
|
286
|
+
const pb = parsed.data;
|
|
287
|
+
return new CliError(category, pb.message || fallbackMessage, {
|
|
288
|
+
code: pb.code,
|
|
289
|
+
retryable: pb.retryable,
|
|
290
|
+
fieldErrors: nonEmptyRecord(pb.fieldErrors),
|
|
291
|
+
requiredActions: nonEmptyArray(pb.requiredActions),
|
|
292
|
+
// RAW: redactProblem redacts before it bounds (finding 6).
|
|
293
|
+
context: nonEmptyContext(pb.context),
|
|
294
|
+
...(pb.evidenceRefs.length > 0 ? { details: { evidenceRefs: pb.evidenceRefs } } : {}),
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
// Not a typed ControlProblem: salvage message/error/code without inventing fields.
|
|
298
|
+
const record = body && typeof body === "object" ? body : {};
|
|
299
|
+
const message = typeof record["message"] === "string"
|
|
300
|
+
? record["message"]
|
|
301
|
+
: typeof record["error"] === "string"
|
|
302
|
+
? record["error"]
|
|
303
|
+
: fallbackMessage;
|
|
304
|
+
const code = typeof record["code"] === "string" ? record["code"] : undefined;
|
|
305
|
+
const retryable = typeof record["retryable"] === "boolean" ? record["retryable"] : undefined;
|
|
306
|
+
return new CliError(category, message, { code, retryable });
|
|
307
|
+
}
|
|
308
|
+
//# sourceMappingURL=cli-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-error.js","sourceRoot":"","sources":["../src/cli-error.ts"],"names":[],"mappings":"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"}
|
package/dist/cli-io.d.ts
CHANGED
|
@@ -8,6 +8,15 @@ export declare function printJson(value: unknown): void;
|
|
|
8
8
|
/** One COMPACT JSON object per line — the NDJSON contract (--json-stream). A
|
|
9
9
|
* pretty multi-line object would break `for line in stream: json.loads(line)`. */
|
|
10
10
|
export declare function printJsonLine(value: unknown): void;
|
|
11
|
+
/**
|
|
12
|
+
* A usage/validation failure (exit 2). The JSON envelope aligns with the D-7
|
|
13
|
+
* projector shape ({ok, exitCode, code, message}) while keeping the legacy
|
|
14
|
+
* `error` alias for existing consumers. The `code` uses the SAME vocabulary the
|
|
15
|
+
* projector stamps for this class (`invalid_argument`, matching `minIntError`
|
|
16
|
+
* and the Zod path) so a machine consumer never sees two names for one failure.
|
|
17
|
+
* Typed failures (field errors, domain codes) go through `renderCliFailure` in
|
|
18
|
+
* cli-error.ts instead.
|
|
19
|
+
*/
|
|
11
20
|
export declare function printUsageError(json: boolean, error: string): number;
|
|
12
21
|
export declare function statusGlyph(status: string): string;
|
|
13
22
|
export declare function authSourceAvailability(status: {
|
package/dist/cli-io.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-io.d.ts","sourceRoot":"","sources":["../src/cli-io.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAErC;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAE9C;AAED;mFACmF;AACnF,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAElD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAIpE;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,WAAW,CAAC,EAAE;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,EAAE,WAAW,GAAG,aAAa,GAAG,SAAS,CAAC;QACtD,YAAY,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;KAC/C,EAAE,CAAC;CACL,GAAG,MAAM,CAST;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE;IACpC,MAAM,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC5D,GAAG,MAAM,CAIT"}
|
|
1
|
+
{"version":3,"file":"cli-io.d.ts","sourceRoot":"","sources":["../src/cli-io.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAErC;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAE9C;AAED;mFACmF;AACnF,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAElD;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAIpE;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,WAAW,CAAC,EAAE;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,EAAE,WAAW,GAAG,aAAa,GAAG,SAAS,CAAC;QACtD,YAAY,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;KAC/C,EAAE,CAAC;CACL,GAAG,MAAM,CAST;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE;IACpC,MAAM,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC5D,GAAG,MAAM,CAIT"}
|
package/dist/cli-io.js
CHANGED
|
@@ -14,9 +14,18 @@ export function printJson(value) {
|
|
|
14
14
|
export function printJsonLine(value) {
|
|
15
15
|
process.stdout.write(JSON.stringify(value) + "\n");
|
|
16
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* A usage/validation failure (exit 2). The JSON envelope aligns with the D-7
|
|
19
|
+
* projector shape ({ok, exitCode, code, message}) while keeping the legacy
|
|
20
|
+
* `error` alias for existing consumers. The `code` uses the SAME vocabulary the
|
|
21
|
+
* projector stamps for this class (`invalid_argument`, matching `minIntError`
|
|
22
|
+
* and the Zod path) so a machine consumer never sees two names for one failure.
|
|
23
|
+
* Typed failures (field errors, domain codes) go through `renderCliFailure` in
|
|
24
|
+
* cli-error.ts instead.
|
|
25
|
+
*/
|
|
17
26
|
export function printUsageError(json, error) {
|
|
18
27
|
if (json)
|
|
19
|
-
printJson({ ok: false, exitCode: 2, error });
|
|
28
|
+
printJson({ ok: false, exitCode: 2, code: "invalid_argument", message: error, error });
|
|
20
29
|
else
|
|
21
30
|
process.stderr.write(`${error}\n`);
|
|
22
31
|
return 2;
|
package/dist/cli-io.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-io.js","sourceRoot":"","sources":["../src/cli-io.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,KAAK,CAAC,CAAS;IAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAC9D,CAAC;AAED;mFACmF;AACnF,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAa,EAAE,KAAa;IAC1D,IAAI,IAAI;QAAE,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;;
|
|
1
|
+
{"version":3,"file":"cli-io.js","sourceRoot":"","sources":["../src/cli-io.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,KAAK,CAAC,CAAS;IAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAC9D,CAAC;AAED;mFACmF;AACnF,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;AACrD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,IAAa,EAAE,KAAa;IAC1D,IAAI,IAAI;QAAE,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;;QAC5F,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;IACxC,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC;AAC3F,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAMtC;IACC,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;IACzC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,wBAAwB,CAAC;IAC1D,OAAO,OAAO;SACX,GAAG,CACF,CAAC,MAAM,EAAE,EAAE,CACT,GAAG,MAAM,CAAC,MAAM,iBAAiB,MAAM,CAAC,YAAY,iBAAiB,MAAM,CAAC,YAAY,GAAG,CAC9F;SACA,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAE7B;IACC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;IACnC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IACvC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7D,CAAC"}
|