Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
# Update star history (orphan branch)
#
# 方案说明:
# - 用本仓 GITHUB_TOKEN 拉取 stargazer 时间戳,生成本地静态 SVG(避免第三方
# api.star-history.com 因 GitHub API 限制而空白)。
# - 图表只 force-push 到 orphan 分支 `star-history`(分支上仅有 SVG,无项目源码),
# 不往默认分支提交,避免 main 被每日 bot commit 刷屏。
# - README 通过 raw.githubusercontent.com/.../star-history/star-history.svg 引用。
# - 首次运行会自动创建该 orphan 分支;无需预先建分支,也无需额外 PAT。
#
name: Update star history

on:
schedule:
# Daily 11:48 Beijing (UTC 03:48). Avoid :00 to reduce schedule drop under load.
- cron: "56 3 * * *"
workflow_dispatch:

permissions:
contents: write

concurrency:
group: update-star-history
cancel-in-progress: true

jobs:
update-star-history:
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Generate static star history
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
mkdir -p /tmp/star-history-out
python3 scripts/generate-star-history.py \
--repo "$GITHUB_REPOSITORY" \
--output /tmp/star-history-out/star-history.svg

- name: Publish SVG to orphan branch
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BRANCH: star-history
SVG: /tmp/star-history-out/star-history.svg
run: |
set -euo pipefail
test -f "$SVG"

SHOULD_PUSH=1
if git fetch --depth=1 origin "$BRANCH"; then
if git show "origin/${BRANCH}:star-history.svg" > /tmp/star-history-old.svg 2>/dev/null; then
if python3 scripts/generate-star-history.py \
--same-chart "$SVG" /tmp/star-history-old.svg; then
echo "Star history chart unchanged; skip orphan-branch push."
SHOULD_PUSH=0
fi
fi
else
echo "Orphan branch '$BRANCH' not found yet; will create on first publish."
fi

if [ "$SHOULD_PUSH" -eq 0 ]; then
exit 0
fi

