DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

lyy-hast /

lyy-hast/dsh-coros-plugin

Verified

This plugin has no description yet.

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHub
READMESource: main@22f14146

高驰运动 · dsh-coros-sport

在 DeepSeek Harness 桌面端里直接登录高驰(COROS)账号,查看你的设备、运动记录、恢复与体能状态、每日健康数据。

登录在应用窗口内完成 —— 不弹系统浏览器、不跳外部应用、不需要手工粘贴令牌。

当前版本 1.0.3。读取全部数据,写能力只有一处:「训练安排 → 详细」里的计划页可以把一份四周跑步计划创建到高驰账号里,写入前会先列出全部 16 节课、标出与已有计划重叠的日期,需要二次确认才真正写。/coros-plan 指令生成的新计划只以文本形式返回,不自动写入。


目录

  • 功能
  • 安装
  • 使用
  • 训练计划
  • 工作原理
  • 数据与隐私
  • 区域
  • 配置
  • 故障排查
  • 开发
  • 许可

功能

安装后,桌面端左侧面板列表会出现「高驰运动」入口(位于「插件市场」之后、「自动化任务」之前)。点击进入:

区块 内容 数据来源(MCP 工具)
账号 昵称、性别、身高、体重、生日 queryUserInfo
设备 绑定的高驰设备名称、蓝牙 ID、型号、序列号、保修到期 queryDevices
恢复 恢复百分比、状态等级、预计完全恢复时间 queryRecoveryStatus
体能 VO₂max、跑力等级、阈值配速、5K/10K/半马/全马预测 queryFitnessAssessmentOverview
运动记录 近 7 天活动的类型、日期、地点、距离、时长、配速、平均心率、卡路里 querySportRecords
健康 逐日步数、卡路里、锻炼时长、压力、睡眠分期,以及静息心率与 HRV 基线 queryDailyHealthData
训练安排 本周安排的训练课;账号里是否已有训练计划(整份四周计划的详情在「训练安排 → 详细」里看) queryTrainingSchedule、queryTrainingPlanLibrary

七个区块并行加载,任何一个失败只影响它自己的卡片,不会让整页白屏。

安装

前提:DeepSeek Harness 桌面端已安装并至少启动过一次(需要 profile 目录已初始化)。

方式一:本地目录安装(推荐用于开发)

  1. 获取代码:

    git clone <repo-url> dsh-coros-sport
    cd dsh-coros-sport
    
  2. 在 Harness 会话里安装该目录:

    plugin_manager  action=install_bundle  target=D:\path\to\dsh-coros-sport
    

    其中 target 必须是绝对路径。安装工具会自行处理依赖与 profile 里的 bundle 注册,请不要手工编辑 profile 的 package.json 或 cordis.patch.yml。

  3. 重启桌面端,左侧面板列表即出现「高驰运动」。

方式二:从 npm 安装

plugin_manager  action=install_bundle  target=dsh-coros-sport

安装结果里 application 为 applied 才算生效;若出现 warnings,按其提示处理后再重启。

使用

  1. 点击左侧「高驰运动」。
  2. 首次进入是一个登录页,点「登录高驰账号」。
  3. 登录表单会在面板内部展开:输入高驰账号(邮箱/手机号)与密码,按页面提示完成授权。
  4. 授权成功后表单自动收起,数据立即加载。
  5. 之后每次打开都是直接显示数据,直到令牌过期。

令牌过期后页面会提示重新登录,点击即可,无需重新输入任何配置。

退出登录:面板右上角菜单可以清除本机保存的令牌。

生成训练计划

两个入口,走的是同一条链路:

入口一:/coros-plan 指令

在任意会话里输入 /coros-plan,后面跟一句你的目标:

/coros-plan 6 周后跑完 10 公里,每周能练 4 次

插件会读取你的账号数据(个人信息、恢复状态、体能评估、近期训练、本周安排、已有计划),把结果整理成一份简报,连同这句话一起交给模型,由模型给出逐周训练表。

入口二:训练计划面板的「创建训练计划」

