release-sync

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Release Content Sync

发布内容同步

Sync the latest OrchestKit release to external knowledge systems.
将最新的OrchestKit版本发布内容同步至外部知识系统。

What This Does

功能说明

  1. Reads the latest CHANGELOG entry, CLAUDE.md, and hook README
  2. Updates the OrchestKit NotebookLM KB notebook with fresh sources
  3. Ingests the release digest into HQ Knowledge Base (if available)
  4. Optionally generates a new podcast from the updated notebook
  1. 读取最新的CHANGELOG条目、CLAUDE.md以及hook的README文件
  2. 使用新的源更新OrchestKit NotebookLM知识库notebook
  3. 将发布摘要导入HQ知识库(若可用)
  4. 可选择从更新后的notebook生成新播客

Prerequisites

前提条件

  • MCP servers:
    notebooklm-mcp
    and/or
    hq-content
  • NotebookLM notebook ID stored in
    .claude/release-sync-config.json
  • MCP服务器:
    notebooklm-mcp
    和/或
    hq-content
  • NotebookLM notebook ID 存储在
    .claude/release-sync-config.json

Step 1: Detect Version and Read Sources

步骤1:检测版本并读取源文件

python
undefined
python
undefined

Read 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")
undefined
claude_md = Read("CLAUDE.md")
undefined

Step 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
undefined
python
undefined

Probe 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 )
undefined
mcp__notebooklm-mcp__source_add( notebook_id=config.notebooklm_notebook_id, source_type="text", title=f"Release {version} — {date}", text=release_digest, wait=True )
undefined

Step 4: Ingest to HQ Knowledge Base (Optional)

步骤4:导入至HQ知识库(可选)

python
undefined
python
undefined

Probe 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" )
undefined
mcp__hq-content__knowledge_ingest( title=f"OrchestKit {version} Release Notes", content=release_digest, project="orchestkit", content_type="release-notes" )
undefined

Step 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)