@fxri/toolkit 1.5.5 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +34 -0
- package/LICENSE +21 -21
- package/NOTICE +9 -9
- package/README.md +361 -330
- package/SPEC.md +118 -116
- package/TRADEMARK.md +47 -47
- package/dist/cli.cjs +35 -31
- package/dist/cli.js +32 -28
- package/dist/index.cjs +35 -31
- package/dist/index.js +33 -29
- package/package.json +17 -15
- package/skills/README.md +52 -0
- package/skills/fxri-plan-to-task/SKILL.md +72 -0
- package/skills/fxri-plan-to-task/assets/active-task-template.md +13 -0
- package/skills/fxri-plan-to-task/references/task-spec.md +85 -0
- package/skills/fxri-release-changelog/SKILL.md +54 -0
- package/skills/fxri-release-changelog/references/changelog-format.md +40 -0
package/SPEC.md
CHANGED
|
@@ -1,117 +1,119 @@
|
|
|
1
|
-
# 任务文件规范(SPEC)
|
|
2
|
-
|
|
1
|
+
# 任务文件规范(SPEC)
|
|
2
|
+
|
|
3
3
|
> 本规范**全语言支持**,面向**多人 + AI 跨项目协作**,定义任务文件的目录结构、文件格式与归档规则。任何编程语言均可按本规范实现读写;@fxri/toolkit 的 `tasks` 域仅为参考实现。
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
└──
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
-
|
|
33
|
-
|
|
34
|
-
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
|
57
|
-
|
|
|
58
|
-
|
|
|
59
|
-
|
|
|
60
|
-
|
|
|
61
|
-
|
|
|
62
|
-
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
4
|
+
>
|
|
5
|
+
> AI 工作流的技能化封装见 [skills/fxri-plan-to-task](./skills/fxri-plan-to-task/SKILL.md)(零依赖、跨项目复用);本规范仍是任务文件格式的单一事实源。
|
|
6
|
+
|
|
7
|
+
## 0. 协作模型
|
|
8
|
+
|
|
9
|
+
任务区是**多写者共享**的:同一 `.tasks/` 可能被多人或多个 AI 参与。为避免互相覆盖,归档、归一化修复等工具内部写操作以排他锁(`.archive.lock`)防并发覆盖;人 / AI 的直接编辑遵循「先查后写」约定。约定:
|
|
10
|
+
|
|
11
|
+
1. **先查后写**:新建、更新或归档任务前,先 `toolkit tasks` 查看 active 总览,并核对 archive 是否已有同主题任务;已有则更新原文件,禁止重复建档。
|
|
12
|
+
2. **任务唯一键**:`{年月日}-{用户名}-{任务简述}` 唯一标识一个任务;多人对同一需求不得各自建档,应共用同一文件。
|
|
13
|
+
3. **归档与提交同批**:任务完成后先归档、再提交,保证任务记录与代码变更落在同一 git 提交。
|
|
14
|
+
4. **可执行项必须落地为任务**:方案正文里的「待办 / 待实施 / 待核对」等子项,应拆分为独立 active 任务,不留游离待办;`toolkit tasks check` 会扫描此类未闭合标记。
|
|
15
|
+
|
|
16
|
+
## 1. 目录结构
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
.tasks/
|
|
20
|
+
├── active/ # 实时任务(未完成)
|
|
21
|
+
│ └── {年月}/ # YYYYMM,如 202609
|
|
22
|
+
│ └── {年月日}-{用户名}-{任务简述}.md
|
|
23
|
+
└── archive/ # 任务归档(已完成)
|
|
24
|
+
└── {年月}/
|
|
25
|
+
└── {年月日}.md # 某天归档
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## 2. active 任务文件
|
|
29
|
+
|
|
30
|
+
### 2.1 命名
|
|
31
|
+
|
|
32
|
+
`{年月日}-{用户名}-{任务简述}.md`,示例 `20260902-唐启云-忘记密码.md`
|
|
33
|
+
|
|
34
|
+
- `年月日` = 任务创建日,`YYYYMMDD` 直接拼(不加 `-`)
|
|
35
|
+
- `用户名` = git 用户名
|
|
36
|
+
- `任务简述` = 简短中文短语(不加空格)
|
|
37
|
+
|
|
38
|
+
### 2.2 内容
|
|
39
|
+
|
|
40
|
+
文件顶部为 frontmatter(两行 `---` 包裹的 YAML 键值块),随后为正文。
|
|
41
|
+
|
|
42
|
+
```markdown
|
|
43
|
+
---
|
|
44
|
+
owner: 唐启云
|
|
45
|
+
status: 进行中
|
|
46
|
+
created: 20260902
|
|
47
|
+
updated: 20260902
|
|
48
|
+
completed: ''
|
|
49
|
+
depends_on: []
|
|
50
|
+
scope: app
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
# 任务标题
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
| 字段 | 类型 | 说明 |
|
|
57
|
+
| --- | --- | --- |
|
|
58
|
+
| owner | string | 负责人(git 用户名);缺失时 `check` 软告警 |
|
|
59
|
+
| status | enum | `待办` / `进行中` / `已完成` / `阻塞` / `已放弃` |
|
|
60
|
+
| created | string | 创建日 `YYYYMMDD`,应等于文件名日期前缀;缺失/不一致/格式错误时 `check` 软告警 |
|
|
61
|
+
| updated | string | 更新日 `YYYYMMDD` |
|
|
62
|
+
| completed | string | 完成时间 `YYYY-MM-DD HH:mm`,`status` 为 `已完成`/`已放弃` 时必填;纯日期写法(`YYYY-MM-DD`)会被补齐 `00:00`,仅日期未补全完整时间会软告警 |
|
|
63
|
+
| depends_on | array | 依赖任务文件名,引用可带 `.md` 扩展名(校验时自动归一为不含扩展名的 basename) |
|
|
64
|
+
| scope | string | 影响范围 |
|
|
65
|
+
|
|
66
|
+
> 文件名命名 `{年月日}-{用户名}-{任务简述}.md`(`年月日` = 创建日),不符规范或与 created 不一致时 `check` 软告警。
|
|
67
|
+
|
|
68
|
+
## 3. archive 归档文件
|
|
69
|
+
|
|
70
|
+
### 3.1 命名
|
|
71
|
+
|
|
72
|
+
`{年月日}.md`,按任务**完成时间**的日期(`YYYYMMDD`)划分。
|
|
73
|
+
|
|
74
|
+
### 3.2 内容
|
|
75
|
+
|
|
76
|
+
同一天完成的任务整合进同一文件,**按完成时间降序排序**(最新在前),任务之间用 `---` 分隔。每个任务块必须含**元数据行**(`> ` 开头,四字段:负责人 / 状态 / 范围 / 完成时间),缺失或不完整时可由 `toolkit tasks normalize --fix` 补齐:
|
|
77
|
+
|
|
78
|
+
```markdown
|
|
79
|
+
# 20260902 归档
|
|
80
|
+
|
|
81
|
+
## 20260902-唐启云-忘记密码
|
|
82
|
+
|
|
83
|
+
> 负责人:唐启云 状态:已完成 范围:app 完成时间:2026-09-02 14:30
|
|
84
|
+
|
|
85
|
+
# 忘记密码
|
|
86
|
+
(正文)
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## 20260902-唐启云-其他任务
|
|
91
|
+
|
|
92
|
+
> 负责人:唐启云 状态:已完成 范围:- 完成时间:2026-09-02 15:00
|
|
93
|
+
|
|
94
|
+
(正文)
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## 4. 归档规则
|
|
98
|
+
|
|
99
|
+
1. 归档触发是**人工 / 事件驱动**,非定时任务;常见触发时机为任务完成、相关变更提交版本控制之前,此时应先行归档再提交。
|
|
100
|
+
2. **任务级归档**:`status ∈ {已完成, 已放弃}` 且带 `completed` 的任务可归档。
|
|
101
|
+
3. `待办` / `进行中` / `阻塞` 均不归档。
|
|
102
|
+
4. 归档文件按 `completed` 的日期(`YYYYMMDD`)划分。
|
|
103
|
+
5. 归档文件内任务按 `completed` **降序**排序(最新在前,`YYYY-MM-DD HH:mm` 定宽字符串比较即时间序)。
|
|
104
|
+
6. **完成时间口径**:`completed` 只填真实收工时间,日期应与归档文件日期一致;不一致属「日期漂移」,`toolkit tasks normalize` 会检出,`--fix` 自动把漂移块迁移到对应日期文件(迁移前可用 `normalize` 只读检查);归档文件放错月份目录(如 `archive/202608/20260903.md`)时 `--fix` 会将其移动到正确月份目录。
|
|
105
|
+
7. **疑似任务块**:任务块判定要求标题后首个非空行为含「完成时间」的元数据行;形如 `{年月日}-{负责人}-{简述}` 的 `## ` 标题后跟 `> ` 元数据但缺「完成时间」时,会被视为疑似任务块并在 `normalize` 检出提示人工确认(不自动修复)。
|
|
106
|
+
8. **并发归档防护**:归档采用排他锁(`.archive.lock`),检测到并发归档时跳过并告警;`--dry-run` 可预演归档动作而不落盘。
|
|
107
|
+
|
|
108
|
+
## 5. 其他语言实现要点
|
|
109
|
+
|
|
110
|
+
按本规范实现时,需覆盖:
|
|
111
|
+
|
|
112
|
+
1. **frontmatter 解析**:读取文件顶部 `---` 之间的 `key: value` 行。
|
|
113
|
+
2. **目录遍历**:`active/` 下仅一层年月子目录,收集 `.md` 文件。
|
|
114
|
+
3. **完成时间提取**:从 frontmatter 的 `completed` 字段读取。
|
|
115
|
+
4. **归档合并**:读取已有归档文件的任务块,与新任务合并后按 `completed` 排序,重写归档文件。
|
|
116
|
+
5. **任务块分隔**:归档文件内任务以 `---` + `## ` 为边界,勿将正文内部的 `## ` 小节误判为任务边界。
|
|
117
|
+
6. **敏感信息脱敏(可选)**:如需保护隐私,可在写归档前对正文自由文本做掩码;`owner` 等结构化字段保留原值。
|
|
118
|
+
7. **校验(check)**:校验 active 任务 frontmatter 合法性(status 枚举、completed 必填与格式)、跨文件重名、`depends_on` 依赖存在性与成环。
|
|
119
|
+
8. **归一化(normalize)**:校验归档块元数据四字段完整性、完成时间与归档日期一致性、降序排序;`--fix` 可补齐缺失元数据并重排。
|
package/TRADEMARK.md
CHANGED
|
@@ -1,47 +1,47 @@
|
|
|
1
|
-
# 商标声明
|
|
2
|
-
|
|
3
|
-
## 基本信息
|
|
4
|
-
|
|
5
|
-
| 项目 | 内容 |
|
|
6
|
-
|---|---|
|
|
7
|
-
| 商标名称 | 方弦™ |
|
|
8
|
-
| 商标类型 | 文字商标 |
|
|
9
|
-
| 商标说明 | 商标由文字"方弦"组成 |
|
|
10
|
-
| 商标类别 | 第 42 类(共 10 项) |
|
|
11
|
-
| 注册号 | 89648411 |
|
|
12
|
-
| 申请人 | 唐启云 |
|
|
13
|
-
| 递交商标局 | 2026-01-12 |
|
|
14
|
-
| 版本 | 基础版 |
|
|
15
|
-
|
|
16
|
-
## 第 42 类服务项目
|
|
17
|
-
|
|
18
|
-
计算机出租;计算机软件设计;为他人研究和开发新产品;计算机软件维护;把有形的数据或文件转换成电子媒体;为他人创建和维护网站;网络服务器出租;提供互联网搜索引擎;托管计算机站(网站);云计算。
|
|
19
|
-
|
|
20
|
-
## 权利状态
|
|
21
|
-
|
|
22
|
-
本商标已向中国国家知识产权局商标局递交注册申请(申请号:89648411,递交日:2026-01-12),**目前尚未核准注册**。
|
|
23
|
-
|
|
24
|
-
在核准注册前,本商标标注为"方弦™",仅用于指明该名称的归属,不构成注册商标声明。
|
|
25
|
-
|
|
26
|
-
## 授权范围
|
|
27
|
-
|
|
28
|
-
本仓库的开源许可证(MIT License)仅授予代码的使用、修改和分发权利,**不构成对任何商标、服务标记或品牌名称的授权许可**。
|
|
29
|
-
|
|
30
|
-
任何派生作品、修改版本、商业产品均不得使用"方弦"名称、Logo 或相关标识,除非获得书面授权。
|
|
31
|
-
|
|
32
|
-
## 使用规范
|
|
33
|
-
|
|
34
|
-
- 在开源社区讨论、文档引用中提及本项目时,可使用"方弦™"指代本项目名称
|
|
35
|
-
- 未经书面授权,不得在任何商业产品、服务或宣传材料中使用"方弦"标识
|
|
36
|
-
|
|
37
|
-
## 获取授权
|
|
38
|
-
|
|
39
|
-
如需将"方弦"商标用于商业用途,请联系:唐启云 <tqy@fxri.net>
|
|
40
|
-
|
|
41
|
-
## 侵权处理
|
|
42
|
-
|
|
43
|
-
如发现未经授权使用"方弦"商标的行为,请通过上述联系方式举报。
|
|
44
|
-
|
|
45
|
-
---
|
|
46
|
-
|
|
47
|
-
*本声明随商标审查进度更新。*
|
|
1
|
+
# 商标声明
|
|
2
|
+
|
|
3
|
+
## 基本信息
|
|
4
|
+
|
|
5
|
+
| 项目 | 内容 |
|
|
6
|
+
|---|---|
|
|
7
|
+
| 商标名称 | 方弦™ |
|
|
8
|
+
| 商标类型 | 文字商标 |
|
|
9
|
+
| 商标说明 | 商标由文字"方弦"组成 |
|
|
10
|
+
| 商标类别 | 第 42 类(共 10 项) |
|
|
11
|
+
| 注册号 | 89648411 |
|
|
12
|
+
| 申请人 | 唐启云 |
|
|
13
|
+
| 递交商标局 | 2026-01-12 |
|
|
14
|
+
| 版本 | 基础版 |
|
|
15
|
+
|
|
16
|
+
## 第 42 类服务项目
|
|
17
|
+
|
|
18
|
+
计算机出租;计算机软件设计;为他人研究和开发新产品;计算机软件维护;把有形的数据或文件转换成电子媒体;为他人创建和维护网站;网络服务器出租;提供互联网搜索引擎;托管计算机站(网站);云计算。
|
|
19
|
+
|
|
20
|
+
## 权利状态
|
|
21
|
+
|
|
22
|
+
本商标已向中国国家知识产权局商标局递交注册申请(申请号:89648411,递交日:2026-01-12),**目前尚未核准注册**。
|
|
23
|
+
|
|
24
|
+
在核准注册前,本商标标注为"方弦™",仅用于指明该名称的归属,不构成注册商标声明。
|
|
25
|
+
|
|
26
|
+
## 授权范围
|
|
27
|
+
|
|
28
|
+
本仓库的开源许可证(MIT License)仅授予代码的使用、修改和分发权利,**不构成对任何商标、服务标记或品牌名称的授权许可**。
|
|
29
|
+
|
|
30
|
+
任何派生作品、修改版本、商业产品均不得使用"方弦"名称、Logo 或相关标识,除非获得书面授权。
|
|
31
|
+
|
|
32
|
+
## 使用规范
|
|
33
|
+
|
|
34
|
+
- 在开源社区讨论、文档引用中提及本项目时,可使用"方弦™"指代本项目名称
|
|
35
|
+
- 未经书面授权,不得在任何商业产品、服务或宣传材料中使用"方弦"标识
|
|
36
|
+
|
|
37
|
+
## 获取授权
|
|
38
|
+
|
|
39
|
+
如需将"方弦"商标用于商业用途,请联系:唐启云 <tqy@fxri.net>
|
|
40
|
+
|
|
41
|
+
## 侵权处理
|
|
42
|
+
|
|
43
|
+
如发现未经授权使用"方弦"商标的行为,请通过上述联系方式举报。
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
*本声明随商标审查进度更新。*
|