当面板显示「这个账号还没有训练计划」时,卡片上会出现「创建训练计划」按钮。点击后:

  1. 自动打开一个新会话;
  2. 输入框里已经填好 /coros-plan (光标在指令之后),你直接补上目标即可发送。

按钮只在账号里一个训练计划都没有时出现。「本周暂无训练课」不等于没有计划 —— 那可能只是休息周,此时不会再给创建入口,避免建出两个重叠的计划。计划总是从下一个周一开始,所以刚建完计划的那一周,卡片会补一句「训练从 MM-DD 开始」,而不是让你对着下方列出的计划怀疑自己看错了。

生成出来的计划是文本。要把它落到账号里,用面板「训练安排」右上角的「详细」:进去后按周列出整份四周计划,确认后才写进高驰。

如果提示「现在打不开新会话」,说明当前没有可用的工作区:先在左侧工作区新建一个会话,再手动输入 /coros-plan。

训练计划

训练计划是「训练安排」的详情页,不在看板上直接铺开 —— 看板只留当天要看的数字。看板「训练安排」标题右侧有一个「详细」,点进去是这一页;页头左上角的「返回看板」回到看板。这两个视图只是面板内部的切换,不写 URL、也不进浏览历史:面板是宿主的一个 slot,URL 归宿主管,从 slot 里 push 一条路由会和宿主自己的导航打架。

打开本页时自动读一次计划库(只读),把插件内置的四周计划整份列出来:每周的周标题、周量,以及这一周每节课的日期、星期、时间、时长和距离;当前所在的那一周带「本周」标记。四周一次看全,不再翻页。整份计划共 16 节、约 149 km。

这一页也要读账号,所以它也可能会先发现令牌过期。这时不会停在「重新读取」上(那个按钮重试多少次都还是过期),而是直接切回登录卡片;登录回来仍然停在这一页。

确认无误后点「创建训练计划」,按钮变成「确认创建,写入 16 节」并给出不可撤销的提示 —— 第一次点击只改本地状态,第二次才真的调用 createTrainingPlan,一次性把整份计划建到账号里。

计划内容是固定的四周循环(基础 2 周 / 强化 1 周 / 减量 1 周),不随对话漂移 —— 面板和命令行用的是同一份 lib/plan-workouts.js,而写请求由宿主机端按自己的代码重建 payload,客户端传上来的课程内容一律不采用。这样即使页面被改过或者缓存的计划已过期,也写不进意料之外的课。

四周的结构(起点是创建时最近的周一):

周 主题 周量 周四质量课
1 建立节奏 37.7 km 阈值 3 × 8′
2 加长阈值 41.0 km 阈值 2 × 15′
3 短间歇 40.1 km 间歇 4 × 1000 m
4 减量恢复 30.6 km 轻松跑 + 6 × 30″ 加速

每周四节,固定周一 / 周二 / 周四 / 周日:周三、周五、周六全休,周二与周四之间留 48 小时。周一至周四的重课在 18:30,周日的长距离在 17:30。

三条限制值得先知道:

  • 没有开始时间。createTrainingPlan 的课程入参只有日期 + 课程内容,没有时间字段。18:30 / 17:30 写在课程说明里,不会变成日历提醒或手表提示。
  • 不能删。高驰的 MCP 接口没有删除训练计划的工具,写错了只能在高驰 App 里逐节改。这也是为什么必须先看一眼清单。
  • 不覆盖,但会重叠。高驰不会把新计划合并到已有计划上,日期重叠时两份计划会同时存在、同一天出现两节课。所以预览会读一遍计划库,把重叠的旧计划列出来提醒你。

工作原理

高驰官方 MCP 服务使用 OAuth 2.0 授权码 + PKCE。本插件的完整流程:

点击登录
   ↓
动态注册客户端 (POST /connect/register)  →  client_id
   ↓
创建 CLI 登录会话 (POST /api/v1/cli/login-sessions)  →  loginUrl
   ↓
在面板内用 iframe 打开 loginUrl  ← 你在这里输入账号密码并授权
   ↓
轮询会话状态 (POST .../claim, X-Poll-Token)  →  authorized + loginTicket
   ↓
