5 Commits

Author SHA1 Message Date
26a3a4a82a fix: 修复上游健康巡检并同步已审查的市场引用 (#207)
Upstream health checks could select a different branch ending in `main`,
index internal skills or lowercase reference documents, treat a valid
pinned path as broken after an upstream move, and close the tracking
issue while unpinned or unknown entries remained. Resolve exact refs and
tracked filenames, compare the installed snapshot, and drive issue
decisions from structured results.

Refresh 26 reviewed pointers, pin DingTalk and Matt Pocock collections,
remove the deleted merge-conflict skill, and add the six new public
children with reviewed translations. Synchronize sidecars, observed
release facts, license evidence and external dependency disclosures.
Identical-tree Agent pins and their versions remain unchanged. The
per-entry review is recorded in
`docs/upstream-health-189-remediation.md`.

Validation: 99 unit tests pass; all nine pinned collections reproduce;
catalog/i18n and translation-freshness checks pass; online health checks
all 41 external entries with zero broken, actionable or unknown results.
Existing catalog warnings decrease from 123 to 105 with no new warning
groups. Python/workflow shell syntax and whitespace checks pass.

Closes #189.
2026-10-05 23:13:13 +08:00
81aa0cf450 Add transparent portrait avatars for market digital employees (#202)
The catalog previously showed opaque icons or text fallbacks for the
seven digital employees, and source-pointer installs could still get
different avatars. This updates every catalog card to a 512×512
transparent portrait, bumps the listed releases, and pins the six source
repositories to commits that include the matching AgentFS avatar.

Validation: `validate_catalog_metadata.py --require-complete` (0
errors), `validate-i18n.py` (0 errors), and `translate.py --check`. All
seven WebP files have an alpha channel with fully transparent pixels and
are below 50 KB each.
2026-09-30 15:53:13 +08:00
377b7254dc docs(feishu-orchestrator): 补 USAGE.md 使用说明并重新 pin / add USAGE.md and repin (#137)
## 背景 / Background

主仓 [#2600](https://github.com/desirecore/desirecore/pull/2600)
给市场详情页加了「使用说明」区块,按约定文件名 `USAGE.md` 消费。飞书编排助手此前没有这个文件,详情页不渲染该区块——README
里的前置条件、授权步骤与边界,只有访问 GitHub 才看得到,而真正需要它的是市场里正准备安装的人。

The market detail page gained a Usage section in desirecore#2600,
sourced from a conventional `USAGE.md`. This agent had none, so the
section stayed hidden — its prerequisites, auth steps and limits were
reachable only by visiting GitHub.

## 改动 / Changes

- 上游新增
`USAGE.md`([desirecore-agent/feishu-orchestrator@6116ad4](6116ad4ac7))
- 本条目重新 pin 到该 commit,证据六项同步更新

## 为什么放上游而不是条目目录 / Why upstream

`sync/market.ts` 有两条读取路径,只有一条读本地条目目录:

| 方法 | 本地条目目录基线 | 远程 |
|---|---|---|
| `readAgentDetail`(inline 形态) | ✅ `readUsageDocFromDir` | 有则覆盖 |
| `readAgentDetailFromPointer`(**本条目**) | ❌ 无 | 仅远程 |

所以 pointer 条目的使用说明只能来自上游仓库。条目目录放 `USAGE.md` 对本条目无效。

## 为什么只有无后缀版本 / Why no locale variants

远程抓取时,`USAGE.<locale>.md` 的探测列表由 `extractDeclaredLocales` 从**上游
agent.json 的 `i18n.locales`** 得出;无后缀 `USAGE.md` 则总是被抓。

而 `agentConfigSchema` 顶层没有 `i18n`,根级 `additionalProperties: false`——给上游
agent.json 加这个字段会让 pointer 形态的安装校验直接失败。因此本条目只提供无后缀 `USAGE.md`。

## 内容 / Content

按 `usage-doc.ts` 的定位写「装之前该知道什么」,不是全量文档(3212 字符,上限
16000):第三方分发免责、四步授权、审批模式取舍、安全边界、已验证/未验证清单。各业务域的实测细节仍在上游 `docs/` 的 13 篇里。

两处与既有同类文档(`dingtalk-workspace/USAGE.md`)不同,是核对 `app/data/i18n/zh-CN.ts`
后的修正而非照搬:

- 审批模式是 **7 种**不是 6 种,补上 `allow-all`(全部放行)
- `ask-external` 的语义是「内置工具与命令放行,仅
MCP、HTTP、脚本等外部工具需审批」,**不是**「交给外部系统裁决」——两者含义相反,照搬会让用户以为自己收紧了,实际放宽了命令执行

## 验证 / Verification

证据六项一致性自检全部通过:

```
content.ref == entry.source.ref            ✅ 6116ad4ac
reviewedRef == content.ref                 ✅
timestamps.reviewedAt == compliance.reviewedAt  ✅ 2026-09-06
availability                               ✅ installable
license                                    ✅ known + LICENSE
requiredClientVersion                      ✅ 10.0.144
```
2026-09-06 12:19:03 -04:00
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
98251c9a1d feat: 新增飞书编排助手 Agent 市场条目 / add Feishu Orchestrator agent listing (#114)
## 这是什么 / What

把自然语言意图翻译成第三方飞书 CLI(`lark-cli`)的正确调用,覆盖云文档、Markdown
文件、电子表格、多维表格、云空间、知识库、幻灯片、画板、即时消息、邮箱、日历、视频会议与妙记、任务、审批、OKR、考勤、应用搭建与实时事件等业务域。

声明 23 个业务域技能依赖,安装后即可使用,无需手工拷贝技能目录。

An agent that turns natural-language intent into correct calls to the
third-party Feishu CLI, covering documents, sheets, Base tables, drive,
wiki, messaging, mail, calendar, meetings, tasks, approvals, OKR and
attendance. It declares 23 domain skill dependencies that install
together with the agent.

## 结构 / Layout

与仓库既有的 `dingtalk-workspace` / `wecom-assistant` 条目保持一致:

```
agents/feishu-orchestrator/
├── agent.json                 # 内联元数据(AgentFS 配置 ∪ 市场卡片,含 i18n 双语 + changelog)
├── catalog-metadata.v1.json   # sidecar,字段全部从 agent.json 派生
├── assets/avatar.webp         # 512×512 图片头像
├── persona.md / principles.md # L0/L1/L2 分层人格与硬规则
├── README.md                  # 条目总览 + 文档索引
└── docs/01..13-*.md           # 按业务域拆分的 13 篇功能文档
```

## 文档 / Docs

命令、参数约定与坑位**均来自真机验证**(2026-09-01,220 个已授权 scope)。未跑通的能力在
[`docs/13-能力边界.md`](agents/feishu-orchestrator/docs/13-能力边界.md)
中如实标注,不含任何租户、组织或个人标识。

其中固化了三处容易踩错的 CLI 契约:

| 契约 | 踩错的后果 |
|---|---|
| `auth status` 成功时**没有**顶层 `ok` 字段 | 按通用 `ok === true`
判据会把「已授权」误判成「未授权」,反复推用户重新扫码 |
| 身份不显式指定会落到 `bot` | bot 看不见用户的个人日历、云盘、邮箱,且返回**空成功**而非报错 |
| `--ranges`(复数)的 sheet 前缀要用 `sheet_name` | 用 `sheet_id` 会通过确认门禁、但在 API
层报 `Sheet not found`;而单数 `--range` 的约定**正好相反** |

## 治理 / Governance

- `governance.availability: listing-only` —— 与核心
Agent、钉钉、企微三个既有条目一致。inline agent 的内容随仓库走,没有独立制品 ref,无法满足 `installable`
分支「必须有不可变 ref 或 SHA-256 摘要」的门禁
- `governance.branding`:`independent-listing` / `nominative` / `logo
not-used` —— 飞书、Lark 为第三方商标,头像为抽象编排拓扑图,不使用任何第三方 logo
- `compatibility.requirements`:按仓库「外部依赖披露」规范声明运行时、权限、连接三类前置。DesireCore
不打包、不分发、不授权、不安装、不代付 `lark-cli` 及其背后的飞书产品

## 顺带修正 / Incidental

根 `README.md` 的 Agent 清单停留在 `2` 个(遗漏 `wecom-assistant`),一并补齐为准确的 4
个;`manifest.json#stats.totalAgents` 3 → 4。

## 校验 / Verification

| 校验 | 结果 |
|---|---|
| `validate_catalog_metadata.py --require-complete` | **0
error**,sidecars 74,本条目零 warning |
| `validate-i18n.py` | 0 error |
| `test_validate_catalog_metadata.py` | 47/47 |
| 发布前敏感信息扫描(邮箱 / 飞书真实 ID / 租户组织标识 / 带 ID 链接 / 密钥形态 / 隐藏文件,全工作树) |
**零命中** |
| 文档内部链接 | 13 个链接全部命中真实文件,无断链 |

## 依赖 / Dependency

`requiredClientVersion: 10.0.143` —— 自动装齐依赖技能的能力来自主仓库
desirecore/desirecore#2587,该值按其合入后的首个发布版本填写。**若 #2587 未能进入
10.0.143,此值需回填修正**,否则用户在缺少该能力的版本上装完 Agent 会没有技能。

---------

Co-authored-by: yi-ge <jackyoncode@gmail.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-09-04 10:38:37 -04:00