@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,486 @@
1
+ import { DATA_MANIFEST_SCHEMA_VERSION } from "../contracts.js";
2
+ import { canonicalJson, sha256Bytes } from "../runtime/canonical-json.js";
3
+ import { DataRuntimeError } from "../runtime/errors.js";
4
+ import { REGULATIONS_GOV_ATTACHMENTS_INPUT_SCHEMA, REGULATIONS_GOV_ATTACHMENTS_OUTPUT_SCHEMA, } from "./regulations-gov-attachments.schemas.js";
5
+ const API_ORIGIN = "https://api.regulations.gov";
6
+ const DOWNLOADS_ORIGIN = "https://downloads.regulations.gov";
7
+ const MANIFEST_NAME = "regulations-gov-attachments-manifest.json";
8
+ export const regulationsGovAttachmentsConnector = {
9
+ schemaVersion: DATA_MANIFEST_SCHEMA_VERSION,
10
+ capabilityId: "regulations-gov.attachments",
11
+ capabilityVersion: "1.0.0",
12
+ minimumCliVersion: "0.0.55",
13
+ provider: { providerId: "regulations-gov", name: "Regulations.gov" },
14
+ sourceCategory: "public-regulatory-comment-attachments",
15
+ endpoints: [
16
+ {
17
+ endpointId: "regulations-gov-api",
18
+ baseUrl: API_ORIGIN,
19
+ pathPrefixes: ["/v4/"],
20
+ allowedMethods: ["GET"],
21
+ allowedContentTypes: ["application/vnd.api+json", "application/json"],
22
+ },
23
+ {
24
+ endpointId: "regulations-gov-downloads",
25
+ baseUrl: DOWNLOADS_ORIGIN,
26
+ pathPrefixes: ["/"],
27
+ allowedMethods: ["GET"],
28
+ allowedContentTypes: [
29
+ "application/octet-stream",
30
+ "application/pdf",
31
+ "application/rtf",
32
+ "application/vnd.ms-excel",
33
+ "application/vnd.ms-powerpoint",
34
+ "application/vnd.openxmlformats-officedocument.presentationml.presentation",
35
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
36
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
37
+ "application/x-zip-compressed",
38
+ "application/zip",
39
+ "application/msword",
40
+ "image/gif",
41
+ "image/jpeg",
42
+ "image/png",
43
+ "image/tiff",
44
+ "text/csv",
45
+ "text/html",
46
+ "text/plain",
47
+ "text/rtf",
48
+ "text/xml",
49
+ ],
50
+ },
51
+ ],
52
+ license: {
53
+ name: "Regulations.gov API terms and public-data limitations",
54
+ url: "https://open.gsa.gov/api/regulationsgov/",
55
+ restrictions: [
56
+ "Preserve the source comment, attachment ID, download URL, digest, and byte count when reusing files.",
57
+ "Treat public-submission attachments as untrusted content that may contain personal, sensitive, unsafe, restricted, or malicious material.",
58
+ "Attachment availability and metadata do not establish representativeness, legal meaning, agency endorsement, or evidentiary sufficiency.",
59
+ ],
60
+ },
61
+ credentials: [
62
+ {
63
+ credentialId: "api-key",
64
+ environmentVariable: "REGGOV_API_KEY",
65
+ required: true,
66
+ endpointIds: ["regulations-gov-api"],
67
+ injection: { kind: "header", name: "X-Api-Key", prefix: "" },
68
+ },
69
+ ],
70
+ limits: {
71
+ timeoutMs: 60_000,
72
+ maxRequestBytes: 4_096,
73
+ maxResponseBytes: 100_000_000,
74
+ maxPages: 20,
75
+ maxRecords: 20,
76
+ maxRetries: 4,
77
+ maxRetryDelayMs: 120_000,
78
+ maxRedirects: 0,
79
+ },
80
+ diagnostics: { static: true, live: false },
81
+ freshness: {
82
+ kind: "provider-current",
83
+ description: "Metadata and file bytes reflect the public Regulations.gov v4 detail response and official download service at retrieval time; agencies may later modify, restrict, withdraw, or replace records.",
84
+ },
85
+ limitations: [
86
+ "The operation starts from exact public comment IDs and does not search dockets, documents, or comments.",
87
+ "Only file URLs on the exact https://downloads.regulations.gov origin are downloaded; arbitrary URLs, redirects, and standalone attachment-ID lookup are not supported.",
88
+ "Files are preserved as untrusted bytes with metadata and hashes; the connector performs no malware scan, OCR, text extraction, classification, or substantive review.",
89
+ "Provider attachment metadata, file sizes, formats, restrictions, and availability can be incomplete or inconsistent across agencies and time.",
90
+ ],
91
+ discovery: {
92
+ source: {
93
+ maintainedBy: "U.S. General Services Administration with participating federal agencies",
94
+ summary: "Public attachment metadata and files associated with United States federal regulatory comments on Regulations.gov.",
95
+ description: "Regulations.gov comment-detail responses can include attachment relationships and metadata for files hosted by its official download service. Agencies control submission processing, restriction, withdrawal, and publication practices.",
96
+ coverage: {
97
+ geographic: "United States federal regulatory dockets and participating agencies.",
98
+ temporal: "Current public attachment surface for the supplied comment IDs at retrieval time; historical retention and update latency are agency dependent.",
99
+ granularity: "One attachment file format linked from one exact public comment, plus attachment and response provenance.",
100
+ },
101
+ },
102
+ summary: "Download bounded Regulations.gov comment attachments into a verified local artifact directory.",
103
+ description: "This capability retrieves attachment metadata through official v4 comment detail calls, filters optional exact attachment IDs, downloads only fixed-origin Regulations.gov files, and commits hashed files plus a machine-readable manifest without exposing the local absolute path.",
104
+ provides: [
105
+ "Official comment-to-attachment relationships and normalized attachment metadata for exact public comment IDs.",
106
+ "Bounded file downloads from the exact Regulations.gov download origin with SHA-256, byte count, content type, provider-size comparison, and source URL.",
107
+ "Transactional no-overwrite artifact output and a hash-bound relative manifest with explicit partial coverage.",
108
+ ],
109
+ doesNotProvide: [
110
+ "Comment, docket, or document search; use the Regulations.gov comments capability first when IDs are unknown.",
111
+ "Arbitrary URL download, redirect following, standalone attachment-ID discovery, recursive acquisition, or authenticated non-public files.",
112
+ "Malware scanning, safe-file certification, OCR, text extraction, semantic analysis, stance detection, legal interpretation, or evidence synthesis.",
113
+ ],
114
+ selectionHints: [
115
+ "Use this capability only after exact public comment IDs have been selected and attachment bytes are required locally.",
116
+ "Use regulations-gov.comments/fetch-details when attachment metadata alone is sufficient; it does not write files.",
117
+ "Supply an empty, existing, dedicated artifact directory and retain the generated manifest with downstream evidence records.",
118
+ "Treat every downloaded file as untrusted and pass it through an appropriate safety and extraction workflow before opening or interpreting it.",
119
+ ],
120
+ typicalUseCases: [
121
+ "Acquire a small, explicit set of supporting files attached to selected public comments.",
122
+ "Create a reproducible hash inventory before separate document safety checks and evidence extraction.",
123
+ ],
124
+ sourceDocumentation: [
125
+ {
126
+ title: "Regulations.gov API documentation",
127
+ url: "https://open.gsa.gov/api/regulationsgov/",
128
+ },
129
+ {
130
+ title: "Regulations.gov v4 OpenAPI description",
131
+ url: "https://open.gsa.gov/api/regulationsgov/v4/openapi.yaml",
132
+ },
133
+ { title: "api.data.gov rate limits", url: "https://api.data.gov/docs/rate-limits/" },
134
+ ],
135
+ },
136
+ operations: [
137
+ {
138
+ operationId: "download",
139
+ operationVersion: "1.0.0",
140
+ summary: "Download official attachments for exact Regulations.gov comment IDs.",
141
+ description: "Fetches comment detail with included attachment metadata, applies an optional exact attachment allowlist and explicit file/byte caps, then commits fixed-origin files and a relative hash manifest to an explicit local directory.",
142
+ inputSchema: REGULATIONS_GOV_ATTACHMENTS_INPUT_SCHEMA,
143
+ outputSchema: REGULATIONS_GOV_ATTACHMENTS_OUTPUT_SCHEMA,
144
+ artifactOutput: { kind: "directory", required: true },
145
+ execute: executeAttachmentDownload,
146
+ },
147
+ ],
148
+ };
149
+ async function executeAttachmentDownload(context) {
150
+ if (!context.artifacts) {
151
+ throw new DataRuntimeError("internal-error", "The declared artifact sink is unavailable.");
152
+ }
153
+ const input = context.input;
154
+ const query = {
155
+ commentIds: [...input.commentIds],
156
+ attachmentIds: input.attachmentIds ? [...input.attachmentIds] : null,
157
+ maxFiles: input.maxFiles,
158
+ maxTotalBytes: input.maxTotalBytes,
159
+ };
160
+ await context.artifacts.assertAvailable(MANIFEST_NAME);
161
+ const comments = [];
162
+ const attachments = [];
163
+ const observations = [];
164
+ const missingFiles = [];
165
+ const causeCodes = [];
166
+ const executableCommentIds = input.commentIds.slice(0, context.limits.maxPages);
167
+ for (const [index, commentId] of executableCommentIds.entries()) {
168
+ try {
169
+ const response = await context.http.request({
170
+ endpointId: "regulations-gov-api",
171
+ method: "GET",
172
+ path: `/v4/comments/${encodeURIComponent(commentId)}`,
173
+ query: { include: "attachments" },
174
+ credentialId: "api-key",
175
+ });
176
+ const parsed = parseCommentAttachments(response.json(), commentId);
177
+ comments.push({ commentId, attachmentIds: parsed.map((item) => item.attachmentId) });
178
+ attachments.push(...parsed);
179
+ observations.push({ ...response.observation, sourceId: `comment:${index + 1}` });
180
+ }
181
+ catch (error) {
182
+ if (comments.length === 0)
183
+ throw normalizeProviderFailure(error);
184
+ missingFiles.push(`comment:${commentId}:attachments`);
185
+ causeCodes.push(causeCode(error));
186
+ }
187
+ }
188
+ const selectedIds = input.attachmentIds ? new Set(input.attachmentIds) : null;
189
+ const eligibleAttachments = selectedIds
190
+ ? attachments.filter((attachment) => selectedIds.has(attachment.attachmentId))
191
+ : attachments;
192
+ if (selectedIds) {
193
+ const found = new Set(eligibleAttachments.map((attachment) => attachment.attachmentId));
194
+ for (const attachmentId of input.attachmentIds ?? []) {
195
+ if (!found.has(attachmentId))
196
+ missingFiles.push(attachmentId);
197
+ }
198
+ if (missingFiles.length > causeCodes.length)
199
+ causeCodes.push("provider-response-invalid");
200
+ }
201
+ const candidates = eligibleAttachments.flatMap((attachment) => attachment.fileFormats.map((format, index) => ({
202
+ attachment,
203
+ format,
204
+ formatIndex: index + 1,
205
+ })));
206
+ const files = [];
207
+ const warnings = [
208
+ "Downloaded Regulations.gov attachments are untrusted public-submission bytes and were not opened, scanned, or interpreted.",
209
+ "Preserve the generated manifest and file hashes when moving artifacts into downstream evidence workflows.",
210
+ ];
211
+ const fileLimit = Math.min(input.maxFiles, context.limits.maxRecords);
212
+ let totalBytes = 0;
213
+ let capReason = candidates.length > fileLimit ? "max-files" : null;
214
+ for (const candidate of candidates.slice(0, fileLimit)) {
215
+ if (candidate.format.sizeBytes > input.maxTotalBytes - totalBytes) {
216
+ capReason = "max-total-bytes";
217
+ break;
218
+ }
219
+ const missingIdentifier = `${candidate.attachment.attachmentId}:format:${candidate.formatIndex}`;
220
+ try {
221
+ const target = officialDownloadTarget(candidate.format.url);
222
+ const relativePath = artifactFilename(candidate);
223
+ await context.artifacts.assertAvailable(relativePath);
224
+ const response = await context.http.request({
225
+ endpointId: "regulations-gov-downloads",
226
+ method: "GET",
227
+ path: target.pathname,
228
+ ...(target.searchParams.size === 0 ? {} : { query: queryParameters(target) }),
229
+ maxResponseBytes: Math.min(context.limits.maxResponseBytes, input.maxTotalBytes - totalBytes),
230
+ });
231
+ const artifact = await context.artifacts.stage(relativePath, response.bytes);
232
+ totalBytes += artifact.byteSize;
233
+ files.push({
234
+ commentId: candidate.attachment.commentId,
235
+ attachmentId: candidate.attachment.attachmentId,
236
+ formatIndex: candidate.formatIndex,
237
+ format: candidate.format.format,
238
+ sourceUrl: candidate.format.url,
239
+ contentType: response.observation.contentType,
240
+ providerSizeBytes: candidate.format.sizeBytes,
241
+ sizeMatchesProvider: candidate.format.sizeBytes === artifact.byteSize,
242
+ ...artifact,
243
+ });
244
+ observations.push({
245
+ ...response.observation,
246
+ sourceId: `attachment:${candidate.attachment.attachmentId}:format:${candidate.formatIndex}`,
247
+ });
248
+ }
249
+ catch (error) {
250
+ missingFiles.push(missingIdentifier);
251
+ causeCodes.push(causeCode(error));
252
+ }
253
+ }
254
+ const partial = missingFiles.length > 0;
255
+ const stopReason = partial
256
+ ? "partial"
257
+ : input.commentIds.length > executableCommentIds.length
258
+ ? "max-comments"
259
+ : (capReason ?? "completed");
260
+ const errors = partial
261
+ ? [
262
+ {
263
+ code: "partial-result",
264
+ message: "One or more Regulations.gov attachment metadata records or files could not be retrieved, validated, or committed.",
265
+ retryable: causeCodes.some((code) => ["network-failed", "rate-limited", "timeout"].includes(code)),
266
+ userActionRequired: false,
267
+ details: {
268
+ missingFiles: unique(missingFiles),
269
+ causeCodes: unique(causeCodes),
270
+ },
271
+ },
272
+ ]
273
+ : [];
274
+ const source = sourceDescriptor();
275
+ const manifestBody = {
276
+ schemaVersion: "tiangong.data.artifact-manifest.v1",
277
+ capabilityId: "regulations-gov.attachments",
278
+ capabilityVersion: "1.0.0",
279
+ operationId: "download",
280
+ operationVersion: "1.0.0",
281
+ source,
282
+ query,
283
+ comments,
284
+ attachments,
285
+ files,
286
+ stopReason,
287
+ warnings,
288
+ errors,
289
+ };
290
+ const manifest = await context.artifacts.stage(MANIFEST_NAME, Buffer.from(`${canonicalJson(manifestBody)}\n`, "utf8"));
291
+ return {
292
+ status: partial ? "partial" : "success",
293
+ data: { source, query, comments, attachments, files, manifest, stopReason },
294
+ summary: {
295
+ recordCount: files.length,
296
+ pageCount: comments.length,
297
+ chunkCount: files.length,
298
+ truncated: input.commentIds.length > executableCommentIds.length || capReason !== null,
299
+ completeness: partial ? "partial" : "complete",
300
+ ...(partial ? { missing: [{ kind: "file", identifiers: unique(missingFiles) }] } : {}),
301
+ },
302
+ warnings,
303
+ errors,
304
+ observations,
305
+ };
306
+ }
307
+ function parseCommentAttachments(value, commentId) {
308
+ const payload = requireObject(value, "Regulations.gov comment detail response");
309
+ const resource = requireObject(payload.data, "data");
310
+ if (requireString(resource.id, "data.id") !== commentId) {
311
+ throw providerInvalid("Regulations.gov returned a different comment ID than requested.");
312
+ }
313
+ if (requireString(resource.type, "data.type") !== "comments") {
314
+ throw providerInvalid("Regulations.gov detail resource must have type comments.");
315
+ }
316
+ const relationshipIds = attachmentRelationshipIds(resource.relationships);
317
+ if (relationshipIds.length === 0)
318
+ return [];
319
+ const included = requireArray(payload.included, "included");
320
+ const byId = new Map();
321
+ for (const [index, value] of included.entries()) {
322
+ const item = requireObject(value, `included[${index}]`);
323
+ if (requireString(item.type, `included[${index}].type`) !== "attachments")
324
+ continue;
325
+ const attachmentId = requireString(item.id, `included[${index}].id`);
326
+ if (byId.has(attachmentId))
327
+ throw providerInvalid("Attachment IDs must be unique.");
328
+ byId.set(attachmentId, normalizeAttachment(item, commentId, attachmentId, index));
329
+ }
330
+ return relationshipIds.map((attachmentId) => {
331
+ const attachment = byId.get(attachmentId);
332
+ if (!attachment) {
333
+ throw providerInvalid(`Included attachment metadata is missing for ${attachmentId}.`);
334
+ }
335
+ return attachment;
336
+ });
337
+ }
338
+ function attachmentRelationshipIds(value) {
339
+ if (value === null || value === undefined)
340
+ return [];
341
+ const relationships = requireObject(value, "data.relationships");
342
+ if (relationships.attachments === null || relationships.attachments === undefined)
343
+ return [];
344
+ const attachments = requireObject(relationships.attachments, "data.relationships.attachments");
345
+ const data = requireArray(attachments.data, "data.relationships.attachments.data");
346
+ const ids = data.map((value, index) => {
347
+ const reference = requireObject(value, `data.relationships.attachments.data[${index}]`);
348
+ if (requireString(reference.type, `data.relationships.attachments.data[${index}].type`) !==
349
+ "attachments") {
350
+ throw providerInvalid("Attachment relationships must use type attachments.");
351
+ }
352
+ return requireString(reference.id, `data.relationships.attachments.data[${index}].id`);
353
+ });
354
+ if (new Set(ids).size !== ids.length)
355
+ throw providerInvalid("Attachment relationships repeat IDs.");
356
+ return ids;
357
+ }
358
+ function normalizeAttachment(value, commentId, attachmentId, includedIndex) {
359
+ const attributes = requireObject(value.attributes, `included[${includedIndex}].attributes`);
360
+ const fileFormats = requireArray(attributes.fileFormats ?? [], `included[${includedIndex}].attributes.fileFormats`).map((value, index) => {
361
+ const item = requireObject(value, `fileFormats[${index}]`);
362
+ return {
363
+ url: requireHttpsUrl(item.fileUrl, `fileFormats[${index}].fileUrl`),
364
+ format: requireString(item.format, `fileFormats[${index}].format`),
365
+ sizeBytes: requireNonNegativeInteger(item.size, `fileFormats[${index}].size`),
366
+ };
367
+ });
368
+ return {
369
+ commentId,
370
+ attachmentId,
371
+ title: nullableString(attributes.title, "attachment.title"),
372
+ abstract: nullableString(attributes.docAbstract, "attachment.docAbstract"),
373
+ order: nullableNonNegativeInteger(attributes.docOrder, "attachment.docOrder"),
374
+ modifiedDateTime: nullableString(attributes.modifyDate, "attachment.modifyDate"),
375
+ restrictionType: nullableString(attributes.restrictReasonType, "attachment.restrictReasonType"),
376
+ restrictionReason: nullableString(attributes.restrictReason, "attachment.restrictReason"),
377
+ fileFormats,
378
+ };
379
+ }
380
+ function officialDownloadTarget(value) {
381
+ const target = new URL(value);
382
+ if (target.origin !== DOWNLOADS_ORIGIN ||
383
+ target.protocol !== "https:" ||
384
+ target.username ||
385
+ target.password ||
386
+ target.hash) {
387
+ throw new DataRuntimeError("endpoint-policy-blocked", "The attachment file URL is outside the fixed Regulations.gov download origin.");
388
+ }
389
+ return target;
390
+ }
391
+ function queryParameters(url) {
392
+ const query = {};
393
+ for (const key of [...new Set(url.searchParams.keys())].sort()) {
394
+ query[key] = url.searchParams.getAll(key);
395
+ }
396
+ return query;
397
+ }
398
+ function artifactFilename(candidate) {
399
+ const identity = `${candidate.attachment.commentId}\u0000${candidate.attachment.attachmentId}\u0000${candidate.formatIndex}\u0000${candidate.format.url}`;
400
+ const digest = sha256Bytes(Buffer.from(identity, "utf8")).slice(0, 24);
401
+ const extension = safeExtension(candidate.format.format, candidate.format.url);
402
+ return `reggov-${digest}-${candidate.formatIndex}.${extension}`;
403
+ }
404
+ function safeExtension(format, sourceUrl) {
405
+ const normalizedFormat = format
406
+ .toLowerCase()
407
+ .replace(/[^a-z0-9]/g, "")
408
+ .slice(0, 12);
409
+ if (normalizedFormat)
410
+ return normalizedFormat;
411
+ const filename = new URL(sourceUrl).pathname.split("/").pop() ?? "";
412
+ const extension = filename.includes(".") ? (filename.split(".").pop() ?? "") : "";
413
+ return (extension
414
+ .toLowerCase()
415
+ .replace(/[^a-z0-9]/g, "")
416
+ .slice(0, 12) || "bin");
417
+ }
418
+ function sourceDescriptor() {
419
+ return {
420
+ providerId: "regulations-gov",
421
+ service: "Regulations.gov API",
422
+ apiVersion: "v4",
423
+ downloadsOrigin: DOWNLOADS_ORIGIN,
424
+ interpretationBoundary: "Files are preserved as untrusted source bytes; no safety, content, stance, legal, or evidentiary conclusion is made.",
425
+ };
426
+ }
427
+ function requireObject(value, field) {
428
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
429
+ throw providerInvalid(`${field} must be an object.`);
430
+ }
431
+ return value;
432
+ }
433
+ function requireArray(value, field) {
434
+ if (!Array.isArray(value))
435
+ throw providerInvalid(`${field} must be an array.`);
436
+ return value;
437
+ }
438
+ function requireString(value, field, allowEmpty = false) {
439
+ if (typeof value !== "string" || (!allowEmpty && value.length === 0)) {
440
+ throw providerInvalid(`${field} must be ${allowEmpty ? "a string" : "a non-empty string"}.`);
441
+ }
442
+ return value;
443
+ }
444
+ function nullableString(value, field) {
445
+ if (value === null || value === undefined)
446
+ return null;
447
+ return requireString(value, field, true);
448
+ }
449
+ function requireNonNegativeInteger(value, field) {
450
+ if (!Number.isSafeInteger(value) || value < 0) {
451
+ throw providerInvalid(`${field} must be a non-negative safe integer.`);
452
+ }
453
+ return value;
454
+ }
455
+ function nullableNonNegativeInteger(value, field) {
456
+ if (value === null || value === undefined)
457
+ return null;
458
+ return requireNonNegativeInteger(value, field);
459
+ }
460
+ function requireHttpsUrl(value, field) {
461
+ const text = requireString(value, field);
462
+ try {
463
+ const url = new URL(text);
464
+ if (url.protocol !== "https:" || url.username || url.password)
465
+ throw new Error("unsafe");
466
+ return url.toString();
467
+ }
468
+ catch {
469
+ throw providerInvalid(`${field} must be a credential-free HTTPS URL.`);
470
+ }
471
+ }
472
+ function normalizeProviderFailure(error) {
473
+ if (error instanceof DataRuntimeError)
474
+ return error;
475
+ return new DataRuntimeError("provider-response-invalid", "The Regulations.gov attachment metadata could not be retrieved or normalized.");
476
+ }
477
+ function causeCode(error) {
478
+ return error instanceof DataRuntimeError ? error.code : "network-failed";
479
+ }
480
+ function providerInvalid(message) {
481
+ return new DataRuntimeError("provider-response-invalid", message);
482
+ }
483
+ function unique(values) {
484
+ return [...new Set(values)];
485
+ }
486
+ //# sourceMappingURL=regulations-gov-attachments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regulations-gov-attachments.js","sourceRoot":"","sources":["../../../src/data/connectors/regulations-gov-attachments.ts"],"names":[],"mappings":"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"}