Skip to content

lyhue1991/opencli

 
 

Repository files navigation

OpenCLI

ๆŠŠ็ฝ‘็ซ™ใ€Electron ๅบ”็”จใ€ๆœฌๅœฐๅ‘ฝไปค่กŒๅทฅๅ…ท็ปŸไธ€ๅฐ่ฃ…ๆˆๅฏ่ฐƒ็”จ็š„ CLI ๆŽฅๅฃใ€‚

npm Node.js Version License

OpenCLI ๆ˜ฏไธ€ไธช TypeScript CLI ๆก†ๆžถ๏ผŒ็”จๆฅๆŠŠๅทฒๆœ‰่ƒฝๅŠ›ๆ•ด็†ๆˆ็จณๅฎšใ€ๅฏ็ป„ๅˆใ€ๅฏ่„šๆœฌๅŒ–็š„ๅ‘ฝไปค่กŒๆŽฅๅฃใ€‚ๅฎƒๆ—ขๅฏไปฅ็›ดๆŽฅๅฐ่ฃ…็ฝ‘็ซ™ๅ’Œ Electron ๅบ”็”จ๏ผŒไนŸๅฏไปฅๆŠŠ็Žฐๆœ‰ๆœฌๅœฐ CLI ็บณๅ…ฅ็ปŸไธ€ๅ…ฅๅฃ๏ผŒๅนถไธบ AI Agent ๆไพ›ๆต่งˆๅ™จๆ“ไฝœใ€ๆŽฅๅฃๆŽข็ดขๅ’Œ้€‚้…ๅ™จ็”Ÿๆˆ่ƒฝๅŠ›ใ€‚

ๅฆ‚ๆžœไฝ ็ฌฌไธ€ๆฌกๆŽฅ่งฆ่ฟ™ไธช้กน็›ฎ๏ผŒๅ…ˆ็œ‹่ฟ™ไธ‰ไธช้—ฎ้ข˜๏ผš

ๅฟซ้€Ÿๅผ€ๅง‹

ๅฎ‰่ฃ…

npm install -g @lyhue1991/opencli

ๅธธ็”จๅ‘ฝไปค

opencli 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 ๆ‰ฉๅฑ•

่ฏฆ็ป†ๅฎ‰่ฃ…ไธŽ่ฏŠๆ–ญ่ง๏ผš

ๅŠŸ่ƒฝๆฆ‚่ฟฐ

OpenCLI ่งฃๅ†ณ็š„ๆ˜ฏโ€œๆŠŠๅทฒๆœ‰่ƒฝๅŠ›ๅ˜ๆˆ็จณๅฎš CLI ๆŽฅๅฃโ€็š„้—ฎ้ข˜๏ผŒๆ ธๅฟƒ่ƒฝๅŠ›ๅŒ…ๆ‹ฌ๏ผš

1. ็ฝ‘็ซ™ CLI ๅŒ–

ๅฐ†็ฝ‘้กตๆˆ–็ซ™็‚น่ƒฝๅŠ›ๅฐ่ฃ…ไธบ opencli <site> <command>๏ผŒ้€‚ๅˆ็ƒญๆฆœใ€๏ฟฝ๏ฟฝ็ดขใ€่ฏฆๆƒ…่ฏปๅ–ใ€ไธ‹่ฝฝใ€่ดฆๅทไฟกๆฏ่Žทๅ–็ญ‰ๅœบๆ™ฏใ€‚

  • ๆ”ฏๆŒๅ…ฌๅผ€ๆŽฅๅฃ่ฎฟ้—ฎ
  • ๆ”ฏๆŒๅค็”จๆต่งˆๅ™จ Cookie ็™ปๅฝ•ๆ€
  • ๆ”ฏๆŒๅŸบไบŽ่ฏทๆฑ‚ๅคดใ€ๆ‹ฆๆˆชๆˆ– UI ็š„ๆ›ดๅคๆ‚่ฎฟ้—ฎๆ–นๅผ

2. Electron ๅบ”็”จ CLI ๅŒ–

้€š่ฟ‡ Chrome DevTools Protocol ่ฟžๆŽฅ Electron ๅบ”็”จ๏ผŒๆŠŠๆกŒ้ข็ซฏ่ƒฝๅŠ›็บณๅ…ฅๅ‘ฝไปค่กŒ่ฐƒ็”จ้“พ่ทฏใ€‚

  • ้€‚ๅˆๆกŒ้ข็ซฏ่‡ชๅŠจๅŒ–
  • ้€‚ๅˆๆ•ฐๆฎๆๅ–ไธŽๆ“ไฝœ็ผ–ๆŽ’
  • ้€‚ๅˆ่ฎฉ AI Agent ๆ“ไฝœๅทฒๆœ‰ Electron ๅทฅๅ…ท

