ๆ็ฝ็ซใElectron ๅบ็จใๆฌๅฐๅฝไปค่กๅทฅๅ ท็ปไธๅฐ่ฃ ๆๅฏ่ฐ็จ็ CLI ๆฅๅฃใ
OpenCLI ๆฏไธไธช TypeScript CLI ๆกๆถ๏ผ็จๆฅๆๅทฒๆ่ฝๅๆด็ๆ็จณๅฎใๅฏ็ปๅใๅฏ่ๆฌๅ็ๅฝไปค่กๆฅๅฃใๅฎๆขๅฏไปฅ็ดๆฅๅฐ่ฃ ็ฝ็ซๅ Electron ๅบ็จ๏ผไนๅฏไปฅๆ็ฐๆๆฌๅฐ CLI ็บณๅ ฅ็ปไธๅ ฅๅฃ๏ผๅนถไธบ AI Agent ๆไพๆต่งๅจๆไฝใๆฅๅฃๆข็ดขๅ้้ ๅจ็ๆ่ฝๅใ
ๅฆๆไฝ ็ฌฌไธๆฌกๆฅ่งฆ่ฟไธช้กน็ฎ๏ผๅ ็่ฟไธไธช้ฎ้ข๏ผ
- ๅฎ่ฝๅไปไน๏ผ็ ๅ่ฝๆฆ่ฟฐ
- ๅฎๆไนๅทฅไฝ๏ผ็ ๆถๆๅ็
- ๆไน็ปง็ปญๆฉๅฑ๏ผ็ ๅผๅๆๅ
npm install -g @lyhue1991/opencliopencli list
opencli list -f yaml
opencli hackernews top --limit 5
opencli zhihu hot -f json
opencli plugin list
opencli gh pr list --limit 5ๅคงๅคๆฐๆต่งๅจ็ฑปๅฝไปคไผๅค็จไฝ ๅฝๅ Chrome ๆ Chromium ็็ปๅฝๆ๏ผๅ ๆญค้่ฆๅ ๆปก่ถณไธค็น๏ผ
- ๆต่งๅจๅทฒ็ป็ปๅฝ็ฎๆ ็ฝ็ซ
- ๅทฒๅฎ่ฃ Browser Bridge ๆฉๅฑ
่ฏฆ็ปๅฎ่ฃ ไธ่ฏๆญ่ง๏ผ
- Browser Bridge Setup
opencli doctoropencli daemon status
OpenCLI ่งฃๅณ็ๆฏโๆๅทฒๆ่ฝๅๅๆ็จณๅฎ CLI ๆฅๅฃโ็้ฎ้ข๏ผๆ ธๅฟ่ฝๅๅ ๆฌ๏ผ
ๅฐ็ฝ้กตๆ็ซ็น่ฝๅๅฐ่ฃ
ไธบ opencli <site> <command>๏ผ้ๅ็ญๆฆใ๏ฟฝ๏ฟฝ็ดขใ่ฏฆๆ
่ฏปๅใไธ่ฝฝใ่ดฆๅทไฟกๆฏ่ทๅ็ญๅบๆฏใ
- ๆฏๆๅ ฌๅผๆฅๅฃ่ฎฟ้ฎ
- ๆฏๆๅค็จๆต่งๅจ Cookie ็ปๅฝๆ
- ๆฏๆๅบไบ่ฏทๆฑๅคดใๆฆๆชๆ UI ็ๆดๅคๆ่ฎฟ้ฎๆนๅผ
้่ฟ Chrome DevTools Protocol ่ฟๆฅ Electron ๅบ็จ๏ผๆๆก้ข็ซฏ่ฝๅ็บณๅ ฅๅฝไปค่ก่ฐ็จ้พ่ทฏใ
- ้ๅๆก้ข็ซฏ่ชๅจๅ
- ้ๅๆฐๆฎๆๅไธๆไฝ็ผๆ
- ้ๅ่ฎฉ AI Agent ๆไฝๅทฒๆ Electron ๅทฅๅ ท
OpenCLI ๅฏไปฅไฝไธบๆฌๅฐ CLI ็็ปไธๅ
ฅๅฃ๏ผๆ ghใdockerใvercel ็ญๅทฅๅ
ท็บณๅ
ฅๅไธๅฝไปค็ฉบ้ดใ
- ๆฏๆๅ ็ฝฎๅค้จ CLI ๆณจๅ่กจ
- ๆฏๆๆณจๅๅทฒๅฎ่ฃ ็ๆฌๅฐๅฝไปค
- ๆฏๆ็งป้ค็จๆท่ชๅฎไนๆณจๅ
ไปๅบๅ ็ฝฎไบ้ขๅ AI Agent ็ๆต่งๅจๆไฝไธ็ญ็ฅๆขๆต่ฝๅ๏ผ
opencli operate๏ผๆๅผ้กต้ขใ่ฏปๅ็ถๆใ็นๅปใๆง่ก่ๆฌใๆฅ็็ฝ็ป่ฏทๆฑopencli cascade๏ผๆขๆตๆด้ๅ็่ฎค่ฏ็ญ็ฅskills/opencli-creator/SKILL.md๏ผๆๅฏผ AI Agent ๅฎๆๆฐ adapter ็ๅ็ฐใ็ผๅไธๆต่ฏๆต็จ
opencli operate ๆไพไธ็ป้ขๅ AI Agent ็ๆต่งๅจๆงๅถๅฝไปค๏ผๅฏ็จไบ๏ผ
- ๆๅผ้กต้ขใ่ฏปๅ็ถๆใ็นๅปใ่พๅ ฅใ็ญๅพ
- ๆง่ก้กต้ข่ๆฌใๆๅ HTML / ๆๆฌ / ๅฑๆง
- ๆฅ็่ชๅจ้้ๅฐ็็ฝ็ป่ฏทๆฑ
OpenCLI ๆฏๆๅค็งๆฉๅฑๆนๅผ๏ผ
- ๅ ็ฝฎ adapter
- ็จๆท่ชๅฎไน adapter
- plugin
- ๅค้จ CLI register/unregister
ๅ่ๅ ฅๅฃ๏ผ
OpenCLI ็ๆ ธๅฟไธๆฏๆไธชๅ็ฌ็ซ็น่ๆฌ๏ผ่ๆฏไธๅฅ็ปไธ็โๅ็ฐใๆณจๅใ่ฃ ้ ใๆง่กใ่พๅบโๆกๆถใ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ opencli โ
โ src/main.ts โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๅ็ฐไธๆณจๅ โ
โ - src/discovery.ts โ
โ - src/build-manifest.ts โ
โ - src/registry.ts โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๅฝไปค่ฃ
้
ๅฑ โ
โ - src/cli.ts โ
โ - src/commanderAdapter.ts โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๆง่กๅฑ โ
โ - src/execution.ts โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโผโโโโโโโโโโโโโ
โผ โผ โผ
โโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโ
โ YAML Pipeline โ โ TS Adapter โ โ External CLI โ
โ src/pipeline/* โ โ src/clis/**/*.tsโ โ src/external.tsโ
โโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโ
โ โ
โผ โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ่ฟ่กๆถ่ฟๆฅๅฑ โ
โ - Browser Bridge + daemon โ
โ - Electron CDP โ
โ - Node fetch / local process โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
ๅฏๅจๅ
ฅๅฃๅจ src/main.tsใ
OpenCLI ๅฏๅจๅไผ๏ผ
- ๅ็ฐๅ ็ฝฎ commands
- ๅ็ฐ็จๆท็ฎๅฝไธ็ commands
- ๅ็ฐ plugins
- ๅฐๅฎไปฌ็ปไธๆณจๅๅฐๅ จๅฑ registry
็ธๅ ณๆจกๅ๏ผ
src/discovery.tssrc/registry.tssrc/build-manifest.ts
็ไบง็ฏๅขไผๅ ่ตฐ manifest ๅฟซ่ทฏๅพ๏ผๅๅฐ่ฟ่กๆถ YAML ่งฃๆๅ TS ๆจกๅๅ ่ฝฝๅผ้๏ผTypeScript adapter ๆฏๆๆ้ๆๅ ่ฝฝใ
OpenCLI ๅจ src/registry.ts ไธญๅฎไน็ปไธๅฝไปคๆจกๅใๆ ่ฎบๅฝไปคๆฅ่ช๏ผ
- ๅ ็ฝฎ YAML adapter
- ๅ ็ฝฎ TypeScript adapter
- plugin
- ็จๆทๆฌๅฐ adapter
ๆ็ป้ฝไผๆถๆไธบๅไธ็ฑปๅฝไปคๅฏน่ฑก๏ผๅ ๅซ่ฟไบๆ ธๅฟๅญๆฎต๏ผ
sitenamedescriptionstrategybrowserargscolumnsfuncๆpipeline
่ฟ่ฎฉๅฝไปค่ฃ ้ ๅๆง่กๅฑๅฏไปฅๅฏนไธๅๆฅๆบไธ่งๅไปใ
้ๅ็ปๆ็จณๅฎใๅ่ฏปๅๅใๅฏๅฃฐๆๅผๆ่ฟฐ็ๅฝไปคใ
- ๅ
ฅๅฃ็ฎๅฝ๏ผ
src/clis/<site>/*.yaml - ๆง่กๅผๆ๏ผ
src/pipeline/ - ๅธธ่งๆญฅ้ชค๏ผ
fetchใmapใlimitใfilterใdownload
ไผๅฟๆฏ๏ผ
- ๅฃฐๆๅผ
- ๆ่ฏป
- ๆ็ๆ
- ๅพ้ๅ AI ๆข็ดขๅ่ชๅจๅๆ
้ๅๆดๅคๆ็ๆต่งๅจไบคไบใๅคๆญฅๆต็จใDOM ๆไฝใๅๆไฝๅๅคๆบ่ๅ้ป่พใ
- ๅ
ฅๅฃ็ฎๅฝ๏ผ
src/clis/<site>/*.ts - ้่ฟ
cli({...})็ดๆฅๆณจๅ
ไผๅฟๆฏ๏ผ
- ่กจ่พพ่ฝๅๆดๅผบ
- ๆด้ๅๅคๆๆงๅถๆตๅ้่ฏฏๅค็
- ๆด้ๅๆต่งๅจ่กไธบไธๆฐๆฎๅค็ๆททๅๅบๆฏ
ๅฎ้
ๆง่ก็ฑ src/execution.ts ่ด่ดฃ๏ผๆ ธๅฟๆต็จๅ
ๆฌ๏ผ
- ๅๆฐๆ ก้ชไธ็ฑปๅ่ฝฌๆข
- ๆง่กๅ hook
- ๅคๆญๆฏๅฆ้่ฆ browser session
- ๅฟ ่ฆๆถ้ขๅฏผ่ชๅฐ็ฎๆ ๅๅ
- ๆง่ก
funcๆpipeline - ๅค็่ถ ๆถใ๏ฟฝ๏ฟฝๅธธไธ้ๅบ็
- ๆง่กๅ hook
ๅฝไปค่ก่ฃ
้
ๅ็ฑ src/cli.ts ไธ src/commanderAdapter.ts ่ด่ดฃ๏ผๆ registry ไธญ็ๅฝไปคๆๅฐ Commander ๅญๅฝไปคๆ ไธใ
OpenCLI ไผๆ นๆฎๅฝไปค่ฝๅ้ๆฉไธๅๆง่กไป่ดจ๏ผ
public๏ผ็ดๆฅ HTTP ่ฏทๆฑcookie๏ผๅค็จๆต่งๅจ็ปๅฝๆheader๏ผไฝฟ็จ่ชๅฎไน่ฏทๆฑๅคดintercept๏ผไพ่ต่ฏทๆฑๆฆๆชๆ็ญพๅ็บฟ็ดขui๏ผ็ดๆฅๅบไบ้กต้ขไบคไบๆง่ก- Electron๏ผ้่ฟ CDP ่ฟๆฅๆก้ขๅบ็จ
Browser Bridge ่ฏฆ็ป่ฏดๆ่ง๏ผ
ๆดๅฎๆด็ๅผๅ่ ๆถๆ่ฏดๆ่ง๏ผ
AI ็ธๅ ณ่ฝๅๅด็ป adapter ่ฐ็ ใ็ญ็ฅๅคๆญไธๆต่งๅจๆไฝๅฑๅผ๏ผ
operate
โ
่ฏปๅ้กต้ข็ถๆใๆง่กไบคไบใๆฅ็็ฝ็ป่ฏทๆฑ
โ
cascade
โ
ๅคๆญๆๅ้็่ฎค่ฏ็ญ็ฅ
โ
opencli-creator skill
โ
็ผๅๅนถๆต่ฏ adapter
ๅฎๆด่ฏดๆ่ง๏ผ
ๅฆๆไฝ ๆณ็ปง็ปญๅขๅ OpenCLI ็่ฝๅ๏ผไผๅ ไปไธ้ขไบๆก่ทฏๅพ้้ๆ็ฎๅ็ไธๆกใ
้็จไบ๏ผ
- ๅ ฌๅผ API
- ็ปๆ็จณๅฎ็ๆฐๆฎๆๅ
- ็ฎๅ่ฏปๅๅๅฝไปค
ๆไปถไฝ็ฝฎ๏ผ
src/clis/<site>/<command>.yaml
ๆๅฐ็คบไพ๏ผ
site: mysite
name: hot
description: Hot items
domain: www.example.com
strategy: public
browser: false
args:
limit:
type: int
default: 10
pipeline:
- fetch:
url: https://api.example.com/hot
- map:
rank: ${{ index + 1 }}
title: ${{ item.title }}
url: ${{ item.url }}
- limit: ${{ args.limit }}
columns: [rank, title, url]่ฟไธๆญฅ่ฏดๆ่ง๏ผ
้็จไบ๏ผ
- ๅคๆญฅ้ชคๆต่งๅจไบคไบ
- DOM ๆไฝ
- ๅๆไฝ
- ๅคๆๆๅไธ่ๅ้ป่พ
ๆไปถไฝ็ฝฎ๏ผ
src/clis/<site>/<command>.ts
ๆๅฐ็คบไพ๏ผ
import { cli, Strategy } from '../../registry.js';
cli({
site: 'mysite',
name: 'search',
description: 'Search MySite',
domain: 'www.example.com',
strategy: Strategy.COOKIE,
args: [
{ name: 'query', positional: true, required: true, help: 'Search query' },
{ name: 'limit', type: 'int', default: 10, help: 'Max results' },
],
columns: ['title', 'url'],
func: async (page, kwargs) => {
const data = await page.evaluate(`...`);
return data;
},
});่ฟไธๆญฅ่ฏดๆ่ง๏ผ
่ฟๆฏๆฌไปๅบ้ขๅ AI Agent ็้้ ๅจๅผๅ่ทฏๅพใ
opencli operate open https://example.com
opencli operate state
opencli operate network
opencli cascade https://example.com/api/data้ๅ๏ผ
- ๆฐ็ซ็นๅฟซ้ๆขๆต
- ไธบ AI Agent ๆไพๅฏ้ช่ฏ็้กต้ขไธ็ฝ็ปไธไธๆ
- ้
ๅ
skills/opencli-creator/SKILL.mdไป้ถ็ผๅ adapter
่ฟไธๆญฅ่ฏดๆ่ง๏ผ
ๅฆๆไฝ ไธๆณ็ดๆฅๆนไธปไปๅบ๏ผๆจ่็จ plugin ๆฉๅฑใ
opencli plugin create my-plugin
opencli plugin install file:///path/to/my-plugin
opencli plugin listplugin ๅๆ ทๆฏๆ YAML ๅ TypeScript๏ผไธค่ ้ฝ่ฝ่ขซๅฏๅจๆถ่ชๅจๅ็ฐใ
่ฟไธๆญฅ่ฏดๆ่ง๏ผ
ๅฆๆ่ฝๅๅทฒ็ป็ฑๆ็ๅฝไปค่กๅทฅๅ ทๆไพ๏ผๅฐฑไธไธๅฎ้่ฆ้ๆฐๅฎ็ฐ adapter๏ผๅฏไปฅๅจๆฌๆบๅ ๅฎ่ฃ ่ฏฅๅทฅๅ ท๏ผๅๆณจๅๅฐ OpenCLIใ
brew install gh
opencli register mycli
opencli unregister mycli
opencli gh pr list --limit 5
opencli docker ps่ฏดๆ๏ผ
- ๅค้จ CLI ็ๅฎ่ฃ
็ฑ
npmใbrew็ญๅ ็ฎก็ๅจ่ด่ดฃ - OpenCLI ๅช่ด่ดฃๆณจๅใๅ็ฐๅ้ไผ ๆง่ก
้ๅ๏ผ
- ๅทฒๆ CLI ็่ฝๅ่ๅ
- ๅข้ๅ ้จๅทฅๅ ท็ปไธๅ ฅๅฃ
- AI Agent ็ปไธๅ็ฐไธ่ฐ็จ
ๅธธ็จๅผๅๅฝไปค๏ผ
npm run dev
npm run build
npm run typecheck
npm test
npm run test:adapter
npm run test:e2eๆฐๅขๆไฟฎๆน adapter ๅ๏ผ้ๅธธ่ณๅฐๆง่ก๏ผ
opencli validate
npm run typecheck