@zenalexa/unicli 0.220.0 → 0.220.1

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 (182) hide show
  1. package/AGENTS.md +10 -19
  2. package/README.md +17 -11
  3. package/README.zh-CN.md +17 -11
  4. package/dist/adapters/anilist/web.d.ts +11 -0
  5. package/dist/adapters/anilist/web.d.ts.map +1 -0
  6. package/dist/adapters/anilist/web.js +284 -0
  7. package/dist/adapters/anilist/web.js.map +1 -0
  8. package/dist/adapters/bangumi/web.d.ts +14 -0
  9. package/dist/adapters/bangumi/web.d.ts.map +1 -0
  10. package/dist/adapters/bangumi/web.js +257 -0
  11. package/dist/adapters/bangumi/web.js.map +1 -0
  12. package/dist/adapters/dlsite/web.d.ts +31 -0
  13. package/dist/adapters/dlsite/web.d.ts.map +1 -0
  14. package/dist/adapters/dlsite/web.js +455 -0
  15. package/dist/adapters/dlsite/web.js.map +1 -0
  16. package/dist/adapters/ehentai/web.d.ts +66 -0
  17. package/dist/adapters/ehentai/web.d.ts.map +1 -0
  18. package/dist/adapters/ehentai/web.js +608 -0
  19. package/dist/adapters/ehentai/web.js.map +1 -0
  20. package/dist/adapters/jikan/web.d.ts +9 -0
  21. package/dist/adapters/jikan/web.d.ts.map +1 -0
  22. package/dist/adapters/jikan/web.js +154 -0
  23. package/dist/adapters/jikan/web.js.map +1 -0
  24. package/dist/adapters/kitsu/web.d.ts +9 -0
  25. package/dist/adapters/kitsu/web.d.ts.map +1 -0
  26. package/dist/adapters/kitsu/web.js +97 -0
  27. package/dist/adapters/kitsu/web.js.map +1 -0
  28. package/dist/adapters/mangadex/web.d.ts +10 -0
  29. package/dist/adapters/mangadex/web.d.ts.map +1 -0
  30. package/dist/adapters/mangadex/web.js +188 -0
  31. package/dist/adapters/mangadex/web.js.map +1 -0
  32. package/dist/adapters/moegirl/web.d.ts +23 -0
  33. package/dist/adapters/moegirl/web.d.ts.map +1 -0
  34. package/dist/adapters/moegirl/web.js +269 -0
  35. package/dist/adapters/moegirl/web.js.map +1 -0
  36. package/dist/adapters/safebooru/web.d.ts +10 -0
  37. package/dist/adapters/safebooru/web.d.ts.map +1 -0
  38. package/dist/adapters/safebooru/web.js +120 -0
  39. package/dist/adapters/safebooru/web.js.map +1 -0
  40. package/dist/adapters/vndb/web.d.ts +10 -0
  41. package/dist/adapters/vndb/web.d.ts.map +1 -0
  42. package/dist/adapters/vndb/web.js +321 -0
  43. package/dist/adapters/vndb/web.js.map +1 -0
  44. package/dist/agents/codex-pack.d.ts +62 -0
  45. package/dist/agents/codex-pack.d.ts.map +1 -0
  46. package/dist/agents/codex-pack.js +163 -0
  47. package/dist/agents/codex-pack.js.map +1 -0
  48. package/dist/commands/agents.d.ts.map +1 -1
  49. package/dist/commands/agents.js +6 -43
  50. package/dist/commands/agents.js.map +1 -1
  51. package/dist/commands/browser/adapter.d.ts.map +1 -1
  52. package/dist/commands/browser/adapter.js +17 -3
  53. package/dist/commands/browser/adapter.js.map +1 -1
  54. package/dist/commands/describe.d.ts.map +1 -1
  55. package/dist/commands/describe.js +6 -7
  56. package/dist/commands/describe.js.map +1 -1
  57. package/dist/commands/dispatch.d.ts +1 -1
  58. package/dist/commands/dispatch.d.ts.map +1 -1
  59. package/dist/commands/dispatch.js +4 -2
  60. package/dist/commands/dispatch.js.map +1 -1
  61. package/dist/commands/mcp.d.ts +1 -1
  62. package/dist/commands/mcp.d.ts.map +1 -1
  63. package/dist/commands/mcp.js +10 -5
  64. package/dist/commands/mcp.js.map +1 -1
  65. package/dist/core/command-contract-lint.d.ts +10 -0
  66. package/dist/core/command-contract-lint.d.ts.map +1 -0
  67. package/dist/core/command-contract-lint.js +41 -0
  68. package/dist/core/command-contract-lint.js.map +1 -0
  69. package/dist/core/command-contract.d.ts +100 -0
  70. package/dist/core/command-contract.d.ts.map +1 -0
  71. package/dist/core/command-contract.js +174 -0
  72. package/dist/core/command-contract.js.map +1 -0
  73. package/dist/core/index.d.ts +2 -0
  74. package/dist/core/index.d.ts.map +1 -1
  75. package/dist/core/index.js +2 -0
  76. package/dist/core/index.js.map +1 -1
  77. package/dist/discovery/aliases.d.ts +2 -2
  78. package/dist/discovery/aliases.d.ts.map +1 -1
  79. package/dist/discovery/aliases.js +464 -6
  80. package/dist/discovery/aliases.js.map +1 -1
  81. package/dist/discovery/search.d.ts.map +1 -1
  82. package/dist/discovery/search.js +147 -2
  83. package/dist/discovery/search.js.map +1 -1
  84. package/dist/engine/args.d.ts.map +1 -1
  85. package/dist/engine/args.js +18 -1
  86. package/dist/engine/args.js.map +1 -1
  87. package/dist/engine/artifact-validation.d.ts +29 -0
  88. package/dist/engine/artifact-validation.d.ts.map +1 -0
  89. package/dist/engine/artifact-validation.js +211 -0
  90. package/dist/engine/artifact-validation.js.map +1 -0
  91. package/dist/engine/browser/diagnostics.d.ts +38 -0
  92. package/dist/engine/browser/diagnostics.d.ts.map +1 -0
  93. package/dist/engine/browser/diagnostics.js +40 -0
  94. package/dist/engine/browser/diagnostics.js.map +1 -0
  95. package/dist/engine/invoke.d.ts +1 -0
  96. package/dist/engine/invoke.d.ts.map +1 -1
  97. package/dist/engine/invoke.js +1 -0
  98. package/dist/engine/invoke.js.map +1 -1
  99. package/dist/engine/kernel/errors.d.ts +11 -0
  100. package/dist/engine/kernel/errors.d.ts.map +1 -0
  101. package/dist/engine/kernel/errors.js +15 -0
  102. package/dist/engine/kernel/errors.js.map +1 -0
  103. package/dist/engine/kernel/execute.d.ts +7 -18
  104. package/dist/engine/kernel/execute.d.ts.map +1 -1
  105. package/dist/engine/kernel/execute.js +25 -410
  106. package/dist/engine/kernel/execute.js.map +1 -1
  107. package/dist/engine/kernel/stages.d.ts +44 -0
  108. package/dist/engine/kernel/stages.d.ts.map +1 -0
  109. package/dist/engine/kernel/stages.js +428 -0
  110. package/dist/engine/kernel/stages.js.map +1 -0
  111. package/dist/engine/kernel/types.d.ts +21 -1
  112. package/dist/engine/kernel/types.d.ts.map +1 -1
  113. package/dist/engine/steps/download.d.ts +1 -0
  114. package/dist/engine/steps/download.d.ts.map +1 -1
  115. package/dist/engine/steps/download.js +10 -6
  116. package/dist/engine/steps/download.js.map +1 -1
  117. package/dist/fast-path/render.js +1 -1
  118. package/dist/fast-path/render.js.map +1 -1
  119. package/dist/manifest-compact.txt +3 -3
  120. package/dist/manifest-search.json +1 -1
  121. package/dist/manifest.json +3074 -3
  122. package/dist/mcp/handler.d.ts.map +1 -1
  123. package/dist/mcp/handler.js +11 -1
  124. package/dist/mcp/handler.js.map +1 -1
  125. package/dist/mcp/server.d.ts +1 -1
  126. package/dist/mcp/server.js +1 -1
  127. package/dist/mcp/tools.d.ts.map +1 -1
  128. package/dist/mcp/tools.js +18 -10
  129. package/dist/mcp/tools.js.map +1 -1
  130. package/dist/output/error-map.d.ts.map +1 -1
  131. package/dist/output/error-map.js +1 -1
  132. package/dist/output/error-map.js.map +1 -1
  133. package/dist/registry.d.ts.map +1 -1
  134. package/dist/registry.js +2 -1
  135. package/dist/registry.js.map +1 -1
  136. package/package.json +2 -2
  137. package/server.json +3 -3
  138. package/skills/unicli/SKILL.md +1 -1
  139. package/skills/unicli-claude-code/SKILL.md +1 -1
  140. package/skills/unicli-hermes/SKILL.md +1 -1
  141. package/src/adapters/anilist/web.test.ts +93 -0
  142. package/src/adapters/anilist/web.ts +341 -0
  143. package/src/adapters/arxiv/download.yaml +53 -0
  144. package/src/adapters/bangumi/web.test.ts +109 -0
  145. package/src/adapters/bangumi/web.ts +295 -0
  146. package/src/adapters/danbooru/artists.yaml +44 -0
  147. package/src/adapters/danbooru/comments.yaml +45 -0
  148. package/src/adapters/danbooru/detail.yaml +78 -0
  149. package/src/adapters/danbooru/download.yaml +51 -0
  150. package/src/adapters/danbooru/pools.yaml +56 -0
  151. package/src/adapters/danbooru/search.yaml +69 -0
  152. package/src/adapters/danbooru/tags.yaml +42 -0
  153. package/src/adapters/danbooru/wiki.yaml +44 -0
  154. package/src/adapters/dlsite/web.test.ts +132 -0
  155. package/src/adapters/dlsite/web.ts +557 -0
  156. package/src/adapters/ehentai/web.test.ts +157 -0
  157. package/src/adapters/ehentai/web.ts +750 -0
  158. package/src/adapters/jikan/web.test.ts +50 -0
  159. package/src/adapters/jikan/web.ts +177 -0
  160. package/src/adapters/kitsu/web.test.ts +29 -0
  161. package/src/adapters/kitsu/web.ts +109 -0
  162. package/src/adapters/konachan/detail.yaml +62 -0
  163. package/src/adapters/konachan/download.yaml +55 -0
  164. package/src/adapters/konachan/search.yaml +65 -0
  165. package/src/adapters/konachan/tags.yaml +40 -0
  166. package/src/adapters/mangadex/web.test.ts +46 -0
  167. package/src/adapters/mangadex/web.ts +210 -0
  168. package/src/adapters/moegirl/web.test.ts +87 -0
  169. package/src/adapters/moegirl/web.ts +343 -0
  170. package/src/adapters/pdf/read.yaml +49 -0
  171. package/src/adapters/pixiv/download.yaml +15 -2
  172. package/src/adapters/safebooru/detail.yaml +63 -0
  173. package/src/adapters/safebooru/download.yaml +58 -0
  174. package/src/adapters/safebooru/search.yaml +69 -0
  175. package/src/adapters/safebooru/web.test.ts +60 -0
  176. package/src/adapters/safebooru/web.ts +130 -0
  177. package/src/adapters/vndb/web.test.ts +86 -0
  178. package/src/adapters/vndb/web.ts +393 -0
  179. package/src/adapters/yandere/detail.yaml +61 -0
  180. package/src/adapters/yandere/download.yaml +56 -0
  181. package/src/adapters/yandere/search.yaml +67 -0
  182. package/src/adapters/yandere/tags.yaml +41 -0
