11 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
daa95424e7 chore(invoice-organizer): 1.1.1 —— pin 到内容仓库合并提交 (#201)
三处 ref 改为内容仓库 9dd9af4b(desirecore-agent/invoice-organizer#8),latestVersion 与 release.version 改为 1.1.1。
2026-09-30 10:27:09 +08:00
4804ce364c chore(invoice-organizer): 1.1.0 —— pin 到内容仓库合并提交 (#200)
三处 ref 改为内容仓库 3e5a530f(desirecore-agent/invoice-organizer#7),latestVersion 与 release.version 改为 1.1.0。
2026-09-30 09:55:26 +08:00
e3d3fe2eda chore(invoice-organizer): 1.0.9 —— pin 到内容仓库合并提交 (#199)
三处 ref 改为内容仓库 fc02a348(desirecore-agent/invoice-organizer#6),latestVersion 与 release.version 改为 1.0.9。
2026-09-30 09:29:36 +08:00
d176e84a96 chore(invoice-organizer): 1.0.8 —— pin 到内容仓库合并提交 (#198)
三处 ref 改为内容仓库 0796408b(desirecore-agent/invoice-organizer#5),latestVersion 与 release.version 改为 1.0.8。
2026-09-29 23:24:46 +08:00
2ef4f9ada3 chore(invoice-organizer): 1.0.7 —— pin 到内容仓库合并提交 (#197)
三处 ref pin 到
[desirecore-agent/invoice-organizer#4](https://github.com/desirecore-agent/invoice-organizer/pull/4)
的合并提交 `27c1896036e9a8988aa4d112ab7092d4dee75cda`,`latestVersion` /
`release.version` 升到 1.0.7。

Pins the invoice-organizer pointer entry to content commit `27c1896`
(1.0.7).

1.0.7 修正 1.0.6 真机验证暴露的三个行为问题:换用目录只 `add` 不设主目录导致 Plan
与增量自动化写进旧目录;模型中途自行收工;自写脚本直连邮件服务打错端口。内容仓库 PR 经独立子代理两轮审查,结论可合并。校验器 0
error。

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-09-29 08:09:39 -04:00
40bd2dc1cf chore(invoice-organizer): 1.0.6 —— pin 到内容仓库合并提交 (#196)
## 改动 / Changes

- `entry.json` 与 `catalog-metadata.v1.json` 的三处 ref pin 到
[desirecore-agent/invoice-organizer#3](https://github.com/desirecore-agent/invoice-organizer/pull/3)
的合并提交 `53b8a745bd008ab8be4833e28724db6b0801976f`
- `latestVersion` / `release.version` 1.0.5 → 1.0.6

Pins the invoice-organizer pointer entry to content commit `53b8a74`
(1.0.6).

## 1.0.6 内容 / What's in 1.0.6

1.0.5 在开发实例从零整理真实邮箱只入账 51 张(应约 67 张),逐封对照本地缓存后定位到:列候选直接拿
`messages/fetch`
的翻页结果(按序号窗口取会漏一类发票邮件)、按信头日期停翻、下载前按文件名预筛掉航空电子行程单、每封只下一个载体。1.0.6:

- 列候选改为两步:先把本地缓存补齐到覆盖整个时间段(Gmail 用放宽一天的服务端日期查询翻到底;IMAP 收件箱 / Outlook
每页后重数「晚于起始日期的邮件数」G,`offset` 达到 G 之后连续两页不增长才停;IMAP 自定义文件夹不走缓存),再按日期搜缓存、按
`total` 翻到底
- 候选邮件的附件全部下载,不按文件名预判、不挑载体;判定阶梯新增否定条挡住行程明细
- 旧客户端(列表响应只剩「省略 1 行」)逐级降 `limit`,读不了的记入待处理;失败计数与「判为非发票」分开
- 内容仓库 PR 经独立子代理五轮审查(高 5 / 中 12 / 低若干,全部处理),第五轮结论可合并

## 验证 / Verification

- `validate_catalog_metadata.py --require-complete`:0 error
- `agent.json` 用 dev 的 `validateAgentConfig` 实跑 `success: true`

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-09-29 07:21:27 -04:00
149174e127 chore(invoice-organizer): 1.0.5 —— pin 到内容仓库合并提交 (#195)
## 改动 / Changes

- `entry.json` 与 `catalog-metadata.v1.json` 的三处 ref pin 到
[desirecore-agent/invoice-organizer#2](https://github.com/desirecore-agent/invoice-organizer/pull/2)
的合并提交 `b2e6d69f0df2345e282ceea424afce0b9345d97f`
- `latestVersion` / `release.version` 1.0.4 → 1.0.5
- `compatibility.requirements` 的 runtime 一条补上 XML 解析与系统自带解压工具(unzip /
python3 / bsdtar),与 Agent 的 USAGE 口径一致

Pins the invoice-organizer pointer entry to content commit `b2e6d69`
(1.0.5) and syncs the runtime requirement text with the Agent's USAGE.

## 1.0.5 内容 / What's in 1.0.5

- 收下 `.zip` / `.xml` 附件:12306 把铁路电子客票打成 zip 发,此前整封邮件被跳过(真实邮箱实测漏 8 张);zip
只经技能自带的 `unpack-zip.sh` 解包,附件名与条目名不进命令行,四种模式 × 9
个用例(含命令注入、输出伪造、符号链接、加密、压缩炸弹、GBK 名、macOS 元数据)实测
- 数电票 XML 作为优先级最高的载体;「电子发票(铁路电子客票)」按 8 张真票重写并新增 D 族键表
- 识别红字发票(`InIssuType`、备注、`RedEInvoice`、负数合计),台账成对标出已红冲 / 部分红冲
- 下载失败与解不开的内层压缩包落盘到 `ledger.json#unprocessed`;附件逐个下载;不把整理流程委派给别的 Agent
- 内容仓库 PR 经独立子代理三轮审查(高 1 / 中 9 / 低若干,全部处理),第三轮结论「可以合并」

## 验证 / Verification

- `validate_catalog_metadata.py --require-complete`:0 error(agents=7)
- 新增文本无真实邮箱、税号、发票号码或公司名

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-09-29 05:40:51 -04:00
0d0e745ef0 chore(invoice-organizer): 1.0.4 —— pin 到内容仓库合并提交 (#191)
发票整理助手内容仓库 desirecore-agent/invoice-organizer#1 已合并为 553ce87。
三处 ref 同步 pin 到该提交;latestVersion 与 release.version 升到 1.0.4;
reviewedAt 两处与各时间戳更新到 2026-09-29,保持结构化形态。
校验器 0 error,agents=7。

1.0.4:同票多载体先读 OFD、补两族 OFD 标引键名、航空电子行程单按计税依据拆分
(民航发展基金记入新增的 otherCharges)、必印字段为空不算通过且多轮只补全不清空。
2026-09-29 04:05:13 -04:00
74466d1ac9 refactor(invoice-organizer): 迁出为独立仓库,条目转真 pointer / move to standalone repo (#140)
## 背景 / Background

`invoice-organizer` 是 market 里最后一个 inline 形态的第三方 Agent。它的
`provenance.content` 是指向 market 自身的 **self-pointer**(`url=market.git`,
`path=agents/invoice-organizer`)——治理字段已经按 pointer 写,内容却还在 market 里。本 PR
让两者一致。

## 改动 / Changes

内容迁到
**[desirecore-agent/invoice-organizer](https://github.com/desirecore-agent/invoice-organizer)**
@ `5ac1e29`,条目收敛为 3 个文件(`entry.json` + `catalog-metadata.v1.json` +
`assets/avatar.webp`)。

## pointer 形态的三处强制改动

`agent.json` 直接过 `agentConfigSchema`(根级 `additionalProperties:
false`),实测改完 `validateAgentConfig` 返回 `success: true`:

- **剥离 10 个市场字段**:`category` / `tags` / `updatedAt` / `maintainer` /
`installPolicy` / `updatePolicy` / `i18n` / `persona` / `changelog` /
`contentSource`
- **`id` 从 slug 换 UUID**
- **`avatar` 从 `{t,bg,image}` 换 `{char,color}`**:原 `bg` 是 `#34C759 →
#007AFF` 的绿蓝渐变,取起点绿色

## ⚠️ 一个必须补的兜底 / A gap this migration would otherwise open

原条目只有 `USAGE.zh-CN.md` 和 `USAGE.en-US.md`,**没有无后缀版本**。

pointer 形态下这两份都抓不到:

1. `fetchAgentRepoData` 总是抓无后缀 `USAGE.md`;`USAGE.<locale>.md` 的探测列表由
`extractDeclaredLocales` 从**上游 agent.json 的 `i18n.locales`** 得出
2. 而 pointer 的 `agent.json` 不能有 `i18n`——`agentConfigSchema` 顶层无此键且根级
`additionalProperties: false`
3. `readAgentDetailFromPointer` 调
`resolveUsageDocFromFiles(repoData.usage, locale)` 时**不传
localeHints**,回退链只剩 `locale → 无后缀`

不处理的话,使用说明会在详情页**彻底消失**。因此上游新增无后缀 `USAGE.md` 兜底(内容同
`zh-CN`,`source_locale` 就是 zh-CN),两份 locale 版本作为事实源保留。

**代价如实记录**:en-US 用户会从看到英文版降级为看到中文版。根因在平台侧,建议后续补齐
`readAgentDetailFromPointer` 的 locale hints,届时两份 locale 版本自动生效,无需再动条目。

## 准入 / Availability

**维持 `installable`**,证据六项自检全部通过:

```
content.ref == entry.source.ref                 ✅ 5ac1e29d3
compliance.reviewedRef == content.ref           ✅
timestamps.reviewedAt == compliance.reviewedAt  ✅ 2026-09-06
availability                                    ✅ installable
license known + licenseEvidencePath: LICENSE    ✅
provenance 不再指向 market 自身                  ✅
```

`LICENSE` 随内容迁到上游——与 `feishu-orchestrator` 一致,`licenseEvidencePath`
相对的是内容仓库而非条目目录。

## 已安装用户影响 / Impact on existing installs

`timestamps.releasePublishedAt` 是
2026-09-06(今天),实际安装量应为零。`provenance.content.url` 变更会影响已安装条目的 ownership
校验,但在这个时间窗内无实际影响。

## 结果 / Result

market 的 `agents/` 现在只剩官方 `desirecore` 一个 inline 条目,其余全部 pointer。
2026-09-06 14:17:21 -04:00