mcpField
U
using-open-artifacts

using-open-artifacts

github.com/coda0hq文档处理7155 次安装2 周前更新
代码仓库

关于 using-open-artifacts

using-open-artifacts 是用于通过 Open Artifacts 创建并发布可分享 HTML、Markdown 或 React 作品的 Agent Skill,适合制作独立内容的用户。它将发布命令行工具与设计、验证、版本管理及项目状态指南结合起来。

主要功能

  1. 01发布 HTML、Markdown 或 React 作品
  2. 02使用 Recipe 和片段构建作品
  3. 03验证设计并预览构建结果
  4. 04管理不可变版本与固定频道
  5. 05配置本地或共享源文件

适用场景

  1. 01将报告或仪表板发布为可分享链接
  2. 02更新作品并保留频道链接
  3. 03在发布前规划设计要求并验证页面

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/coda0hq/open-artifacts --skill using-open-artifacts

安装后在 Claude Code 中输入/using-open-artifacts确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

examples/recipes/canvas/
flow.recipe.json
examples/recipes/canvas/fragments/
body.html
theme.css
examples/recipes/document/
report.recipe.json
examples/recipes/document/fragments/
body.html
report.css
theme.css
examples/recipes/markdown/
notes.recipe.json
examples/recipes/markdown/fragments/
body.md
examples/recipes/react/
counter.recipe.json
examples/recipes/react/fragments/
App.jsx
references/
auth.md
canvas.md
deployment.md
design.md
fonts.md
icons.md
interaction.md
live.md
motion.md
quality.md
recipe.md
recipe.schema.json
reference-dna.md
reference-dna.schema.json
scripts.md
study.md
tokens.css
scripts/
artifact-quality-smoke.mjs
artifact.mjs

详细介绍

Open Artifacts

发布可独立使用的 HTML、Markdown 或 React 工件,用户可通过 URL 分享。 查看器会将工件正文置于沙盒 iframe 中,并负责服务界面、主题切换器、版本选择器、评论以及可选的 Live 或 Handoff 控件。工件保留不可变版本;频道可在后续发布时沿用同一个 URL。

发布 CLI 与此文件位于同一目录,路径为 scripts/artifact.mjs。各 Agent 的技能安装位置不尽相同(例如 .claude/skills/ 或其他 Agent Skills 目录),因此请将包含此 SKILL.md 的目录解析为 SKILL_DIR,然后使用任务本地变量 ARTIFACT_CLI="$SKILL_DIR/scripts/artifact.mjs"。在项目根目录运行 node "$ARTIFACT_CLI" ...。系统未全局安装 artifact 二进制文件,Recipe 路径相对于项目根目录工作目录解析。CLI 要求 Node.js 22 或更新版本。

设置(每个项目只需一次)

CLI 需要一个实例 URL,按以下顺序解析:--api 标志、OPEN_ARTIFACTS_URL、项目中的 .artifacts/config.json 或 .artifacts/config.local.json,然后是 ~/.config/open-artifacts/config.json。如果均未设置,请向用户询问实例 URL,并写入项目配置。对于受 CREATE_TOKEN 保护的实例,请使用 OPEN_ARTIFACTS_TOKEN 或配置中的 createToken。对于 coda0.com 等托管式/SaaS 实例,请运行 node "$ARTIFACT_CLI" login;浏览器登录流程请参阅 auth.md。除非通过 --token 或 OPEN_ARTIFACTS_API_KEY 明确覆盖,否则已存储的 sk_ API 密钥优先于可自托管实例的 create-token 值。

每个工件都由 JSON Recipe 和按顺序排列的片段构建。创建或更新工件前,请先阅读 recipe.md。 共享 Recipe 和片段属于项目源文件,可以提交到版本控制;请放在 .artifacts/recipes/ 和 .artifacts/fragments/ 下。本地或加密源文件放在 .artifacts/recipes.local/ 和 .artifacts/fragments.local/ 下。

