项目快照:odysseus-dev/odysseus,约 85,483 个 Star,485 个 Fork;最新推送时间 2026-08-16T23:55:27Z。本文基于仓库公开资料撰写。

项目地址:https://github.com/odysseus-dev/odysseus · https://odysseus-dev.github.io/odysseus

odysseus 从代码、运行环境到实践流程的项目封面
odysseus 的项目能力与实践流程示意。

项目速览(TL;DR)

odysseus 是一个采用 Python 编写的自托管人工智能工作空间(self-hosted AI workspace),默认分支为 dev,仓库描述为 “Self-hosted AI workspace.”。根据提供的 GitHub 仓库元信息,项目获得 85483 个 Star、485 个 Fork,许可证标注为 AGPL-3.0;README 的许可证段落进一步写明为 AGPL-3.0-or-later。

项目把聊天、智能体、研究、文档、电子邮件、笔记、任务、日历以及本地模型工作流放在同一个 Web 界面中。它的运行方式以 Docker Compose 为主要快速开始路径,默认通过本机 127.0.0.1:7000 暴露应用,并配套 SearXNG、ChromaDB 和 ntfy 等服务。

“A self-hosted AI workspace for chat, agents, research, documents, email, notes, calendar, and local model workflows.”
来源:README

定位与目标用户

该项目的核心定位不是单一聊天页面,而是面向个人或团队内部部署的多功能人工智能工作区。用户需要自行准备运行环境、模型服务或模型供应商凭据,并负责认证、数据目录、网络暴露范围和外部服务的合规管理。

从 README 列出的功能和 Compose 配置可以判断,项目覆盖两类工作:一类是对话、文件处理、检索和研究等人工智能任务;另一类是邮件、笔记、任务和日历等个人信息管理任务。不同功能的可用范围取决于相应的模型端点、搜索服务、邮箱、日历或第三方 API 是否已经配置。

典型使用边界

  • 需要将 Web 聊天、智能体工具和本地模型入口放在自有服务器上的个人用户。
  • 需要在文档编辑、研究报告、邮件整理和日程管理之间建立统一工作流的内部团队。
  • 希望通过 Ollama、LM Studio 或 OpenAI 兼容端点接入模型的部署者。
  • 需要自行控制数据目录、认证开关和服务绑定地址的开发与测试环境。

项目资料没有提供官方支持的用户规模、并发上限、性能基准、可用性承诺或生产部署规格。任何关于承载能力的判断都应通过目标环境测试验证,而不能由 Star 数量或功能清单推导。

核心功能

核心功能的共同特点是由 Odysseus Web 应用统一编排输入、模型调用、工具访问和持久化数据。功能能否真正运行,不只取决于应用容器是否启动,还取决于模型、搜索、向量数据库、邮箱、日历和通知等外部组件的配置状态。

聊天与智能体

README 将聊天与智能体(agents)放在同一能力组中,并列出本地或 API 模型、工具、模型上下文协议(Model Context Protocol,MCP)、文件、Shell、技能和记忆。其输入可以是用户消息、上传文件或会话上下文;输出是模型回复,智能体还可以在授权范围内触发工具和脚本。

Compose 文件为应用传入 LLM_HOSTLLM_HOSTSOPENAI_API_KEYOLLAMA_BASE_URL 等变量,说明模型访问既可以通过本地服务发现,也可以通过 API 凭据连接外部服务。资料没有给出每个工具的完整接口签名、权限模型和默认技能列表,部署时应以仓库当前代码和文档为准。

Cookbook 与本地模型工作流

Cookbook 用于提供硬件感知的模型建议、模型下载以及模型服务。Dockerfile 安装了 tmuxopenssh-clientgitcmake,注释说明这些组件分别用于后台下载或服务、远程服务器测试与操作,以及在 Docker 中首次启动 llama.cpp 时进行构建。

Compose 将宿主机数据目录下的 huggingface 映射到容器的 /app/.cache/huggingface,将 local 映射到 /app/.local。前者用于持久化 Hugging Face 缓存,后者用于持久化 vLLM、llama-cpp-python 等 Cookbook 安装的 Python CLI 或包;这意味着重新创建容器时,相关缓存和已安装的服务引擎不会仅因容器重建而丢失。

深度研究与搜索

