rssany 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -22
- package/app/plugins/builtin/agi-eval-evaluation.rssany.js +6 -7
- package/app/plugins/builtin/amii-research-talent.rssany.js +6 -7
- package/app/plugins/builtin/anthropic-research.rssany.js +6 -8
- package/app/plugins/builtin/appen-resources.rssany.js +6 -7
- package/app/plugins/builtin/baai-wudao-paper-article.rssany.js +9 -10
- package/app/plugins/builtin/baaidata-csdn.rssany.js +6 -7
- package/app/plugins/builtin/baidu-research.rssany.js +5 -8
- package/app/plugins/builtin/brightdata-blog.rssany.js +6 -11
- package/app/plugins/builtin/bytedance-seed-research.rssany.js +5 -7
- package/app/plugins/builtin/email.rssany.js +9 -9
- package/app/plugins/builtin/five-radar.rssany.js +9 -11
- package/app/plugins/builtin/flageval-news.rssany.js +5 -7
- package/app/plugins/builtin/google-deepmind-research.rssany.js +6 -8
- package/app/plugins/builtin/google-research-datasets.rssany.js +6 -8
- package/app/plugins/builtin/google-research.rssany.js +6 -8
- package/app/plugins/builtin/hacker-news-newest.rssany.js +7 -9
- package/app/plugins/builtin/harvard-dataverse.rssany.js +6 -8
- package/app/plugins/builtin/huaweicloud-bbs-blogs.rssany.js +7 -9
- package/app/plugins/builtin/lingowhale.rssany.js +7 -9
- package/app/plugins/builtin/meituan-tech.rssany.js +7 -10
- package/app/plugins/builtin/meta-ai-publications.rssany.js +6 -11
- package/app/plugins/builtin/mila-quebec.rssany.js +6 -8
- package/app/plugins/builtin/mit-csail-research.rssany.js +7 -9
- package/app/plugins/builtin/moonshot.rssany.js +6 -8
- package/app/plugins/builtin/opendatalab-news.rssany.js +6 -7
- package/app/plugins/builtin/opendatalab.rssany.js +5 -6
- package/app/plugins/builtin/opendrivelab-autonomous-driving.rssany.js +6 -7
- package/app/plugins/builtin/opendrivelab-embodiedai.rssany.js +7 -8
- package/app/plugins/builtin/opendrivelab-publications.rssany.js +6 -8
- package/app/plugins/builtin/opendrivelab.rssany.js +7 -8
- package/app/plugins/builtin/paperswithcode.rssany.js +6 -8
- package/app/plugins/builtin/pjlab-adg-publications.rssany.js +7 -9
- package/app/plugins/builtin/rss.rssany.js +11 -12
- package/app/plugins/builtin/selectdataset.rssany.js +6 -8
- package/app/plugins/builtin/sensetime-tech-achievements.rssany.js +7 -8
- package/app/plugins/builtin/supervisely-blog.rssany.js +6 -8
- package/app/plugins/builtin/theinformation-briefings.rssany.js +7 -13
- package/app/plugins/builtin/uci-ml-repository.rssany.js +6 -7
- package/app/plugins/builtin/venturebeat.rssany.js +7 -9
- package/app/plugins/builtin/worldlabs.rssany.js +6 -8
- package/app/plugins/builtin/x.rssany.js +7 -9
- package/app/plugins/builtin/xiaohongshu.rssany.js +119 -56
- package/app/plugins/builtin/zhipu-research.rssany.js +5 -8
- package/app/plugins/site.rssany.js +25 -26
- package/{statics → app/statics}/README.md +7 -7
- package/bin/rssany.js +226 -6
- package/dist/index.js +209 -152
- package/dist/index.js.map +1 -1
- package/package.json +16 -9
- package/scripts/dev.mjs +114 -0
- package/scripts/reset.mjs +1 -1
- package/init/config.json +0 -17
- package/init/sources.json +0 -353
- package/statics/401.html +0 -56
- package/statics/404.html +0 -12
- package/statics/image.png +0 -0
- package/webui/build/200.html +0 -49
- package/webui/build/_app/env.js +0 -1
- package/webui/build/_app/immutable/assets/0.BB88QFoe.css +0 -1
- package/webui/build/_app/immutable/assets/10.Dj8_pmut.css +0 -1
- package/webui/build/_app/immutable/assets/11.qYZMiTb0.css +0 -1
- package/webui/build/_app/immutable/assets/12.DfJcfUWl.css +0 -1
- package/webui/build/_app/immutable/assets/13.BhO9zvFi.css +0 -1
- package/webui/build/_app/immutable/assets/14.CujIhjQK.css +0 -1
- package/webui/build/_app/immutable/assets/15.nNGjXhCQ.css +0 -1
- package/webui/build/_app/immutable/assets/16.PP9XLDf7.css +0 -1
- package/webui/build/_app/immutable/assets/4.9wPHhVwv.css +0 -1
- package/webui/build/_app/immutable/assets/5.B-dPiwB7.css +0 -1
- package/webui/build/_app/immutable/assets/6.B27N7pdA.css +0 -1
- package/webui/build/_app/immutable/assets/7.CrNxmd8B.css +0 -1
- package/webui/build/_app/immutable/assets/8.Cgji2b15.css +0 -1
- package/webui/build/_app/immutable/assets/9.BsCIAvn3.css +0 -1
- package/webui/build/_app/immutable/assets/BackToParentRoute.DGk-X5ow.css +0 -1
- package/webui/build/_app/immutable/assets/SourcesList.yTBBi3_m.css +0 -1
- package/webui/build/_app/immutable/assets/homeFeedPanelStore.CSvlNcpm.css +0 -1
- package/webui/build/_app/immutable/chunks/5LVkDJzw.js +0 -1
- package/webui/build/_app/immutable/chunks/B-OsL1Ct.js +0 -1
- package/webui/build/_app/immutable/chunks/B2Q1a1-H.js +0 -2
- package/webui/build/_app/immutable/chunks/BK3WtZwv.js +0 -1
- package/webui/build/_app/immutable/chunks/BQqoDzLx.js +0 -1
- package/webui/build/_app/immutable/chunks/BUApaBEI.js +0 -1
- package/webui/build/_app/immutable/chunks/BbWUOQ_m.js +0 -1
- package/webui/build/_app/immutable/chunks/Bfc47y5P.js +0 -1
- package/webui/build/_app/immutable/chunks/Bns1MuyM.js +0 -36
- package/webui/build/_app/immutable/chunks/Bp63qm3L.js +0 -1
- package/webui/build/_app/immutable/chunks/Bu9HsS-V.js +0 -1
- package/webui/build/_app/immutable/chunks/CBY2biv-.js +0 -1
- package/webui/build/_app/immutable/chunks/CVzlFH44.js +0 -1
- package/webui/build/_app/immutable/chunks/CWNeClHp.js +0 -6
- package/webui/build/_app/immutable/chunks/Cihqbfi5.js +0 -1
- package/webui/build/_app/immutable/chunks/CmjOpds-.js +0 -1
- package/webui/build/_app/immutable/chunks/D5GvRCv7.js +0 -1
- package/webui/build/_app/immutable/chunks/DEDI7Ecm.js +0 -1
- package/webui/build/_app/immutable/chunks/DFuhmi31.js +0 -1
- package/webui/build/_app/immutable/chunks/DMWEh-Ek.js +0 -2
- package/webui/build/_app/immutable/chunks/DjNLq3TF.js +0 -1
- package/webui/build/_app/immutable/chunks/Dt2CddFe.js +0 -1
- package/webui/build/_app/immutable/chunks/Dw782Tjs.js +0 -1
- package/webui/build/_app/immutable/chunks/Xy_fhzQq.js +0 -1
- package/webui/build/_app/immutable/chunks/bvuf_jZd.js +0 -36
- package/webui/build/_app/immutable/chunks/hp4PFHFv.js +0 -1
- package/webui/build/_app/immutable/chunks/lk5LaiqA.js +0 -1
- package/webui/build/_app/immutable/chunks/mW5RwvnK.js +0 -13
- package/webui/build/_app/immutable/chunks/tB7QMF3U.js +0 -1
- package/webui/build/_app/immutable/chunks/xtNWTdbD.js +0 -1
- package/webui/build/_app/immutable/entry/app.BVkrDt5l.js +0 -2
- package/webui/build/_app/immutable/entry/start.D3Q-BMMd.js +0 -1
- package/webui/build/_app/immutable/nodes/0.I1lQdWMl.js +0 -11
- package/webui/build/_app/immutable/nodes/1.BiQQfx2j.js +0 -1
- package/webui/build/_app/immutable/nodes/10.CvfUsqsw.js +0 -1
- package/webui/build/_app/immutable/nodes/11.B4LHPNL6.js +0 -1
- package/webui/build/_app/immutable/nodes/12.DVFJuIWI.js +0 -1
- package/webui/build/_app/immutable/nodes/13.nT3SOzEB.js +0 -1
- package/webui/build/_app/immutable/nodes/14.DfaAf0f8.js +0 -1
- package/webui/build/_app/immutable/nodes/15.CMzkX9OK.js +0 -1
- package/webui/build/_app/immutable/nodes/16.zPgTQNze.js +0 -24
- package/webui/build/_app/immutable/nodes/17.BtYZF6FM.js +0 -1
- package/webui/build/_app/immutable/nodes/18.BIzqhTqv.js +0 -1
- package/webui/build/_app/immutable/nodes/2.BYWOpaxy.js +0 -1
- package/webui/build/_app/immutable/nodes/3.B8Viux9S.js +0 -1
- package/webui/build/_app/immutable/nodes/4.DTSxpKm7.js +0 -2
- package/webui/build/_app/immutable/nodes/5.B6fR3n6J.js +0 -2
- package/webui/build/_app/immutable/nodes/6.j2O5Mwjv.js +0 -1
- package/webui/build/_app/immutable/nodes/7.Bd2USIrl.js +0 -1
- package/webui/build/_app/immutable/nodes/8.Bw_d63B_.js +0 -1
- package/webui/build/_app/immutable/nodes/9.pMMi5PP6.js +0 -1
- package/webui/build/_app/version.json +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rssany",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Universal RSS/Atom/JSON Feed pipeline — fetches, extracts, parses and converts any web content into consumable feeds with plugin support",
|
|
5
5
|
"author": "Joo",
|
|
6
6
|
"type": "module",
|
|
@@ -21,14 +21,15 @@
|
|
|
21
21
|
".env.example",
|
|
22
22
|
"README.md",
|
|
23
23
|
"init",
|
|
24
|
-
"scripts/reset.mjs"
|
|
24
|
+
"scripts/reset.mjs",
|
|
25
|
+
"scripts/dev.mjs"
|
|
25
26
|
],
|
|
26
27
|
"engines": {
|
|
27
28
|
"node": ">=20 <24"
|
|
28
29
|
},
|
|
29
30
|
"scripts": {
|
|
30
31
|
"build": "vite build",
|
|
31
|
-
"dev": "
|
|
32
|
+
"dev": "node scripts/dev.mjs",
|
|
32
33
|
"dev:backend": "cross-env PORT=3999 tsx app/index.ts",
|
|
33
34
|
"start": "node dist/index.js",
|
|
34
35
|
"serve:route": "node scripts/serve-route.mjs",
|
|
@@ -40,15 +41,20 @@
|
|
|
40
41
|
"typecheck": "tsc --noEmit",
|
|
41
42
|
"reset": "node scripts/reset.mjs",
|
|
42
43
|
"proxy-browser": "tsx scripts/proxy-browser.ts",
|
|
43
|
-
"webui:install": "cd webui && npm install",
|
|
44
|
-
"webui:dev": "cd webui && npm run
|
|
45
|
-
"webui:build": "cd webui && npm run build",
|
|
46
|
-
"webui:watch": "cd webui && npm run build:watch",
|
|
47
|
-
"dev:all": "
|
|
44
|
+
"webui:install": "cd app/webui && npm install",
|
|
45
|
+
"webui:dev": "cd app/webui && npm run build:watch",
|
|
46
|
+
"webui:build": "cd app/webui && npm run build",
|
|
47
|
+
"webui:watch": "cd app/webui && npm run build:watch",
|
|
48
|
+
"dev:all": "npm run dev",
|
|
48
49
|
"build:all": "npm run build && npm run webui:build",
|
|
49
50
|
"prepublishOnly": "npm run build:all",
|
|
50
51
|
"docker:build": "bash scripts/docker-build.sh",
|
|
51
|
-
"docker:build:tag": "bash scripts/docker-build.sh"
|
|
52
|
+
"docker:build:tag": "bash scripts/docker-build.sh",
|
|
53
|
+
"landing:install": "cd landing && npm install",
|
|
54
|
+
"landing:dev": "cd landing && npm run dev",
|
|
55
|
+
"landing:build": "cd landing && npm run build",
|
|
56
|
+
"deploy": "node scripts/deploy-landing.mjs",
|
|
57
|
+
"deploy:landing": "node scripts/deploy-landing.mjs"
|
|
52
58
|
},
|
|
53
59
|
"keywords": [
|
|
54
60
|
"rss",
|
|
@@ -69,6 +75,7 @@
|
|
|
69
75
|
"cross-env": "^7.0.3",
|
|
70
76
|
"eslint": "^9.15.0",
|
|
71
77
|
"globals": "^15.12.0",
|
|
78
|
+
"ssh2": "^1.17.0",
|
|
72
79
|
"tsx": "^4.19.0",
|
|
73
80
|
"typescript": "~5.6.0",
|
|
74
81
|
"typescript-eslint": "^8.15.0",
|
package/scripts/dev.mjs
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { spawn, execFileSync } from "node:child_process";
|
|
3
|
+
import { existsSync, statSync } from "node:fs";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
|
|
6
|
+
const root = join(import.meta.dirname, "..");
|
|
7
|
+
const npmCmd = "npm";
|
|
8
|
+
const webuiMarker = join(root, "app", "webui", "build", "200.html");
|
|
9
|
+
const initialMarkerMtime = existsSync(webuiMarker) ? statSync(webuiMarker).mtimeMs : 0;
|
|
10
|
+
|
|
11
|
+
const children = new Set();
|
|
12
|
+
let shuttingDown = false;
|
|
13
|
+
|
|
14
|
+
function spawnNpm(args, opts = {}) {
|
|
15
|
+
const child = spawn(npmCmd, args, {
|
|
16
|
+
cwd: root,
|
|
17
|
+
env: process.env,
|
|
18
|
+
stdio: opts.stdio ?? ["ignore", "pipe", "pipe"],
|
|
19
|
+
// Windows: Node 20.12+ / 22+ reject spawning .cmd without shell (CVE-2024-27980).
|
|
20
|
+
shell: process.platform === "win32",
|
|
21
|
+
});
|
|
22
|
+
children.add(child);
|
|
23
|
+
child.once("exit", () => children.delete(child));
|
|
24
|
+
return child;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function stopProcessTree(child) {
|
|
28
|
+
if (!child || child.killed) return;
|
|
29
|
+
if (process.platform === "win32") {
|
|
30
|
+
try {
|
|
31
|
+
execFileSync("taskkill.exe", ["/pid", String(child.pid), "/t", "/f"], { stdio: "ignore" });
|
|
32
|
+
return;
|
|
33
|
+
} catch {
|
|
34
|
+
// Fall through to plain kill.
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
child.kill("SIGTERM");
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function shutdown(code = 0) {
|
|
41
|
+
if (shuttingDown) return;
|
|
42
|
+
shuttingDown = true;
|
|
43
|
+
for (const child of Array.from(children)) stopProcessTree(child);
|
|
44
|
+
process.exitCode = code;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function pipeOutput(child, label) {
|
|
48
|
+
child.stdout?.on("data", (chunk) => process.stdout.write(`[${label}] ${chunk}`));
|
|
49
|
+
child.stderr?.on("data", (chunk) => process.stderr.write(`[${label}] ${chunk}`));
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function waitForInitialWebuiBuild(child) {
|
|
53
|
+
return new Promise((resolve, reject) => {
|
|
54
|
+
let done = false;
|
|
55
|
+
const finish = () => {
|
|
56
|
+
if (done) return;
|
|
57
|
+
done = true;
|
|
58
|
+
clearInterval(poll);
|
|
59
|
+
resolve();
|
|
60
|
+
};
|
|
61
|
+
const fail = (err) => {
|
|
62
|
+
if (done) return;
|
|
63
|
+
done = true;
|
|
64
|
+
clearInterval(poll);
|
|
65
|
+
reject(err);
|
|
66
|
+
};
|
|
67
|
+
const hasFreshMarker = () => {
|
|
68
|
+
if (!existsSync(webuiMarker)) return false;
|
|
69
|
+
return statSync(webuiMarker).mtimeMs > initialMarkerMtime;
|
|
70
|
+
};
|
|
71
|
+
const poll = setInterval(() => {
|
|
72
|
+
if (hasFreshMarker()) finish();
|
|
73
|
+
}, 500);
|
|
74
|
+
child.stdout?.on("data", (chunk) => {
|
|
75
|
+
const text = chunk.toString();
|
|
76
|
+
if (text.includes('Wrote site to "build"') || text.includes("Wrote site to 'build'")) {
|
|
77
|
+
finish();
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
child.once("exit", (code) => {
|
|
81
|
+
if (!done) fail(new Error(`webui watch exited before initial build completed (code ${code ?? "unknown"})`));
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
process.on("SIGINT", () => shutdown(0));
|
|
87
|
+
process.on("SIGTERM", () => shutdown(0));
|
|
88
|
+
|
|
89
|
+
console.log("Starting WebUI static build watcher...");
|
|
90
|
+
const webui = spawnNpm(["run", "webui:watch"]);
|
|
91
|
+
pipeOutput(webui, "webui");
|
|
92
|
+
|
|
93
|
+
try {
|
|
94
|
+
await waitForInitialWebuiBuild(webui);
|
|
95
|
+
console.log("WebUI initial build is ready. Starting backend server...");
|
|
96
|
+
const backend = spawnNpm(["run", "dev:backend"]);
|
|
97
|
+
pipeOutput(backend, "backend");
|
|
98
|
+
|
|
99
|
+
backend.once("exit", (code) => {
|
|
100
|
+
if (!shuttingDown) {
|
|
101
|
+
console.log(`Backend exited (code ${code ?? "unknown"}). Stopping WebUI watcher...`);
|
|
102
|
+
shutdown(code ?? 0);
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
webui.once("exit", (code) => {
|
|
106
|
+
if (!shuttingDown) {
|
|
107
|
+
console.log(`WebUI watcher exited (code ${code ?? "unknown"}). Stopping backend...`);
|
|
108
|
+
shutdown(code ?? 0);
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
} catch (err) {
|
|
112
|
+
console.error(err instanceof Error ? err.message : String(err));
|
|
113
|
+
shutdown(1);
|
|
114
|
+
}
|
package/scripts/reset.mjs
CHANGED
package/init/config.json
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"globalProxy": "",
|
|
3
|
-
"pipeline": {
|
|
4
|
-
"steps": [
|
|
5
|
-
{ "id": "tagger", "enabled": false },
|
|
6
|
-
{ "id": "translator", "enabled": false }
|
|
7
|
-
]
|
|
8
|
-
},
|
|
9
|
-
"deliver": {
|
|
10
|
-
"gateway": "",
|
|
11
|
-
"token": ""
|
|
12
|
-
},
|
|
13
|
-
"llm": {
|
|
14
|
-
"baseUrl": "https://api.openai.com/v1",
|
|
15
|
-
"model": "gpt-4o-mini"
|
|
16
|
-
}
|
|
17
|
-
}
|
package/init/sources.json
DELETED
|
@@ -1,353 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"sources": [
|
|
3
|
-
{
|
|
4
|
-
"ref": "https://www.theinformation.com/",
|
|
5
|
-
"label": "The Information",
|
|
6
|
-
"description": "科技商业深度报道",
|
|
7
|
-
"refresh": "1h",
|
|
8
|
-
"weight": 0.95
|
|
9
|
-
},
|
|
10
|
-
{
|
|
11
|
-
"ref": "https://techcrunch.com/feed/",
|
|
12
|
-
"label": "TechCrunch AI",
|
|
13
|
-
"description": "创业与产品资讯",
|
|
14
|
-
"refresh": "1h",
|
|
15
|
-
"weight": 0.95
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
"ref": "https://www.technologyreview.com/feed/",
|
|
19
|
-
"label": "MIT Technology Review",
|
|
20
|
-
"description": "MIT 科技评论",
|
|
21
|
-
"refresh": "1h",
|
|
22
|
-
"weight": 0.94
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
"ref": "https://venturebeat.com/category/ai/feed/",
|
|
26
|
-
"label": "VentureBeat AI频道",
|
|
27
|
-
"description": "VentureBeat AI频道",
|
|
28
|
-
"refresh": "1h",
|
|
29
|
-
"weight": 0.82
|
|
30
|
-
},
|
|
31
|
-
{
|
|
32
|
-
"ref": "https://rss.slashdot.org/Slashdot/slashdotDevelopers",
|
|
33
|
-
"label": "Slashdot开发者频道",
|
|
34
|
-
"description": "科技新闻聚合",
|
|
35
|
-
"refresh": "1h",
|
|
36
|
-
"weight": 0.62
|
|
37
|
-
},
|
|
38
|
-
{
|
|
39
|
-
"ref": "https://news.ycombinator.com/rss",
|
|
40
|
-
"label": "HN newest",
|
|
41
|
-
"description": "Hacker News 最新",
|
|
42
|
-
"refresh": "6h",
|
|
43
|
-
"weight": 0.92
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
"ref": "https://x.com/elonmusk",
|
|
47
|
-
"label": "elonmusk",
|
|
48
|
-
"description": "Elon Musk 推文",
|
|
49
|
-
"refresh": "1h",
|
|
50
|
-
"weight": 0.88
|
|
51
|
-
},
|
|
52
|
-
{
|
|
53
|
-
"ref": "https://x.com/AIatMeta",
|
|
54
|
-
"label": "Meta AI",
|
|
55
|
-
"description": "Meta AI 官方",
|
|
56
|
-
"refresh": "1h",
|
|
57
|
-
"weight": 0.88
|
|
58
|
-
},
|
|
59
|
-
{
|
|
60
|
-
"ref": "https://x.com/OpenAI",
|
|
61
|
-
"label": "OpenAI",
|
|
62
|
-
"description": "OpenAI 官方推特",
|
|
63
|
-
"refresh": "1h",
|
|
64
|
-
"weight": 0.94
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
"ref": "https://x.com/GoogleAI",
|
|
68
|
-
"label": "Google",
|
|
69
|
-
"description": "Google AI 官方",
|
|
70
|
-
"refresh": "1h",
|
|
71
|
-
"weight": 0.9
|
|
72
|
-
},
|
|
73
|
-
{
|
|
74
|
-
"ref": "https://x.com/Microsoft",
|
|
75
|
-
"label": "Microsoft",
|
|
76
|
-
"description": "微软官方",
|
|
77
|
-
"refresh": "1h",
|
|
78
|
-
"weight": 0.84
|
|
79
|
-
},
|
|
80
|
-
{
|
|
81
|
-
"ref": "https://x.com/NVIDIA",
|
|
82
|
-
"label": "NVIDIA",
|
|
83
|
-
"description": "英伟达官方",
|
|
84
|
-
"refresh": "1h",
|
|
85
|
-
"weight": 0.9
|
|
86
|
-
},
|
|
87
|
-
{
|
|
88
|
-
"ref": "https://x.com/NVIDIARobotics",
|
|
89
|
-
"label": "NVIDIA Robotics",
|
|
90
|
-
"description": "NVIDIA 机器人",
|
|
91
|
-
"refresh": "1h",
|
|
92
|
-
"weight": 0.8
|
|
93
|
-
},
|
|
94
|
-
{
|
|
95
|
-
"ref": "https://x.com/xai",
|
|
96
|
-
"label": "xAI",
|
|
97
|
-
"description": "xAI 官方",
|
|
98
|
-
"refresh": "1h",
|
|
99
|
-
"weight": 0.88
|
|
100
|
-
},
|
|
101
|
-
{
|
|
102
|
-
"ref": "https://x.com/Figure_robot",
|
|
103
|
-
"label": "Figure AI",
|
|
104
|
-
"description": "Figure 人形机器人",
|
|
105
|
-
"refresh": "1h",
|
|
106
|
-
"weight": 0.78
|
|
107
|
-
},
|
|
108
|
-
{
|
|
109
|
-
"ref": "https://rss.arxiv.org/rss/cs.CL",
|
|
110
|
-
"label": "arxiv cs.CL (NLP/LLM)",
|
|
111
|
-
"description": "NLP/大模型论文",
|
|
112
|
-
"refresh": "1day",
|
|
113
|
-
"weight": 0.96
|
|
114
|
-
},
|
|
115
|
-
{
|
|
116
|
-
"ref": "https://rss.arxiv.org/rss/cs.LG",
|
|
117
|
-
"label": "arxiv cs.LG (Machine Learning)",
|
|
118
|
-
"description": "机器学习论文",
|
|
119
|
-
"refresh": "1day",
|
|
120
|
-
"weight": 0.93
|
|
121
|
-
},
|
|
122
|
-
{
|
|
123
|
-
"ref": "https://x.com/turingcom",
|
|
124
|
-
"label": "Turing",
|
|
125
|
-
"description": "Turing 数据标注",
|
|
126
|
-
"refresh": "1h",
|
|
127
|
-
"weight": 0.52
|
|
128
|
-
},
|
|
129
|
-
{
|
|
130
|
-
"ref": "https://x.com/scale_ai",
|
|
131
|
-
"label": "Scale AI 博客",
|
|
132
|
-
"description": "Scale AI 数据标注",
|
|
133
|
-
"refresh": "1h",
|
|
134
|
-
"weight": 0.72
|
|
135
|
-
},
|
|
136
|
-
{
|
|
137
|
-
"ref": "https://x.com/labelbox",
|
|
138
|
-
"label": "Labelbox",
|
|
139
|
-
"description": "Labelbox 数据标注平台",
|
|
140
|
-
"refresh": "1h",
|
|
141
|
-
"weight": 0.54
|
|
142
|
-
},
|
|
143
|
-
{
|
|
144
|
-
"ref": "https://www.kognic.com/articles",
|
|
145
|
-
"label": "Kognic",
|
|
146
|
-
"description": "自动驾驶数据标注",
|
|
147
|
-
"refresh": "1h",
|
|
148
|
-
"weight": 0.56
|
|
149
|
-
},
|
|
150
|
-
{
|
|
151
|
-
"ref": "https://x.com/geoffreyhinton",
|
|
152
|
-
"label": "Geoffrey Hinton",
|
|
153
|
-
"description": "图灵奖得主,深度学习教父",
|
|
154
|
-
"refresh": "1h",
|
|
155
|
-
"weight": 0.9
|
|
156
|
-
},
|
|
157
|
-
{
|
|
158
|
-
"ref": "https://x.com/AndrewYNg",
|
|
159
|
-
"label": "Andrew Ng",
|
|
160
|
-
"description": "Coursera 创始人,AI 教育",
|
|
161
|
-
"refresh": "1h",
|
|
162
|
-
"weight": 0.9
|
|
163
|
-
},
|
|
164
|
-
{
|
|
165
|
-
"ref": "https://x.com/drfeifei",
|
|
166
|
-
"label": "李飞飞",
|
|
167
|
-
"description": "斯坦福 AI 实验室主任",
|
|
168
|
-
"refresh": "6h",
|
|
169
|
-
"proxy": "http://192.168.34.247:30002",
|
|
170
|
-
"weight": 0.95
|
|
171
|
-
},
|
|
172
|
-
{
|
|
173
|
-
"ref": "https://x.com/percyliang",
|
|
174
|
-
"label": "Percy Liang",
|
|
175
|
-
"description": "斯坦福 CRFM 主任",
|
|
176
|
-
"refresh": "1h",
|
|
177
|
-
"weight": 0.86
|
|
178
|
-
},
|
|
179
|
-
{
|
|
180
|
-
"ref": "https://x.com/ilyasut",
|
|
181
|
-
"label": "Ilya Sutskever",
|
|
182
|
-
"description": "OpenAI 联合创始人",
|
|
183
|
-
"refresh": "1h",
|
|
184
|
-
"weight": 0.9
|
|
185
|
-
},
|
|
186
|
-
{
|
|
187
|
-
"ref": "https://www.moonshot.ai/",
|
|
188
|
-
"label": "Moonshot",
|
|
189
|
-
"description": "月之暗面",
|
|
190
|
-
"refresh": "1day",
|
|
191
|
-
"weight": 0.85
|
|
192
|
-
},
|
|
193
|
-
{
|
|
194
|
-
"ref": "https://www.microsoft.com/en-us/research/blog/",
|
|
195
|
-
"label": "Microsoft Research",
|
|
196
|
-
"description": "微软研究院博客",
|
|
197
|
-
"refresh": "1day",
|
|
198
|
-
"weight": 0.88
|
|
199
|
-
},
|
|
200
|
-
{
|
|
201
|
-
"ref": "https://www.csail.mit.edu/research",
|
|
202
|
-
"label": "MIT CSAIL",
|
|
203
|
-
"description": "MIT 计算机与 AI 实验室",
|
|
204
|
-
"refresh": "1day",
|
|
205
|
-
"weight": 0.84
|
|
206
|
-
},
|
|
207
|
-
{
|
|
208
|
-
"ref": "https://www.anthropic.com/research",
|
|
209
|
-
"label": "Anthropic Research",
|
|
210
|
-
"description": "Anthropic 研究论文",
|
|
211
|
-
"refresh": "1day",
|
|
212
|
-
"weight": 0.95
|
|
213
|
-
},
|
|
214
|
-
{
|
|
215
|
-
"ref": "https://trendshift.io/github-trending-repositories?trending-range=1",
|
|
216
|
-
"label": "Trendshift热门仓库",
|
|
217
|
-
"description": "AI 趋势追踪",
|
|
218
|
-
"refresh": "1h",
|
|
219
|
-
"weight": 0.74
|
|
220
|
-
},
|
|
221
|
-
{
|
|
222
|
-
"ref": "https://tech.meituan.com/feed/",
|
|
223
|
-
"label": "美团技术",
|
|
224
|
-
"description": "美团技术博客",
|
|
225
|
-
"refresh": "1day",
|
|
226
|
-
"weight": 0.68
|
|
227
|
-
},
|
|
228
|
-
{
|
|
229
|
-
"ref": "https://research.google/",
|
|
230
|
-
"label": "Google Research",
|
|
231
|
-
"description": "Google 研究院",
|
|
232
|
-
"refresh": "1day",
|
|
233
|
-
"weight": 0.9
|
|
234
|
-
},
|
|
235
|
-
{
|
|
236
|
-
"ref": "https://research.google/resources/datasets/",
|
|
237
|
-
"label": "Google Datasets",
|
|
238
|
-
"description": "Google 公开数据集",
|
|
239
|
-
"refresh": "1day",
|
|
240
|
-
"weight": 0.76
|
|
241
|
-
},
|
|
242
|
-
{
|
|
243
|
-
"ref": "https://paperswithcode.co/",
|
|
244
|
-
"label": "Papers with Code",
|
|
245
|
-
"description": "论文与代码检索",
|
|
246
|
-
"refresh": "1day",
|
|
247
|
-
"weight": 0.88
|
|
248
|
-
},
|
|
249
|
-
{
|
|
250
|
-
"ref": "https://opendrivelab.com/EmbodiedAI",
|
|
251
|
-
"label": "OpenDriveLab Embodied",
|
|
252
|
-
"description": "具身智能与自动驾驶",
|
|
253
|
-
"refresh": "1day",
|
|
254
|
-
"weight": 0.8
|
|
255
|
-
},
|
|
256
|
-
{
|
|
257
|
-
"ref": "https://opendatalab.org.cn",
|
|
258
|
-
"label": "OpenDataLab",
|
|
259
|
-
"description": "开放数据平台",
|
|
260
|
-
"refresh": "1day",
|
|
261
|
-
"weight": 0.74
|
|
262
|
-
},
|
|
263
|
-
{
|
|
264
|
-
"ref": "https://mlcommons.org/research/",
|
|
265
|
-
"label": "MLCommons",
|
|
266
|
-
"description": "MLCommons 基准与研究",
|
|
267
|
-
"refresh": "1day",
|
|
268
|
-
"weight": 0.76
|
|
269
|
-
},
|
|
270
|
-
{
|
|
271
|
-
"ref": "https://mila.quebec/en",
|
|
272
|
-
"label": "Mila Quebec",
|
|
273
|
-
"description": "蒙特利尔 AI 研究所",
|
|
274
|
-
"refresh": "1day",
|
|
275
|
-
"weight": 0.82
|
|
276
|
-
},
|
|
277
|
-
{
|
|
278
|
-
"ref": "https://lmsys.org/projects/",
|
|
279
|
-
"label": "LMSys",
|
|
280
|
-
"description": "大模型排行榜",
|
|
281
|
-
"refresh": "1day",
|
|
282
|
-
"weight": 0.85
|
|
283
|
-
},
|
|
284
|
-
{
|
|
285
|
-
"ref": "https://huggingface.co/blog",
|
|
286
|
-
"label": "Hugging Face Blog",
|
|
287
|
-
"description": "Hugging Face 官方博客",
|
|
288
|
-
"refresh": "1day",
|
|
289
|
-
"weight": 0.9
|
|
290
|
-
},
|
|
291
|
-
{
|
|
292
|
-
"ref": "https://flageval.baai.ac.cn/#/news",
|
|
293
|
-
"label": "FlagEval",
|
|
294
|
-
"description": "智源大模型评测",
|
|
295
|
-
"refresh": "1day",
|
|
296
|
-
"weight": 0.7
|
|
297
|
-
},
|
|
298
|
-
{
|
|
299
|
-
"ref": "https://deepmind.google/blog/rss.xml",
|
|
300
|
-
"label": "DeepMind Research",
|
|
301
|
-
"description": "DeepMind 官方RSS",
|
|
302
|
-
"refresh": "1day",
|
|
303
|
-
"weight": 0.95
|
|
304
|
-
},
|
|
305
|
-
{
|
|
306
|
-
"ref": "https://dataverse.harvard.edu",
|
|
307
|
-
"label": "Harvard Dataverse",
|
|
308
|
-
"description": "哈佛学术数据集",
|
|
309
|
-
"refresh": "1day",
|
|
310
|
-
"weight": 0.68
|
|
311
|
-
},
|
|
312
|
-
{
|
|
313
|
-
"ref": "https://bair.berkeley.edu/blog/feed.xml",
|
|
314
|
-
"label": "Berkeley BAIR",
|
|
315
|
-
"description": "伯克利 AI 研究院",
|
|
316
|
-
"refresh": "1day",
|
|
317
|
-
"weight": 0.88
|
|
318
|
-
},
|
|
319
|
-
{
|
|
320
|
-
"ref": "https://ai.meta.com/results/?content_types%5B0%5D=publication",
|
|
321
|
-
"label": "Meta AI Publications",
|
|
322
|
-
"description": "Meta AI 论文",
|
|
323
|
-
"refresh": "1day",
|
|
324
|
-
"weight": 0.88
|
|
325
|
-
},
|
|
326
|
-
{
|
|
327
|
-
"ref": "https://rss.arxiv.org/rss/cs.AI",
|
|
328
|
-
"label": "arXiv cs.AI",
|
|
329
|
-
"description": "arXiv cs.AI",
|
|
330
|
-
"refresh": "1day",
|
|
331
|
-
"weight": 0.95
|
|
332
|
-
},
|
|
333
|
-
{
|
|
334
|
-
"ref": "https://openai.com/news/rss.xml",
|
|
335
|
-
"label": "OpenAI 博客",
|
|
336
|
-
"description": "OpenAI 官方博客",
|
|
337
|
-
"refresh": "1day",
|
|
338
|
-
"weight": 0.97
|
|
339
|
-
},
|
|
340
|
-
{
|
|
341
|
-
"ref": "https://www.reddit.com/r/LocalLLaMA.rss",
|
|
342
|
-
"label": "Reddit 开源大模型板块",
|
|
343
|
-
"refresh": "1day",
|
|
344
|
-
"weight": 0.82
|
|
345
|
-
},
|
|
346
|
-
{
|
|
347
|
-
"ref": "https://datahub.com/feed",
|
|
348
|
-
"label": "Datahub",
|
|
349
|
-
"refresh": "1day",
|
|
350
|
-
"weight": 0.94
|
|
351
|
-
}
|
|
352
|
-
]
|
|
353
|
-
}
|
package/statics/401.html
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="zh-CN">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
-
<title>401 需要登录</title>
|
|
7
|
-
<style>
|
|
8
|
-
body { font-family: system-ui, sans-serif; max-width: 560px; margin: 2rem auto; padding: 0 1rem; }
|
|
9
|
-
h1 { font-size: 1.25rem; margin-bottom: 1rem; }
|
|
10
|
-
.url { word-break: break-all; background: #f5f5f5; padding: 0.5rem 0.75rem; border-radius: 4px; margin: 0.5rem 0 1rem; font-size: 0.875rem; }
|
|
11
|
-
.btn { padding: 0.5rem 1rem; background: #333; color: #fff; border: none; border-radius: 4px; cursor: pointer; font-size: 1rem; }
|
|
12
|
-
.btn:hover { background: #555; }
|
|
13
|
-
.btn:disabled { opacity: 0.6; cursor: not-allowed; }
|
|
14
|
-
.msg { margin-top: 1rem; font-size: 0.875rem; color: #666; }
|
|
15
|
-
.links { margin-top: 1.5rem; font-size: 0.875rem; }
|
|
16
|
-
.links a { color: #0969da; text-decoration: none; }
|
|
17
|
-
.links a:hover { text-decoration: underline; }
|
|
18
|
-
</style>
|
|
19
|
-
</head>
|
|
20
|
-
<body>
|
|
21
|
-
<h1>401 需要登录</h1>
|
|
22
|
-
<p>当前请求的订阅地址需要登录后才能拉取:</p>
|
|
23
|
-
<div class="url" id="failed-url">{{listUrl}}</div>
|
|
24
|
-
<p>请点击下方按钮,在<strong>弹出的有头浏览器窗口</strong>中完成该站点的登录,完成后关闭窗口并刷新本页或 RSS 地址即可。</p>
|
|
25
|
-
<button type="button" class="btn" id="btn-login" data-list-url="{{listUrl}}">打开有头登录页</button>
|
|
26
|
-
<p class="msg" id="api-msg"></p>
|
|
27
|
-
<p class="links"><a href="/">首页</a> · <a href="/plugins">已生效插件</a>(可对需登录站点批量打开登录页)</p>
|
|
28
|
-
<script>
|
|
29
|
-
(function(){
|
|
30
|
-
var btn = document.getElementById('btn-login');
|
|
31
|
-
var urlEl = document.getElementById('failed-url');
|
|
32
|
-
var msgEl = document.getElementById('api-msg');
|
|
33
|
-
var listUrl = btn.getAttribute('data-list-url');
|
|
34
|
-
if (!listUrl) {
|
|
35
|
-
urlEl.textContent = '(未知地址)';
|
|
36
|
-
btn.disabled = true;
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
btn.onclick = function(){
|
|
40
|
-
btn.disabled = true;
|
|
41
|
-
msgEl.textContent = '正在打开登录窗口…';
|
|
42
|
-
fetch('/auth/ensure?url=' + encodeURIComponent(listUrl), { method: 'POST' })
|
|
43
|
-
.then(function(r){ return r.json(); })
|
|
44
|
-
.then(function(d){
|
|
45
|
-
msgEl.textContent = d.message || (d.ok ? '已打开登录窗口。' : '请求失败');
|
|
46
|
-
if (!d.ok) btn.disabled = false;
|
|
47
|
-
})
|
|
48
|
-
.catch(function(){
|
|
49
|
-
msgEl.textContent = '请求失败,请重试';
|
|
50
|
-
btn.disabled = false;
|
|
51
|
-
});
|
|
52
|
-
};
|
|
53
|
-
})();
|
|
54
|
-
</script>
|
|
55
|
-
</body>
|
|
56
|
-
</html>
|
package/statics/404.html
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="zh-CN">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
-
<title>404 未找到</title>
|
|
7
|
-
</head>
|
|
8
|
-
<body>
|
|
9
|
-
<h1>404 未找到</h1>
|
|
10
|
-
<p>请求的 URL 无匹配的站点规则,请检查 URL 或添加对应插件。</p>
|
|
11
|
-
</body>
|
|
12
|
-
</html>
|
package/statics/image.png
DELETED
|
Binary file
|
package/webui/build/200.html
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
<!doctype html>
|
|
2
|
-
<html lang="zh-CN">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8" />
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
-
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
7
|
-
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
8
|
-
<link
|
|
9
|
-
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap"
|
|
10
|
-
rel="stylesheet"
|
|
11
|
-
/>
|
|
12
|
-
<link rel="icon" href="/favicon.png" />
|
|
13
|
-
<link href="/_app/immutable/entry/start.D3Q-BMMd.js" rel="modulepreload">
|
|
14
|
-
<link href="/_app/immutable/chunks/5LVkDJzw.js" rel="modulepreload">
|
|
15
|
-
<link href="/_app/immutable/chunks/BbWUOQ_m.js" rel="modulepreload">
|
|
16
|
-
<link href="/_app/immutable/chunks/D5GvRCv7.js" rel="modulepreload">
|
|
17
|
-
<link href="/_app/immutable/chunks/BUApaBEI.js" rel="modulepreload">
|
|
18
|
-
<link href="/_app/immutable/chunks/Bp63qm3L.js" rel="modulepreload">
|
|
19
|
-
<link href="/_app/immutable/entry/app.BVkrDt5l.js" rel="modulepreload">
|
|
20
|
-
<link href="/_app/immutable/chunks/DMWEh-Ek.js" rel="modulepreload">
|
|
21
|
-
<link href="/_app/immutable/chunks/BK3WtZwv.js" rel="modulepreload">
|
|
22
|
-
<link href="/_app/immutable/chunks/Dt2CddFe.js" rel="modulepreload">
|
|
23
|
-
<link href="/_app/immutable/chunks/DFuhmi31.js" rel="modulepreload">
|
|
24
|
-
<link href="/_app/immutable/chunks/Xy_fhzQq.js" rel="modulepreload">
|
|
25
|
-
<link href="/_app/immutable/chunks/xtNWTdbD.js" rel="modulepreload">
|
|
26
|
-
<link href="/_app/immutable/chunks/DjNLq3TF.js" rel="modulepreload">
|
|
27
|
-
|
|
28
|
-
</head>
|
|
29
|
-
<body>
|
|
30
|
-
<div id="svelte">
|
|
31
|
-
<script>
|
|
32
|
-
{
|
|
33
|
-
__sveltekit_1ciqfeh = {
|
|
34
|
-
base: ""
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
const element = document.currentScript.parentElement;
|
|
38
|
-
|
|
39
|
-
Promise.all([
|
|
40
|
-
import("/_app/immutable/entry/start.D3Q-BMMd.js"),
|
|
41
|
-
import("/_app/immutable/entry/app.BVkrDt5l.js")
|
|
42
|
-
]).then(([kit, app]) => {
|
|
43
|
-
kit.start(app, element);
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
</script>
|
|
47
|
-
</div>
|
|
48
|
-
</body>
|
|
49
|
-
</html>
|
package/webui/build/_app/env.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export const env={}
|