@lerianstudio/matcher-mcp 5.0.0-beta.13 → 5.0.0-beta.131

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (273) hide show
  1. package/README.md +28 -13
  2. package/dist/auth/request-token.js +11 -69
  3. package/dist/auth/request-token.js.map +1 -1
  4. package/dist/config.js +6 -21
  5. package/dist/config.js.map +1 -1
  6. package/dist/copilot/agent.js +5 -9
  7. package/dist/copilot/agent.js.map +1 -1
  8. package/dist/copilot/provider-anthropic.js +75 -23
  9. package/dist/copilot/provider-anthropic.js.map +1 -1
  10. package/dist/copilot/provider-openrouter.js +5 -18
  11. package/dist/copilot/provider-openrouter.js.map +1 -1
  12. package/dist/copilot/provider-shared.js +11 -0
  13. package/dist/copilot/provider-shared.js.map +1 -1
  14. package/dist/copilot/speech-provider.js +84 -0
  15. package/dist/copilot/speech-provider.js.map +1 -0
  16. package/dist/copilot/sse.js +5 -0
  17. package/dist/copilot/sse.js.map +1 -1
  18. package/dist/copilot/system-prompt.js +6 -2
  19. package/dist/copilot/system-prompt.js.map +1 -1
  20. package/dist/copilot/tools.js +14 -65
  21. package/dist/copilot/tools.js.map +1 -1
  22. package/dist/copilot/transcribe-handler.js +8 -93
  23. package/dist/copilot/transcribe-handler.js.map +1 -1
  24. package/dist/copilot/turn-request.js +76 -0
  25. package/dist/copilot/turn-request.js.map +1 -0
  26. package/dist/copilot/turns-handler.js +11 -102
  27. package/dist/copilot/turns-handler.js.map +1 -1
  28. package/dist/matcher/client.js +14 -0
  29. package/dist/matcher/client.js.map +1 -1
  30. package/dist/matcher/idempotency.js +94 -0
  31. package/dist/matcher/idempotency.js.map +1 -0
  32. package/dist/observability/otel.js +7 -29
  33. package/dist/observability/otel.js.map +1 -1
  34. package/dist/server.js +12 -81
  35. package/dist/server.js.map +1 -1
  36. package/dist/spec/curated-operations.js +111 -95
  37. package/dist/spec/curated-operations.js.map +1 -1
  38. package/dist/spec/enum-policy.js +21 -26
  39. package/dist/spec/enum-policy.js.map +1 -1
  40. package/dist/spec/openapi.yaml +875 -64
  41. package/dist/spec/schema-parity.js +23 -28
  42. package/dist/spec/schema-parity.js.map +1 -1
  43. package/dist/tools/context/create.js +14 -3
  44. package/dist/tools/context/create.js.map +1 -1
  45. package/dist/tools/context/index.js +137 -17
  46. package/dist/tools/context/index.js.map +1 -1
  47. package/dist/tools/context/list.js +9 -35
  48. package/dist/tools/context/list.js.map +1 -1
  49. package/dist/tools/context/setup-progress.js +3 -2
  50. package/dist/tools/context/setup-progress.js.map +1 -1
  51. package/dist/tools/context/shared.js +7 -48
  52. package/dist/tools/context/shared.js.map +1 -1
  53. package/dist/tools/context/update.js +15 -7
  54. package/dist/tools/context/update.js.map +1 -1
  55. package/dist/tools/curated-tool.js +39 -0
  56. package/dist/tools/curated-tool.js.map +1 -0
  57. package/dist/tools/dashboard/index.js +124 -19
  58. package/dist/tools/dashboard/index.js.map +1 -1
  59. package/dist/tools/dashboard/shared.js +9 -68
  60. package/dist/tools/dashboard/shared.js.map +1 -1
  61. package/dist/tools/dispute/close.js +5 -5
  62. package/dist/tools/dispute/close.js.map +1 -1
  63. package/dist/tools/dispute/index.js +34 -6
  64. package/dist/tools/dispute/index.js.map +1 -1
  65. package/dist/tools/dispute/list.js +18 -47
  66. package/dist/tools/dispute/list.js.map +1 -1
  67. package/dist/tools/dispute/shared.js +4 -43
  68. package/dist/tools/dispute/shared.js.map +1 -1
  69. package/dist/tools/dispute/submit-evidence.js +5 -5
  70. package/dist/tools/dispute/submit-evidence.js.map +1 -1
  71. package/dist/tools/exception/add-comment.js +3 -2
  72. package/dist/tools/exception/add-comment.js.map +1 -1
  73. package/dist/tools/exception/adjust-entry.js +5 -5
  74. package/dist/tools/exception/adjust-entry.js.map +1 -1
  75. package/dist/tools/exception/bulk-assign.js +3 -2
  76. package/dist/tools/exception/bulk-assign.js.map +1 -1
  77. package/dist/tools/exception/bulk-dispatch.js +12 -4
  78. package/dist/tools/exception/bulk-dispatch.js.map +1 -1
  79. package/dist/tools/exception/bulk-resolve.js +3 -2
  80. package/dist/tools/exception/bulk-resolve.js.map +1 -1
  81. package/dist/tools/exception/dispatch.js +13 -5
  82. package/dist/tools/exception/dispatch.js.map +1 -1
  83. package/dist/tools/exception/force-match.js +3 -2
  84. package/dist/tools/exception/force-match.js.map +1 -1
  85. package/dist/tools/exception/history.js +8 -24
  86. package/dist/tools/exception/history.js.map +1 -1
  87. package/dist/tools/exception/index.js +88 -18
  88. package/dist/tools/exception/index.js.map +1 -1
  89. package/dist/tools/exception/list.js +14 -57
  90. package/dist/tools/exception/list.js.map +1 -1
  91. package/dist/tools/exception/open-dispute.js +3 -2
  92. package/dist/tools/exception/open-dispute.js.map +1 -1
  93. package/dist/tools/exception/shared.js +10 -46
  94. package/dist/tools/exception/shared.js.map +1 -1
  95. package/dist/tools/fee-rule/create.js +5 -5
  96. package/dist/tools/fee-rule/create.js.map +1 -1
  97. package/dist/tools/fee-rule/index.js +50 -8
  98. package/dist/tools/fee-rule/index.js.map +1 -1
  99. package/dist/tools/fee-rule/list.js +9 -29
  100. package/dist/tools/fee-rule/list.js.map +1 -1
  101. package/dist/tools/fee-rule/shared.js +5 -47
  102. package/dist/tools/fee-rule/shared.js.map +1 -1
  103. package/dist/tools/fee-rule/update.js +5 -5
  104. package/dist/tools/fee-rule/update.js.map +1 -1
  105. package/dist/tools/fee-schedule/create.js +8 -3
  106. package/dist/tools/fee-schedule/create.js.map +1 -1
  107. package/dist/tools/fee-schedule/index.js +62 -11
  108. package/dist/tools/fee-schedule/index.js.map +1 -1
  109. package/dist/tools/fee-schedule/list.js +8 -24
  110. package/dist/tools/fee-schedule/list.js.map +1 -1
  111. package/dist/tools/fee-schedule/shared.js +5 -44
  112. package/dist/tools/fee-schedule/shared.js.map +1 -1
  113. package/dist/tools/fee-schedule/simulate.js +5 -5
  114. package/dist/tools/fee-schedule/simulate.js.map +1 -1
  115. package/dist/tools/fee-schedule/update.js +5 -5
  116. package/dist/tools/fee-schedule/update.js.map +1 -1
  117. package/dist/tools/field-map/create.js +3 -2
  118. package/dist/tools/field-map/create.js.map +1 -1
  119. package/dist/tools/field-map/index.js +65 -11
  120. package/dist/tools/field-map/index.js.map +1 -1
  121. package/dist/tools/field-map/list.js +9 -29
  122. package/dist/tools/field-map/list.js.map +1 -1
  123. package/dist/tools/field-map/shared.js +6 -42
  124. package/dist/tools/field-map/shared.js.map +1 -1
  125. package/dist/tools/field-map/update.js +3 -2
  126. package/dist/tools/field-map/update.js.map +1 -1
  127. package/dist/tools/generic/invoke.js +16 -39
  128. package/dist/tools/generic/invoke.js.map +1 -1
  129. package/dist/tools/ingestion/index.js +100 -12
  130. package/dist/tools/ingestion/index.js.map +1 -1
  131. package/dist/tools/ingestion/job-transactions-list.js +10 -40
  132. package/dist/tools/ingestion/job-transactions-list.js.map +1 -1
  133. package/dist/tools/ingestion/jobs-list.js +9 -35
  134. package/dist/tools/ingestion/jobs-list.js.map +1 -1
  135. package/dist/tools/ingestion/shared.js +4 -41
  136. package/dist/tools/ingestion/shared.js.map +1 -1
  137. package/dist/tools/ingestion/transactions-search.js +9 -44
  138. package/dist/tools/ingestion/transactions-search.js.map +1 -1
  139. package/dist/tools/ingestion/upload.js +3 -2
  140. package/dist/tools/ingestion/upload.js.map +1 -1
  141. package/dist/tools/input-fields.js +51 -0
  142. package/dist/tools/input-fields.js.map +1 -0
  143. package/dist/tools/match-rule/index.js +130 -13
  144. package/dist/tools/match-rule/index.js.map +1 -1
  145. package/dist/tools/match-rule/list.js +9 -33
  146. package/dist/tools/match-rule/list.js.map +1 -1
  147. package/dist/tools/match-rule/shared.js +16 -46
  148. package/dist/tools/match-rule/shared.js.map +1 -1
  149. package/dist/tools/match-rule/update.js +7 -11
  150. package/dist/tools/match-rule/update.js.map +1 -1
  151. package/dist/tools/matching/get.js +5 -5
  152. package/dist/tools/matching/get.js.map +1 -1
  153. package/dist/tools/matching/groups.js +6 -14
  154. package/dist/tools/matching/groups.js.map +1 -1
  155. package/dist/tools/matching/index.js +77 -5
  156. package/dist/tools/matching/index.js.map +1 -1
  157. package/dist/tools/matching/list.js +9 -32
  158. package/dist/tools/matching/list.js.map +1 -1
  159. package/dist/tools/matching/shared.js +5 -46
  160. package/dist/tools/matching/shared.js.map +1 -1
  161. package/dist/tools/query-handler.js +9 -0
  162. package/dist/tools/query-handler.js.map +1 -0
  163. package/dist/tools/report/index.js +260 -30
  164. package/dist/tools/report/index.js.map +1 -1
  165. package/dist/tools/report/shared.js +24 -98
  166. package/dist/tools/report/shared.js.map +1 -1
  167. package/dist/tools/request-fields.js +17 -0
  168. package/dist/tools/request-fields.js.map +1 -0
  169. package/dist/tools/shared-dispatch.js +38 -0
  170. package/dist/tools/shared-dispatch.js.map +1 -0
  171. package/dist/tools/source/create.js +146 -23
  172. package/dist/tools/source/create.js.map +1 -1
  173. package/dist/tools/source/index.js +101 -13
  174. package/dist/tools/source/index.js.map +1 -1
  175. package/dist/tools/source/list.js +9 -32
  176. package/dist/tools/source/list.js.map +1 -1
  177. package/dist/tools/source/shared.js +5 -42
  178. package/dist/tools/source/shared.js.map +1 -1
  179. package/dist/tools/source/update.js +16 -33
  180. package/dist/tools/source/update.js.map +1 -1
  181. package/dist/tools/workspace/usage.js +27 -41
  182. package/dist/tools/workspace/usage.js.map +1 -1
  183. package/package.json +4 -4
  184. package/dist/tools/context/archive.js +0 -37
  185. package/dist/tools/context/archive.js.map +0 -1
  186. package/dist/tools/context/get.js +0 -31
  187. package/dist/tools/context/get.js.map +0 -1
  188. package/dist/tools/context/next-step.js +0 -99
  189. package/dist/tools/context/next-step.js.map +0 -1
  190. package/dist/tools/context/restore.js +0 -34
  191. package/dist/tools/context/restore.js.map +0 -1
  192. package/dist/tools/dashboard/aggregates.js +0 -37
  193. package/dist/tools/dashboard/aggregates.js.map +0 -1
  194. package/dist/tools/dashboard/cash-impact.js +0 -37
  195. package/dist/tools/dashboard/cash-impact.js.map +0 -1
  196. package/dist/tools/dashboard/match-rate.js +0 -37
  197. package/dist/tools/dashboard/match-rate.js.map +0 -1
  198. package/dist/tools/dashboard/metrics.js +0 -37
  199. package/dist/tools/dashboard/metrics.js.map +0 -1
  200. package/dist/tools/dashboard/sla.js +0 -34
  201. package/dist/tools/dashboard/sla.js.map +0 -1
  202. package/dist/tools/dashboard/source-breakdown.js +0 -37
  203. package/dist/tools/dashboard/source-breakdown.js.map +0 -1
  204. package/dist/tools/dashboard/volume.js +0 -37
  205. package/dist/tools/dashboard/volume.js.map +0 -1
  206. package/dist/tools/dispute/get.js +0 -27
  207. package/dist/tools/dispute/get.js.map +0 -1
  208. package/dist/tools/exception/delete-comment.js +0 -40
  209. package/dist/tools/exception/delete-comment.js.map +0 -1
  210. package/dist/tools/exception/get.js +0 -34
  211. package/dist/tools/exception/get.js.map +0 -1
  212. package/dist/tools/exception/list-comments.js +0 -35
  213. package/dist/tools/exception/list-comments.js.map +0 -1
  214. package/dist/tools/fee-rule/delete.js +0 -27
  215. package/dist/tools/fee-rule/delete.js.map +0 -1
  216. package/dist/tools/fee-rule/get.js +0 -27
  217. package/dist/tools/fee-rule/get.js.map +0 -1
  218. package/dist/tools/fee-schedule/delete.js +0 -32
  219. package/dist/tools/fee-schedule/delete.js.map +0 -1
  220. package/dist/tools/fee-schedule/get.js +0 -30
  221. package/dist/tools/fee-schedule/get.js.map +0 -1
  222. package/dist/tools/field-map/delete.js +0 -37
  223. package/dist/tools/field-map/delete.js.map +0 -1
  224. package/dist/tools/field-map/get.js +0 -43
  225. package/dist/tools/field-map/get.js.map +0 -1
  226. package/dist/tools/ingestion/job-errors-list.js +0 -45
  227. package/dist/tools/ingestion/job-errors-list.js.map +0 -1
  228. package/dist/tools/ingestion/job-get.js +0 -42
  229. package/dist/tools/ingestion/job-get.js.map +0 -1
  230. package/dist/tools/ingestion/transaction-ignore.js +0 -51
  231. package/dist/tools/ingestion/transaction-ignore.js.map +0 -1
  232. package/dist/tools/match-rule/create.js +0 -67
  233. package/dist/tools/match-rule/create.js.map +0 -1
  234. package/dist/tools/match-rule/delete.js +0 -35
  235. package/dist/tools/match-rule/delete.js.map +0 -1
  236. package/dist/tools/match-rule/get.js +0 -32
  237. package/dist/tools/match-rule/get.js.map +0 -1
  238. package/dist/tools/match-rule/reorder.js +0 -45
  239. package/dist/tools/match-rule/reorder.js.map +0 -1
  240. package/dist/tools/matching/start.js +0 -81
  241. package/dist/tools/matching/start.js.map +0 -1
  242. package/dist/tools/report/count-exceptions.js +0 -46
  243. package/dist/tools/report/count-exceptions.js.map +0 -1
  244. package/dist/tools/report/count-matched.js +0 -47
  245. package/dist/tools/report/count-matched.js.map +0 -1
  246. package/dist/tools/report/count-transactions.js +0 -45
  247. package/dist/tools/report/count-transactions.js.map +0 -1
  248. package/dist/tools/report/count-unmatched.js +0 -45
  249. package/dist/tools/report/count-unmatched.js.map +0 -1
  250. package/dist/tools/report/export-exceptions.js +0 -48
  251. package/dist/tools/report/export-exceptions.js.map +0 -1
  252. package/dist/tools/report/export-matched.js +0 -49
  253. package/dist/tools/report/export-matched.js.map +0 -1
  254. package/dist/tools/report/export-summary.js +0 -49
  255. package/dist/tools/report/export-summary.js.map +0 -1
  256. package/dist/tools/report/export-unmatched.js +0 -49
  257. package/dist/tools/report/export-unmatched.js.map +0 -1
  258. package/dist/tools/report/export-variance.js +0 -48
  259. package/dist/tools/report/export-variance.js.map +0 -1
  260. package/dist/tools/report/matched.js +0 -48
  261. package/dist/tools/report/matched.js.map +0 -1
  262. package/dist/tools/report/summary.js +0 -43
  263. package/dist/tools/report/summary.js.map +0 -1
  264. package/dist/tools/report/unmatched.js +0 -48
  265. package/dist/tools/report/unmatched.js.map +0 -1
  266. package/dist/tools/report/variance.js +0 -48
  267. package/dist/tools/report/variance.js.map +0 -1
  268. package/dist/tools/source/archive.js +0 -46
  269. package/dist/tools/source/archive.js.map +0 -1
  270. package/dist/tools/source/get.js +0 -57
  271. package/dist/tools/source/get.js.map +0 -1
  272. package/dist/tools/source/restore.js +0 -39
  273. package/dist/tools/source/restore.js.map +0 -1
