@jackwener/opencli 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/README.md +9 -2
  2. package/README.zh-CN.md +9 -1
  3. package/SKILL.md +24 -0
  4. package/dist/bilibili.d.ts +6 -5
  5. package/dist/browser.d.ts +2 -1
  6. package/dist/browser.js +9 -1
  7. package/dist/cascade.d.ts +3 -2
  8. package/dist/clis/bbc/news.js +42 -0
  9. package/dist/clis/boss/search.d.ts +1 -0
  10. package/dist/clis/boss/search.js +47 -0
  11. package/dist/clis/ctrip/search.d.ts +1 -0
  12. package/dist/clis/ctrip/search.js +62 -0
  13. package/dist/clis/index.d.ts +8 -0
  14. package/dist/clis/index.js +16 -0
  15. package/dist/clis/reuters/search.d.ts +1 -0
  16. package/dist/clis/reuters/search.js +52 -0
  17. package/dist/clis/smzdm/search.d.ts +1 -0
  18. package/dist/clis/smzdm/search.js +66 -0
  19. package/dist/clis/weibo/hot.d.ts +1 -0
  20. package/dist/clis/weibo/hot.js +41 -0
  21. package/dist/clis/yahoo-finance/quote.d.ts +1 -0
  22. package/dist/clis/yahoo-finance/quote.js +74 -0
  23. package/dist/clis/youtube/search.d.ts +1 -0
  24. package/dist/clis/youtube/search.js +60 -0
  25. package/dist/engine.d.ts +2 -1
  26. package/dist/explore.js +1 -1
  27. package/dist/generate.js +2 -1
  28. package/dist/main.js +6 -4
  29. package/dist/pipeline/executor.d.ts +9 -0
  30. package/dist/pipeline/executor.js +88 -0
  31. package/dist/pipeline/index.d.ts +5 -0
  32. package/dist/pipeline/index.js +5 -0
  33. package/dist/pipeline/steps/browser.d.ts +12 -0
  34. package/dist/pipeline/steps/browser.js +68 -0
  35. package/dist/pipeline/steps/fetch.d.ts +5 -0
  36. package/dist/pipeline/steps/fetch.js +50 -0
  37. package/dist/pipeline/steps/intercept.d.ts +5 -0
  38. package/dist/pipeline/steps/intercept.js +75 -0
  39. package/dist/pipeline/steps/tap.d.ts +12 -0
  40. package/dist/pipeline/steps/tap.js +130 -0
  41. package/dist/pipeline/steps/transform.d.ts +8 -0
  42. package/dist/pipeline/steps/transform.js +53 -0
  43. package/dist/pipeline/template.d.ts +16 -0
  44. package/dist/pipeline/template.js +115 -0
  45. package/dist/pipeline/template.test.d.ts +4 -0
  46. package/dist/pipeline/template.test.js +102 -0
  47. package/dist/pipeline/transform.test.d.ts +4 -0
  48. package/dist/pipeline/transform.test.js +90 -0
  49. package/dist/pipeline.d.ts +5 -7
  50. package/dist/pipeline.js +5 -549
  51. package/dist/registry.d.ts +3 -2
  52. package/dist/runtime.d.ts +2 -1
  53. package/dist/types.d.ts +27 -0
  54. package/dist/types.js +7 -0
  55. package/package.json +6 -3
  56. package/src/bilibili.ts +9 -7
  57. package/src/browser.ts +8 -2
  58. package/src/cascade.ts +3 -2
  59. package/src/clis/bbc/news.ts +42 -0
  60. package/src/clis/boss/search.ts +47 -0
  61. package/src/clis/ctrip/search.ts +62 -0
  62. package/src/clis/index.ts +24 -0
  63. package/src/clis/reuters/search.ts +52 -0
  64. package/src/clis/smzdm/search.ts +66 -0
  65. package/src/clis/weibo/hot.ts +41 -0
  66. package/src/clis/yahoo-finance/quote.ts +74 -0
  67. package/src/clis/youtube/search.ts +60 -0
  68. package/src/engine.ts +2 -1
  69. package/src/explore.ts +1 -1
  70. package/src/generate.ts +3 -1
  71. package/src/main.ts +7 -5
  72. package/src/pipeline/executor.ts +98 -0
  73. package/src/pipeline/index.ts +6 -0
  74. package/src/pipeline/steps/browser.ts +67 -0
  75. package/src/pipeline/steps/fetch.ts +60 -0
  76. package/src/pipeline/steps/intercept.ts +78 -0
  77. package/src/pipeline/steps/tap.ts +137 -0
  78. package/src/pipeline/steps/transform.ts +50 -0
  79. package/src/pipeline/template.test.ts +107 -0
  80. package/src/pipeline/template.ts +101 -0
  81. package/src/pipeline/transform.test.ts +107 -0
  82. package/src/pipeline.ts +5 -529
  83. package/src/registry.ts +4 -2
  84. package/src/runtime.ts +3 -1
  85. package/src/types.ts +23 -0
  86. package/vitest.config.ts +7 -0
  87. package/dist/clis/github/search.js +0 -20
  88. package/dist/clis/github/trending.yaml +0 -58
  89. package/dist/promote.d.ts +0 -1
  90. package/dist/promote.js +0 -3
  91. package/dist/register.d.ts +0 -2
  92. package/dist/register.js +0 -2
  93. package/dist/scaffold.d.ts +0 -2
  94. package/dist/scaffold.js +0 -2
  95. package/dist/smoke.d.ts +0 -2
  96. package/dist/smoke.js +0 -2
  97. package/src/clis/github/search.ts +0 -21
  98. package/src/clis/github/trending.yaml +0 -58
  99. package/src/promote.ts +0 -3
  100. package/src/register.ts +0 -2
  101. package/src/scaffold.ts +0 -2
  102. package/src/smoke.ts +0 -2
  103. /package/dist/clis/{github/search.d.ts → bbc/news.d.ts} +0 -0
