12 KiB
12 KiB
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 |
挂 | 仅展示表 | 不挂 | 定时无意义 |
todo done |
挂 | row + batch(标记完成) | 不挂 | 定时无意义 |
todo delete |
挂 | row + batch(删除) | 不挂 | 定时无意义 |
todo stats |
挂 | toolbar(统计) | 不挂 | 定时无意义 |
remind |
挂 | toolbar | 挂 | 定时扫描到期/待办项并提醒 |
init-db |
不挂 | 不挂 | 不挂 | 宿主安装/更新时静默调用,不对用户暴露 |
health |
不挂 | 不挂 | 不挂 | 内部诊断命令 |
version |
不挂 | 不挂 | 不挂 | 内部诊断命令 |
config-path |
不挂 | 不挂 | 不挂 | 内部诊断命令 |
说明:
todos表在数据管理中为整表只读(readonly=1),所有增删改必须通过技能 Action(todo add/done/delete)走,宿主不直写业务表。- 数据管理页面默认展示列:
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_atUnix 秒级时间戳) - 支持失败可诊断(稳定错误信息、
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 <title> [-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,默认normaldue_at:截止时间,可选,Unix 秒整数,默认 nullstatus:列表过滤状态,可选,枚举pending/donelimit:列表返回上限,可选,整数,默认 100ids:标记完成/删除的待办编号,必填,单个数字或逗号分隔的数字列表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.mdslug 与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_atUnix 秒级规范) init_db()已写入_jiangchang_tables/_jiangchang_columns;todos表及字段具备中文display_nametodos表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 | - | 初版需求文档 |