@@ -1,22 +1,73 @@
1
1
  // Curated fee-schedule vertical (task 1.3.2): six typed tools over the matcher
2
2
  // fee-schedule resource — create, list, get, update, delete, simulate — proving
3
3
  // the typed pattern coexists with the generic invoke on one client + one token
4
- // relay. Each tool shares the fail-closed relay (shared.ts) and the RFC 9457 →
5
- // tool-error mapping (toToolError) with the generic surface, so curated and
6
- // generic map matcher errors identically. No tool carries a tenant field.
4
+ // relay. Each tool shares the fail-closed relay (shared-dispatch.ts) and the
5
+ // RFC 9457 → tool-error mapping (toToolError) with the generic surface, so
6
+ // curated and generic map matcher errors identically. No tool carries a tenant
7
+ // field.
8
+ //
9
+ // get and delete are nothing but the /v1/fee-schedules/{id} path, a method and
10
+ // a description, so they are declared as two rows and registered by the one
11
+ // shared loop; create, list, update and simulate carry request bodies or query
12
+ // builders and stay as files.
13
+ import { z } from 'zod';
14
+ import { registerCuratedTools } from '../curated-tool.js';
7
15
  import { registerFeeScheduleCreateTool } from './create.js';
8
- import { registerFeeScheduleDeleteTool } from './delete.js';
9
- import { registerFeeScheduleGetTool } from './get.js';
10
16
  import { registerFeeScheduleListTool } from './list.js';
