@typeship-ax/cli 0.22.0 → 0.23.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/AGENTS.md +12 -8
- package/README.md +14 -27
- package/api.json +8898 -9026
- package/api.md +369 -327
- package/dist/arguments.d.ts +47 -0
- package/dist/arguments.d.ts.map +1 -0
- package/dist/arguments.js +254 -0
- package/dist/cli-agent.d.ts +31 -8
- package/dist/cli-agent.d.ts.map +1 -1
- package/dist/cli-agent.js +146 -28
- package/dist/cli.js +483 -237
- package/dist/core/http.d.ts +162 -19
- package/dist/core/http.d.ts.map +1 -1
- package/dist/core/http.js +381 -48
- package/dist/core/pagination.d.ts +42 -6
- package/dist/core/pagination.d.ts.map +1 -1
- package/dist/core/pagination.js +111 -17
- package/dist/credential-storage.d.ts +10 -3
- package/dist/credential-storage.d.ts.map +1 -1
- package/dist/credential-storage.js +15 -6
- package/dist/dates.d.ts +1 -1
- package/dist/dates.js +1 -1
- package/dist/errors.d.ts +20 -84
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +20 -108
- package/dist/fields.d.ts +29 -0
- package/dist/fields.d.ts.map +1 -0
- package/dist/fields.js +101 -0
- package/dist/index.d.ts +28 -18
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +35 -25
- package/dist/named-credentials.d.ts +19 -0
- package/dist/named-credentials.d.ts.map +1 -1
- package/dist/named-credentials.js +81 -1
- package/dist/oauth-login.d.ts +8 -2
- package/dist/oauth-login.d.ts.map +1 -1
- package/dist/oauth-login.js +31 -19
- package/dist/oauth-request.d.ts +7 -1
- package/dist/oauth-request.d.ts.map +1 -1
- package/dist/oauth-request.js +26 -4
- package/dist/oauth-session.d.ts +13 -1
- package/dist/oauth-session.d.ts.map +1 -1
- package/dist/oauth-session.js +34 -18
- package/dist/ops.d.ts +53 -5
- package/dist/ops.d.ts.map +1 -1
- package/dist/ops.js +49 -40
- package/dist/polling-login.d.ts +8 -2
- package/dist/polling-login.d.ts.map +1 -1
- package/dist/polling-login.js +25 -11
- package/dist/resources/api-keys.d.ts +10 -7
- package/dist/resources/api-keys.d.ts.map +1 -1
- package/dist/resources/api-keys.js +10 -31
- package/dist/resources/deliveries.d.ts +88 -4
- package/dist/resources/deliveries.d.ts.map +1 -1
- package/dist/resources/deliveries.js +95 -18
- package/dist/resources/drafts.d.ts +15 -15
- package/dist/resources/drafts.d.ts.map +1 -1
- package/dist/resources/drafts.js +11 -64
- package/dist/resources/files.d.ts +4 -4
- package/dist/resources/files.d.ts.map +1 -1
- package/dist/resources/files.js +3 -12
- package/dist/resources/generations.d.ts +14 -14
- package/dist/resources/generations.d.ts.map +1 -1
- package/dist/resources/generations.js +21 -45
- package/dist/resources/organization.d.ts +4 -4
- package/dist/resources/organization.d.ts.map +1 -1
- package/dist/resources/organization.js +3 -10
- package/dist/resources/{generate.d.ts → packages.d.ts} +16 -16
- package/dist/resources/packages.d.ts.map +1 -0
- package/dist/resources/{generate.js → packages.js} +13 -29
- package/dist/resources/projects.d.ts +50 -50
- package/dist/resources/projects.d.ts.map +1 -1
- package/dist/resources/projects.js +60 -116
- package/dist/resources/releases.d.ts +21 -16
- package/dist/resources/releases.d.ts.map +1 -1
- package/dist/resources/releases.js +18 -39
- package/dist/resources/spec-revisions.d.ts +15 -6
- package/dist/resources/spec-revisions.d.ts.map +1 -1
- package/dist/resources/spec-revisions.js +6 -28
- package/dist/resources/specs.d.ts +7 -7
- package/dist/resources/specs.d.ts.map +1 -1
- package/dist/resources/specs.js +6 -34
- package/dist/resources/targets.d.ts +48 -48
- package/dist/resources/targets.d.ts.map +1 -1
- package/dist/resources/targets.js +58 -114
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +83 -81
- package/dist/search.d.ts +54 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +421 -0
- package/dist/types.d.ts +499 -339
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +18 -18
- package/package.json +5 -2
- package/src/arguments.ts +242 -0
- package/src/cli-agent.ts +156 -30
- package/src/cli.ts +444 -211
- package/src/core/http.ts +457 -58
- package/src/core/pagination.ts +129 -18
- package/src/credential-storage.ts +16 -6
- package/src/dates.ts +1 -1
- package/src/errors.ts +46 -115
- package/src/fields.ts +91 -0
- package/src/index.ts +45 -28
- package/src/named-credentials.ts +66 -1
- package/src/oauth-login.ts +36 -21
- package/src/oauth-request.ts +32 -6
- package/src/oauth-session.ts +37 -19
- package/src/ops.ts +82 -44
- package/src/polling-login.ts +24 -11
- package/src/resources/api-keys.ts +34 -48
- package/src/resources/deliveries.ts +211 -30
- package/src/resources/drafts.ts +60 -107
- package/src/resources/files.ts +19 -20
- package/src/resources/generations.ts +57 -75
- package/src/resources/organization.ts +11 -16
- package/src/resources/{generate.ts → packages.ts} +43 -51
- package/src/resources/projects.ts +145 -200
- package/src/resources/releases.ts +48 -65
- package/src/resources/spec-revisions.ts +38 -47
- package/src/resources/specs.ts +39 -59
- package/src/resources/targets.ts +143 -193
- package/src/schemas.ts +83 -81
- package/src/search.ts +434 -0
- package/src/types.ts +538 -357
- package/dist/console-login-check.d.ts +0 -21
- package/dist/console-login-check.d.ts.map +0 -1
- package/dist/console-login-check.js +0 -107
- package/dist/console-login-contract.d.ts +0 -45
- package/dist/console-login-contract.d.ts.map +0 -1
- package/dist/console-login-contract.js +0 -40
- package/dist/resources/generate.d.ts.map +0 -1
- package/dist/resources/publications.d.ts +0 -47
- package/dist/resources/publications.d.ts.map +0 -1
- package/dist/resources/publications.js +0 -70
- package/src/console-login-check.ts +0 -88
- package/src/console-login-contract.ts +0 -65
- package/src/resources/publications.ts +0 -140
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Argument checks shared by the generated CLI and MCP server: coerce a value
|
|
3
|
+
* toward its schema where the intent is unambiguous, and report every
|
|
4
|
+
* problem, nested ones included, with the dotted path of the argument it
|
|
5
|
+
* belongs to. Generated by Typeship — https://typeship.dev
|
|
6
|
+
* No external dependencies.
|
|
7
|
+
*/
|
|
8
|
+
export interface ArgumentIssue {
|
|
9
|
+
code: "UNKNOWN_ARGUMENT" | "INVALID_ARGUMENT" | "MISSING_ARGUMENT";
|
|
10
|
+
argument: string;
|
|
11
|
+
message: string;
|
|
12
|
+
}
|
|
13
|
+
export declare const normalizeName: (name: string) => string;
|
|
14
|
+
/** The closest accepted name: same letters ignoring case/punctuation first,
|
|
15
|
+
* then a small edit distance. Undefined when nothing is close. */
|
|
16
|
+
export declare function closestName(name: string, known: string[]): string | undefined;
|
|
17
|
+
/**
|
|
18
|
+
* Coerce one value toward its schema when the intent is unambiguous: the
|
|
19
|
+
* strings agents produce for booleans and numbers, a JSON string for an
|
|
20
|
+
* object or array, a scalar for a one-element array, an enum member in the
|
|
21
|
+
* wrong case. Returns the value to send, or a message when it can't be made
|
|
22
|
+
* to fit. Untyped schemas (unions, anything) pass through. The first
|
|
23
|
+
* problem only; checkValue reports every nested one.
|
|
24
|
+
*/
|
|
25
|
+
export declare function coerceValue(value: unknown, schema: Record<string, unknown>): {
|
|
26
|
+
value: unknown;
|
|
27
|
+
} | {
|
|
28
|
+
error: string;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Check one argument value against its schema, the way prepareCall checks
|
|
32
|
+
* top-level arguments, and return the value to send. Recurses into array
|
|
33
|
+
* items and object properties: types and enums are coerced where the intent
|
|
34
|
+
* is clear, required properties must be present, strings must match their
|
|
35
|
+
* pattern, and keys an object declares closed (`additionalProperties:
|
|
36
|
+
* false`, as every GraphQL input type is) must be known. Every problem is
|
|
37
|
+
* pushed to issues with its dotted path (input.priority, items[0].name).
|
|
38
|
+
*/
|
|
39
|
+
export declare function checkValue(value: unknown, schema: Record<string, unknown>, path: string, issues: ArgumentIssue[], options?: {
|
|
40
|
+
skipPattern?: boolean;
|
|
41
|
+
depth?: number;
|
|
42
|
+
}): unknown;
|
|
43
|
+
export declare function userShapedReference(name: string): boolean;
|
|
44
|
+
/** "me" given for a user-shaped argument or property, resolved to the
|
|
45
|
+
* caller's ID through the identity tool. */
|
|
46
|
+
export declare function isMeReference(name: string, value: string): boolean;
|
|
47
|
+
//# sourceMappingURL=arguments.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arguments.d.ts","sourceRoot":"","sources":["../src/arguments.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,kBAAkB,GAAG,kBAAkB,GAAG,kBAAkB,CAAC;IACnE,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,KAAG,MAAsD,CAAC;AAgBpG;kEACkE;AAClE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAU7E;AASD;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,KAAK,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAInH;AAgFD;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,aAAa,EAAE,EACvB,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GACtD,OAAO,CAsET;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGzD;AAED;4CAC4C;AAC5C,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAElE"}
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Argument checks shared by the generated CLI and MCP server: coerce a value
|
|
3
|
+
* toward its schema where the intent is unambiguous, and report every
|
|
4
|
+
* problem, nested ones included, with the dotted path of the argument it
|
|
5
|
+
* belongs to. Generated by Typeship — https://typeship.dev
|
|
6
|
+
* No external dependencies.
|
|
7
|
+
*/
|
|
8
|
+
import { dateKindOf, relativeDate } from "./dates.js";
|
|
9
|
+
export const normalizeName = (name) => name.toLowerCase().replace(/[^a-z0-9]/g, "");
|
|
10
|
+
function editDistance(a, b) {
|
|
11
|
+
const prev = Array.from({ length: b.length + 1 }, (_, i) => i);
|
|
12
|
+
for (let i = 1; i <= a.length; i++) {
|
|
13
|
+
let diag = prev[0];
|
|
14
|
+
prev[0] = i;
|
|
15
|
+
for (let j = 1; j <= b.length; j++) {
|
|
16
|
+
const tmp = prev[j];
|
|
17
|
+
prev[j] = Math.min(prev[j] + 1, prev[j - 1] + 1, diag + (a[i - 1] === b[j - 1] ? 0 : 1));
|
|
18
|
+
diag = tmp;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return prev[b.length];
|
|
22
|
+
}
|
|
23
|
+
/** The closest accepted name: same letters ignoring case/punctuation first,
|
|
24
|
+
* then a small edit distance. Undefined when nothing is close. */
|
|
25
|
+
export function closestName(name, known) {
|
|
26
|
+
const exact = known.filter((k) => normalizeName(k) === normalizeName(name));
|
|
27
|
+
if (exact.length === 1)
|
|
28
|
+
return exact[0];
|
|
29
|
+
if (exact.length > 1)
|
|
30
|
+
return undefined;
|
|
31
|
+
let best;
|
|
32
|
+
for (const k of known) {
|
|
33
|
+
const d = editDistance(name.toLowerCase(), k.toLowerCase());
|
|
34
|
+
if (d <= Math.max(1, Math.floor(k.length / 4)) && (best === undefined || d < best.d))
|
|
35
|
+
best = { name: k, d };
|
|
36
|
+
}
|
|
37
|
+
return best?.name;
|
|
38
|
+
}
|
|
39
|
+
function schemaTypes(schema) {
|
|
40
|
+
const t = schema.type;
|
|
41
|
+
if (typeof t === "string")
|
|
42
|
+
return [t];
|
|
43
|
+
if (Array.isArray(t))
|
|
44
|
+
return t.filter((x) => typeof x === "string");
|
|
45
|
+
return [];
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Coerce one value toward its schema when the intent is unambiguous: the
|
|
49
|
+
* strings agents produce for booleans and numbers, a JSON string for an
|
|
50
|
+
* object or array, a scalar for a one-element array, an enum member in the
|
|
51
|
+
* wrong case. Returns the value to send, or a message when it can't be made
|
|
52
|
+
* to fit. Untyped schemas (unions, anything) pass through. The first
|
|
53
|
+
* problem only; checkValue reports every nested one.
|
|
54
|
+
*/
|
|
55
|
+
export function coerceValue(value, schema) {
|
|
56
|
+
const issues = [];
|
|
57
|
+
const out = checkValue(value, schema, "", issues);
|
|
58
|
+
return issues.length > 0 ? { error: issues[0].message } : { value: out };
|
|
59
|
+
}
|
|
60
|
+
/** Coerce one scalar-level value (type and enum) without looking inside it. */
|
|
61
|
+
function coerceShallow(value, schema) {
|
|
62
|
+
if (value === null || value === undefined)
|
|
63
|
+
return { value };
|
|
64
|
+
// Date-shaped arguments take relative forms (-P7D, 7 days ago, today),
|
|
65
|
+
// resolved here so the API sees an absolute value.
|
|
66
|
+
const dateKind = dateKindOf(schema.format);
|
|
67
|
+
if (dateKind && typeof value === "string") {
|
|
68
|
+
const resolved = relativeDate(value, dateKind);
|
|
69
|
+
if (resolved && "error" in resolved)
|
|
70
|
+
return { error: resolved.error };
|
|
71
|
+
if (resolved)
|
|
72
|
+
value = resolved.value;
|
|
73
|
+
}
|
|
74
|
+
const types = schemaTypes(schema);
|
|
75
|
+
const enumValues = Array.isArray(schema.enum) ? schema.enum : undefined;
|
|
76
|
+
const accepts = (t) => types.length === 0 || types.includes(t);
|
|
77
|
+
const kind = Array.isArray(value) ? "array" : typeof value;
|
|
78
|
+
let out = value;
|
|
79
|
+
if (types.length > 0) {
|
|
80
|
+
if (kind === "boolean" && !accepts("boolean")) {
|
|
81
|
+
if (accepts("string"))
|
|
82
|
+
out = String(value);
|
|
83
|
+
else
|
|
84
|
+
return { error: "expected " + types.join(" or ") + ", got boolean" };
|
|
85
|
+
}
|
|
86
|
+
else if (kind === "number" && !accepts("number") && !accepts("integer")) {
|
|
87
|
+
if (accepts("string"))
|
|
88
|
+
out = String(value);
|
|
89
|
+
else if (accepts("array"))
|
|
90
|
+
out = [value];
|
|
91
|
+
else
|
|
92
|
+
return { error: "expected " + types.join(" or ") + ", got number" };
|
|
93
|
+
}
|
|
94
|
+
else if (kind === "number" && accepts("integer") && !accepts("number") && !Number.isInteger(value)) {
|
|
95
|
+
return { error: "expected an integer, got " + String(value) };
|
|
96
|
+
}
|
|
97
|
+
else if (kind === "string" && !accepts("string")) {
|
|
98
|
+
const s = value.trim();
|
|
99
|
+
if (accepts("boolean") && /^(true|false|yes|no|1|0)$/i.test(s))
|
|
100
|
+
out = /^(true|yes|1)$/i.test(s);
|
|
101
|
+
else if ((accepts("integer") || accepts("number")) && s !== "" && !Number.isNaN(Number(s))) {
|
|
102
|
+
const n = Number(s);
|
|
103
|
+
if (accepts("integer") && !accepts("number") && !Number.isInteger(n))
|
|
104
|
+
return { error: "expected an integer, got \"" + s + "\"" };
|
|
105
|
+
out = n;
|
|
106
|
+
}
|
|
107
|
+
else if ((accepts("object") || accepts("array")) && /^[[{]/.test(s)) {
|
|
108
|
+
try {
|
|
109
|
+
const parsed = JSON.parse(s);
|
|
110
|
+
const parsedKind = Array.isArray(parsed) ? "array" : parsed === null ? "null" : typeof parsed;
|
|
111
|
+
if (!accepts(parsedKind))
|
|
112
|
+
return { error: "expected " + types.join(" or ") + ", got a JSON " + parsedKind + " in a string" };
|
|
113
|
+
out = parsed;
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
return { error: "expected " + types.join(" or ") + ", got a string that is not valid JSON" };
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
else if (accepts("array")) {
|
|
120
|
+
out = [value];
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
return { error: "expected " + types.join(" or ") + ", got string" };
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
else if (kind === "object" && !accepts("object")) {
|
|
127
|
+
if (accepts("array"))
|
|
128
|
+
out = [value];
|
|
129
|
+
else
|
|
130
|
+
return { error: "expected " + types.join(" or ") + ", got object" };
|
|
131
|
+
}
|
|
132
|
+
else if (kind === "array" && !accepts("array")) {
|
|
133
|
+
return { error: "expected " + types.join(" or ") + ", got array" };
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
if (enumValues && typeof out === "string" && !enumValues.includes(out)) {
|
|
137
|
+
const match = enumValues.filter((e) => typeof e === "string" && e.toLowerCase() === out.toLowerCase());
|
|
138
|
+
if (match.length === 1)
|
|
139
|
+
out = match[0];
|
|
140
|
+
else
|
|
141
|
+
return { error: "must be one of " + enumValues.map((e) => JSON.stringify(e)).join(", ") + ", got " + JSON.stringify(out) };
|
|
142
|
+
}
|
|
143
|
+
return { value: out };
|
|
144
|
+
}
|
|
145
|
+
/** A nullable single-variant union (`anyOf: [X, {type: "null"}]`, the shape
|
|
146
|
+
* nullable GraphQL enums and objects take) validates as X; any other union
|
|
147
|
+
* passes through unchecked. */
|
|
148
|
+
function nullableVariant(schema) {
|
|
149
|
+
const variants = schema.anyOf ?? schema.oneOf;
|
|
150
|
+
if (!Array.isArray(variants) || variants.length !== 2 || schema.type !== undefined)
|
|
151
|
+
return undefined;
|
|
152
|
+
const isNull = (v) => Boolean(v) && typeof v === "object" && v.type === "null";
|
|
153
|
+
const others = variants.filter((v) => !isNull(v));
|
|
154
|
+
if (others.length !== 1 || !others[0] || typeof others[0] !== "object")
|
|
155
|
+
return undefined;
|
|
156
|
+
return others[0];
|
|
157
|
+
}
|
|
158
|
+
const MAX_CHECK_DEPTH = 16;
|
|
159
|
+
/**
|
|
160
|
+
* Check one argument value against its schema, the way prepareCall checks
|
|
161
|
+
* top-level arguments, and return the value to send. Recurses into array
|
|
162
|
+
* items and object properties: types and enums are coerced where the intent
|
|
163
|
+
* is clear, required properties must be present, strings must match their
|
|
164
|
+
* pattern, and keys an object declares closed (`additionalProperties:
|
|
165
|
+
* false`, as every GraphQL input type is) must be known. Every problem is
|
|
166
|
+
* pushed to issues with its dotted path (input.priority, items[0].name).
|
|
167
|
+
*/
|
|
168
|
+
export function checkValue(value, schema, path, issues, options = {}) {
|
|
169
|
+
const depth = options.depth ?? 0;
|
|
170
|
+
const at = (suffix) => path === "" ? suffix : path + ": " + suffix;
|
|
171
|
+
if (value === null || value === undefined)
|
|
172
|
+
return value;
|
|
173
|
+
const variant = nullableVariant(schema);
|
|
174
|
+
if (variant)
|
|
175
|
+
return checkValue(value, variant, path, issues, options);
|
|
176
|
+
const shallow = coerceShallow(value, schema);
|
|
177
|
+
if ("error" in shallow) {
|
|
178
|
+
issues.push({ code: "INVALID_ARGUMENT", argument: path, message: at(shallow.error) });
|
|
179
|
+
return value;
|
|
180
|
+
}
|
|
181
|
+
let out = shallow.value;
|
|
182
|
+
if (depth >= MAX_CHECK_DEPTH)
|
|
183
|
+
return out;
|
|
184
|
+
if (typeof out === "string" && typeof schema.pattern === "string" && !options.skipPattern) {
|
|
185
|
+
let pattern;
|
|
186
|
+
try {
|
|
187
|
+
pattern = new RegExp(schema.pattern, "u");
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
try {
|
|
191
|
+
pattern = new RegExp(schema.pattern);
|
|
192
|
+
}
|
|
193
|
+
catch { /* not an ECMAScript pattern: never false-alarm */ }
|
|
194
|
+
}
|
|
195
|
+
if (pattern && !pattern.test(out)) {
|
|
196
|
+
issues.push({ code: "INVALID_ARGUMENT", argument: path, message: at("must match the pattern " + schema.pattern + ", got " + JSON.stringify(out)) });
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
// Array items: check each against the items schema when it has one.
|
|
200
|
+
if (Array.isArray(out) && schema.items && typeof schema.items === "object" && !Array.isArray(schema.items)) {
|
|
201
|
+
const itemSchema = schema.items;
|
|
202
|
+
out = out.map((item, i) => checkValue(item, itemSchema, path + "[" + i + "]", issues, { depth: depth + 1 }));
|
|
203
|
+
}
|
|
204
|
+
// Object properties: the same checks one level down, keyed by dotted path.
|
|
205
|
+
if (out && typeof out === "object" && !Array.isArray(out) && schema.properties && typeof schema.properties === "object") {
|
|
206
|
+
const properties = schema.properties;
|
|
207
|
+
const known = Object.keys(properties);
|
|
208
|
+
const closed = schema.additionalProperties === false;
|
|
209
|
+
const input = out;
|
|
210
|
+
const next = {};
|
|
211
|
+
const child = (key) => path === "" ? key : path + "." + key;
|
|
212
|
+
for (const [key, entry] of Object.entries(input)) {
|
|
213
|
+
if (entry === undefined)
|
|
214
|
+
continue;
|
|
215
|
+
let name = key;
|
|
216
|
+
if (properties[key] === undefined && closed) {
|
|
217
|
+
const close = closestName(key, known);
|
|
218
|
+
if (close !== undefined && normalizeName(close) === normalizeName(key) && input[close] === undefined) {
|
|
219
|
+
name = close;
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
const accepted = known.length <= 20 ? " Accepted: " + known.join(", ") + "." : "";
|
|
223
|
+
issues.push({
|
|
224
|
+
code: "UNKNOWN_ARGUMENT",
|
|
225
|
+
argument: child(key),
|
|
226
|
+
message: "Unknown property \"" + child(key) + "\"" + (close !== undefined ? "; did you mean \"" + child(close) + "\"?" : ".") + accepted,
|
|
227
|
+
});
|
|
228
|
+
continue;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
const propSchema = properties[name];
|
|
232
|
+
next[name] = propSchema && typeof propSchema === "object"
|
|
233
|
+
? checkValue(entry, propSchema, child(name), issues, { depth: depth + 1, skipPattern: typeof entry === "string" && isMeReference(name, entry) })
|
|
234
|
+
: entry;
|
|
235
|
+
}
|
|
236
|
+
for (const name of Array.isArray(schema.required) ? schema.required : []) {
|
|
237
|
+
if (next[name] === undefined && properties[name] !== undefined) {
|
|
238
|
+
const description = properties[name].description;
|
|
239
|
+
issues.push({ code: "MISSING_ARGUMENT", argument: child(name), message: "Missing required property \"" + child(name) + "\"" + (description ? ": " + String(description).split("\n")[0] : ".") });
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
out = next;
|
|
243
|
+
}
|
|
244
|
+
return out;
|
|
245
|
+
}
|
|
246
|
+
export function userShapedReference(name) {
|
|
247
|
+
const normalized = name.toLowerCase().replace(/[^a-z0-9]/g, "").replace(/ids?$/, "");
|
|
248
|
+
return ["user", "assignee", "owner", "member", "actor", "creator", "account", "profile", "subscriber"].includes(normalized);
|
|
249
|
+
}
|
|
250
|
+
/** "me" given for a user-shaped argument or property, resolved to the
|
|
251
|
+
* caller's ID through the identity tool. */
|
|
252
|
+
export function isMeReference(name, value) {
|
|
253
|
+
return value.trim().toLowerCase() === "me" && userShapedReference(name);
|
|
254
|
+
}
|
package/dist/cli-agent.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Stable codes an agent can branch on. The message is for people; the code
|
|
3
3
|
* is the contract. Additive only.
|
|
4
4
|
*/
|
|
5
|
-
export type IssueCode = "NO_AUTH" | "AUTH_INVALID" | "PLAN_LIMIT" | "NOT_FOUND" | "INVALID_REQUEST" | "SPEC_INVALID" | "RATE_LIMITED" | "SERVER_ERROR" | "NETWORK_ERROR" | "VALIDATION_FAILED" | "TTY_REQUIRED" | "CONFIRMATION_REQUIRED" | "INVALID_USAGE" | "UNKNOWN_COMMAND" | "UNKNOWN_FLAG" | "MISSING_ARGUMENT" | "CALL_FAILED";
|
|
5
|
+
export type IssueCode = "NO_AUTH" | "AUTH_INVALID" | "INSUFFICIENT_SCOPE" | "PLAN_LIMIT" | "NOT_FOUND" | "INVALID_REQUEST" | "SPEC_INVALID" | "RATE_LIMITED" | "SERVER_ERROR" | "NETWORK_ERROR" | "VALIDATION_FAILED" | "TTY_REQUIRED" | "LOGIN_FAILED" | "LOGIN_REQUIRED" | "CREDENTIAL_STORE_UNAVAILABLE" | "CONFIRMATION_REQUIRED" | "INVALID_USAGE" | "UNKNOWN_COMMAND" | "UNKNOWN_FLAG" | "MISSING_ARGUMENT" | "FIELDS_UNMATCHED" | "CALL_FAILED";
|
|
6
6
|
export interface Issue {
|
|
7
7
|
code: IssueCode;
|
|
8
8
|
message: string;
|
|
@@ -32,9 +32,25 @@ export declare function exitCodeFor(code: IssueCode): 1 | 2;
|
|
|
32
32
|
/** Interpret an SDK error result: HTTP status, body, transport, validation. */
|
|
33
33
|
export declare function classifyApiError(error: unknown, context: {
|
|
34
34
|
bin: string;
|
|
35
|
+
envPrefix: string;
|
|
35
36
|
hadCredential: boolean;
|
|
36
37
|
docsUrl: string | null;
|
|
38
|
+
requiredScopes?: string[];
|
|
39
|
+
canLogin?: boolean;
|
|
37
40
|
}): EnvelopeInput;
|
|
41
|
+
/** Login, saved-session and credential-store failures, recognised by error
|
|
42
|
+
* name (so this module needs no login runtime) on the error or its cause.
|
|
43
|
+
* Undefined when the error is none of them. */
|
|
44
|
+
export declare function classifyAuthFailure(error: unknown, context: {
|
|
45
|
+
bin: string;
|
|
46
|
+
envVars: string[];
|
|
47
|
+
storeVariable: string;
|
|
48
|
+
}): EnvelopeInput | undefined;
|
|
49
|
+
/** "Wait until <time>" when the API said when the limit resets. */
|
|
50
|
+
export declare function rateLimitNextStep(retryAt: Date | undefined, then: string): string;
|
|
51
|
+
/** Error codes APIs report inside a 2xx body (Slack's `error`), mapped to
|
|
52
|
+
* the stable codes when their meaning is unambiguous. */
|
|
53
|
+
export declare function payloadFailureCode(code: unknown): "AUTH_INVALID" | "RATE_LIMITED" | undefined;
|
|
38
54
|
export interface AgentModeInput {
|
|
39
55
|
flagMode: string | boolean | undefined;
|
|
40
56
|
envMode: string | undefined;
|
|
@@ -71,6 +87,13 @@ export interface McpClient {
|
|
|
71
87
|
write: (existing: string, name: string, entry: McpEntry) => string;
|
|
72
88
|
/** True when the client cannot speak the current MCP protocol; skipped by --all. */
|
|
73
89
|
incompatible?: string;
|
|
90
|
+
/**
|
|
91
|
+
* How the client expands an environment variable inside a header value.
|
|
92
|
+
* Entries carry `${VAR}`; each client gets its own spelling, and a client
|
|
93
|
+
* that expands nothing gets no Authorization header rather than a literal
|
|
94
|
+
* one it would send as-is. Defaults to "dollar".
|
|
95
|
+
*/
|
|
96
|
+
headerEnv?: "dollar" | "env-colon" | "brace-env" | "none";
|
|
74
97
|
}
|
|
75
98
|
export declare const MCP_CLIENTS: McpClient[];
|
|
76
99
|
export declare function findMcpClient(id: string): McpClient | undefined;
|
|
@@ -80,7 +103,7 @@ export interface McpWriteResult {
|
|
|
80
103
|
written: boolean;
|
|
81
104
|
note?: string;
|
|
82
105
|
}
|
|
83
|
-
/** Merge the entry into one client's config file. Never writes a literal secret: callers pass
|
|
106
|
+
/** Merge the entry into one client's config file. Never writes a literal secret: callers pass `${VAR}` references, which each client receives in its own syntax. */
|
|
84
107
|
export declare function writeMcpConfig(client: McpClient, cwd: string, name: string, entry: McpEntry): McpWriteResult;
|
|
85
108
|
/** Does a client's config already mention this server? For doctor. */
|
|
86
109
|
export declare function mcpConfigured(client: McpClient, cwd: string, name: string): boolean;
|
|
@@ -128,15 +151,13 @@ export interface AgentContext {
|
|
|
128
151
|
version: string;
|
|
129
152
|
envPrefix: string;
|
|
130
153
|
authEnvVars: string[];
|
|
154
|
+
/** The API Spec is silent on authentication: say so instead of "no auth". */
|
|
155
|
+
authNotDeclared?: boolean;
|
|
131
156
|
docsUrl: string | null;
|
|
132
157
|
docsIndexUrl?: string | null;
|
|
133
158
|
generatedOperationCount?: number;
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
tool: string;
|
|
137
|
-
method: string;
|
|
138
|
-
path: string;
|
|
139
|
-
}[];
|
|
159
|
+
/** Operations in the API left out of a capped build; api.json lists them. */
|
|
160
|
+
omittedOperationCount?: number;
|
|
140
161
|
/** The API's hosted MCP endpoint, when it has one. */
|
|
141
162
|
mcpUrl: string | null;
|
|
142
163
|
/** Skills repository (owner/name) an agent can install with npx skills add. */
|
|
@@ -209,4 +230,6 @@ export declare function summarizeDoctor(checks: DoctorCheck[]): {
|
|
|
209
230
|
checks: DoctorCheck[];
|
|
210
231
|
next_steps: string[];
|
|
211
232
|
};
|
|
233
|
+
/** Every OAuth scope an operation's security requirements name, in order. */
|
|
234
|
+
export declare function requiredScopes(security: Record<string, string[]>[] | undefined): string[];
|
|
212
235
|
//# sourceMappingURL=cli-agent.d.ts.map
|
package/dist/cli-agent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-agent.d.ts","sourceRoot":"","sources":["../src/cli-agent.ts"],"names":[],"mappings":"AAgBA;;;GAGG;AACH,MAAM,MAAM,SAAS,GACjB,SAAS,GACT,cAAc,GACd,YAAY,GACZ,WAAW,GACX,iBAAiB,GACjB,cAAc,GACd,cAAc,GACd,cAAc,GACd,eAAe,GACf,mBAAmB,GACnB,cAAc,GACd,uBAAuB,GACvB,eAAe,GACf,iBAAiB,GACjB,cAAc,GACd,kBAAkB,GAClB,aAAa,CAAC;AAElB,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,qGAAqG;IACrG,MAAM,EAAE,OAAO,GAAG,iBAAiB,CAAC;IACpC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gFAAgF;IAChF,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,mFAAmF;IACnF,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC5B,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,QAAQ,CAQvD;AAED,4EAA4E;AAC5E,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"cli-agent.d.ts","sourceRoot":"","sources":["../src/cli-agent.ts"],"names":[],"mappings":"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"}
|