🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

天文科研工作台 wing-tn/astro-ph-researcher

DeepSeek 客户端
wing-tn12 天前有提交已提供中文文档扫描:含敏感能力兼容 / 相关生态

在本地窗口管理文献、写作与 FITS 数据分析

30.6/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/23 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/wing-tn/astro-ph-researcher.git

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 12 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件读取剪贴板或密钥环境变量写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 80 处,展示前 80 条)
  • 读取密钥环境变量
    lib/index.js:176
    adsToken: process.env.ADS_API_TOKEN ?? '',
  • 读取密钥环境变量
    lib/index.js:177
    openAlexKey: process.env.OPENALEX_API_KEY ?? '',
  • 读取本地文件
    lib/index.js:1310
    const data = await readFile(file);
  • 读取密钥环境变量
    lib/index.js:1469
    adsConfigured: Boolean(process.env.ADS_API_TOKEN),
  • 读取密钥环境变量
    lib/index.js:1470
    openAlexKeyConfigured: Boolean(process.env.OPENALEX_API_KEY),
  • 读取本地文件
    lib/index.js:1476
    katex: existsSync(join(KATEX_DIR, 'katex.min.js')) && existsSync(join(KATEX_DIR, 'katex.min.css')),
  • 发起网络请求
    lib/client.js:303
    response = await fetch(`${API}${path}`, init);
  • 写入剪贴板
    lib/client.js:490
    navigator.clipboard.writeText(text).catch(() => {});
  • 发起网络请求
    lib/client.js:644
    const response = await fetch(`${API}/references/export?format=bibtex`);
  • 发起网络请求
    lib/client.js:916
    const response = await fetch(`${API}/writing/formats/export`);
  • 发起网络请求
    lib/client.js:1075
    const response = await fetch(`${API}/export?format=${encodeURIComponent(format)}`);
  • 读取剪贴板
    lib/client.js:3127
    else if (navigator.clipboard?.readText) navigator.clipboard.readText().then((text) => text && setNote(String(text).slice(0, 8000))).catch(() => {});
  • 发起网络请求
    lib/client.js:3141
    h('button', { className: 'aw-btn', type: 'button', onClick: () => fetch(`${API}/plan/export?format=md`).then((r) => r.text()).then((text) => { const b
  • 读取本地文件
    lib/skill-files.js:35
    entries = readdirSync(rootDir);
  • 读取本地文件
    lib/skill-files.js:43
    stat = statSync(dir);
  • 读取本地文件
    lib/skill-files.js:49
    const text = readFileSync(join(dir, 'SKILL.md'), 'utf8');
  • 读取密钥环境变量
    lib/literature.js:561
    const adsToken = String(params.adsToken ?? process.env.ADS_API_TOKEN ?? '').trim();
  • 读取密钥环境变量
    lib/literature.js:562
    const openAlexKey = String(params.openAlexKey ?? process.env.OPENALEX_API_KEY ?? '').trim();
  • 读取本地文件
    lib/dictionary.js:84
    const raw = await readFile(DICTIONARY_PATH, 'utf8');
  • 写入本地文件
    lib/dictionary.js:279
    await mkdir(dirname(DICTIONARY_PATH), { recursive: true });
  • 写入本地文件
    lib/dictionary.js:281
    await writeFile(tmp, JSON.stringify(payload), 'utf8');
  • 写入本地文件
    lib/dictionary.js:282
    await rename(tmp, DICTIONARY_PATH);
  • 写入本地文件
    lib/references.js:91
    await mkdir(dirname(REFERENCES_PATH), { recursive: true });
  • 写入本地文件
    lib/references.js:93
    await writeFile(tmp, `${JSON.stringify(payload, null, 2)}\n`, 'utf8');
  • 写入本地文件
    lib/references.js:94
    await rename(tmp, REFERENCES_PATH);
  • 读取本地文件
    lib/references.js:119
    const raw = await readFile(REFERENCES_PATH, 'utf8');
  • 读取本地文件
    lib/writing.js:47
    const text = readFileSync(urlOrPath, 'utf8');
  • 读取本地文件
    lib/writing.js:88
    const raw = await readFile(PROJECTS_PATH, 'utf8');
  • 读取本地文件
    lib/writing.js:96
    const raw = await readFile(CUSTOM_FORMATS_PATH, 'utf8');
  • 写入本地文件
    lib/writing.js:108
    await mkdir(dirname(path), { recursive: true });
  • 写入本地文件
    lib/writing.js:110
    await writeFile(tmp, `${JSON.stringify(value, null, 2)}\n`, 'utf8');
  • 写入本地文件
    lib/writing.js:111
    await rename(tmp, path);
  • 删除本地文件递归
    lib/writing.js:183
    rmSync(join(PROJECTS_DIR, id), { recursive: true, force: true });
  • 写入本地文件
    lib/writing.js:202
    await mkdir(dir, { recursive: true });
  • 写入本地文件
    lib/writing.js:210
    await writeFile(target, buffer);
  • 写入本地文件
    lib/thesis-fetcher.js:234
    await writeFile(targetPath, buffer);
  • 读取本地文件
    lib/thesis-fetcher.js:256
    return JSON.parse(await readFile(join(FORMATS_DIR, safeId(formatId), 'manifest.json'), 'utf8'));
  • 写入本地文件
    lib/thesis-fetcher.js:264
    await mkdir(dir, { recursive: true });
  • 写入本地文件
    lib/thesis-fetcher.js:265
    await writeFile(join(dir, 'manifest.json'), `${JSON.stringify(manifest, null, 2)}\n`, 'utf8');
  • 写入本地文件
    lib/thesis-fetcher.js:282
    await mkdir(join(dir, 'downloads'), { recursive: true });
  • 写入本地文件
    lib/thesis-fetcher.js:352
    await mkdir(dir, { recursive: true });
  • 写入本地文件
    lib/thesis-fetcher.js:360
    await writeFile(targetPath, buffer);
  • 读取本地文件
    lib/writing-goals.js:8
    const data = JSON.parse(readFileSync(SEED, 'utf8'));
  • 读取本地文件
    lib/v2-library.js:5
    try { return JSON.parse(readFileSync(new URL(name, ROOT), 'utf8')); } catch { return {}; }
  • 读取本地文件
    lib/data-library.js:75
    return JSON.parse(readFileSync(urlOrPath, 'utf8'));
  • 写入本地文件
    lib/data-library.js:144
    await mkdir(dirname(WORKFLOWS_PATH), { recursive: true });
  • 写入本地文件
    lib/data-library.js:146
    await writeFile(tmp, `${JSON.stringify({ version: 1, workflows }, null, 2)}\n`, 'utf8');
  • 写入本地文件
    lib/data-library.js:147
    await rename(tmp, WORKFLOWS_PATH);
  • 读取本地文件
    lib/data-library.js:170
    const raw = await readFile(WORKFLOWS_PATH, 'utf8');
  • 读取本地文件
    lib/store.js:73
    const raw = await readFile(path, 'utf8');
  • 读取本地文件
    lib/store.js:83
    if (!existsSync(DATA_DIR) && existsSync(LEGACY_DATA_DIR)) {
  • 写入本地文件
    lib/store.js:91
    await mkdir(DATA_DIR, { recursive: true });
  • 写入本地文件
    lib/store.js:104
    await mkdir(dirname(path), { recursive: true });
  • 写入本地文件
    lib/store.js:106
    await writeFile(tmp, `${JSON.stringify(value, null, 2)}\n`, 'utf8');
  • 写入本地文件
    lib/store.js:107
    await rename(tmp, path);
  • 发起网络请求
    lib/util.js:234
    const response = await fetch(url, {
  • 读取本地文件
    lib/plans.js:21
    if (!existsSync(PLAN_PATH)) return structuredClone(DEFAULT_PLAN);
  • 读取本地文件
    lib/plans.js:22
    const parsed = JSON.parse(await readFile(PLAN_PATH, 'utf8'));
  • 写入本地文件
    lib/plans.js:35
    await mkdir(DATA_DIR, { recursive: true });
  • 写入本地文件
    lib/plans.js:37
    await writeFile(tmp, JSON.stringify(plan, null, 2) + '\n', 'utf8');
  • 写入本地文件
    lib/plans.js:38
    await rename(tmp, PLAN_PATH);
  • 读取本地文件
    lib/deep-library.js:5
    const DATA = JSON.parse(readFileSync(fileURLToPath(new URL('../data/deep-prompts.seed.json', import.meta.url)), 'utf8'));
  • 读取本地文件
    lib/novice.js:11
    const PATH = JSON.parse(readFileSync(PATH_FILE, 'utf8'));
  • 读取本地文件
    lib/novice.js:24
    if (!existsSync(PROGRESS_FILE)) return structuredClone(EMPTY_PROGRESS);
  • 读取本地文件
    lib/novice.js:25
    const parsed = JSON.parse(await readFile(PROGRESS_FILE, 'utf8'));
  • 写入本地文件
    lib/novice.js:38
    await mkdir(DATA_DIR, { recursive: true });
  • 写入本地文件
    lib/novice.js:41
    await writeFile(tmp, JSON.stringify(next, null, 2) + '\n', 'utf8');
  • 写入本地文件
    lib/novice.js:42
    await rename(tmp, PROGRESS_FILE);
  • 读取本地文件
    lib/seed.js:14
    const raw = readFileSync(SEED_PATH, 'utf8');
  • 发起网络请求
    codex/ui/core.mjs:126
    const raw = await this.request(url, src === 'arxiv');
  • 发起网络请求
    codex/ui/core.mjs:147
    const rawResult = await this.request(url, !isDoi);
  • 读取本地文件
    codex/ui/core.mjs:165
    const state = JSON.parse(await readFile(this.path, 'utf8'));
  • 写入本地文件
    codex/ui/core.mjs:173
    await mkdir(dirname(this.path), {recursive: true});
  • 写入本地文件
    codex/ui/core.mjs:175
    await writeFile(temp, JSON.stringify(next, null, 2) + '\n', 'utf8'); await rename(temp, this.path);
  • 写入本地文件
    codex/ui/core.mjs:175
    await writeFile(temp, JSON.stringify(next, null, 2) + '\n', 'utf8'); await rename(temp, this.path);
  • 读取本地文件
    codex/ui/server.mjs:56
    if (path === '/api/statements' && req.method === 'GET') return reply(200, await readFile(join(ROOT, '../DISCLAIMER.md'),'utf8'), 'text/markdown; chars
  • 读取本地文件
    codex/ui/server.mjs:90
    const seed = JSON.parse(await readFile(join(ROOT, '../data/terms.seed.json'), 'utf8'));
  • 读取本地文件
    codex/ui/server.mjs:95
    if (req.method === 'GET' && files[path]) { const [file, type] = files[path]; return reply(200, await readFile(join(ROOT, 'public', file)), type); }
  • 读取本地文件
    codex/ui/workspace.mjs:8
    const seed = async name => JSON.parse(await readFile(new URL(`../data/${name}.json`, import.meta.url), 'utf8'));
  • 读取本地文件
    codex/ui/workspace.mjs:18
    try { const state = JSON.parse(await readFile(this.path, 'utf8')); if (state.version !== 1 || !Array.isArray(state.projects) || !state.novice || !stat
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

面向 DSH 和 Codex 的天文研究工作台:NADC 术语、参考文献、写作、评分、作者确认、物理与推荐书目、FITS/XML 格式及分析指南。

README

由 DeepSeek 最新模型翻译生成
astro-ph-researcher 3.4.0 本地双语天文研究工作台 · Local bilingual astronomy research workbench 中文使用说明 · English guide · 3.4.0 发布说明 · GitHub 发布步骤 把文献、写作、新手路径、研究计划和研究资料放进 Codex 能打开的本地窗口,同时保留原插件的 DSH 宿主/客户端、9 个 skills、离线数据与 CLI。数据存在你自己的机器上;Codex 窗口不要求 DSH,不会自动调用模型,也不会上传个人笔记。 English learning workspace 快速使用 / Quick start 需要 Node.js 22+。无需 npm install。 npm run ui 打开终端打印的本地 URL。Windows 可双击 codex/start-ui.cmd;英文入口为 codex/start-ui-en.cmd。
展开完整文档(README 剩余 1 节)
astro-ph-researcher 3.4.0

本地双语天文研究工作台 · Local bilingual astronomy research workbench

中文使用说明 · English guide · 3.4.0 发布说明 · GitHub 发布步骤

把文献、写作、新手路径、研究计划和研究资料放进 Codex 能打开的本地窗口,同时保留原插件的 DSH 宿主/客户端、9 个 skills、离线数据与 CLI。数据存在你自己的机器上;Codex 窗口不要求 DSH,不会自动调用模型,也不会上传个人笔记。

English learning workspace

快速使用 / Quick start

需要 Node.js 22+。无需 npm install。

npm run ui

打开终端打印的本地 URL。Windows 可双击 codex/start-ui.cmd;英文入口为 codex/start-ui-en.cmd。

For an English interface, run node codex/scripts/open-ui.mjs --lang en, or double-click codex/start-ui-en.cmd on Windows. The language can also be changed in the UI without rewriting your scientific content.

在 Codex 主界面提供可点击入口

本版本采用官方支持的 项目顶栏操作按钮。它随包分发,你为自己的项目安装后,就能点击启动服务并打开工作台:

node codex/scripts/install-action.mjs --project "你的 Codex 项目目录" --lang zh

English: use --lang en to install the Open Astro Workbench action. Windows users may run codex/install-button-en.cmd or codex/install-button-zh.cmd. Reopen the target project in the Codex desktop app after installation.

配置会保留现有操作,并在修改前备份。源码目录里已有相对路径模板 .codex/environments/environment.toml,可直接当 Codex 项目使用。插件/skill 安装本身不保证创建全局侧栏按钮,不能把 ChatGPT 的侧栏扩展当成 Codex 保证支持的接口。官方操作文档

功能 / Features

| 模块 | 本地窗口能力 |
| 文献 / Literature | Crossref/arXiv 检索、筛选、DOI/arXiv 核验、来源快照、去重、阅读清单及 BibTeX/Markdown/JSON 导出 |
| 写作 / Writing | 期刊/学位项目、10 种写作目标、真实材料、文本导入、10 章节编辑器、启发式检查、作者确认、Markdown 和 Codex 交接 |
| 新手 / Learning | 九步研究路径、检查项、交付物、笔记、进度;英文配套路径 |
| 计划 / Planning | 节点、上级依赖、状态、来源和交付标准;循环依赖检查 |
| 资料 / Resources | 34 方法、9 统计、30 设施、分析工具、公开源表、8 条推荐书目 |
| 研究检查 / Research checks | 9 个领域的盲点问题及笔记 |
| 汇报 / Briefing | 从阅读清单和计划生成 Markdown 大纲及演示文稿交接提示词 |
| 设置 / Settings | 中英文界面、完整工作区备份 |

英文界面、按钮和主要工作流已翻译;原始方法/设备等详细资料保留原语言并明确标注。切换语言永远不会自动翻译你的正文、笔记和原始题录。

科研边界:题录存在,不证明科学论断成立、不证明经过同行评议、也不证明未被撤稿;启发式评分不验证科学正确性;作者本人须核对并确认各节。网页为模型写作准备交接提示词;不声称已自动生成论文。汇报导出是 Markdown,不是 PPTX。投稿前核对当年官方指南。

插件与原功能

在 v3.4.0 下载页 选择 -dsh.zip(完整 DSH bundle,同时保留 Codex 目录)或 -codex-zh.zip / -codex-en.zip(独立 Codex 插件,中/英文默认入口)。-source.zip 是同版完整源码;DSH 包与源码包内容相同,另有独立说明和 SHA256 校验文件。

DSH 用户解压后,在包含 package.json 的目录运行:

dsh plugin --profile desktop add .

完全退出并重启 DSH。使用 web profile 的用户将 desktop 替换为 web。详见 DSH 3.4.0 安装与升级;完整原功能说明保留在 历史说明。

Codex 插件清单位于 codex/.codex-plugin/plugin.json。在完整源码目录可按本机 CLI 支持的命令配置本地 marketplace:

codex plugin marketplace add .
codex plugin add astro-ph-researcher@astro-ph-researcher-local

安装/更新缓存的行为依赖本机 CLI;先备份个人数据并查阅 codex plugin --help。本次发布不自动替换你已安装的缓存。9 个原 skills 的内容保持一致;离线 CLI 仍可单独运行:

node codex/scripts/astro-cli.mjs stats
node codex/scripts/astro-cli.mjs beginnertext
node codex/scripts/astro-cli.mjs goal refutation

开发与数据 text codex/ui/public/ 双语窗口 codex/ui/workspace.mjs 写作/新手/计划的本地服务 codex/ui/core.mjs 文献适配、核验、存储与导出 codex/ui/sections.mjs 复用原插件的章节、评分和作者确认逻辑 codex/scripts/ 启动器、项目按钮安装器、原离线 CLI lib/ 原 DSH 功能(保留) sh
npm test
npm run test:ui

阅读清单为 codex/ui/local-data/library.json,其余工作区为同目录 workbench.json;与原 DSH 库独立。升级前在设置页下载备份。发布脚本排除个人数据和临时文件。验收范围及限制见 VALIDATION.md。

声明、致谢与用户反馈

Copyright © 2026 天外奇航(@hyperskysail,GXU-CN)。代码与文档等采用 AIGC 辅助,科学内容仍需人工核验。作者以非盈利方式维护,现有功能免费;这一立场不缩减 MIT 许可权利。第三方资料与商标归各自权利人,致谢不表示官方背书。

用户反馈 QQ 交流群:1126615665 · 1253932197@qq.com · GitHub Issues

完整内容见 版权/AIGC/免责/非盈利声明、作者与贡献、致谢、反馈与支持 和 隐私说明。软件仍按原 MIT License 提供。
预览分享卡片长什么样 ↓wing-tn/astro-ph-researcher
分享 · DeepSeek Harness Hub
wing-tn/astro-ph-researcher

在本地窗口管理文献、写作与 FITS 数据分析

这是你的仓库?认领条目

回到顶部