跳转到内容

使用 eidos serve 打开本地、局域网与 Relay 编辑器

eidos serve 嵌入第一方 Web 与 Lite Host 使用的同一套 Eidos File 编辑器。它适合希望 保留终端文件工作流,同时使用可视化 UI 的场景。

终端窗口
eidos file new tracker.eidos \
--table Tasks \
--label-field Title \
--fields '[{"name":"Title","type":"text"},{"name":"Status","type":"select"}]'
eidos serve tracker.eidos --open
  • 默认绑定 127.0.0.1。
  • 默认端口是 8420。
  • 一次只打开一个文件。
  • 编辑器 mutation 直接提交到该文件。
  • 不需要额外 Save 步骤。
  • macOS、Linux 与 Windows binary 都内置 UI。

需要时可更换端口:

终端窗口
eidos serve tracker.eidos --port 9000 --open

Serve 不会推测或自动打开 assets 目录。文件包含 assets/cover.png 这类 relative entry 时,需要显式挂载一个已经存在的目录:

终端窗口
eidos serve tracker.eidos --assets-dir ./assets --open

挂载后,内置 UI 的 File 字段可以预览图片、打开或下载已有文件,也可以通过文件选择器、 拖放或剪贴板粘贴上传文件。上传内容会以避免覆盖同名文件的名称写入挂载目录,UI 再通过 正常 Runtime mutation 持久化生成的 assets/<name> File entry。

这个目录是一项显式 capability。没有 --assets-dir 时,Serve 不会读取或写入猜测出的 相邻目录。该 mount 也不会解析 assets/ 前缀之外的 relative entry。单个上传限制为 256 MiB,预览限制为 64 MiB。已配对 LAN 浏览器、Relay 账号浏览器,以及持有 --share 链接的访客,在 Serve 进程存活期间都拥有同样的上传权限,因此只应挂载准备 授权给这些用户的目录。

eidos serve 支持加载 .eidos-plugin 格式的插件包(如 eidos.chart 或各类自定义表格视图),并在嵌入式 Web 编辑器中运行。

终端窗口
# 加载单个插件包
eidos serve tracker.eidos --plugin ./dist/eidos.chart-0.1.0.eidos-plugin --open
# 加载多个插件包
eidos serve tracker.eidos \
--plugin ./dist/eidos.chart-0.1.0.eidos-plugin \
--plugin ./dist/eidos.map-0.1.0.eidos-plugin
# 扫描并加载目录下的所有插件
eidos serve tracker.eidos --plugins-dir ./plugins

如果所打开文件同级目录下存在 .eidos/plugins/ 文件夹,Serve 启动时会自动扫描并加载其中的全部 .eidos-plugin 插件包。

Serve 还会加载设备级共享存储 ~/.eidos/plugins(可用 EIDOS_HOME 覆盖),因此在 Eidos Lite 中安装的插件在此同样可用。同级 .eidos/plugins/ 目录优先,严格的 --publish 模式忽略共享存储。

自定义插件视图运行在严格受限的 iframe 沙箱中(设置 sandbox="allow-scripts",无 allow-same-origin),每个插件均具有独立的 null origin,完全隔离宿主 DOM、Cookie、LocalStorage 及其他插件。

宿主为插件注入动态内容安全策略 (CSP):

  • 默认完全禁止外部网络请求。仅允许在 manifest.browser.networkOrigins 显式声明的 HTTPS 源。
  • 默认禁止 Web Worker。仅在声明 manifest.browser.workers: true 时开放 Blob Worker。
  • 脚本与样式均限制在沙箱文档内执行。

插件通过异步 JSON-RPC 与 Serve 通信:

  • table.read:获取表格字段定义与合并后的视图配置。
  • table.page:分页读取当前视图过滤与检索后的行记录。
  • table.aggregate:在服务端 SQLite 层直接执行高速分组指标计算(支持计数、求和、平均值、最值等),无需在客户端传输数万行原始数据。
  • table.properties:持久化保存视图个性化配置到 properties.plugin。在 --publish 模式下禁止修改并返回 PERMISSION_DENIED。
  • table.openRecord:打开行记录详情抽屉。
  • View settings:插件声明 configuration 时,Serve 会自动在表格工具栏渲染 View settings 配置菜单。