Deep Research 被描述为多步骤 Web 研究流程,包含来源阅读和报告生成。Compose 中应用通过 SEARXNG_INSTANCE=http://searxng:8080 访问同一 Compose 网络中的 SearXNG,搜索结果由研究流程进一步处理;研究模型端点则可通过 RESEARCH_LLM_ENDPOINT 配置。

README 还列出 Brave、Google、Tavily 和 Serper 相关环境变量,但资料没有说明这些提供商之间的优先级、完整请求格式或费用控制方式。使用搜索和研究功能时,应仅抓取获得授权且符合目标站点条款的数据,不应将自托管部署理解为绕过第三方访问限制的授权。

文档与文件处理

Documents 提供偏写作的编辑器,并列出 AI 编辑、建议、Markdown、HTML、CSV 和语法高亮。用户输入通常是文档内容或上传文件,应用再将编辑请求交给模型并返回修改结果或建议;资料未提供具体文件解析器清单和单个格式的完整限制。

Compose 为聊天、画廊、记忆、个人资料、邮件撰写、语音转文字和 ICS 文件分别设置上传大小变量。默认值可在配置表中核对,但这些默认值代表应用配置,不等于反向代理、浏览器或宿主机文件系统的实际容量上限。

电子邮件、笔记、任务与日历

Email 功能通过 IMAP/SMTP 处理收件箱,README 列出整理、标签、摘要、提醒和回复草稿。IMAP 用于读取邮件,SMTP 用于发送邮件,人工智能能力负责摘要、分类或生成草稿;资料没有给出邮箱供应商白名单、OAuth 流程和发送审批策略,因此生产环境不应默认启用自动发送。

Notes、Tasks + Calendar 提供提醒、待办、计划中的智能体任务和 CalDAV 同步。Compose 只明确列出了应用和 ntfy 等服务,未提供 CalDAV 服务地址、日历同步冲突策略或任务调度的完整配置说明。

比较、画廊与账户能力

Compare 支持盲测式并排模型测试与综合,输入是相同或对应的测试任务,输出是并列结果及综合结果。由于资料没有说明评分算法、抽样方式和统计方法,比较页面的结果不应被当作独立的模型基准。

Extras 包括画廊、图像编辑器、主题、上传、Web 搜索、预设、会话和双因素认证(Two-Factor Authentication,2FA)。Dockerfile 对 Real-ESRGAN 相关依赖构建了修补后的 wheel,并安装 OpenCV 所需的系统库,但这只说明镜像具备相关依赖准备,不代表所有图像模型已经下载或默认可用。

系统架构与关键模块

从 Compose、Dockerfile 和环境文件可以确认,系统由一个运行在 7000 端口的 Odysseus 应用容器,以及搜索、向量存储和通知服务组成。应用通过环境变量连接模型、数据库、嵌入服务和外部账户,持久化数据则通过卷或绑定挂载保存。

容器与服务关系

  • odysseus:构建自仓库 Dockerfile,使用 Uvicorn 启动 app:app,容器监听 7000。
  • chromadb:使用 docker.io/chromadb/chroma:latest,容器端口为 8000,宿主机默认绑定到 127.0.0.1:8100
  • searxng:提供搜索服务,应用通过 Compose 服务名访问其 8080 端口;其镜像标签在 Compose 中被固定为 2026.5.31-7159b8aed
  • ntfy:运行 serve 命令,容器端口为 80,宿主机默认绑定到 127.0.0.1:8091

数据与网络路径

应用默认使用 sqlite:///./data/app.db,并将宿主机的 ./data 映射到容器的 /app/data,因此设置、会话、数据库、认证、缓存和上传等数据目录具备持久化路径。日志目录则由 ./logs 映射到 /app/logs

Compose 通过 extra_hostshost.docker.internal 指向 Docker 宿主机,使容器可以访问宿主机上的 Ollama 等本地服务。应用还配置了 depends_on:SearXNG 需要通过健康检查,ChromaDB 只等待服务启动;这两种条件并不等同于应用层面的业务就绪。

启动入口与权限处理

Dockerfile 使用 Python 3.14 slim 作为构建和运行基础镜像,安装系统编译工具、Node.js、npm、Chromium、tmux、SSH 客户端和图像处理相关共享库。入口脚本会根据 PUIDPGID 降权运行,并修复绑定挂载的 /app/data/app/logs 所有权,避免容器以 root 写入宿主机后产生权限问题。