状态存储在 .artifacts/ 中:Manifest v2 仅记录发布状态和构建哈希;credentials.json、本地清单、私有 Recipe/片段和预览均会被 git 忽略。在项目中首次运行 create 时,请询问用户工件是否应设为本地,并建议选择本地。将选择记录在 artifact.local 中,并据此放置 Recipe/片段。

逐个运行会修改状态的命令,切勿并发运行。 这包括 create、update、delete、migrate、ack、auto-update、login 和 logout;install-hook 也会写入项目设置。credentials.json 和清单采用未加锁的读取-修改-写入方式更新。写入前会立即重新读取,从而避免各命令在网络往返期间发生冲突,但如果两个命令的写入确实交错,仍可能导致其中一个更新丢失。丢失的写入令牌无法恢复——没有任何端点会重新签发,因此必须串行执行。对于“全部重新生成”操作,这一点尤其重要:请使用循环,不要并行分发任务。

如果用户还没有实例,请引导他们查看 deployment.md——其中介绍了获取实例的三种方式(使用无需部署的公共共享实例、在自己的 Cloudflare 账户上自托管,或共享团队实例),并提供了可根据内容敏感度进行选择的信任模型表。除非用户提出要求,否则不要代替他们部署。

何时发布工件

当用户需要可分享或可独立使用的内容时发布,例如报告、仪表板、文档页面、可视化内容、演示或长篇文章。不要为简短回答、代码片段,或用户只会在对话中阅读一次的内容发布工件。不确定时,请直接在对话中回答,并主动提出可发布。

在执行框架支持时隔离内容生成

发布或重新发布意味着读取项目资源和设计参考、编写 Recipe 和片段、验证确定性构建,并运行 CLI。如果宿主提供子 Agent 或任务原语,请将此内容生成工作流交给它,这样父对话只需获取结果。这是工作流优化,不是 CLI 要求;如果宿主没有子 Agent 功能,则由当前 Agent 执行相同的工作流。

在可用时,对 create(首次发布)和 update(重新发布),以及为它们开展的设计工作,都使用单独的任务。在 Claude Code 中,这可以是 Agent 任务;其他执行框架可能提供等效功能。如果当前 Agent 是唯一可用的执行者,就不要虚构隔离边界。

为执行者提供独立完成工作所需的一切,然后让它开始工作:

  • 简要说明:要发布或更新什么、面向谁,以及原因。
  • 如果是更新:提供制品 ID。执行者运行 node "$ARTIFACT_CLI" show <id>,将当前已发布版本作为起始参考 — 对于锁定设计,该页面顶部的方向说明指出哪些内容不得更改。“锁定”意味着视觉方向(风格、配色的色相范围、布局姿态)不得更改 — 这并不意味着制品可以免于验证关卡。原始发布后新增的对比度或 CSP 检查,可能会使此前通过检查的令牌追溯性地失败;此时必须微调有问题的令牌,同时保持色相不变(例如,将浅色主题的 --accent 加深几个亮度级),使页面通过关卡,同时保持相同的视觉方向。(对于加密制品,show 会在本地使用创建时存储于 credentials.json 的密码解密,因此无需再次提示用户输入密码。)然后,执行者读取 Manifest v2 中记录的 Recipe、其片段,以及其 scope 覆盖的项目文件。
  • 所有明确的发布要求。将标题、描述、favicon、scope、channel、watch globs、level、Canvas mode、本地性和自动更新设置写入 Recipe。不要在其中存放密码。

执行者自行完成工作流中的其余所有步骤 — 探查资源、规划、阅读 design.md、recipe.md 和相关模式参考;编写 Recipe 和片段;运行 validate;可选构建预览;运行 create/update;进行验证;并且只返回简短摘要:URL、版本号,以及一行变更说明。父对话将结果转达给用户,不应自行重新运行发布,也不应在自己的上下文中保留设计推理。

轻量级的记录管理命令 — status、ack <id>、auto-update <id> on|off、list、show <id>、whoami、logout 和 install-hook — 不会编写内容,可以直接运行;只有 create 和 update 中的内容生成部分适合隔离执行。

