面向科研人员,提供一站式 AI 科研工作台,用于高效完成文献阅读、假设提出、代码编写、实验试错与参数调优。核心亮点包括海量科研数据源一键接入、安全沙箱内代码自主探索、复杂任务自动拆解与全链路可溯源。【此简介由AI生成】
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
feat(config)!: move the data directory to .sciencediscovery-data Both launchers wrote their runtime root to an undecorated directory: the repository launcher to <repo>/data, which was never gitignored and is easy to mistake for source, and the single-file launcher to ./science-discovery-data. Default both to .sciencediscovery-data, resolved from the repository root and from the launcher's working directory respectively. Changed in every place that declared a default: scripts/start-stack.sh, the API and Runner config loaders, the memory-graph logging config, .env.example, and the launcher CLI options and usage text. Existing installations are migrated once rather than orphaned. start-stack.sh moves an existing data/ directory, using the [compat] idiom the script already uses for the SCIENCE_AGENT_* to SCIENCE_DISCOVERY_* rename. The launcher now walks both former defaults, science-discovery-data before the older science-agent-data, so a host on either one is carried over; migrateLegacyDirectory already refuses to replace an existing target, so the newer wins and the older logs a skip. Neither path runs when the data directory is set explicitly. .dockerignore excludes the new name as well. That exclusion is what keeps bootstrap tokens and model-secrets.key out of the build context, so it has to move with the default; data/ stays excluded for un-migrated checkouts. Docker keeps its own /app/data bind mount. | 1 个月前 | |
chore: ignore local stack runtime, document the CI layer entry points The local stack writes its data directory to <repo>/data by default, and packages/provenance falls back to <cwd>/logs when no data directory is configured, so a plain start-stack run leaves an untracked data tree and a reviewer NDJSON in the checkout. Ignore both. CONTRIBUTING.md documented pnpm check and the smoke scripts but not the ci:ut / ci:st / ci:e2e aggregates CI actually runs, nor that their result and runtime directories default to container-only paths. Add that, with a pointer to .ci/README.md for the image and the tag catalog. Also record in .ci/README.md that running the image against a host checkout rebinds node_modules to the container's pnpm store, after which host commands abort with ERR_PNPM_ABORTED_REMOVE_MODULES_DIR_NO_TTY until a CI=1 reinstall. | 1 个月前 | |
first commit | 1 个月前 | |
ci(codearts): add a merge-request smoke test to the GitCode pipeline The pipeline converted to a repository-hosted definition carried a single placeholder job with no steps, so a merge request on GitCode ran nothing. Fill that job in with the smallest useful check: print the pipeline and source context, probe the runner for a checkout and for git/node/pnpm/uv/ docker/bwrap, write one artifact file and read it back. The final test -s turns the artifact into an assertion rather than a log line. The trigger, the source binding and every field the platform generated are left untouched. The four merge-request types already match the GitHub workflow's opened/synchronize/reopened, plus merge when the request lands. This is the groundwork for running the same UT/ST/E2E layers here: what the probe reports decides whether the ported jobs need their own clone step and how much of the toolchain they have to install. | 1 个月前 | |
ci(gitcode): run UT, ST and mocked E2E on GitCode workflows The CodeArts pipeline in .codearts/workflow never executed on a merge request: MR !29 shows check_tasks_num 0, and the v8 actions API reports no workflows, runs or runners for the repository. Rather than keep guessing at that surface, run CI on GitCode workflows, which document the same push/pull_request triggers and plain run: steps as the GitHub side. The three jobs call pnpm ci:ut, pnpm ci:st and pnpm ci:e2e — the same entry points as .github/workflows/ci.yml, so neither platform grows its own test definition. Three runner differences are handled explicitly. checkout-action places the source in ./repo_workspace on the documented sample runner, so each command enters that directory when it exists and stays put otherwise. Only what setup-node provides is assumed present: pnpm comes from corepack via the packageManager pin, uv from its installer, and bubblewrap from apt, with PATH additions re-exported per step because they do not survive the step boundary. UT and E2E also clear kernel.apparmor_restrict_unprivileged_userns, which Ubuntu 24.04 sets and which blocks both the sandbox and Chromium. There is no artifact upload action here, so each job prints its run.log tail and the E2E job parses results.json for the pass/skip/fail counts and every title that did not pass. Playwright exits 0 on a skip; without that step a green job can still hide a journey that never executed. | 1 个月前 | |
ci: name the pull_request activity types explicitly No behaviour change: opened, synchronize and reopened are what GitHub applies when the event is listed without types. Spelling them out records the intended contract, so a later edit to the trigger list cannot drop per-commit checks on an open pull request without it being visible in the diff. | 1 个月前 | |
Merge upstream/main into pr_25: resolve conflict, adopt atomgit-bot review fixes Conflict resolution: - apps/web/package.json: keep cytoscape deps (per maintainer) AND add the PR's d3-force/d3-drag/d3-zoom/d3-selection/d3-transition deps; adopt upstream's @science-agent -> @sciencediscovery scope rename for the schema workspace dep. No files left with @science-agent imports after the merge carried upstream's rename through. Adopt atomgit-bot P2 review suggestions (both blocked CI): - P2#1 (EDGE_COLORS keys): MemoryGraphCanvas.tsx still used the pre-rename edge keys extracted_from/cites/states while the schema (and every other consumer) had already renamed them to extracts/supports/stated_in. Record<MemoryGraphEdgeType,string> with extra+missing keys failed typecheck (root cause of CI UT FAILED). Restore extracts/supports/stated_in. - P2#2 (fitAll viewport): fitAll used build-time closure width/height instead of ResizeObserver-updated ref.width/ref.height, so resize and zero-size-first-paint fit on stale dimensions. Switch to ref.width/height. P3 cleanups: - Remove dead chain.viewRelatedSubTasks/collapseSubTasks/collapsedCount/ expand i18n keys (en+zh) and .memory-paper-chain-row CSS (no consumers). - Add missing .memory-canvas-node.search-hit CSS rule the canvas applies at line 807 so search hits actually highlight. Tests: - New apps/web/tests/MemoryGraphCanvas.test.tsx locks the contract that EDGE_COLORS/NODE_COLORS keys exactly match the schema unions (the P2#1 regression), plus graphNodeName truncation/basename/priority-order and graphNodeDisplayNames #n suffixing. Verified: typecheck 0 errors, web test 379/379 pass, build green. | 1 个月前 | |
chore(npm): 第一方包改名为 sciencediscovery 作用域 仓根包名 science-agent 改为 sciencediscovery,17 个 workspace 包 @science-agent/* 改为 @sciencediscovery/*,同步全部 import、 pnpm --filter 调用、架构检查断言、发布脚本与 pnpm-lock.yaml。 e2e 测试工程 science-agent-e2e 一并改名并更新 CI 缓存根目录。 | 1 个月前 | |
feat(config)!: move the data directory to .sciencediscovery-data Both launchers wrote their runtime root to an undecorated directory: the repository launcher to <repo>/data, which was never gitignored and is easy to mistake for source, and the single-file launcher to ./science-discovery-data. Default both to .sciencediscovery-data, resolved from the repository root and from the launcher's working directory respectively. Changed in every place that declared a default: scripts/start-stack.sh, the API and Runner config loaders, the memory-graph logging config, .env.example, and the launcher CLI options and usage text. Existing installations are migrated once rather than orphaned. start-stack.sh moves an existing data/ directory, using the [compat] idiom the script already uses for the SCIENCE_AGENT_* to SCIENCE_DISCOVERY_* rename. The launcher now walks both former defaults, science-discovery-data before the older science-agent-data, so a host on either one is carried over; migrateLegacyDirectory already refuses to replace an existing target, so the newer wins and the older logs a skip. Neither path runs when the data directory is set explicitly. .dockerignore excludes the new name as well. That exclusion is what keeps bootstrap tokens and model-secrets.key out of the build context, so it has to move with the default; data/ stays excluded for un-migrated checkouts. Docker keeps its own /app/data bind mount. | 1 个月前 | |
Merge origin/main into chore/rename-internal-packages | 1 个月前 | |
feat(config)!: move the data directory to .sciencediscovery-data Both launchers wrote their runtime root to an undecorated directory: the repository launcher to <repo>/data, which was never gitignored and is easy to mistake for source, and the single-file launcher to ./science-discovery-data. Default both to .sciencediscovery-data, resolved from the repository root and from the launcher's working directory respectively. Changed in every place that declared a default: scripts/start-stack.sh, the API and Runner config loaders, the memory-graph logging config, .env.example, and the launcher CLI options and usage text. Existing installations are migrated once rather than orphaned. start-stack.sh moves an existing data/ directory, using the [compat] idiom the script already uses for the SCIENCE_AGENT_* to SCIENCE_DISCOVERY_* rename. The launcher now walks both former defaults, science-discovery-data before the older science-agent-data, so a host on either one is carried over; migrateLegacyDirectory already refuses to replace an existing target, so the newer wins and the older logs a skip. Neither path runs when the data directory is set explicitly. .dockerignore excludes the new name as well. That exclusion is what keeps bootstrap tokens and model-secrets.key out of the build context, so it has to move with the default; data/ stays excluded for un-migrated checkouts. Docker keeps its own /app/data bind mount. | 1 个月前 | |
feat(config)!: move the data directory to .sciencediscovery-data Both launchers wrote their runtime root to an undecorated directory: the repository launcher to <repo>/data, which was never gitignored and is easy to mistake for source, and the single-file launcher to ./science-discovery-data. Default both to .sciencediscovery-data, resolved from the repository root and from the launcher's working directory respectively. Changed in every place that declared a default: scripts/start-stack.sh, the API and Runner config loaders, the memory-graph logging config, .env.example, and the launcher CLI options and usage text. Existing installations are migrated once rather than orphaned. start-stack.sh moves an existing data/ directory, using the [compat] idiom the script already uses for the SCIENCE_AGENT_* to SCIENCE_DISCOVERY_* rename. The launcher now walks both former defaults, science-discovery-data before the older science-agent-data, so a host on either one is carried over; migrateLegacyDirectory already refuses to replace an existing target, so the newer wins and the older logs a skip. Neither path runs when the data directory is set explicitly. .dockerignore excludes the new name as well. That exclusion is what keeps bootstrap tokens and model-secrets.key out of the build context, so it has to move with the default; data/ stays excluded for un-migrated checkouts. Docker keeps its own /app/data bind mount. | 1 个月前 | |
chore(rename): 库内第一方 scienceagent 自称改为 sciencediscovery 覆盖容器与沙箱路径(/opt/sciencediscovery、/run/sciencediscovery、 egress 与 python-packages 挂载)、compose 服务与镜像名、CI 镜像与缓存 目录、发布元数据(payload magic、product、单文件与 micromamba 包名)、 API health 与 MCP 客户端名、环境快照 format 标识、工作区 .sciencediscovery 目录、默认 runner/memory-graph 内部 token、文档与测试夹具。 以下改名涉及已有本地数据或历史记录,按既有兼容契约保留旧名读取并打日志: - gateway 环境标记 .sciencediscovery-bootstrap.json 仍读旧文件名,避免 升级触发一次完整重装 - 历史压缩 checkpoint 标记与 additional_kwargs 键仍识别旧拼写,避免旧 会话被重复摘要 - Web localStorage 的 token、语言、工作区布局与 CSV 图表缓存键一次性 导入旧键 - antibody skill 的 ANTIBODY_REQUIRE_SCIENCEDISCOVERY_ENV 仍回退旧变量名 保留不改:launcher 的 science-agent-data / ~/.cache/science-agent 迁移 源路径、已停用默认 token 断言,它们指代的就是旧名本身。 | 1 个月前 | |
chore(rename): 补齐 science_agent 形式的第一方自称 仓内 skill 说明、仓库结构文档树根、E2E 用例说明与不可用提示中的 science_agent 改为 ScienceDiscovery / sciencediscovery;antibody workload adapter 的 importlib 模块别名一并改名。 这些位置此前被检索遗漏:同一行还含 SCIENCE_AGENT_* 变量名时被过滤规则 整行丢弃,改用不丢行的正则复检后补上。 | 1 个月前 | |
feat(config)!: move the data directory to .sciencediscovery-data Both launchers wrote their runtime root to an undecorated directory: the repository launcher to <repo>/data, which was never gitignored and is easy to mistake for source, and the single-file launcher to ./science-discovery-data. Default both to .sciencediscovery-data, resolved from the repository root and from the launcher's working directory respectively. Changed in every place that declared a default: scripts/start-stack.sh, the API and Runner config loaders, the memory-graph logging config, .env.example, and the launcher CLI options and usage text. Existing installations are migrated once rather than orphaned. start-stack.sh moves an existing data/ directory, using the [compat] idiom the script already uses for the SCIENCE_AGENT_* to SCIENCE_DISCOVERY_* rename. The launcher now walks both former defaults, science-discovery-data before the older science-agent-data, so a host on either one is carried over; migrateLegacyDirectory already refuses to replace an existing target, so the newer wins and the older logs a skip. Neither path runs when the data directory is set explicitly. .dockerignore excludes the new name as well. That exclusion is what keeps bootstrap tokens and model-secrets.key out of the build context, so it has to move with the default; data/ stays excluded for un-migrated checkouts. Docker keeps its own /app/data bind mount. | 1 个月前 | |
chore(rename): 库内第一方 scienceagent 自称改为 sciencediscovery 覆盖容器与沙箱路径(/opt/sciencediscovery、/run/sciencediscovery、 egress 与 python-packages 挂载)、compose 服务与镜像名、CI 镜像与缓存 目录、发布元数据(payload magic、product、单文件与 micromamba 包名)、 API health 与 MCP 客户端名、环境快照 format 标识、工作区 .sciencediscovery 目录、默认 runner/memory-graph 内部 token、文档与测试夹具。 以下改名涉及已有本地数据或历史记录,按既有兼容契约保留旧名读取并打日志: - gateway 环境标记 .sciencediscovery-bootstrap.json 仍读旧文件名,避免 升级触发一次完整重装 - 历史压缩 checkpoint 标记与 additional_kwargs 键仍识别旧拼写,避免旧 会话被重复摘要 - Web localStorage 的 token、语言、工作区布局与 CSV 图表缓存键一次性 导入旧键 - antibody skill 的 ANTIBODY_REQUIRE_SCIENCEDISCOVERY_ENV 仍回退旧变量名 保留不改:launcher 的 science-agent-data / ~/.cache/science-agent 迁移 源路径、已停用默认 token 断言,它们指代的就是旧名本身。 | 1 个月前 | |
feat(config)!: move the data directory to .sciencediscovery-data Both launchers wrote their runtime root to an undecorated directory: the repository launcher to <repo>/data, which was never gitignored and is easy to mistake for source, and the single-file launcher to ./science-discovery-data. Default both to .sciencediscovery-data, resolved from the repository root and from the launcher's working directory respectively. Changed in every place that declared a default: scripts/start-stack.sh, the API and Runner config loaders, the memory-graph logging config, .env.example, and the launcher CLI options and usage text. Existing installations are migrated once rather than orphaned. start-stack.sh moves an existing data/ directory, using the [compat] idiom the script already uses for the SCIENCE_AGENT_* to SCIENCE_DISCOVERY_* rename. The launcher now walks both former defaults, science-discovery-data before the older science-agent-data, so a host on either one is carried over; migrateLegacyDirectory already refuses to replace an existing target, so the newer wins and the older logs a skip. Neither path runs when the data directory is set explicitly. .dockerignore excludes the new name as well. That exclusion is what keeps bootstrap tokens and model-secrets.key out of the build context, so it has to move with the default; data/ stays excluded for un-migrated checkouts. Docker keeps its own /app/data bind mount. | 1 个月前 | |
first commit | 1 个月前 | |
feat(config)!: move the data directory to .sciencediscovery-data Both launchers wrote their runtime root to an undecorated directory: the repository launcher to <repo>/data, which was never gitignored and is easy to mistake for source, and the single-file launcher to ./science-discovery-data. Default both to .sciencediscovery-data, resolved from the repository root and from the launcher's working directory respectively. Changed in every place that declared a default: scripts/start-stack.sh, the API and Runner config loaders, the memory-graph logging config, .env.example, and the launcher CLI options and usage text. Existing installations are migrated once rather than orphaned. start-stack.sh moves an existing data/ directory, using the [compat] idiom the script already uses for the SCIENCE_AGENT_* to SCIENCE_DISCOVERY_* rename. The launcher now walks both former defaults, science-discovery-data before the older science-agent-data, so a host on either one is carried over; migrateLegacyDirectory already refuses to replace an existing target, so the newer wins and the older logs a skip. Neither path runs when the data directory is set explicitly. .dockerignore excludes the new name as well. That exclusion is what keeps bootstrap tokens and model-secrets.key out of the build context, so it has to move with the default; data/ stays excluded for un-migrated checkouts. Docker keeps its own /app/data bind mount. | 1 个月前 | |
first commit | 1 个月前 | |
first commit | 1 个月前 | |
feat(config)!: move the data directory to .sciencediscovery-data Both launchers wrote their runtime root to an undecorated directory: the repository launcher to <repo>/data, which was never gitignored and is easy to mistake for source, and the single-file launcher to ./science-discovery-data. Default both to .sciencediscovery-data, resolved from the repository root and from the launcher's working directory respectively. Changed in every place that declared a default: scripts/start-stack.sh, the API and Runner config loaders, the memory-graph logging config, .env.example, and the launcher CLI options and usage text. Existing installations are migrated once rather than orphaned. start-stack.sh moves an existing data/ directory, using the [compat] idiom the script already uses for the SCIENCE_AGENT_* to SCIENCE_DISCOVERY_* rename. The launcher now walks both former defaults, science-discovery-data before the older science-agent-data, so a host on either one is carried over; migrateLegacyDirectory already refuses to replace an existing target, so the newer wins and the older logs a skip. Neither path runs when the data directory is set explicitly. .dockerignore excludes the new name as well. That exclusion is what keeps bootstrap tokens and model-secrets.key out of the build context, so it has to move with the default; data/ stays excluded for un-migrated checkouts. Docker keeps its own /app/data bind mount. | 1 个月前 | |
chore(rename): 库内第一方 scienceagent 自称改为 sciencediscovery 覆盖容器与沙箱路径(/opt/sciencediscovery、/run/sciencediscovery、 egress 与 python-packages 挂载)、compose 服务与镜像名、CI 镜像与缓存 目录、发布元数据(payload magic、product、单文件与 micromamba 包名)、 API health 与 MCP 客户端名、环境快照 format 标识、工作区 .sciencediscovery 目录、默认 runner/memory-graph 内部 token、文档与测试夹具。 以下改名涉及已有本地数据或历史记录,按既有兼容契约保留旧名读取并打日志: - gateway 环境标记 .sciencediscovery-bootstrap.json 仍读旧文件名,避免 升级触发一次完整重装 - 历史压缩 checkpoint 标记与 additional_kwargs 键仍识别旧拼写,避免旧 会话被重复摘要 - Web localStorage 的 token、语言、工作区布局与 CSV 图表缓存键一次性 导入旧键 - antibody skill 的 ANTIBODY_REQUIRE_SCIENCEDISCOVERY_ENV 仍回退旧变量名 保留不改:launcher 的 science-agent-data / ~/.cache/science-agent 迁移 源路径、已停用默认 token 断言,它们指代的就是旧名本身。 | 1 个月前 | |
first commit | 1 个月前 | |
!185 merge chore/remove-deerflow-submodule into master chore: 删除 deer-flow 子模块并将二进制 serve 改为两进程 Created-by: wang_cheng_zhao Commit-by: wang_cheng_zhao Merged-by: wang_cheng_zhao Description: **What type of PR is this?** /kind task --- **What does this PR do / why do we need it**: [#181](https://gitcode.com/mindspore/ScienceAgent/pull/181) 与 [#184](https://gitcode.com/mindspore/ScienceAgent/pull/184) 已把 Agent 循环与 Web 搜索迁到 Node 进程内。 origin/master 运行时不再引用 deer-flow:gateway 的 pyproject 没有 deerflow-harness,控制面也不再启动独立 agent-loop HTTP。 残留只剩部署链硬依赖和过时文档:third_party/deer-flow 子模块、launcher 的 ensureDeerFlow / 内容摘要 pin、Dockerfile 与 CI 守卫、以及仍按「三个常驻进程」写的说明。二进制 serve 若继续编排已删除的 science_agent_gateway.server,会在打包产物上启动一个不存在的服务。 本 PR 一次清掉这些死依赖,并把 host / Docker / 二进制三条启动路径对齐为 **Runner + API(含 Web)** 两进程。随包 biomed / UniProt 仍通过 gateway **venv 解释器**以 stdio MCP 启动,不再作为常驻 HTTP 服务。 相关讨论:[RFC #87](https://gitcode.com/mindspore/ScienceAgent/issues/87)。 ### 变更说明 1. **删除 deer-flow 死依赖** - 去掉 .gitmodules 与 third_party/deer-flow gitlink。 - 删除 launcher 中为该子模块准备的 provisioning、内容摘要 pin,以及 Dockerfile / CI / .dockerignore 里的对应守卫。 - 中英文架构、部署、仓库布局、network-proxy 文档改为过去时,不再把 deer-flow 写成运行时依赖。 2. **二进制 serve 改为两进程** - planServices 只编排 bubblewrap Runner 与 control API(内嵌 Web)。 - 不再生成或向 API 传递 SCIENCE_AGENT_GATEWAY_URL / _INTERNAL_TOKEN;--gateway-port 仅兼容忽略。 - 仍向 API 显式传入 SCIENCE_AGENT_GATEWAY_PYTHON_PATH,供随包 stdio MCP server 解析解释器。 3. **本地栈与真实栈测试门对齐** - start-stack.sh --mode local 默认导出 SCIENCE_AGENT_EXTENSIONS_CONFIG_PATH(仓库根 extensions_config.json)与 SCIENCE_AGENT_GATEWAY_PYTHON_PATH(data/envs/gateway/bin/python,次选 services/gateway/.venv)。pnpm api 的工作目录是 services/api,不导出这两个文档化变量时 MCP 注册表会落空。 - requireRealStack() 不再探测已删除的 gateway :4312。API /health 仅在 Runner 应答后报 status: "ok",一次探测覆盖两进程。.ci/run-e2e.sh 同步去掉 SCIENCE_AGENT_GATEWAY_PORT/URL。 packages/ 相对 origin/master 无改动。 --- **Which issue(s) this PR fixes**: 不关联公开 GitCode Issue。相关讨论见 [RFC #87](https://gitcode.com/mindspore/ScienceAgent/issues/87)。 --- **Test Plan and Test result:What scenarios were tested, and what were the verification results(Function, performance, reliability, etc.)**: 被测 head:318eedd2b71ffefaa0ef461a15e9bce2360586d4(20662a7 + bcb1030 + 318eedd)。 ### 单元测试与构建 | 验证项 | 结果 | | --- | --- | | launcher | 89/89 PASS | | api | 447/447 PASS | | gateway | 16/16 PASS | | apps/web | 354/354 PASS | | runner | 37/37 PASS | | node test/check-e2e-meta.mjs | 0 error | | 全仓构建 | PASS | ### 浏览器 E2E(默认 start-stack.sh --mode local) .env 只设 SCIENCE_AGENT_DATA_DIR,**未**手动设置 SCIENCE_AGENT_EXTENSIONS_CONFIG_PATH / SCIENCE_AGENT_GATEWAY_PYTHON_PATH。进程:API :4310 + Runner :4311;**:4312 无监听**。 | 场景 | 预期 | 结果 | | --- | --- | --- | | 默认导出 | API 进程拿到仓库根 extensions_config.json 与 gateway venv 解释器 | PASS | | MCP 目录 | GET /api/mcp/sources:uniprot ready(3 工具)、pubmed ready(2 工具) | PASS | | 设置页 | 付费/免费分组齐全,无 ddgs 字样,无横向溢出 | PASS | | 真实 web_search | 运行完成,回答给出 https://openai.com/ | PASS | | 代码执行交付 | run_python → read_file → declare_artifact 完成,产出 statistical_summary_report.md | PASS | | 仓库 journey-real-request | 不再因缺 gateway 整组 skip | PASS(实际运行;失败点是仓库 helper readRunActivity 嵌套 summary 的既有定位问题,非产品缺陷) | ### 公开验证截图 设置页:付费提供方与免费引擎分组,无 DDGS 文案:  真实 web_search 返回 openai.com:  代码执行后交付 Markdown 产物:  已知非阻塞项:test/helpers/journeys.ts 的 readRunActivity() 应对卡片使用 :scope > summary,否则 journey-real-request / literature-review 会在真实栈上撞 Playwright strict-mode。旧 gateway 门会把整组 skip 掉,本 PR 修好门后该测试基建问题才暴露。不在本 PR 范围。 --- **Self-checklist**:(**请自检,在[ ]内打上x,我们将检视你的完成情况,否则会导致pr无法合入**) + - [x] **设计**:运行时拓扑与已合入的 Node Agent / Web 搜索一致;deer-flow 仅作为已删除的历史依赖 + - [x] **测试**:launcher / api / gateway / web / runner 全绿;默认本地栈 E2E 覆盖 MCP 目录、设置页、web_search 与产物交付 + - [x] **验证**:正文包含功能目标、测试结果与浏览器截图 + - [x] **接口**:删除已无消费者的 gateway HTTP 环境变量与 --gateway-port 实际作用;保留仍被 API 读取的两个 *_GATEWAY_*_TIMEOUT_MS 兼容名 + - [x] **文档**:中英文 architecture / deployment / repository-layout / network-proxy 已改为两进程与过去时表述 See merge request: mindspore/ScienceAgent!185 | 1 个月前 | |
!185 merge chore/remove-deerflow-submodule into master chore: 删除 deer-flow 子模块并将二进制 serve 改为两进程 Created-by: wang_cheng_zhao Commit-by: wang_cheng_zhao Merged-by: wang_cheng_zhao Description: **What type of PR is this?** /kind task --- **What does this PR do / why do we need it**: [#181](https://gitcode.com/mindspore/ScienceAgent/pull/181) 与 [#184](https://gitcode.com/mindspore/ScienceAgent/pull/184) 已把 Agent 循环与 Web 搜索迁到 Node 进程内。 origin/master 运行时不再引用 deer-flow:gateway 的 pyproject 没有 deerflow-harness,控制面也不再启动独立 agent-loop HTTP。 残留只剩部署链硬依赖和过时文档:third_party/deer-flow 子模块、launcher 的 ensureDeerFlow / 内容摘要 pin、Dockerfile 与 CI 守卫、以及仍按「三个常驻进程」写的说明。二进制 serve 若继续编排已删除的 science_agent_gateway.server,会在打包产物上启动一个不存在的服务。 本 PR 一次清掉这些死依赖,并把 host / Docker / 二进制三条启动路径对齐为 **Runner + API(含 Web)** 两进程。随包 biomed / UniProt 仍通过 gateway **venv 解释器**以 stdio MCP 启动,不再作为常驻 HTTP 服务。 相关讨论:[RFC #87](https://gitcode.com/mindspore/ScienceAgent/issues/87)。 ### 变更说明 1. **删除 deer-flow 死依赖** - 去掉 .gitmodules 与 third_party/deer-flow gitlink。 - 删除 launcher 中为该子模块准备的 provisioning、内容摘要 pin,以及 Dockerfile / CI / .dockerignore 里的对应守卫。 - 中英文架构、部署、仓库布局、network-proxy 文档改为过去时,不再把 deer-flow 写成运行时依赖。 2. **二进制 serve 改为两进程** - planServices 只编排 bubblewrap Runner 与 control API(内嵌 Web)。 - 不再生成或向 API 传递 SCIENCE_AGENT_GATEWAY_URL / _INTERNAL_TOKEN;--gateway-port 仅兼容忽略。 - 仍向 API 显式传入 SCIENCE_AGENT_GATEWAY_PYTHON_PATH,供随包 stdio MCP server 解析解释器。 3. **本地栈与真实栈测试门对齐** - start-stack.sh --mode local 默认导出 SCIENCE_AGENT_EXTENSIONS_CONFIG_PATH(仓库根 extensions_config.json)与 SCIENCE_AGENT_GATEWAY_PYTHON_PATH(data/envs/gateway/bin/python,次选 services/gateway/.venv)。pnpm api 的工作目录是 services/api,不导出这两个文档化变量时 MCP 注册表会落空。 - requireRealStack() 不再探测已删除的 gateway :4312。API /health 仅在 Runner 应答后报 status: "ok",一次探测覆盖两进程。.ci/run-e2e.sh 同步去掉 SCIENCE_AGENT_GATEWAY_PORT/URL。 packages/ 相对 origin/master 无改动。 --- **Which issue(s) this PR fixes**: 不关联公开 GitCode Issue。相关讨论见 [RFC #87](https://gitcode.com/mindspore/ScienceAgent/issues/87)。 --- **Test Plan and Test result:What scenarios were tested, and what were the verification results(Function, performance, reliability, etc.)**: 被测 head:318eedd2b71ffefaa0ef461a15e9bce2360586d4(20662a7 + bcb1030 + 318eedd)。 ### 单元测试与构建 | 验证项 | 结果 | | --- | --- | | launcher | 89/89 PASS | | api | 447/447 PASS | | gateway | 16/16 PASS | | apps/web | 354/354 PASS | | runner | 37/37 PASS | | node test/check-e2e-meta.mjs | 0 error | | 全仓构建 | PASS | ### 浏览器 E2E(默认 start-stack.sh --mode local) .env 只设 SCIENCE_AGENT_DATA_DIR,**未**手动设置 SCIENCE_AGENT_EXTENSIONS_CONFIG_PATH / SCIENCE_AGENT_GATEWAY_PYTHON_PATH。进程:API :4310 + Runner :4311;**:4312 无监听**。 | 场景 | 预期 | 结果 | | --- | --- | --- | | 默认导出 | API 进程拿到仓库根 extensions_config.json 与 gateway venv 解释器 | PASS | | MCP 目录 | GET /api/mcp/sources:uniprot ready(3 工具)、pubmed ready(2 工具) | PASS | | 设置页 | 付费/免费分组齐全,无 ddgs 字样,无横向溢出 | PASS | | 真实 web_search | 运行完成,回答给出 https://openai.com/ | PASS | | 代码执行交付 | run_python → read_file → declare_artifact 完成,产出 statistical_summary_report.md | PASS | | 仓库 journey-real-request | 不再因缺 gateway 整组 skip | PASS(实际运行;失败点是仓库 helper readRunActivity 嵌套 summary 的既有定位问题,非产品缺陷) | ### 公开验证截图 设置页:付费提供方与免费引擎分组,无 DDGS 文案:  真实 web_search 返回 openai.com:  代码执行后交付 Markdown 产物:  已知非阻塞项:test/helpers/journeys.ts 的 readRunActivity() 应对卡片使用 :scope > summary,否则 journey-real-request / literature-review 会在真实栈上撞 Playwright strict-mode。旧 gateway 门会把整组 skip 掉,本 PR 修好门后该测试基建问题才暴露。不在本 PR 范围。 --- **Self-checklist**:(**请自检,在[ ]内打上x,我们将检视你的完成情况,否则会导致pr无法合入**) + - [x] **设计**:运行时拓扑与已合入的 Node Agent / Web 搜索一致;deer-flow 仅作为已删除的历史依赖 + - [x] **测试**:launcher / api / gateway / web / runner 全绿;默认本地栈 E2E 覆盖 MCP 目录、设置页、web_search 与产物交付 + - [x] **验证**:正文包含功能目标、测试结果与浏览器截图 + - [x] **接口**:删除已无消费者的 gateway HTTP 环境变量与 --gateway-port 实际作用;保留仍被 API 读取的两个 *_GATEWAY_*_TIMEOUT_MS 兼容名 + - [x] **文档**:中英文 architecture / deployment / repository-layout / network-proxy 已改为两进程与过去时表述 See merge request: mindspore/ScienceAgent!185 | 1 个月前 | |
!185 merge chore/remove-deerflow-submodule into master chore: 删除 deer-flow 子模块并将二进制 serve 改为两进程 Created-by: wang_cheng_zhao Commit-by: wang_cheng_zhao Merged-by: wang_cheng_zhao Description: **What type of PR is this?** /kind task --- **What does this PR do / why do we need it**: [#181](https://gitcode.com/mindspore/ScienceAgent/pull/181) 与 [#184](https://gitcode.com/mindspore/ScienceAgent/pull/184) 已把 Agent 循环与 Web 搜索迁到 Node 进程内。 origin/master 运行时不再引用 deer-flow:gateway 的 pyproject 没有 deerflow-harness,控制面也不再启动独立 agent-loop HTTP。 残留只剩部署链硬依赖和过时文档:third_party/deer-flow 子模块、launcher 的 ensureDeerFlow / 内容摘要 pin、Dockerfile 与 CI 守卫、以及仍按「三个常驻进程」写的说明。二进制 serve 若继续编排已删除的 science_agent_gateway.server,会在打包产物上启动一个不存在的服务。 本 PR 一次清掉这些死依赖,并把 host / Docker / 二进制三条启动路径对齐为 **Runner + API(含 Web)** 两进程。随包 biomed / UniProt 仍通过 gateway **venv 解释器**以 stdio MCP 启动,不再作为常驻 HTTP 服务。 相关讨论:[RFC #87](https://gitcode.com/mindspore/ScienceAgent/issues/87)。 ### 变更说明 1. **删除 deer-flow 死依赖** - 去掉 .gitmodules 与 third_party/deer-flow gitlink。 - 删除 launcher 中为该子模块准备的 provisioning、内容摘要 pin,以及 Dockerfile / CI / .dockerignore 里的对应守卫。 - 中英文架构、部署、仓库布局、network-proxy 文档改为过去时,不再把 deer-flow 写成运行时依赖。 2. **二进制 serve 改为两进程** - planServices 只编排 bubblewrap Runner 与 control API(内嵌 Web)。 - 不再生成或向 API 传递 SCIENCE_AGENT_GATEWAY_URL / _INTERNAL_TOKEN;--gateway-port 仅兼容忽略。 - 仍向 API 显式传入 SCIENCE_AGENT_GATEWAY_PYTHON_PATH,供随包 stdio MCP server 解析解释器。 3. **本地栈与真实栈测试门对齐** - start-stack.sh --mode local 默认导出 SCIENCE_AGENT_EXTENSIONS_CONFIG_PATH(仓库根 extensions_config.json)与 SCIENCE_AGENT_GATEWAY_PYTHON_PATH(data/envs/gateway/bin/python,次选 services/gateway/.venv)。pnpm api 的工作目录是 services/api,不导出这两个文档化变量时 MCP 注册表会落空。 - requireRealStack() 不再探测已删除的 gateway :4312。API /health 仅在 Runner 应答后报 status: "ok",一次探测覆盖两进程。.ci/run-e2e.sh 同步去掉 SCIENCE_AGENT_GATEWAY_PORT/URL。 packages/ 相对 origin/master 无改动。 --- **Which issue(s) this PR fixes**: 不关联公开 GitCode Issue。相关讨论见 [RFC #87](https://gitcode.com/mindspore/ScienceAgent/issues/87)。 --- **Test Plan and Test result:What scenarios were tested, and what were the verification results(Function, performance, reliability, etc.)**: 被测 head:318eedd2b71ffefaa0ef461a15e9bce2360586d4(20662a7 + bcb1030 + 318eedd)。 ### 单元测试与构建 | 验证项 | 结果 | | --- | --- | | launcher | 89/89 PASS | | api | 447/447 PASS | | gateway | 16/16 PASS | | apps/web | 354/354 PASS | | runner | 37/37 PASS | | node test/check-e2e-meta.mjs | 0 error | | 全仓构建 | PASS | ### 浏览器 E2E(默认 start-stack.sh --mode local) .env 只设 SCIENCE_AGENT_DATA_DIR,**未**手动设置 SCIENCE_AGENT_EXTENSIONS_CONFIG_PATH / SCIENCE_AGENT_GATEWAY_PYTHON_PATH。进程:API :4310 + Runner :4311;**:4312 无监听**。 | 场景 | 预期 | 结果 | | --- | --- | --- | | 默认导出 | API 进程拿到仓库根 extensions_config.json 与 gateway venv 解释器 | PASS | | MCP 目录 | GET /api/mcp/sources:uniprot ready(3 工具)、pubmed ready(2 工具) | PASS | | 设置页 | 付费/免费分组齐全,无 ddgs 字样,无横向溢出 | PASS | | 真实 web_search | 运行完成,回答给出 https://openai.com/ | PASS | | 代码执行交付 | run_python → read_file → declare_artifact 完成,产出 statistical_summary_report.md | PASS | | 仓库 journey-real-request | 不再因缺 gateway 整组 skip | PASS(实际运行;失败点是仓库 helper readRunActivity 嵌套 summary 的既有定位问题,非产品缺陷) | ### 公开验证截图 设置页:付费提供方与免费引擎分组,无 DDGS 文案:  真实 web_search 返回 openai.com:  代码执行后交付 Markdown 产物:  已知非阻塞项:test/helpers/journeys.ts 的 readRunActivity() 应对卡片使用 :scope > summary,否则 journey-real-request / literature-review 会在真实栈上撞 Playwright strict-mode。旧 gateway 门会把整组 skip 掉,本 PR 修好门后该测试基建问题才暴露。不在本 PR 范围。 --- **Self-checklist**:(**请自检,在[ ]内打上x,我们将检视你的完成情况,否则会导致pr无法合入**) + - [x] **设计**:运行时拓扑与已合入的 Node Agent / Web 搜索一致;deer-flow 仅作为已删除的历史依赖 + - [x] **测试**:launcher / api / gateway / web / runner 全绿;默认本地栈 E2E 覆盖 MCP 目录、设置页、web_search 与产物交付 + - [x] **验证**:正文包含功能目标、测试结果与浏览器截图 + - [x] **接口**:删除已无消费者的 gateway HTTP 环境变量与 --gateway-port 实际作用;保留仍被 API 读取的两个 *_GATEWAY_*_TIMEOUT_MS 兼容名 + - [x] **文档**:中英文 architecture / deployment / repository-layout / network-proxy 已改为两进程与过去时表述 See merge request: mindspore/ScienceAgent!185 | 1 个月前 | |
chore(rename): 库内第一方 scienceagent 自称改为 sciencediscovery 覆盖容器与沙箱路径(/opt/sciencediscovery、/run/sciencediscovery、 egress 与 python-packages 挂载)、compose 服务与镜像名、CI 镜像与缓存 目录、发布元数据(payload magic、product、单文件与 micromamba 包名)、 API health 与 MCP 客户端名、环境快照 format 标识、工作区 .sciencediscovery 目录、默认 runner/memory-graph 内部 token、文档与测试夹具。 以下改名涉及已有本地数据或历史记录,按既有兼容契约保留旧名读取并打日志: - gateway 环境标记 .sciencediscovery-bootstrap.json 仍读旧文件名,避免 升级触发一次完整重装 - 历史压缩 checkpoint 标记与 additional_kwargs 键仍识别旧拼写,避免旧 会话被重复摘要 - Web localStorage 的 token、语言、工作区布局与 CSV 图表缓存键一次性 导入旧键 - antibody skill 的 ANTIBODY_REQUIRE_SCIENCEDISCOVERY_ENV 仍回退旧变量名 保留不改:launcher 的 science-agent-data / ~/.cache/science-agent 迁移 源路径、已停用默认 token 断言,它们指代的就是旧名本身。 | 1 个月前 | |
chore(python): 第一方 Python 包与模块改名为 sciencediscovery 发行名 science-agent-gateway / memory-graph / paper-worker 改为 sciencediscovery-*;模块目录 science_agent_gateway、 science_agent_memory_graph 改为 sciencediscovery_*,同步 extensions 配置、启动脚本、wheel 匹配、bootstrap 断言、测试导入与 uv.lock。 | 1 个月前 | |
chore(npm): 第一方包改名为 sciencediscovery 作用域 仓根包名 science-agent 改为 sciencediscovery,17 个 workspace 包 @science-agent/* 改为 @sciencediscovery/*,同步全部 import、 pnpm --filter 调用、架构检查断言、发布脚本与 pnpm-lock.yaml。 e2e 测试工程 science-agent-e2e 一并改名并更新 CI 缓存根目录。 | 1 个月前 | |
fix(deps): record the web cytoscape dependencies in the lockfile apps/web/package.json declares cytoscape, cytoscape-dagre and @types/cytoscape, but pnpm-lock.yaml has no entry for them, so every pnpm install --frozen-lockfile — which is what CI=1 and all three .ci layer entry points use — aborts with ERR_PNPM_OUTDATED_LOCKFILE before any test runs. Regenerated with pnpm install --lockfile-only; the diff is additive. | 1 个月前 | |
first commit | 1 个月前 | |
first commit | 1 个月前 |
ScienceDiscovery
ScienceDiscovery是专为科学研究打造的一站式AI科研工作台。依托该平台,科研人员能够一站式高效完成“文献阅读、假设提出、代码编写、实验试错、参数调优”这一极为繁琐的科研探索流程。
English | 中文
Warning
ScienceDiscovery 不是多用户生产服务。API、runner 与 gateway 默认只监听回环;API 使用一个 bearer token 且不终止 TLS。监听其他网卡必须是可信、受保护网络中的显式部署选择。Python、R 和 shell 命令在 fail-closed 的 bubblewrap 沙箱中运行;控制 API、gateway、PDF worker 以及发往已配置模型/数据提供方的请求在沙箱外作为受信任控制面操作执行。
项目定位
ScienceDiscovery是专为科学研究打造的一站式AI科研工作台。依托该平台,科研人员能够一站式高效完成“文献阅读、假设提出、代码编写、实验试错、参数调优”这一极为繁琐的科研探索流程。
特性
- 海量资源一键配置与高效接入:通过平台内置的科研数据库 Connector,实现文献库与数据库的一键快速配置,快速获取海量前沿文献与核心试验数据;
- 安全沙箱环境下的自主代码探索:支持智能体在安全隔离的沙箱环境中自主编写、调试并运行 Python、R 或 Shell 代码,为复杂科学数据处理提供稳定环境;
- 复杂科研任务的自动拆解与动态执行:凭借强大的任务规划与多智能体协同能力,系统可自动拆解复杂科研任务,动态编排并调用 300+ 跨领域 Skills;
- 科研流程全链路可溯源:平台将完整展现全流程工作流,并提供包含代码、环境和日志在内的全链路产物溯源,确保科研全流程的高可信度。
相关文档
环境要求
预打包二进制是主要用户路径,其他部署方式单独记录在部署指南中。
| 路径 | 宿主要求 |
|---|---|
| 预打包二进制 | Linux x86_64/aarch64、bubblewrap |
| 本地源码模式 | Linux x86_64/aarch64、Node.js 22.19+、pnpm 11.1.2、Python 3、uv 0.9+、bubblewrap、Git |
| Docker | Linux x86_64/aarch64、Docker Engine 24+、Compose v2,以及可用的无特权用户命名空间 |
源码模式下 Gateway 要求 Python 3.12,uv 会在需要时将其安装到服务环境。托管科学环境使用应用固定版本的 micromamba,不要求系统安装 Python、R 或 conda。所有受支持的部署路径均要求 Linux 以及部署指南中说明的用户命名空间能力。
安装
准备与宿主架构匹配的 ScienceDiscovery 可执行文件。二进制打包、本地源码模式与 Docker 流程见部署指南。
快速开始
在 ScienceDiscovery 可执行文件所在目录启动服务:
chmod +x ./ScienceDiscovery
./ScienceDiscovery serve
另开终端执行 curl -fsS http://127.0.0.1:4310/health。随后打开 http://127.0.0.1:4310,使用服务端启动时打印的访问 token 登录,并在 系统配置 → Global defaults 配置任务模型。第一次任务见快速开始教程;二进制打包、本地源码模式与 Docker 见部署指南。
许可证
本产品仅作为流程编排工具,不包含 AI 模型能力;用户在连接 AI 模型用于特定业务场景时,需自行承担欧盟 AI 法案等相关合规义务。
项目介绍
面向科研人员,提供一站式 AI 科研工作台,用于高效完成文献阅读、假设提出、代码编写、实验试错与参数调优。核心亮点包括海量科研数据源一键接入、安全沙箱内代码自主探索、复杂任务自动拆解与全链路可溯源。【此简介由AI生成】
定制我的领域