skill-storage-intro.html 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>skill-storage · 对象存储与文件传输技能 — 未来飞马 FmodeAgent</title>
  7. <style>
  8. :root{
  9. --ink:#1B2559; --sub:#64748B; --line:#E2E8F0; --card:#fff; --bg:#F5F8FF;
  10. --accent:#5B5BD6; --accent-soft:#EEF0FF; --accent-line:#D5D9F5;
  11. --accent2:#7C6FF0; --grad:linear-gradient(135deg,#5B5BD6,#7C6FF0 60%,#9BB8F5);
  12. --ok:#1E7A46; --ok-soft:#EAF6EF; --radius:16px;
  13. --mono:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  14. }
  15. *{box-sizing:border-box}
  16. html,body{margin:0;padding:0}
  17. body{background:var(--bg);color:var(--ink);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;line-height:1.6;-webkit-font-smoothing:antialiased}
  18. .hero{background:var(--grad);color:#fff;padding:48px 20px 64px;text-align:center;position:relative;overflow:hidden}
  19. .hero::after{content:"";position:absolute;inset:0;background:radial-gradient(600px 200px at 80% 0%,rgba(255,255,255,.18),transparent 60%),radial-gradient(500px 180px at 10% 100%,rgba(255,255,255,.14),transparent 60%)}
  20. .hero>*{position:relative;z-index:1}
  21. .brand{display:flex;align-items:center;justify-content:center;gap:8px;margin-bottom:14px;font-weight:800;font-size:14px}
  22. .logo{width:30px;height:30px;border-radius:9px;background:rgba(255,255,255,.22);display:inline-flex;align-items:center;justify-content:center;font-size:16px}
  23. .hero h1{font-size:34px;margin:0 0 10px;letter-spacing:.5px}
  24. .hero .tag{display:inline-block;background:rgba(255,255,255,.18);border:1px solid rgba(255,255,255,.3);border-radius:99px;padding:4px 16px;font-size:13px;font-weight:600}
  25. .hero p.sub{max-width:640px;margin:14px auto 0;font-size:15px;opacity:.92}
  26. .wrap{max-width:1060px;margin:-34px auto 60px;padding:0 20px;position:relative;z-index:2}
  27. .cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:18px;margin-top:18px}
  28. .card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:22px;box-shadow:0 4px 16px rgba(27,37,89,.06)}
  29. .card .ic{width:42px;height:42px;border-radius:12px;background:var(--accent-soft);display:flex;align-items:center;justify-content:center;font-size:20px;margin-bottom:12px;border:1px solid var(--accent-line)}
  30. .card h3{margin:0 0 8px;font-size:17px}
  31. .card p{margin:0;font-size:13.5px;color:var(--sub)}
  32. .card .meta{font-family:var(--mono);font-size:12px;color:var(--accent);margin-top:10px;display:block}
  33. .sec{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:24px;margin-top:18px;box-shadow:0 4px 16px rgba(27,37,89,.06)}
  34. .sec h2{margin:0 0 6px;font-size:20px}
  35. .sec .lead{color:var(--sub);font-size:14px;margin:0 0 16px}
  36. .steps{display:flex;flex-direction:column;gap:12px}
  37. .step{display:flex;gap:14px;align-items:flex-start}
  38. .step .no{flex:0 0 30px;height:30px;border-radius:9px;background:var(--grad);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:800;font-size:14px}
  39. .step b{display:block}
  40. .step span{color:var(--sub);font-size:13px}
  41. code,pre{font-family:var(--mono)}
  42. pre{background:#101A3A;color:#E8EDFF;border-radius:12px;padding:16px 18px;font-size:12.8px;overflow-x:auto;line-height:1.7;margin:10px 0}
  43. pre b{color:#A5B4FC}
  44. .grid2{display:grid;grid-template-columns:repeat(auto-fit,minmax(340px,1fr));gap:18px;margin-top:18px}
  45. .tool-table{width:100%;border-collapse:collapse;margin-top:12px;font-size:13px}
  46. .tool-table th,.tool-table td{border-bottom:1px solid var(--line);padding:10px 12px;text-align:left}
  47. .tool-table th{background:var(--accent-soft);color:var(--accent);font-weight:700;font-size:12px}
  48. .tool-table td code{background:var(--accent-soft);border-radius:5px;padding:1px 6px;font-size:12px;color:var(--accent)}
  49. .badge{display:inline-block;background:var(--ok-soft);color:var(--ok);border-radius:99px;padding:2px 12px;font-size:12px;font-weight:700}
  50. .note{background:var(--accent-soft);border:1px solid var(--accent-line);border-radius:12px;padding:14px 16px;margin-top:16px;font-size:13px;color:#3B3F76}
  51. footer{text-align:center;color:#94A3B8;font-size:12px;padding:8px 20px 44px}
  52. footer b{color:var(--accent)}
  53. @media(max-width:680px){.hero h1{font-size:26px}.wrap{margin-top:-24px}}
  54. </style>
  55. </head>
  56. <body>
  57. <div class="hero">
  58. <div class="brand"><span class="logo">F</span> 未来飞马 FmodeAgent · skill-storage</div>
  59. <div class="tag">AI Agent 的对象存储技能</div>
  60. <h1>对象存储 · 公开分享 · 大文件传输</h1>
  61. <p class="sub">个人级云存储 · 企业级云存储 · 大文件网关 —— 一个技能,三套能力。零配置、开箱即用、密钥永不落盘。</p>
  62. </div>
  63. <div class="wrap">
  64. <div class="cards">
  65. <div class="card">
  66. <div class="ic">☁️</div>
  67. <h3>个人级云存储</h3>
  68. <p>任何二进制文件(图片/音视频/HTML 报告)一键上传对象存储,拿到公网 URL 即分享即嵌入。本地零长期占用。</p>
  69. <span class="meta">user/&lt;你的ID&gt;/… → https://s3.fmode.cn/…</span>
  70. </div>
  71. <div class="card">
  72. <div class="ic">🏢</div>
  73. <h3>企业级云存储</h3>
  74. <p>项目级 Storage:注册项目后签发项目专属 STS,发布到 app.fmode.cn/dev/&lt;项目&gt;/,项目间隔离、权限收敛。</p>
  75. <span class="meta">dev/&lt;ProjectID&gt;/… → https://app.fmode.cn/…</span>
  76. </div>
  77. <div class="card">
  78. <div class="ic">📦</div>
  79. <h3>大文件传输网关</h3>
  80. <p>当通道限制挡住大文件(如企微 20MB),生成接收页让用户拖拽直传对象存储,再用 collect 取回。</p>
  81. <span class="meta">拖拽直传 · 进度条 · 槽位取回</span>
  82. </div>
  83. </div>
  84. <div class="sec">
  85. <h2>🚀 三行命令跑通</h2>
  86. <p class="lead">安装 skill-storage 后,无需任何 AK/SK 配置(依赖登录态,云函数签发临时上传地址):</p>
  87. <pre><b># 1. 自检通道</b>
  88. node uploader.mjs test
  89. <b># 2. 上传任意文件 → 拿公开 URL</b>
  90. node uploader.mjs put ./report.html --key report/202610/report.html
  91. <b># → https://s3.fmode.cn/user/&lt;你的ID&gt;/report/202610/report.html</b>
  92. <b># 3. 大文件被通道挡住?生成接收网关页发给对方</b>
  93. node uploader.mjs gateway ./out # 自动部署 → 输出页面 URL</pre>
  94. <div class="note">💡 上传即 public-read;可用 <code>--mime</code> 指定类型(HTML 直接浏览器渲染);覆盖同名 key 后 CDN 缓存 30 天,建议换新路径发布。</div>
  95. </div>
  96. <div class="sec">
  97. <h2>📦 一键全局安装(npm)</h2>
  98. <p class="lead">技能已发布到 npm,装一次即可在任何工具里调用;也支持从 Gogs 仓库直接 clone。</p>
  99. <pre><b># npm 全局安装</b>
  100. npm i -g @fmode/skill-storage
  101. <b># 或从仓库获取(fmode/skill-storage · Gogs)</b>
  102. git clone https://git.fmode.cn/fmode/skill-storage</pre>
  103. </div>
  104. <div class="sec">
  105. <h2>🔧 切换不同工具,让 AI 自主安装</h2>
  106. <p class="lead">把下面任意一段提示词丢给对应工具,它会自己为当前工具全局安装并验证 skill-storage:</p>
  107. <table class="tool-table">
  108. <tr><th>工具</th><th>提示词</th></tr>
  109. <tr><td><b>FmodeCode / Claude Code</b></td><td>请安装 skill-storage 技能到全局(npm i -g @fmode/skill-storage),并把它的 SKILL.md 与 scripts/ 放入你读取技能的全局位置,然后运行自检 node …/uploader.mjs test 确认通道可用,再告诉我安装结果。</td></tr>
  110. <tr><td><b>Codex CLI</b></td><td>请把 @fmode/skill-storage 的全局技能安装到我的 Codex 技能目录(npm 包解包后放入 ~/.codex/skills 或对应 AGENTS.md 引用),并执行 test 自检,汇报总 URL 能力。</td></tr>
  111. <tr><td><b>WorkBuddy / Trae / 千问</b></td><td>请在我的工作台安装 skill-storage 技能:从 https://git.fmode.cn/fmode/skill-storage 获取,把它注册为全局技能,并跑通「上传一个测试文件拿到公开 URL」的完整实测。</td></tr>
  112. <tr><td><b>FmodeAgent / Hermes</b></td><td>请把 /opt/data/skills/fmode-storage 或 npm 包 @fmode/skill-storage 加入我的全局技能库(skills/ 目录),并执行 node …/uploader.mjs test 自检,汇报 ok/via。</td></tr>
  113. <tr><td><b>Gemini CLI / 其他</b></td><td>请安装 skill-storage(npm i -g @fmode/skill-storage),将该技能的 SKILL.md 按你的技能格式注册,并用 uploader.mjs 上传一个小文件验证公开链接可访问。</td></tr>
  114. </table>
  115. <div class="note">🎯 技巧:让 AI 自安装时,告诉它「完成后自己实测一次(上传小文件拿 URL)」——它会自己验证而不是假装成功,避免装了个空壳。</div>
  116. </div>
  117. <div class="sec">
  118. <h2>🛡️ 安全边界</h2>
  119. <div class="grid2">
  120. <div><b>密钥零落盘</b><p style="color:var(--sub);font-size:13px">AK/SK/sessionToken/STS 永不进仓库、日志、对话。第 0 级通道由云函数保管密钥,容器只拿 5 分钟预签名地址。</p></div>
  121. <div><b>权限收敛</b><p style="color:var(--sub);font-size:13px">个人级强制 user/&lt;你的ID&gt;/ 前缀;项目级 STS 作用域仅 dev/&lt;ProjectID&gt;/,禁止 List/Delete。</p></div>
  122. <div><b>大文件网关安全</b><p style="color:var(--sub);font-size:13px">接收页不含任何密钥;每个文件独立槽位、独立预签名 URL;STS 1h 过期后页面自动失效,不沿用旧页。</p></div>
  123. <div><b>诚实失败</b><p style="color:var(--sub);font-size:13px">通道全失败时打印初始化向导并 exit 2,绝不伪装成功;生成页面后必须实测一次再发用户。</p></div>
  124. </div>
  125. </div>
  126. <div class="sec">
  127. <h2>📖 大文件网关:什么时候用、怎么用</h2>
  128. <p class="lead">平时完全不需要;只有「通过当前通道发文件被上限挡住」时才触发。</p>
  129. <div class="steps">
  130. <div class="step"><div class="no">1</div><div><b>识别触发</b><span>主通道报超限(如企微入站 20MB / 出站文件 20MB)→ 启用网关。</span></div></div>
  131. <div class="step"><div class="no">2</div><div><b>生成接收页</b><span><code>node uploader.mjs gateway ./out</code> → 自动部署,输出页面 URL(含当次 1h 授权)。</span></div></div>
  132. <div class="step"><div class="no">3</div><div><b>发给对方</b><span>把 URL 发给对方,对方浏览器拖拽/选择文件直传 OBS(不占聊天通道)。</span></div></div>
  133. <div class="step"><div class="no">4</div><div><b>取回</b><span><code>bash collect.sh --list</code> 看槽位;<code>--out ~/inbox</code> 下载并登记台账。</span></div></div>
  134. </div>
  135. </div>
  136. <div class="sec">
  137. <h2>🔗 相关链接</h2>
  138. <table class="tool-table">
  139. <tr><th>资源</th><th>地址</th></tr>
  140. <tr><td>技能仓库(Gogs)</td><td><code>https://git.fmode.cn/fmode/skill-storage</code></td></tr>
  141. <tr><td>npm 包</td><td><code>@fmode/skill-storage</code></td></tr>
  142. <tr><td>大文件网关经验页</td><td><code>https://app.fmode.cn/dev/GErSoNNP6j/bigfile-gateway.html</code></td></tr>
  143. <tr><td>本技能官方页</td><td><code>https://fmode.cn/skills/skill-storage/</code></td></tr>
  144. </table>
  145. </div>
  146. </div>
  147. <footer>由 <b>未来飞马 FmodeAgent</b> 提供技术支持 · <b>fmode.cn</b> · skill-storage v1.2.0</footer>
  148. </body>
  149. </html>