# REQUIREMENTS ## 0. 技能标识 - 拟定 slug(英文,符合 `development/NAMING.md`):add-todo-all - 中文 name:待办事项 - 中文 description(一句话):提供待办事项的创建、查看、标记完成、删除、批量操作能力;支持设置截止时间与优先级;数据持久化在本地 SQLite。 - account-manager platform_key(如有):无(纯本地数据技能,不涉及外部账号登录) - 命名形态:标准型 - **网页 RPA(如有)— 登录策略:** `not_needed` - 本技能不涉及任何网页自动化、浏览器操作或外部系统登录,所有数据存储与操作均在本地 SQLite 中完成。 - 不调用 account-manager,不使用 profile_dir。 ## 0.1 宿主入口定位 | 主能力(Action id / CLI) | 对话 | 数据管理 | 定时 | 不挂理由(若不挂) | |---------------------------|------|----------|------|--------------------| | `todo add` | 挂 | toolbar(新增按钮) | 不挂 | 定时无意义 | | `todo list` | 挂 | row | 不挂 | 定时无意义 | | `todo done`(Action `todo-done-row`) | 挂(短 CLI 直调) | row(「完成本行」按钮) | 不挂 | 定时无意义;batch 批量完成暂未声明 | | `todo delete` | 挂 | row + batch(删除) | 不挂 | 定时无意义 | | `todo stats` | 挂 | toolbar(统计) | 不挂 | 定时无意义 | | `remind` | 挂 | toolbar | 挂 | 定时扫描到期/待办项并提醒 | | `init-db` | 不挂 | 不挂 | 不挂 | 宿主安装/更新时静默调用,不对用户暴露 | | `health` | 不挂 | 不挂 | 不挂 | 内部诊断命令 | | `version` | 不挂 | 不挂 | 不挂 | 内部诊断命令 | | `config-path` | 不挂 | 不挂 | 不挂 | 内部诊断命令 | 说明: - 数据管理页面默认展示列:`title`、`status`、`priority`、`due_at`、`created_at`;默认按 `created_at` 倒序。 - `status` 与 `priority` 字段在数据管理中以下拉枚举展示(pending=待办/done=完成;high=高/normal=中/low=低)。 ## 0.2 AI + RPA 协作与授权边界 ### Agent 设计 - 用户会怎样描述本任务: - “帮我加一条待办:周五前提交周报,优先级高。” - “帮我看看有哪些待办。” - “把第 1、3 条标记为完成。” - “把第 2 条删掉。” - “统计一下待办情况。” - 支持哪些用户意图;分别映射到哪个 Action: - 新增待办 → `todo add` - 查看列表 → `todo list` - 标记完成 → `todo done` - 删除待办 → `todo delete` - 统计概览 → `todo stats` - 到期提醒 → `remind`(async) - 每种意图必须提取哪些参数: - 新增:`title`(必填)、`priority`(可选,默认 normal)、`due_at`(可选,Unix 秒) - 查看列表:`status`(可选,pending/done)、`limit`(可选,默认 100) - 标记完成:`ids`(必填,单个或逗号分隔多个) - 删除:`ids`(必填,单个或逗号分隔多个) - 提醒:`seconds`(可选,模拟运行秒数,默认 3) - 缺少哪些参数时必须追问: - 新增时缺少 `title` 必须追问 - 标记完成/删除时缺少 `ids` 必须追问 - 哪些动作必须先展示对象、数量和影响,再取得明确确认: - 批量删除(影响多条数据,删除不可恢复) - 批量标记完成(可提示将标记的数量) - Agent 最终如何解释成功、部分成功、失败、等待人工和停止: - 成功:返回操作后的待办数据或统计结果 - 部分成功:批量操作中逐条返回 `ok/id/error`,告知哪些成功哪些失败及原因 - 失败:返回 `ERROR:` 前缀 + 中文原因(如标题为空、编号不存在、已完成不可重复标记) - 等待人工:本技能无外部依赖,无需人工介入 - 停止:async 任务支持 `JobStopped` 取消 ### 授权与平台边界 - 目标浏览器 / 桌面软件 / 手机 App:无 - 账号、设备、数据和业务权限由谁授权:无需外部授权,数据存于本地 SQLite - 是否有获得授权的官方 API;若不用,原因是什么:不涉及外部系统 - 目标平台规则、合同或客户约定中的自动化边界:不适用 - 明确禁止的实现路线:不适用(无外部交互) - 正常界面无法闭环时的上报与停止条件:不适用 ### RPA 风控设计 不适用。本技能为纯本地数据操作,不涉及任何 RPA、浏览器、桌面或移动端自动化。 ## 0.3 业务行生命周期 不适用。 本技能的 `todos` 表为用户直接管理的 CRUD 数据,不存在自动处理队列: - `pending` → `done` 的状态变更由用户主动触发(`todo done`),非技能自动捞起处理。 - 无「进行中」抢占、无失败重试、无跳过逻辑。 - 因此不适用 `WORK_ITEM_STATUS.md` 的处理队列生命周期。 ## 1. 文档目标 - 本文档用于明确 `add-todo-all` 的研发范围、交付标准、依赖关系和验收要求。 - 技术人员应以本文件作为开发范围依据,以避免实现偏差、范围蔓延或理解不一致。 ## 2. 业务背景 - 当前用户在日常工作中需要管理个人或团队的待办事项,人工记录容易遗漏且难以批量管理。 - 现有流程主要依赖手动记录,存在「不易追踪进度、无法批量操作、缺少到期提醒」等问题。 - 因此需要开发 `add-todo-all`,用于在本地自动完成待办的创建、查询、状态变更、批量删除与到期提醒,输出结构化 JSON 结果并持久化到本地 SQLite。 ## 3. 开发目标 - 解析并校验待办输入的关键字段(标题非空、优先级合法、状态合法) - 通过本地 SQLite 完成待办的增删改查 - 输出结构化结果(stdout JSON) - 写入业务表 `todos`(含 `created_at` / `updated_at` Unix 秒级时间戳) - 支持失败可诊断(稳定错误信息、`ERROR:` 前缀) - 完成 CLI 入口与 `health` / `version` / `init-db` 最小可运行验证 - 实现 async 提醒任务范式(`job_context` + `emit` + `finish`) ## 4. 功能范围 ### 必须实现 - 支持 `python scripts/main.py health`(运行时健康检查) - 支持 `python scripts/main.py version`(版本信息 JSON) - 支持 `python scripts/main.py init-db`(幂等建库与数据管理元数据) - 支持 `python scripts/main.py todo add [-p high|normal|low] [-d <unix秒>]`(新增待办) - 支持 `python scripts/main.py todo list [-s pending|done] [-n <limit>]`(列出待办,默认 100 条,按创建时间倒序) - 支持 `python scripts/main.py todo done <id>`(标记完成,支持逗号分隔批量) - 支持 `python scripts/main.py todo delete <id>`(删除,支持逗号分隔批量) - 支持 `python scripts/main.py todo stats`(统计总数/待办数/完成数) - 支持 `python scripts/main.py remind [-s <秒>]`(async 提醒任务,演示进度推送与终态上报) - 支持 `python scripts/main.py config-path`(输出 .env 与模板路径) - 业务内核统一在 `service/todo_service.py`,CLI / Action / 数据管理按钮共用同一内核 - 数据管理元数据:`todos` 表及字段具备中文 `display_name`,状态/优先级为枚举下拉,整表只读 ### 可后续扩展 - 支持失败自动重试 - 支持多用户/多工作空间隔离 - 支持分类标签 - 支持截止时间到期的真实推送通知(当前 demo 仅统计,不做真实推送) ## 5. 非功能要求 - 目录结构必须符合当前 `skill-template` 规范 - 入口必须统一为 `scripts/main.py` - 用户市场四 Tab 写在根 `README.md` / `TUTORIAL.md` / `DEMO.md` / `CHANGELOG.md`;LLM/运行契约写在 `SKILL.md`;开发规范在 `development/` - 输出格式应尽量机读友好;错误前缀统一为 `ERROR:` - Windows 环境下需保证 UTF-8 输出兼容 - 必须具备基本日志能力;敏感字段脱敏 - 业务表时间字段统一使用 Unix 秒级整数(`created_at` / `updated_at`) - 数据管理展示顺序由 `PRAGMA table_info` 的 cid 决定,不依赖 `display_order` ## 6. 输入输出要求 ### 输入 - `title`:待办标题,必填,非空字符串 - `priority`:优先级,可选,枚举 `high` / `normal` / `low`,默认 `normal` - `due_at`:截止时间,可选,Unix 秒整数,默认 null - `status`:列表过滤状态,可选,枚举 `pending` / `done` - `limit`:列表返回上限,可选,整数,默认 100 - `ids`:标记完成/删除的待办编号,必填,单个数字或逗号分隔的数字列表 - `seconds`:提醒任务模拟运行秒数,可选,整数,默认 3 - 环境变量 / `.env`:本技能无强制环境变量依赖(`.env.example` 为模板通用项,本技能不使用 RPA 相关配置) ### 输出 - 成功结果(stdout JSON): - 新增:单条待办对象 `{id, title, status, priority, due_at, created_at, updated_at}` - 列表:`{count, items: [Todo...]}` - 标记完成/删除:`{count, items: [{ok, id, ...}]}` - 统计:`{total, pending, done}` - 错误输出: - `ERROR:TODO_INVALID: <原因>`(标题为空、优先级非法等) - 批量操作中失败项返回 `{ok: false, id, error}` - 数据库记录:表 `todos`,字段 `id, title, status, priority, due_at, created_at, updated_at` - async 提醒任务:通过 `emit` 推送进度,通过 `finish` 上报终态 ## 7. 依赖的兄弟技能或外部系统 ### 兄弟技能依赖 - 无(不依赖 account-manager 或其他兄弟技能) ### 外部系统依赖 - 无(纯本地 SQLite 存储,不访问任何外部 API 或网页) - Gitea / 匠厂客户端:发布与正式环境验证 ### Python 包依赖(requirements.txt) - 本技能无特有 Python 三方包依赖(仅使用 Python 标准库 `sqlite3`、`argparse`、`asyncio`、`json` 等) - `jiangchang-platform-kit` 由宿主共享 runtime 提供,不写入 requirements ## 8. 不在本次范围内的内容 - 本次不实现分类标签功能 - 本次不实现多用户/多工作空间隔离 - 本次不实现截止时间到期的真实推送通知(remind 仅为 async 范式演示,统计后不做真实推送) - 本次不实现失败自动重试 - 本次不兼容旧模板历史结构(`docs/`、`optional/`、`skill_main.py` 等) ## 9. 验收标准 - 代码结构符合模板规范;`SKILL.md` slug 与 `constants.SKILL_SLUG` 一致 - `health`、`version`、`init-db` 命令执行正常 - `python tests/run_tests.py -v` 必跑测试全部通过 - `todo add` / `todo list` / `todo done` / `todo delete` / `todo stats` 命令在本地真实跑通 - 业务表 `todos` 写入和查询符合 `references/SCHEMA.md`(含 `created_at` / `updated_at` Unix 秒级规范) - `init_db()` 已写入 `_jiangchang_tables` / `_jiangchang_columns`;`todos` 表及字段具备中文 `display_name` - `todos` 表 `readonly=1`,字段 `editable=0`,宿主不直写业务表 - `status` / `priority` 字段具备 `options_json` 枚举下拉 - 字段展示顺序与 `PRAGMA table_info(todos)` 的 cid 一致;不依赖 `display_order` - `tests/test_display_metadata.py` 通过 - `SKILL.md` 的 `developer_ids` 已配置为开发者本人匠厂用户 ID - 发布后 Gitea 工作流成功;匠厂技能市场对开发者账号可见最新版本并可安装 - 安装后按本技能入口定位表与 `actions.json` 声明完成宿主多入口验收 ## 10. 开发注意事项 - 只修改当前 skill 仓库,不要改动无关兄弟项目 - `cli` 只做参数解析;核心业务逻辑在 `service/todo_service.py` - 单业务内核、多入口:CLI / Action / 数据管理按钮都调用 `todo_service` 的同一函数,禁止按入口分叉业务行为 - 数据表为只读,所有增删改通过技能 Action 走,宿主不直写 - 发布前完成本地验证、工作流验证和正式环境安装验证(含 `developer_ids` 与宿主多入口) ## 11. 变更记录 | 日期 | 版本 | 变更人 | 变更内容 | |------|------|--------|----------| | 2026-09-07 | v0.1.0 | - | 初版需求文档 | | 2026-09-11 | v0.1.1 | - | 入口定位表登记行级 Action `todo-done-row`(todos 表操作列「完成本行」,sync/direct,`$row.$pk` 预填) |