Files
Yige 6963018829 feat(feishu-orchestrator): 改为 pointer 形态并声明可安装 / switch to pointer form and make it installable (#119)
## 为什么 / Why

条目此前是 inline + `listing-only`,详情页显示「仅收录,当前不能由 DesireCore 一键获取」。同期
#115(企微)与 #118(发票助手)都已 `installable`,**飞书是唯一装不了的第三方 Agent**。

inline 形态在这条路上无解:`installable` 要求内容有独立的不可变 ref,而 inline 内容随本仓库走,没有自己的制品
ref。

The listing was inline + `listing-only`, so the client showed it as
discovery-only. With WeCom (#115) and Invoice Organizer (#118) already
installable, this was the only third-party Agent users could not
acquire. Inline form cannot satisfy the installable evidence gate, which
requires content pinned to its own immutable ref.

## 顺带修掉一个错误的承诺 / An incorrect claim, fixed along the way

原 `agent.json` 用 `default_enabled.skills` 声明那 23 个 `lark-*`
技能。但该字段的语义是**「本地已有的技能默认启用」**,schema 明确限定 ID 需存在于 Agent 自带 `skills/` 或市场
`builtin-skills` 清单中 —— `lark-*` 两者都不在,**声明落空**。

真正负责「把技能取过来」的是 `required_skills`(desirecore/desirecore#2587)。也就是说,条目
`fullDesc` 里「随 Agent 一并安装 23 个技能,安装后即可使用」在原实现下**做不到**。

上游 `agent.json` 已改用 `required_skills.collections`,两个字段按 schema
的分工同时保留。逐项核对过:

| 检查项 | 结果 |
|---|---|
| 合集 `larksuite-cli` entry 与 children | 存在,28 个 |
| 声明的 23 个 ID 是否都在其中 | **全部命中,无缺失** |
| source | 公开 git + 固定 ref,可取 |
| 合集自身版本门槛 | 无 |
| `redistribution` | `allowed` |
| 合集是 `listing-only` 是否影响预置 | 否 —— 预置路径不检查 `availability` |

## 形态 / Form

内容移至
[desirecore-agent/feishu-orchestrator](https://github.com/desirecore-agent/feishu-orchestrator),pin
到 `d5b0a78`。market 侧只留 `entry.json` + sidecar + `assets/`。

上游 `agent.json` 已剥净市场卡片字段,并**单独跑过 `agentConfigSchema`** —— pointer 没有
`projectMarketAgentConfigToAgentFs` 那层投影兜底,`persona`
这类卡片字段留着就会让落盘配置非法(本次正是由该校验捕获并修掉的)。

**图片头像保留**:`assets/avatar.webp` 连同 `entry.avatar.image` 一起留在 market
侧,validator 接受 —— pointer 形态不必退回纯文字头像。

## 证据六项 / Acquisition evidence

- `provenance.content`:https + 40 位 SHA
- `license`:`known` + `MIT` + `evidencePath: LICENSE`
- `compliance`:六字段齐全(含 `noticePath: NOTICE`)
- `compliance.reviewedRef === provenance.content.ref`
- `timestamps.reviewedAt.value === compliance.reviewedAt`
- `availability: installable`

一致性:`entry.maintainer` → sidecar `upstreamMaintainer`;`tags` 用英文 slug 与
`presentation.tags` 逐字一致;`redistribution` 为
`source-pointer-only`;`entry.requiredClientVersion` 与
`compatibility.requiredClientVersion` 一致(`10.0.144`,即包含 #2587 的首个发布版本)。

## 校验 / Verification

| 命令 | 结果 |
|---|---|
| `validate_catalog_metadata.py --require-complete` | **0 error**,75
sidecars |
| `validate-i18n.py` | 0 error |
| `test_validate_catalog_metadata.py` | 47/47 |
| 上游 `agent.json` 过 `agentConfigSchema` | 通过(捕获并修掉了 `persona` 字段) |

Co-authored-by: yi-ge <jackyoncode@gmail.com>
2026-09-05 14:30:35 +08:00
..