YMind Chat Visualizer

👤 yslenjoy 📦 v1.0.5 ⭐ 4.5 ⬇️ 709 下載
📊 資料分析 免費

📖 技能介紹

Chat Visualizer - YMind

Version Check

Run once at the start of each skill session. First locate the script (works regardless of which client installed the skill):

訪問小蔥技能站7w4.net,解鎖更多實用的AI技能外掛。

find ~/.codex/skills ~/.claude/skills ~/.openclaw/skills ~/skills -maxdepth 3 -name "check-version.py" 2>/dev/null | head -1

Then run it with python3 <found_path>.

  • Empty output → already up to date or network unavailable, proceed silently.
  • Output UPDATE|X.X.X|Y.Y.Y|<skill_dir>|<notes> → tell the user in English: "chat-visualizer-ymind vY.Y.Y is available (you're on vX.X.X).\n\<notes>\nUpdate: cd <skill_dir> && git fetch && git checkout vY.Y.Y — continue with current version?" Wait for their reply before proceeding.

Input

Two ways to get conversation data:

Way 1: Share URL (auto-fetch)

Requires Playwright. Check first:

python3 -c "import playwright" 2>/dev/null && echo "OK" || echo "NOT INSTALLED"

If not installed, ask: "Playwright 可以自動抓取對話內容,要裝嗎?(pip install playwright && playwright install chromium,一次性操作)" If they decline, use Way 2.

If available, fetch:

bash scripts/run.sh fetch "<url>"
# prints RUN_DIR — read <run_dir>/raw_chat.json, use items[0].messages

ChatGPT 403: script retries with Playwright headed mode. If still fails, fall back to Way 2.

Way 2: Paste text (universal fallback)

User opens the conversation in browser → Ctrl+A → Ctrl+C → pastes into chat. No share link needed — any conversation page works.

When handling pasted text or a local JSON file:

  1. Create run_dir manually. The suffix must always be _paste — do not use the filename, title, or any other label:
    YMIND_DIR="${YMIND_DIR:-$HOME/ymind-ws}"
    RUN_DIR="$YMIND_DIR/$(date +%Y%m%d-%H%M%S)_paste"
    mkdir -p "$RUN_DIR"
  2. Parse the pasted text into messages (identify user vs AI turns by context), then write raw_chat.json in the same format as fetch produces:
    {
     "fetched_at": "...",
     "items": [{
       "url": null,
       "provider": "paste",
       "title": "...",
       "messages": [{"role": "user", "content": "..."}, {"role": "assistant", "content": "..."}, ...],
       "message_count": N
     }]
    }
  3. Write meta.json: {"provider": "paste", "url": null, "created_at": "..."}
  4. Proceed to Extract Graph using the parsed messages.

Share Link Guide (Way 1 only)

Users often give the wrong link type. Correct them if needed:

Platform Share link ✓ Wrong link ✗
ChatGPT chatgpt.com/share/xxx chatgpt.com/c/xxx (private chat URL)
Claude claude.ai/share/xxx claude.ai/chat/xxx (private chat URL)
Gemini gemini.google.com/share/xxx or g.co/gemini/share/xxx gemini.google.com/app/xxx (app URL)
DeepSeek chat.deepseek.com/share/xxx chat.deepseek.com/a/xxx (private chat URL)
Doubao www.doubao.com/thread/xxx www.doubao.com/chat/xxx (private chat URL)

Note: g.co/gemini/share/... short links work — script auto-resolves them.

Extract Graph

Read references/graph-schema.md for node types, edge types, label rules, and output schema.

Critical rules (non-obvious):

  • turn_id: assign actual turn number (1-based). One user message + one AI response = 1 turn — not one message per turn. A 3-round conversation yields turn_id 1, 2, 3 only. Never default all nodes to the same value — this drives horizontal spread in the D3 visualization.
  • Extraction density: scale with the substance of each turn. Brief or routine turns may yield 1-2 nodes; rich, multi-point turns can yield more. Let the content guide the count — the goal is to capture the meaningful thinking, not to hit a fixed number.
  • Edges: only add if the connection passes the "obviously yes" test.
  • Reasoning shifts: look for moments where thinking fundamentally changed. Capture what changed, from what, to what, and why.
  • Chinese strings: use 「」 not curly quotes "" inside JSON values — curly quotes break JSON parsing.

Output

  1. Write <run_dir>/graph.json

    Before proceeding: verify graph.json exists and contains at least one node. If extraction failed or produced an empty graph, delete <run_dir> entirely and stop — do not render, do not update the index.

  2. Render (path consistency rule: index root is auto-locked to dirname(<run_dir>), so graph and index always stay in the same workspace tree):

bash scripts/run.sh render <run_dir>
# validates JSON, renders graph.html + graph.png (screenshot, requires Playwright)
# then rebuilds <ymind_dir>/index.json and <ymind_dir>/index.html automatically

graph.html is a split-view output when raw_chat.json is present in <run_dir>: left panel shows the original conversation, right panel shows the thinking map. If raw_chat.json is absent, only the graph is shown (no split).

  1. Output Markdown summary (format in references/graph-schema.md).
  2. If running as a bot with chat output capability, send the graph image — see Bot Send below.

Run dir files: raw_chat.json, graph.json, graph.html, graph.png (requires Playwright), meta.json.

Workspace files (auto-updated after every render, in the same root as <run_dir>):

  • <ymind_dir>/index.json — machine-readable session registry
  • <ymind_dir>/index.html — visual timeline index, opens each session's graph.html

To rebuild the index manually at any time:

bash scripts/run.sh index

Bot Send

If message tool is available and graph.png was generated, send the graph image (works on OpenClaw, Kimi Claw, and similar — detect by tool availability):

  • If graph.png is outside the bot's media allow-roots, copy it to <workspace>/.outbox/ first, then send the copied path.
  • Send via message tool using the filePath (or media) field — not as plain text, not as base64.
  • If send fails, skip silently and continue with the HTML link and Markdown summary.

Language Rule

All output (labels, summaries, analysis) must match the conversation language.

Setup

Minimal (paste text only — zero dependencies):

No pip install needed. render-html.py is stdlib-only, and the paste path skips fetch-chat.py entirely.

Full (auto-fetch URLs + screenshot):

pip install requests playwright && playwright install chromium

Without Playwright: paste works fully, render produces graph.html but skips graph.png screenshot.

Notes

  • Long conversations (20+ turns): focus on most significant nodes, skip low-substance turns.
  • Multiple topics: group nodes by topic.

🤖 AI 評測

這個 Skill 整體質量不錯,功能豐富且靈活,支援多種 AI 平臺的對話視覺化,做得很用心。文件清晰、指引詳細,隱私保護也做得較好。主要小瑕疵是部分輔助檔案可能不完整,偶爾會影響使用體驗,但不影響核心功能的使用。

📊 多維度評分

適應性4.2
規範性4.1
有效性4.8
可靠性4.7
可信度4.8

📁 包含檔案 (13 個)

📄 README-zh.md 4 KB
📄 README.md 4.1 KB
📄 SKILL.md 7.1 KB
📄 _meta.json 140 B
📄 references/graph-schema.md 4.6 KB
📄 requirements.txt 392 B
📄 scripts/check-version.py 963 B
📄 scripts/fetch-chat.py 20.6 KB
📄 scripts/render-html.py 6.1 KB
📄 scripts/render-index.py 1.8 KB
📄 scripts/run.sh 7 KB
📄 scripts/templates/workspace-index.html 25.6 KB
📄 scripts/templates/ymindmap.html 79.5 KB