STARDUSTLC666/dsh-calendar2

dsh-calendar

CalDAV日历日程管理与搜索工具

AI 分析

适合需要日程管理的用户,支持Google、iCloud等日历同步。

包名
dsh-calendar
版本
0.5.3
许可证
MIT
最近更新
2026年9月12日

安装

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:STARDUSTLC666/dsh-calendar

配置

所有配置都在你的 profile 的 cordis.patch.yml 里,按 id 覆盖 calendar 行(覆盖整行的 config)。通用字段:

  • provider:google | icloud | nextcloud | custom
  • caldavUrl:完整日历集合 URL(custom / icloud 必填;google / nextcloud 也可手填覆盖预设)
  • authMethodbasic | oauth;Google 默认且必须为 oauth,其他 provider 默认 basic。其他 OAuth 服务器需显式设置 oauth,不会因环境中存在 Google 凭据而自动切换。
  • username / password:仅 Basic 认证必需。iCloud 请用应用专用密码;密码推荐用环境变量 DSH_CALENDAR_PASSWORDGoogle 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
Shadowsocks1080

在客户端界面确认你的实际端口,填进 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