@tiangong-ai/cli 0.0.50 → 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 (218) hide show
  1. package/AGENTS.md +22 -2
  2. package/README.md +200 -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 +71 -11
  161. package/dist/research/orchestration.js.map +1 -1
  162. package/dist/research/workspace/acquisition.js +70 -5
  163. package/dist/research/workspace/acquisition.js.map +1 -1
  164. package/dist/research/workspace/audit-bundle.js +7 -2
  165. package/dist/research/workspace/audit-bundle.js.map +1 -1
  166. package/dist/research/workspace/broker.js.map +1 -1
  167. package/dist/research/workspace/constants.js.map +1 -1
  168. package/dist/research/workspace/credentials.d.ts +3 -0
  169. package/dist/research/workspace/credentials.js +20 -3
  170. package/dist/research/workspace/credentials.js.map +1 -1
  171. package/dist/research/workspace/data-evidence-adapter.d.ts +60 -0
  172. package/dist/research/workspace/data-evidence-adapter.js +314 -0
  173. package/dist/research/workspace/data-evidence-adapter.js.map +1 -0
  174. package/dist/research/workspace/discovery-status.js +10 -7
  175. package/dist/research/workspace/discovery-status.js.map +1 -1
  176. package/dist/research/workspace/discovery.js +12 -11
  177. package/dist/research/workspace/discovery.js.map +1 -1
  178. package/dist/research/workspace/evidence-ledger.d.ts +8 -1
  179. package/dist/research/workspace/evidence-ledger.js +46 -4
  180. package/dist/research/workspace/evidence-ledger.js.map +1 -1
  181. package/dist/research/workspace/evidence.d.ts +31 -0
  182. package/dist/research/workspace/evidence.js +77 -0
  183. package/dist/research/workspace/evidence.js.map +1 -1
  184. package/dist/research/workspace/executor.js.map +1 -1
  185. package/dist/research/workspace/external-skills.d.ts +49 -49
  186. package/dist/research/workspace/external-skills.js.map +1 -1
  187. package/dist/research/workspace/platform-capabilities.js.map +1 -1
  188. package/dist/research/workspace/preflight.d.ts +4 -4
  189. package/dist/research/workspace/preflight.js +33 -8
  190. package/dist/research/workspace/preflight.js.map +1 -1
  191. package/dist/research/workspace/projects.js +203 -76
  192. package/dist/research/workspace/projects.js.map +1 -1
  193. package/dist/research/workspace/publication.js.map +1 -1
  194. package/dist/research/workspace/research-policy-wizard.js.map +1 -1
  195. package/dist/research/workspace/research-policy.js.map +1 -1
  196. package/dist/research/workspace/runtime.d.ts +7 -0
  197. package/dist/research/workspace/runtime.js +82 -23
  198. package/dist/research/workspace/runtime.js.map +1 -1
  199. package/dist/research/workspace/sanitization.js.map +1 -1
  200. package/dist/research/workspace/schemas.js +1 -1
  201. package/dist/research/workspace/schemas.js.map +1 -1
  202. package/dist/research/workspace/scientific-design.js.map +1 -1
  203. package/dist/research/workspace/scientific-review.js.map +1 -1
  204. package/dist/research/workspace/setup-catalog.d.ts +9 -9
  205. package/dist/research/workspace/setup-catalog.js +2 -2
  206. package/dist/research/workspace/setup-catalog.js.map +1 -1
  207. package/dist/research/workspace/setup-declarative.js.map +1 -1
  208. package/dist/research/workspace/setup-instructions.d.ts +42 -0
  209. package/dist/research/workspace/setup-instructions.js +413 -0
  210. package/dist/research/workspace/setup-instructions.js.map +1 -0
  211. package/dist/research/workspace/setup-invocation.js.map +1 -1
  212. package/dist/research/workspace/setup-wizard.js +7 -0
  213. package/dist/research/workspace/setup-wizard.js.map +1 -1
  214. package/dist/research/workspace/setup.d.ts +18 -15
  215. package/dist/research/workspace/setup.js +68 -3
  216. package/dist/research/workspace/setup.js.map +1 -1
  217. package/dist/research/workspace/workspace.js.map +1 -1
  218. package/package.json +3 -3
