Skip to content

发布与更新 Artifact

/publish 会上传自包含 HTML Artifact 并返回永久分享 URL。它是 HiPMMCode 交互式会话中的 slash command:先启动 HiPMMCode,再在输入框执行,而不是调用 shell 子命令。

配置 Artifact 托管服务

~/.hipmmcode/config.json 中加入 artifactHost

json
{
  "artifactHost": {
    "origin": "https://www.hipmmai.com",
    "apiKey": "your-api-key",
    "public": false
  }
}

API Key 需要 artifact 权限。可以通过环境变量仅覆盖配置中的 Key:

bash
export HIPMMCODE_ARTIFACT_KEY="your-api-key"

artifactHost.origin 必须保留在配置文件中;环境变量只覆盖 API Key。

使用自然语言操作

常见的 Artifact 全生命周期操作不需要记忆 /publish 参数。在 HiPMMCode 交互式会话中,可以直接提出类似请求:

text
把 README.md 发布为公开 Artifact,标题设为“项目介绍”。
把 ownership-plan.md 做成专业信息图并发布为 Artifact。
用 dashboard.html 更新 https://example.com/a/<hash>,并保留原链接。
列出我最近的 10 个 Artifact。
把 <hash> 对应的 Artifact 改为私有。
把 <hash> 对应的 Artifact 改为公开且可被发现。
删除 <hash> 对应的 Artifact。

HiPMMCode 会直接调用一等 Artifact 工具的 publishupdatelistset_visibilitydelete 动作,不会拼接或输入 /publish 命令,也不会启动嵌套的 HiPMMCode 进程。删除不可恢复,仍然必须获得明确确认;已批准其他 Artifact 动作并不会预先授权后续删除。

自然语言路径在发布和更新时接受显式源文件或内联 Markdown/HTML/SVG;专业信息图、视觉对比、股权结构、指标看板和可视化计划等请求会选择 Visualizer 渲染器。首次发布成功后,也可以只指定 hash,让 HiPMMCode 从固定的本地受管源码更新。它还没有覆盖每一种对话来源选择方式:裸 /publish 发布最后一条助手回复、--report 生成对话报告以及 --all 发布完整对话转写,仍由 slash command 提供。对于需要明确、可复现命令语法或这些对话来源的用户,/publish 会继续保留。

命令语法

text
/publish [--file PATH|--report|--all]
         [--template morning-brief|plan|dataviz|visualizer|--enhance]
         [--public] [--discoverable]
         [--title TITLE]
         [--update HASH]

命令会在读文件或上传之前拒绝未知、重复及互相冲突的参数。

选择内容来源

text
# 最后一条助手回复
/publish

# 显式指定文件
/publish --file document.md
/publish --file dashboard.html
/publish --file ownership.svg

# 当前模型整理的对话 Markdown 报告
/publish --report

# 完整对话的 Markdown 转写
/publish --all

/publish 始终表示最后一条助手回复,不会扫描回复并猜测文件路径。发布文件必须明确使用 --file;相对路径从当前会话工作目录解析。

--file--report--all 互斥。如果报告生成不可用,--report 会回退到最后一条助手回复。

显式文件仅支持以下扩展名(大小写不敏感):

  • .md.markdown:按 Markdown 渲染;
  • .html.htm:作为完整 HTML 文档使用;
  • .svg:校验后包装为响应式 Visualizer Artifact。

其他文件类型会被拒绝。源内容和渲染后的 HTML 都不得超过 16 MiB,托管服务还会再次校验最终存储页面。

本地受管源码与远端页面

一次成功发布会形成同一个 Artifact 的两层表示:

  • 本地受管源码保存在 ~/.hipmmcode/artifacts/<origin-id>/<hash>/source.mdsource.htmlsource.svg,用于后续编辑和更新;
  • 远端保存由该源码渲染出的 HTML,并通过稳定的 /a/<hash> URL 访问;支持共享运行库的托管端会安全外置完全匹配的大型运行库。

从桌面或其他任意位置发布文件时,HiPMMCode 会在远端成功后复制一份到受管目录,不会移动或删除原文件。此后裸 /publish --update <hash> 和自然语言“更新这个 Artifact”默认读取受管副本;再次显式指定 --file 才会从新文件重新导入。列表会返回本地路径及 currentmodifiedmissingdeleted 等状态。远端删除不会删除本地源码,便于恢复或重新发布。

托管平台按账户隔离远端内容:数据库元数据绑定发布者 userId,HTML 位于 {UPLOAD_DIR}/{userId}/artifacts/{hash}.html。列出、更新、修改可见性和删除都必须以原发布者身份认证;公开短链接只通过不可猜测的 hash 读取对应文件。共享交互运行库是全站只读资源,不包含任何用户正文。

标题与可见性

text
/publish --title "API 参考"
/publish --public --title "团队状态"
/publish --discoverable --title "季度指标"

省略 --title 时,HiPMMCode 会打开交互式选择器,提供模型建议和派生的默认标题。

  • 默认是 private:拥有分享 URL 的人可以打开,但不会公开列出。
  • --public 会把 Artifact 列入发布者自己的公开画廊。
  • --discoverable 隐含 public,并提交审核;审核通过后才可进入全局探索流。
  • artifactHost.public: true 会让新 Artifact 默认 public。

