@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.
- package/AGENTS.md +22 -2
- package/README.md +171 -7
- package/dist/cli.js +10 -1
- package/dist/cli.js.map +1 -1
- package/dist/data/builtins.d.ts +1 -0
- package/dist/data/builtins.js +40 -0
- package/dist/data/builtins.js.map +1 -0
- package/dist/data/catalog.d.ts +25 -0
- package/dist/data/catalog.js +305 -0
- package/dist/data/catalog.js.map +1 -0
- package/dist/data/commands.d.ts +9 -0
- package/dist/data/commands.js +307 -0
- package/dist/data/commands.js.map +1 -0
- package/dist/data/connectors/airnow-hourly-observations.d.ts +2 -0
- package/dist/data/connectors/airnow-hourly-observations.js +522 -0
- package/dist/data/connectors/airnow-hourly-observations.js.map +1 -0
- package/dist/data/connectors/airnow-hourly-observations.schemas.d.ts +299 -0
- package/dist/data/connectors/airnow-hourly-observations.schemas.js +188 -0
- package/dist/data/connectors/airnow-hourly-observations.schemas.js.map +1 -0
- package/dist/data/connectors/bluesky-public-posts.d.ts +2 -0
- package/dist/data/connectors/bluesky-public-posts.js +705 -0
- package/dist/data/connectors/bluesky-public-posts.js.map +1 -0
- package/dist/data/connectors/bluesky-public-posts.schemas.d.ts +733 -0
- package/dist/data/connectors/bluesky-public-posts.schemas.js +422 -0
- package/dist/data/connectors/bluesky-public-posts.schemas.js.map +1 -0
- package/dist/data/connectors/epa-eis-records.d.ts +2 -0
- package/dist/data/connectors/epa-eis-records.js +566 -0
- package/dist/data/connectors/epa-eis-records.js.map +1 -0
- package/dist/data/connectors/epa-eis-records.schemas.d.ts +199 -0
- package/dist/data/connectors/epa-eis-records.schemas.js +146 -0
- package/dist/data/connectors/epa-eis-records.schemas.js.map +1 -0
- package/dist/data/connectors/federal-register-documents.d.ts +2 -0
- package/dist/data/connectors/federal-register-documents.js +517 -0
- package/dist/data/connectors/federal-register-documents.js.map +1 -0
- package/dist/data/connectors/federal-register-documents.schemas.d.ts +357 -0
- package/dist/data/connectors/federal-register-documents.schemas.js +243 -0
- package/dist/data/connectors/federal-register-documents.schemas.js.map +1 -0
- package/dist/data/connectors/gdelt-doc-search.d.ts +2 -0
- package/dist/data/connectors/gdelt-doc-search.js +658 -0
- package/dist/data/connectors/gdelt-doc-search.js.map +1 -0
- package/dist/data/connectors/gdelt-doc-search.schemas.d.ts +446 -0
- package/dist/data/connectors/gdelt-doc-search.schemas.js +330 -0
- package/dist/data/connectors/gdelt-doc-search.schemas.js.map +1 -0
- package/dist/data/connectors/gdelt-file-feeds.d.ts +4 -0
- package/dist/data/connectors/gdelt-file-feeds.js +591 -0
- package/dist/data/connectors/gdelt-file-feeds.js.map +1 -0
- package/dist/data/connectors/gdelt-file-feeds.schemas.d.ts +40 -0
- package/dist/data/connectors/gdelt-file-feeds.schemas.js +256 -0
- package/dist/data/connectors/gdelt-file-feeds.schemas.js.map +1 -0
- package/dist/data/connectors/nasa-firms-fire.d.ts +2 -0
- package/dist/data/connectors/nasa-firms-fire.js +578 -0
- package/dist/data/connectors/nasa-firms-fire.js.map +1 -0
- package/dist/data/connectors/nasa-firms-fire.schemas.d.ts +369 -0
- package/dist/data/connectors/nasa-firms-fire.schemas.js +238 -0
- package/dist/data/connectors/nasa-firms-fire.schemas.js.map +1 -0
- package/dist/data/connectors/open-meteo-air-quality.d.ts +2 -0
- package/dist/data/connectors/open-meteo-air-quality.js +401 -0
- package/dist/data/connectors/open-meteo-air-quality.js.map +1 -0
- package/dist/data/connectors/open-meteo-air-quality.schemas.d.ts +335 -0
- package/dist/data/connectors/open-meteo-air-quality.schemas.js +225 -0
- package/dist/data/connectors/open-meteo-air-quality.schemas.js.map +1 -0
- package/dist/data/connectors/open-meteo-flood.d.ts +2 -0
- package/dist/data/connectors/open-meteo-flood.js +446 -0
- package/dist/data/connectors/open-meteo-flood.js.map +1 -0
- package/dist/data/connectors/open-meteo-flood.schemas.d.ts +388 -0
- package/dist/data/connectors/open-meteo-flood.schemas.js +227 -0
- package/dist/data/connectors/open-meteo-flood.schemas.js.map +1 -0
- package/dist/data/connectors/open-meteo-historical-weather.d.ts +2 -0
- package/dist/data/connectors/open-meteo-historical-weather.js +468 -0
- package/dist/data/connectors/open-meteo-historical-weather.js.map +1 -0
- package/dist/data/connectors/open-meteo-historical-weather.schemas.d.ts +420 -0
- package/dist/data/connectors/open-meteo-historical-weather.schemas.js +282 -0
- package/dist/data/connectors/open-meteo-historical-weather.schemas.js.map +1 -0
- package/dist/data/connectors/openaq-air-quality.d.ts +2 -0
- package/dist/data/connectors/openaq-air-quality.js +734 -0
- package/dist/data/connectors/openaq-air-quality.js.map +1 -0
- package/dist/data/connectors/openaq-air-quality.schemas.d.ts +1067 -0
- package/dist/data/connectors/openaq-air-quality.schemas.js +512 -0
- package/dist/data/connectors/openaq-air-quality.schemas.js.map +1 -0
- package/dist/data/connectors/regulations-gov-attachments.d.ts +2 -0
- package/dist/data/connectors/regulations-gov-attachments.js +486 -0
- package/dist/data/connectors/regulations-gov-attachments.js.map +1 -0
- package/dist/data/connectors/regulations-gov-attachments.schemas.d.ts +270 -0
- package/dist/data/connectors/regulations-gov-attachments.schemas.js +181 -0
- package/dist/data/connectors/regulations-gov-attachments.schemas.js.map +1 -0
- package/dist/data/connectors/regulations-gov-comments.d.ts +2 -0
- package/dist/data/connectors/regulations-gov-comments.js +718 -0
- package/dist/data/connectors/regulations-gov-comments.js.map +1 -0
- package/dist/data/connectors/regulations-gov-comments.schemas.d.ts +717 -0
- package/dist/data/connectors/regulations-gov-comments.schemas.js +389 -0
- package/dist/data/connectors/regulations-gov-comments.schemas.js.map +1 -0
- package/dist/data/connectors/usbr-project-records.d.ts +2 -0
- package/dist/data/connectors/usbr-project-records.js +467 -0
- package/dist/data/connectors/usbr-project-records.js.map +1 -0
- package/dist/data/connectors/usbr-project-records.schemas.d.ts +194 -0
- package/dist/data/connectors/usbr-project-records.schemas.js +137 -0
- package/dist/data/connectors/usbr-project-records.schemas.js.map +1 -0
- package/dist/data/connectors/usbr-rise.d.ts +2 -0
- package/dist/data/connectors/usbr-rise.js +625 -0
- package/dist/data/connectors/usbr-rise.js.map +1 -0
- package/dist/data/connectors/usbr-rise.schemas.d.ts +623 -0
- package/dist/data/connectors/usbr-rise.schemas.js +407 -0
- package/dist/data/connectors/usbr-rise.schemas.js.map +1 -0
- package/dist/data/connectors/usgs-water-instantaneous-values.d.ts +2 -0
- package/dist/data/connectors/usgs-water-instantaneous-values.js +521 -0
- package/dist/data/connectors/usgs-water-instantaneous-values.js.map +1 -0
- package/dist/data/connectors/usgs-water-instantaneous-values.schemas.d.ts +496 -0
- package/dist/data/connectors/usgs-water-instantaneous-values.schemas.js +309 -0
- package/dist/data/connectors/usgs-water-instantaneous-values.schemas.js.map +1 -0
- package/dist/data/connectors/youtube-public-content.d.ts +2 -0
- package/dist/data/connectors/youtube-public-content.js +974 -0
- package/dist/data/connectors/youtube-public-content.js.map +1 -0
- package/dist/data/connectors/youtube-public-content.schemas.d.ts +773 -0
- package/dist/data/connectors/youtube-public-content.schemas.js +567 -0
- package/dist/data/connectors/youtube-public-content.schemas.js.map +1 -0
- package/dist/data/contracts.d.ts +374 -0
- package/dist/data/contracts.js +10 -0
- package/dist/data/contracts.js.map +1 -0
- package/dist/data/runtime/artifacts.d.ts +6 -0
- package/dist/data/runtime/artifacts.js +103 -0
- package/dist/data/runtime/artifacts.js.map +1 -0
- package/dist/data/runtime/bounded-http.d.ts +10 -0
- package/dist/data/runtime/bounded-http.js +403 -0
- package/dist/data/runtime/bounded-http.js.map +1 -0
- package/dist/data/runtime/canonical-json.d.ts +3 -0
- package/dist/data/runtime/canonical-json.js +59 -0
- package/dist/data/runtime/canonical-json.js.map +1 -0
- package/dist/data/runtime/credentials.d.ts +14 -0
- package/dist/data/runtime/credentials.js +67 -0
- package/dist/data/runtime/credentials.js.map +1 -0
- package/dist/data/runtime/csv.d.ts +4 -0
- package/dist/data/runtime/csv.js +51 -0
- package/dist/data/runtime/csv.js.map +1 -0
- package/dist/data/runtime/errors.d.ts +22 -0
- package/dist/data/runtime/errors.js +101 -0
- package/dist/data/runtime/errors.js.map +1 -0
- package/dist/data/runtime/execute.d.ts +11 -0
- package/dist/data/runtime/execute.js +358 -0
- package/dist/data/runtime/execute.js.map +1 -0
- package/dist/data/runtime/receipts.d.ts +13 -0
- package/dist/data/runtime/receipts.js +38 -0
- package/dist/data/runtime/receipts.js.map +1 -0
- package/dist/data/schemas/catalog.v1.json +73 -0
- package/dist/data/schemas/core-receipt.v1.json +117 -0
- package/dist/data/schemas/describe.v1.json +24 -0
- package/dist/data/schemas/discovery.v1.json +130 -0
- package/dist/data/schemas/doctor.v1.json +40 -0
- package/dist/data/schemas/error.v1.json +48 -0
- package/dist/data/schemas/manifest.v1.json +174 -0
- package/dist/data/schemas/run-request.v1.json +37 -0
- package/dist/data/schemas/run-result.v1.json +77 -0
- package/dist/data/schemas.d.ts +27 -0
- package/dist/data/schemas.js +69 -0
- package/dist/data/schemas.js.map +1 -0
- package/dist/env.js.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/http.js.map +1 -1
- package/dist/kb/config.js.map +1 -1
- package/dist/kb/pipeline-health.js.map +1 -1
- package/dist/research/orchestration.js +54 -7
- package/dist/research/orchestration.js.map +1 -1
- package/dist/research/workspace/acquisition.js.map +1 -1
- package/dist/research/workspace/audit-bundle.js +7 -2
- package/dist/research/workspace/audit-bundle.js.map +1 -1
- package/dist/research/workspace/broker.js.map +1 -1
- package/dist/research/workspace/constants.js.map +1 -1
- package/dist/research/workspace/credentials.d.ts +3 -0
- package/dist/research/workspace/credentials.js +20 -3
- package/dist/research/workspace/credentials.js.map +1 -1
- package/dist/research/workspace/data-evidence-adapter.d.ts +60 -0
- package/dist/research/workspace/data-evidence-adapter.js +314 -0
- package/dist/research/workspace/data-evidence-adapter.js.map +1 -0
- package/dist/research/workspace/discovery-status.js +10 -7
- package/dist/research/workspace/discovery-status.js.map +1 -1
- package/dist/research/workspace/discovery.js +12 -11
- package/dist/research/workspace/discovery.js.map +1 -1
- package/dist/research/workspace/evidence-ledger.d.ts +8 -1
- package/dist/research/workspace/evidence-ledger.js +46 -2
- package/dist/research/workspace/evidence-ledger.js.map +1 -1
- package/dist/research/workspace/evidence.d.ts +31 -0
- package/dist/research/workspace/evidence.js +77 -0
- package/dist/research/workspace/evidence.js.map +1 -1
- package/dist/research/workspace/executor.js.map +1 -1
- package/dist/research/workspace/external-skills.d.ts +49 -49
- package/dist/research/workspace/external-skills.js.map +1 -1
- package/dist/research/workspace/platform-capabilities.js.map +1 -1
- package/dist/research/workspace/preflight.d.ts +4 -4
- package/dist/research/workspace/preflight.js +33 -8
- package/dist/research/workspace/preflight.js.map +1 -1
- package/dist/research/workspace/projects.js.map +1 -1
- package/dist/research/workspace/publication.js.map +1 -1
- package/dist/research/workspace/research-policy-wizard.js.map +1 -1
- package/dist/research/workspace/research-policy.js.map +1 -1
- package/dist/research/workspace/runtime.d.ts +7 -0
- package/dist/research/workspace/runtime.js +77 -20
- package/dist/research/workspace/runtime.js.map +1 -1
- package/dist/research/workspace/sanitization.js.map +1 -1
- package/dist/research/workspace/schemas.js +1 -1
- package/dist/research/workspace/schemas.js.map +1 -1
- package/dist/research/workspace/scientific-design.js.map +1 -1
- package/dist/research/workspace/scientific-review.js.map +1 -1
- package/dist/research/workspace/setup-catalog.d.ts +9 -9
- package/dist/research/workspace/setup-catalog.js +2 -2
- package/dist/research/workspace/setup-catalog.js.map +1 -1
- package/dist/research/workspace/setup-declarative.js.map +1 -1
- package/dist/research/workspace/setup-instructions.d.ts +42 -0
- package/dist/research/workspace/setup-instructions.js +413 -0
- package/dist/research/workspace/setup-instructions.js.map +1 -0
- package/dist/research/workspace/setup-invocation.js.map +1 -1
- package/dist/research/workspace/setup-wizard.js +7 -0
- package/dist/research/workspace/setup-wizard.js.map +1 -1
- package/dist/research/workspace/setup.d.ts +18 -15
- package/dist/research/workspace/setup.js +71 -3
- package/dist/research/workspace/setup.js.map +1 -1
- package/dist/research/workspace/workspace.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,566 @@
|
|
|
1
|
+
import { DATA_MANIFEST_SCHEMA_VERSION } from "../contracts.js";
|
|
2
|
+
import { DataRuntimeError } from "../runtime/errors.js";
|
|
3
|
+
import { EPA_EIS_COMMON_SEARCHES, EPA_EIS_RECORDS_INPUT_SCHEMA, EPA_EIS_RECORDS_OUTPUT_SCHEMA, } from "./epa-eis-records.schemas.js";
|
|
4
|
+
const PROVIDER_ORIGIN = "https://cdxapps.epa.gov";
|
|
5
|
+
const SEARCH_PATH = "/cdx-enepa-II/public/action/eis/search";
|
|
6
|
+
const COMMON_SEARCH_SET = new Set(EPA_EIS_COMMON_SEARCHES);
|
|
7
|
+
export const epaEisRecordsConnector = {
|
|
8
|
+
schemaVersion: DATA_MANIFEST_SCHEMA_VERSION,
|
|
9
|
+
capabilityId: "epa.eis-records",
|
|
10
|
+
capabilityVersion: "1.0.0",
|
|
11
|
+
minimumCliVersion: "0.0.55",
|
|
12
|
+
provider: {
|
|
13
|
+
providerId: "epa-eis-database",
|
|
14
|
+
name: "U.S. Environmental Protection Agency EIS Database",
|
|
15
|
+
},
|
|
16
|
+
sourceCategory: "environmental-review-governance-records",
|
|
17
|
+
endpoints: [
|
|
18
|
+
{
|
|
19
|
+
endpointId: "epa-eis-database",
|
|
20
|
+
baseUrl: PROVIDER_ORIGIN,
|
|
21
|
+
pathPrefixes: ["/cdx-enepa-II/public/action/eis/"],
|
|
22
|
+
allowedMethods: ["GET"],
|
|
23
|
+
allowedContentTypes: ["text/html", "application/xhtml+xml"],
|
|
24
|
+
},
|
|
25
|
+
],
|
|
26
|
+
license: {
|
|
27
|
+
name: "U.S. EPA public information",
|
|
28
|
+
url: "https://cdxapps.epa.gov/cdx-enepa-II/public/action/eis/search",
|
|
29
|
+
restrictions: [
|
|
30
|
+
"Preserve EPA EIS Database provenance and links when reusing record metadata.",
|
|
31
|
+
"Document availability cues do not establish that linked files were downloaded or reviewed.",
|
|
32
|
+
"Database metadata does not itself determine NEPA adequacy, legal sufficiency, environmental effects, or policy responsibility.",
|
|
33
|
+
],
|
|
34
|
+
},
|
|
35
|
+
credentials: [],
|
|
36
|
+
limits: {
|
|
37
|
+
timeoutMs: 60_000,
|
|
38
|
+
maxRequestBytes: 16_384,
|
|
39
|
+
maxResponseBytes: 20_000_000,
|
|
40
|
+
maxPages: 10,
|
|
41
|
+
maxRecords: 500,
|
|
42
|
+
maxRetries: 3,
|
|
43
|
+
maxRetryDelayMs: 60_000,
|
|
44
|
+
maxRedirects: 1,
|
|
45
|
+
},
|
|
46
|
+
diagnostics: { static: true, live: false },
|
|
47
|
+
freshness: {
|
|
48
|
+
kind: "provider-current",
|
|
49
|
+
description: "Records reflect the selected EPA EIS Database result pages at request time and may change as EPA updates the database.",
|
|
50
|
+
},
|
|
51
|
+
limitations: [
|
|
52
|
+
"The capability parses the current submissionsTable HTML surface rather than a versioned JSON API; provider markup changes fail closed.",
|
|
53
|
+
"Common searches and explicit UI-created search URLs expose only the provider result surface, which can be sparse, stale, or capped at 500 records.",
|
|
54
|
+
"An empty result is specific to the selected search page and is not proof that no EIS record exists.",
|
|
55
|
+
"The capability returns metadata and document-availability cues but does not fetch or assess linked documents.",
|
|
56
|
+
],
|
|
57
|
+
discovery: {
|
|
58
|
+
source: {
|
|
59
|
+
maintainedBy: "United States Environmental Protection Agency",
|
|
60
|
+
summary: "Official EPA EIS Database result metadata for Environmental Impact Statement submissions.",
|
|
61
|
+
description: "The EPA EIS Database publishes searchable NEPA/EIS submission rows including title, CEQ and provider identifiers, document type, dates, agencies, state, detail pages, and document availability cues.",
|
|
62
|
+
coverage: {
|
|
63
|
+
geographic: "United States federal Environmental Impact Statement records represented by EPA.",
|
|
64
|
+
temporal: "Database-specific historical and current coverage exposed by the selected search.",
|
|
65
|
+
granularity: "One row in the official EPA EIS Database submissions result table.",
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
summary: "Retrieve bounded official EPA EIS Database result-table metadata.",
|
|
69
|
+
description: "This capability retrieves one or more reviewed common-search or explicit official search pages, parses their submissions tables, deduplicates records, and preserves page-level provenance.",
|
|
70
|
+
provides: [
|
|
71
|
+
"Four official common-search routes: last week, open comment, last 60 days issued, and last 30 days published.",
|
|
72
|
+
"Exact official EIS Database search URLs copied from the provider UI after strict origin and path validation.",
|
|
73
|
+
"Title, CEQ number, unique ID, document type, EPA comment-letter and Federal Register dates, agencies, state, detail URL, and download cues.",
|
|
74
|
+
],
|
|
75
|
+
doesNotProvide: [
|
|
76
|
+
"EIS document bodies, download verification, document parsing, environmental-effects analysis, or cross-record synthesis.",
|
|
77
|
+
"Legal sufficiency, NEPA adequacy, agency compliance, policy responsibility, causality, or report conclusions.",
|
|
78
|
+
"Proof that a bounded or empty search is exhaustive of EPA, CEQ, agency, or real-world EIS records.",
|
|
79
|
+
],
|
|
80
|
+
selectionHints: [
|
|
81
|
+
"Use a common search for current provider-defined queues such as open-comment or recently published EIS records.",
|
|
82
|
+
"Use an explicit search URL only after constructing a precise project or historical query in the official EPA EIS Database UI.",
|
|
83
|
+
"Treat HTML-structure drift as a blocked fetch, and distinguish it from a provider page that explicitly reports zero items.",
|
|
84
|
+
"Acquire and review linked documents in a separately governed artifact workflow before making substantive claims.",
|
|
85
|
+
],
|
|
86
|
+
typicalUseCases: [
|
|
87
|
+
"Inventory EIS records currently open for comment.",
|
|
88
|
+
"Retrieve recent or UI-filtered project EIS metadata for an evidence-acquisition plan.",
|
|
89
|
+
],
|
|
90
|
+
sourceDocumentation: [
|
|
91
|
+
{
|
|
92
|
+
title: "EPA Environmental Impact Statement Database",
|
|
93
|
+
url: "https://cdxapps.epa.gov/cdx-enepa-II/public/action/eis/search",
|
|
94
|
+
},
|
|
95
|
+
],
|
|
96
|
+
},
|
|
97
|
+
operations: [
|
|
98
|
+
{
|
|
99
|
+
operationId: "search",
|
|
100
|
+
operationVersion: "1.0.0",
|
|
101
|
+
summary: "Fetch and parse bounded official EPA EIS Database result pages.",
|
|
102
|
+
description: "Retrieves caller-ordered common searches followed by explicit official search URLs, parses submissionsTable rows, deduplicates by official identifiers, and reports truncation or later-search failure explicitly.",
|
|
103
|
+
inputSchema: EPA_EIS_RECORDS_INPUT_SCHEMA,
|
|
104
|
+
outputSchema: EPA_EIS_RECORDS_OUTPUT_SCHEMA,
|
|
105
|
+
execute: executeEpaEisSearch,
|
|
106
|
+
},
|
|
107
|
+
],
|
|
108
|
+
};
|
|
109
|
+
async function executeEpaEisSearch(context) {
|
|
110
|
+
const plan = normalizeSearchPlan(context.input);
|
|
111
|
+
const executablePlan = plan.slice(0, context.limits.maxPages);
|
|
112
|
+
const records = [];
|
|
113
|
+
const recordIds = new Set();
|
|
114
|
+
const pages = [];
|
|
115
|
+
const observations = [];
|
|
116
|
+
const warnings = [
|
|
117
|
+
"EPA EIS Database rows are official metadata, not a determination of EIS adequacy, legal sufficiency, effects, or policy responsibility.",
|
|
118
|
+
];
|
|
119
|
+
let stopReason = "completed";
|
|
120
|
+
let failedSearch = null;
|
|
121
|
+
let failure;
|
|
122
|
+
for (let index = 0; index < executablePlan.length; index += 1) {
|
|
123
|
+
const planned = executablePlan[index];
|
|
124
|
+
if (!planned)
|
|
125
|
+
continue;
|
|
126
|
+
try {
|
|
127
|
+
const response = await context.http.request({
|
|
128
|
+
endpointId: "epa-eis-database",
|
|
129
|
+
method: "GET",
|
|
130
|
+
path: planned.path,
|
|
131
|
+
query: planned.query,
|
|
132
|
+
});
|
|
133
|
+
const parsed = parseEisHtml(response.text(), planned.url);
|
|
134
|
+
validateParsedPage(parsed);
|
|
135
|
+
observations.push({ ...response.observation, sourceId: `search:${index + 1}` });
|
|
136
|
+
pages.push({
|
|
137
|
+
searchNumber: index + 1,
|
|
138
|
+
sourceKind: planned.sourceKind,
|
|
139
|
+
commonSearch: planned.commonSearch,
|
|
140
|
+
requestedUrl: planned.url,
|
|
141
|
+
providerResultCount: parsed.providerResultCount,
|
|
142
|
+
recordCount: parsed.records.length,
|
|
143
|
+
responseBytes: response.observation.responseBytes,
|
|
144
|
+
responseDigest: response.observation.responseDigest,
|
|
145
|
+
});
|
|
146
|
+
if (parsed.invalidRowCount > 0) {
|
|
147
|
+
warnings.push(`EPA EIS search ${index + 1} skipped ${parsed.invalidRowCount} malformed table row(s).`);
|
|
148
|
+
}
|
|
149
|
+
let capHitInsidePage = false;
|
|
150
|
+
for (const record of parsed.records) {
|
|
151
|
+
if (recordIds.has(record.recordId))
|
|
152
|
+
continue;
|
|
153
|
+
if (records.length >= context.limits.maxRecords) {
|
|
154
|
+
capHitInsidePage = true;
|
|
155
|
+
break;
|
|
156
|
+
}
|
|
157
|
+
recordIds.add(record.recordId);
|
|
158
|
+
records.push(record);
|
|
159
|
+
}
|
|
160
|
+
const laterSearchExists = index + 1 < plan.length;
|
|
161
|
+
const providerSurfaceTruncated = parsed.providerResultCount !== null && parsed.providerResultCount > parsed.records.length;
|
|
162
|
+
if (records.length >= context.limits.maxRecords &&
|
|
163
|
+
(capHitInsidePage || laterSearchExists || providerSurfaceTruncated)) {
|
|
164
|
+
stopReason = "max-records";
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
if (pages.length === 0)
|
|
170
|
+
throw normalizeProviderFailure(error);
|
|
171
|
+
failedSearch = index + 1;
|
|
172
|
+
failure = error;
|
|
173
|
+
stopReason = "partial";
|
|
174
|
+
break;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
if (failedSearch === null && stopReason === "completed" && plan.length > executablePlan.length) {
|
|
178
|
+
stopReason = "max-pages";
|
|
179
|
+
}
|
|
180
|
+
if (failedSearch === null && stopReason === "completed" && records.length === 0) {
|
|
181
|
+
stopReason = "no-results";
|
|
182
|
+
}
|
|
183
|
+
const partial = failedSearch !== null;
|
|
184
|
+
const truncated = stopReason === "max-pages" || stopReason === "max-records";
|
|
185
|
+
if (truncated) {
|
|
186
|
+
warnings.push("The EPA EIS result stopped at an explicit search-page or record limit.");
|
|
187
|
+
}
|
|
188
|
+
if (records.length === 0 && !partial) {
|
|
189
|
+
warnings.push("The selected EPA EIS search pages returned no parsed records; this is not evidence that no EIS records exist.");
|
|
190
|
+
}
|
|
191
|
+
const errors = partial
|
|
192
|
+
? [
|
|
193
|
+
{
|
|
194
|
+
code: "partial-result",
|
|
195
|
+
message: "A later EPA EIS search page could not be retrieved or validated.",
|
|
196
|
+
retryable: failure instanceof DataRuntimeError ? (failure.options.retryable ?? false) : false,
|
|
197
|
+
userActionRequired: false,
|
|
198
|
+
details: {
|
|
199
|
+
missingSearches: [`search:${failedSearch}`],
|
|
200
|
+
causeCode: failure instanceof DataRuntimeError ? failure.code : "provider-response-invalid",
|
|
201
|
+
},
|
|
202
|
+
},
|
|
203
|
+
]
|
|
204
|
+
: [];
|
|
205
|
+
return {
|
|
206
|
+
status: partial ? "partial" : "success",
|
|
207
|
+
data: {
|
|
208
|
+
source: {
|
|
209
|
+
providerId: "epa-eis-database",
|
|
210
|
+
endpoint: SEARCH_PATH,
|
|
211
|
+
interpretationBoundary: "Official EIS metadata and document cues only; no legal, environmental-effects, adequacy, or policy conclusion.",
|
|
212
|
+
},
|
|
213
|
+
query: {
|
|
214
|
+
commonSearches: plan
|
|
215
|
+
.filter((item) => item.sourceKind === "common-search")
|
|
216
|
+
.map((item) => item.commonSearch),
|
|
217
|
+
searchUrls: plan
|
|
218
|
+
.filter((item) => item.sourceKind === "explicit-search-url")
|
|
219
|
+
.map((item) => item.url),
|
|
220
|
+
},
|
|
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: [`search:${failedSearch}`] }] }
|
|
233
|
+
: {}),
|
|
234
|
+
},
|
|
235
|
+
warnings,
|
|
236
|
+
errors,
|
|
237
|
+
observations,
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
function normalizeSearchPlan(input) {
|
|
241
|
+
const commonSearches = input.commonSearches ?? [];
|
|
242
|
+
const searchUrls = input.searchUrls ?? [];
|
|
243
|
+
if (commonSearches.length === 0 && searchUrls.length === 0) {
|
|
244
|
+
throw new DataRuntimeError("invalid-request", "EPA EIS search requires at least one common search or explicit official search URL.");
|
|
245
|
+
}
|
|
246
|
+
const plan = [];
|
|
247
|
+
for (const commonSearch of commonSearches) {
|
|
248
|
+
if (!COMMON_SEARCH_SET.has(commonSearch)) {
|
|
249
|
+
throw new DataRuntimeError("invalid-request", `Unsupported EPA EIS common search: ${commonSearch}.`);
|
|
250
|
+
}
|
|
251
|
+
const url = new URL(SEARCH_PATH, PROVIDER_ORIGIN);
|
|
252
|
+
url.searchParams.append("search", "");
|
|
253
|
+
url.searchParams.append("commonSearch", commonSearch);
|
|
254
|
+
plan.push({
|
|
255
|
+
sourceKind: "common-search",
|
|
256
|
+
commonSearch,
|
|
257
|
+
url: url.toString(),
|
|
258
|
+
path: SEARCH_PATH,
|
|
259
|
+
query: searchParamsToQuery(url.searchParams),
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
for (const value of searchUrls) {
|
|
263
|
+
plan.push(normalizeExplicitSearchUrl(value));
|
|
264
|
+
}
|
|
265
|
+
const seen = new Set();
|
|
266
|
+
return plan.filter((item) => {
|
|
267
|
+
if (seen.has(item.url))
|
|
268
|
+
return false;
|
|
269
|
+
seen.add(item.url);
|
|
270
|
+
return true;
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
function normalizeExplicitSearchUrl(value) {
|
|
274
|
+
let url;
|
|
275
|
+
try {
|
|
276
|
+
url = new URL(value.trim());
|
|
277
|
+
}
|
|
278
|
+
catch {
|
|
279
|
+
throw new DataRuntimeError("invalid-request", "EPA EIS searchUrls must contain valid URLs.");
|
|
280
|
+
}
|
|
281
|
+
if (url.protocol !== "https:" ||
|
|
282
|
+
url.hostname !== "cdxapps.epa.gov" ||
|
|
283
|
+
url.port !== "" ||
|
|
284
|
+
url.username !== "" ||
|
|
285
|
+
url.password !== "" ||
|
|
286
|
+
url.pathname !== SEARCH_PATH ||
|
|
287
|
+
url.hash !== "") {
|
|
288
|
+
throw new DataRuntimeError("invalid-request", `EPA EIS explicit search URLs must use ${PROVIDER_ORIGIN}${SEARCH_PATH} without credentials, a custom port, or a fragment.`);
|
|
289
|
+
}
|
|
290
|
+
return {
|
|
291
|
+
sourceKind: "explicit-search-url",
|
|
292
|
+
commonSearch: null,
|
|
293
|
+
url: url.toString(),
|
|
294
|
+
path: SEARCH_PATH,
|
|
295
|
+
query: searchParamsToQuery(url.searchParams),
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
function searchParamsToQuery(searchParams) {
|
|
299
|
+
const query = {};
|
|
300
|
+
for (const [name, value] of searchParams) {
|
|
301
|
+
const current = query[name];
|
|
302
|
+
if (current === undefined)
|
|
303
|
+
query[name] = value;
|
|
304
|
+
else if (Array.isArray(current))
|
|
305
|
+
current.push(value);
|
|
306
|
+
else
|
|
307
|
+
query[name] = [current, value];
|
|
308
|
+
}
|
|
309
|
+
return query;
|
|
310
|
+
}
|
|
311
|
+
function parseEisHtml(html, sourcePageUrl) {
|
|
312
|
+
const state = {
|
|
313
|
+
tableFound: false,
|
|
314
|
+
tableDepth: 0,
|
|
315
|
+
inTbody: false,
|
|
316
|
+
inRow: false,
|
|
317
|
+
inCell: false,
|
|
318
|
+
inPageBanner: false,
|
|
319
|
+
pageBannerParts: [],
|
|
320
|
+
rowCells: [],
|
|
321
|
+
cellTextParts: [],
|
|
322
|
+
cellLinks: [],
|
|
323
|
+
cellOnclicks: [],
|
|
324
|
+
activeHref: null,
|
|
325
|
+
activeLinkTextParts: [],
|
|
326
|
+
records: [],
|
|
327
|
+
invalidRowCount: 0,
|
|
328
|
+
};
|
|
329
|
+
for (const token of html.match(/<!--[\s\S]*?-->|<![^>]*>|<\/?[^>]+>|[^<]+/g) ?? []) {
|
|
330
|
+
if (token.startsWith("<!--") || token.startsWith("<!"))
|
|
331
|
+
continue;
|
|
332
|
+
if (!token.startsWith("<")) {
|
|
333
|
+
handleText(state, token);
|
|
334
|
+
continue;
|
|
335
|
+
}
|
|
336
|
+
const tag = parseTag(token);
|
|
337
|
+
if (!tag)
|
|
338
|
+
continue;
|
|
339
|
+
if (tag.closing)
|
|
340
|
+
handleEndTag(state, tag.name, sourcePageUrl);
|
|
341
|
+
else
|
|
342
|
+
handleStartTag(state, tag.name, tag.attributes);
|
|
343
|
+
}
|
|
344
|
+
const pageBanner = normalizeText(state.pageBannerParts.join(" "));
|
|
345
|
+
return {
|
|
346
|
+
tableFound: state.tableFound,
|
|
347
|
+
pageBanner,
|
|
348
|
+
providerResultCount: resultCountFromBanner(pageBanner),
|
|
349
|
+
records: state.records,
|
|
350
|
+
invalidRowCount: state.invalidRowCount,
|
|
351
|
+
};
|
|
352
|
+
}
|
|
353
|
+
function handleStartTag(state, name, attributes) {
|
|
354
|
+
if (name === "span" && classNames(attributes.class).includes("pagebanner")) {
|
|
355
|
+
state.inPageBanner = true;
|
|
356
|
+
}
|
|
357
|
+
if (name === "table" && state.tableDepth === 0 && attributes.id === "submissionsTable") {
|
|
358
|
+
state.tableFound = true;
|
|
359
|
+
state.tableDepth = 1;
|
|
360
|
+
return;
|
|
361
|
+
}
|
|
362
|
+
if (state.tableDepth === 0)
|
|
363
|
+
return;
|
|
364
|
+
if (name === "table")
|
|
365
|
+
state.tableDepth += 1;
|
|
366
|
+
else if (name === "tbody")
|
|
367
|
+
state.inTbody = true;
|
|
368
|
+
else if (name === "tr" && state.inTbody) {
|
|
369
|
+
state.inRow = true;
|
|
370
|
+
state.rowCells = [];
|
|
371
|
+
}
|
|
372
|
+
else if (name === "td" && state.inRow) {
|
|
373
|
+
state.inCell = true;
|
|
374
|
+
state.cellTextParts = [];
|
|
375
|
+
state.cellLinks = [];
|
|
376
|
+
state.cellOnclicks = [];
|
|
377
|
+
}
|
|
378
|
+
else if (name === "a" && state.inCell) {
|
|
379
|
+
const href = attributes.href;
|
|
380
|
+
if (href) {
|
|
381
|
+
state.activeHref = href;
|
|
382
|
+
state.activeLinkTextParts = [];
|
|
383
|
+
}
|
|
384
|
+
if (attributes.onclick)
|
|
385
|
+
state.cellOnclicks.push(attributes.onclick);
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
function handleEndTag(state, name, sourcePageUrl) {
|
|
389
|
+
if (name === "span" && state.inPageBanner)
|
|
390
|
+
state.inPageBanner = false;
|
|
391
|
+
if (name === "a" && state.activeHref !== null) {
|
|
392
|
+
const url = resolveProviderLink(state.activeHref, sourcePageUrl);
|
|
393
|
+
if (url) {
|
|
394
|
+
state.cellLinks.push({
|
|
395
|
+
url,
|
|
396
|
+
text: normalizeText(state.activeLinkTextParts.join(" ")),
|
|
397
|
+
});
|
|
398
|
+
}
|
|
399
|
+
state.activeHref = null;
|
|
400
|
+
state.activeLinkTextParts = [];
|
|
401
|
+
}
|
|
402
|
+
if (state.tableDepth === 0)
|
|
403
|
+
return;
|
|
404
|
+
if (name === "td" && state.inCell) {
|
|
405
|
+
state.rowCells.push({
|
|
406
|
+
text: normalizeText(state.cellTextParts.join(" ")),
|
|
407
|
+
links: state.cellLinks,
|
|
408
|
+
onclicks: state.cellOnclicks,
|
|
409
|
+
});
|
|
410
|
+
state.inCell = false;
|
|
411
|
+
}
|
|
412
|
+
else if (name === "tr" && state.inRow) {
|
|
413
|
+
const record = recordFromCells(state.rowCells, sourcePageUrl);
|
|
414
|
+
if (record)
|
|
415
|
+
state.records.push(record);
|
|
416
|
+
else if (state.rowCells.length > 0)
|
|
417
|
+
state.invalidRowCount += 1;
|
|
418
|
+
state.inRow = false;
|
|
419
|
+
state.rowCells = [];
|
|
420
|
+
}
|
|
421
|
+
else if (name === "tbody")
|
|
422
|
+
state.inTbody = false;
|
|
423
|
+
else if (name === "table")
|
|
424
|
+
state.tableDepth -= 1;
|
|
425
|
+
}
|
|
426
|
+
function handleText(state, text) {
|
|
427
|
+
if (state.inPageBanner)
|
|
428
|
+
state.pageBannerParts.push(text);
|
|
429
|
+
if (state.inCell)
|
|
430
|
+
state.cellTextParts.push(text);
|
|
431
|
+
if (state.activeHref !== null)
|
|
432
|
+
state.activeLinkTextParts.push(text);
|
|
433
|
+
}
|
|
434
|
+
function recordFromCells(cells, sourcePageUrl) {
|
|
435
|
+
if (cells.length < 9)
|
|
436
|
+
return null;
|
|
437
|
+
const title = cells[0]?.text ?? "";
|
|
438
|
+
const ceqNumber = nullableText(cells[1]?.text);
|
|
439
|
+
const documentType = nullableText(cells[2]?.text);
|
|
440
|
+
const epaCommentLetterDate = nullableText(cells[3]?.text);
|
|
441
|
+
const federalRegisterDate = nullableText(cells[4]?.text);
|
|
442
|
+
const uniqueIdentificationNumber = nullableText(cells[5]?.text);
|
|
443
|
+
const leadAgency = nullableText(cells[6]?.text);
|
|
444
|
+
const federalCooperatingAgencies = nullableText(cells[7]?.text);
|
|
445
|
+
const state = nullableText(cells[8]?.text);
|
|
446
|
+
const detailUrl = cells[0]?.links[0]?.url ?? null;
|
|
447
|
+
const recordId = ceqNumber ?? uniqueIdentificationNumber ?? detailUrl ?? nullableText(title);
|
|
448
|
+
if (!recordId)
|
|
449
|
+
return null;
|
|
450
|
+
const downloadCell = cells[9];
|
|
451
|
+
return {
|
|
452
|
+
recordId,
|
|
453
|
+
title,
|
|
454
|
+
ceqNumber,
|
|
455
|
+
uniqueIdentificationNumber,
|
|
456
|
+
documentType,
|
|
457
|
+
epaCommentLetterDate,
|
|
458
|
+
federalRegisterDate,
|
|
459
|
+
leadAgency,
|
|
460
|
+
federalCooperatingAgencies,
|
|
461
|
+
state,
|
|
462
|
+
detailUrl,
|
|
463
|
+
downloadLinks: downloadCell?.links ?? [],
|
|
464
|
+
downloadDocumentIds: downloadIds(downloadCell?.onclicks ?? []),
|
|
465
|
+
sourcePageUrl,
|
|
466
|
+
};
|
|
467
|
+
}
|
|
468
|
+
function validateParsedPage(page) {
|
|
469
|
+
if (!page.tableFound) {
|
|
470
|
+
throw providerInvalid("EPA EIS response did not contain the expected submissionsTable.");
|
|
471
|
+
}
|
|
472
|
+
if (page.providerResultCount !== null &&
|
|
473
|
+
page.providerResultCount > 0 &&
|
|
474
|
+
page.records.length === 0) {
|
|
475
|
+
throw providerInvalid("EPA EIS response reported result rows but none could be parsed from submissionsTable.");
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
function parseTag(token) {
|
|
479
|
+
const match = /^<\s*(\/?)\s*([^\s/>]+)/.exec(token);
|
|
480
|
+
if (!match?.[2])
|
|
481
|
+
return null;
|
|
482
|
+
const name = match[2].toLowerCase();
|
|
483
|
+
const attributes = {};
|
|
484
|
+
const attributeText = token.slice(match[0].length, token.length - 1);
|
|
485
|
+
const pattern = /([^\s=/>]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'=<>`]+)))?/g;
|
|
486
|
+
for (const attribute of attributeText.matchAll(pattern)) {
|
|
487
|
+
const key = attribute[1]?.toLowerCase();
|
|
488
|
+
if (!key)
|
|
489
|
+
continue;
|
|
490
|
+
attributes[key] = decodeHtmlEntities(attribute[2] ?? attribute[3] ?? attribute[4] ?? "");
|
|
491
|
+
}
|
|
492
|
+
return { name, closing: match[1] === "/", attributes };
|
|
493
|
+
}
|
|
494
|
+
function classNames(value) {
|
|
495
|
+
return (value ?? "")
|
|
496
|
+
.split(/\s+/)
|
|
497
|
+
.map((item) => item.trim())
|
|
498
|
+
.filter(Boolean);
|
|
499
|
+
}
|
|
500
|
+
function resultCountFromBanner(value) {
|
|
501
|
+
const match = /(\d+)\s+items?\s+found/i.exec(value);
|
|
502
|
+
return match?.[1] ? Number(match[1]) : null;
|
|
503
|
+
}
|
|
504
|
+
function downloadIds(onclicks) {
|
|
505
|
+
const ids = [];
|
|
506
|
+
for (const onclick of onclicks) {
|
|
507
|
+
for (const match of onclick.matchAll(/'([0-9;]+)'/g)) {
|
|
508
|
+
const value = match[1];
|
|
509
|
+
if (!value?.includes(";"))
|
|
510
|
+
continue;
|
|
511
|
+
ids.push(...value.split(";").filter(Boolean));
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
return [...new Set(ids)];
|
|
515
|
+
}
|
|
516
|
+
function resolveProviderLink(value, sourcePageUrl) {
|
|
517
|
+
try {
|
|
518
|
+
if (value.trim() === "#")
|
|
519
|
+
return sourcePageUrl.split("#", 1)[0] ?? sourcePageUrl;
|
|
520
|
+
const url = new URL(value, sourcePageUrl);
|
|
521
|
+
return url.protocol === "https:" ? url.toString() : null;
|
|
522
|
+
}
|
|
523
|
+
catch {
|
|
524
|
+
return null;
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
function nullableText(value) {
|
|
528
|
+
const normalized = normalizeText(value ?? "");
|
|
529
|
+
return normalized || null;
|
|
530
|
+
}
|
|
531
|
+
function normalizeText(value) {
|
|
532
|
+
return decodeHtmlEntities(value).replace(/\s+/g, " ").trim();
|
|
533
|
+
}
|
|
534
|
+
function decodeHtmlEntities(value) {
|
|
535
|
+
const named = {
|
|
536
|
+
amp: "&",
|
|
537
|
+
apos: "'",
|
|
538
|
+
gt: ">",
|
|
539
|
+
lt: "<",
|
|
540
|
+
nbsp: " ",
|
|
541
|
+
quot: '"',
|
|
542
|
+
};
|
|
543
|
+
return value.replace(/&(#x[0-9a-f]+|#\d+|[a-z]+);/gi, (entity, code) => {
|
|
544
|
+
if (code.startsWith("#x") || code.startsWith("#X")) {
|
|
545
|
+
const point = Number.parseInt(code.slice(2), 16);
|
|
546
|
+
return validCodePoint(point) ? String.fromCodePoint(point) : entity;
|
|
547
|
+
}
|
|
548
|
+
if (code.startsWith("#")) {
|
|
549
|
+
const point = Number.parseInt(code.slice(1), 10);
|
|
550
|
+
return validCodePoint(point) ? String.fromCodePoint(point) : entity;
|
|
551
|
+
}
|
|
552
|
+
return named[code.toLowerCase()] ?? entity;
|
|
553
|
+
});
|
|
554
|
+
}
|
|
555
|
+
function validCodePoint(value) {
|
|
556
|
+
return Number.isInteger(value) && value >= 0 && value <= 0x10ffff;
|
|
557
|
+
}
|
|
558
|
+
function normalizeProviderFailure(error) {
|
|
559
|
+
if (error instanceof DataRuntimeError)
|
|
560
|
+
return error;
|
|
561
|
+
return new DataRuntimeError("provider-response-invalid", "The EPA EIS Database response could not be retrieved, parsed, or validated.");
|
|
562
|
+
}
|
|
563
|
+
function providerInvalid(message) {
|
|
564
|
+
return new DataRuntimeError("provider-response-invalid", message);
|
|
565
|
+
}
|
|
566
|
+
//# sourceMappingURL=epa-eis-records.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"epa-eis-records.js","sourceRoot":"","sources":["../../../src/data/connectors/epa-eis-records.ts"],"names":[],"mappings":"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"}
|