teamai-cli 0.16.2
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 +830 -0
- package/LICENSE +13 -0
- package/README.en.md +325 -0
- package/README.md +325 -0
- package/dist/index.js +11345 -0
- package/package.json +66 -0
- package/skills/teamai-share-learnings/SKILL.md +87 -0
- package/skills/teamai-wiki/SKILL.md +1019 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,830 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
|
+
|
|
5
|
+
## [Unreleased]
|
|
6
|
+
|
|
7
|
+
### ✨ 新功能
|
|
8
|
+
|
|
9
|
+
- **跨 agent skills 视图**:`teamai list` 新增 `--source <repo|local|all>` 和 `--agent <id>` 参数(默认 `--source all`)。`local` / `all` 模式会扫描所有已安装 AI agent 的 skills 目录,每个 skill 标注来源 `[team]` / `[builtin]` / `[source:<name>]` / `[local-only]`。`--verbose` 时展开每个 agent 的 skill 列表与描述摘要。未安装的 agent 不出现在输出里
|
|
10
|
+
- **Known agents 注册表**:内置 28 个 AI agent 路径(Claude Code / Cursor / Codex / Gemini CLI / Aider / Augment / Hermes / Copilot / KiloCode / Kiro / OpenCode / Qoder / Trae / Windsurf / WorkBuddy 等),自动检测哪些已安装。`teamai.yaml` 中显式配置的 `toolPaths` 优先生效
|
|
11
|
+
- **`teamai skill` 子命令组**:
|
|
12
|
+
- `teamai skill` 或 `teamai skill list`:等价 `teamai list skills --source all`
|
|
13
|
+
- `teamai skill show <name>`:查看单个 skill 的来源标签、命名空间、贡献者、`tags.yaml` 中的 tags、已安装的 agent 列表,以及 frontmatter 中的描述(最多 160 字符)。不渲染完整 SKILL.md 正文
|
|
14
|
+
|
|
15
|
+
## [0.14.2] (2026-04-16)
|
|
16
|
+
|
|
17
|
+
### 🐛 修复
|
|
18
|
+
|
|
19
|
+
- **pull role filtering**: 修复当团队无 `tags.yaml` 或用户无 tag 订阅时,`teamai pull` 同步角色外命名空间 skills 的问题 (!148)
|
|
20
|
+
|
|
21
|
+
## [0.14.0] (2026-04-16)
|
|
22
|
+
|
|
23
|
+
### ✨ 新功能
|
|
24
|
+
|
|
25
|
+
- **跨团队 Skill 订阅(Cross-team Source)**:`teamai source add/remove/list/browse` 订阅其他团队的公共 skill 仓库,pull 时自动同步订阅源的 skills (!141)
|
|
26
|
+
- `teamai source add <repo> [--name <alias>]` — 添加订阅源
|
|
27
|
+
- `teamai source remove <name>` — 移除订阅源并清理其 skills
|
|
28
|
+
- `teamai source list` — 列出已配置的订阅源
|
|
29
|
+
- `teamai source browse <name>` — 浏览订阅源的公共 skills
|
|
30
|
+
- **团队文化注入(Culture Engine Phase 1)**:在团队仓库创建 `culture.md`,`teamai pull` 时自动编译并注入到各 AI 工具的 `CLAUDE.md` 中 (!84)
|
|
31
|
+
- 支持 YAML frontmatter 定义公司/团队信息(name, mission, vision, values, goals)
|
|
32
|
+
- Markdown body 部分作为团队文化指引正文注入
|
|
33
|
+
- 通用 CLAUDE.md section 注入工具(`utils/claudemd.ts`),被 rules 和 culture 共用
|
|
34
|
+
- **Uninstall 命令**:`teamai uninstall [--force]` 智能清理所有 teamai 管理的资源(hooks、CLAUDE.md 块、skills、rules、env、docs、~/.teamai/),保留用户自建内容,支持 `--dry-run` 预览 (!137)
|
|
35
|
+
- **Dashboard 全生命周期会话展示**:dashboard 新增完整 session 生命周期追踪,支持展开查看会话详情(prompt 摘要、工具调用序列、时间线) (!140)
|
|
36
|
+
- **codex-internal 工具支持**:hooks 注入和资源同步新增对 codex-internal 的适配,与 claude-internal 同等待遇 (!143)
|
|
37
|
+
- **CLAUDE.md 团队知识库引用**:pull 时自动在 CLAUDE.md 中添加 `~/.teamai/learnings/` 目录引用,AI 工具可直接发现团队知识库 (!139)
|
|
38
|
+
- **Init 非交互模式**:新增 `--role <id>` 和 `--force` 参数,支持完全非交互式初始化,适合 CI/CD 和 AI agent 自动化 (!138)
|
|
39
|
+
- `teamai init --repo owner/repo --scope user --role hai_dev --force`
|
|
40
|
+
- 非 TTY 环境下自动使用默认值,不再 hang
|
|
41
|
+
- **共享 Prompt 工具**:统一 6 个模块(init/uninstall/update/remove/push/roles-cmd)的 readline 实现为单例模式,修复管道输入兼容性问题 (!138)
|
|
42
|
+
- **Push 交互式命名空间选择**:推送新 skill 时,CLI 自动检测团队仓库中的命名空间并提供交互式选择,无需手动指定 `--role` (!128)
|
|
43
|
+
- 有 `primaryRole` 时,从 manifest 展开可用 namespace 列表
|
|
44
|
+
- 无 `primaryRole` 时,自动扫描团队仓库目录结构
|
|
45
|
+
- 单一命名空间时自动选中,`--silent` 模式下使用默认值
|
|
46
|
+
- **Push 自动注入 YAML Frontmatter**:推送 skill 时自动检查 `SKILL.md`,缺少 `name`/`description` frontmatter 则自动补全 (!130)
|
|
47
|
+
- 从目录名推导 `name`,从第一个标题或有意义文本行推导 `description`
|
|
48
|
+
- 已有完整 frontmatter 的文件不做任何修改
|
|
49
|
+
|
|
50
|
+
### 🐛 修复
|
|
51
|
+
|
|
52
|
+
- **Pull cache 失效修复**:切换 role 后自动清理过期 skills 缓存,确保新角色立即生效 (!142)
|
|
53
|
+
- **Learnings 改为扁平共享模型**:learnings 不再按角色 namespace 隔离,全团队共享 (!126)
|
|
54
|
+
- **Push role 模式过滤修正**:修复 role 模式下误显示非允许命名空间 skill 的问题 (!127)
|
|
55
|
+
- **Push 支持无 role 的 namespaced 仓库**:无 `primaryRole` 配置时也能正确推送到有命名空间结构的团队仓库 (!129)
|
|
56
|
+
- **Votes 不再阻塞 push**:votes 改为本地存储(`~/.teamai/votes/`),由 `teamai pull` 的 auto-report 统一同步到团队仓库,不再直接写入 repo 导致脏文件阻塞 git 操作 (!131)
|
|
57
|
+
- **Pull 跳过未安装的 AI 工具**:pull 时检测工具是否已安装,跳过未安装工具,不再创建多余的空目录 (!132)
|
|
58
|
+
- **Team repo 自动恢复**:push/pull 前自动检测并恢复 team repo 的脏状态(unmerged 文件、残留 push 分支),使用 `git reset --hard` + 切回 master (!133, !134)
|
|
59
|
+
- **Auto-recall 误判修复**:修复源代码中的错误关键词被 auto-recall 误判为运行时错误触发搜索的问题 (!135)
|
|
60
|
+
|
|
61
|
+
## [0.13.2](https://git.woa.com/teamai/teamai-cli/compare/v0.13.1...v0.13.2) (2026-04-10)
|
|
62
|
+
|
|
63
|
+
### 🐛 修复
|
|
64
|
+
|
|
65
|
+
- 修复 Cursor hooks.json 中残留已废弃的 `userPromptSubmit` 事件 key 导致 "Invalid hooks.json" 报错的问题 (!122)
|
|
66
|
+
|
|
67
|
+
## [0.13.3](https://git.woa.com/teamai/teamai-cli/compare/v0.13.2...v0.13.3) (2026-04-10)
|
|
68
|
+
|
|
69
|
+
### ✨ 新功能
|
|
70
|
+
|
|
71
|
+
- **Roles CRUD 命令**:新增 `teamai roles add/remove/update`,管理员无需手动编辑 YAML 即可管理团队角色 (!125)
|
|
72
|
+
- `teamai roles add <id> --namespaces <ns> [-d <desc>]` — 添加角色
|
|
73
|
+
- `teamai roles remove <id>` — 删除角色
|
|
74
|
+
- `teamai roles update <id> --add-namespaces/--remove-namespaces` — 修改角色
|
|
75
|
+
|
|
76
|
+
### 🐛 修复
|
|
77
|
+
|
|
78
|
+
- **Pull 安全降级**:成员配置的角色被删除后,pull 不再崩溃,改为 warn + 回退全量同步 (!125)
|
|
79
|
+
- **Push namespace 解析**:从 manifest 读取实际 namespace 列表,不再错误地将 role id 当作 namespace (!125)
|
|
80
|
+
|
|
81
|
+
### 🔧 重构
|
|
82
|
+
|
|
83
|
+
- 抽出 `pushManifestChange()` 和 `pullLatest()` 共用函数,消除 `rolesInit` 中的重复代码 (!125)
|
|
84
|
+
- 新增 `saveRolesManifest()` 含写前校验,防止写入非法 manifest (!125)
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## [0.13.1](https://git.woa.com/teamai/teamai-cli/compare/v0.11.2...v0.13.1) (2026-04-09)
|
|
89
|
+
|
|
90
|
+
### ✨ 新功能
|
|
91
|
+
|
|
92
|
+
- **Roles 管理**:新增 `teamai roles` 命令组(`init`/`list`/`set`),支持团队角色的创建、列举和切换 (!113)
|
|
93
|
+
- **Role-aware Skill 同步**:`teamai pull/push` 支持按角色过滤 skill,不同角色看到不同的技能集 (!100)
|
|
94
|
+
- **Local Pushignore**:skill 目录支持 `.pushignore` 文件,push 时自动排除不需要同步的本地文件 (!114)
|
|
95
|
+
- **Marketplace 自动刷新**:skill push/remove 后自动刷新 `.codebuddy-plugin/marketplace.json`,兼容 CodeBuddy 插件市场 (!119)
|
|
96
|
+
|
|
97
|
+
### 🐛 修复
|
|
98
|
+
|
|
99
|
+
- 修复 roles manifest 缺失时 `teamai init` role 选择报错的问题 (!112)
|
|
100
|
+
- 修复 auto-recall 对自身输出产生递归误报的问题 (!111)
|
|
101
|
+
- 修复 auto-recall 搜索精度不足,新增 title/tag 匹配要求,跳过只读命令 (!104)
|
|
102
|
+
- 修复 Stop hook 使用错误的 output schema(`hookSpecificOutput` → `stopReason`)(!107, !108)
|
|
103
|
+
|
|
104
|
+
### ⚡ 性能优化
|
|
105
|
+
|
|
106
|
+
- **Team Repo 同步加速**:当 team repo HEAD 未变化时跳过资源同步,避免无意义的文件扫描 (!110)
|
|
107
|
+
- **Auto-recall 精准匹配**:matcher 从通配符 `*` 收窄为 4 个精确工具,减少不必要的触发 (!106)
|
|
108
|
+
|
|
109
|
+
### ♻️ 重构
|
|
110
|
+
|
|
111
|
+
- 统一 recall 机制 — hook 搜索工具,删除 session-recall 和 recall rule (!102)
|
|
112
|
+
- `contribute-check` 从 PostToolUse hook 迁移到 Stop hook,减少每次工具调用的开销 (!103)
|
|
113
|
+
- `role bucket` 重命名为 `namespace`,语义更清晰 (!105)
|
|
114
|
+
|
|
115
|
+
### 📝 文档
|
|
116
|
+
|
|
117
|
+
- 添加 CLAUDE.md 项目说明和发布流程 (!97)
|
|
118
|
+
- 文档中 tnpm 替换为标准 npm + --registry (!118)
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## [0.9.1](https://git.woa.com/teamai/teamai-cli/compare/v0.9.0...v0.9.1) (2026-03-30)
|
|
123
|
+
|
|
124
|
+
### 🔧 修复 debug.log 始终为空的问题
|
|
125
|
+
|
|
126
|
+
`~/.teamai/debug.log` 现在能正确记录所有 hook 运行时的调试和错误信息,方便排查 teamai 后台行为。
|
|
127
|
+
|
|
128
|
+
#### 问题根因
|
|
129
|
+
|
|
130
|
+
Hook 命令通过 `2>>~/.teamai/debug.log` 捕获 stderr,但代码中所有日志(包括错误)都写到 stdout(`console.log`),且 `--verbose` 默认关闭——三重静默导致 debug.log 永远为空。
|
|
131
|
+
|
|
132
|
+
#### 修复方案
|
|
133
|
+
|
|
134
|
+
- **File Transport**:所有 `log.debug()` 和 `log.error()` 调用现在同时写入 `~/.teamai/debug.log`,不再依赖 shell 的 stderr 重定向
|
|
135
|
+
- **ISO 时间戳**:每行日志带 `2026-03-30T06:32:14.123Z [DEBUG]` 格式前缀
|
|
136
|
+
- **错误级别拆分**:catch 块中的失败信息从 `log.debug` 改为 `log.error`,方便 `grep ERROR ~/.teamai/debug.log` 快速定位问题
|
|
137
|
+
- **自动 Rotation**:debug.log 超过 5MB 自动轮转为 `debug.log.1`,总占用不超过 10MB
|
|
138
|
+
- **同步写入**:使用 `appendFileSync` 确保短命 hook 进程不丢日志
|
|
139
|
+
|
|
140
|
+
#### 使用方式
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
# 查看最近的调试日志
|
|
144
|
+
tail -20 ~/.teamai/debug.log
|
|
145
|
+
|
|
146
|
+
# 快速找错误
|
|
147
|
+
grep ERROR ~/.teamai/debug.log
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## [0.9.0](https://git.woa.com/teamai/teamai-cli/compare/v0.8.1...v0.9.0) (2026-03-29)
|
|
153
|
+
|
|
154
|
+
### 🔌 内置规则自动部署 — AI 工具零配置接入团队知识库
|
|
155
|
+
|
|
156
|
+
`teamai pull` 现在会自动将 CLI 内置的 AI 规则(rules)部署到所有已安装的 AI 工具目录中,**团队成员无需手动配置**,pull 一次即可让 Claude Code / Cursor 等工具自动搜索团队知识库。
|
|
157
|
+
|
|
158
|
+
#### 工作原理
|
|
159
|
+
|
|
160
|
+
1. `teamai pull` 执行时,自动检测已安装的 AI 工具(Claude Code、Cursor 等)
|
|
161
|
+
2. 将内置规则写入各工具的 `rules/` 目录:
|
|
162
|
+
- `~/.claude/rules/teamai-recall.md`
|
|
163
|
+
- `~/.claude-internal/rules/teamai-recall.md`
|
|
164
|
+
- `~/.cursor/rules/teamai-recall.md`
|
|
165
|
+
3. 规则内容随 CLI 版本更新,每次 pull 自动同步最新版本
|
|
166
|
+
|
|
167
|
+
#### 首个内置规则:`teamai-recall`
|
|
168
|
+
|
|
169
|
+
该规则指导 AI 在遇到错误、部署问题或不熟悉的模式时,**先搜索团队知识库**再从零开始解决:
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
teamai recall "API timeout retry"
|
|
173
|
+
teamai recall "K8s OOM pod restart"
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
#### 设计要点
|
|
177
|
+
|
|
178
|
+
- **零配置** — pull 即生效,团队成员不需要手动复制规则文件
|
|
179
|
+
- **跳过未安装工具** — 自动检测,只部署到已安装的 AI 工具
|
|
180
|
+
- **与团队规则隔离** — `teamai push` 不会误将内置规则推送到团队仓库
|
|
181
|
+
- **可扩展** — 后续可轻松添加更多内置规则
|
|
182
|
+
|
|
183
|
+
#### 完善知识飞轮闭环
|
|
184
|
+
|
|
185
|
+
```
|
|
186
|
+
contribute(写入) → pull(同步+索引+部署规则) → AI 自动 recall(搜索) → upvote(投票)
|
|
187
|
+
↑ NEW
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
## [0.8.1](https://git.woa.com/teamai/teamai-cli/compare/v0.8.0...v0.8.1) (2026-03-28)
|
|
191
|
+
|
|
192
|
+
### Digest 隐私改进 + Skill 动态展示
|
|
193
|
+
|
|
194
|
+
#### 隐私改进
|
|
195
|
+
|
|
196
|
+
* **移除 digest 中的个人可推断信息** — `(142 uses by 3 member(s))` → `(142 uses)`,小团队中不再能反推谁用了什么
|
|
197
|
+
* **移除 skill 推荐中的百分比** — `used by 57% of team` → `popular with your team`,同理保护隐私
|
|
198
|
+
|
|
199
|
+
#### 新功能
|
|
200
|
+
|
|
201
|
+
* **Digest 新增 Skill 动态** — `teamai digest` 现在展示近 7 天新增和更新的 Skill
|
|
202
|
+
- 🆕 New Skills This Week — 新创建的 skill,显示作者
|
|
203
|
+
- 🔄 Recently Updated Skills — 有内容更新的 skill
|
|
204
|
+
- 数据来源:team repo 的 git log,零额外配置
|
|
205
|
+
|
|
206
|
+
#### 示例
|
|
207
|
+
|
|
208
|
+
```
|
|
209
|
+
🆕 New Skills This Week:
|
|
210
|
+
• hai-gpu-sold-report (by jeffyxu)
|
|
211
|
+
• hai-prod-db (by keitewang)
|
|
212
|
+
|
|
213
|
+
🔄 Recently Updated Skills:
|
|
214
|
+
• tke-deploy
|
|
215
|
+
• hai-deploy-quick
|
|
216
|
+
• tapd-tech-design
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
## [0.8.0](https://git.woa.com/teamai/teamai-cli/compare/v0.7.1...v0.8.0) (2026-03-28)
|
|
220
|
+
|
|
221
|
+
### 🧠 Git-Native Memory — 团队知识回忆系统
|
|
222
|
+
|
|
223
|
+
借鉴 [vectorize-io/hindsight](https://github.com/vectorize-io/hindsight) 的 retain/recall 记忆模型,为 teamai 补全知识飞轮的"读出路径"。之前通过 `/teamai-share-learnings` 贡献的经验文档写了没人看,现在 AI 可以通过 `teamai recall` 自动搜索和引用。
|
|
224
|
+
|
|
225
|
+
**知识飞轮闭环:** `contribute(写入) → pull(同步+索引) → recall(搜索) → upvote(投票) → 排序优化`
|
|
226
|
+
|
|
227
|
+
#### 新功能
|
|
228
|
+
|
|
229
|
+
* **`teamai recall <query>`** — 搜索团队知识库,返回按相关性排名的结果 ([!81](https://git.woa.com/teamai/teamai-cli/-/merge_requests/81))
|
|
230
|
+
* **Pull 自动同步 learnings** — `teamai pull` 现在会同步 `learnings/` 目录到本地,并自动重建搜索索引
|
|
231
|
+
* **Hybrid 中英文搜索** — Intl.Segmenter 拆分英文词 + CJK bigrams 捕捉中文复合词(如"超时""排查"),解决纯 Segmenter 把中文拆成单字的问题
|
|
232
|
+
* **搜索自动投票** — recall 返回结果时自动为文档投票(`votes/<user>.yaml`),好文档随时间自然浮到顶部
|
|
233
|
+
* **Frontmatter 标准化** — SKILL.md 模板要求 AI 生成的文档包含 `title/author/date/tags` YAML frontmatter,提升搜索精准度
|
|
234
|
+
|
|
235
|
+
#### 搜索评分规则
|
|
236
|
+
|
|
237
|
+
| 匹配类型 | 分值 | 说明 |
|
|
238
|
+
|----------|------|------|
|
|
239
|
+
| 标题命中 | ×3 | frontmatter title 中的词匹配 |
|
|
240
|
+
| 标签命中 | ×2 | frontmatter tags 中的词匹配 |
|
|
241
|
+
| 正文命中 | ×1 | 文档正文(前 2000 字)中的词匹配 |
|
|
242
|
+
| 投票加分 | +0.5/票 | 每票 +0.5,上限 5 分 |
|
|
243
|
+
|
|
244
|
+
#### 示例
|
|
245
|
+
|
|
246
|
+
```bash
|
|
247
|
+
$ teamai recall "fuse 端口"
|
|
248
|
+
--- [teamai:recall:start] --- (1 result)
|
|
249
|
+
|
|
250
|
+
[1/1] MR 审查发现 FUSE 端口冲突 Bug 及 UpdateInferService 接口测试验证 ★1
|
|
251
|
+
Author: jeffyxu | Date: 2026-03-28 | Score: 18.5
|
|
252
|
+
Tags: troubleshooting, code-review, tdd, hai_flow, fuse, k8s
|
|
253
|
+
File: ~/.teamai/learnings/mr审查发现fuse端口冲突bug及...md
|
|
254
|
+
|
|
255
|
+
--- [teamai:recall:end] ---
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
#### 技术细节
|
|
259
|
+
|
|
260
|
+
| 文件 | 说明 |
|
|
261
|
+
|------|------|
|
|
262
|
+
| `src/utils/search-index.ts` | 搜索引擎核心:hybrid tokenize, buildIndex, loadIndex, search |
|
|
263
|
+
| `src/recall.ts` | recall CLI 命令 + autoUpvote |
|
|
264
|
+
| `src/types.ts` | LearningDoc, SearchIndex, UserVotes 类型 |
|
|
265
|
+
| `src/pull.ts` | learnings 同步 + 索引重建(内联实现,不继承 ResourceHandler) |
|
|
266
|
+
| `src/team-push.ts` | auto-report 扩展:投票数据随 pull 捎带推送 |
|
|
267
|
+
|
|
268
|
+
**测试:** 29 个新测试,全量 444 通过。
|
|
269
|
+
**设计文档:** `docs/designs/git-native-memory.md`
|
|
270
|
+
|
|
271
|
+
## [0.7.1](https://git.woa.com/teamai/teamai-cli/compare/v0.7.0...v0.7.1) (2026-03-28)
|
|
272
|
+
|
|
273
|
+
### 改进 contribute 经验分享系统
|
|
274
|
+
|
|
275
|
+
**目录重命名:** `ai-docs/` → `learnings/`,语义更清晰。
|
|
276
|
+
|
|
277
|
+
**smartScore 评分修复:** 之前的评分逻辑导致提醒从未触发(13 个 session,0 个达标)。
|
|
278
|
+
- 新增 toolCount 梯度维度(30→10, 50→15, 80+→20,max 20 分)
|
|
279
|
+
- Skill/Error 权重从 25 分降至 15 分(大多数有价值 session 不一定用到)
|
|
280
|
+
- 阈值从 60 降至 35
|
|
281
|
+
- 真实数据验证:7 个历史 session 中 6 个可触发(之前 0 个)
|
|
282
|
+
|
|
283
|
+
**文件名格式:** `data-<slug>-<random>.md` → `<slug>-<date>-<random>.md`,加入日期便于辨识。
|
|
284
|
+
|
|
285
|
+
**中文文档模板:** SKILL.md 改为中文模板,AI 生成的经验文档默认中文撰写。
|
|
286
|
+
|
|
287
|
+
**测试:** 新增 2 个测试用例(toolCount gradient + 典型 session 集成),全量 12 个 contribute-check 测试通过。
|
|
288
|
+
|
|
289
|
+
## [0.7.0](https://git.woa.com/teamai/teamai-cli/compare/v0.6.2...v0.7.0) (2026-03-28)
|
|
290
|
+
|
|
291
|
+
### 🚀 `teamai hooks` 子命令 + update 钩子刷新修复
|
|
292
|
+
|
|
293
|
+
CLI 升级后新钩子永远无法自动注入的 bug 终于修复。根因:`update.ts` 在 `npm install -g` 后直接调用内存中的 `injectHooksToAllTools()`,但 Node.js 进程仍加载旧版代码,新版代码在磁盘上却不会被重新加载。
|
|
294
|
+
|
|
295
|
+
**新命令:**
|
|
296
|
+
- `teamai hooks inject` — 将 teamai 钩子注入所有 AI 工具的 settings 文件(支持 `--silent` 静默模式)
|
|
297
|
+
- `teamai hooks remove` — 从所有 AI 工具的 settings 文件中移除 teamai 钩子
|
|
298
|
+
|
|
299
|
+
**Bug Fix:**
|
|
300
|
+
- `teamai update` 安装新版后,改为 spawn `teamai hooks inject --silent` 子进程,确保加载磁盘上的新版代码,而非旧进程内存中的过时代码
|
|
301
|
+
|
|
302
|
+
**Doctor 增强:**
|
|
303
|
+
- `teamai doctor` 钩子检查从只检查 `pull` / description prefix 改为校验全部 6 个子命令(pull, update, track, track-slash, dashboard-report, contribute-check)
|
|
304
|
+
- 缺失子命令时建议运行 `teamai hooks inject`
|
|
305
|
+
|
|
306
|
+
**新 CLI 命令:**
|
|
307
|
+
| Command | Description |
|
|
308
|
+
|---------|-------------|
|
|
309
|
+
| `teamai hooks inject` | 注入 teamai 钩子到所有 AI 工具 settings |
|
|
310
|
+
| `teamai hooks remove` | 移除所有 AI 工具 settings 中的 teamai 钩子 |
|
|
311
|
+
|
|
312
|
+
**测试:**
|
|
313
|
+
- 新增 11 个测试用例(hooks-cmd 7 + doctor 4),全量 413 测试通过
|
|
314
|
+
|
|
315
|
+
**For Existing Users:**
|
|
316
|
+
无需手动操作。下次 `teamai update` 时新版代码会正确刷新钩子。如需手动修复,运行 `teamai hooks inject`。
|
|
317
|
+
|
|
318
|
+
### [0.6.2](https://git.woa.com/teamai/teamai-cli/compare/v0.6.1...v0.6.2) (2026-03-27)
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
### Improvements
|
|
322
|
+
|
|
323
|
+
* **contribute-check**: rename `hinted` → `evaluated`, add `smartScore` field ([!78](https://git.woa.com/teamai/teamai-cli/-/merge_requests/78))
|
|
324
|
+
- `hinted` 语义不准确(实际含义是"已评估"而非"已提示用户"),重命名为 `evaluated`
|
|
325
|
+
- 新增 `smartScore` 字段,持久化评估分数便于排查 session 为何未触发 hint
|
|
326
|
+
- `readContributeState` 向后兼容旧格式,自动迁移 `hinted` → `evaluated`
|
|
327
|
+
- Cursor 端补上遗漏的 `contribute-check` hook
|
|
328
|
+
|
|
329
|
+
### [0.6.1](https://git.woa.com/teamai/teamai-cli/compare/v0.6.0...v0.6.1) (2026-03-27)
|
|
330
|
+
|
|
331
|
+
|
|
332
|
+
### Bug Fixes
|
|
333
|
+
|
|
334
|
+
* **contribute-check**: per-session state files to prevent multi-window overwrite ([!77](https://git.woa.com/teamai/teamai-cli/-/merge_requests/77))
|
|
335
|
+
- `contribute-state.json` 单文件被多窗口互相覆盖,toolCount 反复归零
|
|
336
|
+
- 改为 `~/.teamai/sessions/{sessionId}.json`,每个 session 独立文件,零竞争
|
|
337
|
+
- 写入时自动清理超过 24h 的旧 session 文件
|
|
338
|
+
- `CONTRIBUTE_BASE_THRESHOLD` 从 100 降到 50,匹配实际 session 工具调用分布
|
|
339
|
+
|
|
340
|
+
## [0.6.0](https://git.woa.com/teamai/teamai-cli/compare/v0.5.2...v0.6.0) (2026-03-27)
|
|
341
|
+
|
|
342
|
+
### 🚀 Session 经验自动分享
|
|
343
|
+
|
|
344
|
+
AI coding session 中使用超过 100 次工具调用时,系统智能评估 session 价值并提示用户分享经验给团队。
|
|
345
|
+
|
|
346
|
+
**工作原理:**
|
|
347
|
+
|
|
348
|
+
```
|
|
349
|
+
AI coding session
|
|
350
|
+
│
|
|
351
|
+
▼ PostToolUse hook 每次工具调用自动计数(~1ms)
|
|
352
|
+
│
|
|
353
|
+
├─ < 100 次 → 静默计数
|
|
354
|
+
│
|
|
355
|
+
▼ 达到 100 次 → 智能评分
|
|
356
|
+
│
|
|
357
|
+
├─ 分数不够(只是重复调用同一个工具)→ 不打扰
|
|
358
|
+
│
|
|
359
|
+
▼ 分数达标(工具多样、用了 skill、有错误重试、session 够长)
|
|
360
|
+
│
|
|
361
|
+
AI 提示:"本次 session 内容丰富,建议运行 /teamai-share-learnings 分享经验"
|
|
362
|
+
│
|
|
363
|
+
▼ 用户同意 → AI sub-agent 生成摘要 → push 到团队仓库 ai-docs/
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
**新命令:**
|
|
367
|
+
- `teamai contribute --file <path> --title <title>` — 将经验文档推送到团队仓库 `ai-docs/` 目录
|
|
368
|
+
- `teamai contribute-check --stdin` — hook 内部使用,智能阈值检测
|
|
369
|
+
|
|
370
|
+
**内置 Skill:**
|
|
371
|
+
- `/teamai-share-learnings` — AI sub-agent 总结 session 经验并推送到团队仓库
|
|
372
|
+
- 随 `teamai pull/init` 自动部署到本地,CLI 升级时 skill 内容跟着更新
|
|
373
|
+
- `teamai push` 自动排除内置 skill,不会推到团队 repo
|
|
374
|
+
|
|
375
|
+
**智能评分机制:**
|
|
376
|
+
- 工具多样性(用了多少种不同工具)— 最高 30 分
|
|
377
|
+
- Skill 使用(触发了复杂工作流)— 25 分
|
|
378
|
+
- 错误和重试(踩坑经验更有价值)— 25 分
|
|
379
|
+
- Session 时长(> 30 分钟)— 20 分
|
|
380
|
+
- 总分 ≥ 60 才触发提示
|
|
381
|
+
|
|
382
|
+
**性能设计:**
|
|
383
|
+
- 两层检测:前 99 次只读写小 JSON state 文件(~1ms),不读 events.jsonl
|
|
384
|
+
- 达到 100 次时一次性读取 events.jsonl 做智能评估
|
|
385
|
+
- 每个 session 最多提示一次(去重),用户可忽略
|
|
386
|
+
|
|
387
|
+
**技术细节:**
|
|
388
|
+
- 新增 `contribute-check.ts`(阈值检测 + STDOUT hint)、`contribute.ts`(push 命令)、`builtin-skills.ts`(内置 skill 自动部署)
|
|
389
|
+
- 修改 `hooks.ts`(新增 PostToolUse contribute-check hook)、`pull.ts`/`init.ts`(内置 skill 部署)
|
|
390
|
+
- 15 个新单测 + 更新现有 hooks 测试
|
|
391
|
+
|
|
392
|
+
### [0.5.2](https://git.woa.com/teamai/teamai-cli/compare/v0.5.1...v0.5.2) (2026-03-26)
|
|
393
|
+
|
|
394
|
+
### Bug Fixes
|
|
395
|
+
|
|
396
|
+
* clean up stale local rule files during pull (merge request !71) ([30a4662](https://git.woa.com/teamai/teamai-cli/commit/30a466271394b2a7b2ca3d229aada3ea8cb57f17))
|
|
397
|
+
- `teamai pull` 现在会自动清理本地已从 team repo 删除的 rule 文件
|
|
398
|
+
- 之前从 team repo 删除 rule 后,本地 `~/.claude/rules/` 等目录会残留过期副本
|
|
399
|
+
- 清理逻辑:对比本地 `.md` 文件与 team repo,删除上游已不存在的文件
|
|
400
|
+
- 自动清理删除后留下的空子目录
|
|
401
|
+
- 仅影响 `.md` 文件,其他文件类型不受影响
|
|
402
|
+
- 新增 5 个测试用例覆盖各种清理场景
|
|
403
|
+
|
|
404
|
+
## [0.5.1](https://git.woa.com/teamai/teamai-cli/compare/v0.5.0...v0.5.1) (2026-03-25)
|
|
405
|
+
|
|
406
|
+
### Bug Fixes
|
|
407
|
+
|
|
408
|
+
* skip tracking slash commands for non-existent skills (merge request !70) ([8eb2778](https://git.woa.com/teamai/teamai-cli/commit/8eb2778))
|
|
409
|
+
- 输入 `/data` 等不存在的 skill 不再被计入 `teamai stats` 统计
|
|
410
|
+
- 新增 `skillExistsOnDisk()` 检查,验证 SKILL.md 存在后才记录
|
|
411
|
+
- 仅影响 slash command 路径,Skill tool 调用不受影响
|
|
412
|
+
|
|
413
|
+
## [0.5.0](https://git.woa.com/teamai/teamai-cli/compare/v0.4.5...v0.5.0) (2026-03-25)
|
|
414
|
+
|
|
415
|
+
### 🚀 AI Coding Session Dashboard (Phase 1)
|
|
416
|
+
|
|
417
|
+
新增 `teamai dashboard` 命令,在浏览器中实时展示所有 AI coding session 的状态。解决多窗口 Alt+Tab 切换的痛点。
|
|
418
|
+
|
|
419
|
+
**新命令:**
|
|
420
|
+
- `teamai dashboard` — 启动本地 Web UI(默认 localhost:3721),展示 session 状态卡片
|
|
421
|
+
- `teamai dashboard -p <port>` — 自定义端口
|
|
422
|
+
- `teamai dashboard-report --stdin --tool <name>` — hook 内部使用,上报 session 事件
|
|
423
|
+
|
|
424
|
+
**Dashboard 功能:**
|
|
425
|
+
- 🟢🟡🔴⚪ 状态灯:running / waiting / error / idle
|
|
426
|
+
- Session 卡片展示:工作目录 (cwd)、首个 prompt 摘要、最后使用工具、活动时间
|
|
427
|
+
- SSE 实时推送,延迟 < 3 秒
|
|
428
|
+
- Session 识别:session_id 优先 + PID+cwd fallback
|
|
429
|
+
- 自动清理:Stop hook + 5 分钟 idle 超时 + 30 分钟移除
|
|
430
|
+
- JSONL 事件日志 + 超过 10,000 行自动 compact
|
|
431
|
+
- 暗色主题 Web UI,零新依赖(Node.js 内置 http 模块)
|
|
432
|
+
|
|
433
|
+
**Hook 变更:**
|
|
434
|
+
- 新增 4 个独立 dashboard hooks(SessionStart / PostToolUse / UserPromptSubmit / Stop)
|
|
435
|
+
- 与现有 usage tracking hooks 完全解耦,可独立开关
|
|
436
|
+
|
|
437
|
+
### Features
|
|
438
|
+
|
|
439
|
+
* add AI coding session dashboard (Phase 1) (merge request !69) ([25308dd](https://git.woa.com/teamai/teamai-cli/commit/25308dd08a32ed52a3a43aa661475c0e6893c0ea))
|
|
440
|
+
|
|
441
|
+
|
|
442
|
+
### Bug Fixes
|
|
443
|
+
|
|
444
|
+
* cleanup all teamai hooks (including outdated descriptions) before re-inject ([8352449](https://git.woa.com/teamai/teamai-cli/commit/8352449fed58398a008440cd80b9760602431bf7))
|
|
445
|
+
* usage tracking tool field + auto hook cleanup (merge request !68) ([3086278](https://git.woa.com/teamai/teamai-cli/commit/30862780f86e883de5bd74c710e94ab502b8cf16))
|
|
446
|
+
* usage tracking tool field correctly identifies each AI tool (merge request !67) ([dfd51ca](https://git.woa.com/teamai/teamai-cli/commit/dfd51ca197729b14eea5e9977f37114f02c04c42))
|
|
447
|
+
|
|
448
|
+
## [0.4.7] - 2026-03-24
|
|
449
|
+
|
|
450
|
+
### Fixed
|
|
451
|
+
- **彻底清理重复 hooks**:`cleanupLegacyHooks` 现在清理所有命令含 teamai 的条目(无论有无 description),修复了 description 关键词改名(如 "Check for updates" → "Auto-update")导致的重复问题
|
|
452
|
+
|
|
453
|
+
### Tests
|
|
454
|
+
- 新增过时 description 清理测试,全量 340 测试通过
|
|
455
|
+
|
|
456
|
+
## [0.4.6] - 2026-03-24
|
|
457
|
+
|
|
458
|
+
### Fixed
|
|
459
|
+
- **Usage tracking `tool` 字段归因修复**:hook 命令从 `teamai track --stdin` 改为 `teamai track --stdin --tool <name>`,每个工具的 settings.json 注入各自标识(claude / claude-internal / codebuddy 等),usage 数据不再全部记为 `'claude'`
|
|
460
|
+
- **清理遗留重复 hooks**:早期版本注入的 hook 无 `description` 字段导致重复堆积,新增 `cleanupLegacyHooks()` 在注入前自动清理,非 teamai hook(如 continuous-learning)不受影响
|
|
461
|
+
|
|
462
|
+
### Added
|
|
463
|
+
- **Update 后自动刷新 hooks**:`teamai update` 成功安装新版后自动调用 `injectHooksToAllTools()`,老用户无需重新 `teamai init`,未初始化则静默跳过
|
|
464
|
+
- `track` / `track-slash` CLI 命令新增 `--tool <name>` option,缺省默认 `'claude'`(向后兼容)
|
|
465
|
+
|
|
466
|
+
### Tests
|
|
467
|
+
- 新增 17 个测试:--tool 参数传递、向后兼容、hook 命令字符串验证、遗留 hook 清理、非 teamai hook 保留、update 后 hooks 刷新
|
|
468
|
+
- 全量 317 测试通过,零回归
|
|
469
|
+
|
|
470
|
+
### For Existing Users
|
|
471
|
+
无需任何手动操作。下次 session 结束时 Stop hook 触发 `teamai update` → 自动安装新版 → 自动刷新 hooks + 清理重复条目。
|
|
472
|
+
|
|
473
|
+
## [0.4.5] - 2026-03-24
|
|
474
|
+
|
|
475
|
+
### Added
|
|
476
|
+
- **Slash Command 使用追踪**:新增 `UserPromptSubmit` hook 检测 `/slash-command` 调用(如 `/plan-eng-review`、`/tdd`),自动记录到 `usage.jsonl`
|
|
477
|
+
- 新增 `teamai track-slash --stdin` CLI 命令,解析 Claude Code 的 `UserPromptSubmit` hook JSON
|
|
478
|
+
- 支持冒号命名空间格式(如 `/gstack:tdd`)
|
|
479
|
+
- `teamai init` 自动注入 `UserPromptSubmit` hook 到 Claude Code settings.json
|
|
480
|
+
|
|
481
|
+
### Fixed
|
|
482
|
+
- **Usage 上报竞态条件**:`reportUsageToTeam` 改为先 `git pull` 获取最新远端 stats 再合并本地数据,防止并发 push 时相互覆盖导致数据丢失
|
|
483
|
+
|
|
484
|
+
### Changed
|
|
485
|
+
- **Hooks 注入重构**:`hooks.ts` 从 200+ 行嵌套 if/else 重构为数据驱动的 `CLAUDE_HOOKS[]` 数组 + 通用 `ensureClaudeHook()` 函数,新增 hook 只需加一行定义
|
|
486
|
+
- `stats.ts` 和 `team-push.ts` 之间新增交叉引用注释,标注两处 merge 逻辑的关联
|
|
487
|
+
|
|
488
|
+
### Tests
|
|
489
|
+
- 新增 8 个 trackSlashCommand 测试:合法追踪、冒号命名空间、非 slash 忽略、空 prompt、空 STDIN、畸形 JSON、known-skills 更新
|
|
490
|
+
- 全量 302 测试通过,零回归
|
|
491
|
+
|
|
492
|
+
### For Existing Users
|
|
493
|
+
存量用户下次 `teamai pull` 或重新运行 `teamai init` 后,`UserPromptSubmit` hook 会自动注入,无需手动操作。
|
|
494
|
+
|
|
495
|
+
## [0.4.4] - 2026-03-22
|
|
496
|
+
|
|
497
|
+
### Added
|
|
498
|
+
- **Cursor Skill 使用追踪**:通过 postToolUse hook (matcher: `Read`) 检测 SKILL.md 文件读取,自动记录 Cursor 用户的 skill 使用到 `usage.jsonl`
|
|
499
|
+
- `teamai init` 自动注入 postToolUse hook 到 Cursor 的 `hooks.json`
|
|
500
|
+
- `UsageEvent.tool` 字段区分 `cursor` / `claude`,支持按工具来源分析使用数据
|
|
501
|
+
- 适配 Cursor 原生 STDIN 格式(`file_path` 字段),经实际 hook 触发验证
|
|
502
|
+
- **Hook 自动更新**:stop hook 从 `teamai update --check` 改为 `teamai update`,支持根据 updatePolicy 自动安装更新(不再仅打印提示)
|
|
503
|
+
- `doUpdate` 通过 TTY 检测区分 hook/手动模式,非 TTY 环境下 prompt 策略自动降级为提示
|
|
504
|
+
|
|
505
|
+
### Tests
|
|
506
|
+
- 新增 7 个测试:Cursor Read + SKILL.md 路径追踪、file_path 原生格式、非 SKILL.md 忽略、工具来源标记验证
|
|
507
|
+
- 全量 294 测试通过,零回归
|
|
508
|
+
|
|
509
|
+
### For Existing Users
|
|
510
|
+
存量 Cursor 用户需重新运行 `teamai init` 以注入 postToolUse hook。Claude Code 用户无需操作,hook 会在下次会话结束时自动更新。
|
|
511
|
+
|
|
512
|
+
## [0.4.3] - 2026-03-22
|
|
513
|
+
|
|
514
|
+
### Fixed
|
|
515
|
+
- **Stats 数据每次上报后丢失(Critical)**:`reportUsageToTeam` 每次 `teamai pull` 时直接覆写 `stats/<user>.yaml`,不与历史数据合并,导致之前累积的统计全部丢失。修复后先读取已有 stats 文件,count 累加、lastUsed 取更新值
|
|
516
|
+
- **`teamai stats` 在 pull 后显示空数据**:`showStats` 只读 `usage.jsonl`(每次成功上报后被 truncate 清空),导致用户看到 "No skill usage data yet"。修复后同时读取本地 `usage.jsonl`(未上报事件)+ 团队仓库 `stats/<user>.yaml`(已上报历史),合并展示完整统计
|
|
517
|
+
- **Skill 名提取字段兼容性不足**:`extractSkillName` 仅检查 `skill`/`name` 字段,遗漏部分 AI 工具的 hook 格式
|
|
518
|
+
- 新增 `skill_name`、`command` 字段支持
|
|
519
|
+
- 支持从 SKILL.md 文件路径(如 `/root/.cursor/skills/tdd/SKILL.md`)中自动提取 skill 目录名
|
|
520
|
+
|
|
521
|
+
### Tests
|
|
522
|
+
- 新增 17 个测试用例:mergeStats 合并逻辑(4)、extractSkillName 多格式提取(9)、边界条件(4)
|
|
523
|
+
- 全量 288 测试通过,零回归
|
|
524
|
+
|
|
525
|
+
## [0.4.2] - 2026-03-20
|
|
526
|
+
|
|
527
|
+
### Fixed
|
|
528
|
+
- **Skill 使用追踪完全失效**:PostToolUse hook 通过环境变量 (`$CLAUDE_TOOL_NAME`) 读取数据,但 Claude Code 实际通过 STDIN JSON 传递。hook 每次收到空参数,从未记录任何真实 skill 使用事件
|
|
529
|
+
- 新增 `teamai track --stdin` 模式,从 STDIN 读取 Claude Code hook JSON 并解析 `tool_name`/`tool_input`
|
|
530
|
+
- Hook 命令从 `'teamai track "$CLAUDE_TOOL_NAME" ...'` 改为 `'teamai track --stdin'`
|
|
531
|
+
- 旧 CLI 参数方式仍兼容,支持手动测试
|
|
532
|
+
- **Skill 推荐始终显示 "you haven't tried it"**:`usage.jsonl` 上报到团队仓库后被 truncate 清空,但推荐引擎只读 `usage.jsonl`,丢失全部历史数据
|
|
533
|
+
- 新增 `~/.teamai/known-skills.json` 持久化已用 skill 集合,不受 truncate 影响
|
|
534
|
+
- 推荐引擎合并 `usage.jsonl`(未上报事件)+ `known-skills.json`(历史记录)两个数据源
|
|
535
|
+
- Hook 错误不再静默丢弃:stderr 从 `/dev/null` 改为追加到 `~/.teamai/debug.log`,方便排查
|
|
536
|
+
|
|
537
|
+
### For Existing Users
|
|
538
|
+
存量用户下次 `teamai pull` 时 hook 会自动升级为 `--stdin` 模式,无需手动操作。
|
|
539
|
+
|
|
540
|
+
## [0.4.1] - 2026-03-20
|
|
541
|
+
|
|
542
|
+
### Fixed
|
|
543
|
+
- `scanLocalForPush()` crash bug:遍历 `toolPaths` 时缺少 `toolPath.skills` null 检查,当工具配置没有 `skills` 字段时 `teamai push` 会崩溃 (TypeError)。该 bug 在 v0.3.13 重构时遗漏 (!61)
|
|
544
|
+
- `ToolPathsSchema.skills` 从 required 改为 optional,与运行时防御性检查一致
|
|
545
|
+
|
|
546
|
+
### Removed
|
|
547
|
+
- 清理 `syncTargets` 僵尸配置:v0.3.13 已改为自动检测工具,但 `syncTargets` 残留在 schema、init、28+ 处测试中。全部清除
|
|
548
|
+
- `init` 生成的 `teamai.yaml` 不再包含 `sharing.skills.syncTargets` 字段
|
|
549
|
+
|
|
550
|
+
## [0.4.0] - 2026-03-19
|
|
551
|
+
|
|
552
|
+
### Added
|
|
553
|
+
- **Skill Usage Tracking**: PostToolUse hook 自动追踪 Skill 工具调用,写入 `~/.teamai/usage.jsonl`
|
|
554
|
+
- `teamai track <toolName> [toolInput]` — hook 调用的底层命令,自带 skill name 校验(防 path traversal)
|
|
555
|
+
- `teamai stats` — 查看本地 skill 使用统计(次数 + 最近使用时间)
|
|
556
|
+
- `teamai init` 自动注入 PostToolUse hook 到 Claude Code / Claude Internal / CodeBuddy 的 settings.json
|
|
557
|
+
- **团队 Usage 自动上报**: `teamai pull` 时自动聚合本地 usage 数据为 `stats/<user>.yaml` 并 git push 到团队仓库
|
|
558
|
+
- Best-effort 策略,5s 超时,失败不阻塞 session 启动
|
|
559
|
+
- 上报成功后自动截断本地 JSONL,文件永远很小
|
|
560
|
+
- **Skill Health Score**: 两维评分 = usage(0-60) + freshness(0-40),0-100 分显示为 ★★★★★
|
|
561
|
+
- **Skill 推荐**: `teamai pull` 后自动推荐团队热门但用户未使用的 skill
|
|
562
|
+
- **Session 记录**: `teamai save-session [--summary "..."]` 收集会话工具使用记录并评估价值
|
|
563
|
+
- 有价值(含错误/重试/踩坑)的 session 标记为可推送
|
|
564
|
+
- 按月聚合存储到 `~/.teamai/sessions/<year-month>.md`
|
|
565
|
+
- **团队周报**: `teamai digest` 生成团队 AI 工具使用周报(最热 skill、活跃成员、session 摘要)
|
|
566
|
+
- 新增设计文档 `docs/designs/team-intelligence-platform.md`
|
|
567
|
+
- 新增 `TODOS.md` 记录延迟工作项
|
|
568
|
+
|
|
569
|
+
### New CLI Commands
|
|
570
|
+
| Command | Description |
|
|
571
|
+
|---------|-------------|
|
|
572
|
+
| `teamai track` | 追踪工具使用(PostToolUse hook 调用) |
|
|
573
|
+
| `teamai stats` | 查看本地 skill 使用统计 |
|
|
574
|
+
| `teamai save-session` | 保存会话工具使用摘要 |
|
|
575
|
+
| `teamai digest` | 生成团队周报 |
|
|
576
|
+
|
|
577
|
+
### For Existing Users
|
|
578
|
+
存量用户需重新运行 `teamai init` 以注入 PostToolUse hook。
|
|
579
|
+
|
|
580
|
+
## [0.3.14] - 2026-03-19
|
|
581
|
+
|
|
582
|
+
### Added
|
|
583
|
+
- 自动更新功能:新增 `teamai update [--check]` 命令,支持从 tnpm 检查并安装最新版本
|
|
584
|
+
- 24 小时版本检查缓存,避免频繁请求 registry
|
|
585
|
+
- 可配置更新策略:`auto`(自动安装)、`prompt`(提示确认)、`skip`(跳过)
|
|
586
|
+
- PID 文件锁防止并发安装冲突
|
|
587
|
+
- Session 结束自动检查更新:`teamai init` 自动注入 Stop/SessionEnd hook,AI 工具会话结束时自动检测新版本
|
|
588
|
+
|
|
589
|
+
## [0.3.13] - 2026-03-17
|
|
590
|
+
|
|
591
|
+
### Added
|
|
592
|
+
- OpenClaw 支持:skills 和 rules 自动同步到 `~/.openclaw/skills/` 和 `~/.openclaw/rules/` (!57)
|
|
593
|
+
|
|
594
|
+
### Changed
|
|
595
|
+
- Skills sync 改为自动检测已安装工具,不再依赖 `syncTargets` 配置 (!58)
|
|
596
|
+
- 遍历所有 `toolPaths` 并通过 `isToolInstalled` 检测 `~/` 下目录是否存在
|
|
597
|
+
- 新增工具无需修改 `teamai.yaml` 即可自动同步
|
|
598
|
+
- 与 rules sync 行为保持一致
|
|
599
|
+
|
|
600
|
+
### Fixed
|
|
601
|
+
- Cursor skills 路径修正:`.cursor/skills-cursor` → `.cursor/skills` (!56)
|
|
602
|
+
|
|
603
|
+
## [0.3.12] - 2026-03-12
|
|
604
|
+
|
|
605
|
+
### Fixed
|
|
606
|
+
- `teamai pull` docs 数量显示修复:之前始终显示 "Synced 1 docs",现在正确显示实际文件数(如 "Synced 2 docs")
|
|
607
|
+
- `teamai status` docs 计数修复:之前用 `listDirs` 统计目录数(结果为 0),改为用 `listFiles` 统计实际文档文件数
|
|
608
|
+
|
|
609
|
+
## [0.3.11] - 2026-03-12
|
|
610
|
+
|
|
611
|
+
### Fixed
|
|
612
|
+
- 文件系统操作(目录扫描、内容比较、复制、mtime 计算)全局过滤 `__pycache__/`、`.pyc`、`.DS_Store`、`node_modules` 等无关文件,避免 push/pull 时产生误判的"已修改"diff
|
|
613
|
+
|
|
614
|
+
## [0.3.10] - 2026-03-11
|
|
615
|
+
|
|
616
|
+
### Added
|
|
617
|
+
- Rules 子目录支持:`teamai push`/`pull` 递归扫描 rules 目录,支持按语言/类别组织规则文件(如 `common/`、`python/`、`golang/`)(!52)
|
|
618
|
+
- 新增 `listFilesRecursive()` 工具函数用于递归文件遍历
|
|
619
|
+
- `teamai push` 默认显示每个资源的源文件路径
|
|
620
|
+
|
|
621
|
+
### Changed
|
|
622
|
+
- CLAUDE.md 引用从逐文件列举改为目录级引用(`~/.claude/rules/`),减少上下文占用
|
|
623
|
+
- CLAUDE.md 新增 docs 目录引用(`~/.teamai/docs/`)
|
|
624
|
+
- `teamai pull` 日志从 "Merged N rule(s) into CLAUDE.md" 改为 "Synced N rule(s)"
|
|
625
|
+
|
|
626
|
+
## [0.3.9] - 2026-03-10
|
|
627
|
+
|
|
628
|
+
### Fixed
|
|
629
|
+
- `teamai init --repo group/subgroup/repo` 多级路径支持:`gf repo clone` 不支持三级及以上路径,改为回退到带 OAuth token 的 `git clone`
|
|
630
|
+
- `gfCreateRepo` 查找 namespace 时使用 `full_path` 匹配,修复多级 group 下创建仓库 namespace 匹配失败的问题
|
|
631
|
+
|
|
632
|
+
## [0.3.8] - 2026-03-10
|
|
633
|
+
|
|
634
|
+
### Added
|
|
635
|
+
- `teamai push` skill 推送时自动维护 CONTRIBUTORS 文件,记录每个 skill 的贡献者 (!46)
|
|
636
|
+
|
|
637
|
+
### Fixed
|
|
638
|
+
- `gfGetOAuthToken` 返回用户密码而非 OAuth token (!47)
|
|
639
|
+
- OAuth token 改为从 `~/.netrc` 读取,替代不可靠的 `git credential fill` (!48)
|
|
640
|
+
- 修正 OAuth token 相关的误导性注释 (!49)
|
|
641
|
+
- `gf mr create` MR title/description 使用 shell 单引号,修复换行符丢失问题 (!50)
|
|
642
|
+
- 支持多级 group 路径的仓库 URL 解析(如 `group/subgroup/repo`)(!42)
|
|
643
|
+
|
|
644
|
+
### Changed
|
|
645
|
+
- 简化 README,按角色(管理员/成员)分离快速上手指南 (!43, !45)
|
|
646
|
+
|
|
647
|
+
## [0.3.7] - 2026-03-09
|
|
648
|
+
|
|
649
|
+
### Fixed
|
|
650
|
+
- `gf mr create` 创建 MR 时 PushNotFastForward 错误:`pushRepoBranch` 在 push 后切回 master,导致 gf 内部 push HEAD 时分支不匹配。现在保持 HEAD 在 source branch 直到 MR 创建完成
|
|
651
|
+
|
|
652
|
+
## [0.3.6] - 2026-03-09
|
|
653
|
+
|
|
654
|
+
### Fixed
|
|
655
|
+
- `teamai remove` 创建 MR 失败("remote not found"):`gfMrCreate` 调用缺少 `cwd` 参数,导致 gf CLI 在错误目录下执行
|
|
656
|
+
|
|
657
|
+
## [0.3.5] - 2026-03-09
|
|
658
|
+
|
|
659
|
+
### Fixed
|
|
660
|
+
- `teamai members` 读取前先 `git pull`,确保能看到远程新注册的成员
|
|
661
|
+
- `teamai init` 已配置 reviewer 的团队仓库,新成员加入时不再重复提示配置 reviewer
|
|
662
|
+
|
|
663
|
+
## [0.3.3] - 2026-03-09
|
|
664
|
+
|
|
665
|
+
### Fixed
|
|
666
|
+
- `teamai init` 新成员注册 push 失败:当团队仓库中缺少某些 `.gitkeep` 文件时,`git add` 报错导致整个 push 失败,成员注册信息无法推送到远程 (!36)
|
|
667
|
+
|
|
668
|
+
## [0.3.2] - 2026-03-09
|
|
669
|
+
|
|
670
|
+
### Added
|
|
671
|
+
- `teamai push`/`teamai status` 检测本地已修改的 rules,在差异扫描中标记 modified 状态 (!31)
|
|
672
|
+
- 新增 `src/utils/fs.ts` 文件内容比对工具函数,支持跨工具目录的内容一致性检查
|
|
673
|
+
- 新增 `fs-compare.test.ts`、`rules.test.ts`、`skills.test.ts`、`skip-uninstalled-tools.test.ts` 测试文件
|
|
674
|
+
|
|
675
|
+
### Fixed
|
|
676
|
+
- `teamai pull` 跳过未安装的 AI 工具,不再向不存在的工具目录同步资源 (!34)
|
|
677
|
+
- `teamai push` 扫描改为跨所有工具目录比对内容,修复时间戳比较的 timing bug (!33)
|
|
678
|
+
- `teamai doctor` 不再误报 Cursor hook 缺失 (!32)
|
|
679
|
+
|
|
680
|
+
### Changed
|
|
681
|
+
- 项目名称由 "Team AI DevKit" 更名为 "团队 AI 经验共享框架 TeamAI" (!35)
|
|
682
|
+
|
|
683
|
+
## [0.3.1] - 2026-03-08
|
|
684
|
+
|
|
685
|
+
### Added
|
|
686
|
+
- `teamai pull` env 变量注入改为 source 文件引用方式,避免直接修改 shell profile (!30)
|
|
687
|
+
- env push 改为 deferred 模式,减少不必要的 MR 创建
|
|
688
|
+
|
|
689
|
+
## [0.3.0] - 2026-03-08
|
|
690
|
+
|
|
691
|
+
### Changed
|
|
692
|
+
- **重构资源类型**:移除 hooks 和 instincts 资源类型,简化架构 (!26)
|
|
693
|
+
|
|
694
|
+
### Fixed
|
|
695
|
+
- `teamai init` 处理不存在和空仓库的场景 (!27)
|
|
696
|
+
- `teamai init` clone path 修复及误判仓库不存在的问题 (!28)
|
|
697
|
+
|
|
698
|
+
### Removed
|
|
699
|
+
- 删除 `teamai sync` 命令(不安全的双向同步) (!29)
|
|
700
|
+
- 删除 `src/resources/hooks-config.ts` 和 `src/resources/instincts.ts`
|
|
701
|
+
|
|
702
|
+
## [0.2.4] - 2026-03-08
|
|
703
|
+
|
|
704
|
+
### Removed
|
|
705
|
+
- 删除 `teamai sync` 命令:该命令在 pull 阶段会无提示覆盖本地修改,存在数据丢失风险。请分别使用 `teamai push` 和 `teamai pull`
|
|
706
|
+
|
|
707
|
+
## [0.2.3] - 2026-03-08
|
|
708
|
+
|
|
709
|
+
### Fixed
|
|
710
|
+
- `teamai init` clone path 不再交互确认,直接使用默认路径 `~/.teamai/team-repo`
|
|
711
|
+
- 修复仓库存在却误判为"不存在"的问题:git 对象统计中的 `reused 404` 被误匹配为 HTTP 404
|
|
712
|
+
|
|
713
|
+
## [0.2.2] - 2026-03-07
|
|
714
|
+
|
|
715
|
+
### Fixed
|
|
716
|
+
- `teamai init` 不存在的远程仓库自动创建:检测到仓库不存在时询问用户确认,通过 TGit API 自动创建
|
|
717
|
+
- `teamai init` 空仓库克隆兜底:克隆空仓库后目录不存在时,自动 `git init` + 配置 remote
|
|
718
|
+
- `pushRepoDirectly` 首次 push 设置 upstream (`git push -u origin <branch>`),兼容 main/master 等分支名
|
|
719
|
+
|
|
720
|
+
### Added
|
|
721
|
+
- `gfGetOAuthToken()` 从 git credential store 提取 OAuth token
|
|
722
|
+
- `gfCreateRepo()` 通过 TGit REST API (Bearer auth) 创建远程仓库
|
|
723
|
+
- `RepoNotFoundError` 错误类型,区分"仓库不存在"和其他克隆错误
|
|
724
|
+
- `initRepo()` 本地 git 初始化 + 添加 remote 的工具函数
|
|
725
|
+
- `init.test.ts` 覆盖空仓库兜底、自动创建、用户拒绝、创建失败等场景
|
|
726
|
+
|
|
727
|
+
## [0.2.1] - 2026-03-07
|
|
728
|
+
|
|
729
|
+
### Fixed
|
|
730
|
+
- 修复 gf CLI 下载地址错误:改为从 `mirrors.tencent.com` 官方源下载
|
|
731
|
+
- 修复平台架构名称:x64/arm64(之前误用 amd64)
|
|
732
|
+
|
|
733
|
+
## [0.2.0] - 2026-03-07
|
|
734
|
+
|
|
735
|
+
### Changed
|
|
736
|
+
- **认证方式改造**:使用工蜂 CLI (`gf`) 替代手动 Private Token 配置
|
|
737
|
+
- `teamai init` 自动安装 gf CLI 到 `~/.teamai/gf/`(无需 sudo)
|
|
738
|
+
- 通过 `gf auth login` 交互式 OAuth 登录(支持 iOA、浏览器设备码、手动 Token)
|
|
739
|
+
- 不再需要手动获取和配置 `TGIT_TOKEN`
|
|
740
|
+
- **Clone 方式改造**:使用 `gf repo clone` 替代 simple-git clone
|
|
741
|
+
- gf clone 自动将 OAuth token 嵌入 remote URL,后续 git pull/push 无需额外认证
|
|
742
|
+
- **MR 创建改造**:使用 `gf mr create` 替代 TGit v3 REST API
|
|
743
|
+
- reviewer 直接传 username,不再需要查询 user ID
|
|
744
|
+
- 影响 `teamai push`、`teamai remove`、`teamai env add/remove`
|
|
745
|
+
|
|
746
|
+
### Removed
|
|
747
|
+
- 删除 `src/utils/tgit-api.ts`(TGit v3 REST API 客户端)及其测试文件
|
|
748
|
+
- 不再需要 `TGIT_TOKEN` 环境变量
|
|
749
|
+
- 移除手动 token 配置流程(`askSecret`、`openBrowser`、`saveTokenToEnvFile`)
|
|
750
|
+
- 移除 `resolveRepo` 预检查(`getProject`、`isRepoEmpty`、`fileExistsInRepo`)
|
|
751
|
+
|
|
752
|
+
### Added
|
|
753
|
+
- 新增 `src/utils/gf-cli.ts`:gf CLI 安装、认证、clone、MR 创建的完整封装
|
|
754
|
+
- `teamai doctor` 新增 gf CLI 安装和认证状态检查
|
|
755
|
+
|
|
756
|
+
## [0.1.14] - 2026-03-06
|
|
757
|
+
|
|
758
|
+
### Added
|
|
759
|
+
- 团队环境变量同步:新增 `env` 资源类型,支持从团队仓库 `env/env.yaml` 同步环境变量到成员的 shell 配置文件 (!23)
|
|
760
|
+
- `teamai env list` — 列出团队环境变量
|
|
761
|
+
- `teamai env add <key> <value>` — 添加/更新环境变量(通过 branch + MR 流程)
|
|
762
|
+
- `teamai env remove <key>` — 删除环境变量(通过 branch + MR 流程)
|
|
763
|
+
- `teamai pull` 自动将 env 变量注入 ~/.bashrc 或 ~/.zshrc,使用标记注释 `[teamai:env:start/end]` 实现幂等更新
|
|
764
|
+
- `teamai pull` 同时写入 `~/.teamai/env` 作为 KEY=VALUE 格式备份
|
|
765
|
+
- `teamai status` 显示 env 变量计数,`teamai list env` 显示变量详情
|
|
766
|
+
- `teamai doctor` 新增 shell profile env 注入检查项
|
|
767
|
+
- `teamai init` 创建 `env/` 目录,默认配置含 `env: { injectShellProfile: true }`
|
|
768
|
+
- 支持 `sharing.env.shellProfilePath` 自定义注入路径,`sharing.env.injectShellProfile: false` 禁用注入
|
|
769
|
+
|
|
770
|
+
## [0.1.13] - 2026-03-06
|
|
771
|
+
|
|
772
|
+
### Added
|
|
773
|
+
- `teamai pull` 输出详情:显示 skills/instincts 的新增/更新数量(如 `3 new, 29 updated`),hooks 显示实际条目数 (!20)
|
|
774
|
+
- TGit API `fileExistsInRepo` 辅助函数:检查远程仓库文件是否存在 (!18)
|
|
775
|
+
|
|
776
|
+
### Fixed
|
|
777
|
+
- `teamai --version` 从 `package.json` 动态读取版本号,不再硬编码(修复 0.1.12 版本号不一致问题)
|
|
778
|
+
- 修复 MR 创建时 `web_url` 返回 undefined 及 reviewer 未设置的问题(TGit v3 API 兼容) (!17)
|
|
779
|
+
- `teamai init` 对已有 teamai 仓库/已注册成员跳过多余确认提示 (!18, !19)
|
|
780
|
+
- `teamai init` 使用 `default_branch` 替代硬编码 `master` 检查远程文件 (!19)
|
|
781
|
+
- Session start hook 去掉 `--silent`,新会话启动时可见 pull 输出;`teamai init` 自动更新旧版 hook command (!20)
|
|
782
|
+
- `teamai pull` docs 目录只有 `.gitkeep` 时跳过同步,复制时过滤 dot 文件 (!20)
|
|
783
|
+
|
|
784
|
+
## [0.1.11] - 2026-03-05
|
|
785
|
+
|
|
786
|
+
### Added
|
|
787
|
+
- CodeBuddy IDE 支持:hooks/skills/rules 同步覆盖 CodeBuddy 工具目录 (!15)
|
|
788
|
+
- 分支 + MR 工作流:`teamai push` 改为创建独立分支并自动创建 Merge Request,支持 reviewer 审批 (!14)
|
|
789
|
+
- Tombstone 机制:已删除的资源不会被 `teamai push` 重新推送 (!12)
|
|
790
|
+
|
|
791
|
+
### Changed
|
|
792
|
+
- 简化成员管理:移除 readonly/write 角色系统,所有成员统一权限 (!13)
|
|
793
|
+
|
|
794
|
+
## [0.1.9] - 2026-03-05
|
|
795
|
+
|
|
796
|
+
### Added
|
|
797
|
+
- `teamai remove <type> <name>` 命令:从团队仓库和本地删除 skills/rules 资源 (!10)
|
|
798
|
+
- Cursor hooks 支持:`teamai init` 自动注入 `.cursor/hooks.json` 格式的 SessionStart hook (!9)
|
|
799
|
+
|
|
800
|
+
### Fixed
|
|
801
|
+
- 文档与代码对齐 (!11)
|
|
802
|
+
|
|
803
|
+
## [0.1.7] - 2026-03-05
|
|
804
|
+
|
|
805
|
+
### Added
|
|
806
|
+
- `teamai push` 支持推送 rules 到团队仓库 (!6)
|
|
807
|
+
- 成员角色管理:支持 readonly/write 角色区分 (!5)
|
|
808
|
+
- `teamai init --repo` 支持短格式 `owner/repo` (!1)
|
|
809
|
+
|
|
810
|
+
### Changed
|
|
811
|
+
- Rules 分发改为独立文件同步到各工具 rules 目录,不再内联到 CLAUDE.md (!7)
|
|
812
|
+
|
|
813
|
+
### Fixed
|
|
814
|
+
- `teamai init` 自动配置 git user (!4)
|
|
815
|
+
- TGIT_TOKEN 获取链接更新为 `/profile/account` (!2)
|
|
816
|
+
|
|
817
|
+
## [0.1.0] - 2026-03-03
|
|
818
|
+
|
|
819
|
+
### Added
|
|
820
|
+
- 初始发布
|
|
821
|
+
- `teamai init` — 初始化团队仓库关联、注册成员、注入 SessionStart hooks
|
|
822
|
+
- `teamai push` — 推送本地 skills 到团队仓库
|
|
823
|
+
- `teamai pull` — 拉取团队资源(skills、rules、hooks、docs)到本地 AI 工具目录
|
|
824
|
+
- `teamai sync` — 双向同步(push + pull)
|
|
825
|
+
- `teamai status` — 查看本地与团队仓库的差异
|
|
826
|
+
- `teamai list` — 列出团队资源
|
|
827
|
+
- `teamai members` — 列出团队成员
|
|
828
|
+
- `teamai doctor` — 诊断配置问题
|
|
829
|
+
- 支持 Claude Code、Codex、Claude Code Internal、Cursor 四种 AI 工具
|
|
830
|
+
- SessionStart hook 自动拉取团队最新内容
|