@cyanheads/mcp-ts-core 0.13.5 → 0.13.7
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 +6 -6
- package/CLAUDE.md +6 -6
- package/README.md +55 -52
- package/biome.json +2 -2
- package/changelog/0.13.x/0.13.6.md +49 -0
- package/changelog/0.13.x/0.13.7.md +77 -0
- package/config/tsconfig.base.json +2 -2
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +42 -11
- package/dist/config/index.js.map +1 -1
- package/dist/core/app.d.ts.map +1 -1
- package/dist/core/app.js +21 -4
- package/dist/core/app.js.map +1 -1
- package/dist/core/context.d.ts +9 -1
- package/dist/core/context.d.ts.map +1 -1
- package/dist/core/context.js +4 -13
- package/dist/core/context.js.map +1 -1
- package/dist/core/worker.d.ts.map +1 -1
- package/dist/core/worker.js +7 -1
- package/dist/core/worker.js.map +1 -1
- package/dist/linter/rules/enrichment-rules.d.ts +5 -4
- package/dist/linter/rules/enrichment-rules.d.ts.map +1 -1
- package/dist/linter/rules/enrichment-rules.js +99 -22
- package/dist/linter/rules/enrichment-rules.js.map +1 -1
- package/dist/linter/rules/error-contract-rules.d.ts +46 -10
- package/dist/linter/rules/error-contract-rules.d.ts.map +1 -1
- package/dist/linter/rules/error-contract-rules.js +180 -27
- package/dist/linter/rules/error-contract-rules.js.map +1 -1
- package/dist/linter/rules/format-parity-rules.js +1 -1
- package/dist/linter/rules/format-parity-rules.js.map +1 -1
- package/dist/linter/rules/index.d.ts +1 -1
- package/dist/linter/rules/index.d.ts.map +1 -1
- package/dist/linter/rules/index.js +1 -1
- package/dist/linter/rules/index.js.map +1 -1
- package/dist/linter/rules/resource-rules.d.ts.map +1 -1
- package/dist/linter/rules/resource-rules.js +2 -1
- package/dist/linter/rules/resource-rules.js.map +1 -1
- package/dist/linter/rules/tool-rules.d.ts.map +1 -1
- package/dist/linter/rules/tool-rules.js +2 -1
- package/dist/linter/rules/tool-rules.js.map +1 -1
- package/dist/mcp-server/handlerContext.d.ts +6 -0
- package/dist/mcp-server/handlerContext.d.ts.map +1 -1
- package/dist/mcp-server/handlerContext.js +3 -0
- package/dist/mcp-server/handlerContext.js.map +1 -1
- package/dist/mcp-server/prompts/prompt-registration.d.ts.map +1 -1
- package/dist/mcp-server/prompts/prompt-registration.js +6 -3
- package/dist/mcp-server/prompts/prompt-registration.js.map +1 -1
- package/dist/mcp-server/tools/utils/toolHandlerFactory.d.ts.map +1 -1
- package/dist/mcp-server/tools/utils/toolHandlerFactory.js +5 -1
- package/dist/mcp-server/tools/utils/toolHandlerFactory.js.map +1 -1
- package/dist/mcp-server/transports/http/httpErrorHandler.d.ts.map +1 -1
- package/dist/mcp-server/transports/http/httpErrorHandler.js +15 -5
- package/dist/mcp-server/transports/http/httpErrorHandler.js.map +1 -1
- package/dist/storage/core/IStorageProvider.d.ts +5 -2
- package/dist/storage/core/IStorageProvider.d.ts.map +1 -1
- package/dist/storage/core/providerHelpers.d.ts +29 -8
- package/dist/storage/core/providerHelpers.d.ts.map +1 -1
- package/dist/storage/core/providerHelpers.js +49 -11
- package/dist/storage/core/providerHelpers.js.map +1 -1
- package/dist/storage/providers/cloudflare/d1Provider.js +4 -4
- package/dist/storage/providers/cloudflare/d1Provider.js.map +1 -1
- package/dist/storage/providers/cloudflare/kvProvider.d.ts +2 -0
- package/dist/storage/providers/cloudflare/kvProvider.d.ts.map +1 -1
- package/dist/storage/providers/cloudflare/kvProvider.js +11 -9
- package/dist/storage/providers/cloudflare/kvProvider.js.map +1 -1
- package/dist/storage/providers/cloudflare/r2Provider.d.ts.map +1 -1
- package/dist/storage/providers/cloudflare/r2Provider.js +8 -5
- package/dist/storage/providers/cloudflare/r2Provider.js.map +1 -1
- package/dist/storage/providers/fileSystem/fileSystemProvider.d.ts +1 -0
- package/dist/storage/providers/fileSystem/fileSystemProvider.d.ts.map +1 -1
- package/dist/storage/providers/fileSystem/fileSystemProvider.js +10 -8
- package/dist/storage/providers/fileSystem/fileSystemProvider.js.map +1 -1
- package/dist/storage/providers/inMemory/inMemoryProvider.d.ts +5 -0
- package/dist/storage/providers/inMemory/inMemoryProvider.d.ts.map +1 -1
- package/dist/storage/providers/inMemory/inMemoryProvider.js +9 -5
- package/dist/storage/providers/inMemory/inMemoryProvider.js.map +1 -1
- package/dist/storage/providers/supabase/supabaseProvider.d.ts.map +1 -1
- package/dist/storage/providers/supabase/supabaseProvider.js +5 -1
- package/dist/storage/providers/supabase/supabaseProvider.js.map +1 -1
- package/dist/testing/index.d.ts +6 -4
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +6 -4
- package/dist/testing/index.js.map +1 -1
- package/dist/types-global/errors.d.ts +18 -0
- package/dist/types-global/errors.d.ts.map +1 -1
- package/dist/utils/formatting/partialResult.d.ts +28 -2
- package/dist/utils/formatting/partialResult.d.ts.map +1 -1
- package/dist/utils/formatting/partialResult.js +46 -2
- package/dist/utils/formatting/partialResult.js.map +1 -1
- package/dist/utils/internal/error-handler/errorHandler.d.ts +8 -2
- package/dist/utils/internal/error-handler/errorHandler.d.ts.map +1 -1
- package/dist/utils/internal/error-handler/errorHandler.js +27 -16
- package/dist/utils/internal/error-handler/errorHandler.js.map +1 -1
- package/dist/utils/internal/error-handler/mappings.d.ts +1 -0
- package/dist/utils/internal/error-handler/mappings.d.ts.map +1 -1
- package/dist/utils/internal/error-handler/mappings.js +1 -0
- package/dist/utils/internal/error-handler/mappings.js.map +1 -1
- package/dist/utils/internal/performance.d.ts +5 -1
- package/dist/utils/internal/performance.d.ts.map +1 -1
- package/dist/utils/internal/performance.js +13 -8
- package/dist/utils/internal/performance.js.map +1 -1
- package/dist/utils/security/sanitization.d.ts +15 -15
- package/dist/utils/security/sanitization.d.ts.map +1 -1
- package/dist/utils/security/sanitization.js +108 -88
- package/dist/utils/security/sanitization.js.map +1 -1
- package/dist/utils/telemetry/instrumentation.d.ts +6 -2
- package/dist/utils/telemetry/instrumentation.d.ts.map +1 -1
- package/dist/utils/telemetry/instrumentation.js +23 -8
- package/dist/utils/telemetry/instrumentation.js.map +1 -1
- package/framework-skills/add-app-tool/SKILL.md +12 -18
- package/framework-skills/add-prompt/SKILL.md +3 -1
- package/framework-skills/add-provider/SKILL.md +14 -4
- package/framework-skills/add-resource/SKILL.md +3 -3
- package/framework-skills/add-service/SKILL.md +5 -2
- package/framework-skills/add-tool/SKILL.md +25 -8
- package/framework-skills/api-canvas/SKILL.md +2 -2
- package/framework-skills/api-config/SKILL.md +4 -3
- package/framework-skills/api-context/SKILL.md +8 -5
- package/framework-skills/api-errors/SKILL.md +25 -5
- package/framework-skills/api-linter/SKILL.md +95 -22
- package/framework-skills/api-telemetry/SKILL.md +9 -4
- package/framework-skills/api-testing/SKILL.md +21 -13
- package/framework-skills/api-utils/SKILL.md +3 -3
- package/framework-skills/api-utils/references/security.md +7 -6
- package/framework-skills/code-simplifier/SKILL.md +31 -18
- package/framework-skills/design-mcp-server/SKILL.md +62 -35
- package/framework-skills/git-wrapup/SKILL.md +16 -10
- package/framework-skills/maintenance/SKILL.md +2 -2
- package/framework-skills/orchestrations/SKILL.md +1 -1
- package/framework-skills/orchestrations/workflows/greenfield-build.md +15 -8
- package/framework-skills/polish-docs-meta/SKILL.md +2 -2
- package/framework-skills/polish-docs-meta/references/package-meta.md +1 -1
- package/framework-skills/polish-docs-meta/references/readme.md +3 -3
- package/framework-skills/release-and-publish/SKILL.md +6 -4
- package/framework-skills/release-pr-review/SKILL.md +18 -1
- package/framework-skills/report-issue-framework/SKILL.md +2 -2
- package/framework-skills/report-issue-local/SKILL.md +3 -3
- package/framework-skills/security-pass/SKILL.md +11 -3
- package/framework-skills/tool-defs-analysis/SKILL.md +3 -3
- package/package.json +16 -37
- package/scripts/lint-mcp.ts +43 -4
- package/templates/.env.example +3 -1
- package/templates/.github/ISSUE_TEMPLATE/feature_request.yml +1 -1
- package/templates/AGENTS.md +3 -3
- package/templates/CLAUDE.md +3 -3
- package/templates/Dockerfile +4 -4
- package/templates/devcheck.config.json +1 -0
- package/templates/package.json +4 -4
- package/templates/src/mcp-server/prompts/definitions/echo.prompt.ts +2 -4
- package/templates/src/mcp-server/resources/definitions/echo-app-ui.app-resource.ts +51 -14
- package/templates/src/mcp-server/resources/definitions/echo.resource.ts +1 -1
- package/templates/src/mcp-server/tools/definitions/echo-app.app-tool.ts +2 -3
- package/templates/src/mcp-server/tools/definitions/echo.tool.ts +8 -2
- package/dist/utils/telemetry/index.d.ts +0 -12
- package/dist/utils/telemetry/index.d.ts.map +0 -1
- package/dist/utils/telemetry/index.js +0 -12
- package/dist/utils/telemetry/index.js.map +0 -1
|
@@ -19,13 +19,60 @@ import { getCoreDefType, objectShape, objectShapeKeys, unwrapWrappers } from './
|
|
|
19
19
|
/** Cap-like names that carry no `max`/`limit` morpheme and must be listed outright. */
|
|
20
20
|
const CAP_FIELD_EXACT = new Set(['limit', 'per_page', 'page_size']);
|
|
21
21
|
/**
|
|
22
|
-
*
|
|
22
|
+
* Nouns that name a generic result container whatever the array is called, so a
|
|
23
|
+
* `max_<noun>` built on one of them caps the list even when nothing in `output`
|
|
24
|
+
* carries the same name — `maxRecords` against an `articles` array. Stored
|
|
25
|
+
* singular; the counted noun is singularized before the lookup, so the plural
|
|
26
|
+
* spellings (`results`, `records`, `items`, `rows`, `hits`, `entries`,
|
|
27
|
+
* `matches`, `docs`) resolve here too.
|
|
28
|
+
*/
|
|
29
|
+
const RESULT_CONTAINER_NOUNS = new Set([
|
|
30
|
+
'count',
|
|
31
|
+
'doc',
|
|
32
|
+
'entry',
|
|
33
|
+
'hit',
|
|
34
|
+
'item',
|
|
35
|
+
'match',
|
|
36
|
+
'page',
|
|
37
|
+
'record',
|
|
38
|
+
'result',
|
|
39
|
+
'row',
|
|
40
|
+
]);
|
|
41
|
+
/** camelCase → snake_case, lowercased, so `maxRecords` and `max_records` are one case. */
|
|
42
|
+
function snakeCase(key) {
|
|
43
|
+
return key.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toLowerCase();
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Singularizes on a bounded suffix set — `articles` → `article`, `studies` →
|
|
47
|
+
* `study`, `matches` → `match`. Not a general English pluralizer: it only has to
|
|
48
|
+
* make an input's counted noun and an output array's name meet in the middle.
|
|
49
|
+
*/
|
|
50
|
+
function singularize(noun) {
|
|
51
|
+
if (noun.endsWith('ies'))
|
|
52
|
+
return `${noun.slice(0, -3)}y`;
|
|
53
|
+
if (/(?:s|x|ch|sh)es$/.test(noun))
|
|
54
|
+
return noun.slice(0, -2);
|
|
55
|
+
if (noun.endsWith('s') && !noun.endsWith('ss'))
|
|
56
|
+
return noun.slice(0, -1);
|
|
57
|
+
return noun;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* The noun a `max_*` field counts: the name minus the `max_` prefix, minus a
|
|
61
|
+
* trailing `_count` (`max_result_count` → `result`), reduced to its last
|
|
62
|
+
* underscore segment and singularized.
|
|
63
|
+
*/
|
|
64
|
+
function countedNoun(key) {
|
|
65
|
+
const stem = snakeCase(key)
|
|
66
|
+
.replace(/^max_/, '')
|
|
67
|
+
.replace(/_count$/, '');
|
|
68
|
+
return singularize(stem.split('_').pop() ?? stem);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* True for a depth-0 input field name that is cap-*shaped*.
|
|
23
72
|
*
|
|
24
73
|
* Matched by shape, not by an enumeration: an allowlist turns every new cap noun
|
|
25
74
|
* (`maxRecords`, `maxRows`, `resultLimit`) into a silent gap where the rule never
|
|
26
|
-
* runs at all, which is the same defect class the rule exists to catch.
|
|
27
|
-
* naming conventions normalize to the same snake form first, so `maxRecords` and
|
|
28
|
-
* `max_records` are one case.
|
|
75
|
+
* runs at all, which is the same defect class the rule exists to catch.
|
|
29
76
|
*
|
|
30
77
|
* - `limit`, and any `<noun>_limit` / `<noun>Limit`
|
|
31
78
|
* - any `max_<noun>` / `max<Noun>`
|
|
@@ -34,17 +81,36 @@ const CAP_FIELD_EXACT = new Set(['limit', 'per_page', 'page_size']);
|
|
|
34
81
|
* Deliberately NOT matched: bare `count`, `size`, `n`, `rows`, `records`, and
|
|
35
82
|
* words that merely start with the letters (`maximum`).
|
|
36
83
|
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
* says anything, and `truncationAllowlist` exempts a tool that trips it anyway.
|
|
84
|
+
* Shape alone cannot separate a cap on *how many* from an upper bound on a
|
|
85
|
+
* *value* or a budget on work done, so the `max_` arm is narrowed further by
|
|
86
|
+
* `capsTheList`.
|
|
41
87
|
*/
|
|
42
88
|
function isCapFieldName(key) {
|
|
43
|
-
const normalized = key
|
|
89
|
+
const normalized = snakeCase(key);
|
|
44
90
|
return (CAP_FIELD_EXACT.has(normalized) ||
|
|
45
91
|
normalized.startsWith('max_') ||
|
|
46
92
|
normalized.endsWith('_limit'));
|
|
47
93
|
}
|
|
94
|
+
/**
|
|
95
|
+
* True when a cap-shaped input field plausibly caps the returned list.
|
|
96
|
+
*
|
|
97
|
+
* `limit` / `<noun>_limit` / the page-size idioms say what they bound in the
|
|
98
|
+
* name itself and always qualify. `max_<noun>` does not: the same spelling
|
|
99
|
+
* carries value bounds (`max_depth_km`, `maxLat`, `max_date`) and budgets on
|
|
100
|
+
* secondary work (`max_court_lookups`, `maxCharacters`), none of which slice the
|
|
101
|
+
* array. So the counted noun has to name something the tool returns — a depth-0
|
|
102
|
+
* array in `output`, or a generic result container.
|
|
103
|
+
*
|
|
104
|
+
* Accepted false negative: a domain cap naming neither, `max_studies` against a
|
|
105
|
+
* `documents` array, goes silent. Nothing in the declaration separates it from a
|
|
106
|
+
* value bound, and `truncationAllowlist` only suppresses — it cannot re-enable.
|
|
107
|
+
*/
|
|
108
|
+
function capsTheList(key, arrayNouns) {
|
|
109
|
+
if (!snakeCase(key).startsWith('max_'))
|
|
110
|
+
return true;
|
|
111
|
+
const noun = countedNoun(key);
|
|
112
|
+
return RESULT_CONTAINER_NOUNS.has(noun) || arrayNouns.has(noun);
|
|
113
|
+
}
|
|
48
114
|
/**
|
|
49
115
|
* Output field names that almost always indicate agent-facing context rather
|
|
50
116
|
* than domain payload. Kept deliberately tiny to avoid false positives —
|
|
@@ -228,10 +294,11 @@ export function lintEnrichmentContract(def, definitionType, definitionName) {
|
|
|
228
294
|
}
|
|
229
295
|
/**
|
|
230
296
|
* Warns when a tool takes a cap-like input field (`limit`, `per_page`,
|
|
231
|
-
* `maxRecords`, … — see `isCapFieldName`)
|
|
232
|
-
*
|
|
233
|
-
* `truncated` key in its declared `enrichment` shape, nor
|
|
234
|
-
* nor `truncated` or `totalCount` as top-level
|
|
297
|
+
* `maxRecords`, … — see `isCapFieldName`) that plausibly caps the returned list
|
|
298
|
+
* (see `capsTheList`) and returns an array output, but declares no truncation
|
|
299
|
+
* disclosure — neither a `truncated` key in its declared `enrichment` shape, nor
|
|
300
|
+
* `totalCount` in enrichment, nor `truncated` or `totalCount` as top-level
|
|
301
|
+
* `output` keys.
|
|
235
302
|
*
|
|
236
303
|
* The established `enrich.total()` convention (`totalCount`) and bespoke output fields
|
|
237
304
|
* count as honest disclosure — the rule fires only on a genuinely silent cap.
|
|
@@ -251,12 +318,16 @@ export function lintCappedListTruncation(def, truncationOptions) {
|
|
|
251
318
|
// per variant, so a cap in any branch counts — the rule asks whether the tool
|
|
252
319
|
// can be capped at all, not whether every branch caps.
|
|
253
320
|
const inputKeys = inputVariants(def.input).flatMap((variant) => objectShapeKeys(variant));
|
|
254
|
-
const
|
|
255
|
-
if (
|
|
321
|
+
const capShapedKeys = inputKeys.filter(isCapFieldName);
|
|
322
|
+
if (capShapedKeys.length === 0)
|
|
256
323
|
return [];
|
|
257
|
-
// Check output for at least one array-typed field
|
|
258
|
-
|
|
259
|
-
|
|
324
|
+
// Check output for at least one array-typed field. The array names are also
|
|
325
|
+
// what a `max_<noun>` cap has to correlate with to count as a list cap.
|
|
326
|
+
const arrayNouns = topLevelArrayNouns(def.output);
|
|
327
|
+
if (arrayNouns.size === 0)
|
|
328
|
+
return [];
|
|
329
|
+
const capKeys = capShapedKeys.filter((key) => capsTheList(key, arrayNouns));
|
|
330
|
+
if (capKeys.length === 0)
|
|
260
331
|
return [];
|
|
261
332
|
// Check for truncation disclosure:
|
|
262
333
|
// 1. Declared enrichment has `truncated` or `totalCount`
|
|
@@ -279,12 +350,18 @@ export function lintCappedListTruncation(def, truncationOptions) {
|
|
|
279
350
|
},
|
|
280
351
|
];
|
|
281
352
|
}
|
|
282
|
-
/**
|
|
283
|
-
|
|
353
|
+
/**
|
|
354
|
+
* The singularized names of every depth-0 field whose core Zod type is `array`.
|
|
355
|
+
* Empty means the tool returns no list at all, which is the rule's array
|
|
356
|
+
* precondition; non-empty is also what a `max_<noun>` cap correlates against.
|
|
357
|
+
*/
|
|
358
|
+
function topLevelArrayNouns(schema) {
|
|
284
359
|
const shape = objectShape(schema);
|
|
285
360
|
if (!shape)
|
|
286
|
-
return
|
|
287
|
-
return Object.
|
|
361
|
+
return new Set();
|
|
362
|
+
return new Set(Object.entries(shape)
|
|
363
|
+
.filter(([, field]) => getCoreDefType(unwrapWrappers(field)) === 'array')
|
|
364
|
+
.map(([key]) => singularize(snakeCase(key).split('_').pop() ?? key)));
|
|
288
365
|
}
|
|
289
366
|
/**
|
|
290
367
|
* True when truncation is already disclosed — enrichment block has `truncated` or
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enrichment-rules.js","sourceRoot":"","sources":["../../../src/linter/rules/enrichment-rules.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAExE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEjG,uFAAuF;AACvF,MAAM,eAAe,GAAwB,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;AAEzF
|
|
1
|
+
{"version":3,"file":"enrichment-rules.js","sourceRoot":"","sources":["../../../src/linter/rules/enrichment-rules.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAExE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEjG,uFAAuF;AACvF,MAAM,eAAe,GAAwB,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;AAEzF;;;;;;;GAOG;AACH,MAAM,sBAAsB,GAAwB,IAAI,GAAG,CAAC;IAC1D,OAAO;IACP,KAAK;IACL,OAAO;IACP,KAAK;IACL,MAAM;IACN,OAAO;IACP,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,KAAK;CACN,CAAC,CAAC;AAEH,0FAA0F;AAC1F,SAAS,SAAS,CAAC,GAAW;IAC5B,OAAO,GAAG,CAAC,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;AAClE,CAAC;AAED;;;;GAIG;AACH,SAAS,WAAW,CAAC,IAAY;IAC/B,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IACzD,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5D,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACzE,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,SAAS,WAAW,CAAC,GAAW;IAC9B,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC;SACxB,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;SACpB,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAC1B,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,CAAC;AACpD,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,SAAS,cAAc,CAAC,GAAW;IACjC,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAClC,OAAO,CACL,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC;QAC/B,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC;QAC7B,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAC9B,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAS,WAAW,CAAC,GAAW,EAAE,UAA+B;IAC/D,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IACpD,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9B,OAAO,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAClE,CAAC;AAED;;;;;GAKG;AACH,MAAM,gBAAgB,GAAwB,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,gBAAgB,EAAE,WAAW,CAAC,CAAC,CAAC;AAEjG,gFAAgF;AAChF,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,CAAC;AACjE,CAAC;AAED;;;;GAIG;AACH,MAAM,qBAAqB,GAAwB,IAAI,GAAG,CAAC;IACzD,QAAQ;IACR,OAAO;IACP,OAAO;IACP,QAAQ;IACR,KAAK;IACL,KAAK;CACN,CAAC,CAAC;AAEH,6FAA6F;AAC7F,SAAS,iBAAiB,CAAC,MAAe;IACxC,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACpC,OAAO,IAAI,KAAK,SAAS,IAAI,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC/D,CAAC;AAED;;;;GAIG;AACH,SAAS,YAAY,CAAC,MAAe;IACnC,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACpC,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACpD,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACnC,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAChF,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,sBAAsB,CACpC,GAA+F,EAC/F,cAAkC,EAClC,cAAsB;IAEtB,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACxC,MAAM,WAAW,GAAqB,EAAE,CAAC;IACzC,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAE/C,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACjC,IAAI,GAAG,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;YACxC,WAAW,CAAC,IAAI,CAAC;gBACf,IAAI,EAAE,2BAA2B;gBACjC,QAAQ,EAAE,OAAO;gBACjB,OAAO,EACL,GAAG,cAAc,KAAK,cAAc,yDAAyD;oBAC7F,0FAA0F;gBAC5F,cAAc;gBACd,cAAc;aACf,CAAC,CAAC;QACL,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,IAAI,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;gBAC5C,WAAW,CAAC,IAAI,CAAC;oBACf,IAAI,EAAE,yBAAyB;oBAC/B,QAAQ,EAAE,SAAS;oBACnB,OAAO,EACL,GAAG,cAAc,KAAK,cAAc,mBAAmB,GAAG,4BAA4B;wBACtF,oFAAoF;wBACpF,wFAAwF;wBACxF,2FAA2F;wBAC3F,GAAG,GAAG,8BAA8B;oBACtC,cAAc;oBACd,cAAc;iBACf,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,IACE,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ;QAClC,GAAG,CAAC,UAAU,KAAK,IAAI;QACvB,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAC7B,CAAC;QACD,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,iBAAiB;YACvB,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,GAAG,cAAc,KAAK,cAAc,sFAAsF;YACnI,cAAc;YACd,cAAc;SACf,CAAC,CAAC;QACH,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,UAAqC,CAAC,CAAC;IAE1E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,kBAAkB;YACxB,QAAQ,EAAE,SAAS;YACnB,OAAO,EACL,GAAG,cAAc,KAAK,cAAc,wDAAwD;gBAC5F,gFAAgF;YAClF,cAAc;YACd,cAAc;SACf,CAAC,CAAC;QACH,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;IACzC,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5D,MAAM,YAAY,GAChB,GAAG,CAAC,iBAAiB,IAAI,OAAO,GAAG,CAAC,iBAAiB,KAAK,QAAQ;QAChE,CAAC,CAAE,GAAG,CAAC,iBAAuF;QAC9F,CAAC,CAAC,SAAS,CAAC;IAEhB,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACpC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;YACzB,WAAW,CAAC,IAAI,CAAC;gBACf,IAAI,EAAE,uBAAuB;gBAC7B,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,GAAG,cAAc,KAAK,cAAc,uBAAuB,GAAG,yBAAyB;gBAChG,cAAc;gBACd,cAAc;aACf,CAAC,CAAC;QACL,CAAC;QACD,IAAI,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,WAAW,CAAC,IAAI,CAAC;gBACf,IAAI,EAAE,6BAA6B;gBACnC,QAAQ,EAAE,OAAO;gBACjB,OAAO,EACL,GAAG,cAAc,KAAK,cAAc,uBAAuB,GAAG,oCAAoC;oBAClG,mGAAmG;oBACnG,0FAA0F;gBAC5F,cAAc;gBACd,cAAc;aACf,CAAC,CAAC;QACL,CAAC;QACD,4EAA4E;QAC5E,uEAAuE;QACvE,mEAAmE;QACnE,IACE,WAAW,CAAC,MAAM,CAAC;YACnB,iBAAiB,CAAC,MAAM,CAAC;YACzB,CAAC,YAAY,CAAC,MAAM,CAAC;YACrB,OAAO,YAAY,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,KAAK,UAAU,EACjD,CAAC;YACD,WAAW,CAAC,IAAI,CAAC;gBACf,IAAI,EAAE,2BAA2B;gBACjC,QAAQ,EAAE,OAAO;gBACjB,OAAO,EACL,GAAG,cAAc,KAAK,cAAc,uBAAuB,GAAG,uBAAuB;oBACrF,uFAAuF;oBACvF,yEAAyE;oBACzE,wBAAwB,GAAG,0DAA0D;oBACrF,wFAAwF;gBAC1F,cAAc;gBACd,cAAc;aACf,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,6EAA6E;IAC7E,IAAI,YAAY,EAAE,CAAC;QACjB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YAC5C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7B,WAAW,CAAC,IAAI,CAAC;oBACf,IAAI,EAAE,kCAAkC;oBACxC,QAAQ,EAAE,OAAO;oBACjB,OAAO,EACL,GAAG,cAAc,KAAK,cAAc,mCAAmC,GAAG,oBAAoB;wBAC9F,4EAA4E;oBAC9E,cAAc;oBACd,cAAc;iBACf,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAQD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,wBAAwB,CACtC,GAGa,EACb,iBAAqC;IAErC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAExC,yBAAyB;IACzB,IAAI,iBAAiB,EAAE,mBAAmB,KAAK,KAAK;QAAE,OAAO,EAAE,CAAC;IAEhE,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC;IAEnE,kBAAkB;IAClB,MAAM,SAAS,GAAG,iBAAiB,EAAE,mBAAmB,CAAC;IACzD,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAEpE,6EAA6E;IAC7E,8EAA8E;IAC9E,uDAAuD;IACvD,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1F,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IACvD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAE1C,4EAA4E;IAC5E,wEAAwE;IACxE,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClD,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAErC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;IAC5E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEpC,mCAAmC;IACnC,yDAAyD;IACzD,mEAAmE;IACnE,IAAI,uBAAuB,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,CAAC;IAEnE,OAAO;QACL;YACE,IAAI,EAAE,2BAA2B;YACjC,QAAQ,EAAE,SAAS;YACnB,OAAO,EACL,SAAS,IAAI,+BAA+B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;gBAClE,6FAA6F;gBAC7F,+FAA+F;gBAC/F,yGAAyG;gBACzG,oGAAoG;gBACpG,yFAAyF;gBACzF,uDAAuD;YACzD,cAAc,EAAE,MAAM;YACtB,cAAc,EAAE,IAAI;SACrB;KACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,kBAAkB,CAAC,MAAe;IACzC,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,GAAG,EAAE,CAAC;IAC7B,OAAO,IAAI,GAAG,CACZ,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;SAClB,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,KAAK,OAAO,CAAC;SACxE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC,CACvE,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,uBAAuB,CAAC,UAAmB,EAAE,MAAe;IACnE,MAAM,eAAe,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IACpD,yBAAyB;IACzB,IAAI,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/E,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,UAAqC,CAAC,CAAC;QACtE,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;IACvE,CAAC;IACD,qBAAqB;IACrB,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAC3C,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @fileoverview Lint rules for the declarative `errors[]` contract on tool and
|
|
3
3
|
* resource definitions. Validates structure (codes, reasons, severity),
|
|
4
|
-
* uniqueness, and — when a contract is present — cross-checks the handler body
|
|
5
|
-
*
|
|
6
|
-
* never
|
|
4
|
+
* uniqueness, and — when a contract is present — cross-checks the handler body:
|
|
5
|
+
* codes thrown but not declared, reasons declared but never thrown, and throw
|
|
6
|
+
* sites that never put the declared `recovery` on the wire.
|
|
7
7
|
* @module src/linter/rules/error-contract-rules
|
|
8
8
|
*/
|
|
9
9
|
import type { LintDefinitionType, LintDiagnostic } from '../types.js';
|
|
@@ -94,18 +94,54 @@ export declare function scanReasonCalls(source: string, callee: string): ReasonC
|
|
|
94
94
|
*
|
|
95
95
|
* **Trigger.** Only when the handler holds at least one literal `ctx.fail(`. A
|
|
96
96
|
* handler with none produces its reasons somewhere the scan cannot reach, and
|
|
97
|
-
* firing there would warn on every service-layer definition. A `ctx.fail(`
|
|
98
|
-
* first argument is not a string literal makes the
|
|
99
|
-
* whole definition is skipped rather than guessed
|
|
97
|
+
* firing there would warn on every service-layer definition. A `ctx.fail(` or
|
|
98
|
+
* `ctx.recoveryFor(` whose first argument is not a string literal makes the
|
|
99
|
+
* named set unknowable, so the whole definition is skipped rather than guessed
|
|
100
|
+
* at.
|
|
100
101
|
*
|
|
101
102
|
* **Warning, never error.** A reason produced outside the handler closure is
|
|
102
|
-
* invisible to any `toString()` scan, so the rule can never prove absence.
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
*
|
|
103
|
+
* invisible to any `toString()` scan, so the rule can never prove absence. An
|
|
104
|
+
* entry the service layer produces says so with `thrownBy: 'service'` and is
|
|
105
|
+
* skipped while the handler's own reasons keep being checked. Still silent
|
|
106
|
+
* without a marker: a `createFail(errors)` resolver built outside the handler,
|
|
107
|
+
* and an aliased `const fail = ctx.fail`.
|
|
106
108
|
*/
|
|
107
109
|
export declare function lintErrorContractUnthrown(def: {
|
|
108
110
|
handler?: unknown;
|
|
109
111
|
errors?: unknown;
|
|
110
112
|
}, definitionType: LintDefinitionType, definitionName: string): LintDiagnostic[];
|
|
113
|
+
/**
|
|
114
|
+
* Flags a literal `ctx.fail('<reason>', …)` site that does not put the
|
|
115
|
+
* contract's `recovery` on the wire.
|
|
116
|
+
*
|
|
117
|
+
* An `errors[]` entry must declare `recovery`, but reaching the client with it
|
|
118
|
+
* is opt-in: the throw site forwards `ctx.recoveryFor('<reason>')`, or passes
|
|
119
|
+
* its own `recovery` key. A site that does neither ships `reason` and
|
|
120
|
+
* `retryable` with no hint — and because the framework mirrors
|
|
121
|
+
* `data.recovery.hint` into the error `content[]`, both client surfaces lose it
|
|
122
|
+
* together. The declared guidance is right there in the contract and reaches
|
|
123
|
+
* nobody; an error-path test asserting `code` and `reason` passes either way.
|
|
124
|
+
*
|
|
125
|
+
* **Per site, not per reason.** A handler wiring one of six throws is covered
|
|
126
|
+
* at one of them, so each site is judged on its own argument list. Two sites
|
|
127
|
+
* naming one reason, one forwarding and one bare, produce exactly one
|
|
128
|
+
* diagnostic.
|
|
129
|
+
*
|
|
130
|
+
* **Accepted forms.** `{ ...ctx.recoveryFor('<reason>') }` spread into the data
|
|
131
|
+
* object, `ctx.recoveryFor('<reason>')` passed as the data argument, and an
|
|
132
|
+
* explicit `recovery` key carrying a runtime-interpolated hint.
|
|
133
|
+
*
|
|
134
|
+
* **Bails.** A non-literal first argument on either callee skips the whole
|
|
135
|
+
* definition — the reasons in play are unknown. A resolver sitting outside
|
|
136
|
+
* every fail span (a hoisted `const hint = ctx.recoveryFor('x')`) skips that
|
|
137
|
+
* reason, since the binding is assembled where the scan cannot follow it. A
|
|
138
|
+
* data argument the scan cannot read skips that one site.
|
|
139
|
+
*
|
|
140
|
+
* **Warning, never error.** A failure thrown below the handler is invisible to
|
|
141
|
+
* a `handler.toString()` scan, so the rule speaks only for the sites it sees.
|
|
142
|
+
*/
|
|
143
|
+
export declare function lintErrorContractRecoveryUnforwarded(def: {
|
|
144
|
+
handler?: unknown;
|
|
145
|
+
errors?: unknown;
|
|
146
|
+
}, definitionType: LintDefinitionType, definitionName: string): LintDiagnostic[];
|
|
111
147
|
//# sourceMappingURL=error-contract-rules.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-contract-rules.d.ts","sourceRoot":"","sources":["../../../src/linter/rules/error-contract-rules.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAuBtE;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,OAAO,EACf,cAAc,EAAE,kBAAkB,EAClC,cAAc,EAAE,MAAM,GACrB,cAAc,EAAE,CAkMlB;AAyDD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,EAC5C,cAAc,EAAE,kBAAkB,EAClC,cAAc,EAAE,MAAM,GACrB,cAAc,EAAE,CAiGlB;AAMD,8EAA8E;AAC9E,MAAM,WAAW,cAAc;IAC7B,sDAAsD;IACtD,GAAG,EAAE,MAAM,CAAC;IACZ,+EAA+E;IAC/E,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;CACf;AAED,+EAA+E;AAC/E,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,aAAa,EAAE,OAAO,CAAC;IACvB,sDAAsD;IACtD,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,CA0B9E;
|
|
1
|
+
{"version":3,"file":"error-contract-rules.d.ts","sourceRoot":"","sources":["../../../src/linter/rules/error-contract-rules.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAuBtE;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,OAAO,EACf,cAAc,EAAE,kBAAkB,EAClC,cAAc,EAAE,MAAM,GACrB,cAAc,EAAE,CAkMlB;AAyDD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,EAC5C,cAAc,EAAE,kBAAkB,EAClC,cAAc,EAAE,MAAM,GACrB,cAAc,EAAE,CAiGlB;AAMD,8EAA8E;AAC9E,MAAM,WAAW,cAAc;IAC7B,sDAAsD;IACtD,GAAG,EAAE,MAAM,CAAC;IACZ,+EAA+E;IAC/E,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;CACf;AAED,+EAA+E;AAC/E,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,aAAa,EAAE,OAAO,CAAC;IACvB,sDAAsD;IACtD,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,CA0B9E;AA6DD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,EAC5C,cAAc,EAAE,kBAAkB,EAClC,cAAc,EAAE,MAAM,GACrB,cAAc,EAAE,CA4BlB;AA4DD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,oCAAoC,CAClD,GAAG,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,EAC5C,cAAc,EAAE,kBAAkB,EAClC,cAAc,EAAE,MAAM,GACrB,cAAc,EAAE,CA4ClB"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @fileoverview Lint rules for the declarative `errors[]` contract on tool and
|
|
3
3
|
* resource definitions. Validates structure (codes, reasons, severity),
|
|
4
|
-
* uniqueness, and — when a contract is present — cross-checks the handler body
|
|
5
|
-
*
|
|
6
|
-
* never
|
|
4
|
+
* uniqueness, and — when a contract is present — cross-checks the handler body:
|
|
5
|
+
* codes thrown but not declared, reasons declared but never thrown, and throw
|
|
6
|
+
* sites that never put the declared `recovery` on the wire.
|
|
7
7
|
* @module src/linter/rules/error-contract-rules
|
|
8
8
|
*/
|
|
9
9
|
import { JsonRpcErrorCode } from '../../types-global/errors.js';
|
|
@@ -415,6 +415,38 @@ export function scanReasonCalls(source, callee) {
|
|
|
415
415
|
}
|
|
416
416
|
return { indeterminate, sites };
|
|
417
417
|
}
|
|
418
|
+
/**
|
|
419
|
+
* Reads a contract-carrying definition's handler source and scans both
|
|
420
|
+
* reason-carrying callees.
|
|
421
|
+
*
|
|
422
|
+
* Returns `undefined` when there is nothing to check — no contract, no handler,
|
|
423
|
+
* an unreadable `toString()` — or when either callee took a non-literal first
|
|
424
|
+
* argument. A variable, a template literal, or a map lookup puts unknown reasons
|
|
425
|
+
* in play, and every rule reading these scans bails on the whole definition
|
|
426
|
+
* rather than guess at the set.
|
|
427
|
+
*/
|
|
428
|
+
function scanContractHandler(def) {
|
|
429
|
+
if (!Array.isArray(def.errors) || def.errors.length === 0)
|
|
430
|
+
return undefined;
|
|
431
|
+
if (typeof def.handler !== 'function')
|
|
432
|
+
return undefined;
|
|
433
|
+
let source;
|
|
434
|
+
try {
|
|
435
|
+
source = def.handler.toString();
|
|
436
|
+
}
|
|
437
|
+
catch {
|
|
438
|
+
return undefined;
|
|
439
|
+
}
|
|
440
|
+
const fail = scanReasonCalls(source, 'ctx.fail');
|
|
441
|
+
const recoveryFor = scanReasonCalls(source, 'ctx.recoveryFor');
|
|
442
|
+
if (fail.indeterminate || recoveryFor.indeterminate)
|
|
443
|
+
return undefined;
|
|
444
|
+
return { fail: fail.sites, recoveryFor: recoveryFor.sites, source };
|
|
445
|
+
}
|
|
446
|
+
/** Whether `inner` falls inside `outer`'s argument list. */
|
|
447
|
+
function within(inner, outer) {
|
|
448
|
+
return inner.start > outer.start && inner.end <= outer.end;
|
|
449
|
+
}
|
|
418
450
|
/** Offset just past the `)` matching the `(` at `open`, or `-1` when unbalanced. */
|
|
419
451
|
function matchingParen(cleaned, open) {
|
|
420
452
|
let depth = 0;
|
|
@@ -441,48 +473,169 @@ function matchingParen(cleaned, open) {
|
|
|
441
473
|
*
|
|
442
474
|
* **Trigger.** Only when the handler holds at least one literal `ctx.fail(`. A
|
|
443
475
|
* handler with none produces its reasons somewhere the scan cannot reach, and
|
|
444
|
-
* firing there would warn on every service-layer definition. A `ctx.fail(`
|
|
445
|
-
* first argument is not a string literal makes the
|
|
446
|
-
* whole definition is skipped rather than guessed
|
|
476
|
+
* firing there would warn on every service-layer definition. A `ctx.fail(` or
|
|
477
|
+
* `ctx.recoveryFor(` whose first argument is not a string literal makes the
|
|
478
|
+
* named set unknowable, so the whole definition is skipped rather than guessed
|
|
479
|
+
* at.
|
|
447
480
|
*
|
|
448
481
|
* **Warning, never error.** A reason produced outside the handler closure is
|
|
449
|
-
* invisible to any `toString()` scan, so the rule can never prove absence.
|
|
450
|
-
*
|
|
451
|
-
*
|
|
452
|
-
*
|
|
482
|
+
* invisible to any `toString()` scan, so the rule can never prove absence. An
|
|
483
|
+
* entry the service layer produces says so with `thrownBy: 'service'` and is
|
|
484
|
+
* skipped while the handler's own reasons keep being checked. Still silent
|
|
485
|
+
* without a marker: a `createFail(errors)` resolver built outside the handler,
|
|
486
|
+
* and an aliased `const fail = ctx.fail`.
|
|
453
487
|
*/
|
|
454
488
|
export function lintErrorContractUnthrown(def, definitionType, definitionName) {
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
if (typeof def.handler !== 'function')
|
|
458
|
-
return [];
|
|
459
|
-
let source;
|
|
460
|
-
try {
|
|
461
|
-
source = def.handler.toString();
|
|
462
|
-
}
|
|
463
|
-
catch {
|
|
464
|
-
return [];
|
|
465
|
-
}
|
|
466
|
-
const failScan = scanReasonCalls(source, 'ctx.fail');
|
|
467
|
-
if (failScan.indeterminate || failScan.sites.length === 0)
|
|
489
|
+
const scan = scanContractHandler(def);
|
|
490
|
+
if (!scan || scan.fail.length === 0)
|
|
468
491
|
return [];
|
|
469
492
|
// `ctx.recoveryFor('<reason>')` counts too: it is how a handler opts a
|
|
470
493
|
// service-thrown reason onto the wire, and naming it there is all the scan
|
|
471
494
|
// can ask for.
|
|
472
|
-
const named = new Set(
|
|
473
|
-
for (const site of
|
|
495
|
+
const named = new Set(scan.fail.map((site) => site.reason));
|
|
496
|
+
for (const site of scan.recoveryFor)
|
|
474
497
|
named.add(site.reason);
|
|
475
498
|
const diagnostics = [];
|
|
476
499
|
for (const entry of def.errors) {
|
|
477
500
|
const reason = entry?.reason;
|
|
478
501
|
if (typeof reason !== 'string' || reason.length === 0 || named.has(reason))
|
|
479
502
|
continue;
|
|
503
|
+
if (entry.thrownBy === 'service')
|
|
504
|
+
continue;
|
|
480
505
|
diagnostics.push({
|
|
481
506
|
rule: 'error-contract-unthrown',
|
|
482
507
|
severity: 'warning',
|
|
483
508
|
message: `${definitionType} '${definitionName}' declares reason '${reason}' in errors[], but no ` +
|
|
484
|
-
`ctx.fail('${reason}', …) appears in the handler. Wire the throw,
|
|
485
|
-
'clients plan around the
|
|
509
|
+
`ctx.fail('${reason}', …) appears in the handler. Wire the throw, drop the entry, or mark ` +
|
|
510
|
+
"it `thrownBy: 'service'` when the service layer produces it — clients plan around the " +
|
|
511
|
+
'advertised failure surface.',
|
|
512
|
+
definitionType,
|
|
513
|
+
definitionName,
|
|
514
|
+
});
|
|
515
|
+
}
|
|
516
|
+
return diagnostics;
|
|
517
|
+
}
|
|
518
|
+
/** Matches text that opens with a `ctx.recoveryFor(` call. */
|
|
519
|
+
const RESOLVER_CALL_RE = /^ctx\.recoveryFor\s*\(/;
|
|
520
|
+
/**
|
|
521
|
+
* Splits a bracketed list — an argument list or an object literal body,
|
|
522
|
+
* brackets included — into its top-level entries, as `[start, end)` offsets
|
|
523
|
+
* into that text. Empty entries (a trailing comma) are dropped.
|
|
524
|
+
*
|
|
525
|
+
* Reads the comment- and string-stripped text, where a literal's contents are
|
|
526
|
+
* blanked, so a comma inside a string cannot split an entry.
|
|
527
|
+
*/
|
|
528
|
+
function splitTopLevel(cleaned) {
|
|
529
|
+
const entries = [];
|
|
530
|
+
const close = cleaned.length - 1;
|
|
531
|
+
let depth = 0;
|
|
532
|
+
let start = 1;
|
|
533
|
+
for (let i = 1; i < close; i += 1) {
|
|
534
|
+
const ch = cleaned[i];
|
|
535
|
+
if (ch === '(' || ch === '[' || ch === '{')
|
|
536
|
+
depth += 1;
|
|
537
|
+
else if (ch === ')' || ch === ']' || ch === '}')
|
|
538
|
+
depth -= 1;
|
|
539
|
+
else if (ch === ',' && depth === 0) {
|
|
540
|
+
entries.push([start, i]);
|
|
541
|
+
start = i + 1;
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
entries.push([start, close]);
|
|
545
|
+
return entries.filter(([from, to]) => cleaned.slice(from, to).trim().length > 0);
|
|
546
|
+
}
|
|
547
|
+
/**
|
|
548
|
+
* What a `ctx.fail` site's data argument tells the scan about recovery, or
|
|
549
|
+
* `undefined` when it cannot be read.
|
|
550
|
+
*
|
|
551
|
+
* Readable means every part of the argument is accounted for: a bare
|
|
552
|
+
* `ctx.recoveryFor(…)` call, or an object literal whose only spreads are
|
|
553
|
+
* resolver calls. An identifier, a call that is not the resolver, and a literal
|
|
554
|
+
* spreading anything else may each carry `recovery` already, so the site is
|
|
555
|
+
* left alone rather than guessed at.
|
|
556
|
+
*/
|
|
557
|
+
function readDataArgument(cleaned) {
|
|
558
|
+
const text = cleaned.trim();
|
|
559
|
+
if (RESOLVER_CALL_RE.test(text))
|
|
560
|
+
return { carriesRecovery: false };
|
|
561
|
+
if (!text.startsWith('{') || !text.endsWith('}'))
|
|
562
|
+
return undefined;
|
|
563
|
+
let carriesRecovery = false;
|
|
564
|
+
for (const [from, to] of splitTopLevel(text)) {
|
|
565
|
+
const entry = text.slice(from, to).trim();
|
|
566
|
+
if (entry.startsWith('...')) {
|
|
567
|
+
if (!RESOLVER_CALL_RE.test(entry.slice(3).trim()))
|
|
568
|
+
return undefined;
|
|
569
|
+
continue;
|
|
570
|
+
}
|
|
571
|
+
if (/^recovery\b/.test(entry))
|
|
572
|
+
carriesRecovery = true;
|
|
573
|
+
}
|
|
574
|
+
return { carriesRecovery };
|
|
575
|
+
}
|
|
576
|
+
/**
|
|
577
|
+
* Flags a literal `ctx.fail('<reason>', …)` site that does not put the
|
|
578
|
+
* contract's `recovery` on the wire.
|
|
579
|
+
*
|
|
580
|
+
* An `errors[]` entry must declare `recovery`, but reaching the client with it
|
|
581
|
+
* is opt-in: the throw site forwards `ctx.recoveryFor('<reason>')`, or passes
|
|
582
|
+
* its own `recovery` key. A site that does neither ships `reason` and
|
|
583
|
+
* `retryable` with no hint — and because the framework mirrors
|
|
584
|
+
* `data.recovery.hint` into the error `content[]`, both client surfaces lose it
|
|
585
|
+
* together. The declared guidance is right there in the contract and reaches
|
|
586
|
+
* nobody; an error-path test asserting `code` and `reason` passes either way.
|
|
587
|
+
*
|
|
588
|
+
* **Per site, not per reason.** A handler wiring one of six throws is covered
|
|
589
|
+
* at one of them, so each site is judged on its own argument list. Two sites
|
|
590
|
+
* naming one reason, one forwarding and one bare, produce exactly one
|
|
591
|
+
* diagnostic.
|
|
592
|
+
*
|
|
593
|
+
* **Accepted forms.** `{ ...ctx.recoveryFor('<reason>') }` spread into the data
|
|
594
|
+
* object, `ctx.recoveryFor('<reason>')` passed as the data argument, and an
|
|
595
|
+
* explicit `recovery` key carrying a runtime-interpolated hint.
|
|
596
|
+
*
|
|
597
|
+
* **Bails.** A non-literal first argument on either callee skips the whole
|
|
598
|
+
* definition — the reasons in play are unknown. A resolver sitting outside
|
|
599
|
+
* every fail span (a hoisted `const hint = ctx.recoveryFor('x')`) skips that
|
|
600
|
+
* reason, since the binding is assembled where the scan cannot follow it. A
|
|
601
|
+
* data argument the scan cannot read skips that one site.
|
|
602
|
+
*
|
|
603
|
+
* **Warning, never error.** A failure thrown below the handler is invisible to
|
|
604
|
+
* a `handler.toString()` scan, so the rule speaks only for the sites it sees.
|
|
605
|
+
*/
|
|
606
|
+
export function lintErrorContractRecoveryUnforwarded(def, definitionType, definitionName) {
|
|
607
|
+
const scan = scanContractHandler(def);
|
|
608
|
+
if (!scan)
|
|
609
|
+
return [];
|
|
610
|
+
const cleaned = stripCommentsAndStrings(scan.source);
|
|
611
|
+
const hoisted = new Set(scan.recoveryFor
|
|
612
|
+
.filter((resolver) => !scan.fail.some((site) => within(resolver, site)))
|
|
613
|
+
.map((resolver) => resolver.reason));
|
|
614
|
+
const diagnostics = [];
|
|
615
|
+
for (const site of scan.fail) {
|
|
616
|
+
if (hoisted.has(site.reason))
|
|
617
|
+
continue;
|
|
618
|
+
const resolved = scan.recoveryFor.filter((resolver) => within(resolver, site));
|
|
619
|
+
if (resolved.some((resolver) => resolver.reason === site.reason))
|
|
620
|
+
continue;
|
|
621
|
+
const args = splitTopLevel(cleaned.slice(site.start, site.end));
|
|
622
|
+
const dataArg = args[2];
|
|
623
|
+
if (dataArg) {
|
|
624
|
+
const data = readDataArgument(cleaned.slice(site.start + dataArg[0], site.start + dataArg[1]));
|
|
625
|
+
if (!data || data.carriesRecovery)
|
|
626
|
+
continue;
|
|
627
|
+
}
|
|
628
|
+
const mismatch = resolved.map((resolver) => `'${resolver.reason}'`).join(' / ');
|
|
629
|
+
diagnostics.push({
|
|
630
|
+
rule: 'error-contract-recovery-unforwarded',
|
|
631
|
+
severity: 'warning',
|
|
632
|
+
message: `${definitionType} '${definitionName}' throws ctx.fail('${site.reason}', …) ` +
|
|
633
|
+
(mismatch.length > 0
|
|
634
|
+
? `forwarding recovery for ${mismatch} instead, so the caller gets another failure mode's guidance. `
|
|
635
|
+
: "without forwarding its declared recovery, so the contract's hint reaches neither " +
|
|
636
|
+
'client surface. ') +
|
|
637
|
+
`Spread \`...ctx.recoveryFor('${site.reason}')\` into the data argument, or pass an ` +
|
|
638
|
+
'explicit `recovery: { hint }` when the hint needs runtime context.',
|
|
486
639
|
definitionType,
|
|
487
640
|
definitionName,
|
|
488
641
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-contract-rules.js","sourceRoot":"","sources":["../../../src/linter/rules/error-contract-rules.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"error-contract-rules.js","sourceRoot":"","sources":["../../../src/linter/rules/error-contract-rules.ts"],"names":[],"mappings":"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"}
|
|
@@ -438,7 +438,7 @@ export function lintFormatParity(def, displayName) {
|
|
|
438
438
|
' • structuredContent (from `output`) — forwarded by clients like Claude Code\n' +
|
|
439
439
|
' • content[] (from `format()`) — forwarded by clients like Claude Desktop\n' +
|
|
440
440
|
'format() is the markdown-rendered twin of structuredContent, not a separate payload. Parity failure means one set of clients sees less than another.\n' +
|
|
441
|
-
'Primary fix: render the field in format(). For list/detail variants,
|
|
441
|
+
'Primary fix: render the field in format(). For list/detail variants, declare one flat z.object with a `kind` discriminator and optional arms — tool() rejects a z.discriminatedUnion output — and render each arm on presence with independent if-blocks, never else-if, since the synthetic sample populates every arm at once.\n' +
|
|
442
442
|
'Escape hatch: if the output schema was over-typed for a genuinely dynamic upstream API, relax it (z.object({}).passthrough()) rather than maintaining aspirational typing — passthrough still flows data to structuredContent without declaring each field.',
|
|
443
443
|
definitionType: 'tool',
|
|
444
444
|
definitionName: displayName,
|