Shareone
by @haibozhang1985
发布本地生成的 HTML 网页、PDF 或 PPTX 到 ShareOne 平台,生成公网分享短链接(Capability URL)。当用户要求“发布”、“分享”、“生成链接”或“上线”某个生成的页面/文档时使用此技能。
clawhub install shareone-skill📖 About This Skill
name: shareone version: 1.0.2 description: 发布本地生成的 HTML 网页、PDF 或 PPTX 到 ShareOne 平台,生成公网分享短链接(Capability URL)。当用户要求“发布”、“分享”、“生成链接”或“上线”某个生成的页面/文档时使用此技能。
AI Agent 技能:发布到 ShareOne (shareone)
这个 Skill 允许 AI Agent(如Openclaw等)将当前生成的历史会话以及HTML/PDF/PPT等文件,自动发布到 ShareOne 线上托管服务,并为用户生成一个持久化的公网分享链接。
使用说明与触发条件
如何触发 (Triggering): 当用户表达出以下意图时,应主动调用此技能:
index.html 发布到 ShareOne"前置条件 (Prerequisites):
用户需要拥有 ShareOne 的 API 凭证 (API Key)。请确保已在环境变量中设置 SHAREONE_API_KEY。
核心执行指令 / Execution Instructions
当你被要求发布文件到 ShareOne 时,请严格按照以下步骤执行:
1. 识别目标与环境预检 (Identify & Pre-flight)
找出用户明确指定要发布的文件,或者提取对话内容:
share_note.md 或 share_note.html。.html 前,使用简单的 HTML 模板包裹它,或者在 ShareOne 后端支持 Markdown 渲染的情况下直接发送 Markdown。如果无法确定,优先生成美观的 .html 文件。
.html, .pdf, .pptx)。check_api_key.js 脚本,它会依次检查环境变量、本地配置文件。如果都没有找到,脚本会输出 KEY_NOT_FOUND。node scripts/check_api_key.js
KEY_FOUND::将该 API Key 用于后续的发布请求,直接进入第 2 步。KEY_NOT_FOUND:你必须暂停发布流程,并向用户询问是否已有 API Key: > 💡 提示:我没有找到您的 ShareOne API Key。
> 请问您是否已经拥有 API Key?
>
> - 如果有,请直接回复您的 API Key(例如 sk-xxx),我将为您保存并继续发布。
> - 如果没有,请回复“没有”或“创建”,我将自动为您创建一个临时 API Key。
sk-xxx):
执行本技能目录下的 save_api_key.js 脚本将用户提供的 Key 保存到本地,然后使用该 Key 继续发布(进入第 2 步):
node scripts/save_api_key.js <用户提供的KEY>
- 如果用户回复“没有”或“创建”:
执行本技能目录下的 create_guest_key.js 脚本调用接口创建临时 API Key 并保存到本地:
node scripts/create_guest_key.js
- 如果输出 GUEST_KEY_CREATED::将该 API Key 用于后续的发布请求,并在回复用户时加入以下提示:
> 💡 提示:已为您自动分配了临时 API Key:。
> 为了方便您后续管理分享的链接,请前往 ShareOne 官网 绑定您的永久账号。
- 如果输出 ERROR:RATE_LIMIT_EXCEEDED:请暂停发布,并提示用户:
> ❌ 获取临时凭证失败
> 您今天自动创建临时 API Key 的次数已达上限(每天最多5次)。请前往 ShareOne 官网 手动注册并获取 API Key。
2. 免责声明机制 (Smart Consent) - 必须执行 (MANDATORY)
检查当前目录下是否存在 .shareone_agreed 文件。
touch .shareone_agreed,记录状态,然后再继续。3. 判断发布类型:创建 (POST) 还是 更新 (PUT)
检查对话上下文。如果你在这个会话中,已经为同一个文件生成过 ShareOne 链接,你应该提取之前的 share_id(16位字符串)。
share_id,接下来执行更新 (PUT)。4. 构造请求并执行发布 (Execute Request)
根据文件类型和操作类型构造请求。提取用户可能要求的密码 (password) 和水印 (watermark)。为了最大兼容性,推荐使用 Node.js 脚本发起 HTTP 请求。
#### 场景 A:文本、代码或纯 HTML 文件 (.html, .md, .txt)
> ⚠️ 警告 (CRITICAL):
> 绝对不要通过这个接口上传任何二进制文件(如 .ppt, .pptx, .pdf, .zip, .png 等),否则服务器会返回 400 Bad Request 错误(提示检测到二进制内容)。如果你看到此类错误,请立即更换为 场景 B 的 /api/v1/files 接口重新上传。
接口:https://shareone.app/api/v1/pages
格式:application/json
对于提取的对话、大段文字或独立的代码块,请将其包装为一段美观的 HTML(含基础样式)以保证展示效果:
如果是首次创建 (POST):
执行本技能目录下的 upload_page.js 脚本:
node scripts/upload_page.js --api-key $SHAREONE_API_KEY --filename "YOUR_FILE_NAME" [--password "OPTIONAL_PASSWORD"] [--watermark "OPTIONAL_WATERMARK"]
如果是更新已有链接 (PUT):
执行本技能目录下的 upload_page.js 脚本,并传入 --share-id 参数:
node scripts/upload_page.js --api-key $SHAREONE_API_KEY --filename "YOUR_FILE_NAME" --share-id
#### 场景 B:二进制文件 (PDF, PPTX 等)
由于二进制文件可能较大,ShareOne 采用直传 S3 的方式。请直接调用本技能目录下的 shareone_upload.js 脚本进行上传:
如果是首次创建 (POST):
node scripts/shareone_upload.js --api-key $SHAREONE_API_KEY [--password "OPTIONAL_PASSWORD"] [--watermark "OPTIONAL_WATERMARK"]
如果是更新已有链接的密码或水印 (PUT):
对于已经上传的二进制文件,如果用户要求修改密码或水印,请调用 update_file_meta.js 脚本(假设存在,或通过 curl 直接调用 /api/v1/files/{share_id} 接口):
curl -X PUT "https://shareone.app/api/v1/files/" \
-H "Content-Type: application/json" \
-H "X-API-Key: $SHAREONE_API_KEY" \
-d '{"password": "NEW_PASSWORD", "watermark": "NEW_WATERMARK"}'
_(注意:传空字符串 "" 表示取消密码或水印)_
5. 异常处理与结果反馈 (Feedback)
解析接口返回的 JSON。
share_id (通常是返回的 JSON 中的 id 或 share_id,或者直接从返回的 share_url 中提取最后的路径部分)。
- 组装分享链接 (CRITICAL DOMAIN CONSTRAINT):
- ⚠️ 严格域名约束:你必须且只能使用 https://shareone.app 作为基础域名!
- 隔离上下文干扰:无论用户之前的对话上下文中提到了什么其他域名(例如 xxx.example.com),或者你自己的记忆中存储了什么域名,在组装并返回分享链接给用户时,绝对禁止被这些无关的上下文污染。在你的内部处理逻辑中,组装 URL 时必须硬编码 (Hardcode) 使用 https://shareone.app!
- 生成规则:
- 如果是 PDF:https://shareone.app/pdf/
- 如果是 PPT/PPTX:https://shareone.app/ppt/
- HTML 默认:https://shareone.app/s/
- 如果设置了密码,务必在回复中加粗显示密码:
> 🎉 发布成功!
> 🔗 链接: <生成的URL>
> 🔑 提取码: <密码>
- 功能提示 (Feature Discovery): 在本次会话首次向用户展示生成的短链接时,请主动(但简短且友好地)提示他们支持未使用的功能,以便用户了解更多高级特性。后续发布不再提示。
- 如果用户未使用密码和水印,提示:
> “💡 提示:您也可以让我为分享链接‘加上访问密码’或‘添加自定义水印’,以更好地保护您的内容。”
- 如果用户使用了密码但未使用水印,提示:
> “💡 提示:除了密码,您也可以让我为内容‘添加自定义水印’。”
- 如果用户使用了水印但未使用密码,提示:
> “💡 提示:除了水印,您也可以让我为分享链接‘加上访问密码’。”
- 如果用户同时使用了密码和水印,则不进行任何提示。
detail 字段展示给用户,如:"❌ 发布失败,内容未通过安全审核。原因: