跳转到内容

发布文件

Eidos Publish 可以把本地 .eidos、.md 或 .markdown 文件变成稳定的托管地址。 内容变化时会创建不可变 Version,并将它激活到一个资源 slug。完整 Source Bundle 未变化时 继续使用当前 Version。Eidos File 通过 只读 Eidos Runtime 提供访问。Markdown 会在发布时一次性渲染成不含脚本的静态页面。 本地文件仍是源文件。发布完成后 CLI 可以退出。

--slug 支持多级目录,例如 运动/2026/骑行.gpx,也支持中文和空格。 如果普通文件已复制为临时快照,可通过 --source-path "轨迹/2026/原始.gpx" 保留插件绑定中的原始 Space 相对路径。源路径和公开地址独立。命令只发布选中的文件, 不会同时发布其目录内的其他文件。

发布支持普通文件,稳定地址默认下载原始内容。指定本地插件包中的 只读 file View,可以将文件发布成交互网页:

终端窗口
eidos publish ride.gpx --slug ride-download
eidos publish ride.gpx --slug ride-map --plugin ./local.eidos-gpx-viewer.eidos-plugin --plugin-view map

请使用账号的 Publish CLI 密钥。这些功能需要 Pro。 同一源文件可以使用不同 slug,分别提供下载链接和 View 链接。每个链接有独立的 访问权限和当前 Version。

插件包作为发布快照的私有依赖保存,不会进入插件注册表。网页运行所需的浏览器代码 仍会交付给访问者,因此插件中不能包含秘密。重新发布时,更换插件包或 View 会创建 新的 Version。

发布 View 支持 plugin API 3.0.0、kind: "file"、access: "read" 且没有声明 View capabilities 的插件。源文件和压缩包分别限制为 16 MiB,解压后的包也限制为 16 MiB。View 只能读取当前发布文件,不能访问本地 workspace、settings、storage、 connections、同目录其他文件或执行写入。系统支持声明的浏览器网络来源和浏览器 worker。 直接下载支持最大 1 GiB 文件,同时受账号限额约束。

  1. 登录 Publish 账号页。
  2. 创建一个 Publish CLI 密钥,并在显示时立即复制。服务端只保存哈希,之后无法再次 显示同一个密钥。
  3. 在当前 Shell 或 Secret Manager 中把密钥保存为 EIDOS_PUBLISH_TOKEN。不要把它写进 共享脚本,也不要提交到代码仓库。
  4. 检查当前 CLI build 包含 Publish 命令:
终端窗口
eidos cloud publish --help
# 或兼容别名:
eidos publish --help

为资源选择一个 slug,然后发布文件:

终端窗口
eidos publish tracker.eidos --slug tracker

slug 会成为 URL path。它包含 1–64 个小写字母、数字或连字符,并且必须以字母或数字开头 和结尾。例如,上面的命令可能得到:

https://u-….eidos.ink/tracker

Publish 可以把这段不透明 hostname 换成独立的 Publish Handle。打开 Publish 账号页,在 Publish 域名中输入符合规则的 Handle,然后点击认领域名。服务会立即认领 handle.eidos.ink。系统分配的 u-* hostname 继续作为稳定后备地址。Handle 不会 修改账户 username。Handle 使用 3–30 个小写字母、数字或连字符,以字母开头,并且不能占用 Publish 或 Relay 的保留命名空间。

Publish Pro 还支持在账户 → Publish → 概览 → 自有域名中 接入 1 个自定义域名。 该域名承载账户下的所有发布内容,保留现有路径,并自动配置 HTTPS。 激活后,新的发布结果优先使用自定义域名,原有 eidos.ink 链接继续可用。 无需重新发布现有内容,也无需修改 CLI 的 API 地址或密钥。

普通终端输出会持续展示文件校验、附件发现、逐对象哈希、内容去重、待上传总字节、 Serving Target 准备和 Version 激活进度。Version 就绪并激活后命令才会成功返回。失败时返回非零 exit code。 CLI 会为包含附件 digest 的完整 canonical Source Bundle 计算 fingerprint。对相同内容重复 执行发布时,只核对线上活动 fingerprint,不会制造重复的 Version 历史。

如果需要直接链接到发布文件中的指定表格或视图,可在 URL 中添加稳定的 Eidos UUIDv7 ID:

https://u-….eidos.ink/tracker?table={table-id}&view={view-id}

view 参数也可以单独使用。无法找到 ID 时会回退到默认表格和默认视图。

Eidos File 可以包含一个向目标表格创建 Row 的 Form View。使用稳定的 View ID 或名称,把它 发布为托管表单:

终端窗口
eidos publish feedback.eidos --slug feedback --form-view "公开反馈"

