@cyanheads/cpsc-recalls-mcp-server 0.1.7 → 0.2.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.
Files changed (30) hide show
  1. package/AGENTS.md +55 -26
  2. package/CLAUDE.md +55 -26
  3. package/README.md +40 -59
  4. package/changelog/0.1.x/0.1.8.md +32 -0
  5. package/changelog/0.2.x/0.2.0.md +31 -0
  6. package/changelog/template.md +9 -26
  7. package/dist/index.js +7 -5
  8. package/dist/index.js.map +1 -1
  9. package/dist/mcp-server/tools/definitions/cpsc-get-recall.tool.d.ts +4 -4
  10. package/dist/mcp-server/tools/definitions/cpsc-get-recall.tool.d.ts.map +1 -1
  11. package/dist/mcp-server/tools/definitions/cpsc-get-recall.tool.js +16 -34
  12. package/dist/mcp-server/tools/definitions/cpsc-get-recall.tool.js.map +1 -1
  13. package/dist/mcp-server/tools/definitions/cpsc-get-recent.tool.d.ts +6 -4
  14. package/dist/mcp-server/tools/definitions/cpsc-get-recent.tool.d.ts.map +1 -1
  15. package/dist/mcp-server/tools/definitions/cpsc-get-recent.tool.js +142 -115
  16. package/dist/mcp-server/tools/definitions/cpsc-get-recent.tool.js.map +1 -1
  17. package/dist/mcp-server/tools/definitions/cpsc-search-recalls.tool.d.ts +12 -9
  18. package/dist/mcp-server/tools/definitions/cpsc-search-recalls.tool.d.ts.map +1 -1
  19. package/dist/mcp-server/tools/definitions/cpsc-search-recalls.tool.js +372 -244
  20. package/dist/mcp-server/tools/definitions/cpsc-search-recalls.tool.js.map +1 -1
  21. package/dist/mcp-server/tools/response-budget.d.ts +34 -0
  22. package/dist/mcp-server/tools/response-budget.d.ts.map +1 -0
  23. package/dist/mcp-server/tools/response-budget.js +53 -0
  24. package/dist/mcp-server/tools/response-budget.js.map +1 -0
  25. package/dist/services/cpsc-recall/cpsc-recall-service.d.ts +1 -1
  26. package/dist/services/cpsc-recall/cpsc-recall-service.d.ts.map +1 -1
  27. package/dist/services/cpsc-recall/cpsc-recall-service.js +4 -5
  28. package/dist/services/cpsc-recall/cpsc-recall-service.js.map +1 -1
  29. package/package.json +10 -9
  30. package/server.json +3 -3
package/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
 
8
8
  <div align="center">
9
9
 
