@zenalexa/unicli 0.224.0 → 0.225.0

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 (170) hide show
  1. package/AGENTS.md +5 -5
  2. package/README.md +92 -92
  3. package/README.zh-CN.md +69 -69
  4. package/dist/adapters/marxists-cn/archive.d.ts +61 -0
  5. package/dist/adapters/marxists-cn/archive.d.ts.map +1 -0
  6. package/dist/adapters/marxists-cn/archive.js +861 -0
  7. package/dist/adapters/marxists-cn/archive.js.map +1 -0
  8. package/dist/adapters/twitter/lists-extra.d.ts +17 -1
  9. package/dist/adapters/twitter/lists-extra.d.ts.map +1 -1
  10. package/dist/adapters/twitter/lists-extra.js +123 -21
  11. package/dist/adapters/twitter/lists-extra.js.map +1 -1
  12. package/dist/adapters/twitter/post.js +1 -0
  13. package/dist/adapters/twitter/post.js.map +1 -1
  14. package/dist/adapters/twitter/thread.d.ts +13 -1
  15. package/dist/adapters/twitter/thread.d.ts.map +1 -1
  16. package/dist/adapters/twitter/thread.js +76 -33
  17. package/dist/adapters/twitter/thread.js.map +1 -1
  18. package/dist/adapters/xueqiu/extra.js +2 -2
  19. package/dist/adapters/xueqiu/extra.js.map +1 -1
  20. package/dist/browser/cdp-client.d.ts +10 -0
  21. package/dist/browser/cdp-client.d.ts.map +1 -1
  22. package/dist/browser/cdp-client.js +21 -0
  23. package/dist/browser/cdp-client.js.map +1 -1
  24. package/dist/cli.d.ts.map +1 -1
  25. package/dist/cli.js +4 -3
  26. package/dist/cli.js.map +1 -1
  27. package/dist/commands/architecture.d.ts +3 -1
  28. package/dist/commands/architecture.d.ts.map +1 -1
  29. package/dist/commands/architecture.js +13 -5
  30. package/dist/commands/architecture.js.map +1 -1
  31. package/dist/commands/delivery.d.ts.map +1 -1
  32. package/dist/commands/delivery.js.map +1 -1
  33. package/dist/commands/describe.d.ts.map +1 -1
  34. package/dist/commands/describe.js +104 -9
  35. package/dist/commands/describe.js.map +1 -1
  36. package/dist/commands/dispatch.d.ts.map +1 -1
  37. package/dist/commands/dispatch.js +3 -13
  38. package/dist/commands/dispatch.js.map +1 -1
  39. package/dist/commands/do.d.ts +2 -1
  40. package/dist/commands/do.d.ts.map +1 -1
  41. package/dist/commands/do.js +43 -4
  42. package/dist/commands/do.js.map +1 -1
  43. package/dist/commands/social.d.ts.map +1 -1
  44. package/dist/commands/social.js +3 -13
  45. package/dist/commands/social.js.map +1 -1
  46. package/dist/core/architecture-tree.d.ts +26 -6
  47. package/dist/core/architecture-tree.d.ts.map +1 -1
  48. package/dist/core/architecture-tree.js +184 -40
  49. package/dist/core/architecture-tree.js.map +1 -1
  50. package/dist/core/capability-matrix.d.ts +63 -0
  51. package/dist/core/capability-matrix.d.ts.map +1 -0
  52. package/dist/core/capability-matrix.js +316 -0
  53. package/dist/core/capability-matrix.js.map +1 -0
  54. package/dist/core/command-contract-lint.d.ts.map +1 -1
  55. package/dist/core/command-contract-lint.js +3 -1
  56. package/dist/core/command-contract-lint.js.map +1 -1
  57. package/dist/core/command-contract.d.ts +10 -3
  58. package/dist/core/command-contract.d.ts.map +1 -1
  59. package/dist/core/command-contract.js +87 -5
  60. package/dist/core/command-contract.js.map +1 -1
  61. package/dist/discovery/aliases.d.ts.map +1 -1
  62. package/dist/discovery/aliases.js +93 -0
  63. package/dist/discovery/aliases.js.map +1 -1
  64. package/dist/discovery/core-catalog.d.ts +1 -0
  65. package/dist/discovery/core-catalog.d.ts.map +1 -1
  66. package/dist/discovery/core-catalog.js +22 -5
  67. package/dist/discovery/core-catalog.js.map +1 -1
  68. package/dist/discovery/intents.d.ts.map +1 -1
  69. package/dist/discovery/intents.js +124 -0
  70. package/dist/discovery/intents.js.map +1 -1
  71. package/dist/engine/cascade.d.ts.map +1 -1
  72. package/dist/engine/cascade.js +21 -25
  73. package/dist/engine/cascade.js.map +1 -1
  74. package/dist/engine/chromium-cookies.d.ts +27 -0
  75. package/dist/engine/chromium-cookies.d.ts.map +1 -1
  76. package/dist/engine/chromium-cookies.js +53 -14
  77. package/dist/engine/chromium-cookies.js.map +1 -1
  78. package/dist/engine/cookie-capture.d.ts +30 -0
  79. package/dist/engine/cookie-capture.d.ts.map +1 -0
  80. package/dist/engine/cookie-capture.js +104 -0
  81. package/dist/engine/cookie-capture.js.map +1 -0
  82. package/dist/engine/cookie-extractor.d.ts.map +1 -1
  83. package/dist/engine/cookie-extractor.js +4 -12
  84. package/dist/engine/cookie-extractor.js.map +1 -1
  85. package/dist/engine/cookie-refresh.d.ts +59 -8
  86. package/dist/engine/cookie-refresh.d.ts.map +1 -1
  87. package/dist/engine/cookie-refresh.js +80 -58
  88. package/dist/engine/cookie-refresh.js.map +1 -1
  89. package/dist/engine/cookie-source.d.ts +110 -0
  90. package/dist/engine/cookie-source.d.ts.map +1 -0
  91. package/dist/engine/cookie-source.js +207 -0
  92. package/dist/engine/cookie-source.js.map +1 -0
  93. package/dist/engine/cookies.d.ts +37 -25
  94. package/dist/engine/cookies.d.ts.map +1 -1
  95. package/dist/engine/cookies.js +58 -157
  96. package/dist/engine/cookies.js.map +1 -1
  97. package/dist/engine/delivery/index.d.ts +2 -1
  98. package/dist/engine/delivery/index.d.ts.map +1 -1
  99. package/dist/engine/delivery/index.js +2 -1
  100. package/dist/engine/delivery/index.js.map +1 -1
  101. package/dist/engine/delivery/spec.d.ts +44 -0
  102. package/dist/engine/delivery/spec.d.ts.map +1 -0
  103. package/dist/engine/delivery/spec.js +82 -0
  104. package/dist/engine/delivery/spec.js.map +1 -0
  105. package/dist/engine/executor.d.ts +17 -6
  106. package/dist/engine/executor.d.ts.map +1 -1
  107. package/dist/engine/executor.js +131 -68
  108. package/dist/engine/executor.js.map +1 -1
  109. package/dist/engine/runtime.d.ts.map +1 -1
  110. package/dist/engine/runtime.js +9 -4
  111. package/dist/engine/runtime.js.map +1 -1
  112. package/dist/engine/step-observer.d.ts +62 -0
  113. package/dist/engine/step-observer.d.ts.map +1 -0
  114. package/dist/engine/step-observer.js +38 -0
  115. package/dist/engine/step-observer.js.map +1 -0
  116. package/dist/engine/steps/browser-helpers.d.ts.map +1 -1
  117. package/dist/engine/steps/browser-helpers.js +2 -8
  118. package/dist/engine/steps/browser-helpers.js.map +1 -1
  119. package/dist/engine/steps/fetch-text.d.ts.map +1 -1
  120. package/dist/engine/steps/fetch-text.js +106 -33
  121. package/dist/engine/steps/fetch-text.js.map +1 -1
  122. package/dist/engine/steps/fetch.d.ts +20 -0
  123. package/dist/engine/steps/fetch.d.ts.map +1 -1
  124. package/dist/engine/steps/fetch.js.map +1 -1
  125. package/dist/engine/steps/index.d.ts +2 -0
  126. package/dist/engine/steps/index.d.ts.map +1 -1
  127. package/dist/engine/steps/index.js +2 -0
  128. package/dist/engine/steps/index.js.map +1 -1
  129. package/dist/engine/steps/split-text.d.ts +26 -0
  130. package/dist/engine/steps/split-text.d.ts.map +1 -0
  131. package/dist/engine/steps/split-text.js +89 -0
  132. package/dist/engine/steps/split-text.js.map +1 -0
  133. package/dist/engine/steps/to-entries.d.ts +9 -0
  134. package/dist/engine/steps/to-entries.d.ts.map +1 -0
  135. package/dist/engine/steps/to-entries.js +27 -0
  136. package/dist/engine/steps/to-entries.js.map +1 -0
  137. package/dist/engine/text-normalize.d.ts +14 -0
  138. package/dist/engine/text-normalize.d.ts.map +1 -1
  139. package/dist/engine/text-normalize.js +64 -0
  140. package/dist/engine/text-normalize.js.map +1 -1
  141. package/dist/fast-path/handlers/discovery.d.ts.map +1 -1
  142. package/dist/fast-path/handlers/discovery.js +7 -7
  143. package/dist/fast-path/handlers/discovery.js.map +1 -1
  144. package/dist/manifest-compact.txt +3 -3
  145. package/dist/manifest.json +493 -3
  146. package/dist/mcp/tools.js +1 -1
  147. package/dist/mcp/tools.js.map +1 -1
  148. package/dist/output/auth-guidance.d.ts +17 -3
  149. package/dist/output/auth-guidance.d.ts.map +1 -1
  150. package/dist/output/auth-guidance.js +27 -3
  151. package/dist/output/auth-guidance.js.map +1 -1
  152. package/dist/output/error-map.d.ts.map +1 -1
  153. package/dist/output/error-map.js +4 -0
  154. package/dist/output/error-map.js.map +1 -1
  155. package/package.json +2 -2
  156. package/server.json +2 -2
  157. package/skills/unicli/SKILL.md +1 -1
  158. package/skills/unicli-claude-code/SKILL.md +1 -1
  159. package/skills/unicli-hermes/SKILL.md +1 -1
  160. package/src/adapters/12306/price.yaml +91 -0
  161. package/src/adapters/12306/stations.yaml +52 -0
  162. package/src/adapters/12306/trains.yaml +129 -0
  163. package/src/adapters/marxists-cn/archive.test.ts +173 -0
  164. package/src/adapters/marxists-cn/archive.ts +1049 -0
  165. package/src/adapters/twitter/lists-extra.test.ts +115 -0
  166. package/src/adapters/twitter/lists-extra.ts +146 -26
  167. package/src/adapters/twitter/post.ts +1 -0
  168. package/src/adapters/twitter/thread.test.ts +25 -1
  169. package/src/adapters/twitter/thread.ts +99 -47
  170. package/src/adapters/xueqiu/extra.ts +5 -2
