@tiangong-ai/cli 0.0.51 → 0.0.55

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 +68 -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 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/data/commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { DataConnectorDefinition } from "../contracts.js";
2
+ export declare const airNowHourlyObservationsConnector: DataConnectorDefinition;
@@ -0,0 +1,522 @@
1
+ import { DATA_MANIFEST_SCHEMA_VERSION } from "../contracts.js";
2
+ import { CsvParseError, parseCsvRows } from "../runtime/csv.js";
3
+ import { DataRuntimeError } from "../runtime/errors.js";
4
+ import { AIRNOW_HOURLY_INPUT_SCHEMA, AIRNOW_HOURLY_OUTPUT_SCHEMA, } from "./airnow-hourly-observations.schemas.js";
5
+ const MAX_HOURS = 168;
6
+ const OFFICIAL_HEADERS = [
7
+ "AQSID",
8
+ "SiteName",
9
+ "Status",
10
+ "EPARegion",
11
+ "Latitude",
12
+ "Longitude",
13
+ "Elevation",
14
+ "GMTOffset",
15
+ "CountryCode",
16
+ "StateName",
17
+ "ValidDate",
18
+ "ValidTime",
19
+ "DataSource",
20
+ "ReportingArea_PipeDelimited",
21
+ "OZONE_AQI",
22
+ "PM10_AQI",
23
+ "PM25_AQI",
24
+ "NO2_AQI",
25
+ "OZONE_Measured",
26
+ "PM10_Measured",
27
+ "PM25_Measured",
28
+ "NO2_Measured",
29
+ "PM25",
30
+ "PM25_Unit",
31
+ "OZONE",
32
+ "OZONE_Unit",
33
+ "NO2",
34
+ "NO2_Unit",
35
+ "CO",
36
+ "CO_Unit",
37
+ "SO2",
38
+ "SO2_Unit",
39
+ "PM10",
40
+ "PM10_Unit",
41
+ ];
42
+ const AQI_COLUMNS = {
43
+ OZONE: "OZONE_AQI",
44
+ PM10: "PM10_AQI",
45
+ PM25: "PM25_AQI",
46
+ NO2: "NO2_AQI",
47
+ };
48
+ const MEASURED_COLUMNS = {
49
+ OZONE: "OZONE_Measured",
50
+ PM10: "PM10_Measured",
51
+ PM25: "PM25_Measured",
52
+ NO2: "NO2_Measured",
53
+ };
54
+ const AQI_KINDS = {
55
+ OZONE: "nowcast-aqi",
56
+ PM10: "nowcast-aqi",
57
+ PM25: "nowcast-aqi",
58
+ NO2: "hourly-aqi",
59
+ };
60
+ class AirNowFileValidationError extends Error {
61
+ code;
62
+ constructor(code, message) {
63
+ super(message);
64
+ this.code = code;
65
+ this.name = "AirNowFileValidationError";
66
+ }
67
+ }
68
+ export const airNowHourlyObservationsConnector = {
69
+ schemaVersion: DATA_MANIFEST_SCHEMA_VERSION,
70
+ capabilityId: "airnow.hourly-observations",
71
+ capabilityVersion: "1.0.0",
72
+ minimumCliVersion: "0.0.55",
73
+ provider: {
74
+ providerId: "airnow",
75
+ name: "U.S. EPA AirNow",
76
+ },
77
+ sourceCategory: "environmental-observations",
78
+ endpoints: [
79
+ {
80
+ endpointId: "airnow-files",
81
+ baseUrl: "https://files.airnowtech.org",
82
+ pathPrefixes: ["/airnow/"],
83
+ allowedMethods: ["GET"],
84
+ allowedContentTypes: ["application/octet-stream", "text/csv", "text/plain"],
85
+ },
86
+ ],
87
+ license: {
88
+ name: "AirNow Data Use Guidelines",
89
+ url: "https://docs.airnowapi.org/faq",
90
+ restrictions: [
91
+ "AirNow observations are preliminary, not fully verified, and subject to change.",
92
+ "Provide downstream users with the most current AirNow data available.",
93
+ "Use official AQS or AirData records for regulatory decision making.",
94
+ ],
95
+ },
96
+ credentials: [],
97
+ limits: {
98
+ timeoutMs: 45_000,
99
+ maxRequestBytes: 1_024,
100
+ maxResponseBytes: 20_000_000,
101
+ maxPages: MAX_HOURS,
102
+ maxRecords: 100_000,
103
+ maxRetries: 3,
104
+ maxRetryDelayMs: 120_000,
105
+ maxRedirects: 2,
106
+ },
107
+ diagnostics: { static: true, live: false },
108
+ freshness: {
109
+ kind: "hourly-revisable",
110
+ description: "Files are updated hourly and recent hourly files may be revised for completeness and quality.",
111
+ },
112
+ limitations: [
113
+ "AirNow file-product observations are not a regulatory-grade replacement for EPA AQS data.",
114
+ "The connector does not geocode, interpret AQI health effects, or combine other sources.",
115
+ "Not every monitoring site reports every pollutant in every hour.",
116
+ ],
117
+ discovery: {
118
+ source: {
119
+ maintainedBy: "U.S. Environmental Protection Agency with participating AirNow agencies",
120
+ summary: "Preliminary hourly ambient-air observations distributed through official AirNow files.",
121
+ description: "The HourlyAQObs product aggregates reporting-site observations into one UTC-hour file. Site and pollutant availability varies, and recent values may be revised.",
122
+ coverage: {
123
+ geographic: "Monitoring sites present in each official HourlyAQObs file; availability varies by location, hour, and pollutant.",
124
+ temporal: "UTC-hour file products with recent observations subject to revision and occasional missing files.",
125
+ granularity: "One monitoring-site, UTC-hour, and pollutant record.",
126
+ },
127
+ },
128
+ summary: "Retrieve bounded AirNow monitoring-site observations by UTC hour, area, and pollutant.",
129
+ description: "This capability selects a bounded inclusive UTC-hour window, fetches the corresponding HourlyAQObs files, validates them independently, and emits normalized observations with file lineage.",
130
+ provides: [
131
+ "Normalized site-hour records for CO, NO2, OZONE, PM10, PM25, and SO2.",
132
+ "Available AQI and raw-concentration fields from the HourlyAQObs product.",
133
+ "Per-file status and source-file lineage, including explicit partial coverage.",
134
+ ],
135
+ doesNotProvide: [
136
+ "Air-quality forecasts, exposure estimates, health advice, or causal interpretation.",
137
+ "Cross-source fusion, geocoding, interpolation, or coverage guarantees for every site and hour.",
138
+ "Regulatory-grade AQS records suitable for compliance decisions.",
139
+ ],
140
+ selectionHints: [
141
+ "Choose this capability for recent, site-level hourly monitoring observations when an explicit bounding box and pollutant list are available.",
142
+ "Choose EPA AQS or AirData instead when verified regulatory records are required.",
143
+ "Treat missing or invalid hourly files as partial coverage rather than as zero pollution.",
144
+ ],
145
+ typicalUseCases: [
146
+ "Collect recent PM2.5 and ozone observations for a regional monitoring window.",
147
+ "Audit which AirNow hourly source files contributed records to a downstream analysis.",
148
+ ],
149
+ sourceDocumentation: [
150
+ {
151
+ title: "AirNow Hourly Data Fact Sheet",
152
+ url: "https://docs.airnowapi.org/docs/HourlyAQObsFactSheet.pdf",
153
+ },
154
+ {
155
+ title: "AirNow FAQ and Data Use Guidelines",
156
+ url: "https://docs.airnowapi.org/faq",
157
+ },
158
+ ],
159
+ },
160
+ operations: [
161
+ {
162
+ operationId: "fetch-hourly",
163
+ operationVersion: "1.0.0",
164
+ summary: "Fetch bounded AirNow HourlyAQObs files and normalize site-hour-pollutant observations.",
165
+ description: "Plans one official HourlyAQObs file per inclusive UTC hour, validates each file, filters records by WGS84 bounding box and pollutant, and preserves usable records when another file is missing or invalid.",
166
+ inputSchema: AIRNOW_HOURLY_INPUT_SCHEMA,
167
+ outputSchema: AIRNOW_HOURLY_OUTPUT_SCHEMA,
168
+ execute: executeAirNowHourly,
169
+ },
170
+ ],
171
+ };
172
+ async function executeAirNowHourly(context) {
173
+ const input = normalizeInput(context.input, context.limits.maxPages);
174
+ const hours = enumerateHours(input.startDateTimeUtc, input.endDateTimeUtc);
175
+ const files = [];
176
+ const records = [];
177
+ const observations = [];
178
+ const missingFiles = [];
179
+ let truncated = false;
180
+ for (const hourUtc of hours) {
181
+ const sourceFile = sourceFileForHour(hourUtc);
182
+ try {
183
+ const response = await context.http.request({
184
+ endpointId: "airnow-files",
185
+ method: "GET",
186
+ path: sourceFile,
187
+ });
188
+ observations.push({ ...response.observation, sourceId: sourceFile });
189
+ try {
190
+ const parsed = normalizeFile({
191
+ text: response.text(),
192
+ hourUtc,
193
+ sourceFile,
194
+ input,
195
+ remainingRecords: Math.max(0, context.limits.maxRecords - records.length),
196
+ });
197
+ records.push(...parsed.records);
198
+ truncated ||= parsed.truncated;
199
+ files.push({
200
+ hourUtc,
201
+ sourceFile,
202
+ status: "ok",
203
+ responseBytes: response.observation.responseBytes,
204
+ inputRows: parsed.inputRows,
205
+ emittedRecords: parsed.records.length,
206
+ issues: parsed.issues,
207
+ });
208
+ }
209
+ catch (error) {
210
+ const normalized = error instanceof AirNowFileValidationError
211
+ ? error
212
+ : new AirNowFileValidationError("invalid-csv-value", "The AirNow file could not be normalized.");
213
+ files.push({
214
+ hourUtc,
215
+ sourceFile,
216
+ status: "invalid",
217
+ responseBytes: response.observation.responseBytes,
218
+ inputRows: 0,
219
+ emittedRecords: 0,
220
+ issues: [normalized.message],
221
+ errorCode: normalized.code,
222
+ });
223
+ missingFiles.push(sourceFile);
224
+ }
225
+ }
226
+ catch (error) {
227
+ const missing = isMissingResponse(error);
228
+ const code = error instanceof DataRuntimeError ? error.code : "network-failed";
229
+ files.push({
230
+ hourUtc,
231
+ sourceFile,
232
+ status: missing ? "missing" : "failed",
233
+ responseBytes: 0,
234
+ inputRows: 0,
235
+ emittedRecords: 0,
236
+ issues: [
237
+ missing ? "The hourly source file was not available." : "The hourly fetch failed.",
238
+ ],
239
+ errorCode: missing ? "source-file-missing" : code,
240
+ });
241
+ missingFiles.push(sourceFile);
242
+ }
243
+ }
244
+ const partial = missingFiles.length > 0;
245
+ const errors = partial
246
+ ? [
247
+ {
248
+ code: "partial-result",
249
+ message: "One or more AirNow hourly files were unavailable or invalid.",
250
+ retryable: files.some((file) => file.status === "failed" || file.status === "missing"),
251
+ userActionRequired: false,
252
+ details: { missingFiles },
253
+ },
254
+ ]
255
+ : [];
256
+ return {
257
+ status: partial ? "partial" : "success",
258
+ data: {
259
+ source: {
260
+ providerId: "airnow",
261
+ product: "HourlyAQObs",
262
+ preliminary: true,
263
+ regulatoryUse: false,
264
+ },
265
+ request: {
266
+ ...input,
267
+ hourCount: hours.length,
268
+ },
269
+ files,
270
+ records,
271
+ },
272
+ summary: {
273
+ recordCount: records.length,
274
+ pageCount: 0,
275
+ chunkCount: files.length,
276
+ truncated,
277
+ completeness: partial ? "partial" : "complete",
278
+ ...(partial ? { missing: [{ kind: "file", identifiers: missingFiles }] } : {}),
279
+ },
280
+ warnings: [
281
+ "AirNow observations are preliminary and must not be used as regulatory-grade AQS data.",
282
+ ...(truncated ? ["The normalized record set reached the requested record limit."] : []),
283
+ ],
284
+ errors,
285
+ observations,
286
+ };
287
+ }
288
+ function normalizeInput(input, maxHours) {
289
+ const start = parseExactUtcHour(input.startDateTimeUtc, "startDateTimeUtc");
290
+ const end = parseExactUtcHour(input.endDateTimeUtc, "endDateTimeUtc");
291
+ if (end.getTime() < start.getTime()) {
292
+ throw new DataRuntimeError("invalid-request", "AirNow endDateTimeUtc must not precede startDateTimeUtc.");
293
+ }
294
+ if (input.boundingBox.minLongitude >= input.boundingBox.maxLongitude ||
295
+ input.boundingBox.minLatitude >= input.boundingBox.maxLatitude) {
296
+ throw new DataRuntimeError("invalid-request", "AirNow bounding-box minimums must be lower than maximums.");
297
+ }
298
+ const hourCount = Math.floor((end.getTime() - start.getTime()) / 3_600_000) + 1;
299
+ if (hourCount > Math.min(MAX_HOURS, maxHours)) {
300
+ throw new DataRuntimeError("invalid-request", "The AirNow UTC window exceeds the effective hourly-file limit.", { details: { hourCount, maxHours: Math.min(MAX_HOURS, maxHours) } });
301
+ }
302
+ return {
303
+ startDateTimeUtc: start.toISOString().replace(".000Z", "Z"),
304
+ endDateTimeUtc: end.toISOString().replace(".000Z", "Z"),
305
+ boundingBox: { ...input.boundingBox },
306
+ parameters: [...input.parameters].sort(codePointOrder),
307
+ };
308
+ }
309
+ function parseExactUtcHour(value, field) {
310
+ const parsed = new Date(value);
311
+ if (!/^\d{4}-\d{2}-\d{2}T\d{2}:00:00Z$/.test(value) ||
312
+ !Number.isFinite(parsed.getTime()) ||
313
+ parsed.toISOString().replace(".000Z", "Z") !== value) {
314
+ throw new DataRuntimeError("invalid-request", `${field} must be an exact valid UTC hour in YYYY-MM-DDTHH:00:00Z form.`);
315
+ }
316
+ return parsed;
317
+ }
318
+ function enumerateHours(start, end) {
319
+ const output = [];
320
+ for (let time = Date.parse(start); time <= Date.parse(end); time += 3_600_000) {
321
+ output.push(new Date(time).toISOString().replace(".000Z", "Z"));
322
+ }
323
+ return output;
324
+ }
325
+ function sourceFileForHour(hourUtc) {
326
+ const compact = hourUtc.replace(/[-:TZ]/g, "").slice(0, 10);
327
+ return `/airnow/${compact.slice(0, 4)}/${compact.slice(0, 8)}/HourlyAQObs_${compact}.dat`;
328
+ }
329
+ function normalizeFile(input) {
330
+ let table;
331
+ try {
332
+ table = parseCsvRows(input.text);
333
+ }
334
+ catch (error) {
335
+ throw new AirNowFileValidationError("invalid-csv-value", error instanceof CsvParseError
336
+ ? error.message.replace(/^The CSV/, "The AirNow CSV")
337
+ : "The AirNow CSV could not be parsed.");
338
+ }
339
+ if (table.length === 0) {
340
+ throw new AirNowFileValidationError("invalid-csv-header", "The AirNow file is empty.");
341
+ }
342
+ const headers = table[0].map((value, index) => index === 0 ? value.replace(/^\uFEFF/, "").trim() : value.trim());
343
+ const missingHeaders = OFFICIAL_HEADERS.filter((header) => !headers.includes(header));
344
+ if (missingHeaders.length > 0) {
345
+ throw new AirNowFileValidationError("invalid-csv-header", `The AirNow CSV is missing required headers: ${missingHeaders.join(", ")}.`);
346
+ }
347
+ const issues = [];
348
+ const records = [];
349
+ let truncated = false;
350
+ const rows = table.slice(1).filter((row) => row.length > 1 || row[0]?.trim());
351
+ for (let index = 0; index < rows.length; index += 1) {
352
+ const values = rows[index];
353
+ if (values.length !== headers.length) {
354
+ addIssue(issues, `Row ${index + 2} has ${values.length} values for ${headers.length} headers.`);
355
+ continue;
356
+ }
357
+ const row = Object.fromEntries(headers.map((header, column) => [header, values[column] ?? ""]));
358
+ const normalized = normalizeRow(row, index + 2, input);
359
+ for (const issue of normalized.issues)
360
+ addIssue(issues, issue);
361
+ for (const record of normalized.records) {
362
+ if (records.length >= input.remainingRecords) {
363
+ truncated = true;
364
+ continue;
365
+ }
366
+ records.push(record);
367
+ }
368
+ }
369
+ return { records, inputRows: rows.length, issues, truncated };
370
+ }
371
+ function normalizeRow(row, line, file) {
372
+ const issues = [];
373
+ const aqsid = cleanText(row.AQSID);
374
+ let latitude;
375
+ let longitude;
376
+ try {
377
+ latitude = requiredNumber(row.Latitude, "Latitude");
378
+ longitude = requiredNumber(row.Longitude, "Longitude");
379
+ }
380
+ catch {
381
+ return { records: [], issues: [`Row ${line} has invalid coordinates.`] };
382
+ }
383
+ if (latitude < -90 || latitude > 90 || longitude < -180 || longitude > 180) {
384
+ return { records: [], issues: [`Row ${line} has coordinates outside valid ranges.`] };
385
+ }
386
+ const box = file.input.boundingBox;
387
+ if (longitude < box.minLongitude ||
388
+ longitude > box.maxLongitude ||
389
+ latitude < box.minLatitude ||
390
+ latitude > box.maxLatitude) {
391
+ return { records: [], issues };
392
+ }
393
+ const parsedObservedAtUtc = parseAirNowDateTime(row.ValidDate, row.ValidTime);
394
+ const observedAtUtc = parsedObservedAtUtc ?? file.hourUtc;
395
+ if (!parsedObservedAtUtc) {
396
+ issues.push(`Row ${line} has an invalid ValidDate or ValidTime; used the source-file hour ${file.hourUtc}.`);
397
+ }
398
+ if (observedAtUtc < file.input.startDateTimeUtc || observedAtUtc > file.input.endDateTimeUtc) {
399
+ return { records: [], issues };
400
+ }
401
+ const records = [];
402
+ for (const parameter of file.input.parameters) {
403
+ const rawConcentration = tolerantOptionalNumber(row[parameter], parameter, line, issues);
404
+ const aqiColumn = AQI_COLUMNS[parameter];
405
+ const measuredColumn = MEASURED_COLUMNS[parameter];
406
+ const aqiValue = aqiColumn
407
+ ? tolerantOptionalNumber(row[aqiColumn], aqiColumn, line, issues)
408
+ : null;
409
+ const measured = measuredColumn
410
+ ? tolerantOptionalMeasured(row[measuredColumn], measuredColumn, line, issues)
411
+ : null;
412
+ if (rawConcentration === null && aqiValue === null && measured === null)
413
+ continue;
414
+ const unit = cleanText(row[`${parameter}_Unit`]) || null;
415
+ records.push({
416
+ aqsid,
417
+ siteName: cleanText(row.SiteName),
418
+ status: cleanText(row.Status),
419
+ epaRegion: cleanText(row.EPARegion),
420
+ latitude,
421
+ longitude,
422
+ countryCode: cleanText(row.CountryCode),
423
+ stateName: cleanText(row.StateName),
424
+ observedAtUtc,
425
+ dataSource: cleanText(row.DataSource),
426
+ reportingAreas: cleanText(row.ReportingArea_PipeDelimited)
427
+ .split("|")
428
+ .map((item) => item.trim())
429
+ .filter(Boolean),
430
+ parameterName: parameter,
431
+ aqiValue,
432
+ aqiKind: AQI_KINDS[parameter] ?? null,
433
+ rawConcentration,
434
+ unit,
435
+ measured,
436
+ sourceFile: file.sourceFile,
437
+ });
438
+ }
439
+ return { records, issues };
440
+ }
441
+ function parseAirNowDateTime(dateValue, timeValue) {
442
+ const dateMatch = cleanText(dateValue).match(/^(\d{2})\/(\d{2})\/(\d{2}|\d{4})$/);
443
+ const timeMatch = cleanText(timeValue).match(/^(\d{2}):(\d{2})(?::(\d{2}))?$/);
444
+ if (!dateMatch || !timeMatch)
445
+ return null;
446
+ const yearRaw = Number(dateMatch[3]);
447
+ const year = yearRaw < 100 ? 2000 + yearRaw : yearRaw;
448
+ const month = Number(dateMatch[1]);
449
+ const day = Number(dateMatch[2]);
450
+ const hour = Number(timeMatch[1]);
451
+ const minute = Number(timeMatch[2]);
452
+ const second = Number(timeMatch[3] ?? 0);
453
+ const parsed = new Date(Date.UTC(year, month - 1, day, hour, minute, second));
454
+ if (parsed.getUTCFullYear() !== year ||
455
+ parsed.getUTCMonth() !== month - 1 ||
456
+ parsed.getUTCDate() !== day ||
457
+ parsed.getUTCHours() !== hour ||
458
+ parsed.getUTCMinutes() !== minute ||
459
+ parsed.getUTCSeconds() !== second ||
460
+ minute !== 0 ||
461
+ second !== 0) {
462
+ return null;
463
+ }
464
+ return parsed.toISOString().replace(".000Z", "Z");
465
+ }
466
+ function requiredNumber(value, field) {
467
+ const parsed = optionalNumber(value, field);
468
+ if (parsed === null)
469
+ throw new Error(`${field} is required.`);
470
+ return parsed;
471
+ }
472
+ function optionalNumber(value, field) {
473
+ const text = cleanText(value);
474
+ if (!text)
475
+ return null;
476
+ const parsed = Number(text);
477
+ if (!Number.isFinite(parsed))
478
+ throw new Error(`${field} must be numeric.`);
479
+ return parsed;
480
+ }
481
+ function optionalMeasured(value, field) {
482
+ const text = cleanText(value);
483
+ if (!text)
484
+ return null;
485
+ if (text === "0")
486
+ return false;
487
+ if (text === "1")
488
+ return true;
489
+ throw new Error(`${field} must be 0 or 1.`);
490
+ }
491
+ function tolerantOptionalNumber(value, field, line, issues) {
492
+ try {
493
+ return optionalNumber(value, field);
494
+ }
495
+ catch {
496
+ addIssue(issues, `Row ${line} has an invalid ${field} value; treated it as missing.`);
497
+ return null;
498
+ }
499
+ }
500
+ function tolerantOptionalMeasured(value, field, line, issues) {
501
+ try {
502
+ return optionalMeasured(value, field);
503
+ }
504
+ catch {
505
+ addIssue(issues, `Row ${line} has an invalid ${field} value; treated it as missing.`);
506
+ return null;
507
+ }
508
+ }
509
+ function cleanText(value) {
510
+ return (value ?? "").trim().replace(/\s+/g, " ");
511
+ }
512
+ function addIssue(issues, issue) {
513
+ if (issues.length < 100)
514
+ issues.push(issue);
515
+ }
516
+ function isMissingResponse(error) {
517
+ return error instanceof DataRuntimeError && error.options.details?.status === 404;
518
+ }
519
+ function codePointOrder(left, right) {
520
+ return left < right ? -1 : left > right ? 1 : 0;
521
+ }
522
+ //# sourceMappingURL=airnow-hourly-observations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"airnow-hourly-observations.js","sourceRoot":"","sources":["../../../src/data/connectors/airnow-hourly-observations.ts"],"names":[],"mappings":"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"}