@cyanheads/congressgov-mcp-server 0.5.0 → 0.5.1
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 +5 -4
- package/CLAUDE.md +5 -4
- package/README.md +1 -1
- package/dist/mcp-server/tools/definitions/bill-lookup.tool.d.ts +1 -1
- package/dist/mcp-server/tools/definitions/committee-reports.tool.d.ts +1 -1
- package/dist/mcp-server/tools/definitions/daily-record.tool.d.ts +1 -1
- package/dist/mcp-server/tools/tool-helpers.d.ts +1 -1
- package/dist/mcp-server/tools/tool-helpers.d.ts.map +1 -1
- package/dist/mcp-server/tools/tool-helpers.js +1 -1
- package/dist/mcp-server/tools/tool-helpers.js.map +1 -1
- package/dist/services/congress-documents/congress-documents-service.d.ts +28 -14
- package/dist/services/congress-documents/congress-documents-service.d.ts.map +1 -1
- package/dist/services/congress-documents/congress-documents-service.js +52 -34
- package/dist/services/congress-documents/congress-documents-service.js.map +1 -1
- package/dist/services/congress-documents/extract-text-stream.d.ts +58 -0
- package/dist/services/congress-documents/extract-text-stream.d.ts.map +1 -0
- package/dist/services/congress-documents/extract-text-stream.js +689 -0
- package/dist/services/congress-documents/extract-text-stream.js.map +1 -0
- package/dist/services/congress-documents/extract-text.d.ts +6 -0
- package/dist/services/congress-documents/extract-text.d.ts.map +1 -1
- package/dist/services/congress-documents/extract-text.js +16 -10
- package/dist/services/congress-documents/extract-text.js.map +1 -1
- package/package.json +1 -1
- package/server.json +3 -3
package/AGENTS.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Agent Protocol
|
|
2
2
|
|
|
3
3
|
**Server:** congressgov-mcp-server
|
|
4
|
-
**Version:** 0.5.
|
|
4
|
+
**Version:** 0.5.1
|
|
5
5
|
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.11.5`
|
|
6
6
|
**Engines:** Bun ≥1.3.0, Node ≥24.0.0
|
|
7
7
|
**MCP SDK:** `@modelcontextprotocol/sdk` ^1.30.0
|
|
@@ -174,11 +174,12 @@ Four services. `CongressApiService` backs nine tools and the House branch of `co
|
|
|
174
174
|
- Party totals are derived from the roster (the feed publishes none)
|
|
175
175
|
|
|
176
176
|
**`CongressDocumentsService`** — reads the document bodies behind Congress.gov's format URLs (`www.congress.gov`):
|
|
177
|
-
- A second host, so a sibling service rather than a method on `CongressApiService` — no API key, no JSON,
|
|
177
|
+
- A second host, so a sibling service rather than a method on `CongressApiService` — no API key, no JSON, and enrolled omnibus bills that run to ten megabytes
|
|
178
178
|
- URLs are resolved from upstream format metadata and checked against a `www.congress.gov` allowlist; a caller never supplies one
|
|
179
|
-
- The fetch is bounded: a
|
|
179
|
+
- The fetch is bounded: a 25 MB ceiling (refused on `Content-Length`, else mid-stream), a 30s deadline, and a content-type allowlist
|
|
180
|
+
- The body is extracted as it streams and only the requested window is retained, so a read's live set is flat in the size of the document (transient allocation is not — peak RSS runs above a buffered read); the ceiling bounds how long a response may run, not how much of one fits in a buffer
|
|
180
181
|
- The response is bounded by an exact character window — offsets index the extracted plain text and are never snapped to section breaks, so feeding `nextOffset` back walks a document with no overlap and no gap
|
|
181
|
-
- `extract-text.ts` unwraps GPO's `<pre>` print output verbatim (whitespace is the document's structure) and decodes entities in one pass
|
|
182
|
+
- `extract-text.ts` unwraps GPO's `<pre>` print output verbatim (whitespace is the document's structure) and decodes entities in one pass; `extract-text-stream.ts` is its incremental twin, pinned byte-for-byte against it by a differential test
|
|
182
183
|
|
|
183
184
|
**`CongressMirrorService`** — local SQLite FTS5 mirror of bill title + CRS summary text, backing `congressgov_search_bills` only:
|
|
184
185
|
- Opt-in via `CONGRESS_MIRROR_ENABLED` (off by default); built out-of-band via the `mirror:init`/`mirror:refresh` scripts, never on server startup
|
package/CLAUDE.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Agent Protocol
|
|
2
2
|
|
|
3
3
|
**Server:** congressgov-mcp-server
|
|
4
|
-
**Version:** 0.5.
|
|
4
|
+
**Version:** 0.5.1
|
|
5
5
|
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.11.5`
|
|
6
6
|
**Engines:** Bun ≥1.3.0, Node ≥24.0.0
|
|
7
7
|
**MCP SDK:** `@modelcontextprotocol/sdk` ^1.30.0
|
|
@@ -174,11 +174,12 @@ Four services. `CongressApiService` backs nine tools and the House branch of `co
|
|
|
174
174
|
- Party totals are derived from the roster (the feed publishes none)
|
|
175
175
|
|
|
176
176
|
**`CongressDocumentsService`** — reads the document bodies behind Congress.gov's format URLs (`www.congress.gov`):
|
|
177
|
-
- A second host, so a sibling service rather than a method on `CongressApiService` — no API key, no JSON,
|
|
177
|
+
- A second host, so a sibling service rather than a method on `CongressApiService` — no API key, no JSON, and enrolled omnibus bills that run to ten megabytes
|
|
178
178
|
- URLs are resolved from upstream format metadata and checked against a `www.congress.gov` allowlist; a caller never supplies one
|
|
179
|
-
- The fetch is bounded: a
|
|
179
|
+
- The fetch is bounded: a 25 MB ceiling (refused on `Content-Length`, else mid-stream), a 30s deadline, and a content-type allowlist
|
|
180
|
+
- The body is extracted as it streams and only the requested window is retained, so a read's live set is flat in the size of the document (transient allocation is not — peak RSS runs above a buffered read); the ceiling bounds how long a response may run, not how much of one fits in a buffer
|
|
180
181
|
- The response is bounded by an exact character window — offsets index the extracted plain text and are never snapped to section breaks, so feeding `nextOffset` back walks a document with no overlap and no gap
|
|
181
|
-
- `extract-text.ts` unwraps GPO's `<pre>` print output verbatim (whitespace is the document's structure) and decodes entities in one pass
|
|
182
|
+
- `extract-text.ts` unwraps GPO's `<pre>` print output verbatim (whitespace is the document's structure) and decodes entities in one pass; `extract-text-stream.ts` is its incremental twin, pinned byte-for-byte against it by a differential test
|
|
182
183
|
|
|
183
184
|
**`CongressMirrorService`** — local SQLite FTS5 mirror of bill title + CRS summary text, backing `congressgov_search_bills` only:
|
|
184
185
|
- Opt-in via `CONGRESS_MIRROR_ENABLED` (off by default); built out-of-band via the `mirror:init`/`mirror:refresh` scripts, never on server startup
|
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
<div align="center">
|
|
9
9
|
|
|
10
|
-
[](./CHANGELOG.md) [](./LICENSE) [](https://github.com/users/cyanheads/packages/container/package/congressgov-mcp-server) [](https://modelcontextprotocol.io/) [](https://www.npmjs.com/package/@cyanheads/congressgov-mcp-server) [](https://www.typescriptlang.org/) [](https://bun.sh/)
|
|
11
11
|
|
|
12
12
|
</div>
|
|
13
13
|
|
|
@@ -98,7 +98,7 @@ export declare const billLookupTool: import("@cyanheads/mcp-ts-core").ToolDefini
|
|
|
98
98
|
readonly reason: 'document_too_large';
|
|
99
99
|
readonly retryable: false;
|
|
100
100
|
readonly when: 'The document is larger than the byte ceiling this server retrieves, so no character window can be served from it.';
|
|
101
|
-
readonly recovery:
|
|
101
|
+
readonly recovery: 'Read the document at the sourceUrl the text operation returns. A document this size clears the ceiling in every format it publishes, so switching format reaches the same limit.';
|
|
102
102
|
}, {
|
|
103
103
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.InvalidParams;
|
|
104
104
|
readonly reason: 'offset_past_end';
|
|
@@ -78,7 +78,7 @@ export declare const committeeReportsTool: import("@cyanheads/mcp-ts-core").Tool
|
|
|
78
78
|
readonly reason: 'document_too_large';
|
|
79
79
|
readonly retryable: false;
|
|
80
80
|
readonly when: 'The document is larger than the byte ceiling this server retrieves, so no character window can be served from it.';
|
|
81
|
-
readonly recovery:
|
|
81
|
+
readonly recovery: 'Read the document at the sourceUrl the text operation returns. A document this size clears the ceiling in every format it publishes, so switching format reaches the same limit.';
|
|
82
82
|
}, {
|
|
83
83
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.InvalidParams;
|
|
84
84
|
readonly reason: 'offset_past_end';
|
|
@@ -74,7 +74,7 @@ export declare const dailyRecordTool: import("@cyanheads/mcp-ts-core").ToolDefin
|
|
|
74
74
|
readonly reason: 'document_too_large';
|
|
75
75
|
readonly retryable: false;
|
|
76
76
|
readonly when: 'The document is larger than the byte ceiling this server retrieves, so no character window can be served from it.';
|
|
77
|
-
readonly recovery:
|
|
77
|
+
readonly recovery: 'Read the document at the sourceUrl the text operation returns. A document this size clears the ceiling in every format it publishes, so switching format reaches the same limit.';
|
|
78
78
|
}, {
|
|
79
79
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.InvalidParams;
|
|
80
80
|
readonly reason: 'offset_past_end';
|
|
@@ -195,7 +195,7 @@ export declare const documentErrorContracts: readonly [{
|
|
|
195
195
|
readonly reason: 'document_too_large';
|
|
196
196
|
readonly retryable: false;
|
|
197
197
|
readonly when: 'The document is larger than the byte ceiling this server retrieves, so no character window can be served from it.';
|
|
198
|
-
readonly recovery:
|
|
198
|
+
readonly recovery: 'Read the document at the sourceUrl the text operation returns. A document this size clears the ceiling in every format it publishes, so switching format reaches the same limit.';
|
|
199
199
|
}, {
|
|
200
200
|
readonly code: JsonRpcErrorCode.InvalidParams;
|
|
201
201
|
readonly reason: 'offset_past_end';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-helpers.d.ts","sourceRoot":"","sources":["../../../src/mcp-server/tools/tool-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAC3C,OAAO,EAEL,gBAAgB,EAEjB,MAAM,+BAA+B,CAAC;AAqCvC,8DAA8D;AAC9D,eAAO,MAAM,UAAU;;;;;;iBAKP,CAAC;AAEjB;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;;;;;;kBASnE;AAQD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,mDAapD;AAED,qFAAqF;AACrF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAEjE;AAQD;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,mDAatD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAc5E;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAGrF;AAiCD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAUhG;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,UAAU,EAAE,MAAM,GAAG,SAAS,GAC7B,IAAI,CAQN;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,cAAc;IACzB,cAAc;IACd,UAAU;IACV,MAAM;CAIP,CAAC;AAEF;;;GAGG;AACH,KAAK,eAAe,GAAG;IACrB,IAAI,EAAE,SAAS,OAAO,EAAE,CAAC;IACzB,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/B,CAAC;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAE9F;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAQ5F;AAED,wDAAwD;AACxD,eAAO,MAAM,0BAA0B,QAAS,CAAC;AAEjD,qFAAqF;AACrF,eAAO,MAAM,sBAAsB,SAAU,CAAC;AAE9C;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,mBAAmB;IAC9B,MAAM;;;;IAMN,eAAe;IAQf,cAAc;CASf,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,sBAAsB;;qBAGvB,sBAAsB;;mBAExB,qOAAqO;uBAEzO,0JAA0J;;;qBAIpJ,oBAAoB;;mBAEtB,kLAAkL;uBAEtL,wKAAwK;;;qBAIlK,uBAAuB;;mBAEzB,sJAAsJ;uBAE1J,kJAAkJ;;;qBAI5I,oBAAoB;;mBAEtB,mHAAmH;uBAEvH,
|
|
1
|
+
{"version":3,"file":"tool-helpers.d.ts","sourceRoot":"","sources":["../../../src/mcp-server/tools/tool-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -336,7 +336,7 @@ export const documentErrorContracts = [
|
|
|
336
336
|
reason: 'document_too_large',
|
|
337
337
|
retryable: false,
|
|
338
338
|
when: 'The document is larger than the byte ceiling this server retrieves, so no character window can be served from it.',
|
|
339
|
-
recovery:
|
|
339
|
+
recovery: 'Read the document at the sourceUrl the text operation returns. A document this size clears the ceiling in every format it publishes, so switching format reaches the same limit.',
|
|
340
340
|
},
|
|
341
341
|
{
|
|
342
342
|
code: JsonRpcErrorCode.InvalidParams,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-helpers.js","sourceRoot":"","sources":["../../../src/mcp-server/tools/tool-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAC3C,OAAO,EAEL,gBAAgB,EAChB,eAAe,GAChB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mDAAmD,CAAC;AAErF;;;;;GAKG;AACH,MAAM,eAAe,GAAG,CAAC;KACtB,MAAM,CAAC;IACN,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IACtF,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,GAAG,EAAE;SACL,WAAW,EAAE;SACb,QAAQ,EAAE;SACV,QAAQ,EAAE;SACV,QAAQ,CAAC,yEAAyE,CAAC;CACvF,CAAC;KACD,QAAQ,CAAC,mDAAmD,CAAC,CAAC;AAEjE;;;;;GAKG;AACH,MAAM,QAAQ,GAAG,CAAC;KACf,KAAK,CACJ,CAAC;KACE,MAAM,CAAC,EAAE,CAAC;KACV,WAAW,EAAE;KACb,QAAQ,CAAC,6EAA6E,CAAC,CAC3F;KACA,QAAQ,CAAC,oEAAoE,CAAC,CAAC;AAElF,8DAA8D;AAC9D,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC;KACxB,MAAM,CAAC;IACN,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE,eAAe;CAC5B,CAAC;KACD,WAAW,EAAE,CAAC;AAEjB;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,SAAiB,EAAE,WAAoB;IAClE,MAAM,UAAU,GAAG,WAAW,IAAI,OAAO,SAAS,4BAA4B,CAAC;IAC/E,OAAO,CAAC;SACL,MAAM,CAAC;QACN,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE;QACzB,UAAU,EAAE,eAAe,CAAC,QAAQ,EAAE;KACvC,CAAC;SACD,WAAW,EAAE;SACb,QAAQ,CAAC,oBAAoB,SAAS,cAAc,UAAU,EAAE,CAAC,CAAC;AACvE,CAAC;AAED;;;GAGG;AACH,MAAM,0BAA0B,GAAG,cAAc,CAAC;AAElD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,iBAAiB,CAAC,WAAmB;IACnD,OAAO,CAAC;SACL,KAAK,CAAC;QACL,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QAC9D,CAAC;aACE,MAAM,EAAE;aACR,KAAK,CACJ,0BAA0B,EAC1B,oEAAoE,CACrE;aACA,QAAQ,CAAC,2CAA2C,CAAC;KACzD,CAAC;SACD,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC3B,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,kBAAkB,CAAC,KAAsB;IACvD,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC3D,CAAC;AAED;;;GAGG;AACH,MAAM,kBAAkB,GAAG,uBAAuB,CAAC;AAEnD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAmB;IACrD,OAAO,CAAC;SACL,KAAK,CAAC;QACL,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;QACxE,CAAC;aACE,MAAM,EAAE;aACR,KAAK,CACJ,kBAAkB,EAClB,+FAA+F,CAChG;aACA,QAAQ,CAAC,sEAAsE,CAAC;KACpF,CAAC;SACD,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC3B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,KAAsB,EAAE,QAAgB;IAClE,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,MAAM,KAAK,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IAExC,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAClD,IAAI,aAAa,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,eAAe,CACnB,iBAAiB,KAAK,sBAAsB,aAAa,kBAAkB,QAAQ,gCAAgC,aAAa,2CAA2C,SAAS,GAAG,EACvL,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,CACnD,CAAC;IACJ,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAyB;IAC/D,MAAM,UAAU,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;IACjC,OAAO,UAAU,IAAI,SAAS,CAAC;AACjC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,gBAAgB,GAAG,oDAAoD,CAAC;AAE9E,SAAS,sBAAsB,CAAC,KAAsB;IACpD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5E,OAAO,CACL,IAAI,CAAC,cAAc,EAAE,KAAK,IAAI;QAC9B,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK,GAAG,CAAC;QAChC,IAAI,CAAC,UAAU,EAAE,KAAK,GAAG;QACzB,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI;QAC3B,IAAI,CAAC,aAAa,EAAE,KAAK,MAAM;QAC/B,IAAI,CAAC,aAAa,EAAE,KAAK,MAAM,CAChC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAyB,EAAE,KAAa;IAC1E,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO;IAChC,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,CAAC,KAAK,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7C,MAAM,eAAe,CACnB,IAAI,KAAK,mEAAmE,KAAK,EAAE,EACnF,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,qBAAqB,CACnC,YAAgC,EAChC,UAA8B;IAE9B,IAAI,YAAY,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO;IACnE,IAAI,YAAY,GAAG,UAAU,EAAE,CAAC;QAC9B,MAAM,eAAe,CACnB,kFAAkF,YAAY,gBAAgB,UAAU,2CAA2C,EACnK,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,CACpD,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAC5E,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IAClE,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,+EAA+E,CAAC;CAC7F,CAAC;AAWF;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAY,EAAE,MAAuB,EAAE,OAAe;IACtF,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,KAAK,CAAC;QAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC5F,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAa,EAAE,OAAiC;IAClF,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACjD,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,EAAE;YAAE,SAAS;QAC9D,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACvE,CAAC;AAED,wDAAwD;AACxD,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC;AAEjD,qFAAqF;AACrF,MAAM,CAAC,MAAM,sBAAsB,GAAG,OAAO,CAAC;AAE9C;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,MAAM,EAAE,CAAC;SACN,IAAI,CAAC,gBAAgB,CAAC;SACtB,OAAO,CAAC,MAAM,CAAC;SACf,QAAQ,CACP,wYAAwY,CACzY;IACH,eAAe,EAAE,CAAC;SACf,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,OAAO,CAAC,CAAC,CAAC;SACV,QAAQ,CACP,2OAA2O,CAC5O;IACH,cAAc,EAAE,CAAC;SACd,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,sBAAsB,CAAC;SAC3B,OAAO,CAAC,0BAA0B,CAAC;SACnC,QAAQ,CACP,iDAAiD,sBAAsB,+FAA+F,CACvK;CACJ,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC;QACE,IAAI,EAAE,gBAAgB,CAAC,QAAQ;QAC/B,MAAM,EAAE,sBAAsB;QAC9B,SAAS,EAAE,KAAK;QAChB,IAAI,EAAE,qOAAqO;QAC3O,QAAQ,EACN,0JAA0J;KAC7J;IACD;QACE,IAAI,EAAE,gBAAgB,CAAC,QAAQ;QAC/B,MAAM,EAAE,oBAAoB;QAC5B,SAAS,EAAE,KAAK;QAChB,IAAI,EAAE,kLAAkL;QACxL,QAAQ,EACN,wKAAwK;KAC3K;IACD;QACE,IAAI,EAAE,gBAAgB,CAAC,kBAAkB;QACzC,MAAM,EAAE,uBAAuB;QAC/B,SAAS,EAAE,IAAI;QACf,IAAI,EAAE,sJAAsJ;QAC5J,QAAQ,EACN,kJAAkJ;KACrJ;IACD;QACE,IAAI,EAAE,gBAAgB,CAAC,aAAa;QACpC,MAAM,EAAE,oBAAoB;QAC5B,SAAS,EAAE,KAAK;QAChB,IAAI,EAAE,mHAAmH;QACzH,QAAQ,EACN,
|
|
1
|
+
{"version":3,"file":"tool-helpers.js","sourceRoot":"","sources":["../../../src/mcp-server/tools/tool-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,9 +9,10 @@
|
|
|
9
9
|
*
|
|
10
10
|
* Two bounds, deliberately separate:
|
|
11
11
|
* - **The fetch** is bounded by {@link MAX_DOCUMENT_BYTES}, a request timeout, and
|
|
12
|
-
* a content-type allowlist.
|
|
13
|
-
* is
|
|
14
|
-
*
|
|
12
|
+
* a content-type allowlist. The body is extracted as it streams and only the
|
|
13
|
+
* requested window is kept, so what a read *retains* is flat in the size of
|
|
14
|
+
* the document and the ceiling bounds how long a response may run rather than
|
|
15
|
+
* how much of one fits in a buffer.
|
|
15
16
|
* - **The response** is bounded by an exact character offset/limit window. Offsets
|
|
16
17
|
* index into the extracted plain text and are never snapped to section or
|
|
17
18
|
* paragraph breaks, so feeding `nextOffset` back walks a document with every
|
|
@@ -22,12 +23,14 @@
|
|
|
22
23
|
import type { Context } from '@cyanheads/mcp-ts-core';
|
|
23
24
|
import type { DocumentContent, FetchDocumentParams } from './types.js';
|
|
24
25
|
/**
|
|
25
|
-
* Ceiling on a single document. The largest
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
26
|
+
* Ceiling on a single document. The largest bodies Congress.gov publishes are
|
|
27
|
+
* the omnibus appropriations acts — 116th Congress H.R. 133 enrolled runs
|
|
28
|
+
* 6,790,482 bytes as Formatted Text and 9,812,888 as XML — and both formats of a
|
|
29
|
+
* document have to clear it, since a caller sent to the other one by a recovery
|
|
30
|
+
* hint would hit the same refusal. This clears the largest by better than a
|
|
31
|
+
* factor of two; the request deadline is what a runaway response meets first.
|
|
29
32
|
*/
|
|
30
|
-
export declare const MAX_DOCUMENT_BYTES =
|
|
33
|
+
export declare const MAX_DOCUMENT_BYTES = 25000000;
|
|
31
34
|
/** Bounds the whole exchange, headers and body — a megabyte-scale body needs the room. */
|
|
32
35
|
export declare const REQUEST_TIMEOUT_MS = 30000;
|
|
33
36
|
export declare class CongressDocumentsService {
|
|
@@ -42,8 +45,8 @@ export declare class CongressDocumentsService {
|
|
|
42
45
|
* general-purpose fetcher.
|
|
43
46
|
*/
|
|
44
47
|
fetchDocument(params: FetchDocumentParams, ctx: Context): Promise<DocumentContent>;
|
|
45
|
-
/**
|
|
46
|
-
private
|
|
48
|
+
/** Describe the extracted `[offset, offset + limit)` window and what remains. */
|
|
49
|
+
private describeWindow;
|
|
47
50
|
private assertAllowedHost;
|
|
48
51
|
private doFetch;
|
|
49
52
|
/**
|
|
@@ -56,11 +59,22 @@ export declare class CongressDocumentsService {
|
|
|
56
59
|
/** Refuse an oversized document on its advertised length, before reading a byte of it. */
|
|
57
60
|
private assertAdvertisedSize;
|
|
58
61
|
/**
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
+
* Extract the requested character window as the body streams, under a hard
|
|
63
|
+
* byte budget that cancels the stream the moment it is exceeded.
|
|
64
|
+
*
|
|
65
|
+
* Nothing but the window is retained: the decoder carries a partial character
|
|
66
|
+
* across a chunk boundary and the extractor carries its parse state, so the
|
|
67
|
+
* live set stays near the window's own size however large the document is.
|
|
68
|
+
* Transient allocation still scales with the body — peak RSS is higher than a
|
|
69
|
+
* buffered read of the same document — but it is garbage, not live, so it is
|
|
70
|
+
* concurrent reads rather than one large read that the ceiling has to survive.
|
|
71
|
+
*/
|
|
72
|
+
private readWindow;
|
|
73
|
+
/**
|
|
74
|
+
* A body that dies partway through is the transport failing, not a malformed
|
|
75
|
+
* document — the same classification a connection that never opened gets.
|
|
62
76
|
*/
|
|
63
|
-
private
|
|
77
|
+
private readChunk;
|
|
64
78
|
private tooLarge;
|
|
65
79
|
private isRetryableError;
|
|
66
80
|
private getRequestContext;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"congress-documents-service.d.ts","sourceRoot":"","sources":["../../../src/services/congress-documents/congress-documents-service.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"congress-documents-service.d.ts","sourceRoot":"","sources":["../../../src/services/congress-documents/congress-documents-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAUtD,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEvE;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,WAAa,CAAC;AAE7C,0FAA0F;AAC1F,eAAO,MAAM,kBAAkB,QAAS,CAAC;AA4CzC,qBAAa,wBAAwB;IACvB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAA7C,YAA6B,gBAAgB,GAAE,MAA2B,EAAI;IAE9E;;;;;;;OAOG;IACG,aAAa,CAAC,MAAM,EAAE,mBAAmB,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC,CAiBvF;IAED,iFAAiF;IACjF,OAAO,CAAC,cAAc;IAiCtB,OAAO,CAAC,iBAAiB;YAoBX,OAAO;IAsBrB;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAqB1B,OAAO,CAAC,iBAAiB;IAgBzB,0FAA0F;IAC1F,OAAO,CAAC,oBAAoB;IAQ5B;;;;;;;;;;OAUG;YACW,UAAU;IAuCxB;;;OAGG;YACW,SAAS;IAevB,OAAO,CAAC,QAAQ;IAahB,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,cAAc;CAIvB;AAID,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED,wBAAgB,oBAAoB,IAAI,wBAAwB,CAO/D"}
|
|
@@ -9,9 +9,10 @@
|
|
|
9
9
|
*
|
|
10
10
|
* Two bounds, deliberately separate:
|
|
11
11
|
* - **The fetch** is bounded by {@link MAX_DOCUMENT_BYTES}, a request timeout, and
|
|
12
|
-
* a content-type allowlist.
|
|
13
|
-
* is
|
|
14
|
-
*
|
|
12
|
+
* a content-type allowlist. The body is extracted as it streams and only the
|
|
13
|
+
* requested window is kept, so what a read *retains* is flat in the size of
|
|
14
|
+
* the document and the ceiling bounds how long a response may run rather than
|
|
15
|
+
* how much of one fits in a buffer.
|
|
15
16
|
* - **The response** is bounded by an exact character offset/limit window. Offsets
|
|
16
17
|
* index into the extracted plain text and are never snapped to section or
|
|
17
18
|
* paragraph breaks, so feeding `nextOffset` back walks a document with every
|
|
@@ -21,14 +22,16 @@
|
|
|
21
22
|
*/
|
|
22
23
|
import { invalidParams, JsonRpcErrorCode, McpError, notFound, serviceUnavailable, } from '@cyanheads/mcp-ts-core/errors';
|
|
23
24
|
import { fetchWithTimeout, withRetry } from '@cyanheads/mcp-ts-core/utils';
|
|
24
|
-
import {
|
|
25
|
+
import { createStreamingExtractor } from './extract-text-stream.js';
|
|
25
26
|
/**
|
|
26
|
-
* Ceiling on a single document. The largest
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
27
|
+
* Ceiling on a single document. The largest bodies Congress.gov publishes are
|
|
28
|
+
* the omnibus appropriations acts — 116th Congress H.R. 133 enrolled runs
|
|
29
|
+
* 6,790,482 bytes as Formatted Text and 9,812,888 as XML — and both formats of a
|
|
30
|
+
* document have to clear it, since a caller sent to the other one by a recovery
|
|
31
|
+
* hint would hit the same refusal. This clears the largest by better than a
|
|
32
|
+
* factor of two; the request deadline is what a runaway response meets first.
|
|
30
33
|
*/
|
|
31
|
-
export const MAX_DOCUMENT_BYTES =
|
|
34
|
+
export const MAX_DOCUMENT_BYTES = 25_000_000;
|
|
32
35
|
/** Bounds the whole exchange, headers and body — a megabyte-scale body needs the room. */
|
|
33
36
|
export const REQUEST_TIMEOUT_MS = 30_000;
|
|
34
37
|
const MAX_ATTEMPTS = 3;
|
|
@@ -79,7 +82,7 @@ export class CongressDocumentsService {
|
|
|
79
82
|
const operation = 'CongressDocumentsService GET document';
|
|
80
83
|
const requestContext = this.getRequestContext(ctx, operation);
|
|
81
84
|
const signal = this.getAbortSignal(ctx);
|
|
82
|
-
const
|
|
85
|
+
const window = await withRetry(() => this.doFetch(params, requestContext, ctx, signal), {
|
|
83
86
|
operation,
|
|
84
87
|
context: requestContext,
|
|
85
88
|
baseDelayMs: BASE_BACKOFF_MS,
|
|
@@ -87,12 +90,11 @@ export class CongressDocumentsService {
|
|
|
87
90
|
isTransient: (error) => this.isRetryableError(error),
|
|
88
91
|
...(signal ? { signal } : {}),
|
|
89
92
|
});
|
|
90
|
-
|
|
91
|
-
return this.window(text, params, ctx);
|
|
93
|
+
return this.describeWindow(window, params, ctx);
|
|
92
94
|
}
|
|
93
|
-
/**
|
|
94
|
-
window
|
|
95
|
-
const totalCharacters =
|
|
95
|
+
/** Describe the extracted `[offset, offset + limit)` window and what remains. */
|
|
96
|
+
describeWindow(window, params, ctx) {
|
|
97
|
+
const { text, totalCharacters } = window;
|
|
96
98
|
const offset = params.characterOffset;
|
|
97
99
|
/** An empty document is a real (if unusual) answer at offset 0 — not a bad offset. */
|
|
98
100
|
if (totalCharacters > 0 && offset >= totalCharacters) {
|
|
@@ -104,11 +106,10 @@ export class CongressDocumentsService {
|
|
|
104
106
|
retryable: false,
|
|
105
107
|
});
|
|
106
108
|
}
|
|
107
|
-
const
|
|
108
|
-
const end = offset + slice.length;
|
|
109
|
+
const end = offset + text.length;
|
|
109
110
|
const truncated = end < totalCharacters;
|
|
110
111
|
return {
|
|
111
|
-
text
|
|
112
|
+
text,
|
|
112
113
|
totalCharacters,
|
|
113
114
|
offset,
|
|
114
115
|
truncated,
|
|
@@ -133,10 +134,10 @@ export class CongressDocumentsService {
|
|
|
133
134
|
});
|
|
134
135
|
}
|
|
135
136
|
}
|
|
136
|
-
async doFetch(
|
|
137
|
+
async doFetch(params, requestContext, ctx, signal) {
|
|
137
138
|
let response;
|
|
138
139
|
try {
|
|
139
|
-
response = await fetchWithTimeout(url, REQUEST_TIMEOUT_MS, requestContext, {
|
|
140
|
+
response = await fetchWithTimeout(params.url, REQUEST_TIMEOUT_MS, requestContext, {
|
|
140
141
|
headers: { Accept: 'text/html, application/xml, text/plain, */*' },
|
|
141
142
|
expectedStatuses: [404],
|
|
142
143
|
...(signal ? { signal } : {}),
|
|
@@ -147,7 +148,7 @@ export class CongressDocumentsService {
|
|
|
147
148
|
}
|
|
148
149
|
this.assertContentType(response, ctx);
|
|
149
150
|
this.assertAdvertisedSize(response, ctx);
|
|
150
|
-
return this.
|
|
151
|
+
return this.readWindow(response, params, ctx);
|
|
151
152
|
}
|
|
152
153
|
/**
|
|
153
154
|
* A 404 means Congress.gov's metadata named a document its own file host does
|
|
@@ -191,17 +192,27 @@ export class CongressDocumentsService {
|
|
|
191
192
|
throw this.tooLarge(ctx, { contentLength });
|
|
192
193
|
}
|
|
193
194
|
/**
|
|
194
|
-
*
|
|
195
|
-
*
|
|
196
|
-
*
|
|
195
|
+
* Extract the requested character window as the body streams, under a hard
|
|
196
|
+
* byte budget that cancels the stream the moment it is exceeded.
|
|
197
|
+
*
|
|
198
|
+
* Nothing but the window is retained: the decoder carries a partial character
|
|
199
|
+
* across a chunk boundary and the extractor carries its parse state, so the
|
|
200
|
+
* live set stays near the window's own size however large the document is.
|
|
201
|
+
* Transient allocation still scales with the body — peak RSS is higher than a
|
|
202
|
+
* buffered read of the same document — but it is garbage, not live, so it is
|
|
203
|
+
* concurrent reads rather than one large read that the ceiling has to survive.
|
|
197
204
|
*/
|
|
198
|
-
async
|
|
205
|
+
async readWindow(response, params, ctx) {
|
|
199
206
|
const reader = response.body?.getReader();
|
|
200
|
-
const
|
|
207
|
+
const decoder = new TextDecoder('utf-8');
|
|
208
|
+
const extractor = createStreamingExtractor({
|
|
209
|
+
characterLimit: params.characterLimit,
|
|
210
|
+
characterOffset: params.characterOffset,
|
|
211
|
+
});
|
|
201
212
|
let bytes = 0;
|
|
202
213
|
if (reader) {
|
|
203
214
|
for (;;) {
|
|
204
|
-
const { done, value } = await
|
|
215
|
+
const { done, value } = await this.readChunk(reader, ctx);
|
|
205
216
|
if (done)
|
|
206
217
|
break;
|
|
207
218
|
if (!value)
|
|
@@ -211,7 +222,7 @@ export class CongressDocumentsService {
|
|
|
211
222
|
await reader.cancel().catch(() => undefined);
|
|
212
223
|
throw this.tooLarge(ctx, { bytesRead: bytes });
|
|
213
224
|
}
|
|
214
|
-
|
|
225
|
+
extractor.push(decoder.decode(value, { stream: true }));
|
|
215
226
|
}
|
|
216
227
|
}
|
|
217
228
|
if (bytes === 0) {
|
|
@@ -221,13 +232,20 @@ export class CongressDocumentsService {
|
|
|
221
232
|
retryable: false,
|
|
222
233
|
});
|
|
223
234
|
}
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
235
|
+
extractor.push(decoder.decode());
|
|
236
|
+
return extractor.finish();
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* A body that dies partway through is the transport failing, not a malformed
|
|
240
|
+
* document — the same classification a connection that never opened gets.
|
|
241
|
+
*/
|
|
242
|
+
async readChunk(reader, ctx) {
|
|
243
|
+
try {
|
|
244
|
+
return await reader.read();
|
|
245
|
+
}
|
|
246
|
+
catch (error) {
|
|
247
|
+
throw serviceUnavailable('The document body from Congress.gov ended before it was complete.', { reason: DOCUMENT_FETCH_FAILED, ...ctx.recoveryFor(DOCUMENT_FETCH_FAILED) }, { cause: error });
|
|
229
248
|
}
|
|
230
|
-
return new TextDecoder('utf-8').decode(merged);
|
|
231
249
|
}
|
|
232
250
|
tooLarge(ctx, data) {
|
|
233
251
|
return invalidParams(`This document exceeds the ${this.maxDocumentBytes.toLocaleString('en-US')}-byte ceiling this server retrieves.`, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"congress-documents-service.js","sourceRoot":"","sources":["../../../src/services/congress-documents/congress-documents-service.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"congress-documents-service.js","sourceRoot":"","sources":["../../../src/services/congress-documents/congress-documents-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Incremental form of {@link extractDocumentText} — consumes a
|
|
3
|
+
* document body chunk by chunk and retains only the requested character window.
|
|
4
|
+
*
|
|
5
|
+
* `extract-text.ts` is the normative definition of the extraction: every
|
|
6
|
+
* character offset in the `content` contract indexes into the string it
|
|
7
|
+
* produces. This module reproduces that string exactly while holding constant
|
|
8
|
+
* memory, so a document is bounded by how long it takes to stream rather than by
|
|
9
|
+
* how much of it fits in a buffer. The two are pinned against each other by a
|
|
10
|
+
* differential test — if this file drifts, that test fails, not production.
|
|
11
|
+
*
|
|
12
|
+
* The whole-string pipeline is `normalize newlines → strip comments → unwrap
|
|
13
|
+
* <pre> → strip tags → decode entities → trim`, and three of those stages are
|
|
14
|
+
* decided by content that arrives arbitrarily late:
|
|
15
|
+
*
|
|
16
|
+
* - **Is there a `<pre>` at all?** Only a body with none is read whole. Both
|
|
17
|
+
* readings run at once, in two sinks; the losing one is dropped the moment a
|
|
18
|
+
* `<pre>` open tag settles the question.
|
|
19
|
+
* - **Where is the last `</pre>`?** Every close is a candidate, so each one
|
|
20
|
+
* records a mark on the `<pre>` sink and the last mark standing is restored at
|
|
21
|
+
* end of stream.
|
|
22
|
+
* - **Does this `<!--` (or this `<`) ever close?** An unterminated one is not a
|
|
23
|
+
* comment or a tag at all — the regexes leave it in the text. Its content is
|
|
24
|
+
* therefore written through as literal text and rolled back if the closing
|
|
25
|
+
* delimiter turns up.
|
|
26
|
+
*
|
|
27
|
+
* Every one of those rewinds is a mark: a handful of counters plus a length to
|
|
28
|
+
* truncate the captured window to. Nothing rewindable grows with the document.
|
|
29
|
+
*
|
|
30
|
+
* @module services/congress-documents/extract-text-stream
|
|
31
|
+
*/
|
|
32
|
+
/** The character window to retain while streaming. */
|
|
33
|
+
export interface TextWindowRequest {
|
|
34
|
+
/** Maximum characters to keep, counted from `characterOffset`. */
|
|
35
|
+
characterLimit: number;
|
|
36
|
+
/** First character of the extracted text to keep, 0-based. */
|
|
37
|
+
characterOffset: number;
|
|
38
|
+
}
|
|
39
|
+
/** The retained window plus the length of the whole extracted text. */
|
|
40
|
+
export interface ExtractedWindow {
|
|
41
|
+
/** The requested window of the extracted text. */
|
|
42
|
+
text: string;
|
|
43
|
+
/** Characters in the whole extracted document, not this window. */
|
|
44
|
+
totalCharacters: number;
|
|
45
|
+
}
|
|
46
|
+
/** Consumes a document body in chunks and yields one character window. */
|
|
47
|
+
export interface StreamingExtractor {
|
|
48
|
+
/** Finish the document and return its window. Call once, after the last push. */
|
|
49
|
+
finish(): ExtractedWindow;
|
|
50
|
+
/** Feed the next decoded chunk of the body. */
|
|
51
|
+
push(chunk: string): void;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Create an extractor that reproduces {@link extractDocumentText} over a chunked
|
|
55
|
+
* body while retaining only `characterLimit` characters of it.
|
|
56
|
+
*/
|
|
57
|
+
export declare function createStreamingExtractor(request: TextWindowRequest): StreamingExtractor;
|
|
58
|
+
//# sourceMappingURL=extract-text-stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-text-stream.d.ts","sourceRoot":"","sources":["../../../src/services/congress-documents/extract-text-stream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAIH,sDAAsD;AACtD,MAAM,WAAW,iBAAiB;IAChC,kEAAkE;IAClE,cAAc,EAAE,MAAM,CAAC;IACvB,8DAA8D;IAC9D,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,uEAAuE;AACvE,MAAM,WAAW,eAAe;IAC9B,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,0EAA0E;AAC1E,MAAM,WAAW,kBAAkB;IACjC,iFAAiF;IACjF,MAAM,IAAI,eAAe,CAAC;IAC1B,+CAA+C;IAC/C,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAuqBD;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,iBAAiB,GAAG,kBAAkB,CAEvF"}
|