| name | opencli-adapter-author |
| description | Use when writing an OpenCLI adapter for a new site or adding a new command to an existing site. Guides end-to-end from first recon through field decoding, adapter coding, and verify. Replaces opencli-oneshot / opencli-explorer. For ad-hoc browser driving (no adapter), see opencli-browser instead; for a top-level orientation to opencli, see opencli-usage. |
| allowed-tools | Bash(opencli:*), Read, Edit, Write, Grep |
opencli-adapter-author
äœ æ¯èŠç»äžäžªç«ç¹å adapter ç agentãè¿ä»œ skill ç®æ ïŒä»é¶å°éè¿ opencli browser verify ç 30 åéå
éç¯ã
å
šçšçšç°æå·¥å
·ïŒopencli browser * / opencli doctor / opencli browser init / opencli browser verifyãæ²¡ææ°åœä»€ã
è°è¯æµè§åšå adapter æ¶ïŒäŒå
çŽæ¥åžŠäž --live --focusãè¿æ ·åœä»€è·å®å automation lease è¿åšïŒèäžå®¹åšåšåå°ïŒæ¹äŸ¿äœ æ žå¯¹æç»é¡µé¢ç¶æïŒèäžæ¯çæ¯ææ°éäºè¿æ¯é¡µé¢èµ°åäºã
å眮ïŒçäœ èœåšåª
å
æ¿ coverage-matrix.md å¿«éèªæµãäžäžªé®é¢ïŒ
- æ°æ®åšæµè§åšéçåŸå°åïŒïŒåŠ â å
è§£å³éŽæïŒ
- æ°æ®æ¯ HTTP/JSON/HTML åïŒïŒåŠ â äžåš skill èåŽïŒ
- éèŠå®æ¶æšéåïŒïŒæ¯ â æŸåæ°æ® HTTP æ¥å£ïŒæ²¡æå°±æŸåŒïŒ
äžäžªéœ yes ç»§ç»ã
é¡¶å±å³çæ
START
â
âŒ
ââââââââââââââââââââââââââââ
â opencli doctor éïŒ âââ no âââ 修桥æ¥ïŒdoctor èŸåºéçæç€ºïŒ
ââââââââââââââââââââââââââââ
â yes
âŒ
ââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â 读ç«ç¹è®°å¿ïŒ â
â 1. ~/.opencli/sites/<site>/endpoints.json â
â 2. ~/.opencli/sites/<site>/notes.md â
â 3. references/site-memory/<site>.md â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â åœäž endpoint + åæ®µ â çŽæ¥è·³å°ãendpoint éªè¯ãïŒäžè·³å adapterïŒmemory å¯èœè¿æïŒ
â æ²¡åœäž â ç»§ç»
âŒ
ââââââââââââââââââââââââââââ
â ç«ç¹äŸŠå¯ïŒsite-reconïŒ â â Pattern A/B/C/D/E
ââââââââââââââââââââââââââââ
â
âŒ
ââââââââââââââââââââââââââââ
â API åç°ïŒapi-discoveryïŒâ §1 network â §2 state â §3 bundle â §4 token â §5 intercept
ââââââââââââââââââââââââââââ
â æ¿å°åé endpoint
âŒ
ââââââââââââââââââââââââââââââââââââââââââââââ
â çŽæ¥ fetch éªè¯ endpointïŒmemory åœäžä¹èŠè·ïŒâââ 401/403 âââ åå° Â§4 æ token
â æ°æ®é空 + 200 âââ 空/HTML âââ åå° site-recon æ¢ Pattern
â memory éçåŒè¿æŽ»çåïŒ âââ ç«ç¹æ¢ç âââ æ è®°æ§ endpointïŒå api-discovery
ââââââââââââââââââââââââââââââââââââââââââââââ
â OK
âŒ
âââââââââââââââââââââââââââââââââââââââââ
â åæ®µè§£ç ïŒmemory éç field-map ä¹èŠæœæ¥ïŒâ èªè§£é â çŽæ¥ / å·²ç¥ä»£å· â field-conventions / æªç¥ â decode-playbook
â æ¯äžæ¡å·²ç¥å段åçœé¡µèçŒåŒïŒç¡®è®€æ²¡éäœ â
âââââââââââââââââââââââââââââââââââââââââ
â
âŒ
ââââââââââââââââââââââââââââ
â 讟计 columns (output) â 对ç
§ output-design.md çåœå / ç±»å / 顺åº
ââââââââââââââââââââââââââââ
â
âŒ
ââââââââââââââââââââââââââââ
â opencli browser init â çæ ~/.opencli/clis/<site>/<name>.js 骚æ¶
â å€å¶æåçé»å±
adapter â
â æ¹ name / URL / æ å°äžå€ â
ââââââââââââââââââââââââââââ
â
âŒ
ââââââââââââââââââââââââââââ
â opencli browser verify âââ 倱莥 âââ autofix skillïŒåå¯¹åºæ¥éª€
ââââââââââââââââââââââââââââ
â æå
âŒ
ââââââââââââââââââââââââââââ
â åæ®µ vs çœé¡µèçŒå¯¹äžé âââ æ°åŒäžå¯¹ âââ ååæ®µè§£ç
ââââââââââââââââââââââââââââ
â 对åŸäž
âŒ
ââââââââââââââââââââââââââââ
â åå ~/.opencli/sites/ â endpoints / field-map / notes / fixtures
ââââââââââââââââââââââââââââ
â
âŒ
DONE
RunbookïŒäžæ¥äžæ¥åŸéïŒ
[ ] 1. opencli doctor è¿å "Everything looks good"
[ ] 2. 读ç«ç¹è®°å¿ïŒ
[ ] ~/.opencli/sites/<site>/endpoints.json ååšïŒé颿æ³èŠç endpointïŒ
[ ] references/site-memory/<site>.md ååšïŒç"å·²ç¥ endpoint"è
[ ] åœäžåïŒ**è·³å°ç¬¬ 5ïŒendpoint éªè¯ïŒ + 第 7ïŒåæ®µæ žå¯¹ïŒ**ïŒäžèœçŽæ¥è·³ç¬¬ 9 å adapter
[ ] memory åå
¥è¶
è¿ 30 倩ïŒç `verified_at`ïŒâ åœäœè¿æïŒæå·å¯åšèµ° Step 3 â 4
[ ] 3. 䟊å¯ïŒsite-recon.mdïŒïŒ
[ ] **éŠé**ïŒ`opencli browser analyze <url>` äžæ¥æ¿ pattern + åç¬ + æè¿ adapter + next step
[ ] `analyze` ç»è®ºæš¡ç³æ¶åæè·ïŒ`open` â `wait time 2` (æ `wait xhr <regex>`) â `network`
[ ] å® PatternïŒA / B / C / D / EïŒ
[ ] 4. API åç°ïŒapi-discovery.mdïŒæ Pattern é §ïŒ
[ ] Pattern A â §1 network 粟读
[ ] Pattern B â §2 state æœå + §1 æ·±å±æ°æ®
[ ] Pattern C â §3 bundle / script src æçŽ¢
[ ] Pattern D â §4 token æ¥æº + é级 §5
[ ] Pattern E â æŸ HTTP 蜮询æ¥å£ïŒæŸäžå°æ §5
[ ] 5. çŽæ¥ fetch åé endpoint éªè¯ïŒ
[ ] è¿å 200
[ ] ååºå«ç®æ æ°æ®ïŒäžæ¯ HTML / 广åïŒ
[ ] 6. å®éŽæçç¥ïŒè£ž fetch é â PUBLICïŒèŠ cookie â COOKIEïŒèŠ header â HEADERïŒæ¿äžå°çŸå â INTERCEPT
[ ] 7. åæ®µè§£ç ïŒ
[ ] èªè§£é â çŽæ¥çš key
[ ] å·²ç¥ä»£å· â field-conventions.md æ¥è¡š
[ ] æªç¥ä»£å· â field-decode-playbook.mdïŒæåºé®å¯¹æ¯ / ç»æå·®å / åžžéææ¥ïŒ
[ ] 8. 讟计 columnsïŒoutput-design.mdïŒïŒ
[ ] åœå camelCase äžå¯¹éœé»å±
adapter
[ ] ç±»å / åäœ / çŸåæ¯æ ŒåŒæž
æ¥
[ ] 顺åºïŒè¯å«å â äžå¡æ°å â metadata
[ ] 9. å adapterïŒadapter-template.mdïŒïŒ
[ ] opencli browser init <site>/<name>
[ ] æŸåç«ç¹æåç±»åæåç adapterïŒcp è¿æ¥
[ ] æ¹ name / URL / åæ®µæ å°
[ ] 10. opencli browser verify <site>/<name>
[ ] éŠèœ®éè¿åç«å» `--write-fixture` çæ `~/.opencli/sites/<site>/verify/<cmd>.json` ç§å
[ ] ææ¹ç§åïŒå `patterns`ïŒURL / æ¥æ / ID æ ŒåŒïŒ+ `notEmpty`ïŒæ žå¿å段ïŒ+ æ¶çާ `rowCount`
[ ] åè·äžæ¬¡ `opencli browser verify <site>/<name>`ïŒç¡®è®€ â matches fixture
[ ] 11. åæ®µåŒ vs çœé¡µèçŒæ¯å¯¹ïŒå«åªç "Adapter works!"ïŒ
[ ] 12. ååç«ç¹è®°å¿ïŒ**verify éè¿ + èçŒæ¯å¯¹å¯¹åŸäžä¹å**ïŒschema è§ `references/site-memory.md`ïŒïŒ
[ ] `endpoints.json`ïŒä»¥ endpoint ççå䞺 keyïŒvalue = `{url, method, params.{required,optional}, response, verified_at: YYYY-MM-DD, notes}`
[ ] `field-map.json`ïŒåªè¿œå æ°ä»£å·ãkey = åæ®µä»£å·ïŒvalue = `{meaning, verified_at: YYYY-MM-DD, source}`ïŒ**å·²ååšç key äžèŠèŠç**ïŒæå²çªå
åçœé¡µèçŒåŒå¯¹éœåå
[ ] `notes.md`ïŒé¡¶éšè¿œå äžæ®µ `## YYYY-MM-DD by <agent/user>`ïŒåæ¬æ¬¡å adapter æ¶éå°çæ°å / æ°ç»è®º
[ ] `verify/<cmd>.json`ïŒ**å¿
å¡«ã** `opencli browser verify` çææåŒïŒargs / rowCount / columns / types / patterns / notEmptyïŒïŒStep 10 å·²ç»è®©äœ çæäºïŒè¿éåªæ¯ checklist
[ ] `fixtures/<cmd>-<YYYYMMDDHHMM>.json`ïŒåäžä»œè¯¥ endpoint ç宿Žååºæ ·æ¬ïŒå»æ cookie / token / çšæ·ç§æå段ååïŒïŒç»åç»åæ®µå¯¹æ¯ / 犻线 replay çš
[ ] è°è¯è¿çšäžåŠæåš repo / adapter ç®åœ dump è¿äžŽæ¶æä»¶ïŒ`.dbg-*.html` / `raw-*.json` / çïŒïŒ**åš commit åæž
å¹²å**ââè¿äºæ¬æ¥å°±è¯¥èœåš `~/.opencli/sites/<site>/fixtures/` æ `/tmp/`
é级路åŸïŒææ¥å¡äœè·³å°åªïŒ
| å¡åš | ç°è±¡ | è·³å» |
|---|
| Step 4 API åç° | network 空ïŒ__INITIAL_STATE__ ä¹ç©º | §3 bundle æ baseURL |
| bundle æäžå° baseURL | §5 intercept |
| Step 5 endpoint éªè¯ | 401 / 403 | §4 token ææ¥ |
| 200 äœååºæ¯ HTML | å Step 3 æ¢ Pattern 倿 |
| 200 äœ data: [] 空 | åæ°äŒ é / æ¥å£æ¢çïŒå §1 ç network éçå®è¯·æ±å€Ž |
| Step 7 åæ®µè§£ç | æåºé®å¯¹æ¯æšäžåº | field-decode-playbook.md §3 ç»æå·®å |
| è¿æšäžåº | å
èŸåº rawïŒadapter è·èµ·æ¥åè¿ä»£ |
| Step 10 verify 倱莥 | fltt æŒäº / åæ®µæ å°é | autofix skill |
| æåæ°žè¿æ¯ null | åæ®µè·¯åŸéäºïŒå Step 7 |
| Step 10 verify fixture mismatch | [pattern] row[i] æ¥é | å
èçŒæ¯å¯¹çœé¡µåŒïŒåŒå¯¹ â æ¯ fixture pattern å€ªäž¥ïŒæŸå®œïŒåŒäžå¯¹ â åæ®µæ å°é |
| [column] missing column "X" | å®é
response 没è¿åïŒç«ç¹æ¹ç or args 圱åïŒïŒéæ° --update-fixture æä¿® adapter |
| [type] actual null / undefined | åæ®µæå倱莥ïŒå Step 7 éæœïŒäžŽæ¶ fallback çš union type string|null åªæåšè¯ä¹ççå¯ç©ºæ¶çš |
| Step 11 æ°åŒäžå¯¹ | å·® 10000 å | åäœäžç»äžïŒ"äž" vs "å
"ïŒ |
| çŸåæ¯å° 100 å | ååºå·²æ¯ 0.025ïŒäžèŠ Ã 100 |
åèæä»¶
| æä»¶ | ä»ä¹æ¶åç¿» |
|---|
references/coverage-matrix.md | åšæåå"æ¯åŠåšèåŽå
"èªæµ |
references/site-recon.md | Step 3 å®ç«ç¹ç±»å |
references/api-discovery.md | Step 4 æŸ endpoint |
references/field-conventions.md | Step 7 æ¥å·²ç¥åæ®µä»£å· |
references/field-decode-playbook.md | Step 7 åæ®µäžåšè¯å
žæ¶ |
references/output-design.md | Step 8 åœå / ç±»å / é¡ºåº |
references/adapter-template.md | Step 9 æä»¶ç»æ + 掻äŸå convertible.js |
references/site-memory.md | æ»è§ïŒin-repo ç§å + æ¬å° ~/.opencli/sites/ ç䞀å±ç»æ |
references/site-memory/<site>.md | Step 2 读ç«ç¹å
Œ
±ç¥è¯ïŒeastmoney / xueqiu / bilibili / tonghuashun å·²éºïŒ |
references/success-rate-pitfalls.md | Step 7 / 11 èž©ååç¿»ïŒ10 ç§"verify èœè¿äœæ°æ®æ¯éç"éé»å€±èŽ¥ |
å
³é®çºŠå®
- adapter åªåŒ
@jackwener/opencli/registry + @jackwener/opencli/errorsïŒäžçšç¬¬äžæ¹
columns æ°ç»å func è¿å对象 keys å®å
šå¯¹éœïŒå«é¡ºåºïŒ
- å·²ç¥å€±èŽ¥æ
CliError('CODE', 'msg') æ AuthRequiredError(domain)ïŒäžèŠ silent return []
- åç§äºº adapter çš
~/.opencli/clis/<site>/<name>.jsïŒå
buildïŒïŒèŠæ PR æ copy å° clis/<site>/<name>.js
- ç«ç¹è®°å¿æ¯èœ®ååïŒæ²¡è®°å¿ â çš skill â 产çè®°å¿ â äžæ¬¡å 5 åé
- è°è¯è¿çšäžçåå§ dump / æå
/ HTML æ ·æ¬åªèœèœåš
~/.opencli/sites/<site>/fixtures/ æ /tmp/ã䞥çŠåš repo æ ¹ç®åœãclis/<site>/ æåœåå·¥äœç®åœç .dbg-*.html / raw-*.json / sample.* è¿ç±»äžŽæ¶æä»¶ïŒPR diff äŒåžŠäžå»ïŒå«äºº review æ¶åŸçŠïŒã
å¡äœäº
- è¯æç±»ïŒ
opencli doctor â ç notes.md â æ autofix skill
- åæ®µè§£ç ç±»ïŒ
field-decode-playbook.md å
šäžèèµ°å® â å
èŸåº raw è¿ä»£
- endpoint æŸäžå°ïŒapi-discovery §5 intercept å
åº
äžèŠçãçéäº verify èœéè¿äœæ°æ®æ¯éçïŒçšæ·çå°ä¹±ç æåç°ã