17
+ import { feeSchedulePath } from './shared.js';
11
18
  import { registerFeeScheduleSimulateTool } from './simulate.js';
12
19
  import { registerFeeScheduleUpdateTool } from './update.js';
20
+ /**
21
+ * The fee-schedule registration list, IN PUBLISHED ORDER: thin tools inline as data
22
+ * rows, the tools that still need their own file by their register function.
23
+ * This list is the order `tools/list` returns, so moving an entry moves what a
24
+ * client renders and what an agent prompt built from it reads first.
25
+ *
26
+ * Every description string is the hand-tuned LLM guidance a client sees
27
+ * verbatim; the published-surface golden is what proves an edit here dropped no
28
+ * character and moved no tool.
29
+ */
30
+ const FEE_SCHEDULE_TOOLS = [
31
+ registerFeeScheduleCreateTool,
32
+ registerFeeScheduleListTool,
33
+ {
34
+ name: 'fee_schedule_get',
35
+ description: 'Fetch a single fee schedule by id (UUID). The schedule must belong to ' +
36
+ "your token's tenant. Returns the schedule, or a structured RFC 9457 " +
37
+ 'error (e.g. 404 if it does not exist or is not yours).',
38
+ inputShape: {
39
+ scheduleId: z
40
+ .string()
41
+ .min(1)
42
+ .describe('The fee schedule id (UUID) to fetch.'),
43
+ },
44
+ request: (args) => ({
45
+ method: 'GET',
46
+ path: feeSchedulePath(String(args.scheduleId)),
47
+ }),
48
+ },
49
+ registerFeeScheduleUpdateTool,
50
+ {
51
+ name: 'fee_schedule_delete',
52
+ description: 'Delete a fee schedule by id (UUID). Rejected with 409 while fee rules ' +
53
+ 'still reference it — detach those first. The schedule must belong to ' +
54
+ "your token's tenant (no tenant field is accepted). Returns no content on " +
55
+ 'success, or a structured RFC 9457 error.',
56
+ inputShape: {
57
+ scheduleId: z
58
+ .string()
59
+ .min(1)
60
+ .describe('The fee schedule id (UUID) to delete.'),
61
+ },
62
+ request: (args) => ({
63
+ method: 'DELETE',
64
+ path: feeSchedulePath(String(args.scheduleId)),
65
+ }),
66
+ },
67
+ registerFeeScheduleSimulateTool,
68
+ ];
13
69
  /** Register all six curated fee-schedule tools on the given server. */
14
70
  export function registerFeeScheduleTools(server) {
15
- registerFeeScheduleCreateTool(server);
16
- registerFeeScheduleListTool(server);
17
- registerFeeScheduleGetTool(server);
18
- registerFeeScheduleUpdateTool(server);
19
- registerFeeScheduleDeleteTool(server);
20
- registerFeeScheduleSimulateTool(server);
71
+ registerCuratedTools(server, FEE_SCHEDULE_TOOLS);
21
72
  }
22
73
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/fee-schedule/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,gFAAgF;AAChF,+EAA+E;AAC/E,+EAA+E;AAC/E,4EAA4E;AAC5E,0EAA0E;AAI1E,OAAO,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAA;AAC3D,OAAO,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAA;AAC3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAA;AACrD,OAAO,EAAE,2BAA2B,EAAE,MAAM,WAAW,CAAA;AACvD,OAAO,EAAE,+BAA+B,EAAE,MAAM,eAAe,CAAA;AAC/D,OAAO,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAA;AAE3D,uEAAuE;AACvE,MAAM,UAAU,wBAAwB,CAAC,MAAiB;IACxD,6BAA6B,CAAC,MAAM,CAAC,CAAA;IACrC,2BAA2B,CAAC,MAAM,CAAC,CAAA;IACnC,0BAA0B,CAAC,MAAM,CAAC,CAAA;IAClC,6BAA6B,CAAC,MAAM,CAAC,CAAA;IACrC,6BAA6B,CAAC,MAAM,CAAC,CAAA;IACrC,+BAA+B,CAAC,MAAM,CAAC,CAAA;AACzC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/fee-schedule/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,gFAAgF;AAChF,+EAA+E;AAC/E,6EAA6E;AAC7E,2EAA2E;AAC3E,+EAA+E;AAC/E,SAAS;AACT,EAAE;AACF,+EAA+E;AAC/E,4EAA4E;AAC5E,+EAA+E;AAC/E,8BAA8B;AAE9B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,OAAO,EAAE,oBAAoB,EAAqB,MAAM,oBAAoB,CAAA;AAC5E,OAAO,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAA;AAC3D,OAAO,EAAE,2BAA2B,EAAE,MAAM,WAAW,CAAA;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,+BAA+B,EAAE,MAAM,eAAe,CAAA;AAC/D,OAAO,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAA;AAE3D;;;;;;;;;GASG;AACH,MAAM,kBAAkB,GAA4B;IAClD,6BAA6B;IAC7B,2BAA2B;IAC3B;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EACT,wEAAwE;YACxE,sEAAsE;YACtE,wDAAwD;QAC1D,UAAU,EAAE;YACV,UAAU,EAAE,CAAC;iBACV,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,CAAC,sCAAsC,CAAC;SACpD;QACD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAClB,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAC/C,CAAC;KACH;IACD,6BAA6B;IAC7B;QACE,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EACT,wEAAwE;YACxE,uEAAuE;YACvE,2EAA2E;YAC3E,0CAA0C;QAC5C,UAAU,EAAE;YACV,UAAU,EAAE,CAAC;iBACV,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,CAAC,uCAAuC,CAAC;SACrD;QACD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAClB,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAC/C,CAAC;KACH;IACD,+BAA+B;CAChC,CAAA;AAED,uEAAuE;AACvE,MAAM,UAAU,wBAAwB,CAAC,MAAiB;IACxD,oBAAoB,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;AAClD,CAAC"}
@@ -5,16 +5,14 @@
5
5
  // — no auto-pagination (the model re-calls with the returned cursor). The list
6
6
  // is implicitly tenant-scoped by the relayed token; no tenant field is accepted.
7
7
  import { z } from 'zod';
8
- import { dispatchFeeSchedule, FEE_SCHEDULES_PATH } from './shared.js';
8
+ import { pageLimit } from '../input-fields.js';
9
+ import { queryHandler } from '../query-handler.js';
10
+ import { pickQuery } from '../request-fields.js';
11
+ import { dispatchToolRequest } from '../shared-dispatch.js';
12
+ import { FEE_SCHEDULES_PATH } from './shared.js';
9
13
  /** Zod raw shape for `fee_schedule_list` input — pagination knobs only. */
