@cyanheads/federal-regulations-mcp-server 0.2.0 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +3 -1
- package/CLAUDE.md +3 -1
- package/README.md +5 -1
- package/changelog/0.2.x/0.2.1.md +18 -0
- package/changelog/0.2.x/0.2.2.md +15 -0
- package/dist/mcp-server/resources/definitions/cfr-section.resource.d.ts +12 -1
- package/dist/mcp-server/resources/definitions/cfr-section.resource.d.ts.map +1 -1
- package/dist/mcp-server/resources/definitions/cfr-section.resource.js +19 -3
- package/dist/mcp-server/resources/definitions/cfr-section.resource.js.map +1 -1
- package/dist/mcp-server/resources/definitions/document.resource.d.ts +12 -1
- package/dist/mcp-server/resources/definitions/document.resource.d.ts.map +1 -1
- package/dist/mcp-server/resources/definitions/document.resource.js +15 -0
- package/dist/mcp-server/resources/definitions/document.resource.js.map +1 -1
- package/dist/mcp-server/resources/definitions/index.d.ts +22 -2
- package/dist/mcp-server/resources/definitions/index.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/browse-cfr.tool.d.ts +2 -2
- package/dist/mcp-server/tools/definitions/browse-cfr.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/browse-cfr.tool.js +2 -2
- package/dist/mcp-server/tools/definitions/browse-cfr.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/find-comments.tool.d.ts +3 -3
- package/dist/mcp-server/tools/definitions/find-comments.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/find-comments.tool.js +8 -4
- package/dist/mcp-server/tools/definitions/find-comments.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-cfr-section.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-cfr-section.tool.js +11 -1
- package/dist/mcp-server/tools/definitions/get-cfr-section.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-docket.tool.d.ts +5 -4
- package/dist/mcp-server/tools/definitions/get-docket.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-docket.tool.js +10 -5
- package/dist/mcp-server/tools/definitions/get-docket.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-document.tool.d.ts +1 -1
- package/dist/mcp-server/tools/definitions/get-document.tool.js +1 -1
- package/dist/mcp-server/tools/definitions/get-document.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/index.d.ts +9 -9
- package/dist/services/ecfr/ecfr-service.d.ts +20 -2
- package/dist/services/ecfr/ecfr-service.d.ts.map +1 -1
- package/dist/services/ecfr/ecfr-service.js +50 -28
- package/dist/services/ecfr/ecfr-service.js.map +1 -1
- package/dist/services/ecfr/xml.d.ts +20 -2
- package/dist/services/ecfr/xml.d.ts.map +1 -1
- package/dist/services/ecfr/xml.js +77 -10
- package/dist/services/ecfr/xml.js.map +1 -1
- package/dist/services/ecfr-mirror/ecfr-mirror.d.ts.map +1 -1
- package/dist/services/ecfr-mirror/ecfr-mirror.js +31 -5
- package/dist/services/ecfr-mirror/ecfr-mirror.js.map +1 -1
- package/dist/services/federal-register/federal-register-service.d.ts +15 -3
- package/dist/services/federal-register/federal-register-service.d.ts.map +1 -1
- package/dist/services/federal-register/federal-register-service.js +38 -10
- package/dist/services/federal-register/federal-register-service.js.map +1 -1
- package/dist/services/regulations-gov/regulations-gov-service.d.ts +27 -7
- package/dist/services/regulations-gov/regulations-gov-service.d.ts.map +1 -1
- package/dist/services/regulations-gov/regulations-gov-service.js +77 -18
- package/dist/services/regulations-gov/regulations-gov-service.js.map +1 -1
- package/dist/services/upstream-failure.d.ts +110 -0
- package/dist/services/upstream-failure.d.ts.map +1 -0
- package/dist/services/upstream-failure.js +143 -0
- package/dist/services/upstream-failure.js.map +1 -0
- package/package.json +1 -1
- package/scripts/_mirror-context.ts +16 -3
- package/scripts/ecfr-mirror-init.ts +20 -11
- package/scripts/ecfr-mirror-refresh.ts +9 -6
- package/scripts/ecfr-mirror-verify.ts +31 -19
- package/server.json +3 -3
|
@@ -2,8 +2,13 @@
|
|
|
2
2
|
* @fileoverview Minimal, dependency-free extraction of CFR text from eCFR
|
|
3
3
|
* versioner XML. The versioner returns `<DIV8 TYPE="SECTION">` and
|
|
4
4
|
* `<DIV9 TYPE="APPENDIX">` elements with a `<HEAD>` heading over body content —
|
|
5
|
-
* paragraphs, `<HD1>`–`<HD7>` subheadings, editorial notes,
|
|
6
|
-
*
|
|
5
|
+
* paragraphs, `<HD1>`–`<HD7>` subheadings, editorial notes, tables, `<CITA>`
|
|
6
|
+
* source notes, and `<img>` figure references; this module pulls those into flat
|
|
7
|
+
* records with tags stripped and entities decoded.
|
|
8
|
+
*
|
|
9
|
+
* It also answers whether a fetched document is whole
|
|
10
|
+
* ({@link isCompleteXmlDocument}), which the mirror ingest asks before letting a
|
|
11
|
+
* pass over a title delete rows the pass did not rewrite.
|
|
7
12
|
*
|
|
8
13
|
* The walk is structural rather than per-element, because one fact is only
|
|
9
14
|
* available from the enclosing element: a node's **part** comes from the
|
|
@@ -93,27 +98,89 @@ function renderTable(inner) {
|
|
|
93
98
|
* runs on to the next `</FP>` in the document and swallows every block in
|
|
94
99
|
* between. The lookahead ends the tag name at the tag itself, keeping `<P>` from
|
|
95
100
|
* opening on `<PSPACE>`.
|
|
101
|
+
*
|
|
102
|
+
* The same family is also written self-closing where it stands for spacing or a
|
|
103
|
+
* rule rather than for text (`<PSPACE/>`, `<FP-DASH/>`, `<P/>`), and those must
|
|
104
|
+
* not open a capture: the backreference would run on to the next `</PSPACE>` in
|
|
105
|
+
* the node and swallow every block between, flattening their paragraph breaks
|
|
106
|
+
* and dropping the figures among them. A tag closed by `/>` carries nothing to
|
|
107
|
+
* emit, so the lookbehind ends the alternative there and the scan moves on.
|
|
108
|
+
*
|
|
109
|
+
* `<img>` is the one block with no closing tag, so it cannot ride the
|
|
110
|
+
* backreference and takes an alternative of its own; it is told apart from the
|
|
111
|
+
* paired blocks by which group matched.
|
|
96
112
|
*/
|
|
97
|
-
const BODY_BLOCK = /<(P|FP[\dA-Z-]*|PSPACE|HD[1-7]|HED|TABLE)(?=[\s>/])[^>]
|
|
113
|
+
const BODY_BLOCK = /<(P|FP[\dA-Z-]*|PSPACE|HD[1-7]|HED|TABLE|CITA)(?=[\s>/])[^>]*(?<!\/)>([\s\S]*?)<\/\1\s*>|<img\b([^>]*)>/gi;
|
|
114
|
+
/**
|
|
115
|
+
* A figure reference built from an `<img>` opening-tag attribute run, or an
|
|
116
|
+
* empty string when the tag names no source — there is no graphic to point at.
|
|
117
|
+
*/
|
|
118
|
+
function figureReference(attrs) {
|
|
119
|
+
const src = attrs.match(/\bsrc="([^"]*)"/i)?.[1];
|
|
120
|
+
return src ? `[Figure: ${src}]` : '';
|
|
121
|
+
}
|
|
98
122
|
/**
|
|
99
123
|
* Extract body text from a section or appendix fragment: every paragraph,
|
|
100
|
-
* subheading (`<HD1>`–`<HD7>`, an editorial note's `<HED>`)
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
-
*
|
|
104
|
-
* dropping them leaves the body a wall of
|
|
105
|
-
* headings that are not there.
|
|
124
|
+
* subheading (`<HD1>`–`<HD7>`, an editorial note's `<HED>`), `<TABLE>`,
|
|
125
|
+
* `<CITA>` source note, and figure reference in document order, joined by blank
|
|
126
|
+
* lines, with the `<HEAD>` left out so it isn't duplicated. Subheadings carry the
|
|
127
|
+
* structure of an appendix — the numbered stages of a reference method, the
|
|
128
|
+
* lettered divisions of a model form — so dropping them leaves the body a wall of
|
|
129
|
+
* paragraphs whose numbering refers to headings that are not there.
|
|
130
|
+
*
|
|
131
|
+
* A `<CITA>` is the bracketed Federal Register history a section or appendix ends
|
|
132
|
+
* in ("[45 FR 44502, July 1, 1980, as amended at 62 FR 38652, July 18, 1997]").
|
|
133
|
+
* It is the one line of codified text that names the rulemakings that produced
|
|
134
|
+
* it, so it carries verbatim rather than being parsed into document numbers.
|
|
135
|
+
*
|
|
136
|
+
* A figure is a graphic the versioner references but does not inline. Its `src`
|
|
137
|
+
* is the only thing the document holds, and a node whose whole content is one
|
|
138
|
+
* reads back as an empty body without it — indistinguishable from `[Reserved]`.
|
|
106
139
|
*/
|
|
107
140
|
function extractBody(fragment) {
|
|
108
141
|
const withoutHead = fragment.replace(/<HEAD[^>]*>[\s\S]*?<\/HEAD>/i, '');
|
|
109
142
|
const blocks = [];
|
|
110
143
|
for (const m of withoutHead.matchAll(BODY_BLOCK)) {
|
|
111
|
-
const
|
|
144
|
+
const tag = m[1]?.toUpperCase();
|
|
145
|
+
// No tag name means the `<img>` alternative matched — it has no closing tag
|
|
146
|
+
// to backreference, so it captures its attribute run instead.
|
|
147
|
+
const text = tag === undefined
|
|
148
|
+
? figureReference(m[3] ?? '')
|
|
149
|
+
: tag === 'TABLE'
|
|
150
|
+
? renderTable(m[2] ?? '')
|
|
151
|
+
: stripTags(m[2] ?? '');
|
|
112
152
|
if (text)
|
|
113
153
|
blocks.push(text);
|
|
114
154
|
}
|
|
115
155
|
return blocks.join('\n\n');
|
|
116
156
|
}
|
|
157
|
+
/** An XML prologue construct (declaration, comment, doctype) or an element open tag. */
|
|
158
|
+
const PROLOGUE_OR_ELEMENT = /<(?:\?[\s\S]*?\?>|!--[\s\S]*?-->|![^>]*>)|<([A-Za-z][\w.-]*)(?=[\s>/])[^>]*>/g;
|
|
159
|
+
/**
|
|
160
|
+
* Whether an XML document is whole rather than cut short. A versioner response is
|
|
161
|
+
* a single document under one root element, and that root's closing tag is the
|
|
162
|
+
* last thing in it — so a body truncated anywhere, by a proxy returning the first
|
|
163
|
+
* N bytes or a connection dropped mid-stream, is missing it. Content served in
|
|
164
|
+
* place of a document (an error page, a JSON fault) opens no element at all and
|
|
165
|
+
* fails the same way.
|
|
166
|
+
*
|
|
167
|
+
* The root is read from the document rather than named here: what the versioner
|
|
168
|
+
* calls its root is upstream's to change, while "the root that opened is closed"
|
|
169
|
+
* holds for every whole document either way.
|
|
170
|
+
*/
|
|
171
|
+
export function isCompleteXmlDocument(xml) {
|
|
172
|
+
for (const m of xml.matchAll(PROLOGUE_OR_ELEMENT)) {
|
|
173
|
+
const name = m[1];
|
|
174
|
+
if (!name)
|
|
175
|
+
continue; // A declaration, comment, or doctype — the root is further on.
|
|
176
|
+
// Scanned from an offset rather than over a slice: a whole title document is
|
|
177
|
+
// up to ~150 MB, and slicing it to search the tail copies all of it.
|
|
178
|
+
const closing = new RegExp(`</${name.replace(/\./g, '\\.')}\\s*>`, 'gi');
|
|
179
|
+
closing.lastIndex = m.index + m[0].length;
|
|
180
|
+
return closing.test(xml);
|
|
181
|
+
}
|
|
182
|
+
return false;
|
|
183
|
+
}
|
|
117
184
|
/** The `N` attribute — the identifier — on an element's opening-tag attribute run. */
|
|
118
185
|
function identifier(openTag) {
|
|
119
186
|
return openTag.match(/\bN="([^"]*)"/i)?.[1] || null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xml.js","sourceRoot":"","sources":["../../../src/services/ecfr/xml.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"xml.js","sourceRoot":"","sources":["../../../src/services/ecfr/xml.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ecfr-mirror.d.ts","sourceRoot":"","sources":["../../../src/services/ecfr-mirror/ecfr-mirror.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,EAEL,KAAK,MAAM,EAIZ,MAAM,+BAA+B,CAAC;AAKvC,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"ecfr-mirror.d.ts","sourceRoot":"","sources":["../../../src/services/ecfr-mirror/ecfr-mirror.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,EAEL,KAAK,MAAM,EAIZ,MAAM,+BAA+B,CAAC;AAKvC,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AA0HjF;;;;;GAKG;AACH,eAAO,MAAM,UAAU,EAAE,MA2IvB,CAAC;AA0BH;;;;;;GAMG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAMpD;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAG1D;AAED,mDAAmD;AACnD,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB,6DAA6D;IAC7D,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;;;;;;GASG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,CAexD;AAeD;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAYnC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,aAAa,EAAE,CAAA;CAAE,CAAC,CA+B3D"}
|
|
@@ -28,7 +28,7 @@ import { logger, requestContextService } from '@cyanheads/mcp-ts-core/utils';
|
|
|
28
28
|
import { getServerConfig } from '../../config/server-config.js';
|
|
29
29
|
import { sectionCite } from '../../services/ecfr/cite.js';
|
|
30
30
|
import { getEcfrService } from '../../services/ecfr/ecfr-service.js';
|
|
31
|
-
import { parseCfrXml } from '../../services/ecfr/xml.js';
|
|
31
|
+
import { isCompleteXmlDocument, parseCfrXml } from '../../services/ecfr/xml.js';
|
|
32
32
|
/** Primary table name for the mirror. */
|
|
33
33
|
const TABLE = 'cfr_sections';
|
|
34
34
|
/** Auxiliary table for fast title/part browse. */
|
|
@@ -58,8 +58,16 @@ const INGEST_VERSION_KEY = 'ingest_version';
|
|
|
58
58
|
* sections without a dot (14 CFR 241) had every row filed under a part named
|
|
59
59
|
* after the section, so `14 CFR 241` Section 25 answered searches scoped to
|
|
60
60
|
* Part 25 — Airworthiness Standards — with traffic-reporting text.
|
|
61
|
+
* 3. `body_text` carries the `<CITA>` source citation and `[Figure: …]`
|
|
62
|
+
* references the extractor now emits. A row written without them answers a
|
|
63
|
+
* cite with materially different text than the live path returns for the same
|
|
64
|
+
* cite — 41% of sections across a four-title sample — while `source` names
|
|
65
|
+
* which corpus answered but not that its text is short. The read tool states
|
|
66
|
+
* that the citation and figure references are present and that the body is
|
|
67
|
+
* empty only for a reserved location, so a row lacking them contradicts the
|
|
68
|
+
* contract the tool advertises rather than merely trailing it.
|
|
61
69
|
*/
|
|
62
|
-
const INGEST_VERSION =
|
|
70
|
+
const INGEST_VERSION = 3;
|
|
63
71
|
/** Composite primary-key value for a section row: `title:part:section`. */
|
|
64
72
|
function rowId(title, part, section) {
|
|
65
73
|
return `${title}:${part}:${section}`;
|
|
@@ -171,6 +179,16 @@ export const ecfrMirror = defineMirror({
|
|
|
171
179
|
const xml = await fetchTitleXml(ecfr, title.number, issueDate, ctx);
|
|
172
180
|
if (!xml)
|
|
173
181
|
continue;
|
|
182
|
+
// A pass may tombstone only what it read in full. A document that arrives
|
|
183
|
+
// cut short — a dropped stream, a proxy answering 200 with the first N
|
|
184
|
+
// bytes — parses to a prefix of the title's sections, and every section
|
|
185
|
+
// past the cut would be deleted as though it had been withdrawn upstream.
|
|
186
|
+
// A prefix is indistinguishable from a title that genuinely shrank, so the
|
|
187
|
+
// question is asked of the document rather than of the row count.
|
|
188
|
+
if (!isCompleteXmlDocument(xml)) {
|
|
189
|
+
logger.warning(`eCFR mirror: title ${title.number} (${issueDate}) arrived incomplete — its root element is unclosed; leaving its existing rows untouched`, requestContextService.createRequestContext({ operation: 'ecfr-mirror:sync' }));
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
174
192
|
const { sections } = parseCfrXml(xml);
|
|
175
193
|
const records = [];
|
|
176
194
|
const partCounts = new Map();
|
|
@@ -440,9 +458,16 @@ async function fetchTitleXml(ecfr, title, date, ctx) {
|
|
|
440
458
|
}
|
|
441
459
|
/**
|
|
442
460
|
* A minimal `Context` shim for the sync ingester, which runs outside the MCP
|
|
443
|
-
* request pipeline (CLI / cron)
|
|
444
|
-
*
|
|
445
|
-
*
|
|
461
|
+
* request pipeline (CLI / cron), where there is no definition and so no declared
|
|
462
|
+
* error contract. The remaining Context surface is stubbed off a real
|
|
463
|
+
* RequestContext base.
|
|
464
|
+
*
|
|
465
|
+
* `recoveryFor` has to be one of the stubs: every eCFR fetch runs through
|
|
466
|
+
* `withUpstreamReason`, which calls it on any transport failure. Left off, an
|
|
467
|
+
* eCFR 5xx mid-sync raised `TypeError: ctx.recoveryFor is not a function` in
|
|
468
|
+
* place of the classified error — swallowed into a misleading "failed to fetch
|
|
469
|
+
* title N" on the per-title path, and fatal to the run on `listTitles`. `{}` is
|
|
470
|
+
* what the real resolver returns for a caller that declares nothing.
|
|
446
471
|
*/
|
|
447
472
|
function mirrorContext(signal) {
|
|
448
473
|
const base = requestContextService.createRequestContext({ operation: 'ecfr-mirror:sync' });
|
|
@@ -450,6 +475,7 @@ function mirrorContext(signal) {
|
|
|
450
475
|
...base,
|
|
451
476
|
signal,
|
|
452
477
|
log: logger,
|
|
478
|
+
recoveryFor: () => ({}),
|
|
453
479
|
};
|
|
454
480
|
}
|
|
455
481
|
//# sourceMappingURL=ecfr-mirror.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ecfr-mirror.js","sourceRoot":"","sources":["../../../src/services/ecfr-mirror/ecfr-mirror.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ecfr-mirror.js","sourceRoot":"","sources":["../../../src/services/ecfr-mirror/ecfr-mirror.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,8 +3,11 @@
|
|
|
3
3
|
* API v1 (federalregister.gov/api/v1). Backs the document search, single-document
|
|
4
4
|
* fetch (with the cross-source docket/CFR handles), and the open-comment-window
|
|
5
5
|
* tools. Each method wraps the full fetch + parse pipeline in `withRetry`;
|
|
6
|
-
* `fetchWithTimeout` throws a classified `McpError` on a non-OK response,
|
|
7
|
-
* response parser detects HTML error pages and re-throws them as transient
|
|
6
|
+
* `fetchWithTimeout` throws a classified `McpError` on a non-OK response, the
|
|
7
|
+
* response parser detects HTML error pages and re-throws them as transient, and
|
|
8
|
+
* `rethrowTransportFailure` re-codes the 5xx statuses the status→code map calls
|
|
9
|
+
* `InternalError`. A transport failure that survives retry leaves as
|
|
10
|
+
* `upstream_unavailable`; a 404 on a document lookup leaves as `not_found`.
|
|
8
11
|
* @module services/federal-register/federal-register-service
|
|
9
12
|
*/
|
|
10
13
|
import type { Context } from '@cyanheads/mcp-ts-core';
|
|
@@ -22,7 +25,16 @@ export declare class FederalRegisterService {
|
|
|
22
25
|
listOpenComments(params: OpenCommentsParams, asOf: string, ctx: Context): Promise<OpenCommentsResponse>;
|
|
23
26
|
/** Fetch + parse JSON with retry; HTML error pages become transient errors. */
|
|
24
27
|
private fetchJson;
|
|
25
|
-
/**
|
|
28
|
+
/**
|
|
29
|
+
* Fetch plain text (the document body) with retry.
|
|
30
|
+
*
|
|
31
|
+
* Every status this leg answers with is a transport failure. The URL is one the
|
|
32
|
+
* Federal Register just published in the document's own metadata, so no status
|
|
33
|
+
* it returns names a caller mistake — the document number was resolved by the
|
|
34
|
+
* fetch before it. A 404 here is the upstream contradicting itself, and the
|
|
35
|
+
* `NotFound` it maps to reads as "no such document" on a tool whose only
|
|
36
|
+
* declared `not_found` means exactly that.
|
|
37
|
+
*/
|
|
26
38
|
private fetchText;
|
|
27
39
|
}
|
|
28
40
|
export declare function initFederalRegisterService(config: AppConfig, storage: StorageService): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"federal-register-service.d.ts","sourceRoot":"","sources":["../../../src/services/federal-register/federal-register-service.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"federal-register-service.d.ts","sourceRoot":"","sources":["../../../src/services/federal-register/federal-register-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAO/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAKrE,OAAO,KAAK,EAEV,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAGhB,kBAAkB,EAClB,oBAAoB,EAGrB,MAAM,YAAY,CAAC;AA+CpB,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAEjC,YAAY,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAEvD;IAED,iFAAiF;IAC3E,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA6B5E;IAED,gFAAgF;IAC1E,WAAW,CACf,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,OAAO,EACxB,GAAG,EAAE,OAAO,GACX,OAAO,CAAC,gBAAgB,CAAC,CA6C3B;IAED,kFAAkF;IAC5E,gBAAgB,CACpB,MAAM,EAAE,kBAAkB,EAC1B,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,OAAO,GACX,OAAO,CAAC,oBAAoB,CAAC,CA4B/B;IAED,+EAA+E;IAC/E,OAAO,CAAC,SAAS;IA4BjB;;;;;;;;;OASG;IACH,OAAO,CAAC,SAAS;CAelB;AAiGD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAE3F;AAED,wBAAgB,yBAAyB,IAAI,sBAAsB,CAOlE"}
|
|
@@ -3,14 +3,18 @@
|
|
|
3
3
|
* API v1 (federalregister.gov/api/v1). Backs the document search, single-document
|
|
4
4
|
* fetch (with the cross-source docket/CFR handles), and the open-comment-window
|
|
5
5
|
* tools. Each method wraps the full fetch + parse pipeline in `withRetry`;
|
|
6
|
-
* `fetchWithTimeout` throws a classified `McpError` on a non-OK response,
|
|
7
|
-
* response parser detects HTML error pages and re-throws them as transient
|
|
6
|
+
* `fetchWithTimeout` throws a classified `McpError` on a non-OK response, the
|
|
7
|
+
* response parser detects HTML error pages and re-throws them as transient, and
|
|
8
|
+
* `rethrowTransportFailure` re-codes the 5xx statuses the status→code map calls
|
|
9
|
+
* `InternalError`. A transport failure that survives retry leaves as
|
|
10
|
+
* `upstream_unavailable`; a 404 on a document lookup leaves as `not_found`.
|
|
8
11
|
* @module services/federal-register/federal-register-service
|
|
9
12
|
*/
|
|
10
13
|
import { JsonRpcErrorCode, McpError, notFound, serviceUnavailable, } from '@cyanheads/mcp-ts-core/errors';
|
|
11
14
|
import { fetchWithTimeout, withRetry } from '@cyanheads/mcp-ts-core/utils';
|
|
12
15
|
import { getServerConfig } from '../../config/server-config.js';
|
|
13
16
|
import { toRequestContext } from '../../services/request-context.js';
|
|
17
|
+
import { rethrowTransportFailure, withUpstreamReason } from '../../services/upstream-failure.js';
|
|
14
18
|
const TIMEOUT_MS = 15_000;
|
|
15
19
|
const BASE_DELAY_MS = 300;
|
|
16
20
|
/** Fields requested from the list/search endpoint. */
|
|
@@ -108,7 +112,7 @@ export class FederalRegisterService {
|
|
|
108
112
|
// actionable not_found so the tool's contract recovery surfaces, rather
|
|
109
113
|
// than a raw "Fetch failed 404".
|
|
110
114
|
if (err instanceof McpError && err.code === JsonRpcErrorCode.NotFound) {
|
|
111
|
-
throw notFound(`No Federal Register document found with number ${documentNumber}.`, { documentNumber }, { cause: err });
|
|
115
|
+
throw notFound(`No Federal Register document found with number ${documentNumber}.`, { documentNumber, reason: 'not_found', ...ctx.recoveryFor('not_found') }, { cause: err });
|
|
112
116
|
}
|
|
113
117
|
throw err;
|
|
114
118
|
}
|
|
@@ -147,26 +151,50 @@ export class FederalRegisterService {
|
|
|
147
151
|
/** Fetch + parse JSON with retry; HTML error pages become transient errors. */
|
|
148
152
|
fetchJson(url, ctx, operation, expectedStatuses) {
|
|
149
153
|
const reqCtx = toRequestContext(ctx, operation);
|
|
150
|
-
return withRetry(async () => {
|
|
154
|
+
return withUpstreamReason(withRetry(async () => {
|
|
151
155
|
const response = await fetchWithTimeout(url, TIMEOUT_MS, reqCtx, {
|
|
152
156
|
signal: ctx.signal,
|
|
153
157
|
...(expectedStatuses && { expectedStatuses }),
|
|
154
|
-
});
|
|
158
|
+
}).catch(rethrowTransportFailure);
|
|
155
159
|
const text = await response.text();
|
|
156
160
|
if (looksLikeHtml(text)) {
|
|
157
161
|
throw serviceUnavailable('Federal Register returned an HTML error page instead of JSON — likely momentarily unavailable.');
|
|
158
162
|
}
|
|
159
163
|
return JSON.parse(text);
|
|
160
|
-
}, { operation, context: reqCtx, baseDelayMs: BASE_DELAY_MS, signal: ctx.signal });
|
|
164
|
+
}, { operation, context: reqCtx, baseDelayMs: BASE_DELAY_MS, signal: ctx.signal }), ctx);
|
|
161
165
|
}
|
|
162
|
-
/**
|
|
166
|
+
/**
|
|
167
|
+
* Fetch plain text (the document body) with retry.
|
|
168
|
+
*
|
|
169
|
+
* Every status this leg answers with is a transport failure. The URL is one the
|
|
170
|
+
* Federal Register just published in the document's own metadata, so no status
|
|
171
|
+
* it returns names a caller mistake — the document number was resolved by the
|
|
172
|
+
* fetch before it. A 404 here is the upstream contradicting itself, and the
|
|
173
|
+
* `NotFound` it maps to reads as "no such document" on a tool whose only
|
|
174
|
+
* declared `not_found` means exactly that.
|
|
175
|
+
*/
|
|
163
176
|
fetchText(url, ctx, operation) {
|
|
164
177
|
const reqCtx = toRequestContext(ctx, operation);
|
|
165
|
-
return withRetry(async () => {
|
|
166
|
-
const response = await fetchWithTimeout(url, TIMEOUT_MS, reqCtx, {
|
|
178
|
+
return withUpstreamReason(withRetry(async () => {
|
|
179
|
+
const response = await fetchWithTimeout(url, TIMEOUT_MS, reqCtx, {
|
|
180
|
+
signal: ctx.signal,
|
|
181
|
+
}).catch(rethrowBodyFailure);
|
|
167
182
|
return response.text();
|
|
168
|
-
}, { operation, context: reqCtx, baseDelayMs: BASE_DELAY_MS, signal: ctx.signal });
|
|
183
|
+
}, { operation, context: reqCtx, baseDelayMs: BASE_DELAY_MS, signal: ctx.signal }), ctx);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Re-raise a document-body fetch failure as a transport failure, so
|
|
188
|
+
* {@link withUpstreamReason} stamps it `upstream_unavailable` instead of letting
|
|
189
|
+
* the status→code map answer for a lookup this leg never performed. Keyed on
|
|
190
|
+
* `data.status`, which only a real HTTP response sets — a caller abort and a
|
|
191
|
+
* timeout keep their own classification.
|
|
192
|
+
*/
|
|
193
|
+
function rethrowBodyFailure(error) {
|
|
194
|
+
if (error instanceof McpError && typeof error.data?.status === 'number') {
|
|
195
|
+
throw serviceUnavailable(`Federal Register served HTTP ${error.data.status} for the document body URL it published.`, { ...error.data }, { cause: error });
|
|
169
196
|
}
|
|
197
|
+
throw error;
|
|
170
198
|
}
|
|
171
199
|
/** Map raw FR `cfr_references` (sparse) → domain `CfrReference[]`. */
|
|
172
200
|
function normalizeCfrReferences(raw) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"federal-register-service.js","sourceRoot":"","sources":["../../../src/services/federal-register/federal-register-service.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"federal-register-service.js","sourceRoot":"","sources":["../../../src/services/federal-register/federal-register-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,10 +3,14 @@
|
|
|
3
3
|
* API (api.regulations.gov/v4, `X-Api-Key`). Backs `get_docket` and
|
|
4
4
|
* `find_comments`, and enriches `list_open_comments`. JSON:API responses are
|
|
5
5
|
* unwrapped to flat domain objects. The key is optional at the service level
|
|
6
|
-
* (`hasKey()` lets keyless tools degrade or throw `auth_required
|
|
7
|
-
*
|
|
8
|
-
* unusable resource ID joins the 404s on
|
|
9
|
-
*
|
|
6
|
+
* (`hasKey()` lets keyless tools degrade or throw `auth_required`, which a key
|
|
7
|
+
* the API rejects raises too); 429s carry a distinct `rate_limited` signal via
|
|
8
|
+
* `Retry-After`, and a 400 that names an unusable resource ID joins the 404s on
|
|
9
|
+
* the `not_found` path. Those branches read the live `Response`, so requests go
|
|
10
|
+
* through `fetchUpstream` rather than the framework's `fetchWithTimeout`, which
|
|
11
|
+
* throws every non-2xx before a caller can inspect it; the wrapper keeps the
|
|
12
|
+
* branching and still classifies a connect-level failure as a transport failure.
|
|
13
|
+
* Comment bodies are HTML-stripped and attachment-primary submissions flagged.
|
|
10
14
|
* @module services/regulations-gov/regulations-gov-service
|
|
11
15
|
*/
|
|
12
16
|
import type { Context } from '@cyanheads/mcp-ts-core';
|
|
@@ -49,9 +53,25 @@ export declare class RegulationsGovService {
|
|
|
49
53
|
*/
|
|
50
54
|
resolveFrDocumentObjectId(frDocumentNumber: string, ctx: Context): Promise<string | null>;
|
|
51
55
|
/**
|
|
52
|
-
* Fetch + parse JSON with key header and retry; maps
|
|
53
|
-
* both flavours of "no such record" (404, and the 400
|
|
54
|
-
* for an ID it cannot parse) → not_found.
|
|
56
|
+
* Fetch + parse JSON with key header and retry; maps 401/403 → auth_required,
|
|
57
|
+
* 429 → rate_limited, and both flavours of "no such record" (404, and the 400
|
|
58
|
+
* Regulations.gov issues for an ID it cannot parse) → not_found. Whatever
|
|
59
|
+
* survives retry as a transport failure leaves as upstream_unavailable.
|
|
60
|
+
*
|
|
61
|
+
* The request goes through `fetchUpstream` rather than bare `fetch` so a
|
|
62
|
+
* connect-level failure — one that never produces a `Response`, so none of the
|
|
63
|
+
* status branches below can see it — is classified as a transport failure
|
|
64
|
+
* instead of reaching the caller as an unclassified `InternalError`. The
|
|
65
|
+
* branches themselves need the live `Response` (the 400 discrimination reads
|
|
66
|
+
* the body, the 429 reads `Retry-After`), which is why this is not
|
|
67
|
+
* `fetchWithTimeout`: that helper turns every non-2xx into a thrown `McpError`
|
|
68
|
+
* before the caller sees it, and its `expectedStatuses` option only lowers the
|
|
69
|
+
* log severity of that throw.
|
|
70
|
+
*
|
|
71
|
+
* Retry is scoped to `retryTransportOnly`: a 429 on the shared hourly key is
|
|
72
|
+
* deterministic for the rest of the window, and expressing that here rather
|
|
73
|
+
* than through `data.retryable` keeps the flag — which is also the caller's own
|
|
74
|
+
* backoff hint — from contradicting the contract both tools declare.
|
|
55
75
|
*/
|
|
56
76
|
private fetchJson;
|
|
57
77
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"regulations-gov-service.d.ts","sourceRoot":"","sources":["../../../src/services/regulations-gov/regulations-gov-service.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"regulations-gov-service.d.ts","sourceRoot":"","sources":["../../../src/services/regulations-gov/regulations-gov-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAUrE,OAAO,KAAK,EAEV,mBAAmB,EACnB,iBAAiB,EAEjB,YAAY,EASb,MAAM,YAAY,CAAC;AAIpB,qCAAqC;AACrC,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,+EAA+E;AAC/E,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAE5C,YAAY,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAIvD;IAED,uDAAuD;IACvD,MAAM,IAAI,OAAO,CAEhB;IAED,gEAAgE;IAC1D,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAyCzE;IAED,6EAA6E;IACvE,YAAY,CAAC,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAuBtF;IAED,qEAAqE;IAC/D,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAQ9E;IAED;;;;OAIG;IACG,yBAAyB,CAAC,gBAAgB,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAoB9F;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,OAAO,CAAC,SAAS;CA4FlB;AAuLD,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAE1F;AAED,wBAAgB,wBAAwB,IAAI,qBAAqB,CAOhE"}
|