feishu-user-plugin 1.3.8 → 1.3.10
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/.claude-plugin/plugin.json +12 -2
- package/CHANGELOG.md +100 -12
- package/README.en.md +610 -0
- package/README.md +292 -532
- package/package.json +12 -5
- package/proto/lark.proto +10 -0
- package/scripts/explore-card-protobuf.js +144 -0
- package/scripts/explore-image-minimize.js +163 -0
- package/scripts/generate-og-image.js +39 -0
- package/scripts/generate-release-artifacts.js +318 -0
- package/scripts/probe-feishu-docx.js +203 -0
- package/scripts/sync-team-skills.sh +109 -7
- package/skills/feishu-user-plugin/SKILL.md +76 -4
- package/skills/feishu-user-plugin/references/CLAUDE.md +74 -54
- package/src/auth/credentials.js +36 -0
- package/src/cli.js +86 -45
- package/src/clients/user.js +15 -13
- package/src/events/cursor.js +103 -0
- package/src/events/event-buffer.js +8 -5
- package/src/events/event-log.js +151 -0
- package/src/events/index.js +8 -1
- package/src/events/lockfile.js +126 -0
- package/src/events/owner.js +73 -0
- package/src/events/ws-server.js +95 -25
- package/src/oauth.js +48 -7
- package/src/resolver.js +10 -0
- package/src/server.js +248 -29
- package/src/setup.js +99 -25
- package/src/test-all.js +12 -9
- package/src/test-events-cursor.js +56 -0
- package/src/test-events-lockfile.js +36 -0
- package/src/test-events-log.js +67 -0
- package/src/test-events-owner.js +64 -0
- package/src/test-fixtures/doc-blocks/sample-1.json +1256 -0
- package/src/test-read-doc-markdown.js +61 -0
- package/src/test-switch-profile.js +171 -0
- package/src/tools/diagnostics.js +10 -3
- package/src/tools/docs.js +93 -3
- package/src/tools/events.js +143 -33
- package/src/tools/messaging-bot.js +2 -3
- package/src/tools/messaging-user.js +23 -14
- package/src/tools/profile.js +12 -7
|
@@ -1,9 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "feishu-user-plugin",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.10",
|
|
4
4
|
"description": "All-in-one Feishu plugin for Claude Code — send messages as yourself, read chats (auto-expanded merge_forward), manage docs / bitable / wiki (full CRUD) / drive / OKR (with progress writes) / calendar (read+write) / Tasks v2 / multi-profile auto-switch / real-time WS events. 82 tools + 9 prompts, 3 auth layers.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "EthanQC"
|
|
7
7
|
},
|
|
8
|
-
"keywords": [
|
|
8
|
+
"keywords": [
|
|
9
|
+
"feishu",
|
|
10
|
+
"lark",
|
|
11
|
+
"claude-code",
|
|
12
|
+
"plugin",
|
|
13
|
+
"messaging",
|
|
14
|
+
"im",
|
|
15
|
+
"document",
|
|
16
|
+
"bitable",
|
|
17
|
+
"protobuf"
|
|
18
|
+
]
|
|
9
19
|
}
|
package/CHANGELOG.md
CHANGED
|
@@ -4,27 +4,115 @@ All notable changes to this project will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/), and this project adheres to [Semantic Versioning](https://semver.org/).
|
|
6
6
|
|
|
7
|
+
## [1.3.10] - 2026-05-09
|
|
8
|
+
|
|
9
|
+
Growth track 一次性 ship + Official MCP Registry 上架。本版无新工具(84 不变),主体是发现入口、文档语气与发布元数据:仓库一句话描述与 npm description 同步、GitHub Pages 中文优先 SEO landing 上线、`README.md` 主版本切到中文、`docs/launch/` 13 文件 launch 草稿就位、Dockerfile 给 Glama listing introspection 用、自定义 OG image 替代 GitHub 默认渲染、CONTRIBUTING.md 双语重写。所有用户可见文档统一去除 reverse-engineering / 暴力探测 / 营销腔 / 合规免责段。
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
- **Official MCP Registry 上架**:仓库根 `mcp-registry.json` 是 registry 元数据契约(schema `https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json`),`packages[].registryType=npm` + `transport.type=stdio` + 5 个 LARK_* 环境变量声明。`package.json::mcpName=io.github.EthanQC/feishu-user-plugin` 提供命名空间归属,与现有 OpenClaw 格式 `server.json` 并行不冲突。v1.3.10 起包同步推到 `registry.modelcontextprotocol.io/v0/servers/io.github.EthanQC/feishu-user-plugin`,下游 Smithery / mcp.run / LobeHub 自动拉取。
|
|
13
|
+
- **Dockerfile + .dockerignore**:仓库根 `node:20-alpine` + `npm ci --omit=dev`,`CMD ["node", "src/index.js"]` 走 stdio。Glama 等需 Docker introspection 的 marketplace 检查可直接跑(MCP server 启动不需要 LARK_* env,工具调用时才校验,所以 introspection 不需要凭证)。
|
|
14
|
+
- **GitHub Pages 中文优先 SEO landing**:`https://ethanqc.github.io/feishu-user-plugin/`(中文)+ `/en.html`(英文)。jekyll-cayman + jekyll-seo-tag + jekyll-sitemap,源在 `docs/`;`docs/_config.yml` exclude 内部 dev 文档(REFACTOR-NOTES、TESTING-METHODOLOGY、CREDENTIALS-FORMAT、COOKIE-PROTOBUF-CAPTURES、superpowers/)保持 SEO 信号集中。仓库 Homepage URL 指向 Pages。
|
|
15
|
+
- **OG image 1200×630(中文 stat 卡)**:`docs/og.png`(rendered from `docs/og.svg`)+ `scripts/generate-og-image.js`(@resvg/resvg-js + 系统 PingFang SC 字体)。jekyll-seo-tag defaults 引用 + `twitter:card=summary_large_image`,社交分享卡替代 GitHub 默认渲染。
|
|
16
|
+
- **`docs/launch/` 13 文件 launch material**:MCP 收录(awesome-mcp-servers 提交模板 / mcp-registry 提交步骤 / Anthropic Connectors 与 Cursor Marketplace 推迟到 v1.4 的阻塞清单)+ 中文长稿(掘金 3 实战场景 / 知乎专栏首篇 / 知乎答题目标清单)+ 平台短稿(V2EX 周五帖 / 飞书开放平台社区贴 / HelloGitHub 月刊自荐 / 阮一峰 weekly issue)+ 英文 X long thread。所有 drafts,等用户 dispatch。
|
|
17
|
+
- **CONTRIBUTING.md 双语重写**:post-v1.3.7 layout(`src/clients/official/<domain>.js` + `src/tools/<domain>.js` + `_registry.js` ctx 契约)+ 4 个 pre-commit gate(CLAUDE.md sync / 三角等价 / 工具数徽章 / smoke)+ commit 前缀 + 9 步新增工具流程。中文优先,英文并列段。
|
|
18
|
+
- **GitHub Discussions 启用**:作为社群运营 + 维护信号渠道,`announcements` / `Q&A` / `show-and-tell` 默认 categories。
|
|
19
|
+
- **4 个 good-first-issue**(#61-#64):CHANGELOG 历史回填 v1.3.0-v1.3.5;`README.en.md` section header 工具数对齐到 84;`read_doc_markdown` 测试覆盖;Cursor / Windsurf / OpenClaw 9 prompt 兼容矩阵。
|
|
20
|
+
- **`.github/pull_request_template.md` 更新**:丢弃过时的 `test-send.js` / `test-all.js` checklist,换成 4 个真实 gate(smoke / 三角等价 / CLAUDE.md sync / 依赖审)。
|
|
21
|
+
|
|
22
|
+
### Changed
|
|
23
|
+
- **README 主版本切到中文**:`README.md` 中文优先,`README.en.md` 是英文镜像;旧 `README_CN.md`(v1.3.4 起停滞,工具数仍写 74)删除。`package.json::files` 加 `README.en.md` 让 npm tarball 同时含两份。
|
|
24
|
+
- **About description 中文化**:GitHub repo 一句话描述从 "Feishu MCP Server using reverse-engineered protocol for user-identity messaging (not bot)" 换成中文版("飞书 MCP 服务器:让 Claude Code 与 Codex 直接接管你的飞书工作流...");npm description 走 `package.json` 英文版("All-in-one Feishu MCP server for Claude Code & Codex — 84 tools across 3 auth layers...")保持国际可见度。
|
|
25
|
+
- **topics 删 `reverse-engineering`**:标签 9 → 8(claude / claude-code / feishu / im / lark / mcp / messaging / protobuf)。
|
|
26
|
+
- **README + Pages + docs/launch/ 全部去 reverse-engineering / 暴力探测 / brute-force 框架**:用户可见文档统一改为 plain technical 语气,不再把 cookie + protobuf 协议路径写成"反向工程 / 暴力探测"。`send-as-user` 仍是核心差异化锚点,描述为"基于 cookie + protobuf 协议路径"。
|
|
27
|
+
- **删 ToS / 合规免责段**:README 与 Pages landing 顶部"个人 / 内部用途, 非商业 SaaS"段全部移除(用户判定为 performative,LICENSE + 技术现实已足够)。
|
|
28
|
+
- **`docs/launch/awesome-mcp-servers-pr.md` 增补 Glama listing 要求**:Glama bot 在 PR #6090 用 `missing-glama` label 标记并要求提交到 `glama.ai/mcp/servers` + 加 score badge。entry line 模板更新为含 Glama badge 版本(待 Glama listing 通过后才渲染分数)。
|
|
29
|
+
- **`docs/launch/mcp-registry-submission.md` 改为 agent-driven 版本**:从"用户跑 mcp-publisher CLI"换成"agent 装好 + 用 `gh auth token` 直连 login + publish",仅 GitHub OAuth 一次点击在用户侧(v1.3.10 ship 完后用 `github-oidc` 模式接进 GitHub Actions release workflow,CI 全自动)。
|
|
30
|
+
|
|
31
|
+
### Removed
|
|
32
|
+
- **`README_CN.md`(5 个版本 stale)**:内容由新主版本 `README.md` 取代。
|
|
33
|
+
- **demo 终端截图与生成脚本**:`docs/demo-send-as-user.{svg,png}` + `scripts/generate-demo-image.js` 全部移除(用户判定 README 不需要静态截图,OG image 已覆盖社交分享场景)。
|
|
34
|
+
- **README 顶部 ToS / 合规免责段**:移除(详见 Changed 段)。
|
|
35
|
+
|
|
36
|
+
### Deferred to v1.3.11
|
|
37
|
+
- **A. Lark Desktop 多账号联动**(v1.3.10 原计划主线,平移到 v1.3.11):用户在 Feishu Desktop 切账号 → MCP 自动跟进。schema 扩展 + setup CLI 自动检测 + owner heartbeat stat sdk_storage mtime + 未绑定 hash 的处理路径。预计 1-1.5 天单独 PR。
|
|
38
|
+
- **C. 本地 md → 飞书知识库同步**(v1.3.4 起持续推迟):md parser 选型、`src/doc-blocks.js` 构造器补齐、wikilink 三级解析、图片 / 文件 inline、CLI 子命令 vs MCP 工具取舍、增量 diff 策略。
|
|
39
|
+
- **B.5 `search_messages`**:先试 UAT `/open-apis/im/v1/messages/search`,不暴露则尝试 cookie 路径。
|
|
40
|
+
- **E. `src/config/` 目录化拆分**(条件触发)。
|
|
41
|
+
- **G. OpenClaw 偏好文件**。
|
|
42
|
+
|
|
43
|
+
### 已调研但暂不实施
|
|
44
|
+
- **Anthropic Connectors Directory**:需 `.mcpb` 打包 + `manifest.json::privacy_policies` + README "Privacy Policy" 段;缺一项即被拒。规划 v1.4 任务,详见 `docs/launch/anthropic-directory-prep.md`。
|
|
45
|
+
- **Cursor Marketplace**:需 `.cursor-plugin/plugin.json` manifest。规划 v1.4,详见 `docs/launch/cursor-marketplace-prep.md`。
|
|
46
|
+
- **Windsurf MCP Marketplace**:无公开第三方提交渠道(仅官方 partnership 邀请)。靠 Official MCP Registry 同步覆盖。
|
|
47
|
+
- **百度站长 / Google Search Console 主动提交**:用户决定靠自然爬取 + 反链。`docs/sitemap.xml` 与 `docs/robots.txt` 已就位作为被动准备,未来想提交时直接 paste-and-go。
|
|
48
|
+
|
|
49
|
+
### Test scenarios
|
|
50
|
+
- 验证 `npm view feishu-user-plugin version` 返回 `1.3.10`
|
|
51
|
+
- `mcp-publisher publish mcp-registry.json` 推到 registry,`curl https://registry.modelcontextprotocol.io/v0/servers/io.github.EthanQC/feishu-user-plugin` 返回 v1.3.10 元数据
|
|
52
|
+
- GitHub Pages https://ethanqc.github.io/feishu-user-plugin/ 与 `/en.html` 都返回 200,`<head>` 含 `og:image` 指向 `docs/og.png`
|
|
53
|
+
- `docs/sitemap.xml` 由 jekyll-sitemap 自动生成,含 index + en 两个 URL
|
|
54
|
+
- punkpeye/awesome-mcp-servers PR #6090 entry 带 Glama badge(待用户在 Glama 完成 listing 后渲染分数)
|
|
55
|
+
- 所有用户可见文档(README / README.en / docs/index / docs/en / docs/launch/*)均不再含 "反向工程" / "reverse engineering" / "暴力探测" / "brute-force" 字样
|
|
56
|
+
|
|
57
|
+
## [1.3.9] - 2026-05-08
|
|
58
|
+
|
|
59
|
+
D 系列首项 ship:新增 `read_doc_markdown` 工具,用 `feishu-docx` 把 docx blocks 转换为 markdown 字符串输出,替代 `get_doc_blocks` 的结构化 JSON,给 RAG / digest / 摘要类调用省 ~60% token(实测 216 KB JSON vs 90 KB markdown)。A 系列主线 ship:WS 机器级 SSOT + active profile 跨进程同步 + setup CLI 4 行决策矩阵 + per-profile events 字段。工具数 83 → 84。
|
|
60
|
+
|
|
61
|
+
### Added
|
|
62
|
+
- **`manage_ws_status(action=info|reconnect|claim|rotate|reconfig)` (A.1)**:5-action 工具,`info` 给 owner / WS / log / cursor / config 状态 dump;`reconnect` / `rotate` / `reconfig` 是 owner-only;`claim` 接管 stale lock,`force=true` 强夺活跃 owner。`rotate` 触发 `events.jsonl` → `events.jsonl.old` 轮转。`reconfig` 重读 `credentials.json::profiles[active].events` 并重新注册事件类型,无需重启。
|
|
63
|
+
- **WS 机器级 SSOT (A.1)**:单 owner 进程持 `~/.feishu-user-plugin/ws-owner.lock`(O_CREAT|O_EXCL,30 s stale),事件写 `events.jsonl`(append-only,10 MB soft / 20 MB hard cap,超限 rotate 成 `.old`),全局共享 `events.cursor.json` 保护以 cursor-specific lock 避免并发 drain 重读。多 harness 同事件不再重复;owner 死亡 / 锁过期后下一个 MCP 进程自动接管,event log 不丢。
|
|
64
|
+
- **Active profile 跨进程同步 (A.2)**:dispatcher 入口 stat `credentials.json` mtime;变化时重新读 `active`,与 in-memory `currentProfile` 不同即触发 `setActiveProfile`(invalidate `userClient` / `officialClient` 缓存)。成本 ~10μs/call(macOS stat)。`FEISHU_PLUGIN_PROFILE` env 退化为 bootstrap-only;`credentials.json::active` 为唯一跨进程权威来源。
|
|
65
|
+
- **setup CLI 4 行决策矩阵 (A.3)**:非交互模式自动判断 `fresh` / `auto-migrate` / `preserve` / `update` 四种路径;新增 `--force` flag 强制重写 + `--profile <name>` 指定目标 profile。`credentials.json` 已存在时默认 `--pointer-only`;首次安装自动 migrate,harness env 只写 `FEISHU_PLUGIN_PROFILE=default`,消除多 harness token diverge。
|
|
66
|
+
- **per-profile events 字段 (A.4)**:`credentials.json::profiles[*].events` 可选数组,缺省 `["im.message.receive_v1"]`;支持 `approval.instance.created_v4` / `calendar.calendar.event.changed_v4` 等。编辑后调 `manage_ws_status(action=reconfig)` 立即生效,不需重启。`FEISHU_PLUGIN_EXTRA_EVENTS` env 仅在首次 bootstrap 时写入,不覆盖已有字段。
|
|
67
|
+
- **`read_doc_markdown(document_id)` (D)**:返回 markdown 字符串而非结构化 JSON,省 ~60% token;依赖 `feishu-docx@^0.7.0`,后处理器 `_normaliseEmbeds` 位于 `src/tools/docs.js`。嵌入图片 / 文件以 `feishu://image_token/<TOKEN>` / `feishu://file_token/<TOKEN>` 占位符形式保留,配合 `download_doc_image` 取二进制内容。`document_id` 同样接受原生 token / wiki node token / 飞书 URL,分辨率逻辑与其它 doc 工具相同。
|
|
68
|
+
|
|
69
|
+
### Fixed
|
|
70
|
+
- **`send_image_as_user` 不再报 HTTP 400 (B.1)**:v1.3.9 通过暴力探测 cookie protobuf gateway 拿到 IMAGE 最小有效字段集 — `Content.imageKey` (字段 2) + `Content.thumbnailKey` (字段 10) 即可发送成功;宽 / 高 / mime / size 全部可选。`proto/lark.proto` 加了 `imageWidth=4 / imageHeight=5 / mimeType=8 / fileSize=9 / thumbnailKey=10` 五个字段;`sendImage()` 默认 thumbnailKey = imageKey(飞书在缩略图未单独上传时接受同 key)。`scripts/explore-image-minimize.js` 留作未来字段验证起点。
|
|
71
|
+
|
|
72
|
+
### Removed
|
|
73
|
+
- **`send_card_as_user(via="user")` 路径删除 (B.4)** — v1.3.9 通过 brute-force 确认 cookie protobuf gateway 的 `cmd=5 type=14 (CARD)` 路径在服务端 auth 层就被拒绝(任何字段组合都返回同一句 `richText and card type need for card message`,验证发生在 Content 解析之前)。结论是用户身份发卡片在 Feishu cookie auth tier 被服务端禁用,brute-force 不可解。`send_card_as_user` 工具保留,但 `via` 参数和 `via="user"` 代码分支彻底移除,工具固定走 bot (Official API)。`as_user` 后缀作历史命名保留,避免破坏调用方。`scripts/explore-card-protobuf.js` 留作参考,下次会话不需要重复 brute-force。
|
|
74
|
+
|
|
75
|
+
### Test
|
|
76
|
+
- **`switch_profile` 多 profile e2e (F.1)**:验证原子 credentials.json 更新 + 进程内 cache 失效。位于 `src/test-switch-profile.js`,CI-friendly(dummy 凭证不联网)。
|
|
77
|
+
|
|
78
|
+
### Test scenarios
|
|
79
|
+
- 调用 `read_doc_markdown(<docx_token>)`,确认返回 markdown 字符串而非 JSON;HTML 标签如 `<b>` `<em>` 已被转成 `**` `*` 等价物
|
|
80
|
+
- 包含 mention 链接 `[doc](wikcnXXX)` 的文档应保留原样,不被错判为 file token 占位符
|
|
81
|
+
- 启动 MCP 看 stderr 是否出现 `WS connected (profile=default)`;`~/.feishu-user-plugin/ws-owner.lock` 应存在
|
|
82
|
+
- 多 MCP 进程同时跑 → 仅一个看 `WS connected`,其它静默 → `manage_ws_status(action=info)` 看 `is_owner` 字段
|
|
83
|
+
|
|
7
84
|
## [1.3.8] - 2026-05-05
|
|
8
85
|
|
|
86
|
+
本次更新主线是多 profile 自动切换和 WebSocket 实时事件两块新能力,同时把 v1.3.7 推迟的 auth 模块拆分和凭证 pointer-only 模式补齐,并加固 CI 闸门(server.json 自动重生、SKILL.md allowed-tools 与 TOOLS 1:1 校验、CHANGELOG section 校验、文档三方同步校验)。工具数 80 → 82。
|
|
87
|
+
|
|
9
88
|
### Added
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
- **
|
|
13
|
-
-
|
|
14
|
-
- **`
|
|
15
|
-
-
|
|
16
|
-
- **CI / docs gates (F)**: `scripts/sync-server-json.js` regenerates `server.json` from `package.json + TOOLS` (was frozen at v1.2.0 / 33 tools — now matches reality). `scripts/check-tool-count.js` extended to verify `SKILL.md::allowed-tools` in addition to README badge. `scripts/check-changelog.js` blocks publish when CHANGELOG has no section for the tag version. `scripts/check-docs-sync.js` enforces CLAUDE.md / AGENTS.md / skill-ref triple-sync at prepublish + CI.
|
|
89
|
+
- **多 profile 自动切换 (B)**:当 `~/.feishu-user-plugin/credentials.json` 配了 ≥2 profile,读取类工具(`read_*` / `list_*` / `get_*` / `search_*` / `download_*` 加 `manage_bitable_*` 的 read-action 变体)遇到 91403 / 1254301 / 1254000 / 99991672 / HTTP 403 时自动尝试其它 profile 重试。命中后 resourceKey → profile 写入 `profileHints`,下次直接走对的账号。写操作绝不自动切;显式 `via_profile="alt"` 单次锁定,`via_profile="auto"` 在写操作上手动允许。
|
|
90
|
+
- **新工具 manage_profile_hints**:`action=list|set|clear, resource_key?, profile?`,检查或编辑 profile 命中缓存。
|
|
91
|
+
- **WebSocket 实时事件 (C)**:MCP server 启动时后台连飞书 WSClient(仅 feishu.cn,Lark 国际版不支持),事件入 1000 容量 FIFO buffer。新工具 `get_new_events(event_type?, event_types?, chat_id?, since_seconds?, max_events=50, peek=false)` 拉取,默认 drain 语义;当前注册 `im.message.receive_v1`。
|
|
92
|
+
- **Cookie protobuf 工具链 (A.0)**:`scripts/decode-feishu-protobuf.js` 解码 + 报告未知字段;`scripts/capture-feishu-protobuf.js` 抓包 recipe;`docs/COOKIE-PROTOBUF-CAPTURES.md` 流程文档。下版本用这套真做 send_image / audio / sticker / card / search_messages 反向。
|
|
93
|
+
- **`FEISHU_PLUGIN_PROFILE` 启动 env (E.1)**:让 harness 各自指向不同 profile,启动时校验存在(拼错直接 exit 2,不静默 fall through)。
|
|
94
|
+
- **`setup --pointer-only` 模式 (E.2)**:harness env 只写 `FEISHU_PLUGIN_PROFILE=default`,真凭证全部留 `credentials.json`,消除 UAT 刷新后两端 diverge。
|
|
17
95
|
|
|
18
96
|
### Changed
|
|
19
|
-
- **`src/auth/uat.js`
|
|
97
|
+
- **`src/auth/uat.js` + `src/auth/cookie.js` 拆分 (D.1, D.2)**:从 `clients/official/base.js` 和 `clients/user.js` 拆出来,client 实例上变 1-line delegate;状态字段保留在客户端实例。base.js 减约 200 行,关掉 v1.3.7 Phase B 的拆分欠账。
|
|
98
|
+
- **启动诊断更主动 (E.3)**:credentials.json + 旧 LARK_* env 双存在打 NOTE 提示 env 已被忽略;env-only 用户打 TIP 建议运行 `npx feishu-user-plugin migrate --confirm`。
|
|
20
99
|
|
|
21
100
|
### Fixed
|
|
22
|
-
- **
|
|
101
|
+
- **server.json 长期 drift**:长期停在 v1.2.0 / 33 tools 且包含已删工具。新增 `scripts/sync-server-json.js` 从 package.json + TOOLS 自动重生,prepublishOnly 与 CI 验证 drift;本版同步到 v1.3.8 / 82 tools。
|
|
102
|
+
- **`check-tool-count.js` 扩展**:除 README badge 之外同时校验 `SKILL.md::allowed-tools` 与 TOOLS 一致,避免 SKILL.md 单独 drift 漏掉。
|
|
103
|
+
- **G.1 wiki-attach 兜底回归脚本**:`scripts/test-wiki-attach-fallback.js` 把 `attachToWiki` monkey-patch 成抛 91403,验证 `upload_drive_file` 把失败透出来而不是默默上传到 drive root。POSIX skip 77 缺凭证时跳过。
|
|
23
104
|
|
|
24
105
|
### Deferred to v1.3.9
|
|
25
|
-
- Cookie protobuf
|
|
26
|
-
-
|
|
27
|
-
-
|
|
106
|
+
- Cookie protobuf 实际抓包:`send_image_as_user` / `send_audio_as_user` / `send_sticker_as_user` / `send_card_as_user` 真用户身份 / `search_messages`。工具链已 ship(`scripts/decode-feishu-protobuf.js` 等),抓包 session 留下版本一并做。
|
|
107
|
+
- 机器级 SSOT 完整化:WebSocket 单 owner + 共享 events.jsonl + 单一 drain 游标;active profile 跨进程 stat 同步;setup 非交互模式自动 pointer-only。
|
|
108
|
+
- 本地 md → 飞书 wiki 同步、`read_doc_markdown` 工具、`src/config/` 目录化拆分。
|
|
109
|
+
- `switch_profile` 多 profile e2e(mock 第二 profile 测 setActiveProfile cache 失效路径)。
|
|
110
|
+
- 测试群 `oc_daaa6a50f2a97dc668aaf79ae4dc6e4e` 解散(卡 group owner 权限转让)。
|
|
111
|
+
|
|
112
|
+
### Test scenarios
|
|
113
|
+
- 调用 `read_doc` 命中外部租户文档时观察 stderr 出现 `profile-router: default → alt on read_doc (code=91403)`,结果回到 alt profile 的内容
|
|
114
|
+
- 用 `send_to_user` 给自己发条文本后调 `get_new_events`,看到对应的 `im.message.receive_v1` 事件
|
|
115
|
+
- 跑 `npx feishu-user-plugin migrate --confirm` 后重启 MCP,启动 stderr 显示 `Auth: ... source: credentials.json profile=default`,所有工具调用照常
|
|
28
116
|
|
|
29
117
|
## [1.3.7] - 2026-05-04
|
|
30
118
|
|