@zenalexa/unicli 0.224.1 → 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 (139) hide show
  1. package/AGENTS.md +3 -3
  2. package/README.md +91 -91
  3. package/README.zh-CN.md +68 -68
  4. package/dist/adapters/xueqiu/extra.js +2 -2
  5. package/dist/adapters/xueqiu/extra.js.map +1 -1
  6. package/dist/browser/cdp-client.d.ts +10 -0
  7. package/dist/browser/cdp-client.d.ts.map +1 -1
  8. package/dist/browser/cdp-client.js +21 -0
  9. package/dist/browser/cdp-client.js.map +1 -1
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/cli.js +4 -3
  12. package/dist/cli.js.map +1 -1
  13. package/dist/commands/architecture.d.ts +3 -1
  14. package/dist/commands/architecture.d.ts.map +1 -1
  15. package/dist/commands/architecture.js +13 -5
  16. package/dist/commands/architecture.js.map +1 -1
  17. package/dist/commands/delivery.d.ts.map +1 -1
  18. package/dist/commands/delivery.js.map +1 -1
  19. package/dist/commands/describe.d.ts.map +1 -1
  20. package/dist/commands/describe.js +104 -9
  21. package/dist/commands/describe.js.map +1 -1
  22. package/dist/commands/dispatch.d.ts.map +1 -1
  23. package/dist/commands/dispatch.js +3 -13
  24. package/dist/commands/dispatch.js.map +1 -1
  25. package/dist/commands/do.d.ts +2 -1
  26. package/dist/commands/do.d.ts.map +1 -1
  27. package/dist/commands/do.js +43 -4
  28. package/dist/commands/do.js.map +1 -1
  29. package/dist/commands/social.d.ts.map +1 -1
  30. package/dist/commands/social.js +3 -13
  31. package/dist/commands/social.js.map +1 -1
  32. package/dist/core/architecture-tree.d.ts +26 -6
  33. package/dist/core/architecture-tree.d.ts.map +1 -1
  34. package/dist/core/architecture-tree.js +184 -40
  35. package/dist/core/architecture-tree.js.map +1 -1
  36. package/dist/core/capability-matrix.d.ts +63 -0
  37. package/dist/core/capability-matrix.d.ts.map +1 -0
  38. package/dist/core/capability-matrix.js +316 -0
  39. package/dist/core/capability-matrix.js.map +1 -0
  40. package/dist/core/command-contract-lint.d.ts.map +1 -1
  41. package/dist/core/command-contract-lint.js +3 -1
  42. package/dist/core/command-contract-lint.js.map +1 -1
  43. package/dist/core/command-contract.d.ts +10 -3
  44. package/dist/core/command-contract.d.ts.map +1 -1
  45. package/dist/core/command-contract.js +87 -5
  46. package/dist/core/command-contract.js.map +1 -1
  47. package/dist/discovery/core-catalog.d.ts +1 -0
  48. package/dist/discovery/core-catalog.d.ts.map +1 -1
  49. package/dist/discovery/core-catalog.js +22 -5
  50. package/dist/discovery/core-catalog.js.map +1 -1
  51. package/dist/engine/cascade.d.ts.map +1 -1
  52. package/dist/engine/cascade.js +21 -25
  53. package/dist/engine/cascade.js.map +1 -1
  54. package/dist/engine/chromium-cookies.d.ts +27 -0
  55. package/dist/engine/chromium-cookies.d.ts.map +1 -1
  56. package/dist/engine/chromium-cookies.js +53 -14
  57. package/dist/engine/chromium-cookies.js.map +1 -1
  58. package/dist/engine/cookie-capture.d.ts +30 -0
  59. package/dist/engine/cookie-capture.d.ts.map +1 -0
  60. package/dist/engine/cookie-capture.js +104 -0
  61. package/dist/engine/cookie-capture.js.map +1 -0
  62. package/dist/engine/cookie-extractor.d.ts.map +1 -1
  63. package/dist/engine/cookie-extractor.js +4 -12
  64. package/dist/engine/cookie-extractor.js.map +1 -1
  65. package/dist/engine/cookie-refresh.d.ts +59 -8
  66. package/dist/engine/cookie-refresh.d.ts.map +1 -1
  67. package/dist/engine/cookie-refresh.js +80 -58
  68. package/dist/engine/cookie-refresh.js.map +1 -1
  69. package/dist/engine/cookie-source.d.ts +110 -0
  70. package/dist/engine/cookie-source.d.ts.map +1 -0
  71. package/dist/engine/cookie-source.js +207 -0
  72. package/dist/engine/cookie-source.js.map +1 -0
  73. package/dist/engine/cookies.d.ts +37 -25
  74. package/dist/engine/cookies.d.ts.map +1 -1
  75. package/dist/engine/cookies.js +58 -157
  76. package/dist/engine/cookies.js.map +1 -1
  77. package/dist/engine/delivery/index.d.ts +2 -1
  78. package/dist/engine/delivery/index.d.ts.map +1 -1
  79. package/dist/engine/delivery/index.js +2 -1
  80. package/dist/engine/delivery/index.js.map +1 -1
  81. package/dist/engine/delivery/spec.d.ts +44 -0
  82. package/dist/engine/delivery/spec.d.ts.map +1 -0
  83. package/dist/engine/delivery/spec.js +82 -0
  84. package/dist/engine/delivery/spec.js.map +1 -0
  85. package/dist/engine/executor.d.ts +17 -6
  86. package/dist/engine/executor.d.ts.map +1 -1
  87. package/dist/engine/executor.js +131 -68
  88. package/dist/engine/executor.js.map +1 -1
  89. package/dist/engine/runtime.d.ts.map +1 -1
  90. package/dist/engine/runtime.js +9 -4
  91. package/dist/engine/runtime.js.map +1 -1
  92. package/dist/engine/step-observer.d.ts +62 -0
  93. package/dist/engine/step-observer.d.ts.map +1 -0
  94. package/dist/engine/step-observer.js +38 -0
  95. package/dist/engine/step-observer.js.map +1 -0
  96. package/dist/engine/steps/browser-helpers.d.ts.map +1 -1
  97. package/dist/engine/steps/browser-helpers.js +2 -8
  98. package/dist/engine/steps/browser-helpers.js.map +1 -1
  99. package/dist/engine/steps/fetch-text.d.ts.map +1 -1
  100. package/dist/engine/steps/fetch-text.js +106 -33
  101. package/dist/engine/steps/fetch-text.js.map +1 -1
  102. package/dist/engine/steps/fetch.d.ts +20 -0
  103. package/dist/engine/steps/fetch.d.ts.map +1 -1
  104. package/dist/engine/steps/fetch.js.map +1 -1
  105. package/dist/engine/steps/index.d.ts +2 -0
  106. package/dist/engine/steps/index.d.ts.map +1 -1
  107. package/dist/engine/steps/index.js +2 -0
  108. package/dist/engine/steps/index.js.map +1 -1
  109. package/dist/engine/steps/split-text.d.ts +26 -0
  110. package/dist/engine/steps/split-text.d.ts.map +1 -0
  111. package/dist/engine/steps/split-text.js +89 -0
  112. package/dist/engine/steps/split-text.js.map +1 -0
  113. package/dist/engine/steps/to-entries.d.ts +9 -0
  114. package/dist/engine/steps/to-entries.d.ts.map +1 -0
  115. package/dist/engine/steps/to-entries.js +27 -0
  116. package/dist/engine/steps/to-entries.js.map +1 -0
  117. package/dist/fast-path/handlers/discovery.d.ts.map +1 -1
  118. package/dist/fast-path/handlers/discovery.js +7 -7
  119. package/dist/fast-path/handlers/discovery.js.map +1 -1
  120. package/dist/manifest-compact.txt +1 -1
  121. package/dist/manifest.json +142 -1
  122. package/dist/mcp/tools.js +1 -1
  123. package/dist/mcp/tools.js.map +1 -1
  124. package/dist/output/auth-guidance.d.ts +17 -3
  125. package/dist/output/auth-guidance.d.ts.map +1 -1
  126. package/dist/output/auth-guidance.js +27 -3
  127. package/dist/output/auth-guidance.js.map +1 -1
  128. package/dist/output/error-map.d.ts.map +1 -1
  129. package/dist/output/error-map.js +4 -0
  130. package/dist/output/error-map.js.map +1 -1
  131. package/package.json +2 -2
  132. package/server.json +2 -2
  133. package/skills/unicli/SKILL.md +1 -1
  134. package/skills/unicli-claude-code/SKILL.md +1 -1
  135. package/skills/unicli-hermes/SKILL.md +1 -1
  136. package/src/adapters/12306/price.yaml +91 -0
  137. package/src/adapters/12306/stations.yaml +52 -0
  138. package/src/adapters/12306/trains.yaml +129 -0
  139. package/src/adapters/xueqiu/extra.ts +5 -2
@@ -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
@@ -1,11 +1,14 @@
1
1
  import { cli, Strategy } from "../../registry.js";
2
2
  import type { IPage } from "../../types.js";
3
- import { loadCookies, formatCookieHeader } from "../../engine/cookies.js";
3
+ import {
4
+ loadCookiesWithCDP,
5
+ formatCookieHeader,
6
+ } from "../../engine/cookies.js";
4
7
  import { USER_AGENT } from "../../constants.js";
5
8
  import { intArg, js, str } from "../_shared/browser-tools.js";
6
9
 
7
10
  async function xueqiuJson(url: string): Promise<Record<string, unknown>> {
8
- const cookies = loadCookies("xueqiu");
11
+ const cookies = await loadCookiesWithCDP("xueqiu", "xueqiu.com");
9
12
  const headers: Record<string, string> = {
10
13
  "user-agent": USER_AGENT,
11
14
  referer: "https://xueqiu.com",