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.
- package/dist/{audio-preflight-5FEeDooz.js → audio-preflight-DDBLZBdb.js} +4 -4
- package/dist/{audio-transcription-runner-B-UvoDjZ.js → audio-transcription-runner-DZbSWT9E.js} +1 -1
- package/dist/build-info.json +3 -3
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/{chrome-D45SyhQL.js → chrome-CMU2WVFh.js} +8 -8
- package/dist/{deliver-B9cys0EZ.js → deliver-BXVcFIHL.js} +1 -1
- package/dist/{deliver-runtime-DhaQJ0pI.js → deliver-runtime-DTaIS-1i.js} +3 -3
- package/dist/{deps-send-whatsapp.runtime-DvTL2tzN.js → deps-send-whatsapp.runtime-CIZqFAqb.js} +7 -7
- package/dist/extensionAPI.js +6 -6
- package/dist/{image-DAOPwVXi.js → image-BCVLo0qw.js} +1 -1
- package/dist/{image-runtime-wlCLVvVv.js → image-runtime-DtCKpMPZ.js} +3 -3
- package/dist/{pi-embedded-DYU79yGe.js → pi-embedded-CgQ_W6Xs.js} +24 -24
- package/dist/{pi-embedded-helpers-uTRAmQ4n.js → pi-embedded-helpers-CwuBTKza.js} +3 -3
- package/dist/plugin-sdk/accounts-CJWOBzwB.js +35 -0
- package/dist/plugin-sdk/accounts-DP1-L-QS.js +288 -0
- package/dist/plugin-sdk/accounts-DZhWlEg3.js +46 -0
- package/dist/plugin-sdk/active-listener-B_sLJTXM.js +50 -0
- package/dist/plugin-sdk/api-key-rotation-BRE4X2tf.js +181 -0
- package/dist/plugin-sdk/audio-preflight-DGEUDxxR.js +69 -0
- package/dist/plugin-sdk/audio-transcription-runner-DkoPNPYt.js +2176 -0
- package/dist/plugin-sdk/audit-membership-runtime-DSBHHw7o.js +58 -0
- package/dist/plugin-sdk/bluebubbles.js +2 -2
- package/dist/plugin-sdk/channel-activity-F3d0yUwy.js +94 -0
- package/dist/plugin-sdk/channel-web-QF7EpjeP.js +2256 -0
- package/dist/plugin-sdk/chrome-BXoCyCkY.js +2415 -0
- package/dist/plugin-sdk/commands-registry-t7cXBTfN.js +1125 -0
- package/dist/plugin-sdk/config-BkEnz2Po.js +17913 -0
- package/dist/plugin-sdk/deliver-B6AG_l67.js +1694 -0
- package/dist/plugin-sdk/deliver-runtime-D585kJZc.js +32 -0
- package/dist/plugin-sdk/deps-send-discord.runtime-a_OKY2js.js +23 -0
- package/dist/plugin-sdk/deps-send-imessage.runtime-Baxy9TD4.js +22 -0
- package/dist/plugin-sdk/deps-send-signal.runtime-BwXoCrFl.js +21 -0
- package/dist/plugin-sdk/deps-send-slack.runtime-CLmKjgso.js +19 -0
- package/dist/plugin-sdk/deps-send-telegram.runtime-BKfdBKnZ.js +24 -0
- package/dist/plugin-sdk/deps-send-whatsapp.runtime-BOTwkbx_.js +57 -0
- package/dist/plugin-sdk/diagnostic-CsP-lEkI.js +319 -0
- package/dist/plugin-sdk/errors-DaiAM-yU.js +54 -0
- package/dist/plugin-sdk/fetch-guard-DETCcJzQ.js +156 -0
- package/dist/plugin-sdk/fs-safe-B8y811FR.js +352 -0
- package/dist/plugin-sdk/image-DjTEkYZE.js +2310 -0
- package/dist/plugin-sdk/image-ops-BSiMpAw4.js +584 -0
- package/dist/plugin-sdk/image-runtime-6xPp8m5a.js +25 -0
- package/dist/plugin-sdk/index.js +50 -50
- package/dist/plugin-sdk/ir-DQ7_HbvK.js +1296 -0
- package/dist/plugin-sdk/irc.js +2 -2
- package/dist/plugin-sdk/local-roots-BUP4YBmR.js +186 -0
- package/dist/plugin-sdk/logger-CZY9KIoY.js +1163 -0
- package/dist/plugin-sdk/login-BxEKLlCo.js +57 -0
- package/dist/plugin-sdk/login-qr-BQIpMPr9.js +320 -0
- package/dist/plugin-sdk/manager-I6KbPihW.js +3917 -0
- package/dist/plugin-sdk/manager-runtime-CFfYYWIQ.js +15 -0
- package/dist/plugin-sdk/outbound-NS6UHnB6.js +212 -0
- package/dist/plugin-sdk/outbound-attachment-Dy6fyf6H.js +19 -0
- package/dist/plugin-sdk/path-alias-guards-DBjLbIX_.js +43 -0
- package/dist/plugin-sdk/paths-vTM3Lh3X.js +166 -0
- package/dist/plugin-sdk/pi-embedded-helpers-1R1gu7eX.js +9627 -0
- package/dist/plugin-sdk/pi-model-discovery-runtime-Do9o-dUd.js +8 -0
- package/dist/plugin-sdk/pi-model-discovery-v-XPUOOf.js +134 -0
- package/dist/plugin-sdk/pi-tools.before-tool-call.runtime-D4sFsIks.js +354 -0
- package/dist/plugin-sdk/plugins-DeBZB9l_.js +864 -0
- package/dist/plugin-sdk/proxy-fetch-ChxOhWF4.js +38 -0
- package/dist/plugin-sdk/pw-ai-DEOmCSSC.js +1938 -0
- package/dist/plugin-sdk/qmd-manager-HyYKoEch.js +1448 -0
- package/dist/plugin-sdk/query-expansion-CeyKUeDW.js +1011 -0
- package/dist/plugin-sdk/redact-DjVX-1N3.js +319 -0
- package/dist/plugin-sdk/reply-DAo_Jt8K.js +97916 -0
- package/dist/plugin-sdk/resolve-outbound-target-B42qgQS9.js +40 -0
- package/dist/plugin-sdk/run-with-concurrency-Bt_ks0Qa.js +1994 -0
- package/dist/plugin-sdk/runtime-whatsapp-login.runtime-B6W989eF.js +10 -0
- package/dist/plugin-sdk/runtime-whatsapp-outbound.runtime-c_GDFy37.js +19 -0
- package/dist/plugin-sdk/send-CQpMudwO.js +2587 -0
- package/dist/plugin-sdk/send-DQHLzVyO.js +414 -0
- package/dist/plugin-sdk/send-DTB24bEF.js +3135 -0
- package/dist/plugin-sdk/send-DfHadjZ_.js +503 -0
- package/dist/plugin-sdk/send-XXlW2iny.js +540 -0
- package/dist/plugin-sdk/session-6TF6MyaC.js +169 -0
- package/dist/plugin-sdk/skill-commands-CkGeFUMl.js +342 -0
- package/dist/plugin-sdk/skills-CBkHBYPq.js +1428 -0
- package/dist/plugin-sdk/slash-commands.runtime-CxliuGaP.js +13 -0
- package/dist/plugin-sdk/slash-dispatch.runtime-DFaeYlJQ.js +52 -0
- package/dist/plugin-sdk/slash-skill-commands.runtime-0M0OLCxq.js +16 -0
- package/dist/plugin-sdk/ssrf-cFtplYtS.js +202 -0
- package/dist/plugin-sdk/store-5nyxY3WU.js +81 -0
- package/dist/plugin-sdk/subagent-registry-runtime-DCtmDwna.js +52 -0
- package/dist/plugin-sdk/tables-C47P4GTN.js +55 -0
- package/dist/plugin-sdk/target-errors-Blia4S69.js +195 -0
- package/dist/plugin-sdk/thinking-Bo2eosVa.js +1206 -0
- package/dist/plugin-sdk/tokens-DgNRBwIg.js +52 -0
- package/dist/plugin-sdk/tool-images-Gk_-0y2N.js +274 -0
- package/dist/plugin-sdk/web-CVxZbXyH.js +56 -0
- package/dist/plugin-sdk/whatsapp-actions-Bw0H9g-n.js +80 -0
- package/dist/{pw-ai-GcYO6HPE.js → pw-ai-CmphSzHx.js} +1 -1
- package/dist/{slash-dispatch.runtime-Dh053pQK.js → slash-dispatch.runtime-131yup2e.js} +6 -6
- package/dist/{subagent-registry-runtime-DSi5mnCQ.js → subagent-registry-runtime-DbSf_Je6.js} +6 -6
- package/dist/{web-1hWJDzNA.js → web-MR9d7KyB.js} +6 -6
- package/package.json +1 -1
- package/scripts/create-instance.sh +1 -37
- package/scripts/npm_publish.sh +0 -65
- package/scripts/npm_publish_backup.sh +185 -0
- package/extensions/page-action-cache/dist/actions-executor.d.ts +0 -62
- package/extensions/page-action-cache/dist/actions-executor.d.ts.map +0 -1
- package/extensions/page-action-cache/dist/actions-executor.js +0 -339
- package/extensions/page-action-cache/dist/actions-executor.js.map +0 -1
- package/extensions/page-action-cache/dist/cache-invalidator.d.ts +0 -70
- package/extensions/page-action-cache/dist/cache-invalidator.d.ts.map +0 -1
- package/extensions/page-action-cache/dist/cache-invalidator.js +0 -212
- package/extensions/page-action-cache/dist/cache-invalidator.js.map +0 -1
- package/extensions/page-action-cache/dist/cache-store.d.ts +0 -80
- package/extensions/page-action-cache/dist/cache-store.d.ts.map +0 -1
- package/extensions/page-action-cache/dist/cache-store.js +0 -361
- package/extensions/page-action-cache/dist/cache-store.js.map +0 -1
- package/extensions/page-action-cache/dist/cache-strategy.d.ts +0 -65
- package/extensions/page-action-cache/dist/cache-strategy.d.ts.map +0 -1
- package/extensions/page-action-cache/dist/cache-strategy.js +0 -237
- package/extensions/page-action-cache/dist/cache-strategy.js.map +0 -1
- package/extensions/page-action-cache/dist/hooks-entry.d.ts +0 -29
- package/extensions/page-action-cache/dist/hooks-entry.d.ts.map +0 -1
- package/extensions/page-action-cache/dist/hooks-entry.js +0 -83
- package/extensions/page-action-cache/dist/hooks-entry.js.map +0 -1
- package/extensions/page-action-cache/dist/hooks.d.ts +0 -10
- package/extensions/page-action-cache/dist/hooks.d.ts.map +0 -1
- package/extensions/page-action-cache/dist/hooks.js +0 -277
- package/extensions/page-action-cache/dist/hooks.js.map +0 -1
- package/extensions/page-action-cache/dist/index.d.ts +0 -24
- package/extensions/page-action-cache/dist/index.d.ts.map +0 -1
- package/extensions/page-action-cache/dist/index.js +0 -34
- package/extensions/page-action-cache/dist/index.js.map +0 -1
- package/extensions/page-action-cache/dist/scenario-recognizer.d.ts +0 -45
- package/extensions/page-action-cache/dist/scenario-recognizer.d.ts.map +0 -1
- package/extensions/page-action-cache/dist/scenario-recognizer.js +0 -213
- package/extensions/page-action-cache/dist/scenario-recognizer.js.map +0 -1
- package/extensions/page-action-cache/dist/security-policy.d.ts +0 -62
- package/extensions/page-action-cache/dist/security-policy.d.ts.map +0 -1
- package/extensions/page-action-cache/dist/security-policy.js +0 -219
- package/extensions/page-action-cache/dist/security-policy.js.map +0 -1
- package/extensions/page-action-cache/dist/tools.d.ts +0 -209
- package/extensions/page-action-cache/dist/tools.d.ts.map +0 -1
- package/extensions/page-action-cache/dist/tools.js +0 -383
- package/extensions/page-action-cache/dist/tools.js.map +0 -1
- package/extensions/page-action-cache/dist/types.d.ts +0 -336
- package/extensions/page-action-cache/dist/types.d.ts.map +0 -1
- package/extensions/page-action-cache/dist/types.js +0 -8
- package/extensions/page-action-cache/dist/types.js.map +0 -1
- package/extensions/page-action-cache/dist/ux-enhancer.d.ts +0 -60
- package/extensions/page-action-cache/dist/ux-enhancer.d.ts.map +0 -1
- package/extensions/page-action-cache/dist/ux-enhancer.js +0 -218
- package/extensions/page-action-cache/dist/ux-enhancer.js.map +0 -1
- package/extensions/page-action-cache/dist/variable-resolver.d.ts +0 -28
- package/extensions/page-action-cache/dist/variable-resolver.d.ts.map +0 -1
- package/extensions/page-action-cache/dist/variable-resolver.js +0 -201
- package/extensions/page-action-cache/dist/variable-resolver.js.map +0 -1
- package/extensions/page-action-cache/docs/API.md +0 -555
- package/extensions/page-action-cache/docs/IMPLEMENTATION.md +0 -1792
- package/extensions/page-action-cache/docs/INTEGRATION.md +0 -387
- package/extensions/page-action-cache/docs/README.md +0 -183
- package/extensions/page-action-cache/index.ts +0 -118
- package/extensions/page-action-cache/node_modules/.bin/nlc +0 -21
- package/extensions/page-action-cache/node_modules/.bin/node-llama-cpp +0 -21
- package/extensions/page-action-cache/node_modules/.bin/openclaw +0 -21
- package/extensions/page-action-cache/node_modules/.bin/tsc +0 -21
- package/extensions/page-action-cache/node_modules/.bin/tsserver +0 -21
- package/extensions/page-action-cache/node_modules/.bin/vitest +0 -21
- package/extensions/page-action-cache/openclaw.plugin.json +0 -208
- package/extensions/page-action-cache/package.json +0 -74
- package/extensions/page-action-cache/scripts/npm_publish.sh +0 -80
- package/extensions/page-action-cache/skills/page-action-cache/SKILL.md +0 -216
- package/extensions/page-action-cache/src/actions-executor.ts +0 -441
- package/extensions/page-action-cache/src/cache-invalidator.ts +0 -271
- package/extensions/page-action-cache/src/cache-store.ts +0 -457
- package/extensions/page-action-cache/src/cache-strategy.ts +0 -327
- package/extensions/page-action-cache/src/hooks-entry.ts +0 -114
- package/extensions/page-action-cache/src/hooks.ts +0 -332
- package/extensions/page-action-cache/src/index.ts +0 -89
- package/extensions/page-action-cache/src/scenario-recognizer.ts +0 -259
- package/extensions/page-action-cache/src/security-policy.ts +0 -268
- package/extensions/page-action-cache/src/tools.ts +0 -437
- package/extensions/page-action-cache/src/types.ts +0 -482
- package/extensions/page-action-cache/src/ux-enhancer.ts +0 -266
- package/extensions/page-action-cache/src/variable-resolver.ts +0 -258
- package/extensions/page-action-cache/tests/actions-executor.test.ts +0 -424
- package/extensions/page-action-cache/tests/cache-store.test.ts +0 -267
- package/extensions/page-action-cache/tests/integration-test.ts +0 -62
- package/extensions/page-action-cache/tests/scenario-recognizer.test.ts +0 -140
- package/extensions/page-action-cache/tests/variable-resolver.test.ts +0 -187
- 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
|
-
}
|