scientify 2.1.0 → 3.1.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.en.md +21 -1
- package/README.md +27 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -77
- package/dist/index.js.map +1 -1
- package/dist/src/cli/research.d.ts.map +1 -1
- package/dist/src/cli/research.js +47 -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 +230 -243
- package/dist/src/commands.js.map +1 -1
- package/dist/src/release-gate.d.ts +14 -0
- package/dist/src/release-gate.d.ts.map +1 -0
- package/dist/src/release-gate.js +124 -0
- package/dist/src/release-gate.js.map +1 -0
- package/dist/src/templates/bootstrap.d.ts.map +1 -1
- package/dist/src/templates/bootstrap.js +157 -94
- 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 +11 -17
- package/package.json +2 -3
- package/skills/algorithm-selection/SKILL.md +103 -0
- package/skills/algorithm-selection/references/candidate-template.md +13 -0
- package/skills/algorithm-selection/references/selection-template.md +39 -0
- package/skills/artifact-review/SKILL.md +146 -0
- package/skills/artifact-review/references/release-gate-template.md +40 -0
- package/skills/artifact-review/references/review-checklist.md +45 -0
- package/skills/artifact-review/references/style-review-checklist.md +30 -0
- package/skills/baseline-runner/SKILL.md +103 -0
- package/skills/baseline-runner/references/baseline-matrix-template.md +9 -0
- package/skills/baseline-runner/references/baseline-report-template.md +25 -0
- package/skills/dataset-validate/SKILL.md +104 -0
- package/skills/dataset-validate/references/data-validation-template.md +38 -0
- package/skills/figure-standardize/SKILL.md +110 -0
- package/skills/figure-standardize/references/caption-template.md +12 -0
- package/skills/figure-standardize/references/figure-placement-template.md +30 -0
- package/skills/figure-standardize/references/figure-style-guide.md +36 -0
- 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/release-layout/SKILL.md +73 -0
- package/skills/release-layout/references/page-structure.md +14 -0
- package/skills/research-collect/SKILL.md +41 -111
- package/skills/research-experiment/SKILL.md +20 -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 +28 -25
- package/skills/write-paper/SKILL.md +252 -0
- package/skills/write-paper/references/boundary-notes-template.md +34 -0
- package/skills/write-paper/references/claim-inventory-template.md +32 -0
- package/skills/write-paper/references/evidence-contract.md +57 -0
- package/skills/write-paper/references/figure-callout-template.md +38 -0
- package/skills/write-paper/references/figures-manifest-template.md +44 -0
- package/skills/write-paper/references/latex/README.md +22 -0
- package/skills/write-paper/references/latex/build_paper.sh +41 -0
- package/skills/write-paper/references/latex/manuscript.tex +39 -0
- package/skills/write-paper/references/latex/references.bib +10 -0
- package/skills/write-paper/references/latex/sections/ablations.tex +3 -0
- package/skills/write-paper/references/latex/sections/abstract.tex +3 -0
- package/skills/write-paper/references/latex/sections/conclusion.tex +3 -0
- package/skills/write-paper/references/latex/sections/discussion_scope.tex +7 -0
- package/skills/write-paper/references/latex/sections/experimental_protocol.tex +3 -0
- package/skills/write-paper/references/latex/sections/introduction.tex +3 -0
- package/skills/write-paper/references/latex/sections/main_results.tex +9 -0
- package/skills/write-paper/references/latex/sections/method_system.tex +3 -0
- package/skills/write-paper/references/latex/sections/problem_setup.tex +3 -0
- package/skills/write-paper/references/latex/sections/related_work.tex +3 -0
- package/skills/write-paper/references/paper-template.md +155 -0
- package/skills/write-paper/references/paragraph-contract.md +139 -0
- package/skills/write-paper/references/paragraph-examples.md +171 -0
- package/skills/write-paper/references/style-banlist.md +81 -0
- package/skills/write-review-paper/SKILL.md +22 -16
- 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,188 +0,0 @@
|
|
|
1
|
-
import { exec } from "child_process";
|
|
2
|
-
import { readFileSync, existsSync, lstatSync } from "fs";
|
|
3
|
-
import { fileURLToPath } from "url";
|
|
4
|
-
import { dirname, join } from "path";
|
|
5
|
-
/**
|
|
6
|
-
* Get the plugin root directory (where package.json lives).
|
|
7
|
-
*/
|
|
8
|
-
function getPluginRoot() {
|
|
9
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
10
|
-
const __dirname = dirname(__filename);
|
|
11
|
-
// From dist/src/services/ → go up 3 levels to plugin root
|
|
12
|
-
// Check for package.json at each level to find the correct root
|
|
13
|
-
let root = __dirname;
|
|
14
|
-
for (let i = 0; i < 5; i++) {
|
|
15
|
-
if (existsSync(join(root, "package.json"))) {
|
|
16
|
-
return root;
|
|
17
|
-
}
|
|
18
|
-
root = dirname(root);
|
|
19
|
-
}
|
|
20
|
-
// Fallback: assume dist/src/services structure
|
|
21
|
-
return join(__dirname, "../../..");
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Check if running in development mode.
|
|
25
|
-
* Detection methods (no main package dependency):
|
|
26
|
-
* 1. SCIENTIFY_DEV=1 environment variable
|
|
27
|
-
* 2. tsconfig.json exists in plugin root (source checkout)
|
|
28
|
-
* 3. Plugin directory is a symlink (npm link / pnpm link)
|
|
29
|
-
* 4. Version contains "-dev" suffix
|
|
30
|
-
* 5. NODE_ENV=development
|
|
31
|
-
*/
|
|
32
|
-
function isDevMode() {
|
|
33
|
-
// 1. Explicit env var
|
|
34
|
-
const scientifyDev = process.env.SCIENTIFY_DEV;
|
|
35
|
-
if (scientifyDev === "1" || scientifyDev === "true") {
|
|
36
|
-
return true;
|
|
37
|
-
}
|
|
38
|
-
// 2. NODE_ENV
|
|
39
|
-
if (process.env.NODE_ENV === "development") {
|
|
40
|
-
return true;
|
|
41
|
-
}
|
|
42
|
-
const pluginRoot = getPluginRoot();
|
|
43
|
-
// 3. tsconfig.json exists (source checkout, not installed from npm)
|
|
44
|
-
if (existsSync(join(pluginRoot, "tsconfig.json"))) {
|
|
45
|
-
return true;
|
|
46
|
-
}
|
|
47
|
-
// 4. Plugin directory is a symlink (npm/pnpm link)
|
|
48
|
-
try {
|
|
49
|
-
if (lstatSync(pluginRoot).isSymbolicLink()) {
|
|
50
|
-
return true;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
catch {
|
|
54
|
-
// ignore
|
|
55
|
-
}
|
|
56
|
-
// 5. Version contains "-dev"
|
|
57
|
-
try {
|
|
58
|
-
const pkg = JSON.parse(readFileSync(join(pluginRoot, "package.json"), "utf-8"));
|
|
59
|
-
if (pkg.version && pkg.version.includes("-dev")) {
|
|
60
|
-
return true;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
catch {
|
|
64
|
-
// ignore
|
|
65
|
-
}
|
|
66
|
-
return false;
|
|
67
|
-
}
|
|
68
|
-
// Get current version from package.json
|
|
69
|
-
function getCurrentVersion() {
|
|
70
|
-
try {
|
|
71
|
-
const packagePath = join(getPluginRoot(), "package.json");
|
|
72
|
-
const pkg = JSON.parse(readFileSync(packagePath, "utf-8"));
|
|
73
|
-
return pkg.version;
|
|
74
|
-
}
|
|
75
|
-
catch {
|
|
76
|
-
return "0.0.0";
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
// Check npm registry for latest version
|
|
80
|
-
async function getLatestVersion(packageName) {
|
|
81
|
-
return new Promise((resolve) => {
|
|
82
|
-
exec(`npm view ${packageName} version`, { timeout: 10000 }, (error, stdout) => {
|
|
83
|
-
if (error) {
|
|
84
|
-
resolve(null);
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
|
-
resolve(stdout.trim());
|
|
88
|
-
});
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
// Compare semver versions: returns true if latest > current
|
|
92
|
-
function isNewerVersion(current, latest) {
|
|
93
|
-
const currentParts = current.split(".").map(Number);
|
|
94
|
-
const latestParts = latest.split(".").map(Number);
|
|
95
|
-
for (let i = 0; i < 3; i++) {
|
|
96
|
-
const c = currentParts[i] || 0;
|
|
97
|
-
const l = latestParts[i] || 0;
|
|
98
|
-
if (l > c)
|
|
99
|
-
return true;
|
|
100
|
-
if (l < c)
|
|
101
|
-
return false;
|
|
102
|
-
}
|
|
103
|
-
return false;
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Get the OpenClaw extensions directory.
|
|
107
|
-
*/
|
|
108
|
-
function getExtensionsDir() {
|
|
109
|
-
const home = process.env.HOME || process.env.USERPROFILE || "";
|
|
110
|
-
return join(home, ".openclaw", "extensions");
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Run the update using npm pack + extract approach.
|
|
114
|
-
* This avoids dependency on `openclaw` CLI being in PATH.
|
|
115
|
-
*/
|
|
116
|
-
async function runUpdate(packageName, logger) {
|
|
117
|
-
const extensionsDir = getExtensionsDir();
|
|
118
|
-
const targetDir = join(extensionsDir, packageName);
|
|
119
|
-
return new Promise((resolve) => {
|
|
120
|
-
// Use npm pack to download the tarball, then extract
|
|
121
|
-
const cmd = `cd "${extensionsDir}" && npm pack ${packageName} --pack-destination . && tar -xzf ${packageName}-*.tgz && rm -rf "${targetDir}" && mv package "${targetDir}" && rm ${packageName}-*.tgz`;
|
|
122
|
-
exec(cmd, { timeout: 120000 }, (error, stdout, stderr) => {
|
|
123
|
-
if (error) {
|
|
124
|
-
logger.warn(`Scientify auto-update failed: ${stderr || error.message}`);
|
|
125
|
-
resolve(false);
|
|
126
|
-
return;
|
|
127
|
-
}
|
|
128
|
-
logger.info(`Scientify updated. Restart gateway to apply.`);
|
|
129
|
-
resolve(true);
|
|
130
|
-
});
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
export function createAutoUpdaterService(options) {
|
|
134
|
-
const { packageName, checkIntervalMs, logger } = options;
|
|
135
|
-
let intervalId = null;
|
|
136
|
-
let isChecking = false;
|
|
137
|
-
const checkAndUpdate = async () => {
|
|
138
|
-
if (isChecking)
|
|
139
|
-
return;
|
|
140
|
-
isChecking = true;
|
|
141
|
-
try {
|
|
142
|
-
const currentVersion = getCurrentVersion();
|
|
143
|
-
const latestVersion = await getLatestVersion(packageName);
|
|
144
|
-
if (!latestVersion) {
|
|
145
|
-
logger.debug?.(`Scientify update check: could not fetch latest version`);
|
|
146
|
-
return;
|
|
147
|
-
}
|
|
148
|
-
if (isNewerVersion(currentVersion, latestVersion)) {
|
|
149
|
-
logger.info(`Scientify update available: ${currentVersion} → ${latestVersion}`);
|
|
150
|
-
await runUpdate(packageName, logger);
|
|
151
|
-
}
|
|
152
|
-
else {
|
|
153
|
-
logger.debug?.(`Scientify is up to date (${currentVersion})`);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
catch (err) {
|
|
157
|
-
logger.warn(`Scientify update check error: ${err}`);
|
|
158
|
-
}
|
|
159
|
-
finally {
|
|
160
|
-
isChecking = false;
|
|
161
|
-
}
|
|
162
|
-
};
|
|
163
|
-
return {
|
|
164
|
-
id: "scientify-auto-updater",
|
|
165
|
-
start: async () => {
|
|
166
|
-
// Skip auto-updates in development mode
|
|
167
|
-
if (isDevMode()) {
|
|
168
|
-
logger.debug?.("Scientify auto-updater skipped (dev mode)");
|
|
169
|
-
return;
|
|
170
|
-
}
|
|
171
|
-
logger.debug?.("Scientify auto-updater service started");
|
|
172
|
-
// Check once on startup (with a small delay to not block gateway start)
|
|
173
|
-
setTimeout(() => {
|
|
174
|
-
checkAndUpdate();
|
|
175
|
-
}, 5000);
|
|
176
|
-
// Then check periodically
|
|
177
|
-
intervalId = setInterval(checkAndUpdate, checkIntervalMs);
|
|
178
|
-
},
|
|
179
|
-
stop: () => {
|
|
180
|
-
if (intervalId) {
|
|
181
|
-
clearInterval(intervalId);
|
|
182
|
-
intervalId = null;
|
|
183
|
-
}
|
|
184
|
-
logger.debug?.("Scientify auto-updater service stopped");
|
|
185
|
-
},
|
|
186
|
-
};
|
|
187
|
-
}
|
|
188
|
-
//# sourceMappingURL=auto-updater.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auto-updater.js","sourceRoot":"","sources":["../../../src/services/auto-updater.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
export declare const ArxivDownloadSchema: import("@sinclair/typebox").TObject<{
|
|
2
|
-
arxiv_ids: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
|
|
3
|
-
output_dir: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
4
|
-
}>;
|
|
5
|
-
/**
|
|
6
|
-
* arxiv_download: Download papers by arxiv_id. Requires explicit output_dir.
|
|
7
|
-
*/
|
|
8
|
-
export declare function createArxivDownloadTool(): {
|
|
9
|
-
label: string;
|
|
10
|
-
name: string;
|
|
11
|
-
description: string;
|
|
12
|
-
parameters: import("@sinclair/typebox").TObject<{
|
|
13
|
-
arxiv_ids: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
|
|
14
|
-
output_dir: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
15
|
-
}>;
|
|
16
|
-
execute: (_toolCallId: string, rawArgs: unknown) => Promise<{
|
|
17
|
-
content: {
|
|
18
|
-
type: "text";
|
|
19
|
-
text: string;
|
|
20
|
-
}[];
|
|
21
|
-
details: unknown;
|
|
22
|
-
}>;
|
|
23
|
-
};
|
|
24
|
-
//# sourceMappingURL=arxiv-download.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"arxiv-download.d.ts","sourceRoot":"","sources":["../../../src/tools/arxiv-download.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,mBAAmB;;;EAO9B,CAAC;AAoIH;;GAEG;AACH,wBAAgB,uBAAuB;;;;;;;;2BAMN,MAAM,WAAW,OAAO;;;;;;;EA0DxD"}
|
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
import { Type } from "@sinclair/typebox";
|
|
2
|
-
import * as fs from "node:fs";
|
|
3
|
-
import * as path from "node:path";
|
|
4
|
-
import * as tar from "tar";
|
|
5
|
-
import { Result } from "./result.js";
|
|
6
|
-
// Rate limit: arXiv recommends ~3 seconds between requests
|
|
7
|
-
const RATE_LIMIT_MS = 3000;
|
|
8
|
-
/** Non-blocking delay that yields to event loop */
|
|
9
|
-
const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
10
|
-
export const ArxivDownloadSchema = Type.Object({
|
|
11
|
-
arxiv_ids: Type.Array(Type.String(), {
|
|
12
|
-
description: "List of arXiv IDs to download (e.g. ['2401.12345', '2312.00001']).",
|
|
13
|
-
}),
|
|
14
|
-
output_dir: Type.Optional(Type.String({
|
|
15
|
-
description: "Directory to save files. Defaults to 'papers/' relative to cwd. Can be relative or absolute.",
|
|
16
|
-
})),
|
|
17
|
-
});
|
|
18
|
-
function readStringParam(params, key, opts) {
|
|
19
|
-
const value = params[key];
|
|
20
|
-
if (value === undefined || value === null) {
|
|
21
|
-
if (opts?.required) {
|
|
22
|
-
throw new Error(`Missing required parameter: ${key}`);
|
|
23
|
-
}
|
|
24
|
-
return undefined;
|
|
25
|
-
}
|
|
26
|
-
return String(value);
|
|
27
|
-
}
|
|
28
|
-
function readArrayParam(params, key) {
|
|
29
|
-
const value = params[key];
|
|
30
|
-
if (Array.isArray(value))
|
|
31
|
-
return value.map(String);
|
|
32
|
-
if (typeof value === "string") {
|
|
33
|
-
try {
|
|
34
|
-
const parsed = JSON.parse(value);
|
|
35
|
-
if (Array.isArray(parsed))
|
|
36
|
-
return parsed.map(String);
|
|
37
|
-
}
|
|
38
|
-
catch {
|
|
39
|
-
return [value];
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
return [];
|
|
43
|
-
}
|
|
44
|
-
async function downloadTexSource(arxivId, outputDir, logger) {
|
|
45
|
-
const log = (msg) => logger?.debug?.(`[arxiv:${arxivId}] ${msg}`);
|
|
46
|
-
const paperDir = path.join(outputDir, arxivId);
|
|
47
|
-
await fs.promises.mkdir(paperDir, { recursive: true });
|
|
48
|
-
const srcUrl = `https://arxiv.org/src/${arxivId}`;
|
|
49
|
-
const tarPath = path.join(paperDir, "source.tar.gz");
|
|
50
|
-
try {
|
|
51
|
-
log(`Fetching source from ${srcUrl}`);
|
|
52
|
-
const response = await fetch(srcUrl);
|
|
53
|
-
if (!response.ok) {
|
|
54
|
-
const reason = `Source download failed: HTTP ${response.status} ${response.statusText}`;
|
|
55
|
-
log(reason);
|
|
56
|
-
const result = await downloadPdf(arxivId, outputDir, logger);
|
|
57
|
-
return { ...result, fallbackReason: reason };
|
|
58
|
-
}
|
|
59
|
-
const buffer = Buffer.from(await response.arrayBuffer());
|
|
60
|
-
log(`Downloaded ${buffer.length} bytes`);
|
|
61
|
-
await fs.promises.writeFile(tarPath, buffer);
|
|
62
|
-
const isTarGz = buffer[0] === 0x1f && buffer[1] === 0x8b;
|
|
63
|
-
log(`Format check: ${isTarGz ? "tar.gz" : "single file"}`);
|
|
64
|
-
if (isTarGz) {
|
|
65
|
-
await tar.x({ file: tarPath, cwd: paperDir });
|
|
66
|
-
await fs.promises.unlink(tarPath);
|
|
67
|
-
const files = await findTexFiles(paperDir);
|
|
68
|
-
log(`Found ${files.length} .tex files: ${files.join(", ")}`);
|
|
69
|
-
if (files.length === 0) {
|
|
70
|
-
const reason = "No .tex files found in source archive";
|
|
71
|
-
log(reason);
|
|
72
|
-
const result = await downloadPdf(arxivId, outputDir, logger);
|
|
73
|
-
return { ...result, fallbackReason: reason };
|
|
74
|
-
}
|
|
75
|
-
return { success: true, format: "tex", path: paperDir, files };
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
const texPath = path.join(paperDir, "main.tex");
|
|
79
|
-
await fs.promises.rename(tarPath, texPath);
|
|
80
|
-
log("Saved as single main.tex file");
|
|
81
|
-
return { success: true, format: "tex", path: paperDir, files: ["main.tex"] };
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
catch (error) {
|
|
85
|
-
const reason = `Source extraction error: ${error instanceof Error ? error.message : String(error)}`;
|
|
86
|
-
log(reason);
|
|
87
|
-
const result = await downloadPdf(arxivId, outputDir, logger);
|
|
88
|
-
return { ...result, fallbackReason: reason };
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
async function downloadPdf(arxivId, outputDir, logger) {
|
|
92
|
-
const log = (msg) => logger?.debug?.(`[arxiv:${arxivId}] ${msg}`);
|
|
93
|
-
try {
|
|
94
|
-
const pdfUrl = `https://arxiv.org/pdf/${arxivId}.pdf`;
|
|
95
|
-
log(`Downloading PDF: ${pdfUrl}`);
|
|
96
|
-
const response = await fetch(pdfUrl);
|
|
97
|
-
if (!response.ok) {
|
|
98
|
-
log(`PDF download failed: HTTP ${response.status}`);
|
|
99
|
-
return { success: false, format: "pdf", path: "", files: [], error: `PDF download failed: ${response.status}` };
|
|
100
|
-
}
|
|
101
|
-
const pdfPath = path.join(outputDir, `${arxivId}.pdf`);
|
|
102
|
-
const buffer = Buffer.from(await response.arrayBuffer());
|
|
103
|
-
await fs.promises.writeFile(pdfPath, buffer);
|
|
104
|
-
log(`PDF saved: ${pdfPath} (${buffer.length} bytes)`);
|
|
105
|
-
return { success: true, format: "pdf", path: pdfPath, files: [`${arxivId}.pdf`] };
|
|
106
|
-
}
|
|
107
|
-
catch (error) {
|
|
108
|
-
log(`PDF download error: ${error}`);
|
|
109
|
-
return { success: false, format: "pdf", path: "", files: [], error: String(error) };
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
async function findTexFiles(dir) {
|
|
113
|
-
const files = [];
|
|
114
|
-
const entries = await fs.promises.readdir(dir, { withFileTypes: true });
|
|
115
|
-
for (const entry of entries) {
|
|
116
|
-
const fullPath = path.join(dir, entry.name);
|
|
117
|
-
if (entry.isDirectory()) {
|
|
118
|
-
const subFiles = await findTexFiles(fullPath);
|
|
119
|
-
files.push(...subFiles.map((f) => path.join(entry.name, f)));
|
|
120
|
-
}
|
|
121
|
-
else if (entry.name.endsWith(".tex")) {
|
|
122
|
-
files.push(entry.name);
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
return files;
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* arxiv_download: Download papers by arxiv_id. Requires explicit output_dir.
|
|
129
|
-
*/
|
|
130
|
-
export function createArxivDownloadTool() {
|
|
131
|
-
return {
|
|
132
|
-
label: "ArXiv Download",
|
|
133
|
-
name: "arxiv_download",
|
|
134
|
-
description: "Download arXiv papers by ID. Downloads .tex source (with PDF fallback). output_dir defaults to 'papers/' if omitted.",
|
|
135
|
-
parameters: ArxivDownloadSchema,
|
|
136
|
-
execute: async (_toolCallId, rawArgs) => {
|
|
137
|
-
const params = rawArgs;
|
|
138
|
-
const arxivIds = readArrayParam(params, "arxiv_ids");
|
|
139
|
-
const outputDir = readStringParam(params, "output_dir") ?? "papers";
|
|
140
|
-
if (arxivIds.length === 0) {
|
|
141
|
-
return Result.err("invalid_params", "arxiv_ids must be a non-empty array");
|
|
142
|
-
}
|
|
143
|
-
const resolvedOutputDir = path.resolve(outputDir);
|
|
144
|
-
await fs.promises.mkdir(resolvedOutputDir, { recursive: true });
|
|
145
|
-
const logger = { debug: (msg) => console.log(`[arxiv-download] ${msg}`) };
|
|
146
|
-
const downloads = [];
|
|
147
|
-
for (let i = 0; i < arxivIds.length; i++) {
|
|
148
|
-
const arxivId = arxivIds[i];
|
|
149
|
-
// Rate limit: wait before each request (except first)
|
|
150
|
-
if (i > 0) {
|
|
151
|
-
await delay(RATE_LIMIT_MS);
|
|
152
|
-
}
|
|
153
|
-
// Always try .tex first, fallback to PDF automatically
|
|
154
|
-
const result = await downloadTexSource(arxivId, resolvedOutputDir, logger);
|
|
155
|
-
downloads.push({
|
|
156
|
-
arxiv_id: arxivId,
|
|
157
|
-
success: result.success,
|
|
158
|
-
format: result.format,
|
|
159
|
-
path: result.path,
|
|
160
|
-
files: result.files,
|
|
161
|
-
error: result.error,
|
|
162
|
-
fallback_reason: result.fallbackReason,
|
|
163
|
-
});
|
|
164
|
-
}
|
|
165
|
-
const successful = downloads.filter((d) => d.success).length;
|
|
166
|
-
const failed = downloads.filter((d) => !d.success).length;
|
|
167
|
-
return Result.ok({
|
|
168
|
-
output_dir: resolvedOutputDir,
|
|
169
|
-
total: arxivIds.length,
|
|
170
|
-
successful,
|
|
171
|
-
failed,
|
|
172
|
-
downloads,
|
|
173
|
-
});
|
|
174
|
-
},
|
|
175
|
-
};
|
|
176
|
-
}
|
|
177
|
-
//# sourceMappingURL=arxiv-download.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"arxiv-download.js","sourceRoot":"","sources":["../../../src/tools/arxiv-download.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
export declare const GithubSearchToolSchema: import("@sinclair/typebox").TObject<{
|
|
2
|
-
query: import("@sinclair/typebox").TString;
|
|
3
|
-
max_results: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
4
|
-
language: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
5
|
-
sort: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
6
|
-
}>;
|
|
7
|
-
export declare function createGithubSearchTool(): {
|
|
8
|
-
label: string;
|
|
9
|
-
name: string;
|
|
10
|
-
description: string;
|
|
11
|
-
parameters: import("@sinclair/typebox").TObject<{
|
|
12
|
-
query: import("@sinclair/typebox").TString;
|
|
13
|
-
max_results: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
14
|
-
language: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
15
|
-
sort: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
16
|
-
}>;
|
|
17
|
-
execute: (_toolCallId: string, rawArgs: unknown) => Promise<{
|
|
18
|
-
content: {
|
|
19
|
-
type: "text";
|
|
20
|
-
text: string;
|
|
21
|
-
}[];
|
|
22
|
-
details: unknown;
|
|
23
|
-
}>;
|
|
24
|
-
};
|
|
25
|
-
//# sourceMappingURL=github-search-tool.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"github-search-tool.d.ts","sourceRoot":"","sources":["../../../src/tools/github-search-tool.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,sBAAsB;;;;;EAqBjC,CAAC;AAyCH,wBAAgB,sBAAsB;;;;;;;;;;2BAOL,MAAM,WAAW,OAAO;;;;;;;EAsExD"}
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import { Type } from "@sinclair/typebox";
|
|
2
|
-
import { Result } from "./result.js";
|
|
3
|
-
const GITHUB_SEARCH_API = "https://api.github.com/search/repositories";
|
|
4
|
-
const DEFAULT_MAX_RESULTS = 10;
|
|
5
|
-
const MAX_RESULTS_LIMIT = 30;
|
|
6
|
-
export const GithubSearchToolSchema = Type.Object({
|
|
7
|
-
query: Type.String({
|
|
8
|
-
description: "Search query for GitHub repositories (e.g. 'graph neural network recommendation').",
|
|
9
|
-
}),
|
|
10
|
-
max_results: Type.Optional(Type.Number({
|
|
11
|
-
description: "Maximum number of results (1-30). Default: 10.",
|
|
12
|
-
minimum: 1,
|
|
13
|
-
maximum: MAX_RESULTS_LIMIT,
|
|
14
|
-
})),
|
|
15
|
-
language: Type.Optional(Type.String({
|
|
16
|
-
description: "Filter by programming language (e.g. 'python', 'typescript').",
|
|
17
|
-
})),
|
|
18
|
-
sort: Type.Optional(Type.String({
|
|
19
|
-
description: 'Sort by: "stars" (default), "updated", or "best-match".',
|
|
20
|
-
})),
|
|
21
|
-
});
|
|
22
|
-
function readStringParam(params, key, opts) {
|
|
23
|
-
const value = params[key];
|
|
24
|
-
if (value === undefined || value === null) {
|
|
25
|
-
if (opts?.required) {
|
|
26
|
-
throw new Error(`Missing required parameter: ${key}`);
|
|
27
|
-
}
|
|
28
|
-
return undefined;
|
|
29
|
-
}
|
|
30
|
-
return String(value);
|
|
31
|
-
}
|
|
32
|
-
function readNumberParam(params, key, opts) {
|
|
33
|
-
const value = params[key];
|
|
34
|
-
if (value === undefined || value === null)
|
|
35
|
-
return undefined;
|
|
36
|
-
const num = Number(value);
|
|
37
|
-
if (isNaN(num))
|
|
38
|
-
return undefined;
|
|
39
|
-
return opts?.integer ? Math.floor(num) : num;
|
|
40
|
-
}
|
|
41
|
-
function resolveGithubToken() {
|
|
42
|
-
return ((process.env.GITHUB_TOKEN ?? "").trim() ||
|
|
43
|
-
(process.env.GH_TOKEN ?? "").trim() ||
|
|
44
|
-
(process.env.GITHUB_AI_TOKEN ?? "").trim() ||
|
|
45
|
-
undefined);
|
|
46
|
-
}
|
|
47
|
-
export function createGithubSearchTool() {
|
|
48
|
-
return {
|
|
49
|
-
label: "GitHub Search",
|
|
50
|
-
name: "github_search",
|
|
51
|
-
description: "Search GitHub repositories by keyword. Returns repo names, descriptions, star counts, and URLs. Reads GITHUB_TOKEN from environment for authentication.",
|
|
52
|
-
parameters: GithubSearchToolSchema,
|
|
53
|
-
execute: async (_toolCallId, rawArgs) => {
|
|
54
|
-
const params = rawArgs;
|
|
55
|
-
const query = readStringParam(params, "query", { required: true });
|
|
56
|
-
const maxResults = Math.min(readNumberParam(params, "max_results", { integer: true }) ?? DEFAULT_MAX_RESULTS, MAX_RESULTS_LIMIT);
|
|
57
|
-
const language = readStringParam(params, "language");
|
|
58
|
-
const rawSort = readStringParam(params, "sort") ?? "stars";
|
|
59
|
-
// Build GitHub search query
|
|
60
|
-
let searchQuery = query;
|
|
61
|
-
if (language) {
|
|
62
|
-
searchQuery += ` language:${language}`;
|
|
63
|
-
}
|
|
64
|
-
const sort = rawSort === "best-match" ? undefined : rawSort;
|
|
65
|
-
const urlParams = new URLSearchParams({
|
|
66
|
-
q: searchQuery,
|
|
67
|
-
per_page: String(maxResults),
|
|
68
|
-
order: "desc",
|
|
69
|
-
});
|
|
70
|
-
if (sort) {
|
|
71
|
-
urlParams.set("sort", sort);
|
|
72
|
-
}
|
|
73
|
-
const url = `${GITHUB_SEARCH_API}?${urlParams.toString()}`;
|
|
74
|
-
const token = resolveGithubToken();
|
|
75
|
-
const headers = {
|
|
76
|
-
Accept: "application/vnd.github+json",
|
|
77
|
-
"User-Agent": "scientify-agent",
|
|
78
|
-
};
|
|
79
|
-
if (token) {
|
|
80
|
-
headers.Authorization = `Bearer ${token}`;
|
|
81
|
-
}
|
|
82
|
-
let response;
|
|
83
|
-
try {
|
|
84
|
-
response = await fetch(url, { headers });
|
|
85
|
-
}
|
|
86
|
-
catch (error) {
|
|
87
|
-
return Result.err("network_error", `Failed to reach GitHub API: ${error instanceof Error ? error.message : String(error)}`);
|
|
88
|
-
}
|
|
89
|
-
if (response.status === 403) {
|
|
90
|
-
return Result.err("rate_limited", "GitHub API rate limit exceeded. Set GITHUB_TOKEN environment variable for higher limits.");
|
|
91
|
-
}
|
|
92
|
-
if (!response.ok) {
|
|
93
|
-
return Result.err("api_error", `GitHub API returned ${response.status}: ${response.statusText}`);
|
|
94
|
-
}
|
|
95
|
-
const data = (await response.json());
|
|
96
|
-
const repos = (data.items ?? []).map((repo) => ({
|
|
97
|
-
name: repo.full_name,
|
|
98
|
-
url: repo.html_url,
|
|
99
|
-
description: repo.description ?? "",
|
|
100
|
-
stars: repo.stargazers_count,
|
|
101
|
-
language: repo.language ?? "unknown",
|
|
102
|
-
updated: repo.updated_at,
|
|
103
|
-
topics: repo.topics ?? [],
|
|
104
|
-
}));
|
|
105
|
-
return Result.ok({
|
|
106
|
-
query,
|
|
107
|
-
total_count: data.total_count ?? 0,
|
|
108
|
-
returned: repos.length,
|
|
109
|
-
repos,
|
|
110
|
-
});
|
|
111
|
-
},
|
|
112
|
-
};
|
|
113
|
-
}
|
|
114
|
-
//# sourceMappingURL=github-search-tool.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"github-search-tool.js","sourceRoot":"","sources":["../../../src/tools/github-search-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,iBAAiB,GAAG,4CAA4C,CAAC;AACvE,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAC/B,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAE7B,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC,MAAM,CAAC;IAChD,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;QACjB,WAAW,EAAE,oFAAoF;KAClG,CAAC;IACF,WAAW,EAAE,IAAI,CAAC,QAAQ,CACxB,IAAI,CAAC,MAAM,CAAC;QACV,WAAW,EAAE,gDAAgD;QAC7D,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,iBAAiB;KAC3B,CAAC,CACH;IACD,QAAQ,EAAE,IAAI,CAAC,QAAQ,CACrB,IAAI,CAAC,MAAM,CAAC;QACV,WAAW,EAAE,+DAA+D;KAC7E,CAAC,CACH;IACD,IAAI,EAAE,IAAI,CAAC,QAAQ,CACjB,IAAI,CAAC,MAAM,CAAC;QACV,WAAW,EAAE,yDAAyD;KACvE,CAAC,CACH;CACF,CAAC,CAAC;AAaH,SAAS,eAAe,CAAC,MAA+B,EAAE,GAAW,EAAE,IAA6B;IAClG,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,IAAI,IAAI,EAAE,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,eAAe,CAAC,MAA+B,EAAE,GAAW,EAAE,IAA4B;IACjG,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5D,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1B,IAAI,KAAK,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IACjC,OAAO,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAC/C,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO,CACL,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;QACvC,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;QACnC,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;QAC1C,SAAS,CACV,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO;QACL,KAAK,EAAE,eAAe;QACtB,IAAI,EAAE,eAAe;QACrB,WAAW,EACT,yJAAyJ;QAC3J,UAAU,EAAE,sBAAsB;QAClC,OAAO,EAAE,KAAK,EAAE,WAAmB,EAAE,OAAgB,EAAE,EAAE;YACvD,MAAM,MAAM,GAAG,OAAkC,CAAC;YAClD,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAE,CAAC;YACpE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CACzB,eAAe,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,IAAI,mBAAmB,EAChF,iBAAiB,CAClB,CAAC;YACF,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YACrD,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,OAAO,CAAC;YAE3D,4BAA4B;YAC5B,IAAI,WAAW,GAAG,KAAK,CAAC;YACxB,IAAI,QAAQ,EAAE,CAAC;gBACb,WAAW,IAAI,aAAa,QAAQ,EAAE,CAAC;YACzC,CAAC;YAED,MAAM,IAAI,GAAG,OAAO,KAAK,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;YAC5D,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC;gBACpC,CAAC,EAAE,WAAW;gBACd,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC;gBAC5B,KAAK,EAAE,MAAM;aACd,CAAC,CAAC;YACH,IAAI,IAAI,EAAE,CAAC;gBACT,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC9B,CAAC;YAED,MAAM,GAAG,GAAG,GAAG,iBAAiB,IAAI,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC3D,MAAM,KAAK,GAAG,kBAAkB,EAAE,CAAC;YACnC,MAAM,OAAO,GAA2B;gBACtC,MAAM,EAAE,6BAA6B;gBACrC,YAAY,EAAE,iBAAiB;aAChC,CAAC;YACF,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,CAAC,aAAa,GAAG,UAAU,KAAK,EAAE,CAAC;YAC5C,CAAC;YAED,IAAI,QAAkB,CAAC;YACvB,IAAI,CAAC;gBACH,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAC3C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,+BAA+B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC9H,CAAC;YAED,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC5B,OAAO,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,0FAA0F,CAAC,CAAC;YAChI,CAAC;YAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,uBAAuB,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YACnG,CAAC;YAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAmD,CAAC;YACvF,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC9C,IAAI,EAAE,IAAI,CAAC,SAAS;gBACpB,GAAG,EAAE,IAAI,CAAC,QAAQ;gBAClB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;gBACnC,KAAK,EAAE,IAAI,CAAC,gBAAgB;gBAC5B,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,SAAS;gBACpC,OAAO,EAAE,IAAI,CAAC,UAAU;gBACxB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;aAC1B,CAAC,CAAC,CAAC;YAEJ,OAAO,MAAM,CAAC,EAAE,CAAC;gBACf,KAAK;gBACL,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,CAAC;gBAClC,QAAQ,EAAE,KAAK,CAAC,MAAM;gBACtB,KAAK;aACN,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
export declare const OpenReviewLookupSchema: import("@sinclair/typebox").TObject<{
|
|
2
|
-
query: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
3
|
-
paper_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
4
|
-
forum_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
5
|
-
external_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
6
|
-
max_results: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
7
|
-
include_reviews: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
8
|
-
review_limit: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
9
|
-
}>;
|
|
10
|
-
export declare function createOpenReviewLookupTool(): {
|
|
11
|
-
label: string;
|
|
12
|
-
name: string;
|
|
13
|
-
description: string;
|
|
14
|
-
parameters: import("@sinclair/typebox").TObject<{
|
|
15
|
-
query: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
16
|
-
paper_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
17
|
-
forum_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
18
|
-
external_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
19
|
-
max_results: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
20
|
-
include_reviews: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
21
|
-
review_limit: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
22
|
-
}>;
|
|
23
|
-
execute: (_toolCallId: string, rawArgs: unknown) => Promise<{
|
|
24
|
-
content: {
|
|
25
|
-
type: "text";
|
|
26
|
-
text: string;
|
|
27
|
-
}[];
|
|
28
|
-
details: unknown;
|
|
29
|
-
}>;
|
|
30
|
-
};
|
|
31
|
-
//# sourceMappingURL=openreview-lookup.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"openreview-lookup.d.ts","sourceRoot":"","sources":["../../../src/tools/openreview-lookup.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,sBAAsB;;;;;;;;EAyCjC,CAAC;AA0WH,wBAAgB,0BAA0B;;;;;;;;;;;;;2BAOT,MAAM,WAAW,OAAO;;;;;;;EAmFxD"}
|