WORK="$(mktemp -d)"
cp "$SVG" "$WORK/star-history.svg"
cd "$WORK"
git init
git checkout --orphan "$BRANCH"
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git add star-history.svg
git commit -m "chore: update star history"
git remote add origin "https://x-access-token:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git"
git push -f origin "HEAD:${BRANCH}"
echo "Published star-history.svg to orphan branch '$BRANCH'."
6 changes: 5 additions & 1 deletion .agents/skills/patent-disclosure-skill/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,10 @@ tmp/
examples/example_patent_reader/**
!examples/example_patent_reader/README.md

# 国知局抓取结果缓存(tools/)
# 国知局抓取结果缓存
tools/_last_result*.html
tools/crawl/_last_result*.html
tools/crawl/_last_home.html

# Python / tools
tools/node_modules/
Expand All @@ -19,6 +21,8 @@ __pycache__/
.pyo
.venv/
venv/
.venv-step310/
tools/shared/.venv-step310/
*.egg-info/

# math_render 联调产物(tests/test_math_render.py 运行时生成)
Expand Down
127 changes: 110 additions & 17 deletions .agents/skills/patent-disclosure-skill/INSTALL.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,34 +50,122 @@ git clone <本仓库 URL> "$env:USERPROFILE\.cursor\skills\patent-disclosure-ski

### 与「仅打开文件夹」等价关系

若未使用上述 `skills/` 布局,也可**直接用 Cursor 打开本仓库根目录**作为工作区;此时将 **`CLAUDE_SKILL_DIR`** 理解为「包含 `SKILL.md` 的目录」,prompts 路径为 `./prompts/*.md`,与 `SKILL.md` 示例命令中的 **`${CLAUDE_SKILL_DIR}`** 同义。
若未使用上述 `skills/` 布局,也可**直接用 Cursor 打开本仓库根目录**作为工作区;此时将 **`CLAUDE_SKILL_DIR`** 理解为「包含 `SKILL.md` 的目录」。分步指令在:

为与 Claude Code 迁移一致,Cursor 也会扫描 **`~/.claude/skills/`**、项目内 **`.claude/skills/`** 等路径;详见 Cursor 官方文档与当前版本设置项。
- `prompts/disclosure/`(交底;含 `invention/`、`utility_model/`、`design/`)
- `prompts/reader/`(通俗解读)
- `prompts/shared/`(Structure / Appearance 填表)

## 可选依赖
与 `SKILL.md` 中的 **`${CLAUDE_SKILL_DIR}/prompts/...`** 同义。

若仅使用交底书 Markdown 流程,不必安装 Python
Cursor 也会扫描 **`~/.claude/skills/`**、项目内 **`.claude/skills/`** 等路径;详见 Cursor 官方文档与当前版本设置项

若需使用 **`tools/md_to_docx.py`**(Markdown → Word)、**`tools/docx_to_md.py`**(Word → Markdown + 图片)或 **`tools/pptx_to_md.py`**(PPT → Markdown + 图片,供扫描):
## 默认交底需要什么(发明主路径)

技能默认按**发明交底**走:定稿要 `.md` + `.docx`,3.2 / 3.4 框图要出 PNG,Step 5 优先国知局检索。这条路径**需要**:

1. **Python 3.9+**(及 pip)
2. 在技能根目录安装依赖(含 `python-docx`、`playwright` 等):

```bash
pip install -r requirements.txt
```

3. **本机 Google Chrome 或 Microsoft Edge**(推荐,多数电脑已有)。出图与查新共用,**不必**再装 Node / npm / mmdc。

探测是否已能启动浏览器:

```bash
python tools/shared/browser.py --probe
```

- `ok=true`:可直接定稿出图、跑国知局检索。
- 没有 Playwright 包:再执行一次上面的 `pip install -r requirements.txt`。
- 本机既无 Chrome 也无 Edge:才执行 `python -m playwright install chromium`(整机一次即可)。

无可用浏览器时,发明仍可先交 **Markdown**(mermaid 围栏保留);Word 里框图可能先是代码块,补齐浏览器后重跑 `tools/shared/mermaid_render.py` 即可。

公式进 Word 走 **OMML**(`latex2mathml`,已在 `requirements.txt`)。**不要**为默认交底安装 matplotlib。仅当定稿 stderr 出现 `omml_text_fallback`、且用户回复「是」之后,才:

```bash
pip install matplotlib
python tools/shared/md_to_docx.py -i 定稿.md -o 定稿.docx --base-dir 定稿目录 --math-render
```

**实用新型 / 外观**定稿以各类型 `prompts/disclosure/utility_model|design/disclosure_builder.md` 为准:填表产出 `structure_schema`/`appearance_schema` + **`figure_plan.yaml`**,成文只嵌清单入文图(结构图或视图;docx 对实用建议、对外观可选)。不跑发明 mermaid 时,仍建议装 `requirements.txt`(扫 Word/PPT、出 docx)。

仅在编辑器里**手写** Markdown、完全不跑仓库脚本时,才不必装 Python。

细则见 **`tools/README.md`**。

## 可选:STEP 多视角解析(默认关闭)

扫描发现 **`.step` / `.stp`** 时,Agent 会**先反问**是否开启;确认前**不安装**下列依赖。仅有 SolidWorks 等原生 CAD、无 STEP 时,只会提示导出中性格式。

```bash
pip install -r tools/shared/requirements-step.txt
python tools/shared/cad_scan.py -r knowledge --json
python tools/shared/step_to_views.py --check-deps
python tools/shared/step_to_views.py --enable-step-parse -i model.step -o outputs/{案件}/cad_views
```

与主 `requirements.txt` **独立**。细则见 `prompts/disclosure/project_scan.md`「CAD / STEP」、`tools/README.md`。

## 可选:外观辅助线稿(默认关闭)

有产品图的外观案件可反问是否开启;确认前不生成。流程见 `prompts/shared/design_lineart_assist.md`。

```bash
python tools/shared/design_lineart_gate.py --print-confirm
python tools/shared/design_lineart_gate.py --enable-design-lineart --case-dir outputs/{案件} --prepare-jobs
```

**禁止**无参考图纯文生图;产出为交底辅助草稿,非申报终稿。

## 可选:实用新型结构辅助线稿(默认关闭)

有结构图的实用新型案件可反问是否开启;确认前不生成。流程见 `prompts/shared/structure_lineart_assist.md`(件号对齐 StructureSchema;推荐轮廓与序号分层)。

```bash
pip install -r requirements.txt
python tools/shared/structure_lineart_gate.py --print-confirm
python tools/shared/structure_lineart_gate.py --enable-structure-lineart --case-dir outputs/{案件} --prepare-jobs
```

交底书定稿须同时产出 **.md + .docx**,且将 **mermaid**(**3.2 系统框图**与 **3.4 流程图**)经 **`tools/mermaid_render.py`** 转为 PNG 嵌入。**mermaid** 须 **Node.js**:在 **`tools/`** 执行 **`npm install`**(含 **`puppeteer`**);若 **`mmdc`** 报找不到 Chrome,再执行 **`npx puppeteer browsers install chrome-headless-shell`**。详见 **`tools/README.md`**
**禁止**无参考图纯文生图与自创件号;产出为交底辅助草稿,非申报终稿

## 可选:国知局公布公告站抓取(Step 5 查新优先路径)

若需使用 **`tools/cnipa_epub_search.py`**(一步,推荐)或 **`tools/cnipa_epub_crawler.py`** / **`tools/cnipa_epub_parse.py`**([epub.cnipa.gov.cn](http://epub.cnipa.gov.cn/),见 `prompts/prior_art_search.md`):
若需使用 **`tools/crawl/cnipa_epub_search.py`**(一步,推荐)或 **`tools/crawl/cnipa_epub_crawler.py`** / **`tools/crawl/cnipa_epub_parse.py`**([epub.cnipa.gov.cn](http://epub.cnipa.gov.cn/),见 `prompts/disclosure/prior_art_search.md`):

```bash
pip install -r tools/requirements-cnipa.txt
python -m playwright install chromium
pip install -r tools/crawl/requirements-cnipa.txt
python tools/shared/browser.py --probe
# 仅当 probe 显示无 Chrome/Edge 且无自带 Chromium 时:
# python -m playwright install chromium
python tools/crawl/cnipa_epub_search.py --type utility_model 卡扣
```

**Windows 终端中文**:`cnipa_epub_search.py` / `cnipa_epub_crawler.py` 已对 stdout/stderr 尝试 **UTF-8**(`reconfigure`)。若仍乱码,可在运行前执行 **`chcp 65001`**,或设置环境变量 **`PYTHONUTF8=1`**,以便复制 **`EPUB_HITS_JSON:`** 一行给 Agent 时不误判为失败。
**Windows 终端**:定稿 / 查新脚本会把 stdout、stderr 设为 UTF-8,子进程带 `PYTHONUTF8=1`。Agent **以退出码和机读前缀为准**(`EPUB_HITS_JSON:`、`PROBE:`、`MERMAID:`、`DOCX:`、`MATH:`);stderr 有中文或 PowerShell `NativeCommandError` **不等于**失败。不必先 `chcp 65001`。若仍乱码,可设 **`PYTHONUTF8=1`**,且不要用 **`2>&1`** 把 JSON 混进错误流。

`playwright` 已写入根目录 `requirements.txt`。若已按上文装过主依赖,**不必**再为查新单独 pip 一遍;`tools/crawl/requirements-cnipa.txt` 仅在只装爬虫、不装整份主依赖时使用。未装或探测失败时,Step 5 仍可按该 prompt 降级为 **WebSearch**(如 Google 学术)。

## 可选:审查答复案例库(模式 D,默认关闭)

显式触发「审查答复 / 案例入库 / `/oa`」后使用。配置与向量库默认在操作系统**文档**目录:`{Documents}/patent-disclosure-skill/oa/`(`PATENT_OA_HOME` 可覆盖)。**推荐**智谱 `embedding-3`;亦支持 DashScope / MiniMax / 本地 / OpenAI(`config.py set --preset …`)。

```bash
pip install -r tools/oa/requirements-oa.txt
# 例:智谱
# 环境变量 ZHIPUAI_API_KEY=…
python tools/oa/config.py recommend
python tools/oa/config.py set --preset zhipu
# 其他:--preset dashscope|minimax|local|openai
python tools/oa/ingest_case.py -i path/to/case.md
python tools/oa/refresh_vault.py # 刷新 oa 索引 / Bases / 关联 Canvas
python tools/oa/search_cases.py --query "创造性 区别特征" --defect inventiveness --top-k 5
```

与主流程 `requirements.txt` **独立**;未安装时 Step 5 仍可按该 prompt 降级为 **WebSearch**(如 Google 学术)
Obsidian 案例落在 `{vault}/oa/cases/history/`(另有 `pending/`、`drafts/`)。与主依赖**独立**。细则见 `prompts/oa/`、`tools/oa/README.md`、[SKILL.md](SKILL.md) 模式 D

## 强烈建议:专利通俗解读 + Obsidian 库

Expand All @@ -86,11 +174,11 @@ python -m playwright install chromium
对话开始前由 Agent 运行探测(也可手动):

```bash
python tools/patent_reader/check_obsidian_env.py
python tools/patent_reader/vault/check_obsidian_env.py
# 自动接受唯一/当前打开的库:
python tools/patent_reader/check_obsidian_env.py --auto-accept
python tools/patent_reader/vault/check_obsidian_env.py --auto-accept
# 手动指定并持久化(+ Windows 用户环境变量):
python tools/patent_reader/check_obsidian_env.py --set "C:\Users\你\Documents\Obsidian Vault" --setx
python tools/patent_reader/vault/check_obsidian_env.py --set "C:\Users\你\Documents\Obsidian Vault" --setx
```

亦可仅设会话变量:
Expand All @@ -107,6 +195,11 @@ $env:PATENT_READER_GLOSSARY_DIR = "Research/术语"
pip install -r tools/patent_reader/requirements.txt # PDF:pymupdf
```

**首次使用**:解读**入库时会自动**初始化库(CSS、Bases、索引、关系图配色)。用户只需安装 Obsidian、配置库路径,并(可选)在社区插件市场安装 Dataview 等——步骤与插件清单见 **`docs/obsidian-setup-guide.md`**。交付后 Agent 按 **`prompts/obsidian_plugin_guide.md`** 引导可选插件。
**首次使用**:解读**入库时会自动**初始化库(CSS、Bases、索引、关系图配色)。用户只需安装 Obsidian、配置库路径,并(可选)在社区插件市场安装 Dataview 等——步骤与插件清单见 **`docs/obsidian-setup-guide.md`**。交付后 Agent 按 **`prompts/reader/obsidian_plugin_guide.md`** 引导可选插件。

工具链分层见 **`tools/patent_reader/README.md`**(`shared/` · `extract/` · `analyze/` · `vault/`)。常用入口:

工具链见 **`tools/patent_reader/README.md`**。
```bash
python tools/patent_reader/extract/fetch_patent_pdf.py --pub CN… -o tmp/patent_reader/RUN
python tools/patent_reader/vault/write_patent_obsidian_note.py --help
```
Loading