scientify 2.1.0 → 3.0.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/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -76
- package/dist/index.js.map +1 -1
- package/dist/src/cli/research.d.ts.map +1 -1
- package/dist/src/cli/research.js +6 -23
- package/dist/src/cli/research.js.map +1 -1
- package/dist/src/commands/metabolism-status.d.ts.map +1 -1
- package/dist/src/commands/metabolism-status.js +5 -25
- package/dist/src/commands/metabolism-status.js.map +1 -1
- package/dist/src/commands.d.ts +8 -8
- package/dist/src/commands.d.ts.map +1 -1
- package/dist/src/commands.js +91 -262
- package/dist/src/commands.js.map +1 -1
- package/dist/src/templates/bootstrap.d.ts.map +1 -1
- package/dist/src/templates/bootstrap.js +45 -59
- package/dist/src/templates/bootstrap.js.map +1 -1
- package/dist/src/types.d.ts +2 -10
- package/dist/src/types.d.ts.map +1 -1
- package/openclaw.plugin.json +3 -16
- package/package.json +2 -3
- package/skills/idea-generation/SKILL.md +20 -44
- package/skills/idea-generation/references/code-mapping.md +3 -3
- package/skills/idea-generation/references/idea-template.md +1 -1
- package/skills/idea-generation/references/reading-long-papers.md +3 -3
- package/skills/metabolism/SKILL.md +80 -36
- package/skills/paper-download/SKILL.md +61 -0
- package/skills/research-collect/SKILL.md +41 -111
- package/skills/research-experiment/SKILL.md +11 -12
- package/skills/research-implement/SKILL.md +10 -11
- package/skills/research-pipeline/SKILL.md +23 -31
- package/skills/research-plan/SKILL.md +7 -11
- package/skills/research-review/SKILL.md +21 -22
- package/skills/research-survey/SKILL.md +11 -25
- package/skills/write-review-paper/SKILL.md +12 -12
- package/skills/write-review-paper/references/note-template.md +1 -1
- package/skills/write-review-paper/references/survey-template.md +1 -1
- package/dist/src/hooks/research-mode.d.ts +0 -22
- package/dist/src/hooks/research-mode.d.ts.map +0 -1
- package/dist/src/hooks/research-mode.js +0 -35
- package/dist/src/hooks/research-mode.js.map +0 -1
- package/dist/src/hooks/scientify-cron-autofill.d.ts +0 -15
- package/dist/src/hooks/scientify-cron-autofill.d.ts.map +0 -1
- package/dist/src/hooks/scientify-cron-autofill.js +0 -156
- package/dist/src/hooks/scientify-cron-autofill.js.map +0 -1
- package/dist/src/hooks/scientify-signature.d.ts +0 -21
- package/dist/src/hooks/scientify-signature.d.ts.map +0 -1
- package/dist/src/hooks/scientify-signature.js +0 -150
- package/dist/src/hooks/scientify-signature.js.map +0 -1
- package/dist/src/knowledge-state/project.d.ts +0 -13
- package/dist/src/knowledge-state/project.d.ts.map +0 -1
- package/dist/src/knowledge-state/project.js +0 -88
- package/dist/src/knowledge-state/project.js.map +0 -1
- package/dist/src/knowledge-state/render.d.ts +0 -63
- package/dist/src/knowledge-state/render.d.ts.map +0 -1
- package/dist/src/knowledge-state/render.js +0 -368
- package/dist/src/knowledge-state/render.js.map +0 -1
- package/dist/src/knowledge-state/store.d.ts +0 -19
- package/dist/src/knowledge-state/store.d.ts.map +0 -1
- package/dist/src/knowledge-state/store.js +0 -978
- package/dist/src/knowledge-state/store.js.map +0 -1
- package/dist/src/knowledge-state/types.d.ts +0 -182
- package/dist/src/knowledge-state/types.d.ts.map +0 -1
- package/dist/src/knowledge-state/types.js +0 -2
- package/dist/src/knowledge-state/types.js.map +0 -1
- package/dist/src/literature/subscription-state.d.ts +0 -112
- package/dist/src/literature/subscription-state.d.ts.map +0 -1
- package/dist/src/literature/subscription-state.js +0 -696
- package/dist/src/literature/subscription-state.js.map +0 -1
- package/dist/src/research-subscriptions/constants.d.ts +0 -16
- package/dist/src/research-subscriptions/constants.d.ts.map +0 -1
- package/dist/src/research-subscriptions/constants.js +0 -59
- package/dist/src/research-subscriptions/constants.js.map +0 -1
- package/dist/src/research-subscriptions/cron-client.d.ts +0 -8
- package/dist/src/research-subscriptions/cron-client.d.ts.map +0 -1
- package/dist/src/research-subscriptions/cron-client.js +0 -81
- package/dist/src/research-subscriptions/cron-client.js.map +0 -1
- package/dist/src/research-subscriptions/delivery.d.ts +0 -10
- package/dist/src/research-subscriptions/delivery.d.ts.map +0 -1
- package/dist/src/research-subscriptions/delivery.js +0 -82
- package/dist/src/research-subscriptions/delivery.js.map +0 -1
- package/dist/src/research-subscriptions/handlers.d.ts +0 -6
- package/dist/src/research-subscriptions/handlers.d.ts.map +0 -1
- package/dist/src/research-subscriptions/handlers.js +0 -204
- package/dist/src/research-subscriptions/handlers.js.map +0 -1
- package/dist/src/research-subscriptions/parse.d.ts +0 -11
- package/dist/src/research-subscriptions/parse.d.ts.map +0 -1
- package/dist/src/research-subscriptions/parse.js +0 -492
- package/dist/src/research-subscriptions/parse.js.map +0 -1
- package/dist/src/research-subscriptions/prompt.d.ts +0 -5
- package/dist/src/research-subscriptions/prompt.d.ts.map +0 -1
- package/dist/src/research-subscriptions/prompt.js +0 -347
- package/dist/src/research-subscriptions/prompt.js.map +0 -1
- package/dist/src/research-subscriptions/types.d.ts +0 -66
- package/dist/src/research-subscriptions/types.d.ts.map +0 -1
- package/dist/src/research-subscriptions/types.js +0 -2
- package/dist/src/research-subscriptions/types.js.map +0 -1
- package/dist/src/research-subscriptions.d.ts +0 -2
- package/dist/src/research-subscriptions.d.ts.map +0 -1
- package/dist/src/research-subscriptions.js +0 -2
- package/dist/src/research-subscriptions.js.map +0 -1
- package/dist/src/services/auto-updater.d.ts +0 -15
- package/dist/src/services/auto-updater.d.ts.map +0 -1
- package/dist/src/services/auto-updater.js +0 -188
- package/dist/src/services/auto-updater.js.map +0 -1
- package/dist/src/tools/arxiv-download.d.ts +0 -24
- package/dist/src/tools/arxiv-download.d.ts.map +0 -1
- package/dist/src/tools/arxiv-download.js +0 -177
- package/dist/src/tools/arxiv-download.js.map +0 -1
- package/dist/src/tools/github-search-tool.d.ts +0 -25
- package/dist/src/tools/github-search-tool.d.ts.map +0 -1
- package/dist/src/tools/github-search-tool.js +0 -114
- package/dist/src/tools/github-search-tool.js.map +0 -1
- package/dist/src/tools/openreview-lookup.d.ts +0 -31
- package/dist/src/tools/openreview-lookup.d.ts.map +0 -1
- package/dist/src/tools/openreview-lookup.js +0 -414
- package/dist/src/tools/openreview-lookup.js.map +0 -1
- package/dist/src/tools/paper-browser.d.ts +0 -23
- package/dist/src/tools/paper-browser.d.ts.map +0 -1
- package/dist/src/tools/paper-browser.js +0 -121
- package/dist/src/tools/paper-browser.js.map +0 -1
- package/dist/src/tools/scientify-cron.d.ts +0 -63
- package/dist/src/tools/scientify-cron.d.ts.map +0 -1
- package/dist/src/tools/scientify-cron.js +0 -265
- package/dist/src/tools/scientify-cron.js.map +0 -1
- package/dist/src/tools/scientify-literature-state.d.ts +0 -303
- package/dist/src/tools/scientify-literature-state.d.ts.map +0 -1
- package/dist/src/tools/scientify-literature-state.js +0 -957
- package/dist/src/tools/scientify-literature-state.js.map +0 -1
- package/dist/src/tools/unpaywall-download.d.ts +0 -21
- package/dist/src/tools/unpaywall-download.d.ts.map +0 -1
- package/dist/src/tools/unpaywall-download.js +0 -169
- package/dist/src/tools/unpaywall-download.js.map +0 -1
- package/dist/src/tools/workspace.d.ts +0 -32
- package/dist/src/tools/workspace.d.ts.map +0 -1
- package/dist/src/tools/workspace.js +0 -69
- package/dist/src/tools/workspace.js.map +0 -1
- package/skills/metabolism-init/SKILL.md +0 -80
- package/skills/research-subscription/SKILL.md +0 -119
|
@@ -1,414 +0,0 @@
|
|
|
1
|
-
import { Type } from "@sinclair/typebox";
|
|
2
|
-
import { Result } from "./result.js";
|
|
3
|
-
const OPENREVIEW_API_BASE = "https://api2.openreview.net";
|
|
4
|
-
const OPENREVIEW_WEB_BASE = "https://openreview.net";
|
|
5
|
-
const DEFAULT_MAX_RESULTS = 3;
|
|
6
|
-
const MAX_RESULTS_LIMIT = 10;
|
|
7
|
-
const DEFAULT_REVIEW_LIMIT = 3;
|
|
8
|
-
const MAX_REVIEW_LIMIT = 10;
|
|
9
|
-
const DEFAULT_FORUM_NOTES_LIMIT = 500;
|
|
10
|
-
const SEARCH_FANOUT = 4;
|
|
11
|
-
const SUMMARY_MAX_CHARS = 420;
|
|
12
|
-
const OPENREVIEW_TOKEN_ENV = "OPENREVIEW_API_TOKEN";
|
|
13
|
-
export const OpenReviewLookupSchema = Type.Object({
|
|
14
|
-
query: Type.Optional(Type.String({
|
|
15
|
-
description: "Paper title keywords for OpenReview search.",
|
|
16
|
-
})),
|
|
17
|
-
paper_id: Type.Optional(Type.String({
|
|
18
|
-
description: "OpenReview note id (submission or note id).",
|
|
19
|
-
})),
|
|
20
|
-
forum_id: Type.Optional(Type.String({
|
|
21
|
-
description: "OpenReview forum id.",
|
|
22
|
-
})),
|
|
23
|
-
external_id: Type.Optional(Type.String({
|
|
24
|
-
description: "External paper id hint (for example arXiv id like 2603.05344 or a DOI). Used as search term when exact mapping is unavailable.",
|
|
25
|
-
})),
|
|
26
|
-
max_results: Type.Optional(Type.Number({
|
|
27
|
-
description: "Maximum number of papers to return (1-10). Default: 3.",
|
|
28
|
-
minimum: 1,
|
|
29
|
-
maximum: MAX_RESULTS_LIMIT,
|
|
30
|
-
})),
|
|
31
|
-
include_reviews: Type.Optional(Type.Boolean({
|
|
32
|
-
description: "Include review snippets and rating/confidence aggregates. Default: true.",
|
|
33
|
-
})),
|
|
34
|
-
review_limit: Type.Optional(Type.Number({
|
|
35
|
-
description: "Maximum review snippets per paper (1-10). Default: 3.",
|
|
36
|
-
minimum: 1,
|
|
37
|
-
maximum: MAX_REVIEW_LIMIT,
|
|
38
|
-
})),
|
|
39
|
-
});
|
|
40
|
-
function readStringParam(params, key) {
|
|
41
|
-
const value = params[key];
|
|
42
|
-
if (value === undefined || value === null)
|
|
43
|
-
return undefined;
|
|
44
|
-
const text = String(value).trim();
|
|
45
|
-
return text.length > 0 ? text : undefined;
|
|
46
|
-
}
|
|
47
|
-
function readNumberParam(params, key, fallback, max) {
|
|
48
|
-
const raw = params[key];
|
|
49
|
-
if (raw === undefined || raw === null)
|
|
50
|
-
return fallback;
|
|
51
|
-
const parsed = Number(raw);
|
|
52
|
-
if (!Number.isFinite(parsed))
|
|
53
|
-
return fallback;
|
|
54
|
-
return Math.max(1, Math.min(max, Math.floor(parsed)));
|
|
55
|
-
}
|
|
56
|
-
function readBooleanParam(params, key, fallback) {
|
|
57
|
-
const raw = params[key];
|
|
58
|
-
if (raw === undefined || raw === null)
|
|
59
|
-
return fallback;
|
|
60
|
-
return raw === true;
|
|
61
|
-
}
|
|
62
|
-
function normalizeWhitespace(raw) {
|
|
63
|
-
return raw.replace(/\s+/g, " ").trim();
|
|
64
|
-
}
|
|
65
|
-
function unwrapValue(value) {
|
|
66
|
-
if (value && typeof value === "object" && !Array.isArray(value) && "value" in value) {
|
|
67
|
-
return value.value;
|
|
68
|
-
}
|
|
69
|
-
return value;
|
|
70
|
-
}
|
|
71
|
-
function contentString(content, key) {
|
|
72
|
-
if (!content)
|
|
73
|
-
return null;
|
|
74
|
-
const raw = unwrapValue(content[key]);
|
|
75
|
-
if (typeof raw !== "string")
|
|
76
|
-
return null;
|
|
77
|
-
const text = normalizeWhitespace(raw);
|
|
78
|
-
return text.length > 0 ? text : null;
|
|
79
|
-
}
|
|
80
|
-
function contentScalar(content, key) {
|
|
81
|
-
if (!content)
|
|
82
|
-
return null;
|
|
83
|
-
const raw = unwrapValue(content[key]);
|
|
84
|
-
if (typeof raw === "string") {
|
|
85
|
-
const text = normalizeWhitespace(raw);
|
|
86
|
-
return text.length > 0 ? text : null;
|
|
87
|
-
}
|
|
88
|
-
if (typeof raw === "number" && Number.isFinite(raw))
|
|
89
|
-
return raw;
|
|
90
|
-
return null;
|
|
91
|
-
}
|
|
92
|
-
function contentStringList(content, key) {
|
|
93
|
-
if (!content)
|
|
94
|
-
return [];
|
|
95
|
-
const raw = unwrapValue(content[key]);
|
|
96
|
-
if (!Array.isArray(raw))
|
|
97
|
-
return [];
|
|
98
|
-
return raw
|
|
99
|
-
.filter((item) => typeof item === "string")
|
|
100
|
-
.map((item) => normalizeWhitespace(item))
|
|
101
|
-
.filter((item) => item.length > 0);
|
|
102
|
-
}
|
|
103
|
-
function truncateText(raw, maxChars) {
|
|
104
|
-
if (!raw)
|
|
105
|
-
return null;
|
|
106
|
-
if (raw.length <= maxChars)
|
|
107
|
-
return raw;
|
|
108
|
-
return `${raw.slice(0, maxChars - 1)}…`;
|
|
109
|
-
}
|
|
110
|
-
function parseNumericSignal(raw) {
|
|
111
|
-
if (raw === null)
|
|
112
|
-
return null;
|
|
113
|
-
if (typeof raw === "number" && Number.isFinite(raw))
|
|
114
|
-
return raw;
|
|
115
|
-
if (typeof raw !== "string")
|
|
116
|
-
return null;
|
|
117
|
-
const m = raw.match(/-?\d+(?:\.\d+)?/);
|
|
118
|
-
if (!m)
|
|
119
|
-
return null;
|
|
120
|
-
const parsed = Number(m[0]);
|
|
121
|
-
return Number.isFinite(parsed) ? parsed : null;
|
|
122
|
-
}
|
|
123
|
-
function avg(values) {
|
|
124
|
-
if (values.length === 0)
|
|
125
|
-
return null;
|
|
126
|
-
const sum = values.reduce((acc, v) => acc + v, 0);
|
|
127
|
-
return Number((sum / values.length).toFixed(3));
|
|
128
|
-
}
|
|
129
|
-
function selectSubmissionNote(notes, forumId) {
|
|
130
|
-
const exact = notes.find((note) => note.id === forumId);
|
|
131
|
-
if (exact)
|
|
132
|
-
return exact;
|
|
133
|
-
const withTitle = notes.find((note) => Boolean(contentString(note.content, "title")));
|
|
134
|
-
if (withTitle)
|
|
135
|
-
return withTitle;
|
|
136
|
-
const submissionByInvitation = notes.find((note) => (note.invitations ?? []).some((inv) => /\/-\//.test(inv) && /submission/i.test(inv)));
|
|
137
|
-
return submissionByInvitation ?? null;
|
|
138
|
-
}
|
|
139
|
-
function selectDecisionNote(notes) {
|
|
140
|
-
const candidates = notes.filter((note) => {
|
|
141
|
-
const decision = contentString(note.content, "decision");
|
|
142
|
-
if (decision)
|
|
143
|
-
return true;
|
|
144
|
-
return (note.invitations ?? []).some((inv) => /decision/i.test(inv));
|
|
145
|
-
});
|
|
146
|
-
if (candidates.length === 0)
|
|
147
|
-
return null;
|
|
148
|
-
candidates.sort((a, b) => (b.mdate ?? b.tcdate ?? b.cdate ?? 0) - (a.mdate ?? a.tcdate ?? a.cdate ?? 0));
|
|
149
|
-
return candidates[0] ?? null;
|
|
150
|
-
}
|
|
151
|
-
function collectReviewSummaries(notes, limit) {
|
|
152
|
-
const reviews = notes
|
|
153
|
-
.filter((note) => {
|
|
154
|
-
const invitation = (note.invitations ?? [])[0] ?? "";
|
|
155
|
-
if (/review/i.test(invitation))
|
|
156
|
-
return true;
|
|
157
|
-
return Boolean(contentString(note.content, "rating")) || Boolean(contentString(note.content, "confidence"));
|
|
158
|
-
})
|
|
159
|
-
.map((note) => {
|
|
160
|
-
const invitation = (note.invitations ?? [])[0] ?? "";
|
|
161
|
-
const rating = parseNumericSignal(contentScalar(note.content, "rating"));
|
|
162
|
-
const confidence = parseNumericSignal(contentScalar(note.content, "confidence"));
|
|
163
|
-
const summary = contentString(note.content, "summary") ??
|
|
164
|
-
contentString(note.content, "main_review") ??
|
|
165
|
-
contentString(note.content, "review") ??
|
|
166
|
-
contentString(note.content, "comment") ??
|
|
167
|
-
contentString(note.content, "strengths") ??
|
|
168
|
-
contentString(note.content, "weaknesses") ??
|
|
169
|
-
contentString(note.content, "limitations") ??
|
|
170
|
-
"";
|
|
171
|
-
return {
|
|
172
|
-
note_id: note.id,
|
|
173
|
-
invitation,
|
|
174
|
-
rating,
|
|
175
|
-
confidence,
|
|
176
|
-
summary: truncateText(summary, SUMMARY_MAX_CHARS) ?? "",
|
|
177
|
-
mdate: note.mdate ?? note.tcdate ?? note.cdate ?? 0,
|
|
178
|
-
};
|
|
179
|
-
});
|
|
180
|
-
const informative = reviews
|
|
181
|
-
.filter((item) => item.rating !== null || item.confidence !== null || item.summary.length > 0)
|
|
182
|
-
.sort((a, b) => {
|
|
183
|
-
const scoreA = (a.rating !== null ? 2 : 0) + (a.confidence !== null ? 1 : 0) + (a.summary.length > 0 ? 1 : 0);
|
|
184
|
-
const scoreB = (b.rating !== null ? 2 : 0) + (b.confidence !== null ? 1 : 0) + (b.summary.length > 0 ? 1 : 0);
|
|
185
|
-
if (scoreA !== scoreB)
|
|
186
|
-
return scoreB - scoreA;
|
|
187
|
-
return b.mdate - a.mdate;
|
|
188
|
-
})
|
|
189
|
-
.slice(0, Math.max(1, Math.min(MAX_REVIEW_LIMIT, limit)));
|
|
190
|
-
return informative.map(({ mdate: _mdate, ...rest }) => rest);
|
|
191
|
-
}
|
|
192
|
-
async function fetchNotes(params) {
|
|
193
|
-
const urlParams = new URLSearchParams(params);
|
|
194
|
-
const url = `${OPENREVIEW_API_BASE}/notes?${urlParams.toString()}`;
|
|
195
|
-
let response;
|
|
196
|
-
try {
|
|
197
|
-
response = await fetch(url, {
|
|
198
|
-
headers: buildHeaders(),
|
|
199
|
-
});
|
|
200
|
-
}
|
|
201
|
-
catch (error) {
|
|
202
|
-
throw new Error(`Failed to reach OpenReview notes endpoint: ${error instanceof Error ? error.message : String(error)}`);
|
|
203
|
-
}
|
|
204
|
-
if (!response.ok) {
|
|
205
|
-
const text = await response.text();
|
|
206
|
-
throw new Error(`OpenReview notes API returned ${response.status}: ${text || response.statusText}`);
|
|
207
|
-
}
|
|
208
|
-
const data = (await response.json());
|
|
209
|
-
return data.notes ?? [];
|
|
210
|
-
}
|
|
211
|
-
async function searchNotes(term, limit) {
|
|
212
|
-
const urlParams = new URLSearchParams({
|
|
213
|
-
term,
|
|
214
|
-
limit: String(limit),
|
|
215
|
-
});
|
|
216
|
-
const url = `${OPENREVIEW_API_BASE}/notes/search?${urlParams.toString()}`;
|
|
217
|
-
let response;
|
|
218
|
-
try {
|
|
219
|
-
response = await fetch(url, {
|
|
220
|
-
headers: buildHeaders(),
|
|
221
|
-
});
|
|
222
|
-
}
|
|
223
|
-
catch (error) {
|
|
224
|
-
throw new Error(`Failed to reach OpenReview search endpoint: ${error instanceof Error ? error.message : String(error)}`);
|
|
225
|
-
}
|
|
226
|
-
if (!response.ok) {
|
|
227
|
-
const text = await response.text();
|
|
228
|
-
throw new Error(`OpenReview search API returned ${response.status}: ${text || response.statusText}`);
|
|
229
|
-
}
|
|
230
|
-
const data = (await response.json());
|
|
231
|
-
return data.notes ?? [];
|
|
232
|
-
}
|
|
233
|
-
function buildHeaders() {
|
|
234
|
-
const token = process.env[OPENREVIEW_TOKEN_ENV]?.trim();
|
|
235
|
-
if (!token) {
|
|
236
|
-
return {
|
|
237
|
-
"User-Agent": "scientify-openreview-lookup/1.0",
|
|
238
|
-
};
|
|
239
|
-
}
|
|
240
|
-
return {
|
|
241
|
-
"User-Agent": "scientify-openreview-lookup/1.0",
|
|
242
|
-
Authorization: `Bearer ${token}`,
|
|
243
|
-
};
|
|
244
|
-
}
|
|
245
|
-
function normalizeExternalSearchTerm(raw) {
|
|
246
|
-
const value = raw.trim();
|
|
247
|
-
if (!value)
|
|
248
|
-
return value;
|
|
249
|
-
const lower = value.toLowerCase();
|
|
250
|
-
if (lower.startsWith("arxiv:")) {
|
|
251
|
-
return value.slice(6).trim();
|
|
252
|
-
}
|
|
253
|
-
if (lower.startsWith("doi:")) {
|
|
254
|
-
return value.slice(4).trim();
|
|
255
|
-
}
|
|
256
|
-
return value;
|
|
257
|
-
}
|
|
258
|
-
async function lookupForum(forumId, includeReviews, reviewLimit) {
|
|
259
|
-
const notes = await fetchNotes({
|
|
260
|
-
forum: forumId,
|
|
261
|
-
limit: String(DEFAULT_FORUM_NOTES_LIMIT),
|
|
262
|
-
});
|
|
263
|
-
if (notes.length === 0)
|
|
264
|
-
return null;
|
|
265
|
-
const submission = selectSubmissionNote(notes, forumId);
|
|
266
|
-
if (!submission)
|
|
267
|
-
return null;
|
|
268
|
-
const content = submission.content ?? {};
|
|
269
|
-
const title = contentString(content, "title");
|
|
270
|
-
const authors = contentStringList(content, "authors");
|
|
271
|
-
const abstractPreview = truncateText(contentString(content, "abstract"), SUMMARY_MAX_CHARS);
|
|
272
|
-
const venue = contentString(content, "venue");
|
|
273
|
-
const venueId = contentString(content, "venueid");
|
|
274
|
-
const pdfUrl = contentString(content, "pdf");
|
|
275
|
-
const decisionNote = selectDecisionNote(notes);
|
|
276
|
-
const decisionValue = decisionNote ? contentString(decisionNote.content, "decision") : null;
|
|
277
|
-
const decisionInvitation = decisionNote ? (decisionNote.invitations ?? [])[0] ?? "unknown" : null;
|
|
278
|
-
const reviewSummaries = includeReviews ? collectReviewSummaries(notes, reviewLimit) : [];
|
|
279
|
-
const ratingValues = reviewSummaries
|
|
280
|
-
.map((review) => review.rating)
|
|
281
|
-
.filter((value) => typeof value === "number" && Number.isFinite(value));
|
|
282
|
-
const confidenceValues = reviewSummaries
|
|
283
|
-
.map((review) => review.confidence)
|
|
284
|
-
.filter((value) => typeof value === "number" && Number.isFinite(value));
|
|
285
|
-
return {
|
|
286
|
-
forum_id: forumId,
|
|
287
|
-
paper_id: submission.id,
|
|
288
|
-
title,
|
|
289
|
-
authors,
|
|
290
|
-
abstract_preview: abstractPreview,
|
|
291
|
-
pdf_url: pdfUrl,
|
|
292
|
-
venue,
|
|
293
|
-
venue_id: venueId,
|
|
294
|
-
decision: decisionNote && decisionValue
|
|
295
|
-
? {
|
|
296
|
-
value: decisionValue,
|
|
297
|
-
note_id: decisionNote.id,
|
|
298
|
-
invitation: decisionInvitation ?? "unknown",
|
|
299
|
-
}
|
|
300
|
-
: null,
|
|
301
|
-
review_stats: {
|
|
302
|
-
total_reviews: reviewSummaries.length,
|
|
303
|
-
rated_reviews: ratingValues.length,
|
|
304
|
-
confidence_reviews: confidenceValues.length,
|
|
305
|
-
avg_rating: avg(ratingValues),
|
|
306
|
-
avg_confidence: avg(confidenceValues),
|
|
307
|
-
},
|
|
308
|
-
review_summaries: reviewSummaries,
|
|
309
|
-
links: {
|
|
310
|
-
forum: `${OPENREVIEW_WEB_BASE}/forum?id=${forumId}`,
|
|
311
|
-
note: `${OPENREVIEW_WEB_BASE}/forum?id=${submission.id}`,
|
|
312
|
-
},
|
|
313
|
-
};
|
|
314
|
-
}
|
|
315
|
-
function dedupeForums(notes, maxResults) {
|
|
316
|
-
const seen = new Set();
|
|
317
|
-
for (const note of notes) {
|
|
318
|
-
const forumId = (note.forum ?? note.id ?? "").trim();
|
|
319
|
-
if (!forumId)
|
|
320
|
-
continue;
|
|
321
|
-
if (seen.has(forumId))
|
|
322
|
-
continue;
|
|
323
|
-
// Keep likely paper/submission entries from mixed search results.
|
|
324
|
-
const hasTitle = Boolean(contentString(note.content, "title"));
|
|
325
|
-
const hasVenue = Boolean(contentString(note.content, "venue"));
|
|
326
|
-
const invitation = (note.invitations ?? [])[0] ?? "";
|
|
327
|
-
const likelySubmission = note.id === forumId || /submission/i.test(invitation) || (hasTitle && hasVenue);
|
|
328
|
-
if (!likelySubmission)
|
|
329
|
-
continue;
|
|
330
|
-
seen.add(forumId);
|
|
331
|
-
if (seen.size >= maxResults)
|
|
332
|
-
break;
|
|
333
|
-
}
|
|
334
|
-
return [...seen];
|
|
335
|
-
}
|
|
336
|
-
export function createOpenReviewLookupTool() {
|
|
337
|
-
return {
|
|
338
|
-
label: "OpenReview Lookup",
|
|
339
|
-
name: "openreview_lookup",
|
|
340
|
-
description: "Lookup OpenReview evidence by title or id. Returns forum-level decision, review rating/confidence aggregates, and review summaries for traceable research assessment.",
|
|
341
|
-
parameters: OpenReviewLookupSchema,
|
|
342
|
-
execute: async (_toolCallId, rawArgs) => {
|
|
343
|
-
const params = (rawArgs ?? {});
|
|
344
|
-
const query = readStringParam(params, "query");
|
|
345
|
-
const paperId = readStringParam(params, "paper_id");
|
|
346
|
-
const forumId = readStringParam(params, "forum_id");
|
|
347
|
-
const externalId = readStringParam(params, "external_id");
|
|
348
|
-
const maxResults = readNumberParam(params, "max_results", DEFAULT_MAX_RESULTS, MAX_RESULTS_LIMIT);
|
|
349
|
-
const includeReviews = readBooleanParam(params, "include_reviews", true);
|
|
350
|
-
const reviewLimit = readNumberParam(params, "review_limit", DEFAULT_REVIEW_LIMIT, MAX_REVIEW_LIMIT);
|
|
351
|
-
if (!query && !paperId && !forumId && !externalId) {
|
|
352
|
-
return Result.err("invalid_params", "Provide at least one of: `query`, `paper_id`, `forum_id`, `external_id`.");
|
|
353
|
-
}
|
|
354
|
-
try {
|
|
355
|
-
const targets = [];
|
|
356
|
-
let mode = "query";
|
|
357
|
-
if (forumId) {
|
|
358
|
-
mode = "forum_id";
|
|
359
|
-
targets.push(forumId);
|
|
360
|
-
}
|
|
361
|
-
else if (paperId) {
|
|
362
|
-
mode = "paper_id";
|
|
363
|
-
const notes = await fetchNotes({ id: paperId, limit: "1" });
|
|
364
|
-
const note = notes[0];
|
|
365
|
-
if (!note) {
|
|
366
|
-
return Result.ok({
|
|
367
|
-
mode,
|
|
368
|
-
input: paperId,
|
|
369
|
-
returned: 0,
|
|
370
|
-
results: [],
|
|
371
|
-
warning: "No note found for provided paper_id.",
|
|
372
|
-
});
|
|
373
|
-
}
|
|
374
|
-
targets.push((note.forum ?? note.id).trim());
|
|
375
|
-
}
|
|
376
|
-
else if (externalId) {
|
|
377
|
-
mode = "external_id";
|
|
378
|
-
const term = normalizeExternalSearchTerm(externalId);
|
|
379
|
-
const notes = await searchNotes(term, maxResults * SEARCH_FANOUT);
|
|
380
|
-
targets.push(...dedupeForums(notes, maxResults));
|
|
381
|
-
}
|
|
382
|
-
else if (query) {
|
|
383
|
-
mode = "query";
|
|
384
|
-
const notes = await searchNotes(query, maxResults * SEARCH_FANOUT);
|
|
385
|
-
targets.push(...dedupeForums(notes, maxResults));
|
|
386
|
-
}
|
|
387
|
-
const uniqueTargets = [...new Set(targets.map((item) => item.trim()).filter((item) => item.length > 0))].slice(0, maxResults);
|
|
388
|
-
const results = [];
|
|
389
|
-
for (const targetForum of uniqueTargets) {
|
|
390
|
-
const forum = await lookupForum(targetForum, includeReviews, reviewLimit);
|
|
391
|
-
if (!forum)
|
|
392
|
-
continue;
|
|
393
|
-
results.push(forum);
|
|
394
|
-
}
|
|
395
|
-
return Result.ok({
|
|
396
|
-
mode,
|
|
397
|
-
input: forumId ?? paperId ?? externalId ?? query,
|
|
398
|
-
returned: results.length,
|
|
399
|
-
results,
|
|
400
|
-
hints: results.length === 0
|
|
401
|
-
? [
|
|
402
|
-
"Try a more specific paper title or pass `forum_id` / `paper_id` directly.",
|
|
403
|
-
"For broad queries, OpenReview may return mixed notes; use exact title keywords to improve precision.",
|
|
404
|
-
]
|
|
405
|
-
: undefined,
|
|
406
|
-
});
|
|
407
|
-
}
|
|
408
|
-
catch (error) {
|
|
409
|
-
return Result.err("runtime_error", `openreview_lookup failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
410
|
-
}
|
|
411
|
-
},
|
|
412
|
-
};
|
|
413
|
-
}
|
|
414
|
-
//# sourceMappingURL=openreview-lookup.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"openreview-lookup.js","sourceRoot":"","sources":["../../../src/tools/openreview-lookup.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
export declare const PaperBrowserToolSchema: import("@sinclair/typebox").TObject<{
|
|
2
|
-
file_path: import("@sinclair/typebox").TString;
|
|
3
|
-
start_line: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
4
|
-
num_lines: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
5
|
-
}>;
|
|
6
|
-
export declare function createPaperBrowserTool(): {
|
|
7
|
-
label: string;
|
|
8
|
-
name: string;
|
|
9
|
-
description: string;
|
|
10
|
-
parameters: import("@sinclair/typebox").TObject<{
|
|
11
|
-
file_path: import("@sinclair/typebox").TString;
|
|
12
|
-
start_line: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
13
|
-
num_lines: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
14
|
-
}>;
|
|
15
|
-
execute: (_toolCallId: string, rawArgs: unknown) => Promise<{
|
|
16
|
-
content: {
|
|
17
|
-
type: "text";
|
|
18
|
-
text: string;
|
|
19
|
-
}[];
|
|
20
|
-
details: unknown;
|
|
21
|
-
}>;
|
|
22
|
-
};
|
|
23
|
-
//# sourceMappingURL=paper-browser.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"paper-browser.d.ts","sourceRoot":"","sources":["../../../src/tools/paper-browser.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,sBAAsB;;;;EAiBjC,CAAC;AAqBH,wBAAgB,sBAAsB;;;;;;;;;2BAOL,MAAM,WAAW,OAAO;;;;;;;EAuFxD"}
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
import { Type } from "@sinclair/typebox";
|
|
2
|
-
import { readFileSync, existsSync, statSync } from "node:fs";
|
|
3
|
-
import { Result } from "./result.js";
|
|
4
|
-
const DEFAULT_VIEWPORT_SIZE = 100;
|
|
5
|
-
const MAX_VIEWPORT_SIZE = 500;
|
|
6
|
-
export const PaperBrowserToolSchema = Type.Object({
|
|
7
|
-
file_path: Type.String({
|
|
8
|
-
description: "Path to the paper file (.tex, .md, or any text file).",
|
|
9
|
-
}),
|
|
10
|
-
start_line: Type.Optional(Type.Number({
|
|
11
|
-
description: "Starting line number (1-indexed). Default: 1.",
|
|
12
|
-
minimum: 1,
|
|
13
|
-
})),
|
|
14
|
-
num_lines: Type.Optional(Type.Number({
|
|
15
|
-
description: `Number of lines to display (default: ${DEFAULT_VIEWPORT_SIZE}, max: ${MAX_VIEWPORT_SIZE}).`,
|
|
16
|
-
minimum: 1,
|
|
17
|
-
maximum: MAX_VIEWPORT_SIZE,
|
|
18
|
-
})),
|
|
19
|
-
});
|
|
20
|
-
function readStringParam(params, key, opts) {
|
|
21
|
-
const value = params[key];
|
|
22
|
-
if (value === undefined || value === null) {
|
|
23
|
-
if (opts?.required) {
|
|
24
|
-
throw new Error(`Missing required parameter: ${key}`);
|
|
25
|
-
}
|
|
26
|
-
return undefined;
|
|
27
|
-
}
|
|
28
|
-
return String(value);
|
|
29
|
-
}
|
|
30
|
-
function readNumberParam(params, key, opts) {
|
|
31
|
-
const value = params[key];
|
|
32
|
-
if (value === undefined || value === null)
|
|
33
|
-
return undefined;
|
|
34
|
-
const num = Number(value);
|
|
35
|
-
if (isNaN(num))
|
|
36
|
-
return undefined;
|
|
37
|
-
return opts?.integer ? Math.floor(num) : num;
|
|
38
|
-
}
|
|
39
|
-
export function createPaperBrowserTool() {
|
|
40
|
-
return {
|
|
41
|
-
label: "Paper Browser",
|
|
42
|
-
name: "paper_browser",
|
|
43
|
-
description: "Read large paper files (.tex, .md) in paginated chunks. Use this to avoid loading entire multi-thousand-line files into context at once. Returns a viewport of lines with navigation information.",
|
|
44
|
-
parameters: PaperBrowserToolSchema,
|
|
45
|
-
execute: async (_toolCallId, rawArgs) => {
|
|
46
|
-
const params = rawArgs;
|
|
47
|
-
const filePath = readStringParam(params, "file_path", { required: true });
|
|
48
|
-
const startLine = Math.max(1, readNumberParam(params, "start_line", { integer: true }) ?? 1);
|
|
49
|
-
const numLines = Math.min(readNumberParam(params, "num_lines", { integer: true }) ?? DEFAULT_VIEWPORT_SIZE, MAX_VIEWPORT_SIZE);
|
|
50
|
-
// Validate file exists
|
|
51
|
-
if (!existsSync(filePath)) {
|
|
52
|
-
return Result.err("file_not_found", `File does not exist: ${filePath}`);
|
|
53
|
-
}
|
|
54
|
-
// Check if it's a file (not directory)
|
|
55
|
-
let stats;
|
|
56
|
-
try {
|
|
57
|
-
stats = statSync(filePath);
|
|
58
|
-
}
|
|
59
|
-
catch (error) {
|
|
60
|
-
return Result.err("file_error", `Cannot access file: ${error instanceof Error ? error.message : String(error)}`);
|
|
61
|
-
}
|
|
62
|
-
if (!stats.isFile()) {
|
|
63
|
-
return Result.err("not_a_file", `Path is not a file: ${filePath}`);
|
|
64
|
-
}
|
|
65
|
-
// Read file content
|
|
66
|
-
let content;
|
|
67
|
-
try {
|
|
68
|
-
content = readFileSync(filePath, "utf-8");
|
|
69
|
-
}
|
|
70
|
-
catch (error) {
|
|
71
|
-
return Result.err("read_error", `Failed to read file: ${error instanceof Error ? error.message : String(error)}`);
|
|
72
|
-
}
|
|
73
|
-
// Split into lines
|
|
74
|
-
const lines = content.split("\n");
|
|
75
|
-
const totalLines = lines.length;
|
|
76
|
-
// Validate start line
|
|
77
|
-
if (startLine > totalLines) {
|
|
78
|
-
return Result.err("invalid_range", `Start line ${startLine} exceeds total lines ${totalLines}`);
|
|
79
|
-
}
|
|
80
|
-
// Extract viewport
|
|
81
|
-
const endLine = Math.min(startLine + numLines - 1, totalLines);
|
|
82
|
-
const viewportLines = lines.slice(startLine - 1, endLine);
|
|
83
|
-
// Add line numbers (matching cat -n format for consistency with Read tool)
|
|
84
|
-
const numberedLines = viewportLines
|
|
85
|
-
.map((line, idx) => {
|
|
86
|
-
const lineNum = startLine + idx;
|
|
87
|
-
return `${lineNum.toString().padStart(6, " ")}\t${line}`;
|
|
88
|
-
})
|
|
89
|
-
.join("\n");
|
|
90
|
-
// Navigation hints
|
|
91
|
-
const hasMore = endLine < totalLines;
|
|
92
|
-
const hasPrev = startLine > 1;
|
|
93
|
-
let navigationHint = "";
|
|
94
|
-
if (hasMore && hasPrev) {
|
|
95
|
-
navigationHint = `\n\nNavigate: paper_browser({ file_path: "${filePath}", start_line: ${endLine + 1} }) for next page, or start_line: ${Math.max(1, startLine - numLines)} for previous page.`;
|
|
96
|
-
}
|
|
97
|
-
else if (hasMore) {
|
|
98
|
-
navigationHint = `\n\nMore content below. Use: paper_browser({ file_path: "${filePath}", start_line: ${endLine + 1} })`;
|
|
99
|
-
}
|
|
100
|
-
else if (hasPrev) {
|
|
101
|
-
navigationHint = `\n\nEnd of file. Use: paper_browser({ file_path: "${filePath}", start_line: ${Math.max(1, startLine - numLines)} }) for previous page.`;
|
|
102
|
-
}
|
|
103
|
-
else {
|
|
104
|
-
navigationHint = "\n\n[End of file]";
|
|
105
|
-
}
|
|
106
|
-
return Result.ok({
|
|
107
|
-
file_path: filePath,
|
|
108
|
-
total_lines: totalLines,
|
|
109
|
-
viewport: {
|
|
110
|
-
start_line: startLine,
|
|
111
|
-
end_line: endLine,
|
|
112
|
-
num_lines: viewportLines.length,
|
|
113
|
-
},
|
|
114
|
-
content: numberedLines + navigationHint,
|
|
115
|
-
has_more: hasMore,
|
|
116
|
-
has_prev: hasPrev,
|
|
117
|
-
});
|
|
118
|
-
},
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
//# sourceMappingURL=paper-browser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"paper-browser.js","sourceRoot":"","sources":["../../../src/tools/paper-browser.ts"],"names":[],"mappings":"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"}
|