scientify 1.12.2 → 1.13.0
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.
- package/README.md +3 -1
- package/dist/src/hooks/research-mode.d.ts.map +1 -1
- package/dist/src/hooks/research-mode.js +4 -3
- package/dist/src/hooks/research-mode.js.map +1 -1
- package/dist/src/knowledge-state/store.d.ts.map +1 -1
- package/dist/src/knowledge-state/store.js +105 -36
- package/dist/src/knowledge-state/store.js.map +1 -1
- package/dist/src/knowledge-state/types.d.ts +28 -0
- package/dist/src/knowledge-state/types.d.ts.map +1 -1
- package/dist/src/literature/subscription-state.d.ts.map +1 -1
- package/dist/src/literature/subscription-state.js +404 -34
- package/dist/src/literature/subscription-state.js.map +1 -1
- package/dist/src/research-subscriptions/prompt.d.ts.map +1 -1
- package/dist/src/research-subscriptions/prompt.js +11 -7
- package/dist/src/research-subscriptions/prompt.js.map +1 -1
- package/dist/src/tools/scientify-literature-state.d.ts +32 -0
- package/dist/src/tools/scientify-literature-state.d.ts.map +1 -1
- package/dist/src/tools/scientify-literature-state.js +75 -1
- package/dist/src/tools/scientify-literature-state.js.map +1 -1
- package/package.json +1 -1
- package/skills/research-subscription/SKILL.md +7 -6
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export type KnowledgeChangeType = "NEW" | "CONFIRM" | "REVISE" | "BRIDGE";
|
|
2
2
|
export type RunProfile = "fast" | "strict";
|
|
3
|
+
export type QualityGateMode = "soft";
|
|
4
|
+
export type QualityGateSeverity = "ok" | "warn" | "fatal";
|
|
3
5
|
export type TriggerState = {
|
|
4
6
|
consecutiveNewReviseDays: number;
|
|
5
7
|
bridgeCount7d: number;
|
|
@@ -103,6 +105,22 @@ export type KnowledgeRunLogInput = {
|
|
|
103
105
|
tempCleanupNote?: string;
|
|
104
106
|
fullTextAttempted?: number;
|
|
105
107
|
fullTextCompleted?: number;
|
|
108
|
+
recallTierStats?: {
|
|
109
|
+
tierA?: {
|
|
110
|
+
candidates: number;
|
|
111
|
+
selected: number;
|
|
112
|
+
};
|
|
113
|
+
tierB?: {
|
|
114
|
+
candidates: number;
|
|
115
|
+
selected: number;
|
|
116
|
+
};
|
|
117
|
+
tierC?: {
|
|
118
|
+
candidates: number;
|
|
119
|
+
selected: number;
|
|
120
|
+
};
|
|
121
|
+
};
|
|
122
|
+
reflectionStepExecuted?: boolean;
|
|
123
|
+
reflectionStepResultCount?: number;
|
|
106
124
|
};
|
|
107
125
|
export type KnowledgeStateInput = {
|
|
108
126
|
corePapers?: KnowledgePaperInput[];
|
|
@@ -140,6 +158,11 @@ export type KnowledgeStateSummary = {
|
|
|
140
158
|
recentFullTextReadCount: number;
|
|
141
159
|
recentNotFullTextReadCount: number;
|
|
142
160
|
qualityGate: {
|
|
161
|
+
mode: QualityGateMode;
|
|
162
|
+
severity: QualityGateSeverity;
|
|
163
|
+
warnings: string[];
|
|
164
|
+
fatalReasons: string[];
|
|
165
|
+
blocking: boolean;
|
|
143
166
|
passed: boolean;
|
|
144
167
|
fullTextCoveragePct: number;
|
|
145
168
|
evidenceBindingRatePct: number;
|
|
@@ -187,6 +210,11 @@ export type KnowledgeStreamState = {
|
|
|
187
210
|
recentFullTextReadCount: number;
|
|
188
211
|
recentNotFullTextReadCount: number;
|
|
189
212
|
lastQualityGate: {
|
|
213
|
+
mode: QualityGateMode;
|
|
214
|
+
severity: QualityGateSeverity;
|
|
215
|
+
warnings: string[];
|
|
216
|
+
fatalReasons: string[];
|
|
217
|
+
blocking: boolean;
|
|
190
218
|
passed: boolean;
|
|
191
219
|
fullTextCoveragePct: number;
|
|
192
220
|
evidenceBindingRatePct: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/knowledge-state/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAAG,KAAK,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAC1E,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/knowledge-state/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscription-state.d.ts","sourceRoot":"","sources":["../../../src/literature/subscription-state.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"subscription-state.d.ts","sourceRoot":"","sources":["../../../src/literature/subscription-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,12 @@ const MAX_STRICT_FULLTEXT_ATTEMPTS = 5;
|
|
|
16
16
|
const ARXIV_API_URL = "https://export.arxiv.org/api/query";
|
|
17
17
|
const STRICT_EMPTY_FALLBACK_MAX_RESULTS = 12;
|
|
18
18
|
const STRICT_EMPTY_FALLBACK_MAX_QUERIES = 4;
|
|
19
|
+
const DEFAULT_STRICT_CANDIDATE_POOL = 24;
|
|
20
|
+
const DEFAULT_STRICT_MIN_CORE_FLOOR = 3;
|
|
21
|
+
const TIER_A_RATIO = 0.5;
|
|
22
|
+
const TIER_B_RATIO = 0.35;
|
|
23
|
+
const TIER_C_RATIO = 0.15;
|
|
24
|
+
const REFLECTION_MAX_ADDED_PAPERS = 2;
|
|
19
25
|
const FEEDBACK_SIGNAL_DELTA = {
|
|
20
26
|
read: 1,
|
|
21
27
|
skip: -1,
|
|
@@ -426,16 +432,7 @@ function parseArxivAtomCandidates(xml) {
|
|
|
426
432
|
}
|
|
427
433
|
return parsed;
|
|
428
434
|
}
|
|
429
|
-
function
|
|
430
|
-
const normalizedTopic = normalizeText(topic);
|
|
431
|
-
const queries = [normalizedTopic];
|
|
432
|
-
const tokens = tokenizeKeywords(normalizedTopic).filter((token) => token.length >= 3).slice(0, 8);
|
|
433
|
-
if (tokens.length >= 2) {
|
|
434
|
-
queries.push(tokens.join(" "));
|
|
435
|
-
}
|
|
436
|
-
if (tokens.length >= 4) {
|
|
437
|
-
queries.push(tokens.slice(0, 4).join(" "));
|
|
438
|
-
}
|
|
435
|
+
function dedupeQueries(queries, limit) {
|
|
439
436
|
const seen = new Set();
|
|
440
437
|
const deduped = [];
|
|
441
438
|
for (const query of queries) {
|
|
@@ -444,8 +441,42 @@ function buildStrictFallbackQueries(topic) {
|
|
|
444
441
|
continue;
|
|
445
442
|
seen.add(key);
|
|
446
443
|
deduped.push(query);
|
|
444
|
+
if (deduped.length >= limit)
|
|
445
|
+
break;
|
|
447
446
|
}
|
|
448
|
-
return deduped
|
|
447
|
+
return deduped;
|
|
448
|
+
}
|
|
449
|
+
function buildStrictFallbackQueries(topic) {
|
|
450
|
+
const normalizedTopic = normalizeText(topic);
|
|
451
|
+
const tokens = tokenizeKeywords(normalizedTopic).filter((token) => token.length >= 3).slice(0, 10);
|
|
452
|
+
const queries = [normalizedTopic];
|
|
453
|
+
if (tokens.length >= 2)
|
|
454
|
+
queries.push(tokens.slice(0, 4).join(" "));
|
|
455
|
+
if (tokens.length >= 3)
|
|
456
|
+
queries.push(tokens.slice(0, 3).join(" "));
|
|
457
|
+
return dedupeQueries(queries, STRICT_EMPTY_FALLBACK_MAX_QUERIES);
|
|
458
|
+
}
|
|
459
|
+
function buildTieredFallbackQueries(topic) {
|
|
460
|
+
const normalizedTopic = normalizeText(topic);
|
|
461
|
+
const tokens = tokenizeKeywords(normalizedTopic).filter((token) => token.length >= 3).slice(0, 10);
|
|
462
|
+
const tierA = buildStrictFallbackQueries(topic);
|
|
463
|
+
const tierB = dedupeQueries([
|
|
464
|
+
...tokens.slice(0, 6).map((token) => `${token} adaptation`),
|
|
465
|
+
...tokens.slice(0, 6).map((token) => `${token} method`),
|
|
466
|
+
...tokens.slice(0, 4).map((token) => `${token} framework`),
|
|
467
|
+
tokens.slice(0, 4).join(" "),
|
|
468
|
+
], STRICT_EMPTY_FALLBACK_MAX_QUERIES);
|
|
469
|
+
const tierC = dedupeQueries([
|
|
470
|
+
...tokens.slice(0, 5).map((token) => `${token} transfer learning`),
|
|
471
|
+
...tokens.slice(0, 5).map((token) => `${token} benchmark`),
|
|
472
|
+
...tokens.slice(0, 5).map((token) => `${token} retrieval`),
|
|
473
|
+
`${normalizedTopic} cross domain`,
|
|
474
|
+
], STRICT_EMPTY_FALLBACK_MAX_QUERIES);
|
|
475
|
+
return {
|
|
476
|
+
tierA: tierA.length > 0 ? tierA : [normalizedTopic],
|
|
477
|
+
tierB,
|
|
478
|
+
tierC,
|
|
479
|
+
};
|
|
449
480
|
}
|
|
450
481
|
function countTokenOverlap(tokens, text) {
|
|
451
482
|
const hay = ` ${normalizeText(text).toLowerCase()} `;
|
|
@@ -458,14 +489,15 @@ function countTokenOverlap(tokens, text) {
|
|
|
458
489
|
}
|
|
459
490
|
return score;
|
|
460
491
|
}
|
|
461
|
-
function scoreFallbackCandidate(topicTokens, paper) {
|
|
492
|
+
function scoreFallbackCandidate(topicTokens, paper, tier) {
|
|
462
493
|
const titleOverlap = countTokenOverlap(topicTokens, paper.title);
|
|
463
494
|
const abstractOverlap = countTokenOverlap(topicTokens, paper.summary ?? "");
|
|
464
495
|
const publishedAt = paper.published ? Date.parse(paper.published) : NaN;
|
|
465
496
|
const recencyBoost = Number.isFinite(publishedAt)
|
|
466
497
|
? Math.max(0, Math.min(8, (Date.now() - publishedAt) / (1000 * 60 * 60 * 24 * -180)))
|
|
467
498
|
: 0;
|
|
468
|
-
const
|
|
499
|
+
const tierBoost = tier === "tierA" ? 8 : tier === "tierB" ? 4 : 1;
|
|
500
|
+
const rawScore = 60 + tierBoost + titleOverlap * 8 + abstractOverlap * 3 + recencyBoost;
|
|
469
501
|
return Math.max(50, Math.min(99, Math.round(rawScore)));
|
|
470
502
|
}
|
|
471
503
|
async function fetchArxivFallbackByQuery(query) {
|
|
@@ -498,34 +530,73 @@ async function fetchArxivFallbackByQuery(query) {
|
|
|
498
530
|
}
|
|
499
531
|
}
|
|
500
532
|
async function strictCoreFallbackSeed(args) {
|
|
501
|
-
const
|
|
533
|
+
const tieredQueries = buildTieredFallbackQueries(args.topic);
|
|
502
534
|
const byId = new Map();
|
|
503
535
|
const traces = [];
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
536
|
+
const tierStats = {
|
|
537
|
+
tierA: { candidates: 0, selected: 0 },
|
|
538
|
+
tierB: { candidates: 0, selected: 0 },
|
|
539
|
+
tierC: { candidates: 0, selected: 0 },
|
|
540
|
+
};
|
|
541
|
+
for (const tier of ["tierA", "tierB", "tierC"]) {
|
|
542
|
+
for (const query of tieredQueries[tier]) {
|
|
543
|
+
const rows = await fetchArxivFallbackByQuery(query);
|
|
544
|
+
tierStats[tier].candidates += rows.length;
|
|
545
|
+
traces.push({
|
|
546
|
+
query,
|
|
547
|
+
reason: `strict_core_backfill_seed_${tier}`,
|
|
548
|
+
source: "arxiv",
|
|
549
|
+
candidates: rows.length,
|
|
550
|
+
filteredTo: rows.length,
|
|
551
|
+
resultCount: rows.length,
|
|
552
|
+
});
|
|
553
|
+
for (const row of rows) {
|
|
554
|
+
if (!byId.has(row.id))
|
|
555
|
+
byId.set(row.id, { row, tier });
|
|
556
|
+
}
|
|
517
557
|
}
|
|
518
558
|
}
|
|
519
559
|
const topicTokens = tokenizeKeywords(args.topic);
|
|
520
560
|
const ranked = [...byId.values()]
|
|
521
|
-
.map((row) => ({
|
|
561
|
+
.map(({ row, tier }) => ({
|
|
522
562
|
row,
|
|
523
|
-
|
|
563
|
+
tier,
|
|
564
|
+
score: scoreFallbackCandidate(topicTokens, row, tier),
|
|
524
565
|
}))
|
|
525
566
|
.sort((a, b) => b.score - a.score);
|
|
526
567
|
const unseen = ranked.filter((item) => !args.knownPaperIds.has(item.row.id));
|
|
527
568
|
const effectivePool = unseen.length > 0 ? unseen : ranked;
|
|
528
|
-
const
|
|
569
|
+
const candidatePool = Math.max(1, Math.min(40, Math.floor(args.candidatePool ?? Math.max(DEFAULT_STRICT_CANDIDATE_POOL, args.maxPapers * 4))));
|
|
570
|
+
const minCoreFloor = Math.max(1, Math.min(args.maxPapers, args.minCoreFloor ?? DEFAULT_STRICT_MIN_CORE_FLOOR));
|
|
571
|
+
const targetCount = Math.max(minCoreFloor, Math.min(args.maxPapers, candidatePool));
|
|
572
|
+
const tierTargets = {
|
|
573
|
+
tierA: Math.max(1, Math.round(targetCount * TIER_A_RATIO)),
|
|
574
|
+
tierB: Math.max(1, Math.round(targetCount * TIER_B_RATIO)),
|
|
575
|
+
tierC: Math.max(0, targetCount - Math.round(targetCount * TIER_A_RATIO) - Math.round(targetCount * TIER_B_RATIO)),
|
|
576
|
+
};
|
|
577
|
+
if (tierTargets.tierA + tierTargets.tierB + tierTargets.tierC < targetCount) {
|
|
578
|
+
tierTargets.tierA += targetCount - (tierTargets.tierA + tierTargets.tierB + tierTargets.tierC);
|
|
579
|
+
}
|
|
580
|
+
const selected = [];
|
|
581
|
+
const selectedIds = new Set();
|
|
582
|
+
for (const tier of ["tierA", "tierB", "tierC"]) {
|
|
583
|
+
const picked = effectivePool
|
|
584
|
+
.filter((item) => item.tier === tier && !selectedIds.has(item.row.id))
|
|
585
|
+
.slice(0, tierTargets[tier]);
|
|
586
|
+
for (const item of picked) {
|
|
587
|
+
selected.push(item);
|
|
588
|
+
selectedIds.add(item.row.id);
|
|
589
|
+
tierStats[tier].selected += 1;
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
if (selected.length < targetCount) {
|
|
593
|
+
const fill = effectivePool.filter((item) => !selectedIds.has(item.row.id)).slice(0, targetCount - selected.length);
|
|
594
|
+
for (const item of fill) {
|
|
595
|
+
selected.push(item);
|
|
596
|
+
selectedIds.add(item.row.id);
|
|
597
|
+
tierStats[item.tier].selected += 1;
|
|
598
|
+
}
|
|
599
|
+
}
|
|
529
600
|
const papers = selected.map(({ row, score }) => ({
|
|
530
601
|
id: row.id,
|
|
531
602
|
title: row.title,
|
|
@@ -550,7 +621,233 @@ async function strictCoreFallbackSeed(args) {
|
|
|
550
621
|
papers,
|
|
551
622
|
corePapers,
|
|
552
623
|
explorationTrace: traces,
|
|
553
|
-
notes: `strict_core_backfill_seed selected=${selected.length}
|
|
624
|
+
notes: `strict_core_backfill_seed selected=${selected.length} pool=${candidatePool} floor=${minCoreFloor}`,
|
|
625
|
+
recallTierStats: tierStats,
|
|
626
|
+
};
|
|
627
|
+
}
|
|
628
|
+
function isPaperFullTextRead(paper) {
|
|
629
|
+
return paper.fullTextRead === true || paper.readStatus === "fulltext";
|
|
630
|
+
}
|
|
631
|
+
function hasStrictEvidenceAnchor(paper) {
|
|
632
|
+
const anchors = paper.evidenceAnchors ?? [];
|
|
633
|
+
return anchors.some((anchor) => Boolean(anchor?.section?.trim()) &&
|
|
634
|
+
Boolean(anchor?.locator?.trim()) &&
|
|
635
|
+
Boolean(anchor?.quote?.trim()));
|
|
636
|
+
}
|
|
637
|
+
function firstNonEmptyText(values) {
|
|
638
|
+
for (const value of values) {
|
|
639
|
+
if (typeof value !== "string")
|
|
640
|
+
continue;
|
|
641
|
+
const normalized = normalizeText(value);
|
|
642
|
+
if (normalized.length > 0)
|
|
643
|
+
return normalized;
|
|
644
|
+
}
|
|
645
|
+
return undefined;
|
|
646
|
+
}
|
|
647
|
+
function toEvidencePaperId(paper) {
|
|
648
|
+
return derivePaperId({ id: paper.id, title: paper.title, url: paper.url });
|
|
649
|
+
}
|
|
650
|
+
function dedupeEvidenceIds(ids) {
|
|
651
|
+
const seen = new Set();
|
|
652
|
+
const out = [];
|
|
653
|
+
for (const id of ids) {
|
|
654
|
+
const normalized = normalizeText(id);
|
|
655
|
+
if (!normalized)
|
|
656
|
+
continue;
|
|
657
|
+
const key = normalized.toLowerCase();
|
|
658
|
+
if (seen.has(key))
|
|
659
|
+
continue;
|
|
660
|
+
seen.add(key);
|
|
661
|
+
out.push(normalized);
|
|
662
|
+
}
|
|
663
|
+
return out;
|
|
664
|
+
}
|
|
665
|
+
function applyLightweightEvidenceBinding(args) {
|
|
666
|
+
if (!args.knowledgeState) {
|
|
667
|
+
return { knowledgeState: args.knowledgeState, anchorsAdded: 0, evidenceIdsFilled: 0 };
|
|
668
|
+
}
|
|
669
|
+
const corePapers = args.knowledgeState.corePapers ?? [];
|
|
670
|
+
if (corePapers.length === 0) {
|
|
671
|
+
return { knowledgeState: args.knowledgeState, anchorsAdded: 0, evidenceIdsFilled: 0 };
|
|
672
|
+
}
|
|
673
|
+
let anchorsAdded = 0;
|
|
674
|
+
const nextCore = corePapers.map((paper) => {
|
|
675
|
+
if (!isPaperFullTextRead(paper))
|
|
676
|
+
return paper;
|
|
677
|
+
if (hasStrictEvidenceAnchor(paper))
|
|
678
|
+
return paper;
|
|
679
|
+
const quote = firstNonEmptyText([
|
|
680
|
+
paper.keyEvidenceSpans?.[0],
|
|
681
|
+
paper.summary,
|
|
682
|
+
paper.reason,
|
|
683
|
+
paper.title,
|
|
684
|
+
]);
|
|
685
|
+
if (!quote)
|
|
686
|
+
return paper;
|
|
687
|
+
const nextQuote = quote.slice(0, 260);
|
|
688
|
+
anchorsAdded += 1;
|
|
689
|
+
return {
|
|
690
|
+
...paper,
|
|
691
|
+
evidenceAnchors: [
|
|
692
|
+
...(paper.evidenceAnchors ?? []),
|
|
693
|
+
{
|
|
694
|
+
section: "AutoExtract",
|
|
695
|
+
locator: paper.fullTextRef?.trim() || "excerpt:1",
|
|
696
|
+
claim: firstNonEmptyText([paper.researchGoal, paper.reason, paper.title, "auto-bound claim"]) ?? "auto-bound claim",
|
|
697
|
+
quote: nextQuote,
|
|
698
|
+
},
|
|
699
|
+
],
|
|
700
|
+
};
|
|
701
|
+
});
|
|
702
|
+
const fallbackEvidenceIds = dedupeEvidenceIds(nextCore.filter((paper) => isPaperFullTextRead(paper)).map((paper) => toEvidencePaperId(paper)).slice(0, 2));
|
|
703
|
+
let evidenceIdsFilled = 0;
|
|
704
|
+
const patchEvidenceIds = (raw, allowAuto = true) => {
|
|
705
|
+
const existing = dedupeEvidenceIds(raw ?? []);
|
|
706
|
+
if (existing.length > 0)
|
|
707
|
+
return existing;
|
|
708
|
+
if (!allowAuto || fallbackEvidenceIds.length === 0)
|
|
709
|
+
return undefined;
|
|
710
|
+
evidenceIdsFilled += 1;
|
|
711
|
+
return [...fallbackEvidenceIds];
|
|
712
|
+
};
|
|
713
|
+
const nextKnowledgeChanges = (args.knowledgeState.knowledgeChanges ?? []).map((change) => ({
|
|
714
|
+
...change,
|
|
715
|
+
...(change.type === "BRIDGE"
|
|
716
|
+
? { evidenceIds: patchEvidenceIds(change.evidenceIds, false) }
|
|
717
|
+
: { evidenceIds: patchEvidenceIds(change.evidenceIds, true) }),
|
|
718
|
+
}));
|
|
719
|
+
const nextKnowledgeUpdates = (args.knowledgeState.knowledgeUpdates ?? []).map((update) => ({
|
|
720
|
+
...update,
|
|
721
|
+
evidenceIds: patchEvidenceIds(update.evidenceIds, true),
|
|
722
|
+
}));
|
|
723
|
+
const nextHypotheses = (args.knowledgeState.hypotheses ?? []).map((hypothesis) => ({
|
|
724
|
+
...hypothesis,
|
|
725
|
+
evidenceIds: patchEvidenceIds(hypothesis.evidenceIds, true),
|
|
726
|
+
}));
|
|
727
|
+
if (anchorsAdded === 0 && evidenceIdsFilled === 0) {
|
|
728
|
+
return { knowledgeState: args.knowledgeState, anchorsAdded: 0, evidenceIdsFilled: 0 };
|
|
729
|
+
}
|
|
730
|
+
const existingRunLog = args.knowledgeState.runLog;
|
|
731
|
+
const runLog = existingRunLog || args.runProfile
|
|
732
|
+
? {
|
|
733
|
+
...(existingRunLog ?? {}),
|
|
734
|
+
...(existingRunLog?.runProfile ? {} : args.runProfile ? { runProfile: args.runProfile } : {}),
|
|
735
|
+
notes: [existingRunLog?.notes, `auto_evidence_binding anchors_added=${anchorsAdded} ids_filled=${evidenceIdsFilled}`]
|
|
736
|
+
.filter((item) => Boolean(item && item.trim().length > 0))
|
|
737
|
+
.join(" || "),
|
|
738
|
+
}
|
|
739
|
+
: undefined;
|
|
740
|
+
return {
|
|
741
|
+
knowledgeState: {
|
|
742
|
+
...args.knowledgeState,
|
|
743
|
+
corePapers: nextCore,
|
|
744
|
+
...(nextKnowledgeChanges.length > 0 ? { knowledgeChanges: nextKnowledgeChanges } : {}),
|
|
745
|
+
...(nextKnowledgeUpdates.length > 0 ? { knowledgeUpdates: nextKnowledgeUpdates } : {}),
|
|
746
|
+
...(nextHypotheses.length > 0 ? { hypotheses: nextHypotheses } : {}),
|
|
747
|
+
...(runLog ? { runLog } : {}),
|
|
748
|
+
},
|
|
749
|
+
anchorsAdded,
|
|
750
|
+
evidenceIdsFilled,
|
|
751
|
+
};
|
|
752
|
+
}
|
|
753
|
+
function buildReflectionFollowupQuery(topic, hint) {
|
|
754
|
+
const tokens = tokenizeKeywords(`${topic} ${hint}`).slice(0, 8);
|
|
755
|
+
if (tokens.length === 0)
|
|
756
|
+
return normalizeText(topic);
|
|
757
|
+
return tokens.join(" ");
|
|
758
|
+
}
|
|
759
|
+
function resolveSingleStepReflectionSeed(args) {
|
|
760
|
+
const changes = args.knowledgeState?.knowledgeChanges ?? [];
|
|
761
|
+
const bridgeChanges = changes.filter((item) => item.type === "BRIDGE");
|
|
762
|
+
const newChanges = changes.filter((item) => item.type === "NEW");
|
|
763
|
+
const reviseChanges = changes.filter((item) => item.type === "REVISE");
|
|
764
|
+
const unreadCore = (args.knowledgeState?.corePapers ?? []).filter((paper) => !isPaperFullTextRead(paper));
|
|
765
|
+
if (bridgeChanges.length > 0) {
|
|
766
|
+
const seed = bridgeChanges[0]?.statement ?? args.topic;
|
|
767
|
+
return {
|
|
768
|
+
trigger: "BRIDGE",
|
|
769
|
+
reason: "bridge_followup",
|
|
770
|
+
query: buildReflectionFollowupQuery(args.topic, seed),
|
|
771
|
+
};
|
|
772
|
+
}
|
|
773
|
+
if (newChanges.length >= 2 && reviseChanges.length >= 1) {
|
|
774
|
+
const seed = `${newChanges[0]?.statement ?? ""} ${reviseChanges[0]?.statement ?? ""}`.trim();
|
|
775
|
+
return {
|
|
776
|
+
trigger: "CONFLICT",
|
|
777
|
+
reason: "new_revise_followup",
|
|
778
|
+
query: buildReflectionFollowupQuery(args.topic, seed || args.topic),
|
|
779
|
+
};
|
|
780
|
+
}
|
|
781
|
+
if (unreadCore.length > 0) {
|
|
782
|
+
const seed = unreadCore[0]?.id ?? unreadCore[0]?.title ?? args.topic;
|
|
783
|
+
return {
|
|
784
|
+
trigger: "UNREAD_CORE",
|
|
785
|
+
reason: "unread_core_followup",
|
|
786
|
+
query: buildReflectionFollowupQuery(args.topic, seed),
|
|
787
|
+
};
|
|
788
|
+
}
|
|
789
|
+
return undefined;
|
|
790
|
+
}
|
|
791
|
+
async function executeSingleStepReflection(args) {
|
|
792
|
+
const seed = resolveSingleStepReflectionSeed({
|
|
793
|
+
topic: args.topic,
|
|
794
|
+
knowledgeState: args.knowledgeState,
|
|
795
|
+
});
|
|
796
|
+
if (!seed) {
|
|
797
|
+
return {
|
|
798
|
+
executed: false,
|
|
799
|
+
resultCount: 0,
|
|
800
|
+
papers: [],
|
|
801
|
+
changes: [],
|
|
802
|
+
};
|
|
803
|
+
}
|
|
804
|
+
const rows = await fetchArxivFallbackByQuery(seed.query);
|
|
805
|
+
const localKnownIds = new Set(args.knownPaperIds);
|
|
806
|
+
for (const paper of args.effectivePapers) {
|
|
807
|
+
localKnownIds.add(derivePaperId(paper));
|
|
808
|
+
}
|
|
809
|
+
for (const paper of args.knowledgeState?.corePapers ?? []) {
|
|
810
|
+
localKnownIds.add(derivePaperId({ id: paper.id, title: paper.title, url: paper.url }));
|
|
811
|
+
}
|
|
812
|
+
for (const paper of args.knowledgeState?.explorationPapers ?? []) {
|
|
813
|
+
localKnownIds.add(derivePaperId({ id: paper.id, title: paper.title, url: paper.url }));
|
|
814
|
+
}
|
|
815
|
+
const selected = rows.filter((row) => !localKnownIds.has(row.id)).slice(0, REFLECTION_MAX_ADDED_PAPERS);
|
|
816
|
+
const papers = selected.map((row) => ({
|
|
817
|
+
id: row.id,
|
|
818
|
+
title: row.title,
|
|
819
|
+
url: row.url,
|
|
820
|
+
source: "arxiv",
|
|
821
|
+
...(row.published ? { publishedAt: row.published } : {}),
|
|
822
|
+
...(row.summary ? { summary: row.summary } : {}),
|
|
823
|
+
fullTextRead: false,
|
|
824
|
+
readStatus: "metadata",
|
|
825
|
+
unreadReason: "single_step_reflection_added_without_fulltext",
|
|
826
|
+
}));
|
|
827
|
+
const changes = selected.length > 0
|
|
828
|
+
? [
|
|
829
|
+
{
|
|
830
|
+
type: "NEW",
|
|
831
|
+
statement: `Reflection follow-up added ${selected.length} adjacent paper(s) for ${args.topic}.`,
|
|
832
|
+
evidenceIds: selected.map((row) => row.id).slice(0, 3),
|
|
833
|
+
topic: args.topic,
|
|
834
|
+
},
|
|
835
|
+
]
|
|
836
|
+
: [];
|
|
837
|
+
return {
|
|
838
|
+
executed: true,
|
|
839
|
+
resultCount: selected.length,
|
|
840
|
+
trace: {
|
|
841
|
+
query: seed.query,
|
|
842
|
+
reason: seed.reason,
|
|
843
|
+
source: "arxiv",
|
|
844
|
+
candidates: rows.length,
|
|
845
|
+
filteredTo: selected.length,
|
|
846
|
+
...(selected.length === 0 ? { filteredOutReasons: ["no_unseen_reflection_candidates"] } : {}),
|
|
847
|
+
resultCount: selected.length,
|
|
848
|
+
},
|
|
849
|
+
papers,
|
|
850
|
+
changes,
|
|
554
851
|
};
|
|
555
852
|
}
|
|
556
853
|
function dedupePaperRecords(records) {
|
|
@@ -943,7 +1240,7 @@ export async function recordIncrementalPush(args) {
|
|
|
943
1240
|
effectiveRunLog.requiredCorePapers = Math.max(1, requiredCoreRaw);
|
|
944
1241
|
}
|
|
945
1242
|
else {
|
|
946
|
-
|
|
1243
|
+
effectiveRunLog.requiredCorePapers = Math.max(1, Math.min(topicState.preferences.maxPapers, DEFAULT_STRICT_MIN_CORE_FLOOR));
|
|
947
1244
|
}
|
|
948
1245
|
if (typeof effectiveRunLog.requiredFullTextCoveragePct !== "number" ||
|
|
949
1246
|
!Number.isFinite(effectiveRunLog.requiredFullTextCoveragePct) ||
|
|
@@ -958,7 +1255,9 @@ export async function recordIncrementalPush(args) {
|
|
|
958
1255
|
}
|
|
959
1256
|
: undefined;
|
|
960
1257
|
if (incomingRunProfile === "strict") {
|
|
961
|
-
const
|
|
1258
|
+
const strictMinCoreFloor = Math.max(1, Math.min(topicState.preferences.maxPapers, DEFAULT_STRICT_MIN_CORE_FLOOR));
|
|
1259
|
+
const requiredCoreFloor = Math.max(1, Math.min(topicState.preferences.maxPapers, effectiveRunLog?.requiredCorePapers ?? strictMinCoreFloor));
|
|
1260
|
+
const strictCandidatePool = Math.max(DEFAULT_STRICT_CANDIDATE_POOL, topicState.preferences.maxPapers * 4);
|
|
962
1261
|
const existingCorePapers = effectiveKnowledgeState?.corePapers ?? [];
|
|
963
1262
|
const strictSignalCount = Math.max(existingCorePapers.length, effectivePapers.length);
|
|
964
1263
|
if (strictSignalCount < requiredCoreFloor) {
|
|
@@ -970,7 +1269,9 @@ export async function recordIncrementalPush(args) {
|
|
|
970
1269
|
}
|
|
971
1270
|
const fallback = await strictCoreFallbackSeed({
|
|
972
1271
|
topic: topicState.topic,
|
|
973
|
-
maxPapers:
|
|
1272
|
+
maxPapers: topicState.preferences.maxPapers,
|
|
1273
|
+
candidatePool: strictCandidatePool,
|
|
1274
|
+
minCoreFloor: requiredCoreFloor,
|
|
974
1275
|
knownPaperIds: knownIds,
|
|
975
1276
|
});
|
|
976
1277
|
if (fallback.papers.length > 0) {
|
|
@@ -987,6 +1288,7 @@ export async function recordIncrementalPush(args) {
|
|
|
987
1288
|
effectivePapers = dedupePaperRecords([...effectivePapers, ...fallbackPapers]);
|
|
988
1289
|
const mergedRunLog = {
|
|
989
1290
|
...(effectiveRunLog ?? { runProfile: "strict" }),
|
|
1291
|
+
recallTierStats: fallback.recallTierStats,
|
|
990
1292
|
notes: [
|
|
991
1293
|
effectiveRunLog?.notes,
|
|
992
1294
|
fallback.notes,
|
|
@@ -1050,6 +1352,74 @@ export async function recordIncrementalPush(args) {
|
|
|
1050
1352
|
};
|
|
1051
1353
|
}
|
|
1052
1354
|
}
|
|
1355
|
+
const reflection = await executeSingleStepReflection({
|
|
1356
|
+
topic: topicState.topic,
|
|
1357
|
+
knownPaperIds: new Set(Object.keys(topicState.pushedPapers)),
|
|
1358
|
+
effectivePapers,
|
|
1359
|
+
knowledgeState: effectiveKnowledgeState,
|
|
1360
|
+
});
|
|
1361
|
+
const reflectionRunLogBase = effectiveRunLog ??
|
|
1362
|
+
(incomingRunProfile ? { runProfile: incomingRunProfile } : undefined);
|
|
1363
|
+
if (reflection.executed) {
|
|
1364
|
+
const reflectionPaperRecords = reflection.papers.map((paper) => ({
|
|
1365
|
+
...(paper.id ? { id: paper.id } : {}),
|
|
1366
|
+
...(paper.title ? { title: paper.title } : {}),
|
|
1367
|
+
...(paper.url ? { url: paper.url } : {}),
|
|
1368
|
+
...(typeof paper.score === "number" && Number.isFinite(paper.score) ? { score: paper.score } : {}),
|
|
1369
|
+
reason: "single_step_reflection_followup",
|
|
1370
|
+
}));
|
|
1371
|
+
effectivePapers = dedupePaperRecords([...effectivePapers, ...reflectionPaperRecords]);
|
|
1372
|
+
const mergedRunLog = {
|
|
1373
|
+
...(reflectionRunLogBase ?? {}),
|
|
1374
|
+
reflectionStepExecuted: true,
|
|
1375
|
+
reflectionStepResultCount: reflection.resultCount,
|
|
1376
|
+
notes: [
|
|
1377
|
+
reflectionRunLogBase?.notes,
|
|
1378
|
+
`single_step_reflection result_count=${reflection.resultCount}`,
|
|
1379
|
+
]
|
|
1380
|
+
.filter((item) => Boolean(item && item.trim().length > 0))
|
|
1381
|
+
.join(" || "),
|
|
1382
|
+
};
|
|
1383
|
+
effectiveRunLog = mergedRunLog;
|
|
1384
|
+
effectiveKnowledgeState = {
|
|
1385
|
+
...(effectiveKnowledgeState ?? {}),
|
|
1386
|
+
explorationTrace: [
|
|
1387
|
+
...(effectiveKnowledgeState?.explorationTrace ?? []),
|
|
1388
|
+
...(reflection.trace ? [reflection.trace] : []),
|
|
1389
|
+
],
|
|
1390
|
+
explorationPapers: dedupeKnowledgePapers([
|
|
1391
|
+
...(effectiveKnowledgeState?.explorationPapers ?? []),
|
|
1392
|
+
...reflection.papers,
|
|
1393
|
+
]),
|
|
1394
|
+
knowledgeChanges: [
|
|
1395
|
+
...(effectiveKnowledgeState?.knowledgeChanges ?? []),
|
|
1396
|
+
...(reflection.changes ?? []),
|
|
1397
|
+
],
|
|
1398
|
+
runLog: mergedRunLog,
|
|
1399
|
+
};
|
|
1400
|
+
}
|
|
1401
|
+
else if (reflectionRunLogBase) {
|
|
1402
|
+
const mergedRunLog = {
|
|
1403
|
+
...reflectionRunLogBase,
|
|
1404
|
+
reflectionStepExecuted: false,
|
|
1405
|
+
reflectionStepResultCount: 0,
|
|
1406
|
+
};
|
|
1407
|
+
effectiveRunLog = mergedRunLog;
|
|
1408
|
+
effectiveKnowledgeState = {
|
|
1409
|
+
...(effectiveKnowledgeState ?? {}),
|
|
1410
|
+
runLog: mergedRunLog,
|
|
1411
|
+
};
|
|
1412
|
+
}
|
|
1413
|
+
const autoEvidence = applyLightweightEvidenceBinding({
|
|
1414
|
+
knowledgeState: effectiveKnowledgeState,
|
|
1415
|
+
runProfile: incomingRunProfile,
|
|
1416
|
+
});
|
|
1417
|
+
effectiveKnowledgeState = autoEvidence.knowledgeState;
|
|
1418
|
+
if (autoEvidence.anchorsAdded > 0 || autoEvidence.evidenceIdsFilled > 0) {
|
|
1419
|
+
effectiveRunLog = effectiveKnowledgeState?.runLog
|
|
1420
|
+
? { ...effectiveKnowledgeState.runLog }
|
|
1421
|
+
: effectiveRunLog;
|
|
1422
|
+
}
|
|
1053
1423
|
const statusRaw = normalizeText(args.status ?? "").toLowerCase();
|
|
1054
1424
|
const researchArtifactsCount = effectivePapers.length +
|
|
1055
1425
|
(effectiveKnowledgeState?.explorationPapers?.length ?? 0) +
|