10
14
  export const listFeeSchedulesInputShape = {
11
- limit: z
12
- .number()
13
- .int()
14
- .min(1)
15
- .max(200)
16
- .optional()
17
- .describe('Maximum number of records to return (1–200, default 20).'),
15
+ limit: pageLimit,
18
16
  cursor: z
19
17
  .string()
20
18
  .optional()
@@ -23,14 +21,7 @@ export const listFeeSchedulesInputShape = {
23
21
  };
24
22
  /** Build the list query, omitting unset knobs so the request stays minimal. */
25
23
  function buildListQuery(args) {
26
- const query = {};
27
- if (args.limit !== undefined) {
28
- query.limit = args.limit;
29
- }
30
- if (args.cursor !== undefined) {
31
- query.cursor = args.cursor;
32
- }
33
- return Object.keys(query).length > 0 ? query : undefined;
24
+ return pickQuery(args, ['limit', 'cursor']);
34
25
  }
35
26
  /**
36
27
  * Register `fee_schedule_list`. Passes limit/cursor through and returns matcher's
@@ -44,13 +35,6 @@ export function registerFeeScheduleListTool(server) {
44
35
  '— paginate by re-calling with the returned nextCursor. No tenant field ' +
45
36
  'is accepted; the tenant is derived from your bearer token.',
46
37
  inputSchema: listFeeSchedulesInputShape,
47
- }, async (args, extra) => {
48
- const query = buildListQuery(args);
49
- return dispatchFeeSchedule({
50
- method: 'GET',
51
- path: FEE_SCHEDULES_PATH,
52
- ...(query !== undefined ? { query } : {}),
53
- }, extra);
54
- });
38
+ }, queryHandler(buildListQuery, () => FEE_SCHEDULES_PATH, dispatchToolRequest));
55
39
  }
56
40
  //# sourceMappingURL=list.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/tools/fee-schedule/list.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,EAAE;AACF,iFAAiF;AACjF,gFAAgF;AAChF,+EAA+E;AAC/E,iFAAiF;AAEjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAKvB,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAErE,2EAA2E;AAC3E,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,0DAA0D,CAAC;IACvE,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,mEAAmE;QACjE,oEAAoE,CACvE;CACJ,CAAA;AAOD,+EAA+E;AAC/E,SAAS,cAAc,CAAC,IAA2B;IACjD,MAAM,KAAK,GAAoC,EAAE,CAAA;IACjD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC7B,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;IAC1B,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9B,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IAC5B,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;AAC1D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CAAC,MAAiB;IAC3D,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,WAAW,EACT,0EAA0E;YAC1E,0EAA0E;YAC1E,yEAAyE;YACzE,4DAA4D;QAC9D,WAAW,EAAE,0BAA0B;KACxC,EACD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACpB,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,CAAA;QAClC,OAAO,mBAAmB,CACxB;YACE,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,kBAAkB;YACxB,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1C,EACD,KAAK,CACN,CAAA;IACH,CAAC,CACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/tools/fee-schedule/list.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,EAAE;AACF,iFAAiF;AACjF,gFAAgF;AAChF,+EAA+E;AAC/E,iFAAiF;AAEjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAG9C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAGlD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAEhD,2EAA2E;AAC3E,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,mEAAmE;QACjE,oEAAoE,CACvE;CACJ,CAAA;AAOD,+EAA+E;AAC/E,SAAS,cAAc,CAAC,IAA2B;IACjD,OAAO,SAAS,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAA;AAC7C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CAAC,MAAiB;IAC3D,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,WAAW,EACT,0EAA0E;YAC1E,0EAA0E;YAC1E,yEAAyE;YACzE,4DAA4D;QAC9D,WAAW,EAAE,0BAA0B;KACxC,EACD,YAAY,CACV,cAAc,EACd,GAAG,EAAE,CAAC,kBAAkB,EACxB,mBAAmB,CACpB,CACF,CAAA;AACH,CAAC"}
@@ -1,58 +1,19 @@
1
1
  // Shared plumbing for the curated fee-schedule tools.
2
2
  //
3
- // Every fee-schedule tool follows the same relay shape: fail-closed auth via
4
- // requireMatcherClient, dispatch one assembled MatcherRequest, then return
5
- // matcher's JSON on success or the SHARED toToolError on a MatcherApiError. This
6
- // module factors that boilerplate exactly once so the six tools stay thin (just
7
- // "build the request") and so curated + generic surfaces map matcher errors
8
- // through the identical path (toToolError) — the whole point of task 1.3.2.
3
+ // This module holds the fee-schedule resource paths and nothing else, factored
4
+ // exactly once so the two table rows in index.ts and the four tools that keep
5
+ // their own file address the same URLs. The relay itself lives in
6
+ // shared-dispatch.ts, so curated and generic surfaces map matcher errors
7
+ // through the identical path (toToolError).
9
8
  //
10
9
  // Security: the bearer token is never read here directly — requireMatcherClient
11
10
  // owns the request-scoped relay and fails closed when no usable credential was
12
11
  // provided. No tenant identifier is ever read or injected (matcher derives
13
12
  // tenant from the relayed JWT); no fee-schedule tool input carries one.
14
- import { requireMatcherClient, UnauthenticatedError, } from '../../auth/request-token.js';
15
- import { isMatcherApiError, toToolError } from '../tool-error.js';
16
13
  /** Base path for the fee-schedule resource (tenant-scoped; tenant from the token). */
17
14
  export const FEE_SCHEDULES_PATH = '/v1/fee-schedules';
18
15
  /** Build the single-schedule sub-path, URL-encoding the id so reserved chars are safe. */
19
16
  export function feeSchedulePath(scheduleId) {
20
17
  return `${FEE_SCHEDULES_PATH}/${encodeURIComponent(scheduleId)}`;
21
18
  }
22
- /**
23
- * Run one assembled request through the relay: fail-closed auth, dispatch, and
24
- * RFC 9457 → tool-error mapping — identical to the generic invoke's dispatch so
25
- * both surfaces produce the same structured error shape.
26
- *
27
- * `clientFor` is injectable for tests; production callers pass nothing and get
28
- * the request-scoped, fail-closed `requireMatcherClient`.
29
- */
30
- export async function dispatchFeeSchedule(request, extra, clientFor = requireMatcherClient) {
31
- let client;
32
- try {
33
- // Fail-closed on a missing / empty / non-Bearer credential.
34
- client = clientFor(extra);
35
- }
36
- catch (err) {
37
- if (err instanceof UnauthenticatedError) {
38
- return { isError: true, content: [{ type: 'text', text: err.message }] };
39
- }
40
- throw err;
41
- }
42
- try {
43
- const result = await client.request(request);
44
- // Success → matcher's JSON returned as-is (incl. pagination envelopes and
45
- // 204 → null for delete).
46
- return { content: [{ type: 'text', text: JSON.stringify(result ?? null) }] };
47
- }
48
- catch (err) {
49
- // RFC 9457 problem → the SHARED structured tool error (status/title/detail/
50
- // code preserved). A non-matcher error is a bug, not a matcher failure, and
51
- // is re-thrown rather than masqueraded as one.
52
- if (isMatcherApiError(err)) {
53
- return toToolError(err);
54
- }
55
- throw err;
56
- }
57
- }
58
19
  //# sourceMappingURL=shared.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/tools/fee-schedule/shared.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,EAAE;AACF,6EAA6E;AAC7E,2EAA2E;AAC3E,iFAAiF;AACjF,gFAAgF;AAChF,4EAA4E;AAC5E,4EAA4E;AAC5E,EAAE;AACF,gFAAgF;AAChF,+EAA+E;AAC/E,2EAA2E;AAC3E,wEAAwE;AAIxE,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GAErB,MAAM,6BAA6B,CAAA;AAEpC,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEjE,sFAAsF;AACtF,MAAM,CAAC,MAAM,kBAAkB,GAAG,mBAAmB,CAAA;AAErD,0FAA0F;AAC1F,MAAM,UAAU,eAAe,CAAC,UAAkB;IAChD,OAAO,GAAG,kBAAkB,IAAI,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAA;AAClE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAuB,EACvB,KAAmC,EACnC,YAAyD,oBAAoB;IAE7E,IAAI,MAAqB,CAAA;IACzB,IAAI,CAAC;QACH,4DAA4D;QAC5D,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAA;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,oBAAoB,EAAE,CAAC;YACxC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,CAAA;QAC1E,CAAC;QACD,MAAM,GAAG,CAAA;IACX,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAC5C,0EAA0E;QAC1E,0BAA0B;QAC1B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,EAAE,CAAC,EAAE,CAAA;IAC9E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,4EAA4E;QAC5E,4EAA4E;QAC5E,+CAA+C;QAC/C,IAAI,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO,WAAW,CAAC,GAAG,CAAC,CAAA;QACzB,CAAC;QACD,MAAM,GAAG,CAAA;IACX,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/tools/fee-schedule/shared.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,EAAE;AACF,+EAA+E;AAC/E,8EAA8E;AAC9E,kEAAkE;AAClE,yEAAyE;AACzE,4CAA4C;AAC5C,EAAE;AACF,gFAAgF;AAChF,+EAA+E;AAC/E,2EAA2E;AAC3E,wEAAwE;AAExE,sFAAsF;AACtF,MAAM,CAAC,MAAM,kBAAkB,GAAG,mBAAmB,CAAA;AAErD,0FAA0F;AAC1F,MAAM,UAAU,eAAe,CAAC,UAAkB;IAChD,OAAO,GAAG,kBAAkB,IAAI,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAA;AAClE,CAAC"}
@@ -6,7 +6,9 @@
6
6
  // float precision loss. scheduleId is a UUID path param; no tenant field is
7
7
  // accepted (matcher scopes to the relayed token's tenant).
8
8
  import { z } from 'zod';
9
- import { dispatchFeeSchedule, feeSchedulePath } from './shared.js';
9
+ import { bodyWithout } from '../request-fields.js';
10
+ import { dispatchToolRequest } from '../shared-dispatch.js';
11
+ import { feeSchedulePath } from './shared.js';
10
12
  /** Zod raw shape for `fee_schedule_simulate` input — id (path) + body fields. */
11
13
  export const simulateFeeScheduleInputShape = {
12
14
  scheduleId: z
@@ -25,9 +27,7 @@ export const simulateFeeScheduleInputShape = {
25
27
  * Build the simulate POST body from the input minus the path-only `scheduleId`.
26
28
  */
27
29
  export function buildSimulateBody(args) {
28
- const { scheduleId: _scheduleId, ...body } = args;
29
- void _scheduleId;
30
- return body;
30
+ return bodyWithout(args, ['scheduleId']);
31
31
  }
32
32
  /**
33
33
  * Register `fee_schedule_simulate`. Splits the id (path) from the body, dispatches
@@ -44,7 +44,7 @@ export function registerFeeScheduleSimulateTool(server) {
44
44
  'field is accepted. Errors surface as structured RFC 9457 problems.',
45
45
  inputSchema: simulateFeeScheduleInputShape,
46
46
  }, async (args, extra) => {
47
- return dispatchFeeSchedule({
47
+ return dispatchToolRequest({
48
48
  method: 'POST',
49
49
  path: `${feeSchedulePath(args.scheduleId)}/simulate`,
50
50
  body: buildSimulateBody(args),
@@ -1 +1 @@
1
- {"version":3,"file":"simulate.js","sourceRoot":"","sources":["../../../src/tools/fee-schedule/simulate.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,EAAE;AACF,4EAA4E;AAC5E,+EAA+E;AAC/E,gFAAgF;AAChF,4EAA4E;AAC5E,2DAA2D;AAE3D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAElE,iFAAiF;AACjF,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,iDAAiD,CAAC;IAC9D,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,QAAQ,CACP,0EAA0E;QACxE,0EAA0E,CAC7E;IACH,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,CAAC,yDAAyD,CAAC;CACvE,CAAA;AAOD;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAA8B;IAE9B,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAA;IACjD,KAAK,WAAW,CAAA;IAChB,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,+BAA+B,CAAC,MAAiB;IAC/D,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,WAAW,EACT,mEAAmE;YACnE,oEAAoE;YACpE,uEAAuE;YACvE,wEAAwE;YACxE,oEAAoE;QACtE,WAAW,EAAE,6BAA6B;KAC3C,EACD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACpB,OAAO,mBAAmB,CACxB;YACE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,GAAG,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW;YACpD,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC;SAC9B,EACD,KAAK,CACN,CAAA;IACH,CAAC,CACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"simulate.js","sourceRoot":"","sources":["../../../src/tools/fee-schedule/simulate.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,EAAE;AACF,4EAA4E;AAC5E,+EAA+E;AAC/E,gFAAgF;AAChF,4EAA4E;AAC5E,2DAA2D;AAE3D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAElD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAE7C,iFAAiF;AACjF,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,iDAAiD,CAAC;IAC9D,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,QAAQ,CACP,0EAA0E;QACxE,0EAA0E,CAC7E;IACH,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,CAAC,yDAAyD,CAAC;CACvE,CAAA;AAOD;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAA8B;IAE9B,OAAO,WAAW,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,CAAC,CAAA;AAC1C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,+BAA+B,CAAC,MAAiB;IAC/D,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,WAAW,EACT,mEAAmE;YACnE,oEAAoE;YACpE,uEAAuE;YACvE,wEAAwE;YACxE,oEAAoE;QACtE,WAAW,EAAE,6BAA6B;KAC3C,EACD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACpB,OAAO,mBAAmB,CACxB;YACE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,GAAG,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW;YACpD,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC;SAC9B,EACD,KAAK,CACN,CAAA;IACH,CAAC,CACF,CAAA;AACH,CAAC"}
@@ -6,8 +6,10 @@
6
6
  // create time), so neither does this tool. scheduleId is a UUID path param; no
7
7
  // tenant field is accepted (matcher scopes to the relayed token's tenant).
8
8
  import { z } from 'zod';
9
+ import { bodyWithout } from '../request-fields.js';
9
10
  import { APPLICATION_ORDERS, ROUNDING_MODES } from './create.js';
10
- import { dispatchFeeSchedule, feeSchedulePath } from './shared.js';
11
+ import { dispatchToolRequest } from '../shared-dispatch.js';
12
+ import { feeSchedulePath } from './shared.js';
11
13
  /** Zod raw shape for `fee_schedule_update` input — id (path) + optional fields. */
12
14
  export const updateFeeScheduleInputShape = {
13
15
  scheduleId: z
@@ -41,9 +43,7 @@ export const updateFeeScheduleInputShape = {
41
43
  * unchanged.
42
44
  */
43
45
  export function buildUpdateBody(args) {
44
- const { scheduleId: _scheduleId, ...body } = args;
45
- void _scheduleId;
46
- return body;
46
+ return bodyWithout(args, ['scheduleId']);
47
47
  }
48
48
  /**
49
49
  * Register `fee_schedule_update`. Splits the id (path) from the body fields,
@@ -59,7 +59,7 @@ export function registerFeeScheduleUpdateTool(server) {
59
59
  'is accepted. Returns the updated schedule, or a structured RFC 9457 error.',
60
60
  inputSchema: updateFeeScheduleInputShape,
61
61
  }, async (args, extra) => {
62
- return dispatchFeeSchedule({
62
+ return dispatchToolRequest({
63
63
  method: 'PATCH',
64
64
  path: feeSchedulePath(args.scheduleId),
65
65
  body: buildUpdateBody(args),
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/tools/fee-schedule/update.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,EAAE;AACF,4EAA4E;AAC5E,gFAAgF;AAChF,iFAAiF;AACjF,+EAA+E;AAC/E,2EAA2E;AAE3E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAChE,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAElE,mFAAmF;AACnF,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,uCAAuC,CAAC;IACpD,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,8CAA8C,CAAC;IAC3D,gBAAgB,EAAE,CAAC;SAChB,IAAI,CAAC,kBAAkB,CAAC;SACxB,QAAQ,EAAE;SACV,QAAQ,CACP,yEAAyE;QACvE,qEAAqE,CACxE;IACH,aAAa,EAAE,CAAC;SACb,MAAM,EAAE;SACR,GAAG,EAAE;SACL,QAAQ,EAAE;SACV,QAAQ,CAAC,sDAAsD,CAAC;IACnE,YAAY,EAAE,CAAC;SACZ,IAAI,CAAC,cAAc,CAAC;SACpB,QAAQ,EAAE;SACV,QAAQ,CACP,0EAA0E;QACxE,uEAAuE;QACvE,8BAA8B,CACjC;CACJ,CAAA;AAOD;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAC7B,IAA4B;IAE5B,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAA;IACjD,KAAK,WAAW,CAAA;IAChB,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,6BAA6B,CAAC,MAAiB;IAC7D,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,WAAW,EACT,yEAAyE;YACzE,iEAAiE;YACjE,qEAAqE;YACrE,yEAAyE;YACzE,4EAA4E;QAC9E,WAAW,EAAE,2BAA2B;KACzC,EACD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACpB,OAAO,mBAAmB,CACxB;YACE,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC;YACtC,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/fee-schedule/update.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,EAAE;AACF,4EAA4E;AAC5E,gFAAgF;AAChF,iFAAiF;AACjF,+EAA+E;AAC/E,2EAA2E;AAE3E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAElD,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAE7C,mFAAmF;AACnF,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,uCAAuC,CAAC;IACpD,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,8CAA8C,CAAC;IAC3D,gBAAgB,EAAE,CAAC;SAChB,IAAI,CAAC,kBAAkB,CAAC;SACxB,QAAQ,EAAE;SACV,QAAQ,CACP,yEAAyE;QACvE,qEAAqE,CACxE;IACH,aAAa,EAAE,CAAC;SACb,MAAM,EAAE;SACR,GAAG,EAAE;SACL,QAAQ,EAAE;SACV,QAAQ,CAAC,sDAAsD,CAAC;IACnE,YAAY,EAAE,CAAC;SACZ,IAAI,CAAC,cAAc,CAAC;SACpB,QAAQ,EAAE;SACV,QAAQ,CACP,0EAA0E;QACxE,uEAAuE;QACvE,8BAA8B,CACjC;CACJ,CAAA;AAOD;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAC7B,IAA4B;IAE5B,OAAO,WAAW,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,CAAC,CAAA;AAC1C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,6BAA6B,CAAC,MAAiB;IAC7D,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,WAAW,EACT,yEAAyE;YACzE,iEAAiE;YACjE,qEAAqE;YACrE,yEAAyE;YACzE,4EAA4E;QAC9E,WAAW,EAAE,2BAA2B;KACzC,EACD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACpB,OAAO,mBAAmB,CACxB;YACE,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC;YACtC,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC;SAC5B,EACD,KAAK,CACN,CAAA;IACH,CAAC,CACF,CAAA;AACH,CAAC"}
@@ -11,7 +11,8 @@
11
11
  // Both contextId and sourceId are path params; no tenant field is accepted
12
12
  // (matcher scopes to the relayed token's tenant).
13
13
  import { z } from 'zod';
14
- import { dispatchFieldMap, MAPPING_DESCRIPTION, sourceFieldMapPath } from './shared.js';
14
+ import { dispatchToolRequest } from '../shared-dispatch.js';
15
+ import { MAPPING_DESCRIPTION, sourceFieldMapPath } from './shared.js';
15
16
  /** Zod raw shape for `field_map_create` input — path ids + mapping body. */
16
17
  export const createFieldMapInputShape = {
17
18
  contextId: z
@@ -54,7 +55,7 @@ export function registerFieldMapCreateTool(server) {
54
55
  'structured RFC 9457 error naming every invalid/missing/unknown key.',
55
56
  inputSchema: createFieldMapInputShape,
56
57
  }, async (args, extra) => {
57
- return dispatchFieldMap({
58
+ return dispatchToolRequest({
58
59
  method: 'POST',
59
60
  path: sourceFieldMapPath(args.contextId, args.sourceId),
60
61
  body: buildCreateFieldMapBody(args),
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/tools/field-map/create.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,0DAA0D;AAC1D,EAAE;AACF,yEAAyE;AACzE,0EAA0E;AAC1E,6EAA6E;AAC7E,uEAAuE;AACvE,8EAA8E;AAC9E,mCAAmC;AACnC,EAAE;AACF,2EAA2E;AAC3E,kDAAkD;AAElD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAEvF,4EAA4E;AAC5E,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CACP,sEAAsE;QACpE,iCAAiC,CACpC;IACH,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,0DAA0D,CAAC;IACvE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;CACzE,CAAA;AAOD;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CACrC,IAAyB;IAEzB,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAA;AAClC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CAAC,MAAiB;IAC1D,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,WAAW,EACT,+DAA+D;YAC/D,kEAAkE;YAClE,sEAAsE;YACtE,iEAAiE;YACjE,sEAAsE;YACtE,sEAAsE;YACtE,iEAAiE;YACjE,uEAAuE;YACvE,qEAAqE;YACrE,oEAAoE;YACpE,qEAAqE;QACvE,WAAW,EAAE,wBAAwB;KACtC,EACD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACpB,OAAO,gBAAgB,CACrB;YACE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,kBAAkB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC;YACvD,IAAI,EAAE,uBAAuB,CAAC,IAAI,CAAC;SACpC,EACD,KAAK,CACN,CAAA;IACH,CAAC,CACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/tools/field-map/create.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,0DAA0D;AAC1D,EAAE;AACF,yEAAyE;AACzE,0EAA0E;AAC1E,6EAA6E;AAC7E,uEAAuE;AACvE,8EAA8E;AAC9E,mCAAmC;AACnC,EAAE;AACF,2EAA2E;AAC3E,kDAAkD;AAElD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAErE,4EAA4E;AAC5E,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CACP,sEAAsE;QACpE,iCAAiC,CACpC;IACH,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,0DAA0D,CAAC;IACvE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;CACzE,CAAA;AAOD;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CACrC,IAAyB;IAEzB,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAA;AAClC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CAAC,MAAiB;IAC1D,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,WAAW,EACT,+DAA+D;YAC/D,kEAAkE;YAClE,sEAAsE;YACtE,iEAAiE;YACjE,sEAAsE;YACtE,sEAAsE;YACtE,iEAAiE;YACjE,uEAAuE;YACvE,qEAAqE;YACrE,oEAAoE;YACpE,qEAAqE;QACvE,WAAW,EAAE,wBAAwB;KACtC,EACD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACpB,OAAO,mBAAmB,CACxB;YACE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,kBAAkB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC;YACvD,IAAI,EAAE,uBAAuB,CAAC,IAAI,CAAC;SACpC,EACD,KAAK,CACN,CAAA;IACH,CAAC,CACF,CAAA;AACH,CAAC"}
@@ -11,21 +11,75 @@
11
11
  // (/v1/contexts/{contextId}/sources/{sourceId}/field-maps), list is
12
12
  // context-nested (/v1/contexts/{contextId}/field-maps), and update/delete are
13
13
  // flat (/v1/field-maps/{fieldMapId}) — the spec does not nest them under
14
- // context+source. Each tool shares the fail-closed relay (shared.ts) and the
15
- // RFC 9457 → tool-error mapping (toToolError) with the generic surface, so
16
- // curated and generic map matcher errors identically. No tool carries a
17
- // tenant field.
14
+ // context+source. get and delete are nothing but their path, a method and a
15
+ // description, so they are declared as two rows (carrying that path asymmetry
16
+ // as data) and registered by the one shared loop; create, list and update carry
17
+ // request bodies or query builders and stay as files. Each tool shares the
18
+ // fail-closed relay (shared-dispatch.ts) and the RFC 9457 → tool-error mapping
19
+ // (toToolError) with the generic surface, so curated and generic map matcher
20
+ // errors identically. No tool carries a tenant field.
21
+ import { z } from 'zod';
22
+ import { registerCuratedTools } from '../curated-tool.js';
23
+ import { contextRoutingId } from '../input-fields.js';
18
24
  import { registerFieldMapCreateTool } from './create.js';
19
- import { registerFieldMapDeleteTool } from './delete.js';
20
- import { registerFieldMapGetTool } from './get.js';
21
25
  import { registerFieldMapListTool } from './list.js';
26
+ import { fieldMapPath, sourceFieldMapPath } from './shared.js';
22
27
  import { registerFieldMapUpdateTool } from './update.js';
28
+ /**
29
+ * The field-map registration list, IN PUBLISHED ORDER: thin tools inline as data
30
+ * rows, the tools that still need their own file by their register function.
31
+ * This list is the order `tools/list` returns, so moving an entry moves what a
32
+ * client renders and what an agent prompt built from it reads first.
33
+ *
34
+ * Every description string is the hand-tuned LLM guidance a client sees
35
+ * verbatim; the published-surface golden is what proves an edit here dropped no
36
+ * character and moved no tool.
37
+ */
38
+ const FIELD_MAP_TOOLS = [
39
+ registerFieldMapCreateTool,
40
+ registerFieldMapListTool,
41
+ {
42
+ name: 'field_map_get',
43
+ description: 'Fetch the field map bound to a source (a source has at most one). ' +
44
+ 'Provide both contextId and sourceId (UUID path params; contextId is ' +
45
+ "not a tenant field). The source must belong to your token's tenant. " +
46
+ 'Returns the field map, or a structured RFC 9457 error (e.g. 404 if ' +
47
+ 'the source has no field map yet).',
48
+ inputShape: {
49
+ contextId: contextRoutingId,
50
+ sourceId: z
51
+ .string()
52
+ .min(1)
53
+ .describe('The reconciliation source id (UUID) whose field map to fetch.'),
54
+ },
55
+ request: (args) => ({
56
+ method: 'GET',
57
+ path: sourceFieldMapPath(String(args.contextId), String(args.sourceId)),
58
+ }),
59
+ },
60
+ registerFieldMapUpdateTool,
61
+ {
62
+ name: 'field_map_delete',
63
+ description: 'Delete a field map by id (UUID path param, not a tenant field). ' +
64
+ "Removing a source's only field map reopens the " +
65
+ 'context.activation.requirement.source-mapping activation-readiness ' +
66
+ 'gap (see context_setup_progress) and an ACTIVE ' +
67
+ "context's matching/ingestion against that source will be affected. " +
68
+ 'Returns null on success (204), or a structured RFC 9457 error.',
69
+ inputShape: {
70
+ fieldMapId: z
71
+ .string()
72
+ .min(1)
73
+ .describe('The field map id (UUID) to delete.'),
74
+ },
75
+ request: (args) => ({
76
+ method: 'DELETE',
77
+ path: fieldMapPath(String(args.fieldMapId)),
78
+ }),
79
+ },
80
+ ];
23
81
  /** Register all five curated field-map tools on the given server. */
24
82
  export function registerFieldMapTools(server) {
25
- registerFieldMapCreateTool(server);
26
- registerFieldMapListTool(server);
27
- registerFieldMapGetTool(server);
28
- registerFieldMapUpdateTool(server);
29
- registerFieldMapDeleteTool(server);
83
+ registerCuratedTools(server, FIELD_MAP_TOOLS);
30
84
  }
31
85
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/field-map/index.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,2EAA2E;AAC3E,6EAA6E;AAC7E,wEAAwE;AACxE,yEAAyE;AACzE,2EAA2E;AAC3E,2EAA2E;AAC3E,qDAAqD;AACrD,EAAE;AACF,oEAAoE;AACpE,oEAAoE;AACpE,8EAA8E;AAC9E,yEAAyE;AACzE,6EAA6E;AAC7E,2EAA2E;AAC3E,wEAAwE;AACxE,gBAAgB;AAIhB,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAA;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAA;AACpD,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA;AAExD,qEAAqE;AACrE,MAAM,UAAU,qBAAqB,CAAC,MAAiB;IACrD,0BAA0B,CAAC,MAAM,CAAC,CAAA;IAClC,wBAAwB,CAAC,MAAM,CAAC,CAAA;IAChC,uBAAuB,CAAC,MAAM,CAAC,CAAA;IAC/B,0BAA0B,CAAC,MAAM,CAAC,CAAA;IAClC,0BAA0B,CAAC,MAAM,CAAC,CAAA;AACpC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/field-map/index.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,2EAA2E;AAC3E,6EAA6E;AAC7E,wEAAwE;AACxE,yEAAyE;AACzE,2EAA2E;AAC3E,2EAA2E;AAC3E,qDAAqD;AACrD,EAAE;AACF,oEAAoE;AACpE,oEAAoE;AACpE,8EAA8E;AAC9E,yEAAyE;AACzE,4EAA4E;AAC5E,8EAA8E;AAC9E,gFAAgF;AAChF,2EAA2E;AAC3E,+EAA+E;AAC/E,6EAA6E;AAC7E,sDAAsD;AAEtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,OAAO,EAAE,oBAAoB,EAAqB,MAAM,oBAAoB,CAAA;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA;AAExD;;;;;;;;;GASG;AACH,MAAM,eAAe,GAA4B;IAC/C,0BAA0B;IAC1B,wBAAwB;IACxB;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EACT,oEAAoE;YACpE,sEAAsE;YACtE,sEAAsE;YACtE,qEAAqE;YACrE,mCAAmC;QACrC,UAAU,EAAE;YACV,SAAS,EAAE,gBAAgB;YAC3B,QAAQ,EAAE,CAAC;iBACR,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,CAAC,+DAA+D,CAAC;SAC7E;QACD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAClB,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACxE,CAAC;KACH;IACD,0BAA0B;IAC1B;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EACT,kEAAkE;YAClE,iDAAiD;YACjD,qEAAqE;YACrE,iDAAiD;YACjD,qEAAqE;YACrE,gEAAgE;QAClE,UAAU,EAAE;YACV,UAAU,EAAE,CAAC;iBACV,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,CAAC,oCAAoC,CAAC;SAClD;QACD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAClB,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAC5C,CAAC;KACH;CACF,CAAA;AAED,qEAAqE;AACrE,MAAM,UAAU,qBAAqB,CAAC,MAAiB;IACrD,oBAAoB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;AAC/C,CAAC"}
@@ -7,7 +7,11 @@
7
7
  // cursor). contextId is a routing path param, not a tenant field; no tenant
8
8
  // field is accepted.
9
9
  import { z } from 'zod';
10
- import { contextFieldMapsPath, dispatchFieldMap } from './shared.js';
10
+ import { nextCursor, pageLimit } from '../input-fields.js';
11
+ import { queryHandler } from '../query-handler.js';
12
+ import { pickQuery } from '../request-fields.js';
13
+ import { dispatchToolRequest } from '../shared-dispatch.js';
14
+ import { contextFieldMapsPath } from './shared.js';
11
15
  /** Zod raw shape for `field_map_list` input — contextId path + pagination. */
12
16
  export const listFieldMapsInputShape = {
13
17
  contextId: z
@@ -15,29 +19,12 @@ export const listFieldMapsInputShape = {
15
19
  .min(1)
16
20
  .describe('The reconciliation context id (UUID) whose field maps to list. Routing ' +
17
21
  'path param, not a tenant field.'),
18
- limit: z
19
- .number()
20
- .int()
21
- .min(1)
22
- .max(200)
23
- .optional()
24
- .describe('Maximum number of records to return (1–200, default 20).'),
25
- cursor: z
26
- .string()
27
- .optional()
28
- .describe('Opaque pagination cursor from a prior response. Re-call with the ' +
29
- 'returned nextCursor to page forward (there is no auto-pagination).'),
22
+ limit: pageLimit,
23
+ cursor: nextCursor,
30
24
  };
31
25
  /** Build the list query, omitting unset knobs so the request stays minimal. */
32
26
  function buildListQuery(args) {
33
- const query = {};
34
- if (args.limit !== undefined) {
35
- query.limit = args.limit;
36
- }
37
- if (args.cursor !== undefined) {
38
- query.cursor = args.cursor;
39
- }
40
- return Object.keys(query).length > 0 ? query : undefined;
27
+ return pickQuery(args, ['limit', 'cursor']);
41
28
  }
42
29
  /**
43
30
  * Register `field_map_list`. Passes limit/cursor through and returns matcher's
@@ -52,13 +39,6 @@ export function registerFieldMapListTool(server) {
52
39
  'response carries { items, nextCursor } — paginate by re-calling with ' +
53
40
  'the returned nextCursor. No tenant field is accepted.',
54
41
  inputSchema: listFieldMapsInputShape,
55
- }, async (args, extra) => {
56
- const query = buildListQuery(args);
57
- return dispatchFieldMap({
58
- method: 'GET',
59
- path: contextFieldMapsPath(args.contextId),
60
- ...(query !== undefined ? { query } : {}),
61
- }, extra);
62
- });
42
+ }, queryHandler(buildListQuery, (args) => contextFieldMapsPath(args.contextId), dispatchToolRequest));
63
43
  }
64
44
  //# sourceMappingURL=list.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/tools/field-map/list.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,EAAE;AACF,iFAAiF;AACjF,6EAA6E;AAC7E,8EAA8E;AAC9E,4EAA4E;AAC5E,4EAA4E;AAC5E,qBAAqB;AAErB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAKvB,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAEpE,8EAA8E;AAC9E,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CACP,yEAAyE;QACvE,iCAAiC,CACpC;IACH,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,0DAA0D,CAAC;IACvE,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,mEAAmE;QACjE,oEAAoE,CACvE;CACJ,CAAA;AAOD,+EAA+E;AAC/E,SAAS,cAAc,CAAC,IAAwB;IAC9C,MAAM,KAAK,GAAoC,EAAE,CAAA;IACjD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC7B,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;IAC1B,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9B,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IAC5B,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;AAC1D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAiB;IACxD,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,WAAW,EACT,qEAAqE;YACrE,sEAAsE;YACtE,uEAAuE;YACvE,uEAAuE;YACvE,uDAAuD;QACzD,WAAW,EAAE,uBAAuB;KACrC,EACD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACpB,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,CAAA;QAClC,OAAO,gBAAgB,CACrB;YACE,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC;YAC1C,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1C,EACD,KAAK,CACN,CAAA;IACH,CAAC,CACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/tools/field-map/list.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,EAAE;AACF,iFAAiF;AACjF,6EAA6E;AAC7E,8EAA8E;AAC9E,4EAA4E;AAC5E,4EAA4E;AAC5E,qBAAqB;AAErB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAG1D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAGlD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAElD,8EAA8E;AAC9E,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CACP,yEAAyE;QACvE,iCAAiC,CACpC;IACH,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,UAAU;CACnB,CAAA;AAOD,+EAA+E;AAC/E,SAAS,cAAc,CAAC,IAAwB;IAC9C,OAAO,SAAS,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAA;AAC7C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAiB;IACxD,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,WAAW,EACT,qEAAqE;YACrE,sEAAsE;YACtE,uEAAuE;YACvE,uEAAuE;YACvE,uDAAuD;QACzD,WAAW,EAAE,uBAAuB;KACrC,EACD,YAAY,CACV,cAAc,EACd,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,EAC9C,mBAAmB,CACpB,CACF,CAAA;AACH,CAAC"}
@@ -6,18 +6,18 @@
6
6
  // /v1/contexts/{contextId}/sources/{sourceId}/field-maps (source-nested),
7
7
  // list hangs off /v1/contexts/{contextId}/field-maps (context-nested), and
8
8
  // update/delete hang off /v1/field-maps/{fieldMapId} (flat — the spec does not
9
- // nest them under context+source). This module factors all three path
10
- // helpers plus the relay boilerplate exactly once so the five tools stay thin
11
- // and so curated + generic surfaces map matcher errors through the identical
12
- // path (toToolError).
9
+ // nest them under context+source). This module holds all three path helpers
10
+ // plus the canonical mapping vocabulary, and nothing else, factored exactly
11
+ // once so the two table rows in index.ts and the three tools that keep their
12
+ // own file address the same URLs. The relay itself lives in shared-dispatch.ts,
13
+ // so curated and generic surfaces map matcher errors through the identical path
14
+ // (toToolError).
13
15
  //
14
16
  // Security: the bearer token is never read here directly — requireMatcherClient
15
17
  // owns the request-scoped relay and fails closed when no usable credential was
16
18
  // provided. contextId/sourceId/fieldMapId are routing identifiers (matcher
17
19
  // validates ownership against the relayed token's tenant); no field-map tool
18
20
  // input carries a tenant field.
19
- import { requireMatcherClient, UnauthenticatedError, } from '../../auth/request-token.js';
20
- import { isMatcherApiError, toToolError } from '../tool-error.js';
21
21
  /** Build the context-scoped field-maps collection path (list). */
22
22
  export function contextFieldMapsPath(contextId) {
23
23
  return `/v1/contexts/${encodeURIComponent(contextId)}/field-maps`;
@@ -30,42 +30,6 @@ export function sourceFieldMapPath(contextId, sourceId) {
30
30
  export function fieldMapPath(fieldMapId) {
31
31
  return `/v1/field-maps/${encodeURIComponent(fieldMapId)}`;
32
32
  }
33
- /**
34
- * Run one assembled request through the relay: fail-closed auth, dispatch, and
35
- * RFC 9457 → tool-error mapping — identical to the generic invoke's dispatch so
36
- * both surfaces produce the same structured error shape.
37
- *
38
- * `clientFor` is injectable for tests; production callers pass nothing and get
39
- * the request-scoped, fail-closed `requireMatcherClient`.
40
- */
41
- export async function dispatchFieldMap(request, extra, clientFor = requireMatcherClient) {
42
- let client;
43
- try {
44
- // Fail-closed on a missing / empty / non-Bearer credential.
45
- client = clientFor(extra);
46
- }
47
- catch (err) {
48
- if (err instanceof UnauthenticatedError) {
49
- return { isError: true, content: [{ type: 'text', text: err.message }] };
50
- }
51
- throw err;
52
- }
53
- try {
54
- const result = await client.request(request);
55
- // Success → matcher's JSON returned as-is (incl. pagination envelopes and
56
- // 204 → null for delete).
57
- return { content: [{ type: 'text', text: JSON.stringify(result ?? null) }] };
58
- }
59
- catch (err) {
60
- // RFC 9457 problem → the SHARED structured tool error (status/title/detail/
61
- // code preserved). A non-matcher error is a bug, not a matcher failure, and
62
- // is re-thrown rather than masqueraded as one.
63
- if (isMatcherApiError(err)) {
64
- return toToolError(err);
65
- }
66
- throw err;
67
- }
68
- }
69
33
  /**
70
34
  * Canonical field-map mapping vocabulary — mirrors the matcher backend's
71
35
  * single authority (internal/shared/domain/field_map.go:42-52), shared there
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/tools/field-map/shared.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,EAAE;AACF,uEAAuE;AACvE,6EAA6E;AAC7E,kDAAkD;AAClD,0EAA0E;AAC1E,2EAA2E;AAC3E,+EAA+E;AAC/E,sEAAsE;AACtE,8EAA8E;AAC9E,6EAA6E;AAC7E,sBAAsB;AACtB,EAAE;AACF,gFAAgF;AAChF,+EAA+E;AAC/E,2EAA2E;AAC3E,6EAA6E;AAC7E,gCAAgC;AAIhC,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GAErB,MAAM,6BAA6B,CAAA;AAEpC,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEjE,kEAAkE;AAClE,MAAM,UAAU,oBAAoB,CAAC,SAAiB;IACpD,OAAO,gBAAgB,kBAAkB,CAAC,SAAS,CAAC,aAAa,CAAA;AACnE,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,kBAAkB,CAAC,SAAiB,EAAE,QAAgB;IACpE,OAAO,gBAAgB,kBAAkB,CAAC,SAAS,CAAC,YAAY,kBAAkB,CAAC,QAAQ,CAAC,aAAa,CAAA;AAC3G,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,YAAY,CAAC,UAAkB;IAC7C,OAAO,kBAAkB,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAA;AAC3D,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAuB,EACvB,KAAmC,EACnC,YAAyD,oBAAoB;IAE7E,IAAI,MAAqB,CAAA;IACzB,IAAI,CAAC;QACH,4DAA4D;QAC5D,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAA;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,oBAAoB,EAAE,CAAC;YACxC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,CAAA;QAC1E,CAAC;QACD,MAAM,GAAG,CAAA;IACX,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAC5C,0EAA0E;QAC1E,0BAA0B;QAC1B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,EAAE,CAAC,EAAE,CAAA;IAC9E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,4EAA4E;QAC5E,4EAA4E;QAC5E,+CAA+C;QAC/C,IAAI,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO,WAAW,CAAC,GAAG,CAAC,CAAA;QACzB,CAAC;QACD,MAAM,GAAG,CAAA;IACX,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,aAAa;IACb,QAAQ;IACR,UAAU;IACV,MAAM;CACE,CAAA;AAEV,yFAAyF;AACzF,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,aAAa;IACb,YAAY;IACZ,cAAc;CACN,CAAA;AAEV;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAC9B,qEAAqE;IACrE,sEAAsE;IACtE,yEAAyE;IACzE,4EAA4E;IAC5E,qEAAqE;IACrE,uEAAuE;IACvE,0EAA0E;IAC1E,yEAAyE;IACzE,sEAAsE;IACtE,uEAAuE;IACvE,4EAA4E;IAC5E,2EAA2E;IAC3E,0EAA0E,CAAA"}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/tools/field-map/shared.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,EAAE;AACF,uEAAuE;AACvE,6EAA6E;AAC7E,kDAAkD;AAClD,0EAA0E;AAC1E,2EAA2E;AAC3E,+EAA+E;AAC/E,4EAA4E;AAC5E,4EAA4E;AAC5E,6EAA6E;AAC7E,gFAAgF;AAChF,gFAAgF;AAChF,iBAAiB;AACjB,EAAE;AACF,gFAAgF;AAChF,+EAA+E;AAC/E,2EAA2E;AAC3E,6EAA6E;AAC7E,gCAAgC;AAEhC,kEAAkE;AAClE,MAAM,UAAU,oBAAoB,CAAC,SAAiB;IACpD,OAAO,gBAAgB,kBAAkB,CAAC,SAAS,CAAC,aAAa,CAAA;AACnE,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,kBAAkB,CAAC,SAAiB,EAAE,QAAgB;IACpE,OAAO,gBAAgB,kBAAkB,CAAC,SAAS,CAAC,YAAY,kBAAkB,CAAC,QAAQ,CAAC,aAAa,CAAA;AAC3G,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,YAAY,CAAC,UAAkB;IAC7C,OAAO,kBAAkB,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAA;AAC3D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,aAAa;IACb,QAAQ;IACR,UAAU;IACV,MAAM;CACE,CAAA;AAEV,yFAAyF;AACzF,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,aAAa;IACb,YAAY;IACZ,cAAc;CACN,CAAA;AAEV;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAC9B,qEAAqE;IACrE,sEAAsE;IACtE,yEAAyE;IACzE,4EAA4E;IAC5E,qEAAqE;IACrE,uEAAuE;IACvE,0EAA0E;IAC1E,yEAAyE;IACzE,sEAAsE;IACtE,uEAAuE;IACvE,4EAA4E;IAC5E,2EAA2E;IAC3E,0EAA0E,CAAA"}
@@ -8,7 +8,8 @@
8
8
  // param (the spec does not nest update under context+source); no tenant field
9
9
  // is accepted (matcher scopes to the relayed token's tenant).
10
10
  import { z } from 'zod';
11
- import { dispatchFieldMap, fieldMapPath, MAPPING_DESCRIPTION } from './shared.js';
11
+ import { dispatchToolRequest } from '../shared-dispatch.js';
12
+ import { fieldMapPath, MAPPING_DESCRIPTION } from './shared.js';
12
13
  /** Zod raw shape for `field_map_update` input — flat id + mapping body. */
13
14
  export const updateFieldMapInputShape = {
14
15
  fieldMapId: z
@@ -36,7 +37,7 @@ export function registerFieldMapUpdateTool(server) {
36
37
  'every invalid/missing/unknown key.',
37
38
  inputSchema: updateFieldMapInputShape,
38
39
  }, async (args, extra) => {
39
- return dispatchFieldMap({
40
+ return dispatchToolRequest({
40
41
  method: 'PATCH',
41
42
  path: fieldMapPath(args.fieldMapId),
42
43
  body: buildUpdateFieldMapBody(args),
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/tools/field-map/update.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,EAAE;AACF,6DAA6D;AAC7D,mEAAmE;AACnE,kEAAkE;AAClE,6EAA6E;AAC7E,8EAA8E;AAC9E,8EAA8E;AAC9E,8DAA8D;AAE9D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEjF,2EAA2E;AAC3E,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,oCAAoC,CAAC;IACjD,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;CACzE,CAAA;AAOD,4EAA4E;AAC5E,MAAM,UAAU,uBAAuB,CACrC,IAAyB;IAEzB,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAA;AAClC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CAAC,MAAiB;IAC1D,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,WAAW,EACT,mEAAmE;YACnE,oEAAoE;YACpE,qEAAqE;YACrE,mEAAmE;YACnE,uEAAuE;YACvE,oCAAoC;QACtC,WAAW,EAAE,wBAAwB;KACtC,EACD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACpB,OAAO,gBAAgB,CACrB;YACE,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;YACnC,IAAI,EAAE,uBAAuB,CAAC,IAAI,CAAC;SACpC,EACD,KAAK,CACN,CAAA;IACH,CAAC,CACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/tools/field-map/update.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,EAAE;AACF,6DAA6D;AAC7D,mEAAmE;AACnE,kEAAkE;AAClE,6EAA6E;AAC7E,8EAA8E;AAC9E,8EAA8E;AAC9E,8DAA8D;AAE9D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAE/D,2EAA2E;AAC3E,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,oCAAoC,CAAC;IACjD,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;CACzE,CAAA;AAOD,4EAA4E;AAC5E,MAAM,UAAU,uBAAuB,CACrC,IAAyB;IAEzB,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAA;AAClC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CAAC,MAAiB;IAC1D,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,WAAW,EACT,mEAAmE;YACnE,oEAAoE;YACpE,qEAAqE;YACrE,mEAAmE;YACnE,uEAAuE;YACvE,oCAAoC;QACtC,WAAW,EAAE,wBAAwB;KACtC,EACD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACpB,OAAO,mBAAmB,CACxB;YACE,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;YACnC,IAAI,EAAE,uBAAuB,CAAC,IAAI,CAAC;SACpC,EACD,KAAK,CACN,CAAA;IACH,CAAC,CACF,CAAA;AACH,CAAC"}