Dockerfile 还包含独立的 Real-ESRGAN 依赖 wheel 构建阶段,用于处理 Python 3.14 环境下 basicsr、gfpgan 和 facexlib 读取版本信息的问题。这里描述的是镜像构建策略,不应扩展为对其他 Python 版本、其他安装方式或全部可选依赖的兼容性承诺。

依赖与运行环境

最小可运行路径依赖 Git、Docker 和 Docker Compose;README 明确把原生安装、GPU、Windows/macOS、HTTPS 与配置说明放在 setup guide 中。本文仅依据已提供资料说明 Docker 路径,其他平台的完整依赖和步骤由官方文档决定。

类别 资料中明确的组件 用途 说明
应用运行时 Python 3.14、Uvicorn 运行 app:app 来自 Dockerfile
编排 Docker Compose 启动应用及配套服务 来自 README 与 docker-compose.yml
向量存储 ChromaDB 由 Compose 提供服务 宿主机默认端口 8100
搜索 SearXNG 提供 Web 搜索入口 Compose 内部地址为 http://searxng:8080
通知 ntfy 运行通知服务 宿主机默认端口 8091
前端工具链 Node.js、npm、Chromium 支持内置 Browser MCP 服务 来自 Dockerfile 注释和安装项

快速开始(含最小可运行示例)

快速开始的最小闭环是:克隆仓库、复制环境文件、构建并启动 Compose 服务,然后访问本地 Web 地址。README 明确提示,默认分支 dev 最先获得新改动;如果需要更经整理的分支,应使用 main

安装与启动

Bash
git clone https://github.com/odysseus-dev/odysseus.git
cd odysseus
cp .env.example .env
docker compose up -d --build

上述命令来自 README 的 Quick Start。默认情况下,Compose 将应用绑定到 127.0.0.1:7000,并把数据和日志保存在当前仓库下的 datalogs 目录;首次部署建议先确认宿主机用户的 UID 和 GID 是否需要通过 PUIDPGID 覆盖。

运行验证

Bash
docker compose ps
docker compose logs odysseus
curl http://127.0.0.1:7000

当容器健康并且应用已监听 7000 后,可在浏览器打开 http://localhost:7000。README 说明,首次管理员密码会打印在 docker compose logs odysseus 中;如果通过环境变量预置 ODYSSEUS_ADMIN_PASSWORD,应使用测试密码或部署专用密码,不要把真实凭据提交到 Git。

配置说明

配置文件的职责可以分为模型连接、服务发现、认证安全、数据持久化和上传限制。下面的默认值严格取自提供的 docker-compose.yml.env.example;空字符串表示 Compose 的变量替换结果为空,不表示项目一定会自动创建凭据。

字段名 类型 默认值 作用
APP_BIND 字符串 127.0.0.1 应用宿主机绑定地址
APP_PORT 整数 7000 应用宿主机端口
AUTH_ENABLED 布尔字符串 true 启用应用认证
LOCALHOST_BYPASS 布尔字符串 false 是否允许开发用途的本机请求绕过认证
DATABASE_URL 字符串 sqlite:///./data/app.db 应用数据库连接地址
LLM_HOST 字符串 localhost 主要模型主机
OLLAMA_BASE_URL 字符串 未提供 可选的 Ollama 基础地址
SEARXNG_INSTANCE 字符串 http://searxng:8080(Compose) 搜索服务地址
CHROMADB_HOST 字符串 chromadb(Compose) ChromaDB 服务主机
CHROMADB_PORT 整数 8000(Compose) ChromaDB 容器网络端口
FASTEMBED_MODEL 字符串 sentence-transformers/all-MiniLM-L6-v2 本地备用嵌入模型
ODYSSEUS_CHAT_UPLOAD_MAX_BYTES 整数 10485760 聊天上传大小上限,单位为字节
ODYSSEUS_GALLERY_UPLOAD_MAX_BYTES 整数 104857600 画廊上传大小上限,单位为字节
SECURE_COOKIES 布尔字符串 未设置时跟随请求协议 控制会话 Cookie 的 Secure 属性

模型与嵌入配置

LLM_HOST 用于主要模型主机,LLM_HOSTS 可用逗号分隔多个主机以进行模型发现。对于 Docker 中访问宿主机 Ollama,示例配置使用 http://host.docker.internal:11434/v1,但宿主机上的 Ollama 仍需按自身配置监听可被容器访问的地址。

嵌入配置包括 EMBEDDING_URLEMBEDDING_MODELEMBEDDING_API_KEY。当没有外部嵌入端点时,资料列出 FASTEMBED_MODEL 作为本地回退模型;模型下载位置和具体资源消耗未在资料中给出。

