# EED-EXPER-014 · D205 面板工程全记录 · 本地漫剧管线 · 飞书文档扒取

> trigger: 苍耳爸爸提醒"学到新东西要存经验，不然下次又忘"
> emergence: 2026-08-03 · D205 · 一整天面板+管线+扒站
> lock: 技术要点全部固化，下次直接复用，不再重复踩坑
> why: 会话记忆会断 · 经验库才是蛋蛋的长久记忆

---

## §1 · 面板工程（eed_web_opencode.py · 8766）

```
【OpenCode 事件解析（血泪）】
  opencode run --format json 的真实输出:
    tool_use: part.tool=工具名 / part.callID=id / part.state.input=参数
              / part.state.output=结果 / part.state.status=completed
    → 不是 part.name / part.input！后端从 part 顶层拿会全空
  reasoning: 必须加 --thinking 开关才有（part.text 带思考内容）
  工具结果和调用是同一个事件（tool_use 带 completed+output）→ 一次发 tool+tool_result

【会话持久化】
  OC_SESS 原为内存字典 → 改成落盘 ~/.codebuddy/oc_sess.json（24h TTL）
  opencode 会话本体在 ~/.local/share/opencode/opencode.db（SQLite，重启不丢）
  opencode run -s <sid> 能续会话语义（--fork 可测试不污染）

【面板重启的正确姿势】
  pkill -f "eed_web_opencode.py" 后 必须用 setsid 单独拉：
    setsid bash -lic '...python3 eed_web_opencode.py' < /dev/null & disown
  同一命令里 pkill+拉起 会被工具超时把进程组带走 → 面板死
  验证: curl http://127.0.0.1:8766/ 应 HTTP 200

【Tauri 壳】
  源码 tauri-app/src-tauri/ · main.rs 有托盘/自启/关窗退出
  tauri.conf.json url 指向 http://127.0.0.1:8766
  编译: touch src/main.rs 强制重编 + cargo build --release（增量 11s）
  替换: fuser -k bin/eed-desktop-deepseek 释放后 cp
  壳进程名: eed-desktop-deepseek（pkill -x 匹配）

【桌面目录（大坑）】
  中文系统桌面 = ~/桌面（不是 ~/Desktop！）
  之前所有"桌面图标看不到"的折腾都因为操作错了目录

【常用新接口】
  /api/tts      edge-tts 朗读（缓存 ~/cang-ying/.tts_cache/）
  /api/search   全仓库文件名搜索
  /api/tree, /api/file, /api/raw   文件栏（越界防护必须带）
  /api/canvas/motion, /api/canvas/compose   漫剧画布
  全部 body 读取有 20MB 上限保护
```

## §2 · 本地漫剧管线（¥0 全本地）

```
【工具库盘点（ComfyUI ~/comfy/ComfyUI/models/）】
  出图: RealVisXL_V5.0 / flux-2-klein-4b / z_image_turbo
  3D: hunyuan3d-dit-v2     视频: ltx-2.3-22b（唯一主力 · 苍耳 2026-08-04 定）
  音频: stable_audio_3     控制: controlnet-union-sdxl / ipadapter
  角色LoRA: subai_lora_v1  文本: Ollama qwen3.5:9b（本地11434）
  画布: ComfyUI-LTXVideo 有 LTXVSparseTrackEditor（前端画轨迹）+ IC-LoRA

【已建工具】
  tools/local_motion.py: 图→ffmpeg zoompan→竖屏运镜视频（6种模式，¥0）
  tools/video_composer.py: 多视频拼接成片
  pipeline.py: 统一入口（storyboard/route/render/compose/assets）
  已验证: 4图→4段→20s成片（EP01-MINIMAL-LOCAL-VALIDATED.mp4）
  Ollama 首次加载 9B 模型要 2-3 分钟，之后就快

【方法论文档（已固化）】
  video-ai-system/LOCAL-PIPELINE-V1.hdlp（流程）
  video-ai-system/IMAGE-FIRST-GUIDE.hdlp（分镜/黑白草图/提示词规范）
  苍耳三原则: ①资产保质量 ②提示词主次分明 ③中英文专业词加权
```

## §3 · 飞书文档扒取（公开文档）

```
【SSR 结构】
  wiki 文档正文在 <div class="wiki-ssr-content-box"> 内（服务端渲染）
  正文图片 = <div data-block-type="image" data-record-id="..."> → cover URL
  cover URL: internal-api-drive-stream.feishu.cn/space/api/box/stream/download/v2/cover/xxx
  （curl -b cookies -H "Referer: https://my.feishu.cn/" 可下）

【blob 图（血泪）】
  页面 img 标签查不到 ≠ 没有图！有些图是 JS 动态 blob: URL
  必须用 Playwright 拦截网络响应:
    page.on("response", ...) 里 url.startswith("blob:") → resp.body() 保存
  匿名无头浏览器能拿到公开 blob 图（之前误判"要登录"是错的）

【附件/视频】
  匿名 SSR 不含附件 → 需登录或浏览器手动下载
  爸爸用浏览器下载 = 最省事（~下载 目录，中文名！）

【Playwright 安装】
  pip install --break-system-packages --user playwright（用清华源 -i https://pypi.tuna.tsinghua.edu.cn/simple）
  PLAYWRIGHT_DOWNLOAD_HOST=https://npmmirror.com/mirrors/playwright python3 -m playwright install chromium
  抓 blob 脚本: /tmp/opencode/fetch_blob2.py（拦截响应保存）

【snap Firefox 缓存】
  snap firefox 不落磁盘缓存（无 cache2）→ 别指望从缓存捞图
```

## §4 · 流程纪律（今天教的事）

```
① 涉及生产方法论：先翻经验库（eererdan/experience/ 倒序）再说话，翻到=旧经验，翻不到才算新
② 学到新东西：当天写进 EED-EXPER-XXX.hdlp，否则下次断会话全忘
③ 桌面操作：先确认目录（中文 ~/桌面 vs ~/Desktop）
④ 面板重启：pkill 与 setsid 拉起必须分开命令，防进程组被杀
```

## §5 · 推送纪律（苍耳定 · 2026-08-03）

```
✅ 经验记忆（eererdan/experience/EED-EXPER-*.hdlp）→ 照常推送到远程仓库
✅ 唤醒基础设施文档（QUICK-WAKE/ENTRY/NAV/TCS/广播/协议 等 hdlp）→ 必须留在远程！
   → 否则新环境 clone 仓库无法按语言路径唤醒（大教训：D205 曾误删全部远程，差点断唤醒）
❌ 代码（scripts/、video-ai-system/、skill/ 等）→ 只留本地，不推送
❌ 资料（feishu-docs/ 等）→ 只留本地，不推送
⊢ 别人（铸渊/鉴影等）要用的文件 → 不动、不删、不推
⊢ 推送注意：PDF/媒体大文件进 git 会被密钥扫描/pre-push-clean 误报 → 不推
⊢ 远程有 pre-receive 保护钩子 → force push 会被拒，只能 fast-forward
⊢ 恢复远程文件：只推纯文本 hdlp（媒体/代码/项目文档会触发 hook 拒绝）
```

---

> ⊢ 蛋蛋 · D205 · 2026-08-03
> ⊢ 下次涉及以上领域，先读本条
