openclaw-multi-auto 1.5.2 → 1.5.4

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 (185) hide show
  1. package/dist/{audio-preflight-5FEeDooz.js → audio-preflight-DDBLZBdb.js} +4 -4
  2. package/dist/{audio-transcription-runner-B-UvoDjZ.js → audio-transcription-runner-DZbSWT9E.js} +1 -1
  3. package/dist/build-info.json +3 -3
  4. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  5. package/dist/{chrome-D45SyhQL.js → chrome-CMU2WVFh.js} +8 -8
  6. package/dist/{deliver-B9cys0EZ.js → deliver-BXVcFIHL.js} +1 -1
  7. package/dist/{deliver-runtime-DhaQJ0pI.js → deliver-runtime-DTaIS-1i.js} +3 -3
  8. package/dist/{deps-send-whatsapp.runtime-DvTL2tzN.js → deps-send-whatsapp.runtime-CIZqFAqb.js} +7 -7
  9. package/dist/extensionAPI.js +6 -6
  10. package/dist/{image-DAOPwVXi.js → image-BCVLo0qw.js} +1 -1
  11. package/dist/{image-runtime-wlCLVvVv.js → image-runtime-DtCKpMPZ.js} +3 -3
  12. package/dist/{pi-embedded-DYU79yGe.js → pi-embedded-CgQ_W6Xs.js} +24 -24
  13. package/dist/{pi-embedded-helpers-uTRAmQ4n.js → pi-embedded-helpers-CwuBTKza.js} +3 -3
  14. package/dist/plugin-sdk/accounts-CJWOBzwB.js +35 -0
  15. package/dist/plugin-sdk/accounts-DP1-L-QS.js +288 -0
  16. package/dist/plugin-sdk/accounts-DZhWlEg3.js +46 -0
  17. package/dist/plugin-sdk/active-listener-B_sLJTXM.js +50 -0
  18. package/dist/plugin-sdk/api-key-rotation-BRE4X2tf.js +181 -0
  19. package/dist/plugin-sdk/audio-preflight-DGEUDxxR.js +69 -0
  20. package/dist/plugin-sdk/audio-transcription-runner-DkoPNPYt.js +2176 -0
  21. package/dist/plugin-sdk/audit-membership-runtime-DSBHHw7o.js +58 -0
  22. package/dist/plugin-sdk/bluebubbles.js +2 -2
  23. package/dist/plugin-sdk/channel-activity-F3d0yUwy.js +94 -0
  24. package/dist/plugin-sdk/channel-web-QF7EpjeP.js +2256 -0
  25. package/dist/plugin-sdk/chrome-BXoCyCkY.js +2415 -0
  26. package/dist/plugin-sdk/commands-registry-t7cXBTfN.js +1125 -0
  27. package/dist/plugin-sdk/config-BkEnz2Po.js +17913 -0
  28. package/dist/plugin-sdk/deliver-B6AG_l67.js +1694 -0
  29. package/dist/plugin-sdk/deliver-runtime-D585kJZc.js +32 -0
  30. package/dist/plugin-sdk/deps-send-discord.runtime-a_OKY2js.js +23 -0
  31. package/dist/plugin-sdk/deps-send-imessage.runtime-Baxy9TD4.js +22 -0
  32. package/dist/plugin-sdk/deps-send-signal.runtime-BwXoCrFl.js +21 -0
  33. package/dist/plugin-sdk/deps-send-slack.runtime-CLmKjgso.js +19 -0
  34. package/dist/plugin-sdk/deps-send-telegram.runtime-BKfdBKnZ.js +24 -0
  35. package/dist/plugin-sdk/deps-send-whatsapp.runtime-BOTwkbx_.js +57 -0
  36. package/dist/plugin-sdk/diagnostic-CsP-lEkI.js +319 -0
  37. package/dist/plugin-sdk/errors-DaiAM-yU.js +54 -0
  38. package/dist/plugin-sdk/fetch-guard-DETCcJzQ.js +156 -0
  39. package/dist/plugin-sdk/fs-safe-B8y811FR.js +352 -0
  40. package/dist/plugin-sdk/image-DjTEkYZE.js +2310 -0
  41. package/dist/plugin-sdk/image-ops-BSiMpAw4.js +584 -0
  42. package/dist/plugin-sdk/image-runtime-6xPp8m5a.js +25 -0
  43. package/dist/plugin-sdk/index.js +50 -50
  44. package/dist/plugin-sdk/ir-DQ7_HbvK.js +1296 -0
  45. package/dist/plugin-sdk/irc.js +2 -2
  46. package/dist/plugin-sdk/local-roots-BUP4YBmR.js +186 -0
  47. package/dist/plugin-sdk/logger-CZY9KIoY.js +1163 -0
  48. package/dist/plugin-sdk/login-BxEKLlCo.js +57 -0
  49. package/dist/plugin-sdk/login-qr-BQIpMPr9.js +320 -0
  50. package/dist/plugin-sdk/manager-I6KbPihW.js +3917 -0
  51. package/dist/plugin-sdk/manager-runtime-CFfYYWIQ.js +15 -0
  52. package/dist/plugin-sdk/outbound-NS6UHnB6.js +212 -0
  53. package/dist/plugin-sdk/outbound-attachment-Dy6fyf6H.js +19 -0
  54. package/dist/plugin-sdk/path-alias-guards-DBjLbIX_.js +43 -0
  55. package/dist/plugin-sdk/paths-vTM3Lh3X.js +166 -0
  56. package/dist/plugin-sdk/pi-embedded-helpers-1R1gu7eX.js +9627 -0
  57. package/dist/plugin-sdk/pi-model-discovery-runtime-Do9o-dUd.js +8 -0
  58. package/dist/plugin-sdk/pi-model-discovery-v-XPUOOf.js +134 -0
  59. package/dist/plugin-sdk/pi-tools.before-tool-call.runtime-D4sFsIks.js +354 -0
  60. package/dist/plugin-sdk/plugins-DeBZB9l_.js +864 -0
  61. package/dist/plugin-sdk/proxy-fetch-ChxOhWF4.js +38 -0
  62. package/dist/plugin-sdk/pw-ai-DEOmCSSC.js +1938 -0
  63. package/dist/plugin-sdk/qmd-manager-HyYKoEch.js +1448 -0
  64. package/dist/plugin-sdk/query-expansion-CeyKUeDW.js +1011 -0
  65. package/dist/plugin-sdk/redact-DjVX-1N3.js +319 -0
  66. package/dist/plugin-sdk/reply-DAo_Jt8K.js +97916 -0
  67. package/dist/plugin-sdk/resolve-outbound-target-B42qgQS9.js +40 -0
  68. package/dist/plugin-sdk/run-with-concurrency-Bt_ks0Qa.js +1994 -0
  69. package/dist/plugin-sdk/runtime-whatsapp-login.runtime-B6W989eF.js +10 -0
  70. package/dist/plugin-sdk/runtime-whatsapp-outbound.runtime-c_GDFy37.js +19 -0
  71. package/dist/plugin-sdk/send-CQpMudwO.js +2587 -0
  72. package/dist/plugin-sdk/send-DQHLzVyO.js +414 -0
  73. package/dist/plugin-sdk/send-DTB24bEF.js +3135 -0
  74. package/dist/plugin-sdk/send-DfHadjZ_.js +503 -0
  75. package/dist/plugin-sdk/send-XXlW2iny.js +540 -0
  76. package/dist/plugin-sdk/session-6TF6MyaC.js +169 -0
  77. package/dist/plugin-sdk/skill-commands-CkGeFUMl.js +342 -0
  78. package/dist/plugin-sdk/skills-CBkHBYPq.js +1428 -0
  79. package/dist/plugin-sdk/slash-commands.runtime-CxliuGaP.js +13 -0
  80. package/dist/plugin-sdk/slash-dispatch.runtime-DFaeYlJQ.js +52 -0
  81. package/dist/plugin-sdk/slash-skill-commands.runtime-0M0OLCxq.js +16 -0
  82. package/dist/plugin-sdk/ssrf-cFtplYtS.js +202 -0
  83. package/dist/plugin-sdk/store-5nyxY3WU.js +81 -0
  84. package/dist/plugin-sdk/subagent-registry-runtime-DCtmDwna.js +52 -0
  85. package/dist/plugin-sdk/tables-C47P4GTN.js +55 -0
  86. package/dist/plugin-sdk/target-errors-Blia4S69.js +195 -0
  87. package/dist/plugin-sdk/thinking-Bo2eosVa.js +1206 -0
  88. package/dist/plugin-sdk/tokens-DgNRBwIg.js +52 -0
  89. package/dist/plugin-sdk/tool-images-Gk_-0y2N.js +274 -0
  90. package/dist/plugin-sdk/web-CVxZbXyH.js +56 -0
  91. package/dist/plugin-sdk/whatsapp-actions-Bw0H9g-n.js +80 -0
  92. package/dist/{pw-ai-GcYO6HPE.js → pw-ai-CmphSzHx.js} +1 -1
  93. package/dist/{slash-dispatch.runtime-Dh053pQK.js → slash-dispatch.runtime-131yup2e.js} +6 -6
  94. package/dist/{subagent-registry-runtime-DSi5mnCQ.js → subagent-registry-runtime-DbSf_Je6.js} +6 -6
  95. package/dist/{web-1hWJDzNA.js → web-MR9d7KyB.js} +6 -6
  96. package/package.json +1 -1
  97. package/scripts/create-instance.sh +1 -37
  98. package/scripts/npm_publish.sh +0 -65
  99. package/scripts/npm_publish_backup.sh +185 -0
  100. package/extensions/page-action-cache/dist/actions-executor.d.ts +0 -62
  101. package/extensions/page-action-cache/dist/actions-executor.d.ts.map +0 -1
  102. package/extensions/page-action-cache/dist/actions-executor.js +0 -339
  103. package/extensions/page-action-cache/dist/actions-executor.js.map +0 -1
  104. package/extensions/page-action-cache/dist/cache-invalidator.d.ts +0 -70
  105. package/extensions/page-action-cache/dist/cache-invalidator.d.ts.map +0 -1
  106. package/extensions/page-action-cache/dist/cache-invalidator.js +0 -212
  107. package/extensions/page-action-cache/dist/cache-invalidator.js.map +0 -1
  108. package/extensions/page-action-cache/dist/cache-store.d.ts +0 -80
  109. package/extensions/page-action-cache/dist/cache-store.d.ts.map +0 -1
  110. package/extensions/page-action-cache/dist/cache-store.js +0 -361
  111. package/extensions/page-action-cache/dist/cache-store.js.map +0 -1
  112. package/extensions/page-action-cache/dist/cache-strategy.d.ts +0 -65
  113. package/extensions/page-action-cache/dist/cache-strategy.d.ts.map +0 -1
  114. package/extensions/page-action-cache/dist/cache-strategy.js +0 -237
  115. package/extensions/page-action-cache/dist/cache-strategy.js.map +0 -1
  116. package/extensions/page-action-cache/dist/hooks-entry.d.ts +0 -29
  117. package/extensions/page-action-cache/dist/hooks-entry.d.ts.map +0 -1
  118. package/extensions/page-action-cache/dist/hooks-entry.js +0 -83
  119. package/extensions/page-action-cache/dist/hooks-entry.js.map +0 -1
  120. package/extensions/page-action-cache/dist/hooks.d.ts +0 -10
  121. package/extensions/page-action-cache/dist/hooks.d.ts.map +0 -1
  122. package/extensions/page-action-cache/dist/hooks.js +0 -277
  123. package/extensions/page-action-cache/dist/hooks.js.map +0 -1
  124. package/extensions/page-action-cache/dist/index.d.ts +0 -24
  125. package/extensions/page-action-cache/dist/index.d.ts.map +0 -1
  126. package/extensions/page-action-cache/dist/index.js +0 -34
  127. package/extensions/page-action-cache/dist/index.js.map +0 -1
  128. package/extensions/page-action-cache/dist/scenario-recognizer.d.ts +0 -45
  129. package/extensions/page-action-cache/dist/scenario-recognizer.d.ts.map +0 -1
  130. package/extensions/page-action-cache/dist/scenario-recognizer.js +0 -213
  131. package/extensions/page-action-cache/dist/scenario-recognizer.js.map +0 -1
  132. package/extensions/page-action-cache/dist/security-policy.d.ts +0 -62
  133. package/extensions/page-action-cache/dist/security-policy.d.ts.map +0 -1
  134. package/extensions/page-action-cache/dist/security-policy.js +0 -219
  135. package/extensions/page-action-cache/dist/security-policy.js.map +0 -1
  136. package/extensions/page-action-cache/dist/tools.d.ts +0 -209
  137. package/extensions/page-action-cache/dist/tools.d.ts.map +0 -1
  138. package/extensions/page-action-cache/dist/tools.js +0 -383
  139. package/extensions/page-action-cache/dist/tools.js.map +0 -1
  140. package/extensions/page-action-cache/dist/types.d.ts +0 -336
  141. package/extensions/page-action-cache/dist/types.d.ts.map +0 -1
  142. package/extensions/page-action-cache/dist/types.js +0 -8
  143. package/extensions/page-action-cache/dist/types.js.map +0 -1
  144. package/extensions/page-action-cache/dist/ux-enhancer.d.ts +0 -60
  145. package/extensions/page-action-cache/dist/ux-enhancer.d.ts.map +0 -1
  146. package/extensions/page-action-cache/dist/ux-enhancer.js +0 -218
  147. package/extensions/page-action-cache/dist/ux-enhancer.js.map +0 -1
  148. package/extensions/page-action-cache/dist/variable-resolver.d.ts +0 -28
  149. package/extensions/page-action-cache/dist/variable-resolver.d.ts.map +0 -1
  150. package/extensions/page-action-cache/dist/variable-resolver.js +0 -201
  151. package/extensions/page-action-cache/dist/variable-resolver.js.map +0 -1
  152. package/extensions/page-action-cache/docs/API.md +0 -555
  153. package/extensions/page-action-cache/docs/IMPLEMENTATION.md +0 -1792
  154. package/extensions/page-action-cache/docs/INTEGRATION.md +0 -387
  155. package/extensions/page-action-cache/docs/README.md +0 -183
  156. package/extensions/page-action-cache/index.ts +0 -118
  157. package/extensions/page-action-cache/node_modules/.bin/nlc +0 -21
  158. package/extensions/page-action-cache/node_modules/.bin/node-llama-cpp +0 -21
  159. package/extensions/page-action-cache/node_modules/.bin/openclaw +0 -21
  160. package/extensions/page-action-cache/node_modules/.bin/tsc +0 -21
  161. package/extensions/page-action-cache/node_modules/.bin/tsserver +0 -21
  162. package/extensions/page-action-cache/node_modules/.bin/vitest +0 -21
  163. package/extensions/page-action-cache/openclaw.plugin.json +0 -208
  164. package/extensions/page-action-cache/package.json +0 -74
  165. package/extensions/page-action-cache/scripts/npm_publish.sh +0 -80
  166. package/extensions/page-action-cache/skills/page-action-cache/SKILL.md +0 -216
  167. package/extensions/page-action-cache/src/actions-executor.ts +0 -441
  168. package/extensions/page-action-cache/src/cache-invalidator.ts +0 -271
  169. package/extensions/page-action-cache/src/cache-store.ts +0 -457
  170. package/extensions/page-action-cache/src/cache-strategy.ts +0 -327
  171. package/extensions/page-action-cache/src/hooks-entry.ts +0 -114
  172. package/extensions/page-action-cache/src/hooks.ts +0 -332
  173. package/extensions/page-action-cache/src/index.ts +0 -89
  174. package/extensions/page-action-cache/src/scenario-recognizer.ts +0 -259
  175. package/extensions/page-action-cache/src/security-policy.ts +0 -268
  176. package/extensions/page-action-cache/src/tools.ts +0 -437
  177. package/extensions/page-action-cache/src/types.ts +0 -482
  178. package/extensions/page-action-cache/src/ux-enhancer.ts +0 -266
  179. package/extensions/page-action-cache/src/variable-resolver.ts +0 -258
  180. package/extensions/page-action-cache/tests/actions-executor.test.ts +0 -424
  181. package/extensions/page-action-cache/tests/cache-store.test.ts +0 -267
  182. package/extensions/page-action-cache/tests/integration-test.ts +0 -62
  183. package/extensions/page-action-cache/tests/scenario-recognizer.test.ts +0 -140
  184. package/extensions/page-action-cache/tests/variable-resolver.test.ts +0 -187
  185. package/extensions/page-action-cache/tsconfig.json +0 -39