认证、跨域与绑定地址

网络可访问部署必须保持 AUTH_ENABLED=true,并在非本地开发环境保持 LOCALHOST_BYPASS=falseALLOWED_ORIGINS 的 Compose 默认值为 http://localhost,http://127.0.0.1,公开部署时应改为实际允许的来源,而不是泛化为任意来源。

SECURE_COOKIES 未设置时会跟随请求协议;资料说明 HTTPS 登录会获得 Secure Cookie,普通 HTTP 不会。若使用 MCP OAuth,外部浏览器访问地址不是 http://localhost:7000 时,还需要设置 OAUTH_REDIRECT_BASE_URL

进阶用法

进阶配置主要围绕模型缓存、远程模型服务器、反向代理入口和数据目录迁移展开。每一项都改变了部署边界,修改前应确认容器、宿主机和外部服务之间的网络可达性。

持久化与目录迁移

Compose 使用 APP_DATA_DIRAPP_LOGS_DIR 控制宿主机挂载位置,默认分别为 ./data./logs.env.example 还提供了 ODYSSEUS_DATA_DIR,用于移动应用内部使用的数据目录;两者属于不同层次的路径设置,不应在未验证代码行为前互相替代。

远程服务器与本地缓存

Cookbook 可以执行远程服务器测试、设置、探测、下载和服务操作,Compose 为此挂载了 ${APP_DATA_DIR:-./data}/ssh 到容器的 /app/.ssh。README 和 Compose 注释要求将 Odysseus 生成的公钥添加到各远程服务器的 authorized_keys;密钥文件应限制访问权限,并只授予专门的测试账户。

本地模型缓存位于 data/huggingface,Cookbook 安装的 CLI 和包位于 data/local。如果部署者更换宿主机或清理这些目录,模型下载缓存、服务引擎和相关状态可能无法继续使用;官方资料没有提供缓存迁移校验命令。

宿主机模型服务

在 Docker 中访问宿主机上的 Ollama 时,Compose 提供了 host.docker.internal:host-gateway 映射;示例环境文件给出的地址是 http://host.docker.internal:11434/v1。LM Studio 示例地址为 http://host.docker.internal:1234/v1,但资料没有给出 LM Studio 的镜像或安装步骤。

可观测性与运维

仓库资料提供的直接观测入口是 Docker Compose 状态、应用日志和 SearXNG 健康检查。它没有声明独立的指标系统、分布式追踪、日志格式、告警规则、备份工具或服务级别目标,因此运维体系需要由部署者结合环境补充。

启动状态检查

  • 使用 docker compose ps 查看服务是否启动。
  • 使用 docker compose logs odysseus 查看应用启动日志和首次管理员密码。
  • 检查 SearXNG 的健康检查是否能访问容器内的 http://localhost:8080/
  • 确认 ChromaDB 已启动,并核对应用使用的 CHROMADB_HOSTCHROMADB_PORT
  • 检查 datalogshuggingfacelocal 挂载目录的宿主机权限。

备份与升级注意事项

SQLite 数据库默认位于 data/app.db,Compose 命名卷还包含 SearXNG、ChromaDB 和 ntfy 的数据。资料没有提供一致性备份流程、迁移脚本和回滚方案,因此升级前应由部署者在停止写入后备份相关目录或卷,并保留可恢复副本。

默认分支为 dev,README 明确提醒它会优先获得最新改动。需要变更可控性的环境应评估使用 main 分支,但资料没有提供分支同步策略、发布版本或兼容性保证。

安全与合规边界

Odysseus 可以访问本地文件、Shell、邮件、日历、模型服务和搜索服务,因此安全边界取决于部署权限,而不仅是 Web 页面本身。所有涉及真实账户、私人通信、企业文档和远程服务器的操作,都应限定在获得明确授权的环境内。

部署安全要求

  • 任何网络可访问部署保持 AUTH_ENABLED=true
  • 除本地开发外保持 LOCALHOST_BYPASS=false
  • 不要把 API 密钥、管理员密码、OAuth 客户端密钥或私有数据提交到 Git。
  • 不要将原始模型端口或模型服务端口直接公开到互联网。
  • Compose 中 ChromaDB、SearXNG 和 ntfy 默认绑定回环地址;如需改为局域网或 Tailscale 地址,应同步评估认证和访问控制。
  • 远程 SSH 只连接已授权服务器,并使用专门账户、最小权限和可撤销密钥。

