scrum-skills 0.2.2 → 0.2.4

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.
Files changed (140) hide show
  1. package/.agents/skills/scrum-planning/references/schema.md +3 -2
  2. package/README.md +49 -8
  3. package/assets/board/200.html +1 -1
  4. package/assets/board/404.html +1 -1
  5. package/assets/board/_nuxt/0VBLkWnu.js +1 -0
  6. package/assets/board/_nuxt/3G_ZLrk2.js +1 -0
  7. package/assets/board/_nuxt/51OWHj8c.js +2 -0
  8. package/assets/board/_nuxt/5qqsfNvn.js +1 -0
  9. package/assets/board/_nuxt/8QIcohze.js +1 -0
  10. package/assets/board/_nuxt/B0YDpoC7.js +1 -0
  11. package/assets/board/_nuxt/B3oUyqcV.js +1 -0
  12. package/assets/board/_nuxt/B43-KCi6.js +1 -0
  13. package/assets/board/_nuxt/B5oiGeHN.js +1 -0
  14. package/assets/board/_nuxt/BGssl5Ao.js +1 -0
  15. package/assets/board/_nuxt/BJW3UkS7.js +1 -0
  16. package/assets/board/_nuxt/BJcBC4jN.js +1 -0
  17. package/assets/board/_nuxt/BNKWWG8o.js +1 -0
  18. package/assets/board/_nuxt/BPTrRhcw.js +1 -0
  19. package/assets/board/_nuxt/BSov4ehT.js +1 -0
  20. package/assets/board/_nuxt/BTxVIV74.js +1 -0
  21. package/assets/board/_nuxt/B_SlFcWp.js +1 -0
  22. package/assets/board/_nuxt/Baq-Hrpf.js +1 -0
  23. package/assets/board/_nuxt/Bb3Limos.js +1 -0
  24. package/assets/board/_nuxt/Bh7eUS6e.js +1 -0
  25. package/assets/board/_nuxt/Bhg7noz0.js +1 -0
  26. package/assets/board/_nuxt/Bu60uYgs.js +1 -0
  27. package/assets/board/_nuxt/BuBpFHLu.js +2 -0
  28. package/assets/board/_nuxt/BuOKDFiJ.js +1 -0
  29. package/assets/board/_nuxt/BuuAjxsV.js +1 -0
  30. package/assets/board/_nuxt/C-GYjxwr.js +13 -0
  31. package/assets/board/_nuxt/C6wyeu66.js +1 -0
  32. package/assets/board/_nuxt/C9MiPNdJ.js +1 -0
  33. package/assets/board/_nuxt/C9StZL3D.js +3 -0
  34. package/assets/board/_nuxt/CD0uJuyA.js +1 -0
  35. package/assets/board/_nuxt/CDL4GvLz.js +1 -0
  36. package/assets/board/_nuxt/CHZ_IHOa.js +1 -0
  37. package/assets/board/_nuxt/CK9_veoz.js +1 -0
  38. package/assets/board/_nuxt/CNbS93H9.js +1 -0
  39. package/assets/board/_nuxt/CQTvWh4i.js +1 -0
  40. package/assets/board/_nuxt/CUnX_QKi.js +1 -0
  41. package/assets/board/_nuxt/C_uy5_kh.js +1 -0
  42. package/assets/board/_nuxt/CeiBZIn1.js +95 -0
  43. package/assets/board/_nuxt/Cfk_R787.js +1 -0
  44. package/assets/board/_nuxt/ChJuu-Ky.js +1 -0
  45. package/assets/board/_nuxt/CjRYYbsC.js +1 -0
  46. package/assets/board/_nuxt/Ck3md8pL.js +1 -0
  47. package/assets/board/_nuxt/CkDrD28D.js +1 -0
  48. package/assets/board/_nuxt/CmvybFI5.js +1 -0
  49. package/assets/board/_nuxt/CoBNWjS2.js +1 -0
  50. package/assets/board/_nuxt/CoPhTDCT.js +1 -0
  51. package/assets/board/_nuxt/Cq4Q0czX.js +1 -0
  52. package/assets/board/_nuxt/CsyY7ot8.js +1 -0
  53. package/assets/board/_nuxt/CuJUHLl8.js +1 -0
  54. package/assets/board/_nuxt/Cu_-fa7D.js +1 -0
  55. package/assets/board/_nuxt/CvFE1CeN.js +1 -0
  56. package/assets/board/_nuxt/CyAQx5wv.js +1 -0
  57. package/assets/board/_nuxt/D13eMNHe.js +1 -0
  58. package/assets/board/_nuxt/D1Yxjnz9.js +1 -0
  59. package/assets/board/_nuxt/D1_aWe_t.js +1 -0
  60. package/assets/board/_nuxt/D3YCAmfu.js +1 -0
  61. package/assets/board/_nuxt/D8Bpf7sE.js +1 -0
  62. package/assets/board/_nuxt/DHihWhf5.js +1 -0
  63. package/assets/board/_nuxt/DJUwhJ8T.js +1 -0
  64. package/assets/board/_nuxt/DLkAKotw.js +1 -0
  65. package/assets/board/_nuxt/DSaWoFHS.js +1 -0
  66. package/assets/board/_nuxt/DZo3dYLJ.js +3 -0
  67. package/assets/board/_nuxt/DaqxYsbV.js +1 -0
  68. package/assets/board/_nuxt/DdjjthKs.js +1 -0
  69. package/assets/board/_nuxt/DhhR1iR4.js +1 -0
  70. package/assets/board/_nuxt/DmKZi-Wo.js +1 -0
  71. package/assets/board/_nuxt/DpXJ_tCU.js +1 -0
  72. package/assets/board/_nuxt/DrbU50Zd.js +9 -0
  73. package/assets/board/_nuxt/DsF2J4jZ.js +1 -0
  74. package/assets/board/_nuxt/DsNkyZPc.js +1 -0
  75. package/assets/board/_nuxt/DtVfI_h9.js +1 -0
  76. package/assets/board/_nuxt/DwcwzwSx.js +1 -0
  77. package/assets/board/_nuxt/Dwd1XRDX.js +1 -0
  78. package/assets/board/_nuxt/HclZy1k7.js +1 -0
  79. package/assets/board/_nuxt/HrhQecsY.js +6 -0
  80. package/assets/board/_nuxt/HvSJjbUd.js +1 -0
  81. package/assets/board/_nuxt/KhBLkIKl.js +1 -0
  82. package/assets/board/_nuxt/MTucdeiW.js +1 -0
  83. package/assets/board/_nuxt/Oe3jsM_c.js +1 -0
  84. package/assets/board/_nuxt/RJtjdZeG.js +1 -0
  85. package/assets/board/_nuxt/RM4VQc4e.js +1 -0
  86. package/assets/board/_nuxt/Vo4wMbnS.js +1 -0
  87. package/assets/board/_nuxt/ZuoAH0hh.js +1 -0
  88. package/assets/board/_nuxt/_id_.B2NDKSlX.css +1 -0
  89. package/assets/board/_nuxt/builds/latest.json +1 -1
  90. package/assets/board/_nuxt/builds/meta/ecbff4a6-6538-49b0-9844-64f03ebd103a.json +1 -0
  91. package/assets/board/_nuxt/burndown.BCLMmigw.css +1 -0
  92. package/assets/board/_nuxt/entry.nk2xQ-sa.css +2 -0
  93. package/assets/board/_nuxt/epics.B4-eK1Py.css +1 -0
  94. package/assets/board/_nuxt/fFGyRlCx.js +1 -0
  95. package/assets/board/_nuxt/gantt.DATOqoZf.css +1 -0
  96. package/assets/board/_nuxt/l05SqxhY.js +1 -0
  97. package/assets/board/_nuxt/milestones.z-UuT44X.css +1 -0
  98. package/assets/board/_nuxt/oXSDGTSr.js +1 -0
  99. package/assets/board/_nuxt/obNw9aRV.js +3 -0
  100. package/assets/board/_nuxt/pages.Bi6nErnd.css +1 -0
  101. package/assets/board/_nuxt/u88eXCXy.js +1 -0
  102. package/assets/board/_nuxt/uGmbQYdY.js +1 -0
  103. package/assets/board/burndown/index.html +1 -1
  104. package/assets/board/epics/index.html +1 -1
  105. package/assets/board/gantt/index.html +1 -1
  106. package/assets/board/index.html +1 -1
  107. package/assets/board/milestones/index.html +1 -1
  108. package/bin/scrum-skills.mjs +34 -11
  109. package/package.json +40 -41
  110. package/templates/AGENTS.md +1 -1
  111. package/tools/agile-tools.mjs +504 -0
  112. package/tools/ai.mjs +464 -0
  113. package/tools/projects.mjs +140 -0
  114. package/tools/serve.mjs +60 -17
  115. package/tools/validate.mjs +21 -7
  116. package/assets/board/_nuxt/4lorSwrA.js +0 -1
  117. package/assets/board/_nuxt/7WA2NiBu.js +0 -1
  118. package/assets/board/_nuxt/BMkghBSN.js +0 -6
  119. package/assets/board/_nuxt/BO7jzDkR.js +0 -1
  120. package/assets/board/_nuxt/BZ3zxHIj.js +0 -1
  121. package/assets/board/_nuxt/BhF-44v-.js +0 -13
  122. package/assets/board/_nuxt/Brv_Bdja.js +0 -3
  123. package/assets/board/_nuxt/C3UUYAQd.js +0 -1
  124. package/assets/board/_nuxt/CJAcsUQO.js +0 -3
  125. package/assets/board/_nuxt/CNsYxQaQ.js +0 -1
  126. package/assets/board/_nuxt/CRaaiMq0.js +0 -1
  127. package/assets/board/_nuxt/CW444i7s.js +0 -1
  128. package/assets/board/_nuxt/CfONUjDo.js +0 -1
  129. package/assets/board/_nuxt/DKNZ_ohS.js +0 -1
  130. package/assets/board/_nuxt/DuWpPgcw.js +0 -3
  131. package/assets/board/_nuxt/LjrS__tx.js +0 -1
  132. package/assets/board/_nuxt/_id_.DhbZaLbc.css +0 -1
  133. package/assets/board/_nuxt/builds/meta/460252c3-0ea6-40d0-8f13-d20a01a88ad5.json +0 -1
  134. package/assets/board/_nuxt/burndown.BENzf335.css +0 -1
  135. package/assets/board/_nuxt/entry.CRMqPpqu.css +0 -2
  136. package/assets/board/_nuxt/epics.BeC881O2.css +0 -1
  137. package/assets/board/_nuxt/gantt.B1Ztrpq6.css +0 -1
  138. package/assets/board/_nuxt/laFvd4Y3.js +0 -16
  139. package/assets/board/_nuxt/milestones.B2QTaR0Y.css +0 -1
  140. package/assets/board/_nuxt/pages.DuMz_V7L.css +0 -1
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env node
1
+ #!/usr/bin/env node
2
2
  /**
3
3
  * scrum-skills CLI(零依赖,node >= 18)
4
4
  * 命令:
@@ -12,7 +12,7 @@
12
12
  * scrum-skills validate [dir] 校验敏捷数据(默认当前目录)
13
13
  */
