@tiangong-ai/cli 0.0.51 → 0.0.56

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 (216) hide show
  1. package/AGENTS.md +22 -2
  2. package/README.md +171 -7
  3. package/dist/cli.js +10 -1
  4. package/dist/cli.js.map +1 -1
  5. package/dist/data/builtins.d.ts +1 -0
  6. package/dist/data/builtins.js +40 -0
  7. package/dist/data/builtins.js.map +1 -0
  8. package/dist/data/catalog.d.ts +25 -0
  9. package/dist/data/catalog.js +305 -0
  10. package/dist/data/catalog.js.map +1 -0
  11. package/dist/data/commands.d.ts +9 -0
  12. package/dist/data/commands.js +307 -0
  13. package/dist/data/commands.js.map +1 -0
  14. package/dist/data/connectors/airnow-hourly-observations.d.ts +2 -0
  15. package/dist/data/connectors/airnow-hourly-observations.js +522 -0
  16. package/dist/data/connectors/airnow-hourly-observations.js.map +1 -0
  17. package/dist/data/connectors/airnow-hourly-observations.schemas.d.ts +299 -0
  18. package/dist/data/connectors/airnow-hourly-observations.schemas.js +188 -0
  19. package/dist/data/connectors/airnow-hourly-observations.schemas.js.map +1 -0
  20. package/dist/data/connectors/bluesky-public-posts.d.ts +2 -0
  21. package/dist/data/connectors/bluesky-public-posts.js +705 -0
  22. package/dist/data/connectors/bluesky-public-posts.js.map +1 -0
  23. package/dist/data/connectors/bluesky-public-posts.schemas.d.ts +733 -0
  24. package/dist/data/connectors/bluesky-public-posts.schemas.js +422 -0
  25. package/dist/data/connectors/bluesky-public-posts.schemas.js.map +1 -0
  26. package/dist/data/connectors/epa-eis-records.d.ts +2 -0
  27. package/dist/data/connectors/epa-eis-records.js +566 -0
  28. package/dist/data/connectors/epa-eis-records.js.map +1 -0
  29. package/dist/data/connectors/epa-eis-records.schemas.d.ts +199 -0
  30. package/dist/data/connectors/epa-eis-records.schemas.js +146 -0
  31. package/dist/data/connectors/epa-eis-records.schemas.js.map +1 -0
  32. package/dist/data/connectors/federal-register-documents.d.ts +2 -0
  33. package/dist/data/connectors/federal-register-documents.js +517 -0
  34. package/dist/data/connectors/federal-register-documents.js.map +1 -0
  35. package/dist/data/connectors/federal-register-documents.schemas.d.ts +357 -0
  36. package/dist/data/connectors/federal-register-documents.schemas.js +243 -0
  37. package/dist/data/connectors/federal-register-documents.schemas.js.map +1 -0
  38. package/dist/data/connectors/gdelt-doc-search.d.ts +2 -0
  39. package/dist/data/connectors/gdelt-doc-search.js +658 -0
  40. package/dist/data/connectors/gdelt-doc-search.js.map +1 -0
  41. package/dist/data/connectors/gdelt-doc-search.schemas.d.ts +446 -0
  42. package/dist/data/connectors/gdelt-doc-search.schemas.js +330 -0
  43. package/dist/data/connectors/gdelt-doc-search.schemas.js.map +1 -0
  44. package/dist/data/connectors/gdelt-file-feeds.d.ts +4 -0
  45. package/dist/data/connectors/gdelt-file-feeds.js +591 -0
  46. package/dist/data/connectors/gdelt-file-feeds.js.map +1 -0
  47. package/dist/data/connectors/gdelt-file-feeds.schemas.d.ts +40 -0
  48. package/dist/data/connectors/gdelt-file-feeds.schemas.js +256 -0
  49. package/dist/data/connectors/gdelt-file-feeds.schemas.js.map +1 -0
  50. package/dist/data/connectors/nasa-firms-fire.d.ts +2 -0
  51. package/dist/data/connectors/nasa-firms-fire.js +578 -0
  52. package/dist/data/connectors/nasa-firms-fire.js.map +1 -0
  53. package/dist/data/connectors/nasa-firms-fire.schemas.d.ts +369 -0
  54. package/dist/data/connectors/nasa-firms-fire.schemas.js +238 -0
  55. package/dist/data/connectors/nasa-firms-fire.schemas.js.map +1 -0
  56. package/dist/data/connectors/open-meteo-air-quality.d.ts +2 -0
  57. package/dist/data/connectors/open-meteo-air-quality.js +401 -0
  58. package/dist/data/connectors/open-meteo-air-quality.js.map +1 -0
  59. package/dist/data/connectors/open-meteo-air-quality.schemas.d.ts +335 -0
  60. package/dist/data/connectors/open-meteo-air-quality.schemas.js +225 -0
  61. package/dist/data/connectors/open-meteo-air-quality.schemas.js.map +1 -0
  62. package/dist/data/connectors/open-meteo-flood.d.ts +2 -0
  63. package/dist/data/connectors/open-meteo-flood.js +446 -0
  64. package/dist/data/connectors/open-meteo-flood.js.map +1 -0
  65. package/dist/data/connectors/open-meteo-flood.schemas.d.ts +388 -0
  66. package/dist/data/connectors/open-meteo-flood.schemas.js +227 -0
  67. package/dist/data/connectors/open-meteo-flood.schemas.js.map +1 -0
  68. package/dist/data/connectors/open-meteo-historical-weather.d.ts +2 -0
  69. package/dist/data/connectors/open-meteo-historical-weather.js +468 -0
  70. package/dist/data/connectors/open-meteo-historical-weather.js.map +1 -0
  71. package/dist/data/connectors/open-meteo-historical-weather.schemas.d.ts +420 -0
  72. package/dist/data/connectors/open-meteo-historical-weather.schemas.js +282 -0
  73. package/dist/data/connectors/open-meteo-historical-weather.schemas.js.map +1 -0
  74. package/dist/data/connectors/openaq-air-quality.d.ts +2 -0
  75. package/dist/data/connectors/openaq-air-quality.js +734 -0
  76. package/dist/data/connectors/openaq-air-quality.js.map +1 -0
  77. package/dist/data/connectors/openaq-air-quality.schemas.d.ts +1067 -0
  78. package/dist/data/connectors/openaq-air-quality.schemas.js +512 -0
  79. package/dist/data/connectors/openaq-air-quality.schemas.js.map +1 -0
  80. package/dist/data/connectors/regulations-gov-attachments.d.ts +2 -0
  81. package/dist/data/connectors/regulations-gov-attachments.js +486 -0
  82. package/dist/data/connectors/regulations-gov-attachments.js.map +1 -0
  83. package/dist/data/connectors/regulations-gov-attachments.schemas.d.ts +270 -0
  84. package/dist/data/connectors/regulations-gov-attachments.schemas.js +181 -0
  85. package/dist/data/connectors/regulations-gov-attachments.schemas.js.map +1 -0
  86. package/dist/data/connectors/regulations-gov-comments.d.ts +2 -0
  87. package/dist/data/connectors/regulations-gov-comments.js +718 -0
  88. package/dist/data/connectors/regulations-gov-comments.js.map +1 -0
  89. package/dist/data/connectors/regulations-gov-comments.schemas.d.ts +717 -0
  90. package/dist/data/connectors/regulations-gov-comments.schemas.js +389 -0
  91. package/dist/data/connectors/regulations-gov-comments.schemas.js.map +1 -0
  92. package/dist/data/connectors/usbr-project-records.d.ts +2 -0
  93. package/dist/data/connectors/usbr-project-records.js +467 -0
  94. package/dist/data/connectors/usbr-project-records.js.map +1 -0
  95. package/dist/data/connectors/usbr-project-records.schemas.d.ts +194 -0
  96. package/dist/data/connectors/usbr-project-records.schemas.js +137 -0
  97. package/dist/data/connectors/usbr-project-records.schemas.js.map +1 -0
  98. package/dist/data/connectors/usbr-rise.d.ts +2 -0
  99. package/dist/data/connectors/usbr-rise.js +625 -0
  100. package/dist/data/connectors/usbr-rise.js.map +1 -0
  101. package/dist/data/connectors/usbr-rise.schemas.d.ts +623 -0
  102. package/dist/data/connectors/usbr-rise.schemas.js +407 -0
  103. package/dist/data/connectors/usbr-rise.schemas.js.map +1 -0
  104. package/dist/data/connectors/usgs-water-instantaneous-values.d.ts +2 -0
  105. package/dist/data/connectors/usgs-water-instantaneous-values.js +521 -0
  106. package/dist/data/connectors/usgs-water-instantaneous-values.js.map +1 -0
  107. package/dist/data/connectors/usgs-water-instantaneous-values.schemas.d.ts +496 -0
  108. package/dist/data/connectors/usgs-water-instantaneous-values.schemas.js +309 -0
  109. package/dist/data/connectors/usgs-water-instantaneous-values.schemas.js.map +1 -0
  110. package/dist/data/connectors/youtube-public-content.d.ts +2 -0
  111. package/dist/data/connectors/youtube-public-content.js +974 -0
  112. package/dist/data/connectors/youtube-public-content.js.map +1 -0
  113. package/dist/data/connectors/youtube-public-content.schemas.d.ts +773 -0
  114. package/dist/data/connectors/youtube-public-content.schemas.js +567 -0
  115. package/dist/data/connectors/youtube-public-content.schemas.js.map +1 -0
  116. package/dist/data/contracts.d.ts +374 -0
  117. package/dist/data/contracts.js +10 -0
  118. package/dist/data/contracts.js.map +1 -0
  119. package/dist/data/runtime/artifacts.d.ts +6 -0
  120. package/dist/data/runtime/artifacts.js +103 -0
  121. package/dist/data/runtime/artifacts.js.map +1 -0
  122. package/dist/data/runtime/bounded-http.d.ts +10 -0
  123. package/dist/data/runtime/bounded-http.js +403 -0
  124. package/dist/data/runtime/bounded-http.js.map +1 -0
  125. package/dist/data/runtime/canonical-json.d.ts +3 -0
  126. package/dist/data/runtime/canonical-json.js +59 -0
  127. package/dist/data/runtime/canonical-json.js.map +1 -0
  128. package/dist/data/runtime/credentials.d.ts +14 -0
  129. package/dist/data/runtime/credentials.js +67 -0
  130. package/dist/data/runtime/credentials.js.map +1 -0
  131. package/dist/data/runtime/csv.d.ts +4 -0
  132. package/dist/data/runtime/csv.js +51 -0
  133. package/dist/data/runtime/csv.js.map +1 -0
  134. package/dist/data/runtime/errors.d.ts +22 -0
  135. package/dist/data/runtime/errors.js +101 -0
  136. package/dist/data/runtime/errors.js.map +1 -0
  137. package/dist/data/runtime/execute.d.ts +11 -0
  138. package/dist/data/runtime/execute.js +358 -0
  139. package/dist/data/runtime/execute.js.map +1 -0
  140. package/dist/data/runtime/receipts.d.ts +13 -0
  141. package/dist/data/runtime/receipts.js +38 -0
  142. package/dist/data/runtime/receipts.js.map +1 -0
  143. package/dist/data/schemas/catalog.v1.json +73 -0
  144. package/dist/data/schemas/core-receipt.v1.json +117 -0
  145. package/dist/data/schemas/describe.v1.json +24 -0
  146. package/dist/data/schemas/discovery.v1.json +130 -0
  147. package/dist/data/schemas/doctor.v1.json +40 -0
  148. package/dist/data/schemas/error.v1.json +48 -0
  149. package/dist/data/schemas/manifest.v1.json +174 -0
  150. package/dist/data/schemas/run-request.v1.json +37 -0
  151. package/dist/data/schemas/run-result.v1.json +77 -0
  152. package/dist/data/schemas.d.ts +27 -0
  153. package/dist/data/schemas.js +69 -0
  154. package/dist/data/schemas.js.map +1 -0
  155. package/dist/env.js.map +1 -1
  156. package/dist/errors.js.map +1 -1
  157. package/dist/http.js.map +1 -1
  158. package/dist/kb/config.js.map +1 -1
  159. package/dist/kb/pipeline-health.js.map +1 -1
  160. package/dist/research/orchestration.js +54 -7
  161. package/dist/research/orchestration.js.map +1 -1
  162. package/dist/research/workspace/acquisition.js.map +1 -1
  163. package/dist/research/workspace/audit-bundle.js +7 -2
  164. package/dist/research/workspace/audit-bundle.js.map +1 -1
  165. package/dist/research/workspace/broker.js.map +1 -1
  166. package/dist/research/workspace/constants.js.map +1 -1
  167. package/dist/research/workspace/credentials.d.ts +3 -0
  168. package/dist/research/workspace/credentials.js +20 -3
  169. package/dist/research/workspace/credentials.js.map +1 -1
  170. package/dist/research/workspace/data-evidence-adapter.d.ts +60 -0
  171. package/dist/research/workspace/data-evidence-adapter.js +314 -0
  172. package/dist/research/workspace/data-evidence-adapter.js.map +1 -0
  173. package/dist/research/workspace/discovery-status.js +10 -7
  174. package/dist/research/workspace/discovery-status.js.map +1 -1
  175. package/dist/research/workspace/discovery.js +12 -11
  176. package/dist/research/workspace/discovery.js.map +1 -1
  177. package/dist/research/workspace/evidence-ledger.d.ts +8 -1
  178. package/dist/research/workspace/evidence-ledger.js +46 -2
  179. package/dist/research/workspace/evidence-ledger.js.map +1 -1
  180. package/dist/research/workspace/evidence.d.ts +31 -0
  181. package/dist/research/workspace/evidence.js +77 -0
  182. package/dist/research/workspace/evidence.js.map +1 -1
  183. package/dist/research/workspace/executor.js.map +1 -1
  184. package/dist/research/workspace/external-skills.d.ts +49 -49
  185. package/dist/research/workspace/external-skills.js.map +1 -1
  186. package/dist/research/workspace/platform-capabilities.js.map +1 -1
  187. package/dist/research/workspace/preflight.d.ts +4 -4
  188. package/dist/research/workspace/preflight.js +33 -8
  189. package/dist/research/workspace/preflight.js.map +1 -1
  190. package/dist/research/workspace/projects.js.map +1 -1
  191. package/dist/research/workspace/publication.js.map +1 -1
  192. package/dist/research/workspace/research-policy-wizard.js.map +1 -1
  193. package/dist/research/workspace/research-policy.js.map +1 -1
  194. package/dist/research/workspace/runtime.d.ts +7 -0
  195. package/dist/research/workspace/runtime.js +77 -20
  196. package/dist/research/workspace/runtime.js.map +1 -1
  197. package/dist/research/workspace/sanitization.js.map +1 -1
  198. package/dist/research/workspace/schemas.js +1 -1
  199. package/dist/research/workspace/schemas.js.map +1 -1
  200. package/dist/research/workspace/scientific-design.js.map +1 -1
  201. package/dist/research/workspace/scientific-review.js.map +1 -1
  202. package/dist/research/workspace/setup-catalog.d.ts +9 -9
  203. package/dist/research/workspace/setup-catalog.js +2 -2
  204. package/dist/research/workspace/setup-catalog.js.map +1 -1
  205. package/dist/research/workspace/setup-declarative.js.map +1 -1
  206. package/dist/research/workspace/setup-instructions.d.ts +42 -0
  207. package/dist/research/workspace/setup-instructions.js +413 -0
  208. package/dist/research/workspace/setup-instructions.js.map +1 -0
  209. package/dist/research/workspace/setup-invocation.js.map +1 -1
  210. package/dist/research/workspace/setup-wizard.js +7 -0
  211. package/dist/research/workspace/setup-wizard.js.map +1 -1
  212. package/dist/research/workspace/setup.d.ts +18 -15
  213. package/dist/research/workspace/setup.js +71 -3
  214. package/dist/research/workspace/setup.js.map +1 -1
  215. package/dist/research/workspace/workspace.js.map +1 -1
  216. package/package.json +3 -3
