@tiangong-ai/cli 0.0.32 → 0.0.34

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 (69) hide show
  1. package/AGENTS.md +7 -2
  2. package/README.md +72 -19
  3. package/dist/research/commands.js +58 -1
  4. package/dist/research/commands.js.map +1 -1
  5. package/dist/research/orchestration.js +388 -31
  6. package/dist/research/orchestration.js.map +1 -1
  7. package/dist/research/workspace/acquisition.d.ts +71 -0
  8. package/dist/research/workspace/acquisition.js +593 -0
  9. package/dist/research/workspace/acquisition.js.map +1 -0
  10. package/dist/research/workspace/artifacts.d.ts +43 -0
  11. package/dist/research/workspace/artifacts.js +544 -0
  12. package/dist/research/workspace/artifacts.js.map +1 -0
  13. package/dist/research/workspace/broker.js +265 -56
  14. package/dist/research/workspace/broker.js.map +1 -1
  15. package/dist/research/workspace/constants.d.ts +1 -0
  16. package/dist/research/workspace/constants.js +4 -2
  17. package/dist/research/workspace/constants.js.map +1 -1
  18. package/dist/research/workspace/context.js +106 -11
  19. package/dist/research/workspace/context.js.map +1 -1
  20. package/dist/research/workspace/discovery-planning.d.ts +25 -0
  21. package/dist/research/workspace/discovery-planning.js +106 -0
  22. package/dist/research/workspace/discovery-planning.js.map +1 -0
  23. package/dist/research/workspace/discovery-status.d.ts +46 -0
  24. package/dist/research/workspace/discovery-status.js +183 -0
  25. package/dist/research/workspace/discovery-status.js.map +1 -0
  26. package/dist/research/workspace/discovery.d.ts +25 -0
  27. package/dist/research/workspace/discovery.js +268 -0
  28. package/dist/research/workspace/discovery.js.map +1 -0
  29. package/dist/research/workspace/downloads.d.ts +76 -0
  30. package/dist/research/workspace/downloads.js +274 -0
  31. package/dist/research/workspace/downloads.js.map +1 -0
  32. package/dist/research/workspace/evidence-ledger.d.ts +52 -0
  33. package/dist/research/workspace/evidence-ledger.js +487 -0
  34. package/dist/research/workspace/evidence-ledger.js.map +1 -0
  35. package/dist/research/workspace/evidence.d.ts +1 -0
  36. package/dist/research/workspace/evidence.js +2 -0
  37. package/dist/research/workspace/evidence.js.map +1 -1
  38. package/dist/research/workspace/input-plan.js +4 -0
  39. package/dist/research/workspace/input-plan.js.map +1 -1
  40. package/dist/research/workspace/native-activity.d.ts +65 -0
  41. package/dist/research/workspace/native-activity.js +153 -0
  42. package/dist/research/workspace/native-activity.js.map +1 -0
  43. package/dist/research/workspace/preflight.d.ts +5 -0
  44. package/dist/research/workspace/preflight.js +37 -17
  45. package/dist/research/workspace/preflight.js.map +1 -1
  46. package/dist/research/workspace/projects.d.ts +3 -1
  47. package/dist/research/workspace/projects.js +346 -5
  48. package/dist/research/workspace/projects.js.map +1 -1
  49. package/dist/research/workspace/runtime.d.ts +106 -4
  50. package/dist/research/workspace/runtime.js +947 -80
  51. package/dist/research/workspace/runtime.js.map +1 -1
  52. package/dist/research/workspace/sanitization.js +28 -6
  53. package/dist/research/workspace/sanitization.js.map +1 -1
  54. package/dist/research/workspace/schemas.d.ts +3 -0
  55. package/dist/research/workspace/schemas.js +206 -33
  56. package/dist/research/workspace/schemas.js.map +1 -1
  57. package/dist/research/workspace/setup-catalog.js +5 -5
  58. package/dist/research/workspace/setup-invocation.d.ts +11 -0
  59. package/dist/research/workspace/setup-invocation.js +34 -0
  60. package/dist/research/workspace/setup-invocation.js.map +1 -0
  61. package/dist/research/workspace/setup-wizard.js +10 -4
  62. package/dist/research/workspace/setup-wizard.js.map +1 -1
  63. package/dist/research/workspace/setup.d.ts +55 -7
  64. package/dist/research/workspace/setup.js +603 -32
  65. package/dist/research/workspace/setup.js.map +1 -1
  66. package/dist/research/workspace/types.d.ts +52 -3
  67. package/dist/research/workspace/workspace.js +45 -6
  68. package/dist/research/workspace/workspace.js.map +1 -1
  69. package/package.json +4 -2
