飞书
任务同步日历同步通知渠道日历叠加任务双向同步、日历与会议同步进日程,并把安时的提醒发到飞书(群机器人 Webhook 或你自己的单聊)。也能把考勤画到日历上——那部分默认关闭,要在日历侧栏里逐个显式打开。
飞书、邮箱、Apple 日历、港股新股,这些都不在核心里——它们是插件。 核心只定义扩展点、权限和展示形态,然后不为任何具体插件写特例。
插件是独立子进程。卡住、崩溃、拉不到数据,本地读写都不受影响—— 同步失败绝不影响本地写库,这是 local-first 的底线。
插件给的是「(标签, 值, 语义档位)」,颜色、字体、排版、项数上限全归宿主。 没有 HTML、没有 iframe、没有自定义布局——那个口子一开,插件的联网面就不可审计了。
涉及你个人数据的展示面(考勤、请假)默认关闭、逐个显式启用,关着的时候,安时根本不去调那个插件。拉一次本身就需要授权。
任务是双向的(完成状态会回写),日历目前是 pull-only——外部日历远端权威, 落成只读日历。安时不给外部日历加 push 通道。
任务双向同步、日历与会议同步进日程,并把安时的提醒发到飞书(群机器人 Webhook 或你自己的单聊)。也能把考勤画到日历上——那部分默认关闭,要在日历侧栏里逐个显式打开。
把飞书项目(Meegle)的排期同步进安时:一个工作项成一条任务,每个排期节点成一个排期块,段名(「中台开发」这类)印在条上。
IMAP 把你标记过的邮件同步成任务,会议邀请按 iMIP 标准落成只读日历。一个实例一个邮箱,可以挂多个。它不删邮件、不替你回复邀请,也不猜正文里写的时间。
把 macOS 上的日历同步进安时,落成只读日历(外部日历远端权威,安时不往回写)。
把港股新股的认购截止、公布结果、暗盘与上市四个时点同步成日历事件。一个「插件不必是同步某个账号」的例子:它同步的是公开数据。
它们都只负责把安时已经加密好的字节搬到远端再搬回来。 合并判断全在核心,插件看不懂内容,也不参与任何冲突决策。
多端同步的传输后端:把安时加密后的字节搬到你自己的 CouchDB。带实时订阅,手机上勾完一个任务,电脑上一两秒内就变。只搬字节,看不懂内容。
VangelisHaha/yinian-plugin-couchdb多端同步的传输后端:任意 WebDAV(坚果云 / Nextcloud / 群晖)。轮询,没有实时订阅,所以比 CouchDB 慢一档;不需要自己跑服务。
多端同步的传输后端:把加密后的字节写进一个本地目录,由 iCloud Drive / Dropbox / OneDrive 客户端搬到其他设备。不需要服务器也不需要账号——代价是「另一台设备什么时候看到」取决于那个云盘客户端。
| 后端 | 要不要自己跑服务 | 时效 | 代价 |
|---|---|---|---|
| CouchDB | 要(自建) | ≤ 1 秒 | 唯一带实时订阅的:远端一有新对象就通知本机。要自己维护一个服务。 |
| WebDAV | 不要(坚果云 / Nextcloud / 群晖) | 按轮询间隔 | 没有订阅,只能轮询,所以比 CouchDB 慢一档。 |
| 本地文件夹 | 完全不要 | 几秒 – 几十秒 | 写进 iCloud Drive / Dropbox / OneDrive 的同步目录,不需要服务器也不需要账号。 「另一台设备什么时候看到」取决于那个云盘客户端。 |
无论哪个后端,加密口令都存在本机系统钥匙串里,永不同步、永不上传。 代价是:口令丢了远端数据就解不开(本地数据不受影响)。
系统插件:随应用分发、首次启动自动装好、不受插件总开关约束、不可卸载(只能停用)。几天去上游拉一次放假安排,内置数据兜底,完全离线也能用。放假安排是按年公布、会过期的数据,做成插件才能独立更新。
系统插件的身份只能由宿主判定,manifest 里声明无效—— 否则一行声明就能绕过插件总开关。
把外部系统的任务或日程搬进安时。task 是双向的(完成状态会回写),event 目前是 pull-only——外部日历远端权威,落成只读日历。
提醒到点时除了本机系统通知,还能发到别处。内置系统通知与第三方渠道走的是同一条路径。
多端同步的传输层。插件只负责把一串已经加密好的字节搬到远端再搬回来,合并判断全在核心,插件看不懂内容。
给某一天贴一个短标签(节假日、纪念日)。这是公开知识——谁算都一样,所以装上即生效。
往月视图格子右上角贴角标、往视图右上角贴汇总、往侧栏负载卡里加几行统计。这是你的个人数据(打卡、请假),所以默认关闭、逐个显式启用,关着的时候,安时根本不去调那个插件。
订阅 task.completed / task.reopened / task.updated 这类事件,用来把「这条完成了」回写到外部系统。它是扩展点里唯一一个「只收不画」的:不贡献任何界面,所以也没有展示面的开关。
往浮窗那一列卡片里加一张。插件给的是「(标签, 值, 语义档位)」,颜色、字体、排版、项数上限全归宿主。
插件是普通的 TypeScript 进程,通过 stdio 走 RPC。manifest 里声明能力与权限, 配置表单由 schema 驱动、宿主用安时自己的控件渲染,所以你不用写任何界面代码。
manifest 字段、RPC 方法、权限清单与 schema 规范的完整参考在模板仓库的 README 里, 模板本身跑起来就是一个能装进安时的可用插件。