通过 Notes 与 Tasks 学习
用维护中的真实示例理解共享业务服务、持久归属与多种入口如何协作。
审计基线的源码 checkout 包含当前包组合的完整 Notes 与 Tasks 应用。将审阅过的文件作为连续示例阅读,不要拼接不同版本的孤立片段。安装说明发布包消费路径与精确示例 checkout 的准备方式。
Notes:一个服务,多种入口
从 Notes 组装开始:它接收所选数据库实例、session store、方言查询与 principals,再创建确切 Auth、Notes 实例。共享服务执行对象归属策略;CLI、原生 Fetch 和 oRPC 适配同一业务操作。
按此顺序读文件:
- contracts.ts、notes.ts:输入校验、身份 audience 与对象归属。
- application.ts、auth.ts、application-auth.ts:选定资源与服务身份验证。
- queries-sqlite.ts 或 queries-pg.ts:原生方言数据访问。
- operations.ts、router.ts、web.ts:显式入口适配器。
- server.ts、lenso.config.ts:本地宿主组装与运行时配置。
数据库说明迁移归属,包括 Auth session 与旧未归属行;Auth解释登录证据与服务重新验证。不要从请求 JSON 分配 owner,也不要把 CLI 当作绕过授权的入口。
当前 Notes 管理声明选择已有 sidecar 服务。CLI 导出 operations 与可信 operationBinding;MCP 独立选择 mcpOperations(list、read、remove),通过 NOTES_MCP_SESSION 提供自己的启动身份。选择列表不继承另一入口的 binding,也不会仅凭对象 ID 授权;共享服务仍重新验证当前 session 证据和 owner 策略。
本地 SQLite 路径使用应用配置指南的键名与脚本。只检查必需键名,通过私有本地环境或 secret 机制提供凭据。本文档不含个人路径或有效凭据。
Tasks:生产者与 worker 共享契约
Tasks 示例使用真实 PostgreSQL 队列。生产者接收已认证报告请求,持久归属将任务关联到 principal;worker 消费共享校验契约,通过审阅过的报告服务写入。
调用生产者或恢复操作前先读 contracts.ts、task.ts、ownership.ts、authorized-service.ts,再读 resources.ts、producer.ts、worker.ts、mcp.ts。PostgreSQL 预置与迁移是显式步骤。worker 不会把任意任务 JSON 变成经过授权的操作。
Tasks覆盖 lease、重试、协作取消、保留与故障恢复;MCP 与 agent解释独立操作 allowlist。重试可能重复副作用,结果不确定时先查询持久状态再重放。
当前 Tasks 配置为 CLI 选择管理操作,并单独选择 MCP 子集 submit、query、cancel、retry,排除 report。Binding 独立于已校验业务输入读取可信入口身份,不需要全局 current actor 或调用者提交的身份 envelope。
Workers:D1 与 R2 上的 Notes
Workers Notes 示例使用平台 binding 与请求拥有的应用图,不在 Worker 中运行 Bun CLI Engine 或 PostgreSQL task worker。greeting 计数器属于每请求内存,不是持久存储。
按 Workers、Files和部署选择 D1/R2 入口与本地 Wrangler 检查。dry-run bundle 成功不表示云资源已预置或生产可用。
一次修改一个边界
选择真实操作,检查共享 schema 与服务策略,修改服务或契约,运行聚焦示例测试,再验证调用它的入口。组装始终保留确切插件对象,不修改 .lenso 或 dist 产物。测试与排错提供各边界检查。