可选参考 DNA(仅限 Agent 侧)

当用户明确表示**“将此作为制品的参考 DNA 来研究”、“使用这套设计 DNA”**,或要求从截图或公共 URL 中提取 Artifact 方向时,请在编写前阅读 reference-dna.md。普通引用、来源 URL 或链接集合不会触发此工作流。

对于 URL,父对话应先取得用户对所有权或公共参考的确认,然后再委派研究任务。研究任务只生成诊断结果;在用户之后明确决定采用之前,绝不发布内容或写入旁置文件。获准使用的旁置文件是静态 Recipe 输入,会被哈希并纳入监视,且绝不会出现在 Artifact 正文或运行时中。有关来源安全规则,请阅读 study.md。

如何设计页面

你是一名专家级设计师,负责用 HTML 制作设计成品。HTML 是你的工具,而非表现形式:简报要求设计仪表板时,就做信息设计;要求设计报告时,就做编辑设计;要求设计原型时,就做交互设计。不要默认把所有内容都设计成“网页”。

工作流:(1)理解简报——输出类型、保真度、受众,以及是否有品牌/设计系统;(2)探索资源——如果项目有设计系统(令牌、主题、组件样式),就完整阅读并应用;优先级依次为用户的要求、项目系统,然后才是你的选择;(3)明确规划——用一句话说明设计解读(“我的理解是:面向 Y 的 X,采用 Z 方向”),用一句场景描述确定使用浅色还是深色,列出 4–6 个命名调色板值、字体角色,以及一句话的布局概念;(4)使用真实内容构建,绝不使用 lorem ipsum;(5)最后运行一次 design.md 中的发布检查——结构 grep、P0 检查清单(两种主题下的对比度、360px、禁用套路、状态、减少动态效果、文案审查),然后进行五个维度的评审(理念/层级/执行/针对性/克制)——修复评分低于 3/5 的问题,再评分一次,然后发布。不要反复检查渲染结果。

**编写页面前,请阅读 design.md。**其中包含完整的设计理念:品牌与产品语域的区分(建立熟悉感与彰显独特性);反 AI 垃圾设计规范;共享令牌契约(由 Recipe 构建器注入的 references/tokens.css,在主题片段中覆盖身份令牌);已安装字体的示例库(CSP 会阻止下载字体,而非使用操作系统字体库——Iowan、Charter、Avenir、Optima 等均可用);包含可直接粘贴的 OKLch 调色板的五种设计方向(编辑风、现代极简、人文风、技术实用风、粗野主义);CSP 限制下的视觉素材指南(使用 SVG 图表/示意图/排版设计作品,而非纯文本块);基于令牌编写的组件契约;查看器框架的具体要求(固定页眉高度、主题标记);以及每次发布前都要运行的发布检查。

**如果要制作带有视觉方向的 HTML 成品,请在编写片段前阅读 quality.md。**该文档提供与格式适配的设计简报、三级评审、品牌语域成品的结构选择、符合 CSP 要求的视觉素材方案、构建产物的静态质量配置,以及用于 320/375/414/768px 渲染的 smoke 命令。Canvas 仍由 canvas.md 管理;Markdown 仍采用查看器提供的 .oa-md 样式。当用户明确要求从截图或 URL 中汲取设计灵感时,请先阅读 reference-dna.md,再检查参考内容。该文档会引导你前往 study.md 了解来源安全,确保远程内容不受信任并保留在 Agent 端,且绝不在成品中加入抓取操作或远程资源。

生产级别(1 / 2 / 3)