用 loginTicket 换授权码 (GET /oauth2/authorize?login_ticket=...)
   ↓
换令牌 (POST /oauth2/token, PKCE code_verifier)  →  access_token + refresh_token
   ↓
调用 MCP 工具 (POST /mcp, JSON-RPC tools/call)

几个实现上的关键点:

  • 令牌 30 天、refresh token 180 天,且每次刷新都会换发新的 refresh token。所以刷新必须串行(单飞),否则并发刷新会让其中一个令牌作废。
  • loginTicket 一次性:拿到后必须立刻兑换授权码,不能存起来稍后再用。
  • 高驰的 tools/call 返回的是一段人类可读的纯文本,不是 JSON,所以每个区块都有对应的文本解析器。
  • MCP 传输是无状态的(protocolVersion 2025-06-18),不需要 Mcp-Session-Id,也不发 notifications/initialized。

数据与隐私

  • 密码不落盘。密码只在你本机的浏览器环境里提交给高驰的登录页(opencn.coros.com),插件本身从不读取、不存储、不转发它。
  • 只保存令牌。令牌存在 Harness 的 credentials 服务里(CredentialKey = coros-sport:oauth);该服务不可用时退回 ~/.dsh-coros-sport/token.json,文件权限 0600。
  • 不经过第三方服务器。所有请求从你的机器直连高驰官方端点(mcpcn.coros.com / mcpeu.coros.com / mcpus.coros.com),插件没有自建后端。
  • 退出登录会删除本机令牌,并在高驰侧调用 revoke 端点尝试吊销。
  • 面板默认只读取数据。唯一会写入的路径是「训练计划」:它先发一次只读请求(列出整份四周计划 + 计划库里日期重叠的旧计划),再由你点击确认才调用高驰的 createTrainingPlan 写入一份计划。
  • 写入不可撤销。高驰的 MCP 接口没有删除训练计划的工具,也没有「移动」:写错了只能在 App 里逐节修改或删除。所以面板把确认做成两步,并在确认前显示完整计划。
  • 会与旧计划重叠。高驰不合并计划:日期重叠时两份计划同时存在,同一天会出现两节课。预览会读一次计划库并列出重叠的旧计划,但不会阻止你创建。
  • 写入没有开始时间。createTrainingPlan 的课程入参里没有时间字段(只有日期和课程内容),所以 18:30 / 17:30 只会出现在课程名和说明文字里,不会变成日历提醒或手表提示。
  • /coros-plan 只读取数据并把结果作为文字交给模型,不写回账号。
  • 账号数据会被送到模型:使用 /coros-plan 时,插件把你账号里的昵称、身体指标、恢复与体能数据、近期训练记录、本周安排和已有计划整理成一段文本,作为一条用户消息发给当前会话的模型(与你在对话框里粘贴这些内容等价)。不用这个指令就不会发送;面板本身只在本地渲染。

区域

高驰把服务分成三个集群,账号属于哪个就选哪个,选错会登录失败或查不到数据:

区域 端点
中国大陆(默认) https://mcpcn.coros.com
欧洲 https://mcpeu.coros.com
北美 https://mcpus.coros.com

默认是 cn。如果你在海外注册的账号,可在 Harness 的插件配置里改 region 为 eu 或 us。

配置

插件配置项(在 profile 的 bundle patch 里可覆盖):

键 类型 默认 说明
region "cn" | "eu" | "us" "cn" 高驰服务区域
issuer string 空 直接指定 issuer,覆盖 region 的推导(自建代理时用)
overviewDays number 7 运动记录与健康数据的默认回溯天数

故障排查

左侧没有出现「高驰运动」

  • 确认安装结果的 application 是 applied,且已重启桌面端。
  • 若面板列表被折叠到「更多」里,点「更多」查看;侧栏折叠成图标轨道时面板列表整列隐藏,展开侧栏即可。
  • 插件加载失败时入口不会出现 —— 查看 Harness 日志里的 dsh-coros-sport 相关报错。

