Files
admin 856e632807 baseline: dsh 工作区基线快照(2026-09-10,全新历史起点)
本提交为 dsh_mcn_workshop 仓库的首个提交(旧仓 dsh_MCNProject 已停用),
完整固化 C:/Users/Administrator/.dsh 当前磁盘状态。

1) 临时数据清理:移出 sessions/(81M)、logs/、skill-backup-20260906/(14M)、
   scripts/__pycache__、storages/workspace.json.bak —— 合计 94M(.dsh 162M → 68M)
2) 凭据脱敏:.credentials.yaml(含明文 DEEPSEEK_API_KEY)移出 git 跟踪并加入
   .gitignore;mcn-data-insight/scripts/setup_redfox_key.py 中真实 key 示例改为占位符
3) .gitignore 增补 logs/、skill-backup-*/ 规则
4) 技能结构以当前磁盘状态为准:skills/ = mcn-short-video / impeccable / taste-skill /
   dsh-multi-user-migration;旧技能目录(mcn-dou-analysis、storyboard-prompt、
   short-video-script、browser-harness、mcn-data-insight)与
   profiles/web/node_modules/dsh-vision-router 本地已不存在,本提交记为删除
2026-09-10 22:31:45 +08:00

3.1 KiB
Raw Permalink Blame History

dsh-plugin-mcn

MCN 短视频插件:在 DSH Web 左侧面板添加「MCN短视频」导航按钮, 点击进入抖音账号列表页面(数据来自 MCP 服务,本地 SQLite 缓存)。

参考实现:deepseek-plugin-store

功能

  • 左侧边栏底部新增「MCN短视频」按钮(图标 + 文字,窄栏模式显示图标)
  • 点击进入抖音账号列表页(非 iframe,内部 React 页面)
  • 账号数据:从 MCP list_hot_accounts 获取,首次自动拉取存入本地 SQLite(~/.dsh/mcn-plugin.db)
  • 分页:每页 20 条,上一页/下一页
  • 排序:默认按序号(id)升序,点击表头可切换排序(序号/账号名/赛道)
  • 搜索:按账号名 / 内容 / 赛道模糊搜索
  • 筛选:按赛道下拉筛选
  • 更新:点击弹窗确认后,从 MCP 重新拉取并覆盖本地缓存
  • 页面左上角「← 返回」按钮;URL 路由 /mcn

架构

客户端(React,client.js)
   │  fetch /mcn/api/*
宿主端(Node,index.js)
   ├─ 本地 SQLite(node:sqlite,Node 24 内置,~/.dsh/mcn-plugin.db)
   ├─ MCP stdio 客户端(spawn npx -y myai-mcp → list_hot_accounts)
   └─ HTTP 路由:/mcn/api/accounts|tracks|refresh|status

数据流

首次访问 /mcn 页面
  → GET /mcn/api/accounts → 宿主端查 SQLite
  → 空 → 自动调 MCP list_hot_accounts → 写入 SQLite → 返回
  → 有 → 直接返回缓存
点击「更新」(弹窗确认)
  → POST /mcn/api/refresh → 调 MCP → 覆盖 SQLite → 返回新数量

安装(本地开发)

dsh plugin --profile web add file:D:/dshworkspace/plugin_package/dsh-plugin-mcn

或通过 patch 直接挂载:

# cordis.patch.yml(profile 层)
- insert:
    - id: mcn-nav
      name: '/绝对路径/dsh-plugin-mcn/lib/index.js'

结构

dsh-plugin-mcn/
├── package.json       ← dsh.bundle 声明 + client 入口
├── cordis.patch.yml   ← 挂载条目
├── lib/
│   ├── index.js       ← 宿主端(SQLite + MCP 拉取 + HTTP 路由)
│   └── client.js      ← 客户端 bundle(侧边栏按钮 + 账号列表页)
└── README.md

API

路由 方法 说明
/mcn/api/accounts?page=&pageSize=&search=&track=&sortBy=&order= GET 分页查询账号列表
/mcn/api/tracks GET 赛道列表(筛选下拉)
/mcn/api/refresh POST 从 MCP 重新拉取数据
/mcn/api/status GET 本地缓存数量

说明

  • 外部账号导入(/mcn/api/external/*)的字段归一化与「定位/内容」提取规范见 docs/外部账号导入处理规范.md,处理新账号时复用
  • 客户端 bundle 使用 window.__ModuleLoader__.load 格式,与官方 client 插件一致
  • 侧边栏注入点:sidebar.footer.action(与插件商店相同位置)
  • 修改 client.js / index.js 后需刷新页面生效;宿主端改动需重启 dsh 服务
  • MCP 拉取依赖飞书登录态(复用 ~/.myai-mcp/credentials.json)