release-sync
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseRelease Content Sync
发布内容同步
Sync the latest OrchestKit release to external knowledge systems.
将最新的OrchestKit版本发布内容同步至外部知识系统。
What This Does
功能说明
- Reads the latest CHANGELOG entry, CLAUDE.md, and hook README
- Updates the OrchestKit NotebookLM KB notebook with fresh sources
- Ingests the release digest into HQ Knowledge Base (if available)
- Optionally generates a new podcast from the updated notebook
- 读取最新的CHANGELOG条目、CLAUDE.md以及hook的README文件
- 使用新的源更新OrchestKit NotebookLM知识库notebook
- 将发布摘要导入HQ知识库(若可用)
- 可选择从更新后的notebook生成新播客
Prerequisites
前提条件
- MCP servers: and/or
notebooklm-mcphq-content - NotebookLM notebook ID stored in
.claude/release-sync-config.json
- MCP服务器:和/或
notebooklm-mcphq-content - NotebookLM notebook ID 存储在 中
.claude/release-sync-config.json
Step 1: Detect Version and Read Sources
步骤1:检测版本并读取源文件
python
undefinedpython
undefinedRead current version from CLAUDE.md
Read current version from CLAUDE.md
version = Grep(pattern="Current.*\d+\.\d+\.\d+", path="CLAUDE.md")
version = Grep(pattern="Current.*\d+\.\d+\.\d+", path="CLAUDE.md")
Read CHANGELOG — extract latest release section
Read CHANGELOG — extract latest release section
changelog = Read("CHANGELOG.md", limit=80)
changelog = Read("CHANGELOG.md", limit=80)
Read hook architecture summary
Read hook architecture summary
hook_readme = Read("src/hooks/README.md", limit=100)
hook_readme = Read("src/hooks/README.md", limit=100)
Read CLAUDE.md for project overview
Read CLAUDE.md for project overview
claude_md = Read("CLAUDE.md")
undefinedclaude_md = Read("CLAUDE.md")
undefinedStep 2: Load Config
步骤2:加载配置
python
config = Read(".claude/release-sync-config.json")python
config = Read(".claude/release-sync-config.json")Expected format:
Expected format:
{
{
"notebooklm_notebook_id": "0a05e680-e33b-4d8c-94b2-5df26a1af329",
"notebooklm_notebook_id": "0a05e680-e33b-4d8c-94b2-5df26a1af329",
"hq_kb_project": "orchestkit"
"hq_kb_project": "orchestkit"
}
}
If config doesn't exist, prompt user:
```python
AskUserQuestion(questions=[{
"question": "NotebookLM notebook ID for OrchestKit KB?",
"header": "Configuration",
"options": [
{"label": "Use default", "description": "OrchestKit v7 — Complete KB (0a05e680...)"},
{"label": "I'll provide", "description": "Enter a custom notebook ID"}
]
}])
如果配置不存在,提示用户:
```python
AskUserQuestion(questions=[{
"question": "NotebookLM notebook ID for OrchestKit KB?",
"header": "Configuration",
"options": [
{"label": "Use default", "description": "OrchestKit v7 — Complete KB (0a05e680...)"},
{"label": "I'll provide", "description": "Enter a custom notebook ID"}
]
}])Step 3: Update NotebookLM Sources
步骤3:更新NotebookLM源
python
undefinedpython
undefinedProbe MCP availability
Probe MCP availability
ToolSearch(query="select:mcp__notebooklm-mcp__source_add")
ToolSearch(query="select:mcp__notebooklm-mcp__source_add")
Add release digest as new source
Add release digest as new source
mcp__notebooklm-mcp__source_add(
notebook_id=config.notebooklm_notebook_id,
source_type="text",
title=f"Release {version} — {date}",
text=release_digest,
wait=True
)
undefinedmcp__notebooklm-mcp__source_add(
notebook_id=config.notebooklm_notebook_id,
source_type="text",
title=f"Release {version} — {date}",
text=release_digest,
wait=True
)
undefinedStep 4: Ingest to HQ Knowledge Base (Optional)
步骤4:导入至HQ知识库(可选)
python
undefinedpython
undefinedProbe HQ content MCP
Probe HQ content MCP
ToolSearch(query="select:mcp__hq-content__knowledge_ingest")
ToolSearch(query="select:mcp__hq-content__knowledge_ingest")
If available, ingest
If available, ingest
mcp__hq-content__knowledge_ingest(
title=f"OrchestKit {version} Release Notes",
content=release_digest,
project="orchestkit",
content_type="release-notes"
)
undefinedmcp__hq-content__knowledge_ingest(
title=f"OrchestKit {version} Release Notes",
content=release_digest,
project="orchestkit",
content_type="release-notes"
)
undefinedStep 5: Generate Podcast (Optional)
步骤5:生成播客(可选)
python
AskUserQuestion(questions=[{
"question": "Generate a podcast from the updated notebook?",
"header": "Podcast",
"options": [
{"label": "Yes — deep dive", "description": "~10 min podcast covering all changes"},
{"label": "Yes — brief", "description": "~3 min summary"},
{"label": "No", "description": "Skip podcast generation"}
]
}])
if podcast_requested:
mcp__notebooklm-mcp__studio_create(
notebook_id=config.notebooklm_notebook_id,
artifact_type="audio",
audio_format=selected_format,
confirm=True
)python
AskUserQuestion(questions=[{
"question": "Generate a podcast from the updated notebook?",
"header": "Podcast",
"options": [
{"label": "Yes — deep dive", "description": "~10 min podcast covering all changes"},
{"label": "Yes — brief", "description": "~3 min summary"},
{"label": "No", "description": "Skip podcast generation"}
]
}])
if podcast_requested:
mcp__notebooklm-mcp__studio_create(
notebook_id=config.notebooklm_notebook_id,
artifact_type="audio",
audio_format=selected_format,
confirm=True
)Output
输出
Report what was synced:
Release Sync Complete — v{version}
NotebookLM: source added to {notebook_title}
HQ KB: ingested as release-notes/{version}
Podcast: generating (poll with studio_status)报告同步完成情况:
Release Sync Complete — v{version}
NotebookLM: source added to {notebook_title}
HQ KB: ingested as release-notes/{version}
Podcast: generating (poll with studio_status)