--lan 会检测并绑定一个私有 IPv4 接口:

终端窗口
eidos serve tracker.eidos --lan

终端输出的 URL 在 fragment 中携带 access key。打开该链接后,浏览器会与当前 CLI 进程配对。后续访问使用只存在于该进程内的 HttpOnly session cookie。自动检测找不到合适 地址,或机器有多个网络接口时,可以指定准确的私网或 overlay network 地址:

终端窗口
eidos serve tracker.eidos --lan --host 192.168.1.20
eidos serve tracker.eidos --lan --host 100.80.12.4

LAN 模式接受 RFC 1918、link-local、CGNAT(包括常见 Tailscale 地址)与 IPv6 unique-local 地址,不接受公网地址或 wildcard bind。API Host 与 Origin 必须准确匹配所选 地址。

LAN 模式使用普通 HTTP。access link 可以阻止未配对的浏览器调用 API,但不能防止能够监听 局域网流量的人读取通信内容,因此只应在可信私有网络使用。

当另一台设备无法通过私网访问 CLI 时,可以启用 --relay:

终端窗口
eidos login
eidos whoami
eidos serve tracker.eidos --relay --open

eidos login 会打开 eidos.space,通过 Authorization Code + PKCE 登录, 并把可刷新的 CLI 会话存入仅当前用户可读的配置文件。后续 Relay 命令会 无系统凭据弹窗地静默复用或刷新它。eidos logout 用于删除本机凭据。

账号会话用于授权 CLI 认领稳定匿名的 r-….eidos.ink 域名。默认输出的 URL 不包含 access key。在任意设备打开后,浏览器会跳转到 eidos.space。 只有认领该域名的同一账号才能完成登录。Relay 随后为该浏览器建立 host-only HttpOnly session。OAuth token 不会进入浏览器 URL 或本地 Serve 进程。

只有在访客需要不登录所有者 Eidos 账号就访问文件时,才使用 --share:

终端窗口
eidos serve tracker.eidos --relay --share

这种显式分享模式会输出当前 Serve 进程的 fragment-key capability。Relay 会把它 换成 HttpOnly 浏览器 session,所以 key 不会出现在普通 HTTP 请求中。任何获得 该链接的人,在本次 Relay session 有效期间都可以编辑文件。

同一账号启动新的 Relay serve 时,新连接会接管域名并断开旧 connector,同时 使上一次 claim 建立的浏览器 session 失效。本地与 --lan 模式仍然无需账号。 Relay 当前限制单个请求 body 为 4 MiB,大型 CSV 导入请使用 localhost 或 LAN。 --share 需要同时使用 --relay。--relay 与 --lan 不能同时使用。

--ui-dir 可以用另一份静态 build 替代 binary 内嵌 UI。这是开发和发行校验选项,不是普通 使用要求。

终端窗口
eidos serve tracker.eidos --ui-dir ./dist --port 8420

多个 localhost、已配对的 LAN、经账号授权的 Relay 或显式分享的 Relay 浏览器可以 同时编辑。Serve 通过一个权威 Runtime writer 串行提交 mutation,并在每次 revision 提交后 通知其他浏览器。同时发生的 stale edit 会以零副作用拒绝,浏览器随后刷新到最新 revision。

单元格变更和新增行都会乐观渲染。新行的远端 insert 返回前就可以继续输入。 Serve 仍会先提交建行,再发送依赖其权威 Row ID 的后续编辑。

Serve 进程仍必须是该文件唯一的物理 writer。使用其他可写 Host 或 SQLite 工具打开同一路径 前,先停止服务。会话结束后,可以用 eidos file validate tracker.eidos --level full 做独立完整性 校验。