14
14
  import { cpSync, mkdirSync, existsSync, writeFileSync, readFileSync, readdirSync, statSync } from 'node:fs';
15
- import { join, resolve, dirname } from 'node:path';
15
+ import { join, resolve, dirname, basename } from 'node:path';
16
16
  import { spawnSync } from 'node:child_process';
17
17
  import { fileURLToPath } from 'node:url';
18
18
 
@@ -31,6 +31,20 @@ scsk 是 scrum-skills 的等价简写,如: scsk serve`;
31
31
  const [cmd, ...args] = process.argv.slice(2);
32
32
  const fail = msg => { console.error(`✘ ${msg}`); process.exit(1); };
33
33
 
34
+ /**
35
+ * 备份一个即将被覆盖的文件,返回备份路径。
36
+ * 名字带时间戳:老做法固定叫 `*.bak`,第二次 update 就把上一次的备份顶掉了,
37
+ * 而 AGENTS.md 几乎一定会被本地改过,备份互相覆盖等于没备份。
38
+ */
39
+ function backupFile(file) {
40
+ const d = new Date();
41
+ const pad = n => String(n).padStart(2, '0');
42
+ const stamp = `${d.getFullYear()}${pad(d.getMonth() + 1)}${pad(d.getDate())}-${pad(d.getHours())}${pad(d.getMinutes())}${pad(d.getSeconds())}`;
43
+ let target = `${file}.${stamp}.bak`;
44
+ for (let i = 2; existsSync(target); i += 1) target = `${file}.${stamp}-${i}.bak`;
45
+ cpSync(file, target);
46
+ return target;
47
+ }
34
48
  function init() {
35
49
  const force = args.includes('--force');
36
50
  const dir = resolve(args.find(a => !a.startsWith('--')) || process.cwd());
@@ -38,9 +52,9 @@ function init() {
38
52
 
39
53
  const agentsMd = join(dir, 'AGENTS.md');
40
54
  if (existsSync(agentsMd) && !force)
41
- fail(`目标目录已有 AGENTS.md。确认覆盖请加 --force(旧文件会备份为 AGENTS.md.bak)`);
42
- const backed = existsSync(agentsMd);
43
- if (backed) cpSync(agentsMd, `${agentsMd}.bak`);
55
+ fail(`目标目录已有 AGENTS.md。确认覆盖请加 --force(旧文件会先备份成 AGENTS.md.<时间戳>.bak)`);
56
+ const backed = existsSync(agentsMd) ? backupFile(agentsMd) : null;
57
+ if (backed) console.log(`· 已把现有 AGENTS.md 备份为 ${basename(backed)}`);
44
58
 
45
59
  cpSync(join(PKG_ROOT, '.agents'), join(dir, '.agents'), { recursive: true, force: true });
46
60
  writeFileSync(agentsMd, readFileSync(join(PKG_ROOT, 'templates/AGENTS.md'), 'utf8'));
@@ -65,7 +79,7 @@ function init() {
65
79
 
66
80
  console.log(`✔ 已初始化到 ${dir}