@@ -1,58 +0,0 @@
1
- site: github
2
- name: trending
3
- description: GitHub trending repositories
4
- domain: github.com
5
-
6
- args:
7
- language:
8
- type: str
9
- default: ""
10
- description: "Programming language filter (e.g. python, rust)"
11
- since:
12
- type: str
13
- default: daily
14
- description: "Time range: daily, weekly, monthly"
15
- limit:
16
- type: int
17
- default: 20
18
- description: Number of repos
19
-
20
- pipeline:
21
- - evaluate: |
22
- (async () => {
23
- const lang = '${{ args.language }}' ? '/${{ args.language }}' : '';
24
- const res = await fetch(`https://github.com/trending${lang}?since=${{ args.since }}`, {
25
- headers: { 'Accept': 'text/html' }
26
- });
27
- const html = await res.text();
28
- const parser = new DOMParser();
29
- const doc = parser.parseFromString(html, 'text/html');
30
- const rows = doc.querySelectorAll('article.Box-row');
31
- return Array.from(rows).map(row => {
32
- const nameEl = row.querySelector('h2 a');
33
- const descEl = row.querySelector('p');
34
- const langEl = row.querySelector('[itemprop="programmingLanguage"]');
35
- const starsEl = row.querySelectorAll('a.Link--muted');
36
- const todayEl = row.querySelector('span.d-inline-block.float-sm-right');
37
- return {
38
- repo: nameEl?.textContent?.trim()?.replace(/\s+/g, '') || '',
39
- description: descEl?.textContent?.trim() || '',
40
- language: langEl?.textContent?.trim() || '',
41
- stars: starsEl[0]?.textContent?.trim() || '',
42
- forks: starsEl[1]?.textContent?.trim() || '',
43
- today: todayEl?.textContent?.trim() || ''
44
- };
45
- });
46
- })()
47
-
48
- - map:
49
- rank: ${{ index + 1 }}
50
- repo: ${{ item.repo }}
51
- description: ${{ item.description }}
52
- language: ${{ item.language }}
53
- stars: ${{ item.stars }}
54
- today: ${{ item.today }}
55
-
56
- - limit: ${{ args.limit }}
57
-
58
- columns: [rank, repo, language, stars, today]
package/dist/promote.d.ts DELETED
@@ -1 +0,0 @@
1
- export declare function promoteCandidate(opts: any): any;
package/dist/promote.js DELETED
@@ -1,3 +0,0 @@
1
- /** Promote verified drafts. */
2
- import { registerCandidates } from './register.js';
3
- export function promoteCandidate(opts) { return registerCandidates(opts); }
@@ -1,2 +0,0 @@
1
- /** Register candidates, promote, scaffold, generate — stubs with exports. */
2
- export declare function registerCandidates(opts: any): any;
package/dist/register.js DELETED
@@ -1,2 +0,0 @@
1
- /** Register candidates, promote, scaffold, generate — stubs with exports. */
2
- export function registerCandidates(opts) { return { ok: true, count: 0 }; }
@@ -1,2 +0,0 @@
1
- /** Scaffold a draft CLI from endpoint evidence. */
2
- export declare function scaffoldCli(opts: any): any;
package/dist/scaffold.js DELETED
@@ -1,2 +0,0 @@
1
- /** Scaffold a draft CLI from endpoint evidence. */
2
- export function scaffoldCli(opts) { return { ok: true }; }
package/dist/smoke.d.ts DELETED
@@ -1,2 +0,0 @@
1
- /** Smoke testing, verification, register, promote, explore, synthesize, scaffold, generate — stubs. */
2
- export declare function runSmoke(cmd: any, page: any, args?: any): Promise<any>;
package/dist/smoke.js DELETED
@@ -1,2 +0,0 @@
1
- /** Smoke testing, verification, register, promote, explore, synthesize, scaffold, generate — stubs. */
2
- export async function runSmoke(cmd, page, args) { return { ok: true, result: null }; }
@@ -1,21 +0,0 @@
1
- import { cli, Strategy } from '../../registry.js';
2
-
3
- cli({
4
- site: 'github', name: 'search', description: 'Search GitHub repositories', domain: 'github.com', strategy: Strategy.PUBLIC, browser: false,
5
- args: [
6
- { name: 'keyword', required: true, help: 'Search keyword' },
7
- { name: 'sort', default: 'stars', help: 'Sort by: stars, forks, updated' },
8
- { name: 'limit', type: 'int', default: 20, help: 'Number of results' },
9
- ],
10
- columns: ['rank', 'name', 'stars', 'language', 'description'],
11
- func: async (_page, kwargs) => {
12
- const { keyword, sort = 'stars', limit = 20 } = kwargs;
13
- const resp = await fetch(`https://api.github.com/search/repositories?${new URLSearchParams({ q: keyword, sort, order: 'desc', per_page: String(Math.min(Number(limit), 100)) })}`, {
14
- headers: { Accept: 'application/vnd.github.v3+json', 'User-Agent': 'opencli/0.1' },
15
- });
16
- const data = await resp.json() as any;
17
- return (data.items ?? []).slice(0, Number(limit)).map((item: any, i: number) => ({
18
- rank: i + 1, name: item.full_name, stars: item.stargazers_count, language: item.language ?? '', description: (item.description ?? '').slice(0, 80),
19
- }));
20
- },
21
- });
@@ -1,58 +0,0 @@
1
- site: github
2
- name: trending
3
- description: GitHub trending repositories
4
- domain: github.com
5
-
6
- args:
7
- language:
8
- type: str
9
- default: ""
10
- description: "Programming language filter (e.g. python, rust)"
11
- since:
12
- type: str
13
- default: daily
14
- description: "Time range: daily, weekly, monthly"
15
- limit:
16
- type: int
17
- default: 20
18
- description: Number of repos
19
-
20
- pipeline:
21
- - evaluate: |
22
- (async () => {
23
- const lang = '${{ args.language }}' ? '/${{ args.language }}' : '';
24
- const res = await fetch(`https://github.com/trending${lang}?since=${{ args.since }}`, {
25
- headers: { 'Accept': 'text/html' }
26
- });
27
- const html = await res.text();
28
- const parser = new DOMParser();
29
- const doc = parser.parseFromString(html, 'text/html');
30
- const rows = doc.querySelectorAll('article.Box-row');
31
- return Array.from(rows).map(row => {
32
- const nameEl = row.querySelector('h2 a');
33
- const descEl = row.querySelector('p');
34
- const langEl = row.querySelector('[itemprop="programmingLanguage"]');
35
- const starsEl = row.querySelectorAll('a.Link--muted');
36
- const todayEl = row.querySelector('span.d-inline-block.float-sm-right');
37
- return {
38
- repo: nameEl?.textContent?.trim()?.replace(/\s+/g, '') || '',
39
- description: descEl?.textContent?.trim() || '',
40
- language: langEl?.textContent?.trim() || '',
41
- stars: starsEl[0]?.textContent?.trim() || '',
42
- forks: starsEl[1]?.textContent?.trim() || '',
43
- today: todayEl?.textContent?.trim() || ''
44
- };
45
- });
46
- })()
47
-
48
- - map:
49
- rank: ${{ index + 1 }}
50
- repo: ${{ item.repo }}
51
- description: ${{ item.description }}
52
- language: ${{ item.language }}
53
- stars: ${{ item.stars }}
54
- today: ${{ item.today }}
55
-
56
- - limit: ${{ args.limit }}
57
-
58
- columns: [rank, repo, language, stars, today]
package/src/promote.ts DELETED
@@ -1,3 +0,0 @@
1
- /** Promote verified drafts. */
2
- import { registerCandidates } from './register.js';
3
- export function promoteCandidate(opts: any): any { return registerCandidates(opts); }
package/src/register.ts DELETED
@@ -1,2 +0,0 @@
1
- /** Register candidates, promote, scaffold, generate — stubs with exports. */
2
- export function registerCandidates(opts: any): any { return { ok: true, count: 0 }; }
package/src/scaffold.ts DELETED
@@ -1,2 +0,0 @@
1
- /** Scaffold a draft CLI from endpoint evidence. */
2
- export function scaffoldCli(opts: any): any { return { ok: true }; }
package/src/smoke.ts DELETED
@@ -1,2 +0,0 @@
1
- /** Smoke testing, verification, register, promote, explore, synthesize, scaffold, generate — stubs. */
2
- export async function runSmoke(cmd: any, page: any, args?: any): Promise<any> { return { ok: true, result: null }; }
File without changes