@tiangong-ai/cli 0.0.32 → 0.0.33

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 (58) hide show
  1. package/AGENTS.md +2 -2
  2. package/README.md +51 -17
  3. package/dist/research/orchestration.js +388 -31
  4. package/dist/research/orchestration.js.map +1 -1
  5. package/dist/research/workspace/acquisition.d.ts +71 -0
  6. package/dist/research/workspace/acquisition.js +593 -0
  7. package/dist/research/workspace/acquisition.js.map +1 -0
  8. package/dist/research/workspace/artifacts.d.ts +43 -0
  9. package/dist/research/workspace/artifacts.js +544 -0
  10. package/dist/research/workspace/artifacts.js.map +1 -0
  11. package/dist/research/workspace/broker.js +265 -56
  12. package/dist/research/workspace/broker.js.map +1 -1
  13. package/dist/research/workspace/discovery-planning.d.ts +25 -0
  14. package/dist/research/workspace/discovery-planning.js +106 -0
  15. package/dist/research/workspace/discovery-planning.js.map +1 -0
  16. package/dist/research/workspace/discovery-status.d.ts +46 -0
  17. package/dist/research/workspace/discovery-status.js +183 -0
  18. package/dist/research/workspace/discovery-status.js.map +1 -0
  19. package/dist/research/workspace/discovery.d.ts +25 -0
  20. package/dist/research/workspace/discovery.js +268 -0
  21. package/dist/research/workspace/discovery.js.map +1 -0
  22. package/dist/research/workspace/downloads.d.ts +76 -0
  23. package/dist/research/workspace/downloads.js +274 -0
  24. package/dist/research/workspace/downloads.js.map +1 -0
  25. package/dist/research/workspace/evidence-ledger.d.ts +52 -0
  26. package/dist/research/workspace/evidence-ledger.js +487 -0
  27. package/dist/research/workspace/evidence-ledger.js.map +1 -0
  28. package/dist/research/workspace/evidence.d.ts +1 -0
  29. package/dist/research/workspace/evidence.js +2 -0
  30. package/dist/research/workspace/evidence.js.map +1 -1
  31. package/dist/research/workspace/input-plan.js +4 -0
  32. package/dist/research/workspace/input-plan.js.map +1 -1
  33. package/dist/research/workspace/native-activity.d.ts +65 -0
  34. package/dist/research/workspace/native-activity.js +153 -0
  35. package/dist/research/workspace/native-activity.js.map +1 -0
  36. package/dist/research/workspace/preflight.d.ts +5 -0
  37. package/dist/research/workspace/preflight.js +37 -17
  38. package/dist/research/workspace/preflight.js.map +1 -1
  39. package/dist/research/workspace/projects.d.ts +3 -1
  40. package/dist/research/workspace/projects.js +346 -5
  41. package/dist/research/workspace/projects.js.map +1 -1
  42. package/dist/research/workspace/runtime.d.ts +106 -4
  43. package/dist/research/workspace/runtime.js +947 -80
  44. package/dist/research/workspace/runtime.js.map +1 -1
  45. package/dist/research/workspace/sanitization.js +28 -6
  46. package/dist/research/workspace/sanitization.js.map +1 -1
  47. package/dist/research/workspace/schemas.d.ts +3 -0
  48. package/dist/research/workspace/schemas.js +206 -33
  49. package/dist/research/workspace/schemas.js.map +1 -1
  50. package/dist/research/workspace/setup-wizard.js +10 -4
  51. package/dist/research/workspace/setup-wizard.js.map +1 -1
  52. package/dist/research/workspace/setup.d.ts +4 -1
  53. package/dist/research/workspace/setup.js +61 -11
  54. package/dist/research/workspace/setup.js.map +1 -1
  55. package/dist/research/workspace/types.d.ts +31 -3
  56. package/dist/research/workspace/workspace.js +45 -6
  57. package/dist/research/workspace/workspace.js.map +1 -1
  58. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"downloads.js","sourceRoot":"","sources":["../../../src/research/workspace/downloads.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import type { BrokerEvidenceReceipt } from "./evidence.js";
2
+ import type { JournalEvent, ProjectInput } from "./types.js";
3
+ export type EvidenceLedgerEventType = "activity.recorded" | "candidate.discovered" | "candidate.duplicate" | "candidate.assessed" | "candidate.admitted" | "candidate.rejected" | "download.bound" | "download.failed" | "handoff.requested" | "handoff.resolved" | "artifact.registered" | "artifact.assessed" | "snapshot.frozen" | "claim.used" | "review.bound" | "addendum.created" | "project.superseded";
4
+ export interface EvidenceCandidateOrigin {
5
+ kind: "broker" | "input" | "native";
6
+ receiptId: string | null;
7
+ inputId: string | null;
8
+ capabilityId: string | null;
9
+ locator: string | null;
10
+ jsonPointer: string | null;
11
+ retrievedAt: string;
12
+ }
13
+ export interface EvidenceCandidate {
14
+ id: string;
15
+ canonicalKeySha256: string;
16
+ title: string;
17
+ url: string | null;
18
+ doi: string | null;
19
+ publicationDate: string | null;
20
+ excerpt: string | null;
21
+ discoveredAt: string;
22
+ origin: EvidenceCandidateOrigin;
23
+ occurrences: EvidenceCandidateOrigin[];
24
+ }
25
+ export declare function evidenceLedgerPath(root: string, projectId: string): string;
26
+ export declare function appendEvidenceLedgerEvent(root: string, projectId: string, type: EvidenceLedgerEventType, payload: Record<string, unknown>): Promise<JournalEvent>;
27
+ export declare function cloneEvidenceLedger(root: string, sourceProjectId: string, targetProjectId: string): Promise<number>;
28
+ export declare function verifyEvidenceLedger(root: string, projectId: string): Promise<{
29
+ events: number;
30
+ candidates: number;
31
+ head: string;
32
+ }>;
33
+ export declare function listEvidenceCandidates(root: string, projectId: string): Promise<EvidenceCandidate[]>;
34
+ export declare function registerBrokerCandidates(input: {
35
+ root: string;
36
+ projectId: string;
37
+ receipt: BrokerEvidenceReceipt;
38
+ contextBytes: Uint8Array;
39
+ selectedJsonPointer?: string | null;
40
+ itemOffset?: number;
41
+ }): Promise<EvidenceCandidate[]>;
42
+ export declare function registerProjectInputCandidates(root: string, projectId: string, inputs: ProjectInput[]): Promise<EvidenceCandidate[]>;
43
+ export declare function registerNativeDiscoveryCandidate(input: {
44
+ root: string;
45
+ projectId: string;
46
+ value: Record<string, unknown>;
47
+ }): Promise<{
48
+ candidate: EvidenceCandidate;
49
+ duplicate: boolean;
50
+ admissionStatus: "supplemental-not-admitted" | "formalized-not-admitted";
51
+ nextAction: string;
52
+ }>;
@@ -0,0 +1,487 @@
1
+ import { basename, join } from "node:path";
2
+ import { CliError } from "../../errors.js";
3
+ import { appendJournalEvent, readJournal, verifyJournal } from "./journal.js";
4
+ import { sanitizeResearchText } from "./sanitization.js";
5
+ import { canonicalJson, ensureDirectory, isObject, readJsonFile, sha256Text, workspacePaths, } from "./storage.js";
6
+ const TRACKING_QUERY_KEY = /^(?:utm_[a-z0-9_]+|fbclid|gclid|mc_cid|mc_eid|ref|source)$/i;
7
+ const SENSITIVE_QUERY_KEY = /^(?:access[_-]?token|api[_-]?key|apikey|auth|authorization|awsaccesskeyid|code|cookie|credential|key|password|secret|session(?:[_-]?id)?|sig|signature|token|x[_-]amz[_-](?:credential|security[_-]?token|signature)|x[_-]goog[_-](?:credential|signature))$/i;
8
+ const IDENTIFIER = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/;
9
+ const MAX_TITLE_LENGTH = 500;
10
+ const MAX_EXCERPT_LENGTH = 2_000;
11
+ export function evidenceLedgerPath(root, projectId) {
12
+ assertProjectId(projectId);
13
+ return join(workspacePaths(root).projects, projectId, "evidence", "ledger.jsonl");
14
+ }
15
+ export async function appendEvidenceLedgerEvent(root, projectId, type, payload) {
16
+ try {
17
+ await ensureDirectory(join(workspacePaths(root).projects, projectId, "evidence"));
18
+ return await appendJournalEvent(evidenceLedgerPath(root, projectId), type, projectId, {
19
+ ...payload,
20
+ projectId,
21
+ });
22
+ }
23
+ catch (error) {
24
+ throw evidenceLedgerError(error);
25
+ }
26
+ }
27
+ export async function cloneEvidenceLedger(root, sourceProjectId, targetProjectId) {
28
+ await verifyEvidenceLedger(root, sourceProjectId);
29
+ const events = await readJournal(evidenceLedgerPath(root, sourceProjectId));
30
+ const replayable = new Set([
31
+ "activity.recorded",
32
+ "candidate.discovered",
33
+ "candidate.duplicate",
34
+ "candidate.assessed",
35
+ "candidate.admitted",
36
+ "candidate.rejected",
37
+ "download.bound",
38
+ "download.failed",
39
+ "handoff.requested",
40
+ "handoff.resolved",
41
+ "artifact.registered",
42
+ "artifact.assessed",
43
+ ]);
44
+ let count = 0;
45
+ for (const event of events) {
46
+ if (!replayable.has(event.type))
47
+ continue;
48
+ const { projectId: _sourceProjectId, ...payload } = event.payload;
49
+ void _sourceProjectId;
50
+ await appendEvidenceLedgerEvent(root, targetProjectId, event.type, payload);
51
+ count += 1;
52
+ }
53
+ return count;
54
+ }
55
+ export async function verifyEvidenceLedger(root, projectId) {
56
+ try {
57
+ const path = evidenceLedgerPath(root, projectId);
58
+ const verification = await verifyJournal(path);
59
+ const candidates = await listEvidenceCandidates(root, projectId);
60
+ return { events: verification.events, candidates: candidates.length, head: verification.head };
61
+ }
62
+ catch (error) {
63
+ throw evidenceLedgerError(error);
64
+ }
65
+ }
66
+ export async function listEvidenceCandidates(root, projectId) {
67
+ let events;
68
+ try {
69
+ events = await readJournal(evidenceLedgerPath(root, projectId));
70
+ await verifyJournal(evidenceLedgerPath(root, projectId));
71
+ }
72
+ catch (error) {
73
+ throw evidenceLedgerError(error);
74
+ }
75
+ const candidates = new Map();
76
+ for (const event of events) {
77
+ if (event.scope !== projectId)
78
+ throw evidenceLedgerError("Ledger scope does not match project.");
79
+ if (event.type === "candidate.discovered") {
80
+ const candidate = parseCandidate(event.payload.candidate);
81
+ if (candidates.has(candidate.id)) {
82
+ throw evidenceLedgerError(`Duplicate candidate identity in ledger: ${candidate.id}`);
83
+ }
84
+ candidates.set(candidate.id, candidate);
85
+ }
86
+ else if (event.type === "candidate.duplicate") {
87
+ const candidateId = event.payload.candidateId;
88
+ const occurrence = parseOrigin(event.payload.occurrence);
89
+ if (typeof candidateId !== "string" || !candidates.has(candidateId)) {
90
+ throw evidenceLedgerError("Duplicate event refers to an unknown candidate.");
91
+ }
92
+ const candidate = candidates.get(candidateId);
93
+ candidate.occurrences.push(occurrence);
94
+ }
95
+ }
96
+ return [...candidates.values()].sort((left, right) => left.id.localeCompare(right.id));
97
+ }
98
+ export async function registerBrokerCandidates(input) {
99
+ if (input.receipt.projectId !== input.projectId) {
100
+ throw evidenceLedgerError("Broker receipt project does not match the evidence ledger.");
101
+ }
102
+ const selectedJsonPointer = input.selectedJsonPointer ?? null;
103
+ const itemOffset = input.itemOffset ?? input.receipt.contextOffset ?? 0;
104
+ if (!Number.isInteger(itemOffset) || itemOffset < 0) {
105
+ throw evidenceLedgerError("Broker candidate item offset is invalid.");
106
+ }
107
+ let parsed;
108
+ try {
109
+ parsed = JSON.parse(Buffer.from(input.contextBytes).toString("utf8"));
110
+ }
111
+ catch {
112
+ return [];
113
+ }
114
+ const items = candidateItems(parsed, selectedJsonPointer, itemOffset);
115
+ if (!items.length)
116
+ return [];
117
+ const existing = await listEvidenceCandidates(input.root, input.projectId);
118
+ const byCanonicalKey = new Map(existing.map((candidate) => [candidate.canonicalKeySha256, candidate]));
119
+ const registered = [];
120
+ for (const item of items) {
121
+ const occurrence = {
122
+ kind: "broker",
123
+ receiptId: input.receipt.attemptId,
124
+ inputId: null,
125
+ capabilityId: input.receipt.capabilityId,
126
+ locator: input.receipt.locator,
127
+ jsonPointer: item.jsonPointer,
128
+ retrievedAt: input.receipt.retrievedAt,
129
+ };
130
+ const candidate = candidateFromValue(item.value, occurrence);
131
+ const duplicate = byCanonicalKey.get(candidate.canonicalKeySha256);
132
+ if (duplicate) {
133
+ await appendEvidenceLedgerEvent(input.root, input.projectId, "candidate.duplicate", {
134
+ candidateId: duplicate.id,
135
+ canonicalKeySha256: duplicate.canonicalKeySha256,
136
+ occurrence,
137
+ });
138
+ registered.push({ ...duplicate, origin: occurrence });
139
+ continue;
140
+ }
141
+ await appendEvidenceLedgerEvent(input.root, input.projectId, "candidate.discovered", {
142
+ candidate,
143
+ });
144
+ byCanonicalKey.set(candidate.canonicalKeySha256, candidate);
145
+ registered.push(candidate);
146
+ }
147
+ return registered;
148
+ }
149
+ export async function registerProjectInputCandidates(root, projectId, inputs) {
150
+ const existing = await listEvidenceCandidates(root, projectId);
151
+ const byCanonicalKey = new Map(existing.map((candidate) => [candidate.canonicalKeySha256, candidate]));
152
+ const registered = [];
153
+ for (const input of inputs) {
154
+ const canonicalKeySha256 = sha256Text(`input:${input.sha256}`);
155
+ const occurrence = {
156
+ kind: "input",
157
+ receiptId: null,
158
+ inputId: input.id,
159
+ capabilityId: null,
160
+ locator: join("inputs", input.id, basename(input.path)).replaceAll("\\", "/"),
161
+ jsonPointer: null,
162
+ retrievedAt: input.addedAt,
163
+ };
164
+ const duplicate = byCanonicalKey.get(canonicalKeySha256);
165
+ if (duplicate) {
166
+ registered.push(duplicate);
167
+ continue;
168
+ }
169
+ const candidate = {
170
+ id: `candidate-${canonicalKeySha256.slice(0, 24)}`,
171
+ canonicalKeySha256,
172
+ title: basename(input.path),
173
+ url: null,
174
+ doi: null,
175
+ publicationDate: input.publicationDate ?? null,
176
+ excerpt: null,
177
+ discoveredAt: input.addedAt,
178
+ origin: occurrence,
179
+ occurrences: [occurrence],
180
+ };
181
+ await appendEvidenceLedgerEvent(root, projectId, "candidate.discovered", { candidate });
182
+ byCanonicalKey.set(canonicalKeySha256, candidate);
183
+ registered.push(candidate);
184
+ }
185
+ return registered;
186
+ }
187
+ export async function registerNativeDiscoveryCandidate(input) {
188
+ const allowedKeys = new Set(["title", "url", "doi", "publicationDate", "excerpt"]);
189
+ const unknownKeys = Object.keys(input.value).filter((key) => !allowedKeys.has(key));
190
+ if (unknownKeys.length) {
191
+ throw evidenceLedgerError(`Native discovery candidate contains unsupported fields: ${unknownKeys.sort().join(", ")}.`);
192
+ }
193
+ const project = await readJsonFile(join(workspacePaths(input.root).projects, input.projectId, "project.json"), `Research project ${input.projectId}`);
194
+ const packages = Array.isArray(project.packages) ? project.packages : [];
195
+ const discover = packages.find((workPackage) => isObject(workPackage) && workPackage.stage === "discover");
196
+ if (!isObject(discover) || discover.status !== "running") {
197
+ throw evidenceLedgerError("Native discovery candidates may be registered only during the active discover stage.");
198
+ }
199
+ if (typeof input.value.title !== "string" || !input.value.title.trim()) {
200
+ throw evidenceLedgerError("Native discovery candidate requires a non-empty title.");
201
+ }
202
+ if (typeof input.value.url === "string")
203
+ assertSafeNativeCandidateUrl(input.value.url);
204
+ if (typeof input.value.url !== "string" && typeof input.value.doi !== "string") {
205
+ throw evidenceLedgerError("Native discovery candidate requires a public HTTPS URL or DOI.");
206
+ }
207
+ const occurrence = {
208
+ kind: "native",
209
+ receiptId: null,
210
+ inputId: null,
211
+ capabilityId: null,
212
+ locator: null,
213
+ jsonPointer: null,
214
+ retrievedAt: new Date().toISOString(),
215
+ };
216
+ const candidate = candidateFromValue({
217
+ title: input.value.title,
218
+ url: input.value.url,
219
+ doi: input.value.doi,
220
+ publicationDate: input.value.publicationDate,
221
+ description: input.value.excerpt,
222
+ }, occurrence);
223
+ if (!candidate.url && !candidate.doi) {
224
+ throw evidenceLedgerError("Native discovery candidate URL or DOI is invalid.");
225
+ }
226
+ const existing = (await listEvidenceCandidates(input.root, input.projectId)).find((item) => item.canonicalKeySha256 === candidate.canonicalKeySha256);
227
+ if (existing) {
228
+ await appendEvidenceLedgerEvent(input.root, input.projectId, "candidate.duplicate", {
229
+ candidateId: existing.id,
230
+ canonicalKeySha256: existing.canonicalKeySha256,
231
+ occurrence,
232
+ });
233
+ const formalized = existing.occurrences.some((existingOccurrence) => existingOccurrence.kind === "broker" || existingOccurrence.kind === "input");
234
+ return {
235
+ candidate: { ...existing, occurrences: [...existing.occurrences, occurrence] },
236
+ duplicate: true,
237
+ admissionStatus: formalized ? "formalized-not-admitted" : "supplemental-not-admitted",
238
+ nextAction: formalized
239
+ ? "This candidate already has immutable broker or input provenance and may be assessed. It remains unadmitted until an explicit discovery assessment records an admit decision."
240
+ : "Fetch this URL/DOI through a reviewed broker capability. The immutable receipt will attach to the same candidate before formal admission.",
241
+ };
242
+ }
243
+ await appendEvidenceLedgerEvent(input.root, input.projectId, "candidate.discovered", {
244
+ candidate,
245
+ });
246
+ return {
247
+ candidate,
248
+ duplicate: false,
249
+ admissionStatus: "supplemental-not-admitted",
250
+ nextAction: "Fetch this URL/DOI through a reviewed broker capability. Native discovery alone cannot support a claim or formal admission.",
251
+ };
252
+ }
253
+ function candidateFromValue(value, origin) {
254
+ const record = isObject(value) ? value : { value };
255
+ const sourceCitation = parseSourceCitation(firstString(record, ["source"]));
256
+ const title = boundedText(firstString(record, ["title", "name", "headline"]) ??
257
+ sourceCitation.label ??
258
+ "Untitled candidate", MAX_TITLE_LENGTH);
259
+ const url = canonicalPublicUrl(firstString(record, ["url", "link", "href"])) ?? sourceCitation.url;
260
+ const doi = normalizeDoi(firstString(record, ["doi"])) ?? sourceCitation.doi;
261
+ const publicationDate = normalizePublicationDate(firstString(record, [
262
+ "publicationDate",
263
+ "publication_date",
264
+ "publishedAt",
265
+ "published_at",
266
+ "page_age",
267
+ "date",
268
+ ]) ?? sourceCitation.publicationDate);
269
+ const excerptValue = firstString(record, [
270
+ "content",
271
+ "description",
272
+ "snippet",
273
+ "abstract",
274
+ "text",
275
+ "summary",
276
+ ]);
277
+ const excerpt = excerptValue ? boundedText(excerptValue, MAX_EXCERPT_LENGTH) : null;
278
+ const canonicalIdentity = url ?? (doi ? `doi:${doi}` : canonicalJson({ title, publicationDate }));
279
+ const canonicalKeySha256 = sha256Text(canonicalIdentity);
280
+ const id = `candidate-${canonicalKeySha256.slice(0, 24)}`;
281
+ return {
282
+ id,
283
+ canonicalKeySha256,
284
+ title,
285
+ url,
286
+ doi,
287
+ publicationDate,
288
+ excerpt,
289
+ discoveredAt: origin.retrievedAt,
290
+ origin,
291
+ occurrences: [origin],
292
+ };
293
+ }
294
+ function parseSourceCitation(value) {
295
+ if (!value)
296
+ return { label: null, url: null, doi: null, publicationDate: null };
297
+ const trimmed = value.trim();
298
+ const separator = trimmed.lastIndexOf("](");
299
+ const isMarkdownLink = trimmed.startsWith("[") && separator > 1 && trimmed.endsWith(")");
300
+ const label = isMarkdownLink ? trimmed.slice(1, separator).trim() : null;
301
+ const target = isMarkdownLink ? trimmed.slice(separator + 2, -1).trim() : trimmed;
302
+ const url = canonicalPublicUrl(target);
303
+ const doi = normalizeDoi(target) ?? normalizeDoi(extractDoi(label ?? trimmed));
304
+ const dates = (label ?? trimmed).match(/\b(?:19|20)\d{2}(?:-\d{2}(?:-\d{2})?)?/g);
305
+ const publicationDate = normalizePublicationDate(dates?.at(-1) ?? null);
306
+ return {
307
+ label: label ? boundedText(label.replace(/\s*\.\s*$/, ""), MAX_TITLE_LENGTH) : null,
308
+ url,
309
+ doi,
310
+ publicationDate,
311
+ };
312
+ }
313
+ function extractDoi(value) {
314
+ return /10\.\d{4,9}\/[^\s\])}>"']+/i.exec(value)?.[0] ?? null;
315
+ }
316
+ function candidateItems(value, selectedJsonPointer, itemOffset) {
317
+ if (Array.isArray(value)) {
318
+ return value.map((item, index) => ({
319
+ value: item,
320
+ jsonPointer: appendPointer(selectedJsonPointer ?? "", itemOffset + index),
321
+ }));
322
+ }
323
+ if (!isObject(value))
324
+ return [];
325
+ for (const [key, candidate] of [
326
+ ["/web/results", isObject(value.web) ? value.web.results : undefined],
327
+ ["/results", value.results],
328
+ ["/records", value.records],
329
+ ["/items", value.items],
330
+ ["/data", value.data],
331
+ ]) {
332
+ if (!Array.isArray(candidate))
333
+ continue;
334
+ return candidate.map((item, index) => ({
335
+ value: item,
336
+ jsonPointer: appendPointer(selectedJsonPointer ?? key, itemOffset + index),
337
+ }));
338
+ }
339
+ if (looksLikeCandidate(value)) {
340
+ return [{ value, jsonPointer: selectedJsonPointer ?? "" }];
341
+ }
342
+ return [];
343
+ }
344
+ function looksLikeCandidate(value) {
345
+ return ["title", "name", "headline", "url", "link", "href", "doi"].some((key) => typeof value[key] === "string");
346
+ }
347
+ function appendPointer(base, index) {
348
+ return `${base === "/" ? "" : base}/${index}` || `/${index}`;
349
+ }
350
+ function firstString(value, keys) {
351
+ for (const key of keys) {
352
+ if (typeof value[key] === "string" && value[key].trim())
353
+ return value[key].trim();
354
+ }
355
+ return null;
356
+ }
357
+ function canonicalPublicUrl(value) {
358
+ if (!value)
359
+ return null;
360
+ try {
361
+ const url = new URL(value);
362
+ if (url.protocol !== "https:" || url.username || url.password)
363
+ return null;
364
+ url.hash = "";
365
+ for (const key of [...url.searchParams.keys()]) {
366
+ if (SENSITIVE_QUERY_KEY.test(key) || TRACKING_QUERY_KEY.test(key))
367
+ url.searchParams.delete(key);
368
+ }
369
+ url.searchParams.sort();
370
+ return url.toString().replace(/\/$/, url.pathname === "/" && !url.search ? "" : "/");
371
+ }
372
+ catch {
373
+ return null;
374
+ }
375
+ }
376
+ function assertSafeNativeCandidateUrl(value) {
377
+ let url;
378
+ try {
379
+ url = new URL(value);
380
+ }
381
+ catch {
382
+ throw evidenceLedgerError("Native discovery candidate URL is invalid.");
383
+ }
384
+ if (url.protocol !== "https:" || url.username || url.password) {
385
+ throw evidenceLedgerError("Native discovery candidate URL must be public HTTPS without embedded credentials.");
386
+ }
387
+ if ([...url.searchParams.keys()].some((key) => SENSITIVE_QUERY_KEY.test(key))) {
388
+ throw evidenceLedgerError("Native discovery candidate URL contains a sensitive parameter.");
389
+ }
390
+ }
391
+ function normalizeDoi(value) {
392
+ if (!value)
393
+ return null;
394
+ const normalized = value
395
+ .trim()
396
+ .replace(/^https?:\/\/(?:dx\.)?doi\.org\//i, "")
397
+ .replace(/^doi:\s*/i, "");
398
+ return /^10\.\d{4,9}\/[\S]+$/i.test(normalized) ? normalized : null;
399
+ }
400
+ function normalizePublicationDate(value) {
401
+ if (!value)
402
+ return null;
403
+ const exact = /^(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?/.exec(value.trim());
404
+ if (!exact)
405
+ return null;
406
+ const candidate = exact[3]
407
+ ? `${exact[1]}-${exact[2]}-${exact[3]}`
408
+ : exact[2]
409
+ ? `${exact[1]}-${exact[2]}`
410
+ : exact[1];
411
+ if (candidate.length === 10) {
412
+ const timestamp = Date.parse(`${candidate}T00:00:00.000Z`);
413
+ if (!Number.isFinite(timestamp) ||
414
+ new Date(timestamp).toISOString().slice(0, 10) !== candidate) {
415
+ return null;
416
+ }
417
+ }
418
+ return candidate;
419
+ }
420
+ function boundedText(value, maxLength) {
421
+ const sanitized = sanitizeResearchText(value).replace(/\s+/g, " ").trim();
422
+ return sanitized.length <= maxLength ? sanitized : `${sanitized.slice(0, maxLength - 1)}…`;
423
+ }
424
+ function parseCandidate(value) {
425
+ if (!isObject(value))
426
+ throw evidenceLedgerError("Candidate event is malformed.");
427
+ const origin = parseOrigin(value.origin);
428
+ const occurrences = Array.isArray(value.occurrences)
429
+ ? value.occurrences.map(parseOrigin)
430
+ : [origin];
431
+ if (typeof value.id !== "string" ||
432
+ !IDENTIFIER.test(value.id) ||
433
+ typeof value.canonicalKeySha256 !== "string" ||
434
+ !/^[0-9a-f]{64}$/.test(value.canonicalKeySha256) ||
435
+ typeof value.title !== "string" ||
436
+ (value.url !== null && typeof value.url !== "string") ||
437
+ (value.doi !== null && typeof value.doi !== "string") ||
438
+ (value.publicationDate !== null && typeof value.publicationDate !== "string") ||
439
+ (value.excerpt !== null && typeof value.excerpt !== "string") ||
440
+ typeof value.discoveredAt !== "string" ||
441
+ !Number.isFinite(Date.parse(value.discoveredAt))) {
442
+ throw evidenceLedgerError("Candidate event has invalid fields.");
443
+ }
444
+ return {
445
+ id: value.id,
446
+ canonicalKeySha256: value.canonicalKeySha256,
447
+ title: value.title,
448
+ url: value.url,
449
+ doi: value.doi,
450
+ publicationDate: value.publicationDate,
451
+ excerpt: value.excerpt,
452
+ discoveredAt: value.discoveredAt,
453
+ origin,
454
+ occurrences,
455
+ };
456
+ }
457
+ function parseOrigin(value) {
458
+ if (!isObject(value) ||
459
+ !["broker", "input", "native"].includes(String(value.kind)) ||
460
+ (value.receiptId !== null && typeof value.receiptId !== "string") ||
461
+ (value.inputId !== null && typeof value.inputId !== "string") ||
462
+ (value.capabilityId !== null && typeof value.capabilityId !== "string") ||
463
+ (value.locator !== null && typeof value.locator !== "string") ||
464
+ (value.jsonPointer !== null && typeof value.jsonPointer !== "string") ||
465
+ typeof value.retrievedAt !== "string" ||
466
+ !Number.isFinite(Date.parse(value.retrievedAt))) {
467
+ throw evidenceLedgerError("Candidate origin is malformed.");
468
+ }
469
+ return value;
470
+ }
471
+ function assertProjectId(projectId) {
472
+ if (!/^[a-z0-9][a-z0-9-]{2,63}$/.test(projectId)) {
473
+ throw evidenceLedgerError("Evidence ledger project ID is invalid.");
474
+ }
475
+ }
476
+ function evidenceLedgerError(error) {
477
+ const message = typeof error === "string"
478
+ ? error
479
+ : error instanceof Error
480
+ ? sanitizeResearchText(error.message)
481
+ : "Evidence ledger is invalid.";
482
+ return new CliError(message, {
483
+ code: "RESEARCH_EVIDENCE_LEDGER_INVALID",
484
+ exitCode: 3,
485
+ });
486
+ }
487
+ //# sourceMappingURL=evidence-ledger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence-ledger.js","sourceRoot":"","sources":["../../../src/research/workspace/evidence-ledger.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,7 @@ export interface BrokerEvidenceReceipt {
19
19
  contextTotalItems?: number | null;
20
20
  contextNextOffset?: number | null;
21
21
  contextTruncated: boolean;
22
+ redactions: number;
22
23
  retrievedAt: string;
23
24
  servedAt: string;
24
25
  cacheHit: boolean;
@@ -186,6 +186,8 @@ function parseReceipt(value) {
186
186
  (!Number.isInteger(value.contextNextOffset) ||
187
187
  value.contextNextOffset < 0)) ||
188
188
  typeof value.contextTruncated !== "boolean" ||
189
+ !Number.isInteger(value.redactions) ||
190
+ value.redactions < 0 ||
189
191
  typeof value.retrievedAt !== "string" ||
190
192
  typeof value.servedAt !== "string" ||
191
193
  typeof value.cacheHit !== "boolean") {