隐私、搜索与自动化边界

邮件正文、上传文档、会话内容和记忆可能被发送到所配置的模型或搜索服务,具体取决于功能和端点配置。资料没有提供统一的数据保留周期、第三方处理清单、脱敏策略或企业合规认证,因此部署者必须依据组织制度和适用法律自行决定哪些数据可以进入系统。

搜索、浏览器 MCP、Shell、邮件发送和计划任务应只用于自有或明确授权的目标。本文不提供未授权访问、绕过检测、批量账号操作、漏洞利用或其他攻击性操作方法;生产环境应通过网络隔离、权限分级、审计和人工确认降低自动化误操作风险。

许可证与商用条款

仓库的 LICENSE 文件是 GNU Affero General Public License Version 3,README 许可段落写作 AGPL-3.0-or-later。AGPL-3.0 是自由软件许可证,不等于禁止收费;从许可证允许复制、修改、运行和分发的条款体系看,商业使用并非因许可证名称而自动禁止。

但是,商用分发或提供网络服务时必须遵守完整 LICENSE 的条件,包括保留版权和许可证通知、提供相应源代码及履行修改版本的分发义务。AGPL 的网络服务条款特别关注:用户通过网络使用运行了修改版本的服务时,修改后的对应源代码需要按许可证要求向这些用户提供。

项目还包含 README 提到的 ACKNOWLEDGMENTS.md,并且 Dockerfile 注释说明可选依赖中包含 PyMuPDF AGPL 等内容。依赖项可能具有独立许可证,企业分发前应逐项审查仓库 LICENSE、依赖许可证和自身修改内容;本文不替代法律意见,具体义务以仓库 LICENSE 及适用法律为准。

局限性与已知限制

资料能够确认功能和配置入口,但没有提供完整的版本发布信息、性能测试、并发模型、备份恢复手册和生产拓扑。对于这些信息,官方仓库未提供该信息,建议以最新 README 和 setup guide 为准。

  • 默认分支是 dev,其变化速度和变更风险不能由本文进一步量化。
  • 模型能力依赖外部 API、本地模型服务、硬件和模型本身,仓库资料没有给出统一模型兼容矩阵。
  • Cookbook 的模型下载、服务引擎安装和远程服务器操作会引入额外磁盘、网络、权限与编译要求。
  • 文档、图像、音频和邮件上传虽有应用层大小变量,但没有提供完整的反向代理限制和内容安全策略。
  • Research 的搜索质量和报告结果依赖 SearXNG、研究模型及外部站点响应,资料没有给出准确率或时延指标。
  • 邮件、CalDAV、MCP OAuth、Google OAuth 和第三方搜索的完整配置流程不在已提供文件中。
  • Compose 使用 ChromaDB 的 latest 标签,而 SearXNG 使用固定标签;两者的升级策略不同,不能用同一种版本管理假设处理。

适合谁

以下信号同时成立时,选择 Odysseus 的理由更充分;这些是基于仓库功能、部署方式和配置项的场景判断,不是项目官方承诺。

  • 团队接受自行维护 Docker Compose、数据卷、认证和模型端点,而不是要求供应商托管全部基础设施。
  • 使用场景同时包含聊天、文档、研究、邮件、笔记或日历,不希望把这些任务拆散到完全不同的系统中。
  • 已有 Ollama、LM Studio、OpenAI 兼容服务或其他可配置模型端点,并能管理模型密钥与网络访问。
  • 需要在本地保留应用数据库、上传文件、模型缓存和日志,并能为这些数据制定备份及权限策略。
  • 能够接受 AGPL-3.0-or-later 对修改、分发和网络服务源代码提供义务带来的合规工作。

不适合谁

以下信号表明部署者应谨慎评估,或者选择资料中已明确存在的替代路径,例如直接使用现有模型服务、独立邮件系统或独立日历系统。这里不对未在资料中出现的产品作比较。

  • 要求官方提供明确 SLA、并发容量、灾备指标或经过公布的性能基准,但当前资料没有这些承诺。
  • 团队不能维护 Docker、数据库、搜索服务、模型服务和外部凭据,且没有专人处理升级与备份。
  • 组织政策禁止邮件、文档、会话或个人信息离开指定网络,而当前部署尚未完成模型和搜索流量隔离。
  • 需要强制使用特定模型、特定邮箱或特定 CalDAV 供应商,但官方资料没有给出对应兼容性确认。
  • 计划把修改后的服务公开提供,却无法履行 AGPL-3.0 的许可证通知和对应源代码提供义务。

