@lerianstudio/matcher-mcp 1.2.0 → 1.3.0

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.
@@ -0,0 +1,393 @@
1
+ // Curated-tool ⇄ OpenAPI request-body parity — the client-side sibling of the Go
2
+ // `check-huma-spec` gate.
3
+ //
4
+ // WHY THIS EXISTS
5
+ // A curated Zod tool (src/tools/<family>/*.ts) hand-writes its input shape and
6
+ // dispatches a fixed method+path. `curated-operations.test.ts` already pins that
7
+ // each tool's operation still EXISTS in the spec (structural drift). This file
8
+ // goes one layer deeper: it diffs each curated tool's declared Zod request shape
9
+ // against the spec's request-body JSON Schema and fails when the TOOL IS BEHIND —
10
+ // a body property the spec added that the tool never exposes, or a closed Zod
11
+ // enum that lags the spec's enum values. Either way an operator driving the tool
12
+ // blind (the .describe() text is the whole product) would be unable to send a
13
+ // field the backend accepts, or would be rejected client-side for a value the
14
+ // backend allows. The enum-policy allow-lists (enum-policy.ts) carve out the two
15
+ // sanctioned divergences (spec-enum→free-string, and deliberately-omitted field).
16
+ //
17
+ // SCOPE — A DECISION, NOT AN OVERSIGHT
18
+ // This gate covers REQUEST-BODY parity only. Query- and path-parameter drift is
19
+ // deliberately OUT OF SCOPE here: path params ride URL builders (a rename there
20
+ // breaks the dispatched path, which `curated-operations.test.ts`'s method+path
21
+ // reconciliation already guards), and the query surface is thin and mostly
22
+ // pagination. Body shape is where a curated tool silently rots against a growing
23
+ // backend contract, so that is what we pin.
24
+ //
25
+ // TOOL-AHEAD IS NOT A FAILURE
26
+ // Extra tool properties the spec lacks (or a tool enum with MORE values than the
27
+ // spec) are not flagged — a curated tool may intentionally lead the spec. Only
28
+ // the tool falling BEHIND the spec bites.
29
+ //
30
+ // ZOD 4 INTROSPECTION
31
+ // Dependency-free (no zod-to-json-schema). Zod 4 exposes `schema._def.type` as
32
+ // the discriminator and `_def.innerType` for the single-child wrappers
33
+ // (optional / default / nullable / readonly / catch / nonoptional); ZodPipe
34
+ // (transform/refine-with-effect) carries `_def.in`; ZodEnum carries
35
+ // `_def.entries`; ZodArray carries `_def.element`; ZodObject exposes `.shape`.
36
+ // The self-test fixtures in schema-parity.test.ts are the correctness proof for
37
+ // these unwrap wrinkles.
38
+ // --- Zod side --------------------------------------------------------------
39
+ /** Access the Zod 4 internal def, tolerating either accessor. */
40
+ function defOf(schema) {
41
+ if (schema === null || typeof schema !== 'object') {
42
+ return undefined;
43
+ }
44
+ const s = schema;
45
+ const d = s._def ?? s.def;
46
+ return d !== null && typeof d === 'object'
47
+ ? d
48
+ : undefined;
49
+ }
50
+ /**
51
+ * Peel the transparent single-child wrappers (optional / default / nullable /
52
+ * readonly / catch / nonoptional via `innerType`; transform/pipe via `in`) until
53
+ * a "core" schema (object / array / enum / scalar / record) is reached.
54
+ */
55
+ function unwrap(schema) {
56
+ let current = schema;
57
+ for (let hops = 0; hops < 50; hops += 1) {
58
+ const d = defOf(current);
59
+ if (d === undefined) {
60
+ return current;
61
+ }
62
+ if (d['type'] === 'pipe' && d['in'] !== undefined) {
63
+ current = d['in'];
64
+ continue;
65
+ }
66
+ if (d['innerType'] !== undefined) {
67
+ current = d['innerType'];
68
+ continue;
69
+ }
70
+ return current;
71
+ }
72
+ return current;
73
+ }
74
+ /**
75
+ * Whether a Zod field is GUARANTEED to appear in the parsed payload.
76
+ * Peels wrappers outermost-first: the first wrapper that decides presence wins.
77
+ * `optional` → 'optional' (may be absent); `default`/`catch`/`prefault` →
78
+ * 'guaranteed' (a value is filled when the caller omits it); `nonoptional` →
79
+ * 'guaranteed' (explicitly strips optionality); `nullable`/`readonly`/`pipe`
80
+ * are transparent for presence and are peeled through. A bare scalar/object/
81
+ * array with no wrapper is required.
82
+ */
83
+ function presenceOf(schema) {
84
+ let current = schema;
85
+ for (let hops = 0; hops < 50; hops += 1) {
86
+ const d = defOf(current);
87
+ if (d === undefined) {
88
+ return 'guaranteed';
89
+ }
90
+ const type = d['type'];
91
+ if (type === 'optional') {
92
+ return 'optional';
93
+ }
94
+ if (type === 'default' || type === 'catch' || type === 'prefault') {
95
+ return 'guaranteed';
96
+ }
97
+ if (type === 'nonoptional') {
98
+ return 'guaranteed';
99
+ }
100
+ if (type === 'pipe' && d['in'] !== undefined) {
101
+ current = d['in'];
102
+ continue;
103
+ }
104
+ if (d['innerType'] !== undefined) {
105
+ current = d['innerType'];
106
+ continue;
107
+ }
108
+ return 'guaranteed';
109
+ }
110
+ return 'guaranteed';
111
+ }
112
+ /** Recurse a Zod schema, appending property paths and closed enums to `out`. */
113
+ function walkZod(schema, path, out) {
114
+ const core = unwrap(schema);
115
+ const d = defOf(core);
116
+ const type = d?.['type'];
117
+ if (type === 'object') {
118
+ const shape = core.shape ?? {};
119
+ for (const [key, child] of Object.entries(shape)) {
120
+ const childPath = path ? `${path}.${key}` : key;
121
+ out.propertyPaths.add(childPath);
122
+ if (presenceOf(child) === 'guaranteed') {
123
+ out.requiredPaths.add(childPath);
124
+ }
125
+ walkZod(child, childPath, out);
126
+ }
127
+ return;
128
+ }
129
+ if (type === 'array') {
130
+ const element = core.element ?? d?.['element'];
131
+ if (element !== undefined) {
132
+ walkZod(element, `${path}[]`, out);
133
+ }
134
+ return;
135
+ }
136
+ if (type === 'enum' && path) {
137
+ const entries = d?.['entries'];
138
+ if (entries !== null && typeof entries === 'object') {
139
+ out.closedEnums.set(path, new Set(Object.values(entries).map(String)));
140
+ }
141
+ return;
142
+ }
143
+ // record / string / number / boolean / unknown → leaf; nothing to add.
144
+ }
145
+ /**
146
+ * Introspect a curated tool's `ZodRawShape` into its property paths and closed
147
+ * enums. Wrapper types are unwrapped; arrays recurse into their element under a
148
+ * `[]` segment; enums surface their `.options`.
149
+ */
150
+ export function introspectShape(shape) {
151
+ const out = {
152
+ propertyPaths: new Set(),
153
+ closedEnums: new Map(),
154
+ requiredPaths: new Set(),
155
+ };
156
+ for (const [key, schema] of Object.entries(shape)) {
157
+ out.propertyPaths.add(key);
158
+ if (presenceOf(schema) === 'guaranteed') {
159
+ out.requiredPaths.add(key);
160
+ }
161
+ walkZod(schema, key, out);
162
+ }
163
+ return out;
164
+ }
165
+ // --- Spec side -------------------------------------------------------------
166
+ /**
167
+ * Recurse an (already-dereferenced) JSON Schema fragment into `out`.
168
+ *
169
+ * FLAT-SCHEMA-ONLY (invariant, not a bug): traverses `properties`/`items`/`enum`
170
+ * only. Composition keywords (allOf/oneOf/anyOf) are NOT descended into — Huma
171
+ * emits flat schemas and the shipped spec has zero of them (a schema-parity.test
172
+ * canary asserts this stays true). If the generator ever emits a composed body,
173
+ * a property/enum under the composition would be invisible here (fail-OPEN), so
174
+ * the canary trips RED first, forcing composition traversal to be added.
175
+ */
176
+ function walkSpec(node, path, out) {
177
+ if (node === null || typeof node !== 'object') {
178
+ return;
179
+ }
180
+ const obj = node;
181
+ const enumVals = obj['enum'];
182
+ if (Array.isArray(enumVals) && path) {
183
+ out.closedEnums.set(path, new Set(enumVals.map(String)));
184
+ }
185
+ // `required` lists property NAMES required at THIS object level; project each
186
+ // onto the same dot/bracket path notation as its property entry below.
187
+ const required = obj['required'];
188
+ if (Array.isArray(required)) {
189
+ for (const name of required) {
190
+ if (typeof name === 'string') {
191
+ out.requiredPaths.add(path ? `${path}.${name}` : name);
192
+ }
193
+ }
194
+ }
195
+ const properties = obj['properties'];
196
+ if (properties !== null && typeof properties === 'object') {
197
+ for (const [key, child] of Object.entries(properties)) {
198
+ const childPath = path ? `${path}.${key}` : key;
199
+ out.propertyPaths.add(childPath);
200
+ walkSpec(child, childPath, out);
201
+ }
202
+ }
203
+ const items = obj['items'];
204
+ if (items !== undefined) {
205
+ walkSpec(items, `${path}[]`, out);
206
+ }
207
+ }
208
+ /**
209
+ * Introspect a spec request-body JSON Schema (as produced by the loader, refs
210
+ * already inlined) into its property paths and enums — same path notation as
211
+ * {@link introspectShape} so the two are directly comparable.
212
+ */
213
+ export function introspectSpecSchema(schema) {
214
+ const out = {
215
+ propertyPaths: new Set(),
216
+ closedEnums: new Map(),
217
+ requiredPaths: new Set(),
218
+ };
219
+ walkSpec(schema, '', out);
220
+ return out;
221
+ }
222
+ /**
223
+ * Diff a curated tool's Zod shape against a spec request-body schema, honoring
224
+ * the per-op allow-lists. Returns every gap where the TOOL IS BEHIND the spec.
225
+ * Pure — the gate and the self-test both drive it.
226
+ */
227
+ export function compareShapeToSpec(shape, specSchema, allow) {
228
+ const tool = introspectShape(shape);
229
+ const spec = introspectSpecSchema(specSchema);
230
+ const findings = [];
231
+ // (1) Spec property the tool never exposes → missing, unless omitted-allow-listed.
232
+ for (const fieldPath of spec.propertyPaths) {
233
+ if (tool.propertyPaths.has(fieldPath)) {
234
+ continue;
235
+ }
236
+ if (allow.omittedFields.has(fieldPath)) {
237
+ continue;
238
+ }
239
+ findings.push({ kind: 'missing-property', fieldPath });
240
+ }
241
+ // (2)/(3) Spec enums vs the tool's modeling of the same field.
242
+ for (const [fieldPath, specValues] of spec.closedEnums) {
243
+ if (!tool.propertyPaths.has(fieldPath)) {
244
+ // Absent entirely — already reported (or allow-listed) by pass (1).
245
+ continue;
246
+ }
247
+ const toolValues = tool.closedEnums.get(fieldPath);
248
+ if (toolValues !== undefined) {
249
+ // (2) Closed tool enum must be a superset of the spec's values.
250
+ const missing = [...specValues].filter((v) => !toolValues.has(v));
251
+ if (missing.length > 0) {
252
+ findings.push({ kind: 'enum-missing-values', fieldPath, missing });
253
+ }
254
+ continue;
255
+ }
256
+ // (3) Spec enum, but the tool types it as a free string — only OK if declared.
257
+ if (!allow.openFields.has(fieldPath)) {
258
+ findings.push({ kind: 'enum-modeled-as-string', fieldPath });
259
+ }
260
+ }
261
+ return findings;
262
+ }
263
+ /** A required path is unconditional only at the top level (no parent container). */
264
+ function isTopLevel(fieldPath) {
265
+ return !fieldPath.includes('.') && !fieldPath.includes('[');
266
+ }
267
+ /**
268
+ * Diff the required-ness of a curated tool's fields against a spec request body.
269
+ * Returns every gap, its `kind` carrying the severity the gate applies:
270
+ * `spec-required-*` FAIL, `tool-required-spec-optional` WARN. Pure — the gate
271
+ * and the self-test both drive it.
272
+ */
273
+ export function compareRequiredArrays(shape, specSchema, allow) {
274
+ const tool = introspectShape(shape);
275
+ const spec = introspectSpecSchema(specSchema);
276
+ const findings = [];
277
+ // FAIL direction: every spec-required field must be guaranteed by the tool.
278
+ for (const fieldPath of spec.requiredPaths) {
279
+ if (tool.requiredPaths.has(fieldPath)) {
280
+ continue; // tool guarantees it (non-optional or has a default)
281
+ }
282
+ if (allow.injectedFields.has(fieldPath)) {
283
+ continue; // tool code fills it before dispatch — invisible but accounted for
284
+ }
285
+ if (tool.propertyPaths.has(fieldPath)) {
286
+ // Exposed but optional → caller can omit a required field.
287
+ findings.push({ kind: 'spec-required-tool-optional', fieldPath });
288
+ continue;
289
+ }
290
+ // Not exposed at all. Absence of a NON-allow-listed field is coverage's job
291
+ // (compareShapeToSpec's missing-property). We only add value for the case
292
+ // coverage can't see: a TOP-LEVEL required field suppressed by the omitted
293
+ // allow-list — an unconditional 422 on every call. Nested paths under an
294
+ // optional/opaque container are conditional and passed through, so skip them.
295
+ if (isTopLevel(fieldPath) && allow.omittedFields.has(fieldPath)) {
296
+ findings.push({ kind: 'spec-required-tool-omitted', fieldPath });
297
+ }
298
+ }
299
+ // WARN direction: a tool-required field the spec exposes but marks optional.
300
+ for (const fieldPath of tool.requiredPaths) {
301
+ if (!spec.propertyPaths.has(fieldPath)) {
302
+ continue; // tool-ahead extra the spec lacks — not an over-constraint of it
303
+ }
304
+ if (!spec.requiredPaths.has(fieldPath)) {
305
+ findings.push({ kind: 'tool-required-spec-optional', fieldPath });
306
+ }
307
+ }
308
+ return findings;
309
+ }
310
+ // --- The shape table -------------------------------------------------------
311
+ //
312
+ // Each curated operation whose spec entry declares an application/json request
313
+ // body maps here to the tool's exported input shape. The completeness guard in
314
+ // the test derives the required key set from CURATED_OPERATION_IDS ∩ (spec ops
315
+ // with a JSON body). So for any op ALREADY in CURATED_OPERATION_IDS, adding or
316
+ // retargeting its curated body-tool without wiring the shape here fails the gate
317
+ // (missing on one side, extra on the other).
318
+ //
319
+ // SCOPE LIMIT (do not overstate this): because the required set is filtered
320
+ // through the hand-maintained CURATED_OPERATION_IDS, this parity gate does NOT
321
+ // see an op that has a JSON body but is left in GENERIC_ONLY_OPERATION_IDS —
322
+ // hand-curate a Zod body-tool for such an op without promoting it into
323
+ // CURATED_OPERATION_IDS (and without wiring it here) and no field-parity test
324
+ // runs for it. That promotion/triage is guarded separately by
325
+ // curated-operations.test.ts (curated⇄generic disjointness + frozen counts +
326
+ // inverse spec coverage), not by field parity here. GET/list/delete ops (no
327
+ // body) and uploadFile (multipart, no application/json body) are absent by design.
328
+ import { addCommentInputShape } from '../tools/exception/add-comment.js';
329
+ import { adjustEntryInputShape } from '../tools/exception/adjust-entry.js';
330
+ import { bulkAssignInputShape } from '../tools/exception/bulk-assign.js';
331
+ import { bulkDispatchInputShape } from '../tools/exception/bulk-dispatch.js';
332
+ import { bulkResolveInputShape } from '../tools/exception/bulk-resolve.js';
333
+ import { closeDisputeInputShape } from '../tools/dispute/close.js';
334
+ import { createContextInputShape } from '../tools/context/create.js';
335
+ import { createFeeRuleInputShape } from '../tools/fee-rule/create.js';
336
+ import { createFeeScheduleInputShape } from '../tools/fee-schedule/create.js';
337
+ import { createFieldMapInputShape } from '../tools/field-map/create.js';
338
+ import { createMatchRuleInputShape } from '../tools/match-rule/create.js';
339
+ import { createSourceInputShape } from '../tools/source/create.js';
340
+ import { dispatchExceptionInputShape } from '../tools/exception/dispatch.js';
341
+ import { forceMatchInputShape } from '../tools/exception/force-match.js';
342
+ import { ignoreTransactionInputShape } from '../tools/ingestion/transaction-ignore.js';
343
+ import { openDisputeInputShape } from '../tools/exception/open-dispute.js';
344
+ import { reorderMatchRulesInputShape } from '../tools/match-rule/reorder.js';
345
+ import { simulateFeeScheduleInputShape } from '../tools/fee-schedule/simulate.js';
346
+ import { startMatchRunInputShape } from '../tools/matching/start.js';
347
+ import { submitEvidenceInputShape } from '../tools/dispute/submit-evidence.js';
348
+ import { updateContextInputShape } from '../tools/context/update.js';
349
+ import { updateFeeRuleInputShape } from '../tools/fee-rule/update.js';
350
+ import { updateFeeScheduleInputShape } from '../tools/fee-schedule/update.js';
351
+ import { updateFieldMapInputShape } from '../tools/field-map/update.js';
352
+ import { updateMatchRuleInputShape } from '../tools/match-rule/update.js';
353
+ import { updateSourceInputShape } from '../tools/source/update.js';
354
+ /** operationId → the curated tool's request-body input shape. */
355
+ export const TOOL_SHAPE_BY_OPERATION_ID = {
356
+ // fee-schedule
357
+ createFeeSchedule: createFeeScheduleInputShape,
358
+ simulateFeeSchedule: simulateFeeScheduleInputShape,
359
+ updateFeeSchedule: updateFeeScheduleInputShape,
360
+ // fee-rule
361
+ createFeeRule: createFeeRuleInputShape,
362
+ updateFeeRule: updateFeeRuleInputShape,
363
+ // match-rule
364
+ createMatchRule: createMatchRuleInputShape,
365
+ reorderMatchRules: reorderMatchRulesInputShape,
366
+ updateMatchRule: updateMatchRuleInputShape,
367
+ // context
368
+ createContext: createContextInputShape,
369
+ updateContext: updateContextInputShape,
370
+ // source
371
+ createSource: createSourceInputShape,
372
+ updateSource: updateSourceInputShape,
373
+ // field-map
374
+ createFieldMap: createFieldMapInputShape,
375
+ updateFieldMap: updateFieldMapInputShape,
376
+ // matching
377
+ runMatch: startMatchRunInputShape,
378
+ // exception
379
+ addComment: addCommentInputShape,
380
+ adjustEntryException: adjustEntryInputShape,
381
+ bulkAssignExceptions: bulkAssignInputShape,
382
+ bulkDispatchExceptions: bulkDispatchInputShape,
383
+ bulkResolveExceptions: bulkResolveInputShape,
384
+ dispatchException: dispatchExceptionInputShape,
385
+ forceMatchException: forceMatchInputShape,
386
+ openDispute: openDisputeInputShape,
387
+ // dispute
388
+ closeDispute: closeDisputeInputShape,
389
+ submitEvidence: submitEvidenceInputShape,
390
+ // ingestion
391
+ ignoreTransaction: ignoreTransactionInputShape,
392
+ };
393
+ //# sourceMappingURL=schema-parity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-parity.js","sourceRoot":"","sources":["../../src/spec/schema-parity.ts"],"names":[],"mappings":"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"}
@@ -62,6 +62,19 @@ export const createContextInputShape = {
62
62
  .string()
63
63
  .optional()
64
64
  .describe('Percentage fee tolerance as a decimal STRING (0.5 means 0.5%), e.g. "0.5".'),
65
+ agedBreakThresholdDays: z
66
+ .number()
67
+ .int()
68
+ .min(0)
69
+ .optional()
70
+ .describe('Open-item aging SLA in business days. An open-item residual older than ' +
71
+ 'this surfaces as an AGED_BREAK exception during the match run. Omit to ' +
72
+ 'disable aging for the context.'),
73
+ agedBreakCalendar: z
74
+ .string()
75
+ .optional()
76
+ .describe('Business-day calendar the aging threshold is measured against (e.g. ' +
77
+ 'US_FED, BR_ANBIMA). Omit/empty measures the age in raw calendar days.'),
65
78
  rules: z
66
79
  .array(z.record(z.string(), z.unknown()))
67
80
  .max(MAX_INLINE_RULES)
@@ -89,9 +102,11 @@ export function registerContextCreateTool(server) {
89
102
  "your token's tenant (no tenant field is accepted). Required: name " +
90
103
  '(1–100), type ("1:1"|"1:N"|"N:M", with colons), interval (label, e.g. ' +
91
104
  '"daily"). Optional: autoMatchOnUpload (bool), feeNormalization ' +
92
- '(NET|GROSS), feeToleranceAbs/feeTolerancePct (decimal strings), and ' +
93
- 'inline rules[] (≤50) / sources[] (≤10). Returns the created context, or ' +
94
- 'a structured RFC 9457 error.',
105
+ '(NET|GROSS), feeToleranceAbs/feeTolerancePct (decimal strings), ' +
106
+ 'open-item aging (agedBreakThresholdDays business-day SLA + ' +
107
+ 'agedBreakCalendar, e.g. BR_ANBIMA), and inline rules[] (≤50) / ' +
108
+ 'sources[] (≤10). Returns the created context, or a structured RFC 9457 ' +
109
+ 'error.',
95
110
  inputSchema: createContextInputShape,
96
111
  }, async (args, extra) => {
97
112
  return dispatchContext({ method: 'POST', path: CONTEXTS_PATH, body: args }, extra);
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/tools/context/create.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/tools/context/create.ts"],"names":[],"mappings":"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"}
@@ -55,10 +55,11 @@ export const updateContextInputShape = {
55
55
  .describe('When true, a match run is triggered automatically after a file upload ' +
56
56
  'completes.'),
57
57
  feeNormalization: z
58
- .enum(FEE_NORMALIZATIONS)
58
+ .enum([...FEE_NORMALIZATIONS, ''])
59
59
  .optional()
60
60
  .describe('Fee normalization mode. NET compares amounts after fees are deducted; ' +
61
- 'GROSS compares amounts before fees.'),
61
+ 'GROSS compares amounts before fees. Send an empty string ("") to clear ' +
62
+ 'the mode; omit to leave it unchanged.'),
62
63
  feeToleranceAbs: z
63
64
  .string()
64
65
  .optional()
@@ -68,6 +69,18 @@ export const updateContextInputShape = {
68
69
  .string()
69
70
  .optional()
70
71
  .describe('Percentage fee tolerance as a decimal STRING (0.5 means 0.5%), e.g. "0.5".'),
72
+ agedBreakThresholdDays: z
73
+ .number()
74
+ .int()
75
+ .min(0)
76
+ .optional()
77
+ .describe('Open-item aging SLA in business days. A positive value enables/changes ' +
78
+ 'aging; 0 disables it (clears the threshold); omit to leave it unchanged.'),
79
+ agedBreakCalendar: z
80
+ .string()
81
+ .optional()
82
+ .describe('Business-day calendar the aging threshold is measured against. Empty ' +
83
+ 'string clears it (raw calendar days); omit to leave it unchanged.'),
71
84
  };
72
85
  /**
73
86
  * Build the PATCH body from the input minus the path-only `contextId`. Only the
@@ -90,9 +103,11 @@ export function registerContextUpdateTool(server) {
90
103
  'optional (PATCH): name, type ("1:1"|"1:N"|"N:M"), interval, status ' +
91
104
  '(ACTIVE|PAUSED|ARCHIVED — transitioning to ACTIVE is gated on activation ' +
92
105
  'readiness and may return 409), autoMatchOnUpload, feeNormalization ' +
93
- '(NET|GROSS), feeToleranceAbs/feeTolerancePct (decimal strings). No tenant ' +
94
- 'field is accepted. Returns the updated context, or a structured RFC 9457 ' +
95
- 'error.',
106
+ '(NET|GROSS, or "" to clear), feeToleranceAbs/feeTolerancePct ' +
107
+ '(decimal strings), ' +
108
+ 'open-item aging (agedBreakThresholdDays — 0 disables — + ' +
109
+ 'agedBreakCalendar). No tenant field is accepted. Returns the updated ' +
110
+ 'context, or a structured RFC 9457 error.',
96
111
  inputSchema: updateContextInputShape,
97
112
  }, async (args, extra) => {
98
113
  return dispatchContext({
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/tools/context/update.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,EAAE;AACF,4EAA4E;AAC5E,4EAA4E;AAC5E,iFAAiF;AACjF,6EAA6E;AAC7E,yEAAyE;AACzE,8EAA8E;AAC9E,6EAA6E;AAC7E,iFAAiF;AACjF,WAAW;AAEX,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAC/D,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAE1D;;;;GAIG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAU,CAAA;AAEnF,8EAA8E;AAC9E,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,iDAAiD,CAAC;IAC9D,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,uDAAuD,CAAC;IACpE,IAAI,EAAE,CAAC;SACJ,IAAI,CAAC,aAAa,CAAC;SACnB,QAAQ,EAAE;SACV,QAAQ,CACP,qEAAqE;QACnE,sEAAsE;QACtE,mCAAmC,CACtC;IACH,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,4DAA4D,CAAC;IACzE,MAAM,EAAE,CAAC;SACN,IAAI,CAAC,0BAA0B,CAAC;SAChC,QAAQ,EAAE;SACV,QAAQ,CACP,uEAAuE;QACrE,yEAAyE;QACzE,sEAAsE;QACtE,2BAA2B,CAC9B;IACH,iBAAiB,EAAE,CAAC;SACjB,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,wEAAwE;QACtE,YAAY,CACf;IACH,gBAAgB,EAAE,CAAC;SAChB,IAAI,CAAC,kBAAkB,CAAC;SACxB,QAAQ,EAAE;SACV,QAAQ,CACP,wEAAwE;QACtE,qCAAqC,CACxC;IACH,eAAe,EAAE,CAAC;SACf,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,sEAAsE;QACpE,cAAc,CACjB;IACH,eAAe,EAAE,CAAC;SACf,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,4EAA4E,CAC7E;CACJ,CAAA;AAOD;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAC7B,IAAwB;IAExB,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAA;IAC/C,KAAK,UAAU,CAAA;IACf,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAAiB;IACzD,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,WAAW,EACT,yEAAyE;YACzE,qEAAqE;YACrE,2EAA2E;YAC3E,qEAAqE;YACrE,4EAA4E;YAC5E,2EAA2E;YAC3E,QAAQ;QACV,WAAW,EAAE,uBAAuB;KACrC,EACD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACpB,OAAO,eAAe,CACpB;YACE,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;YACjC,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC;SAC5B,EACD,KAAK,CACN,CAAA;IACH,CAAC,CACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/tools/context/update.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,EAAE;AACF,4EAA4E;AAC5E,4EAA4E;AAC5E,iFAAiF;AACjF,6EAA6E;AAC7E,yEAAyE;AACzE,8EAA8E;AAC9E,6EAA6E;AAC7E,iFAAiF;AACjF,WAAW;AAEX,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAC/D,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAE1D;;;;GAIG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAU,CAAA;AAEnF,8EAA8E;AAC9E,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,iDAAiD,CAAC;IAC9D,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,uDAAuD,CAAC;IACpE,IAAI,EAAE,CAAC;SACJ,IAAI,CAAC,aAAa,CAAC;SACnB,QAAQ,EAAE;SACV,QAAQ,CACP,qEAAqE;QACnE,sEAAsE;QACtE,mCAAmC,CACtC;IACH,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,4DAA4D,CAAC;IACzE,MAAM,EAAE,CAAC;SACN,IAAI,CAAC,0BAA0B,CAAC;SAChC,QAAQ,EAAE;SACV,QAAQ,CACP,uEAAuE;QACrE,yEAAyE;QACzE,sEAAsE;QACtE,2BAA2B,CAC9B;IACH,iBAAiB,EAAE,CAAC;SACjB,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,wEAAwE;QACtE,YAAY,CACf;IACH,gBAAgB,EAAE,CAAC;SAChB,IAAI,CAAC,CAAC,GAAG,kBAAkB,EAAE,EAAE,CAAU,CAAC;SAC1C,QAAQ,EAAE;SACV,QAAQ,CACP,wEAAwE;QACtE,yEAAyE;QACzE,uCAAuC,CAC1C;IACH,eAAe,EAAE,CAAC;SACf,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,sEAAsE;QACpE,cAAc,CACjB;IACH,eAAe,EAAE,CAAC;SACf,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,4EAA4E,CAC7E;IACH,sBAAsB,EAAE,CAAC;SACtB,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,EAAE;SACV,QAAQ,CACP,yEAAyE;QACvE,0EAA0E,CAC7E;IACH,iBAAiB,EAAE,CAAC;SACjB,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,uEAAuE;QACrE,mEAAmE,CACtE;CACJ,CAAA;AAOD;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAC7B,IAAwB;IAExB,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAA;IAC/C,KAAK,UAAU,CAAA;IACf,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAAiB;IACzD,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,WAAW,EACT,yEAAyE;YACzE,qEAAqE;YACrE,2EAA2E;YAC3E,qEAAqE;YACrE,+DAA+D;YAC/D,qBAAqB;YACrB,2DAA2D;YAC3D,uEAAuE;YACvE,0CAA0C;QAC5C,WAAW,EAAE,uBAAuB;KACrC,EACD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACpB,OAAO,eAAe,CACpB;YACE,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;YACjC,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC;SAC5B,EACD,KAAK,CACN,CAAA;IACH,CAAC,CACF,CAAA;AACH,CAAC"}
@@ -2,13 +2,13 @@
2
2
  //
3
3
  // A cross-exception action: dispatches many exceptions to a target external
4
4
  // system in one call. Mirrors the spec's BulkDispatchRequest — exceptionIds
5
- // (1–100 UUIDs) and targetSystem are required; queue (≤255) is optional. NOTE:
6
- // unlike the single-exception dispatch (DispatchRequest, a closed enum), the
7
- // bulk variant's targetSystem is a FREE STRING (≤255) per the spec we honor
8
- // that and do NOT constrain it to an enum here. Partial success is supported
9
- // server-side. No path param and no tenant field; matcher scopes to the relayed
10
- // token's tenant.
5
+ // (1–100 UUIDs) and targetSystem are required; queue (≤255) is optional. The
6
+ // targetSystem is a CLOSED enum (JIRA|SERVICENOW|WEBHOOK|MANUAL), the same as
7
+ // the single-exception dispatch (DispatchRequest) the bulk spec now constrains
8
+ // it identically. Partial success is supported server-side. No path param and no
9
+ // tenant field; matcher scopes to the relayed token's tenant.
11
10
  import { z } from 'zod';
11
+ import { DISPATCH_TARGET_SYSTEMS } from './dispatch.js';
12
12
  import { dispatchException, EXCEPTIONS_BULK_DISPATCH_PATH } from './shared.js';
13
13
  /** Zod raw shape for `exception_bulk_dispatch` input — ids + target + optional queue. */
14
14
  export const bulkDispatchInputShape = {
@@ -18,11 +18,9 @@ export const bulkDispatchInputShape = {
18
18
  .max(100)
19
19
  .describe('Exception ids (UUIDs) to dispatch (1–100).'),
20
20
  targetSystem: z
21
- .string()
22
- .min(1)
23
- .max(255)
24
- .describe('Target system to dispatch all of them to (1–255). A free string here ' +
25
- '(the bulk endpoint does not constrain it to an enum), e.g. "JIRA".'),
21
+ .enum(DISPATCH_TARGET_SYSTEMS)
22
+ .describe('Target system to dispatch all of them to ' +
23
+ '(JIRA|SERVICENOW|WEBHOOK|MANUAL).'),
26
24
  queue: z
27
25
  .string()
28
26
  .max(255)
@@ -52,8 +50,8 @@ export function buildBulkDispatchBody(args) {
52
50
  export function registerExceptionBulkDispatchTool(server) {
53
51
  server.registerTool('exception_bulk_dispatch', {
54
52
  description: 'Dispatch many reconciliation exceptions to a target external system in a ' +
55
- 'single call. Provide exceptionIds (1–100 UUIDs) and targetSystem (free ' +
56
- 'string, 1–255 — not constrained to an enum here), and optionally a ' +
53
+ 'single call. Provide exceptionIds (1–100 UUIDs) and targetSystem ' +
54
+ '(JIRA|SERVICENOW|WEBHOOK|MANUAL), and optionally a ' +
57
55
  'queue/team (≤255). Partial success is supported — the response reports ' +
58
56
  'per-exception successes and failures. No tenant field is accepted. Errors ' +
59
57
  'surface as structured RFC 9457 problems.',
@@ -1 +1 @@
1
- {"version":3,"file":"bulk-dispatch.js","sourceRoot":"","sources":["../../../src/tools/exception/bulk-dispatch.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,EAAE;AACF,4EAA4E;AAC5E,4EAA4E;AAC5E,+EAA+E;AAC/E,6EAA6E;AAC7E,8EAA8E;AAC9E,6EAA6E;AAC7E,gFAAgF;AAChF,kBAAkB;AAElB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,OAAO,EAAE,iBAAiB,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAA;AAE9E,yFAAyF;AACzF,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,YAAY,EAAE,CAAC;SACZ,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACxB,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,CAAC,4CAA4C,CAAC;IACzD,YAAY,EAAE,CAAC;SACZ,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,CACP,uEAAuE;QACrE,oEAAoE,CACvE;IACH,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,8DAA8D,CAAC;CAC5E,CAAA;AAOD;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,IAAuB;IAEvB,MAAM,IAAI,GAA4B;QACpC,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,YAAY,EAAE,IAAI,CAAC,YAAY;KAChC,CAAA;IACD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;IACzB,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iCAAiC,CAAC,MAAiB;IACjE,MAAM,CAAC,YAAY,CACjB,yBAAyB,EACzB;QACE,WAAW,EACT,2EAA2E;YAC3E,yEAAyE;YACzE,qEAAqE;YACrE,yEAAyE;YACzE,4EAA4E;YAC5E,0CAA0C;QAC5C,WAAW,EAAE,sBAAsB;KACpC,EACD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACpB,OAAO,iBAAiB,CACtB;YACE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,6BAA6B;YACnC,IAAI,EAAE,qBAAqB,CAAC,IAAI,CAAC;SAClC,EACD,KAAK,CACN,CAAA;IACH,CAAC,CACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"bulk-dispatch.js","sourceRoot":"","sources":["../../../src/tools/exception/bulk-dispatch.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,EAAE;AACF,4EAA4E;AAC5E,4EAA4E;AAC5E,6EAA6E;AAC7E,8EAA8E;AAC9E,iFAAiF;AACjF,iFAAiF;AACjF,8DAA8D;AAE9D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAA;AAE9E,yFAAyF;AACzF,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,YAAY,EAAE,CAAC;SACZ,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACxB,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,CAAC,4CAA4C,CAAC;IACzD,YAAY,EAAE,CAAC;SACZ,IAAI,CAAC,uBAAuB,CAAC;SAC7B,QAAQ,CACP,2CAA2C;QACzC,mCAAmC,CACtC;IACH,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,8DAA8D,CAAC;CAC5E,CAAA;AAOD;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,IAAuB;IAEvB,MAAM,IAAI,GAA4B;QACpC,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,YAAY,EAAE,IAAI,CAAC,YAAY;KAChC,CAAA;IACD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;IACzB,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iCAAiC,CAAC,MAAiB;IACjE,MAAM,CAAC,YAAY,CACjB,yBAAyB,EACzB;QACE,WAAW,EACT,2EAA2E;YAC3E,mEAAmE;YACnE,qDAAqD;YACrD,yEAAyE;YACzE,4EAA4E;YAC5E,0CAA0C;QAC5C,WAAW,EAAE,sBAAsB;KACpC,EACD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACpB,OAAO,iBAAiB,CACtB;YACE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,6BAA6B;YACnC,IAAI,EAAE,qBAAqB,CAAC,IAAI,CAAC;SAClC,EACD,KAAK,CACN,CAAA;IACH,CAAC,CACF,CAAA;AACH,CAAC"}
@@ -57,10 +57,19 @@ export const listExceptionsInputShape = {
57
57
  .optional()
58
58
  .describe('Filter by severity (LOW|MEDIUM|HIGH|CRITICAL).'),
59
59
  reason: z
60
- .enum(EXCEPTION_REASONS)
60
+ // Free-form string, not a closed enum: reason codes are a GROWING taxonomy —
61
+ // every new engine capability mints one (AGED_BREAK / OVER_SETTLED /
62
+ // FX_RATE_VARIANCE were recent additions). A closed enum here would lag the
63
+ // backend and reject a valid, newly-minted reason at the client. The backend
64
+ // validates; the description carries the current known vocabulary as a hint.
65
+ // See docs/enum-policy.md (registered in INTENTIONALLY_OPEN_FIELDS).
66
+ .string()
61
67
  .optional()
62
- .describe('Filter by the reason the exception was raised (e.g. UNMATCHED, ' +
63
- 'FEE_VARIANCE, DUPLICATE_TRANSACTION).'),
68
+ .describe('Filter by the reason the exception was raised. Free-form string — the ' +
69
+ 'backend validates and this vocabulary grows as the engine gains new ' +
70
+ 'capabilities. Current known reason codes: ' +
71
+ EXCEPTION_REASONS.join(', ') +
72
+ '.'),
64
73
  assigned_to: z
65
74
  .string()
66
75
  .optional()
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/tools/exception/list.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/tools/exception/list.ts"],"names":[],"mappings":"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"}