@@ -0,0 +1,467 @@
1
+ import { DATA_MANIFEST_SCHEMA_VERSION } from "../contracts.js";
2
+ import { DataRuntimeError } from "../runtime/errors.js";
3
+ import { USBR_PROJECT_RECORDS_INPUT_SCHEMA, USBR_PROJECT_RECORDS_OUTPUT_SCHEMA, } from "./usbr-project-records.schemas.js";
4
+ const PROVIDER_ORIGIN = "https://www.usbr.gov";
5
+ const DEFAULT_MAX_LINKED_RECORDS = 50;
6
+ export const usbrProjectRecordsConnector = {
7
+ schemaVersion: DATA_MANIFEST_SCHEMA_VERSION,
8
+ capabilityId: "usbr.project-records",
9
+ capabilityVersion: "1.0.0",
10
+ minimumCliVersion: "0.0.55",
11
+ provider: {
12
+ providerId: "usbr-project-records",
13
+ name: "U.S. Bureau of Reclamation project and program pages",
14
+ },
15
+ sourceCategory: "water-project-document-inventory",
16
+ endpoints: [
17
+ {
18
+ endpointId: "usbr-project-pages",
19
+ baseUrl: PROVIDER_ORIGIN,
20
+ pathPrefixes: ["/"],
21
+ allowedMethods: ["GET"],
22
+ allowedContentTypes: ["text/html", "application/xhtml+xml", "text/plain"],
23
+ },
24
+ ],
25
+ license: {
26
+ name: "U.S. Bureau of Reclamation public information",
27
+ url: PROVIDER_ORIGIN,
28
+ restrictions: [
29
+ "Preserve the supplied USBR page URL and link-level provenance when reusing this inventory.",
30
+ "A linked record is an availability cue and does not establish that the linked document was downloaded, reviewed, or remains current.",
31
+ "Project-page content does not itself determine operating policy, legal compliance, environmental effects, or governance responsibility.",
32
+ ],
33
+ },
34
+ credentials: [],
35
+ limits: {
36
+ timeoutMs: 60_000,
37
+ maxRequestBytes: 16_384,
38
+ maxResponseBytes: 20_000_000,
39
+ maxPages: 10,
40
+ maxRecords: 1_000,
41
+ maxRetries: 3,
42
+ maxRetryDelayMs: 60_000,
43
+ maxRedirects: 1,
44
+ },
45
+ diagnostics: { static: true, live: false },
46
+ freshness: {
47
+ kind: "provider-current",
48
+ description: "Page metadata and links reflect each supplied official USBR page at request time and may change without notice.",
49
+ },
50
+ limitations: [
51
+ "The capability inventories only caller-supplied pages on the exact www.usbr.gov origin; it is not USBR-wide search or crawling.",
52
+ "Only same-origin links present in fetched HTML are returned, in document order and subject to explicit page, record, byte, and timeout limits.",
53
+ "Linked files are not downloaded, hashed, parsed, or checked for continued availability by this operation.",
54
+ "Missing links or sparse metadata can reflect page design, provider changes, or bounded selection and are not proof that records do not exist.",
55
+ ],
56
+ discovery: {
57
+ source: {
58
+ maintainedBy: "United States Bureau of Reclamation",
59
+ summary: "Official USBR project and program web pages plus their same-origin linked-record inventory.",
60
+ description: "The Bureau of Reclamation publishes project, program, planning, operations, and public-information pages across www.usbr.gov, often linking reports, notices, spreadsheets, and related HTML records.",
61
+ coverage: {
62
+ geographic: "Bureau of Reclamation projects, regions, basins, and programs represented by the exact caller-supplied pages.",
63
+ temporal: "Current page response and linked-record surface at retrieval time; historical coverage is page-specific.",
64
+ granularity: "One supplied official page plus up to the selected number of same-origin links on that page.",
65
+ },
66
+ },
67
+ summary: "Inventory supplied official USBR pages and their bounded same-origin record links.",
68
+ description: "This capability fetches exact caller-supplied www.usbr.gov pages, preserves response provenance, and emits normalized page and link records without following or downloading the links.",
69
+ provides: [
70
+ "Page title, meta description, response digest, response byte length, content type, ETag, and last-modified metadata when supplied.",
71
+ "Deduplicated same-origin linked records with anchor text, document-order index, and extension-derived document type.",
72
+ "Explicit page, global-record, per-page-link, failure, and completeness signaling.",
73
+ ],
74
+ doesNotProvide: [
75
+ "USBR-wide search, site ranking, recursive crawling, cross-origin links, or proof of record completeness.",
76
+ "Linked-document bodies, download verification, document parsing, OCR, or substantive evidence extraction.",
77
+ "Legal meaning, policy interpretation, operating conclusions, environmental-effects analysis, or report-ready synthesis.",
78
+ ],
79
+ selectionHints: [
80
+ "Use this capability after an official USBR project or program URL has been grounded from another source or supplied by the user.",
81
+ "Use USBR RISE instead when the task requires operational time-series catalog items or values rather than project-page records.",
82
+ "Treat linked records as acquisition candidates; fetch and review needed documents in a separately governed artifact workflow.",
83
+ "If a per-page link cap is reached, refine the source page set or raise the approved cap before claiming coverage.",
84
+ ],
85
+ typicalUseCases: [
86
+ "Build a bounded inventory of reports and notices linked from known USBR project pages.",
87
+ "Capture page-level provenance and candidate documents before an evidence review.",
88
+ ],
89
+ sourceDocumentation: [
90
+ {
91
+ title: "U.S. Bureau of Reclamation",
92
+ url: PROVIDER_ORIGIN,
93
+ },
94
+ ],
95
+ },
96
+ operations: [
97
+ {
98
+ operationId: "fetch",
99
+ operationVersion: "1.0.0",
100
+ summary: "Fetch supplied USBR pages and inventory bounded same-origin links.",
101
+ description: "Retrieves caller-ordered exact www.usbr.gov URLs, records page response provenance, extracts title and description metadata, and emits same-origin links without following them.",
102
+ inputSchema: USBR_PROJECT_RECORDS_INPUT_SCHEMA,
103
+ outputSchema: USBR_PROJECT_RECORDS_OUTPUT_SCHEMA,
104
+ execute: executeUsbrProjectRecordsFetch,
105
+ },
106
+ ],
107
+ };
108
+ async function executeUsbrProjectRecordsFetch(context) {
109
+ const input = context.input;
110
+ const plan = normalizePlan(input.urls);
111
+ const maxLinkedRecordsPerPage = input.maxLinkedRecordsPerPage ?? DEFAULT_MAX_LINKED_RECORDS;
112
+ const executablePlan = plan.slice(0, context.limits.maxPages);
113
+ const pages = [];
114
+ const records = [];
115
+ const observations = [];
116
+ const warnings = [
117
+ "USBR linked records are inventory candidates only; linked content was not downloaded or reviewed.",
118
+ ];
119
+ let stopReason = "completed";
120
+ let perPageLinkCapHit = false;
121
+ let failedPage = null;
122
+ let failure;
123
+ for (let index = 0; index < executablePlan.length; index += 1) {
124
+ const planned = executablePlan[index];
125
+ if (!planned)
126
+ continue;
127
+ if (records.length >= context.limits.maxRecords) {
128
+ stopReason = "max-records";
129
+ break;
130
+ }
131
+ try {
132
+ const response = await context.http.request({
133
+ endpointId: "usbr-project-pages",
134
+ method: "GET",
135
+ path: planned.path,
136
+ query: planned.query,
137
+ });
138
+ const parsed = parseProjectPage(response.text(), planned.url);
139
+ const remainingAfterPage = context.limits.maxRecords - records.length - 1;
140
+ const selectedCount = Math.min(parsed.links.length, maxLinkedRecordsPerPage, Math.max(0, remainingAfterPage));
141
+ const selectedLinks = parsed.links.slice(0, selectedCount);
142
+ const pageRecords = [
143
+ projectPageRecord(planned.url, parsed, selectedLinks, response),
144
+ ...selectedLinks.map((link, linkIndex) => linkedRecord(link, planned.url, linkIndex + 1)),
145
+ ];
146
+ records.push(...pageRecords);
147
+ observations.push({ ...response.observation, sourceId: `url:${index + 1}` });
148
+ pages.push({
149
+ pageNumber: index + 1,
150
+ url: planned.url,
151
+ title: parsed.title,
152
+ linkCount: selectedLinks.length,
153
+ recordCount: pageRecords.length,
154
+ responseBytes: response.observation.responseBytes,
155
+ responseDigest: response.observation.responseDigest,
156
+ });
157
+ const limitedByRecordCap = selectedLinks.length < Math.min(parsed.links.length, maxLinkedRecordsPerPage);
158
+ if (limitedByRecordCap ||
159
+ (records.length >= context.limits.maxRecords && index + 1 < plan.length)) {
160
+ stopReason = "max-records";
161
+ break;
162
+ }
163
+ if (parsed.links.length > maxLinkedRecordsPerPage)
164
+ perPageLinkCapHit = true;
165
+ }
166
+ catch (error) {
167
+ if (pages.length === 0)
168
+ throw normalizeProviderFailure(error);
169
+ failedPage = index + 1;
170
+ failure = error;
171
+ stopReason = "partial";
172
+ break;
173
+ }
174
+ }
175
+ if (failedPage === null && stopReason === "completed" && plan.length > executablePlan.length) {
176
+ stopReason = "max-pages";
177
+ }
178
+ else if (failedPage === null && stopReason === "completed" && perPageLinkCapHit) {
179
+ stopReason = "max-linked-records";
180
+ }
181
+ const partial = failedPage !== null;
182
+ const truncated = ["max-pages", "max-records", "max-linked-records"].includes(stopReason);
183
+ if (truncated) {
184
+ warnings.push("The USBR project-record inventory stopped at an explicit page, record, or per-page link limit.");
185
+ }
186
+ const errors = partial
187
+ ? [
188
+ {
189
+ code: "partial-result",
190
+ message: "A later supplied USBR project page could not be retrieved or validated.",
191
+ retryable: failure instanceof DataRuntimeError ? (failure.options.retryable ?? false) : false,
192
+ userActionRequired: false,
193
+ details: {
194
+ missingPages: [`url:${failedPage}`],
195
+ causeCode: failure instanceof DataRuntimeError ? failure.code : "provider-response-invalid",
196
+ },
197
+ },
198
+ ]
199
+ : [];
200
+ return {
201
+ status: partial ? "partial" : "success",
202
+ data: {
203
+ source: {
204
+ providerId: "usbr-project-records",
205
+ endpoint: PROVIDER_ORIGIN,
206
+ interpretationBoundary: "Official page metadata and same-origin link inventory only; linked content and substantive conclusions are outside this operation.",
207
+ },
208
+ query: {
209
+ urls: plan.map((item) => item.url),
210
+ maxLinkedRecordsPerPage,
211
+ },
212
+ pages,
213
+ records,
214
+ stopReason,
215
+ },
216
+ summary: {
217
+ recordCount: records.length,
218
+ pageCount: pages.length,
219
+ chunkCount: 0,
220
+ truncated,
221
+ completeness: partial ? "partial" : "complete",
222
+ ...(partial
223
+ ? { missing: [{ kind: "page", identifiers: [`url:${failedPage}`] }] }
224
+ : {}),
225
+ },
226
+ warnings,
227
+ errors,
228
+ observations,
229
+ };
230
+ }
231
+ function normalizePlan(values) {
232
+ const seen = new Set();
233
+ const plan = [];
234
+ for (const value of values) {
235
+ let url;
236
+ try {
237
+ url = new URL(value.trim());
238
+ }
239
+ catch {
240
+ throw new DataRuntimeError("invalid-request", "USBR project-record urls must be valid URLs.");
241
+ }
242
+ if (url.protocol !== "https:" ||
243
+ url.origin !== PROVIDER_ORIGIN ||
244
+ url.port !== "" ||
245
+ url.username !== "" ||
246
+ url.password !== "" ||
247
+ url.hash !== "") {
248
+ throw new DataRuntimeError("invalid-request", `USBR project-record urls must use the exact ${PROVIDER_ORIGIN} origin without credentials, a custom port, or a fragment.`);
249
+ }
250
+ url.searchParams.sort();
251
+ const canonicalUrl = url.toString();
252
+ if (seen.has(canonicalUrl))
253
+ continue;
254
+ seen.add(canonicalUrl);
255
+ plan.push({
256
+ url: canonicalUrl,
257
+ path: url.pathname,
258
+ query: searchParamsToQuery(url.searchParams),
259
+ });
260
+ }
261
+ return plan;
262
+ }
263
+ function parseProjectPage(html, sourcePageUrl) {
264
+ const state = {
265
+ inTitle: false,
266
+ titleParts: [],
267
+ description: null,
268
+ activeHref: null,
269
+ activeTextParts: [],
270
+ links: [],
271
+ };
272
+ for (const token of html.match(/<!--[\s\S]*?-->|<![^>]*>|<\/?[^>]+>|[^<]+/g) ?? []) {
273
+ if (token.startsWith("<!--") || token.startsWith("<!"))
274
+ continue;
275
+ if (!token.startsWith("<")) {
276
+ if (state.inTitle)
277
+ state.titleParts.push(token);
278
+ if (state.activeHref !== null)
279
+ state.activeTextParts.push(token);
280
+ continue;
281
+ }
282
+ const tag = parseTag(token);
283
+ if (!tag)
284
+ continue;
285
+ if (!tag.closing) {
286
+ if (tag.name === "title")
287
+ state.inTitle = true;
288
+ if (tag.name === "meta" &&
289
+ tag.attributes.name?.toLowerCase() === "description" &&
290
+ state.description === null) {
291
+ state.description = nullableText(tag.attributes.content);
292
+ }
293
+ if (tag.name === "a" && tag.attributes.href) {
294
+ state.activeHref = tag.attributes.href;
295
+ state.activeTextParts = [];
296
+ }
297
+ }
298
+ else {
299
+ if (tag.name === "title")
300
+ state.inTitle = false;
301
+ if (tag.name === "a" && state.activeHref !== null) {
302
+ const resolved = resolveSameOriginLink(state.activeHref, sourcePageUrl);
303
+ if (resolved) {
304
+ state.links.push({
305
+ url: resolved,
306
+ text: normalizeText(state.activeTextParts.join(" ")),
307
+ });
308
+ }
309
+ state.activeHref = null;
310
+ state.activeTextParts = [];
311
+ }
312
+ }
313
+ }
314
+ const uniqueLinks = [];
315
+ const seen = new Set();
316
+ for (const link of state.links) {
317
+ if (link.url === sourcePageUrl || seen.has(link.url))
318
+ continue;
319
+ seen.add(link.url);
320
+ uniqueLinks.push(link);
321
+ }
322
+ return {
323
+ title: normalizeText(state.titleParts.join(" ")) || titleFromUrl(sourcePageUrl),
324
+ summary: state.description,
325
+ links: uniqueLinks,
326
+ };
327
+ }
328
+ function projectPageRecord(url, page, links, response) {
329
+ return {
330
+ recordId: url,
331
+ recordType: "project-page",
332
+ title: page.title,
333
+ summary: page.summary,
334
+ url,
335
+ documentUrl: url,
336
+ documentType: documentType(url),
337
+ sourcePageUrl: null,
338
+ linkIndex: null,
339
+ links,
340
+ contentSha256: response.observation.responseDigest,
341
+ contentByteLength: response.observation.responseBytes,
342
+ contentType: response.safeHeaders["content-type"] ?? response.observation.contentType ?? null,
343
+ lastModified: response.safeHeaders["last-modified"] ?? null,
344
+ etag: response.safeHeaders.etag ?? null,
345
+ };
346
+ }
347
+ function linkedRecord(link, sourcePageUrl, linkIndex) {
348
+ return {
349
+ recordId: link.url,
350
+ recordType: "linked-document",
351
+ title: link.text || titleFromUrl(link.url),
352
+ summary: null,
353
+ url: link.url,
354
+ documentUrl: link.url,
355
+ documentType: documentType(link.url),
356
+ sourcePageUrl,
357
+ linkIndex,
358
+ links: [],
359
+ contentSha256: null,
360
+ contentByteLength: null,
361
+ contentType: null,
362
+ lastModified: null,
363
+ etag: null,
364
+ };
365
+ }
366
+ function resolveSameOriginLink(value, sourcePageUrl) {
367
+ try {
368
+ const url = new URL(value, sourcePageUrl);
369
+ if (url.protocol !== "https:" ||
370
+ url.origin !== PROVIDER_ORIGIN ||
371
+ url.port !== "" ||
372
+ url.username !== "" ||
373
+ url.password !== "") {
374
+ return null;
375
+ }
376
+ url.hash = "";
377
+ return url.toString();
378
+ }
379
+ catch {
380
+ return null;
381
+ }
382
+ }
383
+ function documentType(value) {
384
+ const pathname = new URL(value).pathname.toLowerCase();
385
+ const extension = /\.([a-z0-9]+)$/.exec(pathname)?.[1];
386
+ return extension &&
387
+ ["pdf", "html", "htm", "doc", "docx", "xls", "xlsx", "txt"].includes(extension)
388
+ ? extension
389
+ : "linked-page";
390
+ }
391
+ function titleFromUrl(value) {
392
+ const url = new URL(value);
393
+ const lastSegment = url.pathname.split("/").filter(Boolean).at(-1);
394
+ if (!lastSegment)
395
+ return url.hostname;
396
+ try {
397
+ return decodeURIComponent(lastSegment);
398
+ }
399
+ catch {
400
+ return lastSegment;
401
+ }
402
+ }
403
+ function parseTag(token) {
404
+ const match = /^<\s*(\/?)\s*([^\s/>]+)/.exec(token);
405
+ if (!match?.[2])
406
+ return null;
407
+ const attributes = {};
408
+ const attributeText = token.slice(match[0].length, token.length - 1);
409
+ const pattern = /([^\s=/>]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'=<>`]+)))?/g;
410
+ for (const attribute of attributeText.matchAll(pattern)) {
411
+ const key = attribute[1]?.toLowerCase();
412
+ if (!key)
413
+ continue;
414
+ attributes[key] = decodeHtmlEntities(attribute[2] ?? attribute[3] ?? attribute[4] ?? "");
415
+ }
416
+ return { name: match[2].toLowerCase(), closing: match[1] === "/", attributes };
417
+ }
418
+ function nullableText(value) {
419
+ const normalized = normalizeText(value ?? "");
420
+ return normalized || null;
421
+ }
422
+ function normalizeText(value) {
423
+ return decodeHtmlEntities(value).replace(/\s+/g, " ").trim();
424
+ }
425
+ function decodeHtmlEntities(value) {
426
+ const named = {
427
+ amp: "&",
428
+ apos: "'",
429
+ gt: ">",
430
+ lt: "<",
431
+ nbsp: " ",
432
+ quot: '"',
433
+ };
434
+ return value.replace(/&(#x[0-9a-f]+|#\d+|[a-z]+);/gi, (entity, code) => {
435
+ if (code.startsWith("#x") || code.startsWith("#X")) {
436
+ const point = Number.parseInt(code.slice(2), 16);
437
+ return validCodePoint(point) ? String.fromCodePoint(point) : entity;
438
+ }
439
+ if (code.startsWith("#")) {
440
+ const point = Number.parseInt(code.slice(1), 10);
441
+ return validCodePoint(point) ? String.fromCodePoint(point) : entity;
442
+ }
443
+ return named[code.toLowerCase()] ?? entity;
444
+ });
445
+ }
446
+ function validCodePoint(value) {
447
+ return Number.isInteger(value) && value >= 0 && value <= 0x10ffff;
448
+ }
449
+ function searchParamsToQuery(searchParams) {
450
+ const query = {};
451
+ for (const [name, value] of searchParams) {
452
+ const current = query[name];
453
+ if (current === undefined)
454
+ query[name] = value;
455
+ else if (Array.isArray(current))
456
+ current.push(value);
457
+ else
458
+ query[name] = [current, value];
459
+ }
460
+ return query;
461
+ }
462
+ function normalizeProviderFailure(error) {
463
+ if (error instanceof DataRuntimeError)
464
+ return error;
465
+ return new DataRuntimeError("provider-response-invalid", "The USBR project-page response could not be retrieved, parsed, or validated.");
466
+ }
467
+ //# sourceMappingURL=usbr-project-records.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usbr-project-records.js","sourceRoot":"","sources":["../../../src/data/connectors/usbr-project-records.ts"],"names":[],"mappings":"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"}