常见问题与排查(FAQ / Troubleshooting)

排查时应先区分“容器没有启动”“应用已启动但依赖不可达”和“认证或配置不允许访问”三类问题。以下步骤只使用仓库资料中出现的命令、地址和服务名称。

访问 7000 端口失败怎么办

先执行 docker compose psdocker compose logs odysseus,确认构建是否完成、应用是否已经由 Uvicorn 监听 7000。Compose 默认绑定的是 127.0.0.1:7000,因此从其他机器访问时不会自动成立;如需改变绑定地址,应审查 APP_BIND 的安全影响。

为什么应用启动被搜索服务阻塞

Compose 对 SearXNG 使用 condition: service_healthy,应用会等待健康检查通过。SearXNG 使用固定镜像标签,并在首次启动时生成或迁移设置文件;应先查看 SearXNG 容器日志和健康检查状态,不要直接把镜像改成未验证的标签。

首次管理员密码在哪里

README 明确说明首次管理员密码会打印在 docker compose logs odysseus 中。也可以在首次启动前通过 ODYSSEUS_ADMIN_PASSWORD 预置密码,但该值不得写入公开仓库、镜像层或共享日志。

容器生成的文件在宿主机上无法修改怎么办

检查 PUIDPGID 是否与宿主机用户匹配,并核对 APP_DATA_DIRAPP_LOGS_DIR 绑定目录权限。入口脚本设计上会在运行 Uvicorn 前修复相关目录所有权,但宿主机挂载路径本身仍需要具备可操作的权限和文件系统支持。

容器无法访问宿主机上的 Ollama 怎么办

确认 OLLAMA_BASE_URL 使用的是容器可达地址,并检查宿主机模型服务是否按示例要求监听可被容器访问的接口。Compose 提供 host.docker.internal 到宿主机网关的映射,但它不负责启动宿主机上的 Ollama,也不负责验证模型名称或 API 密钥。

本地模型缓存和服务引擎是否会丢失

Compose 将 Hugging Face 缓存映射到 ./data/huggingface,将 Cookbook 安装的本地包映射到 ./data/local。只要这些宿主机目录被保留,容器重建不会仅因容器生命周期而删除它们;但资料没有提供损坏检测和跨主机迁移流程。

项目结构与测试提示

已提供资料明确出现了 docsdockerconfigscriptstestsdatalogsservices/cache/search 等路径。它们分别承担文档、容器脚本、服务配置、迁移脚本、测试、运行数据、日志和搜索缓存等职责;完整目录树官方仓库未提供该信息,建议以最新仓库为准。

测试分类

根据 pyproject.toml,pytest 测试路径为 tests,异步模式为 auto。仓库声明了安全、路由、服务、CLI、JavaScript、辅助工具、单元测试和未分类测试等标记,并提供 slow 标记用于将已知较慢测试排除在快速通道之外。

Text
[tool.pytest.ini_options]
testpaths = ["tests"]
asyncio_mode = "auto"

markers = [
    "area_security: tests covering auth, owner-scope, SSRF, XSS, confinement, redaction",
    "area_routes: tests covering HTTP route / API behavior",
    "area_services: tests covering service-layer behavior (llm, cookbook, email, calendar, ...)",
    "slow: opt-in marker for known-slow tests; excluded by the fast lane (not slow)",
]

这段配置用于说明仓库的测试组织方式,而不是完整测试命令。资料没有提供可核查的测试通过率、覆盖率或持续集成结果,因此不应据此推断项目质量指标。

开发与贡献

README 欢迎贡献,并将新安装测试、提供商配置问题、移动端和编辑器优化、文档以及小范围重构列为较好的切入点。贡献者还应阅读仓库中的 CONTRIBUTING.mdROADMAP.md,以确认当前流程和计划。

package.json 显示项目仓库地址为 https://github.com/odysseus-dev/odysseus.git,开发依赖中包含 @antithesishq/bombadil。资料没有给出 Node.js 版本要求、前端构建命令或完整开发环境初始化命令,相关内容不能由这一项依赖单独推导。

项目地址与资源

以下链接均来自仓库元信息或 README 中出现的项目资源,适合用于获取源码、安装说明、功能演示和许可证材料。