Install
openclaw skills install deepseek-dev-assistantRead DeepSeek chat share links and continue development from extracted code and docs.
openclaw skills install deepseek-dev-assistantTrigger when user shares a DeepSeek chat link and wants to continue the work from that conversation.
Match these URL patterns:
https://chat.deepseek.com/share/*https://chat.deepseek.com/a/chat/*Also trigger on phrases like "deepseek聊天记录", "deepseek chat link", "继续开发 deepseek".
DeepSeek share pages are JS-rendered — static web_fetch returns an empty shell. Must use the headless browser.
Locate the browser skill — it lives at ~/.openclaw/workspace/skills/browser/index.js (a Puppeteer script).
Check puppeteer is installed before first use:
cd ~/.openclaw/workspace/skills/browser && node -e "require('puppeteer')" 2>&1 || npm install puppeteer
Read the page:
cd ~/.openclaw/workspace/skills/browser && node index.js read "<url>" 2>/dev/null
Timeout 60s — the page is JS-heavy and may take a while to render. If output is ~800 chars or just "DeepSeek\n", the page didn't render → retry once.
The browser returns all visible text, including page chrome (headers, disclaimers, "本回答由 AI 生成" etc). Strip trailing boilerplate. Common tail markers to trim after:
本回答由 AI 生成内容仅供参考和 DeepSeek 继续聊Users iterate in DeepSeek until satisfied — later turns contain improved code. When the same file path appears in multiple turns, keep only the latest version (closest to end of output). Work backwards through the chat, skip earlier duplicates.
Look for an ASCII tree near the top of the output:
项目结构
WatchDose/
├── Shared/
│ ├── Models/
│ │ └── Foo.swift
...
This tells you what files to expect and where they belong. Compare extracted files against this tree to spot missing ones.
DeepSeek's code blocks render as HTML — innerText strips \``` markers. Use these boundary patterns instead:
Pattern A — Explicit file headers (multi-file Swift/Go/Rust/Java projects):
文件:Path/To/File.swift
swift ← UI button text, discard
复制 ← UI button text, discard
下载 ← UI button text, discard
import Foo ← actual code starts here
...
文件:Path/To/Next.swift ← next file boundary
Split on ^文件: lines. Strip leading swift/复制/下载 boilerplate from each file. Save to paths matching the header.
Pattern B — Single-file HTML (common for web projects):
sed -n '/<!DOCTYPE html>/,$p' /tmp/raw.txt | sed '/<\/html>/q' > output.html
Pattern C — No file markers (snippet-only chats):
Save code blocks to extracted/<descriptive-name>.ext. Infer filename from surrounding text.
When DeepSeek runs out of space, it outputs fragments labeled with:
关键代码片段精简 / 实现要点由于长度限制参考 XXX 的结构自行实现These are NOT complete files. Write them to FRAGMENTS_TODO.md with the target file they belong to, rather than as standalone .swift files.
FRAGMENTS_TODO.md.Save <project-dir>/README.md with: source link, extraction time, file list (complete vs fragment), tech stack, feature checklist, completion status.
Show a summary:
📋 Extracted from DeepSeek chat:
- N turns
- N complete files: <list>
- N fragments: <list> → FRAGMENTS_TODO.md
- N missing (in tree but not output): <list>
- Goals: <summary>
- Status: ~X% complete
Then proceed to implement the next unfinished task.
| Case | Action |
|---|---|
| Link expired / private | Ask for a new share link |
| Chat is discussion-only (no code) | Report: "No code found — this conversation is discussion-only." |
| Multi-turn: same file in multiple turns | Keep only the last version (closest to end) |
| Very long chat (>100 turns) | Read from end; focus on most recent + code-heavy sections |
| Multiple links provided | Process sequentially; cross-reference if same project |
| Code is snippet-only (no file paths) | Save to extracted/, flag as incomplete, ask user |
| Code fragments ("关键代码片段") | Write to FRAGMENTS_TODO.md, not as standalone files |
puppeteer not found | Run npm install puppeteer in the browser skill directory |
| Page blocked / anti-bot | Ask user to copy-paste the chat content manually |
| Boilerplate "swift/复制/下载" in output | Strip from start of each extracted file (see Phase 5) |
| Project tree present but files missing | List missing files in report, flag as incomplete |
memory/YYYY-MM-DD.md so context persists across sessions.