@@ -1 +1 @@
1
- {"version":3,"file":"auth-guidance.js","sourceRoot":"","sources":["../../src/output/auth-guidance.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,YAAY,GAA2B;IAC3C,QAAQ,EAAE,cAAc;IACxB,MAAM,EAAE,YAAY;IACpB,QAAQ,EAAE,cAAc;IACxB,SAAS,EAAE,eAAe;IAC1B,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,aAAa;IACtB,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,kBAAkB;IAC1B,WAAW,EAAE,qBAAqB;IAClC,OAAO,EAAE,aAAa;IACtB,KAAK,EAAE,eAAe;CACvB,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,MAAe;IAC7D,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,MAAe;IACxD,OAAO,WAAW,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,MAAe;IAC7D,OAAO,sBAAsB,IAAI,aAAa,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,OAAe;IAC5D,OAAO,uBAAuB,IAAI,IAAI,OAAO,0BAA0B,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAY,EAAE,OAAe;IACjE,OAAO;QACL,8BAA8B,iBAAiB,CAAC,IAAI,CAAC,iBAAiB;QACtE,gCAAgC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK;QACpE,mCAAmC,YAAY,CAAC,IAAI,CAAC,yCAAyC;KAC/F,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACd,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,IAAY,EACZ,OAAe;IAEf,OAAO;QACL,UAAU,YAAY,CAAC,IAAI,CAAC,sFAAsF;QAClH,+BAA+B,iBAAiB,CAAC,IAAI,CAAC,KAAK;QAC3D,2DAA2D,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK;KAChG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"auth-guidance.js","sourceRoot":"","sources":["../../src/output/auth-guidance.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,MAAM,YAAY,GAA2B;IAC3C,QAAQ,EAAE,cAAc;IACxB,MAAM,EAAE,YAAY;IACpB,QAAQ,EAAE,cAAc;IACxB,SAAS,EAAE,eAAe;IAC1B,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,aAAa;IACtB,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,kBAAkB;IAC1B,WAAW,EAAE,qBAAqB;IAClC,OAAO,EAAE,aAAa;IACtB,KAAK,EAAE,eAAe;CACvB,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,MAAe;IAC7D,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,MAAe;IACxD,OAAO,WAAW,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,MAAe;IAC7D,OAAO,sBAAsB,IAAI,aAAa,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,OAAe;IAC5D,OAAO,uBAAuB,IAAI,IAAI,OAAO,0BAA0B,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAY,EAAE,OAAe;IACjE,OAAO;QACL,8BAA8B,iBAAiB,CAAC,IAAI,CAAC,iBAAiB;QACtE,gCAAgC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK;QACpE,mCAAmC,YAAY,CAAC,IAAI,CAAC,yCAAyC;KAC/F,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACd,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,IAAY,EACZ,OAAe;IAEf,OAAO;QACL,UAAU,YAAY,CAAC,IAAI,CAAC,sFAAsF;QAClH,+BAA+B,iBAAiB,CAAC,IAAI,CAAC,KAAK;QAC3D,2DAA2D,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK;KAChG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACd,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,wBAAwB,CACtC,MAAoD,EACpD,iBAAqC,EACrC,IAAY;IAEZ,IAAI,CAAC,MAAM,CAAC,KAAK;QAAE,OAAO;IAC1B,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,iBAAiB,CAAC;SACnE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,GAAG,CAAC,CAAC;IACb,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG;QACpB,OAAO,EAAE,iBAAiB,IAAI,0CAA0C;QACxE,OAAO,EAAE,sBAAsB,IAAI,EAAE;KACtC,CAAC;IACF,MAAM,CAAC,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AACvC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"error-map.d.ts","sourceRoot":"","sources":["../../src/output/error-map.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAWH;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,aAI5B,CAAC;AA2BH;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CA2CpD;AAED,gEAAgE;AAChE,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CA2BvD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,OAAO,EACZ,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,SAAc,GACpB;IACD,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB,CAiDA"}
1
+ {"version":3,"file":"error-map.d.ts","sourceRoot":"","sources":["../../src/output/error-map.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAWH;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,aAI5B,CAAC;AA2BH;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CA4CpD;AAED,gEAAgE;AAChE,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CA4BvD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,OAAO,EACZ,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,SAAc,GACpB;IACD,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB,CAiDA"}
@@ -74,6 +74,8 @@ export function errorTypeToCode(err) {
74
74
  return "network_error";
75
75
  if (errorType === "timeout")
76
76
  return "network_error";
77
+ if (errorType === "unknown_action")
78
+ return "unknown_action";
77
79
  return "internal_error";
78
80
  }
79
81
  if (err instanceof Error && typeof err.code === "string")
@@ -105,6 +107,8 @@ export function mapErrorToExitCode(err) {
105
107
  return ExitCode.EMPTY_RESULT;
106
108
  if (errorType === "permission_denied")
107
109
  return ExitCode.AUTH_REQUIRED;
110
+ if (errorType === "unknown_action")
111
+ return ExitCode.CONFIG_ERROR;
108
112
  if (errorType === "network_error" || errorType === "timeout") {
109
113
  return ExitCode.TEMP_FAILURE;
110
114
  }
@@ -1 +1 @@
1
- {"version":3,"file":"error-map.js","sourceRoot":"","sources":["../../src/output/error-map.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EACL,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,oBAAoB,CAAC;AAE5B;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAS;IAC/C,WAAW;IACX,WAAW;IACX,eAAe;CAChB,CAAC,CAAC;AASH,SAAS,aAAa,CAAC,OAAe;IACpC,OAAO,+KAA+K,CAAC,IAAI,CACzL,OAAO,CACR,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAe;IACzC,OAAO,yFAAyF,CAAC,IAAI,CACnG,OAAO,CACR,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAe;IACzC,OAAO,sGAAsG,CAAC,IAAI,CAChH,OAAO,CACR,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,GAAY;IAC1C,IAAI,aAAa,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;IAC/C,IAAI,GAAG,YAAY,aAAa,EAAE,CAAC;QACjC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;QAC7C,IAAI,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,OAAO,oBAAoB,CAAC;QACjE,IACE,UAAU,KAAK,GAAG;YAClB,UAAU,KAAK,GAAG;YAClB,CAAC,SAAS,KAAK,YAAY;gBACzB,CAAC,UAAU,KAAK,GAAG;oBACjB,UAAU,KAAK,GAAG;oBAClB,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YAEhC,OAAO,eAAe,CAAC;QACzB,IAAI,UAAU,KAAK,GAAG;YAAE,OAAO,WAAW,CAAC;QAC3C,IAAI,UAAU,KAAK,GAAG;YAAE,OAAO,cAAc,CAAC;QAC9C,IACE,UAAU,KAAK,GAAG;YAClB,UAAU,KAAK,GAAG;YAClB,UAAU,KAAK,GAAG;YAClB,UAAU,KAAK,GAAG;YAElB,OAAO,gBAAgB,CAAC;QAC1B,IAAI,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;QACvD,IAAI,SAAS,KAAK,mBAAmB;YAAE,OAAO,mBAAmB,CAAC;QAClE,IAAI,SAAS,KAAK,eAAe;YAAE,OAAO,eAAe,CAAC;QAC1D,IAAI,SAAS,KAAK,cAAc;YAAE,OAAO,cAAc,CAAC;QACxD,IAAI,SAAS,KAAK,eAAe;YAAE,OAAO,eAAe,CAAC;QAC1D,IAAI,SAAS,KAAK,SAAS;YAAE,OAAO,eAAe,CAAC;QACpD,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IACD,IAAI,GAAG,YAAY,KAAK,IAAI,OAAQ,GAAuB,CAAC,IAAI,KAAK,QAAQ;QAC3E,OAAQ,GAAuB,CAAC,IAAK,CAAC;IACxC,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjE,IAAI,kBAAkB,CAAC,OAAO,CAAC;QAAE,OAAO,oBAAoB,CAAC;IAC7D,IACE,6DAA6D,CAAC,IAAI,CAAC,OAAO,CAAC;QAE3E,OAAO,eAAe,CAAC;IACzB,IAAI,aAAa,CAAC,OAAO,CAAC;QAAE,OAAO,eAAe,CAAC;IACnD,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,WAAW,CAAC;IAC7C,IAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,cAAc,CAAC;IAC5D,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,kBAAkB,CAAC,GAAY;IAC7C,IAAI,aAAa,CAAC,GAAG,CAAC;QAAE,OAAO,QAAQ,CAAC,aAAa,CAAC;IACtD,IAAI,GAAG,YAAY,aAAa,EAAE,CAAC;QACjC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;QAC7C,IACE,UAAU,KAAK,GAAG;YAClB,UAAU,KAAK,GAAG;YAClB,CAAC,SAAS,KAAK,YAAY,IAAI,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAE1D,OAAO,QAAQ,CAAC,aAAa,CAAC;QAChC,IAAI,SAAS,KAAK,cAAc;YAAE,OAAO,QAAQ,CAAC,YAAY,CAAC;QAC/D,IAAI,SAAS,KAAK,mBAAmB;YAAE,OAAO,QAAQ,CAAC,aAAa,CAAC;QACrE,IAAI,SAAS,KAAK,eAAe,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC7D,OAAO,QAAQ,CAAC,YAAY,CAAC;QAC/B,CAAC;QACD,OAAO,QAAQ,CAAC,aAAa,CAAC;IAChC,CAAC;IACD,IAAI,GAAG,YAAY,qBAAqB;QAAE,OAAO,QAAQ,CAAC,mBAAmB,CAAC;IAC9E,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjE,IACE,2EAA2E,CAAC,IAAI,CAC9E,OAAO,CACR;QAED,OAAO,QAAQ,CAAC,YAAY,CAAC;IAC/B,IAAI,kBAAkB,CAAC,OAAO,CAAC;QAAE,OAAO,QAAQ,CAAC,aAAa,CAAC;IAC/D,OAAO,QAAQ,CAAC,aAAa,CAAC;AAChC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAChC,GAAY,EACZ,WAAmB,EACnB,QAAgB,EAChB,OAAO,GAAG,WAAW;IAQrB,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO;YACL,YAAY,EAAE,SAAS;YACvB,IAAI,EAAE,SAAS;YACf,UAAU,EACR,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,WAAW;gBAC7B,CAAC,CAAC,iEAAiE;gBACnE,CAAC,CAAC,kEAAkE;YACxE,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,WAAW;YAC1C,YAAY,EAAE,CAAC,sBAAsB,EAAE,sBAAsB,CAAC;SAC/D,CAAC;IACJ,CAAC;IACD,IAAI,GAAG,YAAY,aAAa,EAAE,CAAC;QACjC,OAAO;YACL,YAAY,EAAE,WAAW;YACzB,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI;YACrB,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,UAAU;YACjC,SAAS,EACP,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,eAAe,CAAC,GAAG,CAAC,KAAK,cAAc;YACjE,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE;SAC5C,CAAC;IACJ,CAAC;IACD,IAAI,GAAG,YAAY,qBAAqB,EAAE,CAAC;QACzC,OAAO;YACL,YAAY,EAAE,SAAS;YACvB,IAAI,EAAE,SAAS;YACf,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,YAAY,EAAE,GAAG,CAAC,YAAY;SAC/B,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjE,MAAM,UAAU,GACd,GAAG,YAAY,KAAK,CAAC,CAAC,CAAE,GAAuB,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9D,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IAClC,OAAO;QACL,YAAY,EAAE,SAAS;QACvB,IAAI,EAAE,SAAS;QACf,UAAU,EACR,UAAU,EAAE,UAAU;YACtB,CAAC,IAAI,KAAK,eAAe;gBACvB,CAAC,CAAC,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC;gBAC1C,CAAC,CAAC,IAAI,KAAK,oBAAoB;oBAC7B,CAAC,CAAC,0BAA0B,CAAC,QAAQ,EAAE,OAAO,CAAC;oBAC/C,CAAC,CAAC,oBAAoB,QAAQ,sCAAsC,CAAC;QAC3E,SAAS,EAAE,UAAU,EAAE,SAAS,IAAI,kBAAkB,CAAC,OAAO,CAAC;QAC/D,YAAY,EAAE,UAAU,EAAE,YAAY,IAAI,EAAE;KAC7C,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"error-map.js","sourceRoot":"","sources":["../../src/output/error-map.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@zenalexa/unicli",
3
- "version": "0.224.0",
4
- "description": "Operations substrate for agents that use real software: web, browsers, desktop apps, local tools, MCP, policy, evidence, and self-repair.",
3
+ "version": "0.225.0",
4
+ "description": "Universal computer-control platform for agents: intent, policy, action substrates, evidence, delivery, and repair.",
5
5
  "packageManager": "npm@11.14.0",
6
6
  "type": "module",
7
7
  "main": "dist/main.js",
package/server.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-09-29/server.schema.json",
3
3
  "name": "io.github.olo-dot-io/Uni-CLI",
4
4
  "description": "Self-repairing CLI catalog that exposes 311 websites, desktop apps, and external CLIs as one MCP server. 977 declarative YAML adapters and 1753 commands; structured error envelopes let agents fix failing adapters at runtime and retry.",
5
- "version": "0.224.0",
5
+ "version": "0.225.0",
6
6
  "repository": {
7
7
  "url": "https://github.com/olo-dot-io/Uni-CLI",
8
8
  "source": "github"
@@ -13,7 +13,7 @@
13
13
  "registryType": "npm",
14
14
  "registryBaseUrl": "https://registry.npmjs.org",
15
15
  "identifier": "@zenalexa/unicli",
16
- "version": "0.224.0",
16
+ "version": "0.225.0",
17
17
  "transport": {
18
18
  "type": "stdio"
19
19
  },
@@ -11,7 +11,7 @@ description: >
11
11
  major platform; run desktop workflows or system tasks; or when the user says
12
12
  "unicli", "scrape", "fetch from", "get trending", "check [site]", "find on
13
13
  [platform]", "获取", "查询", "抓取".
14
- version: 0.224.0
14
+ version: 0.225.0
15
15
  category: core
16
16
  depends-on:
17
17
  - talk-normal
@@ -6,7 +6,7 @@ description: >
6
6
  newlines, or inline JSON — shell-quoted invocations hit TC0 circuit
7
7
  limits and drop to <50% success above ICS=4. Also covers --describe
8
8
  introspection and next_actions-driven navigation.
9
- version: 0.224.0
9
+ version: 0.225.0
10
10
  depends-on:
11
11
  - talk-normal
12
12
  triggers:
@@ -4,7 +4,7 @@ description: >
4
4
  Use Uni-CLI to interact with 237 websites, desktop apps, and system tools.
5
5
  Trigger when: user asks to check a website, fetch data, control a desktop app,
6
6
  or interact with social media, news, finance, or AI platforms.
7
- version: 0.224.0
7
+ version: 0.225.0
8
8
  depends-on:
9
9
  - talk-normal
10
10
  triggers:
@@ -0,0 +1,91 @@
1
+ site: 12306
2
+ name: price
3
+ description: 12306 ticket prices by seat class for one train + segment (anonymous)
4
+ type: web-api
5
+ domain: kyfw.12306.cn
6
+ strategy: public
7
+
8
+ args:
9
+ train_no:
10
+ type: str
11
+ required: true
12
+ positional: true
13
+ description: Internal train_no from `12306 trains` (e.g. 240000G54700), not the public code G547
14
+ from:
15
+ type: str
16
+ required: true
17
+ positional: true
18
+ description: Origin station telecode (e.g. VNP) — from `12306 stations <name>`
19
+ to:
20
+ type: str
21
+ required: true
22
+ positional: true
23
+ description: Destination station telecode (e.g. AOH) — from `12306 stations <name>`
24
+ date:
25
+ type: str
26
+ required: true
27
+ positional: true
28
+ description: Departure date YYYY-MM-DD
29
+
30
+ pipeline:
31
+ # 1. Mint an anonymous session.
32
+ - fetch_text:
33
+ url: https://kyfw.12306.cn/otn/leftTicket/init
34
+ capture_cookies: true
35
+
36
+ # 2. Resolve from/to station_no within this train's route. The price endpoint
37
+ # addresses stops by station_no, not telecode.
38
+ - fetch:
39
+ url: https://kyfw.12306.cn/otn/czxx/queryByTrainNo
40
+ headers:
41
+ Referer: https://kyfw.12306.cn/otn/leftTicket/init
42
+ params:
43
+ train_no: "${{ args.train_no }}"
44
+ from_station_telecode: "${{ args.from }}"
45
+ to_station_telecode: "${{ args.to }}"
46
+ depart_date: "${{ args.date }}"
47
+
48
+ - set:
49
+ stops: "${{ item.data.data }}"
50
+ - set:
51
+ from_no: "${{ vars.stops[0].station_no }}"
52
+ to_no: "${{ vars.stops[vars.stops.length - 1].station_no }}"
53
+
54
+ # 3. Query prices keyed by seat letter.
55
+ - fetch:
56
+ url: https://kyfw.12306.cn/otn/leftTicket/queryTicketPrice
57
+ headers:
58
+ Referer: https://kyfw.12306.cn/otn/leftTicket/init
59
+ params:
60
+ train_no: "${{ args.train_no }}"
61
+ from_station_no: "${{ vars.from_no }}"
62
+ to_station_no: "${{ vars.to_no }}"
63
+ seat_types: OM9PA1A3A4FWZ
64
+ train_date: "${{ args.date }}"
65
+
66
+ - select: data
67
+
68
+ - to_entries:
69
+ key_name: seat_code
70
+ value_name: raw_price
71
+
72
+ # Keep only real seat-letter entries with a ¥ price string.
73
+ - filter: >-
74
+ item.seat_code != 'train_no'
75
+ && item.seat_code != 'OT'
76
+ && typeof item.raw_price == 'string'
77
+ && item.raw_price.indexOf('¥') >= 0
78
+
79
+ - map:
80
+ seat_code: ${{ item.seat_code }}
81
+ seat_name: ${{ ({A9:'商务座',P:'特等座',M:'一等座',O:'二等座',A1:'硬座',A3:'硬卧',A4:'软卧',F:'动卧',WZ:'无座'})[item.seat_code] || item.seat_code }}
82
+ price: ${{ String(item.raw_price).replace('¥','') }}
83
+ currency: CNY
84
+
85
+ columns: [seat_name, price, currency, seat_code]
86
+ capabilities: ["http.fetch"]
87
+ minimum_capability: http.fetch
88
+ trust: public
89
+ confidentiality: public
90
+ quarantine: false
91
+ schema_version: v2
@@ -0,0 +1,52 @@
1
+ site: 12306
2
+ name: stations
3
+ description: Search 12306 (China Railway) stations by Chinese name, telecode, or pinyin
4
+ type: web-api
5
+ domain: kyfw.12306.cn
6
+ strategy: public
7
+
8
+ args:
9
+ keyword:
10
+ type: str
11
+ required: true
12
+ positional: true
13
+ description: Chinese substring (北京), telecode (VAP), or pinyin (beijing)
14
+ limit:
15
+ type: int
16
+ default: 20
17
+ description: Maximum results (1-50)
18
+
19
+ pipeline:
20
+ - fetch_text:
21
+ url: https://kyfw.12306.cn/otn/resources/js/framework/station_name.js
22
+
23
+ - split_text:
24
+ strip_prefix: "^var station_names\\s*='"
25
+ strip_suffix: "';?\\s*$"
26
+ record_separator: "@"
27
+ field_separator: "|"
28
+ columns: [abbr, name, code, pinyin, short, index, telecode, city]
29
+
30
+ - filter: >-
31
+ item.name.includes(args.keyword)
32
+ || item.code == args.keyword.toUpperCase()
33
+ || item.pinyin.includes(args.keyword.toLowerCase())
34
+ || item.short.includes(args.keyword.toLowerCase())
35
+ || item.city.includes(args.keyword)
36
+
37
+ - map:
38
+ name: ${{ item.name }}
39
+ code: ${{ item.code }}
40
+ pinyin: ${{ item.pinyin }}
41
+ abbr: ${{ item.short }}
42
+ city: ${{ item.city }}
43
+
44
+ - limit: ${{ args.limit }}
45
+
46
+ columns: [name, code, pinyin, abbr, city]
47
+ capabilities: ["http.fetch"]
48
+ minimum_capability: http.fetch
49
+ trust: public
50
+ confidentiality: public
51
+ quarantine: false
52
+ schema_version: v2
@@ -0,0 +1,129 @@
1
+ site: 12306
2
+ name: trains
3
+ description: List trains between two 12306 stations on a date (telecodes from `12306 stations`)
4
+ type: web-api
5
+ domain: kyfw.12306.cn
6
+ strategy: public
7
+
8
+ args:
9
+ from:
10
+ type: str
11
+ required: true
12
+ positional: true
13
+ description: Origin station telecode (e.g. VNP for 北京南) — get it from `12306 stations <name>`
14
+ to:
15
+ type: str
16
+ required: true
17
+ positional: true
18
+ description: Destination station telecode (e.g. AOH) — get it from `12306 stations <name>`
19
+ date:
20
+ type: str
21
+ required: true
22
+ positional: true
23
+ description: Departure date YYYY-MM-DD
24
+ limit:
25
+ type: int
26
+ default: 50
27
+ description: Maximum rows (1-100)
28
+
29
+ pipeline:
30
+ # 1. Mint an anonymous session — 12306 query endpoints reject cookieless requests.
31
+ - fetch_text:
32
+ url: https://kyfw.12306.cn/otn/leftTicket/init
33
+ capture_cookies: true
34
+
35
+ # 2. Query the left-ticket endpoint. 12306 rotates the endpoint NAME every few
36
+ # weeks (queryG/queryO/queryZ/queryA) and signals the right one via `c_url`.
37
+ - fetch:
38
+ url: https://kyfw.12306.cn/otn/leftTicket/queryG
39
+ params:
40
+ "leftTicketDTO.train_date": "${{ args.date }}"
41
+ "leftTicketDTO.from_station": "${{ args.from }}"
42
+ "leftTicketDTO.to_station": "${{ args.to }}"
43
+ purpose_codes: ADULT
44
+ rotate_urls:
45
+ - https://kyfw.12306.cn/otn/leftTicket/queryG
46
+ - https://kyfw.12306.cn/otn/leftTicket/queryO
47
+ - https://kyfw.12306.cn/otn/leftTicket/queryZ
48
+ - https://kyfw.12306.cn/otn/leftTicket/queryA
49
+ rotate_on_field: c_url
50
+
51
+ # 3. Each row in data.result is a URL-encoded `|`-delimited record.
52
+ - select: data.result
53
+
54
+ - split_text:
55
+ mode: per_item
56
+ strip_each: "%0A"
57
+ decode: uri
58
+ field_separator: "|"
59
+ columns:
60
+ - sale_flag # f0
61
+ - bookable_flag # f1 (预订)
62
+ - train_no # f2 internal id
63
+ - code # f3 公开车次 e.g. G547
64
+ - start_tc # f4
65
+ - end_tc # f5
66
+ - from_tc # f6 origin telecode
67
+ - to_tc # f7 dest telecode
68
+ - start_time # f8
69
+ - arrive_time # f9
70
+ - duration # f10
71
+ - can_book # f11 (Y/N)
72
+ - f12
73
+ - f13
74
+ - f14
75
+ - f15
76
+ - f16
77
+ - f17
78
+ - f18
79
+ - f19
80
+ - f20
81
+ - f21
82
+ - f22
83
+ - soft_sleeper # f23 软卧
84
+ - f24
85
+ - f25
86
+ - no_seat # f26 无座
87
+ - f27
88
+ - hard_sleeper # f28 硬卧
89
+ - hard_seat # f29 硬座
90
+ - second_seat # f30 二等座
91
+ - first_seat # f31 一等座
92
+ - business_seat # f32 商务座
93
+
94
+ - map:
95
+ code: ${{ item.code }}
96
+ from_to: ${{ item.from_tc + '→' + item.to_tc }}
97
+ depart: ${{ item.start_time }}
98
+ arrive: ${{ item.arrive_time }}
99
+ duration: ${{ item.duration }}
100
+ business: ${{ item.business_seat }}
101
+ first: ${{ item.first_seat }}
102
+ second: ${{ item.second_seat }}
103
+ soft_sleeper: ${{ item.soft_sleeper }}
104
+ hard_sleeper: ${{ item.hard_sleeper }}
105
+ hard_seat: ${{ item.hard_seat }}
106
+ no_seat: ${{ item.no_seat }}
107
+ bookable: ${{ item.bookable_flag }}
108
+
109
+ - limit: ${{ args.limit }}
110
+
111
+ columns:
112
+ [
113
+ code,
114
+ from_to,
115
+ depart,
116
+ arrive,
117
+ duration,
118
+ second,
119
+ first,
120
+ business,
121
+ hard_sleeper,
122
+ bookable,
123
+ ]
124
+ capabilities: ["http.fetch"]
125
+ minimum_capability: http.fetch
126
+ trust: public
127
+ confidentiality: public
128
+ quarantine: false
129
+ schema_version: v2
@@ -0,0 +1,173 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import {
3
+ decodeMarxistsBuffer,
4
+ mapMarxistsReadRow,
5
+ marxistsHtmlToText,
6
+ marxistsReadingListRows,
7
+ normalizeMarxistsPath,
8
+ parseMarxistsIndex,
9
+ parseMarxistsWorks,
10
+ requireMarxistsLimit,
11
+ } from "./archive.js";
12
+
13
+ describe("marxists-cn agent-facing archive adapter", () => {
14
+ it("normalizes paths and rejects off-archive URLs", () => {
15
+ expect(normalizeMarxistsPath("marx", { directoryIndex: true })).toBe(
16
+ "marx/index.htm",
17
+ );
18
+ expect(
19
+ normalizeMarxistsPath("https://www.marxists.org/chinese/marx/01.htm#8"),
20
+ ).toBe("marx/01.htm");
21
+ expect(() =>
22
+ normalizeMarxistsPath("https://example.com/chinese/marx/01.htm"),
23
+ ).toThrow("must stay on www.marxists.org");
24
+ expect(() => normalizeMarxistsPath("../index.htm")).toThrow(
25
+ "must stay under /chinese/",
26
+ );
27
+ });
28
+
29
+ it("validates bounded integer arguments", () => {
30
+ expect(requireMarxistsLimit(undefined, 20, 100, "limit")).toBe(20);
31
+ expect(requireMarxistsLimit("5", 20, 100, "limit")).toBe(5);
32
+ expect(() => requireMarxistsLimit("0", 20, 100, "limit")).toThrow(
33
+ "marxists-cn limit must",
34
+ );
35
+ expect(() => requireMarxistsLimit("101", 20, 100, "limit")).toThrow(
36
+ "marxists-cn limit must",
37
+ );
38
+ });
39
+
40
+ it("parses top-level people and reference links from the Chinese index", () => {
41
+ const rows = parseMarxistsIndex(`
42
+ <a title="马克思 Karl Marx" href="marx/index.htm">
43
+ <img src="images/1-marx.jpg" alt="马克思">
44
+ </a>
45
+ <a href="abc/index.htm">马克思主义简介</a>
46
+ <a href="search/index.html">中文马克思主义文库搜索</a>
47
+ `);
48
+
49
+ expect(rows).toEqual([
50
+ {
51
+ title: "马克思",
52
+ latinName: "Karl Marx",
53
+ kind: "directory",
54
+ path: "marx/index.htm",
55
+ url: "https://www.marxists.org/chinese/marx/index.htm",
56
+ },
57
+ {
58
+ title: "马克思主义简介",
59
+ latinName: "",
60
+ kind: "reference",
61
+ path: "abc/index.htm",
62
+ url: "https://www.marxists.org/chinese/abc/index.htm",
63
+ },
64
+ {
65
+ title: "中文马克思主义文库搜索",
66
+ latinName: "",
67
+ kind: "site-meta",
68
+ path: "search/index.html",
69
+ url: "https://www.marxists.org/chinese/search/index.html",
70
+ },
71
+ ]);
72
+ });
73
+
74
+ it("parses work links with section, note, and resource format", () => {
75
+ const rows = parseMarxistsWorks(
76
+ `
77
+ <b><font color="#FF0000" size="5">著 作</font></b>
78
+ <a href="01.htm">共产党宣言</a>(1848年)
79
+ <a href="../pdf/marx/texts/3.pdf">马克思:黑格尔法哲学批判</a>
80
+ `,
81
+ "marx/index.htm",
82
+ "https://www.marxists.org/chinese/marx/index.htm",
83
+ );
84
+
85
+ expect(rows).toEqual([
86
+ {
87
+ scope: "marx/index.htm",
88
+ section: "著 作",
89
+ title: "共产党宣言",
90
+ note: "(1848年)",
91
+ format: "htm",
92
+ path: "marx/01.htm",
93
+ url: "https://www.marxists.org/chinese/marx/01.htm",
94
+ },
95
+ {
96
+ scope: "marx/index.htm",
97
+ section: "著 作",
98
+ title: "马克思:黑格尔法哲学批判",
99
+ note: "",
100
+ format: "pdf",
101
+ path: "pdf/marx/texts/3.pdf",
102
+ url: "https://www.marxists.org/chinese/pdf/marx/texts/3.pdf",
103
+ },
104
+ ]);
105
+ });
106
+
107
+ it("extracts readable article metadata and body text", () => {
108
+ const html = `
109
+ <html>
110
+ <head><title>马克思 恩格斯:共产党宣言(1848年)</title></head>
111
+ <body>
112
+ <p class="title0">共产党宣言</p>
113
+ <p class="author">马克思 恩格斯</p>
114
+ <p class="date">(1848年)</p>
115
+ <script>ignored()</script>
116
+ <h3>一、资产者和无产者</h3>
117
+ &amp;Oslash; 译序<br>
118
+ 至今一切社会的历史&nbsp;都是阶级斗争的历史。<br>
119
+ <a href="#note">注释</a>
120
+ </body>
121
+ </html>
122
+ `;
123
+
124
+ expect(marxistsHtmlToText(html)).toContain(
125
+ "至今一切社会的历史 都是阶级斗争的历史。",
126
+ );
127
+ expect(marxistsHtmlToText(html)).toContain("Ø 译序");
128
+ expect(
129
+ mapMarxistsReadRow(
130
+ html,
131
+ "https://www.marxists.org/chinese/marx/01.htm",
132
+ 500,
133
+ ),
134
+ ).toMatchObject({
135
+ title: "共产党宣言",
136
+ author: "马克思 恩格斯",
137
+ date: "(1848年)",
138
+ url: "https://www.marxists.org/chinese/marx/01.htm",
139
+ });
140
+ });
141
+
142
+ it("sniffs UTF-8 pages without forcing GB18030", () => {
143
+ const html = '<meta charset="UTF-8">中文马克思主义文库搜索';
144
+ const bytes = new TextEncoder().encode(html);
145
+ expect(decodeMarxistsBuffer(bytes.buffer)).toContain(
146
+ "中文马克思主义文库搜索",
147
+ );
148
+ });
149
+
150
+ it("returns a Western Marxism reading list with directly readable paths", () => {
151
+ const rows = marxistsReadingListRows("western-marxism");
152
+
153
+ expect(rows.map((row) => row.author)).toEqual(
154
+ expect.arrayContaining(["葛兰西", "卢卡奇", "科尔施", "阿尔都塞"]),
155
+ );
156
+ expect(rows).toContainEqual(
157
+ expect.objectContaining({
158
+ author: "卢卡奇",
159
+ title: "《历史与阶级意识》",
160
+ path: "georg-lukacs/1922/index.htm",
161
+ readCommand: "unicli marxists-cn read georg-lukacs/1922/index.htm",
162
+ }),
163
+ );
164
+ expect(
165
+ rows.every((row) =>
166
+ row.url.startsWith("https://www.marxists.org/chinese/"),
167
+ ),
168
+ ).toBe(true);
169
+ expect(() => marxistsReadingListRows("unknown")).toThrow(
170
+ "reading-list preset",
171
+ );
172
+ });
173
+ });