该命令会创建一个新的不可变 Form revision。访客只能看到 Form View 选中的字段。浏览器拿到 的公开 definition 不包含内部 File、Table、View 或 Field ID。公开、密码保护和账号私有访问 继续使用其他 Publish 资源相同的参数。

Form 的填写权限与资源访问权限分开设置。使用 --form-respondents signed-in 要求填写者先 登录 eidos.space。再加上 --one-response-per-user,即可限制每个登录账户只能提交一次:

终端窗口
eidos publish feedback.eidos --slug feedback \
--form-view "公开反馈" \
--form-respondents signed-in \
--one-response-per-user

匿名表单始终允许多次填写,因为未登录时无法可靠识别“同一个人”。Form definition 未变化时, 只调整这些发布策略不会创建新的内容 Version。

已完成的回复会等待在私有 Publish Inbox,不会修改托管快照,也不会修改某份云端数据集副本。 使用发布结果中的 Publication ID,把回复收回原来的本地文件:

终端窗口
eidos collect feedback.eidos \
--publication 7300a083-df92-49d8-945d-1e0bae0eac18

每条回复都通过 Eidos Runtime 导入。新 Row 与本地导入回执在同一个 SQLite transaction 中 提交,然后再确认云端回复。即使在本地提交后崩溃或 ACK 丢失,重试也不会创建重复 Row。

Form 支持 File 字段。Collector 会下载提交附件,核对大小与 SHA-256,再把它保存到源文件 目录下的 .eidos-assets/publish/sha256/。相同附件 bytes 会复用同一个本地内容寻址文件。

本地 schema 变化不会自动修改线上 Form。需要显式重新发布才能激活新 revision。当前预览版 Collector 如果发现 Table 或 Form View 自该 revision 后已经变化,会停止并报告 schema 错误, 避免静默丢字段或执行不安全转换。

Markdown 使用相同的命令与 slug 模型:

终端窗口
eidos publish docs/guide.md --slug guide

发布端支持 CommonMark,以及 GitHub 风格的表格、删除线、任务列表和自动链接。文档必须是 UTF-8,正文最多 16 MiB。原始 HTML 会作为文本显示而不会执行,页面不允许 JavaScript, 并使用严格的 Content Security Policy。

相对链接和图片地址会成为附件:

![架构图](assets/architecture.png)
[下载工作簿](files/example.xlsx)

CLI 会以 Markdown 文件所在目录解析这些路径,把附件随 Version 上传,再将页面中的地址 重写为绑定 Version 和内容摘要的不可变 URL。https:、mailto:、内联图片 data: 和 #fragment 不会上传。renderer 会删除不安全的链接协议。绝对路径、其他 URL scheme、 带 query 的本地路径、目录逃逸和符号链接会在激活前被拒绝。

Eidos File 的相对 File 字段条目会成为附件。Markdown 的相对链接和图片地址也会成为附件。 CLI 以源文件所在目录为根目录解析附件,检查路径不越界、每一层都不是符号链接且目标是 普通文件。Eidos File 附件还会核对 File entry 声明的精确大小。

同一账号内,相同 SHA-256 的内容只上传和存储一次。多个 File entry、路径、slug 或 Version 引用相同 bytes 都不会重复占用存储。发布后的附件继承资源的公开、密码或私有访问策略。文件 缺失、大小变化、路径越界、包含符号链接或单个附件超过 1 GiB 时,发布会在激活前失败。 标准 Publish 的 .eidos 文件上限为 256 MiB。CLI 会先读取账号额度并检查文件大小,再开始 计算哈希。Custom 账号可以配置更高上限。

访问策略属于每个资源 slug,而不是整个账号。

访问方式 发布参数 谁能打开
公开 不传访问参数 任何持有 URL 的人
密码保护 --password 知道密码的人。不需要 Eidos 账号
账号私有 --visibility private 已登录资源所有者 eidos.space 账号的发布者

再次发布同一个 slug 时,如果不传访问参数,会保留当前访问策略。

终端窗口
eidos publish tracker.eidos --slug tracker --password

CLI 会无回显地要求输入两次密码。密码必须包含 8–128 个 Unicode 字符、最多占用 256 个 UTF-8 bytes,并且不能包含控制字符。密码不会进入 URL 或命令行参数。

自动化时,把密码放入 CI 或 Shell Secret EIDOS_PUBLISH_PASSWORD,并仍然传入 --password:

终端窗口
# EIDOS_PUBLISH_PASSWORD 由 Secret Manager 注入。
eidos publish tracker.eidos --slug tracker --password

使用新密码再次执行命令就会轮换密码,已有浏览器会话会立即失效。正确密码会创建最长 12 小时、仅限当前 Host 的 HttpOnly 浏览器会话。连续失败会被临时限流。