每个制品都按三个级别之一构建。根据需求简述选择级别,并在 Recipe 中记录为 artifact.level: 1|2|3:

  • **级别 1 — 简单:**以排版为主的文档(报告、文章、API 参考、笔记)。不使用炫目的主视觉,尽量少用 JS。适用于“只读一次”的内容。将正文包裹在 <main class="oa-prose"> 中——这是合同规定的散文基线(内容宽度上限、内边距、标题和代码样式)——这样,即使文档定义了令牌却忘了设置结构,也不会以裸页面形式发布。
  • **级别 2 — 交互式:**仪表板、文档站点、演示、原型。使用有状态的内存 JS、导航、复制按钮、可展开区块和细微过渡效果。如果不确定且需求简述涉及交互,默认选择此级别——如果需求简述主要是供人阅读的文本,级别 1 更稳妥(它自带结构基线;级别 2 的结构则需作者自行提供)。构建级别 2 或更高级别之前,请阅读 references/interaction.md,了解八状态合同、焦点可见性、点击目标、表单模式和等待状态。
  • **级别 3 — 丰富:**落地页/营销页面、产品展示。编排动效——加载序列、滚动显现、视图过渡——全部使用浏览器原生 API,不使用外部库(严格的 CSP 会拦截 CDN)。构建级别 3 之前,请阅读 references/motion.md 中的原生动效模式库(此处同样适用 interaction.md)。

不要把文档过度包装成级别 3;也不要把落地页按级别 1 发布。级别决定的是组件合同和动效预算,而不只是“动画多少”。

画布模式

画布模式与级别正交。设置 artifact.canvas: true 后,页面的外壳会替换为可无限平移/缩放的画框空间平面。它可以与任意级别组合:级别 1 是空间笔记,级别 2 是多画框原型(默认用法),级别 3 则是展示型画布。构建前请阅读 references/canvas.md——其中包含完整的随附运行时(CSS + 原生 JS),支持惯性和捏合缩放效果、可选的演示者导览、连接线聚焦以及 #frame-id 深层链接,还包括画框和自由布局合同,以及画布发布门槛。

可选的查看者工作流

只有当实例绑定了 LIVE_DO 时,才可进行实时编辑;这需要制品所有者的 sk_ 会话,并且会在原位执行 update --live 之前编辑本地 Recipe 源文件。启动实时会话前,请阅读 live.md。设置 OPEN_ARTIFACTS_HANDOFF=1 的部署也可能会开放主机端的网络摄像头/麦克风录制和播放功能;这些属于查看器界面,不是 Recipe 格式或制品端 API。这两种功能都是可选的,在可自托管实例上可能不可用。

编写内容 — 硬性约束

artifact 框架采用严格的 CSP:编写的代码不得发起外部请求(CDN 脚本、远程图片、fetch/XHR/WebSockets):

  • 将所有 CSS 和 JS 内联;将图片和字体嵌入为 data: URI。使用系统字体栈,或通过 @font-face 数据 URI 内联字体。在设置了 OPEN_ARTIFACTS_WEB_FONTS="1" 的部署中,也可以通过 /fonts/<family>--<weight>[--italic] 代理从同源加载 Web 字体,或直接从允许列表中的字体 CDN(Fontshare / Google Fonts)加载。使用 Mermaid 时,始终通过自托管且在允许列表中的 <script src="/vendor/mermaid.runtime.js"> 路径提供(普通非模块脚本)——这不受 Web 字体标记影响。请参阅 references/fonts.md 和 references/scripts.md。构建门禁会将 @font-face/@import 限制为这些字体主机,并将 <script src> 限制为允许列表中的同源 /vendor/... bundle,因此不会访问任意外部主机。
  • 图标:优先使用 Remix Icon。 请阅读 references/icons.md,了解其中约 90 个内联 SVG 图标的 vendored 子集(导航、操作、状态、社交和常见 UI)。复制整个 <svg> 块并内联——它使用 fill="currentColor",因此会继承颜色。切勿链接 Remix Icon CDN(CSP 会阻止);只能使用内联 SVG。若要将图标放在文本旁边,请将它们包在契约规定的居中行中(<h2 class="oa-ico-text"><svg class="oa-ico">…</svg> Title</h2>)——标题中单独放置的图标位置会偏低,导致构建失败。
  • 不要使用 localStorage/sessionStorage(沙盒会阻止);请将状态保存在内存中。
  • 将简洁标题放入 artifact.title。
  • 支持两种主题。构建器会注入 references/tokens.css;请编写主题片段,其中必须包含一个未分层的 :root 块(浅色)和一个 :root[data-theme="dark"] 块。令牌契约只提供变量,不会为元素设置样式。对于一级 HTML 文档,请将正文包在 <main class="oa-prose"> 中,以使用契约提供的 prose 基础样式(行宽上限、页面内边距、标题比例、code/pre/table 样式)。如果一级非画布页面没有行宽上限,validate 会报错,因为默认文档是全宽的,并采用浏览器默认间距。Markdown 无需处理——查看器会自动将其包在 .oa-md 中。查看器界面(服务页眉、主题切换、品牌标记、版本选择器、评论,以及任何由部署启用的 Live/Handoff 控件)会在提供服务时由主机注入——切勿自行编写。 查看器界面会通过令牌契约的界面桥接自动适配你的品牌配色,因此请勿在主题片段中覆盖 --oa-* 查看器令牌。二级/三级页面可以按设计采用全幅布局;请明确编写其结构。
  • 响应式设计:正文不得出现水平滚动;宽表格/代码块应置于各自的 overflow-x: auto 容器中。
