Jason Lee
|
4ce7a1998a
|
fix(build): handle YAML folded block scalar (>) in frontmatter parser (#32)
## Summary
- `build-skills-json.ts` 的自定义 YAML 解析器只处理了 `|`(literal block scalar),未处理
`>` (folded block scalar)
-
`longbridge-catalyst-radar`、`longbridge-earnings`、`longbridge-earnings-preview`
三个 skill 的 `description` 字段使用了 `>` 语法,导致生成的 `skills.json` 中这些 skill 的
`description` 被输出为字面量 `">"`
- 修复后,`>` folded scalar 的内容会正确折叠(段内换行合并为空格,空行保留为段落分隔符)
## Test plan
- [ ] 运行 `bun run scripts/build-skills-json.ts --output
/tmp/test.json`,确认三个 skill 的 description 内容正常
- [ ] 合并后 CI 触发,确认 developers repo 收到正确的 PR
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-05-21 21:32:19 +08:00 |
|
Endless
|
6c4f3a166e
|
Add CI to build skills.json to developers (#31)
🤖 Auto-generated by Endless task
[#20](https://endless.longbridge-inc.com/projects/developers/tasks/20).
Initiated by: Huacnlee Li Huashun
## 背景
`longbridge/skills` 仓库已积累了 125 个 skill,但 `longbridge/developers` 站点的
Skill 页面仍显示原有的 30 个条目。两个仓库之间没有自动同步机制,每次 `skills` 更新后必须手动修改 developers 里的
TypeScript catalog 文件,导致信息严重滞后。
本次改动在 `longbridge/skills` 侧新增 CI 自动化:push 到 `main` 时,读取所有
`skills/<slug>/SKILL.md` frontmatter,生成 `skills.json`,并自动向
`longbridge/developers` 提交 PR 更新该文件,使 Skill 页面始终反映最新 skill 列表。
## 摘要
- 解决的问题:新增 skill 后 developers 站点 Skill 页面不自动更新,需人工维护 TypeScript catalog
- 做了什么:
- 新增 `scripts/build-skills-json.py`:遍历 `skills/<slug>/SKILL.md`,用 pyyaml
提取 frontmatter,输出 `skills.json`(含 slug、name、description、metadata)
- 新增 `.github/workflows/update-skills-json.yml`:push to main 时运行 build
脚本,clone `longbridge/developers`,若 `skills.json` 有变更则推分支并用 `gh pr
create` 开 PR
- 为什么这样做:
- 复用已有的 `DEVELOPERS_DISPATCH_TOKEN` secret,无需新增权限配置
- `git diff --quiet` 检测无变更时跳过 PR,避免噪音
- 用 Python + pyyaml 解析 YAML frontmatter,GitHub Actions `ubuntu-latest`
环境天然支持,可靠性高
- 如何验证:
1. 在 skills 仓库根目录执行 `pip install pyyaml && python3
scripts/build-skills-json.py`,应输出 `Generated skills.json with 125
skills`
2. 向 `main` 推一个测试 commit,确认 Actions 运行并在 `longbridge/developers` 产生 PR
## 修改
| 文件 | 改动内容 |
|---|---|
| `scripts/build-skills-json.py` | 新增:遍历所有 SKILL.md frontmatter,生成
skills.json |
| `.github/workflows/update-skills-json.yml` | 新增:push to main 触发,生成并 PR
同步 skills.json 到 developers |
## 关键决策
用 Python + pyyaml 而非 Node.js:pyyaml 在 `ubuntu-latest` runner 上预置,且能正确处理
SKILL.md 里的 `description: |` 多行 YAML 字符串,无需额外 npm 依赖或 package.json。
---------
Co-authored-by: Huacnlee Li Huashun <huacnlee@longbridge-inc.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Jason Lee <huacnlee@gmail.com>
|
2026-05-21 21:10:47 +08:00 |
|
袁章洪
|
bf70bab90e
|
chore: drop validate-skills.py + add CLAUDE.md (repo is now Python-free)
去掉最后一只 Python 工件,加 CLAUDE.md 给 Claude Code 在 repo 内开发时直接的项目规约。
删除:
- scripts/validate-skills.py(及空 scripts/ 目录)
原因:已无 cli.py / test_cli.py 可跑,只剩 frontmatter slug/length 校验,这些
在 install 时(npx skills add / claude /plugin marketplace)会被工具链拒绝;
本地 sanity check 不必为这点价值留 ~127 行 Python。彻底"零 Python"叙事
也跟 prompt-only 模式更一致。
新增:
- CLAUDE.md(152 行)— 维护者新增 / 改 skill 时的项目规约速查:
* 仓库布局
* Slug + frontmatter 必填项
* 三语 trigger 强制(简繁分歧字必须分开写)
* Response language 指令模板
* No Python wrapper 原则 + "用 longbridge --help 验证 flag"
* CLI vs MCP 路径选择
* Error handling 表格规约
* references/ 渐进披露
* 加新 skill 9 步 checklist
* 反模式列表
修订:
- README.md "For developers":移除 validate-skills.py 行,加 CLAUDE.md 链接
- docs/install.md:Verify 段去掉 "Repo self-test" 章节(无 validator 可跑了),
保留真账户烟测和 Claude Code 端到端;FAQ slug 检查段改成手动指令;
smoke test 编号 3 → 2
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-04-29 16:14:02 +08:00 |
|
袁章洪
|
553601477d
|
refactor: drop the last 2 cli.py wrappers; all 19 skills now prompt-only
剩余两个保留 cli.py 的 skill(longbridge-quote / longbridge-watchlist-admin)也
按"不在 .py 中硬编码 cli 参数,改用 longbridge --help 自描述"原则去掉 wrapper。
删除:
- skills/longbridge-quote/scripts/{cli.py,test_cli.py}
- skills/longbridge-watchlist-admin/scripts/{cli.py,test_cli.py}
共 4 文件,-778 行
重写 SKILL.md(2 份):
- longbridge-quote:
* "## CLI" 改成直接调 `longbridge quote / static / calc-index --format json`
* 加显式提示 "If unsure of exact flag names, run `longbridge <subcommand>
--help` first"(避免 SKILL.md 跟 CLI 版本耦合)
* 多子命令合并的责任从 cli.py envelope 下沉到 LLM:Workflow 章节明示
"merge per-symbol rows by symbol into a single object"
* 删 cli.py 自定义 envelope 描述,改成描述 longbridge 原生 JSON 形态
- longbridge-watchlist-admin:
* "Two-step protocol" 重写成纯 prompt 约定:① preview ② wait for
explicit confirmation ③ execute,不再依赖 cli.py 的 --confirm gate
* "Safety gates" 段去掉 binary-lock(Python 才能强制),改成依赖
longbridge CLI 自己的 confirmation prompt(`watchlist delete` 自带)
* CLI 调用模板用 `longbridge watchlist <create|update|delete> ...`
* 加显式提示运行 `longbridge watchlist <subcommand> --help` 验证当前
flag 拼写
文档同步:
- docs/architecture.md:
* 删除"Two skills retain a Python wrapper"段,改成"all 19 skills are
now prompt-only"
* Decision flow 流程图删除 wrapper 路径
* Multilingual end-to-end flow 图改用 `longbridge quote NVDA.US
--format json` 替代 cli.py 调用
* Maintainer guidelines #5/#6 重写 — "no Python wrappers" + "command
not found is the path-switch signal"
- docs/install.md:
* 移除 Python 3.8+ 先决条件(已无 .py 脚本依赖)
* Smoke test 用 `longbridge quote/kline/watchlist --format json` 替
代 python3 scripts/cli.py 调用
* FAQ 把 binary_not_found 章节改名 "command not found: longbridge"
* 5 → 6 个 analysis tier(catalyst-radar 上次没纠正)
- scripts/validate-skills.py:docstring 更新,test_cli.py runner 代码保留作
防御(若有人重新引入 wrapper 还能跑测试)
validate 19/19 ✓。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-04-29 15:44:01 +08:00 |
|
袁章洪
|
a873314b0f
|
docs: update architecture.md to match prompt-only design + tighten validator note
跟着 commit 543d587(10 skill 改成直接调 longbridge CLI 不走 cli.py),把
docs/architecture.md 与 scripts/validate-skills.py 同步更新:
architecture.md:
- "Default rule" 段:从"LLM calls python3 scripts/cli.py" 改成 "LLM calls
longbridge <subcommand> --format json directly",fall back 时机从
error_kind=binary_not_found 改成 shell command not found
- 新增"Two skills retain a Python wrapper" 高亮:解释 longbridge-quote 和
longbridge-watchlist-admin 为什么仍保留 cli.py(envelope 合并 + 安全 gate)
- "Decision flow" 流程图加一层:决定是否走 wrapper(只有 quote 进 wrapper 路径,
其它直接 longbridge CLI),原 cli.py-centric 决策改成 shell 退出码 / stderr
关键词驱动
- "error_kind is the glue" 段改名 "Shell exit / stderr is the glue":说明 17
个 prompt-only skill 走 stderr 解析,2 个 wrapper skill 走 7 种 error_kind
enum;path-switch signal 从 binary_not_found 变成 shell command not found
- "Six analysis-tier skills" (原 Five,加上 catalyst-radar 算第 6 个)
- 收尾段改成 "17 of 19 skills are pure SKILL.md"
validate-skills.py:
- docstring:"For the two skills that still ship a Python wrapper..." —
test_cli.py 现只对 quote + watchlist-admin 跑;其它 17 个没 scripts/test_cli.py,
自然跳过(原代码本来就 if test_file.exists() check,无需改逻辑)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-04-29 15:28:30 +08:00 |
|
袁章洪
|
526bf1a6ac
|
feat: add marketplace, license, docs, validator for the merged repo
完成 longbridge-new-skills → longbridge-skills 的合并(commit 3/3):
新增:
- .claude-plugin/marketplace.json — Claude Code 插件市场入口,/plugin install
longbridge@longbridge-skills 一次装 17 个;pluginRoot/source 配为 ./,skills 字段
指 ./skills/ 让 Claude Code 扫子目录
- LICENSE — MIT(对齐 microsoft/skills 范式)
- docs/architecture.md — 三语支持 + CLI/MCP 路由两套设计的内部说明
- docs/install.md — 三种安装方式 + 先决条件 + 验证 + FAQ;repo URL 改为
https://github.com/longbridge/skills
- scripts/validate-skills.py — 扫 skills/<slug>/ 校验 frontmatter + 跑 12 个 test_cli.py
- README.md — 重写为新 layout:支持单 skill symlink 与 plugin marketplace
双安装路径,链接到 docs/architecture / docs/install / docs/superpowers/(历史)
- .gitignore — 扩展 Python / OS / 编辑器 / 构建产物常见忽略项
保留(audit trail):
- docs/superpowers/specs/ + docs/superpowers/plans/ — 18 份历史设计稿,引用旧
中文名,仍可追溯当初的设计决定与风险评估
合并后状态:
- 17 个 skill 在 skills/ 下,全部 lowercase ASCII slug
- frontmatter / cli.py SKILL_NAME / scripts/test_cli.py 全部对齐英文 slug
- 三语 trigger 关键词 + Response language 指令 + 三列字段对照表
- python3 scripts/validate-skills.py → 17/17 ✓
- 12 个 read-tier scripts/test_cli.py → 全绿
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-04-29 11:09:46 +08:00 |
|