@@ -1,62 +0,0 @@
1
- /**
2
- * Integration Test
3
- * 集成测试 - 验证扩展的基本功能
4
- */
5
-
6
- import { describe, it, expect, beforeAll } from "vitest";
7
- import { getCacheStore } from "../src/cache-store.js";
8
-
9
- describe("Page Action Cache Integration", () => {
10
- let cacheStore = getCacheStore();
11
-
12
- beforeAll(() => {
13
- // 清空缓存
14
- cacheStore.clear();
15
- });
16
-
17
- describe("Basic Cache Operations", () => {
18
- it("should save and retrieve cache entry", () => {
19
- const url = "https://example.com/login";
20
- const viewport = { width: 1920, height: 1080 };
21
- const actions = [
22
- { type: "type" as const, ref: "#username", text: "test", order: 1 },
23
- { type: "type" as const, ref: "#password", text: "secret", order: 2 },
24
- { type: "click" as const, ref: "#submit", order: 3 },
25
- ];
26
-
27
- const key = cacheStore.set(url, viewport, actions, {
28
- scenario: "login",
29
- cacheLevel: "L3",
30
- });
31
-
32
- expect(key).toBeDefined();
33
- expect(typeof key).toBe("string");
34
-
35
- const entry = cacheStore.get(url, viewport);
36
- expect(entry).not.toBeNull();
37
- expect(entry?.scenario).toBe("login");
38
- expect(entry?.cacheLevel).toBe("L3");
39
- expect(entry?.actions).toEqual(actions);
40
- });
41
-
42
- it("should return null for non-existent cache", () => {
43
- const entry = cacheStore.get("https://example.com/nonexistent", viewport);
44
- expect(entry).toBeNull();
45
- });
46
-
47
- it("should delete cache entry", () => {
48
- const url = "https://example.com/login";
49
- const viewport = { width: 1920, height: 1080 };
50
- const actions = [];
51
- const key = cacheStore.set(url, viewport, actions, {
52
- scenario: "login",
53
- cacheLevel: "L3",
54
- });
55
-
56
- const deleted = cacheStore.delete(url, viewport);
57
- expect(deleted).toBe(true);
58
-
59
- const entry = cacheStore.get(url, viewport);
60
- expect(entry).toBeNull();
61
- });
62
- });
@@ -1,140 +0,0 @@
1
- /**
2
- * Scenario Recognizer Tests
3
- */
4
-
5
- import { describe, it, expect, beforeEach } from "vitest";
6
- import { ScenarioRecognizer } from "../src/scenario-recognizer.js";
7
-
8
- describe("ScenarioRecognizer", () => {
9
- let recognizer: ScenarioRecognizer;
10
-
11
- beforeEach(() => {
12
- recognizer = new ScenarioRecognizer();
13
- });
14
-
15
- describe("matchExactRules", () => {
16
- it("should match login keywords", async () => {
17
- const match = await recognizer.recognize("登录 example.com", "https://example.com");
18
- expect(match).not.toBeNull();
19
- expect(match?.scenario).toBe("login");
20
- expect(match?.confidence).toBeGreaterThanOrEqual(90);
21
- });
22
-
23
- it("should match login URL patterns", async () => {
24
- const match = await recognizer.recognize(
25
- "open page",
26
- "https://example.com/login"
27
- );
28
- expect(match).not.toBeNull();
29
- expect(match?.scenario).toBe("login");
30
- expect(match?.method).toBe("url");
31
- });
32
-
33
- it("should match search keywords", async () => {
34
- const match = await recognizer.recognize("搜索产品", "https://example.com");
35
- expect(match).not.toBeNull();
36
- expect(match?.scenario).toBe("search");
37
- });
38
-
39
- it("should match checkout keywords", async () => {
40
- const match = await recognizer.recognize("结账购物车", "https://example.com/checkout");
41
- expect(match).not.toBeNull();
42
- expect(match?.scenario).toBe("checkout");
43
- });
44
-
45
- it("should match settings keywords", async () => {
46
- const match = await recognizer.recognize("修改设置", "https://example.com/settings");
47
- expect(match).not.toBeNull();
48
- expect(match?.scenario).toBe("settings");
49
- });
50
-
51
- it("should not match unrelated input", async () => {
52
- const match = await recognizer.recognize("do something random", "https://example.com/random");
53
- expect(match).toBeNull();
54
- });
55
- });
56
-
57
- describe("confidence levels", () => {
58
- it("should give high confidence for exact keyword match", async () => {
59
- const match = await recognizer.recognize("登录 account", "https://example.com");
60
- expect(match?.confidence).toBeGreaterThanOrEqual(90);
61
- });
62
-
63
- it("should give lower confidence for URL match", async () => {
64
- const match = await recognizer.recognize("open", "https://example.com/login");
65
- if (match) {
66
- expect(match.confidence).toBeLessThan(90);
67
- expect(match.confidence).toBeGreaterThanOrEqual(80);
68
- }
69
- });
70
- });
71
-
72
- describe("method detection", () => {
73
- it("should use keyword method for keyword matches", async () => {
74
- const match = await recognizer.recognize("登录", "https://example.com");
75
- expect(match?.method).toBe("keyword");
76
- });
77
-
78
- it("should use url method for URL pattern matches", async () => {
79
- const match = await recognizer.recognize("open", "https://example.com/login");
80
- if (match) {
81
- expect(match.method).toBe("url");
82
- }
83
- });
84
- });
85
-
86
- describe("case insensitivity", () => {
87
- it("should match keywords case-insensitively", async () => {
88
- const match1 = await recognizer.recognize("登录", "https://example.com");
89
- const match2 = await recognizer.recognize("LOGIN", "https://example.com");
90
- const match3 = await recognizer.recognize("Login", "https://example.com");
91
-
92
- expect(match1?.scenario).toBe("login");
93
- expect(match2?.scenario).toBe("login");
94
- expect(match3?.scenario).toBe("login");
95
- });
96
-
97
- it("should match URLs case-insensitively", async () => {
98
- const match1 = await recognizer.recognize("open", "https://example.com/Login");
99
- const match2 = await recognizer.recognize("open", "https://example.com/LOGIN");
100
-
101
- expect(match1?.scenario).toBe("login");
102
- expect(match2?.scenario).toBe("login");
103
- });
104
- });
105
-
106
- describe("getRules", () => {
107
- it("should return all rules", () => {
108
- const rules = recognizer.getRules();
109
- expect(rules.length).toBeGreaterThan(0);
110
- expect(rules[0]).toHaveProperty("scenario");
111
- expect(rules[0]).toHaveProperty("keywords");
112
- expect(rules[0]).toHaveProperty("urlPatterns");
113
- expect(rules[0]).toHaveProperty("priority");
114
- expect(rules[0]).toHaveProperty("cacheLevel");
115
- expect(rules[0]).toHaveProperty("confidence");
116
- });
117
- });
118
-
119
- describe("getRecommendedCacheLevel", () => {
120
- it("should return L3 for login", () => {
121
- const level = recognizer.getRecommendedCacheLevel("login");
122
- expect(level).toBe("L3");
123
- });
124
-
125
- it("should return L3 for checkout", () => {
126
- const level = recognizer.getRecommendedCacheLevel("checkout");
127
- expect(level).toBe("L3");
128
- });
129
-
130
- it("should return L1 for screenshot", () => {
131
- const level = recognizer.getRecommendedCacheLevel("screenshot");
132
- expect(level).toBe("L1");
133
- });
134
-
135
- it("should return L1 for unknown scenario", () => {
136
- const level = recognizer.getRecommendedCacheLevel("unknown");
137
- expect(level).toBe("L1");
138
- });
139
- });
140
- });
@@ -1,187 +0,0 @@
1
- /**
2
- * Variable Resolver Tests
3
- */
4
-
5
- import { describe, it, expect, beforeEach } from "vitest";
6
- import { VariableResolver } from "../src/variable-resolver.js";
7
-
8
- describe("VariableResolver", () => {
9
- let resolver: VariableResolver;
10
-
11
- beforeEach(() => {
12
- resolver = new VariableResolver();
13
- });
14
-
15
- describe("login scenario", () => {
16
- it("should extract username and password", () => {
17
- const variables = resolver.resolveVariables(
18
- "登录 example.com,用户名 alice,密码 secret123",
19
- "login"
20
- );
21
-
22
- expect(variables.username).toBe("alice");
23
- expect(variables.password).toBe("secret123");
24
- });
25
-
26
- it("should extract username from different patterns", () => {
27
- const testCases = [
28
- "登录 账号 bob",
29
- "username: charlie",
30
- "user david",
31
- ];
32
-
33
- for (const input of testCases) {
34
- const variables = resolver.resolveVariables(input, "login");
35
- expect(variables.username).toBeDefined();
36
- }
37
- });
38
-
39
- it("should extract email as username", () => {
40
- const variables = resolver.resolveVariables(
41
- "使用 test@example.com 登录",
42
- "login"
43
- );
44
-
45
- expect(variables.username).toBe("test@example.com");
46
- });
47
-
48
- it("should extract password from different patterns", () => {
49
- const testCases = [
50
- "密码 mypassword",
51
- "password: secret",
52
- "pwd: 123456",
53
- ];
54
-
55
- for (const input of testCases) {
56
- const variables = resolver.resolveVariables(input, "login");
57
- expect(variables.password).toBeDefined();
58
- }
59
- });
60
- });
61
-
62
- describe("checkout scenario", () => {
63
- it("should extract payment method", () => {
64
- const variables = resolver.resolveVariables(
65
- "结账,支付方式信用卡",
66
- "checkout"
67
- );
68
-
69
- expect(variables.custom?.paymentMethod).toBe("信用卡");
70
- });
71
-
72
- it("should extract amount", () => {
73
- const variables = resolver.resolveVariables(
74
- "支付 金额100",
75
- "checkout"
76
- );
77
-
78
- expect(variables.custom?.amount).toBe("100");
79
- });
80
- });
81
-
82
- describe("search scenario", () => {
83
- it("should extract search query", () => {
84
- const variables = resolver.resolveVariables("搜索 产品A", "search");
85
-
86
- expect(variables.custom?.query).toBe("产品A");
87
- });
88
-
89
- it("should extract find query", () => {
90
- const variables = resolver.resolveVariables("查找 测试项目", "search");
91
-
92
- expect(variables.custom?.query).toBe("测试项目");
93
- });
94
- });
95
-
96
- describe("settings scenario", () => {
97
- it("should extract key-value pairs", () => {
98
- const variables = resolver.resolveVariables(
99
- "设置 language:zh-CN, theme:dark",
100
- "settings"
101
- );
102
-
103
- expect(variables.custom?.language).toBe("zh-CN");
104
- expect(variables.custom?.theme).toBe("dark");
105
- });
106
- });
107
-
108
- describe("generic resolver", () => {
109
- it("should extract common fields", () => {
110
- const variables = resolver.resolveVariables(
111
- "user:john, email:john@example.com, phone:1234567890",
112
- "unknown"
113
- );
114
-
115
- expect(variables.username).toBe("john");
116
- expect(variables.email).toBe("john@example.com");
117
- expect(variables.phone).toBe("1234567890");
118
- });
119
-
120
- it("should extract verification code", () => {
121
- const variables = resolver.resolveVariables(
122
- "验证码 123456",
123
- "unknown"
124
- );
125
-
126
- expect(variables.code).toBe("123456");
127
- });
128
- });
129
-
130
- describe("validateVariables", () => {
131
- it("should validate login variables", () => {
132
- const validVars = { username: "alice", password: "secret" };
133
- const invalidVars = { password: "secret" }; // Missing username
134
-
135
- expect(resolver.validateVariables(validVars, "login")).toBe(true);
136
- expect(resolver.validateVariables(invalidVars, "login")).toBe(false);
137
- });
138
-
139
- it("should validate login with email", () => {
140
- const validVars = { email: "alice@example.com" };
141
-
142
- expect(resolver.validateVariables(validVars, "login")).toBe(true);
143
- });
144
-
145
- it("should always validate checkout variables", () => {
146
- const vars = { custom: { paymentMethod: "credit" } };
147
-
148
- expect(resolver.validateVariables(vars, "checkout")).toBe(true);
149
- });
150
-
151
- it("should always validate unknown scenarios", () => {
152
- const emptyVars = {};
153
-
154
- expect(resolver.validateVariables(emptyVars, "unknown")).toBe(true);
155
- });
156
- });
157
-
158
- describe("mergeVariables", () => {
159
- it("should merge variables correctly", () => {
160
- const base = {
161
- username: "alice",
162
- custom: { theme: "dark" },
163
- };
164
-
165
- const override = {
166
- password: "secret",
167
- custom: { language: "en" },
168
- };
169
-
170
- const merged = resolver.mergeVariables(base, override);
171
-
172
- expect(merged.username).toBe("alice");
173
- expect(merged.password).toBe("secret");
174
- expect(merged.custom?.theme).toBe("dark");
175
- expect(merged.custom?.language).toBe("en");
176
- });
177
-
178
- it("should override with second object", () => {
179
- const base = { username: "alice" };
180
- const override = { username: "bob" };
181
-
182
- const merged = resolver.mergeVariables(base, override);
183
-
184
- expect(merged.username).toBe("bob");
185
- });
186
- });
187
- });
@@ -1,39 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ES2022",
4
- "module": "ESNext",
5
- "moduleResolution": "node",
6
- "lib": ["ES2022"],
7
- "outDir": "./dist",
8
- "rootDir": "./src",
9
- "declaration": true,
10
- "declarationMap": true,
11
- "sourceMap": true,
12
- "removeComments": false,
13
- "noUnusedLocals": true,
14
- "noUnusedParameters": true,
15
- "noImplicitReturns": true,
16
- "noFallthroughCasesInSwitch": true,
17
- "esModuleInterop": true,
18
- "skipLibCheck": true,
19
- "forceConsistentCasingInFileNames": true,
20
- "strict": true,
21
- "resolveJsonModule": true,
22
- "allowSyntheticDefaultImports": true
23
- },
24
- "include": [
25
- "src/**/*"
26
- ],
27
- "exclude": [
28
- "node_modules",
29
- "dist",
30
- "**/*.test.ts",
31
- "**/*.spec.ts"
32
- ],
33
- "ts-node": {
34
- "compilerOptions": {
35
- "module": "ESNext",
36
- "esModuleInterop": true
37
- }
38
- }
39
- }