显式删除密码保护并恢复公开访问:

终端窗口
eidos publish tracker.eidos --slug tracker --remove-password
终端窗口
eidos publish tracker.eidos --slug tracker --visibility private

账号私有模式目前仅限所有者本人。打开 URL 时会跳转到 eidos.space 登录。确认是资源所属 账号后再返回资源。如果要分享给没有发布者账号的人,请使用密码保护。

发布后的 Eidos File、Markdown 文档和 Form 默认显示 Built with Eidos 标识。Publish 可以只为某个资源隐藏它,不会创建新的内容 Version:

终端窗口
eidos publish tracker.eidos --slug tracker --hide-branding

使用 --show-branding 恢复标识。两个参数都不传时保留资源当前设置。Publish 账号页的每条 资源旁和 Eidos Lite 的 Publish 面板也提供相同控制。

一个 slug 表示一个长期存在的资源。使用新 slug 发布另一个文件,会在同一个 canonical hostname 下创建新资源:

终端窗口
eidos publish roadmap.eidos --slug roadmap
eidos publish inventory.eidos --slug inventory

把新内容发布到已有 slug 会创建新的不可变 Version,同时保持 URL 不变。source bytes 与附件 引用都相同时,不会创建新 Version。资源数不作为商业额度,实际限制是去重后的总存储与 历史策略。当前标准 Publish 额度为:

限制 Publish
账号去重后总存储 10 GiB
单个 .eidos 文件 256 MiB
单个 source 附件 1 GiB
Markdown 正文 16 MiB
非当前 Version 历史 30 天
资源数 不限数量
访问方式 公开、密码保护、账号私有
Publish Handle 一个 handle.eidos.ink 主机名
自定义域名 每个账户 1 个,自动 HTTPS
删除 Built with Eidos 是
每月 Form 回复 5,000
Collect Inbox 5 GiB
单次回复附件数 20
单个提交附件 100 MiB
已导入回复保留 30 天

当 .eidos 文件需要更高上限或独立 Runtime 容量时,可以联系 Eidos 开通 Custom 方案。 以上为付费 Publish 的限制。本地构建与预览保持免费。付费方案的历史保留期从活动 Version 被替换时开始 计算,非当前 Version 保留 30 天。失败或从未激活的 Version 在 24 小时后清理。 当前活动 Version 永远不会因历史保留期被删除。旧历史到期时,只会释放已经没有任何 Version 引用的内容对象。解释已收集回复所需的 Form 定义快照独立于完整发布 source 保留。

Publish Free 的 Markdown 上限为 2 MiB,每次发布最多 20 个附件、每个附件 25 MiB, Source Bundle 总计最多 50 MiB。保留的源文件、附件和生成产物共同计入账户的 100 MiB。 每天最多创建 20 个新 Version(按 UTC 计算)。重复发布同一 slug 不占新名额。 可在账户页的资源列表中选择“取消发布”立即释放名额。历史版本在清理前仍计入存储。 Free 保留上一版本 24 小时。禁止搜索收录不代表私密,知道公开链接的人仍可访问。

账号页展示的套餐和实时用量是最终依据。 自定义域名需要有效的 Pro 方案,并保留账户页显示的 DNS 记录。

交互发布时使用普通输出,CLI 会持续展示进度。脚本需要稳定的单一结果 document 时,使用 全局 --json:

终端窗口
eidos --json publish tracker.eidos --slug tracker

JSON 模式向 stdout 写一个结果,错误写到 stderr。它不会渲染交互式进度指示。 publishFingerprint 表示完整 Source Bundle,versionCreated 表示本次是创建了新 Version, 还是继续使用活动 Version。

  • Publish 适合稳定、托管、只读的快照。本地 CLI 不需要持续在线。
  • eidos serve --relay 适合由本机文件驱动的实时 编辑器。Serve 进程必须保持运行。

需要开通 Publish

本地预览不会创建托管 URL。请从账号页或价格页开通 Publish,再使用相同文件和 slug 重试。

已达到存储上限

删除不需要的未激活 Version,或减少数据库/附件体积。相同内容不会重复计量。标准 .eidos 文件上限为 256 MiB,source 附件的单对象上限仍为 1 GiB。

附件无法发布

检查附件使用的是目录内相对 URI,文件确实位于源文件旁的对应路径,并且路径中没有符号链接。 对于 Eidos File,还需要检查实际大小仍与 File entry 一致。

浏览器再次要求输入密码

密码可能已轮换、访问方式可能已变化,或者 12 小时会话已经过期。请重新输入当前密码。

无法识别 eidos publish

请更新到包含 Publish 的 CLI build,或构建当前仓库版本。