3. ๅค–้ƒจ CLI ่šๅˆ

OpenCLI ๅฏไปฅไฝœไธบๆœฌๅœฐ CLI ็š„็ปŸไธ€ๅ…ฅๅฃ๏ผŒๆŠŠ ghใ€dockerใ€vercel ็ญ‰ๅทฅๅ…ท็บณๅ…ฅๅŒไธ€ๅ‘ฝไปค็ฉบ้—ดใ€‚

  • ๆ”ฏๆŒๅ†…็ฝฎๅค–้ƒจ CLI ๆณจๅ†Œ่กจ
  • ๆ”ฏๆŒๆณจๅ†Œๅทฒๅฎ‰่ฃ…็š„ๆœฌๅœฐๅ‘ฝไปค
  • ๆ”ฏๆŒ็งป้™ค็”จๆˆท่‡ชๅฎšไน‰ๆณจๅ†Œ

4. AI ่พ…ๅŠฉ้€‚้…ๅ™จๅผ€ๅ‘

ไป“ๅบ“ๅ†…็ฝฎไบ†้ขๅ‘ AI Agent ็š„ๆต่งˆๅ™จๆ“ไฝœไธŽ็ญ–็•ฅๆŽขๆต‹่ƒฝๅŠ›๏ผš

  • opencli operate๏ผšๆ‰“ๅผ€้กต้ขใ€่ฏปๅ–็Šถๆ€ใ€็‚นๅ‡ปใ€ๆ‰ง่กŒ่„šๆœฌใ€ๆŸฅ็œ‹็ฝ‘็ปœ่ฏทๆฑ‚
  • opencli cascade๏ผšๆŽขๆต‹ๆ›ด้€‚ๅˆ็š„่ฎค่ฏ็ญ–็•ฅ
  • skills/opencli-creator/SKILL.md๏ผšๆŒ‡ๅฏผ AI Agent ๅฎŒๆˆๆ–ฐ adapter ็š„ๅ‘็Žฐใ€็ผ–ๅ†™ไธŽๆต‹่ฏ•ๆต็จ‹

5. ๆต่งˆๅ™จๆ“ไฝœ่ƒฝๅŠ›

opencli operate ๆไพ›ไธ€็ป„้ขๅ‘ AI Agent ็š„ๆต่งˆๅ™จๆŽงๅˆถๅ‘ฝไปค๏ผŒๅฏ็”จไบŽ๏ผš

  • ๆ‰“ๅผ€้กต้ขใ€่ฏปๅ–็Šถๆ€ใ€็‚นๅ‡ปใ€่พ“ๅ…ฅใ€็ญ‰ๅพ…
  • ๆ‰ง่กŒ้กต้ข่„šๆœฌใ€ๆๅ– HTML / ๆ–‡ๆœฌ / ๅฑžๆ€ง
  • ๆŸฅ็œ‹่‡ชๅŠจ้‡‡้›†ๅˆฐ็š„็ฝ‘็ปœ่ฏทๆฑ‚

6. ๅฏๆ‰ฉๅฑ•็”Ÿๆ€

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                          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

1. ๅ‘ฝไปคๅ‘็ŽฐไธŽๆณจๅ†Œ

ๅฏๅŠจๅ…ฅๅฃๅœจ src/main.tsใ€‚

OpenCLI ๅฏๅŠจๅŽไผš๏ผš

  • ๅ‘็Žฐๅ†…็ฝฎ commands
  • ๅ‘็Žฐ็”จๆˆท็›ฎๅฝ•ไธ‹็š„ commands
  • ๅ‘็Žฐ plugins
  • ๅฐ†ๅฎƒไปฌ็ปŸไธ€ๆณจๅ†Œๅˆฐๅ…จๅฑ€ registry

็›ธๅ…ณๆจกๅ—๏ผš

  • src/discovery.ts
  • src/registry.ts
  • src/build-manifest.ts

็”Ÿไบง็Žฏๅขƒไผ˜ๅ…ˆ่ตฐ manifest ๅฟซ่ทฏๅพ„๏ผŒๅ‡ๅฐ‘่ฟ่กŒๆ—ถ YAML ่งฃๆžๅ’Œ TS ๆจกๅ—ๅŠ ่ฝฝๅผ€้”€๏ผ›TypeScript adapter ๆ”ฏๆŒๆŒ‰้œ€ๆ‡’ๅŠ ่ฝฝใ€‚

2. ็ปŸไธ€ๅ‘ฝไปคๆจกๅž‹

OpenCLI ๅœจ src/registry.ts ไธญๅฎšไน‰็ปŸไธ€ๅ‘ฝไปคๆจกๅž‹ใ€‚ๆ— ่ฎบๅ‘ฝไปคๆฅ่‡ช๏ผš

  • ๅ†…็ฝฎ YAML adapter
  • ๅ†…็ฝฎ TypeScript adapter
  • plugin
  • ็”จๆˆทๆœฌๅœฐ adapter