10
- [![Version](https://img.shields.io/badge/Version-0.1.7-blue.svg?style=flat-square)](./CHANGELOG.md) [![License](https://img.shields.io/badge/License-Apache%202.0-orange.svg?style=flat-square)](./LICENSE) [![Docker](https://img.shields.io/badge/Docker-ghcr.io-2496ED?style=flat-square&logo=docker&logoColor=white)](https://github.com/users/cyanheads/packages/container/package/cpsc-recalls-mcp-server) [![MCP SDK](https://img.shields.io/badge/MCP%20SDK-^2.0.0-green.svg?style=flat-square)](https://modelcontextprotocol.io/) [![npm](https://img.shields.io/npm/v/@cyanheads/cpsc-recalls-mcp-server?style=flat-square&logo=npm&logoColor=white)](https://www.npmjs.com/package/@cyanheads/cpsc-recalls-mcp-server) [![TypeScript](https://img.shields.io/badge/TypeScript-^7.0.2-3178C6.svg?style=flat-square)](https://www.typescriptlang.org/) [![Bun](https://img.shields.io/badge/Bun-v1.3.0+-blueviolet.svg?style=flat-square)](https://bun.sh/)
10
+ [![Version](https://img.shields.io/badge/Version-0.2.0-blue.svg?style=flat-square)](./CHANGELOG.md) [![License](https://img.shields.io/badge/License-Apache%202.0-orange.svg?style=flat-square)](./LICENSE) [![Docker](https://img.shields.io/badge/Docker-ghcr.io-2496ED?style=flat-square&logo=docker&logoColor=white)](https://github.com/users/cyanheads/packages/container/package/cpsc-recalls-mcp-server) [![MCP SDK](https://img.shields.io/badge/MCP%20SDK-^2.0.0-green.svg?style=flat-square)](https://modelcontextprotocol.io/) [![npm](https://img.shields.io/npm/v/@cyanheads/cpsc-recalls-mcp-server?style=flat-square&logo=npm&logoColor=white)](https://www.npmjs.com/package/@cyanheads/cpsc-recalls-mcp-server) [![TypeScript](https://img.shields.io/badge/TypeScript-^7.0.2-3178C6.svg?style=flat-square)](https://www.typescriptlang.org/) [![Bun](https://img.shields.io/badge/Bun-v1.4.0+-blueviolet.svg?style=flat-square)](https://bun.sh/)
11
11
 
12
12
  </div>
13
13
 
@@ -27,9 +27,11 @@
27
27
 
28
28
  ---
29
29
 
30
- ## Tools
30
+ ## Overview
31
31
 
32
- 3 tools for searching and retrieving CPSC consumer product recall data:
32
+ Consumer product recalls from the CPSC [saferproducts.gov](https://www.saferproducts.gov/) database — toys, electronics, furniture, appliances, children's products, tools, and clothing. Search recalls by product, brand, retailer, or hazard, fetch full detail for a specific recall number, or pull a recent-recalls feed for a date window. Runs as a stdio process, a local Streamable HTTP server, or the public hosted endpoint above.
33
+
34
+ ### Tools
33
35
 
34
36
  | Tool | Description |
35
37
  |:---|:---|
@@ -37,79 +39,58 @@
37
39
  | `cpsc_get_recall` | Full detail for a single recall by recall number — hazards, remedy, products, injuries, images, and the official CPSC page |
38
40
  | `cpsc_get_recent` | Fetch the most recent recalls ordered newest-first, scoped to a configurable date window |
39
41
 
40
- **CPSC jurisdiction:** Consumer products only — toys, electronics, furniture, appliances, children's products, tools, and clothing. Food and drugs (FDA), motor vehicles and tires (NHTSA), boats (USCG), and pesticides (EPA) are not in this database. Every response includes a jurisdiction note.
41
-
42
- Data sourced from the [U.S. Consumer Product Safety Commission](https://www.saferproducts.gov/) via the CPSC public recalls API.
42
+ CPSC jurisdiction is consumer products only — food/drugs (FDA), motor vehicles/tires (NHTSA), boats (USCG), and pesticides (EPA) are not in this database; every response carries a jurisdiction note.
43
43
 
44
- ### `cpsc_search_recalls`
44
+ ## Capability reference
45
45
 
46
- Search recalls with flexible filtering across title, product, organization, hazard, remedy, and description fields.
46
+ ### `cpsc_search_recalls` <sub>tool</sub>
47
47
 
48
- - Filter by `title_search`, `product_name`, `manufacturer`, `retailer`, `importer`, `distributor`, `remedy`, or `description_search` — all optional substring matches, applied upstream, combining with AND
49
- - `title_search` is usually the highest-signal filter: CPSC titles name the brand, the product, and the hazard
50
- - `hazard_search` is a client-side filter applied after the upstream fetch — it matches when the term appears in hazard descriptions, product names, **or** remedy instructions (case-insensitive). Use it for hazard concepts like "fire", "choking", or "burn"; the upstream `Hazard` parameter is recognized but never matches, so it is not exposed
51
- - `remedy` searches the free-text remedy instructions, not the `remedy_options` type enum — `remedy: "repair"` matches records whose `remedy_options` list only `Refund` but whose instructions describe a free repair kit
52
- - Two independent date axes: `date_start` / `date_end` bound the recall issue date, `updated_start` / `updated_end` bound the date CPSC last published the record. A 2003 recall re-published in 2025 matches `updated_start: "2025-01-01"`. All four must be real calendar dates — `2026-02-31` and `2026-99-99` are rejected at input validation, and a reversed range fails with `invalid_date_range` rather than silently returning nothing
53
- - Client-side limit (1–200, default 20) and `offset` (default 0) applied after fetching all matching records. Page with `offset: 0, 20, 40`; an offset at or past `total_found` returns an empty result set rather than an error
54
- - `total_found` counts matches after `hazard_search` is applied and before `offset`/`limit` narrow the window; `has_more` is the paging signal; `truncated` stays limit-only and does not move with `offset`
55
- - Returns hazard descriptions, remedy options, remedy instructions, product list, UPCs, manufacturer/importer/retailer names, images, and the CPSC recall page URL
56
- - Manufacturer and importer are reported and rendered as separate roles — CPSC org names contain commas, so multiple orgs in one role are separated with `; `
57
- - Per-recall `data_quality_notes` records gaps in the upstream record (no hazard text, no product entries); empty when nothing is missing
58
- - When `manufacturer` returns no results, try `importer`, `retailer`, or `distributor` — many recalls list one of those as the primary organization
59
- - Deterministic upstream rejections surface as `upstream_rejected` (`retryable: false`) and carry the CPSC message; transient outages stay on `upstream_error` (`retryable: true`)
48
+ - Nine text filters — `product_name`, `manufacturer`, `retailer`, `importer`, `distributor`, `title_search`, `description_search`, `remedy` (free-text instructions, not the `remedy_options` categories), and `hazard_search` (hazard text, product names, or remedy instructions; `hazard` is accepted as an alias) — all combine with AND; `title_search` is usually highest-signal
49
+ - A search needs at least one criterion — a non-blank text filter or a date bound; `limit`/`offset` alone fail with `missing_criteria`, whose hint points browsing to `cpsc_get_recent`. A blank or whitespace-only filter counts as omitted
50
+ - Word matching: every whitespace-separated word of a text filter must appear in that filter's field, in any order and case-insensitively; straight and curly apostrophes match each other, and `%`, `_`, and `[…]` match literally. No stemming or fuzzy matching. Each text filter accepts up to 500 characters
51
+ - Two independent date axes: `date_start`/`date_end` bound the recall issue date, `updated_start`/`updated_end` bound the date CPSC last published it; all four must be real calendar dates and a reversed range throws `invalid_date_range`
52
+ - `limit` (1–200, default 20) and `offset` (default 0) page through `total_found`, which counts every match before the window; a page returns fewer than `limit` recalls when it reaches the 64,000-byte response size budget, and its notice names the offset to continue from. `has_more` is the paging signal and `truncated` always equals it
53
+ - Returns hazard descriptions, remedy options and instructions, products, UPCs, manufacturer/importer/retailer/distributor names, images, `cpsc_url`, and per-recall `data_quality_notes`; manufacturer and importer render as separate roles — try `importer`, `retailer`, or `distributor` when `manufacturer` comes back empty
54
+ - Zero matches is an empty success, not an error: `effectiveQuery` echoes the criteria as applied, and a notice says which criterion to relax (the count before `hazard_search` emptied the set, fewer words, another company role, wider dates). An offset past the last match returns an empty page with its own notice. `upstream_rejected` (non-retryable) relays CPSC's own rejection, `upstream_error` (retryable) covers transient outages
60
55
 
61
56
  ---
62
57
 
63
- ### `cpsc_get_recall`
64
-
65
- Full detail for a single CPSC recall by recall number.
58
+ ### `cpsc_get_recall` <sub>tool</sub>
66
59
 
67
- - Accepts modern 5-digit recall numbers (e.g. `"25043"`) and historical 1998–2001 records with letter suffixes (e.g. `"99003a"`)
68
- - Returns the complete record: full description, all hazard descriptions, remedy type and instructions, all product variants with unit counts, UPCs, incident/injury narrative, manufacturer and importer names, retailer names with sale date ranges, country of manufacture, images, and coordinated agency recall URLs
69
- - Model numbers are typically embedded in the description text, not in a structured field
70
- - `description` is nullable — a small number of genuine CPSC records carry no description; the record is still returned and the absence is stated rather than rendered as a blank section
71
- - Manufacturer and importer are rendered under separate headings, so role attribution survives into `content[]`
72
- - `data_quality_notes` records gaps in the upstream record (absent description, no hazard text, no product entries); empty when nothing is missing
73
- - Use `cpsc_search_recalls` or `cpsc_get_recent` to find a recall number first
60
+ - Accepts modern 5-digit recall numbers (e.g. `"25043"`) and historical 1998–2001 records with letter suffixes (e.g. `"99003a"`); a malformed number is rejected as invalid input with both forms spelled out
61
+ - Returns the complete record — full description, all hazard and remedy detail, every product variant, UPCs, incident/injury narrative, manufacturer/importer/retailer/distributor names, country of manufacture, images, and coordinated-agency recall URLs
62
+ - `description` is nullable — a small number of genuine CPSC records carry no description text, and model numbers are usually embedded there rather than in a structured field
63
+ - Manufacturer and importer render under separate headings so role attribution survives into `content[]`
64
+ - `data_quality_notes` records gaps in the upstream record (absent description, hazard text, or product entries); empty when nothing is missing
65
+ - `not_found` when the recall number doesn't exist — resolve one via `cpsc_search_recalls` or `cpsc_get_recent` first; `upstream_rejected` (non-retryable) relays CPSC's own rejection, `upstream_error` (retryable) covers transient outages
74
66
 
75
67
  ---
76
68
 
77
- ### `cpsc_get_recent`
69
+ ### `cpsc_get_recent` <sub>tool</sub>
78
70
 
79
- Fetch the most recent CPSC recalls, ordered newest-first.
80
-
81
- - Configurable look-back window of 1–365 days (default 30)
82
- - Limit of 1–100 results (default 20), with `offset` (default 0) to page through `total_found`. Narrowing `days` cannot page — the window is anchored to today, so shrinking it drops the oldest records rather than advancing past the newest
83
- - `has_more` is the paging signal; `truncated` stays limit-only and does not move with `offset`
84
- - Always applies a date window — without one, the upstream API returns 9,800+ records
85
- - Returns a lightweight record per recall: number, date, title, hazards, remedy types, product names, and CPSC URL
86
- - Per-recall `data_quality_notes` records gaps in the upstream record (no hazard text, no product entries); empty when nothing is missing
71
+ - Look-back window of 1–365 days (default 30), anchored to today; older recalls are reachable through `cpsc_search_recalls` date bounds
72
+ - `limit` (1–100, default 20) and `offset` (default 0) page through `total_found`; a page returns fewer than `limit` recalls when it reaches the 64,000-byte response size budget. Narrowing `days` cannot page further back — the window is anchored to today, so shrinking it drops the oldest records rather than advancing past the newest
73
+ - `has_more` is the paging signal and `truncated` always equals it; an empty window, an offset past the last recall, and a budget-cut page each carry a notice saying what to do next
74
+ - Returns a lightweight record per recall — number, date, title, hazards, remedy types, product names, `cpsc_url` — plus `data_quality_notes` for gaps CPSC left empty
87
75
  - Use `cpsc_get_recall` to retrieve full detail for any result
88
76
 
89
77
  ## Features
90
78
 
91
- Built on [`@cyanheads/mcp-ts-core`](https://github.com/cyanheads/mcp-ts-core):
92
-
93
- - Declarative tool definitions — single file per tool, framework handles registration and validation
94
- - Unified error handling — handlers throw, framework catches, classifies, and formats
95
- - Pluggable auth: `none`, `jwt`, `oauth`
96
- - Swappable storage backends: `in-memory`, `filesystem`, `Supabase`, `Cloudflare KV/R2/D1`
97
- - Structured logging with optional OpenTelemetry tracing
98
- - STDIO and Streamable HTTP transports
79
+ Built on [`@cyanheads/mcp-ts-core`](https://github.com/cyanheads/mcp-ts-core): stdio and Streamable HTTP transports, pluggable auth (`none` / `jwt` / `oauth`), swappable storage (`in-memory`, `filesystem`, `Supabase`, `Cloudflare KV/R2/D1`), structured logging with optional OpenTelemetry tracing.
99
80
 
100
81
  CPSC-specific:
101
82
 
102
- - Full integration with the CPSC saferproducts.gov public recalls API
103
- - Client-side filtering applied over complete API result sets for accurate `total_found` counts
104
- - Jurisdiction boundary documented in every response — prevents misattribution of food, vehicle, or drug recalls
83
+ - Full client for the CPSC saferproducts.gov public recalls API — search, single-recall detail, and a recent-recalls feed
84
+ - Every-word matching on all nine text filters, applied over the complete result set before paging so `total_found` and `has_more` stay accurate
85
+ - Handles both modern 5-digit recall numbers and historical 1998–2001 records with letter suffixes
86
+ - Jurisdiction boundary documented in every response — flags food, vehicle, and drug recalls as out of scope before an agent misattributes them
105
87
 
106
88
  Agent-friendly output:
107
89
 
108
- - Jurisdiction note on every response — agents can route callers to the correct agency (FDA, NHTSA, USCG, EPA) when the product is out of scope
109
- - `total_found`, `offset`, `has_more`, and `truncated` fields on search/recent responses — agents can tell when results are clipped and page through the rest with `offset`
110
- - `cpsc_url` on every recall — authoritative source link for consumer verification
111
- - `source_note` on every response, plus `(CPSC source text)` labels and blockquotes in the rendered output — relayed CPSC narrative is marked as source data, distinct from the server's own guidance
112
- - `data_quality_notes` on every response — gaps observed in the upstream record, derived from which fields CPSC left empty rather than any judgement about the recall
90
+ - Provenance on every response — `source_note`, `cpsc_url`, and `(CPSC source text)` blockquote labels distinguish relayed CPSC narrative from the server's own guidance
91
+ - Pagination discriminators — `total_found`, `offset`, `has_more`, and `truncated` on every search/recent response so agents can tell when results are clipped and page with `offset`; each surface of a page stays within a 64,000-byte budget, and a notice gives the next offset when the budget ends a page early
92
+ - `data_quality_notes` on every response — gaps observed in the upstream record (missing hazard text, no product entries), derived from which fields CPSC left blank rather than any judgment call
93
+ - Jurisdiction note (`cpsc_jurisdiction`) on every response — lets agents route callers to the correct agency (FDA, NHTSA, USCG, EPA) when a product is out of scope
113
94
 
114
95
  ## Getting started
115
96
 
@@ -189,7 +170,7 @@ MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
189
170
 
190
171
  ### Prerequisites
191
172
 
192
- - [Bun v1.3.0](https://bun.sh/) or higher (or Node.js v24+).
173
+ - [Bun v1.4.0](https://bun.sh/) or higher (or Node.js v24+).
193
174
  - No API key required — the CPSC public recalls API is freely accessible.
194
175
 
195
176
  ### Installation
@@ -230,7 +211,7 @@ All configuration is validated at startup via Zod schemas. Key environment varia
230
211
  | `MCP_HTTP_HOST` | HTTP server host | `127.0.0.1` |
231
212
  | `MCP_HTTP_ENDPOINT_PATH` | HTTP endpoint path | `/mcp` |
232
213
  | `MCP_PUBLIC_URL` | Public origin for TLS-terminating reverse-proxy deployments | — |
233
- | `MCP_SESSION_MODE` | Session handling: `auto`, `stateful`, or `stateless`. The schema default `auto` resolves to stateful; this server sets `stateless` explicitly. | `stateless` |
214
+ | `MCP_SESSION_MODE` | Session handling: `auto`, `stateful`, or `stateless`. The server declares `stateless` in `src/index.ts`; setting this overrides it. | `stateless` |
234
215
  | `MCP_AUTH_MODE` | Authentication: `none`, `jwt`, or `oauth` | `none` |
235
216
  | `MCP_LOG_LEVEL` | Log level (`debug`, `info`, `warning`, `error`) | `info` |
236
217
  | `LOGS_DIR` | Directory for log files (Node.js only) | `<project-root>/logs` |
@@ -276,7 +257,7 @@ The Dockerfile defaults to HTTP transport, stateless session mode, and logs to `
276
257
  | Directory | Purpose |
277
258
  |:---|:---|
278
259
  | `src/index.ts` | `createApp()` entry point — registers tools and inits the CPSC service |
279
- | `src/mcp-server/tools` | Tool definitions (`*.tool.ts`). Three tools: search, get-recall, get-recent |
260
+ | `src/mcp-server/tools` | Tool definitions (`definitions/*.tool.ts`) — search, get-recall, get-recent — plus `response-budget.ts`, the page size budget the two list tools share |
280
261
  | `src/services/cpsc-recall` | CPSC recall service — API client, types, normalization |
281
262
 
282
263
  ## Development guide
@@ -290,7 +271,7 @@ See [`CLAUDE.md`](./CLAUDE.md) / [`AGENTS.md`](./AGENTS.md) for development guid
290
271
 
291
272
  ## Contributing
292
273
 
293
- Issues and pull requests are welcome. Run checks and tests before submitting:
274
+ Issues are welcome. Run checks and tests before submitting:
294
275
 
295
276
  ```sh
296
277
  bun run devcheck
@@ -0,0 +1,32 @@
1
+ ---
2
+ summary: "Adopts mcp-ts-core 0.13.6 — the server declares a stateless session posture, cpsc_search_recalls accepts 'hazard' as an alias for hazard_search, and the Bun engine floor rises to 1.4.0, which breaks on older Bun runtimes."
3
+ breaking: true
4
+ security: false
5
+ ---
6
+
7
+ # 0.1.8 — 2026-09-19
8
+
9
+ ## Added
10
+
11
+ - **`cpsc_search_recalls` accepts `hazard` as an alias for `hazard_search`.** `Hazard` is the upstream CPSC query parameter a caller working from the saferproducts.gov docs reaches for; the alias is not advertised in `inputSchema`.
12
+
13
+ ## Changed
14
+
15
+ - **`engines.bun` rises from `>=1.3.0` to `>=1.4.0`.** A consumer running Bun 1.3.x can no longer run the server.
16
+ - **`createApp()` declares `sessionMode: 'stateless'`** in `src/index.ts` — no tool here gates on `ctx.requestInput`, so no caller needs a session to answer a mid-handler prompt. `MCP_SESSION_MODE` still overrides the declared posture whenever it carries a meaningful value.
17
+ - **`tools/list`'s advertised `outputSchema` changes on two error-contract details; `inputSchema` is byte-identical.** Nullable string fields now render as `type: ["string", "null"]` instead of `anyOf: [{type:"string"},{type:"null"}]` — a semantically-equal re-rendering from the `zod` bump below. Each error-contract `reason` description now ends its `when` sentence with a period, so declared reasons no longer run into each other (mcp-ts-core 0.13.5, [#389](https://github.com/cyanheads/mcp-ts-core/issues/389)).
18
+ - **Tests updated for the `InvalidParams` rename** — an out-of-schema argument key now rejects as `InvalidParams` (`-32602`) rather than `ValidationError` (mcp-ts-core 0.13.2, [#416](https://github.com/cyanheads/mcp-ts-core/issues/416)).
19
+ - Framework skills moved from `skills/` to `framework-skills/` — Claude Code and Codex auto-load a plugin's root `skills/`, so keeping development skills there would hand them to every installing agent. Adds the `release-pr-review` skill and resyncs `scripts/`, `changelog/template.md`, and `devcheck.config.json`'s `lint` key.
20
+ - README condensed — an Overview section, a tighter per-tool capability reference, and the Bun 1.4.0 floor.
21
+ - `.claude-plugin/plugin.json` gains keywords and author contact; issue templates route reports between this repo and `mcp-ts-core` and add a security-advisory contact link.
22
+ - Adds `.github/workflows/codeql.yml` — the repo's only GitHub Actions workflow.
23
+
24
+ ## Dependencies
25
+
26
+ - `@cyanheads/mcp-ts-core` `^0.12.3` → `^0.13.6` (13 framework releases)
27
+ - `zod` `^4.4.3` → `^4.6.5`
28
+ - `@biomejs/biome` `^2.5.10` → `^2.5.14`
29
+ - `@types/node` `^26.2.0` → `^26.6.1`
30
+ - `ignore` `^7.0.6` → `^7.0.9`
31
+ - `tsc-alias` `^1.9.2` → `^1.9.5`
32
+ - `vitest` `^4.1.11` → `^5.0.1`
@@ -0,0 +1,31 @@
1
+ ---
2
+ summary: "cpsc_search_recalls now requires a criterion, matches every word of a text filter, and returns zero matches as an empty success; both list tools cap each page at 64,000 bytes, and truncated now equals has_more."
3
+ breaking: true
4
+ security: false
5
+ ---
6
+
7
+ # 0.2.0 — 2026-09-24
8
+
9
+ The first five Changed bullets break existing callers: error handling and paging signals on `cpsc_search_recalls` and `cpsc_get_recent` change.
10
+
11
+ ## Changed
12
+
13
+ - **Zero matches on `cpsc_search_recalls` are an empty success, not the `no_results` error** ([#12](https://github.com/cyanheads/cpsc-recalls-mcp-server/issues/12)). `no_results` leaves the error contract; every success carries an `effectiveQuery` echo, and a zero-match result adds a `notice` naming which criterion to relax.
14
+ - **`cpsc_search_recalls` requires a search criterion** ([#11](https://github.com/cyanheads/cpsc-recalls-mcp-server/issues/11)). With no non-blank text filter and no date bound, it fails with `missing_criteria` before any upstream request; blank and whitespace-only filters count as omitted.
15
+ - **Text filters are capped at 500 characters** ([#18](https://github.com/cyanheads/cpsc-recalls-mcp-server/issues/18)). A longer value on any of the nine filters or the `hazard` alias is rejected as `-32602` before any upstream request; `tools/list` advertises `maxLength: 500`. The one word each filter sends to CPSC is cut to 200 URL-encoded bytes, so a 500-character value in any script stays inside CPSC's 2,048-byte query-string limit.
16
+ - **`truncated` equals `has_more` on both list tools** ([#9](https://github.com/cyanheads/cpsc-recalls-mcp-server/issues/9)). It no longer tracks `total_found > limit`, so final and exhausted pages report `truncated: false`; an offset past the last match returns an empty page with a `notice`.
17
+ - **List-tool pages stop at a 64,000-byte response budget** ([#13](https://github.com/cyanheads/cpsc-recalls-mcp-server/issues/13)). A page can return fewer than `limit` records, with `has_more: true` and a `notice` naming the offset to continue from; at least one record comes back whenever any remain.
18
+ - **`cpsc_get_recent` explains an empty window** in a new `notice`, suggesting a larger `days` or, at 365, `cpsc_search_recalls` date bounds ([#12](https://github.com/cyanheads/cpsc-recalls-mcp-server/issues/12)).
19
+ - **Advertised text describes behavior, not upstream mechanics** ([#10](https://github.com/cyanheads/cpsc-recalls-mcp-server/issues/10)). Tool descriptions, `.describe()` text, error `when`/`recovery`, and server `instructions` are rewritten; all three tools render the jurisdiction under one `CPSC jurisdiction:` label, and an upstream rejection reads `CPSC rejected the request: …`.
20
+ - **`cpsc_get_recall` rejects a malformed `recall_number` with both accepted forms spelled out** (`"25043"`, `"99003a"`) instead of the raw regex ([#10](https://github.com/cyanheads/cpsc-recalls-mcp-server/issues/10)).
21
+ - README tool reference and `docs/design.md` Superseded notes follow the new search and paging behavior; `CLAUDE.md`/`AGENTS.md` declare the gated release mode.
22
+
23
+ ## Fixed
24
+
25
+ - **Multi-word text filters match every word, in any order** ([#16](https://github.com/cyanheads/cpsc-recalls-mcp-server/issues/16)). They matched only a contiguous phrase, so `title_search: "Graco crib"` found nothing; `%`, `_`, and `[…]` now match literally, and straight and curly apostrophes match each other.
26
+ - **Searches that map no upstream parameter include the newest recalls** ([#17](https://github.com/cyanheads/cpsc-recalls-mcp-server/issues/17)). A `hazard_search`-only search now sends `RecallDateStart=1970-01-01`, because the unfiltered CPSC collection has been observed to lag filtered requests and omit the newest recalls.
27
+ - **`cpsc_get_recent` header reads `(1 day)`**, not `(1 days)` ([#9](https://github.com/cyanheads/cpsc-recalls-mcp-server/issues/9)).
28
+
29
+ ## Dependencies
30
+
31
+ - `@types/node` `^26.6.1` → `^26.6.2`
@@ -6,8 +6,8 @@
6
6
 
7
7
  # Required. One-line GitHub Release-style headline. 350 character cap — a
8
8
  # ceiling, not a target. Default short and scannable. Don't pad, don't stitch
9
- # unrelated changes with commas/semicolons into an inventory — pick the
10
- # headline, like a tag's theme line. Quotes required: unquoted YAML treats
9
+ # unrelated changes with commas/semicolons into an inventory — pick the one
10
+ # headline the release is about. Quotes required: unquoted YAML treats
11
11
  # `: ` inside the value as a key separator and fails GitHub's strict parser.
12
12
  summary: ""
13
13
 
@@ -117,30 +117,13 @@ security: false
117
117
  in that unrelated item's metadata.
118
118
 
119
119
  TAG ANNOTATIONS — the annotated tag body renders as the GitHub Release body
120
- via `gh release create --notes-from-tag`. The tag is a derivative of this
121
- changelog entry — a condensed, scannable version, not a copy. Format:
122
-
123
- <theme — omit version number, GitHub prepends it>
124
- ← blank line
125
- <1-2 sentence context: what this release does>
126
- ← blank line
127
- Dependency bumps: ← section header
128
- ← blank line
129
- - `@cyanheads/mcp-ts-core` ^0.9.1 → ^0.9.6 ← bullet
130
- ← blank line
131
- Changed: ← only sections with entries
132
- ← blank line
133
- - `format()` output includes `query` in text mode
134
- ← blank line
135
- Added:
136
- ← blank line
137
- - `manifest.json` scaffolded for MCPB bundle support
138
- - Install badges (Claude Desktop, Cursor, VS Code)
139
- ← blank line
140
- <N> tests pass; `bun run devcheck` clean. ← footer
141
-
142
- Never a flat comma-separated string. Always structured markdown with
143
- sections. The tag must scan well as a rendered GitHub Release page.
120
+ via `gh release create --notes-from-tag`. It is a condensed digest of this
121
+ entry, never a copy, and its format is owned by the `release-and-publish`
122
+ skill (step 4, "Create the annotated tag"): a short subject line without the
123
+ version, flat headline bullets — no Keep-a-Changelog section headers, no
124
+ gates line — at most one deps line, issue backlinks, and the changelog link
125
+ last. In release-PR mode the `git-wrapup` skill authors those bullets as the
126
+ PR body's `## Changes` and the tag copies them.
144
127
  -->
145
128
 
146
129
  ## Added
package/dist/index.js CHANGED
@@ -11,14 +11,16 @@ import { initCpscRecallService } from './services/cpsc-recall/cpsc-recall-servic
11
11
  await createApp({
12
12
  name: 'cpsc-recalls-mcp-server',
13
13
  title: 'cpsc-recalls-mcp-server',
14
+ /**
15
+ * Every tool is a single-shot read against the CPSC API — nothing gates on
16
+ * `ctx.requestInput`, so no caller needs a session to answer a mid-handler prompt.
17
+ * `MCP_SESSION_MODE` still overrides this at deploy time.
18
+ */
19
+ sessionMode: 'stateless',
14
20
  tools: [cpscSearchRecalls, cpscGetRecall, cpscGetRecent],
15
21
  resources: [],
16
22
  prompts: [],
17
- instructions: 'CPSC consumer product recall database (saferproducts.gov). ' +
18
- 'Use cpsc_search_recalls to find recalls by product, brand, hazard, or date. ' +
19
- 'Use cpsc_get_recall for full detail on a specific recall number. ' +
20
- 'Use cpsc_get_recent for a recent recall feed. ' +
21
- 'CPSC jurisdiction: consumer products only — food/drugs (FDA), vehicles/tires (NHTSA), boats (USCG), pesticides (EPA) are covered by other agencies.',
23
+ instructions: 'CPSC consumer product recalls from saferproducts.gov. Search with cpsc_search_recalls, which needs at least one filter (a product, brand, hazard, or other text filter, or a date bound); browse the latest recalls with cpsc_get_recent, and pass a recall number from either to cpsc_get_recall for the full record. CPSC jurisdiction: consumer products only — food/drugs (FDA), motor vehicles/tires (NHTSA), boats (USCG), pesticides (EPA), and firearms (ATF) are covered by other agencies.',
22
24
  setup(core) {
23
25
  void core;
24
26
  initCpscRecallService();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,wDAAwD,CAAC;AACvF,OAAO,EAAE,aAAa,EAAE,MAAM,wDAAwD,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,4DAA4D,CAAC;AAC/F,OAAO,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AAEtF,MAAM,SAAS,CAAC;IACd,IAAI,EAAE,yBAAyB;IAC/B,KAAK,EAAE,yBAAyB;IAChC,KAAK,EAAE,CAAC,iBAAiB,EAAE,aAAa,EAAE,aAAa,CAAC;IACxD,SAAS,EAAE,EAAE;IACb,OAAO,EAAE,EAAE;IACX,YAAY,EACV,6DAA6D;QAC7D,8EAA8E;QAC9E,mEAAmE;QACnE,gDAAgD;QAChD,qJAAqJ;IACvJ,KAAK,CAAC,IAAI;QACR,KAAK,IAAI,CAAC;QACV,qBAAqB,EAAE,CAAC;IAC1B,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,wDAAwD,CAAC;AACvF,OAAO,EAAE,aAAa,EAAE,MAAM,wDAAwD,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,4DAA4D,CAAC;AAC/F,OAAO,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AAEtF,MAAM,SAAS,CAAC;IACd,IAAI,EAAE,yBAAyB;IAC/B,KAAK,EAAE,yBAAyB;IAChC;;;;OAIG;IACH,WAAW,EAAE,WAAW;IACxB,KAAK,EAAE,CAAC,iBAAiB,EAAE,aAAa,EAAE,aAAa,CAAC;IACxD,SAAS,EAAE,EAAE;IACb,OAAO,EAAE,EAAE;IACX,YAAY,EACV,seAAse;IACxe,KAAK,CAAC,IAAI;QACR,KAAK,IAAI,CAAC;QACV,qBAAqB,EAAE,CAAC;IAC1B,CAAC;CACF,CAAC,CAAC"}
@@ -46,14 +46,14 @@ export declare const cpscGetRecall: import("@cyanheads/mcp-ts-core").ToolDefinit
46
46
  }, {
47
47
  readonly reason: "upstream_error";
48
48
  readonly code: JsonRpcErrorCode.ServiceUnavailable;
49
- readonly when: "The saferproducts.gov API returned a transient error or timed out";
50
- readonly recovery: "The CPSC API is occasionally unavailable. Retry in a few seconds.";
49
+ readonly when: "The CPSC recall service (saferproducts.gov) was unavailable, timed out, or sent an unreadable response";
50
+ readonly recovery: "The CPSC recall service is occasionally unavailable. Retry in a few seconds.";
51
51
  readonly retryable: true;
52
52
  }, {
53
53
  readonly reason: "upstream_rejected";
54
54
  readonly code: JsonRpcErrorCode.ServiceUnavailable;
55
- readonly when: "The saferproducts.gov API answered with an error row instead of a recall record, which the same request will always produce";
56
- readonly recovery: "Do not retry this request unchanged — it fails deterministically. Read the message for what CPSC rejected, then confirm the recall number with cpsc_search_recalls.";
55
+ readonly when: "CPSC rejected the lookup instead of returning a recall, and it rejects the same request every time";
56
+ readonly recovery: "Do not retry this request unchanged — it fails deterministically. Read the message for what CPSC rejected, then confirm the recall number with cpsc_search_recalls or cpsc_get_recent.";
57
57
  readonly retryable: false;
58
58
  }], undefined>;
59
59
  //# sourceMappingURL=cpsc-get-recall.tool.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cpsc-get-recall.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/cpsc-get-recall.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAY,MAAM,+BAA+B,CAAC;AAmC3E,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA0XxB,CAAC"}
1
+ {"version":3,"file":"cpsc-get-recall.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/cpsc-get-recall.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAY,MAAM,+BAA+B,CAAC;AAgC3E,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA8WxB,CAAC"}
@@ -6,12 +6,9 @@ import { tool, z } from '@cyanheads/mcp-ts-core';
6
6
  import { JsonRpcErrorCode, McpError } from '@cyanheads/mcp-ts-core/errors';
7
7
  import { getCpscRecallService } from '../../../services/cpsc-recall/cpsc-recall-service.js';
8
8
  /** Static jurisdiction note included in every response. */
9
- const JURISDICTION = 'CPSC covers consumer products — toys, electronics, furniture, appliances, tools, clothing. ' +
10
- 'Does NOT cover: food/drugs (FDA), motor vehicles/tires (NHTSA), boats (USCG), pesticides (EPA), firearms (ATF).';
9
+ const JURISDICTION = 'CPSC covers consumer products — toys, electronics, furniture, appliances, tools, clothing. Does NOT cover: food/drugs (FDA), motor vehicles/tires (NHTSA), boats (USCG), pesticides (EPA), firearms (ATF).';
11
10
  /** Static provenance caveat included in every response. */
12
- const SOURCE_NOTE = 'Recall fields are relayed verbatim from the CPSC record and are neither edited nor verified by this server. ' +
13
- 'CPSC records occasionally carry missing or inconsistent text. ' +
14
- 'Check cpsc_url before acting on a recall for a consumer-facing decision.';
11
+ const SOURCE_NOTE = 'Recall fields are relayed verbatim from the CPSC record and are neither edited nor verified by this server. CPSC records occasionally carry missing or inconsistent text. Check cpsc_url before acting on a recall for a consumer-facing decision.';
15
12
  /** Rendered in place of an upstream narrative field CPSC left null or empty. */
16
13
  const ABSENT_TEXT = '_Not provided by CPSC._';
17
14
  /** Absence placeholder for fields a consumer can still resolve on the CPSC page. */
@@ -33,19 +30,13 @@ function asSourceText(text) {
33
30
  }
34
31
  export const cpscGetRecall = tool('cpsc_get_recall', {
35
32
  title: 'Get CPSC Recall Detail',
36
- description: 'Full detail for a single CPSC recall by recall number. ' +
37
- 'Returns the complete record: hazard description, remedy instructions, all product variants, ' +
38
- 'incident/injury reports, images, and the official CPSC recall page URL. ' +
39
- 'Use after cpsc_search_recalls or cpsc_get_recent to get the full picture on a specific recall. ' +
40
- 'CPSC jurisdiction: consumer products only — food, vehicles, drugs, and pesticides are covered by other agencies.',
33
+ description: 'Fetch the full record for one CPSC recall by recall number: hazard description, remedy instructions, every product variant, UPCs, incident and injury reports, images, and the official CPSC recall page URL. Get a recall number from cpsc_search_recalls or cpsc_get_recent. CPSC jurisdiction: consumer products only — food/drugs (FDA), motor vehicles/tires (NHTSA), boats (USCG), pesticides (EPA), and firearms (ATF) are covered by other agencies.',
41
34
  annotations: { readOnlyHint: true, idempotentHint: true },
42
35
  input: z.object({
43
36
  recall_number: z
44
37
  .string()
45
- .regex(/^\d{5}([a-d])?$/)
46
- .describe('CPSC recall number. Modern records (2002–present) are 5-digit numeric, e.g. "25043". ' +
47
- 'Historical records from 1998–2001 may have a letter suffix a–d, e.g. "99003a". ' +
48
- 'Obtain from cpsc_search_recalls results.'),
38
+ .regex(/^\d{5}([a-d])?$/, 'A CPSC recall number is 5 digits, e.g. "25043", or 5 digits plus a letter a–d for 1998–2001 records, e.g. "99003a". Get one from cpsc_search_recalls or cpsc_get_recent.')
39
+ .describe('CPSC recall number: 5 digits for 2002–present records, e.g. "25043", or 5 digits plus a letter a–d for 1998–2001 records, e.g. "99003a". Get one from cpsc_search_recalls or cpsc_get_recent results.'),
49
40
  }),
50
41
  output: z.object({
51
42
  recall_number: z.string().describe('Recall identifier.'),
@@ -55,9 +46,7 @@ export const cpscGetRecall = tool('cpsc_get_recall', {
55
46
  description: z
56
47
  .string()
57
48
  .nullable()
58
- .describe('Full recall description including product identification details. ' +
59
- 'Model numbers are typically embedded here, not in a structured field. ' +
60
- 'Null when CPSC published the record without a description — rare, but a genuine record can still be complete otherwise.'),
49
+ .describe('Full recall description including product identification details. Model numbers are typically embedded here, not in a structured field. Null when CPSC published the record without a description — rare, but a genuine record can still be complete otherwise.'),
61
50
  cpsc_url: z
62
51
  .string()
63
52
  .describe('Official CPSC recall page — authoritative source for consumers.'),
@@ -72,9 +61,7 @@ export const cpscGetRecall = tool('cpsc_get_recall', {
72
61
  .describe('Hazards — read this first.'),
73
62
  remedy_options: z
74
63
  .array(z.string().describe('Remedy type.'))
75
- .describe('Remedy types available: Refund, Repair, Replace, New Instructions, Dispose, Label, No Remedy Available, Inspect. ' +
76
- 'Often empty — CPSC classified the remedy on fewer than half its records. Read remedy_instructions when this is empty, ' +
77
- 'and fall back to cpsc_url when that is empty too, rather than reporting that no remedy exists.'),
64
+ .describe('Remedy types available: Refund, Repair, Replace, New Instructions, Dispose, Label, No Remedy Available, Inspect. Often empty — CPSC classified the remedy on fewer than half its records. Read remedy_instructions when this is empty, and fall back to cpsc_url when that is empty too, rather than reporting that no remedy exists.'),
78
65
  remedy_instructions: z
79
66
  .string()
80
67
  .describe('Full remedy instructions — exactly what a consumer should do and how to claim.'),
@@ -87,13 +74,10 @@ export const cpscGetRecall = tool('cpsc_get_recall', {
87
74
  .describe('Estimated number of units recalled, e.g. "About 2,500".'),
88
75
  })
89
76
  .describe('A product covered by this recall.'))
90
- .describe('Products covered. A recall may include multiple products. ' +
91
- 'Note: model numbers are often in the description text, not a structured field.'),
77
+ .describe('Products covered. A recall may include multiple products. Model numbers are often in the description text, not a structured field.'),
92
78
  upcs: z
93
79
  .array(z.string().describe('UPC code.'))
94
- .describe('UPC codes for this recall (sparse — ~4% of records have UPCs). ' +
95
- 'UPCs are stored at the recall level in the API, not per-product; ' +
96
- 'when the recall covers multiple products, UPC-to-product attribution is ambiguous.'),
80
+ .describe('UPC codes for this recall (sparse — ~4% of records have UPCs). CPSC lists UPCs for the recall as a whole, not per product, so on a recall covering several products a UPC cannot be tied to one of them.'),
97
81
  injuries: z
98
82
  .string()
99
83
  .describe('Injury and incident report narrative, e.g. "None reported" or incident count.'),
@@ -122,13 +106,11 @@ export const cpscGetRecall = tool('cpsc_get_recall', {
122
106
  .array(z.string().describe('URL of coordinated recall by another agency.'))
123
107
  .describe('URLs of coordinated recalls by other agencies (e.g., Canada Health).'),
124
108
  data_quality_notes: z
125
- .array(z.string().describe('One gap found in the upstream record.'))
126
- .describe('Gaps this server observed in the upstream CPSC record — absent description, absent hazard text, absent product entries. ' +
127
- 'Derived from which fields CPSC left empty, not from any judgement about the recall itself. Empty when nothing is missing.'),
109
+ .array(z.string().describe('One gap found in the CPSC record.'))
110
+ .describe('Gaps this server observed in the CPSC record — absent description, absent hazard text, absent product entries. Derived from which fields CPSC left empty, not from any judgement about the recall itself. Empty when nothing is missing.'),
128
111
  cpsc_jurisdiction: z
129
112
  .string()
130
- .describe('CPSC covers consumer products — toys, electronics, furniture, appliances, tools, clothing. ' +
131
- 'Does NOT cover: food/drugs (FDA), motor vehicles/tires (NHTSA), boats (USCG), pesticides (EPA), firearms (ATF).'),
113
+ .describe('Which products CPSC covers and which agencies cover the rest — food/drugs (FDA), motor vehicles/tires (NHTSA), boats (USCG), pesticides (EPA), firearms (ATF).'),
132
114
  source_note: z
133
115
  .string()
134
116
  .describe('Provenance caveat: recall fields are relayed from CPSC unedited and unverified; check cpsc_url before a consumer-facing decision.'),
@@ -143,15 +125,15 @@ export const cpscGetRecall = tool('cpsc_get_recall', {
143
125
  {
144
126
  reason: 'upstream_error',
145
127
  code: JsonRpcErrorCode.ServiceUnavailable,
146
- when: 'The saferproducts.gov API returned a transient error or timed out',
147
- recovery: 'The CPSC API is occasionally unavailable. Retry in a few seconds.',
128
+ when: 'The CPSC recall service (saferproducts.gov) was unavailable, timed out, or sent an unreadable response',
129
+ recovery: 'The CPSC recall service is occasionally unavailable. Retry in a few seconds.',
148
130
  retryable: true,
149
131
  },
150
132
  {
151
133
  reason: 'upstream_rejected',
152
134
  code: JsonRpcErrorCode.ServiceUnavailable,
153
- when: 'The saferproducts.gov API answered with an error row instead of a recall record, which the same request will always produce',
154
- recovery: 'Do not retry this request unchanged — it fails deterministically. Read the message for what CPSC rejected, then confirm the recall number with cpsc_search_recalls.',
135
+ when: 'CPSC rejected the lookup instead of returning a recall, and it rejects the same request every time',
136
+ recovery: 'Do not retry this request unchanged — it fails deterministically. Read the message for what CPSC rejected, then confirm the recall number with cpsc_search_recalls or cpsc_get_recent.',
155
137
  retryable: false,
156
138
  },
157
139
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"cpsc-get-recall.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/cpsc-get-recall.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,+CAA+C,CAAC;AAErF,2DAA2D;AAC3D,MAAM,YAAY,GAChB,6FAA6F;IAC7F,iHAAiH,CAAC;AAEpH,2DAA2D;AAC3D,MAAM,WAAW,GACf,8GAA8G;IAC9G,gEAAgE;IAChE,0EAA0E,CAAC;AAE7E,gFAAgF;AAChF,MAAM,WAAW,GAAG,yBAAyB,CAAC;AAC9C,oFAAoF;AACpF,MAAM,oBAAoB,GAAG,mDAAmD,CAAC;AAEjF;;;;;;;;GAQG;AACH,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO,IAAI;SACR,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;SAC1B,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,EAAE;IACnD,KAAK,EAAE,wBAAwB;IAC/B,WAAW,EACT,yDAAyD;QACzD,8FAA8F;QAC9F,0EAA0E;QAC1E,iGAAiG;QACjG,kHAAkH;IACpH,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;IAEzD,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,aAAa,EAAE,CAAC;aACb,MAAM,EAAE;aACR,KAAK,CAAC,iBAAiB,CAAC;aACxB,QAAQ,CACP,uFAAuF;YACrF,iFAAiF;YACjF,0CAA0C,CAC7C;KACJ,CAAC;IAEF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QACxD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QAC1D,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QACnE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QACpD,WAAW,EAAE,CAAC;aACX,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,oEAAoE;YAClE,wEAAwE;YACxE,yHAAyH,CAC5H;QACH,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,QAAQ,CAAC,iEAAiE,CAAC;QAC9E,gBAAgB,EAAE,CAAC;aAChB,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,sEAAsE,CAAC;QAEnF,OAAO,EAAE,CAAC;aACP,KAAK,CACJ,CAAC;aACE,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC,EAAE,CAAC;aACrF,QAAQ,CAAC,uCAAuC,CAAC,CACrD;aACA,QAAQ,CAAC,4BAA4B,CAAC;QAEzC,cAAc,EAAE,CAAC;aACd,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;aAC1C,QAAQ,CACP,mHAAmH;YACjH,wHAAwH;YACxH,gGAAgG,CACnG;QACH,mBAAmB,EAAE,CAAC;aACnB,MAAM,EAAE;aACR,QAAQ,CAAC,gFAAgF,CAAC;QAE7F,QAAQ,EAAE,CAAC;aACR,KAAK,CACJ,CAAC;aACE,MAAM,CAAC;YACN,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;YAC1C,cAAc,EAAE,CAAC;iBACd,MAAM,EAAE;iBACR,QAAQ,CAAC,yDAAyD,CAAC;SACvE,CAAC;aACD,QAAQ,CAAC,mCAAmC,CAAC,CACjD;aACA,QAAQ,CACP,4DAA4D;YAC1D,gFAAgF,CACnF;QAEH,IAAI,EAAE,CAAC;aACJ,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;aACvC,QAAQ,CACP,iEAAiE;YAC/D,mEAAmE;YACnE,oFAAoF,CACvF;QAEH,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,QAAQ,CAAC,+EAA+E,CAAC;QAE5F,aAAa,EAAE,CAAC;aACb,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;aAChD,QAAQ,CAAC,mDAAmD,CAAC;QAChE,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QAC7F,SAAS,EAAE,CAAC;aACT,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC,CAAC;aAC3E,QAAQ,CAAC,iDAAiD,CAAC;QAC9D,YAAY,EAAE,CAAC;aACZ,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;aAC/C,QAAQ,CAAC,4BAA4B,CAAC;QACzC,sBAAsB,EAAE,CAAC;aACtB,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;aACrD,QAAQ,CAAC,2BAA2B,CAAC;QAExC,MAAM,EAAE,CAAC;aACN,KAAK,CACJ,CAAC;aACE,MAAM,CAAC;YACN,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;YACtC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;SACzE,CAAC;aACD,QAAQ,CAAC,kCAAkC,CAAC,CAChD;aACA,QAAQ,CAAC,2DAA2D,CAAC;QAExE,mBAAmB,EAAE,CAAC;aACnB,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC,CAAC;aAC1E,QAAQ,CAAC,sEAAsE,CAAC;QAEnF,kBAAkB,EAAE,CAAC;aAClB,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC,CAAC;aACnE,QAAQ,CACP,0HAA0H;YACxH,2HAA2H,CAC9H;QAEH,iBAAiB,EAAE,CAAC;aACjB,MAAM,EAAE;aACR,QAAQ,CACP,6FAA6F;YAC3F,iHAAiH,CACpH;QACH,WAAW,EAAE,CAAC;aACX,MAAM,EAAE;aACR,QAAQ,CACP,mIAAmI,CACpI;KACJ,CAAC;IAEF,MAAM,EAAE;QACN;YACE,MAAM,EAAE,WAAW;YACnB,IAAI,EAAE,gBAAgB,CAAC,QAAQ;YAC/B,IAAI,EAAE,+CAA+C;YACrD,QAAQ,EACN,+KAA+K;SAClL;QACD;YACE,MAAM,EAAE,gBAAgB;YACxB,IAAI,EAAE,gBAAgB,CAAC,kBAAkB;YACzC,IAAI,EAAE,mEAAmE;YACzE,QAAQ,EAAE,mEAAmE;YAC7E,SAAS,EAAE,IAAI;SAChB;QACD;YACE,MAAM,EAAE,mBAAmB;YAC3B,IAAI,EAAE,gBAAgB,CAAC,kBAAkB;YACzC,IAAI,EAAE,6HAA6H;YACnI,QAAQ,EACN,qKAAqK;YACvK,SAAS,EAAE,KAAK;SACjB;KACF;IAED,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG;QACtB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,6BAA6B,EAAE,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;QAEpF,MAAM,GAAG,GAAG,oBAAoB,EAAE,CAAC;QACnC,IAAI,GAAgD,CAAC;QACrD,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChE,IAAI,GAAG,YAAY,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,SAAS,KAAK,KAAK,EAAE,CAAC;gBAC7D,MAAM,GAAG,CAAC,IAAI,CACZ,mBAAmB,EACnB,MAAM,EACN,EAAE,GAAG,GAAG,CAAC,WAAW,CAAC,mBAAmB,CAAC,EAAE,EAC3C,EAAE,KAAK,EAAE,GAAG,EAAE,CACf,CAAC;YACJ,CAAC;YACD,MAAM,GAAG,CAAC,IAAI,CACZ,gBAAgB,EAChB,4BAA4B,MAAM,EAAE,EACpC,EAAE,GAAG,GAAG,CAAC,WAAW,CAAC,gBAAgB,CAAC,EAAE,EACxC,EAAE,KAAK,EAAE,GAAG,EAAE,CACf,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,qCAAqC,KAAK,CAAC,aAAa,IAAI,EAAE;gBACxF,GAAG,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC;aAChC,CAAC,CAAC;QACL,CAAC;QAED,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACxF,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACxC,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,cAAc,EAAE,CAAC,CAAC,aAAa,IAAI,EAAE;SACtC,CAAC,CAAC,CAAC;QAEJ,MAAM,kBAAkB,GAAa,EAAE,CAAC;QACxC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC;YAC7B,kBAAkB,CAAC,IAAI,CACrB,uIAAuI,CACxI,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,kBAAkB,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;QAChF,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,kBAAkB,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;QAC7E,CAAC;QAED,OAAO;YACL,aAAa,EAAE,GAAG,CAAC,YAAY;YAC/B,WAAW,EAAE,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YACxC,YAAY,EAAE,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YAC9C,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,QAAQ,EAAE,GAAG,CAAC,GAAG;YACjB,gBAAgB,EAAE,GAAG,CAAC,eAAe;YACrC,OAAO;YACP,cAAc,EAAE,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YACtE,mBAAmB,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;iBACjD,MAAM,CAAC,OAAO,CAAC;iBACf,IAAI,CAAC,GAAG,CAAC;YACZ,QAAQ;YACR,IAAI,EAAE,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YACvD,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;iBACtC,MAAM,CAAC,OAAO,CAAC;iBACf,IAAI,CAAC,GAAG,CAAC;YACZ,aAAa,EAAE,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YACnE,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YAC3D,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YAC3D,YAAY,EAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YACjE,sBAAsB,EAAE,GAAG,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YACvF,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACzE,mBAAmB,EAAE,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YAC7E,kBAAkB;YAClB,iBAAiB,EAAE,YAAY;YAC/B,WAAW,EAAE,WAAW;SACzB,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,MAAM;QACX,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,KAAK,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,aAAa,OAAO,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC5D,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,WAAW,oBAAoB,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QACnF,KAAK,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;QAC1E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QAChD,KAAK,CAAC,IAAI,CACR,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YACvB,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnE,CAAC,CAAC,WAAW,CAChB,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,MAAM,WAAW,GACf,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;QACxF,KAAK,CAAC,IAAI,CAAC,iBAAiB,WAAW,4BAA4B,CAAC,CAAC;QACrE,KAAK,CAAC,IAAI,CACR,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAC7F,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC9C,KAAK,CAAC,IAAI,CACR,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,oBAAoB,CACvF,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QACtD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,cAAc,IAAI,qBAAqB,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC1B,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,2FAA2F;YAC3F,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClB,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,0BAA0B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;QAC7E,KAAK,CAAC,IAAI,CACR,oFAAoF,CACrF,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QACxF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QACzD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QAC1E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;YAC5C,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACjC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACzB,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,gFAAgF;QAChF,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACjC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;gBACvC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC7B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACnC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,sBAAsB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7C,KAAK,CAAC,IAAI,CAAC,sBAAsB,MAAM,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/E,CAAC;QACD,IACE,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;YAC/B,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;YAC3B,MAAM,CAAC,sBAAsB,CAAC,MAAM,GAAG,CAAC,EACxC,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC9B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;gBACpC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACvB,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,MAAM,CAAC,MAAM,mCAAmC,CAAC,CAAC;YAClF,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAChC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC3B,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;gBACtC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YACrC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,mBAAmB,EAAE,CAAC;gBAC7C,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;YACzB,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,MAAM,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzC,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;YAChD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;gBAC7C,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YAC1B,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,oCAAoC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;QACnE,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC,sBAAsB,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAE7D,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpD,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"cpsc-get-recall.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/cpsc-get-recall.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,+CAA+C,CAAC;AAErF,2DAA2D;AAC3D,MAAM,YAAY,GAChB,4MAA4M,CAAC;AAE/M,2DAA2D;AAC3D,MAAM,WAAW,GACf,oPAAoP,CAAC;AAEvP,gFAAgF;AAChF,MAAM,WAAW,GAAG,yBAAyB,CAAC;AAC9C,oFAAoF;AACpF,MAAM,oBAAoB,GAAG,mDAAmD,CAAC;AAEjF;;;;;;;;GAQG;AACH,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO,IAAI;SACR,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;SAC1B,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,EAAE;IACnD,KAAK,EAAE,wBAAwB;IAC/B,WAAW,EACT,8bAA8b;IAChc,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;IAEzD,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,aAAa,EAAE,CAAC;aACb,MAAM,EAAE;aACR,KAAK,CACJ,iBAAiB,EACjB,0KAA0K,CAC3K;aACA,QAAQ,CACP,uMAAuM,CACxM;KACJ,CAAC;IAEF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QACxD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QAC1D,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QACnE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QACpD,WAAW,EAAE,CAAC;aACX,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,iQAAiQ,CAClQ;QACH,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,QAAQ,CAAC,iEAAiE,CAAC;QAC9E,gBAAgB,EAAE,CAAC;aAChB,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,sEAAsE,CAAC;QAEnF,OAAO,EAAE,CAAC;aACP,KAAK,CACJ,CAAC;aACE,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC,EAAE,CAAC;aACrF,QAAQ,CAAC,uCAAuC,CAAC,CACrD;aACA,QAAQ,CAAC,4BAA4B,CAAC;QAEzC,cAAc,EAAE,CAAC;aACd,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;aAC1C,QAAQ,CACP,uUAAuU,CACxU;QACH,mBAAmB,EAAE,CAAC;aACnB,MAAM,EAAE;aACR,QAAQ,CAAC,gFAAgF,CAAC;QAE7F,QAAQ,EAAE,CAAC;aACR,KAAK,CACJ,CAAC;aACE,MAAM,CAAC;YACN,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;YAC1C,cAAc,EAAE,CAAC;iBACd,MAAM,EAAE;iBACR,QAAQ,CAAC,yDAAyD,CAAC;SACvE,CAAC;aACD,QAAQ,CAAC,mCAAmC,CAAC,CACjD;aACA,QAAQ,CACP,oIAAoI,CACrI;QAEH,IAAI,EAAE,CAAC;aACJ,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;aACvC,QAAQ,CACP,0MAA0M,CAC3M;QAEH,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,QAAQ,CAAC,+EAA+E,CAAC;QAE5F,aAAa,EAAE,CAAC;aACb,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;aAChD,QAAQ,CAAC,mDAAmD,CAAC;QAChE,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QAC7F,SAAS,EAAE,CAAC;aACT,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC,CAAC;aAC3E,QAAQ,CAAC,iDAAiD,CAAC;QAC9D,YAAY,EAAE,CAAC;aACZ,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;aAC/C,QAAQ,CAAC,4BAA4B,CAAC;QACzC,sBAAsB,EAAE,CAAC;aACtB,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;aACrD,QAAQ,CAAC,2BAA2B,CAAC;QAExC,MAAM,EAAE,CAAC;aACN,KAAK,CACJ,CAAC;aACE,MAAM,CAAC;YACN,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;YACtC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;SACzE,CAAC;aACD,QAAQ,CAAC,kCAAkC,CAAC,CAChD;aACA,QAAQ,CAAC,2DAA2D,CAAC;QAExE,mBAAmB,EAAE,CAAC;aACnB,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC,CAAC;aAC1E,QAAQ,CAAC,sEAAsE,CAAC;QAEnF,kBAAkB,EAAE,CAAC;aAClB,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC,CAAC;aAC/D,QAAQ,CACP,0OAA0O,CAC3O;QAEH,iBAAiB,EAAE,CAAC;aACjB,MAAM,EAAE;aACR,QAAQ,CACP,gKAAgK,CACjK;QACH,WAAW,EAAE,CAAC;aACX,MAAM,EAAE;aACR,QAAQ,CACP,mIAAmI,CACpI;KACJ,CAAC;IAEF,MAAM,EAAE;QACN;YACE,MAAM,EAAE,WAAW;YACnB,IAAI,EAAE,gBAAgB,CAAC,QAAQ;YAC/B,IAAI,EAAE,+CAA+C;YACrD,QAAQ,EACN,+KAA+K;SAClL;QACD;YACE,MAAM,EAAE,gBAAgB;YACxB,IAAI,EAAE,gBAAgB,CAAC,kBAAkB;YACzC,IAAI,EAAE,wGAAwG;YAC9G,QAAQ,EAAE,8EAA8E;YACxF,SAAS,EAAE,IAAI;SAChB;QACD;YACE,MAAM,EAAE,mBAAmB;YAC3B,IAAI,EAAE,gBAAgB,CAAC,kBAAkB;YACzC,IAAI,EAAE,oGAAoG;YAC1G,QAAQ,EACN,wLAAwL;YAC1L,SAAS,EAAE,KAAK;SACjB;KACF;IAED,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG;QACtB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,6BAA6B,EAAE,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;QAEpF,MAAM,GAAG,GAAG,oBAAoB,EAAE,CAAC;QACnC,IAAI,GAAgD,CAAC;QACrD,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChE,IAAI,GAAG,YAAY,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,SAAS,KAAK,KAAK,EAAE,CAAC;gBAC7D,MAAM,GAAG,CAAC,IAAI,CACZ,mBAAmB,EACnB,MAAM,EACN,EAAE,GAAG,GAAG,CAAC,WAAW,CAAC,mBAAmB,CAAC,EAAE,EAC3C,EAAE,KAAK,EAAE,GAAG,EAAE,CACf,CAAC;YACJ,CAAC;YACD,MAAM,GAAG,CAAC,IAAI,CACZ,gBAAgB,EAChB,4BAA4B,MAAM,EAAE,EACpC,EAAE,GAAG,GAAG,CAAC,WAAW,CAAC,gBAAgB,CAAC,EAAE,EACxC,EAAE,KAAK,EAAE,GAAG,EAAE,CACf,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,qCAAqC,KAAK,CAAC,aAAa,IAAI,EAAE;gBACxF,GAAG,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC;aAChC,CAAC,CAAC;QACL,CAAC;QAED,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACxF,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACxC,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,cAAc,EAAE,CAAC,CAAC,aAAa,IAAI,EAAE;SACtC,CAAC,CAAC,CAAC;QAEJ,MAAM,kBAAkB,GAAa,EAAE,CAAC;QACxC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC;YAC7B,kBAAkB,CAAC,IAAI,CACrB,uIAAuI,CACxI,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,kBAAkB,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;QAChF,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,kBAAkB,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;QAC7E,CAAC;QAED,OAAO;YACL,aAAa,EAAE,GAAG,CAAC,YAAY;YAC/B,WAAW,EAAE,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YACxC,YAAY,EAAE,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YAC9C,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,QAAQ,EAAE,GAAG,CAAC,GAAG;YACjB,gBAAgB,EAAE,GAAG,CAAC,eAAe;YACrC,OAAO;YACP,cAAc,EAAE,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YACtE,mBAAmB,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;iBACjD,MAAM,CAAC,OAAO,CAAC;iBACf,IAAI,CAAC,GAAG,CAAC;YACZ,QAAQ;YACR,IAAI,EAAE,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YACvD,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;iBACtC,MAAM,CAAC,OAAO,CAAC;iBACf,IAAI,CAAC,GAAG,CAAC;YACZ,aAAa,EAAE,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YACnE,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YAC3D,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YAC3D,YAAY,EAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YACjE,sBAAsB,EAAE,GAAG,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YACvF,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACzE,mBAAmB,EAAE,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YAC7E,kBAAkB;YAClB,iBAAiB,EAAE,YAAY;YAC/B,WAAW,EAAE,WAAW;SACzB,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,MAAM;QACX,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,KAAK,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,aAAa,OAAO,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC5D,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,WAAW,oBAAoB,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QACnF,KAAK,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;QAC1E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QAChD,KAAK,CAAC,IAAI,CACR,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YACvB,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnE,CAAC,CAAC,WAAW,CAChB,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,MAAM,WAAW,GACf,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;QACxF,KAAK,CAAC,IAAI,CAAC,iBAAiB,WAAW,4BAA4B,CAAC,CAAC;QACrE,KAAK,CAAC,IAAI,CACR,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAC7F,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC9C,KAAK,CAAC,IAAI,CACR,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,oBAAoB,CACvF,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QACtD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,cAAc,IAAI,qBAAqB,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC1B,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,2FAA2F;YAC3F,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClB,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,0BAA0B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;QAC7E,KAAK,CAAC,IAAI,CACR,oFAAoF,CACrF,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QACxF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QACzD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QAC1E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;YAC5C,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACjC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACzB,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,gFAAgF;QAChF,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACjC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;gBACvC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC7B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACnC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,sBAAsB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7C,KAAK,CAAC,IAAI,CAAC,sBAAsB,MAAM,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/E,CAAC;QACD,IACE,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;YAC/B,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;YAC3B,MAAM,CAAC,sBAAsB,CAAC,MAAM,GAAG,CAAC,EACxC,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC9B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;gBACpC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACvB,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,MAAM,CAAC,MAAM,mCAAmC,CAAC,CAAC;YAClF,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAChC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC3B,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;gBACtC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YACrC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,mBAAmB,EAAE,CAAC;gBAC7C,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;YACzB,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,MAAM,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzC,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;YAChD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;gBAC7C,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YAC1B,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,oCAAoC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;QACnE,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC,sBAAsB,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAE7D,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpD,CAAC;CACF,CAAC,CAAC"}
@@ -34,14 +34,16 @@ export declare const cpscGetRecent: import("@cyanheads/mcp-ts-core").ToolDefinit
34
34
  }, z.core.$strip>, readonly [{
35
35
  readonly reason: "upstream_error";
36
36
  readonly code: JsonRpcErrorCode.ServiceUnavailable;
37
- readonly when: "The saferproducts.gov API returned a transient error or timed out";
38
- readonly recovery: "The CPSC API is occasionally unavailable. Retry in a few seconds.";
37
+ readonly when: "The CPSC recall service (saferproducts.gov) was unavailable, timed out, or sent an unreadable response";
38
+ readonly recovery: "The CPSC recall service is occasionally unavailable. Retry in a few seconds.";
39
39
  readonly retryable: true;
40
40
  }, {
41
41
  readonly reason: "upstream_rejected";
42
42
  readonly code: JsonRpcErrorCode.ServiceUnavailable;
43
- readonly when: "The saferproducts.gov API answered with an error row instead of recall records, which the same request will always produce";
43
+ readonly when: "CPSC rejected the request instead of returning recalls, and it rejects the same request every time";
44
44
  readonly recovery: "Do not retry this request unchanged — it fails deterministically. Read the message for what CPSC rejected, then try a different days window.";
45
45
  readonly retryable: false;
46
- }], undefined>;
46
+ }], {
47
+ readonly notice: z.ZodOptional<z.ZodString>;
48
+ }>;
47
49
  //# sourceMappingURL=cpsc-get-recent.tool.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cpsc-get-recent.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/cpsc-get-recent.tool.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAY,MAAM,+BAA+B,CAAC;AAmB3E,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA6PxB,CAAC"}
1
+ {"version":3,"file":"cpsc-get-recent.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/cpsc-get-recent.tool.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAY,MAAM,+BAA+B,CAAC;AAmI3E,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkMxB,CAAC"}