编写 Markdown

上面的硬性约束大多仅适用于 HTML,不适用于 Markdown。Markdown Recipe 会原样发布正文 .md,构建器不会注入 references/tokens.css,不会将内容包在 <style> 块中,也不会运行任何 HTML 验证关卡(没有主题片段要求、没有 :root/[data-theme="dark"] 要求、没有对比度检查、没有 L1 长度上限、没有禁用套路的 grep 检查)。查看器会将原始 Markdown 包在 .oa-md 中,并在客户端使用查看器的默认令牌进行渲染,因此:

  • document.theme、document.fragments.theme/styles/scripts 必须全部省略——validate 会拒绝带有主题/样式/脚本片段的 Markdown Recipe(错误:“Markdown recipes only support body fragments”)。仅提供一个或多个 .md 文件作为 document.fragments.body;document.theme 可以省略或设为 null。
  • 你无法为 Markdown 成品设置主题、样式或脚本;如果需要交互、身份令牌或超出默认值的长度上限,请改为编写 HTML。
  • artifact.title 仍决定页面标题和 OG 卡片;第一个 # 标题也会提取为备用标题。
  • 自动支持浅色和深色主题(查看器的 .oa-md 外壳会读取浅色/深色令牌);无需编写任何内容。

Markdown 文件(.md)在客户端渲染;任何需要交互或经过设计的内容都更适合使用 HTML。

避免 AI 滥用套路(完整匹配并拒绝的列表见 design.md): 侧边强调条纹边框、渐变文本(background-clip: text)、装饰性玻璃拟态、千篇一律的卡片网格、主视觉指标模板、图标平铺堆叠(每个卡片标题上方都悬浮圆角图标块)、每个章节上方的大写眉题或 01 / 02 / 03 标记、深色背景上的彩色发光阴影、斜体衬线主视觉标题、格言式文案节奏(“不是 X,而是 Y。”)、在移动端宽度下溢出的标题,以及编造的内容——不要伪造指标、客户评价或“Acme Corp”;诚实的占位内容胜过虚假的数据。请验证对比度(两种主题下,正文均须达到 ≥ 4.5:1),切勿在带色调的近白背景上使用低对比度灰色。 全视口章节使用 min-height: calc(100dvh - var(--oa-header-h, 2.5rem))——查看器会添加粘性页眉。可直接使用所有现代 CSS——text-wrap: pretty/balance、CSS Grid、容器查询、color-mix()、:has()、视图过渡,以及用于流式排版的 clamp()。

发布

(当运行环境提供内容生成任务时,在该任务中运行;从项目根目录运行。)

创建 Recipe 和有序片段,验证后发布:

node "$ARTIFACT_CLI" validate .artifacts/recipes/app-interactions.recipe.json
node "$ARTIFACT_CLI" create .artifacts/recipes/app-interactions.recipe.json

