STARDUSTLC666/dsh-calendar ↗★ 2
dsh-calendar
DeepSeek Harness 日历插件:CalDAV 日程查询、创建、修改、删除与搜索,支持 Google OAuth 2.0、iCloud、Nextcloud、自定义服务及离线配置自检。
AI Analysis
适合需要日程管理的用户,支持Google、iCloud等日历同步。
Install
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:STARDUSTLC666/dsh-calendarREADME
Read the full README ↗配置
所有配置都在你的 profile 的 cordis.patch.yml 里,按 id 覆盖 calendar 行(覆盖整行的 config)。通用字段:
provider:google | icloud | nextcloud | customcaldavUrl:完整日历集合 URL(custom / icloud 必填;google / nextcloud 也可手填覆盖预设)authMethod:basic|oauth;Google 默认且必须为oauth,其他 provider 默认basic。其他 OAuth 服务器需显式设置oauth,不会因环境中存在 Google 凭据而自动切换。username/password:仅 Basic 认证必需。iCloud 请用应用专用密码;密码推荐用环境变量DSH_CALENDAR_PASSWORD。Google CalDAV 不接受任何 Basic 密码,包括应用专用密码。clientId/clientSecret/refreshToken:OAuth 必需;分别支持DSH_CALENDAR_CLIENT_ID/DSH_CALENDAR_CLIENT_SECRET/DSH_CALENDAR_REFRESH_TOKEN。非空配置值优先于环境变量。请勿把密钥或令牌提交到 Git。tokenUrl:可用DSH_CALENDAR_TOKEN_URL;Google 默认https://oauth2.googleapis.com/token,其他 OAuth 服务必填。OAuth 的 tokenUrl 与 caldavUrl 必须为不含内嵌账号密码、查询参数或片段的 HTTPS 地址。proxyUrl:可选 HTTP 代理地址(如 http://127.0.0.1:7890);令牌刷新和 CalDAV 请求共用该代理。可直连时无需填写。calendarId:google 专用,日历 ID(通常是你的邮箱)host/user/calendar:nextcloud 专用
中国用户:特殊代理配置(Google / iCloud)
若本机网络无法直连 Google / iCloud,插件内置的 proxyUrl 可把 OAuth 令牌请求和 CalDAV 请求路由到你本机 HTTP 代理客户端的端口,不影响其他插件,也无需改任何系统设置。
- id: calendar
config:
provider: google
calendarId: you@gmail.com
# OAuth 凭据通过下文三个环境变量提供
proxyUrl: http://127.0.0.1:7890 # 改成你代理客户端的本地端口
常见代理客户端本地端口
| 客户端 | 本地端口 |
|---|---|
| Clash / Clash Verge(HTTP) | 7890 / 7897 |
| v2rayN(HTTP / SOCKS) | 10808 / 10809 |
| Shadowsocks | 1080 |
在客户端界面确认你的实际端口,填进 proxyUrl 即可。国内可直连的 CalDAV 服务(如自建 Nextcloud)则无需填写。
Google 示例
- id: calendar
name: dsh-calendar
config:
provider: google
calendarId: you@gmail.com
# authMethod: oauth # Google 默认即为 oauth
# clientId / clientSecret / refreshToken 推荐用环境变量
Google 的 CalDAV 集合 URL 由插件拼成:https://apidata.googleusercontent.com/caldav/v2//events。
在启动源码版 pnpm dsh 或普通 dsh 的同一个终端中设置(以下均为占位值):
export DSH_CALENDAR_CLIENT_ID='你的 OAuth 客户端 ID'
export DSH_CALENDAR_CLIENT_SECRET='你的 OAuth 客户端密钥'
export DSH_CALENDAR_REFRESH_TOKEN='你授权后取得的 refresh token'
凭据必须来自你自己的 Google Cloud OAuth 客户端和一次用户授权,而不是邮箱应用专用密码。按 Google CalDAV 官方设置说明 启用 API、配置 OAuth;申请日历读写范围 https://www.googleapis.com/auth/calendar,并请求离线访问(access_type=offline)以取得刷新令牌,参见 Google 离线授权说明。尚未提供浏览器一键登录或独立登录 CLI;已有 OAuth 配置的用户可直接填入刷新令牌。
Google CalDAV 范围实测(2026-09-08):同一账号与日历使用 calendar.readonly 时,令牌刷新返回 200、集合探测 PROPFIND 返回 207,但读取日程 REPORT 返回 403;改为上述 calendar 范围后,REPORT 返回 207,重启验证进程后再次刷新和读取也通过。因此,请按这里的 CalDAV 配置申请范围,并用 calendar_list 验证真实读取,不能只凭令牌获取成功或集合探测成功判断日程可读。本次真实测试仅执行读取,没有验证 Google 的写入操作。
calendar 范围允许查看、修改、分享及删除可访问的日历,申请前请确认接受该权限范围,详见 Google 权限定义。外部 OAuth 应用处于 Testing 状态时,包含日历权限的刷新令牌会在 7 天后过期;长期使用需处理重新授权或按 Google 要求配置生产状态,详见 刷新令牌到期规则。
插件在内存中缓存访问令牌,并在每次 DAV 请求前检查有效期、提前刷新;令牌请求与 DAV 请求都会透传调用的取消信号。401 会使缓存失效,下一次调用重新刷新,不会自动重放写请求。OAuth 请求不跟随重定向、不向其它源的对象 href 发送 Bearer token,请填写最终日历集合地址。运行时令牌不会写入配置或日志;若其他 OAuth 提供方轮换 refresh token,重启时需要重新提供有效凭据。
iCloud 示例
- id: calendar
name: dsh-calendar
config:
provider: icloud
username: you@icloud.com
caldavUrl: https://caldav.icloud.com/123456789/calendars//
# password 推荐用环境变量 DSH_CALENDAR_PASSWORD
iCloud 需要完整日历集合 URL(含你的用户 ID 与日历 ID),在 icloud.com 的日历 CalDAV 设置里可找到具体日历地址。
Nextcloud 示例
- id: calendar
name: dsh-calendar
config:
provider: nextcloud
username: alice
host: https://cloud.example.com
user: alice
calendar: personal
# password 推荐用环境变量 DSH_CALENDAR_PASSWORD
插件会拼成:https://cloud.example.com/remote.php/dav/calendars/alice/personal/。
自定义 CalDAV 示例
- id: calendar
name: dsh-calendar
config:
provider: custom
caldavUrl: https://dav.example.com/calendars/me/work/
username: me
# password 推荐用环境变量 DSH_CALENDAR_PASSWORD