@@ -0,0 +1,517 @@
1
+ import { DATA_MANIFEST_SCHEMA_VERSION } from "../contracts.js";
2
+ import { DataRuntimeError } from "../runtime/errors.js";
3
+ import { FEDERAL_REGISTER_INPUT_SCHEMA, FEDERAL_REGISTER_OUTPUT_SCHEMA, } from "./federal-register-documents.schemas.js";
4
+ const DOCUMENTS_PATH = "/api/v1/documents.json";
5
+ const DOCUMENTS_NEXT_PATHS = new Set([DOCUMENTS_PATH, "/api/v1/documents"]);
6
+ const DOCUMENT_FIELDS = [
7
+ "abstract",
8
+ "action",
9
+ "agencies",
10
+ "agency_names",
11
+ "body_html_url",
12
+ "citation",
13
+ "comments_close_on",
14
+ "dates",
15
+ "docket_id",
16
+ "docket_ids",
17
+ "document_number",
18
+ "effective_on",
19
+ "full_text_xml_url",
20
+ "html_url",
21
+ "json_url",
22
+ "pdf_url",
23
+ "public_inspection_pdf_url",
24
+ "publication_date",
25
+ "raw_text_url",
26
+ "regulation_id_numbers",
27
+ "regulations_dot_gov_url",
28
+ "significant",
29
+ "title",
30
+ "topics",
31
+ "type",
32
+ ];
33
+ export const federalRegisterDocumentsConnector = {
34
+ schemaVersion: DATA_MANIFEST_SCHEMA_VERSION,
35
+ capabilityId: "federal-register.documents",
36
+ capabilityVersion: "1.0.0",
37
+ minimumCliVersion: "0.0.55",
38
+ provider: {
39
+ providerId: "federal-register",
40
+ name: "FederalRegister.gov",
41
+ },
42
+ sourceCategory: "government-publication-metadata",
43
+ endpoints: [
44
+ {
45
+ endpointId: "federal-register-api",
46
+ baseUrl: "https://www.federalregister.gov",
47
+ pathPrefixes: ["/api/v1/"],
48
+ allowedMethods: ["GET"],
49
+ allowedContentTypes: ["application/json"],
50
+ },
51
+ ],
52
+ license: {
53
+ name: "Federal Register public metadata",
54
+ url: "https://www.federalregister.gov/reader-aids/government-policy-and-ofr-procedures/about-this-site",
55
+ restrictions: [
56
+ "FederalRegister.gov is an informational resource and does not replace an official edition.",
57
+ "Legal research should verify metadata and linked material against the official Federal Register edition.",
58
+ "This connector returns search metadata only and does not retrieve linked document full text.",
59
+ ],
60
+ },
61
+ credentials: [],
62
+ limits: {
63
+ timeoutMs: 45_000,
64
+ maxRequestBytes: 1_024,
65
+ maxResponseBytes: 10_000_000,
66
+ maxPages: 10,
67
+ maxRecords: 250,
68
+ maxRetries: 4,
69
+ maxRetryDelayMs: 120_000,
70
+ maxRedirects: 2,
71
+ },
72
+ diagnostics: { static: true, live: false },
73
+ freshness: {
74
+ kind: "provider-current",
75
+ description: "Search or provider-wide listing metadata reflects the FederalRegister.gov API at request time.",
76
+ },
77
+ limitations: [
78
+ "The connector does not fetch document body, raw text, XML, or linked PDF content.",
79
+ "The connector does not provide legal interpretation or determine the current force of law.",
80
+ "FederalRegister.gov metadata should be verified against an official edition for legal reliance.",
81
+ ],
82
+ discovery: {
83
+ source: {
84
+ maintainedBy: "Office of the Federal Register, National Archives and Records Administration",
85
+ summary: "Official FederalRegister.gov metadata for documents published in the Federal Register.",
86
+ description: "FederalRegister.gov exposes searchable metadata for notices, proposed rules, final rules, and presidential documents published by the United States federal government.",
87
+ coverage: {
88
+ geographic: "United States federal-government publications.",
89
+ temporal: "Publication-date searchable holdings exposed by the FederalRegister.gov documents API.",
90
+ granularity: "One published Federal Register document metadata record.",
91
+ },
92
+ },
93
+ summary: "Retrieve bounded Federal Register document metadata with optional filters.",
94
+ description: "This capability queries the FederalRegister.gov documents API with optional publication-date and regulatory filters, then returns metadata under explicit page and record limits.",
95
+ provides: [
96
+ "Document titles, numbers, publication/effective/comment dates, agencies, topics, dockets, RINs, citations, and provider-supplied content links when available.",
97
+ "Bounded pagination with explicit empty, truncated, and later-page partial states.",
98
+ "Links supplied in provider metadata for subsequent separately governed retrieval.",
99
+ ],
100
+ doesNotProvide: [
101
+ "Document body text, XML, PDF bytes, public comments, or docket attachments.",
102
+ "Legal interpretation, current legal force, compliance advice, or completeness beyond the provider API.",
103
+ "Regulations.gov comment evidence or public sentiment about a rulemaking.",
104
+ ],
105
+ selectionHints: [
106
+ "Choose this capability to identify official notices, rules, proposed rules, or presidential documents and their publication metadata.",
107
+ "Choose Regulations.gov for docket comments and attachments rather than Federal Register publication metadata.",
108
+ "Use a separately reviewed content-retrieval workflow when full document text is required.",
109
+ "Omit filters only for a bounded newest-document listing; use term, agency, type, topic, docket, RIN, or date filters for evidence questions.",
110
+ ],
111
+ typicalUseCases: [
112
+ "Find EPA rules published within a bounded quarter and capture their document numbers and dockets.",
113
+ "Verify whether a federal agency published a notice or proposed rule in a specified period.",
114
+ ],
115
+ sourceDocumentation: [
116
+ {
117
+ title: "FederalRegister.gov API v1 documentation",
118
+ url: "https://www.federalregister.gov/developers/documentation/api/v1",
119
+ },
120
+ {
121
+ title: "About FederalRegister.gov",
122
+ url: "https://www.federalregister.gov/reader-aids/government-policy-and-ofr-procedures/about-this-site",
123
+ },
124
+ ],
125
+ },
126
+ operations: [
127
+ {
128
+ operationId: "search",
129
+ operationVersion: "1.0.0",
130
+ summary: "Retrieve bounded FederalRegister.gov document metadata with optional narrowing filters.",
131
+ description: "Builds a stable provider query from optional filters, follows validated same-origin pagination metadata, and emits metadata only within runtime page and record limits.",
132
+ inputSchema: FEDERAL_REGISTER_INPUT_SCHEMA,
133
+ outputSchema: FEDERAL_REGISTER_OUTPUT_SCHEMA,
134
+ execute: executeFederalRegisterSearch,
135
+ },
136
+ ],
137
+ };
138
+ async function executeFederalRegisterSearch(context) {
139
+ const query = normalizeQuery(context.input, context.limits.maxRecords);
140
+ const records = [];
141
+ const pages = [];
142
+ const observations = [];
143
+ let provider = null;
144
+ let stopReason = "completed";
145
+ let failedPage = null;
146
+ let failure;
147
+ for (let pageNumber = 1; pageNumber <= context.limits.maxPages; pageNumber += 1) {
148
+ try {
149
+ const response = await context.http.request({
150
+ endpointId: "federal-register-api",
151
+ method: "GET",
152
+ path: DOCUMENTS_PATH,
153
+ query: buildQueryParameters(query, pageNumber),
154
+ });
155
+ const parsed = parseProviderPage(response.json(), pageNumber, context.limits.maxRecords - records.length, records.length);
156
+ validateProviderConsistency(provider, parsed);
157
+ provider ??= {
158
+ description: parsed.description,
159
+ count: parsed.count,
160
+ totalPages: parsed.totalPages,
161
+ };
162
+ observations.push({ ...response.observation, sourceId: `page:${pageNumber}` });
163
+ const remaining = context.limits.maxRecords - records.length;
164
+ records.push(...parsed.records.slice(0, remaining));
165
+ pages.push({ pageNumber, recordCount: parsed.records.length });
166
+ const hasMore = providerHasMore(parsed, pageNumber);
167
+ if (records.length >= context.limits.maxRecords &&
168
+ (hasMore || parsed.rawRecordCount > parsed.records.length)) {
169
+ stopReason = "max-records";
170
+ break;
171
+ }
172
+ if (!hasMore) {
173
+ stopReason = pageNumber === 1 && parsed.records.length === 0 ? "no-results" : "completed";
174
+ break;
175
+ }
176
+ if (pageNumber >= context.limits.maxPages) {
177
+ stopReason = "max-pages";
178
+ break;
179
+ }
180
+ }
181
+ catch (error) {
182
+ if (pages.length === 0)
183
+ throw normalizeProviderFailure(error);
184
+ failedPage = pageNumber;
185
+ failure = error;
186
+ stopReason = "partial";
187
+ break;
188
+ }
189
+ }
190
+ if (!provider) {
191
+ throw new DataRuntimeError("provider-response-invalid", "Federal Register search completed without provider metadata.");
192
+ }
193
+ const partial = failedPage !== null;
194
+ const missingPage = failedPage ?? 1;
195
+ const errors = partial
196
+ ? [
197
+ {
198
+ code: "partial-result",
199
+ message: "A later Federal Register result page could not be retrieved or validated.",
200
+ retryable: failure instanceof DataRuntimeError ? (failure.options.retryable ?? false) : false,
201
+ userActionRequired: false,
202
+ details: {
203
+ missingPages: [missingPage],
204
+ causeCode: failure instanceof DataRuntimeError ? failure.code : "provider-response-invalid",
205
+ },
206
+ },
207
+ ]
208
+ : [];
209
+ const truncated = stopReason === "max-pages" || stopReason === "max-records";
210
+ return {
211
+ status: partial ? "partial" : "success",
212
+ data: {
213
+ source: {
214
+ providerId: "federal-register",
215
+ endpoint: DOCUMENTS_PATH,
216
+ metadataOnly: true,
217
+ legalStatus: "Informational metadata; verify legal reliance against an official Federal Register edition.",
218
+ },
219
+ query,
220
+ provider,
221
+ pages,
222
+ records,
223
+ stopReason,
224
+ },
225
+ summary: {
226
+ recordCount: records.length,
227
+ pageCount: pages.length,
228
+ chunkCount: 0,
229
+ truncated,
230
+ completeness: partial ? "partial" : "complete",
231
+ ...(partial
232
+ ? { missing: [{ kind: "page", identifiers: [String(missingPage)] }] }
233
+ : {}),
234
+ },
235
+ warnings: [
236
+ "FederalRegister.gov search metadata is informational and is not a legal interpretation.",
237
+ ...(truncated ? ["The result stopped at an explicit page or record limit."] : []),
238
+ ],
239
+ errors,
240
+ observations,
241
+ };
242
+ }
243
+ function normalizeQuery(input, maxRecords) {
244
+ const term = nullableText(input.term);
245
+ const agencies = normalizeList(input.agencies);
246
+ const documentTypes = normalizeList(input.documentTypes);
247
+ const topics = normalizeList(input.topics);
248
+ const docketId = nullableText(input.docketId);
249
+ const regulationIdNumber = nullableText(input.regulationIdNumber);
250
+ const publicationDate = input.publicationDate ?? {};
251
+ const from = publicationDate.from
252
+ ? parseExactDate(publicationDate.from, "publicationDate.from")
253
+ : undefined;
254
+ const to = publicationDate.to
255
+ ? parseExactDate(publicationDate.to, "publicationDate.to")
256
+ : undefined;
257
+ if (from && to && from > to) {
258
+ throw new DataRuntimeError("invalid-request", "Federal Register publicationDate.from must not follow publicationDate.to.");
259
+ }
260
+ const order = input.order ?? "newest";
261
+ if (order === "relevance" && !term) {
262
+ throw new DataRuntimeError("invalid-request", "Federal Register order=relevance requires a term filter.");
263
+ }
264
+ return {
265
+ term,
266
+ publicationDate: {
267
+ ...(from ? { from } : {}),
268
+ ...(to ? { to } : {}),
269
+ },
270
+ agencies,
271
+ documentTypes,
272
+ topics,
273
+ docketId,
274
+ regulationIdNumber,
275
+ order,
276
+ pageSize: Math.min(input.pageSize ?? 25, maxRecords),
277
+ };
278
+ }
279
+ function buildQueryParameters(query, page) {
280
+ return {
281
+ "fields[]": [...DOCUMENT_FIELDS],
282
+ order: query.order,
283
+ page,
284
+ per_page: query.pageSize,
285
+ ...(query.term ? { "conditions[term]": query.term } : {}),
286
+ ...(query.publicationDate.from
287
+ ? { "conditions[publication_date][gte]": query.publicationDate.from }
288
+ : {}),
289
+ ...(query.publicationDate.to
290
+ ? { "conditions[publication_date][lte]": query.publicationDate.to }
291
+ : {}),
292
+ ...(query.agencies.length > 0 ? { "conditions[agencies][]": query.agencies } : {}),
293
+ ...(query.documentTypes.length > 0 ? { "conditions[type][]": query.documentTypes } : {}),
294
+ ...(query.topics.length > 0 ? { "conditions[topics][]": query.topics } : {}),
295
+ ...(query.docketId ? { "conditions[docket_id]": query.docketId } : {}),
296
+ ...(query.regulationIdNumber
297
+ ? { "conditions[regulation_id_number]": query.regulationIdNumber }
298
+ : {}),
299
+ };
300
+ }
301
+ function parseProviderPage(value, pageNumber, remainingRecords, recordOffset) {
302
+ const payload = requireObject(value, "Federal Register response");
303
+ const description = looseString(payload.description);
304
+ const count = optionalNonNegativeInteger(payload.count);
305
+ const totalPages = optionalNonNegativeInteger(payload.total_pages);
306
+ if (count !== null && totalPages !== null && (count === 0) !== (totalPages === 0)) {
307
+ throw providerInvalid("Federal Register count and total_pages are inconsistent.");
308
+ }
309
+ if (!Array.isArray(payload.results)) {
310
+ throw providerInvalid("Federal Register results must be an array.");
311
+ }
312
+ const nextPageUrl = nullableProviderString(payload.next_page_url, "next_page_url");
313
+ validateNextPageUrl(nextPageUrl, pageNumber, totalPages);
314
+ if (count !== null && payload.results.length > count) {
315
+ throw providerInvalid("Federal Register page records exceed the provider count.");
316
+ }
317
+ const records = payload.results
318
+ .filter(isRecord)
319
+ .slice(0, remainingRecords)
320
+ .map((record, index) => normalizeProviderRecord(record, pageNumber, recordOffset + index));
321
+ return {
322
+ description,
323
+ count,
324
+ totalPages,
325
+ nextPageUrl,
326
+ rawRecordCount: payload.results.length,
327
+ records,
328
+ };
329
+ }
330
+ function normalizeProviderRecord(record, pageNumber, index) {
331
+ const documentNumber = looseString(record.document_number) || `federal-register-${index}`;
332
+ const agencies = Array.isArray(record.agencies)
333
+ ? record.agencies.flatMap((value) => {
334
+ if (!isRecord(value))
335
+ return [];
336
+ const name = looseString(value.name) || looseString(value.raw_name);
337
+ if (!name)
338
+ return [];
339
+ return [
340
+ {
341
+ id: optionalNonNegativeInteger(value.id),
342
+ name,
343
+ slug: looseString(value.slug),
344
+ },
345
+ ];
346
+ })
347
+ : [];
348
+ const agencyNames = uniqueStrings([
349
+ ...looseStringArray(record.agency_names),
350
+ ...agencies.map((agency) => agency.name),
351
+ ]);
352
+ return {
353
+ title: looseString(record.title) || `Federal Register document ${documentNumber}`,
354
+ type: looseString(record.type),
355
+ abstract: nullableLooseString(record.abstract),
356
+ action: nullableLooseString(record.action),
357
+ documentNumber,
358
+ htmlUrl: nullableLooseString(record.html_url),
359
+ jsonUrl: nullableLooseString(record.json_url),
360
+ pdfUrl: nullableLooseString(record.pdf_url),
361
+ publicInspectionPdfUrl: nullableLooseString(record.public_inspection_pdf_url),
362
+ bodyHtmlUrl: nullableLooseString(record.body_html_url),
363
+ fullTextXmlUrl: nullableLooseString(record.full_text_xml_url),
364
+ rawTextUrl: nullableLooseString(record.raw_text_url),
365
+ regulationsGovUrl: nullableLooseString(record.regulations_dot_gov_url),
366
+ citation: nullableLooseString(record.citation),
367
+ commentsCloseOn: optionalProviderDate(record.comments_close_on),
368
+ publicationDate: optionalProviderDate(record.publication_date) ?? "",
369
+ effectiveOn: optionalProviderDate(record.effective_on),
370
+ agencies,
371
+ agencyNames,
372
+ topics: looseStringArray(record.topics),
373
+ docketIds: uniqueStrings([
374
+ ...looseStringArray(record.docket_ids),
375
+ ...looseStringArray(record.docket_id),
376
+ ]),
377
+ regulationIdNumbers: looseStringArray(record.regulation_id_numbers),
378
+ significant: typeof record.significant === "boolean" ? record.significant : null,
379
+ sourcePageNumber: pageNumber,
380
+ };
381
+ }
382
+ function validateProviderConsistency(current, next) {
383
+ if (!current)
384
+ return;
385
+ if ((current.count !== null && next.count !== null && current.count !== next.count) ||
386
+ (current.totalPages !== null &&
387
+ next.totalPages !== null &&
388
+ current.totalPages !== next.totalPages) ||
389
+ (current.description && next.description && current.description !== next.description)) {
390
+ throw providerInvalid("Federal Register pagination metadata changed between pages.");
391
+ }
392
+ }
393
+ function providerHasMore(page, pageNumber) {
394
+ if (page.totalPages !== null)
395
+ return pageNumber < page.totalPages;
396
+ return page.rawRecordCount > 0;
397
+ }
398
+ function validateNextPageUrl(nextPageUrl, pageNumber, totalPages) {
399
+ if (totalPages === null) {
400
+ if (nextPageUrl)
401
+ validateNextPageTarget(nextPageUrl, pageNumber);
402
+ return;
403
+ }
404
+ const shouldHaveNext = pageNumber < totalPages;
405
+ if (shouldHaveNext !== Boolean(nextPageUrl)) {
406
+ throw providerInvalid("Federal Register next_page_url does not match total_pages.");
407
+ }
408
+ if (!nextPageUrl)
409
+ return;
410
+ validateNextPageTarget(nextPageUrl, pageNumber);
411
+ }
412
+ function validateNextPageTarget(nextPageUrl, pageNumber) {
413
+ let parsed;
414
+ try {
415
+ parsed = new URL(nextPageUrl);
416
+ }
417
+ catch {
418
+ throw providerInvalid("Federal Register next_page_url is not a valid URL.");
419
+ }
420
+ if (parsed.origin !== "https://www.federalregister.gov" ||
421
+ !DOCUMENTS_NEXT_PATHS.has(parsed.pathname) ||
422
+ parsed.searchParams.get("page") !== String(pageNumber + 1)) {
423
+ throw providerInvalid("Federal Register next_page_url is outside the declared page sequence.");
424
+ }
425
+ }
426
+ function requireObject(value, field) {
427
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
428
+ throw providerInvalid(`${field} must be an object.`);
429
+ }
430
+ return value;
431
+ }
432
+ function requireString(value, field, allowEmpty = false) {
433
+ if (typeof value !== "string" || (!allowEmpty && !value.trim())) {
434
+ throw providerInvalid(`${field} must be ${allowEmpty ? "a string" : "a non-empty string"}.`);
435
+ }
436
+ return value.trim().replace(/\s+/g, " ");
437
+ }
438
+ function nullableProviderString(value, field) {
439
+ if (value === null || value === undefined)
440
+ return null;
441
+ return requireString(value, field, true) || null;
442
+ }
443
+ function isRecord(value) {
444
+ return Boolean(value) && typeof value === "object" && !Array.isArray(value);
445
+ }
446
+ function looseString(value) {
447
+ return typeof value === "string" ? value.trim().replace(/\s+/g, " ") : "";
448
+ }
449
+ function nullableLooseString(value) {
450
+ return looseString(value) || null;
451
+ }
452
+ function looseStringArray(value) {
453
+ if (Array.isArray(value))
454
+ return value.map(looseString).filter(Boolean);
455
+ const item = looseString(value);
456
+ return item ? [item] : [];
457
+ }
458
+ function uniqueStrings(values) {
459
+ return [...new Set(values)];
460
+ }
461
+ function optionalNonNegativeInteger(value) {
462
+ return typeof value === "number" && Number.isInteger(value) && value >= 0 ? value : null;
463
+ }
464
+ function optionalProviderDate(value) {
465
+ const text = looseString(value);
466
+ if (!text)
467
+ return null;
468
+ try {
469
+ return parseExactDate(text, "provider date");
470
+ }
471
+ catch {
472
+ return null;
473
+ }
474
+ }
475
+ function parseExactDate(value, field) {
476
+ if (!/^\d{4}-\d{2}-\d{2}$/.test(value)) {
477
+ throw new DataRuntimeError("invalid-request", `${field} must use YYYY-MM-DD.`);
478
+ }
479
+ const parsed = new Date(`${value}T00:00:00Z`);
480
+ if (!Number.isFinite(parsed.getTime()) || parsed.toISOString().slice(0, 10) !== value) {
481
+ throw new DataRuntimeError("invalid-request", `${field} must be a valid calendar date.`);
482
+ }
483
+ return value;
484
+ }
485
+ function nullableText(value) {
486
+ if (value === undefined)
487
+ return null;
488
+ const normalized = value.trim().replace(/\s+/g, " ");
489
+ if (!normalized) {
490
+ throw new DataRuntimeError("invalid-request", "Federal Register string filters cannot be blank.");
491
+ }
492
+ return normalized;
493
+ }
494
+ function normalizeList(values) {
495
+ if (!values)
496
+ return [];
497
+ const normalized = values.map((value) => {
498
+ const item = value.trim().replace(/\s+/g, " ");
499
+ if (!item) {
500
+ throw new DataRuntimeError("invalid-request", "Federal Register array filters cannot contain blank values.");
501
+ }
502
+ return item;
503
+ });
504
+ return [...new Set(normalized)].sort(codePointOrder);
505
+ }
506
+ function normalizeProviderFailure(error) {
507
+ if (error instanceof DataRuntimeError)
508
+ return error;
509
+ return new DataRuntimeError("provider-response-invalid", "The Federal Register response could not be parsed or validated.");
510
+ }
511
+ function providerInvalid(message) {
512
+ return new DataRuntimeError("provider-response-invalid", message);
513
+ }
514
+ function codePointOrder(left, right) {
515
+ return left < right ? -1 : left > right ? 1 : 0;
516
+ }
517
+ //# sourceMappingURL=federal-register-documents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"federal-register-documents.js","sourceRoot":"","sources":["../../../src/data/connectors/federal-register-documents.ts"],"names":[],"mappings":"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"}