Recipe 负责管理 favicon、scope、channel、watch globs、level、Canvas mode、locality 和 auto-update。保持 favicon 稳定。使用 kebab-case channel,以便在多次 create 调用中复用同一个 URL;使用 null 可生成新 URL。create 会在内存中组合内容,并发送一个最终载荷。它会打印可分享的 URL。

只有发布成功后,Manifest v2 才会记录 Recipe 路径以及 Recipe/输入/输出哈希。Write tokens 和 channel tokens 会保存在被 git 忽略的凭据文件中。

发布后的 Live 模式

在支持 Live 的实例上(当实例绑定 LIVE_DO 且你已登录时,CLI 会在 create 后立即打印“Live 模式”提示),发布制品后默认启动监视器:

node "$ARTIFACT_CLI" live <ID> --watch

将其作为后台任务运行(各类运行环境的模式见 references/live.md —“运行环境说明”),并在整个会话期间保持运行。在 Live 会话中,你唯一要做的就是轮询——不要亲自操作查看器页面(不进行浏览器自动化,不点击 Live、不选择元素,也不在制品页面上输入提示词)。用户操作查看器:打开制品 URL,点击 Live,选择元素,然后为每个元素输入修改内容(触发一个 generate 事件),或直接在行内编辑元素文本(“编辑文本”,触发一个 edit 事件)——参见 references/live.md 中的“复制编辑”部分。监视器会打印每个事件,供你处理(编辑 Recipe 源文件、运行 update、回复 done)。监视器连接后,查看器的 Live 按钮会显示 Connected,这样用户在开始选择元素前就能看到 Agent 已上线;待处理事件租用给你期间,切换按钮上的强调色圆点会闪烁(“Agent 正在处理编辑”);如果监视器断开连接,切换按钮会显示琥珀色闪烁圆点和启动提示。如果没有监视器连接,点击 Live 仍会打开选择器,并显示可复制的启动提示;提交编辑前请先启动监视器。会话开始前请阅读 references/live.md。

更新

(如果运行环境提供内容生成任务,请在该任务中运行;从项目根目录运行。)

node "$ARTIFACT_CLI" update <id> [recipe.json] [--label "what-changed"]

URL 不变,版本更新。不指定路径时,update 会使用 Manifest v2 中记录的 Recipe。阅读项目源文件后更新其片段,并在有帮助时与 show <id> 的结果进行比较。CLI 会在内存中重新构建并验证,然后发布一次。第一个位置参数是简短的制品 ID,而不是 Recipe 路径。旧版 Manifest v1 条目会自动迁移;只有在发布前需要检查或编辑生成的源文件时,才先运行 migrate <id>。409 版本冲突表示其他写入者先行发布;请检查当前版本,并且仅在确实要覆盖时使用 --force。--label 最多为 60 个 UTF-8 字节。

对于通过 Live 请求的更改,编辑 Recipe 后使用 node "$ARTIFACT_CLI" update <id> --live。此操作会原位替换当前提供的版本:v10 制品仍为 v10,之后普通的 update 会创建 v11。

build <recipe> --output <path> 会写入指定的本地预览;只有对 HTML Recipe 才添加 --standalone。list、show <id> [--v N] 和 delete <id> 涵盖常见的读取和清理操作。delete 会移除服务端制品及其本地清单条目。

检测过期工件(仅在有意更新时重新发布)

源文件的变更不会自行编辑或重新发布工件。在项目中首次执行 create 后,询问用户是否安装可选的 Claude Code Stop 钩子——不要默默安装。如果用户同意,运行 node "$ARTIFACT_CLI" install-hook;它会向 .claude/settings.json 添加一个 Stop 钩子,在一轮结束时提示差异。其他 Agent 框架应使用各自的钩子集成,或运行手动检查:

node "$ARTIFACT_CLI" status