@@ -0,0 +1,593 @@
1
+ import { chmod, readFile } from "node:fs/promises";
2
+ import { dirname, join } from "node:path";
3
+ import { CliError } from "../../errors.js";
4
+ import { loadEvidenceArtifactRecords } from "./artifacts.js";
5
+ import { loadProjectEvidenceReceipts } from "./evidence.js";
6
+ import { appendEvidenceLedgerEvent, evidenceLedgerPath, verifyEvidenceLedger, } from "./evidence-ledger.js";
7
+ import { readJournal } from "./journal.js";
8
+ import { parseEvidenceRecord, StructuredOutputError } from "./schemas.js";
9
+ import { canonicalJson, ensureDirectory, isObject, pathExists, resolveContained, sha256File, sha256Text, workspacePaths, writeTextAtomic, } from "./storage.js";
10
+ export async function materializeAcquisitionAudit(root, project, value) {
11
+ const parsed = parseAcquisitionValue(value);
12
+ const evidencePath = join(workspacePaths(root).projects, project.id, "outputs", "evidence.json");
13
+ const evidence = parseEvidenceRecord(await readFile(evidencePath, "utf8"));
14
+ const sources = evidence.sources;
15
+ const sourceIds = new Set(sources.map((source) => String(source.id)));
16
+ const sourceById = new Map(sources.map((source) => [String(source.id), source]));
17
+ const sourceCandidates = await admittedSourceCandidateMap(root, project.id);
18
+ if (parsed.decisions.length !== sourceIds.size ||
19
+ parsed.decisions.some((decision) => !sourceIds.has(decision.sourceId)) ||
20
+ [...sourceIds].some((sourceId) => !parsed.decisions.some((decision) => decision.sourceId === sourceId))) {
21
+ throw acquisitionOutputError("Acquisition decisions must assess every provisionally admitted source exactly once.");
22
+ }
23
+ const artifacts = new Map((await loadEvidenceArtifactRecords(root, project.id)).map((record) => [
24
+ record.artifactId,
25
+ record,
26
+ ]));
27
+ const decisions = parsed.decisions.map((decision) => {
28
+ const expectedCandidateId = sourceCandidates.get(decision.sourceId);
29
+ if (!expectedCandidateId || expectedCandidateId !== decision.candidateId) {
30
+ throw acquisitionOutputError(`Acquisition decision ${decision.sourceId} is not bound to its ledger candidate.`);
31
+ }
32
+ const boundArtifacts = decision.artifactIds.map((artifactId) => {
33
+ const artifact = artifacts.get(artifactId);
34
+ if (!artifact || artifact.candidateId !== decision.candidateId) {
35
+ throw acquisitionOutputError(`Acquisition decision ${decision.sourceId} refers to an unknown or differently bound artifact.`);
36
+ }
37
+ return artifact;
38
+ });
39
+ const source = sourceById.get(decision.sourceId);
40
+ const provenance = source && isObject(source.provenance) ? source.provenance : {};
41
+ if (provenance.kind === "broker" &&
42
+ boundArtifacts.some((artifact) => !artifactHasDownloadProvenance(artifact, artifacts))) {
43
+ throw acquisitionOutputError(`Network source ${decision.sourceId} includes an artifact without an exact download or derived-file binding.`);
44
+ }
45
+ return { ...decision, artifacts: boundArtifacts };
46
+ });
47
+ return {
48
+ schemaVersion: 1,
49
+ decisions,
50
+ limitations: parsed.limitations,
51
+ gaps: parsed.gaps,
52
+ };
53
+ }
54
+ function artifactHasDownloadProvenance(artifact, artifacts, visited = new Set()) {
55
+ if (artifact.downloadBinding)
56
+ return true;
57
+ if (!artifact.derivedFromArtifactId || visited.has(artifact.artifactId))
58
+ return false;
59
+ visited.add(artifact.artifactId);
60
+ const parent = artifacts.get(artifact.derivedFromArtifactId);
61
+ return parent ? artifactHasDownloadProvenance(parent, artifacts, visited) : false;
62
+ }
63
+ export async function commitAcquisitionAssessments(root, projectId, audit) {
64
+ const events = await readJournal(evidenceLedgerPath(root, projectId));
65
+ const committed = new Set(events
66
+ .filter((event) => event.type === "artifact.assessed")
67
+ .map((event) => String(event.payload.assessmentSha256)));
68
+ for (const decision of audit.decisions) {
69
+ const assessment = {
70
+ sourceId: decision.sourceId,
71
+ candidateId: decision.candidateId,
72
+ artifactIds: decision.artifactIds,
73
+ status: decision.status,
74
+ rationale: decision.rationale,
75
+ limitations: decision.limitations,
76
+ };
77
+ const assessmentSha256 = sha256Text(canonicalJson(assessment));
78
+ if (committed.has(assessmentSha256))
79
+ continue;
80
+ await appendEvidenceLedgerEvent(root, projectId, "artifact.assessed", {
81
+ ...assessment,
82
+ assessmentSha256,
83
+ });
84
+ }
85
+ }
86
+ export async function freezeEvidenceSnapshot(root, project) {
87
+ const projectRoot = join(workspacePaths(root).projects, project.id);
88
+ const evidencePath = join(projectRoot, "outputs", "evidence.json");
89
+ const acquisitionPath = join(projectRoot, "outputs", "acquisition.json");
90
+ const evidence = parseEvidenceRecord(await readFile(evidencePath, "utf8"));
91
+ const audit = parseMaterializedAcquisitionAudit(JSON.parse(await readFile(acquisitionPath, "utf8")));
92
+ if (audit.gaps.length) {
93
+ throw snapshotError("Acquisition audit retains unresolved blocking gaps.", {
94
+ gaps: audit.gaps,
95
+ });
96
+ }
97
+ const decisions = new Map(audit.decisions.map((decision) => [decision.sourceId, decision]));
98
+ const includedSources = evidence.sources.flatMap((source) => {
99
+ const sourceId = String(source.id);
100
+ const decision = decisions.get(sourceId);
101
+ if (!decision || decision.status === "rejected")
102
+ return [];
103
+ const artifactIds = decision.artifacts.map((artifact) => artifact.artifactId);
104
+ const producerVisibleArtifactIds = decision.artifacts
105
+ .filter((artifact) => producerVisibleMediaType(artifact.mediaType))
106
+ .map((artifact) => artifact.artifactId);
107
+ const registeredInputFullText = source.fullTextAvailable === true;
108
+ const producerContextLevel = registeredInputFullText
109
+ ? "full-input"
110
+ : producerVisibleArtifactIds.length
111
+ ? "bounded-text-artifact"
112
+ : "metadata-only";
113
+ return [
114
+ {
115
+ ...source,
116
+ fullTextAvailable: producerContextLevel !== "metadata-only",
117
+ registeredFullFile: registeredInputFullText || artifactIds.length > 0,
118
+ producerContextLevel,
119
+ producerVisibleArtifactIds,
120
+ reviewerBoundFullFile: registeredInputFullText || artifactIds.length > 0,
121
+ locallyAcquired: artifactIds.length > 0,
122
+ visuallyVerified: false,
123
+ acquisitionStatus: decision.status,
124
+ acquisitionRationale: decision.rationale,
125
+ acquisitionLimitations: decision.limitations,
126
+ artifactIds,
127
+ },
128
+ ];
129
+ });
130
+ const coverage = computeSnapshotCoverage(project, includedSources, isObject(evidence.coverage) ? evidence.coverage : {});
131
+ if (coverage.decision !== "pass") {
132
+ throw snapshotError("Evidence snapshot does not satisfy the reviewed coverage gate.", {
133
+ gaps: coverage.gaps,
134
+ });
135
+ }
136
+ const selectedArtifactIds = new Set(audit.decisions
137
+ .filter((decision) => decision.status !== "rejected")
138
+ .flatMap((decision) => decision.artifactIds));
139
+ const [ledger, receipts, registeredArtifacts, ledgerEvents] = await Promise.all([
140
+ verifyEvidenceLedger(root, project.id),
141
+ loadProjectEvidenceReceipts(root, project.id),
142
+ loadEvidenceArtifactRecords(root, project.id),
143
+ readJournal(evidenceLedgerPath(root, project.id)),
144
+ ]);
145
+ const artifacts = registeredArtifacts.filter((artifact) => selectedArtifactIds.has(artifact.artifactId));
146
+ const priorSnapshot = [...ledgerEvents]
147
+ .reverse()
148
+ .find((event) => event.type === "snapshot.frozen");
149
+ const parentSnapshotId = typeof priorSnapshot?.payload.snapshotId === "string" ? priorSnapshot.payload.snapshotId : null;
150
+ const parentSnapshotSha256 = typeof priorSnapshot?.payload.snapshotSha256 === "string"
151
+ ? priorSnapshot.payload.snapshotSha256
152
+ : project.lineage.baseSnapshotSha256;
153
+ const effectiveParentSnapshotId = parentSnapshotId ?? project.lineage.baseSnapshotId;
154
+ const parentSnapshot = parentSnapshotSha256
155
+ ? await loadImmutableEvidenceSnapshot(root, project.id, parentSnapshotSha256)
156
+ : null;
157
+ const delta = snapshotDelta(parentSnapshot, includedSources, artifacts);
158
+ const activityEvents = ledgerEvents.filter((event) => event.type === "activity.recorded");
159
+ const activityByKind = {};
160
+ for (const event of activityEvents) {
161
+ const kind = String(event.payload.kind);
162
+ activityByKind[kind] = (activityByKind[kind] ?? 0) + 1;
163
+ }
164
+ const core = {
165
+ schemaVersion: 1,
166
+ kind: "tiangong-evidence-snapshot",
167
+ parentSnapshotId: effectiveParentSnapshotId,
168
+ parentSnapshotSha256,
169
+ projectId: project.id,
170
+ questionSha256: sha256Text(project.question),
171
+ createdAt: new Date().toISOString(),
172
+ ledgerHead: ledger.head,
173
+ evidenceRecord: {
174
+ path: "outputs/evidence.json",
175
+ sha256: await sha256File(evidencePath),
176
+ },
177
+ acquisitionRecord: {
178
+ path: "outputs/acquisition.json",
179
+ sha256: await sha256File(acquisitionPath),
180
+ },
181
+ receipts: receipts.map((receipt) => ({
182
+ attemptId: receipt.attemptId,
183
+ capabilityId: receipt.capabilityId,
184
+ sha256: receipt.sha256,
185
+ contextSha256: receipt.contextSha256,
186
+ locator: receipt.locator,
187
+ contextLocator: receipt.contextLocator,
188
+ })),
189
+ artifacts,
190
+ sources: includedSources,
191
+ activitySummary: {
192
+ total: activityEvents.length,
193
+ byKind: activityByKind,
194
+ blockedChallenges: activityEvents.filter((event) => event.payload.status === "blocked" && event.payload.challenge !== "none").length,
195
+ linkedCandidateIds: [
196
+ ...new Set(activityEvents.flatMap((event) => Array.isArray(event.payload.candidateIds)
197
+ ? event.payload.candidateIds.filter((candidateId) => typeof candidateId === "string")
198
+ : [])),
199
+ ].sort(),
200
+ },
201
+ coverage,
202
+ limitations: [
203
+ ...evidence.limitations,
204
+ ...audit.limitations,
205
+ ...audit.decisions.flatMap((decision) => decision.limitations),
206
+ ].filter((value, index, values) => values.indexOf(value) === index),
207
+ delta,
208
+ };
209
+ const snapshotId = `snapshot-${sha256Text(canonicalJson(core)).slice(0, 24)}`;
210
+ const withoutHash = { ...core, snapshotId };
211
+ const snapshot = {
212
+ ...withoutHash,
213
+ snapshotSha256: sha256Text(canonicalJson(withoutHash)),
214
+ };
215
+ const logicalPath = `evidence/snapshots/${snapshot.snapshotSha256}.json`;
216
+ const immutablePath = resolveContained(projectRoot, logicalPath);
217
+ const content = `${JSON.stringify(snapshot, null, 2)}\n`;
218
+ if (await pathExists(immutablePath)) {
219
+ if ((await sha256File(immutablePath)) !== sha256Text(content)) {
220
+ throw snapshotError("Content-addressed evidence snapshot drift detected.");
221
+ }
222
+ }
223
+ else {
224
+ await ensureDirectory(dirname(immutablePath));
225
+ await writeTextAtomic(immutablePath, content, 0o444);
226
+ await chmod(immutablePath, 0o444).catch(() => undefined);
227
+ }
228
+ await writeTextAtomic(join(projectRoot, "outputs", "evidence-snapshot.json"), content);
229
+ await appendEvidenceLedgerEvent(root, project.id, "snapshot.frozen", {
230
+ snapshotId,
231
+ snapshotSha256: snapshot.snapshotSha256,
232
+ parentSnapshotId: effectiveParentSnapshotId,
233
+ parentSnapshotSha256,
234
+ path: logicalPath,
235
+ sourceCount: includedSources.length,
236
+ artifactCount: artifacts.length,
237
+ coverage,
238
+ });
239
+ project.evidenceState.currentSnapshotId = snapshot.snapshotId;
240
+ project.evidenceState.currentSnapshotSha256 = snapshot.snapshotSha256;
241
+ return snapshot;
242
+ }
243
+ function producerVisibleMediaType(mediaType) {
244
+ // HTML is frequently a login, paywall, challenge, or error page returned in
245
+ // place of the requested file. Keep it auditable as an artifact, but never
246
+ // let it mechanically satisfy producer-visible/full-text coverage.
247
+ return ["application/json", "text/plain", "text/markdown", "text/csv"].includes(mediaType);
248
+ }
249
+ export async function loadCurrentEvidenceSnapshot(root, projectId) {
250
+ const projectRoot = join(workspacePaths(root).projects, projectId);
251
+ const path = join(projectRoot, "outputs", "evidence-snapshot.json");
252
+ if (!(await pathExists(path))) {
253
+ throw snapshotError("Formal analysis requires a frozen evidence snapshot.");
254
+ }
255
+ const snapshot = parseEvidenceSnapshot(JSON.parse(await readFile(path, "utf8")));
256
+ if (snapshot.projectId !== projectId) {
257
+ throw snapshotError("Current evidence snapshot belongs to a different project.");
258
+ }
259
+ const { snapshotSha256, ...withoutHash } = snapshot;
260
+ if (sha256Text(canonicalJson(withoutHash)) !== snapshotSha256) {
261
+ throw snapshotError("Evidence snapshot hash binding is invalid.");
262
+ }
263
+ const immutablePath = resolveContained(projectRoot, `evidence/snapshots/${snapshotSha256}.json`);
264
+ if (!(await pathExists(immutablePath)) ||
265
+ (await sha256File(immutablePath)) !== (await sha256File(path))) {
266
+ throw snapshotError("Current evidence snapshot is not bound to its immutable copy.");
267
+ }
268
+ const chain = await loadImmutableEvidenceSnapshotChain(root, projectId, snapshotSha256);
269
+ if (canonicalJson(chain[0]) !== canonicalJson(snapshot)) {
270
+ throw snapshotError("Current evidence snapshot does not match the immutable chain leaf.");
271
+ }
272
+ for (const record of [snapshot.evidenceRecord, snapshot.acquisitionRecord]) {
273
+ if ((await sha256File(resolveContained(projectRoot, record.path))) !== record.sha256) {
274
+ throw snapshotError(`Snapshot-bound output drifted: ${record.path}.`);
275
+ }
276
+ }
277
+ const receipts = await loadProjectEvidenceReceipts(root, projectId);
278
+ const receiptById = new Map(receipts.map((receipt) => [receipt.attemptId, receipt]));
279
+ if (receipts.length !== snapshot.receipts.length ||
280
+ snapshot.receipts.some((record) => {
281
+ const receipt = receiptById.get(record.attemptId);
282
+ return (!receipt ||
283
+ canonicalJson(record) !==
284
+ canonicalJson({
285
+ attemptId: receipt.attemptId,
286
+ capabilityId: receipt.capabilityId,
287
+ sha256: receipt.sha256,
288
+ contextSha256: receipt.contextSha256,
289
+ locator: receipt.locator,
290
+ contextLocator: receipt.contextLocator,
291
+ }));
292
+ })) {
293
+ throw snapshotError("Snapshot broker-receipt binding drifted.");
294
+ }
295
+ await verifyEvidenceLedger(root, projectId);
296
+ const snapshotEvents = (await readJournal(evidenceLedgerPath(root, projectId))).filter((event) => event.type === "snapshot.frozen" &&
297
+ event.payload.snapshotId === snapshot.snapshotId &&
298
+ event.payload.snapshotSha256 === snapshot.snapshotSha256);
299
+ const snapshotEvent = snapshotEvents[0];
300
+ if (snapshotEvents.length !== 1 ||
301
+ !snapshotEvent ||
302
+ snapshotEvent.previousHash !== snapshot.ledgerHead ||
303
+ snapshotEvent.payload.path !== `evidence/snapshots/${snapshot.snapshotSha256}.json` ||
304
+ snapshotEvent.payload.parentSnapshotId !== snapshot.parentSnapshotId ||
305
+ snapshotEvent.payload.parentSnapshotSha256 !== snapshot.parentSnapshotSha256) {
306
+ throw snapshotError("Evidence snapshot is not bound to its ledger freeze event.");
307
+ }
308
+ const currentArtifacts = new Map((await loadEvidenceArtifactRecords(root, projectId)).map((record) => [
309
+ record.artifactId,
310
+ record,
311
+ ]));
312
+ for (const artifact of snapshot.artifacts) {
313
+ const current = currentArtifacts.get(artifact.artifactId);
314
+ if (!current || canonicalJson(current) !== canonicalJson(artifact)) {
315
+ throw snapshotError(`Snapshot artifact binding drifted: ${artifact.artifactId}.`);
316
+ }
317
+ }
318
+ return snapshot;
319
+ }
320
+ export async function loadImmutableEvidenceSnapshotChain(root, projectId, leafSnapshotSha256) {
321
+ if (!/^[0-9a-f]{64}$/.test(leafSnapshotSha256)) {
322
+ throw snapshotError("Evidence snapshot chain leaf hash is invalid.");
323
+ }
324
+ const chain = [];
325
+ const visited = new Set();
326
+ let nextSha256 = leafSnapshotSha256;
327
+ let child = null;
328
+ while (nextSha256) {
329
+ if (visited.has(nextSha256) || chain.length >= 1_000) {
330
+ throw snapshotError("Evidence snapshot chain contains a cycle or exceeds its bound.");
331
+ }
332
+ visited.add(nextSha256);
333
+ const snapshot = await loadImmutableEvidenceSnapshot(root, projectId, nextSha256);
334
+ if (child &&
335
+ (child.parentSnapshotSha256 !== snapshot.snapshotSha256 ||
336
+ child.parentSnapshotId !== snapshot.snapshotId)) {
337
+ throw snapshotError("Evidence snapshot parent linkage is invalid.");
338
+ }
339
+ if ((snapshot.parentSnapshotId === null) !== (snapshot.parentSnapshotSha256 === null)) {
340
+ throw snapshotError("Evidence snapshot parent identity is incomplete.");
341
+ }
342
+ chain.push(snapshot);
343
+ child = snapshot;
344
+ nextSha256 = snapshot.parentSnapshotSha256;
345
+ }
346
+ return chain;
347
+ }
348
+ async function loadImmutableEvidenceSnapshot(root, projectId, snapshotSha256) {
349
+ const path = resolveContained(join(workspacePaths(root).projects, projectId), `evidence/snapshots/${snapshotSha256}.json`);
350
+ if (!(await pathExists(path))) {
351
+ throw snapshotError("Parent evidence snapshot is missing from the immutable chain.");
352
+ }
353
+ const snapshot = parseEvidenceSnapshot(JSON.parse(await readFile(path, "utf8")));
354
+ const { snapshotSha256: recordedSha256, ...withoutHash } = snapshot;
355
+ if (recordedSha256 !== snapshotSha256 ||
356
+ sha256Text(canonicalJson(withoutHash)) !== snapshotSha256) {
357
+ throw snapshotError("Parent evidence snapshot failed its hash binding.");
358
+ }
359
+ return snapshot;
360
+ }
361
+ function snapshotDelta(parent, sources, artifacts) {
362
+ const currentSources = new Map(sources.map((source) => [String(source.id), sha256Text(canonicalJson(source))]));
363
+ const parentSources = new Map((parent?.sources ?? []).map((source) => [String(source.id), sha256Text(canonicalJson(source))]));
364
+ const currentArtifactIds = new Set(artifacts.map((artifact) => artifact.artifactId));
365
+ const parentArtifactIds = new Set((parent?.artifacts ?? []).map((artifact) => artifact.artifactId));
366
+ return {
367
+ addedSourceIds: [...currentSources.keys()]
368
+ .filter((sourceId) => !parentSources.has(sourceId))
369
+ .sort(),
370
+ changedSourceIds: [...currentSources.keys()]
371
+ .filter((sourceId) => parentSources.has(sourceId) &&
372
+ parentSources.get(sourceId) !== currentSources.get(sourceId))
373
+ .sort(),
374
+ removedSourceIds: [...parentSources.keys()]
375
+ .filter((sourceId) => !currentSources.has(sourceId))
376
+ .sort(),
377
+ unchangedSourceIds: [...currentSources.keys()]
378
+ .filter((sourceId) => parentSources.has(sourceId) &&
379
+ parentSources.get(sourceId) === currentSources.get(sourceId))
380
+ .sort(),
381
+ addedArtifactIds: [...currentArtifactIds]
382
+ .filter((artifactId) => !parentArtifactIds.has(artifactId))
383
+ .sort(),
384
+ removedArtifactIds: [...parentArtifactIds]
385
+ .filter((artifactId) => !currentArtifactIds.has(artifactId))
386
+ .sort(),
387
+ };
388
+ }
389
+ function parseAcquisitionValue(value) {
390
+ if (value.schemaVersion !== 1 ||
391
+ !Array.isArray(value.decisions) ||
392
+ !Array.isArray(value.limitations) ||
393
+ !Array.isArray(value.gaps) ||
394
+ value.decisions.some((decision) => !isAcquisitionDecision(decision)) ||
395
+ value.limitations.some((item) => typeof item !== "string") ||
396
+ value.gaps.some((item) => typeof item !== "string")) {
397
+ throw acquisitionOutputError("Acquisition audit output is malformed.");
398
+ }
399
+ return value;
400
+ }
401
+ export function parseMaterializedAcquisitionAudit(value) {
402
+ if (!isObject(value))
403
+ throw snapshotError("Materialized acquisition audit is invalid.");
404
+ const parsed = parseAcquisitionValue(value);
405
+ if (parsed.decisions.some((decision) => !Array.isArray(decision.artifacts) ||
406
+ decision.artifacts.some((artifact) => !isObject(artifact)))) {
407
+ throw snapshotError("Materialized acquisition artifact bindings are invalid.");
408
+ }
409
+ return value;
410
+ }
411
+ function parseEvidenceSnapshot(value) {
412
+ if (!isObject(value) ||
413
+ value.schemaVersion !== 1 ||
414
+ value.kind !== "tiangong-evidence-snapshot" ||
415
+ typeof value.snapshotId !== "string" ||
416
+ typeof value.snapshotSha256 !== "string" ||
417
+ !/^[0-9a-f]{64}$/.test(value.snapshotSha256) ||
418
+ typeof value.createdAt !== "string" ||
419
+ !Number.isFinite(Date.parse(value.createdAt)) ||
420
+ typeof value.questionSha256 !== "string" ||
421
+ !/^[0-9a-f]{64}$/.test(value.questionSha256) ||
422
+ typeof value.ledgerHead !== "string" ||
423
+ !/^[0-9a-f]{64}$/.test(value.ledgerHead) ||
424
+ typeof value.projectId !== "string" ||
425
+ (value.parentSnapshotId !== null && typeof value.parentSnapshotId !== "string") ||
426
+ (value.parentSnapshotSha256 !== null &&
427
+ (typeof value.parentSnapshotSha256 !== "string" ||
428
+ !/^[0-9a-f]{64}$/.test(value.parentSnapshotSha256))) ||
429
+ !isSnapshotOutputRecord(value.evidenceRecord, "outputs/evidence.json") ||
430
+ !isSnapshotOutputRecord(value.acquisitionRecord, "outputs/acquisition.json") ||
431
+ !Array.isArray(value.receipts) ||
432
+ value.receipts.some((receipt) => !isSnapshotReceipt(receipt)) ||
433
+ !Array.isArray(value.sources) ||
434
+ !Array.isArray(value.artifacts) ||
435
+ !isActivitySummary(value.activitySummary) ||
436
+ !isObject(value.coverage) ||
437
+ !Array.isArray(value.limitations) ||
438
+ value.limitations.some((limitation) => typeof limitation !== "string") ||
439
+ !isObject(value.delta) ||
440
+ Object.values(value.delta).some((items) => !Array.isArray(items) || items.some((item) => typeof item !== "string"))) {
441
+ throw snapshotError("Evidence snapshot is malformed.");
442
+ }
443
+ return value;
444
+ }
445
+ function isActivitySummary(value) {
446
+ return (isObject(value) &&
447
+ Number.isInteger(value.total) &&
448
+ Number(value.total) >= 0 &&
449
+ isObject(value.byKind) &&
450
+ Object.values(value.byKind).every((count) => Number.isInteger(count) && Number(count) >= 0) &&
451
+ Number.isInteger(value.blockedChallenges) &&
452
+ Number(value.blockedChallenges) >= 0 &&
453
+ Array.isArray(value.linkedCandidateIds) &&
454
+ value.linkedCandidateIds.every((candidateId) => typeof candidateId === "string"));
455
+ }
456
+ function isSnapshotOutputRecord(value, path) {
457
+ return (isObject(value) &&
458
+ value.path === path &&
459
+ typeof value.sha256 === "string" &&
460
+ /^[0-9a-f]{64}$/.test(value.sha256));
461
+ }
462
+ function isSnapshotReceipt(value) {
463
+ return (isObject(value) &&
464
+ typeof value.attemptId === "string" &&
465
+ typeof value.capabilityId === "string" &&
466
+ typeof value.sha256 === "string" &&
467
+ /^[0-9a-f]{64}$/.test(value.sha256) &&
468
+ typeof value.contextSha256 === "string" &&
469
+ /^[0-9a-f]{64}$/.test(value.contextSha256) &&
470
+ value.locator === `evidence/objects/${value.sha256.slice(0, 2)}/${value.sha256}` &&
471
+ value.contextLocator ===
472
+ `evidence/objects/${value.contextSha256.slice(0, 2)}/${value.contextSha256}`);
473
+ }
474
+ function isAcquisitionDecision(value) {
475
+ return (isObject(value) &&
476
+ typeof value.sourceId === "string" &&
477
+ typeof value.candidateId === "string" &&
478
+ Array.isArray(value.artifactIds) &&
479
+ value.artifactIds.every((item) => typeof item === "string") &&
480
+ ["accepted", "limited", "rejected"].includes(String(value.status)) &&
481
+ typeof value.rationale === "string" &&
482
+ Array.isArray(value.limitations) &&
483
+ value.limitations.every((item) => typeof item === "string"));
484
+ }
485
+ async function admittedSourceCandidateMap(root, projectId) {
486
+ const events = await readJournal(evidenceLedgerPath(root, projectId));
487
+ const result = new Map();
488
+ for (const event of events) {
489
+ if (event.type === "candidate.admitted" &&
490
+ typeof event.payload.sourceId === "string" &&
491
+ typeof event.payload.candidateId === "string") {
492
+ result.set(event.payload.sourceId, event.payload.candidateId);
493
+ }
494
+ }
495
+ return result;
496
+ }
497
+ function computeSnapshotCoverage(project, sources, priorCoverage) {
498
+ const gaps = [];
499
+ if (sources.length < project.evidenceRequirements.minSources) {
500
+ gaps.push(`requires ${project.evidenceRequirements.minSources} source(s), found ${sources.length}`);
501
+ }
502
+ const fullTextSources = sources.filter((source) => source.fullTextAvailable === true).length;
503
+ if (fullTextSources < project.evidenceRequirements.minFullTextSources) {
504
+ gaps.push(`requires ${project.evidenceRequirements.minFullTextSources} full-text source(s), found ${fullTextSources}`);
505
+ }
506
+ const intervals = sources.flatMap((source) => {
507
+ const interval = publicationInterval(source.publicationDate);
508
+ return interval ? [interval] : [];
509
+ });
510
+ const inRange = intervals.filter((interval) => (project.evidenceRequirements.publicationDateFrom === null ||
511
+ interval.latest >= project.evidenceRequirements.publicationDateFrom) &&
512
+ (project.evidenceRequirements.publicationDateTo === null ||
513
+ interval.earliest <= project.evidenceRequirements.publicationDateTo)).length;
514
+ if (inRange < project.evidenceRequirements.minDatedSources) {
515
+ gaps.push(`requires ${project.evidenceRequirements.minDatedSources} dated source(s) within the publication boundary, found ${inRange}`);
516
+ }
517
+ const sourceTypes = [...new Set(sources.map((source) => String(source.sourceType)))].sort();
518
+ for (const sourceType of project.evidenceRequirements.sourceTypes) {
519
+ if (!sourceTypes.includes(sourceType))
520
+ gaps.push(`missing required source type: ${sourceType}`);
521
+ }
522
+ const priorDimensions = Array.isArray(priorCoverage.dimensions)
523
+ ? priorCoverage.dimensions.filter(isObject)
524
+ : [];
525
+ const dimensions = project.evidenceRequirements.dimensions.map((dimension) => {
526
+ const sourceIds = sources
527
+ .filter((source) => Array.isArray(source.coverageDimensions) && source.coverageDimensions.includes(dimension))
528
+ .map((source) => String(source.id))
529
+ .sort();
530
+ if (!sourceIds.length)
531
+ gaps.push(`missing evidence dimension: ${dimension}`);
532
+ const prior = priorDimensions.find((entry) => entry.id === dimension);
533
+ const priorSourceIds = Array.isArray(prior?.sourceIds)
534
+ ? prior.sourceIds.filter((value) => typeof value === "string")
535
+ : [];
536
+ const retainedAllPriorSources = priorSourceIds.every((sourceId) => sourceIds.includes(sourceId));
537
+ const status = sourceIds.length
538
+ ? prior?.status === "covered" && retainedAllPriorSources
539
+ ? "covered"
540
+ : "partial"
541
+ : "missing";
542
+ return { id: dimension, status, sourceIds };
543
+ });
544
+ return {
545
+ dimensions,
546
+ sourceTypes,
547
+ fullTextSources,
548
+ datedSources: intervals.length,
549
+ publicationDateRange: {
550
+ earliest: intervals.length ? intervals.map((interval) => interval.earliest).sort()[0] : null,
551
+ latest: intervals.length
552
+ ? intervals
553
+ .map((interval) => interval.latest)
554
+ .sort()
555
+ .at(-1)
556
+ : null,
557
+ },
558
+ decision: gaps.length ? "insufficient" : "pass",
559
+ gaps,
560
+ };
561
+ }
562
+ function publicationInterval(value) {
563
+ if (typeof value !== "string")
564
+ return null;
565
+ const match = /^(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?$/.exec(value);
566
+ if (!match)
567
+ return null;
568
+ if (match[3])
569
+ return { earliest: value, latest: value };
570
+ if (match[2]) {
571
+ const year = Number(match[1]);
572
+ const month = Number(match[2]);
573
+ if (month < 1 || month > 12)
574
+ return null;
575
+ const lastDay = new Date(Date.UTC(year, month, 0)).getUTCDate();
576
+ return {
577
+ earliest: `${match[1]}-${match[2]}-01`,
578
+ latest: `${match[1]}-${match[2]}-${String(lastDay).padStart(2, "0")}`,
579
+ };
580
+ }
581
+ return { earliest: `${match[1]}-01-01`, latest: `${match[1]}-12-31` };
582
+ }
583
+ function acquisitionOutputError(message) {
584
+ return new StructuredOutputError(message, { validation: [message] });
585
+ }
586
+ function snapshotError(message, details) {
587
+ return new CliError(message, {
588
+ code: "RESEARCH_EVIDENCE_SNAPSHOT_INVALID",
589
+ exitCode: 3,
590
+ details,
591
+ });
592
+ }
593
+ //# sourceMappingURL=acquisition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acquisition.js","sourceRoot":"","sources":["../../../src/research/workspace/acquisition.ts"],"names":[],"mappings":"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"}