模板与 Visualizer

静态模板只适用于 Markdown;visualizer 是独立的信息图渲染器,可用于 Markdown、完整 HTML 和独立 SVG:

text
/publish --template morning-brief
/publish --file design.md --template plan --public
/publish --report --template dataviz --discoverable
/publish --file ownership-plan.md --template visualizer
/publish --file dashboard.html --template visualizer
/publish --file ownership.svg

渲染模式包括 morning-briefplandatavizvisualizer。Visualizer 会让当前模型生成带对比卡、分段比例条、指标卡、响应式布局和内嵌 SVG 的专业自包含信息图。Markdown 生成失败或未通过校验时,HiPMMCode 会提示原因并发布确定性的 DataViz 回退版,同时为后续更新保留 Visualizer 模式。

独立 SVG 会自动选择 Visualizer,必须只有一个 <svg> 根节点、具备有效 viewBox 且不引用外部资源;无效 SVG 不会上传。完整 HTML 选择 Visualizer 时仍由作者控制,只补充 Visualizer 标记和现有本地运行时支持。

AI 增强 Artifact

--enhance 让当前模型把 Markdown 生成带内联 CSS 和可选内联 JavaScript 的完整精美文档:

text
/publish --file product.md --enhance --public

它仅适用于 Markdown,并与 --template 互斥。AI 增强最多接受 120,000 个 Markdown 字符,生成文档还会接受完整性、大小、远程资源和网络 API 校验。超过增强输入上限、生成不可用或校验失败时,HiPMMCode 会提示原因,并回退标准 Markdown 渲染器。生成期间按 Ctrl+C 会取消整次发布,不会上传回退页面。

交互运行时与托管体积

本地预览和导出的 HTML 不依赖 CDN,并保持完整自包含。标准 Markdown 外壳会内联本地 highlight.js;模板、直接 HTML 和增强 HTML 在出现 language-* 代码块时补充它。其他本地运行时按需加入:

  • Markdown 有 mermaid fenced block 时使用 Mermaid;
  • 页面声明 data-chart-runtime JSON 规格时使用 Chart.js。

Chart.js 适配器读取一个 #primary-chart 容器和 JSON script,例如:

html
<div id="primary-chart"></div>
<script type="application/json" data-chart-runtime>
{
  "type": "line",
  "series": [
    {"name": "Requests", "points": [["Mon", 12], ["Tue", 18]]}
  ]
}
</script>

标准 Markdown、模板、直接 HTML 和成功增强的 HTML 都使用同一套运行时注入逻辑。直接 HTML 应保持自包含;托管端 CSP 会阻止第三方脚本、样式、frame 和网络请求。

在本地自包含文件或旧托管端中,这些运行时会直接计入 Artifact 大小:Mermaid 约 3.16 MiB,highlight.js 约 0.94 MiB,Chart.js 约 0.20 MiB。因此旧页面带 Mermaid 时常见约 3.2 MiB,同时含受支持语言代码块时约 4.1 MiB。这不是正文重复。

支持 hipmmcode-artifact-runtime-v1 的托管端会把完全匹配的运行库外置为同源、内容寻址且带 SHA-256 SRI 的只读资源。新发布页面本身通常降到正文实际大小;三个运行库全站各保存一份并长期缓存,Brotli 后分别约为 669 KiB、239 KiB 和 60 KiB。旧托管端、协商失败或未知运行库会安全回退到原始自包含 HTML。

更新现有 Artifact

/a/<hash> 末尾取得 hash,再发布替换内容:

text
# 使用该 hash 的本地受管源码
/publish --update <hash>

# 显式 HTML 和新标题
/publish --update <hash> --file dashboard.html --title "Dashboard v2"

# 其他有效 Markdown 工作流
/publish --update <hash> --report --template plan
/publish --update <hash> --all --enhance

--update 支持 --file--report--all--template--enhance--title。不指定来源时必须已有本地受管源码;HiPMMCode 不会用无关的最后一条助手回复覆盖现有 Artifact。只有所有者可以更新;更新会替换内容并可同步标题,但保留 hash、URL 和原 public/discoverable 状态。因此,带 --update 时会拒绝 --public--discoverable

托管安全与缓存

Artifact 响应使用严格 Content Security Policy 和 sandbox。页面仍能运行自包含的内联脚本和样式,但外部连接、表单、嵌套 frame、对象加载以及平台同源状态访问会被阻止。托管端还发送 X-Content-Type-Options: nosniffReferrer-Policy: no-referrer

响应使用 Cache-Control: private, no-cache, must-revalidate 和基于内容的 ETag。客户端会重新验证而不是长期保留不可变副本;条件请求匹配时返回 304,更新内容会改变 ETag 但不会改变 URL。

常见错误

  • Artifact host not configured:在 ~/.hipmmcode/config.json 配置 artifactHost.origin 和 API Key,或通过 HIPMMCODE_ARTIFACT_KEY 提供 Key。
  • Unsupported artifact file type--file 只可使用 .md.markdown.html.htm.svg
  • Artifact source is empty:先完成一条助手回复,或选择非空显式来源。
  • Artifact too large:减少内嵌内容,确保源和最终文档都不超过 16 MiB。
  • 更新返回 404/403:检查 URL hash,并使用原发布者所属的 API Key。