@@ -0,0 +1,44 @@
1
+ site: danbooru
2
+ name: wiki
3
+ description: Search Danbooru wiki pages
4
+ domain: danbooru.donmai.us
5
+ type: web-api
6
+ strategy: public
7
+
8
+ args:
9
+ query:
10
+ type: str
11
+ required: true
12
+ positional: true
13
+ description: Wiki page title
14
+ limit:
15
+ type: int
16
+ default: 20
17
+ description: Number of wiki pages to return
18
+
19
+ pipeline:
20
+ - fetch:
21
+ url: "https://danbooru.donmai.us/wiki_pages.json"
22
+ params:
23
+ "search[title]": "${{ args.query }}"
24
+ limit: "${{ args.limit }}"
25
+
26
+ - map:
27
+ rank: "${{ index + 1 }}"
28
+ id: "${{ item.id }}"
29
+ title: "${{ item.title }}"
30
+ body: "${{ String(item.body || '').replace(/\\s+/g, ' ').slice(0, 500) }}"
31
+ other_names: "${{ Array.isArray(item.other_names) ? item.other_names.join(', ') : '' }}"
32
+ is_locked: "${{ item.is_locked }}"
33
+ is_deleted: "${{ item.is_deleted }}"
34
+ url: "${{ 'https://danbooru.donmai.us/wiki_pages/' + item.id }}"
35
+
36
+ columns: [rank, id, title, body, other_names, is_locked, is_deleted, url]
37
+
38
+ # schema-v2 metadata — injected by `unicli migrate schema-v2`
39
+ capabilities: ["http.fetch"]
40
+ minimum_capability: http.fetch
41
+ trust: public
42
+ confidentiality: public
43
+ quarantine: false
44
+ schema_version: v2
@@ -0,0 +1,132 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { resolveCommand } from "../../registry.js";
3
+ import {
4
+ decodeDlsiteHtml,
5
+ dlsiteCreatorUrl,
6
+ dlsiteGenreUrl,
7
+ dlsiteMakerUrl,
8
+ dlsiteSearchUrl,
9
+ parseDlsiteDetailHtml,
10
+ parseDlsiteSearchHtml,
11
+ } from "./web.js";
12
+
13
+ describe("dlsite public commands", () => {
14
+ it("registers search, type shortcuts, and detail", () => {
15
+ expect(
16
+ Object.keys(resolveCommand("dlsite", "search")!.adapter.commands),
17
+ ).toEqual(
18
+ expect.arrayContaining([
19
+ "search",
20
+ "manga",
21
+ "cg",
22
+ "game",
23
+ "maker",
24
+ "creator",
25
+ "genre",
26
+ "work",
27
+ ]),
28
+ );
29
+ });
30
+
31
+ it("builds search URLs with sort and work type filters", () => {
32
+ const args = resolveCommand("dlsite", "search")!.command.adapterArgs;
33
+ expect(args).toEqual(
34
+ expect.arrayContaining([
35
+ expect.objectContaining({
36
+ name: "sort",
37
+ choices: ["release", "hot", "rating", "reviews", "price", "title"],
38
+ }),
39
+ expect.objectContaining({
40
+ name: "type",
41
+ choices: ["all", "manga", "cg", "game", "novel", "voice", "video"],
42
+ }),
43
+ ]),
44
+ );
45
+
46
+ expect(
47
+ dlsiteSearchUrl({
48
+ query: "花火",
49
+ sort: "hot",
50
+ type: "cg",
51
+ page: 2,
52
+ }),
53
+ ).toBe(
54
+ "https://www.dlsite.com/maniax/fsr/=/work_type/ICG/keyword/%E8%8A%B1%E7%81%AB/order/dl_d/page/2",
55
+ );
56
+ expect(
57
+ dlsiteMakerUrl({ maker_id: "RG01012594", sort: "hot", page: 1 }),
58
+ ).toBe(
59
+ "https://www.dlsite.com/maniax/circle/profile/=/page/1/maker_id/RG01012594.html/order/dl_d",
60
+ );
61
+ expect(dlsiteMakerUrl({ maker_id: "VG02994" })).toBe(
62
+ "https://www.dlsite.com/maniax/circle/profile/=/page/1/maker_id/VG02994.html/order/release",
63
+ );
64
+ expect(dlsiteCreatorUrl({ creator: "わかなはなび" })).toBe(
65
+ "https://www.dlsite.com/maniax/fsr/=/keyword_creater/%22%E3%82%8F%E3%81%8B%E3%81%AA%E3%81%AF%E3%81%AA%E3%81%B3%22/ana_flg/all/order/release/page/1",
66
+ );
67
+ expect(dlsiteGenreUrl({ genre: "001", sort: "rating" })).toBe(
68
+ "https://www.dlsite.com/maniax/fsr/=/genre/001/order/rate/page/1",
69
+ );
70
+ });
71
+
72
+ it("parses search result cards", () => {
73
+ const rows = parseDlsiteSearchHtml(
74
+ `<div data-list_item_product_id="RJ005751" class="search_result_img_box_inner">
75
+ <thumb-with-ng-filter-block link="https://www.dlsite.com/maniax/work/=/product_id/RJ005751.html"
76
+ :thumb-candidates="['//img.dlsite.jp/resize/images2/work/doujin/RJ006000/RJ005751_img_main_240x240.webp']"></thumb-with-ng-filter-block>
77
+ <dd class="work_category_free_sample"><div class="work_category type_MNG"><a>マンガ</a></div></dd>
78
+ <dd class="work_name"><div><a href="https://www.dlsite.com/maniax/work/=/product_id/RJ005751.html" title="Komm.susser Tod.">Komm.susser Tod.</a></div></dd>
79
+ <dd class="maker_name"><a href="https://www.dlsite.com/maniax/circle/profile/=/maker_id/RG01444.html">スタジオきゃうん</a></dd>
80
+ <span class="work_price_base">770</span>
81
+ <dd class="work_genre"><span class="icon_ADL" title="R18">R18</span></dd>
82
+ <dd class="work_dl">販売数:&nbsp;<span>745</span></dd>
83
+ <dd class="work_rating"><div class="star_rating star_40 mini">(327)</div></dd>
84
+ </div>`,
85
+ 5,
86
+ );
87
+ expect(rows).toEqual([
88
+ {
89
+ rank: 1,
90
+ product_id: "RJ005751",
91
+ title: "Komm.susser Tod.",
92
+ maker: "スタジオきゃうん",
93
+ maker_id: "RG01444",
94
+ work_type: "マンガ",
95
+ age: "R18",
96
+ price_jpy: "770",
97
+ sales: "745",
98
+ rating: "star_40",
99
+ reviews: "327",
100
+ thumb:
101
+ "https://img.dlsite.jp/resize/images2/work/doujin/RJ006000/RJ005751_img_main_240x240.webp",
102
+ url: "https://www.dlsite.com/maniax/work/=/product_id/RJ005751.html",
103
+ },
104
+ ]);
105
+ });
106
+
107
+ it("parses detail page metadata", () => {
108
+ expect(
109
+ parseDlsiteDetailHtml(
110
+ `<meta property="og:image" content="https://img.dlsite.jp/main.jpg">
111
+ <h1 itemprop="name" id="work_name">Komm.susser Tod.</h1>
112
+ <span itemprop="brand" class="maker_name"><a>スタジオきゃうん</a></span>
113
+ <table id="work_outline"><tr><th>販売日</th><td>2001年10月02日</td></tr>
114
+ <tr><th>作品形式</th><td><span title="マンガ">マンガ</span></td></tr>
115
+ <tr><th>ページ数</th><td>36ページ</td></tr></table>
116
+ <div hidden class="ga4_event_item_RJ005751" data-product_id="RJ005751" data-maker_id="RG01444" data-work_type="MNG" data-price="770"></div>`,
117
+ "RJ005751",
118
+ ),
119
+ ).toMatchObject({
120
+ product_id: "RJ005751",
121
+ title: "Komm.susser Tod.",
122
+ maker: "スタジオきゃうん",
123
+ maker_id: "RG01444",
124
+ work_type: "MNG",
125
+ release_date: "2001年10月02日",
126
+ pages: "36ページ",
127
+ price_jpy: "770",
128
+ image: "https://img.dlsite.jp/main.jpg",
129
+ });
130
+ expect(decodeDlsiteHtml("A &amp; B<br>C")).toBe("A & B C");
131
+ });
132
+ });