对于报告为过期的每个工件,判断变更的文件是否影响其记录的范围:

  • 会影响 → 重新生成页面内容以反映项目的当前状态,然后运行 update。这会重新发布并刷新快照。 重新生成属于内容生成,因此如果框架提供独立任务,请使用该任务,参见上文“框架支持时隔离内容生成”——即使是通过 Stop 钩子自主做出此判断,而非用户直接提出要求,也同样如此。
  • 不会影响(例如,不会改变面向用户范围内行为的重构,或范围内已确定的设计方向)→ 运行 node "$ARTIFACT_CLI" ack <id>。这会离线推进快照基线——不会重新发布——因此同一项无关变更之后就不会在每一轮都被报告。 ack 只会修改清单,不属于内容生成,因此可以直接运行。不要任由工件保持过期:安装钩子后,它会在之后的每一轮反复提示,直到通过 update 或 ack 推进基线。
让特定工件加入自动循环

默认情况下,安装 Stop 钩子后,它会提示所有过期且受监控的工件——上述针对每个工件判断是重新生成还是运行 ack 的规则仍然适用,不变。如果用户希望钩子对大多数工件保持静默,只提示特定工件,请启用该工件的自动更新标志:

node "$ARTIFACT_CLI" auto-update <id> on

这不会改变你在工件被标记后决定如何处理它的方式——它只会改变Stop 钩子可以标记哪些工件:

  • 按工件单独启用,且完全隔离:它只切换一个清单条目的 autoUpdate 字段,从不读取或写入其他条目的状态。默认关闭——从未切换过的工件(或在此功能推出前创建的工件)都视为关闭,即使已过期,钩子也会对它们完全保持静默。
  • 普通的、由人手动运行的 node "$ARTIFACT_CLI" status(不带 --hook)不会受此标志筛选——它始终会报告所有过期且受监控的工件。 只有自主运行且无人参与的 Stop 钩子路径会缩小范围,仅检查已启用的工件。
  • 将其开启需要该工件已有写入令牌(若没有则会明确报错),并且如果 Stop 钩子尚未安装,会自动安装。与 create 提示安装钩子不同(它绝不会替你安装任何内容),运行 auto-update <id> on 即表示用户同意安装钩子——请直接执行,CLI 安装时会打印确认信息。
  • 将其关闭(node "$ARTIFACT_CLI" auto-update <id> off)会保留已安装的钩子,只是不再提及此工件。

密码保护

node "$ARTIFACT_CLI" create .artifacts/recipes.local/q3.recipe.json --password "..."

在 Recipe 中设置 security.encrypted: true 和 kebab-case 格式的 security.passwordCredential。加密的 Recipe 和片段必须使用私有的 .artifacts 源目录。

内容在本地加密(PBKDF2 600k + AES-256-GCM);服务器只存储密文,查看者在浏览器中解密。通过不同的渠道分享 URL 和密码。如果需要避免密码进入 Shell 历史记录或进程列表,优先使用命名环境变量或被 git 忽略的凭据文件,而不是命令行密码。CLI 会从 --password、对应的 OPEN_ARTIFACTS_PASSWORD_* 环境变量或被 git 忽略的凭据文件中读取命名凭据。密码不会进入 Recipe 或 Manifest。标题和 favicon 仍是明文服务元数据,因此请勿在其中放入敏感信息。

读取内容

原始内容仅位于 API 路径下 — GET <instance>/api/artifacts/<id>/raw。查看器路径 GET <instance>/a/<id> 提供的是渲染后的查看器页面(HTML),不是原始字节;/a/<id>/raw 不是有效路由,会返回 404。请勿混淆两者: /a/<id> = 浏览器渲染的页面,/api/artifacts/<id>/raw = 已发布的存储内容。

GET <instance>/api/artifacts/<id> 返回元数据和版本历史; GET <instance>/api/artifacts/<id>/raw 返回存储的内容 (旧版本使用 ?v=N)。对于未加密的 artifact,返回的就是页面本身(text/plain);对于加密的 artifact,则返回 JSON 密文封装 — 请改用 node "$ARTIFACT_CLI" show <id> [--v N] [--password ...],它会使用提供的或已存储的凭据在本地解密。查看器 URL 也接受 ?v=N。

评论

支持 Markdown