登录页白屏或一直转圈

  • 这台机器需要能访问 opencn.coros.com 与 mcpcn.coros.com。企业网络可能拦截。
  • 若内嵌登录页被网络策略拦截,面板会提示改用系统浏览器完成登录(同一套授权流程,只是窗口不同)。

登录后立刻又要求登录

  • 多半是区域选错。确认账号归属后用对应的 region 重试。

数据区块显示「加载失败」

  • 单个区块失败不影响其他区块。重新加载页面即可重试。
  • 若全部失败且提示未授权,说明令牌已过期,重新登录。

授权成功但卡在等待

  • loginTicket 是一次性的,若同一授权重复被消费会失败。关闭面板重新登录一次即可。

开发

dsh-coros-sport/
├── lib/
│   ├── index.js         Host 半边:Cordis 插件入口、HTTP 路由、数据聚合
│   ├── plan-workouts.js 训练计划的课程内容与 payload 构造、结构校验(纯数据,无 I/O)
│   ├── plan-writer.js   写入策略:查计划库 → 校验 → 创建一次
│   ├── coros-auth.js    登录会话与令牌生命周期(单飞刷新、轮换)
│   ├── coros-api.js     纯协议层:OAuth 请求、MCP 调用、文本解析器
│   └── client.js        Client 半边:侧栏入口 + 主面板 UI
├── locale/{zh,en}.json  插件元数据(标题、描述)
├── icon.svg             侧栏与插件列表图标
├── cordis.patch.yml     bundle patch
└── package.json

lib/plan-workouts.js 与 lib/plan-writer.js 都不依赖 Cordis 与宿主,可以离线跑:

node scripts/test-plan.mjs     # 39 项断言:日期归整、四周 16 节、payload 结构、periodization、窗口、失败即停
node scripts/test-routes.mjs   # 用假 ctx 驱动 apply(),走完 8 条路由(加 --write 才真写)
node scripts/test-client.mjs   # 手写 React 桩渲染组件:计划页的读取→确认→创建,以及看板 ↔ 计划页的进出

不开面板也能建计划。宿主模块只在重启后重新加载,所以新路由要等重启才生效;在那之前(或任何时候)都可以用命令行,走的是同一套 lib/plan-writer.js:

node scripts/plan-create.mjs                 # 只读:列出整份计划和冲突
node scripts/plan-create.mjs --start 2026-11-16
node scripts/plan-create.mjs --yes           # 真写

--start 接受 YYYY-MM-DD 或 yyyyMMdd,非周一会自动归整到那一周的周一(课程按周一偏移排),不存在的日期直接报错而不是顺延。

这几个脚本只用于开发,不在 package.json 的 files 里。

lib/coros-api.js 不依赖 Cordis、DSH 或文件系统,可以脱离宿主直接测试:

node -e "import('./lib/coros-api.js').then(m => console.log(m.parseDevices(text)))"

调试路由(Host 半边暴露的本地 HTTP 接口):

方法 路径 用途
GET /coros-sport/status 当前登录状态
POST /coros-sport/login/start 创建登录会话,返回 loginUrl
POST /coros-sport/login/poll 轮询会话状态
POST /coros-sport/login/cancel 取消登录
POST /coros-sport/logout 退出登录并清除令牌
GET /coros-sport/overview 聚合后的面板数据
GET /coros-sport/plan/preview?startDate=&lang= 只读:整份四周计划、结构问题、计划库里的重叠计划
POST /coros-sport/plan/write 写入,body 需 {confirm: true, startDate, lang};缺 confirm 返 400 unconfirmed

startDate 缺省为下周一,非周一值会归整到该周周一,不存在的日期返 400;超出「今天 ~ 今天+14 天」返 400 out-of-window。

UI 约定:面板只用 Harness 主题令牌(--dsw-alias-*),不引入任何 @deepseek-ai/dsh-client-* 包;React 由宿主的浏览器模块表提供。

许可

MIT © 2026 dsh-coros-sport contributors

本项目与高驰(COROS)官方无隶属关系,是第三方开源集成。「COROS」「高驰」是其各自权利人的商标,此处仅用于说明对接对象。

—/ 5

No ratings yet

Verified DSH bundle

Commit 22f141468bbe

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout