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.
Files changed (138) hide show
  1. package/dist/index.d.ts.map +1 -1
  2. package/dist/index.js +1 -76
  3. package/dist/index.js.map +1 -1
  4. package/dist/src/cli/research.d.ts.map +1 -1
  5. package/dist/src/cli/research.js +6 -23
  6. package/dist/src/cli/research.js.map +1 -1
  7. package/dist/src/commands/metabolism-status.d.ts.map +1 -1
  8. package/dist/src/commands/metabolism-status.js +5 -25
  9. package/dist/src/commands/metabolism-status.js.map +1 -1
  10. package/dist/src/commands.d.ts +8 -8
  11. package/dist/src/commands.d.ts.map +1 -1
  12. package/dist/src/commands.js +91 -262
  13. package/dist/src/commands.js.map +1 -1
  14. package/dist/src/templates/bootstrap.d.ts.map +1 -1
  15. package/dist/src/templates/bootstrap.js +45 -59
  16. package/dist/src/templates/bootstrap.js.map +1 -1
  17. package/dist/src/types.d.ts +2 -10
  18. package/dist/src/types.d.ts.map +1 -1
  19. package/openclaw.plugin.json +3 -16
  20. package/package.json +2 -3
  21. package/skills/idea-generation/SKILL.md +20 -44
  22. package/skills/idea-generation/references/code-mapping.md +3 -3
  23. package/skills/idea-generation/references/idea-template.md +1 -1
  24. package/skills/idea-generation/references/reading-long-papers.md +3 -3
  25. package/skills/metabolism/SKILL.md +80 -36
  26. package/skills/paper-download/SKILL.md +61 -0
  27. package/skills/research-collect/SKILL.md +41 -111
  28. package/skills/research-experiment/SKILL.md +11 -12
  29. package/skills/research-implement/SKILL.md +10 -11
  30. package/skills/research-pipeline/SKILL.md +23 -31
  31. package/skills/research-plan/SKILL.md +7 -11
  32. package/skills/research-review/SKILL.md +21 -22
  33. package/skills/research-survey/SKILL.md +11 -25
  34. package/skills/write-review-paper/SKILL.md +12 -12
  35. package/skills/write-review-paper/references/note-template.md +1 -1
  36. package/skills/write-review-paper/references/survey-template.md +1 -1
  37. package/dist/src/hooks/research-mode.d.ts +0 -22
  38. package/dist/src/hooks/research-mode.d.ts.map +0 -1
  39. package/dist/src/hooks/research-mode.js +0 -35
  40. package/dist/src/hooks/research-mode.js.map +0 -1
  41. package/dist/src/hooks/scientify-cron-autofill.d.ts +0 -15
  42. package/dist/src/hooks/scientify-cron-autofill.d.ts.map +0 -1
  43. package/dist/src/hooks/scientify-cron-autofill.js +0 -156
  44. package/dist/src/hooks/scientify-cron-autofill.js.map +0 -1
  45. package/dist/src/hooks/scientify-signature.d.ts +0 -21
  46. package/dist/src/hooks/scientify-signature.d.ts.map +0 -1
  47. package/dist/src/hooks/scientify-signature.js +0 -150
  48. package/dist/src/hooks/scientify-signature.js.map +0 -1
  49. package/dist/src/knowledge-state/project.d.ts +0 -13
  50. package/dist/src/knowledge-state/project.d.ts.map +0 -1
  51. package/dist/src/knowledge-state/project.js +0 -88
  52. package/dist/src/knowledge-state/project.js.map +0 -1
  53. package/dist/src/knowledge-state/render.d.ts +0 -63
  54. package/dist/src/knowledge-state/render.d.ts.map +0 -1
  55. package/dist/src/knowledge-state/render.js +0 -368
  56. package/dist/src/knowledge-state/render.js.map +0 -1
  57. package/dist/src/knowledge-state/store.d.ts +0 -19
  58. package/dist/src/knowledge-state/store.d.ts.map +0 -1
  59. package/dist/src/knowledge-state/store.js +0 -978
  60. package/dist/src/knowledge-state/store.js.map +0 -1
  61. package/dist/src/knowledge-state/types.d.ts +0 -182
  62. package/dist/src/knowledge-state/types.d.ts.map +0 -1
  63. package/dist/src/knowledge-state/types.js +0 -2
  64. package/dist/src/knowledge-state/types.js.map +0 -1
  65. package/dist/src/literature/subscription-state.d.ts +0 -112
  66. package/dist/src/literature/subscription-state.d.ts.map +0 -1
  67. package/dist/src/literature/subscription-state.js +0 -696
  68. package/dist/src/literature/subscription-state.js.map +0 -1
  69. package/dist/src/research-subscriptions/constants.d.ts +0 -16
  70. package/dist/src/research-subscriptions/constants.d.ts.map +0 -1
  71. package/dist/src/research-subscriptions/constants.js +0 -59
  72. package/dist/src/research-subscriptions/constants.js.map +0 -1
  73. package/dist/src/research-subscriptions/cron-client.d.ts +0 -8
  74. package/dist/src/research-subscriptions/cron-client.d.ts.map +0 -1
  75. package/dist/src/research-subscriptions/cron-client.js +0 -81
  76. package/dist/src/research-subscriptions/cron-client.js.map +0 -1
  77. package/dist/src/research-subscriptions/delivery.d.ts +0 -10
  78. package/dist/src/research-subscriptions/delivery.d.ts.map +0 -1
  79. package/dist/src/research-subscriptions/delivery.js +0 -82
  80. package/dist/src/research-subscriptions/delivery.js.map +0 -1
  81. package/dist/src/research-subscriptions/handlers.d.ts +0 -6
  82. package/dist/src/research-subscriptions/handlers.d.ts.map +0 -1
  83. package/dist/src/research-subscriptions/handlers.js +0 -204
  84. package/dist/src/research-subscriptions/handlers.js.map +0 -1
  85. package/dist/src/research-subscriptions/parse.d.ts +0 -11
  86. package/dist/src/research-subscriptions/parse.d.ts.map +0 -1
  87. package/dist/src/research-subscriptions/parse.js +0 -492
  88. package/dist/src/research-subscriptions/parse.js.map +0 -1
  89. package/dist/src/research-subscriptions/prompt.d.ts +0 -5
  90. package/dist/src/research-subscriptions/prompt.d.ts.map +0 -1
  91. package/dist/src/research-subscriptions/prompt.js +0 -347
  92. package/dist/src/research-subscriptions/prompt.js.map +0 -1
  93. package/dist/src/research-subscriptions/types.d.ts +0 -66
  94. package/dist/src/research-subscriptions/types.d.ts.map +0 -1
  95. package/dist/src/research-subscriptions/types.js +0 -2
  96. package/dist/src/research-subscriptions/types.js.map +0 -1
  97. package/dist/src/research-subscriptions.d.ts +0 -2
  98. package/dist/src/research-subscriptions.d.ts.map +0 -1
  99. package/dist/src/research-subscriptions.js +0 -2
  100. package/dist/src/research-subscriptions.js.map +0 -1
  101. package/dist/src/services/auto-updater.d.ts +0 -15
  102. package/dist/src/services/auto-updater.d.ts.map +0 -1
  103. package/dist/src/services/auto-updater.js +0 -188
  104. package/dist/src/services/auto-updater.js.map +0 -1
  105. package/dist/src/tools/arxiv-download.d.ts +0 -24
  106. package/dist/src/tools/arxiv-download.d.ts.map +0 -1
  107. package/dist/src/tools/arxiv-download.js +0 -177
  108. package/dist/src/tools/arxiv-download.js.map +0 -1
  109. package/dist/src/tools/github-search-tool.d.ts +0 -25
  110. package/dist/src/tools/github-search-tool.d.ts.map +0 -1
  111. package/dist/src/tools/github-search-tool.js +0 -114
  112. package/dist/src/tools/github-search-tool.js.map +0 -1
  113. package/dist/src/tools/openreview-lookup.d.ts +0 -31
  114. package/dist/src/tools/openreview-lookup.d.ts.map +0 -1
  115. package/dist/src/tools/openreview-lookup.js +0 -414
  116. package/dist/src/tools/openreview-lookup.js.map +0 -1
  117. package/dist/src/tools/paper-browser.d.ts +0 -23
  118. package/dist/src/tools/paper-browser.d.ts.map +0 -1
  119. package/dist/src/tools/paper-browser.js +0 -121
  120. package/dist/src/tools/paper-browser.js.map +0 -1
  121. package/dist/src/tools/scientify-cron.d.ts +0 -63
  122. package/dist/src/tools/scientify-cron.d.ts.map +0 -1
  123. package/dist/src/tools/scientify-cron.js +0 -265
  124. package/dist/src/tools/scientify-cron.js.map +0 -1
  125. package/dist/src/tools/scientify-literature-state.d.ts +0 -303
  126. package/dist/src/tools/scientify-literature-state.d.ts.map +0 -1
  127. package/dist/src/tools/scientify-literature-state.js +0 -957
  128. package/dist/src/tools/scientify-literature-state.js.map +0 -1
  129. package/dist/src/tools/unpaywall-download.d.ts +0 -21
  130. package/dist/src/tools/unpaywall-download.d.ts.map +0 -1
  131. package/dist/src/tools/unpaywall-download.js +0 -169
  132. package/dist/src/tools/unpaywall-download.js.map +0 -1
  133. package/dist/src/tools/workspace.d.ts +0 -32
  134. package/dist/src/tools/workspace.d.ts.map +0 -1
  135. package/dist/src/tools/workspace.js +0 -69
  136. package/dist/src/tools/workspace.js.map +0 -1
  137. package/skills/metabolism-init/SKILL.md +0 -80
  138. 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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"}