cawdex 1.35.62 → 1.35.64

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.
@@ -819,6 +819,12 @@ export interface SourceResearchCoverage {
819
819
  resultSources: string[];
820
820
  topUrls: string[];
821
821
  recentDays: number[];
822
+ datedHitCount: number;
823
+ freshHitCount: number;
824
+ staleHitCount: number;
825
+ unknownDateHitCount: number;
826
+ newestDate: string | null;
827
+ oldestDate: string | null;
822
828
  freshTargetedCoverage: boolean;
823
829
  kaggleCompetitionsSkipped: boolean;
824
830
  coverageNotes: string[];
@@ -3135,6 +3135,12 @@ export function buildSourceResearchCoverage(events) {
3135
3135
  resultSources: [],
3136
3136
  topUrls: [],
3137
3137
  recentDays: [],
3138
+ datedHitCount: 0,
3139
+ freshHitCount: 0,
3140
+ staleHitCount: 0,
3141
+ unknownDateHitCount: 0,
3142
+ newestDate: null,
3143
+ oldestDate: null,
3138
3144
  freshTargetedCoverage: false,
3139
3145
  kaggleCompetitionsSkipped: false,
3140
3146
  coverageNotes: [],
@@ -6622,6 +6628,19 @@ function collectSourceResearchJsonEvidence(coverage, packet) {
6622
6628
  coverage.sourceHitCount += digestHitCount;
6623
6629
  if (digestErrorCount != null)
6624
6630
  coverage.sourceErrorCount += digestErrorCount;
6631
+ const digestDatedCount = numberFromUnknown(digest?.datedHitCount);
6632
+ const digestFreshCount = numberFromUnknown(digest?.freshHitCount);
6633
+ const digestStaleCount = numberFromUnknown(digest?.staleHitCount);
6634
+ const digestUnknownDateCount = numberFromUnknown(digest?.unknownDateHitCount);
6635
+ if (digestDatedCount != null)
6636
+ coverage.datedHitCount += digestDatedCount;
6637
+ if (digestFreshCount != null)
6638
+ coverage.freshHitCount += digestFreshCount;
6639
+ if (digestStaleCount != null)
6640
+ coverage.staleHitCount += digestStaleCount;
6641
+ if (digestUnknownDateCount != null)
6642
+ coverage.unknownDateHitCount += digestUnknownDateCount;
6643
+ mergeSourceResearchDateRange(coverage, stringFromUnknown(digest?.oldestDate), stringFromUnknown(digest?.newestDate));
6625
6644
  const digestSources = objectFromUnknown(digest?.sources);
6626
6645
  if (digestSources) {
6627
6646
  for (const source of Object.keys(digestSources)) {
@@ -6639,14 +6658,54 @@ function collectSourceResearchJsonEvidence(coverage, packet) {
6639
6658
  const record = objectFromUnknown(hit);
6640
6659
  const source = typeof record?.source === 'string' ? record.source : '';
6641
6660
  const url = typeof record?.url === 'string' ? record.url : '';
6661
+ const date = typeof record?.date === 'string' ? record.date : '';
6642
6662
  if (source)
6643
6663
  pushUnique(coverage.resultSources, normalizeResearchSourceLabel(source));
6644
6664
  if (url && coverage.topUrls.length < 12)
6645
6665
  pushUnique(coverage.topUrls, url.replace(/[),.;]+$/, ''));
6666
+ if (digestDatedCount == null && digestFreshCount == null && digestStaleCount == null && digestUnknownDateCount == null) {
6667
+ collectSourceResearchHitFreshness(coverage, date, recentDays);
6668
+ }
6646
6669
  }
6647
6670
  if (digestErrorCount == null)
6648
6671
  coverage.sourceErrorCount += stringArrayFromUnknown(packet.errors).length;
6649
6672
  }
6673
+ function collectSourceResearchHitFreshness(coverage, date, recentDays) {
6674
+ const normalized = normalizeTraceIsoDate(date);
6675
+ if (!normalized) {
6676
+ coverage.unknownDateHitCount++;
6677
+ return;
6678
+ }
6679
+ coverage.datedHitCount++;
6680
+ mergeSourceResearchDateRange(coverage, normalized, normalized);
6681
+ if (Number.isFinite(recentDays) && recentDays > 0) {
6682
+ const ms = Date.parse(normalized);
6683
+ if (Number.isFinite(ms) && ms >= Date.now() - Math.floor(recentDays) * 24 * 60 * 60 * 1000) {
6684
+ coverage.freshHitCount++;
6685
+ }
6686
+ else {
6687
+ coverage.staleHitCount++;
6688
+ }
6689
+ }
6690
+ }
6691
+ function mergeSourceResearchDateRange(coverage, oldest, newest) {
6692
+ const normalizedOldest = normalizeTraceIsoDate(oldest);
6693
+ const normalizedNewest = normalizeTraceIsoDate(newest);
6694
+ if (normalizedOldest && (!coverage.oldestDate || normalizedOldest < coverage.oldestDate)) {
6695
+ coverage.oldestDate = normalizedOldest;
6696
+ }
6697
+ if (normalizedNewest && (!coverage.newestDate || normalizedNewest > coverage.newestDate)) {
6698
+ coverage.newestDate = normalizedNewest;
6699
+ }
6700
+ }
6701
+ function normalizeTraceIsoDate(value) {
6702
+ if (!value)
6703
+ return undefined;
6704
+ const ms = Date.parse(value);
6705
+ if (!Number.isFinite(ms))
6706
+ return undefined;
6707
+ return new Date(ms).toISOString().slice(0, 10);
6708
+ }
6650
6709
  function applySourceCoverageNote(coverage, note) {
6651
6710
  const normalized = note.replace(/\s+/g, ' ').trim();
6652
6711
  if (!normalized)
@@ -6762,6 +6821,22 @@ function collectSourceResearchEvidence(coverage, output) {
6762
6821
  if (authLine) {
6763
6822
  applySourceAuthPreview(coverage, authLine[1]);
6764
6823
  }
6824
+ const datedHits = line.match(/^-\s+dated_hits:\s+(\d+)/i);
6825
+ if (datedHits)
6826
+ coverage.datedHitCount += Number(datedHits[1]);
6827
+ const freshHits = line.match(/^-\s+fresh_hits:\s+(\d+)/i);
6828
+ if (freshHits)
6829
+ coverage.freshHitCount += Number(freshHits[1]);
6830
+ const staleHits = line.match(/^-\s+stale_hits:\s+(\d+)/i);
6831
+ if (staleHits)
6832
+ coverage.staleHitCount += Number(staleHits[1]);
6833
+ const unknownDateHits = line.match(/^-\s+unknown_date_hits:\s+(\d+)/i);
6834
+ if (unknownDateHits)
6835
+ coverage.unknownDateHitCount += Number(unknownDateHits[1]);
6836
+ const dateRange = line.match(/^-\s+date_range:\s+(\d{4}-\d{2}-\d{2})\.\.(\d{4}-\d{2}-\d{2})/i);
6837
+ if (dateRange) {
6838
+ mergeSourceResearchDateRange(coverage, dateRange[1], dateRange[2]);
6839
+ }
6765
6840
  const url = line.match(/^https?:\/\/\S+/i)?.[0];
6766
6841
  if (url && coverage.topUrls.length < 12) {
6767
6842
  pushUnique(coverage.topUrls, url.replace(/[),.;]+$/, ''));
@@ -7438,6 +7513,9 @@ function numberFromUnknown(value) {
7438
7513
  const n = Number(value);
7439
7514
  return Number.isFinite(n) ? n : null;
7440
7515
  }
7516
+ function stringFromUnknown(value) {
7517
+ return typeof value === 'string' ? value : undefined;
7518
+ }
7441
7519
  function booleanFromUnknown(value) {
7442
7520
  return typeof value === 'boolean' ? value : null;
7443
7521
  }
@@ -7489,6 +7567,11 @@ function formatSourceCoverage(coverage) {
7489
7567
  huggingFace,
7490
7568
  kaggle,
7491
7569
  coverage.recentDays.length ? `recent_days:${coverage.recentDays.join('|')}` : 'recent_days:none',
7570
+ `dated_hits:${coverage.datedHitCount}`,
7571
+ `fresh_hits:${coverage.freshHitCount}`,
7572
+ `stale_hits:${coverage.staleHitCount}`,
7573
+ `unknown_date_hits:${coverage.unknownDateHitCount}`,
7574
+ coverage.oldestDate && coverage.newestDate ? `date_range:${coverage.oldestDate}..${coverage.newestDate}` : null,
7492
7575
  coverage.resultSources.length ? `result_sources:${coverage.resultSources.slice(0, 8).join('|')}` : null,
7493
7576
  authSignals ? `auth:${authSignals}` : null,
7494
7577
  coverage.kaggleCompetitionsSkipped ? 'kaggle_competitions:skipped' : null,
@@ -8092,6 +8175,11 @@ function formatResearchSourcesJsonPreviewLines(packet) {
8092
8175
  `- sources: ${sourceSummary}`,
8093
8176
  authPreview ? `- auth: ${authPreview}` : null,
8094
8177
  `- top_urls: ${topUrls.length ? topUrls.join(' | ') : 'none'}`,
8178
+ `- dated_hits: ${numberFromUnknown(digest?.datedHitCount) ?? 0}`,
8179
+ `- fresh_hits: ${numberFromUnknown(digest?.freshHitCount) ?? 0}`,
8180
+ `- stale_hits: ${numberFromUnknown(digest?.staleHitCount) ?? 0}`,
8181
+ `- unknown_date_hits: ${numberFromUnknown(digest?.unknownDateHitCount) ?? 0}`,
8182
+ `- date_range: ${stringFromUnknown(digest?.oldestDate) && stringFromUnknown(digest?.newestDate) ? `${stringFromUnknown(digest?.oldestDate)}..${stringFromUnknown(digest?.newestDate)}` : 'none'}`,
8095
8183
  ].filter((line) => line != null);
8096
8184
  lines.push('', ...digestLines);
8097
8185
  for (const hit of arrayFromUnknown(packet.hits)) {
@@ -8106,6 +8194,9 @@ function formatResearchSourcesJsonPreviewLines(packet) {
8106
8194
  lines.push('', `## ${source}: ${title}`);
8107
8195
  if (url)
8108
8196
  lines.push(url);
8197
+ if (typeof record.date === 'string' && record.date.trim()) {
8198
+ lines.push(`date ${record.date.trim()}`);
8199
+ }
8109
8200
  }
8110
8201
  const errors = stringArrayFromUnknown(packet.errors);
8111
8202
  if (errors.length > 0) {