ๆœ€็ปˆ้ƒฝไผšๆ”ถๆ•›ไธบๅŒไธ€็ฑปๅ‘ฝไปคๅฏน่ฑก๏ผŒๅŒ…ๅซ่ฟ™ไบ›ๆ ธๅฟƒๅญ—ๆฎต๏ผš

  • site
  • name
  • description
  • strategy
  • browser
  • args
  • columns
  • func ๆˆ– pipeline

่ฟ™่ฎฉๅ‘ฝไปค่ฃ…้…ๅ’Œๆ‰ง่กŒๅฑ‚ๅฏไปฅๅฏนไธๅŒๆฅๆบไธ€่ง†ๅŒไปใ€‚

3. ๅŒๅผ•ๆ“Ž adapter ๆจกๅž‹

YAML adapter

้€‚ๅˆ็ป“ๆž„็จณๅฎšใ€ๅ่ฏปๅ–ๅž‹ใ€ๅฏๅฃฐๆ˜Žๅผๆ่ฟฐ็š„ๅ‘ฝไปคใ€‚

  • ๅ…ฅๅฃ็›ฎๅฝ•๏ผšsrc/clis/<site>/*.yaml
  • ๆ‰ง่กŒๅผ•ๆ“Ž๏ผšsrc/pipeline/
  • ๅธธ่งๆญฅ้ชค๏ผšfetchใ€mapใ€limitใ€filterใ€download

ไผ˜ๅŠฟๆ˜ฏ๏ผš

  • ๅฃฐๆ˜Žๅผ
  • ๆ˜“่ฏป
  • ๆ˜“็”Ÿๆˆ
  • ๅพˆ้€‚ๅˆ AI ๆŽข็ดขๅŽ่‡ชๅŠจๅˆๆˆ

TypeScript adapter

้€‚ๅˆๆ›ดๅคๆ‚็š„ๆต่งˆๅ™จไบคไบ’ใ€ๅคšๆญฅๆต็จ‹ใ€DOM ๆ“ไฝœใ€ๅ†™ๆ“ไฝœๅ’Œๅคšๆบ่šๅˆ้€ป่พ‘ใ€‚

  • ๅ…ฅๅฃ็›ฎๅฝ•๏ผšsrc/clis/<site>/*.ts
  • ้€š่ฟ‡ cli({...}) ็›ดๆŽฅๆณจๅ†Œ

ไผ˜ๅŠฟๆ˜ฏ๏ผš

  • ่กจ่พพ่ƒฝๅŠ›ๆ›ดๅผบ
  • ๆ›ด้€‚ๅˆๅคๆ‚ๆŽงๅˆถๆตๅ’Œ้”™่ฏฏๅค„็†
  • ๆ›ด้€‚ๅˆๆต่งˆๅ™จ่กŒไธบไธŽๆ•ฐๆฎๅค„็†ๆททๅˆๅœบๆ™ฏ

4. ๆ‰ง่กŒ้“พ่ทฏ

ๅฎž้™…ๆ‰ง่กŒ็”ฑ src/execution.ts ่ดŸ่ดฃ๏ผŒๆ ธๅฟƒๆต็จ‹ๅŒ…ๆ‹ฌ๏ผš

  1. ๅ‚ๆ•ฐๆ ก้ชŒไธŽ็ฑปๅž‹่ฝฌๆข
  2. ๆ‰ง่กŒๅ‰ hook
  3. ๅˆคๆ–ญๆ˜ฏๅฆ้œ€่ฆ browser session
  4. ๅฟ…่ฆๆ—ถ้ข„ๅฏผ่ˆชๅˆฐ็›ฎๆ ‡ๅŸŸๅ
  5. ๆ‰ง่กŒ func ๆˆ– pipeline
  6. ๅค„็†่ถ…ๆ—ถใ€๏ฟฝ๏ฟฝๅธธไธŽ้€€ๅ‡บ็ 
  7. ๆ‰ง่กŒๅŽ hook

ๅ‘ฝไปค่กŒ่ฃ…้…ๅˆ™็”ฑ src/cli.ts ไธŽ src/commanderAdapter.ts ่ดŸ่ดฃ๏ผŒๆŠŠ registry ไธญ็š„ๅ‘ฝไปคๆŒ‚ๅˆฐ Commander ๅญๅ‘ฝไปคๆ ‘ไธŠใ€‚

5. ่ฟ่กŒๆ—ถ่ฟžๆŽฅๆ–นๅผ

OpenCLI ไผšๆ นๆฎๅ‘ฝไปค่ƒฝๅŠ›้€‰ๆ‹ฉไธๅŒๆ‰ง่กŒไป‹่ดจ๏ผš

  • public๏ผš็›ดๆŽฅ HTTP ่ฏทๆฑ‚
  • cookie๏ผšๅค็”จๆต่งˆๅ™จ็™ปๅฝ•ๆ€
  • header๏ผšไฝฟ็”จ่‡ชๅฎšไน‰่ฏทๆฑ‚ๅคด
  • intercept๏ผšไพ่ต–่ฏทๆฑ‚ๆ‹ฆๆˆชๆˆ–็ญพๅ็บฟ็ดข
  • ui๏ผš็›ดๆŽฅๅŸบไบŽ้กต้ขไบคไบ’ๆ‰ง่กŒ
  • Electron๏ผš้€š่ฟ‡ CDP ่ฟžๆŽฅๆกŒ้ขๅบ”็”จ

Browser Bridge ่ฏฆ็ป†่ฏดๆ˜Ž่ง๏ผš

ๆ›ดๅฎŒๆ•ด็š„ๅผ€ๅ‘่€…ๆžถๆž„่ฏดๆ˜Ž่ง๏ผš

6. AI ๅทฅไฝœๆต

AI ็›ธๅ…ณ่ƒฝๅŠ›ๅ›ด็ป• adapter ่ฐƒ็ ”ใ€็ญ–็•ฅๅˆคๆ–ญไธŽๆต่งˆๅ™จๆ“ไฝœๅฑ•ๅผ€๏ผš

operate
  โ†“
่ฏปๅ–้กต้ข็Šถๆ€ใ€ๆ‰ง่กŒไบคไบ’ใ€ๆŸฅ็œ‹็ฝ‘็ปœ่ฏทๆฑ‚
  โ†“
cascade
  โ†“
ๅˆคๆ–ญๆœ€ๅˆ้€‚็š„่ฎค่ฏ็ญ–็•ฅ
  โ†“
opencli-creator skill
  โ†“
็ผ–ๅ†™ๅนถๆต‹่ฏ• adapter

ๅฎŒๆ•ด่ฏดๆ˜Ž่ง๏ผš

ๅผ€ๅ‘ๆŒ‡ๅ—

ๅฆ‚ๆžœไฝ ๆƒณ็ปง็ปญๅขžๅŠ  OpenCLI ็š„่ƒฝๅŠ›๏ผŒไผ˜ๅ…ˆไปŽไธ‹้ขไบ”ๆก่ทฏๅพ„้‡Œ้€‰ๆœ€็ฎ€ๅ•็š„ไธ€ๆกใ€‚

่ทฏๅพ„ไธ€๏ผšๅขžๅŠ ๅ†…็ฝฎ YAML adapter

้€‚็”จไบŽ๏ผš

  • ๅ…ฌๅผ€ 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]

่ฟ›ไธ€ๆญฅ่ฏดๆ˜Ž่ง๏ผš

่ทฏๅพ„ไบŒ๏ผšๅขžๅŠ ๅ†…็ฝฎ TypeScript adapter

้€‚็”จไบŽ๏ผš

  • ๅคšๆญฅ้ชคๆต่งˆๅ™จไบคไบ’
  • 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 ๅทฅไฝœๆต่พ…ๅŠฉๅผ€ๅ‘ adapter

่ฟ™ๆ˜ฏๆœฌไป“ๅบ“้ขๅ‘ 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

ๅฆ‚ๆžœไฝ ไธๆƒณ็›ดๆŽฅๆ”นไธปไป“ๅบ“๏ผŒๆŽจ่็”จ plugin ๆ‰ฉๅฑ•ใ€‚

opencli plugin create my-plugin
opencli plugin install file:///path/to/my-plugin
opencli plugin list

plugin ๅŒๆ ทๆ”ฏๆŒ YAML ๅ’Œ TypeScript๏ผŒไธค่€…้ƒฝ่ƒฝ่ขซๅฏๅŠจๆ—ถ่‡ชๅŠจๅ‘็Žฐใ€‚

่ฟ›ไธ€ๆญฅ่ฏดๆ˜Ž่ง๏ผš

่ทฏๅพ„ไบ”๏ผšๆณจๅ†Œๅค–้ƒจ CLI

ๅฆ‚ๆžœ่ƒฝๅŠ›ๅทฒ็ป็”ฑๆˆ็†Ÿๅ‘ฝไปค่กŒๅทฅๅ…ทๆไพ›๏ผŒๅฐฑไธไธ€ๅฎš้œ€่ฆ้‡ๆ–ฐๅฎž็Žฐ 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

็›ธๅ…ณๆ–‡ๆกฃ

License

Apache-2.0

About

turn any website to cli ๐Ÿ˜‹๐Ÿ˜‹

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • TypeScript 96.7%
  • JavaScript 2.9%
  • Other 0.4%