67
81
  - .agents/skills/ 四个敏捷 skill(planning / sprint / tdd / report)
68
- - AGENTS.md agent 入口纪律文件${backed ? '(旧文件已备份为 AGENTS.md.bak)' : ''}
82
+ - AGENTS.md agent 入口纪律文件${backed ? `(旧文件已备份为 ${basename(backed)})` : ''}
69
83
  - tools/validate.mjs 数据校验脚本
70
84
  - agile/ 三文件结构${created.length ? `(新建 ${created.join('、')})` : '(已存在,未覆盖)'}
71
85
 
@@ -104,6 +118,8 @@ function update() {
104
118
  fail(`${dir} 未初始化(找不到 .agents/ 与 AGENTS.md)。请先运行: scrum-skills init`);
105
119
 
106
120
  const added = [], changed = [], same = [];
121
+ // 相对路径 → 备份文件名,覆盖完统一提示怎么把本地改动捞回来
122
+ const backups = [];
107
123
  for (const { rel, src } of frameworkFiles()) {
108
124
  const dest = join(dir, rel);
109
125
  const srcText = readFileSync(src, 'utf8');
@@ -114,19 +130,26 @@ function update() {
114
130
  if (readFileSync(dest, 'utf8') === srcText) { same.push(rel); continue; }
115
131
  changed.push(rel);
116
132
  if (!dryRun) {
117
- cpSync(dest, `${dest}.bak`); // 覆盖前备份,本地自定义不丢
133
+ const bak = backupFile(dest); // 覆盖前备份,本地自定义不丢
134
+ backups.push({ rel, bak: basename(bak) });
118
135
  writeFileSync(dest, srcText);
119
136
  }
120
137
  }
121
138
 
122
139
  const verb = dryRun ? '(dry-run,未写入)' : '';
140
+ const bakLines = backups.map(b => ` - ${b.rel} 的旧版本 → ${b.bak}`).join('\n');
123
141
  console.log(`✔ skill 框架文件更新完成${verb} — ${dir}
124
142
  - 新增 ${added.length} 个${added.length ? `: ${added.join(', ')}` : ''}
125
- - 更新 ${changed.length} 个(旧文件备份为 *.bak)${changed.length ? `: ${changed.join(', ')}` : ''}
143
+ - 更新 ${changed.length} 个${changed.length ? `: ${changed.join(', ')}` : ''}
126
144
  - 未变 ${same.length} 个
127
- - agile/ 数据目录未做任何改动
128
-
129
- ${changed.length ? '提示: 更新会覆盖目标项目里对框架文件的本地修改(已备份 *.bak)。若目标项目自定义过 skill,请 diff 对比后手动合并。' : '已是最新,无需操作。'}`);
145
+ - agile/ 数据目录未做任何改动${bakLines ? `\n - 覆盖前已备份${bakLines.replace(/^ {2}/gm, '\n ')}` : ''}
146
+
147
+ ${backups.length
148
+ ? `提示: 框架文件是整篇覆盖的,你在这几个文件里的本地改动都在上面的备份里。
149
+ 让 agent 助手(CodeBuddy / Claude Code 等)合并回来即可,直接说:
150
+ 「对比 ${backups[0].rel} 与 ${backups[0].bak},把我的本地改动合并回来」${backups.length > 1 ? `\n (其余 ${backups.length - 1} 个文件同理,备份文件名见上方)` : ''}
151
+ 确认合并无误后再删掉备份。AGENTS.md 是 agent 的入口纪律文件,先合并它、再让它去改别的文件最稳。`
152
+ : '已是最新,无需操作。'}`);
130
153
  }
131
154
 
132
155
  function runTool(script, needPort) {
package/package.json CHANGED
@@ -1,41 +1,40 @@
1
- {
2
- "name": "scrum-skills",
3
- "version": "0.2.2",
4
- "description": "结构化敏捷开发管理 skills + CLI:AI 对话产出结构化敏捷数据,TDD 驱动实施,Nuxt 看板可视化",
5
- "type": "module",
6
- "keywords": [
7
- "agile",
8
- "scrum",
9
- "sprint",
10
- "tdd",
11
- "kanban",
12
- "gantt",
13
- "burndown",
14
- "skills",
15
- "cli"
16
- ],
17
- "bin": {
18
- "scrum-skills": "./bin/scrum-skills.mjs",
19
- "scsk": "./bin/scrum-skills.mjs"
20
- },
21
- "scripts": {
22
- "validate": "node tools/validate.mjs",
23
- "serve": "node tools/serve.mjs",
24
- "test": "node --test",
25
- "dev": "pnpm --dir apps/board run dev",
26
- "build": "node scripts/build-board.mjs",
27
- "prepublishOnly": "node scripts/build-board.mjs"
28
- },
29
- "files": [
30
- "bin/",
31
- "tools/",
32
- "templates/",
33
- ".agents/",
34
- "assets/",
35
- "docs/"
36
- ],
37
- "engines": {
38
- "node": ">=18"
39
- },
40
- "license": "MIT"
41
- }
1
+ {
2
+ "name": "scrum-skills",
3
+ "version": "0.2.4",
4
+ "description": "结构化敏捷开发管理 skills + CLI:AI 对话产出结构化敏捷数据,TDD 驱动实施,Nuxt 看板可视化",
5
+ "type": "module",
6
+ "keywords": [
7
+ "agile",
8
+ "scrum",
9
+ "sprint",
10
+ "tdd",
11
+ "kanban",
12
+ "gantt",
13
+ "burndown",
14
+ "skills",
15
+ "cli"
16
+ ],
17
+ "bin": {
18
+ "scrum-skills": "./bin/scrum-skills.mjs",
19
+ "scsk": "./bin/scrum-skills.mjs"
20
+ },
21
+ "files": [
22
+ "bin/",
23
+ "tools/",
24
+ "templates/",
25
+ ".agents/",
26
+ "assets/",
27
+ "docs/"
28
+ ],
29
+ "engines": {
30
+ "node": ">=18"
31
+ },
32
+ "license": "MIT",
33
+ "scripts": {
34
+ "validate": "node tools/validate.mjs",
35
+ "serve": "node tools/serve.mjs",
36
+ "test": "node --test",
37
+ "dev": "pnpm --dir apps/board run dev",
38
+ "build": "node scripts/build-board.mjs"
39
+ }
40
+ }
@@ -32,7 +32,7 @@
32
32
 
33
33
  ## 状态机(摘要)
34
34
 
35
- - story: `draft → ready → in-progress → review → done`
35
+ - story: `draft → ready → in-progress → review → done`;不做就走 `cancelled`(已取消,终态,不要求验收与任务全 done)
36
36
  - task: `todo → red → green → refactored → done`(只能前进;task 状态编码了 TDD 阶段)
37
37
  - 详细规则与硬约束见 `.agents/skills/scrum-planning/references/schema.md`。
38
38