Add Aitbale Ability#377
Conversation
PeterGuy326
left a comment
There was a problem hiding this comment.
Review
跑了 go build ./...(过)、go test ./internal/helpers ./internal/cli ./internal/app(全过),并逐文件读了 diff。代码本身质量不错,但有一处必须确认的删除,外加几个建议改的点。
🔴 必须先确认:删了整个 best_practices 目录,但引用还在
本 PR 把 skills/mono/references/best_practices/ 整个删了——15 个文件(messaging / task / meeting / document / reporting / minutes×3 / directory / mail / _common/ / lite-recipes.md),外加 products/aitable/aitable-best-practices.md。其中 messaging/task/meeting/mail/minutes 跟 aitable 无关,超出了 PR 描述的 aitable/doc/drive/wiki/aiapp/devdoc 范围。
问题是引用没跟着删:
skills/mono/SKILL.md第 168–182 行,15 条链接全部指向已删除文件products/contact.md(3 处)、products/aisearch.md(1 处)、products/minutes.md(1 处)仍链向08-directory.md/10-minutes-speaker-match.md
结果 mono skill 会带着十几个死链发布。需要确认:
- 若是误删——非 aitable 的 recipe 不该进本 PR,建议还原;
- 若是有意瘦身——SKILL.md 和上述 3 个 product 文档必须在同一 PR 一起更新,不能留悬空链接。
注:
skill_verify静态测试只校验命令能否 dispatch,不查 markdown 死链,CI 不会拦住这个问题。
🟠 建议改
1. doc export 进度输出污染 JSON(internal/helpers/doc.go)
进度行从 stderr 移到了 stdout(progressOut := cmd.OutOrStdout()),而最终 JSON payload 也走 stdout。dws doc export --format json 的 stdout 会变成"进度文本 + JSON",拿 jq/脚本解析的消费方会失败。建议进度回到 stderr,或在 json 模式下抑制进度。
2. retry 包住了写操作(aitable_commands.go 的 runAitableProductTool)
retry 对所有 aitable 工具调用生效,含非幂等的 create_view(form create / view create 都走它)。首次超时但服务端实际成功时,重试会创建重复视图。建议只对读/幂等操作重试,或仅在服务端返回 retryable:true 时重试。
3. aitableMapHasRetryable 递归扫全响应
在整个响应树任意深度匹配 "retryable":true。成功的写操作若返回体里恰好含该字段,会被重试 3 次 → 重复写入。建议只看顶层 / error envelope。
4. 硬编码预发 endpoint(pkg/edition/default.go)
aitable-form 用的是 pre-mcp-gw.dingtalk.com(预发),而 OSS 默认其余地方用 prod mcp-gw.dingtalk.com(direct_runtime.go:77)。test/pre-mcp-discovery 分支上可理解,但别让这个 pre- 地址进 release tag。
🟡 小问题
aitableErrorRetryable用strings.Contains匹配"timeout"/"temporarily"等裸子串,易误命中,偏脆。doc export --output由可选改必填,是破坏性契约变更;现有文档都带--output,风险低,建议 CHANGELOG 记一笔。
✅ 做得好的
- build 通过,helpers/cli/app 测试全绿。
- form 命令服务端路由一致(product ID
aitable-form↔ServerInfo.ID,injectStaticServers注册无误)。 batch-update守卫到位(100 条上限、空值/JSON 校验)。- doc export 文件名解析(目录处理、URL 反转义、jobID 兜底)+ job-id 数字校验合理。
- 抽出
parseAitableCSVValues等共享 helper,减少重复。
关于 skill_verify
跑出 20 个失败,但全是 dws skill setup --mode mono(multi/* 的 SKILL.md 第 15 行),那些文件本 PR 没碰,是基线既有问题、与本 PR 无关;PR 新增的 aitable form / batch-update / doc export 命令引用全部 dispatch 通过。
建议:先就第 1 条对齐意图再决定合并;代码方向正确,改掉 2–4 会更稳。
|
已处理本轮 review 中确认需要修改的两点:
验证:
已推送提交: |
6e0b4b3 to
01df2ad
Compare
01df2ad to
4244032
Compare
Summary
What changed?
aitable,doc,drive,wiki,aiapp, anddevdoc.record batch-update, and compatible command/flag routing.doc exportbehavior to match expected CLI contracts: required--output, progress/job output to stdout, directory output auto filename handling, and invalid job-id validation.Why is this change needed?
Verification
make buildmake lintmake testmake policy./scripts/policy/check-generated-drift.sh./scripts/policy/check-command-surface.sh --strict(if command surface changed)Additional verification:
go test ./internal/helpersgo test ./internal/cli ./internal/app -run 'Aitable|Doc|Export|Supplement'aitable/doc/drive/wiki/aiapp/devdocdws ...command references