74be106952
fix(skills): 补回 #56 压缩时误删的实质信息(意图对齐) ( #57 )
...
## 摘要 / Summary
### 中文
#56 的复盘修正。上一轮"强改写压缩"把四技能 L1
的**技术属性、使用场景与交互示范当套话一刀切**,造成实质信息丢失(承诺"意图全保留"但未做到)。本 PR 补回:
- **create**:`创建仓库符合 AgentFS v2 规范、git
管理版本(可治理/可追溯)`定位;`基础创建`形态(name+description,description 自动填充 persona
L0);需求收集的**引导问题示例**("起什么名字?/主要负责什么?"…);企业部署/开发者原型使用场景。
- **update**:`agent 目录 git 管理版本、历史可追溯`定位 + 使用场景。
- **discover**:使用场景(浏览/新用户/找替代)+ `语义匹配而非关键词搜索`。
- **delete**:使用场景(清理/测试/释放存储)。
根因:L1 混着实质技术属性与营销套话、使用场景是触发判据、引导问题是交互示范,不该按"只留独有信息"一刀切。补回后仍保留结构性压缩(zh
正文合计仍降 ~64%)。版本 create 2.5.2 / update 3.1.3 / delete 2.5.2 / discover
2.6.2,manifest 1.2.13,中英双份同步、重算 source_hash(validate-i18n 通过)。
### English
Post-mortem fix for #56 . The previous aggressive compression treated the
skills' L1 technical attributes, use cases, and interaction demos as
boilerplate and cut them in a blanket way, dropping substantive
information (the "all intent preserved" claim wasn't fully met). This PR
restores: create's AgentFS-v2 / git-version-management positioning, the
"basic create" form (name+description auto-filling persona L0), the
requirement-gathering prompt questions, and enterprise/developer use
cases; update's git-versioned/traceable positioning and use cases;
discover's use cases and "semantic match, not keyword search"; delete's
use cases. Root cause: L1 mixed real technical attributes with marketing
boilerplate, use cases are trigger cues, and prompt questions are
interaction demos — none should have been blanket-cut. Structural
compression is retained (zh bodies still ~64% smaller). Versions bumped,
manifest 1.2.13, both locales synced, source hashes recomputed
(validate-i18n passes).
2026-07-19 16:14:22 +08:00
d52e61e041
perf(skills): 智能体 CRUD 四技能提示词改写压缩(功能不变,~65%) ( #56 )
...
## 摘要 / Summary
### 中文
四个智能体管理技能(create/update/delete/discover-agent)改用 `ManageAgent`
内置工具后,正文与工具契约大量重叠——ManageAgent 的 description + params 已**常驻每次 query
的上下文**,声明了五个 action 语义、参数约束、权限硬边界、错误语义、字段级合并、确认行为、list/get
返回格式;技能正文里再复述即冗余。本次对四技能做**强改写·语境融合**压缩:
- 与工具契约重复的说明(参数/权限/错误码/确认行为/成功返回话术)**改写融入对应流程步骤**(如错误处理表 → 阶段一句、确认行为 →
阶段一句),不再照抄、不再表格化。
- 装饰性 ASCII 流程框图 → 一行文字流程;update 内部两张重复更新表 → 合并;YAML
元数据块(diff_metadata/context_handoff)融入流程;冗长示例(create 三份 JSON、update 附录 4
示例、discover ASCII 卡片)就地精简为代表示意。
- **不外置 references、不净删除任何内容**:所有决策/领域/交互意图完整保留——领域匹配表、persona/principles
的 L0/L1/L2 生成规范、update 两路径分流与字段级合并 vs 整体替换、防幻觉改名、回滚流程、discover
需求维度与无匹配衔接 create 等核心一字未丢。
zh 正文合计 **26542 → 9196 字符(降 ~65%)**;中英双份同步改写、逐段对齐,重算 i18n
source_hash(validate-i18n 通过)。版本 create 2.5.1 / update 3.1.2 / delete
2.5.1 / discover 2.6.1,manifest 1.2.12。
### English
After the four agent-management skills adopted the `ManageAgent` builtin
tool, their bodies heavily duplicated the tool contract — ManageAgent's
description + params are **resident in every query's context** (action
semantics, param constraints, permission hard-boundaries, error
semantics, field-level merge, confirmation behavior, list/get return
formats). This PR compresses all four via **aggressive rewrite +
contextual fusion**: contract-duplicating text is rewritten into the
relevant flow steps (not copied, not tabularized), decorative ASCII flow
boxes become one-line text, update's two duplicate tables are merged,
YAML metadata blocks are folded in, and long examples are trimmed in
place to representative sketches. **No references externalization, no
net deletion** — every decision/domain/interaction intent is preserved
(domain matching table, persona/principles L0/L1/L2 generation spec,
update's two-path split and field-level-merge-vs-full-replace,
anti-hallucination rename, rollback flow, discover's need dimensions and
create hand-off). zh bodies total **26542 → 9196 chars (~65% down)**;
both locales rewritten and aligned, i18n source hashes recomputed
(validate-i18n passes). Versions bumped, manifest 1.2.12.
2026-07-19 15:16:43 +08:00
mashagua
64d295a489
feat(skills): 为 15 个 pointer skill 补充 i18n 中英文简介 ( #55 )
...
## 背景
仓库内 20 个 pointer skill(`entry.json` 指针型条目)中,仅 5
个(flyai-skill、karpathy-guidelines、last30days、minimax-image-gen、minimax-tts)有
`i18n` 块,其余 15 个缺失,导致市场详情页中英文简介为空。
## 改动
为以下 15 个 skill 的 `entry.json` 补充 `i18n.zh-CN` / `i18n.en-US` 的 `name` 与
`shortDesc`,格式对齐已有条目(驼峰 `shortDesc`,`zh-CN` / `en-US` 直接置于 `i18n` 下):
| skill | 来源 |
|---|---|
| agent-reach | 上游 SKILL.md description |
| ai-news-radar | 上游 README |
| amap-jsapi-skill | clawhub 官方页面描述 |
| dingtalk-api | clawhub 官方页面描述 |
| follow-builders | 上游 README |
| ian-xiaohei-illustrations | 上游 SKILL.md description |
| khazix-skills | 上游 README |
| larksuite-cli | 上游 README |
| luckin-my-coffee | 按 skill 名称与类别推断(zip 分发,无可读源,待维护者核对) |
| mt-paotui-for-client | 上游 README |
| netease-skills | 上游 README |
| mattpocock-skills | 上游 README |
| taste-skill | 上游 README |
| wechatpay-skills | 上游 README |
| wecom-cli | 上游 README |
## 验证
- 15 个 `entry.json` 均为合法 JSON,`i18n` 字段完整
- 本地运行 `scripts/i18n/validate-i18n.py`:`OK: no i18n issues found.`(退出码
0)
- 仅改动 `i18n` 块,未触碰其它字段
## 备注
- **luckin-my-coffee** 的简介为推断内容(该 skill 以 zip 分发,无可读源码/README),请维护者重点核对。
2026-07-19 14:37:19 +08:00
05e4498e31
fix(skills): flyai-skill 补 source.path 与 i18n,修复详情页空白 ( #54 )
...
## 问题
FlyAI(flyai-skill)在客户端市场详情页显示为空白(无描述、无技能文档正文)。
## 根因
- `source.path` 未设置:上游仓库 `alibaba-flyai/flyai-skill` 的 `SKILL.md` 实际位于
`skills/flyai/` 子目录(目录名为 `flyai`,而非与 entry id 同名的 `flyai-skill`)。抓取逻辑在
`path` 为空时退化为在仓库根目录查找 `SKILL.md`,而根目录并无该文件,导致抓取静默失败、`body` 保持为空。
- 缺少 `i18n` 字段:`shortDesc`/`name` 本地化文案缺失,列表与详情页描述行同样为空。
两者叠加,加上客户端对空字段没有兜底文案,最终表现为详情页视觉上完全空白。
## 修改
- 补充 `source.path: "skills/flyai"`,对齐上游真实目录结构
- 补充 `i18n.zh-CN` / `i18n.en-US` 的 `name` + `shortDesc`(内容取自上游
`SKILL.md` frontmatter 的 `description` 字段整理)
- 补充 `latestVersion: "1.0.15"`(对齐上游 `SKILL.md` frontmatter
`metadata.version`)
## 验证
- `python3 scripts/i18n/validate-i18n.py skills/flyai-skill` 通过
- `python3 scripts/i18n/validate-i18n.py skills/flyai-skill --online`
通过(确认 `source.path` 指向的文件真实可抓取)
## Test plan
- [x] 本地校验脚本通过(含 --online)
- [ ] DesireCore 主仓库 `npm run sync-market` 后在客户端验证详情页正常展示
2026-07-19 00:45:05 +08:00
b2ef6a1f19
fix(skills): update-agent 示例字段名修正 + get 返回示例对齐真实输出 ( #53 )
...
## 摘要 / Summary
### 中文
market#52 的修正:update-agent
附录示例使用了错误的字段名(`communicationStyle`/`must`),照示例调用会被 ManageAgent 的 Ajv
校验(additionalProperties: false)直接拒绝;`personality` 示例应为字符串数组。同时把 `get`
的返回示例对齐真实输出格式(`## persona.md` / `## principles.md` 段落含分层 markdown 原文,对应
desirecore#1230),并在附录固定列出结构化字段名清单。update-agent 3.1.1,manifest 1.2.11。
### English
Correction to market#52: the update-agent appendix examples used wrong
field names (`communicationStyle`/`must`) that ManageAgent's Ajv
validation (additionalProperties: false) would reject outright;
`personality` must be a string array. The `get` response example is
aligned with the actual output format (`## persona.md` / `##
principles.md` sections, per desirecore#1230), and the appendix now
lists the fixed structured field names. update-agent 3.1.1, manifest
1.2.11.
2026-07-18 23:35:50 +08:00
1c00b8e6c8
feat(skills): 智能体 CRUD 四技能改经 ManageAgent 内置工具(实例鉴权适配) ( #52 )
...
## 摘要 / Summary
### 中文
主仓库 desirecore#1225 新增 `ManageAgent` 内置工具后,智能体 CRUD 四技能从"调本机 HTTP
API/curl"改写为调用该工具(实例鉴权上线后 Agent 直接访问本机 API 会 401):
- **create-agent 2.5.0**:`POST /api/agents` →
`ManageAgent(action='create', ...)`;补充保留标识(core/desirecore)拒创、config 仅允许
llm 白名单的错误处理
- **delete-agent 2.5.0**:`DELETE /api/agents/:id` →
`action='delete'`(工具层强制用户确认);错误处理改为工具拒绝语义(核心智能体/自删/活跃状态);补团队级联说明
- **discover-agent 2.6.0**:`GET /api/agents(/:id)` →
`action='list'/'get'`
- **update-agent
3.1.0**:结构化字段(name/description/llm/persona/principles)改经
`action='update'`(白名单+schema 校验+字段级合并语义),自由格式文件仍 Read/Write
四技能声明 `market.required_client_version:
10.0.90`,老客户端在市场端被门控禁装。中英双语正文同步改写,i18n source_hash 已重算(validate-i18n.py
通过);manifest 1.2.10。
### English
After desirecore#1225 shipped the `ManageAgent` builtin tool, the four
agent-CRUD skills are rewritten from local-HTTP-API/curl instructions to
tool calls (direct local API access now returns 401 under instance
auth). Each skill declares `market.required_client_version: 10.0.90` so
older clients are gated from installing. Both locales are rewritten in
sync and i18n source hashes recomputed (validate-i18n.py passes);
manifest bumped to 1.2.10.
主仓库回填:合并后将在 desirecore 主仓库执行 `npm run sync-market` 生成新的
defaults/market.zip 并单独提 PR。
2026-07-18 23:05:18 +08:00
ea07d05550
docs: update market catalog counts ( #51 )
...
## Summary
- align the README catalog summary with the current market tree
- report 20 external entries and 50 total publishable skills
## Validation
- `uv run scripts/i18n/validate-i18n.py`
2026-07-16 20:53:31 +08:00
0ecc29c7ce
feat(market): 为外部技能补充图标 ( #50 )
...
## Summary / 摘要
Add inline SVG icons to all 20 external pointer skills, so their cards
no longer fall back to an empty icon. The market catalog version is
bumped from `1.2.8` to `1.2.9`.
为全部 20 个外部 pointer skill 补齐内联 SVG 图标,市场卡片不再显示为空;市场版本由 `1.2.8` 升至
`1.2.9`。
## Compatibility / 兼容性
Depends on desirecore/desirecore#1177 , which permits the `icon` field in
strict pointer-entry validation and forwards it through the offline
list/detail responses. That PR must merge first.
## Skill → icon screenshot / Skill 与图标截图
The preview labels every card with its display name and id.

Covered skills: `agent-reach`, `ai-news-radar`, `amap-jsapi-skill`,
`dingtalk-api`, `flyai-skill`, `follow-builders`,
`ian-xiaohei-illustrations`, `karpathy-guidelines`, `khazix-skills`,
`larksuite-cli`, `last30days`, `luckin-my-coffee`, `mattpocock-skills`,
`minimax-image-gen`, `minimax-tts`, `mt-paotui-for-client`,
`netease-skills`, `taste-skill`, `wechatpay-skills`, and `wecom-cli`.
## Validation / 验证
- `uv run scripts/i18n/validate-i18n.py`
- `uv run scripts/i18n/translate.py --check`
- Parsed all 20 `entry.json` icons as SVG XML
- `git diff --check`
- Rendered the committed preview asset locally
2026-07-16 19:59:41 +08:00
73c94ab70e
fix(skills): 禁止自动注入完整技能内容 ( #49 )
...
## Summary
- 将 dashscope-image-gen、image-to-image、markdown、tech-diagram、xiaomi-tts
改为仅按需加载,并递增 patch 版本
- 在 Market validator 与 JSON Schema 中禁止 `disable-model-invocation: false`
- 将回归测试接入 `i18n Validate`,同步中英文技能编写规范
## Root cause and impact
这 5 个技能在首次引入时即声明 `disable-model-invocation: false`,导致完整技能正文进入普通请求的
system prompt。修改后市场技能只能声明 `true` 或省略该字段,完整内容仅在显式调用 Skill 工具后加载。
## Validation
- `uv run --quiet scripts/i18n/test_validate_i18n.py`
- `uv run --quiet scripts/i18n/validate-i18n.py`
- `uv run --quiet scripts/i18n/translate.py --check`
- `python3 -m json.tool
scripts/i18n/schema/skill-frontmatter.schema.json`
- `actionlint .github/workflows/i18n-validate.yml`
- `git diff --check`
2026-07-14 11:55:22 +08:00
5ab2994664
fix: 修复配置算力技能图标 ( #48 )
...
## 修改内容
- 将“配置算力”技能的芯片图标调整为对称的 9/15 引脚布局
- 为图标边缘保留安全距离,避免缩放时出现贴边或裁切
- 将技能版本更新至 1.0.2,并补充变更记录
## 根因
原图标左右引脚使用了不对称的坐标,并延伸至 viewBox 的 1/23 边缘;在市场卡片缩放渲染时容易产生视觉偏移或裁切。
## 验证
- `python scripts/i18n/validate-i18n.py`
- YAML frontmatter 与内联 SVG XML 解析
- `git diff --check`
2026-07-11 20:42:20 +08:00
0518fb0c28
fix(skills): add latestVersion and i18n to karpathy-guidelines / last30days pointer entries ( #47 )
...
## Summary / 摘要
Complete the two pointer entries added in #46 with `latestVersion` and
`i18n` blocks.
补全 #46 新增的两个 pointer 条目的 `latestVersion` 与 `i18n` 字段。
## Why / 原因
- **latestVersion**: `karpathy-guidelines` upstream `SKILL.md` has no
root-level `version`, so the client records `0.0.0` on install and the
update check (`0.0.0 == 0.0.0`)永远判定已最新——updates would be silently
skipped forever. Registering `latestVersion` here enables the
client-side fallback (shipping separately in the desirecore repo).
`karpathy-guidelines` 上游无根级 version,客户端装出来是 0.0.0 且更新判定永远跳过;在市场登记
latestVersion 配合客户端 fallback 修复。
- **i18n**: per ADR-038, market list localization must work offline from
`entry.json` alone. Both entries previously lacked `i18n`, so the list
shortDesc would render empty.
按 ADR-038 列表本地化需离线可用,此前两条目缺 i18n,列表简介为空。
## Changes / 变更
- `skills/karpathy-guidelines/entry.json`: `latestVersion: 1.0.0` +
zh-CN/en-US `i18n`
- `skills/last30days/entry.json`: `latestVersion: 3.11.1`(与上游一致)+
zh-CN/en-US `i18n`
## Testing / 测试
- Both files validated against `marketSkillEntrySchema` (Ajv, desirecore
repo) — VALID.
- [x] I have read and agree to the CLA
2026-07-11 20:29:40 +08:00
mashagua
911644639e
feat(skills): add karpathy-guidelines and last30days as pointer entries ( #46 )
...
## Summary
Add two community skills as **metadata-only pointer entries**, following
ADR-038 (market stores only `entry.json` + source pointer for
third-party content; no source vendored into the repo).
| id | upstream | stewardship | license | redistribution |
|----|----------|-------------|---------|----------------|
| `karpathy-guidelines` |
[multica-ai/andrej-karpathy-skills](https://github.com/multica-ai/andrej-karpathy-skills )
| community | MIT | allowed |
| `last30days` |
[mvanhorn/last30days-skill](https://github.com/mvanhorn/last30days-skill )
| community | MIT | allowed |
## Changes
- `skills/karpathy-guidelines/entry.json` — pointer to
`skills/karpathy-guidelines` on branch `main`
- `skills/last30days/entry.json` — pointer to `skills/last30days` on
branch `main`
- `manifest.json` — `totalSkills` 45 → 47, `lastUpdated` bumped
## ADR-038 compliance
- No upstream source tree vendored; only `entry.json` metadata +
`source` git pointer.
- Required fields present: `stewardship` / `license` / `redistribution`.
- Both upstreams are MIT and `redistribution: allowed`; content is
fetched from upstream at install time.
## Testing
- Validated both `entry.json` files are well-formed JSON.
- `source.path` usage matches existing precedent (e.g. `minimax-tts`,
`minimax-image-gen`).
2026-07-11 19:48:04 +08:00
mashagua
e5bc1115ae
Add three MIT community skill entries (agent-reach, ian-xiaohei-illustrations, khazix-skills) ( #45 )
...
## Summary
按 ADR-038《市场元数据注册表与两层技能模型》,以 `entry.json` pointer 形式收录三个第三方 community
skill。**仅登记元数据,正文全部留在各自源仓库**,不向 market 仓库 vendoring 任何源码/二进制。
| id | 源仓库 | license | stewardship | redistribution | category |
|----|--------|---------|-------------|----------------|----------|
| `agent-reach` |
[Panniantong/agent-reach](https://github.com/Panniantong/agent-reach ) |
MIT | community | allowed | research |
| `ian-xiaohei-illustrations` |
[helloianneo/ian-xiaohei-illustrations](https://github.com/helloianneo/ian-xiaohei-illustrations )
| MIT | community | allowed | media |
| `khazix-skills` |
[KKKKhazix/khazix-skills](https://github.com/KKKKhazix/khazix-skills ) |
MIT | community | allowed | productivity |
## Changes
- 新增 `skills/agent-reach/entry.json`(SKILL.md 位于 `agent_reach/skill`,已用
`source.path` 指向)
- 新增 `skills/ian-xiaohei-illustrations/entry.json`(SKILL.md 位于同名子目录,已用
`source.path` 指向)
- 新增 `skills/khazix-skills/entry.json`(多技能合集,指向仓库根)
- 三条 `source.ref` 均固定到源仓库当前 HEAD commit,保证可复现
- `manifest.json`:`stats.totalSkills` 45 → 48,`lastUpdated` 更新为
2026-07-09
- `README.md`:同步计数(external 15→18 / total 45→48)与外部条目列表
## Compliance (ADR-038)
- 三个源仓库均为 MIT,`redistribution: allowed`,可分发
- 未向 market 仓库引入任何 upstream 源码树 / zip / 二进制
- 字段遵循现有 `entry.json` 约定(参照 mattpocock-skills / netease-skills 等既有条目)
2026-07-09 21:37:59 +08:00
Zxy-y
ac6e5a850c
chore(update-agent): version 3.0.4 → 3.0.5 补发改名指引更新 ( #44 )
...
## 背景 / Context
上一个 PR(#43)修改了 update-agent 技能正文(改名改用 Edit 同步 agent.json +
persona.md),但**未升 version**(仍 3.0.4)。
技能同步的更新判定**纯按
semver**(`lib/agent-service/sync/builtin-skill.ts`:`compareSemver(local,
source)`,版本一致即跳过、不比内容),因此已安装 3.0.4 的存量用户会因'版本一致→跳过'而**收不到**上个 PR 的正文更新。
The previous PR (#43 ) changed the update-agent skill body but did not
bump the version. Skill sync decides updates purely by semver (same
version → skip, content ignored), so existing 3.0.4 installs would never
receive the content update. Bumping to 3.0.5 forces propagation.
## 变更 / Change
- `skills/update-agent/SKILL.md`: `version: 3.0.4 → 3.0.5`(仅此一行,不动正文,不影响
source_hash / i18n 校验)
Co-authored-by: 张馨元 <zhangxy@iynss.com >
2026-07-08 14:49:11 +08:00
Zxy-y
a59f223e56
docs(update-agent): 改名改用 Edit 同步 agent.json 与 persona.md 标题 ( #43 )
...
## 变更 / Changes
update-agent 技能:纯改名场景改为用 **Edit 工具同时更新两个文件**——`agent.json` 的 `name` 字段 与
`persona.md` 的首行标题(`# 名称`),避免两者脱节;并强调不实际编辑文件不得声称已改名。
The update-agent skill now instructs: for a pure display-name change,
use the **Edit tool to update both files** — the `name` field in
`agent.json` and the first-line title heading (`# Name`) in `persona.md`
— so the display name and persona title never fall out of sync. Also
emphasizes never claiming a rename is done without actually editing the
files.
## 背景 / Context
此前改名只改了 `agent.json` 的 name,`persona.md`
标题残留旧名(显示名与人格文档脱节);且模型有时只口头声称完成而不真正落盘。本改动通过技能引导修正这两点。
Previously renaming only touched `agent.json`'s name while
`persona.md`'s title kept the old name (desync), and the model would
sometimes claim completion without actually writing. This skill guidance
fixes both.
## 改动范围 / Scope
- `skills/update-agent/SKILL.md`(+3)
- `skills/update-agent/SKILL.zh-CN.md`(+3)
- 纯文档/技能引导改动,version 保持 3.0.4 不变
Co-authored-by: 张馨元 <zhangxy@iynss.com >
2026-07-07 22:30:26 +08:00
a4718379d9
强化市场校验与索引元数据
...
合并市场索引、分类、i18n 校验、skill-creator 工具和已修改 skill 版本号更新。
2026-07-07 21:14:31 +08:00
b273a1008a
docs(discover-agent): 使用场景补充"更换智能体"情形 ( #40 )
...
给 discover-agent 的中文源补充一条使用场景。
同时这是 #39(pull_request_target 自动翻译流水线)的端到端验证 PR:中文源变更 → en-US 过期 → CI
应自动翻译并把 commit 推回本分支、发评论。
🤖 Generated with [Claude Code](https://claude.com/claude-code )
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com >
Co-authored-by: desirecore-bot <bot@desirecore.net >
2026-07-07 20:04:55 +08:00
48402cf62f
fix(ci): 翻译回推 commit 移除 [skip ci] ( #41 )
...
PR #40 实测发现:bot 回推的翻译 commit 带 `[skip ci]`,把新 SHA 上所有 workflow
都压掉了,必需检查(validate/translate/wait-for-copilot-review)永远不报告,PR 反而无法合并。
- 防循环不依赖 `[skip ci]`——translate job 的 bot actor 判断已经保证(bot 触发时 job
skipped,而 skipped 满足必需检查)
- validate / copilot 本来就应该在翻译产物上重跑
- 已加注释防止回归
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-authored-by: Claude Fable 5 <noreply@anthropic.com >
2026-07-07 19:55:20 +08:00
dc2476e630
feat(i18n): OpenAI 兼容翻译后端 + fork PR 自动翻译回推 ( #39 )
...
## 目标
1. 翻译后端支持**任意 OpenAI 兼容接口**(自定义 URL +
Token):OpenAI、DeepSeek、Qwen、one-api/new-api 网关、vLLM 等
2. **fork PR 也能自动翻译并回推**——不再要求外部贡献者自己跑翻译脚本
## translate.py
- 新增 `TRANSLATE_BACKEND=openai` 后端:`TRANSLATE_ENDPOINT`(或
`OPENAI_BASE_URL`,以 /v1 结尾)+ `TRANSLATE_API_KEY`(或 `OPENAI_API_KEY`)
- gpt-5/o 系模型名自动用 `max_completion_tokens` 且不传 temperature;其余模型走经典
`max_tokens` + `temperature=0.1` 契约
- 已用本地 mock 服务器端到端验证两种契约、env 与 CLI 两种配置方式、产物 frontmatter(`translated_by:
ai:openai:<model>`)
## workflow 安全模型(评审重点)
触发器从 `pull_request` 改为 `pull_request_target`(fork PR 获得 secrets 与写 token
的唯一途径),配套的防护:
- **绝不执行 PR 代码**:workflow 与 `scripts/i18n/*` 一律来自 base 分支;PR 内容通过
`refs/pull/N/merge` 以**纯数据**方式覆盖(仅
`skills/`、`manifest.json`、`categories.json`)
- 覆盖后 `find skills -type l -delete` 丢弃符号链接(防经软链读 runner 文件系统并借"翻译"外泄)
- PR 派生值(head repo/ref)一律经 `env:` 注入,不在 `run:` 内 `${{ }}` 插值(防命令注入)
- 回推:在 PR head 的独立 worktree 上**只应用翻译产物文件**后用 bot token 推送;head SHA
变更则放弃(让新 run 接手);bot actor 触发的 run 直接跳过(防循环)
## 使用自定义端点需要配置
| 类型 | 名称 | 值 |
|---|---|---|
| secret | `TRANSLATE_API_KEY` | 你的 token |
| secret 或 variable | `TRANSLATE_ENDPOINT` | 如
`https://your-gateway.example.com/v1 ` |
| variable | `TRANSLATE_BACKEND` | `openai` |
| variable | `TRANSLATE_MODEL` | 端点上的模型 id |
注:推送到 fork 分支要求 `DESIRECORE_BOT_TOKEN` 是具有本仓库 push 权限的**用户
PAT**(GITHUB_TOKEN 与 App token 推不了 fork),且 PR 勾选 Allow edits by
maintainers;推不了时会以清晰错误失败并打标签。
🤖 Generated with [Claude Code](https://claude.com/claude-code )
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com >
2026-07-07 18:54:57 +08:00
mashagua
61336c68b5
Add 3 community skill pointers (MIT) ( #36 )
...
## What
按 ADR-038(市场元数据注册表与两层技能模型)以「元数据 + pointer」方式收录 3 个第三方 skill 仓库(均为 MIT):
| id | 上游 | 许可 | 分支 |
|----|------|------|------|
| `mattpocock-skills` |
[mattpocock/skills](https://github.com/mattpocock/skills ) | MIT | main |
| `ai-news-radar` |
[LearnPrompt/ai-news-radar](https://github.com/LearnPrompt/ai-news-radar )
| MIT | master |
| `taste-skill` |
[Leonxlnx/taste-skill](https://github.com/Leonxlnx/taste-skill ) | MIT |
main |
## How
- 各仅新增 `skills/<id>/entry.json` 一个文件(每个 24 行),**不 vendor
任何上游源码**,正文按需从上游获取。
- 三个上游均为 **MIT**(可分发),故
`stewardship=community`、`redistribution=allowed`。
- `source` 指针格式对齐现有 `follow-builders` 条目(注意 ai-news-radar 默认分支为
`master`)。
## Compliance (ADR-038)
- [x] 第三方内容不进 market 仓库,只放元数据 + pointer
- [x] 每条标注 stewardship / license / redistribution
- [x] 改动量极小(3 files, +72),无 upstream/ / .zip / .gif 膨胀
---------
Co-authored-by: Yige <a@wyr.me >
2026-07-07 17:02:16 +08:00
7db9f6e925
fix(ci): i18n-translate 支持 fork PR ( #38 )
...
## 问题
PR #36(来自 fork)触发 `i18n Auto-Translate` workflow 失败,两处报错:
1. **checkout 失败**:`ref: github.event.pull_request.head.ref` 未指定
`repository:`,fork 的 head 分支在主仓库不存在 → `A branch or tag with the name
'add-mattpocock-skills' could not be found`
2. **失败打标签 403**:fork PR 的 `GITHUB_TOKEN` 被强制只读、拿不到
`DESIRECORE_BOT_TOKEN` secret → `Resource not accessible by integration`
## 修复
- **checkout**:同仓库 PR 仍检出 head 分支(保留自动回推翻译);fork PR 改用 `github.ref`(即
`refs/pull/N/merge`,base 仓库中一定存在)
- **新增 "Fail fork PR with stale translations" 步骤**:fork PR 缺翻译时在消耗模型
token 之前直接失败,并提示贡献者本地运行 `uv run scripts/i18n/translate.py` 补交翻译
- **Commit & push / Label on failure** 两个写操作步骤加同仓库判断,fork PR 跳过
同仓库 PR 与 workflow_dispatch 行为完全不变。
🤖 Generated with [Claude Code](https://claude.com/claude-code )
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com >
2026-07-07 16:41:13 +08:00
6e0f6b403e
feat(skills): 新增 configuring-compute 技能 ( #37 )
...
## 中文
新增官方内置技能 `configuring-compute`:让平台内智能体能帮用户配置算力供应商与 API Key。
- 完整流程:查看配置 → 创建/更新 provider → 写入密钥(只写端点)→ verify-key 验证 → 启用/同步模型 →
POST /api/compute/reload 刷新
- 安全模型写入技能文本:密钥只写不读,禁止读取 secrets.json 或尝试读回已有 key
- 加入 builtin-skills.json 清单;manifest version 1.2.6 → 1.2.7
依赖 desirecore 主仓库的配套 PR(掩码脱敏 + reload 端点)。
## English
Add the official builtin skill `configuring-compute`: enables
in-platform agents to configure compute providers and API keys for the
user.
- Full flow: inspect config → create/update provider → write key
(write-only endpoint) → verify-key → enable/sync models → POST
/api/compute/reload
- Security model embedded in the skill text: keys are write-only;
reading secrets.json or existing keys is forbidden
- Added to builtin-skills.json manifest; manifest version 1.2.6 → 1.2.7
Depends on the companion PR in the desirecore main repo (key masking +
reload endpoint).
2026-07-07 16:21:04 +08:00
d83ab2d842
feat: 上架 minimax-video-gen(移除 listed: false) ( #35 )
...
## Summary
- 移除 `minimax-video-gen` 的 `market.listed: false`,使其在市场页面可见,用户可手动安装
Remove `market.listed: false` from `minimax-video-gen` so it appears in
the market UI for manual installation.
## Changes
- **skills/minimax-video-gen/SKILL.md**: remove `listed: false` (1 line
deletion)
2026-07-02 19:03:14 +08:00
2899247128
feat: 补全 registering-services / using-services 缺失的图标 ( #34 )
...
为两个缺 market.icon 的技能补 24×24 线性 SVG(icon: >- 折叠标量,置于 category 前,对齐仓库约定);version 1.0.0→1.0.1。其余无图标条目为 pointer entry.json,需先扩 entry schema,另行处理。
2026-06-29 17:59:16 +08:00
5b7708a612
feat: 市场转型为元数据注册表(pointer entry + 许可署名) ( #33 )
...
## 概述 / Summary
把 market 从「内容仓库」转型为「元数据注册表」的仓库侧改动,配合客户端 PR
[desirecore/desirecore#919 ](https://github.com/desirecore/desirecore/pull/919 )
与
[ADR-038](https://github.com/desirecore/desirecore-docs/blob/main/技术/决策/ADR-038-市场元数据注册表与两层技能模型.md )。
原则:market 只放元数据、不放第三方内容;内置技能仍 bundled(有界例外)。每条第三方条目用
`entry.json`(元数据 + `source` 指针),正文放各自源仓库、安装时按需获取。
## 改动 / Changes
### S10 — minimax 迁出为官方独立仓库
- `minimax-image-gen` / `minimax-tts`(均 `author=desirecore`)迁至新建的官方开源仓库
**[desirecore/skills-minimax](https://github.com/desirecore/skills-minimax )**(MIT,monorepo,
一仓多技能)。
- market 改用 `skills/<id>/entry.json` 的 pointer 引用(`source.path`
指入子目录,`ref` 锁定
commit `6e39eee`),删除内联 `SKILL.md`。
### S11 — 许可署名合规
- 新增根 `LICENSE`(MIT)与 `THIRD_PARTY_NOTICES.md`。
- 标注 Anthropic **docx/pdf/pptx/xlsx 为 source-available(非开源、仅供演示参考)**、
frontend-design 等为 Apache-2.0;每条 entry 的 `license`/`redistribution`
为单条真相源。
### S12 — 外部技能改为纯 pointer(取代 #32 的 vendoring)
- 把 [#32 ](https://github.com/desirecore/market/pull/32 ) 的 10 个外部技能写成
`entry.json`
pointer(**不再 vendor 上游源码**):
- MIT/MIT-0 → `partner`/`community` + `allowed`
- 无声明许可(meituan / netease)→ `pointer` + `source-pointer-only`
- luckin 打包产物 → `pointer` + `verify-package-terms`(`source.kind=zip`)
## 说明 / Notes
- 外部条目的 `name`/`category` 为基于上游 URL 的合理初值,后续可随上游元数据完善。
- 客户端(#919)已支持 `entry.json` 读/装与体积守护栏;本 PR 合并后,主仓库需重新
`npm run sync-market` 重打包 `defaults/market.zip`。
> 注:`follow-builders`(zarazhangrui/follow-builders, MIT)是 #32
`external-skills.json` 外部技能集合中的一员,属本次迁移范畴,非额外引入。
Co-authored-by: yi-ge <jackyoncode@gmail.com >
2026-06-28 21:06:20 +08:00
2bcbcbc9e2
feat(mail-operations): 补充邮箱服务 UI 入口说明 v1.0.4 ( #30 )
...
## Summary / 摘要
- Add "How to Access the Email Service" section to `SKILL.md` and
`SKILL.zh-CN.md`, guiding users to navigate via Resource Explorer →
Emails card
- 在中英文技能文件中新增「如何进入邮箱服务」章节,说明通过资源管理器→邮箱卡片进入邮箱管理界面
## Changes / 变更
- `skills/mail-operations/SKILL.md`: add "How to Access the Email
Service" section, version 1.0.3 → 1.0.4
- `skills/mail-operations/SKILL.zh-CN.md`: add「如何进入邮箱服务」章节
- `manifest.json`: version 1.2.5 → 1.2.6
2026-06-20 11:30:56 +08:00
51f4837933
fix(dashscope-image-gen): 默认模型改为 gpt-image-2 v1.4.0 ( #29 )
...
## Summary
上游 proxy (desirecore-cloud at api.yizhioa.cn) 仅支持 `gpt-image-2`
图片生成模型,`wan2.7-image` 返回 `model_price_error`。
The upstream proxy (desirecore-cloud) only supports `gpt-image-2` for
image generation. `wan2.7-image` returns `model_price_error`.
### Changes
- Default model changed from `wan2.7-image` → `gpt-image-2`
- `wan2.7-image` / `wan2.7-image-pro` kept as optional (requires
user-configured DashScope provider)
- Added auto-fallback strategy: `model_price_error` → retry with
`gpt-image-2`
- Size values adapted for gpt-image-2: `1536x1024` / `1024x1536`
- Skill display name updated: 阿里云 文生图 → AI 文生图
- Market version: 1.2.4 → 1.2.5, skill version: 1.3.0 → 1.4.0
### Test
- `gpt-image-2` via `/images/generations` endpoint: verified working
(b64_json response, 1.5MB PNG)
- Upload to media-store: verified working
- `dc-media://` rendering: verified working
2026-06-15 01:14:53 +08:00
19599c4051
Bump version from 1.2.3 to 1.2.4 ( #28 )
2026-06-14 22:22:50 +08:00
c6d852c4e9
feat(image-to-image): 新增图生图全局技能 v1.0.0 ( #27 )
...
## 概要 / Summary
新增图生图(image-to-image)全局默认技能,支持用户基于已有图片进行 AI 编辑和变换。
Add a new global builtin skill for image-to-image editing, allowing
users to edit and transform existing images with AI.
## 变更内容 / Changes
- 新增 `skills/image-to-image/SKILL.md`(英文)
- 新增 `skills/image-to-image/SKILL.zh-CN.md`(中文)
- `builtin-skills.json` 注册为全局默认技能
**技术实现**:
- 模型:`gpt-image-2`(通过 DesireCore Cloud 提供)
- 端点:`/images/generations` + `image` 字段(与文生图共用端点,image 字段触发图生图模式)
- 零代码改动:纯技能文件实现,media-proxy 已支持透传 image 字段
**与文生图(dashscope-image-gen)的区分**:
- 用户有参考图 → 图生图(本技能)
- 用户无参考图 → 文生图(dashscope-image-gen)
## 测试 / Test Plan
- [x] dev 模式端到端测试:用户发送图片 + 编辑指令 → 成功生成编辑后的图片
- [x] API 验证:`gpt-image-2` + `/images/generations` + `image` base64 字段 →
返回 b64_json 成功
2026-06-12 16:44:56 +08:00
42617e292d
fix(dashscope-image-gen): 切换到 /images/generations 端点 v1.3.0 ( #26 )
...
## 概要 / Summary
修复 dashscope-image-gen 技能的核心端点问题,从 `/chat/completions`(对 wan 图片模型返回 HTTP
400)切换到 `/images/generations`,同时新增多项防护措施防止模型偏离执行路径。
Fix the core endpoint issue: switch from `/chat/completions` (returns
HTTP 400 for wan image models) to `/images/generations`, with enhanced
guardrails to prevent model deviation.
## 变更内容 / Changes
**核心修复**
- 端点:`/chat/completions` → `/images/generations`
- 请求体:`messages` 数组 → `prompt` 字符串 + `size` + `n`
- 响应处理:`choices[].message.content` 图片 URL → `b64_json` base64 解码
**新增防护**
- `curl -o` 保存响应到临时文件,避免 ~2MB base64 灌入终端浪费 token
- 新增"供应商与默认算力"章节,明确 DesireCore Cloud 始终可用,无需探索
- 强化 7 条强制规则(原 5 条),禁止探索未列出的模型/端点/配置文件
- 端口发现优先从系统提示词获取,兜底 `${DESIRECORE_HOME:-$HOME/.desirecore}`
- 错误处理改为表格格式 + "禁止自行重试其他方案"
## 测试 / Test Plan
- [x] dev 模式端到端测试:用户输入"生成一张小猪" → 4 次工具调用,0 失败,图片成功生成并展示
- [x] 对比历史:第一次测试 472 条/7+ 失败 → 第二次 141 条/5 失败 → **本次 108 条/0 失败**
2026-06-10 17:23:52 +08:00
2cea1a3aa6
fix(minimax-video-gen): 切换到 NewAPI 网关,升级 v1.2.3 → v1.3.0 ( #25 )
...
## 概述 / Summary
将默认全局技能 **minimax-video-gen(MiniMax 文生视频)** 从 MiniMax 原生 API 切换到 NewAPI
网关,已在本地 dev 环境验证通过。版本 `1.2.3 → 1.3.0`。
Switch the built-in skill **minimax-video-gen** from MiniMax's native
API to the NewAPI gateway. Verified locally in dev. Version bumped
`1.2.3 → 1.3.0`.
## 改动 / Changes
- `provider: "minimax"` → `providerId: "desirecore-cloud"`(原生主机不支持
NewAPI 路径,必须用 providerId 指定网关 / native host doesn't support the NewAPI
path)
- endpoint `/video_generation` → `/video/generations`(带 s / with
trailing "s")
- 轮询/状态值 `Success/Fail/Processing` →
`completed/failed/queued/in_progress`
- 移除 `file_id` 检索步骤,下载链接改为直接从 `data.metadata.url` 提取 / drop the
`file_id` retrieval step, read the URL from `data.metadata.url`
- 字段名 `resolution` → `size`;默认参数 `size=768P, duration=6`
- 下载用 `curl -sL` 直连,不再经 media-proxy 代理 / download directly, no
media-proxy
中英双语文档(SKILL.md / SKILL.zh-CN.md)已同步修改。
## 影响 / Impact
合并后,已安装且未偏离该技能的线上客户端将通过 `marketSync` 的 git fetch + 10 分钟定时
`syncMarketSkillsOnly` 自动更新到 1.3.0(`compareSemver(1.2.3, 1.3.0) === -1`
触发更新);已手动修改过该技能的用户会被跳过以保护本地改动。
Once merged, installed clients that haven't locally diverged will
auto-update to 1.3.0 via marketSync git fetch + the 10-min
`syncMarketSkillsOnly` timer. Users who modified the skill locally are
skipped.
2026-06-09 18:40:10 +08:00
329fb5fed1
docs(dev-environment-setup): /environment/refresh 补充重新加载登录环境变量语义 ( #24 )
...
## 变更说明 / Description
配合客户端 PR
[desirecore/desirecore#808 ](https://github.com/desirecore/desirecore/pull/808 ):`POST
/api/runtime/environment/refresh` 端点现在除清检测缓存外,还会**重新抓取登录 shell / Windows
注册表环境并精确同步到 `process.env`**。本 PR 更新 `dev-environment-setup` skill 文档,让
AI 在「用户改了 `.zshrc` / `setx` 但工具看不到」时能主动调用该端点(无需用户重启 App)。
Companion to client PR desirecore#808: the `/environment/refresh`
endpoint now also reloads login-shell / Windows-registry env and
precise-syncs into `process.env`. This PR updates the
`dev-environment-setup` skill docs so the AI proactively calls it when a
user reports a freshly-changed env var that tools can't see.
## 改动 / Changes
- `references/desirecore-runtime.md`:第三节端点表更新 + 第七节扩展(重新加载语义 + `envDiff`
返回结构 + 「何时主动调用」触发场景 + 局限)
- `SKILL.md` / `SKILL.zh-CN.md`:L1 路由表新增「用户改了 `.zshrc` / 环境变量 / 代理 /
`setx` 但工具看不到 → 刷新端点」+ 重要约束第 3 条扩展(中英双语同步)
- `version` 2.0.3 → 2.0.4;并修正 #16 起遗留的 `source_hash` stale 值(`7e4baaf` →
`748e754b`,已用 `scripts/i18n` 同款算法验证)
## 说明 / Notes
- 该 skill 为 `translated_by: human`,中英两份已手动同步
- 文档描述的端点能力随客户端 PR desirecore#808 发布;旧客户端调用该端点仍只清检测缓存(不报错),文档短暂超前可接受
2026-06-09 11:27:13 +08:00
954891f9c2
fix(dashscope-image-gen): 移除硬编码 provider,改用 serviceType 自动发现 ( #23 )
...
## Summary
- 移除 `media-proxy` curl 命令中硬编码的 `"provider": "dashscope"`,改为仅传
`"serviceType": "image_gen"` 让系统自动匹配已启用的供应商
- 修改 frontmatter `provider: dashscope` → `provider: auto`
- 更新前置条件和错误处理描述,不再要求配置 DashScope 专用 Provider
- Bump version 1.1.1 → 1.2.0
## Background
之前技能硬编码了 `"provider": "dashscope"`,导致使用中转 key(如 DesireCore Cloud /
鹏耀科技)时 `findProvider` 按 slug 匹配不到已启用的供应商,文生图功能无法使用。
改为 `serviceType: "image_gen"` 自动发现后,`findProvider` 会在所有已启用的 provider
中查找支持 `image_gen` 服务类型的供应商,兼容直连和中转场景。
## Changes
| File | Change |
|------|--------|
| `SKILL.md` | 去掉 curl 中 `"provider": "dashscope"`;更新 prerequisites /
error handling |
| `SKILL.zh-CN.md` | 同步中文版修改 |
## Test plan
- [ ] 使用 DesireCore Cloud(鹏耀科技)默认算力,发送「画一幅小狗」验证技能触发和图片生成
- [ ] 使用独立 DashScope API Key 配置,验证兼容性
2026-06-05 18:03:50 +08:00
Zxy-y
17fe79ab49
feat(docx): 跨平台启动器替换 bash 包装,复用预装依赖免每次安装 ( #21 )
...
## 概述 / Summary
把 docx 技能对"客户端预装运行时依赖"的复用方式从 **bash 包装脚本**改为**跨平台 runtime 启动器**,实现
Win/macOS/Linux 一致、不依赖 Git Bash,并修复若干 POSIX 硬编码导致的 Windows 崩溃点。
Switch the docx skill's reuse of client-preinstalled runtime deps from a
**bash wrapper** to **cross-platform runtime launchers**, so it behaves
identically on Win/macOS/Linux without Git Bash, and fix several
POSIX-hardcoded crashes on Windows.
## 改动 / Changes
- **新增 / Add** `scripts/preload-deps.cjs`(Node 预加载,注入 `NODE_PATH`)与
`scripts/with-deps.py`(Python 启动器,按需切换到内置含 lxml 的 Python);**删除** bash 版
`with-deps.sh`。
- 生成走 `node -r preload-deps.cjs`,office 脚本走 `python with-deps.py` ——
离线复用预装的 docx-js / defusedxml / lxml,免每次 `npm`/`pip install`,且**不依赖
bash**。
- `comment.py` 补 defusedxml sys.path shim;`validate.py` 修临时目录泄漏(atexit
清理)。
- `accept_changes.py` 去除 `/tmp` 硬编码(`tempfile.gettempdir` +
`Path.as_uri`);`soffice.py` 仅 Linux 启用 AF_UNIX shim,避免 Windows 崩溃。
- `SKILL.md` / `SKILL.zh-CN.md` 同步命令形式、加 ESM
警告与外部工具(pandoc/LibreOffice/poppler)跨平台安装指引,`source_hash` 重算。
## 测试 / Testing
- 真实 dev 根目录端到端:生成 docx(免安装)+ 完整 XSD 校验(含 lxml)+ unpack/pack 往返均通过。
- 仓库 `validate-i18n.py` 校验通过;全 py 脚本 `py_compile` + `preload-deps.cjs`
`node --check` 通过。
---
- [x] 我已阅读并同意 CLA / I have read and agree to the CLA
Co-authored-by: 张馨元 <zhangxy@iynss.com >
Co-authored-by: Yige <a@wyr.me >
2026-06-04 11:14:36 +08:00
b15fce19bf
feat: add guizang-ppt market skill (vendored from op7418, AGPL-3.0) ( #20 )
...
## 概述 / Summary
新增市场技能 **`guizang-ppt`**(归藏网页 PPT),vendored 自上游开源项目
[op7418/guizang-ppt-skill](https://github.com/op7418/guizang-ppt-skill )。
Add a new **market skill** `guizang-ppt` — generates single-file HTML
horizontal-swipe slide decks (web PPT) in two visual systems (editorial
"magazine × e-ink" / "Swiss International"). Vendored from the upstream
open-source project.
## 变更内容 / Changes
- `skills/guizang-ppt/`:SKILL.md(DesireCore frontmatter 覆盖层 +
上游正文)、`references/`(10)、`assets/`(2 模板 + motion.min.js + 9 张
webp)、`scripts/validate-swiss-deck.mjs`、`LICENSE`(AGPL-3.0)、`NOTICE.md`(署名与合规)
- `skills/guizang-ppt/_desirecore/`:DesireCore 维护态(不随上游覆盖)
- `frontmatter.yaml`:市场 frontmatter 覆盖层(i18n: zh-CN 源 + en-US 显示串,body
暂回退中文,留给 CI 翻译)
- `upstream.json`:上游溯源(commit `014c572`、AGPL-3.0、作者 歸藏/op7418)
- `scripts/vendor/guizang-ppt.mjs`:可复用的 vendor 更新脚本(`--src <本地路径>` 或
`--ref <tag>`)
- `manifest.json`:`version` → `1.2.3`,`stats.totalSkills` → 25
## 定位 / Positioning
- **仅市场可选安装**:未加入 `builtin-skills.json`,不随客户端开机自动安装;用户在市场按需安装。
- 分类 `creative`;与已有 `pptx`(生成 .pptx 文件)区分:本技能生成 **HTML deck**。
## 许可与署名 / License & Attribution
上游为 **AGPL-3.0**。本技能保留原 `LICENSE` 与作者署名(`NOTICE.md` + `metadata.author`
+ `market.maintainer`),作为聚合内容分发。
## 校验 / Validation
- `python3 scripts/i18n/validate-i18n.py skills/guizang-ppt` → `OK: no
i18n issues found.`
## 手动更新流程 / Manual update
上游发版时:`node scripts/vendor/guizang-ppt.mjs --ref <tag>` → 核对 diff → 必要时
bump `_desirecore/frontmatter.yaml#version` 与 `manifest.json` → 提交。
---
🤖 Generated with [Claude Code](https://claude.com/claude-code )
2026-06-04 11:04:05 +08:00
a582f0f4f9
fix: 为 #16 路径替换涉及的技能补 per-skill version ( #22 )
...
## 背景 / Background
#16 (4f7037a ) 将 16 个 SKILL.md 的 `~/.desirecore` 路径批量替换为
`${DESIRECORE_ROOT}`,但只升了 `manifest.json`,**未升任何 per-skill version**。
客户端按 SKILL.md frontmatter 的 per-skill `version` 做 semver 同步:version
不变即判定「无更新」而永久跳过,导致已升级用户的全局技能正文停留在替换前的旧内容(与线上不同步)。
#16 (4f7037a ) bulk-replaced `~/.desirecore` with `${DESIRECORE_ROOT}` in
16 SKILL.md files but only bumped `manifest.json`, leaving every
per-skill `version` untouched. Clients sync by per-skill semver, so an
unchanged version is treated as "no update" and skipped forever —
upgraded users' global skills stay frozen on pre-replacement content.
## 改动 / Changes
- 对 #16 触及且至今仍未升号的 **14 个在册技能** 各 patch +1
- `manifest.json` 1.2.2 → 1.2.3(沿用 #16「内容改动同步升 manifest」的约定)
- 退役技能 `minimax-image-gen` / `minimax-tts`(不在 builtin-skills.json,不下发)跳过
- diff 为纯 version 行,未触动正文
Bumps the 14 in-manifest skills changed by #16 that were never
version-bumped; manifest 1.2.2 → 1.2.3; retired skills skipped.
Version-line-only diff.
2026-06-03 17:46:13 +08:00
f2e48ca1a5
feat(tech-diagram): 新增 6 套可选视觉风格 ( #19 )
...
## 概述 / Summary
给 tech-diagram 技能新增 **6 套可选视觉风格**(借鉴 fireworks-tech-graph 的多风格能力,落到
Mermaid 路线)。
Adds **6 selectable visual styles** to the tech-diagram skill (inspired
by fireworks-tech-graph's multi-style system, realized on the Mermaid
route).
## 改动 / Changes
- 新增 `references/styles.md`:6 套现成"风格头部"(`%%{init}%%` + 5 个 `classDef`)
- `brand-light`(默认)/ `brand-dark` / `terminal` / `blueprint` / `cream` /
`mono`
- `SKILL.md` / `SKILL.zh-CN.md`:新增 **Styles / 风格** 小节,改写规则
1/2,描述与触发词加入风格相关词
- `semantic-vocabulary.md` / `templates.md`:指向 styles.md,说明换风格只换头部
- 版本 `1.0.0 → 1.1.0`
## 设计要点 / Design
- **类名跨风格一致**(`agent/system/biz/warn/error`)——切换风格只替换头部块,节点/连线图体完全不变。
- 默认 `brand-light`;用户说"暗色/蓝图/奶油/极简/极客"或"风格 N"即切换。
- 图表是**用户产物**,非 `brand-*` 风格有意跳出 app 的 3+2 色彩规则(该规则约束产品 UI,不约束导出图)。
- Mermaid 能力边界内:风格 = 调色板 + 字体;fireworks 那种渐变光斑/窗口控件/蓝图标题框需原生 SVG,不在本次范围。
## 验证 / Verification
- ✅ `scripts/i18n/validate-i18n.py`:无问题(heading 数 9=9 对齐)
- ✅ 用客户端同版本 **mermaid 11.15.0** 解析全部 11 个图块(5 模板 + 6 风格骨架),全部通过
2026-05-31 19:49:33 +08:00
e9862ef1ab
feat: 新增 registering-services / using-services 两个元技能 ( #17 )
...
## 概要
为 Skill-first "应用与服务目录" 路线图新增两个元技能,作为 builtin 同步到用户
~/.desirecore/skills/:
- registering-services — 教 Agent 安全注册外部 HTTP/MCP 服务(riskLevel
选择、secretRef、SSRF、人类审批)
- using-services — 教 Agent 发现并调用目录服务(status/reviewStatus 过滤、HTTP/MCP
两条路径、不绕开治理)
## 改动
- skills/registering-services/{SKILL.md, SKILL.zh-CN.md}
- skills/using-services/{SKILL.md, SKILL.zh-CN.md}
- builtin-skills.json 加 2 个技能 id
- manifest.json totalSkills 22 → 24(已 rebase 到含 #18 tech-diagram 的 main)
- SKILL.zh-CN.md 采用 `<!-- locale: zh-CN -->` body 格式(移除冗余 frontmatter,对齐
docs/I18N.md 约定)
## 配套
主仓库 PR 同步引入:schema 扩展、新存储层、注册/治理路由、service-approval、http-request
治理闸门、per-service Skill 生成器、docker-app 派生 + service-health、前端徽章/治理
UI/派生服务面板。
## CLA
- [x] I have read and agree to the Contributor License Agreement
2026-05-31 15:43:16 +08:00
f4dfe8e32f
feat: add tech-diagram skill (Mermaid 技术图生成) ( #18 )
...
## 概述 / Summary
新增市场技能 **tech-diagram**:把自然语言描述转成品牌一致的技术图(架构图/流程图/时序图/状态机/ER/类图/思维导图),在
DesireCore 对话内复用现有 Mermaid 渲染管线即时渲染为 SVG。
Adds a market skill **tech-diagram** that turns natural-language
descriptions into brand-consistent technical diagrams, rendered inline
as SVG by the existing Mermaid pipeline in the DesireCore chat.
灵感来源 / Inspired by
[fireworks-tech-graph](https://github.com/yizhiyanhua-ai/fireworks-tech-graph )
的三个设计思路:语义词汇表即数据、风格系统化、领域 Pattern 内置——并落到 DesireCore 自己的 3+2 设计令牌与领域模型上。
## 改动 / Changes
- `skills/tech-diagram/SKILL.md` + `SKILL.zh-CN.md`:双语技能正文(强制风格规则 +
语义词汇表 + 输出约定)
- `skills/tech-diagram/references/semantic-vocabulary.md`:概念→Mermaid
形状→3+2 classDef 完整映射
- `skills/tech-diagram/references/templates.md`:4 个 DesireCore
领域模板(Agent 架构 / Delegate 6 模式 / 三层记忆 / 关系图谱)+ 时序图示例
- `builtin-skills.json`:加入 `tech-diagram`
- `manifest.json`:`version` 1.2.1→1.2.2,`stats.totalSkills`
21→22,`lastUpdated`
## 设计要点 / Design
- **风格一致性**:每张图以 `%%{init}%%` 注入品牌主题(覆盖对话全局暗色),用 5 个 `classDef` 绑定
DesireCore 3+2 配色(green/blue/purple + warning orange / error red)。
- **语义优于视觉**:Agent→六边形、系统/记忆→圆角/圆柱、决策→菱形;箭头编码主数据流/记忆写入/异步/层级/上报。
- **领域内置**:直接对照 `delegate.ts` / `conversation-memory.ts` /
`relations/projector.ts` 给出可套用模板。
## 验证 / Verification
- ✅ `scripts/i18n/validate-i18n.py`:无 i18n 问题
- ✅ 用 app 同版本 **mermaid 11.15.0**(securityLevel: loose)解析 `templates.md`
全部 5 个图块,全部通过
2026-05-30 23:56:27 +08:00
4f7037a6b6
fix: replace hardcoded ~/.desirecore paths with ${DESIRECORE_ROOT} variable ( #16 )
...
## Summary
- 将所有技能文件中的硬编码 `~/.desirecore/` 和 `$HOME/.desirecore/` 路径替换为
`${DESIRECORE_ROOT}/` 变量
- 递增 manifest.json version 至 1.2.1
## Why
dev 模式下 `DESIRECORE_HOME=~/.desirecore-dev`,硬编码路径导致技能读取错误的端口文件和目录。主仓库的
`variable-substitutor.ts` 会在运行时将 `${DESIRECORE_ROOT}` 替换为实际根目录。
## Test plan
- [ ] `npm run dev` 启动后触发任意技能,确认端口路径解析为
`~/.desirecore-dev/agent-service.port`
- [ ] prod 模式确认路径为 `~/.desirecore/agent-service.port`
🤖 Generated with [Claude Code](https://claude.com/claude-code )
2026-05-29 15:36:19 +08:00
3015a3ffb8
chore: bump version to 1.2.0 ( #15 )
...
## Summary
- 递增 manifest.json version 从 1.1.0 到 1.2.0
- 修复客户端 ensureMarketRepo() 因版本比对跳过解压,导致技能更新无法到达用户的问题
## Context
manifest.json version 自 1.1.0 后多次技能更新未递增,导致客户端版本比对机制认为本地已有效而跳过解压。
2026-05-28 23:42:20 +08:00
b8af171fcc
fix: add Script Path Rule to docx/pptx/xlsx skills ( #14 )
...
## Summary
- 为 docx/pptx/xlsx 三个技能的 SKILL.md 和 SKILL.zh-CN.md 添加"脚本路径规则"章节
- 告知 Agent 在执行技能自带脚本时必须使用 `<skill-dir>/` 前缀,因为 Agent 工作目录是用户项目目录而非技能目录
- 更新 en-US 块的 `source_hash`(内容已变更)
- 将 en-US 标记为 `translated_by: human`,跳过 CI 自动翻译
## Test plan
- [ ] 在 dev 环境验证 docx/pptx/xlsx 技能执行脚本时路径正确
- [ ] CI i18n-validate 通过
- [ ] CI i18n-auto-translate 跳过(translated_by: human)
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com >
2026-05-13 20:25:09 +08:00
dfd0cb62cf
fix(i18n): sync dashscope-image-gen & xiaomi-tts zh-CN body with local ( #13 )
...
## Summary
- 用本地 `defaults/global-skills/` 中的最新中文 body 内容更新远程 `SKILL.zh-CN.md`
- 更新 zh-CN `source_hash` 以反映最新内容
- 解锁 en-US `translated_by`,允许 CI 自动重新翻译英文 body
## 变更文件
- `skills/dashscope-image-gen/SKILL.zh-CN.md` — 中文 body 同步至本地最新版本
- `skills/dashscope-image-gen/SKILL.md` — 更新 source_hash + 解锁 en-US
- `skills/xiaomi-tts/SKILL.zh-CN.md` — 中文 body 同步至本地最新版本
- `skills/xiaomi-tts/SKILL.md` — 更新 source_hash + 解锁 en-US
2026-05-13 19:38:31 +08:00
78728e61ed
fix(i18n): GPT-5 / o-series 不支持自定义 temperature ( #11 )
...
## 接 PR #8 的进一步根因
本地用 personal PAT 端到端验证时发现:付费 quota 已生效、`gpt-5-mini`
可访问、`max_completion_tokens` 修复正确,但 translate.py 仍 400:
```
"message": "Unsupported value: 'temperature' does not support 0.1 with this model. Only the default (1) value is supported."
"param": "temperature"
"code": "unsupported_value"
```
GPT-5 系列和 o-series(o1 / o3 / o4)作为 reasoning models 强制
`temperature=1`,不允许自定义。
## 改动
`call_github_models` 基于 model id 条件设置 `temperature`:
- `gpt-5*` / `*o1*` / `*o3*` / `*o4*` → 不发该字段(用默认 1)
- 其他 model(gpt-4 系列、Anthropic Claude)→ 保持 `temperature=0.1`(翻译任务偏好
deterministic)
## 验证
本地实际跑通:`GITHUB_TOKEN=$(gh auth token) uv run --quiet
scripts/i18n/translate.py skills/markdown`
```
skills/markdown → en-US:
- calling github/openai/gpt-5-mini for en-US translation ...
- wrote root SKILL.md with translated body (3838 chars)
```
gpt-5-mini 返回 HTTP 200,3838 字符英文 body 正确写入,Markdown 结构保留。
2026-05-13 18:54:42 +08:00
94652d293c
fix(i18n): GPT-5 用 max_completion_tokens 解锁付费 quota 真实翻译能力 ( #8 )
...
## 根因
我以为 PR #4 的 translate 失败是 `gpt-5-mini` 在免费 tier 不可用 / payload too large
/ quota 用尽。**实际不是**——付费 quota 已生效,gpt-5-mini 可访问。真正原因是 **OpenAI Chat
Completions 2024+ 契约变化**:
- GPT-5 系列要求 `max_completion_tokens`
- 旧的 `max_tokens` 会被拒绝:`HTTP 400
{"error":{"code":"unsupported_parameter","param":"max_tokens"}}`
- translate.py 之前对 400 也 retry 3 次,连续 retry 撞 RPM 触发
429,把“参数错误”错误诊断为“quota 用尽”
通过本地 curl 直接调 API 确认:gpt-5-mini + max_completion_tokens 返回 HTTP 200。
## 改动
- `call_github_models`: `max_tokens` → `max_completion_tokens`(GPT-4
也接受新参数名,向前兼容)
- `_post_with_retries`: 400 直接 raise 并打印 response body(payload 不会变,retry
浪费 quota);429/5xx retry 前先打印 body 让 budget / rate-limit 详情可见
## 验证
- 本地 curl 用 gpt-5-mini + max_completion_tokens:HTTP 200 通过
- CI 上本 PR 不触及 skill,translate workflow 走 skip 分支(验证 detect-changes
不破坏现有逻辑)
- 合并后再开一个 verify PR 实际触发翻译验证端到端
2026-05-13 18:21:51 +08:00
8610f19f7e
ci(i18n-translate): 仅翻译本 PR 改动的 skill,避免 stale 雪崩 ( #6 )
...
## 背景
PR #4 翻译失败的根因:`translate.py` 总扫描整个 `skills/` 目录,任何一个 skill 的 stale
source_hash 都会触发翻译并占用 GitHub Models quota。一个大文件(如 manage-skills 14KB)撞免费
tier 8K input 上限 → 413 → 整个 workflow fail → ruleset 阻塞合并。
虽然 GitHub Models 已升级付费 quota(200K input 不会再 413),但 scope 收敛仍是更稳健的做法:单 PR
token 消耗与改动量成正比,而不是与整个 repo 的 stale skill 数成正比。
## 改动
- `detect-changes` step 在 `pull_request` 事件下提取本 PR 实际触及的 skill 目录(去重到
`skills/<name>` 粒度),输出到 `GITHUB_OUTPUT skill_paths`
- `precheck`(--check)与 `Translate stale locales` 步骤把 `skill_paths`
作为位置参数传给 `translate.py`,仅检查/翻译相关 skill
- `manifest.json` / `categories.json` 变动时回退到全扫描(这些影响 i18n fallback 链 /
supportedLocales 全局语义)
- `workflow_dispatch` 仍默认全扫描;其 `skill` 输入参数优先级最高
## 验证
- 本地测试 detect-changes shell 提取逻辑:skill 文件 → 正确去重;manifest.json →
全扫描;无相关改动 → relevant=false
- 本地 `translate.py --check skills/<name>` 正常工作
- 本 PR 自身仅触及 `.github/workflows/i18n-translate.yml`,detect-changes 应输出
`relevant=false`,translate 整体走 skip 分支
## Test plan
- [ ] CI 上 `validate` / `translate` / `wait-for-copilot-review` 全绿
- [ ] Copilot 评审通过 / conversation resolved
- [ ] Squash merge
2026-05-13 17:32:19 +08:00
0cb3758669
fix: 补全 dashscope-image-gen 和 xiaomi-tts 的 i18n CI 校验 ( #4 )
...
## 变更说明
修复 dashscope-image-gen 和 xiaomi-tts 的 i18n CI 校验、补全英文翻译,并连带修复其他 stale
skill 的 source_hash 漂移问题。
### dashscope-image-gen / xiaomi-tts(PR 主线)
- `name` 字段从中文改为目录名(CI rule-1 要求 lowercase ASCII + hyphens)。
- 补全 `metadata.i18n` 块:`locales`、`zh-CN` (含 body 指向
SKILL.zh-CN.md)、`en-US`(含 description / body=./SKILL.md)。
- 新增 `SKILL.zh-CN.md`(zh-CN body 文件)。
- **root SKILL.md 改写为英文 body**(与 SKILL.zh-CN.md 内容对应),由本 PR
手工翻译;`default_locale=en-US`、`source_locale=zh-CN`,与 docs/I18N.md
约定一致:root SKILL.md = default_locale body (en-US)、SKILL.zh-CN.md =
source_locale body (zh-CN)。
- 两 locale 锁为 `translated_by: human` + 正确 `source_hash`。
- 内容质量修复:流程标题 "严格按此两步执行" 改为 "严格按此三步执行";强制规则 2 措辞精确化(/tmp
仅作中转);xiaomi-tts 用户意图映射表中 `response_format` 改为 `audio.format`
与请求体参数表一致;zh-CN.description 改为纯中文。
- locale header 由 shell 转义残留 `<\!--` 修正为标准 `<!-- locale: zh-CN -->`。
### 连带:6 个 main 上已 stale 的 skill(避免 translate workflow 失败)
- `manage-skills` / `minimax-music-gen` / `minimax-video-gen` /
`skill-creator` / `web-access`:`en-US.source_hash` 重新计算为当前 zh-CN source
实际 hash;`translated_by` 由 `ai:claude-opus-4-7` 改为 `human`
以锁定现有翻译不被自动重译覆盖。
- `markdown`:补正 `en-US.source_hash`(之前是占位 `sha256:0000000000000000`)。
- 这些 skill 的 `en-US` 翻译内容保持不变,仅修正元数据。
### scripts/i18n/translate.py 容错增强
- 413 Payload Too Large 时不再 retry(payload 不会变小,retry 浪费时间)。
- 主循环 catch RuntimeError,把单个 skill 的失败写入 `plan["errors"]` 后继续处理下一个
skill,避免一个大文件 fail 整个 workflow。
- `--check` 模式下 plans 含 errors 也 exit 1(之前仅看 needs_translation,broad
except 会把异常吃掉导致误报通过)。
## Test plan
- [x] `i18n-validate` 通过
- [x] `i18n-translate --check` 显示所有 skill `up-to-date` 或 `human-locked,
skipping`
- [x] CI 上 `validate` / `translate` / `wait-for-copilot-review` 全绿
- [ ] Copilot 评审 conversation 全部 resolve
- [ ] Squash merge
---------
Co-authored-by: yi-ge <a@wyr.me >
2026-05-13 12:57:25 +08:00
b8101406fb
ci: 引入分支保护配套工作流(path 过滤 → detect-changes,AI review 自动化) ( #5 )
...
## Summary / 概要
为了让 `main` 分支保护规则在所有 PR 上稳定生效,调整两个现有 i18n workflow 并新增两个 AI review 配套
workflow。
### 已配置的 main ruleset(ID 16298003)
- 只允许 squash merge,禁止 force push / 删除
- 必需 status check:`validate`、`translate`,require
`strict_required_status_checks_policy=true`(必须 rebase 最新)
- PR
rule:`required_approving_review_count=0`、`required_review_thread_resolution=true`、`dismiss_stale_reviews_on_push=true`
- `bypass_actors=[]`:管理员也不能绕过
### 本 PR 改动
1. **i18n-validate / i18n-translate**:移除 `on.pull_request.paths`,把过滤下移到
job 内 `detect-changes` step。路径不相关时跳过实际逻辑但 job 仍 success,避免 required
check 因 path 过滤缺失而卡死非 i18n PR。
2. **auto-request-copilot-review** (新增):PR
opened/reopened/ready_for_review 时自动 `POST
/pulls/{n}/requested_reviewers` 加 Copilot 为 reviewer。
3. **wait-for-copilot-review** (新增):PR
opened/reopened/synchronize/ready_for_review 时启动,轮询 reviews API 等待
`copilot-pull-request-reviewer[bot]` 在当前 head SHA 提交 review。超时 8 分钟则
fail。
- 选择 polling 而不是 `pull_request_review` 事件触发是因为:Copilot bot 触发的
`pull_request_review` 事件被 GitHub 视为 first-time contributor,workflow run
会卡在 `action_required` 状态需 maintainer 在 web UI 手动批准,无法自动化。
合并后会再 PATCH ruleset 16298003,把 `wait-for-copilot-review` 加入 required
status checks 作为强制门槛。
## Test plan
- [x] `i18n-validate` 在本 PR 上跑出 success(PR 仅触及
`.github/workflows/`,relevant=false,走 skip 分支)
- [x] `i18n-translate` 同上
- [x] `auto-request-copilot-review` 跑出 success,Copilot 被自动加为 reviewer
- [x] `wait-for-copilot-review` 在 polling 窗口内捕获到 Copilot review 并 pass
- [ ] 解决 Copilot 提的 conversations 后能 squash merge
- [ ] 合并后用 PATCH ruleset 把 `wait-for-copilot-review` 加入 required checks
2026-05-13 00:21:51 +08:00
e1b4e69de6
fix: 修复 dashscope-image-gen 和 xiaomi-tts 的 i18n CI 校验
2026-05-12 23:24:36 +08:00
c62a4d68f2
feat(skills): 新增 dashscope-image-gen 和 xiaomi-tts 全局内置技能
...
- dashscope-image-gen: 阿里云通义万相文生图技能(wan2.7-image 系列)
- xiaomi-tts: 小米 MiMo 语音合成技能(mimo-v2.5-tts 系列)
- 更新 builtin-skills.json 清单
2026-05-12 23:13:15 +08:00